rawsql-ts 0.16.0 → 0.18.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.
Files changed (223) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +161 -875
  3. package/dist/esm/index.d.ts +11 -0
  4. package/dist/esm/index.js +11 -0
  5. package/dist/esm/index.js.map +1 -1
  6. package/dist/esm/index.min.js +23 -21
  7. package/dist/esm/index.min.js.map +4 -4
  8. package/dist/esm/models/Clause.d.ts +15 -3
  9. package/dist/esm/models/Clause.js +2 -1
  10. package/dist/esm/models/Clause.js.map +1 -1
  11. package/dist/esm/models/CreateTableQuery.d.ts +3 -0
  12. package/dist/esm/models/CreateTableQuery.js +5 -4
  13. package/dist/esm/models/CreateTableQuery.js.map +1 -1
  14. package/dist/esm/models/DDLStatements.d.ts +71 -0
  15. package/dist/esm/models/DDLStatements.js +63 -0
  16. package/dist/esm/models/DDLStatements.js.map +1 -1
  17. package/dist/esm/models/KeywordTrie.d.ts +2 -3
  18. package/dist/esm/models/KeywordTrie.js +26 -27
  19. package/dist/esm/models/KeywordTrie.js.map +1 -1
  20. package/dist/esm/models/SqlPrintToken.d.ts +1 -0
  21. package/dist/esm/models/SqlPrintToken.js +1 -0
  22. package/dist/esm/models/SqlPrintToken.js.map +1 -1
  23. package/dist/esm/parsers/CheckpointStatementParser.d.ts +8 -0
  24. package/dist/esm/parsers/CheckpointStatementParser.js +14 -0
  25. package/dist/esm/parsers/CheckpointStatementParser.js.map +1 -0
  26. package/dist/esm/parsers/ClusterStatementParser.d.ts +8 -0
  27. package/dist/esm/parsers/ClusterStatementParser.js +14 -0
  28. package/dist/esm/parsers/ClusterStatementParser.js.map +1 -0
  29. package/dist/esm/parsers/CommandExpressionParser.js.map +1 -1
  30. package/dist/esm/parsers/CommentOnParser.d.ts +23 -0
  31. package/dist/esm/parsers/CommentOnParser.js +61 -0
  32. package/dist/esm/parsers/CommentOnParser.js.map +1 -0
  33. package/dist/esm/parsers/CommonTableParser.d.ts +5 -1
  34. package/dist/esm/parsers/CommonTableParser.js +94 -16
  35. package/dist/esm/parsers/CommonTableParser.js.map +1 -1
  36. package/dist/esm/parsers/CreateIndexParser.js +12 -6
  37. package/dist/esm/parsers/CreateIndexParser.js.map +1 -1
  38. package/dist/esm/parsers/CreateTableParser.d.ts +2 -0
  39. package/dist/esm/parsers/CreateTableParser.js +11 -2
  40. package/dist/esm/parsers/CreateTableParser.js.map +1 -1
  41. package/dist/esm/parsers/ExplainStatementParser.js.map +1 -1
  42. package/dist/esm/parsers/FullNameParser.js +35 -3
  43. package/dist/esm/parsers/FullNameParser.js.map +1 -1
  44. package/dist/esm/parsers/OrderByClauseParser.js.map +1 -1
  45. package/dist/esm/parsers/ReindexStatementParser.d.ts +8 -0
  46. package/dist/esm/parsers/ReindexStatementParser.js +14 -0
  47. package/dist/esm/parsers/ReindexStatementParser.js.map +1 -0
  48. package/dist/esm/parsers/SelectQueryParser.js.map +1 -1
  49. package/dist/esm/parsers/SourceParser.js +6 -1
  50. package/dist/esm/parsers/SourceParser.js.map +1 -1
  51. package/dist/esm/parsers/SqlParser.d.ts +12 -2
  52. package/dist/esm/parsers/SqlParser.js +117 -251
  53. package/dist/esm/parsers/SqlParser.js.map +1 -1
  54. package/dist/esm/parsers/SqlPrintTokenParser.d.ts +1 -0
  55. package/dist/esm/parsers/SqlPrintTokenParser.js +32 -4
  56. package/dist/esm/parsers/SqlPrintTokenParser.js.map +1 -1
  57. package/dist/esm/parsers/SqlTokenizer.d.ts +5 -0
  58. package/dist/esm/parsers/SqlTokenizer.js +181 -67
  59. package/dist/esm/parsers/SqlTokenizer.js.map +1 -1
  60. package/dist/esm/parsers/UsingClauseParser.js.map +1 -1
  61. package/dist/esm/parsers/VacuumStatementParser.d.ts +8 -0
  62. package/dist/esm/parsers/VacuumStatementParser.js +14 -0
  63. package/dist/esm/parsers/VacuumStatementParser.js.map +1 -0
  64. package/dist/esm/tokenReaders/CommandTokenReader.js +22 -4
  65. package/dist/esm/tokenReaders/CommandTokenReader.js.map +1 -1
  66. package/dist/esm/tokenReaders/StringSpecifierTokenReader.d.ts +2 -0
  67. package/dist/esm/tokenReaders/StringSpecifierTokenReader.js +30 -13
  68. package/dist/esm/tokenReaders/StringSpecifierTokenReader.js.map +1 -1
  69. package/dist/esm/tokenReaders/TokenReaderManager.d.ts +0 -7
  70. package/dist/esm/tokenReaders/TokenReaderManager.js +16 -48
  71. package/dist/esm/tokenReaders/TokenReaderManager.js.map +1 -1
  72. package/dist/esm/transformers/AliasRenamer.d.ts +1 -0
  73. package/dist/esm/transformers/AliasRenamer.js +7 -1
  74. package/dist/esm/transformers/AliasRenamer.js.map +1 -1
  75. package/dist/esm/transformers/CTECollector.d.ts +5 -2
  76. package/dist/esm/transformers/CTECollector.js +49 -0
  77. package/dist/esm/transformers/CTECollector.js.map +1 -1
  78. package/dist/esm/transformers/CTEDependencyTracer.d.ts +6 -1
  79. package/dist/esm/transformers/CTEDependencyTracer.js +44 -2
  80. package/dist/esm/transformers/CTEDependencyTracer.js.map +1 -1
  81. package/dist/esm/transformers/CTEDisabler.d.ts +6 -0
  82. package/dist/esm/transformers/CTEDisabler.js +19 -0
  83. package/dist/esm/transformers/CTEDisabler.js.map +1 -1
  84. package/dist/esm/transformers/CTERenamer.js +5 -2
  85. package/dist/esm/transformers/CTERenamer.js.map +1 -1
  86. package/dist/esm/transformers/ColumnReferenceCollector.d.ts +4 -0
  87. package/dist/esm/transformers/ColumnReferenceCollector.js +69 -1
  88. package/dist/esm/transformers/ColumnReferenceCollector.js.map +1 -1
  89. package/dist/esm/transformers/DeleteResultSelectConverter.js.map +1 -1
  90. package/dist/esm/transformers/DynamicQueryBuilder.d.ts +88 -16
  91. package/dist/esm/transformers/DynamicQueryBuilder.js +146 -18
  92. package/dist/esm/transformers/DynamicQueryBuilder.js.map +1 -1
  93. package/dist/esm/transformers/ExistsPredicateInjector.d.ts +33 -0
  94. package/dist/esm/transformers/ExistsPredicateInjector.js +294 -0
  95. package/dist/esm/transformers/ExistsPredicateInjector.js.map +1 -0
  96. package/dist/esm/transformers/FixtureCteBuilder.js +5 -2
  97. package/dist/esm/transformers/FixtureCteBuilder.js.map +1 -1
  98. package/dist/esm/transformers/InsertResultSelectConverter.d.ts +1 -0
  99. package/dist/esm/transformers/InsertResultSelectConverter.js +28 -7
  100. package/dist/esm/transformers/InsertResultSelectConverter.js.map +1 -1
  101. package/dist/esm/transformers/LinePrinter.d.ts +4 -2
  102. package/dist/esm/transformers/LinePrinter.js +93 -22
  103. package/dist/esm/transformers/LinePrinter.js.map +1 -1
  104. package/dist/esm/transformers/MergeResultSelectConverter.js.map +1 -1
  105. package/dist/esm/transformers/OptimizeUnusedLeftJoins.d.ts +33 -0
  106. package/dist/esm/transformers/OptimizeUnusedLeftJoins.js +333 -0
  107. package/dist/esm/transformers/OptimizeUnusedLeftJoins.js.map +1 -0
  108. package/dist/esm/transformers/PruneOptionalConditionBranches.d.ts +22 -0
  109. package/dist/esm/transformers/PruneOptionalConditionBranches.js +265 -0
  110. package/dist/esm/transformers/PruneOptionalConditionBranches.js.map +1 -0
  111. package/dist/esm/transformers/SSSQLFilterBuilder.d.ts +30 -0
  112. package/dist/esm/transformers/SSSQLFilterBuilder.js +253 -0
  113. package/dist/esm/transformers/SSSQLFilterBuilder.js.map +1 -0
  114. package/dist/esm/transformers/SchemaCollector.d.ts +3 -0
  115. package/dist/esm/transformers/SchemaCollector.js +37 -1
  116. package/dist/esm/transformers/SchemaCollector.js.map +1 -1
  117. package/dist/esm/transformers/SelectValueCollector.d.ts +5 -0
  118. package/dist/esm/transformers/SelectValueCollector.js +44 -2
  119. package/dist/esm/transformers/SelectValueCollector.js.map +1 -1
  120. package/dist/esm/transformers/SqlParamInjector.d.ts +5 -1
  121. package/dist/esm/transformers/SqlParamInjector.js +47 -11
  122. package/dist/esm/transformers/SqlParamInjector.js.map +1 -1
  123. package/dist/esm/transformers/SqlPrinter.js +8 -2
  124. package/dist/esm/transformers/SqlPrinter.js.map +1 -1
  125. package/dist/esm/transformers/TableSourceCollector.d.ts +9 -1
  126. package/dist/esm/transformers/TableSourceCollector.js +72 -5
  127. package/dist/esm/transformers/TableSourceCollector.js.map +1 -1
  128. package/dist/esm/transformers/UpdateResultSelectConverter.js.map +1 -1
  129. package/dist/esm/transformers/UpstreamSelectQueryFinder.d.ts +5 -0
  130. package/dist/esm/transformers/UpstreamSelectQueryFinder.js +46 -1
  131. package/dist/esm/transformers/UpstreamSelectQueryFinder.js.map +1 -1
  132. package/dist/esm/utils/CommentUtils.d.ts +1 -0
  133. package/dist/esm/utils/CommentUtils.js +14 -4
  134. package/dist/esm/utils/CommentUtils.js.map +1 -1
  135. package/dist/esm/utils/MultiQuerySplitter.d.ts +7 -11
  136. package/dist/esm/utils/MultiQuerySplitter.js +105 -66
  137. package/dist/esm/utils/MultiQuerySplitter.js.map +1 -1
  138. package/dist/esm/utils/ParameterRemover.d.ts +4 -0
  139. package/dist/esm/utils/ParameterRemover.js +23 -0
  140. package/dist/esm/utils/ParameterRemover.js.map +1 -1
  141. package/dist/esm/utils/RelationGraph.d.ts +43 -0
  142. package/dist/esm/utils/RelationGraph.js +117 -0
  143. package/dist/esm/utils/RelationGraph.js.map +1 -0
  144. package/dist/esm/utils/ScopeResolver.d.ts +5 -2
  145. package/dist/esm/utils/ScopeResolver.js +37 -18
  146. package/dist/esm/utils/ScopeResolver.js.map +1 -1
  147. package/dist/esm/utils/charLookupTable.d.ts +6 -0
  148. package/dist/esm/utils/charLookupTable.js +9 -1
  149. package/dist/esm/utils/charLookupTable.js.map +1 -1
  150. package/dist/esm/utils/serialTypeNormalization.d.ts +15 -0
  151. package/dist/esm/utils/serialTypeNormalization.js +55 -0
  152. package/dist/esm/utils/serialTypeNormalization.js.map +1 -0
  153. package/dist/esm/utils/stringUtils.js +51 -26
  154. package/dist/esm/utils/stringUtils.js.map +1 -1
  155. package/dist/index.js +6 -0
  156. package/dist/index.js.map +1 -1
  157. package/dist/index.min.js +22 -20
  158. package/dist/index.min.js.map +4 -4
  159. package/dist/models/CreateTableQuery.js +5 -4
  160. package/dist/models/CreateTableQuery.js.map +1 -1
  161. package/dist/models/DDLStatements.js +14 -1
  162. package/dist/models/DDLStatements.js.map +1 -1
  163. package/dist/models/KeywordTrie.js +26 -27
  164. package/dist/models/KeywordTrie.js.map +1 -1
  165. package/dist/models/SqlPrintToken.js +1 -0
  166. package/dist/models/SqlPrintToken.js.map +1 -1
  167. package/dist/parsers/CommentOnParser.js +65 -0
  168. package/dist/parsers/CommentOnParser.js.map +1 -0
  169. package/dist/parsers/CreateIndexParser.js +12 -6
  170. package/dist/parsers/CreateIndexParser.js.map +1 -1
  171. package/dist/parsers/CreateTableParser.js +6 -1
  172. package/dist/parsers/CreateTableParser.js.map +1 -1
  173. package/dist/parsers/FullNameParser.js +35 -3
  174. package/dist/parsers/FullNameParser.js.map +1 -1
  175. package/dist/parsers/SqlParser.js +93 -307
  176. package/dist/parsers/SqlParser.js.map +1 -1
  177. package/dist/parsers/SqlPrintTokenParser.js +27 -3
  178. package/dist/parsers/SqlPrintTokenParser.js.map +1 -1
  179. package/dist/parsers/SqlTokenizer.js +176 -67
  180. package/dist/parsers/SqlTokenizer.js.map +1 -1
  181. package/dist/src/index.d.ts +6 -0
  182. package/dist/src/models/CreateTableQuery.d.ts +3 -0
  183. package/dist/src/models/DDLStatements.d.ts +15 -0
  184. package/dist/src/models/KeywordTrie.d.ts +2 -3
  185. package/dist/src/models/SqlPrintToken.d.ts +1 -0
  186. package/dist/src/parsers/CommentOnParser.d.ts +23 -0
  187. package/dist/src/parsers/CreateTableParser.d.ts +1 -0
  188. package/dist/src/parsers/SqlParser.d.ts +8 -2
  189. package/dist/src/parsers/SqlPrintTokenParser.d.ts +1 -0
  190. package/dist/src/parsers/SqlTokenizer.d.ts +5 -0
  191. package/dist/src/tokenReaders/StringSpecifierTokenReader.d.ts +2 -0
  192. package/dist/src/tokenReaders/TokenReaderManager.d.ts +0 -7
  193. package/dist/src/transformers/DynamicQueryBuilder.d.ts +21 -13
  194. package/dist/src/transformers/LinePrinter.d.ts +4 -2
  195. package/dist/src/transformers/PruneOptionalConditionBranches.d.ts +22 -0
  196. package/dist/src/transformers/SSSQLFilterBuilder.d.ts +30 -0
  197. package/dist/src/utils/CommentUtils.d.ts +1 -0
  198. package/dist/src/utils/MultiQuerySplitter.d.ts +7 -11
  199. package/dist/src/utils/RelationGraph.d.ts +43 -0
  200. package/dist/tokenReaders/CommandTokenReader.js +21 -4
  201. package/dist/tokenReaders/CommandTokenReader.js.map +1 -1
  202. package/dist/tokenReaders/StringSpecifierTokenReader.js +30 -13
  203. package/dist/tokenReaders/StringSpecifierTokenReader.js.map +1 -1
  204. package/dist/tokenReaders/TokenReaderManager.js +16 -48
  205. package/dist/tokenReaders/TokenReaderManager.js.map +1 -1
  206. package/dist/transformers/DynamicQueryBuilder.js +28 -95
  207. package/dist/transformers/DynamicQueryBuilder.js.map +1 -1
  208. package/dist/transformers/LinePrinter.js +93 -22
  209. package/dist/transformers/LinePrinter.js.map +1 -1
  210. package/dist/transformers/PruneOptionalConditionBranches.js +270 -0
  211. package/dist/transformers/PruneOptionalConditionBranches.js.map +1 -0
  212. package/dist/transformers/SSSQLFilterBuilder.js +259 -0
  213. package/dist/transformers/SSSQLFilterBuilder.js.map +1 -0
  214. package/dist/tsconfig.browser.tsbuildinfo +1 -1
  215. package/dist/utils/CommentUtils.js +14 -4
  216. package/dist/utils/CommentUtils.js.map +1 -1
  217. package/dist/utils/MultiQuerySplitter.js +105 -66
  218. package/dist/utils/MultiQuerySplitter.js.map +1 -1
  219. package/dist/utils/RelationGraph.js +123 -0
  220. package/dist/utils/RelationGraph.js.map +1 -0
  221. package/dist/utils/stringUtils.js +42 -23
  222. package/dist/utils/stringUtils.js.map +1 -1
  223. package/package.json +4 -4
