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