UNPKG

rawsql-ts

Version:

[beta]High-performance SQL parser and AST analyzer written in TypeScript. Provides fast parsing and advanced transformation capabilities.

12 lines 257 kB
"use strict";var Zn=Object.defineProperty;var Ai=Object.getOwnPropertyDescriptor;var Li=Object.getOwnPropertyNames;var Bi=Object.prototype.hasOwnProperty;var Ri=(o,e)=>{for(var t in e)Zn(o,t,{get:e[t],enumerable:!0})},Vi=(o,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Li(e))!Bi.call(o,i)&&i!==t&&Zn(o,i,{get:()=>e[i],enumerable:!(n=Ai(e,i))||n.enumerable});return o};var $i=o=>Vi(Zn({},"__esModule",{value:!0}),o);var cr={};Ri(cr,{ArrayExpression:()=>he,ArrayIndexExpression:()=>Ze,ArrayQueryExpression:()=>fe,ArraySliceExpression:()=>Xe,BetweenExpression:()=>Ce,BinaryExpression:()=>y,BinarySelectQuery:()=>O,CTECollector:()=>Z,CTEComposer:()=>Ut,CTEDependencyAnalyzer:()=>it,CTEDisabler:()=>dt,CTENormalizer:()=>qe,CTENotFoundError:()=>kt,CTEQueryDecomposer:()=>li,CTERenamer:()=>ui,CTETableReferenceCollector:()=>Mt,CaseExpression:()=>ee,CaseKeyValuePair:()=>Se,CastExpression:()=>se,ColumnReference:()=>v,ColumnReferenceCollector:()=>Jt,CommentEditor:()=>Wt,DuplicateCTEError:()=>Tt,DuplicateDetectionMode:()=>Pn,DynamicQueryBuilder:()=>wi,Formatter:()=>nt,FunctionCall:()=>D,IdentifierString:()=>x,InlineQuery:()=>ye,InsertQuery:()=>He,InsertQueryParser:()=>ai,InvalidCTENameError:()=>ft,JsonMappingConverter:()=>Pt,JsonSchemaValidator:()=>gi,LexemeCursor:()=>vi,LiteralValue:()=>G,ParameterExpression:()=>T,ParenExpression:()=>H,PostgresJsonQueryBuilder:()=>Kt,QualifiedName:()=>Ve,QueryBuilder:()=>Fe,QueryFlowDiagramGenerator:()=>yi,RawString:()=>B,SchemaCollector:()=>Dt,SchemaManager:()=>At,SelectQueryParser:()=>Q,SelectValueCollector:()=>Oe,SelectableColumnCollector:()=>Qe,SimpleSelectQuery:()=>C,SqlComponent:()=>f,SqlDialectConfiguration:()=>ei,SqlFormatter:()=>Re,SqlPaginationInjector:()=>nn,SqlParamInjector:()=>en,SqlSchemaValidator:()=>jt,SqlSortInjector:()=>tn,StringSpecifierExpression:()=>Ae,SwitchCaseArgument:()=>ve,TableSchema:()=>Nt,TableSourceCollector:()=>tt,TokenType:()=>W,TupleExpression:()=>Ee,TypeTransformationPostProcessor:()=>_t,TypeTransformers:()=>or,TypeValue:()=>Ne,UnaryExpression:()=>Y,UpstreamSelectQueryFinder:()=>Ct,VALID_PRESETS:()=>nr,ValueList:()=>K,ValuesQuery:()=>le,WindowFrameBound:()=>ni,WindowFrameBoundStatic:()=>ut,WindowFrameBoundaryValue:()=>ct,WindowFrameExpression:()=>Ie,WindowFrameSpec:()=>Je,WindowFrameType:()=>ti,WithClauseParser:()=>wt,convertColumnsToLegacy:()=>qt,convertModelDrivenMapping:()=>_n,convertToLegacyJsonMapping:()=>ir,createJsonMappingFromSchema:()=>ur,createSchemaManager:()=>ar,createTableColumnResolver:()=>lr,extractTypeProtection:()=>pi,isLegacyFormat:()=>Oi,isModelDrivenFormat:()=>Ni,isUnifiedFormat:()=>Pi,processJsonMapping:()=>ki,toLegacyMapping:()=>ci,transformDatabaseResult:()=>sr,unifyJsonMapping:()=>Ii,validateModelDrivenMapping:()=>Ti});module.exports=$i(cr);var f=class{constructor(){this.comments=null}getKind(){return this.constructor.kind}accept(e){return e.visit(this)}toSqlString(e){return this.accept(e)}},ei=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 ye=class extends f{static{this.kind=Symbol("InlineQuery")}constructor(e){super(),this.selectQuery=e}},K=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(Si(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}},ti=(n=>(n.Rows="rows",n.Range="range",n.Groups="groups",n))(ti||{}),ni=(n=>(n.UnboundedPreceding="unbounded preceding",n.UnboundedFollowing="unbounded following",n.CurrentRow="current row",n))(ni||{}),ut=class extends f{static{this.kind=Symbol("WindowFrameStaticBound")}constructor(e){super(),this.bound=e}},ct=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}},Ie=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 B(e),this.expression=t}},y=class extends f{static{this.kind=Symbol("BinaryExpression")}constructor(e,t,n){super(),this.left=e,this.operator=new B(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 B(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}},B=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}},he=class extends f{static{this.kind=Symbol("ArrayExpression")}constructor(e){super(),this.expression=e}},fe=class extends f{static{this.kind=Symbol("ArrayQueryExpression")}constructor(e){super(),this.query=e}},Ce=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}},Ae=class extends f{static{this.kind=Symbol("StringSpecifierExpression")}constructor(e,t){super(),this.specifier=new B(e),this.value=new G(t)}},Ne=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 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}},Ee=class extends f{static{this.kind=Symbol("TupleExpression")}constructor(e){super(),this.values=e}},Xe=class extends f{static{this.kind=Symbol("ArraySliceExpression")}constructor(e,t,n){super(),this.array=e,this.startIndex=t,this.endIndex=n}},Ze=class extends f{static{this.kind=Symbol("ArrayIndexExpression")}constructor(e,t){super(),this.array=e,this.index=t}};function Si(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=Si(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 q=class extends f{static{this.kind=Symbol("SelectItem")}constructor(e,t=null){super(),this.value=e,this.identifier=t?new x(t):null}},U=class extends f{static{this.kind=Symbol("SelectClause")}constructor(e,t=null,n=[]){super(),this.items=e,this.distinct=t,this.hints=n}},gt=class extends f{static{this.kind=Symbol("Distinct")}constructor(){super()}},vt=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}},A=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 B?this.qualifiedName.name.value:this.qualifiedName.name.name):this.qualifiedName.name instanceof B?this.qualifiedName.name.value:this.qualifiedName.name.name}},Ke=class extends f{static{this.kind=Symbol("FunctionSource")}constructor(e,t){if(super(),typeof e=="object"&&e!==null&&"name"in e){let n=e;this.qualifiedName=new 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}},R=class extends f{static{this.kind=Symbol("SourceExpression")}constructor(e,t){super(),this.datasource=e,this.aliasExpression=t}getAliasName(){return this.aliasExpression?this.aliasExpression.table.name:this.datasource instanceof A?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 B(e),this.source=t,this.condition=n,this.lateral=i}getSourceAliasName(){return this.source.aliasExpression?this.source.aliasExpression.table.name:this.source instanceof A?this.source.table.name:null}},j=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 A?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 Pe=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}},pt=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}},rn=class extends f{static{this.kind=Symbol("ReturningClause")}constructor(e){super(),this.columns=e.map(t=>typeof t=="string"?new x(t):t)}},et=class extends f{static{this.kind=Symbol("SetClause")}constructor(e){super(),this.items=e.map(t=>t instanceof rt?t:new rt(t.column,t.value))}},rt=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()}},St=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 A?this.source.datasource.table.name:null}},st=class extends f{constructor(e,t){super(),this.source=e,this.columns=t.map(n=>new x(n))}};var W=(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))(W||{});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 ge=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} ${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(` `);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} ${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 ge.getDebugPositionInfo(this.input,e)}};var sn=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=ge.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=ge.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=ge.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=ge.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=ge.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 Mi=[["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"]],Wi=new De(Mi),ii=new We(Wi),on=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=ii.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} ${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} ${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} ${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 an=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 ln=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 un=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 Di=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"]]),ji=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"]]),Ui=new We(Di),Ji=new We(ji);var cn=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=Ji.parse(this.input,this.position);return n!==null?(this.position=n.newPosition,this.createLexeme(8258,n.keyword)):(n=Ui.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"]]),qi=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"]]),_i=new We(qi),ri=new We(Ki),pn=class extends ae{tryRead(e){if(this.isEndOfInput())return null;let t=ri.parse(this.input,this.position);if(t!==null)return this.position=t.newPosition,this.createLexeme(128,t.keyword);let n=_i.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 zi=new Set(["e'","E'","x'","X'","b'","B'"]),Hi=new Set(["u&'","U&'"]),mn=class extends ae{tryRead(e){let t=this.position;return this.canRead(1)&&zi.has(this.input.slice(t,t+2))?(this.position+=1,this.createLexeme(4096,this.input.slice(t,this.position))):this.canRead(2)&&Hi.has(this.input.slice(t,t+3))?(this.position+=2,this.createLexeme(4096,this.input.slice(t,this.position))):null}};var Gi=new De([["grouping","sets"],["array"]]),Yi=new We(Gi),dn=class extends ae{tryRead(e){if(this.isEndOfInput())return null;let t=Yi.parse(this.input,this.position);if(t!==null)return this.position=t.newPosition,this.createLexeme(2048,t.keyword);let n=ge.tryReadRegularIdentifier(this.input,this.position);if(!n)return null;this.position=n.newPosition;var i=ge.readWhiteSpaceAndComment(this.input,this.position).position-this.position;return this.canRead(i)&&this.input[this.position+i]==="("?this.createLexeme(2048,n.identifier):null}};var Xi=new De([["double","precision"],["character","varying"],["time","without","time","zone"],["time","with","time","zone"],["timestamp","without","time","zone"],["timestamp","with","time","zone"]]),Zi=new We(Xi),hn=class extends ae{tryRead(e){if(this.isEndOfInput())return null;let t=Zi.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=ge.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 fn=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} ${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 un(e).register(new fn(e)).register(new an(e)).register(new mn(e)).register(new on(e)).register(new ln(e)).register(new pn(e)).register(new cn(e)).register(new hn(e)).register(new dn(e)).register(new sn(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} ${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 ge.readWhiteSpaceAndComment(this.input,this.position)}getDebugPositionInfo(e){return ge.getDebugPositionInfo(this.input,e)}};var Be=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 Cn=class{static parseFromLexeme(e,t){let{namespaces:n,name:i,newIndex:r}=Be.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=ii.parse(i.toLowerCase(),0);if(s){let a=new B(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 yn=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=Q.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 ye(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 wn=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 gn=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 vn=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 Ae(i,r),newIndex:n}}};var Sn=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 ot=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 En=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 K(i)),newIndex:n}}};var Et=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=En.parseFromLexeme(e,n);i=a.value,n=a.newIndex}if(n<e.length&&e[n].value==="order by"){let a=ot.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 Ie(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 ut(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 ct(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 Rt=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 Et.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 m=c+r===n?">":" ",h=W[u.type]||u.type;return`${m} ${c+r}:${u.value} [${h}]`}).join(` `),l=`${i} Unparsed lexeme remains at index ${n}: ${t[n].value} Context: ${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 he(i.value),newIndex:n}}else if(n+1<e.length&&e[n+1].type&4){n++,n++;let i=Q.parseFromLexeme(e,n);return n=i.newIndex,n++,{value:new fe(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 Ce(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=Be.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=Rt.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,`Expect