Skip to content

Commit 9a6bf96

Browse files
asg017claude
andcommitted
Extract shared Python test utilities into tests/helpers.py
Deduplicates exec(), vec0_shadow_table_contents(), _f32(), _i64(), and _int8() helpers that were copied across six test files. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 206fbc2 commit 9a6bf96

7 files changed

Lines changed: 56 additions & 192 deletions

tests/helpers.py

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
import sqlite3
2+
import struct
3+
from collections import OrderedDict
4+
5+
6+
def _f32(list):
7+
return struct.pack("%sf" % len(list), *list)
8+
9+
10+
def _i64(list):
11+
return struct.pack("%sq" % len(list), *list)
12+
13+
14+
def _int8(list):
15+
return struct.pack("%sb" % len(list), *list)
16+
17+
18+
def exec(db, sql, parameters=[]):
19+
try:
20+
rows = db.execute(sql, parameters).fetchall()
21+
except (sqlite3.OperationalError, sqlite3.DatabaseError) as e:
22+
return {
23+
"error": e.__class__.__name__,
24+
"message": str(e),
25+
}
26+
a = []
27+
for row in rows:
28+
o = OrderedDict()
29+
for k in row.keys():
30+
o[k] = row[k]
31+
a.append(o)
32+
result = OrderedDict()
33+
result["sql"] = sql
34+
result["rows"] = a
35+
return result
36+
37+
38+
def vec0_shadow_table_contents(db, v, skip_info=True):
39+
shadow_tables = [
40+
row[0]
41+
for row in db.execute(
42+
"select name from sqlite_master where name like ? order by 1", [f"{v}_%"]
43+
).fetchall()
44+
]
45+
o = {}
46+
for shadow_table in shadow_tables:
47+
if skip_info and shadow_table.endswith("_info"):
48+
continue
49+
o[shadow_table] = exec(db, f"select * from {shadow_table}")
50+
return o

tests/test-auxiliary.py

Lines changed: 1 addition & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import sqlite3
2-
from collections import OrderedDict
2+
from helpers import exec, vec0_shadow_table_contents
33

44

55
def test_constructor_limit(db, snapshot):
@@ -126,36 +126,3 @@ def test_knn(db, snapshot):
126126
) == snapshot(name="illegal KNN w/ aux")
127127

128128

129-
def exec(db, sql, parameters=[]):
130-
try:
131-
rows = db.execute(sql, parameters).fetchall()
132-
except (sqlite3.OperationalError, sqlite3.DatabaseError) as e:
133-
return {
134-
"error": e.__class__.__name__,
135-
"message": str(e),
136-
}
137-
a = []
138-
for row in rows:
139-
o = OrderedDict()
140-
for k in row.keys():
141-
o[k] = row[k]
142-
a.append(o)
143-
result = OrderedDict()
144-
result["sql"] = sql
145-
result["rows"] = a
146-
return result
147-
148-
149-
def vec0_shadow_table_contents(db, v):
150-
shadow_tables = [
151-
row[0]
152-
for row in db.execute(
153-
"select name from sqlite_master where name like ? order by 1", [f"{v}_%"]
154-
).fetchall()
155-
]
156-
o = {}
157-
for shadow_table in shadow_tables:
158-
if shadow_table.endswith("_info"):
159-
continue
160-
o[shadow_table] = exec(db, f"select * from {shadow_table}")
161-
return o

tests/test-general.py

Lines changed: 1 addition & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import sqlite3
2-
from collections import OrderedDict
32
import pytest
3+
from helpers import exec
44

55

