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,674 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SelectableColumnCollector = exports.DuplicateDetectionMode = void 0;
4
+ /**
5
+ * Enum for duplicate detection modes in SelectableColumnCollector.
6
+ * Determines how duplicates are identified during column collection.
7
+ */
8
+ var DuplicateDetectionMode;
9
+ (function (DuplicateDetectionMode) {
10
+ /**
11
+ * Detect duplicates based only on column names.
12
+ * This mode ignores the table name, so columns with the same name
13
+ * from different tables are considered duplicates.
14
+ */
15
+ DuplicateDetectionMode["ColumnNameOnly"] = "columnNameOnly";
16
+ /**
17
+ * Detect duplicates based on both table and column names.
18
+ * This mode ensures that columns with the same name from different
19
+ * tables are treated as distinct.
20
+ */
21
+ DuplicateDetectionMode["FullName"] = "fullName";
22
+ })(DuplicateDetectionMode || (exports.DuplicateDetectionMode = DuplicateDetectionMode = {}));
23
+ const Clause_1 = require("../models/Clause");
24
+ const SelectQuery_1 = require("../models/SelectQuery");
25
+ const ValueComponent_1 = require("../models/ValueComponent");
26
+ const CTECollector_1 = require("./CTECollector");
27
+ const SelectValueCollector_1 = require("./SelectValueCollector");
28
+ /**
29
+ * A visitor that collects all ColumnReference instances from SQL query structures.
30
+ * This visitor scans through all clauses and collects all unique ColumnReference objects.
31
+ * It supports both regular column collection and upstream column collection for maximum
32
+ * search conditions in DynamicQuery scenarios.
33
+ *
34
+ * Supported query types:
35
+ * - SimpleSelectQuery: Basic SELECT queries with all standard clauses
36
+ * - BinarySelectQuery: UNION, INTERSECT, EXCEPT queries (collects from both sides)
37
+ * - Common Table Expressions (CTEs) within queries
38
+ * - Subqueries and nested queries
39
+ *
40
+ * Behavioral notes:
41
+ * - Collects column references to tables defined in the root FROM/JOIN clauses
42
+ * - For aliased columns (e.g., 'title as name'), collects both the original column
43
+ * reference ('title') AND the alias ('name') to enable complete dependency tracking
44
+ * - When upstream option is enabled, collects all available columns from upstream sources
45
+ * (CTEs, subqueries, and tables) for maximum search conditions in DynamicQuery
46
+ * - Automatically removes duplicates based on the specified duplicate detection mode
47
+ *
48
+ * Use cases:
49
+ * - Dependency analysis and schema migration tools
50
+ * - Column usage tracking across complex queries including unions and CTEs
51
+ * - Security analysis for column-level access control
52
+ * - DynamicQuery maximum search condition column discovery
53
+ *
54
+ * @example
55
+ * ```typescript
56
+ * // Basic usage - collect only referenced columns
57
+ * const collector = new SelectableColumnCollector();
58
+ * const columns = collector.collect(query);
59
+ *
60
+ * // With upstream collection for DynamicQuery
61
+ * const upstreamCollector = new SelectableColumnCollector(
62
+ * null, false, DuplicateDetectionMode.ColumnNameOnly,
63
+ * { upstream: true }
64
+ * );
65
+ * const allColumns = upstreamCollector.collect(query);
66
+ *
67
+ * // Works with union queries and CTEs
68
+ * const unionQuery = SelectQueryParser.parse(`
69
+ * SELECT name, email FROM users
70
+ * UNION
71
+ * SELECT name, email FROM customers
72
+ * `);
73
+ * const unionColumns = collector.collect(unionQuery);
74
+ * ```
75
+ * Related tests: packages/core/tests/transformers/SelectableColumnCollector.test.ts
76
+ */
77
+ class SelectableColumnCollector {
78
+ /**
79
+ * Creates a new instance of SelectableColumnCollector.
80
+ *
81
+ * @param {TableColumnResolver | null} [tableColumnResolver=null] - The resolver used to resolve column references to their respective tables.
82
+ * @param {boolean} [includeWildCard=false] - If true, wildcard columns (e.g., `*`) are included in the collection.
83
+ * @param {DuplicateDetectionMode} [duplicateDetection=DuplicateDetectionMode.ColumnNameOnly] - Specifies the duplicate detection mode: 'columnNameOnly' (default, only column name is used), or 'fullName' (table name + column name).
84
+ * @param {Object} [options={}] - Additional options for the collector.
85
+ * @param {boolean} [options.ignoreCaseAndUnderscore=false] - If true, column names are compared without considering case and underscores.
86
+ * @param {boolean} [options.upstream=false] - If true, collect all columns available from upstream sources for maximum search conditions in DynamicQuery.
87
+ */
88
+ constructor(tableColumnResolver, includeWildCard = false, duplicateDetection = DuplicateDetectionMode.ColumnNameOnly, options) {
89
+ this.selectValues = [];
90
+ this.visitedNodes = new Set();
91
+ this.uniqueKeys = new Set();
92
+ this.isRootVisit = true;
93
+ this.tableColumnResolver = null;
94
+ this.commonTables = [];
95
+ this.initializeProperties(tableColumnResolver, includeWildCard, duplicateDetection, options);
96
+ this.initializeHandlers();
97
+ }
98
+ /**
99
+ * Initialize instance properties.
100
+ */
101
+ initializeProperties(tableColumnResolver, includeWildCard, duplicateDetection, options) {
102
+ this.tableColumnResolver = tableColumnResolver !== null && tableColumnResolver !== void 0 ? tableColumnResolver : null;
103
+ this.includeWildCard = includeWildCard;
104
+ this.commonTableCollector = new CTECollector_1.CTECollector();
105
+ this.commonTables = [];
106
+ this.duplicateDetection = duplicateDetection;
107
+ this.options = options || {};
108
+ }
109
+ /**
110
+ * Initialize the handler map for different SQL component types.
111
+ */
112
+ initializeHandlers() {
113
+ this.handlers = new Map();
114
+ // Main entry point handlers
115
+ this.handlers.set(SelectQuery_1.SimpleSelectQuery.kind, (expr) => this.visitSimpleSelectQuery(expr));
116
+ this.handlers.set(SelectQuery_1.BinarySelectQuery.kind, (expr) => this.visitBinarySelectQuery(expr));
117
+ // Clause handlers
118
+ this.initializeClauseHandlers();
119
+ // Value component handlers
120
+ this.initializeValueComponentHandlers();
121
+ }
122
+ /**
123
+ * Initialize handlers for SQL clause types.
124
+ */
125
+ initializeClauseHandlers() {
126
+ this.handlers.set(Clause_1.SelectClause.kind, (expr) => this.visitSelectClause(expr));
127
+ this.handlers.set(Clause_1.FromClause.kind, (expr) => this.visitFromClause(expr));
128
+ this.handlers.set(Clause_1.WhereClause.kind, (expr) => this.visitWhereClause(expr));
129
+ this.handlers.set(Clause_1.GroupByClause.kind, (expr) => this.visitGroupByClause(expr));
130
+ this.handlers.set(Clause_1.HavingClause.kind, (expr) => this.visitHavingClause(expr));
131
+ this.handlers.set(Clause_1.OrderByClause.kind, (expr) => this.visitOrderByClause(expr));
132
+ this.handlers.set(Clause_1.WindowFrameClause.kind, (expr) => this.visitWindowFrameClause(expr));
133
+ this.handlers.set(Clause_1.LimitClause.kind, (expr) => this.visitLimitClause(expr));
134
+ this.handlers.set(Clause_1.OffsetClause.kind, (expr) => this.offsetClause(expr));
135
+ this.handlers.set(Clause_1.FetchClause.kind, (expr) => this.visitFetchClause(expr));
136
+ // JOIN condition handlers
137
+ this.handlers.set(Clause_1.JoinOnClause.kind, (expr) => this.visitJoinOnClause(expr));
138
+ this.handlers.set(Clause_1.JoinUsingClause.kind, (expr) => this.visitJoinUsingClause(expr));
139
+ }
140
+ /**
141
+ * Initialize handlers for value component types.
142
+ */
143
+ initializeValueComponentHandlers() {
144
+ this.handlers.set(ValueComponent_1.ColumnReference.kind, (expr) => this.visitColumnReference(expr));
145
+ this.handlers.set(ValueComponent_1.BinaryExpression.kind, (expr) => this.visitBinaryExpression(expr));
146
+ this.handlers.set(ValueComponent_1.UnaryExpression.kind, (expr) => this.visitUnaryExpression(expr));
147
+ this.handlers.set(ValueComponent_1.FunctionCall.kind, (expr) => this.visitFunctionCall(expr));
148
+ this.handlers.set(ValueComponent_1.InlineQuery.kind, (expr) => this.visitInlineQuery(expr));
149
+ this.handlers.set(ValueComponent_1.ParenExpression.kind, (expr) => this.visitParenExpression(expr));
150
+ this.handlers.set(ValueComponent_1.CaseExpression.kind, (expr) => this.visitCaseExpression(expr));
151
+ this.handlers.set(ValueComponent_1.CastExpression.kind, (expr) => this.visitCastExpression(expr));
152
+ this.handlers.set(ValueComponent_1.BetweenExpression.kind, (expr) => this.visitBetweenExpression(expr));
153
+ this.handlers.set(ValueComponent_1.ArrayExpression.kind, (expr) => this.visitArrayExpression(expr));
154
+ this.handlers.set(ValueComponent_1.ArrayQueryExpression.kind, (expr) => this.visitArrayQueryExpression(expr));
155
+ this.handlers.set(ValueComponent_1.ArraySliceExpression.kind, (expr) => this.visitArraySliceExpression(expr));
156
+ this.handlers.set(ValueComponent_1.ArrayIndexExpression.kind, (expr) => this.visitArrayIndexExpression(expr));
157
+ this.handlers.set(ValueComponent_1.ValueList.kind, (expr) => this.visitValueList(expr));
158
+ this.handlers.set(ValueComponent_1.WindowFrameExpression.kind, (expr) => this.visitWindowFrameExpression(expr));
159
+ this.handlers.set(Clause_1.PartitionByClause.kind, (expr) => this.visitPartitionByClause(expr));
160
+ }
161
+ getValues() {
162
+ return this.selectValues;
163
+ }
164
+ collect(arg) {
165
+ // Input validation
166
+ if (!arg) {
167
+ throw new Error("Input argument cannot be null or undefined");
168
+ }
169
+ // Visit the component and return the collected select items
170
+ this.visit(arg);
171
+ const items = this.getValues();
172
+ this.reset(); // Reset after collection
173
+ return items;
174
+ }
175
+ /**
176
+ * Reset the collection of ColumnReferences
177
+ */
178
+ reset() {
179
+ this.selectValues = [];
180
+ this.visitedNodes.clear();
181
+ this.uniqueKeys.clear();
182
+ this.commonTables = [];
183
+ }
184
+ /**
185
+ * Add a select value as unique, according to the duplicate detection option.
186
+ * Uses efficient Set-based duplicate detection for better performance.
187
+ */
188
+ addSelectValueAsUnique(name, value) {
189
+ const key = this.generateUniqueKey(name, value);
190
+ if (!this.uniqueKeys.has(key)) {
191
+ this.uniqueKeys.add(key);
192
+ this.selectValues.push({ name, value });
193
+ }
194
+ }
195
+ /**
196
+ * Generate a unique key based on the duplicate detection mode.
197
+ */
198
+ generateUniqueKey(name, value) {
199
+ if (this.duplicateDetection === DuplicateDetectionMode.ColumnNameOnly) {
200
+ // Apply case and underscore normalization if specified
201
+ return this.normalizeColumnName(name);
202
+ }
203
+ else {
204
+ // FullName mode: include table name
205
+ let tableName = '';
206
+ if (value && typeof value.getNamespace === 'function') {
207
+ tableName = value.getNamespace() || '';
208
+ }
209
+ const fullName = tableName ? tableName + '.' + name : name;
210
+ return this.normalizeColumnName(fullName);
211
+ }
212
+ }
213
+ /**
214
+ * Normalize column name based on options.
215
+ * Ensures safe string handling to prevent injection attacks.
216
+ */
217
+ normalizeColumnName(name) {
218
+ if (typeof name !== 'string') {
219
+ throw new Error("Column name must be a string");
220
+ }
221
+ if (this.options.ignoreCaseAndUnderscore) {
222
+ return name.toLowerCase().replace(/_/g, '');
223
+ }
224
+ return name;
225
+ }
226
+ /**
227
+ * Main entry point for the visitor pattern.
228
+ * Implements the shallow visit pattern to distinguish between root and recursive visits.
229
+ */
230
+ visit(arg) {
231
+ // If not a root visit, just visit the node and return
232
+ if (!this.isRootVisit) {
233
+ this.visitNode(arg);
234
+ return;
235
+ }
236
+ if (!(arg instanceof SelectQuery_1.SimpleSelectQuery || arg instanceof SelectQuery_1.BinarySelectQuery)) {
237
+ throw new Error("Root visit requires a SimpleSelectQuery or BinarySelectQuery.");
238
+ }
239
+ // If this is a root visit, we need to reset the state
240
+ this.reset();
241
+ this.isRootVisit = false;
242
+ this.commonTables = this.commonTableCollector.collect(arg);
243
+ try {
244
+ this.visitNode(arg);
245
+ }
246
+ finally {
247
+ // Regardless of success or failure, reset the root visit flag
248
+ this.isRootVisit = true;
249
+ }
250
+ }
251
+ /**
252
+ * Internal visit method used for all nodes.
253
+ * This separates the visit flag management from the actual node visitation logic.
254
+ */
255
+ visitNode(arg) {
256
+ // Skip if we've already visited this node to prevent infinite recursion
257
+ if (this.visitedNodes.has(arg)) {
258
+ return;
259
+ }
260
+ // Mark as visited
261
+ this.visitedNodes.add(arg);
262
+ try {
263
+ const handler = this.handlers.get(arg.getKind());
264
+ if (handler) {
265
+ handler(arg);
266
+ }
267
+ // For any other component types, we don't need to do anything
268
+ }
269
+ catch (error) {
270
+ // Re-throw with additional context
271
+ const errorMessage = error instanceof Error ? error.message : String(error);
272
+ throw new Error(`Error processing SQL component of type ${arg.getKind().toString()}: ${errorMessage}`);
273
+ }
274
+ }
275
+ /**
276
+ * Process a SimpleSelectQuery to collect ColumnReferences from all its clauses
277
+ */
278
+ visitSimpleSelectQuery(query) {
279
+ // Visit all clauses that might contain column references
280
+ if (query.selectClause) {
281
+ query.selectClause.accept(this);
282
+ }
283
+ if (query.fromClause) {
284
+ query.fromClause.accept(this);
285
+ }
286
+ if (query.whereClause) {
287
+ query.whereClause.accept(this);
288
+ }
289
+ if (query.groupByClause) {
290
+ query.groupByClause.accept(this);
291
+ }
292
+ if (query.havingClause) {
293
+ query.havingClause.accept(this);
294
+ }
295
+ if (query.windowClause) {
296
+ for (const win of query.windowClause.windows) {
297
+ win.accept(this);
298
+ }
299
+ }
300
+ if (query.orderByClause) {
301
+ query.orderByClause.accept(this);
302
+ }
303
+ if (query.limitClause) {
304
+ query.limitClause.accept(this);
305
+ }
306
+ if (query.offsetClause) {
307
+ query.offsetClause.accept(this);
308
+ }
309
+ if (query.fetchClause) {
310
+ query.fetchClause.accept(this);
311
+ }
312
+ if (query.forClause) {
313
+ query.forClause.accept(this);
314
+ }
315
+ // Explicitly NOT processing query.WithClause to avoid scanning CTEs
316
+ }
317
+ /**
318
+ * Process a BinarySelectQuery (UNION, INTERSECT, EXCEPT) to collect ColumnReferences from both sides
319
+ */
320
+ visitBinarySelectQuery(query) {
321
+ // Collect from the left side
322
+ if (query.left instanceof SelectQuery_1.SimpleSelectQuery) {
323
+ this.visitSimpleSelectQuery(query.left);
324
+ }
325
+ else if (query.left instanceof SelectQuery_1.BinarySelectQuery) {
326
+ this.visitBinarySelectQuery(query.left);
327
+ }
328
+ // Collect from the right side
329
+ if (query.right instanceof SelectQuery_1.SimpleSelectQuery) {
330
+ this.visitSimpleSelectQuery(query.right);
331
+ }
332
+ else if (query.right instanceof SelectQuery_1.BinarySelectQuery) {
333
+ this.visitBinarySelectQuery(query.right);
334
+ }
335
+ }
336
+ // Clause handlers
337
+ visitSelectClause(clause) {
338
+ for (const item of clause.items) {
339
+ if (item.identifier) {
340
+ // For aliased items, add the alias name
341
+ this.addSelectValueAsUnique(item.identifier.name, item.value);
342
+ }
343
+ else if (item.value instanceof ValueComponent_1.ColumnReference) {
344
+ // For non-aliased column references, preserve namespace information
345
+ // This ensures u.id and p.id are treated as separate columns in FullName mode
346
+ const columnName = item.value.column.name;
347
+ if (columnName !== "*") {
348
+ this.addSelectValueAsUnique(columnName, item.value);
349
+ }
350
+ else if (this.includeWildCard) {
351
+ this.addSelectValueAsUnique(columnName, item.value);
352
+ }
353
+ }
354
+ else {
355
+ // For other value types (functions, expressions, etc.), process normally
356
+ item.value.accept(this);
357
+ }
358
+ }
359
+ }
360
+ visitFromClause(clause) {
361
+ // import source values
362
+ const collector = new SelectValueCollector_1.SelectValueCollector(this.tableColumnResolver, this.commonTables);
363
+ const sourceValues = collector.collect(clause);
364
+ for (const item of sourceValues) {
365
+ // Add the select value as unique to avoid duplicates
366
+ this.addSelectValueAsUnique(item.name, item.value);
367
+ }
368
+ // If upstream option is enabled, collect all available columns from upstream sources
369
+ if (this.options.upstream) {
370
+ this.collectUpstreamColumns(clause);
371
+ }
372
+ if (clause.joins) {
373
+ for (const join of clause.joins) {
374
+ if (join.condition) {
375
+ join.condition.accept(this);
376
+ }
377
+ }
378
+ }
379
+ }
380
+ visitWhereClause(clause) {
381
+ if (clause.condition) {
382
+ clause.condition.accept(this);
383
+ }
384
+ }
385
+ visitGroupByClause(clause) {
386
+ if (clause.grouping) {
387
+ for (const item of clause.grouping) {
388
+ item.accept(this);
389
+ }
390
+ }
391
+ }
392
+ visitHavingClause(clause) {
393
+ if (clause.condition) {
394
+ clause.condition.accept(this);
395
+ }
396
+ }
397
+ visitOrderByClause(clause) {
398
+ if (clause.order) {
399
+ for (const item of clause.order) {
400
+ item.accept(this);
401
+ }
402
+ }
403
+ }
404
+ visitWindowFrameClause(clause) {
405
+ clause.expression.accept(this);
406
+ }
407
+ visitWindowFrameExpression(expr) {
408
+ if (expr.partition) {
409
+ expr.partition.accept(this);
410
+ }
411
+ if (expr.order) {
412
+ expr.order.accept(this);
413
+ }
414
+ if (expr.frameSpec) {
415
+ expr.frameSpec.accept(this);
416
+ }
417
+ }
418
+ visitLimitClause(clause) {
419
+ if (clause.value) {
420
+ clause.value.accept(this);
421
+ }
422
+ }
423
+ offsetClause(clause) {
424
+ if (clause.value) {
425
+ clause.value.accept(this);
426
+ }
427
+ }
428
+ visitFetchClause(clause) {
429
+ if (clause.expression) {
430
+ clause.expression.accept(this);
431
+ }
432
+ }
433
+ visitJoinOnClause(joinOnClause) {
434
+ // Visit the join condition
435
+ if (joinOnClause.condition) {
436
+ joinOnClause.condition.accept(this);
437
+ }
438
+ }
439
+ visitJoinUsingClause(joinUsingClause) {
440
+ // Visit the columns in the USING clause
441
+ if (joinUsingClause.condition) {
442
+ joinUsingClause.condition.accept(this);
443
+ }
444
+ }
445
+ // Value component handlers
446
+ visitColumnReference(columnRef) {
447
+ if (columnRef.column.name !== "*") {
448
+ this.addSelectValueAsUnique(columnRef.column.name, columnRef);
449
+ }
450
+ else if (!this.includeWildCard) {
451
+ return;
452
+ }
453
+ else {
454
+ this.addSelectValueAsUnique(columnRef.column.name, columnRef);
455
+ }
456
+ }
457
+ visitBinaryExpression(expr) {
458
+ // Visit both sides of the expression
459
+ if (expr.left) {
460
+ expr.left.accept(this);
461
+ }
462
+ if (expr.right) {
463
+ expr.right.accept(this);
464
+ }
465
+ }
466
+ visitUnaryExpression(expr) {
467
+ if (expr.expression) {
468
+ expr.expression.accept(this);
469
+ }
470
+ }
471
+ visitFunctionCall(func) {
472
+ // Visit function arguments - this handles both single arguments and ValueList arguments
473
+ if (func.argument) {
474
+ func.argument.accept(this);
475
+ }
476
+ // Visit OVER clause for window functions
477
+ if (func.over) {
478
+ func.over.accept(this);
479
+ }
480
+ // Visit WITHIN GROUP clause for ordered aggregate functions
481
+ if (func.withinGroup) {
482
+ func.withinGroup.accept(this);
483
+ }
484
+ // Visit internal ORDER BY clause (for array_agg, json_agg, etc.)
485
+ if (func.internalOrderBy) {
486
+ func.internalOrderBy.accept(this);
487
+ }
488
+ }
489
+ visitInlineQuery(inlineQuery) {
490
+ // Visit the nested SELECT query within the inline query expression
491
+ if (inlineQuery.selectQuery) {
492
+ this.visitNode(inlineQuery.selectQuery);
493
+ }
494
+ }
495
+ visitParenExpression(expr) {
496
+ if (expr.expression) {
497
+ expr.expression.accept(this);
498
+ }
499
+ }
500
+ visitCaseExpression(expr) {
501
+ if (expr.condition) {
502
+ expr.condition.accept(this);
503
+ }
504
+ if (expr.switchCase) {
505
+ expr.switchCase.accept(this);
506
+ }
507
+ }
508
+ visitCastExpression(expr) {
509
+ if (expr.input) {
510
+ expr.input.accept(this);
511
+ }
512
+ }
513
+ visitBetweenExpression(expr) {
514
+ if (expr.expression) {
515
+ expr.expression.accept(this);
516
+ }
517
+ if (expr.lower) {
518
+ expr.lower.accept(this);
519
+ }
520
+ if (expr.upper) {
521
+ expr.upper.accept(this);
522
+ }
523
+ }
524
+ visitArrayExpression(expr) {
525
+ if (expr.expression) {
526
+ expr.expression.accept(this);
527
+ }
528
+ }
529
+ visitArrayQueryExpression(expr) {
530
+ expr.query.accept(this);
531
+ }
532
+ visitArraySliceExpression(expr) {
533
+ // Visit the array and slice indices for column references
534
+ if (expr.array) {
535
+ expr.array.accept(this);
536
+ }
537
+ if (expr.startIndex) {
538
+ expr.startIndex.accept(this);
539
+ }
540
+ if (expr.endIndex) {
541
+ expr.endIndex.accept(this);
542
+ }
543
+ }
544
+ visitArrayIndexExpression(expr) {
545
+ // Visit the array and index for column references
546
+ if (expr.array) {
547
+ expr.array.accept(this);
548
+ }
549
+ if (expr.index) {
550
+ expr.index.accept(this);
551
+ }
552
+ }
553
+ visitValueList(expr) {
554
+ // Visit all values in the list to collect column references from function arguments
555
+ if (expr.values && Array.isArray(expr.values)) {
556
+ for (const value of expr.values) {
557
+ if (value) {
558
+ value.accept(this);
559
+ }
560
+ }
561
+ }
562
+ }
563
+ visitPartitionByClause(clause) {
564
+ clause.value.accept(this);
565
+ }
566
+ /**
567
+ * Collect all upstream columns available for DynamicQuery maximum search conditions.
568
+ * This includes columns from CTEs, subqueries, and tables that can be used for filtering.
569
+ */
570
+ collectUpstreamColumns(clause) {
571
+ // For upstream collection, collect columns from ALL available CTEs
572
+ // not just the ones directly referenced in the FROM clause
573
+ // This ensures complex multi-CTE queries have all available columns for filtering
574
+ this.collectAllAvailableCTEColumns();
575
+ // Collect columns from primary source
576
+ this.collectUpstreamColumnsFromSource(clause.source);
577
+ // Collect columns from JOIN sources
578
+ if (clause.joins) {
579
+ for (const join of clause.joins) {
580
+ this.collectUpstreamColumnsFromSource(join.source);
581
+ }
582
+ }
583
+ }
584
+ /**
585
+ * Collect upstream columns from a specific source (table, subquery, or CTE).
586
+ */
587
+ collectUpstreamColumnsFromSource(source) {
588
+ if (source.datasource instanceof Clause_1.TableSource) {
589
+ // Check if this is a CTE reference first
590
+ const cteTable = this.findCTEByName(source.datasource.table.name);
591
+ if (cteTable) {
592
+ this.collectUpstreamColumnsFromCTE(cteTable);
593
+ }
594
+ else {
595
+ // For regular table sources, use table column resolver if available
596
+ this.collectUpstreamColumnsFromTable(source.datasource);
597
+ }
598
+ }
599
+ else if (source.datasource instanceof Clause_1.SubQuerySource) {
600
+ // For subquery sources, collect columns from the subquery
601
+ this.collectUpstreamColumnsFromSubquery(source.datasource);
602
+ }
603
+ else if (source.datasource instanceof Clause_1.ParenSource) {
604
+ // For parenthesized sources, recursively collect
605
+ this.collectUpstreamColumnsFromSource(new Clause_1.SourceExpression(source.datasource.source, null));
606
+ }
607
+ }
608
+ /**
609
+ * Collect upstream columns from a table source using table column resolver.
610
+ */
611
+ collectUpstreamColumnsFromTable(tableSource) {
612
+ if (this.tableColumnResolver) {
613
+ const tableName = tableSource.table.name;
614
+ const columns = this.tableColumnResolver(tableName);
615
+ for (const columnName of columns) {
616
+ // Create a column reference for each available column
617
+ const columnRef = new ValueComponent_1.ColumnReference(tableSource.table.name, columnName);
618
+ this.addSelectValueAsUnique(columnName, columnRef);
619
+ }
620
+ }
621
+ }
622
+ /**
623
+ * Collect upstream columns from a subquery source.
624
+ */
625
+ collectUpstreamColumnsFromSubquery(subquerySource) {
626
+ if (subquerySource.query instanceof SelectQuery_1.SimpleSelectQuery) {
627
+ // Create a new collector for the subquery
628
+ const subqueryCollector = new SelectableColumnCollector(this.tableColumnResolver, this.includeWildCard, this.duplicateDetection, { ...this.options, upstream: true });
629
+ // Collect columns from the subquery
630
+ const subqueryColumns = subqueryCollector.collect(subquerySource.query);
631
+ // Add all columns from the subquery
632
+ for (const item of subqueryColumns) {
633
+ this.addSelectValueAsUnique(item.name, item.value);
634
+ }
635
+ }
636
+ }
637
+ /**
638
+ * Collect upstream columns from a CTE.
639
+ */
640
+ collectUpstreamColumnsFromCTE(cteTable) {
641
+ if (cteTable.query instanceof SelectQuery_1.SimpleSelectQuery) {
642
+ // Create a recursive SelectableColumnCollector to collect ALL column references from the CTE
643
+ // This includes columns from SELECT, FROM, WHERE, JOIN, and other clauses within the CTE
644
+ // NOTE: Set upstream to false to prevent infinite recursion through collectAllAvailableCTEColumns
645
+ const cteCollector = new SelectableColumnCollector(this.tableColumnResolver, this.includeWildCard, this.duplicateDetection, { ...this.options, upstream: false });
646
+ // Collect all columns from the CTE query (including WHERE clause columns)
647
+ const cteColumns = cteCollector.collect(cteTable.query);
648
+ // Add all columns from the CTE, excluding wildcards
649
+ for (const item of cteColumns) {
650
+ // Skip wildcard columns as they are not valid selectable column names
651
+ if (item.name !== '*') {
652
+ this.addSelectValueAsUnique(item.name, item.value);
653
+ }
654
+ }
655
+ }
656
+ }
657
+ /**
658
+ * Collect columns from ALL available CTEs for upstream functionality.
659
+ * This ensures that complex multi-CTE queries have all available columns for filtering.
660
+ */
661
+ collectAllAvailableCTEColumns() {
662
+ for (const cte of this.commonTables) {
663
+ this.collectUpstreamColumnsFromCTE(cte);
664
+ }
665
+ }
666
+ /**
667
+ * Find a CTE by name in the common tables.
668
+ */
669
+ findCTEByName(name) {
670
+ return this.commonTables.find(cte => cte.getSourceAliasName() === name) || null;
671
+ }
672
+ }
673
+ exports.SelectableColumnCollector = SelectableColumnCollector;
674
+ //# sourceMappingURL=SelectableColumnCollector.js.map