rawsql-ts 0.9.0-beta → 0.10.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.
Files changed (56) hide show
  1. package/README.md +90 -7
  2. package/dist/esm/index.js +2 -0
  3. package/dist/esm/index.js.map +1 -1
  4. package/dist/esm/models/SqlPrintToken.js +2 -0
  5. package/dist/esm/models/SqlPrintToken.js.map +1 -1
  6. package/dist/esm/models/ValueComponent.js +13 -12
  7. package/dist/esm/models/ValueComponent.js.map +1 -1
  8. package/dist/esm/parsers/SqlPrintTokenParser.js +24 -6
  9. package/dist/esm/parsers/SqlPrintTokenParser.js.map +1 -1
  10. package/dist/esm/transformers/PostgresArrayEntityCteBuilder.js +231 -0
  11. package/dist/esm/transformers/PostgresArrayEntityCteBuilder.js.map +1 -0
  12. package/dist/esm/transformers/PostgresJsonQueryBuilder.js +226 -0
  13. package/dist/esm/transformers/PostgresJsonQueryBuilder.js.map +1 -0
  14. package/dist/esm/transformers/PostgresObjectEntityCteBuilder.js +283 -0
  15. package/dist/esm/transformers/PostgresObjectEntityCteBuilder.js.map +1 -0
  16. package/dist/esm/transformers/SqlPrinter.js +9 -3
  17. package/dist/esm/transformers/SqlPrinter.js.map +1 -1
  18. package/dist/esm/types/index.d.ts +2 -0
  19. package/dist/esm/types/models/SqlPrintToken.d.ts +2 -0
  20. package/dist/esm/types/models/ValueComponent.d.ts +2 -2
  21. package/dist/esm/types/transformers/PostgresArrayEntityCteBuilder.d.ts +97 -0
  22. package/dist/esm/types/transformers/PostgresJsonQueryBuilder.d.ts +86 -0
  23. package/dist/esm/types/transformers/PostgresObjectEntityCteBuilder.d.ts +140 -0
  24. package/dist/esm/types/utils/SchemaManager.d.ts +132 -0
  25. package/dist/esm/utils/SchemaManager.js +194 -0
  26. package/dist/esm/utils/SchemaManager.js.map +1 -0
  27. package/dist/index.d.ts +2 -0
  28. package/dist/index.js +2 -0
  29. package/dist/index.js.map +1 -1
  30. package/dist/models/SqlPrintToken.d.ts +2 -0
  31. package/dist/models/SqlPrintToken.js +2 -0
  32. package/dist/models/SqlPrintToken.js.map +1 -1
  33. package/dist/models/ValueComponent.d.ts +2 -2
  34. package/dist/models/ValueComponent.js +13 -12
  35. package/dist/models/ValueComponent.js.map +1 -1
  36. package/dist/parsers/SelectQueryParser.js +3 -14
  37. package/dist/parsers/SelectQueryParser.js.map +1 -1
  38. package/dist/parsers/SqlPrintTokenParser.js +25 -7
  39. package/dist/parsers/SqlPrintTokenParser.js.map +1 -1
  40. package/dist/transformers/PostgresArrayEntityCteBuilder.d.ts +97 -0
  41. package/dist/transformers/PostgresArrayEntityCteBuilder.js +235 -0
  42. package/dist/transformers/PostgresArrayEntityCteBuilder.js.map +1 -0
  43. package/dist/transformers/PostgresJsonQueryBuilder.d.ts +86 -0
  44. package/dist/transformers/PostgresJsonQueryBuilder.js +230 -0
  45. package/dist/transformers/PostgresJsonQueryBuilder.js.map +1 -0
  46. package/dist/transformers/PostgresObjectEntityCteBuilder.d.ts +140 -0
  47. package/dist/transformers/PostgresObjectEntityCteBuilder.js +287 -0
  48. package/dist/transformers/PostgresObjectEntityCteBuilder.js.map +1 -0
  49. package/dist/transformers/SqlFormatter.js +6 -1
  50. package/dist/transformers/SqlFormatter.js.map +1 -1
  51. package/dist/transformers/SqlPrinter.js +9 -3
  52. package/dist/transformers/SqlPrinter.js.map +1 -1
  53. package/dist/utils/SchemaManager.d.ts +132 -0
  54. package/dist/utils/SchemaManager.js +201 -0
  55. package/dist/utils/SchemaManager.js.map +1 -0
  56. package/package.json +1 -1
