Skip to content

Commit af04e56

Browse files
committed
fix query with single value in parens
1 parent 4aa5641 commit af04e56

File tree

2 files changed

+19
-1
lines changed

2 files changed

+19
-1
lines changed

mindsdb_sql_parser/ast/select/operation.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,15 @@
66
class Operation(ASTNode):
77
def __init__(self, op, args, *args_, **kwargs):
88
super().__init__(*args_, **kwargs)
9+
from mindsdb_sql_parser.ast import Tuple
910

1011
self.op = ' '.join(op.lower().split())
11-
self.args = list(args)
12+
self.args = []
13+
for item in args:
14+
if isinstance(item, ASTNode) and item.parentheses:
15+
item.parentheses = False
16+
item = Tuple([item])
17+
self.args.append(item)
1218
self.assert_arguments()
1319

1420
def assert_arguments(self):

tests/test_base_sql/test_select_structure.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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)

0 commit comments

Comments
 (0)