Skip to content

Commit e110feb

Browse files
committed
added create_index support to sqlite
1 parent 367d717 commit e110feb

File tree

2 files changed

+34
-6
lines changed

2 files changed

+34
-6
lines changed

piccolo/query/methods/create_index.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ def column_names(self) -> t.List[str]:
3535
]
3636

3737
@property
38-
def querystrings(self) -> t.Sequence[QueryString]:
38+
def postgres_querystrings(self) -> t.Sequence[QueryString]:
3939
column_names = self.column_names
4040
index_name = self.table._get_index_name(column_names)
4141
tablename = self.table._meta.tablename
@@ -47,3 +47,21 @@ def querystrings(self) -> t.Sequence[QueryString]:
4747
f" ({column_names_str})"
4848
)
4949
]
50+
51+
@property
52+
def sqlite_querystrings(self) -> t.Sequence[QueryString]:
53+
column_names = self.column_names
54+
index_name = self.table._get_index_name(column_names)
55+
tablename = self.table._meta.tablename
56+
57+
method_name = self.method.value
58+
if method_name != "btree":
59+
raise ValueError("SQLite only support btree indexes.")
60+
61+
column_names_str = ", ".join(column_names)
62+
return [
63+
QueryString(
64+
f"CREATE INDEX {index_name} ON {tablename} "
65+
f"({column_names_str})"
66+
)
67+
]

tests/table/test_create_index.py

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,27 @@
1-
from ..base import DBTestCase, postgres_only
1+
from unittest import TestCase
2+
3+
from ..base import DBTestCase
24
from ..example_project.tables import Manager
35

46

5-
@postgres_only
67
class TestCreateIndex(DBTestCase):
78
def test_create_index(self):
89
"""
910
Test single column and multi column indexes
1011
"""
1112
for columns in [[Manager.name], [Manager.id, Manager.name]]:
12-
query = Manager.raw(
13-
"SELECT * FROM pg_indexes WHERE indexname = {}",
14-
Manager._get_index_name([i._meta.name for i in columns]),
13+
14+
index_name = Manager._get_index_name(
15+
[i._meta.name for i in columns]
1516
)
1617

18+
if Manager._meta.db.engine_type == "postgres":
19+
query = Manager.raw(
20+
"SELECT * FROM pg_indexes WHERE indexname = {}", index_name
21+
)
22+
else:
23+
query = Manager.raw(f"PRAGMA index_list(manager)")
24+
1725
Manager.create_index(columns).run_sync()
1826
response = query.run_sync()
1927
self.assertEqual(len(response), 1)
@@ -22,6 +30,8 @@ def test_create_index(self):
2230
response = query.run_sync()
2331
self.assertEqual(len(response), 0)
2432

33+
34+
class TestIndexName(TestCase):
2535
def test_index_name(self):
2636
self.assertEqual(
2737
Manager._get_index_name(["name", "id"]), "manager_name_id"

0 commit comments

Comments
 (0)