Skip to content

Commit dab2a4d

Browse files
committed
Fix: Standardize parameter case handling in parser
1 parent 4aa5641 commit dab2a4d

File tree

2 files changed

+105
-6
lines changed

2 files changed

+105
-6
lines changed

mindsdb_sql_parser/parser.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ def evaluate_kb(self, p):
165165
# -- Skills --
166166
@_('CREATE SKILL if_not_exists_or_empty identifier USING kw_parameter_list')
167167
def create_skill(self, p):
168-
params = p.kw_parameter_list
168+
params = {k.lower(): v for k, v in p.kw_parameter_list.items()}
169169

170170
return CreateSkill(
171171
name=p.identifier,
@@ -180,12 +180,12 @@ def drop_skill(self, p):
180180

181181
@_('UPDATE SKILL identifier SET kw_parameter_list')
182182
def update_skill(self, p):
183-
return UpdateSkill(name=p.identifier, updated_params=p.kw_parameter_list)
183+
return UpdateSkill(name=p.identifier, updated_params={k.lower(): v for k, v in p.kw_parameter_list.items()})
184184

185185
# -- Agent --
186186
@_('CREATE AGENT if_not_exists_or_empty identifier USING kw_parameter_list')
187187
def create_agent(self, p):
188-
params = p.kw_parameter_list
188+
params = {k.lower(): v for k, v in p.kw_parameter_list.items()}
189189

190190
return CreateAgent(
191191
name=p.identifier,
@@ -200,12 +200,12 @@ def drop_agent(self, p):
200200

201201
@_('UPDATE AGENT identifier SET kw_parameter_list')
202202
def update_agent(self, p):
203-
return UpdateAgent(name=p.identifier, updated_params=p.kw_parameter_list)
203+
return UpdateAgent(name=p.identifier, updated_params={k.lower(): v for k, v in p.kw_parameter_list.items()})
204204

205205
# -- ChatBot --
206206
@_('CREATE CHATBOT identifier USING kw_parameter_list')
207207
def create_chat_bot(self, p):
208-
params = p.kw_parameter_list
208+
params = {k.lower(): v for k, v in p.kw_parameter_list.items()}
209209

210210
database = Identifier(params.pop('database'))
211211
model_param = params.pop('model', None)
@@ -224,7 +224,7 @@ def create_chat_bot(self, p):
224224

225225
@_('UPDATE CHATBOT identifier SET kw_parameter_list')
226226
def update_chat_bot(self, p):
227-
return UpdateChatBot(name=p.identifier, updated_params=p.kw_parameter_list)
227+
return UpdateChatBot(name=p.identifier, updated_params={k.lower(): v for k, v in p.kw_parameter_list.items()})
228228

229229
@_('DROP CHATBOT identifier')
230230
def drop_chat_bot(self, p):
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
import pytest
2+
from mindsdb_sql_parser import parse_sql
3+
from mindsdb_sql_parser.ast import Identifier
4+
from mindsdb_sql_parser.ast.mindsdb import (
5+
CreateSkill,
6+
UpdateSkill,
7+
CreateAgent,
8+
UpdateAgent,
9+
CreateChatBot,
10+
UpdateChatBot,
11+
)
12+
13+
class TestParameterCasing:
14+
def test_create_skill_case_handling(self):
15+
sql = """
16+
CREATE SKILL my_skill
17+
USING
18+
TyPe = 'knowledge_base',
19+
SoUrCe = 'my_knowledge_base'
20+
"""
21+
ast = parse_sql(sql)
22+
expected_ast = CreateSkill(
23+
name=Identifier('my_skill'),
24+
type='knowledge_base',
25+
params={'source': 'my_knowledge_base'}
26+
)
27+
assert ast.to_tree() == expected_ast.to_tree()
28+
29+
def test_update_skill_case_handling(self):
30+
sql = """
31+
UPDATE SKILL my_skill
32+
SET
33+
SoUrCe = 'new_source'
34+
"""
35+
ast = parse_sql(sql)
36+
expected_ast = UpdateSkill(
37+
name=Identifier('my_skill'),
38+
updated_params={'source': 'new_source'}
39+
)
40+
assert ast.to_tree() == expected_ast.to_tree()
41+
42+
def test_create_agent_case_handling(self):
43+
sql = """
44+
CREATE AGENT my_agent
45+
USING
46+
MoDeL = 'my_model',
47+
SkIlLs = ['skill1', 'skill2']
48+
"""
49+
ast = parse_sql(sql)
50+
expected_ast = CreateAgent(
51+
name=Identifier('my_agent'),
52+
model='my_model',
53+
params={'skills': ['skill1', 'skill2']}
54+
)
55+
assert ast.to_tree() == expected_ast.to_tree()
56+
57+
def test_update_agent_case_handling(self):
58+
sql = """
59+
UPDATE AGENT my_agent
60+
SET
61+
MoDeL = 'new_model',
62+
SkIlLs = ['new_skill1', 'new_skill2']
63+
"""
64+
ast = parse_sql(sql)
65+
expected_ast = UpdateAgent(
66+
name=Identifier('my_agent'),
67+
updated_params={'model': 'new_model', 'skills': ['new_skill1', 'new_skill2']}
68+
)
69+
assert ast.to_tree() == expected_ast.to_tree()
70+
71+
def test_create_chatbot_case_handling(self):
72+
sql = """
73+
CREATE CHATBOT my_chatbot
74+
USING
75+
DaTaBaSe = 'my_db',
76+
MoDeL = 'my_model',
77+
AgEnT = 'my_agent'
78+
"""
79+
ast = parse_sql(sql)
80+
expected_ast = CreateChatBot(
81+
name=Identifier('my_chatbot'),
82+
database=Identifier('my_db'),
83+
model=Identifier('my_model'),
84+
agent=Identifier('my_agent')
85+
)
86+
assert ast.to_tree() == expected_ast.to_tree()
87+
88+
def test_update_chatbot_case_handling(self):
89+
sql = """
90+
UPDATE CHATBOT my_chatbot
91+
SET
92+
MoDeL = 'new_model'
93+
"""
94+
ast = parse_sql(sql)
95+
expected_ast = UpdateChatBot(
96+
name=Identifier('my_chatbot'),
97+
updated_params={'model': 'new_model'}
98+
)
99+
assert ast.to_tree() == expected_ast.to_tree()

0 commit comments

Comments
 (0)