rawsql-ts 0.19.0 → 0.21.0
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 +12 -13
- package/dist/esm/index.d.ts +1 -11
- package/dist/esm/index.js +1 -11
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index.min.js +5 -41
- package/dist/esm/index.min.js.map +4 -4
- package/dist/esm/transformers/DynamicQueryBuilder.d.ts +4 -27
- package/dist/esm/transformers/DynamicQueryBuilder.js +10 -27
- package/dist/esm/transformers/DynamicQueryBuilder.js.map +1 -1
- package/dist/esm/transformers/SSSQLFilterBuilder.d.ts +48 -1
- package/dist/esm/transformers/SSSQLFilterBuilder.js +578 -31
- package/dist/esm/transformers/SSSQLFilterBuilder.js.map +1 -1
- package/dist/esm/utils/SchemaManager.d.ts +3 -19
- package/dist/esm/utils/SchemaManager.js +2 -62
- package/dist/esm/utils/SchemaManager.js.map +1 -1
- package/dist/index.js +2 -18
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +5 -41
- package/dist/index.min.js.map +4 -4
- package/dist/src/index.d.ts +1 -11
- package/dist/src/transformers/DynamicQueryBuilder.d.ts +4 -27
- package/dist/src/transformers/SSSQLFilterBuilder.d.ts +48 -1
- package/dist/src/utils/SchemaManager.d.ts +3 -19
- package/dist/transformers/DynamicQueryBuilder.js +10 -27
- package/dist/transformers/DynamicQueryBuilder.js.map +1 -1
- package/dist/transformers/SSSQLFilterBuilder.js +576 -29
- package/dist/transformers/SSSQLFilterBuilder.js.map +1 -1
- package/dist/tsconfig.browser.tsbuildinfo +1 -1
- package/dist/utils/SchemaManager.js +2 -63
- package/dist/utils/SchemaManager.js.map +1 -1
- package/package.json +10 -2
- package/dist/esm/transformers/EnhancedJsonMapping.d.ts +0 -194
- package/dist/esm/transformers/EnhancedJsonMapping.js +0 -217
- package/dist/esm/transformers/EnhancedJsonMapping.js.map +0 -1
- package/dist/esm/transformers/JsonMappingConverter.d.ts +0 -200
- package/dist/esm/transformers/JsonMappingConverter.js +0 -388
- package/dist/esm/transformers/JsonMappingConverter.js.map +0 -1
- package/dist/esm/transformers/JsonMappingUnifier.d.ts +0 -100
- package/dist/esm/transformers/JsonMappingUnifier.js +0 -207
- package/dist/esm/transformers/JsonMappingUnifier.js.map +0 -1
- package/dist/esm/transformers/ModelDrivenJsonMapping.d.ts +0 -62
- package/dist/esm/transformers/ModelDrivenJsonMapping.js +0 -115
- package/dist/esm/transformers/ModelDrivenJsonMapping.js.map +0 -1
- package/dist/esm/transformers/PostgresArrayEntityCteBuilder.d.ts +0 -138
- package/dist/esm/transformers/PostgresArrayEntityCteBuilder.js +0 -454
- package/dist/esm/transformers/PostgresArrayEntityCteBuilder.js.map +0 -1
- package/dist/esm/transformers/PostgresJsonQueryBuilder.d.ts +0 -88
- package/dist/esm/transformers/PostgresJsonQueryBuilder.js +0 -241
- package/dist/esm/transformers/PostgresJsonQueryBuilder.js.map +0 -1
- package/dist/esm/transformers/PostgresObjectEntityCteBuilder.d.ts +0 -165
- package/dist/esm/transformers/PostgresObjectEntityCteBuilder.js +0 -343
- package/dist/esm/transformers/PostgresObjectEntityCteBuilder.js.map +0 -1
- package/dist/esm/transformers/TypeTransformationPostProcessor.d.ts +0 -108
- package/dist/esm/transformers/TypeTransformationPostProcessor.js +0 -354
- package/dist/esm/transformers/TypeTransformationPostProcessor.js.map +0 -1
- package/dist/esm/utils/JsonSchemaValidator.d.ts +0 -81
- package/dist/esm/utils/JsonSchemaValidator.js +0 -211
- package/dist/esm/utils/JsonSchemaValidator.js.map +0 -1
- package/dist/src/transformers/EnhancedJsonMapping.d.ts +0 -194
- package/dist/src/transformers/JsonMappingConverter.d.ts +0 -200
- package/dist/src/transformers/JsonMappingUnifier.d.ts +0 -100
- package/dist/src/transformers/ModelDrivenJsonMapping.d.ts +0 -62
- package/dist/src/transformers/PostgresArrayEntityCteBuilder.d.ts +0 -138
- package/dist/src/transformers/PostgresJsonQueryBuilder.d.ts +0 -88
- package/dist/src/transformers/PostgresObjectEntityCteBuilder.d.ts +0 -165
- package/dist/src/transformers/TypeTransformationPostProcessor.d.ts +0 -108
- package/dist/src/utils/JsonSchemaValidator.d.ts +0 -81
- package/dist/transformers/EnhancedJsonMapping.js +0 -223
- package/dist/transformers/EnhancedJsonMapping.js.map +0 -1
- package/dist/transformers/JsonMappingConverter.js +0 -392
- package/dist/transformers/JsonMappingConverter.js.map +0 -1
- package/dist/transformers/JsonMappingUnifier.js +0 -216
- package/dist/transformers/JsonMappingUnifier.js.map +0 -1
- package/dist/transformers/ModelDrivenJsonMapping.js +0 -122
- package/dist/transformers/ModelDrivenJsonMapping.js.map +0 -1
- package/dist/transformers/PostgresArrayEntityCteBuilder.js +0 -458
- package/dist/transformers/PostgresArrayEntityCteBuilder.js.map +0 -1
- package/dist/transformers/PostgresJsonQueryBuilder.js +0 -245
- package/dist/transformers/PostgresJsonQueryBuilder.js.map +0 -1
- package/dist/transformers/PostgresObjectEntityCteBuilder.js +0 -347
- package/dist/transformers/PostgresObjectEntityCteBuilder.js.map +0 -1
- package/dist/transformers/TypeTransformationPostProcessor.js +0 -363
- package/dist/transformers/TypeTransformationPostProcessor.js.map +0 -1
- package/dist/utils/JsonSchemaValidator.js +0 -215
- package/dist/utils/JsonSchemaValidator.js.map +0 -1
package/dist/src/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export * from './parsers/SqlParser';
|
|
2
|
+
export * from './parsers/SqlTokenizer';
|
|
2
3
|
export * from './parsers/SelectQueryParser';
|
|
3
4
|
export { ParseAnalysisResult } from './parsers/SelectQueryParser';
|
|
4
5
|
export * from './parsers/InsertQueryParser';
|
|
@@ -51,7 +52,6 @@ export type { ScopeRange } from './transformers/SqlIdentifierRenamer';
|
|
|
51
52
|
export * from './transformers/ColumnReferenceCollector';
|
|
52
53
|
export * from './transformers/Formatter';
|
|
53
54
|
export * from './transformers/SqlFormatter';
|
|
54
|
-
export * from './transformers/PostgresJsonQueryBuilder';
|
|
55
55
|
export * from './transformers/QueryBuilder';
|
|
56
56
|
export * from './transformers/InsertQuerySelectValuesConverter';
|
|
57
57
|
export * from './transformers/InsertResultSelectConverter';
|
|
@@ -75,16 +75,7 @@ export * from './transformers/PruneOptionalConditionBranches';
|
|
|
75
75
|
export { SchemaInfo, optimizeUnusedLeftJoins, optimizeUnusedLeftJoinsToFixedPoint, optimizeUnusedCtes, optimizeUnusedCtesToFixedPoint } from './transformers/OptimizeUnusedLeftJoins';
|
|
76
76
|
export * from './transformers/TableColumnResolver';
|
|
77
77
|
export * from './transformers/TableSourceCollector';
|
|
78
|
-
export * from './transformers/JsonMappingConverter';
|
|
79
|
-
export * from './transformers/EnhancedJsonMapping';
|
|
80
|
-
export { ModelDrivenJsonMapping, convertModelDrivenMapping, validateModelDrivenMapping, FieldMapping, NestedStructure, StructureFields, FieldType } from './transformers/ModelDrivenJsonMapping';
|
|
81
|
-
export {
|
|
82
|
-
/** @deprecated Use JsonMappingConverter.convert() instead */
|
|
83
|
-
processJsonMapping, isModelDrivenFormat, isUnifiedFormat, isLegacyFormat } from './transformers/JsonMappingUnifier';
|
|
84
|
-
/** @deprecated Use JsonMappingConverter.toLegacyMapping() instead */
|
|
85
|
-
export { unifyJsonMapping } from './transformers/JsonMappingUnifier';
|
|
86
78
|
export * from './transformers/UpstreamSelectQueryFinder';
|
|
87
|
-
export * from './transformers/TypeTransformationPostProcessor';
|
|
88
79
|
export * from './transformers/SchemaCollector';
|
|
89
80
|
export { TableSchema, SchemaAnalysisResult } from './transformers/SchemaCollector';
|
|
90
81
|
export * from './transformers/FilterableItemCollector';
|
|
@@ -97,7 +88,6 @@ export * from './transformers/DynamicQueryBuilder';
|
|
|
97
88
|
export * from './utils/ParameterHelper';
|
|
98
89
|
export * from './transformers/SqlParameterBinder';
|
|
99
90
|
export * from './utils/SqlSchemaValidator';
|
|
100
|
-
export * from './utils/JsonSchemaValidator';
|
|
101
91
|
export * from './utils/SchemaManager';
|
|
102
92
|
export * from './utils/RelationGraph';
|
|
103
93
|
export * from './utils/CommentEditor';
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { SelectQuery } from "../models/SelectQuery";
|
|
2
2
|
import { SortConditions } from "./SqlSortInjector";
|
|
3
3
|
import { PaginationOptions } from "./SqlPaginationInjector";
|
|
4
|
-
import { JsonMapping } from "./PostgresJsonQueryBuilder";
|
|
5
4
|
import { SqlParameterValue } from "../models/ValueComponent";
|
|
6
5
|
import { SchemaInfo } from "./OptimizeUnusedLeftJoins";
|
|
7
6
|
import { OptionalConditionParameterStates, OptionalConditionPruningParameters } from "./PruneOptionalConditionBranches";
|
|
@@ -104,18 +103,6 @@ export interface QueryBuildOptions {
|
|
|
104
103
|
* Filters apply subtractively and only drop columns that exist in the original output.
|
|
105
104
|
*/
|
|
106
105
|
excludeColumns?: string[];
|
|
107
|
-
/** JSON serialization mapping to transform results into hierarchical JSON
|
|
108
|
-
* - JsonMapping object: explicit mapping configuration
|
|
109
|
-
* - true: auto-load mapping from corresponding .json file
|
|
110
|
-
* - false/undefined: no serialization
|
|
111
|
-
*/
|
|
112
|
-
serialize?: JsonMapping | boolean;
|
|
113
|
-
/**
|
|
114
|
-
* JSONB usage setting. Must be true (default) for PostgreSQL GROUP BY compatibility.
|
|
115
|
-
* Setting to false will throw an error as JSON type cannot be used in GROUP BY clauses.
|
|
116
|
-
* @default true
|
|
117
|
-
*/
|
|
118
|
-
jsonb?: boolean;
|
|
119
106
|
/**
|
|
120
107
|
* Throw when column-anchored EXISTS filters fail to resolve.
|
|
121
108
|
* Defaults to false so invalid definitions are skipped silently.
|
|
@@ -158,12 +145,12 @@ export interface DynamicQueryBuilderOptions {
|
|
|
158
145
|
schemaInfo?: SchemaInfo;
|
|
159
146
|
}
|
|
160
147
|
/**
|
|
161
|
-
* DynamicQueryBuilder combines SQL parsing with dynamic condition injection (filters, sorts, paging
|
|
148
|
+
* DynamicQueryBuilder combines SQL parsing with dynamic condition injection (filters, sorts, paging).
|
|
162
149
|
*
|
|
163
150
|
* Key behaviours verified in packages/core/tests/transformers/DynamicQueryBuilder.test.ts:
|
|
164
151
|
* - Preserves the input SQL when no options are supplied.
|
|
165
152
|
* - Applies filter, sort, and pagination in a deterministic order.
|
|
166
|
-
* -
|
|
153
|
+
* - Fails fast for removed SQL-result JSON shaping.
|
|
167
154
|
*/
|
|
168
155
|
export declare class DynamicQueryBuilder {
|
|
169
156
|
private tableColumnResolver?;
|
|
@@ -179,7 +166,7 @@ export declare class DynamicQueryBuilder {
|
|
|
179
166
|
* Builds a SelectQuery from SQL content with dynamic conditions.
|
|
180
167
|
* This is a pure function that does not perform any I/O operations.
|
|
181
168
|
* @param sqlContent Raw SQL string to parse and modify
|
|
182
|
-
* @param options Dynamic conditions to apply (filter, sort, paging
|
|
169
|
+
* @param options Dynamic conditions to apply (filter, sort, paging)
|
|
183
170
|
* @returns Modified SelectQuery with all dynamic conditions applied
|
|
184
171
|
* @example
|
|
185
172
|
* ```typescript
|
|
@@ -189,8 +176,7 @@ export declare class DynamicQueryBuilder {
|
|
|
189
176
|
* {
|
|
190
177
|
* filter: { status: 'premium' },
|
|
191
178
|
* sort: { created_at: { desc: true } },
|
|
192
|
-
* paging: { page: 2, pageSize: 10 }
|
|
193
|
-
* serialize: { rootName: 'user', rootEntity: { id: 'user', name: 'User', columns: { id: 'id', name: 'name' } }, nestedEntities: [] }
|
|
179
|
+
* paging: { page: 2, pageSize: 10 }
|
|
194
180
|
* }
|
|
195
181
|
* );
|
|
196
182
|
* ```
|
|
@@ -227,15 +213,6 @@ export declare class DynamicQueryBuilder {
|
|
|
227
213
|
* @returns Modified SelectQuery with pagination applied
|
|
228
214
|
*/
|
|
229
215
|
buildPaginatedQuery(sqlContent: string, paging: PaginationOptions): SelectQuery;
|
|
230
|
-
/**
|
|
231
|
-
* Builds a SelectQuery with only JSON serialization applied.
|
|
232
|
-
* Convenience method for when you only need hierarchical JSON transformation.
|
|
233
|
-
*
|
|
234
|
-
* @param sqlContent Raw SQL string to parse and modify
|
|
235
|
-
* @param serialize JSON mapping configuration to apply
|
|
236
|
-
* @returns Modified SelectQuery with JSON serialization applied
|
|
237
|
-
*/
|
|
238
|
-
buildSerializedQuery(sqlContent: string, serialize: JsonMapping): SelectQuery;
|
|
239
216
|
/**
|
|
240
217
|
* Validates SQL content by attempting to parse it.
|
|
241
218
|
* Useful for testing SQL validity without applying any modifications.
|
|
@@ -1,11 +1,43 @@
|
|
|
1
|
-
import { SelectQuery } from "../models/SelectQuery";
|
|
1
|
+
import { SelectQuery, SimpleSelectQuery } from "../models/SelectQuery";
|
|
2
|
+
import { type ValueComponent } from "../models/ValueComponent";
|
|
2
3
|
import { type SupportedOptionalConditionBranch } from "./PruneOptionalConditionBranches";
|
|
3
4
|
export type SSSQLFilterValue = unknown;
|
|
4
5
|
export type SSSQLFilterInput = Record<string, SSSQLFilterValue>;
|
|
5
6
|
export type SssqlScaffoldFilters = SSSQLFilterInput;
|
|
7
|
+
export type SssqlScalarOperator = "=" | "<>" | "<" | "<=" | ">" | ">=" | "like" | "ilike";
|
|
8
|
+
export type SssqlScalarOperatorInput = SssqlScalarOperator | "!=";
|
|
9
|
+
export type SssqlBranchKind = "scalar" | "exists" | "not-exists" | "expression";
|
|
6
10
|
export interface SssqlTransformResult {
|
|
7
11
|
query: SelectQuery;
|
|
8
12
|
}
|
|
13
|
+
export interface SssqlBranchInfo {
|
|
14
|
+
parameterName: string;
|
|
15
|
+
kind: SssqlBranchKind;
|
|
16
|
+
operator?: SssqlScalarOperator;
|
|
17
|
+
target?: string;
|
|
18
|
+
query: SimpleSelectQuery;
|
|
19
|
+
expression: ValueComponent;
|
|
20
|
+
sql: string;
|
|
21
|
+
}
|
|
22
|
+
export interface SssqlScalarScaffoldSpec {
|
|
23
|
+
kind?: "scalar";
|
|
24
|
+
target: string;
|
|
25
|
+
parameterName?: string;
|
|
26
|
+
operator?: SssqlScalarOperatorInput;
|
|
27
|
+
}
|
|
28
|
+
export interface SssqlExistsScaffoldSpec {
|
|
29
|
+
kind: "exists" | "not-exists";
|
|
30
|
+
parameterName: string;
|
|
31
|
+
query: string;
|
|
32
|
+
anchorColumns: string[];
|
|
33
|
+
}
|
|
34
|
+
export type SssqlScaffoldSpec = SssqlScalarScaffoldSpec | SssqlExistsScaffoldSpec;
|
|
35
|
+
export interface SssqlRemoveSpec {
|
|
36
|
+
parameterName: string;
|
|
37
|
+
kind?: SssqlBranchKind;
|
|
38
|
+
operator?: SssqlScalarOperatorInput;
|
|
39
|
+
target?: string;
|
|
40
|
+
}
|
|
9
41
|
/**
|
|
10
42
|
* Builds and refreshes truthful SSSQL optional filter branches.
|
|
11
43
|
* Runtime callers should use pruning, not dynamic predicate injection.
|
|
@@ -14,16 +46,31 @@ export declare class SSSQLFilterBuilder {
|
|
|
14
46
|
private readonly tableColumnResolver?;
|
|
15
47
|
private readonly finder;
|
|
16
48
|
constructor(tableColumnResolver?: ((tableName: string) => string[]) | undefined);
|
|
49
|
+
list(query: SelectQuery | string): SssqlBranchInfo[];
|
|
17
50
|
scaffold(query: SelectQuery | string, filters: SSSQLFilterInput): SelectQuery;
|
|
51
|
+
scaffoldBranch(query: SelectQuery | string, spec: SssqlScaffoldSpec): SelectQuery;
|
|
18
52
|
refresh(query: SelectQuery | string, filters: SSSQLFilterInput): SelectQuery;
|
|
53
|
+
remove(query: SelectQuery | string, spec: SssqlRemoveSpec): SelectQuery;
|
|
54
|
+
removeAll(query: SelectQuery | string): SelectQuery;
|
|
19
55
|
private parseQuery;
|
|
56
|
+
private findMatchingBranchInfos;
|
|
57
|
+
private scaffoldScalarBranch;
|
|
58
|
+
private scaffoldExistsBranch;
|
|
20
59
|
private resolveTarget;
|
|
21
60
|
private resolveTargetInQuery;
|
|
22
61
|
private resolveQualifiedTarget;
|
|
23
62
|
private resolveUnqualifiedTarget;
|
|
24
63
|
private findAliasForTable;
|
|
25
64
|
private resolveAliasForSource;
|
|
65
|
+
private buildCorrelatedRefreshPlan;
|
|
66
|
+
private collectSourceAliases;
|
|
67
|
+
private resolveCorrelatedAnchorTarget;
|
|
68
|
+
private findSourceExpressionByAlias;
|
|
69
|
+
private resolveSourceExpressionToUpstreamQuery;
|
|
70
|
+
private resolveAnchorTargetInQuery;
|
|
71
|
+
private getSourceAlias;
|
|
26
72
|
private rebaseMovedBranch;
|
|
73
|
+
private rebaseMovedBranchByAlias;
|
|
27
74
|
}
|
|
28
75
|
export type { SupportedOptionalConditionBranch };
|
|
29
76
|
export declare const scaffoldSssqlQuery: (sqlContent: string, filters: SssqlScaffoldFilters) => SssqlTransformResult;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Central schema management utility for rawsql-ts.
|
|
3
|
-
* Converts user-defined table definitions into resolvers
|
|
3
|
+
* Converts user-defined table definitions into resolvers consumed by collectors and builders.
|
|
4
4
|
*
|
|
5
5
|
* @example
|
|
6
6
|
* ```typescript
|
|
@@ -20,7 +20,6 @@
|
|
|
20
20
|
* ```
|
|
21
21
|
* Related tests: packages/core/tests/transformers/SchemaCollector.test.ts
|
|
22
22
|
*/
|
|
23
|
-
import type { JsonMapping } from '../transformers/PostgresJsonQueryBuilder';
|
|
24
23
|
/**
|
|
25
24
|
* Database column metadata for schema mapping
|
|
26
25
|
*/
|
|
@@ -34,8 +33,6 @@ export interface ColumnDefinition {
|
|
|
34
33
|
table: string;
|
|
35
34
|
column: string;
|
|
36
35
|
};
|
|
37
|
-
/** Alias for JSON output (useful for avoiding conflicts) */
|
|
38
|
-
jsonAlias?: string;
|
|
39
36
|
}
|
|
40
37
|
/**
|
|
41
38
|
* Table relationship definition
|
|
@@ -45,7 +42,7 @@ export interface RelationshipDefinition {
|
|
|
45
42
|
type: 'object' | 'array';
|
|
46
43
|
/** Target table name */
|
|
47
44
|
table: string;
|
|
48
|
-
/**
|
|
45
|
+
/** Caller-owned relationship property name */
|
|
49
46
|
propertyName: string;
|
|
50
47
|
/** Optional: Override target table's primary key */
|
|
51
48
|
targetKey?: string;
|
|
@@ -71,7 +68,7 @@ export interface SchemaRegistry {
|
|
|
71
68
|
}
|
|
72
69
|
/**
|
|
73
70
|
* Central schema management utility for rawsql-ts
|
|
74
|
-
* Converts user-defined schemas to
|
|
71
|
+
* Converts user-defined schemas to resolvers consumed by schema-aware utilities
|
|
75
72
|
*/
|
|
76
73
|
export declare class SchemaManager {
|
|
77
74
|
private schemas;
|
|
@@ -93,12 +90,6 @@ export declare class SchemaManager {
|
|
|
93
90
|
* @returns Function compatible with SqlParamInjector
|
|
94
91
|
*/
|
|
95
92
|
createTableColumnResolver(): (tableName: string) => string[];
|
|
96
|
-
/**
|
|
97
|
-
* Generate JSON mapping configuration for PostgresJsonQueryBuilder
|
|
98
|
-
* @param rootTableName Root table for the JSON structure
|
|
99
|
-
* @returns JSON mapping configuration
|
|
100
|
-
*/
|
|
101
|
-
createJsonMapping(rootTableName: string): JsonMapping;
|
|
102
93
|
/**
|
|
103
94
|
* Get all table names in the schema
|
|
104
95
|
* @returns Array of table names
|
|
@@ -140,10 +131,3 @@ export declare function createSchemaManager(schemas: SchemaRegistry): SchemaMana
|
|
|
140
131
|
* @returns TableColumnResolver function for SqlParamInjector
|
|
141
132
|
*/
|
|
142
133
|
export declare function createTableColumnResolver(schemas: SchemaRegistry): (tableName: string) => string[];
|
|
143
|
-
/**
|
|
144
|
-
* Create JSON mapping from schema definitions
|
|
145
|
-
* @param schemas Schema registry object
|
|
146
|
-
* @param rootTableName Root table name
|
|
147
|
-
* @returns JSON mapping for PostgresJsonQueryBuilder
|
|
148
|
-
*/
|
|
149
|
-
export declare function createJsonMappingFromSchema(schemas: SchemaRegistry, rootTableName: string): JsonMapping;
|
|
@@ -4,7 +4,6 @@ exports.DynamicQueryBuilder = void 0;
|
|
|
4
4
|
const SelectQueryParser_1 = require("../parsers/SelectQueryParser");
|
|
5
5
|
const SqlSortInjector_1 = require("./SqlSortInjector");
|
|
6
6
|
const SqlPaginationInjector_1 = require("./SqlPaginationInjector");
|
|
7
|
-
const PostgresJsonQueryBuilder_1 = require("./PostgresJsonQueryBuilder");
|
|
8
7
|
const QueryBuilder_1 = require("./QueryBuilder");
|
|
9
8
|
const SqlParameterBinder_1 = require("./SqlParameterBinder");
|
|
10
9
|
const ParameterDetector_1 = require("../utils/ParameterDetector");
|
|
@@ -12,12 +11,12 @@ const ValueComponent_1 = require("../models/ValueComponent");
|
|
|
12
11
|
const OptimizeUnusedLeftJoins_1 = require("./OptimizeUnusedLeftJoins");
|
|
13
12
|
const PruneOptionalConditionBranches_1 = require("./PruneOptionalConditionBranches");
|
|
14
13
|
/**
|
|
15
|
-
* DynamicQueryBuilder combines SQL parsing with dynamic condition injection (filters, sorts, paging
|
|
14
|
+
* DynamicQueryBuilder combines SQL parsing with dynamic condition injection (filters, sorts, paging).
|
|
16
15
|
*
|
|
17
16
|
* Key behaviours verified in packages/core/tests/transformers/DynamicQueryBuilder.test.ts:
|
|
18
17
|
* - Preserves the input SQL when no options are supplied.
|
|
19
18
|
* - Applies filter, sort, and pagination in a deterministic order.
|
|
20
|
-
* -
|
|
19
|
+
* - Fails fast for removed SQL-result JSON shaping.
|
|
21
20
|
*/
|
|
22
21
|
class DynamicQueryBuilder {
|
|
23
22
|
/**
|
|
@@ -39,7 +38,7 @@ class DynamicQueryBuilder {
|
|
|
39
38
|
* Builds a SelectQuery from SQL content with dynamic conditions.
|
|
40
39
|
* This is a pure function that does not perform any I/O operations.
|
|
41
40
|
* @param sqlContent Raw SQL string to parse and modify
|
|
42
|
-
* @param options Dynamic conditions to apply (filter, sort, paging
|
|
41
|
+
* @param options Dynamic conditions to apply (filter, sort, paging)
|
|
43
42
|
* @returns Modified SelectQuery with all dynamic conditions applied
|
|
44
43
|
* @example
|
|
45
44
|
* ```typescript
|
|
@@ -49,14 +48,17 @@ class DynamicQueryBuilder {
|
|
|
49
48
|
* {
|
|
50
49
|
* filter: { status: 'premium' },
|
|
51
50
|
* sort: { created_at: { desc: true } },
|
|
52
|
-
* paging: { page: 2, pageSize: 10 }
|
|
53
|
-
* serialize: { rootName: 'user', rootEntity: { id: 'user', name: 'User', columns: { id: 'id', name: 'name' } }, nestedEntities: [] }
|
|
51
|
+
* paging: { page: 2, pageSize: 10 }
|
|
54
52
|
* }
|
|
55
53
|
* );
|
|
56
54
|
* ```
|
|
57
55
|
*/
|
|
58
56
|
buildQuery(sqlContent, options = {}) {
|
|
59
57
|
var _a;
|
|
58
|
+
const removedOptions = options;
|
|
59
|
+
if ('serialize' in removedOptions || 'jsonb' in removedOptions) {
|
|
60
|
+
throw new Error("DynamicQueryBuilder SQL-result JSON shaping has been removed. Keep SQL results as rows and use generated AOT mappers so the executed SQL remains debuggable.");
|
|
61
|
+
}
|
|
60
62
|
// Parse the base SQL
|
|
61
63
|
let parsedQuery;
|
|
62
64
|
try {
|
|
@@ -105,23 +107,15 @@ class DynamicQueryBuilder {
|
|
|
105
107
|
if (Object.keys(optionalConditionParameters).length > 0) {
|
|
106
108
|
modifiedQuery = (0, PruneOptionalConditionBranches_1.pruneOptionalConditionBranches)(modifiedQuery, optionalConditionParameters);
|
|
107
109
|
}
|
|
108
|
-
// 6. Remove unused LEFT JOINs when asked
|
|
110
|
+
// 6. Remove unused LEFT JOINs when asked.
|
|
109
111
|
const effectiveSchemaInfo = (_a = options.schemaInfo) !== null && _a !== void 0 ? _a : this.defaultSchemaInfo;
|
|
110
112
|
if (options.removeUnusedLeftJoins && (effectiveSchemaInfo === null || effectiveSchemaInfo === void 0 ? void 0 : effectiveSchemaInfo.length)) {
|
|
111
113
|
modifiedQuery = (0, OptimizeUnusedLeftJoins_1.optimizeUnusedLeftJoinsToFixedPoint)(modifiedQuery, effectiveSchemaInfo);
|
|
112
114
|
}
|
|
113
|
-
// 7. Remove unused CTEs
|
|
115
|
+
// 7. Remove unused CTEs when requested.
|
|
114
116
|
if (options.removeUnusedCtes) {
|
|
115
117
|
modifiedQuery = (0, OptimizeUnusedLeftJoins_1.optimizeUnusedCtesToFixedPoint)(modifiedQuery);
|
|
116
118
|
}
|
|
117
|
-
// Apply serialization last (transform the final query structure to JSON)
|
|
118
|
-
// Note: boolean values are handled at RawSqlClient level for auto-loading
|
|
119
|
-
if (options.serialize && typeof options.serialize === 'object') {
|
|
120
|
-
const jsonBuilder = new PostgresJsonQueryBuilder_1.PostgresJsonQueryBuilder();
|
|
121
|
-
// Ensure we have a SimpleSelectQuery for the JSON builder
|
|
122
|
-
const simpleQuery = QueryBuilder_1.QueryBuilder.buildSimpleQuery(modifiedQuery);
|
|
123
|
-
modifiedQuery = jsonBuilder.buildJsonQuery(simpleQuery, options.serialize);
|
|
124
|
-
}
|
|
125
119
|
return modifiedQuery;
|
|
126
120
|
}
|
|
127
121
|
resolveOptionalConditionPruningParameters(options) {
|
|
@@ -259,17 +253,6 @@ class DynamicQueryBuilder {
|
|
|
259
253
|
buildPaginatedQuery(sqlContent, paging) {
|
|
260
254
|
return this.buildQuery(sqlContent, { paging });
|
|
261
255
|
}
|
|
262
|
-
/**
|
|
263
|
-
* Builds a SelectQuery with only JSON serialization applied.
|
|
264
|
-
* Convenience method for when you only need hierarchical JSON transformation.
|
|
265
|
-
*
|
|
266
|
-
* @param sqlContent Raw SQL string to parse and modify
|
|
267
|
-
* @param serialize JSON mapping configuration to apply
|
|
268
|
-
* @returns Modified SelectQuery with JSON serialization applied
|
|
269
|
-
*/
|
|
270
|
-
buildSerializedQuery(sqlContent, serialize) {
|
|
271
|
-
return this.buildQuery(sqlContent, { serialize });
|
|
272
|
-
}
|
|
273
256
|
/**
|
|
274
257
|
* Validates SQL content by attempting to parse it.
|
|
275
258
|
* Useful for testing SQL validity without applying any modifications.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DynamicQueryBuilder.js","sourceRoot":"","sources":["../../src/transformers/DynamicQueryBuilder.ts"],"names":[],"mappings":";;;AACA,oEAAiE;AACjE,uDAAoE;AACpE,mEAAmF;AACnF,
|
|
1
|
+
{"version":3,"file":"DynamicQueryBuilder.js","sourceRoot":"","sources":["../../src/transformers/DynamicQueryBuilder.ts"],"names":[],"mappings":"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"}
|