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,174 +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 { SymbolTokenReader } from './tokenReaders/SymbolTokenReader';
6
-
7
- export class SqlTokenizer {
8
- /// <summary>
9
- /// Input string.
10
- /// </summary>
11
- private input: string;
12
-
13
- /// <summary>
14
- /// Current position in the input string.
15
- /// </summary>
16
- private position: number;
17
-
18
- constructor(input: string) {
19
- this.input = input;
20
- this.position = 0;
21
- }
22
-
23
- private isEndOfInput(shift: number = 0): boolean {
24
- return this.position + shift >= this.input.length;
25
- }
26
-
27
- private canRead(shift: number = 0): boolean {
28
- return !this.isEndOfInput(shift);
29
- }
30
-
31
- public readLexmes(): Lexeme[] {
32
- const lexemes: Lexeme[] = [];
33
-
34
- // Pre-allocate array based on the estimated number of tokens (on average, 1 token every 5 characters)
35
- const estimatedCapacity = Math.max(10, Math.ceil(this.input.length / 5));
36
- lexemes.length = 0;
37
-
38
- // Skip whitespace and comments at the start
39
- this.skipWhiteSpacesAndComments();
40
-
41
- // Initialize each token reader
42
- const symbolReader = new SymbolTokenReader(this.input, this.position);
43
- const identifierReader = new IdentifierTokenReader(this.input, this.position);
44
- const literalReader = new LiteralTokenReader(this.input, this.position);
45
- const parameterReader = new ParameterTokenReader(this.input, this.position);
46
-
47
- // Track the previous token
48
- let previous: Lexeme | null = null;
49
-
50
- // Read tokens until the end of the input is reached
51
- while (this.canRead()) {
52
- let lexeme: Lexeme | null = null;
53
-
54
- // Attempt to read with each reader in order
55
- parameterReader.setPosition(this.position);
56
- lexeme = parameterReader.tryRead(previous);
57
-
58
- if (!lexeme) {
59
- literalReader.setPosition(this.position);
60
- lexeme = literalReader.tryRead(previous);
61
- }
62
-
63
- if (!lexeme) {
64
- identifierReader.setPosition(this.position);
65
- lexeme = identifierReader.tryRead(previous);
66
- }
67
-
68
- if (!lexeme) {
69
- symbolReader.setPosition(this.position);
70
- lexeme = symbolReader.tryRead(previous);
71
- }
72
-
73
- // If a token is read by any reader
74
- if (lexeme) {
75
- lexemes.push(lexeme);
76
- previous = lexeme;
77
-
78
- // Update position
79
- const newPos = Math.max(
80
- symbolReader.getPosition(),
81
- literalReader.getPosition(),
82
- identifierReader.getPosition(),
83
- parameterReader.getPosition()
84
- );
85
- this.position = newPos;
86
-
87
- // Skip whitespace and comments after the token
88
- this.skipWhiteSpacesAndComments();
89
- } else {
90
- // Exception
91
- throw new Error(`Unexpected character. actual: ${this.input[this.position]}, position: ${this.position}`);
92
- }
93
- }
94
-
95
- return lexemes;
96
- }
97
-
98
- /// <summary>
99
- /// Skip white space characters and sql comments.
100
- /// </summary>
101
- private skipWhiteSpacesAndComments(): void {
102
- while (true) {
103
- if (this.skipWhiteSpace()) {
104
- continue;
105
- }
106
- if (this.skipLineComment()) {
107
- continue;
108
- }
109
- if (this.skipBlockComment()) {
110
- continue;
111
- }
112
- break;
113
- }
114
- }
115
-
116
- private skipWhiteSpace(): boolean {
117
- const start = this.position;
118
-
119
- // Skip tab, newline, and space characters
120
- const whitespace = new Set([' ', '\r', '\n', '\t']);
121
-
122
- while (this.canRead()) {
123
- if (!whitespace.has(this.input[this.position])) {
124
- break;
125
- }
126
- this.position++;
127
- }
128
- return start !== this.position;
129
- }
130
-
131
- private skipLineComment(): boolean {
132
- // At least 2 characters are needed. '--'
133
- if (this.isEndOfInput(1)) {
134
- return false;
135
- }
136
-
137
- if (this.input[this.position] === '-' && this.input[this.position + 1] === '-') {
138
- this.position += 2;
139
-
140
- while (this.canRead() && this.input[this.position] !== '\n') {
141
- this.position++;
142
- }
143
- return true;
144
- }
145
-
146
- return false;
147
- }
148
-
149
- private skipBlockComment(): boolean {
150
- // At least 4 characters are needed. '/**/'
151
- if (this.isEndOfInput(3)) {
152
- return false;
153
- }
154
-
155
- // Record the start position of the comment to track error location
156
- const start = this.position;
157
-
158
- if (this.input[this.position] === '/' && this.input[this.position + 1] === '*') {
159
- this.position += 2;
160
-
161
- while (this.canRead(1)) {
162
- if (this.input[this.position] === '*' && this.input[this.position + 1] === '/') {
163
- this.position += 2;
164
- return true;
165
- }
166
- this.position++;
167
- }
168
-
169
- throw new Error(`Block comment is not closed. position: ${start}`);
170
- }
171
-
172
- return false;
173
- }
174
- }
@@ -1 +0,0 @@
1
- ��SessionId��$7f41e050-2ead-4d52-887c-b5763c2fb7b4��Id�4Microsoft.VisualStudio.Conversations.Chat.HelpWindow�CorrelationStates���CorrelationId�$50c2a463-dcd9-4be0-9f61-d8833b89b5bf�Snapshots�� EF71788BE39818EEA3F0164DC15E1BD7��SavedFileName١C:\Users\mssgm\Documents\GitHub\ts-sample\.vs\CopilotSnapshots\50E0417FAD2E524D887CB5763C2FB7B4\63A4C250D9DCE04B9F61D8833B89B5BF\EF71788BE39818EEA3F0164DC15E1BD7�OriginalFilePath�=C:\Users\mssgm\Documents\GitHub\ts-sample\src\sqlTokenizer.ts�NewFileMarker�
@@ -1,496 +0,0 @@
1
- import { TokenType } from './enums/tokenType';
2
-
3
- interface Lexeme {
4
- type: TokenType;
5
- value: string;
6
- command?: string; // Add the command property
7
- }
8
-
9
- export class SqlTokenizer {
10
- /// <summary>
11
- /// Input string.
12
- /// </summary>
13
- private input: string;
14
-
15
- /// <summary>
16
- /// Current position in the input string.
17
- /// </summary>
18
- private position: number;
19
-
20
- constructor(input: string) {
21
- this.input = input;
22
- this.position = 0;
23
- }
24
-
25
- private isEndOfInput(shift: number = 0): boolean {
26
- return this.position + shift >= this.input.length;
27
- }
28
-
29
- private canRead(shift: number = 0): boolean {
30
- return !this.isEndOfInput(shift);
31
- }
32
-
33
- private read(expectChar: string): string {
34
- if (this.isEndOfInput()) {
35
- throw new Error(`Unexpected character. expect: ${expectChar}, actual: EndOfInut, position: ${this.position}`);
36
- }
37
-
38
- if (this.input[this.position] !== expectChar) {
39
- throw new Error(`Unexpected character. expect: ${expectChar}, actual: ${this.input[this.position]}, position: ${this.position}`);
40
- }
41
-
42
- var char = this.input[this.position];
43
- this.position++;
44
- return char;
45
- }
46
-
47
- private static readonly SYMBOL_TOKENS: Record<string, TokenType> = {
48
- '.': TokenType.Dot,
49
- ',': TokenType.Comma,
50
- '(': TokenType.OpenParen,
51
- ')': TokenType.CloseParen,
52
- };
53
-
54
- private getDebugPositionInfo(errPosition: number): string {
55
- // Get 5 characters before and after the error
56
- // If the start and end points are out of the string range, keep them within the range
57
- // Display ^ at the error position on the next line
58
- const start = Math.max(0, errPosition - 5);
59
- const end = Math.min(this.input.length, errPosition + 5);
60
- const debugInfo = this.input.slice(start, end);
61
- const caret = ' '.repeat(errPosition - start) + '^';
62
- return `${debugInfo}\n${caret}`;
63
- }
64
-
65
- public readLexmes(): Lexeme[] {
66
- const lexemes: Lexeme[] = [];
67
-
68
- let lexeme: Lexeme | null = null;
69
- while ((lexeme = this.readLexme(lexeme)) !== null) {
70
- lexemes.push(lexeme);
71
- }
72
- return lexemes;
73
- }
74
-
75
- public readLexme(previous: Lexeme | null = null): Lexeme | null {
76
- // end of input
77
- if (this.isEndOfInput()) {
78
- return null;
79
- }
80
-
81
- this.skipWhiteSpacesAndComments();
82
-
83
- // current character
84
- const char = this.input[this.position];
85
-
86
- // Try each token type handler in order
87
- const lexeme = this.tryReadDecimalToken(char) ||
88
- this.tryReadSymbolToken(char) ||
89
- this.tryReadEscapedIdentifier(char, previous) ||
90
- this.tryReadParameter(char) ||
91
- this.tryReadStringLiteral(char) ||
92
- this.tryReadDigit(char) ||
93
- this.tryReadSignedNumber(char, previous) ||
94
- this.tryReadEscapedLiteral(char);
95
-
96
- if (lexeme) {
97
- return lexeme;
98
- }
99
-
100
- // Default to reading an identifier if no other token type matches
101
- const identifier = this.readIdentifier();
102
- return {
103
- type: TokenType.Identifier,
104
- value: identifier
105
- };
106
- }
107
-
108
- private tryReadDecimalToken(char: string): Lexeme | null {
109
- // digit tokens (prioritize dot for decimal point and delimiter)
110
- if (char === '.' && this.canRead(1) && /[0-9]/.test(this.input[this.position + 1])) {
111
- return {
112
- type: TokenType.Literal,
113
- value: this.readDigit()
114
- };
115
- }
116
- return null;
117
- }
118
-
119
- private tryReadSymbolToken(char: string): Lexeme | null {
120
- // symbol tokens
121
- if (char in SqlTokenizer.SYMBOL_TOKENS) {
122
- this.position++;
123
- return {
124
- type: SqlTokenizer.SYMBOL_TOKENS[char],
125
- value: char,
126
- command: char.toLowerCase()
127
- };
128
- }
129
- return null;
130
- }
131
-
132
- private tryReadEscapedIdentifier(char: string, previous: Lexeme | null): Lexeme | null {
133
- // MySQL escaped identifier (escape character is backtick)
134
- if (char === '`') {
135
- const identifier = this.readEscapedIdentifier('`');
136
- return {
137
- type: TokenType.Identifier,
138
- value: identifier
139
- };
140
- }
141
-
142
- // Postgres escaped identifier (escape character is double quote)
143
- if (char === '"') {
144
- const identifier = this.readEscapedIdentifier('"');
145
- return {
146
- type: TokenType.Identifier,
147
- value: identifier
148
- };
149
- }
150
-
151
- // SQLServer escaped identifier (escape character is square bracket)
152
- if (char === '[' && (previous === null || previous.command !== "array")) {
153
- const identifier = this.readEscapedIdentifier(']');
154
- return {
155
- type: TokenType.Identifier,
156
- value: identifier,
157
- };
158
- }
159
-
160
- return null;
161
- }
162
-
163
- private tryReadParameter(char: string): Lexeme | null {
164
- // named parameter
165
- const namedParameterPrefix = new Set(['@', ':', '$']);
166
- if (namedParameterPrefix.has(char)) {
167
- this.position++;
168
- const value = char + this.readIdentifier();
169
- return {
170
- type: TokenType.Parameter,
171
- value
172
- };
173
- }
174
-
175
- // nameless parameter
176
- if (char === '?') {
177
- this.position++;
178
- return {
179
- type: TokenType.Parameter,
180
- value: char
181
- };
182
- }
183
-
184
- return null;
185
- }
186
-
187
- private tryReadStringLiteral(char: string): Lexeme | null {
188
- // string literal
189
- if (char === '\'') {
190
- const value = this.readSingleQuotedString();
191
- return {
192
- type: TokenType.Literal,
193
- value
194
- };
195
- }
196
-
197
- return null;
198
- }
199
-
200
- private tryReadDigit(char: string): Lexeme | null {
201
- // digit tokens
202
- if (/[0-9]/.test(char)) {
203
- return {
204
- type: TokenType.Literal,
205
- value: this.readDigit()
206
- };
207
- }
208
-
209
- return null;
210
- }
211
-
212
- private tryReadSignedNumber(char: string, previous: Lexeme | null): Lexeme | null {
213
- // Check if this could be a signed number (not after a literal/identifier)
214
- const isValidNumericPrefix = previous === null ||
215
- (previous.type !== TokenType.Literal &&
216
- previous.type !== TokenType.Identifier);
217
-
218
- // positive number
219
- if (char === '+' && isValidNumericPrefix) {
220
- this.position++;
221
- this.skipWhiteSpacesAndComments();
222
- // removed positive sign
223
- return {
224
- type: TokenType.Literal,
225
- value: this.readDigit()
226
- };
227
- }
228
-
229
- // negative number
230
- if (char === '-' && isValidNumericPrefix) {
231
- this.position++;
232
- this.skipWhiteSpacesAndComments();
233
- // include negative sign
234
- return {
235
- type: TokenType.Literal,
236
- value: char + this.readDigit()
237
- };
238
- }
239
-
240
- return null;
241
- }
242
-
243
- private tryReadEscapedLiteral(char: string): Lexeme | null {
244
- const start = this.position;
245
-
246
- const prefix = new Set(['e\'', 'x\'', 'b\'']);
247
- if (this.canRead(1) && prefix.has(this.input.slice(start, 2).toLocaleLowerCase())) {
248
- this.position += 2;
249
-
250
- while (this.canRead()) {
251
- if (this.input[this.position] === '\\' && this.canRead(1) && this.input[this.position + 1] === '\'') {
252
- this.position += 2;
253
- continue;
254
- }
255
- else if (this.input[this.position] === '\'') {
256
- this.position++;
257
- break;
258
- }
259
- this.position++;
260
- }
261
-
262
- if (this.position - 2 === start) {
263
- throw new Error(`Closing delimiter is not found. position: ${start}`);
264
- };
265
-
266
- return {
267
- type: TokenType.Literal,
268
- value: this.input.slice(start, this.position)
269
- };
270
- }
271
-
272
- // u&'
273
- if (this.canRead(2) && this.input.slice(start, 3).toLocaleLowerCase() === 'u&\'') {
274
- this.position += 3;
275
-
276
- while (this.canRead()) {
277
- if (this.input[this.position] === '\\' && this.canRead(1) && this.input[this.position + 1] === '\'') {
278
- this.position += 2;
279
- continue;
280
- }
281
- else if (this.input[this.position] === '\'') {
282
- this.position++;
283
- break;
284
- }
285
- this.position++;
286
- }
287
- if (this.position - 2 === start) {
288
- throw new Error(`Closing delimiter is not found. position: ${start}`);
289
- };
290
- return {
291
- type: TokenType.Literal,
292
- value: this.input.slice(start, this.position)
293
- }
294
- }
295
-
296
- return null;
297
- }
298
-
299
- private readDigit(): string {
300
- const start = this.position;
301
- let hasDot = false;
302
- let hasExponent = false;
303
-
304
- // Consider 0x, 0b, 0o
305
- const prefix = new Set(['0x', '0b', '0o']);
306
- if (this.canRead(1) && prefix.has(this.input.slice(start, 2).toLocaleLowerCase())) {
307
- this.position += 2;
308
-
309
- // Continue to get numeric and hexadecimal notation strings
310
- while (this.canRead() && /[0-9a-f]/i.test(this.input[this.position])) {
311
- this.position++;
312
- }
313
-
314
- return this.input.slice(start, this.position);
315
- }
316
-
317
- // Consider decimal point and exponential notation
318
- while (this.canRead()) {
319
- const char = this.input[this.position];
320
-
321
- if (char === '.' && !hasDot) {
322
- hasDot = true;
323
- } else if ((char === 'e' || char === 'E') && !hasExponent) {
324
- hasExponent = true;
325
- if (this.canRead(1) && (this.input[this.position + 1] === '+' || this.input[this.position + 1] === '-')) {
326
- this.position++;
327
- }
328
- } else if (!/[0-9]/.test(char)) {
329
- break;
330
- }
331
-
332
- this.position++;
333
- }
334
-
335
- if (start === this.position) {
336
- throw new Error(`Unexpected character. position: ${start}`);
337
- }
338
-
339
- if (this.input[start] === '.') {
340
- // If the number starts with a dot, add 0 to the front
341
- return '0' + this.input.slice(start, this.position);
342
- }
343
-
344
- return this.input.slice(start, this.position);
345
- }
346
-
347
- private readEscapedIdentifier(delimiter: string): string {
348
- const start = this.position;
349
-
350
- // Skip the opening delimiter
351
- this.position++;
352
-
353
- while (this.canRead()) {
354
- if (this.input[this.position] === delimiter) {
355
- break;
356
- }
357
- this.position++;
358
- }
359
- if (start === this.position) {
360
- throw new Error(`Closing delimiter is not found. position: ${start}, delimiter: ${delimiter}`);
361
- }
362
-
363
- // Skip the closing delimiter
364
- this.position++;
365
-
366
- // exclude the delimiter
367
- return this.input.slice(start + 1, this.position - 1);
368
- }
369
-
370
- private readSingleQuotedString(): string {
371
- const start = this.position;
372
-
373
- this.read('\'');
374
-
375
- while (this.canRead()) {
376
- var char = this.input[this.position];
377
-
378
- // escape character check
379
- if (char === '\\' && this.canRead(1) && this.input[this.position + 1] === '\'') {
380
- this.position += 2;
381
- continue;
382
- }
383
- else if (char === '\'') {
384
- break;
385
- }
386
- this.position++;
387
- }
388
-
389
- if (this.isEndOfInput()) {
390
- throw new Error(`Single quote is not closed. position: ${start}`);
391
- }
392
-
393
- const value = this.input.slice(start, this.position);
394
- this.position++;
395
- return value;
396
- }
397
-
398
- private readIdentifier(): string {
399
- const start = this.position;
400
-
401
- // Read until a delimiter appears
402
- // Space, dot, comma, parentheses, arithmetic operators
403
- // Note that underscores are treated as part of the word
404
- const delimiters = new Set([' ', '.', ',', '(', ')', '+', '-', '*', '/']);
405
-
406
- while (this.canRead()) {
407
- if (delimiters.has(this.input[this.position])) {
408
- break;
409
- }
410
- this.position++;
411
- }
412
-
413
- if (start === this.position) {
414
- throw new Error(`Unexpected character. position: ${start}\n${this.getDebugPositionInfo(start)}`);
415
- }
416
-
417
- return this.input.slice(start, this.position);
418
- }
419
-
420
- /// <summary>
421
- /// Skip white space characters and sql comments.
422
- /// </summary>
423
- private skipWhiteSpacesAndComments(): void {
424
- while (true) {
425
- if (this.skipWhiteSpace()) {
426
- continue;
427
- }
428
- if (this.skipLineComment()) {
429
- continue;
430
- }
431
- if (this.skipBlockComment()) {
432
- continue;
433
- }
434
- break;
435
- }
436
- }
437
-
438
- private skipWhiteSpace(): boolean {
439
- const start = this.position;
440
-
441
- // Skip tab, newline, and space characters
442
- const whitespace = new Set([' ', '\r', '\n', '\t']);
443
-
444
- while (this.canRead()) {
445
- if (!whitespace.has(this.input[this.position])) {
446
- break;
447
- }
448
- this.position++;
449
- }
450
- return start !== this.position;
451
- }
452
-
453
- private skipLineComment(): boolean {
454
- // At least 2 characters are needed. '--'
455
- if (this.isEndOfInput(1)) {
456
- return false;
457
- }
458
-
459
- if (this.input[this.position] === '-' && this.input[this.position + 1] === '-') {
460
- this.position += 2;
461
-
462
- while (this.canRead() && this.input[this.position] !== '\n') {
463
- this.position++;
464
- }
465
- return true;
466
- }
467
-
468
- return false;
469
- }
470
-
471
- private skipBlockComment(): boolean {
472
- // At least 4 characters are needed. '/**/'
473
- if (this.isEndOfInput(3)) {
474
- return false;
475
- }
476
-
477
- // Record the start position of the comment to track error location
478
- const start = this.position;
479
-
480
- if (this.input[this.position] === '/' && this.input[this.position + 1] === '*') {
481
- this.position += 2;
482
-
483
- while (this.canRead(1)) {
484
- if (this.input[this.position] === '*' && this.input[this.position + 1] === '/') {
485
- this.position += 2;
486
- return true;
487
- }
488
- this.position++;
489
- }
490
-
491
- throw new Error(`Block comment is not closed. position: ${start}`);
492
- }
493
-
494
- return false;
495
- }
496
- }
@@ -1 +0,0 @@
1
- ��SessionId��$7b50f25e-2a00-4ec1-a991-043c37c36551��Id�4Microsoft.VisualStudio.Conversations.Chat.HelpWindow�CorrelationStates���CorrelationId�$de68ff60-9d48-4fad-bcbb-b54aa3f6a552�Snapshots�� EF71788BE39818EEA3F0164DC15E1BD7��SavedFileName١C:\Users\mssgm\Documents\GitHub\ts-sample\.vs\CopilotSnapshots\5EF2507B002AC14EA991043C37C36551\60FF68DE489DAD4FBCBBB54AA3F6A552\EF71788BE39818EEA3F0164DC15E1BD7�OriginalFilePath�=C:\Users\mssgm\Documents\GitHub\ts-sample\src\sqlTokenizer.ts�NewFileMarker�
@@ -1 +0,0 @@
1
- ��SessionId��$0f61a76a-b21f-46b7-821e-54c28a8d109b��Id�4Microsoft.VisualStudio.Conversations.Chat.HelpWindow�CorrelationStates���CorrelationId�$0f8cb77f-b08c-4a4f-a6af-3315277b80f8�Snapshots�� FB35DD13E708043D4CD8ACD54E14708F��SavedFileName١C:\Users\mssgm\Documents\GitHub\ts-sample\.vs\CopilotSnapshots\6AA7610F1FB2B746821E54C28A8D109B\7FB78C0F8CB04F4AA6AF3315277B80F8\FB35DD13E708043D4CD8ACD54E14708F�OriginalFilePath�>C:\Users\mssgm\Documents\GitHub\ts-sample\ts-sample\.gitignore�NewFileMarker�
@@ -1,5 +0,0 @@
1
- import { TokenType } from "../src/enums/tokenType";
2
- import { SqlTokenizer } from "../src/sqlTokenizer";
3
-
4
- // e.g 1+1, 1*2, 1/3, 1%4
5
-