rawsql-ts 0.11.32-beta → 0.11.33-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.
Files changed (123) hide show
  1. package/dist/esm/index.js +9 -0
  2. package/dist/esm/index.js.map +1 -1
  3. package/dist/esm/index.min.js +37 -29
  4. package/dist/esm/index.min.js.map +4 -4
  5. package/dist/esm/src/formatters/OriginalFormatRestorer.d.ts +40 -0
  6. package/dist/esm/src/formatters/OriginalFormatRestorer.js +135 -0
  7. package/dist/esm/src/formatters/OriginalFormatRestorer.js.map +1 -0
  8. package/dist/esm/src/index.d.ts +11 -0
  9. package/dist/esm/src/index.js +9 -0
  10. package/dist/esm/src/index.js.map +1 -1
  11. package/dist/esm/src/models/FormattingLexeme.d.ts +66 -0
  12. package/dist/esm/src/models/FormattingLexeme.js +2 -0
  13. package/dist/esm/src/models/FormattingLexeme.js.map +1 -0
  14. package/dist/esm/src/models/ValueComponent.d.ts +3 -1
  15. package/dist/esm/src/models/ValueComponent.js +3 -1
  16. package/dist/esm/src/models/ValueComponent.js.map +1 -1
  17. package/dist/esm/src/parsers/FunctionExpressionParser.d.ts +12 -0
  18. package/dist/esm/src/parsers/FunctionExpressionParser.js +111 -7
  19. package/dist/esm/src/parsers/FunctionExpressionParser.js.map +1 -1
  20. package/dist/esm/src/parsers/KeywordParser.d.ts +1 -0
  21. package/dist/esm/src/parsers/KeywordParser.js +10 -4
  22. package/dist/esm/src/parsers/KeywordParser.js.map +1 -1
  23. package/dist/esm/src/parsers/SqlPrintTokenParser.js +8 -0
  24. package/dist/esm/src/parsers/SqlPrintTokenParser.js.map +1 -1
  25. package/dist/esm/src/parsers/SqlTokenizer.d.ts +42 -2
  26. package/dist/esm/src/parsers/SqlTokenizer.js +213 -12
  27. package/dist/esm/src/parsers/SqlTokenizer.js.map +1 -1
  28. package/dist/esm/src/tokenReaders/CommandTokenReader.d.ts +3 -0
  29. package/dist/esm/src/tokenReaders/CommandTokenReader.js +4 -1
  30. package/dist/esm/src/tokenReaders/CommandTokenReader.js.map +1 -1
  31. package/dist/esm/src/transformers/AliasRenamer.d.ts +199 -0
  32. package/dist/esm/src/transformers/AliasRenamer.js +595 -0
  33. package/dist/esm/src/transformers/AliasRenamer.js.map +1 -0
  34. package/dist/esm/src/transformers/CTERenamer.d.ts +53 -0
  35. package/dist/esm/src/transformers/CTERenamer.js +138 -0
  36. package/dist/esm/src/transformers/CTERenamer.js.map +1 -1
  37. package/dist/esm/src/transformers/DynamicQueryBuilder.d.ts +72 -0
  38. package/dist/esm/src/transformers/DynamicQueryBuilder.js +42 -0
  39. package/dist/esm/src/transformers/DynamicQueryBuilder.js.map +1 -1
  40. package/dist/esm/src/transformers/FilterableItemCollector.d.ts +80 -0
  41. package/dist/esm/src/transformers/FilterableItemCollector.js +254 -0
  42. package/dist/esm/src/transformers/FilterableItemCollector.js.map +1 -0
  43. package/dist/esm/src/transformers/SelectableColumnCollector.d.ts +3 -0
  44. package/dist/esm/src/transformers/SelectableColumnCollector.js +68 -7
  45. package/dist/esm/src/transformers/SelectableColumnCollector.js.map +1 -1
  46. package/dist/esm/src/transformers/SmartRenamer.d.ts +134 -0
  47. package/dist/esm/src/transformers/SmartRenamer.js +430 -0
  48. package/dist/esm/src/transformers/SmartRenamer.js.map +1 -0
  49. package/dist/esm/src/transformers/SqlIdentifierRenamer.d.ts +150 -0
  50. package/dist/esm/src/transformers/SqlIdentifierRenamer.js +493 -0
  51. package/dist/esm/src/transformers/SqlIdentifierRenamer.js.map +1 -0
  52. package/dist/esm/src/transformers/SqlParamInjector.d.ts +27 -0
  53. package/dist/esm/src/transformers/SqlParamInjector.js +304 -16
  54. package/dist/esm/src/transformers/SqlParamInjector.js.map +1 -1
  55. package/dist/esm/src/transformers/SqlSortInjector.js +6 -3
  56. package/dist/esm/src/transformers/SqlSortInjector.js.map +1 -1
  57. package/dist/esm/src/transformers/UpstreamSelectQueryFinder.js +5 -2
  58. package/dist/esm/src/transformers/UpstreamSelectQueryFinder.js.map +1 -1
  59. package/dist/esm/src/utils/LexemeCursor.d.ts +41 -0
  60. package/dist/esm/src/utils/LexemeCursor.js +93 -0
  61. package/dist/esm/src/utils/LexemeCursor.js.map +1 -1
  62. package/dist/esm/tsconfig.browser.tsbuildinfo +1 -1
  63. package/dist/index.min.js +37 -29
  64. package/dist/index.min.js.map +4 -4
  65. package/dist/src/formatters/OriginalFormatRestorer.d.ts +40 -0
  66. package/dist/src/formatters/OriginalFormatRestorer.js +139 -0
  67. package/dist/src/formatters/OriginalFormatRestorer.js.map +1 -0
  68. package/dist/src/index.d.ts +11 -0
  69. package/dist/src/index.js +11 -1
  70. package/dist/src/index.js.map +1 -1
  71. package/dist/src/models/FormattingLexeme.d.ts +66 -0
  72. package/dist/src/models/FormattingLexeme.js +3 -0
  73. package/dist/src/models/FormattingLexeme.js.map +1 -0
  74. package/dist/src/models/ValueComponent.d.ts +3 -1
  75. package/dist/src/models/ValueComponent.js +3 -1
  76. package/dist/src/models/ValueComponent.js.map +1 -1
  77. package/dist/src/parsers/FunctionExpressionParser.d.ts +12 -0
  78. package/dist/src/parsers/FunctionExpressionParser.js +110 -6
  79. package/dist/src/parsers/FunctionExpressionParser.js.map +1 -1
  80. package/dist/src/parsers/KeywordParser.d.ts +1 -0
  81. package/dist/src/parsers/KeywordParser.js +10 -4
  82. package/dist/src/parsers/KeywordParser.js.map +1 -1
  83. package/dist/src/parsers/SqlPrintTokenParser.js +8 -0
  84. package/dist/src/parsers/SqlPrintTokenParser.js.map +1 -1
  85. package/dist/src/parsers/SqlTokenizer.d.ts +42 -2
  86. package/dist/src/parsers/SqlTokenizer.js +222 -12
  87. package/dist/src/parsers/SqlTokenizer.js.map +1 -1
  88. package/dist/src/tokenReaders/CommandTokenReader.d.ts +3 -0
  89. package/dist/src/tokenReaders/CommandTokenReader.js +5 -2
  90. package/dist/src/tokenReaders/CommandTokenReader.js.map +1 -1
  91. package/dist/src/transformers/AliasRenamer.d.ts +199 -0
  92. package/dist/src/transformers/AliasRenamer.js +599 -0
  93. package/dist/src/transformers/AliasRenamer.js.map +1 -0
  94. package/dist/src/transformers/CTERenamer.d.ts +53 -0
  95. package/dist/src/transformers/CTERenamer.js +138 -0
  96. package/dist/src/transformers/CTERenamer.js.map +1 -1
  97. package/dist/src/transformers/DynamicQueryBuilder.d.ts +72 -0
  98. package/dist/src/transformers/DynamicQueryBuilder.js +42 -0
  99. package/dist/src/transformers/DynamicQueryBuilder.js.map +1 -1
  100. package/dist/src/transformers/FilterableItemCollector.d.ts +80 -0
  101. package/dist/src/transformers/FilterableItemCollector.js +259 -0
  102. package/dist/src/transformers/FilterableItemCollector.js.map +1 -0
  103. package/dist/src/transformers/SelectableColumnCollector.d.ts +3 -0
  104. package/dist/src/transformers/SelectableColumnCollector.js +67 -6
  105. package/dist/src/transformers/SelectableColumnCollector.js.map +1 -1
  106. package/dist/src/transformers/SmartRenamer.d.ts +134 -0
  107. package/dist/src/transformers/SmartRenamer.js +442 -0
  108. package/dist/src/transformers/SmartRenamer.js.map +1 -0
  109. package/dist/src/transformers/SqlIdentifierRenamer.d.ts +150 -0
  110. package/dist/src/transformers/SqlIdentifierRenamer.js +497 -0
  111. package/dist/src/transformers/SqlIdentifierRenamer.js.map +1 -0
  112. package/dist/src/transformers/SqlParamInjector.d.ts +27 -0
  113. package/dist/src/transformers/SqlParamInjector.js +303 -15
  114. package/dist/src/transformers/SqlParamInjector.js.map +1 -1
  115. package/dist/src/transformers/SqlSortInjector.js +5 -2
  116. package/dist/src/transformers/SqlSortInjector.js.map +1 -1
  117. package/dist/src/transformers/UpstreamSelectQueryFinder.js +4 -1
  118. package/dist/src/transformers/UpstreamSelectQueryFinder.js.map +1 -1
  119. package/dist/src/utils/LexemeCursor.d.ts +41 -0
  120. package/dist/src/utils/LexemeCursor.js +93 -0
  121. package/dist/src/utils/LexemeCursor.js.map +1 -1
  122. package/dist/tsconfig.tsbuildinfo +1 -1
  123. package/package.json +1 -1
package/dist/index.min.js CHANGED
@@ -1,29 +1,37 @@
1
- "use strict";var ti=Object.defineProperty;var Li=Object.getOwnPropertyDescriptor;var Ri=Object.getOwnPropertyNames;var Bi=Object.prototype.hasOwnProperty;var Vi=(o,e)=>{for(var t in e)ti(o,t,{get:e[t],enumerable:!0})},$i=(o,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Ri(e))!Bi.call(o,i)&&i!==t&&ti(o,i,{get:()=>e[i],enumerable:!(n=Li(e,i))||n.enumerable});return o};var Mi=o=>$i(ti({},"__esModule",{value:!0}),o);var pr={};Vi(pr,{ArrayExpression:()=>fe,ArrayIndexExpression:()=>et,ArrayQueryExpression:()=>Ce,ArraySliceExpression:()=>Ze,BetweenExpression:()=>ye,BinaryExpression:()=>y,BinarySelectQuery:()=>Q,CTECollector:()=>Z,CTEComposer:()=>qt,CTEDependencyAnalyzer:()=>rt,CTEDisabler:()=>ht,CTENormalizer:()=>Ke,CTENotFoundError:()=>Nt,CTEQueryDecomposer:()=>ci,CTERegionDetector:()=>vt,CTERenamer:()=>pi,CTETableReferenceCollector:()=>Dt,CaseExpression:()=>ee,CaseKeyValuePair:()=>Se,CastExpression:()=>se,ColumnReference:()=>v,ColumnReferenceCollector:()=>Kt,CommentEditor:()=>jt,DuplicateCTEError:()=>It,DuplicateDetectionMode:()=>On,DynamicQueryBuilder:()=>vi,Formatter:()=>it,FunctionCall:()=>D,IdentifierString:()=>x,InlineQuery:()=>ge,InsertQuery:()=>He,InsertQueryParser:()=>ui,InvalidCTENameError:()=>Ct,JsonMappingConverter:()=>Qt,JsonSchemaValidator:()=>Si,LexemeCursor:()=>Wt,LiteralValue:()=>G,ParameterExpression:()=>T,ParenExpression:()=>H,PostgresJsonQueryBuilder:()=>_t,QualifiedName:()=>Ve,QueryBuilder:()=>Ae,QueryFlowDiagramGenerator:()=>wi,RawString:()=>R,SchemaCollector:()=>Ut,SchemaManager:()=>Lt,SelectQueryParser:()=>A,SelectValueCollector:()=>Oe,SelectableColumnCollector:()=>ke,SimpleSelectQuery:()=>C,SqlComponent:()=>f,SqlDialectConfiguration:()=>ni,SqlFormatter:()=>Be,SqlPaginationInjector:()=>sn,SqlParamInjector:()=>nn,SqlSchemaValidator:()=>Jt,SqlSortInjector:()=>rn,StringSpecifierExpression:()=>Fe,SwitchCaseArgument:()=>ve,TableSchema:()=>Xe,TableSourceCollector:()=>nt,TokenType:()=>M,TupleExpression:()=>Ee,TypeTransformationPostProcessor:()=>Ht,TypeTransformers:()=>ar,TypeValue:()=>Pe,UnaryExpression:()=>Y,UpstreamSelectQueryFinder:()=>yt,VALID_PRESETS:()=>ir,ValueList:()=>q,ValuesQuery:()=>le,WindowFrameBound:()=>ri,WindowFrameBoundStatic:()=>ct,WindowFrameBoundaryValue:()=>pt,WindowFrameExpression:()=>Ne,WindowFrameSpec:()=>Je,WindowFrameType:()=>ii,WithClauseParser:()=>wt,convertColumnsToLegacy:()=>zt,convertModelDrivenMapping:()=>Hn,convertToLegacyJsonMapping:()=>rr,createJsonMappingFromSchema:()=>cr,createSchemaManager:()=>lr,createTableColumnResolver:()=>ur,extractTypeProtection:()=>di,isLegacyFormat:()=>Oi,isModelDrivenFormat:()=>Pi,isUnifiedFormat:()=>Qi,processJsonMapping:()=>Ii,toLegacyMapping:()=>mi,transformDatabaseResult:()=>or,unifyJsonMapping:()=>Ni,validateModelDrivenMapping:()=>ki});module.exports=Mi(pr);var f=class{constructor(){this.comments=null}getKind(){return this.constructor.kind}accept(e){return e.visit(this)}toSqlString(e){return this.accept(e)}},ni=class{constructor(){this.parameterSymbol=":";this.identifierEscape={start:'"',end:'"'};this.exportComment=!0}};var He=class extends f{static{this.kind=Symbol("InsertQuery")}constructor(e){super(),this.insertClause=e.insertClause,this.selectQuery=e.selectQuery??null}};var ge=class extends f{static{this.kind=Symbol("InlineQuery")}constructor(e){super(),this.selectQuery=e}},q=class extends f{static{this.kind=Symbol("ValueList")}constructor(e){super(),this.values=e}},v=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 Ve(Ei(e),n)}toString(){return this.qualifiedName.toString()}getNamespace(){return this.qualifiedName.namespaces?this.qualifiedName.namespaces.map(e=>e.name).join("."):""}},D=class extends f{static{this.kind=Symbol("FunctionCall")}constructor(e,t,n,i,r=null){super(),this.qualifiedName=new Ve(e,t),this.argument=n,this.over=i,this.withinGroup=r}get namespaces(){return this.qualifiedName.namespaces}get name(){return this.qualifiedName.name}},ii=(n=>(n.Rows="rows",n.Range="range",n.Groups="groups",n))(ii||{}),ri=(n=>(n.UnboundedPreceding="unbounded preceding",n.UnboundedFollowing="unbounded following",n.CurrentRow="current row",n))(ri||{}),ct=class extends f{static{this.kind=Symbol("WindowFrameStaticBound")}constructor(e){super(),this.bound=e}},pt=class extends f{static{this.kind=Symbol("WindowFrameBoundary")}constructor(e,t){super(),this.value=e,this.isFollowing=t}},Je=class extends f{static{this.kind=Symbol("WindowFrameSpec")}constructor(e,t,n){super(),this.frameType=e,this.startBound=t,this.endBound=n}},Ne=class extends f{static{this.kind=Symbol("WindowFrameExpression")}constructor(e,t,n=null){super(),this.partition=e,this.order=t,this.frameSpec=n}},Y=class extends f{static{this.kind=Symbol("UnaryExpression")}constructor(e,t){super(),this.operator=new R(e),this.expression=t}},y=class extends f{static{this.kind=Symbol("BinaryExpression")}constructor(e,t,n){super(),this.left=e,this.operator=new R(t),this.right=n}},G=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 R(e),this.value=t,this.index=null}},ve=class extends f{static{this.kind=Symbol("SwitchCaseArgument")}constructor(e,t=null){super(),this.cases=e,this.elseValue=t}},Se=class extends f{static{this.kind=Symbol("CaseKeyValuePair")}constructor(e,t){super(),this.key=e,this.value=t}},R=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}},H=class extends f{static{this.kind=Symbol("ParenExpression")}constructor(e){super(),this.expression=e}},se=class extends f{static{this.kind=Symbol("CastExpression")}constructor(e,t){super(),this.input=e,this.castType=t}},ee=class extends f{static{this.kind=Symbol("CaseExpression")}constructor(e,t){super(),this.condition=e,this.switchCase=t}},fe=class extends f{static{this.kind=Symbol("ArrayExpression")}constructor(e){super(),this.expression=e}},Ce=class extends f{static{this.kind=Symbol("ArrayQueryExpression")}constructor(e){super(),this.query=e}},ye=class extends f{static{this.kind=Symbol("BetweenExpression")}constructor(e,t,n,i){super(),this.expression=e,this.lower=t,this.upper=n,this.negated=i}},Fe=class extends f{static{this.kind=Symbol("StringSpecifierExpression")}constructor(e,t){super(),this.specifier=new R(e),this.value=new G(t)}},Pe=class extends f{static{this.kind=Symbol("TypeValue")}constructor(e,t,n=null){super(),this.qualifiedName=new Ve(e,t),this.argument=n}get namespaces(){return this.qualifiedName.namespaces}get name(){return this.qualifiedName.name}getTypeName(){let e=this.qualifiedName.name instanceof R?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}},Ze=class extends f{static{this.kind=Symbol("ArraySliceExpression")}constructor(e,t,n){super(),this.array=e,this.startIndex=t,this.endIndex=n}},et=class extends f{static{this.kind=Symbol("ArrayIndexExpression")}constructor(e,t){super(),this.array=e,this.index=t}};function Ei(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 Ve=class extends f{static{this.kind=Symbol("QualifiedName")}constructor(e,t){super(),this.namespaces=Ei(e),typeof t=="string"?this.name=new R(t):this.name=t}toString(){let e=this.name instanceof R?this.name.value:this.name.name;return this.namespaces&&this.namespaces.length>0?this.namespaces.map(t=>t.name).join(".")+"."+e:e}};var K=class extends f{static{this.kind=Symbol("SelectItem")}constructor(e,t=null){super(),this.value=e,this.identifier=t?new x(t):null}},J=class extends f{static{this.kind=Symbol("SelectClause")}constructor(e,t=null,n=[]){super(),this.items=e,this.distinct=t,this.hints=n}},St=class extends f{static{this.kind=Symbol("Distinct")}constructor(){super()}},Et=class extends f{static{this.kind=Symbol("DistinctOn")}constructor(e){super(),this.value=e}},ie=class extends f{static{this.kind=Symbol("WhereClause")}constructor(e){super(),this.condition=e}},$e=class extends f{static{this.kind=Symbol("PartitionByClause")}constructor(e){super(),this.value=e}},be=class extends f{static{this.kind=Symbol("WindowFrameClause")}constructor(e,t){super(),this.name=new x(e),this.expression=t}},Ge=class extends f{static{this.kind=Symbol("WindowsClause")}constructor(e){super(),this.windows=e}};var ue=class extends f{static{this.kind=Symbol("OrderByClause")}constructor(e){super(),this.order=e}},xe=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}},ce=class extends f{static{this.kind=Symbol("GroupByClause")}constructor(e){super(),this.grouping=e}},pe=class extends f{static{this.kind=Symbol("HavingClause")}constructor(e){super(),this.condition=e}},O=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 Ve(e,n)}getSourceName(){return this.qualifiedName.namespaces&&this.qualifiedName.namespaces.length>0?this.qualifiedName.namespaces.map(e=>e.name).join(".")+"."+(this.qualifiedName.name instanceof R?this.qualifiedName.name.value:this.qualifiedName.name.name):this.qualifiedName.name instanceof R?this.qualifiedName.name.value:this.qualifiedName.name.name}},qe=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 Ve(n.namespaces,n.name)}else this.qualifiedName=new Ve(null,e);this.argument=t}get namespaces(){return this.qualifiedName.namespaces}get name(){return this.qualifiedName.name}},Le=class extends f{static{this.kind=Symbol("ParenSource")}constructor(e){super(),this.source=e}},j=class extends f{static{this.kind=Symbol("SubQuerySource")}constructor(e){super(),this.query=e}},B=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 O?this.datasource.getSourceName():null}},me=class extends f{static{this.kind=Symbol("JoinOnClause")}constructor(e){super(),this.condition=e}},we=class extends f{static{this.kind=Symbol("JoinUsingClause")}constructor(e){super(),this.condition=e}},de=class extends f{static{this.kind=Symbol("JoinItem")}constructor(e,t,n,i){super(),this.joinType=new R(e),this.source=t,this.condition=n,this.lateral=i}getSourceAliasName(){return this.source.aliasExpression?this.source.aliasExpression.table.name:this.source instanceof O?this.source.table.name:null}},U=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 O?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}},te=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 ne(t,null):this.aliasExpression=t}getSourceAliasName(){return this.aliasExpression.table.name}},oe=class extends f{static{this.kind=Symbol("WithClause")}constructor(e,t){super(),this.recursive=e,this.tables=t}},re=class extends f{static{this.kind=Symbol("LimitClause")}constructor(e){super(),this.value=e}};var Qe=class extends f{static{this.kind=Symbol("OffsetClause")}constructor(e){super(),this.value=e}},Me=class extends f{static{this.kind=Symbol("FetchClause")}constructor(e){super(),this.expression=e}},mt=class extends f{static{this.kind=Symbol("FetchExpression")}constructor(e,t,n){super(),this.type=e,this.count=t,this.unit=n}};var Te=class extends f{static{this.kind=Symbol("ForClause")}constructor(e){super(),this.lockMode=e}},ne=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}},on=class extends f{static{this.kind=Symbol("ReturningClause")}constructor(e){super(),this.columns=e.map(t=>typeof t=="string"?new x(t):t)}},tt=class extends f{static{this.kind=Symbol("SetClause")}constructor(e){super(),this.items=e.map(t=>t instanceof st?t:new st(t.column,t.value))}},st=class extends f{static{this.kind=Symbol("SetClauseItem")}constructor(e,t){if(super(),typeof e=="object"&&e!==null&&"column"in e){let n=e,i=typeof n.column=="string"?new x(n.column):n.column;this.qualifiedName=new Ve(n.namespaces,i)}else{let n=typeof e=="string"?new x(e):e;this.qualifiedName=new Ve(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()}},bt=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 O?this.source.datasource.table.name:null}},ot=class extends f{constructor(e,t){super(),this.source=e,this.columns=t.map(n=>new x(n))}};var M=(d=>(d[d.None=0]="None",d[d.Literal=1]="Literal",d[d.Operator=2]="Operator",d[d.OpenParen=4]="OpenParen",d[d.CloseParen=8]="CloseParen",d[d.Comma=16]="Comma",d[d.Dot=32]="Dot",d[d.Identifier=64]="Identifier",d[d.Command=128]="Command",d[d.Parameter=256]="Parameter",d[d.OpenBracket=512]="OpenBracket",d[d.CloseBracket=1024]="CloseBracket",d[d.Function=2048]="Function",d[d.StringSpecifier=4096]="StringSpecifier",d[d.Type=8192]="Type",d))(M||{});var X=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 he=class o{static getDebugPositionInfo(e,t){let n=Math.max(0,t-5),i=Math.min(e.length,t+5),r=e.slice(n,i),s=" ".repeat(t-n)+"^";return`${r}
1
+ "use strict";var ui=Object.defineProperty;var Ji=Object.getOwnPropertyDescriptor;var Ki=Object.getOwnPropertyNames;var _i=Object.prototype.hasOwnProperty;var zi=(a,e)=>{for(var t in e)ui(a,t,{get:e[t],enumerable:!0})},qi=(a,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Ki(e))!_i.call(a,i)&&i!==t&&ui(a,i,{get:()=>e[i],enumerable:!(n=Ji(e,i))||n.enumerable});return a};var Gi=a=>qi(ui({},"__esModule",{value:!0}),a);var wr={};zi(wr,{AliasRenamer:()=>en,ArrayExpression:()=>ge,ArrayIndexExpression:()=>Ye,ArrayQueryExpression:()=>ve,ArraySliceExpression:()=>He,BetweenExpression:()=>we,BinaryExpression:()=>w,BinarySelectQuery:()=>F,CTECollector:()=>te,CTEComposer:()=>Xt,CTEDependencyAnalyzer:()=>ct,CTEDisabler:()=>St,CTENormalizer:()=>Xe,CTENotFoundError:()=>$t,CTEQueryDecomposer:()=>gi,CTERegionDetector:()=>ut,CTERenamer:()=>Zt,CTETableReferenceCollector:()=>Gt,CaseExpression:()=>ne,CaseKeyValuePair:()=>xe,CastExpression:()=>ae,ColumnReference:()=>b,ColumnReferenceCollector:()=>Pt,CommentEditor:()=>Ht,DuplicateCTEError:()=>Vt,DuplicateDetectionMode:()=>ft,DynamicQueryBuilder:()=>bi,FilterableItem:()=>At,FilterableItemCollector:()=>Si,Formatter:()=>lt,FunctionCall:()=>U,IdentifierString:()=>k,InlineQuery:()=>me,InsertQuery:()=>nt,InsertQueryParser:()=>yi,InvalidCTENameError:()=>Et,JsonMappingConverter:()=>Wt,JsonSchemaValidator:()=>Li,LexemeCursor:()=>Ke,LiteralValue:()=>X,OriginalFormatRestorer:()=>wi,ParameterExpression:()=>N,ParenExpression:()=>Y,PostgresJsonQueryBuilder:()=>nn,QualifiedName:()=>De,QueryBuilder:()=>Be,QueryFlowDiagramGenerator:()=>Ai,RawString:()=>B,SchemaCollector:()=>It,SchemaManager:()=>Ut,SelectQueryParser:()=>L,SelectValueCollector:()=>We,SelectableColumnCollector:()=>be,SimpleSelectQuery:()=>f,SmartRenamer:()=>vi,SqlComponent:()=>g,SqlDialectConfiguration:()=>ci,SqlFormatter:()=>Ae,SqlIdentifierRenamer:()=>tn,SqlPaginationInjector:()=>on,SqlParamInjector:()=>rn,SqlSchemaValidator:()=>Yt,SqlSortInjector:()=>sn,StringSpecifierExpression:()=>Ve,SwitchCaseArgument:()=>Ee,TableSchema:()=>ot,TableSourceCollector:()=>Ge,TokenType:()=>$,TupleExpression:()=>Te,TypeTransformationPostProcessor:()=>ln,TypeTransformers:()=>Cr,TypeValue:()=>Qe,UnaryExpression:()=>Z,UpstreamSelectQueryFinder:()=>xt,VALID_PRESETS:()=>mr,ValueList:()=>j,ValuesQuery:()=>pe,WindowFrameBound:()=>mi,WindowFrameBoundStatic:()=>yt,WindowFrameBoundaryValue:()=>gt,WindowFrameExpression:()=>Fe,WindowFrameSpec:()=>ze,WindowFrameType:()=>pi,WithClauseParser:()=>kt,convertColumnsToLegacy:()=>an,convertModelDrivenMapping:()=>ri,convertToLegacyJsonMapping:()=>dr,createJsonMappingFromSchema:()=>vr,createSchemaManager:()=>yr,createTableColumnResolver:()=>gr,extractTypeProtection:()=>xi,isLegacyFormat:()=>Di,isModelDrivenFormat:()=>Mi,isUnifiedFormat:()=>Wi,processJsonMapping:()=>Vi,toLegacyMapping:()=>Ei,transformDatabaseResult:()=>fr,unifyJsonMapping:()=>$i,validateModelDrivenMapping:()=>Bi});module.exports=Gi(wr);var g=class{constructor(){this.comments=null}getKind(){return this.constructor.kind}accept(e){return e.visit(this)}toSqlString(e){return this.accept(e)}},ci=class{constructor(){this.parameterSymbol=":";this.identifierEscape={start:'"',end:'"'};this.exportComment=!0}};var nt=class extends g{static{this.kind=Symbol("InsertQuery")}constructor(e){super(),this.insertClause=e.insertClause,this.selectQuery=e.selectQuery??null}};var me=class extends g{static{this.kind=Symbol("InlineQuery")}constructor(e){super(),this.selectQuery=e}},j=class extends g{static{this.kind=Symbol("ValueList")}constructor(e){super(),this.values=e}},b=class extends g{get namespaces(){return this.qualifiedName.namespaces}get column(){return this.qualifiedName.name instanceof k?this.qualifiedName.name:new k(this.qualifiedName.name.value)}static{this.kind=Symbol("ColumnReference")}constructor(e,t){super();let n=typeof t=="string"?new k(t):t;this.qualifiedName=new De(Fi(e),n)}toString(){return this.qualifiedName.toString()}getNamespace(){return this.qualifiedName.namespaces?this.qualifiedName.namespaces.map(e=>e.name).join("."):""}},U=class extends g{static{this.kind=Symbol("FunctionCall")}constructor(e,t,n,i,r=null,s=!1,o=null){super(),this.qualifiedName=new De(e,t),this.argument=n,this.over=i,this.withinGroup=r,this.withOrdinality=s,this.internalOrderBy=o}get namespaces(){return this.qualifiedName.namespaces}get name(){return this.qualifiedName.name}},pi=(n=>(n.Rows="rows",n.Range="range",n.Groups="groups",n))(pi||{}),mi=(n=>(n.UnboundedPreceding="unbounded preceding",n.UnboundedFollowing="unbounded following",n.CurrentRow="current row",n))(mi||{}),yt=class extends g{static{this.kind=Symbol("WindowFrameStaticBound")}constructor(e){super(),this.bound=e}},gt=class extends g{static{this.kind=Symbol("WindowFrameBoundary")}constructor(e,t){super(),this.value=e,this.isFollowing=t}},ze=class extends g{static{this.kind=Symbol("WindowFrameSpec")}constructor(e,t,n){super(),this.frameType=e,this.startBound=t,this.endBound=n}},Fe=class extends g{static{this.kind=Symbol("WindowFrameExpression")}constructor(e,t,n=null){super(),this.partition=e,this.order=t,this.frameSpec=n}},Z=class extends g{static{this.kind=Symbol("UnaryExpression")}constructor(e,t){super(),this.operator=new B(e),this.expression=t}},w=class extends g{static{this.kind=Symbol("BinaryExpression")}constructor(e,t,n){super(),this.left=e,this.operator=new B(t),this.right=n}},X=class extends g{static{this.kind=Symbol("LiteralExpression")}constructor(e,t){super(),this.value=e,this.isDollarString=t}},N=class extends g{static{this.kind=Symbol("ParameterExpression")}constructor(e,t=null){super(),this.name=new B(e),this.value=t,this.index=null}},Ee=class extends g{static{this.kind=Symbol("SwitchCaseArgument")}constructor(e,t=null){super(),this.cases=e,this.elseValue=t}},xe=class extends g{static{this.kind=Symbol("CaseKeyValuePair")}constructor(e,t){super(),this.key=e,this.value=t}},B=class extends g{static{this.kind=Symbol("RawString")}constructor(e){super(),this.value=e}},k=class extends g{static{this.kind=Symbol("IdentifierString")}constructor(e){super(),this.name=e}},Y=class extends g{static{this.kind=Symbol("ParenExpression")}constructor(e){super(),this.expression=e}},ae=class extends g{static{this.kind=Symbol("CastExpression")}constructor(e,t){super(),this.input=e,this.castType=t}},ne=class extends g{static{this.kind=Symbol("CaseExpression")}constructor(e,t){super(),this.condition=e,this.switchCase=t}},ge=class extends g{static{this.kind=Symbol("ArrayExpression")}constructor(e){super(),this.expression=e}},ve=class extends g{static{this.kind=Symbol("ArrayQueryExpression")}constructor(e){super(),this.query=e}},we=class extends g{static{this.kind=Symbol("BetweenExpression")}constructor(e,t,n,i){super(),this.expression=e,this.lower=t,this.upper=n,this.negated=i}},Ve=class extends g{static{this.kind=Symbol("StringSpecifierExpression")}constructor(e,t){super(),this.specifier=new B(e),this.value=new X(t)}},Qe=class extends g{static{this.kind=Symbol("TypeValue")}constructor(e,t,n=null){super(),this.qualifiedName=new De(e,t),this.argument=n}get namespaces(){return this.qualifiedName.namespaces}get name(){return this.qualifiedName.name}getTypeName(){let e=this.qualifiedName.name instanceof B?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}},Te=class extends g{static{this.kind=Symbol("TupleExpression")}constructor(e){super(),this.values=e}},He=class extends g{static{this.kind=Symbol("ArraySliceExpression")}constructor(e,t,n){super(),this.array=e,this.startIndex=t,this.endIndex=n}},Ye=class extends g{static{this.kind=Symbol("ArrayIndexExpression")}constructor(e,t){super(),this.array=e,this.index=t}};function Fi(a){if(a==null)return null;if(typeof a=="string")return a.trim()===""?null:[new k(a)];if(Array.isArray(a)){if(a.length===0)return null;if(typeof a[0]=="string"){let e=a.filter(t=>t.trim()!=="");return e.length===0?null:e.map(t=>new k(t))}else{let e=a.filter(t=>t.name.trim()!=="");return e.length===0?null:e}}return null}var De=class extends g{static{this.kind=Symbol("QualifiedName")}constructor(e,t){super(),this.namespaces=Fi(e),typeof t=="string"?this.name=new B(t):this.name=t}toString(){let e=this.name instanceof B?this.name.value:this.name.name;return this.namespaces&&this.namespaces.length>0?this.namespaces.map(t=>t.name).join(".")+"."+e:e}};var z=class extends g{static{this.kind=Symbol("SelectItem")}constructor(e,t=null){super(),this.value=e,this.identifier=t?new k(t):null}},_=class extends g{static{this.kind=Symbol("SelectClause")}constructor(e,t=null,n=[]){super(),this.items=e,this.distinct=t,this.hints=n}},Lt=class extends g{static{this.kind=Symbol("Distinct")}constructor(){super()}},Ft=class extends g{static{this.kind=Symbol("DistinctOn")}constructor(e){super(),this.value=e}},se=class extends g{static{this.kind=Symbol("WhereClause")}constructor(e){super(),this.condition=e}},je=class extends g{static{this.kind=Symbol("PartitionByClause")}constructor(e){super(),this.value=e}},Ie=class extends g{static{this.kind=Symbol("WindowFrameClause")}constructor(e,t){super(),this.name=new k(e),this.expression=t}},it=class extends g{static{this.kind=Symbol("WindowsClause")}constructor(e){super(),this.windows=e}};var de=class extends g{static{this.kind=Symbol("OrderByClause")}constructor(e){super(),this.order=e}},Pe=class extends g{static{this.kind=Symbol("OrderByItem")}constructor(e,t,n){super(),this.value=e,this.sortDirection=t===null?"asc":t,this.nullsPosition=n}},he=class extends g{static{this.kind=Symbol("GroupByClause")}constructor(e){super(),this.grouping=e}},fe=class extends g{static{this.kind=Symbol("HavingClause")}constructor(e){super(),this.condition=e}},Q=class extends g{static{this.kind=Symbol("TableSource")}get namespaces(){return this.qualifiedName.namespaces}get table(){return this.qualifiedName.name instanceof k?this.qualifiedName.name:new k(this.qualifiedName.name.value)}get identifier(){return this.table}constructor(e,t){super();let n=typeof t=="string"?new k(t):t;this.qualifiedName=new De(e,n)}getSourceName(){return this.qualifiedName.namespaces&&this.qualifiedName.namespaces.length>0?this.qualifiedName.namespaces.map(e=>e.name).join(".")+"."+(this.qualifiedName.name instanceof B?this.qualifiedName.name.value:this.qualifiedName.name.name):this.qualifiedName.name instanceof B?this.qualifiedName.name.value:this.qualifiedName.name.name}},qe=class extends g{static{this.kind=Symbol("FunctionSource")}constructor(e,t){if(super(),typeof e=="object"&&e!==null&&"name"in e){let n=e;this.qualifiedName=new De(n.namespaces,n.name)}else this.qualifiedName=new De(null,e);this.argument=t}get namespaces(){return this.qualifiedName.namespaces}get name(){return this.qualifiedName.name}},$e=class extends g{static{this.kind=Symbol("ParenSource")}constructor(e){super(),this.source=e}},J=class extends g{static{this.kind=Symbol("SubQuerySource")}constructor(e){super(),this.query=e}},V=class extends g{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 Q?this.datasource.getSourceName():null}},Ce=class extends g{static{this.kind=Symbol("JoinOnClause")}constructor(e){super(),this.condition=e}},Se=class extends g{static{this.kind=Symbol("JoinUsingClause")}constructor(e){super(),this.condition=e}},ye=class extends g{static{this.kind=Symbol("JoinItem")}constructor(e,t,n,i){super(),this.joinType=new B(e),this.source=t,this.condition=n,this.lateral=i}getSourceAliasName(){return this.source.aliasExpression?this.source.aliasExpression.table.name:this.source instanceof Q?this.source.table.name:null}},K=class extends g{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 Q?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}},ie=class extends g{static{this.kind=Symbol("CommonTable")}constructor(e,t,n){super(),this.query=e,this.materialized=n,typeof t=="string"?this.aliasExpression=new re(t,null):this.aliasExpression=t}getSourceAliasName(){return this.aliasExpression.table.name}},le=class extends g{static{this.kind=Symbol("WithClause")}constructor(e,t){super(),this.recursive=e,this.tables=t}},oe=class extends g{static{this.kind=Symbol("LimitClause")}constructor(e){super(),this.value=e}};var Oe=class extends g{static{this.kind=Symbol("OffsetClause")}constructor(e){super(),this.value=e}},Ue=class extends g{static{this.kind=Symbol("FetchClause")}constructor(e){super(),this.expression=e}},vt=class extends g{static{this.kind=Symbol("FetchExpression")}constructor(e,t,n){super(),this.type=e,this.count=t,this.unit=n}};var Ne=class extends g{static{this.kind=Symbol("ForClause")}constructor(e){super(),this.lockMode=e}},re=class extends g{static{this.kind=Symbol("SourceAliasExpression")}constructor(e,t){super(),this.table=new k(e),this.columns=t!==null?t.map(n=>new k(n)):null}},fn=class extends g{static{this.kind=Symbol("ReturningClause")}constructor(e){super(),this.columns=e.map(t=>typeof t=="string"?new k(t):t)}},at=class extends g{static{this.kind=Symbol("SetClause")}constructor(e){super(),this.items=e.map(t=>t instanceof pt?t:new pt(t.column,t.value))}},pt=class extends g{static{this.kind=Symbol("SetClauseItem")}constructor(e,t){if(super(),typeof e=="object"&&e!==null&&"column"in e){let n=e,i=typeof n.column=="string"?new k(n.column):n.column;this.qualifiedName=new De(n.namespaces,i)}else{let n=typeof e=="string"?new k(e):e;this.qualifiedName=new De(null,n)}this.value=t}get namespaces(){return this.qualifiedName.namespaces}get column(){return this.qualifiedName.name instanceof k?this.qualifiedName.name:new k(this.qualifiedName.name.value)}getFullName(){return this.qualifiedName.toString()}},Qt=class extends g{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 Q?this.source.datasource.table.name:null}},mt=class extends g{constructor(e,t){super(),this.source=e,this.columns=t.map(n=>new k(n))}};var $=(h=>(h[h.None=0]="None",h[h.Literal=1]="Literal",h[h.Operator=2]="Operator",h[h.OpenParen=4]="OpenParen",h[h.CloseParen=8]="CloseParen",h[h.Comma=16]="Comma",h[h.Dot=32]="Dot",h[h.Identifier=64]="Identifier",h[h.Command=128]="Command",h[h.Parameter=256]="Parameter",h[h.OpenBracket=512]="OpenBracket",h[h.CloseBracket=1024]="CloseBracket",h[h.Function=2048]="Function",h[h.StringSpecifier=4096]="StringSpecifier",h[h.Type=8192]="Type",h))($||{});var ee=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 a{static getDebugPositionInfo(e,t){let n=Math.max(0,t-5),i=Math.min(e.length,t+5),r=e.slice(n,i),s=" ".repeat(t-n)+"^";return`${r}
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 i=e.charCodeAt(t);if(i!==32&&i!==9&&i!==10&&i!==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 i=e.slice(n+2,t).trim();return{newPosition:t,comment:i}}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 i=e.slice(n+2,t-2).replace(/\r/g,"").split(`
3
- `);for(let r=0;r<i.length;r++)i[r]=i[r].trim();for(;i.length>0&&i[0]==="";)i.shift();for(;i.length>0&&i[i.length-1]==="";)i.pop();return{newPosition:t,comments:i}}t++}throw new Error(`Block comment is not closed. position: ${t}`)}return{newPosition:t,comments:null}}static readWhiteSpaceAndComment(e,t){let n=[],i=e.length;for(;t<i;){let r=t;if(t=o.skipWhiteSpace(e,t),t!==r)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
- ${o.getDebugPositionInfo(e,t)}`);return n}static tryReadRegularIdentifier(e,t){let n=t;for(;t<e.length&&!X.isDelimiter(e[t]);)t++;if(n===t)return null;for(;t+1<e.length&&e[t]==="["&&e[t+1]==="]";){let i=e.slice(0,n).trim();if(i===""||/[)]$/.test(i)||/\b(select|from|where|and|or|set|values|insert|update|delete)\s*$/i.test(i))break;t+=2}return{identifier:e.slice(n,t),newPosition:t}}};var ae=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,i,r){let s={type:e,value:e===128||e===2||e===2048?t.toLowerCase():t,comments:n};return i!==void 0&&r!==void 0&&(s.position={startPosition:i,endPosition:r}),s}createLexemeWithPosition(e,t,n,i=null){return this.createLexeme(e,t,i,n,n+t.length)}getDebugPositionInfo(e){return he.getDebugPositionInfo(this.input,e)}};var an=class extends ae{tryRead(e){if(this.isEndOfInput())return null;let t=this.input[this.position];if(t==="*")return this.position++,this.createLexeme(64,t);let n=he.readRegularIdentifier(this.input,this.position);return this.position=n.newPosition,this.createLexeme(64,n.identifier)}};var We=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=he.tryReadRegularIdentifier(e,t);if(n===null)return null;let i=this.trie.pushLexeme(n.identifier.toLowerCase());if(i===0)return null;if(i===3)return{keyword:n.identifier,newPosition:n.newPosition};let r=n.identifier;if(t=he.readWhiteSpaceAndComment(e,n.newPosition).position,this.isEndOfInput(e,t))return i===2?{keyword:r,newPosition:t}:null;for(;this.canParse(e,t);){let s=i,a=he.tryReadRegularIdentifier(e,t);if(a!==null){if(i=this.trie.pushLexeme(a.identifier.toLowerCase()),i===0){if(s===2)break;return null}if(r+=" "+a.identifier,t=he.readWhiteSpaceAndComment(e,a.newPosition).position,i===3)break}else{if(s===2)break;return null}}return{keyword:r,newPosition:t}}};var De=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 Wi=[["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"]],Di=new De(Wi),si=new We(Di),ln=class extends ae{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)&&X.isDigit(this.input[this.position+1]))return this.createLexeme(1,this.readDigit());if(t==="'"){let i=this.readSingleQuotedString(!1);return this.createLexeme(1,i)}if(X.isDigit(t))return this.createLexeme(1,this.readDigit());if(t==="$"&&this.isDollarQuotedString())return this.createLexeme(1,this.readDollarQuotedString());if(t==="$"&&this.canRead(1)&&X.isDigit(this.input[this.position+1])){let i=this.position+1,r=!1;for(;i<this.input.length&&(X.isDigit(this.input[i])||this.input[i]===","||this.input[i]===".");){if(this.input[i]==="."||this.input[i]===","){r=!0;break}i++}if(r){let s=this.position;this.position++;let a=this.readMoneyDigit();return this.createLexeme(1,"$"+a)}}if((t==="+"||t==="-")&&this.determineSignOrOperator(e)==="sign"){let i=t;this.position++;let r=this.position;for(;this.canRead()&&X.isWhitespace(this.input[this.position]);)this.position++;if(this.canRead()&&(X.isDigit(this.input[this.position])||this.input[this.position]==="."&&this.canRead(1)&&X.isDigit(this.input[this.position+1])))return this.createLexeme(1,i==="-"?i+this.readDigit():this.readDigit());this.position=r-1}return null}tryReadKeyword(){let e=si.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 i=this.input[this.position+1].toLowerCase();this.position+=2;let r=i==="x";for(;this.canRead();){let s=this.input[this.position];if(X.isDigit(s)||r&&X.isHexChar(s))this.position++;else break}return this.input.slice(e,this.position)}for(this.input[e]==="."&&(t=!0,this.position++);this.canRead();){let i=this.input[this.position];if(i==="."&&!t)t=!0;else if((i==="e"||i==="E")&&!n)n=!0,this.canRead(1)&&(this.input[this.position+1]==="+"||this.input[this.position+1]==="-")&&this.position++;else if(!X.isDigit(i))break;this.position++}if(e===this.position)throw new Error(`Unexpected character. position: ${e}
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(!X.isDigit(n))break}this.position++}if(e===this.position)throw new Error(`Unexpected character. position: ${e}
3
+ `);for(let r=0;r<i.length;r++)i[r]=i[r].trim();for(;i.length>0&&i[0]==="";)i.shift();for(;i.length>0&&i[i.length-1]==="";)i.pop();return{newPosition:t,comments:i}}t++}throw new Error(`Block comment is not closed. position: ${t}`)}return{newPosition:t,comments:null}}static readWhiteSpaceAndComment(e,t){let n=[],i=e.length;for(;t<i;){let r=t;if(t=a.skipWhiteSpace(e,t),t!==r)continue;let s=e.charCodeAt(t);if(s===45){let o=a.readLineComment(e,t);if(o.newPosition!==t){t=o.newPosition,o.comment&&n.push(o.comment.trim());continue}}else if(s===47){let o=a.readBlockComment(e,t);if(o.newPosition!==t){t=o.newPosition,o.comments&&n.push(...o.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
+ ${a.getDebugPositionInfo(e,t)}`);return n}static tryReadRegularIdentifier(e,t){let n=t;for(;t<e.length&&!ee.isDelimiter(e[t]);)t++;if(n===t)return null;for(;t+1<e.length&&e[t]==="["&&e[t+1]==="]";){let i=e.slice(0,n).trim();if(i===""||/[)]$/.test(i)||/\b(select|from|where|and|or|set|values|insert|update|delete)\s*$/i.test(i))break;t+=2}return{identifier:e.slice(n,t),newPosition:t}}};var ce=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,i,r){let s={type:e,value:e===128||e===2||e===2048?t.toLowerCase():t,comments:n};return i!==void 0&&r!==void 0&&(s.position={startPosition:i,endPosition:r}),s}createLexemeWithPosition(e,t,n,i=null){return this.createLexeme(e,t,i,n,n+t.length)}getDebugPositionInfo(e){return ue.getDebugPositionInfo(this.input,e)}};var Cn=class extends ce{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 ke=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 i=this.trie.pushLexeme(n.identifier.toLowerCase());if(i===0)return null;if(i===3)return{keyword:n.identifier,newPosition:n.newPosition};let r=n.identifier,s=ue.readWhiteSpaceAndComment(e,n.newPosition);t=s.position;let o=[...s.lines];if(this.isEndOfInput(e,t))return i===2?{keyword:r,newPosition:t,comments:o.length>0?o:void 0}:null;for(;this.canParse(e,t);){let l=i,u=ue.tryReadRegularIdentifier(e,t);if(u!==null){if(i=this.trie.pushLexeme(u.identifier.toLowerCase()),i===0){if(l===2)break;return null}r+=" "+u.identifier;let c=ue.readWhiteSpaceAndComment(e,u.newPosition);if(t=c.position,o.push(...c.lines),i===3)break}else{if(l===2)break;return null}}return{keyword:r,newPosition:t,comments:o.length>0?o:void 0}}};var Je=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 Hi=[["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"]],Yi=new Je(Hi),di=new ke(Yi),yn=class extends ce{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)&&ee.isDigit(this.input[this.position+1]))return this.createLexeme(1,this.readDigit());if(t==="'"){let i=this.readSingleQuotedString(!1);return this.createLexeme(1,i)}if(ee.isDigit(t))return this.createLexeme(1,this.readDigit());if(t==="$"&&this.isDollarQuotedString())return this.createLexeme(1,this.readDollarQuotedString());if(t==="$"&&this.canRead(1)&&ee.isDigit(this.input[this.position+1])){let i=this.position+1,r=!1;for(;i<this.input.length&&(ee.isDigit(this.input[i])||this.input[i]===","||this.input[i]===".");){if(this.input[i]==="."||this.input[i]===","){r=!0;break}i++}if(r){let s=this.position;this.position++;let o=this.readMoneyDigit();return this.createLexeme(1,"$"+o)}}if((t==="+"||t==="-")&&this.determineSignOrOperator(e)==="sign"){let i=t;this.position++;let r=this.position;for(;this.canRead()&&ee.isWhitespace(this.input[this.position]);)this.position++;if(this.canRead()&&(ee.isDigit(this.input[this.position])||this.input[this.position]==="."&&this.canRead(1)&&ee.isDigit(this.input[this.position+1])))return this.createLexeme(1,i==="-"?i+this.readDigit():this.readDigit());this.position=r-1}return null}tryReadKeyword(){let e=di.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 i=this.input[this.position+1].toLowerCase();this.position+=2;let r=i==="x";for(;this.canRead();){let s=this.input[this.position];if(ee.isDigit(s)||r&&ee.isHexChar(s))this.position++;else break}return this.input.slice(e,this.position)}for(this.input[e]==="."&&(t=!0,this.position++);this.canRead();){let i=this.input[this.position];if(i==="."&&!t)t=!0;else if((i==="e"||i==="E")&&!n)n=!0,this.canRead(1)&&(this.input[this.position+1]==="+"||this.input[this.position+1]==="-")&&this.position++;else if(!ee.isDigit(i))break;this.position++}if(e===this.position)throw new Error(`Unexpected character. position: ${e}
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(!ee.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 i=this.input[this.position];if(this.position++,i==="\\"&&this.canRead(1)){this.position++;continue}else if(i==="'"){n=!0;break}}if(n===!1)throw new Error(`Single quote is not closed. position: ${t}
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+"$",i=n,r="";for(;this.canRead();){if(this.input.substring(this.position,this.position+i.length)===i)return this.position+=i.length,n+r+i;r+=this.input[this.position],this.position++}throw new Error(`Unclosed dollar-quoted string starting at position ${e}. Expected closing tag: ${i}`)}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 un=class extends ae{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 i=this.input.slice(n,this.position);if(i.length===0)throw new Error("Empty parameter name is not allowed: found ${} at position "+(n-2));return this.position++,this.createLexeme(256,"${"+i+"}")}let t=this.input[this.position];if(X.isNamedParameterPrefix(t)){if(this.canRead(1)&&X.isOperatorSymbol(this.input[this.position+1])||t===":"&&this.isInArraySliceContext()||t==="$"&&this.isDollarQuotedString())return null;if(t==="$"&&this.canRead(1)&&X.isDigit(this.input[this.position+1])){let r=this.position+1,s=!1;for(;r<this.input.length&&(X.isDigit(this.input[r])||this.input[r]===","||this.input[r]===".");){if(this.input[r]==="."||this.input[r]===","){s=!0;break}r++}if(s)return null}this.position++;let n=this.position;for(;this.canRead()&&!X.isDelimiter(this.input[this.position]);)this.position++;let i=this.input.slice(n,this.position);return this.createLexeme(256,t+i)}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 i=this.input[e];if(i==="]")t++;else if(i==="["){if(t--,t<0){if(e>0){let r=this.input[e-1];if(/[a-zA-Z0-9_)\]]/.test(r))return!0}if(e===0)return!1;break}}else i===")"?n++:i==="("&&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 cn=class o extends ae{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 pn=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 i of this.readers)if(n=i.tryRead(t),n){this.position=i.getPosition();break}for(let i of this.readers)i.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 ji=new De([["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"]]),Ui=new De([["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"]]),Ji=new We(ji),qi=new We(Ui);var mn=class extends ae{tryRead(e){if(this.isEndOfInput())return null;let t=this.input[this.position];if(X.isOperatorSymbol(t)){let i=this.position;for(;this.canRead()&&X.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 r=this.input.slice(i,this.position);return this.createLexeme(2,r)}let n=qi.parse(this.input,this.position);return n!==null?(this.position=n.newPosition,this.createLexeme(8258,n.keyword)):(n=Ji.parse(this.input,this.position),n!==null?(this.position=n.newPosition,this.createLexeme(2,n.keyword)):null)}};var Ki=new De([["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"]]),_i=new De([["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"]]),zi=new We(_i),oi=new We(Ki),dn=class extends ae{tryRead(e){if(this.isEndOfInput())return null;let t=oi.parse(this.input,this.position);if(t!==null)return this.position=t.newPosition,this.createLexeme(128,t.keyword);let n=zi.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 i=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(i,this.position-2).trim()+" */");this.position++}throw new Error(`Block comment is not closed. position: ${this.position}`)}return null}};var Hi=new Set(["e'","E'","x'","X'","b'","B'"]),Gi=new Set(["u&'","U&'"]),hn=class extends ae{tryRead(e){let t=this.position;return this.canRead(1)&&Hi.has(this.input.slice(t,t+2))?(this.position+=1,this.createLexeme(4096,this.input.slice(t,this.position))):this.canRead(2)&&Gi.has(this.input.slice(t,t+3))?(this.position+=2,this.createLexeme(4096,this.input.slice(t,this.position))):null}};var Yi=new De([["grouping","sets"],["array"]]),Xi=new We(Yi),fn=class extends ae{tryRead(e){if(this.isEndOfInput())return null;let t=Xi.parse(this.input,this.position);if(t!==null)return this.position=t.newPosition,this.createLexeme(2048,t.keyword);let n=he.tryReadRegularIdentifier(this.input,this.position);if(!n)return null;this.position=n.newPosition;var i=he.readWhiteSpaceAndComment(this.input,this.position).position-this.position;return this.canRead(i)&&this.input[this.position+i]==="("?this.createLexeme(2048,n.identifier):null}};var Zi=new De([["double","precision"],["character","varying"],["time","without","time","zone"],["time","with","time","zone"],["timestamp","without","time","zone"],["timestamp","with","time","zone"]]),er=new We(Zi),Cn=class extends ae{tryRead(e){if(this.isEndOfInput())return null;let t=er.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=he.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 yn=class extends ae{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 r=this.input[n];if(r===":"||r===","||r==="+"||r==="-"||r==="*"||r==="/"||r==="("||r===")")return!1;n++}if(n>=this.input.length)return!1;let i=this.input.slice(t,n).trim();return i===""?!1:/^[a-zA-Z_][a-zA-Z0-9_]*(\.[a-zA-Z_][a-zA-Z0-9_]*)*$/.test(i)}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 pn(e).register(new yn(e)).register(new un(e)).register(new hn(e)).register(new ln(e)).register(new cn(e)).register(new dn(e)).register(new mn(e)).register(new Cn(e)).register(new fn(e)).register(new an(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,i=this.readComment(),r=i.lines;this.position=i.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&&r.push(...l.lines):((r.length>0||l.lines.length>0)&&this.addCommentsToToken(a,r,l.lines),r=[]),t[n++]=a,s=a}if(r.length>0&&n>0){let a=t[n-1];a.comments===null&&(a.comments=[]),a.comments.push(...r)}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 he.readWhiteSpaceAndComment(this.input,this.position)}getDebugPositionInfo(e){return he.getDebugPositionInfo(this.input,e)}};var Re=class o{static parseFromLexeme(e,t){let{identifiers:n,newIndex:i}=o.parseEscapedOrDotSeparatedIdentifiers(e,t),{namespaces:r,name:s}=o.extractNamespacesAndName(n),a=0;return i>t&&(a=e[i-1].type),{namespaces:r,name:new x(s),newIndex:i,lastTokenType:a}}static parse(e){let n=new P(e).readLexmes(),i=this.parseFromLexeme(n,0);if(i.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[i.newIndex].value}" at position ${i.newIndex}. The name is complete but additional tokens were found.`);return{namespaces:i.namespaces,name:i.name}}static parseEscapedOrDotSeparatedIdentifiers(e,t){let n=t,i=[];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(i.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)i.push(e[n].value),n++;else if(e[n].type&2048)i.push(e[n].value),n++;else if(e[n].type&8192)i.push(e[n].value),n++;else if(e[n].value==="*"){i.push(e[n].value),n++;break}if(n<e.length&&e[n].type&32)n++;else break}return{identifiers:i,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 gn=class{static parseFromLexeme(e,t){let{namespaces:n,name:i,newIndex:r}=Re.parseFromLexeme(e,t);return{value:new v(n,i),newIndex:r}}};var Bt=class{static parseFromLexeme(e,t){let n=t,i=e[n].value,r,s=si.parse(i.toLowerCase(),0);if(s){let a=new R(s.keyword);return n++,{value:a,newIndex:n}}if(/^[+-]?\d+(\.\d+)?([eE][+-]?\d+)?$/.test(i))return r=Number(i),n++,{value:new G(r),newIndex:n};{let a=/^\$[^$]*\$[\s\S]*\$[^$]*\$$/.test(i);return a?r=i:i.startsWith("'")&&i.endsWith("'")?r=i.slice(1,-1):r=i,n++,{value:new G(r,a),newIndex:n}}}};var wn=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 i=A.parseFromLexeme(e,n);if(n=i.newIndex,n>=e.length||e[n].type!==8)throw new Error(`Expected ')' at index ${n}, but found ${e[n].value}`);return n++,{value:new ge(i.value),newIndex:n}}else{let i=k.parseArgument(4,8,e,t);return n=i.newIndex,{value:new H(i.value),newIndex:n}}}};var vn=class{static parseFromLexeme(e,t){let n=t;if(n<e.length&&e[n].type&2){let i=e[n].value;if(n++,i==="*")return{value:new v(null,"*"),newIndex:n};let r=k.parseFromLexeme(e,n);return n=r.newIndex,{value:new Y(i,r.value),newIndex:n}}throw new Error(`Invalid unary expression at index ${t}: ${e[t].value}`)}};var Sn=class{static parseFromLexeme(e,t){let n=t,i=e[n].value;i.startsWith("${")&&i.endsWith("}")?i=i.slice(2,-1):i=i.slice(1);let r=new T(i);return n++,{value:r,newIndex:n}}};var En=class{static parseFromLexeme(e,t){let n=t,i=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 r=e[n].value;return n++,{value:new Fe(i,r),newIndex:n}}};var bn=class{static parseFromLexeme(e,t){let n=t,i=e[n];return i.value==="case"?(n++,this.parseCaseExpression(e,n)):i.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 i=e[n].value;n++;let r=k.parseFromLexeme(e,n);return{value:new Y(i,r.value),newIndex:r.newIndex}}throw new Error(`Invalid modifier unary expression at index ${n}, Lexeme: ${e[n].value}`)}static parseCaseExpression(e,t){let n=t,i=k.parseFromLexeme(e,n);n=i.newIndex;let r=this.parseSwitchCaseArgument(e,n,[]);return n=r.newIndex,{value:new ee(i.value,r.value),newIndex:n}}static parseCaseWhenExpression(e,t){let n=t,i=this.parseCaseConditionValuePair(e,n);n=i.newIndex;let r=[i.value],s=this.parseSwitchCaseArgument(e,n,r);return n=s.newIndex,{value:new ee(null,s.value),newIndex:n}}static parseSwitchCaseArgument(e,t,n){let i=t,r=[...n],s=null;for(;i<e.length&&this.isCommandWithValue(e[i],"when");){i++;let l=this.parseCaseConditionValuePair(e,i);i=l.newIndex,r.push(l.value)}if(i<e.length&&this.isCommandWithValue(e[i],"else")){i++;let l=k.parseFromLexeme(e,i);s=l.value,i=l.newIndex}if(i<e.length&&this.isCommandWithValue(e[i],"end"))i++;else throw new Error(`The CASE expression requires 'end' keyword at the end (index ${i})`);if(r.length===0)throw new Error(`The CASE expression requires at least one WHEN clause (index ${i})`);return{value:new ve(r,s),newIndex:i}}static isCommandWithValue(e,t){return(e.type&128)!==0&&e.value===t}static parseCaseConditionValuePair(e,t){let n=t,i=k.parseFromLexeme(e,n);if(n=i.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 r=k.parseFromLexeme(e,n);return n=r.newIndex,{value:new Se(i.value,r.value),newIndex:n}}};var at=class{static parse(e){let n=new P(e).readLexmes(),i=this.parseFromLexeme(n,0);if(i.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[i.newIndex].value}" at position ${i.newIndex}. The ORDER BY clause is complete but there are additional tokens.`);return i.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 i=[],r=this.parseItem(e,n);for(i.push(r.value),n=r.newIndex;n<e.length&&e[n].type&16;){n++;let s=this.parseItem(e,n);i.push(s.value),n=s.newIndex}if(i.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 ue(i),newIndex:n}}static parseItem(e,t){let n=t,i=k.parseFromLexeme(e,n),r=i.value;if(n=i.newIndex,n>=e.length)return{value:r,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:r,newIndex:n}:{value:new xe(r,s,a),newIndex:n}}};var xn=class{static parse(e){let n=new P(e).readLexmes(),i=this.parseFromLexeme(n,0);if(i.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[i.newIndex].value}" at position ${i.newIndex}. The PARTITION BY clause is complete but there are additional tokens.`);return i.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 i=[],r=k.parseFromLexeme(e,n);for(i.push(r.value),n=r.newIndex;n<e.length&&e[n].type&16;){n++;let s=k.parseFromLexeme(e,n);i.push(s.value),n=s.newIndex}if(i.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 i.length===1?{value:new $e(i[0]),newIndex:n}:{value:new $e(new q(i)),newIndex:n}}};var xt=class{static parse(e){let n=new P(e).readLexmes(),i=this.parseFromLexeme(n,0);if(i.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[i.newIndex].value}" at position ${i.newIndex}. The window frame expression is complete but there are additional tokens.`);return i.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 i=null,r=null,s=null;if(n<e.length&&e[n].value==="partition by"){let a=xn.parseFromLexeme(e,n);i=a.value,n=a.newIndex}if(n<e.length&&e[n].value==="order by"){let a=at.parseFromLexeme(e,n);r=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 Ne(i,r,s),newIndex:n}}static isFrameTypeKeyword(e){let t=e;return t==="rows"||t==="range"||t==="groups"}static parseFrameSpec(e,t){let n=t,i=e[n].value,r;switch(i){case"rows":r="rows";break;case"range":r="range";break;case"groups":r="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 Je(r,a,u),newIndex:n}}else{let s=this.parseFrameBoundary(e,n),a=s.value;return n=s.newIndex,{value:new Je(r,a,null),newIndex:n}}}static parseFrameBoundary(e,t){let n=t;if(n<e.length&&e[n].type&128){let i=e[n].value,r;switch(i){case"current row":r="current row";break;case"unbounded preceding":r="unbounded preceding";break;case"unbounded following":r="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 ct(r),newIndex:n+1}}else if(n<e.length&&e[n].type&1){let i=k.parseFromLexeme(e,n);if(n=i.newIndex,n<e.length&&e[n].type&128){let r=e[n].value,s;if(r==="preceding")s=!1;else if(r==="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 pt(i.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 Vt=class{static parse(e){let n=new P(e).readLexmes(),i=this.parseFromLexeme(n,0);if(i.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[i.newIndex].value}" at position ${i.newIndex}. The OVER expression is complete but there are additional tokens.`);return i.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 i=e[n].value;return n++,{value:new x(i),newIndex:n}}if(e[n].type&4)return xt.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 je=class o extends Error{constructor(t,n,i){super(t);this.index=n;this.context=i;this.name="ParseError"}static fromUnparsedLexemes(t,n,i){let r=Math.max(0,n-2),s=Math.min(t.length,n+3),a=t.slice(r,s).map((u,c)=>{let p=c+r===n?">":" ",h=M[u.type]||u.type;return`${p} ${c+r}:${u.value} [${h}]`}).join(`
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+"$",i=n,r="";for(;this.canRead();){if(this.input.substring(this.position,this.position+i.length)===i)return this.position+=i.length,n+r+i;r+=this.input[this.position],this.position++}throw new Error(`Unclosed dollar-quoted string starting at position ${e}. Expected closing tag: ${i}`)}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 gn=class extends ce{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 i=this.input.slice(n,this.position);if(i.length===0)throw new Error("Empty parameter name is not allowed: found ${} at position "+(n-2));return this.position++,this.createLexeme(256,"${"+i+"}")}let t=this.input[this.position];if(ee.isNamedParameterPrefix(t)){if(this.canRead(1)&&ee.isOperatorSymbol(this.input[this.position+1])||t===":"&&this.isInArraySliceContext()||t==="$"&&this.isDollarQuotedString())return null;if(t==="$"&&this.canRead(1)&&ee.isDigit(this.input[this.position+1])){let r=this.position+1,s=!1;for(;r<this.input.length&&(ee.isDigit(this.input[r])||this.input[r]===","||this.input[r]===".");){if(this.input[r]==="."||this.input[r]===","){s=!0;break}r++}if(s)return null}this.position++;let n=this.position;for(;this.canRead()&&!ee.isDelimiter(this.input[this.position]);)this.position++;let i=this.input.slice(n,this.position);return this.createLexeme(256,t+i)}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 i=this.input[e];if(i==="]")t++;else if(i==="["){if(t--,t<0){if(e>0){let r=this.input[e-1];if(/[a-zA-Z0-9_)\]]/.test(r))return!0}if(e===0)return!1;break}}else i===")"?n++:i==="("&&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 vn=class a extends ce{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 a.SPECIAL_SYMBOL_TOKENS?(this.position++,this.createLexeme(a.SPECIAL_SYMBOL_TOKENS[t],t)):null}};var wn=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 i of this.readers)if(n=i.tryRead(t),n){this.position=i.getPosition();break}for(let i of this.readers)i.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 Xi=new Je([["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"]]),Zi=new Je([["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"]]),er=new ke(Xi),tr=new ke(Zi);var Sn=class extends ce{tryRead(e){if(this.isEndOfInput())return null;let t=this.input[this.position];if(ee.isOperatorSymbol(t)){let i=this.position;for(;this.canRead()&&ee.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 r=this.input.slice(i,this.position);return this.createLexeme(2,r)}let n=tr.parse(this.input,this.position);return n!==null?(this.position=n.newPosition,this.createLexeme(8258,n.keyword)):(n=er.parse(this.input,this.position),n!==null?(this.position=n.newPosition,this.createLexeme(2,n.keyword)):null)}};var nr=new Je([["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"]]),Jt=new Je([["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"],["with","ordinality"],["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"]]),ir=new ke(Jt),hi=new ke(nr);var bn=class extends ce{tryRead(e){if(this.isEndOfInput())return null;let t=hi.parse(this.input,this.position);if(t!==null)return this.position=t.newPosition,this.createLexeme(128,t.keyword);let n=ir.parse(this.input,this.position);if(n!==null)return this.position=n.newPosition,this.createLexeme(128,n.keyword,n.comments);if(this.canRead(2)&&this.input[this.position]==="/"&&this.input[this.position+1]==="*"&&this.input[this.position+2]==="+"){this.position+=3;let i=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(i,this.position-2).trim()+" */");this.position++}throw new Error(`Block comment is not closed. position: ${this.position}`)}return null}};var rr=new Set(["e'","E'","x'","X'","b'","B'"]),sr=new Set(["u&'","U&'"]),En=class extends ce{tryRead(e){let t=this.position;return this.canRead(1)&&rr.has(this.input.slice(t,t+2))?(this.position+=1,this.createLexeme(4096,this.input.slice(t,this.position))):this.canRead(2)&&sr.has(this.input.slice(t,t+3))?(this.position+=2,this.createLexeme(4096,this.input.slice(t,this.position))):null}};var or=new Je([["grouping","sets"],["array"]]),ar=new ke(or),xn=class extends ce{tryRead(e){if(this.isEndOfInput())return null;let t=ar.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 i=ue.readWhiteSpaceAndComment(this.input,this.position).position-this.position;return this.canRead(i)&&this.input[this.position+i]==="("?this.createLexeme(2048,n.identifier):null}};var lr=new Je([["double","precision"],["character","varying"],["time","without","time","zone"],["time","with","time","zone"],["timestamp","without","time","zone"],["timestamp","with","time","zone"]]),ur=new ke(lr),Tn=class extends ce{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 kn=class extends ce{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 r=this.input[n];if(r===":"||r===","||r==="+"||r==="-"||r==="*"||r==="/"||r==="("||r===")")return!1;n++}if(n>=this.input.length)return!1;let i=this.input.slice(t,n).trim();return i===""?!1:/^[a-zA-Z_][a-zA-Z0-9_]*(\.[a-zA-Z_][a-zA-Z0-9_]*)*$/.test(i)}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 O=class a{constructor(e){this.input=e,this.position=0,this.readerManager=new wn(e).register(new kn(e)).register(new gn(e)).register(new En(e)).register(new yn(e)).register(new vn(e)).register(new bn(e)).register(new Sn(e)).register(new Tn(e)).register(new xn(e)).register(new Cn(e))}isEndOfInput(e=0){return this.position+e>=this.input.length}canRead(e=0){return!this.isEndOfInput(e)}tokenize(e){return e?.preserveFormatting?this.tokenizeWithFormatting():new a(this.input).readLexmes()}readLexmes(){return this.tokenizeBasic()}tokenizeBasic(){this.position=0;let e=Math.ceil(this.input.length/8),t=new Array(e),n=0,i=this.readComment(),r=i.lines;this.position=i.position;let s=null;for(;this.canRead()&&this.input[this.position]!==";";){let o=this.readerManager.tryRead(this.position,s);if(o===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,o.type&16||o.type&2?l.lines.length>0&&r.push(...l.lines):((r.length>0||l.lines.length>0)&&this.addCommentsToToken(o,r,l.lines),r=[]),t[n++]=o,s=o}if(r.length>0&&n>0){let o=t[n-1];o.comments===null&&(o.comments=[]),o.comments.push(...r)}return n===e?t:t.slice(0,n)}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)}tokenizeWithFormatting(){let e=this.tokenizeBasic();return this.mapToFormattingLexemes(e)}mapToFormattingLexemes(e){if(e.length===0)return[];let t=[],n=0;for(let r of e){n=this.skipWhitespaceAndComments(n);let s=this.findLexemeAtPosition(r,n);if(s)t.push(s),n=s.endPosition;else{let o={startPosition:n,endPosition:n+r.value.length};t.push(o),n=o.endPosition}}let i=[];for(let r=0;r<e.length;r++){let s=e[r],o=t[r],l=r<e.length-1?t[r+1].startPosition:this.input.length,u=this.input.slice(o.endPosition,l),c=this.extractCommentsFromWhitespace(u),p={...s,followingWhitespace:u,inlineComments:c,position:{startPosition:o.startPosition,endPosition:o.endPosition,...this.getLineColumnInfo(o.startPosition,o.endPosition)}};i.push(p)}return i}findLexemeAtPosition(e,t){if(t>=this.input.length)return null;let n=[e.value,e.value.toUpperCase(),e.value.toLowerCase()];for(let i of n)if(t+i.length<=this.input.length&&this.input.substring(t,t+i.length)===i&&this.isValidLexemeMatch(i,t))return{startPosition:t,endPosition:t+i.length};return null}isValidLexemeMatch(e,t){if(t>0){let i=this.input[t-1];if(this.isAlphanumericUnderscore(i))return!1}let n=t+e.length;if(n<this.input.length){let i=this.input[n];if(this.isAlphanumericUnderscore(i))return!1}return!0}isAlphanumericUnderscore(e){let t=e.charCodeAt(0);return t>=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122||t===95}isWhitespace(e){let t=e.charCodeAt(0);return t===32||t===9||t===10||t===13}extractCommentsFromWhitespace(e){let t=[],n=0;for(;n<e.length;){let i=n,r=ue.readWhiteSpaceAndComment(e,n);r.lines.length>0&&t.push(...r.lines),n=r.position,n===i&&n++}return t}skipWhitespaceAndComments(e){let t=e;for(;t<this.input.length;){let n=this.input[t];if(this.isWhitespace(n)){t++;continue}if(t<this.input.length-1&&this.input[t]==="-"&&this.input[t+1]==="-"){for(;t<this.input.length&&this.input[t]!==`
10
+ `&&this.input[t]!=="\r";)t++;continue}if(t<this.input.length-1&&this.input[t]==="/"&&this.input[t+1]==="*"){for(t+=2;t<this.input.length-1;){if(this.input[t]==="*"&&this.input[t+1]==="/"){t+=2;break}t++}continue}break}return t}getLineColumnInfo(e,t){let n=this.getLineColumn(e),i=this.getLineColumn(t);return{startLine:n.line,startColumn:n.column,endLine:i.line,endColumn:i.column}}getLineColumn(e){let t=1,n=1;for(let i=0;i<Math.min(e,this.input.length);i++)this.input[i]===`
11
+ `?(t++,n=1):n++;return{line:t,column:n}}};var Me=class a{static parseFromLexeme(e,t){let{identifiers:n,newIndex:i}=a.parseEscapedOrDotSeparatedIdentifiers(e,t),{namespaces:r,name:s}=a.extractNamespacesAndName(n),o=0;return i>t&&(o=e[i-1].type),{namespaces:r,name:new k(s),newIndex:i,lastTokenType:o}}static parse(e){let n=new O(e).readLexmes(),i=this.parseFromLexeme(n,0);if(i.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[i.newIndex].value}" at position ${i.newIndex}. The name is complete but additional tokens were found.`);return{namespaces:i.namespaces,name:i.name}}static parseEscapedOrDotSeparatedIdentifiers(e,t){let n=t,i=[];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(i.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)i.push(e[n].value),n++;else if(e[n].type&2048)i.push(e[n].value),n++;else if(e[n].type&8192)i.push(e[n].value),n++;else if(e[n].value==="*"){i.push(e[n].value),n++;break}if(n<e.length&&e[n].type&32)n++;else break}return{identifiers:i,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 In=class{static parseFromLexeme(e,t){let{namespaces:n,name:i,newIndex:r}=Me.parseFromLexeme(e,t);return{value:new b(n,i),newIndex:r}}};var Kt=class{static parseFromLexeme(e,t){let n=t,i=e[n].value,r,s=di.parse(i.toLowerCase(),0);if(s){let o=new B(s.keyword);return n++,{value:o,newIndex:n}}if(/^[+-]?\d+(\.\d+)?([eE][+-]?\d+)?$/.test(i))return r=Number(i),n++,{value:new X(r),newIndex:n};{let o=/^\$[^$]*\$[\s\S]*\$[^$]*\$$/.test(i);return o?r=i:i.startsWith("'")&&i.endsWith("'")?r=i.slice(1,-1):r=i,n++,{value:new X(r,o),newIndex:n}}}};var Pn=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 i=L.parseFromLexeme(e,n);if(n=i.newIndex,n>=e.length||e[n].type!==8)throw new Error(`Expected ')' at index ${n}, but found ${e[n].value}`);return n++,{value:new me(i.value),newIndex:n}}else{let i=I.parseArgument(4,8,e,t);return n=i.newIndex,{value:new Y(i.value),newIndex:n}}}};var Nn=class{static parseFromLexeme(e,t){let n=t;if(n<e.length&&e[n].type&2){let i=e[n].value;if(n++,i==="*")return{value:new b(null,"*"),newIndex:n};let r=I.parseFromLexeme(e,n);return n=r.newIndex,{value:new Z(i,r.value),newIndex:n}}throw new Error(`Invalid unary expression at index ${t}: ${e[t].value}`)}};var An=class{static parseFromLexeme(e,t){let n=t,i=e[n].value;i.startsWith("${")&&i.endsWith("}")?i=i.slice(2,-1):i=i.slice(1);let r=new N(i);return n++,{value:r,newIndex:n}}};var Ln=class{static parseFromLexeme(e,t){let n=t,i=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 r=e[n].value;return n++,{value:new Ve(i,r),newIndex:n}}};var Fn=class{static parseFromLexeme(e,t){let n=t,i=e[n];return i.value==="case"?(n++,this.parseCaseExpression(e,n)):i.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 i=e[n].value;n++;let r=I.parseFromLexeme(e,n);return{value:new Z(i,r.value),newIndex:r.newIndex}}throw new Error(`Invalid modifier unary expression at index ${n}, Lexeme: ${e[n].value}`)}static parseCaseExpression(e,t){let n=t,i=I.parseFromLexeme(e,n);n=i.newIndex;let r=this.parseSwitchCaseArgument(e,n,[]);return n=r.newIndex,{value:new ne(i.value,r.value),newIndex:n}}static parseCaseWhenExpression(e,t){let n=t,i=this.parseCaseConditionValuePair(e,n);n=i.newIndex;let r=[i.value],s=this.parseSwitchCaseArgument(e,n,r);return n=s.newIndex,{value:new ne(null,s.value),newIndex:n}}static parseSwitchCaseArgument(e,t,n){let i=t,r=[...n],s=null;for(;i<e.length&&this.isCommandWithValue(e[i],"when");){i++;let l=this.parseCaseConditionValuePair(e,i);i=l.newIndex,r.push(l.value)}if(i<e.length&&this.isCommandWithValue(e[i],"else")){i++;let l=I.parseFromLexeme(e,i);s=l.value,i=l.newIndex}if(i<e.length&&this.isCommandWithValue(e[i],"end"))i++;else throw new Error(`The CASE expression requires 'end' keyword at the end (index ${i})`);if(r.length===0)throw new Error(`The CASE expression requires at least one WHEN clause (index ${i})`);return{value:new Ee(r,s),newIndex:i}}static isCommandWithValue(e,t){return(e.type&128)!==0&&e.value===t}static parseCaseConditionValuePair(e,t){let n=t,i=I.parseFromLexeme(e,n);if(n=i.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 r=I.parseFromLexeme(e,n);return n=r.newIndex,{value:new xe(i.value,r.value),newIndex:n}}};var rt=class{static parse(e){let n=new O(e).readLexmes(),i=this.parseFromLexeme(n,0);if(i.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[i.newIndex].value}" at position ${i.newIndex}. The ORDER BY clause is complete but there are additional tokens.`);return i.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 i=[],r=this.parseItem(e,n);for(i.push(r.value),n=r.newIndex;n<e.length&&e[n].type&16;){n++;let s=this.parseItem(e,n);i.push(s.value),n=s.newIndex}if(i.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 de(i),newIndex:n}}static parseItem(e,t){let n=t,i=I.parseFromLexeme(e,n),r=i.value;if(n=i.newIndex,n>=e.length)return{value:r,newIndex:n};let s=n>=e.length?null:e[n].value==="asc"?(n++,"asc"):e[n].value==="desc"?(n++,"desc"):null,o=n>=e.length?null:e[n].value==="nulls first"?(n++,"first"):e[n].value==="nulls last"?(n++,"last"):null;return s===null&&o===null?{value:r,newIndex:n}:{value:new Pe(r,s,o),newIndex:n}}};var Qn=class{static parse(e){let n=new O(e).readLexmes(),i=this.parseFromLexeme(n,0);if(i.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[i.newIndex].value}" at position ${i.newIndex}. The PARTITION BY clause is complete but there are additional tokens.`);return i.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 i=[],r=I.parseFromLexeme(e,n);for(i.push(r.value),n=r.newIndex;n<e.length&&e[n].type&16;){n++;let s=I.parseFromLexeme(e,n);i.push(s.value),n=s.newIndex}if(i.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 i.length===1?{value:new je(i[0]),newIndex:n}:{value:new je(new j(i)),newIndex:n}}};var Ot=class{static parse(e){let n=new O(e).readLexmes(),i=this.parseFromLexeme(n,0);if(i.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[i.newIndex].value}" at position ${i.newIndex}. The window frame expression is complete but there are additional tokens.`);return i.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 i=null,r=null,s=null;if(n<e.length&&e[n].value==="partition by"){let o=Qn.parseFromLexeme(e,n);i=o.value,n=o.newIndex}if(n<e.length&&e[n].value==="order by"){let o=rt.parseFromLexeme(e,n);r=o.value,n=o.newIndex}if(n<e.length&&this.isFrameTypeKeyword(e[n].value)){let o=this.parseFrameSpec(e,n);s=o.value,n=o.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(i,r,s),newIndex:n}}static isFrameTypeKeyword(e){let t=e;return t==="rows"||t==="range"||t==="groups"}static parseFrameSpec(e,t){let n=t,i=e[n].value,r;switch(i){case"rows":r="rows";break;case"range":r="range";break;case"groups":r="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),o=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 ze(r,o,u),newIndex:n}}else{let s=this.parseFrameBoundary(e,n),o=s.value;return n=s.newIndex,{value:new ze(r,o,null),newIndex:n}}}static parseFrameBoundary(e,t){let n=t;if(n<e.length&&e[n].type&128){let i=e[n].value,r;switch(i){case"current row":r="current row";break;case"unbounded preceding":r="unbounded preceding";break;case"unbounded following":r="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 yt(r),newIndex:n+1}}else if(n<e.length&&e[n].type&1){let i=I.parseFromLexeme(e,n);if(n=i.newIndex,n<e.length&&e[n].type&128){let r=e[n].value,s;if(r==="preceding")s=!1;else if(r==="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 gt(i.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 _t=class{static parse(e){let n=new O(e).readLexmes(),i=this.parseFromLexeme(n,0);if(i.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[i.newIndex].value}" at position ${i.newIndex}. The OVER expression is complete but there are additional tokens.`);return i.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 i=e[n].value;return n++,{value:new k(i),newIndex:n}}if(e[n].type&4)return Ot.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 Re=class a extends Error{constructor(t,n,i){super(t);this.index=n;this.context=i;this.name="ParseError"}static fromUnparsedLexemes(t,n,i){let r=Math.max(0,n-2),s=Math.min(t.length,n+3),o=t.slice(r,s).map((u,c)=>{let p=c+r===n?">":" ",m=$[u.type]||u.type;return`${p} ${c+r}:${u.value} [${m}]`}).join(`
10
12
  `),l=`${i} Unparsed lexeme remains at index ${n}: ${t[n].value}
11
13
  Context:
12
- ${a}`;return new o(l,n,a)}};var Ue=class{static parseArrayExpression(e,t){let n=t;if(n+1<e.length&&e[n+1].type&512){n++;let i=k.parseArgument(512,1024,e,n);return n=i.newIndex,{value:new fe(i.value),newIndex:n}}else if(n+1<e.length&&e[n+1].type&4){n++,n++;let i=A.parseFromLexeme(e,n);return n=i.newIndex,n++,{value:new Ce(i.value),newIndex:n}}throw new Error(`Invalid ARRAY syntax at index ${n}, expected ARRAY[... or ARRAY(...)`)}static parseFromLexeme(e,t){let n=t,i=e[n];return i.value==="array"?this.parseArrayExpression(e,n):i.value==="substring"||i.value==="overlay"?this.parseKeywordFunction(e,n,[{key:"from",required:!1},{key:"for",required:!1}]):i.value==="cast"?this.parseKeywordFunction(e,n,[{key:"as",required:!0}]):i.value==="trim"?this.parseKeywordFunction(e,n,[{key:"from",required:!1}]):this.parseFunctionCall(e,n)}static tryParseBinaryExpression(e,t,n,i=!0,r=!0){let s=t;if(s<e.length&&e[s].type&2){let a=e[s].value.toLowerCase();if(!i&&a==="and"||!r&&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 se(n,c.value),newIndex:s}}let l=k.parseFromLexeme(e,s);return s=l.newIndex,{value:new y(n,a,l.value),newIndex:s}}return null}static parseBetweenExpression(e,t,n,i){let r=t,s=k.parseFromLexeme(e,r,!1);if(r=s.newIndex,r<e.length&&e[r].type&2&&e[r].value!=="and")throw new Error(`Expected 'and' after 'between' at index ${r}`);r++;let a=this.parseBetweenUpperBound(e,r);return r=a.newIndex,{value:new ye(n,s.value,a.value,i),newIndex:r}}static parseBetweenUpperBound(e,t){return k.parseFromLexeme(e,t,!1,!1)}static parseFunctionCall(e,t){let n=t,i=Re.parseFromLexeme(e,n),r=i.namespaces,s=i.name;if(n=i.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=Vt.parseFromLexeme(e,n);return n=u.newIndex,{value:new D(r,s.name,a.value,u.value,l),newIndex:n}}else return{value:new D(r,s.name,a.value,null,l),newIndex:n}}else throw je.fromUnparsedLexemes(e,n,`Expected opening parenthesis after function name '${s.name}'.`)}static parseKeywordFunction(e,t,n){let i=t,r=Re.parseFromLexeme(e,i),s=r.namespaces,a=r.name;if(i=r.newIndex,i<e.length&&e[i].type&4){i++;let l=k.parseFromLexeme(e,i),u=l.value;if(i=l.newIndex,i<e.length&&e[i].type&16)return this.parseFunctionCall(e,t);for(let{key:c,required:p}of n)if(i<e.length&&e[i].type&128&&e[i].value===c)if(i++,i<e.length&&e[i].type&8192){let h=this.parseTypeValue(e,i);u=new y(u,c,h.value),i=h.newIndex}else{let h=k.parseFromLexeme(e,i);u=new y(u,c,h.value),i=h.newIndex}else if(p)throw je.fromUnparsedLexemes(e,i,`Keyword '${c}' is required for ${a.name} function.`);if(i<e.length&&e[i].type&8){i++;let c=null;if(i<e.length&&e[i].value==="within group"){let p=this.parseWithinGroupClause(e,i);c=p.value,i=p.newIndex}if(i<e.length&&e[i].value==="over"){i++;let p=Vt.parseFromLexeme(e,i);return i=p.newIndex,{value:new D(s,a.name,u,p.value,c),newIndex:i}}else return{value:new D(s,a.name,u,null,c),newIndex:i}}else throw je.fromUnparsedLexemes(e,i,`Missing closing parenthesis for function '${a.name}'.`)}else throw je.fromUnparsedLexemes(e,i,`Missing opening parenthesis for function '${a.name}'.`)}static parseTypeValue(e,t){let n=t,{namespaces:i,name:r,newIndex:s}=Re.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 Pe(i,new R(r.name),a.value),newIndex:n}}else return{value:new Pe(i,new R(r.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 i=at.parseFromLexeme(e,n);if(n=i.newIndex,n>=e.length||!(e[n].type&8))throw new Error(`Expected ')' after WITHIN GROUP ORDER BY clause at index ${n}`);return n++,{value:i.value,newIndex:n}}};var dt=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(),i=this.parseFromLexeme(n,0);if(i.newIndex<n.length)throw je.fromUnparsedLexemes(n,i.newIndex,"[ValueParser]");return i.value}static parseFromLexeme(e,t,n=!0,i=!0){return this.parseExpressionWithPrecedence(e,t,0,n,i)}static parseExpressionWithPrecedence(e,t,n,i=!0,r=!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(!i&&h.toLowerCase()==="and"||!r&&h.toLowerCase()==="or")break;let w=dt.getPrecedence(h);if(w<n)break;if(s++,dt.isBetweenOperator(h)){let g=Ue.parseBetweenExpression(e,s,u,h.toLowerCase().includes("not"));u=g.value,s=g.newIndex;continue}if(h==="::"){let g=Ue.parseTypeValue(e,s);u=new se(u,g.value),s=g.newIndex;continue}let E=w+1,d=this.parseExpressionWithPrecedence(e,s,E,i,r);s=d.newIndex,u=new y(u,h,d.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 i=e[n];if(i.type&64&&i.type&2&&i.type&8192){if(n+1<e.length&&e[n+1].type&4)if(this.isTypeConstructor(e,n+1,i.value)){let a=Ue.parseTypeValue(e,n);return{value:a.value,newIndex:a.newIndex}}else return Ue.parseFromLexeme(e,n);let r=gn.parseFromLexeme(e,n);if(r.newIndex>=e.length)return r;if(e[r.newIndex].type&1){let a=Bt.parseFromLexeme(e,r.newIndex);return{value:new Y(e[n].value,a.value),newIndex:a.newIndex}}return r}else if(i.type&64){let{namespaces:r,name:s,newIndex:a}=Re.parseFromLexeme(e,n);if(e[a-1].type&2048)return Ue.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=Ue.parseTypeValue(e,n);return{value:u.value,newIndex:u.newIndex}}else return Ue.parseFromLexeme(e,n);else return{value:new Pe(r,s),newIndex:a};return{value:new v(r,s),newIndex:a}}else{if(i.type&1)return Bt.parseFromLexeme(e,n);if(i.type&4)return wn.parseFromLexeme(e,n);if(i.type&2048)return Ue.parseFromLexeme(e,n);if(i.type&2)return vn.parseFromLexeme(e,n);if(i.type&256)return Sn.parseFromLexeme(e,n);if(i.type&4096)return En.parseFromLexeme(e,n);if(i.type&128)return bn.parseFromLexeme(e,n);if(i.type&512){let{namespaces:r,name:s,newIndex:a}=Re.parseFromLexeme(e,n);return{value:new v(r,s),newIndex:a}}else if(i.type&8192){let{namespaces:r,name:s,newIndex:a}=Re.parseFromLexeme(e,n);if(a<e.length&&e[a].type&4)if(this.isTypeConstructor(e,a,s.name)){let l=Ue.parseTypeValue(e,n);return{value:l.value,newIndex:l.newIndex}}else return Ue.parseFromLexeme(e,n);else return{value:new Pe(r,s),newIndex:a}}}throw je.fromUnparsedLexemes(e,n,"[ValueParser] Invalid lexeme.")}static parseArgument(e,t,n,i){let r=i,s=[];if(r<n.length&&n[r].type===e){if(r++,r<n.length&&n[r].type===t)return r++,{value:new q([]),newIndex:r};if(r<n.length&&n[r].value==="*"){let l=new v(null,"*");if(r++,r<n.length&&n[r].type===t)return r++,{value:l,newIndex:r};throw je.fromUnparsedLexemes(n,r,"Expected closing parenthesis after wildcard '*'.")}let a=this.parseFromLexeme(n,r);for(r=a.newIndex,s.push(a.value);r<n.length&&n[r].type&16;){r++;let l=this.parseFromLexeme(n,r);r=l.newIndex,s.push(l.value)}if(r<n.length&&n[r].type===t)return r++,s.length===1?{value:s[0],newIndex:r}:{value:new q(s),newIndex:r};throw je.fromUnparsedLexemes(n,r,"Missing closing parenthesis.")}throw je.fromUnparsedLexemes(n,i,"Expected opening parenthesis.")}static parseArrayAccess(e,t,n){let i=t,r=n;for(;i<e.length&&e[i].type&512&&!this.isSqlServerBracketIdentifier(e,i);){if(i++,i>=e.length)throw new Error(`Expected array index or slice after '[' at index ${i-1}`);if(e[i].type&1024)throw new Error(`Empty array access brackets not supported at index ${i}`);let s=null,a=!1;if(e[i].type&2&&e[i].value===":")a=!0,i++;else{let l=dt.getPrecedence(":"),u=this.parseExpressionWithPrecedence(e,i,l+1);s=u.value,i=u.newIndex,i<e.length&&e[i].type&2&&e[i].value===":"&&(a=!0,i++)}if(a){let l=null;if(i<e.length&&!(e[i].type&1024)){let u=dt.getPrecedence(":"),c=this.parseExpressionWithPrecedence(e,i,u+1);l=c.value,i=c.newIndex}if(i>=e.length||!(e[i].type&1024))throw new Error(`Expected ']' after array slice at index ${i}`);i++,r=new Ze(r,s,l)}else{if(!s){let l=this.parseFromLexeme(e,i);s=l.value,i=l.newIndex}if(i>=e.length||!(e[i].type&1024))throw new Error(`Expected ']' after array index at index ${i}`);i++,r=new et(r,s)}}return{value:r,newIndex:i}}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 i=n;if(i+1<e.length){let s=e[i+1];if(s.type&2&&s.value===".")return!0}n=t+1;let r=!0;for(;n<i;){let s=e[n];if(!(s.type&64||s.type&2&&s.value===".")){r=!1;break}n++}return r}static isTypeConstructor(e,t,n){let i=["NUMERIC","DECIMAL","VARCHAR","CHAR","CHARACTER","TIMESTAMP","TIME","INTERVAL"],r=n.toUpperCase();if(i.includes(r))return!0;if(r==="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 Z=class{constructor(){this.commonTables=[];this.visitedNodes=new Set;this.isRootVisit=!0;this.handlers=new Map,this.handlers.set(C.kind,e=>this.visitSimpleSelectQuery(e)),this.handlers.set(Q.kind,e=>this.visitBinarySelectQuery(e)),this.handlers.set(le.kind,e=>this.visitValuesQuery(e)),this.handlers.set(oe.kind,e=>this.visitWithClause(e)),this.handlers.set(te.kind,e=>this.visitCommonTable(e)),this.handlers.set(K.kind,e=>this.visitSelectItem(e)),this.handlers.set(x.kind,e=>this.visitIdentifierString(e)),this.handlers.set(R.kind,e=>this.visitRawString(e)),this.handlers.set(v.kind,e=>this.visitColumnReference(e)),this.handlers.set(T.kind,e=>this.visitParameterExpression(e)),this.handlers.set(G.kind,e=>this.visitLiteralValue(e)),this.handlers.set(B.kind,e=>this.visitSourceExpression(e)),this.handlers.set(O.kind,e=>this.visitTableSource(e)),this.handlers.set(qe.kind,e=>this.visitFunctionSource(e)),this.handlers.set(Le.kind,e=>this.visitParenSource(e)),this.handlers.set(j.kind,e=>this.visitSubQuerySource(e)),this.handlers.set(ge.kind,e=>this.visitInlineQuery(e)),this.handlers.set(U.kind,e=>this.visitFromClause(e)),this.handlers.set(de.kind,e=>this.visitJoinClause(e)),this.handlers.set(me.kind,e=>this.visitJoinOnClause(e)),this.handlers.set(we.kind,e=>this.visitJoinUsingClause(e)),this.handlers.set(ie.kind,e=>this.visitWhereClause(e)),this.handlers.set(H.kind,e=>this.visitParenExpression(e)),this.handlers.set(y.kind,e=>this.visitBinaryExpression(e)),this.handlers.set(Y.kind,e=>this.visitUnaryExpression(e)),this.handlers.set(ee.kind,e=>this.visitCaseExpression(e)),this.handlers.set(Se.kind,e=>this.visitCaseKeyValuePair(e)),this.handlers.set(ve.kind,e=>this.visitSwitchCaseArgument(e)),this.handlers.set(ye.kind,e=>this.visitBetweenExpression(e)),this.handlers.set(D.kind,e=>this.visitFunctionCall(e)),this.handlers.set(fe.kind,e=>this.visitArrayExpression(e)),this.handlers.set(Ce.kind,e=>this.visitArrayQueryExpression(e)),this.handlers.set(Ee.kind,e=>this.visitTupleExpression(e)),this.handlers.set(se.kind,e=>this.visitCastExpression(e)),this.handlers.set(Ne.kind,e=>this.visitWindowFrameExpression(e)),this.handlers.set(Je.kind,e=>this.visitWindowFrameSpec(e)),this.handlers.set(Pe.kind,e=>this.visitTypeValue(e)),this.handlers.set(q.kind,e=>this.visitValueList(e)),this.handlers.set(Fe.kind,e=>this.visitStringSpecifierExpression(e)),this.handlers.set(J.kind,e=>this.visitSelectClause(e)),this.handlers.set(ce.kind,e=>this.visitGroupByClause(e)),this.handlers.set(pe.kind,e=>this.visitHavingClause(e)),this.handlers.set(ue.kind,e=>this.visitOrderByClause(e)),this.handlers.set(be.kind,e=>this.visitWindowFrameClause(e)),this.handlers.set(re.kind,e=>this.visitLimitClause(e)),this.handlers.set(Te.kind,e=>this.visitForClause(e)),this.handlers.set(xe.kind,e=>this.visitOrderByItem(e)),this.handlers.set($e.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",i=e.constructor?.name||"unknown";throw new Error(`[CTECollector] No handler for ${i} 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 ht=class{constructor(){this.visitedNodes=new Set;this.isRootVisit=!0;this.handlers=new Map,this.handlers.set(C.kind,e=>this.visitSimpleSelectQuery(e)),this.handlers.set(Q.kind,e=>this.visitBinarySelectQuery(e)),this.handlers.set(le.kind,e=>this.visitValuesQuery(e)),this.handlers.set(K.kind,e=>this.visitSelectItem(e)),this.handlers.set(x.kind,e=>this.visitIdentifierString(e)),this.handlers.set(R.kind,e=>this.visitRawString(e)),this.handlers.set(v.kind,e=>this.visitColumnReference(e)),this.handlers.set(T.kind,e=>this.visitParameterExpression(e)),this.handlers.set(G.kind,e=>this.visitLiteralValue(e)),this.handlers.set(B.kind,e=>this.visitSourceExpression(e)),this.handlers.set(O.kind,e=>this.visitTableSource(e)),this.handlers.set(Le.kind,e=>this.visitParenSource(e)),this.handlers.set(j.kind,e=>this.visitSubQuerySource(e)),this.handlers.set(ge.kind,e=>this.visitInlineQuery(e)),this.handlers.set(U.kind,e=>this.visitFromClause(e)),this.handlers.set(de.kind,e=>this.visitJoinClause(e)),this.handlers.set(me.kind,e=>this.visitJoinOnClause(e)),this.handlers.set(we.kind,e=>this.visitJoinUsingClause(e)),this.handlers.set(ie.kind,e=>this.visitWhereClause(e)),this.handlers.set(H.kind,e=>this.visitParenExpression(e)),this.handlers.set(y.kind,e=>this.visitBinaryExpression(e)),this.handlers.set(Y.kind,e=>this.visitUnaryExpression(e)),this.handlers.set(ee.kind,e=>this.visitCaseExpression(e)),this.handlers.set(Se.kind,e=>this.visitCaseKeyValuePair(e)),this.handlers.set(ve.kind,e=>this.visitSwitchCaseArgument(e)),this.handlers.set(ye.kind,e=>this.visitBetweenExpression(e)),this.handlers.set(D.kind,e=>this.visitFunctionCall(e)),this.handlers.set(fe.kind,e=>this.visitArrayExpression(e)),this.handlers.set(Ce.kind,e=>this.visitArrayQueryExpression(e)),this.handlers.set(Ee.kind,e=>this.visitTupleExpression(e)),this.handlers.set(se.kind,e=>this.visitCastExpression(e)),this.handlers.set(Ne.kind,e=>this.visitWindowFrameExpression(e)),this.handlers.set(Je.kind,e=>this.visitWindowFrameSpec(e)),this.handlers.set(Pe.kind,e=>this.visitTypeValue(e)),this.handlers.set(q.kind,e=>this.visitValueList(e)),this.handlers.set(Ze.kind,e=>this.visitArraySliceExpression(e)),this.handlers.set(et.kind,e=>this.visitArrayIndexExpression(e)),this.handlers.set(Fe.kind,e=>this.visitStringSpecifierExpression(e)),this.handlers.set(J.kind,e=>this.visitSelectClause(e)),this.handlers.set(ce.kind,e=>this.visitGroupByClause(e)),this.handlers.set(pe.kind,e=>this.visitHavingClause(e)),this.handlers.set(ue.kind,e=>this.visitOrderByClause(e)),this.handlers.set(be.kind,e=>this.visitWindowFrameClause(e)),this.handlers.set(re.kind,e=>this.visitLimitClause(e)),this.handlers.set(Te.kind,e=>this.visitForClause(e)),this.handlers.set(xe.kind,e=>this.visitOrderByItem(e)),this.handlers.set($e.kind,e=>this.visitPartitionByClause(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",i=e.constructor?.name||"unknown";throw new Error(`[CTEDisabler] No handler for ${i} 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 Ge(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 le(t)}visitSelectClause(e){let t=e.items.map(n=>this.visit(n));return new J(t,e.distinct)}visitFromClause(e){let t=this.visit(e.source),n=e.joins?e.joins.map(i=>this.visit(i)):null;return new U(t,n)}visitSubQuerySource(e){let t=this.visit(e.query);return new j(t)}visitInlineQuery(e){let t=this.visit(e.selectQuery);return new ge(t)}visitJoinClause(e){let t=this.visit(e.source),n=e.condition?this.visit(e.condition):null;return new de(e.joinType.value,t,n,e.lateral)}visitJoinOnClause(e){let t=this.visit(e.condition);return new me(t)}visitJoinUsingClause(e){let t=this.visit(e.condition);return new we(t)}visitWhereClause(e){let t=this.visit(e.condition);return new ie(t)}visitGroupByClause(e){let t=e.grouping.map(n=>this.visit(n));return new ce(t)}visitHavingClause(e){let t=this.visit(e.condition);return new pe(t)}visitOrderByClause(e){let t=e.order.map(n=>this.visit(n));return new ue(t)}visitWindowFrameClause(e){let t=this.visit(e.expression);return new be(e.name.name,t)}visitLimitClause(e){let t=this.visit(e.value);return new re(t)}visitForClause(e){return new Te(e.lockMode)}visitParenExpression(e){let t=this.visit(e.expression);return new H(t)}visitBinaryExpression(e){let t=this.visit(e.left),n=this.visit(e.right);return new y(t,e.operator.value,n)}visitUnaryExpression(e){let t=this.visit(e.expression);return new Y(e.operator.value,t)}visitCaseExpression(e){let t=e.condition?this.visit(e.condition):null,n=this.visit(e.switchCase);return new ee(t,n)}visitSwitchCaseArgument(e){let t=e.cases.map(i=>this.visit(i)),n=e.elseValue?this.visit(e.elseValue):null;return new ve(t,n)}visitCaseKeyValuePair(e){let t=this.visit(e.key),n=this.visit(e.value);return new Se(t,n)}visitBetweenExpression(e){let t=this.visit(e.expression),n=this.visit(e.lower),i=this.visit(e.upper);return new ye(t,n,i,e.negated)}visitFunctionCall(e){let t=e.argument?this.visit(e.argument):null,n=e.over?this.visit(e.over):null;return new D(e.namespaces,e.name,t,n)}visitArrayExpression(e){let t=this.visit(e.expression);return new fe(t)}visitArrayQueryExpression(e){let t=this.visit(e.query);return new Ce(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 se(t,n)}visitTypeValue(e){let t=e.argument?this.visit(e.argument):null;return new Pe(e.namespaces,e.name,t)}visitSelectItem(e){let t=this.visit(e.value);return new K(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 B(t,n)}visitTableSource(e){return e}visitParenSource(e){let t=this.visit(e.source);return new Le(t)}visitParameterExpression(e){return e}visitWindowFrameExpression(e){let t=e.partition?this.visit(e.partition):null,n=e.order?this.visit(e.order):null,i=e.frameSpec?this.visit(e.frameSpec):null;return new Ne(t,n,i)}visitWindowFrameSpec(e){return e}visitLiteralValue(e){return e}visitOrderByItem(e){let t=this.visit(e.value);return new xe(t,e.sortDirection,e.nullsPosition)}visitValueList(e){let t=e.values.map(n=>this.visit(n));return new q(t)}visitArraySliceExpression(e){return e}visitArrayIndexExpression(e){return e}visitStringSpecifierExpression(e){return e}visitPartitionByClause(e){let t=this.visit(e.value);return new $e(t)}};var nt=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(C.kind,t=>this.visitSimpleSelectQuery(t)),this.handlers.set(Q.kind,t=>this.visitBinarySelectQuery(t)),this.handlers.set(le.kind,t=>this.visitValuesQuery(t)),this.handlers.set(oe.kind,t=>this.visitWithClause(t)),this.handlers.set(te.kind,t=>this.visitCommonTable(t)),this.handlers.set(U.kind,t=>this.visitFromClause(t)),this.handlers.set(de.kind,t=>this.visitJoinClause(t)),this.handlers.set(me.kind,t=>this.visitJoinOnClause(t)),this.handlers.set(we.kind,t=>this.visitJoinUsingClause(t)),this.handlers.set(B.kind,t=>this.visitSourceExpression(t)),this.handlers.set(O.kind,t=>this.visitTableSource(t)),this.handlers.set(qe.kind,t=>this.visitFunctionSource(t)),this.handlers.set(Le.kind,t=>this.visitParenSource(t)),this.handlers.set(j.kind,t=>this.visitSubQuerySource(t)),this.handlers.set(ge.kind,t=>this.visitInlineQuery(t)),e||(this.handlers.set(ie.kind,t=>this.visitWhereClause(t)),this.handlers.set(ce.kind,t=>this.visitGroupByClause(t)),this.handlers.set(pe.kind,t=>this.visitHavingClause(t)),this.handlers.set(ue.kind,t=>this.visitOrderByClause(t)),this.handlers.set(be.kind,t=>this.visitWindowFrameClause(t)),this.handlers.set(re.kind,t=>this.visitLimitClause(t)),this.handlers.set(Qe.kind,t=>this.visitOffsetClause(t)),this.handlers.set(Me.kind,t=>this.visitFetchClause(t)),this.handlers.set(Te.kind,t=>this.visitForClause(t)),this.handlers.set(xe.kind,t=>this.visitOrderByItem(t)),this.handlers.set(J.kind,t=>this.visitSelectClause(t)),this.handlers.set(K.kind,t=>this.visitSelectItem(t)),this.handlers.set(H.kind,t=>this.visitParenExpression(t)),this.handlers.set(y.kind,t=>this.visitBinaryExpression(t)),this.handlers.set(Y.kind,t=>this.visitUnaryExpression(t)),this.handlers.set(ee.kind,t=>this.visitCaseExpression(t)),this.handlers.set(Se.kind,t=>this.visitCaseKeyValuePair(t)),this.handlers.set(ve.kind,t=>this.visitSwitchCaseArgument(t)),this.handlers.set(ye.kind,t=>this.visitBetweenExpression(t)),this.handlers.set(D.kind,t=>this.visitFunctionCall(t)),this.handlers.set(fe.kind,t=>this.visitArrayExpression(t)),this.handlers.set(Ce.kind,t=>this.visitArrayQueryExpression(t)),this.handlers.set(Ee.kind,t=>this.visitTupleExpression(t)),this.handlers.set(se.kind,t=>this.visitCastExpression(t)),this.handlers.set(q.kind,t=>this.visitValueList(t)),this.handlers.set(Fe.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 R?e.qualifiedName.name.value:e.qualifiedName.name.name):e.qualifiedName.name instanceof R?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 Z;t.visit(e);let n=t.getCommonTables();for(let i of n)this.cteNames.add(i.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 lt=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 m=class{constructor(e,t="",n=""){this.innerTokens=[];this.type=e,this.text=t,this.containerType=n}};var ut=class{static collect(e){let t=[];function n(i){if(!(!i||typeof i!="object")){i.constructor&&i.constructor.kind===T.kind&&t.push(i);for(let r of Object.keys(i)){let s=i[r];Array.isArray(s)?s.forEach(n):s&&typeof s=="object"&&s.constructor&&s.constructor.kind&&n(s)}}}return n(e),t}};var Tn=class{constructor(e){this.start=e?.start??'"',this.end=e?.end??'"'}decorate(e){return e=this.start+e+this.end,e}};var kn=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 Tt=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 tt?e.setClause:new tt(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 Z,this.commonTables=[],this.initialCommonTables=t,this.handlers=new Map,this.handlers.set(C.kind,n=>this.visitSimpleSelectQuery(n)),this.handlers.set(J.kind,n=>this.visitSelectClause(n)),this.handlers.set(B.kind,n=>this.visitSourceExpression(n)),this.handlers.set(U.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(i=>i.name==="*");if(t.length===0)return;if(this.selectValues.some(i=>i.value instanceof v&&i.value.namespaces===null)){e.fromClause&&this.processFromClause(e.fromClause,!0),this.selectValues=this.selectValues.filter(i=>i.name!=="*");return}let n=t.filter(i=>i.value instanceof v&&i.value.namespaces).map(i=>i.value.getNamespace());if(e.fromClause){let i=e.fromClause.getSourceAliasName();if(i&&n.includes(i)&&this.processFromClause(e.fromClause,!1),e.fromClause.joins)for(let r of e.fromClause.joins){let s=r.getSourceAliasName();s&&n.includes(s)&&this.processJoinClause(r)}}this.selectValues=this.selectValues.filter(i=>i.name!=="*")}processFromClause(e,t){if(e){let n=e.getSourceAliasName();if(this.processSourceExpression(n,e.source),e.joins&&t)for(let i of e.joins)this.processJoinClause(i)}}processJoinClause(e){let t=e.getSourceAliasName();this.processSourceExpression(t,e.source)}processSourceExpression(e,t){let n=this.commonTables.find(i=>i.aliasExpression.table.name===e);if(n){let i=this.commonTables.filter(a=>a.aliasExpression.table.name!==e);new o(this.tableColumnResolver,i).collect(n.query).forEach(a=>{this.addSelectValueAsUnique(a.name,new v(e?[e]:null,a.name))})}else new o(this.tableColumnResolver,this.commonTables).collect(t).forEach(s=>{this.addSelectValueAsUnique(s.name,new v(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 v){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 v(t?[t]:null,n.name))});return}else if(e.datasource instanceof O){if(this.tableColumnResolver){let t=e.datasource.getSourceName();this.tableColumnResolver(t).forEach(n=>{this.addSelectValueAsUnique(n,new v([t],n))})}return}else if(e.datasource instanceof j){let t=e.getAliasName();new o(this.tableColumnResolver,this.commonTables).collect(e.datasource.query).forEach(r=>{this.addSelectValueAsUnique(r.name,new v(t?[t]:null,r.name))});return}else if(e.datasource instanceof Le)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 kt=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(i=>new K(i.value,i.name)):e=[new K(new R("*"))],new C({selectClause:new J(e),fromClause:new U(new B(new O(null,this.tableName.name),null),null)})}getCountQuery(){return new C({selectClause:new J([new K(new D(null,"count",new v(null,"*"),null))]),fromClause:new U(new B(new O(null,this.tableName.name),null),null)})}};var Ti={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"}},In=class o{constructor(e){this.handlers=new Map;this.index=1;e?.preset&&(e={...e.preset,...e}),this.parameterDecorator=new kn({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 Tn({start:e?.identifierEscape?.start??'"',end:e?.identifierEscape?.end??'"'}),this.handlers.set(q.kind,t=>this.visitValueList(t)),this.handlers.set(v.kind,t=>this.visitColumnReference(t)),this.handlers.set(Ve.kind,t=>this.visitQualifiedName(t)),this.handlers.set(D.kind,t=>this.visitFunctionCall(t)),this.handlers.set(Y.kind,t=>this.visitUnaryExpression(t)),this.handlers.set(y.kind,t=>this.visitBinaryExpression(t)),this.handlers.set(G.kind,t=>this.visitLiteralValue(t)),this.handlers.set(T.kind,t=>this.visitParameterExpression(t)),this.handlers.set(ve.kind,t=>this.visitSwitchCaseArgument(t)),this.handlers.set(Se.kind,t=>this.visitCaseKeyValuePair(t)),this.handlers.set(R.kind,t=>this.visitRawString(t)),this.handlers.set(x.kind,t=>this.visitIdentifierString(t)),this.handlers.set(H.kind,t=>this.visitParenExpression(t)),this.handlers.set(se.kind,t=>this.visitCastExpression(t)),this.handlers.set(ee.kind,t=>this.visitCaseExpression(t)),this.handlers.set(fe.kind,t=>this.visitArrayExpression(t)),this.handlers.set(Ce.kind,t=>this.visitArrayQueryExpression(t)),this.handlers.set(Ze.kind,t=>this.visitArraySliceExpression(t)),this.handlers.set(et.kind,t=>this.visitArrayIndexExpression(t)),this.handlers.set(ye.kind,t=>this.visitBetweenExpression(t)),this.handlers.set(Fe.kind,t=>this.visitStringSpecifierExpression(t)),this.handlers.set(Pe.kind,t=>this.visitTypeValue(t)),this.handlers.set(Ee.kind,t=>this.visitTupleExpression(t)),this.handlers.set(ge.kind,t=>this.visitInlineQuery(t)),this.handlers.set(Ne.kind,t=>this.visitWindowFrameExpression(t)),this.handlers.set(Je.kind,t=>this.visitWindowFrameSpec(t)),this.handlers.set(ct.kind,t=>this.visitWindowFrameBoundStatic(t)),this.handlers.set(pt.kind,t=>this.visitWindowFrameBoundaryValue(t)),this.handlers.set($e.kind,t=>this.visitPartitionByClause(t)),this.handlers.set(ue.kind,t=>this.visitOrderByClause(t)),this.handlers.set(xe.kind,t=>this.visitOrderByItem(t)),this.handlers.set(K.kind,t=>this.visitSelectItem(t)),this.handlers.set(J.kind,t=>this.visitSelectClause(t)),this.handlers.set(St.kind,t=>this.visitDistinct(t)),this.handlers.set(Et.kind,t=>this.visitDistinctOn(t)),this.handlers.set(lt.kind,t=>this.visitHintClause(t)),this.handlers.set(O.kind,t=>this.visitTableSource(t)),this.handlers.set(qe.kind,t=>this.visitFunctionSource(t)),this.handlers.set(B.kind,t=>this.visitSourceExpression(t)),this.handlers.set(ne.kind,t=>this.visitSourceAliasExpression(t)),this.handlers.set(U.kind,t=>this.visitFromClause(t)),this.handlers.set(de.kind,t=>this.visitJoinClause(t)),this.handlers.set(me.kind,t=>this.visitJoinOnClause(t)),this.handlers.set(we.kind,t=>this.visitJoinUsingClause(t)),this.handlers.set(ie.kind,t=>this.visitWhereClause(t)),this.handlers.set(ce.kind,t=>this.visitGroupByClause(t)),this.handlers.set(pe.kind,t=>this.visitHavingClause(t)),this.handlers.set(Ge.kind,t=>this.visitWindowClause(t)),this.handlers.set(be.kind,t=>this.visitWindowFrameClause(t)),this.handlers.set(re.kind,t=>this.visitLimitClause(t)),this.handlers.set(Qe.kind,t=>this.visitOffsetClause(t)),this.handlers.set(Me.kind,t=>this.visitFetchClause(t)),this.handlers.set(mt.kind,t=>this.visitFetchExpression(t)),this.handlers.set(Te.kind,t=>this.visitForClause(t)),this.handlers.set(oe.kind,t=>this.visitWithClause(t)),this.handlers.set(te.kind,t=>this.visitCommonTable(t)),this.handlers.set(C.kind,t=>this.visitSimpleQuery(t)),this.handlers.set(j.kind,t=>this.visitSubQuerySource(t)),this.handlers.set(Q.kind,t=>this.visitBinarySelectQuery(t)),this.handlers.set(le.kind,t=>this.visitValuesQuery(t)),this.handlers.set(Ee.kind,t=>this.visitTupleExpression(t)),this.handlers.set(He.kind,t=>this.visitInsertQuery(t)),this.handlers.set(ot.kind,t=>this.visitInsertClause(t)),this.handlers.set(Tt.kind,t=>this.visitUpdateQuery(t)),this.handlers.set(bt.kind,t=>this.visitUpdateClause(t)),this.handlers.set(tt.kind,t=>this.visitSetClause(t)),this.handlers.set(st.kind,t=>this.visitSetClauseItem(t)),this.handlers.set(on.kind,t=>this.visitReturningClause(t)),this.handlers.set(kt.kind,t=>this.visitCreateTableQuery(t))}static{this.SPACE_TOKEN=new m(10," ")}static{this.COMMA_TOKEN=new m(3,",")}static{this.ARGUMENT_SPLIT_COMMA_TOKEN=new m(11,",")}static{this.PAREN_OPEN_TOKEN=new m(4,"(")}static{this.PAREN_CLOSE_TOKEN=new m(4,")")}static{this.DOT_TOKEN=new m(8,".")}visitBinarySelectQuery(e){let t=new m(0,"");return t.innerTokens.push(this.visit(e.left)),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new m(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 m(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 m(1,"partition by","PartitionByClause");return t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(this.visit(e.value)),t}visitOrderByClause(e){let t=new m(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 m(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 m(1,"desc"))),e.nullsPosition&&(e.nullsPosition==="first"?(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new m(1,"nulls first"))):e.nullsPosition==="last"&&(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new m(1,"nulls last")))),t}parse(e){this.index=1;let t=this.visit(e),n=ut.collect(e).sort((r,s)=>(r.index??0)-(s.index??0)),i=this.parameterDecorator.style;if(i==="named"){let r={};for(let s of n){let a=s.name.value;if(r.hasOwnProperty(a)){if(r[a]!==s.value)throw new Error(`Duplicate parameter name '${a}' with different values detected during query composition.`);continue}r[a]=s.value}return{token:t,params:r}}else if(i==="indexed"){let r=n.map(s=>s.value);return{token:t,params:r}}else if(i==="anonymous"){let r=n.map(s=>s.value);return{token:t,params:r}}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=this.createCommentBlocks(t);n.length>0&&this.insertCommentBlocksWithSpacing(e,n)}createCommentBlocks(e){let t=[];for(let n of e)n.trim()&&t.push(this.createSingleCommentBlock(n));return t}createSingleCommentBlock(e){let t=new m(0,"","CommentBlock"),n=new m(6,this.formatBlockComment(e));t.innerTokens.push(n);let i=new m(12,"");t.innerTokens.push(i);let r=new m(10," ");return t.innerTokens.push(r),t}insertCommentBlocksWithSpacing(e,t){if(e.innerTokens.unshift(...t),this.shouldAddSeparatorSpace(e.containerType)){let i=new m(10," ");e.innerTokens.splice(t.length,0,i),e.innerTokens.length>t.length+1&&e.innerTokens[t.length+1].type===10&&e.innerTokens.splice(t.length+1,1)}else e.innerTokens.length>t.length&&e.innerTokens[t.length].type===10&&e.innerTokens.splice(t.length,1)}shouldAddSeparatorSpace(e){return this.isClauseLevelContainer(e)}isClauseLevelContainer(e){switch(e){case"SelectClause":case"FromClause":case"WhereClause":case"GroupByClause":case"HavingClause":case"OrderByClause":case"LimitClause":case"OffsetClause":case"WithClause":case"SimpleSelectQuery":return!0;default:return!1}}formatBlockComment(e){return`/* ${e} */`}visitValueList(e){let t=new m(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 m(0,"","ColumnReference");return t.innerTokens.push(e.qualifiedName.accept(this)),t}visitFunctionCall(e){let t=new m(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 m(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 m(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 m(0,"","BinaryExpression");return t.innerTokens.push(this.visit(e.left)),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new m(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 m(2,t,"LiteralValue")}visitParameterExpression(e){e.index=this.index;let t=this.parameterDecorator.decorate(e.name.value,e.index),n=new m(7,t);return this.index++,n}visitSwitchCaseArgument(e){let t=new m(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 m(0,"","ElseClause");t.innerTokens.push(new m(1,"else")),t.innerTokens.push(o.SPACE_TOKEN);let n=new m(0,"","CaseElseValue");return n.innerTokens.push(this.visit(e)),t.innerTokens.push(n),t}visitCaseKeyValuePair(e){let t=new m(0,"","CaseKeyValuePair");t.innerTokens.push(new m(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 m(1,"then")),t.innerTokens.push(o.SPACE_TOKEN);let n=new m(0,"","CaseThenValue");return n.innerTokens.push(this.visit(e.value)),t.innerTokens.push(n),t}visitRawString(e){return new m(2,e.value,"RawString")}visitIdentifierString(e){let t=e.name==="*"?e.name:this.identifierDecorator.decorate(e.name);return new m(2,t,"IdentifierString")}visitParenExpression(e){let t=new m(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 m(0,"","CastExpression");return t.innerTokens.push(this.visit(e.input)),t.innerTokens.push(new m(5,"::")),t.innerTokens.push(this.visit(e.castType)),t}visitCaseExpression(e){let t=new m(0,"","CaseExpression");return t.innerTokens.push(new m(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 m(1,"end")),t}visitArrayExpression(e){let t=new m(0,"","ArrayExpression");return t.innerTokens.push(new m(1,"array")),t.innerTokens.push(new m(4,"[")),t.innerTokens.push(this.visit(e.expression)),t.innerTokens.push(new m(4,"]")),t}visitArrayQueryExpression(e){let t=new m(0,"","ArrayExpression");return t.innerTokens.push(new m(1,"array")),t.innerTokens.push(new m(4,"(")),t.innerTokens.push(this.visit(e.query)),t.innerTokens.push(new m(4,")")),t}visitArraySliceExpression(e){let t=new m(0,"","ArrayExpression");return t.innerTokens.push(this.visit(e.array)),t.innerTokens.push(new m(4,"[")),e.startIndex&&t.innerTokens.push(this.visit(e.startIndex)),t.innerTokens.push(new m(5,":")),e.endIndex&&t.innerTokens.push(this.visit(e.endIndex)),t.innerTokens.push(new m(4,"]")),t}visitArrayIndexExpression(e){let t=new m(0,"","ArrayExpression");return t.innerTokens.push(this.visit(e.array)),t.innerTokens.push(new m(4,"[")),t.innerTokens.push(this.visit(e.index)),t.innerTokens.push(new m(4,"]")),t}visitBetweenExpression(e){let t=new m(0,"","BetweenExpression");return t.innerTokens.push(this.visit(e.expression)),t.innerTokens.push(o.SPACE_TOKEN),e.negated&&(t.innerTokens.push(new m(1,"not")),t.innerTokens.push(o.SPACE_TOKEN)),t.innerTokens.push(new m(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 m(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 m(2,t+n,"StringSpecifierExpression")}visitTypeValue(e){let t=new m(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 m(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 m(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 m(0,"","WindowFrameSpec");return t.innerTokens.push(new m(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 m(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 m(1,"and")),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(e.endBound.accept(this))),t}visitWindowFrameBoundaryValue(e){let t=new m(0,"","WindowFrameBoundaryValue");return t.innerTokens.push(e.value.accept(this)),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new m(1,e.isFollowing?"following":"preceding")),t}visitWindowFrameBoundStatic(e){return new m(1,e.bound)}visitSelectItem(e){let t=new m(0,"","SelectItem");if(t.innerTokens.push(this.visit(e.value)),!e.identifier)return t;if(e.value instanceof v){let n=e.value.column.name;if(e.identifier.name===n)return t}return t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new m(1,"as")),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(this.visit(e.identifier)),t}visitSelectClause(e){let t=new m(1,"select","SelectClause"),n="select";for(let i of e.hints)n+=" "+this.visit(i).text;if(e.distinct){let i=e.distinct.accept(this);if(i.innerTokens&&i.innerTokens.length>0){let r=i.text;for(let s of i.innerTokens)r+=this.flattenTokenText(s);n+=" "+r}else n+=" "+i.text}t.text=n,t.innerTokens.push(o.SPACE_TOKEN);for(let i=0;i<e.items.length;i++)i>0&&t.innerTokens.push(...o.commaSpaceTokens()),t.innerTokens.push(this.visit(e.items[i]));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 m(2,e.getFullHint())}visitDistinct(e){return new m(1,"distinct")}visitDistinctOn(e){let t=new m(0,"","DistinctOn");return t.innerTokens.push(new m(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(i=>i.accept(this).text).join(".")+"."),t+=e.table.accept(this).text;let n=new m(2,t);return e.identifier&&(e.identifier.name,e.table.name),n}visitSourceExpression(e){let t=new m(0,"","SourceExpression");if(t.innerTokens.push(e.datasource.accept(this)),!e.aliasExpression)return t;if(e.datasource instanceof O){let n=e.datasource.table.name;return e.aliasExpression.table.name===n||(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new m(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 m(1,"as")),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(e.aliasExpression.accept(this)),t}visitFromClause(e){let t=new m(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 m(0,"","JoinClause");return t.innerTokens.push(new m(1,e.joinType.value)),e.lateral&&(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new m(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 m(0,"","JoinOnClause");return t.innerTokens.push(new m(1,"on")),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(this.visit(e.condition)),t}visitJoinUsingClause(e){let t=new m(0,"","JoinUsingClause");return t.innerTokens.push(new m(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 m(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 m(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 m(1,"where","WhereClause");return t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(this.visit(e.condition)),t}visitGroupByClause(e){let t=new m(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 m(1,"having","HavingClause");return t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(this.visit(e.condition)),t}visitWindowClause(e){let t=new m(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 m(0,"","WindowFrameClause");return t.innerTokens.push(e.name.accept(this)),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new m(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 m(1,"limit","LimitClause");return t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(this.visit(e.value)),t}visitOffsetClause(e){let t=new m(1,"offset","OffsetClause");return t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(this.visit(e.value)),t}visitFetchClause(e){let t=new m(1,"fetch","FetchClause");return t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(this.visit(e.expression)),t}visitFetchExpression(e){let t=new m(0,"","FetchExpression");return t.innerTokens.push(new m(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 m(1,e.unit))),t}visitForClause(e){let t=new m(1,"for","ForClause");return t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new m(1,e.lockMode)),t}visitWithClause(e){let t=new m(1,"with","WithClause");t.innerTokens.push(o.SPACE_TOKEN),e.recursive&&(t.innerTokens.push(new m(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 m(0,"","CommonTable");t.innerTokens.push(e.aliasExpression.accept(this)),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new m(1,"as")),t.innerTokens.push(o.SPACE_TOKEN),e.materialized!==null&&(e.materialized?t.innerTokens.push(new m(1,"materialized")):t.innerTokens.push(new m(1,"not materialized")),t.innerTokens.push(o.SPACE_TOKEN)),t.innerTokens.push(o.PAREN_OPEN_TOKEN);let n=new m(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 m(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 m(0,"");t.innerTokens.push(o.PAREN_OPEN_TOKEN);let n=new m(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 m(1,"values","ValuesQuery");t.innerTokens.push(o.SPACE_TOKEN);let n=new m(0,"","Values");for(let i=0;i<e.tuples.length;i++)i>0&&n.innerTokens.push(...o.commaSpaceTokens()),n.innerTokens.push(e.tuples[i].accept(this));return t.innerTokens.push(n),t}visitInlineQuery(e){let t=new m(0,"");t.innerTokens.push(o.PAREN_OPEN_TOKEN);let n=new m(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 m(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 m(0,"");if(t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new m(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 m(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 m(1,"update","UpdateClause");return t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(e.source.accept(this)),t}visitSetClause(e){let t=new m(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 m(0,"","SetClauseItem");return t.innerTokens.push(e.column.accept(this)),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(new m(5,"=")),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(e.value.accept(this)),t}visitReturningClause(e){let t=new m(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 m(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 m(1,"as")),t.innerTokens.push(o.SPACE_TOKEN),t.innerTokens.push(e.asSelectQuery.accept(this))),t}};var $t=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 ai(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.")}},ai=class{constructor(e,t){this.level=e,this.text=t}};var Nn=class o{constructor(e){this.insideWithClause=!1;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.withClauseStyle=e?.withClauseStyle??"standard",this.linePrinter=new $t(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","SimpleSelectQuery"])}print(e,t=0){return this.linePrinter=new $t(this.indentChar,this.indentSize,this.newline),this.insideWithClause=!1,this.linePrinter.lines.length>0&&t!==this.linePrinter.lines[0].level&&(this.linePrinter.lines[0].level=t),this.appendToken(e,t,void 0),this.linePrinter.print()}appendToken(e,t,n){let i=this.insideWithClause;if(e.containerType==="WithClause"&&this.withClauseStyle==="full-oneline"&&(this.insideWithClause=!0),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.exportComment&&this.linePrinter.appendText(e.text);else if(e.type===10)this.handleSpaceToken(e,n);else if(e.type===12)this.handleCommentNewlineToken(e,t);else if(e.containerType==="CommonTable"&&this.withClauseStyle==="cte-oneline"){this.handleCteOnelineToken(e,t);return}else this.linePrinter.appendText(e.text);if(e.keywordTokens&&e.keywordTokens.length>0)for(let a=0;a<e.keywordTokens.length;a++){let l=e.keywordTokens[a];this.appendToken(l,t,e.containerType)}let s=t;!this.isOnelineMode()&&r.text!==""&&this.indentIncrementContainers.has(e.containerType)&&(this.insideWithClause&&this.withClauseStyle==="full-oneline"||(s++,this.linePrinter.appendNewline(s)));for(let a=0;a<e.innerTokens.length;a++){let l=e.innerTokens[a];this.appendToken(l,s,e.containerType)}if(e.containerType==="WithClause"&&this.withClauseStyle==="full-oneline"){this.insideWithClause=!1,this.linePrinter.appendNewline(t);return}s!==t&&(this.insideWithClause&&this.withClauseStyle==="full-oneline"||this.linePrinter.appendNewline(t))}shouldSkipToken(e){return e.type===12?!1:(!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 i=e.text;this.insideWithClause&&this.withClauseStyle==="full-oneline"?this.linePrinter.appendText(i):this.withClauseStyle==="cte-oneline"&&n==="WithClause"?(this.linePrinter.appendText(i),this.linePrinter.appendNewline(t)):this.commaBreak==="before"?(this.insideWithClause&&this.withClauseStyle==="full-oneline"||this.linePrinter.appendNewline(t),this.linePrinter.appendText(i)):this.commaBreak==="after"?(this.linePrinter.appendText(i),this.insideWithClause&&this.withClauseStyle==="full-oneline"||this.linePrinter.appendNewline(t)):this.linePrinter.appendText(i)}handleAndOperatorToken(e,t){let n=this.applyKeywordCase(e.text);this.andBreak==="before"?(this.insideWithClause&&this.withClauseStyle==="full-oneline"||this.linePrinter.appendNewline(t),this.linePrinter.appendText(n)):this.andBreak==="after"?(this.linePrinter.appendText(n),this.insideWithClause&&this.withClauseStyle==="full-oneline"||this.linePrinter.appendNewline(t)):this.linePrinter.appendText(n)}handleJoinClauseToken(e,t){let n=this.applyKeywordCase(e.text);this.insideWithClause&&this.withClauseStyle==="full-oneline"||this.linePrinter.appendNewline(t),this.linePrinter.appendText(n)}handleSpaceToken(e,t){this.shouldSkipCommentBlockSpace(t)||this.linePrinter.appendText(e.text)}shouldSkipCommentBlockSpace(e){return e==="CommentBlock"&&this.insideWithClause&&this.withClauseStyle==="full-oneline"}handleCommentNewlineToken(e,t){this.shouldSkipCommentNewline()||this.isOnelineMode()||this.linePrinter.appendNewline(t)}shouldSkipCommentNewline(){return this.insideWithClause&&this.withClauseStyle==="full-oneline"||this.withClauseStyle==="cte-oneline"}isOnelineMode(){return this.newline===" "}handleCteOnelineToken(e,t){let i=this.createCteOnelinePrinter().print(e,t),r=this.cleanDuplicateSpaces(i);this.linePrinter.appendText(r)}createCteOnelinePrinter(){return new o({indentChar:"",indentSize:0,newline:" ",commaBreak:this.commaBreak,andBreak:this.andBreak,keywordCase:this.keywordCase,exportComment:this.exportComment,strictCommentPlacement:this.strictCommentPlacement,withClauseStyle:"standard"})}cleanDuplicateSpaces(e){return e.replace(/\s{2,}/g," ")}};var ir=["mysql","postgres","sqlserver","sqlite"],Be=class{constructor(e={}){let t=e.preset?Ti[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 In(n),this.printer=new Nn(e)}format(e){let{token:t,params:n}=this.parser.parse(e);return{formattedSql:this.printer.print(t),params:n}}};var it=class{constructor(){this.sqlFormatter=new Be({identifierEscape:{start:'"',end:'"'},parameterSymbol:":",parameterStyle:"named"})}format(e,t=null){return t&&(this.sqlFormatter=new Be(t)),this.sqlFormatter.format(e).formattedSql}formatWithParameters(e,t=null){t&&(this.sqlFormatter=new Be(t));let n=this.sqlFormatter.format(e);return{sql:n.formattedSql,params:n.params}}visit(e){return this.format(e)}};var Pn=class{constructor(){this.sourceCollector=new nt(!0),this.cteCollector=new Z,this.formatter=new it}build(e){if(e.length===0)return new oe(!1,e);let t=this.resolveDuplicateNames(e),{tableMap:n,recursiveCTEs:i,dependencies:r}=this.buildDependencyGraph(t),s=this.sortCommonTables(t,n,i,r);return new oe(i.size>0,s)}resolveDuplicateNames(e){let t=new Map;for(let i of e){let r=i.aliasExpression.table.name;t.has(r)||t.set(r,[]),t.get(r).push(i)}let n=[];for(let[i,r]of t.entries()){if(r.length===1){n.push(r[0]);continue}let s=r.map(l=>this.formatter.format(l.query));if(new Set(s).size===1)n.push(r[0]);else throw new Error(`CTE name conflict detected: '${i}' 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,i=new Map,r=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}i.has(a)||i.set(a,new Set);let u=this.cteCollector.collect(s.query);for(let c of u){let p=c.aliasExpression.table.name;t.has(p)&&(i.get(a).add(p),r.has(p)||r.set(p,new Set),r.get(p).add(a))}}return{tableMap:t,recursiveCTEs:n,dependencies:i}}sortCommonTables(e,t,n,i){let r=[],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 p=i.get(c)||new Set;for(let h of p)u(h);l.delete(c),a.add(c),n.has(c)?r.push(t.get(c)):s.push(t.get(c))};for(let c of e){let p=c.aliasExpression.table.name;a.has(p)||u(p)}return[...r,...s]}};var Qn=class{constructor(){this.nameConflictResolver=new Pn,this.cteCollector=new Z}inject(e,t){if(t.length===0)return e;t.push(...this.cteCollector.collect(e));let n=this.nameConflictResolver.build(t);if(e instanceof C)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 C)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 Ke=class{constructor(){}static normalize(e){let n=new Z().collect(e);return n.length===0?e:(new ht().execute(e),new Qn().inject(e,n))}};var On=(t=>(t.ColumnNameOnly="columnNameOnly",t.FullName="fullName",t))(On||{}),ke=class o{constructor(e,t=!1,n="columnNameOnly",i){this.selectValues=[];this.visitedNodes=new Set;this.uniqueKeys=new Set;this.isRootVisit=!0;this.tableColumnResolver=null;this.commonTables=[];this.initializeProperties(e,t,n,i),this.initializeHandlers()}initializeProperties(e,t,n,i){this.tableColumnResolver=e??null,this.includeWildCard=t,this.commonTableCollector=new Z,this.commonTables=[],this.duplicateDetection=n,this.options=i||{}}initializeHandlers(){this.handlers=new Map,this.handlers.set(C.kind,e=>this.visitSimpleSelectQuery(e)),this.handlers.set(Q.kind,e=>this.visitBinarySelectQuery(e)),this.initializeClauseHandlers(),this.initializeValueComponentHandlers()}initializeClauseHandlers(){this.handlers.set(J.kind,e=>this.visitSelectClause(e)),this.handlers.set(U.kind,e=>this.visitFromClause(e)),this.handlers.set(ie.kind,e=>this.visitWhereClause(e)),this.handlers.set(ce.kind,e=>this.visitGroupByClause(e)),this.handlers.set(pe.kind,e=>this.visitHavingClause(e)),this.handlers.set(ue.kind,e=>this.visitOrderByClause(e)),this.handlers.set(be.kind,e=>this.visitWindowFrameClause(e)),this.handlers.set(re.kind,e=>this.visitLimitClause(e)),this.handlers.set(Qe.kind,e=>this.offsetClause(e)),this.handlers.set(Me.kind,e=>this.visitFetchClause(e)),this.handlers.set(me.kind,e=>this.visitJoinOnClause(e)),this.handlers.set(we.kind,e=>this.visitJoinUsingClause(e))}initializeValueComponentHandlers(){this.handlers.set(v.kind,e=>this.visitColumnReference(e)),this.handlers.set(y.kind,e=>this.visitBinaryExpression(e)),this.handlers.set(Y.kind,e=>this.visitUnaryExpression(e)),this.handlers.set(D.kind,e=>this.visitFunctionCall(e)),this.handlers.set(H.kind,e=>this.visitParenExpression(e)),this.handlers.set(ee.kind,e=>this.visitCaseExpression(e)),this.handlers.set(se.kind,e=>this.visitCastExpression(e)),this.handlers.set(ye.kind,e=>this.visitBetweenExpression(e)),this.handlers.set(fe.kind,e=>this.visitArrayExpression(e)),this.handlers.set(Ce.kind,e=>this.visitArrayQueryExpression(e)),this.handlers.set(q.kind,e=>this.visitValueList(e)),this.handlers.set(Ne.kind,e=>this.visitWindowFrameExpression(e)),this.handlers.set($e.kind,e=>this.visitPartitionByClause(e))}getValues(){return this.selectValues}collect(e){if(!e)throw new Error("Input argument cannot be null or undefined");this.visit(e);let t=this.getValues();return this.reset(),t}reset(){this.selectValues=[],this.visitedNodes.clear(),this.uniqueKeys.clear(),this.commonTables=[]}addSelectValueAsUnique(e,t){let n=this.generateUniqueKey(e,t);this.uniqueKeys.has(n)||(this.uniqueKeys.add(n),this.selectValues.push({name:e,value:t}))}generateUniqueKey(e,t){if(this.duplicateDetection==="columnNameOnly")return this.normalizeColumnName(e);{let n="";t&&typeof t.getNamespace=="function"&&(n=t.getNamespace()||"");let i=n?n+"."+e:e;return this.normalizeColumnName(i)}}normalizeColumnName(e){if(typeof e!="string")throw new Error("Column name must be a string");return this.options.ignoreCaseAndUnderscore?e.toLowerCase().replace(/_/g,""):e}visit(e){if(!this.isRootVisit){this.visitNode(e);return}if(!(e instanceof C||e instanceof Q))throw new Error("Root visit requires a SimpleSelectQuery or BinarySelectQuery.");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)){this.visitedNodes.add(e);try{let t=this.handlers.get(e.getKind());t&&t(e)}catch(t){let n=t instanceof Error?t.message:String(t);throw new Error(`Error processing SQL component of type ${e.getKind().toString()}: ${n}`)}}}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)}visitBinarySelectQuery(e){e.left instanceof C?this.visitSimpleSelectQuery(e.left):e.left instanceof Q&&this.visitBinarySelectQuery(e.left),e.right instanceof C?this.visitSimpleSelectQuery(e.right):e.right instanceof Q&&this.visitBinarySelectQuery(e.right)}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 i of n)this.addSelectValueAsUnique(i.name,i.value);if(this.options.upstream&&this.collectUpstreamColumns(e),e.joins)for(let i of e.joins)i.condition&&i.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)}collectUpstreamColumns(e){if(this.collectAllAvailableCTEColumns(),this.collectUpstreamColumnsFromSource(e.source),e.joins)for(let t of e.joins)this.collectUpstreamColumnsFromSource(t.source)}collectUpstreamColumnsFromSource(e){if(e.datasource instanceof O){let t=this.findCTEByName(e.datasource.table.name);t?this.collectUpstreamColumnsFromCTE(t):this.collectUpstreamColumnsFromTable(e.datasource)}else e.datasource instanceof j?this.collectUpstreamColumnsFromSubquery(e.datasource):e.datasource instanceof Le&&this.collectUpstreamColumnsFromSource(new B(e.datasource.source,null))}collectUpstreamColumnsFromTable(e){if(this.tableColumnResolver){let t=e.table.name,n=this.tableColumnResolver(t);for(let i of n){let r=new v(e.table.name,i);this.addSelectValueAsUnique(i,r)}}}collectUpstreamColumnsFromSubquery(e){if(e.query instanceof C){let n=new o(this.tableColumnResolver,this.includeWildCard,this.duplicateDetection,{...this.options,upstream:!0}).collect(e.query);for(let i of n)this.addSelectValueAsUnique(i.name,i.value)}}collectUpstreamColumnsFromCTE(e){if(e.query instanceof C){let n=new Oe(this.tableColumnResolver,this.commonTables).collect(e.query.selectClause);for(let i of n)i.name!=="*"&&this.addSelectValueAsUnique(i.name,i.value)}}collectAllAvailableCTEColumns(){for(let e of this.commonTables)this.collectUpstreamColumnsFromCTE(e)}findCTEByName(e){return this.commonTables.find(t=>t.getSourceAliasName()===e)||null}};var ft=class o{static parse(e){let n=new P(e).readLexmes(),i=this.parseFromLexeme(n,0);if(i.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[i.newIndex].value}" at position ${i.newIndex}. The source component is complete but there are additional tokens.`);return i.value}static parseTableSourceFromLexemes(e,t){let n=Re.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 i=Re.parseFromLexeme(e,n);return i.lastTokenType&2048?o.parseFunctionSource(e,i):o.parseTableSource(i)}static parseTableSource(e){let{namespaces:t,name:n,newIndex:i}=e;return{value:new O(t,n.name),newIndex:i}}static parseFunctionSource(e,t){let n=t.newIndex,{namespaces:i,name:r}=t,s=k.parseArgument(4,8,e,n);n=s.newIndex;let a=r.name;return{value:new qe({namespaces:i,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 i=e[n].value;if(i==="select"||i==="values"||i==="with"){let r=this.parseSubQuerySource(e,n);if(n=r.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:r.value,newIndex:n}}else if(e[n].type==4){let r=this.parseParenSource(e,n);if(n=r.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:r.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:i,newIndex:r}=A.parseFromLexeme(e,n);return n=r,{value:new j(i),newIndex:n}}};var It=class extends Error{constructor(t){super(`CTE '${t}' already exists in the query`);this.cteName=t;this.name="DuplicateCTEError"}},Ct=class extends Error{constructor(t,n){super(`Invalid CTE name '${t}': ${n}`);this.cteName=t;this.name="InvalidCTENameError"}},Nt=class extends Error{constructor(t){super(`CTE '${t}' not found in the query`);this.cteName=t;this.name="CTENotFoundError"}};var yt=class{constructor(e,t){this.options=t||{},this.tableColumnResolver=e,this.columnCollector=new ke(this.tableColumnResolver)}find(e,t){let n=typeof t=="string"?[t]:t,r=new Z().collect(e),s=new Map;for(let a of r)s.set(a.getSourceAliasName(),a);return this.findUpstream(e,n,s)}handleTableSource(e,t,n){let i=n.get(e.table.name);if(i){let r=new Map(n);r.delete(e.table.name);let s=this.findUpstream(i.query,t,r);return s.length===0?null:s}return null}handleSubQuerySource(e,t,n){let i=this.findUpstream(e.query,t,n);return i.length===0?null:i}processFromClauseBranches(e,t,n){let i=e.getSources();if(i.length===0)return null;let r=[],s=!0,a=0;for(let l of i){let u=l.datasource,c=null;if(u instanceof O)c=this.handleTableSource(u,t,n),a++;else if(u instanceof j)c=this.handleSubQuerySource(u,t,n),a++;else{if(u instanceof le)continue;s=!1;break}if(c===null){s=!1;break}r.push(c)}return s&&r.length===a?r.flat():null}findUpstream(e,t,n){if(e instanceof C){let i=e.fromClause;if(i){let c=this.processFromClauseBranches(i,t,n);if(c&&c.length>0)return c}let r=this.columnCollector.collect(e).map(c=>c.name),s=this.collectCTEColumns(e,n),a=[...r,...s],l=c=>this.options.ignoreCaseAndUnderscore?c.toLowerCase().replace(/_/g,""):c;return t.every(c=>a.some(p=>l(p)===l(c)))?[e]:[]}else if(e instanceof Q){let i=this.findUpstream(e.left,t,n),r=this.findUpstream(e.right,t,n);return[...i,...r]}return[]}collectCTEColumns(e,t){let n=[];if(e.withClause)for(let i of e.withClause.tables){let r=this.collectColumnsFromSelectQuery(i.query);n.push(...r)}return n}collectColumnsFromSelectQuery(e){if(e instanceof C)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 gt=class{static parseFromLexeme(e,t){let n=t;if(n<e.length&&(e[n].type&64||e[n].type&2048)){let i=e[n].value;if(n++,n<e.length&&e[n].type&4){let r=[];for(n++;n<e.length&&e[n].type&64&&(r.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(r.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 ne(i,r),newIndex:n}}return{value:new ne(i,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 _e=class{static parse(e){let n=new P(e).readLexmes(),i=this.parseFromLexeme(n,0);if(i.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[i.newIndex].value}" at position ${i.newIndex}. The source expression is complete but there are additional tokens.`);return i.value}static parseTableSourceFromLexemes(e,t){let n=ft.parseTableSourceFromLexemes(e,t);return{value:new B(n.value,null),newIndex:n.newIndex}}static parseFromLexeme(e,t){let n=t,i=ft.parseFromLexeme(e,n);if(n=i.newIndex,n<e.length){if(e[n].value==="as"){n++;let s=gt.parseFromLexeme(e,n);return n=s.newIndex,{value:new B(i.value,s.value),newIndex:n}}if(n<e.length&&this.isTokenTypeAliasCandidate(e[n].type)){let s=gt.parseFromLexeme(e,n);return n=s.newIndex,{value:new B(i.value,s.value),newIndex:n}}}return{value:new B(i.value,null),newIndex:n}}static isTokenTypeAliasCandidate(e){return(e&64)!==0||(e&2048)!==0}};var Ae=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=r=>r instanceof le?o.buildSimpleQuery(r):r,i=new Q(n(e[0]),t,n(e[1]));Ke.normalize(i);for(let r=2;r<e.length;r++)i.appendSelectQuery(t,n(e[r]));return i}constructor(){}static buildSimpleQuery(e){if(e instanceof C)return e;if(e instanceof Q)return o.buildSimpleBinaryQuery(e);if(e instanceof le)return o.buildSimpleValuesQuery(e);throw new Error("Unsupported query type for buildSimpleQuery")}static buildSimpleBinaryQuery(e){let t=o.extractAndRemoveOrderByFromBinaryQuery(e),n=new j(e),i=new B(n,new ne("bq",null)),r=new U(i,null),s=o.createSelectAllClause(),a=new C({selectClause:s,fromClause:r,orderByClause:t});return Ke.normalize(a)}static extractAndRemoveOrderByFromBinaryQuery(e){return o.findAndRemoveRightmostOrderBy(e)}static findAndRemoveRightmostOrderBy(e){if(e instanceof Q){let t=o.findAndRemoveRightmostOrderBy(e.right);return t||o.findAndRemoveRightmostOrderBy(e.left)}else if(e instanceof C){let t=e.orderByClause;if(t)return e.orderByClause=null,t}return null}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 j(e),i=new B(n,new ne("vq",e.columnAliases)),r=new U(i,null),s=e.columnAliases.map(l=>new K(new v("vq",l),l)),a=new J(s,null);return new C({selectClause:a,fromClause:r})}static createSelectAllClause(){let e=new v(null,"*"),t=new K(e,"*");return new J([t],null)}static buildCreateTableQuery(e,t,n=!1){return new kt({tableName:t,isTemporary:n,asSelectQuery:e})}static buildInsertQuery(e,t){let n,i=e.selectClause.items.length;if(n=new Oe().collect(e).map(l=>l.name),!n.length||i!==n.length)throw new Error(`Columns cannot be inferred from the selectQuery. Make sure you are not using wildcards or unnamed columns.
14
+ ${o}`;return new a(l,n,o)}};var _e=class{static{this.AGGREGATE_FUNCTIONS_WITH_ORDER_BY=new Set(["string_agg","array_agg","json_agg","jsonb_agg","json_object_agg","jsonb_object_agg","xmlagg"])}static parseArrayExpression(e,t){let n=t;if(n+1<e.length&&e[n+1].type&512){n++;let i=I.parseArgument(512,1024,e,n);return n=i.newIndex,{value:new ge(i.value),newIndex:n}}else if(n+1<e.length&&e[n+1].type&4){n++,n++;let i=L.parseFromLexeme(e,n);return n=i.newIndex,n++,{value:new ve(i.value),newIndex:n}}throw new Error(`Invalid ARRAY syntax at index ${n}, expected ARRAY[... or ARRAY(...)`)}static parseFromLexeme(e,t){let n=t,i=e[n];return i.value==="array"?this.parseArrayExpression(e,n):i.value==="substring"||i.value==="overlay"?this.parseKeywordFunction(e,n,[{key:"from",required:!1},{key:"for",required:!1}]):i.value==="cast"?this.parseKeywordFunction(e,n,[{key:"as",required:!0}]):i.value==="trim"?this.parseKeywordFunction(e,n,[{key:"from",required:!1}]):this.parseFunctionCall(e,n)}static tryParseBinaryExpression(e,t,n,i=!0,r=!0){let s=t;if(s<e.length&&e[s].type&2){let o=e[s].value.toLowerCase();if(!i&&o==="and"||!r&&o==="or")return null;if(s++,o==="between")return this.parseBetweenExpression(e,s,n,!1);if(o==="not between")return this.parseBetweenExpression(e,s,n,!0);if(o==="::"){let c=this.parseTypeValue(e,s);return s=c.newIndex,{value:new ae(n,c.value),newIndex:s}}let l=I.parseFromLexeme(e,s);return s=l.newIndex,{value:new w(n,o,l.value),newIndex:s}}return null}static parseBetweenExpression(e,t,n,i){let r=t,s=I.parseFromLexeme(e,r,!1);if(r=s.newIndex,r<e.length&&e[r].type&2&&e[r].value!=="and")throw new Error(`Expected 'and' after 'between' at index ${r}`);r++;let o=this.parseBetweenUpperBound(e,r);return r=o.newIndex,{value:new we(n,s.value,o.value,i),newIndex:r}}static parseBetweenUpperBound(e,t){return I.parseFromLexeme(e,t,!1,!1)}static parseFunctionCall(e,t){let n=t,i=Me.parseFromLexeme(e,n),r=i.namespaces,s=i.name;if(n=i.newIndex,n<e.length&&e[n].type&4){let o=s.name.toLowerCase(),l,u=null;if(this.AGGREGATE_FUNCTIONS_WITH_ORDER_BY.has(o)){let m=this.parseAggregateArguments(e,n);l={value:m.arguments,newIndex:m.newIndex},u=m.orderByClause}else l=I.parseArgument(4,8,e,n);n=l.newIndex;let c=null;if(n<e.length&&e[n].value==="within group"){let m=this.parseWithinGroupClause(e,n);c=m.value,n=m.newIndex}let p=!1;if(n<e.length&&e[n].value==="with ordinality"&&(p=!0,n++),n<e.length&&e[n].value==="over"){let m=_t.parseFromLexeme(e,n);return n=m.newIndex,{value:new U(r,s.name,l.value,m.value,c,p,u),newIndex:n}}else return{value:new U(r,s.name,l.value,null,c,p,u),newIndex:n}}else throw Re.fromUnparsedLexemes(e,n,`Expected opening parenthesis after function name '${s.name}'.`)}static parseKeywordFunction(e,t,n){let i=t,r=Me.parseFromLexeme(e,i),s=r.namespaces,o=r.name;if(i=r.newIndex,i<e.length&&e[i].type&4){i++;let l=I.parseFromLexeme(e,i),u=l.value;if(i=l.newIndex,i<e.length&&e[i].type&16)return this.parseFunctionCall(e,t);for(let{key:c,required:p}of n)if(i<e.length&&e[i].type&128&&e[i].value===c)if(i++,i<e.length&&e[i].type&8192){let m=this.parseTypeValue(e,i);u=new w(u,c,m.value),i=m.newIndex}else{let m=I.parseFromLexeme(e,i);u=new w(u,c,m.value),i=m.newIndex}else if(p)throw Re.fromUnparsedLexemes(e,i,`Keyword '${c}' is required for ${o.name} function.`);if(i<e.length&&e[i].type&8){i++;let c=null;if(i<e.length&&e[i].value==="within group"){let m=this.parseWithinGroupClause(e,i);c=m.value,i=m.newIndex}let p=!1;if(i<e.length&&e[i].value==="with ordinality"&&(p=!0,i++),i<e.length&&e[i].value==="over"){i++;let m=_t.parseFromLexeme(e,i);return i=m.newIndex,{value:new U(s,o.name,u,m.value,c,p,null),newIndex:i}}else return{value:new U(s,o.name,u,null,c,p,null),newIndex:i}}else throw Re.fromUnparsedLexemes(e,i,`Missing closing parenthesis for function '${o.name}'.`)}else throw Re.fromUnparsedLexemes(e,i,`Missing opening parenthesis for function '${o.name}'.`)}static parseTypeValue(e,t){let n=t,{namespaces:i,name:r,newIndex:s}=Me.parseFromLexeme(e,n);if(n=s,n<e.length&&e[n].type&4){let o=I.parseArgument(4,8,e,n);return n=o.newIndex,{value:new Qe(i,new B(r.name),o.value),newIndex:n}}else return{value:new Qe(i,new B(r.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 i=rt.parseFromLexeme(e,n);if(n=i.newIndex,n>=e.length||!(e[n].type&8))throw new Error(`Expected ')' after WITHIN GROUP ORDER BY clause at index ${n}`);return n++,{value:i.value,newIndex:n}}static parseAggregateArguments(e,t){let n=t,i=[],r=null;if(n>=e.length||!(e[n].type&4))throw Re.fromUnparsedLexemes(e,n,"Expected opening parenthesis.");if(n++,n<e.length&&e[n].type&8)return n++,{arguments:new j([]),orderByClause:null,newIndex:n};if(n<e.length&&e[n].value==="*"){let l=new b(null,"*");if(n++,n<e.length&&e[n].type&8)return n++,{arguments:l,orderByClause:null,newIndex:n};throw Re.fromUnparsedLexemes(e,n,"Expected closing parenthesis after wildcard '*'.")}let s=I.parseFromLexeme(e,n);for(n=s.newIndex,i.push(s.value);n<e.length&&(e[n].type&16||e[n].value==="order by");){if(e[n].value==="order by"){let l=rt.parseFromLexeme(e,n);n=l.newIndex,r=l.value;break}if(e[n].type&16){if(n++,n<e.length&&e[n].value==="order by"){let u=rt.parseFromLexeme(e,n);n=u.newIndex,r=u.value;break}let l=I.parseFromLexeme(e,n);n=l.newIndex,i.push(l.value)}}if(n>=e.length||!(e[n].type&8))throw Re.fromUnparsedLexemes(e,n,"Expected closing parenthesis.");return n++,{arguments:i.length===1?i[0]:new j(i),orderByClause:r,newIndex:n}}};var wt=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 I=class{static parse(e){let n=new O(e).readLexmes(),i=this.parseFromLexeme(n,0);if(i.newIndex<n.length)throw Re.fromUnparsedLexemes(n,i.newIndex,"[ValueParser]");return i.value}static parseFromLexeme(e,t,n=!0,i=!0){return this.parseExpressionWithPrecedence(e,t,0,n,i)}static parseExpressionWithPrecedence(e,t,n,i=!0,r=!0){let s=t,o=e[s].comments,l=this.parseItem(e,s);l.value.comments=o,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 m=e[s].value;if(!i&&m.toLowerCase()==="and"||!r&&m.toLowerCase()==="or")break;let C=wt.getPrecedence(m);if(C<n)break;if(s++,wt.isBetweenOperator(m)){let M=_e.parseBetweenExpression(e,s,u,m.toLowerCase().includes("not"));u=M.value,s=M.newIndex;continue}if(m==="::"){let M=_e.parseTypeValue(e,s);u=new ae(u,M.value),s=M.newIndex;continue}let v=C+1,h=this.parseExpressionWithPrecedence(e,s,v,i,r);s=h.newIndex,u=new w(u,m,h.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 i=e[n];if(i.type&64&&i.type&2&&i.type&8192){if(n+1<e.length&&e[n+1].type&4)if(this.isTypeConstructor(e,n+1,i.value)){let o=_e.parseTypeValue(e,n);return{value:o.value,newIndex:o.newIndex}}else return _e.parseFromLexeme(e,n);let r=In.parseFromLexeme(e,n);if(r.newIndex>=e.length)return r;if(e[r.newIndex].type&1){let o=Kt.parseFromLexeme(e,r.newIndex);return{value:new Z(e[n].value,o.value),newIndex:o.newIndex}}return r}else if(i.type&64){let{namespaces:r,name:s,newIndex:o}=Me.parseFromLexeme(e,n);if(e[o-1].type&2048)return _e.parseFromLexeme(e,n);if(e[o-1].type&8192)if(o<e.length&&e[o].type&4)if(this.isTypeConstructor(e,o,s.name)){let u=_e.parseTypeValue(e,n);return{value:u.value,newIndex:u.newIndex}}else return _e.parseFromLexeme(e,n);else return{value:new Qe(r,s),newIndex:o};return{value:new b(r,s),newIndex:o}}else{if(i.type&1)return Kt.parseFromLexeme(e,n);if(i.type&4)return Pn.parseFromLexeme(e,n);if(i.type&2048)return _e.parseFromLexeme(e,n);if(i.type&2)return Nn.parseFromLexeme(e,n);if(i.type&256)return An.parseFromLexeme(e,n);if(i.type&4096)return Ln.parseFromLexeme(e,n);if(i.type&128)return Fn.parseFromLexeme(e,n);if(i.type&512){let{namespaces:r,name:s,newIndex:o}=Me.parseFromLexeme(e,n);return{value:new b(r,s),newIndex:o}}else if(i.type&8192){let{namespaces:r,name:s,newIndex:o}=Me.parseFromLexeme(e,n);if(o<e.length&&e[o].type&4)if(this.isTypeConstructor(e,o,s.name)){let l=_e.parseTypeValue(e,n);return{value:l.value,newIndex:l.newIndex}}else return _e.parseFromLexeme(e,n);else return{value:new Qe(r,s),newIndex:o}}}throw Re.fromUnparsedLexemes(e,n,"[ValueParser] Invalid lexeme.")}static parseArgument(e,t,n,i){let r=i,s=[];if(r<n.length&&n[r].type===e){if(r++,r<n.length&&n[r].type===t)return r++,{value:new j([]),newIndex:r};if(r<n.length&&n[r].value==="*"){let l=new b(null,"*");if(r++,r<n.length&&n[r].type===t)return r++,{value:l,newIndex:r};throw Re.fromUnparsedLexemes(n,r,"Expected closing parenthesis after wildcard '*'.")}let o=this.parseFromLexeme(n,r);for(r=o.newIndex,s.push(o.value);r<n.length&&n[r].type&16;){r++;let l=this.parseFromLexeme(n,r);r=l.newIndex,s.push(l.value)}if(r<n.length&&n[r].type===t)return r++,s.length===1?{value:s[0],newIndex:r}:{value:new j(s),newIndex:r};throw Re.fromUnparsedLexemes(n,r,"Missing closing parenthesis.")}throw Re.fromUnparsedLexemes(n,i,"Expected opening parenthesis.")}static parseArrayAccess(e,t,n){let i=t,r=n;for(;i<e.length&&e[i].type&512&&!this.isSqlServerBracketIdentifier(e,i);){if(i++,i>=e.length)throw new Error(`Expected array index or slice after '[' at index ${i-1}`);if(e[i].type&1024)throw new Error(`Empty array access brackets not supported at index ${i}`);let s=null,o=!1;if(e[i].type&2&&e[i].value===":")o=!0,i++;else{let l=wt.getPrecedence(":"),u=this.parseExpressionWithPrecedence(e,i,l+1);s=u.value,i=u.newIndex,i<e.length&&e[i].type&2&&e[i].value===":"&&(o=!0,i++)}if(o){let l=null;if(i<e.length&&!(e[i].type&1024)){let u=wt.getPrecedence(":"),c=this.parseExpressionWithPrecedence(e,i,u+1);l=c.value,i=c.newIndex}if(i>=e.length||!(e[i].type&1024))throw new Error(`Expected ']' after array slice at index ${i}`);i++,r=new He(r,s,l)}else{if(!s){let l=this.parseFromLexeme(e,i);s=l.value,i=l.newIndex}if(i>=e.length||!(e[i].type&1024))throw new Error(`Expected ']' after array index at index ${i}`);i++,r=new Ye(r,s)}}return{value:r,newIndex:i}}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 i=n;if(i+1<e.length){let s=e[i+1];if(s.type&2&&s.value===".")return!0}n=t+1;let r=!0;for(;n<i;){let s=e[n];if(!(s.type&64||s.type&2&&s.value===".")){r=!1;break}n++}return r}static isTypeConstructor(e,t,n){let i=["NUMERIC","DECIMAL","VARCHAR","CHAR","CHARACTER","TIMESTAMP","TIME","INTERVAL"],r=n.toUpperCase();if(i.includes(r))return!0;if(r==="DATE"){let s=t+1;if(s<e.length){let o=e[s];return!(o.type&1&&typeof o.value=="string"&&isNaN(Number(o.value)))}}return!1}};var te=class{constructor(){this.commonTables=[];this.visitedNodes=new Set;this.isRootVisit=!0;this.handlers=new Map,this.handlers.set(f.kind,e=>this.visitSimpleSelectQuery(e)),this.handlers.set(F.kind,e=>this.visitBinarySelectQuery(e)),this.handlers.set(pe.kind,e=>this.visitValuesQuery(e)),this.handlers.set(le.kind,e=>this.visitWithClause(e)),this.handlers.set(ie.kind,e=>this.visitCommonTable(e)),this.handlers.set(z.kind,e=>this.visitSelectItem(e)),this.handlers.set(k.kind,e=>this.visitIdentifierString(e)),this.handlers.set(B.kind,e=>this.visitRawString(e)),this.handlers.set(b.kind,e=>this.visitColumnReference(e)),this.handlers.set(N.kind,e=>this.visitParameterExpression(e)),this.handlers.set(X.kind,e=>this.visitLiteralValue(e)),this.handlers.set(V.kind,e=>this.visitSourceExpression(e)),this.handlers.set(Q.kind,e=>this.visitTableSource(e)),this.handlers.set(qe.kind,e=>this.visitFunctionSource(e)),this.handlers.set($e.kind,e=>this.visitParenSource(e)),this.handlers.set(J.kind,e=>this.visitSubQuerySource(e)),this.handlers.set(me.kind,e=>this.visitInlineQuery(e)),this.handlers.set(K.kind,e=>this.visitFromClause(e)),this.handlers.set(ye.kind,e=>this.visitJoinClause(e)),this.handlers.set(Ce.kind,e=>this.visitJoinOnClause(e)),this.handlers.set(Se.kind,e=>this.visitJoinUsingClause(e)),this.handlers.set(se.kind,e=>this.visitWhereClause(e)),this.handlers.set(Y.kind,e=>this.visitParenExpression(e)),this.handlers.set(w.kind,e=>this.visitBinaryExpression(e)),this.handlers.set(Z.kind,e=>this.visitUnaryExpression(e)),this.handlers.set(ne.kind,e=>this.visitCaseExpression(e)),this.handlers.set(xe.kind,e=>this.visitCaseKeyValuePair(e)),this.handlers.set(Ee.kind,e=>this.visitSwitchCaseArgument(e)),this.handlers.set(we.kind,e=>this.visitBetweenExpression(e)),this.handlers.set(U.kind,e=>this.visitFunctionCall(e)),this.handlers.set(ge.kind,e=>this.visitArrayExpression(e)),this.handlers.set(ve.kind,e=>this.visitArrayQueryExpression(e)),this.handlers.set(Te.kind,e=>this.visitTupleExpression(e)),this.handlers.set(ae.kind,e=>this.visitCastExpression(e)),this.handlers.set(Fe.kind,e=>this.visitWindowFrameExpression(e)),this.handlers.set(ze.kind,e=>this.visitWindowFrameSpec(e)),this.handlers.set(Qe.kind,e=>this.visitTypeValue(e)),this.handlers.set(j.kind,e=>this.visitValueList(e)),this.handlers.set(Ve.kind,e=>this.visitStringSpecifierExpression(e)),this.handlers.set(_.kind,e=>this.visitSelectClause(e)),this.handlers.set(he.kind,e=>this.visitGroupByClause(e)),this.handlers.set(fe.kind,e=>this.visitHavingClause(e)),this.handlers.set(de.kind,e=>this.visitOrderByClause(e)),this.handlers.set(Ie.kind,e=>this.visitWindowFrameClause(e)),this.handlers.set(oe.kind,e=>this.visitLimitClause(e)),this.handlers.set(Ne.kind,e=>this.visitForClause(e)),this.handlers.set(Pe.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",i=e.constructor?.name||"unknown";throw new Error(`[CTECollector] No handler for ${i} 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 St=class{constructor(){this.visitedNodes=new Set;this.isRootVisit=!0;this.handlers=new Map,this.handlers.set(f.kind,e=>this.visitSimpleSelectQuery(e)),this.handlers.set(F.kind,e=>this.visitBinarySelectQuery(e)),this.handlers.set(pe.kind,e=>this.visitValuesQuery(e)),this.handlers.set(z.kind,e=>this.visitSelectItem(e)),this.handlers.set(k.kind,e=>this.visitIdentifierString(e)),this.handlers.set(B.kind,e=>this.visitRawString(e)),this.handlers.set(b.kind,e=>this.visitColumnReference(e)),this.handlers.set(N.kind,e=>this.visitParameterExpression(e)),this.handlers.set(X.kind,e=>this.visitLiteralValue(e)),this.handlers.set(V.kind,e=>this.visitSourceExpression(e)),this.handlers.set(Q.kind,e=>this.visitTableSource(e)),this.handlers.set($e.kind,e=>this.visitParenSource(e)),this.handlers.set(J.kind,e=>this.visitSubQuerySource(e)),this.handlers.set(me.kind,e=>this.visitInlineQuery(e)),this.handlers.set(K.kind,e=>this.visitFromClause(e)),this.handlers.set(ye.kind,e=>this.visitJoinClause(e)),this.handlers.set(Ce.kind,e=>this.visitJoinOnClause(e)),this.handlers.set(Se.kind,e=>this.visitJoinUsingClause(e)),this.handlers.set(se.kind,e=>this.visitWhereClause(e)),this.handlers.set(Y.kind,e=>this.visitParenExpression(e)),this.handlers.set(w.kind,e=>this.visitBinaryExpression(e)),this.handlers.set(Z.kind,e=>this.visitUnaryExpression(e)),this.handlers.set(ne.kind,e=>this.visitCaseExpression(e)),this.handlers.set(xe.kind,e=>this.visitCaseKeyValuePair(e)),this.handlers.set(Ee.kind,e=>this.visitSwitchCaseArgument(e)),this.handlers.set(we.kind,e=>this.visitBetweenExpression(e)),this.handlers.set(U.kind,e=>this.visitFunctionCall(e)),this.handlers.set(ge.kind,e=>this.visitArrayExpression(e)),this.handlers.set(ve.kind,e=>this.visitArrayQueryExpression(e)),this.handlers.set(Te.kind,e=>this.visitTupleExpression(e)),this.handlers.set(ae.kind,e=>this.visitCastExpression(e)),this.handlers.set(Fe.kind,e=>this.visitWindowFrameExpression(e)),this.handlers.set(ze.kind,e=>this.visitWindowFrameSpec(e)),this.handlers.set(Qe.kind,e=>this.visitTypeValue(e)),this.handlers.set(j.kind,e=>this.visitValueList(e)),this.handlers.set(He.kind,e=>this.visitArraySliceExpression(e)),this.handlers.set(Ye.kind,e=>this.visitArrayIndexExpression(e)),this.handlers.set(Ve.kind,e=>this.visitStringSpecifierExpression(e)),this.handlers.set(_.kind,e=>this.visitSelectClause(e)),this.handlers.set(he.kind,e=>this.visitGroupByClause(e)),this.handlers.set(fe.kind,e=>this.visitHavingClause(e)),this.handlers.set(de.kind,e=>this.visitOrderByClause(e)),this.handlers.set(Ie.kind,e=>this.visitWindowFrameClause(e)),this.handlers.set(oe.kind,e=>this.visitLimitClause(e)),this.handlers.set(Ne.kind,e=>this.visitForClause(e)),this.handlers.set(Pe.kind,e=>this.visitOrderByItem(e)),this.handlers.set(je.kind,e=>this.visitPartitionByClause(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",i=e.constructor?.name||"unknown";throw new Error(`[CTEDisabler] No handler for ${i} 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 it(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 pe(t)}visitSelectClause(e){let t=e.items.map(n=>this.visit(n));return new _(t,e.distinct)}visitFromClause(e){let t=this.visit(e.source),n=e.joins?e.joins.map(i=>this.visit(i)):null;return new K(t,n)}visitSubQuerySource(e){let t=this.visit(e.query);return new J(t)}visitInlineQuery(e){let t=this.visit(e.selectQuery);return new me(t)}visitJoinClause(e){let t=this.visit(e.source),n=e.condition?this.visit(e.condition):null;return new ye(e.joinType.value,t,n,e.lateral)}visitJoinOnClause(e){let t=this.visit(e.condition);return new Ce(t)}visitJoinUsingClause(e){let t=this.visit(e.condition);return new Se(t)}visitWhereClause(e){let t=this.visit(e.condition);return new se(t)}visitGroupByClause(e){let t=e.grouping.map(n=>this.visit(n));return new he(t)}visitHavingClause(e){let t=this.visit(e.condition);return new fe(t)}visitOrderByClause(e){let t=e.order.map(n=>this.visit(n));return new de(t)}visitWindowFrameClause(e){let t=this.visit(e.expression);return new Ie(e.name.name,t)}visitLimitClause(e){let t=this.visit(e.value);return new oe(t)}visitForClause(e){return new Ne(e.lockMode)}visitParenExpression(e){let t=this.visit(e.expression);return new Y(t)}visitBinaryExpression(e){let t=this.visit(e.left),n=this.visit(e.right);return new w(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 ne(t,n)}visitSwitchCaseArgument(e){let t=e.cases.map(i=>this.visit(i)),n=e.elseValue?this.visit(e.elseValue):null;return new Ee(t,n)}visitCaseKeyValuePair(e){let t=this.visit(e.key),n=this.visit(e.value);return new xe(t,n)}visitBetweenExpression(e){let t=this.visit(e.expression),n=this.visit(e.lower),i=this.visit(e.upper);return new we(t,n,i,e.negated)}visitFunctionCall(e){let t=e.argument?this.visit(e.argument):null,n=e.over?this.visit(e.over):null;return new U(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 ve(t)}visitTupleExpression(e){let t=e.values.map(n=>this.visit(n));return new Te(t)}visitCastExpression(e){let t=this.visit(e.input),n=this.visit(e.castType);return new ae(t,n)}visitTypeValue(e){let t=e.argument?this.visit(e.argument):null;return new Qe(e.namespaces,e.name,t)}visitSelectItem(e){let t=this.visit(e.value);return new z(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 V(t,n)}visitTableSource(e){return e}visitParenSource(e){let t=this.visit(e.source);return new $e(t)}visitParameterExpression(e){return e}visitWindowFrameExpression(e){let t=e.partition?this.visit(e.partition):null,n=e.order?this.visit(e.order):null,i=e.frameSpec?this.visit(e.frameSpec):null;return new Fe(t,n,i)}visitWindowFrameSpec(e){return e}visitLiteralValue(e){return e}visitOrderByItem(e){let t=this.visit(e.value);return new Pe(t,e.sortDirection,e.nullsPosition)}visitValueList(e){let t=e.values.map(n=>this.visit(n));return new j(t)}visitArraySliceExpression(e){return e}visitArrayIndexExpression(e){return e}visitStringSpecifierExpression(e){return e}visitPartitionByClause(e){let t=this.visit(e.value);return new je(t)}};var Ge=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(f.kind,t=>this.visitSimpleSelectQuery(t)),this.handlers.set(F.kind,t=>this.visitBinarySelectQuery(t)),this.handlers.set(pe.kind,t=>this.visitValuesQuery(t)),this.handlers.set(le.kind,t=>this.visitWithClause(t)),this.handlers.set(ie.kind,t=>this.visitCommonTable(t)),this.handlers.set(K.kind,t=>this.visitFromClause(t)),this.handlers.set(ye.kind,t=>this.visitJoinClause(t)),this.handlers.set(Ce.kind,t=>this.visitJoinOnClause(t)),this.handlers.set(Se.kind,t=>this.visitJoinUsingClause(t)),this.handlers.set(V.kind,t=>this.visitSourceExpression(t)),this.handlers.set(Q.kind,t=>this.visitTableSource(t)),this.handlers.set(qe.kind,t=>this.visitFunctionSource(t)),this.handlers.set($e.kind,t=>this.visitParenSource(t)),this.handlers.set(J.kind,t=>this.visitSubQuerySource(t)),this.handlers.set(me.kind,t=>this.visitInlineQuery(t)),e||(this.handlers.set(se.kind,t=>this.visitWhereClause(t)),this.handlers.set(he.kind,t=>this.visitGroupByClause(t)),this.handlers.set(fe.kind,t=>this.visitHavingClause(t)),this.handlers.set(de.kind,t=>this.visitOrderByClause(t)),this.handlers.set(Ie.kind,t=>this.visitWindowFrameClause(t)),this.handlers.set(oe.kind,t=>this.visitLimitClause(t)),this.handlers.set(Oe.kind,t=>this.visitOffsetClause(t)),this.handlers.set(Ue.kind,t=>this.visitFetchClause(t)),this.handlers.set(Ne.kind,t=>this.visitForClause(t)),this.handlers.set(Pe.kind,t=>this.visitOrderByItem(t)),this.handlers.set(_.kind,t=>this.visitSelectClause(t)),this.handlers.set(z.kind,t=>this.visitSelectItem(t)),this.handlers.set(Y.kind,t=>this.visitParenExpression(t)),this.handlers.set(w.kind,t=>this.visitBinaryExpression(t)),this.handlers.set(Z.kind,t=>this.visitUnaryExpression(t)),this.handlers.set(ne.kind,t=>this.visitCaseExpression(t)),this.handlers.set(xe.kind,t=>this.visitCaseKeyValuePair(t)),this.handlers.set(Ee.kind,t=>this.visitSwitchCaseArgument(t)),this.handlers.set(we.kind,t=>this.visitBetweenExpression(t)),this.handlers.set(U.kind,t=>this.visitFunctionCall(t)),this.handlers.set(ge.kind,t=>this.visitArrayExpression(t)),this.handlers.set(ve.kind,t=>this.visitArrayQueryExpression(t)),this.handlers.set(Te.kind,t=>this.visitTupleExpression(t)),this.handlers.set(ae.kind,t=>this.visitCastExpression(t)),this.handlers.set(j.kind,t=>this.visitValueList(t)),this.handlers.set(Ve.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 B?e.qualifiedName.name.value:e.qualifiedName.name.name):e.qualifiedName.name instanceof B?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 te;t.visit(e);let n=t.getCommonTables();for(let i of n)this.cteNames.add(i.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 dt=class extends g{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 d=class{constructor(e,t="",n=""){this.innerTokens=[];this.type=e,this.text=t,this.containerType=n}};var ht=class{static collect(e){let t=[];function n(i){if(!(!i||typeof i!="object")){i.constructor&&i.constructor.kind===N.kind&&t.push(i);for(let r of Object.keys(i)){let s=i[r];Array.isArray(s)?s.forEach(n):s&&typeof s=="object"&&s.constructor&&s.constructor.kind&&n(s)}}}return n(e),t}};var On=class{constructor(e){this.start=e?.start??'"',this.end=e?.end??'"'}decorate(e){return e=this.start+e+this.end,e}};var Rn=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 Rt=class extends g{static{this.kind=Symbol("UpdateQuery")}constructor(e){super(),this.withClause=e.withClause??null,this.updateClause=e.updateClause,this.setClause=e.setClause instanceof at?e.setClause:new at(e.setClause),this.whereClause=e.whereClause??null,this.fromClause=e.fromClause??null,this.returningClause=e.returning??null}};var We=class a{constructor(e=null,t=null){this.selectValues=[];this.visitedNodes=new Set;this.isRootVisit=!0;this.tableColumnResolver=e??null,this.commonTableCollector=new te,this.commonTables=[],this.initialCommonTables=t,this.handlers=new Map,this.handlers.set(f.kind,n=>this.visitSimpleSelectQuery(n)),this.handlers.set(_.kind,n=>this.visitSelectClause(n)),this.handlers.set(V.kind,n=>this.visitSourceExpression(n)),this.handlers.set(K.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(i=>i.name==="*");if(t.length===0)return;if(this.selectValues.some(i=>i.value instanceof b&&i.value.namespaces===null)){e.fromClause&&this.processFromClause(e.fromClause,!0),this.selectValues=this.selectValues.filter(i=>i.name!=="*");return}let n=t.filter(i=>i.value instanceof b&&i.value.namespaces).map(i=>i.value.getNamespace());if(e.fromClause){let i=e.fromClause.getSourceAliasName();if(i&&n.includes(i)&&this.processFromClause(e.fromClause,!1),e.fromClause.joins)for(let r of e.fromClause.joins){let s=r.getSourceAliasName();s&&n.includes(s)&&this.processJoinClause(r)}}this.selectValues=this.selectValues.filter(i=>i.name!=="*")}processFromClause(e,t){if(e){let n=e.getSourceAliasName();if(this.processSourceExpression(n,e.source),e.joins&&t)for(let i of e.joins)this.processJoinClause(i)}}processJoinClause(e){let t=e.getSourceAliasName();this.processSourceExpression(t,e.source)}processSourceExpression(e,t){let n=this.commonTables.find(i=>i.aliasExpression.table.name===e);if(n){let i=this.commonTables.filter(o=>o.aliasExpression.table.name!==e);new a(this.tableColumnResolver,i).collect(n.query).forEach(o=>{this.addSelectValueAsUnique(o.name,new b(e?[e]:null,o.name))})}else new a(this.tableColumnResolver,this.commonTables).collect(t).forEach(s=>{this.addSelectValueAsUnique(s.name,new b(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 b){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 b(t?[t]:null,n.name))});return}else if(e.datasource instanceof Q){if(this.tableColumnResolver){let t=e.datasource.getSourceName();this.tableColumnResolver(t).forEach(n=>{this.addSelectValueAsUnique(n,new b([t],n))})}return}else if(e.datasource instanceof J){let t=e.getAliasName();new a(this.tableColumnResolver,this.commonTables).collect(e.datasource.query).forEach(r=>{this.addSelectValueAsUnique(r.name,new b(t?[t]:null,r.name))});return}else if(e.datasource instanceof $e)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 Bt=class extends g{static{this.kind=Symbol("CreateTableQuery")}constructor(e){super(),this.tableName=new k(e.tableName),this.isTemporary=e.isTemporary??!1,this.asSelectQuery=e.asSelectQuery}getSelectQuery(){let e;return this.asSelectQuery?e=new We().collect(this.asSelectQuery).map(i=>new z(i.value,i.name)):e=[new z(new B("*"))],new f({selectClause:new _(e),fromClause:new K(new V(new Q(null,this.tableName.name),null),null)})}getCountQuery(){return new f({selectClause:new _([new z(new U(null,"count",new b(null,"*"),null))]),fromClause:new K(new V(new Q(null,this.tableName.name),null),null)})}};var Ri={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"}},Bn=class a{constructor(e){this.handlers=new Map;this.index=1;e?.preset&&(e={...e.preset,...e}),this.parameterDecorator=new Rn({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 On({start:e?.identifierEscape?.start??'"',end:e?.identifierEscape?.end??'"'}),this.handlers.set(j.kind,t=>this.visitValueList(t)),this.handlers.set(b.kind,t=>this.visitColumnReference(t)),this.handlers.set(De.kind,t=>this.visitQualifiedName(t)),this.handlers.set(U.kind,t=>this.visitFunctionCall(t)),this.handlers.set(Z.kind,t=>this.visitUnaryExpression(t)),this.handlers.set(w.kind,t=>this.visitBinaryExpression(t)),this.handlers.set(X.kind,t=>this.visitLiteralValue(t)),this.handlers.set(N.kind,t=>this.visitParameterExpression(t)),this.handlers.set(Ee.kind,t=>this.visitSwitchCaseArgument(t)),this.handlers.set(xe.kind,t=>this.visitCaseKeyValuePair(t)),this.handlers.set(B.kind,t=>this.visitRawString(t)),this.handlers.set(k.kind,t=>this.visitIdentifierString(t)),this.handlers.set(Y.kind,t=>this.visitParenExpression(t)),this.handlers.set(ae.kind,t=>this.visitCastExpression(t)),this.handlers.set(ne.kind,t=>this.visitCaseExpression(t)),this.handlers.set(ge.kind,t=>this.visitArrayExpression(t)),this.handlers.set(ve.kind,t=>this.visitArrayQueryExpression(t)),this.handlers.set(He.kind,t=>this.visitArraySliceExpression(t)),this.handlers.set(Ye.kind,t=>this.visitArrayIndexExpression(t)),this.handlers.set(we.kind,t=>this.visitBetweenExpression(t)),this.handlers.set(Ve.kind,t=>this.visitStringSpecifierExpression(t)),this.handlers.set(Qe.kind,t=>this.visitTypeValue(t)),this.handlers.set(Te.kind,t=>this.visitTupleExpression(t)),this.handlers.set(me.kind,t=>this.visitInlineQuery(t)),this.handlers.set(Fe.kind,t=>this.visitWindowFrameExpression(t)),this.handlers.set(ze.kind,t=>this.visitWindowFrameSpec(t)),this.handlers.set(yt.kind,t=>this.visitWindowFrameBoundStatic(t)),this.handlers.set(gt.kind,t=>this.visitWindowFrameBoundaryValue(t)),this.handlers.set(je.kind,t=>this.visitPartitionByClause(t)),this.handlers.set(de.kind,t=>this.visitOrderByClause(t)),this.handlers.set(Pe.kind,t=>this.visitOrderByItem(t)),this.handlers.set(z.kind,t=>this.visitSelectItem(t)),this.handlers.set(_.kind,t=>this.visitSelectClause(t)),this.handlers.set(Lt.kind,t=>this.visitDistinct(t)),this.handlers.set(Ft.kind,t=>this.visitDistinctOn(t)),this.handlers.set(dt.kind,t=>this.visitHintClause(t)),this.handlers.set(Q.kind,t=>this.visitTableSource(t)),this.handlers.set(qe.kind,t=>this.visitFunctionSource(t)),this.handlers.set(V.kind,t=>this.visitSourceExpression(t)),this.handlers.set(re.kind,t=>this.visitSourceAliasExpression(t)),this.handlers.set(K.kind,t=>this.visitFromClause(t)),this.handlers.set(ye.kind,t=>this.visitJoinClause(t)),this.handlers.set(Ce.kind,t=>this.visitJoinOnClause(t)),this.handlers.set(Se.kind,t=>this.visitJoinUsingClause(t)),this.handlers.set(se.kind,t=>this.visitWhereClause(t)),this.handlers.set(he.kind,t=>this.visitGroupByClause(t)),this.handlers.set(fe.kind,t=>this.visitHavingClause(t)),this.handlers.set(it.kind,t=>this.visitWindowClause(t)),this.handlers.set(Ie.kind,t=>this.visitWindowFrameClause(t)),this.handlers.set(oe.kind,t=>this.visitLimitClause(t)),this.handlers.set(Oe.kind,t=>this.visitOffsetClause(t)),this.handlers.set(Ue.kind,t=>this.visitFetchClause(t)),this.handlers.set(vt.kind,t=>this.visitFetchExpression(t)),this.handlers.set(Ne.kind,t=>this.visitForClause(t)),this.handlers.set(le.kind,t=>this.visitWithClause(t)),this.handlers.set(ie.kind,t=>this.visitCommonTable(t)),this.handlers.set(f.kind,t=>this.visitSimpleQuery(t)),this.handlers.set(J.kind,t=>this.visitSubQuerySource(t)),this.handlers.set(F.kind,t=>this.visitBinarySelectQuery(t)),this.handlers.set(pe.kind,t=>this.visitValuesQuery(t)),this.handlers.set(Te.kind,t=>this.visitTupleExpression(t)),this.handlers.set(nt.kind,t=>this.visitInsertQuery(t)),this.handlers.set(mt.kind,t=>this.visitInsertClause(t)),this.handlers.set(Rt.kind,t=>this.visitUpdateQuery(t)),this.handlers.set(Qt.kind,t=>this.visitUpdateClause(t)),this.handlers.set(at.kind,t=>this.visitSetClause(t)),this.handlers.set(pt.kind,t=>this.visitSetClauseItem(t)),this.handlers.set(fn.kind,t=>this.visitReturningClause(t)),this.handlers.set(Bt.kind,t=>this.visitCreateTableQuery(t))}static{this.SPACE_TOKEN=new d(10," ")}static{this.COMMA_TOKEN=new d(3,",")}static{this.ARGUMENT_SPLIT_COMMA_TOKEN=new d(11,",")}static{this.PAREN_OPEN_TOKEN=new d(4,"(")}static{this.PAREN_CLOSE_TOKEN=new d(4,")")}static{this.DOT_TOKEN=new d(8,".")}visitBinarySelectQuery(e){let t=new d(0,"");return t.innerTokens.push(this.visit(e.left)),t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(new d(1,e.operator.value,"BinarySelectQueryOperator")),t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(this.visit(e.right)),t}static commaSpaceTokens(){return[a.COMMA_TOKEN,a.SPACE_TOKEN]}static argumentCommaSpaceTokens(){return[a.ARGUMENT_SPLIT_COMMA_TOKEN,a.SPACE_TOKEN]}visitQualifiedName(e){let t=new d(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(a.DOT_TOKEN);return t.innerTokens.push(e.name.accept(this)),t}visitPartitionByClause(e){let t=new d(1,"partition by","PartitionByClause");return t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(this.visit(e.value)),t}visitOrderByClause(e){let t=new d(1,"order by","OrderByClause");t.innerTokens.push(a.SPACE_TOKEN);for(let n=0;n<e.order.length;n++)n>0&&t.innerTokens.push(...a.commaSpaceTokens()),t.innerTokens.push(this.visit(e.order[n]));return t}visitOrderByItem(e){let t=new d(0,"","OrderByItem");return t.innerTokens.push(this.visit(e.value)),e.sortDirection&&e.sortDirection!=="asc"&&(t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(new d(1,"desc"))),e.nullsPosition&&(e.nullsPosition==="first"?(t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(new d(1,"nulls first"))):e.nullsPosition==="last"&&(t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(new d(1,"nulls last")))),t}parse(e){this.index=1;let t=this.visit(e),n=ht.collect(e).sort((r,s)=>(r.index??0)-(s.index??0)),i=this.parameterDecorator.style;if(i==="named"){let r={};for(let s of n){let o=s.name.value;if(r.hasOwnProperty(o)){if(r[o]!==s.value)throw new Error(`Duplicate parameter name '${o}' with different values detected during query composition.`);continue}r[o]=s.value}return{token:t,params:r}}else if(i==="indexed"){let r=n.map(s=>s.value);return{token:t,params:r}}else if(i==="anonymous"){let r=n.map(s=>s.value);return{token:t,params:r}}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=this.createCommentBlocks(t);n.length>0&&this.insertCommentBlocksWithSpacing(e,n)}createCommentBlocks(e){let t=[];for(let n of e)n.trim()&&t.push(this.createSingleCommentBlock(n));return t}createSingleCommentBlock(e){let t=new d(0,"","CommentBlock"),n=new d(6,this.formatBlockComment(e));t.innerTokens.push(n);let i=new d(12,"");t.innerTokens.push(i);let r=new d(10," ");return t.innerTokens.push(r),t}insertCommentBlocksWithSpacing(e,t){if(e.innerTokens.unshift(...t),this.shouldAddSeparatorSpace(e.containerType)){let i=new d(10," ");e.innerTokens.splice(t.length,0,i),e.innerTokens.length>t.length+1&&e.innerTokens[t.length+1].type===10&&e.innerTokens.splice(t.length+1,1)}else e.innerTokens.length>t.length&&e.innerTokens[t.length].type===10&&e.innerTokens.splice(t.length,1)}shouldAddSeparatorSpace(e){return this.isClauseLevelContainer(e)}isClauseLevelContainer(e){switch(e){case"SelectClause":case"FromClause":case"WhereClause":case"GroupByClause":case"HavingClause":case"OrderByClause":case"LimitClause":case"OffsetClause":case"WithClause":case"SimpleSelectQuery":return!0;default:return!1}}formatBlockComment(e){return`/* ${e} */`}visitValueList(e){let t=new d(0,"","ValueList");for(let n=0;n<e.values.length;n++)n>0&&t.innerTokens.push(...a.argumentCommaSpaceTokens()),t.innerTokens.push(this.visit(e.values[n]));return t}visitColumnReference(e){let t=new d(0,"","ColumnReference");return t.innerTokens.push(e.qualifiedName.accept(this)),t}visitFunctionCall(e){let t=new d(0,"","FunctionCall");return t.innerTokens.push(e.qualifiedName.accept(this)),t.innerTokens.push(a.PAREN_OPEN_TOKEN),e.argument&&t.innerTokens.push(this.visit(e.argument)),e.internalOrderBy&&(t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(this.visit(e.internalOrderBy))),t.innerTokens.push(a.PAREN_CLOSE_TOKEN),e.withOrdinality&&(t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(new d(1,"with ordinality"))),e.over&&(t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(new d(1,"over")),e.over instanceof k?(t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(e.over.accept(this))):(t.innerTokens.push(a.PAREN_OPEN_TOKEN),t.innerTokens.push(this.visit(e.over)),t.innerTokens.push(a.PAREN_CLOSE_TOKEN))),t}visitUnaryExpression(e){let t=new d(0,"","UnaryExpression");return t.innerTokens.push(this.visit(e.operator)),t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(this.visit(e.expression)),t}visitBinaryExpression(e){let t=new d(0,"","BinaryExpression");return t.innerTokens.push(this.visit(e.left)),t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(new d(5,e.operator.value)),t.innerTokens.push(a.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 d(2,t,"LiteralValue")}visitParameterExpression(e){e.index=this.index;let t=this.parameterDecorator.decorate(e.name.value,e.index),n=new d(7,t);return this.index++,n}visitSwitchCaseArgument(e){let t=new d(0,"","SwitchCaseArgument");for(let n of e.cases)t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(n.accept(this));return e.elseValue&&(t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(this.createElseToken(e.elseValue))),t}createElseToken(e){let t=new d(0,"","ElseClause");t.innerTokens.push(new d(1,"else")),t.innerTokens.push(a.SPACE_TOKEN);let n=new d(0,"","CaseElseValue");return n.innerTokens.push(this.visit(e)),t.innerTokens.push(n),t}visitCaseKeyValuePair(e){let t=new d(0,"","CaseKeyValuePair");t.innerTokens.push(new d(1,"when")),t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(this.visit(e.key)),t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(new d(1,"then")),t.innerTokens.push(a.SPACE_TOKEN);let n=new d(0,"","CaseThenValue");return n.innerTokens.push(this.visit(e.value)),t.innerTokens.push(n),t}visitRawString(e){return new d(2,e.value,"RawString")}visitIdentifierString(e){let t=e.name==="*"?e.name:this.identifierDecorator.decorate(e.name);return new d(2,t,"IdentifierString")}visitParenExpression(e){let t=new d(0,"","ParenExpression");return t.innerTokens.push(a.PAREN_OPEN_TOKEN),t.innerTokens.push(this.visit(e.expression)),t.innerTokens.push(a.PAREN_CLOSE_TOKEN),t}visitCastExpression(e){let t=new d(0,"","CastExpression");return t.innerTokens.push(this.visit(e.input)),t.innerTokens.push(new d(5,"::")),t.innerTokens.push(this.visit(e.castType)),t}visitCaseExpression(e){let t=new d(0,"","CaseExpression");return t.innerTokens.push(new d(1,"case")),e.condition&&(t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(this.visit(e.condition))),t.innerTokens.push(this.visit(e.switchCase)),t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(new d(1,"end")),t}visitArrayExpression(e){let t=new d(0,"","ArrayExpression");return t.innerTokens.push(new d(1,"array")),t.innerTokens.push(new d(4,"[")),t.innerTokens.push(this.visit(e.expression)),t.innerTokens.push(new d(4,"]")),t}visitArrayQueryExpression(e){let t=new d(0,"","ArrayExpression");return t.innerTokens.push(new d(1,"array")),t.innerTokens.push(new d(4,"(")),t.innerTokens.push(this.visit(e.query)),t.innerTokens.push(new d(4,")")),t}visitArraySliceExpression(e){let t=new d(0,"","ArrayExpression");return t.innerTokens.push(this.visit(e.array)),t.innerTokens.push(new d(4,"[")),e.startIndex&&t.innerTokens.push(this.visit(e.startIndex)),t.innerTokens.push(new d(5,":")),e.endIndex&&t.innerTokens.push(this.visit(e.endIndex)),t.innerTokens.push(new d(4,"]")),t}visitArrayIndexExpression(e){let t=new d(0,"","ArrayExpression");return t.innerTokens.push(this.visit(e.array)),t.innerTokens.push(new d(4,"[")),t.innerTokens.push(this.visit(e.index)),t.innerTokens.push(new d(4,"]")),t}visitBetweenExpression(e){let t=new d(0,"","BetweenExpression");return t.innerTokens.push(this.visit(e.expression)),t.innerTokens.push(a.SPACE_TOKEN),e.negated&&(t.innerTokens.push(new d(1,"not")),t.innerTokens.push(a.SPACE_TOKEN)),t.innerTokens.push(new d(1,"between")),t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(this.visit(e.lower)),t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(new d(1,"and")),t.innerTokens.push(a.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 d(2,t+n,"StringSpecifierExpression")}visitTypeValue(e){let t=new d(0,"","TypeValue");return t.innerTokens.push(e.qualifiedName.accept(this)),e.argument&&(t.innerTokens.push(a.PAREN_OPEN_TOKEN),t.innerTokens.push(this.visit(e.argument)),t.innerTokens.push(a.PAREN_CLOSE_TOKEN)),t}visitTupleExpression(e){let t=new d(0,"","TupleExpression");t.innerTokens.push(a.PAREN_OPEN_TOKEN);for(let n=0;n<e.values.length;n++)n>0&&t.innerTokens.push(...a.argumentCommaSpaceTokens()),t.innerTokens.push(this.visit(e.values[n]));return t.innerTokens.push(a.PAREN_CLOSE_TOKEN),t}visitWindowFrameExpression(e){let t=new d(0,"","WindowFrameExpression"),n=!0;return e.partition&&(t.innerTokens.push(this.visit(e.partition)),n=!1),e.order&&(n?n=!1:t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(this.visit(e.order))),e.frameSpec&&(n?n=!1:t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(this.visit(e.frameSpec))),t}visitWindowFrameSpec(e){let t=new d(0,"","WindowFrameSpec");return t.innerTokens.push(new d(1,e.frameType)),e.endBound===null?(t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(e.startBound.accept(this))):(t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(new d(1,"between")),t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(e.startBound.accept(this)),t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(new d(1,"and")),t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(e.endBound.accept(this))),t}visitWindowFrameBoundaryValue(e){let t=new d(0,"","WindowFrameBoundaryValue");return t.innerTokens.push(e.value.accept(this)),t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(new d(1,e.isFollowing?"following":"preceding")),t}visitWindowFrameBoundStatic(e){return new d(1,e.bound)}visitSelectItem(e){let t=new d(0,"","SelectItem");if(t.innerTokens.push(this.visit(e.value)),!e.identifier)return t;if(e.value instanceof b){let n=e.value.column.name;if(e.identifier.name===n)return t}return t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(new d(1,"as")),t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(this.visit(e.identifier)),t}visitSelectClause(e){let t=new d(1,"select","SelectClause"),n="select";for(let i of e.hints)n+=" "+this.visit(i).text;if(e.distinct){let i=e.distinct.accept(this);if(i.innerTokens&&i.innerTokens.length>0){let r=i.text;for(let s of i.innerTokens)r+=this.flattenTokenText(s);n+=" "+r}else n+=" "+i.text}t.text=n,t.innerTokens.push(a.SPACE_TOKEN);for(let i=0;i<e.items.length;i++)i>0&&t.innerTokens.push(...a.commaSpaceTokens()),t.innerTokens.push(this.visit(e.items[i]));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 d(2,e.getFullHint())}visitDistinct(e){return new d(1,"distinct")}visitDistinctOn(e){let t=new d(0,"","DistinctOn");return t.innerTokens.push(new d(1,"distinct on")),t.innerTokens.push(a.PAREN_OPEN_TOKEN),t.innerTokens.push(e.value.accept(this)),t.innerTokens.push(a.PAREN_CLOSE_TOKEN),t}visitTableSource(e){let t="";Array.isArray(e.namespaces)&&e.namespaces.length>0&&(t=e.namespaces.map(i=>i.accept(this).text).join(".")+"."),t+=e.table.accept(this).text;let n=new d(2,t);return e.identifier&&(e.identifier.name,e.table.name),n}visitSourceExpression(e){let t=new d(0,"","SourceExpression");if(t.innerTokens.push(e.datasource.accept(this)),!e.aliasExpression)return t;if(e.datasource instanceof Q){let n=e.datasource.table.name;return e.aliasExpression.table.name===n||(t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(new d(1,"as")),t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(e.aliasExpression.accept(this))),t}else return t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(new d(1,"as")),t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(e.aliasExpression.accept(this)),t}visitFromClause(e){let t=new d(1,"from","FromClause");if(t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(this.visit(e.source)),e.joins)for(let n=0;n<e.joins.length;n++)t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(this.visit(e.joins[n]));return t}visitJoinClause(e){let t=new d(0,"","JoinClause");return t.innerTokens.push(new d(1,e.joinType.value)),e.lateral&&(t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(new d(1,"lateral"))),t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(this.visit(e.source)),e.condition&&(t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(this.visit(e.condition))),t}visitJoinOnClause(e){let t=new d(0,"","JoinOnClause");return t.innerTokens.push(new d(1,"on")),t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(this.visit(e.condition)),t}visitJoinUsingClause(e){let t=new d(0,"","JoinUsingClause");return t.innerTokens.push(new d(1,"using")),t.innerTokens.push(a.PAREN_OPEN_TOKEN),t.innerTokens.push(this.visit(e.condition)),t.innerTokens.push(a.PAREN_CLOSE_TOKEN),t}visitFunctionSource(e){let t=new d(0,"","FunctionSource");return t.innerTokens.push(e.qualifiedName.accept(this)),t.innerTokens.push(a.PAREN_OPEN_TOKEN),e.argument&&t.innerTokens.push(this.visit(e.argument)),t.innerTokens.push(a.PAREN_CLOSE_TOKEN),t}visitSourceAliasExpression(e){let t=new d(0,"","SourceAliasExpression");if(t.innerTokens.push(this.visit(e.table)),e.columns){t.innerTokens.push(a.PAREN_OPEN_TOKEN);for(let n=0;n<e.columns.length;n++)n>0&&t.innerTokens.push(...a.argumentCommaSpaceTokens()),t.innerTokens.push(this.visit(e.columns[n]));t.innerTokens.push(a.PAREN_CLOSE_TOKEN)}return t}visitWhereClause(e){let t=new d(1,"where","WhereClause");return t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(this.visit(e.condition)),t}visitGroupByClause(e){let t=new d(1,"group by","GroupByClause");t.innerTokens.push(a.SPACE_TOKEN);for(let n=0;n<e.grouping.length;n++)n>0&&t.innerTokens.push(...a.commaSpaceTokens()),t.innerTokens.push(this.visit(e.grouping[n]));return t}visitHavingClause(e){let t=new d(1,"having","HavingClause");return t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(this.visit(e.condition)),t}visitWindowClause(e){let t=new d(1,"window","WindowClause");t.innerTokens.push(a.SPACE_TOKEN);for(let n=0;n<e.windows.length;n++)n>0&&t.innerTokens.push(...a.commaSpaceTokens()),t.innerTokens.push(this.visit(e.windows[n]));return t}visitWindowFrameClause(e){let t=new d(0,"","WindowFrameClause");return t.innerTokens.push(e.name.accept(this)),t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(new d(1,"as")),t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(a.PAREN_OPEN_TOKEN),t.innerTokens.push(this.visit(e.expression)),t.innerTokens.push(a.PAREN_CLOSE_TOKEN),t}visitLimitClause(e){let t=new d(1,"limit","LimitClause");return t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(this.visit(e.value)),t}visitOffsetClause(e){let t=new d(1,"offset","OffsetClause");return t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(this.visit(e.value)),t}visitFetchClause(e){let t=new d(1,"fetch","FetchClause");return t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(this.visit(e.expression)),t}visitFetchExpression(e){let t=new d(0,"","FetchExpression");return t.innerTokens.push(new d(1,e.type)),t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(e.count.accept(this)),e.unit&&(t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(new d(1,e.unit))),t}visitForClause(e){let t=new d(1,"for","ForClause");return t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(new d(1,e.lockMode)),t}visitWithClause(e){let t=new d(1,"with","WithClause");t.innerTokens.push(a.SPACE_TOKEN),e.recursive&&(t.innerTokens.push(new d(1,"recursive")),t.innerTokens.push(a.SPACE_TOKEN));for(let n=0;n<e.tables.length;n++)n>0&&t.innerTokens.push(...a.commaSpaceTokens()),t.innerTokens.push(e.tables[n].accept(this));return t.innerTokens.push(a.SPACE_TOKEN),t}visitCommonTable(e){let t=new d(0,"","CommonTable");t.innerTokens.push(e.aliasExpression.accept(this)),t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(new d(1,"as")),t.innerTokens.push(a.SPACE_TOKEN),e.materialized!==null&&(e.materialized?t.innerTokens.push(new d(1,"materialized")):t.innerTokens.push(new d(1,"not materialized")),t.innerTokens.push(a.SPACE_TOKEN)),t.innerTokens.push(a.PAREN_OPEN_TOKEN);let n=new d(0,"","SubQuerySource");return n.innerTokens.push(e.query.accept(this)),t.innerTokens.push(n),t.innerTokens.push(a.PAREN_CLOSE_TOKEN),t}visitSimpleQuery(e){let t=new d(0,"","SimpleSelectQuery");return e.withClause&&t.innerTokens.push(e.withClause.accept(this)),t.innerTokens.push(e.selectClause.accept(this)),e.fromClause&&(t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(e.fromClause.accept(this)),e.whereClause&&(t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(e.whereClause.accept(this))),e.groupByClause&&(t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(e.groupByClause.accept(this))),e.havingClause&&(t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(e.havingClause.accept(this))),e.orderByClause&&(t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(e.orderByClause.accept(this))),e.windowClause&&(t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(e.windowClause.accept(this))),e.limitClause&&(t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(e.limitClause.accept(this))),e.offsetClause&&(t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(e.offsetClause.accept(this))),e.fetchClause&&(t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(e.fetchClause.accept(this))),e.forClause&&(t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(e.forClause.accept(this)))),t}visitSubQuerySource(e){let t=new d(0,"");t.innerTokens.push(a.PAREN_OPEN_TOKEN);let n=new d(0,"","SubQuerySource");return n.innerTokens.push(e.query.accept(this)),t.innerTokens.push(n),t.innerTokens.push(a.PAREN_CLOSE_TOKEN),t}visitValuesQuery(e){let t=new d(1,"values","ValuesQuery");t.innerTokens.push(a.SPACE_TOKEN);let n=new d(0,"","Values");for(let i=0;i<e.tuples.length;i++)i>0&&n.innerTokens.push(...a.commaSpaceTokens()),n.innerTokens.push(e.tuples[i].accept(this));return t.innerTokens.push(n),t}visitInlineQuery(e){let t=new d(0,"");t.innerTokens.push(a.PAREN_OPEN_TOKEN);let n=new d(0,"","InlineQuery");return n.innerTokens.push(e.selectQuery.accept(this)),t.innerTokens.push(n),t.innerTokens.push(a.PAREN_CLOSE_TOKEN),t}visitInsertQuery(e){let t=new d(0,"","InsertQuery");return t.innerTokens.push(this.visit(e.insertClause)),e.selectQuery&&(t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(this.visit(e.selectQuery))),t}visitInsertClause(e){let t=new d(0,"");if(t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(new d(1,"insert into")),t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(e.source.accept(this)),e.columns.length>0){t.innerTokens.push(a.PAREN_OPEN_TOKEN);for(let n=0;n<e.columns.length;n++)n>0&&t.innerTokens.push(...a.commaSpaceTokens()),t.innerTokens.push(e.columns[n].accept(this));t.innerTokens.push(a.PAREN_CLOSE_TOKEN)}return t}visitUpdateQuery(e){let t=new d(0,"","UpdateQuery");return e.withClause&&t.innerTokens.push(e.withClause.accept(this)),t.innerTokens.push(e.updateClause.accept(this)),t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(e.setClause.accept(this)),e.fromClause&&(t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(e.fromClause.accept(this))),e.whereClause&&(t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(e.whereClause.accept(this))),e.returningClause&&(t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(e.returningClause.accept(this))),t}visitUpdateClause(e){let t=new d(1,"update","UpdateClause");return t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(e.source.accept(this)),t}visitSetClause(e){let t=new d(1,"set","SelectClause");t.innerTokens.push(a.SPACE_TOKEN);for(let n=0;n<e.items.length;n++)n>0&&t.innerTokens.push(...a.commaSpaceTokens()),t.innerTokens.push(this.visit(e.items[n]));return t}visitSetClauseItem(e){let t=new d(0,"","SetClauseItem");return t.innerTokens.push(e.column.accept(this)),t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(new d(5,"=")),t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(e.value.accept(this)),t}visitReturningClause(e){let t=new d(1,"returning","ReturningClause");t.innerTokens.push(a.SPACE_TOKEN);for(let n=0;n<e.columns.length;n++)n>0&&t.innerTokens.push(...a.commaSpaceTokens()),t.innerTokens.push(this.visit(e.columns[n]));return t}visitCreateTableQuery(e){let t=new d(1,e.isTemporary?"create temporary table":"create table","CreateTableQuery");return t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(e.tableName.accept(this)),e.asSelectQuery&&(t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(new d(1,"as")),t.innerTokens.push(a.SPACE_TOKEN),t.innerTokens.push(e.asSelectQuery.accept(this))),t}};var zt=class{constructor(e=" ",t=0,n=`\r
15
+ `){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 fi(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.")}},fi=class{constructor(e,t){this.level=e,this.text=t}};var Vn=class a{constructor(e){this.insideWithClause=!1;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.withClauseStyle=e?.withClauseStyle??"standard",this.linePrinter=new zt(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","SimpleSelectQuery"])}print(e,t=0){return this.linePrinter=new zt(this.indentChar,this.indentSize,this.newline),this.insideWithClause=!1,this.linePrinter.lines.length>0&&t!==this.linePrinter.lines[0].level&&(this.linePrinter.lines[0].level=t),this.appendToken(e,t,void 0),this.linePrinter.print()}appendToken(e,t,n){let i=this.insideWithClause;if(e.containerType==="WithClause"&&this.withClauseStyle==="full-oneline"&&(this.insideWithClause=!0),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.exportComment&&this.linePrinter.appendText(e.text);else if(e.type===10)this.handleSpaceToken(e,n);else if(e.type===12)this.handleCommentNewlineToken(e,t);else if(e.containerType==="CommonTable"&&this.withClauseStyle==="cte-oneline"){this.handleCteOnelineToken(e,t);return}else this.linePrinter.appendText(e.text);if(e.keywordTokens&&e.keywordTokens.length>0)for(let o=0;o<e.keywordTokens.length;o++){let l=e.keywordTokens[o];this.appendToken(l,t,e.containerType)}let s=t;!this.isOnelineMode()&&r.text!==""&&this.indentIncrementContainers.has(e.containerType)&&(this.insideWithClause&&this.withClauseStyle==="full-oneline"||(s++,this.linePrinter.appendNewline(s)));for(let o=0;o<e.innerTokens.length;o++){let l=e.innerTokens[o];this.appendToken(l,s,e.containerType)}if(e.containerType==="WithClause"&&this.withClauseStyle==="full-oneline"){this.insideWithClause=!1,this.linePrinter.appendNewline(t);return}s!==t&&(this.insideWithClause&&this.withClauseStyle==="full-oneline"||this.linePrinter.appendNewline(t))}shouldSkipToken(e){return e.type===12?!1:(!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 i=e.text;this.insideWithClause&&this.withClauseStyle==="full-oneline"?this.linePrinter.appendText(i):this.withClauseStyle==="cte-oneline"&&n==="WithClause"?(this.linePrinter.appendText(i),this.linePrinter.appendNewline(t)):this.commaBreak==="before"?(this.insideWithClause&&this.withClauseStyle==="full-oneline"||this.linePrinter.appendNewline(t),this.linePrinter.appendText(i)):this.commaBreak==="after"?(this.linePrinter.appendText(i),this.insideWithClause&&this.withClauseStyle==="full-oneline"||this.linePrinter.appendNewline(t)):this.linePrinter.appendText(i)}handleAndOperatorToken(e,t){let n=this.applyKeywordCase(e.text);this.andBreak==="before"?(this.insideWithClause&&this.withClauseStyle==="full-oneline"||this.linePrinter.appendNewline(t),this.linePrinter.appendText(n)):this.andBreak==="after"?(this.linePrinter.appendText(n),this.insideWithClause&&this.withClauseStyle==="full-oneline"||this.linePrinter.appendNewline(t)):this.linePrinter.appendText(n)}handleJoinClauseToken(e,t){let n=this.applyKeywordCase(e.text);this.insideWithClause&&this.withClauseStyle==="full-oneline"||this.linePrinter.appendNewline(t),this.linePrinter.appendText(n)}handleSpaceToken(e,t){this.shouldSkipCommentBlockSpace(t)||this.linePrinter.appendText(e.text)}shouldSkipCommentBlockSpace(e){return e==="CommentBlock"&&this.insideWithClause&&this.withClauseStyle==="full-oneline"}handleCommentNewlineToken(e,t){this.shouldSkipCommentNewline()||this.isOnelineMode()||this.linePrinter.appendNewline(t)}shouldSkipCommentNewline(){return this.insideWithClause&&this.withClauseStyle==="full-oneline"||this.withClauseStyle==="cte-oneline"}isOnelineMode(){return this.newline===" "}handleCteOnelineToken(e,t){let i=this.createCteOnelinePrinter().print(e,t),r=this.cleanDuplicateSpaces(i);this.linePrinter.appendText(r)}createCteOnelinePrinter(){return new a({indentChar:"",indentSize:0,newline:" ",commaBreak:this.commaBreak,andBreak:this.andBreak,keywordCase:this.keywordCase,exportComment:this.exportComment,strictCommentPlacement:this.strictCommentPlacement,withClauseStyle:"standard"})}cleanDuplicateSpaces(e){return e.replace(/\s{2,}/g," ")}};var mr=["mysql","postgres","sqlserver","sqlite"],Ae=class{constructor(e={}){let t=e.preset?Ri[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 Bn(n),this.printer=new Vn(e)}format(e){let{token:t,params:n}=this.parser.parse(e);return{formattedSql:this.printer.print(t),params:n}}};var lt=class{constructor(){this.sqlFormatter=new Ae({identifierEscape:{start:'"',end:'"'},parameterSymbol:":",parameterStyle:"named"})}format(e,t=null){return t&&(this.sqlFormatter=new Ae(t)),this.sqlFormatter.format(e).formattedSql}formatWithParameters(e,t=null){t&&(this.sqlFormatter=new Ae(t));let n=this.sqlFormatter.format(e);return{sql:n.formattedSql,params:n.params}}visit(e){return this.format(e)}};var $n=class{constructor(){this.sourceCollector=new Ge(!0),this.cteCollector=new te,this.formatter=new lt}build(e){if(e.length===0)return new le(!1,e);let t=this.resolveDuplicateNames(e),{tableMap:n,recursiveCTEs:i,dependencies:r}=this.buildDependencyGraph(t),s=this.sortCommonTables(t,n,i,r);return new le(i.size>0,s)}resolveDuplicateNames(e){let t=new Map;for(let i of e){let r=i.aliasExpression.table.name;t.has(r)||t.set(r,[]),t.get(r).push(i)}let n=[];for(let[i,r]of t.entries()){if(r.length===1){n.push(r[0]);continue}let s=r.map(l=>this.formatter.format(l.query));if(new Set(s).size===1)n.push(r[0]);else throw new Error(`CTE name conflict detected: '${i}' 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,i=new Map,r=new Map;for(let s of e){let o=s.aliasExpression.table.name,l=this.sourceCollector.collect(s.query);for(let c of l)if(c.table.name===o){n.add(o);break}i.has(o)||i.set(o,new Set);let u=this.cteCollector.collect(s.query);for(let c of u){let p=c.aliasExpression.table.name;t.has(p)&&(i.get(o).add(p),r.has(p)||r.set(p,new Set),r.get(p).add(o))}}return{tableMap:t,recursiveCTEs:n,dependencies:i}}sortCommonTables(e,t,n,i){let r=[],s=[],o=new Set,l=new Set,u=c=>{if(o.has(c))return;if(l.has(c))throw new Error(`Circular reference detected in CTE: ${c}`);l.add(c);let p=i.get(c)||new Set;for(let m of p)u(m);l.delete(c),o.add(c),n.has(c)?r.push(t.get(c)):s.push(t.get(c))};for(let c of e){let p=c.aliasExpression.table.name;o.has(p)||u(p)}return[...r,...s]}};var Mn=class{constructor(){this.nameConflictResolver=new $n,this.cteCollector=new te}inject(e,t){if(t.length===0)return e;t.push(...this.cteCollector.collect(e));let n=this.nameConflictResolver.build(t);if(e instanceof f)return this.injectIntoSimpleQuery(e,n);if(e instanceof F)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 f)return this.injectIntoSimpleQuery(e.left,t),e;if(e.left instanceof F)return this.injectIntoBinaryQuery(e.left,t),e;throw new Error("Unsupported query type for BinarySelectQuery left side")}};var Xe=class{constructor(){}static normalize(e){let n=new te().collect(e);return n.length===0?e:(new St().execute(e),new Mn().inject(e,n))}};var ft=(t=>(t.ColumnNameOnly="columnNameOnly",t.FullName="fullName",t))(ft||{}),be=class a{constructor(e,t=!1,n="columnNameOnly",i){this.selectValues=[];this.visitedNodes=new Set;this.uniqueKeys=new Set;this.isRootVisit=!0;this.tableColumnResolver=null;this.commonTables=[];this.initializeProperties(e,t,n,i),this.initializeHandlers()}initializeProperties(e,t,n,i){this.tableColumnResolver=e??null,this.includeWildCard=t,this.commonTableCollector=new te,this.commonTables=[],this.duplicateDetection=n,this.options=i||{}}initializeHandlers(){this.handlers=new Map,this.handlers.set(f.kind,e=>this.visitSimpleSelectQuery(e)),this.handlers.set(F.kind,e=>this.visitBinarySelectQuery(e)),this.initializeClauseHandlers(),this.initializeValueComponentHandlers()}initializeClauseHandlers(){this.handlers.set(_.kind,e=>this.visitSelectClause(e)),this.handlers.set(K.kind,e=>this.visitFromClause(e)),this.handlers.set(se.kind,e=>this.visitWhereClause(e)),this.handlers.set(he.kind,e=>this.visitGroupByClause(e)),this.handlers.set(fe.kind,e=>this.visitHavingClause(e)),this.handlers.set(de.kind,e=>this.visitOrderByClause(e)),this.handlers.set(Ie.kind,e=>this.visitWindowFrameClause(e)),this.handlers.set(oe.kind,e=>this.visitLimitClause(e)),this.handlers.set(Oe.kind,e=>this.offsetClause(e)),this.handlers.set(Ue.kind,e=>this.visitFetchClause(e)),this.handlers.set(Ce.kind,e=>this.visitJoinOnClause(e)),this.handlers.set(Se.kind,e=>this.visitJoinUsingClause(e))}initializeValueComponentHandlers(){this.handlers.set(b.kind,e=>this.visitColumnReference(e)),this.handlers.set(w.kind,e=>this.visitBinaryExpression(e)),this.handlers.set(Z.kind,e=>this.visitUnaryExpression(e)),this.handlers.set(U.kind,e=>this.visitFunctionCall(e)),this.handlers.set(me.kind,e=>this.visitInlineQuery(e)),this.handlers.set(Y.kind,e=>this.visitParenExpression(e)),this.handlers.set(ne.kind,e=>this.visitCaseExpression(e)),this.handlers.set(ae.kind,e=>this.visitCastExpression(e)),this.handlers.set(we.kind,e=>this.visitBetweenExpression(e)),this.handlers.set(ge.kind,e=>this.visitArrayExpression(e)),this.handlers.set(ve.kind,e=>this.visitArrayQueryExpression(e)),this.handlers.set(He.kind,e=>this.visitArraySliceExpression(e)),this.handlers.set(Ye.kind,e=>this.visitArrayIndexExpression(e)),this.handlers.set(j.kind,e=>this.visitValueList(e)),this.handlers.set(Fe.kind,e=>this.visitWindowFrameExpression(e)),this.handlers.set(je.kind,e=>this.visitPartitionByClause(e))}getValues(){return this.selectValues}collect(e){if(!e)throw new Error("Input argument cannot be null or undefined");this.visit(e);let t=this.getValues();return this.reset(),t}reset(){this.selectValues=[],this.visitedNodes.clear(),this.uniqueKeys.clear(),this.commonTables=[]}addSelectValueAsUnique(e,t){let n=this.generateUniqueKey(e,t);this.uniqueKeys.has(n)||(this.uniqueKeys.add(n),this.selectValues.push({name:e,value:t}))}generateUniqueKey(e,t){if(this.duplicateDetection==="columnNameOnly")return this.normalizeColumnName(e);{let n="";t&&typeof t.getNamespace=="function"&&(n=t.getNamespace()||"");let i=n?n+"."+e:e;return this.normalizeColumnName(i)}}normalizeColumnName(e){if(typeof e!="string")throw new Error("Column name must be a string");return this.options.ignoreCaseAndUnderscore?e.toLowerCase().replace(/_/g,""):e}visit(e){if(!this.isRootVisit){this.visitNode(e);return}if(!(e instanceof f||e instanceof F))throw new Error("Root visit requires a SimpleSelectQuery or BinarySelectQuery.");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)){this.visitedNodes.add(e);try{let t=this.handlers.get(e.getKind());t&&t(e)}catch(t){let n=t instanceof Error?t.message:String(t);throw new Error(`Error processing SQL component of type ${e.getKind().toString()}: ${n}`)}}}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)}visitBinarySelectQuery(e){e.left instanceof f?this.visitSimpleSelectQuery(e.left):e.left instanceof F&&this.visitBinarySelectQuery(e.left),e.right instanceof f?this.visitSimpleSelectQuery(e.right):e.right instanceof F&&this.visitBinarySelectQuery(e.right)}visitSelectClause(e){for(let t of e.items)if(t.identifier)this.addSelectValueAsUnique(t.identifier.name,t.value);else if(t.value instanceof b){let n=t.value.column.name;n!=="*"?this.addSelectValueAsUnique(n,t.value):this.includeWildCard&&this.addSelectValueAsUnique(n,t.value)}else t.value.accept(this)}visitFromClause(e){let n=new We(this.tableColumnResolver,this.commonTables).collect(e);for(let i of n)this.addSelectValueAsUnique(i.name,i.value);if(this.options.upstream&&this.collectUpstreamColumns(e),e.joins)for(let i of e.joins)i.condition&&i.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),e.withinGroup&&e.withinGroup.accept(this),e.internalOrderBy&&e.internalOrderBy.accept(this)}visitInlineQuery(e){e.selectQuery&&this.visitNode(e.selectQuery)}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)}visitArraySliceExpression(e){e.array&&e.array.accept(this),e.startIndex&&e.startIndex.accept(this),e.endIndex&&e.endIndex.accept(this)}visitArrayIndexExpression(e){e.array&&e.array.accept(this),e.index&&e.index.accept(this)}visitValueList(e){if(e.values&&Array.isArray(e.values))for(let t of e.values)t&&t.accept(this)}visitPartitionByClause(e){e.value.accept(this)}collectUpstreamColumns(e){if(this.collectAllAvailableCTEColumns(),this.collectUpstreamColumnsFromSource(e.source),e.joins)for(let t of e.joins)this.collectUpstreamColumnsFromSource(t.source)}collectUpstreamColumnsFromSource(e){if(e.datasource instanceof Q){let t=this.findCTEByName(e.datasource.table.name);t?this.collectUpstreamColumnsFromCTE(t):this.collectUpstreamColumnsFromTable(e.datasource)}else e.datasource instanceof J?this.collectUpstreamColumnsFromSubquery(e.datasource):e.datasource instanceof $e&&this.collectUpstreamColumnsFromSource(new V(e.datasource.source,null))}collectUpstreamColumnsFromTable(e){if(this.tableColumnResolver){let t=e.table.name,n=this.tableColumnResolver(t);for(let i of n){let r=new b(e.table.name,i);this.addSelectValueAsUnique(i,r)}}}collectUpstreamColumnsFromSubquery(e){if(e.query instanceof f){let n=new a(this.tableColumnResolver,this.includeWildCard,this.duplicateDetection,{...this.options,upstream:!0}).collect(e.query);for(let i of n)this.addSelectValueAsUnique(i.name,i.value)}}collectUpstreamColumnsFromCTE(e){if(e.query instanceof f){let n=new a(this.tableColumnResolver,this.includeWildCard,this.duplicateDetection,{...this.options,upstream:!1}).collect(e.query);for(let i of n)i.name!=="*"&&this.addSelectValueAsUnique(i.name,i.value)}}collectAllAvailableCTEColumns(){for(let e of this.commonTables)this.collectUpstreamColumnsFromCTE(e)}findCTEByName(e){return this.commonTables.find(t=>t.getSourceAliasName()===e)||null}};var bt=class a{static parse(e){let n=new O(e).readLexmes(),i=this.parseFromLexeme(n,0);if(i.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[i.newIndex].value}" at position ${i.newIndex}. The source component is complete but there are additional tokens.`);return i.value}static parseTableSourceFromLexemes(e,t){let n=Me.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 i=Me.parseFromLexeme(e,n);return i.lastTokenType&2048?a.parseFunctionSource(e,i):a.parseTableSource(i)}static parseTableSource(e){let{namespaces:t,name:n,newIndex:i}=e;return{value:new Q(t,n.name),newIndex:i}}static parseFunctionSource(e,t){let n=t.newIndex,{namespaces:i,name:r}=t,s=I.parseArgument(4,8,e,n);n=s.newIndex;let o=r.name;return{value:new qe({namespaces:i,name:o},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 i=e[n].value;if(i==="select"||i==="values"||i==="with"){let r=this.parseSubQuerySource(e,n);if(n=r.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:r.value,newIndex:n}}else if(e[n].type==4){let r=this.parseParenSource(e,n);if(n=r.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:r.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:i,newIndex:r}=L.parseFromLexeme(e,n);return n=r,{value:new J(i),newIndex:n}}};var Vt=class extends Error{constructor(t){super(`CTE '${t}' already exists in the query`);this.cteName=t;this.name="DuplicateCTEError"}},Et=class extends Error{constructor(t,n){super(`Invalid CTE name '${t}': ${n}`);this.cteName=t;this.name="InvalidCTENameError"}},$t=class extends Error{constructor(t){super(`CTE '${t}' not found in the query`);this.cteName=t;this.name="CTENotFoundError"}};var xt=class{constructor(e,t){this.options=t||{},this.tableColumnResolver=e,this.columnCollector=new be(this.tableColumnResolver,!1,"fullName",{upstream:!0})}find(e,t){let n=typeof t=="string"?[t]:t,r=new te().collect(e),s=new Map;for(let o of r)s.set(o.getSourceAliasName(),o);return this.findUpstream(e,n,s)}handleTableSource(e,t,n){let i=n.get(e.table.name);if(i){let r=new Map(n);r.delete(e.table.name);let s=this.findUpstream(i.query,t,r);return s.length===0?null:s}return null}handleSubQuerySource(e,t,n){let i=this.findUpstream(e.query,t,n);return i.length===0?null:i}processFromClauseBranches(e,t,n){let i=e.getSources();if(i.length===0)return null;let r=[],s=!0,o=0;for(let l of i){let u=l.datasource,c=null;if(u instanceof Q)c=this.handleTableSource(u,t,n),o++;else if(u instanceof J)c=this.handleSubQuerySource(u,t,n),o++;else{if(u instanceof pe)continue;s=!1;break}if(c===null){s=!1;break}r.push(c)}return s&&r.length===o?r.flat():null}findUpstream(e,t,n){if(e instanceof f){let i=e.fromClause;if(i){let c=this.processFromClauseBranches(i,t,n);if(c&&c.length>0)return c}let r=this.columnCollector.collect(e).map(c=>c.name),s=this.collectCTEColumns(e,n),o=[...r,...s],l=c=>this.options.ignoreCaseAndUnderscore?c.toLowerCase().replace(/_/g,""):c;return t.every(c=>o.some(p=>l(p)===l(c)))?[e]:[]}else if(e instanceof F){let i=this.findUpstream(e.left,t,n),r=this.findUpstream(e.right,t,n);return[...i,...r]}return[]}collectCTEColumns(e,t){let n=[];if(e.withClause)for(let i of e.withClause.tables){let r=this.collectColumnsFromSelectQuery(i.query);n.push(...r)}return n}collectColumnsFromSelectQuery(e){if(e instanceof f)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 F)return this.collectColumnsFromSelectQuery(e.left);return[]}};var Tt=class{static parseFromLexeme(e,t){let n=t;if(n<e.length&&(e[n].type&64||e[n].type&2048)){let i=e[n].value;if(n++,n<e.length&&e[n].type&4){let r=[];for(n++;n<e.length&&e[n].type&64&&(r.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(r.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 re(i,r),newIndex:n}}return{value:new re(i,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 Ze=class{static parse(e){let n=new O(e).readLexmes(),i=this.parseFromLexeme(n,0);if(i.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[i.newIndex].value}" at position ${i.newIndex}. The source expression is complete but there are additional tokens.`);return i.value}static parseTableSourceFromLexemes(e,t){let n=bt.parseTableSourceFromLexemes(e,t);return{value:new V(n.value,null),newIndex:n.newIndex}}static parseFromLexeme(e,t){let n=t,i=bt.parseFromLexeme(e,n);if(n=i.newIndex,n<e.length){if(e[n].value==="as"){n++;let s=Tt.parseFromLexeme(e,n);return n=s.newIndex,{value:new V(i.value,s.value),newIndex:n}}if(n<e.length&&this.isTokenTypeAliasCandidate(e[n].type)){let s=Tt.parseFromLexeme(e,n);return n=s.newIndex,{value:new V(i.value,s.value),newIndex:n}}}return{value:new V(i.value,null),newIndex:n}}static isTokenTypeAliasCandidate(e){return(e&64)!==0||(e&2048)!==0}};var Be=class a{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=r=>r instanceof pe?a.buildSimpleQuery(r):r,i=new F(n(e[0]),t,n(e[1]));Xe.normalize(i);for(let r=2;r<e.length;r++)i.appendSelectQuery(t,n(e[r]));return i}constructor(){}static buildSimpleQuery(e){if(e instanceof f)return e;if(e instanceof F)return a.buildSimpleBinaryQuery(e);if(e instanceof pe)return a.buildSimpleValuesQuery(e);throw new Error("Unsupported query type for buildSimpleQuery")}static buildSimpleBinaryQuery(e){let t=a.extractAndRemoveOrderByFromBinaryQuery(e),n=new J(e),i=new V(n,new re("bq",null)),r=new K(i,null),s=a.createSelectAllClause(),o=new f({selectClause:s,fromClause:r,orderByClause:t});return Xe.normalize(o)}static extractAndRemoveOrderByFromBinaryQuery(e){return a.findAndRemoveRightmostOrderBy(e)}static findAndRemoveRightmostOrderBy(e){if(e instanceof F){let t=a.findAndRemoveRightmostOrderBy(e.right);return t||a.findAndRemoveRightmostOrderBy(e.left)}else if(e instanceof f){let t=e.orderByClause;if(t)return e.orderByClause=null,t}return null}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 J(e),i=new V(n,new re("vq",e.columnAliases)),r=new K(i,null),s=e.columnAliases.map(l=>new z(new b("vq",l),l)),o=new _(s,null);return new f({selectClause:o,fromClause:r})}static createSelectAllClause(){let e=new b(null,"*"),t=new z(e,"*");return new _([t],null)}static buildCreateTableQuery(e,t,n=!1){return new Bt({tableName:t,isTemporary:n,asSelectQuery:e})}static buildInsertQuery(e,t){let n,i=e.selectClause.items.length;if(n=new We().collect(e).map(l=>l.name),!n.length||i!==n.length)throw new Error(`Columns cannot be inferred from the selectQuery. Make sure you are not using wildcards or unnamed columns.
14
16
  Select clause column count: ${i}, Columns with valid names: ${n.length}
15
- Detected column names: [${n.join(", ")}]`);let a=_e.parse(t);return new He({insertClause:new ot(a,n),selectQuery:e})}static buildUpdateQuery(e,t,n,i){let r=new bt(_e.parse(n)),s=Array.isArray(i)?i:[i],l=new Oe().collect(e),c=new Z().collect(e);new ht().execute(e);for(let N of s)if(!l.some($=>$.name===N))throw new Error(`Primary key column '${N}' is not present in selectQuery select list.`);let h=r.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 st(N.name,new v(h,N.name))),d=new tt(E),g=new U(e.toSource(t),null),V=null;for(let N of s){let $=new y(new v(h,N),"=",new v(t,N));V=V?new y(V,"and",$):$}let b=new ie(V);return new Tt({updateClause:r,setClause:d,fromClause:g,whereClause:b,withClause:c.length>0?new oe(!1,c):void 0})}};var Ye=class{static set(e,t,n){let i=ut.collect(e),r=!1;for(let s of i)s.name.value===t&&(s.value=n,r=!0);if(!r)throw new Error(`Parameter '${t}' not found in query.`)}};var C=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 Ae.buildBinaryQuery([this,n],t)}appendWhereRaw(t){let n=k.parse(t);this.appendWhere(n)}appendWhere(t){this.whereClause?this.whereClause.condition=new y(this.whereClause.condition,"and",t):this.whereClause=new ie(t)}appendHavingRaw(t){let n=k.parse(t);this.appendHaving(n)}appendHaving(t){this.havingClause?this.havingClause.condition=new y(this.havingClause.condition,"and",t):this.havingClause=new pe(t)}innerJoinRaw(t,n,i,r=null){this.joinSourceRaw("inner join",t,n,i,r)}leftJoinRaw(t,n,i,r=null){this.joinSourceRaw("left join",t,n,i,r)}rightJoinRaw(t,n,i,r=null){this.joinSourceRaw("right join",t,n,i,r)}innerJoin(t,n,i=null){this.joinSource("inner join",t,n,i)}leftJoin(t,n,i=null){this.joinSource("left join",t,n,i)}rightJoin(t,n,i=null){this.joinSource("right join",t,n,i)}joinSourceRaw(t,n,i,r,s=null){let a=ft.parse(n),l=new B(a,new ne(i,null));this.joinSource(t,l,r,s)}joinSource(t,n,i,r=null){if(!this.fromClause)throw new Error("A FROM clause is required to add a JOIN condition.");let s=Array.isArray(i)?i:[i],l=new ke(r).collect(this),u=null,c=0,p=n.getAliasName();if(!p)throw new Error("An alias is required for the source expression to add a JOIN condition.");for(let E of l)if(s.some(d=>d==E.name)){let d=new y(E.value,"=",new v([p],E.name));u?u=new y(u,"and",d):u=d,c++}if(!u||c!==s.length)throw new Error(`Invalid JOIN condition. The specified columns were not found: ${s.join(", ")}`);let h=new me(u),w=new de(t,n,h,!1);this.fromClause&&(this.fromClause.joins?this.fromClause.joins.push(w):this.fromClause.joins=[w]),Ke.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 B(new j(this),new ne(t,null))}appendWith(t){let n=Array.isArray(t)?t:[t];this.withClause?this.withClause.tables.push(...n):this.withClause=new oe(!1,n),Ke.normalize(this)}appendWithRaw(t,n){let i=A.parse(t),r=new te(i,n,null);this.appendWith(r)}overrideSelectItemExpr(t,n){let i=this.selectClause.items.filter(u=>u.identifier?.name===t);if(i.length===0)throw new Error(`Column ${t} not found in the query`);if(i.length>1)throw new Error(`Duplicate column name ${t} found in the query`);let r=i[0],a=new it().visit(r.value),l=n(a);r.value=k.parse(l)}appendWhereExpr(t,n,i){if(i&&i.upstream){let s=new yt().find(this,[t]),a=new ke,l=new it;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 p=l.format(c[0]);u.appendWhereRaw(n(p))}}else{let r=new ke,s=new it,a=r.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 Ye.set(this,t,n),this}toSimpleQuery(){return this}addCTE(t,n,i){if(!t||t.trim()==="")throw new Ct(t,"name cannot be empty or whitespace-only");if(this.hasCTE(t))throw new It(t);let r=i?.materialized??null,s=new te(n,t,r);return this.appendWith(s),this.cteNameCache.add(t),this}removeCTE(t){if(!this.hasCTE(t))throw new Nt(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,i){if(!t||t.trim()==="")throw new Ct(t,"name cannot be empty or whitespace-only");this.hasCTE(t)&&this.removeCTE(t);let r=i?.materialized??null,s=new te(n,t,r);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 R(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 R(e),this.right=t,Ke.normalize(this),this}unionRaw(e){let t=A.parse(e);return this.union(t)}unionAllRaw(e){let t=A.parse(e);return this.unionAll(t)}intersectRaw(e){let t=A.parse(e);return this.intersect(t)}intersectAllRaw(e){let t=A.parse(e);return this.intersectAll(t)}exceptRaw(e){let t=A.parse(e);return this.except(t)}exceptAllRaw(e){let t=A.parse(e);return this.exceptAll(t)}toSource(e="subq"){return new B(new j(this),new ne(e,null))}setParameter(e,t){return Ye.set(this,e,t),this}toSimpleQuery(){return Ae.buildSimpleQuery(this)}};var le=class extends f{static{this.kind=Symbol("ValuesQuery")}constructor(e,t=null){super(),this.tuples=e,this.columnAliases=t}toSimpleQuery(){return Ae.buildSimpleQuery(this)}setParameter(e,t){return Ye.set(this,e,t),this}};var An=class{static parse(e){let n=new P(e).readLexmes(),i=this.parseFromLexeme(n,0);if(i.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[i.newIndex].value}" at position ${i.newIndex}. The SELECT clause is complete but there are additional tokens.`);return i.value}static parseFromLexeme(e,t){let n=t,i=null,r=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&&lt.isHintClause(e[n].value);){let u=lt.extractHintContent(e[n].value);s.push(new lt(u)),n++}if(n<e.length&&e[n].value==="distinct")n++,i=new St;else if(n<e.length&&e[n].value==="distinct on"){n++;let u=k.parseArgument(4,8,e,n);i=new Et(u.value),n=u.newIndex}let a=[],l=Fn.parseItem(e,n);for(a.push(l.value),n=l.newIndex;n<e.length&&e[n].type&16;){n++;let u=Fn.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 J(a,i,s);return u.comments=r,{value:u,newIndex:n}}}},Fn=class{static parse(e){let n=new P(e).readLexmes(),i=this.parseItem(n,0);if(i.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[i.newIndex].value}" at position ${i.newIndex}. The select item is complete but there are additional tokens.`);return i.value}static parseItem(e,t){let n=t,i=k.parseFromLexeme(e,n),r=i.value;if(n=i.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 K(r,s),newIndex:n}}else if(r instanceof v&&r.column.name!=="*")return{value:new K(r,r.column.name),newIndex:n};return{value:new K(r),newIndex:n}}};var Ln=class{static tryParse(e,t){let n=t;if(n<e.length&&e[n].value==="on"){n++;let i=k.parseFromLexeme(e,n);return n=i.newIndex,{value:new me(i.value),newIndex:n}}return null}};var Rn=class{static tryParse(e,t){let n=t;if(n<e.length&&e[n].value==="using"){n++;let i=k.parseArgument(4,8,e,n),r=i.value;return n=i.newIndex,{value:new we(r),newIndex:n}}return null}};var Bn=class{static tryParse(e,t){let n=t,i=[];for(;this.isJoinCommand(e,n);){let r=this.parseJoinClause(e,n);i.push(r.value),n=r.newIndex}return i.length>0?{value:i,newIndex:n}:null}static isJoinKeyword(e){return!!oi.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,i=e[n].value===","?"cross join":e[n].value;n++;let r=this.parseLateral(e,n),s=r.value;n=r.newIndex;let a=_e.parseFromLexeme(e,n);if(n=a.newIndex,n<e.length){let u=Ln.tryParse(e,n);if(u)return{value:new de(i,a.value,u.value,s),newIndex:u.newIndex};let c=Rn.tryParse(e,n);if(c)return{value:new de(i,a.value,c.value,s),newIndex:c.newIndex}}return{value:new de(i,a.value,null,s),newIndex:n}}};var Pt=class{static collectClauseComments(e,t,n){if(t>=e.length||e[t].value.toLowerCase()!==n.toLowerCase())return null;let i=[];e[t].comments&&i.push(...e[t].comments);let r=t-1;for(;r>=0;){let s=e[r];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&&(i.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;r--}return i.length>0?i:null}static isSignificantSqlKeyword(e){return new Set(["select","from","where","group by","having","order by","limit","offset"]).has(e.toLowerCase())}};var Vn=class{static parse(e){let n=new P(e).readLexmes(),i=this.parseFromLexeme(n,0);if(i.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[i.newIndex].value}" at position ${i.newIndex}. The FROM clause is complete but there are additional tokens.`);return i.value}static parseFromLexeme(e,t){let n=t,i=Pt.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 r=_e.parseFromLexeme(e,n);n=r.newIndex;let s=Bn.tryParse(e,n);if(n=s?.newIndex||n,s!==null){let a=new U(r.value,s.value);return a.comments=i,{value:a,newIndex:n}}else{let a=new U(r.value,null);return a.comments=i,{value:a,newIndex:n}}}};var $n=class{static parse(e){let n=new P(e).readLexmes(),i=this.parseFromLexeme(n,0);if(i.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[i.newIndex].value}" at position ${i.newIndex}. The WHERE clause is complete but there are additional tokens.`);return i.value}static parseFromLexeme(e,t){let n=t,i=Pt.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 r=k.parseFromLexeme(e,n),s=new ie(r.value);return s.comments=i,{value:s,newIndex:r.newIndex}}};var Mn=class{static parse(e){let n=new P(e).readLexmes(),i=this.parseFromLexeme(n,0);if(i.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[i.newIndex].value}" at position ${i.newIndex}. The GROUP BY clause is complete but there are additional tokens.`);return i.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 i=[],r=this.parseItem(e,n);for(i.push(r.value),n=r.newIndex;n<e.length&&e[n].type&16;){n++;let s=this.parseItem(e,n);i.push(s.value),n=s.newIndex}if(i.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 ce(i),newIndex:n}}static parseItem(e,t){let n=t,i=k.parseFromLexeme(e,n),r=i.value;return n=i.newIndex,{value:r,newIndex:n}}};var Wn=class{static parse(e){let n=new P(e).readLexmes(),i=this.parseFromLexeme(n,0);if(i.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[i.newIndex].value}" at position ${i.newIndex}. The HAVING clause is complete but there are additional tokens.`);return i.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 i=k.parseFromLexeme(e,n);return{value:new pe(i.value),newIndex:i.newIndex}}};var Dn=class{static parse(e){let n=new P(e).readLexmes(),i=this.parseFromLexeme(n,0);if(i.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[i.newIndex].value}" at position ${i.newIndex}. The WINDOW clause is complete but there are additional tokens.`);return i.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 i=[];for(;n<e.length;){if(n>=e.length||e[n].type!==64)throw new Error("Syntax error: Expected window name after 'WINDOW' keyword.");let r=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=xt.parseFromLexeme(e,n);if(n=s.newIndex,i.push(new be(r,s.value)),n<e.length&&e[n].type&16)n++;else break}if(i.length===0)throw new Error("At least one WINDOW clause is required after WINDOW keyword.");return{value:new Ge(i),newIndex:n}}};var jn=class{static parse(e){let n=new P(e).readLexmes(),i=this.parseFromLexeme(n,0);if(i.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[i.newIndex].value}" at position ${i.newIndex}. The LIMIT clause is complete but there are additional tokens.`);return i.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 i=k.parseFromLexeme(e,n);return n=i.newIndex,{value:new re(i.value),newIndex:n}}};var Un=class{static parse(e){let n=new P(e).readLexmes(),i=this.parseFromLexeme(n,0);if(i.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[i.newIndex].value}" at position ${i.newIndex}. The FOR clause is complete but there are additional tokens.`);return i.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 i=e[n].value,r;switch(i){case"update":r="update",n++;break;case"share":r="share",n++;break;case"key share":r="key share",n++;break;case"no key update":r="no key update",n++;break;default:throw new Error(`Syntax error at position ${n}: Invalid lock mode "${i}". Valid lock modes are: UPDATE, SHARE, KEY SHARE, NO KEY UPDATE.`)}return{value:new Te(r),newIndex:n}}};var Mt=class{static parse(e){let n=new P(e).readLexmes(),i=this.parseFromLexeme(n,0);if(i.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[i.newIndex].value}" at position ${i.newIndex}. The CommonTable definition is complete but there are additional tokens.`);return i.value}static parseFromLexeme(e,t){let n=t,i=n<e.length?e[n].comments:null,r=gt.parseFromLexeme(e,n);if(n=r.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=A.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 te(l.value,r.value,s);return u.comments=i,{value:u,newIndex:n}}};var wt=class{static parse(e){let n=new P(e).readLexmes(),i=this.parseFromLexeme(n,0);if(i.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[i.newIndex].value}" at position ${i.newIndex}. The WITH clause is complete but there are additional tokens.`);return i.value}static parseFromLexeme(e,t){let n=t,i=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 r=n<e.length&&e[n].value.toLowerCase()==="recursive";r&&n++;let s=[],a=Mt.parseFromLexeme(e,n);for(s.push(a.value),n=a.newIndex;n<e.length&&e[n].type&16;){n++;let u=Mt.parseFromLexeme(e,n);s.push(u.value),n=u.newIndex}let l=new oe(r,s);return l.comments=i,{value:l,newIndex:n}}};var Jn=class{static parse(e){let n=new P(e).readLexmes(),i=this.parseFromLexeme(n,0);if(i.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[i.newIndex].value}" at position ${i.newIndex}. The VALUES clause is complete but there are additional tokens.`);return i.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 i=[],r=this.parseTuple(e,n);for(i.push(r.value),n=r.newIndex;n<e.length&&e[n].type&16;){n++;let a=this.parseTuple(e,n);i.push(a.value),n=a.newIndex}return{value:new le(i),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 i=[];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 r=k.parseFromLexeme(e,n);for(i.push(r.value),n=r.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);i.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(i),newIndex:n}}};var qn=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 i=li.parseFromLexeme(e,n),r=i.value;return n=i.newIndex,{value:new Me(r),newIndex:n}}},li=class{static parseFromLexeme(e,t){let n=t,i,r=e[n].value;if(r==="first")i="first";else if(r==="next")i="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 G(1),a="rows only",n++,{value:new mt(i,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 mt(i,s,a),newIndex:n}}};var Kn=class{static parse(e){let n=new P(e).readLexmes(),i=this.parseFromLexeme(n,0);if(i.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[i.newIndex].value}" at position ${i.newIndex}. The OFFSET clause is complete but there are additional tokens.`);return i.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 i=k.parseFromLexeme(e,n);return n=i.newIndex,n<e.length&&(e[n].value==="row"||e[n].value==="rows")&&n++,{value:new Qe(i.value),newIndex:n}}};var Wt=class{static{this.SQL_COMMANDS=new Set(["select","from","where","and","or","order","by","group","having","limit","offset","as","on","inner","left","right","join","union","insert","update","delete","into","values","set"])}static findLexemeAtPosition(e,t){if(t<0||t>=e.length)return null;let n=this.getAllLexemesWithPosition(e);for(let i of n)if(i.position&&t>=i.position.startPosition&&t<i.position.endPosition)return i;return null}static getAllLexemesWithPosition(e){if(!e?.trim())return[];try{let t=[],n=0;for(;n<e.length&&(n=this.skipWhitespaceAndComments(e,n),!(n>=e.length));){let i=this.parseNextToken(e,n);i?(t.push(i),n=i.position.endPosition):n++}return t}catch{return[]}}static skipWhitespaceAndComments(e,t){return he.readWhiteSpaceAndComment(e,t).position}static parseNextToken(e,t){let n=e[t];return n==="'"||n==='"'?this.parseStringLiteral(e,t):/[=<>!+\-*/%().*]/.test(n)?this.parseOperator(e,t):n===","?this.createLexeme(16,",",t,t+1):/[a-zA-Z0-9_]/.test(n)?this.parseWordToken(e,t):null}static parseStringLiteral(e,t){let n=e[t],i=t+1,r=n;for(;i<e.length&&e[i]!==n;)r+=e[i++];return i<e.length&&(r+=e[i++]),this.createLexeme(1,r,t,i)}static parseOperator(e,t){let n=e[t],i=t+1;i<e.length&&/[=<>!]/.test(e[i])&&/[=<>!]/.test(n)&&(n+=e[i++]);let r=this.getOperatorTokenType(n);return this.createLexeme(r,n,t,i)}static parseWordToken(e,t){let n=t,i="";for(;n<e.length&&/[a-zA-Z0-9_]/.test(e[n]);)i+=e[n++];let r=this.getWordTokenType(i,e,n),s=this.shouldLowercase(r)?i.toLowerCase():i;return this.createLexeme(r,s,t,n)}static getOperatorTokenType(e){switch(e){case"(":return 4;case")":return 8;case"*":return 64;default:return 2}}static getWordTokenType(e,t,n){let i=e.toLowerCase();if(this.SQL_COMMANDS.has(i))return 128;let r=this.skipWhitespaceAndComments(t,n);return r<t.length&&t[r]==="("?2048:64}static shouldLowercase(e){return!!(e&128)||!!(e&2)||!!(e&2048)}static createLexeme(e,t,n,i){return{type:e,value:t,comments:null,position:{startPosition:n,endPosition:i}}}};var vt=class{static analyzeCursorPosition(e,t){let n=this.extractCTERegions(e),r=this.calculateExtendedCTEBoundaries(e,n).find(s=>t>=s.startPosition&&t<s.extendedEndPosition);return r?{isInCTE:!0,cteRegion:{name:r.name,startPosition:r.startPosition,endPosition:r.endPosition,sqlContent:r.sqlContent},executableSQL:r.sqlContent}:{isInCTE:!1,cteRegion:null,executableSQL:this.extractMainQuery(e,n)}}static getCursorCte(e,t){try{let n=this.analyzeCursorPosition(e,t);return n.isInCTE&&n.cteRegion?.name||null}catch{return null}}static getCursorCteAt(e,t,n){try{let i=this.lineColumnToPosition(e,t,n);return i===-1?null:this.getCursorCte(e,i)}catch{return null}}static lineColumnToPosition(e,t,n){if(t<1||n<1)return-1;let i=e.split(`
16
- `);if(t>i.length)return-1;let r=i[t-1];if(n>r.length+1)return-1;let s=0;for(let a=0;a<t-1;a++)s+=i[a].length+1;return s+=n-1,s}static positionToLineColumn(e,t){if(t<0||t>e.length)return null;let i=e.substring(0,t).split(`
17
- `);return{line:i.length,column:i[i.length-1].length+1}}static extractCTERegions(e){let t=Wt.getAllLexemesWithPosition(e),n=[],i=0,r=!1;for(;i<t.length;){let s=t[i];if(s.value.toLowerCase()==="with"&&!r){r=!0,i++;continue}if(r&&s.value.toLowerCase()==="recursive"){i++;continue}if(r&&s.type===64&&i+1<t.length&&t[i+1].value.toLowerCase()==="as"){let a=s.value,l=s.position.startPosition,u=i+2;for(;u<t.length&&t[u].value!=="(";)u++;if(u<t.length){let c=this.findMatchingParen(t,u);if(c){let p=c.endPosition,h=this.extractCTESQL(e,t,u,c.index);n.push({name:a,startPosition:l,endPosition:p,sqlContent:h}),i=c.index+1;continue}}}if(r&&s.value.toLowerCase()==="select"&&this.isMainQuerySelect(t,i))break;i++}return n}static findMatchingParen(e,t){let n=1,i=t+1;for(;i<e.length&&n>0;){if(e[i].value==="("?n++:e[i].value===")"&&n--,n===0)return{index:i,endPosition:e[i].position.endPosition};i++}return null}static extractCTESQL(e,t,n,i){let r=t[n+1].position.startPosition,s=t[i-1].position.endPosition;return e.substring(r,s).trim()}static isMainQuerySelect(e,t){let n=0;for(let i=t-1;i>=0;i--)e[i].value===")"?n++:e[i].value==="("&&n--;return n===0}static calculateExtendedCTEBoundaries(e,t){return t.length===0?[]:t.map((n,i)=>{let r;return i<t.length-1?r=t[i+1].startPosition:r=this.findMainQueryStart(e,n.endPosition),{...n,extendedEndPosition:r}})}static findMainQueryStart(e,t){let n=t;for(;n<e.length;){if(e.substring(n).toLowerCase().trim().startsWith("select")){let r=e.toLowerCase().indexOf("select",n);return r!==-1?r:n}n++}return e.length}static extractMainQuery(e,t){if(t.length===0)return e.trim();let r=t[t.length-1].endPosition;for(;r<e.length&&!e.substring(r).toLowerCase().trim().startsWith("select");)r++;return e.substring(r).trim()}static getCTEPositions(e){let t=this.extractCTERegions(e),n=[];if(t.forEach(i=>{n.push({name:i.name,startPosition:i.startPosition,type:"CTE"})}),t.length>0){let r=t[t.length-1].endPosition;for(;r<e.length;){if(e.substring(r).toLowerCase().trim().startsWith("select")){n.push({name:"MAIN_QUERY",startPosition:r,type:"MAIN_QUERY"});break}r++}}else n.push({name:"MAIN_QUERY",startPosition:0,type:"MAIN_QUERY"});return n}};var A=class{static parse(e){let n=new P(e).readLexmes(),i=this.parseFromLexeme(n,0);if(i.newIndex<n.length)throw new Error(`[SelectQueryParser] Syntax error: Unexpected token "${n[i.newIndex].value}" at position ${i.newIndex}. The SELECT query is complete but there are additional tokens.`);return i.value}static calculateCharacterPosition(e,t,n){if(n>=t.length)return e.length;let i=t[n];if(i.position?.startPosition!==void 0)return i.position.startPosition;let r=0;for(let l=0;l<n;l++){let u=t[l].value,c=e.indexOf(u,r);c!==-1&&(r=c+u.length)}let s=t[n].value,a=e.indexOf(s,r);return a!==-1?a:r}static analyze(e){let t=[];try{t=new P(e).readLexmes();let i=this.parseFromLexeme(t,0);if(i.newIndex<t.length){let r=t.slice(i.newIndex).map(l=>l.value),s=t[i.newIndex],a=this.calculateCharacterPosition(e,t,i.newIndex);return{success:!1,query:i.value,error:`Syntax error: Unexpected token "${s.value}" at character position ${a}. The SELECT query is complete but there are additional tokens.`,errorPosition:a,remainingTokens:r}}return{success:!0,query:i.value}}catch(n){let i,r=n instanceof Error?n.message:String(n),s=r.match(/position (\d+)/);if(s){let a=parseInt(s[1],10);i=this.calculateCharacterPosition(e,t,a)}return{success:!1,error:r,errorPosition:i}}}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 i=e[n].value;if(!this.selectCommandSet.has(i)&&i!=="values")throw new Error(`Syntax error at position ${n}: Expected 'SELECT' or 'VALUES' keyword but found "${e[n].value}".`);let r=this.selectCommandSet.has(i)?this.parseSimpleSelectQuery(e,n):this.parseValuesQuery(e,n),s=r.value;for(n=r.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,i=null;n<e.length&&e[n].value==="with"&&(i=wt.parseFromLexeme(e,n),n=i.newIndex);let r=n<e.length?e[n].comments:null;if(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=An.parseFromLexeme(e,n);n=s.newIndex,r&&s.value.comments&&JSON.stringify(r)===JSON.stringify(s.value.comments)&&(s.value.comments=null);let a=null;n<e.length&&e[n].value==="from"&&(a=Vn.parseFromLexeme(e,n),n=a.newIndex);let l=null;n<e.length&&e[n].value==="where"&&(l=$n.parseFromLexeme(e,n),n=l.newIndex);let u=null;n<e.length&&e[n].value==="group by"&&(u=Mn.parseFromLexeme(e,n),n=u.newIndex);let c=null;n<e.length&&e[n].value==="having"&&(c=Wn.parseFromLexeme(e,n),n=c.newIndex);let p=null;n<e.length&&e[n].value==="window"&&(p=Dn.parseFromLexeme(e,n),n=p.newIndex);let h=null;n<e.length&&e[n].value==="order by"&&(h=at.parseFromLexeme(e,n),n=h.newIndex);let w=null;n<e.length&&e[n].value==="limit"&&(w=jn.parseFromLexeme(e,n),n=w.newIndex);let E=null;n<e.length&&e[n].value==="offset"&&(E=Kn.parseFromLexeme(e,n),n=E.newIndex);let d=null;n<e.length&&e[n].value==="fetch"&&(d=qn.parseFromLexeme(e,n),n=d.newIndex);let g=null;n<e.length&&e[n].value.toLowerCase()==="for"&&(g=Un.parseFromLexeme(e,n),n=g.newIndex);let V=new C({withClause:i?i.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:p?p.value:null,limitClause:w?w.value:null,offsetClause:E?E.value:null,fetchClause:d?d.value:null,forClause:g?g.value:null});return V.comments=r,{value:V,newIndex:n}}static parseValuesQuery(e,t){let n=Jn.parseFromLexeme(e,t);return{value:n.value,newIndex:n.newIndex}}static getCursorCte(e,t){return vt.getCursorCte(e,t)}static getCursorCteAt(e,t,n){return vt.getCursorCteAt(e,t,n)}static positionToLineColumn(e,t){return vt.positionToLineColumn(e,t)}};var ui=class{static parse(e){let n=new P(e).readLexmes(),i=this.parseFromLexeme(n,0);if(i.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[i.newIndex].value}" at position ${i.newIndex}. The INSERT query is complete but there are additional tokens.`);return i.value}static parseFromLexeme(e,t){let n=t,i=null;if(e[n].value==="with"){let l=wt.parseFromLexeme(e,n);i=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 r=_e.parseTableSourceFromLexemes(e,n);n=r.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=A.parseFromLexeme(e,n);if(i)if(a.value instanceof C)a.value.withClause=i;else throw new Error("WITH clause is not supported in this context.");return n=a.newIndex,{value:new He({insertClause:new ot(r.value,s),selectQuery:a.value}),newIndex:n}}};var Dt=class{constructor(){this.tableSources=[];this.visitedNodes=new Set;this.tableNameMap=new Map;this.isRootVisit=!0;this.handlers=new Map,this.handlers.set(C.kind,e=>this.visitSimpleSelectQuery(e)),this.handlers.set(Q.kind,e=>this.visitBinarySelectQuery(e)),this.handlers.set(le.kind,e=>this.visitValuesQuery(e)),this.handlers.set(U.kind,e=>this.visitFromClause(e)),this.handlers.set(de.kind,e=>this.visitJoinClause(e)),this.handlers.set(me.kind,e=>this.visitJoinOnClause(e)),this.handlers.set(we.kind,e=>this.visitJoinUsingClause(e)),this.handlers.set(B.kind,e=>this.visitSourceExpression(e)),this.handlers.set(O.kind,e=>this.visitTableSource(e)),this.handlers.set(qe.kind,e=>this.visitFunctionSource(e)),this.handlers.set(Le.kind,e=>this.visitParenSource(e)),this.handlers.set(j.kind,e=>this.visitSubQuerySource(e)),this.handlers.set(ge.kind,e=>this.visitInlineQuery(e)),this.handlers.set(ie.kind,e=>this.visitWhereClause(e)),this.handlers.set(ce.kind,e=>this.visitGroupByClause(e)),this.handlers.set(pe.kind,e=>this.visitHavingClause(e)),this.handlers.set(ue.kind,e=>this.visitOrderByClause(e)),this.handlers.set(be.kind,e=>this.visitWindowFrameClause(e)),this.handlers.set(re.kind,e=>this.visitLimitClause(e)),this.handlers.set(Qe.kind,e=>this.visitOffsetClause(e)),this.handlers.set(Me.kind,e=>this.visitFetchClause(e)),this.handlers.set(Te.kind,e=>this.visitForClause(e)),this.handlers.set(xe.kind,e=>this.visitOrderByItem(e)),this.handlers.set(J.kind,e=>this.visitSelectClause(e)),this.handlers.set(K.kind,e=>this.visitSelectItem(e)),this.handlers.set(H.kind,e=>this.visitParenExpression(e)),this.handlers.set(y.kind,e=>this.visitBinaryExpression(e)),this.handlers.set(Y.kind,e=>this.visitUnaryExpression(e)),this.handlers.set(ee.kind,e=>this.visitCaseExpression(e)),this.handlers.set(Se.kind,e=>this.visitCaseKeyValuePair(e)),this.handlers.set(ve.kind,e=>this.visitSwitchCaseArgument(e)),this.handlers.set(ye.kind,e=>this.visitBetweenExpression(e)),this.handlers.set(D.kind,e=>this.visitFunctionCall(e)),this.handlers.set(fe.kind,e=>this.visitArrayExpression(e)),this.handlers.set(Ce.kind,e=>this.visitArrayQueryExpression(e)),this.handlers.set(Ee.kind,e=>this.visitTupleExpression(e)),this.handlers.set(se.kind,e=>this.visitCastExpression(e)),this.handlers.set(q.kind,e=>this.visitValueList(e)),this.handlers.set(Fe.kind,e=>this.visitStringSpecifierExpression(e))}collect(e){return this.visit(e),this.getTableSources()}getTableSources(){return this.tableSources}reset(){this.tableSources=[],this.tableNameMap.clear(),this.visitedNodes.clear()}getTableIdentifier(e){return e.qualifiedName.namespaces&&e.qualifiedName.namespaces.length>0?e.qualifiedName.namespaces.map(t=>t.name).join(".")+"."+(e.qualifiedName.name instanceof R?e.qualifiedName.name.value:e.qualifiedName.name.name):e.qualifiedName.name instanceof R?e.qualifiedName.name.value:e.qualifiedName.name.name}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){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.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){for(let t of e.tuples)t.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.tableNameMap.set(t,!0),this.tableSources.push(e))}visitFunctionSource(e){e.argument&&this.visitValueComponent(e.argument)}visitValueComponent(e){e.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)}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 rt=class o{constructor(){this.dependencyGraph=null;this.cteMap=new Map;this.sourceCollector=new nt(!1),this.cteReferenceCollector=new Dt,this.cteCollector=new Z}static{this.ERROR_MESSAGES={NOT_ANALYZED:"Must call analyzeDependencies first",CIRCULAR_REFERENCE:"Circular reference detected in CTE"}}static{this.MAIN_QUERY_NAME="MAIN_QUERY"}analyzeDependencies(e){let t=this.cteCollector.collect(e);return this.buildCTEMap(t),this.dependencyGraph=this.buildDependencyGraph(t,e),this.dependencyGraph}getDependencies(e){this.ensureAnalyzed();let t=this.findNodeByName(e);return t?[...t.dependencies]:[]}getDependents(e){this.ensureAnalyzed();let t=this.findNodeByName(e);return t?[...t.dependents]:[]}getMainQueryDependencies(){this.ensureAnalyzed();let e=this.findNodeByName(o.MAIN_QUERY_NAME);return e?[...e.dependencies]:[]}getNodesByType(e){return this.ensureAnalyzed(),this.dependencyGraph.nodes.filter(t=>t.type===e)}getMainQueryNode(){return this.ensureAnalyzed(),this.findNodeByName(o.MAIN_QUERY_NAME)}hasCircularDependency(){this.ensureAnalyzed();try{return this.getExecutionOrder(),!1}catch(e){if(e instanceof Error&&e.message.includes(o.ERROR_MESSAGES.CIRCULAR_REFERENCE))return!0;throw e}}getExecutionOrder(){this.ensureAnalyzed();let e=new Set,t=new Set,n=[],i=new Map;for(let s of this.dependencyGraph.nodes)i.set(s.name,new Set(s.dependencies));let r=s=>{if(e.has(s))return;if(t.has(s))throw new Error(`${o.ERROR_MESSAGES.CIRCULAR_REFERENCE}: ${s}`);t.add(s);let a=i.get(s)||new Set;for(let l of a)r(l);t.delete(s),e.add(s),n.push(s)};for(let s of this.dependencyGraph.nodes)e.has(s.name)||r(s.name);return n}buildDependencyGraph(e,t){let n=[],i=[],r=new Map,s=new Map;for(let l of e){let u=o.getCTEName(l);r.set(u,new Set),s.set(u,new Set)}r.set(o.MAIN_QUERY_NAME,new Set),s.set(o.MAIN_QUERY_NAME,new Set);for(let l of e){let u=o.getCTEName(l),c=this.sourceCollector.collect(l.query);for(let p of c){let h=p.table.name;this.cteMap.has(h)&&h!==u&&(r.get(u).add(h),s.get(h).add(u),i.push({from:u,to:h}))}}let a=this.getMainQueryWithoutCTE(t);if(a){let l=this.cteReferenceCollector.collect(a);for(let u of l){let c=u.table.name;this.cteMap.has(c)&&(r.get(o.MAIN_QUERY_NAME).add(c),s.get(c).add(o.MAIN_QUERY_NAME),i.push({from:o.MAIN_QUERY_NAME,to:c}))}}for(let l of e){let u=o.getCTEName(l);n.push({name:u,type:"CTE",cte:l,dependencies:Array.from(r.get(u)||new Set),dependents:Array.from(s.get(u)||new Set)})}return n.push({name:o.MAIN_QUERY_NAME,type:"ROOT",cte:null,dependencies:Array.from(r.get(o.MAIN_QUERY_NAME)||new Set),dependents:Array.from(s.get(o.MAIN_QUERY_NAME)||new Set)}),{nodes:n,edges:i}}ensureAnalyzed(){if(!this.dependencyGraph)throw new Error(o.ERROR_MESSAGES.NOT_ANALYZED)}buildCTEMap(e){this.cteMap.clear();for(let t of e){let n=o.getCTEName(t);this.cteMap.set(n,t)}}findNodeByName(e){return this.dependencyGraph?.nodes.find(t=>t.name===e)}getMainQueryWithoutCTE(e){return e.withClause?new C({selectClause:e.selectClause,fromClause:e.fromClause,whereClause:e.whereClause,groupByClause:e.groupByClause,havingClause:e.havingClause,orderByClause:e.orderByClause,limitClause:e.limitClause,offsetClause:e.offsetClause,fetchClause:e.fetchClause,forClause:e.forClause,windowClause:e.windowClause}):e}static getCTEName(e){return e.aliasExpression.table.name}};var jt=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 i=[],r=n?t:t.toLowerCase(),s=a=>{a&&a instanceof f&&a.comments&&a.comments.some(l=>(n?l:l.toLowerCase()).includes(r))&&i.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),i}static replaceInComments(e,t,n,i=!1){let r=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=i?"g":"gi",p=new RegExp(t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),c),h=u.replace(p,n);h!==u&&(a.comments[l]=h,r++)}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 countComments(e){let t=0,n=i=>{i&&i instanceof f&&i.comments&&(t+=i.comments.length);for(let r in i)i[r]&&typeof i[r]=="object"&&(Array.isArray(i[r])?i[r].forEach(n):n(i[r]))};return n(e),t}static getAllComments(e){let t=[],n=i=>{i&&i instanceof f&&i.comments&&i.comments.forEach((r,s)=>{t.push({comment:r,component:i,index:s})});for(let r in i)i[r]&&typeof i[r]=="object"&&(Array.isArray(i[r])?i[r].forEach(n):n(i[r]))};return n(e),t}};var Xe=class{constructor(e,t){this.name=e,this.columns=t}},Ut=class{constructor(e=null,t=!1){this.tableColumnResolver=e;this.allowWildcardWithoutResolver=t;this.tableSchemas=[];this.visitedNodes=new Set;this.commonTables=[];this.running=!1;this.unresolvedColumns=[];this.analysisError=void 0;this.isAnalyzeMode=!1;this.handlers=new Map,this.handlers.set(C.kind,n=>this.visitSimpleSelectQuery(n)),this.handlers.set(Q.kind,n=>this.visitBinarySelectQuery(n))}collect(e){return this.visit(e),this.tableSchemas}analyze(e){this.isAnalyzeMode=!0;try{return this.visit(e),{success:this.unresolvedColumns.length===0&&!this.analysisError,schemas:this.tableSchemas,unresolvedColumns:this.unresolvedColumns,error:this.analysisError}}finally{this.isAnalyzeMode=!1}}visit(e){if(this.running){this.visitNode(e);return}this.reset(),this.running=!0;try{if(!(e instanceof C||e instanceof Q))throw new Error(`Unsupported SQL component type for schema collection. Received: ${e.constructor.name}. Expected: SimpleSelectQuery or BinarySelectQuery.`);let t=new Z;this.commonTables=t.collect(e),this.visitNode(e),this.consolidateTableSchemas()}finally{this.running=!1}}visitNode(e){if(this.visitedNodes.has(e))return;this.visitedNodes.add(e);let t=this.handlers.get(e.getKind());if(t){t(e);return}}reset(){this.tableSchemas=[],this.visitedNodes=new Set,this.commonTables=[],this.unresolvedColumns=[],this.analysisError=void 0}consolidateTableSchemas(){let e=new Map;for(let t of this.tableSchemas)if(!e.has(t.name))e.set(t.name,new Set(t.columns));else{let n=e.get(t.name);t.columns.forEach(i=>n?.add(i))}this.tableSchemas=Array.from(e.entries()).sort(([t],[n])=>t.localeCompare(n)).map(([t,n])=>new Xe(t,Array.from(n).sort()))}handleSourceExpression(e,t,n){if(e.datasource instanceof O){let i=e.datasource.getSourceName(),r=this.commonTables.filter(s=>s.getSourceAliasName()===i);if(r.length>0){r[0].query.accept(this);let s=e.getAliasName()??i;this.processCTETableSchema(r[0],s,t,n)}else{let s=e.getAliasName()??i;this.processCollectTableSchema(i,s,t,n)}}else e.datasource instanceof j&&this.visitNode(e.datasource.query)}visitSimpleSelectQuery(e){if(e.fromClause===null)return;let n=new ke(this.tableColumnResolver,!0,"fullName").collect(e),i;if(this.allowWildcardWithoutResolver){let r=this.getSelectClauseColumns(e);i=n.filter(s=>s.value instanceof v).map(s=>s.value).filter(s=>{let a=s.getNamespace(),l=s.column.name;return r.some(u=>{if(u.value instanceof v){let c=u.value.getNamespace(),p=u.value.column.name;if(c===a&&p===l)return!0;if(p==="*"){if(this.allowWildcardWithoutResolver&&this.tableColumnResolver===null)return!1;if(c===""||c===a)return!0}}return!1})}).map(s=>({table:s.getNamespace(),column:s.column.name}))}else i=n.filter(r=>r.value instanceof v).map(r=>r.value).map(r=>({table:r.getNamespace(),column:r.column.name}));if(e.fromClause.joins!==null&&e.fromClause.joins.length>0){let r=i.filter(s=>s.table==="").map(s=>s.column);if(r.length>0)if(this.isAnalyzeMode)this.unresolvedColumns.push(...r),this.analysisError=`Column reference(s) without table name found in query: ${r.join(", ")}`;else throw new Error(`Column reference(s) without table name found in query: ${r.join(", ")}`)}if(e.fromClause.source.datasource instanceof O?this.handleSourceExpression(e.fromClause.source,i,!0):e.fromClause.source.datasource instanceof j&&e.fromClause.source.datasource.query.accept(this),e.fromClause?.joins)for(let r of e.fromClause.joins)r.source.datasource instanceof O?this.handleSourceExpression(r.source,i,!1):r.source.datasource instanceof j&&r.source.datasource.query.accept(this)}visitBinarySelectQuery(e){this.visitNode(e.left),this.visitNode(e.right)}getSelectClauseColumns(e){if(!e.selectClause)return[];let t=[];for(let n of e.selectClause.items)if(n.value instanceof v){let i=n.value.column.name;t.push({name:i,value:n.value})}return t}processCollectTableSchema(e,t,n,i=!1){if(this.tableColumnResolver===null&&n.filter(l=>l.table===t||i&&l.table==="").filter(l=>l.column==="*").length>0&&!this.allowWildcardWithoutResolver){let l=e?`Wildcard (*) is used. A TableColumnResolver is required to resolve wildcards. Target table: ${e}`:"Wildcard (*) is used. A TableColumnResolver is required to resolve wildcards.";if(this.isAnalyzeMode){this.analysisError=l;let u=n.filter(c=>c.table===t||i&&c.table==="").filter(c=>c.column==="*").map(c=>c.table?`${c.table}.*`:"*");this.unresolvedColumns.push(...u)}else throw new Error(l)}let r=n.filter(a=>a.column!=="*").filter(a=>a.table===t||i&&a.table==="").map(a=>a.column),s=new Xe(e,r);this.tableSchemas.push(s)}processCTETableSchema(e,t,n,i=!1){let r=e.getSourceAliasName(),s=this.getCTEColumns(e),a=n.filter(c=>c.table===t||i&&c.table==="").map(c=>c.column);if(a.includes("*")){if(this.tableColumnResolver!==null){let c=this.tableColumnResolver(r);if(c.length>0){let p=new Xe(r,c);this.tableSchemas.push(p);return}}if(s.length>0){let c=new Xe(r,s);this.tableSchemas.push(c);return}else if(this.allowWildcardWithoutResolver){let c=new Xe(r,[]);this.tableSchemas.push(c);return}else{let c=`Wildcard (*) is used. A TableColumnResolver is required to resolve wildcards. Target table: ${r}`;if(this.isAnalyzeMode)this.analysisError=c,this.unresolvedColumns.push(t?`${t}.*`:"*");else throw new Error(c);return}}let l=a.filter(c=>c!=="*");if(this.isAnalyzeMode){let c=s;if(this.tableColumnResolver){let p=this.tableColumnResolver(r);p.length>0&&(c=p)}if(c.length>0){let p=l.filter(h=>!c.includes(h));p.length>0&&(this.unresolvedColumns.push(...p),this.analysisError||(this.analysisError=`Undefined column(s) found in CTE "${r}": ${p.join(", ")}`))}else if(!this.allowWildcardWithoutResolver){let p=l;p.length>0&&(this.unresolvedColumns.push(...p),this.analysisError||(this.analysisError=`Undefined column(s) found in CTE "${r}": ${p.join(", ")}`))}}let u=new Xe(r,l);this.tableSchemas.push(u)}getCTEColumns(e){try{return e.query instanceof C&&e.query.selectClause?this.extractColumnsFromSelectItems(e.query.selectClause.items,e):this.extractColumnsUsingCollector(e.query)}catch{return[]}}extractColumnsFromSelectItems(e,t){let n=[];for(let i of e)if(i.value instanceof v){let r=i.identifier?.name||i.value.column.name;if(i.value.column.name==="*"){let s=this.resolveWildcardInCTE(i.value,t);if(s===null)return[];n.push(...s)}else n.push(r)}else i.identifier&&n.push(i.identifier.name);return this.removeDuplicates(n)}resolveWildcardInCTE(e,t){let n=e.getNamespace();return n?this.resolveQualifiedWildcard(n):this.resolveUnqualifiedWildcard(t)}resolveQualifiedWildcard(e){let t=this.commonTables.find(n=>n.getSourceAliasName()===e);if(t){let n=this.getCTEColumns(t);if(n.length>0)return n}return null}resolveUnqualifiedWildcard(e){if(!(e.query instanceof C)||!e.query.fromClause)return null;let t=e.query.fromClause.source;return t.datasource instanceof O?this.resolveTableWildcard(t.datasource.table.name):(t.datasource instanceof j,null)}resolveTableWildcard(e){if(this.tableColumnResolver){let t=this.tableColumnResolver(e);if(t.length>0)return t}return this.allowWildcardWithoutResolver,null}extractColumnsUsingCollector(e){return new ke(null,!0,"fullName").collect(e).filter(i=>i.value instanceof v).map(i=>i.value).map(i=>i.column.name).filter((i,r,s)=>s.indexOf(i)===r)}removeDuplicates(e){return e.filter((t,n,i)=>i.indexOf(t)===n)}};var Jt=class{static validate(e,t){let n=typeof e=="string"?A.parse(e):e,i=Array.isArray(t)?l=>{let u=t.find(c=>c.name===l);return u?u.columns:[]}:t,s=new Ut(i).collect(n),a=[];for(let l of s){let u=i(l.name);if(u.length===0){a.push(`Table '${l.name}' is not defined.`);continue}let c=l.columns.filter(p=>!u.includes(p));c.length>0&&a.push(`Table '${l.name}' contains undefined columns: ${c.join(", ")}.`)}if(a.length>0)throw new Error(a.join(`
18
- `))}};var qt=class{constructor(e={}){this.knownCTENames=[];this.options=e,this.formatter=new Be(e),this.dependencyAnalyzer=new rt}compose(e,t){if(e.length===0)return t;this.knownCTENames=e.map(p=>p.name);let n=e.map(p=>({name:p.name,query:this.extractPureQuery(p.query,p.name)})),i=this.buildTempQueryForAnalysis(n,t),r=this.dependencyAnalyzer.analyzeDependencies(i),s=this.sortCTEsByDependencies(n,r),a=this.detectRecursiveFromOriginalQueries(e),l=s.map(p=>`${p.name} as (${p.query})`),c=`${a?"with recursive":"with"} ${l.join(", ")} ${t}`;return this.options.validateSchema&&this.options.schema&&this.validateComposedQuery(c),this.formatFinalQuery(c)}extractPureQuery(e,t){if(!/^\s*with\s+/i.test(e)||/^\s*with\s+recursive\s+/i.test(e))return e;try{let r=A.parse(e);if(r.withClause&&r.withClause.tables){let s=this.getKnownCTENames();if(r.withClause.tables.map(u=>this.getCTEName(u)).every(u=>s.includes(u))){let u=new C({selectClause:r.selectClause,fromClause:r.fromClause,whereClause:r.whereClause,groupByClause:r.groupByClause,havingClause:r.havingClause,orderByClause:r.orderByClause,windowClause:r.windowClause,limitClause:r.limitClause,offsetClause:r.offsetClause,fetchClause:r.fetchClause,forClause:r.forClause,withClause:void 0});return new Be({identifierEscape:{start:"",end:""}}).format(u).formattedSql}}}catch{}return e}getKnownCTENames(){return this.knownCTENames||[]}getCTEName(e){return e.aliasExpression.table.name}extractCTEWithRegex(e,t){let n=new RegExp(`${t}\\s+as\\s*\\(`,"i"),i=e.match(n);if(!i)return e;let r=i.index+i[0].length,s=1,a=r;for(;a<e.length&&s>0;){let l=e[a];l==="("?s++:l===")"&&s--,a++}return s===0?e.substring(r,a-1).trim():e}buildTempQueryForAnalysis(e,t){let i=`with ${e.map(r=>`${r.name} as (${r.query})`).join(", ")} ${t}`;try{return A.parse(i)}catch(r){throw new Error(`Failed to parse temporary query for dependency analysis: ${r}`)}}sortCTEsByDependencies(e,t){let n=new Map;return e.forEach(i=>n.set(i.name,i.query)),t.nodes.map(i=>({name:i.name,query:n.get(i.name)||""})).filter(i=>i.query!=="")}detectRecursiveFromOriginalQueries(e){return e.some(t=>t.query.toLowerCase().includes("with recursive"))}detectRecursiveCTEs(e){return e.withClause?this.formatter.format(e).formattedSql.toLowerCase().includes("with recursive"):!1}validateComposedQuery(e){try{let t=A.parse(e),n=Object.entries(this.options.schema).map(([i,r])=>({name:i,columns:r}));Jt.validate(t,n)}catch(t){throw t instanceof Error?new Error(`Schema validation failed: ${t.message}`):t}}formatFinalQuery(e){if(this.options.preset||this.options.keywordCase)try{let t=A.parse(e);return this.formatter.format(t).formattedSql}catch{return e}return e}};var ci=class o{static{this.ERROR_MESSAGES={CIRCULAR_REFERENCE:"Circular reference detected in non-recursive CTEs",PARSING_FAILED:"Failed to parse query for comment injection"}}static{this.COMMENT_TEXTS={AUTO_GENERATED:"Auto-generated by CTE decomposer",ORIGINAL_CTE:"Original CTE:",DEPENDENCIES:"Dependencies:",DEPENDENTS:"Dependents:",RECURSIVE_TYPE:"Type: Recursive CTE",NONE:"none"}}constructor(e={}){this.options=e,this.dependencyAnalyzer=new rt,this.cteCollector=new Z,this.formatter=new Be(e)}decompose(e){let t=this.cteCollector.collect(e);if(t.length===0)return[];let n=this.findRecursiveCTEs(e,t),i=this.dependencyAnalyzer.analyzeDependencies(e);return this.validateCircularDependencies(n.length>0),this.processCTENodes(e,i.nodes,n)}synchronize(e,t){if(e.length===0)return[];let n=this.flattenNestedWithClauses(e),i={...this.options,addComments:void 0},s=new qt(i).compose(n,t),a=A.parse(s);return this.decompose(a)}flattenNestedWithClauses(e){let t=[],n=new Map;for(let r of e)try{if(/^\s*with\s+/i.test(r.query)){let a=A.parse(r.query);if(a.withClause&&a.withClause.tables){for(let p of a.withClause.tables){let h=this.getCTEName(p);if(!n.has(h)){let E=new Be({identifierEscape:{start:"",end:""}}).format(p.query).formattedSql;n.set(h,E)}}let l=new C({selectClause:a.selectClause,fromClause:a.fromClause,whereClause:a.whereClause,groupByClause:a.groupByClause,havingClause:a.havingClause,orderByClause:a.orderByClause,windowClause:a.windowClause,limitClause:a.limitClause,offsetClause:a.offsetClause,fetchClause:a.fetchClause,forClause:a.forClause,withClause:void 0}),c=new Be({identifierEscape:{start:"",end:""}}).format(l).formattedSql;t.push({name:r.name,query:c})}else t.push(r)}else t.push(r)}catch{t.push(r)}let i=[];for(let[r,s]of n)i.push({name:r,query:s});return i.push(...t),i}validateCircularDependencies(e){if(this.dependencyAnalyzer.hasCircularDependency()&&!e)throw new Error(o.ERROR_MESSAGES.CIRCULAR_REFERENCE)}processCTENodes(e,t,n){let i=[];for(let r of t){if(r.type==="ROOT")continue;n.includes(r.name)?i.push(this.createRecursiveCTE(r,e)):i.push(this.createStandardCTE(r,t))}return i}createRecursiveCTE(e,t){let n=this.formatter.format(t).formattedSql,i=e.dependents.filter(s=>s!=="MAIN_QUERY"),r=this.addCommentsToQuery(n,e.name,e.dependencies,e.dependents,!0);return{name:e.name,query:r,dependencies:[...e.dependencies],dependents:i,isRecursive:!0}}createStandardCTE(e,t){let n=this.buildExecutableQuery(e,t),i=this.addCommentsToQuery(n,e.name,e.dependencies,e.dependents,!1),r=e.dependents.filter(s=>s!=="MAIN_QUERY");return{name:e.name,query:i,dependencies:[...e.dependencies],dependents:r,isRecursive:!1}}buildExecutableQuery(e,t){if(e.type==="ROOT"||!e.cte)throw new Error(`Cannot build executable query for ROOT node: ${e.name}`);let n=this.collectRequiredCTEs(e,t);if(n.length===0)return this.formatter.format(e.cte.query).formattedSql;let i=this.buildWithClause(n),r=this.formatter.format(e.cte.query).formattedSql;return`${i} ${r}`}collectRequiredCTEs(e,t){let n=new Set,i=[],r=new Map;for(let a of t)r.set(a.name,a);let s=a=>{if(n.has(a))return;n.add(a);let l=r.get(a);if(l){for(let u of l.dependencies)s(u);a!==e.name&&l.type!=="ROOT"&&i.push(l)}};for(let a of e.dependencies)s(a);return i}buildWithClause(e){return e.length===0?"":`with ${e.map(n=>{if(n.type==="ROOT"||!n.cte)throw new Error(`Cannot include ROOT node in WITH clause: ${n.name}`);let i=n.name,r=this.formatter.format(n.cte.query).formattedSql;return`${i} as (${r})`}).join(", ")}`}findRecursiveCTEs(e,t){return!e.withClause||!this.isRecursiveWithClause(e)?[]:t.map(n=>this.getCTEName(n))}isRecursiveWithClause(e){return this.formatter.format(e).formattedSql.toLowerCase().includes("with recursive")}addCommentsToQuery(e,t,n,i,r){if(this.options.addComments!==!0)return e;try{let s=A.parse(e);return this.generateComments(t,n,i,r).forEach(u=>{jt.addComment(s,u)}),new Be({...this.options,exportComment:!0}).format(s).formattedSql}catch(s){return console.warn(`${o.ERROR_MESSAGES.PARSING_FAILED}: ${s}`),this.addTextCommentsToQuery(e,t,n,i,r)}}generateComments(e,t,n,i){let{AUTO_GENERATED:r,ORIGINAL_CTE:s,DEPENDENCIES:a,DEPENDENTS:l,RECURSIVE_TYPE:u,NONE:c}=o.COMMENT_TEXTS,p=[];p.push(r),p.push(`${s} ${e}`),i&&p.push(u);let h=t.length>0?t.join(", "):c;p.push(`${a} ${h}`);let w=n.filter(d=>d!=="MAIN_QUERY"),E=w.length>0?w.join(", "):c;return p.push(`${l} ${E}`),p}addTextCommentsToQuery(e,t,n,i,r){return`${this.generateComments(t,n,i,r).map(l=>`-- ${l}`).join(`
17
+ Detected column names: [${n.join(", ")}]`);let o=Ze.parse(t);return new nt({insertClause:new mt(o,n),selectQuery:e})}static buildUpdateQuery(e,t,n,i){let r=new Qt(Ze.parse(n)),s=Array.isArray(i)?i:[i],l=new We().collect(e),c=new te().collect(e);new St().execute(e);for(let P of s)if(!l.some(T=>T.name===P))throw new Error(`Primary key column '${P}' is not present in selectQuery select list.`);let m=r.getSourceAliasName();if(!m)throw new Error("Source expression does not have an alias. Please provide an alias for the source expression.");let v=l.filter(P=>!s.includes(P.name)).map(P=>new pt(P.name,new b(m,P.name))),h=new at(v),M=new K(e.toSource(t),null),H=null;for(let P of s){let T=new w(new b(m,P),"=",new b(t,P));H=H?new w(H,"and",T):T}let x=new se(H);return new Rt({updateClause:r,setClause:h,fromClause:M,whereClause:x,withClause:c.length>0?new le(!1,c):void 0})}};var st=class{static set(e,t,n){let i=ht.collect(e),r=!1;for(let s of i)s.name.value===t&&(s.value=n,r=!0);if(!r)throw new Error(`Parameter '${t}' not found in query.`)}};var f=class extends g{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 Be.buildBinaryQuery([this,n],t)}appendWhereRaw(t){let n=I.parse(t);this.appendWhere(n)}appendWhere(t){this.whereClause?this.whereClause.condition=new w(this.whereClause.condition,"and",t):this.whereClause=new se(t)}appendHavingRaw(t){let n=I.parse(t);this.appendHaving(n)}appendHaving(t){this.havingClause?this.havingClause.condition=new w(this.havingClause.condition,"and",t):this.havingClause=new fe(t)}innerJoinRaw(t,n,i,r=null){this.joinSourceRaw("inner join",t,n,i,r)}leftJoinRaw(t,n,i,r=null){this.joinSourceRaw("left join",t,n,i,r)}rightJoinRaw(t,n,i,r=null){this.joinSourceRaw("right join",t,n,i,r)}innerJoin(t,n,i=null){this.joinSource("inner join",t,n,i)}leftJoin(t,n,i=null){this.joinSource("left join",t,n,i)}rightJoin(t,n,i=null){this.joinSource("right join",t,n,i)}joinSourceRaw(t,n,i,r,s=null){let o=bt.parse(n),l=new V(o,new re(i,null));this.joinSource(t,l,r,s)}joinSource(t,n,i,r=null){if(!this.fromClause)throw new Error("A FROM clause is required to add a JOIN condition.");let s=Array.isArray(i)?i:[i],l=new be(r).collect(this),u=null,c=0,p=n.getAliasName();if(!p)throw new Error("An alias is required for the source expression to add a JOIN condition.");for(let v of l)if(s.some(h=>h==v.name)){let h=new w(v.value,"=",new b([p],v.name));u?u=new w(u,"and",h):u=h,c++}if(!u||c!==s.length)throw new Error(`Invalid JOIN condition. The specified columns were not found: ${s.join(", ")}`);let m=new Ce(u),C=new ye(t,n,m,!1);this.fromClause&&(this.fromClause.joins?this.fromClause.joins.push(C):this.fromClause.joins=[C]),Xe.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 V(new J(this),new re(t,null))}appendWith(t){let n=Array.isArray(t)?t:[t];this.withClause?this.withClause.tables.push(...n):this.withClause=new le(!1,n),Xe.normalize(this)}appendWithRaw(t,n){let i=L.parse(t),r=new ie(i,n,null);this.appendWith(r)}overrideSelectItemExpr(t,n){let i=this.selectClause.items.filter(u=>u.identifier?.name===t);if(i.length===0)throw new Error(`Column ${t} not found in the query`);if(i.length>1)throw new Error(`Duplicate column name ${t} found in the query`);let r=i[0],o=new lt().visit(r.value),l=n(o);r.value=I.parse(l)}appendWhereExpr(t,n,i){if(i&&i.upstream){let s=new xt().find(this,[t]),o=new be,l=new lt;for(let u of s){let c=o.collect(u).filter(m=>m.name===t).map(m=>m.value);if(c.length!==1)throw new Error(`Expected exactly one expression for column '${t}'`);let p=l.format(c[0]);u.appendWhereRaw(n(p))}}else{let r=new be,s=new lt,o=r.collect(this).filter(u=>u.name===t).map(u=>u.value);if(o.length!==1)throw new Error(`Expected exactly one expression for column '${t}'`);let l=s.format(o[0]);this.appendWhereRaw(n(l))}}setParameter(t,n){return st.set(this,t,n),this}toSimpleQuery(){return this}addCTE(t,n,i){if(!t||t.trim()==="")throw new Et(t,"name cannot be empty or whitespace-only");if(this.hasCTE(t))throw new Vt(t);let r=i?.materialized??null,s=new ie(n,t,r);return this.appendWith(s),this.cteNameCache.add(t),this}removeCTE(t){if(!this.hasCTE(t))throw new $t(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,i){if(!t||t.trim()==="")throw new Et(t,"name cannot be empty or whitespace-only");this.hasCTE(t)&&this.removeCTE(t);let r=i?.materialized??null,s=new ie(n,t,r);return this.appendWith(s),this.cteNameCache.add(t),this}};var F=class a extends g{static{this.kind=Symbol("BinarySelectQuery")}constructor(e,t,n){super(),this.left=e,this.operator=new B(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 a(this.left,this.operator.value,this.right),this.operator=new B(e),this.right=t,Xe.normalize(this),this}unionRaw(e){let t=L.parse(e);return this.union(t)}unionAllRaw(e){let t=L.parse(e);return this.unionAll(t)}intersectRaw(e){let t=L.parse(e);return this.intersect(t)}intersectAllRaw(e){let t=L.parse(e);return this.intersectAll(t)}exceptRaw(e){let t=L.parse(e);return this.except(t)}exceptAllRaw(e){let t=L.parse(e);return this.exceptAll(t)}toSource(e="subq"){return new V(new J(this),new re(e,null))}setParameter(e,t){return st.set(this,e,t),this}toSimpleQuery(){return Be.buildSimpleQuery(this)}};var pe=class extends g{static{this.kind=Symbol("ValuesQuery")}constructor(e,t=null){super(),this.tuples=e,this.columnAliases=t}toSimpleQuery(){return Be.buildSimpleQuery(this)}setParameter(e,t){return st.set(this,e,t),this}};var Wn=class{static parse(e){let n=new O(e).readLexmes(),i=this.parseFromLexeme(n,0);if(i.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[i.newIndex].value}" at position ${i.newIndex}. The SELECT clause is complete but there are additional tokens.`);return i.value}static parseFromLexeme(e,t){let n=t,i=null,r=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&&dt.isHintClause(e[n].value);){let u=dt.extractHintContent(e[n].value);s.push(new dt(u)),n++}if(n<e.length&&e[n].value==="distinct")n++,i=new Lt;else if(n<e.length&&e[n].value==="distinct on"){n++;let u=I.parseArgument(4,8,e,n);i=new Ft(u.value),n=u.newIndex}let o=[],l=Dn.parseItem(e,n);for(o.push(l.value),n=l.newIndex;n<e.length&&e[n].type&16;){n++;let u=Dn.parseItem(e,n);o.push(u.value),n=u.newIndex}if(o.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 _(o,i,s);return u.comments=r,{value:u,newIndex:n}}}},Dn=class{static parse(e){let n=new O(e).readLexmes(),i=this.parseItem(n,0);if(i.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[i.newIndex].value}" at position ${i.newIndex}. The select item is complete but there are additional tokens.`);return i.value}static parseItem(e,t){let n=t,i=I.parseFromLexeme(e,n),r=i.value;if(n=i.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 z(r,s),newIndex:n}}else if(r instanceof b&&r.column.name!=="*")return{value:new z(r,r.column.name),newIndex:n};return{value:new z(r),newIndex:n}}};var jn=class{static tryParse(e,t){let n=t;if(n<e.length&&e[n].value==="on"){n++;let i=I.parseFromLexeme(e,n);return n=i.newIndex,{value:new Ce(i.value),newIndex:n}}return null}};var Un=class{static tryParse(e,t){let n=t;if(n<e.length&&e[n].value==="using"){n++;let i=I.parseArgument(4,8,e,n),r=i.value;return n=i.newIndex,{value:new Se(r),newIndex:n}}return null}};var Jn=class{static tryParse(e,t){let n=t,i=[];for(;this.isJoinCommand(e,n);){let r=this.parseJoinClause(e,n);i.push(r.value),n=r.newIndex}return i.length>0?{value:i,newIndex:n}:null}static isJoinKeyword(e){return!!hi.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,i=e[n].value===","?"cross join":e[n].value;n++;let r=this.parseLateral(e,n),s=r.value;n=r.newIndex;let o=Ze.parseFromLexeme(e,n);if(n=o.newIndex,n<e.length){let u=jn.tryParse(e,n);if(u)return{value:new ye(i,o.value,u.value,s),newIndex:u.newIndex};let c=Un.tryParse(e,n);if(c)return{value:new ye(i,o.value,c.value,s),newIndex:c.newIndex}}return{value:new ye(i,o.value,null,s),newIndex:n}}};var Mt=class{static collectClauseComments(e,t,n){if(t>=e.length||e[t].value.toLowerCase()!==n.toLowerCase())return null;let i=[];e[t].comments&&i.push(...e[t].comments);let r=t-1;for(;r>=0;){let s=e[r];if(s.comments&&s.comments.length>0){let o=s.comments.filter(l=>{let u=l.toLowerCase();return u.includes(n.toLowerCase())||u.includes("\u306E")||u.includes("\u30B3\u30E1\u30F3\u30C8")});o.length>0&&(i.unshift(...o),s.comments=s.comments.filter(l=>!o.includes(l)),s.comments.length===0&&(s.comments=null));break}if(this.isSignificantSqlKeyword(s.value))break;r--}return i.length>0?i:null}static isSignificantSqlKeyword(e){return new Set(["select","from","where","group by","having","order by","limit","offset"]).has(e.toLowerCase())}};var Kn=class{static parse(e){let n=new O(e).readLexmes(),i=this.parseFromLexeme(n,0);if(i.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[i.newIndex].value}" at position ${i.newIndex}. The FROM clause is complete but there are additional tokens.`);return i.value}static parseFromLexeme(e,t){let n=t,i=Mt.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 r=Ze.parseFromLexeme(e,n);n=r.newIndex;let s=Jn.tryParse(e,n);if(n=s?.newIndex||n,s!==null){let o=new K(r.value,s.value);return o.comments=i,{value:o,newIndex:n}}else{let o=new K(r.value,null);return o.comments=i,{value:o,newIndex:n}}}};var _n=class{static parse(e){let n=new O(e).readLexmes(),i=this.parseFromLexeme(n,0);if(i.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[i.newIndex].value}" at position ${i.newIndex}. The WHERE clause is complete but there are additional tokens.`);return i.value}static parseFromLexeme(e,t){let n=t,i=Mt.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 r=I.parseFromLexeme(e,n),s=new se(r.value);return s.comments=i,{value:s,newIndex:r.newIndex}}};var zn=class{static parse(e){let n=new O(e).readLexmes(),i=this.parseFromLexeme(n,0);if(i.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[i.newIndex].value}" at position ${i.newIndex}. The GROUP BY clause is complete but there are additional tokens.`);return i.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 i=[],r=this.parseItem(e,n);for(i.push(r.value),n=r.newIndex;n<e.length&&e[n].type&16;){n++;let s=this.parseItem(e,n);i.push(s.value),n=s.newIndex}if(i.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 he(i),newIndex:n}}static parseItem(e,t){let n=t,i=I.parseFromLexeme(e,n),r=i.value;return n=i.newIndex,{value:r,newIndex:n}}};var qn=class{static parse(e){let n=new O(e).readLexmes(),i=this.parseFromLexeme(n,0);if(i.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[i.newIndex].value}" at position ${i.newIndex}. The HAVING clause is complete but there are additional tokens.`);return i.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 i=I.parseFromLexeme(e,n);return{value:new fe(i.value),newIndex:i.newIndex}}};var Gn=class{static parse(e){let n=new O(e).readLexmes(),i=this.parseFromLexeme(n,0);if(i.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[i.newIndex].value}" at position ${i.newIndex}. The WINDOW clause is complete but there are additional tokens.`);return i.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 i=[];for(;n<e.length;){if(n>=e.length||e[n].type!==64)throw new Error("Syntax error: Expected window name after 'WINDOW' keyword.");let r=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=Ot.parseFromLexeme(e,n);if(n=s.newIndex,i.push(new Ie(r,s.value)),n<e.length&&e[n].type&16)n++;else break}if(i.length===0)throw new Error("At least one WINDOW clause is required after WINDOW keyword.");return{value:new it(i),newIndex:n}}};var Hn=class{static parse(e){let n=new O(e).readLexmes(),i=this.parseFromLexeme(n,0);if(i.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[i.newIndex].value}" at position ${i.newIndex}. The LIMIT clause is complete but there are additional tokens.`);return i.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 i=I.parseFromLexeme(e,n);return n=i.newIndex,{value:new oe(i.value),newIndex:n}}};var Yn=class{static parse(e){let n=new O(e).readLexmes(),i=this.parseFromLexeme(n,0);if(i.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[i.newIndex].value}" at position ${i.newIndex}. The FOR clause is complete but there are additional tokens.`);return i.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 i=e[n].value,r;switch(i){case"update":r="update",n++;break;case"share":r="share",n++;break;case"key share":r="key share",n++;break;case"no key update":r="no key update",n++;break;default:throw new Error(`Syntax error at position ${n}: Invalid lock mode "${i}". Valid lock modes are: UPDATE, SHARE, KEY SHARE, NO KEY UPDATE.`)}return{value:new Ne(r),newIndex:n}}};var qt=class{static parse(e){let n=new O(e).readLexmes(),i=this.parseFromLexeme(n,0);if(i.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[i.newIndex].value}" at position ${i.newIndex}. The CommonTable definition is complete but there are additional tokens.`);return i.value}static parseFromLexeme(e,t){let n=t,i=n<e.length?e[n].comments:null,r=Tt.parseFromLexeme(e,n);if(n=r.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 o=e[n].comments;n++;let l=L.parseFromLexeme(e,n);if(n=l.newIndex,o&&o.length>0&&(l.value.comments?l.value.comments=[...o,...l.value.comments]:l.value.comments=o),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 ie(l.value,r.value,s);return u.comments=i,{value:u,newIndex:n}}};var kt=class{static parse(e){let n=new O(e).readLexmes(),i=this.parseFromLexeme(n,0);if(i.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[i.newIndex].value}" at position ${i.newIndex}. The WITH clause is complete but there are additional tokens.`);return i.value}static parseFromLexeme(e,t){let n=t,i=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 r=n<e.length&&e[n].value.toLowerCase()==="recursive";r&&n++;let s=[],o=qt.parseFromLexeme(e,n);for(s.push(o.value),n=o.newIndex;n<e.length&&e[n].type&16;){n++;let u=qt.parseFromLexeme(e,n);s.push(u.value),n=u.newIndex}let l=new le(r,s);return l.comments=i,{value:l,newIndex:n}}};var Xn=class{static parse(e){let n=new O(e).readLexmes(),i=this.parseFromLexeme(n,0);if(i.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[i.newIndex].value}" at position ${i.newIndex}. The VALUES clause is complete but there are additional tokens.`);return i.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 i=[],r=this.parseTuple(e,n);for(i.push(r.value),n=r.newIndex;n<e.length&&e[n].type&16;){n++;let o=this.parseTuple(e,n);i.push(o.value),n=o.newIndex}return{value:new pe(i),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 i=[];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 Te([]),newIndex:n};let r=I.parseFromLexeme(e,n);for(i.push(r.value),n=r.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=I.parseFromLexeme(e,n);i.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 Te(i),newIndex:n}}};var Zn=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 i=Ci.parseFromLexeme(e,n),r=i.value;return n=i.newIndex,{value:new Ue(r),newIndex:n}}},Ci=class{static parseFromLexeme(e,t){let n=t,i,r=e[n].value;if(r==="first")i="first";else if(r==="next")i="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,o=null;if(e[n].value==="row only"||e[n].value==="rows only")return s=new X(1),o="rows only",n++,{value:new vt(i,s,o),newIndex:n};let l=I.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"?(o="rows only",n++):e[n].value==="percent"?(o="percent",n++):e[n].value==="percent with ties"&&(o="percent with ties",n++),!o)throw new Error("Syntax error: Expected 'ROWS ONLY', 'PERCENT', or 'PERCENT WITH TIES' after 'FETCH FIRST|NEXT <count>'.");return{value:new vt(i,s,o),newIndex:n}}};var ei=class{static parse(e){let n=new O(e).readLexmes(),i=this.parseFromLexeme(n,0);if(i.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[i.newIndex].value}" at position ${i.newIndex}. The OFFSET clause is complete but there are additional tokens.`);return i.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 i=I.parseFromLexeme(e,n);return n=i.newIndex,n<e.length&&(e[n].value==="row"||e[n].value==="rows")&&n++,{value:new Oe(i.value),newIndex:n}}};var Ke=class{static{this.SQL_COMMANDS=new Set(["select","from","where","and","or","order","by","group","having","limit","offset","as","on","inner","left","right","join","union","insert","update","delete","into","values","set"])}static findLexemeAtLineColumn(e,t){let n=this.lineColumnToCharOffset(e,t);return n===-1?null:this.findLexemeAtPosition(e,n)}static findLexemeAtPosition(e,t){if(t<0||t>=e.length)return null;let n=this.getAllLexemesWithPosition(e);for(let i of n)if(i.position&&t>=i.position.startPosition&&t<i.position.endPosition)return i;return null}static getAllLexemesWithPosition(e){if(!e?.trim())return[];try{let t=[],n=0;for(;n<e.length&&(n=this.skipWhitespaceAndComments(e,n),!(n>=e.length));){let i=this.parseNextToken(e,n);i?(t.push(i),n=i.position.endPosition):n++}return t}catch{return[]}}static skipWhitespaceAndComments(e,t){return ue.readWhiteSpaceAndComment(e,t).position}static parseNextToken(e,t){let n=e[t];return n==="'"||n==='"'?this.parseStringLiteral(e,t):/[=<>!+\-*/%().*]/.test(n)?this.parseOperator(e,t):n===","?this.createLexeme(16,",",t,t+1):/[a-zA-Z0-9_]/.test(n)?this.parseWordToken(e,t):null}static parseStringLiteral(e,t){let n=e[t],i=t+1,r=n;for(;i<e.length&&e[i]!==n;)r+=e[i++];return i<e.length&&(r+=e[i++]),this.createLexeme(1,r,t,i)}static parseOperator(e,t){let n=e[t],i=t+1;i<e.length&&/[=<>!]/.test(e[i])&&/[=<>!]/.test(n)&&(n+=e[i++]);let r=this.getOperatorTokenType(n);return this.createLexeme(r,n,t,i)}static parseWordToken(e,t){let n=t,i="";for(;n<e.length&&/[a-zA-Z0-9_]/.test(e[n]);)i+=e[n++];let r=this.getWordTokenType(i,e,n),s=this.shouldLowercase(r)?i.toLowerCase():i;return this.createLexeme(r,s,t,n)}static getOperatorTokenType(e){switch(e){case"(":return 4;case")":return 8;case"*":return 64;default:return 2}}static getWordTokenType(e,t,n){let i=e.toLowerCase();if(this.SQL_COMMANDS.has(i))return 128;let r=this.skipWhitespaceAndComments(t,n);return r<t.length&&t[r]==="("?2048:64}static shouldLowercase(e){return!!(e&128)||!!(e&2)||!!(e&2048)}static createLexeme(e,t,n,i){return{type:e,value:t,comments:null,position:{startPosition:n,endPosition:i}}}static lineColumnToCharOffset(e,t){if(t.line<1||t.column<1)return-1;let n=e.split(`
18
+ `);if(t.line>n.length)return-1;let i=n[t.line-1];if(t.column>i.length+1)return-1;let r=0;for(let s=0;s<t.line-1;s++)r+=n[s].length+1;return r+=t.column-1,r}static charOffsetToLineColumn(e,t){if(t<0||t>e.length)return null;let n=e.split(`
19
+ `),i=0;for(let r=0;r<n.length;r++){let s=n[r].length;if(t<i+s)return{line:r+1,column:t-i+1};if(t===i+s&&r<n.length-1)return{line:r+2,column:1};i+=s+1}if(t===e.length){let r=n[n.length-1];return{line:n.length,column:r.length+1}}return null}};var ut=class{static analyzeCursorPosition(e,t){let n=this.extractCTERegions(e),r=this.calculateExtendedCTEBoundaries(e,n).find(s=>t>=s.startPosition&&t<s.extendedEndPosition);return r?{isInCTE:!0,cteRegion:{name:r.name,startPosition:r.startPosition,endPosition:r.endPosition,sqlContent:r.sqlContent},executableSQL:r.sqlContent}:{isInCTE:!1,cteRegion:null,executableSQL:this.extractMainQuery(e,n)}}static getCursorCte(e,t){try{let n=this.analyzeCursorPosition(e,t);return n.isInCTE&&n.cteRegion?.name||null}catch{return null}}static getCursorCteAt(e,t,n){try{let i=this.lineColumnToPosition(e,t,n);return i===-1?null:this.getCursorCte(e,i)}catch{return null}}static lineColumnToPosition(e,t,n){if(t<1||n<1)return-1;let i=e.split(`
20
+ `);if(t>i.length)return-1;let r=i[t-1];if(n>r.length+1)return-1;let s=0;for(let o=0;o<t-1;o++)s+=i[o].length+1;return s+=n-1,s}static positionToLineColumn(e,t){if(t<0||t>e.length)return null;let i=e.substring(0,t).split(`
21
+ `);return{line:i.length,column:i[i.length-1].length+1}}static extractCTERegions(e){let t=Ke.getAllLexemesWithPosition(e),n=[],i=0,r=!1;for(;i<t.length;){let s=t[i];if(s.value.toLowerCase()==="with"&&!r){r=!0,i++;continue}if(r&&s.value.toLowerCase()==="recursive"){i++;continue}if(r&&s.type===64&&i+1<t.length&&t[i+1].value.toLowerCase()==="as"){let o=s.value,l=s.position.startPosition,u=i+2;for(;u<t.length&&t[u].value!=="(";)u++;if(u<t.length){let c=this.findMatchingParen(t,u);if(c){let p=c.endPosition,m=this.extractCTESQL(e,t,u,c.index);n.push({name:o,startPosition:l,endPosition:p,sqlContent:m}),i=c.index+1;continue}}}if(r&&s.value.toLowerCase()==="select"&&this.isMainQuerySelect(t,i))break;i++}return n}static findMatchingParen(e,t){let n=1,i=t+1;for(;i<e.length&&n>0;){if(e[i].value==="("?n++:e[i].value===")"&&n--,n===0)return{index:i,endPosition:e[i].position.endPosition};i++}return null}static extractCTESQL(e,t,n,i){let r=t[n+1].position.startPosition,s=t[i-1].position.endPosition;return e.substring(r,s).trim()}static isMainQuerySelect(e,t){let n=0;for(let i=t-1;i>=0;i--)e[i].value===")"?n++:e[i].value==="("&&n--;return n===0}static calculateExtendedCTEBoundaries(e,t){return t.length===0?[]:t.map((n,i)=>{let r;return i<t.length-1?r=t[i+1].startPosition:r=this.findMainQueryStart(e,n.endPosition),{...n,extendedEndPosition:r}})}static findMainQueryStart(e,t){let n=t;for(;n<e.length;){if(e.substring(n).toLowerCase().trim().startsWith("select")){let r=e.toLowerCase().indexOf("select",n);return r!==-1?r:n}n++}return e.length}static extractMainQuery(e,t){if(t.length===0)return e.trim();let r=t[t.length-1].endPosition;for(;r<e.length&&!e.substring(r).toLowerCase().trim().startsWith("select");)r++;return e.substring(r).trim()}static getCTEPositions(e){let t=this.extractCTERegions(e),n=[];if(t.forEach(i=>{n.push({name:i.name,startPosition:i.startPosition,type:"CTE"})}),t.length>0){let r=t[t.length-1].endPosition;for(;r<e.length;){if(e.substring(r).toLowerCase().trim().startsWith("select")){n.push({name:"MAIN_QUERY",startPosition:r,type:"MAIN_QUERY"});break}r++}}else n.push({name:"MAIN_QUERY",startPosition:0,type:"MAIN_QUERY"});return n}};var L=class{static parse(e){let n=new O(e).readLexmes(),i=this.parseFromLexeme(n,0);if(i.newIndex<n.length)throw new Error(`[SelectQueryParser] Syntax error: Unexpected token "${n[i.newIndex].value}" at position ${i.newIndex}. The SELECT query is complete but there are additional tokens.`);return i.value}static calculateCharacterPosition(e,t,n){if(n>=t.length)return e.length;let i=t[n];if(i.position?.startPosition!==void 0)return i.position.startPosition;let r=0;for(let l=0;l<n;l++){let u=t[l].value,c=e.indexOf(u,r);c!==-1&&(r=c+u.length)}let s=t[n].value,o=e.indexOf(s,r);return o!==-1?o:r}static analyze(e){let t=[];try{t=new O(e).readLexmes();let i=this.parseFromLexeme(t,0);if(i.newIndex<t.length){let r=t.slice(i.newIndex).map(l=>l.value),s=t[i.newIndex],o=this.calculateCharacterPosition(e,t,i.newIndex);return{success:!1,query:i.value,error:`Syntax error: Unexpected token "${s.value}" at character position ${o}. The SELECT query is complete but there are additional tokens.`,errorPosition:o,remainingTokens:r}}return{success:!0,query:i.value}}catch(n){let i,r=n instanceof Error?n.message:String(n),s=r.match(/position (\d+)/);if(s){let o=parseInt(s[1],10);i=this.calculateCharacterPosition(e,t,o)}return{success:!1,error:r,errorPosition:i}}}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 i=e[n].value;if(!this.selectCommandSet.has(i)&&i!=="values")throw new Error(`Syntax error at position ${n}: Expected 'SELECT' or 'VALUES' keyword but found "${e[n].value}".`);let r=this.selectCommandSet.has(i)?this.parseSimpleSelectQuery(e,n):this.parseValuesQuery(e,n),s=r.value;for(n=r.newIndex;n<e.length&&this.unionCommandSet.has(e[n].value.toLowerCase());){let o=e[n].value.toLowerCase();if(n++,n>=e.length)throw new Error(`Syntax error at position ${n}: Expected a query after '${o.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 F(s,o,u.value),n=u.newIndex}else if(l==="values"){let u=this.parseValuesQuery(e,n);s=new F(s,o,u.value),n=u.newIndex}else throw new Error(`Syntax error at position ${n}: Expected 'SELECT' or 'VALUES' after '${o.toUpperCase()}' but found "${e[n].value}".`)}return{value:s,newIndex:n}}static parseSimpleSelectQuery(e,t){let n=t,i=null;n<e.length&&e[n].value==="with"&&(i=kt.parseFromLexeme(e,n),n=i.newIndex);let r=n<e.length?e[n].comments:null;if(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=Wn.parseFromLexeme(e,n);n=s.newIndex,r&&s.value.comments&&JSON.stringify(r)===JSON.stringify(s.value.comments)&&(s.value.comments=null);let o=null;n<e.length&&e[n].value==="from"&&(o=Kn.parseFromLexeme(e,n),n=o.newIndex);let l=null;n<e.length&&e[n].value==="where"&&(l=_n.parseFromLexeme(e,n),n=l.newIndex);let u=null;n<e.length&&e[n].value==="group by"&&(u=zn.parseFromLexeme(e,n),n=u.newIndex);let c=null;n<e.length&&e[n].value==="having"&&(c=qn.parseFromLexeme(e,n),n=c.newIndex);let p=null;n<e.length&&e[n].value==="window"&&(p=Gn.parseFromLexeme(e,n),n=p.newIndex);let m=null;n<e.length&&e[n].value==="order by"&&(m=rt.parseFromLexeme(e,n),n=m.newIndex);let C=null;n<e.length&&e[n].value==="limit"&&(C=Hn.parseFromLexeme(e,n),n=C.newIndex);let v=null;n<e.length&&e[n].value==="offset"&&(v=ei.parseFromLexeme(e,n),n=v.newIndex);let h=null;n<e.length&&e[n].value==="fetch"&&(h=Zn.parseFromLexeme(e,n),n=h.newIndex);let M=null;n<e.length&&e[n].value.toLowerCase()==="for"&&(M=Yn.parseFromLexeme(e,n),n=M.newIndex);let H=new f({withClause:i?i.value:null,selectClause:s.value,fromClause:o?o.value:null,whereClause:l?l.value:null,groupByClause:u?u.value:null,havingClause:c?c.value:null,orderByClause:m?m.value:null,windowClause:p?p.value:null,limitClause:C?C.value:null,offsetClause:v?v.value:null,fetchClause:h?h.value:null,forClause:M?M.value:null});return H.comments=r,{value:H,newIndex:n}}static parseValuesQuery(e,t){let n=Xn.parseFromLexeme(e,t);return{value:n.value,newIndex:n.newIndex}}static getCursorCte(e,t){return ut.getCursorCte(e,t)}static getCursorCteAt(e,t,n){return ut.getCursorCteAt(e,t,n)}static positionToLineColumn(e,t){return ut.positionToLineColumn(e,t)}};var yi=class{static parse(e){let n=new O(e).readLexmes(),i=this.parseFromLexeme(n,0);if(i.newIndex<n.length)throw new Error(`Syntax error: Unexpected token "${n[i.newIndex].value}" at position ${i.newIndex}. The INSERT query is complete but there are additional tokens.`);return i.value}static parseFromLexeme(e,t){let n=t,i=null;if(e[n].value==="with"){let l=kt.parseFromLexeme(e,n);i=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 r=Ze.parseTableSourceFromLexemes(e,n);n=r.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 o=L.parseFromLexeme(e,n);if(i)if(o.value instanceof f)o.value.withClause=i;else throw new Error("WITH clause is not supported in this context.");return n=o.newIndex,{value:new nt({insertClause:new mt(r.value,s),selectQuery:o.value}),newIndex:n}}};var Gt=class{constructor(){this.tableSources=[];this.visitedNodes=new Set;this.tableNameMap=new Map;this.isRootVisit=!0;this.handlers=new Map,this.handlers.set(f.kind,e=>this.visitSimpleSelectQuery(e)),this.handlers.set(F.kind,e=>this.visitBinarySelectQuery(e)),this.handlers.set(pe.kind,e=>this.visitValuesQuery(e)),this.handlers.set(K.kind,e=>this.visitFromClause(e)),this.handlers.set(ye.kind,e=>this.visitJoinClause(e)),this.handlers.set(Ce.kind,e=>this.visitJoinOnClause(e)),this.handlers.set(Se.kind,e=>this.visitJoinUsingClause(e)),this.handlers.set(V.kind,e=>this.visitSourceExpression(e)),this.handlers.set(Q.kind,e=>this.visitTableSource(e)),this.handlers.set(qe.kind,e=>this.visitFunctionSource(e)),this.handlers.set($e.kind,e=>this.visitParenSource(e)),this.handlers.set(J.kind,e=>this.visitSubQuerySource(e)),this.handlers.set(me.kind,e=>this.visitInlineQuery(e)),this.handlers.set(se.kind,e=>this.visitWhereClause(e)),this.handlers.set(he.kind,e=>this.visitGroupByClause(e)),this.handlers.set(fe.kind,e=>this.visitHavingClause(e)),this.handlers.set(de.kind,e=>this.visitOrderByClause(e)),this.handlers.set(Ie.kind,e=>this.visitWindowFrameClause(e)),this.handlers.set(oe.kind,e=>this.visitLimitClause(e)),this.handlers.set(Oe.kind,e=>this.visitOffsetClause(e)),this.handlers.set(Ue.kind,e=>this.visitFetchClause(e)),this.handlers.set(Ne.kind,e=>this.visitForClause(e)),this.handlers.set(Pe.kind,e=>this.visitOrderByItem(e)),this.handlers.set(_.kind,e=>this.visitSelectClause(e)),this.handlers.set(z.kind,e=>this.visitSelectItem(e)),this.handlers.set(Y.kind,e=>this.visitParenExpression(e)),this.handlers.set(w.kind,e=>this.visitBinaryExpression(e)),this.handlers.set(Z.kind,e=>this.visitUnaryExpression(e)),this.handlers.set(ne.kind,e=>this.visitCaseExpression(e)),this.handlers.set(xe.kind,e=>this.visitCaseKeyValuePair(e)),this.handlers.set(Ee.kind,e=>this.visitSwitchCaseArgument(e)),this.handlers.set(we.kind,e=>this.visitBetweenExpression(e)),this.handlers.set(U.kind,e=>this.visitFunctionCall(e)),this.handlers.set(ge.kind,e=>this.visitArrayExpression(e)),this.handlers.set(ve.kind,e=>this.visitArrayQueryExpression(e)),this.handlers.set(Te.kind,e=>this.visitTupleExpression(e)),this.handlers.set(ae.kind,e=>this.visitCastExpression(e)),this.handlers.set(j.kind,e=>this.visitValueList(e)),this.handlers.set(Ve.kind,e=>this.visitStringSpecifierExpression(e))}collect(e){return this.visit(e),this.getTableSources()}getTableSources(){return this.tableSources}reset(){this.tableSources=[],this.tableNameMap.clear(),this.visitedNodes.clear()}getTableIdentifier(e){return e.qualifiedName.namespaces&&e.qualifiedName.namespaces.length>0?e.qualifiedName.namespaces.map(t=>t.name).join(".")+"."+(e.qualifiedName.name instanceof B?e.qualifiedName.name.value:e.qualifiedName.name.name):e.qualifiedName.name instanceof B?e.qualifiedName.name.value:e.qualifiedName.name.name}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){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.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){for(let t of e.tuples)t.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.tableNameMap.set(t,!0),this.tableSources.push(e))}visitFunctionSource(e){e.argument&&this.visitValueComponent(e.argument)}visitValueComponent(e){e.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)}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 ct=class a{constructor(){this.dependencyGraph=null;this.cteMap=new Map;this.sourceCollector=new Ge(!1),this.cteReferenceCollector=new Gt,this.cteCollector=new te}static{this.ERROR_MESSAGES={NOT_ANALYZED:"Must call analyzeDependencies first",CIRCULAR_REFERENCE:"Circular reference detected in CTE"}}static{this.MAIN_QUERY_NAME="MAIN_QUERY"}analyzeDependencies(e){let t=this.cteCollector.collect(e);return this.buildCTEMap(t),this.dependencyGraph=this.buildDependencyGraph(t,e),this.dependencyGraph}getDependencies(e){this.ensureAnalyzed();let t=this.findNodeByName(e);return t?[...t.dependencies]:[]}getDependents(e){this.ensureAnalyzed();let t=this.findNodeByName(e);return t?[...t.dependents]:[]}getMainQueryDependencies(){this.ensureAnalyzed();let e=this.findNodeByName(a.MAIN_QUERY_NAME);return e?[...e.dependencies]:[]}getNodesByType(e){return this.ensureAnalyzed(),this.dependencyGraph.nodes.filter(t=>t.type===e)}getMainQueryNode(){return this.ensureAnalyzed(),this.findNodeByName(a.MAIN_QUERY_NAME)}hasCircularDependency(){this.ensureAnalyzed();try{return this.getExecutionOrder(),!1}catch(e){if(e instanceof Error&&e.message.includes(a.ERROR_MESSAGES.CIRCULAR_REFERENCE))return!0;throw e}}getExecutionOrder(){this.ensureAnalyzed();let e=new Set,t=new Set,n=[],i=new Map;for(let s of this.dependencyGraph.nodes)i.set(s.name,new Set(s.dependencies));let r=s=>{if(e.has(s))return;if(t.has(s))throw new Error(`${a.ERROR_MESSAGES.CIRCULAR_REFERENCE}: ${s}`);t.add(s);let o=i.get(s)||new Set;for(let l of o)r(l);t.delete(s),e.add(s),n.push(s)};for(let s of this.dependencyGraph.nodes)e.has(s.name)||r(s.name);return n}buildDependencyGraph(e,t){let n=[],i=[],r=new Map,s=new Map;for(let l of e){let u=a.getCTEName(l);r.set(u,new Set),s.set(u,new Set)}r.set(a.MAIN_QUERY_NAME,new Set),s.set(a.MAIN_QUERY_NAME,new Set);for(let l of e){let u=a.getCTEName(l),c=this.sourceCollector.collect(l.query);for(let p of c){let m=p.table.name;this.cteMap.has(m)&&m!==u&&(r.get(u).add(m),s.get(m).add(u),i.push({from:u,to:m}))}}let o=this.getMainQueryWithoutCTE(t);if(o){let l=this.cteReferenceCollector.collect(o);for(let u of l){let c=u.table.name;this.cteMap.has(c)&&(r.get(a.MAIN_QUERY_NAME).add(c),s.get(c).add(a.MAIN_QUERY_NAME),i.push({from:a.MAIN_QUERY_NAME,to:c}))}}for(let l of e){let u=a.getCTEName(l);n.push({name:u,type:"CTE",cte:l,dependencies:Array.from(r.get(u)||new Set),dependents:Array.from(s.get(u)||new Set)})}return n.push({name:a.MAIN_QUERY_NAME,type:"ROOT",cte:null,dependencies:Array.from(r.get(a.MAIN_QUERY_NAME)||new Set),dependents:Array.from(s.get(a.MAIN_QUERY_NAME)||new Set)}),{nodes:n,edges:i}}ensureAnalyzed(){if(!this.dependencyGraph)throw new Error(a.ERROR_MESSAGES.NOT_ANALYZED)}buildCTEMap(e){this.cteMap.clear();for(let t of e){let n=a.getCTEName(t);this.cteMap.set(n,t)}}findNodeByName(e){return this.dependencyGraph?.nodes.find(t=>t.name===e)}getMainQueryWithoutCTE(e){return e.withClause?new f({selectClause:e.selectClause,fromClause:e.fromClause,whereClause:e.whereClause,groupByClause:e.groupByClause,havingClause:e.havingClause,orderByClause:e.orderByClause,limitClause:e.limitClause,offsetClause:e.offsetClause,fetchClause:e.fetchClause,forClause:e.forClause,windowClause:e.windowClause}):e}static getCTEName(e){return e.aliasExpression.table.name}};var Ht=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 i=[],r=n?t:t.toLowerCase(),s=o=>{o&&o instanceof g&&o.comments&&o.comments.some(l=>(n?l:l.toLowerCase()).includes(r))&&i.push(o);for(let l in o)o[l]&&typeof o[l]=="object"&&(Array.isArray(o[l])?o[l].forEach(s):s(o[l]))};return s(e),i}static replaceInComments(e,t,n,i=!1){let r=0,s=o=>{if(o&&o instanceof g&&o.comments)for(let l=0;l<o.comments.length;l++){let u=o.comments[l],c=i?"g":"gi",p=new RegExp(t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),c),m=u.replace(p,n);m!==u&&(o.comments[l]=m,r++)}for(let l in o)o[l]&&typeof o[l]=="object"&&(Array.isArray(o[l])?o[l].forEach(s):s(o[l]))};return s(e),r}static countComments(e){let t=0,n=i=>{i&&i instanceof g&&i.comments&&(t+=i.comments.length);for(let r in i)i[r]&&typeof i[r]=="object"&&(Array.isArray(i[r])?i[r].forEach(n):n(i[r]))};return n(e),t}static getAllComments(e){let t=[],n=i=>{i&&i instanceof g&&i.comments&&i.comments.forEach((r,s)=>{t.push({comment:r,component:i,index:s})});for(let r in i)i[r]&&typeof i[r]=="object"&&(Array.isArray(i[r])?i[r].forEach(n):n(i[r]))};return n(e),t}};var ot=class{constructor(e,t){this.name=e,this.columns=t}},It=class{constructor(e=null,t=!1){this.tableColumnResolver=e;this.allowWildcardWithoutResolver=t;this.tableSchemas=[];this.visitedNodes=new Set;this.commonTables=[];this.running=!1;this.unresolvedColumns=[];this.analysisError=void 0;this.isAnalyzeMode=!1;this.handlers=new Map,this.handlers.set(f.kind,n=>this.visitSimpleSelectQuery(n)),this.handlers.set(F.kind,n=>this.visitBinarySelectQuery(n))}collect(e){return this.visit(e),this.tableSchemas}analyze(e){this.isAnalyzeMode=!0;try{return this.visit(e),{success:this.unresolvedColumns.length===0&&!this.analysisError,schemas:this.tableSchemas,unresolvedColumns:this.unresolvedColumns,error:this.analysisError}}finally{this.isAnalyzeMode=!1}}visit(e){if(this.running){this.visitNode(e);return}this.reset(),this.running=!0;try{if(!(e instanceof f||e instanceof F))throw new Error(`Unsupported SQL component type for schema collection. Received: ${e.constructor.name}. Expected: SimpleSelectQuery or BinarySelectQuery.`);let t=new te;this.commonTables=t.collect(e),this.visitNode(e),this.consolidateTableSchemas()}finally{this.running=!1}}visitNode(e){if(this.visitedNodes.has(e))return;this.visitedNodes.add(e);let t=this.handlers.get(e.getKind());if(t){t(e);return}}reset(){this.tableSchemas=[],this.visitedNodes=new Set,this.commonTables=[],this.unresolvedColumns=[],this.analysisError=void 0}consolidateTableSchemas(){let e=new Map;for(let t of this.tableSchemas)if(!e.has(t.name))e.set(t.name,new Set(t.columns));else{let n=e.get(t.name);t.columns.forEach(i=>n?.add(i))}this.tableSchemas=Array.from(e.entries()).sort(([t],[n])=>t.localeCompare(n)).map(([t,n])=>new ot(t,Array.from(n).sort()))}handleSourceExpression(e,t,n){if(e.datasource instanceof Q){let i=e.datasource.getSourceName(),r=this.commonTables.filter(s=>s.getSourceAliasName()===i);if(r.length>0){r[0].query.accept(this);let s=e.getAliasName()??i;this.processCTETableSchema(r[0],s,t,n)}else{let s=e.getAliasName()??i;this.processCollectTableSchema(i,s,t,n)}}else e.datasource instanceof J&&this.visitNode(e.datasource.query)}visitSimpleSelectQuery(e){if(e.fromClause===null)return;let n=new be(this.tableColumnResolver,!0,"fullName").collect(e),i;if(this.allowWildcardWithoutResolver){let r=this.getSelectClauseColumns(e);i=n.filter(s=>s.value instanceof b).map(s=>s.value).filter(s=>{let o=s.getNamespace(),l=s.column.name;return r.some(u=>{if(u.value instanceof b){let c=u.value.getNamespace(),p=u.value.column.name;if(c===o&&p===l)return!0;if(p==="*"){if(this.allowWildcardWithoutResolver&&this.tableColumnResolver===null)return!1;if(c===""||c===o)return!0}}return!1})}).map(s=>({table:s.getNamespace(),column:s.column.name}))}else i=n.filter(r=>r.value instanceof b).map(r=>r.value).map(r=>({table:r.getNamespace(),column:r.column.name}));if(e.fromClause.joins!==null&&e.fromClause.joins.length>0){let r=i.filter(s=>s.table==="").map(s=>s.column);if(r.length>0)if(this.isAnalyzeMode)this.unresolvedColumns.push(...r),this.analysisError=`Column reference(s) without table name found in query: ${r.join(", ")}`;else throw new Error(`Column reference(s) without table name found in query: ${r.join(", ")}`)}if(e.fromClause.source.datasource instanceof Q?this.handleSourceExpression(e.fromClause.source,i,!0):e.fromClause.source.datasource instanceof J&&e.fromClause.source.datasource.query.accept(this),e.fromClause?.joins)for(let r of e.fromClause.joins)r.source.datasource instanceof Q?this.handleSourceExpression(r.source,i,!1):r.source.datasource instanceof J&&r.source.datasource.query.accept(this)}visitBinarySelectQuery(e){this.visitNode(e.left),this.visitNode(e.right)}getSelectClauseColumns(e){if(!e.selectClause)return[];let t=[];for(let n of e.selectClause.items)if(n.value instanceof b){let i=n.value.column.name;t.push({name:i,value:n.value})}return t}processCollectTableSchema(e,t,n,i=!1){if(this.tableColumnResolver===null&&n.filter(l=>l.table===t||i&&l.table==="").filter(l=>l.column==="*").length>0&&!this.allowWildcardWithoutResolver){let l=e?`Wildcard (*) is used. A TableColumnResolver is required to resolve wildcards. Target table: ${e}`:"Wildcard (*) is used. A TableColumnResolver is required to resolve wildcards.";if(this.isAnalyzeMode){this.analysisError=l;let u=n.filter(c=>c.table===t||i&&c.table==="").filter(c=>c.column==="*").map(c=>c.table?`${c.table}.*`:"*");this.unresolvedColumns.push(...u)}else throw new Error(l)}let r=n.filter(o=>o.column!=="*").filter(o=>o.table===t||i&&o.table==="").map(o=>o.column),s=new ot(e,r);this.tableSchemas.push(s)}processCTETableSchema(e,t,n,i=!1){let r=e.getSourceAliasName(),s=this.getCTEColumns(e),o=n.filter(c=>c.table===t||i&&c.table==="").map(c=>c.column);if(o.includes("*")){if(this.tableColumnResolver!==null){let c=this.tableColumnResolver(r);if(c.length>0){let p=new ot(r,c);this.tableSchemas.push(p);return}}if(s.length>0){let c=new ot(r,s);this.tableSchemas.push(c);return}else if(this.allowWildcardWithoutResolver){let c=new ot(r,[]);this.tableSchemas.push(c);return}else{let c=`Wildcard (*) is used. A TableColumnResolver is required to resolve wildcards. Target table: ${r}`;if(this.isAnalyzeMode)this.analysisError=c,this.unresolvedColumns.push(t?`${t}.*`:"*");else throw new Error(c);return}}let l=o.filter(c=>c!=="*");if(this.isAnalyzeMode){let c=s;if(this.tableColumnResolver){let p=this.tableColumnResolver(r);p.length>0&&(c=p)}if(c.length>0){let p=l.filter(m=>!c.includes(m));p.length>0&&(this.unresolvedColumns.push(...p),this.analysisError||(this.analysisError=`Undefined column(s) found in CTE "${r}": ${p.join(", ")}`))}else if(!this.allowWildcardWithoutResolver){let p=l;p.length>0&&(this.unresolvedColumns.push(...p),this.analysisError||(this.analysisError=`Undefined column(s) found in CTE "${r}": ${p.join(", ")}`))}}let u=new ot(r,l);this.tableSchemas.push(u)}getCTEColumns(e){try{return e.query instanceof f&&e.query.selectClause?this.extractColumnsFromSelectItems(e.query.selectClause.items,e):this.extractColumnsUsingCollector(e.query)}catch{return[]}}extractColumnsFromSelectItems(e,t){let n=[];for(let i of e)if(i.value instanceof b){let r=i.identifier?.name||i.value.column.name;if(i.value.column.name==="*"){let s=this.resolveWildcardInCTE(i.value,t);if(s===null)return[];n.push(...s)}else n.push(r)}else i.identifier&&n.push(i.identifier.name);return this.removeDuplicates(n)}resolveWildcardInCTE(e,t){let n=e.getNamespace();return n?this.resolveQualifiedWildcard(n):this.resolveUnqualifiedWildcard(t)}resolveQualifiedWildcard(e){let t=this.commonTables.find(n=>n.getSourceAliasName()===e);if(t){let n=this.getCTEColumns(t);if(n.length>0)return n}return null}resolveUnqualifiedWildcard(e){if(!(e.query instanceof f)||!e.query.fromClause)return null;let t=e.query.fromClause.source;return t.datasource instanceof Q?this.resolveTableWildcard(t.datasource.table.name):(t.datasource instanceof J,null)}resolveTableWildcard(e){if(this.tableColumnResolver){let t=this.tableColumnResolver(e);if(t.length>0)return t}return this.allowWildcardWithoutResolver,null}extractColumnsUsingCollector(e){return new be(null,!0,"fullName").collect(e).filter(i=>i.value instanceof b).map(i=>i.value).map(i=>i.column.name).filter((i,r,s)=>s.indexOf(i)===r)}removeDuplicates(e){return e.filter((t,n,i)=>i.indexOf(t)===n)}};var Yt=class{static validate(e,t){let n=typeof e=="string"?L.parse(e):e,i=Array.isArray(t)?l=>{let u=t.find(c=>c.name===l);return u?u.columns:[]}:t,s=new It(i).collect(n),o=[];for(let l of s){let u=i(l.name);if(u.length===0){o.push(`Table '${l.name}' is not defined.`);continue}let c=l.columns.filter(p=>!u.includes(p));c.length>0&&o.push(`Table '${l.name}' contains undefined columns: ${c.join(", ")}.`)}if(o.length>0)throw new Error(o.join(`
22
+ `))}};var Xt=class{constructor(e={}){this.knownCTENames=[];this.options=e,this.formatter=new Ae(e),this.dependencyAnalyzer=new ct}compose(e,t){if(e.length===0)return t;this.knownCTENames=e.map(p=>p.name);let n=e.map(p=>({name:p.name,query:this.extractPureQuery(p.query,p.name)})),i=this.buildTempQueryForAnalysis(n,t),r=this.dependencyAnalyzer.analyzeDependencies(i),s=this.sortCTEsByDependencies(n,r),o=this.detectRecursiveFromOriginalQueries(e),l=s.map(p=>`${p.name} as (${p.query})`),c=`${o?"with recursive":"with"} ${l.join(", ")} ${t}`;return this.options.validateSchema&&this.options.schema&&this.validateComposedQuery(c),this.formatFinalQuery(c)}extractPureQuery(e,t){if(!/^\s*with\s+/i.test(e)||/^\s*with\s+recursive\s+/i.test(e))return e;try{let r=L.parse(e);if(r.withClause&&r.withClause.tables){let s=this.getKnownCTENames();if(r.withClause.tables.map(u=>this.getCTEName(u)).every(u=>s.includes(u))){let u=new f({selectClause:r.selectClause,fromClause:r.fromClause,whereClause:r.whereClause,groupByClause:r.groupByClause,havingClause:r.havingClause,orderByClause:r.orderByClause,windowClause:r.windowClause,limitClause:r.limitClause,offsetClause:r.offsetClause,fetchClause:r.fetchClause,forClause:r.forClause,withClause:void 0});return new Ae({identifierEscape:{start:"",end:""}}).format(u).formattedSql}}}catch{}return e}getKnownCTENames(){return this.knownCTENames||[]}getCTEName(e){return e.aliasExpression.table.name}extractCTEWithRegex(e,t){let n=new RegExp(`${t}\\s+as\\s*\\(`,"i"),i=e.match(n);if(!i)return e;let r=i.index+i[0].length,s=1,o=r;for(;o<e.length&&s>0;){let l=e[o];l==="("?s++:l===")"&&s--,o++}return s===0?e.substring(r,o-1).trim():e}buildTempQueryForAnalysis(e,t){let i=`with ${e.map(r=>`${r.name} as (${r.query})`).join(", ")} ${t}`;try{return L.parse(i)}catch(r){throw new Error(`Failed to parse temporary query for dependency analysis: ${r}`)}}sortCTEsByDependencies(e,t){let n=new Map;return e.forEach(i=>n.set(i.name,i.query)),t.nodes.map(i=>({name:i.name,query:n.get(i.name)||""})).filter(i=>i.query!=="")}detectRecursiveFromOriginalQueries(e){return e.some(t=>t.query.toLowerCase().includes("with recursive"))}detectRecursiveCTEs(e){return e.withClause?this.formatter.format(e).formattedSql.toLowerCase().includes("with recursive"):!1}validateComposedQuery(e){try{let t=L.parse(e),n=Object.entries(this.options.schema).map(([i,r])=>({name:i,columns:r}));Yt.validate(t,n)}catch(t){throw t instanceof Error?new Error(`Schema validation failed: ${t.message}`):t}}formatFinalQuery(e){if(this.options.preset||this.options.keywordCase)try{let t=L.parse(e);return this.formatter.format(t).formattedSql}catch{return e}return e}};var gi=class a{static{this.ERROR_MESSAGES={CIRCULAR_REFERENCE:"Circular reference detected in non-recursive CTEs",PARSING_FAILED:"Failed to parse query for comment injection"}}static{this.COMMENT_TEXTS={AUTO_GENERATED:"Auto-generated by CTE decomposer",ORIGINAL_CTE:"Original CTE:",DEPENDENCIES:"Dependencies:",DEPENDENTS:"Dependents:",RECURSIVE_TYPE:"Type: Recursive CTE",NONE:"none"}}constructor(e={}){this.options=e,this.dependencyAnalyzer=new ct,this.cteCollector=new te,this.formatter=new Ae(e)}decompose(e){let t=this.cteCollector.collect(e);if(t.length===0)return[];let n=this.findRecursiveCTEs(e,t),i=this.dependencyAnalyzer.analyzeDependencies(e);return this.validateCircularDependencies(n.length>0),this.processCTENodes(e,i.nodes,n)}synchronize(e,t){if(e.length===0)return[];let n=this.flattenNestedWithClauses(e),i={...this.options,addComments:void 0},s=new Xt(i).compose(n,t),o=L.parse(s);return this.decompose(o)}flattenNestedWithClauses(e){let t=[],n=new Map;for(let r of e)try{if(/^\s*with\s+/i.test(r.query)){let o=L.parse(r.query);if(o.withClause&&o.withClause.tables){for(let p of o.withClause.tables){let m=this.getCTEName(p);if(!n.has(m)){let v=new Ae({identifierEscape:{start:"",end:""}}).format(p.query).formattedSql;n.set(m,v)}}let l=new f({selectClause:o.selectClause,fromClause:o.fromClause,whereClause:o.whereClause,groupByClause:o.groupByClause,havingClause:o.havingClause,orderByClause:o.orderByClause,windowClause:o.windowClause,limitClause:o.limitClause,offsetClause:o.offsetClause,fetchClause:o.fetchClause,forClause:o.forClause,withClause:void 0}),c=new Ae({identifierEscape:{start:"",end:""}}).format(l).formattedSql;t.push({name:r.name,query:c})}else t.push(r)}else t.push(r)}catch{t.push(r)}let i=[];for(let[r,s]of n)i.push({name:r,query:s});return i.push(...t),i}validateCircularDependencies(e){if(this.dependencyAnalyzer.hasCircularDependency()&&!e)throw new Error(a.ERROR_MESSAGES.CIRCULAR_REFERENCE)}processCTENodes(e,t,n){let i=[];for(let r of t){if(r.type==="ROOT")continue;n.includes(r.name)?i.push(this.createRecursiveCTE(r,e)):i.push(this.createStandardCTE(r,t))}return i}createRecursiveCTE(e,t){let n=this.formatter.format(t).formattedSql,i=e.dependents.filter(s=>s!=="MAIN_QUERY"),r=this.addCommentsToQuery(n,e.name,e.dependencies,e.dependents,!0);return{name:e.name,query:r,dependencies:[...e.dependencies],dependents:i,isRecursive:!0}}createStandardCTE(e,t){let n=this.buildExecutableQuery(e,t),i=this.addCommentsToQuery(n,e.name,e.dependencies,e.dependents,!1),r=e.dependents.filter(s=>s!=="MAIN_QUERY");return{name:e.name,query:i,dependencies:[...e.dependencies],dependents:r,isRecursive:!1}}buildExecutableQuery(e,t){if(e.type==="ROOT"||!e.cte)throw new Error(`Cannot build executable query for ROOT node: ${e.name}`);let n=this.collectRequiredCTEs(e,t);if(n.length===0)return this.formatter.format(e.cte.query).formattedSql;let i=this.buildWithClause(n),r=this.formatter.format(e.cte.query).formattedSql;return`${i} ${r}`}collectRequiredCTEs(e,t){let n=new Set,i=[],r=new Map;for(let o of t)r.set(o.name,o);let s=o=>{if(n.has(o))return;n.add(o);let l=r.get(o);if(l){for(let u of l.dependencies)s(u);o!==e.name&&l.type!=="ROOT"&&i.push(l)}};for(let o of e.dependencies)s(o);return i}buildWithClause(e){return e.length===0?"":`with ${e.map(n=>{if(n.type==="ROOT"||!n.cte)throw new Error(`Cannot include ROOT node in WITH clause: ${n.name}`);let i=n.name,r=this.formatter.format(n.cte.query).formattedSql;return`${i} as (${r})`}).join(", ")}`}findRecursiveCTEs(e,t){return!e.withClause||!this.isRecursiveWithClause(e)?[]:t.map(n=>this.getCTEName(n))}isRecursiveWithClause(e){return this.formatter.format(e).formattedSql.toLowerCase().includes("with recursive")}addCommentsToQuery(e,t,n,i,r){if(this.options.addComments!==!0)return e;try{let s=L.parse(e);return this.generateComments(t,n,i,r).forEach(u=>{Ht.addComment(s,u)}),new Ae({...this.options,exportComment:!0}).format(s).formattedSql}catch(s){return console.warn(`${a.ERROR_MESSAGES.PARSING_FAILED}: ${s}`),this.addTextCommentsToQuery(e,t,n,i,r)}}generateComments(e,t,n,i){let{AUTO_GENERATED:r,ORIGINAL_CTE:s,DEPENDENCIES:o,DEPENDENTS:l,RECURSIVE_TYPE:u,NONE:c}=a.COMMENT_TEXTS,p=[];p.push(r),p.push(`${s} ${e}`),i&&p.push(u);let m=t.length>0?t.join(", "):c;p.push(`${o} ${m}`);let C=n.filter(h=>h!=="MAIN_QUERY"),v=C.length>0?C.join(", "):c;return p.push(`${l} ${v}`),p}addTextCommentsToQuery(e,t,n,i,r){return`${this.generateComments(t,n,i,r).map(l=>`-- ${l}`).join(`
19
23
  `)}
20
- ${e}`}getCTEName(e){return e.aliasExpression.table.name}};var Kt=class{constructor(){this.columnReferences=[];this.visitedNodes=new Set;this.handlers=new Map,this.handlers.set(oe.kind,e=>this.visitWithClause(e)),this.handlers.set(te.kind,e=>this.visitCommonTable(e)),this.handlers.set(J.kind,e=>this.visitSelectClause(e)),this.handlers.set(U.kind,e=>this.visitFromClause(e)),this.handlers.set(ie.kind,e=>this.visitWhereClause(e)),this.handlers.set(ce.kind,e=>this.visitGroupByClause(e)),this.handlers.set(pe.kind,e=>this.visitHavingClause(e)),this.handlers.set(ue.kind,e=>this.visitOrderByClause(e)),this.handlers.set(Ge.kind,e=>this.visitWindowsClause(e)),this.handlers.set(re.kind,e=>this.visitLimitClause(e)),this.handlers.set(Qe.kind,e=>this.visitOffsetClause(e)),this.handlers.set(Me.kind,e=>this.visitFetchClause(e)),this.handlers.set(Te.kind,e=>this.visitForClause(e)),this.handlers.set(de.kind,e=>this.visitJoinClause(e)),this.handlers.set(me.kind,e=>this.visitJoinOnClause(e)),this.handlers.set(we.kind,e=>this.visitJoinUsingClause(e)),this.handlers.set(B.kind,e=>this.visitSourceExpression(e)),this.handlers.set(j.kind,e=>this.visitSubQuerySource(e)),this.handlers.set(v.kind,e=>this.visitColumnReference(e)),this.handlers.set(y.kind,e=>this.visitBinaryExpression(e)),this.handlers.set(Y.kind,e=>this.visitUnaryExpression(e)),this.handlers.set(D.kind,e=>this.visitFunctionCall(e)),this.handlers.set(ee.kind,e=>this.visitCaseExpression(e)),this.handlers.set(se.kind,e=>this.visitCastExpression(e)),this.handlers.set(ye.kind,e=>this.visitBetweenExpression(e)),this.handlers.set(H.kind,e=>this.visitParenExpression(e)),this.handlers.set(ge.kind,e=>this.visitInlineQuery(e)),this.handlers.set(fe.kind,e=>this.visitArrayExpression(e)),this.handlers.set(Ce.kind,e=>this.visitArrayQueryExpression(e)),this.handlers.set(q.kind,e=>this.visitValueList(e)),this.handlers.set(Ne.kind,e=>this.visitWindowFrameExpression(e))}collect(e){return this.columnReferences=[],this.visitedNodes.clear(),e instanceof C?this.collectFromSimpleQuery(e):e instanceof Q?this.collectFromSimpleQuery(e.toSimpleQuery()):e.accept(this),[...this.columnReferences]}collectFromSimpleQuery(e){if(e.withClause&&e.withClause.tables)for(let t of e.withClause.tables)this.collectFromSimpleQuery(t.query);if(this.collectFromSelectClause(e.selectClause),e.fromClause&&this.collectFromFromClause(e.fromClause),e.whereClause&&this.collectFromValueComponent(e.whereClause.condition),e.groupByClause&&e.groupByClause.grouping)for(let t of e.groupByClause.grouping)this.collectFromValueComponent(t);if(e.havingClause&&this.collectFromValueComponent(e.havingClause.condition),e.orderByClause&&e.orderByClause.order)for(let t of e.orderByClause.order)typeof t=="object"&&"value"in t&&t.value?this.collectFromValueComponent(t.value):this.collectFromValueComponent(t)}collectFromSelectClause(e){for(let t of e.items)this.collectFromValueComponent(t.value)}collectFromFromClause(e){if(this.collectFromSourceExpression(e.source),e.joins)for(let t of e.joins)this.collectFromSourceExpression(t.source),t.condition&&this.collectFromValueComponent(t.condition.condition)}collectFromSourceExpression(e){e.datasource instanceof j&&(e.datasource.query instanceof C?this.collectFromSimpleQuery(e.datasource.query):e.datasource.query instanceof Q&&this.collectFromSimpleQuery(e.datasource.query.toSimpleQuery()))}collectFromValueComponent(e){if(e instanceof v)this.columnReferences.push(e);else if(e instanceof y)this.collectFromValueComponent(e.left),this.collectFromValueComponent(e.right);else if(e instanceof Y)this.collectFromValueComponent(e.expression);else if(e instanceof D&&e.argument)this.collectFromValueComponent(e.argument);else if(e instanceof ee){if(e.condition&&this.collectFromValueComponent(e.condition),e.switchCase&&e.switchCase.cases)for(let t of e.switchCase.cases)this.collectFromValueComponent(t.key),this.collectFromValueComponent(t.value);e.switchCase&&e.switchCase.elseValue&&this.collectFromValueComponent(e.switchCase.elseValue)}else e instanceof H?this.collectFromValueComponent(e.expression):e instanceof ge&&(e.selectQuery instanceof C?this.collectFromSimpleQuery(e.selectQuery):e.selectQuery instanceof Q&&this.collectFromSimpleQuery(e.selectQuery.toSimpleQuery()))}visit(e){if(this.visitedNodes.has(e))return;this.visitedNodes.add(e);let t=this.handlers.get(e.getKind());t&&t(e)}visitSimpleSelectQuery(e){e.withClause&&e.withClause.accept(this),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.orderByClause&&e.orderByClause.accept(this),e.windowClause&&e.windowClause.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)}visitWithClause(e){for(let t of e.tables)t.accept(this)}visitCommonTable(e){e.query.accept(this)}visitSelectClause(e){for(let t of e.items)t.value.accept(this)}visitFromClause(e){if(e.source.accept(this),e.joins)for(let t of e.joins)t.accept(this)}visitWhereClause(e){e.condition.accept(this)}visitGroupByClause(e){if(e.grouping)for(let t of e.grouping)t.accept(this)}visitHavingClause(e){e.condition.accept(this)}visitOrderByClause(e){if(e.order)for(let t of e.order)typeof t=="object"&&"value"in t&&t.value?typeof t.value=="object"&&"accept"in t.value&&t.value.accept(this):typeof t=="object"&&"accept"in t&&t.accept(this)}visitWindowsClause(e){for(let t of e.windows)t.expression.accept(this)}visitLimitClause(e){e.value.accept(this)}visitOffsetClause(e){e.value.accept(this)}visitFetchClause(e){e.expression.accept(this)}visitForClause(e){}visitJoinClause(e){e.source.accept(this),e.condition&&e.condition.accept(this)}visitJoinOnClause(e){e.condition.accept(this)}visitJoinUsingClause(e){e.condition.accept(this)}visitSourceExpression(e){e.datasource.accept(this)}visitSubQuerySource(e){e.query.accept(this)}visitColumnReference(e){this.columnReferences.push(e)}visitBinaryExpression(e){e.left.accept(this),e.right.accept(this)}visitUnaryExpression(e){e.expression.accept(this)}visitFunctionCall(e){e.argument&&e.argument.accept(this)}visitCaseExpression(e){if(e.condition&&e.condition.accept(this),e.switchCase&&e.switchCase.cases)for(let t of e.switchCase.cases)t.key.accept(this),t.value.accept(this);e.switchCase&&e.switchCase.elseValue&&e.switchCase.elseValue.accept(this)}visitCastExpression(e){e.input.accept(this)}visitBetweenExpression(e){e.expression.accept(this),e.lower.accept(this),e.upper.accept(this)}visitParenExpression(e){e.expression.accept(this)}visitInlineQuery(e){e.selectQuery.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)}visitWindowFrameExpression(e){e.partition&&e.partition.accept(this),e.order&&e.order.accept(this)}};var ze={nullQuery:"Query cannot be null or undefined",invalidOldName:"Old CTE name must be a non-empty string",invalidNewName:"New CTE name must be a non-empty string",sameNames:"Old and new CTE names cannot be the same",unsupportedQuery:"Unsupported query type for CTE renaming",cteNotExists:o=>`CTE '${o}' does not exist`,cteAlreadyExists:o=>`CTE '${o}' already exists`,cteNotFound:o=>`CTE '${o}' not found`},pi=class{constructor(){this.dependencyAnalyzer=new rt,this.columnReferenceCollector=new Kt,this.tableSourceCollector=new nt}renameCTE(e,t,n){this.validateInputs(e,t,n);let i=t.trim(),r=n.trim();if(e instanceof C)this.renameInSimpleQuery(e,i,r);else if(e instanceof Q)this.renameInBinaryQuery(e,i,r);else throw new Error(ze.unsupportedQuery)}validateInputs(e,t,n){if(!e)throw new Error(ze.nullQuery);if(!t||typeof t!="string"||t.trim()==="")throw new Error(ze.invalidOldName);if(!n||typeof n!="string"||n.trim()==="")throw new Error(ze.invalidNewName);if(t.trim()===n.trim())throw new Error(ze.sameNames)}renameInSimpleQuery(e,t,n){let i=e.getCTENames();if(!i.includes(t))throw new Error(ze.cteNotExists(t));if(i.includes(n))throw new Error(ze.cteAlreadyExists(n));this.renameCTEDefinition(e,t,n),this.updateAllReferences(e,t,n)}renameInBinaryQuery(e,t,n){let i=e.toSimpleQuery(),r=[];if(i.withClause&&i.withClause.tables&&(r=i.withClause.tables.map(s=>s.aliasExpression.table.name)),!r.includes(t))throw new Error(ze.cteNotExists(t));if(r.includes(n))throw new Error(ze.cteAlreadyExists(n));this.renameCTEDefinition(i,t,n),i.withClause&&(e.withClause=i.withClause,e.left instanceof C&&(e.left.withClause=i.withClause)),this.renameInSelectQuery(e.left,t,n),this.renameInSelectQuery(e.right,t,n)}renameInSelectQuery(e,t,n){e instanceof C?this.updateAllReferences(e,t,n):e instanceof Q&&(this.renameInSelectQuery(e.left,t,n),this.renameInSelectQuery(e.right,t,n))}renameCTEDefinition(e,t,n){if(!e.withClause||!e.withClause.tables)throw new Error(ze.cteNotFound(t));let i=e.withClause.tables.find(r=>r.aliasExpression.table.name===t);if(!i)throw new Error(ze.cteNotFound(t));i.aliasExpression.table.name=n}updateAllReferences(e,t,n){let i=this.columnReferenceCollector.collect(e);for(let s of i)if(s.namespaces&&s.namespaces.length>0){for(let a of s.namespaces)if(a.name===t){a.name=n;break}}let r=this.tableSourceCollector.collect(e);for(let s of r)s.getSourceName()===t&&(s.qualifiedName.name instanceof v||("name"in s.qualifiedName.name?s.qualifiedName.name.name=n:s.qualifiedName.name.value=n));this.updateTableSourcesInCTEs(e,t,n)}updateTableSourcesInCTEs(e,t,n){if(!(!e.withClause||!e.withClause.tables))for(let i of e.withClause.tables)this.updateTableSourcesInQuery(i.query,t,n)}updateTableSourcesInQuery(e,t,n){if(e.fromClause&&e.fromClause.source.datasource&&this.updateTableSource(e.fromClause.source.datasource,t,n),e.fromClause&&e.fromClause.joins)for(let i of e.fromClause.joins)i.source.datasource&&this.updateTableSource(i.source.datasource,t,n)}updateTableSource(e,t,n){if(!e||typeof e!="object")return;let i=e;if(typeof i.getSourceName=="function")try{if(i.getSourceName()===t&&i.qualifiedName&&typeof i.qualifiedName=="object"){let s=i.qualifiedName;if(s.name&&typeof s.name=="object"){let a=s.name;"name"in a&&typeof a.name=="string"?a.name=n:"value"in a&&typeof a.value=="string"&&(a.value=n)}}}catch(r){console.warn("Warning: Failed to update table source:",r)}}};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 i=[e],r=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),p=`${o.CTE_OBJECT_PREFIX}${u}`,h=this.buildDepthCte(c,r,p,n,t);i.push(h),r=p}return{ctes:i,lastCteAlias:r,columnMappings:this.columnMappings}}generateUniqueJsonColumnName(e,t,n){this.jsonColumnCounter++;let i=`${e.toLowerCase()}_json_${this.jsonColumnCounter}`;return this.columnMappings.push({entityId:t,entityName:e,generatedColumnName:i,depth:n}),i}collectAndSortObjectEntities(e,t){let n=[],i=r=>{let s=t.get(r);if(!s)throw new Error(`Entity ${r} 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(r);a;){if(u.has(a))throw new Error(`Circular dependency detected: ${a} already visited in path for ${r}`);u.add(a);let c=t.get(a);if(!c)throw new Error(`Parent entity ${a} not found during depth calculation for ${r}`);let p=!1;if(c.isRoot)p=!0;else{let h=e.nestedEntities.find(w=>w.id===a);if(h)h.relationshipType==="object"&&(p=!0);else throw new Error(`Parent entity ${a} (ancestor of ${r}) has no definition in mapping.nestedEntities and is not root.`)}if(p&&l++,c.isRoot)break;a=c.parentId}return l};return e.nestedEntities.forEach(r=>{if(r.relationshipType==="object"){let s=t.get(r.id);s&&!s.isRoot&&n.push({entity:s,depth:i(r.id)})}}),n}groupEntitiesByDepth(e){let t=new Map;return e.forEach(n=>{let i=n.depth;t.has(i)||t.set(i,[]),t.get(i).push(n)}),t}buildDepthCte(e,t,n,i,r){let s=[new K(new v(null,new x(o.WILDCARD_COLUMN)))];for(let{entity:l}of e){let u=this.buildEntityJsonColumn(l,i,r);s.push(u)}let a=new C({selectClause:new J(s),fromClause:new U(new B(new O(null,new x(t)),null),null)});return new te(a,new ne(n,null),null)}buildEntityJsonColumn(e,t,n){let{jsonObjectArgs:i,nullChecks:r}=this.prepareEntityColumns(e);this.addChildObjectRelationships(e,i,t,n);let s=this.createJsonObject(i),a=this.buildNullCondition(r),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 K(l,c)}calculateApproximateDepth(e,t){if(e.isRoot)return 0;if(!e.parentId)return 1;let n=1,i=e.parentId;for(;i&&i!==t.rootEntity.id;){let r=t.nestedEntities.find(s=>s.id===i);if(!r)break;n++,i=r.parentId}return n}prepareEntityColumns(e){let t=[],n=[];return Object.entries(e.columns).forEach(([i,r])=>{t.push(new G(i)),t.push(new v(null,new x(r))),n.push(new y(new v(null,new x(r)),"is",new G(null)))}),{jsonObjectArgs:t,nullChecks:n}}addChildObjectRelationships(e,t,n,i){n.nestedEntities.filter(s=>s.parentId===e.id&&s.relationshipType==="object").forEach(s=>{let a=i.get(s.id);if(a){t.push(new G(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 v(null,new x(l)))}})}createJsonObject(e){let t="jsonb_build_object";return new D(null,new R(t),new q(e),null)}buildNullCondition(e){return e.reduce((t,n)=>t?new y(t,"and",n):n)}createCaseExpression(e,t){return new ee(null,new ve([new Se(e,new G(null))],t))}};var zn=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,i,r){let s=[...e],a=t,l=this.collectAndSortArrayEntities(i,n);if(l.length===0)return{updatedCtes:s,lastCteAlias:a};let u=this.groupEntitiesByDepth(l),c=Array.from(u.keys()).sort((p,h)=>h-p);for(let p of c){let h=u.get(p),{cte:w,newCteAlias:E}=this.buildDepthCte(h,a,s,p,i,r);s.push(w),a=E}return{updatedCtes:s,lastCteAlias:a}}collectAndSortArrayEntities(e,t){let n=[],i=r=>{let s=t.get(r);return!s||s.isRoot?0:s.parentId?1+i(s.parentId):1};return e.nestedEntities.forEach(r=>{if(r.relationshipType==="array"){let s=t.get(r.id),a=t.get(r.parentId);if(!s||!a)throw new Error(`Configuration error: Array entity '${r.id}' or its parent '${r.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 '${r.name}'.`);let u=l[0];n.push({entity:s,parentEntity:a,parentIdColumnSqlName:u,depth:i(r.id)})}}),n.sort((r,s)=>s.depth-r.depth),n}groupEntitiesByDepth(e){let t=new Map;return e.forEach(n=>{let i=n.depth;t.has(i)||t.set(i,[]),t.get(i).push(n)}),t}buildDepthCte(e,t,n,i,r,s){let a=new Set;e.forEach(b=>{Object.values(b.entity.columns).forEach(N=>a.add(N));let F=N=>{r.nestedEntities.filter($=>$.parentId===N).forEach($=>{Object.values($.columns).forEach(S=>{let I=typeof S=="string"?S:S.column;a.add(I)}),F($.id)})};F(b.entity.id)});let l=n.find(b=>b.aliasExpression.table.name===t)?.query;if(!l)throw new Error(`CTE not found: ${t}`);let u=new Oe(null,n).collect(l),c=[],p=[],h=new Set;e.forEach(b=>{Object.values(b.entity.columns).forEach(F=>h.add(F))});let w=this.collectArrayEntityColumnsByDepth(r,i),E=new Set;s&&e.forEach(b=>{r.nestedEntities.filter(F=>F.parentId===b.entity.id&&F.relationshipType==="object").forEach(F=>{let N=s.find($=>$.entityId===F.id);N&&E.add(N.generatedColumnName)})}),this.processSelectVariablesForGroupBy(u,a,w,i,p,c,E);for(let b of e){let F=this.buildAggregationDetailsForArrayEntity(b.entity,r.nestedEntities,new Map,s);p.push(new K(F.jsonAgg,b.entity.propertyName))}let d=`${o.CTE_ARRAY_PREFIX}${i}`,g=new C({selectClause:new J(p),fromClause:new U(new B(new O(null,new x(t)),null),null),groupByClause:c.length>0?new ce(c):null});return{cte:new te(g,new ne(d,null),null),newCteAlias:d}}buildAggregationDetailsForArrayEntity(e,t,n,i){let r=o.JSON_FUNCTIONS.BUILD_OBJECT,s=[];Object.entries(e.columns).forEach(([h,w])=>{s.push(new G(h)),s.push(new v(null,new x(w)))}),t.filter(h=>h.parentId===e.id).forEach(h=>{let w=h.originalPropertyName||h.propertyName;if(s.push(new G(w)),h.relationshipType==="object"){if(!i)throw new Error(`\u274C PostgresArrayEntityCteBuilder Error: Column mappings not provided
24
+ ${e}`}getCTEName(e){return e.aliasExpression.table.name}};var Pt=class{constructor(){this.columnReferences=[];this.visitedNodes=new Set;this.handlers=new Map,this.handlers.set(le.kind,e=>this.visitWithClause(e)),this.handlers.set(ie.kind,e=>this.visitCommonTable(e)),this.handlers.set(_.kind,e=>this.visitSelectClause(e)),this.handlers.set(K.kind,e=>this.visitFromClause(e)),this.handlers.set(se.kind,e=>this.visitWhereClause(e)),this.handlers.set(he.kind,e=>this.visitGroupByClause(e)),this.handlers.set(fe.kind,e=>this.visitHavingClause(e)),this.handlers.set(de.kind,e=>this.visitOrderByClause(e)),this.handlers.set(it.kind,e=>this.visitWindowsClause(e)),this.handlers.set(oe.kind,e=>this.visitLimitClause(e)),this.handlers.set(Oe.kind,e=>this.visitOffsetClause(e)),this.handlers.set(Ue.kind,e=>this.visitFetchClause(e)),this.handlers.set(Ne.kind,e=>this.visitForClause(e)),this.handlers.set(ye.kind,e=>this.visitJoinClause(e)),this.handlers.set(Ce.kind,e=>this.visitJoinOnClause(e)),this.handlers.set(Se.kind,e=>this.visitJoinUsingClause(e)),this.handlers.set(V.kind,e=>this.visitSourceExpression(e)),this.handlers.set(J.kind,e=>this.visitSubQuerySource(e)),this.handlers.set(b.kind,e=>this.visitColumnReference(e)),this.handlers.set(w.kind,e=>this.visitBinaryExpression(e)),this.handlers.set(Z.kind,e=>this.visitUnaryExpression(e)),this.handlers.set(U.kind,e=>this.visitFunctionCall(e)),this.handlers.set(ne.kind,e=>this.visitCaseExpression(e)),this.handlers.set(ae.kind,e=>this.visitCastExpression(e)),this.handlers.set(we.kind,e=>this.visitBetweenExpression(e)),this.handlers.set(Y.kind,e=>this.visitParenExpression(e)),this.handlers.set(me.kind,e=>this.visitInlineQuery(e)),this.handlers.set(ge.kind,e=>this.visitArrayExpression(e)),this.handlers.set(ve.kind,e=>this.visitArrayQueryExpression(e)),this.handlers.set(j.kind,e=>this.visitValueList(e)),this.handlers.set(Fe.kind,e=>this.visitWindowFrameExpression(e))}collect(e){return this.columnReferences=[],this.visitedNodes.clear(),e instanceof f?this.collectFromSimpleQuery(e):e instanceof F?this.collectFromSimpleQuery(e.toSimpleQuery()):e.accept(this),[...this.columnReferences]}collectFromSimpleQuery(e){if(e.withClause&&e.withClause.tables)for(let t of e.withClause.tables)this.collectFromSimpleQuery(t.query);if(this.collectFromSelectClause(e.selectClause),e.fromClause&&this.collectFromFromClause(e.fromClause),e.whereClause&&this.collectFromValueComponent(e.whereClause.condition),e.groupByClause&&e.groupByClause.grouping)for(let t of e.groupByClause.grouping)this.collectFromValueComponent(t);if(e.havingClause&&this.collectFromValueComponent(e.havingClause.condition),e.orderByClause&&e.orderByClause.order)for(let t of e.orderByClause.order)typeof t=="object"&&"value"in t&&t.value?this.collectFromValueComponent(t.value):this.collectFromValueComponent(t)}collectFromSelectClause(e){for(let t of e.items)this.collectFromValueComponent(t.value)}collectFromFromClause(e){if(this.collectFromSourceExpression(e.source),e.joins)for(let t of e.joins)this.collectFromSourceExpression(t.source),t.condition&&this.collectFromValueComponent(t.condition.condition)}collectFromSourceExpression(e){e.datasource instanceof J&&(e.datasource.query instanceof f?this.collectFromSimpleQuery(e.datasource.query):e.datasource.query instanceof F&&this.collectFromSimpleQuery(e.datasource.query.toSimpleQuery()))}collectFromValueComponent(e){if(e instanceof b)this.columnReferences.push(e);else if(e instanceof w)this.collectFromValueComponent(e.left),this.collectFromValueComponent(e.right);else if(e instanceof Z)this.collectFromValueComponent(e.expression);else if(e instanceof U&&e.argument)this.collectFromValueComponent(e.argument);else if(e instanceof ne){if(e.condition&&this.collectFromValueComponent(e.condition),e.switchCase&&e.switchCase.cases)for(let t of e.switchCase.cases)this.collectFromValueComponent(t.key),this.collectFromValueComponent(t.value);e.switchCase&&e.switchCase.elseValue&&this.collectFromValueComponent(e.switchCase.elseValue)}else e instanceof Y?this.collectFromValueComponent(e.expression):e instanceof me&&(e.selectQuery instanceof f?this.collectFromSimpleQuery(e.selectQuery):e.selectQuery instanceof F&&this.collectFromSimpleQuery(e.selectQuery.toSimpleQuery()))}visit(e){if(this.visitedNodes.has(e))return;this.visitedNodes.add(e);let t=this.handlers.get(e.getKind());t&&t(e)}visitSimpleSelectQuery(e){e.withClause&&e.withClause.accept(this),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.orderByClause&&e.orderByClause.accept(this),e.windowClause&&e.windowClause.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)}visitWithClause(e){for(let t of e.tables)t.accept(this)}visitCommonTable(e){e.query.accept(this)}visitSelectClause(e){for(let t of e.items)t.value.accept(this)}visitFromClause(e){if(e.source.accept(this),e.joins)for(let t of e.joins)t.accept(this)}visitWhereClause(e){e.condition.accept(this)}visitGroupByClause(e){if(e.grouping)for(let t of e.grouping)t.accept(this)}visitHavingClause(e){e.condition.accept(this)}visitOrderByClause(e){if(e.order)for(let t of e.order)typeof t=="object"&&"value"in t&&t.value?typeof t.value=="object"&&"accept"in t.value&&t.value.accept(this):typeof t=="object"&&"accept"in t&&t.accept(this)}visitWindowsClause(e){for(let t of e.windows)t.expression.accept(this)}visitLimitClause(e){e.value.accept(this)}visitOffsetClause(e){e.value.accept(this)}visitFetchClause(e){e.expression.accept(this)}visitForClause(e){}visitJoinClause(e){e.source.accept(this),e.condition&&e.condition.accept(this)}visitJoinOnClause(e){e.condition.accept(this)}visitJoinUsingClause(e){e.condition.accept(this)}visitSourceExpression(e){e.datasource.accept(this)}visitSubQuerySource(e){e.query.accept(this)}visitColumnReference(e){this.columnReferences.push(e)}visitBinaryExpression(e){e.left.accept(this),e.right.accept(this)}visitUnaryExpression(e){e.expression.accept(this)}visitFunctionCall(e){e.argument&&e.argument.accept(this)}visitCaseExpression(e){if(e.condition&&e.condition.accept(this),e.switchCase&&e.switchCase.cases)for(let t of e.switchCase.cases)t.key.accept(this),t.value.accept(this);e.switchCase&&e.switchCase.elseValue&&e.switchCase.elseValue.accept(this)}visitCastExpression(e){e.input.accept(this)}visitBetweenExpression(e){e.expression.accept(this),e.lower.accept(this),e.upper.accept(this)}visitParenExpression(e){e.expression.accept(this)}visitInlineQuery(e){e.selectQuery.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)}visitWindowFrameExpression(e){e.partition&&e.partition.accept(this),e.order&&e.order.accept(this)}};var et={nullQuery:"Query cannot be null or undefined",invalidOldName:"Old CTE name must be a non-empty string",invalidNewName:"New CTE name must be a non-empty string",sameNames:"Old and new CTE names cannot be the same",unsupportedQuery:"Unsupported query type for CTE renaming",cteNotExists:a=>`CTE '${a}' does not exist`,cteAlreadyExists:a=>`CTE '${a}' already exists`,cteNotFound:a=>`CTE '${a}' not found`},Zt=class{constructor(){this.dependencyAnalyzer=new ct,this.columnReferenceCollector=new Pt,this.tableSourceCollector=new Ge,this.keywordParser=new ke(Jt)}renameCTE(e,t,n){this.validateInputs(e,t,n);let i=t.trim(),r=n.trim();if(e instanceof f)this.renameInSimpleQuery(e,i,r);else if(e instanceof F)this.renameInBinaryQuery(e,i,r);else throw new Error(et.unsupportedQuery)}validateInputs(e,t,n){if(!e)throw new Error(et.nullQuery);if(!t||typeof t!="string"||t.trim()==="")throw new Error(et.invalidOldName);if(!n||typeof n!="string"||n.trim()==="")throw new Error(et.invalidNewName);if(t.trim()===n.trim())throw new Error(et.sameNames)}renameInSimpleQuery(e,t,n){let i=e.getCTENames();if(!i.includes(t))throw new Error(et.cteNotExists(t));if(i.includes(n))throw new Error(et.cteAlreadyExists(n));this.renameCTEDefinition(e,t,n),this.updateAllReferences(e,t,n)}renameInBinaryQuery(e,t,n){let i=e.toSimpleQuery(),r=[];if(i.withClause&&i.withClause.tables&&(r=i.withClause.tables.map(s=>s.aliasExpression.table.name)),!r.includes(t))throw new Error(et.cteNotExists(t));if(r.includes(n))throw new Error(et.cteAlreadyExists(n));this.renameCTEDefinition(i,t,n),i.withClause&&(e.withClause=i.withClause,e.left instanceof f&&(e.left.withClause=i.withClause)),this.renameInSelectQuery(e.left,t,n),this.renameInSelectQuery(e.right,t,n)}renameInSelectQuery(e,t,n){e instanceof f?this.updateAllReferences(e,t,n):e instanceof F&&(this.renameInSelectQuery(e.left,t,n),this.renameInSelectQuery(e.right,t,n))}renameCTEDefinition(e,t,n){if(!e.withClause||!e.withClause.tables)throw new Error(et.cteNotFound(t));let i=e.withClause.tables.find(r=>r.aliasExpression.table.name===t);if(!i)throw new Error(et.cteNotFound(t));i.aliasExpression.table.name=n}updateAllReferences(e,t,n){let i=this.columnReferenceCollector.collect(e);for(let s of i)if(s.namespaces&&s.namespaces.length>0){for(let o of s.namespaces)if(o.name===t){o.name=n;break}}let r=this.tableSourceCollector.collect(e);for(let s of r)s.getSourceName()===t&&(s.qualifiedName.name instanceof b||("name"in s.qualifiedName.name?s.qualifiedName.name.name=n:s.qualifiedName.name.value=n));this.updateTableSourcesInCTEs(e,t,n)}updateTableSourcesInCTEs(e,t,n){if(!(!e.withClause||!e.withClause.tables))for(let i of e.withClause.tables)this.updateTableSourcesInQuery(i.query,t,n)}updateTableSourcesInQuery(e,t,n){if(e.fromClause&&e.fromClause.source.datasource&&this.updateTableSource(e.fromClause.source.datasource,t,n),e.fromClause&&e.fromClause.joins)for(let i of e.fromClause.joins)i.source.datasource&&this.updateTableSource(i.source.datasource,t,n)}updateTableSource(e,t,n){if(!e||typeof e!="object")return;let i=e;if(typeof i.getSourceName=="function")try{if(i.getSourceName()===t&&i.qualifiedName&&typeof i.qualifiedName=="object"){let s=i.qualifiedName;if(s.name&&typeof s.name=="object"){let o=s.name;"name"in o&&typeof o.name=="string"?o.name=n:"value"in o&&typeof o.value=="string"&&(o.value=n)}}}catch(r){console.warn("Warning: Failed to update table source:",r)}}renameCTEAtPosition(e,t,n){if(!e?.trim())throw new Error("SQL cannot be empty");if(!t||t.line<1||t.column<1)throw new Error("Position must be a valid line/column (1-based)");if(!n?.trim())throw new Error("New CTE name cannot be empty");let i=Ke.findLexemeAtLineColumn(e,t);if(!i)throw new Error(`No CTE name found at line ${t.line}, column ${t.column}`);let r=i.value,s=L.parse(e);if(!this.isCTENameInQuery(s,r))throw new Error(`'${r}' is not a CTE name in this query`);if(!(i.type&2112))throw new Error(`Token at position is not a CTE name: '${i.value}'`);let o=this.checkNameConflicts(s,n,r);if(o.length>0)throw new Error(o.join(", "));return this.renameCTE(s,r,n),new Ae().format(s).formattedSql}checkNameConflicts(e,t,n){let i=[];return n===t||(i.push(...this.checkKeywordConflicts(t)),this.isCTENameInQuery(e,t)&&i.push(`CTE name '${t}' already exists`)),i}checkKeywordConflicts(e){let t=[];try{let n=this.keywordParser.parse(e,0);n!==null&&n.keyword.toLowerCase()===e.toLowerCase()&&t.push(`'${e}' is a reserved SQL keyword and should not be used as a CTE name`)}catch(n){console.warn(`Failed to check keyword conflicts for '${e}':`,n),this.isBasicReservedKeyword(e)&&t.push(`'${e}' is a reserved SQL keyword and should not be used as a CTE name`)}return t}isBasicReservedKeyword(e){return["select","from","where","with","as","union","join","table","null"].includes(e.toLowerCase())}isCTENameInQuery(e,t){return e instanceof f&&e.withClause?e.withClause.tables.some(n=>n.aliasExpression&&n.aliasExpression.table&&n.aliasExpression.table.name===t):e instanceof F?this.isCTENameInQuery(e.left,t)||this.isCTENameInQuery(e.right,t):!1}};var Nt={invalidSql:"Invalid SQL: unable to parse query",invalidPosition:"Invalid position: line or column out of bounds",noLexemeAtPosition:"No lexeme found at the specified position",notAnAlias:"Selected lexeme is not a valid alias",invalidNewName:"New alias name must be a non-empty string",sameNames:"Old and new alias names cannot be the same",nameConflict:a=>`Alias '${a}' already exists in this scope`,aliasNotFound:a=>`Alias '${a}' not found in current scope`},en=class{constructor(){this.keywordParser=new ke(Jt)}renameAlias(e,t,n,i={}){try{this.validateInputs(e,t,n);let r=Ke.findLexemeAtLineColumn(e,t);if(!r)throw new Error(Nt.noLexemeAtPosition);this.validateLexemeIsAlias(r);let s=L.parse(e),o=this.detectAliasScope(e,s,r,i.scopeType),l=this.collectAliasReferences(o,r.value),u=this.checkNameConflicts(o,n,r.value);if(u.length>0)return{success:!1,originalSql:e,changes:[],conflicts:u,scope:o};let c=this.prepareChanges(l,n);if(i.dryRun)return{success:!0,originalSql:e,changes:c,conflicts:u,scope:o};let p=this.performLexemeBasedRename(e,r.value,n,o);return{success:!0,originalSql:e,newSql:p,changes:c,scope:o}}catch(r){return{success:!1,originalSql:e,changes:[],conflicts:[r instanceof Error?r.message:String(r)]}}}validateInputs(e,t,n){if(!e||typeof e!="string"||e.trim()==="")throw new Error(Nt.invalidSql);if(!t||typeof t.line!="number"||typeof t.column!="number"||t.line<1||t.column<1)throw new Error(Nt.invalidPosition);if(!n||typeof n!="string"||n.trim()==="")throw new Error(Nt.invalidNewName)}validateLexemeIsAlias(e){if(!(e.type&64))throw new Error(Nt.notAnAlias)}detectAliasScope(e,t,n,i){if(!n.position)return{type:"main",query:t,startPosition:0,endPosition:e.length};let r=n.position.startPosition;return i&&i!=="auto"?this.createScopeForType(i,e,t,r):this.autoDetectScope(e,t,r)}createScopeForType(e,t,n,i){switch(e){case"cte":return this.detectCTEScope(t,n,i);case"subquery":return this.detectSubqueryScope(t,n,i);case"main":default:return{type:"main",query:n,startPosition:0,endPosition:t.length}}}autoDetectScope(e,t,n){let i=this.detectCTEScope(e,t,n);if(i.type==="cte")return i;let r=this.detectSubqueryScope(e,t,n);return r.type==="subquery"?r:{type:"main",query:t,startPosition:0,endPosition:e.length}}detectCTEScope(e,t,n){try{let i=ut.analyzeCursorPosition(e,n);if(i.isInCTE&&i.cteRegion){let r=this.findCTEQueryByName(t,i.cteRegion.name);return{type:"cte",name:i.cteRegion.name,query:r||t,startPosition:i.cteRegion.startPosition,endPosition:i.cteRegion.endPosition}}}catch(i){console.warn("CTE scope detection failed:",i)}return{type:"main",query:t,startPosition:0,endPosition:e.length}}detectSubqueryScope(e,t,n){return{type:"main",query:t,startPosition:0,endPosition:e.length}}findCTEQueryByName(e,t){if(e instanceof f&&e.withClause?.tables){for(let n of e.withClause.tables)if(n.aliasExpression.table.name===t)return n.query}else if(e instanceof F){let n=this.findCTEQueryByName(e.left,t);if(n)return n;let i=this.findCTEQueryByName(e.right,t);if(i)return i}return null}collectAliasReferences(e,t){let n=[];try{let i=this.collectTableAliasReferences(e,t);n.push(...i);let r=this.collectColumnAliasReferences(e,t);n.push(...r)}catch(i){console.warn(`Failed to collect alias references for '${t}':`,i)}return n}collectTableAliasReferences(e,t){let n=[];try{let r=new Ge(!0).collect(e.query);for(let s of r)if(s.getSourceName()===t){let l=this.createLexemeFromTableSource(s,t);l&&n.push({lexeme:l,scope:e,referenceType:"definition",context:"table"})}}catch(i){console.warn(`Failed to collect table alias references for '${t}':`,i)}return n}collectColumnAliasReferences(e,t){let n=[];try{let r=new Pt().collect(e.query);for(let s of r)if(s.namespaces&&s.namespaces.length>0){for(let o of s.namespaces)if(o.name===t){let l=this.createLexemeFromNamespace(o,t);l&&n.push({lexeme:l,scope:e,referenceType:"usage",context:"column"})}}}catch(i){console.warn(`Failed to collect column alias references for '${t}':`,i)}return n}createLexemeFromTableSource(e,t){try{return{type:64,value:t,comments:null,position:{startPosition:0,endPosition:t.length}}}catch(n){return console.warn("Failed to create lexeme from table source:",n),null}}createLexemeFromNamespace(e,t){try{return{type:64,value:t,comments:null,position:{startPosition:0,endPosition:t.length}}}catch(n){return console.warn("Failed to create lexeme from namespace:",n),null}}checkNameConflicts(e,t,n){let i=[];if(t.toLowerCase()===n.toLowerCase())return i.push(Nt.sameNames),i;try{let r=this.checkTableAliasConflicts(e,t);i.push(...r);let s=this.checkKeywordConflicts(t);i.push(...s)}catch(r){console.warn(`Error during conflict detection for '${t}':`,r),i.push(`Unable to verify conflicts for name '${t}'`)}return i}checkTableAliasConflicts(e,t){let n=[];try{let r=new Ge(!0).collect(e.query);for(let s of r){let o=s.getSourceName();if(o&&o.toLowerCase()===t.toLowerCase()){n.push(Nt.nameConflict(t));continue}let l=this.extractTableName(s);l&&l.toLowerCase()===t.toLowerCase()&&n.push(`'${t}' conflicts with table name in this scope`)}}catch(i){console.warn(`Failed to check table alias conflicts for '${t}':`,i)}return n}extractTableName(e){try{if(e.qualifiedName&&e.qualifiedName.name){let t=e.qualifiedName.name;if(typeof t=="string")return t;if(t.name&&typeof t.name=="string")return t.name;if(t.value&&typeof t.value=="string")return t.value}return e.table&&typeof e.table=="string"?e.table:null}catch(t){return console.warn("Failed to extract table name from table source:",t),null}}checkKeywordConflicts(e){let t=[];if(this.isBasicReservedKeyword(e))return t.push(`'${e}' is a reserved SQL keyword and should not be used as an alias`),t;try{let n=this.keywordParser.parse(e,0);n!==null&&n.keyword.toLowerCase()===e.toLowerCase()&&t.push(`'${e}' is a reserved SQL keyword and should not be used as an alias`)}catch(n){console.warn(`Failed to check keyword conflicts for '${e}':`,n)}return t}isBasicReservedKeyword(e){return["select","from","where","join","table","null","and","or"].includes(e.toLowerCase())}prepareChanges(e,t){return e.map(n=>({oldName:n.lexeme.value,newName:t,position:Ke.charOffsetToLineColumn("",n.lexeme.position?.startPosition||0)||{line:1,column:1},context:n.context,referenceType:n.referenceType}))}performLexemeBasedRename(e,t,n,i){try{let s=Ke.getAllLexemesWithPosition(e).filter(l=>l.value===t&&l.position&&l.position.startPosition>=i.startPosition&&l.position.endPosition<=i.endPosition&&l.type&64);if(s.length===0)return e;s.sort((l,u)=>u.position.startPosition-l.position.startPosition);let o=e;for(let l of s){let u=l.position;o=o.substring(0,u.startPosition)+n+o.substring(u.endPosition)}return o}catch(r){throw console.error("Failed to perform lexeme-based rename:",r),new Error(`Unable to rename alias using lexeme approach: ${r instanceof Error?r.message:String(r)}`)}}};var tn=class{renameIdentifiers(e,t){if(t.size===0)return e;let n=e;for(let[i,r]of t)n=this.replaceIdentifierSafely(n,i,r);return n}renameIdentifier(e,t,n){return this.replaceIdentifierSafely(e,t,n)}renameIdentifierInScope(e,t,n,i){if(!i)return this.replaceIdentifierSafely(e,t,n);let r=e.slice(0,i.start),s=e.slice(i.start,i.end),o=e.slice(i.end),l=this.replaceIdentifierSafely(s,t,n);return r+l+o}checkRenameability(e,t){let n=this.positionToCharIndex(e,t);if(this.isInsideStringLiteral(e,n))return{canRename:!1,reason:"Cannot rename identifiers inside string literal"};let i=this.getIdentifierAtPosition(e,n);if(!i)return{canRename:!1,reason:"No identifier found at position"};let r=this.determineIdentifierType(e,n,i),s=this.calculateScopeRange(e,n,r);return{canRename:!0,currentName:i,type:r,scopeRange:s}}renameAtPosition(e,t,n){let i=this.checkRenameability(e,t);if(!i.canRename||!i.currentName)throw new Error(i.reason||"Cannot rename at this position");return this.renameIdentifierInScope(e,i.currentName,n,i.scopeRange)}positionToCharIndex(e,t){let n=e.split(`
25
+ `),i=0;for(let r=0;r<t.line-1&&r<n.length;r++)i+=n[r].length+1;return i+=t.column-1,Math.min(i,e.length-1)}isInsideStringLiteral(e,t){let n=!1;for(let i=0;i<t&&i<e.length;i++)e[i]==="'"&&(n=!n);return n}getIdentifierAtPosition(e,t){if(t>=e.length)return null;let n=t;for(;n>0&&this.isIdentifierChar(e.charCodeAt(n-1));)n--;let i=t;for(;i<e.length&&this.isIdentifierChar(e.charCodeAt(i));)i++;return n===i?null:e.slice(n,i)}determineIdentifierType(e,t,n){let i=e.slice(0,t),r=e.slice(t),s=i.toUpperCase(),o=r.toUpperCase();if(s.lastIndexOf("WITH")!==-1){let v=t;for(;v>0&&this.isIdentifierChar(e.charCodeAt(v-1));)v--;let h=t;for(;h<e.length&&this.isIdentifierChar(e.charCodeAt(h));)h++;if(e.slice(h).toUpperCase().trim().startsWith("AS ("))return"cte"}let u=i.split(`
26
+ `),c=u[u.length-1].toUpperCase();if(c.includes("FROM ")||c.includes("JOIN "))return"table_alias";let p=i.slice(Math.max(0,t-50)),m=r.slice(0,50),C=(p+n+m).toUpperCase();return C.includes(" AS "+n.toUpperCase())||C.includes(" "+n.toUpperCase()+" ON")||C.includes(" "+n.toUpperCase()+`
27
+ `),"table_alias"}calculateScopeRange(e,t,n){if(n==="cte")return{start:0,end:e.length};let i=e.slice(0,t),r=e.slice(t),s=i.toUpperCase().lastIndexOf("SELECT"),o=s!==-1?s:0,l=r.search(/\b(SELECT|WITH|UNION)\b/i),u=l!==-1?t+l:e.length;return{start:o,end:u}}replaceIdentifierSafely(e,t,n){if(t===n||t.length===0)return e;let i=[],r=0,s=e.length,o=t.length;for(;r<s;){let l=e[r],u=l.charCodeAt(0);if(u===34||u===96||u===91){let{content:c,nextPosition:p}=this.extractAndReplaceQuotedIdentifier(e,r,l,t,n);i.push(c),r=p;continue}if(u===39){let{content:c,nextPosition:p}=this.extractQuotedString(e,r,l);i.push(c),r=p;continue}if(u===45&&r+1<s&&e.charCodeAt(r+1)===45){let{content:c,nextPosition:p}=this.extractLineComment(e,r);i.push(c),r=p;continue}if(u===47&&r+1<s&&e.charCodeAt(r+1)===42){let{content:c,nextPosition:p}=this.extractBlockComment(e,r);i.push(c),r=p;continue}if(this.isIdentifierStartChar(u)&&this.matchesIdentifierAt(e,r,t)){let c=r-1,p=r+o,m=c>=0?e[c]:null,C=p<s?e[p]:null;if(this.hasValidWordBoundaries(m,C)){i.push(n),r+=o;continue}}i.push(l),r++}return i.join("")}validateRename(e,t,n,i){if(e===t||!t.includes(i))return!1;let r=this.countWordOccurrences(e,n);return this.countWordOccurrences(t,n)<r}extractAndReplaceQuotedIdentifier(e,t,n,i,r){if(n==="[")return this.extractAndReplaceBracketedIdentifier(e,t,i,r);let s=[n],o=t+1,l=o;for(;o<e.length;){let u=e[o];if(u===n){if(o+1<e.length&&e[o+1]===n){s.push(u),s.push(e[o+1]),o+=2;continue}let c=e.slice(l,o);c.toLowerCase()===i.toLowerCase()?s.push(r):s.push(c),s.push(u);break}o++}return{content:s.join(""),nextPosition:o+1}}extractAndReplaceBracketedIdentifier(e,t,n,i){let r=["["],s=t+1,o=s;for(;s<e.length;){let l=e[s];if(l==="]"){let u=e.slice(o,s);u.toLowerCase()===n.toLowerCase()?r.push(i):r.push(u),r.push(l);break}s++}return{content:r.join(""),nextPosition:s+1}}extractQuotedString(e,t,n){let i=[n],r=t+1;for(;r<e.length;){let s=e[r];if(i.push(s),s===n){if(r+1<e.length&&e[r+1]===n){i.push(e[r+1]),r+=2;continue}break}r++}return{content:i.join(""),nextPosition:r+1}}extractLineComment(e,t){let n=[],i=t;for(;i<e.length&&e.charCodeAt(i)!==10&&e.charCodeAt(i)!==13;)n.push(e[i]),i++;return i<e.length&&(e.charCodeAt(i)===10||e.charCodeAt(i)===13)&&(n.push(e[i]),i++),{content:n.join(""),nextPosition:i}}extractBlockComment(e,t){let n=["/","*"],i=t+2;for(;i<e.length-1;){let r=e[i];if(n.push(r),r==="*"&&e[i+1]==="/"){n.push("/"),i+=2;break}i++}return{content:n.join(""),nextPosition:i}}isIdentifierStartChar(e){return e>=65&&e<=90||e>=97&&e<=122||e===95}isIdentifierChar(e){return e>=65&&e<=90||e>=97&&e<=122||e>=48&&e<=57||e===95}matchesIdentifierAt(e,t,n){if(t+n.length>e.length)return!1;for(let i=0;i<n.length;i++){let r=e.charCodeAt(t+i),s=n.charCodeAt(i),o=r>=65&&r<=90?r+32:r,l=s>=65&&s<=90?s+32:s;if(o!==l)return!1}return!0}hasValidWordBoundaries(e,t){let n=e===null||!this.isIdentifierChar(e.charCodeAt(0)),i=t===null||!this.isIdentifierChar(t.charCodeAt(0));return n&&i}countWordOccurrences(e,t){let n=0,i=0,r=e.length,s=t.length;for(;i<=r-s;){if(this.matchesIdentifierAt(e,i,t)){let o=i-1,l=i+s,u=o>=0?e[o]:null,c=l<r?e[l]:null;this.hasValidWordBoundaries(u,c)&&n++}i++}return n}};var vi=class{constructor(){this.cteRenamer=new Zt,this.aliasRenamer=new en,this.identifierRenamer=new tn}isRenameable(e,t){try{if(!e?.trim())return{renameable:!1,renamerType:"none",reason:"Empty SQL"};if(!t||t.line<1||t.column<1)return{renameable:!1,renamerType:"none",reason:"Invalid position"};let n=Ke.findLexemeAtLineColumn(e,t);if(!n)return{renameable:!1,renamerType:"none",reason:"No token found"};if(!(n.type&2112))return{renameable:!1,renamerType:"none",tokenName:n.value,reason:`Token '${n.value}' is not an identifier`};let i=n.value,r=this.detectRenamerType(e,i);return r==="unknown"?{renameable:!1,renamerType:"none",tokenName:i,reason:`Cannot determine if '${i}' is renameable`}:{renameable:!0,renamerType:r,tokenName:i}}catch(n){return{renameable:!1,renamerType:"none",reason:`Error: ${n instanceof Error?n.message:String(n)}`}}}rename(e,t,n,i){try{if(!e?.trim())return this.createErrorResult(e,n,"unknown","","SQL cannot be empty");if(!t||t.line<1||t.column<1)return this.createErrorResult(e,n,"unknown","","Position must be valid line/column (1-based)");if(!n?.trim())return this.createErrorResult(e,n,"unknown","","New name cannot be empty");let r=Ke.findLexemeAtLineColumn(e,t);if(!r)return this.createErrorResult(e,n,"unknown","",`No identifier found at line ${t.line}, column ${t.column}`);if(!(r.type&64))return this.createErrorResult(e,n,"unknown",r.value,`Token '${r.value}' is not renameable`);let s=r.value,o=i?.preserveFormatting??!1,l=this.detectRenamerType(e,s);if(o)try{let u=this.attemptFormattingPreservationRename(e,t,n,s,l);if(u.success)return u}catch(u){console.warn("Formatting preservation failed, falling back to standard rename:",u)}try{let u;if(l==="cte")u=this.cteRenamer.renameCTEAtPosition(e,t,n);else if(l==="alias"){let c=this.aliasRenamer.renameAlias(e,t,n);if(!c.success)return{success:!1,originalSql:e,renamerType:"alias",originalName:s,newName:n,error:c.conflicts?.join(", ")||"Alias rename failed",formattingPreserved:!1,formattingMethod:"smart-renamer-only"};u=c.newSql}else return this.createErrorResult(e,n,"unknown",s,`Cannot determine if '${s}' is a CTE name or table alias`);return{success:!0,originalSql:e,newSql:u,renamerType:l,originalName:s,newName:n,formattingPreserved:!1,formattingMethod:"smart-renamer-only"}}catch(u){return this.createErrorResult(e,n,l,s,`${l.toUpperCase()} rename failed: ${u instanceof Error?u.message:String(u)}`)}}catch(r){return this.createErrorResult(e,n,"unknown","",`Unexpected error: ${r instanceof Error?r.message:String(r)}`)}}detectRenamerType(e,t){try{let n=L.parse(e);return this.isCTEName(n,t)?"cte":"alias"}catch{return"unknown"}}isCTEName(e,t){return e instanceof f&&e.withClause?e.withClause.tables.some(n=>n.aliasExpression&&n.aliasExpression.table&&n.aliasExpression.table.name===t):e instanceof F?this.isCTEName(e.left,t)||this.isCTEName(e.right,t):!1}attemptFormattingPreservationRename(e,t,n,i,r){let s=this.performStandardRename(e,t,n,i,r);if(!s.success)return{...s,formattingPreserved:!1,formattingMethod:"smart-renamer-only"};let o=new Map([[i,n]]);try{let l=this.identifierRenamer.renameIdentifiers(e,o);if(this.validateRenameResult(e,l,i,n))return{success:!0,originalSql:e,newSql:l,renamerType:r,originalName:i,newName:n,formattingPreserved:!0,formattingMethod:"sql-identifier-renamer"};throw new Error("Validation failed: rename may not have been applied correctly")}catch{return{...s,formattingPreserved:!1,formattingMethod:"smart-renamer-only"}}}performStandardRename(e,t,n,i,r){try{let s;if(r==="cte")s=this.cteRenamer.renameCTEAtPosition(e,t,n);else if(r==="alias"){let o=this.aliasRenamer.renameAlias(e,t,n);if(!o.success)return{success:!1,originalSql:e,renamerType:"alias",originalName:i,newName:n,error:o.conflicts?.join(", ")||"Alias rename failed"};s=o.newSql}else return{success:!1,originalSql:e,renamerType:"unknown",originalName:i,newName:n,error:`Cannot determine if '${i}' is a CTE name or table alias`};return{success:!0,originalSql:e,newSql:s,renamerType:r,originalName:i,newName:n}}catch(s){return{success:!1,originalSql:e,renamerType:r,originalName:i,newName:n,error:`${r.toUpperCase()} rename failed: ${s instanceof Error?s.message:String(s)}`}}}validateRenameResult(e,t,n,i){if(e===t||!t.includes(i))return!1;let r=this.countWordOccurrences(e,n);return this.countWordOccurrences(t,n)<r}countWordOccurrences(e,t){let n=new RegExp(`\\b${t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}\\b`,"gi"),i=e.match(n);return i?i.length:0}createErrorResult(e,t,n,i,r){return{success:!1,originalSql:e,renamerType:n,originalName:i,newName:t,error:r,formattingPreserved:!1,formattingMethod:"smart-renamer-only"}}batchRename(e,t,n){if(n?.preserveFormatting??!1)try{let r=new Map(Object.entries(t)),s=this.identifierRenamer.renameIdentifiers(e,r),o=Object.keys(t),l=Object.values(t);return{success:!0,originalSql:e,newSql:s,renamerType:"alias",originalName:o.join(", "),newName:l.join(", "),formattingPreserved:!0,formattingMethod:"sql-identifier-renamer"}}catch(r){return{success:!1,originalSql:e,renamerType:"unknown",originalName:Object.keys(t).join(", "),newName:Object.values(t).join(", "),error:`Batch rename failed: ${r instanceof Error?r.message:String(r)}`,formattingPreserved:!1,formattingMethod:"smart-renamer-only"}}else return{success:!1,originalSql:e,renamerType:"unknown",originalName:Object.keys(t).join(", "),newName:Object.values(t).join(", "),error:"Batch rename without formatting preservation not implemented. Use individual renames or enable formatting preservation.",formattingPreserved:!1,formattingMethod:"smart-renamer-only"}}};var wi=class{restore(e){if(e.length===0)return"";let t="";for(let n of e)t+=n.value,n.followingWhitespace&&(t+=n.followingWhitespace);return t}restoreWithComments(e,t=!0){if(e.length===0)return"";let n="";for(let i of e){if(n+=i.value,t&&i.inlineComments&&i.inlineComments.length>0)for(let r of i.inlineComments)r.trim().length>0&&(n+=` -- ${r}`);i.followingWhitespace&&(n+=i.followingWhitespace)}return n}analyzeFormatting(e){let t=0,n=0,i=0,r=0,s=0,o=0;for(let u of e){if(u.followingWhitespace){t+=u.followingWhitespace.length;let c=u.followingWhitespace.split(`
28
+ `);for(let p=1;p<c.length;p++){let m=c[p],C=m.match(/^ */)?.[0].length||0,v=m.match(/^\t*/)?.[0].length||0;(C>0||v>0)&&(s++,o+=C+v*4,i+=C,r+=v)}}u.inlineComments&&(n+=u.inlineComments.length)}let l="none";return i>0&&r>0?l="mixed":i>0?l="spaces":r>0&&(l="tabs"),{totalWhitespace:t,totalComments:n,indentationStyle:l,averageIndentSize:s>0?o/s:0}}validateFormattingLexemes(e){let t=[];for(let n=0;n<e.length;n++){let i=e[n];i.position||t.push(`Lexeme ${n} missing position information`),i.followingWhitespace===void 0&&t.push(`Lexeme ${n} missing followingWhitespace property`),i.inlineComments===void 0&&t.push(`Lexeme ${n} missing inlineComments property`),i.position&&i.position.startPosition>=i.position.endPosition&&t.push(`Lexeme ${n} has invalid position range`)}return{isValid:t.length===0,issues:t}}};var ti=class a{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 i=[e],r=e.aliasExpression.table.name,s=this.collectAndSortObjectEntities(n,t),o=this.groupEntitiesByDepth(s),l=Array.from(o.keys()).sort((u,c)=>c-u);for(let u of l){let c=o.get(u),p=`${a.CTE_OBJECT_PREFIX}${u}`,m=this.buildDepthCte(c,r,p,n,t);i.push(m),r=p}return{ctes:i,lastCteAlias:r,columnMappings:this.columnMappings}}generateUniqueJsonColumnName(e,t,n){this.jsonColumnCounter++;let i=`${e.toLowerCase()}_json_${this.jsonColumnCounter}`;return this.columnMappings.push({entityId:t,entityName:e,generatedColumnName:i,depth:n}),i}collectAndSortObjectEntities(e,t){let n=[],i=r=>{let s=t.get(r);if(!s)throw new Error(`Entity ${r} not found for depth calculation.`);if(s.isRoot)return 0;if(!s.parentId)return 1;let o=s.parentId,l=0,u=new Set;for(u.add(r);o;){if(u.has(o))throw new Error(`Circular dependency detected: ${o} already visited in path for ${r}`);u.add(o);let c=t.get(o);if(!c)throw new Error(`Parent entity ${o} not found during depth calculation for ${r}`);let p=!1;if(c.isRoot)p=!0;else{let m=e.nestedEntities.find(C=>C.id===o);if(m)m.relationshipType==="object"&&(p=!0);else throw new Error(`Parent entity ${o} (ancestor of ${r}) has no definition in mapping.nestedEntities and is not root.`)}if(p&&l++,c.isRoot)break;o=c.parentId}return l};return e.nestedEntities.forEach(r=>{if(r.relationshipType==="object"){let s=t.get(r.id);s&&!s.isRoot&&n.push({entity:s,depth:i(r.id)})}}),n}groupEntitiesByDepth(e){let t=new Map;return e.forEach(n=>{let i=n.depth;t.has(i)||t.set(i,[]),t.get(i).push(n)}),t}buildDepthCte(e,t,n,i,r){let s=[new z(new b(null,new k(a.WILDCARD_COLUMN)))];for(let{entity:l}of e){let u=this.buildEntityJsonColumn(l,i,r);s.push(u)}let o=new f({selectClause:new _(s),fromClause:new K(new V(new Q(null,new k(t)),null),null)});return new ie(o,new re(n,null),null)}buildEntityJsonColumn(e,t,n){let{jsonObjectArgs:i,nullChecks:r}=this.prepareEntityColumns(e);this.addChildObjectRelationships(e,i,t,n);let s=this.createJsonObject(i),o=this.buildNullCondition(r),l=this.createCaseExpression(o,s),u=this.calculateApproximateDepth(e,t),c=this.generateUniqueJsonColumnName(e.name,e.id,u);return this.entityToJsonColumnMap.set(e.id,c),new z(l,c)}calculateApproximateDepth(e,t){if(e.isRoot)return 0;if(!e.parentId)return 1;let n=1,i=e.parentId;for(;i&&i!==t.rootEntity.id;){let r=t.nestedEntities.find(s=>s.id===i);if(!r)break;n++,i=r.parentId}return n}prepareEntityColumns(e){let t=[],n=[];return Object.entries(e.columns).forEach(([i,r])=>{t.push(new X(i)),t.push(new b(null,new k(r))),n.push(new w(new b(null,new k(r)),"is",new X(null)))}),{jsonObjectArgs:t,nullChecks:n}}addChildObjectRelationships(e,t,n,i){n.nestedEntities.filter(s=>s.parentId===e.id&&s.relationshipType==="object").forEach(s=>{let o=i.get(s.id);if(o){t.push(new X(s.propertyName));let l=this.entityToJsonColumnMap.get(o.id);if(!l)throw new Error(`JSON column name not found for child entity: ${o.id}`);t.push(new b(null,new k(l)))}})}createJsonObject(e){let t="jsonb_build_object";return new U(null,new B(t),new j(e),null)}buildNullCondition(e){return e.reduce((t,n)=>t?new w(t,"and",n):n)}createCaseExpression(e,t){return new ne(null,new Ee([new xe(e,new X(null))],t))}};var ni=class a{static{this.CTE_ARRAY_PREFIX="cte_array_depth_"}static{this.JSON_FUNCTIONS={BUILD_OBJECT:"jsonb_build_object",AGGREGATE:"jsonb_agg"}}buildArrayEntityCtes(e,t,n,i,r){let s=[...e],o=t,l=this.collectAndSortArrayEntities(i,n);if(l.length===0)return{updatedCtes:s,lastCteAlias:o};let u=this.groupEntitiesByDepth(l),c=Array.from(u.keys()).sort((p,m)=>m-p);for(let p of c){let m=u.get(p),{cte:C,newCteAlias:v}=this.buildDepthCte(m,o,s,p,i,r);s.push(C),o=v}return{updatedCtes:s,lastCteAlias:o}}collectAndSortArrayEntities(e,t){let n=[],i=r=>{let s=t.get(r);return!s||s.isRoot?0:s.parentId?1+i(s.parentId):1};return e.nestedEntities.forEach(r=>{if(r.relationshipType==="array"){let s=t.get(r.id),o=t.get(r.parentId);if(!s||!o)throw new Error(`Configuration error: Array entity '${r.id}' or its parent '${r.parentId}' not found.`);let l=Object.values(o.columns);if(l.length===0)throw new Error(`Configuration error: Parent entity '${o.name}' (ID: ${o.id}) must have at least one column defined to serve as a linking key for child array '${r.name}'.`);let u=l[0];n.push({entity:s,parentEntity:o,parentIdColumnSqlName:u,depth:i(r.id)})}}),n.sort((r,s)=>s.depth-r.depth),n}groupEntitiesByDepth(e){let t=new Map;return e.forEach(n=>{let i=n.depth;t.has(i)||t.set(i,[]),t.get(i).push(n)}),t}buildDepthCte(e,t,n,i,r,s){let o=new Set;e.forEach(x=>{Object.values(x.entity.columns).forEach(P=>o.add(P));let y=P=>{r.nestedEntities.filter(T=>T.parentId===P).forEach(T=>{Object.values(T.columns).forEach(D=>{let E=typeof D=="string"?D:D.column;o.add(E)}),y(T.id)})};y(x.entity.id)});let l=n.find(x=>x.aliasExpression.table.name===t)?.query;if(!l)throw new Error(`CTE not found: ${t}`);let u=new We(null,n).collect(l),c=[],p=[],m=new Set;e.forEach(x=>{Object.values(x.entity.columns).forEach(y=>m.add(y))});let C=this.collectArrayEntityColumnsByDepth(r,i),v=new Set;s&&e.forEach(x=>{r.nestedEntities.filter(y=>y.parentId===x.entity.id&&y.relationshipType==="object").forEach(y=>{let P=s.find(T=>T.entityId===y.id);P&&v.add(P.generatedColumnName)})}),this.processSelectVariablesForGroupBy(u,o,C,i,p,c,v);for(let x of e){let y=this.buildAggregationDetailsForArrayEntity(x.entity,r.nestedEntities,new Map,s);p.push(new z(y.jsonAgg,x.entity.propertyName))}let h=`${a.CTE_ARRAY_PREFIX}${i}`,M=new f({selectClause:new _(p),fromClause:new K(new V(new Q(null,new k(t)),null),null),groupByClause:c.length>0?new he(c):null});return{cte:new ie(M,new re(h,null),null),newCteAlias:h}}buildAggregationDetailsForArrayEntity(e,t,n,i){let r=a.JSON_FUNCTIONS.BUILD_OBJECT,s=[];Object.entries(e.columns).forEach(([m,C])=>{s.push(new X(m)),s.push(new b(null,new k(C)))}),t.filter(m=>m.parentId===e.id).forEach(m=>{let C=m.originalPropertyName||m.propertyName;if(s.push(new X(C)),m.relationshipType==="object"){if(!i)throw new Error(`\u274C PostgresArrayEntityCteBuilder Error: Column mappings not provided
21
29
 
22
30
  \u{1F50D} Details:
23
- - Entity ID: ${h.id}
24
- - Entity Name: ${h.name||"unknown"}
25
- - Property Name: ${h.propertyName}
26
- - Relationship Type: ${h.relationshipType}
31
+ - Entity ID: ${m.id}
32
+ - Entity Name: ${m.name||"unknown"}
33
+ - Property Name: ${m.propertyName}
34
+ - Relationship Type: ${m.relationshipType}
27
35
 
28
36
  \u{1F4A1} Solution:
29
37
  Column mappings are required for hybrid JSON column naming.
@@ -33,16 +41,16 @@ ${e}`}getCTEName(e){return e.aliasExpression.table.name}};var Kt=class{construct
33
41
  \u{1F527} Check:
34
42
  1. Ensure PostgresJsonQueryBuilder.buildJsonWithCteStrategy() passes columnMappings
35
43
  2. Verify PostgresObjectEntityCteBuilder.buildObjectEntityCtes() returns columnMappings
36
- 3. Check that Model-driven mapping conversion generates unique entity IDs`);let E=i.find(d=>d.entityId===h.id);if(!E){let d=i.map(g=>`${g.entityId} \u2192 ${g.generatedColumnName}`).join(", ");throw new Error(`\u274C PostgresArrayEntityCteBuilder Error: Column mapping not found
44
+ 3. Check that Model-driven mapping conversion generates unique entity IDs`);let v=i.find(h=>h.entityId===m.id);if(!v){let h=i.map(M=>`${M.entityId} \u2192 ${M.generatedColumnName}`).join(", ");throw new Error(`\u274C PostgresArrayEntityCteBuilder Error: Column mapping not found
37
45
 
38
46
  \u{1F50D} Details:
39
- - Looking for Entity ID: ${h.id}
40
- - Entity Name: ${h.name||"unknown"}
41
- - Property Name: ${h.propertyName}
42
- - Relationship Type: ${h.relationshipType}
47
+ - Looking for Entity ID: ${m.id}
48
+ - Entity Name: ${m.name||"unknown"}
49
+ - Property Name: ${m.propertyName}
50
+ - Relationship Type: ${m.relationshipType}
43
51
 
44
52
  \u{1F4CB} Available Mappings:
45
- ${d||"None"}
53
+ ${h||"None"}
46
54
 
47
55
  \u{1F4A1} Solution:
48
56
  Entity IDs must match between mapping generation and usage.
@@ -51,14 +59,14 @@ ${e}`}getCTEName(e){return e.aliasExpression.table.name}};var Kt=class{construct
51
59
  \u{1F527} Check:
52
60
  1. Model-driven mapping conversion generates consistent entity IDs
53
61
  2. PostgresObjectEntityCteBuilder processes all entities correctly
54
- 3. Entity hierarchy and parentId relationships are correct`)}s.push(new v(null,new x(E.generatedColumnName)))}else h.relationshipType==="array"&&s.push(new v(null,new x(h.propertyName)))});let l=new D(null,new R(r),new q(s),null),u=o.JSON_FUNCTIONS.AGGREGATE,c=Object.values(e.columns)[0];return{jsonAgg:new D(null,new R(u),new q([l]),null)}}collectArrayEntityColumnsByDepth(e,t){let n=new Map,i=Math.max(t+3,5);for(let r=t;r<=i;r++)n.set(r,new Set);return e.nestedEntities.filter(r=>r.relationshipType==="array").forEach(r=>{let s=this.calculateEntityDepth(r,e);n.has(s)||n.set(s,new Set),this.addEntityColumnsToDepthSet(r,s,n),this.collectDescendantColumns(r.id,s,e,n)}),n}calculateEntityDepth(e,t){let n=0,i=e;for(;i.parentId&&i.parentId!==t.rootEntity.id;)n++,i=t.nestedEntities.find(r=>r.id===i.parentId)||i;return n}addEntityColumnsToDepthSet(e,t,n){Object.values(e.columns).forEach(i=>{let r=typeof i=="string"?i:i.column;n.get(t).add(r)})}collectDescendantColumns(e,t,n,i){n.nestedEntities.filter(r=>r.parentId===e).forEach(r=>{this.addEntityColumnsToDepthSet(r,t,i),this.collectDescendantColumns(r.id,t,n,i)})}processSelectVariablesForGroupBy(e,t,n,i,r,s,a){e.forEach(l=>{if(!t.has(l.name)){if(a&&a.has(l.name))return;this.shouldIncludeColumnInGroupBy(l.name,n,i)&&(r.push(new K(new v(null,new x(l.name)),l.name)),l.name.endsWith("_json")||s.push(new v(null,new x(l.name))))}})}shouldIncludeColumnInGroupBy(e,t,n){let i=e.endsWith("_json"),r=!0;for(let[s,a]of t.entries())if(s>=n&&a.has(e)){r=!1;break}return i&&e.startsWith("entity_")&&(r=this.shouldIncludeJsonColumn(e,n)),r}shouldIncludeJsonColumn(e,t){let n=e.match(/entity_(\d+)_json/);return n&&t>0?parseInt(n[1])<=2:!0}};var _t=class{constructor(){this.selectValueCollector=new Oe(null),this.objectEntityCteBuilder=new _n,this.arrayEntityCteBuilder=new zn}validateMapping(e,t){let i=new Oe().collect(e),r=new Set(i.map(u=>u.name));for(let u in t.rootEntity.columns){let c=t.rootEntity.columns[u],p=typeof c=="string"?c:c.column;if(!r.has(p))throw new Error(`Validation Error: Column "${p}" for JSON key "${u}" in root entity "${t.rootEntity.name}" not found in the query's select list.`)}let s=new Set([t.rootEntity.id]),a=new Map;t.nestedEntities.forEach(u=>{s.add(u.id),a.has(u.parentId)||a.set(u.parentId,[]),a.get(u.parentId).push(u.id)});for(let u of t.nestedEntities){if(!s.has(u.parentId))throw new Error(`Validation Error: Parent entity with ID "${u.parentId}" for nested entity "${u.name}" (ID: ${u.id}) not found.`);for(let c in u.columns){let p=u.columns[c],h=typeof p=="string"?p:p.column;if(!r.has(h))throw new Error(`Validation Error: Column "${h}" for JSON key "${c}" in nested entity "${u.name}" (ID: ${u.id}) not found in the query's select list.`)}}let l=new Set([t.rootEntity.id,...t.nestedEntities.map(u=>u.parentId)]);for(let u of l){let c=t.nestedEntities.filter(w=>w.parentId===u);if(c.filter(w=>w.relationshipType==="array").length>1){let w=u===t.rootEntity.id?t.rootEntity.name:t.nestedEntities.find(E=>E.id===u)?.name;throw new Error(`Validation Error: Parent entity "${w}" (ID: ${u}) has multiple direct array children. This is not supported.`)}let h=new Set;for(let w of c){if(h.has(w.propertyName)){let E=u===t.rootEntity.id?t.rootEntity.name:t.nestedEntities.find(d=>d.id===u)?.name;throw new Error(`Validation Error: Parent entity "${E}" (ID: ${u}) has duplicate property name "${w.propertyName}" for its children.`)}h.add(w.propertyName)}}}buildJsonQuery(e,t,n){if(n?.jsonb===!1)throw new Error("JSONB must be enabled for PostgreSQL GROUP BY compatibility. JSON type cannot be used in GROUP BY clauses. Please set jsonb: true or omit the jsonb option (defaults to true).");let i=e instanceof C?e:Ae.buildSimpleQuery(e);return this.buildJsonWithCteStrategy(i,t)}buildJson(e,t){return console.warn("buildJson is deprecated. Use buildJsonQuery instead."),this.buildJsonQuery(e,t)}buildJsonWithCteStrategy(e,t){this.validateMapping(e,t);let{initialCte:n,initialCteAlias:i}=this.createInitialCte(e),r=[n],s=i,a=new Map;a.set(t.rootEntity.id,{...t.rootEntity,isRoot:!0,propertyName:t.rootName}),t.nestedEntities.forEach(p=>a.set(p.id,{...p,isRoot:!1,propertyName:p.propertyName}));let l=this.objectEntityCteBuilder.buildObjectEntityCtes(n,a,t);r=l.ctes,s=l.lastCteAlias;let u=l.columnMappings,c=this.arrayEntityCteBuilder.buildArrayEntityCtes(r,s,a,t,u);return r=c.updatedCtes,s=c.lastCteAlias,this.buildFinalSelectQuery(r,s,a,t,u)}createInitialCte(e){let t="origin_query";return{initialCte:new te(e,new ne(t,null),null),initialCteAlias:t}}buildFinalSelectQuery(e,t,n,i,r){let s=[...e],a=`cte_root_${i.rootName.toLowerCase().replace(/[^a-z0-9_]/g,"_")}`,l=n.get(i.rootEntity.id);if(!l)throw new Error(`Root entity ${i.rootEntity.id} not found`);if(i.resultFormat==="array"||!i.resultFormat){let u=this.buildEntityJsonObject(l,null,i.nestedEntities,n,r),c=new K(u,i.rootName),p=new te(new C({selectClause:new J([c]),fromClause:new U(new B(new O(null,new x(t)),null),null)}),new ne(a,null),null);s.push(p);let h="jsonb_agg",w=new D(null,new R(h),new q([new v(null,new x(i.rootName))]),null);return new C({withClause:new oe(!1,s),selectClause:new J([new K(w,`${i.rootName}_array`)]),fromClause:new U(new B(new O(null,new x(a)),null),null)})}else{let u=this.buildEntityJsonObject(l,null,i.nestedEntities,n,r),c=new K(u,i.rootName),p=new te(new C({selectClause:new J([c]),fromClause:new U(new B(new O(null,new x(t)),null),null)}),new ne(a,null),null);return s.push(p),new C({withClause:new oe(!1,s),selectClause:new J([new K(new v(null,new x(i.rootName)),i.rootName)]),fromClause:new U(new B(new O(null,new x(a)),null),null),limitClause:new re(new G(1))})}}buildEntityJsonObject(e,t,n,i,r){let s="jsonb_build_object",a=[];return Object.entries(e.columns).forEach(([u,c])=>{let p=typeof c=="string"?c:c.column;a.push(new G(u)),a.push(new v(null,new x(p)))}),n.filter(u=>u.parentId===e.id).forEach(u=>{let c=i.get(u.id);if(c)if(a.push(new G(u.propertyName)),u.relationshipType==="object"){let p=r.find(h=>h.entityId===c.id);if(!p)throw new Error(`Column mapping not found for entity: ${c.id}`);a.push(new v(null,new x(p.generatedColumnName)))}else u.relationshipType==="array"&&a.push(new v(null,new x(u.propertyName)))}),new D(null,new R(s),new q(a),null)}};function Hn(o){let e=[],t=0,n={},i=()=>`entity_${++t}`,r=u=>(n[u]||(n[u]=0),n[u]++,n[u]===1?u:`${u}_${n[u]}`),s=(u,c=null)=>{let p={},h=[];for(let[w,E]of Object.entries(u))if(typeof E=="string")p[w]=E;else if("column"in E&&typeof E.column=="string"&&!("type"in E&&(E.type==="object"||E.type==="array"))){let d=E;typeof d=="object"&&"column"in d&&(p[w]=d.column,d.type==="string"&&e.push(d.column))}else if("from"in E&&typeof E.from=="string"&&!("type"in E&&(E.type==="object"||E.type==="array"))){let d=E;typeof d=="object"&&"from"in d&&(p[w]=d.from,d.type==="string"&&e.push(d.from))}else if("type"in E&&(E.type==="object"||E.type==="array")){let d=E,g=r(w),V=i(),b=s(d.structure,V);h.push({id:V,name:w.charAt(0).toUpperCase()+w.slice(1),parentId:c||"root",propertyName:g,originalPropertyName:w,relationshipType:d.type,columns:b.columns}),h.push(...b.nestedEntities.map(F=>({...F,parentId:F.parentId==="root"?V:F.parentId})))}return{columns:p,nestedEntities:h}},a=s(o.structure),l={rootName:"root",rootEntity:{id:"root",name:"Root",columns:a.columns},nestedEntities:a.nestedEntities};return l.typeInfo=o.typeInfo,{jsonMapping:l,typeProtection:{protectedStringFields:e}}}function ki(o){let e=[];return o.typeInfo?(o.typeInfo.interface||e.push("typeInfo.interface is required"),o.typeInfo.importPath||e.push("typeInfo.importPath is required")):e.push("typeInfo is required"),(!o.structure||typeof o.structure!="object")&&e.push("structure is required and must be an object"),e}function zt(o){let e={};for(let[t,n]of Object.entries(o))typeof n=="string"?e[t]=n:n&&typeof n=="object"?"column"in n?e[t]=n.column:"from"in n?e[t]=n.from:e[t]=t:e[t]=t;return e}function rr(o){if(!o)throw new Error("Input mapping is required");if(o.rootName&&o.rootEntity&&typeof o.rootEntity.columns=="object"&&!o.typeInfo&&!o.typeProtection&&!o.metadata&&Object.values(o.rootEntity.columns).every(t=>typeof t=="string"))return o;if(o.rootName&&o.rootEntity)return{rootName:o.rootName,rootEntity:{id:o.rootEntity.id||"root",name:o.rootEntity.name||o.rootName,columns:zt(o.rootEntity.columns||{})},nestedEntities:(o.nestedEntities||[]).map(e=>({id:e.id,name:e.name,parentId:e.parentId,propertyName:e.propertyName,relationshipType:e.relationshipType,columns:zt(e.columns||{})})),resultFormat:o.resultFormat,emptyResult:o.emptyResult};throw new Error("Unsupported mapping format")}function mi(o){return{rootName:o.rootName,rootEntity:{id:o.rootEntity.id,name:o.rootEntity.name,columns:zt(o.rootEntity.columns)},nestedEntities:o.nestedEntities.map(e=>({id:e.id,name:e.name,parentId:e.parentId,propertyName:e.propertyName,relationshipType:e.relationshipType,columns:zt(e.columns)})),resultFormat:o.resultFormat,emptyResult:o.emptyResult}}function di(o){let e=[],t=[],n=[];if(o.typeProtection)return{protectedStringFields:o.typeProtection.protectedStringFields||[],dateFields:o.typeProtection.dateFields,numberFields:o.typeProtection.numberFields,customTransforms:o.typeProtection.customTransforms};for(let[i,r]of Object.entries(o.rootEntity.columns))if(typeof r=="object"&&r.type){let s=r.column;switch(r.type){case"string":e.push(s);break;case"date":t.push(s);break;case"number":n.push(s);break}}for(let i of o.nestedEntities)for(let[r,s]of Object.entries(i.columns))if(typeof s=="object"&&s.type){let a=s.column;switch(s.type){case"string":e.push(a);break;case"date":t.push(a);break;case"number":n.push(a);break}}return{protectedStringFields:e,dateFields:t.length>0?t:void 0,numberFields:n.length>0?n:void 0,customTransforms:void 0}}function yi(o){return o!=null&&typeof o=="object"}var hi=class{detect(e){if(!yi(e))return!1;let t=e;if(!t||typeof t.rootName!="string"||!t.rootEntity||!Array.isArray(t.nestedEntities))return!1;if(t.typeInfo||t.typeProtection||t.metadata)return!0;let n=i=>!i||typeof i!="object"?!1:Object.values(i).some(r=>typeof r=="object"&&r!==null&&"column"in r);return n(t.rootEntity.columns)?!0:t.nestedEntities.some(i=>i&&typeof i=="object"&&n(i.columns))}convert(e){return{format:"enhanced",mapping:mi(e),typeProtection:di(e),originalInput:e,metadata:{typeInfo:e.typeInfo,version:e.metadata?.version,description:e.metadata?.description}}}},fi=class{detect(e){if(!yi(e))return!1;let t=e;return t&&t.typeInfo&&t.structure&&typeof t.typeInfo.interface=="string"}convert(e){let t=Hn(e);return{format:"model-driven",mapping:t.jsonMapping,typeProtection:t.typeProtection,originalInput:e,metadata:{typeInfo:e.typeInfo}}}},Ci=class{detect(e){if(!yi(e))return!1;let t=e;if(!t||typeof t.rootName!="string"||!t.rootEntity||typeof t.rootEntity.columns!="object"||t.typeInfo||t.typeProtection||t.metadata)return!1;let n=i=>!i||typeof i!="object"?!1:Object.values(i).some(r=>typeof r=="object"&&r!==null&&"column"in r);return!(n(t.rootEntity.columns)||t.nestedEntities&&Array.isArray(t.nestedEntities)&&t.nestedEntities.some(r=>r&&typeof r=="object"&&n(r.columns)))}convert(e){return{format:"legacy",mapping:e,typeProtection:{protectedStringFields:[]},originalInput:e}}},Qt=class{constructor(){this.strategies=[new hi,new fi,new Ci]}detectFormat(e){for(let t of this.strategies)if(t.detect(e))return t.convert(e).format;throw new Error("Unsupported JSON mapping format")}convert(e){for(let t of this.strategies)if(t.detect(e))return t.convert(e);throw new Error("Unsupported JSON mapping format: Unable to detect a compatible strategy for the provided input")}toLegacyMapping(e){return this.convert(e).mapping}getTypeProtection(e){return this.convert(e).typeProtection}validate(e){let t=[];if(!e||typeof e!="object")return t.push("Input must be an object"),t;(!("rootName"in e)||!e.rootName)&&t.push("rootName is required");try{let n=this.convert(e);if(n.mapping.rootName||t.push("rootName is required"),n.mapping.rootEntity?(n.mapping.rootEntity.id||t.push("rootEntity.id is required"),n.mapping.rootEntity.columns||t.push("rootEntity.columns is required")):t.push("rootEntity is required"),n.mapping.nestedEntities)for(let i of n.mapping.nestedEntities)i.id||t.push(`Nested entity missing id: ${i.propertyName}`),i.parentId||t.push(`Nested entity missing parentId: ${i.id}`),i.propertyName||t.push(`Nested entity missing propertyName: ${i.id}`)}catch(n){t.length===0&&t.push(`Conversion failed: ${n instanceof Error?n.message:String(n)}`)}return t}upgradeToEnhanced(e,t){return{rootName:e.rootName,rootEntity:{id:e.rootEntity.id,name:e.rootEntity.name,columns:e.rootEntity.columns},nestedEntities:e.nestedEntities.map(n=>({id:n.id,name:n.name,parentId:n.parentId,propertyName:n.propertyName,relationshipType:n.relationshipType||"object",columns:n.columns})),resultFormat:e.resultFormat,emptyResult:e.emptyResult,typeInfo:t,metadata:{version:"1.0",description:"Upgraded from legacy format"}}}};function gi(o){return o.typeInfo&&o.structure?"model-driven":o.rootName&&o.rootEntity?"unified":(o.columns||o.relationships,"legacy")}function sr(o){let e={rootName:o.rootName||"root",rootEntity:{id:"root",name:o.rootName||"Root",columns:o.columns||{}},nestedEntities:[]};if(o.relationships&&typeof o.relationships=="object")for(let[t,n]of Object.entries(o.relationships)){let i=n;e.nestedEntities.push({id:t,name:t.charAt(0).toUpperCase()+t.slice(1),parentId:"root",propertyName:t,relationshipType:i.type==="hasMany"?"array":"object",columns:i.columns||{}})}return e}function Ii(o){if(console.warn("\u26A0\uFE0F DEPRECATED: processJsonMapping() is deprecated. Use JsonMappingConverter.convert() instead."),console.warn("Migration guide: https://github.com/mk3008/rawsql-ts/blob/main/docs/migration-guide.md"),(o.columns||o.relationships)&&!o.rootName&&!o.rootEntity)return{format:"legacy",jsonMapping:sr(o),originalInput:o,metadata:{}};let t=new Qt().convert(o),n=t.format;return t.format==="legacy"&&o.rootName&&o.rootEntity&&(n="unified"),{format:n,jsonMapping:t.mapping,originalInput:o,metadata:{typeInfo:t.metadata?.typeInfo,typeProtection:t.typeProtection}}}function Ni(o){return console.warn("\u26A0\uFE0F DEPRECATED: unifyJsonMapping() is deprecated. Use JsonMappingConverter.toLegacyMapping() instead."),console.warn("Migration guide: https://github.com/mk3008/rawsql-ts/blob/main/docs/migration-guide.md"),new Qt().toLegacyMapping(o)}function Pi(o){return gi(o)==="model-driven"}function Qi(o){return gi(o)==="unified"}function Oi(o){return gi(o)==="legacy"}var Ht=class{constructor(e={}){this.config={enableValueBasedDetection:!0,strictDateDetection:!1,...e}}transformResult(e){return e==null?e:Array.isArray(e)?e.map(t=>this.transformSingleObject(t)):this.transformSingleObject(e)}transformSingleObject(e){if(e==null||typeof e!="object")return e;if(Array.isArray(e))return e.map(n=>this.transformSingleObject(n));let t={};for(let[n,i]of Object.entries(e)){if(i==null){t[n]=i;continue}let r=this.config.columnTransformations?.[n];if(r){t[n]=this.applyTransformation(i,r);continue}if(this.config.enableValueBasedDetection){let a=this.detectValueBasedTransformation(i);if(a){t[n]=this.applyTransformation(i,a);continue}}let s=this.config.globalTransformations&&this.getGlobalTransformationForValue(i);if(s){t[n]=this.applyTransformation(i,s);continue}if(typeof i=="object"&&!Array.isArray(i)){t[n]=this.transformSingleObject(i);continue}if(Array.isArray(i)){t[n]=i.map(a=>typeof a=="object"?this.transformSingleObject(a):a);continue}t[n]=i}return t}detectValueBasedTransformation(e){return typeof e=="string"&&this.isDateString(e)?{sourceType:"TIMESTAMP",targetType:"Date",handleNull:!0,validator:t=>typeof t=="string"&&!isNaN(Date.parse(t))}:typeof e=="number"&&!Number.isSafeInteger(e)?{sourceType:"BIGINT",targetType:"bigint",handleNull:!0,validator:t=>{try{return typeof t=="string"||typeof t=="number"||typeof t=="bigint"||typeof t=="boolean"?(BigInt(t),!0):!1}catch{return!1}}}:typeof e=="string"&&/^\d{16,}$/.test(e)?{sourceType:"BIGINT",targetType:"bigint",handleNull:!0,validator:t=>{try{return typeof t=="string"||typeof t=="number"||typeof t=="bigint"||typeof t=="boolean"?(BigInt(t),!0):!1}catch{return!1}}}:null}getGlobalTransformationForValue(e){return this.config.globalTransformations,null}detectAndGetGlobalTransformation(e){return this.detectValueBasedTransformation(e)}isDateString(e){if(this.config.strictDateDetection){if(!/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{3})?(?:Z|[+-]\d{2}:\d{2})?$/.test(e))return!1}else if(!/^\d{4}-\d{2}-\d{2}(?:T\d{2}:\d{2}:\d{2}(?:\.\d{3})?(?:Z|[+-]\d{2}:\d{2})?)?$/.test(e))return!1;let t=new Date(e);return!isNaN(t.getTime())}applyTransformation(e,t){if(e==null)return t.handleNull!==!1?e:null;if(t.validator&&!t.validator(e))return console.warn(`TypeTransformationPostProcessor: Value validation failed for ${e}`),e;try{switch(t.targetType){case"Date":return new Date(e);case"bigint":if(typeof e=="number"){let n=Math.trunc(e);return BigInt(n.toString())}return BigInt(e);case"string":return e.toString();case"number":return typeof e=="string"?parseFloat(e):Number(e);case"object":return typeof e=="string"?JSON.parse(e):e;case"custom":if(t.customTransformer&&this.config.customTransformers?.[t.customTransformer])return this.config.customTransformers[t.customTransformer](e);break;default:return e}}catch(n){return console.warn(`TypeTransformationPostProcessor: Transformation failed for ${e}:`,n),e}return e}static createDefaultConfig(){return{enableValueBasedDetection:!0,strictDateDetection:!1,globalTransformations:{DATE:{sourceType:"DATE",targetType:"Date",handleNull:!0,validator:e=>typeof e=="string"&&!isNaN(Date.parse(e))},TIMESTAMP:{sourceType:"TIMESTAMP",targetType:"Date",handleNull:!0,validator:e=>typeof e=="string"&&!isNaN(Date.parse(e))},BIGINT:{sourceType:"BIGINT",targetType:"bigint",handleNull:!0,validator:e=>{try{return typeof e=="string"||typeof e=="number"||typeof e=="bigint"||typeof e=="boolean"?(BigInt(e),!0):!1}catch{return!1}}}}}}static createSafeConfig(e){return{enableValueBasedDetection:!1,strictDateDetection:!0,columnTransformations:e||{},globalTransformations:{DATE:{sourceType:"DATE",targetType:"Date",handleNull:!0,validator:t=>typeof t=="string"&&!isNaN(Date.parse(t))},TIMESTAMP:{sourceType:"TIMESTAMP",targetType:"Date",handleNull:!0,validator:t=>typeof t=="string"&&!isNaN(Date.parse(t))},BIGINT:{sourceType:"BIGINT",targetType:"bigint",handleNull:!0,validator:t=>{try{return typeof t=="string"||typeof t=="number"||typeof t=="bigint"||typeof t=="boolean"?(BigInt(t),!0):!1}catch{return!1}}}}}}};function or(o,e){return new Ht(e||Ht.createDefaultConfig()).transformResult(o)}var ar={toDate:o=>{if(o==null)return null;let e=new Date(o);return isNaN(e.getTime())?null:e},toBigInt:o=>{if(o==null)return null;try{return BigInt(o)}catch{return null}},toObject:o=>{if(o==null)return null;try{return JSON.parse(o)}catch{return null}}};var Ot=class{constructor(e,t,n,i,r){this.id=e;this.label=t;this.type=n;this.shape=i;this.details=r}},At=class o extends Ot{constructor(t,n,i){super(t,n,i,i==="subquery"?"hexagon":"cylinder");this.annotations=new Set}addAnnotation(t){this.annotations.add(t)}hasAnnotation(t){return this.annotations.has(t)}getMermaidRepresentation(){return this.shape==="hexagon"?`${this.id}{{${this.label}}}`:`${this.id}[(${this.label})]`}static createTable(t){return new o(`table_${t}`,t,"table")}static createCTE(t){return new o(`cte_${t}`,`CTE:${t}`,"cte")}static createSubquery(t){return new o(`subquery_${t}`,`SubQuery:${t}`,"subquery")}},Gn=class o extends Ot{constructor(e,t,n=""){let i=n?`${n}_${t.toLowerCase().replace(/\s+/g,"_")}`:t.toLowerCase().replace(/\s+/g,"_");super(i,t,"process","hexagon")}getMermaidRepresentation(){return`${this.id}{{${this.label}}}`}static createWhere(e){return new o(`${e}_where`,"WHERE",e)}static createGroupBy(e){return new o(`${e}_group_by`,"GROUP BY",e)}static createHaving(e){return new o(`${e}_having`,"HAVING",e)}static createSelect(e){return new o(`${e}_select`,"SELECT",e)}static createOrderBy(e){return new o(`${e}_order_by`,"ORDER BY",e)}static createLimit(e,t=!1){let n=t?"LIMIT/OFFSET":"LIMIT";return new o(`${e}_limit`,n,e)}},Gt=class o extends Ot{constructor(e,t,n="diamond"){super(e,t,"operation",n)}getMermaidRepresentation(){switch(this.shape){case"rounded":return`${this.id}(${this.label})`;case"rectangle":return`${this.id}[${this.label}]`;case"hexagon":return`${this.id}{{${this.label}}}`;case"stadium":return`${this.id}([${this.label}])`;case"diamond":default:return`${this.id}{${this.label}}`}}static createJoin(e,t){let n,i=t.trim().toLowerCase();return i==="join"?n="INNER JOIN":i.endsWith(" join")?n=i.toUpperCase():n=i.toUpperCase()+" JOIN",new o(`join_${e}`,n,"rectangle")}static createUnion(e,t="UNION ALL"){return new o(`${t.toLowerCase().replace(/\s+/g,"_")}_${e}`,t.toUpperCase(),"rectangle")}static createSetOperation(e,t){let n=t.toUpperCase(),i=`${n.toLowerCase().replace(/\s+/g,"_")}_${e}`;return new o(i,n,"rectangle")}},Yn=class extends Ot{constructor(e="main"){let t=e==="main"?"Final Result":`${e} Result`;super(`${e}_output`,t,"output","stadium")}getMermaidRepresentation(){return`${this.id}([${this.label}])`}};var Xn=class o{constructor(e,t,n){this.from=e;this.to=t;this.label=n}getMermaidRepresentation(){let e=this.label?` -->|${this.label}| `:" --> ";return`${this.from}${e}${this.to}`}static create(e,t,n){return new o(e,t,n)}static createWithNullability(e,t,n){let i=n?"NULLABLE":"NOT NULL";return new o(e,t,i)}},Zn=class{constructor(){this.edges=[];this.connectionSet=new Set}add(e){let t=`${e.from}->${e.to}`;this.connectionSet.has(t)||(this.edges.push(e),this.connectionSet.add(t))}addConnection(e,t,n){this.add(Xn.create(e,t,n))}addJoinConnection(e,t,n){this.add(Xn.createWithNullability(e,t,n))}hasConnection(e,t){return this.connectionSet.has(`${e}->${t}`)}getAll(){return[...this.edges]}getMermaidRepresentation(){return this.edges.map(e=>e.getMermaidRepresentation()).join(`
55
- `)}};var Yt=class{constructor(){this.nodes=new Map;this.edges=new Zn}addNode(e){this.nodes.set(e.id,e)}addEdge(e){this.edges.add(e)}addConnection(e,t,n){this.edges.addConnection(e,t,n)}hasNode(e){return this.nodes.has(e)}hasConnection(e,t){return this.edges.hasConnection(e,t)}getNode(e){return this.nodes.get(e)}getAllNodes(){return Array.from(this.nodes.values())}getAllEdges(){return this.edges.getAll()}generateMermaid(e="TD",t){let n=`flowchart ${e}
62
+ 3. Entity hierarchy and parentId relationships are correct`)}s.push(new b(null,new k(v.generatedColumnName)))}else m.relationshipType==="array"&&s.push(new b(null,new k(m.propertyName)))});let l=new U(null,new B(r),new j(s),null),u=a.JSON_FUNCTIONS.AGGREGATE,c=Object.values(e.columns)[0];return{jsonAgg:new U(null,new B(u),new j([l]),null)}}collectArrayEntityColumnsByDepth(e,t){let n=new Map,i=Math.max(t+3,5);for(let r=t;r<=i;r++)n.set(r,new Set);return e.nestedEntities.filter(r=>r.relationshipType==="array").forEach(r=>{let s=this.calculateEntityDepth(r,e);n.has(s)||n.set(s,new Set),this.addEntityColumnsToDepthSet(r,s,n),this.collectDescendantColumns(r.id,s,e,n)}),n}calculateEntityDepth(e,t){let n=0,i=e;for(;i.parentId&&i.parentId!==t.rootEntity.id;)n++,i=t.nestedEntities.find(r=>r.id===i.parentId)||i;return n}addEntityColumnsToDepthSet(e,t,n){Object.values(e.columns).forEach(i=>{let r=typeof i=="string"?i:i.column;n.get(t).add(r)})}collectDescendantColumns(e,t,n,i){n.nestedEntities.filter(r=>r.parentId===e).forEach(r=>{this.addEntityColumnsToDepthSet(r,t,i),this.collectDescendantColumns(r.id,t,n,i)})}processSelectVariablesForGroupBy(e,t,n,i,r,s,o){e.forEach(l=>{if(!t.has(l.name)){if(o&&o.has(l.name))return;this.shouldIncludeColumnInGroupBy(l.name,n,i)&&(r.push(new z(new b(null,new k(l.name)),l.name)),l.name.endsWith("_json")||s.push(new b(null,new k(l.name))))}})}shouldIncludeColumnInGroupBy(e,t,n){let i=e.endsWith("_json"),r=!0;for(let[s,o]of t.entries())if(s>=n&&o.has(e)){r=!1;break}return i&&e.startsWith("entity_")&&(r=this.shouldIncludeJsonColumn(e,n)),r}shouldIncludeJsonColumn(e,t){let n=e.match(/entity_(\d+)_json/);return n&&t>0?parseInt(n[1])<=2:!0}};var nn=class{constructor(){this.selectValueCollector=new We(null),this.objectEntityCteBuilder=new ti,this.arrayEntityCteBuilder=new ni}validateMapping(e,t){let i=new We().collect(e),r=new Set(i.map(u=>u.name));for(let u in t.rootEntity.columns){let c=t.rootEntity.columns[u],p=typeof c=="string"?c:c.column;if(!r.has(p))throw new Error(`Validation Error: Column "${p}" for JSON key "${u}" in root entity "${t.rootEntity.name}" not found in the query's select list.`)}let s=new Set([t.rootEntity.id]),o=new Map;t.nestedEntities.forEach(u=>{s.add(u.id),o.has(u.parentId)||o.set(u.parentId,[]),o.get(u.parentId).push(u.id)});for(let u of t.nestedEntities){if(!s.has(u.parentId))throw new Error(`Validation Error: Parent entity with ID "${u.parentId}" for nested entity "${u.name}" (ID: ${u.id}) not found.`);for(let c in u.columns){let p=u.columns[c],m=typeof p=="string"?p:p.column;if(!r.has(m))throw new Error(`Validation Error: Column "${m}" for JSON key "${c}" in nested entity "${u.name}" (ID: ${u.id}) not found in the query's select list.`)}}let l=new Set([t.rootEntity.id,...t.nestedEntities.map(u=>u.parentId)]);for(let u of l){let c=t.nestedEntities.filter(C=>C.parentId===u);if(c.filter(C=>C.relationshipType==="array").length>1){let C=u===t.rootEntity.id?t.rootEntity.name:t.nestedEntities.find(v=>v.id===u)?.name;throw new Error(`Validation Error: Parent entity "${C}" (ID: ${u}) has multiple direct array children. This is not supported.`)}let m=new Set;for(let C of c){if(m.has(C.propertyName)){let v=u===t.rootEntity.id?t.rootEntity.name:t.nestedEntities.find(h=>h.id===u)?.name;throw new Error(`Validation Error: Parent entity "${v}" (ID: ${u}) has duplicate property name "${C.propertyName}" for its children.`)}m.add(C.propertyName)}}}buildJsonQuery(e,t,n){if(n?.jsonb===!1)throw new Error("JSONB must be enabled for PostgreSQL GROUP BY compatibility. JSON type cannot be used in GROUP BY clauses. Please set jsonb: true or omit the jsonb option (defaults to true).");let i=e instanceof f?e:Be.buildSimpleQuery(e);return this.buildJsonWithCteStrategy(i,t)}buildJson(e,t){return console.warn("buildJson is deprecated. Use buildJsonQuery instead."),this.buildJsonQuery(e,t)}buildJsonWithCteStrategy(e,t){this.validateMapping(e,t);let{initialCte:n,initialCteAlias:i}=this.createInitialCte(e),r=[n],s=i,o=new Map;o.set(t.rootEntity.id,{...t.rootEntity,isRoot:!0,propertyName:t.rootName}),t.nestedEntities.forEach(p=>o.set(p.id,{...p,isRoot:!1,propertyName:p.propertyName}));let l=this.objectEntityCteBuilder.buildObjectEntityCtes(n,o,t);r=l.ctes,s=l.lastCteAlias;let u=l.columnMappings,c=this.arrayEntityCteBuilder.buildArrayEntityCtes(r,s,o,t,u);return r=c.updatedCtes,s=c.lastCteAlias,this.buildFinalSelectQuery(r,s,o,t,u)}createInitialCte(e){let t="origin_query";return{initialCte:new ie(e,new re(t,null),null),initialCteAlias:t}}buildFinalSelectQuery(e,t,n,i,r){let s=[...e],o=`cte_root_${i.rootName.toLowerCase().replace(/[^a-z0-9_]/g,"_")}`,l=n.get(i.rootEntity.id);if(!l)throw new Error(`Root entity ${i.rootEntity.id} not found`);if(i.resultFormat==="array"||!i.resultFormat){let u=this.buildEntityJsonObject(l,null,i.nestedEntities,n,r),c=new z(u,i.rootName),p=new ie(new f({selectClause:new _([c]),fromClause:new K(new V(new Q(null,new k(t)),null),null)}),new re(o,null),null);s.push(p);let m="jsonb_agg",C=new U(null,new B(m),new j([new b(null,new k(i.rootName))]),null);return new f({withClause:new le(!1,s),selectClause:new _([new z(C,`${i.rootName}_array`)]),fromClause:new K(new V(new Q(null,new k(o)),null),null)})}else{let u=this.buildEntityJsonObject(l,null,i.nestedEntities,n,r),c=new z(u,i.rootName),p=new ie(new f({selectClause:new _([c]),fromClause:new K(new V(new Q(null,new k(t)),null),null)}),new re(o,null),null);return s.push(p),new f({withClause:new le(!1,s),selectClause:new _([new z(new b(null,new k(i.rootName)),i.rootName)]),fromClause:new K(new V(new Q(null,new k(o)),null),null),limitClause:new oe(new X(1))})}}buildEntityJsonObject(e,t,n,i,r){let s="jsonb_build_object",o=[];return Object.entries(e.columns).forEach(([u,c])=>{let p=typeof c=="string"?c:c.column;o.push(new X(u)),o.push(new b(null,new k(p)))}),n.filter(u=>u.parentId===e.id).forEach(u=>{let c=i.get(u.id);if(c)if(o.push(new X(u.propertyName)),u.relationshipType==="object"){let p=r.find(m=>m.entityId===c.id);if(!p)throw new Error(`Column mapping not found for entity: ${c.id}`);o.push(new b(null,new k(p.generatedColumnName)))}else u.relationshipType==="array"&&o.push(new b(null,new k(u.propertyName)))}),new U(null,new B(s),new j(o),null)}};var Ct=class{static extractParameterNames(e){return ht.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),i={},r={};for(let[s,o]of Object.entries(t))n.includes(s)?i[s]=o:r[s]=o;return{hardcodedParams:i,dynamicFilters:r}}};var At=class{constructor(e,t,n){this.name=e;this.type=t;this.tableName=n}},Si=class{constructor(e,t){this.tableColumnResolver=e,this.options={qualified:!1,upstream:!0,...t}}collect(e){let t=[],n=this.collectColumns(e);t.push(...n);let i=this.collectParameters(e);return t.push(...i),this.removeDuplicates(t)}collectColumns(e){let t=[];try{let i=new be(this.tableColumnResolver,!1,"fullName",{upstream:this.options.upstream}).collect(e);for(let r of i){let s,o;if(r.value&&typeof r.value.getNamespace=="function"){let u=r.value.getNamespace();u&&u.trim()!==""&&(s=u,this.options.qualified&&(o=this.getRealTableName(e,u)))}s||(s=this.inferTableNameFromQuery(e),s&&this.options.qualified&&(o=s));let l=r.name;this.options.qualified&&(o||s)&&(l=`${o||s}.${r.name}`),t.push(new At(l,"column",s))}}catch(n){console.warn("Failed to collect columns with SelectableColumnCollector, using fallback:",n);try{let r=new It(this.tableColumnResolver,!0).collect(e);for(let s of r)for(let o of s.columns){let l=o;this.options.qualified&&(l=`${s.name}.${o}`),t.push(new At(l,"column",s.name))}}catch(i){console.warn("Failed to collect columns with both approaches:",n,i)}}return t}inferTableNameFromQuery(e){if(e instanceof f&&e.fromClause&&e.fromClause.source){let t=e.fromClause.source.datasource;if(t&&typeof t.table=="object"){let n=t.table;if(n&&typeof n.name=="string")return n.name}}}getRealTableName(e,t){try{let n=e.type==="WITH"?e.toSimpleQuery():e;if(n instanceof f&&n.fromClause){if(n.fromClause.source?.datasource){let r=n.fromClause.source,s=this.extractRealTableName(r,t);if(s)return s}let i=n.fromClause;if(i.joinClauses&&Array.isArray(i.joinClauses)){for(let r of i.joinClauses)if(r.source?.datasource){let s=this.extractRealTableName(r.source,t);if(s)return s}}}}catch(n){console.warn("Error resolving real table name:",n)}return t}extractRealTableName(e,t){try{let n=e.datasource;if(!n)return;let i=e.alias||e.aliasExpression?.table?.name,r=n.table?.name;if(i===t&&r||!i&&r===t)return r}catch{}}collectParameters(e){let t=[];try{let n=Ct.extractParameterNames(e);for(let i of n)t.push(new At(i,"parameter"))}catch(n){console.warn("Failed to collect parameters:",n)}return t}removeDuplicates(e){let t=new Set,n=[];for(let i of e){let r=`${i.type}:${i.name}:${i.tableName||"none"}`;t.has(r)||(t.add(r),n.push(i))}return n.sort((i,r)=>{if(i.type!==r.type)return i.type==="column"?-1:1;if(i.type==="column"){let s=i.tableName||"",o=r.tableName||"";if(s!==o)return s.localeCompare(o)}return i.name.localeCompare(r.name)})}};var rn=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=L.parse(e));let n=new xt(this.tableColumnResolver,this.options),i=new be(this.tableColumnResolver,!1,"fullName",{upstream:!0}),r=x=>this.options.ignoreCaseAndUnderscore?x.toLowerCase().replace(/_/g,""):x,s=["min","max","like","ilike","in","any","=","<",">","!=","<>","<=",">=","or","and","column"],o=Object.values(t);if(o.length>0&&o.every(x=>x===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.");let c=[],p=[];for(let[x,y]of Object.entries(t))y!==void 0&&(this.isQualifiedColumnName(x)?c.push([x,y]):p.push([x,y]));for(let[x,y]of c)this.processStateParameter(x,y,e,n,i,r,s,v,C,M,H,h);let m=new Set;for(let[x,y]of c){let P=this.parseQualifiedColumnName(x);P&&m.add(`${P.table.toLowerCase()}.${P.column.toLowerCase()}`)}for(let[x,y]of p)this.processUnqualifiedParameter(x,y,e,n,i,r,s,v,C,M,H,h,m);function C(x,y,P,T,D){for(let E=0;E<P.length;E++){let S=P[E],A=S.column||y,tt=D.find(W=>T(W.name)===T(A));if(!tt)throw new Error(`Column '${A}' not found in query for AND condition`);let Le=tt.value;if("="in S&&S["="]!==void 0){let W=`${y}_and_${E}_eq`,R=new N(W,S["="]);x.appendWhere(new w(Le,"=",R))}if("min"in S&&S.min!==void 0){let W=`${y}_and_${E}_min`,R=new N(W,S.min);x.appendWhere(new w(Le,">=",R))}if("max"in S&&S.max!==void 0){let W=`${y}_and_${E}_max`,R=new N(W,S.max);x.appendWhere(new w(Le,"<=",R))}if("like"in S&&S.like!==void 0){let W=`${y}_and_${E}_like`,R=new N(W,S.like);x.appendWhere(new w(Le,"like",R))}if("ilike"in S&&S.ilike!==void 0){let W=`${y}_and_${E}_ilike`,R=new N(W,S.ilike);x.appendWhere(new w(Le,"ilike",R))}if("in"in S&&S.in!==void 0){let R=S.in.map((q,G)=>new N(`${y}_and_${E}_in_${G}`,q));x.appendWhere(new w(Le,"in",new Y(new j(R))))}if("any"in S&&S.any!==void 0){let W=`${y}_and_${E}_any`,R=new N(W,S.any);x.appendWhere(new w(Le,"=",new U(null,"any",R,null)))}if("<"in S&&S["<"]!==void 0){let W=`${y}_and_${E}_lt`,R=new N(W,S["<"]);x.appendWhere(new w(Le,"<",R))}if(">"in S&&S[">"]!==void 0){let W=`${y}_and_${E}_gt`,R=new N(W,S[">"]);x.appendWhere(new w(Le,">",R))}if("!="in S&&S["!="]!==void 0){let W=`${y}_and_${E}_neq`,R=new N(W,S["!="]);x.appendWhere(new w(Le,"!=",R))}if("<>"in S&&S["<>"]!==void 0){let W=`${y}_and_${E}_ne`,R=new N(W,S["<>"]);x.appendWhere(new w(Le,"<>",R))}if("<="in S&&S["<="]!==void 0){let W=`${y}_and_${E}_le`,R=new N(W,S["<="]);x.appendWhere(new w(Le,"<=",R))}if(">="in S&&S[">="]!==void 0){let W=`${y}_and_${E}_ge`,R=new N(W,S[">="]);x.appendWhere(new w(Le,">=",R))}}}function v(x,y,P,T,D){let E=[];for(let S=0;S<P.length;S++){let A=P[S],tt=A.column||y,Le=D.find(q=>T(q.name)===T(tt));if(!Le)throw new Error(`Column '${tt}' not found in query for OR condition`);let W=Le.value,R=[];if("="in A&&A["="]!==void 0){let q=`${y}_or_${S}_eq`,G=new N(q,A["="]);R.push(new w(W,"=",G))}if("min"in A&&A.min!==void 0){let q=`${y}_or_${S}_min`,G=new N(q,A.min);R.push(new w(W,">=",G))}if("max"in A&&A.max!==void 0){let q=`${y}_or_${S}_max`,G=new N(q,A.max);R.push(new w(W,"<=",G))}if("like"in A&&A.like!==void 0){let q=`${y}_or_${S}_like`,G=new N(q,A.like);R.push(new w(W,"like",G))}if("ilike"in A&&A.ilike!==void 0){let q=`${y}_or_${S}_ilike`,G=new N(q,A.ilike);R.push(new w(W,"ilike",G))}if("in"in A&&A.in!==void 0){let G=A.in.map((ji,Ui)=>new N(`${y}_or_${S}_in_${Ui}`,ji));R.push(new w(W,"in",new Y(new j(G))))}if("any"in A&&A.any!==void 0){let q=`${y}_or_${S}_any`,G=new N(q,A.any);R.push(new w(W,"=",new U(null,"any",G,null)))}if("<"in A&&A["<"]!==void 0){let q=`${y}_or_${S}_lt`,G=new N(q,A["<"]);R.push(new w(W,"<",G))}if(">"in A&&A[">"]!==void 0){let q=`${y}_or_${S}_gt`,G=new N(q,A[">"]);R.push(new w(W,">",G))}if("!="in A&&A["!="]!==void 0){let q=`${y}_or_${S}_neq`,G=new N(q,A["!="]);R.push(new w(W,"!=",G))}if("<>"in A&&A["<>"]!==void 0){let q=`${y}_or_${S}_ne`,G=new N(q,A["<>"]);R.push(new w(W,"<>",G))}if("<="in A&&A["<="]!==void 0){let q=`${y}_or_${S}_le`,G=new N(q,A["<="]);R.push(new w(W,"<=",G))}if(">="in A&&A[">="]!==void 0){let q=`${y}_or_${S}_ge`,G=new N(q,A[">="]);R.push(new w(W,">=",G))}if(R.length>0){let q=R[0];for(let G=1;G<R.length;G++)q=new w(q,"and",R[G]);R.length>1?E.push(new Y(q)):E.push(q)}}if(E.length>0){let S=E[0];for(let A=1;A<E.length;A++)S=new w(S,"or",E[A]);x.appendWhere(new Y(S))}}function h(x,y,P){Object.keys(x).forEach(T=>{if(!y.includes(T))throw new Error(`Unsupported operator '${T}' for state key '${P}'`)})}function M(x,y,P,T){let D=new N(P,T);x.appendWhere(new w(y,"=",D))}function H(x,y,P,T){let D=[];if("="in T){let E=new N(P,T["="]);D.push(new w(y,"=",E))}if("min"in T){let E=new N(P+"_min",T.min);D.push(new w(y,">=",E))}if("max"in T){let E=new N(P+"_max",T.max);D.push(new w(y,"<=",E))}if("like"in T){let E=new N(P+"_like",T.like);D.push(new w(y,"like",E))}if("ilike"in T){let E=new N(P+"_ilike",T.ilike);D.push(new w(y,"ilike",E))}if("in"in T){let S=T.in.map((A,tt)=>new N(`${P}_in_${tt}`,A));D.push(new w(y,"in",new Y(new j(S))))}if("any"in T){let E=new N(P+"_any",T.any);D.push(new w(y,"=",new U(null,"any",E,null)))}if("<"in T){let E=new N(P+"_lt",T["<"]);D.push(new w(y,"<",E))}if(">"in T){let E=new N(P+"_gt",T[">"]);D.push(new w(y,">",E))}if("!="in T){let E=new N(P+"_neq",T["!="]);D.push(new w(y,"!=",E))}if("<>"in T){let E=new N(P+"_ne",T["<>"]);D.push(new w(y,"<>",E))}if("<="in T){let E=new N(P+"_le",T["<="]);D.push(new w(y,"<=",E))}if(">="in T){let E=new N(P+"_ge",T[">="]);D.push(new w(y,">=",E))}if(D.length===1)x.appendWhere(D[0]);else if(D.length>1){let E=D[0];for(let S=1;S<D.length;S++)E=new w(E,"and",D[S]);x.appendWhere(new Y(E))}}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}parseQualifiedColumnName(e){let t=e.split(".");return t.length===2&&t[0].trim()&&t[1].trim()?{table:t[0].trim(),column:t[1].trim()}:null}isQualifiedColumnName(e){return e.includes(".")&&this.parseQualifiedColumnName(e)!==null}sanitizeParameterName(e){return e.replace(/\./g,"_")}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,i,r,s,o,l,u,c,p,m){if(this.isOrCondition(t)){let C=t.or;if(C&&C.length>0){let v=this.findTargetQueryForLogicalCondition(i,n,e,C),h=this.getAllAvailableColumns(v,r);l(v,e,C,s,h);return}}if(this.isAndCondition(t)){let C=t.and;if(C&&C.length>0){let v=this.findTargetQueryForLogicalCondition(i,n,e,C),h=this.getAllAvailableColumns(v,r);u(v,e,C,s,h);return}}if(this.isExplicitColumnMapping(t)){let C=t.column;if(C){let v=i.find(n,C);if(v.length===0)throw new Error(`Explicit column '${C}' not found in query`);for(let h of v){let H=this.getAllAvailableColumns(h,r).find(x=>s(x.name)===s(C));if(!H)throw new Error(`Explicit column '${C}' not found in query`);this.isValidatableObject(t)&&m(t,o,e),p(h,H.value,e,t)}return}}this.processRegularColumnCondition(e,t,n,i,r,s,o,c,p,m)}processUnqualifiedParameter(e,t,n,i,r,s,o,l,u,c,p,m,C){if(this.isOrCondition(t)){let h=t.or;if(h&&h.length>0){let M=this.findTargetQueryForLogicalCondition(i,n,e,h),H=this.getAllAvailableColumns(M,r);l(M,e,h,s,H);return}}if(this.isAndCondition(t)){let h=t.and;if(h&&h.length>0){let M=this.findTargetQueryForLogicalCondition(i,n,e,h),H=this.getAllAvailableColumns(M,r);u(M,e,h,s,H);return}}if(this.isExplicitColumnMapping(t)){let h=t.column;if(h){let M=i.find(n,h);if(M.length===0)throw new Error(`Explicit column '${h}' not found in query`);for(let H of M){let y=this.getAllAvailableColumns(H,r).find(P=>s(P.name)===s(h));if(!y)throw new Error(`Explicit column '${h}' not found in query`);this.isValidatableObject(t)&&m(t,o,e),p(H,y.value,e,t)}return}}let v=i.find(n,e);if(v.length===0){if(this.options.ignoreNonExistentColumns)return;throw new Error(`Column '${e}' not found in query`)}for(let h of v){let M=this.getAllAvailableColumns(h,r),H=this.buildTableMapping(h),x=M.filter(y=>s(y.name)===s(e));for(let y of x){let P=!1;if(y.value&&typeof y.value.getNamespace=="function"){let E=y.value.getNamespace();if(E){let S=H.aliasToRealTable.get(E.toLowerCase());if(S){let A=`${S.toLowerCase()}.${e.toLowerCase()}`;C.has(A)&&(P=!0)}}}if(P)continue;let T=y.value;this.isValidatableObject(t)&&m(t,o,e);let D=T;if(this.hasColumnMapping(t)){let E=t.column;if(E){let S=M.find(A=>s(A.name)===s(E));S&&(D=S.value)}}this.isSimpleValue(t)?c(h,D,e,t):p(h,D,e,t)}}}processRegularColumnCondition(e,t,n,i,r,s,o,l,u,c){let p=e,m;if(this.isQualifiedColumnName(e)){let v=this.parseQualifiedColumnName(e);v&&(p=v.column,m=v.table)}let C=i.find(n,p);if(C.length===0){if(this.options.ignoreNonExistentColumns)return;throw new Error(`Column '${p}' not found in query`)}for(let v of C){let h=this.getAllAvailableColumns(v,r),M;if(m){let P=this.buildTableMapping(v);if(M=h.find(T=>{if(!(s(T.name)===s(p)))return!1;if(T.value&&typeof T.value.getNamespace=="function"){let E=T.value.getNamespace();if(E){let S=s(E),A=s(m),tt=P.aliasToRealTable.get(S);if(tt&&s(tt)===A)return!0}}return!1}),!M){if(this.options.ignoreNonExistentColumns)continue;let T=this.buildTableMapping(v),D=Array.from(T.realTableToAlias.keys()).some(S=>s(S)===s(m)),E=Array.from(T.aliasToRealTable.keys()).some(S=>s(S)===s(m));throw!D&&!E?new Error(`Column '${e}' (qualified as ${e}) not found in query`):E&&!D?new Error(`Column '${e}' not found. Only real table names are allowed in qualified column references (e.g., 'users.name'), not aliases (e.g., 'u.name').`):new Error(`Column '${e}' (qualified as ${e}) not found in query`)}}else if(M=h.find(P=>s(P.name)===s(p)),!M)throw new Error(`Column '${p}' not found in query`);let H=M.value;this.isValidatableObject(t)&&c(t,o,e);let x=H;if(this.hasColumnMapping(t)){let P=t.column;if(P){let T=h.find(D=>s(D.name)===s(P));T&&(x=T.value)}}let y=this.sanitizeParameterName(e);this.isSimpleValue(t)?l(v,x,y,t):u(v,x,y,t)}}findTargetQueryForLogicalCondition(e,t,n,i){let r=i.map(o=>o.column||n).filter((o,l,u)=>u.indexOf(o)===l);for(let o of r){let l=e.find(t,o);if(l.length>0)return l[0]}let s=i===i.or?"OR":"AND";throw new Error(`None of the ${s} condition columns [${r.join(", ")}] found in query`)}getAllAvailableColumns(e,t){let n=t.collect(e),i=this.collectCTEColumns(e);return[...n,...i]}collectCTEColumns(e){let t=[];if(e.withClause)for(let n of e.withClause.tables)try{let i=this.collectColumnsFromSelectQuery(n.query);t.push(...i)}catch(i){console.warn(`Failed to collect columns from CTE '${n.getSourceAliasName()}':`,i)}return t}collectColumnsFromSelectQuery(e){return e instanceof f?new be(this.tableColumnResolver,!1,"fullName",{upstream:!0}).collect(e):e instanceof F?this.collectColumnsFromSelectQuery(e.left):[]}buildTableMapping(e){let t=new Map,n=new Map;try{if(e.fromClause&&(this.processSourceForMapping(e.fromClause.source,t,n),e.fromClause.joins))for(let i of e.fromClause.joins)this.processSourceForMapping(i.source,t,n);if(e.withClause)for(let i of e.withClause.tables){let r=i.getSourceAliasName();r&&(t.set(r.toLowerCase(),r),n.set(r.toLowerCase(),r))}}catch(i){console.warn("Failed to build table mapping:",i)}return{aliasToRealTable:t,realTableToAlias:n}}processSourceForMapping(e,t,n){try{if(e.datasource instanceof Q){let i=e.datasource.getSourceName(),r=e.aliasExpression?.table?.name||i;i&&r&&(t.set(r.toLowerCase(),i),n.set(i.toLowerCase(),r),r===i&&t.set(i.toLowerCase(),i))}}catch(i){console.warn("Failed to process source for mapping:",i)}}};var sn=class{constructor(e){this.tableColumnResolver=e}static removeOrderBy(e){if(typeof e=="string"&&(e=L.parse(e)),!(e instanceof f))throw new Error("Complex queries are not supported for ORDER BY removal");return new f({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=L.parse(e)),!(e instanceof f))throw new Error("Complex queries are not supported for sorting");let i=new be(this.tableColumnResolver,!1,"fullName",{upstream:!0}).collect(e);for(let l of Object.keys(t))if(!i.find(c=>c.name===l))throw new Error(`Column or alias '${l}' not found in current query`);let r=[];for(let[l,u]of Object.entries(t)){let c=i.find(h=>h.name===l);if(!c)continue;let p=c.value;this.validateSortCondition(l,u);let m;u.desc?m="desc":m="asc";let C=null;u.nullsFirst?C="first":u.nullsLast&&(C="last");let v=new Pe(p,m,C);r.push(v)}let s=[];e.orderByClause?s=[...e.orderByClause.order,...r]:s=r;let o=s.length>0?new de(s):null;return new f({withClause:e.withClause,selectClause:e.selectClause,fromClause:e.fromClause,whereClause:e.whereClause,groupByClause:e.groupByClause,havingClause:e.havingClause,orderByClause:o,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 on=class{inject(e,t){if(this.validatePaginationOptions(t),typeof e=="string"&&(e=L.parse(e)),!(e instanceof f))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,i=new oe(new N("paging_limit",t.pageSize)),r=new Oe(new N("paging_offset",n));return new f({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:i,offsetClause:r,fetchClause:e.fetchClause,forClause:e.forClause})}static removePagination(e){if(typeof e=="string"&&(e=L.parse(e)),!(e instanceof f))throw new Error("Complex queries are not supported for pagination removal");return new f({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 ii=class{constructor(e={}){this.options={requireAllParameters:!0,...e}}bind(e,t){let n=e,i=Ct.extractParameterNames(n);if(this.options.requireAllParameters){let r=i.filter(s=>!(s in t)||t[s]===void 0);if(r.length>0)throw new Error(`Missing values for required parameters: ${r.join(", ")}`)}for(let[r,s]of Object.entries(t))if(i.includes(r))try{st.set(n,r,s)}catch(o){throw new Error(`Failed to bind parameter '${r}': ${o instanceof Error?o.message:"Unknown error"}`)}return n}bindToSimpleQuery(e,t){return this.bind(e,t)}};var bi=class{constructor(e){this.tableColumnResolver=e}buildQuery(e,t={}){let n;try{n=L.parse(e)}catch(r){throw new Error(`Failed to parse SQL: ${r instanceof Error?r.message:"Unknown error"}`)}let i=n;if(t.filter&&Object.keys(t.filter).length>0){let{hardcodedParams:r,dynamicFilters:s}=Ct.separateFilters(i,t.filter);if(Object.keys(r).length>0&&(i=new ii({requireAllParameters:!1}).bind(i,r)),Object.keys(s).length>0){let o=new rn(this.tableColumnResolver),l=Be.buildSimpleQuery(i);i=o.inject(l,s)}}if(t.sort&&Object.keys(t.sort).length>0){let r=new sn(this.tableColumnResolver),s=Be.buildSimpleQuery(i);i=r.inject(s,t.sort)}if(t.paging){let{page:r=1,pageSize:s}=t.paging;if(s!==void 0){let o=new on,l={page:r,pageSize:s},u=Be.buildSimpleQuery(i);i=o.inject(u,l)}}if(t.serialize&&typeof t.serialize=="object"){let r=new nn,s=Be.buildSimpleQuery(i);i=r.buildJsonQuery(s,t.serialize)}return i}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 L.parse(e),!0}catch(t){throw new Error(`Invalid SQL: ${t instanceof Error?t.message:"Unknown error"}`)}}};function ri(a){let e=[],t=0,n={},i=()=>`entity_${++t}`,r=u=>(n[u]||(n[u]=0),n[u]++,n[u]===1?u:`${u}_${n[u]}`),s=(u,c=null)=>{let p={},m=[];for(let[C,v]of Object.entries(u))if(typeof v=="string")p[C]=v;else if("column"in v&&typeof v.column=="string"&&!("type"in v&&(v.type==="object"||v.type==="array"))){let h=v;typeof h=="object"&&"column"in h&&(p[C]=h.column,h.type==="string"&&e.push(h.column))}else if("from"in v&&typeof v.from=="string"&&!("type"in v&&(v.type==="object"||v.type==="array"))){let h=v;typeof h=="object"&&"from"in h&&(p[C]=h.from,h.type==="string"&&e.push(h.from))}else if("type"in v&&(v.type==="object"||v.type==="array")){let h=v,M=r(C),H=i(),x=s(h.structure,H);m.push({id:H,name:C.charAt(0).toUpperCase()+C.slice(1),parentId:c||"root",propertyName:M,originalPropertyName:C,relationshipType:h.type,columns:x.columns}),m.push(...x.nestedEntities.map(y=>({...y,parentId:y.parentId==="root"?H:y.parentId})))}return{columns:p,nestedEntities:m}},o=s(a.structure),l={rootName:"root",rootEntity:{id:"root",name:"Root",columns:o.columns},nestedEntities:o.nestedEntities};return l.typeInfo=a.typeInfo,{jsonMapping:l,typeProtection:{protectedStringFields:e}}}function Bi(a){let e=[];return a.typeInfo?(a.typeInfo.interface||e.push("typeInfo.interface is required"),a.typeInfo.importPath||e.push("typeInfo.importPath is required")):e.push("typeInfo is required"),(!a.structure||typeof a.structure!="object")&&e.push("structure is required and must be an object"),e}function an(a){let e={};for(let[t,n]of Object.entries(a))typeof n=="string"?e[t]=n:n&&typeof n=="object"?"column"in n?e[t]=n.column:"from"in n?e[t]=n.from:e[t]=t:e[t]=t;return e}function dr(a){if(!a)throw new Error("Input mapping is required");if(a.rootName&&a.rootEntity&&typeof a.rootEntity.columns=="object"&&!a.typeInfo&&!a.typeProtection&&!a.metadata&&Object.values(a.rootEntity.columns).every(t=>typeof t=="string"))return a;if(a.rootName&&a.rootEntity)return{rootName:a.rootName,rootEntity:{id:a.rootEntity.id||"root",name:a.rootEntity.name||a.rootName,columns:an(a.rootEntity.columns||{})},nestedEntities:(a.nestedEntities||[]).map(e=>({id:e.id,name:e.name,parentId:e.parentId,propertyName:e.propertyName,relationshipType:e.relationshipType,columns:an(e.columns||{})})),resultFormat:a.resultFormat,emptyResult:a.emptyResult};throw new Error("Unsupported mapping format")}function Ei(a){return{rootName:a.rootName,rootEntity:{id:a.rootEntity.id,name:a.rootEntity.name,columns:an(a.rootEntity.columns)},nestedEntities:a.nestedEntities.map(e=>({id:e.id,name:e.name,parentId:e.parentId,propertyName:e.propertyName,relationshipType:e.relationshipType,columns:an(e.columns)})),resultFormat:a.resultFormat,emptyResult:a.emptyResult}}function xi(a){let e=[],t=[],n=[];if(a.typeProtection)return{protectedStringFields:a.typeProtection.protectedStringFields||[],dateFields:a.typeProtection.dateFields,numberFields:a.typeProtection.numberFields,customTransforms:a.typeProtection.customTransforms};for(let[i,r]of Object.entries(a.rootEntity.columns))if(typeof r=="object"&&r.type){let s=r.column;switch(r.type){case"string":e.push(s);break;case"date":t.push(s);break;case"number":n.push(s);break}}for(let i of a.nestedEntities)for(let[r,s]of Object.entries(i.columns))if(typeof s=="object"&&s.type){let o=s.column;switch(s.type){case"string":e.push(o);break;case"date":t.push(o);break;case"number":n.push(o);break}}return{protectedStringFields:e,dateFields:t.length>0?t:void 0,numberFields:n.length>0?n:void 0,customTransforms:void 0}}function Pi(a){return a!=null&&typeof a=="object"}var Ti=class{detect(e){if(!Pi(e))return!1;let t=e;if(!t||typeof t.rootName!="string"||!t.rootEntity||!Array.isArray(t.nestedEntities))return!1;if(t.typeInfo||t.typeProtection||t.metadata)return!0;let n=i=>!i||typeof i!="object"?!1:Object.values(i).some(r=>typeof r=="object"&&r!==null&&"column"in r);return n(t.rootEntity.columns)?!0:t.nestedEntities.some(i=>i&&typeof i=="object"&&n(i.columns))}convert(e){return{format:"enhanced",mapping:Ei(e),typeProtection:xi(e),originalInput:e,metadata:{typeInfo:e.typeInfo,version:e.metadata?.version,description:e.metadata?.description}}}},ki=class{detect(e){if(!Pi(e))return!1;let t=e;return t&&t.typeInfo&&t.structure&&typeof t.typeInfo.interface=="string"}convert(e){let t=ri(e);return{format:"model-driven",mapping:t.jsonMapping,typeProtection:t.typeProtection,originalInput:e,metadata:{typeInfo:e.typeInfo}}}},Ii=class{detect(e){if(!Pi(e))return!1;let t=e;if(!t||typeof t.rootName!="string"||!t.rootEntity||typeof t.rootEntity.columns!="object"||t.typeInfo||t.typeProtection||t.metadata)return!1;let n=i=>!i||typeof i!="object"?!1:Object.values(i).some(r=>typeof r=="object"&&r!==null&&"column"in r);return!(n(t.rootEntity.columns)||t.nestedEntities&&Array.isArray(t.nestedEntities)&&t.nestedEntities.some(r=>r&&typeof r=="object"&&n(r.columns)))}convert(e){return{format:"legacy",mapping:e,typeProtection:{protectedStringFields:[]},originalInput:e}}},Wt=class{constructor(){this.strategies=[new Ti,new ki,new Ii]}detectFormat(e){for(let t of this.strategies)if(t.detect(e))return t.convert(e).format;throw new Error("Unsupported JSON mapping format")}convert(e){for(let t of this.strategies)if(t.detect(e))return t.convert(e);throw new Error("Unsupported JSON mapping format: Unable to detect a compatible strategy for the provided input")}toLegacyMapping(e){return this.convert(e).mapping}getTypeProtection(e){return this.convert(e).typeProtection}validate(e){let t=[];if(!e||typeof e!="object")return t.push("Input must be an object"),t;(!("rootName"in e)||!e.rootName)&&t.push("rootName is required");try{let n=this.convert(e);if(n.mapping.rootName||t.push("rootName is required"),n.mapping.rootEntity?(n.mapping.rootEntity.id||t.push("rootEntity.id is required"),n.mapping.rootEntity.columns||t.push("rootEntity.columns is required")):t.push("rootEntity is required"),n.mapping.nestedEntities)for(let i of n.mapping.nestedEntities)i.id||t.push(`Nested entity missing id: ${i.propertyName}`),i.parentId||t.push(`Nested entity missing parentId: ${i.id}`),i.propertyName||t.push(`Nested entity missing propertyName: ${i.id}`)}catch(n){t.length===0&&t.push(`Conversion failed: ${n instanceof Error?n.message:String(n)}`)}return t}upgradeToEnhanced(e,t){return{rootName:e.rootName,rootEntity:{id:e.rootEntity.id,name:e.rootEntity.name,columns:e.rootEntity.columns},nestedEntities:e.nestedEntities.map(n=>({id:n.id,name:n.name,parentId:n.parentId,propertyName:n.propertyName,relationshipType:n.relationshipType||"object",columns:n.columns})),resultFormat:e.resultFormat,emptyResult:e.emptyResult,typeInfo:t,metadata:{version:"1.0",description:"Upgraded from legacy format"}}}};function Ni(a){return a.typeInfo&&a.structure?"model-driven":a.rootName&&a.rootEntity?"unified":(a.columns||a.relationships,"legacy")}function hr(a){let e={rootName:a.rootName||"root",rootEntity:{id:"root",name:a.rootName||"Root",columns:a.columns||{}},nestedEntities:[]};if(a.relationships&&typeof a.relationships=="object")for(let[t,n]of Object.entries(a.relationships)){let i=n;e.nestedEntities.push({id:t,name:t.charAt(0).toUpperCase()+t.slice(1),parentId:"root",propertyName:t,relationshipType:i.type==="hasMany"?"array":"object",columns:i.columns||{}})}return e}function Vi(a){if(console.warn("\u26A0\uFE0F DEPRECATED: processJsonMapping() is deprecated. Use JsonMappingConverter.convert() instead."),console.warn("Migration guide: https://github.com/mk3008/rawsql-ts/blob/main/docs/migration-guide.md"),(a.columns||a.relationships)&&!a.rootName&&!a.rootEntity)return{format:"legacy",jsonMapping:hr(a),originalInput:a,metadata:{}};let t=new Wt().convert(a),n=t.format;return t.format==="legacy"&&a.rootName&&a.rootEntity&&(n="unified"),{format:n,jsonMapping:t.mapping,originalInput:a,metadata:{typeInfo:t.metadata?.typeInfo,typeProtection:t.typeProtection}}}function $i(a){return console.warn("\u26A0\uFE0F DEPRECATED: unifyJsonMapping() is deprecated. Use JsonMappingConverter.toLegacyMapping() instead."),console.warn("Migration guide: https://github.com/mk3008/rawsql-ts/blob/main/docs/migration-guide.md"),new Wt().toLegacyMapping(a)}function Mi(a){return Ni(a)==="model-driven"}function Wi(a){return Ni(a)==="unified"}function Di(a){return Ni(a)==="legacy"}var ln=class{constructor(e={}){this.config={enableValueBasedDetection:!0,strictDateDetection:!1,...e}}transformResult(e){return e==null?e:Array.isArray(e)?e.map(t=>this.transformSingleObject(t)):this.transformSingleObject(e)}transformSingleObject(e){if(e==null||typeof e!="object")return e;if(Array.isArray(e))return e.map(n=>this.transformSingleObject(n));let t={};for(let[n,i]of Object.entries(e)){if(i==null){t[n]=i;continue}let r=this.config.columnTransformations?.[n];if(r){t[n]=this.applyTransformation(i,r);continue}if(this.config.enableValueBasedDetection){let o=this.detectValueBasedTransformation(i);if(o){t[n]=this.applyTransformation(i,o);continue}}let s=this.config.globalTransformations&&this.getGlobalTransformationForValue(i);if(s){t[n]=this.applyTransformation(i,s);continue}if(typeof i=="object"&&!Array.isArray(i)){t[n]=this.transformSingleObject(i);continue}if(Array.isArray(i)){t[n]=i.map(o=>typeof o=="object"?this.transformSingleObject(o):o);continue}t[n]=i}return t}detectValueBasedTransformation(e){return typeof e=="string"&&this.isDateString(e)?{sourceType:"TIMESTAMP",targetType:"Date",handleNull:!0,validator:t=>typeof t=="string"&&!isNaN(Date.parse(t))}:typeof e=="number"&&!Number.isSafeInteger(e)?{sourceType:"BIGINT",targetType:"bigint",handleNull:!0,validator:t=>{try{return typeof t=="string"||typeof t=="number"||typeof t=="bigint"||typeof t=="boolean"?(BigInt(t),!0):!1}catch{return!1}}}:typeof e=="string"&&/^\d{16,}$/.test(e)?{sourceType:"BIGINT",targetType:"bigint",handleNull:!0,validator:t=>{try{return typeof t=="string"||typeof t=="number"||typeof t=="bigint"||typeof t=="boolean"?(BigInt(t),!0):!1}catch{return!1}}}:null}getGlobalTransformationForValue(e){return this.config.globalTransformations,null}detectAndGetGlobalTransformation(e){return this.detectValueBasedTransformation(e)}isDateString(e){if(this.config.strictDateDetection){if(!/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{3})?(?:Z|[+-]\d{2}:\d{2})?$/.test(e))return!1}else if(!/^\d{4}-\d{2}-\d{2}(?:T\d{2}:\d{2}:\d{2}(?:\.\d{3})?(?:Z|[+-]\d{2}:\d{2})?)?$/.test(e))return!1;let t=new Date(e);return!isNaN(t.getTime())}applyTransformation(e,t){if(e==null)return t.handleNull!==!1?e:null;if(t.validator&&!t.validator(e))return console.warn(`TypeTransformationPostProcessor: Value validation failed for ${e}`),e;try{switch(t.targetType){case"Date":return new Date(e);case"bigint":if(typeof e=="number"){let n=Math.trunc(e);return BigInt(n.toString())}return BigInt(e);case"string":return e.toString();case"number":return typeof e=="string"?parseFloat(e):Number(e);case"object":return typeof e=="string"?JSON.parse(e):e;case"custom":if(t.customTransformer&&this.config.customTransformers?.[t.customTransformer])return this.config.customTransformers[t.customTransformer](e);break;default:return e}}catch(n){return console.warn(`TypeTransformationPostProcessor: Transformation failed for ${e}:`,n),e}return e}static createDefaultConfig(){return{enableValueBasedDetection:!0,strictDateDetection:!1,globalTransformations:{DATE:{sourceType:"DATE",targetType:"Date",handleNull:!0,validator:e=>typeof e=="string"&&!isNaN(Date.parse(e))},TIMESTAMP:{sourceType:"TIMESTAMP",targetType:"Date",handleNull:!0,validator:e=>typeof e=="string"&&!isNaN(Date.parse(e))},BIGINT:{sourceType:"BIGINT",targetType:"bigint",handleNull:!0,validator:e=>{try{return typeof e=="string"||typeof e=="number"||typeof e=="bigint"||typeof e=="boolean"?(BigInt(e),!0):!1}catch{return!1}}}}}}static createSafeConfig(e){return{enableValueBasedDetection:!1,strictDateDetection:!0,columnTransformations:e||{},globalTransformations:{DATE:{sourceType:"DATE",targetType:"Date",handleNull:!0,validator:t=>typeof t=="string"&&!isNaN(Date.parse(t))},TIMESTAMP:{sourceType:"TIMESTAMP",targetType:"Date",handleNull:!0,validator:t=>typeof t=="string"&&!isNaN(Date.parse(t))},BIGINT:{sourceType:"BIGINT",targetType:"bigint",handleNull:!0,validator:t=>{try{return typeof t=="string"||typeof t=="number"||typeof t=="bigint"||typeof t=="boolean"?(BigInt(t),!0):!1}catch{return!1}}}}}}};function fr(a,e){return new ln(e||ln.createDefaultConfig()).transformResult(a)}var Cr={toDate:a=>{if(a==null)return null;let e=new Date(a);return isNaN(e.getTime())?null:e},toBigInt:a=>{if(a==null)return null;try{return BigInt(a)}catch{return null}},toObject:a=>{if(a==null)return null;try{return JSON.parse(a)}catch{return null}}};var Dt=class{constructor(e,t,n,i,r){this.id=e;this.label=t;this.type=n;this.shape=i;this.details=r}},jt=class a extends Dt{constructor(t,n,i){super(t,n,i,i==="subquery"?"hexagon":"cylinder");this.annotations=new Set}addAnnotation(t){this.annotations.add(t)}hasAnnotation(t){return this.annotations.has(t)}getMermaidRepresentation(){return this.shape==="hexagon"?`${this.id}{{${this.label}}}`:`${this.id}[(${this.label})]`}static createTable(t){return new a(`table_${t}`,t,"table")}static createCTE(t){return new a(`cte_${t}`,`CTE:${t}`,"cte")}static createSubquery(t){return new a(`subquery_${t}`,`SubQuery:${t}`,"subquery")}},si=class a extends Dt{constructor(e,t,n=""){let i=n?`${n}_${t.toLowerCase().replace(/\s+/g,"_")}`:t.toLowerCase().replace(/\s+/g,"_");super(i,t,"process","hexagon")}getMermaidRepresentation(){return`${this.id}{{${this.label}}}`}static createWhere(e){return new a(`${e}_where`,"WHERE",e)}static createGroupBy(e){return new a(`${e}_group_by`,"GROUP BY",e)}static createHaving(e){return new a(`${e}_having`,"HAVING",e)}static createSelect(e){return new a(`${e}_select`,"SELECT",e)}static createOrderBy(e){return new a(`${e}_order_by`,"ORDER BY",e)}static createLimit(e,t=!1){let n=t?"LIMIT/OFFSET":"LIMIT";return new a(`${e}_limit`,n,e)}},un=class a extends Dt{constructor(e,t,n="diamond"){super(e,t,"operation",n)}getMermaidRepresentation(){switch(this.shape){case"rounded":return`${this.id}(${this.label})`;case"rectangle":return`${this.id}[${this.label}]`;case"hexagon":return`${this.id}{{${this.label}}}`;case"stadium":return`${this.id}([${this.label}])`;case"diamond":default:return`${this.id}{${this.label}}`}}static createJoin(e,t){let n,i=t.trim().toLowerCase();return i==="join"?n="INNER JOIN":i.endsWith(" join")?n=i.toUpperCase():n=i.toUpperCase()+" JOIN",new a(`join_${e}`,n,"rectangle")}static createUnion(e,t="UNION ALL"){return new a(`${t.toLowerCase().replace(/\s+/g,"_")}_${e}`,t.toUpperCase(),"rectangle")}static createSetOperation(e,t){let n=t.toUpperCase(),i=`${n.toLowerCase().replace(/\s+/g,"_")}_${e}`;return new a(i,n,"rectangle")}},oi=class extends Dt{constructor(e="main"){let t=e==="main"?"Final Result":`${e} Result`;super(`${e}_output`,t,"output","stadium")}getMermaidRepresentation(){return`${this.id}([${this.label}])`}};var ai=class a{constructor(e,t,n){this.from=e;this.to=t;this.label=n}getMermaidRepresentation(){let e=this.label?` -->|${this.label}| `:" --> ";return`${this.from}${e}${this.to}`}static create(e,t,n){return new a(e,t,n)}static createWithNullability(e,t,n){let i=n?"NULLABLE":"NOT NULL";return new a(e,t,i)}},li=class{constructor(){this.edges=[];this.connectionSet=new Set}add(e){let t=`${e.from}->${e.to}`;this.connectionSet.has(t)||(this.edges.push(e),this.connectionSet.add(t))}addConnection(e,t,n){this.add(ai.create(e,t,n))}addJoinConnection(e,t,n){this.add(ai.createWithNullability(e,t,n))}hasConnection(e,t){return this.connectionSet.has(`${e}->${t}`)}getAll(){return[...this.edges]}getMermaidRepresentation(){return this.edges.map(e=>e.getMermaidRepresentation()).join(`
63
+ `)}};var cn=class{constructor(){this.nodes=new Map;this.edges=new li}addNode(e){this.nodes.set(e.id,e)}addEdge(e){this.edges.add(e)}addConnection(e,t,n){this.edges.addConnection(e,t,n)}hasNode(e){return this.nodes.has(e)}hasConnection(e,t){return this.edges.hasConnection(e,t)}getNode(e){return this.nodes.get(e)}getAllNodes(){return Array.from(this.nodes.values())}getAllEdges(){return this.edges.getAll()}generateMermaid(e="TD",t){let n=`flowchart ${e}
56
64
  `;t&&(n+=` %% ${t}
57
65
  `);let i=Array.from(this.nodes.values()).map(s=>` ${s.getMermaidRepresentation()}`).join(`
58
66
  `);i&&(n+=i+`
59
67
  `),this.nodes.size>0&&this.edges.getAll().length>0&&(n+=`
60
68
  `);let r=this.edges.getMermaidRepresentation();return r&&(n+=` ${r}
61
- `),n}getOrCreateTable(e){let t=`table_${e}`,n=this.nodes.get(t);return n||(n=At.createTable(e),this.addNode(n)),n}getOrCreateCTE(e){let t=`cte_${e}`,n=this.nodes.get(t);return n||(n=At.createCTE(e),this.addNode(n)),n}getOrCreateSubquery(e){let t=`subquery_${e}`,n=this.nodes.get(t);return n||(n=At.createSubquery(e),this.addNode(n)),n}createProcessNode(e,t){let n=new Gn(t,e);return this.addNode(n),n}createJoinNode(e,t){let n=Gt.createJoin(e,t);return this.addNode(n),n}createSetOperationNode(e,t){let n=Gt.createSetOperation(e,t);return this.addNode(n),n}createOutputNode(e="main"){let t=new Yn(e);return this.addNode(t),t}};var Xt=class{constructor(e){this.graph=e}processSource(e,t,n){if(e.datasource instanceof O)return this.processTableSource(e.datasource,t);if(e.datasource instanceof j)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 i=e.aliasExpression?.table.name||"subquery",r=this.graph.getOrCreateSubquery(i),s=n(e.datasource.query,`subquery_${i}_internal`,t);return s&&!this.graph.hasConnection(s,r.id)&&this.graph.addConnection(s,r.id),r.id}extractTableNodeIds(e,t){let n=[],i=e.source;if(i.datasource instanceof O){let r=i.datasource.getSourceName();if(t.has(r)){let s=this.graph.getOrCreateCTE(r);n.push(s.id)}else{let s=this.graph.getOrCreateTable(r);n.push(s.id)}}if(e.joins&&e.joins.length>0)for(let r of e.joins){let s=r.source;if(s.datasource instanceof O){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 Zt=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 i=this.dataSourceHandler.processSource(e.source,t,n);return e.joins&&e.joins.length>0?this.processJoins(e.joins,i,t,n):i}processJoins(e,t,n,i){let r=t;for(let s of e){let a=this.dataSourceHandler.processSource(s.source,n,i),l=this.getNextJoinId(),u=this.graph.createJoinNode(l,s.joinType.value),{leftLabel:c,rightLabel:p}=this.getJoinNullabilityLabels(s.joinType.value);r&&!this.graph.hasConnection(r,u.id)&&this.graph.addConnection(r,u.id,c),a&&!this.graph.hasConnection(a,u.id)&&this.graph.addConnection(a,u.id,p),r=u.id}return r}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 en=class{constructor(e,t){this.graph=e;this.dataSourceHandler=t}processQueryClauses(e,t,n,i,r){return n}};var tn=class{constructor(e){this.graph=e}processCTEs(e,t,n){for(let i=0;i<e.tables.length;i++){let s=e.tables[i].getSourceAliasName(),a=this.graph.getOrCreateCTE(s);t.add(s),e.recursive&&i===0&&a.addAnnotation("recursive")}for(let i=0;i<e.tables.length;i++){let r=e.tables[i],s=r.getSourceAliasName(),a=this.graph.getOrCreateCTE(s),l=n(r.query,`cte_${s}`,t);if(l&&!this.graph.hasConnection(l,a.id)){let c=e.recursive&&i===0?"RECURSIVE":void 0;this.graph.addConnection(l,a.id,c)}}}detectRecursiveReference(e,t){return e.toString().toLowerCase().includes(t.toLowerCase())}};var wi=class o{constructor(){this.graph=new Yt,this.dataSourceHandler=new Xt(this.graph),this.joinHandler=new Zt(this.graph,this.dataSourceHandler),this.processHandler=new en(this.graph,this.dataSourceHandler),this.cteHandler=new tn(this.graph)}generateMermaidFlow(e,t){this.graph=new Yt,this.dataSourceHandler=new Xt(this.graph),this.joinHandler=new Zt(this.graph,this.dataSourceHandler),this.processHandler=new en(this.graph,this.dataSourceHandler),this.cteHandler=new tn(this.graph),this.joinHandler.resetJoinCounter();let n=typeof e=="string"?A.parse(e):e,i=new Set;return this.processQuery(n,"main",i),this.graph.generateMermaid(t?.direction||"TD",t?.title)}static generate(e){return new o().generateMermaidFlow(e)}processQuery(e,t,n){if(e instanceof C)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 i="";return e.fromClause&&(e.fromClause.joins&&e.fromClause.joins.length>0?i=this.joinHandler.processFromClause(e.fromClause,n,this.processQuery.bind(this)):i=this.dataSourceHandler.processSource(e.fromClause.source,n,this.processQuery.bind(this))),i&&(i=this.processHandler.processQueryClauses(e,t,i,n,this.processQuery.bind(this))),this.handleOutputNode(i,t)}processBinaryQuery(e,t,n){let i=this.flattenBinaryChain(e,e.operator.value);return i.length>2?this.processMultiPartOperation(i,e.operator.value,t,n):this.processSimpleBinaryOperation(e,t,n)}processSimpleBinaryOperation(e,t,n){let i=this.processQuery(e.left,`${t}_left`,n),r=this.processQuery(e.right,`${t}_right`,n),s=t==="main"?"main":t.replace(/^cte_/,""),a=this.graph.createSetOperationNode(s,e.operator.value);return i&&!this.graph.hasConnection(i,a.id)&&this.graph.addConnection(i,a.id),r&&!this.graph.hasConnection(r,a.id)&&this.graph.addConnection(r,a.id),a.id}processMultiPartOperation(e,t,n,i){let r=[],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,i);r.push(c)}for(let l of r)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=[],i=r=>{r instanceof Q&&r.operator.value===t?(i(r.left),i(r.right)):n.push(r)};return i(e),n}};var nn=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=A.parse(e));let n=new yt(this.tableColumnResolver,this.options),i=new ke(this.tableColumnResolver),r=d=>this.options.ignoreCaseAndUnderscore?d.toLowerCase().replace(/_/g,""):d,s=["min","max","like","ilike","in","any","=","<",">","!=","<>","<=",">=","or","and","column"],a=Object.values(t);if(a.length>0&&a.every(d=>d===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[d,g]of Object.entries(t))g!==void 0&&this.processStateParameter(d,g,e,n,i,r,s,p,c,w,E,h);function c(d,g,V,b,F,N){for(let $=0;$<V.length;$++){let S=V[$],I=S.column||g,Rt=F.find(W=>b(W.name)===b(I));if(!Rt)throw new Error(`Column '${I}' not found in query for AND condition`);let Ie=Rt.value;if("="in S&&S["="]!==void 0){let W=`${g}_and_${$}_eq`,L=new T(W,S["="]);d.appendWhere(new y(Ie,"=",L))}if("min"in S&&S.min!==void 0){let W=`${g}_and_${$}_min`,L=new T(W,S.min);d.appendWhere(new y(Ie,">=",L))}if("max"in S&&S.max!==void 0){let W=`${g}_and_${$}_max`,L=new T(W,S.max);d.appendWhere(new y(Ie,"<=",L))}if("like"in S&&S.like!==void 0){let W=`${g}_and_${$}_like`,L=new T(W,S.like);d.appendWhere(new y(Ie,"like",L))}if("ilike"in S&&S.ilike!==void 0){let W=`${g}_and_${$}_ilike`,L=new T(W,S.ilike);d.appendWhere(new y(Ie,"ilike",L))}if("in"in S&&S.in!==void 0){let L=S.in.map((_,z)=>new T(`${g}_and_${$}_in_${z}`,_));d.appendWhere(new y(Ie,"in",new H(new q(L))))}if("any"in S&&S.any!==void 0){let W=`${g}_and_${$}_any`,L=new T(W,S.any);d.appendWhere(new y(Ie,"=",new D(null,"any",L,null)))}if("<"in S&&S["<"]!==void 0){let W=`${g}_and_${$}_lt`,L=new T(W,S["<"]);d.appendWhere(new y(Ie,"<",L))}if(">"in S&&S[">"]!==void 0){let W=`${g}_and_${$}_gt`,L=new T(W,S[">"]);d.appendWhere(new y(Ie,">",L))}if("!="in S&&S["!="]!==void 0){let W=`${g}_and_${$}_neq`,L=new T(W,S["!="]);d.appendWhere(new y(Ie,"!=",L))}if("<>"in S&&S["<>"]!==void 0){let W=`${g}_and_${$}_ne`,L=new T(W,S["<>"]);d.appendWhere(new y(Ie,"<>",L))}if("<="in S&&S["<="]!==void 0){let W=`${g}_and_${$}_le`,L=new T(W,S["<="]);d.appendWhere(new y(Ie,"<=",L))}if(">="in S&&S[">="]!==void 0){let W=`${g}_and_${$}_ge`,L=new T(W,S[">="]);d.appendWhere(new y(Ie,">=",L))}}}function p(d,g,V,b,F,N){let $=[];for(let S=0;S<V.length;S++){let I=V[S],Rt=I.column||g,Ie=F.find(_=>b(_.name)===b(Rt));if(!Ie)throw new Error(`Column '${Rt}' not found in query for OR condition`);let W=Ie.value,L=[];if("="in I&&I["="]!==void 0){let _=`${g}_or_${S}_eq`,z=new T(_,I["="]);L.push(new y(W,"=",z))}if("min"in I&&I.min!==void 0){let _=`${g}_or_${S}_min`,z=new T(_,I.min);L.push(new y(W,">=",z))}if("max"in I&&I.max!==void 0){let _=`${g}_or_${S}_max`,z=new T(_,I.max);L.push(new y(W,"<=",z))}if("like"in I&&I.like!==void 0){let _=`${g}_or_${S}_like`,z=new T(_,I.like);L.push(new y(W,"like",z))}if("ilike"in I&&I.ilike!==void 0){let _=`${g}_or_${S}_ilike`,z=new T(_,I.ilike);L.push(new y(W,"ilike",z))}if("in"in I&&I.in!==void 0){let z=I.in.map((Ai,Fi)=>new T(`${g}_or_${S}_in_${Fi}`,Ai));L.push(new y(W,"in",new H(new q(z))))}if("any"in I&&I.any!==void 0){let _=`${g}_or_${S}_any`,z=new T(_,I.any);L.push(new y(W,"=",new D(null,"any",z,null)))}if("<"in I&&I["<"]!==void 0){let _=`${g}_or_${S}_lt`,z=new T(_,I["<"]);L.push(new y(W,"<",z))}if(">"in I&&I[">"]!==void 0){let _=`${g}_or_${S}_gt`,z=new T(_,I[">"]);L.push(new y(W,">",z))}if("!="in I&&I["!="]!==void 0){let _=`${g}_or_${S}_neq`,z=new T(_,I["!="]);L.push(new y(W,"!=",z))}if("<>"in I&&I["<>"]!==void 0){let _=`${g}_or_${S}_ne`,z=new T(_,I["<>"]);L.push(new y(W,"<>",z))}if("<="in I&&I["<="]!==void 0){let _=`${g}_or_${S}_le`,z=new T(_,I["<="]);L.push(new y(W,"<=",z))}if(">="in I&&I[">="]!==void 0){let _=`${g}_or_${S}_ge`,z=new T(_,I[">="]);L.push(new y(W,">=",z))}if(L.length>0){let _=L[0];for(let z=1;z<L.length;z++)_=new y(_,"and",L[z]);L.length>1?$.push(new H(_)):$.push(_)}}if($.length>0){let S=$[0];for(let I=1;I<$.length;I++)S=new y(S,"or",$[I]);d.appendWhere(new H(S))}}function h(d,g,V){Object.keys(d).forEach(b=>{if(!g.includes(b))throw new Error(`Unsupported operator '${b}' for state key '${V}'`)})}function w(d,g,V,b){let F=new T(V,b);d.appendWhere(new y(g,"=",F))}function E(d,g,V,b){let F=[];if("="in b){let N=new T(V,b["="]);F.push(new y(g,"=",N))}if("min"in b){let N=new T(V+"_min",b.min);F.push(new y(g,">=",N))}if("max"in b){let N=new T(V+"_max",b.max);F.push(new y(g,"<=",N))}if("like"in b){let N=new T(V+"_like",b.like);F.push(new y(g,"like",N))}if("ilike"in b){let N=new T(V+"_ilike",b.ilike);F.push(new y(g,"ilike",N))}if("in"in b){let $=b.in.map((S,I)=>new T(`${V}_in_${I}`,S));F.push(new y(g,"in",new H(new q($))))}if("any"in b){let N=new T(V+"_any",b.any);F.push(new y(g,"=",new D(null,"any",N,null)))}if("<"in b){let N=new T(V+"_lt",b["<"]);F.push(new y(g,"<",N))}if(">"in b){let N=new T(V+"_gt",b[">"]);F.push(new y(g,">",N))}if("!="in b){let N=new T(V+"_neq",b["!="]);F.push(new y(g,"!=",N))}if("<>"in b){let N=new T(V+"_ne",b["<>"]);F.push(new y(g,"<>",N))}if("<="in b){let N=new T(V+"_le",b["<="]);F.push(new y(g,"<=",N))}if(">="in b){let N=new T(V+"_ge",b[">="]);F.push(new y(g,">=",N))}if(F.length===1)d.appendWhere(F[0]);else if(F.length>1){let N=F[0];for(let $=1;$<F.length;$++)N=new y(N,"and",F[$]);d.appendWhere(new H(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,i,r,s,a,l,u,c,p,h){if(this.isOrCondition(t)){let w=t.or;if(w&&w.length>0){let E=this.findTargetQueryForLogicalCondition(i,n,e,w),d=this.getAllAvailableColumns(E,r);l(E,e,w,s,d,r);return}}if(this.isAndCondition(t)){let w=t.and;if(w&&w.length>0){let E=this.findTargetQueryForLogicalCondition(i,n,e,w),d=this.getAllAvailableColumns(E,r);u(E,e,w,s,d,r);return}}if(this.isExplicitColumnMapping(t)){let w=t.column;if(w){let E=i.find(n,w);if(E.length===0)throw new Error(`Explicit column '${w}' not found in query`);for(let d of E){let V=this.getAllAvailableColumns(d,r).find(b=>s(b.name)===s(w));if(!V)throw new Error(`Explicit column '${w}' not found in query`);this.isValidatableObject(t)&&h(t,a,e),p(d,V.value,e,t)}return}}this.processRegularColumnCondition(e,t,n,i,r,s,a,c,p,h)}processRegularColumnCondition(e,t,n,i,r,s,a,l,u,c){let p=i.find(n,e);if(p.length===0){if(this.options.ignoreNonExistentColumns)return;throw new Error(`Column '${e}' not found in query`)}for(let h of p){let w=this.getAllAvailableColumns(h,r),E=w.find(b=>s(b.name)===s(e));if(!E)throw new Error(`Column '${e}' not found in query`);let d=E.value;this.isValidatableObject(t)&&c(t,a,e);let g=d,V=e;if(this.hasColumnMapping(t)){let b=t.column;if(b){let F=w.find(N=>s(N.name)===s(b));F&&(g=F.value,V=b)}}this.isSimpleValue(t)?l(h,g,V,t):u(h,g,V,t)}}findTargetQueryForLogicalCondition(e,t,n,i){let r=i.map(a=>a.column||n).filter((a,l,u)=>u.indexOf(a)===l);for(let a of r){let l=e.find(t,a);if(l.length>0)return l[0]}let s=i===i.or?"OR":"AND";throw new Error(`None of the ${s} condition columns [${r.join(", ")}] found in query`)}getAllAvailableColumns(e,t){let n=t.collect(e),i=this.collectCTEColumns(e);return[...n,...i]}collectCTEColumns(e){let t=[];if(e.withClause)for(let n of e.withClause.tables)try{let i=this.collectColumnsFromSelectQuery(n.query);t.push(...i)}catch(i){console.warn(`Failed to collect columns from CTE '${n.getSourceAliasName()}':`,i)}return t}collectColumnsFromSelectQuery(e){return e instanceof C?new ke(this.tableColumnResolver).collect(e):e instanceof Q?this.collectColumnsFromSelectQuery(e.left):[]}};var rn=class{constructor(e){this.tableColumnResolver=e}static removeOrderBy(e){if(typeof e=="string"&&(e=A.parse(e)),!(e instanceof C))throw new Error("Complex queries are not supported for ORDER BY removal");return new C({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=A.parse(e)),!(e instanceof C))throw new Error("Complex queries are not supported for sorting");let i=new ke(this.tableColumnResolver).collect(e);for(let l of Object.keys(t))if(!i.find(c=>c.name===l))throw new Error(`Column or alias '${l}' not found in current query`);let r=[];for(let[l,u]of Object.entries(t)){let c=i.find(d=>d.name===l);if(!c)continue;let p=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 xe(p,h,w);r.push(E)}let s=[];e.orderByClause?s=[...e.orderByClause.order,...r]:s=r;let a=s.length>0?new ue(s):null;return new C({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 sn=class{inject(e,t){if(this.validatePaginationOptions(t),typeof e=="string"&&(e=A.parse(e)),!(e instanceof C))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,i=new re(new T("paging_limit",t.pageSize)),r=new Qe(new T("paging_offset",n));return new C({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:i,offsetClause:r,fetchClause:e.fetchClause,forClause:e.forClause})}static removePagination(e){if(typeof e=="string"&&(e=A.parse(e)),!(e instanceof C))throw new Error("Complex queries are not supported for pagination removal");return new C({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 Ft=class{static extractParameterNames(e){return ut.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),i={},r={};for(let[s,a]of Object.entries(t))n.includes(s)?i[s]=a:r[s]=a;return{hardcodedParams:i,dynamicFilters:r}}};var ei=class{constructor(e={}){this.options={requireAllParameters:!0,...e}}bind(e,t){let n=e,i=Ft.extractParameterNames(n);if(this.options.requireAllParameters){let r=i.filter(s=>!(s in t)||t[s]===void 0);if(r.length>0)throw new Error(`Missing values for required parameters: ${r.join(", ")}`)}for(let[r,s]of Object.entries(t))if(i.includes(r))try{Ye.set(n,r,s)}catch(a){throw new Error(`Failed to bind parameter '${r}': ${a instanceof Error?a.message:"Unknown error"}`)}return n}bindToSimpleQuery(e,t){return this.bind(e,t)}};var vi=class{constructor(e){this.tableColumnResolver=e}buildQuery(e,t={}){let n;try{n=A.parse(e)}catch(r){throw new Error(`Failed to parse SQL: ${r instanceof Error?r.message:"Unknown error"}`)}let i=n;if(t.filter&&Object.keys(t.filter).length>0){let{hardcodedParams:r,dynamicFilters:s}=Ft.separateFilters(i,t.filter);if(Object.keys(r).length>0&&(i=new ei({requireAllParameters:!1}).bind(i,r)),Object.keys(s).length>0){let a=new nn(this.tableColumnResolver),l=Ae.buildSimpleQuery(i);i=a.inject(l,s)}}if(t.sort&&Object.keys(t.sort).length>0){let r=new rn(this.tableColumnResolver),s=Ae.buildSimpleQuery(i);i=r.inject(s,t.sort)}if(t.paging){let{page:r=1,pageSize:s}=t.paging;if(s!==void 0){let a=new sn,l={page:r,pageSize:s},u=Ae.buildSimpleQuery(i);i=a.inject(u,l)}}if(t.serialize&&typeof t.serialize=="object"){let r=new _t,s=Ae.buildSimpleQuery(i);i=r.buildJsonQuery(s,t.serialize)}return i}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 A.parse(e),!0}catch(t){throw new Error(`Invalid SQL: ${t instanceof Error?t.message:"Unknown error"}`)}}};var Si=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 i=["JsonMapping validation failed:",...n.errors].join(`
62
- `);throw new Error(i)}}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(i=>{n[i]="primitive"}),t.nestedEntities&&t.nestedEntities.filter(i=>i.parentId===e.id).forEach(i=>{i.propertyName&&i.columns&&(i.relationshipType==="object"?n[i.propertyName]=this.extractNestedEntityStructure(i,t):i.relationshipType==="array"&&(n[i.propertyName]=[this.extractNestedEntityStructure(i,t)]))}),n}static compareStructures(e,t,n=""){let i=[],r=[],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}[]`);i.push(...u.errors),r.push(...u.missingProperties),s.push(...u.extraProperties)}return{isValid:i.length===0,errors:i,missingProperties:r,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)){r.push(c),i.push(`Missing property: ${c}`);return}let p=a[u],h=l[u],w=this.compareStructures(p,h,c);i.push(...w.errors),r.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:i.length===0,errors:i,missingProperties:r,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 i=["JsonMapping validation against sample object failed:",...n.errors].join(`
63
- `);throw new Error(i)}}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 Lt=class{constructor(e){this.schemas=e,this.validateSchemas()}validateSchemas(){let e=Object.keys(this.schemas),t=[];if(Object.entries(this.schemas).forEach(([n,i])=>{Object.entries(i.columns).filter(([s,a])=>a.isPrimaryKey).map(([s,a])=>s).length===0&&t.push(`Table '${n}' has no primary key defined`),i.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(([r,s])=>{n[r]=s.jsonAlias||s.name});let i=[];return t.relationships?.forEach(r=>{let s=this.schemas[r.table];if(!s)throw new Error(`Related table '${r.table}' not found in schema registry`);let a={};Object.entries(s.columns).forEach(([u,c])=>{a[u]=c.jsonAlias||c.name});let l=r.type;i.push({id:r.propertyName,name:s.displayName||r.table,parentId:e,propertyName:r.propertyName,relationshipType:l,columns:a})}),{rootName:e,rootEntity:{id:e,name:t.displayName||e,columns:n},nestedEntities:i,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(([i,r])=>r.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(([i,r])=>{r.foreignKey&&n.push({column:i,referencedTable:r.foreignKey.table,referencedColumn:r.foreignKey.column})}),n}};function lr(o){return new Lt(o)}function ur(o){return new Lt(o).createTableColumnResolver()}function cr(o,e){return new Lt(o).createJsonMapping(e)}
69
+ `),n}getOrCreateTable(e){let t=`table_${e}`,n=this.nodes.get(t);return n||(n=jt.createTable(e),this.addNode(n)),n}getOrCreateCTE(e){let t=`cte_${e}`,n=this.nodes.get(t);return n||(n=jt.createCTE(e),this.addNode(n)),n}getOrCreateSubquery(e){let t=`subquery_${e}`,n=this.nodes.get(t);return n||(n=jt.createSubquery(e),this.addNode(n)),n}createProcessNode(e,t){let n=new si(t,e);return this.addNode(n),n}createJoinNode(e,t){let n=un.createJoin(e,t);return this.addNode(n),n}createSetOperationNode(e,t){let n=un.createSetOperation(e,t);return this.addNode(n),n}createOutputNode(e="main"){let t=new oi(e);return this.addNode(t),t}};var pn=class{constructor(e){this.graph=e}processSource(e,t,n){if(e.datasource instanceof Q)return this.processTableSource(e.datasource,t);if(e.datasource instanceof J)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 i=e.aliasExpression?.table.name||"subquery",r=this.graph.getOrCreateSubquery(i),s=n(e.datasource.query,`subquery_${i}_internal`,t);return s&&!this.graph.hasConnection(s,r.id)&&this.graph.addConnection(s,r.id),r.id}extractTableNodeIds(e,t){let n=[],i=e.source;if(i.datasource instanceof Q){let r=i.datasource.getSourceName();if(t.has(r)){let s=this.graph.getOrCreateCTE(r);n.push(s.id)}else{let s=this.graph.getOrCreateTable(r);n.push(s.id)}}if(e.joins&&e.joins.length>0)for(let r of e.joins){let s=r.source;if(s.datasource instanceof Q){let o=s.datasource.getSourceName();if(t.has(o)){let l=this.graph.getOrCreateCTE(o);n.push(l.id)}else{let l=this.graph.getOrCreateTable(o);n.push(l.id)}}}return n}};var mn=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 i=this.dataSourceHandler.processSource(e.source,t,n);return e.joins&&e.joins.length>0?this.processJoins(e.joins,i,t,n):i}processJoins(e,t,n,i){let r=t;for(let s of e){let o=this.dataSourceHandler.processSource(s.source,n,i),l=this.getNextJoinId(),u=this.graph.createJoinNode(l,s.joinType.value),{leftLabel:c,rightLabel:p}=this.getJoinNullabilityLabels(s.joinType.value);r&&!this.graph.hasConnection(r,u.id)&&this.graph.addConnection(r,u.id,c),o&&!this.graph.hasConnection(o,u.id)&&this.graph.addConnection(o,u.id,p),r=u.id}return r}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 dn=class{constructor(e,t){this.graph=e;this.dataSourceHandler=t}processQueryClauses(e,t,n,i,r){return n}};var hn=class{constructor(e){this.graph=e}processCTEs(e,t,n){for(let i=0;i<e.tables.length;i++){let s=e.tables[i].getSourceAliasName(),o=this.graph.getOrCreateCTE(s);t.add(s),e.recursive&&i===0&&o.addAnnotation("recursive")}for(let i=0;i<e.tables.length;i++){let r=e.tables[i],s=r.getSourceAliasName(),o=this.graph.getOrCreateCTE(s),l=n(r.query,`cte_${s}`,t);if(l&&!this.graph.hasConnection(l,o.id)){let c=e.recursive&&i===0?"RECURSIVE":void 0;this.graph.addConnection(l,o.id,c)}}}detectRecursiveReference(e,t){return e.toString().toLowerCase().includes(t.toLowerCase())}};var Ai=class a{constructor(){this.graph=new cn,this.dataSourceHandler=new pn(this.graph),this.joinHandler=new mn(this.graph,this.dataSourceHandler),this.processHandler=new dn(this.graph,this.dataSourceHandler),this.cteHandler=new hn(this.graph)}generateMermaidFlow(e,t){this.graph=new cn,this.dataSourceHandler=new pn(this.graph),this.joinHandler=new mn(this.graph,this.dataSourceHandler),this.processHandler=new dn(this.graph,this.dataSourceHandler),this.cteHandler=new hn(this.graph),this.joinHandler.resetJoinCounter();let n=typeof e=="string"?L.parse(e):e,i=new Set;return this.processQuery(n,"main",i),this.graph.generateMermaid(t?.direction||"TD",t?.title)}static generate(e){return new a().generateMermaidFlow(e)}processQuery(e,t,n){if(e instanceof f)return this.processSimpleQuery(e,t,n);if(e instanceof F)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 i="";return e.fromClause&&(e.fromClause.joins&&e.fromClause.joins.length>0?i=this.joinHandler.processFromClause(e.fromClause,n,this.processQuery.bind(this)):i=this.dataSourceHandler.processSource(e.fromClause.source,n,this.processQuery.bind(this))),i&&(i=this.processHandler.processQueryClauses(e,t,i,n,this.processQuery.bind(this))),this.handleOutputNode(i,t)}processBinaryQuery(e,t,n){let i=this.flattenBinaryChain(e,e.operator.value);return i.length>2?this.processMultiPartOperation(i,e.operator.value,t,n):this.processSimpleBinaryOperation(e,t,n)}processSimpleBinaryOperation(e,t,n){let i=this.processQuery(e.left,`${t}_left`,n),r=this.processQuery(e.right,`${t}_right`,n),s=t==="main"?"main":t.replace(/^cte_/,""),o=this.graph.createSetOperationNode(s,e.operator.value);return i&&!this.graph.hasConnection(i,o.id)&&this.graph.addConnection(i,o.id),r&&!this.graph.hasConnection(r,o.id)&&this.graph.addConnection(r,o.id),o.id}processMultiPartOperation(e,t,n,i){let r=[],s=n==="main"?"main":n.replace(/^cte_/,""),o=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,i);r.push(c)}for(let l of r)l&&!this.graph.hasConnection(l,o.id)&&this.graph.addConnection(l,o.id);return o.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=[],i=r=>{r instanceof F&&r.operator.value===t?(i(r.left),i(r.right)):n.push(r)};return i(e),n}};var Li=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 i=["JsonMapping validation failed:",...n.errors].join(`
70
+ `);throw new Error(i)}}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(i=>{n[i]="primitive"}),t.nestedEntities&&t.nestedEntities.filter(i=>i.parentId===e.id).forEach(i=>{i.propertyName&&i.columns&&(i.relationshipType==="object"?n[i.propertyName]=this.extractNestedEntityStructure(i,t):i.relationshipType==="array"&&(n[i.propertyName]=[this.extractNestedEntityStructure(i,t)]))}),n}static compareStructures(e,t,n=""){let i=[],r=[],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}[]`);i.push(...u.errors),r.push(...u.missingProperties),s.push(...u.extraProperties)}return{isValid:i.length===0,errors:i,missingProperties:r,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 o=e,l=t;return Object.keys(l).forEach(u=>{let c=n?`${n}.${u}`:u;if(!(u in o)){r.push(c),i.push(`Missing property: ${c}`);return}let p=o[u],m=l[u],C=this.compareStructures(p,m,c);i.push(...C.errors),r.push(...C.missingProperties),s.push(...C.extraProperties)}),Object.keys(o).forEach(u=>{let c=n?`${n}.${u}`:u;u in l||s.push(c)}),{isValid:i.length===0,errors:i,missingProperties:r,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 i=["JsonMapping validation against sample object failed:",...n.errors].join(`
71
+ `);throw new Error(i)}}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 Ut=class{constructor(e){this.schemas=e,this.validateSchemas()}validateSchemas(){let e=Object.keys(this.schemas),t=[];if(Object.entries(this.schemas).forEach(([n,i])=>{Object.entries(i.columns).filter(([s,o])=>o.isPrimaryKey).map(([s,o])=>s).length===0&&t.push(`Table '${n}' has no primary key defined`),i.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(([r,s])=>{n[r]=s.jsonAlias||s.name});let i=[];return t.relationships?.forEach(r=>{let s=this.schemas[r.table];if(!s)throw new Error(`Related table '${r.table}' not found in schema registry`);let o={};Object.entries(s.columns).forEach(([u,c])=>{o[u]=c.jsonAlias||c.name});let l=r.type;i.push({id:r.propertyName,name:s.displayName||r.table,parentId:e,propertyName:r.propertyName,relationshipType:l,columns:o})}),{rootName:e,rootEntity:{id:e,name:t.displayName||e,columns:n},nestedEntities:i,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(([i,r])=>r.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(([i,r])=>{r.foreignKey&&n.push({column:i,referencedTable:r.foreignKey.table,referencedColumn:r.foreignKey.column})}),n}};function yr(a){return new Ut(a)}function gr(a){return new Ut(a).createTableColumnResolver()}function vr(a,e){return new Ut(a).createJsonMapping(e)}
64
72
  //# sourceMappingURL=index.min.js.map