@@ -96,10 +96,8 @@ def parse_expression(tokens: List[Token]) -> Tuple[Expression, List[Token]]:
9696 stack .append (NotExpression (expression = expression ))
9797 elif next_token .value .upper () == "TRUE" :
9898 stack .append (TrueExpression ())
99- tokens = tokens [1 :]
10099 elif next_token .value .upper () == "FALSE" :
101100 stack .append (FalseExpression ())
102- tokens = tokens [1 :]
103101 elif next_token .value .upper () == "IS" :
104102 left = stack .pop ()
105103 right , tokens = parse_expression (tokens )
@@ -112,7 +110,7 @@ def parse_expression(tokens: List[Token]) -> Tuple[Expression, List[Token]]:
112110 stack .append (NullExpression ())
113111 else :
114112 tokens = [next_token ] + tokens
115- break
113+ break
116114 if next_token .type == "int" :
117115 stack .append (IntExpression (value = int (next_token .value )))
118116 elif next_token .type == "float" :
@@ -240,21 +238,34 @@ def parse_group_by(tokens: List[Token]) -> Tuple[Optional[GroupBy], List[Token]]
240238 group_fields .append (exp )
241239 return GroupBy (fields = group_fields ), tokens
242240
241+
243242def parse_join (tokens : List [Token ]) -> Tuple [Optional [Join ], List [Token ]]:
244243 if len (tokens ) == 0 :
245244 return None , tokens
246-
245+
247246 # JOIN
248- if tokens [0 ].type == "keyword" and tokens [0 ].value .upper () in ["INNER JOIN" , "JOIN" ]:
247+ if tokens [0 ].type == "keyword" and tokens [0 ].value .upper () in [
248+ "INNER JOIN" ,
249+ "JOIN" ,
250+ ]:
249251 join_type = "INNER"
250252 tokens = tokens [1 :]
251- elif tokens [0 ].type == "keyword" and tokens [0 ].value .upper () in ["LEFT JOIN" , "LEFT OUTER JOIN" ]:
253+ elif tokens [0 ].type == "keyword" and tokens [0 ].value .upper () in [
254+ "LEFT JOIN" ,
255+ "LEFT OUTER JOIN" ,
256+ ]:
252257 join_type = "LEFT"
253258 tokens = tokens [1 :]
254- elif tokens [0 ].type == "keyword" and tokens [0 ].value .upper () in ["RIGHT JOIN" , "RIGHT OUTER JOIN" ]:
259+ elif tokens [0 ].type == "keyword" and tokens [0 ].value .upper () in [
260+ "RIGHT JOIN" ,
261+ "RIGHT OUTER JOIN" ,
262+ ]:
255263 join_type = "RIGHT"
256264 tokens = tokens [1 :]
257- elif tokens [0 ].type == "keyword" and tokens [0 ].value .upper () in ["FULL JOIN" , "FULL OUTER JOIN" ]:
265+ elif tokens [0 ].type == "keyword" and tokens [0 ].value .upper () in [
266+ "FULL JOIN" ,
267+ "FULL OUTER JOIN" ,
268+ ]:
258269 join_type = "FULL"
259270 tokens = tokens [1 :]
260271 elif tokens [0 ].type == "keyword" and tokens [0 ].value .upper () in ["CROSS JOIN" ]:
@@ -265,12 +276,12 @@ def parse_join(tokens: List[Token]) -> Tuple[Optional[Join], List[Token]]:
265276 tokens = tokens [1 :]
266277 else :
267278 return None , tokens
268-
279+
269280 # Table
270281 table = tokens [0 ]
271282 assert table .type == "name" , f"Expected table name, got { table } "
272283 tokens = tokens [1 :]
273-
284+
274285 # AS
275286 if (
276287 len (tokens ) > 0
@@ -283,7 +294,7 @@ def parse_join(tokens: List[Token]) -> Tuple[Optional[Join], List[Token]]:
283294 tokens = tokens [1 :]
284295 else :
285296 alias_token = None
286-
297+
287298 # ON
288299 if (
289300 len (tokens ) > 0
@@ -334,7 +345,7 @@ def parse_from(tokens: List[Token]) -> Tuple[Optional[From], List[Token]]:
334345 if j is None :
335346 break
336347 join .append (j )
337-
348+
338349 if len (join ) == 0 :
339350 return From (table = table .value ), tokens
340351 else :
0 commit comments