@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
3 lines (2 loc) • 7.53 kB
JavaScript
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.19/LICENSE.txt */
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}from"./errorSupport.js";import{sqlCompare as r}from"./sqlCompareUtils.js";import{isDateTime as l,isDateOnly as u,isTimeOnly as s,isTimestampOffset as m,convertToExecutingTimeZone as o,parseTimestamp as i,parseTime as c}from"./sqlDateParsingUtils.js";import{TimeOnly as f}from"./TimeOnly.js";import{isString as h,isDate as w}from"../../support/guards.js";import{DateTime as P}from"luxon";function C(a,e,n){const r=T[a.toLowerCase()];if(null==r)throw new t("FunctionNotRecognized");if(e.length<r.minParams||e.length>r.maxParams)throw new t("InvalidParameterCount",{name:a.toUpperCase()});return r.evaluate(e,n)}function E(a,e){const n=T[a.toLowerCase()];return null!=n&&e>=n.minParams&&e<=n.maxParams}function p(a){return!w(a)&&(!u(a)&&(!l(a)&&(!s(a)&&!m(a))))}function g(a){return u(a)||s(a)?a.toString():m(a)?a.toSQLValue():l(a)?0===a.millisecond?a.toFormat("yyyy-LL-dd HH:mm:ss"):a.toSQL({includeOffset:!1}):w(a)?g(P.fromJSDate(a)):a.toString()}function M(a){if(w(a))return n.fromDateJS(a);if(l(a))return n.fromParts(a.year,a.month,a.day);if(u(a))return a;if(s(a))throw new t("CannotCastValue");if(m(a)){if(null===n.fromParts(a.year,a.month,a.day))throw new t("CannotCastValue")}if(h(a)){const e=n.fromReader(a);if(null!==e&&e.isValid)return e}throw new t("CannotCastValue")}function O(a,e){if(w(a))return o(a,e);if(l(a))return a;if(u(a))return a.toDateTimeLuxon("unknown");if(s(a))throw new t("CannotCastValue");if(m(a))return a;if(h(a))return i(a,"unknown");throw new t("CannotCastValue")}function x(a){if(w(a))return f.fromDateJS(a);if(l(a))return f.fromDateTime(a);if(u(a))throw new t("CannotCastValue");if(s(a))return a;if(m(a))return f.fromSqlTimeStampOffset(a);if(h(a))return c(a);throw new t("CannotCastValue")}const T={extract:{minParams:2,maxParams:2,evaluate:([a,e])=>{if(null==e)return null;if(w(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 P.fromJSDate(e,{zone:"system"}).weekday;case"DOY":return P.fromJSDate(e,{zone:"system"}).ordinal;case"WEEK":return P.fromJSDate(e,{zone:"system"}).weekNumber}else if(l(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("InvalidFunctionParameters",{function:"EXTRACT"});case"DOW":return e.weekday;case"DOY":return e.ordinal;case"WEEK":return e.weekNumber}else if(u(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("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(s(e))switch(a.toUpperCase()){case"SECOND":return e.second;case"MINUTE":return e.minute;case"HOUR":return e.hour}else if(m(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("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,r=n?a[1]:" ",l=n?a[2]:a[1];if(null==r||null==l)return null;const u=`(${e(r)})`;switch(a[0]){case"BOTH":return l.replaceAll(new RegExp(`^${u}*|${u}*$`,"g"),"");case"LEADING":return l.replaceAll(new RegExp(`^${u}*`,"g"),"");case"TRAILING":return l.replaceAll(new RegExp(`${u}*$`,"g"),"")}throw new t("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=>h(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=>r(a[0],a[1],"=")?null:a[0]},cast:{minParams:2,maxParams:2,evaluate:(a,e)=>{const n=a[0],r=a[1];if(null===n)return null;switch(r.type){case"integer":{if(!p(n))throw new t("CannotCastValue");const a=parseInt(n,10);if(isNaN(a))throw new t("CannotCastValue");return a}case"smallint":{if(!p(n))throw new t("CannotCastValue");const a=parseInt(n,10);if(isNaN(a))throw new t("CannotCastValue");if(a>32767||a<-32767)throw new t("CannotCastValue");return a}case"float":case"real":{if(!p(n))throw new t("CannotCastValue");const a=parseFloat(n);if(isNaN(a))throw new t("CannotCastValue");return a}case"time":return x(n);case"date":return M(n);case"timestamp":return O(n,e);case"varchar":{const a=g(n);if(a.length>r.size)throw new t("CannotCastValue");return a}default:throw new t("InvalidDataType")}}}};export{C as evaluateFunction,E as isStandardized};