rawsql-ts 0.16.0 → 0.17.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 (211) hide show
  1. package/README.md +161 -875
  2. package/dist/esm/index.d.ts +7 -0
  3. package/dist/esm/index.js +7 -0
  4. package/dist/esm/index.js.map +1 -1
  5. package/dist/esm/index.min.js +22 -20
  6. package/dist/esm/index.min.js.map +4 -4
  7. package/dist/esm/models/Clause.d.ts +15 -3
  8. package/dist/esm/models/Clause.js +2 -1
  9. package/dist/esm/models/Clause.js.map +1 -1
  10. package/dist/esm/models/CreateTableQuery.d.ts +3 -0
  11. package/dist/esm/models/CreateTableQuery.js +5 -4
  12. package/dist/esm/models/CreateTableQuery.js.map +1 -1
  13. package/dist/esm/models/DDLStatements.d.ts +71 -0
  14. package/dist/esm/models/DDLStatements.js +63 -0
  15. package/dist/esm/models/DDLStatements.js.map +1 -1
  16. package/dist/esm/models/KeywordTrie.d.ts +2 -3
  17. package/dist/esm/models/KeywordTrie.js +26 -27
  18. package/dist/esm/models/KeywordTrie.js.map +1 -1
  19. package/dist/esm/models/SqlPrintToken.d.ts +1 -0
  20. package/dist/esm/models/SqlPrintToken.js +1 -0
  21. package/dist/esm/models/SqlPrintToken.js.map +1 -1
  22. package/dist/esm/parsers/CheckpointStatementParser.d.ts +8 -0
  23. package/dist/esm/parsers/CheckpointStatementParser.js +14 -0
  24. package/dist/esm/parsers/CheckpointStatementParser.js.map +1 -0
  25. package/dist/esm/parsers/ClusterStatementParser.d.ts +8 -0
  26. package/dist/esm/parsers/ClusterStatementParser.js +14 -0
  27. package/dist/esm/parsers/ClusterStatementParser.js.map +1 -0
  28. package/dist/esm/parsers/CommandExpressionParser.js.map +1 -1
  29. package/dist/esm/parsers/CommentOnParser.d.ts +23 -0
  30. package/dist/esm/parsers/CommentOnParser.js +61 -0
  31. package/dist/esm/parsers/CommentOnParser.js.map +1 -0
  32. package/dist/esm/parsers/CommonTableParser.d.ts +5 -1
  33. package/dist/esm/parsers/CommonTableParser.js +94 -16
  34. package/dist/esm/parsers/CommonTableParser.js.map +1 -1
  35. package/dist/esm/parsers/CreateIndexParser.js +12 -6
  36. package/dist/esm/parsers/CreateIndexParser.js.map +1 -1
  37. package/dist/esm/parsers/CreateTableParser.d.ts +2 -0
  38. package/dist/esm/parsers/CreateTableParser.js +11 -2
  39. package/dist/esm/parsers/CreateTableParser.js.map +1 -1
  40. package/dist/esm/parsers/ExplainStatementParser.js.map +1 -1
  41. package/dist/esm/parsers/FullNameParser.js +35 -3
  42. package/dist/esm/parsers/FullNameParser.js.map +1 -1
  43. package/dist/esm/parsers/OrderByClauseParser.js.map +1 -1
  44. package/dist/esm/parsers/ReindexStatementParser.d.ts +8 -0
  45. package/dist/esm/parsers/ReindexStatementParser.js +14 -0
  46. package/dist/esm/parsers/ReindexStatementParser.js.map +1 -0
  47. package/dist/esm/parsers/SelectQueryParser.js.map +1 -1
  48. package/dist/esm/parsers/SourceParser.js +6 -1
  49. package/dist/esm/parsers/SourceParser.js.map +1 -1
  50. package/dist/esm/parsers/SqlParser.d.ts +12 -2
  51. package/dist/esm/parsers/SqlParser.js +117 -251
  52. package/dist/esm/parsers/SqlParser.js.map +1 -1
  53. package/dist/esm/parsers/SqlPrintTokenParser.d.ts +1 -0
  54. package/dist/esm/parsers/SqlPrintTokenParser.js +32 -4
  55. package/dist/esm/parsers/SqlPrintTokenParser.js.map +1 -1
  56. package/dist/esm/parsers/SqlTokenizer.d.ts +5 -0
  57. package/dist/esm/parsers/SqlTokenizer.js +181 -67
  58. package/dist/esm/parsers/SqlTokenizer.js.map +1 -1
  59. package/dist/esm/parsers/UsingClauseParser.js.map +1 -1
  60. package/dist/esm/parsers/VacuumStatementParser.d.ts +8 -0
  61. package/dist/esm/parsers/VacuumStatementParser.js +14 -0
  62. package/dist/esm/parsers/VacuumStatementParser.js.map +1 -0
  63. package/dist/esm/tokenReaders/CommandTokenReader.js +22 -4
  64. package/dist/esm/tokenReaders/CommandTokenReader.js.map +1 -1
  65. package/dist/esm/tokenReaders/StringSpecifierTokenReader.d.ts +2 -0
  66. package/dist/esm/tokenReaders/StringSpecifierTokenReader.js +30 -13
  67. package/dist/esm/tokenReaders/StringSpecifierTokenReader.js.map +1 -1
  68. package/dist/esm/tokenReaders/TokenReaderManager.d.ts +0 -7
  69. package/dist/esm/tokenReaders/TokenReaderManager.js +16 -48
  70. package/dist/esm/tokenReaders/TokenReaderManager.js.map +1 -1
  71. package/dist/esm/transformers/AliasRenamer.d.ts +1 -0
  72. package/dist/esm/transformers/AliasRenamer.js +7 -1
  73. package/dist/esm/transformers/AliasRenamer.js.map +1 -1
  74. package/dist/esm/transformers/CTECollector.d.ts +5 -2
  75. package/dist/esm/transformers/CTECollector.js +49 -0
  76. package/dist/esm/transformers/CTECollector.js.map +1 -1
  77. package/dist/esm/transformers/CTEDependencyTracer.d.ts +6 -1
  78. package/dist/esm/transformers/CTEDependencyTracer.js +44 -2
  79. package/dist/esm/transformers/CTEDependencyTracer.js.map +1 -1
  80. package/dist/esm/transformers/CTEDisabler.d.ts +6 -0
  81. package/dist/esm/transformers/CTEDisabler.js +19 -0
  82. package/dist/esm/transformers/CTEDisabler.js.map +1 -1
  83. package/dist/esm/transformers/CTERenamer.js +5 -2
  84. package/dist/esm/transformers/CTERenamer.js.map +1 -1
  85. package/dist/esm/transformers/ColumnReferenceCollector.d.ts +4 -0
  86. package/dist/esm/transformers/ColumnReferenceCollector.js +69 -1
  87. package/dist/esm/transformers/ColumnReferenceCollector.js.map +1 -1
  88. package/dist/esm/transformers/DeleteResultSelectConverter.js.map +1 -1
  89. package/dist/esm/transformers/DynamicQueryBuilder.d.ts +87 -11
  90. package/dist/esm/transformers/DynamicQueryBuilder.js +237 -9
  91. package/dist/esm/transformers/DynamicQueryBuilder.js.map +1 -1
  92. package/dist/esm/transformers/ExistsPredicateInjector.d.ts +33 -0
  93. package/dist/esm/transformers/ExistsPredicateInjector.js +294 -0
  94. package/dist/esm/transformers/ExistsPredicateInjector.js.map +1 -0
  95. package/dist/esm/transformers/FixtureCteBuilder.js +5 -2
  96. package/dist/esm/transformers/FixtureCteBuilder.js.map +1 -1
  97. package/dist/esm/transformers/InsertResultSelectConverter.d.ts +1 -0
  98. package/dist/esm/transformers/InsertResultSelectConverter.js +28 -7
  99. package/dist/esm/transformers/InsertResultSelectConverter.js.map +1 -1
  100. package/dist/esm/transformers/LinePrinter.d.ts +4 -2
  101. package/dist/esm/transformers/LinePrinter.js +93 -22
  102. package/dist/esm/transformers/LinePrinter.js.map +1 -1
  103. package/dist/esm/transformers/MergeResultSelectConverter.js.map +1 -1
  104. package/dist/esm/transformers/OptimizeUnusedLeftJoins.d.ts +33 -0
  105. package/dist/esm/transformers/OptimizeUnusedLeftJoins.js +333 -0
  106. package/dist/esm/transformers/OptimizeUnusedLeftJoins.js.map +1 -0
  107. package/dist/esm/transformers/PruneOptionalConditionBranches.d.ts +10 -0
  108. package/dist/esm/transformers/PruneOptionalConditionBranches.js +197 -0
  109. package/dist/esm/transformers/PruneOptionalConditionBranches.js.map +1 -0
  110. package/dist/esm/transformers/SchemaCollector.d.ts +3 -0
  111. package/dist/esm/transformers/SchemaCollector.js +37 -1
  112. package/dist/esm/transformers/SchemaCollector.js.map +1 -1
  113. package/dist/esm/transformers/SelectValueCollector.d.ts +5 -0
  114. package/dist/esm/transformers/SelectValueCollector.js +44 -2
  115. package/dist/esm/transformers/SelectValueCollector.js.map +1 -1
  116. package/dist/esm/transformers/SqlParamInjector.d.ts +5 -1
  117. package/dist/esm/transformers/SqlParamInjector.js +47 -11
  118. package/dist/esm/transformers/SqlParamInjector.js.map +1 -1
  119. package/dist/esm/transformers/SqlPrinter.js +8 -2
  120. package/dist/esm/transformers/SqlPrinter.js.map +1 -1
  121. package/dist/esm/transformers/TableSourceCollector.d.ts +9 -1
  122. package/dist/esm/transformers/TableSourceCollector.js +72 -5
  123. package/dist/esm/transformers/TableSourceCollector.js.map +1 -1
  124. package/dist/esm/transformers/UpdateResultSelectConverter.js.map +1 -1
  125. package/dist/esm/transformers/UpstreamSelectQueryFinder.d.ts +5 -0
  126. package/dist/esm/transformers/UpstreamSelectQueryFinder.js +46 -1
  127. package/dist/esm/transformers/UpstreamSelectQueryFinder.js.map +1 -1
  128. package/dist/esm/utils/CommentUtils.d.ts +1 -0
  129. package/dist/esm/utils/CommentUtils.js +14 -4
  130. package/dist/esm/utils/CommentUtils.js.map +1 -1
  131. package/dist/esm/utils/MultiQuerySplitter.d.ts +7 -11
  132. package/dist/esm/utils/MultiQuerySplitter.js +105 -66
  133. package/dist/esm/utils/MultiQuerySplitter.js.map +1 -1
  134. package/dist/esm/utils/ParameterRemover.d.ts +4 -0
  135. package/dist/esm/utils/ParameterRemover.js +23 -0
  136. package/dist/esm/utils/ParameterRemover.js.map +1 -1
  137. package/dist/esm/utils/ScopeResolver.d.ts +5 -2
  138. package/dist/esm/utils/ScopeResolver.js +37 -18
  139. package/dist/esm/utils/ScopeResolver.js.map +1 -1
  140. package/dist/esm/utils/charLookupTable.d.ts +6 -0
  141. package/dist/esm/utils/charLookupTable.js +9 -1
  142. package/dist/esm/utils/charLookupTable.js.map +1 -1
  143. package/dist/esm/utils/serialTypeNormalization.d.ts +15 -0
  144. package/dist/esm/utils/serialTypeNormalization.js +55 -0
  145. package/dist/esm/utils/serialTypeNormalization.js.map +1 -0
  146. package/dist/esm/utils/stringUtils.js +51 -26
  147. package/dist/esm/utils/stringUtils.js.map +1 -1
  148. package/dist/index.js +2 -0
  149. package/dist/index.js.map +1 -1
  150. package/dist/index.min.js +21 -19
  151. package/dist/index.min.js.map +4 -4
  152. package/dist/models/CreateTableQuery.js +5 -4
  153. package/dist/models/CreateTableQuery.js.map +1 -1
  154. package/dist/models/DDLStatements.js +14 -1
  155. package/dist/models/DDLStatements.js.map +1 -1
  156. package/dist/models/KeywordTrie.js +26 -27
  157. package/dist/models/KeywordTrie.js.map +1 -1
  158. package/dist/models/SqlPrintToken.js +1 -0
  159. package/dist/models/SqlPrintToken.js.map +1 -1
  160. package/dist/parsers/CommentOnParser.js +65 -0
  161. package/dist/parsers/CommentOnParser.js.map +1 -0
  162. package/dist/parsers/CreateIndexParser.js +12 -6
  163. package/dist/parsers/CreateIndexParser.js.map +1 -1
  164. package/dist/parsers/CreateTableParser.js +6 -1
  165. package/dist/parsers/CreateTableParser.js.map +1 -1
  166. package/dist/parsers/FullNameParser.js +35 -3
  167. package/dist/parsers/FullNameParser.js.map +1 -1
  168. package/dist/parsers/SqlParser.js +93 -307
  169. package/dist/parsers/SqlParser.js.map +1 -1
  170. package/dist/parsers/SqlPrintTokenParser.js +27 -3
  171. package/dist/parsers/SqlPrintTokenParser.js.map +1 -1
  172. package/dist/parsers/SqlTokenizer.js +176 -67
  173. package/dist/parsers/SqlTokenizer.js.map +1 -1
  174. package/dist/src/index.d.ts +2 -0
  175. package/dist/src/models/CreateTableQuery.d.ts +3 -0
  176. package/dist/src/models/DDLStatements.d.ts +15 -0
  177. package/dist/src/models/KeywordTrie.d.ts +2 -3
  178. package/dist/src/models/SqlPrintToken.d.ts +1 -0
  179. package/dist/src/parsers/CommentOnParser.d.ts +23 -0
  180. package/dist/src/parsers/CreateTableParser.d.ts +1 -0
  181. package/dist/src/parsers/SqlParser.d.ts +8 -2
  182. package/dist/src/parsers/SqlPrintTokenParser.d.ts +1 -0
  183. package/dist/src/parsers/SqlTokenizer.d.ts +5 -0
  184. package/dist/src/tokenReaders/StringSpecifierTokenReader.d.ts +2 -0
  185. package/dist/src/tokenReaders/TokenReaderManager.d.ts +0 -7
  186. package/dist/src/transformers/DynamicQueryBuilder.d.ts +12 -0
  187. package/dist/src/transformers/LinePrinter.d.ts +4 -2
  188. package/dist/src/transformers/PruneOptionalConditionBranches.d.ts +10 -0
  189. package/dist/src/utils/CommentUtils.d.ts +1 -0
  190. package/dist/src/utils/MultiQuerySplitter.d.ts +7 -11
  191. package/dist/tokenReaders/CommandTokenReader.js +21 -4
  192. package/dist/tokenReaders/CommandTokenReader.js.map +1 -1
  193. package/dist/tokenReaders/StringSpecifierTokenReader.js +30 -13
  194. package/dist/tokenReaders/StringSpecifierTokenReader.js.map +1 -1
  195. package/dist/tokenReaders/TokenReaderManager.js +16 -48
  196. package/dist/tokenReaders/TokenReaderManager.js.map +1 -1
  197. package/dist/transformers/DynamicQueryBuilder.js +24 -2
  198. package/dist/transformers/DynamicQueryBuilder.js.map +1 -1
  199. package/dist/transformers/LinePrinter.js +93 -22
  200. package/dist/transformers/LinePrinter.js.map +1 -1
  201. package/dist/transformers/PruneOptionalConditionBranches.js +201 -0
  202. package/dist/transformers/PruneOptionalConditionBranches.js.map +1 -0
  203. package/dist/tsconfig.browser.tsbuildinfo +1 -1
  204. package/dist/utils/CommentUtils.js +14 -4
  205. package/dist/utils/CommentUtils.js.map +1 -1
  206. package/dist/utils/MultiQuerySplitter.js +105 -66
  207. package/dist/utils/MultiQuerySplitter.js.map +1 -1
  208. package/dist/utils/stringUtils.js +42 -23
  209. package/dist/utils/stringUtils.js.map +1 -1
  210. package/package.json +65 -64
  211. package/LICENSE +0 -21
