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.
Files changed (158) hide show
  1. package/README.md +82 -1
  2. package/dist/esm/index.js +1 -0
  3. package/dist/esm/index.js.map +1 -1
  4. package/dist/esm/index.min.js +23 -15
  5. package/dist/esm/index.min.js.map +4 -4
  6. package/dist/esm/src/index.d.ts +1 -0
  7. package/dist/esm/src/index.js +1 -0
  8. package/dist/esm/src/index.js.map +1 -1
  9. package/dist/esm/src/models/BinarySelectQuery.d.ts +2 -2
  10. package/dist/esm/src/models/BinarySelectQuery.js.map +1 -1
  11. package/dist/esm/src/models/SelectQuery.d.ts +2 -1
  12. package/dist/esm/src/models/SelectQuery.js.map +1 -1
  13. package/dist/esm/src/models/SimpleSelectQuery.d.ts +2 -2
  14. package/dist/esm/src/models/SimpleSelectQuery.js.map +1 -1
  15. package/dist/esm/src/models/ValueComponent.d.ts +19 -4
  16. package/dist/esm/src/models/ValueComponent.js +19 -1
  17. package/dist/esm/src/models/ValueComponent.js.map +1 -1
  18. package/dist/esm/src/models/ValuesQuery.d.ts +2 -1
  19. package/dist/esm/src/models/ValuesQuery.js.map +1 -1
  20. package/dist/esm/src/parsers/CommonTableParser.js +16 -0
  21. package/dist/esm/src/parsers/CommonTableParser.js.map +1 -1
  22. package/dist/esm/src/parsers/LiteralParser.js +15 -5
  23. package/dist/esm/src/parsers/LiteralParser.js.map +1 -1
  24. package/dist/esm/src/parsers/SqlPrintTokenParser.d.ts +2 -0
  25. package/dist/esm/src/parsers/SqlPrintTokenParser.js +42 -2
  26. package/dist/esm/src/parsers/SqlPrintTokenParser.js.map +1 -1
  27. package/dist/esm/src/parsers/ValueParser.d.ts +13 -0
  28. package/dist/esm/src/parsers/ValueParser.js +134 -1
  29. package/dist/esm/src/parsers/ValueParser.js.map +1 -1
  30. package/dist/esm/src/parsers/WithClauseParser.js +8 -2
  31. package/dist/esm/src/parsers/WithClauseParser.js.map +1 -1
  32. package/dist/esm/src/reporting/models/DataFlowEdge.d.ts +33 -0
  33. package/dist/esm/src/reporting/models/DataFlowEdge.js +53 -0
  34. package/dist/esm/src/reporting/models/DataFlowEdge.js.map +1 -0
  35. package/dist/esm/src/reporting/models/DataFlowGraph.d.ts +49 -0
  36. package/dist/esm/src/reporting/models/DataFlowGraph.js +156 -0
  37. package/dist/esm/src/reporting/models/DataFlowGraph.js.map +1 -0
  38. package/dist/esm/src/reporting/models/DataFlowNode.d.ts +67 -0
  39. package/dist/esm/src/reporting/models/DataFlowNode.js +116 -0
  40. package/dist/esm/src/reporting/models/DataFlowNode.js.map +1 -0
  41. package/dist/esm/src/reporting/services/CTEHandler.d.ts +17 -0
  42. package/dist/esm/src/reporting/services/CTEHandler.js +54 -0
  43. package/dist/esm/src/reporting/services/CTEHandler.js.map +1 -0
  44. package/dist/esm/src/reporting/services/DataSourceHandler.d.ts +25 -0
  45. package/dist/esm/src/reporting/services/DataSourceHandler.js +91 -0
  46. package/dist/esm/src/reporting/services/DataSourceHandler.js.map +1 -0
  47. package/dist/esm/src/reporting/services/JoinHandler.d.ts +32 -0
  48. package/dist/esm/src/reporting/services/JoinHandler.js +80 -0
  49. package/dist/esm/src/reporting/services/JoinHandler.js.map +1 -0
  50. package/dist/esm/src/reporting/services/ProcessHandler.d.ts +55 -0
  51. package/dist/esm/src/reporting/services/ProcessHandler.js +177 -0
  52. package/dist/esm/src/reporting/services/ProcessHandler.js.map +1 -0
  53. package/dist/esm/src/tokenReaders/EscapedIdentifierTokenReader.d.ts +5 -0
  54. package/dist/esm/src/tokenReaders/EscapedIdentifierTokenReader.js +37 -1
  55. package/dist/esm/src/tokenReaders/EscapedIdentifierTokenReader.js.map +1 -1
  56. package/dist/esm/src/tokenReaders/LiteralTokenReader.d.ts +16 -0
  57. package/dist/esm/src/tokenReaders/LiteralTokenReader.js +119 -0
  58. package/dist/esm/src/tokenReaders/LiteralTokenReader.js.map +1 -1
  59. package/dist/esm/src/tokenReaders/OperatorTokenReader.js +4 -0
  60. package/dist/esm/src/tokenReaders/OperatorTokenReader.js.map +1 -1
  61. package/dist/esm/src/tokenReaders/ParameterTokenReader.d.ts +14 -0
  62. package/dist/esm/src/tokenReaders/ParameterTokenReader.js +126 -0
  63. package/dist/esm/src/tokenReaders/ParameterTokenReader.js.map +1 -1
  64. package/dist/esm/src/transformers/DynamicQueryBuilder.d.ts +28 -2
  65. package/dist/esm/src/transformers/DynamicQueryBuilder.js.map +1 -1
  66. package/dist/esm/src/transformers/QueryFlowDiagramGenerator.d.ts +37 -0
  67. package/dist/esm/src/transformers/QueryFlowDiagramGenerator.js +143 -0
  68. package/dist/esm/src/transformers/QueryFlowDiagramGenerator.js.map +1 -0
  69. package/dist/esm/src/transformers/SqlParamInjector.d.ts +11 -0
  70. package/dist/esm/src/transformers/SqlParamInjector.js.map +1 -1
  71. package/dist/esm/src/transformers/TypeTransformationPostProcessor.d.ts +5 -5
  72. package/dist/esm/src/transformers/TypeTransformationPostProcessor.js +20 -8
  73. package/dist/esm/src/transformers/TypeTransformationPostProcessor.js.map +1 -1
  74. package/dist/esm/src/utils/OperatorPrecedence.js +23 -1
  75. package/dist/esm/src/utils/OperatorPrecedence.js.map +1 -1
  76. package/dist/esm/src/utils/charLookupTable.js +4 -4
  77. package/dist/esm/src/utils/charLookupTable.js.map +1 -1
  78. package/dist/esm/src/utils/stringUtils.js +17 -1
  79. package/dist/esm/src/utils/stringUtils.js.map +1 -1
  80. package/dist/esm/tsconfig.browser.tsbuildinfo +1 -1
  81. package/dist/index.min.js +23 -15
  82. package/dist/index.min.js.map +4 -4
  83. package/dist/src/index.d.ts +1 -0
  84. package/dist/src/index.js +1 -0
  85. package/dist/src/index.js.map +1 -1
  86. package/dist/src/models/BinarySelectQuery.d.ts +2 -2
  87. package/dist/src/models/BinarySelectQuery.js.map +1 -1
  88. package/dist/src/models/SelectQuery.d.ts +2 -1
  89. package/dist/src/models/SelectQuery.js.map +1 -1
  90. package/dist/src/models/SimpleSelectQuery.d.ts +2 -2
  91. package/dist/src/models/SimpleSelectQuery.js.map +1 -1
  92. package/dist/src/models/ValueComponent.d.ts +19 -4
  93. package/dist/src/models/ValueComponent.js +22 -2
  94. package/dist/src/models/ValueComponent.js.map +1 -1
  95. package/dist/src/models/ValuesQuery.d.ts +2 -1
  96. package/dist/src/models/ValuesQuery.js.map +1 -1
  97. package/dist/src/parsers/CommonTableParser.js +16 -0
  98. package/dist/src/parsers/CommonTableParser.js.map +1 -1
  99. package/dist/src/parsers/LiteralParser.js +15 -5
  100. package/dist/src/parsers/LiteralParser.js.map +1 -1
  101. package/dist/src/parsers/SqlPrintTokenParser.d.ts +2 -0
  102. package/dist/src/parsers/SqlPrintTokenParser.js +41 -1
  103. package/dist/src/parsers/SqlPrintTokenParser.js.map +1 -1
  104. package/dist/src/parsers/ValueParser.d.ts +13 -0
  105. package/dist/src/parsers/ValueParser.js +133 -0
  106. package/dist/src/parsers/ValueParser.js.map +1 -1
  107. package/dist/src/parsers/WithClauseParser.js +8 -2
  108. package/dist/src/parsers/WithClauseParser.js.map +1 -1
  109. package/dist/src/reporting/models/DataFlowEdge.d.ts +33 -0
  110. package/dist/src/reporting/models/DataFlowEdge.js +58 -0
  111. package/dist/src/reporting/models/DataFlowEdge.js.map +1 -0
  112. package/dist/src/reporting/models/DataFlowGraph.d.ts +49 -0
  113. package/dist/src/reporting/models/DataFlowGraph.js +160 -0
  114. package/dist/src/reporting/models/DataFlowGraph.js.map +1 -0
  115. package/dist/src/reporting/models/DataFlowNode.d.ts +67 -0
  116. package/dist/src/reporting/models/DataFlowNode.js +124 -0
  117. package/dist/src/reporting/models/DataFlowNode.js.map +1 -0
  118. package/dist/src/reporting/services/CTEHandler.d.ts +17 -0
  119. package/dist/src/reporting/services/CTEHandler.js +58 -0
  120. package/dist/src/reporting/services/CTEHandler.js.map +1 -0
  121. package/dist/src/reporting/services/DataSourceHandler.d.ts +25 -0
  122. package/dist/src/reporting/services/DataSourceHandler.js +95 -0
  123. package/dist/src/reporting/services/DataSourceHandler.js.map +1 -0
  124. package/dist/src/reporting/services/JoinHandler.d.ts +32 -0
  125. package/dist/src/reporting/services/JoinHandler.js +84 -0
  126. package/dist/src/reporting/services/JoinHandler.js.map +1 -0
  127. package/dist/src/reporting/services/ProcessHandler.d.ts +55 -0
  128. package/dist/src/reporting/services/ProcessHandler.js +181 -0
  129. package/dist/src/reporting/services/ProcessHandler.js.map +1 -0
  130. package/dist/src/tokenReaders/EscapedIdentifierTokenReader.d.ts +5 -0
  131. package/dist/src/tokenReaders/EscapedIdentifierTokenReader.js +37 -1
  132. package/dist/src/tokenReaders/EscapedIdentifierTokenReader.js.map +1 -1
  133. package/dist/src/tokenReaders/LiteralTokenReader.d.ts +16 -0
  134. package/dist/src/tokenReaders/LiteralTokenReader.js +119 -0
  135. package/dist/src/tokenReaders/LiteralTokenReader.js.map +1 -1
  136. package/dist/src/tokenReaders/OperatorTokenReader.js +4 -0
  137. package/dist/src/tokenReaders/OperatorTokenReader.js.map +1 -1
  138. package/dist/src/tokenReaders/ParameterTokenReader.d.ts +14 -0
  139. package/dist/src/tokenReaders/ParameterTokenReader.js +126 -0
  140. package/dist/src/tokenReaders/ParameterTokenReader.js.map +1 -1
  141. package/dist/src/transformers/DynamicQueryBuilder.d.ts +28 -2
  142. package/dist/src/transformers/DynamicQueryBuilder.js.map +1 -1
  143. package/dist/src/transformers/QueryFlowDiagramGenerator.d.ts +37 -0
  144. package/dist/src/transformers/QueryFlowDiagramGenerator.js +147 -0
  145. package/dist/src/transformers/QueryFlowDiagramGenerator.js.map +1 -0
  146. package/dist/src/transformers/SqlParamInjector.d.ts +11 -0
  147. package/dist/src/transformers/SqlParamInjector.js.map +1 -1
  148. package/dist/src/transformers/TypeTransformationPostProcessor.d.ts +5 -5
  149. package/dist/src/transformers/TypeTransformationPostProcessor.js +20 -8
  150. package/dist/src/transformers/TypeTransformationPostProcessor.js.map +1 -1
  151. package/dist/src/utils/OperatorPrecedence.js +23 -1
  152. package/dist/src/utils/OperatorPrecedence.js.map +1 -1
  153. package/dist/src/utils/charLookupTable.js +4 -4
  154. package/dist/src/utils/charLookupTable.js.map +1 -1
  155. package/dist/src/utils/stringUtils.js +17 -1
  156. package/dist/src/utils/stringUtils.js.map +1 -1
  157. package/dist/tsconfig.tsbuildinfo +1 -1
  158. 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 === null || previous.value !== "array")) {
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,KAAK,IAAI,IAAI,QAAQ,CAAC,KAAK,KAAK,OAAO,CAAC,EAAE,CAAC;YACpE,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;;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;AA1DD,oEA0DC"}
1
+ {"version":3,"file":"EscapedIdentifierTokenReader.js","sourceRoot":"","sources":["../../../src/tokenReaders/EscapedIdentifierTokenReader.ts"],"names":[],"mappings":"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"}
@@ -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
  }