rawsql-ts 0.16.0 → 0.17.0
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 +161 -875
- package/dist/esm/index.d.ts +7 -0
- package/dist/esm/index.js +7 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index.min.js +22 -20
- package/dist/esm/index.min.js.map +4 -4
- package/dist/esm/models/Clause.d.ts +15 -3
- package/dist/esm/models/Clause.js +2 -1
- package/dist/esm/models/Clause.js.map +1 -1
- package/dist/esm/models/CreateTableQuery.d.ts +3 -0
- package/dist/esm/models/CreateTableQuery.js +5 -4
- package/dist/esm/models/CreateTableQuery.js.map +1 -1
- package/dist/esm/models/DDLStatements.d.ts +71 -0
- package/dist/esm/models/DDLStatements.js +63 -0
- package/dist/esm/models/DDLStatements.js.map +1 -1
- package/dist/esm/models/KeywordTrie.d.ts +2 -3
- package/dist/esm/models/KeywordTrie.js +26 -27
- package/dist/esm/models/KeywordTrie.js.map +1 -1
- package/dist/esm/models/SqlPrintToken.d.ts +1 -0
- package/dist/esm/models/SqlPrintToken.js +1 -0
- package/dist/esm/models/SqlPrintToken.js.map +1 -1
- package/dist/esm/parsers/CheckpointStatementParser.d.ts +8 -0
- package/dist/esm/parsers/CheckpointStatementParser.js +14 -0
- package/dist/esm/parsers/CheckpointStatementParser.js.map +1 -0
- package/dist/esm/parsers/ClusterStatementParser.d.ts +8 -0
- package/dist/esm/parsers/ClusterStatementParser.js +14 -0
- package/dist/esm/parsers/ClusterStatementParser.js.map +1 -0
- package/dist/esm/parsers/CommandExpressionParser.js.map +1 -1
- package/dist/esm/parsers/CommentOnParser.d.ts +23 -0
- package/dist/esm/parsers/CommentOnParser.js +61 -0
- package/dist/esm/parsers/CommentOnParser.js.map +1 -0
- package/dist/esm/parsers/CommonTableParser.d.ts +5 -1
- package/dist/esm/parsers/CommonTableParser.js +94 -16
- package/dist/esm/parsers/CommonTableParser.js.map +1 -1
- package/dist/esm/parsers/CreateIndexParser.js +12 -6
- package/dist/esm/parsers/CreateIndexParser.js.map +1 -1
- package/dist/esm/parsers/CreateTableParser.d.ts +2 -0
- package/dist/esm/parsers/CreateTableParser.js +11 -2
- package/dist/esm/parsers/CreateTableParser.js.map +1 -1
- package/dist/esm/parsers/ExplainStatementParser.js.map +1 -1
- package/dist/esm/parsers/FullNameParser.js +35 -3
- package/dist/esm/parsers/FullNameParser.js.map +1 -1
- package/dist/esm/parsers/OrderByClauseParser.js.map +1 -1
- package/dist/esm/parsers/ReindexStatementParser.d.ts +8 -0
- package/dist/esm/parsers/ReindexStatementParser.js +14 -0
- package/dist/esm/parsers/ReindexStatementParser.js.map +1 -0
- package/dist/esm/parsers/SelectQueryParser.js.map +1 -1
- package/dist/esm/parsers/SourceParser.js +6 -1
- package/dist/esm/parsers/SourceParser.js.map +1 -1
- package/dist/esm/parsers/SqlParser.d.ts +12 -2
- package/dist/esm/parsers/SqlParser.js +117 -251
- package/dist/esm/parsers/SqlParser.js.map +1 -1
- package/dist/esm/parsers/SqlPrintTokenParser.d.ts +1 -0
- package/dist/esm/parsers/SqlPrintTokenParser.js +32 -4
- package/dist/esm/parsers/SqlPrintTokenParser.js.map +1 -1
- package/dist/esm/parsers/SqlTokenizer.d.ts +5 -0
- package/dist/esm/parsers/SqlTokenizer.js +181 -67
- package/dist/esm/parsers/SqlTokenizer.js.map +1 -1
- package/dist/esm/parsers/UsingClauseParser.js.map +1 -1
- package/dist/esm/parsers/VacuumStatementParser.d.ts +8 -0
- package/dist/esm/parsers/VacuumStatementParser.js +14 -0
- package/dist/esm/parsers/VacuumStatementParser.js.map +1 -0
- package/dist/esm/tokenReaders/CommandTokenReader.js +22 -4
- package/dist/esm/tokenReaders/CommandTokenReader.js.map +1 -1
- package/dist/esm/tokenReaders/StringSpecifierTokenReader.d.ts +2 -0
- package/dist/esm/tokenReaders/StringSpecifierTokenReader.js +30 -13
- package/dist/esm/tokenReaders/StringSpecifierTokenReader.js.map +1 -1
- package/dist/esm/tokenReaders/TokenReaderManager.d.ts +0 -7
- package/dist/esm/tokenReaders/TokenReaderManager.js +16 -48
- package/dist/esm/tokenReaders/TokenReaderManager.js.map +1 -1
- package/dist/esm/transformers/AliasRenamer.d.ts +1 -0
- package/dist/esm/transformers/AliasRenamer.js +7 -1
- package/dist/esm/transformers/AliasRenamer.js.map +1 -1
- package/dist/esm/transformers/CTECollector.d.ts +5 -2
- package/dist/esm/transformers/CTECollector.js +49 -0
- package/dist/esm/transformers/CTECollector.js.map +1 -1
- package/dist/esm/transformers/CTEDependencyTracer.d.ts +6 -1
- package/dist/esm/transformers/CTEDependencyTracer.js +44 -2
- package/dist/esm/transformers/CTEDependencyTracer.js.map +1 -1
- package/dist/esm/transformers/CTEDisabler.d.ts +6 -0
- package/dist/esm/transformers/CTEDisabler.js +19 -0
- package/dist/esm/transformers/CTEDisabler.js.map +1 -1
- package/dist/esm/transformers/CTERenamer.js +5 -2
- package/dist/esm/transformers/CTERenamer.js.map +1 -1
- package/dist/esm/transformers/ColumnReferenceCollector.d.ts +4 -0
- package/dist/esm/transformers/ColumnReferenceCollector.js +69 -1
- package/dist/esm/transformers/ColumnReferenceCollector.js.map +1 -1
- package/dist/esm/transformers/DeleteResultSelectConverter.js.map +1 -1
- package/dist/esm/transformers/DynamicQueryBuilder.d.ts +87 -11
- package/dist/esm/transformers/DynamicQueryBuilder.js +237 -9
- package/dist/esm/transformers/DynamicQueryBuilder.js.map +1 -1
- package/dist/esm/transformers/ExistsPredicateInjector.d.ts +33 -0
- package/dist/esm/transformers/ExistsPredicateInjector.js +294 -0
- package/dist/esm/transformers/ExistsPredicateInjector.js.map +1 -0
- package/dist/esm/transformers/FixtureCteBuilder.js +5 -2
- package/dist/esm/transformers/FixtureCteBuilder.js.map +1 -1
- package/dist/esm/transformers/InsertResultSelectConverter.d.ts +1 -0
- package/dist/esm/transformers/InsertResultSelectConverter.js +28 -7
- package/dist/esm/transformers/InsertResultSelectConverter.js.map +1 -1
- package/dist/esm/transformers/LinePrinter.d.ts +4 -2
- package/dist/esm/transformers/LinePrinter.js +93 -22
- package/dist/esm/transformers/LinePrinter.js.map +1 -1
- package/dist/esm/transformers/MergeResultSelectConverter.js.map +1 -1
- package/dist/esm/transformers/OptimizeUnusedLeftJoins.d.ts +33 -0
- package/dist/esm/transformers/OptimizeUnusedLeftJoins.js +333 -0
- package/dist/esm/transformers/OptimizeUnusedLeftJoins.js.map +1 -0
- package/dist/esm/transformers/PruneOptionalConditionBranches.d.ts +10 -0
- package/dist/esm/transformers/PruneOptionalConditionBranches.js +197 -0
- package/dist/esm/transformers/PruneOptionalConditionBranches.js.map +1 -0
- package/dist/esm/transformers/SchemaCollector.d.ts +3 -0
- package/dist/esm/transformers/SchemaCollector.js +37 -1
- package/dist/esm/transformers/SchemaCollector.js.map +1 -1
- package/dist/esm/transformers/SelectValueCollector.d.ts +5 -0
- package/dist/esm/transformers/SelectValueCollector.js +44 -2
- package/dist/esm/transformers/SelectValueCollector.js.map +1 -1
- package/dist/esm/transformers/SqlParamInjector.d.ts +5 -1
- package/dist/esm/transformers/SqlParamInjector.js +47 -11
- package/dist/esm/transformers/SqlParamInjector.js.map +1 -1
- package/dist/esm/transformers/SqlPrinter.js +8 -2
- package/dist/esm/transformers/SqlPrinter.js.map +1 -1
- package/dist/esm/transformers/TableSourceCollector.d.ts +9 -1
- package/dist/esm/transformers/TableSourceCollector.js +72 -5
- package/dist/esm/transformers/TableSourceCollector.js.map +1 -1
- package/dist/esm/transformers/UpdateResultSelectConverter.js.map +1 -1
- package/dist/esm/transformers/UpstreamSelectQueryFinder.d.ts +5 -0
- package/dist/esm/transformers/UpstreamSelectQueryFinder.js +46 -1
- package/dist/esm/transformers/UpstreamSelectQueryFinder.js.map +1 -1
- package/dist/esm/utils/CommentUtils.d.ts +1 -0
- package/dist/esm/utils/CommentUtils.js +14 -4
- package/dist/esm/utils/CommentUtils.js.map +1 -1
- package/dist/esm/utils/MultiQuerySplitter.d.ts +7 -11
- package/dist/esm/utils/MultiQuerySplitter.js +105 -66
- package/dist/esm/utils/MultiQuerySplitter.js.map +1 -1
- package/dist/esm/utils/ParameterRemover.d.ts +4 -0
- package/dist/esm/utils/ParameterRemover.js +23 -0
- package/dist/esm/utils/ParameterRemover.js.map +1 -1
- package/dist/esm/utils/ScopeResolver.d.ts +5 -2
- package/dist/esm/utils/ScopeResolver.js +37 -18
- package/dist/esm/utils/ScopeResolver.js.map +1 -1
- package/dist/esm/utils/charLookupTable.d.ts +6 -0
- package/dist/esm/utils/charLookupTable.js +9 -1
- package/dist/esm/utils/charLookupTable.js.map +1 -1
- package/dist/esm/utils/serialTypeNormalization.d.ts +15 -0
- package/dist/esm/utils/serialTypeNormalization.js +55 -0
- package/dist/esm/utils/serialTypeNormalization.js.map +1 -0
- package/dist/esm/utils/stringUtils.js +51 -26
- package/dist/esm/utils/stringUtils.js.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +21 -19
- package/dist/index.min.js.map +4 -4
- package/dist/models/CreateTableQuery.js +5 -4
- package/dist/models/CreateTableQuery.js.map +1 -1
- package/dist/models/DDLStatements.js +14 -1
- package/dist/models/DDLStatements.js.map +1 -1
- package/dist/models/KeywordTrie.js +26 -27
- package/dist/models/KeywordTrie.js.map +1 -1
- package/dist/models/SqlPrintToken.js +1 -0
- package/dist/models/SqlPrintToken.js.map +1 -1
- package/dist/parsers/CommentOnParser.js +65 -0
- package/dist/parsers/CommentOnParser.js.map +1 -0
- package/dist/parsers/CreateIndexParser.js +12 -6
- package/dist/parsers/CreateIndexParser.js.map +1 -1
- package/dist/parsers/CreateTableParser.js +6 -1
- package/dist/parsers/CreateTableParser.js.map +1 -1
- package/dist/parsers/FullNameParser.js +35 -3
- package/dist/parsers/FullNameParser.js.map +1 -1
- package/dist/parsers/SqlParser.js +93 -307
- package/dist/parsers/SqlParser.js.map +1 -1
- package/dist/parsers/SqlPrintTokenParser.js +27 -3
- package/dist/parsers/SqlPrintTokenParser.js.map +1 -1
- package/dist/parsers/SqlTokenizer.js +176 -67
- package/dist/parsers/SqlTokenizer.js.map +1 -1
- package/dist/src/index.d.ts +2 -0
- package/dist/src/models/CreateTableQuery.d.ts +3 -0
- package/dist/src/models/DDLStatements.d.ts +15 -0
- package/dist/src/models/KeywordTrie.d.ts +2 -3
- package/dist/src/models/SqlPrintToken.d.ts +1 -0
- package/dist/src/parsers/CommentOnParser.d.ts +23 -0
- package/dist/src/parsers/CreateTableParser.d.ts +1 -0
- package/dist/src/parsers/SqlParser.d.ts +8 -2
- package/dist/src/parsers/SqlPrintTokenParser.d.ts +1 -0
- package/dist/src/parsers/SqlTokenizer.d.ts +5 -0
- package/dist/src/tokenReaders/StringSpecifierTokenReader.d.ts +2 -0
- package/dist/src/tokenReaders/TokenReaderManager.d.ts +0 -7
- package/dist/src/transformers/DynamicQueryBuilder.d.ts +12 -0
- package/dist/src/transformers/LinePrinter.d.ts +4 -2
- package/dist/src/transformers/PruneOptionalConditionBranches.d.ts +10 -0
- package/dist/src/utils/CommentUtils.d.ts +1 -0
- package/dist/src/utils/MultiQuerySplitter.d.ts +7 -11
- package/dist/tokenReaders/CommandTokenReader.js +21 -4
- package/dist/tokenReaders/CommandTokenReader.js.map +1 -1
- package/dist/tokenReaders/StringSpecifierTokenReader.js +30 -13
- package/dist/tokenReaders/StringSpecifierTokenReader.js.map +1 -1
- package/dist/tokenReaders/TokenReaderManager.js +16 -48
- package/dist/tokenReaders/TokenReaderManager.js.map +1 -1
- package/dist/transformers/DynamicQueryBuilder.js +24 -2
- package/dist/transformers/DynamicQueryBuilder.js.map +1 -1
- package/dist/transformers/LinePrinter.js +93 -22
- package/dist/transformers/LinePrinter.js.map +1 -1
- package/dist/transformers/PruneOptionalConditionBranches.js +201 -0
- package/dist/transformers/PruneOptionalConditionBranches.js.map +1 -0
- package/dist/tsconfig.browser.tsbuildinfo +1 -1
- package/dist/utils/CommentUtils.js +14 -4
- package/dist/utils/CommentUtils.js.map +1 -1
- package/dist/utils/MultiQuerySplitter.js +105 -66
- package/dist/utils/MultiQuerySplitter.js.map +1 -1
- package/dist/utils/stringUtils.js +42 -23
- package/dist/utils/stringUtils.js.map +1 -1
- package/package.json +65 -64
- package/LICENSE +0 -21
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import { SimpleSelectQuery, BinarySelectQuery, ValuesQuery } from "../models/SelectQuery";
|
|
2
2
|
import { SubQuerySource, TableSource } from "../models/Clause";
|
|
3
|
+
import { InsertQuery } from "../models/InsertQuery";
|
|
4
|
+
import { UpdateQuery } from "../models/UpdateQuery";
|
|
5
|
+
import { DeleteQuery } from "../models/DeleteQuery";
|
|
6
|
+
import { ColumnReference } from "../models/ValueComponent";
|
|
3
7
|
import { SelectableColumnCollector, DuplicateDetectionMode } from "./SelectableColumnCollector";
|
|
4
8
|
import { CTECollector } from "./CTECollector";
|
|
5
9
|
/**
|
|
@@ -47,6 +51,9 @@ export class UpstreamSelectQueryFinder {
|
|
|
47
51
|
// Remove the current CTE name from the map to prevent infinite recursion
|
|
48
52
|
const nextCteMap = new Map(cteMap);
|
|
49
53
|
nextCteMap.delete(src.table.name);
|
|
54
|
+
if (!this.isSelectQuery(cte.query)) {
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
50
57
|
const result = this.findUpstream(cte.query, columnNames, nextCteMap);
|
|
51
58
|
if (result.length === 0) {
|
|
52
59
|
return null;
|
|
@@ -149,7 +156,7 @@ export class UpstreamSelectQueryFinder {
|
|
|
149
156
|
if (query.withClause) {
|
|
150
157
|
for (const cte of query.withClause.tables) {
|
|
151
158
|
// Collect columns from CTE query
|
|
152
|
-
const columns = this.
|
|
159
|
+
const columns = this.collectColumnsFromCteQuery(cte.query);
|
|
153
160
|
cteColumns.push(...columns);
|
|
154
161
|
}
|
|
155
162
|
}
|
|
@@ -158,6 +165,12 @@ export class UpstreamSelectQueryFinder {
|
|
|
158
165
|
/**
|
|
159
166
|
* Recursively collects columns from SelectQuery
|
|
160
167
|
*/
|
|
168
|
+
collectColumnsFromCteQuery(query) {
|
|
169
|
+
if (!this.isSelectQuery(query)) {
|
|
170
|
+
return this.collectColumnsFromReturning(query);
|
|
171
|
+
}
|
|
172
|
+
return this.collectColumnsFromSelectQuery(query);
|
|
173
|
+
}
|
|
161
174
|
collectColumnsFromSelectQuery(query) {
|
|
162
175
|
if (query instanceof SimpleSelectQuery) {
|
|
163
176
|
try {
|
|
@@ -176,5 +189,37 @@ export class UpstreamSelectQueryFinder {
|
|
|
176
189
|
}
|
|
177
190
|
return [];
|
|
178
191
|
}
|
|
192
|
+
collectColumnsFromReturning(query) {
|
|
193
|
+
if (query instanceof InsertQuery || query instanceof UpdateQuery || query instanceof DeleteQuery) {
|
|
194
|
+
return this.extractReturningColumns(query.returningClause);
|
|
195
|
+
}
|
|
196
|
+
return [];
|
|
197
|
+
}
|
|
198
|
+
extractReturningColumns(returningClause) {
|
|
199
|
+
var _a, _b;
|
|
200
|
+
if (!returningClause) {
|
|
201
|
+
return [];
|
|
202
|
+
}
|
|
203
|
+
const columns = [];
|
|
204
|
+
for (const item of returningClause.items) {
|
|
205
|
+
const name = (_b = (_a = item.identifier) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : this.extractColumnName(item);
|
|
206
|
+
if (name) {
|
|
207
|
+
columns.push(name);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
return columns;
|
|
211
|
+
}
|
|
212
|
+
extractColumnName(item) {
|
|
213
|
+
if (item.identifier) {
|
|
214
|
+
return item.identifier.name;
|
|
215
|
+
}
|
|
216
|
+
if (item.value instanceof ColumnReference) {
|
|
217
|
+
return item.value.column.name;
|
|
218
|
+
}
|
|
219
|
+
return null;
|
|
220
|
+
}
|
|
221
|
+
isSelectQuery(query) {
|
|
222
|
+
return '__selectQueryType' in query && query.__selectQueryType === 'SelectQuery';
|
|
223
|
+
}
|
|
179
224
|
}
|
|
180
225
|
//# sourceMappingURL=UpstreamSelectQueryFinder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UpstreamSelectQueryFinder.js","sourceRoot":"","sources":["../../../src/transformers/UpstreamSelectQueryFinder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,iBAAiB,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACvG,OAAO,
|
|
1
|
+
{"version":3,"file":"UpstreamSelectQueryFinder.js","sourceRoot":"","sources":["../../../src/transformers/UpstreamSelectQueryFinder.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ import { Lexeme } from "../models/Lexeme";
|
|
|
3
3
|
* Utility functions for handling comments in parsers
|
|
4
4
|
*/
|
|
5
5
|
export declare class CommentUtils {
|
|
6
|
+
private static readonly SIGNIFICANT_SQL_KEYWORDS;
|
|
6
7
|
/**
|
|
7
8
|
* Collects comments from preceding tokens that are associated with a specific keyword.
|
|
8
9
|
* This function looks for comments in tokens before the current position that might
|
|
@@ -13,7 +13,8 @@ export class CommentUtils {
|
|
|
13
13
|
* @returns Array of comments associated with this clause
|
|
14
14
|
*/
|
|
15
15
|
static collectClauseComments(lexemes, currentIndex, keywordValue) {
|
|
16
|
-
|
|
16
|
+
const normalizedKeyword = keywordValue.toLowerCase();
|
|
17
|
+
if (currentIndex >= lexemes.length || lexemes[currentIndex].value.toLowerCase() !== normalizedKeyword) {
|
|
17
18
|
return null;
|
|
18
19
|
}
|
|
19
20
|
const comments = [];
|
|
@@ -32,7 +33,7 @@ export class CommentUtils {
|
|
|
32
33
|
// Check if the comments contain keywords that suggest they belong to the current clause
|
|
33
34
|
const clauseSpecificComments = prevToken.comments.filter(comment => {
|
|
34
35
|
const lowerComment = comment.toLowerCase();
|
|
35
|
-
return lowerComment.includes(
|
|
36
|
+
return lowerComment.includes(normalizedKeyword) ||
|
|
36
37
|
lowerComment.includes('の') || // Japanese possessive particle
|
|
37
38
|
lowerComment.includes('コメント'); // "comment" in Japanese
|
|
38
39
|
});
|
|
@@ -58,8 +59,17 @@ export class CommentUtils {
|
|
|
58
59
|
* Checks if a token value is a significant SQL keyword that would separate clauses
|
|
59
60
|
*/
|
|
60
61
|
static isSignificantSqlKeyword(value) {
|
|
61
|
-
|
|
62
|
-
return keywords.has(value.toLowerCase());
|
|
62
|
+
return this.SIGNIFICANT_SQL_KEYWORDS.has(value.toLowerCase());
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
|
+
CommentUtils.SIGNIFICANT_SQL_KEYWORDS = new Set([
|
|
66
|
+
'select',
|
|
67
|
+
'from',
|
|
68
|
+
'where',
|
|
69
|
+
'group by',
|
|
70
|
+
'having',
|
|
71
|
+
'order by',
|
|
72
|
+
'limit',
|
|
73
|
+
'offset'
|
|
74
|
+
]);
|
|
65
75
|
//# sourceMappingURL=CommentUtils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommentUtils.js","sourceRoot":"","sources":["../../../src/utils/CommentUtils.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,OAAO,YAAY;
|
|
1
|
+
{"version":3,"file":"CommentUtils.js","sourceRoot":"","sources":["../../../src/utils/CommentUtils.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,OAAO,YAAY;IAYrB;;;;;;;;;OASG;IACI,MAAM,CAAC,qBAAqB,CAAC,OAAiB,EAAE,YAAoB,EAAE,YAAoB;QAC7F,MAAM,iBAAiB,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;QAErD,IAAI,YAAY,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,iBAAiB,EAAE,CAAC;YACpG,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,iDAAiD;QACjD,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;YACjC,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,CAAC;QACrD,CAAC;QAED,wEAAwE;QACxE,+FAA+F;QAC/F,IAAI,UAAU,GAAG,YAAY,GAAG,CAAC,CAAC;QAClC,OAAO,UAAU,IAAI,CAAC,EAAE,CAAC;YACrB,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;YAEtC,2EAA2E;YAC3E,oDAAoD;YACpD,IAAI,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtD,wFAAwF;gBACxF,MAAM,sBAAsB,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;oBAC/D,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;oBAC3C,OAAO,YAAY,CAAC,QAAQ,CAAC,iBAAiB,CAAC;wBACxC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,+BAA+B;wBAC7D,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,wBAAwB;gBAClE,CAAC,CAAC,CAAC;gBAEH,IAAI,sBAAsB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACpC,QAAQ,CAAC,OAAO,CAAC,GAAG,sBAAsB,CAAC,CAAC;oBAC5C,qEAAqE;oBACrE,SAAS,CAAC,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;oBACzF,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBAClC,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC;oBAC9B,CAAC;gBACL,CAAC;gBACD,MAAM,CAAC,8CAA8C;YACzD,CAAC;YAED,uDAAuD;YACvD,IAAI,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;gBAChD,MAAM;YACV,CAAC;YAED,UAAU,EAAE,CAAC;QACjB,CAAC;QAED,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;IACjD,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,uBAAuB,CAAC,KAAa;QAChD,OAAO,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;IAClE,CAAC;;AA/EuB,qCAAwB,GAAG,IAAI,GAAG,CAAC;IACvD,QAAQ;IACR,MAAM;IACN,OAAO;IACP,UAAU;IACV,QAAQ;IACR,UAAU;IACV,OAAO;IACP,QAAQ;CACX,CAAC,CAAC"}
|
|
@@ -80,19 +80,15 @@ export declare class MultiQuerySplitter {
|
|
|
80
80
|
*/
|
|
81
81
|
static split(text: string): QueryCollection;
|
|
82
82
|
/**
|
|
83
|
-
*
|
|
84
|
-
*
|
|
85
|
-
*
|
|
86
|
-
*
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
*
|
|
83
|
+
* Split text by semicolons while respecting quotes and comments.
|
|
84
|
+
* Single-pass O(n) implementation with support for:
|
|
85
|
+
* - Single-quoted strings ('...' with '' escaping)
|
|
86
|
+
* - Double-quoted identifiers ("..." with "" escaping)
|
|
87
|
+
* - Line comments (--)
|
|
88
|
+
* - Block comments (/* ... *\/)
|
|
89
|
+
* - PostgreSQL dollar-quoted strings ($$...$$ or $tag$...$tag$)
|
|
90
90
|
*/
|
|
91
91
|
private static splitRespectingQuotesAndComments;
|
|
92
|
-
/**
|
|
93
|
-
* Check if character at position is a valid semicolon (not in quotes/comments)
|
|
94
|
-
*/
|
|
95
|
-
private static isValidSemicolon;
|
|
96
92
|
/**
|
|
97
93
|
* Merge comment-only segments with previous executable segments
|
|
98
94
|
*/
|
|
@@ -88,99 +88,138 @@ export class MultiQuerySplitter {
|
|
|
88
88
|
};
|
|
89
89
|
}
|
|
90
90
|
/**
|
|
91
|
-
*
|
|
92
|
-
*
|
|
93
|
-
*
|
|
94
|
-
*
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
*
|
|
91
|
+
* Split text by semicolons while respecting quotes and comments.
|
|
92
|
+
* Single-pass O(n) implementation with support for:
|
|
93
|
+
* - Single-quoted strings ('...' with '' escaping)
|
|
94
|
+
* - Double-quoted identifiers ("..." with "" escaping)
|
|
95
|
+
* - Line comments (--)
|
|
96
|
+
* - Block comments (/* ... *\/)
|
|
97
|
+
* - PostgreSQL dollar-quoted strings ($$...$$ or $tag$...$tag$)
|
|
98
98
|
*/
|
|
99
99
|
static splitRespectingQuotesAndComments(text) {
|
|
100
100
|
const segments = [];
|
|
101
101
|
let currentStart = 0;
|
|
102
102
|
let i = 0;
|
|
103
|
-
while (i <= text.length) {
|
|
104
|
-
// Check if we're at a valid semicolon or end of text
|
|
105
|
-
const isValidBreakpoint = (i === text.length) || (i < text.length && this.isValidSemicolon(text, i));
|
|
106
|
-
if (isValidBreakpoint) {
|
|
107
|
-
const segmentText = text.substring(currentStart, i);
|
|
108
|
-
if (segmentText.length > 0 || i < text.length) {
|
|
109
|
-
segments.push({
|
|
110
|
-
text: segmentText,
|
|
111
|
-
start: currentStart,
|
|
112
|
-
end: i
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
currentStart = i + 1;
|
|
116
|
-
}
|
|
117
|
-
i++;
|
|
118
|
-
}
|
|
119
|
-
return segments;
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* Check if character at position is a valid semicolon (not in quotes/comments)
|
|
123
|
-
*/
|
|
124
|
-
static isValidSemicolon(text, pos) {
|
|
125
|
-
if (text[pos] !== ';')
|
|
126
|
-
return false;
|
|
127
|
-
// Check if this semicolon is inside quotes or comments by scanning from start
|
|
128
103
|
let inSingleQuote = false;
|
|
129
104
|
let inDoubleQuote = false;
|
|
130
105
|
let inLineComment = false;
|
|
131
106
|
let inBlockComment = false;
|
|
132
|
-
|
|
107
|
+
let inDollarQuote = false;
|
|
108
|
+
let dollarTag = '';
|
|
109
|
+
while (i < text.length) {
|
|
133
110
|
const char = text[i];
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
i++; // Skip next character
|
|
140
|
-
continue;
|
|
141
|
-
}
|
|
142
|
-
if (inLineComment && char === '\n') {
|
|
143
|
-
inLineComment = false;
|
|
111
|
+
// --- inside line comment ---
|
|
112
|
+
if (inLineComment) {
|
|
113
|
+
if (char === '\n')
|
|
114
|
+
inLineComment = false;
|
|
115
|
+
i++;
|
|
144
116
|
continue;
|
|
145
117
|
}
|
|
146
|
-
//
|
|
147
|
-
if (
|
|
148
|
-
char === '
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
i++; // Skip next character
|
|
118
|
+
// --- inside block comment ---
|
|
119
|
+
if (inBlockComment) {
|
|
120
|
+
if (char === '*' && text[i + 1] === '/') {
|
|
121
|
+
inBlockComment = false;
|
|
122
|
+
i += 2;
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
i++;
|
|
126
|
+
}
|
|
156
127
|
continue;
|
|
157
128
|
}
|
|
158
|
-
//
|
|
159
|
-
if (
|
|
129
|
+
// --- inside dollar-quoted string ---
|
|
130
|
+
if (inDollarQuote) {
|
|
131
|
+
const closing = '$' + dollarTag + '$';
|
|
132
|
+
if (text.startsWith(closing, i)) {
|
|
133
|
+
inDollarQuote = false;
|
|
134
|
+
dollarTag = '';
|
|
135
|
+
i += closing.length;
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
i++;
|
|
139
|
+
}
|
|
160
140
|
continue;
|
|
161
141
|
}
|
|
162
|
-
//
|
|
163
|
-
if (
|
|
164
|
-
if (
|
|
165
|
-
i
|
|
142
|
+
// --- inside single-quoted string ---
|
|
143
|
+
if (inSingleQuote) {
|
|
144
|
+
if (char === "'" && text[i + 1] === "'") {
|
|
145
|
+
i += 2; // escaped quote
|
|
146
|
+
}
|
|
147
|
+
else if (char === "'") {
|
|
148
|
+
inSingleQuote = false;
|
|
149
|
+
i++;
|
|
166
150
|
}
|
|
167
151
|
else {
|
|
168
|
-
|
|
152
|
+
i++;
|
|
169
153
|
}
|
|
170
154
|
continue;
|
|
171
155
|
}
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
156
|
+
// --- inside double-quoted identifier ---
|
|
157
|
+
if (inDoubleQuote) {
|
|
158
|
+
if (char === '"' && text[i + 1] === '"') {
|
|
159
|
+
i += 2; // escaped quote
|
|
160
|
+
}
|
|
161
|
+
else if (char === '"') {
|
|
162
|
+
inDoubleQuote = false;
|
|
163
|
+
i++;
|
|
175
164
|
}
|
|
176
165
|
else {
|
|
177
|
-
|
|
166
|
+
i++;
|
|
167
|
+
}
|
|
168
|
+
continue;
|
|
169
|
+
}
|
|
170
|
+
// --- unquoted context ---
|
|
171
|
+
// line comment
|
|
172
|
+
if (char === '-' && text[i + 1] === '-') {
|
|
173
|
+
inLineComment = true;
|
|
174
|
+
i += 2;
|
|
175
|
+
continue;
|
|
176
|
+
}
|
|
177
|
+
// block comment
|
|
178
|
+
if (char === '/' && text[i + 1] === '*') {
|
|
179
|
+
inBlockComment = true;
|
|
180
|
+
i += 2;
|
|
181
|
+
continue;
|
|
182
|
+
}
|
|
183
|
+
// dollar-quoted string: $tag$ where tag is empty or [a-zA-Z_]\w*
|
|
184
|
+
if (char === '$') {
|
|
185
|
+
const tagEnd = text.indexOf('$', i + 1);
|
|
186
|
+
if (tagEnd !== -1) {
|
|
187
|
+
const tag = text.substring(i + 1, tagEnd);
|
|
188
|
+
if (/^([a-zA-Z_]\w*)?$/.test(tag)) {
|
|
189
|
+
inDollarQuote = true;
|
|
190
|
+
dollarTag = tag;
|
|
191
|
+
i = tagEnd + 1;
|
|
192
|
+
continue;
|
|
193
|
+
}
|
|
178
194
|
}
|
|
195
|
+
}
|
|
196
|
+
// single quote
|
|
197
|
+
if (char === "'") {
|
|
198
|
+
inSingleQuote = true;
|
|
199
|
+
i++;
|
|
179
200
|
continue;
|
|
180
201
|
}
|
|
202
|
+
// double quote
|
|
203
|
+
if (char === '"') {
|
|
204
|
+
inDoubleQuote = true;
|
|
205
|
+
i++;
|
|
206
|
+
continue;
|
|
207
|
+
}
|
|
208
|
+
// valid semicolon split point
|
|
209
|
+
if (char === ';') {
|
|
210
|
+
segments.push({ text: text.substring(currentStart, i), start: currentStart, end: i });
|
|
211
|
+
currentStart = i + 1;
|
|
212
|
+
i++;
|
|
213
|
+
continue;
|
|
214
|
+
}
|
|
215
|
+
i++;
|
|
181
216
|
}
|
|
182
|
-
//
|
|
183
|
-
|
|
217
|
+
// remaining text after last semicolon (or entire text if no semicolon)
|
|
218
|
+
const remaining = text.substring(currentStart);
|
|
219
|
+
if (remaining.length > 0 || segments.length === 0) {
|
|
220
|
+
segments.push({ text: remaining, start: currentStart, end: text.length });
|
|
221
|
+
}
|
|
222
|
+
return segments;
|
|
184
223
|
}
|
|
185
224
|
/**
|
|
186
225
|
* Merge comment-only segments with previous executable segments
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MultiQuerySplitter.js","sourceRoot":"","sources":["../../../src/utils/MultiQuerySplitter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAiDxD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,OAAO,kBAAkB;IAC3B;;;;;OAKG;IACI,MAAM,CAAC,KAAK,CAAC,IAAY;QAC5B,MAAM,OAAO,GAAgB,EAAE,CAAC;QAEhC,kDAAkD;QAClD,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAC9B,OAAO;gBACH,OAAO,EAAE,EAAE;gBACX,YAAY,EAAE,IAAI;gBAClB,SAAS,EAAE,GAAG,EAAE,CAAC,SAAS;gBAC1B,QAAQ,EAAE,GAAG,EAAE,CAAC,SAAS;gBACzB,WAAW,EAAE,GAAG,EAAE,CAAC,EAAE;aACxB,CAAC;QACN,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,CAAC;QAClE,MAAM,UAAU,GAAG,IAAI,CAAC,4BAA4B,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;QAG1E,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACpC,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAE1C,iFAAiF;YACjF,MAAM,GAAG,GAAG,MAAM,CAAC;YAGnB,MAAM,YAAY,GAAG,iBAAiB,CAAC,sBAAsB,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;YACpF,MAAM,UAAU,GAAG,iBAAiB,CAAC,sBAAsB,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;YAEhF,OAAO,CAAC,IAAI,CAAC;gBACT,GAAG;gBACH,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,GAAG,EAAE,QAAQ,CAAC,GAAG;gBACjB,SAAS,EAAE,CAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,IAAI,KAAI,CAAC;gBAClC,OAAO,EAAE,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,IAAI,KAAI,CAAC;gBAC9B,KAAK,EAAE,UAAU,EAAE;gBACnB,OAAO;aACV,CAAC,CAAC;QACP,CAAC;QAED,OAAO;YACH,OAAO;YACP,YAAY,EAAE,IAAI;YAClB,SAAS,EAAE,CAAC,cAAmC,EAAE,EAAE;gBAC/C,MAAM,OAAO,GAAG,OAAO,cAAc,KAAK,QAAQ;oBAC9C,CAAC,CAAC,cAAc;oBAChB,CAAC,CAAC,iBAAiB,CAAC,sBAAsB,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;gBAErE,IAAI,OAAO,KAAK,CAAC,CAAC;oBAAE,OAAO,SAAS,CAAC;gBAErC,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CACxB,OAAO,IAAI,KAAK,CAAC,KAAK,IAAI,OAAO,IAAI,KAAK,CAAC,GAAG,CACjD,CAAC;YACN,CAAC;YACD,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE;gBACxB,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;YAC1B,CAAC;YACD,WAAW,EAAE,GAAG,EAAE;gBACd,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YAC3C,CAAC;SACJ,CAAC;IACN,CAAC;IAED
|
|
1
|
+
{"version":3,"file":"MultiQuerySplitter.js","sourceRoot":"","sources":["../../../src/utils/MultiQuerySplitter.ts"],"names":[],"mappings":"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"}
|
|
@@ -37,6 +37,9 @@ export declare class ParameterRemover implements SqlComponentVisitor<SqlComponen
|
|
|
37
37
|
* Visit ValuesQuery node
|
|
38
38
|
*/
|
|
39
39
|
private visitValuesQuery;
|
|
40
|
+
private visitInsertQuery;
|
|
41
|
+
private visitUpdateQuery;
|
|
42
|
+
private visitDeleteQuery;
|
|
40
43
|
/**
|
|
41
44
|
* Visit WithClause node
|
|
42
45
|
*/
|
|
@@ -216,6 +219,7 @@ export declare class ParameterRemover implements SqlComponentVisitor<SqlComponen
|
|
|
216
219
|
* Visit FetchExpression node
|
|
217
220
|
*/
|
|
218
221
|
private visitFetchExpression;
|
|
222
|
+
private isSelectQuery;
|
|
219
223
|
/**
|
|
220
224
|
* Static method to apply parameter removal transformation on an SQL AST
|
|
221
225
|
* @param node The SQL AST node to transform
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { CommonTable, Distinct, DistinctOn, ForClause, FromClause, GroupByClause, HavingClause, JoinClause, JoinOnClause, JoinUsingClause, LimitClause, OffsetClause, FetchClause, FetchExpression, OrderByClause, OrderByItem, ParenSource, SelectClause, SelectItem, SourceAliasExpression, SourceExpression, SubQuerySource, TableSource, WhereClause, WindowFrameClause, WindowsClause, WithClause } from "../models/Clause";
|
|
2
2
|
import { BinarySelectQuery, SimpleSelectQuery, ValuesQuery } from "../models/SelectQuery";
|
|
3
|
+
import { InsertQuery } from "../models/InsertQuery";
|
|
4
|
+
import { UpdateQuery } from "../models/UpdateQuery";
|
|
5
|
+
import { DeleteQuery } from "../models/DeleteQuery";
|
|
3
6
|
import { ArrayExpression, BetweenExpression, BinaryExpression, CaseExpression, CaseKeyValuePair, CastExpression, ColumnReference, FunctionCall, InlineQuery, ParenExpression, ParameterExpression, SwitchCaseArgument, TupleExpression, UnaryExpression, WindowFrameExpression, IdentifierString, RawString, WindowFrameSpec, LiteralValue, TypeValue } from "../models/ValueComponent";
|
|
4
7
|
import { OperatorPrecedence } from "./OperatorPrecedence";
|
|
5
8
|
/**
|
|
@@ -82,6 +85,10 @@ export class ParameterRemover {
|
|
|
82
85
|
this.handlers.set(SimpleSelectQuery.kind, (expr) => this.visitSimpleSelectQuery(expr));
|
|
83
86
|
this.handlers.set(BinarySelectQuery.kind, (expr) => this.visitBinarySelectQuery(expr));
|
|
84
87
|
this.handlers.set(ValuesQuery.kind, (expr) => this.visitValuesQuery(expr));
|
|
88
|
+
// Writable CTE statements should pass through without parameter removal for now.
|
|
89
|
+
this.handlers.set(InsertQuery.kind, (expr) => this.visitInsertQuery(expr));
|
|
90
|
+
this.handlers.set(UpdateQuery.kind, (expr) => this.visitUpdateQuery(expr));
|
|
91
|
+
this.handlers.set(DeleteQuery.kind, (expr) => this.visitDeleteQuery(expr));
|
|
85
92
|
// WithClause and CommonTable
|
|
86
93
|
this.handlers.set(WithClause.kind, (expr) => this.visitWithClause(expr));
|
|
87
94
|
this.handlers.set(CommonTable.kind, (expr) => this.visitCommonTable(expr));
|
|
@@ -252,6 +259,15 @@ export class ParameterRemover {
|
|
|
252
259
|
// we'll just return it as is for now
|
|
253
260
|
return query;
|
|
254
261
|
}
|
|
262
|
+
visitInsertQuery(query) {
|
|
263
|
+
return query;
|
|
264
|
+
}
|
|
265
|
+
visitUpdateQuery(query) {
|
|
266
|
+
return query;
|
|
267
|
+
}
|
|
268
|
+
visitDeleteQuery(query) {
|
|
269
|
+
return query;
|
|
270
|
+
}
|
|
255
271
|
/**
|
|
256
272
|
* Visit WithClause node
|
|
257
273
|
*/
|
|
@@ -278,6 +294,10 @@ export class ParameterRemover {
|
|
|
278
294
|
if (!aliasExpression) {
|
|
279
295
|
return null;
|
|
280
296
|
}
|
|
297
|
+
if (!this.isSelectQuery(table.query)) {
|
|
298
|
+
// Preserve writable CTEs without parameter removal.
|
|
299
|
+
return new CommonTable(table.query, aliasExpression, table.materialized);
|
|
300
|
+
}
|
|
281
301
|
const selectQuery = this.visit(table.query);
|
|
282
302
|
if (!selectQuery) {
|
|
283
303
|
return null;
|
|
@@ -766,6 +786,9 @@ export class ParameterRemover {
|
|
|
766
786
|
const count = this.visit(expression.count);
|
|
767
787
|
return new FetchExpression(expression.type, count, expression.unit);
|
|
768
788
|
}
|
|
789
|
+
isSelectQuery(component) {
|
|
790
|
+
return '__selectQueryType' in component && component.__selectQueryType === 'SelectQuery';
|
|
791
|
+
}
|
|
769
792
|
/**
|
|
770
793
|
* Static method to apply parameter removal transformation on an SQL AST
|
|
771
794
|
* @param node The SQL AST node to transform
|