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,314 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LexemeCursor = void 0;
4
+ const Lexeme_1 = require("../models/Lexeme");
5
+ const stringUtils_1 = require("./stringUtils");
6
+ /**
7
+ * Utility class for cursor-to-lexeme mapping in SQL text.
8
+ *
9
+ * Provides functionality to find lexemes at specific cursor positions for IDE integration.
10
+ * Handles SQL parsing with proper comment and whitespace handling for editor features.
11
+ *
12
+ * @example Basic usage
13
+ * ```typescript
14
+ * const sql = "SELECT id FROM users WHERE active = true";
15
+ * const lexeme = LexemeCursor.findLexemeAtPosition(sql, 7); // position at 'id'
16
+ * console.log(lexeme?.value); // 'id'
17
+ * ```
18
+ */
19
+ class LexemeCursor {
20
+ /**
21
+ * Find the lexeme at the specified line and column position.
22
+ *
23
+ * Designed for GUI editor integration where users select alias text.
24
+ * Uses 1-based line and column indexing to match editor conventions.
25
+ *
26
+ * @param sql - The SQL string to analyze
27
+ * @param position - Line and column position (1-based)
28
+ * @returns The lexeme at the position, or null if not found
29
+ *
30
+ * @example
31
+ * ```typescript
32
+ * const sql = "SELECT user_id FROM orders";
33
+ * const lexeme = LexemeCursor.findLexemeAtLineColumn(sql, { line: 1, column: 8 });
34
+ * console.log(lexeme?.value); // 'user_id'
35
+ * ```
36
+ */
37
+ static findLexemeAtLineColumn(sql, position) {
38
+ const charOffset = this.lineColumnToCharOffset(sql, position);
39
+ if (charOffset === -1) {
40
+ return null;
41
+ }
42
+ return this.findLexemeAtPosition(sql, charOffset);
43
+ }
44
+ /**
45
+ * Find the lexeme at the specified cursor position.
46
+ *
47
+ * Performs intelligent SQL parsing with proper comment and whitespace handling.
48
+ * Returns null if cursor is in whitespace or comments.
49
+ *
50
+ * @param sql - The SQL string to analyze
51
+ * @param cursorPosition - The cursor position (0-based character offset)
52
+ * @returns The lexeme at the position, or null if not found
53
+ *
54
+ * @example
55
+ * ```typescript
56
+ * const sql = "SELECT user_id FROM orders";
57
+ * const lexeme = LexemeCursor.findLexemeAtPosition(sql, 7);
58
+ * console.log(lexeme?.value); // 'user_id'
59
+ * ```
60
+ */
61
+ static findLexemeAtPosition(sql, cursorPosition) {
62
+ if (cursorPosition < 0 || cursorPosition >= sql.length) {
63
+ return null;
64
+ }
65
+ const lexemes = this.getAllLexemesWithPosition(sql);
66
+ for (const lexeme of lexemes) {
67
+ if (lexeme.position &&
68
+ cursorPosition >= lexeme.position.startPosition &&
69
+ cursorPosition < lexeme.position.endPosition) {
70
+ return lexeme;
71
+ }
72
+ }
73
+ return null;
74
+ }
75
+ /**
76
+ * Get all lexemes with position information from SQL text.
77
+ *
78
+ * Tokenizes the entire SQL string with precise position information.
79
+ * Useful for syntax highlighting, code analysis, and editor features.
80
+ *
81
+ * @param sql - The SQL string to tokenize
82
+ * @returns Array of lexemes with position information (excludes comments/whitespace)
83
+ *
84
+ * @example
85
+ * ```typescript
86
+ * const sql = "SELECT id FROM users";
87
+ * const lexemes = LexemeCursor.getAllLexemesWithPosition(sql);
88
+ * lexemes.forEach(l => console.log(`${l.value} at ${l.position.startPosition}`));
89
+ * ```
90
+ */
91
+ static getAllLexemesWithPosition(sql) {
92
+ if (!(sql === null || sql === void 0 ? void 0 : sql.trim())) {
93
+ return [];
94
+ }
95
+ try {
96
+ const lexemes = [];
97
+ let position = 0;
98
+ while (position < sql.length) {
99
+ position = this.skipWhitespaceAndComments(sql, position);
100
+ if (position >= sql.length) {
101
+ break;
102
+ }
103
+ const lexeme = this.parseNextToken(sql, position);
104
+ if (lexeme) {
105
+ lexemes.push(lexeme);
106
+ position = lexeme.position.endPosition;
107
+ }
108
+ else {
109
+ position++; // Skip unknown character
110
+ }
111
+ }
112
+ return lexemes;
113
+ }
114
+ catch (error) {
115
+ return [];
116
+ }
117
+ }
118
+ /**
119
+ * Skip whitespace and comments, returning new position
120
+ */
121
+ static skipWhitespaceAndComments(sql, position) {
122
+ const result = stringUtils_1.StringUtils.readWhiteSpaceAndComment(sql, position);
123
+ return result.position;
124
+ }
125
+ /**
126
+ * Parse the next token starting at the given position
127
+ */
128
+ static parseNextToken(sql, startPos) {
129
+ const char = sql[startPos];
130
+ // String literals
131
+ if (char === "'" || char === '"') {
132
+ return this.parseStringLiteral(sql, startPos);
133
+ }
134
+ // Operators and special characters
135
+ if (/[=<>!+\-*/%().*]/.test(char)) {
136
+ return this.parseOperator(sql, startPos);
137
+ }
138
+ // Comma
139
+ if (char === ',') {
140
+ return this.createLexeme(Lexeme_1.TokenType.Comma, ',', startPos, startPos + 1);
141
+ }
142
+ // Word tokens (identifiers, commands, functions)
143
+ if (/[a-zA-Z0-9_]/.test(char)) {
144
+ return this.parseWordToken(sql, startPos);
145
+ }
146
+ return null;
147
+ }
148
+ /**
149
+ * Parse string literal tokens
150
+ */
151
+ static parseStringLiteral(sql, startPos) {
152
+ const quote = sql[startPos];
153
+ let position = startPos + 1;
154
+ let token = quote;
155
+ while (position < sql.length && sql[position] !== quote) {
156
+ token += sql[position++];
157
+ }
158
+ if (position < sql.length) {
159
+ token += sql[position++]; // closing quote
160
+ }
161
+ return this.createLexeme(Lexeme_1.TokenType.Literal, token, startPos, position);
162
+ }
163
+ /**
164
+ * Parse operator tokens
165
+ */
166
+ static parseOperator(sql, startPos) {
167
+ let token = sql[startPos];
168
+ let position = startPos + 1;
169
+ // Handle compound operators (<=, >=, !=, etc.)
170
+ if (position < sql.length && /[=<>!]/.test(sql[position]) && /[=<>!]/.test(token)) {
171
+ token += sql[position++];
172
+ }
173
+ const tokenType = this.getOperatorTokenType(token);
174
+ return this.createLexeme(tokenType, token, startPos, position);
175
+ }
176
+ /**
177
+ * Parse word tokens (identifiers, commands, functions)
178
+ */
179
+ static parseWordToken(sql, startPos) {
180
+ let position = startPos;
181
+ let token = '';
182
+ while (position < sql.length && /[a-zA-Z0-9_]/.test(sql[position])) {
183
+ token += sql[position++];
184
+ }
185
+ const tokenType = this.getWordTokenType(token, sql, position);
186
+ const value = this.shouldLowercase(tokenType) ? token.toLowerCase() : token;
187
+ return this.createLexeme(tokenType, value, startPos, position);
188
+ }
189
+ /**
190
+ * Determine the token type for operators
191
+ */
192
+ static getOperatorTokenType(token) {
193
+ switch (token) {
194
+ case '(': return Lexeme_1.TokenType.OpenParen;
195
+ case ')': return Lexeme_1.TokenType.CloseParen;
196
+ case '*': return Lexeme_1.TokenType.Identifier; // Treat * as identifier for SELECT *
197
+ default: return Lexeme_1.TokenType.Operator;
198
+ }
199
+ }
200
+ /**
201
+ * Determine the token type for word tokens
202
+ */
203
+ static getWordTokenType(token, sql, position) {
204
+ const lowerToken = token.toLowerCase();
205
+ // Check if it's a command
206
+ if (this.SQL_COMMANDS.has(lowerToken)) {
207
+ return Lexeme_1.TokenType.Command;
208
+ }
209
+ // Check if it's followed by parentheses (function)
210
+ const nextNonWhitespacePos = this.skipWhitespaceAndComments(sql, position);
211
+ if (nextNonWhitespacePos < sql.length && sql[nextNonWhitespacePos] === '(') {
212
+ return Lexeme_1.TokenType.Function;
213
+ }
214
+ return Lexeme_1.TokenType.Identifier;
215
+ }
216
+ /**
217
+ * Check if token value should be lowercased
218
+ */
219
+ static shouldLowercase(tokenType) {
220
+ return !!(tokenType & Lexeme_1.TokenType.Command) ||
221
+ !!(tokenType & Lexeme_1.TokenType.Operator) ||
222
+ !!(tokenType & Lexeme_1.TokenType.Function);
223
+ }
224
+ /**
225
+ * Create a lexeme with position information
226
+ */
227
+ static createLexeme(type, value, startPos, endPos) {
228
+ return {
229
+ type,
230
+ value,
231
+ comments: null,
232
+ position: {
233
+ startPosition: startPos,
234
+ endPosition: endPos
235
+ }
236
+ };
237
+ }
238
+ /**
239
+ * Convert line and column position to character offset.
240
+ *
241
+ * @param sql - The SQL string
242
+ * @param position - Line and column position (1-based)
243
+ * @returns Character offset (0-based), or -1 if position is out of bounds
244
+ */
245
+ static lineColumnToCharOffset(sql, position) {
246
+ if (position.line < 1 || position.column < 1) {
247
+ return -1;
248
+ }
249
+ const lines = sql.split('\n');
250
+ if (position.line > lines.length) {
251
+ return -1; // Line out of bounds
252
+ }
253
+ const targetLine = lines[position.line - 1];
254
+ if (position.column > targetLine.length + 1) {
255
+ return -1; // Column out of bounds
256
+ }
257
+ // Calculate character offset
258
+ let offset = 0;
259
+ for (let i = 0; i < position.line - 1; i++) {
260
+ offset += lines[i].length + 1; // +1 for newline character
261
+ }
262
+ offset += position.column - 1;
263
+ return offset;
264
+ }
265
+ /**
266
+ * Convert character offset to line and column position.
267
+ *
268
+ * @param sql - The SQL string
269
+ * @param charOffset - Character offset (0-based)
270
+ * @returns Line and column position (1-based), or null if offset is out of bounds
271
+ */
272
+ static charOffsetToLineColumn(sql, charOffset) {
273
+ if (charOffset < 0 || charOffset > sql.length) {
274
+ return null;
275
+ }
276
+ const lines = sql.split('\n');
277
+ let currentOffset = 0;
278
+ for (let lineIndex = 0; lineIndex < lines.length; lineIndex++) {
279
+ const lineLength = lines[lineIndex].length;
280
+ // Check if the offset is within this line
281
+ if (charOffset < currentOffset + lineLength) {
282
+ return {
283
+ line: lineIndex + 1,
284
+ column: charOffset - currentOffset + 1
285
+ };
286
+ }
287
+ // Check if the offset is exactly at the end of this line (newline position)
288
+ if (charOffset === currentOffset + lineLength && lineIndex < lines.length - 1) {
289
+ // Position at newline - return start of next line
290
+ return {
291
+ line: lineIndex + 2,
292
+ column: 1
293
+ };
294
+ }
295
+ currentOffset += lineLength + 1; // +1 for newline character
296
+ }
297
+ // Handle position at the very end of the text
298
+ if (charOffset === sql.length) {
299
+ const lastLine = lines[lines.length - 1];
300
+ return {
301
+ line: lines.length,
302
+ column: lastLine.length + 1
303
+ };
304
+ }
305
+ return null;
306
+ }
307
+ }
308
+ exports.LexemeCursor = LexemeCursor;
309
+ LexemeCursor.SQL_COMMANDS = new Set([
310
+ 'select', 'from', 'where', 'and', 'or', 'order', 'by', 'group', 'having',
311
+ 'limit', 'offset', 'as', 'on', 'inner', 'left', 'right', 'join', 'union',
312
+ 'insert', 'update', 'delete', 'into', 'values', 'set'
313
+ ]);
314
+ //# sourceMappingURL=LexemeCursor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LexemeCursor.js","sourceRoot":"","sources":["../../src/utils/LexemeCursor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,292 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MultiQueryUtils = exports.MultiQuerySplitter = void 0;
4
+ const TextPositionUtils_1 = require("./TextPositionUtils");
5
+ /**
6
+ * Splits SQL text containing multiple queries separated by semicolons
7
+ *
8
+ * Provides sophisticated query boundary detection that properly handles:
9
+ * - String literals containing semicolons
10
+ * - Comments containing semicolons
11
+ * - Nested structures and complex SQL
12
+ * - Empty queries and whitespace handling
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * const multiSQL = `
17
+ * -- First query
18
+ * SELECT 'hello;world' FROM users;
19
+ *
20
+ * // Second query with comment
21
+ * SELECT id FROM orders WHERE status = 'active';
22
+ *
23
+ * -- Empty query
24
+ * ;
25
+ * `;
26
+ *
27
+ * const queries = MultiQuerySplitter.split(multiSQL);
28
+ * console.log(queries.queries.length); // 3 queries
29
+ *
30
+ * // Find query at cursor position
31
+ * const active = queries.getActive(150);
32
+ * console.log(active?.sql); // Query containing position 150
33
+ * ```
34
+ */
35
+ class MultiQuerySplitter {
36
+ /**
37
+ * Split multi-query SQL text into individual queries
38
+ *
39
+ * @param text - SQL text that may contain multiple queries separated by semicolons
40
+ * @returns Collection of individual queries with position information
41
+ */
42
+ static split(text) {
43
+ const queries = [];
44
+ // Handle completely empty or whitespace-only text
45
+ if (!text || text.trim() === '') {
46
+ return {
47
+ queries: [],
48
+ originalText: text,
49
+ getActive: () => undefined,
50
+ getQuery: () => undefined,
51
+ getNonEmpty: () => []
52
+ };
53
+ }
54
+ const rawBoundaries = this.splitRespectingQuotesAndComments(text);
55
+ const boundaries = this.mergeTrailingCommentSegments(rawBoundaries, text);
56
+ let queryIndex = 0;
57
+ for (const boundary of boundaries) {
58
+ const rawSql = boundary.text.trim();
59
+ const isEmpty = this.isEmptyQuery(rawSql);
60
+ // Use raw SQL as-is - boundaries are already correctly split by valid semicolons
61
+ const sql = rawSql;
62
+ const startLineCol = TextPositionUtils_1.TextPositionUtils.charOffsetToLineColumn(text, boundary.start);
63
+ const endLineCol = TextPositionUtils_1.TextPositionUtils.charOffsetToLineColumn(text, boundary.end);
64
+ queries.push({
65
+ sql,
66
+ start: boundary.start,
67
+ end: boundary.end,
68
+ startLine: (startLineCol === null || startLineCol === void 0 ? void 0 : startLineCol.line) || 1,
69
+ endLine: (endLineCol === null || endLineCol === void 0 ? void 0 : endLineCol.line) || 1,
70
+ index: queryIndex++,
71
+ isEmpty
72
+ });
73
+ }
74
+ return {
75
+ queries,
76
+ originalText: text,
77
+ getActive: (cursorPosition) => {
78
+ const charPos = typeof cursorPosition === 'number'
79
+ ? cursorPosition
80
+ : TextPositionUtils_1.TextPositionUtils.lineColumnToCharOffset(text, cursorPosition);
81
+ if (charPos === -1)
82
+ return undefined;
83
+ return queries.find(query => charPos >= query.start && charPos <= query.end);
84
+ },
85
+ getQuery: (index) => {
86
+ return queries[index];
87
+ },
88
+ getNonEmpty: () => {
89
+ return queries.filter(q => !q.isEmpty);
90
+ }
91
+ };
92
+ }
93
+ /**
94
+ * Get query boundaries from SQL text with proper semicolon handling
95
+ *
96
+ * @param text - SQL text to analyze
97
+ * @returns Array of boundary positions
98
+ */
99
+ /**
100
+ * Split text by semicolons while respecting quotes and comments
101
+ */
102
+ static splitRespectingQuotesAndComments(text) {
103
+ const segments = [];
104
+ let currentStart = 0;
105
+ let i = 0;
106
+ while (i <= text.length) {
107
+ // Check if we're at a valid semicolon or end of text
108
+ const isValidBreakpoint = (i === text.length) || (i < text.length && this.isValidSemicolon(text, i));
109
+ if (isValidBreakpoint) {
110
+ const segmentText = text.substring(currentStart, i);
111
+ if (segmentText.length > 0 || i < text.length) {
112
+ segments.push({
113
+ text: segmentText,
114
+ start: currentStart,
115
+ end: i
116
+ });
117
+ }
118
+ currentStart = i + 1;
119
+ }
120
+ i++;
121
+ }
122
+ return segments;
123
+ }
124
+ /**
125
+ * Check if character at position is a valid semicolon (not in quotes/comments)
126
+ */
127
+ static isValidSemicolon(text, pos) {
128
+ if (text[pos] !== ';')
129
+ return false;
130
+ // Check if this semicolon is inside quotes or comments by scanning from start
131
+ let inSingleQuote = false;
132
+ let inDoubleQuote = false;
133
+ let inLineComment = false;
134
+ let inBlockComment = false;
135
+ for (let i = 0; i < pos; i++) {
136
+ const char = text[i];
137
+ const nextChar = i + 1 < text.length ? text[i + 1] : '';
138
+ // Handle line comments
139
+ if (!inSingleQuote && !inDoubleQuote && !inBlockComment &&
140
+ char === '-' && nextChar === '-') {
141
+ inLineComment = true;
142
+ i++; // Skip next character
143
+ continue;
144
+ }
145
+ if (inLineComment && char === '\n') {
146
+ inLineComment = false;
147
+ continue;
148
+ }
149
+ // Handle block comments
150
+ if (!inSingleQuote && !inDoubleQuote && !inLineComment &&
151
+ char === '/' && nextChar === '*') {
152
+ inBlockComment = true;
153
+ i++; // Skip next character
154
+ continue;
155
+ }
156
+ if (inBlockComment && char === '*' && nextChar === '/') {
157
+ inBlockComment = false;
158
+ i++; // Skip next character
159
+ continue;
160
+ }
161
+ // Skip if in any comment
162
+ if (inLineComment || inBlockComment) {
163
+ continue;
164
+ }
165
+ // Handle quotes
166
+ if (char === "'" && !inDoubleQuote) {
167
+ if (inSingleQuote && nextChar === "'") {
168
+ i++; // Skip escaped quote
169
+ }
170
+ else {
171
+ inSingleQuote = !inSingleQuote;
172
+ }
173
+ continue;
174
+ }
175
+ if (char === '"' && !inSingleQuote) {
176
+ if (inDoubleQuote && nextChar === '"') {
177
+ i++; // Skip escaped quote
178
+ }
179
+ else {
180
+ inDoubleQuote = !inDoubleQuote;
181
+ }
182
+ continue;
183
+ }
184
+ }
185
+ // Return false if we're inside quotes or comments at this position
186
+ return !inSingleQuote && !inDoubleQuote && !inLineComment && !inBlockComment;
187
+ }
188
+ /**
189
+ * Merge comment-only segments with previous executable segments
190
+ */
191
+ static mergeTrailingCommentSegments(segments, fullText) {
192
+ const merged = [];
193
+ for (let i = 0; i < segments.length; i++) {
194
+ const segment = segments[i];
195
+ const segmentText = segment.text.trim();
196
+ // Check if this segment contains only comments/whitespace (no executable SQL)
197
+ const isCommentOnly = this.isEmptyQuery(segmentText);
198
+ if (isCommentOnly && merged.length > 0) {
199
+ // Only merge if this appears to be a trailing line comment (starts with --)
200
+ // and the previous segment contains executable SQL
201
+ const lastSegmentText = merged[merged.length - 1].text.trim();
202
+ const isTrailingLineComment = segmentText.startsWith('--');
203
+ const previousHasSQL = !this.isEmptyQuery(lastSegmentText);
204
+ if (isTrailingLineComment && previousHasSQL) {
205
+ // Merge trailing line comment with previous SQL segment
206
+ const lastSegment = merged[merged.length - 1];
207
+ merged[merged.length - 1] = {
208
+ text: fullText.substring(lastSegment.start, segment.end),
209
+ start: lastSegment.start,
210
+ end: segment.end
211
+ };
212
+ }
213
+ else {
214
+ // Keep as separate segment (empty query or standalone comment)
215
+ merged.push(segment);
216
+ }
217
+ }
218
+ else {
219
+ // Add as new segment
220
+ merged.push(segment);
221
+ }
222
+ }
223
+ return merged;
224
+ }
225
+ /**
226
+ * Clean SQL comments and extract SQL statements
227
+ *
228
+ * @param sql - SQL query text
229
+ * @returns Cleaned SQL text or null if no SQL remains
230
+ */
231
+ static cleanSqlComments(sql) {
232
+ if (!sql)
233
+ return null;
234
+ // Remove comments and extract SQL
235
+ let cleaned = sql;
236
+ // Remove line comments - standard SQL behavior: -- comments out to end of line
237
+ cleaned = cleaned.split('\n').map(line => {
238
+ const commentStart = line.indexOf('--');
239
+ if (commentStart >= 0) {
240
+ return line.substring(0, commentStart);
241
+ }
242
+ return line;
243
+ }).join('\n');
244
+ // Remove block comments
245
+ cleaned = cleaned.replace(/\/\*[\s\S]*?\*\//g, '');
246
+ const result = cleaned.trim();
247
+ return result.length > 0 ? result : null;
248
+ }
249
+ static isEmptyQuery(sql) {
250
+ if (!sql)
251
+ return true;
252
+ return this.cleanSqlComments(sql) === null;
253
+ }
254
+ }
255
+ exports.MultiQuerySplitter = MultiQuerySplitter;
256
+ /**
257
+ * Utility functions for working with query collections
258
+ */
259
+ class MultiQueryUtils {
260
+ /**
261
+ * Get context information for IntelliSense at a cursor position
262
+ *
263
+ * @param text - Multi-query SQL text
264
+ * @param cursorPosition - Cursor position
265
+ * @returns Active query and position within that query
266
+ */
267
+ static getContextAt(text, cursorPosition) {
268
+ const queries = MultiQuerySplitter.split(text);
269
+ const activeQuery = queries.getActive(cursorPosition);
270
+ if (!activeQuery)
271
+ return undefined;
272
+ const charPos = typeof cursorPosition === 'number'
273
+ ? cursorPosition
274
+ : TextPositionUtils_1.TextPositionUtils.lineColumnToCharOffset(text, cursorPosition);
275
+ if (charPos === -1)
276
+ return undefined;
277
+ const relativePosition = charPos - activeQuery.start;
278
+ return { query: activeQuery, relativePosition };
279
+ }
280
+ /**
281
+ * Extract all non-empty queries from multi-query text
282
+ *
283
+ * @param text - Multi-query SQL text
284
+ * @returns Array of query SQL strings
285
+ */
286
+ static extractQueries(text) {
287
+ const queries = MultiQuerySplitter.split(text);
288
+ return queries.getNonEmpty().map(q => q.sql);
289
+ }
290
+ }
291
+ exports.MultiQueryUtils = MultiQueryUtils;
292
+ //# sourceMappingURL=MultiQuerySplitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MultiQuerySplitter.js","sourceRoot":"","sources":["../../src/utils/MultiQuerySplitter.ts"],"names":[],"mappings":"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"}