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.
- package/dist/index.d.ts +13 -0
- package/dist/models/BinarySelectQuery.d.ts +91 -0
- package/dist/models/Clause.d.ts +189 -0
- package/dist/models/KeywordTrie.d.ts +11 -0
- package/dist/models/Lexeme.d.ts +25 -0
- package/dist/models/SelectQuery.d.ts +5 -0
- package/dist/models/SimpleSelectQuery.d.ts +167 -0
- package/dist/models/SqlComponent.d.ts +18 -0
- package/dist/models/ValueComponent.d.ts +158 -0
- package/dist/models/ValuesQuery.d.ts +10 -0
- package/dist/parsers/CommandExpressionParser.d.ts +15 -0
- package/dist/parsers/CommonTableParser.d.ts +9 -0
- package/dist/parsers/ForClauseParser.d.ts +9 -0
- package/dist/parsers/FromClauseParser.d.ts +9 -0
- package/dist/parsers/FunctionExpressionParser.d.ts +22 -0
- package/dist/parsers/GroupByParser.d.ts +10 -0
- package/dist/parsers/HavingParser.d.ts +9 -0
- package/dist/parsers/IdentifierParser.d.ts +8 -0
- package/dist/parsers/JoinClauseParser.d.ts +14 -0
- package/dist/parsers/KeywordParser.d.ts +17 -0
- package/dist/parsers/LimitClauseParser.d.ts +9 -0
- package/dist/parsers/LiteralParser.d.ts +8 -0
- package/dist/parsers/OrderByClauseParser.d.ts +10 -0
- package/dist/parsers/OverExpressionParser.d.ts +9 -0
- package/dist/parsers/ParameterExpressionParser.d.ts +8 -0
- package/dist/parsers/ParenExpressionParser.d.ts +8 -0
- package/dist/parsers/PartitionByParser.d.ts +9 -0
- package/dist/parsers/SelectClauseParser.d.ts +10 -0
- package/dist/parsers/SelectQueryParser.d.ts +13 -0
- package/dist/parsers/SourceAliasExpressionParser.d.ts +8 -0
- package/dist/parsers/SourceExpressionParser.d.ts +8 -0
- package/dist/parsers/SourceParser.d.ts +13 -0
- package/dist/parsers/SqlTokenizer.d.ts +64 -0
- package/dist/parsers/StringSpecifierExpressionParser.d.ts +8 -0
- package/dist/parsers/UnaryExpressionParser.d.ts +8 -0
- package/dist/parsers/ValueParser.d.ts +14 -0
- package/dist/parsers/ValuesQueryParser.d.ts +10 -0
- package/dist/parsers/WhereClauseParser.d.ts +9 -0
- package/dist/parsers/WindowClauseParser.d.ts +9 -0
- package/dist/parsers/WindowExpressionParser.d.ts +12 -0
- package/dist/parsers/WithClauseParser.d.ts +9 -0
- package/dist/tokenReaders/BaseTokenReader.d.ts +43 -0
- package/dist/tokenReaders/CommandTokenReader.d.ts +7 -0
- package/dist/tokenReaders/FunctionTokenReader.d.ts +11 -0
- package/dist/tokenReaders/IdentifierTokenReader.d.ts +15 -0
- package/dist/tokenReaders/LiteralTokenReader.d.ts +23 -0
- package/dist/tokenReaders/OperatorTokenReader.d.ts +5 -0
- package/dist/tokenReaders/ParameterTokenReader.d.ts +11 -0
- package/dist/tokenReaders/StringSpecifierTokenReader.d.ts +8 -0
- package/dist/tokenReaders/SymbolTokenReader.d.ts +12 -0
- package/dist/tokenReaders/TokenReaderManager.d.ts +53 -0
- package/dist/tokenReaders/TypeTokenReader.d.ts +11 -0
- package/dist/transformers/CTEBuilder.d.ts +52 -0
- package/dist/transformers/CTECollector.d.ts +81 -0
- package/dist/transformers/CTEDisabler.d.ts +77 -0
- package/dist/transformers/CTEInjector.d.ts +40 -0
- package/dist/transformers/CTENormalizer.d.ts +25 -0
- package/dist/transformers/Formatter.d.ts +67 -0
- package/dist/transformers/QueryNormalizer.d.ts +37 -0
- package/dist/transformers/SelectValueCollector.d.ts +62 -0
- package/dist/transformers/SelectableColumnCollector.d.ts +70 -0
- package/dist/transformers/TableSourceCollector.d.ts +92 -0
- package/dist/transformers/UpstreamSelectQueryFinder.d.ts +27 -0
- package/dist/utils/charLookupTable.d.ts +11 -0
- package/dist/utils/stringUtils.d.ts +43 -0
- package/package.json +6 -3
- package/.vs/CopilotSnapshots/02E79E48DFF5234787CB618DE990598A/48814CCF3E4E4B44A66AB8BC7D6CF6B6/904140CF7EDF0C98AEA45F0D36062FE1 +0 -1
- package/.vs/CopilotSnapshots/02E79E48DFF5234787CB618DE990598A/48814CCF3E4E4B44A66AB8BC7D6CF6B6/A32D1DB906C73FA74EF270AAEE165FC0 +0 -86
- package/.vs/CopilotSnapshots/02E79E48DFF5234787CB618DE990598A/48814CCF3E4E4B44A66AB8BC7D6CF6B6/E621434FB1D5415B14FBBCC11967E420 +0 -34
- package/.vs/CopilotSnapshots/02E79E48DFF5234787CB618DE990598A/48814CCF3E4E4B44A66AB8BC7D6CF6B6/EF71788BE39818EEA3F0164DC15E1BD7 +0 -170
- package/.vs/CopilotSnapshots/02E79E48DFF5234787CB618DE990598A/state.mpack +0 -1
- package/.vs/CopilotSnapshots/07B1013C385C5641A5F5100E0751210B/0C73C015B2C859419AFBD08BE1343FC0/BA5D2B145A59265D63FA3B3584344B02 +0 -236
- package/.vs/CopilotSnapshots/07B1013C385C5641A5F5100E0751210B/state.mpack +0 -1
- package/.vs/CopilotSnapshots/0D03762A9EA0CB4885F2114567F23F93/A9AF50781E77B849AA3262D2738D9338/1F95FD72006ED6E92629CEFD7B2C4FEC +0 -1
- package/.vs/CopilotSnapshots/0D03762A9EA0CB4885F2114567F23F93/A9AF50781E77B849AA3262D2738D9338/4CA7B9D3BC2D0A498DC0777EDA3F9B0F +0 -1
- package/.vs/CopilotSnapshots/0D03762A9EA0CB4885F2114567F23F93/A9AF50781E77B849AA3262D2738D9338/7B623BFBAEB4EB61A9585F0BC8039B06 +0 -19
- package/.vs/CopilotSnapshots/0D03762A9EA0CB4885F2114567F23F93/CA94452964F7A94B8ECE3B54EE21B50F/1F95FD72006ED6E92629CEFD7B2C4FEC +0 -5
- package/.vs/CopilotSnapshots/0D03762A9EA0CB4885F2114567F23F93/CA94452964F7A94B8ECE3B54EE21B50F/4CA7B9D3BC2D0A498DC0777EDA3F9B0F +0 -3
- package/.vs/CopilotSnapshots/0D03762A9EA0CB4885F2114567F23F93/CA94452964F7A94B8ECE3B54EE21B50F/7B623BFBAEB4EB61A9585F0BC8039B06 +0 -21
- package/.vs/CopilotSnapshots/0D03762A9EA0CB4885F2114567F23F93/state.mpack +0 -1
- package/.vs/CopilotSnapshots/10B71DC3C4C1C04E8602FA06D3925F98/23B181EB1228EF40ABCEF51E89FBF6E6/41035D2B1D57326B55F66372017E223A +0 -1
- package/.vs/CopilotSnapshots/10B71DC3C4C1C04E8602FA06D3925F98/23B181EB1228EF40ABCEF51E89FBF6E6/45EABF6EF6BDFAA58C941A29E98C9C83 +0 -113
- package/.vs/CopilotSnapshots/10B71DC3C4C1C04E8602FA06D3925F98/23B181EB1228EF40ABCEF51E89FBF6E6/748E0B8859CA1A5FDCA675C9E53B6D1C +0 -1
- package/.vs/CopilotSnapshots/10B71DC3C4C1C04E8602FA06D3925F98/23B181EB1228EF40ABCEF51E89FBF6E6/A250FF4AD59546A65FFDC6AA92A4698E +0 -1
- package/.vs/CopilotSnapshots/10B71DC3C4C1C04E8602FA06D3925F98/23B181EB1228EF40ABCEF51E89FBF6E6/C42432BC73D8AA122171FAB6EEB13CBC +0 -19
- package/.vs/CopilotSnapshots/10B71DC3C4C1C04E8602FA06D3925F98/state.mpack +0 -1
- package/.vs/CopilotSnapshots/13B40109875D434BB24880356492BE7E/828B96E81CC7014B887AA519767FACC3/437DAEC1EBBAF4F25ABA1B6A25EB6933 +0 -25
- package/.vs/CopilotSnapshots/13B40109875D434BB24880356492BE7E/state.mpack +0 -1
- package/.vs/CopilotSnapshots/245168908540D646ACBD4FDE8D6DD2D4/1CDE8BAB21868E4D893E119554BA87E5/904140CF7EDF0C98AEA45F0D36062FE1 +0 -63
- package/.vs/CopilotSnapshots/245168908540D646ACBD4FDE8D6DD2D4/1CDE8BAB21868E4D893E119554BA87E5/DFF70C60F68ECD9A4E4C3C74E4CC4DEE +0 -1
- package/.vs/CopilotSnapshots/245168908540D646ACBD4FDE8D6DD2D4/1CDE8BAB21868E4D893E119554BA87E5/EF71788BE39818EEA3F0164DC15E1BD7 +0 -170
- package/.vs/CopilotSnapshots/245168908540D646ACBD4FDE8D6DD2D4/state.mpack +0 -1
- package/.vs/CopilotSnapshots/3BACC9346120824DB30006E353477163/87C831E9EA1AA249A25A44D08CF8E0B5/EF71788BE39818EEA3F0164DC15E1BD7 +0 -328
- package/.vs/CopilotSnapshots/3BACC9346120824DB30006E353477163/state.mpack +0 -1
- package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/14FE66AD0B834E488EECD9594AE72472/23E7151F0483C5BB5E663F83D4962FD4 +0 -1
- package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/14FE66AD0B834E488EECD9594AE72472/2D4DCEBC89D52B097AEEEABA23C0EB59 +0 -1
- package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/14FE66AD0B834E488EECD9594AE72472/7C951A8A572EA5C371FDE657AF968B9C +0 -1
- package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/14FE66AD0B834E488EECD9594AE72472/A32D1DB906C73FA74EF270AAEE165FC0 +0 -1
- package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/14FE66AD0B834E488EECD9594AE72472/B692C85119711C76235AA5D78F9F3818 +0 -1
- package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/14FE66AD0B834E488EECD9594AE72472/E602628EF6D764C2C267810C92906DBA +0 -1
- package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/14FE66AD0B834E488EECD9594AE72472/E621434FB1D5415B14FBBCC11967E420 +0 -1
- package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/9C5A45FA50D5344FBB275F406599FF4E/23E7151F0483C5BB5E663F83D4962FD4 +0 -1
- package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/9C5A45FA50D5344FBB275F406599FF4E/2D4DCEBC89D52B097AEEEABA23C0EB59 +0 -1
- package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/9C5A45FA50D5344FBB275F406599FF4E/7C951A8A572EA5C371FDE657AF968B9C +0 -1
- package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/9C5A45FA50D5344FBB275F406599FF4E/A32D1DB906C73FA74EF270AAEE165FC0 +0 -1
- package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/9C5A45FA50D5344FBB275F406599FF4E/B692C85119711C76235AA5D78F9F3818 +0 -1
- package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/9C5A45FA50D5344FBB275F406599FF4E/E602628EF6D764C2C267810C92906DBA +0 -1
- package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/9C5A45FA50D5344FBB275F406599FF4E/E621434FB1D5415B14FBBCC11967E420 +0 -1
- package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/9C5A45FA50D5344FBB275F406599FF4E/EF71788BE39818EEA3F0164DC15E1BD7 +0 -489
- package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/state.mpack +0 -1
- package/.vs/CopilotSnapshots/4C16AB71DC018C46A734FBF0BF4AEDD9/0E5F1D40C0CAE848B8F9457F29A1F3FF/D03CD05B4F5C8B7C8CDF0B5E1961B3CA +0 -42
- package/.vs/CopilotSnapshots/4C16AB71DC018C46A734FBF0BF4AEDD9/462A64EF41A4BF42A18708B83E02FD6F/D03CD05B4F5C8B7C8CDF0B5E1961B3CA +0 -40
- package/.vs/CopilotSnapshots/4C16AB71DC018C46A734FBF0BF4AEDD9/90C95C12B91FA142BEF509B6FA329DE5/A3B20E10A19C7CA170132274D2F9312B +0 -9
- package/.vs/CopilotSnapshots/4C16AB71DC018C46A734FBF0BF4AEDD9/90C95C12B91FA142BEF509B6FA329DE5/D03CD05B4F5C8B7C8CDF0B5E1961B3CA +0 -1
- package/.vs/CopilotSnapshots/4C16AB71DC018C46A734FBF0BF4AEDD9/AD7513C9BBFE904AAB7F940397B95A99/D03CD05B4F5C8B7C8CDF0B5E1961B3CA +0 -42
- package/.vs/CopilotSnapshots/4C16AB71DC018C46A734FBF0BF4AEDD9/state.mpack +0 -1
- package/.vs/CopilotSnapshots/50E0417FAD2E524D887CB5763C2FB7B4/63A4C250D9DCE04B9F61D8833B89B5BF/EF71788BE39818EEA3F0164DC15E1BD7 +0 -174
- package/.vs/CopilotSnapshots/50E0417FAD2E524D887CB5763C2FB7B4/state.mpack +0 -1
- package/.vs/CopilotSnapshots/5EF2507B002AC14EA991043C37C36551/60FF68DE489DAD4FBCBBB54AA3F6A552/EF71788BE39818EEA3F0164DC15E1BD7 +0 -496
- package/.vs/CopilotSnapshots/5EF2507B002AC14EA991043C37C36551/state.mpack +0 -1
- package/.vs/CopilotSnapshots/6AA7610F1FB2B746821E54C28A8D109B/7FB78C0F8CB04F4AA6AF3315277B80F8/FB35DD13E708043D4CD8ACD54E14708F +0 -1
- package/.vs/CopilotSnapshots/6AA7610F1FB2B746821E54C28A8D109B/state.mpack +0 -1
- package/.vs/CopilotSnapshots/7F905F8BAC0DAD49BD507CA45C569AFD/5782E13CAB03A04E9E1EC5692F892170/BA5D2B145A59265D63FA3B3584344B02 +0 -5
- package/.vs/CopilotSnapshots/7F905F8BAC0DAD49BD507CA45C569AFD/5782E13CAB03A04E9E1EC5692F892170/EF71788BE39818EEA3F0164DC15E1BD7 +0 -158
- package/.vs/CopilotSnapshots/7F905F8BAC0DAD49BD507CA45C569AFD/9886598393C89944B51920C01EB650C9/BA5D2B145A59265D63FA3B3584344B02 +0 -35
- package/.vs/CopilotSnapshots/7F905F8BAC0DAD49BD507CA45C569AFD/state.mpack +0 -1
- package/.vs/CopilotSnapshots/8492D9C7A2D9514DB8A69D304B48BF3C/D2DA3C4E2131E84EA02E321802A65254/EF71788BE39818EEA3F0164DC15E1BD7 +0 -165
- package/.vs/CopilotSnapshots/8492D9C7A2D9514DB8A69D304B48BF3C/state.mpack +0 -1
- package/.vs/CopilotSnapshots/891A2DC0E5FA424CB8BDDA4FE26ED372/E244D49DDC79514DBA322770B03AE287/1CF9939611B0D194AC81951A171DF046 +0 -43
- package/.vs/CopilotSnapshots/891A2DC0E5FA424CB8BDDA4FE26ED372/state.mpack +0 -1
- package/.vs/CopilotSnapshots/8D302F8BAE46F54EA82AE1DED1A5D240/11E6D1F8E56D734F99C5216231273E8D/E621434FB1D5415B14FBBCC11967E420 +0 -66
- package/.vs/CopilotSnapshots/8D302F8BAE46F54EA82AE1DED1A5D240/24C69A83160FD844B0DEFECF8E1313DB/1CF9939611B0D194AC81951A171DF046 +0 -43
- package/.vs/CopilotSnapshots/8D302F8BAE46F54EA82AE1DED1A5D240/24C69A83160FD844B0DEFECF8E1313DB/E621434FB1D5415B14FBBCC11967E420 +0 -53
- package/.vs/CopilotSnapshots/8D302F8BAE46F54EA82AE1DED1A5D240/5E6D1BCD7CE81548AB445DE97505DC62/1CF9939611B0D194AC81951A171DF046 +0 -30
- package/.vs/CopilotSnapshots/8D302F8BAE46F54EA82AE1DED1A5D240/5E6D1BCD7CE81548AB445DE97505DC62/E621434FB1D5415B14FBBCC11967E420 +0 -53
- package/.vs/CopilotSnapshots/8D302F8BAE46F54EA82AE1DED1A5D240/EC4E81E0109C8F4BA1B5D9CFE1C122BC/E621434FB1D5415B14FBBCC11967E420 +0 -54
- package/.vs/CopilotSnapshots/8D302F8BAE46F54EA82AE1DED1A5D240/state.mpack +0 -1
- package/.vs/CopilotSnapshots/90C28D332F9B2949810126139FCA2640/6139F888FA743143B8E6C99306A478A6/30F913EA337870677E7C575773ECF531 +0 -130
- package/.vs/CopilotSnapshots/90C28D332F9B2949810126139FCA2640/F21743E379F9C1439F6A6405A289AA99/30F913EA337870677E7C575773ECF531 +0 -160
- package/.vs/CopilotSnapshots/90C28D332F9B2949810126139FCA2640/state.mpack +0 -1
- package/.vs/CopilotSnapshots/99E22E75C8AEDF4DB3A668A9ADF0BC43/2E2EFE66C5E05C4B809986E9B23D5409/45EABF6EF6BDFAA58C941A29E98C9C83 +0 -113
- package/.vs/CopilotSnapshots/99E22E75C8AEDF4DB3A668A9ADF0BC43/2E2EFE66C5E05C4B809986E9B23D5409/FB35DD13E708043D4CD8ACD54E14708F +0 -2
- package/.vs/CopilotSnapshots/99E22E75C8AEDF4DB3A668A9ADF0BC43/BE46916E3A8F2C4284792B951B674907/FB35DD13E708043D4CD8ACD54E14708F +0 -5
- package/.vs/CopilotSnapshots/99E22E75C8AEDF4DB3A668A9ADF0BC43/state.mpack +0 -1
- package/.vs/CopilotSnapshots/A6D99EA2D3819F45AD8087D7487F9318/state.mpack +0 -1
- package/.vs/CopilotSnapshots/A78C77F7A237704D95BCFE1BBC39FB0F/68BA9941941DC244BC799D89DB2BF86E/7C951A8A572EA5C371FDE657AF968B9C +0 -96
- package/.vs/CopilotSnapshots/A78C77F7A237704D95BCFE1BBC39FB0F/state.mpack +0 -1
- package/.vs/CopilotSnapshots/AD2203F1B9FECE44BB6D5DC5D83E87AA/734AB1B2974F9545B7F12AAA5842524B/840203FFA9CCF5B33DFD5C7CC5B13527 +0 -125
- package/.vs/CopilotSnapshots/AD2203F1B9FECE44BB6D5DC5D83E87AA/state.mpack +0 -1
- package/.vs/CopilotSnapshots/AEC950C2FAD20147AEE8E325E2CA0A78/89CF3F527D0687479D14274E8CDF3DFF/1CF9939611B0D194AC81951A171DF046 +0 -30
- package/.vs/CopilotSnapshots/AEC950C2FAD20147AEE8E325E2CA0A78/89CF3F527D0687479D14274E8CDF3DFF/BA5D2B145A59265D63FA3B3584344B02 +0 -158
- package/.vs/CopilotSnapshots/AEC950C2FAD20147AEE8E325E2CA0A78/E495EBF64DC77A4BBD470B92DB0391C4/1CF9939611B0D194AC81951A171DF046 +0 -30
- package/.vs/CopilotSnapshots/AEC950C2FAD20147AEE8E325E2CA0A78/E495EBF64DC77A4BBD470B92DB0391C4/BA5D2B145A59265D63FA3B3584344B02 +0 -67
- package/.vs/CopilotSnapshots/AEC950C2FAD20147AEE8E325E2CA0A78/state.mpack +0 -1
- package/.vs/CopilotSnapshots/AF947096A34634478C5D084B8442CD81/1FCDCC65B992954DB78BD1F46892312B/44EB81A1663981E3F52FFFECE3A2918E +0 -143
- package/.vs/CopilotSnapshots/AF947096A34634478C5D084B8442CD81/1FCDCC65B992954DB78BD1F46892312B/E602628EF6D764C2C267810C92906DBA +0 -253
- package/.vs/CopilotSnapshots/AF947096A34634478C5D084B8442CD81/state.mpack +0 -1
- package/.vs/CopilotSnapshots/B1DED422A45D5740BA4EE745C04B2B0B/226F822A22D6BD44BCF56BAA47FA274C/EF71788BE39818EEA3F0164DC15E1BD7 +0 -174
- package/.vs/CopilotSnapshots/B1DED422A45D5740BA4EE745C04B2B0B/state.mpack +0 -1
- package/.vs/CopilotSnapshots/B5DD5E50ACD0FD4998564F0FDE7FAEE0/97908D1D83AD2D4EA7082388DE07CBB4/44EB81A1663981E3F52FFFECE3A2918E +0 -148
- package/.vs/CopilotSnapshots/B5DD5E50ACD0FD4998564F0FDE7FAEE0/state.mpack +0 -1
- package/.vs/CopilotSnapshots/B8ADCAC0C19DB14FB8388BA59A86BC74/7ED3F1557FD7BE4DBEAF9B59FD442925/44EB81A1663981E3F52FFFECE3A2918E +0 -152
- package/.vs/CopilotSnapshots/B8ADCAC0C19DB14FB8388BA59A86BC74/state.mpack +0 -1
- package/.vs/CopilotSnapshots/BDFF50BBC1A93747A0001969C3BD195F/0130610530354840BB06BF4F4E744242/D03CD05B4F5C8B7C8CDF0B5E1961B3CA +0 -138
- package/.vs/CopilotSnapshots/BDFF50BBC1A93747A0001969C3BD195F/5F1C58CEFBAF1B4E80C4CF38B83A0A5F/D03CD05B4F5C8B7C8CDF0B5E1961B3CA +0 -129
- package/.vs/CopilotSnapshots/BDFF50BBC1A93747A0001969C3BD195F/BDC3D099FCCCC147848630670EED45CF/D03CD05B4F5C8B7C8CDF0B5E1961B3CA +0 -139
- package/.vs/CopilotSnapshots/BDFF50BBC1A93747A0001969C3BD195F/D9E2B1CDD1E2BB468E0703BEF6706FF6/D03CD05B4F5C8B7C8CDF0B5E1961B3CA +0 -139
- package/.vs/CopilotSnapshots/BDFF50BBC1A93747A0001969C3BD195F/state.mpack +0 -1
- package/.vs/CopilotSnapshots/C1E2C1A9C1DCFA46B1D5F1C6F36A152D/BC91C0FD38D8694BB992A8DEC1833670/148399016C7971F5592DAADBB9523118 +0 -120
- package/.vs/CopilotSnapshots/C1E2C1A9C1DCFA46B1D5F1C6F36A152D/state.mpack +0 -1
- package/.vs/CopilotSnapshots/C4D8E85893425E4F86F18850F5CA5C08/6C0950E97063C547A72D737E618436B0/1CF9939611B0D194AC81951A171DF046 +0 -9
- package/.vs/CopilotSnapshots/C4D8E85893425E4F86F18850F5CA5C08/6C0950E97063C547A72D737E618436B0/DFF70C60F68ECD9A4E4C3C74E4CC4DEE +0 -84
- package/.vs/CopilotSnapshots/C4D8E85893425E4F86F18850F5CA5C08/state.mpack +0 -1
- package/.vs/CopilotSnapshots/C5C3CA4C37B14A47B6BC753D09F69117/03EA1376F04C0D468FD0851119159D34/44EB81A1663981E3F52FFFECE3A2918E +0 -148
- package/.vs/CopilotSnapshots/C5C3CA4C37B14A47B6BC753D09F69117/03EA1376F04C0D468FD0851119159D34/E602628EF6D764C2C267810C92906DBA +0 -265
- package/.vs/CopilotSnapshots/C5C3CA4C37B14A47B6BC753D09F69117/6887503C15557349842029E58C9C0D11/44EB81A1663981E3F52FFFECE3A2918E +0 -152
- package/.vs/CopilotSnapshots/C5C3CA4C37B14A47B6BC753D09F69117/6887503C15557349842029E58C9C0D11/E602628EF6D764C2C267810C92906DBA +0 -265
- package/.vs/CopilotSnapshots/C5C3CA4C37B14A47B6BC753D09F69117/state.mpack +0 -1
- package/.vs/CopilotSnapshots/C7190BBC8D95D44F9CF8E65E3E8C9CFD/4B6D07592F8EDC4AA3FF742B1F9531CC/1B80EB15A2FEBEC11C8210C5461F8DB7 +0 -43
- package/.vs/CopilotSnapshots/C7190BBC8D95D44F9CF8E65E3E8C9CFD/state.mpack +0 -1
- package/.vs/CopilotSnapshots/C79D12964917E44F9A5BB9D8FA725A0C/2071ADB146D8F7499419123B2A595A41/03E00441128DC70FFEA043158417AC9A +0 -15
- package/.vs/CopilotSnapshots/C79D12964917E44F9A5BB9D8FA725A0C/6ECBF707FE2A88418EA1649CE46068D5/03E00441128DC70FFEA043158417AC9A +0 -1
- package/.vs/CopilotSnapshots/C79D12964917E44F9A5BB9D8FA725A0C/70BAB1D82B755F47A2351CA905ACC0F1/03E00441128DC70FFEA043158417AC9A +0 -49
- package/.vs/CopilotSnapshots/C79D12964917E44F9A5BB9D8FA725A0C/99DDFADAEC5CA14D92CC470523A11743/03E00441128DC70FFEA043158417AC9A +0 -39
- package/.vs/CopilotSnapshots/C79D12964917E44F9A5BB9D8FA725A0C/state.mpack +0 -1
- package/.vs/CopilotSnapshots/D533D78C39683A4188A2CEC902BC03CD/2445F4111C26EB4DA5404F930E140F56/840203FFA9CCF5B33DFD5C7CC5B13527 +0 -6
- package/.vs/CopilotSnapshots/D533D78C39683A4188A2CEC902BC03CD/2445F4111C26EB4DA5404F930E140F56/C27E5C1787B7957BF6F0C3D417890141 +0 -1
- package/.vs/CopilotSnapshots/D533D78C39683A4188A2CEC902BC03CD/state.mpack +0 -1
- package/.vs/CopilotSnapshots/DCAA5A718EC8304685D14C52356D80E0/5FC7C36C7769414C80BFF27A07BB5063/BE400B34D9700403D2BA3A1AA6B1EF1D +0 -15
- package/.vs/CopilotSnapshots/DCAA5A718EC8304685D14C52356D80E0/A4DD9B92084D8E48A95435EDB2B14545/86848C7099AD75EE4E8F10E066F49671 +0 -15
- package/.vs/CopilotSnapshots/DCAA5A718EC8304685D14C52356D80E0/A4DD9B92084D8E48A95435EDB2B14545/BE400B34D9700403D2BA3A1AA6B1EF1D +0 -15
- package/.vs/CopilotSnapshots/DCAA5A718EC8304685D14C52356D80E0/state.mpack +0 -1
- package/.vs/CopilotSnapshots/DCF62F751B748642A0BF5D5125AB6769/5F324CB20D1B5045A13090FA9D177B74/7C951A8A572EA5C371FDE657AF968B9C +0 -96
- package/.vs/CopilotSnapshots/DCF62F751B748642A0BF5D5125AB6769/5F324CB20D1B5045A13090FA9D177B74/B692C85119711C76235AA5D78F9F3818 +0 -73
- package/.vs/CopilotSnapshots/DCF62F751B748642A0BF5D5125AB6769/5F324CB20D1B5045A13090FA9D177B74/EF71788BE39818EEA3F0164DC15E1BD7 +0 -182
- package/.vs/CopilotSnapshots/DCF62F751B748642A0BF5D5125AB6769/C1287B2893D30D40A46C30DC2CE05178/7C951A8A572EA5C371FDE657AF968B9C +0 -96
- package/.vs/CopilotSnapshots/DCF62F751B748642A0BF5D5125AB6769/C1287B2893D30D40A46C30DC2CE05178/B692C85119711C76235AA5D78F9F3818 +0 -98
- package/.vs/CopilotSnapshots/DCF62F751B748642A0BF5D5125AB6769/CA6304DFE7764A4C87ACE5816CDB7CD9/7C951A8A572EA5C371FDE657AF968B9C +0 -96
- package/.vs/CopilotSnapshots/DCF62F751B748642A0BF5D5125AB6769/CA6304DFE7764A4C87ACE5816CDB7CD9/B692C85119711C76235AA5D78F9F3818 +0 -21
- package/.vs/CopilotSnapshots/DCF62F751B748642A0BF5D5125AB6769/CA6304DFE7764A4C87ACE5816CDB7CD9/EF71788BE39818EEA3F0164DC15E1BD7 +0 -176
- package/.vs/CopilotSnapshots/DCF62F751B748642A0BF5D5125AB6769/state.mpack +0 -1
- package/.vs/VSWorkspaceState.json +0 -6
- package/.vs/slnx.sqlite +0 -0
- package/.vs/ts-sample/CopilotIndices/17.13.433.20974/CodeChunks.db +0 -0
- package/.vs/ts-sample/CopilotIndices/17.13.433.20974/SemanticSymbols.db +0 -0
- package/.vs/ts-sample/CopilotIndices/17.13.439.2385/CodeChunks.db +0 -0
- package/.vs/ts-sample/CopilotIndices/17.13.439.2385/SemanticSymbols.db +0 -0
- package/.vs/ts-sample/CopilotIndices/17.13.441.19478/CodeChunks.db +0 -0
- package/.vs/ts-sample/CopilotIndices/17.13.441.19478/SemanticSymbols.db +0 -0
- package/.vs/ts-sample/FileContentIndex/2fa9d8cc-9158-496d-aa9b-3a471d46a157.vsidx +0 -0
- package/.vs/ts-sample/FileContentIndex/5530f45b-244e-4271-b3e3-d8250f03da64.vsidx +0 -0
- package/.vs/ts-sample/FileContentIndex/75f95b5d-c8f7-49ca-a3d7-d1d8f63db437.vsidx +0 -0
- package/.vs/ts-sample/FileContentIndex/abb2aeeb-f62a-4ca7-bfbf-7a1eada625a5.vsidx +0 -0
- package/.vs/ts-sample/FileContentIndex/fc749b54-0f95-45f6-ac75-a8ab3409a5ce.vsidx +0 -0
- package/.vs/ts-sample/config/applicationhost.config +0 -1026
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/0901b413-5d87-4b43-b248-80356492be7e +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/0f61a76a-b21f-46b7-821e-54c28a8d109b +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/101aef14-dd28-4de3-b2eb-e0b26d587b3a +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/22d4deb1-5da4-4057-ba4e-e745c04b2b0b +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/2a76030d-a09e-48cb-85f2-114567f23f93 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/2c6d08ca-cb98-4233-8f7c-011c3b409234 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/338dc290-9b2f-4929-8101-26139fca2640 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/34c9ac3b-2061-4d82-b300-06e353477163 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/3c01b107-5c38-4156-a5f5-100e0751210b +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/489ee702-f5df-4723-87cb-618de990598a +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/4ccac3c5-b137-474a-b6bc-753d09f69117 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/505eddb5-d0ac-49fd-9856-4f0fde7faee0 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/58e8d8c4-4293-4f5e-86f1-8850f5ca5c08 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/5dbafa3e-3015-4c80-a04c-606f5efddc38 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/5f29f527-e43a-4661-b60e-ff772041f413 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/6248dfd7-38ae-4fa6-9176-2fdc0694c3e8 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/66fcbd64-32dc-436d-80e6-7435a1a3ecf1 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/6f9ad733-d555-4d2c-b073-eb6a1aada347 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/715aaadc-c88e-4630-85d1-4c52356d80e0 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/71ab164c-01dc-468c-a734-fbf0bf4aedd9 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/752ee299-aec8-4ddf-b3a6-68a9adf0bc43 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/752ff6dc-741b-4286-a0bf-5d5125ab6769 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/7b50f25e-2a00-4ec1-a991-043c37c36551 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/7f41e050-2ead-4d52-887c-b5763c2fb7b4 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/85b50c9e-8895-4085-89c1-934ad2704744 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/8b2f308d-46ae-4ef5-a82a-e1ded1a5d240 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/8b5f907f-0dac-49ad-bd50-7ca45c569afd +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/8cd733d5-6839-413a-88a2-cec902bc03cd +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/90685124-4085-46d6-acbd-4fde8d6dd2d4 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/96129dc7-1749-4fe4-9a5b-b9d8fa725a0c +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/967094af-46a3-4734-8c5d-084b8442cd81 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/a29ed9a6-81d3-459f-ad80-87d7487f9318 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/a9c1e2c1-dcc1-46fa-b1d5-f1c6f36a152d +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/badc76f4-d284-4b6c-94e9-abdbc74de540 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/bb50ffbd-a9c1-4737-a000-1969c3bd195f +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/bc0b19c7-958d-4fd4-9cf8-e65e3e8c9cfd +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/c02d1a89-fae5-4c42-b8bd-da4fe26ed372 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/c0caadb8-9dc1-4fb1-b838-8ba59a86bc74 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/c250c9ae-d2fa-4701-aee8-e325e2ca0a78 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/c31db710-c1c4-4ec0-8602-fa06d3925f98 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/c7d99284-d9a2-4d51-b8a6-9d304b48bf3c +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/ddd1fab4-4016-4cfc-bf9f-f4a85bdfc112 +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/f10322ad-feb9-44ce-bb6d-5dc5d83e87aa +0 -0
- package/.vs/ts-sample/copilot-chat/3c67db7d/sessions/f7778ca7-37a2-4d70-95bc-fe1bbc39fb0f +0 -0
- package/.vs/ts-sample/v17/.suo +0 -0
- package/.vs/ts-sample/v17/.wsuo +0 -0
- package/.vs/ts-sample/v17/DocumentLayout.backup.json +0 -425
- package/.vs/ts-sample/v17/DocumentLayout.json +0 -423
- package/.vs/ts-sample/v17/TestStore/0/000.testlog +0 -0
- package/.vs/ts-sample/v17/TestStore/0/testlog.manifest +0 -0
@@ -1,158 +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
|
-
import { TokenReaderManager } from './tokenReaders/TokenReaderManager';
|
7
|
-
|
8
|
-
export class SqlTokenizer {
|
9
|
-
/// <summary>
|
10
|
-
/// Input string.
|
11
|
-
/// </summary>
|
12
|
-
private input: string;
|
13
|
-
|
14
|
-
/// <summary>
|
15
|
-
/// Current position in the input string.
|
16
|
-
/// </summary>
|
17
|
-
private position: number;
|
18
|
-
|
19
|
-
/// <summary>
|
20
|
-
/// Token reader manager
|
21
|
-
/// </summary>
|
22
|
-
private readerManager: TokenReaderManager;
|
23
|
-
|
24
|
-
constructor(input: string) {
|
25
|
-
this.input = input;
|
26
|
-
this.position = 0;
|
27
|
-
|
28
|
-
// Initialize the token reader manager and register all readers
|
29
|
-
this.readerManager = new TokenReaderManager(input)
|
30
|
-
.register(new ParameterTokenReader(input))
|
31
|
-
.register(new LiteralTokenReader(input))
|
32
|
-
.register(new IdentifierTokenReader(input))
|
33
|
-
.register(new SymbolTokenReader(input));
|
34
|
-
}
|
35
|
-
|
36
|
-
private isEndOfInput(shift: number = 0): boolean {
|
37
|
-
return this.position + shift >= this.input.length;
|
38
|
-
}
|
39
|
-
|
40
|
-
private canRead(shift: number = 0): boolean {
|
41
|
-
return !this.isEndOfInput(shift);
|
42
|
-
}
|
43
|
-
|
44
|
-
public readLexmes(): Lexeme[] {
|
45
|
-
const lexemes: Lexeme[] = [];
|
46
|
-
|
47
|
-
// Skip whitespace and comments at the start
|
48
|
-
this.skipWhiteSpacesAndComments();
|
49
|
-
|
50
|
-
// Track the previous token
|
51
|
-
let previous: Lexeme | null = null;
|
52
|
-
|
53
|
-
// Read tokens until the end of the input is reached
|
54
|
-
while (this.canRead()) {
|
55
|
-
// semicolon is a delimiter
|
56
|
-
if (this.input[this.position] === ';') {
|
57
|
-
return lexemes;
|
58
|
-
}
|
59
|
-
|
60
|
-
// Try to read with the reader manager
|
61
|
-
const lexeme = this.readerManager.tryRead(this.position, previous);
|
62
|
-
|
63
|
-
// If a token is read by any reader
|
64
|
-
if (lexeme) {
|
65
|
-
lexemes.push(lexeme);
|
66
|
-
previous = lexeme;
|
67
|
-
|
68
|
-
// Update position
|
69
|
-
this.position = this.readerManager.getMaxPosition();
|
70
|
-
|
71
|
-
// Skip whitespace and comments after the token
|
72
|
-
this.skipWhiteSpacesAndComments();
|
73
|
-
} else {
|
74
|
-
// Exception
|
75
|
-
throw new Error(`Unexpected character. actual: ${this.input[this.position]}, position: ${this.position}`);
|
76
|
-
}
|
77
|
-
}
|
78
|
-
|
79
|
-
return lexemes;
|
80
|
-
}
|
81
|
-
|
82
|
-
/// <summary>
|
83
|
-
/// Skip white space characters and sql comments.
|
84
|
-
/// </summary>
|
85
|
-
private skipWhiteSpacesAndComments(): void {
|
86
|
-
while (true) {
|
87
|
-
if (this.skipWhiteSpace()) {
|
88
|
-
continue;
|
89
|
-
}
|
90
|
-
if (this.skipLineComment()) {
|
91
|
-
continue;
|
92
|
-
}
|
93
|
-
if (this.skipBlockComment()) {
|
94
|
-
continue;
|
95
|
-
}
|
96
|
-
break;
|
97
|
-
}
|
98
|
-
}
|
99
|
-
|
100
|
-
private skipWhiteSpace(): boolean {
|
101
|
-
const start = this.position;
|
102
|
-
|
103
|
-
// Skip tab, newline, and space characters
|
104
|
-
const whitespace = new Set([' ', '\r', '\n', '\t']);
|
105
|
-
|
106
|
-
while (this.canRead()) {
|
107
|
-
if (!whitespace.has(this.input[this.position])) {
|
108
|
-
break;
|
109
|
-
}
|
110
|
-
this.position++;
|
111
|
-
}
|
112
|
-
return start !== this.position;
|
113
|
-
}
|
114
|
-
|
115
|
-
private skipLineComment(): boolean {
|
116
|
-
// At least 2 characters are needed. '--'
|
117
|
-
if (this.isEndOfInput(1)) {
|
118
|
-
return false;
|
119
|
-
}
|
120
|
-
|
121
|
-
if (this.input[this.position] === '-' && this.input[this.position + 1] === '-') {
|
122
|
-
this.position += 2;
|
123
|
-
|
124
|
-
while (this.canRead() && this.input[this.position] !== '\n') {
|
125
|
-
this.position++;
|
126
|
-
}
|
127
|
-
return true;
|
128
|
-
}
|
129
|
-
|
130
|
-
return false;
|
131
|
-
}
|
132
|
-
|
133
|
-
private skipBlockComment(): boolean {
|
134
|
-
// At least 4 characters are needed. '/**/'
|
135
|
-
if (this.isEndOfInput(3)) {
|
136
|
-
return false;
|
137
|
-
}
|
138
|
-
|
139
|
-
// Record the start position of the comment to track error location
|
140
|
-
const start = this.position;
|
141
|
-
|
142
|
-
if (this.input[this.position] === '/' && this.input[this.position + 1] === '*') {
|
143
|
-
this.position += 2;
|
144
|
-
|
145
|
-
while (this.canRead(1)) {
|
146
|
-
if (this.input[this.position] === '*' && this.input[this.position + 1] === '/') {
|
147
|
-
this.position += 2;
|
148
|
-
return true;
|
149
|
-
}
|
150
|
-
this.position++;
|
151
|
-
}
|
152
|
-
|
153
|
-
throw new Error(`Block comment is not closed. position: ${start}`);
|
154
|
-
}
|
155
|
-
|
156
|
-
return false;
|
157
|
-
}
|
158
|
-
}
|
@@ -1,35 +0,0 @@
|
|
1
|
-
import { TokenType } from "../src/enums/tokenType";
|
2
|
-
import { SqlTokenizer } from "../src/sqlTokenizer";
|
3
|
-
|
4
|
-
test('tokenizes addition operator', () => {
|
5
|
-
const tokenizer = new SqlTokenizer('1+1');
|
6
|
-
const tokens = tokenizer.readLexmes();
|
7
|
-
expect(tokens.length).toBe(3);
|
8
|
-
expect(tokens[1].type).toBe(TokenType.Operator);
|
9
|
-
expect(tokens[1].value).toBe('+');
|
10
|
-
});
|
11
|
-
|
12
|
-
test('tokenizes multiplication operator', () => {
|
13
|
-
const tokenizer = new SqlTokenizer('1*2');
|
14
|
-
const tokens = tokenizer.readLexmes();
|
15
|
-
expect(tokens.length).toBe(3);
|
16
|
-
expect(tokens[1].type).toBe(TokenType.Operator);
|
17
|
-
expect(tokens[1].value).toBe('*');
|
18
|
-
});
|
19
|
-
|
20
|
-
test('tokenizes division operator', () => {
|
21
|
-
const tokenizer = new SqlTokenizer('1/3');
|
22
|
-
const tokens = tokenizer.readLexmes();
|
23
|
-
expect(tokens.length).toBe(3);
|
24
|
-
expect(tokens[1].type).toBe(TokenType.Operator);
|
25
|
-
expect(tokens[1].value).toBe('/');
|
26
|
-
});
|
27
|
-
|
28
|
-
test('tokenizes modulus operator', () => {
|
29
|
-
const tokenizer = new SqlTokenizer('1%4');
|
30
|
-
const tokens = tokenizer.readLexmes();
|
31
|
-
expect(tokens.length).toBe(3);
|
32
|
-
expect(tokens[1].type).toBe(TokenType.Operator);
|
33
|
-
expect(tokens[1].value).toBe('%');
|
34
|
-
});
|
35
|
-
|
@@ -1 +0,0 @@
|
|
1
|
-
��SessionId��$8b5f907f-0dac-49ad-bd50-7ca45c569afd��Id�4Microsoft.VisualStudio.Conversations.Chat.HelpWindow�CorrelationStates���CorrelationId�$3ce18257-03ab-4ea0-9e1e-c5692f892170�Snapshots�� BA5D2B145A59265D63FA3B3584344B02��SavedFileName١C:\Users\mssgm\Documents\GitHub\ts-sample\.vs\CopilotSnapshots\7F905F8BAC0DAD49BD507CA45C569AFD\5782E13CAB03A04E9E1EC5692F892170\BA5D2B145A59265D63FA3B3584344B02�OriginalFilePath�@C:\Users\mssgm\Documents\GitHub\ts-sample\tests\operator.test.ts�NewFileMarker�� EF71788BE39818EEA3F0164DC15E1BD7��SavedFileName١C:\Users\mssgm\Documents\GitHub\ts-sample\.vs\CopilotSnapshots\7F905F8BAC0DAD49BD507CA45C569AFD\5782E13CAB03A04E9E1EC5692F892170\EF71788BE39818EEA3F0164DC15E1BD7�OriginalFilePath�=C:\Users\mssgm\Documents\GitHub\ts-sample\src\sqlTokenizer.ts�NewFileMarker���CorrelationId�$83598698-c893-4499-b519-20c01eb650c9�Snapshots�� BA5D2B145A59265D63FA3B3584344B02��SavedFileName١C:\Users\mssgm\Documents\GitHub\ts-sample\.vs\CopilotSnapshots\7F905F8BAC0DAD49BD507CA45C569AFD\9886598393C89944B51920C01EB650C9\BA5D2B145A59265D63FA3B3584344B02�OriginalFilePath�@C:\Users\mssgm\Documents\GitHub\ts-sample\tests\operator.test.ts�NewFileMarker�
|
@@ -1,165 +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
|
-
|
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
|
-
/// <summary>
|
21
|
-
/// Token reader manager
|
22
|
-
/// </summary>
|
23
|
-
private readerManager: TokenReaderManager;
|
24
|
-
|
25
|
-
constructor(input: string) {
|
26
|
-
this.input = input;
|
27
|
-
this.position = 0;
|
28
|
-
|
29
|
-
// Initialize the token reader manager and register all readers
|
30
|
-
// NOTE: トークンリーダーの実行順序は重要です。
|
31
|
-
// - LiteralTokenReader にて ドット始まりの数字リテラルを読み取る処理があるため、
|
32
|
-
// SpecialSymbolTokenReader よりも先に登録する必要があります。
|
33
|
-
// - LiteralTokenReader にて 符号始まりの数字リテラルを読み取る処理があるため、
|
34
|
-
// OperatorTokenReader よりも先に登録する必要があります。
|
35
|
-
this.readerManager = new TokenReaderManager(input)
|
36
|
-
.register(new ParameterTokenReader(input))
|
37
|
-
.register(new LiteralTokenReader(input))
|
38
|
-
.register(new IdentifierTokenReader(input))
|
39
|
-
.register(new SpecialSymbolTokenReader(input))
|
40
|
-
.register(new OperatorTokenReader(input));
|
41
|
-
}
|
42
|
-
|
43
|
-
private isEndOfInput(shift: number = 0): boolean {
|
44
|
-
return this.position + shift >= this.input.length;
|
45
|
-
}
|
46
|
-
|
47
|
-
private canRead(shift: number = 0): boolean {
|
48
|
-
return !this.isEndOfInput(shift);
|
49
|
-
}
|
50
|
-
|
51
|
-
public readLexmes(): Lexeme[] {
|
52
|
-
const lexemes: Lexeme[] = [];
|
53
|
-
|
54
|
-
// Skip whitespace and comments at the start
|
55
|
-
this.skipWhiteSpacesAndComments();
|
56
|
-
|
57
|
-
// Track the previous token
|
58
|
-
let previous: Lexeme | null = null;
|
59
|
-
|
60
|
-
// Read tokens until the end of the input is reached
|
61
|
-
while (this.canRead()) {
|
62
|
-
// semicolon is a delimiter
|
63
|
-
if (this.input[this.position] === ';') {
|
64
|
-
return lexemes;
|
65
|
-
}
|
66
|
-
|
67
|
-
// Try to read with the reader manager
|
68
|
-
const lexeme = this.readerManager.tryRead(this.position, previous);
|
69
|
-
|
70
|
-
// If a token is read by any reader
|
71
|
-
if (lexeme) {
|
72
|
-
lexemes.push(lexeme);
|
73
|
-
previous = lexeme;
|
74
|
-
|
75
|
-
// Update position
|
76
|
-
this.position = this.readerManager.getMaxPosition();
|
77
|
-
|
78
|
-
// Skip whitespace and comments after the token
|
79
|
-
this.skipWhiteSpacesAndComments();
|
80
|
-
} else {
|
81
|
-
// Exception
|
82
|
-
throw new Error(`Unexpected character. actual: ${this.input[this.position]}, position: ${this.position}`);
|
83
|
-
}
|
84
|
-
}
|
85
|
-
|
86
|
-
return lexemes;
|
87
|
-
}
|
88
|
-
|
89
|
-
/// <summary>
|
90
|
-
/// Skip white space characters and sql comments.
|
91
|
-
/// </summary>
|
92
|
-
private skipWhiteSpacesAndComments(): void {
|
93
|
-
while (true) {
|
94
|
-
if (this.skipWhiteSpace()) {
|
95
|
-
continue;
|
96
|
-
}
|
97
|
-
if (this.skipLineComment()) {
|
98
|
-
continue;
|
99
|
-
}
|
100
|
-
if (this.skipBlockComment()) {
|
101
|
-
continue;
|
102
|
-
}
|
103
|
-
break;
|
104
|
-
}
|
105
|
-
}
|
106
|
-
|
107
|
-
private skipWhiteSpace(): boolean {
|
108
|
-
const start = this.position;
|
109
|
-
|
110
|
-
// Skip tab, newline, and space characters
|
111
|
-
const whitespace = new Set([' ', '\r', '\n', '\t']);
|
112
|
-
|
113
|
-
while (this.canRead()) {
|
114
|
-
if (!whitespace.has(this.input[this.position])) {
|
115
|
-
break;
|
116
|
-
}
|
117
|
-
this.position++;
|
118
|
-
}
|
119
|
-
return start !== this.position;
|
120
|
-
}
|
121
|
-
|
122
|
-
private skipLineComment(): boolean {
|
123
|
-
// At least 2 characters are needed. '--'
|
124
|
-
if (this.isEndOfInput(1)) {
|
125
|
-
return false;
|
126
|
-
}
|
127
|
-
|
128
|
-
if (this.input[this.position] === '-' && this.input[this.position + 1] === '-') {
|
129
|
-
this.position += 2;
|
130
|
-
|
131
|
-
while (this.canRead() && this.input[this.position] !== '\n') {
|
132
|
-
this.position++;
|
133
|
-
}
|
134
|
-
return true;
|
135
|
-
}
|
136
|
-
|
137
|
-
return false;
|
138
|
-
}
|
139
|
-
|
140
|
-
private skipBlockComment(): boolean {
|
141
|
-
// At least 4 characters are needed. '/**/'
|
142
|
-
if (this.isEndOfInput(3)) {
|
143
|
-
return false;
|
144
|
-
}
|
145
|
-
|
146
|
-
// Record the start position of the comment to track error location
|
147
|
-
const start = this.position;
|
148
|
-
|
149
|
-
if (this.input[this.position] === '/' && this.input[this.position + 1] === '*') {
|
150
|
-
this.position += 2;
|
151
|
-
|
152
|
-
while (this.canRead(1)) {
|
153
|
-
if (this.input[this.position] === '*' && this.input[this.position + 1] === '/') {
|
154
|
-
this.position += 2;
|
155
|
-
return true;
|
156
|
-
}
|
157
|
-
this.position++;
|
158
|
-
}
|
159
|
-
|
160
|
-
throw new Error(`Block comment is not closed. position: ${start}`);
|
161
|
-
}
|
162
|
-
|
163
|
-
return false;
|
164
|
-
}
|
165
|
-
}
|
@@ -1 +0,0 @@
|
|
1
|
-
��SessionId��$c7d99284-d9a2-4d51-b8a6-9d304b48bf3c��Id�4Microsoft.VisualStudio.Conversations.Chat.HelpWindow�CorrelationStates���CorrelationId�$4e3cdad2-3121-4ee8-a02e-321802a65254�Snapshots�� EF71788BE39818EEA3F0164DC15E1BD7��SavedFileName١C:\Users\mssgm\Documents\GitHub\ts-sample\.vs\CopilotSnapshots\8492D9C7A2D9514DB8A69D304B48BF3C\D2DA3C4E2131E84EA02E321802A65254\EF71788BE39818EEA3F0164DC15E1BD7�OriginalFilePath�=C:\Users\mssgm\Documents\GitHub\ts-sample\src\sqlTokenizer.ts�NewFileMarker�
|
@@ -1,43 +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
|
-
import { StringUtils } from '../utils/stringUtils';
|
6
|
-
import { KeywordMatchResult, KeywordTrie, KeywordTrieReader } from '../utils/KeywordTrie';
|
7
|
-
|
8
|
-
export class OperatorTokenReader extends BaseTokenReader {
|
9
|
-
|
10
|
-
private trie = new KeywordTrie([
|
11
|
-
["is"],
|
12
|
-
["is", "not"],
|
13
|
-
["and"],
|
14
|
-
["or"]
|
15
|
-
]);
|
16
|
-
|
17
|
-
public tryRead(previous: Lexeme | null): Lexeme | null {
|
18
|
-
if (this.isEndOfInput()) {
|
19
|
-
return null;
|
20
|
-
}
|
21
|
-
|
22
|
-
const char = this.input[this.position];
|
23
|
-
|
24
|
-
if (CharLookupTable.isOperatorSymbol(char)) {
|
25
|
-
const start = this.position;
|
26
|
-
while (this.canRead() && CharLookupTable.isOperatorSymbol(this.input[this.position])) {
|
27
|
-
this.position++;
|
28
|
-
}
|
29
|
-
return this.createLexeme(TokenType.Operator, this.input.slice(start, this.position));
|
30
|
-
}
|
31
|
-
|
32
|
-
// Logical operators
|
33
|
-
const reader = new KeywordTrieReader(this.input, this.position, this.trie);
|
34
|
-
const result = reader.readKeyword();
|
35
|
-
if (result) {
|
36
|
-
this.position = result.newPositiion;
|
37
|
-
return this.createLexeme(TokenType.Operator, result.keyword);
|
38
|
-
}
|
39
|
-
|
40
|
-
|
41
|
-
return null;
|
42
|
-
}
|
43
|
-
}
|
@@ -1 +0,0 @@
|
|
1
|
-
��SessionId��$c02d1a89-fae5-4c42-b8bd-da4fe26ed372��Id�4Microsoft.VisualStudio.Conversations.Chat.HelpWindow�CorrelationStates���CorrelationId�$9dd444e2-79dc-4d51-ba32-2770b03ae287�Snapshots�� 1CF9939611B0D194AC81951A171DF046��SavedFileName١C:\Users\mssgm\Documents\GitHub\ts-sample\.vs\CopilotSnapshots\891A2DC0E5FA424CB8BDDA4FE26ED372\E244D49DDC79514DBA322770B03AE287\1CF9939611B0D194AC81951A171DF046�OriginalFilePath�QC:\Users\mssgm\Documents\GitHub\ts-sample\src\tokenReaders\OperatorTokenReader.ts�NewFileMarker�
|
@@ -1,66 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
// No changes needed in this file as the OPERATORS set already exists
|
3
|
-
* Fast character classification utilities for SQL tokenization
|
4
|
-
*/
|
5
|
-
export class CharLookupTable {
|
6
|
-
private static readonly WHITESPACE = new Set([' ', '\t', '\r', '\n']);
|
7
|
-
private static readonly DIGITS = new Set(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']);
|
8
|
-
private static readonly HEX_CHARS = new Set([
|
9
|
-
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
|
10
|
-
'a', 'b', 'c', 'd', 'e', 'f',
|
11
|
-
'A', 'B', 'C', 'D', 'E', 'F'
|
12
|
-
]);
|
13
|
-
private static readonly DELIMITERS = new Set(['.', ',', '(', ')']);
|
14
|
-
private static readonly NAMED_PARAMETER_PREFIX = new Set(['@', ':', '$']);
|
15
|
-
private static readonly OPERATORS = new Set([
|
16
|
-
'+', // Addition operator
|
17
|
-
'-', // Subtraction operator
|
18
|
-
'*', // Multiplication operator
|
19
|
-
'/', // Division operator
|
20
|
-
'%', // Modulus operator
|
21
|
-
'~', // Bitwise NOT operator
|
22
|
-
'@', // At symbol, often used in decorators or annotations
|
23
|
-
'#', // Hash symbol, often used in preprocessor directives or comments
|
24
|
-
'^', // Bitwise XOR operator
|
25
|
-
'&', // Bitwise AND operator
|
26
|
-
':', // Postgres type cast operator ::
|
27
|
-
'!', // Logical NOT operator
|
28
|
-
'<', // Less than operator
|
29
|
-
'>', // Greater than operator
|
30
|
-
'=', // Assignment or equality operator
|
31
|
-
'|', // Bitwise OR operator
|
32
|
-
]);
|
33
|
-
|
34
|
-
public static isWhitespace(char: string): boolean {
|
35
|
-
return CharLookupTable.WHITESPACE.has(char);
|
36
|
-
}
|
37
|
-
|
38
|
-
public static isDigit(char: string): boolean {
|
39
|
-
return CharLookupTable.DIGITS.has(char);
|
40
|
-
}
|
41
|
-
|
42
|
-
public static isHexChar(char: string): boolean {
|
43
|
-
return CharLookupTable.HEX_CHARS.has(char);
|
44
|
-
}
|
45
|
-
|
46
|
-
public static isOperator(char: string): boolean {
|
47
|
-
return CharLookupTable.OPERATORS.has(char);
|
48
|
-
}
|
49
|
-
|
50
|
-
public static isDelimiter(char: string): boolean {
|
51
|
-
if (CharLookupTable.DELIMITERS.has(char)) {
|
52
|
-
return true;
|
53
|
-
}
|
54
|
-
else if (CharLookupTable.isWhitespace(char)) {
|
55
|
-
return true;
|
56
|
-
}
|
57
|
-
else if (CharLookupTable.isOperator(char)) {
|
58
|
-
return true;
|
59
|
-
}
|
60
|
-
return false;
|
61
|
-
}
|
62
|
-
|
63
|
-
public static isNamedParameterPrefix(char: string): boolean {
|
64
|
-
return CharLookupTable.NAMED_PARAMETER_PREFIX.has(char);
|
65
|
-
}
|
66
|
-
}
|
@@ -1,43 +0,0 @@
|
|
1
|
-
import { BaseTokenReader } from './BaseTokenReader';
|
2
|
-
import { TokenType } from '../enums/tokenType';
|
3
|
-
import { Lexeme } from '../models/Lexeme';
|
4
|
-
|
5
|
-
const operatorChars = new Set([
|
6
|
-
'+', // Addition operator
|
7
|
-
'-', // Subtraction operator
|
8
|
-
'*', // Multiplication operator
|
9
|
-
'/', // Division operator
|
10
|
-
'%', // Modulus operator
|
11
|
-
'~', // Bitwise NOT operator
|
12
|
-
'@', // At symbol, often used in decorators or annotations
|
13
|
-
'#', // Hash symbol, often used in preprocessor directives or comments
|
14
|
-
'$', // Dollar symbol, often used in template literals or special variables
|
15
|
-
'^', // Bitwise XOR operator
|
16
|
-
'&', // Bitwise AND operator
|
17
|
-
':', // Postgres type cast operator
|
18
|
-
'!', // Logical NOT operator
|
19
|
-
'<', // Less than operator
|
20
|
-
'>', // Greater than operator
|
21
|
-
'=', // Assignment or equality operator
|
22
|
-
'|' // Bitwise OR operator
|
23
|
-
]);
|
24
|
-
|
25
|
-
export class OperatorTokenReader extends BaseTokenReader {
|
26
|
-
public tryRead(previous: Lexeme | null): Lexeme | null {
|
27
|
-
if (this.isEndOfInput()) {
|
28
|
-
return null;
|
29
|
-
}
|
30
|
-
|
31
|
-
const char = this.input[this.position];
|
32
|
-
|
33
|
-
if (operatorChars.has(char)) {
|
34
|
-
const start = this.position;
|
35
|
-
while (this.canRead() && operatorChars.has(this.input[this.position])) {
|
36
|
-
this.position++;
|
37
|
-
}
|
38
|
-
return this.createLexeme(TokenType.Operator, this.input.slice(start, this.position));
|
39
|
-
}
|
40
|
-
|
41
|
-
return null;
|
42
|
-
}
|
43
|
-
}
|
@@ -1,53 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* Fast character classification utilities for SQL tokenization
|
3
|
-
*/
|
4
|
-
export class CharLookupTable {
|
5
|
-
private static readonly WHITESPACE = new Set([' ', '\t', '\r', '\n']);
|
6
|
-
private static readonly DIGITS = new Set(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']);
|
7
|
-
private static readonly HEX_CHARS = new Set([
|
8
|
-
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
|
9
|
-
'a', 'b', 'c', 'd', 'e', 'f',
|
10
|
-
'A', 'B', 'C', 'D', 'E', 'F'
|
11
|
-
]);
|
12
|
-
private static readonly DELIMITERS = new Set(['.', ',', '(', ')']);
|
13
|
-
private static readonly NAMED_PARAMETER_PREFIX = new Set(['@', ':', '$']);
|
14
|
-
private static readonly OPERATORS = new Set([
|
15
|
-
'+', '-', '*', '/', '%', // Arithmetic operators
|
16
|
-
'~', '@', '#', '$', '^', '&', // Special symbols
|
17
|
-
':', // Postgres type cast operator ::
|
18
|
-
'!', '<', '>', '=', '|', '\\' // Other symbols
|
19
|
-
]);
|
20
|
-
|
21
|
-
public static isWhitespace(char: string): boolean {
|
22
|
-
return CharLookupTable.WHITESPACE.has(char);
|
23
|
-
}
|
24
|
-
|
25
|
-
public static isDigit(char: string): boolean {
|
26
|
-
return CharLookupTable.DIGITS.has(char);
|
27
|
-
}
|
28
|
-
|
29
|
-
public static isHexChar(char: string): boolean {
|
30
|
-
return CharLookupTable.HEX_CHARS.has(char);
|
31
|
-
}
|
32
|
-
|
33
|
-
public static isOperator(char: string): boolean {
|
34
|
-
return CharLookupTable.OPERATORS.has(char);
|
35
|
-
}
|
36
|
-
|
37
|
-
public static isDelimiter(char: string): boolean {
|
38
|
-
if (CharLookupTable.DELIMITERS.has(char)) {
|
39
|
-
return true;
|
40
|
-
}
|
41
|
-
else if (CharLookupTable.isWhitespace(char)) {
|
42
|
-
return true;
|
43
|
-
}
|
44
|
-
else if (CharLookupTable.isOperator(char)) {
|
45
|
-
return true;
|
46
|
-
}
|
47
|
-
return false;
|
48
|
-
}
|
49
|
-
|
50
|
-
public static isNamedParameterPrefix(char: string): boolean {
|
51
|
-
return CharLookupTable.NAMED_PARAMETER_PREFIX.has(char);
|
52
|
-
}
|
53
|
-
}
|
@@ -1,30 +0,0 @@
|
|
1
|
-
import { BaseTokenReader } from './BaseTokenReader';
|
2
|
-
import { TokenType } from '../enums/tokenType';
|
3
|
-
import { Lexeme } from '../models/Lexeme';
|
4
|
-
|
5
|
-
const operatorChars = new Set([
|
6
|
-
'+', '-', '*', '/', '%', // Arithmetic operators
|
7
|
-
'~', '@', '#', '$', '^', '&', // Special symbols
|
8
|
-
':', // Postgres type cast operator
|
9
|
-
'!', '<', '>', '=', '|'// Other symbols
|
10
|
-
]);
|
11
|
-
|
12
|
-
export class OperatorTokenReader extends BaseTokenReader {
|
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
|
-
if (operatorChars.has(char)) {
|
21
|
-
const start = this.position;
|
22
|
-
while (this.canRead() && operatorChars.has(this.input[this.position])) {
|
23
|
-
this.position++;
|
24
|
-
}
|
25
|
-
return this.createLexeme(TokenType.Operator, this.input.slice(start, this.position));
|
26
|
-
}
|
27
|
-
|
28
|
-
return null;
|
29
|
-
}
|
30
|
-
}
|
@@ -1,53 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* Fast character classification utilities for SQL tokenization
|
3
|
-
*/
|
4
|
-
export class CharLookupTable {
|
5
|
-
private static readonly WHITESPACE = new Set([' ', '\t', '\r', '\n']);
|
6
|
-
private static readonly DIGITS = new Set(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']);
|
7
|
-
private static readonly HEX_CHARS = new Set([
|
8
|
-
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
|
9
|
-
'a', 'b', 'c', 'd', 'e', 'f',
|
10
|
-
'A', 'B', 'C', 'D', 'E', 'F'
|
11
|
-
]);
|
12
|
-
private static readonly DELIMITERS = new Set(['.', ',', '(', ')']);
|
13
|
-
private static readonly NAMED_PARAMETER_PREFIX = new Set(['@', ':', '$']);
|
14
|
-
private static readonly OPERATORS = new Set([
|
15
|
-
'+', '-', '*', '/', '%', // Arithmetic operators
|
16
|
-
'~', '@', '#', '$', '^', '&', // Special symbols
|
17
|
-
':', // Postgres type cast operator ::
|
18
|
-
'!', '<', '>', '=', '|', '\\' // Other symbols
|
19
|
-
]);
|
20
|
-
|
21
|
-
public static isWhitespace(char: string): boolean {
|
22
|
-
return CharLookupTable.WHITESPACE.has(char);
|
23
|
-
}
|
24
|
-
|
25
|
-
public static isDigit(char: string): boolean {
|
26
|
-
return CharLookupTable.DIGITS.has(char);
|
27
|
-
}
|
28
|
-
|
29
|
-
public static isHexChar(char: string): boolean {
|
30
|
-
return CharLookupTable.HEX_CHARS.has(char);
|
31
|
-
}
|
32
|
-
|
33
|
-
public static isOperator(char: string): boolean {
|
34
|
-
return CharLookupTable.OPERATORS.has(char);
|
35
|
-
}
|
36
|
-
|
37
|
-
public static isDelimiter(char: string): boolean {
|
38
|
-
if (CharLookupTable.DELIMITERS.has(char)) {
|
39
|
-
return true;
|
40
|
-
}
|
41
|
-
else if (CharLookupTable.isWhitespace(char)) {
|
42
|
-
return true;
|
43
|
-
}
|
44
|
-
else if (CharLookupTable.isOperator(char)) {
|
45
|
-
return true;
|
46
|
-
}
|
47
|
-
return false;
|
48
|
-
}
|
49
|
-
|
50
|
-
public static isNamedParameterPrefix(char: string): boolean {
|
51
|
-
return CharLookupTable.NAMED_PARAMETER_PREFIX.has(char);
|
52
|
-
}
|
53
|
-
}
|