rawsql-ts 0.1.0-beta.8 → 0.1.0-beta.9
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 +58 -38
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -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/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 +16 -1
- 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/package.json +1 -1
- package/dist/transformers/QueryNormalizer.d.ts +0 -37
- package/dist/transformers/QueryNormalizer.js.map +0 -1
@@ -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":"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"}
|
@@ -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
|
};
|
@@ -6,20 +6,21 @@ const Lexeme_1 = require("../models/Lexeme");
|
|
6
6
|
const SourceParser_1 = require("./SourceParser");
|
7
7
|
const SourceAliasExpressionParser_1 = require("./SourceAliasExpressionParser");
|
8
8
|
class SourceExpressionParser {
|
9
|
-
|
9
|
+
// Parse from lexeme array (was: parse)
|
10
|
+
static parseFromLexeme(lexemes, index) {
|
10
11
|
let idx = index;
|
11
|
-
const sourceResult = SourceParser_1.SourceParser.
|
12
|
+
const sourceResult = SourceParser_1.SourceParser.parseFromLexeme(lexemes, idx);
|
12
13
|
idx = sourceResult.newIndex;
|
13
14
|
if (idx < lexemes.length) {
|
14
15
|
if (lexemes[idx].value === "as") {
|
15
16
|
idx++;
|
16
|
-
const aliasResult = SourceAliasExpressionParser_1.SourceAliasExpressionParser.
|
17
|
+
const aliasResult = SourceAliasExpressionParser_1.SourceAliasExpressionParser.parseFromLexeme(lexemes, idx);
|
17
18
|
idx = aliasResult.newIndex;
|
18
19
|
const sourceExpr = new Clause_1.SourceExpression(sourceResult.value, aliasResult.value);
|
19
20
|
return { value: sourceExpr, newIndex: idx };
|
20
21
|
}
|
21
22
|
if (lexemes[idx].type === Lexeme_1.TokenType.Identifier) {
|
22
|
-
const aliasResult = SourceAliasExpressionParser_1.SourceAliasExpressionParser.
|
23
|
+
const aliasResult = SourceAliasExpressionParser_1.SourceAliasExpressionParser.parseFromLexeme(lexemes, idx);
|
23
24
|
idx = aliasResult.newIndex;
|
24
25
|
const sourceExpr = new Clause_1.SourceExpression(sourceResult.value, aliasResult.value);
|
25
26
|
return { value: sourceExpr, newIndex: idx };
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"SourceExpressionParser.js","sourceRoot":"","sources":["../../src/parsers/SourceExpressionParser.ts"],"names":[],"mappings":";;;AAAA,6CAAwF;AACxF,6CAAqD;AACrD,iDAA8C;AAC9C,+EAA4E;AAE5E,MAAa,sBAAsB;
|
1
|
+
{"version":3,"file":"SourceExpressionParser.js","sourceRoot":"","sources":["../../src/parsers/SourceExpressionParser.ts"],"names":[],"mappings":";;;AAAA,6CAAwF;AACxF,6CAAqD;AACrD,iDAA8C;AAC9C,+EAA4E;AAE5E,MAAa,sBAAsB;IAC/B,uCAAuC;IAChC,MAAM,CAAC,eAAe,CAAC,OAAiB,EAAE,KAAa;QAC1D,IAAI,GAAG,GAAG,KAAK,CAAC;QAEhB,MAAM,YAAY,GAAG,2BAAY,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAChE,GAAG,GAAG,YAAY,CAAC,QAAQ,CAAC;QAE5B,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;YACvB,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;gBAC9B,GAAG,EAAE,CAAC;gBACN,MAAM,WAAW,GAAG,yDAA2B,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;gBAC9E,GAAG,GAAG,WAAW,CAAC,QAAQ,CAAC;gBAC3B,MAAM,UAAU,GAAG,IAAI,yBAAgB,CAAC,YAAY,CAAC,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC;gBAC/E,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;YAChD,CAAC;YAED,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,kBAAS,CAAC,UAAU,EAAE,CAAC;gBAC7C,MAAM,WAAW,GAAG,yDAA2B,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;gBAC9E,GAAG,GAAG,WAAW,CAAC,QAAQ,CAAC;gBAC3B,MAAM,UAAU,GAAG,IAAI,yBAAgB,CAAC,YAAY,CAAC,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC;gBAC/E,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;YAChD,CAAC;QACL,CAAC;QAED,WAAW;QACX,MAAM,IAAI,GAAG,IAAI,yBAAgB,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC5D,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;IAC1C,CAAC;CACJ;AA7BD,wDA6BC"}
|
@@ -1,8 +1,8 @@
|
|
1
1
|
import { SourceComponent } from "../models/Clause";
|
2
2
|
import { Lexeme } from "../models/Lexeme";
|
3
3
|
export declare class SourceParser {
|
4
|
-
static
|
5
|
-
static
|
4
|
+
static parse(query: string): SourceComponent;
|
5
|
+
static parseFromLexeme(lexemes: Lexeme[], index: number): {
|
6
6
|
value: SourceComponent;
|
7
7
|
newIndex: number;
|
8
8
|
};
|
@@ -7,18 +7,20 @@ const SelectQueryParser_1 = require("./SelectQueryParser");
|
|
7
7
|
const SqlTokenizer_1 = require("./SqlTokenizer");
|
8
8
|
const ValueParser_1 = require("./ValueParser");
|
9
9
|
class SourceParser {
|
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 source component 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
|
const idx = index;
|
23
25
|
// Handle subquery
|
24
26
|
if (idx < lexemes.length && lexemes[idx].type === Lexeme_1.TokenType.OpenParen) {
|
@@ -106,9 +108,10 @@ class SourceParser {
|
|
106
108
|
}
|
107
109
|
static parseSubQuerySource(lexemes, index) {
|
108
110
|
let idx = index;
|
109
|
-
|
110
|
-
|
111
|
-
|
111
|
+
// Use the new parseFromLexeme method and destructure the result
|
112
|
+
const { value: selectQuery, newIndex } = SelectQueryParser_1.SelectQueryParser.parseFromLexeme(lexemes, idx);
|
113
|
+
idx = newIndex;
|
114
|
+
const subQuerySource = new Clause_1.SubQuerySource(selectQuery);
|
112
115
|
return { value: subQuerySource, newIndex: idx };
|
113
116
|
}
|
114
117
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"SourceParser.js","sourceRoot":"","sources":["../../src/parsers/SourceParser.ts"],"names":[],"mappings":";;;AAAA,6CAAgG;AAChG,6CAAqD;AACrD,2DAAwD;AACxD,iDAA8C;AAC9C,+CAA4C;AAE5C,MAAa,YAAY;
|
1
|
+
{"version":3,"file":"SourceParser.js","sourceRoot":"","sources":["../../src/parsers/SourceParser.ts"],"names":[],"mappings":"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"}
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import { Lexeme } from "../models/Lexeme";
|
2
2
|
import { ValueComponent } from "../models/ValueComponent";
|
3
3
|
export declare class StringSpecifierExpressionParser {
|
4
|
-
static
|
4
|
+
static parseFromLexeme(lexemes: Lexeme[], index: number): {
|
5
5
|
value: ValueComponent;
|
6
6
|
newIndex: number;
|
7
7
|
};
|
@@ -4,7 +4,7 @@ exports.StringSpecifierExpressionParser = void 0;
|
|
4
4
|
const Lexeme_1 = require("../models/Lexeme");
|
5
5
|
const ValueComponent_1 = require("../models/ValueComponent");
|
6
6
|
class StringSpecifierExpressionParser {
|
7
|
-
static
|
7
|
+
static parseFromLexeme(lexemes, index) {
|
8
8
|
let idx = index;
|
9
9
|
const specifer = lexemes[idx].value;
|
10
10
|
idx++;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"StringSpecifierExpressionParser.js","sourceRoot":"","sources":["../../src/parsers/StringSpecifierExpressionParser.ts"],"names":[],"mappings":";;;AAAA,6CAAqD;AACrD,6DAAqF;AAErF,MAAa,+BAA+B;IACjC,MAAM,CAAC,
|
1
|
+
{"version":3,"file":"StringSpecifierExpressionParser.js","sourceRoot":"","sources":["../../src/parsers/StringSpecifierExpressionParser.ts"],"names":[],"mappings":";;;AAAA,6CAAqD;AACrD,6DAAqF;AAErF,MAAa,+BAA+B;IACjC,MAAM,CAAC,eAAe,CAAC,OAAiB,EAAE,KAAa;QAC1D,IAAI,GAAG,GAAG,KAAK,CAAC;QAChB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;QACpC,GAAG,EAAE,CAAC;QACN,IAAI,GAAG,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,kBAAS,CAAC,OAAO,EAAE,CAAC;YACnE,MAAM,IAAI,KAAK,CAAC,2DAA2D,GAAG,EAAE,CAAC,CAAC;QACtF,CAAC;QACD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;QACjC,GAAG,EAAE,CAAC;QACN,mCAAmC;QACnC,MAAM,MAAM,GAAG,IAAI,0CAAyB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAE9D,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;IAC5C,CAAC;CACJ;AAfD,0EAeC"}
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import { Lexeme } from "../models/Lexeme";
|
2
2
|
import { ValueComponent } from "../models/ValueComponent";
|
3
3
|
export declare class UnaryExpressionParser {
|
4
|
-
static
|
4
|
+
static parseFromLexeme(lexemes: Lexeme[], index: number): {
|
5
5
|
value: ValueComponent;
|
6
6
|
newIndex: number;
|
7
7
|
};
|
@@ -5,7 +5,7 @@ const Lexeme_1 = require("../models/Lexeme");
|
|
5
5
|
const ValueComponent_1 = require("../models/ValueComponent");
|
6
6
|
const ValueParser_1 = require("./ValueParser");
|
7
7
|
class UnaryExpressionParser {
|
8
|
-
static
|
8
|
+
static parseFromLexeme(lexemes, index) {
|
9
9
|
let idx = index;
|
10
10
|
// Process unary operator
|
11
11
|
if (idx < lexemes.length && lexemes[idx].type === Lexeme_1.TokenType.Operator) {
|
@@ -17,7 +17,7 @@ class UnaryExpressionParser {
|
|
17
17
|
return { value: v, newIndex: idx };
|
18
18
|
}
|
19
19
|
// Get the right-hand side value of the unary operator
|
20
|
-
const result = ValueParser_1.ValueParser.
|
20
|
+
const result = ValueParser_1.ValueParser.parseFromLexeme(lexemes, idx);
|
21
21
|
idx = result.newIndex;
|
22
22
|
// Create unary expression
|
23
23
|
const value = new ValueComponent_1.UnaryExpression(operator, result.value);
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"UnaryExpressionParser.js","sourceRoot":"","sources":["../../src/parsers/UnaryExpressionParser.ts"],"names":[],"mappings":";;;AAAA,6CAAqD;AACrD,6DAA8G;AAC9G,+CAA4C;AAE5C,MAAa,qBAAqB;IACvB,MAAM,CAAC,
|
1
|
+
{"version":3,"file":"UnaryExpressionParser.js","sourceRoot":"","sources":["../../src/parsers/UnaryExpressionParser.ts"],"names":[],"mappings":";;;AAAA,6CAAqD;AACrD,6DAA8G;AAC9G,+CAA4C;AAE5C,MAAa,qBAAqB;IACvB,MAAM,CAAC,eAAe,CAAC,OAAiB,EAAE,KAAa;QAC1D,IAAI,GAAG,GAAG,KAAK,CAAC;QAEhB,yBAAyB;QACzB,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,kBAAS,CAAC,QAAQ,EAAE,CAAC;YACnE,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;YACpC,GAAG,EAAE,CAAC;YAEN,+DAA+D;YAC/D,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;gBACnB,MAAM,CAAC,GAAG,IAAI,gCAAe,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gBACzC,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;YACvC,CAAC;YAED,sDAAsD;YACtD,MAAM,MAAM,GAAG,yBAAW,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YACzD,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC;YAEtB,0BAA0B;YAC1B,MAAM,KAAK,GAAG,IAAI,gCAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YAC1D,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;QACpC,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,qCAAqC,KAAK,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IAC3F,CAAC;CACJ;AA1BD,sDA0BC"}
|
@@ -1,8 +1,8 @@
|
|
1
1
|
import { Lexeme, TokenType } from "../models/Lexeme";
|
2
2
|
import { ValueComponent } from "../models/ValueComponent";
|
3
3
|
export declare class ValueParser {
|
4
|
-
static
|
5
|
-
static
|
4
|
+
static parse(query: string): ValueComponent;
|
5
|
+
static parseFromLexeme(lexemes: Lexeme[], index: number, allowAndOperator?: boolean): {
|
6
6
|
value: ValueComponent;
|
7
7
|
newIndex: number;
|
8
8
|
};
|
@@ -13,18 +13,20 @@ const StringSpecifierExpressionParser_1 = require("./StringSpecifierExpressionPa
|
|
13
13
|
const CommandExpressionParser_1 = require("./CommandExpressionParser");
|
14
14
|
const FunctionExpressionParser_1 = require("./FunctionExpressionParser");
|
15
15
|
class ValueParser {
|
16
|
-
|
16
|
+
// Parse SQL string to AST (was: parse)
|
17
|
+
static parse(query) {
|
17
18
|
const tokenizer = new SqlTokenizer_1.SqlTokenizer(query); // Initialize tokenizer
|
18
19
|
const lexemes = tokenizer.readLexmes(); // Get tokens
|
19
20
|
// Parse
|
20
|
-
const result = this.
|
21
|
+
const result = this.parseFromLexeme(lexemes, 0);
|
21
22
|
// Error if there are remaining tokens
|
22
23
|
if (result.newIndex < lexemes.length) {
|
23
24
|
throw new Error(`Unexpected token at index ${result.newIndex}: ${lexemes[result.newIndex].value}`);
|
24
25
|
}
|
25
26
|
return result.value;
|
26
27
|
}
|
27
|
-
|
28
|
+
// Parse from lexeme array (was: parse)
|
29
|
+
static parseFromLexeme(lexemes, index, allowAndOperator = true) {
|
28
30
|
let idx = index;
|
29
31
|
// support comments
|
30
32
|
const comment = lexemes[index].comments;
|
@@ -52,28 +54,28 @@ class ValueParser {
|
|
52
54
|
}
|
53
55
|
const current = lexemes[idx];
|
54
56
|
if (current.type === Lexeme_1.TokenType.Identifier) {
|
55
|
-
return IdentifierParser_1.IdentifierParser.
|
57
|
+
return IdentifierParser_1.IdentifierParser.parseFromLexeme(lexemes, idx);
|
56
58
|
}
|
57
59
|
else if (current.type === Lexeme_1.TokenType.Literal) {
|
58
|
-
return LiteralParser_1.LiteralParser.
|
60
|
+
return LiteralParser_1.LiteralParser.parseFromLexeme(lexemes, idx);
|
59
61
|
}
|
60
62
|
else if (current.type === Lexeme_1.TokenType.OpenParen) {
|
61
|
-
return ParenExpressionParser_1.ParenExpressionParser.
|
63
|
+
return ParenExpressionParser_1.ParenExpressionParser.parseFromLexeme(lexemes, idx);
|
62
64
|
}
|
63
65
|
else if (current.type === Lexeme_1.TokenType.Function) {
|
64
|
-
return FunctionExpressionParser_1.FunctionExpressionParser.
|
66
|
+
return FunctionExpressionParser_1.FunctionExpressionParser.parseFromLexeme(lexemes, idx);
|
65
67
|
}
|
66
68
|
else if (current.type === Lexeme_1.TokenType.Operator) {
|
67
|
-
return UnaryExpressionParser_1.UnaryExpressionParser.
|
69
|
+
return UnaryExpressionParser_1.UnaryExpressionParser.parseFromLexeme(lexemes, idx);
|
68
70
|
}
|
69
71
|
else if (current.type === Lexeme_1.TokenType.Parameter) {
|
70
|
-
return ParameterExpressionParser_1.ParameterExpressionParser.
|
72
|
+
return ParameterExpressionParser_1.ParameterExpressionParser.parseFromLexeme(lexemes, idx);
|
71
73
|
}
|
72
74
|
else if (current.type === Lexeme_1.TokenType.StringSpecifier) {
|
73
|
-
return StringSpecifierExpressionParser_1.StringSpecifierExpressionParser.
|
75
|
+
return StringSpecifierExpressionParser_1.StringSpecifierExpressionParser.parseFromLexeme(lexemes, idx);
|
74
76
|
}
|
75
77
|
else if (current.type === Lexeme_1.TokenType.Command) {
|
76
|
-
return CommandExpressionParser_1.CommandExpressionParser.
|
78
|
+
return CommandExpressionParser_1.CommandExpressionParser.parseFromLexeme(lexemes, idx);
|
77
79
|
}
|
78
80
|
throw new Error(`Invalid lexeme. index: ${idx}, type: ${lexemes[idx].type}, value: ${lexemes[idx].value}`);
|
79
81
|
}
|
@@ -102,13 +104,13 @@ class ValueParser {
|
|
102
104
|
}
|
103
105
|
}
|
104
106
|
// Parse the value inside
|
105
|
-
const result = this.
|
107
|
+
const result = this.parseFromLexeme(lexemes, idx);
|
106
108
|
idx = result.newIndex;
|
107
109
|
args.push(result.value);
|
108
110
|
// Continue reading if the next element is a comma
|
109
111
|
while (idx < lexemes.length && lexemes[idx].type === Lexeme_1.TokenType.Comma) {
|
110
112
|
idx++;
|
111
|
-
const argResult = this.
|
113
|
+
const argResult = this.parseFromLexeme(lexemes, idx);
|
112
114
|
idx = argResult.newIndex;
|
113
115
|
args.push(argResult.value);
|
114
116
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ValueParser.js","sourceRoot":"","sources":["../../src/parsers/ValueParser.ts"],"names":[],"mappings":";;;AAAA,6CAAqD;AACrD,6DAAsF;AACtF,iDAA8C;AAC9C,yDAAsD;AACtD,mDAAgD;AAChD,mEAAgE;AAChE,mEAAgE;AAChE,2EAAwE;AACxE,uFAAoF;AACpF,uEAAoE;AACpE,yEAAsE;AAEtE,MAAa,WAAW;
|
1
|
+
{"version":3,"file":"ValueParser.js","sourceRoot":"","sources":["../../src/parsers/ValueParser.ts"],"names":[],"mappings":"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"}
|