@@ -4,62 +4,87 @@ describe "SQL Lexer", ->
44 it " eats select queries" , ->
55 tokens = lexer .tokenize (" select * from my_table" )
66 tokens .should .eql [
7- [" SELECT" , " select" , 1 ]
8- [" STAR" , " *" , 1 ]
9- [" FROM" , " from" , 1 ]
10- [" LITERAL" , " my_table" , 1 ]
11- [" EOF" , " " , 1 ]
7+ [" SELECT" , " select" , 1 , 0 ]
8+ [" STAR" , " *" , 1 , 7 ]
9+ [" FROM" , " from" , 1 , 9 ]
10+ [" LITERAL" , " my_table" , 1 , 14 ]
11+ [" EOF" , " " , 1 , 22 ]
1212 ]
1313
1414 it " eats select queries with stars and multiplication" , ->
1515 tokens = lexer .tokenize (" select * from my_table where foo = 1 * 2" )
1616 tokens .should .eql [
17- [" SELECT" , " select" , 1 ]
18- [" STAR" , " *" , 1 ]
19- [" FROM" , " from" , 1 ]
20- [" LITERAL" , " my_table" , 1 ]
21- [" WHERE" , " where" , 1 ]
22- [" LITERAL" , " foo" , 1 ]
23- [" OPERATOR" , " =" , 1 ]
24- [" NUMBER" , " 1" , 1 ]
25- [" MATH_MULTI" , " *" , 1 ]
26- [" NUMBER" , " 2" , 1 ]
27- [" EOF" , " " , 1 ]
17+ [" SELECT" , " select" , 1 , 0 ]
18+ [" STAR" , " *" , 1 , 7 ]
19+ [" FROM" , " from" , 1 , 9 ]
20+ [" LITERAL" , " my_table" , 1 , 14 ]
21+ [" WHERE" , " where" , 1 , 23 ]
22+ [" LITERAL" , " foo" , 1 , 29 ]
23+ [" OPERATOR" , " =" , 1 , 33 ]
24+ [" NUMBER" , " 1" , 1 , 35 ]
25+ [" MATH_MULTI" , " *" , 1 , 37 ]
26+ [" NUMBER" , " 2" , 1 , 39 ]
27+ [" EOF" , " " , 1 , 40 ]
2828 ]
2929
3030
3131 it " eats sub selects" , ->
3232 tokens = lexer .tokenize (" select * from (select * from my_table) t" )
3333 tokens .should .eql [
34- [" SELECT" , " select" , 1 ]
35- [" STAR" , " *" , 1 ]
36- [" FROM" , " from" , 1 ]
37- [ ' LEFT_PAREN' , ' (' , 1 ]
38- [ ' SELECT' , ' select' , 1 ]
39- [ ' STAR' , ' *' , 1 ]
40- [ ' FROM' , ' from' , 1 ]
41- [ ' LITERAL' , ' my_table' , 1 ]
42- [ ' RIGHT_PAREN' , ' )' , 1 ]
43- [" LITERAL" , " t" , 1 ]
44- [" EOF" , " " , 1 ]
34+ [" SELECT" , " select" , 1 , 0 ]
35+ [" STAR" , " *" , 1 , 7 ]
36+ [" FROM" , " from" , 1 , 9 ]
37+ [ ' LEFT_PAREN' , ' (' , 1 , 14 ]
38+ [ ' SELECT' , ' select' , 1 , 15 ]
39+ [ ' STAR' , ' *' , 1 , 22 ]
40+ [ ' FROM' , ' from' , 1 , 24 ]
41+ [ ' LITERAL' , ' my_table' , 1 , 29 ]
42+ [ ' RIGHT_PAREN' , ' )' , 1 , 37 ]
43+ [" LITERAL" , " t" , 1 , 39 ]
44+ [" EOF" , " " , 1 , 40 ]
4545 ]
4646
4747 it " eats joins" , ->
4848 tokens = lexer .tokenize (" select * from a join b on a.id = b.id" )
4949 tokens .should .eql [
50- [" SELECT" , " select" , 1 ]
51- [" STAR" , " *" , 1 ]
52- [" FROM" , " from" , 1 ]
53- [ ' LITERAL' , ' a' , 1 ]
54- [ ' JOIN' , ' join' , 1 ]
55- [ ' LITERAL' , ' b' , 1 ]
56- [ ' ON' , ' on' , 1 ]
57- [ ' LITERAL' , ' a' , 1 ]
58- [ ' DOT' , ' .' , 1 ]
59- [ ' LITERAL' , ' id' , 1 ]
60- [ ' OPERATOR' , ' =' , 1 ]
61- [ ' LITERAL' , ' b' , 1 ]
62- [ ' DOT' , ' .' , 1 ]
63- [ ' LITERAL' , ' id' , 1 ]
64- [" EOF" , " " , 1 ]
50+ [" SELECT" , " select" , 1 , 0 ]
51+ [" STAR" , " *" , 1 , 7 ]
52+ [" FROM" , " from" , 1 , 9 ]
53+ [ ' LITERAL' , ' a' , 1 , 14 ]
54+ [ ' JOIN' , ' join' , 1 , 16 ]
55+ [ ' LITERAL' , ' b' , 1 , 21 ]
56+ [ ' ON' , ' on' , 1 , 23 ]
57+ [ ' LITERAL' , ' a' , 1 , 26 ]
58+ [ ' DOT' , ' .' , 1 , 27 ]
59+ [ ' LITERAL' , ' id' , 1 , 28 ]
60+ [ ' OPERATOR' , ' =' , 1 , 31 ]
61+ [ ' LITERAL' , ' b' , 1 , 33 ]
62+ [ ' DOT' , ' .' , 1 , 34 ]
63+ [ ' LITERAL' , ' id' , 1 , 35 ]
64+ [" EOF" , " " , 1 , 37 ]
6565 ]
66+
67+ it " eats case when" , ->
68+ tokens = lexer .tokenize (" select case when foo = 'a' then a when foo = 'b' then b else c end from table" )
69+ tokens .should .eql [
70+ [' SELECT' , ' select' , 1 , 0 ]
71+ [' CASE' , ' case' , 1 , 7 ]
72+ [' WHEN' , ' when' , 1 , 12 ]
73+ [' LITERAL' , ' foo' , 1 , 17 ]
74+ [' OPERATOR' , ' =' , 1 , 21 ]
75+ [' STRING' , ' a' , 1 , 23 ]
76+ [' THEN' , ' then' , 1 , 27 ]
77+ [' LITERAL' , ' a' , 1 , 32 ]
78+ [' WHEN' , ' when' , 1 , 34 ]
79+ [' LITERAL' , ' foo' , 1 , 39 ]
80+ [' OPERATOR' , ' =' , 1 , 43 ]
81+ [' STRING' , ' b' , 1 , 45 ]
82+ [' THEN' , ' then' , 1 , 49 ]
83+ [' LITERAL' , ' b' , 1 , 54 ]
84+ [' ELSE' , ' else' , 1 , 56 ]
85+ [' LITERAL' , ' c' , 1 , 61 ]
86+ [' END' , ' end' , 1 , 63 ]
87+ [' FROM' , " from" , 1 , 67 ]
88+ [' LITERAL' , ' table' , 1 , 72 ]
89+ [' EOF' , ' ' , 1 , 77 ]
90+ ]
0 commit comments