@@ -0,0 +1,226 @@
1
+ import { CommonTable, SourceAliasExpression, SelectItem, SelectClause, FromClause, SourceExpression, TableSource, WithClause, LimitClause } from '../models/Clause';
2
+ import { SimpleSelectQuery } from '../models/SimpleSelectQuery';
3
+ import { IdentifierString, ColumnReference, FunctionCall, ValueList, LiteralValue, RawString } from '../models/ValueComponent';
4
+ import { SelectValueCollector } from "./SelectValueCollector";
5
+ import { PostgresObjectEntityCteBuilder } from './PostgresObjectEntityCteBuilder';
6
+ import { PostgresArrayEntityCteBuilder } from './PostgresArrayEntityCteBuilder';
7
+ /**
8
+ * PostgreSQL JSON query builder that transforms SimpleSelectQuery into queries
9
+ * that return JSON arrays or single JSON objects using PostgreSQL JSON functions.
10
+ */
11
+ export class PostgresJsonQueryBuilder {
12
+ constructor() {
13
+ this.selectValueCollector = new SelectValueCollector(null);
14
+ this.objectEntityCteBuilder = new PostgresObjectEntityCteBuilder();
15
+ this.arrayEntityCteBuilder = new PostgresArrayEntityCteBuilder();
16
+ }
17
+ /**
18
+ * Validates the JSON mapping and the original query.
19
+ * @param query Original query to transform
20
+ * @param mapping JSON mapping configuration
21
+ */
22
+ validateMapping(query, mapping) {
23
+ var _a, _b;
24
+ const collector = new SelectValueCollector();
25
+ const selectedValues = collector.collect(query);
26
+ // sv.name is the alias or derived name
27
+ const availableColumns = new Set(selectedValues.map(sv => sv.name));
28
+ // Check root entity columns
29
+ for (const jsonKey in mapping.rootEntity.columns) {
30
+ const sourceColumn = mapping.rootEntity.columns[jsonKey];
31
+ if (!availableColumns.has(sourceColumn)) {
32
+ throw new Error(`Validation Error: Column "${sourceColumn}" for JSON key "${jsonKey}" in root entity "${mapping.rootEntity.name}" not found in the query's select list.`);
33
+ }
34
+ }
35
+ // Check nested entity columns and parent-child relationships
36
+ const entityIds = new Set([mapping.rootEntity.id]);
37
+ const parentToChildrenMap = new Map();
38
+ mapping.nestedEntities.forEach(ne => {
39
+ entityIds.add(ne.id);
40
+ if (!parentToChildrenMap.has(ne.parentId)) {
41
+ parentToChildrenMap.set(ne.parentId, []);
42
+ }
43
+ parentToChildrenMap.get(ne.parentId).push(ne.id);
44
+ });
45
+ for (const entity of mapping.nestedEntities) {
46
+ if (!entityIds.has(entity.parentId)) {
47
+ throw new Error(`Validation Error: Parent entity with ID "${entity.parentId}" for nested entity "${entity.name}" (ID: ${entity.id}) not found.`);
48
+ }
49
+ for (const jsonKey in entity.columns) {
50
+ const sourceColumn = entity.columns[jsonKey];
51
+ if (!availableColumns.has(sourceColumn)) {
52
+ throw new Error(`Validation Error: Column "${sourceColumn}" for JSON key "${jsonKey}" in nested entity "${entity.name}" (ID: ${entity.id}) not found in the query's select list.`);
53
+ }
54
+ }
55
+ }
56
+ // Validate: An entity should not have multiple direct array children.
57
+ // Validate: Child propertyNames under a single parent must be unique.
58
+ const allParentIds = new Set([mapping.rootEntity.id, ...mapping.nestedEntities.map(ne => ne.parentId)]);
59
+ for (const parentId of allParentIds) {
60
+ const directChildren = mapping.nestedEntities.filter(ne => ne.parentId === parentId);
61
+ const directArrayChildrenCount = directChildren.filter(c => c.relationshipType === 'array').length;
62
+ if (directArrayChildrenCount > 1) {
63
+ const parentName = parentId === mapping.rootEntity.id ? mapping.rootEntity.name : (_a = mapping.nestedEntities.find(ne => ne.id === parentId)) === null || _a === void 0 ? void 0 : _a.name;
64
+ throw new Error(`Validation Error: Parent entity "${parentName}" (ID: ${parentId}) has multiple direct array children. This is not supported.`);
65
+ }
66
+ const propertyNames = new Set();
67
+ for (const child of directChildren) {
68
+ if (propertyNames.has(child.propertyName)) {
69
+ const parentName = parentId === mapping.rootEntity.id ? mapping.rootEntity.name : (_b = mapping.nestedEntities.find(ne => ne.id === parentId)) === null || _b === void 0 ? void 0 : _b.name;
70
+ throw new Error(`Validation Error: Parent entity "${parentName}" (ID: ${parentId}) has duplicate property name "${child.propertyName}" for its children.`);
71
+ }
72
+ propertyNames.add(child.propertyName);
73
+ }
74
+ }
75
+ }
76
+ /**
77
+ * Build JSON query from original query and mapping configuration.
78
+ * @param originalQuery Original query to transform
79
+ * @param mapping JSON mapping configuration
80
+ * @returns Transformed query with JSON aggregation
81
+ */
82
+ buildJsonQuery(originalQuery, mapping) {
83
+ return this.buildJsonWithCteStrategy(originalQuery, mapping);
84
+ }
85
+ /**
86
+ * Build JSON query from original query and mapping configuration.
87
+ * @deprecated Use buildJsonQuery instead. This method will be removed in a future version.
88
+ * @param originalQuery Original query to transform
89
+ * @param mapping JSON mapping configuration
90
+ * @returns Transformed query with JSON aggregation
91
+ */
92
+ buildJson(originalQuery, mapping) {
93
+ console.warn('buildJson is deprecated. Use buildJsonQuery instead.');
94
+ return this.buildJsonQuery(originalQuery, mapping);
95
+ }
96
+ /**
97
+ * Builds the JSON structure using a unified CTE-based strategy.
98
+ * @param originalQuery Original query
99
+ * @param mapping JSON mapping configuration
100
+ * @returns Query with CTE-based JSON aggregation
101
+ */
102
+ buildJsonWithCteStrategy(originalQuery, mapping) {
103
+ this.validateMapping(originalQuery, mapping);
104
+ // Step 1: Create the initial CTE from the original query
105
+ const { initialCte, initialCteAlias } = this.createInitialCte(originalQuery);
106
+ let ctesForProcessing = [initialCte];
107
+ let currentAliasToBuildUpon = initialCteAlias;
108
+ // Step 2: Prepare entity information
109
+ const allEntities = new Map();
110
+ allEntities.set(mapping.rootEntity.id, Object.assign(Object.assign({}, mapping.rootEntity), { isRoot: true, propertyName: mapping.rootName }));
111
+ mapping.nestedEntities.forEach(ne => allEntities.set(ne.id, Object.assign(Object.assign({}, ne), { isRoot: false, propertyName: ne.propertyName }))); // Step 2.5: Build CTEs for object entities using dedicated builder
112
+ const objectEntityResult = this.objectEntityCteBuilder.buildObjectEntityCtes(initialCte, allEntities, mapping);
113
+ // Important: Replace the entire CTE list with the result from object entity builder
114
+ // The object entity builder returns all CTEs including the initial one
115
+ ctesForProcessing = objectEntityResult.ctes;
116
+ currentAliasToBuildUpon = objectEntityResult.lastCteAlias;
117
+ // Step 3: Build CTEs for array entities using dedicated builder
118
+ const arrayCteBuildResult = this.arrayEntityCteBuilder.buildArrayEntityCtes(ctesForProcessing, currentAliasToBuildUpon, allEntities, mapping);
119
+ ctesForProcessing = arrayCteBuildResult.updatedCtes;
120
+ currentAliasToBuildUpon = arrayCteBuildResult.lastCteAlias;
121
+ // Step 4: Build the final SELECT query using all generated CTEs
122
+ return this.buildFinalSelectQuery(ctesForProcessing, currentAliasToBuildUpon, allEntities, mapping);
123
+ }
124
+ /**
125
+ * Creates the initial Common Table Expression (CTE) from the original query.
126
+ * @param originalQuery The base SimpleSelectQuery.
127
+ * @returns An object containing the initial CTE and its alias.
128
+ */
129
+ createInitialCte(originalQuery) {
130
+ const originCteAlias = "origin_query";
131
+ const originCte = new CommonTable(originalQuery, new SourceAliasExpression(originCteAlias, null), null);
132
+ return { initialCte: originCte, initialCteAlias: originCteAlias };
133
+ }
134
+ /**
135
+ * Builds the final SELECT query that constructs the root JSON object (or array of objects).
136
+ * This query uses all previously generated CTEs.
137
+ * @param finalCtesList The complete list of all CTEs (initial and array CTEs).
138
+ * @param lastCteAliasForFromClause Alias of the final CTE from which the root object will be built.
139
+ * @param allEntities Map of all processable entities.
140
+ * @param mapping JSON mapping configuration.
141
+ * @returns The final SimpleSelectQuery.
142
+ */
143
+ buildFinalSelectQuery(finalCtesList, lastCteAliasForFromClause, allEntities, mapping) {
144
+ const currentCtes = [...finalCtesList];
145
+ // Define rootObjectCteAlias outside of if block
146
+ const rootObjectCteAlias = `cte_root_${mapping.rootName.toLowerCase().replace(/[^a-z0-9_]/g, '_')}`;
147
+ const rootEntity = allEntities.get(mapping.rootEntity.id);
148
+ if (!rootEntity) {
149
+ throw new Error(`Root entity ${mapping.rootEntity.id} not found`);
150
+ }
151
+ if (mapping.resultFormat === "array" || !mapping.resultFormat) {
152
+ // Step 4.1a: Create a CTE that wraps the final result as the root object
153
+ // No alias needed for single table SELECT
154
+ const rootObjectBuilderExpression = this.buildEntityJsonObject(rootEntity, null, // No source alias for single table
155
+ mapping.nestedEntities, allEntities, mapping.useJsonb);
156
+ const rootObjectSelectItem = new SelectItem(rootObjectBuilderExpression, mapping.rootName);
157
+ const rootObjectCte = new CommonTable(new SimpleSelectQuery({
158
+ selectClause: new SelectClause([rootObjectSelectItem]),
159
+ fromClause: new FromClause(new SourceExpression(new TableSource(null, new IdentifierString(lastCteAliasForFromClause)), null // No alias
160
+ ), null),
161
+ }), new SourceAliasExpression(rootObjectCteAlias, null), null);
162
+ currentCtes.push(rootObjectCte);
163
+ // Step 4.1b: Aggregate all the root objects
164
+ const aggregationFunc = mapping.useJsonb ? "jsonb_agg" : "json_agg";
165
+ const aggregateExpression = new FunctionCall(null, new RawString(aggregationFunc), new ValueList([new ColumnReference(null, new IdentifierString(mapping.rootName))]), null);
166
+ return new SimpleSelectQuery({
167
+ withClause: new WithClause(false, currentCtes),
168
+ selectClause: new SelectClause([
169
+ new SelectItem(aggregateExpression, `${mapping.rootName}_array`)
170
+ ]),
171
+ fromClause: new FromClause(new SourceExpression(new TableSource(null, new IdentifierString(rootObjectCteAlias)), null), null),
172
+ });
173
+ }
174
+ else {
175
+ // For a single object result, create root object CTE without alias
176
+ const rootObjectBuilderExpression = this.buildEntityJsonObject(rootEntity, null, // No source alias for single table
177
+ mapping.nestedEntities, allEntities, mapping.useJsonb);
178
+ const rootObjectSelectItem = new SelectItem(rootObjectBuilderExpression, mapping.rootName);
179
+ const rootObjectCte = new CommonTable(new SimpleSelectQuery({
180
+ selectClause: new SelectClause([rootObjectSelectItem]),
181
+ fromClause: new FromClause(new SourceExpression(new TableSource(null, new IdentifierString(lastCteAliasForFromClause)), null // No alias
182
+ ), null),
183
+ }), new SourceAliasExpression(rootObjectCteAlias, null), null);
184
+ currentCtes.push(rootObjectCte);
185
+ // Select directly from the root_object_cte with LIMIT 1
186
+ return new SimpleSelectQuery({
187
+ withClause: new WithClause(false, currentCtes),
188
+ selectClause: new SelectClause([
189
+ new SelectItem(new ColumnReference(null, new IdentifierString(mapping.rootName)), mapping.rootName)
190
+ ]),
191
+ fromClause: new FromClause(new SourceExpression(new TableSource(null, new IdentifierString(rootObjectCteAlias)), null), null),
192
+ limitClause: new LimitClause(new LiteralValue(1)) // Correctly use LimitClause
193
+ });
194
+ }
195
+ }
196
+ /**
197
+ * Build JSON object for entity, using parent JSON columns when available
198
+ */
199
+ buildEntityJsonObject(entity, sourceAlias, nestedEntities, allEntities, useJsonb = false) {
200
+ const jsonBuildFunction = useJsonb ? "jsonb_build_object" : "json_build_object";
201
+ const args = []; // Add the entity's own columns
202
+ Object.entries(entity.columns).forEach(([jsonKey, sqlColumn]) => {
203
+ args.push(new LiteralValue(jsonKey));
204
+ args.push(new ColumnReference(null, new IdentifierString(sqlColumn)));
205
+ });
206
+ // Find and process child entities (both object and array types)
207
+ const childEntities = nestedEntities.filter((ne) => ne.parentId === entity.id);
208
+ childEntities.forEach((childEntity) => {
209
+ const child = allEntities.get(childEntity.id);
210
+ if (!child)
211
+ return;
212
+ args.push(new LiteralValue(childEntity.propertyName));
213
+ if (childEntity.relationshipType === "object") {
214
+ // For object relationships, use pre-computed JSON column
215
+ const jsonColumnName = `${child.name.toLowerCase()}_json`;
216
+ args.push(new ColumnReference(null, new IdentifierString(jsonColumnName)));
217
+ }
218
+ else if (childEntity.relationshipType === "array") {
219
+ // For array relationships, use the column directly
220
+ args.push(new ColumnReference(null, new IdentifierString(childEntity.propertyName)));
221
+ }
222
+ });
223
+ return new FunctionCall(null, new RawString(jsonBuildFunction), new ValueList(args), null);
224
+ }
225
+ }
226
+ //# sourceMappingURL=PostgresJsonQueryBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PostgresJsonQueryBuilder.js","sourceRoot":"","sources":["../../../src/transformers/PostgresJsonQueryBuilder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,283 @@
1
+ import { CommonTable, SourceAliasExpression, SelectItem, SelectClause, FromClause, SourceExpression, TableSource } from '../models/Clause';
2
+ import { SimpleSelectQuery } from '../models/SimpleSelectQuery';
3
+ import { IdentifierString, ColumnReference, FunctionCall, ValueList, LiteralValue, BinaryExpression, CaseExpression, SwitchCaseArgument, CaseKeyValuePair, RawString } from '../models/ValueComponent';
4
+ /**
5
+ * PostgreSQL-specific builder for creating CTEs for object entities (object relationships).
6
+ * This class handles the creation of CTEs that build JSON/JSONB objects for object entities,
7
+ * processing them from the deepest level up to ensure proper dependency ordering.
8
+ *
9
+ * Features:
10
+ * - Depth-based CTE naming (cte_object_depth_N)
11
+ * - NULL handling for entity columns
12
+ * - JSONB/JSON object construction
13
+ * - Hierarchical processing of nested objects
14
+ *
15
+ * Why depth calculation is critical:
16
+ * 1. Object entities can be nested at multiple levels. We must process the deepest
17
+ * (most distant) objects first to ensure their JSON representations are available
18
+ * when building their parent entities.
19
+ * 2. Object entity processing is essentially a column compression operation. Entities
20
+ * at the same depth level can be processed simultaneously since they don't depend
21
+ * on each other.
22
+ *
23
+ * Example hierarchy:
24
+ * Order (root, depth 0)
25
+ * └─ Customer (depth 1)
26
+ * └─ Address (depth 2)
27
+ * └─ Shipping (depth 1)
28
+ * └─ Carrier (depth 2)
29
+ *
30
+ * Processing order: depth 2 → depth 1 → depth 0
31
+ */
32
+ export class PostgresObjectEntityCteBuilder {
33
+ buildObjectEntityCtes(initialCte, allEntities, mapping) {
34
+ const ctes = [initialCte];
35
+ let previousCteAlias = initialCte.aliasExpression.table.name; // Collect and sort object entities by depth
36
+ const objectEntityInfos = this.collectAndSortObjectEntities(mapping, allEntities);
37
+ // Group entities by depth
38
+ const entitiesByDepth = this.groupEntitiesByDepth(objectEntityInfos);
39
+ // Process each depth level, starting from the deepest
40
+ const depths = Array.from(entitiesByDepth.keys()).sort((a, b) => b - a);
41
+ for (const depth of depths) {
42
+ const entitiesAtDepth = entitiesByDepth.get(depth);
43
+ const cteAlias = `${PostgresObjectEntityCteBuilder.CTE_OBJECT_PREFIX}${depth}`;
44
+ // Build CTE for all entities at this depth
45
+ const cte = this.buildDepthCte(entitiesAtDepth, previousCteAlias, cteAlias, mapping, allEntities);
46
+ ctes.push(cte);
47
+ previousCteAlias = cteAlias;
48
+ }
49
+ return { ctes, lastCteAlias: previousCteAlias };
50
+ } /**
51
+ * Collect all object entities and calculate their depth from root.
52
+ *
53
+ * Depth calculation is crucial because:
54
+ * - It determines the processing order (deepest first)
55
+ * - It ensures dependencies are resolved before an entity is processed
56
+ * - It allows parallel processing of entities at the same depth level
57
+ *
58
+ * @param mapping The JSON mapping configuration
59
+ * @param allEntities Map of all entities in the mapping
60
+ * @returns Array of object entity information with calculated depths
61
+ */
62
+ collectAndSortObjectEntities(mapping, allEntities) {
63
+ const objectInfos = [];
64
+ // Helper function to calculate actual object nesting depth for a given OBJECT entity
65
+ const calculateActualObjectNestingDepth = (entityIdOfObject) => {
66
+ const initialEntity = allEntities.get(entityIdOfObject);
67
+ if (!initialEntity) {
68
+ throw new Error(`Entity ${entityIdOfObject} not found for depth calculation.`);
69
+ }
70
+ // If the object itself is root, its depth is 0. (This function should ideally be called for nested entities, not the root itself as a "parent CTE" subject)
71
+ if (initialEntity.isRoot)
72
+ return 0;
73
+ // If the object is not root and has no parentId, it's considered a top-level object, depth 1.
74
+ if (!initialEntity.parentId) {
75
+ return 1;
76
+ }
77
+ let currentParentIdInHierarchy = initialEntity.parentId;
78
+ let calculatedObjectDepth = 0;
79
+ const visitedInPath = new Set();
80
+ visitedInPath.add(entityIdOfObject); // Add the starting object itself to detect cycles
81
+ while (currentParentIdInHierarchy) {
82
+ if (visitedInPath.has(currentParentIdInHierarchy)) {
83
+ throw new Error(`Circular dependency detected: ${currentParentIdInHierarchy} already visited in path for ${entityIdOfObject}`);
84
+ }
85
+ visitedInPath.add(currentParentIdInHierarchy);
86
+ const parentEntityData = allEntities.get(currentParentIdInHierarchy);
87
+ if (!parentEntityData) {
88
+ throw new Error(`Parent entity ${currentParentIdInHierarchy} not found during depth calculation for ${entityIdOfObject}`);
89
+ }
90
+ let parentIsConsideredAnObjectForNesting = false;
91
+ if (parentEntityData.isRoot) {
92
+ parentIsConsideredAnObjectForNesting = true; // Root counts as an object ancestor
93
+ }
94
+ else {
95
+ // For non-root parents, find their definition in nestedEntities to check their type
96
+ const parentDefinition = mapping.nestedEntities.find(ne => ne.id === currentParentIdInHierarchy);
97
+ if (parentDefinition) {
98
+ if (parentDefinition.relationshipType === "object") {
99
+ parentIsConsideredAnObjectForNesting = true;
100
+ }
101
+ // If parentDefinition.relationshipType === "array", it's not an object ancestor for depth counting
102
+ }
103
+ else {
104
+ // This implies currentParentIdInHierarchy refers to an entity not defined as root or in nestedEntities
105
+ // This should ideally not happen with a consistent mapping.
106
+ throw new Error(`Parent entity ${currentParentIdInHierarchy} (ancestor of ${entityIdOfObject}) has no definition in mapping.nestedEntities and is not root.`);
107
+ }
108
+ }
109
+ if (parentIsConsideredAnObjectForNesting) {
110
+ calculatedObjectDepth++;
111
+ }
112
+ if (parentEntityData.isRoot) {
113
+ break; // Stop when the root is processed as the highest object ancestor
114
+ }
115
+ currentParentIdInHierarchy = parentEntityData.parentId; // Move to the next ancestor
116
+ }
117
+ return calculatedObjectDepth;
118
+ };
119
+ mapping.nestedEntities.forEach(nestedEntity => {
120
+ if (nestedEntity.relationshipType === "object") {
121
+ const entity = allEntities.get(nestedEntity.id);
122
+ // Ensure we don't process the root entity itself as a "parent" CTE,
123
+ // and that the entity actually exists.
124
+ if (entity && !entity.isRoot) {
125
+ objectInfos.push({
126
+ entity,
127
+ depth: calculateActualObjectNestingDepth(nestedEntity.id)
128
+ });
129
+ }
130
+ }
131
+ });
132
+ // The existing grouping and sorting by depth (b - a for descending) should still work correctly
133
+ // as it processes deepest levels first, regardless of the absolute depth numbers.
134
+ return objectInfos;
135
+ }
136
+ /**
137
+ * Group entities by their depth level.
138
+ *
139
+ * Grouping by depth allows us to:
140
+ * - Process all entities at the same level in a single CTE
141
+ * - Optimize query performance by reducing the number of CTEs
142
+ * - Maintain clear dependency ordering
143
+ *
144
+ * @param parentInfos Array of parent entity information with depths
145
+ * @returns Map of depth level to entities at that depth
146
+ */ groupEntitiesByDepth(objectInfos) {
147
+ const entitiesByDepth = new Map();
148
+ objectInfos.forEach(info => {
149
+ const depth = info.depth;
150
+ if (!entitiesByDepth.has(depth)) {
151
+ entitiesByDepth.set(depth, []);
152
+ }
153
+ entitiesByDepth.get(depth).push(info);
154
+ });
155
+ return entitiesByDepth;
156
+ }
157
+ /**
158
+ * Build a CTE that processes all entities at a specific depth level
159
+ */
160
+ buildDepthCte(entitiesAtDepth, previousCteAlias, cteAlias, mapping, allEntities) {
161
+ // Build SELECT items: * and JSON objects for all entities at this depth
162
+ const selectItems = [
163
+ // Select all columns from previous CTE
164
+ new SelectItem(new ColumnReference(null, new IdentifierString(PostgresObjectEntityCteBuilder.WILDCARD_COLUMN)))
165
+ ];
166
+ // Process each entity at this depth
167
+ for (const { entity } of entitiesAtDepth) {
168
+ const jsonColumn = this.buildEntityJsonColumn(entity, mapping, allEntities);
169
+ selectItems.push(jsonColumn);
170
+ }
171
+ // Create CTE that selects from previous CTE
172
+ const cteSelect = new SimpleSelectQuery({
173
+ selectClause: new SelectClause(selectItems),
174
+ fromClause: new FromClause(new SourceExpression(new TableSource(null, new IdentifierString(previousCteAlias)), null), null)
175
+ });
176
+ return new CommonTable(cteSelect, new SourceAliasExpression(cteAlias, null), null);
177
+ }
178
+ /**
179
+ * Build JSON column for a single entity with NULL handling
180
+ */
181
+ buildEntityJsonColumn(entity, mapping, allEntities) {
182
+ // Build JSON object arguments and NULL checks
183
+ const { jsonObjectArgs, nullChecks } = this.prepareEntityColumns(entity);
184
+ // Add child object relationships
185
+ this.addChildObjectRelationships(entity, jsonObjectArgs, mapping, allEntities);
186
+ // Create JSON object
187
+ const jsonObject = this.createJsonObject(jsonObjectArgs, mapping.useJsonb);
188
+ // Build NULL condition and CASE expression
189
+ const nullCondition = this.buildNullCondition(nullChecks);
190
+ const caseExpr = this.createCaseExpression(nullCondition, jsonObject);
191
+ // Add JSON object as named column
192
+ const jsonColumnName = `${entity.name.toLowerCase()}${PostgresObjectEntityCteBuilder.JSON_COLUMN_SUFFIX}`;
193
+ return new SelectItem(caseExpr, jsonColumnName);
194
+ }
195
+ /**
196
+ * Prepare entity columns and NULL checks.
197
+ *
198
+ * This method extracts column data and creates NULL checks for each column.
199
+ * The NULL checking is essential for handling outer joins correctly.
200
+ *
201
+ * In outer join scenarios, when there's no matching row in the joined table,
202
+ * all columns from that table will be NULL. Instead of creating an empty object
203
+ * with all NULL properties (e.g., {id: null, name: null, email: null}),
204
+ * we want to represent the absence of the entity as NULL itself.
205
+ *
206
+ * This ensures cleaner JSON output where missing relationships are represented
207
+ * as NULL rather than objects with all NULL fields.
208
+ *
209
+ * @param entity The entity whose columns are being processed
210
+ * @returns Object containing arrays of JSON object arguments and NULL check conditions
211
+ */
212
+ prepareEntityColumns(entity) {
213
+ const jsonObjectArgs = [];
214
+ const nullChecks = [];
215
+ Object.entries(entity.columns).forEach(([jsonKey, sqlColumn]) => {
216
+ jsonObjectArgs.push(new LiteralValue(jsonKey));
217
+ jsonObjectArgs.push(new ColumnReference(null, new IdentifierString(sqlColumn)));
218
+ // Collect NULL checks for each column
219
+ nullChecks.push(new BinaryExpression(new ColumnReference(null, new IdentifierString(sqlColumn)), "is", new LiteralValue(null)));
220
+ });
221
+ return { jsonObjectArgs, nullChecks };
222
+ }
223
+ /**
224
+ * Add child object relationships to JSON object arguments.
225
+ *
226
+ * This method processes nested object-type entities that are direct children of the current entity.
227
+ * For each child entity, it adds the property name and corresponding JSON column reference
228
+ * to the arguments array that will be used to build the parent's JSON object.
229
+ *
230
+ * The child JSON columns are expected to already exist in the data source (created by deeper
231
+ * level CTEs), as we process from the deepest level up to the root.
232
+ *
233
+ * Note: In this context, "child" refers to entities that have an object relationship (0..1)
234
+ * with their parent. From a data perspective, these are typically entities referenced via
235
+ * foreign keys, representing "parent" entities in traditional database terminology.
236
+ *
237
+ * @param entity The current entity being processed
238
+ * @param jsonObjectArgs Array to which JSON object arguments will be added
239
+ * @param mapping The JSON mapping configuration
240
+ * @param allEntities Map of all entities in the mapping
241
+ */
242
+ addChildObjectRelationships(entity, jsonObjectArgs, mapping, allEntities) {
243
+ const childEntities = mapping.nestedEntities.filter(ne => ne.parentId === entity.id && ne.relationshipType === "object");
244
+ childEntities.forEach(childEntity => {
245
+ const child = allEntities.get(childEntity.id);
246
+ if (child) {
247
+ jsonObjectArgs.push(new LiteralValue(childEntity.propertyName));
248
+ const jsonColumnName = `${child.name.toLowerCase()}${PostgresObjectEntityCteBuilder.JSON_COLUMN_SUFFIX}`;
249
+ jsonObjectArgs.push(new ColumnReference(null, new IdentifierString(jsonColumnName)));
250
+ }
251
+ });
252
+ }
253
+ /**
254
+ * Create JSON object function call
255
+ */
256
+ createJsonObject(args, useJsonb = false) {
257
+ const jsonBuildFunction = useJsonb ? "jsonb_build_object" : "json_build_object";
258
+ return new FunctionCall(null, new RawString(jsonBuildFunction), new ValueList(args), null);
259
+ }
260
+ /**
261
+ * Build NULL condition from NULL checks
262
+ */
263
+ buildNullCondition(nullChecks) {
264
+ return nullChecks.reduce((acc, check) => acc ? new BinaryExpression(acc, "and", check) : check);
265
+ }
266
+ /**
267
+ * Create CASE expression with NULL handling
268
+ */
269
+ createCaseExpression(nullCondition, jsonObject) {
270
+ return new CaseExpression(null, new SwitchCaseArgument([new CaseKeyValuePair(nullCondition, new LiteralValue(null))], jsonObject // ELSE return the JSON object
271
+ ));
272
+ }
273
+ }
274
+ PostgresObjectEntityCteBuilder.JSON_COLUMN_SUFFIX = '_json';
275
+ PostgresObjectEntityCteBuilder.CTE_OBJECT_PREFIX = 'cte_object_depth_';
276
+ PostgresObjectEntityCteBuilder.WILDCARD_COLUMN = '*'; /**
277
+ * Build CTEs for all object entities in the correct dependency order
278
+ * @param initialCte The starting CTE containing all raw data
279
+ * @param allEntities Map of all entities in the mapping
280
+ * @param mapping The JSON mapping configuration
281
+ * @returns Array of CTEs and the alias of the last CTE created
282
+ */
283
+ //# sourceMappingURL=PostgresObjectEntityCteBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PostgresObjectEntityCteBuilder.js","sourceRoot":"","sources":["../../../src/transformers/PostgresObjectEntityCteBuilder.ts"],"names":[],"mappings":"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"}
@@ -32,9 +32,15 @@ export class SqlPrinter {
32
32
  SqlPrintTokenContainerType.LimitClause,
33
33
  SqlPrintTokenContainerType.OffsetClause,
34
34
  SqlPrintTokenContainerType.SubQuerySource,
35
- SqlPrintTokenContainerType.BinarySelectQueryOperator,
36
- SqlPrintTokenContainerType.Values,
37
- SqlPrintTokenContainerType.WithClause
35
+ SqlPrintTokenContainerType.BinarySelectQueryOperator, SqlPrintTokenContainerType.Values,
36
+ SqlPrintTokenContainerType.WithClause,
37
+ SqlPrintTokenContainerType.SwitchCaseArgument,
38
+ SqlPrintTokenContainerType.CaseKeyValuePair,
39
+ SqlPrintTokenContainerType.CaseThenValue,
40
+ SqlPrintTokenContainerType.ElseClause,
41
+ SqlPrintTokenContainerType.CaseElseValue
42
+ // CaseExpression, SwitchCaseArgument, CaseKeyValuePair, and ElseClause
43
+ // are not included by default to maintain backward compatibility with tests
38
44
  //SqlPrintTokenContainerType.CommonTable
39
45
  ]);
