UNPKG

@arcgis/core

Version:

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

6 lines (5 loc) 7.65 kB
/* All material copyright ESRI, All Rights Reserved, unless otherwise specified. See https://js.arcgis.com/4.33/esri/copyright.txt for details. */ import{decimalAdjust as a}from"../mathUtils.js";import{escapeRegExpString as e}from"../string.js";import{DateOnly as n}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{isString as w,isDate as P}from"../../support/guards.js";import{DateTime as C}from"luxon";function E(a,e,n){const l=v[a.toLowerCase()];if(null==l)throw new t(r.FunctionNotRecognized);if(e.length<l.minParams||e.length>l.maxParams)throw new t(r.InvalidParameterCount,{name:a.toUpperCase()});return l.evaluate(e,n)}function p(a,e){const n=v[a.toLowerCase()];return null!=n&&e>=n.minParams&&e<=n.maxParams}function g(a){return!P(a)&&(!s(a)&&(!u(a)&&(!m(a)&&!o(a))))}function M(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)?M(C.fromJSDate(a)):a.toString()}function O(a){if(P(a))return n.fromDateJS(a);if(u(a))return n.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===n.fromParts(a.year,a.month,a.day))throw new t(r.CannotCastValue)}if(w(a)){const e=n.fromReader(a);if(null!==e&&e.isValid)return e}throw new t(r.CannotCastValue)}function x(a,e,n){if(P(a))return i(a,e);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",n);throw new t(r.CannotCastValue)}function T(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 v={extract:{minParams:2,maxParams:2,evaluate:([a,e])=>{if(null==e)return null;if(P(e))switch(a.toUpperCase()){case"SECOND":return e.getSeconds();case"MINUTE":return e.getMinutes();case"HOUR":return e.getHours();case"DAY":return e.getDate();case"MONTH":return e.getMonth()+1;case"YEAR":return e.getFullYear();case"TIMEZONE_HOUR":case"TIMEZONE_MINUTE":return 0;case"DOW":return C.fromJSDate(e,{zone:"system"}).weekday;case"DOY":return C.fromJSDate(e,{zone:"system"}).ordinal;case"WEEK":return C.fromJSDate(e,{zone:"system"}).weekNumber}else if(u(e))switch(a.toUpperCase()){case"SECOND":return e.second;case"MINUTE":return e.minute;case"HOUR":return e.hour;case"DAY":return e.day;case"MONTH":return e.month;case"YEAR":return e.year;case"TIMEZONE_HOUR":case"TIMEZONE_MINUTE":throw new t(r.InvalidFunctionParameters,{function:"EXTRACT"});case"DOW":return e.weekday;case"DOY":return e.ordinal;case"WEEK":return e.weekNumber}else if(s(e))switch(a.toUpperCase()){case"DAY":return e.day;case"MONTH":return e.month;case"YEAR":return e.year;case"TIMEZONE_HOUR":case"TIMEZONE_MINUTE":throw new t(r.InvalidFunctionParameters,{function:"EXTRACT"});case"DOW":return e.toDateTime("unknown").weekday;case"DOY":return e.toDateTime("unknown").ordinal;case"WEEK":return e.toDateTime("unknown").weekNumber}else if(m(e))switch(a.toUpperCase()){case"SECOND":return e.second;case"MINUTE":return e.minute;case"HOUR":return e.hour}else if(o(e))switch(a.toUpperCase()){case"SECOND":return e.second;case"MINUTE":return e.minute;case"HOUR":return e.hour;case"DAY":return e.day;case"MONTH":return e.month;case"YEAR":return e.year;case"TIMEZONE_HOUR":return e.timezoneOffsetHour;case"TIMEZONE_MINUTE":return e.timezoneOffsetMinutes;case"DOW":return e.toDateTime().weekday;case"DOY":return e.toDateTime().ordinal;case"WEEK":return e.toDateTime().weekNumber}throw new t(r.InvalidFunctionParameters,{function:"EXTRACT"})}},substring:{minParams:2,maxParams:3,evaluate:a=>{if(2===a.length){const[e,n]=a;return null==e||null==n?null:e.toString().substring(n-1)}if(3===a.length){const[e,n,t]=a;return null==e||null==n||null==t?null:t<=0?"":e.toString().substring(n-1,n+t-1)}}},position:{minParams:2,maxParams:2,evaluate:([a,e])=>null==a||null==e?null:e.indexOf(a)+1},trim:{minParams:2,maxParams:3,evaluate:a=>{const n=3===a.length,l=n?a[1]:" ",u=n?a[2]:a[1];if(null==l||null==u)return null;const s=`(${e(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 e=a[0],n=2===a.length?10**a[1]:1;return null==e?null:Math.round(e*n)/n}},truncate:{minParams:1,maxParams:2,evaluate:e=>null==e[0]?null:1===e.length||0===e[1]?Math.trunc(e[0]):a("trunc",e[0],-Number(e[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 e="";for(let n=0;n<a.length;n++){if(null==a[n])return null;e+=a[n].toString()}return e}},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 e of a)if(null!==e)return e;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=>l(a[0],a[1],"=")?null:a[0]},cast:{minParams:2,maxParams:2,evaluate:(a,e)=>{const n=a[0],l=a[1];if(null===n)return null;switch(l.type){case"integer":{if(!g(n))throw new t(r.CannotCastValue);const a=parseInt(n,10);if(isNaN(a))throw new t(r.CannotCastValue);return a}case"smallint":{if(!g(n))throw new t(r.CannotCastValue);const a=parseInt(n,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(!g(n))throw new t(r.CannotCastValue);const a=parseFloat(n);if(isNaN(a))throw new t(r.CannotCastValue);return a}case"time":return T(n);case"date":return O(n);case"timestamp":return x(n,e,!0===l.withtimezone);case"varchar":{const a=M(n);if(a.length>l.size)throw new t(r.CannotCastValue);return a}default:throw new t(r.InvalidDataType)}}}};export{E as evaluateFunction,p as isStandardized};