rawsql-ts 0.11.42-beta → 0.11.44-beta
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 +12 -13
- package/dist/esm/index.js +18 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index.min.js +23 -18
- package/dist/esm/index.min.js.map +4 -4
- package/dist/esm/src/index.d.ts +18 -0
- package/dist/esm/src/index.js +18 -0
- package/dist/esm/src/index.js.map +1 -1
- package/dist/esm/src/models/BinarySelectQuery.d.ts +25 -1
- package/dist/esm/src/models/BinarySelectQuery.js +28 -0
- package/dist/esm/src/models/BinarySelectQuery.js.map +1 -1
- package/dist/esm/src/models/Clause.d.ts +14 -2
- package/dist/esm/src/models/Clause.js +26 -1
- package/dist/esm/src/models/Clause.js.map +1 -1
- package/dist/esm/src/models/CreateTableQuery.d.ts +99 -5
- package/dist/esm/src/models/CreateTableQuery.js +85 -10
- package/dist/esm/src/models/CreateTableQuery.js.map +1 -1
- package/dist/esm/src/models/DDLStatements.d.ts +157 -0
- package/dist/esm/src/models/DDLStatements.js +141 -0
- package/dist/esm/src/models/DDLStatements.js.map +1 -0
- package/dist/esm/src/models/DeleteQuery.d.ts +17 -0
- package/dist/esm/src/models/DeleteQuery.js +16 -0
- package/dist/esm/src/models/DeleteQuery.js.map +1 -0
- package/dist/esm/src/models/InsertQuery.d.ts +7 -1
- package/dist/esm/src/models/InsertQuery.js +6 -2
- package/dist/esm/src/models/InsertQuery.js.map +1 -1
- package/dist/esm/src/models/MergeQuery.d.ts +63 -0
- package/dist/esm/src/models/MergeQuery.js +94 -0
- package/dist/esm/src/models/MergeQuery.js.map +1 -0
- package/dist/esm/src/models/SelectQuery.d.ts +37 -1
- package/dist/esm/src/models/SelectQuery.js +4 -1
- package/dist/esm/src/models/SelectQuery.js.map +1 -1
- package/dist/esm/src/models/SimpleSelectQuery.d.ts +29 -1
- package/dist/esm/src/models/SimpleSelectQuery.js +32 -0
- package/dist/esm/src/models/SimpleSelectQuery.js.map +1 -1
- package/dist/esm/src/models/SqlComponent.d.ts +2 -1
- package/dist/esm/src/models/SqlComponent.js +1 -1
- package/dist/esm/src/models/SqlComponent.js.map +1 -1
- package/dist/esm/src/models/SqlPrintToken.d.ts +33 -0
- package/dist/esm/src/models/SqlPrintToken.js +32 -0
- package/dist/esm/src/models/SqlPrintToken.js.map +1 -1
- package/dist/esm/src/models/ValuesQuery.d.ts +25 -1
- package/dist/esm/src/models/ValuesQuery.js +28 -0
- package/dist/esm/src/models/ValuesQuery.js.map +1 -1
- package/dist/esm/src/parsers/AlterTableParser.d.ts +25 -0
- package/dist/esm/src/parsers/AlterTableParser.js +428 -0
- package/dist/esm/src/parsers/AlterTableParser.js.map +1 -0
- package/dist/esm/src/parsers/CreateIndexParser.d.ts +16 -0
- package/dist/esm/src/parsers/CreateIndexParser.js +237 -0
- package/dist/esm/src/parsers/CreateIndexParser.js.map +1 -0
- package/dist/esm/src/parsers/CreateTableParser.d.ts +41 -0
- package/dist/esm/src/parsers/CreateTableParser.js +734 -0
- package/dist/esm/src/parsers/CreateTableParser.js.map +1 -0
- package/dist/esm/src/parsers/DeleteClauseParser.d.ts +11 -0
- package/dist/esm/src/parsers/DeleteClauseParser.js +33 -0
- package/dist/esm/src/parsers/DeleteClauseParser.js.map +1 -0
- package/dist/esm/src/parsers/DeleteQueryParser.d.ts +16 -0
- package/dist/esm/src/parsers/DeleteQueryParser.js +73 -0
- package/dist/esm/src/parsers/DeleteQueryParser.js.map +1 -0
- package/dist/esm/src/parsers/DropConstraintParser.d.ts +12 -0
- package/dist/esm/src/parsers/DropConstraintParser.js +47 -0
- package/dist/esm/src/parsers/DropConstraintParser.js.map +1 -0
- package/dist/esm/src/parsers/DropIndexParser.d.ts +12 -0
- package/dist/esm/src/parsers/DropIndexParser.js +69 -0
- package/dist/esm/src/parsers/DropIndexParser.js.map +1 -0
- package/dist/esm/src/parsers/DropTableParser.d.ts +12 -0
- package/dist/esm/src/parsers/DropTableParser.js +59 -0
- package/dist/esm/src/parsers/DropTableParser.js.map +1 -0
- package/dist/esm/src/parsers/FunctionExpressionParser.d.ts +4 -0
- package/dist/esm/src/parsers/FunctionExpressionParser.js +25 -8
- package/dist/esm/src/parsers/FunctionExpressionParser.js.map +1 -1
- package/dist/esm/src/parsers/InsertQueryParser.js +103 -31
- package/dist/esm/src/parsers/InsertQueryParser.js.map +1 -1
- package/dist/esm/src/parsers/MergeQueryParser.d.ts +26 -0
- package/dist/esm/src/parsers/MergeQueryParser.js +479 -0
- package/dist/esm/src/parsers/MergeQueryParser.js.map +1 -0
- package/dist/esm/src/parsers/ReturningClauseParser.js +50 -7
- package/dist/esm/src/parsers/ReturningClauseParser.js.map +1 -1
- package/dist/esm/src/parsers/SelectClauseParser.js +3 -3
- package/dist/esm/src/parsers/SelectClauseParser.js.map +1 -1
- package/dist/esm/src/parsers/SelectQueryParser.d.ts +4 -0
- package/dist/esm/src/parsers/SelectQueryParser.js +4 -0
- package/dist/esm/src/parsers/SelectQueryParser.js.map +1 -1
- package/dist/esm/src/parsers/SetClauseParser.js +97 -15
- package/dist/esm/src/parsers/SetClauseParser.js.map +1 -1
- package/dist/esm/src/parsers/SqlParser.d.ts +38 -0
- package/dist/esm/src/parsers/SqlParser.js +344 -0
- package/dist/esm/src/parsers/SqlParser.js.map +1 -0
- package/dist/esm/src/parsers/SqlPrintTokenParser.d.ts +68 -21
- package/dist/esm/src/parsers/SqlPrintTokenParser.js +1145 -254
- package/dist/esm/src/parsers/SqlPrintTokenParser.js.map +1 -1
- package/dist/esm/src/parsers/SqlTokenizer.d.ts +24 -2
- package/dist/esm/src/parsers/SqlTokenizer.js +135 -74
- package/dist/esm/src/parsers/SqlTokenizer.js.map +1 -1
- package/dist/esm/src/parsers/UpdateQueryParser.js +11 -1
- package/dist/esm/src/parsers/UpdateQueryParser.js.map +1 -1
- package/dist/esm/src/parsers/UsingClauseParser.d.ts +11 -0
- package/dist/esm/src/parsers/UsingClauseParser.js +29 -0
- package/dist/esm/src/parsers/UsingClauseParser.js.map +1 -0
- package/dist/esm/src/parsers/ValueParser.js +5 -1
- package/dist/esm/src/parsers/ValueParser.js.map +1 -1
- package/dist/esm/src/parsers/ValuesQueryParser.d.ts +0 -2
- package/dist/esm/src/parsers/ValuesQueryParser.js +5 -45
- package/dist/esm/src/parsers/ValuesQueryParser.js.map +1 -1
- package/dist/esm/src/parsers/utils/LexemeCommentUtils.d.ts +6 -0
- package/dist/esm/src/parsers/utils/LexemeCommentUtils.js +26 -0
- package/dist/esm/src/parsers/utils/LexemeCommentUtils.js.map +1 -0
- package/dist/esm/src/tokenReaders/CommandTokenReader.js +49 -2
- package/dist/esm/src/tokenReaders/CommandTokenReader.js.map +1 -1
- package/dist/esm/src/tokenReaders/LiteralTokenReader.js +8 -5
- package/dist/esm/src/tokenReaders/LiteralTokenReader.js.map +1 -1
- package/dist/esm/src/tokenReaders/OperatorTokenReader.js +10 -1
- package/dist/esm/src/tokenReaders/OperatorTokenReader.js.map +1 -1
- package/dist/esm/src/tokenReaders/TypeTokenReader.js +11 -1
- package/dist/esm/src/tokenReaders/TypeTokenReader.js.map +1 -1
- package/dist/esm/src/transformers/InsertQuerySelectValuesConverter.d.ts +18 -0
- package/dist/esm/src/transformers/InsertQuerySelectValuesConverter.js +118 -0
- package/dist/esm/src/transformers/InsertQuerySelectValuesConverter.js.map +1 -0
- package/dist/esm/src/transformers/LinePrinter.d.ts +2 -0
- package/dist/esm/src/transformers/LinePrinter.js +34 -1
- package/dist/esm/src/transformers/LinePrinter.js.map +1 -1
- package/dist/esm/src/transformers/OnelineFormattingHelper.d.ts +29 -0
- package/dist/esm/src/transformers/OnelineFormattingHelper.js +88 -0
- package/dist/esm/src/transformers/OnelineFormattingHelper.js.map +1 -0
- package/dist/esm/src/transformers/QueryBuilder.d.ts +47 -13
- package/dist/esm/src/transformers/QueryBuilder.js +424 -62
- package/dist/esm/src/transformers/QueryBuilder.js.map +1 -1
- package/dist/esm/src/transformers/SqlFormatter.d.ts +13 -3
- package/dist/esm/src/transformers/SqlFormatter.js +13 -4
- package/dist/esm/src/transformers/SqlFormatter.js.map +1 -1
- package/dist/esm/src/transformers/SqlPrinter.d.ts +63 -10
- package/dist/esm/src/transformers/SqlPrinter.js +954 -64
- package/dist/esm/src/transformers/SqlPrinter.js.map +1 -1
- package/dist/esm/src/types/Formatting.d.ts +8 -0
- package/dist/esm/src/types/Formatting.js +2 -0
- package/dist/esm/src/types/Formatting.js.map +1 -0
- package/dist/esm/src/utils/ParserStringUtils.d.ts +6 -0
- package/dist/esm/src/utils/ParserStringUtils.js +28 -0
- package/dist/esm/src/utils/ParserStringUtils.js.map +1 -0
- package/dist/esm/tsconfig.browser.tsbuildinfo +1 -1
- package/dist/index.min.js +22 -17
- package/dist/index.min.js.map +4 -4
- package/dist/src/index.d.ts +18 -0
- package/dist/src/index.js +18 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/models/BinarySelectQuery.d.ts +25 -1
- package/dist/src/models/BinarySelectQuery.js +28 -0
- package/dist/src/models/BinarySelectQuery.js.map +1 -1
- package/dist/src/models/Clause.d.ts +14 -2
- package/dist/src/models/Clause.js +29 -2
- package/dist/src/models/Clause.js.map +1 -1
- package/dist/src/models/CreateTableQuery.d.ts +99 -5
- package/dist/src/models/CreateTableQuery.js +90 -11
- package/dist/src/models/CreateTableQuery.js.map +1 -1
- package/dist/src/models/DDLStatements.d.ts +157 -0
- package/dist/src/models/DDLStatements.js +153 -0
- package/dist/src/models/DDLStatements.js.map +1 -0
- package/dist/src/models/DeleteQuery.d.ts +17 -0
- package/dist/src/models/DeleteQuery.js +20 -0
- package/dist/src/models/DeleteQuery.js.map +1 -0
- package/dist/src/models/InsertQuery.d.ts +7 -1
- package/dist/src/models/InsertQuery.js +6 -2
- package/dist/src/models/InsertQuery.js.map +1 -1
- package/dist/src/models/MergeQuery.d.ts +63 -0
- package/dist/src/models/MergeQuery.js +104 -0
- package/dist/src/models/MergeQuery.js.map +1 -0
- package/dist/src/models/SelectQuery.d.ts +37 -1
- package/dist/src/models/SelectQuery.js +7 -1
- package/dist/src/models/SelectQuery.js.map +1 -1
- package/dist/src/models/SimpleSelectQuery.d.ts +29 -1
- package/dist/src/models/SimpleSelectQuery.js +32 -0
- package/dist/src/models/SimpleSelectQuery.js.map +1 -1
- package/dist/src/models/SqlComponent.d.ts +2 -1
- package/dist/src/models/SqlComponent.js +1 -1
- package/dist/src/models/SqlComponent.js.map +1 -1
- package/dist/src/models/SqlPrintToken.d.ts +33 -0
- package/dist/src/models/SqlPrintToken.js +32 -0
- package/dist/src/models/SqlPrintToken.js.map +1 -1
- package/dist/src/models/ValuesQuery.d.ts +25 -1
- package/dist/src/models/ValuesQuery.js +28 -0
- package/dist/src/models/ValuesQuery.js.map +1 -1
- package/dist/src/parsers/AlterTableParser.d.ts +25 -0
- package/dist/src/parsers/AlterTableParser.js +432 -0
- package/dist/src/parsers/AlterTableParser.js.map +1 -0
- package/dist/src/parsers/CreateIndexParser.d.ts +16 -0
- package/dist/src/parsers/CreateIndexParser.js +241 -0
- package/dist/src/parsers/CreateIndexParser.js.map +1 -0
- package/dist/src/parsers/CreateTableParser.d.ts +41 -0
- package/dist/src/parsers/CreateTableParser.js +738 -0
- package/dist/src/parsers/CreateTableParser.js.map +1 -0
- package/dist/src/parsers/DeleteClauseParser.d.ts +11 -0
- package/dist/src/parsers/DeleteClauseParser.js +37 -0
- package/dist/src/parsers/DeleteClauseParser.js.map +1 -0
- package/dist/src/parsers/DeleteQueryParser.d.ts +16 -0
- package/dist/src/parsers/DeleteQueryParser.js +77 -0
- package/dist/src/parsers/DeleteQueryParser.js.map +1 -0
- package/dist/src/parsers/DropConstraintParser.d.ts +12 -0
- package/dist/src/parsers/DropConstraintParser.js +51 -0
- package/dist/src/parsers/DropConstraintParser.js.map +1 -0
- package/dist/src/parsers/DropIndexParser.d.ts +12 -0
- package/dist/src/parsers/DropIndexParser.js +73 -0
- package/dist/src/parsers/DropIndexParser.js.map +1 -0
- package/dist/src/parsers/DropTableParser.d.ts +12 -0
- package/dist/src/parsers/DropTableParser.js +63 -0
- package/dist/src/parsers/DropTableParser.js.map +1 -0
- package/dist/src/parsers/FunctionExpressionParser.d.ts +4 -0
- package/dist/src/parsers/FunctionExpressionParser.js +25 -8
- package/dist/src/parsers/FunctionExpressionParser.js.map +1 -1
- package/dist/src/parsers/InsertQueryParser.js +103 -31
- package/dist/src/parsers/InsertQueryParser.js.map +1 -1
- package/dist/src/parsers/MergeQueryParser.d.ts +26 -0
- package/dist/src/parsers/MergeQueryParser.js +483 -0
- package/dist/src/parsers/MergeQueryParser.js.map +1 -0
- package/dist/src/parsers/ReturningClauseParser.js +50 -7
- package/dist/src/parsers/ReturningClauseParser.js.map +1 -1
- package/dist/src/parsers/SelectClauseParser.js +2 -2
- package/dist/src/parsers/SelectClauseParser.js.map +1 -1
- package/dist/src/parsers/SelectQueryParser.d.ts +4 -0
- package/dist/src/parsers/SelectQueryParser.js +4 -0
- package/dist/src/parsers/SelectQueryParser.js.map +1 -1
- package/dist/src/parsers/SetClauseParser.js +97 -15
- package/dist/src/parsers/SetClauseParser.js.map +1 -1
- package/dist/src/parsers/SqlParser.d.ts +38 -0
- package/dist/src/parsers/SqlParser.js +353 -0
- package/dist/src/parsers/SqlParser.js.map +1 -0
- package/dist/src/parsers/SqlPrintTokenParser.d.ts +68 -21
- package/dist/src/parsers/SqlPrintTokenParser.js +1143 -252
- package/dist/src/parsers/SqlPrintTokenParser.js.map +1 -1
- package/dist/src/parsers/SqlTokenizer.d.ts +24 -2
- package/dist/src/parsers/SqlTokenizer.js +139 -74
- package/dist/src/parsers/SqlTokenizer.js.map +1 -1
- package/dist/src/parsers/UpdateQueryParser.js +11 -1
- package/dist/src/parsers/UpdateQueryParser.js.map +1 -1
- package/dist/src/parsers/UsingClauseParser.d.ts +11 -0
- package/dist/src/parsers/UsingClauseParser.js +33 -0
- package/dist/src/parsers/UsingClauseParser.js.map +1 -0
- package/dist/src/parsers/ValueParser.js +5 -1
- package/dist/src/parsers/ValueParser.js.map +1 -1
- package/dist/src/parsers/ValuesQueryParser.d.ts +0 -2
- package/dist/src/parsers/ValuesQueryParser.js +5 -45
- package/dist/src/parsers/ValuesQueryParser.js.map +1 -1
- package/dist/src/parsers/utils/LexemeCommentUtils.d.ts +6 -0
- package/dist/src/parsers/utils/LexemeCommentUtils.js +29 -0
- package/dist/src/parsers/utils/LexemeCommentUtils.js.map +1 -0
- package/dist/src/tokenReaders/CommandTokenReader.js +49 -2
- package/dist/src/tokenReaders/CommandTokenReader.js.map +1 -1
- package/dist/src/tokenReaders/LiteralTokenReader.js +8 -5
- package/dist/src/tokenReaders/LiteralTokenReader.js.map +1 -1
- package/dist/src/tokenReaders/OperatorTokenReader.js +10 -1
- package/dist/src/tokenReaders/OperatorTokenReader.js.map +1 -1
- package/dist/src/tokenReaders/TypeTokenReader.js +11 -1
- package/dist/src/tokenReaders/TypeTokenReader.js.map +1 -1
- package/dist/src/transformers/InsertQuerySelectValuesConverter.d.ts +18 -0
- package/dist/src/transformers/InsertQuerySelectValuesConverter.js +122 -0
- package/dist/src/transformers/InsertQuerySelectValuesConverter.js.map +1 -0
- package/dist/src/transformers/LinePrinter.d.ts +2 -0
- package/dist/src/transformers/LinePrinter.js +34 -1
- package/dist/src/transformers/LinePrinter.js.map +1 -1
- package/dist/src/transformers/OnelineFormattingHelper.d.ts +29 -0
- package/dist/src/transformers/OnelineFormattingHelper.js +92 -0
- package/dist/src/transformers/OnelineFormattingHelper.js.map +1 -0
- package/dist/src/transformers/QueryBuilder.d.ts +47 -13
- package/dist/src/transformers/QueryBuilder.js +433 -60
- package/dist/src/transformers/QueryBuilder.js.map +1 -1
- package/dist/src/transformers/SqlFormatter.d.ts +13 -3
- package/dist/src/transformers/SqlFormatter.js +20 -6
- package/dist/src/transformers/SqlFormatter.js.map +1 -1
- package/dist/src/transformers/SqlPrinter.d.ts +63 -10
- package/dist/src/transformers/SqlPrinter.js +954 -64
- package/dist/src/transformers/SqlPrinter.js.map +1 -1
- package/dist/src/types/Formatting.d.ts +8 -0
- package/dist/src/types/Formatting.js +3 -0
- package/dist/src/types/Formatting.js.map +1 -0
- package/dist/src/utils/ParserStringUtils.d.ts +6 -0
- package/dist/src/utils/ParserStringUtils.js +31 -0
- package/dist/src/utils/ParserStringUtils.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,483 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MergeQueryParser = void 0;
|
|
4
|
+
const MergeQuery_1 = require("../models/MergeQuery");
|
|
5
|
+
const Clause_1 = require("../models/Clause");
|
|
6
|
+
const ValueComponent_1 = require("../models/ValueComponent");
|
|
7
|
+
const Lexeme_1 = require("../models/Lexeme");
|
|
8
|
+
const SqlTokenizer_1 = require("./SqlTokenizer");
|
|
9
|
+
const WithClauseParser_1 = require("./WithClauseParser");
|
|
10
|
+
const SourceExpressionParser_1 = require("./SourceExpressionParser");
|
|
11
|
+
const ValueParser_1 = require("./ValueParser");
|
|
12
|
+
const WhereClauseParser_1 = require("./WhereClauseParser");
|
|
13
|
+
const FullNameParser_1 = require("./FullNameParser");
|
|
14
|
+
const LexemeCommentUtils_1 = require("./utils/LexemeCommentUtils");
|
|
15
|
+
class MergeQueryParser {
|
|
16
|
+
/**
|
|
17
|
+
* Parse SQL string to MergeQuery AST.
|
|
18
|
+
* @param query SQL string
|
|
19
|
+
*/
|
|
20
|
+
static parse(query) {
|
|
21
|
+
const tokenizer = new SqlTokenizer_1.SqlTokenizer(query);
|
|
22
|
+
const lexemes = tokenizer.readLexemes();
|
|
23
|
+
const result = this.parseFromLexeme(lexemes, 0);
|
|
24
|
+
if (result.newIndex < lexemes.length) {
|
|
25
|
+
throw new Error(`Syntax error: Unexpected token "${lexemes[result.newIndex].value}" at position ${result.newIndex}. The MERGE statement is complete but there are additional tokens.`);
|
|
26
|
+
}
|
|
27
|
+
return result.value;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Parse from lexeme array (for internal use and tests).
|
|
31
|
+
*/
|
|
32
|
+
static parseFromLexeme(lexemes, index) {
|
|
33
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
34
|
+
let idx = index;
|
|
35
|
+
// Parse optional WITH clause wrapping the MERGE statement for CTE support.
|
|
36
|
+
let withClause = null;
|
|
37
|
+
if (((_a = lexemes[idx]) === null || _a === void 0 ? void 0 : _a.value) === "with") {
|
|
38
|
+
const withResult = WithClauseParser_1.WithClauseParser.parseFromLexeme(lexemes, idx);
|
|
39
|
+
withClause = withResult.value;
|
|
40
|
+
idx = withResult.newIndex;
|
|
41
|
+
}
|
|
42
|
+
// Ensure the statement begins with MERGE INTO.
|
|
43
|
+
const mergeKeywordLexeme = lexemes[idx];
|
|
44
|
+
const mergeKeywordComments = (0, LexemeCommentUtils_1.extractLexemeComments)(mergeKeywordLexeme);
|
|
45
|
+
if ((mergeKeywordLexeme === null || mergeKeywordLexeme === void 0 ? void 0 : mergeKeywordLexeme.value) !== "merge into") {
|
|
46
|
+
const actual = (_c = (_b = lexemes[idx]) === null || _b === void 0 ? void 0 : _b.value) !== null && _c !== void 0 ? _c : "end of input";
|
|
47
|
+
throw new Error(`[MergeQueryParser] Syntax error at position ${idx}: expected 'MERGE INTO' but found '${actual}'.`);
|
|
48
|
+
}
|
|
49
|
+
idx++;
|
|
50
|
+
// Parse target source expression (table or alias assignment).
|
|
51
|
+
const targetResult = SourceExpressionParser_1.SourceExpressionParser.parseFromLexeme(lexemes, idx);
|
|
52
|
+
const target = targetResult.value;
|
|
53
|
+
idx = targetResult.newIndex;
|
|
54
|
+
// Attach inline comments following MERGE INTO to the target source.
|
|
55
|
+
this.addUniquePositionedComments(target.datasource, "before", mergeKeywordComments.after);
|
|
56
|
+
// Consume USING clause introducing the source relation.
|
|
57
|
+
if (((_d = lexemes[idx]) === null || _d === void 0 ? void 0 : _d.value) !== "using") {
|
|
58
|
+
const actual = (_f = (_e = lexemes[idx]) === null || _e === void 0 ? void 0 : _e.value) !== null && _f !== void 0 ? _f : "end of input";
|
|
59
|
+
throw new Error(`[MergeQueryParser] Syntax error at position ${idx}: expected 'USING' but found '${actual}'.`);
|
|
60
|
+
}
|
|
61
|
+
idx++;
|
|
62
|
+
// Parse source expression providing the dataset to merge with target.
|
|
63
|
+
const sourceResult = SourceExpressionParser_1.SourceExpressionParser.parseFromLexeme(lexemes, idx);
|
|
64
|
+
const source = sourceResult.value;
|
|
65
|
+
idx = sourceResult.newIndex;
|
|
66
|
+
// Require ON clause defining the match predicate.
|
|
67
|
+
if (((_g = lexemes[idx]) === null || _g === void 0 ? void 0 : _g.value) !== "on") {
|
|
68
|
+
const actual = (_j = (_h = lexemes[idx]) === null || _h === void 0 ? void 0 : _h.value) !== null && _j !== void 0 ? _j : "end of input";
|
|
69
|
+
throw new Error(`[MergeQueryParser] Syntax error at position ${idx}: expected 'ON' but found '${actual}'.`);
|
|
70
|
+
}
|
|
71
|
+
idx++;
|
|
72
|
+
// Parse ON condition allowing any valid boolean expression.
|
|
73
|
+
const onConditionResult = ValueParser_1.ValueParser.parseFromLexeme(lexemes, idx);
|
|
74
|
+
const onCondition = onConditionResult.value;
|
|
75
|
+
idx = onConditionResult.newIndex;
|
|
76
|
+
// Accumulate WHEN clauses that describe matched and unmatched behaviors.
|
|
77
|
+
const whenResult = this.parseWhenClauses(lexemes, idx);
|
|
78
|
+
if (whenResult.clauses.length === 0) {
|
|
79
|
+
throw new Error("[MergeQueryParser] MERGE statement must contain at least one WHEN clause.");
|
|
80
|
+
}
|
|
81
|
+
const mergeQuery = new MergeQuery_1.MergeQuery({
|
|
82
|
+
withClause,
|
|
83
|
+
target,
|
|
84
|
+
source,
|
|
85
|
+
onCondition,
|
|
86
|
+
whenClauses: whenResult.clauses
|
|
87
|
+
});
|
|
88
|
+
// Preserve leading comments that precede the MERGE keyword.
|
|
89
|
+
this.addUniquePositionedComments(mergeQuery, "before", mergeKeywordComments.before);
|
|
90
|
+
return {
|
|
91
|
+
value: mergeQuery,
|
|
92
|
+
newIndex: whenResult.newIndex
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
static parseWhenClauses(lexemes, index) {
|
|
96
|
+
var _a, _b;
|
|
97
|
+
const clauses = [];
|
|
98
|
+
let idx = index;
|
|
99
|
+
// Iterate until no further WHEN keyword is found.
|
|
100
|
+
while (this.getLowerValue(lexemes[idx]) === "when") {
|
|
101
|
+
idx++;
|
|
102
|
+
// Determine the match type (matched, not matched, not matched by ...)
|
|
103
|
+
const { matchType, newIndex: matchIndex } = this.parseMatchType(lexemes, idx);
|
|
104
|
+
idx = matchIndex;
|
|
105
|
+
// Parse optional AND condition that narrows the clause applicability.
|
|
106
|
+
let additionalCondition = null;
|
|
107
|
+
if (this.getLowerValue(lexemes[idx]) === "and") {
|
|
108
|
+
idx++;
|
|
109
|
+
const conditionResult = ValueParser_1.ValueParser.parseFromLexeme(lexemes, idx);
|
|
110
|
+
additionalCondition = conditionResult.value;
|
|
111
|
+
idx = conditionResult.newIndex;
|
|
112
|
+
}
|
|
113
|
+
// Expect THEN before capturing the action body.
|
|
114
|
+
const thenLexeme = lexemes[idx];
|
|
115
|
+
if (this.getLowerValue(thenLexeme) !== "then") {
|
|
116
|
+
const actual = (_a = thenLexeme === null || thenLexeme === void 0 ? void 0 : thenLexeme.value) !== null && _a !== void 0 ? _a : "end of input";
|
|
117
|
+
throw new Error(`[MergeQueryParser] Syntax error at position ${idx}: expected 'THEN' but found '${actual}'.`);
|
|
118
|
+
}
|
|
119
|
+
const thenComments = (0, LexemeCommentUtils_1.extractLexemeComments)(thenLexeme);
|
|
120
|
+
const commentsBeforeThen = [];
|
|
121
|
+
const precedingLexeme = lexemes[idx - 1];
|
|
122
|
+
if (precedingLexeme) {
|
|
123
|
+
const precedingComments = (0, LexemeCommentUtils_1.extractLexemeComments)(precedingLexeme);
|
|
124
|
+
this.mergeUnique(commentsBeforeThen, precedingComments.after);
|
|
125
|
+
}
|
|
126
|
+
this.mergeUnique(commentsBeforeThen, thenComments.before);
|
|
127
|
+
idx++;
|
|
128
|
+
// Dispatch to clause-specific action parser with comments that follow THEN.
|
|
129
|
+
const actionResult = this.parseAction(lexemes, idx, (_b = thenComments.after) !== null && _b !== void 0 ? _b : []);
|
|
130
|
+
idx = actionResult.newIndex;
|
|
131
|
+
const whenClause = new MergeQuery_1.MergeWhenClause(matchType, actionResult.action, additionalCondition);
|
|
132
|
+
whenClause.addThenLeadingComments(commentsBeforeThen);
|
|
133
|
+
clauses.push(whenClause);
|
|
134
|
+
}
|
|
135
|
+
return { clauses, newIndex: idx };
|
|
136
|
+
}
|
|
137
|
+
static parseMatchType(lexemes, index) {
|
|
138
|
+
var _a, _b;
|
|
139
|
+
let idx = index;
|
|
140
|
+
const value = this.getLowerValue(lexemes[idx]);
|
|
141
|
+
// Handle WHEN MATCHED scenario directly.
|
|
142
|
+
if (value === "matched") {
|
|
143
|
+
idx++;
|
|
144
|
+
return { matchType: "matched", newIndex: idx };
|
|
145
|
+
}
|
|
146
|
+
// Handle the different NOT MATCHED variants (tokenized as atomic commands).
|
|
147
|
+
if (value === "not matched") {
|
|
148
|
+
idx++;
|
|
149
|
+
let matchType = "not_matched";
|
|
150
|
+
return { matchType, newIndex: idx };
|
|
151
|
+
}
|
|
152
|
+
if (value === "not matched by source") {
|
|
153
|
+
idx++;
|
|
154
|
+
return { matchType: "not_matched_by_source", newIndex: idx };
|
|
155
|
+
}
|
|
156
|
+
if (value === "not matched by target") {
|
|
157
|
+
idx++;
|
|
158
|
+
return { matchType: "not_matched_by_target", newIndex: idx };
|
|
159
|
+
}
|
|
160
|
+
const actual = (_b = (_a = lexemes[idx]) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : "end of input";
|
|
161
|
+
throw new Error(`[MergeQueryParser] Syntax error at position ${idx}: expected 'MATCHED' or 'NOT MATCHED' but found '${actual}'.`);
|
|
162
|
+
}
|
|
163
|
+
static parseAction(lexemes, index, leadingComments = []) {
|
|
164
|
+
var _a;
|
|
165
|
+
let idx = index;
|
|
166
|
+
const token = lexemes[idx];
|
|
167
|
+
if (!token) {
|
|
168
|
+
throw new Error("[MergeQueryParser] Unexpected end of input while parsing WHEN clause action.");
|
|
169
|
+
}
|
|
170
|
+
const tokenValue = token.value.toLowerCase();
|
|
171
|
+
const tokenComments = (0, LexemeCommentUtils_1.extractLexemeComments)(token);
|
|
172
|
+
const actionLeadingComments = [];
|
|
173
|
+
this.mergeUnique(actionLeadingComments, leadingComments);
|
|
174
|
+
this.mergeUnique(actionLeadingComments, tokenComments.before);
|
|
175
|
+
// Handle UPDATE branches (accepting 'update' or 'update set').
|
|
176
|
+
if (tokenValue === "update" || tokenValue === "update set") {
|
|
177
|
+
const expectSetKeyword = tokenValue === "update";
|
|
178
|
+
idx++;
|
|
179
|
+
const pendingSetClauseComments = tokenComments.after;
|
|
180
|
+
const setResult = this.parseSetClause(lexemes, idx, expectSetKeyword, pendingSetClauseComments);
|
|
181
|
+
idx = setResult.newIndex;
|
|
182
|
+
// Allow optional WHERE predicate to further limit updated rows.
|
|
183
|
+
let whereClause = null;
|
|
184
|
+
if (((_a = lexemes[idx]) === null || _a === void 0 ? void 0 : _a.value) === "where") {
|
|
185
|
+
const whereResult = WhereClauseParser_1.WhereClauseParser.parseFromLexeme(lexemes, idx);
|
|
186
|
+
whereClause = whereResult.value;
|
|
187
|
+
idx = whereResult.newIndex;
|
|
188
|
+
}
|
|
189
|
+
const action = new MergeQuery_1.MergeUpdateAction(setResult.setClause, whereClause);
|
|
190
|
+
this.addUniquePositionedComments(action, "before", actionLeadingComments);
|
|
191
|
+
return {
|
|
192
|
+
action,
|
|
193
|
+
newIndex: idx
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
// Handle DELETE (optional WHERE clause mirrors UPDATE behavior).
|
|
197
|
+
if (tokenValue === "delete") {
|
|
198
|
+
idx++;
|
|
199
|
+
let whereClause = null;
|
|
200
|
+
if (this.getLowerValue(lexemes[idx]) === "where") {
|
|
201
|
+
const whereResult = WhereClauseParser_1.WhereClauseParser.parseFromLexeme(lexemes, idx);
|
|
202
|
+
whereClause = whereResult.value;
|
|
203
|
+
idx = whereResult.newIndex;
|
|
204
|
+
}
|
|
205
|
+
const action = new MergeQuery_1.MergeDeleteAction(whereClause);
|
|
206
|
+
this.addUniquePositionedComments(action, "before", actionLeadingComments);
|
|
207
|
+
this.addUniquePositionedComments(action, "after", tokenComments.after);
|
|
208
|
+
return {
|
|
209
|
+
action,
|
|
210
|
+
newIndex: idx
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
// Interpret DO NOTHING keyword sequence.
|
|
214
|
+
if (tokenValue === "do nothing") {
|
|
215
|
+
idx++;
|
|
216
|
+
const action = new MergeQuery_1.MergeDoNothingAction();
|
|
217
|
+
this.addUniquePositionedComments(action, "before", actionLeadingComments);
|
|
218
|
+
this.addUniquePositionedComments(action, "after", tokenComments.after);
|
|
219
|
+
return { action, newIndex: idx };
|
|
220
|
+
}
|
|
221
|
+
if (tokenValue === "insert default values") {
|
|
222
|
+
idx++;
|
|
223
|
+
const columnResult = this.parseInsertColumnProjection(lexemes, idx, tokenComments.after);
|
|
224
|
+
idx = columnResult.newIndex;
|
|
225
|
+
const action = new MergeQuery_1.MergeInsertAction({
|
|
226
|
+
columns: columnResult.columns,
|
|
227
|
+
defaultValues: true
|
|
228
|
+
});
|
|
229
|
+
this.addUniquePositionedComments(action, "before", actionLeadingComments);
|
|
230
|
+
this.addUniquePositionedComments(action, "after", columnResult.trailingComments);
|
|
231
|
+
return {
|
|
232
|
+
action,
|
|
233
|
+
newIndex: idx
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
// Parse INSERT clauses including column projection and VALUES/default values.
|
|
237
|
+
if (tokenValue === "insert") {
|
|
238
|
+
idx++;
|
|
239
|
+
const insertResult = this.parseInsertAction(lexemes, idx, {
|
|
240
|
+
pendingCommentsAfterInsert: tokenComments.after
|
|
241
|
+
});
|
|
242
|
+
this.addUniquePositionedComments(insertResult.action, "before", actionLeadingComments);
|
|
243
|
+
return insertResult;
|
|
244
|
+
}
|
|
245
|
+
const actual = token.value;
|
|
246
|
+
throw new Error(`[MergeQueryParser] Unsupported action '${actual}'. Only UPDATE, DELETE, INSERT, and DO NOTHING are supported within MERGE WHEN clauses.`);
|
|
247
|
+
}
|
|
248
|
+
static parseSetClause(lexemes, index, expectSetKeyword, pendingCommentsAfterUpdate = []) {
|
|
249
|
+
var _a, _b, _c, _d, _e, _f;
|
|
250
|
+
let idx = index;
|
|
251
|
+
// Capture comments that accompany the SET keyword so they can be reapplied later.
|
|
252
|
+
let setKeywordComments = (0, LexemeCommentUtils_1.extractLexemeComments)(lexemes[idx]);
|
|
253
|
+
if (expectSetKeyword) {
|
|
254
|
+
if (this.getLowerValue(lexemes[idx]) !== "set") {
|
|
255
|
+
const actual = (_b = (_a = lexemes[idx]) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : "end of input";
|
|
256
|
+
throw new Error(`[MergeQueryParser] Syntax error at position ${idx}: expected 'SET' but found '${actual}'.`);
|
|
257
|
+
}
|
|
258
|
+
idx++;
|
|
259
|
+
}
|
|
260
|
+
else if (this.getLowerValue(lexemes[idx]) === "set") {
|
|
261
|
+
setKeywordComments = (0, LexemeCommentUtils_1.extractLexemeComments)(lexemes[idx]);
|
|
262
|
+
idx++;
|
|
263
|
+
}
|
|
264
|
+
else {
|
|
265
|
+
setKeywordComments = { before: [], after: [] };
|
|
266
|
+
}
|
|
267
|
+
const items = [];
|
|
268
|
+
let pendingBeforeForNext = [];
|
|
269
|
+
// Comments trailing UPDATE or SET precede the first assignment.
|
|
270
|
+
this.mergeUnique(pendingBeforeForNext, pendingCommentsAfterUpdate);
|
|
271
|
+
this.mergeUnique(pendingBeforeForNext, setKeywordComments.after);
|
|
272
|
+
// Parse comma-separated column assignments.
|
|
273
|
+
while (idx < lexemes.length) {
|
|
274
|
+
const currentLexeme = lexemes[idx];
|
|
275
|
+
if (!currentLexeme) {
|
|
276
|
+
break;
|
|
277
|
+
}
|
|
278
|
+
// Stop when we encounter tokens that belong to the next clause (e.g., WHERE or WHEN).
|
|
279
|
+
if (this.isSetClauseTerminator(currentLexeme)) {
|
|
280
|
+
break;
|
|
281
|
+
}
|
|
282
|
+
if (!(currentLexeme.type & (Lexeme_1.TokenType.Identifier | Lexeme_1.TokenType.Function | Lexeme_1.TokenType.Type | Lexeme_1.TokenType.OpenBracket))) {
|
|
283
|
+
break;
|
|
284
|
+
}
|
|
285
|
+
const columnComments = (0, LexemeCommentUtils_1.extractLexemeComments)(currentLexeme);
|
|
286
|
+
const { namespaces, name, newIndex } = FullNameParser_1.FullNameParser.parseFromLexeme(lexemes, idx);
|
|
287
|
+
idx = newIndex;
|
|
288
|
+
if (((_c = lexemes[idx]) === null || _c === void 0 ? void 0 : _c.type) !== Lexeme_1.TokenType.Operator || lexemes[idx].value !== "=") {
|
|
289
|
+
const actual = (_e = (_d = lexemes[idx]) === null || _d === void 0 ? void 0 : _d.value) !== null && _e !== void 0 ? _e : "end of input";
|
|
290
|
+
throw new Error(`[MergeQueryParser] Syntax error at position ${idx}: expected '=' in SET clause but found '${actual}'.`);
|
|
291
|
+
}
|
|
292
|
+
const equalsLexeme = lexemes[idx];
|
|
293
|
+
const equalsComments = (0, LexemeCommentUtils_1.extractLexemeComments)(equalsLexeme);
|
|
294
|
+
idx++;
|
|
295
|
+
const valueResult = ValueParser_1.ValueParser.parseFromLexeme(lexemes, idx);
|
|
296
|
+
idx = valueResult.newIndex;
|
|
297
|
+
const setItem = new Clause_1.SetClauseItem({ namespaces, column: name }, valueResult.value);
|
|
298
|
+
// Move buffered comments to the column identifier before processing the assignment.
|
|
299
|
+
const beforeComments = [];
|
|
300
|
+
this.mergeUnique(beforeComments, pendingBeforeForNext);
|
|
301
|
+
this.mergeUnique(beforeComments, columnComments.before);
|
|
302
|
+
this.addUniquePositionedComments(name, "before", beforeComments);
|
|
303
|
+
pendingBeforeForNext = [];
|
|
304
|
+
// Keep trailing identifier comments attached to the column token.
|
|
305
|
+
this.addUniquePositionedComments(name, "after", columnComments.after);
|
|
306
|
+
// Preserve comments embedded around the '=' operator.
|
|
307
|
+
this.addUniquePositionedComments(setItem, "after", equalsComments.before);
|
|
308
|
+
this.addUniquePositionedComments(valueResult.value, "before", equalsComments.after);
|
|
309
|
+
items.push(setItem);
|
|
310
|
+
if (((_f = lexemes[idx]) === null || _f === void 0 ? void 0 : _f.type) === Lexeme_1.TokenType.Comma) {
|
|
311
|
+
const commaLexeme = lexemes[idx];
|
|
312
|
+
const commaComments = (0, LexemeCommentUtils_1.extractLexemeComments)(commaLexeme);
|
|
313
|
+
idx++;
|
|
314
|
+
// Comments before the comma belong to the current assignment.
|
|
315
|
+
this.addUniquePositionedComments(setItem, "after", commaComments.before);
|
|
316
|
+
// Comments after the comma should precede the following assignment.
|
|
317
|
+
pendingBeforeForNext = [];
|
|
318
|
+
this.mergeUnique(pendingBeforeForNext, commaComments.after);
|
|
319
|
+
continue;
|
|
320
|
+
}
|
|
321
|
+
break;
|
|
322
|
+
}
|
|
323
|
+
if (pendingBeforeForNext.length > 0 && items.length > 0) {
|
|
324
|
+
this.addUniquePositionedComments(items[items.length - 1], "after", pendingBeforeForNext);
|
|
325
|
+
}
|
|
326
|
+
if (items.length === 0) {
|
|
327
|
+
throw new Error("[MergeQueryParser] SET clause must contain at least one column assignment.");
|
|
328
|
+
}
|
|
329
|
+
const setClause = new Clause_1.SetClause(items);
|
|
330
|
+
// Any comments before SET belong in front of the entire clause.
|
|
331
|
+
this.addUniquePositionedComments(setClause, "before", setKeywordComments.before);
|
|
332
|
+
return { setClause, newIndex: idx };
|
|
333
|
+
}
|
|
334
|
+
static parseInsertAction(lexemes, index, options) {
|
|
335
|
+
var _a, _b, _c;
|
|
336
|
+
let idx = index;
|
|
337
|
+
const pendingAfterInsert = (_a = options === null || options === void 0 ? void 0 : options.pendingCommentsAfterInsert) !== null && _a !== void 0 ? _a : [];
|
|
338
|
+
// Parse column projection and capture any comments that should precede VALUES.
|
|
339
|
+
const columnResult = this.parseInsertColumnProjection(lexemes, idx, pendingAfterInsert);
|
|
340
|
+
let columns = columnResult.columns;
|
|
341
|
+
idx = columnResult.newIndex;
|
|
342
|
+
let pendingBeforeValues = columnResult.trailingComments;
|
|
343
|
+
// Parse VALUES (...) payload referencing source columns.
|
|
344
|
+
if (this.getLowerValue(lexemes[idx]) === "values") {
|
|
345
|
+
const valuesLexeme = lexemes[idx];
|
|
346
|
+
const valuesComments = (0, LexemeCommentUtils_1.extractLexemeComments)(valuesLexeme);
|
|
347
|
+
idx++;
|
|
348
|
+
// Comments carried forward should appear before the tuple list.
|
|
349
|
+
const beforeValuesComments = [];
|
|
350
|
+
this.mergeUnique(beforeValuesComments, pendingBeforeValues);
|
|
351
|
+
this.mergeUnique(beforeValuesComments, valuesComments.before);
|
|
352
|
+
const valuesResult = ValueParser_1.ValueParser.parseArgument(Lexeme_1.TokenType.OpenParen, Lexeme_1.TokenType.CloseParen, lexemes, idx);
|
|
353
|
+
idx = valuesResult.newIndex;
|
|
354
|
+
if (!(valuesResult.value instanceof ValueComponent_1.ValueList)) {
|
|
355
|
+
throw new Error("[MergeQueryParser] Unexpected VALUES payload. Expected a parenthesized value list.");
|
|
356
|
+
}
|
|
357
|
+
const valueList = valuesResult.value;
|
|
358
|
+
const closingParenComments = (0, LexemeCommentUtils_1.extractLexemeComments)(lexemes[idx - 1]);
|
|
359
|
+
this.addUniquePositionedComments(valueList, "after", closingParenComments.after);
|
|
360
|
+
this.addUniquePositionedComments(valueList, "after", valuesComments.after);
|
|
361
|
+
const action = new MergeQuery_1.MergeInsertAction({
|
|
362
|
+
columns,
|
|
363
|
+
values: valueList
|
|
364
|
+
});
|
|
365
|
+
action.addValuesLeadingComments(beforeValuesComments);
|
|
366
|
+
return {
|
|
367
|
+
action,
|
|
368
|
+
newIndex: idx
|
|
369
|
+
};
|
|
370
|
+
}
|
|
371
|
+
const actual = (_c = (_b = lexemes[idx]) === null || _b === void 0 ? void 0 : _b.value) !== null && _c !== void 0 ? _c : "end of input";
|
|
372
|
+
throw new Error(`[MergeQueryParser] Unsupported INSERT payload '${actual}'. Use VALUES (...) or DEFAULT VALUES.`);
|
|
373
|
+
}
|
|
374
|
+
static parseInsertColumnProjection(lexemes, index, pendingBeforeFirstColumn) {
|
|
375
|
+
var _a, _b, _c, _d, _e;
|
|
376
|
+
let idx = index;
|
|
377
|
+
// Without parentheses there is no column projection, so pass comments forward to VALUES.
|
|
378
|
+
if (((_a = lexemes[idx]) === null || _a === void 0 ? void 0 : _a.type) !== Lexeme_1.TokenType.OpenParen) {
|
|
379
|
+
return {
|
|
380
|
+
columns: null,
|
|
381
|
+
newIndex: idx,
|
|
382
|
+
trailingComments: [...pendingBeforeFirstColumn]
|
|
383
|
+
};
|
|
384
|
+
}
|
|
385
|
+
const openParenLexeme = lexemes[idx];
|
|
386
|
+
const parenComments = (0, LexemeCommentUtils_1.extractLexemeComments)(openParenLexeme);
|
|
387
|
+
idx++;
|
|
388
|
+
const columns = [];
|
|
389
|
+
let pendingBeforeForNext = [];
|
|
390
|
+
// Seed the first identifier with comments that trail INSERT or the opening parenthesis.
|
|
391
|
+
this.mergeUnique(pendingBeforeForNext, pendingBeforeFirstColumn);
|
|
392
|
+
this.mergeUnique(pendingBeforeForNext, parenComments.before);
|
|
393
|
+
this.mergeUnique(pendingBeforeForNext, parenComments.after);
|
|
394
|
+
while (idx < lexemes.length && (lexemes[idx].type & Lexeme_1.TokenType.Identifier)) {
|
|
395
|
+
const columnLexeme = lexemes[idx];
|
|
396
|
+
const columnComments = (0, LexemeCommentUtils_1.extractLexemeComments)(columnLexeme);
|
|
397
|
+
const column = new ValueComponent_1.IdentifierString(columnLexeme.value);
|
|
398
|
+
// Move buffered comments so they precede the current identifier.
|
|
399
|
+
const beforeComments = [];
|
|
400
|
+
this.mergeUnique(beforeComments, pendingBeforeForNext);
|
|
401
|
+
this.mergeUnique(beforeComments, columnComments.before);
|
|
402
|
+
this.addUniquePositionedComments(column, "before", beforeComments);
|
|
403
|
+
pendingBeforeForNext = [];
|
|
404
|
+
// Preserve comments that trail the identifier itself.
|
|
405
|
+
this.addUniquePositionedComments(column, "after", columnComments.after);
|
|
406
|
+
columns.push(column);
|
|
407
|
+
idx++;
|
|
408
|
+
if (((_b = lexemes[idx]) === null || _b === void 0 ? void 0 : _b.type) === Lexeme_1.TokenType.Comma) {
|
|
409
|
+
const commaLexeme = lexemes[idx];
|
|
410
|
+
const commaComments = (0, LexemeCommentUtils_1.extractLexemeComments)(commaLexeme);
|
|
411
|
+
idx++;
|
|
412
|
+
// Attach comma-leading comments to the current column.
|
|
413
|
+
this.addUniquePositionedComments(column, "after", commaComments.before);
|
|
414
|
+
// Comments after the comma prepare the next identifier.
|
|
415
|
+
pendingBeforeForNext = [];
|
|
416
|
+
this.mergeUnique(pendingBeforeForNext, commaComments.after);
|
|
417
|
+
continue;
|
|
418
|
+
}
|
|
419
|
+
break;
|
|
420
|
+
}
|
|
421
|
+
if (pendingBeforeForNext.length > 0 && columns.length > 0) {
|
|
422
|
+
this.addUniquePositionedComments(columns[columns.length - 1], "after", pendingBeforeForNext);
|
|
423
|
+
pendingBeforeForNext = [];
|
|
424
|
+
}
|
|
425
|
+
if (((_c = lexemes[idx]) === null || _c === void 0 ? void 0 : _c.type) !== Lexeme_1.TokenType.CloseParen) {
|
|
426
|
+
const actual = (_e = (_d = lexemes[idx]) === null || _d === void 0 ? void 0 : _d.value) !== null && _e !== void 0 ? _e : "end of input";
|
|
427
|
+
throw new Error(`[MergeQueryParser] Syntax error at position ${idx}: expected ')' after column list but found '${actual}'.`);
|
|
428
|
+
}
|
|
429
|
+
const closeParenLexeme = lexemes[idx];
|
|
430
|
+
const closeParenComments = (0, LexemeCommentUtils_1.extractLexemeComments)(closeParenLexeme);
|
|
431
|
+
idx++;
|
|
432
|
+
if (closeParenComments.before.length > 0 && columns.length > 0) {
|
|
433
|
+
this.addUniquePositionedComments(columns[columns.length - 1], "after", closeParenComments.before);
|
|
434
|
+
}
|
|
435
|
+
const trailingComments = [];
|
|
436
|
+
this.mergeUnique(trailingComments, closeParenComments.after);
|
|
437
|
+
this.mergeUnique(trailingComments, pendingBeforeForNext);
|
|
438
|
+
return {
|
|
439
|
+
columns: columns.length > 0 ? columns : [],
|
|
440
|
+
newIndex: idx,
|
|
441
|
+
trailingComments
|
|
442
|
+
};
|
|
443
|
+
}
|
|
444
|
+
static isSetClauseTerminator(lexeme) {
|
|
445
|
+
if (!lexeme) {
|
|
446
|
+
return false;
|
|
447
|
+
}
|
|
448
|
+
// Normalize to lowercase so we can compare mixed-case keywords safely.
|
|
449
|
+
const value = this.getLowerValue(lexeme);
|
|
450
|
+
if (!value) {
|
|
451
|
+
return false;
|
|
452
|
+
}
|
|
453
|
+
return value === "where" || value === "from" || value === "returning" || value === "when";
|
|
454
|
+
}
|
|
455
|
+
static mergeUnique(target, source) {
|
|
456
|
+
if (!source || source.length === 0) {
|
|
457
|
+
return;
|
|
458
|
+
}
|
|
459
|
+
for (const comment of source) {
|
|
460
|
+
if (!target.includes(comment)) {
|
|
461
|
+
target.push(comment);
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
static addUniquePositionedComments(component, position, comments) {
|
|
466
|
+
if (!component || !comments || comments.length === 0) {
|
|
467
|
+
return;
|
|
468
|
+
}
|
|
469
|
+
const existing = component.getPositionedComments(position);
|
|
470
|
+
const newOnes = comments.filter(comment => !existing.includes(comment));
|
|
471
|
+
if (newOnes.length > 0) {
|
|
472
|
+
component.addPositionedComments(position, newOnes);
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
static getLowerValue(lexeme) {
|
|
476
|
+
if (!lexeme) {
|
|
477
|
+
return null;
|
|
478
|
+
}
|
|
479
|
+
return typeof lexeme.value === "string" ? lexeme.value.toLowerCase() : null;
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
exports.MergeQueryParser = MergeQueryParser;
|
|
483
|
+
//# sourceMappingURL=MergeQueryParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MergeQueryParser.js","sourceRoot":"","sources":["../../../src/parsers/MergeQueryParser.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,30 +5,73 @@ exports.ReturningClauseParser = void 0;
|
|
|
5
5
|
const Lexeme_1 = require("../models/Lexeme");
|
|
6
6
|
const ValueComponent_1 = require("../models/ValueComponent");
|
|
7
7
|
const Clause_1 = require("../models/Clause");
|
|
8
|
+
const LexemeCommentUtils_1 = require("./utils/LexemeCommentUtils");
|
|
8
9
|
class ReturningClauseParser {
|
|
9
10
|
/**
|
|
10
11
|
* Parse RETURNING clause from lexemes, starting at the given index.
|
|
11
12
|
* Returns a ReturningClause instance and the new index after parsing.
|
|
12
13
|
*/
|
|
13
14
|
static parseFromLexeme(lexemes, index) {
|
|
14
|
-
var _a, _b, _c;
|
|
15
|
+
var _a, _b, _c, _d, _e, _f;
|
|
15
16
|
let idx = index;
|
|
16
17
|
if (((_a = lexemes[idx]) === null || _a === void 0 ? void 0 : _a.value) !== "returning") {
|
|
17
18
|
throw new Error(`Syntax error at position ${idx}: Expected 'RETURNING' but found '${(_b = lexemes[idx]) === null || _b === void 0 ? void 0 : _b.value}'.`);
|
|
18
19
|
}
|
|
20
|
+
const returningLexeme = lexemes[idx];
|
|
21
|
+
const returningComments = (0, LexemeCommentUtils_1.extractLexemeComments)(returningLexeme);
|
|
19
22
|
idx++;
|
|
20
23
|
const columns = [];
|
|
21
|
-
|
|
22
|
-
|
|
24
|
+
// Track inline comments that should precede the next returning column.
|
|
25
|
+
let pendingBeforeForNext = [...returningComments.after];
|
|
26
|
+
while (idx < lexemes.length) {
|
|
27
|
+
const lexeme = lexemes[idx];
|
|
28
|
+
let column = null;
|
|
29
|
+
if (lexeme.type & Lexeme_1.TokenType.Identifier) {
|
|
30
|
+
column = new ValueComponent_1.IdentifierString(lexeme.value);
|
|
31
|
+
}
|
|
32
|
+
else if (lexeme.value === "*") {
|
|
33
|
+
column = new ValueComponent_1.IdentifierString("*");
|
|
34
|
+
}
|
|
35
|
+
if (!column) {
|
|
36
|
+
break;
|
|
37
|
+
}
|
|
38
|
+
const columnComments = (0, LexemeCommentUtils_1.extractLexemeComments)(lexeme);
|
|
39
|
+
const beforeComments = [];
|
|
40
|
+
if (pendingBeforeForNext.length > 0) {
|
|
41
|
+
beforeComments.push(...pendingBeforeForNext);
|
|
42
|
+
}
|
|
43
|
+
if (columnComments.before.length > 0) {
|
|
44
|
+
beforeComments.push(...columnComments.before);
|
|
45
|
+
}
|
|
46
|
+
if (beforeComments.length > 0) {
|
|
47
|
+
column.addPositionedComments("before", beforeComments);
|
|
48
|
+
}
|
|
49
|
+
if (columnComments.after.length > 0) {
|
|
50
|
+
column.addPositionedComments("after", columnComments.after);
|
|
51
|
+
}
|
|
52
|
+
columns.push(column);
|
|
53
|
+
pendingBeforeForNext = [];
|
|
23
54
|
idx++;
|
|
24
55
|
if (((_c = lexemes[idx]) === null || _c === void 0 ? void 0 : _c.type) === Lexeme_1.TokenType.Comma) {
|
|
56
|
+
const commaComments = (0, LexemeCommentUtils_1.extractLexemeComments)(lexemes[idx]);
|
|
57
|
+
pendingBeforeForNext = [...commaComments.after];
|
|
25
58
|
idx++;
|
|
59
|
+
continue;
|
|
26
60
|
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
61
|
+
break;
|
|
62
|
+
}
|
|
63
|
+
if (pendingBeforeForNext.length > 0 && columns.length > 0) {
|
|
64
|
+
columns[columns.length - 1].addPositionedComments("after", pendingBeforeForNext);
|
|
65
|
+
}
|
|
66
|
+
if (columns.length === 0) {
|
|
67
|
+
const position = (_f = (_e = (_d = lexemes[idx]) === null || _d === void 0 ? void 0 : _d.position) === null || _e === void 0 ? void 0 : _e.startPosition) !== null && _f !== void 0 ? _f : idx;
|
|
68
|
+
throw new Error(`[ReturningClauseParser] Expected a column or '*' after RETURNING at position ${position}.`);
|
|
69
|
+
}
|
|
70
|
+
const clause = new Clause_1.ReturningClause(columns);
|
|
71
|
+
if (returningComments.before.length > 0) {
|
|
72
|
+
clause.addPositionedComments("before", returningComments.before);
|
|
30
73
|
}
|
|
31
|
-
return { value:
|
|
74
|
+
return { value: clause, newIndex: idx };
|
|
32
75
|
}
|
|
33
76
|
}
|
|
34
77
|
exports.ReturningClauseParser = ReturningClauseParser;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReturningClauseParser.js","sourceRoot":"","sources":["../../../src/parsers/ReturningClauseParser.ts"],"names":[],"mappings":";;;AAAA,uFAAuF;AACvF,6CAAqD;AACrD,6DAA4D;AAC5D,6CAAmD;
|
|
1
|
+
{"version":3,"file":"ReturningClauseParser.js","sourceRoot":"","sources":["../../../src/parsers/ReturningClauseParser.ts"],"names":[],"mappings":"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"}
|
|
@@ -228,14 +228,14 @@ class SelectItemParser {
|
|
|
228
228
|
selectItem.value.positionedComments = null;
|
|
229
229
|
}
|
|
230
230
|
// Also clear positioned comments from nested IdentifierString (in QualifiedName)
|
|
231
|
-
if (selectItem.value
|
|
231
|
+
if (selectItem.value instanceof ValueComponent_1.ColumnReference) {
|
|
232
232
|
const columnRef = selectItem.value;
|
|
233
233
|
if (columnRef.qualifiedName && columnRef.qualifiedName.name) {
|
|
234
234
|
columnRef.qualifiedName.name.positionedComments = null;
|
|
235
235
|
}
|
|
236
236
|
}
|
|
237
237
|
// Clear positioned comments from BinaryExpression children only to avoid duplication
|
|
238
|
-
if (selectItem.value
|
|
238
|
+
if (selectItem.value instanceof ValueComponent_1.BinaryExpression) {
|
|
239
239
|
this.clearPositionedCommentsRecursively(selectItem.value);
|
|
240
240
|
}
|
|
241
241
|
}
|