rawsql-ts 0.11.9-beta → 0.11.10-beta

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/index.min.js CHANGED
@@ -1,18 +1,18 @@
1
- "use strict";var qn=Object.defineProperty;var xr=Object.getOwnPropertyDescriptor;var Tr=Object.getOwnPropertyNames;var kr=Object.prototype.hasOwnProperty;var Ir=(o,e)=>{for(var t in e)qn(o,t,{get:e[t],enumerable:!0})},Nr=(o,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of Tr(e))!kr.call(o,r)&&r!==t&&qn(o,r,{get:()=>e[r],enumerable:!(n=xr(e,r))||n.enumerable});return o};var Pr=o=>Nr(qn({},"__esModule",{value:!0}),o);var ti={};Ir(ti,{ArrayExpression:()=>ge,ArrayIndexExpression:()=>ot,ArrayQueryExpression:()=>Se,ArraySliceExpression:()=>st,BetweenExpression:()=>ve,BinaryExpression:()=>C,BinarySelectQuery:()=>q,CTECollector:()=>ne,CTENormalizer:()=>De,CTENotFoundError:()=>bt,CaseExpression:()=>oe,CaseKeyValuePair:()=>we,CastExpression:()=>ce,ColumnReference:()=>S,CommentEditor:()=>pr,DuplicateCTEError:()=>vt,DuplicateDetectionMode:()=>Yn,DynamicQueryBuilder:()=>lr,Formatter:()=>Ge,FunctionCall:()=>j,IdentifierString:()=>x,InlineQuery:()=>se,InsertQuery:()=>qe,InsertQueryParser:()=>Zn,InvalidCTENameError:()=>pt,JsonMappingConverter:()=>Tt,JsonSchemaValidator:()=>cr,LiteralValue:()=>z,ParameterExpression:()=>T,ParenExpression:()=>X,PostgresJsonQueryBuilder:()=>Vt,QualifiedName:()=>Le,QueryBuilder:()=>ke,QueryFlowDiagramGenerator:()=>ar,RawString:()=>Q,SchemaCollector:()=>jt,SchemaManager:()=>Pt,SelectQueryParser:()=>M,SelectValueCollector:()=>Oe,SelectableColumnCollector:()=>Te,SimpleSelectQuery:()=>b,SqlFormatter:()=>ut,SqlPaginationInjector:()=>zt,SqlParamInjector:()=>_t,SqlSchemaValidator:()=>ur,SqlSortInjector:()=>Ht,StringSpecifierExpression:()=>Me,SwitchCaseArgument:()=>ye,TableSchema:()=>Mt,TableSourceCollector:()=>At,TupleExpression:()=>Ee,TypeTransformationPostProcessor:()=>$t,TypeTransformers:()=>Yr,TypeValue:()=>be,UnaryExpression:()=>Z,UpstreamSelectQueryFinder:()=>mt,VALID_PRESETS:()=>_r,ValueList:()=>H,ValuesQuery:()=>ie,WindowFrameBound:()=>_n,WindowFrameBoundStatic:()=>rt,WindowFrameBoundaryValue:()=>it,WindowFrameExpression:()=>Fe,WindowFrameSpec:()=>Re,WindowFrameType:()=>Kn,convertColumnsToLegacy:()=>Rt,convertModelDrivenMapping:()=>jn,convertToLegacyJsonMapping:()=>Hr,createJsonMappingFromSchema:()=>ei,createSchemaManager:()=>Xr,createTableColumnResolver:()=>Zr,extractTypeProtection:()=>tr,isLegacyFormat:()=>vr,isModelDrivenFormat:()=>gr,isUnifiedFormat:()=>Sr,processJsonMapping:()=>yr,toLegacyMapping:()=>er,transformDatabaseResult:()=>Gr,unifyJsonMapping:()=>wr,validateModelDrivenMapping:()=>Cr});module.exports=Pr(ti);var f=class{constructor(){this.comments=null}getKind(){return this.constructor.kind}accept(e){return e.visit(this)}toSqlString(e){return this.accept(e)}};var qe=class extends f{static{this.kind=Symbol("InsertQuery")}constructor(e){super(),this.insertClause=e.insertClause,this.selectQuery=e.selectQuery??null}};var se=class extends f{static{this.kind=Symbol("InlineQuery")}constructor(e){super(),this.selectQuery=e}},H=class extends f{static{this.kind=Symbol("ValueList")}constructor(e){super(),this.values=e}},S=class extends f{get namespaces(){return this.qualifiedName.namespaces}get column(){return this.qualifiedName.name instanceof x?this.qualifiedName.name:new x(this.qualifiedName.name.value)}static{this.kind=Symbol("ColumnReference")}constructor(e,t){super();let n=typeof t=="string"?new x(t):t;this.qualifiedName=new Le(mr(e),n)}toString(){return this.qualifiedName.toString()}getNamespace(){return this.qualifiedName.namespaces?this.qualifiedName.namespaces.map(e=>e.name).join("."):""}},j=class extends f{static{this.kind=Symbol("FunctionCall")}constructor(e,t,n,r,i=null){super(),this.qualifiedName=new Le(e,t),this.argument=n,this.over=r,this.withinGroup=i}get namespaces(){return this.qualifiedName.namespaces}get name(){return this.qualifiedName.name}},Kn=(n=>(n.Rows="rows",n.Range="range",n.Groups="groups",n))(Kn||{}),_n=(n=>(n.UnboundedPreceding="unbounded preceding",n.UnboundedFollowing="unbounded following",n.CurrentRow="current row",n))(_n||{}),rt=class extends f{static{this.kind=Symbol("WindowFrameStaticBound")}constructor(e){super(),this.bound=e}},it=class extends f{static{this.kind=Symbol("WindowFrameBoundary")}constructor(e,t){super(),this.value=e,this.isFollowing=t}},Re=class extends f{static{this.kind=Symbol("WindowFrameSpec")}constructor(e,t,n){super(),this.frameType=e,this.startBound=t,this.endBound=n}},Fe=class extends f{static{this.kind=Symbol("WindowFrameExpression")}constructor(e,t,n=null){super(),this.partition=e,this.order=t,this.frameSpec=n}},Z=class extends f{static{this.kind=Symbol("UnaryExpression")}constructor(e,t){super(),this.operator=new Q(e),this.expression=t}},C=class extends f{static{this.kind=Symbol("BinaryExpression")}constructor(e,t,n){super(),this.left=e,this.operator=new Q(t),this.right=n}},z=class extends f{static{this.kind=Symbol("LiteralExpression")}constructor(e,t){super(),this.value=e,this.isDollarString=t}},T=class extends f{static{this.kind=Symbol("ParameterExpression")}constructor(e,t=null){super(),this.name=new Q(e),this.value=t,this.index=null}},ye=class extends f{static{this.kind=Symbol("SwitchCaseArgument")}constructor(e,t=null){super(),this.cases=e,this.elseValue=t}},we=class extends f{static{this.kind=Symbol("CaseKeyValuePair")}constructor(e,t){super(),this.key=e,this.value=t}},Q=class extends f{static{this.kind=Symbol("RawString")}constructor(e){super(),this.value=e}},x=class extends f{static{this.kind=Symbol("IdentifierString")}constructor(e){super(),this.name=e}},X=class extends f{static{this.kind=Symbol("ParenExpression")}constructor(e){super(),this.expression=e}},ce=class extends f{static{this.kind=Symbol("CastExpression")}constructor(e,t){super(),this.input=e,this.castType=t}},oe=class extends f{static{this.kind=Symbol("CaseExpression")}constructor(e,t){super(),this.condition=e,this.switchCase=t}},ge=class extends f{static{this.kind=Symbol("ArrayExpression")}constructor(e){super(),this.expression=e}},Se=class extends f{static{this.kind=Symbol("ArrayQueryExpression")}constructor(e){super(),this.query=e}},ve=class extends f{static{this.kind=Symbol("BetweenExpression")}constructor(e,t,n,r){super(),this.expression=e,this.lower=t,this.upper=n,this.negated=r}},Me=class extends f{static{this.kind=Symbol("StringSpecifierExpression")}constructor(e,t){super(),this.specifier=new Q(e),this.value=new z(t)}},be=class extends f{static{this.kind=Symbol("TypeValue")}constructor(e,t,n=null){super(),this.qualifiedName=new Le(e,t),this.argument=n}get namespaces(){return this.qualifiedName.namespaces}get name(){return this.qualifiedName.name}getTypeName(){let e=this.qualifiedName.name instanceof Q?this.qualifiedName.name.value:this.qualifiedName.name.name;return this.qualifiedName.namespaces&&this.qualifiedName.namespaces.length>0?this.qualifiedName.namespaces.map(t=>t.name).join(".")+"."+e:e}},Ee=class extends f{static{this.kind=Symbol("TupleExpression")}constructor(e){super(),this.values=e}},st=class extends f{static{this.kind=Symbol("ArraySliceExpression")}constructor(e,t,n){super(),this.array=e,this.startIndex=t,this.endIndex=n}},ot=class extends f{static{this.kind=Symbol("ArrayIndexExpression")}constructor(e,t){super(),this.array=e,this.index=t}};function mr(o){if(o==null)return null;if(typeof o=="string")return o.trim()===""?null:[new x(o)];if(Array.isArray(o)){if(o.length===0)return null;if(typeof o[0]=="string"){let e=o.filter(t=>t.trim()!=="");return e.length===0?null:e.map(t=>new x(t))}else{let e=o.filter(t=>t.name.trim()!=="");return e.length===0?null:e}}return null}var Le=class extends f{static{this.kind=Symbol("QualifiedName")}constructor(e,t){super(),this.namespaces=mr(e),typeof t=="string"?this.name=new Q(t):this.name=t}toString(){let e=this.name instanceof Q?this.name.value:this.name.name;return this.namespaces&&this.namespaces.length>0?this.namespaces.map(t=>t.name).join(".")+"."+e:e}};var J=class extends f{static{this.kind=Symbol("SelectItem")}constructor(e,t=null){super(),this.value=e,this.identifier=t?new x(t):null}},U=class extends f{static{this.kind=Symbol("SelectClause")}constructor(e,t=null,n=[]){super(),this.items=e,this.distinct=t,this.hints=n}},ht=class extends f{static{this.kind=Symbol("Distinct")}constructor(){super()}},ft=class extends f{static{this.kind=Symbol("DistinctOn")}constructor(e){super(),this.value=e}},ae=class extends f{static{this.kind=Symbol("WhereClause")}constructor(e){super(),this.condition=e}},je=class extends f{static{this.kind=Symbol("PartitionByClause")}constructor(e){super(),this.value=e}},xe=class extends f{static{this.kind=Symbol("WindowFrameClause")}constructor(e,t){super(),this.name=new x(e),this.expression=t}},Ye=class extends f{static{this.kind=Symbol("WindowsClause")}constructor(e){super(),this.windows=e}};var pe=class extends f{static{this.kind=Symbol("OrderByClause")}constructor(e){super(),this.order=e}},Ie=class extends f{static{this.kind=Symbol("OrderByItem")}constructor(e,t,n){super(),this.value=e,this.sortDirection=t===null?"asc":t,this.nullsPosition=n}},me=class extends f{static{this.kind=Symbol("GroupByClause")}constructor(e){super(),this.grouping=e}},de=class extends f{static{this.kind=Symbol("HavingClause")}constructor(e){super(),this.condition=e}},B=class extends f{static{this.kind=Symbol("TableSource")}get namespaces(){return this.qualifiedName.namespaces}get table(){return this.qualifiedName.name instanceof x?this.qualifiedName.name:new x(this.qualifiedName.name.value)}get identifier(){return this.table}constructor(e,t){super();let n=typeof t=="string"?new x(t):t;this.qualifiedName=new Le(e,n)}getSourceName(){return this.qualifiedName.namespaces&&this.qualifiedName.namespaces.length>0?this.qualifiedName.namespaces.map(e=>e.name).join(".")+"."+(this.qualifiedName.name instanceof Q?this.qualifiedName.name.value:this.qualifiedName.name.name):this.qualifiedName.name instanceof Q?this.qualifiedName.name.value:this.qualifiedName.name.name}},Ke=class extends f{static{this.kind=Symbol("FunctionSource")}constructor(e,t){if(super(),typeof e=="object"&&e!==null&&"name"in e){let n=e;this.qualifiedName=new Le(n.namespaces,n.name)}else this.qualifiedName=new Le(null,e);this.argument=t}get namespaces(){return this.qualifiedName.namespaces}get name(){return this.qualifiedName.name}},We=class extends f{static{this.kind=Symbol("ParenSource")}constructor(e){super(),this.source=e}},_=class extends f{static{this.kind=Symbol("SubQuerySource")}constructor(e){super(),this.query=e}},R=class extends f{static{this.kind=Symbol("SourceExpression")}constructor(e,t){super(),this.datasource=e,this.aliasExpression=t}getAliasName(){return this.aliasExpression?this.aliasExpression.table.name:this.datasource instanceof B?this.datasource.getSourceName():null}},he=class extends f{static{this.kind=Symbol("JoinOnClause")}constructor(e){super(),this.condition=e}},Ne=class extends f{static{this.kind=Symbol("JoinUsingClause")}constructor(e){super(),this.condition=e}},fe=class extends f{static{this.kind=Symbol("JoinItem")}constructor(e,t,n,r){super(),this.joinType=new Q(e),this.source=t,this.condition=n,this.lateral=r}getSourceAliasName(){return this.source.aliasExpression?this.source.aliasExpression.table.name:this.source instanceof B?this.source.table.name:null}},W=class extends f{static{this.kind=Symbol("FromClause")}constructor(e,t){super(),this.source=e,this.joins=t}getSourceAliasName(){return this.source.aliasExpression?this.source.aliasExpression.table.name:this.source.datasource instanceof B?this.source.datasource.table.name:null}getSources(){let e=[this.source];if(this.joins)for(let t of this.joins)e.push(t.source);return e}},ee=class extends f{static{this.kind=Symbol("CommonTable")}constructor(e,t,n){super(),this.query=e,this.materialized=n,typeof t=="string"?this.aliasExpression=new Y(t,null):this.aliasExpression=t}getSourceAliasName(){return this.aliasExpression.table.name}},re=class extends f{static{this.kind=Symbol("WithClause")}constructor(e,t){super(),this.recursive=e,this.tables=t}},le=class extends f{static{this.kind=Symbol("LimitClause")}constructor(e){super(),this.value=e}};var $e=class extends f{static{this.kind=Symbol("OffsetClause")}constructor(e){super(),this.value=e}},_e=class extends f{static{this.kind=Symbol("FetchClause")}constructor(e){super(),this.expression=e}},at=class extends f{static{this.kind=Symbol("FetchExpression")}constructor(e,t,n){super(),this.type=e,this.count=t,this.unit=n}};var Be=class extends f{static{this.kind=Symbol("ForClause")}constructor(e){super(),this.lockMode=e}},Y=class extends f{static{this.kind=Symbol("SourceAliasExpression")}constructor(e,t){super(),this.table=new x(e),this.columns=t!==null?t.map(n=>new x(n)):null}},Gt=class extends f{static{this.kind=Symbol("ReturningClause")}constructor(e){super(),this.columns=e.map(t=>typeof t=="string"?new x(t):t)}},ze=class extends f{static{this.kind=Symbol("SetClause")}constructor(e){super(),this.items=e.map(t=>t instanceof Xe?t:new Xe(t.column,t.value))}},Xe=class extends f{static{this.kind=Symbol("SetClauseItem")}constructor(e,t){if(super(),typeof e=="object"&&e!==null&&"column"in e){let n=e,r=typeof n.column=="string"?new x(n.column):n.column;this.qualifiedName=new Le(n.namespaces,r)}else{let n=typeof e=="string"?new x(e):e;this.qualifiedName=new Le(null,n)}this.value=t}get namespaces(){return this.qualifiedName.namespaces}get column(){return this.qualifiedName.name instanceof x?this.qualifiedName.name:new x(this.qualifiedName.name.value)}getFullName(){return this.qualifiedName.toString()}},Ct=class extends f{static{this.kind=Symbol("UpdateClause")}constructor(e){super(),this.source=e}getSourceAliasName(){return this.source.aliasExpression?this.source.aliasExpression.table.name:this.source.datasource instanceof B?this.source.datasource.table.name:null}},Ze=class extends f{constructor(e,t){super(),this.source=e,this.columns=t.map(n=>new x(n))}};var $=(m=>(m[m.None=0]="None",m[m.Literal=1]="Literal",m[m.Operator=2]="Operator",m[m.OpenParen=4]="OpenParen",m[m.CloseParen=8]="CloseParen",m[m.Comma=16]="Comma",m[m.Dot=32]="Dot",m[m.Identifier=64]="Identifier",m[m.Command=128]="Command",m[m.Parameter=256]="Parameter",m[m.OpenBracket=512]="OpenBracket",m[m.CloseBracket=1024]="CloseBracket",m[m.Function=2048]="Function",m[m.StringSpecifier=4096]="StringSpecifier",m[m.Type=8192]="Type",m))($||{});var G=class{static isWhitespace(e){if(e.length!==1)return!1;let t=e.charCodeAt(0);return t===32||t===9||t===10||t===13}static isDigit(e){if(e.length!==1)return!1;let t=e.charCodeAt(0);return t>=48&&t<=57}static isHexChar(e){if(e.length!==1)return!1;let t=e.charCodeAt(0);return t>=48&&t<=57||t>=97&&t<=102||t>=65&&t<=70}static isOperatorSymbol(e){if(e.length!==1)return!1;let t=e.charCodeAt(0);return t===43||t===45||t===42||t===47||t===37||t===126||t===64||t===35||t===94||t===38||t===58||t===33||t===60||t===62||t===61||t===124||t===63}static isDelimiter(e){if(e.length!==1)return!1;let t=e.charCodeAt(0);return t===46||t===44||t===40||t===41||t===91||t===93||t===123||t===125||t===59||t===32||t===9||t===10||t===13?!0:t===43||t===45||t===42||t===47||t===37||t===126||t===64||t===35||t===94||t===38||t===58||t===33||t===60||t===62||t===61||t===124||t===63}static isNamedParameterPrefix(e){if(e.length!==1)return!1;let t=e.charCodeAt(0);return t===64||t===58||t===36}};var ue=class o{static getDebugPositionInfo(e,t){let n=Math.max(0,t-5),r=Math.min(e.length,t+5),i=e.slice(n,r),s=" ".repeat(t-n)+"^";return`${i}
1
+ "use strict";var qn=Object.defineProperty;var xr=Object.getOwnPropertyDescriptor;var Tr=Object.getOwnPropertyNames;var kr=Object.prototype.hasOwnProperty;var Ir=(o,e)=>{for(var t in e)qn(o,t,{get:e[t],enumerable:!0})},Pr=(o,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of Tr(e))!kr.call(o,r)&&r!==t&&qn(o,r,{get:()=>e[r],enumerable:!(n=xr(e,r))||n.enumerable});return o};var Nr=o=>Pr(qn({},"__esModule",{value:!0}),o);var ti={};Ir(ti,{ArrayExpression:()=>ge,ArrayIndexExpression:()=>ot,ArrayQueryExpression:()=>Se,ArraySliceExpression:()=>st,BetweenExpression:()=>ve,BinaryExpression:()=>C,BinarySelectQuery:()=>q,CTECollector:()=>ne,CTENormalizer:()=>De,CTENotFoundError:()=>bt,CaseExpression:()=>oe,CaseKeyValuePair:()=>we,CastExpression:()=>ce,ColumnReference:()=>S,CommentEditor:()=>pr,DuplicateCTEError:()=>vt,DuplicateDetectionMode:()=>Yn,DynamicQueryBuilder:()=>lr,Formatter:()=>Ge,FunctionCall:()=>j,IdentifierString:()=>x,InlineQuery:()=>se,InsertQuery:()=>qe,InsertQueryParser:()=>Zn,InvalidCTENameError:()=>pt,JsonMappingConverter:()=>Tt,JsonSchemaValidator:()=>cr,LiteralValue:()=>z,ParameterExpression:()=>T,ParenExpression:()=>X,PostgresJsonQueryBuilder:()=>Vt,QualifiedName:()=>Le,QueryBuilder:()=>ke,QueryFlowDiagramGenerator:()=>ar,RawString:()=>Q,SchemaCollector:()=>jt,SchemaManager:()=>Nt,SelectQueryParser:()=>M,SelectValueCollector:()=>Oe,SelectableColumnCollector:()=>Te,SimpleSelectQuery:()=>b,SqlFormatter:()=>ut,SqlPaginationInjector:()=>zt,SqlParamInjector:()=>_t,SqlSchemaValidator:()=>ur,SqlSortInjector:()=>Ht,StringSpecifierExpression:()=>Me,SwitchCaseArgument:()=>ye,TableSchema:()=>Mt,TableSourceCollector:()=>At,TupleExpression:()=>Ee,TypeTransformationPostProcessor:()=>$t,TypeTransformers:()=>Yr,TypeValue:()=>be,UnaryExpression:()=>Z,UpstreamSelectQueryFinder:()=>mt,VALID_PRESETS:()=>_r,ValueList:()=>H,ValuesQuery:()=>ie,WindowFrameBound:()=>_n,WindowFrameBoundStatic:()=>rt,WindowFrameBoundaryValue:()=>it,WindowFrameExpression:()=>Fe,WindowFrameSpec:()=>Re,WindowFrameType:()=>Kn,convertColumnsToLegacy:()=>Rt,convertModelDrivenMapping:()=>jn,convertToLegacyJsonMapping:()=>Hr,createJsonMappingFromSchema:()=>ei,createSchemaManager:()=>Xr,createTableColumnResolver:()=>Zr,extractTypeProtection:()=>tr,isLegacyFormat:()=>vr,isModelDrivenFormat:()=>gr,isUnifiedFormat:()=>Sr,processJsonMapping:()=>yr,toLegacyMapping:()=>er,transformDatabaseResult:()=>Gr,unifyJsonMapping:()=>wr,validateModelDrivenMapping:()=>Cr});module.exports=Nr(ti);var f=class{constructor(){this.comments=null}getKind(){return this.constructor.kind}accept(e){return e.visit(this)}toSqlString(e){return this.accept(e)}};var qe=class extends f{static{this.kind=Symbol("InsertQuery")}constructor(e){super(),this.insertClause=e.insertClause,this.selectQuery=e.selectQuery??null}};var se=class extends f{static{this.kind=Symbol("InlineQuery")}constructor(e){super(),this.selectQuery=e}},H=class extends f{static{this.kind=Symbol("ValueList")}constructor(e){super(),this.values=e}},S=class extends f{get namespaces(){return this.qualifiedName.namespaces}get column(){return this.qualifiedName.name instanceof x?this.qualifiedName.name:new x(this.qualifiedName.name.value)}static{this.kind=Symbol("ColumnReference")}constructor(e,t){super();let n=typeof t=="string"?new x(t):t;this.qualifiedName=new Le(mr(e),n)}toString(){return this.qualifiedName.toString()}getNamespace(){return this.qualifiedName.namespaces?this.qualifiedName.namespaces.map(e=>e.name).join("."):""}},j=class extends f{static{this.kind=Symbol("FunctionCall")}constructor(e,t,n,r,i=null){super(),this.qualifiedName=new Le(e,t),this.argument=n,this.over=r,this.withinGroup=i}get namespaces(){return this.qualifiedName.namespaces}get name(){return this.qualifiedName.name}},Kn=(n=>(n.Rows="rows",n.Range="range",n.Groups="groups",n))(Kn||{}),_n=(n=>(n.UnboundedPreceding="unbounded preceding",n.UnboundedFollowing="unbounded following",n.CurrentRow="current row",n))(_n||{}),rt=class extends f{static{this.kind=Symbol("WindowFrameStaticBound")}constructor(e){super(),this.bound=e}},it=class extends f{static{this.kind=Symbol("WindowFrameBoundary")}constructor(e,t){super(),this.value=e,this.isFollowing=t}},Re=class extends f{static{this.kind=Symbol("WindowFrameSpec")}constructor(e,t,n){super(),this.frameType=e,this.startBound=t,this.endBound=n}},Fe=class extends f{static{this.kind=Symbol("WindowFrameExpression")}constructor(e,t,n=null){super(),this.partition=e,this.order=t,this.frameSpec=n}},Z=class extends f{static{this.kind=Symbol("UnaryExpression")}constructor(e,t){super(),this.operator=new Q(e),this.expression=t}},C=class extends f{static{this.kind=Symbol("BinaryExpression")}constructor(e,t,n){super(),this.left=e,this.operator=new Q(t),this.right=n}},z=class extends f{static{this.kind=Symbol("LiteralExpression")}constructor(e,t){super(),this.value=e,this.isDollarString=t}},T=class extends f{static{this.kind=Symbol("ParameterExpression")}constructor(e,t=null){super(),this.name=new Q(e),this.value=t,this.index=null}},ye=class extends f{static{this.kind=Symbol("SwitchCaseArgument")}constructor(e,t=null){super(),this.cases=e,this.elseValue=t}},we=class extends f{static{this.kind=Symbol("CaseKeyValuePair")}constructor(e,t){super(),this.key=e,this.value=t}},Q=class extends f{static{this.kind=Symbol("RawString")}constructor(e){super(),this.value=e}},x=class extends f{static{this.kind=Symbol("IdentifierString")}constructor(e){super(),this.name=e}},X=class extends f{static{this.kind=Symbol("ParenExpression")}constructor(e){super(),this.expression=e}},ce=class extends f{static{this.kind=Symbol("CastExpression")}constructor(e,t){super(),this.input=e,this.castType=t}},oe=class extends f{static{this.kind=Symbol("CaseExpression")}constructor(e,t){super(),this.condition=e,this.switchCase=t}},ge=class extends f{static{this.kind=Symbol("ArrayExpression")}constructor(e){super(),this.expression=e}},Se=class extends f{static{this.kind=Symbol("ArrayQueryExpression")}constructor(e){super(),this.query=e}},ve=class extends f{static{this.kind=Symbol("BetweenExpression")}constructor(e,t,n,r){super(),this.expression=e,this.lower=t,this.upper=n,this.negated=r}},Me=class extends f{static{this.kind=Symbol("StringSpecifierExpression")}constructor(e,t){super(),this.specifier=new Q(e),this.value=new z(t)}},be=class extends f{static{this.kind=Symbol("TypeValue")}constructor(e,t,n=null){super(),this.qualifiedName=new Le(e,t),this.argument=n}get namespaces(){return this.qualifiedName.namespaces}get name(){return this.qualifiedName.name}getTypeName(){let e=this.qualifiedName.name instanceof Q?this.qualifiedName.name.value:this.qualifiedName.name.name;return this.qualifiedName.namespaces&&this.qualifiedName.namespaces.length>0?this.qualifiedName.namespaces.map(t=>t.name).join(".")+"."+e:e}},Ee=class extends f{static{this.kind=Symbol("TupleExpression")}constructor(e){super(),this.values=e}},st=class extends f{static{this.kind=Symbol("ArraySliceExpression")}constructor(e,t,n){super(),this.array=e,this.startIndex=t,this.endIndex=n}},ot=class extends f{static{this.kind=Symbol("ArrayIndexExpression")}constructor(e,t){super(),this.array=e,this.index=t}};function mr(o){if(o==null)return null;if(typeof o=="string")return o.trim()===""?null:[new x(o)];if(Array.isArray(o)){if(o.length===0)return null;if(typeof o[0]=="string"){let e=o.filter(t=>t.trim()!=="");return e.length===0?null:e.map(t=>new x(t))}else{let e=o.filter(t=>t.name.trim()!=="");return e.length===0?null:e}}return null}var Le=class extends f{static{this.kind=Symbol("QualifiedName")}constructor(e,t){super(),this.namespaces=mr(e),typeof t=="string"?this.name=new Q(t):this.name=t}toString(){let e=this.name instanceof Q?this.name.value:this.name.name;return this.namespaces&&this.namespaces.length>0?this.namespaces.map(t=>t.name).join(".")+"."+e:e}};var J=class extends f{static{this.kind=Symbol("SelectItem")}constructor(e,t=null){super(),this.value=e,this.identifier=t?new x(t):null}},U=class extends f{static{this.kind=Symbol("SelectClause")}constructor(e,t=null,n=[]){super(),this.items=e,this.distinct=t,this.hints=n}},ht=class extends f{static{this.kind=Symbol("Distinct")}constructor(){super()}},ft=class extends f{static{this.kind=Symbol("DistinctOn")}constructor(e){super(),this.value=e}},ae=class extends f{static{this.kind=Symbol("WhereClause")}constructor(e){super(),this.condition=e}},je=class extends f{static{this.kind=Symbol("PartitionByClause")}constructor(e){super(),this.value=e}},xe=class extends f{static{this.kind=Symbol("WindowFrameClause")}constructor(e,t){super(),this.name=new x(e),this.expression=t}},Ye=class extends f{static{this.kind=Symbol("WindowsClause")}constructor(e){super(),this.windows=e}};var pe=class extends f{static{this.kind=Symbol("OrderByClause")}constructor(e){super(),this.order=e}},Ie=class extends f{static{this.kind=Symbol("OrderByItem")}constructor(e,t,n){super(),this.value=e,this.sortDirection=t===null?"asc":t,this.nullsPosition=n}},me=class extends f{static{this.kind=Symbol("GroupByClause")}constructor(e){super(),this.grouping=e}},de=class extends f{static{this.kind=Symbol("HavingClause")}constructor(e){super(),this.condition=e}},B=class extends f{static{this.kind=Symbol("TableSource")}get namespaces(){return this.qualifiedName.namespaces}get table(){return this.qualifiedName.name instanceof x?this.qualifiedName.name:new x(this.qualifiedName.name.value)}get identifier(){return this.table}constructor(e,t){super();let n=typeof t=="string"?new x(t):t;this.qualifiedName=new Le(e,n)}getSourceName(){return this.qualifiedName.namespaces&&this.qualifiedName.namespaces.length>0?this.qualifiedName.namespaces.map(e=>e.name).join(".")+"."+(this.qualifiedName.name instanceof Q?this.qualifiedName.name.value:this.qualifiedName.name.name):this.qualifiedName.name instanceof Q?this.qualifiedName.name.value:this.qualifiedName.name.name}},Ke=class extends f{static{this.kind=Symbol("FunctionSource")}constructor(e,t){if(super(),typeof e=="object"&&e!==null&&"name"in e){let n=e;this.qualifiedName=new Le(n.namespaces,n.name)}else this.qualifiedName=new Le(null,e);this.argument=t}get namespaces(){return this.qualifiedName.namespaces}get name(){return this.qualifiedName.name}},We=class extends f{static{this.kind=Symbol("ParenSource")}constructor(e){super(),this.source=e}},_=class extends f{static{this.kind=Symbol("SubQuerySource")}constructor(e){super(),this.query=e}},R=class extends f{static{this.kind=Symbol("SourceExpression")}constructor(e,t){super(),this.datasource=e,this.aliasExpression=t}getAliasName(){return this.aliasExpression?this.aliasExpression.table.name:this.datasource instanceof B?this.datasource.getSourceName():null}},he=class extends f{static{this.kind=Symbol("JoinOnClause")}constructor(e){super(),this.condition=e}},Pe=class extends f{static{this.kind=Symbol("JoinUsingClause")}constructor(e){super(),this.condition=e}},fe=class extends f{static{this.kind=Symbol("JoinItem")}constructor(e,t,n,r){super(),this.joinType=new Q(e),this.source=t,this.condition=n,this.lateral=r}getSourceAliasName(){return this.source.aliasExpression?this.source.aliasExpression.table.name:this.source instanceof B?this.source.table.name:null}},W=class extends f{static{this.kind=Symbol("FromClause")}constructor(e,t){super(),this.source=e,this.joins=t}getSourceAliasName(){return this.source.aliasExpression?this.source.aliasExpression.table.name:this.source.datasource instanceof B?this.source.datasource.table.name:null}getSources(){let e=[this.source];if(this.joins)for(let t of this.joins)e.push(t.source);return e}},ee=class extends f{static{this.kind=Symbol("CommonTable")}constructor(e,t,n){super(),this.query=e,this.materialized=n,typeof t=="string"?this.aliasExpression=new Y(t,null):this.aliasExpression=t}getSourceAliasName(){return this.aliasExpression.table.name}},re=class extends f{static{this.kind=Symbol("WithClause")}constructor(e,t){super(),this.recursive=e,this.tables=t}},le=class extends f{static{this.kind=Symbol("LimitClause")}constructor(e){super(),this.value=e}};var $e=class extends f{static{this.kind=Symbol("OffsetClause")}constructor(e){super(),this.value=e}},_e=class extends f{static{this.kind=Symbol("FetchClause")}constructor(e){super(),this.expression=e}},at=class extends f{static{this.kind=Symbol("FetchExpression")}constructor(e,t,n){super(),this.type=e,this.count=t,this.unit=n}};var Be=class extends f{static{this.kind=Symbol("ForClause")}constructor(e){super(),this.lockMode=e}},Y=class extends f{static{this.kind=Symbol("SourceAliasExpression")}constructor(e,t){super(),this.table=new x(e),this.columns=t!==null?t.map(n=>new x(n)):null}},Gt=class extends f{static{this.kind=Symbol("ReturningClause")}constructor(e){super(),this.columns=e.map(t=>typeof t=="string"?new x(t):t)}},ze=class extends f{static{this.kind=Symbol("SetClause")}constructor(e){super(),this.items=e.map(t=>t instanceof Xe?t:new Xe(t.column,t.value))}},Xe=class extends f{static{this.kind=Symbol("SetClauseItem")}constructor(e,t){if(super(),typeof e=="object"&&e!==null&&"column"in e){let n=e,r=typeof n.column=="string"?new x(n.column):n.column;this.qualifiedName=new Le(n.namespaces,r)}else{let n=typeof e=="string"?new x(e):e;this.qualifiedName=new Le(null,n)}this.value=t}get namespaces(){return this.qualifiedName.namespaces}get column(){return this.qualifiedName.name instanceof x?this.qualifiedName.name:new x(this.qualifiedName.name.value)}getFullName(){return this.qualifiedName.toString()}},Ct=class extends f{static{this.kind=Symbol("UpdateClause")}constructor(e){super(),this.source=e}getSourceAliasName(){return this.source.aliasExpression?this.source.aliasExpression.table.name:this.source.datasource instanceof B?this.source.datasource.table.name:null}},Ze=class extends f{constructor(e,t){super(),this.source=e,this.columns=t.map(n=>new x(n))}};var $=(m=>(m[m.None=0]="None",m[m.Literal=1]="Literal",m[m.Operator=2]="Operator",m[m.OpenParen=4]="OpenParen",m[m.CloseParen=8]="CloseParen",m[m.Comma=16]="Comma",m[m.Dot=32]="Dot",m[m.Identifier=64]="Identifier",m[m.Command=128]="Command",m[m.Parameter=256]="Parameter",m[m.OpenBracket=512]="OpenBracket",m[m.CloseBracket=1024]="CloseBracket",m[m.Function=2048]="Function",m[m.StringSpecifier=4096]="StringSpecifier",m[m.Type=8192]="Type",m))($||{});var G=class{static isWhitespace(e){if(e.length!==1)return!1;let t=e.charCodeAt(0);return t===32||t===9||t===10||t===13}static isDigit(e){if(e.length!==1)return!1;let t=e.charCodeAt(0);return t>=48&&t<=57}static isHexChar(e){if(e.length!==1)return!1;let t=e.charCodeAt(0);return t>=48&&t<=57||t>=97&&t<=102||t>=65&&t<=70}static isOperatorSymbol(e){if(e.length!==1)return!1;let t=e.charCodeAt(0);return t===43||t===45||t===42||t===47||t===37||t===126||t===64||t===35||t===94||t===38||t===58||t===33||t===60||t===62||t===61||t===124||t===63}static isDelimiter(e){if(e.length!==1)return!1;let t=e.charCodeAt(0);return t===46||t===44||t===40||t===41||t===91||t===93||t===123||t===125||t===59||t===32||t===9||t===10||t===13?!0:t===43||t===45||t===42||t===47||t===37||t===126||t===64||t===35||t===94||t===38||t===58||t===33||t===60||t===62||t===61||t===124||t===63}static isNamedParameterPrefix(e){if(e.length!==1)return!1;let t=e.charCodeAt(0);return t===64||t===58||t===36}};var ue=class o{static getDebugPositionInfo(e,t){let n=Math.max(0,t-5),r=Math.min(e.length,t+5),i=e.slice(n,r),s=" ".repeat(t-n)+"^";return`${i}
2
2
  ${s}`}static skipWhiteSpace(e,t){let n=e.length;for(;t+4<=n&&e.slice(t,t+4)===" ";)t+=4;for(;t<n;){let r=e.charCodeAt(t);if(r!==32&&r!==9&&r!==10&&r!==13)break;t++}return t}static readLineComment(e,t){if(t+1>=e.length)return{newPosition:t,comment:null};if(e.charCodeAt(t)===45&&e.charCodeAt(t+1)===45){let n=t;for(t+=2;t<e.length&&e.charCodeAt(t)!==10;)t++;let r=e.slice(n+2,t).trim();return{newPosition:t,comment:r}}return{newPosition:t,comment:null}}static readBlockComment(e,t){if(t+3>=e.length)return{newPosition:t,comments:null};if(e.charCodeAt(t)===47&&e.charCodeAt(t+1)===42&&e.charCodeAt(t+2)!==43){let n=t;for(t+=2;t+1<e.length;){if(e.charCodeAt(t)===42&&e.charCodeAt(t+1)===47){t+=2;let r=e.slice(n+2,t-2).replace(/\r/g,"").split(`
3
3
  `);for(let i=0;i<r.length;i++)r[i]=r[i].trim();for(;r.length>0&&r[0]==="";)r.shift();for(;r.length>0&&r[r.length-1]==="";)r.pop();return{newPosition:t,comments:r}}t++}throw new Error(`Block comment is not closed. position: ${t}`)}return{newPosition:t,comments:null}}static readWhiteSpaceAndComment(e,t){let n=[],r=e.length;for(;t<r;){let i=t;if(t=o.skipWhiteSpace(e,t),t!==i)continue;let s=e.charCodeAt(t);if(s===45){let a=o.readLineComment(e,t);if(a.newPosition!==t){t=a.newPosition,a.comment&&n.push(a.comment.trim());continue}}else if(s===47){let a=o.readBlockComment(e,t);if(a.newPosition!==t){t=a.newPosition,a.comments&&n.push(...a.comments);continue}}break}return{position:t,lines:n}}static readRegularIdentifier(e,t){let n=this.tryReadRegularIdentifier(e,t);if(!n)throw new Error(`Unexpected character. position: ${t}
4
4
  ${o.getDebugPositionInfo(e,t)}`);return n}static tryReadRegularIdentifier(e,t){let n=t;for(;t<e.length&&!G.isDelimiter(e[t]);)t++;if(n===t)return null;for(;t+1<e.length&&e[t]==="["&&e[t+1]==="]";){let r=e.slice(0,n).trim();if(r===""||/[)]$/.test(r)||/\b(select|from|where|and|or|set|values|insert|update|delete)\s*$/i.test(r))break;t+=2}return{identifier:e.slice(n,t),newPosition:t}}};var te=class{constructor(e,t=0){this.input=e,this.position=t}getPosition(){return this.position}setPosition(e){this.position=e}isEndOfInput(e=0){return this.position+e>=this.input.length}canRead(e=0){return!this.isEndOfInput(e)}read(e){if(this.isEndOfInput())throw new Error(`Unexpected character. expect: ${e}, actual: EndOfInput, position: ${this.position}`);let t=this.input[this.position];if(t!==e)throw new Error(`Unexpected character. expect: ${e}, actual: ${t}, position: ${this.position}`);return this.position++,t}createLexeme(e,t,n=null){return e===128||e===2||e===2048?{type:e,value:t.toLowerCase(),comments:n}:{type:e,value:t,comments:n}}getDebugPositionInfo(e){return ue.getDebugPositionInfo(this.input,e)}};var Yt=class extends te{tryRead(e){if(this.isEndOfInput())return null;let t=this.input[this.position];if(t==="*")return this.position++,this.createLexeme(64,t);let n=ue.readRegularIdentifier(this.input,this.position);return this.position=n.newPosition,this.createLexeme(64,n.identifier)}};var Ae=class{constructor(e){this.trie=e}isEndOfInput(e,t,n=0){return t+n>=e.length}canParse(e,t,n=0){return!this.isEndOfInput(e,t,n)}parse(e,t){if(this.isEndOfInput(e,t))return null;this.trie.reset();let n=ue.tryReadRegularIdentifier(e,t);if(n===null)return null;let r=this.trie.pushLexeme(n.identifier.toLowerCase());if(r===0)return null;if(r===3)return{keyword:n.identifier,newPosition:n.newPosition};let i=n.identifier;if(t=ue.readWhiteSpaceAndComment(e,n.newPosition).position,this.isEndOfInput(e,t))return r===2?{keyword:i,newPosition:t}:null;for(;this.canParse(e,t);){let s=r,a=ue.tryReadRegularIdentifier(e,t);if(a!==null){if(r=this.trie.pushLexeme(a.identifier.toLowerCase()),r===0){if(s===2)break;return null}if(i+=" "+a.identifier,t=ue.readWhiteSpaceAndComment(e,a.newPosition).position,r===3)break}else{if(s===2)break;return null}}return{keyword:i,newPosition:t}}};var Qe=class{constructor(e){this.root=new Map;this.hasEndProperty=!1;this.hasMoreProperties=!1;for(let t of e)this.addKeyword(t);this.currentNode=this.root}addKeyword(e){let t=this.root;for(let n of e)t.has(n)||t.set(n,new Map),t=t.get(n);t.set("__end__",!0)}reset(){this.currentNode=this.root,this.hasEndProperty=!1,this.hasMoreProperties=!1}pushLexeme(e){return this.currentNode.has(e)?(this.currentNode=this.currentNode.get(e),this.hasEndProperty=this.currentNode.has("__end__"),this.hasMoreProperties=this.currentNode.size>(this.hasEndProperty?1:0),this.hasEndProperty&&!this.hasMoreProperties?3:this.hasEndProperty&&this.hasMoreProperties?2:1):0}};var Or=[["null"],["true"],["false"],["current_date"],["current_time"],["current_timestamp"],["localtime"],["localtimestamp"],["unbounded"],["normalized"],["nfc","normalized"],["nfd","normalized"],["nfkc","normalized"],["nfkd","normalized"],["nfc"],["nfd"],["nfkc"],["nfkd"]],Fr=new Qe(Or),Hn=new Ae(Fr),Xt=class extends te{tryRead(e){if(this.isEndOfInput())return null;let t=this.input[this.position],n=this.tryReadKeyword();if(n)return n;if(t==="."&&this.canRead(1)&&G.isDigit(this.input[this.position+1]))return this.createLexeme(1,this.readDigit());if(t==="'"){let r=this.readSingleQuotedString(!1);return this.createLexeme(1,r)}if(G.isDigit(t))return this.createLexeme(1,this.readDigit());if(t==="$"&&this.isDollarQuotedString())return this.createLexeme(1,this.readDollarQuotedString());if(t==="$"&&this.canRead(1)&&G.isDigit(this.input[this.position+1])){let r=this.position+1,i=!1;for(;r<this.input.length&&(G.isDigit(this.input[r])||this.input[r]===","||this.input[r]===".");){if(this.input[r]==="."||this.input[r]===","){i=!0;break}r++}if(i){let s=this.position;this.position++;let a=this.readMoneyDigit();return this.createLexeme(1,"$"+a)}}if((t==="+"||t==="-")&&this.determineSignOrOperator(e)==="sign"){let r=t;this.position++;let i=this.position;for(;this.canRead()&&G.isWhitespace(this.input[this.position]);)this.position++;if(this.canRead()&&(G.isDigit(this.input[this.position])||this.input[this.position]==="."&&this.canRead(1)&&G.isDigit(this.input[this.position+1])))return this.createLexeme(1,r==="-"?r+this.readDigit():this.readDigit());this.position=i-1}return null}tryReadKeyword(){let e=Hn.parse(this.input,this.position);return e?(this.position=e.newPosition,this.createLexeme(1,e.keyword)):null}determineSignOrOperator(e){return e===null?"sign":e.type&1||e.type&64||e.type&256||e.type&8?"operator":"sign"}readDigit(){let e=this.position,t=!1,n=!1;if(this.canRead(1)&&this.input[this.position]==="0"&&"xbo".includes(this.input[this.position+1].toLowerCase())){let r=this.input[this.position+1].toLowerCase();this.position+=2;let i=r==="x";for(;this.canRead();){let s=this.input[this.position];if(G.isDigit(s)||i&&G.isHexChar(s))this.position++;else break}return this.input.slice(e,this.position)}for(this.input[e]==="."&&(t=!0,this.position++);this.canRead();){let r=this.input[this.position];if(r==="."&&!t)t=!0;else if((r==="e"||r==="E")&&!n)n=!0,this.canRead(1)&&(this.input[this.position+1]==="+"||this.input[this.position+1]==="-")&&this.position++;else if(!G.isDigit(r))break;this.position++}if(e===this.position)throw new Error(`Unexpected character. position: ${e}
5
5
  ${this.getDebugPositionInfo(e)}`);return this.input[e]==="."?"0"+this.input.slice(e,this.position):this.input.slice(e,this.position)}readMoneyDigit(){let e=this.position,t=!1;for(;this.canRead();){let n=this.input[this.position];if(n==="."&&!t)t=!0;else if(!(n===","&&!t)){if(!G.isDigit(n))break}this.position++}if(e===this.position)throw new Error(`Unexpected character. position: ${e}
6
6
  ${this.getDebugPositionInfo(e)}`);return this.input.slice(e,this.position)}readSingleQuotedString(e){let t=this.position,n=!1;for(this.read("'");this.canRead();){let r=this.input[this.position];if(this.position++,r==="\\"&&this.canRead(1)){this.position++;continue}else if(r==="'"){n=!0;break}}if(n===!1)throw new Error(`Single quote is not closed. position: ${t}
7
7
  ${this.getDebugPositionInfo(t)}`);return e?this.input.slice(t,this.position):this.input.slice(t+1,this.position-1)}isDollarQuotedString(){if(!this.canRead(1))return!1;if(this.input[this.position+1]==="$")return!0;let e=this.position+1;for(;e<this.input.length;){let t=this.input[e];if(t==="$")return!0;if(!this.isAlphanumeric(t)&&t!=="_")return!1;e++}return!1}readDollarQuotedString(){let e=this.position;this.position++;let t="";for(;this.canRead()&&this.input[this.position]!=="$";)t+=this.input[this.position],this.position++;if(!this.canRead())throw new Error(`Unexpected end of input while reading dollar-quoted string tag at position ${e}`);this.position++;let n="$"+t+"$",r=n,i="";for(;this.canRead();){if(this.input.substring(this.position,this.position+r.length)===r)return this.position+=r.length,n+i+r;i+=this.input[this.position],this.position++}throw new Error(`Unclosed dollar-quoted string starting at position ${e}. Expected closing tag: ${r}`)}isAlphanumeric(e){if(e.length!==1)return!1;let t=e.charCodeAt(0);return t>=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122}};var Zt=class extends te{constructor(e){super(e)}tryRead(e){if(this.isEndOfInput())return null;if(this.canRead(1)&&this.input[this.position]==="$"&&this.input[this.position+1]==="{"){this.position+=2;let n=this.position;for(;this.canRead()&&this.input[this.position]!=="}";)this.position++;if(this.isEndOfInput())throw new Error(`Unexpected end of input. Expected closing '}' for parameter at position ${n}`);let r=this.input.slice(n,this.position);if(r.length===0)throw new Error("Empty parameter name is not allowed: found ${} at position "+(n-2));return this.position++,this.createLexeme(256,"${"+r+"}")}let t=this.input[this.position];if(G.isNamedParameterPrefix(t)){if(this.canRead(1)&&G.isOperatorSymbol(this.input[this.position+1])||t===":"&&this.isInArraySliceContext()||t==="$"&&this.isDollarQuotedString())return null;if(t==="$"&&this.canRead(1)&&G.isDigit(this.input[this.position+1])){let i=this.position+1,s=!1;for(;i<this.input.length&&(G.isDigit(this.input[i])||this.input[i]===","||this.input[i]===".");){if(this.input[i]==="."||this.input[i]===","){s=!0;break}i++}if(s)return null}this.position++;let n=this.position;for(;this.canRead()&&!G.isDelimiter(this.input[this.position]);)this.position++;let r=this.input.slice(n,this.position);return this.createLexeme(256,t+r)}if(t==="?"){if(this.canRead(1)){let n=this.input[this.position+1];if(n==="|"||n==="&")return null}return e&&(e.type&64||e.type&1)?null:(this.position++,this.createLexeme(256,t))}return null}isInArraySliceContext(){let e=this.position-1,t=0,n=0;for(;e>=0;){let r=this.input[e];if(r==="]")t++;else if(r==="["){if(t--,t<0){if(e>0){let i=this.input[e-1];if(/[a-zA-Z0-9_)\]]/.test(i))return!0}if(e===0)return!1;break}}else r===")"?n++:r==="("&&n--;e--}return!1}isDollarQuotedString(){if(!this.canRead(1))return!1;if(this.input[this.position+1]==="$")return!0;let e=this.position+1;for(;e<this.input.length;){let t=this.input[e];if(t==="$")return!0;if(!this.isAlphanumeric(t)&&t!=="_")return!1;e++}return!1}isAlphanumeric(e){if(e.length!==1)return!1;let t=e.charCodeAt(0);return t>=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122}};var en=class o extends te{static{this.SPECIAL_SYMBOL_TOKENS={".":32,",":16,"(":4,")":8,"[":512,"]":1024}}tryRead(e){if(this.isEndOfInput())return null;let t=this.input[this.position];return t in o.SPECIAL_SYMBOL_TOKENS?(this.position++,this.createLexeme(o.SPECIAL_SYMBOL_TOKENS[t],t)):null}};var tn=class{constructor(e,t=0){this.cacheHits=0;this.cacheMisses=0;this.input=e,this.position=t,this.readers=[],this.tokenCache=new Map}register(e){return this.readers.push(e),this}registerAll(e){return e.forEach(t=>this.register(t)),this}setPosition(e){this.position=e;for(let t of this.readers)t.setPosition(e)}tryRead(e,t){if(this.tokenCache.has(e))return this.cacheHits++,this.tokenCache.get(e)||null;this.cacheMisses++,this.setPosition(e);let n=null;for(let r of this.readers)if(n=r.tryRead(t),n){this.position=r.getPosition();break}for(let r of this.readers)r.setPosition(this.position);return this.tokenCache.set(e,n),n}getMaxPosition(){let e=this.position;for(let t of this.readers){let n=t.getPosition();n>e&&(e=n)}return e}getInput(){return this.input}getCacheStats(){let e=this.cacheHits+this.cacheMisses,t=e>0?this.cacheHits/e:0;return{hits:this.cacheHits,misses:this.cacheMisses,ratio:t}}};var Lr=new Qe([["and"],["or"],["is"],["is","not"],["is","distinct","from"],["is","not","distinct","from"],["like"],["ilike"],["in"],["exists"],["between"],["not","like"],["not","ilike"],["not","in"],["not","exists"],["not","between"],["escape"],["uescape"],["similar","to"],["not","similar","to"],["similar"],["placing"],["rlike"],["regexp"],["mod"],["xor"],["not"],["both"],["leading"],["trailing"],["both","from"],["leading","from"],["trailing","from"],["year","from"],["month","from"],["day","from"],["hour","from"],["minute","from"],["second","from"],["dow","from"],["doy","from"],["isodow","from"],["quarter","from"],["week","from"],["epoch","from"],["at","time","zone"]]),Ar=new Qe([["date"],["time"],["timestamp"],["timestamptz"],["timetz"],["interval"],["boolean"],["integer"],["bigint"],["smallint"],["numeric"],["decimal"],["real"],["double","precision"],["double","precision"],["character","varying"],["time","without","time","zone"],["time","with","time","zone"],["timestamp","without","time","zone"],["timestamp","with","time","zone"]]),Qr=new Ae(Lr),Br=new Ae(Ar);var nn=class extends te{tryRead(e){if(this.isEndOfInput())return null;let t=this.input[this.position];if(G.isOperatorSymbol(t)){let r=this.position;for(;this.canRead()&&G.isOperatorSymbol(this.input[this.position]);){if(this.canRead(1)){let s=this.input[this.position];if(s==="-"&&this.input[this.position+1]==="-")break;if(s==="/"&&this.input[this.position+1]==="*")break}this.position++}let i=this.input.slice(r,this.position);return this.createLexeme(2,i)}let n=Br.parse(this.input,this.position);return n!==null?(this.position=n.newPosition,this.createLexeme(8258,n.keyword)):(n=Qr.parse(this.input,this.position),n!==null?(this.position=n.newPosition,this.createLexeme(2,n.keyword)):null)}};var Vr=new Qe([["join"],["inner","join"],["cross","join"],["left","join"],["left","outer","join"],["right","join"],["right","outer","join"],["full","join"],["full","outer","join"],["natural","join"],["natural","inner","join"],["natural","left","join"],["natural","left","outer","join"],["natural","right","join"],["natural","right","outer","join"],["natural","full","join"],["natural","full","outer","join"]]),Rr=new Qe([["with"],["recursive"],["materialized"],["not","materialized"],["select"],["from"],["distinct"],["distinct","on"],["where"],["group","by"],["having"],["order","by"],["limit"],["offset"],["fetch"],["first"],["next"],["row"],["row","only"],["rows","only"],["percent"],["percent","with","ties"],["for"],["update"],["share"],["key","share"],["no","key","update"],["union"],["union","all"],["intersect"],["intersect","all"],["except"],["except","all"],["beteen"],["window"],["over"],["partition","by"],["range"],["rows"],["groups"],["within","group"],["current","row"],["unbounded","preceding"],["unbounded","following"],["preceding"],["following"],["on"],["using"],["lateral"],["case"],["case","when"],["when"],["then"],["else"],["end"],["insert","into"],["update"],["delete","from"],["merge","into"],["matched"],["not","matched"],["update","set"],["do","nothing"],["values"],["set"],["returning"],["create","table"],["create","temporary","table"],["tablesample"],["as"],["asc"],["desc"],["nulls","first"],["nulls","last"]]),$r=new Ae(Rr),zn=new Ae(Vr),rn=class extends te{tryRead(e){if(this.isEndOfInput())return null;let t=zn.parse(this.input,this.position);if(t!==null)return this.position=t.newPosition,this.createLexeme(128,t.keyword);let n=$r.parse(this.input,this.position);if(n!==null)return this.position=n.newPosition,this.createLexeme(128,n.keyword);if(this.canRead(2)&&this.input[this.position]==="/"&&this.input[this.position+1]==="*"&&this.input[this.position+2]==="+"){this.position+=3;let r=this.position;for(;this.position+1<this.input.length;){if(this.input[this.position]==="*"&&this.input[this.position+1]==="/")return this.position+=2,this.createLexeme(128,"/*+ "+this.input.slice(r,this.position-2).trim()+" */");this.position++}throw new Error(`Block comment is not closed. position: ${this.position}`)}return null}};var Mr=new Set(["e'","E'","x'","X'","b'","B'"]),jr=new Set(["u&'","U&'"]),sn=class extends te{tryRead(e){let t=this.position;return this.canRead(1)&&Mr.has(this.input.slice(t,t+2))?(this.position+=1,this.createLexeme(4096,this.input.slice(t,this.position))):this.canRead(2)&&jr.has(this.input.slice(t,t+3))?(this.position+=2,this.createLexeme(4096,this.input.slice(t,this.position))):null}};var Wr=new Qe([["grouping","sets"],["array"]]),Dr=new Ae(Wr),on=class extends te{tryRead(e){if(this.isEndOfInput())return null;let t=Dr.parse(this.input,this.position);if(t!==null)return this.position=t.newPosition,this.createLexeme(2048,t.keyword);let n=ue.tryReadRegularIdentifier(this.input,this.position);if(!n)return null;this.position=n.newPosition;var r=ue.readWhiteSpaceAndComment(this.input,this.position).position-this.position;return this.canRead(r)&&this.input[this.position+r]==="("?this.createLexeme(2048,n.identifier):null}};var Jr=new Qe([["double","precision"],["character","varying"],["time","without","time","zone"],["time","with","time","zone"],["timestamp","without","time","zone"],["timestamp","with","time","zone"]]),Ur=new Ae(Jr),an=class extends te{tryRead(e){if(this.isEndOfInput())return null;let t=Ur.parse(this.input,this.position);if(t!==null)return this.position=t.newPosition,this.createLexeme(8192,t.keyword);if(e===null)return null;let n=ue.tryReadRegularIdentifier(this.input,this.position);return n?(this.position=n.newPosition,e.type&128&&e.value==="as"?this.createLexeme(8256,n.identifier):e.type&2&&e.value==="::"?this.createLexeme(8192,n.identifier):null):null}};var ln=class extends te{tryRead(e){if(this.isEndOfInput())return null;let t=this.input[this.position];if(t==="`"){let n=this.readEscapedIdentifier("`");return this.createLexeme(64,n)}if(t==='"'){let n=this.readEscapedIdentifier('"');return this.createLexeme(64,n)}if(t==="["&&this.isSqlServerBracketIdentifier(e)){let n=this.readEscapedIdentifier("]");return this.createLexeme(64,n)}return null}isSqlServerBracketIdentifier(e){if(e?.value==="array")return!1;let t=this.position+1,n=t;for(;n<this.input.length&&this.input[n]!=="]";){let i=this.input[n];if(i===":"||i===","||i==="+"||i==="-"||i==="*"||i==="/"||i==="("||i===")")return!1;n++}if(n>=this.input.length)return!1;let r=this.input.slice(t,n).trim();return r===""?!1:/^[a-zA-Z_][a-zA-Z0-9_]*(\.[a-zA-Z_][a-zA-Z0-9_]*)*$/.test(r)}readEscapedIdentifier(e){let t=this.position;for(this.position++;this.canRead()&&this.input[this.position]!==e;)this.position++;if(t===this.position)throw new Error(`Closing delimiter is not found. position: ${t}, delimiter: ${e}
8
- ${this.getDebugPositionInfo(t)}`);return this.position++,this.input.slice(t+1,this.position-1)}};var P=class{constructor(e){this.input=e,this.position=0,this.readerManager=new tn(e).register(new ln(e)).register(new Zt(e)).register(new sn(e)).register(new Xt(e)).register(new en(e)).register(new rn(e)).register(new nn(e)).register(new an(e)).register(new on(e)).register(new Yt(e))}isEndOfInput(e=0){return this.position+e>=this.input.length}canRead(e=0){return!this.isEndOfInput(e)}readLexmes(){let e=Math.ceil(this.input.length/8),t=new Array(e),n=0,r=this.readComment(),i=r.lines;this.position=r.position;let s=null;for(;this.canRead()&&this.input[this.position]!==";";){let a=this.readerManager.tryRead(this.position,s);if(a===null)throw new Error(`Unexpected character. actual: ${this.input[this.position]}, position: ${this.position}
9
- ${this.getDebugPositionInfo(this.position)}`);this.position=this.readerManager.getMaxPosition();let l=this.readComment();this.position=l.position,a.type&16||a.type&2?l.lines.length>0&&i.push(...l.lines):((i.length>0||l.lines.length>0)&&this.addCommentsToToken(a,i,l.lines),i=[]),t[n++]=a,s=a}if(i.length>0&&n>0){let a=t[n-1];a.comments===null&&(a.comments=[]),a.comments.push(...i)}return n===e?t:t.slice(0,n)}addPendingCommentsToLastToken(e,t){if(t.length>0&&e.length>0){let n=e[e.length-1];n.comments===null&&(n.comments=[]),n.comments.push(...t)}}addCommentsToToken(e,t,n){(t.length>0||n.length>0)&&(e.comments===null&&(e.comments=[]),t.length>0&&e.comments.unshift(...t),n.length>0&&e.comments.push(...n))}readComment(){return ue.readWhiteSpaceAndComment(this.input,this.position)}getDebugPositionInfo(e){return ue.getDebugPositionInfo(this.input,e)}};var Pe=class o{static parseFromLexeme(e,t){let{identifiers:n,newIndex:r}=o.parseEscapedOrDotSeparatedIdentifiers(e,t),{namespaces:i,name:s}=o.extractNamespacesAndName(n),a=0;return r>t&&(a=e[r-1].type),{namespaces:i,name:new x(s),newIndex:r,lastTokenType:a}}static parse(e){let n=new P(e).readLexmes(),r=this.parseFromLexeme(n,0);if(r.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[r.newIndex].value}" at position ${r.newIndex}. The name is complete but additional tokens were found.`);return{namespaces:r.namespaces,name:r.name}}static parseEscapedOrDotSeparatedIdentifiers(e,t){let n=t,r=[];for(;n<e.length;){if(e[n].type&512){if(n++,n>=e.length||!(e[n].type&64||e[n].type&128))throw new Error(`Expected identifier after '[' at position ${n}`);if(r.push(e[n].value),n++,n>=e.length||e[n].value!=="]")throw new Error(`Expected closing ']' after identifier at position ${n}`);n++}else if(e[n].type&64)r.push(e[n].value),n++;else if(e[n].type&2048)r.push(e[n].value),n++;else if(e[n].type&8192)r.push(e[n].value),n++;else if(e[n].value==="*"){r.push(e[n].value),n++;break}if(n<e.length&&e[n].type&32)n++;else break}return{identifiers:r,newIndex:n}}static extractNamespacesAndName(e){if(!e||e.length===0)throw new Error("Identifier list is empty");return e.length===1?{namespaces:null,name:e[0]}:{namespaces:e.slice(0,-1),name:e[e.length-1]}}};var un=class{static parseFromLexeme(e,t){let{namespaces:n,name:r,newIndex:i}=Pe.parseFromLexeme(e,t);return{value:new S(n,r),newIndex:i}}};var Ft=class{static parseFromLexeme(e,t){let n=t,r=e[n].value,i,s=Hn.parse(r.toLowerCase(),0);if(s){let a=new Q(s.keyword);return n++,{value:a,newIndex:n}}if(/^[+-]?\d+(\.\d+)?([eE][+-]?\d+)?$/.test(r))return i=Number(r),n++,{value:new z(i),newIndex:n};{let a=/^\$[^$]*\$[\s\S]*\$[^$]*\$$/.test(r);return a?i=r:r.startsWith("'")&&r.endsWith("'")?i=r.slice(1,-1):i=r,n++,{value:new z(i,a),newIndex:n}}}};var cn=class{static parseFromLexeme(e,t){let n=t;if(n+1<e.length&&e[n].type&4&&(e[n+1].value==="select"||e[n+1].value==="values"||e[n+1].value==="with")){n+=1;let r=M.parseFromLexeme(e,n);if(n=r.newIndex,n>=e.length||e[n].type!==8)throw new Error(`Expected ')' at index ${n}, but found ${e[n].value}`);return n++,{value:new se(r.value),newIndex:n}}else{let r=k.parseArgument(4,8,e,t);return n=r.newIndex,{value:new X(r.value),newIndex:n}}}};var pn=class{static parseFromLexeme(e,t){let n=t;if(n<e.length&&e[n].type&2){let r=e[n].value;if(n++,r==="*")return{value:new S(null,"*"),newIndex:n};let i=k.parseFromLexeme(e,n);return n=i.newIndex,{value:new Z(r,i.value),newIndex:n}}throw new Error(`Invalid unary expression at index ${t}: ${e[t].value}`)}};var mn=class{static parseFromLexeme(e,t){let n=t,r=e[n].value;r.startsWith("${")&&r.endsWith("}")?r=r.slice(2,-1):r=r.slice(1);let i=new T(r);return n++,{value:i,newIndex:n}}};var dn=class{static parseFromLexeme(e,t){let n=t,r=e[n].value;if(n++,n>=e.length||e[n].type!==1)throw new Error(`Expected string literal after string specifier at index ${n}`);let i=e[n].value;return n++,{value:new Me(r,i),newIndex:n}}};var hn=class{static parseFromLexeme(e,t){let n=t,r=e[n];return r.value==="case"?(n++,this.parseCaseExpression(e,n)):r.value==="case when"?(n++,this.parseCaseWhenExpression(e,n)):this.parseModifierUnaryExpression(e,n)}static parseModifierUnaryExpression(e,t){let n=t;if(n<e.length&&e[n].type&128){let r=e[n].value;n++;let i=k.parseFromLexeme(e,n);return{value:new Z(r,i.value),newIndex:i.newIndex}}throw new Error(`Invalid modifier unary expression at index ${n}, Lexeme: ${e[n].value}`)}static parseCaseExpression(e,t){let n=t,r=k.parseFromLexeme(e,n);n=r.newIndex;let i=this.parseSwitchCaseArgument(e,n,[]);return n=i.newIndex,{value:new oe(r.value,i.value),newIndex:n}}static parseCaseWhenExpression(e,t){let n=t,r=this.parseCaseConditionValuePair(e,n);n=r.newIndex;let i=[r.value],s=this.parseSwitchCaseArgument(e,n,i);return n=s.newIndex,{value:new oe(null,s.value),newIndex:n}}static parseSwitchCaseArgument(e,t,n){let r=t,i=[...n],s=null;for(;r<e.length&&this.isCommandWithValue(e[r],"when");){r++;let l=this.parseCaseConditionValuePair(e,r);r=l.newIndex,i.push(l.value)}if(r<e.length&&this.isCommandWithValue(e[r],"else")){r++;let l=k.parseFromLexeme(e,r);s=l.value,r=l.newIndex}if(r<e.length&&this.isCommandWithValue(e[r],"end"))r++;else throw new Error(`The CASE expression requires 'end' keyword at the end (index ${r})`);if(i.length===0)throw new Error(`The CASE expression requires at least one WHEN clause (index ${r})`);return{value:new ye(i,s),newIndex:r}}static isCommandWithValue(e,t){return(e.type&128)!==0&&e.value===t}static parseCaseConditionValuePair(e,t){let n=t,r=k.parseFromLexeme(e,n);if(n=r.newIndex,n>=e.length||!(e[n].type&128)||e[n].value!=="then")throw new Error(`Expected 'then' after WHEN condition at index ${n}`);n++;let i=k.parseFromLexeme(e,n);return n=i.newIndex,{value:new we(r.value,i.value),newIndex:n}}};var et=class{static parse(e){let n=new P(e).readLexmes(),r=this.parseFromLexeme(n,0);if(r.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[r.newIndex].value}" at position ${r.newIndex}. The ORDER BY clause is complete but there are additional tokens.`);return r.value}static parseFromLexeme(e,t){let n=t;if(e[n].value!=="order by")throw new Error(`Syntax error at position ${n}: Expected 'ORDER BY' keyword but found "${e[n].value}". ORDER BY clauses must start with the ORDER BY keywords.`);n++;let r=[],i=this.parseItem(e,n);for(r.push(i.value),n=i.newIndex;n<e.length&&e[n].type&16;){n++;let s=this.parseItem(e,n);r.push(s.value),n=s.newIndex}if(r.length===0)throw new Error(`Syntax error at position ${t}: No ordering expressions found. The ORDER BY clause requires at least one expression to order by.`);return{value:new pe(r),newIndex:n}}static parseItem(e,t){let n=t,r=k.parseFromLexeme(e,n),i=r.value;if(n=r.newIndex,n>=e.length)return{value:i,newIndex:n};let s=n>=e.length?null:e[n].value==="asc"?(n++,"asc"):e[n].value==="desc"?(n++,"desc"):null,a=n>=e.length?null:e[n].value==="nulls first"?(n++,"first"):e[n].value==="nulls last"?(n++,"last"):null;return s===null&&a===null?{value:i,newIndex:n}:{value:new Ie(i,s,a),newIndex:n}}};var fn=class{static parse(e){let n=new P(e).readLexmes(),r=this.parseFromLexeme(n,0);if(r.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[r.newIndex].value}" at position ${r.newIndex}. The PARTITION BY clause is complete but there are additional tokens.`);return r.value}static parseFromLexeme(e,t){let n=t;if(e[n].value!=="partition by")throw new Error(`Syntax error at position ${n}: Expected 'PARTITION BY' keyword but found "${e[n].value}". PARTITION BY clauses must start with the PARTITION BY keywords.`);n++;let r=[],i=k.parseFromLexeme(e,n);for(r.push(i.value),n=i.newIndex;n<e.length&&e[n].type&16;){n++;let s=k.parseFromLexeme(e,n);r.push(s.value),n=s.newIndex}if(r.length===0)throw new Error(`Syntax error at position ${t}: No partition expressions found. The PARTITION BY clause requires at least one expression to partition by.`);return r.length===1?{value:new je(r[0]),newIndex:n}:{value:new je(new H(r)),newIndex:n}}};var yt=class{static parse(e){let n=new P(e).readLexmes(),r=this.parseFromLexeme(n,0);if(r.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[r.newIndex].value}" at position ${r.newIndex}. The window frame expression is complete but there are additional tokens.`);return r.value}static parseFromLexeme(e,t){let n=t;if(e[n].type!==4)throw new Error(`Syntax error at position ${n}: Expected opening parenthesis '(' but found "${e[n].value}".`);n++;let r=null,i=null,s=null;if(n<e.length&&e[n].value==="partition by"){let a=fn.parseFromLexeme(e,n);r=a.value,n=a.newIndex}if(n<e.length&&e[n].value==="order by"){let a=et.parseFromLexeme(e,n);i=a.value,n=a.newIndex}if(n<e.length&&this.isFrameTypeKeyword(e[n].value)){let a=this.parseFrameSpec(e,n);s=a.value,n=a.newIndex}if(n>=e.length||e[n].type!==8)throw new Error(`Syntax error at position ${n}: Missing closing parenthesis ')' for window frame. Each opening parenthesis must have a matching closing parenthesis.`);return n++,{value:new Fe(r,i,s),newIndex:n}}static isFrameTypeKeyword(e){let t=e;return t==="rows"||t==="range"||t==="groups"}static parseFrameSpec(e,t){let n=t,r=e[n].value,i;switch(r){case"rows":i="rows";break;case"range":i="range";break;case"groups":i="groups";break;default:throw new Error(`Syntax error at position ${n}: Invalid frame type "${e[n].value}". Expected one of: ROWS, RANGE, GROUPS.`)}if(n++,n<e.length&&e[n].value==="between"){n++;let s=this.parseFrameBoundary(e,n),a=s.value;if(n=s.newIndex,n>=e.length||e[n].value!=="and")throw new Error(`Syntax error at position ${n}: Expected 'AND' keyword in BETWEEN clause.`);n++;let l=this.parseFrameBoundary(e,n),u=l.value;return n=l.newIndex,{value:new Re(i,a,u),newIndex:n}}else{let s=this.parseFrameBoundary(e,n),a=s.value;return n=s.newIndex,{value:new Re(i,a,null),newIndex:n}}}static parseFrameBoundary(e,t){let n=t;if(n<e.length&&e[n].type&128){let r=e[n].value,i;switch(r){case"current row":i="current row";break;case"unbounded preceding":i="unbounded preceding";break;case"unbounded following":i="unbounded following";break;default:throw new Error(`Syntax error at position ${n}: Invalid frame type "${e[n].value}". Expected one of: ROWS, RANGE, GROUPS.`)}return{value:new rt(i),newIndex:n+1}}else if(n<e.length&&e[n].type&1){let r=k.parseFromLexeme(e,n);if(n=r.newIndex,n<e.length&&e[n].type&128){let i=e[n].value,s;if(i==="preceding")s=!1;else if(i==="following")s=!0;else throw new Error(`Syntax error at position ${n}: Expected 'preceding' or 'following' after numeric value in window frame boundary.`);return n++,{value:new it(r.value,s),newIndex:n}}else throw new Error(`Syntax error at position ${n}: Expected 'preceding' or 'following' after numeric value in window frame boundary.`)}throw new Error(`Syntax error at position ${n}: Expected a valid frame boundary component.`)}};var Lt=class{static parse(e){let n=new P(e).readLexmes(),r=this.parseFromLexeme(n,0);if(r.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[r.newIndex].value}" at position ${r.newIndex}. The OVER expression is complete but there are additional tokens.`);return r.value}static parseFromLexeme(e,t){let n=t;if(e[n].value!=="over")throw new Error(`Syntax error at position ${n}: Expected 'OVER' keyword but found "${e[n].value}". OVER expressions must start with the OVER keyword.`);if(n++,n>=e.length)throw new Error("Syntax error: Unexpected end of input after 'OVER' keyword. Expected either a window name or an opening parenthesis '('.");if(e[n].type&64){let r=e[n].value;return n++,{value:new x(r),newIndex:n}}if(e[n].type&4)return yt.parseFromLexeme(e,n);throw new Error(`Syntax error at position ${n}: Expected a window name or opening parenthesis '(' after OVER keyword, but found "${e[n].value}".`)}};var Ve=class{static parseArrayExpression(e,t){let n=t;if(n+1<e.length&&e[n+1].type&512){n++;let r=k.parseArgument(512,1024,e,n);return n=r.newIndex,{value:new ge(r.value),newIndex:n}}else if(n+1<e.length&&e[n+1].type&4){n++,n++;let r=M.parseFromLexeme(e,n);return n=r.newIndex,n++,{value:new Se(r.value),newIndex:n}}throw new Error(`Invalid ARRAY syntax at index ${n}, expected ARRAY[... or ARRAY(...)`)}static parseFromLexeme(e,t){let n=t,r=e[n];return r.value==="array"?this.parseArrayExpression(e,n):r.value==="substring"||r.value==="overlay"?this.parseKeywordFunction(e,n,[{key:"from",required:!1},{key:"for",required:!1}]):r.value==="cast"?this.parseKeywordFunction(e,n,[{key:"as",required:!0}]):r.value==="trim"?this.parseKeywordFunction(e,n,[{key:"from",required:!1}]):this.parseFunctionCall(e,n)}static tryParseBinaryExpression(e,t,n,r=!0,i=!0){let s=t;if(s<e.length&&e[s].type&2){let a=e[s].value.toLowerCase();if(!r&&a==="and"||!i&&a==="or")return null;if(s++,a==="between")return this.parseBetweenExpression(e,s,n,!1);if(a==="not between")return this.parseBetweenExpression(e,s,n,!0);if(a==="::"){let c=this.parseTypeValue(e,s);return s=c.newIndex,{value:new ce(n,c.value),newIndex:s}}let l=k.parseFromLexeme(e,s);return s=l.newIndex,{value:new C(n,a,l.value),newIndex:s}}return null}static parseBetweenExpression(e,t,n,r){let i=t,s=k.parseFromLexeme(e,i,!1);if(i=s.newIndex,i<e.length&&e[i].type&2&&e[i].value!=="and")throw new Error(`Expected 'and' after 'between' at index ${i}`);i++;let a=this.parseBetweenUpperBound(e,i);return i=a.newIndex,{value:new ve(n,s.value,a.value,r),newIndex:i}}static parseBetweenUpperBound(e,t){return k.parseFromLexeme(e,t,!1,!1)}static parseFunctionCall(e,t){let n=t,r=Pe.parseFromLexeme(e,n),i=r.namespaces,s=r.name;if(n=r.newIndex,n<e.length&&e[n].type&4){let a=k.parseArgument(4,8,e,n);n=a.newIndex;let l=null;if(n<e.length&&e[n].value==="within group"){let u=this.parseWithinGroupClause(e,n);l=u.value,n=u.newIndex}if(n<e.length&&e[n].value==="over"){let u=Lt.parseFromLexeme(e,n);return n=u.newIndex,{value:new j(i,s.name,a.value,u.value,l),newIndex:n}}else return{value:new j(i,s.name,a.value,null,l),newIndex:n}}else throw new Error(`Expected opening parenthesis after function name '${s.name}' at index ${n}`)}static parseKeywordFunction(e,t,n){let r=t,i=Pe.parseFromLexeme(e,r),s=i.namespaces,a=i.name;if(r=i.newIndex,r<e.length&&e[r].type&4){r++;let l=k.parseFromLexeme(e,r),u=l.value;if(r=l.newIndex,r<e.length&&e[r].type&16)return this.parseFunctionCall(e,t);for(let{key:c,required:d}of n)if(r<e.length&&e[r].type&128&&e[r].value===c)if(r++,r<e.length&&e[r].type&8192){let h=this.parseTypeValue(e,r);u=new C(u,c,h.value),r=h.newIndex}else{let h=k.parseFromLexeme(e,r);u=new C(u,c,h.value),r=h.newIndex}else if(d)throw new Error(`Keyword '${c}' is required at index ${r}`);if(r<e.length&&e[r].type&8){r++;let c=null;if(r<e.length&&e[r].value==="within group"){let d=this.parseWithinGroupClause(e,r);c=d.value,r=d.newIndex}if(r<e.length&&e[r].value==="over"){r++;let d=Lt.parseFromLexeme(e,r);return r=d.newIndex,{value:new j(s,a.name,u,d.value,c),newIndex:r}}else return{value:new j(s,a.name,u,null,c),newIndex:r}}else throw new Error(`Missing closing parenthesis for function '${a.name}' at index ${r}`)}else throw new Error(`Missing opening parenthesis for function '${a.name}' at index ${r}`)}static parseTypeValue(e,t){let n=t,{namespaces:r,name:i,newIndex:s}=Pe.parseFromLexeme(e,n);if(n=s,n<e.length&&e[n].type&4){let a=k.parseArgument(4,8,e,n);return n=a.newIndex,{value:new be(r,new Q(i.name),a.value),newIndex:n}}else return{value:new be(r,new Q(i.name)),newIndex:n}}static parseWithinGroupClause(e,t){let n=t;if(n>=e.length||e[n].value!=="within group")throw new Error(`Expected 'WITHIN GROUP' at index ${n}`);if(n++,n>=e.length||!(e[n].type&4))throw new Error(`Expected '(' after 'WITHIN GROUP' at index ${n}`);n++;let r=et.parseFromLexeme(e,n);if(n=r.newIndex,n>=e.length||!(e[n].type&8))throw new Error(`Expected ')' after WITHIN GROUP ORDER BY clause at index ${n}`);return n++,{value:r.value,newIndex:n}}};var Cn=class o extends Error{constructor(t,n,r){super(t);this.index=n;this.context=r;this.name="ParseError"}static fromUnparsedLexemes(t,n,r){let i=Math.max(0,n-2),s=Math.min(t.length,n+3),a=t.slice(i,s).map((u,c)=>{let d=c+i===n?">":" ",h=$[u.type]||u.type;return`${d} ${c+i}:${u.value} [${h}]`}).join(`
8
+ ${this.getDebugPositionInfo(t)}`);return this.position++,this.input.slice(t+1,this.position-1)}};var N=class{constructor(e){this.input=e,this.position=0,this.readerManager=new tn(e).register(new ln(e)).register(new Zt(e)).register(new sn(e)).register(new Xt(e)).register(new en(e)).register(new rn(e)).register(new nn(e)).register(new an(e)).register(new on(e)).register(new Yt(e))}isEndOfInput(e=0){return this.position+e>=this.input.length}canRead(e=0){return!this.isEndOfInput(e)}readLexmes(){let e=Math.ceil(this.input.length/8),t=new Array(e),n=0,r=this.readComment(),i=r.lines;this.position=r.position;let s=null;for(;this.canRead()&&this.input[this.position]!==";";){let a=this.readerManager.tryRead(this.position,s);if(a===null)throw new Error(`Unexpected character. actual: ${this.input[this.position]}, position: ${this.position}
9
+ ${this.getDebugPositionInfo(this.position)}`);this.position=this.readerManager.getMaxPosition();let l=this.readComment();this.position=l.position,a.type&16||a.type&2?l.lines.length>0&&i.push(...l.lines):((i.length>0||l.lines.length>0)&&this.addCommentsToToken(a,i,l.lines),i=[]),t[n++]=a,s=a}if(i.length>0&&n>0){let a=t[n-1];a.comments===null&&(a.comments=[]),a.comments.push(...i)}return n===e?t:t.slice(0,n)}addPendingCommentsToLastToken(e,t){if(t.length>0&&e.length>0){let n=e[e.length-1];n.comments===null&&(n.comments=[]),n.comments.push(...t)}}addCommentsToToken(e,t,n){(t.length>0||n.length>0)&&(e.comments===null&&(e.comments=[]),t.length>0&&e.comments.unshift(...t),n.length>0&&e.comments.push(...n))}readComment(){return ue.readWhiteSpaceAndComment(this.input,this.position)}getDebugPositionInfo(e){return ue.getDebugPositionInfo(this.input,e)}};var Ne=class o{static parseFromLexeme(e,t){let{identifiers:n,newIndex:r}=o.parseEscapedOrDotSeparatedIdentifiers(e,t),{namespaces:i,name:s}=o.extractNamespacesAndName(n),a=0;return r>t&&(a=e[r-1].type),{namespaces:i,name:new x(s),newIndex:r,lastTokenType:a}}static parse(e){let n=new N(e).readLexmes(),r=this.parseFromLexeme(n,0);if(r.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[r.newIndex].value}" at position ${r.newIndex}. The name is complete but additional tokens were found.`);return{namespaces:r.namespaces,name:r.name}}static parseEscapedOrDotSeparatedIdentifiers(e,t){let n=t,r=[];for(;n<e.length;){if(e[n].type&512){if(n++,n>=e.length||!(e[n].type&64||e[n].type&128))throw new Error(`Expected identifier after '[' at position ${n}`);if(r.push(e[n].value),n++,n>=e.length||e[n].value!=="]")throw new Error(`Expected closing ']' after identifier at position ${n}`);n++}else if(e[n].type&64)r.push(e[n].value),n++;else if(e[n].type&2048)r.push(e[n].value),n++;else if(e[n].type&8192)r.push(e[n].value),n++;else if(e[n].value==="*"){r.push(e[n].value),n++;break}if(n<e.length&&e[n].type&32)n++;else break}return{identifiers:r,newIndex:n}}static extractNamespacesAndName(e){if(!e||e.length===0)throw new Error("Identifier list is empty");return e.length===1?{namespaces:null,name:e[0]}:{namespaces:e.slice(0,-1),name:e[e.length-1]}}};var un=class{static parseFromLexeme(e,t){let{namespaces:n,name:r,newIndex:i}=Ne.parseFromLexeme(e,t);return{value:new S(n,r),newIndex:i}}};var Ft=class{static parseFromLexeme(e,t){let n=t,r=e[n].value,i,s=Hn.parse(r.toLowerCase(),0);if(s){let a=new Q(s.keyword);return n++,{value:a,newIndex:n}}if(/^[+-]?\d+(\.\d+)?([eE][+-]?\d+)?$/.test(r))return i=Number(r),n++,{value:new z(i),newIndex:n};{let a=/^\$[^$]*\$[\s\S]*\$[^$]*\$$/.test(r);return a?i=r:r.startsWith("'")&&r.endsWith("'")?i=r.slice(1,-1):i=r,n++,{value:new z(i,a),newIndex:n}}}};var cn=class{static parseFromLexeme(e,t){let n=t;if(n+1<e.length&&e[n].type&4&&(e[n+1].value==="select"||e[n+1].value==="values"||e[n+1].value==="with")){n+=1;let r=M.parseFromLexeme(e,n);if(n=r.newIndex,n>=e.length||e[n].type!==8)throw new Error(`Expected ')' at index ${n}, but found ${e[n].value}`);return n++,{value:new se(r.value),newIndex:n}}else{let r=k.parseArgument(4,8,e,t);return n=r.newIndex,{value:new X(r.value),newIndex:n}}}};var pn=class{static parseFromLexeme(e,t){let n=t;if(n<e.length&&e[n].type&2){let r=e[n].value;if(n++,r==="*")return{value:new S(null,"*"),newIndex:n};let i=k.parseFromLexeme(e,n);return n=i.newIndex,{value:new Z(r,i.value),newIndex:n}}throw new Error(`Invalid unary expression at index ${t}: ${e[t].value}`)}};var mn=class{static parseFromLexeme(e,t){let n=t,r=e[n].value;r.startsWith("${")&&r.endsWith("}")?r=r.slice(2,-1):r=r.slice(1);let i=new T(r);return n++,{value:i,newIndex:n}}};var dn=class{static parseFromLexeme(e,t){let n=t,r=e[n].value;if(n++,n>=e.length||e[n].type!==1)throw new Error(`Expected string literal after string specifier at index ${n}`);let i=e[n].value;return n++,{value:new Me(r,i),newIndex:n}}};var hn=class{static parseFromLexeme(e,t){let n=t,r=e[n];return r.value==="case"?(n++,this.parseCaseExpression(e,n)):r.value==="case when"?(n++,this.parseCaseWhenExpression(e,n)):this.parseModifierUnaryExpression(e,n)}static parseModifierUnaryExpression(e,t){let n=t;if(n<e.length&&e[n].type&128){let r=e[n].value;n++;let i=k.parseFromLexeme(e,n);return{value:new Z(r,i.value),newIndex:i.newIndex}}throw new Error(`Invalid modifier unary expression at index ${n}, Lexeme: ${e[n].value}`)}static parseCaseExpression(e,t){let n=t,r=k.parseFromLexeme(e,n);n=r.newIndex;let i=this.parseSwitchCaseArgument(e,n,[]);return n=i.newIndex,{value:new oe(r.value,i.value),newIndex:n}}static parseCaseWhenExpression(e,t){let n=t,r=this.parseCaseConditionValuePair(e,n);n=r.newIndex;let i=[r.value],s=this.parseSwitchCaseArgument(e,n,i);return n=s.newIndex,{value:new oe(null,s.value),newIndex:n}}static parseSwitchCaseArgument(e,t,n){let r=t,i=[...n],s=null;for(;r<e.length&&this.isCommandWithValue(e[r],"when");){r++;let l=this.parseCaseConditionValuePair(e,r);r=l.newIndex,i.push(l.value)}if(r<e.length&&this.isCommandWithValue(e[r],"else")){r++;let l=k.parseFromLexeme(e,r);s=l.value,r=l.newIndex}if(r<e.length&&this.isCommandWithValue(e[r],"end"))r++;else throw new Error(`The CASE expression requires 'end' keyword at the end (index ${r})`);if(i.length===0)throw new Error(`The CASE expression requires at least one WHEN clause (index ${r})`);return{value:new ye(i,s),newIndex:r}}static isCommandWithValue(e,t){return(e.type&128)!==0&&e.value===t}static parseCaseConditionValuePair(e,t){let n=t,r=k.parseFromLexeme(e,n);if(n=r.newIndex,n>=e.length||!(e[n].type&128)||e[n].value!=="then")throw new Error(`Expected 'then' after WHEN condition at index ${n}`);n++;let i=k.parseFromLexeme(e,n);return n=i.newIndex,{value:new we(r.value,i.value),newIndex:n}}};var et=class{static parse(e){let n=new N(e).readLexmes(),r=this.parseFromLexeme(n,0);if(r.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[r.newIndex].value}" at position ${r.newIndex}. The ORDER BY clause is complete but there are additional tokens.`);return r.value}static parseFromLexeme(e,t){let n=t;if(e[n].value!=="order by")throw new Error(`Syntax error at position ${n}: Expected 'ORDER BY' keyword but found "${e[n].value}". ORDER BY clauses must start with the ORDER BY keywords.`);n++;let r=[],i=this.parseItem(e,n);for(r.push(i.value),n=i.newIndex;n<e.length&&e[n].type&16;){n++;let s=this.parseItem(e,n);r.push(s.value),n=s.newIndex}if(r.length===0)throw new Error(`Syntax error at position ${t}: No ordering expressions found. The ORDER BY clause requires at least one expression to order by.`);return{value:new pe(r),newIndex:n}}static parseItem(e,t){let n=t,r=k.parseFromLexeme(e,n),i=r.value;if(n=r.newIndex,n>=e.length)return{value:i,newIndex:n};let s=n>=e.length?null:e[n].value==="asc"?(n++,"asc"):e[n].value==="desc"?(n++,"desc"):null,a=n>=e.length?null:e[n].value==="nulls first"?(n++,"first"):e[n].value==="nulls last"?(n++,"last"):null;return s===null&&a===null?{value:i,newIndex:n}:{value:new Ie(i,s,a),newIndex:n}}};var fn=class{static parse(e){let n=new N(e).readLexmes(),r=this.parseFromLexeme(n,0);if(r.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[r.newIndex].value}" at position ${r.newIndex}. The PARTITION BY clause is complete but there are additional tokens.`);return r.value}static parseFromLexeme(e,t){let n=t;if(e[n].value!=="partition by")throw new Error(`Syntax error at position ${n}: Expected 'PARTITION BY' keyword but found "${e[n].value}". PARTITION BY clauses must start with the PARTITION BY keywords.`);n++;let r=[],i=k.parseFromLexeme(e,n);for(r.push(i.value),n=i.newIndex;n<e.length&&e[n].type&16;){n++;let s=k.parseFromLexeme(e,n);r.push(s.value),n=s.newIndex}if(r.length===0)throw new Error(`Syntax error at position ${t}: No partition expressions found. The PARTITION BY clause requires at least one expression to partition by.`);return r.length===1?{value:new je(r[0]),newIndex:n}:{value:new je(new H(r)),newIndex:n}}};var yt=class{static parse(e){let n=new N(e).readLexmes(),r=this.parseFromLexeme(n,0);if(r.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[r.newIndex].value}" at position ${r.newIndex}. The window frame expression is complete but there are additional tokens.`);return r.value}static parseFromLexeme(e,t){let n=t;if(e[n].type!==4)throw new Error(`Syntax error at position ${n}: Expected opening parenthesis '(' but found "${e[n].value}".`);n++;let r=null,i=null,s=null;if(n<e.length&&e[n].value==="partition by"){let a=fn.parseFromLexeme(e,n);r=a.value,n=a.newIndex}if(n<e.length&&e[n].value==="order by"){let a=et.parseFromLexeme(e,n);i=a.value,n=a.newIndex}if(n<e.length&&this.isFrameTypeKeyword(e[n].value)){let a=this.parseFrameSpec(e,n);s=a.value,n=a.newIndex}if(n>=e.length||e[n].type!==8)throw new Error(`Syntax error at position ${n}: Missing closing parenthesis ')' for window frame. Each opening parenthesis must have a matching closing parenthesis.`);return n++,{value:new Fe(r,i,s),newIndex:n}}static isFrameTypeKeyword(e){let t=e;return t==="rows"||t==="range"||t==="groups"}static parseFrameSpec(e,t){let n=t,r=e[n].value,i;switch(r){case"rows":i="rows";break;case"range":i="range";break;case"groups":i="groups";break;default:throw new Error(`Syntax error at position ${n}: Invalid frame type "${e[n].value}". Expected one of: ROWS, RANGE, GROUPS.`)}if(n++,n<e.length&&e[n].value==="between"){n++;let s=this.parseFrameBoundary(e,n),a=s.value;if(n=s.newIndex,n>=e.length||e[n].value!=="and")throw new Error(`Syntax error at position ${n}: Expected 'AND' keyword in BETWEEN clause.`);n++;let l=this.parseFrameBoundary(e,n),u=l.value;return n=l.newIndex,{value:new Re(i,a,u),newIndex:n}}else{let s=this.parseFrameBoundary(e,n),a=s.value;return n=s.newIndex,{value:new Re(i,a,null),newIndex:n}}}static parseFrameBoundary(e,t){let n=t;if(n<e.length&&e[n].type&128){let r=e[n].value,i;switch(r){case"current row":i="current row";break;case"unbounded preceding":i="unbounded preceding";break;case"unbounded following":i="unbounded following";break;default:throw new Error(`Syntax error at position ${n}: Invalid frame type "${e[n].value}". Expected one of: ROWS, RANGE, GROUPS.`)}return{value:new rt(i),newIndex:n+1}}else if(n<e.length&&e[n].type&1){let r=k.parseFromLexeme(e,n);if(n=r.newIndex,n<e.length&&e[n].type&128){let i=e[n].value,s;if(i==="preceding")s=!1;else if(i==="following")s=!0;else throw new Error(`Syntax error at position ${n}: Expected 'preceding' or 'following' after numeric value in window frame boundary.`);return n++,{value:new it(r.value,s),newIndex:n}}else throw new Error(`Syntax error at position ${n}: Expected 'preceding' or 'following' after numeric value in window frame boundary.`)}throw new Error(`Syntax error at position ${n}: Expected a valid frame boundary component.`)}};var Lt=class{static parse(e){let n=new N(e).readLexmes(),r=this.parseFromLexeme(n,0);if(r.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[r.newIndex].value}" at position ${r.newIndex}. The OVER expression is complete but there are additional tokens.`);return r.value}static parseFromLexeme(e,t){let n=t;if(e[n].value!=="over")throw new Error(`Syntax error at position ${n}: Expected 'OVER' keyword but found "${e[n].value}". OVER expressions must start with the OVER keyword.`);if(n++,n>=e.length)throw new Error("Syntax error: Unexpected end of input after 'OVER' keyword. Expected either a window name or an opening parenthesis '('.");if(e[n].type&64){let r=e[n].value;return n++,{value:new x(r),newIndex:n}}if(e[n].type&4)return yt.parseFromLexeme(e,n);throw new Error(`Syntax error at position ${n}: Expected a window name or opening parenthesis '(' after OVER keyword, but found "${e[n].value}".`)}};var Ve=class{static parseArrayExpression(e,t){let n=t;if(n+1<e.length&&e[n+1].type&512){n++;let r=k.parseArgument(512,1024,e,n);return n=r.newIndex,{value:new ge(r.value),newIndex:n}}else if(n+1<e.length&&e[n+1].type&4){n++,n++;let r=M.parseFromLexeme(e,n);return n=r.newIndex,n++,{value:new Se(r.value),newIndex:n}}throw new Error(`Invalid ARRAY syntax at index ${n}, expected ARRAY[... or ARRAY(...)`)}static parseFromLexeme(e,t){let n=t,r=e[n];return r.value==="array"?this.parseArrayExpression(e,n):r.value==="substring"||r.value==="overlay"?this.parseKeywordFunction(e,n,[{key:"from",required:!1},{key:"for",required:!1}]):r.value==="cast"?this.parseKeywordFunction(e,n,[{key:"as",required:!0}]):r.value==="trim"?this.parseKeywordFunction(e,n,[{key:"from",required:!1}]):this.parseFunctionCall(e,n)}static tryParseBinaryExpression(e,t,n,r=!0,i=!0){let s=t;if(s<e.length&&e[s].type&2){let a=e[s].value.toLowerCase();if(!r&&a==="and"||!i&&a==="or")return null;if(s++,a==="between")return this.parseBetweenExpression(e,s,n,!1);if(a==="not between")return this.parseBetweenExpression(e,s,n,!0);if(a==="::"){let c=this.parseTypeValue(e,s);return s=c.newIndex,{value:new ce(n,c.value),newIndex:s}}let l=k.parseFromLexeme(e,s);return s=l.newIndex,{value:new C(n,a,l.value),newIndex:s}}return null}static parseBetweenExpression(e,t,n,r){let i=t,s=k.parseFromLexeme(e,i,!1);if(i=s.newIndex,i<e.length&&e[i].type&2&&e[i].value!=="and")throw new Error(`Expected 'and' after 'between' at index ${i}`);i++;let a=this.parseBetweenUpperBound(e,i);return i=a.newIndex,{value:new ve(n,s.value,a.value,r),newIndex:i}}static parseBetweenUpperBound(e,t){return k.parseFromLexeme(e,t,!1,!1)}static parseFunctionCall(e,t){let n=t,r=Ne.parseFromLexeme(e,n),i=r.namespaces,s=r.name;if(n=r.newIndex,n<e.length&&e[n].type&4){let a=k.parseArgument(4,8,e,n);n=a.newIndex;let l=null;if(n<e.length&&e[n].value==="within group"){let u=this.parseWithinGroupClause(e,n);l=u.value,n=u.newIndex}if(n<e.length&&e[n].value==="over"){let u=Lt.parseFromLexeme(e,n);return n=u.newIndex,{value:new j(i,s.name,a.value,u.value,l),newIndex:n}}else return{value:new j(i,s.name,a.value,null,l),newIndex:n}}else throw new Error(`Expected opening parenthesis after function name '${s.name}' at index ${n}`)}static parseKeywordFunction(e,t,n){let r=t,i=Ne.parseFromLexeme(e,r),s=i.namespaces,a=i.name;if(r=i.newIndex,r<e.length&&e[r].type&4){r++;let l=k.parseFromLexeme(e,r),u=l.value;if(r=l.newIndex,r<e.length&&e[r].type&16)return this.parseFunctionCall(e,t);for(let{key:c,required:d}of n)if(r<e.length&&e[r].type&128&&e[r].value===c)if(r++,r<e.length&&e[r].type&8192){let h=this.parseTypeValue(e,r);u=new C(u,c,h.value),r=h.newIndex}else{let h=k.parseFromLexeme(e,r);u=new C(u,c,h.value),r=h.newIndex}else if(d)throw new Error(`Keyword '${c}' is required at index ${r}`);if(r<e.length&&e[r].type&8){r++;let c=null;if(r<e.length&&e[r].value==="within group"){let d=this.parseWithinGroupClause(e,r);c=d.value,r=d.newIndex}if(r<e.length&&e[r].value==="over"){r++;let d=Lt.parseFromLexeme(e,r);return r=d.newIndex,{value:new j(s,a.name,u,d.value,c),newIndex:r}}else return{value:new j(s,a.name,u,null,c),newIndex:r}}else throw new Error(`Missing closing parenthesis for function '${a.name}' at index ${r}`)}else throw new Error(`Missing opening parenthesis for function '${a.name}' at index ${r}`)}static parseTypeValue(e,t){let n=t,{namespaces:r,name:i,newIndex:s}=Ne.parseFromLexeme(e,n);if(n=s,n<e.length&&e[n].type&4){let a=k.parseArgument(4,8,e,n);return n=a.newIndex,{value:new be(r,new Q(i.name),a.value),newIndex:n}}else return{value:new be(r,new Q(i.name)),newIndex:n}}static parseWithinGroupClause(e,t){let n=t;if(n>=e.length||e[n].value!=="within group")throw new Error(`Expected 'WITHIN GROUP' at index ${n}`);if(n++,n>=e.length||!(e[n].type&4))throw new Error(`Expected '(' after 'WITHIN GROUP' at index ${n}`);n++;let r=et.parseFromLexeme(e,n);if(n=r.newIndex,n>=e.length||!(e[n].type&8))throw new Error(`Expected ')' after WITHIN GROUP ORDER BY clause at index ${n}`);return n++,{value:r.value,newIndex:n}}};var Cn=class o extends Error{constructor(t,n,r){super(t);this.index=n;this.context=r;this.name="ParseError"}static fromUnparsedLexemes(t,n,r){let i=Math.max(0,n-2),s=Math.min(t.length,n+3),a=t.slice(i,s).map((u,c)=>{let d=c+i===n?">":" ",h=$[u.type]||u.type;return`${d} ${c+i}:${u.value} [${h}]`}).join(`
10
10
  `),l=`${r} Unparsed lexeme remains at index ${n}: ${t[n].value}
11
11
  Context:
12
- ${a}`;return new o(l,n,a)}};var lt=class{static{this.precedenceMap={or:1,and:2,"=":10,"!=":10,"<>":10,"<":10,"<=":10,">":10,">=":10,like:10,ilike:10,"not like":10,"not ilike":10,"similar to":10,"not similar to":10,in:10,"not in":10,is:10,"is not":10,"->":10,"->>":10,"#>":10,"#>>":10,"@>":10,"<@":10,"?":10,"?|":10,"?&":10,"~":10,"~*":10,"!~":10,"!~*":10,rlike:10,regexp:10,mod:30,xor:2,between:15,"not between":15,"+":20,"-":20,"*":30,"/":30,"%":30,"^":40,"::":50,"unary+":100,"unary-":100,not:100}}static getPrecedence(e){let t=this.precedenceMap[e.toLowerCase()];return t!==void 0?t:0}static hasHigherOrEqualPrecedence(e,t){return this.getPrecedence(e)>=this.getPrecedence(t)}static isLogicalOperator(e){let t=e.toLowerCase();return t==="and"||t==="or"}static isBetweenOperator(e){let t=e.toLowerCase();return t==="between"||t==="not between"}static isComparisonOperator(e){let t=e.toLowerCase();return["=","!=","<>","<",">","<=",">=","like","ilike","similar to","in","not in","->","->>","#>","#>>","@>","<@","?","?|","?&","~","~*","!~","!~*","rlike","regexp"].includes(t)}};var k=class{static parse(e){let n=new P(e).readLexmes(),r=this.parseFromLexeme(n,0);if(r.newIndex<n.length)throw Cn.fromUnparsedLexemes(n,r.newIndex,"[ValueParser]");return r.value}static parseFromLexeme(e,t,n=!0,r=!0){return this.parseExpressionWithPrecedence(e,t,0,n,r)}static parseExpressionWithPrecedence(e,t,n,r=!0,i=!0){let s=t,a=e[s].comments,l=this.parseItem(e,s);l.value.comments=a,s=l.newIndex;let u=l.value,c=this.parseArrayAccess(e,s,u);for(u=c.value,s=c.newIndex;s<e.length&&e[s].type&2;){let h=e[s].value;if(!r&&h.toLowerCase()==="and"||!i&&h.toLowerCase()==="or")break;let w=lt.getPrecedence(h);if(w<n)break;if(s++,lt.isBetweenOperator(h)){let y=Ve.parseBetweenExpression(e,s,u,h.toLowerCase().includes("not"));u=y.value,s=y.newIndex;continue}if(h==="::"){let y=Ve.parseTypeValue(e,s);u=new ce(u,y.value),s=y.newIndex;continue}let E=w+1,m=this.parseExpressionWithPrecedence(e,s,E,r,i);s=m.newIndex,u=new C(u,h,m.value)}return{value:u,newIndex:s}}static parseItem(e,t){let n=t;if(n>=e.length)throw new Error(`Unexpected end of lexemes at index ${t}`);let r=e[n];if(r.type&64&&r.type&2&&r.type&8192){if(n+1<e.length&&e[n+1].type&4)if(this.isTypeConstructor(e,n+1,r.value)){let a=Ve.parseTypeValue(e,n);return{value:a.value,newIndex:a.newIndex}}else return Ve.parseFromLexeme(e,n);let i=un.parseFromLexeme(e,n);if(i.newIndex>=e.length)return i;if(e[i.newIndex].type&1){let a=Ft.parseFromLexeme(e,i.newIndex);return{value:new Z(e[n].value,a.value),newIndex:a.newIndex}}return i}else if(r.type&64){let{namespaces:i,name:s,newIndex:a}=Pe.parseFromLexeme(e,n);if(e[a-1].type&2048)return Ve.parseFromLexeme(e,n);if(e[a-1].type&8192)if(a<e.length&&e[a].type&4)if(this.isTypeConstructor(e,a,s.name)){let u=Ve.parseTypeValue(e,n);return{value:u.value,newIndex:u.newIndex}}else return Ve.parseFromLexeme(e,n);else return{value:new be(i,s),newIndex:a};return{value:new S(i,s),newIndex:a}}else{if(r.type&1)return Ft.parseFromLexeme(e,n);if(r.type&4)return cn.parseFromLexeme(e,n);if(r.type&2048)return Ve.parseFromLexeme(e,n);if(r.type&2)return pn.parseFromLexeme(e,n);if(r.type&256)return mn.parseFromLexeme(e,n);if(r.type&4096)return dn.parseFromLexeme(e,n);if(r.type&128)return hn.parseFromLexeme(e,n);if(r.type&512){let{namespaces:i,name:s,newIndex:a}=Pe.parseFromLexeme(e,n);return{value:new S(i,s),newIndex:a}}else if(r.type&8192){let{namespaces:i,name:s,newIndex:a}=Pe.parseFromLexeme(e,n);if(a<e.length&&e[a].type&4)if(this.isTypeConstructor(e,a,s.name)){let l=Ve.parseTypeValue(e,n);return{value:l.value,newIndex:l.newIndex}}else return Ve.parseFromLexeme(e,n);else return{value:new be(i,s),newIndex:a}}}throw new Error(`[ValueParser] Invalid lexeme. index: ${n}, type: ${e[n].type}, value: ${e[n].value}`)}static parseArgument(e,t,n,r){let i=r,s=[];if(i<n.length&&n[i].type===e){if(i++,i<n.length&&n[i].type===t)return i++,{value:new H([]),newIndex:i};if(i<n.length&&n[i].value==="*"){let l=new S(null,"*");if(i++,i<n.length&&n[i].type===t)return i++,{value:l,newIndex:i};throw new Error(`Expected closing parenthesis at index ${i}`)}let a=this.parseFromLexeme(n,i);for(i=a.newIndex,s.push(a.value);i<n.length&&n[i].type&16;){i++;let l=this.parseFromLexeme(n,i);i=l.newIndex,s.push(l.value)}if(i<n.length&&n[i].type===t)return i++,s.length===1?{value:s[0],newIndex:i}:{value:new H(s),newIndex:i};throw new Error(`Missing closing parenthesis at index ${i}`)}throw new Error(`Expected opening parenthesis at index ${r}`)}static parseArrayAccess(e,t,n){let r=t,i=n;for(;r<e.length&&e[r].type&512&&!this.isSqlServerBracketIdentifier(e,r);){if(r++,r>=e.length)throw new Error(`Expected array index or slice after '[' at index ${r-1}`);if(e[r].type&1024)throw new Error(`Empty array access brackets not supported at index ${r}`);let s=null,a=!1;if(e[r].type&2&&e[r].value===":")a=!0,r++;else{let l=lt.getPrecedence(":"),u=this.parseExpressionWithPrecedence(e,r,l+1);s=u.value,r=u.newIndex,r<e.length&&e[r].type&2&&e[r].value===":"&&(a=!0,r++)}if(a){let l=null;if(r<e.length&&!(e[r].type&1024)){let u=lt.getPrecedence(":"),c=this.parseExpressionWithPrecedence(e,r,u+1);l=c.value,r=c.newIndex}if(r>=e.length||!(e[r].type&1024))throw new Error(`Expected ']' after array slice at index ${r}`);r++,i=new st(i,s,l)}else{if(!s){let l=this.parseFromLexeme(e,r);s=l.value,r=l.newIndex}if(r>=e.length||!(e[r].type&1024))throw new Error(`Expected ']' after array index at index ${r}`);r++,i=new ot(i,s)}}return{value:i,newIndex:r}}static isSqlServerBracketIdentifier(e,t){let n=t+1;if(n>=e.length)return!1;for(;n<e.length&&!(e[n].type&1024);){let s=e[n];if(s.type&64||s.type&2&&s.value==="."){n++;continue}return!1}if(n>=e.length)return!1;let r=n;if(r+1<e.length){let s=e[r+1];if(s.type&2&&s.value===".")return!0}n=t+1;let i=!0;for(;n<r;){let s=e[n];if(!(s.type&64||s.type&2&&s.value===".")){i=!1;break}n++}return i}static isTypeConstructor(e,t,n){let r=["NUMERIC","DECIMAL","VARCHAR","CHAR","CHARACTER","TIMESTAMP","TIME","INTERVAL"],i=n.toUpperCase();if(r.includes(i))return!0;if(i==="DATE"){let s=t+1;if(s<e.length){let a=e[s];return!(a.type&1&&typeof a.value=="string"&&isNaN(Number(a.value)))}}return!1}};var ne=class{constructor(){this.commonTables=[];this.visitedNodes=new Set;this.isRootVisit=!0;this.handlers=new Map,this.handlers.set(b.kind,e=>this.visitSimpleSelectQuery(e)),this.handlers.set(q.kind,e=>this.visitBinarySelectQuery(e)),this.handlers.set(ie.kind,e=>this.visitValuesQuery(e)),this.handlers.set(re.kind,e=>this.visitWithClause(e)),this.handlers.set(ee.kind,e=>this.visitCommonTable(e)),this.handlers.set(J.kind,e=>this.visitSelectItem(e)),this.handlers.set(x.kind,e=>this.visitIdentifierString(e)),this.handlers.set(Q.kind,e=>this.visitRawString(e)),this.handlers.set(S.kind,e=>this.visitColumnReference(e)),this.handlers.set(T.kind,e=>this.visitParameterExpression(e)),this.handlers.set(z.kind,e=>this.visitLiteralValue(e)),this.handlers.set(R.kind,e=>this.visitSourceExpression(e)),this.handlers.set(B.kind,e=>this.visitTableSource(e)),this.handlers.set(Ke.kind,e=>this.visitFunctionSource(e)),this.handlers.set(We.kind,e=>this.visitParenSource(e)),this.handlers.set(_.kind,e=>this.visitSubQuerySource(e)),this.handlers.set(se.kind,e=>this.visitInlineQuery(e)),this.handlers.set(W.kind,e=>this.visitFromClause(e)),this.handlers.set(fe.kind,e=>this.visitJoinClause(e)),this.handlers.set(he.kind,e=>this.visitJoinOnClause(e)),this.handlers.set(Ne.kind,e=>this.visitJoinUsingClause(e)),this.handlers.set(ae.kind,e=>this.visitWhereClause(e)),this.handlers.set(X.kind,e=>this.visitParenExpression(e)),this.handlers.set(C.kind,e=>this.visitBinaryExpression(e)),this.handlers.set(Z.kind,e=>this.visitUnaryExpression(e)),this.handlers.set(oe.kind,e=>this.visitCaseExpression(e)),this.handlers.set(we.kind,e=>this.visitCaseKeyValuePair(e)),this.handlers.set(ye.kind,e=>this.visitSwitchCaseArgument(e)),this.handlers.set(ve.kind,e=>this.visitBetweenExpression(e)),this.handlers.set(j.kind,e=>this.visitFunctionCall(e)),this.handlers.set(ge.kind,e=>this.visitArrayExpression(e)),this.handlers.set(Se.kind,e=>this.visitArrayQueryExpression(e)),this.handlers.set(Ee.kind,e=>this.visitTupleExpression(e)),this.handlers.set(ce.kind,e=>this.visitCastExpression(e)),this.handlers.set(Fe.kind,e=>this.visitWindowFrameExpression(e)),this.handlers.set(Re.kind,e=>this.visitWindowFrameSpec(e)),this.handlers.set(be.kind,e=>this.visitTypeValue(e)),this.handlers.set(H.kind,e=>this.visitValueList(e)),this.handlers.set(Me.kind,e=>this.visitStringSpecifierExpression(e)),this.handlers.set(U.kind,e=>this.visitSelectClause(e)),this.handlers.set(me.kind,e=>this.visitGroupByClause(e)),this.handlers.set(de.kind,e=>this.visitHavingClause(e)),this.handlers.set(pe.kind,e=>this.visitOrderByClause(e)),this.handlers.set(xe.kind,e=>this.visitWindowFrameClause(e)),this.handlers.set(le.kind,e=>this.visitLimitClause(e)),this.handlers.set(Be.kind,e=>this.visitForClause(e)),this.handlers.set(Ie.kind,e=>this.visitOrderByItem(e)),this.handlers.set(je.kind,e=>this.visitPartitionByClause(e))}getCommonTables(){return this.commonTables}reset(){this.commonTables=[],this.visitedNodes.clear()}collect(e){return this.visit(e),this.getCommonTables()}visit(e){if(!this.isRootVisit){this.visitNode(e);return}this.reset(),this.isRootVisit=!1;try{this.visitNode(e)}finally{this.isRootVisit=!0}}visitNode(e){if(this.visitedNodes.has(e))return;this.visitedNodes.add(e);let t=this.handlers.get(e.getKind());if(t){t(e);return}let n=e.getKind()?.toString()||"unknown",r=e.constructor?.name||"unknown";throw new Error(`[CTECollector] No handler for ${r} with kind ${n}.`)}visitSimpleSelectQuery(e){if(e.fromClause&&e.fromClause.accept(this),e.whereClause&&e.whereClause.accept(this),e.groupByClause&&e.groupByClause.accept(this),e.havingClause&&e.havingClause.accept(this),e.orderByClause&&e.orderByClause.accept(this),e.windowClause)for(let t of e.windowClause.windows)t.accept(this);e.limitClause&&e.limitClause.accept(this),e.forClause&&e.forClause.accept(this),e.selectClause.accept(this),e.withClause&&e.withClause.accept(this)}visitBinarySelectQuery(e){e.left.accept(this),e.right.accept(this)}visitValuesQuery(e){for(let t of e.tuples)t.accept(this)}visitWithClause(e){for(let t=0;t<e.tables.length;t++)e.tables[t].accept(this)}visitCommonTable(e){e.query.accept(this),this.commonTables.push(e)}visitSelectClause(e){for(let t of e.items)t.accept(this)}visitSelectItem(e){e.value.accept(this)}visitFromClause(e){if(e.source.accept(this),e.joins)for(let t of e.joins)t.accept(this)}visitSourceExpression(e){e.datasource.accept(this)}visitTableSource(e){}visitFunctionSource(e){e.argument&&e.argument.accept(this)}visitParenSource(e){e.source.accept(this)}visitSubQuerySource(e){e.query.accept(this)}visitInlineQuery(e){e.selectQuery.accept(this)}visitJoinClause(e){e.source.accept(this),e.condition&&e.condition.accept(this)}visitJoinOnClause(e){e.condition.accept(this)}visitJoinUsingClause(e){e.condition.accept(this)}visitWhereClause(e){e.condition.accept(this)}visitGroupByClause(e){for(let t of e.grouping)t.accept(this)}visitHavingClause(e){e.condition.accept(this)}visitOrderByClause(e){for(let t of e.order)t.accept(this)}visitWindowFrameClause(e){e.expression.accept(this)}visitLimitClause(e){e.value.accept(this)}visitForClause(e){}visitOrderByItem(e){e.value.accept(this)}visitParenExpression(e){e.expression.accept(this)}visitBinaryExpression(e){e.left.accept(this),e.right.accept(this)}visitUnaryExpression(e){e.expression.accept(this)}visitCaseExpression(e){e.condition&&e.condition.accept(this),e.switchCase.accept(this)}visitSwitchCaseArgument(e){for(let t of e.cases)t.accept(this);e.elseValue&&e.elseValue.accept(this)}visitCaseKeyValuePair(e){e.key.accept(this),e.value.accept(this)}visitBetweenExpression(e){e.expression.accept(this),e.lower.accept(this),e.upper.accept(this)}visitFunctionCall(e){e.argument&&e.argument.accept(this),e.over&&e.over.accept(this)}visitArrayExpression(e){e.expression.accept(this)}visitArrayQueryExpression(e){e.query.accept(this)}visitTupleExpression(e){for(let t of e.values)t.accept(this)}visitCastExpression(e){e.input.accept(this),e.castType.accept(this)}visitTypeValue(e){e.argument&&e.argument.accept(this)}visitWindowFrameExpression(e){e.partition&&e.partition.accept(this),e.order&&e.order.accept(this),e.frameSpec&&e.frameSpec.accept(this)}visitWindowFrameSpec(e){}visitIdentifierString(e){}visitRawString(e){}visitColumnReference(e){}visitParameterExpression(e){}visitLiteralValue(e){}visitPartitionByClause(e){}visitValueList(e){for(let t of e.values)t.accept(this)}visitStringSpecifierExpression(e){}};var wt=class{constructor(){this.visitedNodes=new Set;this.isRootVisit=!0;this.handlers=new Map,this.handlers.set(b.kind,e=>this.visitSimpleSelectQuery(e)),this.handlers.set(q.kind,e=>this.visitBinarySelectQuery(e)),this.handlers.set(ie.kind,e=>this.visitValuesQuery(e)),this.handlers.set(J.kind,e=>this.visitSelectItem(e)),this.handlers.set(x.kind,e=>this.visitIdentifierString(e)),this.handlers.set(Q.kind,e=>this.visitRawString(e)),this.handlers.set(S.kind,e=>this.visitColumnReference(e)),this.handlers.set(T.kind,e=>this.visitParameterExpression(e)),this.handlers.set(z.kind,e=>this.visitLiteralValue(e)),this.handlers.set(R.kind,e=>this.visitSourceExpression(e)),this.handlers.set(B.kind,e=>this.visitTableSource(e)),this.handlers.set(We.kind,e=>this.visitParenSource(e)),this.handlers.set(_.kind,e=>this.visitSubQuerySource(e)),this.handlers.set(se.kind,e=>this.visitInlineQuery(e)),this.handlers.set(W.kind,e=>this.visitFromClause(e)),this.handlers.set(fe.kind,e=>this.visitJoinClause(e)),this.handlers.set(he.kind,e=>this.visitJoinOnClause(e)),this.handlers.set(Ne.kind,e=>this.visitJoinUsingClause(e)),this.handlers.set(ae.kind,e=>this.visitWhereClause(e)),this.handlers.set(X.kind,e=>this.visitParenExpression(e)),this.handlers.set(C.kind,e=>this.visitBinaryExpression(e)),this.handlers.set(Z.kind,e=>this.visitUnaryExpression(e)),this.handlers.set(oe.kind,e=>this.visitCaseExpression(e)),this.handlers.set(we.kind,e=>this.visitCaseKeyValuePair(e)),this.handlers.set(ye.kind,e=>this.visitSwitchCaseArgument(e)),this.handlers.set(ve.kind,e=>this.visitBetweenExpression(e)),this.handlers.set(j.kind,e=>this.visitFunctionCall(e)),this.handlers.set(ge.kind,e=>this.visitArrayExpression(e)),this.handlers.set(Se.kind,e=>this.visitArrayQueryExpression(e)),this.handlers.set(Ee.kind,e=>this.visitTupleExpression(e)),this.handlers.set(ce.kind,e=>this.visitCastExpression(e)),this.handlers.set(Fe.kind,e=>this.visitWindowFrameExpression(e)),this.handlers.set(Re.kind,e=>this.visitWindowFrameSpec(e)),this.handlers.set(be.kind,e=>this.visitTypeValue(e)),this.handlers.set(U.kind,e=>this.visitSelectClause(e)),this.handlers.set(me.kind,e=>this.visitGroupByClause(e)),this.handlers.set(de.kind,e=>this.visitHavingClause(e)),this.handlers.set(pe.kind,e=>this.visitOrderByClause(e)),this.handlers.set(xe.kind,e=>this.visitWindowFrameClause(e)),this.handlers.set(le.kind,e=>this.visitLimitClause(e)),this.handlers.set(Be.kind,e=>this.visitForClause(e)),this.handlers.set(Ie.kind,e=>this.visitOrderByItem(e))}reset(){this.visitedNodes.clear()}execute(e){return this.reset(),this.visit(e)}visit(e){if(!this.isRootVisit)return this.visitNode(e);this.reset(),this.isRootVisit=!1;try{return this.visitNode(e)}finally{this.isRootVisit=!0}}visitNode(e){if(this.visitedNodes.has(e))return e;this.visitedNodes.add(e);let t=this.handlers.get(e.getKind());if(t)return t(e);let n=e.getKind()?.toString()||"unknown",r=e.constructor?.name||"unknown";throw new Error(`[CTEDisabler] No handler for ${r} with kind ${n}.`)}visitSimpleSelectQuery(e){return e.withClause&&e.withClause.tables.forEach(t=>{this.visit(t.query)}),e.withClause=null,e.selectClause=this.visit(e.selectClause),e.fromClause=e.fromClause?this.visit(e.fromClause):null,e.whereClause=e.whereClause?this.visit(e.whereClause):null,e.groupByClause=e.groupByClause?this.visit(e.groupByClause):null,e.havingClause=e.havingClause?this.visit(e.havingClause):null,e.orderByClause=e.orderByClause?this.visit(e.orderByClause):null,e.windowClause&&(e.windowClause=new Ye(e.windowClause.windows.map(t=>this.visit(t)))),e.limitClause=e.limitClause?this.visit(e.limitClause):null,e.forClause=e.forClause?this.visit(e.forClause):null,e}visitBinarySelectQuery(e){return e.left=this.visit(e.left),e.right=this.visit(e.right),e}visitValuesQuery(e){let t=e.tuples.map(n=>this.visit(n));return new ie(t)}visitSelectClause(e){let t=e.items.map(n=>this.visit(n));return new U(t,e.distinct)}visitFromClause(e){let t=this.visit(e.source),n=e.joins?e.joins.map(r=>this.visit(r)):null;return new W(t,n)}visitSubQuerySource(e){let t=this.visit(e.query);return new _(t)}visitInlineQuery(e){let t=this.visit(e.selectQuery);return new se(t)}visitJoinClause(e){let t=this.visit(e.source),n=e.condition?this.visit(e.condition):null;return new fe(e.joinType.value,t,n,e.lateral)}visitJoinOnClause(e){let t=this.visit(e.condition);return new he(t)}visitJoinUsingClause(e){let t=this.visit(e.condition);return new Ne(t)}visitWhereClause(e){let t=this.visit(e.condition);return new ae(t)}visitGroupByClause(e){let t=e.grouping.map(n=>this.visit(n));return new me(t)}visitHavingClause(e){let t=this.visit(e.condition);return new de(t)}visitOrderByClause(e){let t=e.order.map(n=>this.visit(n));return new pe(t)}visitWindowFrameClause(e){let t=this.visit(e.expression);return new xe(e.name.name,t)}visitLimitClause(e){let t=this.visit(e.value);return new le(t)}visitForClause(e){return new Be(e.lockMode)}visitParenExpression(e){let t=this.visit(e.expression);return new X(t)}visitBinaryExpression(e){let t=this.visit(e.left),n=this.visit(e.right);return new C(t,e.operator.value,n)}visitUnaryExpression(e){let t=this.visit(e.expression);return new Z(e.operator.value,t)}visitCaseExpression(e){let t=e.condition?this.visit(e.condition):null,n=this.visit(e.switchCase);return new oe(t,n)}visitSwitchCaseArgument(e){let t=e.cases.map(r=>this.visit(r)),n=e.elseValue?this.visit(e.elseValue):null;return new ye(t,n)}visitCaseKeyValuePair(e){let t=this.visit(e.key),n=this.visit(e.value);return new we(t,n)}visitBetweenExpression(e){let t=this.visit(e.expression),n=this.visit(e.lower),r=this.visit(e.upper);return new ve(t,n,r,e.negated)}visitFunctionCall(e){let t=e.argument?this.visit(e.argument):null,n=e.over?this.visit(e.over):null;return new j(e.namespaces,e.name,t,n)}visitArrayExpression(e){let t=this.visit(e.expression);return new ge(t)}visitArrayQueryExpression(e){let t=this.visit(e.query);return new Se(t)}visitTupleExpression(e){let t=e.values.map(n=>this.visit(n));return new Ee(t)}visitCastExpression(e){let t=this.visit(e.input),n=this.visit(e.castType);return new ce(t,n)}visitTypeValue(e){let t=e.argument?this.visit(e.argument):null;return new be(e.namespaces,e.name,t)}visitSelectItem(e){let t=this.visit(e.value);return new J(t,e.identifier?.name)}visitIdentifierString(e){return e}visitRawString(e){return e}visitColumnReference(e){return e}visitSourceExpression(e){let t=this.visit(e.datasource),n=e.aliasExpression;return new R(t,n)}visitTableSource(e){return e}visitParenSource(e){let t=this.visit(e.source);return new We(t)}visitParameterExpression(e){return e}visitWindowFrameExpression(e){let t=e.partition?this.visit(e.partition):null,n=e.order?this.visit(e.order):null,r=e.frameSpec?this.visit(e.frameSpec):null;return new Fe(t,n,r)}visitWindowFrameSpec(e){return e}visitLiteralValue(e){return e}visitOrderByItem(e){let t=this.visit(e.value);return new Ie(t,e.sortDirection,e.nullsPosition)}};var At=class{constructor(e=!0){this.tableSources=[];this.visitedNodes=new Set;this.tableNameMap=new Map;this.cteNames=new Set;this.isRootVisit=!0;this.selectableOnly=e,this.handlers=new Map,this.handlers.set(b.kind,t=>this.visitSimpleSelectQuery(t)),this.handlers.set(q.kind,t=>this.visitBinarySelectQuery(t)),this.handlers.set(ie.kind,t=>this.visitValuesQuery(t)),this.handlers.set(re.kind,t=>this.visitWithClause(t)),this.handlers.set(ee.kind,t=>this.visitCommonTable(t)),this.handlers.set(W.kind,t=>this.visitFromClause(t)),this.handlers.set(fe.kind,t=>this.visitJoinClause(t)),this.handlers.set(he.kind,t=>this.visitJoinOnClause(t)),this.handlers.set(Ne.kind,t=>this.visitJoinUsingClause(t)),this.handlers.set(R.kind,t=>this.visitSourceExpression(t)),this.handlers.set(B.kind,t=>this.visitTableSource(t)),this.handlers.set(Ke.kind,t=>this.visitFunctionSource(t)),this.handlers.set(We.kind,t=>this.visitParenSource(t)),this.handlers.set(_.kind,t=>this.visitSubQuerySource(t)),this.handlers.set(se.kind,t=>this.visitInlineQuery(t)),e||(this.handlers.set(ae.kind,t=>this.visitWhereClause(t)),this.handlers.set(me.kind,t=>this.visitGroupByClause(t)),this.handlers.set(de.kind,t=>this.visitHavingClause(t)),this.handlers.set(pe.kind,t=>this.visitOrderByClause(t)),this.handlers.set(xe.kind,t=>this.visitWindowFrameClause(t)),this.handlers.set(le.kind,t=>this.visitLimitClause(t)),this.handlers.set($e.kind,t=>this.visitOffsetClause(t)),this.handlers.set(_e.kind,t=>this.visitFetchClause(t)),this.handlers.set(Be.kind,t=>this.visitForClause(t)),this.handlers.set(Ie.kind,t=>this.visitOrderByItem(t)),this.handlers.set(U.kind,t=>this.visitSelectClause(t)),this.handlers.set(J.kind,t=>this.visitSelectItem(t)),this.handlers.set(X.kind,t=>this.visitParenExpression(t)),this.handlers.set(C.kind,t=>this.visitBinaryExpression(t)),this.handlers.set(Z.kind,t=>this.visitUnaryExpression(t)),this.handlers.set(oe.kind,t=>this.visitCaseExpression(t)),this.handlers.set(we.kind,t=>this.visitCaseKeyValuePair(t)),this.handlers.set(ye.kind,t=>this.visitSwitchCaseArgument(t)),this.handlers.set(ve.kind,t=>this.visitBetweenExpression(t)),this.handlers.set(j.kind,t=>this.visitFunctionCall(t)),this.handlers.set(ge.kind,t=>this.visitArrayExpression(t)),this.handlers.set(Se.kind,t=>this.visitArrayQueryExpression(t)),this.handlers.set(Ee.kind,t=>this.visitTupleExpression(t)),this.handlers.set(ce.kind,t=>this.visitCastExpression(t)),this.handlers.set(H.kind,t=>this.visitValueList(t)),this.handlers.set(Me.kind,t=>this.visitStringSpecifierExpression(t)))}getTableSources(){return this.tableSources}reset(){this.tableSources=[],this.tableNameMap.clear(),this.visitedNodes.clear(),this.cteNames.clear()}getTableIdentifier(e){return e.qualifiedName.namespaces&&e.qualifiedName.namespaces.length>0?e.qualifiedName.namespaces.map(t=>t.name).join(".")+"."+(e.qualifiedName.name instanceof Q?e.qualifiedName.name.value:e.qualifiedName.name.name):e.qualifiedName.name instanceof Q?e.qualifiedName.name.value:e.qualifiedName.name.name}collect(e){return this.visit(e),this.getTableSources()}visit(e){if(!this.isRootVisit){this.visitNode(e);return}this.reset(),this.isRootVisit=!1;try{this.selectableOnly||this.collectCTEs(e),this.visitNode(e)}finally{this.isRootVisit=!0}}visitNode(e){if(this.visitedNodes.has(e))return;this.visitedNodes.add(e);let t=this.handlers.get(e.getKind());if(t){t(e);return}}collectCTEs(e){let t=new ne;t.visit(e);let n=t.getCommonTables();for(let r of n)this.cteNames.add(r.aliasExpression.table.name)}visitSimpleSelectQuery(e){if(e.fromClause&&e.fromClause.accept(this),!this.selectableOnly){if(e.withClause&&e.withClause.accept(this),e.whereClause&&e.whereClause.accept(this),e.groupByClause&&e.groupByClause.accept(this),e.havingClause&&e.havingClause.accept(this),e.orderByClause&&e.orderByClause.accept(this),e.windowClause)for(let t of e.windowClause.windows)t.accept(this);e.limitClause&&e.limitClause.accept(this),e.offsetClause&&e.offsetClause.accept(this),e.fetchClause&&e.fetchClause.accept(this),e.forClause&&e.forClause.accept(this),e.selectClause.accept(this)}}visitBinarySelectQuery(e){e.left.accept(this),e.right.accept(this)}visitValuesQuery(e){if(!this.selectableOnly)for(let t of e.tuples)t.accept(this)}visitWithClause(e){if(!this.selectableOnly)for(let t of e.tables)t.accept(this)}visitCommonTable(e){this.selectableOnly||e.query.accept(this)}visitFromClause(e){if(e.source.accept(this),e.joins)for(let t of e.joins)t.accept(this)}visitSourceExpression(e){e.datasource.accept(this)}visitTableSource(e){let t=this.getTableIdentifier(e);!this.tableNameMap.has(t)&&!this.isCTETable(e.table.name)&&(this.tableNameMap.set(t,!0),this.tableSources.push(e))}visitFunctionSource(e){e.argument&&this.visitValueComponent(e.argument)}visitValueComponent(e){e.accept(this)}isCTETable(e){return this.cteNames.has(e)}visitParenSource(e){e.source.accept(this)}visitSubQuerySource(e){this.selectableOnly||e.query.accept(this)}visitInlineQuery(e){this.selectableOnly||e.selectQuery.accept(this)}visitJoinClause(e){e.source.accept(this),!this.selectableOnly&&e.condition&&e.condition.accept(this)}visitJoinOnClause(e){this.selectableOnly||e.condition.accept(this)}visitJoinUsingClause(e){this.selectableOnly||e.condition.accept(this)}visitWhereClause(e){e.condition.accept(this)}visitGroupByClause(e){for(let t of e.grouping)t.accept(this)}visitHavingClause(e){e.condition.accept(this)}visitOrderByClause(e){for(let t of e.order)t.accept(this)}visitWindowFrameClause(e){e.expression.accept(this)}visitLimitClause(e){e.value.accept(this)}visitOffsetClause(e){e.value.accept(this)}visitFetchClause(e){e.expression.accept(this)}visitForClause(e){}visitOrderByItem(e){e.value.accept(this)}visitSelectClause(e){for(let t of e.items)t.accept(this)}visitSelectItem(e){e.value.accept(this)}visitParenExpression(e){e.expression.accept(this)}visitBinaryExpression(e){e.left.accept(this),e.right.accept(this)}visitUnaryExpression(e){e.expression.accept(this)}visitCaseExpression(e){e.condition&&e.condition.accept(this),e.switchCase.accept(this)}visitSwitchCaseArgument(e){for(let t of e.cases)t.accept(this);e.elseValue&&e.elseValue.accept(this)}visitCaseKeyValuePair(e){e.key.accept(this),e.value.accept(this)}visitBetweenExpression(e){e.expression.accept(this),e.lower.accept(this),e.upper.accept(this)}visitFunctionCall(e){e.argument&&e.argument.accept(this),e.over&&e.over.accept(this)}visitArrayExpression(e){e.expression.accept(this)}visitArrayQueryExpression(e){e.query.accept(this)}visitTupleExpression(e){for(let t of e.values)t.accept(this)}visitCastExpression(e){e.input.accept(this),e.castType.accept(this)}visitValueList(e){for(let t of e.values)t.accept(this)}visitStringSpecifierExpression(e){}};var tt=class extends f{static{this.kind=Symbol("HintClause")}constructor(e){super(),this.hintContent=e}getFullHint(){return"/*+ "+this.hintContent+" */"}static isHintClause(e){let t=e.trim();return t.length>=5&&t.substring(0,3)==="/*+"&&t.substring(t.length-2)==="*/"}static extractHintContent(e){let t=e.trim();if(!this.isHintClause(t))throw new Error("Not a valid hint clause: "+e);return t.slice(3,-2).trim()}};var p=class{constructor(e,t="",n=""){this.innerTokens=[];this.type=e,this.text=t,this.containerType=n}};var nt=class{static collect(e){let t=[];function n(r){if(!(!r||typeof r!="object")){r.constructor&&r.constructor.kind===T.kind&&t.push(r);for(let i of Object.keys(r)){let s=r[i];Array.isArray(s)?s.forEach(n):s&&typeof s=="object"&&s.constructor&&s.constructor.kind&&n(s)}}}return n(e),t}};var yn=class{constructor(e){this.start=e?.start??'"',this.end=e?.end??'"'}decorate(e){return e=this.start+e+this.end,e}};var wn=class{constructor(e){this.prefix=e?.prefix??":",this.suffix=e?.suffix??"",this.style=e?.style??"named"}decorate(e,t){let n="";return this.style==="anonymous"?n=this.prefix:this.style==="indexed"?n=this.prefix+t:this.style==="named"&&(n=this.prefix+e+this.suffix),e=n,e}};var gt=class extends f{static{this.kind=Symbol("UpdateQuery")}constructor(e){super(),this.withClause=e.withClause??null,this.updateClause=e.updateClause,this.setClause=e.setClause instanceof ze?e.setClause:new ze(e.setClause),this.whereClause=e.whereClause??null,this.fromClause=e.fromClause??null,this.returningClause=e.returning??null}};var Oe=class o{constructor(e=null,t=null){this.selectValues=[];this.visitedNodes=new Set;this.isRootVisit=!0;this.tableColumnResolver=e??null,this.commonTableCollector=new ne,this.commonTables=[],this.initialCommonTables=t,this.handlers=new Map,this.handlers.set(b.kind,n=>this.visitSimpleSelectQuery(n)),this.handlers.set(U.kind,n=>this.visitSelectClause(n)),this.handlers.set(R.kind,n=>this.visitSourceExpression(n)),this.handlers.set(W.kind,n=>this.visitFromClause(n))}getValues(){return this.selectValues}reset(){this.selectValues=[],this.visitedNodes.clear(),this.initialCommonTables?this.commonTables=this.initialCommonTables:this.commonTables=[]}collect(e){this.visit(e);let t=this.getValues();return this.reset(),t}visit(e){if(!this.isRootVisit){this.visitNode(e);return}this.reset(),this.isRootVisit=!1;try{this.visitNode(e)}finally{this.isRootVisit=!0}}visitNode(e){if(this.visitedNodes.has(e))return;this.visitedNodes.add(e);let t=this.handlers.get(e.getKind());if(t){t(e);return}}visitSimpleSelectQuery(e){this.commonTables.length===0&&this.initialCommonTables===null&&(this.commonTables=this.commonTableCollector.collect(e)),e.selectClause&&e.selectClause.accept(this);let t=this.selectValues.filter(r=>r.name==="*");if(t.length===0)return;if(this.selectValues.some(r=>r.value instanceof S&&r.value.namespaces===null)){e.fromClause&&this.processFromClause(e.fromClause,!0),this.selectValues=this.selectValues.filter(r=>r.name!=="*");return}let n=t.filter(r=>r.value instanceof S&&r.value.namespaces).map(r=>r.value.getNamespace());if(e.fromClause){let r=e.fromClause.getSourceAliasName();if(r&&n.includes(r)&&this.processFromClause(e.fromClause,!1),e.fromClause.joins)for(let i of e.fromClause.joins){let s=i.getSourceAliasName();s&&n.includes(s)&&this.processJoinClause(i)}}this.selectValues=this.selectValues.filter(r=>r.name!=="*")}processFromClause(e,t){if(e){let n=e.getSourceAliasName();if(this.processSourceExpression(n,e.source),e.joins&&t)for(let r of e.joins)this.processJoinClause(r)}}processJoinClause(e){let t=e.getSourceAliasName();this.processSourceExpression(t,e.source)}processSourceExpression(e,t){let n=this.commonTables.find(r=>r.aliasExpression.table.name===e);if(n){let r=this.commonTables.filter(a=>a.aliasExpression.table.name!==e);new o(this.tableColumnResolver,r).collect(n.query).forEach(a=>{this.addSelectValueAsUnique(a.name,new S(e?[e]:null,a.name))})}else new o(this.tableColumnResolver,this.commonTables).collect(t).forEach(s=>{this.addSelectValueAsUnique(s.name,new S(e?[e]:null,s.name))})}visitSelectClause(e){for(let t of e.items)this.processSelectItem(t)}processSelectItem(e){if(e.identifier)this.addSelectValueAsUnique(e.identifier.name,e.value);else if(e.value instanceof S){let t=e.value.column.name;t==="*"?this.selectValues.push({name:t,value:e.value}):this.addSelectValueAsUnique(t,e.value)}}visitSourceExpression(e){if(e.aliasExpression&&e.aliasExpression.columns){let t=e.getAliasName();e.aliasExpression.columns.forEach(n=>{this.addSelectValueAsUnique(n.name,new S(t?[t]:null,n.name))});return}else if(e.datasource instanceof B){if(this.tableColumnResolver){let t=e.datasource.getSourceName();this.tableColumnResolver(t).forEach(n=>{this.addSelectValueAsUnique(n,new S([t],n))})}return}else if(e.datasource instanceof _){let t=e.getAliasName();new o(this.tableColumnResolver,this.commonTables).collect(e.datasource.query).forEach(i=>{this.addSelectValueAsUnique(i.name,new S(t?[t]:null,i.name))});return}else if(e.datasource instanceof We)return this.visit(e.datasource.source)}visitFromClause(e){e&&this.processFromClause(e,!0)}addSelectValueAsUnique(e,t){this.selectValues.some(n=>n.name===e)||this.selectValues.push({name:e,value:t})}};var St=class extends f{static{this.kind=Symbol("CreateTableQuery")}constructor(e){super(),this.tableName=new x(e.tableName),this.isTemporary=e.isTemporary??!1,this.asSelectQuery=e.asSelectQuery}getSelectQuery(){let e;return this.asSelectQuery?e=new Oe().collect(this.asSelectQuery).map(r=>new J(r.value,r.name)):e=[new J(new Q("*"))],new b({selectClause:new U(e),fromClause:new W(new R(new B(null,this.tableName.name),null),null)})}getCountQuery(){return new b({selectClause:new U([new J(new j(null,"count",new S(null,"*"),null))]),fromClause:new W(new R(new B(null,this.tableName.name),null),null)})}};var fr={mysql:{identifierEscape:{start:"`",end:"`"},parameterSymbol:"?",parameterStyle:"anonymous"},postgres:{identifierEscape:{start:'"',end:'"'},parameterSymbol:"$",parameterStyle:"indexed"},postgresWithNamedParams:{identifierEscape:{start:'"',end:'"'},parameterSymbol:":",parameterStyle:"named"},sqlserver:{identifierEscape:{start:"[",end:"]"},parameterSymbol:"@",parameterStyle:"named"},sqlite:{identifierEscape:{start:'"',end:'"'},parameterSymbol:":",parameterStyle:"named"},oracle:{identifierEscape:{start:'"',end:'"'},parameterSymbol:":",parameterStyle:"named"},clickhouse:{identifierEscape:{start:"`",end:"`"},parameterSymbol:"?",parameterStyle:"anonymous"},firebird:{identifierEscape:{start:'"',end:'"'},parameterSymbol:"?",parameterStyle:"anonymous"},db2:{identifierEscape:{start:'"',end:'"'},parameterSymbol:"?",parameterStyle:"anonymous"},snowflake:{identifierEscape:{start:'"',end:'"'},parameterSymbol:"?",parameterStyle:"anonymous"},cloudspanner:{identifierEscape:{start:"`",end:"`"},parameterSymbol:"@",parameterStyle:"named"},duckdb:{identifierEscape:{start:'"',end:'"'},parameterSymbol:"?",parameterStyle:"anonymous"},cockroachdb:{identifierEscape:{start:'"',end:'"'},parameterSymbol:"$",parameterStyle:"indexed"},athena:{identifierEscape:{start:'"',end:'"'},parameterSymbol:"?",parameterStyle:"anonymous"},bigquery:{identifierEscape:{start:"`",end:"`"},parameterSymbol:"@",parameterStyle:"named"},hive:{identifierEscape:{start:"`",end:"`"},parameterSymbol:"?",parameterStyle:"anonymous"},mariadb:{identifierEscape:{start:"`",end:"`"},parameterSymbol:"?",parameterStyle:"anonymous"},redshift:{identifierEscape:{start:'"',end:'"'},parameterSymbol:"$",parameterStyle:"indexed"},flinksql:{identifierEscape:{start:"`",end:"`"},parameterSymbol:"?",parameterStyle:"anonymous"},mongodb:{identifierEscape:{start:'"',end:'"'},parameterSymbol:"?",parameterStyle:"anonymous"}},gn=class o{constructor(e){this.handlers=new Map;this.index=1;e?.preset&&(e={...e.preset,...e}),this.parameterDecorator=new wn({prefix:typeof e?.parameterSymbol=="string"?e.parameterSymbol:e?.parameterSymbol?.start??":",suffix:typeof e?.parameterSymbol=="object"?e.parameterSymbol.end:"",style:e?.parameterStyle??"named"}),this.identifierDecorator=new yn({start:e?.identifierEscape?.start??'"',end:e?.identifierEscape?.end??'"'}),this.handlers.set(H.kind,t=>this.visitValueList(t)),this.handlers.set(S.kind,t=>this.visitColumnReference(t)),this.handlers.set(Le.kind,t=>this.visitQualifiedName(t)),this.handlers.set(j.kind,t=>this.visitFunctionCall(t)),this.handlers.set(Z.kind,t=>this.visitUnaryExpression(t)),this.handlers.set(C.kind,t=>this.visitBinaryExpression(t)),this.handlers.set(z.kind,t=>this.visitLiteralValue(t)),this.handlers.set(T.kind,t=>this.visitParameterExpression(t)),this.handlers.set(ye.kind,t=>this.visitSwitchCaseArgument(t)),this.handlers.set(we.kind,t=>this.visitCaseKeyValuePair(t)),this.handlers.set(Q.kind,t=>this.visitRawString(t)),this.handlers.set(x.kind,t=>this.visitIdentifierString(t)),this.handlers.set(X.kind,t=>this.visitParenExpression(t)),this.handlers.set(ce.kind,t=>this.visitCastExpression(t)),this.handlers.set(oe.kind,t=>this.visitCaseExpression(t)),this.handlers.set(ge.kind,t=>this.visitArrayExpression(t)),this.handlers.set(Se.kind,t=>this.visitArrayQueryExpression(t)),this.handlers.set(st.kind,t=>this.visitArraySliceExpression(t)),this.handlers.set(ot.kind,t=>this.visitArrayIndexExpression(t)),this.handlers.set(ve.kind,t=>this.visitBetweenExpression(t)),this.handlers.set(Me.kind,t=>this.visitStringSpecifierExpression(t)),this.handlers.set(be.kind,t=>this.visitTypeValue(t)),this.handlers.set(Ee.kind,t=>this.visitTupleExpression(t)),this.handlers.set(se.kind,t=>this.visitInlineQuery(t)),this.handlers.set(Fe.kind,t=>this.visitWindowFrameExpression(t)),this.handlers.set(Re.kind,t=>this.visitWindowFrameSpec(t)),this.handlers.set(rt.kind,t=>this.visitWindowFrameBoundStatic(t)),this.handlers.set(it.kind,t=>this.visitWindowFrameBoundaryValue(t)),this.handlers.set(je.kind,t=>this.visitPartitionByClause(t)),this.handlers.set(pe.kind,t=>this.visitOrderByClause(t)),this.handlers.set(Ie.kind,t=>this.visitOrderByItem(t)),this.handlers.set(J.kind,t=>this.visitSelectItem(t)),this.handlers.set(U.kind,t=>this.visitSelectClause(t)),this.handlers.set(ht.kind,t=>this.visitDistinct(t)),this.handlers.set(ft.kind,t=>this.visitDistinctOn(t)),this.handlers.set(tt.kind,t=>this.visitHintClause(t)),this.handlers.set(B.kind,t=>this.visitTableSource(t)),this.handlers.set(Ke.kind,t=>this.visitFunctionSource(t)),this.handlers.set(R.kind,t=>this.visitSourceExpression(t)),this.handlers.set(Y.kind,t=>this.visitSourceAliasExpression(t)),this.handlers.set(W.kind,t=>this.visitFromClause(t)),this.handlers.set(fe.kind,t=>this.visitJoinClause(t)),this.handlers.set(he.kind,t=>this.visitJoinOnClause(t)),this.handlers.set(Ne.kind,t=>this.visitJoinUsingClause(t)),this.handlers.set(ae.kind,t=>this.visitWhereClause(t)),this.handlers.set(me.kind,t=>this.visitGroupByClause(t)),this.handlers.set(de.kind,t=>this.visitHavingClause(t)),this.handlers.set(Ye.kind,t=>this.visitWindowClause(t)),this.handlers.set(xe.kind,t=>this.visitWindowFrameClause(t)),this.handlers.set(le.kind,t=>this.visitLimitClause(t)),this.handlers.set($e.kind,t=>this.visitOffsetClause(t)),this.handlers.set(_e.kind,t=>this.visitFetchClause(t)),this.handlers.set(at.kind,t=>this.visitFetchExpression(t)),this.handlers.set(Be.kind,t=>this.visitForClause(t)),this.handlers.set(re.kind,t=>this.visitWithClause(t)),this.handlers.set(ee.kind,t=>this.visitCommonTable(t)),this.handlers.set(b.kind,t=>this.visitSimpleQuery(t)),this.handlers.set(_.kind,t=>this.visitSubQuerySource(t)),this.handlers.set(q.kind,t=>this.visitBinarySelectQuery(t)),this.handlers.set(ie.kind,t=>this.visitValuesQuery(t)),this.handlers.set(Ee.kind,t=>this.visitTupleExpression(t)),this.handlers.set(qe.kind,t=>this.visitInsertQuery(t)),this.handlers.set(Ze.kind,t=>this.visitInsertClause(t)),this.handlers.set(gt.kind,t=>this.visitUpdateQuery(t)),this.handlers.set(Ct.kind,t=>this.visitUpdateClause(t)),this.handlers.set(ze.kind,t=>this.visitSetClause(t)),this.handlers.set(Xe.kind,t=>this.visitSetClauseItem(t)),this.handlers.set(Gt.kind,t=>this.visitReturningClause(t)),this.handlers.set(St.kind,t=>this.visitCreateTableQuery(t))}static{this.SPACE_TOKEN=new p(10," ")}static{this.COMMA_TOKEN=new p(3,",")}static{this.ARGUMENT_SPLIT_COMMA_TOKEN=new p(11,",")}static{this.PAREN_OPEN_TOKEN=new p(4,"(")}static{this.PAREN_CLOSE_TOKEN=new p(4,")")}static{this.DOT_TOKEN=new p(8,".")}visitBinarySelectQuery(e){let t=new p(0,"");return t.innerTokens.push(this.visit(e.left)),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new p(1,e.operator.value,"BinarySelectQueryOperator")),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(this.visit(e.right)),t}static commaSpaceTokens(){return[o.COMMA_TOKEN,o.SPACE_TOKEN]}static argumentCommaSpaceTokens(){return[o.ARGUMENT_SPLIT_COMMA_TOKEN,o.SPACE_TOKEN]}visitQualifiedName(e){let t=new p(0,"","QualifiedName");if(e.namespaces)for(let n=0;n<e.namespaces.length;n++)t.innerTokens.push(e.namespaces[n].accept(this)),t.innerTokens.push(o.DOT_TOKEN);return t.innerTokens.push(e.name.accept(this)),t}visitPartitionByClause(e){let t=new p(1,"partition by","PartitionByClause");return t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(this.visit(e.value)),t}visitOrderByClause(e){let t=new p(1,"order by","OrderByClause");t.innerTokens.push(o.SPACE_TOKEN);for(let n=0;n<e.order.length;n++)n>0&&t.innerTokens.push(...o.commaSpaceTokens()),t.innerTokens.push(this.visit(e.order[n]));return t}visitOrderByItem(e){let t=new p(0,"","OrderByItem");return t.innerTokens.push(this.visit(e.value)),e.sortDirection&&e.sortDirection!=="asc"&&(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new p(1,"desc"))),e.nullsPosition&&(e.nullsPosition==="first"?(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new p(1,"nulls first"))):e.nullsPosition==="last"&&(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new p(1,"nulls last")))),t}parse(e){this.index=1;let t=this.visit(e),n=nt.collect(e).sort((i,s)=>(i.index??0)-(s.index??0)),r=this.parameterDecorator.style;if(r==="named"){let i={};for(let s of n){let a=s.name.value;if(i.hasOwnProperty(a)){if(i[a]!==s.value)throw new Error(`Duplicate parameter name '${a}' with different values detected during query composition.`);continue}i[a]=s.value}return{token:t,params:i}}else if(r==="indexed"){let i=n.map(s=>s.value);return{token:t,params:i}}else if(r==="anonymous"){let i=n.map(s=>s.value);return{token:t,params:i}}return{token:t,params:[]}}visit(e){let t=this.handlers.get(e.getKind());if(t){let n=t(e);return this.addCommentsToToken(n,e.comments),n}throw new Error(`[SqlPrintTokenParser] No handler for kind: ${e.getKind().toString()}`)}addCommentsToToken(e,t){if(!t||t.length===0)return;let n=[];for(let r of t)r.trim()&&n.push(new p(6,`/* ${r} */`));n.length>0&&e.innerTokens.unshift(...n)}visitValueList(e){let t=new p(0,"","ValueList");for(let n=0;n<e.values.length;n++)n>0&&t.innerTokens.push(...o.argumentCommaSpaceTokens()),t.innerTokens.push(this.visit(e.values[n]));return t}visitColumnReference(e){let t=new p(0,"","ColumnReference");return t.innerTokens.push(e.qualifiedName.accept(this)),t}visitFunctionCall(e){let t=new p(0,"","FunctionCall");return t.innerTokens.push(e.qualifiedName.accept(this)),t.innerTokens.push(o.PAREN_OPEN_TOKEN),e.argument&&t.innerTokens.push(this.visit(e.argument)),t.innerTokens.push(o.PAREN_CLOSE_TOKEN),e.over&&(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new p(1,"over")),e.over instanceof x?(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(e.over.accept(this))):(t.innerTokens.push(o.PAREN_OPEN_TOKEN),t.innerTokens.push(this.visit(e.over)),t.innerTokens.push(o.PAREN_CLOSE_TOKEN))),t}visitUnaryExpression(e){let t=new p(0,"","UnaryExpression");return t.innerTokens.push(this.visit(e.operator)),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(this.visit(e.expression)),t}visitBinaryExpression(e){let t=new p(0,"","BinaryExpression");return t.innerTokens.push(this.visit(e.left)),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new p(5,e.operator.value)),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(this.visit(e.right)),t}visitLiteralValue(e){let t;return typeof e.value=="string"?e.isDollarString?t=e.value:t=`'${e.value.replace(/'/g,"''")}'`:e.value===null?t="null":t=e.value.toString(),new p(2,t,"LiteralValue")}visitParameterExpression(e){e.index=this.index;let t=this.parameterDecorator.decorate(e.name.value,e.index),n=new p(7,t);return this.index++,n}visitSwitchCaseArgument(e){let t=new p(0,"","SwitchCaseArgument");for(let n of e.cases)t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(n.accept(this));return e.elseValue&&(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(this.createElseToken(e.elseValue))),t}createElseToken(e){let t=new p(0,"","ElseClause");t.innerTokens.push(new p(1,"else")),t.innerTokens.push(o.SPACE_TOKEN);let n=new p(0,"","CaseElseValue");return n.innerTokens.push(this.visit(e)),t.innerTokens.push(n),t}visitCaseKeyValuePair(e){let t=new p(0,"","CaseKeyValuePair");t.innerTokens.push(new p(1,"when")),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(this.visit(e.key)),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new p(1,"then")),t.innerTokens.push(o.SPACE_TOKEN);let n=new p(0,"","CaseThenValue");return n.innerTokens.push(this.visit(e.value)),t.innerTokens.push(n),t}visitRawString(e){return new p(2,e.value,"RawString")}visitIdentifierString(e){let t=e.name==="*"?e.name:this.identifierDecorator.decorate(e.name);return new p(2,t,"IdentifierString")}visitParenExpression(e){let t=new p(0,"","ParenExpression");return t.innerTokens.push(o.PAREN_OPEN_TOKEN),t.innerTokens.push(this.visit(e.expression)),t.innerTokens.push(o.PAREN_CLOSE_TOKEN),t}visitCastExpression(e){let t=new p(0,"","CastExpression");return t.innerTokens.push(this.visit(e.input)),t.innerTokens.push(new p(5,"::")),t.innerTokens.push(this.visit(e.castType)),t}visitCaseExpression(e){let t=new p(0,"","CaseExpression");return t.innerTokens.push(new p(1,"case")),e.condition&&(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(this.visit(e.condition))),t.innerTokens.push(this.visit(e.switchCase)),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new p(1,"end")),t}visitArrayExpression(e){let t=new p(0,"","ArrayExpression");return t.innerTokens.push(new p(1,"array")),t.innerTokens.push(new p(4,"[")),t.innerTokens.push(this.visit(e.expression)),t.innerTokens.push(new p(4,"]")),t}visitArrayQueryExpression(e){let t=new p(0,"","ArrayExpression");return t.innerTokens.push(new p(1,"array")),t.innerTokens.push(new p(4,"(")),t.innerTokens.push(this.visit(e.query)),t.innerTokens.push(new p(4,")")),t}visitArraySliceExpression(e){let t=new p(0,"","ArrayExpression");return t.innerTokens.push(this.visit(e.array)),t.innerTokens.push(new p(4,"[")),e.startIndex&&t.innerTokens.push(this.visit(e.startIndex)),t.innerTokens.push(new p(5,":")),e.endIndex&&t.innerTokens.push(this.visit(e.endIndex)),t.innerTokens.push(new p(4,"]")),t}visitArrayIndexExpression(e){let t=new p(0,"","ArrayExpression");return t.innerTokens.push(this.visit(e.array)),t.innerTokens.push(new p(4,"[")),t.innerTokens.push(this.visit(e.index)),t.innerTokens.push(new p(4,"]")),t}visitBetweenExpression(e){let t=new p(0,"","BetweenExpression");return t.innerTokens.push(this.visit(e.expression)),t.innerTokens.push(o.SPACE_TOKEN),e.negated&&(t.innerTokens.push(new p(1,"not")),t.innerTokens.push(o.SPACE_TOKEN)),t.innerTokens.push(new p(1,"between")),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(this.visit(e.lower)),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new p(1,"and")),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(this.visit(e.upper)),t}visitStringSpecifierExpression(e){let t=e.specifier.accept(this).text,n=e.value.accept(this).text;return new p(2,t+n,"StringSpecifierExpression")}visitTypeValue(e){let t=new p(0,"","TypeValue");return t.innerTokens.push(e.qualifiedName.accept(this)),e.argument&&(t.innerTokens.push(o.PAREN_OPEN_TOKEN),t.innerTokens.push(this.visit(e.argument)),t.innerTokens.push(o.PAREN_CLOSE_TOKEN)),t}visitTupleExpression(e){let t=new p(0,"","TupleExpression");t.innerTokens.push(o.PAREN_OPEN_TOKEN);for(let n=0;n<e.values.length;n++)n>0&&t.innerTokens.push(...o.argumentCommaSpaceTokens()),t.innerTokens.push(this.visit(e.values[n]));return t.innerTokens.push(o.PAREN_CLOSE_TOKEN),t}visitWindowFrameExpression(e){let t=new p(0,"","WindowFrameExpression"),n=!0;return e.partition&&(t.innerTokens.push(this.visit(e.partition)),n=!1),e.order&&(n?n=!1:t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(this.visit(e.order))),e.frameSpec&&(n?n=!1:t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(this.visit(e.frameSpec))),t}visitWindowFrameSpec(e){let t=new p(0,"","WindowFrameSpec");return t.innerTokens.push(new p(1,e.frameType)),e.endBound===null?(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(e.startBound.accept(this))):(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new p(1,"between")),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(e.startBound.accept(this)),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new p(1,"and")),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(e.endBound.accept(this))),t}visitWindowFrameBoundaryValue(e){let t=new p(0,"","WindowFrameBoundaryValue");return t.innerTokens.push(e.value.accept(this)),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new p(1,e.isFollowing?"following":"preceding")),t}visitWindowFrameBoundStatic(e){return new p(1,e.bound)}visitSelectItem(e){let t=new p(0,"","SelectItem");if(t.innerTokens.push(this.visit(e.value)),!e.identifier)return t;if(e.value instanceof S){let n=e.value.column.name;if(e.identifier.name===n)return t}return t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new p(1,"as")),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(this.visit(e.identifier)),t}visitSelectClause(e){let t=new p(1,"select","SelectClause"),n="select";for(let r of e.hints)n+=" "+this.visit(r).text;if(e.distinct){let r=e.distinct.accept(this);if(r.innerTokens&&r.innerTokens.length>0){let i=r.text;for(let s of r.innerTokens)i+=this.flattenTokenText(s);n+=" "+i}else n+=" "+r.text}t.text=n,t.innerTokens.push(o.SPACE_TOKEN);for(let r=0;r<e.items.length;r++)r>0&&t.innerTokens.push(...o.commaSpaceTokens()),t.innerTokens.push(this.visit(e.items[r]));return t}flattenTokenText(e){let t=e.text;if(e.innerTokens)for(let n of e.innerTokens)t+=this.flattenTokenText(n);return t}visitHintClause(e){return new p(2,e.getFullHint())}visitDistinct(e){return new p(1,"distinct")}visitDistinctOn(e){let t=new p(0,"","DistinctOn");return t.innerTokens.push(new p(1,"distinct on")),t.innerTokens.push(o.PAREN_OPEN_TOKEN),t.innerTokens.push(e.value.accept(this)),t.innerTokens.push(o.PAREN_CLOSE_TOKEN),t}visitTableSource(e){let t="";Array.isArray(e.namespaces)&&e.namespaces.length>0&&(t=e.namespaces.map(r=>r.accept(this).text).join(".")+"."),t+=e.table.accept(this).text;let n=new p(2,t);return e.identifier&&(e.identifier.name,e.table.name),n}visitSourceExpression(e){let t=new p(0,"","SourceExpression");if(t.innerTokens.push(e.datasource.accept(this)),!e.aliasExpression)return t;if(e.datasource instanceof B){let n=e.datasource.table.name;return e.aliasExpression.table.name===n||(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new p(1,"as")),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(e.aliasExpression.accept(this))),t}else return t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new p(1,"as")),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(e.aliasExpression.accept(this)),t}visitFromClause(e){let t=new p(1,"from","FromClause");if(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(this.visit(e.source)),e.joins)for(let n=0;n<e.joins.length;n++)t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(this.visit(e.joins[n]));return t}visitJoinClause(e){let t=new p(0,"","JoinClause");return t.innerTokens.push(new p(1,e.joinType.value)),e.lateral&&(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new p(1,"lateral"))),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(this.visit(e.source)),e.condition&&(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(this.visit(e.condition))),t}visitJoinOnClause(e){let t=new p(0,"","JoinOnClause");return t.innerTokens.push(new p(1,"on")),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(this.visit(e.condition)),t}visitJoinUsingClause(e){let t=new p(0,"","JoinUsingClause");return t.innerTokens.push(new p(1,"using")),t.innerTokens.push(o.PAREN_OPEN_TOKEN),t.innerTokens.push(this.visit(e.condition)),t.innerTokens.push(o.PAREN_CLOSE_TOKEN),t}visitFunctionSource(e){let t=new p(0,"","FunctionSource");return t.innerTokens.push(e.qualifiedName.accept(this)),t.innerTokens.push(o.PAREN_OPEN_TOKEN),e.argument&&t.innerTokens.push(this.visit(e.argument)),t.innerTokens.push(o.PAREN_CLOSE_TOKEN),t}visitSourceAliasExpression(e){let t=new p(0,"","SourceAliasExpression");if(t.innerTokens.push(this.visit(e.table)),e.columns){t.innerTokens.push(o.PAREN_OPEN_TOKEN);for(let n=0;n<e.columns.length;n++)n>0&&t.innerTokens.push(...o.argumentCommaSpaceTokens()),t.innerTokens.push(this.visit(e.columns[n]));t.innerTokens.push(o.PAREN_CLOSE_TOKEN)}return t}visitWhereClause(e){let t=new p(1,"where","WhereClause");return t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(this.visit(e.condition)),t}visitGroupByClause(e){let t=new p(1,"group by","GroupByClause");t.innerTokens.push(o.SPACE_TOKEN);for(let n=0;n<e.grouping.length;n++)n>0&&t.innerTokens.push(...o.commaSpaceTokens()),t.innerTokens.push(this.visit(e.grouping[n]));return t}visitHavingClause(e){let t=new p(1,"having","HavingClause");return t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(this.visit(e.condition)),t}visitWindowClause(e){let t=new p(1,"window","WindowClause");t.innerTokens.push(o.SPACE_TOKEN);for(let n=0;n<e.windows.length;n++)n>0&&t.innerTokens.push(...o.commaSpaceTokens()),t.innerTokens.push(this.visit(e.windows[n]));return t}visitWindowFrameClause(e){let t=new p(0,"","WindowFrameClause");return t.innerTokens.push(e.name.accept(this)),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new p(1,"as")),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(o.PAREN_OPEN_TOKEN),t.innerTokens.push(this.visit(e.expression)),t.innerTokens.push(o.PAREN_CLOSE_TOKEN),t}visitLimitClause(e){let t=new p(1,"limit","LimitClause");return t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(this.visit(e.value)),t}visitOffsetClause(e){let t=new p(1,"offset","OffsetClause");return t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(this.visit(e.value)),t}visitFetchClause(e){let t=new p(1,"fetch","FetchClause");return t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(this.visit(e.expression)),t}visitFetchExpression(e){let t=new p(0,"","FetchExpression");return t.innerTokens.push(new p(1,e.type)),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(e.count.accept(this)),e.unit&&(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new p(1,e.unit))),t}visitForClause(e){let t=new p(1,"for","ForClause");return t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new p(1,e.lockMode)),t}visitWithClause(e){let t=new p(1,"with","WithClause");t.innerTokens.push(o.SPACE_TOKEN),e.recursive&&(t.innerTokens.push(new p(1,"recursive")),t.innerTokens.push(o.SPACE_TOKEN));for(let n=0;n<e.tables.length;n++)n>0&&t.innerTokens.push(...o.commaSpaceTokens()),t.innerTokens.push(e.tables[n].accept(this));return t.innerTokens.push(o.SPACE_TOKEN),t}visitCommonTable(e){let t=new p(0,"","CommonTable");t.innerTokens.push(e.aliasExpression.accept(this)),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new p(1,"as")),t.innerTokens.push(o.SPACE_TOKEN),e.materialized!==null&&(e.materialized?t.innerTokens.push(new p(1,"materialized")):t.innerTokens.push(new p(1,"not materialized")),t.innerTokens.push(o.SPACE_TOKEN)),t.innerTokens.push(o.PAREN_OPEN_TOKEN);let n=new p(0,"","SubQuerySource");return n.innerTokens.push(e.query.accept(this)),t.innerTokens.push(n),t.innerTokens.push(o.PAREN_CLOSE_TOKEN),t}visitSimpleQuery(e){let t=new p(0,"","SimpleSelectQuery");return e.withClause&&t.innerTokens.push(e.withClause.accept(this)),t.innerTokens.push(e.selectClause.accept(this)),e.fromClause&&(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(e.fromClause.accept(this)),e.whereClause&&(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(e.whereClause.accept(this))),e.groupByClause&&(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(e.groupByClause.accept(this))),e.havingClause&&(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(e.havingClause.accept(this))),e.orderByClause&&(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(e.orderByClause.accept(this))),e.windowClause&&(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(e.windowClause.accept(this))),e.limitClause&&(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(e.limitClause.accept(this))),e.offsetClause&&(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(e.offsetClause.accept(this))),e.fetchClause&&(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(e.fetchClause.accept(this))),e.forClause&&(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(e.forClause.accept(this)))),t}visitSubQuerySource(e){let t=new p(0,"");t.innerTokens.push(o.PAREN_OPEN_TOKEN);let n=new p(0,"","SubQuerySource");return n.innerTokens.push(e.query.accept(this)),t.innerTokens.push(n),t.innerTokens.push(o.PAREN_CLOSE_TOKEN),t}visitValuesQuery(e){let t=new p(1,"values","ValuesQuery");t.innerTokens.push(o.SPACE_TOKEN);let n=new p(0,"","Values");for(let r=0;r<e.tuples.length;r++)r>0&&n.innerTokens.push(...o.commaSpaceTokens()),n.innerTokens.push(e.tuples[r].accept(this));return t.innerTokens.push(n),t}visitInlineQuery(e){let t=new p(0,"");t.innerTokens.push(o.PAREN_OPEN_TOKEN);let n=new p(0,"","InlineQuery");return n.innerTokens.push(e.selectQuery.accept(this)),t.innerTokens.push(n),t.innerTokens.push(o.PAREN_CLOSE_TOKEN),t}visitInsertQuery(e){let t=new p(0,"","InsertQuery");return t.innerTokens.push(this.visit(e.insertClause)),e.selectQuery&&(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(this.visit(e.selectQuery))),t}visitInsertClause(e){let t=new p(0,"");if(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new p(1,"insert into")),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(e.source.accept(this)),e.columns.length>0){t.innerTokens.push(o.PAREN_OPEN_TOKEN);for(let n=0;n<e.columns.length;n++)n>0&&t.innerTokens.push(...o.commaSpaceTokens()),t.innerTokens.push(e.columns[n].accept(this));t.innerTokens.push(o.PAREN_CLOSE_TOKEN)}return t}visitUpdateQuery(e){let t=new p(0,"","UpdateQuery");return e.withClause&&t.innerTokens.push(e.withClause.accept(this)),t.innerTokens.push(e.updateClause.accept(this)),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(e.setClause.accept(this)),e.fromClause&&(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(e.fromClause.accept(this))),e.whereClause&&(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(e.whereClause.accept(this))),e.returningClause&&(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(e.returningClause.accept(this))),t}visitUpdateClause(e){let t=new p(1,"update","UpdateClause");return t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(e.source.accept(this)),t}visitSetClause(e){let t=new p(1,"set","SelectClause");t.innerTokens.push(o.SPACE_TOKEN);for(let n=0;n<e.items.length;n++)n>0&&t.innerTokens.push(...o.commaSpaceTokens()),t.innerTokens.push(this.visit(e.items[n]));return t}visitSetClauseItem(e){let t=new p(0,"","SetClauseItem");return t.innerTokens.push(e.column.accept(this)),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new p(5,"=")),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(e.value.accept(this)),t}visitReturningClause(e){let t=new p(1,"returning","ReturningClause");t.innerTokens.push(o.SPACE_TOKEN);for(let n=0;n<e.columns.length;n++)n>0&&t.innerTokens.push(...o.commaSpaceTokens()),t.innerTokens.push(this.visit(e.columns[n]));return t}visitCreateTableQuery(e){let t=new p(1,e.isTemporary?"create temporary table":"create table","CreateTableQuery");return t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(e.tableName.accept(this)),e.asSelectQuery&&(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new p(1,"as")),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(e.asSelectQuery.accept(this))),t}};var Qt=class{constructor(e=" ",t=0,n=`\r
13
- `){this.indentChar=e,this.indentSize=t,this.newline=n,this.lines=[],this.appendNewline(0)}print(){let e="";for(let t of this.lines)t.text!==""&&(e+=this.indent(t.level)+t.text);return e.trimEnd()}indent(e){return this.indentChar.repeat(this.indentSize*e)}appendNewline(e){if(this.lines.length>0){let t=this.lines[this.lines.length-1];t.text!==""&&(t.text=t.text.trimEnd()+this.newline)}this.lines.push(new Gn(e,""))}appendText(e){if(this.lines.length>0){let t=this.lines.length-1,n=this.lines[t];e===" "&&n.text===""||(n.text+=e)}else throw new Error("No tokens to append to.")}getCurrentLine(){if(this.lines.length>0)return this.lines[this.lines.length-1];throw new Error("No tokens to get current line from.")}},Gn=class{constructor(e,t){this.level=e,this.text=t}};var Sn=class{constructor(e){this.indentChar=e?.indentChar??"",this.indentSize=e?.indentSize??0,this.newline=e?.newline??" ",this.commaBreak=e?.commaBreak??"none",this.andBreak=e?.andBreak??"none",this.keywordCase=e?.keywordCase??"none",this.exportComment=e?.exportComment??!1,this.strictCommentPlacement=e?.strictCommentPlacement??!1,this.linePrinter=new Qt(this.indentChar,this.indentSize,this.newline),this.indentIncrementContainers=new Set(e?.indentIncrementContainerTypes??["SelectClause","FromClause","WhereClause","GroupByClause","HavingClause","WindowFrameExpression","PartitionByClause","OrderByClause","WindowClause","LimitClause","OffsetClause","SubQuerySource","BinarySelectQueryOperator","Values","WithClause","SwitchCaseArgument","CaseKeyValuePair","CaseThenValue","ElseClause","CaseElseValue"])}print(e,t=0){return this.linePrinter=new Qt(this.indentChar,this.indentSize,this.newline),this.linePrinter.lines.length>0&&t!==this.linePrinter.lines[0].level&&(this.linePrinter.lines[0].level=t),this.appendToken(e,t),this.linePrinter.print()}appendToken(e,t){if((!e.innerTokens||e.innerTokens.length===0)&&e.text==="")return;let n=this.linePrinter.getCurrentLine();if(e.type===1){let i=e.text;this.keywordCase==="upper"?i=i.toUpperCase():this.keywordCase==="lower"&&(i=i.toLowerCase()),this.linePrinter.appendText(i)}else if(e.type===3){let i=e.text;this.commaBreak==="before"?(this.linePrinter.appendNewline(t),this.linePrinter.appendText(i)):this.commaBreak==="after"?(this.linePrinter.appendText(i),this.linePrinter.appendNewline(t)):this.linePrinter.appendText(i)}else if(e.type===5&&e.text.toLowerCase()==="and"){let i=e.text;this.keywordCase==="upper"?i=i.toUpperCase():this.keywordCase==="lower"&&(i=i.toLowerCase()),this.andBreak==="before"?(this.linePrinter.appendNewline(t),this.linePrinter.appendText(i)):this.andBreak==="after"?(this.linePrinter.appendText(i),this.linePrinter.appendNewline(t)):this.linePrinter.appendText(i)}else if(e.containerType==="JoinClause"){let i=e.text;this.keywordCase==="upper"?i=i.toUpperCase():this.keywordCase==="lower"&&(i=i.toLowerCase()),this.linePrinter.appendNewline(t),this.linePrinter.appendText(i)}else e.type===6?this.exportComment&&(this.linePrinter.appendText(e.text),this.linePrinter.appendText(" ")):this.linePrinter.appendText(e.text);if(e.keywordTokens&&e.keywordTokens.length>0)for(let i=0;i<e.keywordTokens.length;i++){let s=e.keywordTokens[i];this.appendToken(s,t)}let r=t;this.newline!==" "&&n.text!==""&&this.indentIncrementContainers.has(e.containerType)&&(r++,this.linePrinter.appendNewline(r));for(let i=0;i<e.innerTokens.length;i++){let s=e.innerTokens[i];this.appendToken(s,r)}r!==t&&this.linePrinter.appendNewline(t)}};var _r=["mysql","postgres","sqlserver","sqlite"],ut=class{constructor(e={}){let t=e.preset?fr[e.preset]:void 0;if(e.preset&&!t)throw new Error(`Invalid preset: ${e.preset}`);let n={...t,identifierEscape:e.identifierEscape??t?.identifierEscape,parameterSymbol:e.parameterSymbol??t?.parameterSymbol,parameterStyle:e.parameterStyle??t?.parameterStyle};this.parser=new gn(n),this.printer=new Sn(e)}format(e){let{token:t,params:n}=this.parser.parse(e);return{formattedSql:this.printer.print(t),params:n}}};var Ge=class{constructor(){this.sqlFormatter=new ut({identifierEscape:{start:'"',end:'"'},parameterSymbol:":",parameterStyle:"named"})}format(e,t=null){return t&&(this.sqlFormatter=new ut(t)),this.sqlFormatter.format(e).formattedSql}formatWithParameters(e,t=null){t&&(this.sqlFormatter=new ut(t));let n=this.sqlFormatter.format(e);return{sql:n.formattedSql,params:n.params}}visit(e){return this.format(e)}};var vn=class{constructor(){this.sourceCollector=new At(!0),this.cteCollector=new ne,this.formatter=new Ge}build(e){if(e.length===0)return new re(!1,e);let t=this.resolveDuplicateNames(e),{tableMap:n,recursiveCTEs:r,dependencies:i}=this.buildDependencyGraph(t),s=this.sortCommonTables(t,n,r,i);return new re(r.size>0,s)}resolveDuplicateNames(e){let t=new Map;for(let r of e){let i=r.aliasExpression.table.name;t.has(i)||t.set(i,[]),t.get(i).push(r)}let n=[];for(let[r,i]of t.entries()){if(i.length===1){n.push(i[0]);continue}let s=i.map(l=>this.formatter.format(l.query));if(new Set(s).size===1)n.push(i[0]);else throw new Error(`CTE name conflict detected: '${r}' has multiple different definitions`)}return n}buildDependencyGraph(e){let t=new Map;for(let s of e)t.set(s.aliasExpression.table.name,s);let n=new Set,r=new Map,i=new Map;for(let s of e){let a=s.aliasExpression.table.name,l=this.sourceCollector.collect(s.query);for(let c of l)if(c.table.name===a){n.add(a);break}r.has(a)||r.set(a,new Set);let u=this.cteCollector.collect(s.query);for(let c of u){let d=c.aliasExpression.table.name;t.has(d)&&(r.get(a).add(d),i.has(d)||i.set(d,new Set),i.get(d).add(a))}}return{tableMap:t,recursiveCTEs:n,dependencies:r}}sortCommonTables(e,t,n,r){let i=[],s=[],a=new Set,l=new Set,u=c=>{if(a.has(c))return;if(l.has(c))throw new Error(`Circular reference detected in CTE: ${c}`);l.add(c);let d=r.get(c)||new Set;for(let h of d)u(h);l.delete(c),a.add(c),n.has(c)?i.push(t.get(c)):s.push(t.get(c))};for(let c of e){let d=c.aliasExpression.table.name;a.has(d)||u(d)}return[...i,...s]}};var bn=class{constructor(){this.nameConflictResolver=new vn,this.cteCollector=new ne}inject(e,t){if(t.length===0)return e;t.push(...this.cteCollector.collect(e));let n=this.nameConflictResolver.build(t);if(e instanceof b)return this.injectIntoSimpleQuery(e,n);if(e instanceof q)return this.injectIntoBinaryQuery(e,n);throw new Error("Unsupported query type")}injectIntoSimpleQuery(e,t){if(e.withClause)throw new Error("The query already has a WITH clause. Please remove it before injecting new CTEs.");return e.withClause=t,e}injectIntoBinaryQuery(e,t){if(e.left instanceof b)return this.injectIntoSimpleQuery(e.left,t),e;if(e.left instanceof q)return this.injectIntoBinaryQuery(e.left,t),e;throw new Error("Unsupported query type for BinarySelectQuery left side")}};var De=class{constructor(){}static normalize(e){let n=new ne().collect(e);return n.length===0?e:(new wt().execute(e),new bn().inject(e,n))}};var Yn=(t=>(t.ColumnNameOnly="columnNameOnly",t.FullName="fullName",t))(Yn||{}),Te=class{constructor(e,t=!1,n="columnNameOnly",r){this.selectValues=[];this.visitedNodes=new Set;this.isRootVisit=!0;this.tableColumnResolver=null;this.commonTables=[];this.tableColumnResolver=e??null,this.includeWildCard=t,this.commonTableCollector=new ne,this.commonTables=[],this.duplicateDetection=n,this.options=r||{},this.handlers=new Map,this.handlers.set(b.kind,i=>this.visitSimpleSelectQuery(i)),this.handlers.set(U.kind,i=>this.visitSelectClause(i)),this.handlers.set(W.kind,i=>this.visitFromClause(i)),this.handlers.set(ae.kind,i=>this.visitWhereClause(i)),this.handlers.set(me.kind,i=>this.visitGroupByClause(i)),this.handlers.set(de.kind,i=>this.visitHavingClause(i)),this.handlers.set(pe.kind,i=>this.visitOrderByClause(i)),this.handlers.set(xe.kind,i=>this.visitWindowFrameClause(i)),this.handlers.set(le.kind,i=>this.visitLimitClause(i)),this.handlers.set($e.kind,i=>this.offsetClause(i)),this.handlers.set(_e.kind,i=>this.visitFetchClause(i)),this.handlers.set(he.kind,i=>this.visitJoinOnClause(i)),this.handlers.set(Ne.kind,i=>this.visitJoinUsingClause(i)),this.handlers.set(S.kind,i=>this.visitColumnReference(i)),this.handlers.set(C.kind,i=>this.visitBinaryExpression(i)),this.handlers.set(Z.kind,i=>this.visitUnaryExpression(i)),this.handlers.set(j.kind,i=>this.visitFunctionCall(i)),this.handlers.set(X.kind,i=>this.visitParenExpression(i)),this.handlers.set(oe.kind,i=>this.visitCaseExpression(i)),this.handlers.set(ce.kind,i=>this.visitCastExpression(i)),this.handlers.set(ve.kind,i=>this.visitBetweenExpression(i)),this.handlers.set(ge.kind,i=>this.visitArrayExpression(i)),this.handlers.set(Se.kind,i=>this.visitArrayQueryExpression(i)),this.handlers.set(H.kind,i=>this.visitValueList(i)),this.handlers.set(xe.kind,i=>this.visitWindowFrameClause(i)),this.handlers.set(Fe.kind,i=>this.visitWindowFrameExpression(i)),this.handlers.set(je.kind,i=>this.visitPartitionByClause(i))}getValues(){return this.selectValues}collect(e){this.visit(e);let t=this.getValues();return this.reset(),t}reset(){this.selectValues=[],this.visitedNodes.clear(),this.commonTables=[]}addSelectValueAsUnique(e,t){if(this.duplicateDetection==="columnNameOnly")this.selectValues.some(n=>n.name===e)||this.selectValues.push({name:e,value:t});else if(this.duplicateDetection==="fullName"){let n="";t&&typeof t.getNamespace=="function"&&(n=t.getNamespace()||"");let r=n?n+"."+e:e;this.selectValues.some(i=>{let s="";return i.value&&typeof i.value.getNamespace=="function"&&(s=i.value.getNamespace()||""),(s?s+"."+i.name:i.name)===r})||this.selectValues.push({name:e,value:t})}}visit(e){if(!this.isRootVisit){this.visitNode(e);return}if(!(e instanceof b))throw new Error("Root visit requires a SimpleSelectQuery. Decompose compound queries before collecting columns.");this.reset(),this.isRootVisit=!1,this.commonTables=this.commonTableCollector.collect(e);try{this.visitNode(e)}finally{this.isRootVisit=!0}}visitNode(e){if(this.visitedNodes.has(e))return;this.visitedNodes.add(e);let t=this.handlers.get(e.getKind());if(t){t(e);return}}visitSimpleSelectQuery(e){if(e.selectClause&&e.selectClause.accept(this),e.fromClause&&e.fromClause.accept(this),e.whereClause&&e.whereClause.accept(this),e.groupByClause&&e.groupByClause.accept(this),e.havingClause&&e.havingClause.accept(this),e.windowClause)for(let t of e.windowClause.windows)t.accept(this);e.orderByClause&&e.orderByClause.accept(this),e.limitClause&&e.limitClause.accept(this),e.offsetClause&&e.offsetClause.accept(this),e.fetchClause&&e.fetchClause.accept(this),e.forClause&&e.forClause.accept(this)}visitSelectClause(e){for(let t of e.items)t.identifier&&this.addSelectValueAsUnique(t.identifier.name,t.value),t.value.accept(this)}visitFromClause(e){let n=new Oe(this.tableColumnResolver,this.commonTables).collect(e);for(let r of n)this.addSelectValueAsUnique(r.name,r.value);if(e.joins)for(let r of e.joins)r.condition&&r.condition.accept(this)}visitWhereClause(e){e.condition&&e.condition.accept(this)}visitGroupByClause(e){if(e.grouping)for(let t of e.grouping)t.accept(this)}visitHavingClause(e){e.condition&&e.condition.accept(this)}visitOrderByClause(e){if(e.order)for(let t of e.order)t.accept(this)}visitWindowFrameClause(e){e.expression.accept(this)}visitWindowFrameExpression(e){e.partition&&e.partition.accept(this),e.order&&e.order.accept(this),e.frameSpec&&e.frameSpec.accept(this)}visitLimitClause(e){e.value&&e.value.accept(this)}offsetClause(e){e.value&&e.value.accept(this)}visitFetchClause(e){e.expression&&e.expression.accept(this)}visitJoinOnClause(e){e.condition&&e.condition.accept(this)}visitJoinUsingClause(e){e.condition&&e.condition.accept(this)}visitColumnReference(e){if(e.column.name!=="*")this.addSelectValueAsUnique(e.column.name,e);else if(this.includeWildCard)this.addSelectValueAsUnique(e.column.name,e);else return}visitBinaryExpression(e){e.left&&e.left.accept(this),e.right&&e.right.accept(this)}visitUnaryExpression(e){e.expression&&e.expression.accept(this)}visitFunctionCall(e){e.argument&&e.argument.accept(this),e.over&&e.over.accept(this)}visitParenExpression(e){e.expression&&e.expression.accept(this)}visitCaseExpression(e){e.condition&&e.condition.accept(this),e.switchCase&&e.switchCase.accept(this)}visitCastExpression(e){e.input&&e.input.accept(this)}visitBetweenExpression(e){e.expression&&e.expression.accept(this),e.lower&&e.lower.accept(this),e.upper&&e.upper.accept(this)}visitArrayExpression(e){e.expression&&e.expression.accept(this)}visitArrayQueryExpression(e){e.query.accept(this)}visitValueList(e){if(e.values)for(let t of e.values)t.accept(this)}visitPartitionByClause(e){e.value.accept(this)}};var ct=class o{static parse(e){let n=new P(e).readLexmes(),r=this.parseFromLexeme(n,0);if(r.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[r.newIndex].value}" at position ${r.newIndex}. The source component is complete but there are additional tokens.`);return r.value}static parseTableSourceFromLexemes(e,t){let n=Pe.parseFromLexeme(e,t);return this.parseTableSource(n)}static parseFromLexeme(e,t){let n=t;if(n<e.length&&e[n].type&4)return this.parseParenSource(e,n);let r=Pe.parseFromLexeme(e,n);return r.lastTokenType&2048?o.parseFunctionSource(e,r):o.parseTableSource(r)}static parseTableSource(e){let{namespaces:t,name:n,newIndex:r}=e;return{value:new B(t,n.name),newIndex:r}}static parseFunctionSource(e,t){let n=t.newIndex,{namespaces:r,name:i}=t,s=k.parseArgument(4,8,e,n);n=s.newIndex;let a=i.name;return{value:new Ke({namespaces:r,name:a},s.value),newIndex:n}}static parseParenSource(e,t){let n=t;if(n++,n>=e.length)throw new Error(`Syntax error: Unexpected end of input at position ${n}. Expected a subquery or nested expression after opening parenthesis.`);let r=e[n].value;if(r==="select"||r==="values"||r==="with"){let i=this.parseSubQuerySource(e,n);if(n=i.newIndex,n<e.length&&e[n].type==8)n++;else throw new Error(`Syntax error at position ${n}: Missing closing parenthesis. Each opening parenthesis must have a matching closing parenthesis.`);return{value:i.value,newIndex:n}}else if(e[n].type==4){let i=this.parseParenSource(e,n);if(n=i.newIndex,n<e.length&&e[n].type==8)n++;else throw new Error(`Syntax error at position ${n}: Missing closing parenthesis. Each opening parenthesis must have a matching closing parenthesis.`);return{value:i.value,newIndex:n}}throw new Error(`Syntax error at position ${n}: Expected 'SELECT' keyword, 'VALUES' keyword, or opening parenthesis '(' but found "${e[n].value}".`)}static parseSubQuerySource(e,t){let n=t,{value:r,newIndex:i}=M.parseFromLexeme(e,n);return n=i,{value:new _(r),newIndex:n}}};var vt=class extends Error{constructor(t){super(`CTE '${t}' already exists in the query`);this.cteName=t;this.name="DuplicateCTEError"}},pt=class extends Error{constructor(t,n){super(`Invalid CTE name '${t}': ${n}`);this.cteName=t;this.name="InvalidCTENameError"}},bt=class extends Error{constructor(t){super(`CTE '${t}' not found in the query`);this.cteName=t;this.name="CTENotFoundError"}};var mt=class{constructor(e,t){this.options=t||{},this.tableColumnResolver=e,this.columnCollector=new Te(this.tableColumnResolver)}find(e,t){let n=typeof t=="string"?[t]:t,i=new ne().collect(e),s=new Map;for(let a of i)s.set(a.getSourceAliasName(),a);return this.findUpstream(e,n,s)}handleTableSource(e,t,n){let r=n.get(e.table.name);if(r){let i=new Map(n);i.delete(e.table.name);let s=this.findUpstream(r.query,t,i);return s.length===0?null:s}return null}handleSubQuerySource(e,t,n){let r=this.findUpstream(e.query,t,n);return r.length===0?null:r}processFromClauseBranches(e,t,n){let r=e.getSources();if(r.length===0)return null;let i=[],s=!0,a=0;for(let l of r){let u=l.datasource,c=null;if(u instanceof B)c=this.handleTableSource(u,t,n),a++;else if(u instanceof _)c=this.handleSubQuerySource(u,t,n),a++;else{if(u instanceof ie)continue;s=!1;break}if(c===null){s=!1;break}i.push(c)}return s&&i.length===a?i.flat():null}findUpstream(e,t,n){if(e instanceof b){let r=e.fromClause;if(r){let c=this.processFromClauseBranches(r,t,n);if(c&&c.length>0)return c}let i=this.columnCollector.collect(e).map(c=>c.name),s=this.collectCTEColumns(e,n),a=[...i,...s],l=c=>this.options.ignoreCaseAndUnderscore?c.toLowerCase().replace(/_/g,""):c;return t.every(c=>a.some(d=>l(d)===l(c)))?[e]:[]}else if(e instanceof q){let r=this.findUpstream(e.left,t,n),i=this.findUpstream(e.right,t,n);return[...r,...i]}return[]}collectCTEColumns(e,t){let n=[];if(e.withClause)for(let r of e.withClause.tables){let i=this.collectColumnsFromSelectQuery(r.query);n.push(...i)}return n}collectColumnsFromSelectQuery(e){if(e instanceof b)try{return this.columnCollector.collect(e).map(t=>t.name)}catch(t){return console.warn("Failed to collect columns from SimpleSelectQuery:",t),[]}else if(e instanceof q)return this.collectColumnsFromSelectQuery(e.left);return[]}};var dt=class{static parseFromLexeme(e,t){let n=t;if(n<e.length&&(e[n].type&64||e[n].type&2048)){let r=e[n].value;if(n++,n<e.length&&e[n].type&4){let i=[];for(n++;n<e.length&&e[n].type&64&&(i.push(e[n].value),n++,n<e.length&&e[n].type&16);)n++;if(e[n].type&8)n++;else throw new Error(`Syntax error at position ${n}: Missing closing parenthesis ')' for column alias list. Each opening parenthesis must have a matching closing parenthesis.`);if(i.length===0)throw new Error(`Syntax error at position ${t}: No column aliases found. Column alias declarations must contain at least one column name.`);return{value:new Y(r,i),newIndex:n}}return{value:new Y(r,null),newIndex:n}}throw new Error(`Syntax error at position ${t}: Expected an identifier for table alias but found "${e[t]?.value||"end of input"}".`)}};var Je=class{static parse(e){let n=new P(e).readLexmes(),r=this.parseFromLexeme(n,0);if(r.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[r.newIndex].value}" at position ${r.newIndex}. The source expression is complete but there are additional tokens.`);return r.value}static parseTableSourceFromLexemes(e,t){let n=ct.parseTableSourceFromLexemes(e,t);return{value:new R(n.value,null),newIndex:n.newIndex}}static parseFromLexeme(e,t){let n=t,r=ct.parseFromLexeme(e,n);if(n=r.newIndex,n<e.length){if(e[n].value==="as"){n++;let s=dt.parseFromLexeme(e,n);return n=s.newIndex,{value:new R(r.value,s.value),newIndex:n}}if(n<e.length&&this.isTokenTypeAliasCandidate(e[n].type)){let s=dt.parseFromLexeme(e,n);return n=s.newIndex,{value:new R(r.value,s.value),newIndex:n}}}return{value:new R(r.value,null),newIndex:n}}static isTokenTypeAliasCandidate(e){return(e&64)!==0||(e&2048)!==0}};var ke=class o{static buildBinaryQuery(e,t){if(!e||e.length===0)throw new Error("No queries provided to combine.");if(e.length===1)throw new Error("At least two queries are required to create a BinarySelectQuery.");let n=i=>i instanceof ie?o.buildSimpleQuery(i):i,r=new q(n(e[0]),t,n(e[1]));De.normalize(r);for(let i=2;i<e.length;i++)r.appendSelectQuery(t,n(e[i]));return r}constructor(){}static buildSimpleQuery(e){if(e instanceof b)return e;if(e instanceof q)return o.buildSimpleBinaryQuery(e);if(e instanceof ie)return o.buildSimpleValuesQuery(e);throw new Error("Unsupported query type for buildSimpleQuery")}static buildSimpleBinaryQuery(e){let t=new _(e),n=new R(t,new Y("bq",null)),r=new W(n,null),i=o.createSelectAllClause(),s=new b({selectClause:i,fromClause:r});return De.normalize(s)}static buildSimpleValuesQuery(e){let t=e.tuples.length>0?e.tuples[0].values.length:0;if(e.tuples.length===0)throw new Error("Empty VALUES clause cannot be converted to a SimpleSelectQuery");if(!e.columnAliases)throw new Error("Column aliases are required to convert a VALUES clause to SimpleSelectQuery. Please specify column aliases.");if(e.columnAliases.length!==t)throw new Error(`The number of column aliases (${e.columnAliases.length}) does not match the number of columns in the first tuple (${t}).`);let n=new _(e),r=new R(n,new Y("vq",e.columnAliases)),i=new W(r,null),s=e.columnAliases.map(l=>new J(new S("vq",l),l)),a=new U(s,null);return new b({selectClause:a,fromClause:i})}static createSelectAllClause(){let e=new S(null,"*"),t=new J(e,"*");return new U([t],null)}static buildCreateTableQuery(e,t,n=!1){return new St({tableName:t,isTemporary:n,asSelectQuery:e})}static buildInsertQuery(e,t){let n,r=e.selectClause.items.length;if(n=new Oe().collect(e).map(l=>l.name),!n.length||r!==n.length)throw new Error(`Columns cannot be inferred from the selectQuery. Make sure you are not using wildcards or unnamed columns.
12
+ ${a}`;return new o(l,n,a)}};var lt=class{static{this.precedenceMap={or:1,and:2,"=":10,"!=":10,"<>":10,"<":10,"<=":10,">":10,">=":10,like:10,ilike:10,"not like":10,"not ilike":10,"similar to":10,"not similar to":10,in:10,"not in":10,is:10,"is not":10,"->":10,"->>":10,"#>":10,"#>>":10,"@>":10,"<@":10,"?":10,"?|":10,"?&":10,"~":10,"~*":10,"!~":10,"!~*":10,rlike:10,regexp:10,mod:30,xor:2,between:15,"not between":15,"+":20,"-":20,"*":30,"/":30,"%":30,"^":40,"::":50,"unary+":100,"unary-":100,not:100}}static getPrecedence(e){let t=this.precedenceMap[e.toLowerCase()];return t!==void 0?t:0}static hasHigherOrEqualPrecedence(e,t){return this.getPrecedence(e)>=this.getPrecedence(t)}static isLogicalOperator(e){let t=e.toLowerCase();return t==="and"||t==="or"}static isBetweenOperator(e){let t=e.toLowerCase();return t==="between"||t==="not between"}static isComparisonOperator(e){let t=e.toLowerCase();return["=","!=","<>","<",">","<=",">=","like","ilike","similar to","in","not in","->","->>","#>","#>>","@>","<@","?","?|","?&","~","~*","!~","!~*","rlike","regexp"].includes(t)}};var k=class{static parse(e){let n=new N(e).readLexmes(),r=this.parseFromLexeme(n,0);if(r.newIndex<n.length)throw Cn.fromUnparsedLexemes(n,r.newIndex,"[ValueParser]");return r.value}static parseFromLexeme(e,t,n=!0,r=!0){return this.parseExpressionWithPrecedence(e,t,0,n,r)}static parseExpressionWithPrecedence(e,t,n,r=!0,i=!0){let s=t,a=e[s].comments,l=this.parseItem(e,s);l.value.comments=a,s=l.newIndex;let u=l.value,c=this.parseArrayAccess(e,s,u);for(u=c.value,s=c.newIndex;s<e.length&&e[s].type&2;){let h=e[s].value;if(!r&&h.toLowerCase()==="and"||!i&&h.toLowerCase()==="or")break;let w=lt.getPrecedence(h);if(w<n)break;if(s++,lt.isBetweenOperator(h)){let y=Ve.parseBetweenExpression(e,s,u,h.toLowerCase().includes("not"));u=y.value,s=y.newIndex;continue}if(h==="::"){let y=Ve.parseTypeValue(e,s);u=new ce(u,y.value),s=y.newIndex;continue}let E=w+1,m=this.parseExpressionWithPrecedence(e,s,E,r,i);s=m.newIndex,u=new C(u,h,m.value)}return{value:u,newIndex:s}}static parseItem(e,t){let n=t;if(n>=e.length)throw new Error(`Unexpected end of lexemes at index ${t}`);let r=e[n];if(r.type&64&&r.type&2&&r.type&8192){if(n+1<e.length&&e[n+1].type&4)if(this.isTypeConstructor(e,n+1,r.value)){let a=Ve.parseTypeValue(e,n);return{value:a.value,newIndex:a.newIndex}}else return Ve.parseFromLexeme(e,n);let i=un.parseFromLexeme(e,n);if(i.newIndex>=e.length)return i;if(e[i.newIndex].type&1){let a=Ft.parseFromLexeme(e,i.newIndex);return{value:new Z(e[n].value,a.value),newIndex:a.newIndex}}return i}else if(r.type&64){let{namespaces:i,name:s,newIndex:a}=Ne.parseFromLexeme(e,n);if(e[a-1].type&2048)return Ve.parseFromLexeme(e,n);if(e[a-1].type&8192)if(a<e.length&&e[a].type&4)if(this.isTypeConstructor(e,a,s.name)){let u=Ve.parseTypeValue(e,n);return{value:u.value,newIndex:u.newIndex}}else return Ve.parseFromLexeme(e,n);else return{value:new be(i,s),newIndex:a};return{value:new S(i,s),newIndex:a}}else{if(r.type&1)return Ft.parseFromLexeme(e,n);if(r.type&4)return cn.parseFromLexeme(e,n);if(r.type&2048)return Ve.parseFromLexeme(e,n);if(r.type&2)return pn.parseFromLexeme(e,n);if(r.type&256)return mn.parseFromLexeme(e,n);if(r.type&4096)return dn.parseFromLexeme(e,n);if(r.type&128)return hn.parseFromLexeme(e,n);if(r.type&512){let{namespaces:i,name:s,newIndex:a}=Ne.parseFromLexeme(e,n);return{value:new S(i,s),newIndex:a}}else if(r.type&8192){let{namespaces:i,name:s,newIndex:a}=Ne.parseFromLexeme(e,n);if(a<e.length&&e[a].type&4)if(this.isTypeConstructor(e,a,s.name)){let l=Ve.parseTypeValue(e,n);return{value:l.value,newIndex:l.newIndex}}else return Ve.parseFromLexeme(e,n);else return{value:new be(i,s),newIndex:a}}}throw new Error(`[ValueParser] Invalid lexeme. index: ${n}, type: ${e[n].type}, value: ${e[n].value}`)}static parseArgument(e,t,n,r){let i=r,s=[];if(i<n.length&&n[i].type===e){if(i++,i<n.length&&n[i].type===t)return i++,{value:new H([]),newIndex:i};if(i<n.length&&n[i].value==="*"){let l=new S(null,"*");if(i++,i<n.length&&n[i].type===t)return i++,{value:l,newIndex:i};throw new Error(`Expected closing parenthesis at index ${i}`)}let a=this.parseFromLexeme(n,i);for(i=a.newIndex,s.push(a.value);i<n.length&&n[i].type&16;){i++;let l=this.parseFromLexeme(n,i);i=l.newIndex,s.push(l.value)}if(i<n.length&&n[i].type===t)return i++,s.length===1?{value:s[0],newIndex:i}:{value:new H(s),newIndex:i};throw new Error(`Missing closing parenthesis at index ${i}`)}throw new Error(`Expected opening parenthesis at index ${r}`)}static parseArrayAccess(e,t,n){let r=t,i=n;for(;r<e.length&&e[r].type&512&&!this.isSqlServerBracketIdentifier(e,r);){if(r++,r>=e.length)throw new Error(`Expected array index or slice after '[' at index ${r-1}`);if(e[r].type&1024)throw new Error(`Empty array access brackets not supported at index ${r}`);let s=null,a=!1;if(e[r].type&2&&e[r].value===":")a=!0,r++;else{let l=lt.getPrecedence(":"),u=this.parseExpressionWithPrecedence(e,r,l+1);s=u.value,r=u.newIndex,r<e.length&&e[r].type&2&&e[r].value===":"&&(a=!0,r++)}if(a){let l=null;if(r<e.length&&!(e[r].type&1024)){let u=lt.getPrecedence(":"),c=this.parseExpressionWithPrecedence(e,r,u+1);l=c.value,r=c.newIndex}if(r>=e.length||!(e[r].type&1024))throw new Error(`Expected ']' after array slice at index ${r}`);r++,i=new st(i,s,l)}else{if(!s){let l=this.parseFromLexeme(e,r);s=l.value,r=l.newIndex}if(r>=e.length||!(e[r].type&1024))throw new Error(`Expected ']' after array index at index ${r}`);r++,i=new ot(i,s)}}return{value:i,newIndex:r}}static isSqlServerBracketIdentifier(e,t){let n=t+1;if(n>=e.length)return!1;for(;n<e.length&&!(e[n].type&1024);){let s=e[n];if(s.type&64||s.type&2&&s.value==="."){n++;continue}return!1}if(n>=e.length)return!1;let r=n;if(r+1<e.length){let s=e[r+1];if(s.type&2&&s.value===".")return!0}n=t+1;let i=!0;for(;n<r;){let s=e[n];if(!(s.type&64||s.type&2&&s.value===".")){i=!1;break}n++}return i}static isTypeConstructor(e,t,n){let r=["NUMERIC","DECIMAL","VARCHAR","CHAR","CHARACTER","TIMESTAMP","TIME","INTERVAL"],i=n.toUpperCase();if(r.includes(i))return!0;if(i==="DATE"){let s=t+1;if(s<e.length){let a=e[s];return!(a.type&1&&typeof a.value=="string"&&isNaN(Number(a.value)))}}return!1}};var ne=class{constructor(){this.commonTables=[];this.visitedNodes=new Set;this.isRootVisit=!0;this.handlers=new Map,this.handlers.set(b.kind,e=>this.visitSimpleSelectQuery(e)),this.handlers.set(q.kind,e=>this.visitBinarySelectQuery(e)),this.handlers.set(ie.kind,e=>this.visitValuesQuery(e)),this.handlers.set(re.kind,e=>this.visitWithClause(e)),this.handlers.set(ee.kind,e=>this.visitCommonTable(e)),this.handlers.set(J.kind,e=>this.visitSelectItem(e)),this.handlers.set(x.kind,e=>this.visitIdentifierString(e)),this.handlers.set(Q.kind,e=>this.visitRawString(e)),this.handlers.set(S.kind,e=>this.visitColumnReference(e)),this.handlers.set(T.kind,e=>this.visitParameterExpression(e)),this.handlers.set(z.kind,e=>this.visitLiteralValue(e)),this.handlers.set(R.kind,e=>this.visitSourceExpression(e)),this.handlers.set(B.kind,e=>this.visitTableSource(e)),this.handlers.set(Ke.kind,e=>this.visitFunctionSource(e)),this.handlers.set(We.kind,e=>this.visitParenSource(e)),this.handlers.set(_.kind,e=>this.visitSubQuerySource(e)),this.handlers.set(se.kind,e=>this.visitInlineQuery(e)),this.handlers.set(W.kind,e=>this.visitFromClause(e)),this.handlers.set(fe.kind,e=>this.visitJoinClause(e)),this.handlers.set(he.kind,e=>this.visitJoinOnClause(e)),this.handlers.set(Pe.kind,e=>this.visitJoinUsingClause(e)),this.handlers.set(ae.kind,e=>this.visitWhereClause(e)),this.handlers.set(X.kind,e=>this.visitParenExpression(e)),this.handlers.set(C.kind,e=>this.visitBinaryExpression(e)),this.handlers.set(Z.kind,e=>this.visitUnaryExpression(e)),this.handlers.set(oe.kind,e=>this.visitCaseExpression(e)),this.handlers.set(we.kind,e=>this.visitCaseKeyValuePair(e)),this.handlers.set(ye.kind,e=>this.visitSwitchCaseArgument(e)),this.handlers.set(ve.kind,e=>this.visitBetweenExpression(e)),this.handlers.set(j.kind,e=>this.visitFunctionCall(e)),this.handlers.set(ge.kind,e=>this.visitArrayExpression(e)),this.handlers.set(Se.kind,e=>this.visitArrayQueryExpression(e)),this.handlers.set(Ee.kind,e=>this.visitTupleExpression(e)),this.handlers.set(ce.kind,e=>this.visitCastExpression(e)),this.handlers.set(Fe.kind,e=>this.visitWindowFrameExpression(e)),this.handlers.set(Re.kind,e=>this.visitWindowFrameSpec(e)),this.handlers.set(be.kind,e=>this.visitTypeValue(e)),this.handlers.set(H.kind,e=>this.visitValueList(e)),this.handlers.set(Me.kind,e=>this.visitStringSpecifierExpression(e)),this.handlers.set(U.kind,e=>this.visitSelectClause(e)),this.handlers.set(me.kind,e=>this.visitGroupByClause(e)),this.handlers.set(de.kind,e=>this.visitHavingClause(e)),this.handlers.set(pe.kind,e=>this.visitOrderByClause(e)),this.handlers.set(xe.kind,e=>this.visitWindowFrameClause(e)),this.handlers.set(le.kind,e=>this.visitLimitClause(e)),this.handlers.set(Be.kind,e=>this.visitForClause(e)),this.handlers.set(Ie.kind,e=>this.visitOrderByItem(e)),this.handlers.set(je.kind,e=>this.visitPartitionByClause(e))}getCommonTables(){return this.commonTables}reset(){this.commonTables=[],this.visitedNodes.clear()}collect(e){return this.visit(e),this.getCommonTables()}visit(e){if(!this.isRootVisit){this.visitNode(e);return}this.reset(),this.isRootVisit=!1;try{this.visitNode(e)}finally{this.isRootVisit=!0}}visitNode(e){if(this.visitedNodes.has(e))return;this.visitedNodes.add(e);let t=this.handlers.get(e.getKind());if(t){t(e);return}let n=e.getKind()?.toString()||"unknown",r=e.constructor?.name||"unknown";throw new Error(`[CTECollector] No handler for ${r} with kind ${n}.`)}visitSimpleSelectQuery(e){if(e.fromClause&&e.fromClause.accept(this),e.whereClause&&e.whereClause.accept(this),e.groupByClause&&e.groupByClause.accept(this),e.havingClause&&e.havingClause.accept(this),e.orderByClause&&e.orderByClause.accept(this),e.windowClause)for(let t of e.windowClause.windows)t.accept(this);e.limitClause&&e.limitClause.accept(this),e.forClause&&e.forClause.accept(this),e.selectClause.accept(this),e.withClause&&e.withClause.accept(this)}visitBinarySelectQuery(e){e.left.accept(this),e.right.accept(this)}visitValuesQuery(e){for(let t of e.tuples)t.accept(this)}visitWithClause(e){for(let t=0;t<e.tables.length;t++)e.tables[t].accept(this)}visitCommonTable(e){e.query.accept(this),this.commonTables.push(e)}visitSelectClause(e){for(let t of e.items)t.accept(this)}visitSelectItem(e){e.value.accept(this)}visitFromClause(e){if(e.source.accept(this),e.joins)for(let t of e.joins)t.accept(this)}visitSourceExpression(e){e.datasource.accept(this)}visitTableSource(e){}visitFunctionSource(e){e.argument&&e.argument.accept(this)}visitParenSource(e){e.source.accept(this)}visitSubQuerySource(e){e.query.accept(this)}visitInlineQuery(e){e.selectQuery.accept(this)}visitJoinClause(e){e.source.accept(this),e.condition&&e.condition.accept(this)}visitJoinOnClause(e){e.condition.accept(this)}visitJoinUsingClause(e){e.condition.accept(this)}visitWhereClause(e){e.condition.accept(this)}visitGroupByClause(e){for(let t of e.grouping)t.accept(this)}visitHavingClause(e){e.condition.accept(this)}visitOrderByClause(e){for(let t of e.order)t.accept(this)}visitWindowFrameClause(e){e.expression.accept(this)}visitLimitClause(e){e.value.accept(this)}visitForClause(e){}visitOrderByItem(e){e.value.accept(this)}visitParenExpression(e){e.expression.accept(this)}visitBinaryExpression(e){e.left.accept(this),e.right.accept(this)}visitUnaryExpression(e){e.expression.accept(this)}visitCaseExpression(e){e.condition&&e.condition.accept(this),e.switchCase.accept(this)}visitSwitchCaseArgument(e){for(let t of e.cases)t.accept(this);e.elseValue&&e.elseValue.accept(this)}visitCaseKeyValuePair(e){e.key.accept(this),e.value.accept(this)}visitBetweenExpression(e){e.expression.accept(this),e.lower.accept(this),e.upper.accept(this)}visitFunctionCall(e){e.argument&&e.argument.accept(this),e.over&&e.over.accept(this)}visitArrayExpression(e){e.expression.accept(this)}visitArrayQueryExpression(e){e.query.accept(this)}visitTupleExpression(e){for(let t of e.values)t.accept(this)}visitCastExpression(e){e.input.accept(this),e.castType.accept(this)}visitTypeValue(e){e.argument&&e.argument.accept(this)}visitWindowFrameExpression(e){e.partition&&e.partition.accept(this),e.order&&e.order.accept(this),e.frameSpec&&e.frameSpec.accept(this)}visitWindowFrameSpec(e){}visitIdentifierString(e){}visitRawString(e){}visitColumnReference(e){}visitParameterExpression(e){}visitLiteralValue(e){}visitPartitionByClause(e){}visitValueList(e){for(let t of e.values)t.accept(this)}visitStringSpecifierExpression(e){}};var wt=class{constructor(){this.visitedNodes=new Set;this.isRootVisit=!0;this.handlers=new Map,this.handlers.set(b.kind,e=>this.visitSimpleSelectQuery(e)),this.handlers.set(q.kind,e=>this.visitBinarySelectQuery(e)),this.handlers.set(ie.kind,e=>this.visitValuesQuery(e)),this.handlers.set(J.kind,e=>this.visitSelectItem(e)),this.handlers.set(x.kind,e=>this.visitIdentifierString(e)),this.handlers.set(Q.kind,e=>this.visitRawString(e)),this.handlers.set(S.kind,e=>this.visitColumnReference(e)),this.handlers.set(T.kind,e=>this.visitParameterExpression(e)),this.handlers.set(z.kind,e=>this.visitLiteralValue(e)),this.handlers.set(R.kind,e=>this.visitSourceExpression(e)),this.handlers.set(B.kind,e=>this.visitTableSource(e)),this.handlers.set(We.kind,e=>this.visitParenSource(e)),this.handlers.set(_.kind,e=>this.visitSubQuerySource(e)),this.handlers.set(se.kind,e=>this.visitInlineQuery(e)),this.handlers.set(W.kind,e=>this.visitFromClause(e)),this.handlers.set(fe.kind,e=>this.visitJoinClause(e)),this.handlers.set(he.kind,e=>this.visitJoinOnClause(e)),this.handlers.set(Pe.kind,e=>this.visitJoinUsingClause(e)),this.handlers.set(ae.kind,e=>this.visitWhereClause(e)),this.handlers.set(X.kind,e=>this.visitParenExpression(e)),this.handlers.set(C.kind,e=>this.visitBinaryExpression(e)),this.handlers.set(Z.kind,e=>this.visitUnaryExpression(e)),this.handlers.set(oe.kind,e=>this.visitCaseExpression(e)),this.handlers.set(we.kind,e=>this.visitCaseKeyValuePair(e)),this.handlers.set(ye.kind,e=>this.visitSwitchCaseArgument(e)),this.handlers.set(ve.kind,e=>this.visitBetweenExpression(e)),this.handlers.set(j.kind,e=>this.visitFunctionCall(e)),this.handlers.set(ge.kind,e=>this.visitArrayExpression(e)),this.handlers.set(Se.kind,e=>this.visitArrayQueryExpression(e)),this.handlers.set(Ee.kind,e=>this.visitTupleExpression(e)),this.handlers.set(ce.kind,e=>this.visitCastExpression(e)),this.handlers.set(Fe.kind,e=>this.visitWindowFrameExpression(e)),this.handlers.set(Re.kind,e=>this.visitWindowFrameSpec(e)),this.handlers.set(be.kind,e=>this.visitTypeValue(e)),this.handlers.set(U.kind,e=>this.visitSelectClause(e)),this.handlers.set(me.kind,e=>this.visitGroupByClause(e)),this.handlers.set(de.kind,e=>this.visitHavingClause(e)),this.handlers.set(pe.kind,e=>this.visitOrderByClause(e)),this.handlers.set(xe.kind,e=>this.visitWindowFrameClause(e)),this.handlers.set(le.kind,e=>this.visitLimitClause(e)),this.handlers.set(Be.kind,e=>this.visitForClause(e)),this.handlers.set(Ie.kind,e=>this.visitOrderByItem(e))}reset(){this.visitedNodes.clear()}execute(e){return this.reset(),this.visit(e)}visit(e){if(!this.isRootVisit)return this.visitNode(e);this.reset(),this.isRootVisit=!1;try{return this.visitNode(e)}finally{this.isRootVisit=!0}}visitNode(e){if(this.visitedNodes.has(e))return e;this.visitedNodes.add(e);let t=this.handlers.get(e.getKind());if(t)return t(e);let n=e.getKind()?.toString()||"unknown",r=e.constructor?.name||"unknown";throw new Error(`[CTEDisabler] No handler for ${r} with kind ${n}.`)}visitSimpleSelectQuery(e){return e.withClause&&e.withClause.tables.forEach(t=>{this.visit(t.query)}),e.withClause=null,e.selectClause=this.visit(e.selectClause),e.fromClause=e.fromClause?this.visit(e.fromClause):null,e.whereClause=e.whereClause?this.visit(e.whereClause):null,e.groupByClause=e.groupByClause?this.visit(e.groupByClause):null,e.havingClause=e.havingClause?this.visit(e.havingClause):null,e.orderByClause=e.orderByClause?this.visit(e.orderByClause):null,e.windowClause&&(e.windowClause=new Ye(e.windowClause.windows.map(t=>this.visit(t)))),e.limitClause=e.limitClause?this.visit(e.limitClause):null,e.forClause=e.forClause?this.visit(e.forClause):null,e}visitBinarySelectQuery(e){return e.left=this.visit(e.left),e.right=this.visit(e.right),e}visitValuesQuery(e){let t=e.tuples.map(n=>this.visit(n));return new ie(t)}visitSelectClause(e){let t=e.items.map(n=>this.visit(n));return new U(t,e.distinct)}visitFromClause(e){let t=this.visit(e.source),n=e.joins?e.joins.map(r=>this.visit(r)):null;return new W(t,n)}visitSubQuerySource(e){let t=this.visit(e.query);return new _(t)}visitInlineQuery(e){let t=this.visit(e.selectQuery);return new se(t)}visitJoinClause(e){let t=this.visit(e.source),n=e.condition?this.visit(e.condition):null;return new fe(e.joinType.value,t,n,e.lateral)}visitJoinOnClause(e){let t=this.visit(e.condition);return new he(t)}visitJoinUsingClause(e){let t=this.visit(e.condition);return new Pe(t)}visitWhereClause(e){let t=this.visit(e.condition);return new ae(t)}visitGroupByClause(e){let t=e.grouping.map(n=>this.visit(n));return new me(t)}visitHavingClause(e){let t=this.visit(e.condition);return new de(t)}visitOrderByClause(e){let t=e.order.map(n=>this.visit(n));return new pe(t)}visitWindowFrameClause(e){let t=this.visit(e.expression);return new xe(e.name.name,t)}visitLimitClause(e){let t=this.visit(e.value);return new le(t)}visitForClause(e){return new Be(e.lockMode)}visitParenExpression(e){let t=this.visit(e.expression);return new X(t)}visitBinaryExpression(e){let t=this.visit(e.left),n=this.visit(e.right);return new C(t,e.operator.value,n)}visitUnaryExpression(e){let t=this.visit(e.expression);return new Z(e.operator.value,t)}visitCaseExpression(e){let t=e.condition?this.visit(e.condition):null,n=this.visit(e.switchCase);return new oe(t,n)}visitSwitchCaseArgument(e){let t=e.cases.map(r=>this.visit(r)),n=e.elseValue?this.visit(e.elseValue):null;return new ye(t,n)}visitCaseKeyValuePair(e){let t=this.visit(e.key),n=this.visit(e.value);return new we(t,n)}visitBetweenExpression(e){let t=this.visit(e.expression),n=this.visit(e.lower),r=this.visit(e.upper);return new ve(t,n,r,e.negated)}visitFunctionCall(e){let t=e.argument?this.visit(e.argument):null,n=e.over?this.visit(e.over):null;return new j(e.namespaces,e.name,t,n)}visitArrayExpression(e){let t=this.visit(e.expression);return new ge(t)}visitArrayQueryExpression(e){let t=this.visit(e.query);return new Se(t)}visitTupleExpression(e){let t=e.values.map(n=>this.visit(n));return new Ee(t)}visitCastExpression(e){let t=this.visit(e.input),n=this.visit(e.castType);return new ce(t,n)}visitTypeValue(e){let t=e.argument?this.visit(e.argument):null;return new be(e.namespaces,e.name,t)}visitSelectItem(e){let t=this.visit(e.value);return new J(t,e.identifier?.name)}visitIdentifierString(e){return e}visitRawString(e){return e}visitColumnReference(e){return e}visitSourceExpression(e){let t=this.visit(e.datasource),n=e.aliasExpression;return new R(t,n)}visitTableSource(e){return e}visitParenSource(e){let t=this.visit(e.source);return new We(t)}visitParameterExpression(e){return e}visitWindowFrameExpression(e){let t=e.partition?this.visit(e.partition):null,n=e.order?this.visit(e.order):null,r=e.frameSpec?this.visit(e.frameSpec):null;return new Fe(t,n,r)}visitWindowFrameSpec(e){return e}visitLiteralValue(e){return e}visitOrderByItem(e){let t=this.visit(e.value);return new Ie(t,e.sortDirection,e.nullsPosition)}};var At=class{constructor(e=!0){this.tableSources=[];this.visitedNodes=new Set;this.tableNameMap=new Map;this.cteNames=new Set;this.isRootVisit=!0;this.selectableOnly=e,this.handlers=new Map,this.handlers.set(b.kind,t=>this.visitSimpleSelectQuery(t)),this.handlers.set(q.kind,t=>this.visitBinarySelectQuery(t)),this.handlers.set(ie.kind,t=>this.visitValuesQuery(t)),this.handlers.set(re.kind,t=>this.visitWithClause(t)),this.handlers.set(ee.kind,t=>this.visitCommonTable(t)),this.handlers.set(W.kind,t=>this.visitFromClause(t)),this.handlers.set(fe.kind,t=>this.visitJoinClause(t)),this.handlers.set(he.kind,t=>this.visitJoinOnClause(t)),this.handlers.set(Pe.kind,t=>this.visitJoinUsingClause(t)),this.handlers.set(R.kind,t=>this.visitSourceExpression(t)),this.handlers.set(B.kind,t=>this.visitTableSource(t)),this.handlers.set(Ke.kind,t=>this.visitFunctionSource(t)),this.handlers.set(We.kind,t=>this.visitParenSource(t)),this.handlers.set(_.kind,t=>this.visitSubQuerySource(t)),this.handlers.set(se.kind,t=>this.visitInlineQuery(t)),e||(this.handlers.set(ae.kind,t=>this.visitWhereClause(t)),this.handlers.set(me.kind,t=>this.visitGroupByClause(t)),this.handlers.set(de.kind,t=>this.visitHavingClause(t)),this.handlers.set(pe.kind,t=>this.visitOrderByClause(t)),this.handlers.set(xe.kind,t=>this.visitWindowFrameClause(t)),this.handlers.set(le.kind,t=>this.visitLimitClause(t)),this.handlers.set($e.kind,t=>this.visitOffsetClause(t)),this.handlers.set(_e.kind,t=>this.visitFetchClause(t)),this.handlers.set(Be.kind,t=>this.visitForClause(t)),this.handlers.set(Ie.kind,t=>this.visitOrderByItem(t)),this.handlers.set(U.kind,t=>this.visitSelectClause(t)),this.handlers.set(J.kind,t=>this.visitSelectItem(t)),this.handlers.set(X.kind,t=>this.visitParenExpression(t)),this.handlers.set(C.kind,t=>this.visitBinaryExpression(t)),this.handlers.set(Z.kind,t=>this.visitUnaryExpression(t)),this.handlers.set(oe.kind,t=>this.visitCaseExpression(t)),this.handlers.set(we.kind,t=>this.visitCaseKeyValuePair(t)),this.handlers.set(ye.kind,t=>this.visitSwitchCaseArgument(t)),this.handlers.set(ve.kind,t=>this.visitBetweenExpression(t)),this.handlers.set(j.kind,t=>this.visitFunctionCall(t)),this.handlers.set(ge.kind,t=>this.visitArrayExpression(t)),this.handlers.set(Se.kind,t=>this.visitArrayQueryExpression(t)),this.handlers.set(Ee.kind,t=>this.visitTupleExpression(t)),this.handlers.set(ce.kind,t=>this.visitCastExpression(t)),this.handlers.set(H.kind,t=>this.visitValueList(t)),this.handlers.set(Me.kind,t=>this.visitStringSpecifierExpression(t)))}getTableSources(){return this.tableSources}reset(){this.tableSources=[],this.tableNameMap.clear(),this.visitedNodes.clear(),this.cteNames.clear()}getTableIdentifier(e){return e.qualifiedName.namespaces&&e.qualifiedName.namespaces.length>0?e.qualifiedName.namespaces.map(t=>t.name).join(".")+"."+(e.qualifiedName.name instanceof Q?e.qualifiedName.name.value:e.qualifiedName.name.name):e.qualifiedName.name instanceof Q?e.qualifiedName.name.value:e.qualifiedName.name.name}collect(e){return this.visit(e),this.getTableSources()}visit(e){if(!this.isRootVisit){this.visitNode(e);return}this.reset(),this.isRootVisit=!1;try{this.selectableOnly||this.collectCTEs(e),this.visitNode(e)}finally{this.isRootVisit=!0}}visitNode(e){if(this.visitedNodes.has(e))return;this.visitedNodes.add(e);let t=this.handlers.get(e.getKind());if(t){t(e);return}}collectCTEs(e){let t=new ne;t.visit(e);let n=t.getCommonTables();for(let r of n)this.cteNames.add(r.aliasExpression.table.name)}visitSimpleSelectQuery(e){if(e.fromClause&&e.fromClause.accept(this),!this.selectableOnly){if(e.withClause&&e.withClause.accept(this),e.whereClause&&e.whereClause.accept(this),e.groupByClause&&e.groupByClause.accept(this),e.havingClause&&e.havingClause.accept(this),e.orderByClause&&e.orderByClause.accept(this),e.windowClause)for(let t of e.windowClause.windows)t.accept(this);e.limitClause&&e.limitClause.accept(this),e.offsetClause&&e.offsetClause.accept(this),e.fetchClause&&e.fetchClause.accept(this),e.forClause&&e.forClause.accept(this),e.selectClause.accept(this)}}visitBinarySelectQuery(e){e.left.accept(this),e.right.accept(this)}visitValuesQuery(e){if(!this.selectableOnly)for(let t of e.tuples)t.accept(this)}visitWithClause(e){if(!this.selectableOnly)for(let t of e.tables)t.accept(this)}visitCommonTable(e){this.selectableOnly||e.query.accept(this)}visitFromClause(e){if(e.source.accept(this),e.joins)for(let t of e.joins)t.accept(this)}visitSourceExpression(e){e.datasource.accept(this)}visitTableSource(e){let t=this.getTableIdentifier(e);!this.tableNameMap.has(t)&&!this.isCTETable(e.table.name)&&(this.tableNameMap.set(t,!0),this.tableSources.push(e))}visitFunctionSource(e){e.argument&&this.visitValueComponent(e.argument)}visitValueComponent(e){e.accept(this)}isCTETable(e){return this.cteNames.has(e)}visitParenSource(e){e.source.accept(this)}visitSubQuerySource(e){this.selectableOnly||e.query.accept(this)}visitInlineQuery(e){this.selectableOnly||e.selectQuery.accept(this)}visitJoinClause(e){e.source.accept(this),!this.selectableOnly&&e.condition&&e.condition.accept(this)}visitJoinOnClause(e){this.selectableOnly||e.condition.accept(this)}visitJoinUsingClause(e){this.selectableOnly||e.condition.accept(this)}visitWhereClause(e){e.condition.accept(this)}visitGroupByClause(e){for(let t of e.grouping)t.accept(this)}visitHavingClause(e){e.condition.accept(this)}visitOrderByClause(e){for(let t of e.order)t.accept(this)}visitWindowFrameClause(e){e.expression.accept(this)}visitLimitClause(e){e.value.accept(this)}visitOffsetClause(e){e.value.accept(this)}visitFetchClause(e){e.expression.accept(this)}visitForClause(e){}visitOrderByItem(e){e.value.accept(this)}visitSelectClause(e){for(let t of e.items)t.accept(this)}visitSelectItem(e){e.value.accept(this)}visitParenExpression(e){e.expression.accept(this)}visitBinaryExpression(e){e.left.accept(this),e.right.accept(this)}visitUnaryExpression(e){e.expression.accept(this)}visitCaseExpression(e){e.condition&&e.condition.accept(this),e.switchCase.accept(this)}visitSwitchCaseArgument(e){for(let t of e.cases)t.accept(this);e.elseValue&&e.elseValue.accept(this)}visitCaseKeyValuePair(e){e.key.accept(this),e.value.accept(this)}visitBetweenExpression(e){e.expression.accept(this),e.lower.accept(this),e.upper.accept(this)}visitFunctionCall(e){e.argument&&e.argument.accept(this),e.over&&e.over.accept(this)}visitArrayExpression(e){e.expression.accept(this)}visitArrayQueryExpression(e){e.query.accept(this)}visitTupleExpression(e){for(let t of e.values)t.accept(this)}visitCastExpression(e){e.input.accept(this),e.castType.accept(this)}visitValueList(e){for(let t of e.values)t.accept(this)}visitStringSpecifierExpression(e){}};var tt=class extends f{static{this.kind=Symbol("HintClause")}constructor(e){super(),this.hintContent=e}getFullHint(){return"/*+ "+this.hintContent+" */"}static isHintClause(e){let t=e.trim();return t.length>=5&&t.substring(0,3)==="/*+"&&t.substring(t.length-2)==="*/"}static extractHintContent(e){let t=e.trim();if(!this.isHintClause(t))throw new Error("Not a valid hint clause: "+e);return t.slice(3,-2).trim()}};var p=class{constructor(e,t="",n=""){this.innerTokens=[];this.type=e,this.text=t,this.containerType=n}};var nt=class{static collect(e){let t=[];function n(r){if(!(!r||typeof r!="object")){r.constructor&&r.constructor.kind===T.kind&&t.push(r);for(let i of Object.keys(r)){let s=r[i];Array.isArray(s)?s.forEach(n):s&&typeof s=="object"&&s.constructor&&s.constructor.kind&&n(s)}}}return n(e),t}};var yn=class{constructor(e){this.start=e?.start??'"',this.end=e?.end??'"'}decorate(e){return e=this.start+e+this.end,e}};var wn=class{constructor(e){this.prefix=e?.prefix??":",this.suffix=e?.suffix??"",this.style=e?.style??"named"}decorate(e,t){let n="";return this.style==="anonymous"?n=this.prefix:this.style==="indexed"?n=this.prefix+t:this.style==="named"&&(n=this.prefix+e+this.suffix),e=n,e}};var gt=class extends f{static{this.kind=Symbol("UpdateQuery")}constructor(e){super(),this.withClause=e.withClause??null,this.updateClause=e.updateClause,this.setClause=e.setClause instanceof ze?e.setClause:new ze(e.setClause),this.whereClause=e.whereClause??null,this.fromClause=e.fromClause??null,this.returningClause=e.returning??null}};var Oe=class o{constructor(e=null,t=null){this.selectValues=[];this.visitedNodes=new Set;this.isRootVisit=!0;this.tableColumnResolver=e??null,this.commonTableCollector=new ne,this.commonTables=[],this.initialCommonTables=t,this.handlers=new Map,this.handlers.set(b.kind,n=>this.visitSimpleSelectQuery(n)),this.handlers.set(U.kind,n=>this.visitSelectClause(n)),this.handlers.set(R.kind,n=>this.visitSourceExpression(n)),this.handlers.set(W.kind,n=>this.visitFromClause(n))}getValues(){return this.selectValues}reset(){this.selectValues=[],this.visitedNodes.clear(),this.initialCommonTables?this.commonTables=this.initialCommonTables:this.commonTables=[]}collect(e){this.visit(e);let t=this.getValues();return this.reset(),t}visit(e){if(!this.isRootVisit){this.visitNode(e);return}this.reset(),this.isRootVisit=!1;try{this.visitNode(e)}finally{this.isRootVisit=!0}}visitNode(e){if(this.visitedNodes.has(e))return;this.visitedNodes.add(e);let t=this.handlers.get(e.getKind());if(t){t(e);return}}visitSimpleSelectQuery(e){this.commonTables.length===0&&this.initialCommonTables===null&&(this.commonTables=this.commonTableCollector.collect(e)),e.selectClause&&e.selectClause.accept(this);let t=this.selectValues.filter(r=>r.name==="*");if(t.length===0)return;if(this.selectValues.some(r=>r.value instanceof S&&r.value.namespaces===null)){e.fromClause&&this.processFromClause(e.fromClause,!0),this.selectValues=this.selectValues.filter(r=>r.name!=="*");return}let n=t.filter(r=>r.value instanceof S&&r.value.namespaces).map(r=>r.value.getNamespace());if(e.fromClause){let r=e.fromClause.getSourceAliasName();if(r&&n.includes(r)&&this.processFromClause(e.fromClause,!1),e.fromClause.joins)for(let i of e.fromClause.joins){let s=i.getSourceAliasName();s&&n.includes(s)&&this.processJoinClause(i)}}this.selectValues=this.selectValues.filter(r=>r.name!=="*")}processFromClause(e,t){if(e){let n=e.getSourceAliasName();if(this.processSourceExpression(n,e.source),e.joins&&t)for(let r of e.joins)this.processJoinClause(r)}}processJoinClause(e){let t=e.getSourceAliasName();this.processSourceExpression(t,e.source)}processSourceExpression(e,t){let n=this.commonTables.find(r=>r.aliasExpression.table.name===e);if(n){let r=this.commonTables.filter(a=>a.aliasExpression.table.name!==e);new o(this.tableColumnResolver,r).collect(n.query).forEach(a=>{this.addSelectValueAsUnique(a.name,new S(e?[e]:null,a.name))})}else new o(this.tableColumnResolver,this.commonTables).collect(t).forEach(s=>{this.addSelectValueAsUnique(s.name,new S(e?[e]:null,s.name))})}visitSelectClause(e){for(let t of e.items)this.processSelectItem(t)}processSelectItem(e){if(e.identifier)this.addSelectValueAsUnique(e.identifier.name,e.value);else if(e.value instanceof S){let t=e.value.column.name;t==="*"?this.selectValues.push({name:t,value:e.value}):this.addSelectValueAsUnique(t,e.value)}}visitSourceExpression(e){if(e.aliasExpression&&e.aliasExpression.columns){let t=e.getAliasName();e.aliasExpression.columns.forEach(n=>{this.addSelectValueAsUnique(n.name,new S(t?[t]:null,n.name))});return}else if(e.datasource instanceof B){if(this.tableColumnResolver){let t=e.datasource.getSourceName();this.tableColumnResolver(t).forEach(n=>{this.addSelectValueAsUnique(n,new S([t],n))})}return}else if(e.datasource instanceof _){let t=e.getAliasName();new o(this.tableColumnResolver,this.commonTables).collect(e.datasource.query).forEach(i=>{this.addSelectValueAsUnique(i.name,new S(t?[t]:null,i.name))});return}else if(e.datasource instanceof We)return this.visit(e.datasource.source)}visitFromClause(e){e&&this.processFromClause(e,!0)}addSelectValueAsUnique(e,t){this.selectValues.some(n=>n.name===e)||this.selectValues.push({name:e,value:t})}};var St=class extends f{static{this.kind=Symbol("CreateTableQuery")}constructor(e){super(),this.tableName=new x(e.tableName),this.isTemporary=e.isTemporary??!1,this.asSelectQuery=e.asSelectQuery}getSelectQuery(){let e;return this.asSelectQuery?e=new Oe().collect(this.asSelectQuery).map(r=>new J(r.value,r.name)):e=[new J(new Q("*"))],new b({selectClause:new U(e),fromClause:new W(new R(new B(null,this.tableName.name),null),null)})}getCountQuery(){return new b({selectClause:new U([new J(new j(null,"count",new S(null,"*"),null))]),fromClause:new W(new R(new B(null,this.tableName.name),null),null)})}};var fr={mysql:{identifierEscape:{start:"`",end:"`"},parameterSymbol:"?",parameterStyle:"anonymous"},postgres:{identifierEscape:{start:'"',end:'"'},parameterSymbol:"$",parameterStyle:"indexed"},postgresWithNamedParams:{identifierEscape:{start:'"',end:'"'},parameterSymbol:":",parameterStyle:"named"},sqlserver:{identifierEscape:{start:"[",end:"]"},parameterSymbol:"@",parameterStyle:"named"},sqlite:{identifierEscape:{start:'"',end:'"'},parameterSymbol:":",parameterStyle:"named"},oracle:{identifierEscape:{start:'"',end:'"'},parameterSymbol:":",parameterStyle:"named"},clickhouse:{identifierEscape:{start:"`",end:"`"},parameterSymbol:"?",parameterStyle:"anonymous"},firebird:{identifierEscape:{start:'"',end:'"'},parameterSymbol:"?",parameterStyle:"anonymous"},db2:{identifierEscape:{start:'"',end:'"'},parameterSymbol:"?",parameterStyle:"anonymous"},snowflake:{identifierEscape:{start:'"',end:'"'},parameterSymbol:"?",parameterStyle:"anonymous"},cloudspanner:{identifierEscape:{start:"`",end:"`"},parameterSymbol:"@",parameterStyle:"named"},duckdb:{identifierEscape:{start:'"',end:'"'},parameterSymbol:"?",parameterStyle:"anonymous"},cockroachdb:{identifierEscape:{start:'"',end:'"'},parameterSymbol:"$",parameterStyle:"indexed"},athena:{identifierEscape:{start:'"',end:'"'},parameterSymbol:"?",parameterStyle:"anonymous"},bigquery:{identifierEscape:{start:"`",end:"`"},parameterSymbol:"@",parameterStyle:"named"},hive:{identifierEscape:{start:"`",end:"`"},parameterSymbol:"?",parameterStyle:"anonymous"},mariadb:{identifierEscape:{start:"`",end:"`"},parameterSymbol:"?",parameterStyle:"anonymous"},redshift:{identifierEscape:{start:'"',end:'"'},parameterSymbol:"$",parameterStyle:"indexed"},flinksql:{identifierEscape:{start:"`",end:"`"},parameterSymbol:"?",parameterStyle:"anonymous"},mongodb:{identifierEscape:{start:'"',end:'"'},parameterSymbol:"?",parameterStyle:"anonymous"}},gn=class o{constructor(e){this.handlers=new Map;this.index=1;e?.preset&&(e={...e.preset,...e}),this.parameterDecorator=new wn({prefix:typeof e?.parameterSymbol=="string"?e.parameterSymbol:e?.parameterSymbol?.start??":",suffix:typeof e?.parameterSymbol=="object"?e.parameterSymbol.end:"",style:e?.parameterStyle??"named"}),this.identifierDecorator=new yn({start:e?.identifierEscape?.start??'"',end:e?.identifierEscape?.end??'"'}),this.handlers.set(H.kind,t=>this.visitValueList(t)),this.handlers.set(S.kind,t=>this.visitColumnReference(t)),this.handlers.set(Le.kind,t=>this.visitQualifiedName(t)),this.handlers.set(j.kind,t=>this.visitFunctionCall(t)),this.handlers.set(Z.kind,t=>this.visitUnaryExpression(t)),this.handlers.set(C.kind,t=>this.visitBinaryExpression(t)),this.handlers.set(z.kind,t=>this.visitLiteralValue(t)),this.handlers.set(T.kind,t=>this.visitParameterExpression(t)),this.handlers.set(ye.kind,t=>this.visitSwitchCaseArgument(t)),this.handlers.set(we.kind,t=>this.visitCaseKeyValuePair(t)),this.handlers.set(Q.kind,t=>this.visitRawString(t)),this.handlers.set(x.kind,t=>this.visitIdentifierString(t)),this.handlers.set(X.kind,t=>this.visitParenExpression(t)),this.handlers.set(ce.kind,t=>this.visitCastExpression(t)),this.handlers.set(oe.kind,t=>this.visitCaseExpression(t)),this.handlers.set(ge.kind,t=>this.visitArrayExpression(t)),this.handlers.set(Se.kind,t=>this.visitArrayQueryExpression(t)),this.handlers.set(st.kind,t=>this.visitArraySliceExpression(t)),this.handlers.set(ot.kind,t=>this.visitArrayIndexExpression(t)),this.handlers.set(ve.kind,t=>this.visitBetweenExpression(t)),this.handlers.set(Me.kind,t=>this.visitStringSpecifierExpression(t)),this.handlers.set(be.kind,t=>this.visitTypeValue(t)),this.handlers.set(Ee.kind,t=>this.visitTupleExpression(t)),this.handlers.set(se.kind,t=>this.visitInlineQuery(t)),this.handlers.set(Fe.kind,t=>this.visitWindowFrameExpression(t)),this.handlers.set(Re.kind,t=>this.visitWindowFrameSpec(t)),this.handlers.set(rt.kind,t=>this.visitWindowFrameBoundStatic(t)),this.handlers.set(it.kind,t=>this.visitWindowFrameBoundaryValue(t)),this.handlers.set(je.kind,t=>this.visitPartitionByClause(t)),this.handlers.set(pe.kind,t=>this.visitOrderByClause(t)),this.handlers.set(Ie.kind,t=>this.visitOrderByItem(t)),this.handlers.set(J.kind,t=>this.visitSelectItem(t)),this.handlers.set(U.kind,t=>this.visitSelectClause(t)),this.handlers.set(ht.kind,t=>this.visitDistinct(t)),this.handlers.set(ft.kind,t=>this.visitDistinctOn(t)),this.handlers.set(tt.kind,t=>this.visitHintClause(t)),this.handlers.set(B.kind,t=>this.visitTableSource(t)),this.handlers.set(Ke.kind,t=>this.visitFunctionSource(t)),this.handlers.set(R.kind,t=>this.visitSourceExpression(t)),this.handlers.set(Y.kind,t=>this.visitSourceAliasExpression(t)),this.handlers.set(W.kind,t=>this.visitFromClause(t)),this.handlers.set(fe.kind,t=>this.visitJoinClause(t)),this.handlers.set(he.kind,t=>this.visitJoinOnClause(t)),this.handlers.set(Pe.kind,t=>this.visitJoinUsingClause(t)),this.handlers.set(ae.kind,t=>this.visitWhereClause(t)),this.handlers.set(me.kind,t=>this.visitGroupByClause(t)),this.handlers.set(de.kind,t=>this.visitHavingClause(t)),this.handlers.set(Ye.kind,t=>this.visitWindowClause(t)),this.handlers.set(xe.kind,t=>this.visitWindowFrameClause(t)),this.handlers.set(le.kind,t=>this.visitLimitClause(t)),this.handlers.set($e.kind,t=>this.visitOffsetClause(t)),this.handlers.set(_e.kind,t=>this.visitFetchClause(t)),this.handlers.set(at.kind,t=>this.visitFetchExpression(t)),this.handlers.set(Be.kind,t=>this.visitForClause(t)),this.handlers.set(re.kind,t=>this.visitWithClause(t)),this.handlers.set(ee.kind,t=>this.visitCommonTable(t)),this.handlers.set(b.kind,t=>this.visitSimpleQuery(t)),this.handlers.set(_.kind,t=>this.visitSubQuerySource(t)),this.handlers.set(q.kind,t=>this.visitBinarySelectQuery(t)),this.handlers.set(ie.kind,t=>this.visitValuesQuery(t)),this.handlers.set(Ee.kind,t=>this.visitTupleExpression(t)),this.handlers.set(qe.kind,t=>this.visitInsertQuery(t)),this.handlers.set(Ze.kind,t=>this.visitInsertClause(t)),this.handlers.set(gt.kind,t=>this.visitUpdateQuery(t)),this.handlers.set(Ct.kind,t=>this.visitUpdateClause(t)),this.handlers.set(ze.kind,t=>this.visitSetClause(t)),this.handlers.set(Xe.kind,t=>this.visitSetClauseItem(t)),this.handlers.set(Gt.kind,t=>this.visitReturningClause(t)),this.handlers.set(St.kind,t=>this.visitCreateTableQuery(t))}static{this.SPACE_TOKEN=new p(10," ")}static{this.COMMA_TOKEN=new p(3,",")}static{this.ARGUMENT_SPLIT_COMMA_TOKEN=new p(11,",")}static{this.PAREN_OPEN_TOKEN=new p(4,"(")}static{this.PAREN_CLOSE_TOKEN=new p(4,")")}static{this.DOT_TOKEN=new p(8,".")}visitBinarySelectQuery(e){let t=new p(0,"");return t.innerTokens.push(this.visit(e.left)),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new p(1,e.operator.value,"BinarySelectQueryOperator")),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(this.visit(e.right)),t}static commaSpaceTokens(){return[o.COMMA_TOKEN,o.SPACE_TOKEN]}static argumentCommaSpaceTokens(){return[o.ARGUMENT_SPLIT_COMMA_TOKEN,o.SPACE_TOKEN]}visitQualifiedName(e){let t=new p(0,"","QualifiedName");if(e.namespaces)for(let n=0;n<e.namespaces.length;n++)t.innerTokens.push(e.namespaces[n].accept(this)),t.innerTokens.push(o.DOT_TOKEN);return t.innerTokens.push(e.name.accept(this)),t}visitPartitionByClause(e){let t=new p(1,"partition by","PartitionByClause");return t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(this.visit(e.value)),t}visitOrderByClause(e){let t=new p(1,"order by","OrderByClause");t.innerTokens.push(o.SPACE_TOKEN);for(let n=0;n<e.order.length;n++)n>0&&t.innerTokens.push(...o.commaSpaceTokens()),t.innerTokens.push(this.visit(e.order[n]));return t}visitOrderByItem(e){let t=new p(0,"","OrderByItem");return t.innerTokens.push(this.visit(e.value)),e.sortDirection&&e.sortDirection!=="asc"&&(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new p(1,"desc"))),e.nullsPosition&&(e.nullsPosition==="first"?(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new p(1,"nulls first"))):e.nullsPosition==="last"&&(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new p(1,"nulls last")))),t}parse(e){this.index=1;let t=this.visit(e),n=nt.collect(e).sort((i,s)=>(i.index??0)-(s.index??0)),r=this.parameterDecorator.style;if(r==="named"){let i={};for(let s of n){let a=s.name.value;if(i.hasOwnProperty(a)){if(i[a]!==s.value)throw new Error(`Duplicate parameter name '${a}' with different values detected during query composition.`);continue}i[a]=s.value}return{token:t,params:i}}else if(r==="indexed"){let i=n.map(s=>s.value);return{token:t,params:i}}else if(r==="anonymous"){let i=n.map(s=>s.value);return{token:t,params:i}}return{token:t,params:[]}}visit(e){let t=this.handlers.get(e.getKind());if(t){let n=t(e);return this.addCommentsToToken(n,e.comments),n}throw new Error(`[SqlPrintTokenParser] No handler for kind: ${e.getKind().toString()}`)}addCommentsToToken(e,t){if(!t||t.length===0)return;let n=[];for(let r of t)r.trim()&&n.push(new p(6,`/* ${r} */`));n.length>0&&e.innerTokens.unshift(...n)}visitValueList(e){let t=new p(0,"","ValueList");for(let n=0;n<e.values.length;n++)n>0&&t.innerTokens.push(...o.argumentCommaSpaceTokens()),t.innerTokens.push(this.visit(e.values[n]));return t}visitColumnReference(e){let t=new p(0,"","ColumnReference");return t.innerTokens.push(e.qualifiedName.accept(this)),t}visitFunctionCall(e){let t=new p(0,"","FunctionCall");return t.innerTokens.push(e.qualifiedName.accept(this)),t.innerTokens.push(o.PAREN_OPEN_TOKEN),e.argument&&t.innerTokens.push(this.visit(e.argument)),t.innerTokens.push(o.PAREN_CLOSE_TOKEN),e.over&&(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new p(1,"over")),e.over instanceof x?(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(e.over.accept(this))):(t.innerTokens.push(o.PAREN_OPEN_TOKEN),t.innerTokens.push(this.visit(e.over)),t.innerTokens.push(o.PAREN_CLOSE_TOKEN))),t}visitUnaryExpression(e){let t=new p(0,"","UnaryExpression");return t.innerTokens.push(this.visit(e.operator)),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(this.visit(e.expression)),t}visitBinaryExpression(e){let t=new p(0,"","BinaryExpression");return t.innerTokens.push(this.visit(e.left)),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new p(5,e.operator.value)),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(this.visit(e.right)),t}visitLiteralValue(e){let t;return typeof e.value=="string"?e.isDollarString?t=e.value:t=`'${e.value.replace(/'/g,"''")}'`:e.value===null?t="null":t=e.value.toString(),new p(2,t,"LiteralValue")}visitParameterExpression(e){e.index=this.index;let t=this.parameterDecorator.decorate(e.name.value,e.index),n=new p(7,t);return this.index++,n}visitSwitchCaseArgument(e){let t=new p(0,"","SwitchCaseArgument");for(let n of e.cases)t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(n.accept(this));return e.elseValue&&(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(this.createElseToken(e.elseValue))),t}createElseToken(e){let t=new p(0,"","ElseClause");t.innerTokens.push(new p(1,"else")),t.innerTokens.push(o.SPACE_TOKEN);let n=new p(0,"","CaseElseValue");return n.innerTokens.push(this.visit(e)),t.innerTokens.push(n),t}visitCaseKeyValuePair(e){let t=new p(0,"","CaseKeyValuePair");t.innerTokens.push(new p(1,"when")),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(this.visit(e.key)),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new p(1,"then")),t.innerTokens.push(o.SPACE_TOKEN);let n=new p(0,"","CaseThenValue");return n.innerTokens.push(this.visit(e.value)),t.innerTokens.push(n),t}visitRawString(e){return new p(2,e.value,"RawString")}visitIdentifierString(e){let t=e.name==="*"?e.name:this.identifierDecorator.decorate(e.name);return new p(2,t,"IdentifierString")}visitParenExpression(e){let t=new p(0,"","ParenExpression");return t.innerTokens.push(o.PAREN_OPEN_TOKEN),t.innerTokens.push(this.visit(e.expression)),t.innerTokens.push(o.PAREN_CLOSE_TOKEN),t}visitCastExpression(e){let t=new p(0,"","CastExpression");return t.innerTokens.push(this.visit(e.input)),t.innerTokens.push(new p(5,"::")),t.innerTokens.push(this.visit(e.castType)),t}visitCaseExpression(e){let t=new p(0,"","CaseExpression");return t.innerTokens.push(new p(1,"case")),e.condition&&(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(this.visit(e.condition))),t.innerTokens.push(this.visit(e.switchCase)),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new p(1,"end")),t}visitArrayExpression(e){let t=new p(0,"","ArrayExpression");return t.innerTokens.push(new p(1,"array")),t.innerTokens.push(new p(4,"[")),t.innerTokens.push(this.visit(e.expression)),t.innerTokens.push(new p(4,"]")),t}visitArrayQueryExpression(e){let t=new p(0,"","ArrayExpression");return t.innerTokens.push(new p(1,"array")),t.innerTokens.push(new p(4,"(")),t.innerTokens.push(this.visit(e.query)),t.innerTokens.push(new p(4,")")),t}visitArraySliceExpression(e){let t=new p(0,"","ArrayExpression");return t.innerTokens.push(this.visit(e.array)),t.innerTokens.push(new p(4,"[")),e.startIndex&&t.innerTokens.push(this.visit(e.startIndex)),t.innerTokens.push(new p(5,":")),e.endIndex&&t.innerTokens.push(this.visit(e.endIndex)),t.innerTokens.push(new p(4,"]")),t}visitArrayIndexExpression(e){let t=new p(0,"","ArrayExpression");return t.innerTokens.push(this.visit(e.array)),t.innerTokens.push(new p(4,"[")),t.innerTokens.push(this.visit(e.index)),t.innerTokens.push(new p(4,"]")),t}visitBetweenExpression(e){let t=new p(0,"","BetweenExpression");return t.innerTokens.push(this.visit(e.expression)),t.innerTokens.push(o.SPACE_TOKEN),e.negated&&(t.innerTokens.push(new p(1,"not")),t.innerTokens.push(o.SPACE_TOKEN)),t.innerTokens.push(new p(1,"between")),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(this.visit(e.lower)),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new p(1,"and")),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(this.visit(e.upper)),t}visitStringSpecifierExpression(e){let t=e.specifier.accept(this).text,n=e.value.accept(this).text;return new p(2,t+n,"StringSpecifierExpression")}visitTypeValue(e){let t=new p(0,"","TypeValue");return t.innerTokens.push(e.qualifiedName.accept(this)),e.argument&&(t.innerTokens.push(o.PAREN_OPEN_TOKEN),t.innerTokens.push(this.visit(e.argument)),t.innerTokens.push(o.PAREN_CLOSE_TOKEN)),t}visitTupleExpression(e){let t=new p(0,"","TupleExpression");t.innerTokens.push(o.PAREN_OPEN_TOKEN);for(let n=0;n<e.values.length;n++)n>0&&t.innerTokens.push(...o.argumentCommaSpaceTokens()),t.innerTokens.push(this.visit(e.values[n]));return t.innerTokens.push(o.PAREN_CLOSE_TOKEN),t}visitWindowFrameExpression(e){let t=new p(0,"","WindowFrameExpression"),n=!0;return e.partition&&(t.innerTokens.push(this.visit(e.partition)),n=!1),e.order&&(n?n=!1:t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(this.visit(e.order))),e.frameSpec&&(n?n=!1:t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(this.visit(e.frameSpec))),t}visitWindowFrameSpec(e){let t=new p(0,"","WindowFrameSpec");return t.innerTokens.push(new p(1,e.frameType)),e.endBound===null?(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(e.startBound.accept(this))):(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new p(1,"between")),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(e.startBound.accept(this)),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new p(1,"and")),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(e.endBound.accept(this))),t}visitWindowFrameBoundaryValue(e){let t=new p(0,"","WindowFrameBoundaryValue");return t.innerTokens.push(e.value.accept(this)),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new p(1,e.isFollowing?"following":"preceding")),t}visitWindowFrameBoundStatic(e){return new p(1,e.bound)}visitSelectItem(e){let t=new p(0,"","SelectItem");if(t.innerTokens.push(this.visit(e.value)),!e.identifier)return t;if(e.value instanceof S){let n=e.value.column.name;if(e.identifier.name===n)return t}return t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new p(1,"as")),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(this.visit(e.identifier)),t}visitSelectClause(e){let t=new p(1,"select","SelectClause"),n="select";for(let r of e.hints)n+=" "+this.visit(r).text;if(e.distinct){let r=e.distinct.accept(this);if(r.innerTokens&&r.innerTokens.length>0){let i=r.text;for(let s of r.innerTokens)i+=this.flattenTokenText(s);n+=" "+i}else n+=" "+r.text}t.text=n,t.innerTokens.push(o.SPACE_TOKEN);for(let r=0;r<e.items.length;r++)r>0&&t.innerTokens.push(...o.commaSpaceTokens()),t.innerTokens.push(this.visit(e.items[r]));return t}flattenTokenText(e){let t=e.text;if(e.innerTokens)for(let n of e.innerTokens)t+=this.flattenTokenText(n);return t}visitHintClause(e){return new p(2,e.getFullHint())}visitDistinct(e){return new p(1,"distinct")}visitDistinctOn(e){let t=new p(0,"","DistinctOn");return t.innerTokens.push(new p(1,"distinct on")),t.innerTokens.push(o.PAREN_OPEN_TOKEN),t.innerTokens.push(e.value.accept(this)),t.innerTokens.push(o.PAREN_CLOSE_TOKEN),t}visitTableSource(e){let t="";Array.isArray(e.namespaces)&&e.namespaces.length>0&&(t=e.namespaces.map(r=>r.accept(this).text).join(".")+"."),t+=e.table.accept(this).text;let n=new p(2,t);return e.identifier&&(e.identifier.name,e.table.name),n}visitSourceExpression(e){let t=new p(0,"","SourceExpression");if(t.innerTokens.push(e.datasource.accept(this)),!e.aliasExpression)return t;if(e.datasource instanceof B){let n=e.datasource.table.name;return e.aliasExpression.table.name===n||(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new p(1,"as")),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(e.aliasExpression.accept(this))),t}else return t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new p(1,"as")),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(e.aliasExpression.accept(this)),t}visitFromClause(e){let t=new p(1,"from","FromClause");if(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(this.visit(e.source)),e.joins)for(let n=0;n<e.joins.length;n++)t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(this.visit(e.joins[n]));return t}visitJoinClause(e){let t=new p(0,"","JoinClause");return t.innerTokens.push(new p(1,e.joinType.value)),e.lateral&&(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new p(1,"lateral"))),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(this.visit(e.source)),e.condition&&(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(this.visit(e.condition))),t}visitJoinOnClause(e){let t=new p(0,"","JoinOnClause");return t.innerTokens.push(new p(1,"on")),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(this.visit(e.condition)),t}visitJoinUsingClause(e){let t=new p(0,"","JoinUsingClause");return t.innerTokens.push(new p(1,"using")),t.innerTokens.push(o.PAREN_OPEN_TOKEN),t.innerTokens.push(this.visit(e.condition)),t.innerTokens.push(o.PAREN_CLOSE_TOKEN),t}visitFunctionSource(e){let t=new p(0,"","FunctionSource");return t.innerTokens.push(e.qualifiedName.accept(this)),t.innerTokens.push(o.PAREN_OPEN_TOKEN),e.argument&&t.innerTokens.push(this.visit(e.argument)),t.innerTokens.push(o.PAREN_CLOSE_TOKEN),t}visitSourceAliasExpression(e){let t=new p(0,"","SourceAliasExpression");if(t.innerTokens.push(this.visit(e.table)),e.columns){t.innerTokens.push(o.PAREN_OPEN_TOKEN);for(let n=0;n<e.columns.length;n++)n>0&&t.innerTokens.push(...o.argumentCommaSpaceTokens()),t.innerTokens.push(this.visit(e.columns[n]));t.innerTokens.push(o.PAREN_CLOSE_TOKEN)}return t}visitWhereClause(e){let t=new p(1,"where","WhereClause");return t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(this.visit(e.condition)),t}visitGroupByClause(e){let t=new p(1,"group by","GroupByClause");t.innerTokens.push(o.SPACE_TOKEN);for(let n=0;n<e.grouping.length;n++)n>0&&t.innerTokens.push(...o.commaSpaceTokens()),t.innerTokens.push(this.visit(e.grouping[n]));return t}visitHavingClause(e){let t=new p(1,"having","HavingClause");return t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(this.visit(e.condition)),t}visitWindowClause(e){let t=new p(1,"window","WindowClause");t.innerTokens.push(o.SPACE_TOKEN);for(let n=0;n<e.windows.length;n++)n>0&&t.innerTokens.push(...o.commaSpaceTokens()),t.innerTokens.push(this.visit(e.windows[n]));return t}visitWindowFrameClause(e){let t=new p(0,"","WindowFrameClause");return t.innerTokens.push(e.name.accept(this)),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new p(1,"as")),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(o.PAREN_OPEN_TOKEN),t.innerTokens.push(this.visit(e.expression)),t.innerTokens.push(o.PAREN_CLOSE_TOKEN),t}visitLimitClause(e){let t=new p(1,"limit","LimitClause");return t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(this.visit(e.value)),t}visitOffsetClause(e){let t=new p(1,"offset","OffsetClause");return t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(this.visit(e.value)),t}visitFetchClause(e){let t=new p(1,"fetch","FetchClause");return t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(this.visit(e.expression)),t}visitFetchExpression(e){let t=new p(0,"","FetchExpression");return t.innerTokens.push(new p(1,e.type)),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(e.count.accept(this)),e.unit&&(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new p(1,e.unit))),t}visitForClause(e){let t=new p(1,"for","ForClause");return t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new p(1,e.lockMode)),t}visitWithClause(e){let t=new p(1,"with","WithClause");t.innerTokens.push(o.SPACE_TOKEN),e.recursive&&(t.innerTokens.push(new p(1,"recursive")),t.innerTokens.push(o.SPACE_TOKEN));for(let n=0;n<e.tables.length;n++)n>0&&t.innerTokens.push(...o.commaSpaceTokens()),t.innerTokens.push(e.tables[n].accept(this));return t.innerTokens.push(o.SPACE_TOKEN),t}visitCommonTable(e){let t=new p(0,"","CommonTable");t.innerTokens.push(e.aliasExpression.accept(this)),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new p(1,"as")),t.innerTokens.push(o.SPACE_TOKEN),e.materialized!==null&&(e.materialized?t.innerTokens.push(new p(1,"materialized")):t.innerTokens.push(new p(1,"not materialized")),t.innerTokens.push(o.SPACE_TOKEN)),t.innerTokens.push(o.PAREN_OPEN_TOKEN);let n=new p(0,"","SubQuerySource");return n.innerTokens.push(e.query.accept(this)),t.innerTokens.push(n),t.innerTokens.push(o.PAREN_CLOSE_TOKEN),t}visitSimpleQuery(e){let t=new p(0,"","SimpleSelectQuery");return e.withClause&&t.innerTokens.push(e.withClause.accept(this)),t.innerTokens.push(e.selectClause.accept(this)),e.fromClause&&(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(e.fromClause.accept(this)),e.whereClause&&(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(e.whereClause.accept(this))),e.groupByClause&&(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(e.groupByClause.accept(this))),e.havingClause&&(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(e.havingClause.accept(this))),e.orderByClause&&(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(e.orderByClause.accept(this))),e.windowClause&&(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(e.windowClause.accept(this))),e.limitClause&&(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(e.limitClause.accept(this))),e.offsetClause&&(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(e.offsetClause.accept(this))),e.fetchClause&&(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(e.fetchClause.accept(this))),e.forClause&&(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(e.forClause.accept(this)))),t}visitSubQuerySource(e){let t=new p(0,"");t.innerTokens.push(o.PAREN_OPEN_TOKEN);let n=new p(0,"","SubQuerySource");return n.innerTokens.push(e.query.accept(this)),t.innerTokens.push(n),t.innerTokens.push(o.PAREN_CLOSE_TOKEN),t}visitValuesQuery(e){let t=new p(1,"values","ValuesQuery");t.innerTokens.push(o.SPACE_TOKEN);let n=new p(0,"","Values");for(let r=0;r<e.tuples.length;r++)r>0&&n.innerTokens.push(...o.commaSpaceTokens()),n.innerTokens.push(e.tuples[r].accept(this));return t.innerTokens.push(n),t}visitInlineQuery(e){let t=new p(0,"");t.innerTokens.push(o.PAREN_OPEN_TOKEN);let n=new p(0,"","InlineQuery");return n.innerTokens.push(e.selectQuery.accept(this)),t.innerTokens.push(n),t.innerTokens.push(o.PAREN_CLOSE_TOKEN),t}visitInsertQuery(e){let t=new p(0,"","InsertQuery");return t.innerTokens.push(this.visit(e.insertClause)),e.selectQuery&&(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(this.visit(e.selectQuery))),t}visitInsertClause(e){let t=new p(0,"");if(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new p(1,"insert into")),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(e.source.accept(this)),e.columns.length>0){t.innerTokens.push(o.PAREN_OPEN_TOKEN);for(let n=0;n<e.columns.length;n++)n>0&&t.innerTokens.push(...o.commaSpaceTokens()),t.innerTokens.push(e.columns[n].accept(this));t.innerTokens.push(o.PAREN_CLOSE_TOKEN)}return t}visitUpdateQuery(e){let t=new p(0,"","UpdateQuery");return e.withClause&&t.innerTokens.push(e.withClause.accept(this)),t.innerTokens.push(e.updateClause.accept(this)),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(e.setClause.accept(this)),e.fromClause&&(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(e.fromClause.accept(this))),e.whereClause&&(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(e.whereClause.accept(this))),e.returningClause&&(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(e.returningClause.accept(this))),t}visitUpdateClause(e){let t=new p(1,"update","UpdateClause");return t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(e.source.accept(this)),t}visitSetClause(e){let t=new p(1,"set","SelectClause");t.innerTokens.push(o.SPACE_TOKEN);for(let n=0;n<e.items.length;n++)n>0&&t.innerTokens.push(...o.commaSpaceTokens()),t.innerTokens.push(this.visit(e.items[n]));return t}visitSetClauseItem(e){let t=new p(0,"","SetClauseItem");return t.innerTokens.push(e.column.accept(this)),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new p(5,"=")),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(e.value.accept(this)),t}visitReturningClause(e){let t=new p(1,"returning","ReturningClause");t.innerTokens.push(o.SPACE_TOKEN);for(let n=0;n<e.columns.length;n++)n>0&&t.innerTokens.push(...o.commaSpaceTokens()),t.innerTokens.push(this.visit(e.columns[n]));return t}visitCreateTableQuery(e){let t=new p(1,e.isTemporary?"create temporary table":"create table","CreateTableQuery");return t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(e.tableName.accept(this)),e.asSelectQuery&&(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new p(1,"as")),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(e.asSelectQuery.accept(this))),t}};var Qt=class{constructor(e=" ",t=0,n=`\r
13
+ `){this.indentChar=e,this.indentSize=t,this.newline=n,this.lines=[],this.appendNewline(0)}print(){let e="";for(let t of this.lines)t.text!==""&&(e+=this.indent(t.level)+t.text);return e.trimEnd()}indent(e){return this.indentChar.repeat(this.indentSize*e)}appendNewline(e){if(this.lines.length>0){let t=this.lines[this.lines.length-1];t.text!==""&&(t.text=t.text.trimEnd()+this.newline)}this.lines.push(new Gn(e,""))}appendText(e){if(this.lines.length>0){let t=this.lines.length-1,n=this.lines[t];e===" "&&n.text===""||(n.text+=e)}else throw new Error("No tokens to append to.")}getCurrentLine(){if(this.lines.length>0)return this.lines[this.lines.length-1];throw new Error("No tokens to get current line from.")}},Gn=class{constructor(e,t){this.level=e,this.text=t}};var Sn=class o{constructor(e){this.indentChar=e?.indentChar??"",this.indentSize=e?.indentSize??0,this.newline=e?.newline??" ",this.commaBreak=e?.commaBreak??"none",this.andBreak=e?.andBreak??"none",this.keywordCase=e?.keywordCase??"none",this.exportComment=e?.exportComment??!1,this.strictCommentPlacement=e?.strictCommentPlacement??!1,this.cteOneline=e?.cteOneline??!1,this.linePrinter=new Qt(this.indentChar,this.indentSize,this.newline),this.indentIncrementContainers=new Set(e?.indentIncrementContainerTypes??["SelectClause","FromClause","WhereClause","GroupByClause","HavingClause","WindowFrameExpression","PartitionByClause","OrderByClause","WindowClause","LimitClause","OffsetClause","SubQuerySource","BinarySelectQueryOperator","Values","WithClause","SwitchCaseArgument","CaseKeyValuePair","CaseThenValue","ElseClause","CaseElseValue"])}print(e,t=0){return this.linePrinter=new Qt(this.indentChar,this.indentSize,this.newline),this.linePrinter.lines.length>0&&t!==this.linePrinter.lines[0].level&&(this.linePrinter.lines[0].level=t),this.appendToken(e,t),this.linePrinter.print()}appendToken(e,t,n){if(this.shouldSkipToken(e))return;let r=this.linePrinter.getCurrentLine();if(e.type===1)this.handleKeywordToken(e,t);else if(e.type===3)this.handleCommaToken(e,t,n);else if(e.type===5&&e.text.toLowerCase()==="and")this.handleAndOperatorToken(e,t);else if(e.containerType==="JoinClause")this.handleJoinClauseToken(e,t);else if(e.type===6)this.handleCommentToken(e);else if(e.containerType==="CommonTable"&&this.cteOneline){this.handleCteOnelineToken(e,t);return}else this.linePrinter.appendText(e.text);if(e.keywordTokens&&e.keywordTokens.length>0)for(let s=0;s<e.keywordTokens.length;s++){let a=e.keywordTokens[s];this.appendToken(a,t,e.containerType)}let i=t;this.newline!==" "&&r.text!==""&&this.indentIncrementContainers.has(e.containerType)&&(i++,this.linePrinter.appendNewline(i));for(let s=0;s<e.innerTokens.length;s++){let a=e.innerTokens[s];this.appendToken(a,i,e.containerType)}i!==t&&this.linePrinter.appendNewline(t)}shouldSkipToken(e){return(!e.innerTokens||e.innerTokens.length===0)&&e.text===""}applyKeywordCase(e){return this.keywordCase==="upper"?e.toUpperCase():this.keywordCase==="lower"?e.toLowerCase():e}handleKeywordToken(e,t){let n=this.applyKeywordCase(e.text);this.linePrinter.appendText(n)}handleCommaToken(e,t,n){let r=e.text;this.cteOneline&&n==="WithClause"?(this.linePrinter.appendText(r),this.linePrinter.appendNewline(t)):this.commaBreak==="before"?(this.linePrinter.appendNewline(t),this.linePrinter.appendText(r)):this.commaBreak==="after"?(this.linePrinter.appendText(r),this.linePrinter.appendNewline(t)):this.linePrinter.appendText(r)}handleAndOperatorToken(e,t){let n=this.applyKeywordCase(e.text);this.andBreak==="before"?(this.linePrinter.appendNewline(t),this.linePrinter.appendText(n)):this.andBreak==="after"?(this.linePrinter.appendText(n),this.linePrinter.appendNewline(t)):this.linePrinter.appendText(n)}handleJoinClauseToken(e,t){let n=this.applyKeywordCase(e.text);this.linePrinter.appendNewline(t),this.linePrinter.appendText(n)}handleCommentToken(e){this.exportComment&&(this.linePrinter.appendText(e.text),this.linePrinter.appendText(" "))}handleCteOnelineToken(e,t){let r=new o({indentChar:"",indentSize:0,newline:" ",commaBreak:this.commaBreak,andBreak:this.andBreak,keywordCase:this.keywordCase,exportComment:this.exportComment,strictCommentPlacement:this.strictCommentPlacement,cteOneline:!1}).print(e,t);this.linePrinter.appendText(r)}};var _r=["mysql","postgres","sqlserver","sqlite"],ut=class{constructor(e={}){let t=e.preset?fr[e.preset]:void 0;if(e.preset&&!t)throw new Error(`Invalid preset: ${e.preset}`);let n={...t,identifierEscape:e.identifierEscape??t?.identifierEscape,parameterSymbol:e.parameterSymbol??t?.parameterSymbol,parameterStyle:e.parameterStyle??t?.parameterStyle};this.parser=new gn(n),this.printer=new Sn(e)}format(e){let{token:t,params:n}=this.parser.parse(e);return{formattedSql:this.printer.print(t),params:n}}};var Ge=class{constructor(){this.sqlFormatter=new ut({identifierEscape:{start:'"',end:'"'},parameterSymbol:":",parameterStyle:"named"})}format(e,t=null){return t&&(this.sqlFormatter=new ut(t)),this.sqlFormatter.format(e).formattedSql}formatWithParameters(e,t=null){t&&(this.sqlFormatter=new ut(t));let n=this.sqlFormatter.format(e);return{sql:n.formattedSql,params:n.params}}visit(e){return this.format(e)}};var vn=class{constructor(){this.sourceCollector=new At(!0),this.cteCollector=new ne,this.formatter=new Ge}build(e){if(e.length===0)return new re(!1,e);let t=this.resolveDuplicateNames(e),{tableMap:n,recursiveCTEs:r,dependencies:i}=this.buildDependencyGraph(t),s=this.sortCommonTables(t,n,r,i);return new re(r.size>0,s)}resolveDuplicateNames(e){let t=new Map;for(let r of e){let i=r.aliasExpression.table.name;t.has(i)||t.set(i,[]),t.get(i).push(r)}let n=[];for(let[r,i]of t.entries()){if(i.length===1){n.push(i[0]);continue}let s=i.map(l=>this.formatter.format(l.query));if(new Set(s).size===1)n.push(i[0]);else throw new Error(`CTE name conflict detected: '${r}' has multiple different definitions`)}return n}buildDependencyGraph(e){let t=new Map;for(let s of e)t.set(s.aliasExpression.table.name,s);let n=new Set,r=new Map,i=new Map;for(let s of e){let a=s.aliasExpression.table.name,l=this.sourceCollector.collect(s.query);for(let c of l)if(c.table.name===a){n.add(a);break}r.has(a)||r.set(a,new Set);let u=this.cteCollector.collect(s.query);for(let c of u){let d=c.aliasExpression.table.name;t.has(d)&&(r.get(a).add(d),i.has(d)||i.set(d,new Set),i.get(d).add(a))}}return{tableMap:t,recursiveCTEs:n,dependencies:r}}sortCommonTables(e,t,n,r){let i=[],s=[],a=new Set,l=new Set,u=c=>{if(a.has(c))return;if(l.has(c))throw new Error(`Circular reference detected in CTE: ${c}`);l.add(c);let d=r.get(c)||new Set;for(let h of d)u(h);l.delete(c),a.add(c),n.has(c)?i.push(t.get(c)):s.push(t.get(c))};for(let c of e){let d=c.aliasExpression.table.name;a.has(d)||u(d)}return[...i,...s]}};var bn=class{constructor(){this.nameConflictResolver=new vn,this.cteCollector=new ne}inject(e,t){if(t.length===0)return e;t.push(...this.cteCollector.collect(e));let n=this.nameConflictResolver.build(t);if(e instanceof b)return this.injectIntoSimpleQuery(e,n);if(e instanceof q)return this.injectIntoBinaryQuery(e,n);throw new Error("Unsupported query type")}injectIntoSimpleQuery(e,t){if(e.withClause)throw new Error("The query already has a WITH clause. Please remove it before injecting new CTEs.");return e.withClause=t,e}injectIntoBinaryQuery(e,t){if(e.left instanceof b)return this.injectIntoSimpleQuery(e.left,t),e;if(e.left instanceof q)return this.injectIntoBinaryQuery(e.left,t),e;throw new Error("Unsupported query type for BinarySelectQuery left side")}};var De=class{constructor(){}static normalize(e){let n=new ne().collect(e);return n.length===0?e:(new wt().execute(e),new bn().inject(e,n))}};var Yn=(t=>(t.ColumnNameOnly="columnNameOnly",t.FullName="fullName",t))(Yn||{}),Te=class{constructor(e,t=!1,n="columnNameOnly",r){this.selectValues=[];this.visitedNodes=new Set;this.isRootVisit=!0;this.tableColumnResolver=null;this.commonTables=[];this.tableColumnResolver=e??null,this.includeWildCard=t,this.commonTableCollector=new ne,this.commonTables=[],this.duplicateDetection=n,this.options=r||{},this.handlers=new Map,this.handlers.set(b.kind,i=>this.visitSimpleSelectQuery(i)),this.handlers.set(U.kind,i=>this.visitSelectClause(i)),this.handlers.set(W.kind,i=>this.visitFromClause(i)),this.handlers.set(ae.kind,i=>this.visitWhereClause(i)),this.handlers.set(me.kind,i=>this.visitGroupByClause(i)),this.handlers.set(de.kind,i=>this.visitHavingClause(i)),this.handlers.set(pe.kind,i=>this.visitOrderByClause(i)),this.handlers.set(xe.kind,i=>this.visitWindowFrameClause(i)),this.handlers.set(le.kind,i=>this.visitLimitClause(i)),this.handlers.set($e.kind,i=>this.offsetClause(i)),this.handlers.set(_e.kind,i=>this.visitFetchClause(i)),this.handlers.set(he.kind,i=>this.visitJoinOnClause(i)),this.handlers.set(Pe.kind,i=>this.visitJoinUsingClause(i)),this.handlers.set(S.kind,i=>this.visitColumnReference(i)),this.handlers.set(C.kind,i=>this.visitBinaryExpression(i)),this.handlers.set(Z.kind,i=>this.visitUnaryExpression(i)),this.handlers.set(j.kind,i=>this.visitFunctionCall(i)),this.handlers.set(X.kind,i=>this.visitParenExpression(i)),this.handlers.set(oe.kind,i=>this.visitCaseExpression(i)),this.handlers.set(ce.kind,i=>this.visitCastExpression(i)),this.handlers.set(ve.kind,i=>this.visitBetweenExpression(i)),this.handlers.set(ge.kind,i=>this.visitArrayExpression(i)),this.handlers.set(Se.kind,i=>this.visitArrayQueryExpression(i)),this.handlers.set(H.kind,i=>this.visitValueList(i)),this.handlers.set(xe.kind,i=>this.visitWindowFrameClause(i)),this.handlers.set(Fe.kind,i=>this.visitWindowFrameExpression(i)),this.handlers.set(je.kind,i=>this.visitPartitionByClause(i))}getValues(){return this.selectValues}collect(e){this.visit(e);let t=this.getValues();return this.reset(),t}reset(){this.selectValues=[],this.visitedNodes.clear(),this.commonTables=[]}addSelectValueAsUnique(e,t){if(this.duplicateDetection==="columnNameOnly")this.selectValues.some(n=>n.name===e)||this.selectValues.push({name:e,value:t});else if(this.duplicateDetection==="fullName"){let n="";t&&typeof t.getNamespace=="function"&&(n=t.getNamespace()||"");let r=n?n+"."+e:e;this.selectValues.some(i=>{let s="";return i.value&&typeof i.value.getNamespace=="function"&&(s=i.value.getNamespace()||""),(s?s+"."+i.name:i.name)===r})||this.selectValues.push({name:e,value:t})}}visit(e){if(!this.isRootVisit){this.visitNode(e);return}if(!(e instanceof b))throw new Error("Root visit requires a SimpleSelectQuery. Decompose compound queries before collecting columns.");this.reset(),this.isRootVisit=!1,this.commonTables=this.commonTableCollector.collect(e);try{this.visitNode(e)}finally{this.isRootVisit=!0}}visitNode(e){if(this.visitedNodes.has(e))return;this.visitedNodes.add(e);let t=this.handlers.get(e.getKind());if(t){t(e);return}}visitSimpleSelectQuery(e){if(e.selectClause&&e.selectClause.accept(this),e.fromClause&&e.fromClause.accept(this),e.whereClause&&e.whereClause.accept(this),e.groupByClause&&e.groupByClause.accept(this),e.havingClause&&e.havingClause.accept(this),e.windowClause)for(let t of e.windowClause.windows)t.accept(this);e.orderByClause&&e.orderByClause.accept(this),e.limitClause&&e.limitClause.accept(this),e.offsetClause&&e.offsetClause.accept(this),e.fetchClause&&e.fetchClause.accept(this),e.forClause&&e.forClause.accept(this)}visitSelectClause(e){for(let t of e.items)t.identifier&&this.addSelectValueAsUnique(t.identifier.name,t.value),t.value.accept(this)}visitFromClause(e){let n=new Oe(this.tableColumnResolver,this.commonTables).collect(e);for(let r of n)this.addSelectValueAsUnique(r.name,r.value);if(e.joins)for(let r of e.joins)r.condition&&r.condition.accept(this)}visitWhereClause(e){e.condition&&e.condition.accept(this)}visitGroupByClause(e){if(e.grouping)for(let t of e.grouping)t.accept(this)}visitHavingClause(e){e.condition&&e.condition.accept(this)}visitOrderByClause(e){if(e.order)for(let t of e.order)t.accept(this)}visitWindowFrameClause(e){e.expression.accept(this)}visitWindowFrameExpression(e){e.partition&&e.partition.accept(this),e.order&&e.order.accept(this),e.frameSpec&&e.frameSpec.accept(this)}visitLimitClause(e){e.value&&e.value.accept(this)}offsetClause(e){e.value&&e.value.accept(this)}visitFetchClause(e){e.expression&&e.expression.accept(this)}visitJoinOnClause(e){e.condition&&e.condition.accept(this)}visitJoinUsingClause(e){e.condition&&e.condition.accept(this)}visitColumnReference(e){if(e.column.name!=="*")this.addSelectValueAsUnique(e.column.name,e);else if(this.includeWildCard)this.addSelectValueAsUnique(e.column.name,e);else return}visitBinaryExpression(e){e.left&&e.left.accept(this),e.right&&e.right.accept(this)}visitUnaryExpression(e){e.expression&&e.expression.accept(this)}visitFunctionCall(e){e.argument&&e.argument.accept(this),e.over&&e.over.accept(this)}visitParenExpression(e){e.expression&&e.expression.accept(this)}visitCaseExpression(e){e.condition&&e.condition.accept(this),e.switchCase&&e.switchCase.accept(this)}visitCastExpression(e){e.input&&e.input.accept(this)}visitBetweenExpression(e){e.expression&&e.expression.accept(this),e.lower&&e.lower.accept(this),e.upper&&e.upper.accept(this)}visitArrayExpression(e){e.expression&&e.expression.accept(this)}visitArrayQueryExpression(e){e.query.accept(this)}visitValueList(e){if(e.values)for(let t of e.values)t.accept(this)}visitPartitionByClause(e){e.value.accept(this)}};var ct=class o{static parse(e){let n=new N(e).readLexmes(),r=this.parseFromLexeme(n,0);if(r.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[r.newIndex].value}" at position ${r.newIndex}. The source component is complete but there are additional tokens.`);return r.value}static parseTableSourceFromLexemes(e,t){let n=Ne.parseFromLexeme(e,t);return this.parseTableSource(n)}static parseFromLexeme(e,t){let n=t;if(n<e.length&&e[n].type&4)return this.parseParenSource(e,n);let r=Ne.parseFromLexeme(e,n);return r.lastTokenType&2048?o.parseFunctionSource(e,r):o.parseTableSource(r)}static parseTableSource(e){let{namespaces:t,name:n,newIndex:r}=e;return{value:new B(t,n.name),newIndex:r}}static parseFunctionSource(e,t){let n=t.newIndex,{namespaces:r,name:i}=t,s=k.parseArgument(4,8,e,n);n=s.newIndex;let a=i.name;return{value:new Ke({namespaces:r,name:a},s.value),newIndex:n}}static parseParenSource(e,t){let n=t;if(n++,n>=e.length)throw new Error(`Syntax error: Unexpected end of input at position ${n}. Expected a subquery or nested expression after opening parenthesis.`);let r=e[n].value;if(r==="select"||r==="values"||r==="with"){let i=this.parseSubQuerySource(e,n);if(n=i.newIndex,n<e.length&&e[n].type==8)n++;else throw new Error(`Syntax error at position ${n}: Missing closing parenthesis. Each opening parenthesis must have a matching closing parenthesis.`);return{value:i.value,newIndex:n}}else if(e[n].type==4){let i=this.parseParenSource(e,n);if(n=i.newIndex,n<e.length&&e[n].type==8)n++;else throw new Error(`Syntax error at position ${n}: Missing closing parenthesis. Each opening parenthesis must have a matching closing parenthesis.`);return{value:i.value,newIndex:n}}throw new Error(`Syntax error at position ${n}: Expected 'SELECT' keyword, 'VALUES' keyword, or opening parenthesis '(' but found "${e[n].value}".`)}static parseSubQuerySource(e,t){let n=t,{value:r,newIndex:i}=M.parseFromLexeme(e,n);return n=i,{value:new _(r),newIndex:n}}};var vt=class extends Error{constructor(t){super(`CTE '${t}' already exists in the query`);this.cteName=t;this.name="DuplicateCTEError"}},pt=class extends Error{constructor(t,n){super(`Invalid CTE name '${t}': ${n}`);this.cteName=t;this.name="InvalidCTENameError"}},bt=class extends Error{constructor(t){super(`CTE '${t}' not found in the query`);this.cteName=t;this.name="CTENotFoundError"}};var mt=class{constructor(e,t){this.options=t||{},this.tableColumnResolver=e,this.columnCollector=new Te(this.tableColumnResolver)}find(e,t){let n=typeof t=="string"?[t]:t,i=new ne().collect(e),s=new Map;for(let a of i)s.set(a.getSourceAliasName(),a);return this.findUpstream(e,n,s)}handleTableSource(e,t,n){let r=n.get(e.table.name);if(r){let i=new Map(n);i.delete(e.table.name);let s=this.findUpstream(r.query,t,i);return s.length===0?null:s}return null}handleSubQuerySource(e,t,n){let r=this.findUpstream(e.query,t,n);return r.length===0?null:r}processFromClauseBranches(e,t,n){let r=e.getSources();if(r.length===0)return null;let i=[],s=!0,a=0;for(let l of r){let u=l.datasource,c=null;if(u instanceof B)c=this.handleTableSource(u,t,n),a++;else if(u instanceof _)c=this.handleSubQuerySource(u,t,n),a++;else{if(u instanceof ie)continue;s=!1;break}if(c===null){s=!1;break}i.push(c)}return s&&i.length===a?i.flat():null}findUpstream(e,t,n){if(e instanceof b){let r=e.fromClause;if(r){let c=this.processFromClauseBranches(r,t,n);if(c&&c.length>0)return c}let i=this.columnCollector.collect(e).map(c=>c.name),s=this.collectCTEColumns(e,n),a=[...i,...s],l=c=>this.options.ignoreCaseAndUnderscore?c.toLowerCase().replace(/_/g,""):c;return t.every(c=>a.some(d=>l(d)===l(c)))?[e]:[]}else if(e instanceof q){let r=this.findUpstream(e.left,t,n),i=this.findUpstream(e.right,t,n);return[...r,...i]}return[]}collectCTEColumns(e,t){let n=[];if(e.withClause)for(let r of e.withClause.tables){let i=this.collectColumnsFromSelectQuery(r.query);n.push(...i)}return n}collectColumnsFromSelectQuery(e){if(e instanceof b)try{return this.columnCollector.collect(e).map(t=>t.name)}catch(t){return console.warn("Failed to collect columns from SimpleSelectQuery:",t),[]}else if(e instanceof q)return this.collectColumnsFromSelectQuery(e.left);return[]}};var dt=class{static parseFromLexeme(e,t){let n=t;if(n<e.length&&(e[n].type&64||e[n].type&2048)){let r=e[n].value;if(n++,n<e.length&&e[n].type&4){let i=[];for(n++;n<e.length&&e[n].type&64&&(i.push(e[n].value),n++,n<e.length&&e[n].type&16);)n++;if(e[n].type&8)n++;else throw new Error(`Syntax error at position ${n}: Missing closing parenthesis ')' for column alias list. Each opening parenthesis must have a matching closing parenthesis.`);if(i.length===0)throw new Error(`Syntax error at position ${t}: No column aliases found. Column alias declarations must contain at least one column name.`);return{value:new Y(r,i),newIndex:n}}return{value:new Y(r,null),newIndex:n}}throw new Error(`Syntax error at position ${t}: Expected an identifier for table alias but found "${e[t]?.value||"end of input"}".`)}};var Je=class{static parse(e){let n=new N(e).readLexmes(),r=this.parseFromLexeme(n,0);if(r.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[r.newIndex].value}" at position ${r.newIndex}. The source expression is complete but there are additional tokens.`);return r.value}static parseTableSourceFromLexemes(e,t){let n=ct.parseTableSourceFromLexemes(e,t);return{value:new R(n.value,null),newIndex:n.newIndex}}static parseFromLexeme(e,t){let n=t,r=ct.parseFromLexeme(e,n);if(n=r.newIndex,n<e.length){if(e[n].value==="as"){n++;let s=dt.parseFromLexeme(e,n);return n=s.newIndex,{value:new R(r.value,s.value),newIndex:n}}if(n<e.length&&this.isTokenTypeAliasCandidate(e[n].type)){let s=dt.parseFromLexeme(e,n);return n=s.newIndex,{value:new R(r.value,s.value),newIndex:n}}}return{value:new R(r.value,null),newIndex:n}}static isTokenTypeAliasCandidate(e){return(e&64)!==0||(e&2048)!==0}};var ke=class o{static buildBinaryQuery(e,t){if(!e||e.length===0)throw new Error("No queries provided to combine.");if(e.length===1)throw new Error("At least two queries are required to create a BinarySelectQuery.");let n=i=>i instanceof ie?o.buildSimpleQuery(i):i,r=new q(n(e[0]),t,n(e[1]));De.normalize(r);for(let i=2;i<e.length;i++)r.appendSelectQuery(t,n(e[i]));return r}constructor(){}static buildSimpleQuery(e){if(e instanceof b)return e;if(e instanceof q)return o.buildSimpleBinaryQuery(e);if(e instanceof ie)return o.buildSimpleValuesQuery(e);throw new Error("Unsupported query type for buildSimpleQuery")}static buildSimpleBinaryQuery(e){let t=new _(e),n=new R(t,new Y("bq",null)),r=new W(n,null),i=o.createSelectAllClause(),s=new b({selectClause:i,fromClause:r});return De.normalize(s)}static buildSimpleValuesQuery(e){let t=e.tuples.length>0?e.tuples[0].values.length:0;if(e.tuples.length===0)throw new Error("Empty VALUES clause cannot be converted to a SimpleSelectQuery");if(!e.columnAliases)throw new Error("Column aliases are required to convert a VALUES clause to SimpleSelectQuery. Please specify column aliases.");if(e.columnAliases.length!==t)throw new Error(`The number of column aliases (${e.columnAliases.length}) does not match the number of columns in the first tuple (${t}).`);let n=new _(e),r=new R(n,new Y("vq",e.columnAliases)),i=new W(r,null),s=e.columnAliases.map(l=>new J(new S("vq",l),l)),a=new U(s,null);return new b({selectClause:a,fromClause:i})}static createSelectAllClause(){let e=new S(null,"*"),t=new J(e,"*");return new U([t],null)}static buildCreateTableQuery(e,t,n=!1){return new St({tableName:t,isTemporary:n,asSelectQuery:e})}static buildInsertQuery(e,t){let n,r=e.selectClause.items.length;if(n=new Oe().collect(e).map(l=>l.name),!n.length||r!==n.length)throw new Error(`Columns cannot be inferred from the selectQuery. Make sure you are not using wildcards or unnamed columns.
14
14
  Select clause column count: ${r}, Columns with valid names: ${n.length}
15
- Detected column names: [${n.join(", ")}]`);let a=Je.parse(t);return new qe({insertClause:new Ze(a,n),selectQuery:e})}static buildUpdateQuery(e,t,n,r){let i=new Ct(Je.parse(n)),s=Array.isArray(r)?r:[r],l=new Oe().collect(e),c=new ne().collect(e);new wt().execute(e);for(let N of s)if(!l.some(A=>A.name===N))throw new Error(`Primary key column '${N}' is not present in selectQuery select list.`);let h=i.getSourceAliasName();if(!h)throw new Error("Source expression does not have an alias. Please provide an alias for the source expression.");let E=l.filter(N=>!s.includes(N.name)).map(N=>new Xe(N.name,new S(h,N.name))),m=new ze(E),y=new W(e.toSource(t),null),L=null;for(let N of s){let A=new C(new S(h,N),"=",new S(t,N));L=L?new C(L,"and",A):A}let v=new ae(L);return new gt({updateClause:i,setClause:m,fromClause:y,whereClause:v,withClause:c.length>0?new re(!1,c):void 0})}};var He=class{static set(e,t,n){let r=nt.collect(e),i=!1;for(let s of r)s.name.value===t&&(s.value=n,i=!0);if(!i)throw new Error(`Parameter '${t}' not found in query.`)}};var b=class extends f{constructor(t){super();this.cteNameCache=new Set;this.withClause=t.withClause??null,this.selectClause=t.selectClause,this.fromClause=t.fromClause??null,this.whereClause=t.whereClause??null,this.groupByClause=t.groupByClause??null,this.havingClause=t.havingClause??null,this.orderByClause=t.orderByClause??null,this.windowClause=t.windowClause??null,this.limitClause=t.limitClause??null,this.offsetClause=t.offsetClause??null,this.fetchClause=t.fetchClause??null,this.forClause=t.forClause??null,this.initializeCTECache()}static{this.kind=Symbol("SelectQuery")}initializeCTECache(){if(this.cteNameCache.clear(),this.withClause?.tables)for(let t of this.withClause.tables)this.cteNameCache.add(t.aliasExpression.table.name)}toUnion(t){return this.toBinaryQuery("union",t)}toUnionAll(t){return this.toBinaryQuery("union all",t)}toIntersect(t){return this.toBinaryQuery("intersect",t)}toIntersectAll(t){return this.toBinaryQuery("intersect all",t)}toExcept(t){return this.toBinaryQuery("except",t)}toExceptAll(t){return this.toBinaryQuery("except all",t)}toBinaryQuery(t,n){return ke.buildBinaryQuery([this,n],t)}appendWhereRaw(t){let n=k.parse(t);this.appendWhere(n)}appendWhere(t){this.whereClause?this.whereClause.condition=new C(this.whereClause.condition,"and",t):this.whereClause=new ae(t)}appendHavingRaw(t){let n=k.parse(t);this.appendHaving(n)}appendHaving(t){this.havingClause?this.havingClause.condition=new C(this.havingClause.condition,"and",t):this.havingClause=new de(t)}innerJoinRaw(t,n,r,i=null){this.joinSourceRaw("inner join",t,n,r,i)}leftJoinRaw(t,n,r,i=null){this.joinSourceRaw("left join",t,n,r,i)}rightJoinRaw(t,n,r,i=null){this.joinSourceRaw("right join",t,n,r,i)}innerJoin(t,n,r=null){this.joinSource("inner join",t,n,r)}leftJoin(t,n,r=null){this.joinSource("left join",t,n,r)}rightJoin(t,n,r=null){this.joinSource("right join",t,n,r)}joinSourceRaw(t,n,r,i,s=null){let a=ct.parse(n),l=new R(a,new Y(r,null));this.joinSource(t,l,i,s)}joinSource(t,n,r,i=null){if(!this.fromClause)throw new Error("A FROM clause is required to add a JOIN condition.");let s=Array.isArray(r)?r:[r],l=new Te(i).collect(this),u=null,c=0,d=n.getAliasName();if(!d)throw new Error("An alias is required for the source expression to add a JOIN condition.");for(let E of l)if(s.some(m=>m==E.name)){let m=new C(E.value,"=",new S([d],E.name));u?u=new C(u,"and",m):u=m,c++}if(!u||c!==s.length)throw new Error(`Invalid JOIN condition. The specified columns were not found: ${s.join(", ")}`);let h=new he(u),w=new fe(t,n,h,!1);this.fromClause&&(this.fromClause.joins?this.fromClause.joins.push(w):this.fromClause.joins=[w]),De.normalize(this)}toSource(t){if(!t||t.trim()==="")throw new Error("Alias is required for toSource(). Please specify a non-empty alias name.");return new R(new _(this),new Y(t,null))}appendWith(t){let n=Array.isArray(t)?t:[t];this.withClause?this.withClause.tables.push(...n):this.withClause=new re(!1,n),De.normalize(this)}appendWithRaw(t,n){let r=M.parse(t),i=new ee(r,n,null);this.appendWith(i)}overrideSelectItemExpr(t,n){let r=this.selectClause.items.filter(u=>u.identifier?.name===t);if(r.length===0)throw new Error(`Column ${t} not found in the query`);if(r.length>1)throw new Error(`Duplicate column name ${t} found in the query`);let i=r[0],a=new Ge().visit(i.value),l=n(a);i.value=k.parse(l)}appendWhereExpr(t,n,r){if(r&&r.upstream){let s=new mt().find(this,[t]),a=new Te,l=new Ge;for(let u of s){let c=a.collect(u).filter(h=>h.name===t).map(h=>h.value);if(c.length!==1)throw new Error(`Expected exactly one expression for column '${t}'`);let d=l.format(c[0]);u.appendWhereRaw(n(d))}}else{let i=new Te,s=new Ge,a=i.collect(this).filter(u=>u.name===t).map(u=>u.value);if(a.length!==1)throw new Error(`Expected exactly one expression for column '${t}'`);let l=s.format(a[0]);this.appendWhereRaw(n(l))}}setParameter(t,n){return He.set(this,t,n),this}toSimpleQuery(){return this}addCTE(t,n,r){if(!t||t.trim()==="")throw new pt(t,"name cannot be empty or whitespace-only");if(this.hasCTE(t))throw new vt(t);let i=r?.materialized??null,s=new ee(n,t,i);return this.appendWith(s),this.cteNameCache.add(t),this}removeCTE(t){if(!this.hasCTE(t))throw new bt(t);return this.withClause&&(this.withClause.tables=this.withClause.tables.filter(n=>n.aliasExpression.table.name!==t),this.withClause.tables.length===0&&(this.withClause=null)),this.cteNameCache.delete(t),this}hasCTE(t){return this.cteNameCache.has(t)}getCTENames(){return this.withClause?.tables.map(t=>t.aliasExpression.table.name)??[]}replaceCTE(t,n,r){if(!t||t.trim()==="")throw new pt(t,"name cannot be empty or whitespace-only");this.hasCTE(t)&&this.removeCTE(t);let i=r?.materialized??null,s=new ee(n,t,i);return this.appendWith(s),this.cteNameCache.add(t),this}};var q=class o extends f{static{this.kind=Symbol("BinarySelectQuery")}constructor(e,t,n){super(),this.left=e,this.operator=new Q(t),this.right=n}union(e){return this.appendSelectQuery("union",e)}unionAll(e){return this.appendSelectQuery("union all",e)}intersect(e){return this.appendSelectQuery("intersect",e)}intersectAll(e){return this.appendSelectQuery("intersect all",e)}except(e){return this.appendSelectQuery("except",e)}exceptAll(e){return this.appendSelectQuery("except all",e)}appendSelectQuery(e,t){return this.left=new o(this.left,this.operator.value,this.right),this.operator=new Q(e),this.right=t,De.normalize(this),this}unionRaw(e){let t=M.parse(e);return this.union(t)}unionAllRaw(e){let t=M.parse(e);return this.unionAll(t)}intersectRaw(e){let t=M.parse(e);return this.intersect(t)}intersectAllRaw(e){let t=M.parse(e);return this.intersectAll(t)}exceptRaw(e){let t=M.parse(e);return this.except(t)}exceptAllRaw(e){let t=M.parse(e);return this.exceptAll(t)}toSource(e="subq"){return new R(new _(this),new Y(e,null))}setParameter(e,t){return He.set(this,e,t),this}toSimpleQuery(){return ke.buildSimpleQuery(this)}};var ie=class extends f{static{this.kind=Symbol("ValuesQuery")}constructor(e,t=null){super(),this.tuples=e,this.columnAliases=t}toSimpleQuery(){return ke.buildSimpleQuery(this)}setParameter(e,t){return He.set(this,e,t),this}};var En=class{static parse(e){let n=new P(e).readLexmes(),r=this.parseFromLexeme(n,0);if(r.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[r.newIndex].value}" at position ${r.newIndex}. The SELECT clause is complete but there are additional tokens.`);return r.value}static parseFromLexeme(e,t){let n=t,r=null,i=n<e.length?e[n].comments:null;if(e[n].value!=="select")throw new Error(`Syntax error at position ${n}: Expected 'SELECT' keyword but found "${e[n].value}". SELECT clauses must start with the SELECT keyword.`);n++;let s=[];for(;n<e.length&&tt.isHintClause(e[n].value);){let u=tt.extractHintContent(e[n].value);s.push(new tt(u)),n++}if(n<e.length&&e[n].value==="distinct")n++,r=new ht;else if(n<e.length&&e[n].value==="distinct on"){n++;let u=k.parseArgument(4,8,e,n);r=new ft(u.value),n=u.newIndex}let a=[],l=xn.parseItem(e,n);for(a.push(l.value),n=l.newIndex;n<e.length&&e[n].type&16;){n++;let u=xn.parseItem(e,n);a.push(u.value),n=u.newIndex}if(a.length===0)throw new Error(`Syntax error at position ${t}: No select items found. The SELECT clause requires at least one expression to select.`);{let u=new U(a,r,s);return u.comments=i,{value:u,newIndex:n}}}},xn=class{static parse(e){let n=new P(e).readLexmes(),r=this.parseItem(n,0);if(r.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[r.newIndex].value}" at position ${r.newIndex}. The select item is complete but there are additional tokens.`);return r.value}static parseItem(e,t){let n=t,r=k.parseFromLexeme(e,n),i=r.value;if(n=r.newIndex,n<e.length&&e[n].value==="as"&&n++,n<e.length&&e[n].type&64){let s=e[n].value;return n++,{value:new J(i,s),newIndex:n}}else if(i instanceof S&&i.column.name!=="*")return{value:new J(i,i.column.name),newIndex:n};return{value:new J(i),newIndex:n}}};var Tn=class{static tryParse(e,t){let n=t;if(n<e.length&&e[n].value==="on"){n++;let r=k.parseFromLexeme(e,n);return n=r.newIndex,{value:new he(r.value),newIndex:n}}return null}};var kn=class{static tryParse(e,t){let n=t;if(n<e.length&&e[n].value==="using"){n++;let r=k.parseArgument(4,8,e,n),i=r.value;return n=r.newIndex,{value:new Ne(i),newIndex:n}}return null}};var In=class{static tryParse(e,t){let n=t,r=[];for(;this.isJoinCommand(e,n);){let i=this.parseJoinClause(e,n);r.push(i.value),n=i.newIndex}return r.length>0?{value:r,newIndex:n}:null}static isJoinKeyword(e){return!!zn.parse(e,0)}static parseLateral(e,t){let n=t;return n<e.length&&e[n].value==="lateral"?(n++,{value:!0,newIndex:n}):{value:!1,newIndex:n}}static isJoinCommand(e,t){return t>=e.length?!1:!!(e[t].type&16||this.isJoinKeyword(e[t].value)===!0)}static parseJoinClause(e,t){let n=t,r=e[n].value===","?"cross join":e[n].value;n++;let i=this.parseLateral(e,n),s=i.value;n=i.newIndex;let a=Je.parseFromLexeme(e,n);if(n=a.newIndex,n<e.length){let u=Tn.tryParse(e,n);if(u)return{value:new fe(r,a.value,u.value,s),newIndex:u.newIndex};let c=kn.tryParse(e,n);if(c)return{value:new fe(r,a.value,c.value,s),newIndex:c.newIndex}}return{value:new fe(r,a.value,null,s),newIndex:n}}};var Et=class{static collectClauseComments(e,t,n){if(t>=e.length||e[t].value.toLowerCase()!==n.toLowerCase())return null;let r=[];e[t].comments&&r.push(...e[t].comments);let i=t-1;for(;i>=0;){let s=e[i];if(s.comments&&s.comments.length>0){let a=s.comments.filter(l=>{let u=l.toLowerCase();return u.includes(n.toLowerCase())||u.includes("\u306E")||u.includes("\u30B3\u30E1\u30F3\u30C8")});a.length>0&&(r.unshift(...a),s.comments=s.comments.filter(l=>!a.includes(l)),s.comments.length===0&&(s.comments=null));break}if(this.isSignificantSqlKeyword(s.value))break;i--}return r.length>0?r:null}static isSignificantSqlKeyword(e){return new Set(["select","from","where","group by","having","order by","limit","offset"]).has(e.toLowerCase())}};var Nn=class{static parse(e){let n=new P(e).readLexmes(),r=this.parseFromLexeme(n,0);if(r.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[r.newIndex].value}" at position ${r.newIndex}. The FROM clause is complete but there are additional tokens.`);return r.value}static parseFromLexeme(e,t){let n=t,r=Et.collectClauseComments(e,n,"from");if(e[n].value!=="from")throw new Error(`Syntax error at position ${n}: Expected 'FROM' keyword but found "${e[n].value}". FROM clauses must start with the FROM keyword.`);if(n++,n>=e.length)throw new Error("Syntax error: Unexpected end of input after 'FROM' keyword. The FROM clause requires a table reference.");let i=Je.parseFromLexeme(e,n);n=i.newIndex;let s=In.tryParse(e,n);if(n=s?.newIndex||n,s!==null){let a=new W(i.value,s.value);return a.comments=r,{value:a,newIndex:n}}else{let a=new W(i.value,null);return a.comments=r,{value:a,newIndex:n}}}};var Pn=class{static parse(e){let n=new P(e).readLexmes(),r=this.parseFromLexeme(n,0);if(r.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[r.newIndex].value}" at position ${r.newIndex}. The WHERE clause is complete but there are additional tokens.`);return r.value}static parseFromLexeme(e,t){let n=t,r=Et.collectClauseComments(e,n,"where");if(e[n].value!=="where")throw new Error(`Syntax error at position ${n}: Expected 'WHERE' keyword but found "${e[n].value}". WHERE clauses must start with the WHERE keyword.`);if(n++,n>=e.length)throw new Error("Syntax error: Unexpected end of input after 'WHERE' keyword. The WHERE clause requires a condition expression.");let i=k.parseFromLexeme(e,n),s=new ae(i.value);return s.comments=r,{value:s,newIndex:i.newIndex}}};var On=class{static parse(e){let n=new P(e).readLexmes(),r=this.parseFromLexeme(n,0);if(r.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[r.newIndex].value}" at position ${r.newIndex}. The GROUP BY clause is complete but there are additional tokens.`);return r.value}static parseFromLexeme(e,t){let n=t;if(e[n].value!=="group by")throw new Error(`Syntax error at position ${n}: Expected 'GROUP BY' keyword but found "${e[n].value}". GROUP BY clauses must start with the GROUP BY keywords.`);if(n++,n>=e.length)throw new Error("Syntax error: Unexpected end of input after 'GROUP BY' keyword. The GROUP BY clause requires at least one expression to group by.");let r=[],i=this.parseItem(e,n);for(r.push(i.value),n=i.newIndex;n<e.length&&e[n].type&16;){n++;let s=this.parseItem(e,n);r.push(s.value),n=s.newIndex}if(r.length===0)throw new Error(`Syntax error at position ${t}: No grouping expressions found. The GROUP BY clause requires at least one expression to group by.`);return{value:new me(r),newIndex:n}}static parseItem(e,t){let n=t,r=k.parseFromLexeme(e,n),i=r.value;return n=r.newIndex,{value:i,newIndex:n}}};var Fn=class{static parse(e){let n=new P(e).readLexmes(),r=this.parseFromLexeme(n,0);if(r.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[r.newIndex].value}" at position ${r.newIndex}. The HAVING clause is complete but there are additional tokens.`);return r.value}static parseFromLexeme(e,t){let n=t;if(e[n].value!=="having")throw new Error(`Syntax error at position ${n}: Expected 'HAVING' keyword but found "${e[n].value}". HAVING clauses must start with the HAVING keyword.`);if(n++,n>=e.length)throw new Error("Syntax error: Unexpected end of input after 'HAVING' keyword. The HAVING clause requires a condition expression.");let r=k.parseFromLexeme(e,n);return{value:new de(r.value),newIndex:r.newIndex}}};var Ln=class{static parse(e){let n=new P(e).readLexmes(),r=this.parseFromLexeme(n,0);if(r.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[r.newIndex].value}" at position ${r.newIndex}. The WINDOW clause is complete but there are additional tokens.`);return r.value}static parseFromLexeme(e,t){let n=t;if(e[n].value!=="window")throw new Error(`Syntax error at position ${n}: Expected 'WINDOW' keyword but found "${e[n].value}". WINDOW clauses must start with the WINDOW keyword.`);if(n++,n>=e.length)throw new Error("Syntax error: Unexpected end of input after 'WINDOW' keyword. The WINDOW clause requires at least one window definition.");let r=[];for(;n<e.length;){if(n>=e.length||e[n].type!==64)throw new Error("Syntax error: Expected window name after 'WINDOW' keyword.");let i=e[n].value;if(n++,n>=e.length||e[n].value!=="as")throw new Error(`Syntax error at position ${n}: Expected 'AS' keyword after window name.`);n++;let s=yt.parseFromLexeme(e,n);if(n=s.newIndex,r.push(new xe(i,s.value)),n<e.length&&e[n].type&16)n++;else break}if(r.length===0)throw new Error("At least one WINDOW clause is required after WINDOW keyword.");return{value:new Ye(r),newIndex:n}}};var An=class{static parse(e){let n=new P(e).readLexmes(),r=this.parseFromLexeme(n,0);if(r.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[r.newIndex].value}" at position ${r.newIndex}. The LIMIT clause is complete but there are additional tokens.`);return r.value}static parseFromLexeme(e,t){let n=t;if(e[n].value!=="limit")throw new Error(`Syntax error at position ${n}: Expected 'LIMIT' keyword but found "${e[n].value}". LIMIT clauses must start with the LIMIT keyword.`);if(n++,n>=e.length)throw new Error("Syntax error: Unexpected end of input after 'LIMIT' keyword. The LIMIT clause requires a numeric expression.");let r=k.parseFromLexeme(e,n);return n=r.newIndex,{value:new le(r.value),newIndex:n}}};var Qn=class{static parse(e){let n=new P(e).readLexmes(),r=this.parseFromLexeme(n,0);if(r.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[r.newIndex].value}" at position ${r.newIndex}. The FOR clause is complete but there are additional tokens.`);return r.value}static parseFromLexeme(e,t){let n=t;if(e[n].value.toLowerCase()!=="for")throw new Error(`Syntax error at position ${n}: Expected 'FOR' keyword but found "${e[n].value}". FOR clauses must start with the FOR keyword.`);if(n++,n>=e.length)throw new Error("Syntax error: Unexpected end of input after 'FOR' keyword. The FOR clause requires a lock mode specification.");let r=e[n].value,i;switch(r){case"update":i="update",n++;break;case"share":i="share",n++;break;case"key share":i="key share",n++;break;case"no key update":i="no key update",n++;break;default:throw new Error(`Syntax error at position ${n}: Invalid lock mode "${r}". Valid lock modes are: UPDATE, SHARE, KEY SHARE, NO KEY UPDATE.`)}return{value:new Be(i),newIndex:n}}};var Bt=class{static parse(e){let n=new P(e).readLexmes(),r=this.parseFromLexeme(n,0);if(r.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[r.newIndex].value}" at position ${r.newIndex}. The CommonTable definition is complete but there are additional tokens.`);return r.value}static parseFromLexeme(e,t){let n=t,r=n<e.length?e[n].comments:null,i=dt.parseFromLexeme(e,n);if(n=i.newIndex,n<e.length&&e[n].value!=="as")throw new Error(`Syntax error at position ${n}: Expected 'AS' keyword after CTE name but found "${e[n].value}".`);n++;let s=null;if(n<e.length){let c=e[n].value;c==="materialized"?(s=!0,n++):c==="not materialized"&&(s=!1,n++)}if(n<e.length&&e[n].type!==4)throw new Error(`Syntax error at position ${n}: Expected '(' after CTE name but found "${e[n].value}".`);let a=e[n].comments;n++;let l=M.parseFromLexeme(e,n);if(n=l.newIndex,a&&a.length>0&&(l.value.comments?l.value.comments=[...a,...l.value.comments]:l.value.comments=a),n<e.length&&e[n].type!==8)throw new Error(`Syntax error at position ${n}: Expected ')' after CTE query but found "${e[n].value}".`);n++;let u=new ee(l.value,i.value,s);return u.comments=r,{value:u,newIndex:n}}};var xt=class{static parse(e){let n=new P(e).readLexmes(),r=this.parseFromLexeme(n,0);if(r.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[r.newIndex].value}" at position ${r.newIndex}. The WITH clause is complete but there are additional tokens.`);return r.value}static parseFromLexeme(e,t){let n=t,r=n<e.length?e[n].comments:null;if(n<e.length&&e[n].value.toLowerCase()==="with")n++;else throw new Error(`Syntax error at position ${n}: Expected WITH keyword.`);let i=n<e.length&&e[n].value.toLowerCase()==="recursive";i&&n++;let s=[],a=Bt.parseFromLexeme(e,n);for(s.push(a.value),n=a.newIndex;n<e.length&&e[n].type&16;){n++;let u=Bt.parseFromLexeme(e,n);s.push(u.value),n=u.newIndex}let l=new re(i,s);return l.comments=r,{value:l,newIndex:n}}};var Bn=class{static parse(e){let n=new P(e).readLexmes(),r=this.parseFromLexeme(n,0);if(r.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[r.newIndex].value}" at position ${r.newIndex}. The VALUES clause is complete but there are additional tokens.`);return r.value}static parseFromLexeme(e,t){let n=t;if(e[n].value.toLowerCase()!=="values")throw new Error(`Syntax error at position ${n}: Expected 'VALUES' keyword but found "${e[n].value}". VALUES clauses must start with the VALUES keyword.`);if(n++,n>=e.length)throw new Error("Syntax error: Unexpected end of input after 'VALUES' keyword. The VALUES clause requires at least one tuple expression.");let r=[],i=this.parseTuple(e,n);for(r.push(i.value),n=i.newIndex;n<e.length&&e[n].type&16;){n++;let a=this.parseTuple(e,n);r.push(a.value),n=a.newIndex}return{value:new ie(r),newIndex:n}}static parseTuple(e,t){let n=t;if(n>=e.length||e[n].type!==4)throw new Error(`Syntax error at position ${n}: Expected opening parenthesis but found "${n<e.length?e[n].value:"end of input"}". Tuple expressions in VALUES clause must be enclosed in parentheses.`);n++;let r=[];if(n>=e.length)throw new Error("Syntax error: Unexpected end of input after opening parenthesis in tuple expression.");if(e[n].type&8)return n++,{value:new Ee([]),newIndex:n};let i=k.parseFromLexeme(e,n);for(r.push(i.value),n=i.newIndex;n<e.length&&e[n].type&16;){if(n++,n>=e.length)throw new Error("Syntax error: Unexpected end of input after comma in tuple expression.");let s=k.parseFromLexeme(e,n);r.push(s.value),n=s.newIndex}if(n>=e.length||e[n].type!==8)throw new Error(`Syntax error at position ${n}: Expected closing parenthesis but found "${n<e.length?e[n].value:"end of input"}". Tuple expressions in VALUES clause must be enclosed in parentheses.`);return n++,{value:new Ee(r),newIndex:n}}};var Vn=class{static parseFromLexeme(e,t){let n=t;if(e[n].value!=="fetch")throw new Error(`Syntax error at position ${n}: Expected 'FETCH' keyword but found "${e[n].value}".`);if(n++,n>=e.length)throw new Error("Syntax error: Unexpected end of input after 'FETCH' keyword.");let r=Xn.parseFromLexeme(e,n),i=r.value;return n=r.newIndex,{value:new _e(i),newIndex:n}}},Xn=class{static parseFromLexeme(e,t){let n=t,r,i=e[n].value;if(i==="first")r="first";else if(i==="next")r="next";else throw new Error(`Syntax error at position ${n}: Expected 'FIRST' or 'NEXT' after 'FETCH' but found "${e[n].value}".`);if(n++,n>=e.length)throw new Error("Syntax error: Unexpected end of input after 'FETCH FIRST|NEXT'.");let s=null,a=null;if(e[n].value==="row only"||e[n].value==="rows only")return s=new z(1),a="rows only",n++,{value:new at(r,s,a),newIndex:n};let l=k.parseFromLexeme(e,n);if(s=l.value,n=l.newIndex,n>=e.length)throw new Error("Syntax error: Unexpected end of input after 'FETCH FIRST|NEXT <count>'.");if(e[n].value==="rows only"?(a="rows only",n++):e[n].value==="percent"?(a="percent",n++):e[n].value==="percent with ties"&&(a="percent with ties",n++),!a)throw new Error("Syntax error: Expected 'ROWS ONLY', 'PERCENT', or 'PERCENT WITH TIES' after 'FETCH FIRST|NEXT <count>'.");return{value:new at(r,s,a),newIndex:n}}};var Rn=class{static parse(e){let n=new P(e).readLexmes(),r=this.parseFromLexeme(n,0);if(r.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[r.newIndex].value}" at position ${r.newIndex}. The OFFSET clause is complete but there are additional tokens.`);return r.value}static parseFromLexeme(e,t){let n=t;if(e[n].value!=="offset")throw new Error(`Syntax error at position ${n}: Expected 'OFFSET' keyword but found "${e[n].value}". OFFSET clauses must start with the OFFSET keyword.`);if(n++,n>=e.length)throw new Error("Syntax error: Unexpected end of input after 'OFFSET' keyword. The OFFSET clause requires a numeric expression.");let r=k.parseFromLexeme(e,n);return n=r.newIndex,n<e.length&&(e[n].value==="row"||e[n].value==="rows")&&n++,{value:new $e(r.value),newIndex:n}}};var M=class{static parse(e){let n=new P(e).readLexmes(),r=this.parseFromLexeme(n,0);if(r.newIndex<n.length)throw new Error(`[SelectQueryParser] Syntax error: Unexpected token "${n[r.newIndex].value}" at position ${r.newIndex}. The SELECT query is complete but there are additional tokens.`);return r.value}static async parseAsync(e){return Promise.resolve(this.parse(e))}static{this.unionCommandSet=new Set(["union","union all","intersect","intersect all","except","except all"])}static{this.selectCommandSet=new Set(["with","select"])}static parseFromLexeme(e,t){let n=t;if(n>=e.length)throw new Error(`Syntax error: Unexpected end of input at position ${t}.`);let r=e[n].value;if(!this.selectCommandSet.has(r)&&r!=="values")throw new Error(`Syntax error at position ${n}: Expected 'SELECT' or 'VALUES' keyword but found "${e[n].value}".`);let i=this.selectCommandSet.has(r)?this.parseSimpleSelectQuery(e,n):this.parseValuesQuery(e,n),s=i.value;for(n=i.newIndex;n<e.length&&this.unionCommandSet.has(e[n].value.toLowerCase());){let a=e[n].value.toLowerCase();if(n++,n>=e.length)throw new Error(`Syntax error at position ${n}: Expected a query after '${a.toUpperCase()}' but found end of input.`);let l=e[n].value.toLowerCase();if(this.selectCommandSet.has(l)){let u=this.parseSimpleSelectQuery(e,n);s=new q(s,a,u.value),n=u.newIndex}else if(l==="values"){let u=this.parseValuesQuery(e,n);s=new q(s,a,u.value),n=u.newIndex}else throw new Error(`Syntax error at position ${n}: Expected 'SELECT' or 'VALUES' after '${a.toUpperCase()}' but found "${e[n].value}".`)}return{value:s,newIndex:n}}static parseSimpleSelectQuery(e,t){let n=t,r=null,i=n<e.length?e[n].comments:null;if(n<e.length&&e[n].value==="with"&&(r=xt.parseFromLexeme(e,n),n=r.newIndex),n>=e.length||e[n].value!=="select")throw new Error(`Syntax error at position ${n}: Expected 'SELECT' keyword but found "${n<e.length?e[n].value:"end of input"}". SELECT queries must start with the SELECT keyword.`);let s=En.parseFromLexeme(e,n);n=s.newIndex,i&&s.value.comments&&JSON.stringify(i)===JSON.stringify(s.value.comments)&&(s.value.comments=null);let a=null;n<e.length&&e[n].value==="from"&&(a=Nn.parseFromLexeme(e,n),n=a.newIndex);let l=null;n<e.length&&e[n].value==="where"&&(l=Pn.parseFromLexeme(e,n),n=l.newIndex);let u=null;n<e.length&&e[n].value==="group by"&&(u=On.parseFromLexeme(e,n),n=u.newIndex);let c=null;n<e.length&&e[n].value==="having"&&(c=Fn.parseFromLexeme(e,n),n=c.newIndex);let d=null;n<e.length&&e[n].value==="window"&&(d=Ln.parseFromLexeme(e,n),n=d.newIndex);let h=null;n<e.length&&e[n].value==="order by"&&(h=et.parseFromLexeme(e,n),n=h.newIndex);let w=null;n<e.length&&e[n].value==="limit"&&(w=An.parseFromLexeme(e,n),n=w.newIndex);let E=null;n<e.length&&e[n].value==="offset"&&(E=Rn.parseFromLexeme(e,n),n=E.newIndex);let m=null;n<e.length&&e[n].value==="fetch"&&(m=Vn.parseFromLexeme(e,n),n=m.newIndex);let y=null;n<e.length&&e[n].value.toLowerCase()==="for"&&(y=Qn.parseFromLexeme(e,n),n=y.newIndex);let L=new b({withClause:r?r.value:null,selectClause:s.value,fromClause:a?a.value:null,whereClause:l?l.value:null,groupByClause:u?u.value:null,havingClause:c?c.value:null,orderByClause:h?h.value:null,windowClause:d?d.value:null,limitClause:w?w.value:null,offsetClause:E?E.value:null,fetchClause:m?m.value:null,forClause:y?y.value:null});return L.comments=i,{value:L,newIndex:n}}static parseValuesQuery(e,t){let n=Bn.parseFromLexeme(e,t);return{value:n.value,newIndex:n.newIndex}}};var Zn=class{static parse(e){let n=new P(e).readLexmes(),r=this.parseFromLexeme(n,0);if(r.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[r.newIndex].value}" at position ${r.newIndex}. The INSERT query is complete but there are additional tokens.`);return r.value}static parseFromLexeme(e,t){let n=t,r=null;if(e[n].value==="with"){let l=xt.parseFromLexeme(e,n);r=l.value,n=l.newIndex}if(e[n].value!=="insert into")throw new Error(`Syntax error at position ${n}: Expected 'INSERT INTO' but found '${e[n].value}'.`);n++;let i=Je.parseTableSourceFromLexemes(e,n);n=i.newIndex;let s=[];if(e[n]?.type===4){for(n++;n<e.length&&e[n].type===64&&(s.push(e[n].value),n++,e[n]?.type===16);)n++;if(e[n]?.type!==8)throw new Error(`Syntax error at position ${n}: Expected ')' after column list.`);n++}let a=M.parseFromLexeme(e,n);if(r)if(a.value instanceof b)a.value.withClause=r;else throw new Error("WITH clause is not supported in this context.");return n=a.newIndex,{value:new qe({insertClause:new Ze(i.value,s),selectQuery:a.value}),newIndex:n}}};var $n=class o{constructor(){this.jsonColumnCounter=0;this.entityToJsonColumnMap=new Map;this.columnMappings=[]}static{this.CTE_OBJECT_PREFIX="cte_object_depth_"}static{this.WILDCARD_COLUMN="*"}buildObjectEntityCtes(e,t,n){this.jsonColumnCounter=0,this.entityToJsonColumnMap.clear(),this.columnMappings=[];let r=[e],i=e.aliasExpression.table.name,s=this.collectAndSortObjectEntities(n,t),a=this.groupEntitiesByDepth(s),l=Array.from(a.keys()).sort((u,c)=>c-u);for(let u of l){let c=a.get(u),d=`${o.CTE_OBJECT_PREFIX}${u}`,h=this.buildDepthCte(c,i,d,n,t);r.push(h),i=d}return{ctes:r,lastCteAlias:i,columnMappings:this.columnMappings}}generateUniqueJsonColumnName(e,t,n){this.jsonColumnCounter++;let r=`${e.toLowerCase()}_json_${this.jsonColumnCounter}`;return this.columnMappings.push({entityId:t,entityName:e,generatedColumnName:r,depth:n}),r}collectAndSortObjectEntities(e,t){let n=[],r=i=>{let s=t.get(i);if(!s)throw new Error(`Entity ${i} not found for depth calculation.`);if(s.isRoot)return 0;if(!s.parentId)return 1;let a=s.parentId,l=0,u=new Set;for(u.add(i);a;){if(u.has(a))throw new Error(`Circular dependency detected: ${a} already visited in path for ${i}`);u.add(a);let c=t.get(a);if(!c)throw new Error(`Parent entity ${a} not found during depth calculation for ${i}`);let d=!1;if(c.isRoot)d=!0;else{let h=e.nestedEntities.find(w=>w.id===a);if(h)h.relationshipType==="object"&&(d=!0);else throw new Error(`Parent entity ${a} (ancestor of ${i}) has no definition in mapping.nestedEntities and is not root.`)}if(d&&l++,c.isRoot)break;a=c.parentId}return l};return e.nestedEntities.forEach(i=>{if(i.relationshipType==="object"){let s=t.get(i.id);s&&!s.isRoot&&n.push({entity:s,depth:r(i.id)})}}),n}groupEntitiesByDepth(e){let t=new Map;return e.forEach(n=>{let r=n.depth;t.has(r)||t.set(r,[]),t.get(r).push(n)}),t}buildDepthCte(e,t,n,r,i){let s=[new J(new S(null,new x(o.WILDCARD_COLUMN)))];for(let{entity:l}of e){let u=this.buildEntityJsonColumn(l,r,i);s.push(u)}let a=new b({selectClause:new U(s),fromClause:new W(new R(new B(null,new x(t)),null),null)});return new ee(a,new Y(n,null),null)}buildEntityJsonColumn(e,t,n){let{jsonObjectArgs:r,nullChecks:i}=this.prepareEntityColumns(e);this.addChildObjectRelationships(e,r,t,n);let s=this.createJsonObject(r),a=this.buildNullCondition(i),l=this.createCaseExpression(a,s),u=this.calculateApproximateDepth(e,t),c=this.generateUniqueJsonColumnName(e.name,e.id,u);return this.entityToJsonColumnMap.set(e.id,c),new J(l,c)}calculateApproximateDepth(e,t){if(e.isRoot)return 0;if(!e.parentId)return 1;let n=1,r=e.parentId;for(;r&&r!==t.rootEntity.id;){let i=t.nestedEntities.find(s=>s.id===r);if(!i)break;n++,r=i.parentId}return n}prepareEntityColumns(e){let t=[],n=[];return Object.entries(e.columns).forEach(([r,i])=>{t.push(new z(r)),t.push(new S(null,new x(i))),n.push(new C(new S(null,new x(i)),"is",new z(null)))}),{jsonObjectArgs:t,nullChecks:n}}addChildObjectRelationships(e,t,n,r){n.nestedEntities.filter(s=>s.parentId===e.id&&s.relationshipType==="object").forEach(s=>{let a=r.get(s.id);if(a){t.push(new z(s.propertyName));let l=this.entityToJsonColumnMap.get(a.id);if(!l)throw new Error(`JSON column name not found for child entity: ${a.id}`);t.push(new S(null,new x(l)))}})}createJsonObject(e){let t="jsonb_build_object";return new j(null,new Q(t),new H(e),null)}buildNullCondition(e){return e.reduce((t,n)=>t?new C(t,"and",n):n)}createCaseExpression(e,t){return new oe(null,new ye([new we(e,new z(null))],t))}};var Mn=class o{static{this.CTE_ARRAY_PREFIX="cte_array_depth_"}static{this.JSON_FUNCTIONS={BUILD_OBJECT:"jsonb_build_object",AGGREGATE:"jsonb_agg"}}buildArrayEntityCtes(e,t,n,r,i){let s=[...e],a=t,l=this.collectAndSortArrayEntities(r,n);if(l.length===0)return{updatedCtes:s,lastCteAlias:a};let u=this.groupEntitiesByDepth(l),c=Array.from(u.keys()).sort((d,h)=>h-d);for(let d of c){let h=u.get(d),{cte:w,newCteAlias:E}=this.buildDepthCte(h,a,s,d,r,i);s.push(w),a=E}return{updatedCtes:s,lastCteAlias:a}}collectAndSortArrayEntities(e,t){let n=[],r=i=>{let s=t.get(i);return!s||s.isRoot?0:s.parentId?1+r(s.parentId):1};return e.nestedEntities.forEach(i=>{if(i.relationshipType==="array"){let s=t.get(i.id),a=t.get(i.parentId);if(!s||!a)throw new Error(`Configuration error: Array entity '${i.id}' or its parent '${i.parentId}' not found.`);let l=Object.values(a.columns);if(l.length===0)throw new Error(`Configuration error: Parent entity '${a.name}' (ID: ${a.id}) must have at least one column defined to serve as a linking key for child array '${i.name}'.`);let u=l[0];n.push({entity:s,parentEntity:a,parentIdColumnSqlName:u,depth:r(i.id)})}}),n.sort((i,s)=>s.depth-i.depth),n}groupEntitiesByDepth(e){let t=new Map;return e.forEach(n=>{let r=n.depth;t.has(r)||t.set(r,[]),t.get(r).push(n)}),t}buildDepthCte(e,t,n,r,i,s){let a=new Set;e.forEach(v=>{Object.values(v.entity.columns).forEach(N=>a.add(N));let O=N=>{i.nestedEntities.filter(A=>A.parentId===N).forEach(A=>{Object.values(A.columns).forEach(g=>{let I=typeof g=="string"?g:g.column;a.add(I)}),O(A.id)})};O(v.entity.id)});let l=n.find(v=>v.aliasExpression.table.name===t)?.query;if(!l)throw new Error(`CTE not found: ${t}`);let u=new Oe(null,n).collect(l),c=[],d=[],h=new Set;e.forEach(v=>{Object.values(v.entity.columns).forEach(O=>h.add(O))});let w=this.collectArrayEntityColumnsByDepth(i,r),E=new Set;s&&e.forEach(v=>{i.nestedEntities.filter(O=>O.parentId===v.entity.id&&O.relationshipType==="object").forEach(O=>{let N=s.find(A=>A.entityId===O.id);N&&E.add(N.generatedColumnName)})}),this.processSelectVariablesForGroupBy(u,a,w,r,d,c,E);for(let v of e){let O=this.buildAggregationDetailsForArrayEntity(v.entity,i.nestedEntities,new Map,s);d.push(new J(O.jsonAgg,v.entity.propertyName))}let m=`${o.CTE_ARRAY_PREFIX}${r}`,y=new b({selectClause:new U(d),fromClause:new W(new R(new B(null,new x(t)),null),null),groupByClause:c.length>0?new me(c):null});return{cte:new ee(y,new Y(m,null),null),newCteAlias:m}}buildAggregationDetailsForArrayEntity(e,t,n,r){let i=o.JSON_FUNCTIONS.BUILD_OBJECT,s=[];Object.entries(e.columns).forEach(([h,w])=>{s.push(new z(h)),s.push(new S(null,new x(w)))}),t.filter(h=>h.parentId===e.id).forEach(h=>{let w=h.originalPropertyName||h.propertyName;if(s.push(new z(w)),h.relationshipType==="object"){if(!r)throw new Error(`\u274C PostgresArrayEntityCteBuilder Error: Column mappings not provided
15
+ Detected column names: [${n.join(", ")}]`);let a=Je.parse(t);return new qe({insertClause:new Ze(a,n),selectQuery:e})}static buildUpdateQuery(e,t,n,r){let i=new Ct(Je.parse(n)),s=Array.isArray(r)?r:[r],l=new Oe().collect(e),c=new ne().collect(e);new wt().execute(e);for(let P of s)if(!l.some(A=>A.name===P))throw new Error(`Primary key column '${P}' is not present in selectQuery select list.`);let h=i.getSourceAliasName();if(!h)throw new Error("Source expression does not have an alias. Please provide an alias for the source expression.");let E=l.filter(P=>!s.includes(P.name)).map(P=>new Xe(P.name,new S(h,P.name))),m=new ze(E),y=new W(e.toSource(t),null),L=null;for(let P of s){let A=new C(new S(h,P),"=",new S(t,P));L=L?new C(L,"and",A):A}let v=new ae(L);return new gt({updateClause:i,setClause:m,fromClause:y,whereClause:v,withClause:c.length>0?new re(!1,c):void 0})}};var He=class{static set(e,t,n){let r=nt.collect(e),i=!1;for(let s of r)s.name.value===t&&(s.value=n,i=!0);if(!i)throw new Error(`Parameter '${t}' not found in query.`)}};var b=class extends f{constructor(t){super();this.cteNameCache=new Set;this.withClause=t.withClause??null,this.selectClause=t.selectClause,this.fromClause=t.fromClause??null,this.whereClause=t.whereClause??null,this.groupByClause=t.groupByClause??null,this.havingClause=t.havingClause??null,this.orderByClause=t.orderByClause??null,this.windowClause=t.windowClause??null,this.limitClause=t.limitClause??null,this.offsetClause=t.offsetClause??null,this.fetchClause=t.fetchClause??null,this.forClause=t.forClause??null,this.initializeCTECache()}static{this.kind=Symbol("SelectQuery")}initializeCTECache(){if(this.cteNameCache.clear(),this.withClause?.tables)for(let t of this.withClause.tables)this.cteNameCache.add(t.aliasExpression.table.name)}toUnion(t){return this.toBinaryQuery("union",t)}toUnionAll(t){return this.toBinaryQuery("union all",t)}toIntersect(t){return this.toBinaryQuery("intersect",t)}toIntersectAll(t){return this.toBinaryQuery("intersect all",t)}toExcept(t){return this.toBinaryQuery("except",t)}toExceptAll(t){return this.toBinaryQuery("except all",t)}toBinaryQuery(t,n){return ke.buildBinaryQuery([this,n],t)}appendWhereRaw(t){let n=k.parse(t);this.appendWhere(n)}appendWhere(t){this.whereClause?this.whereClause.condition=new C(this.whereClause.condition,"and",t):this.whereClause=new ae(t)}appendHavingRaw(t){let n=k.parse(t);this.appendHaving(n)}appendHaving(t){this.havingClause?this.havingClause.condition=new C(this.havingClause.condition,"and",t):this.havingClause=new de(t)}innerJoinRaw(t,n,r,i=null){this.joinSourceRaw("inner join",t,n,r,i)}leftJoinRaw(t,n,r,i=null){this.joinSourceRaw("left join",t,n,r,i)}rightJoinRaw(t,n,r,i=null){this.joinSourceRaw("right join",t,n,r,i)}innerJoin(t,n,r=null){this.joinSource("inner join",t,n,r)}leftJoin(t,n,r=null){this.joinSource("left join",t,n,r)}rightJoin(t,n,r=null){this.joinSource("right join",t,n,r)}joinSourceRaw(t,n,r,i,s=null){let a=ct.parse(n),l=new R(a,new Y(r,null));this.joinSource(t,l,i,s)}joinSource(t,n,r,i=null){if(!this.fromClause)throw new Error("A FROM clause is required to add a JOIN condition.");let s=Array.isArray(r)?r:[r],l=new Te(i).collect(this),u=null,c=0,d=n.getAliasName();if(!d)throw new Error("An alias is required for the source expression to add a JOIN condition.");for(let E of l)if(s.some(m=>m==E.name)){let m=new C(E.value,"=",new S([d],E.name));u?u=new C(u,"and",m):u=m,c++}if(!u||c!==s.length)throw new Error(`Invalid JOIN condition. The specified columns were not found: ${s.join(", ")}`);let h=new he(u),w=new fe(t,n,h,!1);this.fromClause&&(this.fromClause.joins?this.fromClause.joins.push(w):this.fromClause.joins=[w]),De.normalize(this)}toSource(t){if(!t||t.trim()==="")throw new Error("Alias is required for toSource(). Please specify a non-empty alias name.");return new R(new _(this),new Y(t,null))}appendWith(t){let n=Array.isArray(t)?t:[t];this.withClause?this.withClause.tables.push(...n):this.withClause=new re(!1,n),De.normalize(this)}appendWithRaw(t,n){let r=M.parse(t),i=new ee(r,n,null);this.appendWith(i)}overrideSelectItemExpr(t,n){let r=this.selectClause.items.filter(u=>u.identifier?.name===t);if(r.length===0)throw new Error(`Column ${t} not found in the query`);if(r.length>1)throw new Error(`Duplicate column name ${t} found in the query`);let i=r[0],a=new Ge().visit(i.value),l=n(a);i.value=k.parse(l)}appendWhereExpr(t,n,r){if(r&&r.upstream){let s=new mt().find(this,[t]),a=new Te,l=new Ge;for(let u of s){let c=a.collect(u).filter(h=>h.name===t).map(h=>h.value);if(c.length!==1)throw new Error(`Expected exactly one expression for column '${t}'`);let d=l.format(c[0]);u.appendWhereRaw(n(d))}}else{let i=new Te,s=new Ge,a=i.collect(this).filter(u=>u.name===t).map(u=>u.value);if(a.length!==1)throw new Error(`Expected exactly one expression for column '${t}'`);let l=s.format(a[0]);this.appendWhereRaw(n(l))}}setParameter(t,n){return He.set(this,t,n),this}toSimpleQuery(){return this}addCTE(t,n,r){if(!t||t.trim()==="")throw new pt(t,"name cannot be empty or whitespace-only");if(this.hasCTE(t))throw new vt(t);let i=r?.materialized??null,s=new ee(n,t,i);return this.appendWith(s),this.cteNameCache.add(t),this}removeCTE(t){if(!this.hasCTE(t))throw new bt(t);return this.withClause&&(this.withClause.tables=this.withClause.tables.filter(n=>n.aliasExpression.table.name!==t),this.withClause.tables.length===0&&(this.withClause=null)),this.cteNameCache.delete(t),this}hasCTE(t){return this.cteNameCache.has(t)}getCTENames(){return this.withClause?.tables.map(t=>t.aliasExpression.table.name)??[]}replaceCTE(t,n,r){if(!t||t.trim()==="")throw new pt(t,"name cannot be empty or whitespace-only");this.hasCTE(t)&&this.removeCTE(t);let i=r?.materialized??null,s=new ee(n,t,i);return this.appendWith(s),this.cteNameCache.add(t),this}};var q=class o extends f{static{this.kind=Symbol("BinarySelectQuery")}constructor(e,t,n){super(),this.left=e,this.operator=new Q(t),this.right=n}union(e){return this.appendSelectQuery("union",e)}unionAll(e){return this.appendSelectQuery("union all",e)}intersect(e){return this.appendSelectQuery("intersect",e)}intersectAll(e){return this.appendSelectQuery("intersect all",e)}except(e){return this.appendSelectQuery("except",e)}exceptAll(e){return this.appendSelectQuery("except all",e)}appendSelectQuery(e,t){return this.left=new o(this.left,this.operator.value,this.right),this.operator=new Q(e),this.right=t,De.normalize(this),this}unionRaw(e){let t=M.parse(e);return this.union(t)}unionAllRaw(e){let t=M.parse(e);return this.unionAll(t)}intersectRaw(e){let t=M.parse(e);return this.intersect(t)}intersectAllRaw(e){let t=M.parse(e);return this.intersectAll(t)}exceptRaw(e){let t=M.parse(e);return this.except(t)}exceptAllRaw(e){let t=M.parse(e);return this.exceptAll(t)}toSource(e="subq"){return new R(new _(this),new Y(e,null))}setParameter(e,t){return He.set(this,e,t),this}toSimpleQuery(){return ke.buildSimpleQuery(this)}};var ie=class extends f{static{this.kind=Symbol("ValuesQuery")}constructor(e,t=null){super(),this.tuples=e,this.columnAliases=t}toSimpleQuery(){return ke.buildSimpleQuery(this)}setParameter(e,t){return He.set(this,e,t),this}};var En=class{static parse(e){let n=new N(e).readLexmes(),r=this.parseFromLexeme(n,0);if(r.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[r.newIndex].value}" at position ${r.newIndex}. The SELECT clause is complete but there are additional tokens.`);return r.value}static parseFromLexeme(e,t){let n=t,r=null,i=n<e.length?e[n].comments:null;if(e[n].value!=="select")throw new Error(`Syntax error at position ${n}: Expected 'SELECT' keyword but found "${e[n].value}". SELECT clauses must start with the SELECT keyword.`);n++;let s=[];for(;n<e.length&&tt.isHintClause(e[n].value);){let u=tt.extractHintContent(e[n].value);s.push(new tt(u)),n++}if(n<e.length&&e[n].value==="distinct")n++,r=new ht;else if(n<e.length&&e[n].value==="distinct on"){n++;let u=k.parseArgument(4,8,e,n);r=new ft(u.value),n=u.newIndex}let a=[],l=xn.parseItem(e,n);for(a.push(l.value),n=l.newIndex;n<e.length&&e[n].type&16;){n++;let u=xn.parseItem(e,n);a.push(u.value),n=u.newIndex}if(a.length===0)throw new Error(`Syntax error at position ${t}: No select items found. The SELECT clause requires at least one expression to select.`);{let u=new U(a,r,s);return u.comments=i,{value:u,newIndex:n}}}},xn=class{static parse(e){let n=new N(e).readLexmes(),r=this.parseItem(n,0);if(r.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[r.newIndex].value}" at position ${r.newIndex}. The select item is complete but there are additional tokens.`);return r.value}static parseItem(e,t){let n=t,r=k.parseFromLexeme(e,n),i=r.value;if(n=r.newIndex,n<e.length&&e[n].value==="as"&&n++,n<e.length&&e[n].type&64){let s=e[n].value;return n++,{value:new J(i,s),newIndex:n}}else if(i instanceof S&&i.column.name!=="*")return{value:new J(i,i.column.name),newIndex:n};return{value:new J(i),newIndex:n}}};var Tn=class{static tryParse(e,t){let n=t;if(n<e.length&&e[n].value==="on"){n++;let r=k.parseFromLexeme(e,n);return n=r.newIndex,{value:new he(r.value),newIndex:n}}return null}};var kn=class{static tryParse(e,t){let n=t;if(n<e.length&&e[n].value==="using"){n++;let r=k.parseArgument(4,8,e,n),i=r.value;return n=r.newIndex,{value:new Pe(i),newIndex:n}}return null}};var In=class{static tryParse(e,t){let n=t,r=[];for(;this.isJoinCommand(e,n);){let i=this.parseJoinClause(e,n);r.push(i.value),n=i.newIndex}return r.length>0?{value:r,newIndex:n}:null}static isJoinKeyword(e){return!!zn.parse(e,0)}static parseLateral(e,t){let n=t;return n<e.length&&e[n].value==="lateral"?(n++,{value:!0,newIndex:n}):{value:!1,newIndex:n}}static isJoinCommand(e,t){return t>=e.length?!1:!!(e[t].type&16||this.isJoinKeyword(e[t].value)===!0)}static parseJoinClause(e,t){let n=t,r=e[n].value===","?"cross join":e[n].value;n++;let i=this.parseLateral(e,n),s=i.value;n=i.newIndex;let a=Je.parseFromLexeme(e,n);if(n=a.newIndex,n<e.length){let u=Tn.tryParse(e,n);if(u)return{value:new fe(r,a.value,u.value,s),newIndex:u.newIndex};let c=kn.tryParse(e,n);if(c)return{value:new fe(r,a.value,c.value,s),newIndex:c.newIndex}}return{value:new fe(r,a.value,null,s),newIndex:n}}};var Et=class{static collectClauseComments(e,t,n){if(t>=e.length||e[t].value.toLowerCase()!==n.toLowerCase())return null;let r=[];e[t].comments&&r.push(...e[t].comments);let i=t-1;for(;i>=0;){let s=e[i];if(s.comments&&s.comments.length>0){let a=s.comments.filter(l=>{let u=l.toLowerCase();return u.includes(n.toLowerCase())||u.includes("\u306E")||u.includes("\u30B3\u30E1\u30F3\u30C8")});a.length>0&&(r.unshift(...a),s.comments=s.comments.filter(l=>!a.includes(l)),s.comments.length===0&&(s.comments=null));break}if(this.isSignificantSqlKeyword(s.value))break;i--}return r.length>0?r:null}static isSignificantSqlKeyword(e){return new Set(["select","from","where","group by","having","order by","limit","offset"]).has(e.toLowerCase())}};var Pn=class{static parse(e){let n=new N(e).readLexmes(),r=this.parseFromLexeme(n,0);if(r.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[r.newIndex].value}" at position ${r.newIndex}. The FROM clause is complete but there are additional tokens.`);return r.value}static parseFromLexeme(e,t){let n=t,r=Et.collectClauseComments(e,n,"from");if(e[n].value!=="from")throw new Error(`Syntax error at position ${n}: Expected 'FROM' keyword but found "${e[n].value}". FROM clauses must start with the FROM keyword.`);if(n++,n>=e.length)throw new Error("Syntax error: Unexpected end of input after 'FROM' keyword. The FROM clause requires a table reference.");let i=Je.parseFromLexeme(e,n);n=i.newIndex;let s=In.tryParse(e,n);if(n=s?.newIndex||n,s!==null){let a=new W(i.value,s.value);return a.comments=r,{value:a,newIndex:n}}else{let a=new W(i.value,null);return a.comments=r,{value:a,newIndex:n}}}};var Nn=class{static parse(e){let n=new N(e).readLexmes(),r=this.parseFromLexeme(n,0);if(r.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[r.newIndex].value}" at position ${r.newIndex}. The WHERE clause is complete but there are additional tokens.`);return r.value}static parseFromLexeme(e,t){let n=t,r=Et.collectClauseComments(e,n,"where");if(e[n].value!=="where")throw new Error(`Syntax error at position ${n}: Expected 'WHERE' keyword but found "${e[n].value}". WHERE clauses must start with the WHERE keyword.`);if(n++,n>=e.length)throw new Error("Syntax error: Unexpected end of input after 'WHERE' keyword. The WHERE clause requires a condition expression.");let i=k.parseFromLexeme(e,n),s=new ae(i.value);return s.comments=r,{value:s,newIndex:i.newIndex}}};var On=class{static parse(e){let n=new N(e).readLexmes(),r=this.parseFromLexeme(n,0);if(r.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[r.newIndex].value}" at position ${r.newIndex}. The GROUP BY clause is complete but there are additional tokens.`);return r.value}static parseFromLexeme(e,t){let n=t;if(e[n].value!=="group by")throw new Error(`Syntax error at position ${n}: Expected 'GROUP BY' keyword but found "${e[n].value}". GROUP BY clauses must start with the GROUP BY keywords.`);if(n++,n>=e.length)throw new Error("Syntax error: Unexpected end of input after 'GROUP BY' keyword. The GROUP BY clause requires at least one expression to group by.");let r=[],i=this.parseItem(e,n);for(r.push(i.value),n=i.newIndex;n<e.length&&e[n].type&16;){n++;let s=this.parseItem(e,n);r.push(s.value),n=s.newIndex}if(r.length===0)throw new Error(`Syntax error at position ${t}: No grouping expressions found. The GROUP BY clause requires at least one expression to group by.`);return{value:new me(r),newIndex:n}}static parseItem(e,t){let n=t,r=k.parseFromLexeme(e,n),i=r.value;return n=r.newIndex,{value:i,newIndex:n}}};var Fn=class{static parse(e){let n=new N(e).readLexmes(),r=this.parseFromLexeme(n,0);if(r.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[r.newIndex].value}" at position ${r.newIndex}. The HAVING clause is complete but there are additional tokens.`);return r.value}static parseFromLexeme(e,t){let n=t;if(e[n].value!=="having")throw new Error(`Syntax error at position ${n}: Expected 'HAVING' keyword but found "${e[n].value}". HAVING clauses must start with the HAVING keyword.`);if(n++,n>=e.length)throw new Error("Syntax error: Unexpected end of input after 'HAVING' keyword. The HAVING clause requires a condition expression.");let r=k.parseFromLexeme(e,n);return{value:new de(r.value),newIndex:r.newIndex}}};var Ln=class{static parse(e){let n=new N(e).readLexmes(),r=this.parseFromLexeme(n,0);if(r.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[r.newIndex].value}" at position ${r.newIndex}. The WINDOW clause is complete but there are additional tokens.`);return r.value}static parseFromLexeme(e,t){let n=t;if(e[n].value!=="window")throw new Error(`Syntax error at position ${n}: Expected 'WINDOW' keyword but found "${e[n].value}". WINDOW clauses must start with the WINDOW keyword.`);if(n++,n>=e.length)throw new Error("Syntax error: Unexpected end of input after 'WINDOW' keyword. The WINDOW clause requires at least one window definition.");let r=[];for(;n<e.length;){if(n>=e.length||e[n].type!==64)throw new Error("Syntax error: Expected window name after 'WINDOW' keyword.");let i=e[n].value;if(n++,n>=e.length||e[n].value!=="as")throw new Error(`Syntax error at position ${n}: Expected 'AS' keyword after window name.`);n++;let s=yt.parseFromLexeme(e,n);if(n=s.newIndex,r.push(new xe(i,s.value)),n<e.length&&e[n].type&16)n++;else break}if(r.length===0)throw new Error("At least one WINDOW clause is required after WINDOW keyword.");return{value:new Ye(r),newIndex:n}}};var An=class{static parse(e){let n=new N(e).readLexmes(),r=this.parseFromLexeme(n,0);if(r.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[r.newIndex].value}" at position ${r.newIndex}. The LIMIT clause is complete but there are additional tokens.`);return r.value}static parseFromLexeme(e,t){let n=t;if(e[n].value!=="limit")throw new Error(`Syntax error at position ${n}: Expected 'LIMIT' keyword but found "${e[n].value}". LIMIT clauses must start with the LIMIT keyword.`);if(n++,n>=e.length)throw new Error("Syntax error: Unexpected end of input after 'LIMIT' keyword. The LIMIT clause requires a numeric expression.");let r=k.parseFromLexeme(e,n);return n=r.newIndex,{value:new le(r.value),newIndex:n}}};var Qn=class{static parse(e){let n=new N(e).readLexmes(),r=this.parseFromLexeme(n,0);if(r.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[r.newIndex].value}" at position ${r.newIndex}. The FOR clause is complete but there are additional tokens.`);return r.value}static parseFromLexeme(e,t){let n=t;if(e[n].value.toLowerCase()!=="for")throw new Error(`Syntax error at position ${n}: Expected 'FOR' keyword but found "${e[n].value}". FOR clauses must start with the FOR keyword.`);if(n++,n>=e.length)throw new Error("Syntax error: Unexpected end of input after 'FOR' keyword. The FOR clause requires a lock mode specification.");let r=e[n].value,i;switch(r){case"update":i="update",n++;break;case"share":i="share",n++;break;case"key share":i="key share",n++;break;case"no key update":i="no key update",n++;break;default:throw new Error(`Syntax error at position ${n}: Invalid lock mode "${r}". Valid lock modes are: UPDATE, SHARE, KEY SHARE, NO KEY UPDATE.`)}return{value:new Be(i),newIndex:n}}};var Bt=class{static parse(e){let n=new N(e).readLexmes(),r=this.parseFromLexeme(n,0);if(r.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[r.newIndex].value}" at position ${r.newIndex}. The CommonTable definition is complete but there are additional tokens.`);return r.value}static parseFromLexeme(e,t){let n=t,r=n<e.length?e[n].comments:null,i=dt.parseFromLexeme(e,n);if(n=i.newIndex,n<e.length&&e[n].value!=="as")throw new Error(`Syntax error at position ${n}: Expected 'AS' keyword after CTE name but found "${e[n].value}".`);n++;let s=null;if(n<e.length){let c=e[n].value;c==="materialized"?(s=!0,n++):c==="not materialized"&&(s=!1,n++)}if(n<e.length&&e[n].type!==4)throw new Error(`Syntax error at position ${n}: Expected '(' after CTE name but found "${e[n].value}".`);let a=e[n].comments;n++;let l=M.parseFromLexeme(e,n);if(n=l.newIndex,a&&a.length>0&&(l.value.comments?l.value.comments=[...a,...l.value.comments]:l.value.comments=a),n<e.length&&e[n].type!==8)throw new Error(`Syntax error at position ${n}: Expected ')' after CTE query but found "${e[n].value}".`);n++;let u=new ee(l.value,i.value,s);return u.comments=r,{value:u,newIndex:n}}};var xt=class{static parse(e){let n=new N(e).readLexmes(),r=this.parseFromLexeme(n,0);if(r.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[r.newIndex].value}" at position ${r.newIndex}. The WITH clause is complete but there are additional tokens.`);return r.value}static parseFromLexeme(e,t){let n=t,r=n<e.length?e[n].comments:null;if(n<e.length&&e[n].value.toLowerCase()==="with")n++;else throw new Error(`Syntax error at position ${n}: Expected WITH keyword.`);let i=n<e.length&&e[n].value.toLowerCase()==="recursive";i&&n++;let s=[],a=Bt.parseFromLexeme(e,n);for(s.push(a.value),n=a.newIndex;n<e.length&&e[n].type&16;){n++;let u=Bt.parseFromLexeme(e,n);s.push(u.value),n=u.newIndex}let l=new re(i,s);return l.comments=r,{value:l,newIndex:n}}};var Bn=class{static parse(e){let n=new N(e).readLexmes(),r=this.parseFromLexeme(n,0);if(r.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[r.newIndex].value}" at position ${r.newIndex}. The VALUES clause is complete but there are additional tokens.`);return r.value}static parseFromLexeme(e,t){let n=t;if(e[n].value.toLowerCase()!=="values")throw new Error(`Syntax error at position ${n}: Expected 'VALUES' keyword but found "${e[n].value}". VALUES clauses must start with the VALUES keyword.`);if(n++,n>=e.length)throw new Error("Syntax error: Unexpected end of input after 'VALUES' keyword. The VALUES clause requires at least one tuple expression.");let r=[],i=this.parseTuple(e,n);for(r.push(i.value),n=i.newIndex;n<e.length&&e[n].type&16;){n++;let a=this.parseTuple(e,n);r.push(a.value),n=a.newIndex}return{value:new ie(r),newIndex:n}}static parseTuple(e,t){let n=t;if(n>=e.length||e[n].type!==4)throw new Error(`Syntax error at position ${n}: Expected opening parenthesis but found "${n<e.length?e[n].value:"end of input"}". Tuple expressions in VALUES clause must be enclosed in parentheses.`);n++;let r=[];if(n>=e.length)throw new Error("Syntax error: Unexpected end of input after opening parenthesis in tuple expression.");if(e[n].type&8)return n++,{value:new Ee([]),newIndex:n};let i=k.parseFromLexeme(e,n);for(r.push(i.value),n=i.newIndex;n<e.length&&e[n].type&16;){if(n++,n>=e.length)throw new Error("Syntax error: Unexpected end of input after comma in tuple expression.");let s=k.parseFromLexeme(e,n);r.push(s.value),n=s.newIndex}if(n>=e.length||e[n].type!==8)throw new Error(`Syntax error at position ${n}: Expected closing parenthesis but found "${n<e.length?e[n].value:"end of input"}". Tuple expressions in VALUES clause must be enclosed in parentheses.`);return n++,{value:new Ee(r),newIndex:n}}};var Vn=class{static parseFromLexeme(e,t){let n=t;if(e[n].value!=="fetch")throw new Error(`Syntax error at position ${n}: Expected 'FETCH' keyword but found "${e[n].value}".`);if(n++,n>=e.length)throw new Error("Syntax error: Unexpected end of input after 'FETCH' keyword.");let r=Xn.parseFromLexeme(e,n),i=r.value;return n=r.newIndex,{value:new _e(i),newIndex:n}}},Xn=class{static parseFromLexeme(e,t){let n=t,r,i=e[n].value;if(i==="first")r="first";else if(i==="next")r="next";else throw new Error(`Syntax error at position ${n}: Expected 'FIRST' or 'NEXT' after 'FETCH' but found "${e[n].value}".`);if(n++,n>=e.length)throw new Error("Syntax error: Unexpected end of input after 'FETCH FIRST|NEXT'.");let s=null,a=null;if(e[n].value==="row only"||e[n].value==="rows only")return s=new z(1),a="rows only",n++,{value:new at(r,s,a),newIndex:n};let l=k.parseFromLexeme(e,n);if(s=l.value,n=l.newIndex,n>=e.length)throw new Error("Syntax error: Unexpected end of input after 'FETCH FIRST|NEXT <count>'.");if(e[n].value==="rows only"?(a="rows only",n++):e[n].value==="percent"?(a="percent",n++):e[n].value==="percent with ties"&&(a="percent with ties",n++),!a)throw new Error("Syntax error: Expected 'ROWS ONLY', 'PERCENT', or 'PERCENT WITH TIES' after 'FETCH FIRST|NEXT <count>'.");return{value:new at(r,s,a),newIndex:n}}};var Rn=class{static parse(e){let n=new N(e).readLexmes(),r=this.parseFromLexeme(n,0);if(r.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[r.newIndex].value}" at position ${r.newIndex}. The OFFSET clause is complete but there are additional tokens.`);return r.value}static parseFromLexeme(e,t){let n=t;if(e[n].value!=="offset")throw new Error(`Syntax error at position ${n}: Expected 'OFFSET' keyword but found "${e[n].value}". OFFSET clauses must start with the OFFSET keyword.`);if(n++,n>=e.length)throw new Error("Syntax error: Unexpected end of input after 'OFFSET' keyword. The OFFSET clause requires a numeric expression.");let r=k.parseFromLexeme(e,n);return n=r.newIndex,n<e.length&&(e[n].value==="row"||e[n].value==="rows")&&n++,{value:new $e(r.value),newIndex:n}}};var M=class{static parse(e){let n=new N(e).readLexmes(),r=this.parseFromLexeme(n,0);if(r.newIndex<n.length)throw new Error(`[SelectQueryParser] Syntax error: Unexpected token "${n[r.newIndex].value}" at position ${r.newIndex}. The SELECT query is complete but there are additional tokens.`);return r.value}static async parseAsync(e){return Promise.resolve(this.parse(e))}static{this.unionCommandSet=new Set(["union","union all","intersect","intersect all","except","except all"])}static{this.selectCommandSet=new Set(["with","select"])}static parseFromLexeme(e,t){let n=t;if(n>=e.length)throw new Error(`Syntax error: Unexpected end of input at position ${t}.`);let r=e[n].value;if(!this.selectCommandSet.has(r)&&r!=="values")throw new Error(`Syntax error at position ${n}: Expected 'SELECT' or 'VALUES' keyword but found "${e[n].value}".`);let i=this.selectCommandSet.has(r)?this.parseSimpleSelectQuery(e,n):this.parseValuesQuery(e,n),s=i.value;for(n=i.newIndex;n<e.length&&this.unionCommandSet.has(e[n].value.toLowerCase());){let a=e[n].value.toLowerCase();if(n++,n>=e.length)throw new Error(`Syntax error at position ${n}: Expected a query after '${a.toUpperCase()}' but found end of input.`);let l=e[n].value.toLowerCase();if(this.selectCommandSet.has(l)){let u=this.parseSimpleSelectQuery(e,n);s=new q(s,a,u.value),n=u.newIndex}else if(l==="values"){let u=this.parseValuesQuery(e,n);s=new q(s,a,u.value),n=u.newIndex}else throw new Error(`Syntax error at position ${n}: Expected 'SELECT' or 'VALUES' after '${a.toUpperCase()}' but found "${e[n].value}".`)}return{value:s,newIndex:n}}static parseSimpleSelectQuery(e,t){let n=t,r=null,i=n<e.length?e[n].comments:null;if(n<e.length&&e[n].value==="with"&&(r=xt.parseFromLexeme(e,n),n=r.newIndex),n>=e.length||e[n].value!=="select")throw new Error(`Syntax error at position ${n}: Expected 'SELECT' keyword but found "${n<e.length?e[n].value:"end of input"}". SELECT queries must start with the SELECT keyword.`);let s=En.parseFromLexeme(e,n);n=s.newIndex,i&&s.value.comments&&JSON.stringify(i)===JSON.stringify(s.value.comments)&&(s.value.comments=null);let a=null;n<e.length&&e[n].value==="from"&&(a=Pn.parseFromLexeme(e,n),n=a.newIndex);let l=null;n<e.length&&e[n].value==="where"&&(l=Nn.parseFromLexeme(e,n),n=l.newIndex);let u=null;n<e.length&&e[n].value==="group by"&&(u=On.parseFromLexeme(e,n),n=u.newIndex);let c=null;n<e.length&&e[n].value==="having"&&(c=Fn.parseFromLexeme(e,n),n=c.newIndex);let d=null;n<e.length&&e[n].value==="window"&&(d=Ln.parseFromLexeme(e,n),n=d.newIndex);let h=null;n<e.length&&e[n].value==="order by"&&(h=et.parseFromLexeme(e,n),n=h.newIndex);let w=null;n<e.length&&e[n].value==="limit"&&(w=An.parseFromLexeme(e,n),n=w.newIndex);let E=null;n<e.length&&e[n].value==="offset"&&(E=Rn.parseFromLexeme(e,n),n=E.newIndex);let m=null;n<e.length&&e[n].value==="fetch"&&(m=Vn.parseFromLexeme(e,n),n=m.newIndex);let y=null;n<e.length&&e[n].value.toLowerCase()==="for"&&(y=Qn.parseFromLexeme(e,n),n=y.newIndex);let L=new b({withClause:r?r.value:null,selectClause:s.value,fromClause:a?a.value:null,whereClause:l?l.value:null,groupByClause:u?u.value:null,havingClause:c?c.value:null,orderByClause:h?h.value:null,windowClause:d?d.value:null,limitClause:w?w.value:null,offsetClause:E?E.value:null,fetchClause:m?m.value:null,forClause:y?y.value:null});return L.comments=i,{value:L,newIndex:n}}static parseValuesQuery(e,t){let n=Bn.parseFromLexeme(e,t);return{value:n.value,newIndex:n.newIndex}}};var Zn=class{static parse(e){let n=new N(e).readLexmes(),r=this.parseFromLexeme(n,0);if(r.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[r.newIndex].value}" at position ${r.newIndex}. The INSERT query is complete but there are additional tokens.`);return r.value}static parseFromLexeme(e,t){let n=t,r=null;if(e[n].value==="with"){let l=xt.parseFromLexeme(e,n);r=l.value,n=l.newIndex}if(e[n].value!=="insert into")throw new Error(`Syntax error at position ${n}: Expected 'INSERT INTO' but found '${e[n].value}'.`);n++;let i=Je.parseTableSourceFromLexemes(e,n);n=i.newIndex;let s=[];if(e[n]?.type===4){for(n++;n<e.length&&e[n].type===64&&(s.push(e[n].value),n++,e[n]?.type===16);)n++;if(e[n]?.type!==8)throw new Error(`Syntax error at position ${n}: Expected ')' after column list.`);n++}let a=M.parseFromLexeme(e,n);if(r)if(a.value instanceof b)a.value.withClause=r;else throw new Error("WITH clause is not supported in this context.");return n=a.newIndex,{value:new qe({insertClause:new Ze(i.value,s),selectQuery:a.value}),newIndex:n}}};var $n=class o{constructor(){this.jsonColumnCounter=0;this.entityToJsonColumnMap=new Map;this.columnMappings=[]}static{this.CTE_OBJECT_PREFIX="cte_object_depth_"}static{this.WILDCARD_COLUMN="*"}buildObjectEntityCtes(e,t,n){this.jsonColumnCounter=0,this.entityToJsonColumnMap.clear(),this.columnMappings=[];let r=[e],i=e.aliasExpression.table.name,s=this.collectAndSortObjectEntities(n,t),a=this.groupEntitiesByDepth(s),l=Array.from(a.keys()).sort((u,c)=>c-u);for(let u of l){let c=a.get(u),d=`${o.CTE_OBJECT_PREFIX}${u}`,h=this.buildDepthCte(c,i,d,n,t);r.push(h),i=d}return{ctes:r,lastCteAlias:i,columnMappings:this.columnMappings}}generateUniqueJsonColumnName(e,t,n){this.jsonColumnCounter++;let r=`${e.toLowerCase()}_json_${this.jsonColumnCounter}`;return this.columnMappings.push({entityId:t,entityName:e,generatedColumnName:r,depth:n}),r}collectAndSortObjectEntities(e,t){let n=[],r=i=>{let s=t.get(i);if(!s)throw new Error(`Entity ${i} not found for depth calculation.`);if(s.isRoot)return 0;if(!s.parentId)return 1;let a=s.parentId,l=0,u=new Set;for(u.add(i);a;){if(u.has(a))throw new Error(`Circular dependency detected: ${a} already visited in path for ${i}`);u.add(a);let c=t.get(a);if(!c)throw new Error(`Parent entity ${a} not found during depth calculation for ${i}`);let d=!1;if(c.isRoot)d=!0;else{let h=e.nestedEntities.find(w=>w.id===a);if(h)h.relationshipType==="object"&&(d=!0);else throw new Error(`Parent entity ${a} (ancestor of ${i}) has no definition in mapping.nestedEntities and is not root.`)}if(d&&l++,c.isRoot)break;a=c.parentId}return l};return e.nestedEntities.forEach(i=>{if(i.relationshipType==="object"){let s=t.get(i.id);s&&!s.isRoot&&n.push({entity:s,depth:r(i.id)})}}),n}groupEntitiesByDepth(e){let t=new Map;return e.forEach(n=>{let r=n.depth;t.has(r)||t.set(r,[]),t.get(r).push(n)}),t}buildDepthCte(e,t,n,r,i){let s=[new J(new S(null,new x(o.WILDCARD_COLUMN)))];for(let{entity:l}of e){let u=this.buildEntityJsonColumn(l,r,i);s.push(u)}let a=new b({selectClause:new U(s),fromClause:new W(new R(new B(null,new x(t)),null),null)});return new ee(a,new Y(n,null),null)}buildEntityJsonColumn(e,t,n){let{jsonObjectArgs:r,nullChecks:i}=this.prepareEntityColumns(e);this.addChildObjectRelationships(e,r,t,n);let s=this.createJsonObject(r),a=this.buildNullCondition(i),l=this.createCaseExpression(a,s),u=this.calculateApproximateDepth(e,t),c=this.generateUniqueJsonColumnName(e.name,e.id,u);return this.entityToJsonColumnMap.set(e.id,c),new J(l,c)}calculateApproximateDepth(e,t){if(e.isRoot)return 0;if(!e.parentId)return 1;let n=1,r=e.parentId;for(;r&&r!==t.rootEntity.id;){let i=t.nestedEntities.find(s=>s.id===r);if(!i)break;n++,r=i.parentId}return n}prepareEntityColumns(e){let t=[],n=[];return Object.entries(e.columns).forEach(([r,i])=>{t.push(new z(r)),t.push(new S(null,new x(i))),n.push(new C(new S(null,new x(i)),"is",new z(null)))}),{jsonObjectArgs:t,nullChecks:n}}addChildObjectRelationships(e,t,n,r){n.nestedEntities.filter(s=>s.parentId===e.id&&s.relationshipType==="object").forEach(s=>{let a=r.get(s.id);if(a){t.push(new z(s.propertyName));let l=this.entityToJsonColumnMap.get(a.id);if(!l)throw new Error(`JSON column name not found for child entity: ${a.id}`);t.push(new S(null,new x(l)))}})}createJsonObject(e){let t="jsonb_build_object";return new j(null,new Q(t),new H(e),null)}buildNullCondition(e){return e.reduce((t,n)=>t?new C(t,"and",n):n)}createCaseExpression(e,t){return new oe(null,new ye([new we(e,new z(null))],t))}};var Mn=class o{static{this.CTE_ARRAY_PREFIX="cte_array_depth_"}static{this.JSON_FUNCTIONS={BUILD_OBJECT:"jsonb_build_object",AGGREGATE:"jsonb_agg"}}buildArrayEntityCtes(e,t,n,r,i){let s=[...e],a=t,l=this.collectAndSortArrayEntities(r,n);if(l.length===0)return{updatedCtes:s,lastCteAlias:a};let u=this.groupEntitiesByDepth(l),c=Array.from(u.keys()).sort((d,h)=>h-d);for(let d of c){let h=u.get(d),{cte:w,newCteAlias:E}=this.buildDepthCte(h,a,s,d,r,i);s.push(w),a=E}return{updatedCtes:s,lastCteAlias:a}}collectAndSortArrayEntities(e,t){let n=[],r=i=>{let s=t.get(i);return!s||s.isRoot?0:s.parentId?1+r(s.parentId):1};return e.nestedEntities.forEach(i=>{if(i.relationshipType==="array"){let s=t.get(i.id),a=t.get(i.parentId);if(!s||!a)throw new Error(`Configuration error: Array entity '${i.id}' or its parent '${i.parentId}' not found.`);let l=Object.values(a.columns);if(l.length===0)throw new Error(`Configuration error: Parent entity '${a.name}' (ID: ${a.id}) must have at least one column defined to serve as a linking key for child array '${i.name}'.`);let u=l[0];n.push({entity:s,parentEntity:a,parentIdColumnSqlName:u,depth:r(i.id)})}}),n.sort((i,s)=>s.depth-i.depth),n}groupEntitiesByDepth(e){let t=new Map;return e.forEach(n=>{let r=n.depth;t.has(r)||t.set(r,[]),t.get(r).push(n)}),t}buildDepthCte(e,t,n,r,i,s){let a=new Set;e.forEach(v=>{Object.values(v.entity.columns).forEach(P=>a.add(P));let O=P=>{i.nestedEntities.filter(A=>A.parentId===P).forEach(A=>{Object.values(A.columns).forEach(g=>{let I=typeof g=="string"?g:g.column;a.add(I)}),O(A.id)})};O(v.entity.id)});let l=n.find(v=>v.aliasExpression.table.name===t)?.query;if(!l)throw new Error(`CTE not found: ${t}`);let u=new Oe(null,n).collect(l),c=[],d=[],h=new Set;e.forEach(v=>{Object.values(v.entity.columns).forEach(O=>h.add(O))});let w=this.collectArrayEntityColumnsByDepth(i,r),E=new Set;s&&e.forEach(v=>{i.nestedEntities.filter(O=>O.parentId===v.entity.id&&O.relationshipType==="object").forEach(O=>{let P=s.find(A=>A.entityId===O.id);P&&E.add(P.generatedColumnName)})}),this.processSelectVariablesForGroupBy(u,a,w,r,d,c,E);for(let v of e){let O=this.buildAggregationDetailsForArrayEntity(v.entity,i.nestedEntities,new Map,s);d.push(new J(O.jsonAgg,v.entity.propertyName))}let m=`${o.CTE_ARRAY_PREFIX}${r}`,y=new b({selectClause:new U(d),fromClause:new W(new R(new B(null,new x(t)),null),null),groupByClause:c.length>0?new me(c):null});return{cte:new ee(y,new Y(m,null),null),newCteAlias:m}}buildAggregationDetailsForArrayEntity(e,t,n,r){let i=o.JSON_FUNCTIONS.BUILD_OBJECT,s=[];Object.entries(e.columns).forEach(([h,w])=>{s.push(new z(h)),s.push(new S(null,new x(w)))}),t.filter(h=>h.parentId===e.id).forEach(h=>{let w=h.originalPropertyName||h.propertyName;if(s.push(new z(w)),h.relationshipType==="object"){if(!r)throw new Error(`\u274C PostgresArrayEntityCteBuilder Error: Column mappings not provided
16
16
 
17
17
  \u{1F50D} Details:
18
18
  - Entity ID: ${h.id}
@@ -53,8 +53,8 @@ Detected column names: [${n.join(", ")}]`);let a=Je.parse(t);return new qe({inse
53
53
  `);r&&(n+=r+`
54
54
  `),this.nodes.size>0&&this.edges.getAll().length>0&&(n+=`
55
55
  `);let i=this.edges.getMermaidRepresentation();return i&&(n+=` ${i}
56
- `),n}getOrCreateTable(e){let t=`table_${e}`,n=this.nodes.get(t);return n||(n=It.createTable(e),this.addNode(n)),n}getOrCreateCTE(e){let t=`cte_${e}`,n=this.nodes.get(t);return n||(n=It.createCTE(e),this.addNode(n)),n}getOrCreateSubquery(e){let t=`subquery_${e}`,n=this.nodes.get(t);return n||(n=It.createSubquery(e),this.addNode(n)),n}createProcessNode(e,t){let n;switch(e.toLowerCase()){case"where":n=Ue.createWhere(t);break;case"group by":n=Ue.createGroupBy(t);break;case"having":n=Ue.createHaving(t);break;case"select":n=Ue.createSelect(t);break;case"order by":n=Ue.createOrderBy(t);break;case"limit":n=Ue.createLimit(t,!1);break;case"limit/offset":n=Ue.createLimit(t,!0);break;default:n=new Ue(t,e)}return this.addNode(n),n}createJoinNode(e,t){let n=Wt.createJoin(e,t);return this.addNode(n),n}createSetOperationNode(e,t){let n=Wt.createSetOperation(e,t);return this.addNode(n),n}createOutputNode(e="main"){let t=new Wn(e);return this.addNode(t),t}};var Jt=class{constructor(e){this.graph=e}processSource(e,t,n){if(e.datasource instanceof B)return this.processTableSource(e.datasource,t);if(e.datasource instanceof _)return this.processSubquerySource(e,t,n);throw new Error("Unsupported source type")}processTableSource(e,t){let n=e.getSourceName();return t.has(n)?this.graph.getOrCreateCTE(n).id:this.graph.getOrCreateTable(n).id}processSubquerySource(e,t,n){let r=e.aliasExpression?.table.name||"subquery",i=this.graph.getOrCreateSubquery(r),s=n(e.datasource.query,`subquery_${r}_internal`,t);return s&&!this.graph.hasConnection(s,i.id)&&this.graph.addConnection(s,i.id),i.id}extractTableNodeIds(e,t){let n=[],r=e.source;if(r.datasource instanceof B){let i=r.datasource.getSourceName();if(t.has(i)){let s=this.graph.getOrCreateCTE(i);n.push(s.id)}else{let s=this.graph.getOrCreateTable(i);n.push(s.id)}}if(e.joins&&e.joins.length>0)for(let i of e.joins){let s=i.source;if(s.datasource instanceof B){let a=s.datasource.getSourceName();if(t.has(a)){let l=this.graph.getOrCreateCTE(a);n.push(l.id)}else{let l=this.graph.getOrCreateTable(a);n.push(l.id)}}}return n}};var Ut=class{constructor(e,t){this.graph=e;this.dataSourceHandler=t;this.joinIdCounter=0}resetJoinCounter(){this.joinIdCounter=0}getNextJoinId(){return String(++this.joinIdCounter)}processFromClause(e,t,n){let r=this.dataSourceHandler.processSource(e.source,t,n);return e.joins&&e.joins.length>0?this.processJoins(e.joins,r,t,n):r}processJoins(e,t,n,r){let i=t;for(let s of e){let a=this.dataSourceHandler.processSource(s.source,n,r),l=this.getNextJoinId(),u=this.graph.createJoinNode(l,s.joinType.value),{leftLabel:c,rightLabel:d}=this.getJoinNullabilityLabels(s.joinType.value);i&&!this.graph.hasConnection(i,u.id)&&this.graph.addConnection(i,u.id,c),a&&!this.graph.hasConnection(a,u.id)&&this.graph.addConnection(a,u.id,d),i=u.id}return i}getJoinNullabilityLabels(e){switch(e.toLowerCase()){case"left join":return{leftLabel:"NOT NULL",rightLabel:"NULLABLE"};case"right join":return{leftLabel:"NULLABLE",rightLabel:"NOT NULL"};case"inner join":case"join":return{leftLabel:"NOT NULL",rightLabel:"NOT NULL"};case"full join":case"full outer join":return{leftLabel:"NULLABLE",rightLabel:"NULLABLE"};case"cross join":return{leftLabel:"NOT NULL",rightLabel:"NOT NULL"};default:return{leftLabel:"",rightLabel:""}}}};var qt=class{constructor(e,t){this.graph=e;this.dataSourceHandler=t}processQueryClauses(e,t,n,r,i){let s=n;return e.whereClause&&s&&(s=this.processWhereClause(e.whereClause,t,s,r,i)),e.groupByClause&&s&&(s=this.processGroupByClause(t,s)),e.havingClause&&s&&(s=this.processHavingClause(t,s)),this.shouldAddSelectNode(e,t)&&(s=this.processSelectClause(t,s)),e.orderByClause&&s&&(s=this.processOrderByClause(t,s)),(e.limitClause||e.offsetClause)&&s&&(s=this.processLimitClause(t,s,!!e.offsetClause)),s}processWhereClause(e,t,n,r,i){let s=this.graph.createProcessNode("where",t);this.graph.addConnection(n,s.id);let a=this.processWhereSubqueries(e,t,r,i);for(let l of a)this.graph.addConnection(l.nodeId,s.id,l.operator);return s.id}processGroupByClause(e,t){let n=this.graph.createProcessNode("group by",e);return this.graph.addConnection(t,n.id),n.id}processHavingClause(e,t){let n=this.graph.createProcessNode("having",e);return this.graph.addConnection(t,n.id),n.id}processSelectClause(e,t){let n=this.graph.createProcessNode("select",e);return this.graph.addConnection(t,n.id),n.id}processOrderByClause(e,t){let n=this.graph.createProcessNode("order by",e);return this.graph.addConnection(t,n.id),n.id}processLimitClause(e,t,n){let r=this.graph.createProcessNode(n?"limit/offset":"limit",e);return this.graph.addConnection(t,r.id),r.id}shouldAddSelectNode(e,t){return!0}processWhereSubqueries(e,t,n,r){let i=[];return this.processValueComponent(e.condition,t,n,r,i),i}processValueComponent(e,t,n,r,i){if(e instanceof se){let s=r(e.selectQuery,`${t}_where_subquery`,n);i.push({nodeId:s,operator:"SUBQUERY"})}else if(e instanceof j)if(e.qualifiedName.name.toString().toLowerCase()==="exists"&&e.argument instanceof se){let a=r(e.argument.selectQuery,`${t}_where_subquery`,n);i.push({nodeId:a,operator:"EXISTS"})}else e.argument&&this.processValueComponent(e.argument,t,n,r,i);else if(e instanceof Z){let s=e.operator.value.toLowerCase();(s==="exists"||s==="not exists")&&e.expression instanceof se?this.processQueryTablesOnly(e.expression.selectQuery,t,n,i,s.toUpperCase()):this.processValueComponent(e.expression,t,n,r,i)}else if(e instanceof C){let s=e.operator.value.toLowerCase();(s==="in"||s==="not in")&&e.right instanceof se?this.processQueryTablesOnly(e.right.selectQuery,t,n,i,s.toUpperCase()):(this.processValueComponent(e.left,t,n,r,i),this.processValueComponent(e.right,t,n,r,i))}else if(e&&typeof e=="object")for(let[s,a]of Object.entries(e))a&&typeof a=="object"&&(Array.isArray(a)?a.forEach(l=>{l&&typeof l=="object"&&"selectQuery"in l&&this.processValueComponent(l,t,n,r,i)}):"selectQuery"in a&&this.processValueComponent(a,t,n,r,i))}processQueryTablesOnly(e,t,n,r,i){if(e.fromClause){let s=this.dataSourceHandler.extractTableNodeIds(e.fromClause,n);for(let a of s)r.push({nodeId:a,operator:i})}}};var Kt=class{constructor(e){this.graph=e}processCTEs(e,t,n){for(let r=0;r<e.tables.length;r++){let s=e.tables[r].getSourceAliasName(),a=this.graph.getOrCreateCTE(s);t.add(s),e.recursive&&r===0&&a.addAnnotation("recursive")}for(let r=0;r<e.tables.length;r++){let i=e.tables[r],s=i.getSourceAliasName(),a=this.graph.getOrCreateCTE(s),l=n(i.query,`cte_${s}`,t);if(l&&!this.graph.hasConnection(l,a.id)){let c=e.recursive&&r===0?"RECURSIVE":void 0;this.graph.addConnection(l,a.id,c)}}}detectRecursiveReference(e,t){return e.toString().toLowerCase().includes(t.toLowerCase())}};var ar=class o{constructor(){this.graph=new Dt,this.dataSourceHandler=new Jt(this.graph),this.joinHandler=new Ut(this.graph,this.dataSourceHandler),this.processHandler=new qt(this.graph,this.dataSourceHandler),this.cteHandler=new Kt(this.graph)}generateMermaidFlow(e,t){this.graph=new Dt,this.dataSourceHandler=new Jt(this.graph),this.joinHandler=new Ut(this.graph,this.dataSourceHandler),this.processHandler=new qt(this.graph,this.dataSourceHandler),this.cteHandler=new Kt(this.graph),this.joinHandler.resetJoinCounter();let n=typeof e=="string"?M.parse(e):e,r=new Set;return this.processQuery(n,"main",r),this.graph.generateMermaid(t?.direction||"TD",t?.title)}static generate(e){return new o().generateMermaidFlow(e)}processQuery(e,t,n){if(e instanceof b)return this.processSimpleQuery(e,t,n);if(e instanceof q)return this.processBinaryQuery(e,t,n);throw new Error("Unsupported query type")}processSimpleQuery(e,t,n){e.withClause&&this.cteHandler.processCTEs(e.withClause,n,this.processQuery.bind(this));let r="";return e.fromClause&&(r=this.joinHandler.processFromClause(e.fromClause,n,this.processQuery.bind(this))),r&&(r=this.processHandler.processQueryClauses(e,t,r,n,this.processQuery.bind(this))),this.handleOutputNode(r,t)}processBinaryQuery(e,t,n){let r=this.flattenBinaryChain(e,e.operator.value);return r.length>2?this.processMultiPartOperation(r,e.operator.value,t,n):this.processSimpleBinaryOperation(e,t,n)}processSimpleBinaryOperation(e,t,n){let r=this.processQuery(e.left,`${t}_left`,n),i=this.processQuery(e.right,`${t}_right`,n),s=t==="main"?"main":t.replace(/^cte_/,""),a=this.graph.createSetOperationNode(s,e.operator.value);return r&&!this.graph.hasConnection(r,a.id)&&this.graph.addConnection(r,a.id),i&&!this.graph.hasConnection(i,a.id)&&this.graph.addConnection(i,a.id),a.id}processMultiPartOperation(e,t,n,r){let i=[],s=n==="main"?"main":n.replace(/^cte_/,""),a=this.graph.createSetOperationNode(s,t);for(let l=0;l<e.length;l++){let u=`${n}_part${l+1}`,c=this.processQuery(e[l],u,r);i.push(c)}for(let l of i)l&&!this.graph.hasConnection(l,a.id)&&this.graph.addConnection(l,a.id);return a.id}handleOutputNode(e,t){if(t==="main"){let n=this.graph.createOutputNode(t);return e&&this.graph.addConnection(e,n.id),n.id}return e}flattenBinaryChain(e,t){let n=[],r=i=>{i instanceof q&&i.operator.value===t?(r(i.left),r(i.right)):n.push(i)};return r(e),n}};var _t=class{constructor(e,t){typeof e=="function"?(this.tableColumnResolver=e,this.options=t||{}):(this.tableColumnResolver=void 0,this.options=e||{})}inject(e,t){typeof e=="string"&&(e=M.parse(e));let n=new mt(this.tableColumnResolver,this.options),r=new Te(this.tableColumnResolver),i=m=>this.options.ignoreCaseAndUnderscore?m.toLowerCase().replace(/_/g,""):m,s=["min","max","like","ilike","in","any","=","<",">","!=","<>","<=",">=","or","and","column"],a=Object.values(t);if(a.length>0&&a.every(m=>m===void 0)&&!this.options.allowAllUndefined)throw new Error("All parameters are undefined. This would result in fetching all records. Use allowAllUndefined: true option to explicitly allow this behavior.");for(let[m,y]of Object.entries(t))y!==void 0&&this.processStateParameter(m,y,e,n,r,i,s,d,c,w,E,h);function c(m,y,L,v,O,N){for(let A=0;A<L.length;A++){let g=L[A],I=g.column||y,Ot=O.find(V=>v(V.name)===v(I));if(!Ot)throw new Error(`Column '${I}' not found in query for AND condition`);let Ce=Ot.value;if("="in g&&g["="]!==void 0){let V=`${y}_and_${A}_eq`,F=new T(V,g["="]);m.appendWhere(new C(Ce,"=",F))}if("min"in g&&g.min!==void 0){let V=`${y}_and_${A}_min`,F=new T(V,g.min);m.appendWhere(new C(Ce,">=",F))}if("max"in g&&g.max!==void 0){let V=`${y}_and_${A}_max`,F=new T(V,g.max);m.appendWhere(new C(Ce,"<=",F))}if("like"in g&&g.like!==void 0){let V=`${y}_and_${A}_like`,F=new T(V,g.like);m.appendWhere(new C(Ce,"like",F))}if("ilike"in g&&g.ilike!==void 0){let V=`${y}_and_${A}_ilike`,F=new T(V,g.ilike);m.appendWhere(new C(Ce,"ilike",F))}if("in"in g&&g.in!==void 0){let F=g.in.map((D,K)=>new T(`${y}_and_${A}_in_${K}`,D));m.appendWhere(new C(Ce,"in",new X(new H(F))))}if("any"in g&&g.any!==void 0){let V=`${y}_and_${A}_any`,F=new T(V,g.any);m.appendWhere(new C(Ce,"=",new j(null,"any",F,null)))}if("<"in g&&g["<"]!==void 0){let V=`${y}_and_${A}_lt`,F=new T(V,g["<"]);m.appendWhere(new C(Ce,"<",F))}if(">"in g&&g[">"]!==void 0){let V=`${y}_and_${A}_gt`,F=new T(V,g[">"]);m.appendWhere(new C(Ce,">",F))}if("!="in g&&g["!="]!==void 0){let V=`${y}_and_${A}_neq`,F=new T(V,g["!="]);m.appendWhere(new C(Ce,"!=",F))}if("<>"in g&&g["<>"]!==void 0){let V=`${y}_and_${A}_ne`,F=new T(V,g["<>"]);m.appendWhere(new C(Ce,"<>",F))}if("<="in g&&g["<="]!==void 0){let V=`${y}_and_${A}_le`,F=new T(V,g["<="]);m.appendWhere(new C(Ce,"<=",F))}if(">="in g&&g[">="]!==void 0){let V=`${y}_and_${A}_ge`,F=new T(V,g[">="]);m.appendWhere(new C(Ce,">=",F))}}}function d(m,y,L,v,O,N){let A=[];for(let g=0;g<L.length;g++){let I=L[g],Ot=I.column||y,Ce=O.find(D=>v(D.name)===v(Ot));if(!Ce)throw new Error(`Column '${Ot}' not found in query for OR condition`);let V=Ce.value,F=[];if("="in I&&I["="]!==void 0){let D=`${y}_or_${g}_eq`,K=new T(D,I["="]);F.push(new C(V,"=",K))}if("min"in I&&I.min!==void 0){let D=`${y}_or_${g}_min`,K=new T(D,I.min);F.push(new C(V,">=",K))}if("max"in I&&I.max!==void 0){let D=`${y}_or_${g}_max`,K=new T(D,I.max);F.push(new C(V,"<=",K))}if("like"in I&&I.like!==void 0){let D=`${y}_or_${g}_like`,K=new T(D,I.like);F.push(new C(V,"like",K))}if("ilike"in I&&I.ilike!==void 0){let D=`${y}_or_${g}_ilike`,K=new T(D,I.ilike);F.push(new C(V,"ilike",K))}if("in"in I&&I.in!==void 0){let K=I.in.map((br,Er)=>new T(`${y}_or_${g}_in_${Er}`,br));F.push(new C(V,"in",new X(new H(K))))}if("any"in I&&I.any!==void 0){let D=`${y}_or_${g}_any`,K=new T(D,I.any);F.push(new C(V,"=",new j(null,"any",K,null)))}if("<"in I&&I["<"]!==void 0){let D=`${y}_or_${g}_lt`,K=new T(D,I["<"]);F.push(new C(V,"<",K))}if(">"in I&&I[">"]!==void 0){let D=`${y}_or_${g}_gt`,K=new T(D,I[">"]);F.push(new C(V,">",K))}if("!="in I&&I["!="]!==void 0){let D=`${y}_or_${g}_neq`,K=new T(D,I["!="]);F.push(new C(V,"!=",K))}if("<>"in I&&I["<>"]!==void 0){let D=`${y}_or_${g}_ne`,K=new T(D,I["<>"]);F.push(new C(V,"<>",K))}if("<="in I&&I["<="]!==void 0){let D=`${y}_or_${g}_le`,K=new T(D,I["<="]);F.push(new C(V,"<=",K))}if(">="in I&&I[">="]!==void 0){let D=`${y}_or_${g}_ge`,K=new T(D,I[">="]);F.push(new C(V,">=",K))}if(F.length>0){let D=F[0];for(let K=1;K<F.length;K++)D=new C(D,"and",F[K]);F.length>1?A.push(new X(D)):A.push(D)}}if(A.length>0){let g=A[0];for(let I=1;I<A.length;I++)g=new C(g,"or",A[I]);m.appendWhere(new X(g))}}function h(m,y,L){Object.keys(m).forEach(v=>{if(!y.includes(v))throw new Error(`Unsupported operator '${v}' for state key '${L}'`)})}function w(m,y,L,v){let O=new T(L,v);m.appendWhere(new C(y,"=",O))}function E(m,y,L,v){let O=[];if("="in v){let N=new T(L,v["="]);O.push(new C(y,"=",N))}if("min"in v){let N=new T(L+"_min",v.min);O.push(new C(y,">=",N))}if("max"in v){let N=new T(L+"_max",v.max);O.push(new C(y,"<=",N))}if("like"in v){let N=new T(L+"_like",v.like);O.push(new C(y,"like",N))}if("ilike"in v){let N=new T(L+"_ilike",v.ilike);O.push(new C(y,"ilike",N))}if("in"in v){let A=v.in.map((g,I)=>new T(`${L}_in_${I}`,g));O.push(new C(y,"in",new X(new H(A))))}if("any"in v){let N=new T(L+"_any",v.any);O.push(new C(y,"=",new j(null,"any",N,null)))}if("<"in v){let N=new T(L+"_lt",v["<"]);O.push(new C(y,"<",N))}if(">"in v){let N=new T(L+"_gt",v[">"]);O.push(new C(y,">",N))}if("!="in v){let N=new T(L+"_neq",v["!="]);O.push(new C(y,"!=",N))}if("<>"in v){let N=new T(L+"_ne",v["<>"]);O.push(new C(y,"<>",N))}if("<="in v){let N=new T(L+"_le",v["<="]);O.push(new C(y,"<=",N))}if(">="in v){let N=new T(L+"_ge",v[">="]);O.push(new C(y,">=",N))}if(O.length===1)m.appendWhere(O[0]);else if(O.length>1){let N=O[0];for(let A=1;A<O.length;A++)N=new C(N,"and",O[A]);m.appendWhere(new X(N))}}return e}isOrCondition(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)&&"or"in e}isAndCondition(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)&&"and"in e}isExplicitColumnMapping(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)&&"column"in e&&!("or"in e)}isValidatableObject(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)&&Object.getPrototypeOf(e)===Object.prototype}hasColumnMapping(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)&&"column"in e}isSimpleValue(e){return e===null||typeof e!="object"||Array.isArray(e)||e instanceof Date}processStateParameter(e,t,n,r,i,s,a,l,u,c,d,h){if(this.isOrCondition(t)){let w=t.or;if(w&&w.length>0){let E=this.findTargetQueryForLogicalCondition(r,n,e,w),m=this.getAllAvailableColumns(E,i);l(E,e,w,s,m,i);return}}if(this.isAndCondition(t)){let w=t.and;if(w&&w.length>0){let E=this.findTargetQueryForLogicalCondition(r,n,e,w),m=this.getAllAvailableColumns(E,i);u(E,e,w,s,m,i);return}}if(this.isExplicitColumnMapping(t)){let w=t.column;if(w){let E=r.find(n,w);if(E.length===0)throw new Error(`Explicit column '${w}' not found in query`);for(let m of E){let L=this.getAllAvailableColumns(m,i).find(v=>s(v.name)===s(w));if(!L)throw new Error(`Explicit column '${w}' not found in query`);this.isValidatableObject(t)&&h(t,a,e),d(m,L.value,e,t)}return}}this.processRegularColumnCondition(e,t,n,r,i,s,a,c,d,h)}processRegularColumnCondition(e,t,n,r,i,s,a,l,u,c){let d=r.find(n,e);if(d.length===0)throw new Error(`Column '${e}' not found in query`);for(let h of d){let w=this.getAllAvailableColumns(h,i),E=w.find(v=>s(v.name)===s(e));if(!E)throw new Error(`Column '${e}' not found in query`);let m=E.value;this.isValidatableObject(t)&&c(t,a,e);let y=m,L=e;if(this.hasColumnMapping(t)){let v=t.column;if(v){let O=w.find(N=>s(N.name)===s(v));O&&(y=O.value,L=v)}}this.isSimpleValue(t)?l(h,y,L,t):u(h,y,L,t)}}findTargetQueryForLogicalCondition(e,t,n,r){let i=r.map(a=>a.column||n).filter((a,l,u)=>u.indexOf(a)===l);for(let a of i){let l=e.find(t,a);if(l.length>0)return l[0]}let s=r===r.or?"OR":"AND";throw new Error(`None of the ${s} condition columns [${i.join(", ")}] found in query`)}getAllAvailableColumns(e,t){let n=t.collect(e),r=this.collectCTEColumns(e);return[...n,...r]}collectCTEColumns(e){let t=[];if(e.withClause)for(let n of e.withClause.tables)try{let r=this.collectColumnsFromSelectQuery(n.query);t.push(...r)}catch(r){console.warn(`Failed to collect columns from CTE '${n.getSourceAliasName()}':`,r)}return t}collectColumnsFromSelectQuery(e){return e instanceof b?new Te(this.tableColumnResolver).collect(e):e instanceof q?this.collectColumnsFromSelectQuery(e.left):[]}};var Ht=class{constructor(e){this.tableColumnResolver=e}static removeOrderBy(e){if(typeof e=="string"&&(e=M.parse(e)),!(e instanceof b))throw new Error("Complex queries are not supported for ORDER BY removal");return new b({withClause:e.withClause,selectClause:e.selectClause,fromClause:e.fromClause,whereClause:e.whereClause,groupByClause:e.groupByClause,havingClause:e.havingClause,orderByClause:null,windowClause:e.windowClause,limitClause:e.limitClause,offsetClause:e.offsetClause,fetchClause:e.fetchClause,forClause:e.forClause})}inject(e,t){if(typeof e=="string"&&(e=M.parse(e)),!(e instanceof b))throw new Error("Complex queries are not supported for sorting");let r=new Te(this.tableColumnResolver).collect(e);for(let l of Object.keys(t))if(!r.find(c=>c.name===l))throw new Error(`Column or alias '${l}' not found in current query`);let i=[];for(let[l,u]of Object.entries(t)){let c=r.find(m=>m.name===l);if(!c)continue;let d=c.value;this.validateSortCondition(l,u);let h;u.desc?h="desc":h="asc";let w=null;u.nullsFirst?w="first":u.nullsLast&&(w="last");let E=new Ie(d,h,w);i.push(E)}let s=[];e.orderByClause?s=[...e.orderByClause.order,...i]:s=i;let a=s.length>0?new pe(s):null;return new b({withClause:e.withClause,selectClause:e.selectClause,fromClause:e.fromClause,whereClause:e.whereClause,groupByClause:e.groupByClause,havingClause:e.havingClause,orderByClause:a,windowClause:e.windowClause,limitClause:e.limitClause,offsetClause:e.offsetClause,fetchClause:e.fetchClause,forClause:e.forClause})}validateSortCondition(e,t){if(t.asc&&t.desc)throw new Error(`Conflicting sort directions for column '${e}': both asc and desc specified`);if(t.nullsFirst&&t.nullsLast)throw new Error(`Conflicting nulls positions for column '${e}': both nullsFirst and nullsLast specified`);if(!t.asc&&!t.desc&&!t.nullsFirst&&!t.nullsLast)throw new Error(`Empty sort condition for column '${e}': at least one sort option must be specified`)}};var zt=class{inject(e,t){if(this.validatePaginationOptions(t),typeof e=="string"&&(e=M.parse(e)),!(e instanceof b))throw new Error("Complex queries are not supported for pagination");if(e.limitClause||e.offsetClause)throw new Error("Query already contains LIMIT or OFFSET clause. Use removePagination() first if you want to override existing pagination.");let n=(t.page-1)*t.pageSize,r=new le(new T("paging_limit",t.pageSize)),i=new $e(new T("paging_offset",n));return new b({withClause:e.withClause,selectClause:e.selectClause,fromClause:e.fromClause,whereClause:e.whereClause,groupByClause:e.groupByClause,havingClause:e.havingClause,orderByClause:e.orderByClause,windowClause:e.windowClause,limitClause:r,offsetClause:i,fetchClause:e.fetchClause,forClause:e.forClause})}static removePagination(e){if(typeof e=="string"&&(e=M.parse(e)),!(e instanceof b))throw new Error("Complex queries are not supported for pagination removal");return new b({withClause:e.withClause,selectClause:e.selectClause,fromClause:e.fromClause,whereClause:e.whereClause,groupByClause:e.groupByClause,havingClause:e.havingClause,orderByClause:e.orderByClause,windowClause:e.windowClause,limitClause:null,offsetClause:null,fetchClause:e.fetchClause,forClause:e.forClause})}validatePaginationOptions(e){if(!e)throw new Error("Pagination options are required");if(typeof e.page!="number"||e.page<1)throw new Error("Page number must be a positive integer (1 or greater)");if(typeof e.pageSize!="number"||e.pageSize<1)throw new Error("Page size must be a positive integer (1 or greater)");if(e.pageSize>1e3)throw new Error("Page size cannot exceed 1000 items")}};var Nt=class{static extractParameterNames(e){return nt.collect(e).map(n=>n.name.value)}static hasParameter(e,t){return this.extractParameterNames(e).includes(t)}static separateFilters(e,t){let n=this.extractParameterNames(e),r={},i={};for(let[s,a]of Object.entries(t))n.includes(s)?r[s]=a:i[s]=a;return{hardcodedParams:r,dynamicFilters:i}}};var Un=class{constructor(e={}){this.options={requireAllParameters:!0,...e}}bind(e,t){let n=e,r=Nt.extractParameterNames(n);if(this.options.requireAllParameters){let i=r.filter(s=>!(s in t)||t[s]===void 0);if(i.length>0)throw new Error(`Missing values for required parameters: ${i.join(", ")}`)}for(let[i,s]of Object.entries(t))if(r.includes(i))try{He.set(n,i,s)}catch(a){throw new Error(`Failed to bind parameter '${i}': ${a instanceof Error?a.message:"Unknown error"}`)}return n}bindToSimpleQuery(e,t){return this.bind(e,t)}};var lr=class{constructor(e){this.tableColumnResolver=e}buildQuery(e,t={}){let n;try{n=M.parse(e)}catch(i){throw new Error(`Failed to parse SQL: ${i instanceof Error?i.message:"Unknown error"}`)}let r=n;if(t.filter&&Object.keys(t.filter).length>0){let{hardcodedParams:i,dynamicFilters:s}=Nt.separateFilters(r,t.filter);if(Object.keys(i).length>0&&(r=new Un({requireAllParameters:!1}).bind(r,i)),Object.keys(s).length>0){let a=new _t(this.tableColumnResolver),l=ke.buildSimpleQuery(r);r=a.inject(l,s)}}if(t.sort&&Object.keys(t.sort).length>0){let i=new Ht(this.tableColumnResolver),s=ke.buildSimpleQuery(r);r=i.inject(s,t.sort)}if(t.paging){let{page:i=1,pageSize:s}=t.paging;if(s!==void 0){let a=new zt,l={page:i,pageSize:s},u=ke.buildSimpleQuery(r);r=a.inject(u,l)}}if(t.serialize&&typeof t.serialize=="object"){let i=new Vt,s=ke.buildSimpleQuery(r);r=i.buildJsonQuery(s,t.serialize)}return r}buildFilteredQuery(e,t){return this.buildQuery(e,{filter:t})}buildSortedQuery(e,t){return this.buildQuery(e,{sort:t})}buildPaginatedQuery(e,t){return this.buildQuery(e,{paging:t})}buildSerializedQuery(e,t){return this.buildQuery(e,{serialize:t})}validateSql(e){try{return M.parse(e),!0}catch(t){throw new Error(`Invalid SQL: ${t instanceof Error?t.message:"Unknown error"}`)}}};var ur=class{static validate(e,t){let n=typeof e=="string"?M.parse(e):e,r=Array.isArray(t)?l=>{let u=t.find(c=>c.name===l);return u?u.columns:[]}:t,s=new jt(r).collect(n),a=[];for(let l of s){let u=r(l.name);if(u.length===0){a.push(`Table '${l.name}' is not defined.`);continue}let c=l.columns.filter(d=>!u.includes(d));c.length>0&&a.push(`Table '${l.name}' contains undefined columns: ${c.join(", ")}.`)}if(a.length>0)throw new Error(a.join(`
56
+ `),n}getOrCreateTable(e){let t=`table_${e}`,n=this.nodes.get(t);return n||(n=It.createTable(e),this.addNode(n)),n}getOrCreateCTE(e){let t=`cte_${e}`,n=this.nodes.get(t);return n||(n=It.createCTE(e),this.addNode(n)),n}getOrCreateSubquery(e){let t=`subquery_${e}`,n=this.nodes.get(t);return n||(n=It.createSubquery(e),this.addNode(n)),n}createProcessNode(e,t){let n;switch(e.toLowerCase()){case"where":n=Ue.createWhere(t);break;case"group by":n=Ue.createGroupBy(t);break;case"having":n=Ue.createHaving(t);break;case"select":n=Ue.createSelect(t);break;case"order by":n=Ue.createOrderBy(t);break;case"limit":n=Ue.createLimit(t,!1);break;case"limit/offset":n=Ue.createLimit(t,!0);break;default:n=new Ue(t,e)}return this.addNode(n),n}createJoinNode(e,t){let n=Wt.createJoin(e,t);return this.addNode(n),n}createSetOperationNode(e,t){let n=Wt.createSetOperation(e,t);return this.addNode(n),n}createOutputNode(e="main"){let t=new Wn(e);return this.addNode(t),t}};var Jt=class{constructor(e){this.graph=e}processSource(e,t,n){if(e.datasource instanceof B)return this.processTableSource(e.datasource,t);if(e.datasource instanceof _)return this.processSubquerySource(e,t,n);throw new Error("Unsupported source type")}processTableSource(e,t){let n=e.getSourceName();return t.has(n)?this.graph.getOrCreateCTE(n).id:this.graph.getOrCreateTable(n).id}processSubquerySource(e,t,n){let r=e.aliasExpression?.table.name||"subquery",i=this.graph.getOrCreateSubquery(r),s=n(e.datasource.query,`subquery_${r}_internal`,t);return s&&!this.graph.hasConnection(s,i.id)&&this.graph.addConnection(s,i.id),i.id}extractTableNodeIds(e,t){let n=[],r=e.source;if(r.datasource instanceof B){let i=r.datasource.getSourceName();if(t.has(i)){let s=this.graph.getOrCreateCTE(i);n.push(s.id)}else{let s=this.graph.getOrCreateTable(i);n.push(s.id)}}if(e.joins&&e.joins.length>0)for(let i of e.joins){let s=i.source;if(s.datasource instanceof B){let a=s.datasource.getSourceName();if(t.has(a)){let l=this.graph.getOrCreateCTE(a);n.push(l.id)}else{let l=this.graph.getOrCreateTable(a);n.push(l.id)}}}return n}};var Ut=class{constructor(e,t){this.graph=e;this.dataSourceHandler=t;this.joinIdCounter=0}resetJoinCounter(){this.joinIdCounter=0}getNextJoinId(){return String(++this.joinIdCounter)}processFromClause(e,t,n){let r=this.dataSourceHandler.processSource(e.source,t,n);return e.joins&&e.joins.length>0?this.processJoins(e.joins,r,t,n):r}processJoins(e,t,n,r){let i=t;for(let s of e){let a=this.dataSourceHandler.processSource(s.source,n,r),l=this.getNextJoinId(),u=this.graph.createJoinNode(l,s.joinType.value),{leftLabel:c,rightLabel:d}=this.getJoinNullabilityLabels(s.joinType.value);i&&!this.graph.hasConnection(i,u.id)&&this.graph.addConnection(i,u.id,c),a&&!this.graph.hasConnection(a,u.id)&&this.graph.addConnection(a,u.id,d),i=u.id}return i}getJoinNullabilityLabels(e){switch(e.toLowerCase()){case"left join":return{leftLabel:"NOT NULL",rightLabel:"NULLABLE"};case"right join":return{leftLabel:"NULLABLE",rightLabel:"NOT NULL"};case"inner join":case"join":return{leftLabel:"NOT NULL",rightLabel:"NOT NULL"};case"full join":case"full outer join":return{leftLabel:"NULLABLE",rightLabel:"NULLABLE"};case"cross join":return{leftLabel:"NOT NULL",rightLabel:"NOT NULL"};default:return{leftLabel:"",rightLabel:""}}}};var qt=class{constructor(e,t){this.graph=e;this.dataSourceHandler=t}processQueryClauses(e,t,n,r,i){let s=n;return e.whereClause&&s&&(s=this.processWhereClause(e.whereClause,t,s,r,i)),e.groupByClause&&s&&(s=this.processGroupByClause(t,s)),e.havingClause&&s&&(s=this.processHavingClause(t,s)),this.shouldAddSelectNode(e,t)&&(s=this.processSelectClause(t,s)),e.orderByClause&&s&&(s=this.processOrderByClause(t,s)),(e.limitClause||e.offsetClause)&&s&&(s=this.processLimitClause(t,s,!!e.offsetClause)),s}processWhereClause(e,t,n,r,i){let s=this.graph.createProcessNode("where",t);this.graph.addConnection(n,s.id);let a=this.processWhereSubqueries(e,t,r,i);for(let l of a)this.graph.addConnection(l.nodeId,s.id,l.operator);return s.id}processGroupByClause(e,t){let n=this.graph.createProcessNode("group by",e);return this.graph.addConnection(t,n.id),n.id}processHavingClause(e,t){let n=this.graph.createProcessNode("having",e);return this.graph.addConnection(t,n.id),n.id}processSelectClause(e,t){let n=this.graph.createProcessNode("select",e);return this.graph.addConnection(t,n.id),n.id}processOrderByClause(e,t){let n=this.graph.createProcessNode("order by",e);return this.graph.addConnection(t,n.id),n.id}processLimitClause(e,t,n){let r=this.graph.createProcessNode(n?"limit/offset":"limit",e);return this.graph.addConnection(t,r.id),r.id}shouldAddSelectNode(e,t){return!0}processWhereSubqueries(e,t,n,r){let i=[];return this.processValueComponent(e.condition,t,n,r,i),i}processValueComponent(e,t,n,r,i){if(e instanceof se){let s=r(e.selectQuery,`${t}_where_subquery`,n);i.push({nodeId:s,operator:"SUBQUERY"})}else if(e instanceof j)if(e.qualifiedName.name.toString().toLowerCase()==="exists"&&e.argument instanceof se){let a=r(e.argument.selectQuery,`${t}_where_subquery`,n);i.push({nodeId:a,operator:"EXISTS"})}else e.argument&&this.processValueComponent(e.argument,t,n,r,i);else if(e instanceof Z){let s=e.operator.value.toLowerCase();(s==="exists"||s==="not exists")&&e.expression instanceof se?this.processQueryTablesOnly(e.expression.selectQuery,t,n,i,s.toUpperCase()):this.processValueComponent(e.expression,t,n,r,i)}else if(e instanceof C){let s=e.operator.value.toLowerCase();(s==="in"||s==="not in")&&e.right instanceof se?this.processQueryTablesOnly(e.right.selectQuery,t,n,i,s.toUpperCase()):(this.processValueComponent(e.left,t,n,r,i),this.processValueComponent(e.right,t,n,r,i))}else if(e&&typeof e=="object")for(let[s,a]of Object.entries(e))a&&typeof a=="object"&&(Array.isArray(a)?a.forEach(l=>{l&&typeof l=="object"&&"selectQuery"in l&&this.processValueComponent(l,t,n,r,i)}):"selectQuery"in a&&this.processValueComponent(a,t,n,r,i))}processQueryTablesOnly(e,t,n,r,i){if(e.fromClause){let s=this.dataSourceHandler.extractTableNodeIds(e.fromClause,n);for(let a of s)r.push({nodeId:a,operator:i})}}};var Kt=class{constructor(e){this.graph=e}processCTEs(e,t,n){for(let r=0;r<e.tables.length;r++){let s=e.tables[r].getSourceAliasName(),a=this.graph.getOrCreateCTE(s);t.add(s),e.recursive&&r===0&&a.addAnnotation("recursive")}for(let r=0;r<e.tables.length;r++){let i=e.tables[r],s=i.getSourceAliasName(),a=this.graph.getOrCreateCTE(s),l=n(i.query,`cte_${s}`,t);if(l&&!this.graph.hasConnection(l,a.id)){let c=e.recursive&&r===0?"RECURSIVE":void 0;this.graph.addConnection(l,a.id,c)}}}detectRecursiveReference(e,t){return e.toString().toLowerCase().includes(t.toLowerCase())}};var ar=class o{constructor(){this.graph=new Dt,this.dataSourceHandler=new Jt(this.graph),this.joinHandler=new Ut(this.graph,this.dataSourceHandler),this.processHandler=new qt(this.graph,this.dataSourceHandler),this.cteHandler=new Kt(this.graph)}generateMermaidFlow(e,t){this.graph=new Dt,this.dataSourceHandler=new Jt(this.graph),this.joinHandler=new Ut(this.graph,this.dataSourceHandler),this.processHandler=new qt(this.graph,this.dataSourceHandler),this.cteHandler=new Kt(this.graph),this.joinHandler.resetJoinCounter();let n=typeof e=="string"?M.parse(e):e,r=new Set;return this.processQuery(n,"main",r),this.graph.generateMermaid(t?.direction||"TD",t?.title)}static generate(e){return new o().generateMermaidFlow(e)}processQuery(e,t,n){if(e instanceof b)return this.processSimpleQuery(e,t,n);if(e instanceof q)return this.processBinaryQuery(e,t,n);throw new Error("Unsupported query type")}processSimpleQuery(e,t,n){e.withClause&&this.cteHandler.processCTEs(e.withClause,n,this.processQuery.bind(this));let r="";return e.fromClause&&(r=this.joinHandler.processFromClause(e.fromClause,n,this.processQuery.bind(this))),r&&(r=this.processHandler.processQueryClauses(e,t,r,n,this.processQuery.bind(this))),this.handleOutputNode(r,t)}processBinaryQuery(e,t,n){let r=this.flattenBinaryChain(e,e.operator.value);return r.length>2?this.processMultiPartOperation(r,e.operator.value,t,n):this.processSimpleBinaryOperation(e,t,n)}processSimpleBinaryOperation(e,t,n){let r=this.processQuery(e.left,`${t}_left`,n),i=this.processQuery(e.right,`${t}_right`,n),s=t==="main"?"main":t.replace(/^cte_/,""),a=this.graph.createSetOperationNode(s,e.operator.value);return r&&!this.graph.hasConnection(r,a.id)&&this.graph.addConnection(r,a.id),i&&!this.graph.hasConnection(i,a.id)&&this.graph.addConnection(i,a.id),a.id}processMultiPartOperation(e,t,n,r){let i=[],s=n==="main"?"main":n.replace(/^cte_/,""),a=this.graph.createSetOperationNode(s,t);for(let l=0;l<e.length;l++){let u=`${n}_part${l+1}`,c=this.processQuery(e[l],u,r);i.push(c)}for(let l of i)l&&!this.graph.hasConnection(l,a.id)&&this.graph.addConnection(l,a.id);return a.id}handleOutputNode(e,t){if(t==="main"){let n=this.graph.createOutputNode(t);return e&&this.graph.addConnection(e,n.id),n.id}return e}flattenBinaryChain(e,t){let n=[],r=i=>{i instanceof q&&i.operator.value===t?(r(i.left),r(i.right)):n.push(i)};return r(e),n}};var _t=class{constructor(e,t){typeof e=="function"?(this.tableColumnResolver=e,this.options=t||{}):(this.tableColumnResolver=void 0,this.options=e||{})}inject(e,t){typeof e=="string"&&(e=M.parse(e));let n=new mt(this.tableColumnResolver,this.options),r=new Te(this.tableColumnResolver),i=m=>this.options.ignoreCaseAndUnderscore?m.toLowerCase().replace(/_/g,""):m,s=["min","max","like","ilike","in","any","=","<",">","!=","<>","<=",">=","or","and","column"],a=Object.values(t);if(a.length>0&&a.every(m=>m===void 0)&&!this.options.allowAllUndefined)throw new Error("All parameters are undefined. This would result in fetching all records. Use allowAllUndefined: true option to explicitly allow this behavior.");for(let[m,y]of Object.entries(t))y!==void 0&&this.processStateParameter(m,y,e,n,r,i,s,d,c,w,E,h);function c(m,y,L,v,O,P){for(let A=0;A<L.length;A++){let g=L[A],I=g.column||y,Ot=O.find(V=>v(V.name)===v(I));if(!Ot)throw new Error(`Column '${I}' not found in query for AND condition`);let Ce=Ot.value;if("="in g&&g["="]!==void 0){let V=`${y}_and_${A}_eq`,F=new T(V,g["="]);m.appendWhere(new C(Ce,"=",F))}if("min"in g&&g.min!==void 0){let V=`${y}_and_${A}_min`,F=new T(V,g.min);m.appendWhere(new C(Ce,">=",F))}if("max"in g&&g.max!==void 0){let V=`${y}_and_${A}_max`,F=new T(V,g.max);m.appendWhere(new C(Ce,"<=",F))}if("like"in g&&g.like!==void 0){let V=`${y}_and_${A}_like`,F=new T(V,g.like);m.appendWhere(new C(Ce,"like",F))}if("ilike"in g&&g.ilike!==void 0){let V=`${y}_and_${A}_ilike`,F=new T(V,g.ilike);m.appendWhere(new C(Ce,"ilike",F))}if("in"in g&&g.in!==void 0){let F=g.in.map((D,K)=>new T(`${y}_and_${A}_in_${K}`,D));m.appendWhere(new C(Ce,"in",new X(new H(F))))}if("any"in g&&g.any!==void 0){let V=`${y}_and_${A}_any`,F=new T(V,g.any);m.appendWhere(new C(Ce,"=",new j(null,"any",F,null)))}if("<"in g&&g["<"]!==void 0){let V=`${y}_and_${A}_lt`,F=new T(V,g["<"]);m.appendWhere(new C(Ce,"<",F))}if(">"in g&&g[">"]!==void 0){let V=`${y}_and_${A}_gt`,F=new T(V,g[">"]);m.appendWhere(new C(Ce,">",F))}if("!="in g&&g["!="]!==void 0){let V=`${y}_and_${A}_neq`,F=new T(V,g["!="]);m.appendWhere(new C(Ce,"!=",F))}if("<>"in g&&g["<>"]!==void 0){let V=`${y}_and_${A}_ne`,F=new T(V,g["<>"]);m.appendWhere(new C(Ce,"<>",F))}if("<="in g&&g["<="]!==void 0){let V=`${y}_and_${A}_le`,F=new T(V,g["<="]);m.appendWhere(new C(Ce,"<=",F))}if(">="in g&&g[">="]!==void 0){let V=`${y}_and_${A}_ge`,F=new T(V,g[">="]);m.appendWhere(new C(Ce,">=",F))}}}function d(m,y,L,v,O,P){let A=[];for(let g=0;g<L.length;g++){let I=L[g],Ot=I.column||y,Ce=O.find(D=>v(D.name)===v(Ot));if(!Ce)throw new Error(`Column '${Ot}' not found in query for OR condition`);let V=Ce.value,F=[];if("="in I&&I["="]!==void 0){let D=`${y}_or_${g}_eq`,K=new T(D,I["="]);F.push(new C(V,"=",K))}if("min"in I&&I.min!==void 0){let D=`${y}_or_${g}_min`,K=new T(D,I.min);F.push(new C(V,">=",K))}if("max"in I&&I.max!==void 0){let D=`${y}_or_${g}_max`,K=new T(D,I.max);F.push(new C(V,"<=",K))}if("like"in I&&I.like!==void 0){let D=`${y}_or_${g}_like`,K=new T(D,I.like);F.push(new C(V,"like",K))}if("ilike"in I&&I.ilike!==void 0){let D=`${y}_or_${g}_ilike`,K=new T(D,I.ilike);F.push(new C(V,"ilike",K))}if("in"in I&&I.in!==void 0){let K=I.in.map((br,Er)=>new T(`${y}_or_${g}_in_${Er}`,br));F.push(new C(V,"in",new X(new H(K))))}if("any"in I&&I.any!==void 0){let D=`${y}_or_${g}_any`,K=new T(D,I.any);F.push(new C(V,"=",new j(null,"any",K,null)))}if("<"in I&&I["<"]!==void 0){let D=`${y}_or_${g}_lt`,K=new T(D,I["<"]);F.push(new C(V,"<",K))}if(">"in I&&I[">"]!==void 0){let D=`${y}_or_${g}_gt`,K=new T(D,I[">"]);F.push(new C(V,">",K))}if("!="in I&&I["!="]!==void 0){let D=`${y}_or_${g}_neq`,K=new T(D,I["!="]);F.push(new C(V,"!=",K))}if("<>"in I&&I["<>"]!==void 0){let D=`${y}_or_${g}_ne`,K=new T(D,I["<>"]);F.push(new C(V,"<>",K))}if("<="in I&&I["<="]!==void 0){let D=`${y}_or_${g}_le`,K=new T(D,I["<="]);F.push(new C(V,"<=",K))}if(">="in I&&I[">="]!==void 0){let D=`${y}_or_${g}_ge`,K=new T(D,I[">="]);F.push(new C(V,">=",K))}if(F.length>0){let D=F[0];for(let K=1;K<F.length;K++)D=new C(D,"and",F[K]);F.length>1?A.push(new X(D)):A.push(D)}}if(A.length>0){let g=A[0];for(let I=1;I<A.length;I++)g=new C(g,"or",A[I]);m.appendWhere(new X(g))}}function h(m,y,L){Object.keys(m).forEach(v=>{if(!y.includes(v))throw new Error(`Unsupported operator '${v}' for state key '${L}'`)})}function w(m,y,L,v){let O=new T(L,v);m.appendWhere(new C(y,"=",O))}function E(m,y,L,v){let O=[];if("="in v){let P=new T(L,v["="]);O.push(new C(y,"=",P))}if("min"in v){let P=new T(L+"_min",v.min);O.push(new C(y,">=",P))}if("max"in v){let P=new T(L+"_max",v.max);O.push(new C(y,"<=",P))}if("like"in v){let P=new T(L+"_like",v.like);O.push(new C(y,"like",P))}if("ilike"in v){let P=new T(L+"_ilike",v.ilike);O.push(new C(y,"ilike",P))}if("in"in v){let A=v.in.map((g,I)=>new T(`${L}_in_${I}`,g));O.push(new C(y,"in",new X(new H(A))))}if("any"in v){let P=new T(L+"_any",v.any);O.push(new C(y,"=",new j(null,"any",P,null)))}if("<"in v){let P=new T(L+"_lt",v["<"]);O.push(new C(y,"<",P))}if(">"in v){let P=new T(L+"_gt",v[">"]);O.push(new C(y,">",P))}if("!="in v){let P=new T(L+"_neq",v["!="]);O.push(new C(y,"!=",P))}if("<>"in v){let P=new T(L+"_ne",v["<>"]);O.push(new C(y,"<>",P))}if("<="in v){let P=new T(L+"_le",v["<="]);O.push(new C(y,"<=",P))}if(">="in v){let P=new T(L+"_ge",v[">="]);O.push(new C(y,">=",P))}if(O.length===1)m.appendWhere(O[0]);else if(O.length>1){let P=O[0];for(let A=1;A<O.length;A++)P=new C(P,"and",O[A]);m.appendWhere(new X(P))}}return e}isOrCondition(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)&&"or"in e}isAndCondition(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)&&"and"in e}isExplicitColumnMapping(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)&&"column"in e&&!("or"in e)}isValidatableObject(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)&&Object.getPrototypeOf(e)===Object.prototype}hasColumnMapping(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)&&"column"in e}isSimpleValue(e){return e===null||typeof e!="object"||Array.isArray(e)||e instanceof Date}processStateParameter(e,t,n,r,i,s,a,l,u,c,d,h){if(this.isOrCondition(t)){let w=t.or;if(w&&w.length>0){let E=this.findTargetQueryForLogicalCondition(r,n,e,w),m=this.getAllAvailableColumns(E,i);l(E,e,w,s,m,i);return}}if(this.isAndCondition(t)){let w=t.and;if(w&&w.length>0){let E=this.findTargetQueryForLogicalCondition(r,n,e,w),m=this.getAllAvailableColumns(E,i);u(E,e,w,s,m,i);return}}if(this.isExplicitColumnMapping(t)){let w=t.column;if(w){let E=r.find(n,w);if(E.length===0)throw new Error(`Explicit column '${w}' not found in query`);for(let m of E){let L=this.getAllAvailableColumns(m,i).find(v=>s(v.name)===s(w));if(!L)throw new Error(`Explicit column '${w}' not found in query`);this.isValidatableObject(t)&&h(t,a,e),d(m,L.value,e,t)}return}}this.processRegularColumnCondition(e,t,n,r,i,s,a,c,d,h)}processRegularColumnCondition(e,t,n,r,i,s,a,l,u,c){let d=r.find(n,e);if(d.length===0)throw new Error(`Column '${e}' not found in query`);for(let h of d){let w=this.getAllAvailableColumns(h,i),E=w.find(v=>s(v.name)===s(e));if(!E)throw new Error(`Column '${e}' not found in query`);let m=E.value;this.isValidatableObject(t)&&c(t,a,e);let y=m,L=e;if(this.hasColumnMapping(t)){let v=t.column;if(v){let O=w.find(P=>s(P.name)===s(v));O&&(y=O.value,L=v)}}this.isSimpleValue(t)?l(h,y,L,t):u(h,y,L,t)}}findTargetQueryForLogicalCondition(e,t,n,r){let i=r.map(a=>a.column||n).filter((a,l,u)=>u.indexOf(a)===l);for(let a of i){let l=e.find(t,a);if(l.length>0)return l[0]}let s=r===r.or?"OR":"AND";throw new Error(`None of the ${s} condition columns [${i.join(", ")}] found in query`)}getAllAvailableColumns(e,t){let n=t.collect(e),r=this.collectCTEColumns(e);return[...n,...r]}collectCTEColumns(e){let t=[];if(e.withClause)for(let n of e.withClause.tables)try{let r=this.collectColumnsFromSelectQuery(n.query);t.push(...r)}catch(r){console.warn(`Failed to collect columns from CTE '${n.getSourceAliasName()}':`,r)}return t}collectColumnsFromSelectQuery(e){return e instanceof b?new Te(this.tableColumnResolver).collect(e):e instanceof q?this.collectColumnsFromSelectQuery(e.left):[]}};var Ht=class{constructor(e){this.tableColumnResolver=e}static removeOrderBy(e){if(typeof e=="string"&&(e=M.parse(e)),!(e instanceof b))throw new Error("Complex queries are not supported for ORDER BY removal");return new b({withClause:e.withClause,selectClause:e.selectClause,fromClause:e.fromClause,whereClause:e.whereClause,groupByClause:e.groupByClause,havingClause:e.havingClause,orderByClause:null,windowClause:e.windowClause,limitClause:e.limitClause,offsetClause:e.offsetClause,fetchClause:e.fetchClause,forClause:e.forClause})}inject(e,t){if(typeof e=="string"&&(e=M.parse(e)),!(e instanceof b))throw new Error("Complex queries are not supported for sorting");let r=new Te(this.tableColumnResolver).collect(e);for(let l of Object.keys(t))if(!r.find(c=>c.name===l))throw new Error(`Column or alias '${l}' not found in current query`);let i=[];for(let[l,u]of Object.entries(t)){let c=r.find(m=>m.name===l);if(!c)continue;let d=c.value;this.validateSortCondition(l,u);let h;u.desc?h="desc":h="asc";let w=null;u.nullsFirst?w="first":u.nullsLast&&(w="last");let E=new Ie(d,h,w);i.push(E)}let s=[];e.orderByClause?s=[...e.orderByClause.order,...i]:s=i;let a=s.length>0?new pe(s):null;return new b({withClause:e.withClause,selectClause:e.selectClause,fromClause:e.fromClause,whereClause:e.whereClause,groupByClause:e.groupByClause,havingClause:e.havingClause,orderByClause:a,windowClause:e.windowClause,limitClause:e.limitClause,offsetClause:e.offsetClause,fetchClause:e.fetchClause,forClause:e.forClause})}validateSortCondition(e,t){if(t.asc&&t.desc)throw new Error(`Conflicting sort directions for column '${e}': both asc and desc specified`);if(t.nullsFirst&&t.nullsLast)throw new Error(`Conflicting nulls positions for column '${e}': both nullsFirst and nullsLast specified`);if(!t.asc&&!t.desc&&!t.nullsFirst&&!t.nullsLast)throw new Error(`Empty sort condition for column '${e}': at least one sort option must be specified`)}};var zt=class{inject(e,t){if(this.validatePaginationOptions(t),typeof e=="string"&&(e=M.parse(e)),!(e instanceof b))throw new Error("Complex queries are not supported for pagination");if(e.limitClause||e.offsetClause)throw new Error("Query already contains LIMIT or OFFSET clause. Use removePagination() first if you want to override existing pagination.");let n=(t.page-1)*t.pageSize,r=new le(new T("paging_limit",t.pageSize)),i=new $e(new T("paging_offset",n));return new b({withClause:e.withClause,selectClause:e.selectClause,fromClause:e.fromClause,whereClause:e.whereClause,groupByClause:e.groupByClause,havingClause:e.havingClause,orderByClause:e.orderByClause,windowClause:e.windowClause,limitClause:r,offsetClause:i,fetchClause:e.fetchClause,forClause:e.forClause})}static removePagination(e){if(typeof e=="string"&&(e=M.parse(e)),!(e instanceof b))throw new Error("Complex queries are not supported for pagination removal");return new b({withClause:e.withClause,selectClause:e.selectClause,fromClause:e.fromClause,whereClause:e.whereClause,groupByClause:e.groupByClause,havingClause:e.havingClause,orderByClause:e.orderByClause,windowClause:e.windowClause,limitClause:null,offsetClause:null,fetchClause:e.fetchClause,forClause:e.forClause})}validatePaginationOptions(e){if(!e)throw new Error("Pagination options are required");if(typeof e.page!="number"||e.page<1)throw new Error("Page number must be a positive integer (1 or greater)");if(typeof e.pageSize!="number"||e.pageSize<1)throw new Error("Page size must be a positive integer (1 or greater)");if(e.pageSize>1e3)throw new Error("Page size cannot exceed 1000 items")}};var Pt=class{static extractParameterNames(e){return nt.collect(e).map(n=>n.name.value)}static hasParameter(e,t){return this.extractParameterNames(e).includes(t)}static separateFilters(e,t){let n=this.extractParameterNames(e),r={},i={};for(let[s,a]of Object.entries(t))n.includes(s)?r[s]=a:i[s]=a;return{hardcodedParams:r,dynamicFilters:i}}};var Un=class{constructor(e={}){this.options={requireAllParameters:!0,...e}}bind(e,t){let n=e,r=Pt.extractParameterNames(n);if(this.options.requireAllParameters){let i=r.filter(s=>!(s in t)||t[s]===void 0);if(i.length>0)throw new Error(`Missing values for required parameters: ${i.join(", ")}`)}for(let[i,s]of Object.entries(t))if(r.includes(i))try{He.set(n,i,s)}catch(a){throw new Error(`Failed to bind parameter '${i}': ${a instanceof Error?a.message:"Unknown error"}`)}return n}bindToSimpleQuery(e,t){return this.bind(e,t)}};var lr=class{constructor(e){this.tableColumnResolver=e}buildQuery(e,t={}){let n;try{n=M.parse(e)}catch(i){throw new Error(`Failed to parse SQL: ${i instanceof Error?i.message:"Unknown error"}`)}let r=n;if(t.filter&&Object.keys(t.filter).length>0){let{hardcodedParams:i,dynamicFilters:s}=Pt.separateFilters(r,t.filter);if(Object.keys(i).length>0&&(r=new Un({requireAllParameters:!1}).bind(r,i)),Object.keys(s).length>0){let a=new _t(this.tableColumnResolver),l=ke.buildSimpleQuery(r);r=a.inject(l,s)}}if(t.sort&&Object.keys(t.sort).length>0){let i=new Ht(this.tableColumnResolver),s=ke.buildSimpleQuery(r);r=i.inject(s,t.sort)}if(t.paging){let{page:i=1,pageSize:s}=t.paging;if(s!==void 0){let a=new zt,l={page:i,pageSize:s},u=ke.buildSimpleQuery(r);r=a.inject(u,l)}}if(t.serialize&&typeof t.serialize=="object"){let i=new Vt,s=ke.buildSimpleQuery(r);r=i.buildJsonQuery(s,t.serialize)}return r}buildFilteredQuery(e,t){return this.buildQuery(e,{filter:t})}buildSortedQuery(e,t){return this.buildQuery(e,{sort:t})}buildPaginatedQuery(e,t){return this.buildQuery(e,{paging:t})}buildSerializedQuery(e,t){return this.buildQuery(e,{serialize:t})}validateSql(e){try{return M.parse(e),!0}catch(t){throw new Error(`Invalid SQL: ${t instanceof Error?t.message:"Unknown error"}`)}}};var ur=class{static validate(e,t){let n=typeof e=="string"?M.parse(e):e,r=Array.isArray(t)?l=>{let u=t.find(c=>c.name===l);return u?u.columns:[]}:t,s=new jt(r).collect(n),a=[];for(let l of s){let u=r(l.name);if(u.length===0){a.push(`Table '${l.name}' is not defined.`);continue}let c=l.columns.filter(d=>!u.includes(d));c.length>0&&a.push(`Table '${l.name}' contains undefined columns: ${c.join(", ")}.`)}if(a.length>0)throw new Error(a.join(`
57
57
  `))}};var cr=class{static validate(e,t){let n=this.extractStructureFromJsonMapping(e);return this.compareStructures(n,t)}static validateStrict(e,t){let n=this.validate(e,t);if(!n.isValid){let r=["JsonMapping validation failed:",...n.errors].join(`
58
58
  `);throw new Error(r)}}static extractStructureFromJsonMapping(e){let t={};return e.rootEntity&&e.rootEntity.columns&&Object.keys(e.rootEntity.columns).forEach(n=>{t[n]="primitive"}),e.nestedEntities&&e.nestedEntities.filter(n=>n.parentId===e.rootEntity.id).forEach(n=>{n.propertyName&&n.columns&&(n.relationshipType==="object"?t[n.propertyName]=this.extractNestedEntityStructure(n,e):n.relationshipType==="array"&&(t[n.propertyName]=[this.extractNestedEntityStructure(n,e)]))}),t}static extractNestedEntityStructure(e,t){let n={};return e.columns&&Object.keys(e.columns).forEach(r=>{n[r]="primitive"}),t.nestedEntities&&t.nestedEntities.filter(r=>r.parentId===e.id).forEach(r=>{r.propertyName&&r.columns&&(r.relationshipType==="object"?n[r.propertyName]=this.extractNestedEntityStructure(r,t):r.relationshipType==="array"&&(n[r.propertyName]=[this.extractNestedEntityStructure(r,t)]))}),n}static compareStructures(e,t,n=""){let r=[],i=[],s=[];if(e==="primitive"&&t==="primitive")return{isValid:!0,errors:[],missingProperties:[],extraProperties:[]};if(Array.isArray(t)&&Array.isArray(e)){if(t.length>0&&e.length>0){let u=this.compareStructures(e[0],t[0],`${n}[]`);r.push(...u.errors),i.push(...u.missingProperties),s.push(...u.extraProperties)}return{isValid:r.length===0,errors:r,missingProperties:i,extraProperties:s}}if(typeof e!="object"||typeof t!="object"||Array.isArray(e)||Array.isArray(t)||e===null||t===null)return{isValid:!0,errors:[],missingProperties:[],extraProperties:[]};let a=e,l=t;return Object.keys(l).forEach(u=>{let c=n?`${n}.${u}`:u;if(!(u in a)){i.push(c),r.push(`Missing property: ${c}`);return}let d=a[u],h=l[u],w=this.compareStructures(d,h,c);r.push(...w.errors),i.push(...w.missingProperties),s.push(...w.extraProperties)}),Object.keys(a).forEach(u=>{let c=n?`${n}.${u}`:u;u in l||s.push(c)}),{isValid:r.length===0,errors:r,missingProperties:i,extraProperties:s}}static validateAgainstSample(e,t){let n=this.extractStructureFromSample(t);return this.validate(e,n)}static validateAgainstSampleStrict(e,t){let n=this.validateAgainstSample(e,t);if(!n.isValid){let r=["JsonMapping validation against sample object failed:",...n.errors].join(`
59
- `);throw new Error(r)}}static extractStructureFromSample(e){if(e==null)return"primitive";if(Array.isArray(e))return e.length===0?[]:[this.extractStructureFromSample(e[0])];if(typeof e=="object"){let t={};return Object.keys(e).forEach(n=>{t[n]=this.extractStructureFromSample(e[n])}),t}return"primitive"}};var Pt=class{constructor(e){this.schemas=e,this.validateSchemas()}validateSchemas(){let e=Object.keys(this.schemas),t=[];if(Object.entries(this.schemas).forEach(([n,r])=>{Object.entries(r.columns).filter(([s,a])=>a.isPrimaryKey).map(([s,a])=>s).length===0&&t.push(`Table '${n}' has no primary key defined`),r.relationships?.forEach(s=>{e.includes(s.table)||t.push(`Table '${n}' references unknown table '${s.table}' in relationship`)})}),t.length>0)throw new Error(`Schema validation failed:\\n${t.join("\\n")}`)}getTableColumns(e){let t=this.schemas[e];return t?Object.keys(t.columns):[]}createTableColumnResolver(){return e=>this.getTableColumns(e)}createJsonMapping(e){let t=this.schemas[e];if(!t)throw new Error(`Table '${e}' not found in schema registry`);let n={};Object.entries(t.columns).forEach(([i,s])=>{n[i]=s.jsonAlias||s.name});let r=[];return t.relationships?.forEach(i=>{let s=this.schemas[i.table];if(!s)throw new Error(`Related table '${i.table}' not found in schema registry`);let a={};Object.entries(s.columns).forEach(([u,c])=>{a[u]=c.jsonAlias||c.name});let l=i.type;r.push({id:i.propertyName,name:s.displayName||i.table,parentId:e,propertyName:i.propertyName,relationshipType:l,columns:a})}),{rootName:e,rootEntity:{id:e,name:t.displayName||e,columns:n},nestedEntities:r,resultFormat:"single"}}getTableNames(){return Object.keys(this.schemas)}getTable(e){return this.schemas[e]}getPrimaryKey(e){let t=this.schemas[e];if(!t)return;let n=Object.entries(t.columns).find(([r,i])=>i.isPrimaryKey);return n?n[0]:void 0}getForeignKeys(e){let t=this.schemas[e];if(!t)return[];let n=[];return Object.entries(t.columns).forEach(([r,i])=>{i.foreignKey&&n.push({column:r,referencedTable:i.foreignKey.table,referencedColumn:i.foreignKey.column})}),n}};function Xr(o){return new Pt(o)}function Zr(o){return new Pt(o).createTableColumnResolver()}function ei(o,e){return new Pt(o).createJsonMapping(e)}var pr=class{static addComment(e,t){e.comments||(e.comments=[]),e.comments.push(t)}static editComment(e,t,n){if(!e.comments||t<0||t>=e.comments.length)throw new Error(`Invalid comment index: ${t}. Component has ${e.comments?.length||0} comments.`);e.comments[t]=n}static deleteComment(e,t){if(!e.comments||t<0||t>=e.comments.length)throw new Error(`Invalid comment index: ${t}. Component has ${e.comments?.length||0} comments.`);e.comments.splice(t,1),e.comments.length===0&&(e.comments=null)}static deleteAllComments(e){e.comments=null}static getComments(e){return e.comments||[]}static findComponentsWithComment(e,t,n=!1){let r=[],i=n?t:t.toLowerCase(),s=a=>{a&&a instanceof f&&a.comments&&a.comments.some(l=>(n?l:l.toLowerCase()).includes(i))&&r.push(a);for(let l in a)a[l]&&typeof a[l]=="object"&&(Array.isArray(a[l])?a[l].forEach(s):s(a[l]))};return s(e),r}static replaceInComments(e,t,n,r=!1){let i=0,s=a=>{if(a&&a instanceof f&&a.comments)for(let l=0;l<a.comments.length;l++){let u=a.comments[l],c=r?"g":"gi",d=new RegExp(t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),c),h=u.replace(d,n);h!==u&&(a.comments[l]=h,i++)}for(let l in a)a[l]&&typeof a[l]=="object"&&(Array.isArray(a[l])?a[l].forEach(s):s(a[l]))};return s(e),i}static countComments(e){let t=0,n=r=>{r&&r instanceof f&&r.comments&&(t+=r.comments.length);for(let i in r)r[i]&&typeof r[i]=="object"&&(Array.isArray(r[i])?r[i].forEach(n):n(r[i]))};return n(e),t}static getAllComments(e){let t=[],n=r=>{r&&r instanceof f&&r.comments&&r.comments.forEach((i,s)=>{t.push({comment:i,component:r,index:s})});for(let i in r)r[i]&&typeof r[i]=="object"&&(Array.isArray(r[i])?r[i].forEach(n):n(r[i]))};return n(e),t}};
59
+ `);throw new Error(r)}}static extractStructureFromSample(e){if(e==null)return"primitive";if(Array.isArray(e))return e.length===0?[]:[this.extractStructureFromSample(e[0])];if(typeof e=="object"){let t={};return Object.keys(e).forEach(n=>{t[n]=this.extractStructureFromSample(e[n])}),t}return"primitive"}};var Nt=class{constructor(e){this.schemas=e,this.validateSchemas()}validateSchemas(){let e=Object.keys(this.schemas),t=[];if(Object.entries(this.schemas).forEach(([n,r])=>{Object.entries(r.columns).filter(([s,a])=>a.isPrimaryKey).map(([s,a])=>s).length===0&&t.push(`Table '${n}' has no primary key defined`),r.relationships?.forEach(s=>{e.includes(s.table)||t.push(`Table '${n}' references unknown table '${s.table}' in relationship`)})}),t.length>0)throw new Error(`Schema validation failed:\\n${t.join("\\n")}`)}getTableColumns(e){let t=this.schemas[e];return t?Object.keys(t.columns):[]}createTableColumnResolver(){return e=>this.getTableColumns(e)}createJsonMapping(e){let t=this.schemas[e];if(!t)throw new Error(`Table '${e}' not found in schema registry`);let n={};Object.entries(t.columns).forEach(([i,s])=>{n[i]=s.jsonAlias||s.name});let r=[];return t.relationships?.forEach(i=>{let s=this.schemas[i.table];if(!s)throw new Error(`Related table '${i.table}' not found in schema registry`);let a={};Object.entries(s.columns).forEach(([u,c])=>{a[u]=c.jsonAlias||c.name});let l=i.type;r.push({id:i.propertyName,name:s.displayName||i.table,parentId:e,propertyName:i.propertyName,relationshipType:l,columns:a})}),{rootName:e,rootEntity:{id:e,name:t.displayName||e,columns:n},nestedEntities:r,resultFormat:"single"}}getTableNames(){return Object.keys(this.schemas)}getTable(e){return this.schemas[e]}getPrimaryKey(e){let t=this.schemas[e];if(!t)return;let n=Object.entries(t.columns).find(([r,i])=>i.isPrimaryKey);return n?n[0]:void 0}getForeignKeys(e){let t=this.schemas[e];if(!t)return[];let n=[];return Object.entries(t.columns).forEach(([r,i])=>{i.foreignKey&&n.push({column:r,referencedTable:i.foreignKey.table,referencedColumn:i.foreignKey.column})}),n}};function Xr(o){return new Nt(o)}function Zr(o){return new Nt(o).createTableColumnResolver()}function ei(o,e){return new Nt(o).createJsonMapping(e)}var pr=class{static addComment(e,t){e.comments||(e.comments=[]),e.comments.push(t)}static editComment(e,t,n){if(!e.comments||t<0||t>=e.comments.length)throw new Error(`Invalid comment index: ${t}. Component has ${e.comments?.length||0} comments.`);e.comments[t]=n}static deleteComment(e,t){if(!e.comments||t<0||t>=e.comments.length)throw new Error(`Invalid comment index: ${t}. Component has ${e.comments?.length||0} comments.`);e.comments.splice(t,1),e.comments.length===0&&(e.comments=null)}static deleteAllComments(e){e.comments=null}static getComments(e){return e.comments||[]}static findComponentsWithComment(e,t,n=!1){let r=[],i=n?t:t.toLowerCase(),s=a=>{a&&a instanceof f&&a.comments&&a.comments.some(l=>(n?l:l.toLowerCase()).includes(i))&&r.push(a);for(let l in a)a[l]&&typeof a[l]=="object"&&(Array.isArray(a[l])?a[l].forEach(s):s(a[l]))};return s(e),r}static replaceInComments(e,t,n,r=!1){let i=0,s=a=>{if(a&&a instanceof f&&a.comments)for(let l=0;l<a.comments.length;l++){let u=a.comments[l],c=r?"g":"gi",d=new RegExp(t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),c),h=u.replace(d,n);h!==u&&(a.comments[l]=h,i++)}for(let l in a)a[l]&&typeof a[l]=="object"&&(Array.isArray(a[l])?a[l].forEach(s):s(a[l]))};return s(e),i}static countComments(e){let t=0,n=r=>{r&&r instanceof f&&r.comments&&(t+=r.comments.length);for(let i in r)r[i]&&typeof r[i]=="object"&&(Array.isArray(r[i])?r[i].forEach(n):n(r[i]))};return n(e),t}static getAllComments(e){let t=[],n=r=>{r&&r instanceof f&&r.comments&&r.comments.forEach((i,s)=>{t.push({comment:i,component:r,index:s})});for(let i in r)r[i]&&typeof r[i]=="object"&&(Array.isArray(r[i])?r[i].forEach(n):n(r[i]))};return n(e),t}};
60
60
  //# sourceMappingURL=index.min.js.map