@jaepil/uqa 0.1.2 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/types/src/engine.d.ts.map +1 -1
- package/dist/uqa.es.js +2 -5
- package/dist/uqa.es.js.map +1 -1
- package/dist/uqa.umd.js +2 -2
- package/dist/uqa.umd.js.map +1 -1
- package/package.json +1 -1
package/dist/uqa.umd.js
CHANGED
|
@@ -11,6 +11,6 @@
|
|
|
11
11
|
`;if(e instanceof re)for(const a of e.operands)i+=this._explainNode(a,t+1);else if(e instanceof H)for(const a of e.operands)i+=this._explainNode(a,t+1);else if(e instanceof de)i+=this._explainNode(e.operand,t+1);else if(e instanceof Ne)i+=this._explainNode(e.source,t+1);else if(e instanceof pe)i+=this._explainNode(e.source,t+1);else if(e instanceof G&&e.source!==null)i+=this._explainNode(e.source,t+1);else if(e instanceof $e)for(const[a,l]of e.stages)i+=`${n} [cutoff=${String(l)}]
|
|
12
12
|
`,i+=this._explainNode(a,t+2);return i}_operatorName(e){return e instanceof _e?"TermScan":e instanceof Ee?"VectorThreshold":e instanceof je?"KNN":e instanceof G?"Filter":e instanceof zt?"IndexScan":e instanceof pe?"Score":e instanceof re?"Union":e instanceof H?"Intersect":e instanceof de?"Complement":e instanceof Ne?"SparseThreshold":e instanceof $e?"MultiStage":e.constructor.name}_operatorDetails(e){if(e instanceof _e)return`${e.field!==null?`field=${e.field}, `:""}term="${e.term}"`;if(e instanceof Ee)return`field=${e.field}, threshold=${String(e.threshold)}`;if(e instanceof je)return`field=${e.field}, k=${String(e.k)}`;if(e instanceof G)return`field=${e.field}`;if(e instanceof zt)return`field=${e.field}`;if(e instanceof Ne)return`threshold=${String(e.threshold)}`;if(e instanceof re)return`operands=${String(e.operands.length)}`;if(e instanceof H)return`operands=${String(e.operands.length)}`;if(e instanceof pe)return`terms=${String(e.queryTerms.length)}`;if(e instanceof $e)return`stages=${String(e.stages.length)}`;const t=e.constructor.name;if(t==="TraverseOperator"){const n=e,r=n.label!==null?`, label=${n.label}`:"";return`graph=${n.graph}${r}, maxHops=${String(n.maxHops)}`}if(t==="PatternMatchOperator"){const n=e;return`graph=${n.graph}, vertices=${String(n.pattern.vertexPatterns.length)}`}if(t==="RegularPathQueryOperator"){const n=e,r=n.startVertex!==null?`, start=${String(n.startVertex)}`:"";return`graph=${n.graph}${r}`}if(t==="WeightedPathQueryOperator"){const n=e;return`graph=${n.graph}, agg=${n.aggregation}, weight=${n.weightProperty}`}if(t==="CypherQueryOperator"){const n=e,r=n.query.length>40?n.query.slice(0,40)+"...":n.query;return`graph=${n.graphName}, query="${r}"`}if(t==="LogOddsFusionOperator"){const n=e;return`signals=${String(n.signals.length)}, alpha=${String(n.alpha)}`}if(t==="ProbBoolFusionOperator"){const n=e;return`signals=${String(n.signals.length)}, mode=${n.mode}`}return t==="AttentionFusionOperator"?`signals=${String(e.signals.length)}`:t==="LearnedFusionOperator"?`signals=${String(e.signals.length)}`:t==="VertexAggregationOperator"?`property=${e.propertyName}`:""}explainAnalyze(e,t){const[,n]=this._executeWithStats(e);return this._explainAnalyzeNode(n,0,(t==null?void 0:t.verbose)??!1)}_explainAnalyzeNode(e,t,n){const r=" ".repeat(t);let s=`${r}${e.operatorName}`;s+=` (rows=${String(e.resultCount)}, time=${e.elapsedMs.toFixed(3)}ms)`,s+=`
|
|
13
13
|
`,n&&e.children.length>0&&(s+=`${r} children: ${String(e.children.length)}
|
|
14
|
-
`);for(const o of e.children)s+=this._explainAnalyzeNode(o,t+1,n);return s}explainTree(e){return this._explainTreeNode(e)}_explainTreeNode(e){const t={operator:this._operatorName(e),details:this._operatorDetails(e)},n=[];if(e instanceof re)for(const r of e.operands)n.push(this._explainTreeNode(r));else if(e instanceof H)for(const r of e.operands)n.push(this._explainTreeNode(r));else if(e instanceof de)n.push(this._explainTreeNode(e.operand));else if(e instanceof Ne)n.push(this._explainTreeNode(e.source));else if(e instanceof pe)n.push(this._explainTreeNode(e.source));else if(e instanceof G&&e.source!==null)n.push(this._explainTreeNode(e.source));else if(e instanceof $e)for(const[r,s]of e.stages){const o=this._explainTreeNode(r);o.cutoff=s,n.push(o)}else{const r=e.constructor.name;if(r==="LogOddsFusionOperator"||r==="ProbBoolFusionOperator"||r==="AttentionFusionOperator"||r==="LearnedFusionOperator"){const s=e;for(const o of s.signals)n.push(this._explainTreeNode(o))}}return n.length>0&&(t.children=n),t}}const et=new Set(["count","sum","avg","min","max","string_agg","array_agg","bool_and","bool_or","stddev","stddev_pop","stddev_samp","variance","var_pop","var_samp","percentile_cont","percentile_disc","mode","json_object_agg","jsonb_object_agg","corr","covar_pop","covar_samp","regr_count","regr_avgx","regr_avgy","regr_sxx","regr_syy","regr_sxy","regr_slope","regr_intercept","regr_r2"]),Yr=new Set(["text_match","bayesian_match","bayesian_match_with_prior","knn_match","bayesian_knn_match","traverse_match","temporal_traverse","path_filter","vector_exclude","spatial_within","fuse_log_odds","fuse_prob_and","fuse_prob_or","fuse_prob_not","fuse_attention","fuse_multihead","fuse_learned","sparse_threshold","multi_field_match","message_passing","graph_embedding","staged_retrieval","pagerank","hits","betweenness","weighted_rpq","progressive_fusion","deep_fusion"]),di=new Set(["random","nextval","currval","now","current_timestamp","clock_timestamp","statement_timestamp","timeofday"]);function g(c,e){return c[e]??null}function Xr(c){return typeof c=="string"?c:c==null?"":typeof c=="number"?c.toString(10):typeof c=="boolean"?c?"true":"false":JSON.stringify(c)}function j(c,e){const t=c[e];return t==null?"":Xr(t)}function w(c){return c??{}}function P(c){return Array.isArray(c)?c:[]}function J(c){const e=g(c,"String")??g(c,"str");if(e!==null&&typeof e=="object")return j(w(e),"sval")||j(w(e),"str");if(typeof e=="string")return e;const t=j(c,"sval")||j(c,"str");return t||""}function ae(c){return j(c,"relname")}function Ue(c){const e=g(c,"alias");return e!==null&&typeof e=="object"&&j(w(e),"aliasname")||null}function pi(c){return j(c,"schemaname")||null}function B(c){const e=w(g(c,"ColumnRef")??c),t=P(g(e,"fields"));if(t.length>0){const r=t[t.length-1],s=J(r);if(s)return s}const n=j(e,"sval")||j(e,"str");if(n)return n;throw new Error("Expected ColumnRef, got "+JSON.stringify(c).slice(0,200))}function gi(c){const e=w(g(c,"ColumnRef")??c),t=P(g(e,"fields"));if(t.length>=2){const n=[];for(const r of t){const s=J(r);s&&n.push(s)}return n.join(".")}return B(c)}function X(c){return g(c,"ColumnRef")!==null}function tt(c){if(g(c,"A_Star")!==null&&g(c,"A_Star")!==void 0)return!0;const e=g(c,"ColumnRef");if(e!=null){const t=P(g(w(e),"fields"));for(const n of t)if(g(n,"A_Star")!==null&&g(n,"A_Star")!==void 0)return!0}return!1}function Q(c){return g(c,"FuncCall")!==null}function ce(c){const e=w(g(c,"FuncCall")??c),t=P(g(e,"funcname"));return t.length===0?"":J(t[t.length-1]).toLowerCase()}function ve(c){const e=w(g(c,"FuncCall")??c);return P(g(e,"args"))}function nt(c){const e=w(g(c,"FuncCall")??c);return g(e,"agg_star")===!0}function Qr(c){const e=w(g(c,"FuncCall")??c);return g(e,"agg_distinct")===!0}function rt(c){const e=w(g(c,"FuncCall")??c),t=g(e,"over");return t!=null}function be(c){return g(c,"A_Const")!==null}function Pt(c){return g(c,"ParamRef")!==null}function jn(c){return g(c,"A_Expr")!==null}function mi(c){return g(c,"BoolExpr")!==null}function Zr(c){return g(c,"NullTest")!==null}function nn(c){return g(c,"SubLink")!==null}function rn(c){return g(c,"TypeCast")!==null}function _i(c){return g(c,"A_ArrayExpr")!==null}function z(c,e){const t=g(c,"ParamRef");if(t!=null){const l=w(t),u=g(l,"number"),h=u-1;if(h<0||h>=e.length)throw new Error(`No value supplied for parameter $${String(u)}`);return e[h]}const n=w(g(c,"A_Const")??c);if(g(n,"isnull")===!0)return null;const r=g(n,"ival");if(r!=null){if(typeof r=="number")return r;if(typeof r=="object"){const l=g(w(r),"ival");if(l!=null)return Number(l)}return Number(r)}const s=g(n,"fval");if(s!=null)return parseFloat(String(s));const o=g(n,"sval");if(o!=null){if(typeof o=="string")return o;if(typeof o=="object"){const l=g(w(o),"sval");if(l!=null)return String(l)}return String(o)}const i=g(n,"boolval");if(i!=null)return i;const a=g(n,"val");if(a!=null&&typeof a=="object"){const l=w(a),u=g(l,"Integer")??g(l,"ival");if(u!=null){if(typeof u=="number")return u;const p=g(w(u),"ival");if(p!==null)return Number(p)}const h=g(l,"Float")??g(l,"fval");if(h!=null){if(typeof h=="number")return h;const p=g(w(h),"fval");return parseFloat(String(p!==null?p:h))}const f=g(l,"String")??g(l,"sval");if(f!=null){if(typeof f=="string")return f;const p=g(w(f),"sval");if(p!==null)return String(p)}const d=g(l,"Boolean")??g(l,"boolval");if(d!=null){if(typeof d=="boolean")return d;const p=g(w(d),"boolval");if(p!==null)return p}}return typeof c=="number"||typeof c=="string"?c:null}function we(c,e){const t=z(c,e);return Number(t)}function ee(c,e){const t=z(c,e);return String(t)}function We(c,e){const t=g(c,"A_ArrayExpr");if(t!=null){const r=P(g(w(t),"elements"));return new Float64Array(r.map(s=>Number(z(s,e))))}const n=g(c,"ParamRef");if(n!=null){const r=w(n),s=g(r,"number"),o=s-1;if(o<0||o>=e.length)throw new Error(`No value supplied for parameter $${String(s)}`);const i=e[o];if(i instanceof Float64Array)return i;if(i instanceof Float32Array)return new Float64Array(i);if(Array.isArray(i))return new Float64Array(i.map(Number));throw new Error("Parameter for vector must be an array")}throw new Error("Expected ARRAY literal or $N parameter for vector")}function yi(c,e,t){if(Pt(c)){const n=w(g(c,"ParamRef")),r=g(n,"number"),s=r-1;if(s<0||s>=e.length)throw new Error(`Parameter $${String(r)} not provided`);const o=e[s];return o!==null&&typeof o=="object"&&"tolist"in o?o.tolist:o}if(_i(c)){const n=P(g(w(g(c,"A_ArrayExpr")),"elements"));return n.length===0?[]:n.map(r=>z(r,e))}if(rn(c))return t.evaluate(c,{});if(Q(c))return t.evaluate(c,{});try{return t.evaluate(c,{})}catch{return z(c,e)}}const bi=1e3;class le{constructor(e){b(this,"_tables");b(this,"_views");b(this,"_sequences");b(this,"_engine");b(this,"_transactionActive");b(this,"_prepared");b(this,"_params");b(this,"_expandedViews");b(this,"_shadowedTables");b(this,"_inlinedCTEs");b(this,"_correlatedOuterRow");b(this,"_foreignServers");b(this,"_foreignTables");b(this,"_currentGraphName","");this._tables=new Map,this._views=new Map,this._sequences=new Map,this._engine=e??null,this._transactionActive=!1,this._prepared=new Map,this._params=[],this._expandedViews=[],this._shadowedTables=new Map,this._inlinedCTEs=new Map,this._correlatedOuterRow=null,this._foreignServers=new Map,this._foreignTables=new Map}_makeSubqueryExecutor(e){return(t,n)=>this._compileSelect(t,e,n)}get tables(){return this._tables}get views(){return this._views}get engine(){return this._engine}async execute(e,t){this._params=t?[...t]:[];const n=await st.parse(e),r=P(g(w(n),"stmts"));if(r.length===0)return null;let s=null;for(const o of r){const i=w(g(o,"stmt"));s=this._dispatchStatement(i,this._params)}return s}_dispatchStatement(e,t){const n=Object.keys(e);if(n.length===0)return null;const r=n[0],s=w(e[r]);switch(r){case"SelectStmt":return this._compileSelect(s,t);case"InsertStmt":return this._compileInsert(s,t);case"UpdateStmt":return this._compileUpdate(s,t);case"DeleteStmt":return this._compileDelete(s,t);case"CreateStmt":return this._compileCreateTable(s);case"CreateTableAsStmt":return this._compileCreateTableAs(s,t);case"DropStmt":return this._compileDrop(s);case"ViewStmt":return this._compileCreateView(s);case"TransactionStmt":return this._compileTransaction(s);case"CreateSeqStmt":return this._compileCreateSequence(s);case"AlterSeqStmt":return this._compileAlterSequence(s);case"IndexStmt":return this._compileCreateIndex(s);case"AlterTableStmt":return this._compileAlterTable(s);case"TruncateStmt":return this._compileTruncate(s);case"ExplainStmt":return this._compileExplain(s,t);case"RenameStmt":return this._compileRename(s);case"PrepareStmt":return this._compilePrepare(s);case"ExecuteStmt":return this._compileExecute(s,t);case"DeallocateStmt":return this._compileDeallocate(s);case"VacuumStmt":return this._compileAnalyze(s);case"CreateForeignServerStmt":return this._compileCreateForeignServer(s);case"CreateForeignTableStmt":return this._compileCreateForeignTable(s);case"VariableSetStmt":case"VariableShowStmt":case"DoStmt":case"LockStmt":case"DiscardStmt":return null;default:throw new Error(`Unsupported statement type: ${r}`)}}_compileCreateTable(e){const t=w(g(e,"relation")),n=ae(t),r=g(e,"if_not_exists")===!0;if(this._tables.has(n)){if(r)return null;throw new Error(`Table "${n}" already exists`)}const s=P(g(e,"tableElts")),o=[],i=[],a=[];let l=null;for(const h of s){const f=g(h,"ColumnDef");if(f!=null){const p=w(f),m=this._parseColumnDef(p);o.push(m),m.primaryKey&&(l=m.name);const _=P(g(p,"constraints"));for(const y of _){const x=w(g(y,"Constraint")??y),v=g(x,"contype");if(v===1||v==="CONSTR_CHECK"){const E=j(x,"conname")||`check_${String(a.length)}`,I=g(x,"raw_expr");if(I!=null){const S=new ie,N=w(I);a.push([E,A=>S.evaluate(N,A)===!0])}}if(v===8||v==="CONSTR_FOREIGN"){const E=w(g(x,"pktable")),I=P(g(x,"pk_attrs"));I.length>0&&i.push({column:m.name,refTable:ae(E),refColumn:J(I[0])})}}continue}const d=g(h,"Constraint");if(d!=null){const p=w(d),m=g(p,"contype");if(m===5||m==="CONSTR_PRIMARY"){const _=P(g(p,"keys"));_.length>0&&(l=J(_[0]))}if(m===8||m==="CONSTR_FOREIGN"){const _=P(g(p,"fk_attrs")),y=w(g(p,"pktable")),x=P(g(p,"pk_attrs"));_.length>0&&x.length>0&&i.push({column:J(_[0]),refTable:ae(y),refColumn:J(x[0])})}if(m===4||m==="CONSTR_UNIQUE"){const _=P(g(p,"keys"));for(const y of _){const x=J(y),v=o.findIndex(E=>E.name===x);if(v!==-1){const E=o[v];o[v]=Ie(E.name,E.typeName,{...E,unique:!0})}}}if(m===1||m==="CONSTR_CHECK"){const _=j(p,"conname")||`check_${String(a.length)}`,y=g(p,"raw_expr");if(y!=null){const x=new ie,v=w(y);a.push([_,E=>x.evaluate(v,E)===!0])}}}}if(l!==null){const h=o.findIndex(f=>f.name===l);if(h!==-1){const f=o[h];o[h]=Ie(f.name,f.typeName,{...f,primaryKey:!0,notNull:!0})}}const u=new Ut(n,o);u.foreignKeys=i,u.checkConstraints=a,this._tables.set(n,u),i.length>0&&this._registerFkValidators(n,u,i);for(const h of o)if(h.autoIncrement){const f=`${n}_${h.name}_seq`;this._sequences.set(f,{current:0,increment:1,start:1})}return null}_compileCreateTableAs(e,t){const n=w(g(e,"into")),r=w(g(n,"rel")),s=ae(r);if(this._tables.has(s))throw new Error(`Table "${s}" already exists`);const o=w(g(e,"query")),i=w(g(o,"SelectStmt")??o),a=this._compileSelect(i,t),l=[];for(const f of a.columns){let d="text",p="string";if(a.rows.length>0){const m=a.rows[0][f];typeof m=="number"?Number.isInteger(m)?(d="integer",p="number"):(d="real",p="number"):typeof m=="boolean"?(d="boolean",p="boolean"):Array.isArray(m)?(d="text[]",p="array"):typeof m=="object"&&m!==null&&(d="jsonb",p="object")}l.push(Ie(f,d,{pythonType:p}))}const u=new Ut(s,l);this._tables.set(s,u);let h=0;for(const f of a.rows){const d={};for(const p of a.columns)d[p]=f[p]??null;u.insert(d),h++}return{columns:["inserted"],rows:[{inserted:h}]}}_compileCreateSequence(e){const t=w(g(e,"sequence")),n=ae(t),r=P(g(e,"options"));if(this._sequences.has(n)){if(g(e,"if_not_exists")===!0)return null;throw new Error(`Sequence "${n}" already exists`)}let s=1,o=1;for(const i of r){const a=w(g(i,"DefElem")??i),l=j(a,"defname"),u=g(a,"arg");if(l==="start"&&u!==null){const h=w(u);s=Number(g(h,"ival")??g(w(g(h,"Integer")??{}),"ival")??1)}if(l==="increment"&&u!==null){const h=w(u);o=Number(g(h,"ival")??g(w(g(h,"Integer")??{}),"ival")??1)}}return this._sequences.set(n,{current:s-o,increment:o,start:s}),null}_compileAlterSequence(e){const t=w(g(e,"sequence")),n=ae(t),r=this._sequences.get(n);if(r===void 0)throw new Error(`Sequence "${n}" does not exist`);const s=P(g(e,"options"));for(const o of s){const i=w(g(o,"DefElem")??o),a=j(i,"defname"),l=g(i,"arg");if(a==="restart")if(l!=null){const u=w(l),h=Number(g(u,"ival")??g(w(g(u,"Integer")??{}),"ival")??r.start??1);r.current=h-r.increment}else r.current=(r.start??1)-r.increment;else if(a==="increment"){if(l!=null){const u=w(l);r.increment=Number(g(u,"ival")??g(w(g(u,"Integer")??{}),"ival")??1)}}else if(a==="start"&&l!=null){const u=w(l);r.start=Number(g(u,"ival")??g(w(g(u,"Integer")??{}),"ival")??1)}}return null}_parseColumnDef(e){const t=j(e,"colname"),n=w(g(e,"typeName")),r=P(g(n,"names")),s=[];for(const I of r){const S=J(I);S&&S!=="pg_catalog"&&s.push(S)}const i=P(g(n,"arrayBounds")).length>0;let[a,l]=s.length>0?xr(s):["text","string"],u=!1;const h=s.join(" ").toUpperCase();(h==="SERIAL"||h==="BIGSERIAL"||h==="SMALLSERIAL")&&(u=!0),i&&(a="array",l="array");const f=P(g(n,"typmods"));let d=null,p=null,m=null;if(f.length>0){const I=g(f[0],"Integer")??g(f[0],"A_Const");if(I!=null){const S=g(w(I),"ival");S!==null&&typeof S=="number"&&(a==="vector"?m=S:d=S)}if(f.length>1){const S=g(f[1],"Integer")??g(f[1],"A_Const");if(S!=null){const N=g(w(S),"ival");N!==null&&typeof N=="number"&&(p=N)}}}let _=!1,y=!1,x=!1,v=null;const E=P(g(e,"constraints"));for(const I of E){const S=w(g(I,"Constraint")??I),N=g(S,"contype");if((N==="CONSTR_NOTNULL"||N===1)&&(y=!0),(N==="CONSTR_PRIMARY"||N===5)&&(_=!0,y=!0),(N==="CONSTR_UNIQUE"||N===4)&&(x=!0),N==="CONSTR_DEFAULT"||N===2){const A=g(S,"raw_expr");A!=null&&(v=new ie().evaluate(w(A),{}))}(N==="CONSTR_IDENTITY"||N===9)&&(u=!0,y=!0)}return u&&(y=!0),Ie(t,a,{pythonType:l,primaryKey:_,notNull:y,autoIncrement:u,defaultValue:v,vectorDimensions:m,unique:x,numericPrecision:d,numericScale:p})}_compileDrop(e){const t=g(e,"removeType");return t===20||t==="OBJECT_INDEX"?this._compileDropIndex(e):t===51||t==="OBJECT_VIEW"?this._compileDropView(e):t===17||t==="OBJECT_FOREIGN_SERVER"?this._compileDropForeignServer(e):t===18||t==="OBJECT_FOREIGN_TABLE"?this._compileDropForeignTable(e):this._compileDropTable(e)}_compileDropTable(e){const t=P(g(e,"objects")),n=g(e,"missing_ok")===!0;for(const r of t){const s=P(r);let o;if(s.length>0?o=J(s[s.length-1]):o=J(r),!!o){if(!this._tables.has(o)){if(n)continue;throw new Error(`Table "${o}" does not exist`)}this._tables.delete(o);for(const[i]of this._sequences)i.startsWith(`${o}_`)&&this._sequences.delete(i)}}return null}_compileDropView(e){const t=P(g(e,"objects")),n=g(e,"missing_ok")===!0;for(const r of t){let s=P(r);if(s.length===0){const i=g(w(r),"List");i!=null&&(s=P(g(w(i),"items")))}let o;if(s.length>0?o=J(s[s.length-1]):o=J(r),!!o){if(!this._views.has(o)){if(n)continue;throw new Error(`View "${o}" does not exist`)}this._views.delete(o)}}return null}_compileDropIndex(e){return null}_compileCreateForeignServer(e){const t=j(e,"servername");if(this._foreignServers.has(t)){if(g(e,"if_not_exists")===!0)return null;throw new Error(`Foreign server '${t}' already exists`)}const n=j(e,"fdwname");if(n!=="duckdb_fdw"&&n!=="arrow_fdw")throw new Error(`Unsupported FDW type: '${n}'`);const r={},s=P(g(e,"options"));for(const o of s){const i=w(g(o,"DefElem")??o),a=j(i,"defname"),l=w(g(i,"arg")),u=j(l,"sval")||j(w(g(l,"String")??{}),"sval");a&&(r[a]=u)}return this._foreignServers.set(t,{name:t,fdwType:n,options:r}),null}_compileCreateForeignTable(e){const t=w(g(e,"base")),n=w(g(t,"relation")),r=ae(n);if(this._foreignTables.has(r)){if(g(t,"if_not_exists")===!0)return null;throw new Error(`Foreign table '${r}' already exists`)}if(this._tables.has(r))throw new Error(`Table '${r}' already exists`);const s=j(e,"servername");if(!this._foreignServers.has(s))throw new Error(`Foreign server '${s}' does not exist`);const o=new Map,i=P(g(t,"tableElts"));for(const u of i){const h=w(g(u,"ColumnDef")??u),f=this._parseColumnDef(h);o.set(f.name,f)}const a={},l=P(g(e,"options"));for(const u of l){const h=w(g(u,"DefElem")??u),f=j(h,"defname"),d=w(g(h,"arg")),p=j(d,"sval")||j(w(g(d,"String")??{}),"sval");f&&(a[f]=p)}return this._foreignTables.set(r,{name:r,serverName:s,columns:o,options:a}),null}_compileDropForeignServer(e){const t=P(g(e,"objects")),n=g(e,"missing_ok")===!0;for(const r of t){let s;if(Array.isArray(r)){const o=r;s=J(o[o.length-1])}else s=J(r);if(this._foreignServers.has(s)){for(const o of this._foreignTables.values())if(o.serverName===s)throw new Error(`Cannot drop server '${s}': foreign table '${o.name}' depends on it`);this._foreignServers.delete(s)}else if(!n)throw new Error(`Foreign server '${s}' does not exist`)}return null}_compileDropForeignTable(e){const t=P(g(e,"objects")),n=g(e,"missing_ok")===!0;for(const r of t){const s=P(r);let o;if(s.length>0?o=J(s[s.length-1]):o=J(r),!!o){if(this._foreignTables.has(o))this._foreignTables.delete(o);else if(!n)throw new Error(`Foreign table '${o}' does not exist`)}}return null}_compileCreateView(e){const t=w(g(e,"view")),n=ae(t);if(this._tables.has(n))throw new Error(`"${n}" already exists as a table`);if(this._views.has(n))throw new Error(`View "${n}" already exists`);const r=w(g(e,"query")),s=w(g(r,"SelectStmt")??r);return this._views.set(n,s),null}_compileCreateIndex(e){return null}_compileAlterTable(e){const t=w(g(e,"relation")),n=ae(t),r=this._tables.get(n);if(!r)throw new Error(`Table "${n}" does not exist`);const s=P(g(e,"cmds"));for(const o of s){const i=w(g(o,"AlterTableCmd")??o),a=g(i,"subtype"),l=typeof a=="string"?a:"";if(l==="AT_AddColumn"||a===0||a===14){const u=w(g(i,"def")),h=w(g(u,"ColumnDef")??u),f=this._parseColumnDef(h);if(r.columns.has(f.name))throw new Error(`Column "${f.name}" already exists in table "${n}"`);r.columns.set(f.name,f)}else if(l==="AT_DropColumn"||a===10||a===12){const u=j(i,"name"),h=g(i,"missing_ok")===!0;if(!r.columns.has(u)){if(h)continue;throw new Error(`Column "${u}" does not exist in table "${n}"`)}r.columns.delete(u);for(const f of r.documentStore.docIds){const d=r.documentStore.get(f);d&&u in d&&(Reflect.deleteProperty(d,u),r.documentStore.put(f,d))}}else if(l==="AT_ColumnDefault"||a===5||a===6){const u=j(i,"name");if(!r.columns.has(u))throw new Error(`Column "${u}" does not exist in table "${n}"`);const h=g(i,"def"),f=r.columns.get(u);if(h!=null){const p=new ie().evaluate(w(h),{});r.columns.set(u,Ie(f.name,f.typeName,{...f,defaultValue:p}))}else r.columns.set(u,Ie(f.name,f.typeName,{...f,defaultValue:null}))}else if(l==="AT_SetNotNull"||a===7||a===9){const u=j(i,"name");if(!r.columns.has(u))throw new Error(`Column "${u}" does not exist in table "${n}"`);for(const f of r.documentStore.docIds){const d=r.documentStore.get(f);if(d){const p=d[u];if(p==null)throw new Error(`Column "${u}" contains NULL values; cannot set NOT NULL`)}}const h=r.columns.get(u);r.columns.set(u,Ie(h.name,h.typeName,{...h,notNull:!0}))}else if(l==="AT_DropNotNull"||a===6||a===8){const u=j(i,"name");if(!r.columns.has(u))throw new Error(`Column "${u}" does not exist in table "${n}"`);const h=r.columns.get(u);r.columns.set(u,Ie(h.name,h.typeName,{...h,notNull:!1}))}else if(l==="AT_AlterColumnType"||a===25||a===28){const u=j(i,"name");if(!r.columns.has(u))throw new Error(`Column "${u}" does not exist in table "${n}"`);const h=w(g(i,"def")),f=w(g(h,"ColumnDef")??h),d=w(g(f,"typeName")),p=[];for(const x of P(g(d,"names"))){const v=J(x);v&&v!=="pg_catalog"&&p.push(v)}const[m,_]=p.length>0?xr(p):["text","string"],y=r.columns.get(u);r.columns.set(u,Ie(u,m,{pythonType:_,primaryKey:y.primaryKey,notNull:y.notNull,autoIncrement:y.autoIncrement,defaultValue:y.defaultValue,vectorDimensions:y.vectorDimensions,unique:y.unique,numericPrecision:y.numericPrecision,numericScale:y.numericScale}));for(const x of Array.from(r.documentStore.docIds)){const v=r.documentStore.get(x);if(v&&v[u]!==null&&v[u]!==void 0){let E=v[u];_==="number"?(E=Number(E),isNaN(E)&&(E=v[u])):_==="string"?E=String(E):_==="boolean"&&(E=!!E),v[u]=E,r.documentStore.put(x,v)}}}else throw new Error(`Unsupported ALTER TABLE subcommand: ${String(a)}`)}return null}_compileRename(e){const t=g(e,"renameType"),n=typeof t=="string"?t:"";if(n==="OBJECT_TABLE"||t===36||t===42){const r=w(g(e,"relation")),s=ae(r),o=j(e,"newname"),i=this._tables.get(s);if(!i)throw new Error(`Table "${s}" does not exist`);if(this._tables.has(o))throw new Error(`Table "${o}" already exists`);return this._tables.delete(s),this._tables.set(o,i),null}if(n==="OBJECT_COLUMN"||t===8||t===9){const r=w(g(e,"relation")),s=ae(r),o=this._tables.get(s);if(!o)throw new Error(`Table "${s}" does not exist`);const i=j(e,"subname"),a=j(e,"newname");if(!o.columns.has(i))throw new Error(`Column "${i}" does not exist in table "${s}"`);if(o.columns.has(a))throw new Error(`Column "${a}" already exists in table "${s}"`);const l=[...o.columns.entries()];o.columns.clear();for(const[u,h]of l)if(u===i){const f=Ie(a,h.typeName,{...h});o.columns.set(a,f)}else o.columns.set(u,h);for(const u of o.documentStore.docIds){const h=o.documentStore.get(u);h&&i in h&&(h[a]=h[i],Reflect.deleteProperty(h,i),o.documentStore.put(u,h))}return null}throw new Error(`Unsupported RENAME type: ${String(t)}`)}_compileTruncate(e){const t=P(g(e,"relations"));for(const n of t){const r=w(g(n,"RangeVar")??n),s=ae(r),o=this._tables.get(s);if(!o)throw new Error(`Table "${s}" does not exist`);o.documentStore.clear(),o.invertedIndex.clear();for(const[,i]of o.vectorIndexes)i.clear();for(const[,i]of o.spatialIndexes)i.clear();o._nextDocId=1;for(const i of o.columns.values())if(i.autoIncrement){const a=`${s}_${i.name}_seq`,l=this._sequences.get(a);l&&(l.current=(l.start??1)-l.increment)}}return null}_compileInsert(e,t){const n=w(g(e,"relation")),r=ae(n),s=this._tables.get(r);if(!s)throw new Error(`Table "${r}" does not exist`);const o=P(g(e,"cols"));let i;o.length>0?i=o.map(S=>{const N=w(g(S,"ResTarget")??S);return j(N,"name")}):i=s.columnNames;const a=w(g(e,"selectStmt")),l=w(g(a,"SelectStmt")??a),u=P(g(l,"valuesLists")),h=new ie({params:t,sequences:this._sequences,subqueryExecutor:this._makeSubqueryExecutor(t)}),f=[];if(u.length===0){const S=this._compileSelect(l,t);for(const N of S.rows){const A={};for(let O=0;O<i.length;O++)O<S.columns.length&&(A[i[O]]=N[S.columns[O]]??null);f.push(A)}}else for(const S of u){const N=w(g(S,"List")),A=P(g(N,"items")??S);if(A.length!==i.length)throw new Error(`VALUES has ${String(A.length)} columns but ${String(i.length)} were specified`);const O={};for(let R=0;R<i.length;R++)O[i[R]]=yi(A[R],t,h);f.push(O)}const d=g(e,"onConflictClause");let p=[],m=null,_=[];if(d!=null){const S=w(d),N=w(g(S,"infer"));p=P(g(N,"indexElems")).map(O=>{const R=w(g(O,"IndexElem")??O);return j(R,"name")}),m=g(S,"action"),_=P(g(S,"targetList"))}const y=new Map;if(p.length>0)for(const S of s.documentStore.docIds){const N=s.documentStore.get(S);if(N!==null){const A=p.map(O=>JSON.stringify(N[O])).join("\0");y.set(A,S)}}const x=P(g(e,"returningList")),v=x.length>0,E=[];let I=0;for(const S of f){if(p.length>0&&d!==null){const A=p.map(R=>JSON.stringify(S[R])).join("\0"),O=y.get(A);if(O!==void 0){if(m===1||m==="ONCONFLICT_NOTHING")continue;this._doConflictUpdate(s,O,S,_,h);const R=s.documentStore.get(O);if(R!==null){const T=p.map(F=>JSON.stringify(R[F])).join("\0");T!==A&&(y.delete(A),y.set(T,O))}v&&R!==null&&E.push(this._evaluateReturning(x,R,h,s)),I++;continue}}const[N]=s.insert(S);if(I++,p.length>0){const A=p.map(O=>JSON.stringify(S[O])).join("\0");y.set(A,N)}if(v){const A=s.documentStore.get(N);A!==null&&E.push(this._evaluateReturning(x,A,h,s))}}return v?{columns:this._extractReturningColumns(x,s),rows:E}:{columns:["inserted"],rows:[{inserted:I}]}}_doConflictUpdate(e,t,n,r,s){const o=e.documentStore.get(t);if(o===null)return;const i={...o},a={...o};for(const[u,h]of Object.entries(n))a[`excluded.${u}`]=h;for(const u of r){const h=w(g(u,"ResTarget")??u),f=j(h,"name"),d=g(h,"val");if(d!=null){const p=s.evaluate(w(d),a);p!=null?i[f]=p:Reflect.deleteProperty(i,f)}}e.invertedIndex.removeDocument(t),e.documentStore.put(t,i);const l={};for(const[u,h]of Object.entries(i))typeof h=="string"&&(l[u]=h);Object.keys(l).length>0&&e.invertedIndex.addDocument(t,l)}_compileUpdate(e,t){const n=w(g(e,"relation")),r=ae(n),s=this._tables.get(r);if(!s)throw new Error(`Table "${r}" does not exist`);if(P(g(e,"fromClause")).length>0)return this._compileUpdateFrom(e,s,t);const i=g(e,"whereClause"),a=P(g(e,"targetList")),l=P(g(e,"returningList")),u=l.length>0,h=[],f=new ie({params:t,sequences:this._sequences,outerRow:this._correlatedOuterRow??void 0,subqueryExecutor:this._makeSubqueryExecutor(t)}),d=[];for(const m of a){const _=w(g(m,"ResTarget")??m),y=j(_,"name");if(!s.columns.has(y))throw new Error(`Unknown column "${y}" for table "${r}"`);d.push([y,w(g(_,"val"))])}let p=0;for(const[m,_]of s.documentStore.iterAll()){if(i!=null&&f.evaluate(w(i),_)!==!0)continue;const y={..._};for(const[v,E]of d){const I=f.evaluate(E,_),S=s.columns.get(v);if(I!=null)y[v]=I;else{if(S&&S.notNull)throw new Error(`NOT NULL constraint violated: column "${v}" in table "${r}"`);Reflect.deleteProperty(y,v)}}for(const v of s.fkUpdateValidators)v(_,y);s.invertedIndex.removeDocument(m),s.documentStore.put(m,y);const x={};for(const[v,E]of Object.entries(y))typeof E=="string"&&(x[v]=E);Object.keys(x).length>0&&s.invertedIndex.addDocument(m,x),u&&h.push(this._evaluateReturning(l,y,f,s)),p++}return u?{columns:this._extractReturningColumns(l,s),rows:h}:{columns:["updated"],rows:[{updated:p}]}}_compileUpdateFrom(e,t,n){const r=t.name,s=w(g(e,"relation")),o=Ue(s)??r,i=P(g(e,"fromClause")),a=g(e,"whereClause"),l=P(g(e,"targetList")),u=P(g(e,"returningList")),h=u.length>0,f=[],d=new ie({params:n,sequences:this._sequences,outerRow:this._correlatedOuterRow??void 0,subqueryExecutor:this._makeSubqueryExecutor(n)}),p=[];for(const y of l){const x=w(g(y,"ResTarget")??y),v=j(x,"name");if(!t.columns.has(v))throw new Error(`Unknown column "${v}" for table "${r}"`);p.push([v,w(g(x,"val"))])}const m=this._resolveFrom(i,n);let _=0;for(const[y,x]of t.documentStore.iterAll()){const v={...x};for(const[E,I]of Object.entries(x))v[`${o}.${E}`]=I;for(const E of m){const I={...v,...E};if(a!=null&&!d.evaluate(w(a),I))continue;const S={...x};for(const[A,O]of p){const R=d.evaluate(O,I),T=t.columns.get(A);if(R!=null)S[A]=R;else{if(T&&T.notNull)throw new Error(`NOT NULL constraint violated: column "${A}" in table "${r}"`);Reflect.deleteProperty(S,A)}}t.invertedIndex.removeDocument(y),t.documentStore.put(y,S);const N={};for(const[A,O]of Object.entries(S))typeof O=="string"&&(N[A]=O);Object.keys(N).length>0&&t.invertedIndex.addDocument(y,N),h&&f.push(this._evaluateReturning(u,S,d,t)),_++;break}}return h?{columns:this._extractReturningColumns(u,t),rows:f}:{columns:["updated"],rows:[{updated:_}]}}_compileDelete(e,t){const n=w(g(e,"relation")),r=ae(n),s=this._tables.get(r);if(!s)throw new Error(`Table "${r}" does not exist`);if(P(g(e,"usingClause")).length>0)return this._compileDeleteUsing(e,s,t);const i=g(e,"whereClause"),a=P(g(e,"returningList")),l=a.length>0,u=[],h=new ie({params:t,outerRow:this._correlatedOuterRow??void 0,subqueryExecutor:this._makeSubqueryExecutor(t)}),f=[];for(const[d,p]of s.documentStore.iterAll())i!=null&&h.evaluate(w(i),p)!==!0||(l&&u.push(this._evaluateReturning(a,p,h,s)),f.push(d));for(const d of f)for(const p of s.fkDeleteValidators)p(d);for(const d of f)s.invertedIndex.removeDocument(d),s.documentStore.delete(d);return l?{columns:this._extractReturningColumns(a,s),rows:u}:{columns:["deleted"],rows:[{deleted:f.length}]}}_compileDeleteUsing(e,t,n){const r=t.name,s=w(g(e,"relation")),o=Ue(s)??r,i=P(g(e,"usingClause")),a=g(e,"whereClause"),l=P(g(e,"returningList")),u=l.length>0,h=[],f=new ie({params:n,outerRow:this._correlatedOuterRow??void 0,subqueryExecutor:this._makeSubqueryExecutor(n)}),d=this._resolveFrom(i,n),p=[];for(const[m,_]of t.documentStore.iterAll()){const y={..._};for(const[x,v]of Object.entries(_))y[`${o}.${x}`]=v;for(const x of d){const v={...y,...x};if(!(a!=null&&!f.evaluate(w(a),v))){u&&h.push(this._evaluateReturning(l,_,f,t)),p.push(m);break}}}for(const m of p)t.invertedIndex.removeDocument(m),t.documentStore.delete(m);return u?{columns:this._extractReturningColumns(l,t),rows:h}:{columns:["deleted"],rows:[{deleted:p.length}]}}_compileTransaction(e){return g(e,"kind"),this._transactionActive=!this._transactionActive,null}_compilePrepare(e){const t=j(e,"name");if(this._prepared.has(t))throw new Error(`Prepared statement "${t}" already exists`);const n=w(g(e,"query"));return this._prepared.set(t,n),null}_compileExecute(e,t){const n=j(e,"name"),r=this._prepared.get(n);if(r===void 0)throw new Error(`Prepared statement "${n}" does not exist`);const s=P(g(e,"params")),o=new ie({params:t}),i=[];for(const l of s)i.push(o.evaluate(l,{}));const a=this._params;this._params=i;try{return this._dispatchStatement(r,i)}finally{this._params=a}}_compileDeallocate(e){const t=j(e,"name");if(!t)this._prepared.clear();else{if(!this._prepared.has(t))throw new Error(`Prepared statement "${t}" does not exist`);this._prepared.delete(t)}return null}_compileExplain(e,t){const n=w(g(e,"query")),r=w(g(n,"SelectStmt")??n),s=P(g(r,"fromClause"));let o=`${String(this._tables.size)} tables`;if(s.length>0){const a=s[0],l=w(g(a,"RangeVar")??a),u=ae(l);if(u){const h=this._tables.get(u);h&&(o=`table "${u}" (${String(h.rowCount)} rows)`)}}const i=`Seq Scan on ${o}`;return{columns:["QUERY PLAN"],rows:[{"QUERY PLAN":i}]}}_compileAnalyze(e){const t=e.rels;if(t&&t.length>0)for(const n of t){const r=n,o=(r.VacuumRelation??r).relation,i=o?o.relname:null;i&&this._tables.has(i)&&this._tables.get(i).analyze()}else for(const n of this._tables.values())n.analyze();return null}_compileSelect(e,t,n){const r=g(e,"withClause");let s=[];if(r!=null){const a=w(r),l=P(g(a,"ctes")),u=g(a,"recursive")===!0;s=this._materializeCTEs(l,t,u,e)}const o=this._correlatedOuterRow;this._correlatedOuterRow=n??null;const i=new Map(this._inlinedCTEs);try{return this._compileSelectBody(e,t)}finally{this._correlatedOuterRow=o;for(const a of s)this._inlinedCTEs.delete(a);this._inlinedCTEs=i;for(const a of s)this._tables.delete(a);for(const a of this._expandedViews)this._shadowedTables.has(a)?(this._tables.set(a,this._shadowedTables.get(a)),this._shadowedTables.delete(a)):this._tables.delete(a);this._expandedViews=[]}}_compileSelectBody(e,t){const n=P(g(e,"valuesLists"));if(n.length>0)return this._compileValues(n,t);const r=g(e,"op");if(r!=null&&r!==0&&r!=="SETOP_NONE")return this._compileSetOp(e,t);e=this._tryPredicatePushdown(e,t);const s=P(g(e,"fromClause")),o=g(e,"whereClause"),i=P(g(e,"targetList")),a=P(g(e,"groupClause")),l=g(e,"havingClause"),u=P(g(e,"sortClause")),h=g(e,"limitCount"),f=g(e,"limitOffset"),d=g(e,"distinctClause"),p=P(g(e,"windowClause")),m=new ie({params:t,sequences:this._sequences,outerRow:this._correlatedOuterRow??void 0,subqueryExecutor:this._makeSubqueryExecutor(t)});let _;if(s.length===0?_=[{}]:_=this._resolveFrom(s,t),o!=null){const S=w(o);if(le._containsUQAFunction(S)){const N=this._resolveFromTableName(s);if(N){const A=this._tables.get(N);if(A){const O=this._contextForTable(A),[R,T]=this._splitUQAConjuncts(S);let F=null;if(R&&(F=this._compileWhere(R,O)),F){const C=F.execute(O),V=[],Y=A.documentStore,oe=A.primaryKey;for(const xe of C){const ue=Y.get(xe.docId);if(!ue)continue;const ge={...ue,_score:xe.payload.score};oe&&(ge[oe]=xe.docId),ge._doc_id=xe.docId,V.push(ge)}_=V,T&&(_=_.filter(xe=>m.evaluate(w(T),xe)===!0))}}else _=_.filter(O=>m.evaluate(S,O)===!0)}else _=_.filter(A=>m.evaluate(S,A)===!0)}else _=_.filter(N=>m.evaluate(S,N)===!0)}const y=this._hasAggregates(i);a.length>0?_=this._applyGroupBy(_,a,i,l,m):y&&(_=this._applyGroupBy(_,[],i,l,m));const x=this._hasWindowFunctions(i);x&&(_=this._applyWindowFunctions(_,i,p,m));let v,E;a.length>0||y||x?(v=this._resolveSelectColumnNames(i,_),E=_):[v,E]=this._projectColumns(i,_,m);let I=E;if(d!=null&&(I=this._applyDistinct(I,v)),u.length>0&&(I=this._applyOrderBy(I,u,m,i)),f!=null){const S=Number(m.evaluate(w(f),{}));I=I.slice(S)}if(h!=null){const S=Number(m.evaluate(w(h),{}));I=I.slice(0,S)}return{columns:v,rows:I}}_materializeCTEs(e,t,n,r){const s=[];for(const o of e){const i=w(g(o,"CommonTableExpr")??o),a=j(i,"ctename"),l=w(g(i,"ctequery")),u=w(g(l,"SelectStmt")??l),h=g(u,"op");if(n&&h!==null&&h!==void 0&&h!==0&&h!=="SETOP_NONE")this._materializeRecursiveCTE(i,u,t);else if(this._countCTERefs(a,r)===1)this._inlinedCTEs.set(a,u);else{const p=this._compileSelect(u,t),m=this._resultToTable(a,p);this._tables.set(a,m)}s.push(a)}return s}_materializeRecursiveCTE(e,t,n){const r=j(e,"ctename"),s=g(t,"all")===!0,o=P(g(e,"aliascolnames")),i=o.length>0?o.map(x=>J(x)):null,a=w(g(t,"larg")),l=w(g(a,"SelectStmt")??a),u=this._compileSelect(l,n),h=u.columns;let f,d;if(i!==null){d=[];for(const x of u.rows){const v={};for(let E=0;E<i.length;E++)E<h.length&&(v[i[E]]=x[h[E]]??null);d.push(v)}f=i}else d=[...u.rows],f=h;let p=null;if(!s){p=new Set;const x=[];for(const v of d){const E=f.map(I=>JSON.stringify(v[I])).join("\0");p.has(E)||(p.add(E),x.push(v))}d=x}let m=[...d];for(let x=0;x<bi;x++){const v={columns:f,rows:m},E=this._resultToTable(r,v);this._tables.set(r,E);const I=w(g(t,"rarg")),S=w(g(I,"SelectStmt")??I),N=this._compileSelect(S,n),A=i??f,O=[];for(const T of N.rows){const F={};for(let C=0;C<A.length;C++)C<N.columns.length&&(F[A[C]]=T[N.columns[C]]??null);O.push(F)}if(O.length===0)break;let R=O;if(p!==null){R=[];for(const T of O){const F=f.map(C=>JSON.stringify(T[C])).join("\0");p.has(F)||(p.add(F),R.push(T))}if(R.length===0)break}d.push(...R),m=R}const _={columns:f,rows:d},y=this._resultToTable(r,_);this._tables.set(r,y)}_countCTERefs(e,t){if(t==null||typeof t!="object")return 0;if(Array.isArray(t)){let o=0;for(const i of t)o+=this._countCTERefs(e,i);return o}const n=t,r=g(n,"RangeVar");if(r!=null&&j(w(r),"relname")===e||j(n,"relname")===e)return 1;let s=0;for(const[o,i]of Object.entries(n))o!=="withClause"&&i!==null&&typeof i=="object"&&(s+=this._countCTERefs(e,i));return s}_resultToTable(e,t){const n=[];for(const s of t.columns){let o="text",i="string";for(const a of t.rows){const l=a[s];if(l!=null){typeof l=="boolean"?(o="text",i="string"):typeof l=="number"&&(Number.isInteger(l)?(o="integer",i="number"):(o="real",i="number"));break}}n.push(Ie(s,o,{pythonType:i}))}const r=new Ut(e,n);for(let s=0;s<t.rows.length;s++){const o=s+1,i={_id:o};Object.assign(i,t.rows[s]),r.documentStore.put(o,i)}return r}_compileSetOp(e,t){const n=g(e,"op"),r=w(g(e,"larg")),s=w(g(e,"rarg")),o=g(e,"all")===!0,i=w(g(r,"SelectStmt")??r),a=w(g(s,"SelectStmt")??s),l=this._compileSelect(i,t),u=this._compileSelect(a,t);if(l.columns.length!==u.columns.length)throw new Error(`Set operation column count mismatch: ${String(l.columns.length)} vs ${String(u.columns.length)}`);const h=l.columns,f=u.rows.map(y=>{const x={};for(let v=0;v<h.length;v++)x[h[v]]=y[u.columns[v]]??null;return x});let d;if(n===1||n==="SETOP_UNION")d=this._setUnion(l.rows,f,h,o);else if(n===2||n==="SETOP_INTERSECT")d=this._setIntersect(l.rows,f,h,o);else if(n===3||n==="SETOP_EXCEPT")d=this._setExcept(l.rows,f,h,o);else throw new Error(`Unsupported set operation: ${String(n)}`);const p=P(g(e,"sortClause"));if(p.length>0){const y=new ie({params:t}),x=P(g(i,"targetList"));d=this._applyOrderBy(d,p,y,x)}const m=g(e,"limitCount"),_=g(e,"limitOffset");if(_!=null){const y=new ie({params:t}),x=Number(y.evaluate(w(_),{}));d=d.slice(x)}if(m!=null){const y=new ie({params:t}),x=Number(y.evaluate(w(m),{}));d=d.slice(0,x)}return{columns:h,rows:d}}_setUnion(e,t,n,r){if(r)return[...e,...t];const s=new Set,o=[];for(const i of[...e,...t]){const a=n.map(l=>JSON.stringify(i[l])).join("\0");s.has(a)||(s.add(a),o.push(i))}return o}_setIntersect(e,t,n,r){if(r){const a=new Map;for(const u of t){const h=n.map(f=>JSON.stringify(u[f])).join("\0");a.set(h,(a.get(h)??0)+1)}const l=[];for(const u of e){const h=n.map(d=>JSON.stringify(u[d])).join("\0"),f=a.get(h)??0;f>0&&(l.push(u),a.set(h,f-1))}return l}const s=new Set(t.map(a=>n.map(l=>JSON.stringify(a[l])).join("\0"))),o=new Set,i=[];for(const a of e){const l=n.map(u=>JSON.stringify(a[u])).join("\0");s.has(l)&&!o.has(l)&&(o.add(l),i.push(a))}return i}_setExcept(e,t,n,r){if(r){const a=new Map;for(const u of t){const h=n.map(f=>JSON.stringify(u[f])).join("\0");a.set(h,(a.get(h)??0)+1)}const l=[];for(const u of e){const h=n.map(d=>JSON.stringify(u[d])).join("\0"),f=a.get(h)??0;f>0?a.set(h,f-1):l.push(u)}return l}const s=new Set(t.map(a=>n.map(l=>JSON.stringify(a[l])).join("\0"))),o=new Set,i=[];for(const a of e){const l=n.map(u=>JSON.stringify(a[u])).join("\0");!s.has(l)&&!o.has(l)&&(o.add(l),i.push(a))}return i}_compileValues(e,t){const n=new ie({params:t}),r=[];let s=0;for(const i of e){const a=w(g(i,"List")),l=P(g(a,"items")??i);s=Math.max(s,l.length);const u={};for(let h=0;h<l.length;h++){const f=`column${String(h+1)}`;u[f]=n.evaluate(l[h],{})}r.push(u)}const o=[];for(let i=0;i<s;i++)o.push(`column${String(i+1)}`);return{columns:o,rows:r}}_resolveFromTableName(e){if(e.length!==1)return null;const n=e[0].RangeVar;return n?n.relname??null:null}_resolveFrom(e,t){let n=null;for(const r of e){const s=g(r,"RangeSubselect");if(s!=null){const i=w(s);if(g(i,"lateral")===!0&&n!==null){n=this._resolveLateralJoin(n,i,t);continue}}const o=this._resolveFromItem(r,t);n===null?n=o:n=this._crossJoin(n,o)}return n??[{}]}_resolveFromItem(e,t){const n=g(e,"RangeVar");if(n!=null){const i=w(n),a=ae(i),l=Ue(i),u=pi(i);if(u==="information_schema")return this._buildInformationSchemaTable(a,l??a);if(u==="pg_catalog")return this._buildPgCatalogTable(a,l??a);const h=this._views.get(a);if(h!==void 0){const m=this._compileSelect(h,t);return this._applyAlias(m.rows,l??a)}const f=this._inlinedCTEs.get(a);if(f!==void 0){this._inlinedCTEs.delete(a);const m=this._compileSelect(f,t),_=this._resultToTable(a,m);this._tables.set(a,_),this._expandedViews.push(a);const y=[];for(const[,x]of _.documentStore.iterAll())y.push({...x});return this._applyAlias(y,l??a)}const d=this._tables.get(a);if(!d)throw new Error(`Table "${a}" does not exist`);const p=[];for(const[,m]of d.documentStore.iterAll())p.push({...m});return this._applyAlias(p,l??a)}const r=g(e,"JoinExpr");if(r!=null)return this._resolveJoin(w(r),t);const s=g(e,"RangeSubselect");if(s!=null){const i=w(s),a=w(g(i,"subquery")),l=w(g(a,"SelectStmt")??a),u=Ue(i),h=this._compileSelect(l,t);return this._applyAlias(h.rows,u)}const o=g(e,"RangeFunction");if(o!=null)return this._compileFromFunction(w(o),t);throw new Error("Unsupported FROM clause item")}_applyAlias(e,t){return t===null?e:e.map(n=>{const r={...n};for(const[s,o]of Object.entries(n))s.includes(".")||(r[`${t}.${s}`]=o);return r})}_resolveLateralJoin(e,t,n){const r=w(g(t,"subquery")),s=w(g(r,"SelectStmt")??r),o=Ue(t)??"_lateral",i=[];for(const a of e){const l=this._compileSelect(s,n,a);for(const u of l.rows){const h={};for(const[f,d]of Object.entries(u))h[f]=d,h[`${o}.${f}`]=d;i.push({...a,...h})}}return i}_compileFromFunction(e,t){const n=P(g(e,"functions"));if(n.length===0)throw new Error("Empty RangeFunction");const r=n[0],s=g(r,"List"),o=s!=null?P(g(w(s),"items")):P(r);if(o.length===0)throw new Error("Empty function list in RangeFunction");const i=w(g(o[0],"FuncCall")??o[0]),a=P(g(i,"funcname")),l=J(a[a.length-1]).toLowerCase(),u=P(g(i,"args")),h=Ue(e),f=w(g(e,"alias")),d=P(g(f,"colnames")),p=d.length>0?J(d[0]):null,m=new ie({params:t});if(l==="generate_series")return this._buildGenerateSeries(u,m,h??"generate_series",p??"generate_series");if(l==="unnest")return this._buildUnnest(u,m,h??"unnest",p??"unnest");if(l==="json_each"||l==="jsonb_each"||l==="json_each_text"||l==="jsonb_each_text")return this._buildJSONEach(u,m,h??l,l.endsWith("_text"));if(l==="json_array_elements"||l==="jsonb_array_elements"||l==="json_array_elements_text"||l==="jsonb_array_elements_text")return this._buildJSONArrayElements(u,m,h??l,l.endsWith("_text"));if(l==="regexp_split_to_table")return this._buildRegexpSplitToTable(u,m,h??"regexp_split_to_table",p??"regexp_split_to_table");if(l==="create_graph")return this._buildCreateGraph(u,m);if(l==="drop_graph")return this._buildDropGraph(u,m);if(l==="create_analyzer")return this._buildCreateAnalyzer(u,m);if(l==="drop_analyzer")return this._buildDropAnalyzer(u,m);if(l==="list_analyzers")return this._buildListAnalyzers();if(l==="set_table_analyzer")return this._buildSetTableAnalyzer(u,m);if(l==="graph_add_vertex")return this._buildGraphAddVertex(u,m);if(l==="graph_add_edge")return this._buildGraphAddEdge(u,m);if(l==="build_grid_graph")return this._buildGridGraph(u,m);if(l==="cypher")return this._buildCypherFrom(u,m);throw new Error(`Unsupported FROM-clause function: ${l}`)}_buildCreateGraph(e,t){if(!e.length)throw new Error("create_graph() requires a graph name");const n=String(t.evaluate(e[0],{}));return this._engine.createGraph(n),[{create_graph:`graph '${n}' created`}]}_buildDropGraph(e,t){if(!e.length)throw new Error("drop_graph() requires a graph name");const n=String(t.evaluate(e[0],{}));return this._engine.dropGraph(n),[{drop_graph:`graph '${n}' dropped`}]}_buildCreateAnalyzer(e,t){if(e.length<2)throw new Error("create_analyzer() requires (name, config_json)");const n=String(t.evaluate(e[0],{})),r=JSON.parse(String(t.evaluate(e[1],{})));return this._engine.createAnalyzer(n,r),[{create_analyzer:`analyzer '${n}' created`}]}_buildDropAnalyzer(e,t){if(!e.length)throw new Error("drop_analyzer() requires a name");const n=String(t.evaluate(e[0],{}));return this._engine.dropAnalyzer(n),[{drop_analyzer:`analyzer '${n}' dropped`}]}_buildListAnalyzers(){return xs().map(e=>({analyzer_name:e}))}_buildSetTableAnalyzer(e,t){if(e.length<3)throw new Error("set_table_analyzer(table, field, analyzer[, phase])");const n=String(t.evaluate(e[0],{})),r=String(t.evaluate(e[1],{})),s=String(t.evaluate(e[2],{})),o=e.length>3?String(t.evaluate(e[3],{})):"both";return this._engine.setTableAnalyzer(n,r,s,{phase:o}),[{set_table_analyzer:`analyzer '${s}' assigned to ${n}.${r}`}]}_buildGraphAddVertex(e,t){if(e.length<3)throw new Error("graph_add_vertex(id, label, table[, props])");const n=Number(t.evaluate(e[0],{})),r=String(t.evaluate(e[1],{})),s=String(t.evaluate(e[2],{})),o={};if(e.length>3)for(const i of String(t.evaluate(e[3],{})).split(",")){const[a,l]=i.trim().split("=",2);a&&l&&(o[a.trim()]=isNaN(Number(l.trim()))?l.trim():Number(l.trim()))}return this._engine.addGraphVertex(an(n,r,o),{table:s}),[{result:`vertex ${String(n)} added to ${s}`}]}_buildGraphAddEdge(e,t){if(e.length<5)throw new Error("graph_add_edge(eid, src, tgt, label, table[, props])");const n=Number(t.evaluate(e[0],{})),r=Number(t.evaluate(e[1],{})),s=Number(t.evaluate(e[2],{})),o=String(t.evaluate(e[3],{})),i=String(t.evaluate(e[4],{})),a={};if(e.length>5)for(const l of String(t.evaluate(e[5],{})).split(",")){const[u,h]=l.trim().split("=",2);u&&h&&(a[u.trim()]=isNaN(Number(h.trim()))?h.trim():Number(h.trim()))}return this._engine.addGraphEdge(gt(n,r,s,o,a),{table:i}),[{result:`edge ${String(n)} added to ${i}`}]}_buildGridGraph(e,t){if(e.length<4)throw new Error("build_grid_graph(table, rows, cols, label)");const n=String(t.evaluate(e[0],{})),r=Number(t.evaluate(e[1],{})),s=Number(t.evaluate(e[2],{})),o=String(t.evaluate(e[3],{}));let i=1;for(let a=0;a<r;a++)for(let l=0;l<s;l++){const u=a*s+l+1;l<s-1&&this._engine.addGraphEdge(gt(i++,u,u+1,o),{table:n}),a<r-1&&this._engine.addGraphEdge(gt(i++,u,u+s,o),{table:n})}return[{table_name:n,rows:r,cols:s,edges:i-1}]}_buildCypherFrom(e,t){if(e.length<2)throw new Error("cypher() requires (graph_name, query)");const n=String(t.evaluate(e[0],{})),r=String(t.evaluate(e[1],{})),s=this._engine.getGraph(n),o={};for(let a=0;a<this._params.length;a++)o[String(a+1)]=this._params[a];return new yo(s,n,o).executeRows(r,o)}_buildGenerateSeries(e,t,n,r){if(e.length<2)throw new Error("generate_series requires at least 2 arguments");const s=Number(t.evaluate(e[0],{})),o=Number(t.evaluate(e[1],{})),i=e.length>2?Number(t.evaluate(e[2],{})):1;if(i===0)throw new Error("generate_series step cannot be zero");const a=[];if(i>0)for(let l=s;l<=o;l+=i){const u={[r]:l};u[`${n}.${r}`]=l,a.push(u)}else for(let l=s;l>=o;l+=i){const u={[r]:l};u[`${n}.${r}`]=l,a.push(u)}return a}_buildUnnest(e,t,n,r){if(e.length<1)throw new Error("unnest requires at least 1 argument");let s=t.evaluate(e[0],{});Array.isArray(s)||(s=[s]);const o=[];for(const i of s){const a={[r]:i};a[`${n}.${r}`]=i,o.push(a)}return o}_buildJSONEach(e,t,n,r){if(e.length<1)throw new Error("json_each requires at least 1 argument");let s=t.evaluate(e[0],{});if(typeof s=="string"&&(s=JSON.parse(s)),s===null||typeof s!="object"||Array.isArray(s))throw new Error("json_each expects a JSON object");const o=[];for(const[i,a]of Object.entries(s)){const l=r?String(a):a,u={key:i,value:l};u[`${n}.key`]=i,u[`${n}.value`]=l,o.push(u)}return o}_buildJSONArrayElements(e,t,n,r){if(e.length<1)throw new Error("json_array_elements requires at least 1 argument");let s=t.evaluate(e[0],{});if(typeof s=="string"&&(s=JSON.parse(s)),!Array.isArray(s))throw new Error("json_array_elements expects a JSON array");const o=[];for(const i of s){const a=r?String(i):i,l={value:a};l[`${n}.value`]=a,o.push(l)}return o}_buildRegexpSplitToTable(e,t,n,r){if(e.length<2)throw new Error("regexp_split_to_table requires at least 2 arguments");const s=String(t.evaluate(e[0],{})),o=String(t.evaluate(e[1],{})),i=e.length>2?String(t.evaluate(e[2],{})):"",a=new RegExp(o,i.includes("g")?i:i+"g"),l=s.split(a),u=[];for(const h of l){const f={[r]:h};f[`${n}.${r}`]=h,u.push(f)}return u}_crossJoin(e,t){const n=[];for(const r of e)for(const s of t)n.push({...r,...s});return n}_resolveJoin(e,t){const n=g(e,"jointype"),r=w(g(e,"larg")),s=w(g(e,"rarg")),o=g(e,"quals"),i=g(s,"RangeSubselect");if(i!=null){const _=w(i);if(g(_,"lateral")===!0){const y=this._resolveFromItem(r,t);return this._resolveLateralJoin(y,_,t)}}const a=this._resolveFromItem(r,t),l=this._resolveFromItem(s,t),u=new ie({params:t});if(n===5||n==="JOIN_CROSS")return this._crossJoin(a,l);if((n===0||n==="JOIN_INNER")&&o==null)return this._crossJoin(a,l);const h=[],f=n===1||n==="JOIN_LEFT",d=n===3||n==="JOIN_RIGHT",p=n===2||n==="JOIN_FULL",m=new Set;for(const _ of a){let y=!1;for(let x=0;x<l.length;x++){const v=l[x],E={..._,...v};o!=null&&u.evaluate(w(o),E)!==!0||(h.push(E),y=!0,m.add(x))}if(!y&&(f||p)){const x={..._};if(l.length>0)for(const v of Object.keys(l[0]))v in x||(x[v]=null);h.push(x)}}if(d||p){for(let _=0;_<l.length;_++)if(!m.has(_)){const y={};if(a.length>0)for(const x of Object.keys(a[0]))y[x]=null;for(const[x,v]of Object.entries(l[_]))y[x]=v;h.push(y)}}return h}_buildInformationSchemaTable(e,t){if(e==="tables"){const n=[];for(const r of[...this._tables.keys()].sort())n.push({table_catalog:"",table_schema:"public",table_name:r,table_type:"BASE TABLE"});for(const r of[...this._foreignTables.keys()].sort())n.push({table_catalog:"",table_schema:"public",table_name:r,table_type:"FOREIGN TABLE"});for(const r of[...this._views.keys()].sort())n.push({table_catalog:"",table_schema:"public",table_name:r,table_type:"VIEW"});return this._applyAlias(n,t)}if(e==="columns"){const n={int2:"smallint",int4:"integer",int8:"bigint",float4:"real",float8:"double precision",bool:"boolean"},r=[];for(const s of[...this._tables.keys()].sort()){const o=this._tables.get(s);let i=1;for(const[a,l]of o.columns){const u=n[l.typeName]??l.typeName;r.push({table_catalog:"",table_schema:"public",table_name:s,column_name:a,ordinal_position:i,data_type:u,is_nullable:l.notNull?"NO":"YES"}),i++}}for(const s of[...this._foreignTables.keys()].sort()){const o=this._foreignTables.get(s);let i=1;for(const[a,l]of o.columns){const u=n[l.typeName]??l.typeName;r.push({table_catalog:"",table_schema:"public",table_name:s,column_name:a,ordinal_position:i,data_type:u,is_nullable:l.notNull?"NO":"YES"}),i++}}return this._applyAlias(r,t)}throw new Error(`Unknown information_schema view: "${e}"`)}_buildPgCatalogTable(e,t){if(e==="pg_tables"){const n=[];for(const r of[...this._tables.keys()].sort())n.push({schemaname:"public",tablename:r,tableowner:"",tablespace:""});return this._applyAlias(n,t)}if(e==="pg_views"){const n=[];for(const r of[...this._views.keys()].sort())n.push({schemaname:"public",viewname:r,viewowner:"",definition:""});return this._applyAlias(n,t)}if(e==="pg_indexes"){const n=[],r=this._engine,s=r!==null?r._indexManager:void 0;if(s!==void 0){const o=s._indexes;if(o!==void 0)for(const i of o.values()){const a=i.indexDef;if(a!==void 0){const l=a.tableName??"",u=a.name??"",h=a.columns??[];n.push({schemaname:"public",tablename:l,indexname:u,tablespace:"",indexdef:`CREATE INDEX ${u} ON ${l} (${h.join(", ")})`})}}}return this._applyAlias(n,t)}if(e==="pg_type"){const r=[[16,"boolean",11,1,"b","B"],[17,"bytea",11,-1,"b","U"],[20,"bigint",11,8,"b","N"],[21,"smallint",11,2,"b","N"],[23,"integer",11,4,"b","N"],[25,"text",11,-1,"b","S"],[114,"json",11,-1,"b","U"],[142,"xml",11,-1,"b","U"],[700,"real",11,4,"b","N"],[701,"float8",11,8,"b","N"],[1043,"varchar",11,-1,"b","S"],[1082,"date",11,4,"b","D"],[1083,"time",11,8,"b","D"],[1114,"timestamp",11,8,"b","D"],[1184,"timestamptz",11,8,"b","D"],[1186,"interval",11,16,"b","T"],[1700,"numeric",11,-1,"b","N"],[2950,"uuid",11,16,"b","U"],[3802,"jsonb",11,-1,"b","U"],[16385,"vector",11,-1,"b","U"]].map(([s,o,i,a,l,u])=>({oid:s,typname:o,typnamespace:i,typlen:a,typtype:l,typcategory:u}));return this._applyAlias(r,t)}throw new Error(`Unknown pg_catalog view: "${e}"`)}_projectColumns(e,t,n){if(e.length===0){if(t.length===0)return[[],[]];const i=Object.keys(t[0]).filter(a=>!a.includes("."));return[i,t.map(a=>{const l={};for(const u of i)l[u]=a[u];return l})]}const r=[],s=[];for(const i of e){const a=w(g(i,"ResTarget")??i),l=g(a,"val"),u=j(a,"name");if(l!=null){const h=w(l);if(tt(h)){const d=g(h,"ColumnRef");if(d!=null){const p=P(g(w(d),"fields"));if(p.length>=2){const m=J(p[0]);if(t.length>0)for(const _ of Object.keys(t[0])){const y=`${m}.`;if(_.startsWith(y)){const x=_.slice(y.length);x.includes(".")||(r.push(x),s.push({name:x,node:null}))}}continue}}if(t.length>0)for(const p of Object.keys(t[0]))p.includes(".")||(r.push(p),s.push({name:p,node:null}));continue}let f=u;f||(f=this._deriveColumnName(h)),r.push(f),s.push({name:f,node:h})}}const o=[];for(const i of t){const a={};for(const l of s)l.node===null?a[l.name]=i[l.name]:a[l.name]=n.evaluate(l.node,i);o.push(a)}return[r,o]}_deriveColumnName(e){if(X(e))try{return B(e)}catch{}if(Q(e)){const t=ce(e);if(et.has(t)){const n=ve(e);if(nt(e)||n.length===0)return t;try{const r=B(n[0]);return`${t}_${r}`}catch{return t}}return t}if(rn(e)){const t=w(g(e,"TypeCast")),n=w(g(t,"arg"));if(X(n))try{return B(n)}catch{}}return nn(e),"?column?"}_resolveSelectColumnNames(e,t){if(e.length===0)return t.length===0?[]:Object.keys(t[0]).filter(r=>!r.includes("."));const n=[];for(const r of e){const s=w(g(r,"ResTarget")??r),o=g(s,"val"),i=j(s,"name");if(o!=null){const a=w(o);if(tt(a)){if(t.length>0)for(const l of Object.keys(t[0]))l.includes(".")||n.push(l);continue}n.push(i||this._deriveColumnName(a))}}return n}_hasAggregates(e){for(const t of e){const n=w(g(t,"ResTarget")??t),r=g(n,"val");if(r!=null&&this._containsAggregate(w(r)))return!0}return!1}_containsAggregate(e){if(Q(e)){const t=ce(e);if(et.has(t)&&!rt(e))return!0}if(nn(e)||g(e,"SubLink")!==null)return!1;for(const[,t]of Object.entries(e))if(t!==null&&typeof t=="object"){if(Array.isArray(t)){for(const n of t)if(n!==null&&typeof n=="object"&&this._containsAggregate(n))return!0}else if(this._containsAggregate(t))return!0}return!1}_applyGroupBy(e,t,n,r,s){const o=new Map;if(t.length===0)o.set("__all__",e);else for(const l of e){const u=[];for(const d of t){const p=s.evaluate(d,l);u.push(p)}const h=JSON.stringify(u);let f=o.get(h);f||(f=[],o.set(h,f)),f.push(l)}const i=[],a=[];for(const[,l]of o){const u=this._computeAggregates(l,n,s);i.push(u),a.push(l)}if(r!=null){const l=[];for(let u=0;u<i.length;u++){const h=i[u],f=a[u],d=this._resolveHavingAggregates(w(r),f,h,s);s.evaluate(w(r),d)===!0&&l.push(h)}return l}return i}_computeAggregates(e,t,n){const r={},s=e[0];for(const o of t){const i=w(g(o,"ResTarget")??o),a=g(i,"val"),l=j(i,"name");if(a==null)continue;const u=w(a);if(Q(u)){const h=ce(u),f=nt(u),d=ve(u),p=Qr(u);if(rt(u)){const v=l||h;r[v]=n.evaluate(u,s);continue}if(!et.has(h)){const v={...s};this._collectHavingAggregates(u,e,v,n);const E=l||this._deriveColumnName(u);r[E]=n.evaluate(u,v);continue}let _=l;if(!_)if(f||d.length===0)_=h;else try{const v=B(d[0]);_=`${h}_${v}`}catch{_=h}let y;const x=()=>{let v=[];for(const E of e){const I=n.evaluate(d[0],E);I!=null&&v.push(I)}if(p){const E=new Set,I=[];for(const S of v){const N=JSON.stringify(S);E.has(N)||(E.add(N),I.push(S))}v=I}return v};switch(h){case"count":f?y=e.length:y=x().length;break;case"sum":{const v=x();y=v.length>0?v.reduce((E,I)=>E+Number(I),0):null;break}case"avg":{const v=x();v.length>0?y=v.reduce((I,S)=>I+Number(S),0)/v.length:y=null;break}case"min":{const v=x();v.length===0?y=null:y=v.reduce((E,I)=>E<I?E:I);break}case"max":{const v=x();v.length===0?y=null:y=v.reduce((E,I)=>E>I?E:I);break}case"string_agg":{const v=d.length>=2?String(n.evaluate(d[1],s)):",",E=[];for(const I of e){const S=n.evaluate(d[0],I);S!=null&&E.push(Xr(S))}y=E.length>0?E.join(v):null;break}case"array_agg":{const v=[];for(const E of e)v.push(n.evaluate(d[0],E));y=v;break}case"bool_and":{const v=x();y=v.length>0?v.every(E=>!!E):null;break}case"bool_or":{const v=x();y=v.length>0?v.some(E=>!!E):null;break}case"stddev":case"stddev_samp":{const v=x().map(Number);if(v.length<2)y=null;else{const E=v.reduce((S,N)=>S+N,0)/v.length,I=v.reduce((S,N)=>S+(N-E)**2,0)/(v.length-1);y=Math.sqrt(I)}break}case"stddev_pop":{const v=x().map(Number);if(v.length===0)y=null;else{const E=v.reduce((S,N)=>S+N,0)/v.length,I=v.reduce((S,N)=>S+(N-E)**2,0)/v.length;y=Math.sqrt(I)}break}case"variance":case"var_samp":{const v=x().map(Number);if(v.length<2)y=null;else{const E=v.reduce((I,S)=>I+S,0)/v.length;y=v.reduce((I,S)=>I+(S-E)**2,0)/(v.length-1)}break}case"var_pop":{const v=x().map(Number);if(v.length===0)y=null;else{const E=v.reduce((I,S)=>I+S,0)/v.length;y=v.reduce((I,S)=>I+(S-E)**2,0)/v.length}break}case"json_object_agg":case"jsonb_object_agg":{if(d.length<2)y=null;else{const v={};for(const E of e){const I=n.evaluate(d[0],E),S=n.evaluate(d[1],E);I!=null&&(v[String(I)]=S)}y=v}break}case"percentile_cont":{if(d.length>0){const v=Number(n.evaluate(d[0],s)),E=w(g(u,"FuncCall")??u),I=P(g(E,"agg_order"));if(I.length>0){const S=w(g(I[0],"SortBy")??I[0]),N=w(g(S,"node")),A=[];for(const O of e){const R=n.evaluate(N,O);R!=null&&A.push(Number(R))}if(A.sort((O,R)=>O-R),A.length===0)y=null;else{const O=v*(A.length-1),R=Math.floor(O),T=Math.ceil(O);R===T?y=A[R]:y=A[R]+(O-R)*(A[T]-A[R])}}else y=null}else y=null;break}case"mode":{const v=w(g(u,"FuncCall")??u),E=P(g(v,"agg_order"));if(E.length>0){const I=w(g(E[0],"SortBy")??E[0]),S=w(g(I,"node")),N=new Map;for(const R of e){const T=n.evaluate(S,R),F=JSON.stringify(T),C=N.get(F);C?C.count++:N.set(F,{count:1,value:T})}let A=0,O=null;for(const R of N.values())R.count>A&&(A=R.count,O=R.value);y=O}else y=null;break}case"corr":case"covar_pop":case"covar_samp":case"regr_count":case"regr_avgx":case"regr_avgy":case"regr_sxx":case"regr_syy":case"regr_sxy":case"regr_slope":case"regr_intercept":case"regr_r2":{if(d.length<2){y=null;break}const v=[],E=[];for(const I of e){const S=n.evaluate(d[0],I),N=n.evaluate(d[1],I);S!=null&&N!==null&&N!==void 0&&(v.push(Number(S)),E.push(Number(N)))}y=this._computeStatAgg(h,v,E);break}default:y=n.evaluate(u,s);break}r[_]=y}else{const h=l||this._deriveColumnName(u);r[h]=n.evaluate(u,s)}}return r}_computeStatAgg(e,t,n){const r=t.length;if(r===0)return null;const s=n.reduce((f,d)=>f+d,0),o=t.reduce((f,d)=>f+d,0),i=s/r,a=o/r;let l=0,u=0,h=0;for(let f=0;f<r;f++){const d=n[f]-i,p=t[f]-a;l+=d*d,u+=p*p,h+=d*p}switch(e){case"regr_count":return r;case"regr_avgx":return i;case"regr_avgy":return a;case"regr_sxx":return l;case"regr_syy":return u;case"regr_sxy":return h;case"covar_pop":return h/r;case"covar_samp":return r<2?null:h/(r-1);case"corr":return l===0||u===0?null:h/Math.sqrt(l*u);case"regr_slope":return l===0?null:h/l;case"regr_intercept":return l===0?null:a-h/l*i;case"regr_r2":{if(l===0||u===0)return null;const f=h/Math.sqrt(l*u);return f*f}default:return null}}_resolveHavingAggregates(e,t,n,r){const s={...n};return this._collectHavingAggregates(e,t,s,r),s}_collectHavingAggregates(e,t,n,r){const s=e.FuncCall;if(s){const a=s.funcname;if(a.length>0){const l=a[a.length-1],u=l.String??l.str,h=typeof u=="object"&&u!==null?u.sval??u.str:u;if(h&&et.has(h.toLowerCase())){const f=this._computeInlineAggregate(h.toLowerCase(),s,t,r),d=nt(e),p=ve(e);let m;if(d||p.length===0)m=`${h.toLowerCase()}(*)`;else try{const _=B(p[0]);m=`${h.toLowerCase()}(${_})`}catch{m=h.toLowerCase()}n[m]=f,n[`__having_agg_${JSON.stringify(e)}`]=f;return}}}const o=e.BoolExpr;if(o){const a=P(o.args);for(const l of a)this._collectHavingAggregates(w(l),t,n,r);return}const i=e.A_Expr;if(i){const a=i.lexpr,l=i.rexpr;a&&this._collectHavingAggregates(w(a),t,n,r),l&&this._collectHavingAggregates(w(l),t,n,r);return}for(const a of Object.values(e))if(Array.isArray(a))for(const l of a)typeof l=="object"&&l!==null&&this._collectHavingAggregates(l,t,n,r);else typeof a=="object"&&a!==null&&this._collectHavingAggregates(a,t,n,r)}_computeInlineAggregate(e,t,n,r){const s={FuncCall:t},o=nt(s),i=ve(s),a=Qr(s),l=()=>{let h=[];for(const f of n){const d=i.length>0?r.evaluate(i[0],f):null;d!=null&&h.push(d)}if(a){const f=new Set,d=[];for(const p of h){const m=JSON.stringify(p);f.has(m)||(f.add(m),d.push(p))}h=d}return h},u=()=>{const h=[];if(i.length<2)return h;for(const f of n){const d=r.evaluate(i[0],f),p=r.evaluate(i[1],f);d!=null&&p!==null&&p!==void 0&&h.push([Number(d),Number(p)])}return h};switch(e){case"count":return o?n.length:l().length;case"sum":{const h=l();return h.length>0?h.reduce((f,d)=>f+Number(d),0):null}case"avg":{const h=l();return h.length>0?h.reduce((f,d)=>f+Number(d),0)/h.length:null}case"min":{const h=l();return h.length>0?h.reduce((f,d)=>Number(f)<Number(d)?f:d):null}case"max":{const h=l();return h.length>0?h.reduce((f,d)=>Number(f)>Number(d)?f:d):null}case"stddev":case"stddev_samp":{const h=l().map(Number);if(h.length<2)return null;const f=h.reduce((p,m)=>p+m,0)/h.length,d=h.reduce((p,m)=>p+(m-f)**2,0)/(h.length-1);return Math.sqrt(d)}case"stddev_pop":{const h=l().map(Number);if(h.length===0)return null;const f=h.reduce((p,m)=>p+m,0)/h.length,d=h.reduce((p,m)=>p+(m-f)**2,0)/h.length;return Math.sqrt(d)}case"variance":case"var_samp":{const h=l().map(Number);if(h.length<2)return null;const f=h.reduce((d,p)=>d+p,0)/h.length;return h.reduce((d,p)=>d+(p-f)**2,0)/(h.length-1)}case"var_pop":{const h=l().map(Number);if(h.length===0)return null;const f=h.reduce((d,p)=>d+p,0)/h.length;return h.reduce((d,p)=>d+(p-f)**2,0)/h.length}case"corr":case"covar_pop":case"covar_samp":case"regr_slope":case"regr_intercept":case"regr_r2":case"regr_count":case"regr_avgx":case"regr_avgy":case"regr_sxx":case"regr_syy":case"regr_sxy":{const h=u();if(h.length===0)return null;const f=h.length,d=h.reduce((x,v)=>x+v[0],0)/f,p=h.reduce((x,v)=>x+v[1],0)/f;let m=0,_=0,y=0;for(const[x,v]of h)m+=(v-p)**2,_+=(x-d)**2,y+=(v-p)*(x-d);switch(e){case"corr":return m===0||_===0?null:y/Math.sqrt(m*_);case"covar_pop":return y/f;case"covar_samp":return f<2?null:y/(f-1);case"regr_slope":return m===0?null:y/m;case"regr_intercept":return m===0?null:d-y/m*p;case"regr_r2":return m===0||_===0?null:y*y/(m*_);case"regr_count":return f;case"regr_avgx":return p;case"regr_avgy":return d;case"regr_sxx":return m;case"regr_syy":return _;case"regr_sxy":return y;default:return null}}default:return null}}_hasWindowFunctions(e){for(const t of e){const n=w(g(t,"ResTarget")??t),r=g(n,"val");if(r!=null&&Q(w(r))&&rt(w(r)))return!0}return!1}_applyWindowFunctions(e,t,n,r){const s=new Map;for(const o of n){const i=w(g(o,"WindowDef")??o),a=j(i,"name");a&&s.set(a,i)}for(const o of t){const i=w(g(o,"ResTarget")??o),a=g(i,"val"),l=j(i,"name");if(a==null)continue;const u=w(a);if(!Q(u)||!rt(u))continue;const h=ce(u),f=l||h,d=w(g(u,"FuncCall")??u),p=ve(u),m=w(g(d,"over")),_=j(m,"refname")||j(m,"name");let y=m;_&&s.has(_)&&(y=s.get(_));const x=[];for(const I of P(g(y,"partitionClause")))try{x.push(B(I))}catch{}const v=[];for(const I of P(g(y,"orderClause"))){const S=w(g(I,"SortBy")??I),N=w(g(S,"node"));try{const A=B(N),O=g(S,"sortby_dir"),R=O===2||O==="SORTBY_DESC";v.push({col:A,desc:R})}catch{}}const E=new Map;for(let I=0;I<e.length;I++){const S=e[I],N=x.map(O=>JSON.stringify(S[O])).join("\0");let A=E.get(N);A||(A={rows:[],indices:[]},E.set(N,A)),A.rows.push(S),A.indices.push(I)}for(const I of E.values())if(v.length>0){const S=I.rows.map((N,A)=>({row:N,origIdx:I.indices[A]}));S.sort((N,A)=>{for(const O of v){const R=N.row[O.col],T=A.row[O.col],F=R==null,C=T==null;if(F&&C)continue;if(F)return O.desc?-1:1;if(C)return O.desc?1:-1;let V;if(typeof R=="string"&&typeof T=="string"?V=R<T?-1:R>T?1:0:V=R-T,V!==0)return O.desc?-V:V}return 0}),I.rows=S.map(N=>N.row),I.indices=S.map(N=>N.origIdx)}for(const I of E.values()){const S=I.rows,N=S.length;for(let A=0;A<N;A++){let O=null;switch(h){case"row_number":O=A+1;break;case"rank":{let T=1;for(let F=0;F<A;F++){let C=!0;for(const V of v)if(S[F][V.col]!==S[A][V.col]){C=!1;break}C||(T=F+1+1)}T=1;for(let F=0;F<A;F++){let C=!0;for(const V of v)if(S[F][V.col]!==S[A][V.col]){C=!1;break}C||T++}T=1;for(let F=0;F<N;F++){let C=!0;for(const V of v)if(S[F][V.col]!==S[A][V.col]){C=!1;break}if(C){T=F+1;break}}O=T;break}case"dense_rank":{const T=new Set;for(let F=0;F<=A;F++){const C=v.map(V=>JSON.stringify(S[F][V.col])).join("\0");T.add(C)}O=T.size;break}case"percent_rank":{if(N<=1)O=0;else{let T=1;for(let F=0;F<N;F++){let C=!0;for(const V of v)if(S[F][V.col]!==S[A][V.col]){C=!1;break}if(C){T=F+1;break}}O=(T-1)/(N-1)}break}case"cume_dist":{let T=0;for(let F=0;F<N;F++){let C=!0;for(const V of v){const Y=S[F][V.col],oe=S[A][V.col];V.desc?Y<oe&&(C=!1):Y>oe&&(C=!1)}C&&T++}O=T/N;break}case"ntile":{const T=p.length>0?Number(r.evaluate(p[0],{})):1;O=Math.floor(A*T/N)+1;break}case"lag":{const T=p.length>1?Number(r.evaluate(p[1],{})):1,F=p.length>2?r.evaluate(p[2],{}):null,C=A-T;C>=0&&C<N&&p.length>0?O=r.evaluate(p[0],S[C]):O=F;break}case"lead":{const T=p.length>1?Number(r.evaluate(p[1],{})):1,F=p.length>2?r.evaluate(p[2],{}):null,C=A+T;C>=0&&C<N&&p.length>0?O=r.evaluate(p[0],S[C]):O=F;break}case"first_value":{p.length>0&&N>0&&(O=r.evaluate(p[0],S[0]));break}case"last_value":{p.length>0&&N>0&&(O=r.evaluate(p[0],S[N-1]));break}case"nth_value":{const T=p.length>1?Number(r.evaluate(p[1],{})):1;p.length>0&&T>=1&&T<=N&&(O=r.evaluate(p[0],S[T-1]));break}case"sum":{let T=0,F=!1;const C=v.length>0?A:N-1;for(let V=0;V<=C;V++){const Y=p.length>0?r.evaluate(p[0],S[V]):null;Y!=null&&(T+=Number(Y),F=!0)}O=F?T:null;break}case"count":{const T=v.length>0?A:N-1;if(nt(u))O=T+1;else{let F=0;for(let C=0;C<=T;C++){const V=p.length>0?r.evaluate(p[0],S[C]):null;V!=null&&F++}O=F}break}case"avg":{let T=0,F=0;const C=v.length>0?A:N-1;for(let V=0;V<=C;V++){const Y=p.length>0?r.evaluate(p[0],S[V]):null;Y!=null&&(T+=Number(Y),F++)}O=F>0?T/F:null;break}case"min":{let T=null;const F=v.length>0?A:N-1;for(let C=0;C<=F;C++){const V=p.length>0?r.evaluate(p[0],S[C]):null;V!=null&&(T===null||V<T)&&(T=V)}O=T;break}case"max":{let T=null;const F=v.length>0?A:N-1;for(let C=0;C<=F;C++){const V=p.length>0?r.evaluate(p[0],S[C]):null;V!=null&&(T===null||V>T)&&(T=V)}O=T;break}default:O=null;break}const R=I.indices[A];e[R][f]=O}}}for(const o of t){const i=w(g(o,"ResTarget")??o),a=g(i,"val"),l=j(i,"name");if(a==null)continue;const u=w(a);if(Q(u)&&rt(u))continue;const h=l||this._deriveColumnName(u);if(X(u)){const f=B(u);if(f!==h)for(const d of e)d[h]=d[f]}else for(const f of e)f[h]=r.evaluate(u,f)}return e}_applyDistinct(e,t){const n=new Set,r=[];for(const s of e){const o=t.map(i=>JSON.stringify(s[i])).join("\0");n.has(o)||(n.add(o),r.push(s))}return r}_applyOrderBy(e,t,n,r){const s=[...e],o=new Map,i=new Set,a=new Map;if(r)for(let u=0;u<r.length;u++){const h=w(g(r[u],"ResTarget")??r[u]),f=j(h,"name"),d=g(h,"val");let p=f;if(!p&&d!==null&&d!==void 0&&(p=this._deriveColumnName(w(d))),p&&(o.set(u+1,p),f&&(i.add(f),d!==null&&X(w(d)))))try{const m=B(w(d));a.set(m,f)}catch{}}const l=t.map(u=>{const h=w(g(u,"SortBy")??u),f=w(g(h,"node")),d=g(h,"sortby_dir"),p=d===2||d==="SORTBY_DESC",m=g(h,"sortby_nulls");let _;m===1||m==="SORTBY_NULLS_FIRST"?_=!0:m===2||m==="SORTBY_NULLS_LAST"?_=!1:_=p;let y=f;if(be(f)){const x=z(f,[]);if(typeof x=="number"&&Number.isInteger(x)){const v=x,E=o.get(v);E!==void 0&&(y={ColumnRef:{fields:[{String:{sval:E}}]}})}}if(X(y))try{const x=B(y);a.has(x)&&(y={ColumnRef:{fields:[{String:{sval:a.get(x)}}]}})}catch{}return{node:y,desc:p,nullsFirst:_}});return s.sort((u,h)=>{for(const f of l){const d=n.evaluate(f.node,u),p=n.evaluate(f.node,h),m=d==null,_=p==null;if(m&&_)continue;if(m)return f.nullsFirst?-1:1;if(_)return f.nullsFirst?1:-1;let y;if(typeof d=="string"&&typeof p=="string"?y=d<p?-1:d>p?1:0:y=d-p,y!==0)return f.desc?-y:y}return 0}),s}_evaluateReturning(e,t,n,r){const s={};for(const o of e){const i=w(g(o,"ResTarget")??o),a=g(i,"val"),l=j(i,"name");if(a!=null){const u=w(a);if(tt(u)){if(r)for(const f of r.columnNames)s[f]=t[f]??null;else Object.assign(s,t);continue}const h=l||this._deriveColumnName(u);s[h]=n.evaluate(u,t)}}return s}_extractReturningColumns(e,t){const n=[];for(const r of e){const s=w(g(r,"ResTarget")??r),o=g(s,"val"),i=j(s,"name");if(o!=null){const a=w(o);if(tt(a)){t&&n.push(...t.columnNames);continue}n.push(i||this._deriveColumnName(a))}}return n}_contextForTable(e){if(e===null)return{};const t={};for(const[r,s]of e.vectorIndexes)t[r]=s;const n={};for(const[r,s]of e.spatialIndexes)n[r]=s;return{documentStore:e.documentStore,invertedIndex:e.invertedIndex,vectorIndexes:t,spatialIndexes:n}}static _containsUQAFunction(e){if(Q(e)){const s=ce(e);if(Yr.has(s))return!0}const t=w(g(e,"FuncCall")??{});if(Object.keys(t).length>0){const s=ce(t);if(Yr.has(s))return!0}const n=w(g(e,"A_Expr")??{});if(Object.keys(n).length>0){const s=P(g(n,"name"));if(s.length>0&&J(s[0])==="@@")return!0}for(const s of["lexpr","rexpr","args","arg"]){const o=g(e,s)??g(n,s);if(o!=null){if(Array.isArray(o)){for(const i of o)if(le._containsUQAFunction(w(i)))return!0}else if(typeof o=="object"&&le._containsUQAFunction(w(o)))return!0}}const r=w(g(e,"BoolExpr")??{});if(Object.keys(r).length>0){const s=P(g(r,"args"));for(const o of s)if(le._containsUQAFunction(o))return!0}return!1}_splitUQAConjuncts(e){const t=this._extractAndConjuncts(e),n=[],r=[];for(const i of t)le._containsUQAFunction(i)?n.push(i):r.push(i);const s=n.length===0?null:n.length===1?n[0]:{BoolExpr:{boolop:0,args:n}},o=r.length===0?null:r.length===1?r[0]:{BoolExpr:{boolop:0,args:r}};return[s,o]}_extractAndConjuncts(e){const t=w(g(e,"BoolExpr")??{});if(Object.keys(t).length>0){const n=g(t,"boolop");if(n===0||n==="AND_EXPR"){const r=P(g(t,"args")),s=[];for(const o of r)s.push(...this._extractAndConjuncts(o));return s}}return[e]}_compileWhere(e,t){const n=w(g(e,"BoolExpr")??{});if(Object.keys(n).length>0)return this._compileBoolExpr(n,t);if(jn(e))return this._compileComparison(w(g(e,"A_Expr")??e),t);const r=g(e,"A_Expr");if(r!=null)return this._compileComparison(w(r),t);if(Q(e))return this._compileFuncInWhere(w(g(e,"FuncCall")??e),t);const s=g(e,"FuncCall");if(s!=null)return this._compileFuncInWhere(w(s),t);if(Zr(e))return this._compileNullTest(w(g(e,"NullTest")??e));const o=g(e,"NullTest");if(o!=null)return this._compileNullTest(w(o));if(nn(e))return this._compileSublinkInWhere(w(g(e,"SubLink")??e),t);const i=g(e,"SubLink");return i!=null?this._compileSublinkInWhere(w(i),t):new $n(e,a=>this._compileSelect(a,this._params))}_compileBoolExpr(e,t){const n=g(e,"boolop"),r=P(g(e,"args"));if(n===0||n==="AND_EXPR")return this._compileAnd(r,t);if(n===1||n==="OR_EXPR")return new re(r.map(s=>this._compileWhere(s,t)));if(n===2||n==="NOT_EXPR")return new de(this._compileWhere(r[0],t));throw new Error(`Unsupported BoolExpr type: ${String(n)}`)}_compileAnd(e,t){const n=[],r=[];for(const o of e){const i=this._compileWhere(o,t);i instanceof G&&i.source===null?r.push(i):n.push(i)}let s;if(n.length>0)s=n.length===1?n[0]:new H(n);else if(r.length>0)s=r.shift();else return new Vn;for(const o of r)s=new G(o.field,o.predicate,s);return s}_compileComparison(e,t){const n=g(e,"kind"),r=P(g(e,"name")),s=r.length>0?J(r[r.length-1]):"";if(n===0||n==="AEXPR_OP"){if(s==="@@"){const a=w(g(e,"lexpr")),l=w(g(e,"rexpr")),u=B(a),h=ee(l,this._params),f=u==="_all"?null:u;return this._makeTextSearchOp(f,h,t,!1)}const o=w(g(e,"lexpr")),i=w(g(e,"rexpr"));if(X(o)&&(be(i)||Pt(i))&&["=","!=","<>",">",">=","<","<="].includes(s)){const a=B(o),l=z(i,this._params);return new G(a,es(s,l))}return new $n(e.kind!==void 0?e:{A_Expr:e},a=>this._compileSelect(a,this._params))}if(n===7||n==="AEXPR_IN"){const o=w(g(e,"lexpr")),i=B(o),a=P(g(e,"rexpr")),l=new Set;for(const u of a)l.add(z(u,this._params));return new G(i,new cn(l))}if(n===11||n==="AEXPR_BETWEEN"){const o=w(g(e,"lexpr")),i=B(o),a=P(g(e,"rexpr")),l=Number(z(a[0],this._params)),u=Number(z(a[1],this._params));return new G(i,new un(l,u))}if(n===12||n==="AEXPR_NOT_BETWEEN"){const o=w(g(e,"lexpr")),i=B(o),a=P(g(e,"rexpr")),l=Number(z(a[0],this._params)),u=Number(z(a[1],this._params));return new de(new G(i,new un(l,u)))}if(n===8||n==="AEXPR_LIKE"){const o=w(g(e,"lexpr")),i=w(g(e,"rexpr")),a=B(o),l=ee(i,this._params);return s==="!~~"?new G(a,new as(l)):new G(a,new Xn(l))}if(n===9||n==="AEXPR_ILIKE"){const o=w(g(e,"lexpr")),i=w(g(e,"rexpr")),a=B(o),l=ee(i,this._params);return s==="!~~*"?new G(a,new ls(l)):new G(a,new Qn(l))}throw new Error(`Unsupported expression kind: ${String(n)}`)}_compileNullTest(e){const t=w(g(e,"arg")),n=B(t),r=g(e,"nulltesttype");return r===0||r==="IS_NULL"?new G(n,new hn):new G(n,new fn)}_compileSublinkInWhere(e,t){const n=g(e,"subLinkType"),r=w(g(e,"subselect")),s=w(g(r,"SelectStmt")??r);if(n===2||n==="ANY_SUBLINK"){const o=this._compileSelect(s,this._params);if(o.columns.length===0)throw new Error("Subquery must return at least one column");const i=o.columns[0],a=new Set;for(const h of o.rows){const f=h[i];f!=null&&a.add(f)}const l=w(g(e,"testexpr")),u=B(l);return new G(u,new cn(a))}if(n===0||n==="EXISTS_SUBLINK")return this._compileSelect(s,this._params).rows.length>0?new Vn:new de(new Vn);throw new Error(`Unsupported subquery type: ${String(n)}`)}_compileFuncInWhere(e,t){const n=ce(e).toLowerCase(),r=ve(e);if(n==="text_match"){const s=B(r[0]),o=ee(r[1],this._params);return this._makeTextSearchOp(s,o,t,!1)}if(n==="bayesian_match"){const s=B(r[0]),o=ee(r[1],this._params);return this._makeTextSearchOp(s,o,t,!0)}return n==="bayesian_match_with_prior"?this._makeBayesianWithPriorOp(r,t):n==="knn_match"?this._makeKnnOp(r):n==="bayesian_knn_match"?this._makeCalibratedKnnOp(r,t,!0):n==="traverse_match"?this._makeTraverseMatchOp(r):n==="temporal_traverse"?this._makeTemporalTraverseOp(r):n==="path_filter"?this._makePathFilterOp(r):n==="vector_exclude"?this._makeVectorExcludeOp(r):n==="spatial_within"?this._makeSpatialWithinOp(r):n==="fuse_log_odds"?this._makeFusionOp(r,t,"log_odds"):n==="fuse_prob_and"?this._makeFusionOp(r,t,"prob_and"):n==="fuse_prob_or"?this._makeFusionOp(r,t,"prob_or"):n==="fuse_prob_not"?this._makeProbNotOp(r,t):n==="fuse_attention"?this._makeAttentionFusionOp(r,t):n==="fuse_multihead"?this._makeMultiheadFusionOp(r,t):n==="fuse_learned"?this._makeLearnedFusionOp(r,t):n==="sparse_threshold"?this._makeSparseThresholdOp(r,t):n==="multi_field_match"?this._makeMultiFieldMatchOp(r):n==="message_passing"?this._makeMessagePassingOp(r):n==="graph_embedding"?this._makeGraphEmbeddingOp(r):n==="staged_retrieval"?this._makeStagedRetrievalOp(r,t):n==="pagerank"?this._makePageRankOp(r):n==="hits"?this._makeHITSOp(r):n==="betweenness"?this._makeBetweennessOp(r):n==="weighted_rpq"?this._makeWeightedRpqOp(r):n==="progressive_fusion"?this._makeProgressiveFusionOp(r,t):n==="deep_fusion"?this._makeDeepFusionOp(r,t):new $n(e,s=>this._compileSelect(s,this._params))}_compileCalibratedSignal(e,t){const n=w(g(e,"FuncCall")??e),r=ce(n).toLowerCase(),s=ve(n);if(r==="text_match"||r==="bayesian_match"){const o=B(s[0]),i=ee(s[1],this._params);return this._makeTextSearchOp(o,i,t,!0)}if(r==="knn_match")return this._makeCalibratedKnnOp(s,t,!1);if(r==="bayesian_knn_match")return this._makeCalibratedKnnOp(s,t,!0);if(r==="traverse_match")return this._makeTraverseMatchOp(s);if(r==="spatial_within")return this._makeSpatialWithinOp(s);if(r==="pagerank")return this._makePageRankOp(s);if(r==="hits")return this._makeHITSOp(s);if(r==="betweenness")return this._makeBetweennessOp(s);if(r==="weighted_rpq")return this._makeWeightedRpqOp(s);if(r==="message_passing")return this._makeMessagePassingOp(s);throw new Error(`Unknown signal function for fusion: ${r}. Use text_match, bayesian_match, knn_match, bayesian_knn_match, traverse_match, spatial_within, pagerank, hits, betweenness, or weighted_rpq.`)}_makeTextSearchOp(e,t,n,r){const s=n.invertedIndex;let o=[];s&&(o=(e&&typeof s.getSearchAnalyzer=="function"?s.getSearchAnalyzer(e):s.analyzer).analyze(t));const i=new _e(t,e??void 0);if(r)try{const a=s?s.stats:null;if(a){const l=new ct(Je(),a);return new pe(l,i,o,e??void 0)}}catch{}try{const a=s?s.stats:null;if(a){const l=new xt(qt(),a);return new pe(l,i,o,e??void 0)}}catch{}return i}_makeMultiFieldMatchOp(e){if(e.length<3)throw new Error("multi_field_match() requires at least 3 arguments: multi_field_match(field1, field2, ..., query)");const t=[];let n=null;const r=[];for(let s=0;s<e.length;s++){const o=e[s];if(X(o)||g(o,"ColumnRef")!==null)t.push(B(o));else{const i=z(o,this._params);if(typeof i=="string"&&n===null)n=i;else if(typeof i=="number")r.push(i);else if(typeof i=="string")throw new Error(`Unexpected string argument at position ${String(s)}`)}}if(n===null||t.length<2)throw new Error("multi_field_match() requires at least 2 field names and a query string");if(r.length>0&&r.length!==t.length)throw new Error(`Number of weights (${String(r.length)}) must match number of fields (${String(t.length)})`);return new Mn(t,n,r.length>0?r:void 0)}_makeMessagePassingOp(e){const t=e.length>0?we(e[0],this._params):2,n=e.length>1?ee(e[1],this._params):"mean",r=e.length>2?ee(e[2],this._params):void 0;return new Dn({kLayers:t,aggregation:n,propertyName:r,graph:this._currentGraphName||""})}_makeGraphEmbeddingOp(e){const t=e.length>1?we(e[1],this._params):2;return new Br({graph:this._currentGraphName||"",kHops:t})}_makeBayesianWithPriorOp(e,t){if(e.length<4)throw new Error("bayesian_match_with_prior() requires 4 arguments: bayesian_match_with_prior(field, query, prior_field, prior_mode)");const n=B(e[0]),r=ee(e[1],this._params),s=ee(e[2],this._params),o=ee(e[3],this._params);if(o!=="recency"&&o!=="authority")throw new Error(`Unknown prior mode: ${o}. Use 'recency' or 'authority'.`);let i;if(o==="recency")try{i=Go(s)}catch{i=h=>.5}else try{i=Bo(s)}catch{i=h=>.5}const a=t.invertedIndex;let l=[];a&&(l=a.analyzer.analyze(r));const u=new _e(r,n);try{const h=a?a.stats:null;if(h){const f=new zo(Je(),h,i);return new vi(u,f,l,n,t.documentStore??null)}}catch{}return u}_makeKnnOp(e){if(e.length!==3)throw new Error("knn_match() requires 3 arguments: knn_match(field, vector, k)");const t=B(e[0]),n=We(e[1],this._params),r=we(e[2],this._params);return new je(n,r,t)}_makeCalibratedKnnOp(e,t,n){var f;const r=[],s={};for(const d of e){const p=g(d,"NamedArgExpr");if(p!=null){const m=w(p),_=j(m,"name"),y=w(g(m,"arg"));s[_]=z(y,this._params)}else r.push(d)}if(r.length!==3)throw new Error("knn_match() requires 3 positional arguments: knn_match(field, vector, k)");const o=B(r[0]),i=We(r[1],this._params),a=we(r[2],this._params),u=(f=t.vectorIndexes)==null?void 0:f[o];if(u!==null&&typeof u=="object"&&"backgroundStats"in u&&u.backgroundStats!==null||n||Object.keys(s).length>0){const d=new Set(["method","weight_source","bm25_query","bm25_field","base_rate","bandwidth_scale","density_gamma"]),p=Object.keys(s).filter(m=>!d.has(m));if(p.length>0)throw new Error(`Unknown option(s) for bayesian_knn_match: ${p.join(", ")}. Valid options: ${[...d].sort().join(", ")}`);return new fr(i,a,o,s.method??"kde",Number(s.base_rate??.5),s.weight_source??"density_prior",s.bm25_query!=null?String(s.bm25_query):void 0,s.bm25_field!=null?String(s.bm25_field):void 0,Number(s.density_gamma??1),Number(s.bandwidth_scale??1))}return new wi(i,a,o)}_makeSpatialWithinOp(e){if(e.length!==3)throw new Error("spatial_within() requires 3 arguments: spatial_within(field, POINT(x, y), distance)");const t=B(e[0]),[n,r]=this._extractPointArg(e[1]),s=Number(z(e[2],this._params));return new js(t,n,r,s)}_extractPointArg(e){const t=w(g(e,"FuncCall")??{});if(Object.keys(t).length>0){const n=ce(t);if(n!=="point")throw new Error(`Expected POINT(x, y), got ${n}()`);const r=ve(t);if(r.length!==2)throw new Error("POINT() requires exactly 2 arguments");const s=Number(z(r[0],this._params)),o=Number(z(r[1],this._params));return[s,o]}if(Pt(e)){const n=z(e,this._params);if(Array.isArray(n)&&n.length===2)return[Number(n[0]),Number(n[1])];throw new Error("Parameter for POINT must be a [x, y] array")}throw new Error("Expected POINT(x, y) or $N parameter")}_makeTraverseMatchOp(e){const t=we(e[0],this._params),n=e.length>1?ee(e[1],this._params):void 0,r=e.length>2?we(e[2],this._params):1;return new Fn(t,this._currentGraphName||"",n??null,r)}_makeTemporalTraverseOp(e){if(e.length<4)throw new Error("temporal_traverse() requires at least 4 arguments: temporal_traverse(start, label, hops, timestamp)");const t=we(e[0],this._params),n=e.length>1?ee(e[1],this._params):void 0,r=e.length>2?we(e[2],this._params):1;let s;if(e.length===4){const o=Number(z(e[3],this._params));s=new Zt({timestamp:o})}else if(e.length>=5){const o=Number(z(e[3],this._params)),i=Number(z(e[4],this._params));s=new Zt({timeRange:[o,i]})}else s=new Zt;return new Pn({startVertex:t,graph:this._currentGraphName||"",temporalFilter:s,label:n??null,maxHops:r})}_makePathFilterOp(e){if(e.length<2)throw new Error("path_filter() requires at least 2 arguments: path_filter('path', value) or path_filter('path', 'op', value)");const t=ee(e[0],this._params),n=[];for(const o of t.split("."))/^\d+$/.test(o)?n.push(parseInt(o,10)):n.push(o);if(e.length===2){const o=z(e[1],this._params);return new Qt(n,new ln(o))}const r=ee(e[1],this._params),s=z(e[2],this._params);return new Qt(n,es(r,s))}_makeVectorExcludeOp(e){if(e.length!==5)throw new Error("vector_exclude() requires 5 arguments: vector_exclude(field, positive_vector, negative_vector, k, threshold)");const t=B(e[0]),n=We(e[1],this._params),r=We(e[2],this._params),s=we(e[3],this._params),o=Number(z(e[4],this._params)),i=new je(n,s,t);return new En(i,r,o,t)}_makeProbNotOp(e,t){if(e.length!==1)throw new Error("fuse_prob_not() requires exactly 1 signal function argument");const n=this._compileCalibratedSignal(e[0],t);return new Gt(n)}_makeSparseThresholdOp(e,t){if(e.length!==2)throw new Error("sparse_threshold() requires 2 arguments: sparse_threshold(signal, threshold)");const n=this._compileCalibratedSignal(e[0],t),r=Number(z(e[1],this._params));return new Ne(n,r)}_makeFusionOp(e,t,n){const r=[];let s=.5,o=null,i=null;for(const a of e)if(Q(a)||g(a,"FuncCall")!==null)r.push(this._compileCalibratedSignal(a,t));else{const l=g(a,"NamedArgExpr");if(l!=null&&n==="log_odds"){const u=w(l),h=j(u,"name"),f=z(w(g(u,"arg")),this._params);if(h==="alpha")s=Number(f);else if(h==="gating")o=String(f);else if(h==="gating_beta")i=Number(f);else throw new Error(`Unknown option for fuse_log_odds: ${h}. Valid options: alpha, gating, gating_beta`)}else if(be(a)&&n==="log_odds"){const u=z(a,this._params);typeof u=="string"?o=u:s=Number(u)}else throw new Error("Fusion function arguments must be signal functions (text_match, knn_match, etc.)")}if(r.length<2)throw new Error("Fusion requires at least 2 signal functions");return n==="log_odds"?new ke(r,s,null,o,i):n==="prob_and"?new Ve(r,"and"):new Ve(r,"or")}_makeStagedRetrievalOp(e,t){const n=[];let r=0;for(;r<e.length-1;){if(!Q(e[r])&&g(e[r],"FuncCall")===null)throw new Error(`staged_retrieval: argument ${String(r)} must be a signal function`);const s=this._compileCalibratedSignal(e[r],t);let o=z(e[r+1],this._params);typeof o=="number"&&o===Math.floor(o)&&(o=Math.floor(o)),n.push([s,o]),r+=2}if(n.length===0)throw new Error("staged_retrieval requires at least one (signal, cutoff) pair");return new $e(n)}_splitCentralityArgs(e){const t=[];let n=this._currentGraphName;for(const r of e){try{const s=z(r,this._params);if(typeof s=="string"){n=s;continue}}catch{}t.push(r)}return[t,n]}_makePageRankOp(e){const[t,n]=this._splitCentralityArgs(e),r=t.length>0?Number(z(t[0],this._params)):.85,s=t.length>1?we(t[1],this._params):100,o=t.length>2?Number(z(t[2],this._params)):1e-6;return new qr({damping:r,maxIterations:s,tolerance:o,graph:n||""})}_makeHITSOp(e){const[t,n]=this._splitCentralityArgs(e),r=t.length>0?we(t[0],this._params):100,s=t.length>1?Number(z(t[1],this._params)):1e-6;return new zr({maxIterations:r,tolerance:s,graph:n||""})}_makeBetweennessOp(e){const[,t]=this._splitCentralityArgs(e);return new Gr({graph:t||""})}_makeWeightedRpqOp(e){if(e.length<3)throw new Error("weighted_rpq() requires at least 3 arguments: weighted_rpq('path_expr', start, 'weight_property'[, 'agg_fn'[, threshold]])");const t=ee(e[0],this._params),n=we(e[1],this._params),r=ee(e[2],this._params),s=e.length>3?ee(e[3],this._params):"sum";let o=null;e.length>4&&(o=Number(z(e[4],this._params)));try{return new $o(Tr(t),this._currentGraphName||"",{startVertex:n,weightProperty:r,aggregation:s,weightThreshold:o})}catch{throw new Error("weighted_rpq() requires the WeightedPathQueryOperator")}}_makeProgressiveFusionOp(e,t){const n=[],r=[];let s=.5,o=null;for(const i of e)if(Q(i)||g(i,"FuncCall")!==null)n.push(this._compileCalibratedSignal(i,t));else if(be(i)||Pt(i)){const a=z(i,this._params);if(typeof a=="string")o=a;else if(typeof a=="number"&&a!==Math.floor(a))s=a;else{const l=Math.floor(Number(a));if(n.length===0)throw new Error("progressive_fusion: k must follow signal functions");r.push([[...n],l]),n.length=0}}else throw new Error("progressive_fusion: unexpected argument type");if(n.length>0)throw new Error("progressive_fusion: trailing signals without k cutoff");if(r.length===0)throw new Error("progressive_fusion requires at least one (signals, k) stage");return new kr(r,s,o)}_makeDeepFusionOp(e,t){const n=[];let r=.5,s="none";for(const o of e){const i=w(g(o,"FuncCall")??(Q(o)?o:{}));if(Object.keys(i).length>0){const l=ce(i).toLowerCase(),u=ve(i);if(l==="layer"){const h=[];for(const f of u)if(Q(f)||g(f,"FuncCall")!==null)h.push(this._compileCalibratedSignal(f,t));else throw new Error("layer() arguments must be signal functions");if(h.length===0)throw new Error("layer() requires at least one signal");n.push({type:"signal",signals:h})}else if(l==="propagate"){if(u.length<2)throw new Error("propagate() requires at least 2 arguments: propagate('edge_label', 'aggregation'[, 'direction'])");const h=ee(u[0],this._params),f=ee(u[1],this._params);if(!["mean","sum","max"].includes(f))throw new Error(`propagate() aggregation must be 'mean', 'sum', or 'max', got '${f}'`);let d="both";if(u.length>=3&&(d=ee(u[2],this._params),!["both","out","in"].includes(d)))throw new Error(`propagate() direction must be 'both', 'out', or 'in', got '${d}'`);n.push({type:"propagate",edgeLabel:h,aggregation:f,direction:d})}else if(l==="convolve"){const h=[],f={};for(const _ of u){const y=g(_,"NamedArgExpr");if(y!=null){const x=w(y);f[j(x,"name")]=z(w(g(x,"arg")),this._params)}else h.push(_)}if(h.length===0)throw new Error("convolve() requires edge_label as first argument");const d=ee(h[0],this._params),p=Number(f.n_channels??0),m="both";if(p>1){const _=Number(f.seed??42),y=f.init??"kaiming";let x=1;for(let v=n.length-1;v>=0;v--){const E=n[v];if(E.type==="conv"){const I=E.kernelShape;I&&(x=I[0]);break}}try{const v=Uo(p,x,_,y);n.push({type:"conv",edgeLabel:d,hopWeights:[1],direction:m,kernel:Array.from(v),kernelShape:[p,x]})}catch{n.push({type:"conv",edgeLabel:d,hopWeights:[1],direction:m})}}else{if(h.length<2)throw new Error("convolve() requires ARRAY[w0, w1, ...] or n_channels => N");const _=We(h[1],this._params);n.push({type:"conv",edgeLabel:d,hopWeights:Array.from(_),direction:m})}}else if(l==="pool"){if(u.length<3)throw new Error("pool() requires at least 3 arguments: pool('edge_label', 'method', pool_size[, 'direction'])");const h=ee(u[0],this._params),f=ee(u[1],this._params);if(!["max","avg"].includes(f))throw new Error(`pool() method must be 'max' or 'avg', got '${f}'`);const d=we(u[2],this._params);let p="both";if(u.length>=4&&(p=ee(u[3],this._params),!["both","out","in"].includes(p)))throw new Error(`pool() direction must be 'both', 'out', or 'in', got '${p}'`);n.push({type:"pool",edgeLabel:h,poolSize:d,method:f,direction:p})}else if(l==="dense"){const h=[],f={};for(const y of u){const x=g(y,"NamedArgExpr");if(x!=null){const v=w(x);f[j(v,"name")]=Number(z(w(g(v,"arg")),this._params))}else h.push(y)}if(h.length<2)throw new Error("dense() requires at least 2 positional arguments: ARRAY[weights], ARRAY[bias]");const d=We(h[0],this._params),p=We(h[1],this._params),m=f.output_channels,_=f.input_channels;if(m===void 0||_===void 0)throw new Error("dense() requires output_channels and input_channels named arguments");if(d.length!==m*_)throw new Error(`dense() weights array length (${String(d.length)}) must equal output_channels * input_channels (${String(m*_)})`);if(p.length!==m)throw new Error(`dense() bias array length (${String(p.length)}) must equal output_channels (${String(m)})`);n.push({type:"dense",weights:Array.from(d),bias:Array.from(p),outputChannels:m,inputChannels:_})}else if(l==="flatten")n.push({type:"flatten"});else if(l==="softmax")n.push({type:"softmax"});else if(l==="batch_norm"){let h=1e-5;for(const f of u){const d=g(f,"NamedArgExpr");if(d!=null){const p=w(d);j(p,"name")==="epsilon"&&(h=Number(z(w(g(p,"arg")),this._params)))}}n.push({type:"batchNorm",epsilon:h})}else if(l==="dropout"){if(u.length<1)throw new Error("dropout() requires 1 argument: dropout(p)");const h=Number(z(u[0],this._params));n.push({type:"dropout",p:h})}else if(l==="attention"){let h=1,f="content";for(const d of u){const p=g(d,"NamedArgExpr");if(p!=null){const m=w(p),_=j(m,"name");_==="n_heads"?h=Number(z(w(g(m,"arg")),this._params)):_==="mode"&&(f=String(z(w(g(m,"arg")),this._params)))}}n.push({type:"attention",nHeads:h,mode:f})}else if(l==="embed"){const h=[],f={};for(const y of u){const x=g(y,"NamedArgExpr");if(x!=null){const v=w(x);f[j(v,"name")]=Number(z(w(g(v,"arg")),this._params))}else h.push(y)}if(h.length===0)throw new Error("embed() requires vector argument");const d=We(h[0],this._params),p=f.in_channels??1;let m,_;if(f.grid_h!==void 0&&f.grid_w!==void 0)m=f.grid_h,_=f.grid_w;else{const y=Math.floor(Math.sqrt(d.length/p));y*y*p===d.length?(m=y,_=y):(m=0,_=0)}n.push({type:"embed",embedding:Array.from(d),gridH:m,gridW:_,inChannels:p})}else if(l==="global_pool"){let h="avg";for(const f of u){const d=g(f,"NamedArgExpr");if(d!=null){const p=w(d);j(p,"name")==="method"&&(h=String(z(w(g(p,"arg")),this._params)))}else h=ee(f,this._params)}if(!["avg","max","avg_max"].includes(h))throw new Error(`global_pool() method must be 'avg', 'max', or 'avg_max', got '${h}'`);n.push({type:"globalPool",method:h})}else throw new Error(`deep_fusion() unknown layer function: ${l}()`);continue}const a=g(o,"NamedArgExpr");if(a!=null){const l=w(a),u=j(l,"name"),h=z(w(g(l,"arg")),this._params);if(u==="alpha")r=Number(h);else if(u==="gating")s=String(h);else throw new Error(`Unknown option for deep_fusion: ${u}. Valid options: alpha, gating`);continue}throw new Error("deep_fusion() arguments must be layer() or propagate() calls")}if(n.length===0)throw new Error("deep_fusion requires at least one layer");return new ye(n,r,s,this._currentGraphName||void 0)}_makeAttentionFusionOp(e,t){const n=[],r={};for(const i of e)if(Q(i)||g(i,"FuncCall")!==null)n.push(this._compileCalibratedSignal(i,t));else{const a=g(i,"NamedArgExpr");if(a!=null){const l=w(a);r[j(l,"name")]=z(w(g(l,"arg")),this._params)}}if(n.length<2)throw new Error("fuse_attention requires at least 2 signals");const s=new Set(["normalized","alpha","base_rate"]),o=Object.keys(r).filter(i=>!s.has(i));if(o.length>0)throw new Error(`Unknown option(s) for fuse_attention: ${o.join(", ")}. Valid options: ${[...s].sort().join(", ")}`);try{const i=n.length,a=new Wr(i,6,Number(r.alpha??.5),!!(r.normalized??!1),r.base_rate??void 0),l=this._extractQueryFeatures(e,t);return new pt(n,a,l)}catch{return new ke(n,Number(r.alpha??.5))}}_makeMultiheadFusionOp(e,t){const n=[],r={};for(const i of e)if(Q(i)||g(i,"FuncCall")!==null)n.push(this._compileCalibratedSignal(i,t));else{const a=g(i,"NamedArgExpr");if(a!=null){const l=w(a);r[j(l,"name")]=z(w(g(l,"arg")),this._params)}}if(n.length<2)throw new Error("fuse_multihead requires at least 2 signals");const s=new Set(["n_heads","normalized","alpha"]),o=Object.keys(r).filter(i=>!s.has(i));if(o.length>0)throw new Error(`Unknown option(s) for fuse_multihead: ${o.join(", ")}. Valid options: ${[...s].sort().join(", ")}`);try{const i=n.length,a=new Wo(i,Number(r.n_heads??4),6,Number(r.alpha??.5),!!(r.normalized??!1)),l=this._extractQueryFeatures(e,t);return new pt(n,a,l)}catch{return new ke(n,Number(r.alpha??.5))}}_makeLearnedFusionOp(e,t){const n=[],r={};for(const i of e)if(Q(i)||g(i,"FuncCall")!==null)n.push(this._compileCalibratedSignal(i,t));else{const a=g(i,"NamedArgExpr");if(a!=null){const l=w(a);r[j(l,"name")]=z(w(g(l,"arg")),this._params)}}if(n.length<2)throw new Error("fuse_learned requires at least 2 signals");const s=new Set(["alpha"]),o=Object.keys(r).filter(i=>!s.has(i));if(o.length>0)throw new Error(`Unknown option(s) for fuse_learned: ${o.join(", ")}. Valid options: ${[...s].sort().join(", ")}`);try{const i=new Hr(n.length,Number(r.alpha??.5));return new kt(n,i)}catch{return new ke(n,Number(r.alpha??.5))}}_extractQueryFeatures(e,t){const n=new Float64Array(6);if(t.invertedIndex)try{const r=new Ho(t.invertedIndex);for(const s of e){const o=w(g(s,"FuncCall")??(Q(s)?s:{}));if(Object.keys(o).length>0){const i=ce(o);if(i==="text_match"||i==="bayesian_match"){const a=ve(o);if(a.length>=2){const l=ee(a[1],this._params),h=t.invertedIndex.analyzer.analyze(l);return r.extract(h)}}}}}catch{}return n}_foldStmtWhere(e){const t=g(e,"whereClause");if(t==null)return e;const n=this._foldConstants(w(t));return n===t?e:{...e,whereClause:n}}_foldConstants(e){return Object.keys(e).length===0||be(e)||g(e,"A_Const")!==null||X(e)||g(e,"ColumnRef")!==null?e:jn(e)||g(e,"A_Expr")!==null?this._foldAExpr(e):mi(e)||g(e,"BoolExpr")!==null?this._foldBoolExpr(e):Q(e)||g(e,"FuncCall")!==null?this._foldFuncCall(e):e}_foldAExpr(e){const t=w(g(e,"A_Expr")??e),n=this._foldConstants(w(g(t,"lexpr")??{})),r=this._foldConstants(w(g(t,"rexpr")??{}));if((be(n)||g(n,"A_Const")!==null)&&(be(r)||g(r,"A_Const")!==null))try{const s=new ie({params:this._params}),o={A_Expr:{...t,lexpr:n,rexpr:r}},i=s.evaluate(o,{});return ts(i)}catch{}if(n!==g(t,"lexpr")||r!==g(t,"rexpr")){const s={...t,lexpr:n,rexpr:r};return g(e,"A_Expr")!==null?{A_Expr:s}:s}return e}_foldBoolExpr(e){const t=w(g(e,"BoolExpr")??e),n=g(t,"boolop"),r=P(g(t,"args")),s=r.map(a=>this._foldConstants(a));if(s.every(a=>be(a)||g(a,"A_Const")!==null))try{const a=new ie({params:this._params}),l={BoolExpr:{boolop:n,args:s}},u=a.evaluate(l,{});return ts(u)}catch{}if(n===0||n==="AND_EXPR"){const a=[];for(const u of s){if(be(u)||g(u,"A_Const")!==null){if(ns(u)===!1)return{A_Const:{boolval:!1}};continue}a.push(u)}if(a.length===0)return{A_Const:{boolval:!0}};if(a.length===1)return a[0];const l={boolop:0,args:a};return g(e,"BoolExpr")!==null?{BoolExpr:l}:l}if(n===1||n==="OR_EXPR"){const a=[];for(const u of s){if(be(u)||g(u,"A_Const")!==null){if(ns(u)===!0)return{A_Const:{boolval:!0}};continue}a.push(u)}if(a.length===0)return{A_Const:{boolval:!1}};if(a.length===1)return a[0];const l={boolop:1,args:a};return g(e,"BoolExpr")!==null?{BoolExpr:l}:l}if(s.some((a,l)=>a!==r[l])){const a={boolop:n,args:s};return g(e,"BoolExpr")!==null?{BoolExpr:a}:a}return e}_foldFuncCall(e){const t=w(g(e,"FuncCall")??e),n=ce(t);if(di.has(n))return e;const r=P(g(t,"args"));if(r.length===0)return e;const s=r.map(i=>this._foldConstants(i));if(s.some((i,a)=>i!==r[a])){const i={...t,args:s};return g(e,"FuncCall")!==null?{FuncCall:i}:i}return e}_optimize(e,t,n){try{const r=t.invertedIndex;if(!r)return e;const s=r.stats,o=n?n._stats:null,i=n?n.name:void 0;return new Fe(s,{columnStats:o,indexManager:t.indexManager??void 0,tableName:i}).optimize(e)}catch{return e}}_executePlan(e,t){try{return new tn(t).execute(e)}catch{return e.execute(t)}}_explainPlan(e,t){try{const o=new tn(t).explain(e).split(`
|
|
15
|
-
`).map(i=>({plan:i}));return{columns:["plan"],rows:o}}catch{return{columns:["plan"],rows:[{plan:e.constructor.name}]}}}_scanAll(e,t){if(!e.documentStore)return new D([he(0,{score:0})]);let r=[...e.documentStore.docIds].sort((s,o)=>s-o);return t!==void 0&&t<r.length&&(r=r.slice(0,t)),new D(r.map(s=>he(s,{score:0})))}_chainOnSource(e,t){return e instanceof G&&e.source===null?new G(e.field,e.predicate,t):new H([t,e])}static _isGraphOperator(e){if(e==null)return!1;const t=e.constructor.name;return["TraverseOperator","RegularPathQueryOperator","PatternMatchOperator","TemporalTraverseOperator","TemporalPatternMatchOperator","CypherQueryOperator"].includes(t)}static _isJoinOperator(e){if(e==null)return!1;const t=e.constructor.name;return["InnerJoinOperator","OuterJoinOperator","CrossJoinOperator","IndexJoinOperator","SortMergeJoinOperator","ExprJoinOperator","LateralJoinOperator","TableScanOperator"].includes(t)}_collectJoinTables(e){const t=[];for(const n of e)this._walkFromForTables(n,t);return t}_walkFromForTables(e,t){const n=w(g(e,"RangeVar")??{});if(Object.keys(n).length>0){const o=ae(n),i=Ue(n)??o,a=this._tables.get(o);a&&t.push([i,a.columnNames]);return}const r=w(g(e,"JoinExpr")??{});if(Object.keys(r).length>0){const o=g(r,"larg"),i=g(r,"rarg");o!=null&&this._walkFromForTables(w(o),t),i!=null&&this._walkFromForTables(w(i),t);return}const s=w(g(e,"RangeSubselect")??{});if(Object.keys(s).length>0){const o=Ue(s)??"_derived",i=this._tables.get(o);i&&t.push([o,i.columnNames])}}_applyDeferredWhere(e,t,n){return e.filter(r=>n.evaluate(t,r)===!0)}static _collectAstTableRefs(e){const t=new Set;return le._walkAstForTables(e,t),t}static _walkAstForTables(e,t){if(e==null||typeof e!="object")return;if(Array.isArray(e)){for(const o of e)le._walkAstForTables(o,t);return}const n=e,r=n.RangeVar;if(r!==void 0){const o=j(r,"schemaname");if(o!=="information_schema"&&o!=="pg_catalog"){const i=j(r,"relname");i&&t.add(i)}return}const s=n.relname;if(typeof s=="string"&&s){const o=n.schemaname;o!=="information_schema"&&o!=="pg_catalog"&&t.add(s)}for(const o of Object.values(n))o!==null&&typeof o=="object"&&le._walkAstForTables(o,t)}_partitionWhereForJoins(e,t){const n=this._extractAndConjuncts(e),r=new Map,s=[];for(const i of n){const a=le._collectConjunctAliases(i);if(a.size===1){const l=a.values().next().value;if(t.has(l)){r.has(l)||r.set(l,[]),r.get(l).push(i);continue}}s.push(i)}const o=le._reconstructAnd(s);return[r,o]}static _collectConjunctAliases(e){const t=new Set;return le._walkForColumnAliases(e,t),t}static _walkForColumnAliases(e,t){const n=w(g(e,"ColumnRef")??{});if(Object.keys(n).length>0){const o=P(g(n,"fields"));if(o.length>=2){const i=o[0],a=J(i);a&&t.add(a)}return}if(X(e)){const o=P(g(w(g(e,"ColumnRef")??e),"fields"));if(o.length>=2){const i=o[0],a=J(i);a&&t.add(a)}return}for(const o of["lexpr","rexpr","args","arg","xpr","val"]){const i=g(e,o);if(i!=null)if(Array.isArray(i))for(const a of i)typeof a=="object"&&le._walkForColumnAliases(a,t);else typeof i=="object"&&le._walkForColumnAliases(i,t)}const r=w(g(e,"BoolExpr")??{});if(Object.keys(r).length>0){const o=P(g(r,"args"));for(const i of o)le._walkForColumnAliases(i,t)}const s=w(g(e,"A_Expr")??{});if(Object.keys(s).length>0){const o=g(s,"lexpr"),i=g(s,"rexpr");o!==null&&typeof o=="object"&&le._walkForColumnAliases(o,t),i!==null&&typeof i=="object"&&le._walkForColumnAliases(i,t)}}static _reconstructAnd(e){return e.length===0?null:e.length===1?e[0]:{BoolExpr:{boolop:0,args:e}}}_extractImplicitEquijoinPredicates(e,t){const n=[],r=w(g(e,"BoolExpr")??{});let s;if(Object.keys(r).length>0){const o=g(r,"boolop");o===0||o==="AND_EXPR"?s=P(g(r,"args")):s=[e]}else s=[e];for(const o of s){const i=w(g(o,"A_Expr")??{});if(Object.keys(i).length===0)continue;const a=P(g(i,"name"));if(a.length===0||J(a[a.length-1])!=="=")continue;const u=g(i,"lexpr"),h=g(i,"rexpr");if(u===null||h===null||!X(w(u))||!X(w(h)))continue;const f=w(g(w(u),"ColumnRef")??w(u)),d=w(g(w(h),"ColumnRef")??w(h)),p=P(g(f,"fields")),m=P(g(d,"fields"));if(p.length<2||m.length<2)continue;const _=J(p[0]),y=J(p[p.length-1]),x=J(m[0]),v=J(m[m.length-1]);!_||!y||!x||!v||!t.has(_)||!t.has(x)||n.push({leftAlias:_,leftCol:y,rightAlias:x,rightCol:v})}return n}_registerFkValidators(e,t,n){for(const r of n){const s=r.refTable,o=r.column,i=r.refColumn;t.fkInsertValidators.push(l=>{const u=l[o];if(u==null)return;const h=this._tables.get(s);if(!h)throw new Error(`Foreign key violation: parent table "${s}" does not exist`);if(!h.documentStore.hasValue(i,u))throw new Error(`Foreign key violation: ${e}.${o} = ${JSON.stringify(u)} not found in ${s}.${i}`)}),t.fkUpdateValidators.push((l,u)=>{const h=u[o];if(h==null)return;const f=this._tables.get(s);if(!f)throw new Error(`FOREIGN KEY constraint violated: parent table "${s}" does not exist`);if(!f.documentStore.hasValue(i,h))throw new Error(`FOREIGN KEY constraint violated: ${e}.${o} = ${JSON.stringify(h)} not found in ${s}.${i}`)});const a=this._tables.get(s);if(a){const l=e,u=t;a.fkDeleteValidators.push(h=>{const f=a.documentStore.get(h);if(!f)return;const d=f[i];if(d!=null&&u.documentStore.hasValue(o,d))throw new Error(`FOREIGN KEY constraint violated: row in "${s}" is still referenced from "${l}"`)}),a.fkUpdateValidators.push((h,f)=>{const d=h[i],p=f[i];if(d!==p&&d!=null&&u.documentStore.hasValue(o,d))throw new Error(`FOREIGN KEY constraint violated: row in "${s}" is still referenced from "${l}"`)})}}}_isPushablePredicate(e,t){const n=g(e,"A_Expr");if(n!=null){const s=w(n),o=g(s,"lexpr"),i=g(s,"rexpr");if(o!==null&&X(w(o)))try{const a=B(w(o));if(!t.has(a))return!1}catch{return!1}else return!1;if(i!==null){const a=w(i);if(!be(a)&&!Pt(a))return!1}return!0}const r=g(e,"NullTest");if(r!=null){const s=w(r),o=g(s,"arg");if(o!==null&&X(w(o)))try{const i=B(w(o));return t.has(i)}catch{return!1}}return!1}_tryPredicatePushdown(e,t){const n=g(e,"whereClause");if(n==null)return e;const r=P(g(e,"fromClause"));if(r.length!==1)return e;const s=r[0];let o=null;const i=w(g(s,"RangeVar")??{}),a=w(g(s,"RangeSubselect")??{});if(Object.keys(i).length>0){const p=ae(i);this._views.has(p)?o=this._views.get(p):this._inlinedCTEs.has(p)&&(o=this._inlinedCTEs.get(p))}else if(Object.keys(a).length>0){const p=g(a,"subquery");p!=null&&(o=w(g(w(p),"SelectStmt")??p))}if(o===null||g(o,"groupClause")!==null&&P(g(o,"groupClause")).length>0||g(o,"distinctClause")!==null&&g(o,"distinctClause")!==void 0||g(o,"limitCount")!==null&&g(o,"limitCount")!==void 0)return e;const l=P(g(o,"targetList"));for(const p of l){const m=w(g(p,"ResTarget")??p),_=g(m,"val");if(_!=null&&Q(w(_))&&rt(w(_)))return e}if(this._hasAggregates(l))return e;const u=new Set;for(const p of l){const m=w(g(p,"ResTarget")??p),_=j(m,"name");if(_)u.add(_);else{const y=g(m,"val");if(y!==null&&X(w(y)))try{u.add(B(w(y)))}catch{}}}if(u.size===0)return e;const[h,f]=this._splitPushable(w(n),u);if(h.length===0)return e;const d=h.length===1?h[0]:{BoolExpr:{boolop:0,args:h}};if(Object.keys(i).length>0){const p=ae(i);this._views.has(p)?this._views.set(p,le._injectWhere(this._views.get(p),d)):this._inlinedCTEs.has(p)&&this._inlinedCTEs.set(p,le._injectWhere(this._inlinedCTEs.get(p),d))}return{...e,whereClause:f}}_splitPushable(e,t){const n=w(g(e,"BoolExpr")??{});if(Object.keys(n).length>0){const r=g(n,"boolop");if(r===0||r==="AND_EXPR"){const s=P(g(n,"args")),o=[],i=[];for(const l of s)this._isPushablePredicate(l,t)?o.push(l):i.push(l);let a=null;return i.length===1?a=i[0]:i.length>1&&(a={BoolExpr:{boolop:0,args:i}}),[o,a]}}return this._isPushablePredicate(e,t)?[[e],null]:[[],e]}static _injectWhere(e,t){const n=g(e,"whereClause");let r;return n==null?r=t:r={BoolExpr:{boolop:0,args:[n,t]}},{...e,whereClause:r}}_extractNumericValue(e){const t=z(e,this._params);if(typeof t=="number")return t;if(typeof t=="string"){const n=Number(t);if(!isNaN(n))return n}throw new Error("Expected numeric constant or $N parameter, got "+JSON.stringify(e).slice(0,200))}static _isSelectStar(e){if(e.length===0)return!0;for(const t of e){const n=w(g(t,"ResTarget")??t),r=g(n,"val");if(r!=null&&tt(w(r)))return!0}return!1}static _hasComputedExpressions(e){for(const t of e){const n=w(g(t,"ResTarget")??t),r=g(n,"val");if(r==null)continue;const s=w(r);if(!X(s)){if(Q(s)){const o=ce(s);if(et.has(o)||o==="text_match"||o==="bayesian_match"||o==="bayesian_match_with_prior"||o==="knn_match"||o==="bayesian_knn_match"||o==="traverse_match"||o==="spatial_within")continue;return!0}if(be(s)||jn(s)||g(s,"A_Expr")!==null||g(s,"CaseExpr")!==null||rn(s)||g(s,"CoalesceExpr")!==null||Zr(s)||nn(s)||g(s,"SubLink")!==null)return!0}}return!1}_inferTargetName(e){const t=w(g(e,"ResTarget")??e),n=j(t,"name");if(n)return n;const r=g(t,"val");if(r==null)return"?column?";const s=w(r);if(X(s))try{return B(s)}catch{return"?column?"}if(Q(s)){const o=ce(s);if(et.has(o)){if(nt(s))return o;const i=ve(s);if(i.length>0&&X(i[0]))try{const a=B(i[0]);return`${o}_${a}`}catch{return o}return o}return o==="text_match"||o==="bayesian_match"||o==="bayesian_match_with_prior"?"_score":o}if(rn(s)){const o=w(g(s,"TypeCast")??s),i=g(o,"arg");if(i!==null&&X(w(i)))try{return B(w(i))}catch{}}return"?column?"}_buildExprTargets(e){const t=[];for(const n of e){const r=w(g(n,"ResTarget")??n),s=this._inferTargetName(n);let o=g(r,"val");if(o==null)continue;const i=w(o);if(Q(i)){const a=ce(i);(a==="text_match"||a==="bayesian_match"||a==="bayesian_match_with_prior")&&(o={ColumnRef:{fields:[{String:{sval:"_score"}}]}})}t.push([s,w(o)])}return t}_sortNeedsExtraCols(e,t){const n=new Set;for(const r of t){const s=w(g(r,"ResTarget")??r),o=g(s,"val");if(o!=null&&tt(w(o)))return!1;if(o!==null&&X(w(o))){try{n.add(B(w(o)))}catch{}const i=j(s,"name");i&&n.add(i)}else{const i=j(s,"name");i&&n.add(i)}}for(const r of e){const s=w(g(r,"SortBy")??r),o=w(g(s,"node"));if(X(o))try{const i=B(o);if(!n.has(i))return!0}catch{}}return!1}_buildGroupAliases(e,t){const n=new Map;for(const r of t){const s=w(g(r,"ResTarget")??r),o=g(s,"val"),i=j(s,"name");if(o!==null&&X(w(o))&&i)try{const a=B(w(o));e.includes(a)&&n.set(a,i)}catch{}}return n}_buildPostGroupTargets(e,t,n){let r=!1;for(const i of e){const a=w(g(i,"ResTarget")??i),l=g(a,"val");if(l==null)continue;const u=w(l);if(Q(u)){const h=ce(u);if(!et.has(h)||rt(u)){r=!0;break}}else if(!X(u)){const h=j(a,"name")||"?column?";if(!n.has(h)){r=!0;break}}}if(!r)return null;const s=new Set(t),o=[];for(const i of e){const a=w(g(i,"ResTarget")??i),l=j(a,"name")||this._inferTargetName(i);if(n.has(l)||s.has(l))o.push([l,{ColumnRef:{fields:[{String:{sval:l}}]}}]);else{const u=g(a,"val");if(u!==null&&X(w(u)))try{const h=B(w(u));o.push([l,{ColumnRef:{fields:[{String:{sval:h}}]}}])}catch{o.push([l,w(u)])}else o.push([l,w(u??{})])}}return o}_buildPreAggTargets(e,t,n,r){const s=[];for(let i=0;i<e.length;i++){const a=e[i];(Q(a)||g(a,"FuncCall")!==null)&&i<t.length&&s.push([t[i],a])}for(const i of n)i.inputExpr!==void 0&&s.push(["_agg_expr",i.inputExpr]);if(s.length===0)return null;const o=[];if(r)for(const i of r.columnNames)o.push([i,{ColumnRef:{fields:[{String:{sval:i}}]}}]);for(const[i,a]of s)o.push([i,a]);return o}_resolveGroupByCols(e,t){const n=new Map,r=[];for(const o of t){const i=w(g(o,"ResTarget")??o),a=g(i,"val"),l=j(i,"name");if(a!==null&&X(w(a)))try{const u=B(w(a));r.push(l||u),l&&n.set(l,u)}catch{r.push(l||"?column?")}else if(a!==null&&Q(w(a))){const u=ce(w(a));let h;if(nt(w(a)))h=u;else{const f=ve(w(a));let d=null;for(const p of f)if(X(p))try{d=B(p)}catch{}h=d!==null?`${u}_${d}`:u}r.push(l||h)}else r.push(l||"?column?")}const s=[];for(const o of e){if(be(o)){const i=z(o,[]);if(typeof i=="number"&&Number.isInteger(i)){const a=i-1;if(a>=0&&a<r.length){s.push(r[a]);continue}throw new Error(`GROUP BY position ${String(i)} is not in select list`)}}if(X(o))try{const i=B(o);s.push(n.get(i)??i);continue}catch{}if(Q(o)||g(o,"FuncCall")!==null){const i=ce(o);let a=null;for(const l of t){const u=w(g(l,"ResTarget")??l),h=g(u,"val"),f=j(u,"name");if(h!==null&&Q(w(h))&&ce(w(h))===i&&f){a=f;break}}if(a!==null)s.push(a);else{const l=ve(o);let u=null;for(const h of l)if(X(h))try{u=B(h)}catch{}s.push(u!==null?`${i}_${u}`:i)}continue}try{s.push(B(o))}catch{s.push("?column?")}}return s}_getTable(e){const t=this._tables.get(e);if(!t)throw new Error(`Table "${e}" does not exist`);return t}_substituteParams(e,t){const n=g(e,"ParamRef");if(n!=null){const o=w(n).number,i=t.get(o);return i!==void 0?i:e}const r={};for(const[s,o]of Object.entries(e))Array.isArray(o)?r[s]=o.map(i=>i!==null&&typeof i=="object"?this._substituteParams(i,t):i):o!==null&&typeof o=="object"?r[s]=this._substituteParams(o,t):r[s]=o;return r}_hasOuterRefs(e,t){if(X(e))try{const n=B(e);if(t.has(n))return!0;const r=gi(e);if(t.has(r))return!0}catch{}for(const n of Object.values(e))if(Array.isArray(n)){for(const r of n)if(r!==null&&typeof r=="object"&&this._hasOuterRefs(r,t))return!0}else if(n!==null&&typeof n=="object"&&this._hasOuterRefs(n,t))return!0;return!1}_buildSortKeys(e,t){const n=new Map,r=new Set,s=new Map;for(let i=0;i<t.length;i++){const a=w(g(t[i],"ResTarget")??t[i]),l=g(a,"val"),u=j(a,"name");if(l!=null&&!tt(w(l))){let h;try{h=u||this._deriveColumnName(w(l))}catch{h=u||"?column?"}if(n.set(i+1,h),u&&(r.add(u),X(w(l))))try{const f=B(w(l));s.set(f,u)}catch{}}}const o=[];for(const i of e){const a=w(g(i,"SortBy")??i),l=w(g(a,"node")),u=g(a,"sortby_dir"),h=u===2||u==="SORTBY_DESC"||String(u).includes("DESC"),f=!h,d=g(a,"sortby_nulls");let p;d===1||d==="SORTBY_NULLS_FIRST"||String(d).includes("FIRST")?p=!0:d===2||d==="SORTBY_NULLS_LAST"||String(d).includes("LAST")?p=!1:p=h;let m;if(be(l)){const _=Number(z(l,this._params)),y=n.get(_);if(!y)throw new Error(`ORDER BY position ${String(_)} is not in select list`);m=y}else{try{m=B(l)}catch{m=this._deriveColumnName(l)}!r.has(m)&&s.has(m)&&(m=s.get(m))}o.push({column:m,ascending:f,nullsFirst:p})}return o}}class Vn extends q{execute(e){const t=e.documentStore;if(!t)return new D;const n=[...t.docIds].sort((r,s)=>r-s);return new D(n.map(r=>he(r,{score:0})))}costEstimate(e){return e.totalDocs}}class $n extends q{constructor(t,n=null){super();b(this,"exprNode");b(this,"_subqueryExecutor");this.exprNode=t,this._subqueryExecutor=n}execute(t){const n=new ie,r=t.documentStore;if(!r)return new D;const s=[];for(const o of[...r.docIds].sort((i,a)=>i-a)){const i=r.get(o);if(!i)continue;n.evaluate(this.exprNode,i)&&s.push(he(o,{score:0}))}return new D(s)}costEstimate(t){return t.totalDocs}}class vi extends q{constructor(t,n,r,s,o){super();b(this,"source");b(this,"scorer");b(this,"terms");b(this,"field");b(this,"documentStore");this.source=t,this.scorer=n,this.terms=r,this.field=s,this.documentStore=o}execute(t){const n=this.source.execute(t),r=this.documentStore??t.documentStore,s=t.invertedIndex,o=[],i=this.scorer;for(const a of n){const l=a.docId,u=(r==null?void 0:r.get(l))??{},h=a.payload.positions.length>0?a.payload.positions.length:1,f=this.field??"_default";let d=h;s&&typeof s.getDocLength=="function"&&(d=s.getDocLength(l,f));const m=n.length,_=i.scoreWithPrior(h,d,m,u);o.push(he(l,{score:_}))}return new D(o)}costEstimate(t){return this.source.costEstimate(t)*1.1}}class wi extends q{constructor(t,n,r="embedding"){super();b(this,"queryVector");b(this,"k");b(this,"field");this.queryVector=t,this.k=n,this.field=r}execute(t){var o;const n=(o=t.vectorIndexes)==null?void 0:o[this.field];let r;n?r=n.searchKnn(this.queryVector,this.k):r=new je(this.queryVector,this.k,this.field).execute(t);const s=[];for(const i of r)s.push(he(i.docId,{score:(1+i.payload.score)/2}));return new D(s)}costEstimate(t){return(t.dimensions||128)*Math.log2(t.totalDocs+1)}}function es(c,e){switch(c){case"=":return new ln(e);case"!=":case"<>":return new Un(e);case">":return new Wn(Number(e));case">=":return new Hn(Number(e));case"<":return new Kn(Number(e));case"<=":return new Jn(Number(e));default:throw new Error(`Unsupported operator: ${c}`)}}function ts(c){if(c==null)return{A_Const:{isnull:!0}};if(typeof c=="boolean")return{A_Const:{boolval:c}};if(typeof c=="number")return Number.isInteger(c)?{A_Const:{ival:c}}:{A_Const:{fval:String(c)}};if(typeof c=="string")return{A_Const:{sval:c}};throw new Error(`Cannot convert ${typeof c} to A_Const`)}function ns(c){const e=w(g(c,"A_Const")??c);if(g(e,"isnull")===!0)return null;const t=g(e,"boolval");if(t!=null)return!!t;const n=g(e,"ival");if(n!=null)return Number(n)!==0;const r=g(e,"fval");if(r!=null)return parseFloat(String(r))!==0;const s=g(e,"sval");return s!=null?String(s).length>0:null}function rs(c){return"docIds"in c?c.docIds[0]:c.docId}class xi{constructor(e,t,n){b(this,"left");b(this,"right");b(this,"condition");this.left=e,this.right=t,this.condition=n}_getEntries(e,t){return e!==null&&typeof e=="object"&&"execute"in e&&typeof e.execute=="function"?[...e.execute(t).entries]:e}}class Si extends xi{execute(e){const t=this._getEntries(this.left,e),n=this._getEntries(this.right,e),r=t.length<=n.length,s=r?t:n,o=r?n:t,i=r?this.condition.leftField:this.condition.rightField,a=r?this.condition.rightField:this.condition.leftField,l=new Map;for(const h of s){const f=h.payload.fields[i];if(f==null)continue;let d=l.get(f);d||(d=[],l.set(f,d)),d.push(h)}const u=[];for(const h of o){const f=h.payload.fields[a];if(f==null)continue;const d=l.get(f);if(d)for(const p of d){const m=r?p:h,_=r?h:p,y=rs(m),x=rs(_);u.push({docIds:[y,x],payload:U({score:m.payload.score+_.payload.score,fields:{...m.payload.fields,..._.payload.fields}})})}}return new Se(u)}}class sn{constructor(e){b(this,"value");this.value=e}}class qn{constructor(e){b(this,"counts");this.counts=e}}class te{constructor(e,t){b(this,"_engine");b(this,"_table");b(this,"_root");this._engine=e,this._table=t,this._root=null}term(e,t){const n=new _e(e,t);return this._chain(n)}vector(e,t,n){const r=new Ee(e,t,n??"embedding");return this._chain(r)}knn(e,t,n){const r=new je(e,t,n??"embedding");return this._chain(r)}bayesianKnn(e,t,n="embedding",r){const s=new fr(e,t,n,(r==null?void 0:r.estimationMethod)??"kde",(r==null?void 0:r.baseRate)??.5,(r==null?void 0:r.weightSource)??"density_prior",(r==null?void 0:r.bm25Query)??null,(r==null?void 0:r.bm25Field)??null,(r==null?void 0:r.densityGamma)??1,(r==null?void 0:r.bandwidthScale)??1);return this._chain(s)}and(e){if(this._root===null||e._root===null)throw new Error("Both builders must have operators before combining");const t=new H([this._root,e._root]),n=new te(this._engine,this._table);return n._root=t,n}or(e){if(this._root===null||e._root===null)throw new Error("Both builders must have operators before combining");const t=new re([this._root,e._root]),n=new te(this._engine,this._table);return n._root=t,n}not(){if(this._root===null)throw new Error("Builder must have an operator before negation");const e=new de(this._root),t=new te(this._engine,this._table);return t._root=e,t}filter(e,t){if(e.includes(".")){const s=[];for(const a of e.split("."))/^\d+$/.test(a)?s.push(parseInt(a,10)):s.push(a);const o=new Qt(s,t,this._root),i=new te(this._engine,this._table);return i._root=o,i}const n=new G(e,t,this._root),r=new te(this._engine,this._table);return r._root=n,r}join(e,t,n){if(this._root===null||e._root===null)throw new Error("Both builders must have operators before joining");const r={leftField:t,rightField:n},s=new Si(this._root,e._root,r),o=new te(this._engine,this._table);return o._root=s,o}vectorJoin(e,t,n,r){if(this._root===null||e._root===null)throw new Error("Both builders must have operators before joining");const s=new Kr(this._root,e._root,t,n,r),o=new te(this._engine,this._table);return o._root=s,o}traverse(e,t,n=1){const r=new Fn(e,this._table,t??null,n);return this._chain(r)}temporalTraverse(e,t,n=1,r){const s=new Pn({startVertex:e,graph:this._table,temporalFilter:new Zt({timestamp:(r==null?void 0:r.timestamp)??null,timeRange:(r==null?void 0:r.timeRange)??null}),label:t??null,maxHops:n});return this._chain(s)}matchPattern(e){const t=new Dr(e,this._table);return this._chain(t)}rpq(e,t){const n=Tr(e),r=new Vr(n,this._table,t??null);return this._chain(r)}vertexAggregate(e,t="sum"){if(this._root===null)throw new Error("vertexAggregate requires a graph traversal source");const n={sum:i=>i.reduce((a,l)=>a+l,0),avg:i=>i.length>0?i.reduce((a,l)=>a+l,0)/i.length:0,min:i=>i.length>0?Math.min(...i):0,max:i=>i.length>0?Math.max(...i):0,count:i=>i.length},r=new $r(this._root,e,n[t]),s=this._engine._contextForTable(this._table),o=r.execute(s);if(o.length>0){const i=o.entries[0];return new sn(i.payload.fields._vertex_agg_result)}return new sn(0)}vectorExclude(e,t){if(this._root===null)throw new Error("vectorExclude requires a source query");const n=new En(this._root,e,t),r=new te(this._engine,this._table);return r._root=n,r}sparseThreshold(e){if(this._root===null)throw new Error("sparseThreshold requires a source query");const t=new Ne(this._root,e),n=new te(this._engine,this._table);return n._root=t,n}messagePassing(e=2,t="mean",n){const r=new Dn({kLayers:e,aggregation:t,propertyName:n??void 0,graph:this._table});return this._chain(r)}aggregate(e,t){const n=this._engine.getTable(this._table),r=this._buildContext(n);let s;if(this._root!==null)s=this._root.execute(r);else{const u=[...n.documentStore.docIds].sort((h,f)=>h-f).map(h=>({docId:h,payload:{positions:[],score:0,fields:{}}}));s=D.fromSorted(u)}const o=n.documentStore,i=[];for(const l of s){const u=o.getField(l.docId,e);typeof u=="number"&&i.push(u)}let a;switch(t.toLowerCase()){case"count":a=i.length;break;case"sum":a=i.reduce((l,u)=>l+u,0);break;case"avg":{const l=i.reduce((u,h)=>u+h,0);a=i.length>0?l/i.length:0;break}case"min":a=i.length>0?Math.min(...i):null;break;case"max":a=i.length>0?Math.max(...i):null;break;default:throw new Error(`Unknown aggregation function: ${t}`)}return new sn(a)}facet(e){const t=this._engine.getTable(this._table),n=this._buildContext(t),s=new Vs(e,this._root).execute(n),o=new Map;for(const i of s){const a=i.payload.fields._facet_value,l=i.payload.fields._facet_count;a!==void 0&&l!==void 0&&o.set(String(a),l)}return new qn(o)}vectorFacet(e,t,n){const r=this._engine.getTable(this._table),s=this._buildContext(r),i=new pr(e,t,n,this._root).execute(s),a=new Map;for(const l of i){const u=l.payload.fields._facet_value,h=l.payload.fields._facet_count;u!==void 0&&h!==void 0&&a.set(String(u),h)}return new qn(a)}pathFilter(e,t){const n=new Qt(e,t,this._root),r=new te(this._engine,this._table);return r._root=n,r}pathProject(...e){const t=new Ro(e,this._root),n=new te(this._engine,this._table);return n._root=t,n}unnest(e){const t=new Fo(e,this._root),n=new te(this._engine,this._table);return n._root=t,n}pathAggregate(e,t){const r={count:Yo,sum:Xo,avg:Qo,min:Zo,max:ei}[t.toLowerCase()];if(r===void 0)throw new Error(`Unknown aggregation: ${t}`);let s;if(typeof e=="string"){const a=[];for(const l of e.split("."))/^\d+$/.test(l)?a.push(parseInt(l,10)):a.push(l);s=a}else s=e;const o=new Po(s,new r,this._root),i=new te(this._engine,this._table);return i._root=o,i}scoreBm25(e,t){const r=this._engine._contextForTable(this._table).invertedIndex,o=(t?r.getFieldAnalyzer(t):r.analyzer).analyze(e),i=new xt(qt(),r.stats),a=new pe(i,this._root,o,t??null),l=new te(this._engine,this._table);return l._root=a,l}scoreBayesianBm25(e,t){const r=this._engine._contextForTable(this._table).invertedIndex,o=(t?r.getFieldAnalyzer(t):r.analyzer).analyze(e),i=new ct(Je(),r.stats),a=new pe(i,this._root,o,t??null),l=new te(this._engine,this._table);return l._root=a,l}scoreMultiFieldBayesian(e,t,n){const r=new Mn(t,e,n??null),s=new te(this._engine,this._table);return s._root=r,s}scoreBayesianWithPrior(e,t,n){if((n==null?void 0:n.priorFn)===void 0||n.priorFn===null)throw new Error("priorFn is required for scoreBayesianWithPrior");return this.scoreBayesianBm25(e,t)}learnParams(e,t,n){const r=(n==null?void 0:n.field)??"_default";return this._engine.learnScoringParams(this._table,r,e,t,{mode:(n==null?void 0:n.mode)??"balanced"})}fuseLogOdds(...e){let t=.5;const n=[];for(const o of e)typeof o=="number"?t=o:o._root!==null&&n.push(o);if(n.length===0)return this;const r=n.map(o=>o._root),s=new te(this._engine,this._table);return s._root=new ke(r,t),s}fuseProbAnd(...e){const t=e.filter(r=>r._root!==null).map(r=>r._root),n=new te(this._engine,this._table);return n._root=new Ve(t,"and"),n}fuseProbOr(...e){const t=e.filter(r=>r._root!==null).map(r=>r._root),n=new te(this._engine,this._table);return n._root=new Ve(t,"or"),n}fuseAttention(e,t=.5){const n=e.filter(i=>i._root!==null).map(i=>i._root);if(n.length<2)throw new Error("fuseAttention requires at least 2 signals");const r=new Wr(n.length,6,t),s=new Float64Array(6),o=new te(this._engine,this._table);return o._root=new pt(n,r,s),o}fuseLearned(e,t=.5){const n=e.filter(o=>o._root!==null).map(o=>o._root);if(n.length<2)throw new Error("fuseLearned requires at least 2 signals");const r=new Hr(n.length,t),s=new te(this._engine,this._table);return s._root=new kt(n,r),s}multiStage(e){const t=[];for(const[s,o]of e){if(s._root===null)throw new Error("Each stage must have an operator");t.push([s._root,o])}const n=new $e(t),r=new te(this._engine,this._table);return r._root=n,r}execute(){if(this._root===null)return new D;const e=this._engine._contextForTable(this._table);let t=this._root;if(e.invertedIndex){const r=e.invertedIndex.stats;t=new Fe(r).optimize(this._root)}return new tn(e).execute(t)}explain(){if(this._root===null)return"(empty query)";const e=this._engine._contextForTable(this._table);let t=this._root;if(e.invertedIndex){const r=e.invertedIndex.stats;t=new Fe(r).optimize(this._root)}return new tn(e).explain(t)}_chain(e){this._root!==null&&(e=new H([this._root,e]));const t=new te(this._engine,this._table);return t._root=e,t}_buildContext(e){const t={};for(const[r,s]of e.vectorIndexes)t[r]=s;const n={};for(const[r,s]of e.spatialIndexes)n[r]=s;return{documentStore:e.documentStore,invertedIndex:e.invertedIndex,vectorIndexes:t,spatialIndexes:n}}}class Ei{constructor(e){b(this,"_conn");b(this,"_finished");this._conn=e,this._finished=!1,this._conn.beginTransaction()}get active(){return!this._finished}commit(){if(this._finished)throw new Error("Transaction already finished");this._conn.commitTransaction(),this._finished=!0}rollback(){if(this._finished)throw new Error("Transaction already finished");this._conn.rollbackTransaction(),this._finished=!0}savepoint(e){if(this._finished)throw new Error("Transaction already finished");this._conn.savepoint(e)}releaseSavepoint(e){if(this._finished)throw new Error("Transaction already finished");this._conn.releaseSavepoint(e)}rollbackTo(e){if(this._finished)throw new Error("Transaction already finished");this._conn.rollbackToSavepoint(e)}autoRollback(){this._finished||this.rollback()}}class Ii{constructor(){b(this,"_index",new Map)}_makeKey(e,t){return`${t}\0${e.join("\0")}`}_pairKey(e,t){return`${String(e)}\0${String(t)}`}_parsePairKey(e){const t=e.split("\0");return[parseInt(t[0],10),parseInt(t[1],10)]}build(e,t,n){for(const r of n){const s=this._makeKey(r,t),o=new Set,i=e.vertexIdsInGraph(t);for(const a of i){const l=this._findReachable(e,t,a,r);for(const u of l)o.add(this._pairKey(a,u))}this._index.set(s,o)}}_findReachable(e,t,n,r){let s=new Set([n]);for(const o of r){const i=new Set;for(const a of s){const l=e.neighbors(a,t,o,"out");for(const u of l)i.add(u)}if(s=i,s.size===0)break}return[...s]}lookup(e,t){const n=this._makeKey(e,t),r=this._index.get(n);return r?[...r].map(s=>this._parsePairKey(s)):[]}hasPath(e,t){const n=this._makeKey(e,t);return this._index.has(n)}indexedPaths(){const e=[];for(const t of this._index.keys()){const n=t.split("\0");e.push(n.slice(1))}return e}}class zn{constructor(e=1,t=0,n=.5){b(this,"_transform");this._transform=new K.BayesianProbabilityTransform(e,t,n===.5?null:n)}fit(e,t,n){return this._transform.fit(e,t,n),this.params()}update(e,t,n){this._transform.update(e,t,n)}params(){return{alpha:this._transform.alpha,beta:this._transform.beta,baseRate:this._transform.baseRate??.5}}}class Ni{constructor(e){b(this,"_tables");b(this,"_views");b(this,"_prepared");b(this,"_sequences");b(this,"_tempTables");b(this,"_graphStore");b(this,"_versionedGraphs");b(this,"_pathIndexes");b(this,"_foreignServers");b(this,"_foreignTables");b(this,"_models");b(this,"_catalog");b(this,"_indexManager");b(this,"_transaction");b(this,"_compiler");b(this,"_dbPath");b(this,"_parallelWorkers");b(this,"_spillThreshold");this._dbPath=(e==null?void 0:e.dbPath)??null,this._parallelWorkers=(e==null?void 0:e.parallelWorkers)??4,this._spillThreshold=(e==null?void 0:e.spillThreshold)??0,this._tables=new Map,this._views=new Map,this._prepared=new Map,this._sequences=new Map,this._tempTables=new Set,this._graphStore=new cr,this._versionedGraphs=new Map,this._pathIndexes=new Map,this._foreignServers=new Map,this._foreignTables=new Map,this._models=new Map,this._catalog=null,this._indexManager=null,this._transaction=null,this._compiler=new le(this)}async sql(e,t){return this._compiler.execute(e,t)}getTable(e){const t=this._tables.get(e);if(t!==void 0)return t;const n=this._compiler.tables.get(e);if(n!==void 0)return this._tables.set(e,n),n;throw new Error(`Table not found: ${e}`)}hasTable(e){return this._tables.has(e)||this._compiler.tables.has(e)}registerTable(e,t){this._tables.set(e,t),this._compiler.tables.set(e,t)}addDocument(e,t,n,r){const s=this._tables.get(n);if(s===void 0)throw new Error(`Table '${n}' does not exist`);const o={...t};s.primaryKey!==null&&!(s.primaryKey in o)&&s.columns.get(s.primaryKey)!==void 0&&(o[s.primaryKey]=e);let i=null,a=null;if(r!=null){for(const[u,h]of s.columns)if(h.vectorDimensions!==null){i=u;break}i!==null&&(a=r,o[i]=Array.from(r))}s.documentStore.put(e,o);const l={};for(const[u,h]of Object.entries(o))typeof h=="string"&&(l[u]=h);if(Object.keys(l).length>0&&s.invertedIndex.addDocument(e,l),i!==null&&a!==null){const u=s.vectorIndexes.get(i);u!==void 0&&u.add(e,a)}}getDocument(e,t){const n=this._tables.get(t);if(n===void 0)throw new Error(`Table '${t}' does not exist`);return n.documentStore.get(e)}deleteDocument(e,t){const n=this._tables.get(t);if(n===void 0)throw new Error(`Table '${t}' does not exist`);n.documentStore.delete(e),n.invertedIndex.removeDocument(e)}getGraphStore(e){return this._graphStore}addGraphVertex(e,t){this._graphStore.addVertex(e,t)}addGraphEdge(e,t){this._graphStore.addEdge(e,t)}createGraph(e){return this._graphStore.createGraph(e),this._catalog!==null&&this._catalog.saveNamedGraph(e),this._graphStore}dropGraph(e){this._graphStore.dropGraph(e),this._catalog!==null&&this._catalog.dropNamedGraph(e)}getGraph(e){if(!this._graphStore.hasGraph(e))throw new Error(`Graph '${e}' does not exist`);return this._graphStore}hasGraph(e){return this._graphStore.hasGraph(e)}get graphStore(){return this._graphStore}estimateConvWeights(e,t,n,r="embedding"){return To(this,e,t,n,r)}saveModel(e,t){this._models.set(e,t),this._catalog!==null&&this._catalog.saveModel(e,t)}loadModel(e){const t=this._models.get(e);if(t!==void 0)return t;if(this._catalog!==null){const n=this._catalog.loadModel(e);return n!==null&&this._models.set(e,n),n}return null}deleteModel(e){this._models.delete(e),this._catalog!==null&&this._catalog.deleteModel(e)}buildPathIndex(e,t){if(!this._graphStore.hasGraph(e))throw new Error(`Graph '${e}' does not exist`);const n=new Ii;n.build(this._graphStore,e,t),this._pathIndexes.set(e,n),this._catalog!==null&&this._catalog.savePathIndex(e,t)}getPathIndex(e){return this._pathIndexes.get(e)??null}dropPathIndex(e){this._pathIndexes.delete(e),this._catalog!==null&&this._catalog.dropPathIndex(e)}createAnalyzer(e,t){const n=Le.fromDict(t);bs(e,n),this._catalog!==null&&this._catalog.saveAnalyzer(e,t)}dropAnalyzer(e){ws(e),this._catalog!==null&&this._catalog.dropAnalyzer(e)}setTableAnalyzer(e,t,n,r="both"){const s=this._tables.get(e);if(s===void 0)throw new Error(`Table '${e}' does not exist`);const o=vs(n);s.invertedIndex.setFieldAnalyzer(t,o,r),this._catalog!==null&&(r==="both"?(this._catalog.saveTableFieldAnalyzer(e,t,"index",n),this._catalog.saveTableFieldAnalyzer(e,t,"search",n)):this._catalog.saveTableFieldAnalyzer(e,t,r,n))}getTableAnalyzer(e,t,n="index"){const r=this._tables.get(e);if(r===void 0)throw new Error(`Table '${e}' does not exist`);return n==="search"?r.invertedIndex.getSearchAnalyzer(t):r.invertedIndex.getFieldAnalyzer(t)}saveScoringParams(e,t){this._catalog!==null&&this._catalog.saveScoringParams(e,t)}loadScoringParams(e){return this._catalog!==null?this._catalog.loadScoringParams(e):null}loadAllScoringParams(){return this._catalog!==null?this._catalog.loadAllScoringParams():[]}learnScoringParams(e,t,n,r,s){const o=(s==null?void 0:s.mode)??"balanced",i=this._tables.get(e);if(i===void 0)throw new Error(`Table '${e}' does not exist`);const a=this._contextForTable(e),l=a.invertedIndex,h=(t?l.getSearchAnalyzer(t):l.analyzer).analyze(n),f=new ct(Je(),l.stats),d=new _e(n,t||null),m=new pe(f,d,h,t||null).execute(a),_=new Map;for(const S of m)_.set(S.docId,S.payload.score);const y=[...i.documentStore.docIds].sort((S,N)=>S-N);if(r.length!==y.length)throw new Error(`labels length (${String(r.length)}) must match document count (${String(y.length)})`);const x=y.map(S=>_.get(S)??0),E=new zn().fit(x,r,{mode:o}),I=`${e}.${t}.${n}`;return this.saveScoringParams(I,E),E}updateScoringParams(e,t,n,r){const s=`${e}.${t}`,o=this.loadScoringParams(s);let i;o!==null?i=new zn(o.alpha??1,o.beta??0,o.base_rate??.5):i=new zn,i.update(n,r),this.saveScoringParams(s,i.params())}vectorBackgroundStats(e,t){const n=this._tables.get(e);if(n===void 0)return null;const r=n.vectorIndexes.get(t);return r!==void 0&&r.backgroundStats!==void 0?r.backgroundStats:null}begin(){if(this._catalog===null)throw new Error("Transactions require a persistent engine (dbPath)");if(this._transaction!==null&&this._transaction.active)throw new Error("Transaction already active");return this._transaction=new Ei(this._catalog.conn),this._transaction}query(e){return new te(this,e)}insert(e,t,n){const r=this.getTable(e);r.documentStore.put(t,n);const s={};for(const[o,i]of r.columns){const a=n[o];i.pythonType==="string"&&a!==null&&a!==void 0&&(s[o]=typeof a=="string"?a:String(a))}Object.keys(s).length>0&&r.invertedIndex.addDocument(t,s);for(const[o,i]of r.vectorIndexes){const a=n[o];a!=null&&(a instanceof Float64Array?i.add(t,a):Array.isArray(a)&&i.add(t,new Float64Array(a)))}}get dbPath(){return this._dbPath}get parallelWorkers(){return this._parallelWorkers}get spillThreshold(){return this._spillThreshold}get compiler(){return this._compiler}get catalog(){return this._catalog}get indexManager(){return this._indexManager}_contextForTable(e){const t=this._tables.get(e);if(t===void 0)throw new Error(`Table '${e}' does not exist`);const n={};for(const[s,o]of t.vectorIndexes)n[s]=o;const r={};for(const[s,o]of t.spatialIndexes)r[s]=o;return{documentStore:t.documentStore,invertedIndex:t.invertedIndex,vectorIndexes:n,spatialIndexes:r,graphStore:this._graphStore,indexManager:this._indexManager}}deepLearn(e,t,n){if(this._tables.get(e)===void 0)throw new Error(`Table '${e}' does not exist`);const s={...n,_model_name:t,_table:e,_trained_at:new Date().toISOString(),_status:"trained"};return this.saveModel(t,s),s}deepPredict(e,t){if(this.loadModel(e)===null)throw new Error(`Model '${e}' not found`);return t.map((r,s)=>({_input_idx:s,_model:e,_prediction:null,...r}))}applyGraphDelta(e,t){if(!this._graphStore.hasGraph(e))throw new Error(`Graph '${e}' does not exist`);if(t.removeEdges)for(const n of t.removeEdges)this._graphStore.removeEdge(n,e);if(t.removeVertices)for(const n of t.removeVertices)this._graphStore.removeVertex(n,e);if(t.addVertices)for(const n of t.addVertices)this._graphStore.addVertex(n,e);if(t.addEdges)for(const n of t.addEdges)this._graphStore.addEdge(n,e);this._catalog!==null&&this._catalog.saveNamedGraph(e)}createGraphVersion(e,t){if(!this._graphStore.hasGraph(e))throw new Error(`Graph '${e}' does not exist`);const n=this._versionedGraphs.get(e);if(n===void 0){const r={versions:new Map},s=new Map,o=new Map;for(const i of this._graphStore.verticesInGraph(e))s.set(i.vertexId,{...i});for(const i of this._graphStore.edgesInGraph(e))o.set(i.edgeId,{...i});r.versions.set(t,{vertices:s,edges:o}),this._versionedGraphs.set(e,r)}else{const r=new Map,s=new Map;for(const o of this._graphStore.verticesInGraph(e))r.set(o.vertexId,{...o});for(const o of this._graphStore.edgesInGraph(e))s.set(o.edgeId,{...o});n.versions.set(t,{vertices:r,edges:s})}}graphVersions(e){const t=this._versionedGraphs.get(e);return t===void 0?[]:[...t.versions.keys()]}restoreGraphVersion(e,t){const n=this._versionedGraphs.get(e);if(n===void 0)throw new Error(`No versions exist for graph '${e}'`);const r=n.versions.get(t);if(r===void 0)throw new Error(`Version '${t}' not found for graph '${e}'`);const s=this._graphStore.verticesInGraph(e);for(const o of s)this._graphStore.removeVertex(o.vertexId,e);for(const o of r.vertices.values())this._graphStore.addVertex(o,e);for(const o of r.edges.values())this._graphStore.addEdge(o,e)}calibrationReport(e,t){const r=this.loadAllScoringParams().filter(([o])=>o.startsWith(`${e}.${t}`)),s={table:e,field:t,numCalibrations:r.length,params:r.map(([o,i])=>({name:o,alpha:i.alpha??null,beta:i.beta??null,baseRate:i.base_rate??null}))};if(r.length>0){const o=r.map(([,a])=>a.alpha).filter(a=>typeof a=="number"),i=r.map(([,a])=>a.beta).filter(a=>typeof a=="number");o.length>0&&(s.mean_alpha=o.reduce((a,l)=>a+l,0)/o.length,s.std_alpha=o.length>1?Math.sqrt(o.reduce((a,l)=>a+(l-s.mean_alpha)**2,0)/(o.length-1)):0),i.length>0&&(s.mean_beta=i.reduce((a,l)=>a+l,0)/i.length)}return s}saveToCatalog(){if(this._catalog!==null){for(const[e,t]of this._tables)if(!this._tempTables.has(e)){const n=[];for(const[r,s]of t.columns)n.push({...s,name:r});this._catalog.saveTableSchema(e,n)}for(const[e,t]of this._sequences)this._catalog.setMetadata(`seq:${e}`,JSON.stringify(t));for(const e of this._graphStore.graphNames())this._catalog.saveNamedGraph(e);for(const[e,t]of this._models)this._catalog.saveModel(e,t)}}loadFromCatalog(){if(this._catalog===null)return;const e=this._catalog.loadTableSchemas();for(const[n]of e);const t=this._catalog.loadNamedGraphs();for(const n of t)this._graphStore.hasGraph(n)||this._graphStore.createGraph(n)}close(){this._transaction!==null&&this._transaction.active&&(this._transaction.rollback(),this._transaction=null),this._foreignTables.clear(),this._foreignServers.clear();for(const e of this._tempTables)this._tables.delete(e);this._tempTables.clear(),this._catalog!==null&&(this._catalog.close(),this._catalog=null),this._tables.clear(),this._graphStore.clear()}}$.AggregateResult=sn,$.Analyzer=Le,$.BM25Scorer=xt,$.BayesianBM25Scorer=ct,$.Between=un,$.ComplementOperator=de,$.Engine=Ni,$.Equals=ln,$.FacetResult=qn,$.FilterOperator=G,$.FlatVectorIndex=lr,$.GeneralizedPostingList=Se,$.GreaterThan=Wn,$.GreaterThanOrEqual=Hn,$.HierarchicalDocument=cs,$.ILike=Qn,$.InSet=cn,$.IndexStats=Bn,$.IntersectOperator=H,$.IsNotNull=fn,$.IsNull=hn,$.KNNOperator=je,$.LessThan=Kn,$.LessThanOrEqual=Jn,$.Like=Xn,$.MemoryDocumentStore=or,$.MemoryGraphStore=cr,$.MemoryInvertedIndex=ir,$.NotEquals=Un,$.Operator=q,$.PostingList=D,$.QueryBuilder=te,$.Table=Ut,$.TermOperator=_e,$.UnionOperator=re,$.createBM25Params=qt,$.createBayesianBM25Params=Je,$.keywordAnalyzer=rr,$.standardAnalyzer=Sn,$.whitespaceAnalyzer=nr,Object.defineProperty($,Symbol.toStringTag,{value:"Module"})}));
|
|
14
|
+
`);for(const o of e.children)s+=this._explainAnalyzeNode(o,t+1,n);return s}explainTree(e){return this._explainTreeNode(e)}_explainTreeNode(e){const t={operator:this._operatorName(e),details:this._operatorDetails(e)},n=[];if(e instanceof re)for(const r of e.operands)n.push(this._explainTreeNode(r));else if(e instanceof H)for(const r of e.operands)n.push(this._explainTreeNode(r));else if(e instanceof de)n.push(this._explainTreeNode(e.operand));else if(e instanceof Ne)n.push(this._explainTreeNode(e.source));else if(e instanceof pe)n.push(this._explainTreeNode(e.source));else if(e instanceof G&&e.source!==null)n.push(this._explainTreeNode(e.source));else if(e instanceof $e)for(const[r,s]of e.stages){const o=this._explainTreeNode(r);o.cutoff=s,n.push(o)}else{const r=e.constructor.name;if(r==="LogOddsFusionOperator"||r==="ProbBoolFusionOperator"||r==="AttentionFusionOperator"||r==="LearnedFusionOperator"){const s=e;for(const o of s.signals)n.push(this._explainTreeNode(o))}}return n.length>0&&(t.children=n),t}}const et=new Set(["count","sum","avg","min","max","string_agg","array_agg","bool_and","bool_or","stddev","stddev_pop","stddev_samp","variance","var_pop","var_samp","percentile_cont","percentile_disc","mode","json_object_agg","jsonb_object_agg","corr","covar_pop","covar_samp","regr_count","regr_avgx","regr_avgy","regr_sxx","regr_syy","regr_sxy","regr_slope","regr_intercept","regr_r2"]),Yr=new Set(["text_match","bayesian_match","bayesian_match_with_prior","knn_match","bayesian_knn_match","traverse_match","temporal_traverse","path_filter","vector_exclude","spatial_within","fuse_log_odds","fuse_prob_and","fuse_prob_or","fuse_prob_not","fuse_attention","fuse_multihead","fuse_learned","sparse_threshold","multi_field_match","message_passing","graph_embedding","staged_retrieval","pagerank","hits","betweenness","weighted_rpq","progressive_fusion","deep_fusion"]),di=new Set(["random","nextval","currval","now","current_timestamp","clock_timestamp","statement_timestamp","timeofday"]);function g(c,e){return c[e]??null}function Xr(c){return typeof c=="string"?c:c==null?"":typeof c=="number"?c.toString(10):typeof c=="boolean"?c?"true":"false":JSON.stringify(c)}function j(c,e){const t=c[e];return t==null?"":Xr(t)}function w(c){return c??{}}function P(c){return Array.isArray(c)?c:[]}function J(c){const e=g(c,"String")??g(c,"str");if(e!==null&&typeof e=="object")return j(w(e),"sval")||j(w(e),"str");if(typeof e=="string")return e;const t=j(c,"sval")||j(c,"str");return t||""}function ae(c){return j(c,"relname")}function Ue(c){const e=g(c,"alias");return e!==null&&typeof e=="object"&&j(w(e),"aliasname")||null}function pi(c){return j(c,"schemaname")||null}function B(c){const e=w(g(c,"ColumnRef")??c),t=P(g(e,"fields"));if(t.length>0){const r=t[t.length-1],s=J(r);if(s)return s}const n=j(e,"sval")||j(e,"str");if(n)return n;throw new Error("Expected ColumnRef, got "+JSON.stringify(c).slice(0,200))}function gi(c){const e=w(g(c,"ColumnRef")??c),t=P(g(e,"fields"));if(t.length>=2){const n=[];for(const r of t){const s=J(r);s&&n.push(s)}return n.join(".")}return B(c)}function X(c){return g(c,"ColumnRef")!==null}function tt(c){if(g(c,"A_Star")!==null&&g(c,"A_Star")!==void 0)return!0;const e=g(c,"ColumnRef");if(e!=null){const t=P(g(w(e),"fields"));for(const n of t)if(g(n,"A_Star")!==null&&g(n,"A_Star")!==void 0)return!0}return!1}function Q(c){return g(c,"FuncCall")!==null}function ce(c){const e=w(g(c,"FuncCall")??c),t=P(g(e,"funcname"));return t.length===0?"":J(t[t.length-1]).toLowerCase()}function ve(c){const e=w(g(c,"FuncCall")??c);return P(g(e,"args"))}function nt(c){const e=w(g(c,"FuncCall")??c);return g(e,"agg_star")===!0}function Qr(c){const e=w(g(c,"FuncCall")??c);return g(e,"agg_distinct")===!0}function rt(c){const e=w(g(c,"FuncCall")??c),t=g(e,"over");return t!=null}function be(c){return g(c,"A_Const")!==null}function Pt(c){return g(c,"ParamRef")!==null}function jn(c){return g(c,"A_Expr")!==null}function mi(c){return g(c,"BoolExpr")!==null}function Zr(c){return g(c,"NullTest")!==null}function nn(c){return g(c,"SubLink")!==null}function rn(c){return g(c,"TypeCast")!==null}function _i(c){return g(c,"A_ArrayExpr")!==null}function z(c,e){const t=g(c,"ParamRef");if(t!=null){const l=w(t),u=g(l,"number"),h=u-1;if(h<0||h>=e.length)throw new Error(`No value supplied for parameter $${String(u)}`);return e[h]}const n=w(g(c,"A_Const")??c);if(g(n,"isnull")===!0)return null;const r=g(n,"ival");if(r!=null){if(typeof r=="number")return r;if(typeof r=="object"){const l=g(w(r),"ival");if(l!=null)return Number(l)}return Number(r)}const s=g(n,"fval");if(s!=null)return parseFloat(String(s));const o=g(n,"sval");if(o!=null){if(typeof o=="string")return o;if(typeof o=="object"){const l=g(w(o),"sval");if(l!=null)return String(l)}return String(o)}const i=g(n,"boolval");if(i!=null)return i;const a=g(n,"val");if(a!=null&&typeof a=="object"){const l=w(a),u=g(l,"Integer")??g(l,"ival");if(u!=null){if(typeof u=="number")return u;const p=g(w(u),"ival");if(p!==null)return Number(p)}const h=g(l,"Float")??g(l,"fval");if(h!=null){if(typeof h=="number")return h;const p=g(w(h),"fval");return parseFloat(String(p!==null?p:h))}const f=g(l,"String")??g(l,"sval");if(f!=null){if(typeof f=="string")return f;const p=g(w(f),"sval");if(p!==null)return String(p)}const d=g(l,"Boolean")??g(l,"boolval");if(d!=null){if(typeof d=="boolean")return d;const p=g(w(d),"boolval");if(p!==null)return p}}return typeof c=="number"||typeof c=="string"?c:null}function we(c,e){const t=z(c,e);return Number(t)}function ee(c,e){const t=z(c,e);return String(t)}function We(c,e){const t=g(c,"A_ArrayExpr");if(t!=null){const r=P(g(w(t),"elements"));return new Float64Array(r.map(s=>Number(z(s,e))))}const n=g(c,"ParamRef");if(n!=null){const r=w(n),s=g(r,"number"),o=s-1;if(o<0||o>=e.length)throw new Error(`No value supplied for parameter $${String(s)}`);const i=e[o];if(i instanceof Float64Array)return i;if(i instanceof Float32Array)return new Float64Array(i);if(Array.isArray(i))return new Float64Array(i.map(Number));throw new Error("Parameter for vector must be an array")}throw new Error("Expected ARRAY literal or $N parameter for vector")}function yi(c,e,t){if(Pt(c)){const n=w(g(c,"ParamRef")),r=g(n,"number"),s=r-1;if(s<0||s>=e.length)throw new Error(`Parameter $${String(r)} not provided`);const o=e[s];return o!==null&&typeof o=="object"&&"tolist"in o?o.tolist:o}if(_i(c)){const n=P(g(w(g(c,"A_ArrayExpr")),"elements"));return n.length===0?[]:n.map(r=>z(r,e))}if(rn(c))return t.evaluate(c,{});if(Q(c))return t.evaluate(c,{});try{return t.evaluate(c,{})}catch{return z(c,e)}}const bi=1e3;class le{constructor(e){b(this,"_tables");b(this,"_views");b(this,"_sequences");b(this,"_engine");b(this,"_transactionActive");b(this,"_prepared");b(this,"_params");b(this,"_expandedViews");b(this,"_shadowedTables");b(this,"_inlinedCTEs");b(this,"_correlatedOuterRow");b(this,"_foreignServers");b(this,"_foreignTables");b(this,"_currentGraphName","");this._tables=new Map,this._views=new Map,this._sequences=new Map,this._engine=e??null,this._transactionActive=!1,this._prepared=new Map,this._params=[],this._expandedViews=[],this._shadowedTables=new Map,this._inlinedCTEs=new Map,this._correlatedOuterRow=null,this._foreignServers=new Map,this._foreignTables=new Map}_makeSubqueryExecutor(e){return(t,n)=>this._compileSelect(t,e,n)}get tables(){return this._tables}get views(){return this._views}get engine(){return this._engine}async execute(e,t){this._params=t?[...t]:[];const n=await st.parse(e),r=P(g(w(n),"stmts"));if(r.length===0)return null;let s=null;for(const o of r){const i=w(g(o,"stmt"));s=this._dispatchStatement(i,this._params)}return s}_dispatchStatement(e,t){const n=Object.keys(e);if(n.length===0)return null;const r=n[0],s=w(e[r]);switch(r){case"SelectStmt":return this._compileSelect(s,t);case"InsertStmt":return this._compileInsert(s,t);case"UpdateStmt":return this._compileUpdate(s,t);case"DeleteStmt":return this._compileDelete(s,t);case"CreateStmt":return this._compileCreateTable(s);case"CreateTableAsStmt":return this._compileCreateTableAs(s,t);case"DropStmt":return this._compileDrop(s);case"ViewStmt":return this._compileCreateView(s);case"TransactionStmt":return this._compileTransaction(s);case"CreateSeqStmt":return this._compileCreateSequence(s);case"AlterSeqStmt":return this._compileAlterSequence(s);case"IndexStmt":return this._compileCreateIndex(s);case"AlterTableStmt":return this._compileAlterTable(s);case"TruncateStmt":return this._compileTruncate(s);case"ExplainStmt":return this._compileExplain(s,t);case"RenameStmt":return this._compileRename(s);case"PrepareStmt":return this._compilePrepare(s);case"ExecuteStmt":return this._compileExecute(s,t);case"DeallocateStmt":return this._compileDeallocate(s);case"VacuumStmt":return this._compileAnalyze(s);case"CreateForeignServerStmt":return this._compileCreateForeignServer(s);case"CreateForeignTableStmt":return this._compileCreateForeignTable(s);case"VariableSetStmt":case"VariableShowStmt":case"DoStmt":case"LockStmt":case"DiscardStmt":return null;default:throw new Error(`Unsupported statement type: ${r}`)}}_compileCreateTable(e){const t=w(g(e,"relation")),n=ae(t),r=g(e,"if_not_exists")===!0;if(this._tables.has(n)){if(r)return null;throw new Error(`Table "${n}" already exists`)}const s=P(g(e,"tableElts")),o=[],i=[],a=[];let l=null;for(const h of s){const f=g(h,"ColumnDef");if(f!=null){const p=w(f),m=this._parseColumnDef(p);o.push(m),m.primaryKey&&(l=m.name);const _=P(g(p,"constraints"));for(const y of _){const x=w(g(y,"Constraint")??y),v=g(x,"contype");if(v===1||v==="CONSTR_CHECK"){const E=j(x,"conname")||`check_${String(a.length)}`,I=g(x,"raw_expr");if(I!=null){const S=new ie,N=w(I);a.push([E,A=>S.evaluate(N,A)===!0])}}if(v===8||v==="CONSTR_FOREIGN"){const E=w(g(x,"pktable")),I=P(g(x,"pk_attrs"));I.length>0&&i.push({column:m.name,refTable:ae(E),refColumn:J(I[0])})}}continue}const d=g(h,"Constraint");if(d!=null){const p=w(d),m=g(p,"contype");if(m===5||m==="CONSTR_PRIMARY"){const _=P(g(p,"keys"));_.length>0&&(l=J(_[0]))}if(m===8||m==="CONSTR_FOREIGN"){const _=P(g(p,"fk_attrs")),y=w(g(p,"pktable")),x=P(g(p,"pk_attrs"));_.length>0&&x.length>0&&i.push({column:J(_[0]),refTable:ae(y),refColumn:J(x[0])})}if(m===4||m==="CONSTR_UNIQUE"){const _=P(g(p,"keys"));for(const y of _){const x=J(y),v=o.findIndex(E=>E.name===x);if(v!==-1){const E=o[v];o[v]=Ie(E.name,E.typeName,{...E,unique:!0})}}}if(m===1||m==="CONSTR_CHECK"){const _=j(p,"conname")||`check_${String(a.length)}`,y=g(p,"raw_expr");if(y!=null){const x=new ie,v=w(y);a.push([_,E=>x.evaluate(v,E)===!0])}}}}if(l!==null){const h=o.findIndex(f=>f.name===l);if(h!==-1){const f=o[h];o[h]=Ie(f.name,f.typeName,{...f,primaryKey:!0,notNull:!0})}}const u=new Ut(n,o);u.foreignKeys=i,u.checkConstraints=a,this._tables.set(n,u),i.length>0&&this._registerFkValidators(n,u,i);for(const h of o)if(h.autoIncrement){const f=`${n}_${h.name}_seq`;this._sequences.set(f,{current:0,increment:1,start:1})}return null}_compileCreateTableAs(e,t){const n=w(g(e,"into")),r=w(g(n,"rel")),s=ae(r);if(this._tables.has(s))throw new Error(`Table "${s}" already exists`);const o=w(g(e,"query")),i=w(g(o,"SelectStmt")??o),a=this._compileSelect(i,t),l=[];for(const f of a.columns){let d="text",p="string";if(a.rows.length>0){const m=a.rows[0][f];typeof m=="number"?Number.isInteger(m)?(d="integer",p="number"):(d="real",p="number"):typeof m=="boolean"?(d="boolean",p="boolean"):Array.isArray(m)?(d="text[]",p="array"):typeof m=="object"&&m!==null&&(d="jsonb",p="object")}l.push(Ie(f,d,{pythonType:p}))}const u=new Ut(s,l);this._tables.set(s,u);let h=0;for(const f of a.rows){const d={};for(const p of a.columns)d[p]=f[p]??null;u.insert(d),h++}return{columns:["inserted"],rows:[{inserted:h}]}}_compileCreateSequence(e){const t=w(g(e,"sequence")),n=ae(t),r=P(g(e,"options"));if(this._sequences.has(n)){if(g(e,"if_not_exists")===!0)return null;throw new Error(`Sequence "${n}" already exists`)}let s=1,o=1;for(const i of r){const a=w(g(i,"DefElem")??i),l=j(a,"defname"),u=g(a,"arg");if(l==="start"&&u!==null){const h=w(u);s=Number(g(h,"ival")??g(w(g(h,"Integer")??{}),"ival")??1)}if(l==="increment"&&u!==null){const h=w(u);o=Number(g(h,"ival")??g(w(g(h,"Integer")??{}),"ival")??1)}}return this._sequences.set(n,{current:s-o,increment:o,start:s}),null}_compileAlterSequence(e){const t=w(g(e,"sequence")),n=ae(t),r=this._sequences.get(n);if(r===void 0)throw new Error(`Sequence "${n}" does not exist`);const s=P(g(e,"options"));for(const o of s){const i=w(g(o,"DefElem")??o),a=j(i,"defname"),l=g(i,"arg");if(a==="restart")if(l!=null){const u=w(l),h=Number(g(u,"ival")??g(w(g(u,"Integer")??{}),"ival")??r.start??1);r.current=h-r.increment}else r.current=(r.start??1)-r.increment;else if(a==="increment"){if(l!=null){const u=w(l);r.increment=Number(g(u,"ival")??g(w(g(u,"Integer")??{}),"ival")??1)}}else if(a==="start"&&l!=null){const u=w(l);r.start=Number(g(u,"ival")??g(w(g(u,"Integer")??{}),"ival")??1)}}return null}_parseColumnDef(e){const t=j(e,"colname"),n=w(g(e,"typeName")),r=P(g(n,"names")),s=[];for(const I of r){const S=J(I);S&&S!=="pg_catalog"&&s.push(S)}const i=P(g(n,"arrayBounds")).length>0;let[a,l]=s.length>0?xr(s):["text","string"],u=!1;const h=s.join(" ").toUpperCase();(h==="SERIAL"||h==="BIGSERIAL"||h==="SMALLSERIAL")&&(u=!0),i&&(a="array",l="array");const f=P(g(n,"typmods"));let d=null,p=null,m=null;if(f.length>0){const I=g(f[0],"Integer")??g(f[0],"A_Const");if(I!=null){const S=g(w(I),"ival");S!==null&&typeof S=="number"&&(a==="vector"?m=S:d=S)}if(f.length>1){const S=g(f[1],"Integer")??g(f[1],"A_Const");if(S!=null){const N=g(w(S),"ival");N!==null&&typeof N=="number"&&(p=N)}}}let _=!1,y=!1,x=!1,v=null;const E=P(g(e,"constraints"));for(const I of E){const S=w(g(I,"Constraint")??I),N=g(S,"contype");if((N==="CONSTR_NOTNULL"||N===1)&&(y=!0),(N==="CONSTR_PRIMARY"||N===5)&&(_=!0,y=!0),(N==="CONSTR_UNIQUE"||N===4)&&(x=!0),N==="CONSTR_DEFAULT"||N===2){const A=g(S,"raw_expr");A!=null&&(v=new ie().evaluate(w(A),{}))}(N==="CONSTR_IDENTITY"||N===9)&&(u=!0,y=!0)}return u&&(y=!0),Ie(t,a,{pythonType:l,primaryKey:_,notNull:y,autoIncrement:u,defaultValue:v,vectorDimensions:m,unique:x,numericPrecision:d,numericScale:p})}_compileDrop(e){const t=g(e,"removeType");return t===20||t==="OBJECT_INDEX"?this._compileDropIndex(e):t===51||t==="OBJECT_VIEW"?this._compileDropView(e):t===17||t==="OBJECT_FOREIGN_SERVER"?this._compileDropForeignServer(e):t===18||t==="OBJECT_FOREIGN_TABLE"?this._compileDropForeignTable(e):this._compileDropTable(e)}_compileDropTable(e){const t=P(g(e,"objects")),n=g(e,"missing_ok")===!0;for(const r of t){const s=P(r);let o;if(s.length>0?o=J(s[s.length-1]):o=J(r),!!o){if(!this._tables.has(o)){if(n)continue;throw new Error(`Table "${o}" does not exist`)}this._tables.delete(o);for(const[i]of this._sequences)i.startsWith(`${o}_`)&&this._sequences.delete(i)}}return null}_compileDropView(e){const t=P(g(e,"objects")),n=g(e,"missing_ok")===!0;for(const r of t){let s=P(r);if(s.length===0){const i=g(w(r),"List");i!=null&&(s=P(g(w(i),"items")))}let o;if(s.length>0?o=J(s[s.length-1]):o=J(r),!!o){if(!this._views.has(o)){if(n)continue;throw new Error(`View "${o}" does not exist`)}this._views.delete(o)}}return null}_compileDropIndex(e){return null}_compileCreateForeignServer(e){const t=j(e,"servername");if(this._foreignServers.has(t)){if(g(e,"if_not_exists")===!0)return null;throw new Error(`Foreign server '${t}' already exists`)}const n=j(e,"fdwname");if(n!=="duckdb_fdw"&&n!=="arrow_fdw")throw new Error(`Unsupported FDW type: '${n}'`);const r={},s=P(g(e,"options"));for(const o of s){const i=w(g(o,"DefElem")??o),a=j(i,"defname"),l=w(g(i,"arg")),u=j(l,"sval")||j(w(g(l,"String")??{}),"sval");a&&(r[a]=u)}return this._foreignServers.set(t,{name:t,fdwType:n,options:r}),null}_compileCreateForeignTable(e){const t=w(g(e,"base")),n=w(g(t,"relation")),r=ae(n);if(this._foreignTables.has(r)){if(g(t,"if_not_exists")===!0)return null;throw new Error(`Foreign table '${r}' already exists`)}if(this._tables.has(r))throw new Error(`Table '${r}' already exists`);const s=j(e,"servername");if(!this._foreignServers.has(s))throw new Error(`Foreign server '${s}' does not exist`);const o=new Map,i=P(g(t,"tableElts"));for(const u of i){const h=w(g(u,"ColumnDef")??u),f=this._parseColumnDef(h);o.set(f.name,f)}const a={},l=P(g(e,"options"));for(const u of l){const h=w(g(u,"DefElem")??u),f=j(h,"defname"),d=w(g(h,"arg")),p=j(d,"sval")||j(w(g(d,"String")??{}),"sval");f&&(a[f]=p)}return this._foreignTables.set(r,{name:r,serverName:s,columns:o,options:a}),null}_compileDropForeignServer(e){const t=P(g(e,"objects")),n=g(e,"missing_ok")===!0;for(const r of t){let s;if(Array.isArray(r)){const o=r;s=J(o[o.length-1])}else s=J(r);if(this._foreignServers.has(s)){for(const o of this._foreignTables.values())if(o.serverName===s)throw new Error(`Cannot drop server '${s}': foreign table '${o.name}' depends on it`);this._foreignServers.delete(s)}else if(!n)throw new Error(`Foreign server '${s}' does not exist`)}return null}_compileDropForeignTable(e){const t=P(g(e,"objects")),n=g(e,"missing_ok")===!0;for(const r of t){const s=P(r);let o;if(s.length>0?o=J(s[s.length-1]):o=J(r),!!o){if(this._foreignTables.has(o))this._foreignTables.delete(o);else if(!n)throw new Error(`Foreign table '${o}' does not exist`)}}return null}_compileCreateView(e){const t=w(g(e,"view")),n=ae(t);if(this._tables.has(n))throw new Error(`"${n}" already exists as a table`);if(this._views.has(n))throw new Error(`View "${n}" already exists`);const r=w(g(e,"query")),s=w(g(r,"SelectStmt")??r);return this._views.set(n,s),null}_compileCreateIndex(e){return null}_compileAlterTable(e){const t=w(g(e,"relation")),n=ae(t),r=this._tables.get(n);if(!r)throw new Error(`Table "${n}" does not exist`);const s=P(g(e,"cmds"));for(const o of s){const i=w(g(o,"AlterTableCmd")??o),a=g(i,"subtype"),l=typeof a=="string"?a:"";if(l==="AT_AddColumn"||a===0||a===14){const u=w(g(i,"def")),h=w(g(u,"ColumnDef")??u),f=this._parseColumnDef(h);if(r.columns.has(f.name))throw new Error(`Column "${f.name}" already exists in table "${n}"`);r.columns.set(f.name,f)}else if(l==="AT_DropColumn"||a===10||a===12){const u=j(i,"name"),h=g(i,"missing_ok")===!0;if(!r.columns.has(u)){if(h)continue;throw new Error(`Column "${u}" does not exist in table "${n}"`)}r.columns.delete(u);for(const f of r.documentStore.docIds){const d=r.documentStore.get(f);d&&u in d&&(Reflect.deleteProperty(d,u),r.documentStore.put(f,d))}}else if(l==="AT_ColumnDefault"||a===5||a===6){const u=j(i,"name");if(!r.columns.has(u))throw new Error(`Column "${u}" does not exist in table "${n}"`);const h=g(i,"def"),f=r.columns.get(u);if(h!=null){const p=new ie().evaluate(w(h),{});r.columns.set(u,Ie(f.name,f.typeName,{...f,defaultValue:p}))}else r.columns.set(u,Ie(f.name,f.typeName,{...f,defaultValue:null}))}else if(l==="AT_SetNotNull"||a===7||a===9){const u=j(i,"name");if(!r.columns.has(u))throw new Error(`Column "${u}" does not exist in table "${n}"`);for(const f of r.documentStore.docIds){const d=r.documentStore.get(f);if(d){const p=d[u];if(p==null)throw new Error(`Column "${u}" contains NULL values; cannot set NOT NULL`)}}const h=r.columns.get(u);r.columns.set(u,Ie(h.name,h.typeName,{...h,notNull:!0}))}else if(l==="AT_DropNotNull"||a===6||a===8){const u=j(i,"name");if(!r.columns.has(u))throw new Error(`Column "${u}" does not exist in table "${n}"`);const h=r.columns.get(u);r.columns.set(u,Ie(h.name,h.typeName,{...h,notNull:!1}))}else if(l==="AT_AlterColumnType"||a===25||a===28){const u=j(i,"name");if(!r.columns.has(u))throw new Error(`Column "${u}" does not exist in table "${n}"`);const h=w(g(i,"def")),f=w(g(h,"ColumnDef")??h),d=w(g(f,"typeName")),p=[];for(const x of P(g(d,"names"))){const v=J(x);v&&v!=="pg_catalog"&&p.push(v)}const[m,_]=p.length>0?xr(p):["text","string"],y=r.columns.get(u);r.columns.set(u,Ie(u,m,{pythonType:_,primaryKey:y.primaryKey,notNull:y.notNull,autoIncrement:y.autoIncrement,defaultValue:y.defaultValue,vectorDimensions:y.vectorDimensions,unique:y.unique,numericPrecision:y.numericPrecision,numericScale:y.numericScale}));for(const x of Array.from(r.documentStore.docIds)){const v=r.documentStore.get(x);if(v&&v[u]!==null&&v[u]!==void 0){let E=v[u];_==="number"?(E=Number(E),isNaN(E)&&(E=v[u])):_==="string"?E=String(E):_==="boolean"&&(E=!!E),v[u]=E,r.documentStore.put(x,v)}}}else throw new Error(`Unsupported ALTER TABLE subcommand: ${String(a)}`)}return null}_compileRename(e){const t=g(e,"renameType"),n=typeof t=="string"?t:"";if(n==="OBJECT_TABLE"||t===36||t===42){const r=w(g(e,"relation")),s=ae(r),o=j(e,"newname"),i=this._tables.get(s);if(!i)throw new Error(`Table "${s}" does not exist`);if(this._tables.has(o))throw new Error(`Table "${o}" already exists`);return this._tables.delete(s),this._tables.set(o,i),null}if(n==="OBJECT_COLUMN"||t===8||t===9){const r=w(g(e,"relation")),s=ae(r),o=this._tables.get(s);if(!o)throw new Error(`Table "${s}" does not exist`);const i=j(e,"subname"),a=j(e,"newname");if(!o.columns.has(i))throw new Error(`Column "${i}" does not exist in table "${s}"`);if(o.columns.has(a))throw new Error(`Column "${a}" already exists in table "${s}"`);const l=[...o.columns.entries()];o.columns.clear();for(const[u,h]of l)if(u===i){const f=Ie(a,h.typeName,{...h});o.columns.set(a,f)}else o.columns.set(u,h);for(const u of o.documentStore.docIds){const h=o.documentStore.get(u);h&&i in h&&(h[a]=h[i],Reflect.deleteProperty(h,i),o.documentStore.put(u,h))}return null}throw new Error(`Unsupported RENAME type: ${String(t)}`)}_compileTruncate(e){const t=P(g(e,"relations"));for(const n of t){const r=w(g(n,"RangeVar")??n),s=ae(r),o=this._tables.get(s);if(!o)throw new Error(`Table "${s}" does not exist`);o.documentStore.clear(),o.invertedIndex.clear();for(const[,i]of o.vectorIndexes)i.clear();for(const[,i]of o.spatialIndexes)i.clear();o._nextDocId=1;for(const i of o.columns.values())if(i.autoIncrement){const a=`${s}_${i.name}_seq`,l=this._sequences.get(a);l&&(l.current=(l.start??1)-l.increment)}}return null}_compileInsert(e,t){const n=w(g(e,"relation")),r=ae(n),s=this._tables.get(r);if(!s)throw new Error(`Table "${r}" does not exist`);const o=P(g(e,"cols"));let i;o.length>0?i=o.map(S=>{const N=w(g(S,"ResTarget")??S);return j(N,"name")}):i=s.columnNames;const a=w(g(e,"selectStmt")),l=w(g(a,"SelectStmt")??a),u=P(g(l,"valuesLists")),h=new ie({params:t,sequences:this._sequences,subqueryExecutor:this._makeSubqueryExecutor(t)}),f=[];if(u.length===0){const S=this._compileSelect(l,t);for(const N of S.rows){const A={};for(let O=0;O<i.length;O++)O<S.columns.length&&(A[i[O]]=N[S.columns[O]]??null);f.push(A)}}else for(const S of u){const N=w(g(S,"List")),A=P(g(N,"items")??S);if(A.length!==i.length)throw new Error(`VALUES has ${String(A.length)} columns but ${String(i.length)} were specified`);const O={};for(let R=0;R<i.length;R++)O[i[R]]=yi(A[R],t,h);f.push(O)}const d=g(e,"onConflictClause");let p=[],m=null,_=[];if(d!=null){const S=w(d),N=w(g(S,"infer"));p=P(g(N,"indexElems")).map(O=>{const R=w(g(O,"IndexElem")??O);return j(R,"name")}),m=g(S,"action"),_=P(g(S,"targetList"))}const y=new Map;if(p.length>0)for(const S of s.documentStore.docIds){const N=s.documentStore.get(S);if(N!==null){const A=p.map(O=>JSON.stringify(N[O])).join("\0");y.set(A,S)}}const x=P(g(e,"returningList")),v=x.length>0,E=[];let I=0;for(const S of f){if(p.length>0&&d!==null){const A=p.map(R=>JSON.stringify(S[R])).join("\0"),O=y.get(A);if(O!==void 0){if(m===1||m==="ONCONFLICT_NOTHING")continue;this._doConflictUpdate(s,O,S,_,h);const R=s.documentStore.get(O);if(R!==null){const T=p.map(F=>JSON.stringify(R[F])).join("\0");T!==A&&(y.delete(A),y.set(T,O))}v&&R!==null&&E.push(this._evaluateReturning(x,R,h,s)),I++;continue}}const[N]=s.insert(S);if(I++,p.length>0){const A=p.map(O=>JSON.stringify(S[O])).join("\0");y.set(A,N)}if(v){const A=s.documentStore.get(N);A!==null&&E.push(this._evaluateReturning(x,A,h,s))}}return v?{columns:this._extractReturningColumns(x,s),rows:E}:{columns:["inserted"],rows:[{inserted:I}]}}_doConflictUpdate(e,t,n,r,s){const o=e.documentStore.get(t);if(o===null)return;const i={...o},a={...o};for(const[u,h]of Object.entries(n))a[`excluded.${u}`]=h;for(const u of r){const h=w(g(u,"ResTarget")??u),f=j(h,"name"),d=g(h,"val");if(d!=null){const p=s.evaluate(w(d),a);p!=null?i[f]=p:Reflect.deleteProperty(i,f)}}e.invertedIndex.removeDocument(t),e.documentStore.put(t,i);const l={};for(const[u,h]of Object.entries(i))typeof h=="string"&&(l[u]=h);Object.keys(l).length>0&&e.invertedIndex.addDocument(t,l)}_compileUpdate(e,t){const n=w(g(e,"relation")),r=ae(n),s=this._tables.get(r);if(!s)throw new Error(`Table "${r}" does not exist`);if(P(g(e,"fromClause")).length>0)return this._compileUpdateFrom(e,s,t);const i=g(e,"whereClause"),a=P(g(e,"targetList")),l=P(g(e,"returningList")),u=l.length>0,h=[],f=new ie({params:t,sequences:this._sequences,outerRow:this._correlatedOuterRow??void 0,subqueryExecutor:this._makeSubqueryExecutor(t)}),d=[];for(const m of a){const _=w(g(m,"ResTarget")??m),y=j(_,"name");if(!s.columns.has(y))throw new Error(`Unknown column "${y}" for table "${r}"`);d.push([y,w(g(_,"val"))])}let p=0;for(const[m,_]of s.documentStore.iterAll()){if(i!=null&&f.evaluate(w(i),_)!==!0)continue;const y={..._};for(const[v,E]of d){const I=f.evaluate(E,_),S=s.columns.get(v);if(I!=null)y[v]=I;else{if(S&&S.notNull)throw new Error(`NOT NULL constraint violated: column "${v}" in table "${r}"`);Reflect.deleteProperty(y,v)}}for(const v of s.fkUpdateValidators)v(_,y);s.invertedIndex.removeDocument(m),s.documentStore.put(m,y);const x={};for(const[v,E]of Object.entries(y))typeof E=="string"&&(x[v]=E);Object.keys(x).length>0&&s.invertedIndex.addDocument(m,x),u&&h.push(this._evaluateReturning(l,y,f,s)),p++}return u?{columns:this._extractReturningColumns(l,s),rows:h}:{columns:["updated"],rows:[{updated:p}]}}_compileUpdateFrom(e,t,n){const r=t.name,s=w(g(e,"relation")),o=Ue(s)??r,i=P(g(e,"fromClause")),a=g(e,"whereClause"),l=P(g(e,"targetList")),u=P(g(e,"returningList")),h=u.length>0,f=[],d=new ie({params:n,sequences:this._sequences,outerRow:this._correlatedOuterRow??void 0,subqueryExecutor:this._makeSubqueryExecutor(n)}),p=[];for(const y of l){const x=w(g(y,"ResTarget")??y),v=j(x,"name");if(!t.columns.has(v))throw new Error(`Unknown column "${v}" for table "${r}"`);p.push([v,w(g(x,"val"))])}const m=this._resolveFrom(i,n);let _=0;for(const[y,x]of t.documentStore.iterAll()){const v={...x};for(const[E,I]of Object.entries(x))v[`${o}.${E}`]=I;for(const E of m){const I={...v,...E};if(a!=null&&!d.evaluate(w(a),I))continue;const S={...x};for(const[A,O]of p){const R=d.evaluate(O,I),T=t.columns.get(A);if(R!=null)S[A]=R;else{if(T&&T.notNull)throw new Error(`NOT NULL constraint violated: column "${A}" in table "${r}"`);Reflect.deleteProperty(S,A)}}t.invertedIndex.removeDocument(y),t.documentStore.put(y,S);const N={};for(const[A,O]of Object.entries(S))typeof O=="string"&&(N[A]=O);Object.keys(N).length>0&&t.invertedIndex.addDocument(y,N),h&&f.push(this._evaluateReturning(u,S,d,t)),_++;break}}return h?{columns:this._extractReturningColumns(u,t),rows:f}:{columns:["updated"],rows:[{updated:_}]}}_compileDelete(e,t){const n=w(g(e,"relation")),r=ae(n),s=this._tables.get(r);if(!s)throw new Error(`Table "${r}" does not exist`);if(P(g(e,"usingClause")).length>0)return this._compileDeleteUsing(e,s,t);const i=g(e,"whereClause"),a=P(g(e,"returningList")),l=a.length>0,u=[],h=new ie({params:t,outerRow:this._correlatedOuterRow??void 0,subqueryExecutor:this._makeSubqueryExecutor(t)}),f=[];for(const[d,p]of s.documentStore.iterAll())i!=null&&h.evaluate(w(i),p)!==!0||(l&&u.push(this._evaluateReturning(a,p,h,s)),f.push(d));for(const d of f)for(const p of s.fkDeleteValidators)p(d);for(const d of f)s.invertedIndex.removeDocument(d),s.documentStore.delete(d);return l?{columns:this._extractReturningColumns(a,s),rows:u}:{columns:["deleted"],rows:[{deleted:f.length}]}}_compileDeleteUsing(e,t,n){const r=t.name,s=w(g(e,"relation")),o=Ue(s)??r,i=P(g(e,"usingClause")),a=g(e,"whereClause"),l=P(g(e,"returningList")),u=l.length>0,h=[],f=new ie({params:n,outerRow:this._correlatedOuterRow??void 0,subqueryExecutor:this._makeSubqueryExecutor(n)}),d=this._resolveFrom(i,n),p=[];for(const[m,_]of t.documentStore.iterAll()){const y={..._};for(const[x,v]of Object.entries(_))y[`${o}.${x}`]=v;for(const x of d){const v={...y,...x};if(!(a!=null&&!f.evaluate(w(a),v))){u&&h.push(this._evaluateReturning(l,_,f,t)),p.push(m);break}}}for(const m of p)t.invertedIndex.removeDocument(m),t.documentStore.delete(m);return u?{columns:this._extractReturningColumns(l,t),rows:h}:{columns:["deleted"],rows:[{deleted:p.length}]}}_compileTransaction(e){return g(e,"kind"),this._transactionActive=!this._transactionActive,null}_compilePrepare(e){const t=j(e,"name");if(this._prepared.has(t))throw new Error(`Prepared statement "${t}" already exists`);const n=w(g(e,"query"));return this._prepared.set(t,n),null}_compileExecute(e,t){const n=j(e,"name"),r=this._prepared.get(n);if(r===void 0)throw new Error(`Prepared statement "${n}" does not exist`);const s=P(g(e,"params")),o=new ie({params:t}),i=[];for(const l of s)i.push(o.evaluate(l,{}));const a=this._params;this._params=i;try{return this._dispatchStatement(r,i)}finally{this._params=a}}_compileDeallocate(e){const t=j(e,"name");if(!t)this._prepared.clear();else{if(!this._prepared.has(t))throw new Error(`Prepared statement "${t}" does not exist`);this._prepared.delete(t)}return null}_compileExplain(e,t){const n=w(g(e,"query")),r=w(g(n,"SelectStmt")??n),s=P(g(r,"fromClause"));let o=`${String(this._tables.size)} tables`;if(s.length>0){const a=s[0],l=w(g(a,"RangeVar")??a),u=ae(l);if(u){const h=this._tables.get(u);h&&(o=`table "${u}" (${String(h.rowCount)} rows)`)}}const i=`Seq Scan on ${o}`;return{columns:["QUERY PLAN"],rows:[{"QUERY PLAN":i}]}}_compileAnalyze(e){const t=e.rels;if(t&&t.length>0)for(const n of t){const r=n,o=(r.VacuumRelation??r).relation,i=o?o.relname:null;i&&this._tables.has(i)&&this._tables.get(i).analyze()}else for(const n of this._tables.values())n.analyze();return null}_compileSelect(e,t,n){const r=g(e,"withClause");let s=[];if(r!=null){const a=w(r),l=P(g(a,"ctes")),u=g(a,"recursive")===!0;s=this._materializeCTEs(l,t,u,e)}const o=this._correlatedOuterRow;this._correlatedOuterRow=n??null;const i=new Map(this._inlinedCTEs);try{return this._compileSelectBody(e,t)}finally{this._correlatedOuterRow=o;for(const a of s)this._inlinedCTEs.delete(a);this._inlinedCTEs=i;for(const a of s)this._tables.delete(a);for(const a of this._expandedViews)this._shadowedTables.has(a)?(this._tables.set(a,this._shadowedTables.get(a)),this._shadowedTables.delete(a)):this._tables.delete(a);this._expandedViews=[]}}_compileSelectBody(e,t){const n=P(g(e,"valuesLists"));if(n.length>0)return this._compileValues(n,t);const r=g(e,"op");if(r!=null&&r!==0&&r!=="SETOP_NONE")return this._compileSetOp(e,t);e=this._tryPredicatePushdown(e,t);const s=P(g(e,"fromClause")),o=g(e,"whereClause"),i=P(g(e,"targetList")),a=P(g(e,"groupClause")),l=g(e,"havingClause"),u=P(g(e,"sortClause")),h=g(e,"limitCount"),f=g(e,"limitOffset"),d=g(e,"distinctClause"),p=P(g(e,"windowClause")),m=new ie({params:t,sequences:this._sequences,outerRow:this._correlatedOuterRow??void 0,subqueryExecutor:this._makeSubqueryExecutor(t)});let _;if(s.length===0?_=[{}]:_=this._resolveFrom(s,t),o!=null){const S=w(o);if(le._containsUQAFunction(S)){const N=this._resolveFromTableName(s);if(N){const A=this._tables.get(N);if(A){const O=this._contextForTable(A),[R,T]=this._splitUQAConjuncts(S);let F=null;if(R&&(F=this._compileWhere(R,O)),F){const C=F.execute(O),V=[],Y=A.documentStore,oe=A.primaryKey;for(const xe of C){const ue=Y.get(xe.docId);if(!ue)continue;const ge={...ue,_score:xe.payload.score};oe&&(ge[oe]=xe.docId),ge._doc_id=xe.docId,V.push(ge)}_=V,T&&(_=_.filter(xe=>m.evaluate(w(T),xe)===!0))}}else _=_.filter(O=>m.evaluate(S,O)===!0)}else _=_.filter(A=>m.evaluate(S,A)===!0)}else _=_.filter(N=>m.evaluate(S,N)===!0)}const y=this._hasAggregates(i);a.length>0?_=this._applyGroupBy(_,a,i,l,m):y&&(_=this._applyGroupBy(_,[],i,l,m));const x=this._hasWindowFunctions(i);x&&(_=this._applyWindowFunctions(_,i,p,m));let v,E;a.length>0||y||x?(v=this._resolveSelectColumnNames(i,_),E=_):[v,E]=this._projectColumns(i,_,m);let I=E;if(d!=null&&(I=this._applyDistinct(I,v)),u.length>0&&(I=this._applyOrderBy(I,u,m,i)),f!=null){const S=Number(m.evaluate(w(f),{}));I=I.slice(S)}if(h!=null){const S=Number(m.evaluate(w(h),{}));I=I.slice(0,S)}return{columns:v,rows:I}}_materializeCTEs(e,t,n,r){const s=[];for(const o of e){const i=w(g(o,"CommonTableExpr")??o),a=j(i,"ctename"),l=w(g(i,"ctequery")),u=w(g(l,"SelectStmt")??l),h=g(u,"op");if(n&&h!==null&&h!==void 0&&h!==0&&h!=="SETOP_NONE")this._materializeRecursiveCTE(i,u,t);else if(this._countCTERefs(a,r)===1)this._inlinedCTEs.set(a,u);else{const p=this._compileSelect(u,t),m=this._resultToTable(a,p);this._tables.set(a,m)}s.push(a)}return s}_materializeRecursiveCTE(e,t,n){const r=j(e,"ctename"),s=g(t,"all")===!0,o=P(g(e,"aliascolnames")),i=o.length>0?o.map(x=>J(x)):null,a=w(g(t,"larg")),l=w(g(a,"SelectStmt")??a),u=this._compileSelect(l,n),h=u.columns;let f,d;if(i!==null){d=[];for(const x of u.rows){const v={};for(let E=0;E<i.length;E++)E<h.length&&(v[i[E]]=x[h[E]]??null);d.push(v)}f=i}else d=[...u.rows],f=h;let p=null;if(!s){p=new Set;const x=[];for(const v of d){const E=f.map(I=>JSON.stringify(v[I])).join("\0");p.has(E)||(p.add(E),x.push(v))}d=x}let m=[...d];for(let x=0;x<bi;x++){const v={columns:f,rows:m},E=this._resultToTable(r,v);this._tables.set(r,E);const I=w(g(t,"rarg")),S=w(g(I,"SelectStmt")??I),N=this._compileSelect(S,n),A=i??f,O=[];for(const T of N.rows){const F={};for(let C=0;C<A.length;C++)C<N.columns.length&&(F[A[C]]=T[N.columns[C]]??null);O.push(F)}if(O.length===0)break;let R=O;if(p!==null){R=[];for(const T of O){const F=f.map(C=>JSON.stringify(T[C])).join("\0");p.has(F)||(p.add(F),R.push(T))}if(R.length===0)break}d.push(...R),m=R}const _={columns:f,rows:d},y=this._resultToTable(r,_);this._tables.set(r,y)}_countCTERefs(e,t){if(t==null||typeof t!="object")return 0;if(Array.isArray(t)){let o=0;for(const i of t)o+=this._countCTERefs(e,i);return o}const n=t,r=g(n,"RangeVar");if(r!=null&&j(w(r),"relname")===e||j(n,"relname")===e)return 1;let s=0;for(const[o,i]of Object.entries(n))o!=="withClause"&&i!==null&&typeof i=="object"&&(s+=this._countCTERefs(e,i));return s}_resultToTable(e,t){const n=[];for(const s of t.columns){let o="text",i="string";for(const a of t.rows){const l=a[s];if(l!=null){typeof l=="boolean"?(o="text",i="string"):typeof l=="number"&&(Number.isInteger(l)?(o="integer",i="number"):(o="real",i="number"));break}}n.push(Ie(s,o,{pythonType:i}))}const r=new Ut(e,n);for(let s=0;s<t.rows.length;s++){const o=s+1,i={_id:o};Object.assign(i,t.rows[s]),r.documentStore.put(o,i)}return r}_compileSetOp(e,t){const n=g(e,"op"),r=w(g(e,"larg")),s=w(g(e,"rarg")),o=g(e,"all")===!0,i=w(g(r,"SelectStmt")??r),a=w(g(s,"SelectStmt")??s),l=this._compileSelect(i,t),u=this._compileSelect(a,t);if(l.columns.length!==u.columns.length)throw new Error(`Set operation column count mismatch: ${String(l.columns.length)} vs ${String(u.columns.length)}`);const h=l.columns,f=u.rows.map(y=>{const x={};for(let v=0;v<h.length;v++)x[h[v]]=y[u.columns[v]]??null;return x});let d;if(n===1||n==="SETOP_UNION")d=this._setUnion(l.rows,f,h,o);else if(n===2||n==="SETOP_INTERSECT")d=this._setIntersect(l.rows,f,h,o);else if(n===3||n==="SETOP_EXCEPT")d=this._setExcept(l.rows,f,h,o);else throw new Error(`Unsupported set operation: ${String(n)}`);const p=P(g(e,"sortClause"));if(p.length>0){const y=new ie({params:t}),x=P(g(i,"targetList"));d=this._applyOrderBy(d,p,y,x)}const m=g(e,"limitCount"),_=g(e,"limitOffset");if(_!=null){const y=new ie({params:t}),x=Number(y.evaluate(w(_),{}));d=d.slice(x)}if(m!=null){const y=new ie({params:t}),x=Number(y.evaluate(w(m),{}));d=d.slice(0,x)}return{columns:h,rows:d}}_setUnion(e,t,n,r){if(r)return[...e,...t];const s=new Set,o=[];for(const i of[...e,...t]){const a=n.map(l=>JSON.stringify(i[l])).join("\0");s.has(a)||(s.add(a),o.push(i))}return o}_setIntersect(e,t,n,r){if(r){const a=new Map;for(const u of t){const h=n.map(f=>JSON.stringify(u[f])).join("\0");a.set(h,(a.get(h)??0)+1)}const l=[];for(const u of e){const h=n.map(d=>JSON.stringify(u[d])).join("\0"),f=a.get(h)??0;f>0&&(l.push(u),a.set(h,f-1))}return l}const s=new Set(t.map(a=>n.map(l=>JSON.stringify(a[l])).join("\0"))),o=new Set,i=[];for(const a of e){const l=n.map(u=>JSON.stringify(a[u])).join("\0");s.has(l)&&!o.has(l)&&(o.add(l),i.push(a))}return i}_setExcept(e,t,n,r){if(r){const a=new Map;for(const u of t){const h=n.map(f=>JSON.stringify(u[f])).join("\0");a.set(h,(a.get(h)??0)+1)}const l=[];for(const u of e){const h=n.map(d=>JSON.stringify(u[d])).join("\0"),f=a.get(h)??0;f>0?a.set(h,f-1):l.push(u)}return l}const s=new Set(t.map(a=>n.map(l=>JSON.stringify(a[l])).join("\0"))),o=new Set,i=[];for(const a of e){const l=n.map(u=>JSON.stringify(a[u])).join("\0");!s.has(l)&&!o.has(l)&&(o.add(l),i.push(a))}return i}_compileValues(e,t){const n=new ie({params:t}),r=[];let s=0;for(const i of e){const a=w(g(i,"List")),l=P(g(a,"items")??i);s=Math.max(s,l.length);const u={};for(let h=0;h<l.length;h++){const f=`column${String(h+1)}`;u[f]=n.evaluate(l[h],{})}r.push(u)}const o=[];for(let i=0;i<s;i++)o.push(`column${String(i+1)}`);return{columns:o,rows:r}}_resolveFromTableName(e){if(e.length!==1)return null;const n=e[0].RangeVar;return n?n.relname??null:null}_resolveFrom(e,t){let n=null;for(const r of e){const s=g(r,"RangeSubselect");if(s!=null){const i=w(s);if(g(i,"lateral")===!0&&n!==null){n=this._resolveLateralJoin(n,i,t);continue}}const o=this._resolveFromItem(r,t);n===null?n=o:n=this._crossJoin(n,o)}return n??[{}]}_resolveFromItem(e,t){const n=g(e,"RangeVar");if(n!=null){const i=w(n),a=ae(i),l=Ue(i),u=pi(i);if(u==="information_schema")return this._buildInformationSchemaTable(a,l??a);if(u==="pg_catalog")return this._buildPgCatalogTable(a,l??a);const h=this._views.get(a);if(h!==void 0){const m=this._compileSelect(h,t);return this._applyAlias(m.rows,l??a)}const f=this._inlinedCTEs.get(a);if(f!==void 0){this._inlinedCTEs.delete(a);const m=this._compileSelect(f,t),_=this._resultToTable(a,m);this._tables.set(a,_),this._expandedViews.push(a);const y=[];for(const[,x]of _.documentStore.iterAll())y.push({...x});return this._applyAlias(y,l??a)}const d=this._tables.get(a);if(!d)throw new Error(`Table "${a}" does not exist`);const p=[];for(const[,m]of d.documentStore.iterAll())p.push({...m});return this._applyAlias(p,l??a)}const r=g(e,"JoinExpr");if(r!=null)return this._resolveJoin(w(r),t);const s=g(e,"RangeSubselect");if(s!=null){const i=w(s),a=w(g(i,"subquery")),l=w(g(a,"SelectStmt")??a),u=Ue(i),h=this._compileSelect(l,t);return this._applyAlias(h.rows,u)}const o=g(e,"RangeFunction");if(o!=null)return this._compileFromFunction(w(o),t);throw new Error("Unsupported FROM clause item")}_applyAlias(e,t){return t===null?e:e.map(n=>{const r={...n};for(const[s,o]of Object.entries(n))s.includes(".")||(r[`${t}.${s}`]=o);return r})}_resolveLateralJoin(e,t,n){const r=w(g(t,"subquery")),s=w(g(r,"SelectStmt")??r),o=Ue(t)??"_lateral",i=[];for(const a of e){const l=this._compileSelect(s,n,a);for(const u of l.rows){const h={};for(const[f,d]of Object.entries(u))h[f]=d,h[`${o}.${f}`]=d;i.push({...a,...h})}}return i}_compileFromFunction(e,t){const n=P(g(e,"functions"));if(n.length===0)throw new Error("Empty RangeFunction");const r=n[0],s=g(r,"List"),o=s!=null?P(g(w(s),"items")):P(r);if(o.length===0)throw new Error("Empty function list in RangeFunction");const i=w(g(o[0],"FuncCall")??o[0]),a=P(g(i,"funcname")),l=J(a[a.length-1]).toLowerCase(),u=P(g(i,"args")),h=Ue(e),f=w(g(e,"alias")),d=P(g(f,"colnames")),p=d.length>0?J(d[0]):null,m=new ie({params:t});if(l==="generate_series")return this._buildGenerateSeries(u,m,h??"generate_series",p??"generate_series");if(l==="unnest")return this._buildUnnest(u,m,h??"unnest",p??"unnest");if(l==="json_each"||l==="jsonb_each"||l==="json_each_text"||l==="jsonb_each_text")return this._buildJSONEach(u,m,h??l,l.endsWith("_text"));if(l==="json_array_elements"||l==="jsonb_array_elements"||l==="json_array_elements_text"||l==="jsonb_array_elements_text")return this._buildJSONArrayElements(u,m,h??l,l.endsWith("_text"));if(l==="regexp_split_to_table")return this._buildRegexpSplitToTable(u,m,h??"regexp_split_to_table",p??"regexp_split_to_table");if(l==="create_graph")return this._buildCreateGraph(u,m);if(l==="drop_graph")return this._buildDropGraph(u,m);if(l==="create_analyzer")return this._buildCreateAnalyzer(u,m);if(l==="drop_analyzer")return this._buildDropAnalyzer(u,m);if(l==="list_analyzers")return this._buildListAnalyzers();if(l==="set_table_analyzer")return this._buildSetTableAnalyzer(u,m);if(l==="graph_add_vertex")return this._buildGraphAddVertex(u,m);if(l==="graph_add_edge")return this._buildGraphAddEdge(u,m);if(l==="build_grid_graph")return this._buildGridGraph(u,m);if(l==="cypher")return this._buildCypherFrom(u,m);throw new Error(`Unsupported FROM-clause function: ${l}`)}_buildCreateGraph(e,t){if(!e.length)throw new Error("create_graph() requires a graph name");const n=String(t.evaluate(e[0],{}));return this._engine.createGraph(n),[{create_graph:`graph '${n}' created`}]}_buildDropGraph(e,t){if(!e.length)throw new Error("drop_graph() requires a graph name");const n=String(t.evaluate(e[0],{}));return this._engine.dropGraph(n),[{drop_graph:`graph '${n}' dropped`}]}_buildCreateAnalyzer(e,t){if(e.length<2)throw new Error("create_analyzer() requires (name, config_json)");const n=String(t.evaluate(e[0],{})),r=JSON.parse(String(t.evaluate(e[1],{})));return this._engine.createAnalyzer(n,r),[{create_analyzer:`analyzer '${n}' created`}]}_buildDropAnalyzer(e,t){if(!e.length)throw new Error("drop_analyzer() requires a name");const n=String(t.evaluate(e[0],{}));return this._engine.dropAnalyzer(n),[{drop_analyzer:`analyzer '${n}' dropped`}]}_buildListAnalyzers(){return xs().map(e=>({analyzer_name:e}))}_buildSetTableAnalyzer(e,t){if(e.length<3)throw new Error("set_table_analyzer(table, field, analyzer[, phase])");const n=String(t.evaluate(e[0],{})),r=String(t.evaluate(e[1],{})),s=String(t.evaluate(e[2],{})),o=e.length>3?String(t.evaluate(e[3],{})):"both";return this._engine.setTableAnalyzer(n,r,s,o),[{set_table_analyzer:`analyzer '${s}' assigned to ${n}.${r}`}]}_buildGraphAddVertex(e,t){if(e.length<3)throw new Error("graph_add_vertex(id, label, table[, props])");const n=Number(t.evaluate(e[0],{})),r=String(t.evaluate(e[1],{})),s=String(t.evaluate(e[2],{})),o={};if(e.length>3)for(const i of String(t.evaluate(e[3],{})).split(",")){const[a,l]=i.trim().split("=",2);a&&l&&(o[a.trim()]=isNaN(Number(l.trim()))?l.trim():Number(l.trim()))}return this._engine.addGraphVertex(an(n,r,o),{table:s}),[{result:`vertex ${String(n)} added to ${s}`}]}_buildGraphAddEdge(e,t){if(e.length<5)throw new Error("graph_add_edge(eid, src, tgt, label, table[, props])");const n=Number(t.evaluate(e[0],{})),r=Number(t.evaluate(e[1],{})),s=Number(t.evaluate(e[2],{})),o=String(t.evaluate(e[3],{})),i=String(t.evaluate(e[4],{})),a={};if(e.length>5)for(const l of String(t.evaluate(e[5],{})).split(",")){const[u,h]=l.trim().split("=",2);u&&h&&(a[u.trim()]=isNaN(Number(h.trim()))?h.trim():Number(h.trim()))}return this._engine.addGraphEdge(gt(n,r,s,o,a),{table:i}),[{result:`edge ${String(n)} added to ${i}`}]}_buildGridGraph(e,t){if(e.length<4)throw new Error("build_grid_graph(table, rows, cols, label)");const n=String(t.evaluate(e[0],{})),r=Number(t.evaluate(e[1],{})),s=Number(t.evaluate(e[2],{})),o=String(t.evaluate(e[3],{}));let i=1;for(let a=0;a<r;a++)for(let l=0;l<s;l++){const u=a*s+l+1;l<s-1&&this._engine.addGraphEdge(gt(i++,u,u+1,o),{table:n}),a<r-1&&this._engine.addGraphEdge(gt(i++,u,u+s,o),{table:n})}return[{table_name:n,rows:r,cols:s,edges:i-1}]}_buildCypherFrom(e,t){if(e.length<2)throw new Error("cypher() requires (graph_name, query)");const n=String(t.evaluate(e[0],{})),r=String(t.evaluate(e[1],{})),s=this._engine.getGraph(n),o={};for(let a=0;a<this._params.length;a++)o[String(a+1)]=this._params[a];return new yo(s,n,o).executeRows(r,o)}_buildGenerateSeries(e,t,n,r){if(e.length<2)throw new Error("generate_series requires at least 2 arguments");const s=Number(t.evaluate(e[0],{})),o=Number(t.evaluate(e[1],{})),i=e.length>2?Number(t.evaluate(e[2],{})):1;if(i===0)throw new Error("generate_series step cannot be zero");const a=[];if(i>0)for(let l=s;l<=o;l+=i){const u={[r]:l};u[`${n}.${r}`]=l,a.push(u)}else for(let l=s;l>=o;l+=i){const u={[r]:l};u[`${n}.${r}`]=l,a.push(u)}return a}_buildUnnest(e,t,n,r){if(e.length<1)throw new Error("unnest requires at least 1 argument");let s=t.evaluate(e[0],{});Array.isArray(s)||(s=[s]);const o=[];for(const i of s){const a={[r]:i};a[`${n}.${r}`]=i,o.push(a)}return o}_buildJSONEach(e,t,n,r){if(e.length<1)throw new Error("json_each requires at least 1 argument");let s=t.evaluate(e[0],{});if(typeof s=="string"&&(s=JSON.parse(s)),s===null||typeof s!="object"||Array.isArray(s))throw new Error("json_each expects a JSON object");const o=[];for(const[i,a]of Object.entries(s)){const l=r?String(a):a,u={key:i,value:l};u[`${n}.key`]=i,u[`${n}.value`]=l,o.push(u)}return o}_buildJSONArrayElements(e,t,n,r){if(e.length<1)throw new Error("json_array_elements requires at least 1 argument");let s=t.evaluate(e[0],{});if(typeof s=="string"&&(s=JSON.parse(s)),!Array.isArray(s))throw new Error("json_array_elements expects a JSON array");const o=[];for(const i of s){const a=r?String(i):i,l={value:a};l[`${n}.value`]=a,o.push(l)}return o}_buildRegexpSplitToTable(e,t,n,r){if(e.length<2)throw new Error("regexp_split_to_table requires at least 2 arguments");const s=String(t.evaluate(e[0],{})),o=String(t.evaluate(e[1],{})),i=e.length>2?String(t.evaluate(e[2],{})):"",a=new RegExp(o,i.includes("g")?i:i+"g"),l=s.split(a),u=[];for(const h of l){const f={[r]:h};f[`${n}.${r}`]=h,u.push(f)}return u}_crossJoin(e,t){const n=[];for(const r of e)for(const s of t)n.push({...r,...s});return n}_resolveJoin(e,t){const n=g(e,"jointype"),r=w(g(e,"larg")),s=w(g(e,"rarg")),o=g(e,"quals"),i=g(s,"RangeSubselect");if(i!=null){const _=w(i);if(g(_,"lateral")===!0){const y=this._resolveFromItem(r,t);return this._resolveLateralJoin(y,_,t)}}const a=this._resolveFromItem(r,t),l=this._resolveFromItem(s,t),u=new ie({params:t});if(n===5||n==="JOIN_CROSS")return this._crossJoin(a,l);if((n===0||n==="JOIN_INNER")&&o==null)return this._crossJoin(a,l);const h=[],f=n===1||n==="JOIN_LEFT",d=n===3||n==="JOIN_RIGHT",p=n===2||n==="JOIN_FULL",m=new Set;for(const _ of a){let y=!1;for(let x=0;x<l.length;x++){const v=l[x],E={..._,...v};o!=null&&u.evaluate(w(o),E)!==!0||(h.push(E),y=!0,m.add(x))}if(!y&&(f||p)){const x={..._};if(l.length>0)for(const v of Object.keys(l[0]))v in x||(x[v]=null);h.push(x)}}if(d||p){for(let _=0;_<l.length;_++)if(!m.has(_)){const y={};if(a.length>0)for(const x of Object.keys(a[0]))y[x]=null;for(const[x,v]of Object.entries(l[_]))y[x]=v;h.push(y)}}return h}_buildInformationSchemaTable(e,t){if(e==="tables"){const n=[];for(const r of[...this._tables.keys()].sort())n.push({table_catalog:"",table_schema:"public",table_name:r,table_type:"BASE TABLE"});for(const r of[...this._foreignTables.keys()].sort())n.push({table_catalog:"",table_schema:"public",table_name:r,table_type:"FOREIGN TABLE"});for(const r of[...this._views.keys()].sort())n.push({table_catalog:"",table_schema:"public",table_name:r,table_type:"VIEW"});return this._applyAlias(n,t)}if(e==="columns"){const n={int2:"smallint",int4:"integer",int8:"bigint",float4:"real",float8:"double precision",bool:"boolean"},r=[];for(const s of[...this._tables.keys()].sort()){const o=this._tables.get(s);let i=1;for(const[a,l]of o.columns){const u=n[l.typeName]??l.typeName;r.push({table_catalog:"",table_schema:"public",table_name:s,column_name:a,ordinal_position:i,data_type:u,is_nullable:l.notNull?"NO":"YES"}),i++}}for(const s of[...this._foreignTables.keys()].sort()){const o=this._foreignTables.get(s);let i=1;for(const[a,l]of o.columns){const u=n[l.typeName]??l.typeName;r.push({table_catalog:"",table_schema:"public",table_name:s,column_name:a,ordinal_position:i,data_type:u,is_nullable:l.notNull?"NO":"YES"}),i++}}return this._applyAlias(r,t)}throw new Error(`Unknown information_schema view: "${e}"`)}_buildPgCatalogTable(e,t){if(e==="pg_tables"){const n=[];for(const r of[...this._tables.keys()].sort())n.push({schemaname:"public",tablename:r,tableowner:"",tablespace:""});return this._applyAlias(n,t)}if(e==="pg_views"){const n=[];for(const r of[...this._views.keys()].sort())n.push({schemaname:"public",viewname:r,viewowner:"",definition:""});return this._applyAlias(n,t)}if(e==="pg_indexes"){const n=[],r=this._engine,s=r!==null?r._indexManager:void 0;if(s!==void 0){const o=s._indexes;if(o!==void 0)for(const i of o.values()){const a=i.indexDef;if(a!==void 0){const l=a.tableName??"",u=a.name??"",h=a.columns??[];n.push({schemaname:"public",tablename:l,indexname:u,tablespace:"",indexdef:`CREATE INDEX ${u} ON ${l} (${h.join(", ")})`})}}}return this._applyAlias(n,t)}if(e==="pg_type"){const r=[[16,"boolean",11,1,"b","B"],[17,"bytea",11,-1,"b","U"],[20,"bigint",11,8,"b","N"],[21,"smallint",11,2,"b","N"],[23,"integer",11,4,"b","N"],[25,"text",11,-1,"b","S"],[114,"json",11,-1,"b","U"],[142,"xml",11,-1,"b","U"],[700,"real",11,4,"b","N"],[701,"float8",11,8,"b","N"],[1043,"varchar",11,-1,"b","S"],[1082,"date",11,4,"b","D"],[1083,"time",11,8,"b","D"],[1114,"timestamp",11,8,"b","D"],[1184,"timestamptz",11,8,"b","D"],[1186,"interval",11,16,"b","T"],[1700,"numeric",11,-1,"b","N"],[2950,"uuid",11,16,"b","U"],[3802,"jsonb",11,-1,"b","U"],[16385,"vector",11,-1,"b","U"]].map(([s,o,i,a,l,u])=>({oid:s,typname:o,typnamespace:i,typlen:a,typtype:l,typcategory:u}));return this._applyAlias(r,t)}throw new Error(`Unknown pg_catalog view: "${e}"`)}_projectColumns(e,t,n){if(e.length===0){if(t.length===0)return[[],[]];const i=Object.keys(t[0]).filter(a=>!a.includes("."));return[i,t.map(a=>{const l={};for(const u of i)l[u]=a[u];return l})]}const r=[],s=[];for(const i of e){const a=w(g(i,"ResTarget")??i),l=g(a,"val"),u=j(a,"name");if(l!=null){const h=w(l);if(tt(h)){const d=g(h,"ColumnRef");if(d!=null){const p=P(g(w(d),"fields"));if(p.length>=2){const m=J(p[0]);if(t.length>0)for(const _ of Object.keys(t[0])){const y=`${m}.`;if(_.startsWith(y)){const x=_.slice(y.length);x.includes(".")||(r.push(x),s.push({name:x,node:null}))}}continue}}if(t.length>0)for(const p of Object.keys(t[0]))p.includes(".")||(r.push(p),s.push({name:p,node:null}));continue}let f=u;f||(f=this._deriveColumnName(h)),r.push(f),s.push({name:f,node:h})}}const o=[];for(const i of t){const a={};for(const l of s)l.node===null?a[l.name]=i[l.name]:a[l.name]=n.evaluate(l.node,i);o.push(a)}return[r,o]}_deriveColumnName(e){if(X(e))try{return B(e)}catch{}if(Q(e)){const t=ce(e);if(et.has(t)){const n=ve(e);if(nt(e)||n.length===0)return t;try{const r=B(n[0]);return`${t}_${r}`}catch{return t}}return t}if(rn(e)){const t=w(g(e,"TypeCast")),n=w(g(t,"arg"));if(X(n))try{return B(n)}catch{}}return nn(e),"?column?"}_resolveSelectColumnNames(e,t){if(e.length===0)return t.length===0?[]:Object.keys(t[0]).filter(r=>!r.includes("."));const n=[];for(const r of e){const s=w(g(r,"ResTarget")??r),o=g(s,"val"),i=j(s,"name");if(o!=null){const a=w(o);if(tt(a)){if(t.length>0)for(const l of Object.keys(t[0]))l.includes(".")||n.push(l);continue}n.push(i||this._deriveColumnName(a))}}return n}_hasAggregates(e){for(const t of e){const n=w(g(t,"ResTarget")??t),r=g(n,"val");if(r!=null&&this._containsAggregate(w(r)))return!0}return!1}_containsAggregate(e){if(Q(e)){const t=ce(e);if(et.has(t)&&!rt(e))return!0}if(nn(e)||g(e,"SubLink")!==null)return!1;for(const[,t]of Object.entries(e))if(t!==null&&typeof t=="object"){if(Array.isArray(t)){for(const n of t)if(n!==null&&typeof n=="object"&&this._containsAggregate(n))return!0}else if(this._containsAggregate(t))return!0}return!1}_applyGroupBy(e,t,n,r,s){const o=new Map;if(t.length===0)o.set("__all__",e);else for(const l of e){const u=[];for(const d of t){const p=s.evaluate(d,l);u.push(p)}const h=JSON.stringify(u);let f=o.get(h);f||(f=[],o.set(h,f)),f.push(l)}const i=[],a=[];for(const[,l]of o){const u=this._computeAggregates(l,n,s);i.push(u),a.push(l)}if(r!=null){const l=[];for(let u=0;u<i.length;u++){const h=i[u],f=a[u],d=this._resolveHavingAggregates(w(r),f,h,s);s.evaluate(w(r),d)===!0&&l.push(h)}return l}return i}_computeAggregates(e,t,n){const r={},s=e[0];for(const o of t){const i=w(g(o,"ResTarget")??o),a=g(i,"val"),l=j(i,"name");if(a==null)continue;const u=w(a);if(Q(u)){const h=ce(u),f=nt(u),d=ve(u),p=Qr(u);if(rt(u)){const v=l||h;r[v]=n.evaluate(u,s);continue}if(!et.has(h)){const v={...s};this._collectHavingAggregates(u,e,v,n);const E=l||this._deriveColumnName(u);r[E]=n.evaluate(u,v);continue}let _=l;if(!_)if(f||d.length===0)_=h;else try{const v=B(d[0]);_=`${h}_${v}`}catch{_=h}let y;const x=()=>{let v=[];for(const E of e){const I=n.evaluate(d[0],E);I!=null&&v.push(I)}if(p){const E=new Set,I=[];for(const S of v){const N=JSON.stringify(S);E.has(N)||(E.add(N),I.push(S))}v=I}return v};switch(h){case"count":f?y=e.length:y=x().length;break;case"sum":{const v=x();y=v.length>0?v.reduce((E,I)=>E+Number(I),0):null;break}case"avg":{const v=x();v.length>0?y=v.reduce((I,S)=>I+Number(S),0)/v.length:y=null;break}case"min":{const v=x();v.length===0?y=null:y=v.reduce((E,I)=>E<I?E:I);break}case"max":{const v=x();v.length===0?y=null:y=v.reduce((E,I)=>E>I?E:I);break}case"string_agg":{const v=d.length>=2?String(n.evaluate(d[1],s)):",",E=[];for(const I of e){const S=n.evaluate(d[0],I);S!=null&&E.push(Xr(S))}y=E.length>0?E.join(v):null;break}case"array_agg":{const v=[];for(const E of e)v.push(n.evaluate(d[0],E));y=v;break}case"bool_and":{const v=x();y=v.length>0?v.every(E=>!!E):null;break}case"bool_or":{const v=x();y=v.length>0?v.some(E=>!!E):null;break}case"stddev":case"stddev_samp":{const v=x().map(Number);if(v.length<2)y=null;else{const E=v.reduce((S,N)=>S+N,0)/v.length,I=v.reduce((S,N)=>S+(N-E)**2,0)/(v.length-1);y=Math.sqrt(I)}break}case"stddev_pop":{const v=x().map(Number);if(v.length===0)y=null;else{const E=v.reduce((S,N)=>S+N,0)/v.length,I=v.reduce((S,N)=>S+(N-E)**2,0)/v.length;y=Math.sqrt(I)}break}case"variance":case"var_samp":{const v=x().map(Number);if(v.length<2)y=null;else{const E=v.reduce((I,S)=>I+S,0)/v.length;y=v.reduce((I,S)=>I+(S-E)**2,0)/(v.length-1)}break}case"var_pop":{const v=x().map(Number);if(v.length===0)y=null;else{const E=v.reduce((I,S)=>I+S,0)/v.length;y=v.reduce((I,S)=>I+(S-E)**2,0)/v.length}break}case"json_object_agg":case"jsonb_object_agg":{if(d.length<2)y=null;else{const v={};for(const E of e){const I=n.evaluate(d[0],E),S=n.evaluate(d[1],E);I!=null&&(v[String(I)]=S)}y=v}break}case"percentile_cont":{if(d.length>0){const v=Number(n.evaluate(d[0],s)),E=w(g(u,"FuncCall")??u),I=P(g(E,"agg_order"));if(I.length>0){const S=w(g(I[0],"SortBy")??I[0]),N=w(g(S,"node")),A=[];for(const O of e){const R=n.evaluate(N,O);R!=null&&A.push(Number(R))}if(A.sort((O,R)=>O-R),A.length===0)y=null;else{const O=v*(A.length-1),R=Math.floor(O),T=Math.ceil(O);R===T?y=A[R]:y=A[R]+(O-R)*(A[T]-A[R])}}else y=null}else y=null;break}case"mode":{const v=w(g(u,"FuncCall")??u),E=P(g(v,"agg_order"));if(E.length>0){const I=w(g(E[0],"SortBy")??E[0]),S=w(g(I,"node")),N=new Map;for(const R of e){const T=n.evaluate(S,R),F=JSON.stringify(T),C=N.get(F);C?C.count++:N.set(F,{count:1,value:T})}let A=0,O=null;for(const R of N.values())R.count>A&&(A=R.count,O=R.value);y=O}else y=null;break}case"corr":case"covar_pop":case"covar_samp":case"regr_count":case"regr_avgx":case"regr_avgy":case"regr_sxx":case"regr_syy":case"regr_sxy":case"regr_slope":case"regr_intercept":case"regr_r2":{if(d.length<2){y=null;break}const v=[],E=[];for(const I of e){const S=n.evaluate(d[0],I),N=n.evaluate(d[1],I);S!=null&&N!==null&&N!==void 0&&(v.push(Number(S)),E.push(Number(N)))}y=this._computeStatAgg(h,v,E);break}default:y=n.evaluate(u,s);break}r[_]=y}else{const h=l||this._deriveColumnName(u);r[h]=n.evaluate(u,s)}}return r}_computeStatAgg(e,t,n){const r=t.length;if(r===0)return null;const s=n.reduce((f,d)=>f+d,0),o=t.reduce((f,d)=>f+d,0),i=s/r,a=o/r;let l=0,u=0,h=0;for(let f=0;f<r;f++){const d=n[f]-i,p=t[f]-a;l+=d*d,u+=p*p,h+=d*p}switch(e){case"regr_count":return r;case"regr_avgx":return i;case"regr_avgy":return a;case"regr_sxx":return l;case"regr_syy":return u;case"regr_sxy":return h;case"covar_pop":return h/r;case"covar_samp":return r<2?null:h/(r-1);case"corr":return l===0||u===0?null:h/Math.sqrt(l*u);case"regr_slope":return l===0?null:h/l;case"regr_intercept":return l===0?null:a-h/l*i;case"regr_r2":{if(l===0||u===0)return null;const f=h/Math.sqrt(l*u);return f*f}default:return null}}_resolveHavingAggregates(e,t,n,r){const s={...n};return this._collectHavingAggregates(e,t,s,r),s}_collectHavingAggregates(e,t,n,r){const s=e.FuncCall;if(s){const a=s.funcname;if(a.length>0){const l=a[a.length-1],u=l.String??l.str,h=typeof u=="object"&&u!==null?u.sval??u.str:u;if(h&&et.has(h.toLowerCase())){const f=this._computeInlineAggregate(h.toLowerCase(),s,t,r),d=nt(e),p=ve(e);let m;if(d||p.length===0)m=`${h.toLowerCase()}(*)`;else try{const _=B(p[0]);m=`${h.toLowerCase()}(${_})`}catch{m=h.toLowerCase()}n[m]=f,n[`__having_agg_${JSON.stringify(e)}`]=f;return}}}const o=e.BoolExpr;if(o){const a=P(o.args);for(const l of a)this._collectHavingAggregates(w(l),t,n,r);return}const i=e.A_Expr;if(i){const a=i.lexpr,l=i.rexpr;a&&this._collectHavingAggregates(w(a),t,n,r),l&&this._collectHavingAggregates(w(l),t,n,r);return}for(const a of Object.values(e))if(Array.isArray(a))for(const l of a)typeof l=="object"&&l!==null&&this._collectHavingAggregates(l,t,n,r);else typeof a=="object"&&a!==null&&this._collectHavingAggregates(a,t,n,r)}_computeInlineAggregate(e,t,n,r){const s={FuncCall:t},o=nt(s),i=ve(s),a=Qr(s),l=()=>{let h=[];for(const f of n){const d=i.length>0?r.evaluate(i[0],f):null;d!=null&&h.push(d)}if(a){const f=new Set,d=[];for(const p of h){const m=JSON.stringify(p);f.has(m)||(f.add(m),d.push(p))}h=d}return h},u=()=>{const h=[];if(i.length<2)return h;for(const f of n){const d=r.evaluate(i[0],f),p=r.evaluate(i[1],f);d!=null&&p!==null&&p!==void 0&&h.push([Number(d),Number(p)])}return h};switch(e){case"count":return o?n.length:l().length;case"sum":{const h=l();return h.length>0?h.reduce((f,d)=>f+Number(d),0):null}case"avg":{const h=l();return h.length>0?h.reduce((f,d)=>f+Number(d),0)/h.length:null}case"min":{const h=l();return h.length>0?h.reduce((f,d)=>Number(f)<Number(d)?f:d):null}case"max":{const h=l();return h.length>0?h.reduce((f,d)=>Number(f)>Number(d)?f:d):null}case"stddev":case"stddev_samp":{const h=l().map(Number);if(h.length<2)return null;const f=h.reduce((p,m)=>p+m,0)/h.length,d=h.reduce((p,m)=>p+(m-f)**2,0)/(h.length-1);return Math.sqrt(d)}case"stddev_pop":{const h=l().map(Number);if(h.length===0)return null;const f=h.reduce((p,m)=>p+m,0)/h.length,d=h.reduce((p,m)=>p+(m-f)**2,0)/h.length;return Math.sqrt(d)}case"variance":case"var_samp":{const h=l().map(Number);if(h.length<2)return null;const f=h.reduce((d,p)=>d+p,0)/h.length;return h.reduce((d,p)=>d+(p-f)**2,0)/(h.length-1)}case"var_pop":{const h=l().map(Number);if(h.length===0)return null;const f=h.reduce((d,p)=>d+p,0)/h.length;return h.reduce((d,p)=>d+(p-f)**2,0)/h.length}case"corr":case"covar_pop":case"covar_samp":case"regr_slope":case"regr_intercept":case"regr_r2":case"regr_count":case"regr_avgx":case"regr_avgy":case"regr_sxx":case"regr_syy":case"regr_sxy":{const h=u();if(h.length===0)return null;const f=h.length,d=h.reduce((x,v)=>x+v[0],0)/f,p=h.reduce((x,v)=>x+v[1],0)/f;let m=0,_=0,y=0;for(const[x,v]of h)m+=(v-p)**2,_+=(x-d)**2,y+=(v-p)*(x-d);switch(e){case"corr":return m===0||_===0?null:y/Math.sqrt(m*_);case"covar_pop":return y/f;case"covar_samp":return f<2?null:y/(f-1);case"regr_slope":return m===0?null:y/m;case"regr_intercept":return m===0?null:d-y/m*p;case"regr_r2":return m===0||_===0?null:y*y/(m*_);case"regr_count":return f;case"regr_avgx":return p;case"regr_avgy":return d;case"regr_sxx":return m;case"regr_syy":return _;case"regr_sxy":return y;default:return null}}default:return null}}_hasWindowFunctions(e){for(const t of e){const n=w(g(t,"ResTarget")??t),r=g(n,"val");if(r!=null&&Q(w(r))&&rt(w(r)))return!0}return!1}_applyWindowFunctions(e,t,n,r){const s=new Map;for(const o of n){const i=w(g(o,"WindowDef")??o),a=j(i,"name");a&&s.set(a,i)}for(const o of t){const i=w(g(o,"ResTarget")??o),a=g(i,"val"),l=j(i,"name");if(a==null)continue;const u=w(a);if(!Q(u)||!rt(u))continue;const h=ce(u),f=l||h,d=w(g(u,"FuncCall")??u),p=ve(u),m=w(g(d,"over")),_=j(m,"refname")||j(m,"name");let y=m;_&&s.has(_)&&(y=s.get(_));const x=[];for(const I of P(g(y,"partitionClause")))try{x.push(B(I))}catch{}const v=[];for(const I of P(g(y,"orderClause"))){const S=w(g(I,"SortBy")??I),N=w(g(S,"node"));try{const A=B(N),O=g(S,"sortby_dir"),R=O===2||O==="SORTBY_DESC";v.push({col:A,desc:R})}catch{}}const E=new Map;for(let I=0;I<e.length;I++){const S=e[I],N=x.map(O=>JSON.stringify(S[O])).join("\0");let A=E.get(N);A||(A={rows:[],indices:[]},E.set(N,A)),A.rows.push(S),A.indices.push(I)}for(const I of E.values())if(v.length>0){const S=I.rows.map((N,A)=>({row:N,origIdx:I.indices[A]}));S.sort((N,A)=>{for(const O of v){const R=N.row[O.col],T=A.row[O.col],F=R==null,C=T==null;if(F&&C)continue;if(F)return O.desc?-1:1;if(C)return O.desc?1:-1;let V;if(typeof R=="string"&&typeof T=="string"?V=R<T?-1:R>T?1:0:V=R-T,V!==0)return O.desc?-V:V}return 0}),I.rows=S.map(N=>N.row),I.indices=S.map(N=>N.origIdx)}for(const I of E.values()){const S=I.rows,N=S.length;for(let A=0;A<N;A++){let O=null;switch(h){case"row_number":O=A+1;break;case"rank":{let T=1;for(let F=0;F<A;F++){let C=!0;for(const V of v)if(S[F][V.col]!==S[A][V.col]){C=!1;break}C||(T=F+1+1)}T=1;for(let F=0;F<A;F++){let C=!0;for(const V of v)if(S[F][V.col]!==S[A][V.col]){C=!1;break}C||T++}T=1;for(let F=0;F<N;F++){let C=!0;for(const V of v)if(S[F][V.col]!==S[A][V.col]){C=!1;break}if(C){T=F+1;break}}O=T;break}case"dense_rank":{const T=new Set;for(let F=0;F<=A;F++){const C=v.map(V=>JSON.stringify(S[F][V.col])).join("\0");T.add(C)}O=T.size;break}case"percent_rank":{if(N<=1)O=0;else{let T=1;for(let F=0;F<N;F++){let C=!0;for(const V of v)if(S[F][V.col]!==S[A][V.col]){C=!1;break}if(C){T=F+1;break}}O=(T-1)/(N-1)}break}case"cume_dist":{let T=0;for(let F=0;F<N;F++){let C=!0;for(const V of v){const Y=S[F][V.col],oe=S[A][V.col];V.desc?Y<oe&&(C=!1):Y>oe&&(C=!1)}C&&T++}O=T/N;break}case"ntile":{const T=p.length>0?Number(r.evaluate(p[0],{})):1;O=Math.floor(A*T/N)+1;break}case"lag":{const T=p.length>1?Number(r.evaluate(p[1],{})):1,F=p.length>2?r.evaluate(p[2],{}):null,C=A-T;C>=0&&C<N&&p.length>0?O=r.evaluate(p[0],S[C]):O=F;break}case"lead":{const T=p.length>1?Number(r.evaluate(p[1],{})):1,F=p.length>2?r.evaluate(p[2],{}):null,C=A+T;C>=0&&C<N&&p.length>0?O=r.evaluate(p[0],S[C]):O=F;break}case"first_value":{p.length>0&&N>0&&(O=r.evaluate(p[0],S[0]));break}case"last_value":{p.length>0&&N>0&&(O=r.evaluate(p[0],S[N-1]));break}case"nth_value":{const T=p.length>1?Number(r.evaluate(p[1],{})):1;p.length>0&&T>=1&&T<=N&&(O=r.evaluate(p[0],S[T-1]));break}case"sum":{let T=0,F=!1;const C=v.length>0?A:N-1;for(let V=0;V<=C;V++){const Y=p.length>0?r.evaluate(p[0],S[V]):null;Y!=null&&(T+=Number(Y),F=!0)}O=F?T:null;break}case"count":{const T=v.length>0?A:N-1;if(nt(u))O=T+1;else{let F=0;for(let C=0;C<=T;C++){const V=p.length>0?r.evaluate(p[0],S[C]):null;V!=null&&F++}O=F}break}case"avg":{let T=0,F=0;const C=v.length>0?A:N-1;for(let V=0;V<=C;V++){const Y=p.length>0?r.evaluate(p[0],S[V]):null;Y!=null&&(T+=Number(Y),F++)}O=F>0?T/F:null;break}case"min":{let T=null;const F=v.length>0?A:N-1;for(let C=0;C<=F;C++){const V=p.length>0?r.evaluate(p[0],S[C]):null;V!=null&&(T===null||V<T)&&(T=V)}O=T;break}case"max":{let T=null;const F=v.length>0?A:N-1;for(let C=0;C<=F;C++){const V=p.length>0?r.evaluate(p[0],S[C]):null;V!=null&&(T===null||V>T)&&(T=V)}O=T;break}default:O=null;break}const R=I.indices[A];e[R][f]=O}}}for(const o of t){const i=w(g(o,"ResTarget")??o),a=g(i,"val"),l=j(i,"name");if(a==null)continue;const u=w(a);if(Q(u)&&rt(u))continue;const h=l||this._deriveColumnName(u);if(X(u)){const f=B(u);if(f!==h)for(const d of e)d[h]=d[f]}else for(const f of e)f[h]=r.evaluate(u,f)}return e}_applyDistinct(e,t){const n=new Set,r=[];for(const s of e){const o=t.map(i=>JSON.stringify(s[i])).join("\0");n.has(o)||(n.add(o),r.push(s))}return r}_applyOrderBy(e,t,n,r){const s=[...e],o=new Map,i=new Set,a=new Map;if(r)for(let u=0;u<r.length;u++){const h=w(g(r[u],"ResTarget")??r[u]),f=j(h,"name"),d=g(h,"val");let p=f;if(!p&&d!==null&&d!==void 0&&(p=this._deriveColumnName(w(d))),p&&(o.set(u+1,p),f&&(i.add(f),d!==null&&X(w(d)))))try{const m=B(w(d));a.set(m,f)}catch{}}const l=t.map(u=>{const h=w(g(u,"SortBy")??u),f=w(g(h,"node")),d=g(h,"sortby_dir"),p=d===2||d==="SORTBY_DESC",m=g(h,"sortby_nulls");let _;m===1||m==="SORTBY_NULLS_FIRST"?_=!0:m===2||m==="SORTBY_NULLS_LAST"?_=!1:_=p;let y=f;if(be(f)){const x=z(f,[]);if(typeof x=="number"&&Number.isInteger(x)){const v=x,E=o.get(v);E!==void 0&&(y={ColumnRef:{fields:[{String:{sval:E}}]}})}}if(X(y))try{const x=B(y);a.has(x)&&(y={ColumnRef:{fields:[{String:{sval:a.get(x)}}]}})}catch{}return{node:y,desc:p,nullsFirst:_}});return s.sort((u,h)=>{for(const f of l){const d=n.evaluate(f.node,u),p=n.evaluate(f.node,h),m=d==null,_=p==null;if(m&&_)continue;if(m)return f.nullsFirst?-1:1;if(_)return f.nullsFirst?1:-1;let y;if(typeof d=="string"&&typeof p=="string"?y=d<p?-1:d>p?1:0:y=d-p,y!==0)return f.desc?-y:y}return 0}),s}_evaluateReturning(e,t,n,r){const s={};for(const o of e){const i=w(g(o,"ResTarget")??o),a=g(i,"val"),l=j(i,"name");if(a!=null){const u=w(a);if(tt(u)){if(r)for(const f of r.columnNames)s[f]=t[f]??null;else Object.assign(s,t);continue}const h=l||this._deriveColumnName(u);s[h]=n.evaluate(u,t)}}return s}_extractReturningColumns(e,t){const n=[];for(const r of e){const s=w(g(r,"ResTarget")??r),o=g(s,"val"),i=j(s,"name");if(o!=null){const a=w(o);if(tt(a)){t&&n.push(...t.columnNames);continue}n.push(i||this._deriveColumnName(a))}}return n}_contextForTable(e){if(e===null)return{};const t={};for(const[r,s]of e.vectorIndexes)t[r]=s;const n={};for(const[r,s]of e.spatialIndexes)n[r]=s;return{documentStore:e.documentStore,invertedIndex:e.invertedIndex,vectorIndexes:t,spatialIndexes:n}}static _containsUQAFunction(e){if(Q(e)){const s=ce(e);if(Yr.has(s))return!0}const t=w(g(e,"FuncCall")??{});if(Object.keys(t).length>0){const s=ce(t);if(Yr.has(s))return!0}const n=w(g(e,"A_Expr")??{});if(Object.keys(n).length>0){const s=P(g(n,"name"));if(s.length>0&&J(s[0])==="@@")return!0}for(const s of["lexpr","rexpr","args","arg"]){const o=g(e,s)??g(n,s);if(o!=null){if(Array.isArray(o)){for(const i of o)if(le._containsUQAFunction(w(i)))return!0}else if(typeof o=="object"&&le._containsUQAFunction(w(o)))return!0}}const r=w(g(e,"BoolExpr")??{});if(Object.keys(r).length>0){const s=P(g(r,"args"));for(const o of s)if(le._containsUQAFunction(o))return!0}return!1}_splitUQAConjuncts(e){const t=this._extractAndConjuncts(e),n=[],r=[];for(const i of t)le._containsUQAFunction(i)?n.push(i):r.push(i);const s=n.length===0?null:n.length===1?n[0]:{BoolExpr:{boolop:0,args:n}},o=r.length===0?null:r.length===1?r[0]:{BoolExpr:{boolop:0,args:r}};return[s,o]}_extractAndConjuncts(e){const t=w(g(e,"BoolExpr")??{});if(Object.keys(t).length>0){const n=g(t,"boolop");if(n===0||n==="AND_EXPR"){const r=P(g(t,"args")),s=[];for(const o of r)s.push(...this._extractAndConjuncts(o));return s}}return[e]}_compileWhere(e,t){const n=w(g(e,"BoolExpr")??{});if(Object.keys(n).length>0)return this._compileBoolExpr(n,t);if(jn(e))return this._compileComparison(w(g(e,"A_Expr")??e),t);const r=g(e,"A_Expr");if(r!=null)return this._compileComparison(w(r),t);if(Q(e))return this._compileFuncInWhere(w(g(e,"FuncCall")??e),t);const s=g(e,"FuncCall");if(s!=null)return this._compileFuncInWhere(w(s),t);if(Zr(e))return this._compileNullTest(w(g(e,"NullTest")??e));const o=g(e,"NullTest");if(o!=null)return this._compileNullTest(w(o));if(nn(e))return this._compileSublinkInWhere(w(g(e,"SubLink")??e),t);const i=g(e,"SubLink");return i!=null?this._compileSublinkInWhere(w(i),t):new $n(e,a=>this._compileSelect(a,this._params))}_compileBoolExpr(e,t){const n=g(e,"boolop"),r=P(g(e,"args"));if(n===0||n==="AND_EXPR")return this._compileAnd(r,t);if(n===1||n==="OR_EXPR")return new re(r.map(s=>this._compileWhere(s,t)));if(n===2||n==="NOT_EXPR")return new de(this._compileWhere(r[0],t));throw new Error(`Unsupported BoolExpr type: ${String(n)}`)}_compileAnd(e,t){const n=[],r=[];for(const o of e){const i=this._compileWhere(o,t);i instanceof G&&i.source===null?r.push(i):n.push(i)}let s;if(n.length>0)s=n.length===1?n[0]:new H(n);else if(r.length>0)s=r.shift();else return new Vn;for(const o of r)s=new G(o.field,o.predicate,s);return s}_compileComparison(e,t){const n=g(e,"kind"),r=P(g(e,"name")),s=r.length>0?J(r[r.length-1]):"";if(n===0||n==="AEXPR_OP"){if(s==="@@"){const a=w(g(e,"lexpr")),l=w(g(e,"rexpr")),u=B(a),h=ee(l,this._params),f=u==="_all"?null:u;return this._makeTextSearchOp(f,h,t,!1)}const o=w(g(e,"lexpr")),i=w(g(e,"rexpr"));if(X(o)&&(be(i)||Pt(i))&&["=","!=","<>",">",">=","<","<="].includes(s)){const a=B(o),l=z(i,this._params);return new G(a,es(s,l))}return new $n(e.kind!==void 0?e:{A_Expr:e},a=>this._compileSelect(a,this._params))}if(n===7||n==="AEXPR_IN"){const o=w(g(e,"lexpr")),i=B(o),a=P(g(e,"rexpr")),l=new Set;for(const u of a)l.add(z(u,this._params));return new G(i,new cn(l))}if(n===11||n==="AEXPR_BETWEEN"){const o=w(g(e,"lexpr")),i=B(o),a=P(g(e,"rexpr")),l=Number(z(a[0],this._params)),u=Number(z(a[1],this._params));return new G(i,new un(l,u))}if(n===12||n==="AEXPR_NOT_BETWEEN"){const o=w(g(e,"lexpr")),i=B(o),a=P(g(e,"rexpr")),l=Number(z(a[0],this._params)),u=Number(z(a[1],this._params));return new de(new G(i,new un(l,u)))}if(n===8||n==="AEXPR_LIKE"){const o=w(g(e,"lexpr")),i=w(g(e,"rexpr")),a=B(o),l=ee(i,this._params);return s==="!~~"?new G(a,new as(l)):new G(a,new Xn(l))}if(n===9||n==="AEXPR_ILIKE"){const o=w(g(e,"lexpr")),i=w(g(e,"rexpr")),a=B(o),l=ee(i,this._params);return s==="!~~*"?new G(a,new ls(l)):new G(a,new Qn(l))}throw new Error(`Unsupported expression kind: ${String(n)}`)}_compileNullTest(e){const t=w(g(e,"arg")),n=B(t),r=g(e,"nulltesttype");return r===0||r==="IS_NULL"?new G(n,new hn):new G(n,new fn)}_compileSublinkInWhere(e,t){const n=g(e,"subLinkType"),r=w(g(e,"subselect")),s=w(g(r,"SelectStmt")??r);if(n===2||n==="ANY_SUBLINK"){const o=this._compileSelect(s,this._params);if(o.columns.length===0)throw new Error("Subquery must return at least one column");const i=o.columns[0],a=new Set;for(const h of o.rows){const f=h[i];f!=null&&a.add(f)}const l=w(g(e,"testexpr")),u=B(l);return new G(u,new cn(a))}if(n===0||n==="EXISTS_SUBLINK")return this._compileSelect(s,this._params).rows.length>0?new Vn:new de(new Vn);throw new Error(`Unsupported subquery type: ${String(n)}`)}_compileFuncInWhere(e,t){const n=ce(e).toLowerCase(),r=ve(e);if(n==="text_match"){const s=B(r[0]),o=ee(r[1],this._params);return this._makeTextSearchOp(s,o,t,!1)}if(n==="bayesian_match"){const s=B(r[0]),o=ee(r[1],this._params);return this._makeTextSearchOp(s,o,t,!0)}return n==="bayesian_match_with_prior"?this._makeBayesianWithPriorOp(r,t):n==="knn_match"?this._makeKnnOp(r):n==="bayesian_knn_match"?this._makeCalibratedKnnOp(r,t,!0):n==="traverse_match"?this._makeTraverseMatchOp(r):n==="temporal_traverse"?this._makeTemporalTraverseOp(r):n==="path_filter"?this._makePathFilterOp(r):n==="vector_exclude"?this._makeVectorExcludeOp(r):n==="spatial_within"?this._makeSpatialWithinOp(r):n==="fuse_log_odds"?this._makeFusionOp(r,t,"log_odds"):n==="fuse_prob_and"?this._makeFusionOp(r,t,"prob_and"):n==="fuse_prob_or"?this._makeFusionOp(r,t,"prob_or"):n==="fuse_prob_not"?this._makeProbNotOp(r,t):n==="fuse_attention"?this._makeAttentionFusionOp(r,t):n==="fuse_multihead"?this._makeMultiheadFusionOp(r,t):n==="fuse_learned"?this._makeLearnedFusionOp(r,t):n==="sparse_threshold"?this._makeSparseThresholdOp(r,t):n==="multi_field_match"?this._makeMultiFieldMatchOp(r):n==="message_passing"?this._makeMessagePassingOp(r):n==="graph_embedding"?this._makeGraphEmbeddingOp(r):n==="staged_retrieval"?this._makeStagedRetrievalOp(r,t):n==="pagerank"?this._makePageRankOp(r):n==="hits"?this._makeHITSOp(r):n==="betweenness"?this._makeBetweennessOp(r):n==="weighted_rpq"?this._makeWeightedRpqOp(r):n==="progressive_fusion"?this._makeProgressiveFusionOp(r,t):n==="deep_fusion"?this._makeDeepFusionOp(r,t):new $n(e,s=>this._compileSelect(s,this._params))}_compileCalibratedSignal(e,t){const n=w(g(e,"FuncCall")??e),r=ce(n).toLowerCase(),s=ve(n);if(r==="text_match"||r==="bayesian_match"){const o=B(s[0]),i=ee(s[1],this._params);return this._makeTextSearchOp(o,i,t,!0)}if(r==="knn_match")return this._makeCalibratedKnnOp(s,t,!1);if(r==="bayesian_knn_match")return this._makeCalibratedKnnOp(s,t,!0);if(r==="traverse_match")return this._makeTraverseMatchOp(s);if(r==="spatial_within")return this._makeSpatialWithinOp(s);if(r==="pagerank")return this._makePageRankOp(s);if(r==="hits")return this._makeHITSOp(s);if(r==="betweenness")return this._makeBetweennessOp(s);if(r==="weighted_rpq")return this._makeWeightedRpqOp(s);if(r==="message_passing")return this._makeMessagePassingOp(s);throw new Error(`Unknown signal function for fusion: ${r}. Use text_match, bayesian_match, knn_match, bayesian_knn_match, traverse_match, spatial_within, pagerank, hits, betweenness, or weighted_rpq.`)}_makeTextSearchOp(e,t,n,r){const s=n.invertedIndex;let o=[];s&&(o=(e&&typeof s.getSearchAnalyzer=="function"?s.getSearchAnalyzer(e):s.analyzer).analyze(t));const i=new _e(t,e??void 0);if(r)try{const a=s?s.stats:null;if(a){const l=new ct(Je(),a);return new pe(l,i,o,e??void 0)}}catch{}try{const a=s?s.stats:null;if(a){const l=new xt(qt(),a);return new pe(l,i,o,e??void 0)}}catch{}return i}_makeMultiFieldMatchOp(e){if(e.length<3)throw new Error("multi_field_match() requires at least 3 arguments: multi_field_match(field1, field2, ..., query)");const t=[];let n=null;const r=[];for(let s=0;s<e.length;s++){const o=e[s];if(X(o)||g(o,"ColumnRef")!==null)t.push(B(o));else{const i=z(o,this._params);if(typeof i=="string"&&n===null)n=i;else if(typeof i=="number")r.push(i);else if(typeof i=="string")throw new Error(`Unexpected string argument at position ${String(s)}`)}}if(n===null||t.length<2)throw new Error("multi_field_match() requires at least 2 field names and a query string");if(r.length>0&&r.length!==t.length)throw new Error(`Number of weights (${String(r.length)}) must match number of fields (${String(t.length)})`);return new Mn(t,n,r.length>0?r:void 0)}_makeMessagePassingOp(e){const t=e.length>0?we(e[0],this._params):2,n=e.length>1?ee(e[1],this._params):"mean",r=e.length>2?ee(e[2],this._params):void 0;return new Dn({kLayers:t,aggregation:n,propertyName:r,graph:this._currentGraphName||""})}_makeGraphEmbeddingOp(e){const t=e.length>1?we(e[1],this._params):2;return new Br({graph:this._currentGraphName||"",kHops:t})}_makeBayesianWithPriorOp(e,t){if(e.length<4)throw new Error("bayesian_match_with_prior() requires 4 arguments: bayesian_match_with_prior(field, query, prior_field, prior_mode)");const n=B(e[0]),r=ee(e[1],this._params),s=ee(e[2],this._params),o=ee(e[3],this._params);if(o!=="recency"&&o!=="authority")throw new Error(`Unknown prior mode: ${o}. Use 'recency' or 'authority'.`);let i;if(o==="recency")try{i=Go(s)}catch{i=h=>.5}else try{i=Bo(s)}catch{i=h=>.5}const a=t.invertedIndex;let l=[];a&&(l=a.analyzer.analyze(r));const u=new _e(r,n);try{const h=a?a.stats:null;if(h){const f=new zo(Je(),h,i);return new vi(u,f,l,n,t.documentStore??null)}}catch{}return u}_makeKnnOp(e){if(e.length!==3)throw new Error("knn_match() requires 3 arguments: knn_match(field, vector, k)");const t=B(e[0]),n=We(e[1],this._params),r=we(e[2],this._params);return new je(n,r,t)}_makeCalibratedKnnOp(e,t,n){var f;const r=[],s={};for(const d of e){const p=g(d,"NamedArgExpr");if(p!=null){const m=w(p),_=j(m,"name"),y=w(g(m,"arg"));s[_]=z(y,this._params)}else r.push(d)}if(r.length!==3)throw new Error("knn_match() requires 3 positional arguments: knn_match(field, vector, k)");const o=B(r[0]),i=We(r[1],this._params),a=we(r[2],this._params),u=(f=t.vectorIndexes)==null?void 0:f[o];if(u!==null&&typeof u=="object"&&"backgroundStats"in u&&u.backgroundStats!==null||n||Object.keys(s).length>0){const d=new Set(["method","weight_source","bm25_query","bm25_field","base_rate","bandwidth_scale","density_gamma"]),p=Object.keys(s).filter(m=>!d.has(m));if(p.length>0)throw new Error(`Unknown option(s) for bayesian_knn_match: ${p.join(", ")}. Valid options: ${[...d].sort().join(", ")}`);return new fr(i,a,o,s.method??"kde",Number(s.base_rate??.5),s.weight_source??"density_prior",s.bm25_query!=null?String(s.bm25_query):void 0,s.bm25_field!=null?String(s.bm25_field):void 0,Number(s.density_gamma??1),Number(s.bandwidth_scale??1))}return new wi(i,a,o)}_makeSpatialWithinOp(e){if(e.length!==3)throw new Error("spatial_within() requires 3 arguments: spatial_within(field, POINT(x, y), distance)");const t=B(e[0]),[n,r]=this._extractPointArg(e[1]),s=Number(z(e[2],this._params));return new js(t,n,r,s)}_extractPointArg(e){const t=w(g(e,"FuncCall")??{});if(Object.keys(t).length>0){const n=ce(t);if(n!=="point")throw new Error(`Expected POINT(x, y), got ${n}()`);const r=ve(t);if(r.length!==2)throw new Error("POINT() requires exactly 2 arguments");const s=Number(z(r[0],this._params)),o=Number(z(r[1],this._params));return[s,o]}if(Pt(e)){const n=z(e,this._params);if(Array.isArray(n)&&n.length===2)return[Number(n[0]),Number(n[1])];throw new Error("Parameter for POINT must be a [x, y] array")}throw new Error("Expected POINT(x, y) or $N parameter")}_makeTraverseMatchOp(e){const t=we(e[0],this._params),n=e.length>1?ee(e[1],this._params):void 0,r=e.length>2?we(e[2],this._params):1;return new Fn(t,this._currentGraphName||"",n??null,r)}_makeTemporalTraverseOp(e){if(e.length<4)throw new Error("temporal_traverse() requires at least 4 arguments: temporal_traverse(start, label, hops, timestamp)");const t=we(e[0],this._params),n=e.length>1?ee(e[1],this._params):void 0,r=e.length>2?we(e[2],this._params):1;let s;if(e.length===4){const o=Number(z(e[3],this._params));s=new Zt({timestamp:o})}else if(e.length>=5){const o=Number(z(e[3],this._params)),i=Number(z(e[4],this._params));s=new Zt({timeRange:[o,i]})}else s=new Zt;return new Pn({startVertex:t,graph:this._currentGraphName||"",temporalFilter:s,label:n??null,maxHops:r})}_makePathFilterOp(e){if(e.length<2)throw new Error("path_filter() requires at least 2 arguments: path_filter('path', value) or path_filter('path', 'op', value)");const t=ee(e[0],this._params),n=[];for(const o of t.split("."))/^\d+$/.test(o)?n.push(parseInt(o,10)):n.push(o);if(e.length===2){const o=z(e[1],this._params);return new Qt(n,new ln(o))}const r=ee(e[1],this._params),s=z(e[2],this._params);return new Qt(n,es(r,s))}_makeVectorExcludeOp(e){if(e.length!==5)throw new Error("vector_exclude() requires 5 arguments: vector_exclude(field, positive_vector, negative_vector, k, threshold)");const t=B(e[0]),n=We(e[1],this._params),r=We(e[2],this._params),s=we(e[3],this._params),o=Number(z(e[4],this._params)),i=new je(n,s,t);return new En(i,r,o,t)}_makeProbNotOp(e,t){if(e.length!==1)throw new Error("fuse_prob_not() requires exactly 1 signal function argument");const n=this._compileCalibratedSignal(e[0],t);return new Gt(n)}_makeSparseThresholdOp(e,t){if(e.length!==2)throw new Error("sparse_threshold() requires 2 arguments: sparse_threshold(signal, threshold)");const n=this._compileCalibratedSignal(e[0],t),r=Number(z(e[1],this._params));return new Ne(n,r)}_makeFusionOp(e,t,n){const r=[];let s=.5,o=null,i=null;for(const a of e)if(Q(a)||g(a,"FuncCall")!==null)r.push(this._compileCalibratedSignal(a,t));else{const l=g(a,"NamedArgExpr");if(l!=null&&n==="log_odds"){const u=w(l),h=j(u,"name"),f=z(w(g(u,"arg")),this._params);if(h==="alpha")s=Number(f);else if(h==="gating")o=String(f);else if(h==="gating_beta")i=Number(f);else throw new Error(`Unknown option for fuse_log_odds: ${h}. Valid options: alpha, gating, gating_beta`)}else if(be(a)&&n==="log_odds"){const u=z(a,this._params);typeof u=="string"?o=u:s=Number(u)}else throw new Error("Fusion function arguments must be signal functions (text_match, knn_match, etc.)")}if(r.length<2)throw new Error("Fusion requires at least 2 signal functions");return n==="log_odds"?new ke(r,s,null,o,i):n==="prob_and"?new Ve(r,"and"):new Ve(r,"or")}_makeStagedRetrievalOp(e,t){const n=[];let r=0;for(;r<e.length-1;){if(!Q(e[r])&&g(e[r],"FuncCall")===null)throw new Error(`staged_retrieval: argument ${String(r)} must be a signal function`);const s=this._compileCalibratedSignal(e[r],t);let o=z(e[r+1],this._params);typeof o=="number"&&o===Math.floor(o)&&(o=Math.floor(o)),n.push([s,o]),r+=2}if(n.length===0)throw new Error("staged_retrieval requires at least one (signal, cutoff) pair");return new $e(n)}_splitCentralityArgs(e){const t=[];let n=this._currentGraphName;for(const r of e){try{const s=z(r,this._params);if(typeof s=="string"){n=s;continue}}catch{}t.push(r)}return[t,n]}_makePageRankOp(e){const[t,n]=this._splitCentralityArgs(e),r=t.length>0?Number(z(t[0],this._params)):.85,s=t.length>1?we(t[1],this._params):100,o=t.length>2?Number(z(t[2],this._params)):1e-6;return new qr({damping:r,maxIterations:s,tolerance:o,graph:n||""})}_makeHITSOp(e){const[t,n]=this._splitCentralityArgs(e),r=t.length>0?we(t[0],this._params):100,s=t.length>1?Number(z(t[1],this._params)):1e-6;return new zr({maxIterations:r,tolerance:s,graph:n||""})}_makeBetweennessOp(e){const[,t]=this._splitCentralityArgs(e);return new Gr({graph:t||""})}_makeWeightedRpqOp(e){if(e.length<3)throw new Error("weighted_rpq() requires at least 3 arguments: weighted_rpq('path_expr', start, 'weight_property'[, 'agg_fn'[, threshold]])");const t=ee(e[0],this._params),n=we(e[1],this._params),r=ee(e[2],this._params),s=e.length>3?ee(e[3],this._params):"sum";let o=null;e.length>4&&(o=Number(z(e[4],this._params)));try{return new $o(Tr(t),this._currentGraphName||"",{startVertex:n,weightProperty:r,aggregation:s,weightThreshold:o})}catch{throw new Error("weighted_rpq() requires the WeightedPathQueryOperator")}}_makeProgressiveFusionOp(e,t){const n=[],r=[];let s=.5,o=null;for(const i of e)if(Q(i)||g(i,"FuncCall")!==null)n.push(this._compileCalibratedSignal(i,t));else if(be(i)||Pt(i)){const a=z(i,this._params);if(typeof a=="string")o=a;else if(typeof a=="number"&&a!==Math.floor(a))s=a;else{const l=Math.floor(Number(a));if(n.length===0)throw new Error("progressive_fusion: k must follow signal functions");r.push([[...n],l]),n.length=0}}else throw new Error("progressive_fusion: unexpected argument type");if(n.length>0)throw new Error("progressive_fusion: trailing signals without k cutoff");if(r.length===0)throw new Error("progressive_fusion requires at least one (signals, k) stage");return new kr(r,s,o)}_makeDeepFusionOp(e,t){const n=[];let r=.5,s="none";for(const o of e){const i=w(g(o,"FuncCall")??(Q(o)?o:{}));if(Object.keys(i).length>0){const l=ce(i).toLowerCase(),u=ve(i);if(l==="layer"){const h=[];for(const f of u)if(Q(f)||g(f,"FuncCall")!==null)h.push(this._compileCalibratedSignal(f,t));else throw new Error("layer() arguments must be signal functions");if(h.length===0)throw new Error("layer() requires at least one signal");n.push({type:"signal",signals:h})}else if(l==="propagate"){if(u.length<2)throw new Error("propagate() requires at least 2 arguments: propagate('edge_label', 'aggregation'[, 'direction'])");const h=ee(u[0],this._params),f=ee(u[1],this._params);if(!["mean","sum","max"].includes(f))throw new Error(`propagate() aggregation must be 'mean', 'sum', or 'max', got '${f}'`);let d="both";if(u.length>=3&&(d=ee(u[2],this._params),!["both","out","in"].includes(d)))throw new Error(`propagate() direction must be 'both', 'out', or 'in', got '${d}'`);n.push({type:"propagate",edgeLabel:h,aggregation:f,direction:d})}else if(l==="convolve"){const h=[],f={};for(const _ of u){const y=g(_,"NamedArgExpr");if(y!=null){const x=w(y);f[j(x,"name")]=z(w(g(x,"arg")),this._params)}else h.push(_)}if(h.length===0)throw new Error("convolve() requires edge_label as first argument");const d=ee(h[0],this._params),p=Number(f.n_channels??0),m="both";if(p>1){const _=Number(f.seed??42),y=f.init??"kaiming";let x=1;for(let v=n.length-1;v>=0;v--){const E=n[v];if(E.type==="conv"){const I=E.kernelShape;I&&(x=I[0]);break}}try{const v=Uo(p,x,_,y);n.push({type:"conv",edgeLabel:d,hopWeights:[1],direction:m,kernel:Array.from(v),kernelShape:[p,x]})}catch{n.push({type:"conv",edgeLabel:d,hopWeights:[1],direction:m})}}else{if(h.length<2)throw new Error("convolve() requires ARRAY[w0, w1, ...] or n_channels => N");const _=We(h[1],this._params);n.push({type:"conv",edgeLabel:d,hopWeights:Array.from(_),direction:m})}}else if(l==="pool"){if(u.length<3)throw new Error("pool() requires at least 3 arguments: pool('edge_label', 'method', pool_size[, 'direction'])");const h=ee(u[0],this._params),f=ee(u[1],this._params);if(!["max","avg"].includes(f))throw new Error(`pool() method must be 'max' or 'avg', got '${f}'`);const d=we(u[2],this._params);let p="both";if(u.length>=4&&(p=ee(u[3],this._params),!["both","out","in"].includes(p)))throw new Error(`pool() direction must be 'both', 'out', or 'in', got '${p}'`);n.push({type:"pool",edgeLabel:h,poolSize:d,method:f,direction:p})}else if(l==="dense"){const h=[],f={};for(const y of u){const x=g(y,"NamedArgExpr");if(x!=null){const v=w(x);f[j(v,"name")]=Number(z(w(g(v,"arg")),this._params))}else h.push(y)}if(h.length<2)throw new Error("dense() requires at least 2 positional arguments: ARRAY[weights], ARRAY[bias]");const d=We(h[0],this._params),p=We(h[1],this._params),m=f.output_channels,_=f.input_channels;if(m===void 0||_===void 0)throw new Error("dense() requires output_channels and input_channels named arguments");if(d.length!==m*_)throw new Error(`dense() weights array length (${String(d.length)}) must equal output_channels * input_channels (${String(m*_)})`);if(p.length!==m)throw new Error(`dense() bias array length (${String(p.length)}) must equal output_channels (${String(m)})`);n.push({type:"dense",weights:Array.from(d),bias:Array.from(p),outputChannels:m,inputChannels:_})}else if(l==="flatten")n.push({type:"flatten"});else if(l==="softmax")n.push({type:"softmax"});else if(l==="batch_norm"){let h=1e-5;for(const f of u){const d=g(f,"NamedArgExpr");if(d!=null){const p=w(d);j(p,"name")==="epsilon"&&(h=Number(z(w(g(p,"arg")),this._params)))}}n.push({type:"batchNorm",epsilon:h})}else if(l==="dropout"){if(u.length<1)throw new Error("dropout() requires 1 argument: dropout(p)");const h=Number(z(u[0],this._params));n.push({type:"dropout",p:h})}else if(l==="attention"){let h=1,f="content";for(const d of u){const p=g(d,"NamedArgExpr");if(p!=null){const m=w(p),_=j(m,"name");_==="n_heads"?h=Number(z(w(g(m,"arg")),this._params)):_==="mode"&&(f=String(z(w(g(m,"arg")),this._params)))}}n.push({type:"attention",nHeads:h,mode:f})}else if(l==="embed"){const h=[],f={};for(const y of u){const x=g(y,"NamedArgExpr");if(x!=null){const v=w(x);f[j(v,"name")]=Number(z(w(g(v,"arg")),this._params))}else h.push(y)}if(h.length===0)throw new Error("embed() requires vector argument");const d=We(h[0],this._params),p=f.in_channels??1;let m,_;if(f.grid_h!==void 0&&f.grid_w!==void 0)m=f.grid_h,_=f.grid_w;else{const y=Math.floor(Math.sqrt(d.length/p));y*y*p===d.length?(m=y,_=y):(m=0,_=0)}n.push({type:"embed",embedding:Array.from(d),gridH:m,gridW:_,inChannels:p})}else if(l==="global_pool"){let h="avg";for(const f of u){const d=g(f,"NamedArgExpr");if(d!=null){const p=w(d);j(p,"name")==="method"&&(h=String(z(w(g(p,"arg")),this._params)))}else h=ee(f,this._params)}if(!["avg","max","avg_max"].includes(h))throw new Error(`global_pool() method must be 'avg', 'max', or 'avg_max', got '${h}'`);n.push({type:"globalPool",method:h})}else throw new Error(`deep_fusion() unknown layer function: ${l}()`);continue}const a=g(o,"NamedArgExpr");if(a!=null){const l=w(a),u=j(l,"name"),h=z(w(g(l,"arg")),this._params);if(u==="alpha")r=Number(h);else if(u==="gating")s=String(h);else throw new Error(`Unknown option for deep_fusion: ${u}. Valid options: alpha, gating`);continue}throw new Error("deep_fusion() arguments must be layer() or propagate() calls")}if(n.length===0)throw new Error("deep_fusion requires at least one layer");return new ye(n,r,s,this._currentGraphName||void 0)}_makeAttentionFusionOp(e,t){const n=[],r={};for(const i of e)if(Q(i)||g(i,"FuncCall")!==null)n.push(this._compileCalibratedSignal(i,t));else{const a=g(i,"NamedArgExpr");if(a!=null){const l=w(a);r[j(l,"name")]=z(w(g(l,"arg")),this._params)}}if(n.length<2)throw new Error("fuse_attention requires at least 2 signals");const s=new Set(["normalized","alpha","base_rate"]),o=Object.keys(r).filter(i=>!s.has(i));if(o.length>0)throw new Error(`Unknown option(s) for fuse_attention: ${o.join(", ")}. Valid options: ${[...s].sort().join(", ")}`);try{const i=n.length,a=new Wr(i,6,Number(r.alpha??.5),!!(r.normalized??!1),r.base_rate??void 0),l=this._extractQueryFeatures(e,t);return new pt(n,a,l)}catch{return new ke(n,Number(r.alpha??.5))}}_makeMultiheadFusionOp(e,t){const n=[],r={};for(const i of e)if(Q(i)||g(i,"FuncCall")!==null)n.push(this._compileCalibratedSignal(i,t));else{const a=g(i,"NamedArgExpr");if(a!=null){const l=w(a);r[j(l,"name")]=z(w(g(l,"arg")),this._params)}}if(n.length<2)throw new Error("fuse_multihead requires at least 2 signals");const s=new Set(["n_heads","normalized","alpha"]),o=Object.keys(r).filter(i=>!s.has(i));if(o.length>0)throw new Error(`Unknown option(s) for fuse_multihead: ${o.join(", ")}. Valid options: ${[...s].sort().join(", ")}`);try{const i=n.length,a=new Wo(i,Number(r.n_heads??4),6,Number(r.alpha??.5),!!(r.normalized??!1)),l=this._extractQueryFeatures(e,t);return new pt(n,a,l)}catch{return new ke(n,Number(r.alpha??.5))}}_makeLearnedFusionOp(e,t){const n=[],r={};for(const i of e)if(Q(i)||g(i,"FuncCall")!==null)n.push(this._compileCalibratedSignal(i,t));else{const a=g(i,"NamedArgExpr");if(a!=null){const l=w(a);r[j(l,"name")]=z(w(g(l,"arg")),this._params)}}if(n.length<2)throw new Error("fuse_learned requires at least 2 signals");const s=new Set(["alpha"]),o=Object.keys(r).filter(i=>!s.has(i));if(o.length>0)throw new Error(`Unknown option(s) for fuse_learned: ${o.join(", ")}. Valid options: ${[...s].sort().join(", ")}`);try{const i=new Hr(n.length,Number(r.alpha??.5));return new kt(n,i)}catch{return new ke(n,Number(r.alpha??.5))}}_extractQueryFeatures(e,t){const n=new Float64Array(6);if(t.invertedIndex)try{const r=new Ho(t.invertedIndex);for(const s of e){const o=w(g(s,"FuncCall")??(Q(s)?s:{}));if(Object.keys(o).length>0){const i=ce(o);if(i==="text_match"||i==="bayesian_match"){const a=ve(o);if(a.length>=2){const l=ee(a[1],this._params),h=t.invertedIndex.analyzer.analyze(l);return r.extract(h)}}}}}catch{}return n}_foldStmtWhere(e){const t=g(e,"whereClause");if(t==null)return e;const n=this._foldConstants(w(t));return n===t?e:{...e,whereClause:n}}_foldConstants(e){return Object.keys(e).length===0||be(e)||g(e,"A_Const")!==null||X(e)||g(e,"ColumnRef")!==null?e:jn(e)||g(e,"A_Expr")!==null?this._foldAExpr(e):mi(e)||g(e,"BoolExpr")!==null?this._foldBoolExpr(e):Q(e)||g(e,"FuncCall")!==null?this._foldFuncCall(e):e}_foldAExpr(e){const t=w(g(e,"A_Expr")??e),n=this._foldConstants(w(g(t,"lexpr")??{})),r=this._foldConstants(w(g(t,"rexpr")??{}));if((be(n)||g(n,"A_Const")!==null)&&(be(r)||g(r,"A_Const")!==null))try{const s=new ie({params:this._params}),o={A_Expr:{...t,lexpr:n,rexpr:r}},i=s.evaluate(o,{});return ts(i)}catch{}if(n!==g(t,"lexpr")||r!==g(t,"rexpr")){const s={...t,lexpr:n,rexpr:r};return g(e,"A_Expr")!==null?{A_Expr:s}:s}return e}_foldBoolExpr(e){const t=w(g(e,"BoolExpr")??e),n=g(t,"boolop"),r=P(g(t,"args")),s=r.map(a=>this._foldConstants(a));if(s.every(a=>be(a)||g(a,"A_Const")!==null))try{const a=new ie({params:this._params}),l={BoolExpr:{boolop:n,args:s}},u=a.evaluate(l,{});return ts(u)}catch{}if(n===0||n==="AND_EXPR"){const a=[];for(const u of s){if(be(u)||g(u,"A_Const")!==null){if(ns(u)===!1)return{A_Const:{boolval:!1}};continue}a.push(u)}if(a.length===0)return{A_Const:{boolval:!0}};if(a.length===1)return a[0];const l={boolop:0,args:a};return g(e,"BoolExpr")!==null?{BoolExpr:l}:l}if(n===1||n==="OR_EXPR"){const a=[];for(const u of s){if(be(u)||g(u,"A_Const")!==null){if(ns(u)===!0)return{A_Const:{boolval:!0}};continue}a.push(u)}if(a.length===0)return{A_Const:{boolval:!1}};if(a.length===1)return a[0];const l={boolop:1,args:a};return g(e,"BoolExpr")!==null?{BoolExpr:l}:l}if(s.some((a,l)=>a!==r[l])){const a={boolop:n,args:s};return g(e,"BoolExpr")!==null?{BoolExpr:a}:a}return e}_foldFuncCall(e){const t=w(g(e,"FuncCall")??e),n=ce(t);if(di.has(n))return e;const r=P(g(t,"args"));if(r.length===0)return e;const s=r.map(i=>this._foldConstants(i));if(s.some((i,a)=>i!==r[a])){const i={...t,args:s};return g(e,"FuncCall")!==null?{FuncCall:i}:i}return e}_optimize(e,t,n){try{const r=t.invertedIndex;if(!r)return e;const s=r.stats,o=n?n._stats:null,i=n?n.name:void 0;return new Fe(s,{columnStats:o,indexManager:t.indexManager??void 0,tableName:i}).optimize(e)}catch{return e}}_executePlan(e,t){try{return new tn(t).execute(e)}catch{return e.execute(t)}}_explainPlan(e,t){try{const o=new tn(t).explain(e).split(`
|
|
15
|
+
`).map(i=>({plan:i}));return{columns:["plan"],rows:o}}catch{return{columns:["plan"],rows:[{plan:e.constructor.name}]}}}_scanAll(e,t){if(!e.documentStore)return new D([he(0,{score:0})]);let r=[...e.documentStore.docIds].sort((s,o)=>s-o);return t!==void 0&&t<r.length&&(r=r.slice(0,t)),new D(r.map(s=>he(s,{score:0})))}_chainOnSource(e,t){return e instanceof G&&e.source===null?new G(e.field,e.predicate,t):new H([t,e])}static _isGraphOperator(e){if(e==null)return!1;const t=e.constructor.name;return["TraverseOperator","RegularPathQueryOperator","PatternMatchOperator","TemporalTraverseOperator","TemporalPatternMatchOperator","CypherQueryOperator"].includes(t)}static _isJoinOperator(e){if(e==null)return!1;const t=e.constructor.name;return["InnerJoinOperator","OuterJoinOperator","CrossJoinOperator","IndexJoinOperator","SortMergeJoinOperator","ExprJoinOperator","LateralJoinOperator","TableScanOperator"].includes(t)}_collectJoinTables(e){const t=[];for(const n of e)this._walkFromForTables(n,t);return t}_walkFromForTables(e,t){const n=w(g(e,"RangeVar")??{});if(Object.keys(n).length>0){const o=ae(n),i=Ue(n)??o,a=this._tables.get(o);a&&t.push([i,a.columnNames]);return}const r=w(g(e,"JoinExpr")??{});if(Object.keys(r).length>0){const o=g(r,"larg"),i=g(r,"rarg");o!=null&&this._walkFromForTables(w(o),t),i!=null&&this._walkFromForTables(w(i),t);return}const s=w(g(e,"RangeSubselect")??{});if(Object.keys(s).length>0){const o=Ue(s)??"_derived",i=this._tables.get(o);i&&t.push([o,i.columnNames])}}_applyDeferredWhere(e,t,n){return e.filter(r=>n.evaluate(t,r)===!0)}static _collectAstTableRefs(e){const t=new Set;return le._walkAstForTables(e,t),t}static _walkAstForTables(e,t){if(e==null||typeof e!="object")return;if(Array.isArray(e)){for(const o of e)le._walkAstForTables(o,t);return}const n=e,r=n.RangeVar;if(r!==void 0){const o=j(r,"schemaname");if(o!=="information_schema"&&o!=="pg_catalog"){const i=j(r,"relname");i&&t.add(i)}return}const s=n.relname;if(typeof s=="string"&&s){const o=n.schemaname;o!=="information_schema"&&o!=="pg_catalog"&&t.add(s)}for(const o of Object.values(n))o!==null&&typeof o=="object"&&le._walkAstForTables(o,t)}_partitionWhereForJoins(e,t){const n=this._extractAndConjuncts(e),r=new Map,s=[];for(const i of n){const a=le._collectConjunctAliases(i);if(a.size===1){const l=a.values().next().value;if(t.has(l)){r.has(l)||r.set(l,[]),r.get(l).push(i);continue}}s.push(i)}const o=le._reconstructAnd(s);return[r,o]}static _collectConjunctAliases(e){const t=new Set;return le._walkForColumnAliases(e,t),t}static _walkForColumnAliases(e,t){const n=w(g(e,"ColumnRef")??{});if(Object.keys(n).length>0){const o=P(g(n,"fields"));if(o.length>=2){const i=o[0],a=J(i);a&&t.add(a)}return}if(X(e)){const o=P(g(w(g(e,"ColumnRef")??e),"fields"));if(o.length>=2){const i=o[0],a=J(i);a&&t.add(a)}return}for(const o of["lexpr","rexpr","args","arg","xpr","val"]){const i=g(e,o);if(i!=null)if(Array.isArray(i))for(const a of i)typeof a=="object"&&le._walkForColumnAliases(a,t);else typeof i=="object"&&le._walkForColumnAliases(i,t)}const r=w(g(e,"BoolExpr")??{});if(Object.keys(r).length>0){const o=P(g(r,"args"));for(const i of o)le._walkForColumnAliases(i,t)}const s=w(g(e,"A_Expr")??{});if(Object.keys(s).length>0){const o=g(s,"lexpr"),i=g(s,"rexpr");o!==null&&typeof o=="object"&&le._walkForColumnAliases(o,t),i!==null&&typeof i=="object"&&le._walkForColumnAliases(i,t)}}static _reconstructAnd(e){return e.length===0?null:e.length===1?e[0]:{BoolExpr:{boolop:0,args:e}}}_extractImplicitEquijoinPredicates(e,t){const n=[],r=w(g(e,"BoolExpr")??{});let s;if(Object.keys(r).length>0){const o=g(r,"boolop");o===0||o==="AND_EXPR"?s=P(g(r,"args")):s=[e]}else s=[e];for(const o of s){const i=w(g(o,"A_Expr")??{});if(Object.keys(i).length===0)continue;const a=P(g(i,"name"));if(a.length===0||J(a[a.length-1])!=="=")continue;const u=g(i,"lexpr"),h=g(i,"rexpr");if(u===null||h===null||!X(w(u))||!X(w(h)))continue;const f=w(g(w(u),"ColumnRef")??w(u)),d=w(g(w(h),"ColumnRef")??w(h)),p=P(g(f,"fields")),m=P(g(d,"fields"));if(p.length<2||m.length<2)continue;const _=J(p[0]),y=J(p[p.length-1]),x=J(m[0]),v=J(m[m.length-1]);!_||!y||!x||!v||!t.has(_)||!t.has(x)||n.push({leftAlias:_,leftCol:y,rightAlias:x,rightCol:v})}return n}_registerFkValidators(e,t,n){for(const r of n){const s=r.refTable,o=r.column,i=r.refColumn;t.fkInsertValidators.push(l=>{const u=l[o];if(u==null)return;const h=this._tables.get(s);if(!h)throw new Error(`Foreign key violation: parent table "${s}" does not exist`);if(!h.documentStore.hasValue(i,u))throw new Error(`Foreign key violation: ${e}.${o} = ${JSON.stringify(u)} not found in ${s}.${i}`)}),t.fkUpdateValidators.push((l,u)=>{const h=u[o];if(h==null)return;const f=this._tables.get(s);if(!f)throw new Error(`FOREIGN KEY constraint violated: parent table "${s}" does not exist`);if(!f.documentStore.hasValue(i,h))throw new Error(`FOREIGN KEY constraint violated: ${e}.${o} = ${JSON.stringify(h)} not found in ${s}.${i}`)});const a=this._tables.get(s);if(a){const l=e,u=t;a.fkDeleteValidators.push(h=>{const f=a.documentStore.get(h);if(!f)return;const d=f[i];if(d!=null&&u.documentStore.hasValue(o,d))throw new Error(`FOREIGN KEY constraint violated: row in "${s}" is still referenced from "${l}"`)}),a.fkUpdateValidators.push((h,f)=>{const d=h[i],p=f[i];if(d!==p&&d!=null&&u.documentStore.hasValue(o,d))throw new Error(`FOREIGN KEY constraint violated: row in "${s}" is still referenced from "${l}"`)})}}}_isPushablePredicate(e,t){const n=g(e,"A_Expr");if(n!=null){const s=w(n),o=g(s,"lexpr"),i=g(s,"rexpr");if(o!==null&&X(w(o)))try{const a=B(w(o));if(!t.has(a))return!1}catch{return!1}else return!1;if(i!==null){const a=w(i);if(!be(a)&&!Pt(a))return!1}return!0}const r=g(e,"NullTest");if(r!=null){const s=w(r),o=g(s,"arg");if(o!==null&&X(w(o)))try{const i=B(w(o));return t.has(i)}catch{return!1}}return!1}_tryPredicatePushdown(e,t){const n=g(e,"whereClause");if(n==null)return e;const r=P(g(e,"fromClause"));if(r.length!==1)return e;const s=r[0];let o=null;const i=w(g(s,"RangeVar")??{}),a=w(g(s,"RangeSubselect")??{});if(Object.keys(i).length>0){const p=ae(i);this._views.has(p)?o=this._views.get(p):this._inlinedCTEs.has(p)&&(o=this._inlinedCTEs.get(p))}else if(Object.keys(a).length>0){const p=g(a,"subquery");p!=null&&(o=w(g(w(p),"SelectStmt")??p))}if(o===null||g(o,"groupClause")!==null&&P(g(o,"groupClause")).length>0||g(o,"distinctClause")!==null&&g(o,"distinctClause")!==void 0||g(o,"limitCount")!==null&&g(o,"limitCount")!==void 0)return e;const l=P(g(o,"targetList"));for(const p of l){const m=w(g(p,"ResTarget")??p),_=g(m,"val");if(_!=null&&Q(w(_))&&rt(w(_)))return e}if(this._hasAggregates(l))return e;const u=new Set;for(const p of l){const m=w(g(p,"ResTarget")??p),_=j(m,"name");if(_)u.add(_);else{const y=g(m,"val");if(y!==null&&X(w(y)))try{u.add(B(w(y)))}catch{}}}if(u.size===0)return e;const[h,f]=this._splitPushable(w(n),u);if(h.length===0)return e;const d=h.length===1?h[0]:{BoolExpr:{boolop:0,args:h}};if(Object.keys(i).length>0){const p=ae(i);this._views.has(p)?this._views.set(p,le._injectWhere(this._views.get(p),d)):this._inlinedCTEs.has(p)&&this._inlinedCTEs.set(p,le._injectWhere(this._inlinedCTEs.get(p),d))}return{...e,whereClause:f}}_splitPushable(e,t){const n=w(g(e,"BoolExpr")??{});if(Object.keys(n).length>0){const r=g(n,"boolop");if(r===0||r==="AND_EXPR"){const s=P(g(n,"args")),o=[],i=[];for(const l of s)this._isPushablePredicate(l,t)?o.push(l):i.push(l);let a=null;return i.length===1?a=i[0]:i.length>1&&(a={BoolExpr:{boolop:0,args:i}}),[o,a]}}return this._isPushablePredicate(e,t)?[[e],null]:[[],e]}static _injectWhere(e,t){const n=g(e,"whereClause");let r;return n==null?r=t:r={BoolExpr:{boolop:0,args:[n,t]}},{...e,whereClause:r}}_extractNumericValue(e){const t=z(e,this._params);if(typeof t=="number")return t;if(typeof t=="string"){const n=Number(t);if(!isNaN(n))return n}throw new Error("Expected numeric constant or $N parameter, got "+JSON.stringify(e).slice(0,200))}static _isSelectStar(e){if(e.length===0)return!0;for(const t of e){const n=w(g(t,"ResTarget")??t),r=g(n,"val");if(r!=null&&tt(w(r)))return!0}return!1}static _hasComputedExpressions(e){for(const t of e){const n=w(g(t,"ResTarget")??t),r=g(n,"val");if(r==null)continue;const s=w(r);if(!X(s)){if(Q(s)){const o=ce(s);if(et.has(o)||o==="text_match"||o==="bayesian_match"||o==="bayesian_match_with_prior"||o==="knn_match"||o==="bayesian_knn_match"||o==="traverse_match"||o==="spatial_within")continue;return!0}if(be(s)||jn(s)||g(s,"A_Expr")!==null||g(s,"CaseExpr")!==null||rn(s)||g(s,"CoalesceExpr")!==null||Zr(s)||nn(s)||g(s,"SubLink")!==null)return!0}}return!1}_inferTargetName(e){const t=w(g(e,"ResTarget")??e),n=j(t,"name");if(n)return n;const r=g(t,"val");if(r==null)return"?column?";const s=w(r);if(X(s))try{return B(s)}catch{return"?column?"}if(Q(s)){const o=ce(s);if(et.has(o)){if(nt(s))return o;const i=ve(s);if(i.length>0&&X(i[0]))try{const a=B(i[0]);return`${o}_${a}`}catch{return o}return o}return o==="text_match"||o==="bayesian_match"||o==="bayesian_match_with_prior"?"_score":o}if(rn(s)){const o=w(g(s,"TypeCast")??s),i=g(o,"arg");if(i!==null&&X(w(i)))try{return B(w(i))}catch{}}return"?column?"}_buildExprTargets(e){const t=[];for(const n of e){const r=w(g(n,"ResTarget")??n),s=this._inferTargetName(n);let o=g(r,"val");if(o==null)continue;const i=w(o);if(Q(i)){const a=ce(i);(a==="text_match"||a==="bayesian_match"||a==="bayesian_match_with_prior")&&(o={ColumnRef:{fields:[{String:{sval:"_score"}}]}})}t.push([s,w(o)])}return t}_sortNeedsExtraCols(e,t){const n=new Set;for(const r of t){const s=w(g(r,"ResTarget")??r),o=g(s,"val");if(o!=null&&tt(w(o)))return!1;if(o!==null&&X(w(o))){try{n.add(B(w(o)))}catch{}const i=j(s,"name");i&&n.add(i)}else{const i=j(s,"name");i&&n.add(i)}}for(const r of e){const s=w(g(r,"SortBy")??r),o=w(g(s,"node"));if(X(o))try{const i=B(o);if(!n.has(i))return!0}catch{}}return!1}_buildGroupAliases(e,t){const n=new Map;for(const r of t){const s=w(g(r,"ResTarget")??r),o=g(s,"val"),i=j(s,"name");if(o!==null&&X(w(o))&&i)try{const a=B(w(o));e.includes(a)&&n.set(a,i)}catch{}}return n}_buildPostGroupTargets(e,t,n){let r=!1;for(const i of e){const a=w(g(i,"ResTarget")??i),l=g(a,"val");if(l==null)continue;const u=w(l);if(Q(u)){const h=ce(u);if(!et.has(h)||rt(u)){r=!0;break}}else if(!X(u)){const h=j(a,"name")||"?column?";if(!n.has(h)){r=!0;break}}}if(!r)return null;const s=new Set(t),o=[];for(const i of e){const a=w(g(i,"ResTarget")??i),l=j(a,"name")||this._inferTargetName(i);if(n.has(l)||s.has(l))o.push([l,{ColumnRef:{fields:[{String:{sval:l}}]}}]);else{const u=g(a,"val");if(u!==null&&X(w(u)))try{const h=B(w(u));o.push([l,{ColumnRef:{fields:[{String:{sval:h}}]}}])}catch{o.push([l,w(u)])}else o.push([l,w(u??{})])}}return o}_buildPreAggTargets(e,t,n,r){const s=[];for(let i=0;i<e.length;i++){const a=e[i];(Q(a)||g(a,"FuncCall")!==null)&&i<t.length&&s.push([t[i],a])}for(const i of n)i.inputExpr!==void 0&&s.push(["_agg_expr",i.inputExpr]);if(s.length===0)return null;const o=[];if(r)for(const i of r.columnNames)o.push([i,{ColumnRef:{fields:[{String:{sval:i}}]}}]);for(const[i,a]of s)o.push([i,a]);return o}_resolveGroupByCols(e,t){const n=new Map,r=[];for(const o of t){const i=w(g(o,"ResTarget")??o),a=g(i,"val"),l=j(i,"name");if(a!==null&&X(w(a)))try{const u=B(w(a));r.push(l||u),l&&n.set(l,u)}catch{r.push(l||"?column?")}else if(a!==null&&Q(w(a))){const u=ce(w(a));let h;if(nt(w(a)))h=u;else{const f=ve(w(a));let d=null;for(const p of f)if(X(p))try{d=B(p)}catch{}h=d!==null?`${u}_${d}`:u}r.push(l||h)}else r.push(l||"?column?")}const s=[];for(const o of e){if(be(o)){const i=z(o,[]);if(typeof i=="number"&&Number.isInteger(i)){const a=i-1;if(a>=0&&a<r.length){s.push(r[a]);continue}throw new Error(`GROUP BY position ${String(i)} is not in select list`)}}if(X(o))try{const i=B(o);s.push(n.get(i)??i);continue}catch{}if(Q(o)||g(o,"FuncCall")!==null){const i=ce(o);let a=null;for(const l of t){const u=w(g(l,"ResTarget")??l),h=g(u,"val"),f=j(u,"name");if(h!==null&&Q(w(h))&&ce(w(h))===i&&f){a=f;break}}if(a!==null)s.push(a);else{const l=ve(o);let u=null;for(const h of l)if(X(h))try{u=B(h)}catch{}s.push(u!==null?`${i}_${u}`:i)}continue}try{s.push(B(o))}catch{s.push("?column?")}}return s}_getTable(e){const t=this._tables.get(e);if(!t)throw new Error(`Table "${e}" does not exist`);return t}_substituteParams(e,t){const n=g(e,"ParamRef");if(n!=null){const o=w(n).number,i=t.get(o);return i!==void 0?i:e}const r={};for(const[s,o]of Object.entries(e))Array.isArray(o)?r[s]=o.map(i=>i!==null&&typeof i=="object"?this._substituteParams(i,t):i):o!==null&&typeof o=="object"?r[s]=this._substituteParams(o,t):r[s]=o;return r}_hasOuterRefs(e,t){if(X(e))try{const n=B(e);if(t.has(n))return!0;const r=gi(e);if(t.has(r))return!0}catch{}for(const n of Object.values(e))if(Array.isArray(n)){for(const r of n)if(r!==null&&typeof r=="object"&&this._hasOuterRefs(r,t))return!0}else if(n!==null&&typeof n=="object"&&this._hasOuterRefs(n,t))return!0;return!1}_buildSortKeys(e,t){const n=new Map,r=new Set,s=new Map;for(let i=0;i<t.length;i++){const a=w(g(t[i],"ResTarget")??t[i]),l=g(a,"val"),u=j(a,"name");if(l!=null&&!tt(w(l))){let h;try{h=u||this._deriveColumnName(w(l))}catch{h=u||"?column?"}if(n.set(i+1,h),u&&(r.add(u),X(w(l))))try{const f=B(w(l));s.set(f,u)}catch{}}}const o=[];for(const i of e){const a=w(g(i,"SortBy")??i),l=w(g(a,"node")),u=g(a,"sortby_dir"),h=u===2||u==="SORTBY_DESC"||String(u).includes("DESC"),f=!h,d=g(a,"sortby_nulls");let p;d===1||d==="SORTBY_NULLS_FIRST"||String(d).includes("FIRST")?p=!0:d===2||d==="SORTBY_NULLS_LAST"||String(d).includes("LAST")?p=!1:p=h;let m;if(be(l)){const _=Number(z(l,this._params)),y=n.get(_);if(!y)throw new Error(`ORDER BY position ${String(_)} is not in select list`);m=y}else{try{m=B(l)}catch{m=this._deriveColumnName(l)}!r.has(m)&&s.has(m)&&(m=s.get(m))}o.push({column:m,ascending:f,nullsFirst:p})}return o}}class Vn extends q{execute(e){const t=e.documentStore;if(!t)return new D;const n=[...t.docIds].sort((r,s)=>r-s);return new D(n.map(r=>he(r,{score:0})))}costEstimate(e){return e.totalDocs}}class $n extends q{constructor(t,n=null){super();b(this,"exprNode");b(this,"_subqueryExecutor");this.exprNode=t,this._subqueryExecutor=n}execute(t){const n=new ie,r=t.documentStore;if(!r)return new D;const s=[];for(const o of[...r.docIds].sort((i,a)=>i-a)){const i=r.get(o);if(!i)continue;n.evaluate(this.exprNode,i)&&s.push(he(o,{score:0}))}return new D(s)}costEstimate(t){return t.totalDocs}}class vi extends q{constructor(t,n,r,s,o){super();b(this,"source");b(this,"scorer");b(this,"terms");b(this,"field");b(this,"documentStore");this.source=t,this.scorer=n,this.terms=r,this.field=s,this.documentStore=o}execute(t){const n=this.source.execute(t),r=this.documentStore??t.documentStore,s=t.invertedIndex,o=[],i=this.scorer;for(const a of n){const l=a.docId,u=(r==null?void 0:r.get(l))??{},h=a.payload.positions.length>0?a.payload.positions.length:1,f=this.field??"_default";let d=h;s&&typeof s.getDocLength=="function"&&(d=s.getDocLength(l,f));const m=n.length,_=i.scoreWithPrior(h,d,m,u);o.push(he(l,{score:_}))}return new D(o)}costEstimate(t){return this.source.costEstimate(t)*1.1}}class wi extends q{constructor(t,n,r="embedding"){super();b(this,"queryVector");b(this,"k");b(this,"field");this.queryVector=t,this.k=n,this.field=r}execute(t){var o;const n=(o=t.vectorIndexes)==null?void 0:o[this.field];let r;n?r=n.searchKnn(this.queryVector,this.k):r=new je(this.queryVector,this.k,this.field).execute(t);const s=[];for(const i of r)s.push(he(i.docId,{score:(1+i.payload.score)/2}));return new D(s)}costEstimate(t){return(t.dimensions||128)*Math.log2(t.totalDocs+1)}}function es(c,e){switch(c){case"=":return new ln(e);case"!=":case"<>":return new Un(e);case">":return new Wn(Number(e));case">=":return new Hn(Number(e));case"<":return new Kn(Number(e));case"<=":return new Jn(Number(e));default:throw new Error(`Unsupported operator: ${c}`)}}function ts(c){if(c==null)return{A_Const:{isnull:!0}};if(typeof c=="boolean")return{A_Const:{boolval:c}};if(typeof c=="number")return Number.isInteger(c)?{A_Const:{ival:c}}:{A_Const:{fval:String(c)}};if(typeof c=="string")return{A_Const:{sval:c}};throw new Error(`Cannot convert ${typeof c} to A_Const`)}function ns(c){const e=w(g(c,"A_Const")??c);if(g(e,"isnull")===!0)return null;const t=g(e,"boolval");if(t!=null)return!!t;const n=g(e,"ival");if(n!=null)return Number(n)!==0;const r=g(e,"fval");if(r!=null)return parseFloat(String(r))!==0;const s=g(e,"sval");return s!=null?String(s).length>0:null}function rs(c){return"docIds"in c?c.docIds[0]:c.docId}class xi{constructor(e,t,n){b(this,"left");b(this,"right");b(this,"condition");this.left=e,this.right=t,this.condition=n}_getEntries(e,t){return e!==null&&typeof e=="object"&&"execute"in e&&typeof e.execute=="function"?[...e.execute(t).entries]:e}}class Si extends xi{execute(e){const t=this._getEntries(this.left,e),n=this._getEntries(this.right,e),r=t.length<=n.length,s=r?t:n,o=r?n:t,i=r?this.condition.leftField:this.condition.rightField,a=r?this.condition.rightField:this.condition.leftField,l=new Map;for(const h of s){const f=h.payload.fields[i];if(f==null)continue;let d=l.get(f);d||(d=[],l.set(f,d)),d.push(h)}const u=[];for(const h of o){const f=h.payload.fields[a];if(f==null)continue;const d=l.get(f);if(d)for(const p of d){const m=r?p:h,_=r?h:p,y=rs(m),x=rs(_);u.push({docIds:[y,x],payload:U({score:m.payload.score+_.payload.score,fields:{...m.payload.fields,..._.payload.fields}})})}}return new Se(u)}}class sn{constructor(e){b(this,"value");this.value=e}}class qn{constructor(e){b(this,"counts");this.counts=e}}class te{constructor(e,t){b(this,"_engine");b(this,"_table");b(this,"_root");this._engine=e,this._table=t,this._root=null}term(e,t){const n=new _e(e,t);return this._chain(n)}vector(e,t,n){const r=new Ee(e,t,n??"embedding");return this._chain(r)}knn(e,t,n){const r=new je(e,t,n??"embedding");return this._chain(r)}bayesianKnn(e,t,n="embedding",r){const s=new fr(e,t,n,(r==null?void 0:r.estimationMethod)??"kde",(r==null?void 0:r.baseRate)??.5,(r==null?void 0:r.weightSource)??"density_prior",(r==null?void 0:r.bm25Query)??null,(r==null?void 0:r.bm25Field)??null,(r==null?void 0:r.densityGamma)??1,(r==null?void 0:r.bandwidthScale)??1);return this._chain(s)}and(e){if(this._root===null||e._root===null)throw new Error("Both builders must have operators before combining");const t=new H([this._root,e._root]),n=new te(this._engine,this._table);return n._root=t,n}or(e){if(this._root===null||e._root===null)throw new Error("Both builders must have operators before combining");const t=new re([this._root,e._root]),n=new te(this._engine,this._table);return n._root=t,n}not(){if(this._root===null)throw new Error("Builder must have an operator before negation");const e=new de(this._root),t=new te(this._engine,this._table);return t._root=e,t}filter(e,t){if(e.includes(".")){const s=[];for(const a of e.split("."))/^\d+$/.test(a)?s.push(parseInt(a,10)):s.push(a);const o=new Qt(s,t,this._root),i=new te(this._engine,this._table);return i._root=o,i}const n=new G(e,t,this._root),r=new te(this._engine,this._table);return r._root=n,r}join(e,t,n){if(this._root===null||e._root===null)throw new Error("Both builders must have operators before joining");const r={leftField:t,rightField:n},s=new Si(this._root,e._root,r),o=new te(this._engine,this._table);return o._root=s,o}vectorJoin(e,t,n,r){if(this._root===null||e._root===null)throw new Error("Both builders must have operators before joining");const s=new Kr(this._root,e._root,t,n,r),o=new te(this._engine,this._table);return o._root=s,o}traverse(e,t,n=1){const r=new Fn(e,this._table,t??null,n);return this._chain(r)}temporalTraverse(e,t,n=1,r){const s=new Pn({startVertex:e,graph:this._table,temporalFilter:new Zt({timestamp:(r==null?void 0:r.timestamp)??null,timeRange:(r==null?void 0:r.timeRange)??null}),label:t??null,maxHops:n});return this._chain(s)}matchPattern(e){const t=new Dr(e,this._table);return this._chain(t)}rpq(e,t){const n=Tr(e),r=new Vr(n,this._table,t??null);return this._chain(r)}vertexAggregate(e,t="sum"){if(this._root===null)throw new Error("vertexAggregate requires a graph traversal source");const n={sum:i=>i.reduce((a,l)=>a+l,0),avg:i=>i.length>0?i.reduce((a,l)=>a+l,0)/i.length:0,min:i=>i.length>0?Math.min(...i):0,max:i=>i.length>0?Math.max(...i):0,count:i=>i.length},r=new $r(this._root,e,n[t]),s=this._engine._contextForTable(this._table),o=r.execute(s);if(o.length>0){const i=o.entries[0];return new sn(i.payload.fields._vertex_agg_result)}return new sn(0)}vectorExclude(e,t){if(this._root===null)throw new Error("vectorExclude requires a source query");const n=new En(this._root,e,t),r=new te(this._engine,this._table);return r._root=n,r}sparseThreshold(e){if(this._root===null)throw new Error("sparseThreshold requires a source query");const t=new Ne(this._root,e),n=new te(this._engine,this._table);return n._root=t,n}messagePassing(e=2,t="mean",n){const r=new Dn({kLayers:e,aggregation:t,propertyName:n??void 0,graph:this._table});return this._chain(r)}aggregate(e,t){const n=this._engine.getTable(this._table),r=this._buildContext(n);let s;if(this._root!==null)s=this._root.execute(r);else{const u=[...n.documentStore.docIds].sort((h,f)=>h-f).map(h=>({docId:h,payload:{positions:[],score:0,fields:{}}}));s=D.fromSorted(u)}const o=n.documentStore,i=[];for(const l of s){const u=o.getField(l.docId,e);typeof u=="number"&&i.push(u)}let a;switch(t.toLowerCase()){case"count":a=i.length;break;case"sum":a=i.reduce((l,u)=>l+u,0);break;case"avg":{const l=i.reduce((u,h)=>u+h,0);a=i.length>0?l/i.length:0;break}case"min":a=i.length>0?Math.min(...i):null;break;case"max":a=i.length>0?Math.max(...i):null;break;default:throw new Error(`Unknown aggregation function: ${t}`)}return new sn(a)}facet(e){const t=this._engine.getTable(this._table),n=this._buildContext(t),s=new Vs(e,this._root).execute(n),o=new Map;for(const i of s){const a=i.payload.fields._facet_value,l=i.payload.fields._facet_count;a!==void 0&&l!==void 0&&o.set(String(a),l)}return new qn(o)}vectorFacet(e,t,n){const r=this._engine.getTable(this._table),s=this._buildContext(r),i=new pr(e,t,n,this._root).execute(s),a=new Map;for(const l of i){const u=l.payload.fields._facet_value,h=l.payload.fields._facet_count;u!==void 0&&h!==void 0&&a.set(String(u),h)}return new qn(a)}pathFilter(e,t){const n=new Qt(e,t,this._root),r=new te(this._engine,this._table);return r._root=n,r}pathProject(...e){const t=new Ro(e,this._root),n=new te(this._engine,this._table);return n._root=t,n}unnest(e){const t=new Fo(e,this._root),n=new te(this._engine,this._table);return n._root=t,n}pathAggregate(e,t){const r={count:Yo,sum:Xo,avg:Qo,min:Zo,max:ei}[t.toLowerCase()];if(r===void 0)throw new Error(`Unknown aggregation: ${t}`);let s;if(typeof e=="string"){const a=[];for(const l of e.split("."))/^\d+$/.test(l)?a.push(parseInt(l,10)):a.push(l);s=a}else s=e;const o=new Po(s,new r,this._root),i=new te(this._engine,this._table);return i._root=o,i}scoreBm25(e,t){const r=this._engine._contextForTable(this._table).invertedIndex,o=(t?r.getFieldAnalyzer(t):r.analyzer).analyze(e),i=new xt(qt(),r.stats),a=new pe(i,this._root,o,t??null),l=new te(this._engine,this._table);return l._root=a,l}scoreBayesianBm25(e,t){const r=this._engine._contextForTable(this._table).invertedIndex,o=(t?r.getFieldAnalyzer(t):r.analyzer).analyze(e),i=new ct(Je(),r.stats),a=new pe(i,this._root,o,t??null),l=new te(this._engine,this._table);return l._root=a,l}scoreMultiFieldBayesian(e,t,n){const r=new Mn(t,e,n??null),s=new te(this._engine,this._table);return s._root=r,s}scoreBayesianWithPrior(e,t,n){if((n==null?void 0:n.priorFn)===void 0||n.priorFn===null)throw new Error("priorFn is required for scoreBayesianWithPrior");return this.scoreBayesianBm25(e,t)}learnParams(e,t,n){const r=(n==null?void 0:n.field)??"_default";return this._engine.learnScoringParams(this._table,r,e,t,{mode:(n==null?void 0:n.mode)??"balanced"})}fuseLogOdds(...e){let t=.5;const n=[];for(const o of e)typeof o=="number"?t=o:o._root!==null&&n.push(o);if(n.length===0)return this;const r=n.map(o=>o._root),s=new te(this._engine,this._table);return s._root=new ke(r,t),s}fuseProbAnd(...e){const t=e.filter(r=>r._root!==null).map(r=>r._root),n=new te(this._engine,this._table);return n._root=new Ve(t,"and"),n}fuseProbOr(...e){const t=e.filter(r=>r._root!==null).map(r=>r._root),n=new te(this._engine,this._table);return n._root=new Ve(t,"or"),n}fuseAttention(e,t=.5){const n=e.filter(i=>i._root!==null).map(i=>i._root);if(n.length<2)throw new Error("fuseAttention requires at least 2 signals");const r=new Wr(n.length,6,t),s=new Float64Array(6),o=new te(this._engine,this._table);return o._root=new pt(n,r,s),o}fuseLearned(e,t=.5){const n=e.filter(o=>o._root!==null).map(o=>o._root);if(n.length<2)throw new Error("fuseLearned requires at least 2 signals");const r=new Hr(n.length,t),s=new te(this._engine,this._table);return s._root=new kt(n,r),s}multiStage(e){const t=[];for(const[s,o]of e){if(s._root===null)throw new Error("Each stage must have an operator");t.push([s._root,o])}const n=new $e(t),r=new te(this._engine,this._table);return r._root=n,r}execute(){if(this._root===null)return new D;const e=this._engine._contextForTable(this._table);let t=this._root;if(e.invertedIndex){const r=e.invertedIndex.stats;t=new Fe(r).optimize(this._root)}return new tn(e).execute(t)}explain(){if(this._root===null)return"(empty query)";const e=this._engine._contextForTable(this._table);let t=this._root;if(e.invertedIndex){const r=e.invertedIndex.stats;t=new Fe(r).optimize(this._root)}return new tn(e).explain(t)}_chain(e){this._root!==null&&(e=new H([this._root,e]));const t=new te(this._engine,this._table);return t._root=e,t}_buildContext(e){const t={};for(const[r,s]of e.vectorIndexes)t[r]=s;const n={};for(const[r,s]of e.spatialIndexes)n[r]=s;return{documentStore:e.documentStore,invertedIndex:e.invertedIndex,vectorIndexes:t,spatialIndexes:n}}}class Ei{constructor(e){b(this,"_conn");b(this,"_finished");this._conn=e,this._finished=!1,this._conn.beginTransaction()}get active(){return!this._finished}commit(){if(this._finished)throw new Error("Transaction already finished");this._conn.commitTransaction(),this._finished=!0}rollback(){if(this._finished)throw new Error("Transaction already finished");this._conn.rollbackTransaction(),this._finished=!0}savepoint(e){if(this._finished)throw new Error("Transaction already finished");this._conn.savepoint(e)}releaseSavepoint(e){if(this._finished)throw new Error("Transaction already finished");this._conn.releaseSavepoint(e)}rollbackTo(e){if(this._finished)throw new Error("Transaction already finished");this._conn.rollbackToSavepoint(e)}autoRollback(){this._finished||this.rollback()}}class Ii{constructor(){b(this,"_index",new Map)}_makeKey(e,t){return`${t}\0${e.join("\0")}`}_pairKey(e,t){return`${String(e)}\0${String(t)}`}_parsePairKey(e){const t=e.split("\0");return[parseInt(t[0],10),parseInt(t[1],10)]}build(e,t,n){for(const r of n){const s=this._makeKey(r,t),o=new Set,i=e.vertexIdsInGraph(t);for(const a of i){const l=this._findReachable(e,t,a,r);for(const u of l)o.add(this._pairKey(a,u))}this._index.set(s,o)}}_findReachable(e,t,n,r){let s=new Set([n]);for(const o of r){const i=new Set;for(const a of s){const l=e.neighbors(a,t,o,"out");for(const u of l)i.add(u)}if(s=i,s.size===0)break}return[...s]}lookup(e,t){const n=this._makeKey(e,t),r=this._index.get(n);return r?[...r].map(s=>this._parsePairKey(s)):[]}hasPath(e,t){const n=this._makeKey(e,t);return this._index.has(n)}indexedPaths(){const e=[];for(const t of this._index.keys()){const n=t.split("\0");e.push(n.slice(1))}return e}}class zn{constructor(e=1,t=0,n=.5){b(this,"_transform");this._transform=new K.BayesianProbabilityTransform(e,t,n===.5?null:n)}fit(e,t,n){return this._transform.fit(e,t,n),this.params()}update(e,t,n){this._transform.update(e,t,n)}params(){return{alpha:this._transform.alpha,beta:this._transform.beta,baseRate:this._transform.baseRate??.5}}}class Ni{constructor(e){b(this,"_tables");b(this,"_views");b(this,"_prepared");b(this,"_sequences");b(this,"_tempTables");b(this,"_graphStore");b(this,"_versionedGraphs");b(this,"_pathIndexes");b(this,"_foreignServers");b(this,"_foreignTables");b(this,"_models");b(this,"_catalog");b(this,"_indexManager");b(this,"_transaction");b(this,"_compiler");b(this,"_dbPath");b(this,"_parallelWorkers");b(this,"_spillThreshold");this._dbPath=(e==null?void 0:e.dbPath)??null,this._parallelWorkers=(e==null?void 0:e.parallelWorkers)??4,this._spillThreshold=(e==null?void 0:e.spillThreshold)??0,this._tables=new Map,this._views=new Map,this._prepared=new Map,this._sequences=new Map,this._tempTables=new Set,this._graphStore=new cr,this._versionedGraphs=new Map,this._pathIndexes=new Map,this._foreignServers=new Map,this._foreignTables=new Map,this._models=new Map,this._catalog=null,this._indexManager=null,this._transaction=null,this._compiler=new le(this)}async sql(e,t){return this._compiler.execute(e,t)}getTable(e){const t=this._tables.get(e);if(t!==void 0)return t;const n=this._compiler.tables.get(e);if(n!==void 0)return this._tables.set(e,n),n;throw new Error(`Table not found: ${e}`)}hasTable(e){return this._tables.has(e)||this._compiler.tables.has(e)}registerTable(e,t){this._tables.set(e,t),this._compiler.tables.set(e,t)}addDocument(e,t,n,r){const s=this._tables.get(n);if(s===void 0)throw new Error(`Table '${n}' does not exist`);const o={...t};s.primaryKey!==null&&!(s.primaryKey in o)&&s.columns.get(s.primaryKey)!==void 0&&(o[s.primaryKey]=e);let i=null,a=null;if(r!=null){for(const[u,h]of s.columns)if(h.vectorDimensions!==null){i=u;break}i!==null&&(a=r,o[i]=Array.from(r))}s.documentStore.put(e,o);const l={};for(const[u,h]of Object.entries(o))typeof h=="string"&&(l[u]=h);if(Object.keys(l).length>0&&s.invertedIndex.addDocument(e,l),i!==null&&a!==null){const u=s.vectorIndexes.get(i);u!==void 0&&u.add(e,a)}}getDocument(e,t){const n=this._tables.get(t);if(n===void 0)throw new Error(`Table '${t}' does not exist`);return n.documentStore.get(e)}deleteDocument(e,t){const n=this._tables.get(t);if(n===void 0)throw new Error(`Table '${t}' does not exist`);n.documentStore.delete(e),n.invertedIndex.removeDocument(e)}getGraphStore(e){return this._graphStore}addGraphVertex(e,t){this._graphStore.addVertex(e,t)}addGraphEdge(e,t){this._graphStore.addEdge(e,t)}createGraph(e){return this._graphStore.createGraph(e),this._catalog!==null&&this._catalog.saveNamedGraph(e),this._graphStore}dropGraph(e){this._graphStore.dropGraph(e),this._catalog!==null&&this._catalog.dropNamedGraph(e)}getGraph(e){if(!this._graphStore.hasGraph(e))throw new Error(`Graph '${e}' does not exist`);return this._graphStore}hasGraph(e){return this._graphStore.hasGraph(e)}get graphStore(){return this._graphStore}estimateConvWeights(e,t,n,r="embedding"){return To(this,e,t,n,r)}saveModel(e,t){this._models.set(e,t),this._catalog!==null&&this._catalog.saveModel(e,t)}loadModel(e){const t=this._models.get(e);if(t!==void 0)return t;if(this._catalog!==null){const n=this._catalog.loadModel(e);return n!==null&&this._models.set(e,n),n}return null}deleteModel(e){this._models.delete(e),this._catalog!==null&&this._catalog.deleteModel(e)}buildPathIndex(e,t){if(!this._graphStore.hasGraph(e))throw new Error(`Graph '${e}' does not exist`);const n=new Ii;n.build(this._graphStore,e,t),this._pathIndexes.set(e,n),this._catalog!==null&&this._catalog.savePathIndex(e,t)}getPathIndex(e){return this._pathIndexes.get(e)??null}dropPathIndex(e){this._pathIndexes.delete(e),this._catalog!==null&&this._catalog.dropPathIndex(e)}createAnalyzer(e,t){const n=Le.fromDict(t);bs(e,n),this._catalog!==null&&this._catalog.saveAnalyzer(e,t)}dropAnalyzer(e){ws(e),this._catalog!==null&&this._catalog.dropAnalyzer(e)}setTableAnalyzer(e,t,n,r="both"){const s=this.getTable(e),o=vs(n);s.invertedIndex.setFieldAnalyzer(t,o,r),this._catalog!==null&&(r==="both"?(this._catalog.saveTableFieldAnalyzer(e,t,"index",n),this._catalog.saveTableFieldAnalyzer(e,t,"search",n)):this._catalog.saveTableFieldAnalyzer(e,t,r,n))}getTableAnalyzer(e,t,n="index"){const r=this._tables.get(e);if(r===void 0)throw new Error(`Table '${e}' does not exist`);return n==="search"?r.invertedIndex.getSearchAnalyzer(t):r.invertedIndex.getFieldAnalyzer(t)}saveScoringParams(e,t){this._catalog!==null&&this._catalog.saveScoringParams(e,t)}loadScoringParams(e){return this._catalog!==null?this._catalog.loadScoringParams(e):null}loadAllScoringParams(){return this._catalog!==null?this._catalog.loadAllScoringParams():[]}learnScoringParams(e,t,n,r,s){const o=(s==null?void 0:s.mode)??"balanced",i=this._tables.get(e);if(i===void 0)throw new Error(`Table '${e}' does not exist`);const a=this._contextForTable(e),l=a.invertedIndex,h=(t?l.getSearchAnalyzer(t):l.analyzer).analyze(n),f=new ct(Je(),l.stats),d=new _e(n,t||null),m=new pe(f,d,h,t||null).execute(a),_=new Map;for(const S of m)_.set(S.docId,S.payload.score);const y=[...i.documentStore.docIds].sort((S,N)=>S-N);if(r.length!==y.length)throw new Error(`labels length (${String(r.length)}) must match document count (${String(y.length)})`);const x=y.map(S=>_.get(S)??0),E=new zn().fit(x,r,{mode:o}),I=`${e}.${t}.${n}`;return this.saveScoringParams(I,E),E}updateScoringParams(e,t,n,r){const s=`${e}.${t}`,o=this.loadScoringParams(s);let i;o!==null?i=new zn(o.alpha??1,o.beta??0,o.base_rate??.5):i=new zn,i.update(n,r),this.saveScoringParams(s,i.params())}vectorBackgroundStats(e,t){const n=this._tables.get(e);if(n===void 0)return null;const r=n.vectorIndexes.get(t);return r!==void 0&&r.backgroundStats!==void 0?r.backgroundStats:null}begin(){if(this._catalog===null)throw new Error("Transactions require a persistent engine (dbPath)");if(this._transaction!==null&&this._transaction.active)throw new Error("Transaction already active");return this._transaction=new Ei(this._catalog.conn),this._transaction}query(e){return new te(this,e)}insert(e,t,n){const r=this.getTable(e);r.documentStore.put(t,n);const s={};for(const[o,i]of r.columns){const a=n[o];i.pythonType==="string"&&a!==null&&a!==void 0&&(s[o]=typeof a=="string"?a:String(a))}Object.keys(s).length>0&&r.invertedIndex.addDocument(t,s);for(const[o,i]of r.vectorIndexes){const a=n[o];a!=null&&(a instanceof Float64Array?i.add(t,a):Array.isArray(a)&&i.add(t,new Float64Array(a)))}}get dbPath(){return this._dbPath}get parallelWorkers(){return this._parallelWorkers}get spillThreshold(){return this._spillThreshold}get compiler(){return this._compiler}get catalog(){return this._catalog}get indexManager(){return this._indexManager}_contextForTable(e){const t=this._tables.get(e);if(t===void 0)throw new Error(`Table '${e}' does not exist`);const n={};for(const[s,o]of t.vectorIndexes)n[s]=o;const r={};for(const[s,o]of t.spatialIndexes)r[s]=o;return{documentStore:t.documentStore,invertedIndex:t.invertedIndex,vectorIndexes:n,spatialIndexes:r,graphStore:this._graphStore,indexManager:this._indexManager}}deepLearn(e,t,n){if(this._tables.get(e)===void 0)throw new Error(`Table '${e}' does not exist`);const s={...n,_model_name:t,_table:e,_trained_at:new Date().toISOString(),_status:"trained"};return this.saveModel(t,s),s}deepPredict(e,t){if(this.loadModel(e)===null)throw new Error(`Model '${e}' not found`);return t.map((r,s)=>({_input_idx:s,_model:e,_prediction:null,...r}))}applyGraphDelta(e,t){if(!this._graphStore.hasGraph(e))throw new Error(`Graph '${e}' does not exist`);if(t.removeEdges)for(const n of t.removeEdges)this._graphStore.removeEdge(n,e);if(t.removeVertices)for(const n of t.removeVertices)this._graphStore.removeVertex(n,e);if(t.addVertices)for(const n of t.addVertices)this._graphStore.addVertex(n,e);if(t.addEdges)for(const n of t.addEdges)this._graphStore.addEdge(n,e);this._catalog!==null&&this._catalog.saveNamedGraph(e)}createGraphVersion(e,t){if(!this._graphStore.hasGraph(e))throw new Error(`Graph '${e}' does not exist`);const n=this._versionedGraphs.get(e);if(n===void 0){const r={versions:new Map},s=new Map,o=new Map;for(const i of this._graphStore.verticesInGraph(e))s.set(i.vertexId,{...i});for(const i of this._graphStore.edgesInGraph(e))o.set(i.edgeId,{...i});r.versions.set(t,{vertices:s,edges:o}),this._versionedGraphs.set(e,r)}else{const r=new Map,s=new Map;for(const o of this._graphStore.verticesInGraph(e))r.set(o.vertexId,{...o});for(const o of this._graphStore.edgesInGraph(e))s.set(o.edgeId,{...o});n.versions.set(t,{vertices:r,edges:s})}}graphVersions(e){const t=this._versionedGraphs.get(e);return t===void 0?[]:[...t.versions.keys()]}restoreGraphVersion(e,t){const n=this._versionedGraphs.get(e);if(n===void 0)throw new Error(`No versions exist for graph '${e}'`);const r=n.versions.get(t);if(r===void 0)throw new Error(`Version '${t}' not found for graph '${e}'`);const s=this._graphStore.verticesInGraph(e);for(const o of s)this._graphStore.removeVertex(o.vertexId,e);for(const o of r.vertices.values())this._graphStore.addVertex(o,e);for(const o of r.edges.values())this._graphStore.addEdge(o,e)}calibrationReport(e,t){const r=this.loadAllScoringParams().filter(([o])=>o.startsWith(`${e}.${t}`)),s={table:e,field:t,numCalibrations:r.length,params:r.map(([o,i])=>({name:o,alpha:i.alpha??null,beta:i.beta??null,baseRate:i.base_rate??null}))};if(r.length>0){const o=r.map(([,a])=>a.alpha).filter(a=>typeof a=="number"),i=r.map(([,a])=>a.beta).filter(a=>typeof a=="number");o.length>0&&(s.mean_alpha=o.reduce((a,l)=>a+l,0)/o.length,s.std_alpha=o.length>1?Math.sqrt(o.reduce((a,l)=>a+(l-s.mean_alpha)**2,0)/(o.length-1)):0),i.length>0&&(s.mean_beta=i.reduce((a,l)=>a+l,0)/i.length)}return s}saveToCatalog(){if(this._catalog!==null){for(const[e,t]of this._tables)if(!this._tempTables.has(e)){const n=[];for(const[r,s]of t.columns)n.push({...s,name:r});this._catalog.saveTableSchema(e,n)}for(const[e,t]of this._sequences)this._catalog.setMetadata(`seq:${e}`,JSON.stringify(t));for(const e of this._graphStore.graphNames())this._catalog.saveNamedGraph(e);for(const[e,t]of this._models)this._catalog.saveModel(e,t)}}loadFromCatalog(){if(this._catalog===null)return;const e=this._catalog.loadTableSchemas();for(const[n]of e);const t=this._catalog.loadNamedGraphs();for(const n of t)this._graphStore.hasGraph(n)||this._graphStore.createGraph(n)}close(){this._transaction!==null&&this._transaction.active&&(this._transaction.rollback(),this._transaction=null),this._foreignTables.clear(),this._foreignServers.clear();for(const e of this._tempTables)this._tables.delete(e);this._tempTables.clear(),this._catalog!==null&&(this._catalog.close(),this._catalog=null),this._tables.clear(),this._graphStore.clear()}}$.AggregateResult=sn,$.Analyzer=Le,$.BM25Scorer=xt,$.BayesianBM25Scorer=ct,$.Between=un,$.ComplementOperator=de,$.Engine=Ni,$.Equals=ln,$.FacetResult=qn,$.FilterOperator=G,$.FlatVectorIndex=lr,$.GeneralizedPostingList=Se,$.GreaterThan=Wn,$.GreaterThanOrEqual=Hn,$.HierarchicalDocument=cs,$.ILike=Qn,$.InSet=cn,$.IndexStats=Bn,$.IntersectOperator=H,$.IsNotNull=fn,$.IsNull=hn,$.KNNOperator=je,$.LessThan=Kn,$.LessThanOrEqual=Jn,$.Like=Xn,$.MemoryDocumentStore=or,$.MemoryGraphStore=cr,$.MemoryInvertedIndex=ir,$.NotEquals=Un,$.Operator=q,$.PostingList=D,$.QueryBuilder=te,$.Table=Ut,$.TermOperator=_e,$.UnionOperator=re,$.createBM25Params=qt,$.createBayesianBM25Params=Je,$.keywordAnalyzer=rr,$.standardAnalyzer=Sn,$.whitespaceAnalyzer=nr,Object.defineProperty($,Symbol.toStringTag,{value:"Module"})}));
|
|
16
16
|
//# sourceMappingURL=uqa.umd.js.map
|