rawsql-ts 0.11.10-beta → 0.11.12-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.min.js +12 -12
- package/dist/esm/index.min.js.map +4 -4
- package/dist/esm/src/models/SqlPrintToken.d.ts +6 -4
- package/dist/esm/src/models/SqlPrintToken.js +2 -0
- package/dist/esm/src/models/SqlPrintToken.js.map +1 -1
- package/dist/esm/src/parsers/FunctionExpressionParser.js +5 -4
- package/dist/esm/src/parsers/FunctionExpressionParser.js.map +1 -1
- package/dist/esm/src/parsers/SelectQueryParser.js +3 -2
- package/dist/esm/src/parsers/SelectQueryParser.js.map +1 -1
- package/dist/esm/src/parsers/SqlPrintTokenParser.d.ts +40 -0
- package/dist/esm/src/parsers/SqlPrintTokenParser.js +103 -8
- package/dist/esm/src/parsers/SqlPrintTokenParser.js.map +1 -1
- package/dist/esm/src/parsers/ValueParser.js +4 -4
- package/dist/esm/src/parsers/ValueParser.js.map +1 -1
- package/dist/esm/src/reporting/models/DataFlowGraph.d.ts +3 -1
- package/dist/esm/src/reporting/models/DataFlowGraph.js +5 -27
- package/dist/esm/src/reporting/models/DataFlowGraph.js.map +1 -1
- package/dist/esm/src/reporting/models/DataFlowNode.d.ts +8 -2
- package/dist/esm/src/reporting/models/DataFlowNode.js +34 -10
- package/dist/esm/src/reporting/models/DataFlowNode.js.map +1 -1
- package/dist/esm/src/reporting/services/ProcessHandler.d.ts +6 -42
- package/dist/esm/src/reporting/services/ProcessHandler.js +9 -164
- package/dist/esm/src/reporting/services/ProcessHandler.js.map +1 -1
- package/dist/esm/src/transformers/QueryFlowDiagramGenerator.js +11 -1
- package/dist/esm/src/transformers/QueryFlowDiagramGenerator.js.map +1 -1
- package/dist/esm/src/transformers/SqlFormatter.d.ts +8 -1
- package/dist/esm/src/transformers/SqlFormatter.js.map +1 -1
- package/dist/esm/src/transformers/SqlPrinter.d.ts +55 -7
- package/dist/esm/src/transformers/SqlPrinter.js +151 -32
- package/dist/esm/src/transformers/SqlPrinter.js.map +1 -1
- package/dist/esm/tsconfig.browser.tsbuildinfo +1 -1
- package/dist/index.min.js +10 -10
- package/dist/index.min.js.map +4 -4
- package/dist/src/models/SqlPrintToken.d.ts +6 -4
- package/dist/src/models/SqlPrintToken.js +2 -0
- package/dist/src/models/SqlPrintToken.js.map +1 -1
- package/dist/src/parsers/FunctionExpressionParser.js +5 -4
- package/dist/src/parsers/FunctionExpressionParser.js.map +1 -1
- package/dist/src/parsers/SelectQueryParser.js +3 -2
- package/dist/src/parsers/SelectQueryParser.js.map +1 -1
- package/dist/src/parsers/SqlPrintTokenParser.d.ts +40 -0
- package/dist/src/parsers/SqlPrintTokenParser.js +103 -8
- package/dist/src/parsers/SqlPrintTokenParser.js.map +1 -1
- package/dist/src/parsers/ValueParser.js +4 -4
- package/dist/src/parsers/ValueParser.js.map +1 -1
- package/dist/src/reporting/models/DataFlowGraph.d.ts +3 -1
- package/dist/src/reporting/models/DataFlowGraph.js +5 -27
- package/dist/src/reporting/models/DataFlowGraph.js.map +1 -1
- package/dist/src/reporting/models/DataFlowNode.d.ts +8 -2
- package/dist/src/reporting/models/DataFlowNode.js +34 -10
- package/dist/src/reporting/models/DataFlowNode.js.map +1 -1
- package/dist/src/reporting/services/ProcessHandler.d.ts +6 -42
- package/dist/src/reporting/services/ProcessHandler.js +9 -164
- package/dist/src/reporting/services/ProcessHandler.js.map +1 -1
- package/dist/src/transformers/QueryFlowDiagramGenerator.js +11 -1
- package/dist/src/transformers/QueryFlowDiagramGenerator.js.map +1 -1
- package/dist/src/transformers/SqlFormatter.d.ts +8 -1
- package/dist/src/transformers/SqlFormatter.js.map +1 -1
- package/dist/src/transformers/SqlPrinter.d.ts +55 -7
- package/dist/src/transformers/SqlPrinter.js +151 -32
- package/dist/src/transformers/SqlPrinter.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataFlowNode.js","sourceRoot":"","sources":["../../../../../src/reporting/models/DataFlowNode.ts"],"names":[],"mappings":"AAeA;;GAEG;AACH,MAAM,OAAgB,gBAAgB;IAClC,YACW,EAAU,EACV,KAAa,EACb,IAAc,EACd,KAAgB,EAChB,OAAkB;QAJlB,OAAE,GAAF,EAAE,CAAQ;QACV,UAAK,GAAL,KAAK,CAAQ;QACb,SAAI,GAAJ,IAAI,CAAU;QACd,UAAK,GAAL,KAAK,CAAW;QAChB,YAAO,GAAP,OAAO,CAAW;IAC1B,CAAC;CAGP;AAED;;GAEG;AACH,MAAM,OAAO,cAAe,SAAQ,gBAAgB;IAGhD,YAAY,EAAU,EAAE,KAAa,EAAE,IAAkC;QACrE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"DataFlowNode.js","sourceRoot":"","sources":["../../../../../src/reporting/models/DataFlowNode.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,54 +2,18 @@ import { SimpleSelectQuery } from '../../models/SimpleSelectQuery';
|
|
|
2
2
|
import { DataFlowGraph } from '../models/DataFlowGraph';
|
|
3
3
|
import { DataSourceHandler } from './DataSourceHandler';
|
|
4
4
|
/**
|
|
5
|
-
* Handles the processing of SQL clauses
|
|
5
|
+
* Handles the processing of SQL clauses for data flow generation
|
|
6
|
+
* Note: This class is simplified to focus on data flow only,
|
|
7
|
+
* filtering clauses like WHERE, GROUP BY, HAVING, etc. are excluded
|
|
6
8
|
*/
|
|
7
9
|
export declare class ProcessHandler {
|
|
8
10
|
private graph;
|
|
9
11
|
private dataSourceHandler;
|
|
10
12
|
constructor(graph: DataFlowGraph, dataSourceHandler: DataSourceHandler);
|
|
11
13
|
/**
|
|
12
|
-
* Processes SQL clauses
|
|
14
|
+
* Processes SQL clauses for data flow diagram generation
|
|
15
|
+
* Returns the current node ID without adding process nodes
|
|
16
|
+
* since we focus only on data flow (sources, joins, unions)
|
|
13
17
|
*/
|
|
14
18
|
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
19
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { InlineQuery, FunctionCall, UnaryExpression, BinaryExpression } from '../../models/ValueComponent';
|
|
2
1
|
/**
|
|
3
|
-
* Handles the processing of SQL clauses
|
|
2
|
+
* Handles the processing of SQL clauses for data flow generation
|
|
3
|
+
* Note: This class is simplified to focus on data flow only,
|
|
4
|
+
* filtering clauses like WHERE, GROUP BY, HAVING, etc. are excluded
|
|
4
5
|
*/
|
|
5
6
|
export class ProcessHandler {
|
|
6
7
|
constructor(graph, dataSourceHandler) {
|
|
@@ -8,170 +9,14 @@ export class ProcessHandler {
|
|
|
8
9
|
this.dataSourceHandler = dataSourceHandler;
|
|
9
10
|
}
|
|
10
11
|
/**
|
|
11
|
-
* Processes SQL clauses
|
|
12
|
+
* Processes SQL clauses for data flow diagram generation
|
|
13
|
+
* Returns the current node ID without adding process nodes
|
|
14
|
+
* since we focus only on data flow (sources, joins, unions)
|
|
12
15
|
*/
|
|
13
16
|
processQueryClauses(query, context, currentNodeId, cteNames, queryProcessor) {
|
|
14
|
-
|
|
15
|
-
//
|
|
16
|
-
|
|
17
|
-
resultNodeId = this.processWhereClause(query.whereClause, context, resultNodeId, cteNames, queryProcessor);
|
|
18
|
-
}
|
|
19
|
-
// 3. Process GROUP BY clause
|
|
20
|
-
if (query.groupByClause && resultNodeId) {
|
|
21
|
-
resultNodeId = this.processGroupByClause(context, resultNodeId);
|
|
22
|
-
}
|
|
23
|
-
// 4. Process HAVING clause
|
|
24
|
-
if (query.havingClause && resultNodeId) {
|
|
25
|
-
resultNodeId = this.processHavingClause(context, resultNodeId);
|
|
26
|
-
}
|
|
27
|
-
// 5. Process SELECT clause - only add if needed
|
|
28
|
-
if (this.shouldAddSelectNode(query, context)) {
|
|
29
|
-
resultNodeId = this.processSelectClause(context, resultNodeId);
|
|
30
|
-
}
|
|
31
|
-
// 6. Process ORDER BY clause
|
|
32
|
-
if (query.orderByClause && resultNodeId) {
|
|
33
|
-
resultNodeId = this.processOrderByClause(context, resultNodeId);
|
|
34
|
-
}
|
|
35
|
-
// 7. Process LIMIT/OFFSET clause
|
|
36
|
-
if ((query.limitClause || query.offsetClause) && resultNodeId) {
|
|
37
|
-
resultNodeId = this.processLimitClause(context, resultNodeId, !!query.offsetClause);
|
|
38
|
-
}
|
|
39
|
-
return resultNodeId;
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Processes WHERE clause including subqueries
|
|
43
|
-
*/
|
|
44
|
-
processWhereClause(whereClause, context, currentNodeId, cteNames, queryProcessor) {
|
|
45
|
-
const whereNode = this.graph.createProcessNode('where', context);
|
|
46
|
-
// Connect FROM result to WHERE
|
|
47
|
-
this.graph.addConnection(currentNodeId, whereNode.id);
|
|
48
|
-
// Process WHERE subqueries
|
|
49
|
-
const whereSubqueryInfo = this.processWhereSubqueries(whereClause, context, cteNames, queryProcessor);
|
|
50
|
-
// Connect WHERE subqueries to WHERE node
|
|
51
|
-
for (const subqueryInfo of whereSubqueryInfo) {
|
|
52
|
-
this.graph.addConnection(subqueryInfo.nodeId, whereNode.id, subqueryInfo.operator);
|
|
53
|
-
}
|
|
54
|
-
return whereNode.id;
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* Processes GROUP BY clause
|
|
58
|
-
*/
|
|
59
|
-
processGroupByClause(context, currentNodeId) {
|
|
60
|
-
const groupByNode = this.graph.createProcessNode('group by', context);
|
|
61
|
-
this.graph.addConnection(currentNodeId, groupByNode.id);
|
|
62
|
-
return groupByNode.id;
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Processes HAVING clause
|
|
66
|
-
*/
|
|
67
|
-
processHavingClause(context, currentNodeId) {
|
|
68
|
-
const havingNode = this.graph.createProcessNode('having', context);
|
|
69
|
-
this.graph.addConnection(currentNodeId, havingNode.id);
|
|
70
|
-
return havingNode.id;
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Processes SELECT clause
|
|
74
|
-
*/
|
|
75
|
-
processSelectClause(context, currentNodeId) {
|
|
76
|
-
const selectNode = this.graph.createProcessNode('select', context);
|
|
77
|
-
this.graph.addConnection(currentNodeId, selectNode.id);
|
|
78
|
-
return selectNode.id;
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Processes ORDER BY clause
|
|
82
|
-
*/
|
|
83
|
-
processOrderByClause(context, currentNodeId) {
|
|
84
|
-
const orderByNode = this.graph.createProcessNode('order by', context);
|
|
85
|
-
this.graph.addConnection(currentNodeId, orderByNode.id);
|
|
86
|
-
return orderByNode.id;
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* Processes LIMIT/OFFSET clause
|
|
90
|
-
*/
|
|
91
|
-
processLimitClause(context, currentNodeId, hasOffset) {
|
|
92
|
-
const limitNode = this.graph.createProcessNode(hasOffset ? 'limit/offset' : 'limit', context);
|
|
93
|
-
this.graph.addConnection(currentNodeId, limitNode.id);
|
|
94
|
-
return limitNode.id;
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Determines if a SELECT node should be added
|
|
98
|
-
*/
|
|
99
|
-
shouldAddSelectNode(query, context) {
|
|
100
|
-
// Always add SELECT node - UNION combines SELECT results, not raw data sources
|
|
101
|
-
return true;
|
|
102
|
-
}
|
|
103
|
-
/**
|
|
104
|
-
* Processes WHERE clause to find subqueries (EXISTS, IN, etc.)
|
|
105
|
-
*/
|
|
106
|
-
processWhereSubqueries(whereClause, context, cteNames, queryProcessor) {
|
|
107
|
-
const subqueryInfo = [];
|
|
108
|
-
this.processValueComponent(whereClause.condition, context, cteNames, queryProcessor, subqueryInfo);
|
|
109
|
-
return subqueryInfo;
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* Recursively processes ValueComponent to find InlineQuery (subqueries)
|
|
113
|
-
*/
|
|
114
|
-
processValueComponent(value, context, cteNames, queryProcessor, subqueryInfo) {
|
|
115
|
-
if (value instanceof InlineQuery) {
|
|
116
|
-
const subqueryNodeId = queryProcessor(value.selectQuery, `${context}_where_subquery`, cteNames);
|
|
117
|
-
subqueryInfo.push({ nodeId: subqueryNodeId, operator: 'SUBQUERY' });
|
|
118
|
-
}
|
|
119
|
-
else if (value instanceof FunctionCall) {
|
|
120
|
-
const functionName = value.qualifiedName.name.toString().toLowerCase();
|
|
121
|
-
if (functionName === 'exists' && value.argument instanceof InlineQuery) {
|
|
122
|
-
const subqueryNodeId = queryProcessor(value.argument.selectQuery, `${context}_where_subquery`, cteNames);
|
|
123
|
-
subqueryInfo.push({ nodeId: subqueryNodeId, operator: 'EXISTS' });
|
|
124
|
-
}
|
|
125
|
-
else if (value.argument) {
|
|
126
|
-
this.processValueComponent(value.argument, context, cteNames, queryProcessor, subqueryInfo);
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
else if (value instanceof UnaryExpression) {
|
|
130
|
-
const operator = value.operator.value.toLowerCase();
|
|
131
|
-
if ((operator === 'exists' || operator === 'not exists') && value.expression instanceof InlineQuery) {
|
|
132
|
-
this.processQueryTablesOnly(value.expression.selectQuery, context, cteNames, subqueryInfo, operator.toUpperCase());
|
|
133
|
-
}
|
|
134
|
-
else {
|
|
135
|
-
this.processValueComponent(value.expression, context, cteNames, queryProcessor, subqueryInfo);
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
else if (value instanceof BinaryExpression) {
|
|
139
|
-
const operator = value.operator.value.toLowerCase();
|
|
140
|
-
if ((operator === 'in' || operator === 'not in') && value.right instanceof InlineQuery) {
|
|
141
|
-
this.processQueryTablesOnly(value.right.selectQuery, context, cteNames, subqueryInfo, operator.toUpperCase());
|
|
142
|
-
}
|
|
143
|
-
else {
|
|
144
|
-
this.processValueComponent(value.left, context, cteNames, queryProcessor, subqueryInfo);
|
|
145
|
-
this.processValueComponent(value.right, context, cteNames, queryProcessor, subqueryInfo);
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
else if (value && typeof value === 'object') {
|
|
149
|
-
for (const [key, val] of Object.entries(value)) {
|
|
150
|
-
if (val && typeof val === 'object') {
|
|
151
|
-
if (Array.isArray(val)) {
|
|
152
|
-
val.forEach(item => {
|
|
153
|
-
if (item && typeof item === 'object' && 'selectQuery' in item) {
|
|
154
|
-
this.processValueComponent(item, context, cteNames, queryProcessor, subqueryInfo);
|
|
155
|
-
}
|
|
156
|
-
});
|
|
157
|
-
}
|
|
158
|
-
else if ('selectQuery' in val) {
|
|
159
|
-
this.processValueComponent(val, context, cteNames, queryProcessor, subqueryInfo);
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
/**
|
|
166
|
-
* Processes only the tables from a query for EXISTS/NOT EXISTS conditions
|
|
167
|
-
*/
|
|
168
|
-
processQueryTablesOnly(query, context, cteNames, subqueryInfo, operator) {
|
|
169
|
-
if (query.fromClause) {
|
|
170
|
-
const tableNodes = this.dataSourceHandler.extractTableNodeIds(query.fromClause, cteNames);
|
|
171
|
-
for (const tableNodeId of tableNodes) {
|
|
172
|
-
subqueryInfo.push({ nodeId: tableNodeId, operator });
|
|
173
|
-
}
|
|
174
|
-
}
|
|
17
|
+
// Return the current node without adding process nodes
|
|
18
|
+
// Data flow focused: only sources, joins, and unions are shown
|
|
19
|
+
return currentNodeId;
|
|
175
20
|
}
|
|
176
21
|
}
|
|
177
22
|
//# sourceMappingURL=ProcessHandler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProcessHandler.js","sourceRoot":"","sources":["../../../../../src/reporting/services/ProcessHandler.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ProcessHandler.js","sourceRoot":"","sources":["../../../../../src/reporting/services/ProcessHandler.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,MAAM,OAAO,cAAc;IACvB,YACY,KAAoB,EACpB,iBAAoC;QADpC,UAAK,GAAL,KAAK,CAAe;QACpB,sBAAiB,GAAjB,iBAAiB,CAAmB;IAC7C,CAAC;IAEJ;;;;OAIG;IACH,mBAAmB,CACf,KAAwB,EACxB,OAAe,EACf,aAAqB,EACrB,QAAqB,EACrB,cAA8E;QAE9E,uDAAuD;QACvD,+DAA+D;QAC/D,OAAO,aAAa,CAAC;IACzB,CAAC;CACJ"}
|
|
@@ -57,7 +57,15 @@ export class QueryFlowDiagramGenerator {
|
|
|
57
57
|
let currentNodeId = '';
|
|
58
58
|
// 1. Process FROM clause (including JOINs)
|
|
59
59
|
if (query.fromClause) {
|
|
60
|
-
|
|
60
|
+
const hasJoins = query.fromClause.joins && query.fromClause.joins.length > 0;
|
|
61
|
+
if (hasJoins) {
|
|
62
|
+
// If there are JOINs, process normally (data source -> JOIN -> SELECT)
|
|
63
|
+
currentNodeId = this.joinHandler.processFromClause(query.fromClause, cteNames, this.processQuery.bind(this));
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
// If no JOINs, connect data source directly to SELECT
|
|
67
|
+
currentNodeId = this.dataSourceHandler.processSource(query.fromClause.source, cteNames, this.processQuery.bind(this));
|
|
68
|
+
}
|
|
61
69
|
}
|
|
62
70
|
// 2-7. Process other clauses in execution order
|
|
63
71
|
if (currentNodeId) {
|
|
@@ -89,6 +97,7 @@ export class QueryFlowDiagramGenerator {
|
|
|
89
97
|
if (rightNodeId && !this.graph.hasConnection(rightNodeId, operationNode.id)) {
|
|
90
98
|
this.graph.addConnection(rightNodeId, operationNode.id);
|
|
91
99
|
}
|
|
100
|
+
// Return the operation node directly without adding SELECT
|
|
92
101
|
return operationNode.id;
|
|
93
102
|
}
|
|
94
103
|
processMultiPartOperation(parts, operator, context, cteNames) {
|
|
@@ -108,6 +117,7 @@ export class QueryFlowDiagramGenerator {
|
|
|
108
117
|
this.graph.addConnection(partNodeId, operationNode.id);
|
|
109
118
|
}
|
|
110
119
|
}
|
|
120
|
+
// Return the operation node directly without adding SELECT
|
|
111
121
|
return operationNode.id;
|
|
112
122
|
}
|
|
113
123
|
handleOutputNode(currentNodeId, context) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryFlowDiagramGenerator.js","sourceRoot":"","sources":["../../../../src/transformers/QueryFlowDiagramGenerator.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"QueryFlowDiagramGenerator.js","sourceRoot":"","sources":["../../../../src/transformers/QueryFlowDiagramGenerator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAgB9D;;;GAGG;AACH,MAAM,OAAO,yBAAyB;IAOlC;QACI,IAAI,CAAC,KAAK,GAAG,IAAI,aAAa,EAAE,CAAC;QACjC,IAAI,CAAC,iBAAiB,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3D,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACvE,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC7E,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjD,CAAC;IAED,mBAAmB,CAAC,KAA2B,EAAE,OAA4B;QACzE,yCAAyC;QACzC,IAAI,CAAC,KAAK,GAAG,IAAI,aAAa,EAAE,CAAC;QACjC,IAAI,CAAC,iBAAiB,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3D,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACvE,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC7E,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE,CAAC;QAEpC,sBAAsB;QACtB,MAAM,WAAW,GAAG,OAAO,KAAK,KAAK,QAAQ;YACzC,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC;YAChC,CAAC,CAAC,KAAK,CAAC;QAEZ,oBAAoB;QACpB,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;QACnC,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QAEjD,0BAA0B;QAC1B,OAAO,IAAI,CAAC,KAAK,CAAC,eAAe,CAC7B,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,KAAI,IAAI,EAC1B,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,CACjB,CAAC;IACN,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,GAAW;QACvB,MAAM,SAAS,GAAG,IAAI,yBAAyB,EAAE,CAAC;QAClD,OAAO,SAAS,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;IAC9C,CAAC;IAEO,YAAY,CAChB,KAAkB,EAClB,OAAe,EACf,QAAqB;QAErB,IAAI,KAAK,YAAY,iBAAiB,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC7D,CAAC;aAAM,IAAI,KAAK,YAAY,iBAAiB,EAAE,CAAC;YAC5C,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC7D,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC9C,CAAC;IAEO,kBAAkB,CACtB,KAAwB,EACxB,OAAe,EACf,QAAqB;QAErB,qBAAqB;QACrB,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACnB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1F,CAAC;QAED,IAAI,aAAa,GAAG,EAAE,CAAC;QAEvB,2CAA2C;QAC3C,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACnB,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;YAE7E,IAAI,QAAQ,EAAE,CAAC;gBACX,uEAAuE;gBACvE,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAC9C,KAAK,CAAC,UAAU,EAChB,QAAQ,EACR,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAC/B,CAAC;YACN,CAAC;iBAAM,CAAC;gBACJ,sDAAsD;gBACtD,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAChD,KAAK,CAAC,UAAU,CAAC,MAAM,EACvB,QAAQ,EACR,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAC/B,CAAC;YACN,CAAC;QACL,CAAC;QAED,gDAAgD;QAChD,IAAI,aAAa,EAAE,CAAC;YAChB,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,mBAAmB,CACnD,KAAK,EACL,OAAO,EACP,aAAa,EACb,QAAQ,EACR,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAC/B,CAAC;QACN,CAAC;QAED,+CAA+C;QAC/C,OAAO,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IACzD,CAAC;IAEO,kBAAkB,CACtB,KAAwB,EACxB,OAAe,EACf,QAAqB;QAErB,iDAAiD;QACjD,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAEnE,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC1F,CAAC;aAAM,CAAC;YACJ,OAAO,IAAI,CAAC,4BAA4B,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QACvE,CAAC;IACL,CAAC;IAEO,4BAA4B,CAChC,KAAwB,EACxB,OAAe,EACf,QAAqB;QAErB,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,OAAO,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC9E,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,OAAO,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAEjF,wDAAwD;QACxD,MAAM,WAAW,GAAG,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC/E,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAE3F,sCAAsC;QACtC,IAAI,UAAU,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,UAAU,EAAE,aAAa,CAAC,EAAE,CAAC,EAAE,CAAC;YACxE,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,UAAU,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC;QAC3D,CAAC;QACD,IAAI,WAAW,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,WAAW,EAAE,aAAa,CAAC,EAAE,CAAC,EAAE,CAAC;YAC1E,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,WAAW,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC;QAC5D,CAAC;QAED,2DAA2D;QAC3D,OAAO,aAAa,CAAC,EAAE,CAAC;IAC5B,CAAC;IAEO,yBAAyB,CAC7B,KAAoB,EACpB,QAAgB,EAChB,OAAe,EACf,QAAqB;QAErB,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,4CAA4C;QAC5C,MAAM,WAAW,GAAG,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC/E,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAE/E,yCAAyC;QACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,MAAM,WAAW,GAAG,GAAG,OAAO,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;YACtE,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/B,CAAC;QAED,iCAAiC;QACjC,KAAK,MAAM,UAAU,IAAI,SAAS,EAAE,CAAC;YACjC,IAAI,UAAU,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,UAAU,EAAE,aAAa,CAAC,EAAE,CAAC,EAAE,CAAC;gBACxE,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,UAAU,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC;YAC3D,CAAC;QACL,CAAC;QAED,2DAA2D;QAC3D,OAAO,aAAa,CAAC,EAAE,CAAC;IAC5B,CAAC;IAEO,gBAAgB,CAAC,aAAqB,EAAE,OAAe;QAC3D,2DAA2D;QAC3D,6DAA6D;QAC7D,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;YACrB,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;YACxD,IAAI,aAAa,EAAE,CAAC;gBAChB,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,aAAa,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC;YAC3D,CAAC;YACD,OAAO,UAAU,CAAC,EAAE,CAAC;QACzB,CAAC;QAED,OAAO,aAAa,CAAC;IACzB,CAAC;IAED;;OAEG;IACK,kBAAkB,CAAC,KAAwB,EAAE,QAAgB;QACjE,MAAM,KAAK,GAAkB,EAAE,CAAC;QAEhC,MAAM,YAAY,GAAG,CAAC,CAAc,EAAE,EAAE;YACpC,IAAI,CAAC,YAAY,iBAAiB,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAClE,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBACrB,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YAC1B,CAAC;iBAAM,CAAC;gBACJ,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACL,CAAC,CAAC;QAEF,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,OAAO,KAAK,CAAC;IACjB,CAAC;CACJ"}
|
|
@@ -3,6 +3,13 @@ import { IndentCharOption, NewlineOption } from './LinePrinter';
|
|
|
3
3
|
import { SqlComponent } from '../models/SqlComponent';
|
|
4
4
|
export declare const VALID_PRESETS: readonly ["mysql", "postgres", "sqlserver", "sqlite"];
|
|
5
5
|
export type PresetName = (typeof VALID_PRESETS)[number];
|
|
6
|
+
/**
|
|
7
|
+
* WithClauseStyle determines how WITH clauses are formatted.
|
|
8
|
+
* - 'standard': Normal formatting with proper indentation
|
|
9
|
+
* - 'cte-oneline': Individual CTEs are formatted as one-liners
|
|
10
|
+
* - 'full-oneline': Entire WITH clause is formatted as one line
|
|
11
|
+
*/
|
|
12
|
+
export type WithClauseStyle = 'standard' | 'cte-oneline' | 'full-oneline';
|
|
6
13
|
/**
|
|
7
14
|
* SqlFormatter class combines parsing and printing of SQL queries into a single interface.
|
|
8
15
|
*/
|
|
@@ -28,7 +35,7 @@ export declare class SqlFormatter {
|
|
|
28
35
|
andBreak?: AndBreakStyle;
|
|
29
36
|
exportComment?: boolean;
|
|
30
37
|
strictCommentPlacement?: boolean;
|
|
31
|
-
|
|
38
|
+
withClauseStyle?: WithClauseStyle;
|
|
32
39
|
}); /**
|
|
33
40
|
* Formats a SQL query string with the given parameters.
|
|
34
41
|
* @param sqlText The SQL query string to format.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SqlFormatter.js","sourceRoot":"","sources":["../../../../src/transformers/SqlFormatter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAmB,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAC/F,OAAO,EAAE,UAAU,EAAkC,MAAM,cAAc,CAAC;AAK1E,4CAA4C;AAC5C,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,CAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"SqlFormatter.js","sourceRoot":"","sources":["../../../../src/transformers/SqlFormatter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAmB,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAC/F,OAAO,EAAE,UAAU,EAAkC,MAAM,cAAc,CAAC;AAK1E,4CAA4C;AAC5C,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,CAAU,CAAC;AAWnF;;GAEG;AACH,MAAM,OAAO,YAAY;IAIrB,YAAY,UAcR,EAAE;;QAEF,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAE1E,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,mBAAmB,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,iCAAiC;QAC3F,CAAC;QAED,MAAM,aAAa,mCACZ,YAAY,KACf,gBAAgB,EAAE,MAAA,OAAO,CAAC,gBAAgB,mCAAI,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,gBAAgB,EAC5E,eAAe,EAAE,MAAA,OAAO,CAAC,eAAe,mCAAI,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,eAAe,EACzE,cAAc,EAAE,MAAA,OAAO,CAAC,cAAc,mCAAI,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,cAAc,GACzE,CAAC;QAEF,IAAI,CAAC,MAAM,GAAG,IAAI,mBAAmB,CAAC,aAAa,CAAC,CAAC;QACrD,IAAI,CAAC,OAAO,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC,CAAI;;;;;OAKF;IACH,MAAM,CAAC,GAAiB;QACpB,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACjD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAE/C,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;IACpC,CAAC;CACJ"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { SqlPrintToken, SqlPrintTokenContainerType } from "../models/SqlPrintToken";
|
|
2
2
|
import { IndentCharOption, NewlineOption } from "./LinePrinter";
|
|
3
|
+
import { WithClauseStyle } from "./SqlFormatter";
|
|
3
4
|
/**
|
|
4
5
|
* CommaBreakStyle determines how commas are placed in formatted SQL output.
|
|
5
6
|
* - 'none': No line break for commas
|
|
@@ -36,8 +37,8 @@ export interface SqlPrinterOptions {
|
|
|
36
37
|
strictCommentPlacement?: boolean;
|
|
37
38
|
/** Container types that should increase indentation level */
|
|
38
39
|
indentIncrementContainerTypes?: SqlPrintTokenContainerType[];
|
|
39
|
-
/**
|
|
40
|
-
|
|
40
|
+
/** WITH clause formatting style (default: 'standard') */
|
|
41
|
+
withClauseStyle?: WithClauseStyle;
|
|
41
42
|
}
|
|
42
43
|
/**
|
|
43
44
|
* SqlPrinter formats a SqlPrintToken tree into a SQL string with flexible style options.
|
|
@@ -47,14 +48,15 @@ export interface SqlPrinterOptions {
|
|
|
47
48
|
* - Line break styles for commas and AND operators
|
|
48
49
|
* - Keyword case transformation
|
|
49
50
|
* - Comment handling
|
|
50
|
-
* -
|
|
51
|
+
* - WITH clause formatting styles
|
|
51
52
|
*
|
|
52
53
|
* @example
|
|
53
54
|
* const printer = new SqlPrinter({
|
|
54
55
|
* indentChar: ' ',
|
|
55
56
|
* indentSize: 1,
|
|
56
57
|
* keywordCase: 'upper',
|
|
57
|
-
* commaBreak: 'after'
|
|
58
|
+
* commaBreak: 'after',
|
|
59
|
+
* withClauseStyle: 'cte-oneline'
|
|
58
60
|
* });
|
|
59
61
|
* const formatted = printer.print(sqlToken);
|
|
60
62
|
*/
|
|
@@ -75,10 +77,12 @@ export declare class SqlPrinter {
|
|
|
75
77
|
exportComment: boolean;
|
|
76
78
|
/** Whether to use strict comment placement (only clause-level comments, default: false) */
|
|
77
79
|
strictCommentPlacement: boolean;
|
|
78
|
-
/**
|
|
79
|
-
|
|
80
|
+
/** WITH clause formatting style (default: 'standard') */
|
|
81
|
+
withClauseStyle: WithClauseStyle;
|
|
80
82
|
private linePrinter;
|
|
81
83
|
private indentIncrementContainers;
|
|
84
|
+
/** Track whether we are currently inside a WITH clause for full-oneline formatting */
|
|
85
|
+
private insideWithClause;
|
|
82
86
|
/**
|
|
83
87
|
* @param options Optional style settings for pretty printing
|
|
84
88
|
*/
|
|
@@ -94,12 +98,56 @@ export declare class SqlPrinter {
|
|
|
94
98
|
*/
|
|
95
99
|
print(token: SqlPrintToken, level?: number): string;
|
|
96
100
|
private appendToken;
|
|
101
|
+
/**
|
|
102
|
+
* Determines if a token should be skipped during printing.
|
|
103
|
+
* Tokens are skipped if they have no content and no inner tokens,
|
|
104
|
+
* except for special token types that have semantic meaning despite empty text.
|
|
105
|
+
*/
|
|
97
106
|
private shouldSkipToken;
|
|
98
107
|
private applyKeywordCase;
|
|
99
108
|
private handleKeywordToken;
|
|
100
109
|
private handleCommaToken;
|
|
101
110
|
private handleAndOperatorToken;
|
|
102
111
|
private handleJoinClauseToken;
|
|
103
|
-
|
|
112
|
+
/**
|
|
113
|
+
* Handles space tokens with context-aware filtering.
|
|
114
|
+
* Skips spaces in CommentBlocks when in specific CTE modes to prevent duplication.
|
|
115
|
+
*/
|
|
116
|
+
private handleSpaceToken;
|
|
117
|
+
/**
|
|
118
|
+
* Determines whether to skip space tokens in CommentBlocks.
|
|
119
|
+
* Prevents duplicate spacing in CTE full-oneline mode only.
|
|
120
|
+
*/
|
|
121
|
+
private shouldSkipCommentBlockSpace;
|
|
122
|
+
/**
|
|
123
|
+
* Handles commentNewline tokens with conditional newline behavior.
|
|
124
|
+
* In multiline mode (newline !== ' '), adds a newline after comments.
|
|
125
|
+
* In oneliner mode (newline === ' '), does nothing to keep comments on same line.
|
|
126
|
+
* Skips newlines in CTE modes (full-oneline, cte-oneline) to maintain one-line format.
|
|
127
|
+
*/
|
|
128
|
+
private handleCommentNewlineToken;
|
|
129
|
+
/**
|
|
130
|
+
* Determines whether to skip commentNewline tokens.
|
|
131
|
+
* Skips in CTE modes to maintain one-line formatting.
|
|
132
|
+
*/
|
|
133
|
+
private shouldSkipCommentNewline;
|
|
134
|
+
/**
|
|
135
|
+
* Determines if the printer is in oneliner mode.
|
|
136
|
+
* Oneliner mode uses single spaces instead of actual newlines.
|
|
137
|
+
*/
|
|
138
|
+
private isOnelineMode;
|
|
139
|
+
/**
|
|
140
|
+
* Handles CTE tokens with one-liner formatting.
|
|
141
|
+
* Creates a nested SqlPrinter instance for proper CTE oneline formatting.
|
|
142
|
+
*/
|
|
104
143
|
private handleCteOnelineToken;
|
|
144
|
+
/**
|
|
145
|
+
* Creates a SqlPrinter instance configured for CTE oneline formatting.
|
|
146
|
+
*/
|
|
147
|
+
private createCteOnelinePrinter;
|
|
148
|
+
/**
|
|
149
|
+
* Removes duplicate consecutive spaces while preserving single spaces.
|
|
150
|
+
* Simple and safe space normalization for CTE oneline mode.
|
|
151
|
+
*/
|
|
152
|
+
private cleanDuplicateSpaces;
|
|
105
153
|
}
|