featuresetbase.js 20 KB

12345
  1. /*
  2. All material copyright ESRI, All Rights Reserved, unless otherwise specified.
  3. See https://js.arcgis.com/4.25/esri/copyright.txt for details.
  4. */
  5. import e from"../ArcadePortal.js";import t from"../Dictionary.js";import{ArcadeExecutionError as n,ExecutionErrorCodes as i}from"../executionError.js";import a from"../Feature.js";import r from"../featureSetCollection.js";import{getPortal as s,lookupUser as o,convertToFeatureSet as l,constructFeatureSetFromPortalItem as f,constructFeatureSet as c,constructFeatureSetFromRelationship as u,constructFeatureSetFromUrl as d,constructAssociationMetaDataFeatureSetFromUrl as m}from"../featureSetUtils.js";import p from"../ImmutableArray.js";import{y,A as g,j as w,T as h,h as I,m as F,w as E,c as D,x as b,i as A,g as N,X as x,L as S}from"../../chunks/languageUtils.js";import{SqlExpressionAdapted as v,StringToCodeAdapted as $,FieldRename as L,AdaptedFeatureSet as T,OriginalField as j}from"../featureset/actions/Adapted.js";import P from"../featureset/actions/AttributeFilter.js";import R from"../featureset/actions/OrderBy.js";import O from"../featureset/actions/Top.js";import C from"../featureset/sources/Empty.js";import M from"../featureset/sources/FeatureLayerMemory.js";import k from"../featureset/support/OrderbyClause.js";import{cloneField as H}from"../featureset/support/shared.js";import{isSingleField as z}from"../featureset/support/sqlUtils.js";import{calculateStat as G}from"./fieldStats.js";import{isPromiseLike as U}from"../../core/promiseUtils.js";import{WhereClause as W}from"../../core/sql/WhereClause.js";import _ from"../../layers/FeatureLayer.js";import B from"../../layers/support/Field.js";function J(e,t,n,i){if(1===i.length){if(F(i[0]))return G(e,i[0],-1);if(b(i[0]))return G(e,i[0].toArray(),-1)}return G(e,i,-1)}async function V(e,t,n){const i=e.getVariables();if(i.length>0){const a=[];for(let e=0;e<i.length;e++){const r={name:i[e]};a.push(await t.evaluateIdentifier(n,r))}const r={};for(let e=0;e<i.length;e++)r[i[e]]=a[e];return e.parameters=r,e}return e}function q(e,t,n=null){for(const i in e)if(i.toLowerCase()===t.toLowerCase())return e[i];return n}function K(e){if(null===e)return null;const t={type:q(e,"type",""),name:q(e,"name","")};if("range"===t.type)t.range=q(e,"range",[]);else{t.codedValues=[];for(const n of q(e,"codedValues",[]))t.codedValues.push({name:q(n,"name",""),code:q(n,"code",null)})}return t}function X(e){if(null===e)return null;const t={},n=q(e,"wkt",null);null!==n&&(t.wkt=n);const i=q(e,"wkid",null);return null!==i&&(t.wkid=i),t}function Y(e){if(null===e)return null;const t={hasZ:q(e,"hasz",!1),hasM:q(e,"hasm",!1)},n=q(e,"spatialreference",null);n&&(t.spatialReference=X(n));const i=q(e,"x",null);if(null!==i)return t.x=i,t.y=q(e,"y",null),t;const a=q(e,"rings",null);if(null!==a)return t.rings=a,t;const r=q(e,"paths",null);if(null!==r)return t.paths=r,t;const s=q(e,"points",null);if(null!==s)return t.points=s,t;for(const o of["xmin","xmax","ymin","ymax","zmin","zmax","mmin","mmax"]){const n=q(e,o,null);null!==n&&(t[o]=n)}return t}function Z(e,t){for(const n of t)if(n===e)return!0;return!1}function Q(e){return!!e.layerDefinition&&(!!e.featureSet&&(!1!==Z(e.layerDefinition.geometryType,["","esriGeometryPoint","esriGeometryPolyline","esriGeometryPolygon","esriGeometryMultipoint","esriGeometryEnvelope"])&&(null!==e.layerDefinition.objectIdField&&""!==e.layerDefinition.objectIdField&&(!1!==F(e.layerDefinition.fields)&&!1!==F(e.featureSet.features)))))}function ee(G){"async"===G.mode&&(G.functions.getuser=function(a,r){return G.standardFunctionAsync(a,r,(async(l,f,c)=>{y(c,0,2,a,r);let u=g(c[1],""),d=!0===u;if(u=!0===u||!1===u?"":w(u),0===c.length||c[0]instanceof e){let e=null;a.services&&a.services.portal&&(e=a.services.portal),c.length>0&&(e=s(c[0],e));const n=await o(e,u,d);if(n){const e=JSON.parse(JSON.stringify(n));for(const t of["lastLogin","created","modified"])void 0!==e[t]&&null!==e[t]&&(e[t]=new Date(e[t]));return t.convertObjectToArcadeDictionary(e)}return null}let m=null;if(h(c[0])&&(m=c[0]),m){if(d=!1,u)return null;await m.load();const n=await m.getOwningSystemUrl();if(!n){if(!u){const e=await m.getIdentityUser();return e?t.convertObjectToArcadeDictionary({username:e}):null}return null}let i=null;a.services&&a.services.portal&&(i=a.services.portal),i=s(new e(n),i);const r=await o(i,u,d);if(r){const e=JSON.parse(JSON.stringify(r));for(const t of["lastLogin","created","modified"])void 0!==e[t]&&null!==e[t]&&(e[t]=new Date(e[t]));return t.convertObjectToArcadeDictionary(e)}return null}throw new n(a,i.InvalidParameter,r)}))},G.signatures.push({name:"getuser",min:1,max:2}),G.functions.featuresetbyid=function(e,t){return G.standardFunctionAsync(e,t,((a,s,o)=>{if(y(o,2,4,e,t),o[0]instanceof r){const a=w(o[1]);let r=g(o[2],null);const s=I(g(o[3],!0));if(null===r&&(r=["*"]),!1===F(r))throw new n(e,i.InvalidParameter,t);return o[0].featureSetById(a,s,r)}throw new n(e,i.InvalidParameter,t)}))},G.signatures.push({name:"featuresetbyid",min:2,max:4}),G.functions.getfeatureset=function(e,t){return G.standardFunctionAsync(e,t,((a,r,s)=>{if(y(s,1,2,e,t),E(s[0])){let t=g(s[1],"datasource");return null===t&&(t="datasource"),t=w(t).toLowerCase(),l(s[0].fullSchema(),t,e.lrucache,e.interceptor,e.spatialReference)}throw new n(e,i.InvalidParameter,t)}))},G.signatures.push({name:"getfeatureset",min:1,max:2}),G.functions.featuresetbyportalitem=function(t,a){return G.standardFunctionAsync(t,a,((r,o,l)=>{if(y(l,2,5,t,a),null===l[0])throw new n(t,i.PortalRequired,a);if(l[0]instanceof e){const e=w(l[1]),r=w(l[2]);let o=g(l[3],null);const c=I(g(l[4],!0));if(null===o&&(o=["*"]),!1===F(o))throw new n(t,i.InvalidParameter,a);let u=null;return t.services&&t.services.portal&&(u=t.services.portal),u=s(l[0],u),f(e,r,t.spatialReference,o,c,u,t.lrucache,t.interceptor)}if(!1===D(l[0]))throw new n(t,i.PortalRequired,a);const c=w(l[0]),u=w(l[1]);let d=g(l[2],null);const m=I(g(l[3],!0));if(null===d&&(d=["*"]),!1===F(d))throw new n(t,i.InvalidParameter,a);if(t.services&&t.services.portal)return f(c,u,t.spatialReference,d,m,t.services.portal,t.lrucache,t.interceptor);throw new n(t,i.PortalRequired,a)}))},G.signatures.push({name:"featuresetbyportalitem",min:2,max:5}),G.functions.featuresetbyname=function(e,t){return G.standardFunctionAsync(e,t,((a,s,o)=>{if(y(o,2,4,e,t),o[0]instanceof r){const a=w(o[1]);let r=g(o[2],null);const s=I(g(o[3],!0));if(null===r&&(r=["*"]),!1===F(r))throw new n(e,i.InvalidParameter,t);return o[0].featureSetByName(a,s,r)}throw new n(e,i.InvalidParameter,t)}))},G.signatures.push({name:"featuresetbyname",min:2,max:4}),G.functions.featureset=function(e,a){return G.standardFunction(e,a,((r,s,o)=>{y(o,1,1,e,a);let l=o[0];const f={layerDefinition:{geometryType:"",objectIdField:"",globalIdField:"",typeIdField:"",fields:[]},featureSet:{geometryType:"",features:[]}};if(D(l))l=JSON.parse(l),void 0!==l.layerDefinition?(f.layerDefinition=l.layerDefinition,f.featureSet=l.featureSet,l.layerDefinition.spatialReference&&(f.layerDefinition.spatialReference=l.layerDefinition.spatialReference)):(f.featureSet.features=l.features,f.featureSet.geometryType=l.geometryType,f.layerDefinition.geometryType=f.featureSet.geometryType,f.layerDefinition.objectIdField=l.objectIdFieldName,f.layerDefinition.typeIdField=l.typeIdFieldName,f.layerDefinition.globalIdField=l.globalIdFieldName,f.layerDefinition.fields=l.fields,l.spatialReference&&(f.layerDefinition.spatialReference=l.spatialReference));else{if(!(o[0]instanceof t))throw new n(e,i.InvalidParameter,a);{l=JSON.parse(o[0].castToText(!0));const e=q(l,"layerdefinition");if(null!==e){f.layerDefinition.geometryType=q(e,"geometrytype",""),f.featureSet.geometryType=f.layerDefinition.geometryType,f.layerDefinition.globalIdField=q(e,"globalidfield",""),f.layerDefinition.objectIdField=q(e,"objectidfield",""),f.layerDefinition.typeIdField=q(e,"typeidfield","");const t=q(e,"spatialreference",null);t&&(f.layerDefinition.spatialReference=X(t));for(const i of q(e,"fields",[])){const e={name:q(i,"name",""),alias:q(i,"alias",""),type:q(i,"type",""),nullable:q(i,"nullable",!0),editable:q(i,"editable",!0),length:q(i,"length",null),domain:K(q(i,"domain"))};f.layerDefinition.fields.push(e)}const n=q(l,"featureset",null);if(n){const e={};for(const t of f.layerDefinition.fields)e[t.name.toLowerCase()]=t.name;for(const t of q(n,"features",[])){const n={},i=q(t,"attributes",{});for(const t in i)n[e[t.toLowerCase()]]=i[t];f.featureSet.features.push({attributes:n,geometry:Y(q(t,"geometry",null))})}}}else{f.layerDefinition.geometryType=q(l,"geometrytype",""),f.featureSet.geometryType=f.layerDefinition.geometryType,f.layerDefinition.objectIdField=q(l,"objectidfieldname",""),f.layerDefinition.typeIdField=q(l,"typeidfieldname","");const e=q(l,"spatialreference",null);e&&(f.layerDefinition.spatialReference=X(e));for(const n of q(l,"fields",[])){const e={name:q(n,"name",""),alias:q(n,"alias",""),type:q(n,"type",""),nullable:q(n,"nullable",!0),editable:q(n,"editable",!0),length:q(n,"length",null),domain:K(q(n,"domain"))};f.layerDefinition.fields.push(e)}const t={};for(const n of f.layerDefinition.fields)t[n.name.toLowerCase()]=n.name;for(const n of q(l,"features",[])){const e={},i=q(n,"attributes",{});for(const n in i)e[t[n.toLowerCase()]]=i[n];f.featureSet.features.push({attributes:e,geometry:Y(q(n,"geometry",null))})}}}}if(!1===Q(f))throw new n(e,i.InvalidParameter,a);return M.create(f,e.spatialReference)}))},G.signatures.push({name:"featureset",min:1,max:1}),G.functions.filter=function(e,t){return G.standardFunctionAsync(e,t,(async(a,r,s)=>{if(y(s,2,2,e,t),F(s[0])||b(s[0])){const a=[];let r=s[0];r instanceof p&&(r=r.toArray());let o=null;if(!A(s[1]))throw new n(e,i.InvalidParameter,t);o=s[1].createFunction(e);for(const e of r){const t=o(e);U(t)?!0===await t&&a.push(e):!0===t&&a.push(e)}return a}if(h(s[0])){const t=await s[0].load(),n=W.create(s[1],t.getFieldsIndex()),i=n.getVariables();if(i.length>0){const t=[];for(let n=0;n<i.length;n++){const a={name:i[n]};t.push(await G.evaluateIdentifier(e,a))}const a={};for(let e=0;e<i.length;e++)a[i[e]]=t[e];return n.parameters=a,new P({parentfeatureset:s[0],whereclause:n})}return new P({parentfeatureset:s[0],whereclause:n})}throw new n(e,i.InvalidParameter,t)}))},G.signatures.push({name:"filter",min:2,max:2}),G.functions.orderby=function(e,t){return G.standardFunctionAsync(e,t,(async(a,r,s)=>{if(y(s,2,2,e,t),h(s[0])){const e=new k(s[1]);return new R({parentfeatureset:s[0],orderbyclause:e})}throw new n(e,i.InvalidParameter,t)}))},G.signatures.push({name:"orderby",min:2,max:2}),G.functions.top=function(e,t){return G.standardFunctionAsync(e,t,(async(a,r,s)=>{if(y(s,2,2,e,t),h(s[0]))return new O({parentfeatureset:s[0],topnum:s[1]});if(F(s[0]))return N(s[1])>=s[0].length?s[0].slice(0):s[0].slice(0,N(s[1]));if(b(s[0]))return N(s[1])>=s[0].length()?s[0].slice(0):s[0].slice(0,N(s[1]));throw new n(e,i.InvalidParameter,t)}))},G.signatures.push({name:"top",min:2,max:2}),G.functions.first=function(e,t){return G.standardFunctionAsync(e,t,(async(n,i,r)=>{if(y(r,1,1,e,t),h(r[0])){const e=await r[0].first(n.abortSignal);if(null!==e){const t=a.createFromGraphicLikeObject(e.geometry,e.attributes,r[0]);return t._underlyingGraphic=e,t}return e}return F(r[0])?0===r[0].length?null:r[0][0]:b(r[0])?0===r[0].length()?null:r[0].get(0):null}))},G.signatures.push({name:"first",min:1,max:1}),G.functions.attachments=function(e,a){return G.standardFunctionAsync(e,a,(async(r,s,o)=>{y(o,1,2,e,a);const l={minsize:-1,maxsize:-1,types:null,returnMetadata:!1};if(o.length>1)if(o[1]instanceof t){if(o[1].hasField("minsize")&&(l.minsize=N(o[1].field("minsize"))),o[1].hasField("metadata")&&(l.returnMetadata=I(o[1].field("metadata"))),o[1].hasField("maxsize")&&(l.maxsize=N(o[1].field("maxsize"))),o[1].hasField("types")){const e=x(o[1].field("types"),!1);e.length>0&&(l.types=e)}}else if(null!==o[1])throw new n(e,i.InvalidParameter,a);if(E(o[0])){let t=o[0]._layer;return t instanceof _&&(t=c(t,e.spatialReference,["*"],!0,e.lrucache,e.interceptor)),null===t?[]:!1===h(t)?[]:(await t.load(),t.queryAttachments(o[0].field(t.objectIdField),l.minsize,l.maxsize,l.types,l.returnMetadata))}if(null===o[0])return[];throw new n(e,i.InvalidParameter,a)}))},G.signatures.push({name:"attachments",min:1,max:2}),G.functions.featuresetbyrelationshipname=function(e,t){return G.standardFunctionAsync(e,t,(async(a,r,s)=>{y(s,2,4,e,t);const o=s[0],l=w(s[1]);let f=g(s[2],null);const m=I(g(s[3],!0));if(null===f&&(f=["*"]),!1===F(f))throw new n(e,i.InvalidParameter,t);if(null===s[0])return null;if(!E(s[0]))throw new n(e,i.InvalidParameter,t);let p=o._layer;if(p instanceof _&&(p=c(p,e.spatialReference,["*"],!0,e.lrucache,e.interceptor)),null===p)return null;if(!1===h(p))return null;p=await p.load();const D=p.relationshipMetaData().filter((e=>e.name===l));if(0===D.length)return null;if(void 0!==D[0].relationshipTableId&&null!==D[0].relationshipTableId&&D[0].relationshipTableId>-1)return u(p,D[0],o.field(p.objectIdField),p.spatialReference,f,m,e.lrucache,e.interceptor);let b=p.serviceUrl();if(!b)return null;b="/"===b.charAt(b.length-1)?b+D[0].relatedTableId.toString():b+"/"+D[0].relatedTableId.toString();const A=await d(b,p.spatialReference,f,m,e.lrucache,e.interceptor);await A.load();let N=A.relationshipMetaData();if(N=N.filter((e=>e.id===D[0].id)),!1===o.hasField(D[0].keyField)||null===o.field(D[0].keyField)){const e=await p.getFeatureByObjectId(o.field(p.objectIdField),[D[0].keyField]);if(e){const t=W.create(N[0].keyField+"= @id",A.getFieldsIndex());return t.parameters={id:e.attributes[D[0].keyField]},A.filter(t)}return new C({parentfeatureset:A})}const x=W.create(N[0].keyField+"= @id",A.getFieldsIndex());return x.parameters={id:o.field(D[0].keyField)},A.filter(x)}))},G.signatures.push({name:"featuresetbyrelationshipname",min:2,max:4}),G.functions.featuresetbyassociation=function(e,t){return G.standardFunctionAsync(e,t,(async(a,r,s)=>{y(s,2,3,e,t);const o=s[0],l=w(g(s[1],"")).toLowerCase(),f=D(s[2])?w(s[2]):null;if(null===s[0])return null;if(!E(s[0]))throw new n(e,i.InvalidParameter,t);let u=o._layer;if(u instanceof _&&(u=c(u,e.spatialReference,["*"],!0,e.lrucache,e.interceptor)),null===u)return null;if(!1===h(u))return null;await u.load();const d=u.serviceUrl(),p=await m(d,e.spatialReference);let I=null,F=null,b=!1;if(null!==f&&""!==f&&void 0!==f){for(const e of p.terminals)e.terminalName===f&&(F=e.terminalId);null===F&&(b=!0)}const A=p.associations.getFieldsIndex(),N=A.get("TOGLOBALID").name,x=A.get("FROMGLOBALID").name,P=A.get("TOTERMINALID").name,R=A.get("FROMTERMINALID").name,O=A.get("FROMNETWORKSOURCEID").name,C=A.get("TONETWORKSOURCEID").name,M=A.get("ASSOCIATIONTYPE").name,k=A.get("ISCONTENTVISIBLE").name,z=A.get("OBJECTID").name;for(const e of u.fields)if("global-id"===e.type){I=o.field(e.name);break}let G=null,U=new v(new B({name:"percentalong",alias:"percentalong",type:"double"}),W.create("0",p.associations.getFieldsIndex())),J=new v(new B({name:"side",alias:"side",type:"string"}),W.create("''",p.associations.getFieldsIndex()));const V="globalid",q="globalId",K={};for(const e in p.lkp)K[e]=p.lkp[e].sourceId;const X=new $(new B({name:"classname",alias:"classname",type:"string"}),null,K);let Y="";switch(l){case"midspan":{Y=`((${N}='${I}') OR ( ${x}='${I}')) AND (${M} IN (5))`,X.codefield=W.create(`CASE WHEN (${N}='${I}') THEN ${O} ELSE ${C} END`,p.associations.getFieldsIndex());const e=H(T.findField(p.associations.fields,x));e.name=V,e.alias=V,G=new v(e,W.create(`CASE WHEN (${x}='${I}') THEN ${N} ELSE ${x} END`,p.associations.getFieldsIndex())),U=p.unVersion>=4?new j(T.findField(p.associations.fields,A.get("PERCENTALONG").name)):new v(new B({name:"percentalong",alias:"percentalong",type:"double"}),W.create("0",p.associations.getFieldsIndex()));break}case"junctionedge":{Y=`((${N}='${I}') OR ( ${x}='${I}')) AND (${M} IN (4,6))`,X.codefield=W.create(`CASE WHEN (${N}='${I}') THEN ${O} ELSE ${C} END`,p.associations.getFieldsIndex());const e=H(T.findField(p.associations.fields,x));e.name=V,e.alias=V,G=new v(e,W.create(`CASE WHEN (${x}='${I}') THEN ${N} ELSE ${x} END`,p.associations.getFieldsIndex())),J=new v(new B({name:"side",alias:"side",type:"string"}),W.create(`CASE WHEN (${M}=4) THEN 'from' ELSE 'to' END`,p.associations.getFieldsIndex()));break}case"connected":{let e=`${N}='@T'`,t=`${x}='@T'`;null!==F&&(e+=` AND ${P}=@A`,t+=` AND ${R}=@A`),Y="(("+e+") OR ("+t+"))",Y=S(Y,"@T",I??""),e=S(e,"@T",I??""),null!==F&&(e=S(e,"@A",F.toString()),Y=S(Y,"@A",F.toString())),X.codefield=W.create("CASE WHEN "+e+` THEN ${O} ELSE ${C} END`,p.associations.getFieldsIndex());const n=H(T.findField(p.associations.fields,x));n.name=V,n.alias=V,G=new v(n,W.create("CASE WHEN "+e+` THEN ${x} ELSE ${N} END`,p.associations.getFieldsIndex()));break}case"container":Y=`${N}='${I}' AND ${M} = 2`,null!==F&&(Y+=` AND ${P} = `+F.toString()),X.codefield=O,Y="( "+Y+" )",G=new L(T.findField(p.associations.fields,x),V,V);case"content":Y=`(${x}='${I}' AND ${M} = 2)`,null!==F&&(Y+=` AND ${R} = `+F.toString()),X.codefield=C,Y="( "+Y+" )",G=new L(T.findField(p.associations.fields,N),V,V);break;case"structure":Y=`(${N}='${I}' AND ${M} = 3)`,null!==F&&(Y+=` AND ${P} = `+F.toString()),X.codefield=O,Y="( "+Y+" )",G=new L(T.findField(p.associations.fields,x),V,q);break;case"attached":Y=`(${x}='${I}' AND ${M} = 3)`,null!==F&&(Y+=` AND ${R} = `+F.toString()),X.codefield=C,Y="( "+Y+" )",G=new L(T.findField(p.associations.fields,N),V,q);break;default:throw new n(e,i.InvalidParameter,t)}b&&(Y="1 <> 1");return new T({parentfeatureset:p.associations,adaptedFields:[new j(T.findField(p.associations.fields,z)),new j(T.findField(p.associations.fields,k)),G,J,X,U],extraFilter:Y?W.create(Y,p.associations.getFieldsIndex()):null})}))},G.signatures.push({name:"featuresetbyassociation",min:2,max:6}),G.functions.groupby=function(e,a){return G.standardFunctionAsync(e,a,(async(r,s,o)=>{if(y(o,3,3,e,a),!h(o[0]))throw new n(e,i.InvalidParameter,a);const l=await o[0].load(),f=[],c=[];let u=!1,d=[];if(D(o[1]))d.push(o[1]);else if(o[1]instanceof t)d.push(o[1]);else if(F(o[1]))d=o[1];else{if(!b(o[1]))throw new n(e,i.InvalidParameter,a);d=o[1].toArray()}for(const m of d)if(D(m)){const e=W.create(w(m),l.getFieldsIndex()),t=!0===z(e)?w(m):"%%%%FIELDNAME";f.push({name:t,expression:e}),"%%%%FIELDNAME"===t&&(u=!0)}else{if(!(m instanceof t))throw new n(e,i.InvalidParameter,a);{const t=m.hasField("name")?m.field("name"):"%%%%FIELDNAME",r=m.hasField("expression")?m.field("expression"):"";if("%%%%FIELDNAME"===t&&(u=!0),!t)throw new n(e,i.InvalidParameter,a);f.push({name:t,expression:W.create(r||t,l.getFieldsIndex())})}}if(d=[],D(o[2]))d.push(o[2]);else if(F(o[2]))d=o[2];else if(b(o[2]))d=o[2].toArray();else{if(!(o[2]instanceof t))throw new n(e,i.InvalidParameter,a);d.push(o[2])}for(const m of d){if(!(m instanceof t))throw new n(e,i.InvalidParameter,a);{const t=m.hasField("name")?m.field("name"):"",r=m.hasField("statistic")?m.field("statistic"):"",s=m.hasField("expression")?m.field("expression"):"";if(!t||!r||!s)throw new n(e,i.InvalidParameter,a);c.push({name:t,statistic:r.toLowerCase(),expression:W.create(s,l.getFieldsIndex())})}}if(u){const e={};for(const n of l.fields)e[n.name.toLowerCase()]=1;for(const n of f)"%%%%FIELDNAME"!==n.name&&(e[n.name.toLowerCase()]=1);for(const n of c)"%%%%FIELDNAME"!==n.name&&(e[n.name.toLowerCase()]=1);let t=0;for(const n of f)if("%%%%FIELDNAME"===n.name){for(;1===e["field_"+t.toString()];)t++;e["field_"+t.toString()]=1,n.name="FIELD_"+t.toString()}}for(const t of f)await V(t.expression,G,e);for(const t of c)await V(t.expression,G,e);return o[0].groupby(f,c)}))},G.signatures.push({name:"groupby",min:3,max:3}),G.functions.distinct=function(e,a){return G.standardFunctionAsync(e,a,(async(r,s,o)=>{if(h(o[0])){y(o,2,2,e,a);const r=await o[0].load(),s=[];let l=[];if(D(o[1]))l.push(o[1]);else if(o[1]instanceof t)l.push(o[1]);else if(F(o[1]))l=o[1];else{if(!b(o[1]))throw new n(e,i.InvalidParameter,a);l=o[1].toArray()}let f=!1;for(const o of l)if(D(o)){const e=W.create(w(o),r.getFieldsIndex()),t=!0===z(e)?w(o):"%%%%FIELDNAME";s.push({name:t,expression:e}),"%%%%FIELDNAME"===t&&(f=!0)}else{if(!(o instanceof t))throw new n(e,i.InvalidParameter,a);{const t=o.hasField("name")?o.field("name"):"%%%%FIELDNAME",l=o.hasField("expression")?o.field("expression"):"";if("%%%%FIELDNAME"===t&&(f=!0),!t)throw new n(e,i.InvalidParameter,a);s.push({name:t,expression:W.create(l||t,r.getFieldsIndex())})}}if(f){const e={};for(const n of r.fields)e[n.name.toLowerCase()]=1;for(const n of s)"%%%%FIELDNAME"!==n.name&&(e[n.name.toLowerCase()]=1);let t=0;for(const n of s)if("%%%%FIELDNAME"===n.name){for(;1===e["field_"+t.toString()];)t++;e["field_"+t.toString()]=1,n.name="FIELD_"+t.toString()}}for(const t of s)await V(t.expression,G,e);return o[0].groupby(s,[])}return J("distinct",r,s,o)}))})}export{ee as registerFunctions};