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
@@ -3,8 +3,9 @@ import { SortConditions } from "./SqlSortInjector";
3
3
  import { PaginationOptions } from "./SqlPaginationInjector";
4
4
  import { JsonMapping } from "./PostgresJsonQueryBuilder";
5
5
  import { SqlParameterValue } from "../models/ValueComponent";
6
- import { type ExistsSubqueryDefinition } from "./ExistsPredicateInjector";
7
6
  import { SchemaInfo } from "./OptimizeUnusedLeftJoins";
7
+ import { OptionalConditionParameterStates, OptionalConditionPruningParameters } from "./PruneOptionalConditionBranches";
8
+ import type { ExistsSubqueryDefinition } from "./ExistsPredicateInjector";
8
9
  export type { ExistsSubqueryDefinition };
9
10
  /**
10
11
  * Object-form filter condition supporting scalar operators, logical grouping,
@@ -84,7 +85,10 @@ export type FilterConditions = Record<string, FilterConditionValue>;
84
85
  * Options for dynamic query building
85
86
  */
86
87
  export interface QueryBuildOptions {
87
- /** Filter conditions to inject into WHERE clause */
88
+ /**
89
+ * Legacy filter input for named-parameter binding only.
90
+ * Dynamic predicate injection is no longer supported and will fail fast.
91
+ */
88
92
  filter?: FilterConditions;
89
93
  /** Sort conditions to inject into ORDER BY clause */
90
94
  sort?: SortConditions;
@@ -130,6 +134,16 @@ export interface QueryBuildOptions {
130
134
  * Defaults to false to preserve original WITH definitions.
131
135
  */
132
136
  removeUnusedCtes?: boolean;
137
+ /**
138
+ * Explicit opt-in values for truthful optional condition branches in source SQL.
139
+ * Only listed parameter names are eligible for pruning, and `null`/`undefined` are treated as absent-equivalent.
140
+ */
141
+ optionalConditionParameters?: OptionalConditionPruningParameters;
142
+ /**
143
+ * Legacy state-map form for optional branch pruning.
144
+ * Prefer `optionalConditionParameters` for new code so SQL-facing null semantics stay intuitive.
145
+ */
146
+ optionalConditionParameterStates?: OptionalConditionParameterStates;
133
147
  }
134
148
  /**
135
149
  * Builder-level configuration that can be reused across multiple build calls.
@@ -182,24 +196,18 @@ export declare class DynamicQueryBuilder {
182
196
  * ```
183
197
  */
184
198
  buildQuery(sqlContent: string, options?: QueryBuildOptions): SelectQuery;
185
- private extractExistsInstructions;
186
- private handleMultiAnchorDefinitions;
187
- private splitExistsProperties;
188
- private isFilterConditionObject;
189
- private isMultiColumnDefinitionArray;
190
- private isMultiColumnDefinition;
191
- private createExistsInstruction;
199
+ private resolveOptionalConditionPruningParameters;
192
200
  private applyColumnFilters;
193
201
  private normalizeColumnList;
194
202
  private normalizeColumnIdentifier;
195
203
  private getSelectItemName;
196
204
  /**
197
- * Builds a SelectQuery with only filtering applied.
198
- * Convenience method for when you only need dynamic WHERE conditions.
205
+ * Legacy helper for binding existing named parameters without adding new runtime predicates.
206
+ * Dynamic WHERE-condition injection is no longer supported; use SSSQL scaffold/refresh instead.
199
207
  *
200
208
  * @param sqlContent Raw SQL string to parse and modify
201
- * @param filter Filter conditions to apply
202
- * @returns Modified SelectQuery with filter conditions applied
209
+ * @param filter Named parameters to bind when they already exist in the SQL
210
+ * @returns Modified SelectQuery after binding existing named parameters
203
211
  */
204
212
  buildFilteredQuery(sqlContent: string, filter: FilterConditions): SelectQuery;
205
213
  /**
@@ -37,14 +37,16 @@ export declare class LinePrinter {
37
37
  * @param text Text to append
38
38
  */
39
39
  appendText(text: string): void;
40
+ private endsWithAsciiWhitespace;
40
41
  trimTrailingWhitespaceFromPreviousLine(): void;
42
+ private findLineEndIndex;
41
43
  /**
42
44
  * Cleans up the current line for comma formatting.
43
45
  * For 'after' and 'none' comma styles, removes empty line when a comma is being added.
44
- * @param text The text being processed
45
46
  * @returns true if cleanup was performed, false otherwise
46
47
  */
47
- cleanupLine(text: string): boolean;
48
+ cleanupLine(): boolean;
49
+ private isAsciiWhitespaceOnly;
48
50
  private lineHasTrailingComment;
49
51
  getCurrentLine(): PrintLine;
50
52
  /**
@@ -0,0 +1,22 @@
1
+ import { SelectQuery, SimpleSelectQuery } from '../models/SelectQuery';
2
+ import { SqlParameterValue, ValueComponent } from '../models/ValueComponent';
3
+ export type OptionalConditionPruningParameters = Record<string, SqlParameterValue>;
4
+ export type OptionalConditionParameterState = 'absent' | 'present' | 'unknown';
5
+ export type OptionalConditionParameterStates = Record<string, OptionalConditionParameterState>;
6
+ export type SupportedOptionalConditionBranchKind = 'expression';
7
+ export interface SupportedOptionalConditionBranch {
8
+ query: SimpleSelectQuery;
9
+ parameterName: string;
10
+ expression: ValueComponent;
11
+ kind: SupportedOptionalConditionBranchKind;
12
+ }
13
+ /**
14
+ * Prunes supported optional WHERE branches when an explicitly targeted parameter is absent-equivalent.
15
+ * For the MVP, only `null` and `undefined` are treated as absent and unsupported shapes remain exact no-op.
16
+ */
17
+ export declare const pruneOptionalConditionBranches: (query: SelectQuery, pruningParameters: OptionalConditionPruningParameters) => SelectQuery;
18
+ /**
19
+ * Collects supported top-level optional condition branches from the query graph.
20
+ * The returned branch expressions keep object identity so callers can move them without re-rendering.
21
+ */
22
+ export declare const collectSupportedOptionalConditionBranches: (query: SelectQuery) => SupportedOptionalConditionBranch[];
@@ -0,0 +1,30 @@
1
+ import { SelectQuery } from "../models/SelectQuery";
2
+ import { type SupportedOptionalConditionBranch } from "./PruneOptionalConditionBranches";
3
+ export type SSSQLFilterValue = unknown;
4
+ export type SSSQLFilterInput = Record<string, SSSQLFilterValue>;
5
+ export type SssqlScaffoldFilters = SSSQLFilterInput;
6
+ export interface SssqlTransformResult {
7
+ query: SelectQuery;
8
+ }
9
+ /**
10
+ * Builds and refreshes truthful SSSQL optional filter branches.
11
+ * Runtime callers should use pruning, not dynamic predicate injection.
12
+ */
13
+ export declare class SSSQLFilterBuilder {
14
+ private readonly tableColumnResolver?;
15
+ private readonly finder;
16
+ constructor(tableColumnResolver?: ((tableName: string) => string[]) | undefined);
17
+ scaffold(query: SelectQuery | string, filters: SSSQLFilterInput): SelectQuery;
18
+ refresh(query: SelectQuery | string, filters: SSSQLFilterInput): SelectQuery;
19
+ private parseQuery;
20
+ private resolveTarget;
21
+ private resolveTargetInQuery;
22
+ private resolveQualifiedTarget;
23
+ private resolveUnqualifiedTarget;
24
+ private findAliasForTable;
25
+ private resolveAliasForSource;
26
+ private rebaseMovedBranch;
27
+ }
28
+ export type { SupportedOptionalConditionBranch };
29
+ export declare const scaffoldSssqlQuery: (sqlContent: string, filters: SssqlScaffoldFilters) => SssqlTransformResult;
30
+ export declare const refreshSssqlQuery: (sqlContent: string, filters: SssqlScaffoldFilters) => SssqlTransformResult;
@@ -3,6 +3,7 @@ import { Lexeme } from "../models/Lexeme";
3
3
  * Utility functions for handling comments in parsers
4
4
  */
5
5
  export declare class CommentUtils {
6
+ private static readonly SIGNIFICANT_SQL_KEYWORDS;
6
7
  /**
7
8
  * Collects comments from preceding tokens that are associated with a specific keyword.
8
9
  * This function looks for comments in tokens before the current position that might
@@ -80,19 +80,15 @@ export declare class MultiQuerySplitter {
80
80
  */
81
81
  static split(text: string): QueryCollection;
82
82
  /**
83
- * Get query boundaries from SQL text with proper semicolon handling
84
- *
85
- * @param text - SQL text to analyze
86
- * @returns Array of boundary positions
87
- */
88
- /**
89
- * Split text by semicolons while respecting quotes and comments
83
+ * Split text by semicolons while respecting quotes and comments.
84
+ * Single-pass O(n) implementation with support for:
85
+ * - Single-quoted strings ('...' with '' escaping)
86
+ * - Double-quoted identifiers ("..." with "" escaping)
87
+ * - Line comments (--)
88
+ * - Block comments (/* ... *\/)
89
+ * - PostgreSQL dollar-quoted strings ($$...$$ or $tag$...$tag$)
90
90
  */
91
91
  private static splitRespectingQuotesAndComments;
92
- /**
93
- * Check if character at position is a valid semicolon (not in quotes/comments)
94
- */
95
- private static isValidSemicolon;
96
92
  /**
97
93
  * Merge comment-only segments with previous executable segments
98
94
  */
@@ -0,0 +1,43 @@
1
+ import { CreateTableQuery } from '../models/CreateTableQuery';
2
+ import { QualifiedName } from '../models/ValueComponent';
3
+ export type RelationConstraintKind = 'column-reference' | 'table-foreign-key';
4
+ export type RelationEvidenceKind = RelationConstraintKind | 'primary-key' | 'unique-key';
5
+ export type RelationConfidence = 'confirmed' | 'inferred' | 'unknown';
6
+ export interface RelationGraphEdge {
7
+ childTable: string;
8
+ parentTable: string;
9
+ childColumns: string[];
10
+ parentColumns: string[];
11
+ constraintKind: RelationConstraintKind;
12
+ constraintName: string | null;
13
+ /**
14
+ * Evidence behind the relation edge. v1 uses FK evidence, but callers can
15
+ * keep the same edge shape when PK / UNIQUE inference is added later.
16
+ */
17
+ evidenceKind: RelationEvidenceKind;
18
+ /**
19
+ * Indicates whether the relation is directly confirmed or inferred from
20
+ * broader schema evidence.
21
+ */
22
+ confidence: RelationConfidence;
23
+ isSelfReference: boolean;
24
+ }
25
+ export interface RelationGraph {
26
+ relations: RelationGraphEdge[];
27
+ byChildTable: Map<string, RelationGraphEdge[]>;
28
+ byParentTable: Map<string, RelationGraphEdge[]>;
29
+ tableNames: Set<string>;
30
+ }
31
+ /**
32
+ * Build a direction-aware relation graph from parsed CREATE TABLE statements.
33
+ */
34
+ export declare function buildRelationGraphFromCreateTableQueries(queries: CreateTableQuery[]): RelationGraph;
35
+ /**
36
+ * Return the known parent relations for a child table.
37
+ */
38
+ export declare function getOutgoingRelations(graph: RelationGraph, childTable: string): RelationGraphEdge[];
39
+ /**
40
+ * Return the known child relations for a parent table.
41
+ */
42
+ export declare function getIncomingRelations(graph: RelationGraph, parentTable: string): RelationGraphEdge[];
43
+ export declare function getQualifiedNameText(value: QualifiedName): string;
@@ -117,6 +117,7 @@ const keywordTrie = new KeywordTrie_1.KeywordTrie([
117
117
  ["create", "table"],
118
118
  ["create", "temporary", "table"],
119
119
  ["create", "temp", "table"],
120
+ ["create", "unlogged", "table"],
120
121
  ["create", "schema"],
121
122
  ["create", "sequence"],
122
123
  ["create", "temporary", "sequence"],
@@ -128,6 +129,8 @@ const keywordTrie = new KeywordTrie_1.KeywordTrie([
128
129
  ["drop", "index"],
129
130
  ["drop", "sequence"],
130
131
  ["drop", "constraint"],
132
+ ["comment", "on", "table"],
133
+ ["comment", "on", "column"],
131
134
  ["create", "index"],
132
135
  ["create", "unique", "index"],
133
136
  ["add"],
@@ -180,15 +183,29 @@ const keywordTrie = new KeywordTrie_1.KeywordTrie([
180
183
  exports.commandKeywordTrie = keywordTrie;
181
184
  const keywordParser = new KeywordParser_1.KeywordParser(keywordTrie);
182
185
  exports.joinkeywordParser = new KeywordParser_1.KeywordParser(joinTrie);
186
+ // Keep canStartJoinKeyword in sync with the first letters used by joinTrie patterns.
187
+ function canStartJoinKeyword(input, position) {
188
+ const code = input.charCodeAt(position) | 32;
189
+ return code === 106 || // j
190
+ code === 105 || // i
191
+ code === 99 || // c
192
+ code === 108 || // l
193
+ code === 114 || // r
194
+ code === 102 || // f
195
+ code === 110; // n
196
+ }
183
197
  class CommandTokenReader extends BaseTokenReader_1.BaseTokenReader {
184
198
  tryRead(previous) {
185
199
  if (this.isEndOfInput()) {
186
200
  return null;
187
201
  }
188
- const keywordJoin = exports.joinkeywordParser.parse(this.input, this.position);
189
- if (keywordJoin !== null) {
190
- this.position = keywordJoin.newPosition;
191
- return this.createLexeme(Lexeme_1.TokenType.Command, keywordJoin.keyword);
202
+ // Skip JOIN-specific parsing unless the leading character can start JOIN phrases.
203
+ if (canStartJoinKeyword(this.input, this.position)) {
204
+ const keywordJoin = exports.joinkeywordParser.parse(this.input, this.position);
205
+ if (keywordJoin !== null) {
206
+ this.position = keywordJoin.newPosition;
207
+ return this.createLexeme(Lexeme_1.TokenType.Command, keywordJoin.keyword);
208
+ }
192
209
  }
193
210
  // Check for keyword identifiers
194
211
  const keyword = keywordParser.parse(this.input, this.position);
@@ -1 +1 @@
1
- {"version":3,"file":"CommandTokenReader.js","sourceRoot":"","sources":["../../src/tokenReaders/CommandTokenReader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CommandTokenReader.js","sourceRoot":"","sources":["../../src/tokenReaders/CommandTokenReader.ts"],"names":[],"mappings":"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"}
@@ -3,29 +3,46 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.StringSpecifierTokenReader = void 0;
4
4
  const Lexeme_1 = require("../models/Lexeme");
5
5
  const BaseTokenReader_1 = require("./BaseTokenReader");
6
- // Prefix sets for quick checks
7
- const STRING_SPECIFIERS = new Set(['e\'', 'E\'', 'x\'', 'X\'', 'b\'', 'B\'']);
8
- const UNICODE_STRING_SPECIFIERS = new Set(['u&\'', 'U&\'']);
6
+ const QUOTE_CHAR_CODE = 39; // '
7
+ const AMPERSAND_CHAR_CODE = 38; // &
9
8
  class StringSpecifierTokenReader extends BaseTokenReader_1.BaseTokenReader {
10
9
  /**
11
10
  * Try to read an escaped literal like e'...', x'...', etc.
12
11
  */
13
12
  tryRead(previous) {
14
13
  const start = this.position;
15
- // Check for prefixed literals: e', x', b'
16
- if (this.canRead(1) && STRING_SPECIFIERS.has(this.input.slice(start, start + 2))) {
17
- this.position += 1;
18
- const result = this.createLexeme(Lexeme_1.TokenType.StringSpecifier, this.input.slice(start, this.position));
19
- return result;
14
+ if (!this.canRead(1)) {
15
+ return null;
20
16
  }
21
- // Check for unicode literal: u&'
22
- if (this.canRead(2) && UNICODE_STRING_SPECIFIERS.has(this.input.slice(start, start + 3))) {
23
- this.position += 2;
24
- const result = this.createLexeme(Lexeme_1.TokenType.StringSpecifier, this.input.slice(start, this.position));
25
- return result;
17
+ const firstCode = this.input.charCodeAt(start);
18
+ const secondCode = this.input.charCodeAt(start + 1);
19
+ // Fast path for single-letter prefixes: e', E', x', X', b', B'
20
+ if (secondCode === QUOTE_CHAR_CODE && this.isSingleLetterStringPrefix(firstCode)) {
21
+ this.position = start + 1;
22
+ return this.createLexeme(Lexeme_1.TokenType.StringSpecifier, this.input[start]);
23
+ }
24
+ // Fast path for unicode prefixes: u&', U&'
25
+ if (this.canRead(2) &&
26
+ this.isUnicodePrefix(firstCode) &&
27
+ secondCode === AMPERSAND_CHAR_CODE &&
28
+ this.input.charCodeAt(start + 2) === QUOTE_CHAR_CODE) {
29
+ this.position = start + 2;
30
+ return this.createLexeme(Lexeme_1.TokenType.StringSpecifier, this.input.slice(start, start + 2));
26
31
  }
27
32
  return null;
28
33
  }
34
+ isSingleLetterStringPrefix(charCode) {
35
+ return charCode === 69 || // E
36
+ charCode === 101 || // e
37
+ charCode === 88 || // X
38
+ charCode === 120 || // x
39
+ charCode === 66 || // B
40
+ charCode === 98; // b
41
+ }
42
+ isUnicodePrefix(charCode) {
43
+ return charCode === 85 || // U
44
+ charCode === 117; // u
45
+ }
29
46
  }
30
47
  exports.StringSpecifierTokenReader = StringSpecifierTokenReader;
31
48
  //# sourceMappingURL=StringSpecifierTokenReader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"StringSpecifierTokenReader.js","sourceRoot":"","sources":["../../src/tokenReaders/StringSpecifierTokenReader.ts"],"names":[],"mappings":";;;AAAA,6CAAqD;AACrD,uDAAoD;AAEpD,+BAA+B;AAC/B,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;AAC9E,MAAM,yBAAyB,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAE5D,MAAa,0BAA2B,SAAQ,iCAAe;IAE3D;;OAEG;IACI,OAAO,CAAC,QAAuB;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC;QAE5B,0CAA0C;QAC1C,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/E,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC;YACnB,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,kBAAS,CAAC,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YACpG,OAAO,MAAM,CAAC;QAClB,CAAC;QAED,iCAAiC;QACjC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,yBAAyB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACvF,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC;YACnB,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,kBAAS,CAAC,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YACpG,OAAO,MAAM,CAAC;QAClB,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AAxBD,gEAwBC"}
1
+ {"version":3,"file":"StringSpecifierTokenReader.js","sourceRoot":"","sources":["../../src/tokenReaders/StringSpecifierTokenReader.ts"],"names":[],"mappings":";;;AAAA,6CAAqD;AACrD,uDAAoD;AAEpD,MAAM,eAAe,GAAG,EAAE,CAAC,CAAC,IAAI;AAChC,MAAM,mBAAmB,GAAG,EAAE,CAAC,CAAC,IAAI;AAEpC,MAAa,0BAA2B,SAAQ,iCAAe;IAE3D;;OAEG;IACI,OAAO,CAAC,QAAuB;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC;QAE5B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAEpD,+DAA+D;QAC/D,IAAI,UAAU,KAAK,eAAe,IAAI,IAAI,CAAC,0BAA0B,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/E,IAAI,CAAC,QAAQ,GAAG,KAAK,GAAG,CAAC,CAAC;YAC1B,OAAO,IAAI,CAAC,YAAY,CAAC,kBAAS,CAAC,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3E,CAAC;QAED,2CAA2C;QAC3C,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;YACf,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC;YAC/B,UAAU,KAAK,mBAAmB;YAClC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,eAAe,EAAE,CAAC;YACvD,IAAI,CAAC,QAAQ,GAAG,KAAK,GAAG,CAAC,CAAC;YAC1B,OAAO,IAAI,CAAC,YAAY,CAAC,kBAAS,CAAC,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;QAC5F,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,0BAA0B,CAAC,QAAgB;QAC/C,OAAO,QAAQ,KAAK,EAAE,IAAK,IAAI;YACxB,QAAQ,KAAK,GAAG,IAAI,IAAI;YACxB,QAAQ,KAAK,EAAE,IAAK,IAAI;YACxB,QAAQ,KAAK,GAAG,IAAI,IAAI;YACxB,QAAQ,KAAK,EAAE,IAAK,IAAI;YACxB,QAAQ,KAAK,EAAE,CAAC,CAAI,IAAI;IACnC,CAAC;IAEO,eAAe,CAAC,QAAgB;QACpC,OAAO,QAAQ,KAAK,EAAE,IAAK,IAAI;YACxB,QAAQ,KAAK,GAAG,CAAC,CAAG,IAAI;IACnC,CAAC;CACJ;AA9CD,gEA8CC"}
@@ -6,12 +6,9 @@ exports.TokenReaderManager = void 0;
6
6
  */
7
7
  class TokenReaderManager {
8
8
  constructor(input, position = 0) {
9
- this.cacheHits = 0;
10
- this.cacheMisses = 0;
11
9
  this.input = input;
12
10
  this.position = position;
13
11
  this.readers = [];
14
- this.tokenCache = new Map();
15
12
  }
16
13
  /**
17
14
  * Register a token reader
@@ -28,17 +25,10 @@ class TokenReaderManager {
28
25
  * @returns This manager instance for chaining
29
26
  */
30
27
  registerAll(readers) {
31
- readers.forEach(reader => this.register(reader));
32
- return this;
33
- }
34
- /**
35
- * Update the position for all readers
36
- */
37
- setPosition(position) {
38
- this.position = position;
39
- for (const reader of this.readers) {
40
- reader.setPosition(position);
28
+ for (let i = 0; i < readers.length; i++) {
29
+ this.readers.push(readers[i]);
41
30
  }
31
+ return this;
42
32
  }
43
33
  /**
44
34
  * Try to read a token using all registered readers
@@ -47,45 +37,25 @@ class TokenReaderManager {
47
37
  * @returns The lexeme if a reader could read it, null otherwise
48
38
  */
49
39
  tryRead(position, previous) {
50
- // Check cache - using position as the key
51
- if (this.tokenCache.has(position)) {
52
- // Cache hit
53
- this.cacheHits++;
54
- const lexeme = this.tokenCache.get(position) || null;
55
- return lexeme;
56
- }
57
- // Cache miss - create new entry
58
- this.cacheMisses++;
59
- this.setPosition(position);
60
- // Try to read with each reader
61
- let lexeme = null;
62
- for (const reader of this.readers) {
63
- lexeme = reader.tryRead(previous);
40
+ this.position = position;
41
+ const readers = this.readers;
42
+ // Index-based iteration avoids iterator allocations in the hottest parse loop.
43
+ for (let i = 0; i < readers.length; i++) {
44
+ const reader = readers[i];
45
+ reader.setPosition(position);
46
+ const lexeme = reader.tryRead(previous);
64
47
  if (lexeme) {
65
48
  this.position = reader.getPosition();
66
- break;
49
+ return lexeme;
67
50
  }
68
51
  }
69
- // Update all readers' positions
70
- for (const reader of this.readers) {
71
- reader.setPosition(this.position);
72
- }
73
- // Save to cache (even if null)
74
- this.tokenCache.set(position, lexeme);
75
- return lexeme;
52
+ return null;
76
53
  }
77
54
  /**
78
55
  * Get the maximum position among all readers
79
56
  */
80
57
  getMaxPosition() {
81
- let maxPosition = this.position;
82
- for (const reader of this.readers) {
83
- const position = reader.getPosition();
84
- if (position > maxPosition) {
85
- maxPosition = position;
86
- }
87
- }
88
- return maxPosition;
58
+ return this.position;
89
59
  }
90
60
  /**
91
61
  * Get the input string
@@ -97,12 +67,10 @@ class TokenReaderManager {
97
67
  * Get cache statistics
98
68
  */
99
69
  getCacheStats() {
100
- const total = this.cacheHits + this.cacheMisses;
101
- const ratio = total > 0 ? this.cacheHits / total : 0;
102
70
  return {
103
- hits: this.cacheHits,
104
- misses: this.cacheMisses,
105
- ratio: ratio
71
+ hits: 0,
72
+ misses: 0,
73
+ ratio: 0
106
74
  };
107
75
  }
108
76
  }
@@ -1 +1 @@
1
- {"version":3,"file":"TokenReaderManager.js","sourceRoot":"","sources":["../../src/tokenReaders/TokenReaderManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TokenReaderManager.js","sourceRoot":"","sources":["../../src/tokenReaders/TokenReaderManager.ts"],"names":[],"mappings":";;;AAGA;;GAEG;AACH,MAAa,kBAAkB;IAK3B,YAAY,KAAa,EAAE,WAAmB,CAAC;QAC3C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;IACtB,CAAC;IAED;;;;OAIG;IACI,QAAQ,CAAC,MAAuB;QACnC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACI,WAAW,CAAC,OAA0B;QACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACI,OAAO,CAAC,QAAgB,EAAE,QAAuB;QACpD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAEzB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,+EAA+E;QAC/E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAC1B,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACxC,IAAI,MAAM,EAAE,CAAC;gBACT,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;gBACrC,OAAO,MAAM,CAAC;YAClB,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACI,cAAc;QACjB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED;;OAEG;IACI,QAAQ;QACX,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAED;;OAEG;IACI,aAAa;QAChB,OAAO;YACH,IAAI,EAAE,CAAC;YACP,MAAM,EAAE,CAAC;YACT,KAAK,EAAE,CAAC;SACX,CAAC;IACN,CAAC;CACJ;AAjFD,gDAiFC"}