rawsql-ts 0.12.0 → 0.13.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 (537) hide show
  1. package/LICENSE +21 -0
  2. package/dist/esm/index.js +11 -0
  3. package/dist/esm/index.js.map +1 -1
  4. package/dist/esm/index.min.js +16 -16
  5. package/dist/esm/index.min.js.map +3 -3
  6. package/dist/esm/src/index.d.ts +12 -0
  7. package/dist/esm/src/index.js +11 -0
  8. package/dist/esm/src/index.js.map +1 -1
  9. package/dist/esm/src/models/Clause.d.ts +7 -3
  10. package/dist/esm/src/models/Clause.js +17 -4
  11. package/dist/esm/src/models/Clause.js.map +1 -1
  12. package/dist/esm/src/models/DDLStatements.d.ts +14 -2
  13. package/dist/esm/src/models/DDLStatements.js +12 -0
  14. package/dist/esm/src/models/DDLStatements.js.map +1 -1
  15. package/dist/esm/src/models/InsertQuery.d.ts +1 -4
  16. package/dist/esm/src/models/InsertQuery.js +3 -5
  17. package/dist/esm/src/models/InsertQuery.js.map +1 -1
  18. package/dist/esm/src/models/SqlPrintToken.d.ts +1 -0
  19. package/dist/esm/src/models/SqlPrintToken.js +1 -0
  20. package/dist/esm/src/models/SqlPrintToken.js.map +1 -1
  21. package/dist/esm/src/models/TableDefinitionModel.d.ts +39 -0
  22. package/dist/esm/src/models/TableDefinitionModel.js +77 -0
  23. package/dist/esm/src/models/TableDefinitionModel.js.map +1 -0
  24. package/dist/esm/src/models/ValuesQuery.d.ts +2 -0
  25. package/dist/esm/src/models/ValuesQuery.js +1 -0
  26. package/dist/esm/src/models/ValuesQuery.js.map +1 -1
  27. package/dist/esm/src/parsers/AlterTableParser.js +1 -1
  28. package/dist/esm/src/parsers/AlterTableParser.js.map +1 -1
  29. package/dist/esm/src/parsers/InsertQueryParser.js +4 -1
  30. package/dist/esm/src/parsers/InsertQueryParser.js.map +1 -1
  31. package/dist/esm/src/parsers/ReturningClauseParser.js +33 -47
  32. package/dist/esm/src/parsers/ReturningClauseParser.js.map +1 -1
  33. package/dist/esm/src/parsers/SqlParser.d.ts +0 -1
  34. package/dist/esm/src/parsers/SqlParser.js +44 -58
  35. package/dist/esm/src/parsers/SqlParser.js.map +1 -1
  36. package/dist/esm/src/parsers/SqlPrintTokenParser.d.ts +1 -0
  37. package/dist/esm/src/parsers/SqlPrintTokenParser.js +23 -5
  38. package/dist/esm/src/parsers/SqlPrintTokenParser.js.map +1 -1
  39. package/dist/esm/src/tokenReaders/LiteralTokenReader.js +7 -0
  40. package/dist/esm/src/tokenReaders/LiteralTokenReader.js.map +1 -1
  41. package/dist/esm/src/transformers/DDLDiffGenerator.d.ts +14 -0
  42. package/dist/esm/src/transformers/DDLDiffGenerator.js +197 -0
  43. package/dist/esm/src/transformers/DDLDiffGenerator.js.map +1 -0
  44. package/dist/esm/src/transformers/DDLGeneralizer.d.ts +13 -0
  45. package/dist/esm/src/transformers/DDLGeneralizer.js +98 -0
  46. package/dist/esm/src/transformers/DDLGeneralizer.js.map +1 -0
  47. package/dist/esm/src/transformers/DDLToFixtureConverter.d.ts +19 -0
  48. package/dist/esm/src/transformers/DDLToFixtureConverter.js +202 -0
  49. package/dist/esm/src/transformers/DDLToFixtureConverter.js.map +1 -0
  50. package/dist/esm/src/transformers/DeleteResultSelectConverter.d.ts +53 -0
  51. package/dist/esm/src/transformers/DeleteResultSelectConverter.js +394 -0
  52. package/dist/esm/src/transformers/DeleteResultSelectConverter.js.map +1 -0
  53. package/dist/esm/src/transformers/FixtureCteBuilder.d.ts +60 -0
  54. package/dist/esm/src/transformers/FixtureCteBuilder.js +147 -0
  55. package/dist/esm/src/transformers/FixtureCteBuilder.js.map +1 -0
  56. package/dist/esm/src/transformers/InsertQuerySelectValuesConverter.js +5 -2
  57. package/dist/esm/src/transformers/InsertQuerySelectValuesConverter.js.map +1 -1
  58. package/dist/esm/src/transformers/InsertResultSelectConverter.d.ts +64 -0
  59. package/dist/esm/src/transformers/InsertResultSelectConverter.js +495 -0
  60. package/dist/esm/src/transformers/InsertResultSelectConverter.js.map +1 -0
  61. package/dist/esm/src/transformers/MergeResultSelectConverter.d.ts +38 -0
  62. package/dist/esm/src/transformers/MergeResultSelectConverter.js +306 -0
  63. package/dist/esm/src/transformers/MergeResultSelectConverter.js.map +1 -0
  64. package/dist/esm/src/transformers/QueryBuilder.d.ts +11 -0
  65. package/dist/esm/src/transformers/QueryBuilder.js +19 -3
  66. package/dist/esm/src/transformers/QueryBuilder.js.map +1 -1
  67. package/dist/esm/src/transformers/SelectResultSelectConverter.d.ts +10 -0
  68. package/dist/esm/src/transformers/SelectResultSelectConverter.js +32 -0
  69. package/dist/esm/src/transformers/SelectResultSelectConverter.js.map +1 -0
  70. package/dist/esm/src/transformers/SimulatedSelectConverter.d.ts +23 -0
  71. package/dist/esm/src/transformers/SimulatedSelectConverter.js +61 -0
  72. package/dist/esm/src/transformers/SimulatedSelectConverter.js.map +1 -0
  73. package/dist/esm/src/transformers/UpdateResultSelectConverter.d.ts +51 -0
  74. package/dist/esm/src/transformers/UpdateResultSelectConverter.js +340 -0
  75. package/dist/esm/src/transformers/UpdateResultSelectConverter.js.map +1 -0
  76. package/dist/esm/src/utils/SelectQueryWithClauseHelper.d.ts +12 -0
  77. package/dist/esm/src/utils/SelectQueryWithClauseHelper.js +43 -0
  78. package/dist/esm/src/utils/SelectQueryWithClauseHelper.js.map +1 -0
  79. package/dist/esm/src/utils/ValueComponentRewriter.d.ts +3 -0
  80. package/dist/esm/src/utils/ValueComponentRewriter.js +180 -0
  81. package/dist/esm/src/utils/ValueComponentRewriter.js.map +1 -0
  82. package/dist/esm/tsconfig.browser.tsbuildinfo +1 -1
  83. package/dist/formatters/OriginalFormatRestorer.js +139 -0
  84. package/dist/formatters/OriginalFormatRestorer.js.map +1 -0
  85. package/dist/index.js +144 -0
  86. package/dist/index.js.map +1 -0
  87. package/dist/index.min.js +17 -17
  88. package/dist/index.min.js.map +3 -3
  89. package/dist/models/BinarySelectQuery.js +198 -0
  90. package/dist/models/BinarySelectQuery.js.map +1 -0
  91. package/dist/models/CTEError.js +37 -0
  92. package/dist/models/CTEError.js.map +1 -0
  93. package/dist/models/Clause.js +535 -0
  94. package/dist/models/Clause.js.map +1 -0
  95. package/dist/models/CreateTableQuery.js +135 -0
  96. package/dist/models/CreateTableQuery.js.map +1 -0
  97. package/dist/models/DDLStatements.js +275 -0
  98. package/dist/models/DDLStatements.js.map +1 -0
  99. package/dist/models/DeleteQuery.js +20 -0
  100. package/dist/models/DeleteQuery.js.map +1 -0
  101. package/dist/models/FormattingLexeme.js +3 -0
  102. package/dist/models/FormattingLexeme.js.map +1 -0
  103. package/dist/models/HintClause.js +41 -0
  104. package/dist/models/HintClause.js.map +1 -0
  105. package/dist/models/InsertQuery.js +23 -0
  106. package/dist/models/InsertQuery.js.map +1 -0
  107. package/dist/models/KeywordTrie.js +54 -0
  108. package/dist/models/KeywordTrie.js.map +1 -0
  109. package/dist/models/Lexeme.js +22 -0
  110. package/dist/models/Lexeme.js.map +1 -0
  111. package/dist/models/MergeQuery.js +104 -0
  112. package/dist/models/MergeQuery.js.map +1 -0
  113. package/dist/models/SelectQuery.js +22 -0
  114. package/dist/models/SelectQuery.js.map +1 -0
  115. package/dist/models/SimpleSelectQuery.js +648 -0
  116. package/dist/models/SimpleSelectQuery.js.map +1 -0
  117. package/dist/models/SqlComponent.js +73 -0
  118. package/dist/models/SqlComponent.js.map +1 -0
  119. package/dist/models/SqlPrintToken.js +143 -0
  120. package/dist/models/SqlPrintToken.js.map +1 -0
  121. package/dist/models/TableDefinitionModel.js +86 -0
  122. package/dist/models/TableDefinitionModel.js.map +1 -0
  123. package/dist/models/UpdateQuery.js +29 -0
  124. package/dist/models/UpdateQuery.js.map +1 -0
  125. package/dist/models/ValueComponent.js +380 -0
  126. package/dist/models/ValueComponent.js.map +1 -0
  127. package/dist/models/ValuesQuery.js +62 -0
  128. package/dist/models/ValuesQuery.js.map +1 -0
  129. package/dist/parsers/AlterTableParser.js +490 -0
  130. package/dist/parsers/AlterTableParser.js.map +1 -0
  131. package/dist/parsers/AnalyzeStatementParser.js +94 -0
  132. package/dist/parsers/AnalyzeStatementParser.js.map +1 -0
  133. package/dist/parsers/CommandExpressionParser.js +213 -0
  134. package/dist/parsers/CommandExpressionParser.js.map +1 -0
  135. package/dist/parsers/CommonTableParser.js +177 -0
  136. package/dist/parsers/CommonTableParser.js.map +1 -0
  137. package/dist/parsers/CreateIndexParser.js +241 -0
  138. package/dist/parsers/CreateIndexParser.js.map +1 -0
  139. package/dist/parsers/CreateTableParser.js +738 -0
  140. package/dist/parsers/CreateTableParser.js.map +1 -0
  141. package/dist/parsers/DeleteClauseParser.js +37 -0
  142. package/dist/parsers/DeleteClauseParser.js.map +1 -0
  143. package/dist/parsers/DeleteQueryParser.js +77 -0
  144. package/dist/parsers/DeleteQueryParser.js.map +1 -0
  145. package/dist/parsers/DropConstraintParser.js +51 -0
  146. package/dist/parsers/DropConstraintParser.js.map +1 -0
  147. package/dist/parsers/DropIndexParser.js +73 -0
  148. package/dist/parsers/DropIndexParser.js.map +1 -0
  149. package/dist/parsers/DropTableParser.js +63 -0
  150. package/dist/parsers/DropTableParser.js.map +1 -0
  151. package/dist/parsers/ExplainStatementParser.js +189 -0
  152. package/dist/parsers/ExplainStatementParser.js.map +1 -0
  153. package/dist/parsers/FetchClauseParser.js +89 -0
  154. package/dist/parsers/FetchClauseParser.js.map +1 -0
  155. package/dist/parsers/ForClauseParser.js +58 -0
  156. package/dist/parsers/ForClauseParser.js.map +1 -0
  157. package/dist/parsers/FromClauseParser.js +54 -0
  158. package/dist/parsers/FromClauseParser.js.map +1 -0
  159. package/dist/parsers/FullNameParser.js +110 -0
  160. package/dist/parsers/FullNameParser.js.map +1 -0
  161. package/dist/parsers/FunctionExpressionParser.js +524 -0
  162. package/dist/parsers/FunctionExpressionParser.js.map +1 -0
  163. package/dist/parsers/GroupByParser.js +58 -0
  164. package/dist/parsers/GroupByParser.js.map +1 -0
  165. package/dist/parsers/HavingParser.js +36 -0
  166. package/dist/parsers/HavingParser.js.map +1 -0
  167. package/dist/parsers/IdentifierDecorator.js +17 -0
  168. package/dist/parsers/IdentifierDecorator.js.map +1 -0
  169. package/dist/parsers/IdentifierParser.js +15 -0
  170. package/dist/parsers/IdentifierParser.js.map +1 -0
  171. package/dist/parsers/InsertQueryParser.js +162 -0
  172. package/dist/parsers/InsertQueryParser.js.map +1 -0
  173. package/dist/parsers/JoinClauseParser.js +117 -0
  174. package/dist/parsers/JoinClauseParser.js.map +1 -0
  175. package/dist/parsers/JoinOnClauseParser.js +21 -0
  176. package/dist/parsers/JoinOnClauseParser.js.map +1 -0
  177. package/dist/parsers/JoinUsingClauseParser.js +23 -0
  178. package/dist/parsers/JoinUsingClauseParser.js.map +1 -0
  179. package/dist/parsers/KeywordParser.js +99 -0
  180. package/dist/parsers/KeywordParser.js.map +1 -0
  181. package/dist/parsers/LimitClauseParser.js +38 -0
  182. package/dist/parsers/LimitClauseParser.js.map +1 -0
  183. package/dist/parsers/LiteralParser.js +48 -0
  184. package/dist/parsers/LiteralParser.js.map +1 -0
  185. package/dist/parsers/MergeQueryParser.js +483 -0
  186. package/dist/parsers/MergeQueryParser.js.map +1 -0
  187. package/dist/parsers/OffsetClauseParser.js +42 -0
  188. package/dist/parsers/OffsetClauseParser.js.map +1 -0
  189. package/dist/parsers/OrderByClauseParser.js +108 -0
  190. package/dist/parsers/OrderByClauseParser.js.map +1 -0
  191. package/dist/parsers/OverExpressionParser.js +44 -0
  192. package/dist/parsers/OverExpressionParser.js.map +1 -0
  193. package/dist/parsers/ParameterDecorator.js +40 -0
  194. package/dist/parsers/ParameterDecorator.js.map +1 -0
  195. package/dist/parsers/ParameterExpressionParser.js +24 -0
  196. package/dist/parsers/ParameterExpressionParser.js.map +1 -0
  197. package/dist/parsers/ParenExpressionParser.js +109 -0
  198. package/dist/parsers/ParenExpressionParser.js.map +1 -0
  199. package/dist/parsers/ParseError.js +25 -0
  200. package/dist/parsers/ParseError.js.map +1 -0
  201. package/dist/parsers/PartitionByParser.js +53 -0
  202. package/dist/parsers/PartitionByParser.js.map +1 -0
  203. package/dist/parsers/ReturningClauseParser.js +64 -0
  204. package/dist/parsers/ReturningClauseParser.js.map +1 -0
  205. package/dist/parsers/SelectClauseParser.js +244 -0
  206. package/dist/parsers/SelectClauseParser.js.map +1 -0
  207. package/dist/parsers/SelectQueryParser.js +564 -0
  208. package/dist/parsers/SelectQueryParser.js.map +1 -0
  209. package/dist/parsers/SequenceParser.js +245 -0
  210. package/dist/parsers/SequenceParser.js.map +1 -0
  211. package/dist/parsers/SetClauseParser.js +125 -0
  212. package/dist/parsers/SetClauseParser.js.map +1 -0
  213. package/dist/parsers/SourceAliasExpressionParser.js +60 -0
  214. package/dist/parsers/SourceAliasExpressionParser.js.map +1 -0
  215. package/dist/parsers/SourceExpressionParser.js +69 -0
  216. package/dist/parsers/SourceExpressionParser.js.map +1 -0
  217. package/dist/parsers/SourceParser.js +144 -0
  218. package/dist/parsers/SourceParser.js.map +1 -0
  219. package/dist/parsers/SqlParser.js +431 -0
  220. package/dist/parsers/SqlParser.js.map +1 -0
  221. package/dist/parsers/SqlPrintTokenParser.js +3289 -0
  222. package/dist/parsers/SqlPrintTokenParser.js.map +1 -0
  223. package/dist/parsers/SqlTokenizer.js +553 -0
  224. package/dist/parsers/SqlTokenizer.js.map +1 -0
  225. package/dist/parsers/StringSpecifierExpressionParser.js +22 -0
  226. package/dist/parsers/StringSpecifierExpressionParser.js.map +1 -0
  227. package/dist/parsers/UnaryExpressionParser.js +39 -0
  228. package/dist/parsers/UnaryExpressionParser.js.map +1 -0
  229. package/dist/parsers/UpdateClauseParser.js +21 -0
  230. package/dist/parsers/UpdateClauseParser.js.map +1 -0
  231. package/dist/parsers/UpdateQueryParser.js +98 -0
  232. package/dist/parsers/UpdateQueryParser.js.map +1 -0
  233. package/dist/parsers/UsingClauseParser.js +33 -0
  234. package/dist/parsers/UsingClauseParser.js.map +1 -0
  235. package/dist/parsers/ValueParser.js +562 -0
  236. package/dist/parsers/ValueParser.js.map +1 -0
  237. package/dist/parsers/ValuesQueryParser.js +112 -0
  238. package/dist/parsers/ValuesQueryParser.js.map +1 -0
  239. package/dist/parsers/WhereClauseParser.js +51 -0
  240. package/dist/parsers/WhereClauseParser.js.map +1 -0
  241. package/dist/parsers/WindowClauseParser.js +57 -0
  242. package/dist/parsers/WindowClauseParser.js.map +1 -0
  243. package/dist/parsers/WindowExpressionParser.js +163 -0
  244. package/dist/parsers/WindowExpressionParser.js.map +1 -0
  245. package/dist/parsers/WithClauseParser.js +165 -0
  246. package/dist/parsers/WithClauseParser.js.map +1 -0
  247. package/dist/parsers/utils/LexemeCommentUtils.js +29 -0
  248. package/dist/parsers/utils/LexemeCommentUtils.js.map +1 -0
  249. package/dist/reporting/models/DataFlowEdge.js +58 -0
  250. package/dist/reporting/models/DataFlowEdge.js.map +1 -0
  251. package/dist/reporting/models/DataFlowGraph.js +138 -0
  252. package/dist/reporting/models/DataFlowGraph.js.map +1 -0
  253. package/dist/reporting/models/DataFlowNode.js +148 -0
  254. package/dist/reporting/models/DataFlowNode.js.map +1 -0
  255. package/dist/reporting/services/CTEHandler.js +58 -0
  256. package/dist/reporting/services/CTEHandler.js.map +1 -0
  257. package/dist/reporting/services/DataSourceHandler.js +95 -0
  258. package/dist/reporting/services/DataSourceHandler.js.map +1 -0
  259. package/dist/reporting/services/JoinHandler.js +84 -0
  260. package/dist/reporting/services/JoinHandler.js.map +1 -0
  261. package/dist/reporting/services/ProcessHandler.js +26 -0
  262. package/dist/reporting/services/ProcessHandler.js.map +1 -0
  263. package/dist/src/index.d.ts +15 -0
  264. package/dist/src/index.js +13 -1
  265. package/dist/src/index.js.map +1 -1
  266. package/dist/src/models/Clause.d.ts +7 -3
  267. package/dist/src/models/Clause.js +16 -3
  268. package/dist/src/models/Clause.js.map +1 -1
  269. package/dist/src/models/DDLStatements.d.ts +97 -2
  270. package/dist/src/models/DDLStatements.js +14 -1
  271. package/dist/src/models/DDLStatements.js.map +1 -1
  272. package/dist/src/models/InsertQuery.d.ts +1 -4
  273. package/dist/src/models/InsertQuery.js +3 -5
  274. package/dist/src/models/InsertQuery.js.map +1 -1
  275. package/dist/src/models/SqlPrintToken.d.ts +6 -0
  276. package/dist/src/models/SqlPrintToken.js +1 -0
  277. package/dist/src/models/SqlPrintToken.js.map +1 -1
  278. package/dist/src/models/TableDefinitionModel.d.ts +41 -0
  279. package/dist/src/models/TableDefinitionModel.js +85 -0
  280. package/dist/src/models/TableDefinitionModel.js.map +1 -0
  281. package/dist/src/models/ValueComponent.d.ts +2 -1
  282. package/dist/src/models/ValuesQuery.d.ts +2 -0
  283. package/dist/src/models/ValuesQuery.js +1 -0
  284. package/dist/src/models/ValuesQuery.js.map +1 -1
  285. package/dist/src/parsers/AlterTableParser.d.ts +1 -0
  286. package/dist/src/parsers/AlterTableParser.js +26 -5
  287. package/dist/src/parsers/AlterTableParser.js.map +1 -1
  288. package/dist/src/parsers/FunctionExpressionParser.d.ts +1 -0
  289. package/dist/src/parsers/InsertQueryParser.js +4 -1
  290. package/dist/src/parsers/InsertQueryParser.js.map +1 -1
  291. package/dist/src/parsers/ReturningClauseParser.js +33 -47
  292. package/dist/src/parsers/ReturningClauseParser.js.map +1 -1
  293. package/dist/src/parsers/SequenceParser.d.ts +16 -0
  294. package/dist/src/parsers/SqlParser.d.ts +4 -3
  295. package/dist/src/parsers/SqlParser.js +44 -63
  296. package/dist/src/parsers/SqlParser.js.map +1 -1
  297. package/dist/src/parsers/SqlPrintTokenParser.d.ts +9 -0
  298. package/dist/src/parsers/SqlPrintTokenParser.js +22 -4
  299. package/dist/src/parsers/SqlPrintTokenParser.js.map +1 -1
  300. package/dist/src/parsers/SqlTokenizer.d.ts +1 -0
  301. package/dist/src/tokenReaders/LiteralTokenReader.js +7 -0
  302. package/dist/src/tokenReaders/LiteralTokenReader.js.map +1 -1
  303. package/dist/src/transformers/DDLDiffGenerator.d.ts +18 -0
  304. package/dist/src/transformers/DDLDiffGenerator.js +313 -0
  305. package/dist/src/transformers/DDLDiffGenerator.js.map +1 -0
  306. package/dist/src/transformers/DDLGeneralizer.d.ts +13 -0
  307. package/dist/src/transformers/DDLGeneralizer.js +119 -0
  308. package/dist/src/transformers/DDLGeneralizer.js.map +1 -0
  309. package/dist/src/transformers/DDLToFixtureConverter.d.ts +19 -0
  310. package/dist/src/transformers/DDLToFixtureConverter.js +206 -0
  311. package/dist/src/transformers/DDLToFixtureConverter.js.map +1 -0
  312. package/dist/src/transformers/DeleteResultSelectConverter.d.ts +53 -0
  313. package/dist/src/transformers/DeleteResultSelectConverter.js +398 -0
  314. package/dist/src/transformers/DeleteResultSelectConverter.js.map +1 -0
  315. package/dist/src/transformers/FixtureCteBuilder.d.ts +60 -0
  316. package/dist/src/transformers/FixtureCteBuilder.js +151 -0
  317. package/dist/src/transformers/FixtureCteBuilder.js.map +1 -0
  318. package/dist/src/transformers/InsertQuerySelectValuesConverter.js +5 -2
  319. package/dist/src/transformers/InsertQuerySelectValuesConverter.js.map +1 -1
  320. package/dist/src/transformers/InsertResultSelectConverter.d.ts +67 -0
  321. package/dist/src/transformers/InsertResultSelectConverter.js +499 -0
  322. package/dist/src/transformers/InsertResultSelectConverter.js.map +1 -0
  323. package/dist/src/transformers/MergeResultSelectConverter.d.ts +38 -0
  324. package/dist/src/transformers/MergeResultSelectConverter.js +310 -0
  325. package/dist/src/transformers/MergeResultSelectConverter.js.map +1 -0
  326. package/dist/src/transformers/QueryBuilder.d.ts +11 -0
  327. package/dist/src/transformers/QueryBuilder.js +19 -3
  328. package/dist/src/transformers/QueryBuilder.js.map +1 -1
  329. package/dist/src/transformers/SelectResultSelectConverter.d.ts +10 -0
  330. package/dist/src/transformers/SelectResultSelectConverter.js +36 -0
  331. package/dist/src/transformers/SelectResultSelectConverter.js.map +1 -0
  332. package/dist/src/transformers/SimulatedSelectConverter.d.ts +23 -0
  333. package/dist/src/transformers/SimulatedSelectConverter.js +65 -0
  334. package/dist/src/transformers/SimulatedSelectConverter.js.map +1 -0
  335. package/dist/src/transformers/UpdateResultSelectConverter.d.ts +51 -0
  336. package/dist/src/transformers/UpdateResultSelectConverter.js +344 -0
  337. package/dist/src/transformers/UpdateResultSelectConverter.js.map +1 -0
  338. package/dist/src/types/GenericFixture.d.ts +17 -0
  339. package/dist/src/utils/SelectQueryWithClauseHelper.d.ts +12 -0
  340. package/dist/src/utils/SelectQueryWithClauseHelper.js +47 -0
  341. package/dist/src/utils/SelectQueryWithClauseHelper.js.map +1 -0
  342. package/dist/src/utils/TableNameUtils.d.ts +10 -0
  343. package/dist/src/utils/ValueComponentRewriter.d.ts +3 -0
  344. package/dist/src/utils/ValueComponentRewriter.js +183 -0
  345. package/dist/src/utils/ValueComponentRewriter.js.map +1 -0
  346. package/dist/tokenReaders/BaseTokenReader.js +86 -0
  347. package/dist/tokenReaders/BaseTokenReader.js.map +1 -0
  348. package/dist/tokenReaders/CommandTokenReader.js +221 -0
  349. package/dist/tokenReaders/CommandTokenReader.js.map +1 -0
  350. package/dist/tokenReaders/EscapedIdentifierTokenReader.js +99 -0
  351. package/dist/tokenReaders/EscapedIdentifierTokenReader.js.map +1 -0
  352. package/dist/tokenReaders/FunctionTokenReader.js +47 -0
  353. package/dist/tokenReaders/FunctionTokenReader.js.map +1 -0
  354. package/dist/tokenReaders/IdentifierTokenReader.js +34 -0
  355. package/dist/tokenReaders/IdentifierTokenReader.js.map +1 -0
  356. package/dist/tokenReaders/LiteralTokenReader.js +329 -0
  357. package/dist/tokenReaders/LiteralTokenReader.js.map +1 -0
  358. package/dist/tokenReaders/OperatorTokenReader.js +152 -0
  359. package/dist/tokenReaders/OperatorTokenReader.js.map +1 -0
  360. package/dist/tokenReaders/ParameterTokenReader.js +190 -0
  361. package/dist/tokenReaders/ParameterTokenReader.js.map +1 -0
  362. package/dist/tokenReaders/StringSpecifierTokenReader.js +31 -0
  363. package/dist/tokenReaders/StringSpecifierTokenReader.js.map +1 -0
  364. package/dist/tokenReaders/SymbolTokenReader.js +35 -0
  365. package/dist/tokenReaders/SymbolTokenReader.js.map +1 -0
  366. package/dist/tokenReaders/TokenReaderManager.js +110 -0
  367. package/dist/tokenReaders/TokenReaderManager.js.map +1 -0
  368. package/dist/tokenReaders/TypeTokenReader.js +69 -0
  369. package/dist/tokenReaders/TypeTokenReader.js.map +1 -0
  370. package/dist/transformers/AliasRenamer.js +600 -0
  371. package/dist/transformers/AliasRenamer.js.map +1 -0
  372. package/dist/transformers/CTEBuilder.js +188 -0
  373. package/dist/transformers/CTEBuilder.js.map +1 -0
  374. package/dist/transformers/CTECollector.js +409 -0
  375. package/dist/transformers/CTECollector.js.map +1 -0
  376. package/dist/transformers/CTEComposer.js +302 -0
  377. package/dist/transformers/CTEComposer.js.map +1 -0
  378. package/dist/transformers/CTEDependencyAnalyzer.js +285 -0
  379. package/dist/transformers/CTEDependencyAnalyzer.js.map +1 -0
  380. package/dist/transformers/CTEDependencyTracer.js +253 -0
  381. package/dist/transformers/CTEDependencyTracer.js.map +1 -0
  382. package/dist/transformers/CTEDisabler.js +355 -0
  383. package/dist/transformers/CTEDisabler.js.map +1 -0
  384. package/dist/transformers/CTEInjector.js +83 -0
  385. package/dist/transformers/CTEInjector.js.map +1 -0
  386. package/dist/transformers/CTENormalizer.js +46 -0
  387. package/dist/transformers/CTENormalizer.js.map +1 -0
  388. package/dist/transformers/CTEQueryDecomposer.js +589 -0
  389. package/dist/transformers/CTEQueryDecomposer.js.map +1 -0
  390. package/dist/transformers/CTERenamer.js +486 -0
  391. package/dist/transformers/CTERenamer.js.map +1 -0
  392. package/dist/transformers/CTETableReferenceCollector.js +358 -0
  393. package/dist/transformers/CTETableReferenceCollector.js.map +1 -0
  394. package/dist/transformers/ColumnReferenceCollector.js +478 -0
  395. package/dist/transformers/ColumnReferenceCollector.js.map +1 -0
  396. package/dist/transformers/DDLDiffGenerator.js +313 -0
  397. package/dist/transformers/DDLDiffGenerator.js.map +1 -0
  398. package/dist/transformers/DDLGeneralizer.js +119 -0
  399. package/dist/transformers/DDLGeneralizer.js.map +1 -0
  400. package/dist/transformers/DDLToFixtureConverter.js +206 -0
  401. package/dist/transformers/DDLToFixtureConverter.js.map +1 -0
  402. package/dist/transformers/DeleteResultSelectConverter.js +414 -0
  403. package/dist/transformers/DeleteResultSelectConverter.js.map +1 -0
  404. package/dist/transformers/DynamicQueryBuilder.js +164 -0
  405. package/dist/transformers/DynamicQueryBuilder.js.map +1 -0
  406. package/dist/transformers/EnhancedJsonMapping.js +223 -0
  407. package/dist/transformers/EnhancedJsonMapping.js.map +1 -0
  408. package/dist/transformers/FilterableItemCollector.js +259 -0
  409. package/dist/transformers/FilterableItemCollector.js.map +1 -0
  410. package/dist/transformers/FixtureCteBuilder.js +151 -0
  411. package/dist/transformers/FixtureCteBuilder.js.map +1 -0
  412. package/dist/transformers/FormatOptionResolver.js +67 -0
  413. package/dist/transformers/FormatOptionResolver.js.map +1 -0
  414. package/dist/transformers/Formatter.js +38 -0
  415. package/dist/transformers/Formatter.js.map +1 -0
  416. package/dist/transformers/InsertQuerySelectValuesConverter.js +125 -0
  417. package/dist/transformers/InsertQuerySelectValuesConverter.js.map +1 -0
  418. package/dist/transformers/InsertResultSelectConverter.js +589 -0
  419. package/dist/transformers/InsertResultSelectConverter.js.map +1 -0
  420. package/dist/transformers/JoinAggregationDecomposer.js +497 -0
  421. package/dist/transformers/JoinAggregationDecomposer.js.map +1 -0
  422. package/dist/transformers/JsonMappingConverter.js +392 -0
  423. package/dist/transformers/JsonMappingConverter.js.map +1 -0
  424. package/dist/transformers/JsonMappingUnifier.js +216 -0
  425. package/dist/transformers/JsonMappingUnifier.js.map +1 -0
  426. package/dist/transformers/LinePrinter.js +148 -0
  427. package/dist/transformers/LinePrinter.js.map +1 -0
  428. package/dist/transformers/MergeResultSelectConverter.js +310 -0
  429. package/dist/transformers/MergeResultSelectConverter.js.map +1 -0
  430. package/dist/transformers/ModelDrivenJsonMapping.js +122 -0
  431. package/dist/transformers/ModelDrivenJsonMapping.js.map +1 -0
  432. package/dist/transformers/OnelineFormattingHelper.js +99 -0
  433. package/dist/transformers/OnelineFormattingHelper.js.map +1 -0
  434. package/dist/transformers/ParameterCollector.js +37 -0
  435. package/dist/transformers/ParameterCollector.js.map +1 -0
  436. package/dist/transformers/PostgresArrayEntityCteBuilder.js +458 -0
  437. package/dist/transformers/PostgresArrayEntityCteBuilder.js.map +1 -0
  438. package/dist/transformers/PostgresJsonQueryBuilder.js +245 -0
  439. package/dist/transformers/PostgresJsonQueryBuilder.js.map +1 -0
  440. package/dist/transformers/PostgresObjectEntityCteBuilder.js +347 -0
  441. package/dist/transformers/PostgresObjectEntityCteBuilder.js.map +1 -0
  442. package/dist/transformers/QueryBuilder.js +649 -0
  443. package/dist/transformers/QueryBuilder.js.map +1 -0
  444. package/dist/transformers/QueryFlowDiagramGenerator.js +157 -0
  445. package/dist/transformers/QueryFlowDiagramGenerator.js.map +1 -0
  446. package/dist/transformers/SchemaCollector.js +523 -0
  447. package/dist/transformers/SchemaCollector.js.map +1 -0
  448. package/dist/transformers/SelectResultSelectConverter.js +36 -0
  449. package/dist/transformers/SelectResultSelectConverter.js.map +1 -0
  450. package/dist/transformers/SelectValueCollector.js +244 -0
  451. package/dist/transformers/SelectValueCollector.js.map +1 -0
  452. package/dist/transformers/SelectableColumnCollector.js +674 -0
  453. package/dist/transformers/SelectableColumnCollector.js.map +1 -0
  454. package/dist/transformers/SimulatedSelectConverter.js +65 -0
  455. package/dist/transformers/SimulatedSelectConverter.js.map +1 -0
  456. package/dist/transformers/SmartRenamer.js +422 -0
  457. package/dist/transformers/SmartRenamer.js.map +1 -0
  458. package/dist/transformers/SqlFormatter.js +77 -0
  459. package/dist/transformers/SqlFormatter.js.map +1 -0
  460. package/dist/transformers/SqlIdentifierRenamer.js +504 -0
  461. package/dist/transformers/SqlIdentifierRenamer.js.map +1 -0
  462. package/dist/transformers/SqlOutputToken.js +13 -0
  463. package/dist/transformers/SqlOutputToken.js.map +1 -0
  464. package/dist/transformers/SqlPaginationInjector.js +108 -0
  465. package/dist/transformers/SqlPaginationInjector.js.map +1 -0
  466. package/dist/transformers/SqlParamInjector.js +802 -0
  467. package/dist/transformers/SqlParamInjector.js.map +1 -0
  468. package/dist/transformers/SqlParameterBinder.js +70 -0
  469. package/dist/transformers/SqlParameterBinder.js.map +1 -0
  470. package/dist/transformers/SqlPrinter.js +1478 -0
  471. package/dist/transformers/SqlPrinter.js.map +1 -0
  472. package/dist/transformers/SqlSortInjector.js +153 -0
  473. package/dist/transformers/SqlSortInjector.js.map +1 -0
  474. package/dist/transformers/TableColumnResolver.js +3 -0
  475. package/dist/transformers/TableColumnResolver.js.map +1 -0
  476. package/dist/transformers/TableSourceCollector.js +439 -0
  477. package/dist/transformers/TableSourceCollector.js.map +1 -0
  478. package/dist/transformers/TypeTransformationPostProcessor.js +363 -0
  479. package/dist/transformers/TypeTransformationPostProcessor.js.map +1 -0
  480. package/dist/transformers/UpdateResultSelectConverter.js +359 -0
  481. package/dist/transformers/UpdateResultSelectConverter.js.map +1 -0
  482. package/dist/transformers/UpstreamSelectQueryFinder.js +184 -0
  483. package/dist/transformers/UpstreamSelectQueryFinder.js.map +1 -0
  484. package/dist/tsconfig.tsbuildinfo +1 -1
  485. package/dist/types/Formatting.js +3 -0
  486. package/dist/types/Formatting.js.map +1 -0
  487. package/dist/types/GenericFixture.js +3 -0
  488. package/dist/types/GenericFixture.js.map +1 -0
  489. package/dist/utils/CTERegionDetector.js +464 -0
  490. package/dist/utils/CTERegionDetector.js.map +1 -0
  491. package/dist/utils/CommentEditor.js +345 -0
  492. package/dist/utils/CommentEditor.js.map +1 -0
  493. package/dist/utils/CommentUtils.js +69 -0
  494. package/dist/utils/CommentUtils.js.map +1 -0
  495. package/dist/utils/CursorContextAnalyzer.js +338 -0
  496. package/dist/utils/CursorContextAnalyzer.js.map +1 -0
  497. package/dist/utils/IntelliSenseApi.js +292 -0
  498. package/dist/utils/IntelliSenseApi.js.map +1 -0
  499. package/dist/utils/JsonSchemaValidator.js +215 -0
  500. package/dist/utils/JsonSchemaValidator.js.map +1 -0
  501. package/dist/utils/KeywordCache.js +206 -0
  502. package/dist/utils/KeywordCache.js.map +1 -0
  503. package/dist/utils/LexemeCursor.js +314 -0
  504. package/dist/utils/LexemeCursor.js.map +1 -0
  505. package/dist/utils/MultiQuerySplitter.js +292 -0
  506. package/dist/utils/MultiQuerySplitter.js.map +1 -0
  507. package/dist/utils/OperatorPrecedence.js +107 -0
  508. package/dist/utils/OperatorPrecedence.js.map +1 -0
  509. package/dist/utils/ParameterDetector.js +53 -0
  510. package/dist/utils/ParameterDetector.js.map +1 -0
  511. package/dist/utils/ParameterHelper.js +31 -0
  512. package/dist/utils/ParameterHelper.js.map +1 -0
  513. package/dist/utils/ParameterRemover.js +783 -0
  514. package/dist/utils/ParameterRemover.js.map +1 -0
  515. package/dist/utils/ParserStringUtils.js +31 -0
  516. package/dist/utils/ParserStringUtils.js.map +1 -0
  517. package/dist/utils/PositionAwareParser.js +363 -0
  518. package/dist/utils/PositionAwareParser.js.map +1 -0
  519. package/dist/utils/SchemaManager.js +217 -0
  520. package/dist/utils/SchemaManager.js.map +1 -0
  521. package/dist/utils/ScopeResolver.js +272 -0
  522. package/dist/utils/ScopeResolver.js.map +1 -0
  523. package/dist/utils/SelectQueryWithClauseHelper.js +47 -0
  524. package/dist/utils/SelectQueryWithClauseHelper.js.map +1 -0
  525. package/dist/utils/SqlSchemaValidator.js +55 -0
  526. package/dist/utils/SqlSchemaValidator.js.map +1 -0
  527. package/dist/utils/TableNameUtils.js +35 -0
  528. package/dist/utils/TableNameUtils.js.map +1 -0
  529. package/dist/utils/TextPositionUtils.js +128 -0
  530. package/dist/utils/TextPositionUtils.js.map +1 -0
  531. package/dist/utils/ValueComponentRewriter.js +187 -0
  532. package/dist/utils/ValueComponentRewriter.js.map +1 -0
  533. package/dist/utils/charLookupTable.js +73 -0
  534. package/dist/utils/charLookupTable.js.map +1 -0
  535. package/dist/utils/stringUtils.js +230 -0
  536. package/dist/utils/stringUtils.js.map +1 -0
  537. package/package.json +62 -62
