UNPKG

@arcgis/core

Version:

ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API

6 lines (5 loc) 7.12 kB
/* All material copyright ESRI, All Rights Reserved, unless otherwise specified. See https://js.arcgis.com/4.32/esri/copyright.txt for details. */ import{decimalAdjust as a}from"../mathUtils.js";import{escapeRegExpString as n}from"../string.js";import{DateOnly as e}from"./DateOnly.js";import{SqlError as t,SqlErrorCodes as r}from"./errorSupport.js";import{sqlCompare as l}from"./sqlCompareUtils.js";import{isDateTime as u,isDateOnly as s,isTimeOnly as m,isTimestampOffset as o,convertToExecutingTimeZone as i,parseTimestamp as c,parseTime as f}from"./sqlDateParsingUtils.js";import{TimeOnly as h}from"./TimeOnly.js";import{isDate as P,isString as w}from"../../support/guards.js";import{DateTime as C}from"luxon";function p(a,n,e){const l=T[a.toLowerCase()];if(null==l)throw new t(r.FunctionNotRecognized);if(n.length<l.minParams||n.length>l.maxParams)throw new t(r.InvalidParameterCount,{name:a.toUpperCase()});return l.evaluate(n,e)}function g(a,n){const e=T[a.toLowerCase()];return null!=e&&n>=e.minParams&&n<=e.maxParams}function M(a){return!P(a)&&(!s(a)&&(!u(a)&&(!m(a)&&!o(a))))}function x(a){return s(a)||m(a)?a.toString():o(a)?a.toSQLValue():u(a)?0===a.millisecond?a.toFormat("yyyy-LL-dd HH:mm:ss"):a.toSQL({includeOffset:!1}):P(a)?x(C.fromJSDate(a)):a.toString()}function E(a){if(P(a))return e.fromDateJS(a);if(u(a))return e.fromParts(a.year,a.month,a.day);if(s(a))return a;if(m(a))throw new t(r.CannotCastValue);if(o(a)){if(null===e.fromParts(a.year,a.month,a.day))throw new t(r.CannotCastValue)}if(w(a)){const n=e.fromReader(a);if(null!==n&&n.isValid)return n}throw new t(r.CannotCastValue)}function v(a,n,e){if(P(a))return i(a,n);if(u(a))return a;if(s(a))return a.toDateTimeLuxon("unknown");if(m(a))throw new t(r.CannotCastValue);if(o(a))return a;if(w(a))return c(a,"unknown",e);throw new t(r.CannotCastValue)}function N(a){if(P(a))return h.fromDateJS(a);if(u(a))return h.fromDateTime(a);if(s(a))throw new t(r.CannotCastValue);if(m(a))return a;if(o(a))return h.fromSqlTimeStampOffset(a);if(w(a))return f(a);throw new t(r.CannotCastValue)}const T={extract:{minParams:2,maxParams:2,evaluate:([a,n])=>{if(null==n)return null;if(P(n))switch(a.toUpperCase()){case"SECOND":return n.getSeconds();case"MINUTE":return n.getMinutes();case"HOUR":return n.getHours();case"DAY":return n.getDate();case"MONTH":return n.getMonth()+1;case"YEAR":return n.getFullYear();case"TIMEZONE_HOUR":case"TIMEZONE_MINUTE":return 0}else if(u(n))switch(a.toUpperCase()){case"SECOND":return n.second;case"MINUTE":return n.minute;case"HOUR":return n.hour;case"DAY":return n.day;case"MONTH":return n.month;case"YEAR":return n.year;case"TIMEZONE_HOUR":case"TIMEZONE_MINUTE":throw new t(r.InvalidFunctionParameters,{function:"EXTRACT"})}else if(s(n))switch(a.toUpperCase()){case"DAY":return n.day;case"MONTH":return n.month;case"YEAR":return n.year;case"TIMEZONE_HOUR":case"TIMEZONE_MINUTE":throw new t(r.InvalidFunctionParameters,{function:"EXTRACT"})}else if(m(n))switch(a.toUpperCase()){case"SECOND":return n.second;case"MINUTE":return n.minute;case"HOUR":return n.hour}else if(o(n))switch(a.toUpperCase()){case"SECOND":return n.second;case"MINUTE":return n.minute;case"HOUR":return n.hour;case"DAY":return n.day;case"MONTH":return n.month;case"YEAR":return n.year;case"TIMEZONE_HOUR":return n.timezoneOffsetHour;case"TIMEZONE_MINUTE":return n.timezoneOffsetMinutes}throw new t(r.InvalidFunctionParameters,{function:"EXTRACT"})}},substring:{minParams:2,maxParams:3,evaluate:a=>{if(2===a.length){const[n,e]=a;return null==n||null==e?null:n.toString().substring(e-1)}if(3===a.length){const[n,e,t]=a;return null==n||null==e||null==t?null:t<=0?"":n.toString().substring(e-1,e+t-1)}}},position:{minParams:2,maxParams:2,evaluate:([a,n])=>null==a||null==n?null:n.indexOf(a)+1},trim:{minParams:2,maxParams:3,evaluate:a=>{const e=3===a.length,l=e?a[1]:" ",u=e?a[2]:a[1];if(null==l||null==u)return null;const s=`(${n(l)})`;switch(a[0]){case"BOTH":return u.replaceAll(new RegExp(`^${s}*|${s}*$`,"g"),"");case"LEADING":return u.replaceAll(new RegExp(`^${s}*`,"g"),"");case"TRAILING":return u.replaceAll(new RegExp(`${s}*$`,"g"),"")}throw new t(r.InvalidFunctionParameters,{function:"TRIM"})}},abs:{minParams:1,maxParams:1,evaluate:a=>null==a[0]?null:Math.abs(a[0])},ceiling:{minParams:1,maxParams:1,evaluate:a=>null==a[0]?null:Math.ceil(a[0])},floor:{minParams:1,maxParams:1,evaluate:a=>null==a[0]?null:Math.floor(a[0])},log:{minParams:1,maxParams:1,evaluate:a=>null==a[0]?null:Math.log(a[0])},log10:{minParams:1,maxParams:1,evaluate:a=>null==a[0]?null:Math.log(a[0])*Math.LOG10E},sin:{minParams:1,maxParams:1,evaluate:a=>null==a[0]?null:Math.sin(a[0])},cos:{minParams:1,maxParams:1,evaluate:a=>null==a[0]?null:Math.cos(a[0])},tan:{minParams:1,maxParams:1,evaluate:a=>null==a[0]?null:Math.tan(a[0])},asin:{minParams:1,maxParams:1,evaluate:a=>null==a[0]?null:Math.asin(a[0])},acos:{minParams:1,maxParams:1,evaluate:a=>null==a[0]?null:Math.acos(a[0])},atan:{minParams:1,maxParams:1,evaluate:a=>null==a[0]?null:Math.atan(a[0])},sign:{minParams:1,maxParams:1,evaluate:a=>null==a[0]?null:a[0]>0?1:a[0]<0?-1:0},power:{minParams:2,maxParams:2,evaluate:a=>null==a[0]||null==a[1]?null:a[0]**a[1]},mod:{minParams:2,maxParams:2,evaluate:a=>null==a[0]||null==a[1]?null:a[0]%a[1]},round:{minParams:1,maxParams:2,evaluate:a=>{const n=a[0],e=2===a.length?10**a[1]:1;return null==n?null:Math.round(n*e)/e}},truncate:{minParams:1,maxParams:2,evaluate:n=>null==n[0]?null:1===n.length||0===n[1]?Math.trunc(n[0]):a("trunc",n[0],-Number(n[1]))},char_length:{minParams:1,maxParams:1,evaluate:a=>w(a[0])?a[0].length:0},concat:{minParams:1,maxParams:1/0,evaluate:a=>{let n="";for(let e=0;e<a.length;e++){if(null==a[e])return null;n+=a[e].toString()}return n}},lower:{minParams:1,maxParams:1,evaluate:a=>null==a[0]?null:a[0].toString().toLowerCase()},upper:{minParams:1,maxParams:1,evaluate:a=>null==a[0]?null:a[0].toString().toUpperCase()},coalesce:{minParams:1,maxParams:1/0,evaluate:a=>{for(const n of a)if(null!==n)return n;return null}},cosh:{minParams:1,maxParams:1,evaluate:a=>null==a[0]?null:Math.cosh(a[0])},sinh:{minParams:1,maxParams:1,evaluate:a=>null==a[0]?null:Math.sinh(a[0])},tanh:{minParams:1,maxParams:1,evaluate:a=>null==a[0]?null:Math.tanh(a[0])},nullif:{minParams:2,maxParams:2,evaluate:(a,n)=>l(a[0],a[1],"=")?null:a[0]},cast:{minParams:2,maxParams:2,evaluate:(a,n)=>{const e=a[0],l=a[1];if(null===e)return null;switch(l.type){case"integer":{if(!M(e))throw new t(r.CannotCastValue);const a=parseInt(e,10);if(isNaN(a))throw new t(r.CannotCastValue);return a}case"smallint":{if(!M(e))throw new t(r.CannotCastValue);const a=parseInt(e,10);if(isNaN(a))throw new t(r.CannotCastValue);if(a>32767||a<-32767)throw new t(r.CannotCastValue);return a}case"float":case"real":{if(!M(e))throw new t(r.CannotCastValue);const a=parseFloat(e);if(isNaN(a))throw new t(r.CannotCastValue);return a}case"time":return N(e);case"date":return E(e);case"timestamp":return v(e,n,!0===l.withtimezone);case"varchar":{const a=x(e);if(a.length>l.size)throw new t(r.CannotCastValue);return a}default:throw new t(r.InvalidDataType)}}}};export{p as evaluateFunction,g as isStandardized};