Skip to content

Commit 09058bd

Browse files
authored
Merge branch 'mindsdb:main' into fix-issue-49
2 parents dab2a4d + 7dbd454 commit 09058bd

File tree

4 files changed

+52
-3
lines changed

4 files changed

+52
-3
lines changed

mindsdb_sql_parser/ast/select/operation.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,19 @@
11
from mindsdb_sql_parser.ast.base import ASTNode
22
from mindsdb_sql_parser.exceptions import ParsingException
33
from mindsdb_sql_parser.utils import indent
4-
4+
from mindsdb_sql_parser.ast.select.tuple import Tuple
55

66
class Operation(ASTNode):
77
def __init__(self, op, args, *args_, **kwargs):
88
super().__init__(*args_, **kwargs)
99

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

1419
def assert_arguments(self):

mindsdb_sql_parser/parser.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,7 @@ def drop_agent(self, p):
199199
return DropAgent(name=p.identifier, if_exists=p.if_exists_or_empty)
200200

201201
@_('UPDATE AGENT identifier SET kw_parameter_list')
202+
@_('ALTER AGENT identifier USING kw_parameter_list')
202203
def update_agent(self, p):
203204
return UpdateAgent(name=p.identifier, updated_params={k.lower(): v for k, v in p.kw_parameter_list.items()})
204205

tests/test_base_sql/test_select_structure.py

Lines changed: 36 additions & 1 deletion
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)
@@ -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+

tests/test_mindsdb/test_agents.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,14 @@ def test_update_agent(self):
4444
assert str(ast) == str(expected_ast)
4545
assert ast.to_tree() == expected_ast.to_tree()
4646

47+
sql = '''
48+
alter agent my_agent
49+
USING
50+
model = 'new_model',
51+
skills = ['new_skill1', 'new_skill2']
52+
'''
53+
ast = parse_sql(sql)
54+
4755
# Parse again after rendering to catch problems with rendering.
4856
ast = parse_sql(str(ast))
4957
assert str(ast) == str(expected_ast)

0 commit comments

Comments
 (0)