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,344 @@
|
|
|
1
|
+
import { SqlTokenizer } from './SqlTokenizer';
|
|
2
|
+
import { SelectQueryParser } from './SelectQueryParser';
|
|
3
|
+
import { InsertQueryParser } from './InsertQueryParser';
|
|
4
|
+
import { UpdateQueryParser } from './UpdateQueryParser';
|
|
5
|
+
import { DeleteQueryParser } from './DeleteQueryParser';
|
|
6
|
+
import { CreateTableParser } from './CreateTableParser';
|
|
7
|
+
import { MergeQueryParser } from './MergeQueryParser';
|
|
8
|
+
import { WithClauseParser } from './WithClauseParser';
|
|
9
|
+
import { DropTableParser } from './DropTableParser';
|
|
10
|
+
import { DropIndexParser } from './DropIndexParser';
|
|
11
|
+
import { CreateIndexParser } from './CreateIndexParser';
|
|
12
|
+
import { AlterTableParser } from './AlterTableParser';
|
|
13
|
+
import { DropConstraintParser } from './DropConstraintParser';
|
|
14
|
+
/**
|
|
15
|
+
* Canonical entry point for SQL parsing.
|
|
16
|
+
* Delegates to dedicated parsers for SELECT, INSERT, UPDATE, and DELETE statements, and is designed to embrace additional statement types next.
|
|
17
|
+
*/
|
|
18
|
+
export class SqlParser {
|
|
19
|
+
static parse(sql, options = {}) {
|
|
20
|
+
var _a, _b;
|
|
21
|
+
const skipEmpty = (_a = options.skipEmptyStatements) !== null && _a !== void 0 ? _a : true;
|
|
22
|
+
const mode = (_b = options.mode) !== null && _b !== void 0 ? _b : 'single';
|
|
23
|
+
const tokenizer = new SqlTokenizer(sql);
|
|
24
|
+
// Acquire the first meaningful statement so future dispatching can inspect its leading keyword.
|
|
25
|
+
const first = this.consumeNextStatement(tokenizer, 0, skipEmpty);
|
|
26
|
+
if (!first) {
|
|
27
|
+
throw new Error('[SqlParser] No SQL statements found in input.');
|
|
28
|
+
}
|
|
29
|
+
const parsed = this.dispatchParse(first.segment, 1);
|
|
30
|
+
if (mode === 'single') {
|
|
31
|
+
// Ensure callers opting into single-statement mode are protected against trailing statements.
|
|
32
|
+
const remainder = this.consumeNextStatement(tokenizer, first.nextCursor, skipEmpty);
|
|
33
|
+
if (remainder) {
|
|
34
|
+
throw new Error('[SqlParser] Unexpected additional statement detected at index 2. Use parseMany or set mode to "multiple" to allow multiple statements.');
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return parsed;
|
|
38
|
+
}
|
|
39
|
+
static parseMany(sql, options = {}) {
|
|
40
|
+
var _a;
|
|
41
|
+
const skipEmpty = (_a = options.skipEmptyStatements) !== null && _a !== void 0 ? _a : true;
|
|
42
|
+
const tokenizer = new SqlTokenizer(sql);
|
|
43
|
+
const statements = [];
|
|
44
|
+
let cursor = 0;
|
|
45
|
+
let carry = null;
|
|
46
|
+
let index = 0;
|
|
47
|
+
while (true) {
|
|
48
|
+
// Collect the next logical statement segment, carrying forward detached comments when necessary.
|
|
49
|
+
const segment = tokenizer.readNextStatement(cursor, carry);
|
|
50
|
+
carry = null;
|
|
51
|
+
if (!segment) {
|
|
52
|
+
break;
|
|
53
|
+
}
|
|
54
|
+
cursor = segment.nextPosition;
|
|
55
|
+
if (segment.lexemes.length === 0) {
|
|
56
|
+
// Preserve dangling comments so they can attach to the next real statement.
|
|
57
|
+
if (segment.leadingComments && segment.leadingComments.length > 0) {
|
|
58
|
+
carry = segment.leadingComments;
|
|
59
|
+
}
|
|
60
|
+
if (skipEmpty || segment.rawText.trim().length === 0) {
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
index++;
|
|
65
|
+
statements.push(this.dispatchParse(segment, index));
|
|
66
|
+
}
|
|
67
|
+
return statements;
|
|
68
|
+
}
|
|
69
|
+
static dispatchParse(segment, statementIndex) {
|
|
70
|
+
if (segment.lexemes.length === 0) {
|
|
71
|
+
throw new Error(`[SqlParser] Statement ${statementIndex} does not contain any tokens.`);
|
|
72
|
+
}
|
|
73
|
+
const firstToken = segment.lexemes[0].value.toLowerCase();
|
|
74
|
+
if (firstToken === 'with') {
|
|
75
|
+
const commandAfterWith = this.getCommandAfterWith(segment.lexemes);
|
|
76
|
+
if (commandAfterWith === 'insert into') {
|
|
77
|
+
return this.parseInsertStatement(segment, statementIndex);
|
|
78
|
+
}
|
|
79
|
+
if (commandAfterWith === 'update') {
|
|
80
|
+
return this.parseUpdateStatement(segment, statementIndex);
|
|
81
|
+
}
|
|
82
|
+
if (commandAfterWith === 'delete from') {
|
|
83
|
+
return this.parseDeleteStatement(segment, statementIndex);
|
|
84
|
+
}
|
|
85
|
+
if (commandAfterWith === 'merge into') {
|
|
86
|
+
return this.parseMergeStatement(segment, statementIndex);
|
|
87
|
+
}
|
|
88
|
+
return this.parseSelectStatement(segment, statementIndex);
|
|
89
|
+
}
|
|
90
|
+
if (firstToken === 'select' || firstToken === 'values') {
|
|
91
|
+
return this.parseSelectStatement(segment, statementIndex);
|
|
92
|
+
}
|
|
93
|
+
if (firstToken === 'insert into') {
|
|
94
|
+
return this.parseInsertStatement(segment, statementIndex);
|
|
95
|
+
}
|
|
96
|
+
if (firstToken === 'update') {
|
|
97
|
+
return this.parseUpdateStatement(segment, statementIndex);
|
|
98
|
+
}
|
|
99
|
+
if (firstToken === 'delete from') {
|
|
100
|
+
return this.parseDeleteStatement(segment, statementIndex);
|
|
101
|
+
}
|
|
102
|
+
if (firstToken === 'create table' || firstToken === 'create temporary table') {
|
|
103
|
+
return this.parseCreateTableStatement(segment, statementIndex);
|
|
104
|
+
}
|
|
105
|
+
if (firstToken === 'merge into') {
|
|
106
|
+
return this.parseMergeStatement(segment, statementIndex);
|
|
107
|
+
}
|
|
108
|
+
if (firstToken === 'create index' || firstToken === 'create unique index') {
|
|
109
|
+
return this.parseCreateIndexStatement(segment, statementIndex);
|
|
110
|
+
}
|
|
111
|
+
if (firstToken === 'drop table') {
|
|
112
|
+
return this.parseDropTableStatement(segment, statementIndex);
|
|
113
|
+
}
|
|
114
|
+
if (firstToken === 'drop index') {
|
|
115
|
+
return this.parseDropIndexStatement(segment, statementIndex);
|
|
116
|
+
}
|
|
117
|
+
if (firstToken === 'alter table') {
|
|
118
|
+
return this.parseAlterTableStatement(segment, statementIndex);
|
|
119
|
+
}
|
|
120
|
+
if (firstToken === 'drop constraint') {
|
|
121
|
+
return this.parseDropConstraintStatement(segment, statementIndex);
|
|
122
|
+
}
|
|
123
|
+
throw new Error(`[SqlParser] Statement ${statementIndex} starts with unsupported token "${segment.lexemes[0].value}". Support for additional statement types will be introduced soon.`);
|
|
124
|
+
}
|
|
125
|
+
static parseSelectStatement(segment, statementIndex) {
|
|
126
|
+
var _a, _b;
|
|
127
|
+
try {
|
|
128
|
+
const result = SelectQueryParser.parseFromLexeme(segment.lexemes, 0);
|
|
129
|
+
if (result.newIndex < segment.lexemes.length) {
|
|
130
|
+
const unexpected = segment.lexemes[result.newIndex];
|
|
131
|
+
const position = (_b = (_a = unexpected.position) === null || _a === void 0 ? void 0 : _a.startPosition) !== null && _b !== void 0 ? _b : segment.statementStart;
|
|
132
|
+
throw new Error(`[SqlParser] Unexpected token "${unexpected.value}" in statement ${statementIndex} at character ${position}.`);
|
|
133
|
+
}
|
|
134
|
+
return result.value;
|
|
135
|
+
}
|
|
136
|
+
catch (error) {
|
|
137
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
138
|
+
throw new Error(`[SqlParser] Failed to parse SELECT statement ${statementIndex}: ${message}`);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
static parseInsertStatement(segment, statementIndex) {
|
|
142
|
+
var _a, _b;
|
|
143
|
+
try {
|
|
144
|
+
const result = InsertQueryParser.parseFromLexeme(segment.lexemes, 0);
|
|
145
|
+
if (result.newIndex < segment.lexemes.length) {
|
|
146
|
+
const unexpected = segment.lexemes[result.newIndex];
|
|
147
|
+
const position = (_b = (_a = unexpected.position) === null || _a === void 0 ? void 0 : _a.startPosition) !== null && _b !== void 0 ? _b : segment.statementStart;
|
|
148
|
+
throw new Error(`[SqlParser] Unexpected token "${unexpected.value}" in statement ${statementIndex} at character ${position}.`);
|
|
149
|
+
}
|
|
150
|
+
return result.value;
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
154
|
+
throw new Error(`[SqlParser] Failed to parse INSERT statement ${statementIndex}: ${message}`);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
static parseUpdateStatement(segment, statementIndex) {
|
|
158
|
+
var _a, _b;
|
|
159
|
+
try {
|
|
160
|
+
const result = UpdateQueryParser.parseFromLexeme(segment.lexemes, 0);
|
|
161
|
+
if (result.newIndex < segment.lexemes.length) {
|
|
162
|
+
const unexpected = segment.lexemes[result.newIndex];
|
|
163
|
+
const position = (_b = (_a = unexpected.position) === null || _a === void 0 ? void 0 : _a.startPosition) !== null && _b !== void 0 ? _b : segment.statementStart;
|
|
164
|
+
throw new Error(`[SqlParser] Unexpected token "${unexpected.value}" in statement ${statementIndex} at character ${position}.`);
|
|
165
|
+
}
|
|
166
|
+
return result.value;
|
|
167
|
+
}
|
|
168
|
+
catch (error) {
|
|
169
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
170
|
+
throw new Error(`[SqlParser] Failed to parse UPDATE statement ${statementIndex}: ${message}`);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
static parseDeleteStatement(segment, statementIndex) {
|
|
174
|
+
var _a, _b;
|
|
175
|
+
try {
|
|
176
|
+
const result = DeleteQueryParser.parseFromLexeme(segment.lexemes, 0);
|
|
177
|
+
// Guard against trailing tokens that would indicate multiple statements in DELETE parsing.
|
|
178
|
+
if (result.newIndex < segment.lexemes.length) {
|
|
179
|
+
const unexpected = segment.lexemes[result.newIndex];
|
|
180
|
+
const position = (_b = (_a = unexpected.position) === null || _a === void 0 ? void 0 : _a.startPosition) !== null && _b !== void 0 ? _b : segment.statementStart;
|
|
181
|
+
throw new Error(`[SqlParser] Unexpected token "${unexpected.value}" in statement ${statementIndex} at character ${position}.`);
|
|
182
|
+
}
|
|
183
|
+
return result.value;
|
|
184
|
+
}
|
|
185
|
+
catch (error) {
|
|
186
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
187
|
+
throw new Error(`[SqlParser] Failed to parse DELETE statement ${statementIndex}: ${message}`);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
static parseCreateTableStatement(segment, statementIndex) {
|
|
191
|
+
var _a, _b;
|
|
192
|
+
try {
|
|
193
|
+
const result = CreateTableParser.parseFromLexeme(segment.lexemes, 0);
|
|
194
|
+
if (result.newIndex < segment.lexemes.length) {
|
|
195
|
+
const unexpected = segment.lexemes[result.newIndex];
|
|
196
|
+
const position = (_b = (_a = unexpected.position) === null || _a === void 0 ? void 0 : _a.startPosition) !== null && _b !== void 0 ? _b : segment.statementStart;
|
|
197
|
+
throw new Error(`[SqlParser] Unexpected token "${unexpected.value}" in statement ${statementIndex} at character ${position}.`);
|
|
198
|
+
}
|
|
199
|
+
return result.value;
|
|
200
|
+
}
|
|
201
|
+
catch (error) {
|
|
202
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
203
|
+
throw new Error(`[SqlParser] Failed to parse CREATE TABLE statement ${statementIndex}: ${message}`);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
static parseDropTableStatement(segment, statementIndex) {
|
|
207
|
+
var _a, _b;
|
|
208
|
+
try {
|
|
209
|
+
const result = DropTableParser.parseFromLexeme(segment.lexemes, 0);
|
|
210
|
+
if (result.newIndex < segment.lexemes.length) {
|
|
211
|
+
const unexpected = segment.lexemes[result.newIndex];
|
|
212
|
+
const position = (_b = (_a = unexpected.position) === null || _a === void 0 ? void 0 : _a.startPosition) !== null && _b !== void 0 ? _b : segment.statementStart;
|
|
213
|
+
throw new Error(`[SqlParser] Unexpected token "${unexpected.value}" in statement ${statementIndex} at character ${position}.`);
|
|
214
|
+
}
|
|
215
|
+
return result.value;
|
|
216
|
+
}
|
|
217
|
+
catch (error) {
|
|
218
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
219
|
+
throw new Error(`[SqlParser] Failed to parse DROP TABLE statement ${statementIndex}: ${message}`);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
static parseDropIndexStatement(segment, statementIndex) {
|
|
223
|
+
var _a, _b;
|
|
224
|
+
try {
|
|
225
|
+
const result = DropIndexParser.parseFromLexeme(segment.lexemes, 0);
|
|
226
|
+
if (result.newIndex < segment.lexemes.length) {
|
|
227
|
+
const unexpected = segment.lexemes[result.newIndex];
|
|
228
|
+
const position = (_b = (_a = unexpected.position) === null || _a === void 0 ? void 0 : _a.startPosition) !== null && _b !== void 0 ? _b : segment.statementStart;
|
|
229
|
+
throw new Error(`[SqlParser] Unexpected token "${unexpected.value}" in statement ${statementIndex} at character ${position}.`);
|
|
230
|
+
}
|
|
231
|
+
return result.value;
|
|
232
|
+
}
|
|
233
|
+
catch (error) {
|
|
234
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
235
|
+
throw new Error(`[SqlParser] Failed to parse DROP INDEX statement ${statementIndex}: ${message}`);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
static parseCreateIndexStatement(segment, statementIndex) {
|
|
239
|
+
var _a, _b;
|
|
240
|
+
try {
|
|
241
|
+
const result = CreateIndexParser.parseFromLexeme(segment.lexemes, 0);
|
|
242
|
+
if (result.newIndex < segment.lexemes.length) {
|
|
243
|
+
const unexpected = segment.lexemes[result.newIndex];
|
|
244
|
+
const position = (_b = (_a = unexpected.position) === null || _a === void 0 ? void 0 : _a.startPosition) !== null && _b !== void 0 ? _b : segment.statementStart;
|
|
245
|
+
throw new Error(`[SqlParser] Unexpected token "${unexpected.value}" in statement ${statementIndex} at character ${position}.`);
|
|
246
|
+
}
|
|
247
|
+
return result.value;
|
|
248
|
+
}
|
|
249
|
+
catch (error) {
|
|
250
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
251
|
+
throw new Error(`[SqlParser] Failed to parse CREATE INDEX statement ${statementIndex}: ${message}`);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
static parseAlterTableStatement(segment, statementIndex) {
|
|
255
|
+
var _a, _b;
|
|
256
|
+
try {
|
|
257
|
+
const result = AlterTableParser.parseFromLexeme(segment.lexemes, 0);
|
|
258
|
+
if (result.newIndex < segment.lexemes.length) {
|
|
259
|
+
const unexpected = segment.lexemes[result.newIndex];
|
|
260
|
+
const position = (_b = (_a = unexpected.position) === null || _a === void 0 ? void 0 : _a.startPosition) !== null && _b !== void 0 ? _b : segment.statementStart;
|
|
261
|
+
throw new Error(`[SqlParser] Unexpected token "${unexpected.value}" in statement ${statementIndex} at character ${position}.`);
|
|
262
|
+
}
|
|
263
|
+
return result.value;
|
|
264
|
+
}
|
|
265
|
+
catch (error) {
|
|
266
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
267
|
+
throw new Error(`[SqlParser] Failed to parse ALTER TABLE statement ${statementIndex}: ${message}`);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
static parseDropConstraintStatement(segment, statementIndex) {
|
|
271
|
+
var _a, _b;
|
|
272
|
+
try {
|
|
273
|
+
const result = DropConstraintParser.parseFromLexeme(segment.lexemes, 0);
|
|
274
|
+
if (result.newIndex < segment.lexemes.length) {
|
|
275
|
+
const unexpected = segment.lexemes[result.newIndex];
|
|
276
|
+
const position = (_b = (_a = unexpected.position) === null || _a === void 0 ? void 0 : _a.startPosition) !== null && _b !== void 0 ? _b : segment.statementStart;
|
|
277
|
+
throw new Error(`[SqlParser] Unexpected token "${unexpected.value}" in statement ${statementIndex} at character ${position}.`);
|
|
278
|
+
}
|
|
279
|
+
return result.value;
|
|
280
|
+
}
|
|
281
|
+
catch (error) {
|
|
282
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
283
|
+
throw new Error(`[SqlParser] Failed to parse DROP CONSTRAINT statement ${statementIndex}: ${message}`);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
static parseMergeStatement(segment, statementIndex) {
|
|
287
|
+
var _a, _b;
|
|
288
|
+
try {
|
|
289
|
+
const result = MergeQueryParser.parseFromLexeme(segment.lexemes, 0);
|
|
290
|
+
if (result.newIndex < segment.lexemes.length) {
|
|
291
|
+
// Guard against trailing tokens that would indicate parsing stopped prematurely.
|
|
292
|
+
const unexpected = segment.lexemes[result.newIndex];
|
|
293
|
+
const position = (_b = (_a = unexpected.position) === null || _a === void 0 ? void 0 : _a.startPosition) !== null && _b !== void 0 ? _b : segment.statementStart;
|
|
294
|
+
throw new Error(`[SqlParser] Unexpected token "${unexpected.value}" in statement ${statementIndex} at character ${position}.`);
|
|
295
|
+
}
|
|
296
|
+
return result.value;
|
|
297
|
+
}
|
|
298
|
+
catch (error) {
|
|
299
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
300
|
+
throw new Error(`[SqlParser] Failed to parse MERGE statement ${statementIndex}: ${message}`);
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
static getCommandAfterWith(lexemes) {
|
|
304
|
+
var _a;
|
|
305
|
+
try {
|
|
306
|
+
const clone = this.cloneLexemeArray(lexemes);
|
|
307
|
+
const withResult = WithClauseParser.parseFromLexeme(clone, 0);
|
|
308
|
+
const next = lexemes[withResult.newIndex];
|
|
309
|
+
return (_a = next === null || next === void 0 ? void 0 : next.value.toLowerCase()) !== null && _a !== void 0 ? _a : null;
|
|
310
|
+
}
|
|
311
|
+
catch (_b) {
|
|
312
|
+
return null;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
static cloneLexemeArray(lexemes) {
|
|
316
|
+
return lexemes.map((lexeme) => (Object.assign(Object.assign({}, lexeme), { comments: lexeme.comments ? [...lexeme.comments] : null, positionedComments: lexeme.positionedComments
|
|
317
|
+
? lexeme.positionedComments.map(pc => ({ position: pc.position, comments: [...pc.comments] }))
|
|
318
|
+
: undefined, position: lexeme.position ? Object.assign({}, lexeme.position) : undefined })));
|
|
319
|
+
}
|
|
320
|
+
static consumeNextStatement(tokenizer, cursor, skipEmpty) {
|
|
321
|
+
let localCursor = cursor;
|
|
322
|
+
let carry = null;
|
|
323
|
+
// Advance until a statement with tokens is found or the input ends.
|
|
324
|
+
while (true) {
|
|
325
|
+
const segment = tokenizer.readNextStatement(localCursor, carry);
|
|
326
|
+
carry = null;
|
|
327
|
+
if (!segment) {
|
|
328
|
+
return null;
|
|
329
|
+
}
|
|
330
|
+
localCursor = segment.nextPosition;
|
|
331
|
+
if (segment.lexemes.length === 0) {
|
|
332
|
+
// Retain comments so the next statement can inherit them when appropriate.
|
|
333
|
+
if (segment.leadingComments && segment.leadingComments.length > 0) {
|
|
334
|
+
carry = segment.leadingComments;
|
|
335
|
+
}
|
|
336
|
+
if (skipEmpty || segment.rawText.trim().length === 0) {
|
|
337
|
+
continue;
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
return { segment, nextCursor: localCursor };
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
//# sourceMappingURL=SqlParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SqlParser.js","sourceRoot":"","sources":["../../../../src/parsers/SqlParser.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { FromClause, JoinClause, JoinOnClause, JoinUsingClause, FunctionSource, SourceAliasExpression, WhereClause, GroupByClause, HavingClause, SubQuerySource, WindowFrameClause, LimitClause, ForClause, OffsetClause, WindowsClause as WindowClause, CommonTable, WithClause, FetchClause, FetchExpression, UpdateClause, SetClause, ReturningClause, SetClauseItem } from "../models/Clause";
|
|
1
|
+
import { FromClause, JoinClause, JoinOnClause, JoinUsingClause, FunctionSource, SourceAliasExpression, WhereClause, GroupByClause, HavingClause, SubQuerySource, WindowFrameClause, LimitClause, ForClause, OffsetClause, WindowsClause as WindowClause, CommonTable, WithClause, FetchClause, FetchExpression, UpdateClause, DeleteClause, UsingClause, SetClause, ReturningClause, SetClauseItem } from "../models/Clause";
|
|
2
2
|
import { SimpleSelectQuery, ValuesQuery } from "../models/SelectQuery";
|
|
3
3
|
import { SqlComponent, SqlComponentVisitor } from "../models/SqlComponent";
|
|
4
4
|
import { SqlPrintToken } from "../models/SqlPrintToken";
|
|
@@ -11,6 +11,8 @@ export declare enum ParameterStyle {
|
|
|
11
11
|
Indexed = "indexed",
|
|
12
12
|
Named = "named"
|
|
13
13
|
}
|
|
14
|
+
export type CastStyle = 'postgres' | 'standard';
|
|
15
|
+
export type ConstraintStyle = 'postgres' | 'mysql';
|
|
14
16
|
export interface FormatterConfig {
|
|
15
17
|
identifierEscape?: {
|
|
16
18
|
start: string;
|
|
@@ -24,6 +26,10 @@ export interface FormatterConfig {
|
|
|
24
26
|
* Parameter style: anonymous (?), indexed ($1), or named (:name)
|
|
25
27
|
*/
|
|
26
28
|
parameterStyle?: ParameterStyle;
|
|
29
|
+
/** Controls how CAST expressions are rendered */
|
|
30
|
+
castStyle?: CastStyle;
|
|
31
|
+
/** Controls how table/column constraints are rendered */
|
|
32
|
+
constraintStyle?: ConstraintStyle;
|
|
27
33
|
}
|
|
28
34
|
export declare const PRESETS: Record<string, FormatterConfig>;
|
|
29
35
|
export declare class SqlPrintTokenParser implements SqlComponentVisitor<SqlPrintToken> {
|
|
@@ -39,7 +45,10 @@ export declare class SqlPrintTokenParser implements SqlComponentVisitor<SqlPrint
|
|
|
39
45
|
parameterDecorator: ParameterDecorator;
|
|
40
46
|
identifierDecorator: IdentifierDecorator;
|
|
41
47
|
index: number;
|
|
42
|
-
private
|
|
48
|
+
private castStyle;
|
|
49
|
+
private constraintStyle;
|
|
50
|
+
private readonly normalizeJoinConditionOrder;
|
|
51
|
+
private joinConditionContexts;
|
|
43
52
|
constructor(options?: {
|
|
44
53
|
preset?: FormatterConfig;
|
|
45
54
|
identifierEscape?: {
|
|
@@ -51,7 +60,9 @@ export declare class SqlPrintTokenParser implements SqlComponentVisitor<SqlPrint
|
|
|
51
60
|
end: string;
|
|
52
61
|
};
|
|
53
62
|
parameterStyle?: 'anonymous' | 'indexed' | 'named';
|
|
54
|
-
|
|
63
|
+
castStyle?: CastStyle;
|
|
64
|
+
constraintStyle?: ConstraintStyle;
|
|
65
|
+
joinConditionOrderByDeclaration?: boolean;
|
|
55
66
|
});
|
|
56
67
|
/**
|
|
57
68
|
* Pretty-prints a BinarySelectQuery (e.g., UNION, INTERSECT, EXCEPT).
|
|
@@ -107,14 +118,11 @@ export declare class SqlPrintTokenParser implements SqlComponentVisitor<SqlPrint
|
|
|
107
118
|
private createInlineCommentSequence;
|
|
108
119
|
/**
|
|
109
120
|
* Creates CommentBlock containers for the given comments.
|
|
110
|
-
* Each CommentBlock contains: Comment -> CommentNewline -> Space
|
|
111
|
-
*
|
|
121
|
+
* Each CommentBlock contains: Comment -> CommentNewline -> Space.
|
|
122
|
+
* @param comments Raw comment strings to convert into CommentBlock tokens.
|
|
123
|
+
* @param isHeaderComment Marks the generated blocks as originating from header comments when true.
|
|
112
124
|
*/
|
|
113
125
|
private createCommentBlocks;
|
|
114
|
-
/**
|
|
115
|
-
* Creates smart comment blocks by merging consecutive block comments into multi-line format
|
|
116
|
-
*/
|
|
117
|
-
private createSmartCommentBlocks;
|
|
118
126
|
/**
|
|
119
127
|
* Determines if a comment should be merged with consecutive comments
|
|
120
128
|
*/
|
|
@@ -123,12 +131,6 @@ export declare class SqlPrintTokenParser implements SqlComponentVisitor<SqlPrint
|
|
|
123
131
|
* Creates a multi-line block comment structure from consecutive comments
|
|
124
132
|
* Returns a CommentBlock containing multiple comment lines for proper LinePrinter integration
|
|
125
133
|
*/
|
|
126
|
-
private createMultiLineCommentBlock;
|
|
127
|
-
/**
|
|
128
|
-
* Creates a multi-line comment block specifically for headerComments
|
|
129
|
-
* headerComments come as pre-split lines, so we handle them differently
|
|
130
|
-
*/
|
|
131
|
-
private createHeaderMultiLineCommentBlock;
|
|
132
134
|
/**
|
|
133
135
|
* Creates a single CommentBlock with the standard structure:
|
|
134
136
|
* Comment -> CommentNewline -> Space
|
|
@@ -143,12 +145,6 @@ export declare class SqlPrintTokenParser implements SqlComponentVisitor<SqlPrint
|
|
|
143
145
|
* and converting others to block format for safety
|
|
144
146
|
*/
|
|
145
147
|
private formatComment;
|
|
146
|
-
/**
|
|
147
|
-
* Formats comments using smart style rules:
|
|
148
|
-
* - Only multi-line block comment merging is supported
|
|
149
|
-
* - Single-line comments remain as block comments (no dash conversion)
|
|
150
|
-
*/
|
|
151
|
-
private formatCommentSmart;
|
|
152
148
|
/**
|
|
153
149
|
* Inserts comment blocks into a token and handles spacing logic.
|
|
154
150
|
* Adds separator spaces for clause-level containers and manages duplicate space removal.
|
|
@@ -180,6 +176,17 @@ export declare class SqlPrintTokenParser implements SqlComponentVisitor<SqlPrint
|
|
|
180
176
|
* Prevents SQL injection by removing dangerous comment sequences.
|
|
181
177
|
*/
|
|
182
178
|
private formatBlockComment;
|
|
179
|
+
private shouldMergeHeaderComments;
|
|
180
|
+
private createHeaderMultiLineCommentBlock;
|
|
181
|
+
/**
|
|
182
|
+
* Formats text as a single-line comment while sanitizing unsafe sequences.
|
|
183
|
+
*/
|
|
184
|
+
private formatLineComment;
|
|
185
|
+
/**
|
|
186
|
+
* Sanitizes content intended for a single-line comment.
|
|
187
|
+
*/
|
|
188
|
+
private sanitizeLineCommentContent;
|
|
189
|
+
private escapeCommentDelimiters;
|
|
183
190
|
private visitValueList;
|
|
184
191
|
private visitColumnReference;
|
|
185
192
|
private visitFunctionCall;
|
|
@@ -195,6 +202,13 @@ export declare class SqlPrintTokenParser implements SqlComponentVisitor<SqlPrint
|
|
|
195
202
|
private visitParenExpression;
|
|
196
203
|
private visitCastExpression;
|
|
197
204
|
private visitCaseExpression;
|
|
205
|
+
private extractSwitchAfterComments;
|
|
206
|
+
private collectCaseLeadingCommentsFromSwitch;
|
|
207
|
+
private findCaseKeyToken;
|
|
208
|
+
private collectCaseLeadingCommentBlocks;
|
|
209
|
+
private collectCaseLeadingCommentBlocksRecursive;
|
|
210
|
+
private isTransparentCaseWrapper;
|
|
211
|
+
private commentBlockSignature;
|
|
198
212
|
private visitArrayExpression;
|
|
199
213
|
private visitArrayQueryExpression;
|
|
200
214
|
private visitArraySliceExpression;
|
|
@@ -203,6 +217,9 @@ export declare class SqlPrintTokenParser implements SqlComponentVisitor<SqlPrint
|
|
|
203
217
|
private visitStringSpecifierExpression;
|
|
204
218
|
private visitTypeValue;
|
|
205
219
|
private visitTupleExpression;
|
|
220
|
+
private tupleRequiresMultiline;
|
|
221
|
+
private hasInlineComments;
|
|
222
|
+
private hasLeadingComments;
|
|
206
223
|
private visitWindowFrameExpression;
|
|
207
224
|
private visitWindowFrameSpec;
|
|
208
225
|
/**
|
|
@@ -226,6 +243,12 @@ export declare class SqlPrintTokenParser implements SqlComponentVisitor<SqlPrint
|
|
|
226
243
|
visitFromClause(arg: FromClause): SqlPrintToken;
|
|
227
244
|
visitJoinClause(arg: JoinClause): SqlPrintToken;
|
|
228
245
|
visitJoinOnClause(arg: JoinOnClause): SqlPrintToken;
|
|
246
|
+
private getCurrentJoinAliasOrder;
|
|
247
|
+
private buildJoinAliasOrder;
|
|
248
|
+
private collectSourceIdentifiers;
|
|
249
|
+
private normalizeJoinConditionValue;
|
|
250
|
+
private normalizeBinaryEquality;
|
|
251
|
+
private resolveColumnOwner;
|
|
229
252
|
visitJoinUsingClause(arg: JoinUsingClause): SqlPrintToken;
|
|
230
253
|
visitFunctionSource(arg: FunctionSource): SqlPrintToken;
|
|
231
254
|
visitSourceAliasExpression(arg: SourceAliasExpression): SqlPrintToken;
|
|
@@ -247,10 +270,34 @@ export declare class SqlPrintTokenParser implements SqlComponentVisitor<SqlPrint
|
|
|
247
270
|
visitInlineQuery(arg: InlineQuery): SqlPrintToken;
|
|
248
271
|
private visitInsertQuery;
|
|
249
272
|
private visitInsertClause;
|
|
273
|
+
private visitDeleteQuery;
|
|
274
|
+
visitDeleteClause(arg: DeleteClause): SqlPrintToken;
|
|
275
|
+
visitUsingClause(arg: UsingClause): SqlPrintToken;
|
|
276
|
+
private visitMergeQuery;
|
|
277
|
+
private visitMergeWhenClause;
|
|
278
|
+
private visitMergeUpdateAction;
|
|
279
|
+
private visitMergeDeleteAction;
|
|
280
|
+
private visitMergeInsertAction;
|
|
281
|
+
private visitMergeDoNothingAction;
|
|
282
|
+
private mergeMatchTypeToKeyword;
|
|
250
283
|
private visitUpdateQuery;
|
|
251
284
|
visitUpdateClause(arg: UpdateClause): SqlPrintToken;
|
|
252
285
|
visitSetClause(arg: SetClause): SqlPrintToken;
|
|
253
286
|
visitSetClauseItem(arg: SetClauseItem): SqlPrintToken;
|
|
254
287
|
visitReturningClause(arg: ReturningClause): SqlPrintToken;
|
|
255
288
|
visitCreateTableQuery(arg: CreateTableQuery): SqlPrintToken;
|
|
289
|
+
private visitTableColumnDefinition;
|
|
290
|
+
private visitColumnConstraintDefinition;
|
|
291
|
+
private visitTableConstraintDefinition;
|
|
292
|
+
private wrapWithParenExpression;
|
|
293
|
+
private visitReferenceDefinition;
|
|
294
|
+
private visitCreateIndexStatement;
|
|
295
|
+
private visitIndexColumnDefinition;
|
|
296
|
+
private visitDropTableStatement;
|
|
297
|
+
private visitDropIndexStatement;
|
|
298
|
+
private visitAlterTableStatement;
|
|
299
|
+
private visitAlterTableAddConstraint;
|
|
300
|
+
private visitAlterTableDropConstraint;
|
|
301
|
+
private visitAlterTableDropColumn;
|
|
302
|
+
private visitDropConstraintStatement;
|
|
256
303
|
}
|