rawsql-ts 0.11.2-beta → 0.11.4-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 +53 -0
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index.min.js +14 -14
- package/dist/esm/index.min.js.map +4 -4
- package/dist/esm/src/index.js +2 -0
- package/dist/esm/src/index.js.map +1 -1
- package/dist/esm/src/models/BinarySelectQuery.js +9 -0
- package/dist/esm/src/models/BinarySelectQuery.js.map +1 -1
- package/dist/esm/src/models/CTEError.js +31 -0
- package/dist/esm/src/models/CTEError.js.map +1 -0
- package/dist/esm/src/models/Clause.js +2 -1
- package/dist/esm/src/models/Clause.js.map +1 -1
- package/dist/esm/src/models/HintClause.js +37 -0
- package/dist/esm/src/models/HintClause.js.map +1 -0
- package/dist/esm/src/models/SelectQuery.js +1 -0
- package/dist/esm/src/models/SelectQuery.js.map +1 -1
- package/dist/esm/src/models/SimpleSelectQuery.js +229 -0
- package/dist/esm/src/models/SimpleSelectQuery.js.map +1 -1
- package/dist/esm/src/models/ValuesQuery.js +1 -1
- package/dist/esm/src/models/ValuesQuery.js.map +1 -1
- package/dist/esm/src/parsers/FromClauseParser.js +7 -0
- package/dist/esm/src/parsers/FromClauseParser.js.map +1 -1
- package/dist/esm/src/parsers/SelectClauseParser.js +13 -1
- package/dist/esm/src/parsers/SelectClauseParser.js.map +1 -1
- package/dist/esm/src/parsers/SelectQueryParser.js +10 -0
- package/dist/esm/src/parsers/SelectQueryParser.js.map +1 -1
- package/dist/esm/src/parsers/SqlPrintTokenParser.js +39 -4
- package/dist/esm/src/parsers/SqlPrintTokenParser.js.map +1 -1
- package/dist/esm/src/parsers/WhereClauseParser.js +5 -0
- package/dist/esm/src/parsers/WhereClauseParser.js.map +1 -1
- package/dist/esm/src/transformers/DynamicQueryBuilder.js +16 -5
- package/dist/esm/src/transformers/DynamicQueryBuilder.js.map +1 -1
- package/dist/esm/src/transformers/QueryBuilder.js +2 -0
- package/dist/esm/src/transformers/QueryBuilder.js.map +1 -1
- package/dist/esm/src/transformers/SqlFormatter.js.map +1 -1
- package/dist/esm/src/transformers/SqlParameterBinder.js +63 -0
- package/dist/esm/src/transformers/SqlParameterBinder.js.map +1 -0
- package/dist/esm/src/transformers/SqlPrinter.js +12 -2
- package/dist/esm/src/transformers/SqlPrinter.js.map +1 -1
- package/dist/esm/src/utils/CommentUtils.js +65 -0
- package/dist/esm/src/utils/CommentUtils.js.map +1 -0
- package/dist/esm/src/utils/ParameterDetector.js +49 -0
- package/dist/esm/src/utils/ParameterDetector.js.map +1 -0
- package/dist/esm/tsconfig.browser.tsbuildinfo +1 -1
- package/dist/esm/types/src/index.d.ts +3 -0
- package/dist/esm/types/src/models/BinarySelectQuery.d.ts +7 -0
- package/dist/esm/types/src/models/CTEError.d.ts +21 -0
- package/dist/esm/types/src/models/Clause.d.ts +3 -1
- package/dist/esm/types/src/models/HintClause.d.ts +24 -0
- package/dist/esm/types/src/models/SelectQuery.d.ts +12 -0
- package/dist/esm/types/src/models/SimpleSelectQuery.d.ts +166 -2
- package/dist/esm/types/src/models/ValuesQuery.d.ts +1 -1
- package/dist/esm/types/src/parsers/SqlPrintTokenParser.d.ts +5 -0
- package/dist/esm/types/src/transformers/SqlFormatter.d.ts +2 -0
- package/dist/esm/types/src/transformers/SqlParameterBinder.d.ts +36 -0
- package/dist/esm/types/src/transformers/SqlPrinter.d.ts +6 -0
- package/dist/esm/types/src/utils/CommentUtils.d.ts +21 -0
- package/dist/esm/types/src/utils/ParameterDetector.d.ts +32 -0
- package/dist/index.min.js +14 -14
- package/dist/index.min.js.map +4 -4
- package/dist/src/index.d.ts +3 -0
- package/dist/src/index.js +4 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/models/BinarySelectQuery.d.ts +7 -0
- package/dist/src/models/BinarySelectQuery.js +9 -0
- package/dist/src/models/BinarySelectQuery.js.map +1 -1
- package/dist/src/models/CTEError.d.ts +21 -0
- package/dist/src/models/CTEError.js +37 -0
- package/dist/src/models/CTEError.js.map +1 -0
- package/dist/src/models/Clause.d.ts +3 -1
- package/dist/src/models/Clause.js +2 -1
- package/dist/src/models/Clause.js.map +1 -1
- package/dist/src/models/HintClause.d.ts +24 -0
- package/dist/src/models/HintClause.js +41 -0
- package/dist/src/models/HintClause.js.map +1 -0
- package/dist/src/models/SelectQuery.d.ts +12 -0
- package/dist/src/models/SelectQuery.js +5 -1
- package/dist/src/models/SelectQuery.js.map +1 -1
- package/dist/src/models/SimpleSelectQuery.d.ts +166 -2
- package/dist/src/models/SimpleSelectQuery.js +229 -0
- package/dist/src/models/SimpleSelectQuery.js.map +1 -1
- package/dist/src/models/ValuesQuery.d.ts +1 -1
- package/dist/src/models/ValuesQuery.js +1 -1
- package/dist/src/models/ValuesQuery.js.map +1 -1
- package/dist/src/parsers/FromClauseParser.js +7 -0
- package/dist/src/parsers/FromClauseParser.js.map +1 -1
- package/dist/src/parsers/SelectClauseParser.js +13 -1
- package/dist/src/parsers/SelectClauseParser.js.map +1 -1
- package/dist/src/parsers/SelectQueryParser.js +10 -0
- package/dist/src/parsers/SelectQueryParser.js.map +1 -1
- package/dist/src/parsers/SqlPrintTokenParser.d.ts +5 -0
- package/dist/src/parsers/SqlPrintTokenParser.js +39 -4
- package/dist/src/parsers/SqlPrintTokenParser.js.map +1 -1
- package/dist/src/parsers/WhereClauseParser.js +5 -0
- package/dist/src/parsers/WhereClauseParser.js.map +1 -1
- package/dist/src/transformers/DynamicQueryBuilder.js +16 -5
- package/dist/src/transformers/DynamicQueryBuilder.js.map +1 -1
- package/dist/src/transformers/QueryBuilder.js +2 -0
- package/dist/src/transformers/QueryBuilder.js.map +1 -1
- package/dist/src/transformers/SqlFormatter.d.ts +2 -0
- package/dist/src/transformers/SqlFormatter.js.map +1 -1
- package/dist/src/transformers/SqlParameterBinder.d.ts +36 -0
- package/dist/src/transformers/SqlParameterBinder.js +70 -0
- package/dist/src/transformers/SqlParameterBinder.js.map +1 -0
- package/dist/src/transformers/SqlPrinter.d.ts +6 -0
- package/dist/src/transformers/SqlPrinter.js +12 -2
- package/dist/src/transformers/SqlPrinter.js.map +1 -1
- package/dist/src/utils/CommentUtils.d.ts +21 -0
- package/dist/src/utils/CommentUtils.js +69 -0
- package/dist/src/utils/CommentUtils.js.map +1 -0
- package/dist/src/utils/ParameterDetector.d.ts +32 -0
- package/dist/src/utils/ParameterDetector.js +53 -0
- package/dist/src/utils/ParameterDetector.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
|
@@ -4,6 +4,7 @@ export * from './models/BinarySelectQuery';
|
|
|
4
4
|
export * from './models/SelectQuery';
|
|
5
5
|
export * from './models/ValueComponent';
|
|
6
6
|
export * from './models/ValuesQuery';
|
|
7
|
+
export * from './models/CTEError';
|
|
7
8
|
export * from './transformers/CTECollector';
|
|
8
9
|
export * from './transformers/CTENormalizer';
|
|
9
10
|
export * from './transformers/Formatter';
|
|
@@ -32,3 +33,5 @@ export * from './transformers/DynamicQueryBuilder';
|
|
|
32
33
|
export * from './utils/SqlSchemaValidator';
|
|
33
34
|
export * from './utils/JsonSchemaValidator';
|
|
34
35
|
export * from './utils/SchemaManager';
|
|
36
|
+
export type { UnifiedJsonMapping, ColumnMappingConfig } from './transformers/UnifiedJsonMapping';
|
|
37
|
+
export { convertUnifiedMapping } from './transformers/UnifiedJsonMapping';
|
|
@@ -2,6 +2,7 @@ import { SourceExpression } from "./Clause";
|
|
|
2
2
|
import type { SelectQuery } from "./SelectQuery";
|
|
3
3
|
import { SqlComponent } from "./SqlComponent";
|
|
4
4
|
import { RawString } from "./ValueComponent";
|
|
5
|
+
import { SimpleSelectQuery } from "./SimpleSelectQuery";
|
|
5
6
|
/**
|
|
6
7
|
* Represents a binary SELECT query (e.g., UNION, INTERSECT, EXCEPT).
|
|
7
8
|
*/
|
|
@@ -94,4 +95,10 @@ export declare class BinarySelectQuery extends SqlComponent implements SelectQue
|
|
|
94
95
|
* @param value Value to set
|
|
95
96
|
*/
|
|
96
97
|
setParameter(name: string, value: any): this;
|
|
98
|
+
/**
|
|
99
|
+
* Converts this BinarySelectQuery to a SimpleSelectQuery using QueryBuilder.
|
|
100
|
+
* This enables CTE management on binary queries by wrapping them as subqueries.
|
|
101
|
+
* @returns A SimpleSelectQuery representation of this binary query
|
|
102
|
+
*/
|
|
103
|
+
toSimpleQuery(): SimpleSelectQuery;
|
|
97
104
|
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error thrown when a CTE with the same name already exists
|
|
3
|
+
*/
|
|
4
|
+
export declare class DuplicateCTEError extends Error {
|
|
5
|
+
cteName: string;
|
|
6
|
+
constructor(cteName: string);
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Error thrown when a CTE name is invalid
|
|
10
|
+
*/
|
|
11
|
+
export declare class InvalidCTENameError extends Error {
|
|
12
|
+
cteName: string;
|
|
13
|
+
constructor(cteName: string, reason: string);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Error thrown when trying to operate on a non-existent CTE
|
|
17
|
+
*/
|
|
18
|
+
export declare class CTENotFoundError extends Error {
|
|
19
|
+
cteName: string;
|
|
20
|
+
constructor(cteName: string);
|
|
21
|
+
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { SelectQuery } from "./SelectQuery";
|
|
2
2
|
import { SqlComponent } from "./SqlComponent";
|
|
3
3
|
import { IdentifierString, RawString, ValueComponent, WindowFrameExpression, QualifiedName } from "./ValueComponent";
|
|
4
|
+
import { HintClause } from "./HintClause";
|
|
4
5
|
export declare class SelectItem extends SqlComponent {
|
|
5
6
|
static kind: symbol;
|
|
6
7
|
value: ValueComponent;
|
|
@@ -11,7 +12,8 @@ export declare class SelectClause extends SqlComponent {
|
|
|
11
12
|
static kind: symbol;
|
|
12
13
|
items: SelectItem[];
|
|
13
14
|
distinct: DistinctComponent | null;
|
|
14
|
-
|
|
15
|
+
hints: HintClause[];
|
|
16
|
+
constructor(items: SelectItem[], distinct?: DistinctComponent | null, hints?: HintClause[]);
|
|
15
17
|
}
|
|
16
18
|
export type DistinctComponent = Distinct | DistinctOn;
|
|
17
19
|
export declare class Distinct extends SqlComponent {
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { SqlComponent } from "./SqlComponent";
|
|
2
|
+
/**
|
|
3
|
+
* Represents a SQL hint clause
|
|
4
|
+
*/
|
|
5
|
+
export declare class HintClause extends SqlComponent {
|
|
6
|
+
static kind: symbol;
|
|
7
|
+
/**
|
|
8
|
+
* The hint content without the delimiters
|
|
9
|
+
*/
|
|
10
|
+
hintContent: string;
|
|
11
|
+
constructor(hintContent: string);
|
|
12
|
+
/**
|
|
13
|
+
* Returns the full hint clause with delimiters
|
|
14
|
+
*/
|
|
15
|
+
getFullHint(): string;
|
|
16
|
+
/**
|
|
17
|
+
* Checks if a string is a hint clause
|
|
18
|
+
*/
|
|
19
|
+
static isHintClause(value: string): boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Extracts hint content from a hint clause string
|
|
22
|
+
*/
|
|
23
|
+
static extractHintContent(hintClause: string): string;
|
|
24
|
+
}
|
|
@@ -3,7 +3,19 @@ import { InsertQuery } from "./InsertQuery";
|
|
|
3
3
|
import { SimpleSelectQuery } from "./SimpleSelectQuery";
|
|
4
4
|
import { BinarySelectQuery } from "./BinarySelectQuery";
|
|
5
5
|
import { ValuesQuery } from "./ValuesQuery";
|
|
6
|
+
export interface CTEOptions {
|
|
7
|
+
materialized?: boolean | null;
|
|
8
|
+
}
|
|
9
|
+
export { DuplicateCTEError, InvalidCTENameError, CTENotFoundError } from './CTEError';
|
|
10
|
+
export interface CTEManagement {
|
|
11
|
+
addCTE(name: string, query: SelectQuery, options?: CTEOptions): this;
|
|
12
|
+
removeCTE(name: string): this;
|
|
13
|
+
hasCTE(name: string): boolean;
|
|
14
|
+
getCTENames(): string[];
|
|
15
|
+
replaceCTE(name: string, query: SelectQuery, options?: CTEOptions): this;
|
|
16
|
+
}
|
|
6
17
|
export interface SelectQuery extends SqlComponent {
|
|
7
18
|
setParameter(name: string, value: any): this;
|
|
19
|
+
toSimpleQuery(): SimpleSelectQuery;
|
|
8
20
|
}
|
|
9
21
|
export { SimpleSelectQuery, BinarySelectQuery, ValuesQuery, InsertQuery };
|
|
@@ -2,12 +2,12 @@ import { SqlComponent } from "./SqlComponent";
|
|
|
2
2
|
import { ForClause, FromClause, GroupByClause, HavingClause, LimitClause, OrderByClause, SelectClause, SourceExpression, WhereClause, WindowsClause as WindowClause, WithClause, CommonTable, OffsetClause, FetchClause } from "./Clause";
|
|
3
3
|
import { ValueComponent } from "./ValueComponent";
|
|
4
4
|
import { BinarySelectQuery } from "./BinarySelectQuery";
|
|
5
|
-
import type { SelectQuery } from "./SelectQuery";
|
|
5
|
+
import type { SelectQuery, CTEOptions, CTEManagement } from "./SelectQuery";
|
|
6
6
|
import { TableColumnResolver } from "../transformers/TableColumnResolver";
|
|
7
7
|
/**
|
|
8
8
|
* Represents a simple SELECT query in SQL.
|
|
9
9
|
*/
|
|
10
|
-
export declare class SimpleSelectQuery extends SqlComponent implements SelectQuery {
|
|
10
|
+
export declare class SimpleSelectQuery extends SqlComponent implements SelectQuery, CTEManagement {
|
|
11
11
|
static kind: symbol;
|
|
12
12
|
withClause: WithClause | null;
|
|
13
13
|
selectClause: SelectClause;
|
|
@@ -21,6 +21,7 @@ export declare class SimpleSelectQuery extends SqlComponent implements SelectQue
|
|
|
21
21
|
offsetClause: OffsetClause | null;
|
|
22
22
|
fetchClause: FetchClause | null;
|
|
23
23
|
forClause: ForClause | null;
|
|
24
|
+
private cteNameCache;
|
|
24
25
|
constructor(params: {
|
|
25
26
|
selectClause: SelectClause;
|
|
26
27
|
fromClause?: FromClause | null;
|
|
@@ -35,6 +36,12 @@ export declare class SimpleSelectQuery extends SqlComponent implements SelectQue
|
|
|
35
36
|
forClause?: ForClause | null;
|
|
36
37
|
withClause?: WithClause | null;
|
|
37
38
|
});
|
|
39
|
+
/**
|
|
40
|
+
* Initializes the CTE name cache from existing withClause.
|
|
41
|
+
* Called during construction and when withClause is modified externally.
|
|
42
|
+
* @private
|
|
43
|
+
*/
|
|
44
|
+
private initializeCTECache;
|
|
38
45
|
/**
|
|
39
46
|
* Creates a new BinarySelectQuery with this query as the left side and the provided query as the right side,
|
|
40
47
|
* using UNION as the operator.
|
|
@@ -216,4 +223,161 @@ export declare class SimpleSelectQuery extends SqlComponent implements SelectQue
|
|
|
216
223
|
* @param value Value to set
|
|
217
224
|
*/
|
|
218
225
|
setParameter(name: string, value: any): this;
|
|
226
|
+
/**
|
|
227
|
+
* Returns this SimpleSelectQuery instance (identity function).
|
|
228
|
+
* @returns This SimpleSelectQuery instance
|
|
229
|
+
*/
|
|
230
|
+
toSimpleQuery(): SimpleSelectQuery;
|
|
231
|
+
/**
|
|
232
|
+
* Adds a CTE (Common Table Expression) to the query.
|
|
233
|
+
*
|
|
234
|
+
* @param name CTE name/alias (must be non-empty)
|
|
235
|
+
* @param query SelectQuery to use as CTE
|
|
236
|
+
* @param options Optional configuration
|
|
237
|
+
* @param options.materialized PostgreSQL-specific: true = MATERIALIZED, false = NOT MATERIALIZED, null/undefined = no hint
|
|
238
|
+
*
|
|
239
|
+
* @throws {InvalidCTENameError} When name is empty or whitespace-only
|
|
240
|
+
* @throws {DuplicateCTEError} When CTE with same name already exists
|
|
241
|
+
*
|
|
242
|
+
* @example
|
|
243
|
+
* ```typescript
|
|
244
|
+
* // Basic CTE
|
|
245
|
+
* query.addCTE('active_users',
|
|
246
|
+
* SelectQueryParser.parse('SELECT * FROM users WHERE active = true')
|
|
247
|
+
* );
|
|
248
|
+
*
|
|
249
|
+
* // PostgreSQL MATERIALIZED CTE (forces materialization)
|
|
250
|
+
* query.addCTE('expensive_calc', expensiveQuery, { materialized: true });
|
|
251
|
+
*
|
|
252
|
+
* // PostgreSQL NOT MATERIALIZED CTE (prevents materialization)
|
|
253
|
+
* query.addCTE('simple_view', simpleQuery, { materialized: false });
|
|
254
|
+
* ```
|
|
255
|
+
*
|
|
256
|
+
* @remarks
|
|
257
|
+
* - MATERIALIZED/NOT MATERIALIZED is PostgreSQL-specific syntax
|
|
258
|
+
* - Other databases will ignore the materialized hint
|
|
259
|
+
* - CTE names must be unique within the query
|
|
260
|
+
* - Method supports fluent chaining
|
|
261
|
+
*/
|
|
262
|
+
addCTE(name: string, query: SelectQuery, options?: CTEOptions): this;
|
|
263
|
+
/**
|
|
264
|
+
* Removes a CTE by name from the query.
|
|
265
|
+
*
|
|
266
|
+
* @param name CTE name to remove
|
|
267
|
+
*
|
|
268
|
+
* @throws {CTENotFoundError} When CTE with specified name doesn't exist
|
|
269
|
+
*
|
|
270
|
+
* @example
|
|
271
|
+
* ```typescript
|
|
272
|
+
* query.addCTE('temp_data', tempQuery);
|
|
273
|
+
* query.removeCTE('temp_data'); // Removes the CTE
|
|
274
|
+
*
|
|
275
|
+
* // Throws CTENotFoundError
|
|
276
|
+
* query.removeCTE('non_existent');
|
|
277
|
+
* ```
|
|
278
|
+
*
|
|
279
|
+
* @remarks
|
|
280
|
+
* - Throws error if CTE doesn't exist (strict mode for safety)
|
|
281
|
+
* - Use hasCTE() to check existence before removal if needed
|
|
282
|
+
* - Method supports fluent chaining
|
|
283
|
+
*/
|
|
284
|
+
removeCTE(name: string): this;
|
|
285
|
+
/**
|
|
286
|
+
* Checks if a CTE with the given name exists in the query.
|
|
287
|
+
* Optimized with O(1) lookup using internal cache.
|
|
288
|
+
*
|
|
289
|
+
* @param name CTE name to check
|
|
290
|
+
* @returns true if CTE exists, false otherwise
|
|
291
|
+
*
|
|
292
|
+
* @example
|
|
293
|
+
* ```typescript
|
|
294
|
+
* query.addCTE('user_stats', statsQuery);
|
|
295
|
+
*
|
|
296
|
+
* if (query.hasCTE('user_stats')) {
|
|
297
|
+
* console.log('CTE exists');
|
|
298
|
+
* }
|
|
299
|
+
*
|
|
300
|
+
* query.removeCTE('user_stats');
|
|
301
|
+
* console.log(query.hasCTE('user_stats')); // false
|
|
302
|
+
* ```
|
|
303
|
+
*
|
|
304
|
+
* @remarks
|
|
305
|
+
* - Performs case-sensitive name matching
|
|
306
|
+
* - Returns false for queries without any CTEs
|
|
307
|
+
* - Useful for conditional CTE operations
|
|
308
|
+
* - O(1) performance using internal cache
|
|
309
|
+
*/
|
|
310
|
+
hasCTE(name: string): boolean;
|
|
311
|
+
/**
|
|
312
|
+
* Returns an array of all CTE names in the query.
|
|
313
|
+
*
|
|
314
|
+
* @returns Array of CTE names in the order they were defined
|
|
315
|
+
*
|
|
316
|
+
* @example
|
|
317
|
+
* ```typescript
|
|
318
|
+
* const query = SelectQueryParser.parse('SELECT * FROM data').toSimpleQuery();
|
|
319
|
+
*
|
|
320
|
+
* // Empty query
|
|
321
|
+
* console.log(query.getCTENames()); // []
|
|
322
|
+
*
|
|
323
|
+
* // Add CTEs
|
|
324
|
+
* query.addCTE('users', userQuery);
|
|
325
|
+
* query.addCTE('orders', orderQuery);
|
|
326
|
+
*
|
|
327
|
+
* console.log(query.getCTENames()); // ['users', 'orders']
|
|
328
|
+
*
|
|
329
|
+
* // Use for validation
|
|
330
|
+
* const expectedCTEs = ['users', 'orders', 'products'];
|
|
331
|
+
* const actualCTEs = query.getCTENames();
|
|
332
|
+
* const missingCTEs = expectedCTEs.filter(name => !actualCTEs.includes(name));
|
|
333
|
+
* ```
|
|
334
|
+
*
|
|
335
|
+
* @remarks
|
|
336
|
+
* - Returns empty array for queries without CTEs
|
|
337
|
+
* - Names are returned in definition order
|
|
338
|
+
* - Useful for debugging and validation
|
|
339
|
+
* - Names reflect actual CTE aliases, not table references
|
|
340
|
+
* - Performance: O(n) but avoids redundant array mapping
|
|
341
|
+
*/
|
|
342
|
+
getCTENames(): string[];
|
|
343
|
+
/**
|
|
344
|
+
* Replaces an existing CTE or adds a new one with the given name.
|
|
345
|
+
*
|
|
346
|
+
* @param name CTE name to replace/add (must be non-empty)
|
|
347
|
+
* @param query SelectQuery to use as CTE
|
|
348
|
+
* @param options Optional configuration
|
|
349
|
+
* @param options.materialized PostgreSQL-specific: true = MATERIALIZED, false = NOT MATERIALIZED, null/undefined = no hint
|
|
350
|
+
*
|
|
351
|
+
* @throws {InvalidCTENameError} When name is empty or whitespace-only
|
|
352
|
+
*
|
|
353
|
+
* @example
|
|
354
|
+
* ```typescript
|
|
355
|
+
* const query = SelectQueryParser.parse('SELECT * FROM final_data').toSimpleQuery();
|
|
356
|
+
* const oldQuery = SelectQueryParser.parse('SELECT id FROM old_table');
|
|
357
|
+
* const newQuery = SelectQueryParser.parse('SELECT id, status FROM new_table WHERE active = true');
|
|
358
|
+
*
|
|
359
|
+
* // Add initial CTE
|
|
360
|
+
* query.addCTE('data_source', oldQuery);
|
|
361
|
+
*
|
|
362
|
+
* // Replace with improved version
|
|
363
|
+
* query.replaceCTE('data_source', newQuery, { materialized: true });
|
|
364
|
+
*
|
|
365
|
+
* // Safe replacement - adds if doesn't exist
|
|
366
|
+
* query.replaceCTE('new_cte', newQuery); // Won't throw error
|
|
367
|
+
*
|
|
368
|
+
* // Chaining replacements
|
|
369
|
+
* query
|
|
370
|
+
* .replaceCTE('cte1', query1, { materialized: false })
|
|
371
|
+
* .replaceCTE('cte2', query2, { materialized: true });
|
|
372
|
+
* ```
|
|
373
|
+
*
|
|
374
|
+
* @remarks
|
|
375
|
+
* - Unlike addCTE(), this method won't throw error if CTE already exists
|
|
376
|
+
* - Unlike removeCTE(), this method won't throw error if CTE doesn't exist
|
|
377
|
+
* - Useful for upsert-style CTE operations
|
|
378
|
+
* - MATERIALIZED/NOT MATERIALIZED is PostgreSQL-specific
|
|
379
|
+
* - Method supports fluent chaining
|
|
380
|
+
* - Maintains CTE order when replacing existing CTEs
|
|
381
|
+
*/
|
|
382
|
+
replaceCTE(name: string, query: SelectQuery, options?: CTEOptions): this;
|
|
219
383
|
}
|
|
@@ -15,7 +15,7 @@ export declare class ValuesQuery extends SqlComponent implements SelectQuery {
|
|
|
15
15
|
*/
|
|
16
16
|
columnAliases: string[] | null;
|
|
17
17
|
constructor(tuples: TupleExpression[], columnAliases?: string[] | null);
|
|
18
|
-
|
|
18
|
+
toSimpleQuery(): SimpleSelectQuery;
|
|
19
19
|
/**
|
|
20
20
|
* Sets the value of a parameter by name in this query.
|
|
21
21
|
* @param name Parameter name
|
|
@@ -73,6 +73,10 @@ export declare class SqlPrintTokenParser implements SqlComponentVisitor<SqlPrint
|
|
|
73
73
|
params: any[] | Record<string, any>[] | Record<string, any>;
|
|
74
74
|
};
|
|
75
75
|
visit(arg: SqlComponent): SqlPrintToken;
|
|
76
|
+
/**
|
|
77
|
+
* Adds comment tokens to a SqlPrintToken based on the comments array
|
|
78
|
+
*/
|
|
79
|
+
private addCommentsToToken;
|
|
76
80
|
private visitValueList;
|
|
77
81
|
private visitColumnReference;
|
|
78
82
|
private visitFunctionCall;
|
|
@@ -108,6 +112,7 @@ export declare class SqlPrintTokenParser implements SqlComponentVisitor<SqlPrint
|
|
|
108
112
|
private visitWindowFrameBoundStatic;
|
|
109
113
|
private visitSelectItem;
|
|
110
114
|
private visitSelectClause;
|
|
115
|
+
private visitHintClause;
|
|
111
116
|
private visitDistinct;
|
|
112
117
|
private visitDistinctOn;
|
|
113
118
|
private visitTableSource;
|
|
@@ -26,6 +26,8 @@ export declare class SqlFormatter {
|
|
|
26
26
|
keywordCase?: 'none' | 'upper' | 'lower';
|
|
27
27
|
commaBreak?: CommaBreakStyle;
|
|
28
28
|
andBreak?: AndBreakStyle;
|
|
29
|
+
exportComment?: boolean;
|
|
30
|
+
strictCommentPlacement?: boolean;
|
|
29
31
|
}); /**
|
|
30
32
|
* Formats a SQL query string with the given parameters.
|
|
31
33
|
* @param sqlText The SQL query string to format.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { SelectQuery, SimpleSelectQuery } from "../models/SelectQuery";
|
|
2
|
+
/**
|
|
3
|
+
* Options for SqlParameterBinder
|
|
4
|
+
*/
|
|
5
|
+
export interface SqlParameterBinderOptions {
|
|
6
|
+
/** Whether to throw an error if a parameter value is missing (defaults to true) */
|
|
7
|
+
requireAllParameters?: boolean;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* SqlParameterBinder binds values to existing hardcoded parameters in SQL queries.
|
|
11
|
+
*
|
|
12
|
+
* This transformer is designed to work with SQL queries that already contain
|
|
13
|
+
* parameter placeholders (e.g., :param_name) and bind actual values to them.
|
|
14
|
+
*
|
|
15
|
+
* Unlike SqlParamInjector which creates new WHERE conditions, this transformer
|
|
16
|
+
* only sets values for parameters that already exist in the parsed SQL.
|
|
17
|
+
*/
|
|
18
|
+
export declare class SqlParameterBinder {
|
|
19
|
+
private options;
|
|
20
|
+
constructor(options?: SqlParameterBinderOptions);
|
|
21
|
+
/**
|
|
22
|
+
* Binds values to existing hardcoded parameters in the query.
|
|
23
|
+
* @param query The SelectQuery to modify
|
|
24
|
+
* @param parameterValues A record of parameter names and values to bind
|
|
25
|
+
* @returns The modified SelectQuery with parameter values set
|
|
26
|
+
* @throws Error when required parameters are missing values
|
|
27
|
+
*/
|
|
28
|
+
bind(query: SelectQuery, parameterValues: Record<string, any>): SelectQuery;
|
|
29
|
+
/**
|
|
30
|
+
* Convenience method to bind parameters to a SimpleSelectQuery.
|
|
31
|
+
* @param query The SimpleSelectQuery to modify
|
|
32
|
+
* @param parameterValues A record of parameter names and values to bind
|
|
33
|
+
* @returns The modified SelectQuery with parameter values set
|
|
34
|
+
*/
|
|
35
|
+
bindToSimpleQuery(query: SimpleSelectQuery, parameterValues: Record<string, any>): SelectQuery;
|
|
36
|
+
}
|
|
@@ -30,6 +30,10 @@ export declare class SqlPrinter {
|
|
|
30
30
|
andBreak: AndBreakStyle;
|
|
31
31
|
/** Keyword case style: 'none', 'upper' | 'lower' */
|
|
32
32
|
keywordCase: 'none' | 'upper' | 'lower';
|
|
33
|
+
/** Whether to export comments in the output (default: false for compatibility) */
|
|
34
|
+
exportComment: boolean;
|
|
35
|
+
/** Whether to use strict comment placement (only clause-level comments, default: false) */
|
|
36
|
+
strictCommentPlacement: boolean;
|
|
33
37
|
private linePrinter;
|
|
34
38
|
private indentIncrementContainers;
|
|
35
39
|
/**
|
|
@@ -42,6 +46,8 @@ export declare class SqlPrinter {
|
|
|
42
46
|
commaBreak?: CommaBreakStyle;
|
|
43
47
|
andBreak?: AndBreakStyle;
|
|
44
48
|
keywordCase?: 'none' | 'upper' | 'lower';
|
|
49
|
+
exportComment?: boolean;
|
|
50
|
+
strictCommentPlacement?: boolean;
|
|
45
51
|
indentIncrementContainerTypes?: string[];
|
|
46
52
|
});
|
|
47
53
|
/**
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Lexeme } from "../models/Lexeme";
|
|
2
|
+
/**
|
|
3
|
+
* Utility functions for handling comments in parsers
|
|
4
|
+
*/
|
|
5
|
+
export declare class CommentUtils {
|
|
6
|
+
/**
|
|
7
|
+
* Collects comments from preceding tokens that are associated with a specific keyword.
|
|
8
|
+
* This function looks for comments in tokens before the current position that might
|
|
9
|
+
* be related to the current clause.
|
|
10
|
+
*
|
|
11
|
+
* @param lexemes Array of lexemes
|
|
12
|
+
* @param currentIndex Index of the current keyword token
|
|
13
|
+
* @param keywordValue Expected keyword value (e.g., 'from', 'where')
|
|
14
|
+
* @returns Array of comments associated with this clause
|
|
15
|
+
*/
|
|
16
|
+
static collectClauseComments(lexemes: Lexeme[], currentIndex: number, keywordValue: string): string[] | null;
|
|
17
|
+
/**
|
|
18
|
+
* Checks if a token value is a significant SQL keyword that would separate clauses
|
|
19
|
+
*/
|
|
20
|
+
private static isSignificantSqlKeyword;
|
|
21
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { SqlComponent } from "../models/SqlComponent";
|
|
2
|
+
/**
|
|
3
|
+
* Utility class for detecting hardcoded parameters in SQL queries.
|
|
4
|
+
*
|
|
5
|
+
* This class helps identify existing ParameterExpression nodes in parsed SQL,
|
|
6
|
+
* which represent hardcoded parameters like :param_name in the original SQL.
|
|
7
|
+
*/
|
|
8
|
+
export declare class ParameterDetector {
|
|
9
|
+
/**
|
|
10
|
+
* Extracts all hardcoded parameter names from a parsed SQL query.
|
|
11
|
+
* @param query The parsed SQL query (must be a SqlComponent)
|
|
12
|
+
* @returns Array of parameter names found in the query
|
|
13
|
+
*/
|
|
14
|
+
static extractParameterNames(query: SqlComponent): string[];
|
|
15
|
+
/**
|
|
16
|
+
* Checks if a parameter with the given name exists in the query.
|
|
17
|
+
* @param query The parsed SQL query (must be a SqlComponent)
|
|
18
|
+
* @param parameterName The parameter name to check
|
|
19
|
+
* @returns True if the parameter exists, false otherwise
|
|
20
|
+
*/
|
|
21
|
+
static hasParameter(query: SqlComponent, parameterName: string): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Separates filter options into hardcoded parameters and dynamic column filters.
|
|
24
|
+
* @param query The parsed SQL query (must be a SqlComponent)
|
|
25
|
+
* @param filter The filter object from DynamicQueryBuilder options
|
|
26
|
+
* @returns Object with separated hardcoded and dynamic filters
|
|
27
|
+
*/
|
|
28
|
+
static separateFilters(query: SqlComponent, filter: Record<string, any>): {
|
|
29
|
+
hardcodedParams: Record<string, any>;
|
|
30
|
+
dynamicFilters: Record<string, any>;
|
|
31
|
+
};
|
|
32
|
+
}
|