rawsql-ts 0.1.0-beta.6 → 0.1.0-beta.8

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 (265) 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 +6 -3
  67. package/.vs/CopilotSnapshots/02E79E48DFF5234787CB618DE990598A/48814CCF3E4E4B44A66AB8BC7D6CF6B6/904140CF7EDF0C98AEA45F0D36062FE1 +0 -1
  68. package/.vs/CopilotSnapshots/02E79E48DFF5234787CB618DE990598A/48814CCF3E4E4B44A66AB8BC7D6CF6B6/A32D1DB906C73FA74EF270AAEE165FC0 +0 -86
  69. package/.vs/CopilotSnapshots/02E79E48DFF5234787CB618DE990598A/48814CCF3E4E4B44A66AB8BC7D6CF6B6/E621434FB1D5415B14FBBCC11967E420 +0 -34
  70. package/.vs/CopilotSnapshots/02E79E48DFF5234787CB618DE990598A/48814CCF3E4E4B44A66AB8BC7D6CF6B6/EF71788BE39818EEA3F0164DC15E1BD7 +0 -170
  71. package/.vs/CopilotSnapshots/02E79E48DFF5234787CB618DE990598A/state.mpack +0 -1
  72. package/.vs/CopilotSnapshots/07B1013C385C5641A5F5100E0751210B/0C73C015B2C859419AFBD08BE1343FC0/BA5D2B145A59265D63FA3B3584344B02 +0 -236
  73. package/.vs/CopilotSnapshots/07B1013C385C5641A5F5100E0751210B/state.mpack +0 -1
  74. package/.vs/CopilotSnapshots/0D03762A9EA0CB4885F2114567F23F93/A9AF50781E77B849AA3262D2738D9338/1F95FD72006ED6E92629CEFD7B2C4FEC +0 -1
  75. package/.vs/CopilotSnapshots/0D03762A9EA0CB4885F2114567F23F93/A9AF50781E77B849AA3262D2738D9338/4CA7B9D3BC2D0A498DC0777EDA3F9B0F +0 -1
  76. package/.vs/CopilotSnapshots/0D03762A9EA0CB4885F2114567F23F93/A9AF50781E77B849AA3262D2738D9338/7B623BFBAEB4EB61A9585F0BC8039B06 +0 -19
  77. package/.vs/CopilotSnapshots/0D03762A9EA0CB4885F2114567F23F93/CA94452964F7A94B8ECE3B54EE21B50F/1F95FD72006ED6E92629CEFD7B2C4FEC +0 -5
  78. package/.vs/CopilotSnapshots/0D03762A9EA0CB4885F2114567F23F93/CA94452964F7A94B8ECE3B54EE21B50F/4CA7B9D3BC2D0A498DC0777EDA3F9B0F +0 -3
  79. package/.vs/CopilotSnapshots/0D03762A9EA0CB4885F2114567F23F93/CA94452964F7A94B8ECE3B54EE21B50F/7B623BFBAEB4EB61A9585F0BC8039B06 +0 -21
  80. package/.vs/CopilotSnapshots/0D03762A9EA0CB4885F2114567F23F93/state.mpack +0 -1
  81. package/.vs/CopilotSnapshots/10B71DC3C4C1C04E8602FA06D3925F98/23B181EB1228EF40ABCEF51E89FBF6E6/41035D2B1D57326B55F66372017E223A +0 -1
  82. package/.vs/CopilotSnapshots/10B71DC3C4C1C04E8602FA06D3925F98/23B181EB1228EF40ABCEF51E89FBF6E6/45EABF6EF6BDFAA58C941A29E98C9C83 +0 -113
  83. package/.vs/CopilotSnapshots/10B71DC3C4C1C04E8602FA06D3925F98/23B181EB1228EF40ABCEF51E89FBF6E6/748E0B8859CA1A5FDCA675C9E53B6D1C +0 -1
  84. package/.vs/CopilotSnapshots/10B71DC3C4C1C04E8602FA06D3925F98/23B181EB1228EF40ABCEF51E89FBF6E6/A250FF4AD59546A65FFDC6AA92A4698E +0 -1
  85. package/.vs/CopilotSnapshots/10B71DC3C4C1C04E8602FA06D3925F98/23B181EB1228EF40ABCEF51E89FBF6E6/C42432BC73D8AA122171FAB6EEB13CBC +0 -19
  86. package/.vs/CopilotSnapshots/10B71DC3C4C1C04E8602FA06D3925F98/state.mpack +0 -1
  87. package/.vs/CopilotSnapshots/13B40109875D434BB24880356492BE7E/828B96E81CC7014B887AA519767FACC3/437DAEC1EBBAF4F25ABA1B6A25EB6933 +0 -25
  88. package/.vs/CopilotSnapshots/13B40109875D434BB24880356492BE7E/state.mpack +0 -1
  89. package/.vs/CopilotSnapshots/245168908540D646ACBD4FDE8D6DD2D4/1CDE8BAB21868E4D893E119554BA87E5/904140CF7EDF0C98AEA45F0D36062FE1 +0 -63
  90. package/.vs/CopilotSnapshots/245168908540D646ACBD4FDE8D6DD2D4/1CDE8BAB21868E4D893E119554BA87E5/DFF70C60F68ECD9A4E4C3C74E4CC4DEE +0 -1
  91. package/.vs/CopilotSnapshots/245168908540D646ACBD4FDE8D6DD2D4/1CDE8BAB21868E4D893E119554BA87E5/EF71788BE39818EEA3F0164DC15E1BD7 +0 -170
  92. package/.vs/CopilotSnapshots/245168908540D646ACBD4FDE8D6DD2D4/state.mpack +0 -1
  93. package/.vs/CopilotSnapshots/3BACC9346120824DB30006E353477163/87C831E9EA1AA249A25A44D08CF8E0B5/EF71788BE39818EEA3F0164DC15E1BD7 +0 -328
  94. package/.vs/CopilotSnapshots/3BACC9346120824DB30006E353477163/state.mpack +0 -1
  95. package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/14FE66AD0B834E488EECD9594AE72472/23E7151F0483C5BB5E663F83D4962FD4 +0 -1
  96. package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/14FE66AD0B834E488EECD9594AE72472/2D4DCEBC89D52B097AEEEABA23C0EB59 +0 -1
  97. package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/14FE66AD0B834E488EECD9594AE72472/7C951A8A572EA5C371FDE657AF968B9C +0 -1
  98. package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/14FE66AD0B834E488EECD9594AE72472/A32D1DB906C73FA74EF270AAEE165FC0 +0 -1
  99. package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/14FE66AD0B834E488EECD9594AE72472/B692C85119711C76235AA5D78F9F3818 +0 -1
  100. package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/14FE66AD0B834E488EECD9594AE72472/E602628EF6D764C2C267810C92906DBA +0 -1
  101. package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/14FE66AD0B834E488EECD9594AE72472/E621434FB1D5415B14FBBCC11967E420 +0 -1
  102. package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/9C5A45FA50D5344FBB275F406599FF4E/23E7151F0483C5BB5E663F83D4962FD4 +0 -1
  103. package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/9C5A45FA50D5344FBB275F406599FF4E/2D4DCEBC89D52B097AEEEABA23C0EB59 +0 -1
  104. package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/9C5A45FA50D5344FBB275F406599FF4E/7C951A8A572EA5C371FDE657AF968B9C +0 -1
  105. package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/9C5A45FA50D5344FBB275F406599FF4E/A32D1DB906C73FA74EF270AAEE165FC0 +0 -1
  106. package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/9C5A45FA50D5344FBB275F406599FF4E/B692C85119711C76235AA5D78F9F3818 +0 -1
  107. package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/9C5A45FA50D5344FBB275F406599FF4E/E602628EF6D764C2C267810C92906DBA +0 -1
  108. package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/9C5A45FA50D5344FBB275F406599FF4E/E621434FB1D5415B14FBBCC11967E420 +0 -1
  109. package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/9C5A45FA50D5344FBB275F406599FF4E/EF71788BE39818EEA3F0164DC15E1BD7 +0 -489
  110. package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/state.mpack +0 -1
  111. package/.vs/CopilotSnapshots/4C16AB71DC018C46A734FBF0BF4AEDD9/0E5F1D40C0CAE848B8F9457F29A1F3FF/D03CD05B4F5C8B7C8CDF0B5E1961B3CA +0 -42
  112. package/.vs/CopilotSnapshots/4C16AB71DC018C46A734FBF0BF4AEDD9/462A64EF41A4BF42A18708B83E02FD6F/D03CD05B4F5C8B7C8CDF0B5E1961B3CA +0 -40
  113. package/.vs/CopilotSnapshots/4C16AB71DC018C46A734FBF0BF4AEDD9/90C95C12B91FA142BEF509B6FA329DE5/A3B20E10A19C7CA170132274D2F9312B +0 -9
  114. package/.vs/CopilotSnapshots/4C16AB71DC018C46A734FBF0BF4AEDD9/90C95C12B91FA142BEF509B6FA329DE5/D03CD05B4F5C8B7C8CDF0B5E1961B3CA +0 -1
  115. package/.vs/CopilotSnapshots/4C16AB71DC018C46A734FBF0BF4AEDD9/AD7513C9BBFE904AAB7F940397B95A99/D03CD05B4F5C8B7C8CDF0B5E1961B3CA +0 -42
  116. package/.vs/CopilotSnapshots/4C16AB71DC018C46A734FBF0BF4AEDD9/state.mpack +0 -1
  117. package/.vs/CopilotSnapshots/50E0417FAD2E524D887CB5763C2FB7B4/63A4C250D9DCE04B9F61D8833B89B5BF/EF71788BE39818EEA3F0164DC15E1BD7 +0 -174
  118. package/.vs/CopilotSnapshots/50E0417FAD2E524D887CB5763C2FB7B4/state.mpack +0 -1
  119. package/.vs/CopilotSnapshots/5EF2507B002AC14EA991043C37C36551/60FF68DE489DAD4FBCBBB54AA3F6A552/EF71788BE39818EEA3F0164DC15E1BD7 +0 -496
  120. package/.vs/CopilotSnapshots/5EF2507B002AC14EA991043C37C36551/state.mpack +0 -1
  121. package/.vs/CopilotSnapshots/6AA7610F1FB2B746821E54C28A8D109B/7FB78C0F8CB04F4AA6AF3315277B80F8/FB35DD13E708043D4CD8ACD54E14708F +0 -1
  122. package/.vs/CopilotSnapshots/6AA7610F1FB2B746821E54C28A8D109B/state.mpack +0 -1
  123. package/.vs/CopilotSnapshots/7F905F8BAC0DAD49BD507CA45C569AFD/5782E13CAB03A04E9E1EC5692F892170/BA5D2B145A59265D63FA3B3584344B02 +0 -5
  124. package/.vs/CopilotSnapshots/7F905F8BAC0DAD49BD507CA45C569AFD/5782E13CAB03A04E9E1EC5692F892170/EF71788BE39818EEA3F0164DC15E1BD7 +0 -158
  125. package/.vs/CopilotSnapshots/7F905F8BAC0DAD49BD507CA45C569AFD/9886598393C89944B51920C01EB650C9/BA5D2B145A59265D63FA3B3584344B02 +0 -35
  126. package/.vs/CopilotSnapshots/7F905F8BAC0DAD49BD507CA45C569AFD/state.mpack +0 -1
  127. package/.vs/CopilotSnapshots/8492D9C7A2D9514DB8A69D304B48BF3C/D2DA3C4E2131E84EA02E321802A65254/EF71788BE39818EEA3F0164DC15E1BD7 +0 -165
  128. package/.vs/CopilotSnapshots/8492D9C7A2D9514DB8A69D304B48BF3C/state.mpack +0 -1
  129. package/.vs/CopilotSnapshots/891A2DC0E5FA424CB8BDDA4FE26ED372/E244D49DDC79514DBA322770B03AE287/1CF9939611B0D194AC81951A171DF046 +0 -43
  130. package/.vs/CopilotSnapshots/891A2DC0E5FA424CB8BDDA4FE26ED372/state.mpack +0 -1
  131. package/.vs/CopilotSnapshots/8D302F8BAE46F54EA82AE1DED1A5D240/11E6D1F8E56D734F99C5216231273E8D/E621434FB1D5415B14FBBCC11967E420 +0 -66
  132. package/.vs/CopilotSnapshots/8D302F8BAE46F54EA82AE1DED1A5D240/24C69A83160FD844B0DEFECF8E1313DB/1CF9939611B0D194AC81951A171DF046 +0 -43
  133. package/.vs/CopilotSnapshots/8D302F8BAE46F54EA82AE1DED1A5D240/24C69A83160FD844B0DEFECF8E1313DB/E621434FB1D5415B14FBBCC11967E420 +0 -53
  134. package/.vs/CopilotSnapshots/8D302F8BAE46F54EA82AE1DED1A5D240/5E6D1BCD7CE81548AB445DE97505DC62/1CF9939611B0D194AC81951A171DF046 +0 -30
  135. package/.vs/CopilotSnapshots/8D302F8BAE46F54EA82AE1DED1A5D240/5E6D1BCD7CE81548AB445DE97505DC62/E621434FB1D5415B14FBBCC11967E420 +0 -53
  136. package/.vs/CopilotSnapshots/8D302F8BAE46F54EA82AE1DED1A5D240/EC4E81E0109C8F4BA1B5D9CFE1C122BC/E621434FB1D5415B14FBBCC11967E420 +0 -54
  137. package/.vs/CopilotSnapshots/8D302F8BAE46F54EA82AE1DED1A5D240/state.mpack +0 -1
  138. package/.vs/CopilotSnapshots/90C28D332F9B2949810126139FCA2640/6139F888FA743143B8E6C99306A478A6/30F913EA337870677E7C575773ECF531 +0 -130
  139. package/.vs/CopilotSnapshots/90C28D332F9B2949810126139FCA2640/F21743E379F9C1439F6A6405A289AA99/30F913EA337870677E7C575773ECF531 +0 -160
  140. package/.vs/CopilotSnapshots/90C28D332F9B2949810126139FCA2640/state.mpack +0 -1
  141. package/.vs/CopilotSnapshots/99E22E75C8AEDF4DB3A668A9ADF0BC43/2E2EFE66C5E05C4B809986E9B23D5409/45EABF6EF6BDFAA58C941A29E98C9C83 +0 -113
  142. package/.vs/CopilotSnapshots/99E22E75C8AEDF4DB3A668A9ADF0BC43/2E2EFE66C5E05C4B809986E9B23D5409/FB35DD13E708043D4CD8ACD54E14708F +0 -2
  143. package/.vs/CopilotSnapshots/99E22E75C8AEDF4DB3A668A9ADF0BC43/BE46916E3A8F2C4284792B951B674907/FB35DD13E708043D4CD8ACD54E14708F +0 -5
  144. package/.vs/CopilotSnapshots/99E22E75C8AEDF4DB3A668A9ADF0BC43/state.mpack +0 -1
  145. package/.vs/CopilotSnapshots/A6D99EA2D3819F45AD8087D7487F9318/state.mpack +0 -1
  146. package/.vs/CopilotSnapshots/A78C77F7A237704D95BCFE1BBC39FB0F/68BA9941941DC244BC799D89DB2BF86E/7C951A8A572EA5C371FDE657AF968B9C +0 -96
  147. package/.vs/CopilotSnapshots/A78C77F7A237704D95BCFE1BBC39FB0F/state.mpack +0 -1
  148. package/.vs/CopilotSnapshots/AD2203F1B9FECE44BB6D5DC5D83E87AA/734AB1B2974F9545B7F12AAA5842524B/840203FFA9CCF5B33DFD5C7CC5B13527 +0 -125
  149. package/.vs/CopilotSnapshots/AD2203F1B9FECE44BB6D5DC5D83E87AA/state.mpack +0 -1
  150. package/.vs/CopilotSnapshots/AEC950C2FAD20147AEE8E325E2CA0A78/89CF3F527D0687479D14274E8CDF3DFF/1CF9939611B0D194AC81951A171DF046 +0 -30
  151. package/.vs/CopilotSnapshots/AEC950C2FAD20147AEE8E325E2CA0A78/89CF3F527D0687479D14274E8CDF3DFF/BA5D2B145A59265D63FA3B3584344B02 +0 -158
  152. package/.vs/CopilotSnapshots/AEC950C2FAD20147AEE8E325E2CA0A78/E495EBF64DC77A4BBD470B92DB0391C4/1CF9939611B0D194AC81951A171DF046 +0 -30
  153. package/.vs/CopilotSnapshots/AEC950C2FAD20147AEE8E325E2CA0A78/E495EBF64DC77A4BBD470B92DB0391C4/BA5D2B145A59265D63FA3B3584344B02 +0 -67
  154. package/.vs/CopilotSnapshots/AEC950C2FAD20147AEE8E325E2CA0A78/state.mpack +0 -1
  155. package/.vs/CopilotSnapshots/AF947096A34634478C5D084B8442CD81/1FCDCC65B992954DB78BD1F46892312B/44EB81A1663981E3F52FFFECE3A2918E +0 -143
  156. package/.vs/CopilotSnapshots/AF947096A34634478C5D084B8442CD81/1FCDCC65B992954DB78BD1F46892312B/E602628EF6D764C2C267810C92906DBA +0 -253
  157. package/.vs/CopilotSnapshots/AF947096A34634478C5D084B8442CD81/state.mpack +0 -1
  158. package/.vs/CopilotSnapshots/B1DED422A45D5740BA4EE745C04B2B0B/226F822A22D6BD44BCF56BAA47FA274C/EF71788BE39818EEA3F0164DC15E1BD7 +0 -174
  159. package/.vs/CopilotSnapshots/B1DED422A45D5740BA4EE745C04B2B0B/state.mpack +0 -1
  160. package/.vs/CopilotSnapshots/B5DD5E50ACD0FD4998564F0FDE7FAEE0/97908D1D83AD2D4EA7082388DE07CBB4/44EB81A1663981E3F52FFFECE3A2918E +0 -148
  161. package/.vs/CopilotSnapshots/B5DD5E50ACD0FD4998564F0FDE7FAEE0/state.mpack +0 -1
  162. package/.vs/CopilotSnapshots/B8ADCAC0C19DB14FB8388BA59A86BC74/7ED3F1557FD7BE4DBEAF9B59FD442925/44EB81A1663981E3F52FFFECE3A2918E +0 -152
  163. package/.vs/CopilotSnapshots/B8ADCAC0C19DB14FB8388BA59A86BC74/state.mpack +0 -1
  164. package/.vs/CopilotSnapshots/BDFF50BBC1A93747A0001969C3BD195F/0130610530354840BB06BF4F4E744242/D03CD05B4F5C8B7C8CDF0B5E1961B3CA +0 -138
  165. package/.vs/CopilotSnapshots/BDFF50BBC1A93747A0001969C3BD195F/5F1C58CEFBAF1B4E80C4CF38B83A0A5F/D03CD05B4F5C8B7C8CDF0B5E1961B3CA +0 -129
  166. package/.vs/CopilotSnapshots/BDFF50BBC1A93747A0001969C3BD195F/BDC3D099FCCCC147848630670EED45CF/D03CD05B4F5C8B7C8CDF0B5E1961B3CA +0 -139
  167. package/.vs/CopilotSnapshots/BDFF50BBC1A93747A0001969C3BD195F/D9E2B1CDD1E2BB468E0703BEF6706FF6/D03CD05B4F5C8B7C8CDF0B5E1961B3CA +0 -139
  168. package/.vs/CopilotSnapshots/BDFF50BBC1A93747A0001969C3BD195F/state.mpack +0 -1
  169. package/.vs/CopilotSnapshots/C1E2C1A9C1DCFA46B1D5F1C6F36A152D/BC91C0FD38D8694BB992A8DEC1833670/148399016C7971F5592DAADBB9523118 +0 -120
  170. package/.vs/CopilotSnapshots/C1E2C1A9C1DCFA46B1D5F1C6F36A152D/state.mpack +0 -1
  171. package/.vs/CopilotSnapshots/C4D8E85893425E4F86F18850F5CA5C08/6C0950E97063C547A72D737E618436B0/1CF9939611B0D194AC81951A171DF046 +0 -9
  172. package/.vs/CopilotSnapshots/C4D8E85893425E4F86F18850F5CA5C08/6C0950E97063C547A72D737E618436B0/DFF70C60F68ECD9A4E4C3C74E4CC4DEE +0 -84
  173. package/.vs/CopilotSnapshots/C4D8E85893425E4F86F18850F5CA5C08/state.mpack +0 -1
  174. package/.vs/CopilotSnapshots/C5C3CA4C37B14A47B6BC753D09F69117/03EA1376F04C0D468FD0851119159D34/44EB81A1663981E3F52FFFECE3A2918E +0 -148
  175. package/.vs/CopilotSnapshots/C5C3CA4C37B14A47B6BC753D09F69117/03EA1376F04C0D468FD0851119159D34/E602628EF6D764C2C267810C92906DBA +0 -265
  176. package/.vs/CopilotSnapshots/C5C3CA4C37B14A47B6BC753D09F69117/6887503C15557349842029E58C9C0D11/44EB81A1663981E3F52FFFECE3A2918E +0 -152
  177. package/.vs/CopilotSnapshots/C5C3CA4C37B14A47B6BC753D09F69117/6887503C15557349842029E58C9C0D11/E602628EF6D764C2C267810C92906DBA +0 -265
  178. package/.vs/CopilotSnapshots/C5C3CA4C37B14A47B6BC753D09F69117/state.mpack +0 -1
  179. package/.vs/CopilotSnapshots/C7190BBC8D95D44F9CF8E65E3E8C9CFD/4B6D07592F8EDC4AA3FF742B1F9531CC/1B80EB15A2FEBEC11C8210C5461F8DB7 +0 -43
  180. package/.vs/CopilotSnapshots/C7190BBC8D95D44F9CF8E65E3E8C9CFD/state.mpack +0 -1
  181. package/.vs/CopilotSnapshots/C79D12964917E44F9A5BB9D8FA725A0C/2071ADB146D8F7499419123B2A595A41/03E00441128DC70FFEA043158417AC9A +0 -15
  182. package/.vs/CopilotSnapshots/C79D12964917E44F9A5BB9D8FA725A0C/6ECBF707FE2A88418EA1649CE46068D5/03E00441128DC70FFEA043158417AC9A +0 -1
  183. package/.vs/CopilotSnapshots/C79D12964917E44F9A5BB9D8FA725A0C/70BAB1D82B755F47A2351CA905ACC0F1/03E00441128DC70FFEA043158417AC9A +0 -49
  184. package/.vs/CopilotSnapshots/C79D12964917E44F9A5BB9D8FA725A0C/99DDFADAEC5CA14D92CC470523A11743/03E00441128DC70FFEA043158417AC9A +0 -39
  185. package/.vs/CopilotSnapshots/C79D12964917E44F9A5BB9D8FA725A0C/state.mpack +0 -1
  186. package/.vs/CopilotSnapshots/D533D78C39683A4188A2CEC902BC03CD/2445F4111C26EB4DA5404F930E140F56/840203FFA9CCF5B33DFD5C7CC5B13527 +0 -6
  187. package/.vs/CopilotSnapshots/D533D78C39683A4188A2CEC902BC03CD/2445F4111C26EB4DA5404F930E140F56/C27E5C1787B7957BF6F0C3D417890141 +0 -1
  188. package/.vs/CopilotSnapshots/D533D78C39683A4188A2CEC902BC03CD/state.mpack +0 -1
  189. package/.vs/CopilotSnapshots/DCAA5A718EC8304685D14C52356D80E0/5FC7C36C7769414C80BFF27A07BB5063/BE400B34D9700403D2BA3A1AA6B1EF1D +0 -15
  190. package/.vs/CopilotSnapshots/DCAA5A718EC8304685D14C52356D80E0/A4DD9B92084D8E48A95435EDB2B14545/86848C7099AD75EE4E8F10E066F49671 +0 -15
  191. package/.vs/CopilotSnapshots/DCAA5A718EC8304685D14C52356D80E0/A4DD9B92084D8E48A95435EDB2B14545/BE400B34D9700403D2BA3A1AA6B1EF1D +0 -15
  192. package/.vs/CopilotSnapshots/DCAA5A718EC8304685D14C52356D80E0/state.mpack +0 -1
  193. package/.vs/CopilotSnapshots/DCF62F751B748642A0BF5D5125AB6769/5F324CB20D1B5045A13090FA9D177B74/7C951A8A572EA5C371FDE657AF968B9C +0 -96
  194. package/.vs/CopilotSnapshots/DCF62F751B748642A0BF5D5125AB6769/5F324CB20D1B5045A13090FA9D177B74/B692C85119711C76235AA5D78F9F3818 +0 -73
  195. package/.vs/CopilotSnapshots/DCF62F751B748642A0BF5D5125AB6769/5F324CB20D1B5045A13090FA9D177B74/EF71788BE39818EEA3F0164DC15E1BD7 +0 -182
  196. package/.vs/CopilotSnapshots/DCF62F751B748642A0BF5D5125AB6769/C1287B2893D30D40A46C30DC2CE05178/7C951A8A572EA5C371FDE657AF968B9C +0 -96
  197. package/.vs/CopilotSnapshots/DCF62F751B748642A0BF5D5125AB6769/C1287B2893D30D40A46C30DC2CE05178/B692C85119711C76235AA5D78F9F3818 +0 -98
  198. package/.vs/CopilotSnapshots/DCF62F751B748642A0BF5D5125AB6769/CA6304DFE7764A4C87ACE5816CDB7CD9/7C951A8A572EA5C371FDE657AF968B9C +0 -96
  199. package/.vs/CopilotSnapshots/DCF62F751B748642A0BF5D5125AB6769/CA6304DFE7764A4C87ACE5816CDB7CD9/B692C85119711C76235AA5D78F9F3818 +0 -21
  200. package/.vs/CopilotSnapshots/DCF62F751B748642A0BF5D5125AB6769/CA6304DFE7764A4C87ACE5816CDB7CD9/EF71788BE39818EEA3F0164DC15E1BD7 +0 -176
  201. package/.vs/CopilotSnapshots/DCF62F751B748642A0BF5D5125AB6769/state.mpack +0 -1
  202. package/.vs/VSWorkspaceState.json +0 -6
  203. package/.vs/slnx.sqlite +0 -0
  204. package/.vs/ts-sample/CopilotIndices/17.13.433.20974/CodeChunks.db +0 -0
  205. package/.vs/ts-sample/CopilotIndices/17.13.433.20974/SemanticSymbols.db +0 -0
  206. package/.vs/ts-sample/CopilotIndices/17.13.439.2385/CodeChunks.db +0 -0
  207. package/.vs/ts-sample/CopilotIndices/17.13.439.2385/SemanticSymbols.db +0 -0
  208. package/.vs/ts-sample/CopilotIndices/17.13.441.19478/CodeChunks.db +0 -0
  209. package/.vs/ts-sample/CopilotIndices/17.13.441.19478/SemanticSymbols.db +0 -0
  210. package/.vs/ts-sample/FileContentIndex/2fa9d8cc-9158-496d-aa9b-3a471d46a157.vsidx +0 -0
  211. package/.vs/ts-sample/FileContentIndex/5530f45b-244e-4271-b3e3-d8250f03da64.vsidx +0 -0
  212. package/.vs/ts-sample/FileContentIndex/75f95b5d-c8f7-49ca-a3d7-d1d8f63db437.vsidx +0 -0
  213. package/.vs/ts-sample/FileContentIndex/abb2aeeb-f62a-4ca7-bfbf-7a1eada625a5.vsidx +0 -0
  214. package/.vs/ts-sample/FileContentIndex/fc749b54-0f95-45f6-ac75-a8ab3409a5ce.vsidx +0 -0
  215. package/.vs/ts-sample/config/applicationhost.config +0 -1026
  216. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/0901b413-5d87-4b43-b248-80356492be7e +0 -0
  217. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/0f61a76a-b21f-46b7-821e-54c28a8d109b +0 -0
  218. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/101aef14-dd28-4de3-b2eb-e0b26d587b3a +0 -0
  219. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/22d4deb1-5da4-4057-ba4e-e745c04b2b0b +0 -0
  220. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/2a76030d-a09e-48cb-85f2-114567f23f93 +0 -0
  221. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/2c6d08ca-cb98-4233-8f7c-011c3b409234 +0 -0
  222. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/338dc290-9b2f-4929-8101-26139fca2640 +0 -0
  223. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/34c9ac3b-2061-4d82-b300-06e353477163 +0 -0
  224. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/3c01b107-5c38-4156-a5f5-100e0751210b +0 -0
  225. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/489ee702-f5df-4723-87cb-618de990598a +0 -0
  226. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/4ccac3c5-b137-474a-b6bc-753d09f69117 +0 -0
  227. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/505eddb5-d0ac-49fd-9856-4f0fde7faee0 +0 -0
  228. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/58e8d8c4-4293-4f5e-86f1-8850f5ca5c08 +0 -0
  229. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/5dbafa3e-3015-4c80-a04c-606f5efddc38 +0 -0
  230. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/5f29f527-e43a-4661-b60e-ff772041f413 +0 -0
  231. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/6248dfd7-38ae-4fa6-9176-2fdc0694c3e8 +0 -0
  232. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/66fcbd64-32dc-436d-80e6-7435a1a3ecf1 +0 -0
  233. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/6f9ad733-d555-4d2c-b073-eb6a1aada347 +0 -0
  234. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/715aaadc-c88e-4630-85d1-4c52356d80e0 +0 -0
  235. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/71ab164c-01dc-468c-a734-fbf0bf4aedd9 +0 -0
  236. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/752ee299-aec8-4ddf-b3a6-68a9adf0bc43 +0 -0
  237. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/752ff6dc-741b-4286-a0bf-5d5125ab6769 +0 -0
  238. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/7b50f25e-2a00-4ec1-a991-043c37c36551 +0 -0
  239. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/7f41e050-2ead-4d52-887c-b5763c2fb7b4 +0 -0
  240. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/85b50c9e-8895-4085-89c1-934ad2704744 +0 -0
  241. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/8b2f308d-46ae-4ef5-a82a-e1ded1a5d240 +0 -0
  242. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/8b5f907f-0dac-49ad-bd50-7ca45c569afd +0 -0
  243. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/8cd733d5-6839-413a-88a2-cec902bc03cd +0 -0
  244. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/90685124-4085-46d6-acbd-4fde8d6dd2d4 +0 -0
  245. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/96129dc7-1749-4fe4-9a5b-b9d8fa725a0c +0 -0
  246. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/967094af-46a3-4734-8c5d-084b8442cd81 +0 -0
  247. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/a29ed9a6-81d3-459f-ad80-87d7487f9318 +0 -0
  248. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/a9c1e2c1-dcc1-46fa-b1d5-f1c6f36a152d +0 -0
  249. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/badc76f4-d284-4b6c-94e9-abdbc74de540 +0 -0
  250. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/bb50ffbd-a9c1-4737-a000-1969c3bd195f +0 -0
  251. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/bc0b19c7-958d-4fd4-9cf8-e65e3e8c9cfd +0 -0
  252. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/c02d1a89-fae5-4c42-b8bd-da4fe26ed372 +0 -0
  253. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/c0caadb8-9dc1-4fb1-b838-8ba59a86bc74 +0 -0
  254. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/c250c9ae-d2fa-4701-aee8-e325e2ca0a78 +0 -0
  255. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/c31db710-c1c4-4ec0-8602-fa06d3925f98 +0 -0
  256. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/c7d99284-d9a2-4d51-b8a6-9d304b48bf3c +0 -0
  257. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/ddd1fab4-4016-4cfc-bf9f-f4a85bdfc112 +0 -0
  258. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/f10322ad-feb9-44ce-bb6d-5dc5d83e87aa +0 -0
  259. package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/f7778ca7-37a2-4d70-95bc-fe1bbc39fb0f +0 -0
  260. package/.vs/ts-sample/v17/.suo +0 -0
  261. package/.vs/ts-sample/v17/.wsuo +0 -0
  262. package/.vs/ts-sample/v17/DocumentLayout.backup.json +0 -425
  263. package/.vs/ts-sample/v17/DocumentLayout.json +0 -423
  264. package/.vs/ts-sample/v17/TestStore/0/000.testlog +0 -0
  265. 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
- }