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,148 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PrintLine = exports.LinePrinter = void 0;
4
+ /**
5
+ * SqlPrintHelper provides utility methods for SQL pretty printing.
6
+ */
7
+ class LinePrinter {
8
+ /**
9
+ * @param indentChar Character used for indentation (default: ' ') // Accepts logical names like 'space'/'tab'
10
+ * @param indentSize Number of indentChar per level (default: 0)
11
+ * @param newline Newline string (default: '\r\n') // Accepts logical names like 'lf'/'crlf'/'cr'
12
+ * @param commaBreak Comma break style (default: 'none')
13
+ */
14
+ constructor(indentChar = ' ', indentSize = 0, newline = '\r\n', commaBreak = 'none') {
15
+ this.indentChar = indentChar;
16
+ this.indentSize = indentSize;
17
+ this.newline = newline;
18
+ this.commaBreak = commaBreak;
19
+ this.lines = [];
20
+ this.appendNewline(0);
21
+ }
22
+ print() {
23
+ let result = '';
24
+ for (const line of this.lines) {
25
+ if (line.text !== '') {
26
+ // append indent and text
27
+ result += this.indent(line.level) + line.text;
28
+ }
29
+ }
30
+ return result.trimEnd();
31
+ }
32
+ /**
33
+ * Returns the indent string for a given level.
34
+ * @param level Indentation level
35
+ */
36
+ indent(level) {
37
+ return this.indentChar.repeat(this.indentSize * level);
38
+ }
39
+ /**
40
+ * Appends a newline token to the given tokens array if newline is set, or adds an empty line if tokens is empty.
41
+ * @param tokens Array of token objects with 'level' and 'text' property
42
+ * @param level Indentation level
43
+ */
44
+ appendNewline(level) {
45
+ if (this.lines.length > 0) {
46
+ const current = this.lines[this.lines.length - 1];
47
+ if (current.text !== '') {
48
+ current.text = current.text.trimEnd() + this.newline;
49
+ }
50
+ }
51
+ this.lines.push(new PrintLine(level, ''));
52
+ }
53
+ /**
54
+ * Appends text to the last element of tokens array.
55
+ * @param tokens Array of token objects with 'text' property
56
+ * @param text Text to append
57
+ */
58
+ appendText(text) {
59
+ // Handle special comma cleanup first
60
+ if (this.cleanupLine(text)) {
61
+ // If cleanup was performed, add comma to previous line
62
+ const previousLine = this.lines[this.lines.length - 1];
63
+ previousLine.text = previousLine.text.trimEnd() + text;
64
+ return;
65
+ }
66
+ const workLine = this.getCurrentLine();
67
+ // Leading space is not needed
68
+ if (!(text === ' ' && workLine.text === '')) {
69
+ workLine.text += text;
70
+ }
71
+ }
72
+ trimTrailingWhitespaceFromPreviousLine() {
73
+ if (this.lines.length < 2) {
74
+ return;
75
+ }
76
+ const previousLine = this.lines[this.lines.length - 2];
77
+ const newlineMatch = previousLine.text.match(/(\r?\n)$/);
78
+ const trailingNewline = newlineMatch ? newlineMatch[1] : '';
79
+ const content = trailingNewline
80
+ ? previousLine.text.slice(0, -trailingNewline.length)
81
+ : previousLine.text;
82
+ previousLine.text = content.replace(/[ \t]+$/, '') + trailingNewline;
83
+ }
84
+ /**
85
+ * Cleans up the current line for comma formatting.
86
+ * For 'after' and 'none' comma styles, removes empty line when a comma is being added.
87
+ * @param text The text being processed
88
+ * @returns true if cleanup was performed, false otherwise
89
+ */
90
+ cleanupLine(text) {
91
+ const workLine = this.getCurrentLine();
92
+ if (text === ',' && workLine.text.trim() === '' && this.lines.length > 1 && (this.commaBreak === 'after' || this.commaBreak === 'none')) {
93
+ let previousIndex = this.lines.length - 2;
94
+ while (previousIndex >= 0 && this.lines[previousIndex].text.trim() === '') {
95
+ this.lines.splice(previousIndex, 1);
96
+ previousIndex--;
97
+ }
98
+ if (previousIndex < 0) {
99
+ return false;
100
+ }
101
+ const previousLine = this.lines[previousIndex];
102
+ // Avoid pulling commas onto a line comment to keep the comma executable
103
+ if (this.lineHasTrailingComment(previousLine.text)) {
104
+ return false;
105
+ }
106
+ this.lines.pop(); // Safe: we checked lines.length > 1
107
+ return true; // Cleanup performed
108
+ }
109
+ return false; // No cleanup needed
110
+ }
111
+ lineHasTrailingComment(text) {
112
+ // Strip simple quoted sections so comment markers inside literals are ignored.
113
+ const withoutStrings = text
114
+ .replace(/'([^']|'')*'/g, '')
115
+ .replace(/"([^"]|"")*"/g, '')
116
+ .trim();
117
+ // Treat any remaining '--' as a line comment marker so we never pull commas onto commented lines.
118
+ return withoutStrings.includes('--');
119
+ }
120
+ getCurrentLine() {
121
+ if (this.lines.length > 0) {
122
+ return this.lines[this.lines.length - 1];
123
+ }
124
+ else {
125
+ throw new Error('No tokens to get current line from.');
126
+ }
127
+ }
128
+ /**
129
+ * Checks if the current line is empty (has no text content)
130
+ * @returns true if current line is empty, false otherwise
131
+ */
132
+ isCurrentLineEmpty() {
133
+ if (this.lines.length > 0) {
134
+ const currentLine = this.lines[this.lines.length - 1];
135
+ return currentLine.text.trim() === '';
136
+ }
137
+ return true;
138
+ }
139
+ }
140
+ exports.LinePrinter = LinePrinter;
141
+ class PrintLine {
142
+ constructor(level, text) {
143
+ this.level = level;
144
+ this.text = text;
145
+ }
146
+ }
147
+ exports.PrintLine = PrintLine;
148
+ //# sourceMappingURL=LinePrinter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LinePrinter.js","sourceRoot":"","sources":["../../src/transformers/LinePrinter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,310 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MergeResultSelectConverter = void 0;
4
+ const Clause_1 = require("../models/Clause");
5
+ const MergeQuery_1 = require("../models/MergeQuery");
6
+ const ValueComponent_1 = require("../models/ValueComponent");
7
+ const SelectQuery_1 = require("../models/SelectQuery");
8
+ const FixtureCteBuilder_1 = require("./FixtureCteBuilder");
9
+ const TableSourceCollector_1 = require("./TableSourceCollector");
10
+ const SelectQueryWithClauseHelper_1 = require("../utils/SelectQueryWithClauseHelper");
11
+ class MergeResultSelectConverter {
12
+ /**
13
+ * Converts a MERGE query into a SELECT that counts or models the rows affected by each action.
14
+ */
15
+ static toSelectQuery(mergeQuery, options) {
16
+ var _a, _b, _c;
17
+ // Build individual SELECTs for each WHEN clause so the row count can include every affected path.
18
+ const actionSelects = this.buildActionSelects(mergeQuery);
19
+ if (actionSelects.length === 0) {
20
+ throw new Error('MERGE query must include at least one action that affects rows.');
21
+ }
22
+ // Combine the individual action selects into one union so the COUNT(*) can inspect all of them.
23
+ const unionSource = this.combineSelects(actionSelects);
24
+ const derivedSource = new Clause_1.SourceExpression(new Clause_1.SubQuerySource(unionSource), new Clause_1.SourceAliasExpression('__merge_action_rows', null));
25
+ // Wrap the union in a derived table so the outer query can aggregate a single row count.
26
+ const finalSelect = new SelectQuery_1.SimpleSelectQuery({
27
+ selectClause: this.buildCountSelectClause(),
28
+ fromClause: new Clause_1.FromClause(derivedSource, null)
29
+ });
30
+ // Prepare fixture metadata before verifying coverage.
31
+ const fixtureTables = (_a = options === null || options === void 0 ? void 0 : options.fixtureTables) !== null && _a !== void 0 ? _a : [];
32
+ const fixtureMap = this.buildFixtureTableMap(fixtureTables);
33
+ const missingStrategy = (_b = options === null || options === void 0 ? void 0 : options.missingFixtureStrategy) !== null && _b !== void 0 ? _b : this.DEFAULT_MISSING_FIXTURE_STRATEGY;
34
+ const nativeWithClause = (_c = mergeQuery.withClause) !== null && _c !== void 0 ? _c : null;
35
+ const referencedTables = this.collectPhysicalTableReferences(unionSource, nativeWithClause);
36
+ const cteNames = this.collectCteNamesFromWithClause(nativeWithClause);
37
+ const targetName = this.normalizeIdentifier(this.extractTargetTableName(mergeQuery.target));
38
+ if (!cteNames.has(targetName)) {
39
+ referencedTables.add(targetName);
40
+ }
41
+ // Ensure every referenced physical table is backed by a fixture when required.
42
+ this.ensureFixtureCoverage(referencedTables, fixtureMap, missingStrategy);
43
+ // Merge fixture CTEs ahead of any original MERGE WITH clause definitions.
44
+ const filteredFixtures = this.filterFixtureTablesForReferences(fixtureTables, referencedTables);
45
+ const fixtureCtes = this.buildFixtureCtes(filteredFixtures);
46
+ const combinedWithClause = this.mergeWithClause(nativeWithClause, fixtureCtes);
47
+ SelectQueryWithClauseHelper_1.SelectQueryWithClauseHelper.setWithClause(finalSelect, combinedWithClause);
48
+ return finalSelect;
49
+ }
50
+ static buildActionSelects(mergeQuery) {
51
+ const selects = [];
52
+ // Translate each WHEN clause into a row-producing SELECT when it represents an actual change.
53
+ for (const clause of mergeQuery.whenClauses) {
54
+ const selectQuery = this.buildSelectForClause(mergeQuery, clause);
55
+ if (selectQuery) {
56
+ selects.push(selectQuery);
57
+ }
58
+ }
59
+ return selects;
60
+ }
61
+ static buildSelectForClause(mergeQuery, clause) {
62
+ switch (clause.matchType) {
63
+ case 'matched':
64
+ return this.buildMatchedSelect(mergeQuery, clause);
65
+ case 'not_matched':
66
+ case 'not_matched_by_target':
67
+ return this.buildNotMatchedSelect(mergeQuery, clause);
68
+ case 'not_matched_by_source':
69
+ return this.buildNotMatchedBySourceSelect(mergeQuery, clause);
70
+ default:
71
+ return null;
72
+ }
73
+ }
74
+ static buildMatchedSelect(mergeQuery, clause) {
75
+ const action = clause.action;
76
+ if (action instanceof MergeQuery_1.MergeDoNothingAction) {
77
+ return null;
78
+ }
79
+ if (!(action instanceof MergeQuery_1.MergeUpdateAction) && !(action instanceof MergeQuery_1.MergeDeleteAction)) {
80
+ return null;
81
+ }
82
+ // Match target rows with their source counterparts via the MERGE ON predicate.
83
+ const joinClause = new Clause_1.JoinClause('inner join', mergeQuery.source, new Clause_1.JoinOnClause(mergeQuery.onCondition), false);
84
+ // Apply any additional WHEN/WHERE filters tied to this action.
85
+ const combinedPredicate = this.combineConditions([
86
+ clause.condition,
87
+ this.buildActionWhereClause(action)
88
+ ]);
89
+ const whereClause = combinedPredicate ? new Clause_1.WhereClause(combinedPredicate) : null;
90
+ return new SelectQuery_1.SimpleSelectQuery({
91
+ selectClause: this.buildLiteralSelectClause(),
92
+ fromClause: new Clause_1.FromClause(mergeQuery.target, [joinClause]),
93
+ whereClause
94
+ });
95
+ }
96
+ static buildNotMatchedSelect(mergeQuery, clause) {
97
+ if (!(clause.action instanceof MergeQuery_1.MergeInsertAction)) {
98
+ return null;
99
+ }
100
+ // Select source rows that lack any matching target record using NOT EXISTS semantics.
101
+ const notExistsExpression = this.buildNotExistsExpression(mergeQuery.target, mergeQuery.onCondition);
102
+ const combinedPredicate = this.combineConditions([notExistsExpression, clause.condition]);
103
+ const whereClause = combinedPredicate ? new Clause_1.WhereClause(combinedPredicate) : null;
104
+ return new SelectQuery_1.SimpleSelectQuery({
105
+ selectClause: this.buildLiteralSelectClause(),
106
+ fromClause: new Clause_1.FromClause(mergeQuery.source, null),
107
+ whereClause
108
+ });
109
+ }
110
+ static buildNotMatchedBySourceSelect(mergeQuery, clause) {
111
+ const action = clause.action;
112
+ if (!(action instanceof MergeQuery_1.MergeDeleteAction)) {
113
+ return null;
114
+ }
115
+ // Select target rows that are orphaned by the source to emulate delete actions.
116
+ const notExistsExpression = this.buildNotExistsExpression(mergeQuery.source, mergeQuery.onCondition);
117
+ const combinedPredicate = this.combineConditions([
118
+ notExistsExpression,
119
+ clause.condition,
120
+ this.buildActionWhereClause(action)
121
+ ]);
122
+ const whereClause = combinedPredicate ? new Clause_1.WhereClause(combinedPredicate) : null;
123
+ return new SelectQuery_1.SimpleSelectQuery({
124
+ selectClause: this.buildLiteralSelectClause(),
125
+ fromClause: new Clause_1.FromClause(mergeQuery.target, null),
126
+ whereClause
127
+ });
128
+ }
129
+ static buildNotExistsExpression(sourceReference, predicate) {
130
+ // Build an EXISTS subquery that can be negated to detect missing matches.
131
+ const existsSelect = new SelectQuery_1.SimpleSelectQuery({
132
+ selectClause: this.buildLiteralSelectClause(),
133
+ fromClause: new Clause_1.FromClause(sourceReference, null),
134
+ whereClause: new Clause_1.WhereClause(predicate)
135
+ });
136
+ const existsExpression = new ValueComponent_1.UnaryExpression('exists', new ValueComponent_1.InlineQuery(existsSelect));
137
+ return new ValueComponent_1.UnaryExpression('not', existsExpression);
138
+ }
139
+ static buildActionWhereClause(action) {
140
+ var _a, _b;
141
+ return (_b = (_a = action.whereClause) === null || _a === void 0 ? void 0 : _a.condition) !== null && _b !== void 0 ? _b : null;
142
+ }
143
+ // Combine additional predicates into a single AND expression for filtering.
144
+ static combineConditions(predicates) {
145
+ const values = predicates.filter((predicate) => Boolean(predicate));
146
+ if (values.length === 0) {
147
+ return null;
148
+ }
149
+ return values.reduce((acc, value) => {
150
+ if (!acc) {
151
+ return value;
152
+ }
153
+ return new ValueComponent_1.BinaryExpression(acc, 'and', value);
154
+ }, null);
155
+ }
156
+ // Combine all action queries via UNION ALL so the count can see every simulated row.
157
+ static combineSelects(selects) {
158
+ if (selects.length === 1) {
159
+ return selects[0];
160
+ }
161
+ let combined = new SelectQuery_1.BinarySelectQuery(selects[0], 'union all', selects[1]);
162
+ for (let i = 2; i < selects.length; i++) {
163
+ combined = combined.unionAll(selects[i]);
164
+ }
165
+ return combined;
166
+ }
167
+ // Build the simple SELECT clause that yields one row per matched action.
168
+ static buildLiteralSelectClause() {
169
+ return new Clause_1.SelectClause([new Clause_1.SelectItem(new ValueComponent_1.LiteralValue(1))]);
170
+ }
171
+ // Summarize the merged action stream by counting every row that survived the union.
172
+ static buildCountSelectClause() {
173
+ const countFunction = new ValueComponent_1.FunctionCall(null, 'count', new ValueComponent_1.RawString('*'), null);
174
+ const selectItem = new Clause_1.SelectItem(countFunction, 'count');
175
+ return new Clause_1.SelectClause([selectItem]);
176
+ }
177
+ static buildFixtureCtes(fixtures) {
178
+ if (!fixtures || fixtures.length === 0) {
179
+ return [];
180
+ }
181
+ return FixtureCteBuilder_1.FixtureCteBuilder.buildFixtures(fixtures);
182
+ }
183
+ static collectPhysicalTableReferences(query, withClause) {
184
+ const referencedTables = this.collectReferencedTables(query);
185
+ const ignoredTables = this.collectCteNamesFromWithClause(withClause);
186
+ const tablesToShadow = new Set();
187
+ // Retain only tables that are not defined via WITH clauses so fixtures shadow physical sources.
188
+ for (const table of referencedTables) {
189
+ if (ignoredTables.has(table)) {
190
+ continue;
191
+ }
192
+ tablesToShadow.add(table);
193
+ }
194
+ const cteReferencedTables = this.collectReferencedTablesFromWithClause(withClause);
195
+ for (const table of cteReferencedTables) {
196
+ if (ignoredTables.has(table)) {
197
+ continue;
198
+ }
199
+ tablesToShadow.add(table);
200
+ }
201
+ return tablesToShadow;
202
+ }
203
+ static filterFixtureTablesForReferences(fixtures, referencedTables) {
204
+ if (!fixtures.length || referencedTables.size === 0) {
205
+ return [];
206
+ }
207
+ const filtered = [];
208
+ // Keep fixtures only for tables that actually appear in the converted SELECT.
209
+ for (const fixture of fixtures) {
210
+ if (referencedTables.has(this.normalizeIdentifier(fixture.tableName))) {
211
+ filtered.push(fixture);
212
+ }
213
+ }
214
+ return filtered;
215
+ }
216
+ static collectReferencedTablesFromWithClause(withClause) {
217
+ const tables = new Set();
218
+ if (!(withClause === null || withClause === void 0 ? void 0 : withClause.tables)) {
219
+ return tables;
220
+ }
221
+ for (const cte of withClause.tables) {
222
+ for (const table of this.collectReferencedTables(cte.query)) {
223
+ tables.add(table);
224
+ }
225
+ }
226
+ return tables;
227
+ }
228
+ static extractTargetTableName(target) {
229
+ const datasource = target.datasource;
230
+ if (datasource instanceof Clause_1.TableSource) {
231
+ return datasource.getSourceName();
232
+ }
233
+ throw new Error('Merge target must be a table source for conversion.');
234
+ }
235
+ static buildFixtureTableMap(fixtures) {
236
+ const map = new Map();
237
+ for (const fixture of fixtures) {
238
+ map.set(this.normalizeIdentifier(fixture.tableName), fixture);
239
+ }
240
+ return map;
241
+ }
242
+ static ensureFixtureCoverage(referencedTables, fixtureMap, strategy) {
243
+ if (referencedTables.size === 0) {
244
+ return;
245
+ }
246
+ // Compare the referenced tables against the fixtures that were supplied.
247
+ const missingTables = this.getMissingFixtureTables(referencedTables, fixtureMap);
248
+ if (missingTables.length === 0) {
249
+ return;
250
+ }
251
+ if (strategy === 'error') {
252
+ throw new Error(`Merge SELECT refers to tables without fixture coverage: ${missingTables.join(', ')}.`);
253
+ }
254
+ }
255
+ // Use the collector to track every concrete table source referenced by the SELECT.
256
+ static collectReferencedTables(query) {
257
+ const collector = new TableSourceCollector_1.TableSourceCollector(false);
258
+ const sources = collector.collect(query);
259
+ const normalized = new Set();
260
+ for (const source of sources) {
261
+ normalized.add(this.normalizeIdentifier(source.getSourceName()));
262
+ }
263
+ return normalized;
264
+ }
265
+ // Track CTE aliases so those names are ignored when validating fixtures.
266
+ static collectCteNamesFromWithClause(withClause) {
267
+ const names = new Set();
268
+ if (!(withClause === null || withClause === void 0 ? void 0 : withClause.tables)) {
269
+ return names;
270
+ }
271
+ for (const table of withClause.tables) {
272
+ names.add(this.normalizeIdentifier(table.getSourceAliasName()));
273
+ }
274
+ return names;
275
+ }
276
+ // Return every referenced table that lacks an overriding fixture definition.
277
+ static getMissingFixtureTables(referencedTables, fixtureMap) {
278
+ const missing = [];
279
+ for (const table of referencedTables) {
280
+ if (!fixtureMap.has(table)) {
281
+ missing.push(table);
282
+ }
283
+ }
284
+ return missing;
285
+ }
286
+ // Prepend fixture CTEs ahead of the existing WITH clause so they shadow real tables.
287
+ static mergeWithClause(original, fixtureCtes) {
288
+ var _a;
289
+ if (!fixtureCtes.length && !original) {
290
+ return null;
291
+ }
292
+ const combinedTables = [...fixtureCtes];
293
+ if (original === null || original === void 0 ? void 0 : original.tables) {
294
+ combinedTables.push(...original.tables);
295
+ }
296
+ if (!combinedTables.length) {
297
+ return null;
298
+ }
299
+ const merged = new Clause_1.WithClause((_a = original === null || original === void 0 ? void 0 : original.recursive) !== null && _a !== void 0 ? _a : false, combinedTables);
300
+ merged.globalComments = (original === null || original === void 0 ? void 0 : original.globalComments) ? [...original.globalComments] : null;
301
+ merged.trailingComments = (original === null || original === void 0 ? void 0 : original.trailingComments) ? [...original.trailingComments] : null;
302
+ return merged;
303
+ }
304
+ static normalizeIdentifier(value) {
305
+ return value.trim().toLowerCase();
306
+ }
307
+ }
308
+ exports.MergeResultSelectConverter = MergeResultSelectConverter;
309
+ MergeResultSelectConverter.DEFAULT_MISSING_FIXTURE_STRATEGY = 'error';
310
+ //# sourceMappingURL=MergeResultSelectConverter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MergeResultSelectConverter.js","sourceRoot":"","sources":["../../src/transformers/MergeResultSelectConverter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+ /**
3
+ * Model-driven JSON mapping structure that mirrors TypeScript model definitions.
4
+ * This approach provides intuitive, hierarchical mapping that closely resembles the target data structure.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.convertModelDrivenMapping = convertModelDrivenMapping;
8
+ exports.validateModelDrivenMapping = validateModelDrivenMapping;
9
+ /**
10
+ * Convert a model-driven JSON mapping to the traditional JsonMapping format.
11
+ * This enables backward compatibility with existing PostgresJsonQueryBuilder.
12
+ */
13
+ function convertModelDrivenMapping(modelMapping) {
14
+ const protectedStringFields = [];
15
+ let entityIdCounter = 0;
16
+ const propertyNameCounters = {};
17
+ // Generate unique entity IDs
18
+ const generateEntityId = () => `entity_${++entityIdCounter}`;
19
+ // Generate unique property names to avoid JSON key conflicts
20
+ const generateUniquePropertyName = (baseName) => {
21
+ if (!propertyNameCounters[baseName]) {
22
+ propertyNameCounters[baseName] = 0;
23
+ }
24
+ propertyNameCounters[baseName]++;
25
+ return propertyNameCounters[baseName] === 1 ? baseName : `${baseName}_${propertyNameCounters[baseName]}`;
26
+ };
27
+ // Helper function to process structure fields and extract entities
28
+ const processStructure = (structure, parentId = null) => {
29
+ const columns = {};
30
+ const nestedEntities = [];
31
+ for (const [fieldName, config] of Object.entries(structure)) {
32
+ if (typeof config === 'string') {
33
+ // Simple field mapping: "fieldName": "column_name"
34
+ columns[fieldName] = config;
35
+ }
36
+ else if ('column' in config && typeof config.column === 'string' && !('type' in config && (config.type === 'object' || config.type === 'array'))) {
37
+ // Enhanced field mapping: "fieldName": { "column": "column_name", "type": "string" }
38
+ const fieldConfig = config;
39
+ if (typeof fieldConfig === 'object' && 'column' in fieldConfig) {
40
+ columns[fieldName] = fieldConfig.column;
41
+ if (fieldConfig.type === 'string') {
42
+ protectedStringFields.push(fieldConfig.column);
43
+ }
44
+ }
45
+ }
46
+ else if ('from' in config && typeof config.from === 'string' && !('type' in config && (config.type === 'object' || config.type === 'array'))) {
47
+ // Legacy field mapping: "fieldName": { "from": "column_name", "type": "string" }
48
+ const fieldConfig = config;
49
+ if (typeof fieldConfig === 'object' && 'from' in fieldConfig) {
50
+ columns[fieldName] = fieldConfig.from;
51
+ if (fieldConfig.type === 'string') {
52
+ protectedStringFields.push(fieldConfig.from);
53
+ }
54
+ }
55
+ }
56
+ else if ('type' in config && (config.type === 'object' || config.type === 'array')) {
57
+ // Nested structure: object or array
58
+ const nestedStructure = config;
59
+ const uniquePropertyName = generateUniquePropertyName(fieldName);
60
+ // Generate globally unique entity ID to ensure unique JSON column names
61
+ const entityId = generateEntityId();
62
+ const processedNested = processStructure(nestedStructure.structure, entityId);
63
+ nestedEntities.push({
64
+ id: entityId, // Use unique ID to avoid column conflicts
65
+ name: fieldName.charAt(0).toUpperCase() + fieldName.slice(1), // Capitalize first letter
66
+ parentId: parentId || 'root',
67
+ propertyName: uniquePropertyName,
68
+ originalPropertyName: fieldName, // Store original name for final mapping
69
+ relationshipType: nestedStructure.type,
70
+ columns: processedNested.columns
71
+ });
72
+ // Add nested entities from deeper levels
73
+ nestedEntities.push(...processedNested.nestedEntities.map(entity => ({
74
+ ...entity,
75
+ parentId: entity.parentId === 'root' ? entityId : entity.parentId
76
+ })));
77
+ }
78
+ }
79
+ return { columns, nestedEntities };
80
+ };
81
+ // Process the root structure
82
+ const processed = processStructure(modelMapping.structure); // Build the traditional JsonMapping
83
+ const jsonMapping = {
84
+ rootName: 'root', // Default root name
85
+ rootEntity: {
86
+ id: 'root',
87
+ name: 'Root',
88
+ columns: processed.columns
89
+ },
90
+ nestedEntities: processed.nestedEntities
91
+ };
92
+ // Add typeInfo for backward compatibility
93
+ jsonMapping.typeInfo = modelMapping.typeInfo;
94
+ return {
95
+ jsonMapping,
96
+ typeProtection: { protectedStringFields }
97
+ };
98
+ }
99
+ /**
100
+ * Validate that a model-driven mapping structure is well-formed.
101
+ */
102
+ function validateModelDrivenMapping(mapping) {
103
+ const errors = [];
104
+ // Validate typeInfo
105
+ if (!mapping.typeInfo) {
106
+ errors.push('typeInfo is required');
107
+ }
108
+ else {
109
+ if (!mapping.typeInfo.interface) {
110
+ errors.push('typeInfo.interface is required');
111
+ }
112
+ if (!mapping.typeInfo.importPath) {
113
+ errors.push('typeInfo.importPath is required');
114
+ }
115
+ }
116
+ // Validate structure
117
+ if (!mapping.structure || typeof mapping.structure !== 'object') {
118
+ errors.push('structure is required and must be an object');
119
+ }
120
+ return errors;
121
+ }
122
+ //# sourceMappingURL=ModelDrivenJsonMapping.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModelDrivenJsonMapping.js","sourceRoot":"","sources":["../../src/transformers/ModelDrivenJsonMapping.ts"],"names":[],"mappings":"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"}