40
46
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SqlPrinter.js","sourceRoot":"","sources":["../../../src/transformers/SqlPrinter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SqlPrinter.js","sourceRoot":"","sources":["../../../src/transformers/SqlPrinter.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,7 @@ export * from './transformers/CTECollector';
8
8
  export * from './transformers/CTENormalizer';
9
9
  export * from './transformers/Formatter';
10
10
  export * from './transformers/SqlFormatter';
11
+ export * from './transformers/PostgresJsonQueryBuilder';
11
12
  export * from './transformers/QueryBuilder';
12
13
  export * from './transformers/SelectValueCollector';
13
14
  export * from './transformers/SelectableColumnCollector';
@@ -17,3 +18,4 @@ export * from './transformers/UpstreamSelectQueryFinder';
17
18
  export * from './transformers/SchemaCollector';
18
19
  export * from './transformers/SqlParamInjector';
19
20
  export * from './utils/SqlSchemaValidator';
21
+ export * from './utils/SchemaManager';
@@ -27,6 +27,8 @@ export declare enum SqlPrintTokenContainerType {
27
27
  SwitchCaseArgument = "SwitchCaseArgument",
28
28
  ElseClause = "ElseClause",
29
29
  CaseKeyValuePair = "CaseKeyValuePair",
30
+ CaseThenValue = "CaseThenValue",
31
+ CaseElseValue = "CaseElseValue",
30
32
  ParenExpression = "ParenExpression",
31
33
  CastExpression = "CastExpression",
32
34
  CaseExpression = "CaseExpression",
@@ -32,7 +32,7 @@ export declare class FunctionCall extends SqlComponent {
32
32
  qualifiedName: QualifiedName;
33
33
  argument: ValueComponent | null;
34
34
  over: OverExpression | null;
35
- constructor(namespaces: string[] | IdentifierString[] | null, name: string | RawString | IdentifierString, argument: ValueComponent | null, over: OverExpression | null);
35
+ constructor(namespaces: string | string[] | IdentifierString[] | null, name: string | RawString | IdentifierString, argument: ValueComponent | null, over: OverExpression | null);
36
36
  /**
37
37
  * For backward compatibility: returns the namespaces as IdentifierString[] | null (readonly)
38
38
  */
@@ -195,7 +195,7 @@ export declare class QualifiedName extends SqlComponent {
195
195
  namespaces: IdentifierString[] | null;
196
196
  /** The actual name (e.g. table, function, type, column) */
197
197
  name: RawString | IdentifierString;
198
- constructor(namespaces: string[] | IdentifierString[] | null, name: string | RawString | IdentifierString);
198
+ constructor(namespaces: string | string[] | IdentifierString[] | null, name: string | RawString | IdentifierString);
199
199
  /** Returns the full qualified name as a string (dot-separated) */
200
200
  toString(): string;
201
201
  }