@@ -2,7 +2,6 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DynamicQueryBuilder = void 0;
4
4
  const SelectQueryParser_1 = require("../parsers/SelectQueryParser");
5
- const SqlParamInjector_1 = require("./SqlParamInjector");
6
5
  const SqlSortInjector_1 = require("./SqlSortInjector");
7
6
  const SqlPaginationInjector_1 = require("./SqlPaginationInjector");
8
7
  const PostgresJsonQueryBuilder_1 = require("./PostgresJsonQueryBuilder");
@@ -10,8 +9,8 @@ const QueryBuilder_1 = require("./QueryBuilder");
10
9
  const SqlParameterBinder_1 = require("./SqlParameterBinder");
11
10
  const ParameterDetector_1 = require("../utils/ParameterDetector");
12
11
  const ValueComponent_1 = require("../models/ValueComponent");
13
- const ExistsPredicateInjector_1 = require("./ExistsPredicateInjector");
14
12
  const OptimizeUnusedLeftJoins_1 = require("./OptimizeUnusedLeftJoins");
13
+ const PruneOptionalConditionBranches_1 = require("./PruneOptionalConditionBranches");
15
14
  /**
16
15
  * DynamicQueryBuilder combines SQL parsing with dynamic condition injection (filters, sorts, paging, JSON serialization).
17
16
  *
@@ -68,7 +67,7 @@ class DynamicQueryBuilder {
68
67
  }
69
68
  // Apply dynamic modifications in the correct order
70
69
  let modifiedQuery = parsedQuery;
71
- // 1. Bind hardcoded parameters first (before any other transformations)
70
+ // 1. Bind existing named parameters, but fail fast for legacy runtime filter assembly.
72
71
  if (options.filter && Object.keys(options.filter).length > 0) {
73
72
  const { hardcodedParams, dynamicFilters } = ParameterDetector_1.ParameterDetector.separateFilters(modifiedQuery, options.filter);
74
73
  // Bind hardcoded parameters if any exist
@@ -76,19 +75,9 @@ class DynamicQueryBuilder {
76
75
  const parameterBinder = new SqlParameterBinder_1.SqlParameterBinder({ requireAllParameters: false });
77
76
  modifiedQuery = parameterBinder.bind(modifiedQuery, hardcodedParams);
78
77
  }
79
- // Extract and remove any column-anchored EXISTS filters before injecting traditional ones.
80
- const { filters: cleanedFilters, instructions: existsInstructions } = this.extractExistsInstructions(dynamicFilters);
81
- if (Object.keys(cleanedFilters).length > 0) {
82
- const paramInjector = new SqlParamInjector_1.SqlParamInjector(this.tableColumnResolver);
83
- // Ensure we have a SimpleSelectQuery for the injector
84
- const simpleQuery = QueryBuilder_1.QueryBuilder.buildSimpleQuery(modifiedQuery);
85
- modifiedQuery = paramInjector.inject(simpleQuery, cleanedFilters);
86
- }
87
- if (existsInstructions.length > 0) {
88
- modifiedQuery = (0, ExistsPredicateInjector_1.injectExistsPredicates)(modifiedQuery, existsInstructions, {
89
- tableColumnResolver: this.tableColumnResolver,
90
- strict: !!options.existsStrict
91
- });
78
+ const hasLegacyDynamicFilters = Object.keys(dynamicFilters).length > 0;
79
+ if (hasLegacyDynamicFilters) {
80
+ throw new Error("DynamicQueryBuilder no longer injects runtime filter predicates. Use `ztd query sssql scaffold` to author optional filters, `ztd query sssql refresh` to refresh them, and `optionalConditionParameters` at runtime for pruning only.");
92
81
  }
93
82
  }
94
83
  // 2. Apply sorting second (after filtering to sort smaller dataset)
@@ -111,12 +100,17 @@ class DynamicQueryBuilder {
111
100
  }
112
101
  // 4. Apply column projection filters before any optimizer passes.
113
102
  modifiedQuery = this.applyColumnFilters(modifiedQuery, options);
114
- // 5. Remove unused LEFT JOINs when asked before serialization.
103
+ // 5. Prune supported truthful optional branches before structural optimizers.
104
+ const optionalConditionParameters = this.resolveOptionalConditionPruningParameters(options);
105
+ if (Object.keys(optionalConditionParameters).length > 0) {
106
+ modifiedQuery = (0, PruneOptionalConditionBranches_1.pruneOptionalConditionBranches)(modifiedQuery, optionalConditionParameters);
107
+ }
108
+ // 6. Remove unused LEFT JOINs when asked before serialization.
115
109
  const effectiveSchemaInfo = (_a = options.schemaInfo) !== null && _a !== void 0 ? _a : this.defaultSchemaInfo;
116
110
  if (options.removeUnusedLeftJoins && (effectiveSchemaInfo === null || effectiveSchemaInfo === void 0 ? void 0 : effectiveSchemaInfo.length)) {
117
111
  modifiedQuery = (0, OptimizeUnusedLeftJoins_1.optimizeUnusedLeftJoinsToFixedPoint)(modifiedQuery, effectiveSchemaInfo);
118
112
  }
119
- // 6. Remove unused CTEs before serialization when requested.
113
+ // 7. Remove unused CTEs before serialization when requested.
120
114
  if (options.removeUnusedCtes) {
121
115
  modifiedQuery = (0, OptimizeUnusedLeftJoins_1.optimizeUnusedCtesToFixedPoint)(modifiedQuery);
122
116
  }
@@ -130,82 +124,21 @@ class DynamicQueryBuilder {
130
124
  }
131
125
  return modifiedQuery;
132
126
  }
133
- extractExistsInstructions(filters) {
134
- const cleanedFilters = {};
135
- const instructions = [];
136
- for (const [key, value] of Object.entries(filters)) {
137
- if (key === "$exists" || key === "$notExists") {
138
- // Multi-anchor metadata arrives as arrays keyed by the special markers.
139
- if (!this.isMultiColumnDefinitionArray(value)) {
140
- throw new Error(`'${key}' must be an array of EXISTS definitions.`);
141
- }
142
- this.handleMultiAnchorDefinitions(key, value, instructions);
143
- continue;
144
- }
145
- if (this.isFilterConditionObject(value)) {
146
- const { leftover, exists, notExists } = this.splitExistsProperties(value);
147
- if (exists) {
148
- instructions.push(this.createExistsInstruction([key], exists, "exists"));
149
- }
150
- if (notExists) {
151
- instructions.push(this.createExistsInstruction([key], notExists, "notExists"));
152
- }
153
- if (leftover) {
154
- cleanedFilters[key] = leftover;
155
- }
156
- continue;
157
- }
158
- if (this.isMultiColumnDefinitionArray(value)) {
159
- continue;
160
- }
161
- cleanedFilters[key] = value;
127
+ resolveOptionalConditionPruningParameters(options) {
128
+ if (options.optionalConditionParameters) {
129
+ return options.optionalConditionParameters;
162
130
  }
163
- return { filters: cleanedFilters, instructions };
164
- }
165
- handleMultiAnchorDefinitions(key, definitions, instructions) {
166
- // Build instructions for each multi-anchor definition in the batch.
167
- for (const definition of definitions) {
168
- if (!definition.on || definition.on.length === 0) {
169
- throw new Error(`Every ${key} instruction must specify an "on" array.`);
170
- }
171
- instructions.push(this.createExistsInstruction(definition.on, definition, key === "$notExists" ? "notExists" : "exists"));
131
+ if (!options.optionalConditionParameterStates) {
132
+ return {};
172
133
  }
173
- }
174
- splitExistsProperties(value) {
175
- const { exists, notExists, ...rest } = value;
176
- const hasRemaining = Object.keys(rest).length > 0;
177
- return {
178
- leftover: hasRemaining ? rest : undefined,
179
- exists: exists,
180
- notExists: notExists
181
- };
182
- }
183
- isFilterConditionObject(value) {
184
- return value !== null && typeof value === "object" && !Array.isArray(value);
185
- }
186
- isMultiColumnDefinitionArray(value) {
187
- return Array.isArray(value) && value.every(entry => this.isMultiColumnDefinition(entry));
188
- }
189
- isMultiColumnDefinition(value) {
190
- if (!value || typeof value !== "object") {
191
- return false;
192
- }
193
- const candidate = value;
194
- return (Array.isArray(candidate.on) &&
195
- candidate.on.length > 0 &&
196
- candidate.on.every(column => typeof column === "string") &&
197
- typeof candidate.sql === "string");
198
- }
199
- createExistsInstruction(anchors, definition, mode) {
200
- if (!definition.sql || typeof definition.sql !== "string") {
201
- throw new Error("EXISTS definition must include a SQL string.");
134
+ const legacyParameters = {};
135
+ // Preserve backward compatibility for the state-map API while the value-based API becomes the primary entry point.
136
+ for (const [parameterName, state] of Object.entries(options.optionalConditionParameterStates)) {
137
+ legacyParameters[parameterName] = state === 'absent'
138
+ ? null
139
+ : '__RAWSQL_OPTIONAL_CONDITION_PRESENT__';
202
140
  }
203
- return {
204
- mode,
205
- anchorColumns: anchors,
206
- sql: definition.sql,
207
- params: definition.params
208
- };
141
+ return legacyParameters;
209
142
  }
210
143
  applyColumnFilters(query, options) {
211
144
  const hasIncludeFilters = Array.isArray(options.includeColumns) && options.includeColumns.length > 0;
@@ -295,12 +228,12 @@ class DynamicQueryBuilder {
295
228
  return null;
296
229
  }
297
230
  /**
298
- * Builds a SelectQuery with only filtering applied.
299
- * Convenience method for when you only need dynamic WHERE conditions.
231
+ * Legacy helper for binding existing named parameters without adding new runtime predicates.
232
+ * Dynamic WHERE-condition injection is no longer supported; use SSSQL scaffold/refresh instead.
300
233
  *
301
234
  * @param sqlContent Raw SQL string to parse and modify
302
- * @param filter Filter conditions to apply
303
- * @returns Modified SelectQuery with filter conditions applied
235
+ * @param filter Named parameters to bind when they already exist in the SQL
236
+ * @returns Modified SelectQuery after binding existing named parameters
304
237
  */
