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,223 @@
1
+ "use strict";
2
+ /**
3
+ * Enhanced JSON mapping structure that extends the base JsonMapping interface
4
+ * with additional metadata and type safety features.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.convertColumnsToLegacy = convertColumnsToLegacy;
8
+ exports.convertToLegacyJsonMapping = convertToLegacyJsonMapping;
9
+ exports.toLegacyMapping = toLegacyMapping;
10
+ exports.extractTypeProtection = extractTypeProtection;
11
+ /**
12
+ * Converts enhanced column configurations to simple string mappings for legacy compatibility.
13
+ *
14
+ * This function transforms complex column configurations (with type info, nullable flags, etc.)
15
+ * into simple string mappings that can be used with PostgresJsonQueryBuilder.
16
+ *
17
+ * **Supported Input Formats:**
18
+ * - Simple strings: `"user_name"` → `"user_name"`
19
+ * - Column config: `{ column: "u.name", type: "string" }` → `"u.name"`
20
+ * - From config: `{ from: "user_name", nullable: true }` → `"user_name"`
21
+ *
22
+ * @param columns - Record of field names to column configurations
23
+ * @returns Record of field names to column source strings
24
+ *
25
+ * @example
26
+ * ```typescript
27
+ * const enhanced = {
28
+ * id: { column: "u.user_id", type: "number" },
29
+ * name: { from: "user_name", type: "string" },
30
+ * email: "email_address"
31
+ * };
32
+ *
33
+ * const legacy = convertColumnsToLegacy(enhanced);
34
+ * // Result: { id: "u.user_id", name: "user_name", email: "email_address" }
35
+ * ```
36
+ */
37
+ function convertColumnsToLegacy(columns) {
38
+ const result = {};
39
+ for (const [key, config] of Object.entries(columns)) {
40
+ if (typeof config === 'string') {
41
+ result[key] = config;
42
+ }
43
+ else if (config && typeof config === 'object') {
44
+ if ('column' in config) {
45
+ result[key] = config.column;
46
+ }
47
+ else if ('from' in config) {
48
+ result[key] = config.from;
49
+ }
50
+ else {
51
+ result[key] = key; // fallback
52
+ }
53
+ }
54
+ else {
55
+ result[key] = key; // fallback
56
+ }
57
+ }
58
+ return result;
59
+ }
60
+ /**
61
+ * Converts any unified JSON mapping format to legacy JsonMapping format.
62
+ *
63
+ * This universal converter handles Enhanced, Unified, and Legacy formats, providing
64
+ * a single interface for converting complex mapping configurations to the simple
65
+ * format expected by PostgresJsonQueryBuilder.
66
+ *
67
+ * **Supported Input Formats:**
68
+ * - **Enhanced**: With metadata, type protection, and advanced column configs
69
+ * - **Unified**: Standard format with rootName and rootEntity
70
+ * - **Legacy**: Already compatible format (returned as-is)
71
+ *
72
+ * **Features:**
73
+ * - Automatic format detection
74
+ * - Column configuration simplification
75
+ * - Nested entity handling
76
+ * - Type protection extraction
77
+ *
78
+ * @param input - JSON mapping in any supported format
79
+ * @returns Legacy JsonMapping compatible with PostgresJsonQueryBuilder
80
+ *
81
+ * @throws {Error} When input is null, undefined, or malformed
82
+ *
83
+ * @example
84
+ * ```typescript
85
+ * // Enhanced format input
86
+ * const enhanced = {
87
+ * rootName: "User",
88
+ * rootEntity: {
89
+ * columns: {
90
+ * id: { column: "u.user_id", type: "number" },
91
+ * name: { column: "u.user_name", type: "string" }
92
+ * }
93
+ * },
94
+ * metadata: { version: "2.0" }
95
+ * };
96
+ *
97
+ * const legacy = convertToLegacyJsonMapping(enhanced);
98
+ * // Result: Compatible with PostgresJsonQueryBuilder
99
+ * ```
100
+ *
101
+ * @see {@link convertColumnsToLegacy} For column-specific conversion
102
+ * @see {@link extractTypeProtection} For type safety features
103
+ */
104
+ function convertToLegacyJsonMapping(input) {
105
+ if (!input) {
106
+ throw new Error('Input mapping is required');
107
+ }
108
+ // If it's already in legacy format, return as-is
109
+ if (input.rootName && input.rootEntity &&
110
+ typeof input.rootEntity.columns === 'object' &&
111
+ !input.typeInfo && !input.typeProtection && !input.metadata) {
112
+ // Check if columns are already in string format
113
+ const allColumnsAreStrings = Object.values(input.rootEntity.columns).every(col => typeof col === 'string');
114
+ if (allColumnsAreStrings) {
115
+ return input;
116
+ }
117
+ }
118
+ // Enhanced format conversion
119
+ if (input.rootName && input.rootEntity) {
120
+ return {
121
+ rootName: input.rootName,
122
+ rootEntity: {
123
+ id: input.rootEntity.id || 'root',
124
+ name: input.rootEntity.name || input.rootName,
125
+ columns: convertColumnsToLegacy(input.rootEntity.columns || {})
126
+ },
127
+ nestedEntities: (input.nestedEntities || []).map((entity) => ({
128
+ id: entity.id,
129
+ name: entity.name,
130
+ parentId: entity.parentId,
131
+ propertyName: entity.propertyName,
132
+ relationshipType: entity.relationshipType,
133
+ columns: convertColumnsToLegacy(entity.columns || {})
134
+ })),
135
+ resultFormat: input.resultFormat,
136
+ emptyResult: input.emptyResult
137
+ };
138
+ }
139
+ throw new Error('Unsupported mapping format');
140
+ }
141
+ /**
142
+ * Converts enhanced mapping to legacy format for backward compatibility.
143
+ */
144
+ function toLegacyMapping(enhanced) {
145
+ return {
146
+ rootName: enhanced.rootName,
147
+ rootEntity: {
148
+ id: enhanced.rootEntity.id,
149
+ name: enhanced.rootEntity.name,
150
+ columns: convertColumnsToLegacy(enhanced.rootEntity.columns)
151
+ },
152
+ nestedEntities: enhanced.nestedEntities.map(entity => ({
153
+ id: entity.id,
154
+ name: entity.name,
155
+ parentId: entity.parentId,
156
+ propertyName: entity.propertyName,
157
+ relationshipType: entity.relationshipType,
158
+ columns: convertColumnsToLegacy(entity.columns)
159
+ })),
160
+ resultFormat: enhanced.resultFormat,
161
+ emptyResult: enhanced.emptyResult
162
+ };
163
+ }
164
+ /**
165
+ * Extracts type protection configuration from enhanced mapping.
166
+ */
167
+ function extractTypeProtection(enhanced) {
168
+ const protectedStringFields = [];
169
+ const dateFields = [];
170
+ const numberFields = [];
171
+ // Use existing type protection if available
172
+ if (enhanced.typeProtection) {
173
+ return {
174
+ protectedStringFields: enhanced.typeProtection.protectedStringFields || [],
175
+ dateFields: enhanced.typeProtection.dateFields,
176
+ numberFields: enhanced.typeProtection.numberFields,
177
+ customTransforms: enhanced.typeProtection.customTransforms
178
+ };
179
+ }
180
+ // Process root entity
181
+ for (const [key, config] of Object.entries(enhanced.rootEntity.columns)) {
182
+ if (typeof config === 'object' && config.type) {
183
+ const columnName = config.column;
184
+ switch (config.type) {
185
+ case 'string':
186
+ protectedStringFields.push(columnName);
187
+ break;
188
+ case 'date':
189
+ dateFields.push(columnName);
190
+ break;
191
+ case 'number':
192
+ numberFields.push(columnName);
193
+ break;
194
+ }
195
+ }
196
+ }
197
+ // Process nested entities
198
+ for (const entity of enhanced.nestedEntities) {
199
+ for (const [key, config] of Object.entries(entity.columns)) {
200
+ if (typeof config === 'object' && config.type) {
201
+ const columnName = config.column;
202
+ switch (config.type) {
203
+ case 'string':
204
+ protectedStringFields.push(columnName);
205
+ break;
206
+ case 'date':
207
+ dateFields.push(columnName);
208
+ break;
209
+ case 'number':
210
+ numberFields.push(columnName);
211
+ break;
212
+ }
213
+ }
214
+ }
215
+ }
216
+ return {
217
+ protectedStringFields,
218
+ dateFields: dateFields.length > 0 ? dateFields : undefined,
219
+ numberFields: numberFields.length > 0 ? numberFields : undefined,
220
+ customTransforms: undefined
221
+ };
222
+ }
223
+ //# sourceMappingURL=EnhancedJsonMapping.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EnhancedJsonMapping.js","sourceRoot":"","sources":["../../src/transformers/EnhancedJsonMapping.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,259 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FilterableItemCollector = exports.FilterableItem = void 0;
4
+ const SimpleSelectQuery_1 = require("../models/SimpleSelectQuery");
5
+ const SchemaCollector_1 = require("./SchemaCollector");
6
+ const ParameterDetector_1 = require("../utils/ParameterDetector");
7
+ const SelectableColumnCollector_1 = require("./SelectableColumnCollector");
8
+ /**
9
+ * Represents a filterable item that can be used in DynamicQueryBuilder
10
+ * Can be either a table column or a SQL parameter
11
+ */
12
+ class FilterableItem {
13
+ constructor(name, type, tableName) {
14
+ this.name = name;
15
+ this.type = type;
16
+ this.tableName = tableName;
17
+ }
18
+ }
19
+ exports.FilterableItem = FilterableItem;
20
+ /**
21
+ * Collects filterable items (columns and parameters) from SQL queries
22
+ * for use in DynamicQueryBuilder filtering functionality.
23
+ *
24
+ * This class combines:
25
+ * - Table columns (from SelectableColumnCollector with FullName duplicate detection)
26
+ * - SQL parameters (from ParameterDetector)
27
+ *
28
+ * Features:
29
+ * - FullName mode preserves columns with same names from different tables (u.id vs p.id)
30
+ * - Upstream collection (default) provides comprehensive column discovery for maximum filtering
31
+ * - Qualified mode option for table.column naming in complex JOINs
32
+ *
33
+ * This allows DynamicQueryBuilder to filter on both actual table columns
34
+ * and fixed parameters defined in the SQL with full JOIN table support.
35
+ */
36
+ class FilterableItemCollector {
37
+ /**
38
+ * Creates a new FilterableItemCollector
39
+ * @param tableColumnResolver Optional resolver for wildcard column expansion
40
+ * @param options Optional configuration options
41
+ * - qualified: If true, return table.column names; if false, return column names only
42
+ * - upstream: If true (default), collect all available columns from upstream sources for maximum filtering capability
43
+ */
44
+ constructor(tableColumnResolver, options) {
45
+ this.tableColumnResolver = tableColumnResolver;
46
+ this.options = { qualified: false, upstream: true, ...options };
47
+ }
48
+ /**
49
+ * Collects all filterable items (columns and parameters) from a SQL query
50
+ * @param query The parsed SQL query to analyze
51
+ * @returns Array of FilterableItem objects representing columns and parameters
52
+ */
53
+ collect(query) {
54
+ const items = [];
55
+ // 1. Collect table columns using SchemaCollector
56
+ const columnItems = this.collectColumns(query);
57
+ items.push(...columnItems);
58
+ // 2. Collect SQL parameters using ParameterDetector
59
+ const parameterItems = this.collectParameters(query);
60
+ items.push(...parameterItems);
61
+ // 3. Remove duplicates (same name and type)
62
+ return this.removeDuplicates(items);
63
+ }
64
+ /**
65
+ * Collects table columns using both SelectableColumnCollector and SchemaCollector
66
+ */
67
+ collectColumns(query) {
68
+ const items = [];
69
+ // First, collect columns using SelectableColumnCollector (includes WHERE clause columns)
70
+ try {
71
+ const columnCollector = new SelectableColumnCollector_1.SelectableColumnCollector(this.tableColumnResolver, false, // includeUsingColumns
72
+ SelectableColumnCollector_1.DuplicateDetectionMode.FullName, // Use full names to preserve duplicates
73
+ { upstream: this.options.upstream } // Enable upstream collection based on options
74
+ );
75
+ const columns = columnCollector.collect(query);
76
+ // Convert column information to FilterableItem objects
77
+ for (const column of columns) {
78
+ let tableName = undefined;
79
+ let realTableName = undefined;
80
+ // Primary: Extract table name from column reference namespace using getNamespace()
81
+ if (column.value && typeof column.value.getNamespace === 'function') {
82
+ const namespace = column.value.getNamespace();
83
+ if (namespace && namespace.trim() !== '') {
84
+ tableName = namespace;
85
+ // Get real table name if using qualified mode
86
+ if (this.options.qualified) {
87
+ realTableName = this.getRealTableName(query, namespace);
88
+ }
89
+ }
90
+ }
91
+ // Fallback: Try to infer from query structure for simple queries
92
+ if (!tableName) {
93
+ tableName = this.inferTableNameFromQuery(query);
94
+ if (tableName && this.options.qualified) {
95
+ realTableName = tableName; // For simple queries, table name is already real
96
+ }
97
+ }
98
+ // Generate column name based on qualified option
99
+ let columnName = column.name;
100
+ if (this.options.qualified && (realTableName || tableName)) {
101
+ const nameToUse = realTableName || tableName;
102
+ columnName = `${nameToUse}.${column.name}`;
103
+ }
104
+ items.push(new FilterableItem(columnName, 'column', tableName));
105
+ }
106
+ }
107
+ catch (error) {
108
+ // If SelectableColumnCollector fails, fall back to SchemaCollector only
109
+ console.warn('Failed to collect columns with SelectableColumnCollector, using fallback:', error);
110
+ try {
111
+ const schemaCollector = new SchemaCollector_1.SchemaCollector(this.tableColumnResolver, true);
112
+ const schemas = schemaCollector.collect(query);
113
+ for (const schema of schemas) {
114
+ for (const columnName of schema.columns) {
115
+ // Generate column name based on qualified option
116
+ let finalColumnName = columnName;
117
+ if (this.options.qualified) {
118
+ // For SchemaCollector, schema.name should already be the real table name
119
+ finalColumnName = `${schema.name}.${columnName}`;
120
+ }
121
+ items.push(new FilterableItem(finalColumnName, 'column', schema.name));
122
+ }
123
+ }
124
+ }
125
+ catch (fallbackError) {
126
+ console.warn('Failed to collect columns with both approaches:', error, fallbackError);
127
+ }
128
+ }
129
+ return items;
130
+ }
131
+ /**
132
+ * Attempts to infer table name from query structure for simple cases
133
+ */
134
+ inferTableNameFromQuery(query) {
135
+ // For simple queries with single table, try to extract table name
136
+ if (query instanceof SimpleSelectQuery_1.SimpleSelectQuery && query.fromClause && query.fromClause.source) {
137
+ const datasource = query.fromClause.source.datasource;
138
+ if (datasource && typeof datasource.table === 'object') {
139
+ const table = datasource.table;
140
+ if (table && typeof table.name === 'string') {
141
+ return table.name;
142
+ }
143
+ }
144
+ }
145
+ return undefined;
146
+ }
147
+ /**
148
+ * Attempts to resolve real table name from alias/namespace
149
+ */
150
+ getRealTableName(query, aliasOrName) {
151
+ var _a, _b;
152
+ try {
153
+ // Handle CTEs by converting to simple query first
154
+ const simpleQuery = query.type === 'WITH' ? query.toSimpleQuery() : query;
155
+ if (simpleQuery instanceof SimpleSelectQuery_1.SimpleSelectQuery && simpleQuery.fromClause) {
156
+ // Check main datasource
157
+ if ((_a = simpleQuery.fromClause.source) === null || _a === void 0 ? void 0 : _a.datasource) {
158
+ const mainSource = simpleQuery.fromClause.source;
159
+ const realName = this.extractRealTableName(mainSource, aliasOrName);
160
+ if (realName)
161
+ return realName;
162
+ }
163
+ // Check JOIN clauses
164
+ const fromClause = simpleQuery.fromClause;
165
+ if (fromClause.joinClauses && Array.isArray(fromClause.joinClauses)) {
166
+ for (const joinClause of fromClause.joinClauses) {
167
+ if ((_b = joinClause.source) === null || _b === void 0 ? void 0 : _b.datasource) {
168
+ const realName = this.extractRealTableName(joinClause.source, aliasOrName);
169
+ if (realName)
170
+ return realName;
171
+ }
172
+ }
173
+ }
174
+ }
175
+ }
176
+ catch (error) {
177
+ console.warn('Error resolving real table name:', error);
178
+ }
179
+ // If we can't resolve, return the original name
180
+ return aliasOrName;
181
+ }
182
+ /**
183
+ * Extracts real table name from a datasource
184
+ */
185
+ extractRealTableName(source, aliasOrName) {
186
+ var _a, _b, _c;
187
+ try {
188
+ const datasource = source.datasource;
189
+ if (!datasource)
190
+ return undefined;
191
+ // Get alias from multiple possible locations
192
+ const alias = source.alias || ((_b = (_a = source.aliasExpression) === null || _a === void 0 ? void 0 : _a.table) === null || _b === void 0 ? void 0 : _b.name);
193
+ const realTableName = (_c = datasource.table) === null || _c === void 0 ? void 0 : _c.name;
194
+ if (alias === aliasOrName && realTableName) {
195
+ return realTableName;
196
+ }
197
+ // If no alias but names match, it's a direct table reference
198
+ if (!alias && realTableName === aliasOrName) {
199
+ return realTableName;
200
+ }
201
+ }
202
+ catch (error) {
203
+ // Ignore errors in extraction
204
+ }
205
+ return undefined;
206
+ }
207
+ /**
208
+ * Collects SQL parameters from the query using ParameterDetector
209
+ */
210
+ collectParameters(query) {
211
+ const items = [];
212
+ try {
213
+ // Use existing ParameterDetector to extract parameter names from AST
214
+ const parameterNames = ParameterDetector_1.ParameterDetector.extractParameterNames(query);
215
+ // Convert parameter names to FilterableItem objects
216
+ for (const paramName of parameterNames) {
217
+ items.push(new FilterableItem(paramName, 'parameter'));
218
+ }
219
+ }
220
+ catch (error) {
221
+ // If parameter extraction fails, continue with empty parameter list
222
+ console.warn('Failed to collect parameters:', error);
223
+ }
224
+ return items;
225
+ }
226
+ /**
227
+ * Removes duplicate items with the same name, type, and table name
228
+ * This preserves columns with the same name from different tables
229
+ */
230
+ removeDuplicates(items) {
231
+ const seen = new Set();
232
+ const result = [];
233
+ for (const item of items) {
234
+ // Include table name in the key to preserve columns from different tables
235
+ const key = `${item.type}:${item.name}:${item.tableName || 'none'}`;
236
+ if (!seen.has(key)) {
237
+ seen.add(key);
238
+ result.push(item);
239
+ }
240
+ }
241
+ return result.sort((a, b) => {
242
+ // Sort by type first (columns before parameters), then by table name, then by name
243
+ if (a.type !== b.type) {
244
+ return a.type === 'column' ? -1 : 1;
245
+ }
246
+ // For columns, sort by table name first, then column name
247
+ if (a.type === 'column') {
248
+ const tableA = a.tableName || '';
249
+ const tableB = b.tableName || '';
250
+ if (tableA !== tableB) {
251
+ return tableA.localeCompare(tableB);
252
+ }
253
+ }
254
+ return a.name.localeCompare(b.name);
255
+ });
256
+ }
257
+ }
258
+ exports.FilterableItemCollector = FilterableItemCollector;
259
+ //# sourceMappingURL=FilterableItemCollector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterableItemCollector.js","sourceRoot":"","sources":["../../src/transformers/FilterableItemCollector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,151 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FixtureCteBuilder = void 0;
4
+ const Clause_1 = require("../models/Clause");
5
+ const SelectQuery_1 = require("../models/SelectQuery");
6
+ const ValueComponent_1 = require("../models/ValueComponent");
7
+ const DDLToFixtureConverter_1 = require("./DDLToFixtureConverter");
8
+ class FixtureCteBuilder {
9
+ /**
10
+ * Creates fixture definitions from a SQL string containing DDL (CREATE TABLE) and INSERT statements.
11
+ *
12
+ * @param sql The SQL string containing DDL and INSERTs.
13
+ * @returns An array of FixtureTableDefinition objects.
14
+ */
15
+ static fromSQL(sql) {
16
+ const fixtureJson = DDLToFixtureConverter_1.DDLToFixtureConverter.convert(sql);
17
+ return this.fromJSON(fixtureJson);
18
+ }
19
+ /**
20
+ * Converts JSON fixture definitions to FixtureTableDefinition format.
21
+ * Accepts an object where keys are table names and values contain columns and rows.
22
+ *
23
+ * @param jsonDefinitions Object with table definitions
24
+ * @returns Array of FixtureTableDefinition
25
+ *
26
+ * @example
27
+ * ```typescript
28
+ * const json = {
29
+ * users: {
30
+ * columns: [
31
+ * { name: 'id', type: 'integer' },
32
+ * { name: 'name', type: 'text' }
33
+ * ],
34
+ * rows: [
35
+ * { id: 1, name: 'Alice' },
36
+ * { id: 2, name: 'Bob' }
37
+ * ]
38
+ * }
39
+ * };
40
+ * const fixtures = FixtureCteBuilder.fromJSON(json);
41
+ * ```
42
+ */
43
+ static fromJSON(jsonDefinitions) {
44
+ const fixtures = [];
45
+ for (const [tableName, def] of Object.entries(jsonDefinitions)) {
46
+ if (def && Array.isArray(def.columns)) {
47
+ const columns = def.columns.map(c => ({
48
+ name: c.name,
49
+ typeName: c.type,
50
+ defaultValue: c.default
51
+ }));
52
+ let rows = [];
53
+ if (Array.isArray(def.rows)) {
54
+ // Convert array of objects to array of arrays based on column order
55
+ rows = def.rows.map(rowObj => {
56
+ return columns.map(col => {
57
+ return rowObj[col.name] !== undefined ? rowObj[col.name] : null;
58
+ });
59
+ });
60
+ }
61
+ fixtures.push({
62
+ tableName,
63
+ columns,
64
+ rows
65
+ });
66
+ }
67
+ }
68
+ return fixtures;
69
+ }
70
+ /** Builds CommonTable representations for the provided fixtures. */
71
+ static buildFixtures(fixtures) {
72
+ return fixtures.map((fixture) => this.buildFixture(fixture));
73
+ }
74
+ static buildFixture(fixture) {
75
+ const query = this.buildSelectQuery(fixture);
76
+ // Wrap the query into a CommonTable for later WITH clause injection.
77
+ return new Clause_1.CommonTable(query, fixture.tableName, null);
78
+ }
79
+ static buildSelectQuery(fixture) {
80
+ const columnCount = fixture.columns.length;
81
+ // Always produce at least one row even when the fixture carries zero entries.
82
+ const rows = fixture.rows.length > 0 ? fixture.rows : [new Array(columnCount).fill(null)];
83
+ const selectQueries = rows.map((row) => this.buildSelectRow(fixture.columns, row));
84
+ if (selectQueries.length === 0) {
85
+ throw new Error('No rows to build SELECT query');
86
+ }
87
+ let result = selectQueries[0];
88
+ // Build UNION ALL chain for multiple rows
89
+ for (let i = 1; i < selectQueries.length; i++) {
90
+ // Both SimpleSelectQuery and BinarySelectQuery have toUnionAll/unionAll methods
91
+ if (result instanceof SelectQuery_1.SimpleSelectQuery) {
92
+ result = result.toUnionAll(selectQueries[i]);
93
+ }
94
+ else {
95
+ // BinarySelectQuery has unionAll method
96
+ result = result.unionAll(selectQueries[i]);
97
+ }
98
+ }
99
+ // Handle empty fixture case: add WHERE 1 = 0 to make it return no rows
100
+ if (fixture.rows.length === 0 && result instanceof SelectQuery_1.SimpleSelectQuery) {
101
+ const falseCondition = new ValueComponent_1.BinaryExpression(new ValueComponent_1.LiteralValue(1), '=', new ValueComponent_1.LiteralValue(0));
102
+ result.whereClause = new Clause_1.WhereClause(falseCondition);
103
+ }
104
+ return result;
105
+ }
106
+ static buildSelectRow(columns, row) {
107
+ // Build select items that respect optional type annotations.
108
+ const items = columns.map((column, index) => {
109
+ const value = index < row.length ? row[index] : null;
110
+ const literalValue = this.createLiteralValue(value);
111
+ let expression = literalValue;
112
+ if (column.typeName) {
113
+ const typeValue = new ValueComponent_1.TypeValue(null, new ValueComponent_1.RawString(column.typeName));
114
+ expression = new ValueComponent_1.CastExpression(literalValue, typeValue);
115
+ }
116
+ return new Clause_1.SelectItem(expression, column.name);
117
+ });
118
+ const selectClause = new Clause_1.SelectClause(items);
119
+ return new SelectQuery_1.SimpleSelectQuery({ selectClause });
120
+ }
121
+ static createLiteralValue(value) {
122
+ if (value === null || value === undefined) {
123
+ return new ValueComponent_1.LiteralValue(null);
124
+ }
125
+ if (typeof value === 'number') {
126
+ return new ValueComponent_1.LiteralValue(Number.isFinite(value) ? value : null);
127
+ }
128
+ if (typeof value === 'boolean') {
129
+ // Preserve boolean literals so the printer emits TRUE/FALSE instead of quoted strings
130
+ return new ValueComponent_1.LiteralValue(value);
131
+ }
132
+ if (typeof value === 'bigint') {
133
+ // Convert bigint to string to preserve precision
134
+ // LiteralValue accepts string|number|boolean|null, and when isStringLiteral is false,
135
+ // the printer will output it as-is without quotes
136
+ return new ValueComponent_1.LiteralValue(value.toString());
137
+ }
138
+ if (typeof Buffer !== 'undefined' && value instanceof Buffer) {
139
+ // For Buffer, we'll create a hex string literal
140
+ return new ValueComponent_1.LiteralValue(`X'${value.toString('hex')}'`);
141
+ }
142
+ if (typeof value === 'string') {
143
+ // Store the raw string value WITHOUT quotes or escaping
144
+ // The SqlPrinter will handle escaping when printing
145
+ return new ValueComponent_1.LiteralValue(value, undefined, true);
146
+ }
147
+ return new ValueComponent_1.LiteralValue(String(value), undefined, true);
148
+ }
149
+ }
150
+ exports.FixtureCteBuilder = FixtureCteBuilder;
151
+ //# sourceMappingURL=FixtureCteBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FixtureCteBuilder.js","sourceRoot":"","sources":["../../src/transformers/FixtureCteBuilder.ts"],"names":[],"mappings":"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"}