66
@pytest.mark.skipif(
@@ -27,34 +27,3 @@ def test_info(db, snapshot):
2727
assert exec(db, "select key, typeof(value) from v_info order by 1") == snapshot()
2828

2929

30-
def exec(db, sql, parameters=[]):
31-
try:
32-
rows = db.execute(sql, parameters).fetchall()
33-
except (sqlite3.OperationalError, sqlite3.DatabaseError) as e:
34-
return {
35-
"error": e.__class__.__name__,
36-
"message": str(e),
37-
}
38-
a = []
39-
for row in rows:
40-
o = OrderedDict()
41-
for k in row.keys():
42-
o[k] = row[k]
43-
a.append(o)
44-
result = OrderedDict()
45-
result["sql"] = sql
46-
result["rows"] = a
47-
return result
48-
49-
50-
def vec0_shadow_table_contents(db, v):
51-
shadow_tables = [
52-
row[0]
53-
for row in db.execute(
54-
"select name from sqlite_master where name like ? order by 1", [f"{v}_%"]
55-
).fetchall()
56-
]
57-
o = {}
58-
for shadow_table in shadow_tables:
59-
o[shadow_table] = exec(db, f"select * from {shadow_table}")
60-
return o

tests/test-insert-delete.py

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,7 @@
11
import sqlite3
22
import struct
3-
from collections import OrderedDict
43
import pytest
5-
6-
7-
def _f32(list):
8-
return struct.pack("%sf" % len(list), *list)
9-
10-
11-
def exec(db, sql, parameters=[]):
12-
try:
13-
rows = db.execute(sql, parameters).fetchall()
14-
except (sqlite3.OperationalError, sqlite3.DatabaseError) as e:
15-
return {
16-
"error": e.__class__.__name__,
17-
"message": str(e),
18-
}
19-
a = []
20-
for row in rows:
21-
o = OrderedDict()
22-
for k in row.keys():
23-
o[k] = row[k]
24-
a.append(o)
25-
result = OrderedDict()
26-
result["sql"] = sql
27-
result["rows"] = a
28-
return result
4+
from helpers import _f32, exec
295

306

317
def test_insert_creates_chunks_and_vectors(db, snapshot):

tests/test-knn-distance-constraints.py

Lines changed: 1 addition & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import sqlite3
2-
from collections import OrderedDict
2+
from helpers import exec
33

44

55
def test_normal(db, snapshot):
@@ -47,36 +47,3 @@ def __repr__(self) -> str:
4747
return repr()
4848

4949

50-
def exec(db, sql, parameters=[]):
51-
try:
52-
rows = db.execute(sql, parameters).fetchall()
53-
except (sqlite3.OperationalError, sqlite3.DatabaseError) as e:
54-
return {
55-
"error": e.__class__.__name__,
56-
"message": str(e),
57-
}
58-
a = []
59-
for row in rows:
60-
o = OrderedDict()
61-
for k in row.keys():
62-
o[k] = row[k]
63-
a.append(o)
64-
result = OrderedDict()
65-
result["sql"] = sql
66-
result["rows"] = a
67-
return result
68-
69-
70-
def vec0_shadow_table_contents(db, v):
71-
shadow_tables = [
72-
row[0]
73-
for row in db.execute(
74-
"select name from sqlite_master where name like ? order by 1", [f"{v}_%"]
75-
).fetchall()
76-
]
77-
o = {}
78-
for shadow_table in shadow_tables:
79-
if shadow_table.endswith("_info"):
80-
continue
81-
o[shadow_table] = exec(db, f"select * from {shadow_table}")
82-
return o

tests/test-metadata.py

Lines changed: 1 addition & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import sqlite3
33
from collections import OrderedDict
44
import json
5+
from helpers import exec, vec0_shadow_table_contents
56

67

78
def test_constructor_limit(db, snapshot):
@@ -594,36 +595,3 @@ def _auth(op, p1, p2, p3, p4):
594595
return _auth
595596

596597

597-
def exec(db, sql, parameters=[]):
598-
try:
599-
rows = db.execute(sql, parameters).fetchall()
600-
except (sqlite3.OperationalError, sqlite3.DatabaseError) as e:
601-
return {
602-
"error": e.__class__.__name__,
603-
"message": str(e),
604-
}
605-
a = []
606-
for row in rows:
607-
o = OrderedDict()
608-
for k in row.keys():
609-
o[k] = row[k]
610-
a.append(o)
611-
result = OrderedDict()
612-
result["sql"] = sql
613-
result["rows"] = a
614-
return result
615-
616-
617-
def vec0_shadow_table_contents(db, v):
618-
shadow_tables = [
619-
row[0]
620-
for row in db.execute(
621-
"select name from sqlite_master where name like ? order by 1", [f"{v}_%"]
622-
).fetchall()
623-
]
624-
o = {}
625-
for shadow_table in shadow_tables:
626-
if shadow_table.endswith("_info"):
627-
continue
628-
o[shadow_table] = exec(db, f"select * from {shadow_table}")
629-
return o

tests/test-partition-keys.py

Lines changed: 1 addition & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import sqlite3
2-
from collections import OrderedDict
2+
from helpers import exec, vec0_shadow_table_contents
33

44

55
def test_constructor_limit(db, snapshot):
@@ -82,36 +82,3 @@ def __repr__(self) -> str:
8282
return repr()
8383

8484

85-
def exec(db, sql, parameters=[]):
86-
try:
87-
rows = db.execute(sql, parameters).fetchall()
88-
except (sqlite3.OperationalError, sqlite3.DatabaseError) as e:
89-
return {
90-
"error": e.__class__.__name__,
91-
"message": str(e),
92-
}
93-
a = []
94-
for row in rows:
95-
o = OrderedDict()
96-
for k in row.keys():
97-
o[k] = row[k]
98-
a.append(o)
99-
result = OrderedDict()
100-
result["sql"] = sql
101-
result["rows"] = a
102-
return result
103-
104-
105-
def vec0_shadow_table_contents(db, v):
106-
shadow_tables = [
107-
row[0]
108-
for row in db.execute(
109-
"select name from sqlite_master where name like ? order by 1", [f"{v}_%"]
110-
).fetchall()
111-
]
112-
o = {}
113-
for shadow_table in shadow_tables:
114-
if shadow_table.endswith("_info"):
115-
continue
116-
o[shadow_table] = exec(db, f"select * from {shadow_table}")
117-
return o

0 commit comments

Comments
 (0)