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,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DataFlowEdgeCollection = exports.DataFlowConnection = void 0;
4
+ /**
5
+ * Represents a connection between nodes in the data flow
6
+ */
7
+ class DataFlowConnection {
8
+ constructor(from, to, label) {
9
+ this.from = from;
10
+ this.to = to;
11
+ this.label = label;
12
+ }
13
+ getMermaidRepresentation() {
14
+ const arrow = this.label ? ` -->|${this.label}| ` : ' --> ';
15
+ return `${this.from}${arrow}${this.to}`;
16
+ }
17
+ static create(from, to, label) {
18
+ return new DataFlowConnection(from, to, label);
19
+ }
20
+ static createWithNullability(from, to, isNullable) {
21
+ const label = isNullable ? 'NULLABLE' : 'NOT NULL';
22
+ return new DataFlowConnection(from, to, label);
23
+ }
24
+ }
25
+ exports.DataFlowConnection = DataFlowConnection;
26
+ /**
27
+ * Collection of edges with utilities for managing connections
28
+ */
29
+ class DataFlowEdgeCollection {
30
+ constructor() {
31
+ this.edges = [];
32
+ this.connectionSet = new Set();
33
+ }
34
+ add(edge) {
35
+ const key = `${edge.from}->${edge.to}`;
36
+ if (!this.connectionSet.has(key)) {
37
+ this.edges.push(edge);
38
+ this.connectionSet.add(key);
39
+ }
40
+ }
41
+ addConnection(from, to, label) {
42
+ this.add(DataFlowConnection.create(from, to, label));
43
+ }
44
+ addJoinConnection(from, to, isNullable) {
45
+ this.add(DataFlowConnection.createWithNullability(from, to, isNullable));
46
+ }
47
+ hasConnection(from, to) {
48
+ return this.connectionSet.has(`${from}->${to}`);
49
+ }
50
+ getAll() {
51
+ return [...this.edges];
52
+ }
53
+ getMermaidRepresentation() {
54
+ return this.edges.map(edge => edge.getMermaidRepresentation()).join('\n ');
55
+ }
56
+ }
57
+ exports.DataFlowEdgeCollection = DataFlowEdgeCollection;
58
+ //# sourceMappingURL=DataFlowEdge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataFlowEdge.js","sourceRoot":"","sources":["../../../../src/reporting/models/DataFlowEdge.ts"],"names":[],"mappings":";;;AASA;;GAEG;AACH,MAAa,kBAAkB;IAC3B,YACW,IAAY,EACZ,EAAU,EACV,KAAc;QAFd,SAAI,GAAJ,IAAI,CAAQ;QACZ,OAAE,GAAF,EAAE,CAAQ;QACV,UAAK,GAAL,KAAK,CAAS;IACtB,CAAC;IAEJ,wBAAwB;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;QAC5D,OAAO,GAAG,IAAI,CAAC,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IAC5C,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,IAAY,EAAE,EAAU,EAAE,KAAc;QAClD,OAAO,IAAI,kBAAkB,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,CAAC,qBAAqB,CAAC,IAAY,EAAE,EAAU,EAAE,UAAmB;QACtE,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC;QACnD,OAAO,IAAI,kBAAkB,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;IACnD,CAAC;CACJ;AApBD,gDAoBC;AAED;;GAEG;AACH,MAAa,sBAAsB;IAAnC;QACY,UAAK,GAAyB,EAAE,CAAC;QACjC,kBAAa,GAAG,IAAI,GAAG,EAAU,CAAC;IA6B9C,CAAC;IA3BG,GAAG,CAAC,IAAwB;QACxB,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,EAAE,CAAC;QACvC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChC,CAAC;IACL,CAAC;IAED,aAAa,CAAC,IAAY,EAAE,EAAU,EAAE,KAAc;QAClD,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;IACzD,CAAC;IAED,iBAAiB,CAAC,IAAY,EAAE,EAAU,EAAE,UAAmB;QAC3D,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,IAAI,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC;IAC7E,CAAC;IAED,aAAa,CAAC,IAAY,EAAE,EAAU;QAClC,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,IAAI,KAAK,EAAE,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,MAAM;QACF,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAED,wBAAwB;QACpB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,wBAAwB,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAClF,CAAC;CACJ;AA/BD,wDA+BC"}
@@ -0,0 +1,49 @@
1
+ import { BaseDataFlowNode, DataSourceNode, ProcessNode, OperationNode, OutputNode } from './DataFlowNode';
2
+ import { DataFlowConnection } from './DataFlowEdge';
3
+ /**
4
+ * Represents the complete data flow graph for a SQL query
5
+ */
6
+ export declare class DataFlowGraph {
7
+ private nodes;
8
+ private edges;
9
+ addNode(node: BaseDataFlowNode): void;
10
+ addEdge(edge: DataFlowConnection): void;
11
+ addConnection(from: string, to: string, label?: string): void;
12
+ hasNode(nodeId: string): boolean;
13
+ hasConnection(from: string, to: string): boolean;
14
+ getNode(nodeId: string): BaseDataFlowNode | undefined;
15
+ getAllNodes(): BaseDataFlowNode[];
16
+ getAllEdges(): DataFlowConnection[];
17
+ /**
18
+ * Generates the complete Mermaid flowchart syntax
19
+ */
20
+ generateMermaid(direction?: string, title?: string): string;
21
+ /**
22
+ * Creates or gets a table node
23
+ */
24
+ getOrCreateTable(tableName: string): DataSourceNode;
25
+ /**
26
+ * Creates or gets a CTE node
27
+ */
28
+ getOrCreateCTE(cteName: string): DataSourceNode;
29
+ /**
30
+ * Creates or gets a subquery node
31
+ */
32
+ getOrCreateSubquery(alias: string): DataSourceNode;
33
+ /**
34
+ * Creates a process node
35
+ */
36
+ createProcessNode(type: string, context: string): ProcessNode;
37
+ /**
38
+ * Creates a JOIN operation node
39
+ */
40
+ createJoinNode(joinId: string, joinType: string): OperationNode;
41
+ /**
42
+ * Creates a set operation node (UNION, EXCEPT, etc.)
43
+ */
44
+ createSetOperationNode(operationId: string, operation: string): OperationNode;
45
+ /**
46
+ * Creates an output node
47
+ */
48
+ createOutputNode(context?: string): OutputNode;
49
+ }
@@ -0,0 +1,160 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DataFlowGraph = void 0;
4
+ const DataFlowNode_1 = require("./DataFlowNode");
5
+ const DataFlowEdge_1 = require("./DataFlowEdge");
6
+ /**
7
+ * Represents the complete data flow graph for a SQL query
8
+ */
9
+ class DataFlowGraph {
10
+ constructor() {
11
+ this.nodes = new Map();
12
+ this.edges = new DataFlowEdge_1.DataFlowEdgeCollection();
13
+ }
14
+ addNode(node) {
15
+ this.nodes.set(node.id, node);
16
+ }
17
+ addEdge(edge) {
18
+ this.edges.add(edge);
19
+ }
20
+ addConnection(from, to, label) {
21
+ this.edges.addConnection(from, to, label);
22
+ }
23
+ hasNode(nodeId) {
24
+ return this.nodes.has(nodeId);
25
+ }
26
+ hasConnection(from, to) {
27
+ return this.edges.hasConnection(from, to);
28
+ }
29
+ getNode(nodeId) {
30
+ return this.nodes.get(nodeId);
31
+ }
32
+ getAllNodes() {
33
+ return Array.from(this.nodes.values());
34
+ }
35
+ getAllEdges() {
36
+ return this.edges.getAll();
37
+ }
38
+ /**
39
+ * Generates the complete Mermaid flowchart syntax
40
+ */
41
+ generateMermaid(direction = 'TD', title) {
42
+ let mermaid = `flowchart ${direction}\n`;
43
+ // Add title if provided
44
+ if (title) {
45
+ mermaid += ` %% ${title}\n`;
46
+ }
47
+ // Add nodes
48
+ const nodeLines = Array.from(this.nodes.values())
49
+ .map(node => ` ${node.getMermaidRepresentation()}`)
50
+ .join('\n');
51
+ if (nodeLines) {
52
+ mermaid += nodeLines + '\n';
53
+ }
54
+ // Add blank line between nodes and edges if both exist
55
+ if (this.nodes.size > 0 && this.edges.getAll().length > 0) {
56
+ mermaid += '\n';
57
+ }
58
+ // Add edges
59
+ const edgeRepresentation = this.edges.getMermaidRepresentation();
60
+ if (edgeRepresentation) {
61
+ mermaid += ` ${edgeRepresentation}\n`;
62
+ }
63
+ return mermaid;
64
+ }
65
+ /**
66
+ * Creates or gets a table node
67
+ */
68
+ getOrCreateTable(tableName) {
69
+ const nodeId = `table_${tableName}`;
70
+ let node = this.nodes.get(nodeId);
71
+ if (!node) {
72
+ node = DataFlowNode_1.DataSourceNode.createTable(tableName);
73
+ this.addNode(node);
74
+ }
75
+ return node;
76
+ }
77
+ /**
78
+ * Creates or gets a CTE node
79
+ */
80
+ getOrCreateCTE(cteName) {
81
+ const nodeId = `cte_${cteName}`;
82
+ let node = this.nodes.get(nodeId);
83
+ if (!node) {
84
+ node = DataFlowNode_1.DataSourceNode.createCTE(cteName);
85
+ this.addNode(node);
86
+ }
87
+ return node;
88
+ }
89
+ /**
90
+ * Creates or gets a subquery node
91
+ */
92
+ getOrCreateSubquery(alias) {
93
+ const nodeId = `subquery_${alias}`;
94
+ let node = this.nodes.get(nodeId);
95
+ if (!node) {
96
+ node = DataFlowNode_1.DataSourceNode.createSubquery(alias);
97
+ this.addNode(node);
98
+ }
99
+ return node;
100
+ }
101
+ /**
102
+ * Creates a process node
103
+ */
104
+ createProcessNode(type, context) {
105
+ let node;
106
+ switch (type.toLowerCase()) {
107
+ case 'where':
108
+ node = DataFlowNode_1.ProcessNode.createWhere(context);
109
+ break;
110
+ case 'group by':
111
+ node = DataFlowNode_1.ProcessNode.createGroupBy(context);
112
+ break;
113
+ case 'having':
114
+ node = DataFlowNode_1.ProcessNode.createHaving(context);
115
+ break;
116
+ case 'select':
117
+ node = DataFlowNode_1.ProcessNode.createSelect(context);
118
+ break;
119
+ case 'order by':
120
+ node = DataFlowNode_1.ProcessNode.createOrderBy(context);
121
+ break;
122
+ case 'limit':
123
+ node = DataFlowNode_1.ProcessNode.createLimit(context, false);
124
+ break;
125
+ case 'limit/offset':
126
+ node = DataFlowNode_1.ProcessNode.createLimit(context, true);
127
+ break;
128
+ default:
129
+ node = new DataFlowNode_1.ProcessNode(context, type);
130
+ }
131
+ this.addNode(node);
132
+ return node;
133
+ }
134
+ /**
135
+ * Creates a JOIN operation node
136
+ */
137
+ createJoinNode(joinId, joinType) {
138
+ const node = DataFlowNode_1.OperationNode.createJoin(joinId, joinType);
139
+ this.addNode(node);
140
+ return node;
141
+ }
142
+ /**
143
+ * Creates a set operation node (UNION, EXCEPT, etc.)
144
+ */
145
+ createSetOperationNode(operationId, operation) {
146
+ const node = DataFlowNode_1.OperationNode.createSetOperation(operationId, operation);
147
+ this.addNode(node);
148
+ return node;
149
+ }
150
+ /**
151
+ * Creates an output node
152
+ */
153
+ createOutputNode(context = 'main') {
154
+ const node = new DataFlowNode_1.OutputNode(context);
155
+ this.addNode(node);
156
+ return node;
157
+ }
158
+ }
159
+ exports.DataFlowGraph = DataFlowGraph;
160
+ //# sourceMappingURL=DataFlowGraph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataFlowGraph.js","sourceRoot":"","sources":["../../../../src/reporting/models/DataFlowGraph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Represents a node in the SQL data flow diagram
3
+ */
4
+ export interface DataFlowNode {
5
+ id: string;
6
+ label: string;
7
+ type: NodeType;
8
+ shape: NodeShape;
9
+ details?: string[];
10
+ }
11
+ export type NodeType = 'table' | 'cte' | 'subquery' | 'process' | 'operation' | 'output';
12
+ export type NodeShape = 'cylinder' | 'hexagon' | 'diamond' | 'rounded' | 'rectangle' | 'circle';
13
+ /**
14
+ * Base class for all data flow nodes
15
+ */
16
+ export declare abstract class BaseDataFlowNode implements DataFlowNode {
17
+ id: string;
18
+ label: string;
19
+ type: NodeType;
20
+ shape: NodeShape;
21
+ details?: string[] | undefined;
22
+ constructor(id: string, label: string, type: NodeType, shape: NodeShape, details?: string[] | undefined);
23
+ abstract getMermaidRepresentation(): string;
24
+ }
25
+ /**
26
+ * Represents a data source (table, CTE, subquery)
27
+ */
28
+ export declare class DataSourceNode extends BaseDataFlowNode {
29
+ private annotations;
30
+ constructor(id: string, label: string, type: 'table' | 'cte' | 'subquery');
31
+ addAnnotation(annotation: string): void;
32
+ hasAnnotation(annotation: string): boolean;
33
+ getMermaidRepresentation(): string;
34
+ static createTable(tableName: string): DataSourceNode;
35
+ static createCTE(cteName: string): DataSourceNode;
36
+ static createSubquery(alias: string): DataSourceNode;
37
+ }
38
+ /**
39
+ * Represents a processing operation (WHERE, GROUP BY, SELECT, etc.)
40
+ */
41
+ export declare class ProcessNode extends BaseDataFlowNode {
42
+ constructor(id: string, operation: string, context?: string);
43
+ getMermaidRepresentation(): string;
44
+ static createWhere(context: string): ProcessNode;
45
+ static createGroupBy(context: string): ProcessNode;
46
+ static createHaving(context: string): ProcessNode;
47
+ static createSelect(context: string): ProcessNode;
48
+ static createOrderBy(context: string): ProcessNode;
49
+ static createLimit(context: string, hasOffset?: boolean): ProcessNode;
50
+ }
51
+ /**
52
+ * Represents an operation (JOIN, UNION, etc.)
53
+ */
54
+ export declare class OperationNode extends BaseDataFlowNode {
55
+ constructor(id: string, operation: string);
56
+ getMermaidRepresentation(): string;
57
+ static createJoin(joinId: string, joinType: string): OperationNode;
58
+ static createUnion(unionId: string, unionType?: string): OperationNode;
59
+ static createSetOperation(operationId: string, operation: string): OperationNode;
60
+ }
61
+ /**
62
+ * Represents the final output
63
+ */
64
+ export declare class OutputNode extends BaseDataFlowNode {
65
+ constructor(context?: string);
66
+ getMermaidRepresentation(): string;
67
+ }
@@ -0,0 +1,124 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OutputNode = exports.OperationNode = exports.ProcessNode = exports.DataSourceNode = exports.BaseDataFlowNode = void 0;
4
+ /**
5
+ * Base class for all data flow nodes
6
+ */
7
+ class BaseDataFlowNode {
8
+ constructor(id, label, type, shape, details) {
9
+ this.id = id;
10
+ this.label = label;
11
+ this.type = type;
12
+ this.shape = shape;
13
+ this.details = details;
14
+ }
15
+ }
16
+ exports.BaseDataFlowNode = BaseDataFlowNode;
17
+ /**
18
+ * Represents a data source (table, CTE, subquery)
19
+ */
20
+ class DataSourceNode extends BaseDataFlowNode {
21
+ constructor(id, label, type) {
22
+ super(id, label, type, 'cylinder');
23
+ this.annotations = new Set();
24
+ }
25
+ addAnnotation(annotation) {
26
+ this.annotations.add(annotation);
27
+ }
28
+ hasAnnotation(annotation) {
29
+ return this.annotations.has(annotation);
30
+ }
31
+ getMermaidRepresentation() {
32
+ return `${this.id}[(${this.label})]`;
33
+ }
34
+ static createTable(tableName) {
35
+ return new DataSourceNode(`table_${tableName}`, tableName, 'table');
36
+ }
37
+ static createCTE(cteName) {
38
+ return new DataSourceNode(`cte_${cteName}`, `CTE:${cteName}`, 'cte');
39
+ }
40
+ static createSubquery(alias) {
41
+ return new DataSourceNode(`subquery_${alias}`, `QUERY:${alias}`, 'subquery');
42
+ }
43
+ }
44
+ exports.DataSourceNode = DataSourceNode;
45
+ /**
46
+ * Represents a processing operation (WHERE, GROUP BY, SELECT, etc.)
47
+ */
48
+ class ProcessNode extends BaseDataFlowNode {
49
+ constructor(id, operation, context = '') {
50
+ const nodeId = context ? `${context}_${operation.toLowerCase().replace(/\s+/g, '_')}` : operation.toLowerCase().replace(/\s+/g, '_');
51
+ super(nodeId, operation, 'process', 'hexagon');
52
+ }
53
+ getMermaidRepresentation() {
54
+ return `${this.id}{{${this.label}}}`;
55
+ }
56
+ static createWhere(context) {
57
+ return new ProcessNode(`${context}_where`, 'WHERE', context);
58
+ }
59
+ static createGroupBy(context) {
60
+ return new ProcessNode(`${context}_group_by`, 'GROUP BY', context);
61
+ }
62
+ static createHaving(context) {
63
+ return new ProcessNode(`${context}_having`, 'HAVING', context);
64
+ }
65
+ static createSelect(context) {
66
+ return new ProcessNode(`${context}_select`, 'SELECT', context);
67
+ }
68
+ static createOrderBy(context) {
69
+ return new ProcessNode(`${context}_order_by`, 'ORDER BY', context);
70
+ }
71
+ static createLimit(context, hasOffset = false) {
72
+ const label = hasOffset ? 'LIMIT/OFFSET' : 'LIMIT';
73
+ return new ProcessNode(`${context}_limit`, label, context);
74
+ }
75
+ }
76
+ exports.ProcessNode = ProcessNode;
77
+ /**
78
+ * Represents an operation (JOIN, UNION, etc.)
79
+ */
80
+ class OperationNode extends BaseDataFlowNode {
81
+ constructor(id, operation) {
82
+ super(id, operation, 'operation', 'diamond');
83
+ }
84
+ getMermaidRepresentation() {
85
+ return `${this.id}{${this.label}}`;
86
+ }
87
+ static createJoin(joinId, joinType) {
88
+ let label;
89
+ const normalizedType = joinType.trim().toLowerCase();
90
+ if (normalizedType === 'join') {
91
+ label = 'INNER JOIN';
92
+ }
93
+ else if (normalizedType.endsWith(' join')) {
94
+ label = normalizedType.toUpperCase();
95
+ }
96
+ else {
97
+ label = normalizedType.toUpperCase() + ' JOIN';
98
+ }
99
+ return new OperationNode(`join_${joinId}`, label);
100
+ }
101
+ static createUnion(unionId, unionType = 'UNION ALL') {
102
+ return new OperationNode(`${unionType.toLowerCase().replace(/\s+/g, '_')}_${unionId}`, unionType.toUpperCase());
103
+ }
104
+ static createSetOperation(operationId, operation) {
105
+ const normalizedOp = operation.toUpperCase();
106
+ const id = `${normalizedOp.toLowerCase().replace(/\s+/g, '_')}_${operationId}`;
107
+ return new OperationNode(id, normalizedOp);
108
+ }
109
+ }
110
+ exports.OperationNode = OperationNode;
111
+ /**
112
+ * Represents the final output
113
+ */
114
+ class OutputNode extends BaseDataFlowNode {
115
+ constructor(context = 'main') {
116
+ const label = context === 'main' ? 'Final Result' : `${context} Result`;
117
+ super(`${context}_output`, label, 'output', 'rounded');
118
+ }
119
+ getMermaidRepresentation() {
120
+ return `${this.id}(${this.label})`;
121
+ }
122
+ }
123
+ exports.OutputNode = OutputNode;
124
+ //# sourceMappingURL=DataFlowNode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataFlowNode.js","sourceRoot":"","sources":["../../../../src/reporting/models/DataFlowNode.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { WithClause } from '../../models/Clause';
2
+ import { DataFlowGraph } from '../models/DataFlowGraph';
3
+ /**
4
+ * Handles the processing of Common Table Expressions (CTEs)
5
+ */
6
+ export declare class CTEHandler {
7
+ private graph;
8
+ constructor(graph: DataFlowGraph);
9
+ /**
10
+ * Processes all CTEs in a WITH clause
11
+ */
12
+ processCTEs(withClause: WithClause, cteNames: Set<string>, queryProcessor: (query: any, context: string, cteNames: Set<string>) => string): void;
13
+ /**
14
+ * Detects if a query contains recursive references to a CTE
15
+ */
16
+ private detectRecursiveReference;
17
+ }
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CTEHandler = void 0;
4
+ /**
5
+ * Handles the processing of Common Table Expressions (CTEs)
6
+ */
7
+ class CTEHandler {
8
+ constructor(graph) {
9
+ this.graph = graph;
10
+ }
11
+ /**
12
+ * Processes all CTEs in a WITH clause
13
+ */
14
+ processCTEs(withClause, cteNames, queryProcessor) {
15
+ // First pass: Create all CTE nodes and add names to tracking set
16
+ for (let i = 0; i < withClause.tables.length; i++) {
17
+ const cte = withClause.tables[i];
18
+ const cteName = cte.getSourceAliasName();
19
+ // Create virtual data source node for CTE
20
+ const cteNode = this.graph.getOrCreateCTE(cteName);
21
+ // Track CTE name (this allows recursive references)
22
+ cteNames.add(cteName);
23
+ // Check if this is a recursive CTE
24
+ // In WITH RECURSIVE, only the first CTE is recursive
25
+ const isRecursive = withClause.recursive && i === 0;
26
+ if (isRecursive) {
27
+ // Add recursive annotation to the CTE node
28
+ cteNode.addAnnotation('recursive');
29
+ }
30
+ }
31
+ // Second pass: Process CTE queries now that all names are available
32
+ for (let i = 0; i < withClause.tables.length; i++) {
33
+ const cte = withClause.tables[i];
34
+ const cteName = cte.getSourceAliasName();
35
+ const cteNode = this.graph.getOrCreateCTE(cteName);
36
+ // Process CTE query and connect its result to the CTE virtual data source
37
+ const cteResultId = queryProcessor(cte.query, `cte_${cteName}`, cteNames);
38
+ // Connect CTE query result to CTE virtual data source
39
+ if (cteResultId && !this.graph.hasConnection(cteResultId, cteNode.id)) {
40
+ // Add RECURSIVE label for first CTE in WITH RECURSIVE clause
41
+ const isRecursive = withClause.recursive && i === 0;
42
+ const label = isRecursive ? 'RECURSIVE' : undefined;
43
+ this.graph.addConnection(cteResultId, cteNode.id, label);
44
+ }
45
+ }
46
+ }
47
+ /**
48
+ * Detects if a query contains recursive references to a CTE
49
+ */
50
+ detectRecursiveReference(query, cteName) {
51
+ // Simple heuristic: check if the query string contains the CTE name
52
+ // In a real implementation, you'd parse the query structure
53
+ const queryStr = query.toString().toLowerCase();
54
+ return queryStr.includes(cteName.toLowerCase());
55
+ }
56
+ }
57
+ exports.CTEHandler = CTEHandler;
58
+ //# sourceMappingURL=CTEHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CTEHandler.js","sourceRoot":"","sources":["../../../../src/reporting/services/CTEHandler.ts"],"names":[],"mappings":";;;AAIA;;GAEG;AACH,MAAa,UAAU;IACnB,YAAoB,KAAoB;QAApB,UAAK,GAAL,KAAK,CAAe;IAAG,CAAC;IAE5C;;OAEG;IACH,WAAW,CACP,UAAsB,EACtB,QAAqB,EACrB,cAA8E;QAE9E,iEAAiE;QACjE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAChD,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACjC,MAAM,OAAO,GAAG,GAAG,CAAC,kBAAkB,EAAE,CAAC;YAEzC,0CAA0C;YAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YAEnD,oDAAoD;YACpD,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAEtB,mCAAmC;YACnC,qDAAqD;YACrD,MAAM,WAAW,GAAG,UAAU,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,CAAC;YACpD,IAAI,WAAW,EAAE,CAAC;gBACd,2CAA2C;gBAC3C,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;YACvC,CAAC;QACL,CAAC;QAED,oEAAoE;QACpE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAChD,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACjC,MAAM,OAAO,GAAG,GAAG,CAAC,kBAAkB,EAAE,CAAC;YACzC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YAEnD,0EAA0E;YAC1E,MAAM,WAAW,GAAG,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;YAE1E,sDAAsD;YACtD,IAAI,WAAW,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;gBACpE,6DAA6D;gBAC7D,MAAM,WAAW,GAAG,UAAU,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,CAAC;gBACpD,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;gBACpD,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YAC7D,CAAC;QACL,CAAC;IACL,CAAC;IAED;;OAEG;IACK,wBAAwB,CAAC,KAAU,EAAE,OAAe;QACxD,oEAAoE;QACpE,4DAA4D;QAC5D,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,CAAC;QAChD,OAAO,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IACpD,CAAC;CACJ;AA3DD,gCA2DC"}
@@ -0,0 +1,25 @@
1
+ import { SourceExpression } from '../../models/Clause';
2
+ import { DataFlowGraph } from '../models/DataFlowGraph';
3
+ /**
4
+ * Handles the processing of data sources (tables, CTEs, subqueries)
5
+ */
6
+ export declare class DataSourceHandler {
7
+ private graph;
8
+ constructor(graph: DataFlowGraph);
9
+ /**
10
+ * Processes a source expression and returns the node ID
11
+ */
12
+ processSource(sourceExpr: SourceExpression, cteNames: Set<string>, queryProcessor: (query: any, context: string, cteNames: Set<string>) => string): string;
13
+ /**
14
+ * Processes a table source (including CTE references)
15
+ */
16
+ private processTableSource;
17
+ /**
18
+ * Processes a subquery source
19
+ */
20
+ private processSubquerySource;
21
+ /**
22
+ * Extracts table node IDs from a FROM clause for WHERE subqueries
23
+ */
24
+ extractTableNodeIds(fromClause: any, cteNames: Set<string>): string[];
25
+ }