@@ -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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"}
@@ -0,0 +1,201 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.pruneOptionalConditionBranches = void 0;
4
+ const Clause_1 = require("../models/Clause");
5
+ const SelectQuery_1 = require("../models/SelectQuery");
6
+ const ValueComponent_1 = require("../models/ValueComponent");
7
+ const ParameterCollector_1 = require("./ParameterCollector");
8
+ const SUPPORTED_COMPARISON_OPERATORS = new Set(['=', '<>', '!=', '>', '>=', '<', '<=']);
9
+ const isBinaryOperator = (expression, operator) => {
10
+ return expression instanceof ValueComponent_1.BinaryExpression && expression.operator.value.trim().toLowerCase() === operator;
11
+ };
12
+ const unwrapSingleOuterParen = (expression) => {
13
+ let candidate = expression;
14
+ // Generated SQL often nests harmless wrapper parentheses, so peel them before shape matching.
15
+ while (candidate instanceof ValueComponent_1.ParenExpression) {
16
+ candidate = candidate.expression;
17
+ }
18
+ return candidate;
19
+ };
20
+ const collectTopLevelAndTerms = (expression) => {
21
+ const candidate = unwrapSingleOuterParen(expression);
22
+ if (!isBinaryOperator(candidate, 'and')) {
23
+ return [expression];
24
+ }
25
+ return [
26
+ ...collectTopLevelAndTerms(candidate.left),
27
+ ...collectTopLevelAndTerms(candidate.right)
28
+ ];
29
+ };
30
+ const isNullLiteral = (expression) => {
31
+ return ((expression instanceof ValueComponent_1.LiteralValue && expression.value === null) ||
32
+ (expression instanceof ValueComponent_1.RawString && expression.value.trim().toLowerCase() === 'null'));
33
+ };
34
+ const isTrueSentinel = (expression) => {
35
+ const candidate = unwrapSingleOuterParen(expression);
36
+ if (candidate instanceof ValueComponent_1.LiteralValue) {
37
+ return candidate.value === true;
38
+ }
39
+ if (!isBinaryOperator(candidate, '=')) {
40
+ return false;
41
+ }
42
+ return (candidate.left instanceof ValueComponent_1.LiteralValue &&
43
+ candidate.right instanceof ValueComponent_1.LiteralValue &&
44
+ candidate.left.value === 1 &&
45
+ candidate.right.value === 1);
46
+ };
47
+ const getGuardedParameterName = (expression) => {
48
+ const candidate = unwrapSingleOuterParen(expression);
49
+ if (!isBinaryOperator(candidate, 'is')) {
50
+ return null;
51
+ }
52
+ if (!(candidate.left instanceof ValueComponent_1.ParameterExpression) || !isNullLiteral(candidate.right)) {
53
+ return null;
54
+ }
55
+ return candidate.left.name.value;
56
+ };
57
+ const getUniqueParameterNames = (expression) => {
58
+ return new Set(ParameterCollector_1.ParameterCollector.collect(expression).map(parameter => parameter.name.value));
59
+ };
60
+ const isSupportedScalarPredicate = (expression, parameterName) => {
61
+ const candidate = unwrapSingleOuterParen(expression);
62
+ if (!(candidate instanceof ValueComponent_1.BinaryExpression)) {
63
+ return false;
64
+ }
65
+ const operator = candidate.operator.value.trim().toLowerCase();
66
+ if (!SUPPORTED_COMPARISON_OPERATORS.has(operator)) {
67
+ return false;
68
+ }
69
+ const leftIsTargetParameter = candidate.left instanceof ValueComponent_1.ParameterExpression && candidate.left.name.value === parameterName;
70
+ const rightIsTargetParameter = candidate.right instanceof ValueComponent_1.ParameterExpression && candidate.right.name.value === parameterName;
71
+ if (leftIsTargetParameter === rightIsTargetParameter) {
72
+ return false;
73
+ }
74
+ return getUniqueParameterNames(candidate).size === 1;
75
+ };
76
+ const isSupportedExistsPredicate = (expression, parameterName) => {
77
+ const candidate = unwrapSingleOuterParen(expression);
78
+ if (!(candidate instanceof ValueComponent_1.UnaryExpression) || candidate.operator.value.trim().toLowerCase() !== 'exists') {
79
+ return false;
80
+ }
81
+ if (!(candidate.expression instanceof ValueComponent_1.InlineQuery)) {
82
+ return false;
83
+ }
84
+ const parameterNames = getUniqueParameterNames(candidate.expression);
85
+ return parameterNames.size === 1 && parameterNames.has(parameterName);
86
+ };
87
+ const isExplicitPruningTarget = (pruningParameters, parameterName) => {
88
+ return Object.prototype.hasOwnProperty.call(pruningParameters, parameterName);
89
+ };
90
+ const isKnownAbsentTarget = (pruningParameters, parameterName) => {
91
+ if (!isExplicitPruningTarget(pruningParameters, parameterName)) {
92
+ return false;
93
+ }
94
+ const parameterValue = pruningParameters[parameterName];
95
+ return parameterValue === null || parameterValue === undefined;
96
+ };
97
+ const shouldPruneOptionalBranch = (expression, pruningParameters) => {
98
+ const candidate = unwrapSingleOuterParen(expression);
99
+ if (!isBinaryOperator(candidate, 'or')) {
100
+ return false;
101
+ }
102
+ const parameterName = getGuardedParameterName(candidate.left);
103
+ if (!parameterName) {
104
+ return false;
105
+ }
106
+ const supportedMeaningfulBranch = isSupportedScalarPredicate(candidate.right, parameterName) ||
107
+ isSupportedExistsPredicate(candidate.right, parameterName);
108
+ if (!supportedMeaningfulBranch) {
109
+ return false;
110
+ }
111
+ return isKnownAbsentTarget(pruningParameters, parameterName);
112
+ };
113
+ const rebuildAndCondition = (terms) => {
114
+ if (terms.length === 0) {
115
+ return null;
116
+ }
117
+ let condition = terms[0];
118
+ for (let index = 1; index < terms.length; index += 1) {
119
+ condition = new ValueComponent_1.BinaryExpression(condition, 'and', terms[index]);
120
+ }
121
+ return condition;
122
+ };
123
+ const pruneSimpleQueryWhereClause = (query, pruningParameters) => {
124
+ if (!query.whereClause) {
125
+ return false;
126
+ }
127
+ const topLevelTerms = collectTopLevelAndTerms(query.whereClause.condition);
128
+ const retainedTerms = [];
129
+ let prunedAnyBranch = false;
130
+ // Only top-level WHERE ... AND ... terms are eligible for pruning in this MVP.
131
+ for (const term of topLevelTerms) {
132
+ if (shouldPruneOptionalBranch(term, pruningParameters)) {
133
+ prunedAnyBranch = true;
134
+ continue;
135
+ }
136
+ retainedTerms.push(term);
137
+ }
138
+ if (!prunedAnyBranch) {
139
+ return false;
140
+ }
141
+ // Cleanup stays intentionally conservative: only drop trivially-true sentinels after pruning.
142
+ const cleanedTerms = retainedTerms.filter(term => !isTrueSentinel(term));
143
+ const rebuiltCondition = rebuildAndCondition(cleanedTerms);
144
+ query.whereClause = rebuiltCondition ? new Clause_1.WhereClause(rebuiltCondition) : null;
145
+ return true;
146
+ };
147
+ const isSelectQueryNode = (value) => {
148
+ return value instanceof SelectQuery_1.SimpleSelectQuery || value instanceof SelectQuery_1.BinarySelectQuery;
149
+ };
150
+ const traverseNestedSelectQueries = (root, pruningParameters) => {
151
+ let changed = false;
152
+ const visited = new WeakSet();
153
+ const walk = (value) => {
154
+ if (!value || typeof value !== 'object') {
155
+ return;
156
+ }
157
+ if (visited.has(value)) {
158
+ return;
159
+ }
160
+ visited.add(value);
161
+ if (value !== root && isSelectQueryNode(value)) {
162
+ changed = traverseSelectQuery(value, pruningParameters) || changed;
163
+ return;
164
+ }
165
+ if (Array.isArray(value)) {
166
+ value.forEach(walk);
167
+ return;
168
+ }
169
+ for (const child of Object.values(value)) {
170
+ walk(child);
171
+ }
172
+ };
173
+ walk(root);
174
+ return changed;
175
+ };
176
+ const traverseSelectQuery = (query, pruningParameters) => {
177
+ if (query instanceof SelectQuery_1.SimpleSelectQuery) {
178
+ const selfChanged = pruneSimpleQueryWhereClause(query, pruningParameters);
179
+ const nestedChanged = traverseNestedSelectQueries(query, pruningParameters);
180
+ return selfChanged || nestedChanged;
181
+ }
182
+ if (query instanceof SelectQuery_1.BinarySelectQuery) {
183
+ const leftChanged = traverseSelectQuery(query.left, pruningParameters);
184
+ const rightChanged = traverseSelectQuery(query.right, pruningParameters);
185
+ return leftChanged || rightChanged;
186
+ }
187
+ return false;
188
+ };
189
+ /**
190
+ * Prunes supported optional WHERE branches when an explicitly targeted parameter is absent-equivalent.
191
+ * For the MVP, only `null` and `undefined` are treated as absent and unsupported shapes remain exact no-op.
192
+ */
193
+ const pruneOptionalConditionBranches = (query, pruningParameters) => {
194
+ if (Object.keys(pruningParameters).length === 0) {
195
+ return query;
196
+ }
197
+ traverseSelectQuery(query, pruningParameters);
198
+ return query;
199
+ };
200
+ exports.pruneOptionalConditionBranches = pruneOptionalConditionBranches;
201
+ //# sourceMappingURL=PruneOptionalConditionBranches.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PruneOptionalConditionBranches.js","sourceRoot":"","sources":["../../src/transformers/PruneOptionalConditionBranches.ts"],"names":[],"mappings":"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"}