rawsql-ts 0.1.0-beta.8 → 0.1.1-beta.1
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 +231 -173
- package/dist/index.d.ts +2 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/models/BinarySelectQuery.js +9 -8
- package/dist/models/BinarySelectQuery.js.map +1 -1
- package/dist/models/SimpleSelectQuery.js +10 -8
- package/dist/models/SimpleSelectQuery.js.map +1 -1
- package/dist/parsers/CommandExpressionParser.d.ts +1 -1
- package/dist/parsers/CommandExpressionParser.js +6 -6
- package/dist/parsers/CommandExpressionParser.js.map +1 -1
- package/dist/parsers/CommonTableParser.d.ts +2 -2
- package/dist/parsers/CommonTableParser.js +7 -5
- package/dist/parsers/CommonTableParser.js.map +1 -1
- package/dist/parsers/ForClauseParser.d.ts +2 -2
- package/dist/parsers/ForClauseParser.js +5 -3
- package/dist/parsers/ForClauseParser.js.map +1 -1
- package/dist/parsers/FromClauseParser.d.ts +2 -2
- package/dist/parsers/FromClauseParser.js +6 -4
- package/dist/parsers/FromClauseParser.js.map +1 -1
- package/dist/parsers/FunctionExpressionParser.d.ts +1 -1
- package/dist/parsers/FunctionExpressionParser.js +8 -8
- package/dist/parsers/FunctionExpressionParser.js.map +1 -1
- package/dist/parsers/GroupByParser.d.ts +2 -2
- package/dist/parsers/GroupByParser.js +6 -4
- package/dist/parsers/GroupByParser.js.map +1 -1
- package/dist/parsers/HavingParser.d.ts +2 -2
- package/dist/parsers/HavingParser.js +6 -4
- package/dist/parsers/HavingParser.js.map +1 -1
- package/dist/parsers/IdentifierParser.d.ts +1 -1
- package/dist/parsers/IdentifierParser.js +1 -1
- package/dist/parsers/IdentifierParser.js.map +1 -1
- package/dist/parsers/JoinClauseParser.js +2 -2
- package/dist/parsers/JoinClauseParser.js.map +1 -1
- package/dist/parsers/LimitClauseParser.d.ts +2 -2
- package/dist/parsers/LimitClauseParser.js +7 -5
- package/dist/parsers/LimitClauseParser.js.map +1 -1
- package/dist/parsers/LiteralParser.d.ts +1 -1
- package/dist/parsers/LiteralParser.js +1 -1
- package/dist/parsers/LiteralParser.js.map +1 -1
- package/dist/parsers/OrderByClauseParser.d.ts +2 -2
- package/dist/parsers/OrderByClauseParser.js +6 -4
- package/dist/parsers/OrderByClauseParser.js.map +1 -1
- package/dist/parsers/OverExpressionParser.d.ts +2 -2
- package/dist/parsers/OverExpressionParser.js +4 -4
- package/dist/parsers/OverExpressionParser.js.map +1 -1
- package/dist/parsers/ParameterExpressionParser.d.ts +1 -1
- package/dist/parsers/ParameterExpressionParser.js +1 -1
- package/dist/parsers/ParameterExpressionParser.js.map +1 -1
- package/dist/parsers/ParenExpressionParser.d.ts +1 -1
- package/dist/parsers/ParenExpressionParser.js +2 -2
- package/dist/parsers/ParenExpressionParser.js.map +1 -1
- package/dist/parsers/PartitionByParser.d.ts +2 -2
- package/dist/parsers/PartitionByParser.js +7 -5
- package/dist/parsers/PartitionByParser.js.map +1 -1
- package/dist/parsers/SelectClauseParser.d.ts +2 -2
- package/dist/parsers/SelectClauseParser.js +6 -4
- package/dist/parsers/SelectClauseParser.js.map +1 -1
- package/dist/parsers/SelectQueryParser.d.ts +2 -2
- package/dist/parsers/SelectQueryParser.js +16 -14
- package/dist/parsers/SelectQueryParser.js.map +1 -1
- package/dist/parsers/SourceAliasExpressionParser.d.ts +1 -1
- package/dist/parsers/SourceAliasExpressionParser.js +2 -1
- package/dist/parsers/SourceAliasExpressionParser.js.map +1 -1
- package/dist/parsers/SourceExpressionParser.d.ts +1 -1
- package/dist/parsers/SourceExpressionParser.js +5 -4
- package/dist/parsers/SourceExpressionParser.js.map +1 -1
- package/dist/parsers/SourceParser.d.ts +2 -2
- package/dist/parsers/SourceParser.js +9 -6
- package/dist/parsers/SourceParser.js.map +1 -1
- package/dist/parsers/StringSpecifierExpressionParser.d.ts +1 -1
- package/dist/parsers/StringSpecifierExpressionParser.js +1 -1
- package/dist/parsers/StringSpecifierExpressionParser.js.map +1 -1
- package/dist/parsers/UnaryExpressionParser.d.ts +1 -1
- package/dist/parsers/UnaryExpressionParser.js +2 -2
- package/dist/parsers/UnaryExpressionParser.js.map +1 -1
- package/dist/parsers/ValueParser.d.ts +2 -2
- package/dist/parsers/ValueParser.js +15 -13
- package/dist/parsers/ValueParser.js.map +1 -1
- package/dist/parsers/ValuesQueryParser.d.ts +2 -2
- package/dist/parsers/ValuesQueryParser.js +5 -5
- package/dist/parsers/ValuesQueryParser.js.map +1 -1
- package/dist/parsers/WhereClauseParser.d.ts +2 -2
- package/dist/parsers/WhereClauseParser.js +6 -4
- package/dist/parsers/WhereClauseParser.js.map +1 -1
- package/dist/parsers/WindowClauseParser.d.ts +2 -2
- package/dist/parsers/WindowClauseParser.js +6 -4
- package/dist/parsers/WindowClauseParser.js.map +1 -1
- package/dist/parsers/WindowExpressionParser.d.ts +2 -2
- package/dist/parsers/WindowExpressionParser.js +29 -17
- package/dist/parsers/WindowExpressionParser.js.map +1 -1
- package/dist/parsers/WithClauseParser.d.ts +2 -2
- package/dist/parsers/WithClauseParser.js +7 -5
- package/dist/parsers/WithClauseParser.js.map +1 -1
- package/dist/transformers/CTEBuilder.js +1 -1
- package/dist/transformers/CTEBuilder.js.map +1 -1
- package/dist/transformers/CTECollector.d.ts +2 -1
- package/dist/transformers/CTECollector.js +5 -1
- package/dist/transformers/CTECollector.js.map +1 -1
- package/dist/transformers/CTEDisabler.js +1 -1
- package/dist/transformers/CTEDisabler.js.map +1 -1
- package/dist/transformers/CTENormalizer.d.ts +5 -5
- package/dist/transformers/CTENormalizer.js +11 -7
- package/dist/transformers/CTENormalizer.js.map +1 -1
- package/dist/transformers/Formatter.d.ts +16 -1
- package/dist/transformers/Formatter.js +17 -2
- package/dist/transformers/Formatter.js.map +1 -1
- package/dist/transformers/QueryConverter.d.ts +41 -0
- package/dist/transformers/{QueryNormalizer.js → QueryConverter.js} +39 -34
- package/dist/transformers/QueryConverter.js.map +1 -0
- package/dist/transformers/SelectValueCollector.d.ts +2 -4
- package/dist/transformers/SelectValueCollector.js.map +1 -1
- package/dist/transformers/SelectableColumnCollector.d.ts +2 -0
- package/dist/transformers/SelectableColumnCollector.js +17 -3
- package/dist/transformers/SelectableColumnCollector.js.map +1 -1
- package/dist/transformers/TableColumnResolver.d.ts +10 -0
- package/dist/transformers/TableColumnResolver.js +3 -0
- package/dist/transformers/TableColumnResolver.js.map +1 -0
- package/package.json +15 -2
- package/dist/transformers/QueryNormalizer.d.ts +0 -37
- package/dist/transformers/QueryNormalizer.js.map +0 -1
@@ -5,18 +5,20 @@ const Clause_1 = require("../models/Clause");
|
|
5
5
|
const SqlTokenizer_1 = require("./SqlTokenizer");
|
6
6
|
const ValueParser_1 = require("./ValueParser");
|
7
7
|
class LimitClauseParser {
|
8
|
-
|
8
|
+
// Parse SQL string to AST (was: parse)
|
9
|
+
static parse(query) {
|
9
10
|
const tokenizer = new SqlTokenizer_1.SqlTokenizer(query); // Initialize tokenizer
|
10
11
|
const lexemes = tokenizer.readLexmes(); // Get tokens
|
11
12
|
// Parse
|
12
|
-
const result = this.
|
13
|
+
const result = this.parseFromLexeme(lexemes, 0);
|
13
14
|
// Error if there are remaining tokens
|
14
15
|
if (result.newIndex < lexemes.length) {
|
15
16
|
throw new Error(`Syntax error: Unexpected token "${lexemes[result.newIndex].value}" at position ${result.newIndex}. The LIMIT clause is complete but there are additional tokens.`);
|
16
17
|
}
|
17
18
|
return result.value;
|
18
19
|
}
|
19
|
-
|
20
|
+
// Parse from lexeme array (was: parse)
|
21
|
+
static parseFromLexeme(lexemes, index) {
|
20
22
|
let idx = index;
|
21
23
|
if (lexemes[idx].value !== 'limit') {
|
22
24
|
throw new Error(`Syntax error at position ${idx}: Expected 'LIMIT' keyword but found "${lexemes[idx].value}". LIMIT clauses must start with the LIMIT keyword.`);
|
@@ -26,7 +28,7 @@ class LimitClauseParser {
|
|
26
28
|
throw new Error(`Syntax error: Unexpected end of input after 'LIMIT' keyword. The LIMIT clause requires a numeric expression.`);
|
27
29
|
}
|
28
30
|
// Parse LIMIT value
|
29
|
-
const limitItem = ValueParser_1.ValueParser.
|
31
|
+
const limitItem = ValueParser_1.ValueParser.parseFromLexeme(lexemes, idx);
|
30
32
|
idx = limitItem.newIndex;
|
31
33
|
let offsetItem = null;
|
32
34
|
// Check if there is an OFFSET clause
|
@@ -36,7 +38,7 @@ class LimitClauseParser {
|
|
36
38
|
throw new Error(`Syntax error: Unexpected end of input after 'OFFSET' keyword. The OFFSET clause requires a numeric expression.`);
|
37
39
|
}
|
38
40
|
// Parse OFFSET value
|
39
|
-
const offsetValueItem = ValueParser_1.ValueParser.
|
41
|
+
const offsetValueItem = ValueParser_1.ValueParser.parseFromLexeme(lexemes, idx);
|
40
42
|
offsetItem = offsetValueItem.value;
|
41
43
|
idx = offsetValueItem.newIndex;
|
42
44
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"LimitClauseParser.js","sourceRoot":"","sources":["../../src/parsers/LimitClauseParser.ts"],"names":[],"mappings":";;;AAAA,6CAA8D;AAE9D,iDAA8C;AAC9C,+CAA4C;AAE5C,MAAa,iBAAiB;
|
1
|
+
{"version":3,"file":"LimitClauseParser.js","sourceRoot":"","sources":["../../src/parsers/LimitClauseParser.ts"],"names":[],"mappings":";;;AAAA,6CAA8D;AAE9D,iDAA8C;AAC9C,+CAA4C;AAE5C,MAAa,iBAAiB;IAC1B,uCAAuC;IAChC,MAAM,CAAC,KAAK,CAAC,KAAa;QAC7B,MAAM,SAAS,GAAG,IAAI,2BAAY,CAAC,KAAK,CAAC,CAAC,CAAC,uBAAuB;QAClE,MAAM,OAAO,GAAG,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC,aAAa;QAErD,QAAQ;QACR,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAEhD,sCAAsC;QACtC,IAAI,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,mCAAmC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,iBAAiB,MAAM,CAAC,QAAQ,iEAAiE,CAAC,CAAC;QACxL,CAAC;QAED,OAAO,MAAM,CAAC,KAAK,CAAC;IACxB,CAAC;IAED,uCAAuC;IAChC,MAAM,CAAC,eAAe,CAAC,OAAiB,EAAE,KAAa;QAC1D,IAAI,GAAG,GAAG,KAAK,CAAC;QAEhB,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,yCAAyC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,qDAAqD,CAAC,CAAC;QACrK,CAAC;QACD,GAAG,EAAE,CAAC;QAEN,IAAI,GAAG,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,8GAA8G,CAAC,CAAC;QACpI,CAAC;QAED,oBAAoB;QACpB,MAAM,SAAS,GAAG,yBAAW,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC5D,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC;QAEzB,IAAI,UAAU,GAAG,IAAI,CAAC;QAEtB,qCAAqC;QACrC,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC1D,GAAG,EAAE,CAAC;YAEN,IAAI,GAAG,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACxB,MAAM,IAAI,KAAK,CAAC,gHAAgH,CAAC,CAAC;YACtI,CAAC;YAED,qBAAqB;YACrB,MAAM,eAAe,GAAG,yBAAW,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAClE,UAAU,GAAG,eAAe,CAAC,KAAK,CAAC;YACnC,GAAG,GAAG,eAAe,CAAC,QAAQ,CAAC;QACnC,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,oBAAW,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAE5D,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;IAC5C,CAAC;CACJ;AAtDD,8CAsDC"}
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import { Lexeme } from "../models/Lexeme";
|
2
2
|
import { ValueComponent } from "../models/ValueComponent";
|
3
3
|
export declare class LiteralParser {
|
4
|
-
static
|
4
|
+
static parseFromLexeme(lexemes: Lexeme[], index: number): {
|
5
5
|
value: ValueComponent;
|
6
6
|
newIndex: number;
|
7
7
|
};
|
@@ -4,7 +4,7 @@ exports.LiteralParser = void 0;
|
|
4
4
|
const ValueComponent_1 = require("../models/ValueComponent");
|
5
5
|
const LiteralTokenReader_1 = require("../tokenReaders/LiteralTokenReader");
|
6
6
|
class LiteralParser {
|
7
|
-
static
|
7
|
+
static parseFromLexeme(lexemes, index) {
|
8
8
|
// Process literal value
|
9
9
|
let idx = index;
|
10
10
|
const valueText = lexemes[idx].value;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"LiteralParser.js","sourceRoot":"","sources":["../../src/parsers/LiteralParser.ts"],"names":[],"mappings":";;;AACA,6DAAmF;AACnF,2EAA0E;AAE1E,MAAa,aAAa;IACf,MAAM,CAAC,
|
1
|
+
{"version":3,"file":"LiteralParser.js","sourceRoot":"","sources":["../../src/parsers/LiteralParser.ts"],"names":[],"mappings":";;;AACA,6DAAmF;AACnF,2EAA0E;AAE1E,MAAa,aAAa;IACf,MAAM,CAAC,eAAe,CAAC,OAAiB,EAAE,KAAa;QAC1D,wBAAwB;QACxB,IAAI,GAAG,GAAG,KAAK,CAAC;QAChB,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;QACrC,IAAI,WAA6C,CAAC;QAElD,MAAM,GAAG,GAAG,yCAAoB,CAAC,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;QACnE,IAAI,GAAG,EAAE,CAAC;YACN,MAAM,KAAK,GAAG,IAAI,0BAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACzC,GAAG,EAAE,CAAA;YACL,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;QACpC,CAAC;QAED,0BAA0B;QAC1B,IAAI,mCAAmC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YACtD,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;QACpC,CAAC;QACD,kCAAkC;aAC7B,CAAC;YACF,mCAAmC;YACnC,IAAI,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvD,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACzC,CAAC;iBAAM,CAAC;gBACJ,WAAW,GAAG,SAAS,CAAC;YAC5B,CAAC;QACL,CAAC;QACD,GAAG,EAAE,CAAA;QACL,MAAM,KAAK,GAAG,IAAI,6BAAY,CAAC,WAAW,CAAC,CAAC;QAC5C,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;IACpC,CAAC;CACJ;AA/BD,sCA+BC"}
|
@@ -1,8 +1,8 @@
|
|
1
1
|
import { OrderByClause } from "../models/Clause";
|
2
2
|
import { Lexeme } from "../models/Lexeme";
|
3
3
|
export declare class OrderByClauseParser {
|
4
|
-
static
|
5
|
-
static
|
4
|
+
static parse(query: string): OrderByClause;
|
5
|
+
static parseFromLexeme(lexemes: Lexeme[], index: number): {
|
6
6
|
value: OrderByClause;
|
7
7
|
newIndex: number;
|
8
8
|
};
|
@@ -6,18 +6,20 @@ const Lexeme_1 = require("../models/Lexeme");
|
|
6
6
|
const SqlTokenizer_1 = require("./SqlTokenizer");
|
7
7
|
const ValueParser_1 = require("./ValueParser");
|
8
8
|
class OrderByClauseParser {
|
9
|
-
|
9
|
+
// Parse SQL string to AST (was: parse)
|
10
|
+
static parse(query) {
|
10
11
|
const tokenizer = new SqlTokenizer_1.SqlTokenizer(query); // Initialize tokenizer
|
11
12
|
const lexemes = tokenizer.readLexmes(); // Get tokens
|
12
13
|
// Parse
|
13
|
-
const result = this.
|
14
|
+
const result = this.parseFromLexeme(lexemes, 0);
|
14
15
|
// Error if there are remaining tokens
|
15
16
|
if (result.newIndex < lexemes.length) {
|
16
17
|
throw new Error(`Syntax error: Unexpected token "${lexemes[result.newIndex].value}" at position ${result.newIndex}. The ORDER BY clause is complete but there are additional tokens.`);
|
17
18
|
}
|
18
19
|
return result.value;
|
19
20
|
}
|
20
|
-
|
21
|
+
// Parse from lexeme array (was: parse)
|
22
|
+
static parseFromLexeme(lexemes, index) {
|
21
23
|
let idx = index;
|
22
24
|
if (lexemes[idx].value !== 'order by') {
|
23
25
|
throw new Error(`Syntax error at position ${idx}: Expected 'ORDER BY' keyword but found "${lexemes[idx].value}". ORDER BY clauses must start with the ORDER BY keywords.`);
|
@@ -43,7 +45,7 @@ class OrderByClauseParser {
|
|
43
45
|
}
|
44
46
|
static parseItem(lexemes, index) {
|
45
47
|
let idx = index;
|
46
|
-
const parsedValue = ValueParser_1.ValueParser.
|
48
|
+
const parsedValue = ValueParser_1.ValueParser.parseFromLexeme(lexemes, idx);
|
47
49
|
const value = parsedValue.value;
|
48
50
|
idx = parsedValue.newIndex;
|
49
51
|
if (idx >= lexemes.length) {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"OrderByClauseParser.js","sourceRoot":"","sources":["../../src/parsers/OrderByClauseParser.ts"],"names":[],"mappings":";;;AAAA,6CAAmH;AACnH,6CAAqD;AACrD,iDAA8C;AAC9C,+CAA4C;AAE5C,MAAa,mBAAmB;
|
1
|
+
{"version":3,"file":"OrderByClauseParser.js","sourceRoot":"","sources":["../../src/parsers/OrderByClauseParser.ts"],"names":[],"mappings":";;;AAAA,6CAAmH;AACnH,6CAAqD;AACrD,iDAA8C;AAC9C,+CAA4C;AAE5C,MAAa,mBAAmB;IAC5B,uCAAuC;IAChC,MAAM,CAAC,KAAK,CAAC,KAAa;QAC7B,MAAM,SAAS,GAAG,IAAI,2BAAY,CAAC,KAAK,CAAC,CAAC,CAAC,uBAAuB;QAClE,MAAM,OAAO,GAAG,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC,aAAa;QAErD,QAAQ;QACR,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAEhD,sCAAsC;QACtC,IAAI,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,mCAAmC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,iBAAiB,MAAM,CAAC,QAAQ,oEAAoE,CAAC,CAAC;QAC3L,CAAC;QAED,OAAO,MAAM,CAAC,KAAK,CAAC;IACxB,CAAC;IAED,uCAAuC;IAChC,MAAM,CAAC,eAAe,CAAC,OAAiB,EAAE,KAAa;QAC1D,IAAI,GAAG,GAAG,KAAK,CAAC;QAEhB,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,4CAA4C,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,4DAA4D,CAAC,CAAC;QAC/K,CAAC;QACD,GAAG,EAAE,CAAC;QAEN,MAAM,KAAK,GAAuB,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC1C,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvB,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC;QAEpB,OAAO,GAAG,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,kBAAS,CAAC,KAAK,EAAE,CAAC;YACnE,GAAG,EAAE,CAAC;YACN,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAC1C,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvB,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC;QACxB,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,4BAA4B,KAAK,oGAAoG,CAAC,CAAC;QAC3J,CAAC;aAAM,CAAC;YACJ,MAAM,MAAM,GAAG,IAAI,sBAAa,CAAC,KAAK,CAAC,CAAC;YACxC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;QAC5C,CAAC;IACL,CAAC;IAEO,MAAM,CAAC,SAAS,CAAC,OAAiB,EAAE,KAAa;QACrD,IAAI,GAAG,GAAG,KAAK,CAAC;QAChB,MAAM,WAAW,GAAG,yBAAW,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC9D,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC;QAChC,GAAG,GAAG,WAAW,CAAC,QAAQ,CAAC;QAC3B,IAAI,GAAG,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACxB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;QAC3C,CAAC;QAED,YAAY;QACZ,MAAM,aAAa,GAAG,GAAG,IAAI,OAAO,CAAC,MAAM;YACvC,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK;gBAC1B,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,sBAAa,CAAC,SAAS,CAAC;gBAClC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,MAAM;oBAC3B,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,sBAAa,CAAC,UAAU,CAAC;oBACnC,CAAC,CAAC,IAAI,CAAC;QAEnB,0BAA0B;QAC1B,MAAM,kBAAkB,GAAG,GAAG,IAAI,OAAO,CAAC,MAAM;YAC5C,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,aAAa;gBAClC,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,2BAAkB,CAAC,KAAK,CAAC;gBACnC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,YAAY;oBACjC,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,2BAAkB,CAAC,IAAI,CAAC;oBAClC,CAAC,CAAC,IAAI,CAAC;QAEnB,IAAI,aAAa,KAAK,IAAI,IAAI,kBAAkB,KAAK,IAAI,EAAE,CAAC;YACxD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;QAC3C,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,IAAI,oBAAW,CAAC,KAAK,EAAE,aAAa,EAAE,kBAAkB,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;IAC/F,CAAC;CACJ;AA/ED,kDA+EC"}
|
@@ -1,8 +1,8 @@
|
|
1
1
|
import { Lexeme } from "../models/Lexeme";
|
2
2
|
import { OverExpression } from "../models/ValueComponent";
|
3
3
|
export declare class OverExpressionParser {
|
4
|
-
static
|
5
|
-
static
|
4
|
+
static parse(query: string): OverExpression;
|
5
|
+
static parseFromLexeme(lexemes: Lexeme[], index: number): {
|
6
6
|
value: OverExpression;
|
7
7
|
newIndex: number;
|
8
8
|
};
|
@@ -6,18 +6,18 @@ const ValueComponent_1 = require("../models/ValueComponent");
|
|
6
6
|
const SqlTokenizer_1 = require("./SqlTokenizer");
|
7
7
|
const WindowExpressionParser_1 = require("./WindowExpressionParser");
|
8
8
|
class OverExpressionParser {
|
9
|
-
static
|
9
|
+
static parse(query) {
|
10
10
|
const tokenizer = new SqlTokenizer_1.SqlTokenizer(query); // Initialize tokenizer
|
11
11
|
const lexemes = tokenizer.readLexmes(); // Get tokens
|
12
12
|
// Parse
|
13
|
-
const result = this.
|
13
|
+
const result = this.parseFromLexeme(lexemes, 0);
|
14
14
|
// Error if there are remaining tokens
|
15
15
|
if (result.newIndex < lexemes.length) {
|
16
16
|
throw new Error(`Syntax error: Unexpected token "${lexemes[result.newIndex].value}" at position ${result.newIndex}. The OVER expression is complete but there are additional tokens.`);
|
17
17
|
}
|
18
18
|
return result.value;
|
19
19
|
}
|
20
|
-
static
|
20
|
+
static parseFromLexeme(lexemes, index) {
|
21
21
|
let idx = index;
|
22
22
|
if (lexemes[idx].value !== 'over') {
|
23
23
|
throw new Error(`Syntax error at position ${idx}: Expected 'OVER' keyword but found "${lexemes[idx].value}". OVER expressions must start with the OVER keyword.`);
|
@@ -34,7 +34,7 @@ class OverExpressionParser {
|
|
34
34
|
}
|
35
35
|
if (lexemes[idx].type === Lexeme_1.TokenType.OpenParen) {
|
36
36
|
// Delegate processing to WindowFrameExpressionParser
|
37
|
-
const result = WindowExpressionParser_1.WindowExpressionParser.
|
37
|
+
const result = WindowExpressionParser_1.WindowExpressionParser.parseFromLexeme(lexemes, idx);
|
38
38
|
return result;
|
39
39
|
}
|
40
40
|
throw new Error(`Syntax error at position ${idx}: Expected a window name or opening parenthesis '(' after OVER keyword, but found "${lexemes[idx].value}".`);
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"OverExpressionParser.js","sourceRoot":"","sources":["../../src/parsers/OverExpressionParser.ts"],"names":[],"mappings":";;;AAAA,6CAAqD;AACrD,6DAA4E;AAC5E,iDAA8C;AAC9C,qEAAkE;AAElE,MAAa,oBAAoB;IACtB,MAAM,CAAC,
|
1
|
+
{"version":3,"file":"OverExpressionParser.js","sourceRoot":"","sources":["../../src/parsers/OverExpressionParser.ts"],"names":[],"mappings":";;;AAAA,6CAAqD;AACrD,6DAA4E;AAC5E,iDAA8C;AAC9C,qEAAkE;AAElE,MAAa,oBAAoB;IACtB,MAAM,CAAC,KAAK,CAAC,KAAa;QAC7B,MAAM,SAAS,GAAG,IAAI,2BAAY,CAAC,KAAK,CAAC,CAAC,CAAC,uBAAuB;QAClE,MAAM,OAAO,GAAG,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC,aAAa;QAErD,QAAQ;QACR,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAEhD,sCAAsC;QACtC,IAAI,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,mCAAmC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,iBAAiB,MAAM,CAAC,QAAQ,oEAAoE,CAAC,CAAC;QAC3L,CAAC;QAED,OAAO,MAAM,CAAC,KAAK,CAAC;IACxB,CAAC;IAEM,MAAM,CAAC,eAAe,CAAC,OAAiB,EAAE,KAAa;QAC1D,IAAI,GAAG,GAAG,KAAK,CAAC;QAEhB,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,wCAAwC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,uDAAuD,CAAC,CAAC;QACtK,CAAC;QACD,GAAG,EAAE,CAAC;QAEN,IAAI,GAAG,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,0HAA0H,CAAC,CAAC;QAChJ,CAAC;QAED,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,kBAAS,CAAC,UAAU,EAAE,CAAC;YAC7C,qBAAqB;YACrB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;YAChC,GAAG,EAAE,CAAC;YACN,OAAO,EAAE,KAAK,EAAE,IAAI,iCAAgB,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;QAChE,CAAC;QAED,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,kBAAS,CAAC,SAAS,EAAE,CAAC;YAC5C,qDAAqD;YACrD,MAAM,MAAM,GAAG,+CAAsB,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YACpE,OAAO,MAAM,CAAC;QAClB,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,sFAAsF,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;IACjK,CAAC;CACJ;AA3CD,oDA2CC"}
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import { Lexeme } from "../models/Lexeme";
|
2
2
|
import { ValueComponent } from "../models/ValueComponent";
|
3
3
|
export declare class ParameterExpressionParser {
|
4
|
-
static
|
4
|
+
static parseFromLexeme(lexemes: Lexeme[], index: number): {
|
5
5
|
value: ValueComponent;
|
6
6
|
newIndex: number;
|
7
7
|
};
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ParameterExpressionParser = void 0;
|
4
4
|
const ValueComponent_1 = require("../models/ValueComponent");
|
5
5
|
class ParameterExpressionParser {
|
6
|
-
static
|
6
|
+
static parseFromLexeme(lexemes, index) {
|
7
7
|
let idx = index;
|
8
8
|
// Exclude the parameter symbol (first character)
|
9
9
|
const value = new ValueComponent_1.ParameterExpression(lexemes[idx].value.slice(1));
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ParameterExpressionParser.js","sourceRoot":"","sources":["../../src/parsers/ParameterExpressionParser.ts"],"names":[],"mappings":";;;AACA,6DAA+E;AAE/E,MAAa,yBAAyB;IAC3B,MAAM,CAAC,
|
1
|
+
{"version":3,"file":"ParameterExpressionParser.js","sourceRoot":"","sources":["../../src/parsers/ParameterExpressionParser.ts"],"names":[],"mappings":";;;AACA,6DAA+E;AAE/E,MAAa,yBAAyB;IAC3B,MAAM,CAAC,eAAe,CAAC,OAAiB,EAAE,KAAa;QAC1D,IAAI,GAAG,GAAG,KAAK,CAAC;QAChB,iDAAiD;QACjD,MAAM,KAAK,GAAG,IAAI,oCAAmB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACnE,GAAG,EAAE,CAAC;QACN,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;IACpC,CAAC;CACJ;AARD,8DAQC"}
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import { Lexeme } from "../models/Lexeme";
|
2
2
|
import { ValueComponent } from "../models/ValueComponent";
|
3
3
|
export declare class ParenExpressionParser {
|
4
|
-
static
|
4
|
+
static parseFromLexeme(lexemes: Lexeme[], index: number): {
|
5
5
|
value: ValueComponent;
|
6
6
|
newIndex: number;
|
7
7
|
};
|
@@ -6,12 +6,12 @@ const ValueComponent_1 = require("../models/ValueComponent");
|
|
6
6
|
const SelectQueryParser_1 = require("./SelectQueryParser");
|
7
7
|
const ValueParser_1 = require("./ValueParser");
|
8
8
|
class ParenExpressionParser {
|
9
|
-
static
|
9
|
+
static parseFromLexeme(lexemes, index) {
|
10
10
|
let idx = index;
|
11
11
|
// check inline query
|
12
12
|
if (idx + 1 < lexemes.length && lexemes[idx].type === Lexeme_1.TokenType.OpenParen && (lexemes[idx + 1].value === "select" || lexemes[idx + 1].value === "values" || lexemes[idx + 1].value === "with")) {
|
13
13
|
idx += 1; // Skip the '(' token
|
14
|
-
const result = SelectQueryParser_1.SelectQueryParser.
|
14
|
+
const result = SelectQueryParser_1.SelectQueryParser.parseFromLexeme(lexemes, idx);
|
15
15
|
idx = result.newIndex;
|
16
16
|
// Check for closing parenthesis
|
17
17
|
if (idx >= lexemes.length || lexemes[idx].type !== Lexeme_1.TokenType.CloseParen) {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ParenExpressionParser.js","sourceRoot":"","sources":["../../src/parsers/ParenExpressionParser.ts"],"names":[],"mappings":";;;AAAA,6CAAqD;AACrD,6DAAwF;AACxF,2DAAwD;AACxD,+CAA4C;AAE5C,MAAa,qBAAqB;IACvB,MAAM,CAAC,
|
1
|
+
{"version":3,"file":"ParenExpressionParser.js","sourceRoot":"","sources":["../../src/parsers/ParenExpressionParser.ts"],"names":[],"mappings":";;;AAAA,6CAAqD;AACrD,6DAAwF;AACxF,2DAAwD;AACxD,+CAA4C;AAE5C,MAAa,qBAAqB;IACvB,MAAM,CAAC,eAAe,CAAC,OAAiB,EAAE,KAAa;QAC1D,IAAI,GAAG,GAAG,KAAK,CAAC;QAEhB,qBAAqB;QACrB,IAAI,GAAG,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,kBAAS,CAAC,SAAS,IAAI,CACzE,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAClH,EAAE,CAAC;YACA,GAAG,IAAI,CAAC,CAAC,CAAC,qBAAqB;YAC/B,MAAM,MAAM,GAAG,qCAAiB,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAC/D,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC;YAEtB,gCAAgC;YAChC,IAAI,GAAG,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,kBAAS,CAAC,UAAU,EAAE,CAAC;gBACtE,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,eAAe,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;YACrF,CAAC;YACD,GAAG,EAAE,CAAC,CAAC,qBAAqB;YAE5B,MAAM,KAAK,GAAG,IAAI,4BAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5C,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;QACpC,CAAC;aAAM,CAAC;YACJ,MAAM,MAAM,GAAG,yBAAW,CAAC,aAAa,CAAC,kBAAS,CAAC,SAAS,EAAE,kBAAS,CAAC,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;YACpG,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC;YAEtB,MAAM,KAAK,GAAG,IAAI,gCAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAChD,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;QACpC,CAAC;IACL,CAAC;CACJ;AA5BD,sDA4BC"}
|
@@ -1,8 +1,8 @@
|
|
1
1
|
import { PartitionByClause } from "../models/Clause";
|
2
2
|
import { Lexeme } from "../models/Lexeme";
|
3
3
|
export declare class PartitionByParser {
|
4
|
-
static
|
5
|
-
static
|
4
|
+
static parse(query: string): PartitionByClause;
|
5
|
+
static parseFromLexeme(lexemes: Lexeme[], index: number): {
|
6
6
|
value: PartitionByClause;
|
7
7
|
newIndex: number;
|
8
8
|
};
|
@@ -7,30 +7,32 @@ const ValueComponent_1 = require("../models/ValueComponent");
|
|
7
7
|
const SqlTokenizer_1 = require("./SqlTokenizer");
|
8
8
|
const ValueParser_1 = require("./ValueParser");
|
9
9
|
class PartitionByParser {
|
10
|
-
|
10
|
+
// Parse SQL string to AST (was: parse)
|
11
|
+
static parse(query) {
|
11
12
|
const tokenizer = new SqlTokenizer_1.SqlTokenizer(query); // Initialize tokenizer
|
12
13
|
const lexemes = tokenizer.readLexmes(); // Get tokens
|
13
14
|
// Parse
|
14
|
-
const result = this.
|
15
|
+
const result = this.parseFromLexeme(lexemes, 0);
|
15
16
|
// Error if there are remaining tokens
|
16
17
|
if (result.newIndex < lexemes.length) {
|
17
18
|
throw new Error(`Syntax error: Unexpected token "${lexemes[result.newIndex].value}" at position ${result.newIndex}. The PARTITION BY clause is complete but there are additional tokens.`);
|
18
19
|
}
|
19
20
|
return result.value;
|
20
21
|
}
|
21
|
-
|
22
|
+
// Parse from lexeme array (was: parse)
|
23
|
+
static parseFromLexeme(lexemes, index) {
|
22
24
|
let idx = index;
|
23
25
|
if (lexemes[idx].value !== 'partition by') {
|
24
26
|
throw new Error(`Syntax error at position ${idx}: Expected 'PARTITION BY' keyword but found "${lexemes[idx].value}". PARTITION BY clauses must start with the PARTITION BY keywords.`);
|
25
27
|
}
|
26
28
|
idx++;
|
27
29
|
const items = [];
|
28
|
-
const item = ValueParser_1.ValueParser.
|
30
|
+
const item = ValueParser_1.ValueParser.parseFromLexeme(lexemes, idx);
|
29
31
|
items.push(item.value);
|
30
32
|
idx = item.newIndex;
|
31
33
|
while (idx < lexemes.length && lexemes[idx].type === Lexeme_1.TokenType.Comma) {
|
32
34
|
idx++;
|
33
|
-
const item = ValueParser_1.ValueParser.
|
35
|
+
const item = ValueParser_1.ValueParser.parseFromLexeme(lexemes, idx);
|
34
36
|
items.push(item.value);
|
35
37
|
idx = item.newIndex;
|
36
38
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"PartitionByParser.js","sourceRoot":"","sources":["../../src/parsers/PartitionByParser.ts"],"names":[],"mappings":";;;AAAA,6CAAqD;AACrD,6CAAqD;AACrD,6DAAqE;AACrE,iDAA8C;AAC9C,+CAA4C;AAE5C,MAAa,iBAAiB;
|
1
|
+
{"version":3,"file":"PartitionByParser.js","sourceRoot":"","sources":["../../src/parsers/PartitionByParser.ts"],"names":[],"mappings":";;;AAAA,6CAAqD;AACrD,6CAAqD;AACrD,6DAAqE;AACrE,iDAA8C;AAC9C,+CAA4C;AAE5C,MAAa,iBAAiB;IAC1B,uCAAuC;IAChC,MAAM,CAAC,KAAK,CAAC,KAAa;QAC7B,MAAM,SAAS,GAAG,IAAI,2BAAY,CAAC,KAAK,CAAC,CAAC,CAAC,uBAAuB;QAClE,MAAM,OAAO,GAAG,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC,aAAa;QAErD,QAAQ;QACR,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAEhD,sCAAsC;QACtC,IAAI,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,mCAAmC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,iBAAiB,MAAM,CAAC,QAAQ,wEAAwE,CAAC,CAAC;QAC/L,CAAC;QAED,OAAO,MAAM,CAAC,KAAK,CAAC;IACxB,CAAC;IAED,uCAAuC;IAChC,MAAM,CAAC,eAAe,CAAC,OAAiB,EAAE,KAAa;QAC1D,IAAI,GAAG,GAAG,KAAK,CAAC;QAChB,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,cAAc,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,gDAAgD,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,oEAAoE,CAAC,CAAC;QAC3L,CAAC;QACD,GAAG,EAAE,CAAC;QACN,MAAM,KAAK,GAAqB,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,yBAAW,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACvD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvB,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC;QACpB,OAAO,GAAG,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,kBAAS,CAAC,KAAK,EAAE,CAAC;YACnE,GAAG,EAAE,CAAC;YACN,MAAM,IAAI,GAAG,yBAAW,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YACvD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvB,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC;QACxB,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,4BAA4B,KAAK,6GAA6G,CAAC,CAAC;QACpK,CAAC;aAAM,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,MAAM,GAAG,IAAI,0BAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;QAC5C,CAAC;aAAM,CAAC;YACJ,MAAM,MAAM,GAAG,IAAI,0BAAiB,CAAC,IAAI,0BAAS,CAAC,KAAK,CAAC,CAAC,CAAC;YAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;QAC5C,CAAC;IACL,CAAC;CACJ;AA5CD,8CA4CC"}
|
@@ -1,8 +1,8 @@
|
|
1
1
|
import { SelectClause } from "../models/Clause";
|
2
2
|
import { Lexeme } from "../models/Lexeme";
|
3
3
|
export declare class SelectClauseParser {
|
4
|
-
static
|
5
|
-
static
|
4
|
+
static parse(query: string): SelectClause;
|
5
|
+
static parseFromLexeme(lexemes: Lexeme[], index: number): {
|
6
6
|
value: SelectClause;
|
7
7
|
newIndex: number;
|
8
8
|
};
|
@@ -6,18 +6,20 @@ const Lexeme_1 = require("../models/Lexeme");
|
|
6
6
|
const SqlTokenizer_1 = require("./SqlTokenizer");
|
7
7
|
const ValueParser_1 = require("./ValueParser");
|
8
8
|
class SelectClauseParser {
|
9
|
-
|
9
|
+
// Parse SQL string to AST (was: parse)
|
10
|
+
static parse(query) {
|
10
11
|
const tokenizer = new SqlTokenizer_1.SqlTokenizer(query); // Initialize tokenizer
|
11
12
|
const lexemes = tokenizer.readLexmes(); // Get tokens
|
12
13
|
// Parse
|
13
|
-
const result = this.
|
14
|
+
const result = this.parseFromLexeme(lexemes, 0);
|
14
15
|
// Error if there are remaining tokens
|
15
16
|
if (result.newIndex < lexemes.length) {
|
16
17
|
throw new Error(`Syntax error: Unexpected token "${lexemes[result.newIndex].value}" at position ${result.newIndex}. The SELECT clause is complete but there are additional tokens.`);
|
17
18
|
}
|
18
19
|
return result.value;
|
19
20
|
}
|
20
|
-
|
21
|
+
// Parse from lexeme array (was: parse)
|
22
|
+
static parseFromLexeme(lexemes, index) {
|
21
23
|
let idx = index;
|
22
24
|
let distinct = null;
|
23
25
|
if (lexemes[idx].value !== 'select') {
|
@@ -54,7 +56,7 @@ class SelectClauseParser {
|
|
54
56
|
}
|
55
57
|
static parseItem(lexemes, index) {
|
56
58
|
let idx = index;
|
57
|
-
const parsedValue = ValueParser_1.ValueParser.
|
59
|
+
const parsedValue = ValueParser_1.ValueParser.parseFromLexeme(lexemes, idx);
|
58
60
|
const value = parsedValue.value;
|
59
61
|
idx = parsedValue.newIndex;
|
60
62
|
if (idx < lexemes.length && lexemes[idx].value === 'as') {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"SelectClauseParser.js","sourceRoot":"","sources":["../../src/parsers/SelectClauseParser.ts"],"names":[],"mappings":";;;AAAA,6CAAsH;AACtH,6CAAqD;AACrD,iDAA8C;AAC9C,+CAA4C;AAE5C,MAAa,kBAAkB;
|
1
|
+
{"version":3,"file":"SelectClauseParser.js","sourceRoot":"","sources":["../../src/parsers/SelectClauseParser.ts"],"names":[],"mappings":"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"}
|
@@ -1,10 +1,10 @@
|
|
1
1
|
import { Lexeme } from "../models/Lexeme";
|
2
2
|
import { SelectQuery } from "../models/SelectQuery";
|
3
3
|
export declare class SelectQueryParser {
|
4
|
-
static
|
4
|
+
static parse(query: string): SelectQuery;
|
5
5
|
private static unionCommandSet;
|
6
6
|
private static selectCommandSet;
|
7
|
-
static
|
7
|
+
static parseFromLexeme(lexemes: Lexeme[], index: number): {
|
8
8
|
value: SelectQuery;
|
9
9
|
newIndex: number;
|
10
10
|
};
|
@@ -15,18 +15,20 @@ const SqlTokenizer_1 = require("./SqlTokenizer");
|
|
15
15
|
const WithClauseParser_1 = require("./WithClauseParser");
|
16
16
|
const ValuesQueryParser_1 = require("./ValuesQueryParser");
|
17
17
|
class SelectQueryParser {
|
18
|
-
|
18
|
+
// Parse SQL string to AST (was: parse)
|
19
|
+
static parse(query) {
|
19
20
|
const tokenizer = new SqlTokenizer_1.SqlTokenizer(query);
|
20
21
|
const lexemes = tokenizer.readLexmes();
|
21
22
|
// Parse
|
22
|
-
const result = this.
|
23
|
+
const result = this.parseFromLexeme(lexemes, 0);
|
23
24
|
// Error if there are remaining tokens
|
24
25
|
if (result.newIndex < lexemes.length) {
|
25
26
|
throw new Error(`Syntax error: Unexpected token "${lexemes[result.newIndex].value}" at position ${result.newIndex}. The SELECT query is complete but there are additional tokens.`);
|
26
27
|
}
|
27
28
|
return result.value;
|
28
29
|
}
|
29
|
-
|
30
|
+
// Parse from lexeme array (was: parse)
|
31
|
+
static parseFromLexeme(lexemes, index) {
|
30
32
|
let idx = index;
|
31
33
|
if (idx >= lexemes.length) {
|
32
34
|
throw new Error(`Syntax error: Unexpected end of input at position ${index}.`);
|
@@ -70,61 +72,61 @@ class SelectQueryParser {
|
|
70
72
|
let withClauseResult = null;
|
71
73
|
// Parse optional WITH clause
|
72
74
|
if (idx < lexemes.length && lexemes[idx].value.toLowerCase() === 'with') {
|
73
|
-
withClauseResult = WithClauseParser_1.WithClauseParser.
|
75
|
+
withClauseResult = WithClauseParser_1.WithClauseParser.parseFromLexeme(lexemes, idx);
|
74
76
|
idx = withClauseResult.newIndex;
|
75
77
|
}
|
76
78
|
// Parse SELECT clause (required)
|
77
79
|
if (idx >= lexemes.length || lexemes[idx].value.toLowerCase() !== 'select') {
|
78
80
|
throw new Error(`Syntax error at position ${idx}: Expected 'SELECT' keyword but found "${idx < lexemes.length ? lexemes[idx].value : 'end of input'}". SELECT queries must start with the SELECT keyword.`);
|
79
81
|
}
|
80
|
-
const selectClauseResult = SelectClauseParser_1.SelectClauseParser.
|
82
|
+
const selectClauseResult = SelectClauseParser_1.SelectClauseParser.parseFromLexeme(lexemes, idx);
|
81
83
|
idx = selectClauseResult.newIndex;
|
82
84
|
// Parse FROM clause (optional)
|
83
85
|
let fromClauseResult = null;
|
84
86
|
if (idx < lexemes.length && lexemes[idx].value.toLowerCase() === 'from') {
|
85
|
-
fromClauseResult = FromClauseParser_1.FromClauseParser.
|
87
|
+
fromClauseResult = FromClauseParser_1.FromClauseParser.parseFromLexeme(lexemes, idx);
|
86
88
|
idx = fromClauseResult.newIndex;
|
87
89
|
}
|
88
90
|
// Parse WHERE clause (optional)
|
89
91
|
let whereClauseResult = null;
|
90
92
|
if (idx < lexemes.length && lexemes[idx].value.toLowerCase() === 'where') {
|
91
|
-
whereClauseResult = WhereClauseParser_1.WhereClauseParser.
|
93
|
+
whereClauseResult = WhereClauseParser_1.WhereClauseParser.parseFromLexeme(lexemes, idx);
|
92
94
|
idx = whereClauseResult.newIndex;
|
93
95
|
}
|
94
96
|
// Parse GROUP BY clause (optional)
|
95
97
|
let groupByClauseResult = null;
|
96
98
|
if (idx < lexemes.length && lexemes[idx].value.toLowerCase() === 'group by') {
|
97
|
-
groupByClauseResult = GroupByParser_1.GroupByClauseParser.
|
99
|
+
groupByClauseResult = GroupByParser_1.GroupByClauseParser.parseFromLexeme(lexemes, idx);
|
98
100
|
idx = groupByClauseResult.newIndex;
|
99
101
|
}
|
100
102
|
// Parse HAVING clause (optional)
|
101
103
|
let havingClauseResult = null;
|
102
104
|
if (idx < lexemes.length && lexemes[idx].value.toLowerCase() === 'having') {
|
103
|
-
havingClauseResult = HavingParser_1.HavingClauseParser.
|
105
|
+
havingClauseResult = HavingParser_1.HavingClauseParser.parseFromLexeme(lexemes, idx);
|
104
106
|
idx = havingClauseResult.newIndex;
|
105
107
|
}
|
106
108
|
// Parse WINDOW clause (optional)
|
107
109
|
let windowFrameClauseResult = null;
|
108
110
|
if (idx < lexemes.length && lexemes[idx].value.toLowerCase() === 'window') {
|
109
|
-
windowFrameClauseResult = WindowClauseParser_1.WindowClauseParser.
|
111
|
+
windowFrameClauseResult = WindowClauseParser_1.WindowClauseParser.parseFromLexeme(lexemes, idx);
|
110
112
|
idx = windowFrameClauseResult.newIndex;
|
111
113
|
}
|
112
114
|
// Parse ORDER BY clause (optional)
|
113
115
|
let orderByClauseResult = null;
|
114
116
|
if (idx < lexemes.length && lexemes[idx].value.toLowerCase() === 'order by') {
|
115
|
-
orderByClauseResult = OrderByClauseParser_1.OrderByClauseParser.
|
117
|
+
orderByClauseResult = OrderByClauseParser_1.OrderByClauseParser.parseFromLexeme(lexemes, idx);
|
116
118
|
idx = orderByClauseResult.newIndex;
|
117
119
|
}
|
118
120
|
// Parse LIMIT clause (optional)
|
119
121
|
let limitClauseResult = null;
|
120
122
|
if (idx < lexemes.length && lexemes[idx].value.toLowerCase() === 'limit') {
|
121
|
-
limitClauseResult = LimitClauseParser_1.LimitClauseParser.
|
123
|
+
limitClauseResult = LimitClauseParser_1.LimitClauseParser.parseFromLexeme(lexemes, idx);
|
122
124
|
idx = limitClauseResult.newIndex;
|
123
125
|
}
|
124
126
|
// Parse FOR clause (optional)
|
125
127
|
let forClauseResult = null;
|
126
128
|
if (idx < lexemes.length && lexemes[idx].value.toLowerCase() === 'for') {
|
127
|
-
forClauseResult = ForClauseParser_1.ForClauseParser.
|
129
|
+
forClauseResult = ForClauseParser_1.ForClauseParser.parseFromLexeme(lexemes, idx);
|
128
130
|
idx = forClauseResult.newIndex;
|
129
131
|
}
|
130
132
|
// Create and return the SelectQuery object
|
@@ -133,7 +135,7 @@ class SelectQueryParser {
|
|
133
135
|
}
|
134
136
|
static parseValuesQuery(lexemes, index) {
|
135
137
|
// Use ValuesQueryParser to parse VALUES clause
|
136
|
-
const result = ValuesQueryParser_1.ValuesQueryParser.
|
138
|
+
const result = ValuesQueryParser_1.ValuesQueryParser.parseFromLexeme(lexemes, index);
|
137
139
|
// Return the result from ValuesQueryParser directly
|
138
140
|
return { value: result.value, newIndex: result.newIndex };
|
139
141
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"SelectQueryParser.js","sourceRoot":"","sources":["../../src/parsers/SelectQueryParser.ts"],"names":[],"mappings":";;;AACA,uDAA0F;AAC1F,6DAA0D;AAC1D,yDAAsD;AACtD,2DAAwD;AACxD,mDAAsD;AACtD,iDAAoD;AACpD,+DAA4D;AAC5D,6DAA0D;AAC1D,2DAAwD;AACxD,uDAAoD;AACpD,iDAA8C;AAC9C,yDAAsD;AACtD,2DAAwD;AAExD,MAAa,iBAAiB;
|
1
|
+
{"version":3,"file":"SelectQueryParser.js","sourceRoot":"","sources":["../../src/parsers/SelectQueryParser.ts"],"names":[],"mappings":";;;AACA,uDAA0F;AAC1F,6DAA0D;AAC1D,yDAAsD;AACtD,2DAAwD;AACxD,mDAAsD;AACtD,iDAAoD;AACpD,+DAA4D;AAC5D,6DAA0D;AAC1D,2DAAwD;AACxD,uDAAoD;AACpD,iDAA8C;AAC9C,yDAAsD;AACtD,2DAAwD;AAExD,MAAa,iBAAiB;IAC1B,uCAAuC;IAChC,MAAM,CAAC,KAAK,CAAC,KAAa;QAC7B,MAAM,SAAS,GAAG,IAAI,2BAAY,CAAC,KAAK,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG,SAAS,CAAC,UAAU,EAAE,CAAC;QAEvC,QAAQ;QACR,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAEhD,sCAAsC;QACtC,IAAI,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,mCAAmC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,iBAAiB,MAAM,CAAC,QAAQ,iEAAiE,CAAC,CAAC;QACxL,CAAC;QAED,OAAO,MAAM,CAAC,KAAK,CAAC;IACxB,CAAC;IAYD,uCAAuC;IAChC,MAAM,CAAC,eAAe,CAAC,OAAiB,EAAE,KAAa;QAC1D,IAAI,GAAG,GAAG,KAAK,CAAC;QAEhB,IAAI,GAAG,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,qDAAqD,KAAK,GAAG,CAAC,CAAC;QACnF,CAAC;QAED,yDAAyD;QACzD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;QACtC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;YACpE,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,sDAAsD,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;QACjI,CAAC;QAED,IAAI,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC;YACnD,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,GAAG,CAAC;YAC3C,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAE1C,IAAI,KAAK,GAAgB,WAAW,CAAC,KAAK,CAAC;QAC3C,GAAG,GAAG,WAAW,CAAC,QAAQ,CAAC;QAE3B,gBAAgB;QAChB,OAAO,GAAG,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;YACxF,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;YAClD,GAAG,EAAE,CAAC;YACN,IAAI,GAAG,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACxB,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,6BAA6B,QAAQ,CAAC,WAAW,EAAE,2BAA2B,CAAC,CAAC;YACnI,CAAC;YAED,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;YACnD,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;gBACvC,MAAM,MAAM,GAAG,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;gBACzD,KAAK,GAAG,IAAI,+BAAiB,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC7D,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC;YAC1B,CAAC;iBAAM,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;gBAChC,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;gBACnD,KAAK,GAAG,IAAI,+BAAiB,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC7D,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC;YAC1B,CAAC;iBAAM,CAAC;gBACJ,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,0CAA0C,QAAQ,CAAC,WAAW,EAAE,gBAAgB,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;YAC3J,CAAC;QACL,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;IAC3C,CAAC;IAEO,MAAM,CAAC,sBAAsB,CAAC,OAAiB,EAAE,KAAa;QAClE,IAAI,GAAG,GAAG,KAAK,CAAC;QAChB,IAAI,gBAAgB,GAAG,IAAI,CAAC;QAE5B,6BAA6B;QAC7B,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE,CAAC;YACtE,gBAAgB,GAAG,mCAAgB,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAClE,GAAG,GAAG,gBAAgB,CAAC,QAAQ,CAAC;QACpC,CAAC;QAED,iCAAiC;QACjC,IAAI,GAAG,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,QAAQ,EAAE,CAAC;YACzE,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,0CAA0C,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,uDAAuD,CAAC,CAAC;QAChN,CAAC;QAED,MAAM,kBAAkB,GAAG,uCAAkB,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC5E,GAAG,GAAG,kBAAkB,CAAC,QAAQ,CAAC;QAElC,+BAA+B;QAC/B,IAAI,gBAAgB,GAAG,IAAI,CAAC;QAC5B,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE,CAAC;YACtE,gBAAgB,GAAG,mCAAgB,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAClE,GAAG,GAAG,gBAAgB,CAAC,QAAQ,CAAC;QACpC,CAAC;QAED,gCAAgC;QAChC,IAAI,iBAAiB,GAAG,IAAI,CAAC;QAC7B,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,OAAO,EAAE,CAAC;YACvE,iBAAiB,GAAG,qCAAiB,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YACpE,GAAG,GAAG,iBAAiB,CAAC,QAAQ,CAAC;QACrC,CAAC;QAED,mCAAmC;QACnC,IAAI,mBAAmB,GAAG,IAAI,CAAC;QAC/B,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,UAAU,EAAE,CAAC;YAC1E,mBAAmB,GAAG,mCAAmB,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YACxE,GAAG,GAAG,mBAAmB,CAAC,QAAQ,CAAC;QACvC,CAAC;QAED,iCAAiC;QACjC,IAAI,kBAAkB,GAAG,IAAI,CAAC;QAC9B,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,QAAQ,EAAE,CAAC;YACxE,kBAAkB,GAAG,iCAAkB,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YACtE,GAAG,GAAG,kBAAkB,CAAC,QAAQ,CAAC;QACtC,CAAC;QAED,iCAAiC;QACjC,IAAI,uBAAuB,GAAG,IAAI,CAAC;QACnC,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,QAAQ,EAAE,CAAC;YACxE,uBAAuB,GAAG,uCAAkB,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAC3E,GAAG,GAAG,uBAAuB,CAAC,QAAQ,CAAC;QAC3C,CAAC;QAED,mCAAmC;QACnC,IAAI,mBAAmB,GAAG,IAAI,CAAC;QAC/B,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,UAAU,EAAE,CAAC;YAC1E,mBAAmB,GAAG,yCAAmB,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YACxE,GAAG,GAAG,mBAAmB,CAAC,QAAQ,CAAC;QACvC,CAAC;QAED,gCAAgC;QAChC,IAAI,iBAAiB,GAAG,IAAI,CAAC;QAC7B,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,OAAO,EAAE,CAAC;YACvE,iBAAiB,GAAG,qCAAiB,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YACpE,GAAG,GAAG,iBAAiB,CAAC,QAAQ,CAAC;QACrC,CAAC;QAED,8BAA8B;QAC9B,IAAI,eAAe,GAAG,IAAI,CAAC;QAC3B,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE,CAAC;YACrE,eAAe,GAAG,iCAAe,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAChE,GAAG,GAAG,eAAe,CAAC,QAAQ,CAAC;QACnC,CAAC;QAED,2CAA2C;QAC3C,MAAM,WAAW,GAAG,IAAI,+BAAiB,CACrC,gBAAgB,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAChD,kBAAkB,CAAC,KAAK,EACxB,gBAAgB,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAChD,iBAAiB,CAAC,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAClD,mBAAmB,CAAC,CAAC,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EACtD,kBAAkB,CAAC,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EACpD,mBAAmB,CAAC,CAAC,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EACtD,uBAAuB,CAAC,CAAC,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAC9D,iBAAiB,CAAC,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAClD,eAAe,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CACjD,CAAC;QAEF,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;IACjD,CAAC;IAEO,MAAM,CAAC,gBAAgB,CAAC,OAAiB,EAAE,KAAa;QAC5D,+CAA+C;QAC/C,MAAM,MAAM,GAAG,qCAAiB,CAAC,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAEjE,oDAAoD;QACpD,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;IAC9D,CAAC;;AA1KL,8CA2KC;AA1JkB,iCAAe,GAAG,IAAI,GAAG,CAAS;IAC7C,OAAO;IACP,WAAW;IACX,WAAW;IACX,eAAe;IACf,QAAQ;IACR,YAAY;CACf,CAAC,CAAC;AACY,kCAAgB,GAAG,IAAI,GAAG,CAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC"}
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import { SourceAliasExpression } from "../models/Clause";
|
2
2
|
import { Lexeme } from "../models/Lexeme";
|
3
3
|
export declare class SourceAliasExpressionParser {
|
4
|
-
static
|
4
|
+
static parseFromLexeme(lexemes: Lexeme[], index: number): {
|
5
5
|
value: SourceAliasExpression;
|
6
6
|
newIndex: number;
|
7
7
|
};
|
@@ -4,7 +4,8 @@ exports.SourceAliasExpressionParser = void 0;
|
|
4
4
|
const Clause_1 = require("../models/Clause");
|
5
5
|
const Lexeme_1 = require("../models/Lexeme");
|
6
6
|
class SourceAliasExpressionParser {
|
7
|
-
|
7
|
+
// Parse from lexeme array (was: parse)
|
8
|
+
static parseFromLexeme(lexemes, index) {
|
8
9
|
var _a;
|
9
10
|
let idx = index;
|
10
11
|
// If there is a column alias, it may be detected as a function, so functions are also processed.
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"SourceAliasExpressionParser.js","sourceRoot":"","sources":["../../src/parsers/SourceAliasExpressionParser.ts"],"names":[],"mappings":";;;AAAA,6CAAyD;AACzD,6CAAqD;AAGrD,MAAa,2BAA2B;
|
1
|
+
{"version":3,"file":"SourceAliasExpressionParser.js","sourceRoot":"","sources":["../../src/parsers/SourceAliasExpressionParser.ts"],"names":[],"mappings":";;;AAAA,6CAAyD;AACzD,6CAAqD;AAGrD,MAAa,2BAA2B;IACpC,uCAAuC;IAChC,MAAM,CAAC,eAAe,CAAC,OAAiB,EAAE,KAAa;;QAC1D,IAAI,GAAG,GAAG,KAAK,CAAC;QAEhB,iGAAiG;QACjG,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,kBAAS,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,kBAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnH,kBAAkB;YAClB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;YACjC,GAAG,EAAE,CAAC;YAEN,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,kBAAS,CAAC,SAAS,EAAE,CAAC;gBACpE,yBAAyB;gBACzB,MAAM,OAAO,GAAa,EAAE,CAAC;gBAE7B,4BAA4B;gBAC5B,GAAG,EAAE,CAAC;gBAEN,OAAO,GAAG,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,kBAAS,CAAC,UAAU,EAAE,CAAC;oBACxE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;oBACjC,GAAG,EAAE,CAAC;oBACN,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,kBAAS,CAAC,KAAK,EAAE,CAAC;wBAChE,GAAG,EAAE,CAAC;oBACV,CAAC;yBAAM,CAAC;wBACJ,MAAM,CAAC,2BAA2B;oBACtC,CAAC;gBACL,CAAC;gBAED,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,kBAAS,CAAC,UAAU,EAAE,CAAC;oBAC7C,+BAA+B;oBAC/B,GAAG,EAAE,CAAC;gBACV,CAAC;qBAAM,CAAC;oBACJ,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,6HAA6H,CAAC,CAAC;gBAClL,CAAC;gBACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACvB,MAAM,IAAI,KAAK,CAAC,4BAA4B,KAAK,6FAA6F,CAAC,CAAC;gBACpJ,CAAC;gBAED,OAAO,EAAE,KAAK,EAAE,IAAI,8BAAqB,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;YAC/E,CAAC;YAED,OAAO,EAAE,KAAK,EAAE,IAAI,8BAAqB,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;QAC5E,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,4BAA4B,KAAK,uDAAuD,CAAA,MAAA,OAAO,CAAC,KAAK,CAAC,0CAAE,KAAK,KAAI,cAAc,IAAI,CAAC,CAAC;IACzJ,CAAC;CACJ;AA9CD,kEA8CC"}
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import { SourceExpression } from "../models/Clause";
|
2
2
|
import { Lexeme } from "../models/Lexeme";
|
3
3
|
export declare class SourceExpressionParser {
|
4
|
-
static
|
4
|
+
static parseFromLexeme(lexemes: Lexeme[], index: number): {
|
5
5
|
value: SourceExpression;
|
6
6
|
newIndex: number;
|
7
7
|
};
|