rawsql-ts 0.10.9-beta → 0.11.1-beta
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +175 -47
- package/dist/esm/index.js +6 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index.min.js +16 -14
- package/dist/esm/index.min.js.map +4 -4
- package/dist/esm/src/index.js +6 -0
- package/dist/esm/src/index.js.map +1 -1
- package/dist/esm/src/tokenReaders/OperatorTokenReader.js +4 -0
- package/dist/esm/src/tokenReaders/OperatorTokenReader.js.map +1 -1
- package/dist/esm/src/transformers/CTEDependencyTracer.js +249 -0
- package/dist/esm/src/transformers/CTEDependencyTracer.js.map +1 -0
- package/dist/esm/src/transformers/DynamicQueryBuilder.js +155 -0
- package/dist/esm/src/transformers/DynamicQueryBuilder.js.map +1 -0
- package/dist/esm/src/transformers/JsonMappingUnifier.js +217 -0
- package/dist/esm/src/transformers/JsonMappingUnifier.js.map +1 -0
- package/dist/esm/src/transformers/ModelDrivenJsonMapping.js +103 -0
- package/dist/esm/src/transformers/ModelDrivenJsonMapping.js.map +1 -0
- package/dist/esm/src/transformers/PostgresArrayEntityCteBuilder.js +204 -16
- package/dist/esm/src/transformers/PostgresArrayEntityCteBuilder.js.map +1 -1
- package/dist/esm/src/transformers/PostgresJsonQueryBuilder.js +26 -21
- package/dist/esm/src/transformers/PostgresJsonQueryBuilder.js.map +1 -1
- package/dist/esm/src/transformers/PostgresObjectEntityCteBuilder.js +8 -5
- package/dist/esm/src/transformers/PostgresObjectEntityCteBuilder.js.map +1 -1
- package/dist/esm/src/transformers/SelectableColumnCollector.js +17 -5
- package/dist/esm/src/transformers/SelectableColumnCollector.js.map +1 -1
- package/dist/esm/src/transformers/SqlFormatter.js +1 -2
- package/dist/esm/src/transformers/SqlFormatter.js.map +1 -1
- package/dist/esm/src/transformers/TypeTransformationPostProcessor.js +342 -0
- package/dist/esm/src/transformers/TypeTransformationPostProcessor.js.map +1 -0
- package/dist/esm/src/transformers/UnifiedJsonMapping.js +57 -0
- package/dist/esm/src/transformers/UnifiedJsonMapping.js.map +1 -0
- package/dist/esm/src/transformers/UpstreamSelectQueryFinder.js +8 -1
- package/dist/esm/src/transformers/UpstreamSelectQueryFinder.js.map +1 -1
- package/dist/esm/src/utils/JsonSchemaValidator.js +211 -0
- package/dist/esm/src/utils/JsonSchemaValidator.js.map +1 -0
- package/dist/esm/src/utils/OperatorPrecedence.js +3 -1
- package/dist/esm/src/utils/OperatorPrecedence.js.map +1 -1
- package/dist/esm/src/utils/SchemaManager.js +0 -1
- package/dist/esm/src/utils/SchemaManager.js.map +1 -1
- package/dist/esm/tsconfig.browser.tsbuildinfo +1 -1
- package/dist/esm/types/src/index.d.ts +6 -0
- package/dist/esm/types/src/transformers/CTEDependencyTracer.d.ts +58 -0
- package/dist/esm/types/src/transformers/DynamicQueryBuilder.d.ts +108 -0
- package/dist/esm/types/src/transformers/JsonMappingUnifier.d.ts +95 -0
- package/dist/esm/types/src/transformers/ModelDrivenJsonMapping.d.ts +62 -0
- package/dist/esm/types/src/transformers/PostgresArrayEntityCteBuilder.d.ts +80 -1
- package/dist/esm/types/src/transformers/PostgresJsonQueryBuilder.d.ts +3 -2
- package/dist/esm/types/src/transformers/SelectableColumnCollector.d.ts +14 -3
- package/dist/esm/types/src/transformers/SqlFormatter.d.ts +2 -3
- package/dist/esm/types/src/transformers/TypeTransformationPostProcessor.d.ts +108 -0
- package/dist/esm/types/src/transformers/UnifiedJsonMapping.d.ts +53 -0
- package/dist/esm/types/src/transformers/UpstreamSelectQueryFinder.d.ts +5 -1
- package/dist/esm/types/src/utils/JsonSchemaValidator.d.ts +81 -0
- package/dist/index.min.js +16 -14
- package/dist/index.min.js.map +4 -4
- package/dist/src/index.d.ts +6 -0
- package/dist/src/index.js +14 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/tokenReaders/OperatorTokenReader.js +4 -0
- package/dist/src/tokenReaders/OperatorTokenReader.js.map +1 -1
- package/dist/src/transformers/CTEDependencyTracer.d.ts +58 -0
- package/dist/src/transformers/CTEDependencyTracer.js +253 -0
- package/dist/src/transformers/CTEDependencyTracer.js.map +1 -0
- package/dist/src/transformers/DynamicQueryBuilder.d.ts +108 -0
- package/dist/src/transformers/DynamicQueryBuilder.js +159 -0
- package/dist/src/transformers/DynamicQueryBuilder.js.map +1 -0
- package/dist/src/transformers/JsonMappingUnifier.d.ts +95 -0
- package/dist/src/transformers/JsonMappingUnifier.js +226 -0
- package/dist/src/transformers/JsonMappingUnifier.js.map +1 -0
- package/dist/src/transformers/ModelDrivenJsonMapping.d.ts +62 -0
- package/dist/src/transformers/ModelDrivenJsonMapping.js +110 -0
- package/dist/src/transformers/ModelDrivenJsonMapping.js.map +1 -0
- package/dist/src/transformers/PostgresArrayEntityCteBuilder.d.ts +80 -1
- package/dist/src/transformers/PostgresArrayEntityCteBuilder.js +204 -16
- package/dist/src/transformers/PostgresArrayEntityCteBuilder.js.map +1 -1
- package/dist/src/transformers/PostgresJsonQueryBuilder.d.ts +3 -2
- package/dist/src/transformers/PostgresJsonQueryBuilder.js +26 -21
- package/dist/src/transformers/PostgresJsonQueryBuilder.js.map +1 -1
- package/dist/src/transformers/PostgresObjectEntityCteBuilder.js +8 -5
- package/dist/src/transformers/PostgresObjectEntityCteBuilder.js.map +1 -1
- package/dist/src/transformers/SelectableColumnCollector.d.ts +14 -3
- package/dist/src/transformers/SelectableColumnCollector.js +17 -5
- package/dist/src/transformers/SelectableColumnCollector.js.map +1 -1
- package/dist/src/transformers/SqlFormatter.d.ts +2 -3
- package/dist/src/transformers/SqlFormatter.js +1 -2
- package/dist/src/transformers/SqlFormatter.js.map +1 -1
- package/dist/src/transformers/TypeTransformationPostProcessor.d.ts +108 -0
- package/dist/src/transformers/TypeTransformationPostProcessor.js +351 -0
- package/dist/src/transformers/TypeTransformationPostProcessor.js.map +1 -0
- package/dist/src/transformers/UnifiedJsonMapping.d.ts +53 -0
- package/dist/src/transformers/UnifiedJsonMapping.js +60 -0
- package/dist/src/transformers/UnifiedJsonMapping.js.map +1 -0
- package/dist/src/transformers/UpstreamSelectQueryFinder.d.ts +5 -1
- package/dist/src/transformers/UpstreamSelectQueryFinder.js +8 -1
- package/dist/src/transformers/UpstreamSelectQueryFinder.js.map +1 -1
- package/dist/src/utils/JsonSchemaValidator.d.ts +81 -0
- package/dist/src/utils/JsonSchemaValidator.js +215 -0
- package/dist/src/utils/JsonSchemaValidator.js.map +1 -0
- package/dist/src/utils/OperatorPrecedence.js +3 -1
- package/dist/src/utils/OperatorPrecedence.js.map +1 -1
- package/dist/src/utils/SchemaManager.js +0 -1
- package/dist/src/utils/SchemaManager.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +8 -5
package/dist/src/index.d.ts
CHANGED
|
@@ -14,10 +14,16 @@ export * from './transformers/SelectValueCollector';
|
|
|
14
14
|
export * from './transformers/SelectableColumnCollector';
|
|
15
15
|
export * from './transformers/TableColumnResolver';
|
|
16
16
|
export * from './transformers/TableSourceCollector';
|
|
17
|
+
export * from './transformers/UnifiedJsonMapping';
|
|
18
|
+
export { ModelDrivenJsonMapping, convertModelDrivenMapping, validateModelDrivenMapping, FieldMapping, NestedStructure, StructureFields, FieldType } from './transformers/ModelDrivenJsonMapping';
|
|
19
|
+
export { processJsonMapping, unifyJsonMapping, isModelDrivenFormat, isUnifiedFormat, isLegacyFormat } from './transformers/JsonMappingUnifier';
|
|
17
20
|
export * from './transformers/UpstreamSelectQueryFinder';
|
|
21
|
+
export * from './transformers/TypeTransformationPostProcessor';
|
|
18
22
|
export * from './transformers/SchemaCollector';
|
|
19
23
|
export * from './transformers/SqlParamInjector';
|
|
20
24
|
export * from './transformers/SqlSortInjector';
|
|
21
25
|
export * from './transformers/SqlPaginationInjector';
|
|
26
|
+
export * from './transformers/DynamicQueryBuilder';
|
|
22
27
|
export * from './utils/SqlSchemaValidator';
|
|
28
|
+
export * from './utils/JsonSchemaValidator';
|
|
23
29
|
export * from './utils/SchemaManager';
|
package/dist/src/index.js
CHANGED
|
@@ -14,6 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.isLegacyFormat = exports.isUnifiedFormat = exports.isModelDrivenFormat = exports.unifyJsonMapping = exports.processJsonMapping = exports.validateModelDrivenMapping = exports.convertModelDrivenMapping = void 0;
|
|
17
18
|
// Entry point for rawsql-ts package
|
|
18
19
|
__exportStar(require("./parsers/SelectQueryParser"), exports);
|
|
19
20
|
__exportStar(require("./parsers/InsertQueryParser"), exports);
|
|
@@ -31,12 +32,25 @@ __exportStar(require("./transformers/SelectValueCollector"), exports);
|
|
|
31
32
|
__exportStar(require("./transformers/SelectableColumnCollector"), exports);
|
|
32
33
|
__exportStar(require("./transformers/TableColumnResolver"), exports);
|
|
33
34
|
__exportStar(require("./transformers/TableSourceCollector"), exports);
|
|
35
|
+
__exportStar(require("./transformers/UnifiedJsonMapping"), exports);
|
|
36
|
+
var ModelDrivenJsonMapping_1 = require("./transformers/ModelDrivenJsonMapping");
|
|
37
|
+
Object.defineProperty(exports, "convertModelDrivenMapping", { enumerable: true, get: function () { return ModelDrivenJsonMapping_1.convertModelDrivenMapping; } });
|
|
38
|
+
Object.defineProperty(exports, "validateModelDrivenMapping", { enumerable: true, get: function () { return ModelDrivenJsonMapping_1.validateModelDrivenMapping; } });
|
|
39
|
+
var JsonMappingUnifier_1 = require("./transformers/JsonMappingUnifier");
|
|
40
|
+
Object.defineProperty(exports, "processJsonMapping", { enumerable: true, get: function () { return JsonMappingUnifier_1.processJsonMapping; } });
|
|
41
|
+
Object.defineProperty(exports, "unifyJsonMapping", { enumerable: true, get: function () { return JsonMappingUnifier_1.unifyJsonMapping; } });
|
|
42
|
+
Object.defineProperty(exports, "isModelDrivenFormat", { enumerable: true, get: function () { return JsonMappingUnifier_1.isModelDrivenFormat; } });
|
|
43
|
+
Object.defineProperty(exports, "isUnifiedFormat", { enumerable: true, get: function () { return JsonMappingUnifier_1.isUnifiedFormat; } });
|
|
44
|
+
Object.defineProperty(exports, "isLegacyFormat", { enumerable: true, get: function () { return JsonMappingUnifier_1.isLegacyFormat; } });
|
|
34
45
|
__exportStar(require("./transformers/UpstreamSelectQueryFinder"), exports);
|
|
46
|
+
__exportStar(require("./transformers/TypeTransformationPostProcessor"), exports);
|
|
35
47
|
__exportStar(require("./transformers/SchemaCollector"), exports);
|
|
36
48
|
__exportStar(require("./transformers/SqlParamInjector"), exports);
|
|
37
49
|
__exportStar(require("./transformers/SqlSortInjector"), exports);
|
|
38
50
|
__exportStar(require("./transformers/SqlPaginationInjector"), exports);
|
|
51
|
+
__exportStar(require("./transformers/DynamicQueryBuilder"), exports);
|
|
39
52
|
__exportStar(require("./utils/SqlSchemaValidator"), exports);
|
|
53
|
+
__exportStar(require("./utils/JsonSchemaValidator"), exports);
|
|
40
54
|
__exportStar(require("./utils/SchemaManager"), exports);
|
|
41
55
|
// Add more exports here if you want to expose additional public API
|
|
42
56
|
//# sourceMappingURL=index.js.map
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,oCAAoC;AACpC,8DAA4C;AAC5C,8DAA4C;AAE5C,6DAA2C;AAC3C,uDAAqC;AACrC,0DAAwC;AACxC,uDAAqC;AAErC,8DAA4C;AAC5C,+DAA6C;AAC7C,2DAAyC;AACzC,8DAA4C;AAC5C,0EAAwD;AACxD,8DAA4C,CAAC,0BAA0B;AACvE,sEAAoD;AACpD,2EAAyD;AACzD,qEAAmD;AACnD,sEAAoD;AACpD,oEAAkD;AAClD,gFAQ+C;AAN3C,mIAAA,yBAAyB,OAAA;AACzB,oIAAA,0BAA0B,OAAA;AAM9B,wEAM2C;AALvC,wHAAA,kBAAkB,OAAA;AAClB,sHAAA,gBAAgB,OAAA;AAChB,yHAAA,mBAAmB,OAAA;AACnB,qHAAA,eAAe,OAAA;AACf,oHAAA,cAAc,OAAA;AAElB,2EAAyD;AACzD,iFAA+D;AAE/D,iEAA+C;AAC/C,kEAAgD;AAChD,iEAA+C;AAC/C,uEAAqD;AACrD,qEAAmD;AAEnD,6DAA2C;AAC3C,8DAA4C;AAC5C,wDAAsC;AACtC,oEAAoE"}
|
|
@@ -15,15 +15,19 @@ const trie = new KeywordTrie_1.KeywordTrie([
|
|
|
15
15
|
["is", "distinct", "from"],
|
|
16
16
|
["is", "not", "distinct", "from"],
|
|
17
17
|
["like"],
|
|
18
|
+
["ilike"],
|
|
18
19
|
["in"],
|
|
19
20
|
["exists"],
|
|
20
21
|
["between"],
|
|
21
22
|
["not", "like"],
|
|
23
|
+
["not", "ilike"],
|
|
22
24
|
["not", "in"],
|
|
23
25
|
["not", "exists"],
|
|
24
26
|
["not", "between"],
|
|
25
27
|
["escape"], // e.g. '10% OFF on all items' like '10\%%' escape '\'
|
|
26
28
|
["uescape"], // e.g. U&'d!0061t!+000061' uescape '!'
|
|
29
|
+
["similar", "to"], // e.g. name similar to 'J(ohn|ane)%'
|
|
30
|
+
["not", "similar", "to"], // e.g. name not similar to 'J(ohn|ane)%'
|
|
27
31
|
["similar"], // e.g. substring('abcdef' similar '%#"cd#"%' escape '#')
|
|
28
32
|
["placing"], // e.g. overlay('abcdef' placing 'cd' from 3 for 2)
|
|
29
33
|
// unary
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OperatorTokenReader.js","sourceRoot":"","sources":["../../../src/tokenReaders/OperatorTokenReader.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"OperatorTokenReader.js","sourceRoot":"","sources":["../../../src/tokenReaders/OperatorTokenReader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { SelectQuery } from "../models/SelectQuery";
|
|
2
|
+
/**
|
|
3
|
+
* CTE dependency tree node for visualization
|
|
4
|
+
*/
|
|
5
|
+
export interface CTENode {
|
|
6
|
+
name: string;
|
|
7
|
+
columns: string[];
|
|
8
|
+
dependencies: string[];
|
|
9
|
+
dependents: string[];
|
|
10
|
+
query: SelectQuery;
|
|
11
|
+
level: number;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* CTE dependency graph for debugging complex queries
|
|
15
|
+
*/
|
|
16
|
+
export interface CTEGraph {
|
|
17
|
+
nodes: Map<string, CTENode>;
|
|
18
|
+
rootNodes: string[];
|
|
19
|
+
leafNodes: string[];
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Debug utility for visualizing CTE dependencies and column search paths
|
|
23
|
+
*/
|
|
24
|
+
export declare class CTEDependencyTracer {
|
|
25
|
+
private columnCollector;
|
|
26
|
+
private silent;
|
|
27
|
+
constructor(options?: {
|
|
28
|
+
silent?: boolean;
|
|
29
|
+
});
|
|
30
|
+
/**
|
|
31
|
+
* Build complete CTE dependency graph
|
|
32
|
+
*/
|
|
33
|
+
buildGraph(query: SelectQuery): CTEGraph;
|
|
34
|
+
/**
|
|
35
|
+
* Trace column search path through CTE dependencies
|
|
36
|
+
*/
|
|
37
|
+
traceColumnSearch(query: SelectQuery, columnName: string): {
|
|
38
|
+
searchPath: string[];
|
|
39
|
+
foundIn: string[];
|
|
40
|
+
notFoundIn: string[];
|
|
41
|
+
graph: CTEGraph;
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Print visual representation of CTE dependency graph
|
|
45
|
+
*/
|
|
46
|
+
printGraph(graph: CTEGraph): void;
|
|
47
|
+
/**
|
|
48
|
+
* Print column search trace
|
|
49
|
+
*/
|
|
50
|
+
printColumnTrace(columnName: string, trace: ReturnType<typeof this.traceColumnSearch>): void;
|
|
51
|
+
/**
|
|
52
|
+
* Find CTEs that are actually referenced in the given query.
|
|
53
|
+
* Uses TableSourceCollector to properly identify table references from the AST.
|
|
54
|
+
*/
|
|
55
|
+
private findReferencedCTEs;
|
|
56
|
+
private calculateLevels;
|
|
57
|
+
private getSearchOrder;
|
|
58
|
+
}
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CTEDependencyTracer = void 0;
|
|
4
|
+
const SelectQuery_1 = require("../models/SelectQuery");
|
|
5
|
+
const CTECollector_1 = require("./CTECollector");
|
|
6
|
+
const SelectableColumnCollector_1 = require("./SelectableColumnCollector");
|
|
7
|
+
const TableSourceCollector_1 = require("./TableSourceCollector");
|
|
8
|
+
/**
|
|
9
|
+
* Debug utility for visualizing CTE dependencies and column search paths
|
|
10
|
+
*/
|
|
11
|
+
class CTEDependencyTracer {
|
|
12
|
+
constructor(options) {
|
|
13
|
+
var _a;
|
|
14
|
+
this.columnCollector = new SelectableColumnCollector_1.SelectableColumnCollector();
|
|
15
|
+
this.silent = (_a = options === null || options === void 0 ? void 0 : options.silent) !== null && _a !== void 0 ? _a : false;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Build complete CTE dependency graph
|
|
19
|
+
*/
|
|
20
|
+
buildGraph(query) {
|
|
21
|
+
const cteCollector = new CTECollector_1.CTECollector();
|
|
22
|
+
const ctes = cteCollector.collect(query);
|
|
23
|
+
const nodes = new Map();
|
|
24
|
+
// First pass: Create all nodes
|
|
25
|
+
ctes.forEach(cte => {
|
|
26
|
+
const cteName = cte.getSourceAliasName();
|
|
27
|
+
let columns = [];
|
|
28
|
+
try {
|
|
29
|
+
const columnRefs = this.columnCollector.collect(cte.query);
|
|
30
|
+
columns = columnRefs.map(col => col.name);
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
if (!this.silent) {
|
|
34
|
+
console.warn(`Failed to collect columns for CTE ${cteName}: ${error instanceof Error ? error.message : String(error)}`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
nodes.set(cteName, {
|
|
38
|
+
name: cteName,
|
|
39
|
+
columns,
|
|
40
|
+
dependencies: [],
|
|
41
|
+
dependents: [],
|
|
42
|
+
query: cte.query,
|
|
43
|
+
level: 0
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
// Second pass: Build dependencies
|
|
47
|
+
ctes.forEach(cte => {
|
|
48
|
+
const cteName = cte.getSourceAliasName();
|
|
49
|
+
const node = nodes.get(cteName);
|
|
50
|
+
// Find all CTEs referenced in this CTE's query
|
|
51
|
+
const referencedCTEs = this.findReferencedCTEs(cte.query, nodes);
|
|
52
|
+
node.dependencies = referencedCTEs;
|
|
53
|
+
// Update dependents
|
|
54
|
+
referencedCTEs.forEach(depName => {
|
|
55
|
+
const depNode = nodes.get(depName);
|
|
56
|
+
if (depNode && !depNode.dependents.includes(cteName)) {
|
|
57
|
+
depNode.dependents.push(cteName);
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
// Third pass: Calculate levels
|
|
62
|
+
this.calculateLevels(nodes);
|
|
63
|
+
// Identify root and leaf nodes
|
|
64
|
+
const rootNodes = [];
|
|
65
|
+
const leafNodes = [];
|
|
66
|
+
nodes.forEach((node, name) => {
|
|
67
|
+
if (node.dependencies.length === 0) {
|
|
68
|
+
rootNodes.push(name);
|
|
69
|
+
}
|
|
70
|
+
if (node.dependents.length === 0) {
|
|
71
|
+
leafNodes.push(name);
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
return { nodes, rootNodes, leafNodes };
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Trace column search path through CTE dependencies
|
|
78
|
+
*/
|
|
79
|
+
traceColumnSearch(query, columnName) {
|
|
80
|
+
const graph = this.buildGraph(query);
|
|
81
|
+
const searchPath = [];
|
|
82
|
+
const foundIn = [];
|
|
83
|
+
const notFoundIn = [];
|
|
84
|
+
// Start from main query
|
|
85
|
+
searchPath.push('MAIN_QUERY');
|
|
86
|
+
let mainColumns = [];
|
|
87
|
+
try {
|
|
88
|
+
// SelectableColumnCollector only supports SimpleSelectQuery
|
|
89
|
+
if (query instanceof SelectQuery_1.SimpleSelectQuery) {
|
|
90
|
+
const columnRefs = this.columnCollector.collect(query);
|
|
91
|
+
mainColumns = columnRefs.map(col => col.name);
|
|
92
|
+
}
|
|
93
|
+
else if (query instanceof SelectQuery_1.BinarySelectQuery) {
|
|
94
|
+
// For UNION/INTERSECT/EXCEPT queries, collect from all branches
|
|
95
|
+
const leftColumns = query.left instanceof SelectQuery_1.SimpleSelectQuery
|
|
96
|
+
? this.columnCollector.collect(query.left).map(col => col.name)
|
|
97
|
+
: [];
|
|
98
|
+
const rightColumns = query.right instanceof SelectQuery_1.SimpleSelectQuery
|
|
99
|
+
? this.columnCollector.collect(query.right).map(col => col.name)
|
|
100
|
+
: [];
|
|
101
|
+
// Combine and deduplicate columns from both branches
|
|
102
|
+
const allColumns = [...leftColumns, ...rightColumns];
|
|
103
|
+
mainColumns = [...new Set(allColumns)];
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
if (!this.silent) {
|
|
108
|
+
console.warn(`Failed to collect columns from main query: ${error instanceof Error ? error.message : String(error)}`);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
if (mainColumns.some(col => col.toLowerCase() === columnName.toLowerCase())) {
|
|
112
|
+
foundIn.push('MAIN_QUERY');
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
notFoundIn.push('MAIN_QUERY');
|
|
116
|
+
}
|
|
117
|
+
// Search through CTEs in dependency order (leaf to root)
|
|
118
|
+
const visited = new Set();
|
|
119
|
+
const searchOrder = this.getSearchOrder(graph);
|
|
120
|
+
searchOrder.forEach(cteName => {
|
|
121
|
+
if (visited.has(cteName))
|
|
122
|
+
return;
|
|
123
|
+
visited.add(cteName);
|
|
124
|
+
searchPath.push(cteName);
|
|
125
|
+
const node = graph.nodes.get(cteName);
|
|
126
|
+
if (node.columns.some(col => col.toLowerCase() === columnName.toLowerCase())) {
|
|
127
|
+
foundIn.push(cteName);
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
notFoundIn.push(cteName);
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
return { searchPath, foundIn, notFoundIn, graph };
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Print visual representation of CTE dependency graph
|
|
137
|
+
*/
|
|
138
|
+
printGraph(graph) {
|
|
139
|
+
if (this.silent)
|
|
140
|
+
return;
|
|
141
|
+
console.log('\n=== CTE Dependency Graph ===');
|
|
142
|
+
// Group by levels
|
|
143
|
+
const levels = new Map();
|
|
144
|
+
graph.nodes.forEach((node, name) => {
|
|
145
|
+
const level = node.level;
|
|
146
|
+
if (!levels.has(level)) {
|
|
147
|
+
levels.set(level, []);
|
|
148
|
+
}
|
|
149
|
+
levels.get(level).push(name);
|
|
150
|
+
});
|
|
151
|
+
// Print level by level
|
|
152
|
+
const maxLevel = Math.max(...Array.from(levels.keys()));
|
|
153
|
+
for (let level = 0; level <= maxLevel; level++) {
|
|
154
|
+
const nodesAtLevel = levels.get(level) || [];
|
|
155
|
+
if (nodesAtLevel.length > 0) {
|
|
156
|
+
console.log(`\nLevel ${level}:`);
|
|
157
|
+
nodesAtLevel.forEach(name => {
|
|
158
|
+
const node = graph.nodes.get(name);
|
|
159
|
+
console.log(` ${name} (${node.columns.length} cols)`);
|
|
160
|
+
if (node.dependencies.length > 0) {
|
|
161
|
+
console.log(` depends on: ${node.dependencies.join(', ')}`);
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Print column search trace
|
|
169
|
+
*/
|
|
170
|
+
printColumnTrace(columnName, trace) {
|
|
171
|
+
if (this.silent)
|
|
172
|
+
return;
|
|
173
|
+
console.log(`\n=== Column Search Trace for "${columnName}" ===`);
|
|
174
|
+
console.log(`Search path: ${trace.searchPath.join(' → ')}`);
|
|
175
|
+
console.log(`Found in: ${trace.foundIn.length > 0 ? trace.foundIn.join(', ') : 'NONE'}`);
|
|
176
|
+
console.log(`Not found in: ${trace.notFoundIn.join(', ')}`);
|
|
177
|
+
if (trace.foundIn.length > 0) {
|
|
178
|
+
console.log('\n--- Details of CTEs containing the column ---');
|
|
179
|
+
trace.foundIn.forEach(cteName => {
|
|
180
|
+
if (cteName === 'MAIN_QUERY')
|
|
181
|
+
return;
|
|
182
|
+
const node = trace.graph.nodes.get(cteName);
|
|
183
|
+
if (node) {
|
|
184
|
+
console.log(`${cteName}:`);
|
|
185
|
+
console.log(` All columns: ${node.columns.join(', ')}`);
|
|
186
|
+
console.log(` Dependencies: ${node.dependencies.length > 0 ? node.dependencies.join(', ') : 'none'}`);
|
|
187
|
+
}
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Find CTEs that are actually referenced in the given query.
|
|
193
|
+
* Uses TableSourceCollector to properly identify table references from the AST.
|
|
194
|
+
*/
|
|
195
|
+
findReferencedCTEs(query, allCTEs) {
|
|
196
|
+
// Use TableSourceCollector to get all table references from the query
|
|
197
|
+
const tableCollector = new TableSourceCollector_1.TableSourceCollector();
|
|
198
|
+
const tableSources = tableCollector.collect(query);
|
|
199
|
+
const referenced = [];
|
|
200
|
+
// Check each table source to see if it matches a CTE name
|
|
201
|
+
for (const source of tableSources) {
|
|
202
|
+
const tableName = source.table.name;
|
|
203
|
+
if (tableName && allCTEs.has(tableName)) {
|
|
204
|
+
if (!referenced.includes(tableName)) {
|
|
205
|
+
referenced.push(tableName);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
return referenced;
|
|
210
|
+
}
|
|
211
|
+
calculateLevels(nodes) {
|
|
212
|
+
const visited = new Set();
|
|
213
|
+
const calculateLevel = (nodeName) => {
|
|
214
|
+
if (visited.has(nodeName)) {
|
|
215
|
+
return nodes.get(nodeName).level;
|
|
216
|
+
}
|
|
217
|
+
visited.add(nodeName);
|
|
218
|
+
const node = nodes.get(nodeName);
|
|
219
|
+
if (node.dependencies.length === 0) {
|
|
220
|
+
node.level = 0;
|
|
221
|
+
return 0;
|
|
222
|
+
}
|
|
223
|
+
let maxDepLevel = -1;
|
|
224
|
+
node.dependencies.forEach(depName => {
|
|
225
|
+
const depLevel = calculateLevel(depName);
|
|
226
|
+
maxDepLevel = Math.max(maxDepLevel, depLevel);
|
|
227
|
+
});
|
|
228
|
+
node.level = maxDepLevel + 1;
|
|
229
|
+
return node.level;
|
|
230
|
+
};
|
|
231
|
+
nodes.forEach((_, name) => calculateLevel(name));
|
|
232
|
+
}
|
|
233
|
+
getSearchOrder(graph) {
|
|
234
|
+
// Return CTEs in order from leaf to root (level descending)
|
|
235
|
+
const ordered = [];
|
|
236
|
+
const levels = new Map();
|
|
237
|
+
graph.nodes.forEach((node, name) => {
|
|
238
|
+
const level = node.level;
|
|
239
|
+
if (!levels.has(level)) {
|
|
240
|
+
levels.set(level, []);
|
|
241
|
+
}
|
|
242
|
+
levels.get(level).push(name);
|
|
243
|
+
});
|
|
244
|
+
const maxLevel = Math.max(...Array.from(levels.keys()));
|
|
245
|
+
for (let level = maxLevel; level >= 0; level--) {
|
|
246
|
+
const nodesAtLevel = levels.get(level) || [];
|
|
247
|
+
ordered.push(...nodesAtLevel);
|
|
248
|
+
}
|
|
249
|
+
return ordered;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
exports.CTEDependencyTracer = CTEDependencyTracer;
|
|
253
|
+
//# sourceMappingURL=CTEDependencyTracer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CTEDependencyTracer.js","sourceRoot":"","sources":["../../../src/transformers/CTEDependencyTracer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { SelectQuery } from "../models/SelectQuery";
|
|
2
|
+
import { SortConditions } from "./SqlSortInjector";
|
|
3
|
+
import { PaginationOptions } from "./SqlPaginationInjector";
|
|
4
|
+
import { JsonMapping } from "./PostgresJsonQueryBuilder";
|
|
5
|
+
/**
|
|
6
|
+
* Options for dynamic query building
|
|
7
|
+
*/
|
|
8
|
+
export interface QueryBuildOptions {
|
|
9
|
+
/** Filter conditions to inject into WHERE clause */
|
|
10
|
+
filter?: Record<string, any>;
|
|
11
|
+
/** Sort conditions to inject into ORDER BY clause */
|
|
12
|
+
sort?: SortConditions;
|
|
13
|
+
/** Pagination options to inject LIMIT/OFFSET clauses */
|
|
14
|
+
paging?: PaginationOptions;
|
|
15
|
+
/** JSON serialization mapping to transform results into hierarchical JSON
|
|
16
|
+
* - JsonMapping object: explicit mapping configuration
|
|
17
|
+
* - true: auto-load mapping from corresponding .json file
|
|
18
|
+
* - false/undefined: no serialization
|
|
19
|
+
*/
|
|
20
|
+
serialize?: JsonMapping | boolean;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* DynamicQueryBuilder provides pure JavaScript SQL query building capabilities.
|
|
24
|
+
* It combines SQL parsing with dynamic condition injection (filtering, sorting, pagination, serialization).
|
|
25
|
+
*
|
|
26
|
+
* This class is framework-agnostic and does not perform any file I/O operations.
|
|
27
|
+
* It only works with SQL content provided as strings.
|
|
28
|
+
*
|
|
29
|
+
* Key features:
|
|
30
|
+
* - Pure JavaScript/TypeScript - no file system dependencies
|
|
31
|
+
* - Framework-agnostic - can be used with any database framework
|
|
32
|
+
* - Composable - combines multiple injectors in the correct order
|
|
33
|
+
* - Type-safe - provides TypeScript types for all options
|
|
34
|
+
* - Testable - easy to unit test without mocking file system
|
|
35
|
+
*/
|
|
36
|
+
export declare class DynamicQueryBuilder {
|
|
37
|
+
private tableColumnResolver?;
|
|
38
|
+
/**
|
|
39
|
+
* Creates a new DynamicQueryBuilder instance
|
|
40
|
+
* @param tableColumnResolver Optional function to resolve table columns for wildcard queries
|
|
41
|
+
*/
|
|
42
|
+
constructor(tableColumnResolver?: (tableName: string) => string[]);
|
|
43
|
+
/**
|
|
44
|
+
* Builds a SelectQuery from SQL content with dynamic conditions.
|
|
45
|
+
* This is a pure function that does not perform any I/O operations.
|
|
46
|
+
* * @param sqlContent Raw SQL string to parse and modify
|
|
47
|
+
* @param options Dynamic conditions to apply (filter, sort, paging, serialize)
|
|
48
|
+
* @returns Modified SelectQuery with all dynamic conditions applied
|
|
49
|
+
* * @example
|
|
50
|
+
* ```typescript
|
|
51
|
+
* const builder = new DynamicQueryBuilder();
|
|
52
|
+
* const query = builder.buildQuery(
|
|
53
|
+
* 'SELECT id, name FROM users WHERE active = true',
|
|
54
|
+
* {
|
|
55
|
+
* filter: { status: 'premium' },
|
|
56
|
+
* sort: { created_at: { desc: true } },
|
|
57
|
+
* paging: { page: 2, pageSize: 10 },
|
|
58
|
+
* serialize: { rootName: 'user', rootEntity: { id: 'user', name: 'User', columns: { id: 'id', name: 'name' } }, nestedEntities: [] }
|
|
59
|
+
* }
|
|
60
|
+
* );
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
buildQuery(sqlContent: string, options?: QueryBuildOptions): SelectQuery;
|
|
64
|
+
/**
|
|
65
|
+
* Builds a SelectQuery with only filtering applied.
|
|
66
|
+
* Convenience method for when you only need dynamic WHERE conditions.
|
|
67
|
+
*
|
|
68
|
+
* @param sqlContent Raw SQL string to parse and modify
|
|
69
|
+
* @param filter Filter conditions to apply
|
|
70
|
+
* @returns Modified SelectQuery with filter conditions applied
|
|
71
|
+
*/
|
|
72
|
+
buildFilteredQuery(sqlContent: string, filter: Record<string, any>): SelectQuery;
|
|
73
|
+
/**
|
|
74
|
+
* Builds a SelectQuery with only sorting applied.
|
|
75
|
+
* Convenience method for when you only need dynamic ORDER BY clauses.
|
|
76
|
+
*
|
|
77
|
+
* @param sqlContent Raw SQL string to parse and modify
|
|
78
|
+
* @param sort Sort conditions to apply
|
|
79
|
+
* @returns Modified SelectQuery with sort conditions applied
|
|
80
|
+
*/
|
|
81
|
+
buildSortedQuery(sqlContent: string, sort: SortConditions): SelectQuery; /**
|
|
82
|
+
* Builds a SelectQuery with only pagination applied.
|
|
83
|
+
* Convenience method for when you only need LIMIT/OFFSET clauses.
|
|
84
|
+
*
|
|
85
|
+
* @param sqlContent Raw SQL string to parse and modify
|
|
86
|
+
* @param paging Pagination options to apply
|
|
87
|
+
* @returns Modified SelectQuery with pagination applied
|
|
88
|
+
*/
|
|
89
|
+
buildPaginatedQuery(sqlContent: string, paging: PaginationOptions): SelectQuery;
|
|
90
|
+
/**
|
|
91
|
+
* Builds a SelectQuery with only JSON serialization applied.
|
|
92
|
+
* Convenience method for when you only need hierarchical JSON transformation.
|
|
93
|
+
*
|
|
94
|
+
* @param sqlContent Raw SQL string to parse and modify
|
|
95
|
+
* @param serialize JSON mapping configuration to apply
|
|
96
|
+
* @returns Modified SelectQuery with JSON serialization applied
|
|
97
|
+
*/
|
|
98
|
+
buildSerializedQuery(sqlContent: string, serialize: JsonMapping): SelectQuery;
|
|
99
|
+
/**
|
|
100
|
+
* Validates SQL content by attempting to parse it.
|
|
101
|
+
* Useful for testing SQL validity without applying any modifications.
|
|
102
|
+
*
|
|
103
|
+
* @param sqlContent Raw SQL string to validate
|
|
104
|
+
* @returns true if SQL is valid, throws error if invalid
|
|
105
|
+
* @throws Error if SQL cannot be parsed
|
|
106
|
+
*/
|
|
107
|
+
validateSql(sqlContent: string): boolean;
|
|
108
|
+
}
|