Skip to content

Commit 2733854

Browse files
committed
parameters for kb index
1 parent e79159b commit 2733854

File tree

3 files changed

+39
-3
lines changed

3 files changed

+39
-3
lines changed

mindsdb_sql_parser/ast/mindsdb/knowledge_base.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -160,21 +160,34 @@ class CreateKnowledgeBaseIndex(ASTNode):
160160
"""
161161
Create a new index in the knowledge base
162162
"""
163-
def __init__(self, name, *args, **kwargs):
163+
def __init__(self, name, params=None, *args, **kwargs):
164164
"""
165165
Args:
166166
name: Identifier -- name of the knowledge base
167167
"""
168168
super().__init__(*args, **kwargs)
169169
self.name = name
170+
if params is None:
171+
params = {}
172+
self.params = params
170173

171174
def to_tree(self, *args, level=0, **kwargs):
172175
ind = indent(level)
173-
out_str = f"{ind}CreateKnowledgeBaseIndex(name={self.name.to_string()})"
176+
params_str = ""
177+
if self.params:
178+
params_str = f",\n{indent(level+1)}params={repr(self.params)}\n{ind}"
179+
180+
out_str = f"{ind}CreateKnowledgeBaseIndex(name={self.name.to_string()}{params_str})"
174181
return out_str
175182

176183
def get_string(self, *args, **kwargs):
177184
out_str = f'CREATE INDEX ON KNOWLEDGE_BASE {self.name.to_string()}'
185+
if self.params:
186+
params_ar = [
187+
f"{k}={repr(v)}"
188+
for k, v in self.params.items()
189+
]
190+
out_str += f" WITH ({', '.join(params_ar)})"
178191
return out_str
179192

180193

mindsdb_sql_parser/parser.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,8 +157,12 @@ def alter_kb(self, p):
157157
)
158158

159159
@_('CREATE INDEX ON KNOWLEDGE_BASE identifier')
160+
@_('CREATE INDEX ON KNOWLEDGE_BASE identifier WITH LPAREN kw_parameter_list RPAREN')
160161
def create_index(self, p):
161-
return CreateKnowledgeBaseIndex(name=p.identifier)
162+
params = None
163+
if hasattr(p, 'kw_parameter_list'):
164+
params = p.kw_parameter_list
165+
return CreateKnowledgeBaseIndex(name=p.identifier, params=params)
162166

163167
@_('DROP INDEX ON KNOWLEDGE_BASE identifier')
164168
def drop_index(self, p):

tests/test_mindsdb/test_knowledgebase_index.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from mindsdb_sql_parser.ast.mindsdb.knowledge_base import CreateKnowledgeBaseIndex, DropKnowledgeBaseIndex
33
from mindsdb_sql_parser.ast import *
44

5+
56
class TestKB:
67

78
def test_create_knowledge_base_index(self):
@@ -16,6 +17,24 @@ def test_create_knowledge_base_index(self):
1617
assert str(ast).lower() == sql.lower()
1718
assert ast.to_tree() == expected_ast.to_tree()
1819

20+
def test_create_knowledge_base_index_with_params(self):
21+
# create without select
22+
23+
sql = "CREATE INDEX ON KNOWLEDGE_BASE my_kb WITH (type='ivf', nlist=1000)"
24+
25+
ast = parse_sql(sql)
26+
print(ast)
27+
expected_ast = CreateKnowledgeBaseIndex(
28+
name=Identifier("my_kb"),
29+
params={
30+
"type": "ivf",
31+
"nlist": 1000,
32+
}
33+
)
34+
assert str(ast) == sql
35+
assert str(ast) == str(expected_ast)
36+
assert ast.to_tree() == expected_ast.to_tree()
37+
1938
def test_drop_knowledge_base_index(self):
2039
# create without select
2140

0 commit comments

Comments
 (0)