305
238
  buildFilteredQuery(sqlContent, filter) {
306
239
  return this.buildQuery(sqlContent, { filter });
@@ -1 +1 @@
1
- {"version":3,"file":"DynamicQueryBuilder.js","sourceRoot":"","sources":["../../src/transformers/DynamicQueryBuilder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DynamicQueryBuilder.js","sourceRoot":"","sources":["../../src/transformers/DynamicQueryBuilder.ts"],"names":[],"mappings":"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"}
@@ -45,7 +45,8 @@ class LinePrinter {
45
45
  if (this.lines.length > 0) {
46
46
  const current = this.lines[this.lines.length - 1];
47
47
  if (current.text !== '') {
48
- current.text = current.text.trimEnd() + this.newline;
48
+ const lineText = this.endsWithAsciiWhitespace(current.text) ? current.text.trimEnd() : current.text;
49
+ current.text = lineText + this.newline;
49
50
  }
50
51
  }
51
52
  this.lines.push(new PrintLine(level, ''));
@@ -56,11 +57,12 @@ class LinePrinter {
56
57
  * @param text Text to append
57
58
  */
58
59
  appendText(text) {
59
- // Handle special comma cleanup first
60
- if (this.cleanupLine(text)) {
60
+ // Handle special comma cleanup only when a comma token is appended.
61
+ if (text === ',' && this.cleanupLine()) {
61
62
  // If cleanup was performed, add comma to previous line
62
63
  const previousLine = this.lines[this.lines.length - 1];
63
- previousLine.text = previousLine.text.trimEnd() + text;
64
+ const lineText = this.endsWithAsciiWhitespace(previousLine.text) ? previousLine.text.trimEnd() : previousLine.text;
65
+ previousLine.text = lineText + text;
64
66
  return;
65
67
  }
66
68
  const workLine = this.getCurrentLine();
@@ -69,29 +71,53 @@ class LinePrinter {
69
71
  workLine.text += text;
70
72
  }
71
73
  }
74
+ endsWithAsciiWhitespace(text) {
75
+ if (text.length === 0) {
76
+ return false;
77
+ }
78
+ const tail = text.charCodeAt(text.length - 1);
79
+ return tail === 32 || tail === 9 || tail === 10 || tail === 13;
80
+ }
72
81
  trimTrailingWhitespaceFromPreviousLine() {
73
82
  if (this.lines.length < 2) {
74
83
  return;
75
84
  }
76
85
  const previousLine = this.lines[this.lines.length - 2];
77
- const newlineMatch = previousLine.text.match(/(\r?\n)$/);
78
- const trailingNewline = newlineMatch ? newlineMatch[1] : '';
79
- const content = trailingNewline
80
- ? previousLine.text.slice(0, -trailingNewline.length)
81
- : previousLine.text;
82
- previousLine.text = content.replace(/[ \t]+$/, '') + trailingNewline;
86
+ const text = previousLine.text;
87
+ const lineEnd = this.findLineEndIndex(text);
88
+ let contentEnd = lineEnd;
89
+ // Trim only trailing spaces/tabs before a preserved newline suffix.
90
+ while (contentEnd > 0) {
91
+ const code = text.charCodeAt(contentEnd - 1);
92
+ if (code !== 32 && code !== 9) {
93
+ break;
94
+ }
95
+ contentEnd--;
96
+ }
97
+ if (contentEnd === lineEnd) {
98
+ return;
99
+ }
100
+ previousLine.text = text.slice(0, contentEnd) + text.slice(lineEnd);
101
+ }
102
+ findLineEndIndex(text) {
103
+ if (text.endsWith('\r\n')) {
104
+ return text.length - 2;
105
+ }
106
+ if (text.endsWith('\n')) {
107
+ return text.length - 1;
108
+ }
109
+ return text.length;
83
110
  }
84
111
  /**
85
112
  * Cleans up the current line for comma formatting.
86
113
  * For 'after' and 'none' comma styles, removes empty line when a comma is being added.
87
- * @param text The text being processed
88
114
  * @returns true if cleanup was performed, false otherwise
89
115
  */
90
- cleanupLine(text) {
116
+ cleanupLine() {
91
117
  const workLine = this.getCurrentLine();
92
- if (text === ',' && workLine.text.trim() === '' && this.lines.length > 1 && (this.commaBreak === 'after' || this.commaBreak === 'none')) {
118
+ if (this.isAsciiWhitespaceOnly(workLine.text) && this.lines.length > 1 && (this.commaBreak === 'after' || this.commaBreak === 'none')) {
93
119
  let previousIndex = this.lines.length - 2;
94
- while (previousIndex >= 0 && this.lines[previousIndex].text.trim() === '') {
120
+ while (previousIndex >= 0 && this.isAsciiWhitespaceOnly(this.lines[previousIndex].text)) {
95
121
  this.lines.splice(previousIndex, 1);
96
122
  previousIndex--;
97
123
  }
@@ -108,14 +134,59 @@ class LinePrinter {
108
134
  }
109
135
  return false; // No cleanup needed
110
136
  }
137
+ isAsciiWhitespaceOnly(text) {
138
+ for (let i = 0; i < text.length; i++) {
139
+ const code = text.charCodeAt(i);
140
+ if (code !== 32 && code !== 9 && code !== 10 && code !== 13) {
141
+ return false;
142
+ }
143
+ }
144
+ return true;
145
+ }
111
146
  lineHasTrailingComment(text) {
112
- // Strip simple quoted sections so comment markers inside literals are ignored.
113
- const withoutStrings = text
114
- .replace(/'([^']|'')*'/g, '')
115
- .replace(/"([^"]|"")*"/g, '')
116
- .trim();
117
- // Treat any remaining '--' as a line comment marker so we never pull commas onto commented lines.
118
- return withoutStrings.includes('--');
147
+ if (!text.includes('--')) {
148
+ return false;
149
+ }
150
+ if (!text.includes("'") && !text.includes('"')) {
151
+ return true;
152
+ }
153
+ let quote = null;
154
+ for (let i = 0; i < text.length - 1; i++) {
155
+ const current = text.charCodeAt(i);
156
+ const next = text.charCodeAt(i + 1);
157
+ if (quote === 39) {
158
+ if (current === 39) {
159
+ if (next === 39) {
160
+ i++;
161
+ continue;
162
+ }
163
+ quote = null;
164
+ }
165
+ continue;
166
+ }
167
+ if (quote === 34) {
168
+ if (current === 34) {
169
+ if (next === 34) {
170
+ i++;
171
+ continue;
172
+ }
173
+ quote = null;
174
+ }
175
+ continue;
176
+ }
177
+ if (current === 39) {
178
+ quote = 39;
179
+ continue;
180
+ }
181
+ if (current === 34) {
182
+ quote = 34;
183
+ continue;
184
+ }
185
+ if (current === 45 && next === 45) {
186
+ return true;
187
+ }
188
+ }
189
+ return false;
119
190
  }
120
191
  getCurrentLine() {
121
192
  if (this.lines.length > 0) {
@@ -132,7 +203,7 @@ class LinePrinter {
132
203
  isCurrentLineEmpty() {
133
204
  if (this.lines.length > 0) {
134
205
  const currentLine = this.lines[this.lines.length - 1];
135
- return currentLine.text.trim() === '';
206
+ return this.isAsciiWhitespaceOnly(currentLine.text);
136
207
  }
137
208
  return true;
138
209
  }
@@ -1 +1 @@
1
- {"version":3,"file":"LinePrinter.js","sourceRoot":"","sources":["../../src/transformers/LinePrinter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LinePrinter.js","sourceRoot":"","sources":["../../src/transformers/LinePrinter.ts"],"names":[],"mappings":"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"}