rawsql-ts 0.1.1-beta.1 → 0.1.1-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/dist/esm/index.js +17 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/models/BinarySelectQuery.js +137 -0
- package/dist/esm/models/BinarySelectQuery.js.map +1 -0
- package/dist/esm/models/Clause.js +289 -0
- package/dist/esm/models/Clause.js.map +1 -0
- package/dist/esm/models/KeywordTrie.js +48 -0
- package/dist/esm/models/KeywordTrie.js.map +1 -0
- package/dist/esm/models/Lexeme.js +18 -0
- package/dist/esm/models/Lexeme.js.map +1 -0
- package/dist/esm/models/SelectQuery.js +5 -0
- package/dist/esm/models/SelectQuery.js.map +1 -0
- package/dist/esm/models/SimpleSelectQuery.js +288 -0
- package/dist/esm/models/SimpleSelectQuery.js.map +1 -0
- package/dist/esm/models/SqlComponent.js +22 -0
- package/dist/esm/models/SqlComponent.js.map +1 -0
- package/dist/esm/models/ValueComponent.js +223 -0
- package/dist/esm/models/ValueComponent.js.map +1 -0
- package/dist/esm/models/ValuesQuery.js +12 -0
- package/dist/esm/models/ValuesQuery.js.map +1 -0
- package/dist/esm/parsers/CommandExpressionParser.js +120 -0
- package/dist/esm/parsers/CommandExpressionParser.js.map +1 -0
- package/dist/esm/parsers/CommonTableParser.js +58 -0
- package/dist/esm/parsers/CommonTableParser.js.map +1 -0
- package/dist/esm/parsers/ForClauseParser.js +54 -0
- package/dist/esm/parsers/ForClauseParser.js.map +1 -0
- package/dist/esm/parsers/FromClauseParser.js +43 -0
- package/dist/esm/parsers/FromClauseParser.js.map +1 -0
- package/dist/esm/parsers/FunctionExpressionParser.js +174 -0
- package/dist/esm/parsers/FunctionExpressionParser.js.map +1 -0
- package/dist/esm/parsers/GroupByParser.js +54 -0
- package/dist/esm/parsers/GroupByParser.js.map +1 -0
- package/dist/esm/parsers/HavingParser.js +32 -0
- package/dist/esm/parsers/HavingParser.js.map +1 -0
- package/dist/esm/parsers/IdentifierParser.js +35 -0
- package/dist/esm/parsers/IdentifierParser.js.map +1 -0
- package/dist/esm/parsers/JoinClauseParser.js +101 -0
- package/dist/esm/parsers/JoinClauseParser.js.map +1 -0
- package/dist/esm/parsers/KeywordParser.js +87 -0
- package/dist/esm/parsers/KeywordParser.js.map +1 -0
- package/dist/esm/parsers/LimitClauseParser.js +46 -0
- package/dist/esm/parsers/LimitClauseParser.js.map +1 -0
- package/dist/esm/parsers/LiteralParser.js +34 -0
- package/dist/esm/parsers/LiteralParser.js.map +1 -0
- package/dist/esm/parsers/OrderByClauseParser.js +73 -0
- package/dist/esm/parsers/OrderByClauseParser.js.map +1 -0
- package/dist/esm/parsers/OverExpressionParser.js +40 -0
- package/dist/esm/parsers/OverExpressionParser.js.map +1 -0
- package/dist/esm/parsers/ParameterExpressionParser.js +11 -0
- package/dist/esm/parsers/ParameterExpressionParser.js.map +1 -0
- package/dist/esm/parsers/ParenExpressionParser.js +29 -0
- package/dist/esm/parsers/ParenExpressionParser.js.map +1 -0
- package/dist/esm/parsers/PartitionByParser.js +49 -0
- package/dist/esm/parsers/PartitionByParser.js.map +1 -0
- package/dist/esm/parsers/SelectClauseParser.js +80 -0
- package/dist/esm/parsers/SelectClauseParser.js.map +1 -0
- package/dist/esm/parsers/SelectQueryParser.js +149 -0
- package/dist/esm/parsers/SelectQueryParser.js.map +1 -0
- package/dist/esm/parsers/SourceAliasExpressionParser.js +45 -0
- package/dist/esm/parsers/SourceAliasExpressionParser.js.map +1 -0
- package/dist/esm/parsers/SourceExpressionParser.js +31 -0
- package/dist/esm/parsers/SourceExpressionParser.js.map +1 -0
- package/dist/esm/parsers/SourceParser.js +115 -0
- package/dist/esm/parsers/SourceParser.js.map +1 -0
- package/dist/esm/parsers/SqlTokenizer.js +170 -0
- package/dist/esm/parsers/SqlTokenizer.js.map +1 -0
- package/dist/esm/parsers/StringSpecifierExpressionParser.js +18 -0
- package/dist/esm/parsers/StringSpecifierExpressionParser.js.map +1 -0
- package/dist/esm/parsers/UnaryExpressionParser.js +26 -0
- package/dist/esm/parsers/UnaryExpressionParser.js.map +1 -0
- package/dist/esm/parsers/ValueParser.js +132 -0
- package/dist/esm/parsers/ValueParser.js.map +1 -0
- package/dist/esm/parsers/ValuesQueryParser.js +82 -0
- package/dist/esm/parsers/ValuesQueryParser.js.map +1 -0
- package/dist/esm/parsers/WhereClauseParser.js +32 -0
- package/dist/esm/parsers/WhereClauseParser.js.map +1 -0
- package/dist/esm/parsers/WindowClauseParser.js +41 -0
- package/dist/esm/parsers/WindowClauseParser.js.map +1 -0
- package/dist/esm/parsers/WindowExpressionParser.js +159 -0
- package/dist/esm/parsers/WindowExpressionParser.js.map +1 -0
- package/dist/esm/parsers/WithClauseParser.js +53 -0
- package/dist/esm/parsers/WithClauseParser.js.map +1 -0
- package/dist/esm/tokenReaders/BaseTokenReader.js +78 -0
- package/dist/esm/tokenReaders/BaseTokenReader.js.map +1 -0
- package/dist/esm/tokenReaders/CommandTokenReader.js +141 -0
- package/dist/esm/tokenReaders/CommandTokenReader.js.map +1 -0
- package/dist/esm/tokenReaders/FunctionTokenReader.js +41 -0
- package/dist/esm/tokenReaders/FunctionTokenReader.js.map +1 -0
- package/dist/esm/tokenReaders/IdentifierTokenReader.js +66 -0
- package/dist/esm/tokenReaders/IdentifierTokenReader.js.map +1 -0
- package/dist/esm/tokenReaders/LiteralTokenReader.js +185 -0
- package/dist/esm/tokenReaders/LiteralTokenReader.js.map +1 -0
- package/dist/esm/tokenReaders/OperatorTokenReader.js +94 -0
- package/dist/esm/tokenReaders/OperatorTokenReader.js.map +1 -0
- package/dist/esm/tokenReaders/ParameterTokenReader.js +40 -0
- package/dist/esm/tokenReaders/ParameterTokenReader.js.map +1 -0
- package/dist/esm/tokenReaders/StringSpecifierTokenReader.js +27 -0
- package/dist/esm/tokenReaders/StringSpecifierTokenReader.js.map +1 -0
- package/dist/esm/tokenReaders/SymbolTokenReader.js +31 -0
- package/dist/esm/tokenReaders/SymbolTokenReader.js.map +1 -0
- package/dist/esm/tokenReaders/TokenReaderManager.js +106 -0
- package/dist/esm/tokenReaders/TokenReaderManager.js.map +1 -0
- package/dist/esm/tokenReaders/TypeTokenReader.js +55 -0
- package/dist/esm/tokenReaders/TypeTokenReader.js.map +1 -0
- package/dist/esm/transformers/CTEBuilder.js +184 -0
- package/dist/esm/transformers/CTEBuilder.js.map +1 -0
- package/dist/esm/transformers/CTECollector.js +384 -0
- package/dist/esm/transformers/CTECollector.js.map +1 -0
- package/dist/esm/transformers/CTEDisabler.js +321 -0
- package/dist/esm/transformers/CTEDisabler.js.map +1 -0
- package/dist/esm/transformers/CTEInjector.js +79 -0
- package/dist/esm/transformers/CTEInjector.js.map +1 -0
- package/dist/esm/transformers/CTENormalizer.js +42 -0
- package/dist/esm/transformers/CTENormalizer.js.map +1 -0
- package/dist/esm/transformers/Formatter.js +463 -0
- package/dist/esm/transformers/Formatter.js.map +1 -0
- package/dist/esm/transformers/QueryConverter.js +115 -0
- package/dist/esm/transformers/QueryConverter.js.map +1 -0
- package/dist/esm/transformers/SelectValueCollector.js +245 -0
- package/dist/esm/transformers/SelectValueCollector.js.map +1 -0
- package/dist/esm/transformers/SelectableColumnCollector.js +318 -0
- package/dist/esm/transformers/SelectableColumnCollector.js.map +1 -0
- package/dist/esm/transformers/TableColumnResolver.js +2 -0
- package/dist/esm/transformers/TableColumnResolver.js.map +1 -0
- package/dist/esm/transformers/TableSourceCollector.js +380 -0
- package/dist/esm/transformers/TableSourceCollector.js.map +1 -0
- package/dist/esm/transformers/UpstreamSelectQueryFinder.js +125 -0
- package/dist/esm/transformers/UpstreamSelectQueryFinder.js.map +1 -0
- package/dist/esm/types/index.d.ts +14 -0
- package/dist/esm/types/models/BinarySelectQuery.d.ts +91 -0
- package/dist/esm/types/models/Clause.d.ts +189 -0
- package/dist/esm/types/models/KeywordTrie.d.ts +11 -0
- package/dist/esm/types/models/Lexeme.d.ts +25 -0
- package/dist/esm/types/models/SelectQuery.d.ts +5 -0
- package/dist/esm/types/models/SimpleSelectQuery.d.ts +167 -0
- package/dist/esm/types/models/SqlComponent.d.ts +18 -0
- package/dist/esm/types/models/ValueComponent.d.ts +158 -0
- package/dist/esm/types/models/ValuesQuery.d.ts +10 -0
- package/dist/esm/types/parsers/CommandExpressionParser.d.ts +15 -0
- package/dist/esm/types/parsers/CommonTableParser.d.ts +9 -0
- package/dist/esm/types/parsers/ForClauseParser.d.ts +9 -0
- package/dist/esm/types/parsers/FromClauseParser.d.ts +9 -0
- package/dist/esm/types/parsers/FunctionExpressionParser.d.ts +22 -0
- package/dist/esm/types/parsers/GroupByParser.d.ts +10 -0
- package/dist/esm/types/parsers/HavingParser.d.ts +9 -0
- package/dist/esm/types/parsers/IdentifierParser.d.ts +8 -0
- package/dist/esm/types/parsers/JoinClauseParser.d.ts +14 -0
- package/dist/esm/types/parsers/KeywordParser.d.ts +17 -0
- package/dist/esm/types/parsers/LimitClauseParser.d.ts +9 -0
- package/dist/esm/types/parsers/LiteralParser.d.ts +8 -0
- package/dist/esm/types/parsers/OrderByClauseParser.d.ts +10 -0
- package/dist/esm/types/parsers/OverExpressionParser.d.ts +9 -0
- package/dist/esm/types/parsers/ParameterExpressionParser.d.ts +8 -0
- package/dist/esm/types/parsers/ParenExpressionParser.d.ts +8 -0
- package/dist/esm/types/parsers/PartitionByParser.d.ts +9 -0
- package/dist/esm/types/parsers/SelectClauseParser.d.ts +10 -0
- package/dist/esm/types/parsers/SelectQueryParser.d.ts +13 -0
- package/dist/esm/types/parsers/SourceAliasExpressionParser.d.ts +8 -0
- package/dist/esm/types/parsers/SourceExpressionParser.d.ts +8 -0
- package/dist/esm/types/parsers/SourceParser.d.ts +13 -0
- package/dist/esm/types/parsers/SqlTokenizer.d.ts +64 -0
- package/dist/esm/types/parsers/StringSpecifierExpressionParser.d.ts +8 -0
- package/dist/esm/types/parsers/UnaryExpressionParser.d.ts +8 -0
- package/dist/esm/types/parsers/ValueParser.d.ts +14 -0
- package/dist/esm/types/parsers/ValuesQueryParser.d.ts +10 -0
- package/dist/esm/types/parsers/WhereClauseParser.d.ts +9 -0
- package/dist/esm/types/parsers/WindowClauseParser.d.ts +9 -0
- package/dist/esm/types/parsers/WindowExpressionParser.d.ts +12 -0
- package/dist/esm/types/parsers/WithClauseParser.d.ts +9 -0
- package/dist/esm/types/tokenReaders/BaseTokenReader.d.ts +43 -0
- package/dist/esm/types/tokenReaders/CommandTokenReader.d.ts +7 -0
- package/dist/esm/types/tokenReaders/FunctionTokenReader.d.ts +11 -0
- package/dist/esm/types/tokenReaders/IdentifierTokenReader.d.ts +15 -0
- package/dist/esm/types/tokenReaders/LiteralTokenReader.d.ts +23 -0
- package/dist/esm/types/tokenReaders/OperatorTokenReader.d.ts +5 -0
- package/dist/esm/types/tokenReaders/ParameterTokenReader.d.ts +11 -0
- package/dist/esm/types/tokenReaders/StringSpecifierTokenReader.d.ts +8 -0
- package/dist/esm/types/tokenReaders/SymbolTokenReader.d.ts +12 -0
- package/dist/esm/types/tokenReaders/TokenReaderManager.d.ts +53 -0
- package/dist/esm/types/tokenReaders/TypeTokenReader.d.ts +11 -0
- package/dist/esm/types/transformers/CTEBuilder.d.ts +52 -0
- package/dist/esm/types/transformers/CTECollector.d.ts +82 -0
- package/dist/esm/types/transformers/CTEDisabler.d.ts +77 -0
- package/dist/esm/types/transformers/CTEInjector.d.ts +40 -0
- package/dist/esm/types/transformers/CTENormalizer.d.ts +25 -0
- package/dist/esm/types/transformers/Formatter.d.ts +82 -0
- package/dist/esm/types/transformers/QueryConverter.d.ts +41 -0
- package/dist/esm/types/transformers/SelectValueCollector.d.ts +60 -0
- package/dist/esm/types/transformers/SelectableColumnCollector.d.ts +72 -0
- package/dist/esm/types/transformers/TableColumnResolver.d.ts +10 -0
- package/dist/esm/types/transformers/TableSourceCollector.d.ts +92 -0
- package/dist/esm/types/transformers/UpstreamSelectQueryFinder.d.ts +27 -0
- package/dist/esm/types/utils/charLookupTable.d.ts +11 -0
- package/dist/esm/types/utils/stringUtils.d.ts +43 -0
- package/dist/esm/utils/charLookupTable.js +69 -0
- package/dist/esm/utils/charLookupTable.js.map +1 -0
- package/dist/esm/utils/stringUtils.js +164 -0
- package/dist/esm/utils/stringUtils.js.map +1 -0
- package/package.json +6 -3
@@ -0,0 +1,14 @@
|
|
1
|
+
import { JoinClause } from "../models/Clause";
|
2
|
+
import { Lexeme } from "../models/Lexeme";
|
3
|
+
export declare class JoinClauseParser {
|
4
|
+
static tryParse(lexemes: Lexeme[], index: number): {
|
5
|
+
value: JoinClause[];
|
6
|
+
newIndex: number;
|
7
|
+
} | null;
|
8
|
+
private static isJoinKeyword;
|
9
|
+
private static parseLateral;
|
10
|
+
private static isJoinCommand;
|
11
|
+
private static parseJoinClause;
|
12
|
+
private static tryParseJoinOn;
|
13
|
+
private static tryParseJoinUsing;
|
14
|
+
}
|
@@ -0,0 +1,17 @@
|
|
1
|
+
import { KeywordTrie } from "../models/KeywordTrie";
|
2
|
+
export declare enum KeywordMatchResult {
|
3
|
+
NotAKeyword = 0,// "Not recognized as a keyword"
|
4
|
+
PartialOnly = 1,// "Partial match (this will not be the end)"
|
5
|
+
PartialOrFinal = 2,// "Partial or complete match (it can stop here)"
|
6
|
+
Final = 3
|
7
|
+
}
|
8
|
+
export declare class KeywordParser {
|
9
|
+
private trie;
|
10
|
+
constructor(trie: KeywordTrie);
|
11
|
+
private isEndOfInput;
|
12
|
+
private canParse;
|
13
|
+
parse(input: string, position: number): {
|
14
|
+
keyword: string;
|
15
|
+
newPosition: number;
|
16
|
+
} | null;
|
17
|
+
}
|
@@ -0,0 +1,9 @@
|
|
1
|
+
import { LimitClause as LimitClause } from "../models/Clause";
|
2
|
+
import { Lexeme } from "../models/Lexeme";
|
3
|
+
export declare class LimitClauseParser {
|
4
|
+
static parse(query: string): LimitClause;
|
5
|
+
static parseFromLexeme(lexemes: Lexeme[], index: number): {
|
6
|
+
value: LimitClause;
|
7
|
+
newIndex: number;
|
8
|
+
};
|
9
|
+
}
|
@@ -0,0 +1,10 @@
|
|
1
|
+
import { OrderByClause } from "../models/Clause";
|
2
|
+
import { Lexeme } from "../models/Lexeme";
|
3
|
+
export declare class OrderByClauseParser {
|
4
|
+
static parse(query: string): OrderByClause;
|
5
|
+
static parseFromLexeme(lexemes: Lexeme[], index: number): {
|
6
|
+
value: OrderByClause;
|
7
|
+
newIndex: number;
|
8
|
+
};
|
9
|
+
private static parseItem;
|
10
|
+
}
|
@@ -0,0 +1,9 @@
|
|
1
|
+
import { Lexeme } from "../models/Lexeme";
|
2
|
+
import { OverExpression } from "../models/ValueComponent";
|
3
|
+
export declare class OverExpressionParser {
|
4
|
+
static parse(query: string): OverExpression;
|
5
|
+
static parseFromLexeme(lexemes: Lexeme[], index: number): {
|
6
|
+
value: OverExpression;
|
7
|
+
newIndex: number;
|
8
|
+
};
|
9
|
+
}
|
@@ -0,0 +1,8 @@
|
|
1
|
+
import { Lexeme } from "../models/Lexeme";
|
2
|
+
import { ValueComponent } from "../models/ValueComponent";
|
3
|
+
export declare class ParameterExpressionParser {
|
4
|
+
static parseFromLexeme(lexemes: Lexeme[], index: number): {
|
5
|
+
value: ValueComponent;
|
6
|
+
newIndex: number;
|
7
|
+
};
|
8
|
+
}
|
@@ -0,0 +1,8 @@
|
|
1
|
+
import { Lexeme } from "../models/Lexeme";
|
2
|
+
import { ValueComponent } from "../models/ValueComponent";
|
3
|
+
export declare class ParenExpressionParser {
|
4
|
+
static parseFromLexeme(lexemes: Lexeme[], index: number): {
|
5
|
+
value: ValueComponent;
|
6
|
+
newIndex: number;
|
7
|
+
};
|
8
|
+
}
|
@@ -0,0 +1,9 @@
|
|
1
|
+
import { PartitionByClause } from "../models/Clause";
|
2
|
+
import { Lexeme } from "../models/Lexeme";
|
3
|
+
export declare class PartitionByParser {
|
4
|
+
static parse(query: string): PartitionByClause;
|
5
|
+
static parseFromLexeme(lexemes: Lexeme[], index: number): {
|
6
|
+
value: PartitionByClause;
|
7
|
+
newIndex: number;
|
8
|
+
};
|
9
|
+
}
|
@@ -0,0 +1,10 @@
|
|
1
|
+
import { SelectClause } from "../models/Clause";
|
2
|
+
import { Lexeme } from "../models/Lexeme";
|
3
|
+
export declare class SelectClauseParser {
|
4
|
+
static parse(query: string): SelectClause;
|
5
|
+
static parseFromLexeme(lexemes: Lexeme[], index: number): {
|
6
|
+
value: SelectClause;
|
7
|
+
newIndex: number;
|
8
|
+
};
|
9
|
+
private static parseItem;
|
10
|
+
}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
import { Lexeme } from "../models/Lexeme";
|
2
|
+
import { SelectQuery } from "../models/SelectQuery";
|
3
|
+
export declare class SelectQueryParser {
|
4
|
+
static parse(query: string): SelectQuery;
|
5
|
+
private static unionCommandSet;
|
6
|
+
private static selectCommandSet;
|
7
|
+
static parseFromLexeme(lexemes: Lexeme[], index: number): {
|
8
|
+
value: SelectQuery;
|
9
|
+
newIndex: number;
|
10
|
+
};
|
11
|
+
private static parseSimpleSelectQuery;
|
12
|
+
private static parseValuesQuery;
|
13
|
+
}
|
@@ -0,0 +1,8 @@
|
|
1
|
+
import { SourceAliasExpression } from "../models/Clause";
|
2
|
+
import { Lexeme } from "../models/Lexeme";
|
3
|
+
export declare class SourceAliasExpressionParser {
|
4
|
+
static parseFromLexeme(lexemes: Lexeme[], index: number): {
|
5
|
+
value: SourceAliasExpression;
|
6
|
+
newIndex: number;
|
7
|
+
};
|
8
|
+
}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
import { SourceComponent } from "../models/Clause";
|
2
|
+
import { Lexeme } from "../models/Lexeme";
|
3
|
+
export declare class SourceParser {
|
4
|
+
static parse(query: string): SourceComponent;
|
5
|
+
static parseFromLexeme(lexemes: Lexeme[], index: number): {
|
6
|
+
value: SourceComponent;
|
7
|
+
newIndex: number;
|
8
|
+
};
|
9
|
+
private static parseTableSource;
|
10
|
+
private static parseFunctionSource;
|
11
|
+
private static parseParenSource;
|
12
|
+
private static parseSubQuerySource;
|
13
|
+
}
|
@@ -0,0 +1,64 @@
|
|
1
|
+
import { Lexeme } from '../models/Lexeme';
|
2
|
+
/**
|
3
|
+
* Class responsible for tokenizing SQL input.
|
4
|
+
*/
|
5
|
+
export declare class SqlTokenizer {
|
6
|
+
/**
|
7
|
+
* The input SQL string to be tokenized.
|
8
|
+
*/
|
9
|
+
private input;
|
10
|
+
/**
|
11
|
+
* Current position within the input string.
|
12
|
+
*/
|
13
|
+
private position;
|
14
|
+
/**
|
15
|
+
* Manager responsible for handling token readers.
|
16
|
+
*/
|
17
|
+
private readerManager;
|
18
|
+
/**
|
19
|
+
* Initializes a new instance of the SqlTokenizer.
|
20
|
+
*/
|
21
|
+
constructor(input: string);
|
22
|
+
/**
|
23
|
+
* Checks if the end of input is reached.
|
24
|
+
*
|
25
|
+
* @param shift - The shift to consider beyond the current position.
|
26
|
+
* @returns True if the end of input is reached; otherwise, false.
|
27
|
+
*/
|
28
|
+
private isEndOfInput;
|
29
|
+
/**
|
30
|
+
* Checks if more input can be read.
|
31
|
+
*
|
32
|
+
* @param shift - The shift to consider beyond the current position.
|
33
|
+
* @returns True if more input can be read; otherwise, false.
|
34
|
+
*/
|
35
|
+
private canRead;
|
36
|
+
/**
|
37
|
+
* Reads the lexemes from the input string.
|
38
|
+
*
|
39
|
+
* @returns An array of lexemes extracted from the input string.
|
40
|
+
* @throws Error if an unexpected character is encountered.
|
41
|
+
*/
|
42
|
+
readLexmes(): Lexeme[];
|
43
|
+
/**
|
44
|
+
* Adds pending comments to the last token.
|
45
|
+
*/
|
46
|
+
private addPendingCommentsToLastToken;
|
47
|
+
/**
|
48
|
+
* Adds comments to the token.
|
49
|
+
*/
|
50
|
+
private addCommentsToToken;
|
51
|
+
/**
|
52
|
+
* Skips whitespace characters and SQL comments in the input.
|
53
|
+
*
|
54
|
+
* @remarks This method updates the position pointer.
|
55
|
+
*/
|
56
|
+
private readComment;
|
57
|
+
/**
|
58
|
+
* Gets debug information for error reporting.
|
59
|
+
*
|
60
|
+
* @param errPosition - The position where the error occurred.
|
61
|
+
* @returns A string containing the debug position information.
|
62
|
+
*/
|
63
|
+
private getDebugPositionInfo;
|
64
|
+
}
|
@@ -0,0 +1,8 @@
|
|
1
|
+
import { Lexeme } from "../models/Lexeme";
|
2
|
+
import { ValueComponent } from "../models/ValueComponent";
|
3
|
+
export declare class StringSpecifierExpressionParser {
|
4
|
+
static parseFromLexeme(lexemes: Lexeme[], index: number): {
|
5
|
+
value: ValueComponent;
|
6
|
+
newIndex: number;
|
7
|
+
};
|
8
|
+
}
|
@@ -0,0 +1,8 @@
|
|
1
|
+
import { Lexeme } from "../models/Lexeme";
|
2
|
+
import { ValueComponent } from "../models/ValueComponent";
|
3
|
+
export declare class UnaryExpressionParser {
|
4
|
+
static parseFromLexeme(lexemes: Lexeme[], index: number): {
|
5
|
+
value: ValueComponent;
|
6
|
+
newIndex: number;
|
7
|
+
};
|
8
|
+
}
|
@@ -0,0 +1,14 @@
|
|
1
|
+
import { Lexeme, TokenType } from "../models/Lexeme";
|
2
|
+
import { ValueComponent } from "../models/ValueComponent";
|
3
|
+
export declare class ValueParser {
|
4
|
+
static parse(query: string): ValueComponent;
|
5
|
+
static parseFromLexeme(lexemes: Lexeme[], index: number, allowAndOperator?: boolean): {
|
6
|
+
value: ValueComponent;
|
7
|
+
newIndex: number;
|
8
|
+
};
|
9
|
+
private static parseItem;
|
10
|
+
static parseArgument(openToken: TokenType, closeToken: TokenType, lexemes: Lexeme[], index: number): {
|
11
|
+
value: ValueComponent;
|
12
|
+
newIndex: number;
|
13
|
+
};
|
14
|
+
}
|
@@ -0,0 +1,10 @@
|
|
1
|
+
import { Lexeme } from "../models/Lexeme";
|
2
|
+
import { ValuesQuery } from "../models/SelectQuery";
|
3
|
+
export declare class ValuesQueryParser {
|
4
|
+
static parse(query: string): ValuesQuery;
|
5
|
+
static parseFromLexeme(lexemes: Lexeme[], index: number): {
|
6
|
+
value: ValuesQuery;
|
7
|
+
newIndex: number;
|
8
|
+
};
|
9
|
+
private static parseTuple;
|
10
|
+
}
|
@@ -0,0 +1,9 @@
|
|
1
|
+
import { WhereClause } from "../models/Clause";
|
2
|
+
import { Lexeme } from "../models/Lexeme";
|
3
|
+
export declare class WhereClauseParser {
|
4
|
+
static parse(query: string): WhereClause;
|
5
|
+
static parseFromLexeme(lexemes: Lexeme[], index: number): {
|
6
|
+
value: WhereClause;
|
7
|
+
newIndex: number;
|
8
|
+
};
|
9
|
+
}
|
@@ -0,0 +1,9 @@
|
|
1
|
+
import { WindowFrameClause } from "../models/Clause";
|
2
|
+
import { Lexeme } from "../models/Lexeme";
|
3
|
+
export declare class WindowClauseParser {
|
4
|
+
static parse(query: string): WindowFrameClause;
|
5
|
+
static parseFromLexeme(lexemes: Lexeme[], index: number): {
|
6
|
+
value: WindowFrameClause;
|
7
|
+
newIndex: number;
|
8
|
+
};
|
9
|
+
}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
import { Lexeme } from "../models/Lexeme";
|
2
|
+
import { WindowFrameExpression } from "../models/ValueComponent";
|
3
|
+
export declare class WindowExpressionParser {
|
4
|
+
static parse(query: string): WindowFrameExpression;
|
5
|
+
static parseFromLexeme(lexemes: Lexeme[], index: number): {
|
6
|
+
value: WindowFrameExpression;
|
7
|
+
newIndex: number;
|
8
|
+
};
|
9
|
+
private static isFrameTypeKeyword;
|
10
|
+
private static parseFrameSpec;
|
11
|
+
private static parseFrameBoundary;
|
12
|
+
}
|
@@ -0,0 +1,9 @@
|
|
1
|
+
import { WithClause } from "../models/Clause";
|
2
|
+
import { Lexeme } from "../models/Lexeme";
|
3
|
+
export declare class WithClauseParser {
|
4
|
+
static parse(query: string): WithClause;
|
5
|
+
static parseFromLexeme(lexemes: Lexeme[], index: number): {
|
6
|
+
value: WithClause;
|
7
|
+
newIndex: number;
|
8
|
+
};
|
9
|
+
}
|
@@ -0,0 +1,43 @@
|
|
1
|
+
import { Lexeme, TokenType } from '../models/Lexeme';
|
2
|
+
/**
|
3
|
+
* Base class for token readers
|
4
|
+
*/
|
5
|
+
export declare abstract class BaseTokenReader {
|
6
|
+
protected input: string;
|
7
|
+
protected position: number;
|
8
|
+
constructor(input: string, position?: number);
|
9
|
+
/**
|
10
|
+
* Get the current position in the input
|
11
|
+
*/
|
12
|
+
getPosition(): number;
|
13
|
+
/**
|
14
|
+
* Set the position in the input
|
15
|
+
*/
|
16
|
+
setPosition(position: number): void;
|
17
|
+
/**
|
18
|
+
* Check if we've reached the end of input
|
19
|
+
*/
|
20
|
+
protected isEndOfInput(shift?: number): boolean;
|
21
|
+
/**
|
22
|
+
* Check if we can read more characters
|
23
|
+
*/
|
24
|
+
protected canRead(shift?: number): boolean;
|
25
|
+
/**
|
26
|
+
* Read an expected character
|
27
|
+
*/
|
28
|
+
protected read(expectChar: string): string;
|
29
|
+
/**
|
30
|
+
* Create a lexeme with the specified type and value
|
31
|
+
*/
|
32
|
+
protected createLexeme(type: TokenType, value: string, maybeType?: boolean | null, comments?: string[] | null): Lexeme;
|
33
|
+
/**
|
34
|
+
* Get debug info for error reporting
|
35
|
+
*/
|
36
|
+
protected getDebugPositionInfo(errPosition: number): string;
|
37
|
+
/**
|
38
|
+
* Try to read a token from the current position
|
39
|
+
* @param previous The previous token, if available
|
40
|
+
* @returns The read token or null if no token could be read
|
41
|
+
*/
|
42
|
+
abstract tryRead(previous: Lexeme | null): Lexeme | null;
|
43
|
+
}
|
@@ -0,0 +1,7 @@
|
|
1
|
+
import { BaseTokenReader } from "./BaseTokenReader";
|
2
|
+
import { Lexeme } from '../models/Lexeme';
|
3
|
+
import { KeywordParser } from "../parsers/KeywordParser";
|
4
|
+
export declare const joinkeywordParser: KeywordParser;
|
5
|
+
export declare class CommandTokenReader extends BaseTokenReader {
|
6
|
+
tryRead(previous: Lexeme | null): Lexeme | null;
|
7
|
+
}
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import { BaseTokenReader } from './BaseTokenReader';
|
2
|
+
import { Lexeme } from '../models/Lexeme';
|
3
|
+
/**
|
4
|
+
* Reads SQL identifier tokens
|
5
|
+
*/
|
6
|
+
export declare class FunctionTokenReader extends BaseTokenReader {
|
7
|
+
/**
|
8
|
+
* Try to read an identifier token
|
9
|
+
*/
|
10
|
+
tryRead(previous: Lexeme | null): Lexeme | null;
|
11
|
+
}
|
@@ -0,0 +1,15 @@
|
|
1
|
+
import { BaseTokenReader } from './BaseTokenReader';
|
2
|
+
import { Lexeme } from '../models/Lexeme';
|
3
|
+
/**
|
4
|
+
* Reads SQL identifier tokens
|
5
|
+
*/
|
6
|
+
export declare class IdentifierTokenReader extends BaseTokenReader {
|
7
|
+
/**
|
8
|
+
* Try to read an identifier token
|
9
|
+
*/
|
10
|
+
tryRead(previous: Lexeme | null): Lexeme | null;
|
11
|
+
/**
|
12
|
+
* Read an escaped identifier (surrounded by delimiters)
|
13
|
+
*/
|
14
|
+
private readEscapedIdentifier;
|
15
|
+
}
|
@@ -0,0 +1,23 @@
|
|
1
|
+
import { BaseTokenReader } from './BaseTokenReader';
|
2
|
+
import { Lexeme } from '../models/Lexeme';
|
3
|
+
import { KeywordParser } from '../parsers/KeywordParser';
|
4
|
+
export declare const literalKeywordParser: KeywordParser;
|
5
|
+
export declare class LiteralTokenReader extends BaseTokenReader {
|
6
|
+
/**
|
7
|
+
* Try to read a literal token
|
8
|
+
*/
|
9
|
+
tryRead(previous: Lexeme | null): Lexeme | null;
|
10
|
+
private tryReadKeyword;
|
11
|
+
/**
|
12
|
+
* Check if the current context allows for a signed number
|
13
|
+
*/
|
14
|
+
private isValidNumericPrefix;
|
15
|
+
/**
|
16
|
+
* Read a numeric value
|
17
|
+
*/
|
18
|
+
private readDigit;
|
19
|
+
/**
|
20
|
+
* Read a string literal
|
21
|
+
*/
|
22
|
+
private readSingleQuotedString;
|
23
|
+
}
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import { BaseTokenReader } from './BaseTokenReader';
|
2
|
+
import { Lexeme } from '../models/Lexeme';
|
3
|
+
/**
|
4
|
+
* Reads SQL parameter tokens (@param, :param, $param, ?)
|
5
|
+
*/
|
6
|
+
export declare class ParameterTokenReader extends BaseTokenReader {
|
7
|
+
/**
|
8
|
+
* Try to read a parameter token
|
9
|
+
*/
|
10
|
+
tryRead(previous: Lexeme | null): Lexeme | null;
|
11
|
+
}
|
@@ -0,0 +1,8 @@
|
|
1
|
+
import { Lexeme } from '../models/Lexeme';
|
2
|
+
import { BaseTokenReader } from './BaseTokenReader';
|
3
|
+
export declare class StringSpecifierTokenReader extends BaseTokenReader {
|
4
|
+
/**
|
5
|
+
* Try to read an escaped literal like e'...', x'...', etc.
|
6
|
+
*/
|
7
|
+
tryRead(previous: Lexeme | null): Lexeme | null;
|
8
|
+
}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
import { BaseTokenReader } from './BaseTokenReader';
|
2
|
+
import { Lexeme } from '../models/Lexeme';
|
3
|
+
/**
|
4
|
+
* Reads SQL symbol tokens (., ,, (, ))
|
5
|
+
*/
|
6
|
+
export declare class SpecialSymbolTokenReader extends BaseTokenReader {
|
7
|
+
private static readonly SPECIAL_SYMBOL_TOKENS;
|
8
|
+
/**
|
9
|
+
* Try to read a symbol token
|
10
|
+
*/
|
11
|
+
tryRead(previous: Lexeme | null): Lexeme | null;
|
12
|
+
}
|
@@ -0,0 +1,53 @@
|
|
1
|
+
import { BaseTokenReader } from './BaseTokenReader';
|
2
|
+
import { Lexeme } from '../models/Lexeme';
|
3
|
+
/**
|
4
|
+
* Manages and coordinates multiple token readers
|
5
|
+
*/
|
6
|
+
export declare class TokenReaderManager {
|
7
|
+
private readers;
|
8
|
+
private input;
|
9
|
+
private position;
|
10
|
+
private tokenCache;
|
11
|
+
private cacheHits;
|
12
|
+
private cacheMisses;
|
13
|
+
constructor(input: string, position?: number);
|
14
|
+
/**
|
15
|
+
* Register a token reader
|
16
|
+
* @param reader The reader to register
|
17
|
+
* @returns This manager instance for chaining
|
18
|
+
*/
|
19
|
+
register(reader: BaseTokenReader): TokenReaderManager;
|
20
|
+
/**
|
21
|
+
* Register multiple token readers
|
22
|
+
* @param readers The readers to register
|
23
|
+
* @returns This manager instance for chaining
|
24
|
+
*/
|
25
|
+
registerAll(readers: BaseTokenReader[]): TokenReaderManager;
|
26
|
+
/**
|
27
|
+
* Update the position for all readers
|
28
|
+
*/
|
29
|
+
private setPosition;
|
30
|
+
/**
|
31
|
+
* Try to read a token using all registered readers
|
32
|
+
* @param position The position to read from
|
33
|
+
* @param previous The previous token, if any
|
34
|
+
* @returns The lexeme if a reader could read it, null otherwise
|
35
|
+
*/
|
36
|
+
tryRead(position: number, previous: Lexeme | null): Lexeme | null;
|
37
|
+
/**
|
38
|
+
* Get the maximum position among all readers
|
39
|
+
*/
|
40
|
+
getMaxPosition(): number;
|
41
|
+
/**
|
42
|
+
* Get the input string
|
43
|
+
*/
|
44
|
+
getInput(): string;
|
45
|
+
/**
|
46
|
+
* Get cache statistics
|
47
|
+
*/
|
48
|
+
getCacheStats(): {
|
49
|
+
hits: number;
|
50
|
+
misses: number;
|
51
|
+
ratio: number;
|
52
|
+
};
|
53
|
+
}
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import { BaseTokenReader } from './BaseTokenReader';
|
2
|
+
import { Lexeme } from '../models/Lexeme';
|
3
|
+
/**
|
4
|
+
* Reads SQL identifier tokens
|
5
|
+
*/
|
6
|
+
export declare class TypeTokenReader extends BaseTokenReader {
|
7
|
+
/**
|
8
|
+
* Try to read an identifier token
|
9
|
+
*/
|
10
|
+
tryRead(previous: Lexeme | null): Lexeme | null;
|
11
|
+
}
|
@@ -0,0 +1,52 @@
|
|
1
|
+
import { CommonTable, WithClause } from "../models/Clause";
|
2
|
+
/**
|
3
|
+
* CTENameConflictResolver is responsible for resolving name conflicts among Common Table Expressions (CTEs).
|
4
|
+
* It also sorts the tables in the proper order based on dependencies and recursiveness.
|
5
|
+
*/
|
6
|
+
export declare class CTEBuilder {
|
7
|
+
private sourceCollector;
|
8
|
+
private cteCollector;
|
9
|
+
private formatter;
|
10
|
+
constructor();
|
11
|
+
/**
|
12
|
+
* Resolves name conflicts among CommonTables.
|
13
|
+
* If there are duplicate CTE names, they must have identical definitions.
|
14
|
+
* Also sorts the tables so that:
|
15
|
+
* 1. Recursive CTEs come first (CTEs that reference themselves)
|
16
|
+
* 2. Then remaining tables are sorted so inner (deeper) CTEs come before outer CTEs
|
17
|
+
*
|
18
|
+
* @param commonTables The list of CommonTables to check for name conflicts
|
19
|
+
* @returns An object containing:
|
20
|
+
* - needRecursive: boolean indicating if any recursive CTEs are present
|
21
|
+
* - commonTables: A new list of CommonTables with resolved name conflicts and proper order
|
22
|
+
* @throws Error if there are duplicate CTE names with different definitions
|
23
|
+
*/
|
24
|
+
build(commonTables: CommonTable[]): WithClause;
|
25
|
+
/**
|
26
|
+
* Resolves duplicate CTE names by checking if they have identical definitions.
|
27
|
+
* If definitions differ, throws an error.
|
28
|
+
*
|
29
|
+
* @param commonTables The list of CTEs to check for duplicates
|
30
|
+
* @returns A list of CTEs with duplicates removed
|
31
|
+
* @throws Error if there are duplicate CTE names with different definitions
|
32
|
+
*/
|
33
|
+
private resolveDuplicateNames;
|
34
|
+
/**
|
35
|
+
* Builds a dependency graph of CTEs and identifies recursive CTEs.
|
36
|
+
*
|
37
|
+
* @param tables The list of CTEs to analyze
|
38
|
+
* @returns Object containing the table map, set of recursive CTEs, and dependency map
|
39
|
+
*/
|
40
|
+
private buildDependencyGraph;
|
41
|
+
/**
|
42
|
+
* Sorts the CTEs using topological sort, with recursive CTEs coming first.
|
43
|
+
*
|
44
|
+
* @param tables The list of CTEs to sort
|
45
|
+
* @param tableMap Map of table names to their CommonTable objects
|
46
|
+
* @param recursiveCTEs Set of table names that are recursive (self-referential)
|
47
|
+
* @param dependencies Map of table dependencies
|
48
|
+
* @returns Sorted list of CTEs
|
49
|
+
* @throws Error if a circular reference is detected
|
50
|
+
*/
|
51
|
+
private sortCommonTables;
|
52
|
+
}
|