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,553 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SqlTokenizer = void 0;
4
+ const Lexeme_1 = require("../models/Lexeme");
5
+ const CommandTokenReader_1 = require("../tokenReaders/CommandTokenReader");
6
+ const EscapedIdentifierTokenReader_1 = require("../tokenReaders/EscapedIdentifierTokenReader");
7
+ const FunctionTokenReader_1 = require("../tokenReaders/FunctionTokenReader");
8
+ const IdentifierTokenReader_1 = require("../tokenReaders/IdentifierTokenReader");
9
+ const LiteralTokenReader_1 = require("../tokenReaders/LiteralTokenReader");
10
+ const OperatorTokenReader_1 = require("../tokenReaders/OperatorTokenReader");
11
+ const ParameterTokenReader_1 = require("../tokenReaders/ParameterTokenReader");
12
+ const SymbolTokenReader_1 = require("../tokenReaders/SymbolTokenReader");
13
+ const StringSpecifierTokenReader_1 = require("../tokenReaders/StringSpecifierTokenReader");
14
+ const TokenReaderManager_1 = require("../tokenReaders/TokenReaderManager");
15
+ const TypeTokenReader_1 = require("../tokenReaders/TypeTokenReader");
16
+ const stringUtils_1 = require("../utils/stringUtils");
17
+ /**
18
+ * Class responsible for tokenizing SQL input.
19
+ */
20
+ class SqlTokenizer {
21
+ /**
22
+ * Initializes a new instance of the SqlTokenizer.
23
+ */
24
+ constructor(input) {
25
+ /**
26
+ * Cached start offsets for each line in the input string.
27
+ */
28
+ this.lineStartPositions = null;
29
+ this.input = input;
30
+ this.position = 0;
31
+ // Initialize the token reader manager and register all readers
32
+ this.readerManager = new TokenReaderManager_1.TokenReaderManager(input)
33
+ .register(new EscapedIdentifierTokenReader_1.EscapedIdentifierTokenReader(input))
34
+ .register(new ParameterTokenReader_1.ParameterTokenReader(input))
35
+ .register(new StringSpecifierTokenReader_1.StringSpecifierTokenReader(input))
36
+ // LiteralTokenReader should be registered before SpecialSymbolTokenReader and OperatorTokenReader
37
+ // Reason: To prevent numeric literals starting with a dot or sign from being misrecognized as operators
38
+ // e.g. `1.0` is a literal, not an operator
39
+ .register(new LiteralTokenReader_1.LiteralTokenReader(input))
40
+ .register(new SymbolTokenReader_1.SpecialSymbolTokenReader(input))
41
+ .register(new CommandTokenReader_1.CommandTokenReader(input))
42
+ .register(new OperatorTokenReader_1.OperatorTokenReader(input))
43
+ // TypeTokenReader should be registered before FunctionTokenReader
44
+ // Reason: To prevent types containing parentheses from being misrecognized as functions
45
+ // e.g. `numeric(10, 2)` is a type, not a function
46
+ .register(new TypeTokenReader_1.TypeTokenReader(input))
47
+ .register(new FunctionTokenReader_1.FunctionTokenReader(input))
48
+ .register(new IdentifierTokenReader_1.IdentifierTokenReader(input)) // IdentifierTokenReader should be registered last
49
+ ;
50
+ }
51
+ /**
52
+ * Checks if the end of input is reached.
53
+ *
54
+ * @param shift - The shift to consider beyond the current position.
55
+ * @returns True if the end of input is reached; otherwise, false.
56
+ */
57
+ isEndOfInput(shift = 0) {
58
+ return this.position + shift >= this.input.length;
59
+ }
60
+ /**
61
+ * Checks if more input can be read.
62
+ *
63
+ * @param shift - The shift to consider beyond the current position.
64
+ * @returns True if more input can be read; otherwise, false.
65
+ */
66
+ canRead(shift = 0) {
67
+ return !this.isEndOfInput(shift);
68
+ }
69
+ tokenize(options) {
70
+ if (options === null || options === void 0 ? void 0 : options.preserveFormatting) {
71
+ return this.tokenizeWithFormatting();
72
+ }
73
+ // Create a fresh tokenizer instance for clean state
74
+ const freshTokenizer = new SqlTokenizer(this.input);
75
+ return freshTokenizer.readLexemes();
76
+ }
77
+ /**
78
+ * @deprecated Use {@link readLexemes} (correct spelling) instead.
79
+ * This legacy alias remains for backwards compatibility and delegates to the new method.
80
+ */
81
+ readLexmes() {
82
+ return this.readLexemes();
83
+ }
84
+ /**
85
+ * Reads the lexemes from the input string.
86
+ *
87
+ * @returns An array of lexemes extracted from the input string.
88
+ * @throws Error if an unexpected character is encountered.
89
+ */
90
+ readLexemes() {
91
+ const segment = this.readNextStatement(0);
92
+ return segment ? segment.lexemes : [];
93
+ }
94
+ /**
95
+ * Tokenizes the input SQL without formatting preservation (internal method)
96
+ */
97
+ tokenizeBasic() {
98
+ const segment = this.readNextStatement(0);
99
+ return segment ? segment.lexemes : [];
100
+ }
101
+ readNextStatement(startPosition = 0, carryComments = null) {
102
+ const length = this.input.length;
103
+ // Abort when the cursor already moved past the input.
104
+ if (startPosition >= length) {
105
+ return null;
106
+ }
107
+ // Adopt a working cursor so the original tokenizer state is untouched.
108
+ this.position = startPosition;
109
+ const statementStart = startPosition;
110
+ let pendingLeading = carryComments ? [...carryComments] : null;
111
+ const tokenData = [];
112
+ let previous = null;
113
+ while (this.canRead()) {
114
+ // Fold whitespace and comments into the token stream and advance to the next significant character.
115
+ const prefixComment = this.readComment();
116
+ this.position = prefixComment.position;
117
+ if (!this.canRead()) {
118
+ // No more characters, so keep any trailing comments for the next statement.
119
+ pendingLeading = this.mergeComments(pendingLeading, prefixComment.lines);
120
+ break;
121
+ }
122
+ if (this.input[this.position] === ';') {
123
+ // Statement terminated before any token appeared.
124
+ pendingLeading = this.mergeComments(pendingLeading, prefixComment.lines);
125
+ break;
126
+ }
127
+ // Read the next lexeme at the current position.
128
+ const lexeme = this.readerManager.tryRead(this.position, previous);
129
+ if (lexeme === null) {
130
+ throw new Error(`Unexpected character. actual: ${this.input[this.position]}, position: ${this.position}\n${this.getDebugPositionInfo(this.position)}`);
131
+ }
132
+ const tokenStartPos = this.position;
133
+ const tokenEndPos = this.position = this.readerManager.getMaxPosition();
134
+ // Capture trailing whitespace and comments after the token.
135
+ const suffixComment = this.readComment();
136
+ this.position = suffixComment.position;
137
+ let prefixComments = this.mergeComments(pendingLeading, prefixComment.lines);
138
+ pendingLeading = null;
139
+ tokenData.push({
140
+ lexeme,
141
+ startPos: tokenStartPos,
142
+ endPos: tokenEndPos,
143
+ prefixComments,
144
+ suffixComments: suffixComment.lines
145
+ });
146
+ previous = lexeme;
147
+ }
148
+ const statementEnd = this.position;
149
+ const lexemes = this.buildLexemesFromTokenData(tokenData);
150
+ const nextPosition = this.skipPastTerminator(statementEnd);
151
+ return {
152
+ lexemes,
153
+ statementStart,
154
+ statementEnd,
155
+ nextPosition,
156
+ rawText: this.input.slice(statementStart, statementEnd),
157
+ leadingComments: pendingLeading
158
+ };
159
+ }
160
+ buildLexemesFromTokenData(tokenData) {
161
+ const lexemes = new Array(tokenData.length);
162
+ for (let i = 0; i < tokenData.length; i++) {
163
+ const current = tokenData[i];
164
+ const lexeme = current.lexeme;
165
+ // Redirect SELECT suffix comments to the first meaningful select item.
166
+ if (lexeme.value.toLowerCase() === 'select' && current.suffixComments && current.suffixComments.length > 0) {
167
+ const suffixComments = current.suffixComments;
168
+ let targetIndex = i + 1;
169
+ while (targetIndex < tokenData.length) {
170
+ const target = tokenData[targetIndex];
171
+ // Allow SELECT-prefix comments to bind to '*' tokens so they stay with the select list.
172
+ const isStarOperator = (target.lexeme.type & Lexeme_1.TokenType.Operator) && target.lexeme.value === '*';
173
+ if ((target.lexeme.type & Lexeme_1.TokenType.Identifier) ||
174
+ (target.lexeme.type & Lexeme_1.TokenType.Literal) ||
175
+ isStarOperator ||
176
+ (!(target.lexeme.type & Lexeme_1.TokenType.Command) &&
177
+ !(target.lexeme.type & Lexeme_1.TokenType.Comma) &&
178
+ !(target.lexeme.type & Lexeme_1.TokenType.Operator))) {
179
+ if (!target.prefixComments) {
180
+ target.prefixComments = [];
181
+ }
182
+ target.prefixComments.unshift(...suffixComments);
183
+ current.suffixComments = null;
184
+ break;
185
+ }
186
+ targetIndex++;
187
+ }
188
+ }
189
+ if (lexeme.value.toLowerCase() === 'from' && current.suffixComments && current.suffixComments.length > 0) {
190
+ const suffixComments = current.suffixComments;
191
+ let targetIndex = i + 1;
192
+ while (targetIndex < tokenData.length) {
193
+ const target = tokenData[targetIndex];
194
+ // Attach FROM suffix comments to the immediately following source token.
195
+ const isCommand = (target.lexeme.type & Lexeme_1.TokenType.Command) !== 0;
196
+ if (!isCommand) {
197
+ if (!target.prefixComments) {
198
+ target.prefixComments = [];
199
+ }
200
+ target.prefixComments.unshift(...suffixComments);
201
+ current.suffixComments = null;
202
+ break;
203
+ }
204
+ targetIndex++;
205
+ }
206
+ }
207
+ // Ensure commas push trailing comments onto the following token.
208
+ if ((lexeme.type & Lexeme_1.TokenType.Comma) && current.suffixComments && current.suffixComments.length > 0) {
209
+ const suffixComments = current.suffixComments;
210
+ let targetIndex = i + 1;
211
+ if (targetIndex < tokenData.length) {
212
+ const target = tokenData[targetIndex];
213
+ if (!target.prefixComments) {
214
+ target.prefixComments = [];
215
+ }
216
+ target.prefixComments.unshift(...suffixComments);
217
+ current.suffixComments = null;
218
+ }
219
+ }
220
+ // Bridge set-operator suffix comments to the subsequent SELECT clause.
221
+ if ((lexeme.value.toLowerCase() === 'union' ||
222
+ lexeme.value.toLowerCase() === 'intersect' ||
223
+ lexeme.value.toLowerCase() === 'except') &&
224
+ current.suffixComments && current.suffixComments.length > 0) {
225
+ const suffixComments = current.suffixComments;
226
+ let targetIndex = i + 1;
227
+ while (targetIndex < tokenData.length) {
228
+ const target = tokenData[targetIndex];
229
+ if (target.lexeme.value.toLowerCase() === 'select') {
230
+ if (!target.prefixComments) {
231
+ target.prefixComments = [];
232
+ }
233
+ target.prefixComments.unshift(...suffixComments);
234
+ current.suffixComments = null;
235
+ break;
236
+ }
237
+ targetIndex++;
238
+ }
239
+ }
240
+ this.attachCommentsToLexeme(lexeme, current);
241
+ // Attach source position metadata so downstream parsers can report precise locations.
242
+ lexeme.position = {
243
+ startPosition: current.startPos,
244
+ endPosition: current.endPos,
245
+ ...this.getLineColumnInfo(current.startPos, current.endPos)
246
+ };
247
+ lexemes[i] = lexeme;
248
+ }
249
+ this.relocateOrderByComments(lexemes);
250
+ return lexemes;
251
+ }
252
+ skipPastTerminator(position) {
253
+ let next = position;
254
+ if (next < this.input.length && this.input[next] === ';') {
255
+ next++;
256
+ }
257
+ return this.skipWhitespaceAndComments(next);
258
+ }
259
+ mergeComments(base, addition) {
260
+ if (addition && addition.length > 0) {
261
+ if (!base || base.length === 0) {
262
+ return [...addition];
263
+ }
264
+ return [...base, ...addition];
265
+ }
266
+ return base ? [...base] : null;
267
+ }
268
+ relocateOrderByComments(lexemes) {
269
+ // Move ORDER BY trailing comments onto the next token so the following expression inherits them.
270
+ for (let i = 0; i < lexemes.length - 1; i++) {
271
+ const current = lexemes[i];
272
+ if (current.value.toLowerCase() !== 'order by' || !current.positionedComments) {
273
+ continue;
274
+ }
275
+ // Gather only the trailing comment sets that should move with the clause.
276
+ const afterComments = current.positionedComments.filter(comment => comment.position === 'after' && comment.comments && comment.comments.length > 0);
277
+ if (afterComments.length === 0) {
278
+ continue;
279
+ }
280
+ // Strip the relocated comments from the ORDER BY token so duplicates do not remain.
281
+ current.positionedComments = current.positionedComments.filter(comment => comment.position !== 'after');
282
+ if (current.positionedComments.length === 0) {
283
+ current.positionedComments = undefined;
284
+ }
285
+ const target = lexemes[i + 1];
286
+ // Convert trailing comments into before-positioned comments for the next expression.
287
+ const beforeComments = afterComments.map(comment => ({
288
+ position: 'before',
289
+ comments: [...comment.comments],
290
+ }));
291
+ // Prepend the relocated comments so they remain adjacent to the next lexeme.
292
+ if (target.positionedComments && target.positionedComments.length > 0) {
293
+ target.positionedComments = [...beforeComments, ...target.positionedComments];
294
+ }
295
+ else {
296
+ target.positionedComments = beforeComments;
297
+ }
298
+ }
299
+ }
300
+ // Attach comments to lexeme directly (no collection then assignment anti-pattern)
301
+ attachCommentsToLexeme(lexeme, tokenData) {
302
+ const newPositionedComments = [];
303
+ const allLegacyComments = [];
304
+ // Preserve existing positioned comments from token readers (e.g., CommandTokenReader)
305
+ if (lexeme.positionedComments && lexeme.positionedComments.length > 0) {
306
+ newPositionedComments.push(...lexeme.positionedComments);
307
+ }
308
+ // Add prefix comments as "before" positioned comments directly
309
+ if (tokenData.prefixComments && tokenData.prefixComments.length > 0) {
310
+ allLegacyComments.push(...tokenData.prefixComments);
311
+ newPositionedComments.push({
312
+ position: 'before',
313
+ comments: [...tokenData.prefixComments]
314
+ });
315
+ }
316
+ // Add suffix comments as "after" positioned comments directly
317
+ if (tokenData.suffixComments && tokenData.suffixComments.length > 0) {
318
+ allLegacyComments.push(...tokenData.suffixComments);
319
+ newPositionedComments.push({
320
+ position: 'after',
321
+ comments: [...tokenData.suffixComments]
322
+ });
323
+ }
324
+ // Apply comments directly to lexeme (positioned comments take priority)
325
+ if (newPositionedComments.length > 0) {
326
+ lexeme.positionedComments = newPositionedComments;
327
+ // Clear legacy comments when positioned comments exist to avoid duplication
328
+ lexeme.comments = null;
329
+ }
330
+ else if (allLegacyComments.length > 0) {
331
+ // Only set legacy comments if no positioned comments exist
332
+ lexeme.comments = allLegacyComments;
333
+ lexeme.positionedComments = undefined;
334
+ }
335
+ else {
336
+ // Clear both if no comments exist
337
+ lexeme.comments = null;
338
+ lexeme.positionedComments = undefined;
339
+ }
340
+ }
341
+ /**
342
+ * Skips whitespace characters and SQL comments in the input.
343
+ *
344
+ * @remarks This method updates the position pointer.
345
+ */
346
+ readComment() {
347
+ return stringUtils_1.StringUtils.readWhiteSpaceAndComment(this.input, this.position);
348
+ }
349
+ /**
350
+ * Gets debug information for error reporting.
351
+ *
352
+ * @param errPosition - The position where the error occurred.
353
+ * @returns A string containing the debug position information.
354
+ */
355
+ getDebugPositionInfo(errPosition) {
356
+ return stringUtils_1.StringUtils.getDebugPositionInfo(this.input, errPosition);
357
+ }
358
+ /**
359
+ * Tokenizes the input SQL while preserving formatting information
360
+ */
361
+ tokenizeWithFormatting() {
362
+ // Get regular lexemes first
363
+ const regularLexemes = this.tokenizeBasic();
364
+ // Map regular lexemes to formatting lexemes with whitespace info
365
+ return this.mapToFormattingLexemes(regularLexemes);
366
+ }
367
+ mapToFormattingLexemes(regularLexemes) {
368
+ if (regularLexemes.length === 0) {
369
+ return [];
370
+ }
371
+ // First pass: find all lexeme positions in the input
372
+ const lexemePositions = [];
373
+ let searchPos = 0;
374
+ for (const lexeme of regularLexemes) {
375
+ // Skip whitespace and comments
376
+ searchPos = this.skipWhitespaceAndComments(searchPos);
377
+ // Find lexeme at current position
378
+ const lexemeInfo = this.findLexemeAtPosition(lexeme, searchPos);
379
+ if (lexemeInfo) {
380
+ lexemePositions.push(lexemeInfo);
381
+ searchPos = lexemeInfo.endPosition;
382
+ }
383
+ else {
384
+ // Fallback: assume lexeme length and continue
385
+ const fallbackInfo = {
386
+ startPosition: searchPos,
387
+ endPosition: searchPos + lexeme.value.length
388
+ };
389
+ lexemePositions.push(fallbackInfo);
390
+ searchPos = fallbackInfo.endPosition;
391
+ }
392
+ }
393
+ // Second pass: build formatting lexemes with proper whitespace segments
394
+ const formattingLexemes = [];
395
+ for (let i = 0; i < regularLexemes.length; i++) {
396
+ const lexeme = regularLexemes[i];
397
+ const lexemeInfo = lexemePositions[i];
398
+ // Determine the end position of the whitespace segment
399
+ const nextLexemeStartPos = i < regularLexemes.length - 1
400
+ ? lexemePositions[i + 1].startPosition
401
+ : this.input.length;
402
+ // Extract whitespace between this lexeme and the next
403
+ const whitespaceSegment = this.input.slice(lexemeInfo.endPosition, nextLexemeStartPos);
404
+ const inlineComments = this.extractCommentsFromWhitespace(whitespaceSegment);
405
+ const formattingLexeme = {
406
+ ...lexeme,
407
+ followingWhitespace: whitespaceSegment,
408
+ inlineComments,
409
+ position: {
410
+ startPosition: lexemeInfo.startPosition,
411
+ endPosition: lexemeInfo.endPosition,
412
+ ...this.getLineColumnInfo(lexemeInfo.startPosition, lexemeInfo.endPosition)
413
+ }
414
+ };
415
+ formattingLexemes.push(formattingLexeme);
416
+ }
417
+ return formattingLexemes;
418
+ }
419
+ /**
420
+ * Find lexeme at a specific position, handling case variations
421
+ */
422
+ findLexemeAtPosition(lexeme, expectedPos) {
423
+ if (expectedPos >= this.input.length) {
424
+ return null;
425
+ }
426
+ // For command tokens (keywords), the lexeme.value might be lowercase but appear uppercase in input
427
+ const valuesToTry = [lexeme.value, lexeme.value.toUpperCase(), lexeme.value.toLowerCase()];
428
+ for (const valueToTry of valuesToTry) {
429
+ // Check if the input at expected position matches this value
430
+ if (expectedPos + valueToTry.length <= this.input.length &&
431
+ this.input.substring(expectedPos, expectedPos + valueToTry.length) === valueToTry &&
432
+ this.isValidLexemeMatch(valueToTry, expectedPos)) {
433
+ return {
434
+ startPosition: expectedPos,
435
+ endPosition: expectedPos + valueToTry.length
436
+ };
437
+ }
438
+ }
439
+ return null;
440
+ }
441
+ isValidLexemeMatch(value, position) {
442
+ // Check character before
443
+ if (position > 0) {
444
+ const charBefore = this.input[position - 1];
445
+ if (this.isAlphanumericUnderscore(charBefore)) {
446
+ return false; // Part of another identifier
447
+ }
448
+ }
449
+ // Check character after
450
+ const endPosition = position + value.length;
451
+ if (endPosition < this.input.length) {
452
+ const charAfter = this.input[endPosition];
453
+ if (this.isAlphanumericUnderscore(charAfter)) {
454
+ return false; // Part of another identifier
455
+ }
456
+ }
457
+ return true;
458
+ }
459
+ /**
460
+ * Check if character is alphanumeric or underscore (faster than regex)
461
+ */
462
+ isAlphanumericUnderscore(char) {
463
+ const code = char.charCodeAt(0);
464
+ return (code >= 48 && code <= 57) || // 0-9
465
+ (code >= 65 && code <= 90) || // A-Z
466
+ (code >= 97 && code <= 122) || // a-z
467
+ code === 95; // _
468
+ }
469
+ /**
470
+ * Check if character is whitespace (faster than regex)
471
+ */
472
+ isWhitespace(char) {
473
+ const code = char.charCodeAt(0);
474
+ return code === 32 || // space
475
+ code === 9 || // tab
476
+ code === 10 || // \n
477
+ code === 13; // \r
478
+ }
479
+ extractCommentsFromWhitespace(whitespaceSegment) {
480
+ const inlineComments = [];
481
+ let pos = 0;
482
+ while (pos < whitespaceSegment.length) {
483
+ const oldPos = pos;
484
+ // Try to extract comments using StringUtils
485
+ const result = stringUtils_1.StringUtils.readWhiteSpaceAndComment(whitespaceSegment, pos);
486
+ // Add any comments found
487
+ const lines = result.lines;
488
+ if (lines && lines.length > 0) {
489
+ inlineComments.push(...lines);
490
+ }
491
+ // Move position forward
492
+ pos = result.position;
493
+ // Prevent infinite loop - if position didn't advance, manually skip one character
494
+ if (pos === oldPos) {
495
+ pos++;
496
+ }
497
+ }
498
+ return inlineComments;
499
+ }
500
+ /**
501
+ * Skip whitespace and comments from the given position
502
+ */
503
+ skipWhitespaceAndComments(pos) {
504
+ return stringUtils_1.StringUtils.readWhiteSpaceAndComment(this.input, pos).position;
505
+ }
506
+ getLineColumnInfo(startPos, endPos) {
507
+ const startInfo = this.getLineColumn(startPos);
508
+ const endInfo = this.getLineColumn(endPos);
509
+ return {
510
+ startLine: startInfo.line,
511
+ startColumn: startInfo.column,
512
+ endLine: endInfo.line,
513
+ endColumn: endInfo.column
514
+ };
515
+ }
516
+ getLineColumn(position) {
517
+ const starts = this.ensureLineStartPositions();
518
+ // Use binary search to locate the greatest line start that does not exceed position.
519
+ let low = 0;
520
+ let high = starts.length - 1;
521
+ while (low <= high) {
522
+ const mid = (low + high) >>> 1;
523
+ if (starts[mid] <= position) {
524
+ low = mid + 1;
525
+ }
526
+ else {
527
+ high = mid - 1;
528
+ }
529
+ }
530
+ const lineIndex = high >= 0 ? high : 0;
531
+ const lineStart = starts[lineIndex];
532
+ return {
533
+ line: lineIndex + 1,
534
+ column: position - lineStart + 1
535
+ };
536
+ }
537
+ ensureLineStartPositions() {
538
+ if (this.lineStartPositions) {
539
+ return this.lineStartPositions;
540
+ }
541
+ const starts = [0];
542
+ // Precompute the start index of each line so callers can map positions in O(log n).
543
+ for (let i = 0; i < this.input.length; i++) {
544
+ if (this.input.charCodeAt(i) === 10) { // '\n'
545
+ starts.push(i + 1);
546
+ }
547
+ }
548
+ this.lineStartPositions = starts;
549
+ return starts;
550
+ }
551
+ }
552
+ exports.SqlTokenizer = SqlTokenizer;
553
+ //# sourceMappingURL=SqlTokenizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SqlTokenizer.js","sourceRoot":"","sources":["../../src/parsers/SqlTokenizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StringSpecifierExpressionParser = void 0;
4
+ const Lexeme_1 = require("../models/Lexeme");
5
+ const ValueComponent_1 = require("../models/ValueComponent");
6
+ class StringSpecifierExpressionParser {
7
+ static parseFromLexeme(lexemes, index) {
8
+ let idx = index;
9
+ const specifer = lexemes[idx].value;
10
+ idx++;
11
+ if (idx >= lexemes.length || lexemes[idx].type !== Lexeme_1.TokenType.Literal) {
12
+ throw new Error(`Expected string literal after string specifier at index ${idx}`);
13
+ }
14
+ const value = lexemes[idx].value;
15
+ idx++;
16
+ // Create StringSpecifierExpression
17
+ const result = new ValueComponent_1.StringSpecifierExpression(specifer, value);
18
+ return { value: result, newIndex: idx };
19
+ }
20
+ }
21
+ exports.StringSpecifierExpressionParser = StringSpecifierExpressionParser;
22
+ //# sourceMappingURL=StringSpecifierExpressionParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StringSpecifierExpressionParser.js","sourceRoot":"","sources":["../../src/parsers/StringSpecifierExpressionParser.ts"],"names":[],"mappings":";;;AAAA,6CAAqD;AACrD,6DAAqF;AAErF,MAAa,+BAA+B;IACjC,MAAM,CAAC,eAAe,CAAC,OAAiB,EAAE,KAAa;QAC1D,IAAI,GAAG,GAAG,KAAK,CAAC;QAChB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;QACpC,GAAG,EAAE,CAAC;QACN,IAAI,GAAG,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,kBAAS,CAAC,OAAO,EAAE,CAAC;YACnE,MAAM,IAAI,KAAK,CAAC,2DAA2D,GAAG,EAAE,CAAC,CAAC;QACtF,CAAC;QACD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;QACjC,GAAG,EAAE,CAAC;QACN,mCAAmC;QACnC,MAAM,MAAM,GAAG,IAAI,0CAAyB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAE9D,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;IAC5C,CAAC;CACJ;AAfD,0EAeC"}
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UnaryExpressionParser = void 0;
4
+ const Lexeme_1 = require("../models/Lexeme");
5
+ const ValueComponent_1 = require("../models/ValueComponent");
6
+ const ValueParser_1 = require("./ValueParser");
7
+ class UnaryExpressionParser {
8
+ static parseFromLexeme(lexemes, index) {
9
+ let idx = index;
10
+ // Process unary operator
11
+ if (idx < lexemes.length && (lexemes[idx].type & Lexeme_1.TokenType.Operator)) {
12
+ const operatorLexeme = lexemes[idx];
13
+ const operator = operatorLexeme.value;
14
+ idx++;
15
+ // Treat the asterisk as an Identifier, not as a unary operator
16
+ if (operator === '*') {
17
+ const v = new ValueComponent_1.ColumnReference(null, '*');
18
+ return { value: v, newIndex: idx };
19
+ }
20
+ // Get the right-hand side value of the unary operator
21
+ const result = ValueParser_1.ValueParser.parseFromLexeme(lexemes, idx);
22
+ idx = result.newIndex;
23
+ // Create unary expression
24
+ const value = new ValueComponent_1.UnaryExpression(operator, result.value);
25
+ if (operatorLexeme.positionedComments && operatorLexeme.positionedComments.length > 0) {
26
+ // Carry positioned comments from the operator token onto the expression for precise placement
27
+ value.positionedComments = operatorLexeme.positionedComments;
28
+ }
29
+ else if (operatorLexeme.comments && operatorLexeme.comments.length > 0) {
30
+ // Fallback for legacy comment collection so older paths still retain notes
31
+ value.comments = operatorLexeme.comments;
32
+ }
33
+ return { value, newIndex: idx };
34
+ }
35
+ throw new Error(`Invalid unary expression at index ${index}: ${lexemes[index].value}`);
36
+ }
37
+ }
38
+ exports.UnaryExpressionParser = UnaryExpressionParser;
39
+ //# sourceMappingURL=UnaryExpressionParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UnaryExpressionParser.js","sourceRoot":"","sources":["../../src/parsers/UnaryExpressionParser.ts"],"names":[],"mappings":";;;AAAA,6CAAqD;AACrD,6DAA8G;AAC9G,+CAA4C;AAE5C,MAAa,qBAAqB;IACvB,MAAM,CAAC,eAAe,CAAC,OAAiB,EAAE,KAAa;QAC1D,IAAI,GAAG,GAAG,KAAK,CAAC;QAEhB,yBAAyB;QACzB,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,kBAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnE,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;YACpC,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,CAAC;YACtC,GAAG,EAAE,CAAC;YAEN,+DAA+D;YAC/D,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;gBACnB,MAAM,CAAC,GAAG,IAAI,gCAAe,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gBACzC,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;YACvC,CAAC;YAED,sDAAsD;YACtD,MAAM,MAAM,GAAG,yBAAW,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YACzD,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC;YAEtB,0BAA0B;YAC1B,MAAM,KAAK,GAAG,IAAI,gCAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YAE1D,IAAI,cAAc,CAAC,kBAAkB,IAAI,cAAc,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpF,8FAA8F;gBAC9F,KAAK,CAAC,kBAAkB,GAAG,cAAc,CAAC,kBAAkB,CAAC;YACjE,CAAC;iBAAM,IAAI,cAAc,CAAC,QAAQ,IAAI,cAAc,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvE,2EAA2E;gBAC3E,KAAK,CAAC,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC;YAC7C,CAAC;YAED,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;QACpC,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,qCAAqC,KAAK,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IAC3F,CAAC;CACJ;AApCD,sDAoCC"}