rawsql-ts 0.1.0-beta.5 → 0.1.0-beta.7

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 (266) hide show
  1. package/dist/index.d.ts +13 -0
  2. package/dist/models/BinarySelectQuery.d.ts +91 -0
  3. package/dist/models/Clause.d.ts +189 -0
  4. package/dist/models/KeywordTrie.d.ts +11 -0
  5. package/dist/models/Lexeme.d.ts +25 -0
  6. package/dist/models/SelectQuery.d.ts +5 -0
  7. package/dist/models/SimpleSelectQuery.d.ts +167 -0
  8. package/dist/models/SqlComponent.d.ts +18 -0
  9. package/dist/models/ValueComponent.d.ts +158 -0
  10. package/dist/models/ValuesQuery.d.ts +10 -0
  11. package/dist/parsers/CommandExpressionParser.d.ts +15 -0
  12. package/dist/parsers/CommonTableParser.d.ts +9 -0
  13. package/dist/parsers/ForClauseParser.d.ts +9 -0
  14. package/dist/parsers/FromClauseParser.d.ts +9 -0
  15. package/dist/parsers/FunctionExpressionParser.d.ts +22 -0
  16. package/dist/parsers/GroupByParser.d.ts +10 -0
  17. package/dist/parsers/HavingParser.d.ts +9 -0
  18. package/dist/parsers/IdentifierParser.d.ts +8 -0
  19. package/dist/parsers/JoinClauseParser.d.ts +14 -0
  20. package/dist/parsers/KeywordParser.d.ts +17 -0
  21. package/dist/parsers/LimitClauseParser.d.ts +9 -0
  22. package/dist/parsers/LiteralParser.d.ts +8 -0
  23. package/dist/parsers/OrderByClauseParser.d.ts +10 -0
  24. package/dist/parsers/OverExpressionParser.d.ts +9 -0
  25. package/dist/parsers/ParameterExpressionParser.d.ts +8 -0
  26. package/dist/parsers/ParenExpressionParser.d.ts +8 -0
  27. package/dist/parsers/PartitionByParser.d.ts +9 -0
  28. package/dist/parsers/SelectClauseParser.d.ts +10 -0
  29. package/dist/parsers/SelectQueryParser.d.ts +13 -0
  30. package/dist/parsers/SourceAliasExpressionParser.d.ts +8 -0
  31. package/dist/parsers/SourceExpressionParser.d.ts +8 -0
  32. package/dist/parsers/SourceParser.d.ts +13 -0
  33. package/dist/parsers/SqlTokenizer.d.ts +64 -0
  34. package/dist/parsers/StringSpecifierExpressionParser.d.ts +8 -0
  35. package/dist/parsers/UnaryExpressionParser.d.ts +8 -0
  36. package/dist/parsers/ValueParser.d.ts +14 -0
  37. package/dist/parsers/ValuesQueryParser.d.ts +10 -0
  38. package/dist/parsers/WhereClauseParser.d.ts +9 -0
  39. package/dist/parsers/WindowClauseParser.d.ts +9 -0
  40. package/dist/parsers/WindowExpressionParser.d.ts +12 -0
  41. package/dist/parsers/WithClauseParser.d.ts +9 -0
  42. package/dist/tokenReaders/BaseTokenReader.d.ts +43 -0
  43. package/dist/tokenReaders/CommandTokenReader.d.ts +7 -0
  44. package/dist/tokenReaders/FunctionTokenReader.d.ts +11 -0
  45. package/dist/tokenReaders/IdentifierTokenReader.d.ts +15 -0
  46. package/dist/tokenReaders/LiteralTokenReader.d.ts +23 -0
  47. package/dist/tokenReaders/OperatorTokenReader.d.ts +5 -0
  48. package/dist/tokenReaders/ParameterTokenReader.d.ts +11 -0
  49. package/dist/tokenReaders/StringSpecifierTokenReader.d.ts +8 -0
  50. package/dist/tokenReaders/SymbolTokenReader.d.ts +12 -0
  51. package/dist/tokenReaders/TokenReaderManager.d.ts +53 -0
  52. package/dist/tokenReaders/TypeTokenReader.d.ts +11 -0
  53. package/dist/transformers/CTEBuilder.d.ts +52 -0
  54. package/dist/transformers/CTECollector.d.ts +81 -0
  55. package/dist/transformers/CTEDisabler.d.ts +77 -0
  56. package/dist/transformers/CTEInjector.d.ts +40 -0
  57. package/dist/transformers/CTENormalizer.d.ts +25 -0
  58. package/dist/transformers/Formatter.d.ts +67 -0
  59. package/dist/transformers/QueryNormalizer.d.ts +37 -0
  60. package/dist/transformers/SelectValueCollector.d.ts +62 -0
  61. package/dist/transformers/SelectableColumnCollector.d.ts +70 -0
  62. package/dist/transformers/TableSourceCollector.d.ts +92 -0
  63. package/dist/transformers/UpstreamSelectQueryFinder.d.ts +27 -0
  64. package/dist/utils/charLookupTable.d.ts +11 -0
  65. package/dist/utils/stringUtils.d.ts +43 -0
  66. package/package.json +7 -3
  67. package/src/index.d.ts +378 -0
  68. package/.vs/CopilotSnapshots/02E79E48DFF5234787CB618DE990598A/48814CCF3E4E4B44A66AB8BC7D6CF6B6/904140CF7EDF0C98AEA45F0D36062FE1 +0 -1
  69. package/.vs/CopilotSnapshots/02E79E48DFF5234787CB618DE990598A/48814CCF3E4E4B44A66AB8BC7D6CF6B6/A32D1DB906C73FA74EF270AAEE165FC0 +0 -86
  70. package/.vs/CopilotSnapshots/02E79E48DFF5234787CB618DE990598A/48814CCF3E4E4B44A66AB8BC7D6CF6B6/E621434FB1D5415B14FBBCC11967E420 +0 -34
  71. package/.vs/CopilotSnapshots/02E79E48DFF5234787CB618DE990598A/48814CCF3E4E4B44A66AB8BC7D6CF6B6/EF71788BE39818EEA3F0164DC15E1BD7 +0 -170
  72. package/.vs/CopilotSnapshots/02E79E48DFF5234787CB618DE990598A/state.mpack +0 -1
  73. package/.vs/CopilotSnapshots/07B1013C385C5641A5F5100E0751210B/0C73C015B2C859419AFBD08BE1343FC0/BA5D2B145A59265D63FA3B3584344B02 +0 -236
  74. package/.vs/CopilotSnapshots/07B1013C385C5641A5F5100E0751210B/state.mpack +0 -1
  75. package/.vs/CopilotSnapshots/0D03762A9EA0CB4885F2114567F23F93/A9AF50781E77B849AA3262D2738D9338/1F95FD72006ED6E92629CEFD7B2C4FEC +0 -1
  76. package/.vs/CopilotSnapshots/0D03762A9EA0CB4885F2114567F23F93/A9AF50781E77B849AA3262D2738D9338/4CA7B9D3BC2D0A498DC0777EDA3F9B0F +0 -1
  77. package/.vs/CopilotSnapshots/0D03762A9EA0CB4885F2114567F23F93/A9AF50781E77B849AA3262D2738D9338/7B623BFBAEB4EB61A9585F0BC8039B06 +0 -19
  78. package/.vs/CopilotSnapshots/0D03762A9EA0CB4885F2114567F23F93/CA94452964F7A94B8ECE3B54EE21B50F/1F95FD72006ED6E92629CEFD7B2C4FEC +0 -5
  79. package/.vs/CopilotSnapshots/0D03762A9EA0CB4885F2114567F23F93/CA94452964F7A94B8ECE3B54EE21B50F/4CA7B9D3BC2D0A498DC0777EDA3F9B0F +0 -3
  80. package/.vs/CopilotSnapshots/0D03762A9EA0CB4885F2114567F23F93/CA94452964F7A94B8ECE3B54EE21B50F/7B623BFBAEB4EB61A9585F0BC8039B06 +0 -21
  81. package/.vs/CopilotSnapshots/0D03762A9EA0CB4885F2114567F23F93/state.mpack +0 -1
  82. package/.vs/CopilotSnapshots/10B71DC3C4C1C04E8602FA06D3925F98/23B181EB1228EF40ABCEF51E89FBF6E6/41035D2B1D57326B55F66372017E223A +0 -1
  83. package/.vs/CopilotSnapshots/10B71DC3C4C1C04E8602FA06D3925F98/23B181EB1228EF40ABCEF51E89FBF6E6/45EABF6EF6BDFAA58C941A29E98C9C83 +0 -113
  84. package/.vs/CopilotSnapshots/10B71DC3C4C1C04E8602FA06D3925F98/23B181EB1228EF40ABCEF51E89FBF6E6/748E0B8859CA1A5FDCA675C9E53B6D1C +0 -1
  85. package/.vs/CopilotSnapshots/10B71DC3C4C1C04E8602FA06D3925F98/23B181EB1228EF40ABCEF51E89FBF6E6/A250FF4AD59546A65FFDC6AA92A4698E +0 -1
  86. package/.vs/CopilotSnapshots/10B71DC3C4C1C04E8602FA06D3925F98/23B181EB1228EF40ABCEF51E89FBF6E6/C42432BC73D8AA122171FAB6EEB13CBC +0 -19
  87. package/.vs/CopilotSnapshots/10B71DC3C4C1C04E8602FA06D3925F98/state.mpack +0 -1
  88. package/.vs/CopilotSnapshots/13B40109875D434BB24880356492BE7E/828B96E81CC7014B887AA519767FACC3/437DAEC1EBBAF4F25ABA1B6A25EB6933 +0 -25
  89. package/.vs/CopilotSnapshots/13B40109875D434BB24880356492BE7E/state.mpack +0 -1
  90. package/.vs/CopilotSnapshots/245168908540D646ACBD4FDE8D6DD2D4/1CDE8BAB21868E4D893E119554BA87E5/904140CF7EDF0C98AEA45F0D36062FE1 +0 -63
  91. package/.vs/CopilotSnapshots/245168908540D646ACBD4FDE8D6DD2D4/1CDE8BAB21868E4D893E119554BA87E5/DFF70C60F68ECD9A4E4C3C74E4CC4DEE +0 -1
  92. package/.vs/CopilotSnapshots/245168908540D646ACBD4FDE8D6DD2D4/1CDE8BAB21868E4D893E119554BA87E5/EF71788BE39818EEA3F0164DC15E1BD7 +0 -170
  93. package/.vs/CopilotSnapshots/245168908540D646ACBD4FDE8D6DD2D4/state.mpack +0 -1
  94. package/.vs/CopilotSnapshots/3BACC9346120824DB30006E353477163/87C831E9EA1AA249A25A44D08CF8E0B5/EF71788BE39818EEA3F0164DC15E1BD7 +0 -328
  95. package/.vs/CopilotSnapshots/3BACC9346120824DB30006E353477163/state.mpack +0 -1
  96. package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/14FE66AD0B834E488EECD9594AE72472/23E7151F0483C5BB5E663F83D4962FD4 +0 -1
  97. package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/14FE66AD0B834E488EECD9594AE72472/2D4DCEBC89D52B097AEEEABA23C0EB59 +0 -1
  98. package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/14FE66AD0B834E488EECD9594AE72472/7C951A8A572EA5C371FDE657AF968B9C +0 -1
  99. package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/14FE66AD0B834E488EECD9594AE72472/A32D1DB906C73FA74EF270AAEE165FC0 +0 -1
  100. package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/14FE66AD0B834E488EECD9594AE72472/B692C85119711C76235AA5D78F9F3818 +0 -1
  101. package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/14FE66AD0B834E488EECD9594AE72472/E602628EF6D764C2C267810C92906DBA +0 -1
  102. package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/14FE66AD0B834E488EECD9594AE72472/E621434FB1D5415B14FBBCC11967E420 +0 -1
  103. package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/9C5A45FA50D5344FBB275F406599FF4E/23E7151F0483C5BB5E663F83D4962FD4 +0 -1
  104. package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/9C5A45FA50D5344FBB275F406599FF4E/2D4DCEBC89D52B097AEEEABA23C0EB59 +0 -1
  105. package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/9C5A45FA50D5344FBB275F406599FF4E/7C951A8A572EA5C371FDE657AF968B9C +0 -1
  106. package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/9C5A45FA50D5344FBB275F406599FF4E/A32D1DB906C73FA74EF270AAEE165FC0 +0 -1
  107. package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/9C5A45FA50D5344FBB275F406599FF4E/B692C85119711C76235AA5D78F9F3818 +0 -1
  108. package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/9C5A45FA50D5344FBB275F406599FF4E/E602628EF6D764C2C267810C92906DBA +0 -1
  109. package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/9C5A45FA50D5344FBB275F406599FF4E/E621434FB1D5415B14FBBCC11967E420 +0 -1
  110. package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/9C5A45FA50D5344FBB275F406599FF4E/EF71788BE39818EEA3F0164DC15E1BD7 +0 -489
  111. package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/state.mpack +0 -1
  112. package/.vs/CopilotSnapshots/4C16AB71DC018C46A734FBF0BF4AEDD9/0E5F1D40C0CAE848B8F9457F29A1F3FF/D03CD05B4F5C8B7C8CDF0B5E1961B3CA +0 -42
  113. package/.vs/CopilotSnapshots/4C16AB71DC018C46A734FBF0BF4AEDD9/462A64EF41A4BF42A18708B83E02FD6F/D03CD05B4F5C8B7C8CDF0B5E1961B3CA +0 -40
  114. package/.vs/CopilotSnapshots/4C16AB71DC018C46A734FBF0BF4AEDD9/90C95C12B91FA142BEF509B6FA329DE5/A3B20E10A19C7CA170132274D2F9312B +0 -9
  115. package/.vs/CopilotSnapshots/4C16AB71DC018C46A734FBF0BF4AEDD9/90C95C12B91FA142BEF509B6FA329DE5/D03CD05B4F5C8B7C8CDF0B5E1961B3CA +0 -1
  116. package/.vs/CopilotSnapshots/4C16AB71DC018C46A734FBF0BF4AEDD9/AD7513C9BBFE904AAB7F940397B95A99/D03CD05B4F5C8B7C8CDF0B5E1961B3CA +0 -42
  117. package/.vs/CopilotSnapshots/4C16AB71DC018C46A734FBF0BF4AEDD9/state.mpack +0 -1
  118. package/.vs/CopilotSnapshots/50E0417FAD2E524D887CB5763C2FB7B4/63A4C250D9DCE04B9F61D8833B89B5BF/EF71788BE39818EEA3F0164DC15E1BD7 +0 -174
  119. package/.vs/CopilotSnapshots/50E0417FAD2E524D887CB5763C2FB7B4/state.mpack +0 -1
  120. package/.vs/CopilotSnapshots/5EF2507B002AC14EA991043C37C36551/60FF68DE489DAD4FBCBBB54AA3F6A552/EF71788BE39818EEA3F0164DC15E1BD7 +0 -496
  121. package/.vs/CopilotSnapshots/5EF2507B002AC14EA991043C37C36551/state.mpack +0 -1
  122. package/.vs/CopilotSnapshots/6AA7610F1FB2B746821E54C28A8D109B/7FB78C0F8CB04F4AA6AF3315277B80F8/FB35DD13E708043D4CD8ACD54E14708F +0 -1
  123. package/.vs/CopilotSnapshots/6AA7610F1FB2B746821E54C28A8D109B/state.mpack +0 -1
  124. package/.vs/CopilotSnapshots/7F905F8BAC0DAD49BD507CA45C569AFD/5782E13CAB03A04E9E1EC5692F892170/BA5D2B145A59265D63FA3B3584344B02 +0 -5
  125. package/.vs/CopilotSnapshots/7F905F8BAC0DAD49BD507CA45C569AFD/5782E13CAB03A04E9E1EC5692F892170/EF71788BE39818EEA3F0164DC15E1BD7 +0 -158
  126. package/.vs/CopilotSnapshots/7F905F8BAC0DAD49BD507CA45C569AFD/9886598393C89944B51920C01EB650C9/BA5D2B145A59265D63FA3B3584344B02 +0 -35
  127. package/.vs/CopilotSnapshots/7F905F8BAC0DAD49BD507CA45C569AFD/state.mpack +0 -1
  128. package/.vs/CopilotSnapshots/8492D9C7A2D9514DB8A69D304B48BF3C/D2DA3C4E2131E84EA02E321802A65254/EF71788BE39818EEA3F0164DC15E1BD7 +0 -165
  129. package/.vs/CopilotSnapshots/8492D9C7A2D9514DB8A69D304B48BF3C/state.mpack +0 -1
  130. package/.vs/CopilotSnapshots/891A2DC0E5FA424CB8BDDA4FE26ED372/E244D49DDC79514DBA322770B03AE287/1CF9939611B0D194AC81951A171DF046 +0 -43
  131. package/.vs/CopilotSnapshots/891A2DC0E5FA424CB8BDDA4FE26ED372/state.mpack +0 -1
  132. package/.vs/CopilotSnapshots/8D302F8BAE46F54EA82AE1DED1A5D240/11E6D1F8E56D734F99C5216231273E8D/E621434FB1D5415B14FBBCC11967E420 +0 -66
  133. package/.vs/CopilotSnapshots/8D302F8BAE46F54EA82AE1DED1A5D240/24C69A83160FD844B0DEFECF8E1313DB/1CF9939611B0D194AC81951A171DF046 +0 -43
  134. package/.vs/CopilotSnapshots/8D302F8BAE46F54EA82AE1DED1A5D240/24C69A83160FD844B0DEFECF8E1313DB/E621434FB1D5415B14FBBCC11967E420 +0 -53
  135. package/.vs/CopilotSnapshots/8D302F8BAE46F54EA82AE1DED1A5D240/5E6D1BCD7CE81548AB445DE97505DC62/1CF9939611B0D194AC81951A171DF046 +0 -30
  136. package/.vs/CopilotSnapshots/8D302F8BAE46F54EA82AE1DED1A5D240/5E6D1BCD7CE81548AB445DE97505DC62/E621434FB1D5415B14FBBCC11967E420 +0 -53
  137. package/.vs/CopilotSnapshots/8D302F8BAE46F54EA82AE1DED1A5D240/EC4E81E0109C8F4BA1B5D9CFE1C122BC/E621434FB1D5415B14FBBCC11967E420 +0 -54
  138. package/.vs/CopilotSnapshots/8D302F8BAE46F54EA82AE1DED1A5D240/state.mpack +0 -1
  139. package/.vs/CopilotSnapshots/90C28D332F9B2949810126139FCA2640/6139F888FA743143B8E6C99306A478A6/30F913EA337870677E7C575773ECF531 +0 -130
  140. package/.vs/CopilotSnapshots/90C28D332F9B2949810126139FCA2640/F21743E379F9C1439F6A6405A289AA99/30F913EA337870677E7C575773ECF531 +0 -160
  141. package/.vs/CopilotSnapshots/90C28D332F9B2949810126139FCA2640/state.mpack +0 -1
  142. package/.vs/CopilotSnapshots/99E22E75C8AEDF4DB3A668A9ADF0BC43/2E2EFE66C5E05C4B809986E9B23D5409/45EABF6EF6BDFAA58C941A29E98C9C83 +0 -113
  143. package/.vs/CopilotSnapshots/99E22E75C8AEDF4DB3A668A9ADF0BC43/2E2EFE66C5E05C4B809986E9B23D5409/FB35DD13E708043D4CD8ACD54E14708F +0 -2
  144. package/.vs/CopilotSnapshots/99E22E75C8AEDF4DB3A668A9ADF0BC43/BE46916E3A8F2C4284792B951B674907/FB35DD13E708043D4CD8ACD54E14708F +0 -5
  145. package/.vs/CopilotSnapshots/99E22E75C8AEDF4DB3A668A9ADF0BC43/state.mpack +0 -1
  146. package/.vs/CopilotSnapshots/A6D99EA2D3819F45AD8087D7487F9318/state.mpack +0 -1
  147. package/.vs/CopilotSnapshots/A78C77F7A237704D95BCFE1BBC39FB0F/68BA9941941DC244BC799D89DB2BF86E/7C951A8A572EA5C371FDE657AF968B9C +0 -96
  148. package/.vs/CopilotSnapshots/A78C77F7A237704D95BCFE1BBC39FB0F/state.mpack +0 -1
  149. package/.vs/CopilotSnapshots/AD2203F1B9FECE44BB6D5DC5D83E87AA/734AB1B2974F9545B7F12AAA5842524B/840203FFA9CCF5B33DFD5C7CC5B13527 +0 -125
  150. package/.vs/CopilotSnapshots/AD2203F1B9FECE44BB6D5DC5D83E87AA/state.mpack +0 -1
  151. package/.vs/CopilotSnapshots/AEC950C2FAD20147AEE8E325E2CA0A78/89CF3F527D0687479D14274E8CDF3DFF/1CF9939611B0D194AC81951A171DF046 +0 -30
  152. package/.vs/CopilotSnapshots/AEC950C2FAD20147AEE8E325E2CA0A78/89CF3F527D0687479D14274E8CDF3DFF/BA5D2B145A59265D63FA3B3584344B02 +0 -158
  153. package/.vs/CopilotSnapshots/AEC950C2FAD20147AEE8E325E2CA0A78/E495EBF64DC77A4BBD470B92DB0391C4/1CF9939611B0D194AC81951A171DF046 +0 -30
  154. package/.vs/CopilotSnapshots/AEC950C2FAD20147AEE8E325E2CA0A78/E495EBF64DC77A4BBD470B92DB0391C4/BA5D2B145A59265D63FA3B3584344B02 +0 -67
  155. package/.vs/CopilotSnapshots/AEC950C2FAD20147AEE8E325E2CA0A78/state.mpack +0 -1
  156. package/.vs/CopilotSnapshots/AF947096A34634478C5D084B8442CD81/1FCDCC65B992954DB78BD1F46892312B/44EB81A1663981E3F52FFFECE3A2918E +0 -143
  157. package/.vs/CopilotSnapshots/AF947096A34634478C5D084B8442CD81/1FCDCC65B992954DB78BD1F46892312B/E602628EF6D764C2C267810C92906DBA +0 -253
  158. package/.vs/CopilotSnapshots/AF947096A34634478C5D084B8442CD81/state.mpack +0 -1
  159. package/.vs/CopilotSnapshots/B1DED422A45D5740BA4EE745C04B2B0B/226F822A22D6BD44BCF56BAA47FA274C/EF71788BE39818EEA3F0164DC15E1BD7 +0 -174
  160. package/.vs/CopilotSnapshots/B1DED422A45D5740BA4EE745C04B2B0B/state.mpack +0 -1
  161. package/.vs/CopilotSnapshots/B5DD5E50ACD0FD4998564F0FDE7FAEE0/97908D1D83AD2D4EA7082388DE07CBB4/44EB81A1663981E3F52FFFECE3A2918E +0 -148
  162. package/.vs/CopilotSnapshots/B5DD5E50ACD0FD4998564F0FDE7FAEE0/state.mpack +0 -1
  163. package/.vs/CopilotSnapshots/B8ADCAC0C19DB14FB8388BA59A86BC74/7ED3F1557FD7BE4DBEAF9B59FD442925/44EB81A1663981E3F52FFFECE3A2918E +0 -152
  164. package/.vs/CopilotSnapshots/B8ADCAC0C19DB14FB8388BA59A86BC74/state.mpack +0 -1
  165. package/.vs/CopilotSnapshots/BDFF50BBC1A93747A0001969C3BD195F/0130610530354840BB06BF4F4E744242/D03CD05B4F5C8B7C8CDF0B5E1961B3CA +0 -138
  166. package/.vs/CopilotSnapshots/BDFF50BBC1A93747A0001969C3BD195F/5F1C58CEFBAF1B4E80C4CF38B83A0A5F/D03CD05B4F5C8B7C8CDF0B5E1961B3CA +0 -129
  167. package/.vs/CopilotSnapshots/BDFF50BBC1A93747A0001969C3BD195F/BDC3D099FCCCC147848630670EED45CF/D03CD05B4F5C8B7C8CDF0B5E1961B3CA +0 -139
  168. package/.vs/CopilotSnapshots/BDFF50BBC1A93747A0001969C3BD195F/D9E2B1CDD1E2BB468E0703BEF6706FF6/D03CD05B4F5C8B7C8CDF0B5E1961B3CA +0 -139
  169. package/.vs/CopilotSnapshots/BDFF50BBC1A93747A0001969C3BD195F/state.mpack +0 -1
  170. package/.vs/CopilotSnapshots/C1E2C1A9C1DCFA46B1D5F1C6F36A152D/BC91C0FD38D8694BB992A8DEC1833670/148399016C7971F5592DAADBB9523118 +0 -120
  171. package/.vs/CopilotSnapshots/C1E2C1A9C1DCFA46B1D5F1C6F36A152D/state.mpack +0 -1
  172. package/.vs/CopilotSnapshots/C4D8E85893425E4F86F18850F5CA5C08/6C0950E97063C547A72D737E618436B0/1CF9939611B0D194AC81951A171DF046 +0 -9
  173. package/.vs/CopilotSnapshots/C4D8E85893425E4F86F18850F5CA5C08/6C0950E97063C547A72D737E618436B0/DFF70C60F68ECD9A4E4C3C74E4CC4DEE +0 -84
  174. package/.vs/CopilotSnapshots/C4D8E85893425E4F86F18850F5CA5C08/state.mpack +0 -1
  175. package/.vs/CopilotSnapshots/C5C3CA4C37B14A47B6BC753D09F69117/03EA1376F04C0D468FD0851119159D34/44EB81A1663981E3F52FFFECE3A2918E +0 -148
  176. package/.vs/CopilotSnapshots/C5C3CA4C37B14A47B6BC753D09F69117/03EA1376F04C0D468FD0851119159D34/E602628EF6D764C2C267810C92906DBA +0 -265
  177. package/.vs/CopilotSnapshots/C5C3CA4C37B14A47B6BC753D09F69117/6887503C15557349842029E58C9C0D11/44EB81A1663981E3F52FFFECE3A2918E +0 -152
  178. package/.vs/CopilotSnapshots/C5C3CA4C37B14A47B6BC753D09F69117/6887503C15557349842029E58C9C0D11/E602628EF6D764C2C267810C92906DBA +0 -265
  179. package/.vs/CopilotSnapshots/C5C3CA4C37B14A47B6BC753D09F69117/state.mpack +0 -1
  180. package/.vs/CopilotSnapshots/C7190BBC8D95D44F9CF8E65E3E8C9CFD/4B6D07592F8EDC4AA3FF742B1F9531CC/1B80EB15A2FEBEC11C8210C5461F8DB7 +0 -43
  181. package/.vs/CopilotSnapshots/C7190BBC8D95D44F9CF8E65E3E8C9CFD/state.mpack +0 -1
  182. package/.vs/CopilotSnapshots/C79D12964917E44F9A5BB9D8FA725A0C/2071ADB146D8F7499419123B2A595A41/03E00441128DC70FFEA043158417AC9A +0 -15
  183. package/.vs/CopilotSnapshots/C79D12964917E44F9A5BB9D8FA725A0C/6ECBF707FE2A88418EA1649CE46068D5/03E00441128DC70FFEA043158417AC9A +0 -1
  184. package/.vs/CopilotSnapshots/C79D12964917E44F9A5BB9D8FA725A0C/70BAB1D82B755F47A2351CA905ACC0F1/03E00441128DC70FFEA043158417AC9A +0 -49
  185. package/.vs/CopilotSnapshots/C79D12964917E44F9A5BB9D8FA725A0C/99DDFADAEC5CA14D92CC470523A11743/03E00441128DC70FFEA043158417AC9A +0 -39
  186. package/.vs/CopilotSnapshots/C79D12964917E44F9A5BB9D8FA725A0C/state.mpack +0 -1
  187. package/.vs/CopilotSnapshots/D533D78C39683A4188A2CEC902BC03CD/2445F4111C26EB4DA5404F930E140F56/840203FFA9CCF5B33DFD5C7CC5B13527 +0 -6
  188. package/.vs/CopilotSnapshots/D533D78C39683A4188A2CEC902BC03CD/2445F4111C26EB4DA5404F930E140F56/C27E5C1787B7957BF6F0C3D417890141 +0 -1
  189. package/.vs/CopilotSnapshots/D533D78C39683A4188A2CEC902BC03CD/state.mpack +0 -1
  190. package/.vs/CopilotSnapshots/DCAA5A718EC8304685D14C52356D80E0/5FC7C36C7769414C80BFF27A07BB5063/BE400B34D9700403D2BA3A1AA6B1EF1D +0 -15
  191. package/.vs/CopilotSnapshots/DCAA5A718EC8304685D14C52356D80E0/A4DD9B92084D8E48A95435EDB2B14545/86848C7099AD75EE4E8F10E066F49671 +0 -15
  192. package/.vs/CopilotSnapshots/DCAA5A718EC8304685D14C52356D80E0/A4DD9B92084D8E48A95435EDB2B14545/BE400B34D9700403D2BA3A1AA6B1EF1D +0 -15
  193. package/.vs/CopilotSnapshots/DCAA5A718EC8304685D14C52356D80E0/state.mpack +0 -1
  194. package/.vs/CopilotSnapshots/DCF62F751B748642A0BF5D5125AB6769/5F324CB20D1B5045A13090FA9D177B74/7C951A8A572EA5C371FDE657AF968B9C +0 -96
  195. package/.vs/CopilotSnapshots/DCF62F751B748642A0BF5D5125AB6769/5F324CB20D1B5045A13090FA9D177B74/B692C85119711C76235AA5D78F9F3818 +0 -73
  196. package/.vs/CopilotSnapshots/DCF62F751B748642A0BF5D5125AB6769/5F324CB20D1B5045A13090FA9D177B74/EF71788BE39818EEA3F0164DC15E1BD7 +0 -182
  197. package/.vs/CopilotSnapshots/DCF62F751B748642A0BF5D5125AB6769/C1287B2893D30D40A46C30DC2CE05178/7C951A8A572EA5C371FDE657AF968B9C +0 -96
  198. package/.vs/CopilotSnapshots/DCF62F751B748642A0BF5D5125AB6769/C1287B2893D30D40A46C30DC2CE05178/B692C85119711C76235AA5D78F9F3818 +0 -98
  199. package/.vs/CopilotSnapshots/DCF62F751B748642A0BF5D5125AB6769/CA6304DFE7764A4C87ACE5816CDB7CD9/7C951A8A572EA5C371FDE657AF968B9C +0 -96
  200. package/.vs/CopilotSnapshots/DCF62F751B748642A0BF5D5125AB6769/CA6304DFE7764A4C87ACE5816CDB7CD9/B692C85119711C76235AA5D78F9F3818 +0 -21
  201. package/.vs/CopilotSnapshots/DCF62F751B748642A0BF5D5125AB6769/CA6304DFE7764A4C87ACE5816CDB7CD9/EF71788BE39818EEA3F0164DC15E1BD7 +0 -176
  202. package/.vs/CopilotSnapshots/DCF62F751B748642A0BF5D5125AB6769/state.mpack +0 -1
  203. package/.vs/VSWorkspaceState.json +0 -6
  204. package/.vs/slnx.sqlite +0 -0
  205. package/.vs/ts-sample/CopilotIndices/17.13.433.20974/CodeChunks.db +0 -0
  206. package/.vs/ts-sample/CopilotIndices/17.13.433.20974/SemanticSymbols.db +0 -0
  207. package/.vs/ts-sample/CopilotIndices/17.13.439.2385/CodeChunks.db +0 -0
  208. package/.vs/ts-sample/CopilotIndices/17.13.439.2385/SemanticSymbols.db +0 -0
  209. package/.vs/ts-sample/CopilotIndices/17.13.441.19478/CodeChunks.db +0 -0
  210. package/.vs/ts-sample/CopilotIndices/17.13.441.19478/SemanticSymbols.db +0 -0
  211. package/.vs/ts-sample/FileContentIndex/2fa9d8cc-9158-496d-aa9b-3a471d46a157.vsidx +0 -0
  212. package/.vs/ts-sample/FileContentIndex/5530f45b-244e-4271-b3e3-d8250f03da64.vsidx +0 -0
  213. package/.vs/ts-sample/FileContentIndex/75f95b5d-c8f7-49ca-a3d7-d1d8f63db437.vsidx +0 -0
  214. package/.vs/ts-sample/FileContentIndex/abb2aeeb-f62a-4ca7-bfbf-7a1eada625a5.vsidx +0 -0
  215. package/.vs/ts-sample/FileContentIndex/fc749b54-0f95-45f6-ac75-a8ab3409a5ce.vsidx +0 -0
  216. package/.vs/ts-sample/config/applicationhost.config +0 -1026
  217. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/0901b413-5d87-4b43-b248-80356492be7e +0 -0
  218. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/0f61a76a-b21f-46b7-821e-54c28a8d109b +0 -0
  219. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/101aef14-dd28-4de3-b2eb-e0b26d587b3a +0 -0
  220. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/22d4deb1-5da4-4057-ba4e-e745c04b2b0b +0 -0
  221. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/2a76030d-a09e-48cb-85f2-114567f23f93 +0 -0
  222. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/2c6d08ca-cb98-4233-8f7c-011c3b409234 +0 -0
  223. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/338dc290-9b2f-4929-8101-26139fca2640 +0 -0
  224. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/34c9ac3b-2061-4d82-b300-06e353477163 +0 -0
  225. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/3c01b107-5c38-4156-a5f5-100e0751210b +0 -0
  226. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/489ee702-f5df-4723-87cb-618de990598a +0 -0
  227. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/4ccac3c5-b137-474a-b6bc-753d09f69117 +0 -0
  228. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/505eddb5-d0ac-49fd-9856-4f0fde7faee0 +0 -0
  229. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/58e8d8c4-4293-4f5e-86f1-8850f5ca5c08 +0 -0
  230. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/5dbafa3e-3015-4c80-a04c-606f5efddc38 +0 -0
  231. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/5f29f527-e43a-4661-b60e-ff772041f413 +0 -0
  232. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/6248dfd7-38ae-4fa6-9176-2fdc0694c3e8 +0 -0
  233. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/66fcbd64-32dc-436d-80e6-7435a1a3ecf1 +0 -0
  234. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/6f9ad733-d555-4d2c-b073-eb6a1aada347 +0 -0
  235. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/715aaadc-c88e-4630-85d1-4c52356d80e0 +0 -0
  236. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/71ab164c-01dc-468c-a734-fbf0bf4aedd9 +0 -0
  237. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/752ee299-aec8-4ddf-b3a6-68a9adf0bc43 +0 -0
  238. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/752ff6dc-741b-4286-a0bf-5d5125ab6769 +0 -0
  239. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/7b50f25e-2a00-4ec1-a991-043c37c36551 +0 -0
  240. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/7f41e050-2ead-4d52-887c-b5763c2fb7b4 +0 -0
  241. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/85b50c9e-8895-4085-89c1-934ad2704744 +0 -0
  242. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/8b2f308d-46ae-4ef5-a82a-e1ded1a5d240 +0 -0
  243. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/8b5f907f-0dac-49ad-bd50-7ca45c569afd +0 -0
  244. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/8cd733d5-6839-413a-88a2-cec902bc03cd +0 -0
  245. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/90685124-4085-46d6-acbd-4fde8d6dd2d4 +0 -0
  246. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/96129dc7-1749-4fe4-9a5b-b9d8fa725a0c +0 -0
  247. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/967094af-46a3-4734-8c5d-084b8442cd81 +0 -0
  248. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/a29ed9a6-81d3-459f-ad80-87d7487f9318 +0 -0
  249. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/a9c1e2c1-dcc1-46fa-b1d5-f1c6f36a152d +0 -0
  250. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/badc76f4-d284-4b6c-94e9-abdbc74de540 +0 -0
  251. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/bb50ffbd-a9c1-4737-a000-1969c3bd195f +0 -0
  252. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/bc0b19c7-958d-4fd4-9cf8-e65e3e8c9cfd +0 -0
  253. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/c02d1a89-fae5-4c42-b8bd-da4fe26ed372 +0 -0
  254. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/c0caadb8-9dc1-4fb1-b838-8ba59a86bc74 +0 -0
  255. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/c250c9ae-d2fa-4701-aee8-e325e2ca0a78 +0 -0
  256. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/c31db710-c1c4-4ec0-8602-fa06d3925f98 +0 -0
  257. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/c7d99284-d9a2-4d51-b8a6-9d304b48bf3c +0 -0
  258. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/ddd1fab4-4016-4cfc-bf9f-f4a85bdfc112 +0 -0
  259. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/f10322ad-feb9-44ce-bb6d-5dc5d83e87aa +0 -0
  260. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/f7778ca7-37a2-4d70-95bc-fe1bbc39fb0f +0 -0
  261. package/.vs/ts-sample/v17/.suo +0 -0
  262. package/.vs/ts-sample/v17/.wsuo +0 -0
  263. package/.vs/ts-sample/v17/DocumentLayout.backup.json +0 -425
  264. package/.vs/ts-sample/v17/DocumentLayout.json +0 -423
  265. package/.vs/ts-sample/v17/TestStore/0/000.testlog +0 -0
  266. package/.vs/ts-sample/v17/TestStore/0/testlog.manifest +0 -0
