@@ -3,107 +3,108 @@ package parser
33import (
44 "testing"
55
6+ "github.com/ajitpratap0/GoSQLX/pkg/models"
67 "github.com/ajitpratap0/GoSQLX/pkg/sql/token"
78)
89
910var (
10- // Simple SELECT query tokens
11+ // Simple SELECT query tokens - with ModelType for fast int comparison path
1112 simpleSelectTokens = []token.Token {
12- {Type : "SELECT" , Literal : "SELECT" },
13- {Type : "IDENT" , Literal : "id" },
14- {Type : "," , Literal : "," },
15- {Type : "IDENT" , Literal : "name" },
16- {Type : "FROM" , Literal : "FROM" },
17- {Type : "IDENT" , Literal : "users" },
13+ {Type : "SELECT" , ModelType : models . TokenTypeSelect , Literal : "SELECT" },
14+ {Type : "IDENT" , ModelType : models . TokenTypeIdentifier , Literal : "id" },
15+ {Type : "," , ModelType : models . TokenTypeComma , Literal : "," },
16+ {Type : "IDENT" , ModelType : models . TokenTypeIdentifier , Literal : "name" },
17+ {Type : "FROM" , ModelType : models . TokenTypeFrom , Literal : "FROM" },
18+ {Type : "IDENT" , ModelType : models . TokenTypeIdentifier , Literal : "users" },
1819 }
1920
2021 // Complex SELECT query with JOIN, WHERE, ORDER BY, LIMIT, OFFSET
2122 complexSelectTokens = []token.Token {
22- {Type : "SELECT" , Literal : "SELECT" },
23- {Type : "IDENT" , Literal : "u" },
24- {Type : "." , Literal : "." },
25- {Type : "IDENT" , Literal : "id" },
26- {Type : "," , Literal : "," },
27- {Type : "IDENT" , Literal : "u" },
28- {Type : "." , Literal : "." },
29- {Type : "IDENT" , Literal : "name" },
30- {Type : "," , Literal : "," },
31- {Type : "IDENT" , Literal : "o" },
32- {Type : "." , Literal : "." },
33- {Type : "IDENT" , Literal : "order_date" },
34- {Type : "FROM" , Literal : "FROM" },
35- {Type : "IDENT" , Literal : "users" },
36- {Type : "IDENT" , Literal : "u" },
37- {Type : "JOIN" , Literal : "JOIN" },
38- {Type : "IDENT" , Literal : "orders" },
39- {Type : "IDENT" , Literal : "o" },
40- {Type : "ON" , Literal : "ON" },
41- {Type : "IDENT" , Literal : "u" },
42- {Type : "." , Literal : "." },
43- {Type : "IDENT" , Literal : "id" },
44- {Type : "=" , Literal : "=" },
45- {Type : "IDENT" , Literal : "o" },
46- {Type : "." , Literal : "." },
47- {Type : "IDENT" , Literal : "user_id" },
48- {Type : "WHERE" , Literal : "WHERE" },
49- {Type : "IDENT" , Literal : "u" },
50- {Type : "." , Literal : "." },
51- {Type : "IDENT" , Literal : "active" },
52- {Type : "=" , Literal : "=" },
53- {Type : "TRUE" , Literal : "TRUE" },
54- {Type : "ORDER" , Literal : "ORDER" },
55- {Type : "BY" , Literal : "BY" },
56- {Type : "IDENT" , Literal : "o" },
57- {Type : "." , Literal : "." },
58- {Type : "IDENT" , Literal : "order_date" },
59- {Type : "DESC" , Literal : "DESC" },
60- {Type : "LIMIT" , Literal : "LIMIT" },
61- {Type : "INT" , Literal : "10" },
62- {Type : "OFFSET" , Literal : "OFFSET" },
63- {Type : "INT" , Literal : "20" },
23+ {Type : "SELECT" , ModelType : models . TokenTypeSelect , Literal : "SELECT" },
24+ {Type : "IDENT" , ModelType : models . TokenTypeIdentifier , Literal : "u" },
25+ {Type : "." , ModelType : models . TokenTypePeriod , Literal : "." },
26+ {Type : "IDENT" , ModelType : models . TokenTypeIdentifier , Literal : "id" },
27+ {Type : "," , ModelType : models . TokenTypeComma , Literal : "," },
28+ {Type : "IDENT" , ModelType : models . TokenTypeIdentifier , Literal : "u" },
29+ {Type : "." , ModelType : models . TokenTypePeriod , Literal : "." },
30+ {Type : "IDENT" , ModelType : models . TokenTypeIdentifier , Literal : "name" },
31+ {Type : "," , ModelType : models . TokenTypeComma , Literal : "," },
32+ {Type : "IDENT" , ModelType : models . TokenTypeIdentifier , Literal : "o" },
33+ {Type : "." , ModelType : models . TokenTypePeriod , Literal : "." },
34+ {Type : "IDENT" , ModelType : models . TokenTypeIdentifier , Literal : "order_date" },
35+ {Type : "FROM" , ModelType : models . TokenTypeFrom , Literal : "FROM" },
36+ {Type : "IDENT" , ModelType : models . TokenTypeIdentifier , Literal : "users" },
37+ {Type : "IDENT" , ModelType : models . TokenTypeIdentifier , Literal : "u" },
38+ {Type : "JOIN" , ModelType : models . TokenTypeJoin , Literal : "JOIN" },
39+ {Type : "IDENT" , ModelType : models . TokenTypeIdentifier , Literal : "orders" },
40+ {Type : "IDENT" , ModelType : models . TokenTypeIdentifier , Literal : "o" },
41+ {Type : "ON" , ModelType : models . TokenTypeOn , Literal : "ON" },
42+ {Type : "IDENT" , ModelType : models . TokenTypeIdentifier , Literal : "u" },
43+ {Type : "." , ModelType : models . TokenTypePeriod , Literal : "." },
44+ {Type : "IDENT" , ModelType : models . TokenTypeIdentifier , Literal : "id" },
45+ {Type : "=" , ModelType : models . TokenTypeEq , Literal : "=" },
46+ {Type : "IDENT" , ModelType : models . TokenTypeIdentifier , Literal : "o" },
47+ {Type : "." , ModelType : models . TokenTypePeriod , Literal : "." },
48+ {Type : "IDENT" , ModelType : models . TokenTypeIdentifier , Literal : "user_id" },
49+ {Type : "WHERE" , ModelType : models . TokenTypeWhere , Literal : "WHERE" },
50+ {Type : "IDENT" , ModelType : models . TokenTypeIdentifier , Literal : "u" },
51+ {Type : "." , ModelType : models . TokenTypePeriod , Literal : "." },
52+ {Type : "IDENT" , ModelType : models . TokenTypeIdentifier , Literal : "active" },
53+ {Type : "=" , ModelType : models . TokenTypeEq , Literal : "=" },
54+ {Type : "TRUE" , ModelType : models . TokenTypeTrue , Literal : "TRUE" },
55+ {Type : "ORDER" , ModelType : models . TokenTypeOrder , Literal : "ORDER" },
56+ {Type : "BY" , ModelType : models . TokenTypeBy , Literal : "BY" },
57+ {Type : "IDENT" , ModelType : models . TokenTypeIdentifier , Literal : "o" },
58+ {Type : "." , ModelType : models . TokenTypePeriod , Literal : "." },
59+ {Type : "IDENT" , ModelType : models . TokenTypeIdentifier , Literal : "order_date" },
60+ {Type : "DESC" , ModelType : models . TokenTypeDesc , Literal : "DESC" },
61+ {Type : "LIMIT" , ModelType : models . TokenTypeLimit , Literal : "LIMIT" },
62+ {Type : "INT" , ModelType : models . TokenTypeNumber , Literal : "10" },
63+ {Type : "OFFSET" , ModelType : models . TokenTypeOffset , Literal : "OFFSET" },
64+ {Type : "INT" , ModelType : models . TokenTypeNumber , Literal : "20" },
6465 }
6566
6667 // INSERT query tokens
6768 insertTokens = []token.Token {
68- {Type : "INSERT" , Literal : "INSERT" },
69- {Type : "INTO" , Literal : "INTO" },
70- {Type : "IDENT" , Literal : "users" },
71- {Type : "(" , Literal : "(" },
72- {Type : "IDENT" , Literal : "name" },
73- {Type : "," , Literal : "," },
74- {Type : "IDENT" , Literal : "email" },
75- {Type : ")" , Literal : ")" },
76- {Type : "VALUES" , Literal : "VALUES" },
77- {Type : "(" , Literal : "(" },
78- {Type : "STRING" , Literal : "John" },
79- {Type : "," , Literal : "," },
80- {Type : "STRING" , Literal : "john@example.com" },
81- {Type : ")" , Literal : ")" },
69+ {Type : "INSERT" , ModelType : models . TokenTypeInsert , Literal : "INSERT" },
70+ {Type : "INTO" , ModelType : models . TokenTypeInto , Literal : "INTO" },
71+ {Type : "IDENT" , ModelType : models . TokenTypeIdentifier , Literal : "users" },
72+ {Type : "(" , ModelType : models . TokenTypeLeftParen , Literal : "(" },
73+ {Type : "IDENT" , ModelType : models . TokenTypeIdentifier , Literal : "name" },
74+ {Type : "," , ModelType : models . TokenTypeComma , Literal : "," },
75+ {Type : "IDENT" , ModelType : models . TokenTypeIdentifier , Literal : "email" },
76+ {Type : ")" , ModelType : models . TokenTypeRightParen , Literal : ")" },
77+ {Type : "VALUES" , ModelType : models . TokenTypeValues , Literal : "VALUES" },
78+ {Type : "(" , ModelType : models . TokenTypeLeftParen , Literal : "(" },
79+ {Type : "STRING" , ModelType : models . TokenTypeString , Literal : "John" },
80+ {Type : "," , ModelType : models . TokenTypeComma , Literal : "," },
81+ {Type : "STRING" , ModelType : models . TokenTypeString , Literal : "john@example.com" },
82+ {Type : ")" , ModelType : models . TokenTypeRightParen , Literal : ")" },
8283 }
8384
8485 // UPDATE query tokens
8586 updateTokens = []token.Token {
86- {Type : "UPDATE" , Literal : "UPDATE" },
87- {Type : "IDENT" , Literal : "users" },
88- {Type : "SET" , Literal : "SET" },
89- {Type : "IDENT" , Literal : "active" },
90- {Type : "=" , Literal : "=" },
91- {Type : "FALSE" , Literal : "FALSE" },
92- {Type : "WHERE" , Literal : "WHERE" },
93- {Type : "IDENT" , Literal : "last_login" },
94- {Type : "<" , Literal : "<" },
95- {Type : "STRING" , Literal : "2024-01-01" },
87+ {Type : "UPDATE" , ModelType : models . TokenTypeUpdate , Literal : "UPDATE" },
88+ {Type : "IDENT" , ModelType : models . TokenTypeIdentifier , Literal : "users" },
89+ {Type : "SET" , ModelType : models . TokenTypeSet , Literal : "SET" },
90+ {Type : "IDENT" , ModelType : models . TokenTypeIdentifier , Literal : "active" },
91+ {Type : "=" , ModelType : models . TokenTypeEq , Literal : "=" },
92+ {Type : "FALSE" , ModelType : models . TokenTypeFalse , Literal : "FALSE" },
93+ {Type : "WHERE" , ModelType : models . TokenTypeWhere , Literal : "WHERE" },
94+ {Type : "IDENT" , ModelType : models . TokenTypeIdentifier , Literal : "last_login" },
95+ {Type : "<" , ModelType : models . TokenTypeLt , Literal : "<" },
96+ {Type : "STRING" , ModelType : models . TokenTypeString , Literal : "2024-01-01" },
9697 }
9798
9899 // DELETE query tokens
99100 deleteTokens = []token.Token {
100- {Type : "DELETE" , Literal : "DELETE" },
101- {Type : "FROM" , Literal : "FROM" },
102- {Type : "IDENT" , Literal : "users" },
103- {Type : "WHERE" , Literal : "WHERE" },
104- {Type : "IDENT" , Literal : "active" },
105- {Type : "=" , Literal : "=" },
106- {Type : "FALSE" , Literal : "FALSE" },
101+ {Type : "DELETE" , ModelType : models . TokenTypeDelete , Literal : "DELETE" },
102+ {Type : "FROM" , ModelType : models . TokenTypeFrom , Literal : "FROM" },
103+ {Type : "IDENT" , ModelType : models . TokenTypeIdentifier , Literal : "users" },
104+ {Type : "WHERE" , ModelType : models . TokenTypeWhere , Literal : "WHERE" },
105+ {Type : "IDENT" , ModelType : models . TokenTypeIdentifier , Literal : "active" },
106+ {Type : "=" , ModelType : models . TokenTypeEq , Literal : "=" },
107+ {Type : "FALSE" , ModelType : models . TokenTypeFalse , Literal : "FALSE" },
107108 }
108109)
109110
0 commit comments