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,562 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ValueParser = void 0;
4
+ const Lexeme_1 = require("../models/Lexeme");
5
+ const ValueComponent_1 = require("../models/ValueComponent");
6
+ const SqlTokenizer_1 = require("./SqlTokenizer");
7
+ const IdentifierParser_1 = require("./IdentifierParser");
8
+ const LiteralParser_1 = require("./LiteralParser");
9
+ const ParenExpressionParser_1 = require("./ParenExpressionParser");
10
+ const UnaryExpressionParser_1 = require("./UnaryExpressionParser");
11
+ const ParameterExpressionParser_1 = require("./ParameterExpressionParser");
12
+ const StringSpecifierExpressionParser_1 = require("./StringSpecifierExpressionParser");
13
+ const CommandExpressionParser_1 = require("./CommandExpressionParser");
14
+ const FunctionExpressionParser_1 = require("./FunctionExpressionParser");
15
+ const FullNameParser_1 = require("./FullNameParser");
16
+ const ParseError_1 = require("./ParseError");
17
+ const OperatorPrecedence_1 = require("../utils/OperatorPrecedence");
18
+ class ValueParser {
19
+ // Parse SQL string to AST (was: parse)
20
+ static parse(query) {
21
+ const tokenizer = new SqlTokenizer_1.SqlTokenizer(query); // Initialize tokenizer
22
+ const lexemes = tokenizer.readLexmes(); // Get tokens
23
+ // Parse
24
+ const result = this.parseFromLexeme(lexemes, 0);
25
+ // Error if there are remaining tokens
26
+ if (result.newIndex < lexemes.length) {
27
+ throw ParseError_1.ParseError.fromUnparsedLexemes(lexemes, result.newIndex, `[ValueParser]`);
28
+ }
29
+ return result.value;
30
+ }
31
+ /**
32
+ * Parse from lexeme array with logical operator controls
33
+ */
34
+ static parseFromLexeme(lexemes, index, allowAndOperator = true, allowOrOperator = true) {
35
+ return this.parseExpressionWithPrecedence(lexemes, index, 0, allowAndOperator, allowOrOperator);
36
+ }
37
+ /**
38
+ * Parse expressions with operator precedence handling
39
+ * Uses precedence climbing algorithm
40
+ */
41
+ static parseExpressionWithPrecedence(lexemes, index, minPrecedence, allowAndOperator = true, allowOrOperator = true) {
42
+ let idx = index;
43
+ // Parse the primary expression (left side)
44
+ const comment = lexemes[idx].comments;
45
+ const positionedComments = lexemes[idx].positionedComments;
46
+ const left = this.parseItem(lexemes, idx);
47
+ // Transfer positioned comments if they exist and the component doesn't handle its own comments
48
+ if (positionedComments && positionedComments.length > 0 && !left.value.positionedComments) {
49
+ left.value.positionedComments = positionedComments;
50
+ }
51
+ // Fall back to legacy comments if positioned comments aren't available
52
+ else if (left.value.comments === null && comment && comment.length > 0) {
53
+ left.value.comments = comment;
54
+ }
55
+ idx = left.newIndex;
56
+ let result = left.value;
57
+ // Handle postfix array access ([...])
58
+ const arrayAccessResult = this.parseArrayAccess(lexemes, idx, result);
59
+ result = arrayAccessResult.value;
60
+ idx = arrayAccessResult.newIndex;
61
+ // Process operators with precedence
62
+ while (idx < lexemes.length && (lexemes[idx].type & Lexeme_1.TokenType.Operator)) {
63
+ const operatorToken = lexemes[idx];
64
+ const operator = operatorToken.value;
65
+ // Check if this operator is allowed
66
+ if (!allowAndOperator && operator.toLowerCase() === "and") {
67
+ break;
68
+ }
69
+ if (!allowOrOperator && operator.toLowerCase() === "or") {
70
+ break;
71
+ }
72
+ // Get operator precedence
73
+ const precedence = OperatorPrecedence_1.OperatorPrecedence.getPrecedence(operator);
74
+ // If this operator has lower precedence than minimum, stop
75
+ if (precedence < minPrecedence) {
76
+ break;
77
+ }
78
+ idx++; // consume operator // Handle BETWEEN specially as it has different syntax
79
+ if (OperatorPrecedence_1.OperatorPrecedence.isBetweenOperator(operator)) {
80
+ const betweenResult = FunctionExpressionParser_1.FunctionExpressionParser.parseBetweenExpression(lexemes, idx, result, operator.toLowerCase().includes('not'));
81
+ result = betweenResult.value;
82
+ idx = betweenResult.newIndex;
83
+ continue;
84
+ }
85
+ // Handle :: (cast) operator specially
86
+ if (operator === "::") {
87
+ const typeValue = FunctionExpressionParser_1.FunctionExpressionParser.parseTypeValue(lexemes, idx);
88
+ result = new ValueComponent_1.CastExpression(result, typeValue.value);
89
+ idx = typeValue.newIndex;
90
+ continue;
91
+ }
92
+ // For left-associative operators, use precedence + 1
93
+ const nextMinPrecedence = precedence + 1;
94
+ // Parse the right-hand side with higher precedence
95
+ const rightResult = this.parseExpressionWithPrecedence(lexemes, idx, nextMinPrecedence, allowAndOperator, allowOrOperator);
96
+ idx = rightResult.newIndex;
97
+ // Create binary expression with operator comments preserved
98
+ const binaryExpr = new ValueComponent_1.BinaryExpression(result, operator, rightResult.value);
99
+ // Transfer operator token comments to the operator RawString
100
+ if (operatorToken.comments && operatorToken.comments.length > 0) {
101
+ binaryExpr.operator.comments = operatorToken.comments;
102
+ }
103
+ if (operatorToken.positionedComments && operatorToken.positionedComments.length > 0) {
104
+ binaryExpr.operator.positionedComments = operatorToken.positionedComments;
105
+ }
106
+ result = binaryExpr;
107
+ }
108
+ return { value: result, newIndex: idx };
109
+ }
110
+ /**
111
+ * Transfer positioned comments from lexeme to value component if the component doesn't already handle them
112
+ */
113
+ static transferPositionedComments(lexeme, value) {
114
+ if (lexeme.positionedComments && lexeme.positionedComments.length > 0) {
115
+ const beforeComments = lexeme.positionedComments.filter(comment => comment.position === 'before');
116
+ const afterComments = lexeme.positionedComments.filter(comment => comment.position === 'after');
117
+ if (beforeComments.length > 0) {
118
+ const clonedBefore = beforeComments.map(comment => ({
119
+ position: comment.position,
120
+ comments: [...comment.comments],
121
+ }));
122
+ value.positionedComments = value.positionedComments
123
+ ? [...clonedBefore, ...value.positionedComments]
124
+ : clonedBefore;
125
+ }
126
+ if (afterComments.length > 0) {
127
+ const clonedAfter = afterComments.map(comment => ({
128
+ position: comment.position,
129
+ comments: [...comment.comments],
130
+ }));
131
+ value.positionedComments = value.positionedComments
132
+ ? [...value.positionedComments, ...clonedAfter]
133
+ : clonedAfter;
134
+ }
135
+ // Preserve other comment positions when no before/after segments were processed.
136
+ if (!beforeComments.length && !afterComments.length && !value.positionedComments) {
137
+ value.positionedComments = lexeme.positionedComments.map(comment => ({
138
+ position: comment.position,
139
+ comments: [...comment.comments],
140
+ }));
141
+ }
142
+ return;
143
+ }
144
+ // Fall back to legacy comments if positioned comments aren't available
145
+ else if (value.comments === null && lexeme.comments && lexeme.comments.length > 0) {
146
+ value.comments = lexeme.comments;
147
+ }
148
+ }
149
+ static parseItem(lexemes, index) {
150
+ let idx = index;
151
+ // Range check
152
+ if (idx >= lexemes.length) {
153
+ throw new Error(`Unexpected end of lexemes at index ${index}`);
154
+ }
155
+ const current = lexemes[idx];
156
+ if (current.type & Lexeme_1.TokenType.Identifier && current.type & Lexeme_1.TokenType.Operator && current.type & Lexeme_1.TokenType.Type) {
157
+ // Check if this is followed by parentheses (function call)
158
+ if (idx + 1 < lexemes.length && (lexemes[idx + 1].type & Lexeme_1.TokenType.OpenParen)) {
159
+ // Determine if this is a type constructor or function call
160
+ if (this.isTypeConstructor(lexemes, idx + 1, current.value)) {
161
+ // Type constructor
162
+ const result = FunctionExpressionParser_1.FunctionExpressionParser.parseTypeValue(lexemes, idx);
163
+ this.transferPositionedComments(current, result.value);
164
+ return { value: result.value, newIndex: result.newIndex };
165
+ }
166
+ else {
167
+ // Function call
168
+ const result = FunctionExpressionParser_1.FunctionExpressionParser.parseFromLexeme(lexemes, idx);
169
+ this.transferPositionedComments(current, result.value);
170
+ return result;
171
+ }
172
+ }
173
+ // Typed literal format pattern
174
+ // e.g., `interval '2 days'`
175
+ const first = IdentifierParser_1.IdentifierParser.parseFromLexeme(lexemes, idx);
176
+ if (first.newIndex >= lexemes.length) {
177
+ this.transferPositionedComments(current, first.value);
178
+ return first;
179
+ }
180
+ const next = lexemes[first.newIndex];
181
+ if (next.type & Lexeme_1.TokenType.Literal) {
182
+ // Typed literal format
183
+ const literalIndex = first.newIndex;
184
+ const literalLexeme = lexemes[literalIndex];
185
+ const second = LiteralParser_1.LiteralParser.parseFromLexeme(lexemes, literalIndex);
186
+ // Preserve comments that belong to the literal part of typed literal expressions.
187
+ this.transferPositionedComments(literalLexeme, second.value);
188
+ const result = new ValueComponent_1.UnaryExpression(lexemes[idx].value, second.value);
189
+ this.transferPositionedComments(current, result);
190
+ return { value: result, newIndex: second.newIndex };
191
+ }
192
+ this.transferPositionedComments(current, first.value);
193
+ return first;
194
+ }
195
+ else if (current.type & Lexeme_1.TokenType.Identifier) {
196
+ const { namespaces, name, newIndex } = FullNameParser_1.FullNameParser.parseFromLexeme(lexemes, idx);
197
+ // Namespace is also recognized as Identifier.
198
+ // Since functions and types, as well as columns (tables), can have namespaces,
199
+ // it is necessary to determine by the last element of the identifier.
200
+ if (lexemes[newIndex - 1].type & Lexeme_1.TokenType.Function) {
201
+ const result = FunctionExpressionParser_1.FunctionExpressionParser.parseFromLexeme(lexemes, idx);
202
+ this.transferPositionedComments(current, result.value);
203
+ return result;
204
+ }
205
+ else if (lexemes[newIndex - 1].type & Lexeme_1.TokenType.Type) {
206
+ // Handle Type tokens that also have Identifier flag
207
+ if (newIndex < lexemes.length && (lexemes[newIndex].type & Lexeme_1.TokenType.OpenParen)) {
208
+ // Determine if this is a type constructor or function call
209
+ if (this.isTypeConstructor(lexemes, newIndex, name.name)) {
210
+ // Type constructor (NUMERIC(10,2), VARCHAR(50), etc.)
211
+ const result = FunctionExpressionParser_1.FunctionExpressionParser.parseTypeValue(lexemes, idx);
212
+ this.transferPositionedComments(current, result.value);
213
+ return { value: result.value, newIndex: result.newIndex };
214
+ }
215
+ else {
216
+ // Function call (DATE('2025-01-01'), etc.)
217
+ const result = FunctionExpressionParser_1.FunctionExpressionParser.parseFromLexeme(lexemes, idx);
218
+ this.transferPositionedComments(current, result.value);
219
+ return result;
220
+ }
221
+ }
222
+ else {
223
+ // Handle standalone type tokens
224
+ const value = new ValueComponent_1.TypeValue(namespaces, name);
225
+ this.transferPositionedComments(current, value);
226
+ return { value, newIndex };
227
+ }
228
+ }
229
+ const value = new ValueComponent_1.ColumnReference(namespaces, name);
230
+ this.transferPositionedComments(current, value);
231
+ return { value, newIndex };
232
+ }
233
+ else if (current.type & Lexeme_1.TokenType.Literal) {
234
+ const result = LiteralParser_1.LiteralParser.parseFromLexeme(lexemes, idx);
235
+ this.transferPositionedComments(current, result.value);
236
+ return result;
237
+ }
238
+ else if (current.type & Lexeme_1.TokenType.OpenParen) {
239
+ const result = ParenExpressionParser_1.ParenExpressionParser.parseFromLexeme(lexemes, idx);
240
+ this.transferPositionedComments(current, result.value);
241
+ return result;
242
+ }
243
+ else if (current.type & Lexeme_1.TokenType.Function) {
244
+ const result = FunctionExpressionParser_1.FunctionExpressionParser.parseFromLexeme(lexemes, idx);
245
+ this.transferPositionedComments(current, result.value);
246
+ return result;
247
+ }
248
+ else if (current.type & Lexeme_1.TokenType.Operator) {
249
+ const result = UnaryExpressionParser_1.UnaryExpressionParser.parseFromLexeme(lexemes, idx);
250
+ this.transferPositionedComments(current, result.value);
251
+ return result;
252
+ }
253
+ else if (current.type & Lexeme_1.TokenType.Parameter) {
254
+ const result = ParameterExpressionParser_1.ParameterExpressionParser.parseFromLexeme(lexemes, idx);
255
+ this.transferPositionedComments(current, result.value);
256
+ return result;
257
+ }
258
+ else if (current.type & Lexeme_1.TokenType.StringSpecifier) {
259
+ const result = StringSpecifierExpressionParser_1.StringSpecifierExpressionParser.parseFromLexeme(lexemes, idx);
260
+ this.transferPositionedComments(current, result.value);
261
+ return result;
262
+ }
263
+ else if (current.type & Lexeme_1.TokenType.Command) {
264
+ const result = CommandExpressionParser_1.CommandExpressionParser.parseFromLexeme(lexemes, idx);
265
+ this.transferPositionedComments(current, result.value);
266
+ return result;
267
+ }
268
+ else if (current.type & Lexeme_1.TokenType.OpenBracket) {
269
+ // SQLServer escape identifier format. e.g. [dbo] or [dbo].[table]
270
+ const { namespaces, name, newIndex } = FullNameParser_1.FullNameParser.parseFromLexeme(lexemes, idx);
271
+ const value = new ValueComponent_1.ColumnReference(namespaces, name);
272
+ this.transferPositionedComments(current, value);
273
+ return { value, newIndex };
274
+ }
275
+ else if (current.type & Lexeme_1.TokenType.Type) {
276
+ // Check if this type token is followed by an opening parenthesis
277
+ const { namespaces, name, newIndex } = FullNameParser_1.FullNameParser.parseFromLexeme(lexemes, idx);
278
+ if (newIndex < lexemes.length && (lexemes[newIndex].type & Lexeme_1.TokenType.OpenParen)) {
279
+ // Determine if this is a type constructor or function call
280
+ if (this.isTypeConstructor(lexemes, newIndex, name.name)) {
281
+ // Type constructor (NUMERIC(10,2), VARCHAR(50), etc.)
282
+ const result = FunctionExpressionParser_1.FunctionExpressionParser.parseTypeValue(lexemes, idx);
283
+ this.transferPositionedComments(current, result.value);
284
+ return { value: result.value, newIndex: result.newIndex };
285
+ }
286
+ else {
287
+ // Function call (DATE('2025-01-01'), etc.)
288
+ const result = FunctionExpressionParser_1.FunctionExpressionParser.parseFromLexeme(lexemes, idx);
289
+ this.transferPositionedComments(current, result.value);
290
+ return result;
291
+ }
292
+ }
293
+ else {
294
+ // Handle standalone type tokens
295
+ const value = new ValueComponent_1.TypeValue(namespaces, name);
296
+ this.transferPositionedComments(current, value);
297
+ return { value, newIndex };
298
+ }
299
+ }
300
+ throw ParseError_1.ParseError.fromUnparsedLexemes(lexemes, idx, `[ValueParser] Invalid lexeme.`);
301
+ }
302
+ static parseArgument(openToken, closeToken, lexemes, index) {
303
+ let idx = index;
304
+ const args = [];
305
+ // Check for opening parenthesis
306
+ if (idx < lexemes.length && lexemes[idx].type === openToken) {
307
+ // Capture comments from opening parenthesis
308
+ const openParenToken = lexemes[idx];
309
+ idx++;
310
+ if (idx < lexemes.length && lexemes[idx].type === closeToken) {
311
+ // If there are no arguments, return an empty ValueList
312
+ idx++;
313
+ return { value: new ValueComponent_1.ValueList([]), newIndex: idx };
314
+ }
315
+ // If the next element is `*`, treat `*` as an Identifier
316
+ if (idx < lexemes.length && lexemes[idx].value === "*") {
317
+ const wildcard = new ValueComponent_1.ColumnReference(null, "*");
318
+ // Transfer opening paren comments to wildcard
319
+ if (openParenToken.positionedComments && openParenToken.positionedComments.length > 0) {
320
+ // Convert "after" positioned comments from opening paren to "before" comments for the argument
321
+ const beforeComments = openParenToken.positionedComments.filter(pc => pc.position === 'after');
322
+ if (beforeComments.length > 0) {
323
+ wildcard.positionedComments = beforeComments.map(pc => ({
324
+ position: 'before',
325
+ comments: pc.comments
326
+ }));
327
+ }
328
+ }
329
+ else if (openParenToken.comments && openParenToken.comments.length > 0) {
330
+ wildcard.comments = openParenToken.comments;
331
+ }
332
+ idx++;
333
+ // The next element must be closeToken
334
+ if (idx < lexemes.length && lexemes[idx].type === closeToken) {
335
+ idx++;
336
+ return { value: wildcard, newIndex: idx };
337
+ }
338
+ else {
339
+ throw ParseError_1.ParseError.fromUnparsedLexemes(lexemes, idx, `Expected closing parenthesis after wildcard '*'.`);
340
+ }
341
+ }
342
+ // Parse the value inside
343
+ const result = this.parseFromLexeme(lexemes, idx);
344
+ idx = result.newIndex;
345
+ // Transfer opening paren comments to the first argument
346
+ if (openParenToken.positionedComments && openParenToken.positionedComments.length > 0) {
347
+ // Convert "after" positioned comments from opening paren to "before" comments for the argument
348
+ const afterComments = openParenToken.positionedComments.filter(pc => pc.position === 'after');
349
+ if (afterComments.length > 0) {
350
+ const beforeComments = afterComments.map(pc => ({
351
+ position: 'before',
352
+ comments: pc.comments
353
+ }));
354
+ // Merge with existing positioned comments
355
+ if (result.value.positionedComments) {
356
+ result.value.positionedComments = [...beforeComments, ...result.value.positionedComments];
357
+ }
358
+ else {
359
+ result.value.positionedComments = beforeComments;
360
+ }
361
+ }
362
+ }
363
+ else if (openParenToken.comments && openParenToken.comments.length > 0) {
364
+ // Fall back to legacy comments
365
+ if (result.value.comments) {
366
+ result.value.comments = openParenToken.comments.concat(result.value.comments);
367
+ }
368
+ else {
369
+ result.value.comments = openParenToken.comments;
370
+ }
371
+ }
372
+ args.push(result.value);
373
+ // Continue reading if the next element is a comma
374
+ while (idx < lexemes.length && (lexemes[idx].type & Lexeme_1.TokenType.Comma)) {
375
+ idx++;
376
+ const argResult = this.parseFromLexeme(lexemes, idx);
377
+ idx = argResult.newIndex;
378
+ args.push(argResult.value);
379
+ }
380
+ // Check for closing parenthesis
381
+ if (idx < lexemes.length && lexemes[idx].type === closeToken) {
382
+ idx++;
383
+ if (args.length === 1) {
384
+ // Return as is if there is only one argument
385
+ return { value: args[0], newIndex: idx };
386
+ }
387
+ // Create ValueCollection if there are multiple arguments
388
+ const value = new ValueComponent_1.ValueList(args);
389
+ return { value, newIndex: idx };
390
+ }
391
+ else {
392
+ throw ParseError_1.ParseError.fromUnparsedLexemes(lexemes, idx, `Missing closing parenthesis.`);
393
+ }
394
+ }
395
+ throw ParseError_1.ParseError.fromUnparsedLexemes(lexemes, index, `Expected opening parenthesis.`);
396
+ }
397
+ /**
398
+ * Parse postfix array access operations [index] or [start:end]
399
+ * @param lexemes Array of lexemes
400
+ * @param index Current index
401
+ * @param baseExpression The base expression to apply array access to
402
+ * @returns Result with potentially modified expression and new index
403
+ */
404
+ static parseArrayAccess(lexemes, index, baseExpression) {
405
+ let idx = index;
406
+ let result = baseExpression;
407
+ // Check for array access syntax [...]
408
+ while (idx < lexemes.length && (lexemes[idx].type & Lexeme_1.TokenType.OpenBracket)) {
409
+ // Check if this is SQL Server bracket identifier by looking ahead
410
+ if (this.isSqlServerBracketIdentifier(lexemes, idx)) {
411
+ break; // This is SQL Server bracket syntax, not array access
412
+ }
413
+ idx++; // consume opening bracket
414
+ if (idx >= lexemes.length) {
415
+ throw new Error(`Expected array index or slice after '[' at index ${idx - 1}`);
416
+ }
417
+ // Check for empty brackets []
418
+ if (lexemes[idx].type & Lexeme_1.TokenType.CloseBracket) {
419
+ throw new Error(`Empty array access brackets not supported at index ${idx}`);
420
+ }
421
+ // First, check if this is a slice by looking for colon pattern
422
+ let startExpr = null;
423
+ let isSlice = false;
424
+ // Parse the first part (could be start of slice or single index)
425
+ if (lexemes[idx].type & Lexeme_1.TokenType.Operator && lexemes[idx].value === ":") {
426
+ // Starts with colon [:end] - start is null
427
+ isSlice = true;
428
+ idx++; // consume colon
429
+ }
430
+ else {
431
+ // Parse the first expression (but with higher precedence than colon)
432
+ const colonPrecedence = OperatorPrecedence_1.OperatorPrecedence.getPrecedence(":");
433
+ const firstResult = this.parseExpressionWithPrecedence(lexemes, idx, colonPrecedence + 1);
434
+ startExpr = firstResult.value;
435
+ idx = firstResult.newIndex;
436
+ // Check if next token is colon
437
+ if (idx < lexemes.length && lexemes[idx].type & Lexeme_1.TokenType.Operator && lexemes[idx].value === ":") {
438
+ isSlice = true;
439
+ idx++; // consume colon
440
+ }
441
+ }
442
+ if (isSlice) {
443
+ // This is a slice expression [start:end]
444
+ let endExpr = null;
445
+ // Check if there's an end expression or if it's an open slice like [1:]
446
+ if (idx < lexemes.length && !(lexemes[idx].type & Lexeme_1.TokenType.CloseBracket)) {
447
+ const colonPrecedence = OperatorPrecedence_1.OperatorPrecedence.getPrecedence(":");
448
+ const endResult = this.parseExpressionWithPrecedence(lexemes, idx, colonPrecedence + 1);
449
+ endExpr = endResult.value;
450
+ idx = endResult.newIndex;
451
+ }
452
+ // Expect closing bracket
453
+ if (idx >= lexemes.length || !(lexemes[idx].type & Lexeme_1.TokenType.CloseBracket)) {
454
+ throw new Error(`Expected ']' after array slice at index ${idx}`);
455
+ }
456
+ idx++; // consume closing bracket
457
+ // Create ArraySliceExpression
458
+ result = new ValueComponent_1.ArraySliceExpression(result, startExpr, endExpr);
459
+ }
460
+ else {
461
+ // This is a single index access [index]
462
+ // Need to parse the full expression if it wasn't already parsed
463
+ if (!startExpr) {
464
+ const indexResult = this.parseFromLexeme(lexemes, idx);
465
+ startExpr = indexResult.value;
466
+ idx = indexResult.newIndex;
467
+ }
468
+ // Expect closing bracket
469
+ if (idx >= lexemes.length || !(lexemes[idx].type & Lexeme_1.TokenType.CloseBracket)) {
470
+ throw new Error(`Expected ']' after array index at index ${idx}`);
471
+ }
472
+ idx++; // consume closing bracket
473
+ // Create ArrayIndexExpression
474
+ result = new ValueComponent_1.ArrayIndexExpression(result, startExpr);
475
+ }
476
+ }
477
+ return { value: result, newIndex: idx };
478
+ }
479
+ /**
480
+ * Check if the bracket at the given index represents SQL Server bracket identifier syntax
481
+ * Returns true if this looks like [identifier] or [schema].[table] syntax
482
+ */
483
+ static isSqlServerBracketIdentifier(lexemes, bracketIndex) {
484
+ let idx = bracketIndex + 1; // Start after opening bracket
485
+ if (idx >= lexemes.length)
486
+ return false;
487
+ // SQL Server bracket identifiers should contain only identifiers and dots
488
+ while (idx < lexemes.length && !(lexemes[idx].type & Lexeme_1.TokenType.CloseBracket)) {
489
+ const token = lexemes[idx];
490
+ // Allow identifiers and dots in SQL Server bracket syntax
491
+ if ((token.type & Lexeme_1.TokenType.Identifier) ||
492
+ (token.type & Lexeme_1.TokenType.Operator && token.value === ".")) {
493
+ idx++;
494
+ continue;
495
+ }
496
+ // If we find anything else (numbers, expressions, colons), it's array access
497
+ return false;
498
+ }
499
+ // If we reached the end without finding a closing bracket, it's malformed
500
+ if (idx >= lexemes.length)
501
+ return false;
502
+ // If the closing bracket is immediately followed by a dot, it's likely SQL Server syntax
503
+ // like [dbo].[table]
504
+ const closingBracketIndex = idx;
505
+ if (closingBracketIndex + 1 < lexemes.length) {
506
+ const nextToken = lexemes[closingBracketIndex + 1];
507
+ if (nextToken.type & Lexeme_1.TokenType.Operator && nextToken.value === ".") {
508
+ return true;
509
+ }
510
+ }
511
+ // Check if the content looks like a simple identifier (no colons, expressions, etc.)
512
+ idx = bracketIndex + 1;
513
+ let hasOnlyIdentifiersAndDots = true;
514
+ while (idx < closingBracketIndex) {
515
+ const token = lexemes[idx];
516
+ if (!((token.type & Lexeme_1.TokenType.Identifier) ||
517
+ (token.type & Lexeme_1.TokenType.Operator && token.value === "."))) {
518
+ hasOnlyIdentifiersAndDots = false;
519
+ break;
520
+ }
521
+ idx++;
522
+ }
523
+ // If it contains only identifiers and dots, it's likely SQL Server syntax
524
+ return hasOnlyIdentifiersAndDots;
525
+ }
526
+ /**
527
+ * Determines if a type token followed by parentheses is a type constructor or function call
528
+ * @param lexemes Array of lexemes
529
+ * @param openParenIndex Index of the opening parenthesis
530
+ * @param typeName Name of the type/function
531
+ * @returns True if this is a type constructor, false if it's a function call
532
+ */
533
+ static isTypeConstructor(lexemes, openParenIndex, typeName) {
534
+ // These are always type constructors regardless of content
535
+ const alwaysTypeConstructors = [
536
+ 'NUMERIC', 'DECIMAL', 'VARCHAR', 'CHAR', 'CHARACTER',
537
+ 'TIMESTAMP', 'TIME', 'INTERVAL'
538
+ ];
539
+ const upperTypeName = typeName.toUpperCase();
540
+ if (alwaysTypeConstructors.includes(upperTypeName)) {
541
+ return true;
542
+ }
543
+ // For DATE, check if the first argument is a string literal (function) or not (type)
544
+ if (upperTypeName === 'DATE') {
545
+ const firstArgIndex = openParenIndex + 1;
546
+ if (firstArgIndex < lexemes.length) {
547
+ const firstArg = lexemes[firstArgIndex];
548
+ const isStringLiteral = (firstArg.type & Lexeme_1.TokenType.Literal) &&
549
+ typeof firstArg.value === 'string' &&
550
+ isNaN(Number(firstArg.value));
551
+ // If first argument is a string literal, it's a function call
552
+ // DATE('2025-01-01') -> function
553
+ // DATE(6) -> type constructor
554
+ return !isStringLiteral;
555
+ }
556
+ }
557
+ // Default: assume it's a function call for ambiguous cases
558
+ return false;
559
+ }
560
+ }
561
+ exports.ValueParser = ValueParser;
562
+ //# sourceMappingURL=ValueParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ValueParser.js","sourceRoot":"","sources":["../../src/parsers/ValueParser.ts"],"names":[],"mappings":"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"}