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.
Files changed (116) hide show
  1. package/README.md +53 -0
  2. package/dist/esm/index.js +2 -0
  3. package/dist/esm/index.js.map +1 -1
  4. package/dist/esm/index.min.js +14 -14
  5. package/dist/esm/index.min.js.map +4 -4
  6. package/dist/esm/src/index.js +2 -0
  7. package/dist/esm/src/index.js.map +1 -1
  8. package/dist/esm/src/models/BinarySelectQuery.js +9 -0
  9. package/dist/esm/src/models/BinarySelectQuery.js.map +1 -1
  10. package/dist/esm/src/models/CTEError.js +31 -0
  11. package/dist/esm/src/models/CTEError.js.map +1 -0
  12. package/dist/esm/src/models/Clause.js +2 -1
  13. package/dist/esm/src/models/Clause.js.map +1 -1
  14. package/dist/esm/src/models/HintClause.js +37 -0
  15. package/dist/esm/src/models/HintClause.js.map +1 -0
  16. package/dist/esm/src/models/SelectQuery.js +1 -0
  17. package/dist/esm/src/models/SelectQuery.js.map +1 -1
  18. package/dist/esm/src/models/SimpleSelectQuery.js +229 -0
  19. package/dist/esm/src/models/SimpleSelectQuery.js.map +1 -1
  20. package/dist/esm/src/models/ValuesQuery.js +1 -1
  21. package/dist/esm/src/models/ValuesQuery.js.map +1 -1
  22. package/dist/esm/src/parsers/FromClauseParser.js +7 -0
  23. package/dist/esm/src/parsers/FromClauseParser.js.map +1 -1
  24. package/dist/esm/src/parsers/SelectClauseParser.js +13 -1
  25. package/dist/esm/src/parsers/SelectClauseParser.js.map +1 -1
  26. package/dist/esm/src/parsers/SelectQueryParser.js +10 -0
  27. package/dist/esm/src/parsers/SelectQueryParser.js.map +1 -1
  28. package/dist/esm/src/parsers/SqlPrintTokenParser.js +39 -4
  29. package/dist/esm/src/parsers/SqlPrintTokenParser.js.map +1 -1
  30. package/dist/esm/src/parsers/WhereClauseParser.js +5 -0
  31. package/dist/esm/src/parsers/WhereClauseParser.js.map +1 -1
  32. package/dist/esm/src/transformers/DynamicQueryBuilder.js +16 -5
  33. package/dist/esm/src/transformers/DynamicQueryBuilder.js.map +1 -1
  34. package/dist/esm/src/transformers/QueryBuilder.js +2 -0
  35. package/dist/esm/src/transformers/QueryBuilder.js.map +1 -1
  36. package/dist/esm/src/transformers/SqlFormatter.js.map +1 -1
  37. package/dist/esm/src/transformers/SqlParameterBinder.js +63 -0
  38. package/dist/esm/src/transformers/SqlParameterBinder.js.map +1 -0
  39. package/dist/esm/src/transformers/SqlPrinter.js +12 -2
  40. package/dist/esm/src/transformers/SqlPrinter.js.map +1 -1
  41. package/dist/esm/src/utils/CommentUtils.js +65 -0
  42. package/dist/esm/src/utils/CommentUtils.js.map +1 -0
  43. package/dist/esm/src/utils/ParameterDetector.js +49 -0
  44. package/dist/esm/src/utils/ParameterDetector.js.map +1 -0
  45. package/dist/esm/tsconfig.browser.tsbuildinfo +1 -1
  46. package/dist/esm/types/src/index.d.ts +3 -0
  47. package/dist/esm/types/src/models/BinarySelectQuery.d.ts +7 -0
  48. package/dist/esm/types/src/models/CTEError.d.ts +21 -0
  49. package/dist/esm/types/src/models/Clause.d.ts +3 -1
  50. package/dist/esm/types/src/models/HintClause.d.ts +24 -0
  51. package/dist/esm/types/src/models/SelectQuery.d.ts +12 -0
  52. package/dist/esm/types/src/models/SimpleSelectQuery.d.ts +166 -2
  53. package/dist/esm/types/src/models/ValuesQuery.d.ts +1 -1
  54. package/dist/esm/types/src/parsers/SqlPrintTokenParser.d.ts +5 -0
  55. package/dist/esm/types/src/transformers/SqlFormatter.d.ts +2 -0
  56. package/dist/esm/types/src/transformers/SqlParameterBinder.d.ts +36 -0
  57. package/dist/esm/types/src/transformers/SqlPrinter.d.ts +6 -0
  58. package/dist/esm/types/src/utils/CommentUtils.d.ts +21 -0
  59. package/dist/esm/types/src/utils/ParameterDetector.d.ts +32 -0
  60. package/dist/index.min.js +14 -14
  61. package/dist/index.min.js.map +4 -4
  62. package/dist/src/index.d.ts +3 -0
  63. package/dist/src/index.js +4 -1
  64. package/dist/src/index.js.map +1 -1
  65. package/dist/src/models/BinarySelectQuery.d.ts +7 -0
  66. package/dist/src/models/BinarySelectQuery.js +9 -0
  67. package/dist/src/models/BinarySelectQuery.js.map +1 -1
  68. package/dist/src/models/CTEError.d.ts +21 -0
  69. package/dist/src/models/CTEError.js +37 -0
  70. package/dist/src/models/CTEError.js.map +1 -0
  71. package/dist/src/models/Clause.d.ts +3 -1
  72. package/dist/src/models/Clause.js +2 -1
  73. package/dist/src/models/Clause.js.map +1 -1
  74. package/dist/src/models/HintClause.d.ts +24 -0
  75. package/dist/src/models/HintClause.js +41 -0
  76. package/dist/src/models/HintClause.js.map +1 -0
  77. package/dist/src/models/SelectQuery.d.ts +12 -0
  78. package/dist/src/models/SelectQuery.js +5 -1
  79. package/dist/src/models/SelectQuery.js.map +1 -1
  80. package/dist/src/models/SimpleSelectQuery.d.ts +166 -2
  81. package/dist/src/models/SimpleSelectQuery.js +229 -0
  82. package/dist/src/models/SimpleSelectQuery.js.map +1 -1
  83. package/dist/src/models/ValuesQuery.d.ts +1 -1
  84. package/dist/src/models/ValuesQuery.js +1 -1
  85. package/dist/src/models/ValuesQuery.js.map +1 -1
  86. package/dist/src/parsers/FromClauseParser.js +7 -0
  87. package/dist/src/parsers/FromClauseParser.js.map +1 -1
  88. package/dist/src/parsers/SelectClauseParser.js +13 -1
  89. package/dist/src/parsers/SelectClauseParser.js.map +1 -1
  90. package/dist/src/parsers/SelectQueryParser.js +10 -0
  91. package/dist/src/parsers/SelectQueryParser.js.map +1 -1
  92. package/dist/src/parsers/SqlPrintTokenParser.d.ts +5 -0
  93. package/dist/src/parsers/SqlPrintTokenParser.js +39 -4
  94. package/dist/src/parsers/SqlPrintTokenParser.js.map +1 -1
  95. package/dist/src/parsers/WhereClauseParser.js +5 -0
  96. package/dist/src/parsers/WhereClauseParser.js.map +1 -1
  97. package/dist/src/transformers/DynamicQueryBuilder.js +16 -5
  98. package/dist/src/transformers/DynamicQueryBuilder.js.map +1 -1
  99. package/dist/src/transformers/QueryBuilder.js +2 -0
  100. package/dist/src/transformers/QueryBuilder.js.map +1 -1
  101. package/dist/src/transformers/SqlFormatter.d.ts +2 -0
  102. package/dist/src/transformers/SqlFormatter.js.map +1 -1
  103. package/dist/src/transformers/SqlParameterBinder.d.ts +36 -0
  104. package/dist/src/transformers/SqlParameterBinder.js +70 -0
  105. package/dist/src/transformers/SqlParameterBinder.js.map +1 -0
  106. package/dist/src/transformers/SqlPrinter.d.ts +6 -0
  107. package/dist/src/transformers/SqlPrinter.js +12 -2
  108. package/dist/src/transformers/SqlPrinter.js.map +1 -1
  109. package/dist/src/utils/CommentUtils.d.ts +21 -0
  110. package/dist/src/utils/CommentUtils.js +69 -0
  111. package/dist/src/utils/CommentUtils.js.map +1 -0
  112. package/dist/src/utils/ParameterDetector.d.ts +32 -0
  113. package/dist/src/utils/ParameterDetector.js +53 -0
  114. package/dist/src/utils/ParameterDetector.js.map +1 -0
  115. package/dist/tsconfig.tsbuildinfo +1 -1
  116. 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
- constructor(items: SelectItem[], distinct?: DistinctComponent | null);
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
- toSimpleSelectQuery(): SimpleSelectQuery;
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
+ }