rawsql-ts
Version:
High-performance SQL parser and AST analyzer written in TypeScript. Provides fast parsing and advanced transformation capabilities.
10 lines • 1.02 MB
JavaScript
"use strict";var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __hasOwnProp=Object.prototype.hasOwnProperty;var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&typeof from=="object"||typeof from=="function")for(let key of __getOwnPropNames(from))!__hasOwnProp.call(to,key)&&key!==except&&__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to};var __toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod);var index_exports={};__export(index_exports,{AliasRenamer:()=>AliasRenamer,AlterSequenceStatement:()=>AlterSequenceStatement,AlterTableAddColumn:()=>AlterTableAddColumn,AlterTableAddConstraint:()=>AlterTableAddConstraint,AlterTableAlterColumnDefault:()=>AlterTableAlterColumnDefault,AlterTableDropColumn:()=>AlterTableDropColumn,AlterTableDropConstraint:()=>AlterTableDropConstraint,AlterTableParser:()=>AlterTableParser,AlterTableStatement:()=>AlterTableStatement,AnalyzeStatement:()=>AnalyzeStatement,ArrayExpression:()=>ArrayExpression,ArrayIndexExpression:()=>ArrayIndexExpression,ArrayQueryExpression:()=>ArrayQueryExpression,ArraySliceExpression:()=>ArraySliceExpression,AstCommentAttachmentExtractor:()=>AstCommentAttachmentExtractor,BetweenExpression:()=>BetweenExpression,BinaryExpression:()=>BinaryExpression,BinarySelectQuery:()=>BinarySelectQuery,CTECollector:()=>CTECollector,CTEComposer:()=>CTEComposer,CTEDependencyAnalyzer:()=>CTEDependencyAnalyzer,CTEDisabler:()=>CTEDisabler,CTENormalizer:()=>CTENormalizer,CTENotFoundError:()=>CTENotFoundError,CTEQueryDecomposer:()=>CTEQueryDecomposer,CTERegionDetector:()=>CTERegionDetector,CTERenamer:()=>CTERenamer,CTETableReferenceCollector:()=>CTETableReferenceCollector,CaseExpression:()=>CaseExpression,CaseKeyValuePair:()=>CaseKeyValuePair,CastExpression:()=>CastExpression,CheckpointStatement:()=>CheckpointStatement,CheckpointStatementParser:()=>CheckpointStatementParser,ClauseScopedColumnReferenceCollector:()=>ClauseScopedColumnReferenceCollector,ClusterStatement:()=>ClusterStatement,ClusterStatementParser:()=>ClusterStatementParser,ColumnConstraintDefinition:()=>ColumnConstraintDefinition,ColumnReference:()=>ColumnReference,ColumnReferenceCollector:()=>ColumnReferenceCollector,CommentEditor:()=>CommentEditor,CommentOnParser:()=>CommentOnParser,CommentOnStatement:()=>CommentOnStatement,CommonTable:()=>CommonTable,CreateIndexParser:()=>CreateIndexParser,CreateIndexStatement:()=>CreateIndexStatement,CreateSchemaStatement:()=>CreateSchemaStatement,CreateSequenceStatement:()=>CreateSequenceStatement,CreateTableParser:()=>CreateTableParser,CreateTableQuery:()=>CreateTableQuery,CursorContextAnalyzer:()=>CursorContextAnalyzer,DDLDiffGenerator:()=>DDLDiffGenerator,DDLGeneralizer:()=>DDLGeneralizer,DDLToFixtureConverter:()=>DDLToFixtureConverter,DeleteClause:()=>DeleteClause,DeleteQuery:()=>DeleteQuery,DeleteQueryParser:()=>DeleteQueryParser,DeleteResultSelectConverter:()=>DeleteResultSelectConverter,Distinct:()=>Distinct,DistinctOn:()=>DistinctOn,DropConstraintParser:()=>DropConstraintParser,DropConstraintStatement:()=>DropConstraintStatement,DropIndexParser:()=>DropIndexParser,DropIndexStatement:()=>DropIndexStatement,DropSchemaStatement:()=>DropSchemaStatement,DropTableParser:()=>DropTableParser,DropTableStatement:()=>DropTableStatement,DuplicateCTEError:()=>DuplicateCTEError,DuplicateDetectionMode:()=>DuplicateDetectionMode,DynamicQueryBuilder:()=>DynamicQueryBuilder,ExplainOption:()=>ExplainOption,ExplainStatement:()=>ExplainStatement,FetchClause:()=>FetchClause,FetchExpression:()=>FetchExpression,FetchType:()=>FetchType,FetchUnit:()=>FetchUnit,FilterableItem:()=>FilterableItem,FilterableItemCollector:()=>FilterableItemCollector,FixtureCteBuilder:()=>FixtureCteBuilder,ForClause:()=>ForClause,Formatter:()=>Formatter,FromClause:()=>FromClause,FunctionCall:()=>FunctionCall,FunctionSource:()=>FunctionSource,GroupByClause:()=>GroupByClause,HavingClause:()=>HavingClause,IdentifierString:()=>IdentifierString,IndexColumnDefinition:()=>IndexColumnDefinition,InlineQuery:()=>InlineQuery,InsertClause:()=>InsertClause,InsertQuery:()=>InsertQuery,InsertQueryParser:()=>InsertQueryParser,InsertQuerySelectValuesConverter:()=>InsertQuerySelectValuesConverter,InsertResultSelectConverter:()=>InsertResultSelectConverter,InvalidCTENameError:()=>InvalidCTENameError,JoinClause:()=>JoinClause,JoinOnClause:()=>JoinOnClause,JoinUsingClause:()=>JoinUsingClause,JsonPredicateExpression:()=>JsonPredicateExpression,LexemeCursor:()=>LexemeCursor,LimitClause:()=>LimitClause,LiteralValue:()=>LiteralValue,LockMode:()=>LockMode,MergeAction:()=>MergeAction,MergeDeleteAction:()=>MergeDeleteAction,MergeDoNothingAction:()=>MergeDoNothingAction,MergeInsertAction:()=>MergeInsertAction,MergeQuery:()=>MergeQuery,MergeQueryParser:()=>MergeQueryParser,MergeResultSelectConverter:()=>MergeResultSelectConverter,MergeUpdateAction:()=>MergeUpdateAction,MergeWhenClause:()=>MergeWhenClause,MultiQuerySplitter:()=>MultiQuerySplitter,MultiQueryUtils:()=>MultiQueryUtils,NamedQueryDefinitionExtractor:()=>NamedQueryDefinitionExtractor,NullsSortDirection:()=>NullsSortDirection,OffsetClause:()=>OffsetClause,OnConflictClause:()=>OnConflictClause,OrderByClause:()=>OrderByClause,OrderByItem:()=>OrderByItem,OriginalFormatRestorer:()=>OriginalFormatRestorer,ParameterConditionPlacementOptimizer:()=>ParameterConditionPlacementOptimizer,ParameterExpression:()=>ParameterExpression,ParameterHelper:()=>ParameterHelper,ParenExpression:()=>ParenExpression,ParenSource:()=>ParenSource,PartitionByClause:()=>PartitionByClause,PositionAwareParser:()=>PositionAwareParser,PredicateReachabilityAnalyzer:()=>PredicateReachabilityAnalyzer,QualifiedName:()=>QualifiedName,QueryBuilder:()=>QueryBuilder,QueryFlowDiagramGenerator:()=>QueryFlowDiagramGenerator,RawString:()=>RawString,ReferenceDefinition:()=>ReferenceDefinition,ReindexStatement:()=>ReindexStatement,ReindexStatementParser:()=>ReindexStatementParser,ReturningAlias:()=>ReturningAlias,ReturningClause:()=>ReturningClause,SSSQLFilterBuilder:()=>SSSQLFilterBuilder,SchemaCollector:()=>SchemaCollector,SchemaManager:()=>SchemaManager,ScopeResolver:()=>ScopeResolver,SelectBodyExtractor:()=>SelectBodyExtractor,SelectClause:()=>SelectClause,SelectItem:()=>SelectItem,SelectOutputCollector:()=>SelectOutputCollector,SelectQueryParser:()=>SelectQueryParser,SelectResultSelectConverter:()=>SelectResultSelectConverter,SelectValueCollector:()=>SelectValueCollector,SelectableColumnCollector:()=>SelectableColumnCollector,SetClause:()=>SetClause,SetClauseItem:()=>SetClauseItem,SimpleSelectQuery:()=>SimpleSelectQuery,SimulatedSelectConverter:()=>SimulatedSelectConverter,SmartRenamer:()=>SmartRenamer,SortDirection:()=>SortDirection,SourceAliasExpression:()=>SourceAliasExpression,SourceExpression:()=>SourceExpression,SqlComponent:()=>SqlComponent,SqlDialectConfiguration:()=>SqlDialectConfiguration,SqlFormatter:()=>SqlFormatter,SqlIdentifierRenamer:()=>SqlIdentifierRenamer,SqlPaginationInjector:()=>SqlPaginationInjector,SqlParamInjector:()=>SqlParamInjector,SqlParameterBinder:()=>SqlParameterBinder,SqlParser:()=>SqlParser,SqlSchemaValidator:()=>SqlSchemaValidator,SqlSortInjector:()=>SqlSortInjector,SqlTokenizer:()=>SqlTokenizer,StaticPredicatePlacementOptimizer:()=>StaticPredicatePlacementOptimizer,StringSpecifierExpression:()=>StringSpecifierExpression,SubQuerySource:()=>SubQuerySource,SwitchCaseArgument:()=>SwitchCaseArgument,TableColumnDefinition:()=>TableColumnDefinition,TableConstraintDefinition:()=>TableConstraintDefinition,TableSchema:()=>TableSchema,TableSource:()=>TableSource,TableSourceCollector:()=>TableSourceCollector,TokenType:()=>TokenType,TupleExpression:()=>TupleExpression,TypeValue:()=>TypeValue,UnaryExpression:()=>UnaryExpression,UpdateClause:()=>UpdateClause,UpdateQuery:()=>UpdateQuery,UpdateQueryParser:()=>UpdateQueryParser,UpdateResultSelectConverter:()=>UpdateResultSelectConverter,UpstreamSelectQueryFinder:()=>UpstreamSelectQueryFinder,UsingClause:()=>UsingClause,VALID_PRESETS:()=>VALID_PRESETS,VacuumStatement:()=>VacuumStatement,VacuumStatementParser:()=>VacuumStatementParser,ValueList:()=>ValueList,ValuesQuery:()=>ValuesQuery,WhereClause:()=>WhereClause,WildcardColumnInferenceCollector:()=>WildcardColumnInferenceCollector,WindowFrameBound:()=>WindowFrameBound,WindowFrameBoundStatic:()=>WindowFrameBoundStatic,WindowFrameBoundaryValue:()=>WindowFrameBoundaryValue,WindowFrameClause:()=>WindowFrameClause,WindowFrameExpression:()=>WindowFrameExpression,WindowFrameSpec:()=>WindowFrameSpec,WindowFrameType:()=>WindowFrameType,WindowsClause:()=>WindowsClause,WithClause:()=>WithClause,WithClauseParser:()=>WithClauseParser,analyzePredicateReachability:()=>analyzePredicateReachability,buildRelationGraphFromCreateTableQueries:()=>buildRelationGraphFromCreateTableQueries,collectSupportedOptionalConditionBranchSpans:()=>collectSupportedOptionalConditionBranchSpans,collectSupportedOptionalConditionBranches:()=>collectSupportedOptionalConditionBranches,createSchemaManager:()=>createSchemaManager,createTableColumnResolver:()=>createTableColumnResolver,createTableDefinitionFromCreateTableQuery:()=>createTableDefinitionFromCreateTableQuery,createTableDefinitionRegistryFromCreateTableQueries:()=>createTableDefinitionRegistryFromCreateTableQueries,createTableDefinitionRegistryFromSchema:()=>createTableDefinitionRegistryFromSchema,extractAstCommentAttachments:()=>extractAstCommentAttachments,getCompletionSuggestions:()=>getCompletionSuggestions,getCursorContext:()=>getCursorContext,getIncomingRelations:()=>getIncomingRelations,getIntelliSenseInfo:()=>getIntelliSenseInfo,getOutgoingRelations:()=>getOutgoingRelations,getQualifiedNameText:()=>getQualifiedNameText,normalizeTableName:()=>normalizeTableName,optimizeConditions:()=>optimizeConditions,optimizeParameterConditionPlacement:()=>optimizeParameterConditionPlacement,optimizeStaticPredicatePlacement:()=>optimizeStaticPredicatePlacement,optimizeUnusedCtes:()=>optimizeUnusedCtes,optimizeUnusedCtesToFixedPoint:()=>optimizeUnusedCtesToFixedPoint,optimizeUnusedLeftJoins:()=>optimizeUnusedLeftJoins,optimizeUnusedLeftJoinsToFixedPoint:()=>optimizeUnusedLeftJoinsToFixedPoint,parseToPosition:()=>parseToPosition,planConditionOptimization:()=>planConditionOptimization,planParameterConditionOptimization:()=>planParameterConditionOptimization,planStaticPredicatePlacement:()=>planStaticPredicatePlacement,pruneOptionalConditionBranches:()=>pruneOptionalConditionBranches,refreshSssqlQuery:()=>refreshSssqlQuery,resolveScope:()=>resolveScope,scaffoldSssqlQuery:()=>scaffoldSssqlQuery,splitQueries:()=>splitQueries,tableNameVariants:()=>tableNameVariants});module.exports=__toCommonJS(index_exports);var TokenType=(TokenType2=>(TokenType2[TokenType2.None=0]="None",TokenType2[TokenType2.Literal=1]="Literal",TokenType2[TokenType2.Operator=2]="Operator",TokenType2[TokenType2.OpenParen=4]="OpenParen",TokenType2[TokenType2.CloseParen=8]="CloseParen",TokenType2[TokenType2.Comma=16]="Comma",TokenType2[TokenType2.Dot=32]="Dot",TokenType2[TokenType2.Identifier=64]="Identifier",TokenType2[TokenType2.Command=128]="Command",TokenType2[TokenType2.Parameter=256]="Parameter",TokenType2[TokenType2.OpenBracket=512]="OpenBracket",TokenType2[TokenType2.CloseBracket=1024]="CloseBracket",TokenType2[TokenType2.Function=2048]="Function",TokenType2[TokenType2.StringSpecifier=4096]="StringSpecifier",TokenType2[TokenType2.Type=8192]="Type",TokenType2))(TokenType||{});var CharLookupTable=class{static isWhitespace(char){if(char.length!==1)return!1;let code=char.charCodeAt(0);return code===32||code===9||code===10||code===13}static isDigit(char){if(char.length!==1)return!1;let code=char.charCodeAt(0);return code>=48&&code<=57}static isHexChar(char){if(char.length!==1)return!1;let code=char.charCodeAt(0);return code>=48&&code<=57||code>=97&&code<=102||code>=65&&code<=70}static isOperatorSymbol(char){if(char.length!==1)return!1;let code=char.charCodeAt(0);return code===43||code===45||code===42||code===47||code===37||code===126||code===64||code===35||code===94||code===38||code===58||code===33||code===60||code===62||code===61||code===124||code===63}static isDelimiter(char){if(char.length!==1)return!1;let code=char.charCodeAt(0);return this.isDelimiterCode(code)}static isDelimiterCode(code){return code===46||code===44||code===40||code===41||code===91||code===93||code===123||code===125||code===59||code===32||code===9||code===10||code===13?!0:code===43||code===45||code===42||code===47||code===37||code===126||code===64||code===35||code===94||code===38||code===58||code===33||code===60||code===62||code===61||code===124||code===63}static isNamedParameterPrefix(char){if(char.length!==1)return!1;let code=char.charCodeAt(0);return code===64||code===58||code===36}};var StringUtils=class _StringUtils{static getDebugPositionInfo(input,errPosition){let start=Math.max(0,errPosition-5),end=Math.min(input.length,errPosition+5),debugInfo=input.slice(start,end),caret=" ".repeat(errPosition-start)+"^";return`${debugInfo}
${caret}`}static skipWhiteSpace(input,position){let length=input.length;for(;position+4<=length&&input.charCodeAt(position)===32&&input.charCodeAt(position+1)===32&&input.charCodeAt(position+2)===32&&input.charCodeAt(position+3)===32;)position+=4;for(;position<length;){let charCode=input.charCodeAt(position);if(charCode!==32&&charCode!==9&&charCode!==10&&charCode!==13)break;position++}return position}static readLineComment(input,position){if(position+1>=input.length)return{newPosition:position,comment:null};if(input.charCodeAt(position)===45&&input.charCodeAt(position+1)===45){let start=position;for(position+=2;position<input.length&&input.charCodeAt(position)!==10;)position++;let comment=input.slice(start+2,position).trim();return{newPosition:position,comment}}return{newPosition:position,comment:null}}static readBlockComment(input,position){if(position+1>=input.length)return{newPosition:position,comments:null};if(input.charCodeAt(position)!==47||input.charCodeAt(position+1)!==42)return{newPosition:position,comments:null};if(position+2<input.length&&input.charCodeAt(position+2)===43)return{newPosition:position,comments:null};let start=position;for(position+=2;position+1<input.length;){if(input.charCodeAt(position)===42&&input.charCodeAt(position+1)===47){position+=2;let processedLines=this.processBlockCommentContent(input.slice(start+2,position-2));return{newPosition:position,comments:processedLines}}position++}let processedLinesUnterminated=this.processBlockCommentContent(input.slice(start+2));return{newPosition:input.length,comments:processedLinesUnterminated}}static processBlockCommentContent(rawContent){let rawLines=rawContent.replace(/\r/g,"").split(`
`),processedLines=[];for(let rawLine of rawLines){let trimmedLine=rawLine.trim(),isSeparatorLine=/^\s*[-=_+*#]+\s*$/.test(rawLine);trimmedLine!==""||isSeparatorLine?processedLines.push(isSeparatorLine?rawLine.trim():trimmedLine):processedLines.push("")}for(;processedLines.length>0&&processedLines[0]==="";)processedLines.shift();for(;processedLines.length>0&&processedLines[processedLines.length-1]==="";)processedLines.pop();return processedLines}static readWhiteSpaceAndComment(input,position){let lines=null,length=input.length;for(;position<length;){let oldPosition=position;if(position=_StringUtils.skipWhiteSpace(input,position),position!==oldPosition)continue;let charCode=input.charCodeAt(position);if(charCode===45&&position+1<length&&input.charCodeAt(position+1)===45){let commentStart=position+2;for(position=commentStart;position<length&&input.charCodeAt(position)!==10;)position++;let comment=input.slice(commentStart,position).trim();comment&&(lines===null&&(lines=[]),lines.push(comment));continue}if(charCode===47&&position+1<length&&input.charCodeAt(position+1)===42){if(position+2<length&&input.charCodeAt(position+2)===43)break;let contentStart=position+2;position=contentStart;let closed=!1;for(;position+1<length;){if(input.charCodeAt(position)===42&&input.charCodeAt(position+1)===47){let processedLines=this.processBlockCommentContent(input.slice(contentStart,position));position+=2,processedLines.length>0&&(lines===null&&(lines=[]),lines.push(...processedLines)),closed=!0;break}position++}if(!closed){let processedLines=this.processBlockCommentContent(input.slice(contentStart));processedLines.length>0&&(lines===null&&(lines=[]),lines.push(...processedLines)),position=length}continue}break}return{position,lines}}static readRegularIdentifier(input,position){let result=this.tryReadRegularIdentifier(input,position);if(!result)throw new Error(`Unexpected character. position: ${position}
${_StringUtils.getDebugPositionInfo(input,position)}`);return result}static tryReadRegularIdentifier(input,position){let start=position,length=input.length;for(;position<length&&!CharLookupTable.isDelimiterCode(input.charCodeAt(position));)position++;if(start===position)return null;for(;position+1<input.length&&input[position]==="["&&input[position+1]==="]";){let beforeIdentifier=input.slice(0,start).trim();if(beforeIdentifier===""||/[)]$/.test(beforeIdentifier)||/\b(select|from|where|and|or|set|values|insert|update|delete)\s*$/i.test(beforeIdentifier))break;position+=2}return{identifier:input.slice(start,position),newPosition:position}}};var BaseTokenReader=class{constructor(input,position=0){this.input=input,this.position=position}getPosition(){return this.position}setPosition(position){this.position=position}isEndOfInput(shift=0){return this.position+shift>=this.input.length}canRead(shift=0){return!this.isEndOfInput(shift)}read(expectChar){if(this.isEndOfInput())throw new Error(`Unexpected character. expect: ${expectChar}, actual: EndOfInput, position: ${this.position}`);let char=this.input[this.position];if(char!==expectChar)throw new Error(`Unexpected character. expect: ${expectChar}, actual: ${char}, position: ${this.position}`);return this.position++,char}createLexeme(type,value,comments=null,startPosition,endPosition){let lexeme={type,value:type===128||type===2||type===2048?value.toLowerCase():value,comments};return startPosition!==void 0&&endPosition!==void 0&&(lexeme.position={startPosition,endPosition}),lexeme}createLexemeWithPosition(type,value,startPos,comments=null){return this.createLexeme(type,value,comments,startPos,startPos+value.length)}getDebugPositionInfo(errPosition){return StringUtils.getDebugPositionInfo(this.input,errPosition)}};var KeywordParser=class{constructor(trie5){this.trie=trie5}isEndOfInput(input,position,shift=0){return position+shift>=input.length}canParse(input,position,shift=0){return!this.isEndOfInput(input,position,shift)}parse(input,position){if(this.isEndOfInput(input,position))return null;this.trie.reset();let result=StringUtils.tryReadRegularIdentifier(input,position);if(result===null)return null;let matchResult=this.trie.pushLexeme(result.identifier.toLowerCase());if(matchResult===0)return null;if(matchResult===3)return{keyword:result.identifier,newPosition:result.newPosition};let lexeme=result.identifier,commentResult=StringUtils.readWhiteSpaceAndComment(input,result.newPosition);position=commentResult.position;let collectedComments=commentResult.lines?[...commentResult.lines]:[];if(this.isEndOfInput(input,position))return matchResult===2?{keyword:lexeme,newPosition:position,comments:collectedComments.length>0?collectedComments:void 0}:null;for(;this.canParse(input,position);){let previousMatchResult=matchResult,result2=StringUtils.tryReadRegularIdentifier(input,position);if(result2!==null){if(matchResult=this.trie.pushLexeme(result2.identifier.toLowerCase()),matchResult===0){if(previousMatchResult===2)break;return null}lexeme+=" "+result2.identifier;let nextCommentResult=StringUtils.readWhiteSpaceAndComment(input,result2.newPosition);if(position=nextCommentResult.position,nextCommentResult.lines&&nextCommentResult.lines.length>0&&collectedComments.push(...nextCommentResult.lines),matchResult===3)break}else{if(previousMatchResult===2)break;return null}}return{keyword:lexeme,newPosition:position,comments:collectedComments.length>0?collectedComments:void 0}}};var KeywordTrie=class{constructor(keywords2){this.root=this.createNode();for(let i=0;i<keywords2.length;i++)this.addKeyword(keywords2[i]);this.currentNode=this.root}createNode(){return{children:new Map,isFinal:!1}}addKeyword(keyword){let node=this.root;for(let i=0;i<keyword.length;i++){let word=keyword[i],nextNode=node.children.get(word);nextNode||(nextNode=this.createNode(),node.children.set(word,nextNode)),node=nextNode}node.isFinal=!0}reset(){this.currentNode=this.root}pushLexeme(lexeme){let nextNode=this.currentNode.children.get(lexeme);return nextNode?(this.currentNode=nextNode,nextNode.isFinal?nextNode.children.size===0?3:2:1):0}};var joinTrie=new KeywordTrie([["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"],["lateral","join"],["lateral","inner","join"],["lateral","left","join"],["lateral","left","outer","join"]]),keywordTrie=new KeywordTrie([["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"],["window"],["over"],["partition","by"],["range"],["rows"],["groups"],["within","group"],["ignore","nulls"],["respect","nulls"],["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"],["not","matched","by","source"],["not","matched","by","target"],["update","set"],["on","conflict"],["if","not","exists"],["if","exists"],["do","nothing"],["do","select"],["do","update"],["insert","default","values"],["values"],["set"],["returning"],["analyze"],["create","table"],["create","temporary","table"],["create","temp","table"],["create","unlogged","table"],["create","schema"],["create","sequence"],["create","temporary","sequence"],["create","temp","sequence"],["alter","table"],["alter","sequence"],["drop","table"],["drop","schema"],["drop","index"],["drop","sequence"],["drop","constraint"],["comment","on","table"],["comment","on","column"],["create","index"],["create","unique","index"],["add"],["add","constraint"],["constraint"],["primary","key"],["unique"],["unique","key"],["foreign","key"],["references"],["check"],["default"],["not","null"],["null"],["generated","always"],["generated","always","as","identity"],["generated","by","default"],["generated","by","default","as","identity"],["identity"],["collate"],["deferrable"],["not","deferrable"],["initially","immediate"],["initially","deferred"],["match"],["match","full"],["match","partial"],["match","simple"],["not","valid"],["on","delete"],["on","update"],["cascade"],["restrict"],["no","action"],["set","null"],["set","default"],["include"],["only"],["concurrently"],["tablespace"],["tablesample"],["as"],["asc"],["desc"],["nulls","first"],["nulls","last"]]),keywordParser=new KeywordParser(keywordTrie),joinkeywordParser=new KeywordParser(joinTrie);function canStartJoinKeyword(input,position){let code=input.charCodeAt(position)|32;return code===106||code===105||code===99||code===108||code===114||code===102||code===110}var CommandTokenReader=class extends BaseTokenReader{tryRead(previous){if(this.isEndOfInput())return null;if(canStartJoinKeyword(this.input,this.position)){let keywordJoin=joinkeywordParser.parse(this.input,this.position);if(keywordJoin!==null)return this.position=keywordJoin.newPosition,this.createLexeme(128,keywordJoin.keyword)}let keyword=keywordParser.parse(this.input,this.position);if(keyword!==null){this.position=keyword.newPosition;let lexeme=this.createLexeme(128,keyword.keyword,keyword.comments);return keyword.comments&&keyword.comments.length>0&&(lexeme.positionedComments=[{position:"after",comments:keyword.comments}]),lexeme}if(this.canRead(2)&&this.input[this.position]==="/"&&this.input[this.position+1]==="*"&&this.input[this.position+2]==="+"){this.position+=3;let start=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(start,this.position-2).trim()+" */");this.position++}throw new Error(`Block comment is not closed. position: ${this.position}`)}return null}};var EscapedIdentifierTokenReader=class extends BaseTokenReader{tryRead(previous){if(this.isEndOfInput())return null;let char=this.input[this.position];if(char==="`"){let identifier=this.readEscapedIdentifier("`");return this.createLexeme(64,identifier)}if(char==='"'){let identifier=this.readEscapedIdentifier('"');return this.createLexeme(64,identifier)}if(char==="["&&this.isSqlServerBracketIdentifier(previous)){let identifier=this.readEscapedIdentifier("]");return this.createLexeme(64,identifier)}return null}isSqlServerBracketIdentifier(previous){if(previous?.value==="array")return!1;let start=this.position+1,pos=start;for(;pos<this.input.length&&this.input[pos]!=="]";){let char=this.input[pos];if(char===":"||char===","||char==="+"||char==="-"||char==="*"||char==="/"||char==="("||char===")")return!1;pos++}if(pos>=this.input.length)return!1;let content=this.input.slice(start,pos).trim();return content===""?!1:/^[a-zA-Z_][a-zA-Z0-9_]*(\.[a-zA-Z_][a-zA-Z0-9_]*)*$/.test(content)}readEscapedIdentifier(delimiter){let start=this.position;this.position++;let foundClosing=!1;for(;this.canRead();){if(this.input[this.position]===delimiter){foundClosing=!0;break}this.position++}if(!foundClosing)throw new Error(`Closing delimiter is not found. position: ${start}, delimiter: ${delimiter}
${this.getDebugPositionInfo(start)}`);if(start===this.position)throw new Error(`Closing delimiter is not found. position: ${start}, delimiter: ${delimiter}
${this.getDebugPositionInfo(start)}`);return this.position++,this.input.slice(start+1,this.position-1)}};var IdentifierTokenReader=class extends BaseTokenReader{tryRead(previous){if(this.isEndOfInput())return null;let char=this.input[this.position];if(char==="*")return this.position++,this.createLexeme(64,char);let result=StringUtils.readRegularIdentifier(this.input,this.position);return this.position=result.newPosition,this.createLexeme(64,result.identifier)}};function looksLikeSqlServerMoneyLiteral(input,position){let length=input.length;if(position<0||position+1>=length||input[position]!=="$"||!CharLookupTable.isDigit(input[position+1]))return!1;let pos=position+1;for(;pos<length&&CharLookupTable.isDigit(input[pos]);)pos++;if(pos<length&&input[pos]==="."&&pos+1<length&&CharLookupTable.isDigit(input[pos+1]))return!0;let sawThousandsGroup=!1;for(;pos<length&&input[pos]===",";){let groupStart=pos+1;if(groupStart>=length||!CharLookupTable.isDigit(input[groupStart]))break;let groupEnd=groupStart+3;for(let index=groupStart;index<groupEnd;index++)if(index>=length||!CharLookupTable.isDigit(input[index]))return!1;sawThousandsGroup=!0,pos=groupEnd}if(!sawThousandsGroup)return!1;if(pos<length&&input[pos]==="."){let decimalStart=pos+1;if(decimalStart>=length||!CharLookupTable.isDigit(input[decimalStart]))return!1;let decimalPos=decimalStart;for(;decimalPos<length&&CharLookupTable.isDigit(input[decimalPos]);)decimalPos++}return!0}var SQL_SPECIAL_VALUE_KEYWORDS=["current_catalog","current_date","current_role","current_schema","current_time","current_timestamp","current_user","localtime","localtimestamp","session_user","user"],SQL_SPECIAL_VALUE_KEYWORD_SET=new Set(SQL_SPECIAL_VALUE_KEYWORDS);var keywords=[["null"],["true"],["false"],...SQL_SPECIAL_VALUE_KEYWORDS.map(keyword=>[keyword]),["unbounded"],["normalized"],["nfc","normalized"],["nfd","normalized"],["nfkc","normalized"],["nfkd","normalized"],["nfc"],["nfd"],["nfkc"],["nfkd"]],trie=new KeywordTrie(keywords),literalKeywordParser=new KeywordParser(trie),LiteralTokenReader=class extends BaseTokenReader{tryRead(previous){if(this.isEndOfInput())return null;let char=this.input[this.position];if(char==="'"){let value=this.readSingleQuotedString();return this.createLexeme(1,value)}let keyword=this.tryReadKeyword();if(keyword)return keyword;if(char==="."&&this.canRead(1)&&CharLookupTable.isDigit(this.input[this.position+1]))return this.createLexeme(1,this.readDigit());if(CharLookupTable.isDigit(char))return this.createLexeme(1,this.readDigit());if(char==="$"&&this.isDollarQuotedString())return this.createLexeme(1,this.readDollarQuotedString());if(char==="$"&&looksLikeSqlServerMoneyLiteral(this.input,this.position)){this.position++;let numberPart=this.readMoneyDigit();return this.createLexeme(1,"$"+numberPart)}if((char==="+"||char==="-")&&this.determineSignOrOperator(previous)==="sign"){let sign=char;this.position++;let pos=this.position;for(;this.canRead()&&CharLookupTable.isWhitespace(this.input[this.position]);)this.position++;if(this.canRead()&&(CharLookupTable.isDigit(this.input[this.position])||this.input[this.position]==="."&&this.canRead(1)&&CharLookupTable.isDigit(this.input[this.position+1])))return this.createLexeme(1,sign==="-"?sign+this.readDigit():this.readDigit());this.position=pos-1}return null}tryReadKeyword(){let result=literalKeywordParser.parse(this.input,this.position);return result?(this.position=result.newPosition,this.createLexeme(1,result.keyword)):null}determineSignOrOperator(previous){if(previous===null)return"sign";let operatorContextFlags=9545;return(previous.type&operatorContextFlags)!==0?"operator":"sign"}readDigit(){let start=this.position,hasDot=!1,hasExponent=!1;if(this.canRead(1)&&this.input[this.position]==="0"&&"xbo".includes(this.input[this.position+1].toLowerCase())){let prefixType=this.input[this.position+1].toLowerCase();this.position+=2;let isHex=prefixType==="x";for(;this.canRead();){let c=this.input[this.position];if(CharLookupTable.isDigit(c)||isHex&&CharLookupTable.isHexChar(c))this.position++;else break}return this.input.slice(start,this.position)}for(this.input[start]==="."&&(hasDot=!0,this.position++);this.canRead();){let char=this.input[this.position];if(char==="."&&!hasDot)hasDot=!0;else if((char==="e"||char==="E")&&!hasExponent)hasExponent=!0,this.canRead(1)&&(this.input[this.position+1]==="+"||this.input[this.position+1]==="-")&&this.position++;else if(!CharLookupTable.isDigit(char))break;this.position++}if(start===this.position)throw new Error(`Unexpected character. position: ${start}
${this.getDebugPositionInfo(start)}`);return this.input[start]==="."?"0"+this.input.slice(start,this.position):this.input.slice(start,this.position)}readMoneyDigit(){let start=this.position,hasDot=!1;for(;this.canRead();){let char=this.input[this.position];if(char==="."&&!hasDot)hasDot=!0;else if(!(char===","&&!hasDot)){if(!CharLookupTable.isDigit(char))break}this.position++}if(start===this.position)throw new Error(`Unexpected character. position: ${start}
${this.getDebugPositionInfo(start)}`);return this.input.slice(start,this.position)}readSingleQuotedString(){let start=this.position,closed=!1;for(this.read("'");this.canRead();){let char=this.input[this.position];if(this.position++,char==="\\"&&this.canRead(1)){this.position++;continue}else if(char==="'"){if(this.canRead()&&this.input[this.position]==="'"){this.position++;continue}closed=!0;break}}if(closed===!1)throw new Error(`Single quote is not closed. position: ${start}
${this.getDebugPositionInfo(start)}`);return this.input.slice(start,this.position)}isDollarQuotedString(){if(!this.canRead(1))return!1;if(this.input[this.position+1]==="$")return!0;let pos=this.position+1;for(;pos<this.input.length;){let char=this.input[pos];if(char==="$")return!0;if(!this.isAlphanumeric(char)&&char!=="_")return!1;pos++}return!1}readDollarQuotedString(){let start=this.position;this.position++;let tag="";for(;this.canRead()&&this.input[this.position]!=="$";)tag+=this.input[this.position],this.position++;if(!this.canRead())throw new Error(`Unexpected end of input while reading dollar-quoted string tag at position ${start}`);this.position++;let openingTag="$"+tag+"$",closingTag=openingTag,content="";for(;this.canRead();){if(this.input.substring(this.position,this.position+closingTag.length)===closingTag)return this.position+=closingTag.length,openingTag+content+closingTag;content+=this.input[this.position],this.position++}throw new Error(`Unclosed dollar-quoted string starting at position ${start}. Expected closing tag: ${closingTag}`)}isAlphanumeric(char){if(char.length!==1)return!1;let code=char.charCodeAt(0);return code>=48&&code<=57||code>=65&&code<=90||code>=97&&code<=122}};var trie2=new KeywordTrie([["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"]]),operatorOrTypeTrie=new KeywordTrie([["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"]]),keywordParser2=new KeywordParser(trie2),operatorOrTypeParser=new KeywordParser(operatorOrTypeTrie);var OperatorTokenReader=class extends BaseTokenReader{tryRead(previous){if(this.isEndOfInput())return null;let char=this.input[this.position];if(CharLookupTable.isOperatorSymbol(char)){let start=this.position;for(;this.canRead()&&CharLookupTable.isOperatorSymbol(this.input[this.position])&&(this.position++,!!this.canRead());){let previous2=this.input[this.position-1],next=this.input[this.position];if(previous2==="-"&&next==="-"||previous2==="/"&&next==="*")break}this.position===start&&this.position++;let resut=this.input.slice(start,this.position);return this.createLexeme(2,resut)}let result=operatorOrTypeParser.parse(this.input,this.position);if(result!==null){this.position=result.newPosition;let lexeme=this.createLexeme(8258,result.keyword);return result.comments&&result.comments.length>0&&(lexeme.positionedComments=[...lexeme.positionedComments??[],{position:"after",comments:[...result.comments]}]),lexeme}return result=keywordParser2.parse(this.input,this.position),result!==null?(this.position=result.newPosition,this.createLexeme(2,result.keyword)):null}};var ParameterTokenReader=class extends BaseTokenReader{constructor(input){super(input)}tryRead(previous){if(this.isEndOfInput())return null;if(this.canRead(1)&&this.input[this.position]==="$"&&this.input[this.position+1]==="{"){this.position+=2;let start=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 ${start}`);let identifier=this.input.slice(start,this.position);if(identifier.length===0)throw new Error("Empty parameter name is not allowed: found ${} at position "+(start-2));return this.position++,this.createLexeme(256,"${"+identifier+"}")}let char=this.input[this.position];if(CharLookupTable.isNamedParameterPrefix(char)){if(this.canRead(1)&&CharLookupTable.isOperatorSymbol(this.input[this.position+1])||char===":"&&this.isInArraySliceContext()||char==="$"&&this.isDollarQuotedString()||char==="$"&&looksLikeSqlServerMoneyLiteral(this.input,this.position))return null;this.position++;let start=this.position;for(;this.canRead()&&!CharLookupTable.isDelimiter(this.input[this.position]);)this.position++;let identifier=this.input.slice(start,this.position);return this.createLexeme(256,char+identifier)}if(char==="?"){if(this.canRead(1)){let nextChar=this.input[this.position+1];if(nextChar==="|"||nextChar==="&")return null}return previous&&(previous.type&64||previous.type&1)?null:(this.position++,this.createLexeme(256,char))}return null}isInArraySliceContext(){let pos=this.position-1,bracketDepth=0,parenDepth=0;for(;pos>=0;){let char=this.input[pos];if(char==="]")bracketDepth++;else if(char==="["){if(bracketDepth--,bracketDepth<0){if(pos>0){let prevChar=this.input[pos-1];if(/[a-zA-Z0-9_)\]]/.test(prevChar))return!0}if(pos===0)return!1;break}}else char===")"?parenDepth++:char==="("&&parenDepth--;pos--}return!1}isDollarQuotedString(){if(!this.canRead(1))return!1;if(this.input[this.position+1]==="$")return!0;let pos=this.position+1;for(;pos<this.input.length;){let char=this.input[pos];if(char==="$")return!0;if(!this.isAlphanumeric(char)&&char!=="_")return!1;pos++}return!1}isAlphanumeric(char){if(char.length!==1)return!1;let code=char.charCodeAt(0);return code>=48&&code<=57||code>=65&&code<=90||code>=97&&code<=122}};var trie3=new KeywordTrie([["grouping","sets"],["array"]]),keywordParser3=new KeywordParser(trie3),FunctionTokenReader=class extends BaseTokenReader{tryReadDialectSpecificToken(_previous){return null}tryRead(previous){if(this.isEndOfInput())return null;let dialectToken=this.tryReadDialectSpecificToken(previous);if(dialectToken)return dialectToken;let keyword=keywordParser3.parse(this.input,this.position);if(keyword!==null)return this.position=keyword.newPosition,this.createLexeme(2048,keyword.keyword);let result=StringUtils.tryReadRegularIdentifier(this.input,this.position);if(!result)return null;this.position=result.newPosition;var shift=StringUtils.readWhiteSpaceAndComment(this.input,this.position).position-this.position;return this.canRead(shift)&&this.input[this.position+shift]==="("?this.createLexeme(2048,result.identifier):null}};var PostgresFunctionTokenReader=class extends FunctionTokenReader{tryReadDialectSpecificToken(_previous){return this.input.slice(this.position,this.position+6).toLowerCase()!=="array["?null:(this.position+=5,this.createLexeme(2048,"array"))}};var SpecialSymbolTokenReader=class _SpecialSymbolTokenReader extends BaseTokenReader{static{this.SPECIAL_SYMBOL_TOKENS={".":32,",":16,"(":4,")":8,"[":512,"]":1024}}tryRead(previous){if(this.isEndOfInput())return null;let char=this.input[this.position];return char in _SpecialSymbolTokenReader.SPECIAL_SYMBOL_TOKENS?(this.position++,this.createLexeme(_SpecialSymbolTokenReader.SPECIAL_SYMBOL_TOKENS[char],char)):null}};var QUOTE_CHAR_CODE=39,AMPERSAND_CHAR_CODE=38,StringSpecifierTokenReader=class extends BaseTokenReader{tryRead(previous){let start=this.position;if(!this.canRead(1))return null;let firstCode=this.input.charCodeAt(start),secondCode=this.input.charCodeAt(start+1);return secondCode===QUOTE_CHAR_CODE&&this.isSingleLetterStringPrefix(firstCode)?(this.position=start+1,this.createLexeme(4096,this.input[start])):this.canRead(2)&&this.isUnicodePrefix(firstCode)&&secondCode===AMPERSAND_CHAR_CODE&&this.input.charCodeAt(start+2)===QUOTE_CHAR_CODE?(this.position=start+2,this.createLexeme(4096,this.input.slice(start,start+2))):null}isSingleLetterStringPrefix(charCode){return charCode===69||charCode===101||charCode===88||charCode===120||charCode===66||charCode===98}isUnicodePrefix(charCode){return charCode===85||charCode===117}};var TokenReaderManager=class{constructor(input,position=0){this.input=input,this.position=position,this.readers=[]}register(reader){return this.readers.push(reader),this}registerAll(readers){for(let i=0;i<readers.length;i++)this.readers.push(readers[i]);return this}tryRead(position,previous){this.position=position;let readers=this.readers;for(let i=0;i<readers.length;i++){let reader=readers[i];reader.setPosition(position);let lexeme=reader.tryRead(previous);if(lexeme)return this.position=reader.getPosition(),lexeme}return null}getMaxPosition(){return this.position}getInput(){return this.input}getCacheStats(){return{hits:0,misses:0,ratio:0}}};var trie4=new KeywordTrie([["double","precision"],["character","varying"],["time","without","time","zone"],["time","with","time","zone"],["timestamp","without","time","zone"],["timestamp","with","time","zone"]]),typeParser=new KeywordParser(trie4),TypeTokenReader=class extends BaseTokenReader{tryRead(previous){if(this.isEndOfInput())return null;let keyword=typeParser.parse(this.input,this.position);if(keyword!==null){this.position=keyword.newPosition;let lexeme=this.createLexeme(8192,keyword.keyword);if(keyword.comments&&keyword.comments.length>0){let existing=lexeme.positionedComments??[];lexeme.positionedComments=[...existing,{position:"after",comments:[...keyword.comments]}]}return lexeme}if(previous===null)return null;let result=StringUtils.tryReadRegularIdentifier(this.input,this.position);return result?(this.position=result.newPosition,previous.type&128&&previous.value==="as"?this.createLexeme(8256,result.identifier):previous.type&2&&previous.value==="::"?this.createLexeme(8192,result.identifier):null):null}};var SELECT_LIST_MODIFIER_VALUES=new Set(["all","distinct","distinct on","top"]),SqlTokenizer=class _SqlTokenizer{constructor(input){this.lineStartPositions=null;this.input=input,this.position=0,this.readerManager=new TokenReaderManager(input).register(new EscapedIdentifierTokenReader(input)).register(new ParameterTokenReader(input)).register(new StringSpecifierTokenReader(input)).register(new LiteralTokenReader(input)).register(new SpecialSymbolTokenReader(input)).register(new CommandTokenReader(input)).register(new OperatorTokenReader(input)).register(new TypeTokenReader(input)).register(new PostgresFunctionTokenReader(input)).register(new IdentifierTokenReader(input))}isEndOfInput(shift=0){return this.position+shift>=this.input.length}canRead(shift=0){return!this.isEndOfInput(shift)}isSelectListModifier(lexeme){return SELECT_LIST_MODIFIER_VALUES.has(lexeme.value.toLowerCase())}isMeaningfulSelectItemToken(lexeme){let isSelectableOperator=(lexeme.type&2)!==0&&(lexeme.value==="*"||lexeme.value==="exists");return(lexeme.type&64)!==0||(lexeme.type&1)!==0||isSelectableOperator?!0:(lexeme.type&128)!==0?!this.isSelectListModifier(lexeme):(lexeme.type&16)===0&&(lexeme.type&2)===0}tokenize(options){return options?.preserveFormatting?this.tokenizeWithFormatting():new _SqlTokenizer(this.input).readLexemes()}readLexmes(){return this.readLexemes()}readLexemes(){let segment=this.readNextStatement(0);return segment?segment.lexemes:[]}tokenizeBasic(){let segment=this.readNextStatement(0);return segment?segment.lexemes:[]}readNextStatement(startPosition=0,carryComments=null){let length=this.input.length;if(startPosition>=length)return null;this.position=startPosition;let statementStart=startPosition,pendingLeading=carryComments?[...carryComments]:null,tokenData=[],previous=null;for(;this.canRead();){let prefixComment=this.readComment();if(this.position=prefixComment.position,!this.canRead()){pendingLeading=this.mergeComments(pendingLeading,prefixComment.lines);break}if(this.input[this.position]===";"){pendingLeading=this.mergeComments(pendingLeading,prefixComment.lines);break}let lexeme=this.readerManager.tryRead(this.position,previous);if(lexeme===null)throw new Error(`Unexpected character. actual: ${this.input[this.position]}, position: ${this.position}
${this.getDebugPositionInfo(this.position)}`);let tokenStartPos=this.position,tokenEndPos=this.position=this.readerManager.getMaxPosition(),suffixComment=this.readComment();this.position=suffixComment.position;let prefixComments=this.mergeComments(pendingLeading,prefixComment.lines);pendingLeading=null,tokenData.push({lexeme,startPos:tokenStartPos,endPos:tokenEndPos,prefixComments,suffixComments:suffixComment.lines}),previous=lexeme}let statementEnd=this.position,lexemes=this.hasCommentMetadata(tokenData)?this.buildLexemesFromTokenData(tokenData):this.extractLexemes(tokenData),nextPosition=this.skipPastTerminator(statementEnd);return{lexemes,statementStart,statementEnd,nextPosition,rawText:this.input.slice(statementStart,statementEnd),leadingComments:pendingLeading}}hasCommentMetadata(tokenData){for(let i=0;i<tokenData.length;i++){let token=tokenData[i];if(token.prefixComments&&token.prefixComments.length>0||token.suffixComments&&token.suffixComments.length>0||token.lexeme.comments&&token.lexeme.comments.length>0||token.lexeme.positionedComments&&token.lexeme.positionedComments.length>0)return!0}return!1}extractLexemes(tokenData){let lexemes=new Array(tokenData.length),resolveLineColumn=this.createOrderedLineColumnResolver();for(let i=0;i<tokenData.length;i++){let token=tokenData[i],lexeme=token.lexeme,startInfo=resolveLineColumn(token.startPos),endInfo=resolveLineColumn(token.endPos);lexeme.position={startPosition:token.startPos,endPosition:token.endPos,startLine:startInfo.line,startColumn:startInfo.column,endLine:endInfo.line,endColumn:endInfo.column},lexemes[i]=lexeme}return lexemes}buildLexemesFromTokenData(tokenData){let lexemes=new Array(tokenData.length),resolveLineColumn=this.createOrderedLineColumnResolver(),hasPositionedComments=!1;for(let i=0;i<tokenData.length;i++){let current=tokenData[i],lexeme=current.lexeme,lexemeValue=lexeme.value;if(current.suffixComments&¤t.suffixComments.length>0){if(lexemeValue==="select"){let suffixComments=current.suffixComments,targetIndex=i+1;for(;targetIndex<tokenData.length;){let target=tokenData[targetIndex];if(this.isMeaningfulSelectItemToken(target.lexeme)){target.prefixComments||(target.prefixComments=[]),target.prefixComments.unshift(...suffixComments),current.suffixComments=null;break}targetIndex++}}if(lexemeValue==="from"){let suffixComments=current.suffixComments,targetIndex=i+1;for(;targetIndex<tokenData.length;){let target=tokenData[targetIndex];if(!((target.lexeme.type&128)!==0)){target.prefixComments||(target.prefixComments=[]),target.prefixComments.unshift(...suffixComments),current.suffixComments=null;break}targetIndex++}}if(lexeme.type&16){let suffixComments=current.suffixComments,targetIndex=i+1;if(targetIndex<tokenData.length){let target=tokenData[targetIndex];target.prefixComments||(target.prefixComments=[]),target.prefixComments.unshift(...suffixComments),current.suffixComments=null}}if(current.suffixComments){let normalized=lexemeValue.toLowerCase();if(normalized==="union"||normalized==="intersect"||normalized==="except"){let suffixComments=current.suffixComments,targetIndex=i+1;for(;targetIndex<tokenData.length;){let target=tokenData[targetIndex];if(target.lexeme.value.toLowerCase()==="select"){target.prefixComments||(target.prefixComments=[]),target.prefixComments.unshift(...suffixComments),current.suffixComments=null;break}targetIndex++}}}}this.attachCommentsToLexeme(lexeme,current);let startInfo=resolveLineColumn(current.startPos),endInfo=resolveLineColumn(current.endPos);lexeme.position={startPosition:current.startPos,endPosition:current.endPos,startLine:startInfo.line,startColumn:startInfo.column,endLine:endInfo.line,endColumn:endInfo.column},lexeme.positionedComments&&lexeme.positionedComments.length>0&&(hasPositionedComments=!0),lexemes[i]=lexeme}return hasPositionedComments&&this.relocateOrderByComments(lexemes),lexemes}skipPastTerminator(position){let next=position;return next<this.input.length&&this.input[next]===";"&&next++,this.skipWhitespaceAndComments(next)}mergeComments(base,addition){return addition&&addition.length>0?!base||base.length===0?[...addition]:[...base,...addition]:base?[...base]:null}relocateOrderByComments(lexemes){for(let i=0;i<lexemes.length-1;i++){let current=lexemes[i];if(current.value.toLowerCase()!=="order by"||!current.positionedComments)continue;let afterComments=current.positionedComments.filter(comment=>comment.position==="after"&&comment.comments&&comment.comments.length>0);if(afterComments.length===0)continue;current.positionedComments=current.positionedComments.filter(comment=>comment.position!=="after"),current.positionedComments.length===0&&(current.positionedComments=void 0);let target=lexemes[i+1],beforeComments=afterComments.map(comment=>({position:"before",comments:[...comment.comments]}));target.positionedComments&&target.positionedComments.length>0?target.positionedComments=[...beforeComments,...target.positionedComments]:target.positionedComments=beforeComments}}attachCommentsToLexeme(lexeme,tokenData){let newPositionedComments=[],existingLegacyComments=[],allLegacyComments=[];lexeme.positionedComments&&lexeme.positionedComments.length>0&&newPositionedComments.push(...lexeme.positionedComments),lexeme.comments&&lexeme.comments.length>0&&(existingLegacyComments.push(...lexeme.comments),allLegacyComments.push(...lexeme.comments)),tokenData.prefixComments&&tokenData.prefixComments.length>0&&(allLegacyComments.push(...tokenData.prefixComments),newPositionedComments.push({position:"before",comments:[...tokenData.prefixComments]})),tokenData.suffixComments&&tokenData.suffixComments.length>0&&(allLegacyComments.push(...tokenData.suffixComments),newPositionedComments.push({position:"after",comments:[...tokenData.suffixComments]})),newPositionedComments.length>0?(lexeme.positionedComments=newPositionedCom