@@ -0,0 +1,313 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DDLDiffGenerator = void 0;
4
+ const SqlParser_1 = require("../parsers/SqlParser");
5
+ const SqlFormatter_1 = require("./SqlFormatter");
6
+ const DDLGeneralizer_1 = require("./DDLGeneralizer");
7
+ const MultiQuerySplitter_1 = require("../utils/MultiQuerySplitter");
8
+ const CreateTableQuery_1 = require("../models/CreateTableQuery");
9
+ const DDLStatements_1 = require("../models/DDLStatements");
10
+ const ValueComponent_1 = require("../models/ValueComponent");
11
+ class DDLDiffGenerator {
12
+ static generateDiff(currentSql, expectedSql, options = {}) {
13
+ const currentAst = this.parseAndGeneralize(currentSql);
14
+ const expectedAst = this.parseAndGeneralize(expectedSql);
15
+ const currentSchema = this.buildSchema(currentAst);
16
+ const expectedSchema = this.buildSchema(expectedAst);
17
+ const diffAsts = [];
18
+ // Compare Tables
19
+ for (const [tableName, expectedTable] of expectedSchema.tables) {
20
+ const currentTable = currentSchema.tables.get(tableName);
21
+ if (!currentTable) {
22
+ // Table missing in current -> Create it
23
+ // We reconstruct the CreateTableQuery from columns
24
+ const columns = Array.from(expectedTable.columns.values()).map(c => c.definition);
25
+ const tableNameStr = expectedTable.qualifiedName.name instanceof ValueComponent_1.RawString
26
+ ? expectedTable.qualifiedName.name.value
27
+ : expectedTable.qualifiedName.name.name;
28
+ const namespaces = expectedTable.qualifiedName.namespaces
29
+ ? expectedTable.qualifiedName.namespaces.map(ns => ns.name)
30
+ : null;
31
+ const createTable = new CreateTableQuery_1.CreateTableQuery({
32
+ tableName: tableNameStr,
33
+ namespaces: namespaces,
34
+ columns: columns
35
+ });
36
+ diffAsts.push(createTable);
37
+ // And add constraints
38
+ for (const constraint of expectedTable.constraints) {
39
+ diffAsts.push(new DDLStatements_1.AlterTableStatement({
40
+ table: expectedTable.qualifiedName,
41
+ actions: [new DDLStatements_1.AlterTableAddConstraint({ constraint: constraint.definition })]
42
+ }));
43
+ }
44
+ // And add indexes
45
+ for (const index of expectedTable.indexes) {
46
+ diffAsts.push(index.definition);
47
+ }
48
+ }
49
+ else {
50
+ // Table exists -> Compare columns and constraints
51
+ this.compareColumns(currentTable, expectedTable, diffAsts, options);
52
+ this.compareConstraints(currentTable, expectedTable, diffAsts, options);
53
+ this.compareIndexes(currentTable, expectedTable, diffAsts, options);
54
+ }
55
+ }
56
+ // Drop Tables (if enabled)
57
+ if (options.dropTables) {
58
+ for (const [tableName, currentTable] of currentSchema.tables) {
59
+ if (!expectedSchema.tables.has(tableName)) {
60
+ // Table exists in current but not in expected -> Drop it
61
+ // We need a DropTableStatement. For now, we can manually construct the SQL or add DropTableStatement model.
62
+ // Since we return string[], we can just push a raw SQL string if we don't have the AST model yet,
63
+ // OR better, let's use a simple object that formats to DROP TABLE.
64
+ // But wait, the return type is string[] derived from ASTs.
65
+ // Let's assume we can use a raw SQL component or similar.
66
+ // Actually, let's just use a simple custom AST node or formatted string injection if possible.
67
+ // Looking at imports, we don't have DropTableStatement.
68
+ // Let's add a temporary workaround or just return the string directly?
69
+ // The method returns string[] by mapping diffAsts.
70
+ // We should add a DropTableStatement class or similar.
71
+ // For now, let's just push a dummy component that formats to DROP TABLE.
72
+ // Actually, let's check if we can import DropTableStatement.
73
+ // It seems it's not imported. Let's check DDLStatements.ts.
74
+ // If we can't easily add the AST, we might need to hack it or add the class.
75
+ // Let's try to add a simple DropTableStatement to DDLStatements.ts first if needed.
76
+ // But for now, let's assume we can just append the string at the end?
77
+ // No, the return is `diffAsts.map(...)`.
78
+ // Let's create a simple ad-hoc object that satisfies SqlComponent and formats correctly.
79
+ diffAsts.push(new DDLStatements_1.DropTableStatement({
80
+ tables: [currentTable.qualifiedName],
81
+ ifExists: false
82
+ }));
83
+ }
84
+ }
85
+ }
86
+ // Format output
87
+ const formatter = new SqlFormatter_1.SqlFormatter(options.formatOptions || { keywordCase: 'upper' });
88
+ return diffAsts.map(ast => formatter.format(ast).formattedSql + ';');
89
+ }
90
+ static parseAndGeneralize(sql) {
91
+ const split = MultiQuerySplitter_1.MultiQuerySplitter.split(sql);
92
+ const asts = [];
93
+ for (const q of split.queries) {
94
+ if (q.isEmpty)
95
+ continue;
96
+ try {
97
+ const ast = SqlParser_1.SqlParser.parse(q.sql);
98
+ asts.push(ast);
99
+ }
100
+ catch (e) {
101
+ // Ignore parse errors? Or throw?
102
+ // For diffing, we probably want to know if input is invalid.
103
+ console.warn("Failed to parse SQL for diff:", q.sql, e);
104
+ }
105
+ }
106
+ return DDLGeneralizer_1.DDLGeneralizer.generalize(asts);
107
+ }
108
+ static buildSchema(asts) {
109
+ var _a;
110
+ const tables = new Map();
111
+ const formatter = new SqlFormatter_1.SqlFormatter({ keywordCase: 'none' });
112
+ for (const ast of asts) {
113
+ if (ast instanceof CreateTableQuery_1.CreateTableQuery) {
114
+ const qName = new ValueComponent_1.QualifiedName(ast.namespaces || [], ast.tableName);
115
+ const key = this.getQualifiedNameKey(qName);
116
+ const tableModel = {
117
+ name: key,
118
+ qualifiedName: qName,
119
+ columns: new Map(),
120
+ constraints: [],
121
+ indexes: []
122
+ };
123
+ for (const col of ast.columns) {
124
+ tableModel.columns.set(col.name.name, {
125
+ name: col.name.name,
126
+ definition: col
127
+ });
128
+ }
129
+ // Generalized CreateTable shouldn't have tableConstraints, but if it did, we'd handle them.
130
+ tables.set(key, tableModel);
131
+ }
132
+ else if (ast instanceof DDLStatements_1.AlterTableStatement) {
133
+ const key = this.getQualifiedNameKey(ast.table);
134
+ const tableModel = tables.get(key);
135
+ if (tableModel) {
136
+ for (const action of ast.actions) {
137
+ if (action instanceof DDLStatements_1.AlterTableAddConstraint) {
138
+ const formatted = formatter.format(action.constraint).formattedSql;
139
+ tableModel.constraints.push({
140
+ name: (_a = action.constraint.constraintName) === null || _a === void 0 ? void 0 : _a.name,
141
+ kind: action.constraint.kind,
142
+ definition: action.constraint,
143
+ formatted: formatted
144
+ });
145
+ }
146
+ else if (action instanceof DDLStatements_1.AlterTableAddColumn) {
147
+ tableModel.columns.set(action.column.name.name, {
148
+ name: action.column.name.name,
149
+ definition: action.column
150
+ });
151
+ }
152
+ }
153
+ }
154
+ }
155
+ else if (ast instanceof DDLStatements_1.CreateIndexStatement) {
156
+ const key = this.getQualifiedNameKey(ast.tableName);
157
+ const tableModel = tables.get(key);
158
+ if (tableModel) {
159
+ const formatted = formatter.format(ast).formattedSql;
160
+ tableModel.indexes.push({
161
+ name: ast.indexName.toString(),
162
+ definition: ast,
163
+ formatted: formatted
164
+ });
165
+ }
166
+ }
167
+ }
168
+ return { tables };
169
+ }
170
+ static compareColumns(current, expected, diffs, options) {
171
+ // Add missing columns
172
+ for (const [name, col] of expected.columns) {
173
+ if (!current.columns.has(name)) {
174
+ diffs.push(new DDLStatements_1.AlterTableStatement({
175
+ table: expected.qualifiedName,
176
+ actions: [new DDLStatements_1.AlterTableAddColumn({ column: col.definition })]
177
+ }));
178
+ }
179
+ }
180
+ // Drop extra columns
181
+ if (options.dropColumns) {
182
+ for (const [name, col] of current.columns) {
183
+ if (!expected.columns.has(name)) {
184
+ diffs.push(new DDLStatements_1.AlterTableStatement({
185
+ table: expected.qualifiedName,
186
+ actions: [new DDLStatements_1.AlterTableDropColumn({ columnName: col.definition.name })]
187
+ }));
188
+ }
189
+ }
190
+ }
191
+ }
192
+ static compareConstraints(current, expected, diffs, options) {
193
+ // We need to match constraints.
194
+ // If checkConstraintNames is true, match by name.
195
+ // Else, match by formatted definition (ignoring name in formatting if possible, but SqlFormatter prints name).
196
+ // To compare by definition ignoring name, we might need to strip name from definition before formatting.
197
+ const formatter = new SqlFormatter_1.SqlFormatter({ keywordCase: 'none' });
198
+ const getConstraintSignature = (c) => {
199
+ if (options.checkConstraintNames) {
200
+ // Special handling for PRIMARY KEY: ignore name difference
201
+ if (c.kind === 'primary-key') {
202
+ // Strip "CONSTRAINT name" prefix, handling both quoted and unquoted names
203
+ // Match: CONSTRAINT "name" or CONSTRAINT name (case-insensitive)
204
+ const sig = c.formatted.replace(/^constraint\s+("[^"]+"|[^\s]+)\s+/i, '').trim();
205
+ return sig;
206
+ }
207
+ return c.name || c.formatted; // Fallback if no name?
208
+ }
209
+ // Remove name from definition for comparison
210
+ // "CONSTRAINT name PRIMARY KEY ..." vs "PRIMARY KEY ..."
211
+ // If we format it, it might include CONSTRAINT name.
212
+ // We can regex remove it?
213
+ return c.formatted.replace(/^constraint\s+("[^"]+"|[^\s]+)\s+/i, '').trim();
214
+ };
215
+ const currentSignatures = new Set(current.constraints.map(getConstraintSignature));
216
+ // Add missing constraints
217
+ for (const expectedC of expected.constraints) {
218
+ const sig = getConstraintSignature(expectedC);
219
+ if (!currentSignatures.has(sig)) {
220
+ diffs.push(new DDLStatements_1.AlterTableStatement({
221
+ table: expected.qualifiedName,
222
+ actions: [new DDLStatements_1.AlterTableAddConstraint({ constraint: expectedC.definition })]
223
+ }));
224
+ }
225
+ }
226
+ // Drop extra constraints
227
+ if (options.dropConstraints) {
228
+ const expectedSignatures = new Set(expected.constraints.map(getConstraintSignature));
229
+ for (const currentC of current.constraints) {
230
+ const sig = getConstraintSignature(currentC);
231
+ if (!expectedSignatures.has(sig)) {
232
+ // To drop, we need a name. If no name, we can't drop easily (DBs usually auto-name).
233
+ if (currentC.name) {
234
+ diffs.push(new DDLStatements_1.AlterTableStatement({
235
+ table: expected.qualifiedName,
236
+ actions: [new DDLStatements_1.AlterTableDropConstraint({ constraintName: new ValueComponent_1.IdentifierString(currentC.name) })]
237
+ }));
238
+ }
239
+ else {
240
+ console.warn("Cannot drop unnamed constraint:", currentC.formatted);
241
+ }
242
+ }
243
+ }
244
+ }
245
+ }
246
+ static compareIndexes(current, expected, diffs, options) {
247
+ const getIndexSignature = (idx) => {
248
+ if (options.checkConstraintNames) {
249
+ // When Check Names is enabled, index name matters
250
+ return idx.name;
251
+ }
252
+ // When Check Names is disabled, compare by structural properties from AST
253
+ // Compare: table name, columns (expressions), unique flag, using method, where clause
254
+ const def = idx.definition;
255
+ const parts = [];
256
+ // Table name
257
+ parts.push(def.tableName.toString());
258
+ // Unique flag
259
+ if (def.unique) {
260
+ parts.push('UNIQUE');
261
+ }
262
+ // Using method (e.g., BTREE, HASH)
263
+ if (def.usingMethod) {
264
+ parts.push(`USING:${def.usingMethod.toString()}`);
265
+ }
266
+ // Columns (expressions and sort orders)
267
+ const columnSigs = def.columns.map(col => {
268
+ const expr = col.expression.toString();
269
+ const sort = col.sortOrder || '';
270
+ const nulls = col.nullsOrder || '';
271
+ return `${expr}${sort}${nulls}`;
272
+ });
273
+ parts.push(`COLS:${columnSigs.join(',')}`);
274
+ // Include columns
275
+ if (def.include && def.include.length > 0) {
276
+ parts.push(`INCLUDE:${def.include.map(i => i.toString()).join(',')}`);
277
+ }
278
+ // Where clause
279
+ if (def.where) {
280
+ parts.push(`WHERE:${def.where.toString()}`);
281
+ }
282
+ return parts.join('|');
283
+ };
284
+ const currentSignatures = new Set(current.indexes.map(getIndexSignature));
285
+ // Add missing indexes
286
+ for (const expectedIdx of expected.indexes) {
287
+ const sig = getIndexSignature(expectedIdx);
288
+ if (!currentSignatures.has(sig)) {
289
+ diffs.push(expectedIdx.definition);
290
+ }
291
+ }
292
+ // Drop extra indexes
293
+ // When checkConstraintNames is enabled, we should drop indexes with different names
294
+ // When dropIndexes is enabled, we should drop all extra indexes
295
+ if (options.checkConstraintNames || options.dropIndexes) {
296
+ const expectedSignatures = new Set(expected.indexes.map(getIndexSignature));
297
+ for (const currentIdx of current.indexes) {
298
+ const sig = getIndexSignature(currentIdx);
299
+ if (!expectedSignatures.has(sig)) {
300
+ diffs.push(new DDLStatements_1.DropIndexStatement({
301
+ indexNames: [currentIdx.definition.indexName],
302
+ ifExists: false
303
+ }));
304
+ }
305
+ }
306
+ }
307
+ }
308
+ static getQualifiedNameKey(qName) {
309
+ return qName.toString();
310
+ }
311
+ }
312
+ exports.DDLDiffGenerator = DDLDiffGenerator;
313
+ //# sourceMappingURL=DDLDiffGenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DDLDiffGenerator.js","sourceRoot":"","sources":["../../src/transformers/DDLDiffGenerator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DDLGeneralizer = void 0;
4
+ const CreateTableQuery_1 = require("../models/CreateTableQuery");
5
+ const DDLStatements_1 = require("../models/DDLStatements");
6
+ const ValueComponent_1 = require("../models/ValueComponent");
7
+ class DDLGeneralizer {
8
+ /**
9
+ * Generalizes DDL statements by moving constraints from CREATE TABLE to ALTER TABLE statements.
10
+ * This normalizes the DDL for easier comparison.
11
+ *
12
+ * @param ast List of SQL components (DDL statements)
13
+ * @returns Generalized list of SQL components
14
+ */
15
+ static generalize(ast) {
16
+ const result = [];
17
+ for (const component of ast) {
18
+ if (component instanceof CreateTableQuery_1.CreateTableQuery) {
19
+ const { createTable, alterTables } = this.splitCreateTable(component);
20
+ result.push(createTable);
21
+ result.push(...alterTables);
22
+ }
23
+ else {
24
+ result.push(component);
25
+ }
26
+ }
27
+ return result;
28
+ }
29
+ static splitCreateTable(query) {
30
+ const newColumns = [];
31
+ const alterTables = [];
32
+ // Construct QualifiedName for the table
33
+ const tableQualifiedName = new ValueComponent_1.QualifiedName(query.namespaces || [], query.tableName.name);
34
+ // Process columns
35
+ for (const col of query.columns) {
36
+ const newConstraints = [];
37
+ for (const constraint of col.constraints) {
38
+ if (['primary-key', 'unique', 'references', 'check'].includes(constraint.kind)) {
39
+ // Move to Alter Table
40
+ const tableConstraint = this.columnToTableConstraint(col.name, constraint);
41
+ alterTables.push(new DDLStatements_1.AlterTableStatement({
42
+ table: tableQualifiedName,
43
+ actions: [new DDLStatements_1.AlterTableAddConstraint({ constraint: tableConstraint })]
44
+ }));
45
+ }
46
+ else {
47
+ // Keep (not-null, default, etc.)
48
+ newConstraints.push(constraint);
49
+ }
50
+ }
51
+ newColumns.push(new CreateTableQuery_1.TableColumnDefinition({
52
+ name: col.name,
53
+ dataType: col.dataType,
54
+ constraints: newConstraints
55
+ }));
56
+ }
57
+ // Process table constraints
58
+ if (query.tableConstraints) {
59
+ for (const constraint of query.tableConstraints) {
60
+ alterTables.push(new DDLStatements_1.AlterTableStatement({
61
+ table: tableQualifiedName,
62
+ actions: [new DDLStatements_1.AlterTableAddConstraint({ constraint })]
63
+ }));
64
+ }
65
+ }
66
+ const newCreateTable = new CreateTableQuery_1.CreateTableQuery({
67
+ tableName: query.tableName.name,
68
+ namespaces: query.namespaces,
69
+ columns: newColumns,
70
+ ifNotExists: query.ifNotExists,
71
+ isTemporary: query.isTemporary,
72
+ tableOptions: query.tableOptions,
73
+ asSelectQuery: query.asSelectQuery,
74
+ withDataOption: query.withDataOption,
75
+ // tableConstraints is empty
76
+ tableConstraints: []
77
+ });
78
+ return { createTable: newCreateTable, alterTables };
79
+ }
80
+ static columnToTableConstraint(columnName, constraint) {
81
+ var _a, _b;
82
+ const baseParams = {
83
+ constraintName: constraint.constraintName,
84
+ deferrable: (_a = constraint.reference) === null || _a === void 0 ? void 0 : _a.deferrable,
85
+ initially: (_b = constraint.reference) === null || _b === void 0 ? void 0 : _b.initially
86
+ };
87
+ switch (constraint.kind) {
88
+ case 'primary-key':
89
+ return new CreateTableQuery_1.TableConstraintDefinition({
90
+ kind: 'primary-key',
91
+ columns: [columnName],
92
+ ...baseParams
93
+ });
94
+ case 'unique':
95
+ return new CreateTableQuery_1.TableConstraintDefinition({
96
+ kind: 'unique',
97
+ columns: [columnName],
98
+ ...baseParams
99
+ });
100
+ case 'references':
101
+ return new CreateTableQuery_1.TableConstraintDefinition({
102
+ kind: 'foreign-key',
103
+ columns: [columnName],
104
+ reference: constraint.reference,
105
+ ...baseParams
106
+ });
107
+ case 'check':
108
+ return new CreateTableQuery_1.TableConstraintDefinition({
109
+ kind: 'check',
110
+ checkExpression: constraint.checkExpression,
111
+ ...baseParams
112
+ });
113
+ default:
114
+ throw new Error(`Unsupported constraint kind for generalization: ${constraint.kind}`);
115
+ }
116
+ }
117
+ }
118
+ exports.DDLGeneralizer = DDLGeneralizer;
119
+ //# sourceMappingURL=DDLGeneralizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DDLGeneralizer.js","sourceRoot":"","sources":["../../src/transformers/DDLGeneralizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,206 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DDLToFixtureConverter = void 0;
4
+ const MultiQuerySplitter_1 = require("../utils/MultiQuerySplitter");
5
+ const SqlParser_1 = require("../parsers/SqlParser");
6
+ const CreateTableQuery_1 = require("../models/CreateTableQuery");
7
+ const InsertQuery_1 = require("../models/InsertQuery");
8
+ const ValuesQuery_1 = require("../models/ValuesQuery");
9
+ const TableDefinitionModel_1 = require("../models/TableDefinitionModel");
10
+ const ValueComponent_1 = require("../models/ValueComponent");
11
+ const SqlFormatter_1 = require("./SqlFormatter");
12
+ class DDLToFixtureConverter {
13
+ /**
14
+ * Converts DDL statements (CREATE TABLE) in the provided SQL text to a Fixture JSON object.
15
+ * Ignores non-DDL statements and parse errors.
16
+ *
17
+ * @param ddlSql The SQL text containing CREATE TABLE statements.
18
+ * @returns A Record representing the Fixture JSON.
19
+ */
20
+ /**
21
+ * Converts DDL statements (CREATE TABLE) in the provided SQL text to a Fixture JSON object.
22
+ * Ignores non-DDL statements and parse errors.
23
+ *
24
+ * @param ddlSql The SQL text containing CREATE TABLE statements.
25
+ * @returns A Record representing the Fixture JSON.
26
+ */
27
+ static convert(ddlSql) {
28
+ const splitResult = MultiQuerySplitter_1.MultiQuerySplitter.split(ddlSql);
29
+ const createTableQueries = [];
30
+ const insertQueries = [];
31
+ for (const query of splitResult.queries) {
32
+ if (query.isEmpty)
33
+ continue;
34
+ try {
35
+ const ast = SqlParser_1.SqlParser.parse(query.sql);
36
+ if (ast instanceof CreateTableQuery_1.CreateTableQuery) {
37
+ createTableQueries.push(ast);
38
+ }
39
+ else if (ast instanceof InsertQuery_1.InsertQuery) {
40
+ insertQueries.push(ast);
41
+ }
42
+ }
43
+ catch (e) {
44
+ // Ignore parse errors for non-DDL or invalid SQL
45
+ }
46
+ }
47
+ const registry = (0, TableDefinitionModel_1.createTableDefinitionRegistryFromCreateTableQueries)(createTableQueries);
48
+ const fixtureJson = {};
49
+ // Initialize fixtureJson with empty rows
50
+ for (const [tableName, def] of Object.entries(registry)) {
51
+ fixtureJson[tableName] = {
52
+ columns: def.columns.map(col => ({
53
+ name: col.name,
54
+ type: col.typeName,
55
+ default: this.formatDefaultValue(col.defaultValue)
56
+ })),
57
+ rows: []
58
+ };
59
+ }
60
+ // Sequence counters for nextval defaults: table -> column -> counter
61
+ const sequences = {};
62
+ // Process INSERT statements
63
+ for (const insert of insertQueries) {
64
+ // Only support INSERT ... VALUES
65
+ if (!(insert.selectQuery instanceof ValuesQuery_1.ValuesQuery)) {
66
+ continue;
67
+ }
68
+ const tableName = insert.insertClause.source.getAliasName();
69
+ if (!tableName || !fixtureJson[tableName]) {
70
+ // Ignore INSERTs for unknown tables
71
+ continue;
72
+ }
73
+ const tableDef = registry[tableName];
74
+ const targetColumns = insert.insertClause.columns;
75
+ const valuesQuery = insert.selectQuery;
76
+ // If columns are not specified, use all columns in order
77
+ const columnNames = targetColumns
78
+ ? targetColumns.map(c => c.name)
79
+ : tableDef.columns.map(c => c.name);
80
+ for (const tuple of valuesQuery.tuples) {
81
+ const row = {};
82
+ // Map provided values
83
+ for (let i = 0; i < columnNames.length; i++) {
84
+ const colName = columnNames[i];
85
+ if (i < tuple.values.length) {
86
+ const val = tuple.values[i];
87
+ row[colName] = this.extractValue(val);
88
+ }
89
+ }
90
+ // Fill missing columns with defaults
91
+ for (const colDef of tableDef.columns) {
92
+ if (row[colDef.name] !== undefined) {
93
+ continue;
94
+ }
95
+ // Check for NOT NULL constraint without default
96
+ // TableColumnDefinitionModel.required is true if NOT NULL and no default/identity
97
+ if (colDef.required) {
98
+ throw new Error(`Column '${colDef.name}' in table '${tableName}' cannot be null and has no default value.`);
99
+ }
100
+ const hasDefault = colDef.defaultValue !== null && colDef.defaultValue !== undefined;
101
+ if (hasDefault) {
102
+ const defaultValStr = this.formatDefaultValue(colDef.defaultValue);
103
+ if (defaultValStr) {
104
+ const trimmedDefault = defaultValStr.trim();
105
+ const lowerTrimmed = trimmedDefault.toLowerCase();
106
+ const stringLiteralValue = trimmedDefault.startsWith("'") && trimmedDefault.endsWith("'")
107
+ ? trimmedDefault.slice(1, -1).replace(/''/g, "'")
108
+ : trimmedDefault;
109
+ // Normalize literal NULLs (even when quoted) into JS null
110
+ if (stringLiteralValue.toLowerCase() === 'null') {
111
+ row[colDef.name] = null;
112
+ }
113
+ else if (lowerTrimmed.includes('nextval')) {
114
+ // Handle nextval sequence
115
+ if (!sequences[tableName])
116
+ sequences[tableName] = {};
117
+ if (!sequences[tableName][colDef.name])
118
+ sequences[tableName][colDef.name] = 0;
119
+ sequences[tableName][colDef.name]++;
120
+ row[colDef.name] = sequences[tableName][colDef.name];
121
+ }
122
+ else if (lowerTrimmed.includes('now') || lowerTrimmed.includes('current_timestamp')) {
123
+ // Handle timestamp defaults - use a fixed date for consistency or current date
124
+ // Using a fixed date makes tests deterministic
125
+ row[colDef.name] = "2023-01-01 00:00:00";
126
+ }
127
+ else {
128
+ // Use the literal default value
129
+ // Try to unquote if it's a string literal
130
+ if (trimmedDefault.startsWith("'") && trimmedDefault.endsWith("'")) {
131
+ row[colDef.name] = stringLiteralValue;
132
+ }
133
+ else {
134
+ // Try to parse number/boolean/null
135
+ const num = Number(trimmedDefault);
136
+ if (!isNaN(num)) {
137
+ row[colDef.name] = num;
138
+ }
139
+ else {
140
+ const lower = trimmedDefault.toLowerCase();
141
+ if (lower === 'true') {
142
+ row[colDef.name] = true;
143
+ }
144
+ else if (lower === 'false') {
145
+ row[colDef.name] = false;
146
+ }
147
+ else if (lower === 'null') {
148
+ row[colDef.name] = null;
149
+ }
150
+ else {
151
+ row[colDef.name] = trimmedDefault;
152
+ }
153
+ }
154
+ }
155
+ }
156
+ }
157
+ }
158
+ else {
159
+ // Default to null
160
+ row[colDef.name] = null;
161
+ }
162
+ }
163
+ fixtureJson[tableName].rows.push(row);
164
+ }
165
+ }
166
+ return fixtureJson;
167
+ }
168
+ static extractValue(value) {
169
+ if (value instanceof ValueComponent_1.LiteralValue) {
170
+ return value.value;
171
+ }
172
+ // For other types, try to format to string
173
+ try {
174
+ const formatter = new SqlFormatter_1.SqlFormatter({ keywordCase: 'none' });
175
+ const { formattedSql } = formatter.format(value);
176
+ // Remove quotes if it looks like a string literal
177
+ if (formattedSql.startsWith("'") && formattedSql.endsWith("'")) {
178
+ return formattedSql.slice(1, -1).replace(/''/g, "'");
179
+ }
180
+ return formattedSql;
181
+ }
182
+ catch (e) {
183
+ return String(value);
184
+ }
185
+ }
186
+ static formatDefaultValue(value) {
187
+ if (value === null || value === undefined) {
188
+ return undefined;
189
+ }
190
+ if (typeof value === 'string') {
191
+ return value;
192
+ }
193
+ try {
194
+ // Use SqlFormatter to print the AST node
195
+ const formatter = new SqlFormatter_1.SqlFormatter({ keywordCase: 'none' });
196
+ const { formattedSql } = formatter.format(value);
197
+ return formattedSql;
198
+ }
199
+ catch (e) {
200
+ // Fallback if formatter fails
201
+ return String(value);
202
+ }
203
+ }
204
+ }
205
+ exports.DDLToFixtureConverter = DDLToFixtureConverter;
206
+ //# sourceMappingURL=DDLToFixtureConverter.js.map