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,564 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SelectQueryParser = void 0;
4
+ const SelectQuery_1 = require("../models/SelectQuery");
5
+ const SelectClauseParser_1 = require("./SelectClauseParser");
6
+ const FromClauseParser_1 = require("./FromClauseParser");
7
+ const WhereClauseParser_1 = require("./WhereClauseParser");
8
+ const GroupByParser_1 = require("./GroupByParser");
9
+ const HavingParser_1 = require("./HavingParser");
10
+ const OrderByClauseParser_1 = require("./OrderByClauseParser");
11
+ const WindowClauseParser_1 = require("./WindowClauseParser");
12
+ const LimitClauseParser_1 = require("./LimitClauseParser");
13
+ const ForClauseParser_1 = require("./ForClauseParser");
14
+ const SqlTokenizer_1 = require("./SqlTokenizer");
15
+ const WithClauseParser_1 = require("./WithClauseParser");
16
+ const ValuesQueryParser_1 = require("./ValuesQueryParser");
17
+ const FetchClauseParser_1 = require("./FetchClauseParser");
18
+ const OffsetClauseParser_1 = require("./OffsetClauseParser");
19
+ const CTERegionDetector_1 = require("../utils/CTERegionDetector");
20
+ /**
21
+ * Legacy SELECT-only parser.
22
+ * Prefer using SqlParser as the canonical entry point for multi-statement or mixed-statement workflows.
23
+ */
24
+ class SelectQueryParser {
25
+ // Parse SQL string to AST (was: parse)
26
+ static parse(query) {
27
+ const tokenizer = new SqlTokenizer_1.SqlTokenizer(query);
28
+ const lexemes = tokenizer.readLexmes();
29
+ // Parse
30
+ const result = this.parseFromLexeme(lexemes, 0);
31
+ // Error if there are remaining tokens
32
+ if (result.newIndex < lexemes.length) {
33
+ throw new Error(`[SelectQueryParser] Syntax error: Unexpected token "${lexemes[result.newIndex].value}" at position ${result.newIndex}. The SELECT query is complete but there are additional tokens.`);
34
+ }
35
+ return result.value;
36
+ }
37
+ /**
38
+ * Analyzes SQL string for parsing without throwing errors.
39
+ * Returns a result object containing the parsed query on success,
40
+ * or error information if parsing fails.
41
+ *
42
+ * @param query SQL string to analyze
43
+ * @returns Analysis result containing query, error information, and success status
44
+ */
45
+ /**
46
+ * Calculate character position from token index by finding token in original query
47
+ */
48
+ static calculateCharacterPosition(query, lexemes, tokenIndex) {
49
+ var _a;
50
+ if (tokenIndex >= lexemes.length) {
51
+ return query.length;
52
+ }
53
+ // If lexeme has position information, use it
54
+ const lexeme = lexemes[tokenIndex];
55
+ if (((_a = lexeme.position) === null || _a === void 0 ? void 0 : _a.startPosition) !== undefined) {
56
+ return lexeme.position.startPosition;
57
+ }
58
+ // Fallback: search for token in original query
59
+ // Build search pattern from tokens up to the target
60
+ let searchStart = 0;
61
+ for (let i = 0; i < tokenIndex; i++) {
62
+ const tokenValue = lexemes[i].value;
63
+ const tokenPos = query.indexOf(tokenValue, searchStart);
64
+ if (tokenPos !== -1) {
65
+ searchStart = tokenPos + tokenValue.length;
66
+ }
67
+ }
68
+ const targetToken = lexemes[tokenIndex].value;
69
+ const tokenPos = query.indexOf(targetToken, searchStart);
70
+ return tokenPos !== -1 ? tokenPos : searchStart;
71
+ }
72
+ static analyze(query) {
73
+ let lexemes = [];
74
+ try {
75
+ const tokenizer = new SqlTokenizer_1.SqlTokenizer(query);
76
+ lexemes = tokenizer.readLexmes();
77
+ // Parse
78
+ const result = this.parseFromLexeme(lexemes, 0);
79
+ // Check for remaining tokens
80
+ if (result.newIndex < lexemes.length) {
81
+ const remainingTokens = lexemes.slice(result.newIndex).map(lex => lex.value);
82
+ const errorLexeme = lexemes[result.newIndex];
83
+ const errorPosition = this.calculateCharacterPosition(query, lexemes, result.newIndex);
84
+ return {
85
+ success: false,
86
+ query: result.value,
87
+ error: `Syntax error: Unexpected token "${errorLexeme.value}" at character position ${errorPosition}. The SELECT query is complete but there are additional tokens.`,
88
+ errorPosition: errorPosition,
89
+ remainingTokens: remainingTokens
90
+ };
91
+ }
92
+ return {
93
+ success: true,
94
+ query: result.value
95
+ };
96
+ }
97
+ catch (error) {
98
+ // Extract position information from error message if available
99
+ let errorPosition;
100
+ const errorMessage = error instanceof Error ? error.message : String(error);
101
+ // Try to extract token index from error message and convert to character position
102
+ const positionMatch = errorMessage.match(/position (\d+)/);
103
+ if (positionMatch) {
104
+ const tokenIndex = parseInt(positionMatch[1], 10);
105
+ errorPosition = this.calculateCharacterPosition(query, lexemes, tokenIndex);
106
+ }
107
+ return {
108
+ success: false,
109
+ error: errorMessage,
110
+ errorPosition: errorPosition
111
+ };
112
+ }
113
+ }
114
+ /**
115
+ * Asynchronously parse SQL string to AST.
116
+ * This method wraps the synchronous parse logic in a Promise for future extensibility.
117
+ * @param query SQL string to parse
118
+ * @returns Promise<SelectQuery>
119
+ */
120
+ static async parseAsync(query) {
121
+ // For now, just wrap the sync parse in a resolved Promise
122
+ return Promise.resolve(this.parse(query));
123
+ }
124
+ /**
125
+ * Transfer headerComments from source query to target query and clear from source
126
+ * @param source Source query to transfer headerComments from
127
+ * @param target Target query to receive headerComments
128
+ */
129
+ static transferHeaderComments(source, target) {
130
+ if (source.headerComments) {
131
+ target.headerComments = source.headerComments;
132
+ // Clear headerComments from the source query to avoid duplication
133
+ source.headerComments = null;
134
+ }
135
+ }
136
+ static extractUnionTokenComments(unionLexeme) {
137
+ const comments = [];
138
+ if (unionLexeme.positionedComments && unionLexeme.positionedComments.length > 0) {
139
+ for (const posComment of unionLexeme.positionedComments) {
140
+ if (posComment.comments && posComment.comments.length > 0) {
141
+ comments.push(...posComment.comments);
142
+ }
143
+ }
144
+ unionLexeme.positionedComments = undefined;
145
+ }
146
+ if (unionLexeme.comments && unionLexeme.comments.length > 0) {
147
+ comments.push(...unionLexeme.comments);
148
+ unionLexeme.comments = null;
149
+ }
150
+ return comments.length > 0 ? comments : null;
151
+ }
152
+ // Parse from lexeme array (was: parse)
153
+ static parseFromLexeme(lexemes, index) {
154
+ let idx = index;
155
+ if (idx >= lexemes.length) {
156
+ throw new Error(`Syntax error: Unexpected end of input at position ${index}.`);
157
+ }
158
+ // Check if the first token is a SELECT keyword or VALUES
159
+ const firstToken = lexemes[idx].value;
160
+ if (!this.selectCommandSet.has(firstToken) && firstToken !== 'values') {
161
+ throw new Error(`Syntax error at position ${idx}: Expected 'SELECT' or 'VALUES' keyword but found "${lexemes[idx].value}".`);
162
+ }
163
+ let firstResult = this.selectCommandSet.has(firstToken)
164
+ ? this.parseSimpleSelectQuery(lexemes, idx)
165
+ : this.parseValuesQuery(lexemes, idx);
166
+ let query = firstResult.value;
167
+ idx = firstResult.newIndex;
168
+ // check 'union'
169
+ while (idx < lexemes.length && this.unionCommandSet.has(lexemes[idx].value.toLowerCase())) {
170
+ const operatorLexeme = lexemes[idx];
171
+ const operator = operatorLexeme.value.toLowerCase();
172
+ const unionComments = this.extractUnionTokenComments(operatorLexeme);
173
+ idx++;
174
+ if (idx >= lexemes.length) {
175
+ throw new Error(`Syntax error at position ${idx}: Expected a query after '${operator.toUpperCase()}' but found end of input.`);
176
+ }
177
+ const nextToken = lexemes[idx].value.toLowerCase();
178
+ if (this.selectCommandSet.has(nextToken)) {
179
+ const result = this.parseSimpleSelectQuery(lexemes, idx);
180
+ const binaryQuery = new SelectQuery_1.BinarySelectQuery(query, operator, result.value);
181
+ // Transfer headerComments from the first query to the BinarySelectQuery
182
+ this.transferHeaderComments(query, binaryQuery);
183
+ // Assign UNION comments to right query as headerComments (semantic positioning)
184
+ if (unionComments && unionComments.length > 0) {
185
+ if (result.value.headerComments) {
186
+ // Prepend UNION comments to existing headerComments
187
+ result.value.headerComments = [...unionComments, ...result.value.headerComments];
188
+ }
189
+ else {
190
+ result.value.headerComments = unionComments;
191
+ }
192
+ }
193
+ query = binaryQuery;
194
+ idx = result.newIndex;
195
+ }
196
+ else if (nextToken === 'values') {
197
+ const result = this.parseValuesQuery(lexemes, idx);
198
+ const binaryQuery = new SelectQuery_1.BinarySelectQuery(query, operator, result.value);
199
+ // Transfer headerComments from the first query to the BinarySelectQuery
200
+ this.transferHeaderComments(query, binaryQuery);
201
+ // Assign UNION comments to the right side query as headerComments (semantic positioning)
202
+ if (unionComments && unionComments.length > 0) {
203
+ if (result.value.headerComments) {
204
+ result.value.headerComments = [...unionComments, ...result.value.headerComments];
205
+ }
206
+ else {
207
+ result.value.headerComments = unionComments;
208
+ }
209
+ }
210
+ query = binaryQuery;
211
+ idx = result.newIndex;
212
+ }
213
+ else {
214
+ throw new Error(`Syntax error at position ${idx}: Expected 'SELECT' or 'VALUES' after '${operator.toUpperCase()}' but found "${lexemes[idx].value}".`);
215
+ }
216
+ }
217
+ return { value: query, newIndex: idx };
218
+ }
219
+ static parseSimpleSelectQuery(lexemes, index) {
220
+ var _a, _b;
221
+ let idx = index;
222
+ // 1. Parse optional WITH clause and collect header comments
223
+ const { withClauseResult, newIndex: withEndIndex, selectQuery: queryTemplate } = this.parseWithClauseAndComments(lexemes, idx);
224
+ idx = withEndIndex;
225
+ // 2. Parse all SQL clauses sequentially
226
+ const { clauses, newIndex: clausesEndIndex, selectTokenComments } = this.parseAllClauses(lexemes, idx, withClauseResult);
227
+ idx = clausesEndIndex;
228
+ // Merge SELECT token comments based on presence of WITH clause
229
+ if (selectTokenComments && selectTokenComments.length > 0) {
230
+ if (withClauseResult) {
231
+ const existingBetween = (_a = queryTemplate.betweenClauseComments) !== null && _a !== void 0 ? _a : [];
232
+ const merged = [...existingBetween];
233
+ for (const comment of selectTokenComments) {
234
+ if (!merged.includes(comment)) {
235
+ merged.push(comment);
236
+ }
237
+ }
238
+ queryTemplate.betweenClauseComments = merged;
239
+ queryTemplate.mainSelectPrefixComments = undefined;
240
+ }
241
+ else {
242
+ const existingHeader = (_b = queryTemplate.headerComments) !== null && _b !== void 0 ? _b : [];
243
+ queryTemplate.headerComments = [
244
+ ...existingHeader,
245
+ ...selectTokenComments
246
+ ];
247
+ }
248
+ }
249
+ // 3. Create final query with parsed clauses
250
+ const selectQuery = new SelectQuery_1.SimpleSelectQuery({
251
+ withClause: withClauseResult ? withClauseResult.value : null,
252
+ ...clauses
253
+ });
254
+ // 4. Apply collected comments directly to the query
255
+ this.applyCommentsToQuery(selectQuery, queryTemplate, withClauseResult);
256
+ return { value: selectQuery, newIndex: idx };
257
+ }
258
+ // Parse WITH clause and collect header comments
259
+ static parseWithClauseAndComments(lexemes, index) {
260
+ let idx = index;
261
+ let withClauseResult = null;
262
+ const queryTemplate = {};
263
+ // Collect header comments before WITH or SELECT
264
+ queryTemplate.headerComments = this.collectHeaderComments(lexemes, idx);
265
+ // Skip to WITH or SELECT token
266
+ while (idx < lexemes.length &&
267
+ lexemes[idx].value.toLowerCase() !== 'with' &&
268
+ lexemes[idx].value.toLowerCase() !== 'select') {
269
+ idx++;
270
+ }
271
+ // Collect 'before' comments from WITH token
272
+ if (idx < lexemes.length && lexemes[idx].value.toLowerCase() === 'with') {
273
+ this.collectWithTokenHeaderComments(lexemes[idx], queryTemplate);
274
+ }
275
+ // Parse WITH clause if present
276
+ if (idx < lexemes.length && lexemes[idx].value === 'with') {
277
+ withClauseResult = WithClauseParser_1.WithClauseParser.parseFromLexeme(lexemes, idx);
278
+ idx = withClauseResult.newIndex;
279
+ // Collect comments between WITH clause and SELECT
280
+ queryTemplate.mainSelectPrefixComments = this.collectMainSelectPrefixComments(lexemes, withClauseResult, idx);
281
+ queryTemplate.betweenClauseComments = this.collectBetweenClauseComments(lexemes, withClauseResult, idx);
282
+ }
283
+ return { withClauseResult, newIndex: idx, selectQuery: queryTemplate };
284
+ }
285
+ // Parse all SQL clauses (SELECT, FROM, WHERE, etc.)
286
+ static parseAllClauses(lexemes, index, withClauseResult) {
287
+ let idx = index;
288
+ // Find and parse SELECT clause
289
+ idx = this.findMainSelectToken(lexemes, idx, withClauseResult);
290
+ const selectTokenComments = this.collectSelectTokenComments(lexemes, idx);
291
+ const selectClauseResult = SelectClauseParser_1.SelectClauseParser.parseFromLexeme(lexemes, idx);
292
+ idx = selectClauseResult.newIndex;
293
+ // Parse optional clauses
294
+ const fromClauseResult = this.parseOptionalClause(lexemes, idx, 'from', FromClauseParser_1.FromClauseParser);
295
+ idx = fromClauseResult.newIndex;
296
+ const whereClauseResult = this.parseOptionalClause(lexemes, fromClauseResult.newIndex, 'where', WhereClauseParser_1.WhereClauseParser);
297
+ idx = whereClauseResult.newIndex;
298
+ const groupByClauseResult = this.parseOptionalClause(lexemes, whereClauseResult.newIndex, 'group by', GroupByParser_1.GroupByClauseParser);
299
+ idx = groupByClauseResult.newIndex;
300
+ const havingClauseResult = this.parseOptionalClause(lexemes, groupByClauseResult.newIndex, 'having', HavingParser_1.HavingClauseParser);
301
+ idx = havingClauseResult.newIndex;
302
+ const windowClauseResult = this.parseOptionalClause(lexemes, havingClauseResult.newIndex, 'window', WindowClauseParser_1.WindowClauseParser);
303
+ idx = windowClauseResult.newIndex;
304
+ const orderByClauseResult = this.parseOptionalClause(lexemes, windowClauseResult.newIndex, 'order by', OrderByClauseParser_1.OrderByClauseParser);
305
+ idx = orderByClauseResult.newIndex;
306
+ const limitClauseResult = this.parseOptionalClause(lexemes, orderByClauseResult.newIndex, 'limit', LimitClauseParser_1.LimitClauseParser);
307
+ idx = limitClauseResult.newIndex;
308
+ const offsetClauseResult = this.parseOptionalClause(lexemes, limitClauseResult.newIndex, 'offset', OffsetClauseParser_1.OffsetClauseParser);
309
+ idx = offsetClauseResult.newIndex;
310
+ const fetchClauseResult = this.parseOptionalClause(lexemes, offsetClauseResult.newIndex, 'fetch', FetchClauseParser_1.FetchClauseParser);
311
+ idx = fetchClauseResult.newIndex;
312
+ const forClauseResult = this.parseOptionalClause(lexemes, fetchClauseResult.newIndex, 'for', ForClauseParser_1.ForClauseParser);
313
+ idx = forClauseResult.newIndex;
314
+ const clauses = {
315
+ selectClause: selectClauseResult.value,
316
+ fromClause: fromClauseResult.value,
317
+ whereClause: whereClauseResult.value,
318
+ groupByClause: groupByClauseResult.value,
319
+ havingClause: havingClauseResult.value,
320
+ orderByClause: orderByClauseResult.value,
321
+ windowClause: windowClauseResult.value,
322
+ limitClause: limitClauseResult.value,
323
+ offsetClause: offsetClauseResult.value,
324
+ fetchClause: fetchClauseResult.value,
325
+ forClause: forClauseResult.value
326
+ };
327
+ return { clauses, newIndex: idx, selectTokenComments };
328
+ }
329
+ // Helper to parse optional clauses
330
+ static parseOptionalClause(lexemes, index, keyword, parser) {
331
+ if (index < lexemes.length && lexemes[index].value.toLowerCase() === keyword) {
332
+ return parser.parseFromLexeme(lexemes, index);
333
+ }
334
+ return { value: null, newIndex: index };
335
+ }
336
+ // Collect header comments before meaningful tokens
337
+ static collectHeaderComments(lexemes, startIndex) {
338
+ const headerComments = [];
339
+ let idx = startIndex;
340
+ while (idx < lexemes.length &&
341
+ lexemes[idx].value.toLowerCase() !== 'with' &&
342
+ lexemes[idx].value.toLowerCase() !== 'select') {
343
+ const token = lexemes[idx];
344
+ if (token.positionedComments) {
345
+ for (const posComment of token.positionedComments) {
346
+ if (posComment.comments) {
347
+ headerComments.push(...posComment.comments);
348
+ }
349
+ }
350
+ }
351
+ if (token.comments && token.comments.length > 0) {
352
+ headerComments.push(...token.comments);
353
+ }
354
+ idx++;
355
+ }
356
+ return headerComments;
357
+ }
358
+ // Collect 'before' positioned comments from WITH token
359
+ static collectWithTokenHeaderComments(withToken, queryTemplate) {
360
+ if (!withToken.positionedComments)
361
+ return;
362
+ if (!queryTemplate.headerComments)
363
+ queryTemplate.headerComments = [];
364
+ const remainingPositioned = [];
365
+ for (const posComment of withToken.positionedComments) {
366
+ if (posComment.position === 'before' && posComment.comments) {
367
+ queryTemplate.headerComments.push(...posComment.comments);
368
+ }
369
+ else {
370
+ remainingPositioned.push(posComment);
371
+ }
372
+ }
373
+ withToken.positionedComments = remainingPositioned.length > 0 ? remainingPositioned : undefined;
374
+ }
375
+ // Collect comments between WITH clause and main SELECT
376
+ static collectMainSelectPrefixComments(lexemes, withClauseResult, currentIndex) {
377
+ const mainSelectPrefixComments = [];
378
+ // Get trailing comments from WITH clause
379
+ if (withClauseResult === null || withClauseResult === void 0 ? void 0 : withClauseResult.value.trailingComments) {
380
+ mainSelectPrefixComments.push(...withClauseResult.value.trailingComments);
381
+ }
382
+ // Find main SELECT token
383
+ const mainSelectIdx = this.findMainSelectIndex(lexemes, withClauseResult, currentIndex);
384
+ // Scan tokens between WITH end and main SELECT
385
+ if (withClauseResult && mainSelectIdx > withClauseResult.newIndex) {
386
+ for (let tempIdx = withClauseResult.newIndex; tempIdx < mainSelectIdx; tempIdx++) {
387
+ const token = lexemes[tempIdx];
388
+ if (token.positionedComments) {
389
+ for (const posComment of token.positionedComments) {
390
+ if (posComment.comments) {
391
+ mainSelectPrefixComments.push(...posComment.comments);
392
+ }
393
+ }
394
+ }
395
+ if (token.comments && token.comments.length > 0) {
396
+ mainSelectPrefixComments.push(...token.comments);
397
+ }
398
+ }
399
+ }
400
+ return mainSelectPrefixComments;
401
+ }
402
+ // Collect comments between clauses
403
+ static collectBetweenClauseComments(lexemes, withClauseResult, currentIndex) {
404
+ if (!withClauseResult)
405
+ return [];
406
+ const betweenClauseComments = [];
407
+ const withEndIndex = withClauseResult.newIndex;
408
+ const scanStartIndex = Math.max(0, withEndIndex - 1);
409
+ for (let i = scanStartIndex; i < currentIndex; i++) {
410
+ const token = lexemes[i];
411
+ if (token.positionedComments && token.positionedComments.length > 0) {
412
+ for (const posComment of token.positionedComments) {
413
+ if (posComment.comments) {
414
+ betweenClauseComments.push(...posComment.comments);
415
+ }
416
+ }
417
+ token.positionedComments = undefined;
418
+ }
419
+ if (token.comments && token.comments.length > 0) {
420
+ betweenClauseComments.push(...token.comments);
421
+ token.comments = null;
422
+ }
423
+ }
424
+ return betweenClauseComments;
425
+ }
426
+ // Find main SELECT token index
427
+ static findMainSelectIndex(lexemes, withClauseResult, fallbackIndex) {
428
+ if (withClauseResult) {
429
+ for (let i = withClauseResult.newIndex; i < lexemes.length; i++) {
430
+ if (lexemes[i].value.toLowerCase() === 'select') {
431
+ return i;
432
+ }
433
+ }
434
+ }
435
+ return fallbackIndex;
436
+ }
437
+ // Find and validate main SELECT token
438
+ static findMainSelectToken(lexemes, index, withClauseResult) {
439
+ const mainSelectIdx = this.findMainSelectIndex(lexemes, withClauseResult, index);
440
+ if (mainSelectIdx >= lexemes.length || lexemes[mainSelectIdx].value !== 'select') {
441
+ throw new Error(`Syntax error at position ${mainSelectIdx}: Expected 'SELECT' keyword but found "${mainSelectIdx < lexemes.length ? lexemes[mainSelectIdx].value : 'end of input'}". SELECT queries must start with the SELECT keyword.`);
442
+ }
443
+ return mainSelectIdx;
444
+ }
445
+ // Collect and clear comments from SELECT token
446
+ static collectSelectTokenComments(lexemes, selectIndex) {
447
+ const selectToken = lexemes[selectIndex];
448
+ const selectComments = [];
449
+ if (selectToken.comments && selectToken.comments.length > 0) {
450
+ selectComments.push(...selectToken.comments);
451
+ selectToken.comments = null;
452
+ }
453
+ if (selectToken.positionedComments && selectToken.positionedComments.length > 0) {
454
+ for (const posComment of selectToken.positionedComments) {
455
+ if (posComment.position === 'before' && posComment.comments) {
456
+ selectComments.push(...posComment.comments);
457
+ }
458
+ }
459
+ selectToken.positionedComments = undefined;
460
+ }
461
+ return selectComments;
462
+ }
463
+ // Apply all collected comments directly to the query
464
+ static applyCommentsToQuery(selectQuery, queryTemplate, withClauseResult) {
465
+ var _a;
466
+ // Apply header comments directly
467
+ if (((_a = queryTemplate.headerComments) === null || _a === void 0 ? void 0 : _a.length) > 0) {
468
+ selectQuery.headerComments = queryTemplate.headerComments;
469
+ }
470
+ // Merge helper to avoid duplicate between-clause comments
471
+ const mergeBetweenComments = (source) => {
472
+ var _a;
473
+ if (!source || source.length === 0) {
474
+ return;
475
+ }
476
+ const existing = (_a = selectQuery.comments) !== null && _a !== void 0 ? _a : [];
477
+ const merged = [];
478
+ for (const comment of source) {
479
+ if (!merged.includes(comment)) {
480
+ merged.push(comment);
481
+ }
482
+ }
483
+ for (const comment of existing) {
484
+ if (!merged.includes(comment)) {
485
+ merged.push(comment);
486
+ }
487
+ }
488
+ selectQuery.comments = merged;
489
+ };
490
+ mergeBetweenComments(queryTemplate.mainSelectPrefixComments);
491
+ mergeBetweenComments(queryTemplate.betweenClauseComments);
492
+ }
493
+ static parseValuesQuery(lexemes, index) {
494
+ // Use ValuesQueryParser to parse VALUES clause
495
+ const result = ValuesQueryParser_1.ValuesQueryParser.parseFromLexeme(lexemes, index);
496
+ // Return the result from ValuesQueryParser directly
497
+ return { value: result.value, newIndex: result.newIndex };
498
+ }
499
+ /**
500
+ * Get the CTE name at the specified cursor position.
501
+ *
502
+ * This method provides a simple interface for retrieving the CTE name
503
+ * based on a 1D cursor position in the SQL text.
504
+ *
505
+ * @deprecated Use CTERegionDetector.getCursorCte() instead for better API consistency
506
+ * @param sql - The SQL string to analyze
507
+ * @param cursorPosition - The cursor position (0-based character offset)
508
+ * @returns The CTE name if cursor is in a CTE, null otherwise
509
+ *
510
+ * @example
511
+ * ```typescript
512
+ * const sql = `WITH users AS (SELECT * FROM table) SELECT * FROM users`;
513
+ * const cteName = SelectQueryParser.getCursorCte(sql, 25);
514
+ * console.log(cteName); // "users"
515
+ * ```
516
+ */
517
+ static getCursorCte(sql, cursorPosition) {
518
+ return CTERegionDetector_1.CTERegionDetector.getCursorCte(sql, cursorPosition);
519
+ }
520
+ /**
521
+ * Get the CTE name at the specified 2D coordinates (line, column).
522
+ *
523
+ * This method provides a convenient interface for editor integrations
524
+ * that work with line/column coordinates instead of character positions.
525
+ *
526
+ * @deprecated Use CTERegionDetector.getCursorCteAt() instead for better API consistency
527
+ * @param sql - The SQL string to analyze
528
+ * @param line - The line number (1-based)
529
+ * @param column - The column number (1-based)
530
+ * @returns The CTE name if cursor is in a CTE, null otherwise
531
+ *
532
+ * @example
533
+ * ```typescript
534
+ * const sql = `WITH users AS (\n SELECT * FROM table\n) SELECT * FROM users`;
535
+ * const cteName = SelectQueryParser.getCursorCteAt(sql, 2, 5);
536
+ * console.log(cteName); // "users"
537
+ * ```
538
+ */
539
+ static getCursorCteAt(sql, line, column) {
540
+ return CTERegionDetector_1.CTERegionDetector.getCursorCteAt(sql, line, column);
541
+ }
542
+ /**
543
+ * Convert character position to line/column coordinates.
544
+ *
545
+ * @deprecated Use CTERegionDetector.positionToLineColumn() instead for better API consistency
546
+ * @param text - The text to analyze
547
+ * @param position - The character position (0-based)
548
+ * @returns Object with line and column (1-based), or null if invalid position
549
+ */
550
+ static positionToLineColumn(text, position) {
551
+ return CTERegionDetector_1.CTERegionDetector.positionToLineColumn(text, position);
552
+ }
553
+ }
554
+ exports.SelectQueryParser = SelectQueryParser;
555
+ SelectQueryParser.unionCommandSet = new Set([
556
+ "union",
557
+ "union all",
558
+ "intersect",
559
+ "intersect all",
560
+ "except",
561
+ "except all",
562
+ ]);
563
+ SelectQueryParser.selectCommandSet = new Set(["with", "select"]);
564
+ //# sourceMappingURL=SelectQueryParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelectQueryParser.js","sourceRoot":"","sources":["../../src/parsers/SelectQueryParser.ts"],"names":[],"mappings":"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"}