Skip to content

Commit b4c71d5

Browse files
authored
Create/drop index for knowledge base (#21)
* adding drop knowledge base index query * adding create knowledge base index query * adding tests
1 parent 8cc4d69 commit b4c71d5

File tree

3 files changed

+84
-2
lines changed

3 files changed

+84
-2
lines changed

mindsdb_sql_parser/ast/mindsdb/knowledge_base.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,3 +105,45 @@ def to_tree(self, *args, level=0, **kwargs):
105105
def get_string(self, *args, **kwargs):
106106
out_str = f'DROP KNOWLEDGE_BASE {"IF EXISTS " if self.if_exists else ""}{self.name.to_string()}'
107107
return out_str
108+
109+
class CreateKnowledgeBaseIndex(ASTNode):
110+
"""
111+
Create a new index in the knowledge base
112+
"""
113+
def __init__(self, name, *args, **kwargs):
114+
"""
115+
Args:
116+
name: Identifier -- name of the knowledge base
117+
"""
118+
super().__init__(*args, **kwargs)
119+
self.name = name
120+
121+
def to_tree(self, *args, level=0, **kwargs):
122+
ind = indent(level)
123+
out_str = f"{ind}CreateKnowledgeBaseIndex(name={self.name.to_string()})"
124+
return out_str
125+
126+
def get_string(self, *args, **kwargs):
127+
out_str = f'CREATE INDEX ON KNOWLEDGE_BASE {self.name.to_string()}'
128+
return out_str
129+
130+
class DropKnowledgeBaseIndex(ASTNode):
131+
"""
132+
Delete an index in the knowledge base
133+
"""
134+
def __init__(self, name, *args, **kwargs):
135+
"""
136+
Args:
137+
name: Identifier -- name of the knowledge base
138+
"""
139+
super().__init__(*args, **kwargs)
140+
self.name = name
141+
142+
def to_tree(self, *args, level=0, **kwargs):
143+
ind = indent(level)
144+
out_str = f"{ind}DropKnowledgeBaseIndex(name={self.name.to_string()})"
145+
return out_str
146+
147+
def get_string(self, *args, **kwargs):
148+
out_str = f'DROP INDEX ON KNOWLEDGE_BASE {self.name.to_string()}'
149+
return out_str

mindsdb_sql_parser/parser.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@
1616
from mindsdb_sql_parser.ast.mindsdb.trigger import CreateTrigger, DropTrigger
1717
from mindsdb_sql_parser.ast.mindsdb.latest import Latest
1818
from mindsdb_sql_parser.ast.mindsdb.evaluate import Evaluate
19-
from mindsdb_sql_parser.ast.mindsdb.knowledge_base import CreateKnowledgeBase, DropKnowledgeBase
19+
from mindsdb_sql_parser.ast.mindsdb.knowledge_base import CreateKnowledgeBase, DropKnowledgeBase, \
20+
CreateKnowledgeBaseIndex, DropKnowledgeBaseIndex
2021
from mindsdb_sql_parser.ast.mindsdb.skills import CreateSkill, DropSkill, UpdateSkill
2122
from mindsdb_sql_parser.exceptions import ParsingException
2223
from mindsdb_sql_parser.ast.mindsdb.retrain_predictor import RetrainPredictor
@@ -93,7 +94,9 @@ class MindsDBParser(Parser):
9394
'update_skill',
9495
'create_agent',
9596
'drop_agent',
96-
'update_agent'
97+
'update_agent',
98+
'create_index',
99+
'drop_index',
97100
)
98101
def query(self, p):
99102
return p[0]
@@ -134,6 +137,14 @@ def create_kb(self, p):
134137
if_not_exists=if_not_exists
135138
)
136139

140+
@_('CREATE INDEX ON KNOWLEDGE_BASE identifier')
141+
def create_index(self, p):
142+
return CreateKnowledgeBaseIndex(name=p.identifier)
143+
144+
@_('DROP INDEX ON KNOWLEDGE_BASE identifier')
145+
def drop_index(self, p):
146+
return DropKnowledgeBaseIndex(name=p.identifier)
147+
137148
@_('DROP KNOWLEDGE_BASE if_exists_or_empty identifier')
138149
def drop_kb(self, p):
139150
return DropKnowledgeBase(name=p.identifier, if_exists=p.if_exists_or_empty)
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
from mindsdb_sql_parser import parse_sql
2+
from mindsdb_sql_parser.ast.mindsdb.knowledge_base import CreateKnowledgeBaseIndex, DropKnowledgeBaseIndex
3+
from mindsdb_sql_parser.ast import *
4+
5+
class TestKB:
6+
7+
def test_create_knowledge_base_index(self):
8+
# create without select
9+
10+
sql = """CREATE INDEX ON KNOWLEDGE_BASE my_kb"""
11+
ast = parse_sql(sql)
12+
print(ast)
13+
expected_ast = CreateKnowledgeBaseIndex(
14+
name=Identifier('my_kb'),
15+
)
16+
assert str(ast).lower() == sql.lower()
17+
assert ast.to_tree() == expected_ast.to_tree()
18+
19+
def test_drop_knowledge_base_index(self):
20+
# create without select
21+
22+
sql = """DROP INDEX ON KNOWLEDGE_BASE my_kb"""
23+
ast = parse_sql(sql)
24+
print(ast)
25+
expected_ast = DropKnowledgeBaseIndex(
26+
name=Identifier('my_kb'),
27+
)
28+
assert ast.to_tree() == expected_ast.to_tree()
29+

0 commit comments

Comments
 (0)