@@ -681,6 +681,18 @@ def test_in_tuple(self):
681681 assert ast .to_tree () == expected_ast .to_tree ()
682682 assert str (ast ) == str (expected_ast )
683683
684+ sql = "SELECT col FROM tab WHERE col in (1)"
685+ ast = parse_sql (sql )
686+ expected_ast = Select (targets = [Identifier (parts = ['col' ])],
687+ from_table = Identifier (parts = ['tab' ]),
688+ where = BinaryOperation (op = 'in' ,
689+ args = (
690+ Identifier (parts = ['col' ]),
691+ Tuple (items = [Constant (1 )])
692+ )))
693+ assert ast .to_tree () == expected_ast .to_tree ()
694+ assert str (ast ) == str (expected_ast )
695+
684696 def test_count_distinct (self ):
685697 sql = "SELECT COUNT(DISTINCT survived) AS uniq_survived FROM titanic"
686698 ast = parse_sql (sql )
@@ -1351,4 +1363,27 @@ def test_lateral_join(self):
13511363 )
13521364 ast = parse_sql (query )
13531365 assert str (ast ) == str (expected_ast )
1354- assert ast .to_tree () == expected_ast .to_tree ()
1366+ assert ast .to_tree () == expected_ast .to_tree ()
1367+
1368+ def test_many_conditions (self ):
1369+ sql = """
1370+ select * from kb where
1371+ (content like 'white' and size='small')
1372+ or (content = 'big')
1373+ """
1374+ ast = parse_sql (sql )
1375+ expected_ast = Select (
1376+ targets = [Star ()],
1377+ from_table = Identifier (parts = ['kb' ]),
1378+ where = BinaryOperation (op = 'or' , args = [
1379+ BinaryOperation (op = 'and' , args = [
1380+ BinaryOperation (op = 'like' , args = [Identifier ('content' ), Constant ('white' )]),
1381+ BinaryOperation (op = '=' , args = [Identifier ('size' ), Constant ('small' )]),
1382+ ], parentheses = True ),
1383+ BinaryOperation (op = '=' , args = [Identifier ('content' ), Constant ('big' )], parentheses = True ),
1384+ ]
1385+ )
1386+ )
1387+ assert ast .to_tree () == expected_ast .to_tree ()
1388+ assert str (ast ) == str (expected_ast )
1389+
0 commit comments