@@ -1,96 +0,0 @@
1
- import { BaseTokenReader } from './BaseTokenReader';
2
- import { TokenType } from '../enums/tokenType';
3
- import { Lexeme } from '../models/Lexeme';
4
- import { CharLookupTable } from '../utils/charLookupTable';
5
-
6
- /**
7
- * Reads SQL identifier tokens
8
- */
9
- export class IdentifierTokenReader extends BaseTokenReader {
10
- /**
11
- * Try to read an identifier token
12
- */
13
- public tryRead(previous: Lexeme | null): Lexeme | null {
14
- if (this.isEndOfInput()) {
15
- return null;
16
- }
17
-
18
- const char = this.input[this.position];
19
-
20
- // wildcard identifier
21
- if (char === '*' && previous !== null) {
22
- if (previous.type === TokenType.Dot) {
23
- // Treat as a wildcard if it follows a dot
24
- this.position++;
25
- return this.createLexeme(TokenType.Identifier, char);
26
- } else if (previous.type !== TokenType.Literal && previous.type !== TokenType.Identifier) {
27
- // Treat as a wildcard if it is not an operator
28
- this.position++;
29
- return this.createLexeme(TokenType.Identifier, char);
30
- }
31
- }
32
-
33
- // MySQL escaped identifier (escape character is backtick)
34
- if (char === '`') {
35
- const identifier = this.readEscapedIdentifier('`');
36
- return this.createLexeme(TokenType.Identifier, identifier);
37
- }
38
-
39
- // Postgres escaped identifier (escape character is double quote)
40
- if (char === '"') {
41
- const identifier = this.readEscapedIdentifier('"');
42
- return this.createLexeme(TokenType.Identifier, identifier);
43
- }
44
-
45
- // SQLServer escaped identifier (escape character is square bracket)
46
- if (char === '[' && (previous === null || previous.command !== "array")) {
47
- const identifier = this.readEscapedIdentifier(']');
48
- return this.createLexeme(TokenType.Identifier, identifier);
49
- }
50
-
51
- // Regular identifier
52
- const start = this.position;
53
- while (this.canRead()) {
54
- if (CharLookupTable.isDelimiter(this.input[this.position])) {
55
- break;
56
- }
57
- this.position++;
58
- }
59
-
60
- if (start === this.position) {
61
- return null;
62
- }
63
-
64
- return this.createLexeme(
65
- TokenType.Identifier,
66
- this.input.slice(start, this.position)
67
- );
68
- }
69
-
70
- /**
71
- * Read an escaped identifier (surrounded by delimiters)
72
- */
73
- private readEscapedIdentifier(delimiter: string): string {
74
- const start = this.position;
75
-
76
- // Skip the opening delimiter
77
- this.position++;
78
-
79
- while (this.canRead()) {
80
- if (this.input[this.position] === delimiter) {
81
- break;
82
- }
83
- this.position++;
84
- }
85
-
86
- if (start === this.position) {
87
- throw new Error(`Closing delimiter is not found. position: ${start}, delimiter: ${delimiter}\n${this.getDebugPositionInfo(start)}}`);
88
- }
89
-
90
- // Skip the closing delimiter
91
- this.position++;
92
-
93
- // exclude the delimiter
94
- return this.input.slice(start + 1, this.position - 1);
95
- }
96
- }
@@ -1,73 +0,0 @@
1
- /**
2
- * Utilities for string operations during tokenization
3
- */
4
- export class StringUtils {
5
- /**
6
- * Creates a visual representation of an error position in text
7
- * @param input The input text
8
- * @param errPosition The error position
9
- * @returns A string with a caret pointing to the error position
10
- */
11
- public static getDebugPositionInfo(input: string, errPosition: number): string {
12
- // Get 5 characters before and after the error
13
- // If the start and end points are out of the string range, keep them within the range
14
- // Display ^ at the error position on the next line
15
- const start = Math.max(0, errPosition - 5);
16
- const end = Math.min(input.length, errPosition + 5);
17
- const debugInfo = input.slice(start, end);
18
- const caret = ' '.repeat(errPosition - start) + '^';
19
- return `${debugInfo}\n${caret}`;
20
- }
21
-
22
- /**
23
- * Skip white space characters.
24
- */
25
- public static skipWhiteSpace(input: string, position: number): number {
26
- const start = position;
27
- const whitespace = new Set([' ', '\r', '\n', '\t']);
28
- while (position < input.length) {
29
- if (!whitespace.has(input[position])) {
30
- break;
31
- }
32
- position++;
33
- }
34
- return position;
35
- }
36
-
37
- /**
38
- * Skip line comment.
39
- */
40
- public static skipLineComment(input: string, position: number): number {
41
- if (position + 1 >= input.length) {
42
- return position;
43
- }
44
- if (input[position] === '-' && input[position + 1] === '-') {
45
- position += 2;
46
- while (position < input.length && input[position] !== '\n') {
47
- position++;
48
- }
49
- }
50
- return position;
51
- }
52
-
53
- /**
54
- * Skip block comment.
55
- */
56
- public static skipBlockComment(input: string, position: number): number {
57
- if (position + 3 >= input.length) {
58
- return position;
59
- }
60
- if (input[position] === '/' && input[position + 1] === '*') {
61
- position += 2;
62
- while (position + 1 < input.length) {
63
- if (input[position] === '*' && input[position + 1] === '/') {
64
- position += 2;
65
- return position;
66
- }
67
- position++;
68
- }
69
- throw new Error(`Block comment is not closed. position: ${position}`);
70
- }
71
- return position;
72
- }
73
- }
@@ -1,182 +0,0 @@
1
- import { Lexeme } from './models/Lexeme';
2
- import { IdentifierTokenReader } from './tokenReaders/IdentifierTokenReader';
3
- import { LiteralTokenReader } from './tokenReaders/LiteralTokenReader';
4
- import { ParameterTokenReader } from './tokenReaders/ParameterTokenReader';
5
- import { SpecialSymbolTokenReader } from './tokenReaders/SymbolTokenReader';
6
- import { TokenReaderManager } from './tokenReaders/TokenReaderManager';
7
- import { OperatorTokenReader } from './tokenReaders/OperatorTokenReader';
8
- import { StringUtils } from './utils/stringUtils';
9
-
10
- export class SqlTokenizer {
11
- /// <summary>
12
- /// Input string.
13
- /// </summary>
14
- private input: string;
15
-
16
- /// <summary>
17
- /// Current position in the input string.
18
- /// </summary>
19
- private position: number;
20
-
21
- /// <summary>
22
- /// Token reader manager
23
- /// </summary>
24
- private readerManager: TokenReaderManager;
25
-
26
- constructor(input: string) {
27
- this.input = input;
28
- this.position = 0;
29
-
30
- // Initialize the token reader manager and register all readers
31
- // NOTE: The execution order of token readers is important.
32
- // - Since LiteralTokenReader has a process to read numeric literals starting with a dot,
33
- // it needs to be registered before SpecialSymbolTokenReader.
34
- // - Since LiteralTokenReader has a process to read numeric literals starting with a sign,
35
- // it needs to be registered before OperatorTokenReader.
36
- this.readerManager = new TokenReaderManager(input)
37
- .register(new ParameterTokenReader(input))
38
- .register(new LiteralTokenReader(input))
39
- .register(new IdentifierTokenReader(input))
40
- .register(new SpecialSymbolTokenReader(input))
41
- .register(new OperatorTokenReader(input));
42
- }
43
-
44
- private isEndOfInput(shift: number = 0): boolean {
45
- return this.position + shift >= this.input.length;
46
- }
47
-
48
- private canRead(shift: number = 0): boolean {
49
- return !this.isEndOfInput(shift);
50
- }
51
-
52
- public readLexmes(): Lexeme[] {
53
- const lexemes: Lexeme[] = [];
54
-
55
- // Skip whitespace and comments at the start
56
- this.skipWhiteSpacesAndComments();
57
-
58
- // Track the previous token
59
- let previous: Lexeme | null = null;
60
-
61
- // Read tokens until the end of the input is reached
62
- while (this.canRead()) {
63
- // semicolon is a delimiter
64
- if (this.input[this.position] === ';') {
65
- return lexemes;
66
- }
67
-
68
- // Try to read with the reader manager
69
- const lexeme = this.readerManager.tryRead(this.position, previous);
70
-
71
- // If a token is read by any reader
72
- if (lexeme) {
73
-
74
-
75
-
76
- lexemes.push(lexeme);
77
- previous = lexeme;
78
-
79
- // Update position
80
- this.position = this.readerManager.getMaxPosition();
81
-
82
- // Skip whitespace and comments after the token
83
- this.skipWhiteSpacesAndComments();
84
- } else {
85
- // Exception
86
- throw new Error(`Unexpected character. actual: ${this.input[this.position]}, position: ${this.position}\n${this.getDebugPositionInfo(this.position)}`);
87
- }
88
- }
89
-
90
- return lexemes;
91
- }
92
-
93
- /// <summary>
94
- /// Skip white space characters and sql comments.
95
- /// </summary>
96
- private skipWhiteSpacesAndComments(): void {
97
- while (true) {
98
- const newPosition = StringUtils.skipWhiteSpace(this.input, this.position);
99
- if (newPosition !== this.position) {
100
- this.position = newPosition;
101
- continue;
102
- }
103
- const newLineCommentPosition = StringUtils.skipLineComment(this.input, this.position);
104
- if (newLineCommentPosition !== this.position) {
105
- this.position = newLineCommentPosition;
106
- continue;
107
- }
108
- const newBlockCommentPosition = StringUtils.skipBlockComment(this.input, this.position);
109
- if (newBlockCommentPosition !== this.position) {
110
- this.position = newBlockCommentPosition;
111
- continue;
112
- }
113
- break;
114
- }
115
- }
116
-
117
- private skipWhiteSpace(): boolean {
118
- const start = this.position;
119
-
120
- // Skip tab, newline, and space characters
121
- const whitespace = new Set([' ', '\r', '\n', '\t']);
122
-
123
- while (this.canRead()) {
124
- if (!whitespace.has(this.input[this.position])) {
125
- break;
126
- }
127
- this.position++;
128
- }
129
- return start !== this.position;
130
- }
131
-
132
- private skipLineComment(): boolean {
133
- // At least 2 characters are needed. '--'
134
- if (this.isEndOfInput(1)) {
135
- return false;
136
- }
137
-
138
- if (this.input[this.position] === '-' && this.input[this.position + 1] === '-') {
139
- this.position += 2;
140
-
141
- while (this.canRead() && this.input[this.position] !== '\n') {
142
- this.position++;
143
- }
144
- return true;
145
- }
146
-
147
- return false;
148
- }
149
-
150
- private skipBlockComment(): boolean {
151
- // At least 4 characters are needed. '/**/'
152
- if (this.isEndOfInput(3)) {
153
- return false;
154
- }
155
-
156
- // Record the start position of the comment to track error location
157
- const start = this.position;
158
-
159
- if (this.input[this.position] === '/' && this.input[this.position + 1] === '*') {
160
- this.position += 2;
161
-
162
- while (this.canRead(1)) {
163
- if (this.input[this.position] === '*' && this.input[this.position + 1] === '/') {
164
- this.position += 2;
165
- return true;
166
- }
167
- this.position++;
168
- }
169
-
170
- throw new Error(`Block comment is not closed. position: ${start}`);
171
- }
172
-
173
- return false;
174
- }
175
-
176
- /**
177
- * Get debug info for error reporting
178
- */
179
- private getDebugPositionInfo(errPosition: number): string {
180
- return StringUtils.getDebugPositionInfo(this.input, errPosition);
181
- }
182
- }
@@ -1,96 +0,0 @@
1
- import { BaseTokenReader } from './BaseTokenReader';
2
- import { TokenType } from '../enums/tokenType';
3
- import { Lexeme } from '../models/Lexeme';
4
- import { CharLookupTable } from '../utils/charLookupTable';
5
-
6
- /**
7
- * Reads SQL identifier tokens
8
- */
9
- export class IdentifierTokenReader extends BaseTokenReader {
10
- /**
11
- * Try to read an identifier token
12
- */
13
- public tryRead(previous: Lexeme | null): Lexeme | null {
14
- if (this.isEndOfInput()) {
15
- return null;
16
- }
17
-
18
- const char = this.input[this.position];
19
-
20
- // wildcard identifier
21
- if (char === '*' && previous !== null) {
22
- if (previous.type === TokenType.Dot) {
23
- // Treat as a wildcard if it follows a dot
24
- this.position++;
25
- return this.createLexeme(TokenType.Identifier, char);
26
- } else if (previous.type !== TokenType.Literal && previous.type !== TokenType.Identifier) {
27
- // Treat as a wildcard if it is not an operator
28
- this.position++;
29
- return this.createLexeme(TokenType.Identifier, char);
30
- }
31
- }
32
-
33
- // MySQL escaped identifier (escape character is backtick)
34
- if (char === '`') {
35
- const identifier = this.readEscapedIdentifier('`');
36
- return this.createLexeme(TokenType.Identifier, identifier);
37
- }
38
-
39
- // Postgres escaped identifier (escape character is double quote)
40
- if (char === '"') {
41
- const identifier = this.readEscapedIdentifier('"');
42
- return this.createLexeme(TokenType.Identifier, identifier);
43
- }
44
-
45
- // SQLServer escaped identifier (escape character is square bracket)
46
- if (char === '[' && (previous === null || previous.command !== "array")) {
47
- const identifier = this.readEscapedIdentifier(']');
48
- return this.createLexeme(TokenType.Identifier, identifier);
49
- }
50
-
51
- // Regular identifier
52
- const start = this.position;
53
- while (this.canRead()) {
54
- if (CharLookupTable.isDelimiter(this.input[this.position])) {
55
- break;
56
- }
57
- this.position++;
58
- }
59
-
60
- if (start === this.position) {
61
- return null;
62
- }
63
-
64
- return this.createLexeme(
65
- TokenType.Identifier,
66
- this.input.slice(start, this.position)
67
- );
68
- }
69
-
70
- /**
71
- * Read an escaped identifier (surrounded by delimiters)
72
- */
73
- private readEscapedIdentifier(delimiter: string): string {
74
- const start = this.position;
75
-
76
- // Skip the opening delimiter
77
- this.position++;
78
-
79
- while (this.canRead()) {
80
- if (this.input[this.position] === delimiter) {
81
- break;
82
- }
83
- this.position++;
84
- }
85
-
86
- if (start === this.position) {
87
- throw new Error(`Closing delimiter is not found. position: ${start}, delimiter: ${delimiter}\n${this.getDebugPositionInfo(start)}}`);
88
- }
89
-
90
- // Skip the closing delimiter
91
- this.position++;
92
-
93
- // exclude the delimiter
94
- return this.input.slice(start + 1, this.position - 1);
95
- }
96
- }
@@ -1,98 +0,0 @@
1
- /**
2
- * Utilities for string operations during tokenization
3
- */
4
- export class StringUtils {
5
- /**
6
- * Creates a visual representation of an error position in text
7
- * @param input The input text
8
- * @param errPosition The error position
9
- * @returns A string with a caret pointing to the error position
10
- */
11
- public static getDebugPositionInfo(input: string, errPosition: number): string {
12
- // Get 5 characters before and after the error
13
- // If the start and end points are out of the string range, keep them within the range
14
- // Display ^ at the error position on the next line
15
- const start = Math.max(0, errPosition - 5);
16
- const end = Math.min(input.length, errPosition + 5);
17
- const debugInfo = input.slice(start, end);
18
- const caret = ' '.repeat(errPosition - start) + '^';
19
- return `${debugInfo}\n${caret}`;
20
- }
21
-
22
- /**
23
- * Skip white space characters.
24
- */
25
- public static skipWhiteSpace(input: string, position: number): number {
26
- const start = position;
27
- const whitespace = new Set([' ', '\r', '\n', '\t']);
28
- while (position < input.length) {
29
- if (!whitespace.has(input[position])) {
30
- break;
31
- }
32
- position++;
33
- }
34
- return position;
35
- }
36
-
37
- /**
38
- * Skip line comment.
39
- */
40
- private static skipLineComment(input: string, position: number): number {
41
- if (position + 1 >= input.length) {
42
- return position;
43
- }
44
- if (input[position] === '-' && input[position + 1] === '-') {
45
- position += 2;
46
- while (position < input.length && input[position] !== '\n') {
47
- position++;
48
- }
49
- }
50
- return position;
51
- }
52
-
53
- /**
54
- * Skip block comment.
55
- */
56
- private static skipBlockComment(input: string, position: number): number {
57
- if (position + 3 >= input.length) {
58
- return position;
59
- }
60
- if (input[position] === '/' && input[position + 1] === '*') {
61
- position += 2;
62
- while (position + 1 < input.length) {
63
- if (input[position] === '*' && input[position + 1] === '/') {
64
- position += 2;
65
- return position;
66
- }
67
- position++;
68
- }
69
- throw new Error(`Block comment is not closed. position: ${position}`);
70
- }
71
- return position;
72
- }
73
-
74
- /**
75
- * Skip white space characters and SQL comments.
76
- */
77
- public static skipWhiteSpacesAndComments(input: string, position: number): number {
78
- while (true) {
79
- const newPosition = StringUtils.skipWhiteSpace(input, position);
80
- if (newPosition !== position) {
81
- position = newPosition;
82
- continue;
83
- }
84
- const newLineCommentPosition = StringUtils.skipLineComment(input, position);
85
- if (newLineCommentPosition !== position) {
86
- position = newLineCommentPosition;
87
- continue;
88
- }
89
- const newBlockCommentPosition = StringUtils.skipBlockComment(input, position);
90
- if (newBlockCommentPosition !== position) {
91
- position = newBlockCommentPosition;
92
- continue;
93
- }
94
- break;
95
- }
96
- return position;
97
- }
98
- }
@@ -1,96 +0,0 @@
1
- import { BaseTokenReader } from './BaseTokenReader';
2
- import { TokenType } from '../enums/tokenType';
3
- import { Lexeme } from '../models/Lexeme';
4
- import { CharLookupTable } from '../utils/charLookupTable';
5
-
6
- /**
7
- * Reads SQL identifier tokens
8
- */
9
- export class IdentifierTokenReader extends BaseTokenReader {
10
- /**
11
- * Try to read an identifier token
12
- */
13
- public tryRead(previous: Lexeme | null): Lexeme | null {
14
- if (this.isEndOfInput()) {
15
- return null;
16
- }
17
-
18
- const char = this.input[this.position];
19
-
20
- // wildcard identifier
21
- if (char === '*' && previous !== null) {
22
- if (previous.type === TokenType.Dot) {
23
- // Treat as a wildcard if it follows a dot
24
- this.position++;
25
- return this.createLexeme(TokenType.Identifier, char);
26
- } else if (previous.type !== TokenType.Literal && previous.type !== TokenType.Identifier) {
27
- // Treat as a wildcard if it is not an operator
28
- this.position++;
29
- return this.createLexeme(TokenType.Identifier, char);
30
- }
31
- }
32
-
33
- // MySQL escaped identifier (escape character is backtick)
34
- if (char === '`') {
35
- const identifier = this.readEscapedIdentifier('`');
36
- return this.createLexeme(TokenType.Identifier, identifier);
37
- }
38
-
39
- // Postgres escaped identifier (escape character is double quote)
40
- if (char === '"') {
41
- const identifier = this.readEscapedIdentifier('"');
42
- return this.createLexeme(TokenType.Identifier, identifier);
43
- }
44
-
45
- // SQLServer escaped identifier (escape character is square bracket)
46
- if (char === '[' && (previous === null || previous.command !== "array")) {
47
- const identifier = this.readEscapedIdentifier(']');
48
- return this.createLexeme(TokenType.Identifier, identifier);
49
- }
50
-
51
- // Regular identifier
52
- const start = this.position;
53
- while (this.canRead()) {
54
- if (CharLookupTable.isDelimiter(this.input[this.position])) {
55
- break;
56
- }
57
- this.position++;
58
- }
59
-
60
- if (start === this.position) {
61
- return null;
62
- }
63
-
64
- return this.createLexeme(
65
- TokenType.Identifier,
66
- this.input.slice(start, this.position)
67
- );
68
- }
69
-
70
- /**
71
- * Read an escaped identifier (surrounded by delimiters)
72
- */
73
- private readEscapedIdentifier(delimiter: string): string {
74
- const start = this.position;
75
-
76
- // Skip the opening delimiter
77
- this.position++;
78
-
79
- while (this.canRead()) {
80
- if (this.input[this.position] === delimiter) {
81
- break;
82
- }
83
- this.position++;
84
- }
85
-
86
- if (start === this.position) {
87
- throw new Error(`Closing delimiter is not found. position: ${start}, delimiter: ${delimiter}\n${this.getDebugPositionInfo(start)}}`);
88
- }
89
-
90
- // Skip the closing delimiter
91
- this.position++;
92
-
93
- // exclude the delimiter
94
- return this.input.slice(start + 1, this.position - 1);
95
- }
96
- }
@@ -1,21 +0,0 @@
1
- /**
2
- * Utilities for string operations during tokenization
3
- */
4
- export class StringUtils {
5
- /**
6
- * Creates a visual representation of an error position in text
7
- * @param input The input text
8
- * @param errPosition The error position
9
- * @returns A string with a caret pointing to the error position
10
- */
11
- public static getDebugPositionInfo(input: string, errPosition: number): string {
12
- // Get 5 characters before and after the error
13
- // If the start and end points are out of the string range, keep them within the range
14
- // Display ^ at the error position on the next line
15
- const start = Math.max(0, errPosition - 5);
16
- const end = Math.min(input.length, errPosition + 5);
17
- const debugInfo = input.slice(start, end);
18
- const caret = ' '.repeat(errPosition - start) + '^';
19
- return `${debugInfo}\n${caret}`;
20
- }
21
- }