rawsql-ts 0.11.20-beta → 0.11.22-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/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index.min.js +12 -12
- package/dist/esm/index.min.js.map +3 -3
- 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/parsers/WithClauseParser.d.ts +51 -0
- package/dist/esm/src/parsers/WithClauseParser.js +51 -2
- package/dist/esm/src/parsers/WithClauseParser.js.map +1 -1
- package/dist/esm/src/transformers/CTEDependencyAnalyzer.d.ts +34 -5
- package/dist/esm/src/transformers/CTEDependencyAnalyzer.js +89 -5
- package/dist/esm/src/transformers/CTEDependencyAnalyzer.js.map +1 -1
- package/dist/esm/src/transformers/CTEQueryDecomposer.js +25 -6
- package/dist/esm/src/transformers/CTEQueryDecomposer.js.map +1 -1
- package/dist/esm/tsconfig.browser.tsbuildinfo +1 -1
- package/dist/index.min.js +12 -12
- package/dist/index.min.js.map +3 -3
- 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/parsers/WithClauseParser.d.ts +51 -0
- package/dist/src/parsers/WithClauseParser.js +51 -2
- package/dist/src/parsers/WithClauseParser.js.map +1 -1
- package/dist/src/transformers/CTEDependencyAnalyzer.d.ts +34 -5
- package/dist/src/transformers/CTEDependencyAnalyzer.js +89 -5
- package/dist/src/transformers/CTEDependencyAnalyzer.js.map +1 -1
- package/dist/src/transformers/CTEQueryDecomposer.js +25 -6
- package/dist/src/transformers/CTEQueryDecomposer.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
package/dist/esm/src/index.d.ts
CHANGED
package/dist/esm/src/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// Entry point for rawsql-ts package
|
|
2
2
|
export * from './parsers/SelectQueryParser';
|
|
3
3
|
export * from './parsers/InsertQueryParser';
|
|
4
|
+
export * from './parsers/WithClauseParser';
|
|
4
5
|
export * from './models/BinarySelectQuery';
|
|
5
6
|
export * from './models/SelectQuery';
|
|
6
7
|
export * from './models/ValueComponent';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAE3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAEhC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sCAAsC,CAAC;AACrD,cAAc,mCAAmC,CAAC;AAClD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yCAAyC,CAAC;AACxD,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yCAAyC,CAAC;AACxD,cAAc,6BAA6B,CAAC,CAAC,0BAA0B;AACvE,cAAc,qCAAqC,CAAC;AACpD,cAAc,0CAA0C,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAC;AAClF,cAAc,oCAAoC,CAAC;AACnD,cAAc,qCAAqC,CAAC;AACpD,cAAc,qCAAqC,CAAC;AACpD,cAAc,oCAAoC,CAAC;AACnD,OAAO,EAEH,yBAAyB,EACzB,0BAA0B,EAK7B,MAAM,uCAAuC,CAAC;AAC/C,OAAO;AACH,6DAA6D;AAC7D,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,cAAc,EACjB,MAAM,mCAAmC,CAAC;AAE3C,qEAAqE;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,cAAc,0CAA0C,CAAC;AACzD,cAAc,gDAAgD,CAAC;AAE/D,cAAc,gCAAgC,CAAC;AAC/C,cAAc,0CAA0C,CAAC;AACzD,cAAc,iCAAiC,CAAC;AAChD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sCAAsC,CAAC;AACrD,cAAc,oCAAoC,CAAC;AAEnD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AAGrC,oEAAoE"}
|
|
@@ -1,7 +1,58 @@
|
|
|
1
1
|
import { WithClause } from "../models/Clause";
|
|
2
2
|
import { Lexeme } from "../models/Lexeme";
|
|
3
|
+
/**
|
|
4
|
+
* Parser for SQL WITH clauses (Common Table Expressions - CTEs).
|
|
5
|
+
* Parses only the WITH clause portion of SQL, not the entire query.
|
|
6
|
+
*
|
|
7
|
+
* **Note**: For most use cases, use `SelectQueryParser` which provides more comprehensive SQL parsing.
|
|
8
|
+
* This parser should only be used for the special case where you need to analyze only the WITH clause portion.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```typescript
|
|
12
|
+
* // Parses only the WITH clause, not the following SELECT
|
|
13
|
+
* const sql = "WITH recursive_cte AS (SELECT 1 as n UNION SELECT n+1 FROM recursive_cte WHERE n < 10)";
|
|
14
|
+
* const withClause = WithClauseParser.parse(sql);
|
|
15
|
+
* console.log(withClause.recursive); // true
|
|
16
|
+
* console.log(withClause.tables.length); // 1
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
3
19
|
export declare class WithClauseParser {
|
|
20
|
+
/**
|
|
21
|
+
* Parses a SQL string containing only a WITH clause into a WithClause AST.
|
|
22
|
+
* The input should contain only the WITH clause, not the subsequent main query.
|
|
23
|
+
*
|
|
24
|
+
* @param query - The SQL string containing only the WITH clause
|
|
25
|
+
* @returns The parsed WithClause object
|
|
26
|
+
* @throws Error if the syntax is invalid or there are unexpected tokens after the WITH clause
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```typescript
|
|
30
|
+
* // Correct: Only the WITH clause
|
|
31
|
+
* const sql = "WITH users_data AS (SELECT id, name FROM users)";
|
|
32
|
+
* const withClause = WithClauseParser.parse(sql);
|
|
33
|
+
*
|
|
34
|
+
* // Error: Contains SELECT after WITH clause
|
|
35
|
+
* // const badSql = "WITH users_data AS (SELECT id, name FROM users) SELECT * FROM users_data";
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
4
38
|
static parse(query: string): WithClause;
|
|
39
|
+
/**
|
|
40
|
+
* Parses a WITH clause from an array of lexemes starting at the specified index.
|
|
41
|
+
*
|
|
42
|
+
* @param lexemes - Array of lexemes to parse from
|
|
43
|
+
* @param index - Starting index in the lexemes array
|
|
44
|
+
* @returns Object containing the parsed WithClause and the new index position
|
|
45
|
+
* @throws Error if the syntax is invalid or WITH keyword is not found
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* ```typescript
|
|
49
|
+
* const tokenizer = new SqlTokenizer("WITH cte AS (SELECT 1)");
|
|
50
|
+
* const lexemes = tokenizer.readLexmes();
|
|
51
|
+
* const result = WithClauseParser.parseFromLexeme(lexemes, 0);
|
|
52
|
+
* console.log(result.value.tables.length); // 1
|
|
53
|
+
* console.log(result.newIndex); // position after the WITH clause
|
|
54
|
+
* ```
|
|
55
|
+
*/
|
|
5
56
|
static parseFromLexeme(lexemes: Lexeme[], index: number): {
|
|
6
57
|
value: WithClause;
|
|
7
58
|
newIndex: number;
|
|
@@ -2,8 +2,41 @@ import { WithClause } from "../models/Clause";
|
|
|
2
2
|
import { TokenType } from "../models/Lexeme";
|
|
3
3
|
import { SqlTokenizer } from "./SqlTokenizer";
|
|
4
4
|
import { CommonTableParser } from "./CommonTableParser";
|
|
5
|
+
/**
|
|
6
|
+
* Parser for SQL WITH clauses (Common Table Expressions - CTEs).
|
|
7
|
+
* Parses only the WITH clause portion of SQL, not the entire query.
|
|
8
|
+
*
|
|
9
|
+
* **Note**: For most use cases, use `SelectQueryParser` which provides more comprehensive SQL parsing.
|
|
10
|
+
* This parser should only be used for the special case where you need to analyze only the WITH clause portion.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* // Parses only the WITH clause, not the following SELECT
|
|
15
|
+
* const sql = "WITH recursive_cte AS (SELECT 1 as n UNION SELECT n+1 FROM recursive_cte WHERE n < 10)";
|
|
16
|
+
* const withClause = WithClauseParser.parse(sql);
|
|
17
|
+
* console.log(withClause.recursive); // true
|
|
18
|
+
* console.log(withClause.tables.length); // 1
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
5
21
|
export class WithClauseParser {
|
|
6
|
-
|
|
22
|
+
/**
|
|
23
|
+
* Parses a SQL string containing only a WITH clause into a WithClause AST.
|
|
24
|
+
* The input should contain only the WITH clause, not the subsequent main query.
|
|
25
|
+
*
|
|
26
|
+
* @param query - The SQL string containing only the WITH clause
|
|
27
|
+
* @returns The parsed WithClause object
|
|
28
|
+
* @throws Error if the syntax is invalid or there are unexpected tokens after the WITH clause
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```typescript
|
|
32
|
+
* // Correct: Only the WITH clause
|
|
33
|
+
* const sql = "WITH users_data AS (SELECT id, name FROM users)";
|
|
34
|
+
* const withClause = WithClauseParser.parse(sql);
|
|
35
|
+
*
|
|
36
|
+
* // Error: Contains SELECT after WITH clause
|
|
37
|
+
* // const badSql = "WITH users_data AS (SELECT id, name FROM users) SELECT * FROM users_data";
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
7
40
|
static parse(query) {
|
|
8
41
|
const tokenizer = new SqlTokenizer(query); // Initialize tokenizer
|
|
9
42
|
const lexemes = tokenizer.readLexmes(); // Get tokens
|
|
@@ -15,7 +48,23 @@ export class WithClauseParser {
|
|
|
15
48
|
}
|
|
16
49
|
return result.value;
|
|
17
50
|
}
|
|
18
|
-
|
|
51
|
+
/**
|
|
52
|
+
* Parses a WITH clause from an array of lexemes starting at the specified index.
|
|
53
|
+
*
|
|
54
|
+
* @param lexemes - Array of lexemes to parse from
|
|
55
|
+
* @param index - Starting index in the lexemes array
|
|
56
|
+
* @returns Object containing the parsed WithClause and the new index position
|
|
57
|
+
* @throws Error if the syntax is invalid or WITH keyword is not found
|
|
58
|
+
*
|
|
59
|
+
* @example
|
|
60
|
+
* ```typescript
|
|
61
|
+
* const tokenizer = new SqlTokenizer("WITH cte AS (SELECT 1)");
|
|
62
|
+
* const lexemes = tokenizer.readLexmes();
|
|
63
|
+
* const result = WithClauseParser.parseFromLexeme(lexemes, 0);
|
|
64
|
+
* console.log(result.value.tables.length); // 1
|
|
65
|
+
* console.log(result.newIndex); // position after the WITH clause
|
|
66
|
+
* ```
|
|
67
|
+
*/
|
|
19
68
|
static parseFromLexeme(lexemes, index) {
|
|
20
69
|
let idx = index;
|
|
21
70
|
// Capture comments from the WITH keyword
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WithClauseParser.js","sourceRoot":"","sources":["../../../../src/parsers/WithClauseParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAU,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,MAAM,OAAO,gBAAgB;IACzB
|
|
1
|
+
{"version":3,"file":"WithClauseParser.js","sourceRoot":"","sources":["../../../../src/parsers/WithClauseParser.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,23 +1,28 @@
|
|
|
1
1
|
import { CommonTable } from "../models/Clause";
|
|
2
2
|
import { SimpleSelectQuery } from "../models/SimpleSelectQuery";
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* Node type for distinguishing between CTE and main query nodes
|
|
5
|
+
*/
|
|
6
|
+
export type NodeType = 'CTE' | 'ROOT';
|
|
7
|
+
/**
|
|
8
|
+
* Interface representing a dependency relationship between nodes
|
|
5
9
|
*/
|
|
6
10
|
export interface CTEEdge {
|
|
7
11
|
from: string;
|
|
8
12
|
to: string;
|
|
9
13
|
}
|
|
10
14
|
/**
|
|
11
|
-
* Interface representing a
|
|
15
|
+
* Interface representing a node in the dependency graph (either CTE or main query)
|
|
12
16
|
*/
|
|
13
17
|
export interface CTENode {
|
|
14
18
|
name: string;
|
|
15
|
-
|
|
19
|
+
type: NodeType;
|
|
20
|
+
cte: CommonTable | null;
|
|
16
21
|
dependencies: string[];
|
|
17
22
|
dependents: string[];
|
|
18
23
|
}
|
|
19
24
|
/**
|
|
20
|
-
* Interface representing the complete CTE dependency graph
|
|
25
|
+
* Interface representing the complete CTE dependency graph including main query
|
|
21
26
|
*/
|
|
22
27
|
export interface CTEDependencyGraph {
|
|
23
28
|
nodes: CTENode[];
|
|
@@ -30,6 +35,7 @@ export interface CTEDependencyGraph {
|
|
|
30
35
|
*/
|
|
31
36
|
export declare class CTEDependencyAnalyzer {
|
|
32
37
|
private static readonly ERROR_MESSAGES;
|
|
38
|
+
private static readonly MAIN_QUERY_NAME;
|
|
33
39
|
private readonly sourceCollector;
|
|
34
40
|
private readonly cteCollector;
|
|
35
41
|
private dependencyGraph;
|
|
@@ -53,6 +59,22 @@ export declare class CTEDependencyAnalyzer {
|
|
|
53
59
|
* @returns Array of CTE names that depend on this CTE
|
|
54
60
|
*/
|
|
55
61
|
getDependents(cteName: string): string[];
|
|
62
|
+
/**
|
|
63
|
+
* Gets the list of CTEs that are directly referenced by the main query
|
|
64
|
+
* @returns Array of CTE names referenced by the main query
|
|
65
|
+
*/
|
|
66
|
+
getMainQueryDependencies(): string[];
|
|
67
|
+
/**
|
|
68
|
+
* Gets nodes by type (CTE or ROOT)
|
|
69
|
+
* @param nodeType The type of nodes to retrieve
|
|
70
|
+
* @returns Array of nodes of the specified type
|
|
71
|
+
*/
|
|
72
|
+
getNodesByType(nodeType: NodeType): CTENode[];
|
|
73
|
+
/**
|
|
74
|
+
* Gets the main query node
|
|
75
|
+
* @returns The main query node or undefined if not found
|
|
76
|
+
*/
|
|
77
|
+
getMainQueryNode(): CTENode | undefined;
|
|
56
78
|
/**
|
|
57
79
|
* Checks if there are any circular dependencies in the CTE graph
|
|
58
80
|
* @returns true if circular dependencies exist, false otherwise
|
|
@@ -65,8 +87,9 @@ export declare class CTEDependencyAnalyzer {
|
|
|
65
87
|
*/
|
|
66
88
|
getExecutionOrder(): string[];
|
|
67
89
|
/**
|
|
68
|
-
* Builds the dependency graph from the given CTEs
|
|
90
|
+
* Builds the dependency graph from the given CTEs and main query
|
|
69
91
|
* @param ctes Array of CommonTable objects
|
|
92
|
+
* @param mainQuery The main query that may reference CTEs
|
|
70
93
|
* @returns The constructed dependency graph
|
|
71
94
|
*/
|
|
72
95
|
private buildDependencyGraph;
|
|
@@ -86,6 +109,12 @@ export declare class CTEDependencyAnalyzer {
|
|
|
86
109
|
* @returns The CTENode if found, undefined otherwise
|
|
87
110
|
*/
|
|
88
111
|
private findNodeByName;
|
|
112
|
+
/**
|
|
113
|
+
* Gets the main query without the WITH clause for analyzing main query dependencies
|
|
114
|
+
* @param query The complete query with WITH clause
|
|
115
|
+
* @returns A query without WITH clause, or null if no main query exists
|
|
116
|
+
*/
|
|
117
|
+
private getMainQueryWithoutCTE;
|
|
89
118
|
/**
|
|
90
119
|
* Extracts the name from a CommonTable
|
|
91
120
|
* @param cte The CommonTable object
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { SimpleSelectQuery } from "../models/SimpleSelectQuery";
|
|
1
2
|
import { CTECollector } from "./CTECollector";
|
|
2
3
|
import { TableSourceCollector } from "./TableSourceCollector";
|
|
3
4
|
/**
|
|
@@ -20,7 +21,7 @@ export class CTEDependencyAnalyzer {
|
|
|
20
21
|
analyzeDependencies(query) {
|
|
21
22
|
const ctes = this.cteCollector.collect(query);
|
|
22
23
|
this.buildCTEMap(ctes);
|
|
23
|
-
this.dependencyGraph = this.buildDependencyGraph(ctes);
|
|
24
|
+
this.dependencyGraph = this.buildDependencyGraph(ctes, query);
|
|
24
25
|
return this.dependencyGraph;
|
|
25
26
|
}
|
|
26
27
|
/**
|
|
@@ -43,6 +44,32 @@ export class CTEDependencyAnalyzer {
|
|
|
43
44
|
const node = this.findNodeByName(cteName);
|
|
44
45
|
return node ? [...node.dependents] : [];
|
|
45
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* Gets the list of CTEs that are directly referenced by the main query
|
|
49
|
+
* @returns Array of CTE names referenced by the main query
|
|
50
|
+
*/
|
|
51
|
+
getMainQueryDependencies() {
|
|
52
|
+
this.ensureAnalyzed();
|
|
53
|
+
const mainQueryNode = this.findNodeByName(CTEDependencyAnalyzer.MAIN_QUERY_NAME);
|
|
54
|
+
return mainQueryNode ? [...mainQueryNode.dependencies] : [];
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Gets nodes by type (CTE or ROOT)
|
|
58
|
+
* @param nodeType The type of nodes to retrieve
|
|
59
|
+
* @returns Array of nodes of the specified type
|
|
60
|
+
*/
|
|
61
|
+
getNodesByType(nodeType) {
|
|
62
|
+
this.ensureAnalyzed();
|
|
63
|
+
return this.dependencyGraph.nodes.filter(n => n.type === nodeType);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Gets the main query node
|
|
67
|
+
* @returns The main query node or undefined if not found
|
|
68
|
+
*/
|
|
69
|
+
getMainQueryNode() {
|
|
70
|
+
this.ensureAnalyzed();
|
|
71
|
+
return this.findNodeByName(CTEDependencyAnalyzer.MAIN_QUERY_NAME);
|
|
72
|
+
}
|
|
46
73
|
/**
|
|
47
74
|
* Checks if there are any circular dependencies in the CTE graph
|
|
48
75
|
* @returns true if circular dependencies exist, false otherwise
|
|
@@ -99,21 +126,24 @@ export class CTEDependencyAnalyzer {
|
|
|
99
126
|
return result;
|
|
100
127
|
}
|
|
101
128
|
/**
|
|
102
|
-
* Builds the dependency graph from the given CTEs
|
|
129
|
+
* Builds the dependency graph from the given CTEs and main query
|
|
103
130
|
* @param ctes Array of CommonTable objects
|
|
131
|
+
* @param mainQuery The main query that may reference CTEs
|
|
104
132
|
* @returns The constructed dependency graph
|
|
105
133
|
*/
|
|
106
|
-
buildDependencyGraph(ctes) {
|
|
134
|
+
buildDependencyGraph(ctes, mainQuery) {
|
|
107
135
|
const nodes = [];
|
|
108
136
|
const edges = [];
|
|
109
137
|
const dependencyMap = new Map();
|
|
110
138
|
const dependentMap = new Map();
|
|
111
|
-
// Initialize maps for all CTEs
|
|
139
|
+
// Initialize maps for all CTEs and main query
|
|
112
140
|
for (const cte of ctes) {
|
|
113
141
|
const name = CTEDependencyAnalyzer.getCTEName(cte);
|
|
114
142
|
dependencyMap.set(name, new Set());
|
|
115
143
|
dependentMap.set(name, new Set());
|
|
116
144
|
}
|
|
145
|
+
dependencyMap.set(CTEDependencyAnalyzer.MAIN_QUERY_NAME, new Set());
|
|
146
|
+
dependentMap.set(CTEDependencyAnalyzer.MAIN_QUERY_NAME, new Set());
|
|
117
147
|
// Analyze dependencies for each CTE
|
|
118
148
|
for (const cte of ctes) {
|
|
119
149
|
const cteName = CTEDependencyAnalyzer.getCTEName(cte);
|
|
@@ -132,16 +162,42 @@ export class CTEDependencyAnalyzer {
|
|
|
132
162
|
}
|
|
133
163
|
}
|
|
134
164
|
}
|
|
135
|
-
//
|
|
165
|
+
// Analyze main query references to CTEs (excluding WITH clause)
|
|
166
|
+
const mainQueryWithoutCTE = this.getMainQueryWithoutCTE(mainQuery);
|
|
167
|
+
if (mainQueryWithoutCTE) {
|
|
168
|
+
const mainQueryReferences = this.sourceCollector.collect(mainQueryWithoutCTE);
|
|
169
|
+
for (const referencedTable of mainQueryReferences) {
|
|
170
|
+
const referencedName = referencedTable.table.name;
|
|
171
|
+
// If main query references a CTE, create dependency edge
|
|
172
|
+
if (this.cteMap.has(referencedName)) {
|
|
173
|
+
dependencyMap.get(CTEDependencyAnalyzer.MAIN_QUERY_NAME).add(referencedName);
|
|
174
|
+
dependentMap.get(referencedName).add(CTEDependencyAnalyzer.MAIN_QUERY_NAME);
|
|
175
|
+
edges.push({
|
|
176
|
+
from: CTEDependencyAnalyzer.MAIN_QUERY_NAME,
|
|
177
|
+
to: referencedName
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
// Create CTE nodes
|
|
136
183
|
for (const cte of ctes) {
|
|
137
184
|
const name = CTEDependencyAnalyzer.getCTEName(cte);
|
|
138
185
|
nodes.push({
|
|
139
186
|
name,
|
|
187
|
+
type: 'CTE',
|
|
140
188
|
cte,
|
|
141
189
|
dependencies: Array.from(dependencyMap.get(name) || new Set()),
|
|
142
190
|
dependents: Array.from(dependentMap.get(name) || new Set())
|
|
143
191
|
});
|
|
144
192
|
}
|
|
193
|
+
// Create main query node
|
|
194
|
+
nodes.push({
|
|
195
|
+
name: CTEDependencyAnalyzer.MAIN_QUERY_NAME,
|
|
196
|
+
type: 'ROOT',
|
|
197
|
+
cte: null,
|
|
198
|
+
dependencies: Array.from(dependencyMap.get(CTEDependencyAnalyzer.MAIN_QUERY_NAME) || new Set()),
|
|
199
|
+
dependents: Array.from(dependentMap.get(CTEDependencyAnalyzer.MAIN_QUERY_NAME) || new Set())
|
|
200
|
+
});
|
|
145
201
|
return { nodes, edges };
|
|
146
202
|
}
|
|
147
203
|
/**
|
|
@@ -173,6 +229,33 @@ export class CTEDependencyAnalyzer {
|
|
|
173
229
|
var _a;
|
|
174
230
|
return (_a = this.dependencyGraph) === null || _a === void 0 ? void 0 : _a.nodes.find(n => n.name === cteName);
|
|
175
231
|
}
|
|
232
|
+
/**
|
|
233
|
+
* Gets the main query without the WITH clause for analyzing main query dependencies
|
|
234
|
+
* @param query The complete query with WITH clause
|
|
235
|
+
* @returns A query without WITH clause, or null if no main query exists
|
|
236
|
+
*/
|
|
237
|
+
getMainQueryWithoutCTE(query) {
|
|
238
|
+
if (!query.withClause) {
|
|
239
|
+
// No WITH clause, return the query as-is
|
|
240
|
+
return query;
|
|
241
|
+
}
|
|
242
|
+
// Create a copy of the query without the WITH clause
|
|
243
|
+
const mainQueryCopy = new SimpleSelectQuery({
|
|
244
|
+
selectClause: query.selectClause,
|
|
245
|
+
fromClause: query.fromClause,
|
|
246
|
+
whereClause: query.whereClause,
|
|
247
|
+
groupByClause: query.groupByClause,
|
|
248
|
+
havingClause: query.havingClause,
|
|
249
|
+
orderByClause: query.orderByClause,
|
|
250
|
+
limitClause: query.limitClause,
|
|
251
|
+
offsetClause: query.offsetClause,
|
|
252
|
+
fetchClause: query.fetchClause,
|
|
253
|
+
forClause: query.forClause,
|
|
254
|
+
windowClause: query.windowClause,
|
|
255
|
+
// Intentionally skip withClause (defaults to null)
|
|
256
|
+
});
|
|
257
|
+
return mainQueryCopy;
|
|
258
|
+
}
|
|
176
259
|
/**
|
|
177
260
|
* Extracts the name from a CommonTable
|
|
178
261
|
* @param cte The CommonTable object
|
|
@@ -186,4 +269,5 @@ CTEDependencyAnalyzer.ERROR_MESSAGES = {
|
|
|
186
269
|
NOT_ANALYZED: "Must call analyzeDependencies first",
|
|
187
270
|
CIRCULAR_REFERENCE: "Circular reference detected in CTE"
|
|
188
271
|
};
|
|
272
|
+
CTEDependencyAnalyzer.MAIN_QUERY_NAME = 'MAIN_QUERY';
|
|
189
273
|
//# sourceMappingURL=CTEDependencyAnalyzer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CTEDependencyAnalyzer.js","sourceRoot":"","sources":["../../../../src/transformers/CTEDependencyAnalyzer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"CTEDependencyAnalyzer.js","sourceRoot":"","sources":["../../../../src/transformers/CTEDependencyAnalyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -149,6 +149,10 @@ export class CTEQueryDecomposer {
|
|
|
149
149
|
processCTENodes(query, nodes, recursiveCTEs) {
|
|
150
150
|
const result = [];
|
|
151
151
|
for (const node of nodes) {
|
|
152
|
+
// Skip ROOT nodes (main query) as they are not CTEs
|
|
153
|
+
if (node.type === 'ROOT') {
|
|
154
|
+
continue;
|
|
155
|
+
}
|
|
152
156
|
const isRecursive = recursiveCTEs.includes(node.name);
|
|
153
157
|
if (isRecursive) {
|
|
154
158
|
result.push(this.createRecursiveCTE(node, query));
|
|
@@ -164,12 +168,14 @@ export class CTEQueryDecomposer {
|
|
|
164
168
|
*/
|
|
165
169
|
createRecursiveCTE(node, query) {
|
|
166
170
|
const formattedQuery = this.formatter.format(query).formattedSql;
|
|
167
|
-
|
|
171
|
+
// Filter out MAIN_QUERY from dependents for DecomposedCTE result
|
|
172
|
+
const cteDependents = node.dependents.filter(dep => dep !== 'MAIN_QUERY');
|
|
173
|
+
const finalQuery = this.addCommentsToQuery(formattedQuery, node.name, node.dependencies, node.dependents, true);
|
|
168
174
|
return {
|
|
169
175
|
name: node.name,
|
|
170
176
|
query: finalQuery,
|
|
171
|
-
dependencies: [],
|
|
172
|
-
dependents:
|
|
177
|
+
dependencies: [...node.dependencies],
|
|
178
|
+
dependents: cteDependents,
|
|
173
179
|
isRecursive: true
|
|
174
180
|
};
|
|
175
181
|
}
|
|
@@ -179,11 +185,13 @@ export class CTEQueryDecomposer {
|
|
|
179
185
|
createStandardCTE(node, allNodes) {
|
|
180
186
|
const query = this.buildExecutableQuery(node, allNodes);
|
|
181
187
|
const finalQuery = this.addCommentsToQuery(query, node.name, node.dependencies, node.dependents, false);
|
|
188
|
+
// Filter out MAIN_QUERY from dependents for DecomposedCTE result
|
|
189
|
+
const cteDependents = node.dependents.filter(dep => dep !== 'MAIN_QUERY');
|
|
182
190
|
return {
|
|
183
191
|
name: node.name,
|
|
184
192
|
query: finalQuery,
|
|
185
193
|
dependencies: [...node.dependencies],
|
|
186
|
-
dependents:
|
|
194
|
+
dependents: cteDependents,
|
|
187
195
|
isRecursive: false
|
|
188
196
|
};
|
|
189
197
|
}
|
|
@@ -191,6 +199,10 @@ export class CTEQueryDecomposer {
|
|
|
191
199
|
* Builds an executable query for a CTE by including its dependencies
|
|
192
200
|
*/
|
|
193
201
|
buildExecutableQuery(targetNode, allNodes) {
|
|
202
|
+
// ROOT nodes don't have a cte property
|
|
203
|
+
if (targetNode.type === 'ROOT' || !targetNode.cte) {
|
|
204
|
+
throw new Error(`Cannot build executable query for ROOT node: ${targetNode.name}`);
|
|
205
|
+
}
|
|
194
206
|
const requiredCTEs = this.collectRequiredCTEs(targetNode, allNodes);
|
|
195
207
|
if (requiredCTEs.length === 0) {
|
|
196
208
|
// No dependencies, just return the CTE's query
|
|
@@ -224,7 +236,8 @@ export class CTEQueryDecomposer {
|
|
|
224
236
|
collectDependencies(depName);
|
|
225
237
|
}
|
|
226
238
|
// Then add this node (ensuring dependencies come first)
|
|
227
|
-
|
|
239
|
+
// Skip ROOT nodes and the target node itself
|
|
240
|
+
if (nodeName !== targetNode.name && node.type !== 'ROOT') {
|
|
228
241
|
result.push(node);
|
|
229
242
|
}
|
|
230
243
|
};
|
|
@@ -241,6 +254,10 @@ export class CTEQueryDecomposer {
|
|
|
241
254
|
if (requiredCTEs.length === 0)
|
|
242
255
|
return "";
|
|
243
256
|
const cteDefinitions = requiredCTEs.map(node => {
|
|
257
|
+
// Skip ROOT nodes as they don't have CTE definitions
|
|
258
|
+
if (node.type === 'ROOT' || !node.cte) {
|
|
259
|
+
throw new Error(`Cannot include ROOT node in WITH clause: ${node.name}`);
|
|
260
|
+
}
|
|
244
261
|
const cteName = node.name;
|
|
245
262
|
const cteQuery = this.formatter.format(node.cte.query).formattedSql;
|
|
246
263
|
return `${cteName} as (${cteQuery})`;
|
|
@@ -320,7 +337,9 @@ export class CTEQueryDecomposer {
|
|
|
320
337
|
}
|
|
321
338
|
const depsText = dependencies.length > 0 ? dependencies.join(", ") : NONE;
|
|
322
339
|
comments.push(`${DEPENDENCIES} ${depsText}`);
|
|
323
|
-
|
|
340
|
+
// Filter out MAIN_QUERY from dependents for display purposes
|
|
341
|
+
const cteDependents = dependents.filter(dep => dep !== 'MAIN_QUERY');
|
|
342
|
+
const dependentsText = cteDependents.length > 0 ? cteDependents.join(", ") : NONE;
|
|
324
343
|
comments.push(`${DEPENDENTS} ${dependentsText}`);
|
|
325
344
|
return comments;
|
|
326
345
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CTEQueryDecomposer.js","sourceRoot":"","sources":["../../../../src/transformers/CTEQueryDecomposer.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"CTEQueryDecomposer.js","sourceRoot":"","sources":["../../../../src/transformers/CTEQueryDecomposer.ts"],"names":[],"mappings":"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"}
|