Skip to content

Commit 78e1382

Browse files
authored
Merge pull request #50 from pankaj-bind/fix-issue-49
Fix: Standardize parameter case handling in parser
2 parents 1c4d3ef + 7a0b568 commit 78e1382

File tree

4 files changed

+93
-6
lines changed

4 files changed

+93
-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,
@@ -201,12 +201,12 @@ def drop_agent(self, p):
201201
@_('UPDATE AGENT identifier SET kw_parameter_list')
202202
@_('ALTER AGENT identifier USING kw_parameter_list')
203203
def update_agent(self, p):
204-
return UpdateAgent(name=p.identifier, updated_params=p.kw_parameter_list)
204+
return UpdateAgent(name=p.identifier, updated_params={k.lower(): v for k, v in p.kw_parameter_list.items()})
205205

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

211211
database = Identifier(params.pop('database'))
212212
model_param = params.pop('model', None)
@@ -225,7 +225,7 @@ def create_chat_bot(self, p):
225225

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

230230
@_('DROP CHATBOT identifier')
231231
def drop_chat_bot(self, p):

tests/test_mindsdb/test_agents.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,3 +70,32 @@ def test_drop_agent(self):
7070
# Parse again after rendering to catch problems with rendering.
7171
ast = parse_sql(str(ast))
7272
assert str(ast) == str(expected_ast)
73+
74+
def test_create_agent_case_handling(self):
75+
sql = """
76+
CREATE AGENT my_agent
77+
USING
78+
MoDeL = 'my_model',
79+
SkIlLs = ['skill1', 'skill2']
80+
"""
81+
ast = parse_sql(sql)
82+
expected_ast = CreateAgent(
83+
name=Identifier('my_agent'),
84+
model='my_model',
85+
params={'skills': ['skill1', 'skill2']}
86+
)
87+
assert ast.to_tree() == expected_ast.to_tree()
88+
89+
def test_update_agent_case_handling(self):
90+
sql = """
91+
UPDATE AGENT my_agent
92+
SET
93+
MoDeL = 'new_model',
94+
SkIlLs = ['new_skill1', 'new_skill2']
95+
"""
96+
ast = parse_sql(sql)
97+
expected_ast = UpdateAgent(
98+
name=Identifier('my_agent'),
99+
updated_params={'model': 'new_model', 'skills': ['new_skill1', 'new_skill2']}
100+
)
101+
assert ast.to_tree() == expected_ast.to_tree()

tests/test_mindsdb/test_chatbots.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,3 +78,33 @@ def test_drop_chatbot(self):
7878
)
7979
assert str(ast) == str(expected_ast)
8080
assert ast.to_tree() == expected_ast.to_tree()
81+
82+
def test_create_chatbot_case_handling(self):
83+
sql = """
84+
CREATE CHATBOT my_chatbot
85+
USING
86+
DaTaBaSe = 'my_db',
87+
MoDeL = 'my_model',
88+
AgEnT = 'my_agent'
89+
"""
90+
ast = parse_sql(sql)
91+
expected_ast = CreateChatBot(
92+
name=Identifier('my_chatbot'),
93+
database=Identifier('my_db'),
94+
model=Identifier('my_model'),
95+
agent=Identifier('my_agent')
96+
)
97+
assert ast.to_tree() == expected_ast.to_tree()
98+
99+
def test_update_chatbot_case_handling(self):
100+
sql = """
101+
UPDATE CHATBOT my_chatbot
102+
SET
103+
MoDeL = 'new_model'
104+
"""
105+
ast = parse_sql(sql)
106+
expected_ast = UpdateChatBot(
107+
name=Identifier('my_chatbot'),
108+
updated_params={'model': 'new_model'}
109+
)
110+
assert ast.to_tree() == expected_ast.to_tree()

tests/test_mindsdb/test_skills.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,3 +60,31 @@ def test_drop_skill(self):
6060
# Parse again after rendering to catch problems with rendering.
6161
ast = parse_sql(str(ast))
6262
assert str(ast) == str(expected_ast)
63+
64+
def test_create_skill_case_handling(self):
65+
sql = """
66+
CREATE SKILL my_skill
67+
USING
68+
TyPe = 'knowledge_base',
69+
SoUrCe = 'my_knowledge_base'
70+
"""
71+
ast = parse_sql(sql)
72+
expected_ast = CreateSkill(
73+
name=Identifier('my_skill'),
74+
type='knowledge_base',
75+
params={'source': 'my_knowledge_base'}
76+
)
77+
assert ast.to_tree() == expected_ast.to_tree()
78+
79+
def test_update_skill_case_handling(self):
80+
sql = """
81+
UPDATE SKILL my_skill
82+
SET
83+
SoUrCe = 'new_source'
84+
"""
85+
ast = parse_sql(sql)
86+
expected_ast = UpdateSkill(
87+
name=Identifier('my_skill'),
88+
updated_params={'source': 'new_source'}
89+
)
90+
assert ast.to_tree() == expected_ast.to_tree()

0 commit comments

Comments
 (0)