rawsql-ts 0.1.0-beta.1
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/.vs/CopilotSnapshots/02E79E48DFF5234787CB618DE990598A/48814CCF3E4E4B44A66AB8BC7D6CF6B6/904140CF7EDF0C98AEA45F0D36062FE1 +1 -0
- package/.vs/CopilotSnapshots/02E79E48DFF5234787CB618DE990598A/48814CCF3E4E4B44A66AB8BC7D6CF6B6/A32D1DB906C73FA74EF270AAEE165FC0 +86 -0
- package/.vs/CopilotSnapshots/02E79E48DFF5234787CB618DE990598A/48814CCF3E4E4B44A66AB8BC7D6CF6B6/E621434FB1D5415B14FBBCC11967E420 +34 -0
- package/.vs/CopilotSnapshots/02E79E48DFF5234787CB618DE990598A/48814CCF3E4E4B44A66AB8BC7D6CF6B6/EF71788BE39818EEA3F0164DC15E1BD7 +170 -0
- package/.vs/CopilotSnapshots/02E79E48DFF5234787CB618DE990598A/state.mpack +1 -0
- package/.vs/CopilotSnapshots/07B1013C385C5641A5F5100E0751210B/0C73C015B2C859419AFBD08BE1343FC0/BA5D2B145A59265D63FA3B3584344B02 +236 -0
- package/.vs/CopilotSnapshots/07B1013C385C5641A5F5100E0751210B/state.mpack +1 -0
- package/.vs/CopilotSnapshots/0D03762A9EA0CB4885F2114567F23F93/A9AF50781E77B849AA3262D2738D9338/1F95FD72006ED6E92629CEFD7B2C4FEC +1 -0
- package/.vs/CopilotSnapshots/0D03762A9EA0CB4885F2114567F23F93/A9AF50781E77B849AA3262D2738D9338/4CA7B9D3BC2D0A498DC0777EDA3F9B0F +1 -0
- package/.vs/CopilotSnapshots/0D03762A9EA0CB4885F2114567F23F93/A9AF50781E77B849AA3262D2738D9338/7B623BFBAEB4EB61A9585F0BC8039B06 +19 -0
- package/.vs/CopilotSnapshots/0D03762A9EA0CB4885F2114567F23F93/CA94452964F7A94B8ECE3B54EE21B50F/1F95FD72006ED6E92629CEFD7B2C4FEC +5 -0
- package/.vs/CopilotSnapshots/0D03762A9EA0CB4885F2114567F23F93/CA94452964F7A94B8ECE3B54EE21B50F/4CA7B9D3BC2D0A498DC0777EDA3F9B0F +3 -0
- package/.vs/CopilotSnapshots/0D03762A9EA0CB4885F2114567F23F93/CA94452964F7A94B8ECE3B54EE21B50F/7B623BFBAEB4EB61A9585F0BC8039B06 +21 -0
- package/.vs/CopilotSnapshots/0D03762A9EA0CB4885F2114567F23F93/state.mpack +1 -0
- package/.vs/CopilotSnapshots/10B71DC3C4C1C04E8602FA06D3925F98/23B181EB1228EF40ABCEF51E89FBF6E6/41035D2B1D57326B55F66372017E223A +1 -0
- package/.vs/CopilotSnapshots/10B71DC3C4C1C04E8602FA06D3925F98/23B181EB1228EF40ABCEF51E89FBF6E6/45EABF6EF6BDFAA58C941A29E98C9C83 +113 -0
- package/.vs/CopilotSnapshots/10B71DC3C4C1C04E8602FA06D3925F98/23B181EB1228EF40ABCEF51E89FBF6E6/748E0B8859CA1A5FDCA675C9E53B6D1C +1 -0
- package/.vs/CopilotSnapshots/10B71DC3C4C1C04E8602FA06D3925F98/23B181EB1228EF40ABCEF51E89FBF6E6/A250FF4AD59546A65FFDC6AA92A4698E +1 -0
- package/.vs/CopilotSnapshots/10B71DC3C4C1C04E8602FA06D3925F98/23B181EB1228EF40ABCEF51E89FBF6E6/C42432BC73D8AA122171FAB6EEB13CBC +19 -0
- package/.vs/CopilotSnapshots/10B71DC3C4C1C04E8602FA06D3925F98/state.mpack +1 -0
- package/.vs/CopilotSnapshots/13B40109875D434BB24880356492BE7E/828B96E81CC7014B887AA519767FACC3/437DAEC1EBBAF4F25ABA1B6A25EB6933 +25 -0
- package/.vs/CopilotSnapshots/13B40109875D434BB24880356492BE7E/state.mpack +1 -0
- package/.vs/CopilotSnapshots/245168908540D646ACBD4FDE8D6DD2D4/1CDE8BAB21868E4D893E119554BA87E5/904140CF7EDF0C98AEA45F0D36062FE1 +63 -0
- package/.vs/CopilotSnapshots/245168908540D646ACBD4FDE8D6DD2D4/1CDE8BAB21868E4D893E119554BA87E5/DFF70C60F68ECD9A4E4C3C74E4CC4DEE +1 -0
- package/.vs/CopilotSnapshots/245168908540D646ACBD4FDE8D6DD2D4/1CDE8BAB21868E4D893E119554BA87E5/EF71788BE39818EEA3F0164DC15E1BD7 +170 -0
- package/.vs/CopilotSnapshots/245168908540D646ACBD4FDE8D6DD2D4/state.mpack +1 -0
- package/.vs/CopilotSnapshots/3BACC9346120824DB30006E353477163/87C831E9EA1AA249A25A44D08CF8E0B5/EF71788BE39818EEA3F0164DC15E1BD7 +328 -0
- package/.vs/CopilotSnapshots/3BACC9346120824DB30006E353477163/state.mpack +1 -0
- package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/14FE66AD0B834E488EECD9594AE72472/23E7151F0483C5BB5E663F83D4962FD4 +1 -0
- package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/14FE66AD0B834E488EECD9594AE72472/2D4DCEBC89D52B097AEEEABA23C0EB59 +1 -0
- package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/14FE66AD0B834E488EECD9594AE72472/7C951A8A572EA5C371FDE657AF968B9C +1 -0
- package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/14FE66AD0B834E488EECD9594AE72472/A32D1DB906C73FA74EF270AAEE165FC0 +1 -0
- package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/14FE66AD0B834E488EECD9594AE72472/B692C85119711C76235AA5D78F9F3818 +1 -0
- package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/14FE66AD0B834E488EECD9594AE72472/E602628EF6D764C2C267810C92906DBA +1 -0
- package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/14FE66AD0B834E488EECD9594AE72472/E621434FB1D5415B14FBBCC11967E420 +1 -0
- package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/9C5A45FA50D5344FBB275F406599FF4E/23E7151F0483C5BB5E663F83D4962FD4 +1 -0
- package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/9C5A45FA50D5344FBB275F406599FF4E/2D4DCEBC89D52B097AEEEABA23C0EB59 +1 -0
- package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/9C5A45FA50D5344FBB275F406599FF4E/7C951A8A572EA5C371FDE657AF968B9C +1 -0
- package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/9C5A45FA50D5344FBB275F406599FF4E/A32D1DB906C73FA74EF270AAEE165FC0 +1 -0
- package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/9C5A45FA50D5344FBB275F406599FF4E/B692C85119711C76235AA5D78F9F3818 +1 -0
- package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/9C5A45FA50D5344FBB275F406599FF4E/E602628EF6D764C2C267810C92906DBA +1 -0
- package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/9C5A45FA50D5344FBB275F406599FF4E/E621434FB1D5415B14FBBCC11967E420 +1 -0
- package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/9C5A45FA50D5344FBB275F406599FF4E/EF71788BE39818EEA3F0164DC15E1BD7 +489 -0
- package/.vs/CopilotSnapshots/3EFABA5D1530804CA04C606F5EFDDC38/state.mpack +1 -0
- package/.vs/CopilotSnapshots/4C16AB71DC018C46A734FBF0BF4AEDD9/0E5F1D40C0CAE848B8F9457F29A1F3FF/D03CD05B4F5C8B7C8CDF0B5E1961B3CA +42 -0
- package/.vs/CopilotSnapshots/4C16AB71DC018C46A734FBF0BF4AEDD9/462A64EF41A4BF42A18708B83E02FD6F/D03CD05B4F5C8B7C8CDF0B5E1961B3CA +40 -0
- package/.vs/CopilotSnapshots/4C16AB71DC018C46A734FBF0BF4AEDD9/90C95C12B91FA142BEF509B6FA329DE5/A3B20E10A19C7CA170132274D2F9312B +9 -0
- package/.vs/CopilotSnapshots/4C16AB71DC018C46A734FBF0BF4AEDD9/90C95C12B91FA142BEF509B6FA329DE5/D03CD05B4F5C8B7C8CDF0B5E1961B3CA +1 -0
- package/.vs/CopilotSnapshots/4C16AB71DC018C46A734FBF0BF4AEDD9/AD7513C9BBFE904AAB7F940397B95A99/D03CD05B4F5C8B7C8CDF0B5E1961B3CA +42 -0
- package/.vs/CopilotSnapshots/4C16AB71DC018C46A734FBF0BF4AEDD9/state.mpack +1 -0
- package/.vs/CopilotSnapshots/50E0417FAD2E524D887CB5763C2FB7B4/63A4C250D9DCE04B9F61D8833B89B5BF/EF71788BE39818EEA3F0164DC15E1BD7 +174 -0
- package/.vs/CopilotSnapshots/50E0417FAD2E524D887CB5763C2FB7B4/state.mpack +1 -0
- package/.vs/CopilotSnapshots/5EF2507B002AC14EA991043C37C36551/60FF68DE489DAD4FBCBBB54AA3F6A552/EF71788BE39818EEA3F0164DC15E1BD7 +496 -0
- package/.vs/CopilotSnapshots/5EF2507B002AC14EA991043C37C36551/state.mpack +1 -0
- package/.vs/CopilotSnapshots/6AA7610F1FB2B746821E54C28A8D109B/7FB78C0F8CB04F4AA6AF3315277B80F8/FB35DD13E708043D4CD8ACD54E14708F +1 -0
- package/.vs/CopilotSnapshots/6AA7610F1FB2B746821E54C28A8D109B/state.mpack +1 -0
- package/.vs/CopilotSnapshots/7F905F8BAC0DAD49BD507CA45C569AFD/5782E13CAB03A04E9E1EC5692F892170/BA5D2B145A59265D63FA3B3584344B02 +5 -0
- package/.vs/CopilotSnapshots/7F905F8BAC0DAD49BD507CA45C569AFD/5782E13CAB03A04E9E1EC5692F892170/EF71788BE39818EEA3F0164DC15E1BD7 +158 -0
- package/.vs/CopilotSnapshots/7F905F8BAC0DAD49BD507CA45C569AFD/9886598393C89944B51920C01EB650C9/BA5D2B145A59265D63FA3B3584344B02 +35 -0
- package/.vs/CopilotSnapshots/7F905F8BAC0DAD49BD507CA45C569AFD/state.mpack +1 -0
- package/.vs/CopilotSnapshots/8492D9C7A2D9514DB8A69D304B48BF3C/D2DA3C4E2131E84EA02E321802A65254/EF71788BE39818EEA3F0164DC15E1BD7 +165 -0
- package/.vs/CopilotSnapshots/8492D9C7A2D9514DB8A69D304B48BF3C/state.mpack +1 -0
- package/.vs/CopilotSnapshots/891A2DC0E5FA424CB8BDDA4FE26ED372/E244D49DDC79514DBA322770B03AE287/1CF9939611B0D194AC81951A171DF046 +43 -0
- package/.vs/CopilotSnapshots/891A2DC0E5FA424CB8BDDA4FE26ED372/state.mpack +1 -0
- package/.vs/CopilotSnapshots/8D302F8BAE46F54EA82AE1DED1A5D240/11E6D1F8E56D734F99C5216231273E8D/E621434FB1D5415B14FBBCC11967E420 +66 -0
- package/.vs/CopilotSnapshots/8D302F8BAE46F54EA82AE1DED1A5D240/24C69A83160FD844B0DEFECF8E1313DB/1CF9939611B0D194AC81951A171DF046 +43 -0
- package/.vs/CopilotSnapshots/8D302F8BAE46F54EA82AE1DED1A5D240/24C69A83160FD844B0DEFECF8E1313DB/E621434FB1D5415B14FBBCC11967E420 +53 -0
- package/.vs/CopilotSnapshots/8D302F8BAE46F54EA82AE1DED1A5D240/5E6D1BCD7CE81548AB445DE97505DC62/1CF9939611B0D194AC81951A171DF046 +30 -0
- package/.vs/CopilotSnapshots/8D302F8BAE46F54EA82AE1DED1A5D240/5E6D1BCD7CE81548AB445DE97505DC62/E621434FB1D5415B14FBBCC11967E420 +53 -0
- package/.vs/CopilotSnapshots/8D302F8BAE46F54EA82AE1DED1A5D240/EC4E81E0109C8F4BA1B5D9CFE1C122BC/E621434FB1D5415B14FBBCC11967E420 +54 -0
- package/.vs/CopilotSnapshots/8D302F8BAE46F54EA82AE1DED1A5D240/state.mpack +1 -0
- package/.vs/CopilotSnapshots/90C28D332F9B2949810126139FCA2640/6139F888FA743143B8E6C99306A478A6/30F913EA337870677E7C575773ECF531 +130 -0
- package/.vs/CopilotSnapshots/90C28D332F9B2949810126139FCA2640/F21743E379F9C1439F6A6405A289AA99/30F913EA337870677E7C575773ECF531 +160 -0
- package/.vs/CopilotSnapshots/90C28D332F9B2949810126139FCA2640/state.mpack +1 -0
- package/.vs/CopilotSnapshots/99E22E75C8AEDF4DB3A668A9ADF0BC43/2E2EFE66C5E05C4B809986E9B23D5409/45EABF6EF6BDFAA58C941A29E98C9C83 +113 -0
- package/.vs/CopilotSnapshots/99E22E75C8AEDF4DB3A668A9ADF0BC43/2E2EFE66C5E05C4B809986E9B23D5409/FB35DD13E708043D4CD8ACD54E14708F +2 -0
- package/.vs/CopilotSnapshots/99E22E75C8AEDF4DB3A668A9ADF0BC43/BE46916E3A8F2C4284792B951B674907/FB35DD13E708043D4CD8ACD54E14708F +5 -0
- package/.vs/CopilotSnapshots/99E22E75C8AEDF4DB3A668A9ADF0BC43/state.mpack +1 -0
- package/.vs/CopilotSnapshots/A6D99EA2D3819F45AD8087D7487F9318/state.mpack +1 -0
- package/.vs/CopilotSnapshots/A78C77F7A237704D95BCFE1BBC39FB0F/68BA9941941DC244BC799D89DB2BF86E/7C951A8A572EA5C371FDE657AF968B9C +96 -0
- package/.vs/CopilotSnapshots/A78C77F7A237704D95BCFE1BBC39FB0F/state.mpack +1 -0
- package/.vs/CopilotSnapshots/AD2203F1B9FECE44BB6D5DC5D83E87AA/734AB1B2974F9545B7F12AAA5842524B/840203FFA9CCF5B33DFD5C7CC5B13527 +125 -0
- package/.vs/CopilotSnapshots/AD2203F1B9FECE44BB6D5DC5D83E87AA/state.mpack +1 -0
- package/.vs/CopilotSnapshots/AEC950C2FAD20147AEE8E325E2CA0A78/89CF3F527D0687479D14274E8CDF3DFF/1CF9939611B0D194AC81951A171DF046 +30 -0
- package/.vs/CopilotSnapshots/AEC950C2FAD20147AEE8E325E2CA0A78/89CF3F527D0687479D14274E8CDF3DFF/BA5D2B145A59265D63FA3B3584344B02 +158 -0
- package/.vs/CopilotSnapshots/AEC950C2FAD20147AEE8E325E2CA0A78/E495EBF64DC77A4BBD470B92DB0391C4/1CF9939611B0D194AC81951A171DF046 +30 -0
- package/.vs/CopilotSnapshots/AEC950C2FAD20147AEE8E325E2CA0A78/E495EBF64DC77A4BBD470B92DB0391C4/BA5D2B145A59265D63FA3B3584344B02 +67 -0
- package/.vs/CopilotSnapshots/AEC950C2FAD20147AEE8E325E2CA0A78/state.mpack +1 -0
- package/.vs/CopilotSnapshots/AF947096A34634478C5D084B8442CD81/1FCDCC65B992954DB78BD1F46892312B/44EB81A1663981E3F52FFFECE3A2918E +143 -0
- package/.vs/CopilotSnapshots/AF947096A34634478C5D084B8442CD81/1FCDCC65B992954DB78BD1F46892312B/E602628EF6D764C2C267810C92906DBA +253 -0
- package/.vs/CopilotSnapshots/AF947096A34634478C5D084B8442CD81/state.mpack +1 -0
- package/.vs/CopilotSnapshots/B1DED422A45D5740BA4EE745C04B2B0B/226F822A22D6BD44BCF56BAA47FA274C/EF71788BE39818EEA3F0164DC15E1BD7 +174 -0
- package/.vs/CopilotSnapshots/B1DED422A45D5740BA4EE745C04B2B0B/state.mpack +1 -0
- package/.vs/CopilotSnapshots/B5DD5E50ACD0FD4998564F0FDE7FAEE0/97908D1D83AD2D4EA7082388DE07CBB4/44EB81A1663981E3F52FFFECE3A2918E +148 -0
- package/.vs/CopilotSnapshots/B5DD5E50ACD0FD4998564F0FDE7FAEE0/state.mpack +1 -0
- package/.vs/CopilotSnapshots/B8ADCAC0C19DB14FB8388BA59A86BC74/7ED3F1557FD7BE4DBEAF9B59FD442925/44EB81A1663981E3F52FFFECE3A2918E +152 -0
- package/.vs/CopilotSnapshots/B8ADCAC0C19DB14FB8388BA59A86BC74/state.mpack +1 -0
- package/.vs/CopilotSnapshots/BDFF50BBC1A93747A0001969C3BD195F/0130610530354840BB06BF4F4E744242/D03CD05B4F5C8B7C8CDF0B5E1961B3CA +138 -0
- package/.vs/CopilotSnapshots/BDFF50BBC1A93747A0001969C3BD195F/5F1C58CEFBAF1B4E80C4CF38B83A0A5F/D03CD05B4F5C8B7C8CDF0B5E1961B3CA +129 -0
- package/.vs/CopilotSnapshots/BDFF50BBC1A93747A0001969C3BD195F/BDC3D099FCCCC147848630670EED45CF/D03CD05B4F5C8B7C8CDF0B5E1961B3CA +139 -0
- package/.vs/CopilotSnapshots/BDFF50BBC1A93747A0001969C3BD195F/D9E2B1CDD1E2BB468E0703BEF6706FF6/D03CD05B4F5C8B7C8CDF0B5E1961B3CA +139 -0
- package/.vs/CopilotSnapshots/BDFF50BBC1A93747A0001969C3BD195F/state.mpack +1 -0
- package/.vs/CopilotSnapshots/C1E2C1A9C1DCFA46B1D5F1C6F36A152D/BC91C0FD38D8694BB992A8DEC1833670/148399016C7971F5592DAADBB9523118 +120 -0
- package/.vs/CopilotSnapshots/C1E2C1A9C1DCFA46B1D5F1C6F36A152D/state.mpack +1 -0
- package/.vs/CopilotSnapshots/C4D8E85893425E4F86F18850F5CA5C08/6C0950E97063C547A72D737E618436B0/1CF9939611B0D194AC81951A171DF046 +9 -0
- package/.vs/CopilotSnapshots/C4D8E85893425E4F86F18850F5CA5C08/6C0950E97063C547A72D737E618436B0/DFF70C60F68ECD9A4E4C3C74E4CC4DEE +84 -0
- package/.vs/CopilotSnapshots/C4D8E85893425E4F86F18850F5CA5C08/state.mpack +1 -0
- package/.vs/CopilotSnapshots/C5C3CA4C37B14A47B6BC753D09F69117/03EA1376F04C0D468FD0851119159D34/44EB81A1663981E3F52FFFECE3A2918E +148 -0
- package/.vs/CopilotSnapshots/C5C3CA4C37B14A47B6BC753D09F69117/03EA1376F04C0D468FD0851119159D34/E602628EF6D764C2C267810C92906DBA +265 -0
- package/.vs/CopilotSnapshots/C5C3CA4C37B14A47B6BC753D09F69117/6887503C15557349842029E58C9C0D11/44EB81A1663981E3F52FFFECE3A2918E +152 -0
- package/.vs/CopilotSnapshots/C5C3CA4C37B14A47B6BC753D09F69117/6887503C15557349842029E58C9C0D11/E602628EF6D764C2C267810C92906DBA +265 -0
- package/.vs/CopilotSnapshots/C5C3CA4C37B14A47B6BC753D09F69117/state.mpack +1 -0
- package/.vs/CopilotSnapshots/C7190BBC8D95D44F9CF8E65E3E8C9CFD/4B6D07592F8EDC4AA3FF742B1F9531CC/1B80EB15A2FEBEC11C8210C5461F8DB7 +43 -0
- package/.vs/CopilotSnapshots/C7190BBC8D95D44F9CF8E65E3E8C9CFD/state.mpack +1 -0
- package/.vs/CopilotSnapshots/C79D12964917E44F9A5BB9D8FA725A0C/2071ADB146D8F7499419123B2A595A41/03E00441128DC70FFEA043158417AC9A +15 -0
- package/.vs/CopilotSnapshots/C79D12964917E44F9A5BB9D8FA725A0C/6ECBF707FE2A88418EA1649CE46068D5/03E00441128DC70FFEA043158417AC9A +1 -0
- package/.vs/CopilotSnapshots/C79D12964917E44F9A5BB9D8FA725A0C/70BAB1D82B755F47A2351CA905ACC0F1/03E00441128DC70FFEA043158417AC9A +49 -0
- package/.vs/CopilotSnapshots/C79D12964917E44F9A5BB9D8FA725A0C/99DDFADAEC5CA14D92CC470523A11743/03E00441128DC70FFEA043158417AC9A +39 -0
- package/.vs/CopilotSnapshots/C79D12964917E44F9A5BB9D8FA725A0C/state.mpack +1 -0
- package/.vs/CopilotSnapshots/D533D78C39683A4188A2CEC902BC03CD/2445F4111C26EB4DA5404F930E140F56/840203FFA9CCF5B33DFD5C7CC5B13527 +6 -0
- package/.vs/CopilotSnapshots/D533D78C39683A4188A2CEC902BC03CD/2445F4111C26EB4DA5404F930E140F56/C27E5C1787B7957BF6F0C3D417890141 +1 -0
- package/.vs/CopilotSnapshots/D533D78C39683A4188A2CEC902BC03CD/state.mpack +1 -0
- package/.vs/CopilotSnapshots/DCAA5A718EC8304685D14C52356D80E0/5FC7C36C7769414C80BFF27A07BB5063/BE400B34D9700403D2BA3A1AA6B1EF1D +15 -0
- package/.vs/CopilotSnapshots/DCAA5A718EC8304685D14C52356D80E0/A4DD9B92084D8E48A95435EDB2B14545/86848C7099AD75EE4E8F10E066F49671 +15 -0
- package/.vs/CopilotSnapshots/DCAA5A718EC8304685D14C52356D80E0/A4DD9B92084D8E48A95435EDB2B14545/BE400B34D9700403D2BA3A1AA6B1EF1D +15 -0
- package/.vs/CopilotSnapshots/DCAA5A718EC8304685D14C52356D80E0/state.mpack +1 -0
- package/.vs/CopilotSnapshots/DCF62F751B748642A0BF5D5125AB6769/5F324CB20D1B5045A13090FA9D177B74/7C951A8A572EA5C371FDE657AF968B9C +96 -0
- package/.vs/CopilotSnapshots/DCF62F751B748642A0BF5D5125AB6769/5F324CB20D1B5045A13090FA9D177B74/B692C85119711C76235AA5D78F9F3818 +73 -0
- package/.vs/CopilotSnapshots/DCF62F751B748642A0BF5D5125AB6769/5F324CB20D1B5045A13090FA9D177B74/EF71788BE39818EEA3F0164DC15E1BD7 +182 -0
- package/.vs/CopilotSnapshots/DCF62F751B748642A0BF5D5125AB6769/C1287B2893D30D40A46C30DC2CE05178/7C951A8A572EA5C371FDE657AF968B9C +96 -0
- package/.vs/CopilotSnapshots/DCF62F751B748642A0BF5D5125AB6769/C1287B2893D30D40A46C30DC2CE05178/B692C85119711C76235AA5D78F9F3818 +98 -0
- package/.vs/CopilotSnapshots/DCF62F751B748642A0BF5D5125AB6769/CA6304DFE7764A4C87ACE5816CDB7CD9/7C951A8A572EA5C371FDE657AF968B9C +96 -0
- package/.vs/CopilotSnapshots/DCF62F751B748642A0BF5D5125AB6769/CA6304DFE7764A4C87ACE5816CDB7CD9/B692C85119711C76235AA5D78F9F3818 +21 -0
- package/.vs/CopilotSnapshots/DCF62F751B748642A0BF5D5125AB6769/CA6304DFE7764A4C87ACE5816CDB7CD9/EF71788BE39818EEA3F0164DC15E1BD7 +176 -0
- package/.vs/CopilotSnapshots/DCF62F751B748642A0BF5D5125AB6769/state.mpack +1 -0
- package/.vs/VSWorkspaceState.json +6 -0
- 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 +1026 -0
- 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 +425 -0
- package/.vs/ts-sample/v17/DocumentLayout.json +423 -0
- package/.vs/ts-sample/v17/TestStore/0/000.testlog +0 -0
- package/.vs/ts-sample/v17/TestStore/0/testlog.manifest +0 -0
- package/LICENSE +21 -0
- package/README.md +308 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/vitest.config.js +15 -0
- package/dist/vitest.config.js.map +1 -0
- package/package.json +38 -0
@@ -0,0 +1,120 @@
|
|
1
|
+
import { SqlTokenizer } from "../src/sqlTokenizer";
|
2
|
+
|
3
|
+
test('tokenizes integer number', () => {
|
4
|
+
// Arrange
|
5
|
+
const tokenizer = new SqlTokenizer('123');
|
6
|
+
|
7
|
+
// Act
|
8
|
+
const tokens = tokenizer.readLexmes();
|
9
|
+
|
10
|
+
// Assert
|
11
|
+
expect(tokens.length).toBe(1);
|
12
|
+
expect(tokens[0].value).toBe('123');
|
13
|
+
});
|
14
|
+
|
15
|
+
test('tokenizes positive number', () => {
|
16
|
+
// Arrange
|
17
|
+
const tokenizer = new SqlTokenizer('+123');
|
18
|
+
|
19
|
+
// Act
|
20
|
+
const tokens = tokenizer.readLexmes();
|
21
|
+
|
22
|
+
// Assert
|
23
|
+
expect(tokens.length).toBe(1);
|
24
|
+
expect(tokens[0].value).toBe('123');
|
25
|
+
});
|
26
|
+
|
27
|
+
test('tokenizes decimal number', () => {
|
28
|
+
// Arrange
|
29
|
+
const tokenizer = new SqlTokenizer('123.456');
|
30
|
+
|
31
|
+
// Act
|
32
|
+
const tokens = tokenizer.readLexmes();
|
33
|
+
|
34
|
+
// Assert
|
35
|
+
expect(tokens.length).toBe(1);
|
36
|
+
expect(tokens[0].value).toBe('123.456');
|
37
|
+
});
|
38
|
+
|
39
|
+
test('tokenizes number starting with dot', () => {
|
40
|
+
// Arrange
|
41
|
+
const tokenizer = new SqlTokenizer('.456');
|
42
|
+
|
43
|
+
// Act
|
44
|
+
const tokens = tokenizer.readLexmes();
|
45
|
+
|
46
|
+
// Assert
|
47
|
+
expect(tokens.length).toBe(1);
|
48
|
+
expect(tokens[0].value).toBe('0.456');
|
49
|
+
});
|
50
|
+
|
51
|
+
test('tokenizes hexadecimal number', () => {
|
52
|
+
// Arrange
|
53
|
+
const tokenizer = new SqlTokenizer('0x1A3F');
|
54
|
+
|
55
|
+
// Act
|
56
|
+
const tokens = tokenizer.readLexmes();
|
57
|
+
|
58
|
+
// Assert
|
59
|
+
expect(tokens.length).toBe(1);
|
60
|
+
expect(tokens[0].value).toBe('0x1A3F');
|
61
|
+
});
|
62
|
+
|
63
|
+
test('tokenizes exponential notation', () => {
|
64
|
+
// Arrange
|
65
|
+
const tokenizer = new SqlTokenizer('1.23e+10');
|
66
|
+
|
67
|
+
// Act
|
68
|
+
const tokens = tokenizer.readLexmes();
|
69
|
+
|
70
|
+
// Assert
|
71
|
+
expect(tokens.length).toBe(1);
|
72
|
+
});
|
73
|
+
|
74
|
+
test('tokenizes negative integer number', () => {
|
75
|
+
// Arrange
|
76
|
+
const tokenizer = new SqlTokenizer('-123');
|
77
|
+
|
78
|
+
// Act
|
79
|
+
const tokens = tokenizer.readLexmes();
|
80
|
+
|
81
|
+
// Assert
|
82
|
+
expect(tokens.length).toBe(1);
|
83
|
+
expect(tokens[0].value).toBe('-123');
|
84
|
+
});
|
85
|
+
|
86
|
+
test('tokenizes negative decimal number', () => {
|
87
|
+
// Arrange
|
88
|
+
const tokenizer = new SqlTokenizer('-123.456');
|
89
|
+
|
90
|
+
// Act
|
91
|
+
const tokens = tokenizer.readLexmes();
|
92
|
+
|
93
|
+
// Assert
|
94
|
+
expect(tokens.length).toBe(1);
|
95
|
+
expect(tokens[0].value).toBe('-123.456');
|
96
|
+
});
|
97
|
+
|
98
|
+
test('tokenizes negative number starting with dot', () => {
|
99
|
+
// Arrange
|
100
|
+
const tokenizer = new SqlTokenizer('-.456');
|
101
|
+
|
102
|
+
// Act
|
103
|
+
const tokens = tokenizer.readLexmes();
|
104
|
+
|
105
|
+
// Assert
|
106
|
+
expect(tokens.length).toBe(1);
|
107
|
+
expect(tokens[0].value).toBe('-0.456');
|
108
|
+
});
|
109
|
+
|
110
|
+
test('tokenizes negative exponential notation', () => {
|
111
|
+
// Arrange
|
112
|
+
const tokenizer = new SqlTokenizer('-1.23e+10');
|
113
|
+
|
114
|
+
// Act
|
115
|
+
const tokens = tokenizer.readLexmes();
|
116
|
+
|
117
|
+
// Assert
|
118
|
+
expect(tokens.length).toBe(1);
|
119
|
+
expect(tokens[0].value).toBe('-1.23e+10');
|
120
|
+
});
|
@@ -0,0 +1 @@
|
|
1
|
+
��SessionId��$a9c1e2c1-dcc1-46fa-b1d5-f1c6f36a152d��Id�4Microsoft.VisualStudio.Conversations.Chat.HelpWindow�CorrelationStates���CorrelationId�$fdc091bc-d838-4b69-b992-a8dec1833670�Snapshots�� 148399016C7971F5592DAADBB9523118��SavedFileName١C:\Users\mssgm\Documents\GitHub\ts-sample\.vs\CopilotSnapshots\C1E2C1A9C1DCFA46B1D5F1C6F36A152D\BC91C0FD38D8694BB992A8DEC1833670\148399016C7971F5592DAADBB9523118�OriginalFilePath�?C:\Users\mssgm\Documents\GitHub\ts-sample\tests\literal.test.ts�NewFileMarker�
|
@@ -0,0 +1,84 @@
|
|
1
|
+
import { BaseTokenReader } from './BaseTokenReader';
|
2
|
+
import { Lexeme } from '../models/Lexeme';
|
3
|
+
|
4
|
+
/**
|
5
|
+
* Manages and coordinates multiple token readers
|
6
|
+
*/
|
7
|
+
export class TokenReaderManager {
|
8
|
+
private readers: BaseTokenReader[];
|
9
|
+
private input: string;
|
10
|
+
private position: number;
|
11
|
+
|
12
|
+
constructor(input: string, position: number = 0) {
|
13
|
+
this.input = input;
|
14
|
+
this.position = position;
|
15
|
+
this.readers = [];
|
16
|
+
}
|
17
|
+
|
18
|
+
/**
|
19
|
+
* Register a token reader
|
20
|
+
* @param reader The reader to register
|
21
|
+
* @returns This manager instance for chaining
|
22
|
+
*/
|
23
|
+
public register(reader: BaseTokenReader): TokenReaderManager {
|
24
|
+
this.readers.push(reader);
|
25
|
+
return this;
|
26
|
+
}
|
27
|
+
|
28
|
+
/**
|
29
|
+
* Register multiple token readers
|
30
|
+
* @param readers The readers to register
|
31
|
+
* @returns This manager instance for chaining
|
32
|
+
*/
|
33
|
+
public registerAll(readers: BaseTokenReader[]): TokenReaderManager {
|
34
|
+
readers.forEach(reader => this.register(reader));
|
35
|
+
return this;
|
36
|
+
}
|
37
|
+
|
38
|
+
/**
|
39
|
+
* Update the position for all readers
|
40
|
+
*/
|
41
|
+
private setPosition(position: number): void {
|
42
|
+
this.position = position;
|
43
|
+
for (const reader of this.readers) {
|
44
|
+
reader.setPosition(position);
|
45
|
+
}
|
46
|
+
}
|
47
|
+
|
48
|
+
/**
|
49
|
+
* Try to read a token using all registered readers
|
50
|
+
* @param previous The previous token, if any
|
51
|
+
* @returns The lexeme if a reader could read it, null otherwise
|
52
|
+
*/
|
53
|
+
public tryRead(position: number, previous: Lexeme | null): Lexeme | null {
|
54
|
+
this.setPosition(position);
|
55
|
+
for (const reader of this.readers) {
|
56
|
+
const lexeme = reader.tryRead(previous);
|
57
|
+
if (lexeme) {
|
58
|
+
return lexeme;
|
59
|
+
}
|
60
|
+
}
|
61
|
+
return null;
|
62
|
+
}
|
63
|
+
|
64
|
+
/**
|
65
|
+
* Get the maximum position among all readers
|
66
|
+
*/
|
67
|
+
public getMaxPosition(): number {
|
68
|
+
let maxPosition = this.position;
|
69
|
+
for (const reader of this.readers) {
|
70
|
+
const position = reader.getPosition();
|
71
|
+
if (position > maxPosition) {
|
72
|
+
maxPosition = position;
|
73
|
+
}
|
74
|
+
}
|
75
|
+
return maxPosition;
|
76
|
+
}
|
77
|
+
|
78
|
+
/**
|
79
|
+
* Get the input string
|
80
|
+
*/
|
81
|
+
public getInput(): string {
|
82
|
+
return this.input;
|
83
|
+
}
|
84
|
+
}
|
@@ -0,0 +1 @@
|
|
1
|
+
��SessionId��$58e8d8c4-4293-4f5e-86f1-8850f5ca5c08��Id�4Microsoft.VisualStudio.Conversations.Chat.HelpWindow�CorrelationStates���CorrelationId�$e950096c-6370-47c5-a72d-737e618436b0�Snapshots�� DFF70C60F68ECD9A4E4C3C74E4CC4DEE��SavedFileName١C:\Users\mssgm\Documents\GitHub\ts-sample\.vs\CopilotSnapshots\C4D8E85893425E4F86F18850F5CA5C08\6C0950E97063C547A72D737E618436B0\DFF70C60F68ECD9A4E4C3C74E4CC4DEE�OriginalFilePath�PC:\Users\mssgm\Documents\GitHub\ts-sample\src\tokenReaders\TokenReaderManager.ts�NewFileMarker�� 1CF9939611B0D194AC81951A171DF046��SavedFileName١C:\Users\mssgm\Documents\GitHub\ts-sample\.vs\CopilotSnapshots\C4D8E85893425E4F86F18850F5CA5C08\6C0950E97063C547A72D737E618436B0\1CF9939611B0D194AC81951A171DF046�OriginalFilePath�QC:\Users\mssgm\Documents\GitHub\ts-sample\src\tokenReaders\OperatorTokenReader.ts�NewFileMarker�
|
@@ -0,0 +1,148 @@
|
|
1
|
+
import { StringUtils } from "./stringUtils";
|
2
|
+
|
3
|
+
export enum KeywordMatchResult {
|
4
|
+
NotAKeyword, // "キーワードではない"
|
5
|
+
PartialOnly, // "途中(ここで終わることはない)"
|
6
|
+
PartialOrFinal, // "途中または終端(ここで止まることはある)"
|
7
|
+
Final // "終端(これ以上長いキーワードはない)"
|
8
|
+
}
|
9
|
+
|
10
|
+
export class KeywordTrieReader {
|
11
|
+
private input: string;
|
12
|
+
private trie: KeywordTrie;
|
13
|
+
|
14
|
+
constructor(input: string, trie: KeywordTrie) {
|
15
|
+
this.input = input;
|
16
|
+
this.trie = trie;
|
17
|
+
this.trie.reset();
|
18
|
+
}
|
19
|
+
|
20
|
+
private isEndOfInput(position: number, shift: number = 0): boolean {
|
21
|
+
return position + shift >= this.input.length;
|
22
|
+
}
|
23
|
+
|
24
|
+
private canRead(position: number, shift: number = 0): boolean {
|
25
|
+
return !this.isEndOfInput(position, shift);
|
26
|
+
}
|
27
|
+
|
28
|
+
public readKeyword(position: number): { keyword: string, newPosition: number } | null {
|
29
|
+
if (this.isEndOfInput(position)) {
|
30
|
+
return null;
|
31
|
+
}
|
32
|
+
|
33
|
+
// reset trie node
|
34
|
+
this.trie.reset();
|
35
|
+
const result = StringUtils.tryReadRegularIdentifier(this.input, position);
|
36
|
+
|
37
|
+
if (result === null) {
|
38
|
+
return null;
|
39
|
+
}
|
40
|
+
|
41
|
+
let matchResult = this.trie.pushLexeme(result.identifier);
|
42
|
+
|
43
|
+
if (matchResult === KeywordMatchResult.NotAKeyword) {
|
44
|
+
return null;
|
45
|
+
}
|
46
|
+
|
47
|
+
if (matchResult === KeywordMatchResult.Final) {
|
48
|
+
return {
|
49
|
+
keyword: result.identifier,
|
50
|
+
newPosition: result.newPosition
|
51
|
+
};
|
52
|
+
}
|
53
|
+
|
54
|
+
// multi-word keyword
|
55
|
+
let lexeme = result.identifier;
|
56
|
+
position = StringUtils.skipWhiteSpacesAndComments(this.input, result.newPosition);
|
57
|
+
|
58
|
+
while (this.canRead(position)) {
|
59
|
+
const previousMatchResult = matchResult;
|
60
|
+
|
61
|
+
const result = StringUtils.tryReadRegularIdentifier(this.input, position);
|
62
|
+
|
63
|
+
if (result !== null) {
|
64
|
+
matchResult = this.trie.pushLexeme(result.identifier);
|
65
|
+
|
66
|
+
if (matchResult === KeywordMatchResult.NotAKeyword) {
|
67
|
+
if (previousMatchResult === KeywordMatchResult.PartialOrFinal) {
|
68
|
+
break;
|
69
|
+
} else {
|
70
|
+
return null;
|
71
|
+
}
|
72
|
+
}
|
73
|
+
|
74
|
+
lexeme += ' ' + result.identifier;
|
75
|
+
position = StringUtils.skipWhiteSpacesAndComments(this.input, result.newPosition);
|
76
|
+
|
77
|
+
if (matchResult === KeywordMatchResult.Final) {
|
78
|
+
break;
|
79
|
+
}
|
80
|
+
} else if (previousMatchResult === KeywordMatchResult.PartialOrFinal) {
|
81
|
+
break;
|
82
|
+
} else {
|
83
|
+
return null;
|
84
|
+
}
|
85
|
+
}
|
86
|
+
return {
|
87
|
+
keyword: lexeme,
|
88
|
+
newPosition: position
|
89
|
+
};
|
90
|
+
}
|
91
|
+
}
|
92
|
+
|
93
|
+
export class KeywordTrie {
|
94
|
+
private root: Map<string, any> = new Map();
|
95
|
+
private currentNode: Map<string, any>;
|
96
|
+
|
97
|
+
// Add a caching property to avoid regex pattern creation for each check
|
98
|
+
private hasEndProperty: boolean = false;
|
99
|
+
private hasMoreProperties: boolean = false;
|
100
|
+
|
101
|
+
constructor(keywords: string[][]) {
|
102
|
+
// initialize root node
|
103
|
+
for (const keyword of keywords) {
|
104
|
+
this.addKeyword(keyword);
|
105
|
+
}
|
106
|
+
// set current node to root
|
107
|
+
this.currentNode = this.root;
|
108
|
+
}
|
109
|
+
|
110
|
+
private addKeyword(keyword: string[]) {
|
111
|
+
let node = this.root;
|
112
|
+
for (const word of keyword) {
|
113
|
+
if (!node.has(word)) {
|
114
|
+
node.set(word, new Map());
|
115
|
+
}
|
116
|
+
node = node.get(word);
|
117
|
+
}
|
118
|
+
node.set("__end__", true);
|
119
|
+
}
|
120
|
+
|
121
|
+
public reset(): void {
|
122
|
+
this.currentNode = this.root;
|
123
|
+
this.hasEndProperty = false;
|
124
|
+
this.hasMoreProperties = false;
|
125
|
+
}
|
126
|
+
|
127
|
+
public pushLexeme(lexeme: string): KeywordMatchResult {
|
128
|
+
if (!this.currentNode.has(lexeme)) {
|
129
|
+
return KeywordMatchResult.NotAKeyword;
|
130
|
+
}
|
131
|
+
|
132
|
+
// move to next node
|
133
|
+
this.currentNode = this.currentNode.get(lexeme);
|
134
|
+
|
135
|
+
// Cache property checks to avoid repeated operations
|
136
|
+
this.hasEndProperty = this.currentNode.has("__end__");
|
137
|
+
this.hasMoreProperties = this.currentNode.size > (this.hasEndProperty ? 1 : 0);
|
138
|
+
|
139
|
+
if (this.hasEndProperty && !this.hasMoreProperties) {
|
140
|
+
return KeywordMatchResult.Final;
|
141
|
+
}
|
142
|
+
if (this.hasEndProperty && this.hasMoreProperties) {
|
143
|
+
return KeywordMatchResult.PartialOrFinal;
|
144
|
+
}
|
145
|
+
|
146
|
+
return KeywordMatchResult.PartialOnly;
|
147
|
+
}
|
148
|
+
}
|
@@ -0,0 +1,265 @@
|
|
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 { KeywordTrie, KeywordTrieReader } from '../utils/KeywordTrie';
|
6
|
+
|
7
|
+
/**
|
8
|
+
* Reads SQL literal tokens (numbers, strings)
|
9
|
+
*/
|
10
|
+
|
11
|
+
const keywords = [
|
12
|
+
["null"],
|
13
|
+
["true"],
|
14
|
+
["false"],
|
15
|
+
["current_date"],
|
16
|
+
["current_time"],
|
17
|
+
["current_timestamp"],
|
18
|
+
["localtime"],
|
19
|
+
["localtimestamp"],
|
20
|
+
["unbounded"],
|
21
|
+
["normalized"],
|
22
|
+
["nfc", "normalized"],
|
23
|
+
["nfd", "normalized"],
|
24
|
+
["nfkc", "normalized"],
|
25
|
+
["nfkd", "normalized"],
|
26
|
+
["nfc"],
|
27
|
+
["nfd"],
|
28
|
+
["nfkc"],
|
29
|
+
["nfkd"]
|
30
|
+
];
|
31
|
+
const trie = new KeywordTrie(keywords);
|
32
|
+
|
33
|
+
// Prefix sets for quick checks
|
34
|
+
const SINGLE_CHAR_ESCAPED_PREFIX = new Set(['e\'', 'E\'', 'x\'', 'X\'', 'b\'', 'B\'']);
|
35
|
+
const UNICODE_ESCAPED_PREFIX = new Set(['u&\'', 'U&\'']);
|
36
|
+
|
37
|
+
export class LiteralTokenReader extends BaseTokenReader {
|
38
|
+
/**
|
39
|
+
* Try to read a literal token
|
40
|
+
*/
|
41
|
+
public tryRead(previous: Lexeme | null): Lexeme | null {
|
42
|
+
if (this.isEndOfInput()) {
|
43
|
+
return null;
|
44
|
+
}
|
45
|
+
|
46
|
+
const char = this.input[this.position];
|
47
|
+
|
48
|
+
// Check for keyword literals
|
49
|
+
const keyword = this.tryReadKeyword();
|
50
|
+
if (keyword) {
|
51
|
+
return keyword;
|
52
|
+
}
|
53
|
+
|
54
|
+
// Decimal token starting with a dot
|
55
|
+
if (char === '.' && this.canRead(1) && CharLookupTable.isDigit(this.input[this.position + 1])) {
|
56
|
+
return this.createLexeme(TokenType.Literal, this.readDigit());
|
57
|
+
}
|
58
|
+
|
59
|
+
// String literal
|
60
|
+
if (char === '\'') {
|
61
|
+
const value = this.readSingleQuotedString();
|
62
|
+
return this.createLexeme(TokenType.Literal, value);
|
63
|
+
}
|
64
|
+
|
65
|
+
// Digit tokens
|
66
|
+
if (CharLookupTable.isDigit(char)) {
|
67
|
+
return this.createLexeme(TokenType.Literal, this.readDigit());
|
68
|
+
}
|
69
|
+
|
70
|
+
// Signed number
|
71
|
+
if ((char === '+' || char === '-') && this.isValidNumericPrefix(previous)) {
|
72
|
+
const sign = char;
|
73
|
+
this.position++;
|
74
|
+
|
75
|
+
// Skip whitespace after sign
|
76
|
+
let pos = this.position;
|
77
|
+
while (this.canRead() && CharLookupTable.isWhitespace(this.input[this.position])) {
|
78
|
+
this.position++;
|
79
|
+
}
|
80
|
+
|
81
|
+
if (this.canRead() && (
|
82
|
+
CharLookupTable.isDigit(this.input[this.position]) ||
|
83
|
+
(this.input[this.position] === '.' &&
|
84
|
+
this.canRead(1) &&
|
85
|
+
CharLookupTable.isDigit(this.input[this.position + 1]))
|
86
|
+
)) {
|
87
|
+
return this.createLexeme(
|
88
|
+
TokenType.Literal,
|
89
|
+
sign === '-' ? sign + this.readDigit() : this.readDigit()
|
90
|
+
);
|
91
|
+
}
|
92
|
+
|
93
|
+
// Not a number, restore position
|
94
|
+
this.position = pos - 1; // Adjust for the increment at the beginning
|
95
|
+
}
|
96
|
+
|
97
|
+
// Check for prefixed literals
|
98
|
+
return this.tryReadEscapedLiteral();
|
99
|
+
}
|
100
|
+
|
101
|
+
private tryReadKeyword(): Lexeme | null {
|
102
|
+
// Check for keyword literals
|
103
|
+
const reader = new KeywordTrieReader(this.input, trie);
|
104
|
+
const result = reader.readKeyword(this.position);
|
105
|
+
if (result) {
|
106
|
+
this.position = result.newPosition;
|
107
|
+
return this.createLexeme(TokenType.Literal, result.keyword);
|
108
|
+
}
|
109
|
+
return null;
|
110
|
+
}
|
111
|
+
|
112
|
+
/**
|
113
|
+
* Check if the current context allows for a signed number
|
114
|
+
*/
|
115
|
+
private isValidNumericPrefix(previous: Lexeme | null): boolean {
|
116
|
+
return previous === null ||
|
117
|
+
(previous.type !== TokenType.Literal &&
|
118
|
+
previous.type !== TokenType.Identifier);
|
119
|
+
}
|
120
|
+
|
121
|
+
/**
|
122
|
+
* Read a numeric value
|
123
|
+
*/
|
124
|
+
private readDigit(): string {
|
125
|
+
const start = this.position;
|
126
|
+
let hasDot = false;
|
127
|
+
let hasExponent = false;
|
128
|
+
|
129
|
+
// Consider 0x, 0b, 0o
|
130
|
+
if (this.canRead(1) &&
|
131
|
+
this.input[this.position] === '0' &&
|
132
|
+
"xbo".includes(this.input[this.position + 1].toLowerCase())) {
|
133
|
+
|
134
|
+
const prefixType = this.input[this.position + 1].toLowerCase();
|
135
|
+
this.position += 2;
|
136
|
+
|
137
|
+
// Continue to get numeric and hexadecimal notation strings
|
138
|
+
const isHex = prefixType === 'x';
|
139
|
+
while (this.canRead()) {
|
140
|
+
const c = this.input[this.position];
|
141
|
+
if (CharLookupTable.isDigit(c) || (isHex && CharLookupTable.isHexChar(c))) {
|
142
|
+
this.position++;
|
143
|
+
} else {
|
144
|
+
break;
|
145
|
+
}
|
146
|
+
}
|
147
|
+
|
148
|
+
return this.input.slice(start, this.position);
|
149
|
+
}
|
150
|
+
|
151
|
+
// If starting with dot, note it
|
152
|
+
if (this.input[start] === '.') {
|
153
|
+
hasDot = true;
|
154
|
+
this.position++;
|
155
|
+
}
|
156
|
+
|
157
|
+
// Consider decimal point and exponential notation
|
158
|
+
while (this.canRead()) {
|
159
|
+
const char = this.input[this.position];
|
160
|
+
|
161
|
+
if (char === '.' && !hasDot) {
|
162
|
+
hasDot = true;
|
163
|
+
} else if ((char === 'e' || char === 'E') && !hasExponent) {
|
164
|
+
hasExponent = true;
|
165
|
+
if (this.canRead(1) && (this.input[this.position + 1] === '+' || this.input[this.position + 1] === '-')) {
|
166
|
+
this.position++;
|
167
|
+
}
|
168
|
+
} else if (!CharLookupTable.isDigit(char)) {
|
169
|
+
break;
|
170
|
+
}
|
171
|
+
|
172
|
+
this.position++;
|
173
|
+
}
|
174
|
+
|
175
|
+
if (start === this.position) {
|
176
|
+
throw new Error(`Unexpected character. position: ${start}\n${this.getDebugPositionInfo(start)}`);
|
177
|
+
}
|
178
|
+
|
179
|
+
if (this.input[start] === '.') {
|
180
|
+
// If the number starts with a dot, add 0 to the front
|
181
|
+
return '0' + this.input.slice(start, this.position);
|
182
|
+
}
|
183
|
+
|
184
|
+
return this.input.slice(start, this.position);
|
185
|
+
}
|
186
|
+
|
187
|
+
/**
|
188
|
+
* Read a string literal
|
189
|
+
*/
|
190
|
+
private readSingleQuotedString(): string {
|
191
|
+
const start = this.position;
|
192
|
+
|
193
|
+
this.read('\'');
|
194
|
+
|
195
|
+
while (this.canRead()) {
|
196
|
+
const char = this.input[this.position];
|
197
|
+
|
198
|
+
// escape character check
|
199
|
+
if (char === '\\' && this.canRead(1) && this.input[this.position + 1] === '\'') {
|
200
|
+
this.position += 2;
|
201
|
+
continue;
|
202
|
+
}
|
203
|
+
else if (char === '\'') {
|
204
|
+
break;
|
205
|
+
}
|
206
|
+
this.position++;
|
207
|
+
}
|
208
|
+
|
209
|
+
if (this.isEndOfInput()) {
|
210
|
+
throw new Error(`Single quote is not closed. position: ${start}\n${this.getDebugPositionInfo(start)}`);
|
211
|
+
}
|
212
|
+
|
213
|
+
const value = this.input.slice(start, this.position);
|
214
|
+
this.position++;
|
215
|
+
return value;
|
216
|
+
}
|
217
|
+
|
218
|
+
/**
|
219
|
+
* Try to read an escaped literal like e'...', x'...', etc.
|
220
|
+
*/
|
221
|
+
private tryReadEscapedLiteral(): Lexeme | null {
|
222
|
+
const start = this.position;
|
223
|
+
|
224
|
+
// Check for prefixed literals: e', x', b'
|
225
|
+
if (this.canRead(1) && SINGLE_CHAR_ESCAPED_PREFIX.has(this.input.slice(start, start + 2))) {
|
226
|
+
return this.readPrefixedLiteral(start, 2);
|
227
|
+
}
|
228
|
+
|
229
|
+
// Check for unicode literal: u&'
|
230
|
+
if (this.canRead(2) && UNICODE_ESCAPED_PREFIX.has( this.input.slice(start, start + 3))) {
|
231
|
+
return this.readPrefixedLiteral(start, 3);
|
232
|
+
}
|
233
|
+
|
234
|
+
return null;
|
235
|
+
}
|
236
|
+
|
237
|
+
private readPrefixedLiteral(start: number, prefixLength: number): Lexeme {
|
238
|
+
// Skip the prefix
|
239
|
+
this.position += prefixLength;
|
240
|
+
|
241
|
+
// Read until the closing quote
|
242
|
+
while (this.canRead()) {
|
243
|
+
if (this.input[this.position] === '\\' && this.canRead(1) && this.input[this.position + 1] === '\'') {
|
244
|
+
// Skip escaped single quote
|
245
|
+
this.position += 2;
|
246
|
+
continue;
|
247
|
+
}
|
248
|
+
else if (this.input[this.position] === '\'') {
|
249
|
+
// Found closing quote
|
250
|
+
this.position++;
|
251
|
+
break;
|
252
|
+
}
|
253
|
+
this.position++;
|
254
|
+
}
|
255
|
+
|
256
|
+
if (this.position <= start + prefixLength) {
|
257
|
+
throw new Error(`Closing delimiter is not found. position: ${start}\n${this.getDebugPositionInfo(start)}`);
|
258
|
+
}
|
259
|
+
|
260
|
+
return {
|
261
|
+
type: TokenType.Literal,
|
262
|
+
value: this.input.slice(start, this.position)
|
263
|
+
};
|
264
|
+
}
|
265
|
+
}
|