rawsql-ts 0.11.7-beta → 0.11.9-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 +82 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index.min.js +23 -15
- package/dist/esm/index.min.js.map +4 -4
- package/dist/esm/src/index.d.ts +1 -0
- package/dist/esm/src/index.js +1 -0
- package/dist/esm/src/index.js.map +1 -1
- package/dist/esm/src/models/BinarySelectQuery.d.ts +2 -2
- package/dist/esm/src/models/BinarySelectQuery.js.map +1 -1
- package/dist/esm/src/models/SelectQuery.d.ts +2 -1
- package/dist/esm/src/models/SelectQuery.js.map +1 -1
- package/dist/esm/src/models/SimpleSelectQuery.d.ts +2 -2
- package/dist/esm/src/models/SimpleSelectQuery.js.map +1 -1
- package/dist/esm/src/models/ValueComponent.d.ts +19 -4
- package/dist/esm/src/models/ValueComponent.js +19 -1
- package/dist/esm/src/models/ValueComponent.js.map +1 -1
- package/dist/esm/src/models/ValuesQuery.d.ts +2 -1
- package/dist/esm/src/models/ValuesQuery.js.map +1 -1
- package/dist/esm/src/parsers/CommonTableParser.js +16 -0
- package/dist/esm/src/parsers/CommonTableParser.js.map +1 -1
- package/dist/esm/src/parsers/LiteralParser.js +15 -5
- package/dist/esm/src/parsers/LiteralParser.js.map +1 -1
- package/dist/esm/src/parsers/SqlPrintTokenParser.d.ts +2 -0
- package/dist/esm/src/parsers/SqlPrintTokenParser.js +42 -2
- package/dist/esm/src/parsers/SqlPrintTokenParser.js.map +1 -1
- package/dist/esm/src/parsers/ValueParser.d.ts +13 -0
- package/dist/esm/src/parsers/ValueParser.js +134 -1
- package/dist/esm/src/parsers/ValueParser.js.map +1 -1
- package/dist/esm/src/parsers/WithClauseParser.js +8 -2
- package/dist/esm/src/parsers/WithClauseParser.js.map +1 -1
- package/dist/esm/src/reporting/models/DataFlowEdge.d.ts +33 -0
- package/dist/esm/src/reporting/models/DataFlowEdge.js +53 -0
- package/dist/esm/src/reporting/models/DataFlowEdge.js.map +1 -0
- package/dist/esm/src/reporting/models/DataFlowGraph.d.ts +49 -0
- package/dist/esm/src/reporting/models/DataFlowGraph.js +156 -0
- package/dist/esm/src/reporting/models/DataFlowGraph.js.map +1 -0
- package/dist/esm/src/reporting/models/DataFlowNode.d.ts +67 -0
- package/dist/esm/src/reporting/models/DataFlowNode.js +116 -0
- package/dist/esm/src/reporting/models/DataFlowNode.js.map +1 -0
- package/dist/esm/src/reporting/services/CTEHandler.d.ts +17 -0
- package/dist/esm/src/reporting/services/CTEHandler.js +54 -0
- package/dist/esm/src/reporting/services/CTEHandler.js.map +1 -0
- package/dist/esm/src/reporting/services/DataSourceHandler.d.ts +25 -0
- package/dist/esm/src/reporting/services/DataSourceHandler.js +91 -0
- package/dist/esm/src/reporting/services/DataSourceHandler.js.map +1 -0
- package/dist/esm/src/reporting/services/JoinHandler.d.ts +32 -0
- package/dist/esm/src/reporting/services/JoinHandler.js +80 -0
- package/dist/esm/src/reporting/services/JoinHandler.js.map +1 -0
- package/dist/esm/src/reporting/services/ProcessHandler.d.ts +55 -0
- package/dist/esm/src/reporting/services/ProcessHandler.js +177 -0
- package/dist/esm/src/reporting/services/ProcessHandler.js.map +1 -0
- package/dist/esm/src/tokenReaders/EscapedIdentifierTokenReader.d.ts +5 -0
- package/dist/esm/src/tokenReaders/EscapedIdentifierTokenReader.js +37 -1
- package/dist/esm/src/tokenReaders/EscapedIdentifierTokenReader.js.map +1 -1
- package/dist/esm/src/tokenReaders/LiteralTokenReader.d.ts +16 -0
- package/dist/esm/src/tokenReaders/LiteralTokenReader.js +119 -0
- package/dist/esm/src/tokenReaders/LiteralTokenReader.js.map +1 -1
- package/dist/esm/src/tokenReaders/OperatorTokenReader.js +4 -0
- package/dist/esm/src/tokenReaders/OperatorTokenReader.js.map +1 -1
- package/dist/esm/src/tokenReaders/ParameterTokenReader.d.ts +14 -0
- package/dist/esm/src/tokenReaders/ParameterTokenReader.js +126 -0
- package/dist/esm/src/tokenReaders/ParameterTokenReader.js.map +1 -1
- package/dist/esm/src/transformers/DynamicQueryBuilder.d.ts +28 -2
- package/dist/esm/src/transformers/DynamicQueryBuilder.js.map +1 -1
- package/dist/esm/src/transformers/QueryFlowDiagramGenerator.d.ts +37 -0
- package/dist/esm/src/transformers/QueryFlowDiagramGenerator.js +143 -0
- package/dist/esm/src/transformers/QueryFlowDiagramGenerator.js.map +1 -0
- package/dist/esm/src/transformers/SqlParamInjector.d.ts +11 -0
- package/dist/esm/src/transformers/SqlParamInjector.js.map +1 -1
- package/dist/esm/src/transformers/TypeTransformationPostProcessor.d.ts +5 -5
- package/dist/esm/src/transformers/TypeTransformationPostProcessor.js +20 -8
- package/dist/esm/src/transformers/TypeTransformationPostProcessor.js.map +1 -1
- package/dist/esm/src/utils/OperatorPrecedence.js +23 -1
- package/dist/esm/src/utils/OperatorPrecedence.js.map +1 -1
- package/dist/esm/src/utils/charLookupTable.js +4 -4
- package/dist/esm/src/utils/charLookupTable.js.map +1 -1
- package/dist/esm/src/utils/stringUtils.js +17 -1
- package/dist/esm/src/utils/stringUtils.js.map +1 -1
- package/dist/esm/tsconfig.browser.tsbuildinfo +1 -1
- package/dist/index.min.js +23 -15
- package/dist/index.min.js.map +4 -4
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.js +1 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/models/BinarySelectQuery.d.ts +2 -2
- package/dist/src/models/BinarySelectQuery.js.map +1 -1
- package/dist/src/models/SelectQuery.d.ts +2 -1
- package/dist/src/models/SelectQuery.js.map +1 -1
- package/dist/src/models/SimpleSelectQuery.d.ts +2 -2
- package/dist/src/models/SimpleSelectQuery.js.map +1 -1
- package/dist/src/models/ValueComponent.d.ts +19 -4
- package/dist/src/models/ValueComponent.js +22 -2
- package/dist/src/models/ValueComponent.js.map +1 -1
- package/dist/src/models/ValuesQuery.d.ts +2 -1
- package/dist/src/models/ValuesQuery.js.map +1 -1
- package/dist/src/parsers/CommonTableParser.js +16 -0
- package/dist/src/parsers/CommonTableParser.js.map +1 -1
- package/dist/src/parsers/LiteralParser.js +15 -5
- package/dist/src/parsers/LiteralParser.js.map +1 -1
- package/dist/src/parsers/SqlPrintTokenParser.d.ts +2 -0
- package/dist/src/parsers/SqlPrintTokenParser.js +41 -1
- package/dist/src/parsers/SqlPrintTokenParser.js.map +1 -1
- package/dist/src/parsers/ValueParser.d.ts +13 -0
- package/dist/src/parsers/ValueParser.js +133 -0
- package/dist/src/parsers/ValueParser.js.map +1 -1
- package/dist/src/parsers/WithClauseParser.js +8 -2
- package/dist/src/parsers/WithClauseParser.js.map +1 -1
- package/dist/src/reporting/models/DataFlowEdge.d.ts +33 -0
- package/dist/src/reporting/models/DataFlowEdge.js +58 -0
- package/dist/src/reporting/models/DataFlowEdge.js.map +1 -0
- package/dist/src/reporting/models/DataFlowGraph.d.ts +49 -0
- package/dist/src/reporting/models/DataFlowGraph.js +160 -0
- package/dist/src/reporting/models/DataFlowGraph.js.map +1 -0
- package/dist/src/reporting/models/DataFlowNode.d.ts +67 -0
- package/dist/src/reporting/models/DataFlowNode.js +124 -0
- package/dist/src/reporting/models/DataFlowNode.js.map +1 -0
- package/dist/src/reporting/services/CTEHandler.d.ts +17 -0
- package/dist/src/reporting/services/CTEHandler.js +58 -0
- package/dist/src/reporting/services/CTEHandler.js.map +1 -0
- package/dist/src/reporting/services/DataSourceHandler.d.ts +25 -0
- package/dist/src/reporting/services/DataSourceHandler.js +95 -0
- package/dist/src/reporting/services/DataSourceHandler.js.map +1 -0
- package/dist/src/reporting/services/JoinHandler.d.ts +32 -0
- package/dist/src/reporting/services/JoinHandler.js +84 -0
- package/dist/src/reporting/services/JoinHandler.js.map +1 -0
- package/dist/src/reporting/services/ProcessHandler.d.ts +55 -0
- package/dist/src/reporting/services/ProcessHandler.js +181 -0
- package/dist/src/reporting/services/ProcessHandler.js.map +1 -0
- package/dist/src/tokenReaders/EscapedIdentifierTokenReader.d.ts +5 -0
- package/dist/src/tokenReaders/EscapedIdentifierTokenReader.js +37 -1
- package/dist/src/tokenReaders/EscapedIdentifierTokenReader.js.map +1 -1
- package/dist/src/tokenReaders/LiteralTokenReader.d.ts +16 -0
- package/dist/src/tokenReaders/LiteralTokenReader.js +119 -0
- package/dist/src/tokenReaders/LiteralTokenReader.js.map +1 -1
- package/dist/src/tokenReaders/OperatorTokenReader.js +4 -0
- package/dist/src/tokenReaders/OperatorTokenReader.js.map +1 -1
- package/dist/src/tokenReaders/ParameterTokenReader.d.ts +14 -0
- package/dist/src/tokenReaders/ParameterTokenReader.js +126 -0
- package/dist/src/tokenReaders/ParameterTokenReader.js.map +1 -1
- package/dist/src/transformers/DynamicQueryBuilder.d.ts +28 -2
- package/dist/src/transformers/DynamicQueryBuilder.js.map +1 -1
- package/dist/src/transformers/QueryFlowDiagramGenerator.d.ts +37 -0
- package/dist/src/transformers/QueryFlowDiagramGenerator.js +147 -0
- package/dist/src/transformers/QueryFlowDiagramGenerator.js.map +1 -0
- package/dist/src/transformers/SqlParamInjector.d.ts +11 -0
- package/dist/src/transformers/SqlParamInjector.js.map +1 -1
- package/dist/src/transformers/TypeTransformationPostProcessor.d.ts +5 -5
- package/dist/src/transformers/TypeTransformationPostProcessor.js +20 -8
- package/dist/src/transformers/TypeTransformationPostProcessor.js.map +1 -1
- package/dist/src/utils/OperatorPrecedence.js +23 -1
- package/dist/src/utils/OperatorPrecedence.js.map +1 -1
- package/dist/src/utils/charLookupTable.js +4 -4
- package/dist/src/utils/charLookupTable.js.map +1 -1
- package/dist/src/utils/stringUtils.js +17 -1
- package/dist/src/utils/stringUtils.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DataSourceHandler = void 0;
|
|
4
|
+
const Clause_1 = require("../../models/Clause");
|
|
5
|
+
/**
|
|
6
|
+
* Handles the processing of data sources (tables, CTEs, subqueries)
|
|
7
|
+
*/
|
|
8
|
+
class DataSourceHandler {
|
|
9
|
+
constructor(graph) {
|
|
10
|
+
this.graph = graph;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Processes a source expression and returns the node ID
|
|
14
|
+
*/
|
|
15
|
+
processSource(sourceExpr, cteNames, queryProcessor) {
|
|
16
|
+
if (sourceExpr.datasource instanceof Clause_1.TableSource) {
|
|
17
|
+
return this.processTableSource(sourceExpr.datasource, cteNames);
|
|
18
|
+
}
|
|
19
|
+
else if (sourceExpr.datasource instanceof Clause_1.SubQuerySource) {
|
|
20
|
+
return this.processSubquerySource(sourceExpr, cteNames, queryProcessor);
|
|
21
|
+
}
|
|
22
|
+
throw new Error('Unsupported source type');
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Processes a table source (including CTE references)
|
|
26
|
+
*/
|
|
27
|
+
processTableSource(tableSource, cteNames) {
|
|
28
|
+
const tableName = tableSource.getSourceName();
|
|
29
|
+
if (cteNames.has(tableName)) {
|
|
30
|
+
// Reference to existing CTE
|
|
31
|
+
const cteNode = this.graph.getOrCreateCTE(tableName);
|
|
32
|
+
return cteNode.id;
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
// Regular table
|
|
36
|
+
const tableNode = this.graph.getOrCreateTable(tableName);
|
|
37
|
+
return tableNode.id;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Processes a subquery source
|
|
42
|
+
*/
|
|
43
|
+
processSubquerySource(sourceExpr, cteNames, queryProcessor) {
|
|
44
|
+
var _a;
|
|
45
|
+
const alias = ((_a = sourceExpr.aliasExpression) === null || _a === void 0 ? void 0 : _a.table.name) || 'subquery';
|
|
46
|
+
// Create virtual data source node for named subquery
|
|
47
|
+
const subqueryNode = this.graph.getOrCreateSubquery(alias);
|
|
48
|
+
// Process subquery content and connect its result to the subquery virtual data source
|
|
49
|
+
const subqueryResultId = queryProcessor(sourceExpr.datasource.query, `subquery_${alias}_internal`, cteNames);
|
|
50
|
+
// Connect subquery result to subquery virtual data source
|
|
51
|
+
if (subqueryResultId && !this.graph.hasConnection(subqueryResultId, subqueryNode.id)) {
|
|
52
|
+
this.graph.addConnection(subqueryResultId, subqueryNode.id);
|
|
53
|
+
}
|
|
54
|
+
return subqueryNode.id;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Extracts table node IDs from a FROM clause for WHERE subqueries
|
|
58
|
+
*/
|
|
59
|
+
extractTableNodeIds(fromClause, cteNames) {
|
|
60
|
+
const tableNodeIds = [];
|
|
61
|
+
const sourceExpr = fromClause.source;
|
|
62
|
+
// Process main source
|
|
63
|
+
if (sourceExpr.datasource instanceof Clause_1.TableSource) {
|
|
64
|
+
const tableName = sourceExpr.datasource.getSourceName();
|
|
65
|
+
if (cteNames.has(tableName)) {
|
|
66
|
+
const cteNode = this.graph.getOrCreateCTE(tableName);
|
|
67
|
+
tableNodeIds.push(cteNode.id);
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
const tableNode = this.graph.getOrCreateTable(tableName);
|
|
71
|
+
tableNodeIds.push(tableNode.id);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// Process JOINs
|
|
75
|
+
if (fromClause.joins && fromClause.joins.length > 0) {
|
|
76
|
+
for (const join of fromClause.joins) {
|
|
77
|
+
const joinSourceExpr = join.source;
|
|
78
|
+
if (joinSourceExpr.datasource instanceof Clause_1.TableSource) {
|
|
79
|
+
const tableName = joinSourceExpr.datasource.getSourceName();
|
|
80
|
+
if (cteNames.has(tableName)) {
|
|
81
|
+
const cteNode = this.graph.getOrCreateCTE(tableName);
|
|
82
|
+
tableNodeIds.push(cteNode.id);
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
const tableNode = this.graph.getOrCreateTable(tableName);
|
|
86
|
+
tableNodeIds.push(tableNode.id);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return tableNodeIds;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
exports.DataSourceHandler = DataSourceHandler;
|
|
95
|
+
//# sourceMappingURL=DataSourceHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DataSourceHandler.js","sourceRoot":"","sources":["../../../../src/reporting/services/DataSourceHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { FromClause } from '../../models/Clause';
|
|
2
|
+
import { DataFlowGraph } from '../models/DataFlowGraph';
|
|
3
|
+
import { DataSourceHandler } from './DataSourceHandler';
|
|
4
|
+
/**
|
|
5
|
+
* Handles the processing of JOIN operations
|
|
6
|
+
*/
|
|
7
|
+
export declare class JoinHandler {
|
|
8
|
+
private graph;
|
|
9
|
+
private dataSourceHandler;
|
|
10
|
+
private joinIdCounter;
|
|
11
|
+
constructor(graph: DataFlowGraph, dataSourceHandler: DataSourceHandler);
|
|
12
|
+
/**
|
|
13
|
+
* Resets the join ID counter for deterministic IDs
|
|
14
|
+
*/
|
|
15
|
+
resetJoinCounter(): void;
|
|
16
|
+
/**
|
|
17
|
+
* Gets the next join ID
|
|
18
|
+
*/
|
|
19
|
+
private getNextJoinId;
|
|
20
|
+
/**
|
|
21
|
+
* Processes a FROM clause with JOINs and returns the final node ID
|
|
22
|
+
*/
|
|
23
|
+
processFromClause(fromClause: FromClause, cteNames: Set<string>, queryProcessor: (query: any, context: string, cteNames: Set<string>) => string): string;
|
|
24
|
+
/**
|
|
25
|
+
* Processes a series of JOINs sequentially
|
|
26
|
+
*/
|
|
27
|
+
private processJoins;
|
|
28
|
+
/**
|
|
29
|
+
* Gets nullability labels for JOIN edges based on JOIN type
|
|
30
|
+
*/
|
|
31
|
+
private getJoinNullabilityLabels;
|
|
32
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.JoinHandler = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Handles the processing of JOIN operations
|
|
6
|
+
*/
|
|
7
|
+
class JoinHandler {
|
|
8
|
+
constructor(graph, dataSourceHandler) {
|
|
9
|
+
this.graph = graph;
|
|
10
|
+
this.dataSourceHandler = dataSourceHandler;
|
|
11
|
+
this.joinIdCounter = 0;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Resets the join ID counter for deterministic IDs
|
|
15
|
+
*/
|
|
16
|
+
resetJoinCounter() {
|
|
17
|
+
this.joinIdCounter = 0;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Gets the next join ID
|
|
21
|
+
*/
|
|
22
|
+
getNextJoinId() {
|
|
23
|
+
return String(++this.joinIdCounter);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Processes a FROM clause with JOINs and returns the final node ID
|
|
27
|
+
*/
|
|
28
|
+
processFromClause(fromClause, cteNames, queryProcessor) {
|
|
29
|
+
// Process main source
|
|
30
|
+
const mainSourceId = this.dataSourceHandler.processSource(fromClause.source, cteNames, queryProcessor);
|
|
31
|
+
// Process JOINs if they exist
|
|
32
|
+
if (fromClause.joins && fromClause.joins.length > 0) {
|
|
33
|
+
return this.processJoins(fromClause.joins, mainSourceId, cteNames, queryProcessor);
|
|
34
|
+
}
|
|
35
|
+
return mainSourceId;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Processes a series of JOINs sequentially
|
|
39
|
+
*/
|
|
40
|
+
processJoins(joins, currentNodeId, cteNames, queryProcessor) {
|
|
41
|
+
let resultNodeId = currentNodeId;
|
|
42
|
+
for (const join of joins) {
|
|
43
|
+
const joinNodeId = this.dataSourceHandler.processSource(join.source, cteNames, queryProcessor);
|
|
44
|
+
// Create join operation node
|
|
45
|
+
const joinOpId = this.getNextJoinId();
|
|
46
|
+
const joinNode = this.graph.createJoinNode(joinOpId, join.joinType.value);
|
|
47
|
+
// Get nullability labels for the JOIN
|
|
48
|
+
const { leftLabel, rightLabel } = this.getJoinNullabilityLabels(join.joinType.value);
|
|
49
|
+
// Connect current source and join source to join operation with nullability labels
|
|
50
|
+
if (resultNodeId && !this.graph.hasConnection(resultNodeId, joinNode.id)) {
|
|
51
|
+
this.graph.addConnection(resultNodeId, joinNode.id, leftLabel);
|
|
52
|
+
}
|
|
53
|
+
if (joinNodeId && !this.graph.hasConnection(joinNodeId, joinNode.id)) {
|
|
54
|
+
this.graph.addConnection(joinNodeId, joinNode.id, rightLabel);
|
|
55
|
+
}
|
|
56
|
+
resultNodeId = joinNode.id;
|
|
57
|
+
}
|
|
58
|
+
return resultNodeId;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Gets nullability labels for JOIN edges based on JOIN type
|
|
62
|
+
*/
|
|
63
|
+
getJoinNullabilityLabels(joinType) {
|
|
64
|
+
switch (joinType.toLowerCase()) {
|
|
65
|
+
case 'left join':
|
|
66
|
+
return { leftLabel: 'NOT NULL', rightLabel: 'NULLABLE' };
|
|
67
|
+
case 'right join':
|
|
68
|
+
return { leftLabel: 'NULLABLE', rightLabel: 'NOT NULL' };
|
|
69
|
+
case 'inner join':
|
|
70
|
+
case 'join':
|
|
71
|
+
return { leftLabel: 'NOT NULL', rightLabel: 'NOT NULL' };
|
|
72
|
+
case 'full join':
|
|
73
|
+
case 'full outer join':
|
|
74
|
+
return { leftLabel: 'NULLABLE', rightLabel: 'NULLABLE' };
|
|
75
|
+
case 'cross join':
|
|
76
|
+
return { leftLabel: 'NOT NULL', rightLabel: 'NOT NULL' };
|
|
77
|
+
default:
|
|
78
|
+
// Default to no nullability info for unknown join types
|
|
79
|
+
return { leftLabel: '', rightLabel: '' };
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
exports.JoinHandler = JoinHandler;
|
|
84
|
+
//# sourceMappingURL=JoinHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JoinHandler.js","sourceRoot":"","sources":["../../../../src/reporting/services/JoinHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { SimpleSelectQuery } from '../../models/SimpleSelectQuery';
|
|
2
|
+
import { DataFlowGraph } from '../models/DataFlowGraph';
|
|
3
|
+
import { DataSourceHandler } from './DataSourceHandler';
|
|
4
|
+
/**
|
|
5
|
+
* Handles the processing of SQL clauses (WHERE, GROUP BY, HAVING, etc.)
|
|
6
|
+
*/
|
|
7
|
+
export declare class ProcessHandler {
|
|
8
|
+
private graph;
|
|
9
|
+
private dataSourceHandler;
|
|
10
|
+
constructor(graph: DataFlowGraph, dataSourceHandler: DataSourceHandler);
|
|
11
|
+
/**
|
|
12
|
+
* Processes SQL clauses in the correct execution order
|
|
13
|
+
*/
|
|
14
|
+
processQueryClauses(query: SimpleSelectQuery, context: string, currentNodeId: string, cteNames: Set<string>, queryProcessor: (query: any, context: string, cteNames: Set<string>) => string): string;
|
|
15
|
+
/**
|
|
16
|
+
* Processes WHERE clause including subqueries
|
|
17
|
+
*/
|
|
18
|
+
private processWhereClause;
|
|
19
|
+
/**
|
|
20
|
+
* Processes GROUP BY clause
|
|
21
|
+
*/
|
|
22
|
+
private processGroupByClause;
|
|
23
|
+
/**
|
|
24
|
+
* Processes HAVING clause
|
|
25
|
+
*/
|
|
26
|
+
private processHavingClause;
|
|
27
|
+
/**
|
|
28
|
+
* Processes SELECT clause
|
|
29
|
+
*/
|
|
30
|
+
private processSelectClause;
|
|
31
|
+
/**
|
|
32
|
+
* Processes ORDER BY clause
|
|
33
|
+
*/
|
|
34
|
+
private processOrderByClause;
|
|
35
|
+
/**
|
|
36
|
+
* Processes LIMIT/OFFSET clause
|
|
37
|
+
*/
|
|
38
|
+
private processLimitClause;
|
|
39
|
+
/**
|
|
40
|
+
* Determines if a SELECT node should be added
|
|
41
|
+
*/
|
|
42
|
+
private shouldAddSelectNode;
|
|
43
|
+
/**
|
|
44
|
+
* Processes WHERE clause to find subqueries (EXISTS, IN, etc.)
|
|
45
|
+
*/
|
|
46
|
+
private processWhereSubqueries;
|
|
47
|
+
/**
|
|
48
|
+
* Recursively processes ValueComponent to find InlineQuery (subqueries)
|
|
49
|
+
*/
|
|
50
|
+
private processValueComponent;
|
|
51
|
+
/**
|
|
52
|
+
* Processes only the tables from a query for EXISTS/NOT EXISTS conditions
|
|
53
|
+
*/
|
|
54
|
+
private processQueryTablesOnly;
|
|
55
|
+
}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ProcessHandler = void 0;
|
|
4
|
+
const ValueComponent_1 = require("../../models/ValueComponent");
|
|
5
|
+
/**
|
|
6
|
+
* Handles the processing of SQL clauses (WHERE, GROUP BY, HAVING, etc.)
|
|
7
|
+
*/
|
|
8
|
+
class ProcessHandler {
|
|
9
|
+
constructor(graph, dataSourceHandler) {
|
|
10
|
+
this.graph = graph;
|
|
11
|
+
this.dataSourceHandler = dataSourceHandler;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Processes SQL clauses in the correct execution order
|
|
15
|
+
*/
|
|
16
|
+
processQueryClauses(query, context, currentNodeId, cteNames, queryProcessor) {
|
|
17
|
+
let resultNodeId = currentNodeId;
|
|
18
|
+
// 2. Process WHERE clause
|
|
19
|
+
if (query.whereClause && resultNodeId) {
|
|
20
|
+
resultNodeId = this.processWhereClause(query.whereClause, context, resultNodeId, cteNames, queryProcessor);
|
|
21
|
+
}
|
|
22
|
+
// 3. Process GROUP BY clause
|
|
23
|
+
if (query.groupByClause && resultNodeId) {
|
|
24
|
+
resultNodeId = this.processGroupByClause(context, resultNodeId);
|
|
25
|
+
}
|
|
26
|
+
// 4. Process HAVING clause
|
|
27
|
+
if (query.havingClause && resultNodeId) {
|
|
28
|
+
resultNodeId = this.processHavingClause(context, resultNodeId);
|
|
29
|
+
}
|
|
30
|
+
// 5. Process SELECT clause - only add if needed
|
|
31
|
+
if (this.shouldAddSelectNode(query, context)) {
|
|
32
|
+
resultNodeId = this.processSelectClause(context, resultNodeId);
|
|
33
|
+
}
|
|
34
|
+
// 6. Process ORDER BY clause
|
|
35
|
+
if (query.orderByClause && resultNodeId) {
|
|
36
|
+
resultNodeId = this.processOrderByClause(context, resultNodeId);
|
|
37
|
+
}
|
|
38
|
+
// 7. Process LIMIT/OFFSET clause
|
|
39
|
+
if ((query.limitClause || query.offsetClause) && resultNodeId) {
|
|
40
|
+
resultNodeId = this.processLimitClause(context, resultNodeId, !!query.offsetClause);
|
|
41
|
+
}
|
|
42
|
+
return resultNodeId;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Processes WHERE clause including subqueries
|
|
46
|
+
*/
|
|
47
|
+
processWhereClause(whereClause, context, currentNodeId, cteNames, queryProcessor) {
|
|
48
|
+
const whereNode = this.graph.createProcessNode('where', context);
|
|
49
|
+
// Connect FROM result to WHERE
|
|
50
|
+
this.graph.addConnection(currentNodeId, whereNode.id);
|
|
51
|
+
// Process WHERE subqueries
|
|
52
|
+
const whereSubqueryInfo = this.processWhereSubqueries(whereClause, context, cteNames, queryProcessor);
|
|
53
|
+
// Connect WHERE subqueries to WHERE node
|
|
54
|
+
for (const subqueryInfo of whereSubqueryInfo) {
|
|
55
|
+
this.graph.addConnection(subqueryInfo.nodeId, whereNode.id, subqueryInfo.operator);
|
|
56
|
+
}
|
|
57
|
+
return whereNode.id;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Processes GROUP BY clause
|
|
61
|
+
*/
|
|
62
|
+
processGroupByClause(context, currentNodeId) {
|
|
63
|
+
const groupByNode = this.graph.createProcessNode('group by', context);
|
|
64
|
+
this.graph.addConnection(currentNodeId, groupByNode.id);
|
|
65
|
+
return groupByNode.id;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Processes HAVING clause
|
|
69
|
+
*/
|
|
70
|
+
processHavingClause(context, currentNodeId) {
|
|
71
|
+
const havingNode = this.graph.createProcessNode('having', context);
|
|
72
|
+
this.graph.addConnection(currentNodeId, havingNode.id);
|
|
73
|
+
return havingNode.id;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Processes SELECT clause
|
|
77
|
+
*/
|
|
78
|
+
processSelectClause(context, currentNodeId) {
|
|
79
|
+
const selectNode = this.graph.createProcessNode('select', context);
|
|
80
|
+
this.graph.addConnection(currentNodeId, selectNode.id);
|
|
81
|
+
return selectNode.id;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Processes ORDER BY clause
|
|
85
|
+
*/
|
|
86
|
+
processOrderByClause(context, currentNodeId) {
|
|
87
|
+
const orderByNode = this.graph.createProcessNode('order by', context);
|
|
88
|
+
this.graph.addConnection(currentNodeId, orderByNode.id);
|
|
89
|
+
return orderByNode.id;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Processes LIMIT/OFFSET clause
|
|
93
|
+
*/
|
|
94
|
+
processLimitClause(context, currentNodeId, hasOffset) {
|
|
95
|
+
const limitNode = this.graph.createProcessNode(hasOffset ? 'limit/offset' : 'limit', context);
|
|
96
|
+
this.graph.addConnection(currentNodeId, limitNode.id);
|
|
97
|
+
return limitNode.id;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Determines if a SELECT node should be added
|
|
101
|
+
*/
|
|
102
|
+
shouldAddSelectNode(query, context) {
|
|
103
|
+
// Always add SELECT node - UNION combines SELECT results, not raw data sources
|
|
104
|
+
return true;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Processes WHERE clause to find subqueries (EXISTS, IN, etc.)
|
|
108
|
+
*/
|
|
109
|
+
processWhereSubqueries(whereClause, context, cteNames, queryProcessor) {
|
|
110
|
+
const subqueryInfo = [];
|
|
111
|
+
this.processValueComponent(whereClause.condition, context, cteNames, queryProcessor, subqueryInfo);
|
|
112
|
+
return subqueryInfo;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Recursively processes ValueComponent to find InlineQuery (subqueries)
|
|
116
|
+
*/
|
|
117
|
+
processValueComponent(value, context, cteNames, queryProcessor, subqueryInfo) {
|
|
118
|
+
if (value instanceof ValueComponent_1.InlineQuery) {
|
|
119
|
+
const subqueryNodeId = queryProcessor(value.selectQuery, `${context}_where_subquery`, cteNames);
|
|
120
|
+
subqueryInfo.push({ nodeId: subqueryNodeId, operator: 'SUBQUERY' });
|
|
121
|
+
}
|
|
122
|
+
else if (value instanceof ValueComponent_1.FunctionCall) {
|
|
123
|
+
const functionName = value.qualifiedName.name.toString().toLowerCase();
|
|
124
|
+
if (functionName === 'exists' && value.argument instanceof ValueComponent_1.InlineQuery) {
|
|
125
|
+
const subqueryNodeId = queryProcessor(value.argument.selectQuery, `${context}_where_subquery`, cteNames);
|
|
126
|
+
subqueryInfo.push({ nodeId: subqueryNodeId, operator: 'EXISTS' });
|
|
127
|
+
}
|
|
128
|
+
else if (value.argument) {
|
|
129
|
+
this.processValueComponent(value.argument, context, cteNames, queryProcessor, subqueryInfo);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
else if (value instanceof ValueComponent_1.UnaryExpression) {
|
|
133
|
+
const operator = value.operator.value.toLowerCase();
|
|
134
|
+
if ((operator === 'exists' || operator === 'not exists') && value.expression instanceof ValueComponent_1.InlineQuery) {
|
|
135
|
+
this.processQueryTablesOnly(value.expression.selectQuery, context, cteNames, subqueryInfo, operator.toUpperCase());
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
this.processValueComponent(value.expression, context, cteNames, queryProcessor, subqueryInfo);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
else if (value instanceof ValueComponent_1.BinaryExpression) {
|
|
142
|
+
const operator = value.operator.value.toLowerCase();
|
|
143
|
+
if ((operator === 'in' || operator === 'not in') && value.right instanceof ValueComponent_1.InlineQuery) {
|
|
144
|
+
this.processQueryTablesOnly(value.right.selectQuery, context, cteNames, subqueryInfo, operator.toUpperCase());
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
this.processValueComponent(value.left, context, cteNames, queryProcessor, subqueryInfo);
|
|
148
|
+
this.processValueComponent(value.right, context, cteNames, queryProcessor, subqueryInfo);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
else if (value && typeof value === 'object') {
|
|
152
|
+
for (const [key, val] of Object.entries(value)) {
|
|
153
|
+
if (val && typeof val === 'object') {
|
|
154
|
+
if (Array.isArray(val)) {
|
|
155
|
+
val.forEach(item => {
|
|
156
|
+
if (item && typeof item === 'object' && 'selectQuery' in item) {
|
|
157
|
+
this.processValueComponent(item, context, cteNames, queryProcessor, subqueryInfo);
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
else if ('selectQuery' in val) {
|
|
162
|
+
this.processValueComponent(val, context, cteNames, queryProcessor, subqueryInfo);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Processes only the tables from a query for EXISTS/NOT EXISTS conditions
|
|
170
|
+
*/
|
|
171
|
+
processQueryTablesOnly(query, context, cteNames, subqueryInfo, operator) {
|
|
172
|
+
if (query.fromClause) {
|
|
173
|
+
const tableNodes = this.dataSourceHandler.extractTableNodeIds(query.fromClause, cteNames);
|
|
174
|
+
for (const tableNodeId of tableNodes) {
|
|
175
|
+
subqueryInfo.push({ nodeId: tableNodeId, operator });
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
exports.ProcessHandler = ProcessHandler;
|
|
181
|
+
//# sourceMappingURL=ProcessHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProcessHandler.js","sourceRoot":"","sources":["../../../../src/reporting/services/ProcessHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,11 @@ export declare class EscapedIdentifierTokenReader extends BaseTokenReader {
|
|
|
8
8
|
* Try to read an identifier token
|
|
9
9
|
*/
|
|
10
10
|
tryRead(previous: Lexeme | null): Lexeme | null;
|
|
11
|
+
/**
|
|
12
|
+
* Check if the bracket at current position represents a SQL Server bracket identifier
|
|
13
|
+
* vs array access notation
|
|
14
|
+
*/
|
|
15
|
+
private isSqlServerBracketIdentifier;
|
|
11
16
|
/**
|
|
12
17
|
* Read an escaped identifier (surrounded by delimiters)
|
|
13
18
|
*/
|
|
@@ -26,12 +26,48 @@ class EscapedIdentifierTokenReader extends BaseTokenReader_1.BaseTokenReader {
|
|
|
26
26
|
return this.createLexeme(Lexeme_1.TokenType.Identifier, identifier);
|
|
27
27
|
}
|
|
28
28
|
// SQLServer escaped identifier (escape character is square bracket)
|
|
29
|
-
if (char === '[' && (previous
|
|
29
|
+
if (char === '[' && this.isSqlServerBracketIdentifier(previous)) {
|
|
30
30
|
const identifier = this.readEscapedIdentifier(']');
|
|
31
31
|
return this.createLexeme(Lexeme_1.TokenType.Identifier, identifier);
|
|
32
32
|
}
|
|
33
33
|
return null;
|
|
34
34
|
}
|
|
35
|
+
/**
|
|
36
|
+
* Check if the bracket at current position represents a SQL Server bracket identifier
|
|
37
|
+
* vs array access notation
|
|
38
|
+
*/
|
|
39
|
+
isSqlServerBracketIdentifier(previous) {
|
|
40
|
+
// Don't treat as SQL Server bracket identifier if previous token suggests array access
|
|
41
|
+
if ((previous === null || previous === void 0 ? void 0 : previous.value) === "array") {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
// Look ahead to see what's inside the brackets
|
|
45
|
+
const start = this.position + 1; // after opening bracket
|
|
46
|
+
let pos = start;
|
|
47
|
+
// Scan until closing bracket or end of input
|
|
48
|
+
while (pos < this.input.length && this.input[pos] !== ']') {
|
|
49
|
+
const char = this.input[pos];
|
|
50
|
+
// If we find colons, operators, or expressions, it's likely array access
|
|
51
|
+
if (char === ':' || char === ',' || char === '+' || char === '-' ||
|
|
52
|
+
char === '*' || char === '/' || char === '(' || char === ')') {
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
pos++;
|
|
56
|
+
}
|
|
57
|
+
// If we didn't find a closing bracket, it's malformed anyway
|
|
58
|
+
if (pos >= this.input.length) {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
// Check the content between brackets
|
|
62
|
+
const content = this.input.slice(start, pos).trim();
|
|
63
|
+
// Empty brackets are never SQL Server identifiers - they should be array access
|
|
64
|
+
if (content === '') {
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
// SQL Server bracket identifiers typically contain simple identifiers with dots
|
|
68
|
+
// Array access contains numbers, expressions, colons
|
|
69
|
+
return /^[a-zA-Z_][a-zA-Z0-9_]*(\.[a-zA-Z_][a-zA-Z0-9_]*)*$/.test(content);
|
|
70
|
+
}
|
|
35
71
|
/**
|
|
36
72
|
* Read an escaped identifier (surrounded by delimiters)
|
|
37
73
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EscapedIdentifierTokenReader.js","sourceRoot":"","sources":["../../../src/tokenReaders/EscapedIdentifierTokenReader.ts"],"names":[],"mappings":";;;AAAA,uDAAoD;AACpD,6CAAqD;AAGrD;;GAEG;AACH,MAAa,4BAA6B,SAAQ,iCAAe;IAC7D;;OAEG;IACI,OAAO,CAAC,QAAuB;QAClC,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEvC,0DAA0D;QAC1D,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACf,MAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;YACnD,OAAO,IAAI,CAAC,YAAY,CAAC,kBAAS,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAC/D,CAAC;QAED,iEAAiE;QACjE,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACf,MAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;YACnD,OAAO,IAAI,CAAC,YAAY,CAAC,kBAAS,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAC/D,CAAC;QAED,oEAAoE;QACpE,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,
|
|
1
|
+
{"version":3,"file":"EscapedIdentifierTokenReader.js","sourceRoot":"","sources":["../../../src/tokenReaders/EscapedIdentifierTokenReader.ts"],"names":[],"mappings":";;;AAAA,uDAAoD;AACpD,6CAAqD;AAGrD;;GAEG;AACH,MAAa,4BAA6B,SAAQ,iCAAe;IAC7D;;OAEG;IACI,OAAO,CAAC,QAAuB;QAClC,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEvC,0DAA0D;QAC1D,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACf,MAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;YACnD,OAAO,IAAI,CAAC,YAAY,CAAC,kBAAS,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAC/D,CAAC;QAED,iEAAiE;QACjE,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACf,MAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;YACnD,OAAO,IAAI,CAAC,YAAY,CAAC,kBAAS,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAC/D,CAAC;QAED,oEAAoE;QACpE,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,CAAC,4BAA4B,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9D,MAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;YACnD,OAAO,IAAI,CAAC,YAAY,CAAC,kBAAS,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAC/D,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;OAGG;IACK,4BAA4B,CAAC,QAAuB;QACxD,uFAAuF;QACvF,IAAI,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,KAAK,MAAK,OAAO,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,+CAA+C;QAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,wBAAwB;QACzD,IAAI,GAAG,GAAG,KAAK,CAAC;QAEhB,6CAA6C;QAC7C,OAAO,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC;YACxD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAE7B,yEAAyE;YACzE,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG;gBAC5D,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;gBAC/D,OAAO,KAAK,CAAC;YACjB,CAAC;YAED,GAAG,EAAE,CAAC;QACV,CAAC;QAED,6DAA6D;QAC7D,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAC3B,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,qCAAqC;QACrC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QAEpD,gFAAgF;QAChF,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;YACjB,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,gFAAgF;QAChF,qDAAqD;QACrD,OAAO,qDAAqD,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/E,CAAC;IAED;;OAEG;IACK,qBAAqB,CAAC,SAAiB;QAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC;QAE5B,6BAA6B;QAC7B,IAAI,CAAC,QAAQ,EAAE,CAAC;QAEhB,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YACpB,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,SAAS,EAAE,CAAC;gBAC1C,MAAM;YACV,CAAC;YACD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpB,CAAC;QAED,IAAI,KAAK,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,6CAA6C,KAAK,gBAAgB,SAAS,KAAK,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACxI,CAAC;QAED,6BAA6B;QAC7B,IAAI,CAAC,QAAQ,EAAE,CAAC;QAEhB,wBAAwB;QACxB,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;IAC1D,CAAC;CACJ;AAvGD,oEAuGC"}
|
|
@@ -28,8 +28,24 @@ export declare class LiteralTokenReader extends BaseTokenReader {
|
|
|
28
28
|
* Read a numeric value
|
|
29
29
|
*/
|
|
30
30
|
private readDigit;
|
|
31
|
+
/**
|
|
32
|
+
* Read a MONEY value (allows commas as thousand separators)
|
|
33
|
+
*/
|
|
34
|
+
private readMoneyDigit;
|
|
31
35
|
/**
|
|
32
36
|
* Read a string literal
|
|
33
37
|
*/
|
|
34
38
|
private readSingleQuotedString;
|
|
39
|
+
/**
|
|
40
|
+
* Check if the current position starts a PostgreSQL dollar-quoted string
|
|
41
|
+
*/
|
|
42
|
+
private isDollarQuotedString;
|
|
43
|
+
/**
|
|
44
|
+
* Read a PostgreSQL dollar-quoted string
|
|
45
|
+
*/
|
|
46
|
+
private readDollarQuotedString;
|
|
47
|
+
/**
|
|
48
|
+
* Check if character is alphanumeric (letter or digit)
|
|
49
|
+
*/
|
|
50
|
+
private isAlphanumeric;
|
|
35
51
|
}
|