Skip to content

Commit 90d6335

Browse files
authored
Merge pull request #18 from mindsdb/kb-vars
Json can have variable in value
2 parents 0698724 + 0c80a4b commit 90d6335

File tree

5 files changed

+10
-15
lines changed

5 files changed

+10
-15
lines changed

mindsdb_sql_parser/__about__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
__title__ = 'mindsdb_sql_parser'
22
__package_name__ = 'mindsdb_sql_parser'
3-
__version__ = '0.6.1'
3+
__version__ = '0.7.0'
44
__description__ = "Mindsdb SQL parser"
55
__email__ = "[email protected]"
66
__author__ = 'MindsDB Inc'

mindsdb_sql_parser/ast/variable.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,5 @@ def to_tree(self, *args, level=0, **kwargs):
1515
def get_string(self, *args, **kwargs):
1616
return ('@@' if self.is_system_var else '@') + f'{str(self.value)}'
1717

18+
def __repr__(self):
19+
return self.get_string()

mindsdb_sql_parser/lexer.py

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -350,11 +350,7 @@ def DQUOTE_STRING(self, t):
350350
def ignore_newline(self, t):
351351
self.lineno += len(t.value)
352352

353-
@_(r'@[a-zA-Z_.$]+',
354-
r"@'[a-zA-Z_.$][^']*'",
355-
r"@`[a-zA-Z_.$][^`]*`",
356-
r'@"[a-zA-Z_.$][^"]*"'
357-
)
353+
@_(r'@(?:([a-zA-Z_$0-9]*[a-zA-Z_$]+[a-zA-Z_$0-9]*)|(?:`([^`]+)`))')
358354
def VARIABLE(self, t):
359355
t.value = t.value.lstrip('@')
360356

@@ -366,11 +362,7 @@ def VARIABLE(self, t):
366362
t.value = t.value.strip('`')
367363
return t
368364

369-
@_(r'@@[a-zA-Z_.$]+',
370-
r"@@'[a-zA-Z_.$][^']*'",
371-
r"@@`[a-zA-Z_.$][^`]*`",
372-
r'@@"[a-zA-Z_.$][^"]*"'
373-
)
365+
@_(r'@@(?:([a-zA-Z_$0-9]*[a-zA-Z_$]+[a-zA-Z_$0-9]*)|(?:`([^`]+)`))')
374366
def SYSTEM_VARIABLE(self, t):
375367
t.value = t.value.lstrip('@')
376368

mindsdb_sql_parser/parser.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1716,7 +1716,7 @@ def json_element_list(self, p):
17161716

17171717
@_('string COLON json_value')
17181718
def json_element(self, p):
1719-
return {p.string:p.json_value}
1719+
return {p.string: p.json_value}
17201720

17211721
# json_array
17221722

@@ -1736,6 +1736,7 @@ def json_array_list(self, p):
17361736
@_('float',
17371737
'string',
17381738
'integer',
1739+
'variable',
17391740
'NULL',
17401741
'TRUE',
17411742
'FALSE',

tests/test_mindsdb/test_knowledgebase.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from mindsdb_sql_parser import parse_sql
1+
from mindsdb_sql_parser import parse_sql, Variable
22
from mindsdb_sql_parser.ast.mindsdb.knowledge_base import (
33
CreateKnowledgeBase,
44
DropKnowledgeBase,
@@ -174,7 +174,7 @@ def test_create_knowledge_base(self):
174174
MODEL = mindsdb.my_embedding_model,
175175
STORAGE = my_vector_database.some_table,
176176
some_param = 'some value',
177-
other_param = 'other value'
177+
other_param = {'key': @var1}
178178
"""
179179
ast = parse_sql(sql)
180180
expected_ast = CreateKnowledgeBase(
@@ -183,7 +183,7 @@ def test_create_knowledge_base(self):
183183
model=Identifier(parts=["mindsdb", "my_embedding_model"]),
184184
storage=Identifier(parts=["my_vector_database", "some_table"]),
185185
from_select=None,
186-
params={"some_param": "some value", "other_param": "other value"},
186+
params={"some_param": "some value", "other_param": {'key': Variable('var1')}},
187187
)
188188
assert ast == expected_ast
189189

0 commit comments

Comments
 (0)