Skip to content

Commit c31c3ba

Browse files
pydannyAudrey Roy Greenfeld
andcommitted
Move to using apsw best practices
Co-authored-by: Audrey Roy Greenfeld <arg@answer.ai>
1 parent f3a6045 commit c31c3ba

File tree

2 files changed

+15
-20
lines changed

2 files changed

+15
-20
lines changed

sqlite_minutils/db.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
import apsw.ext
1313
import apsw.bestpractice
1414

15-
# apsw.bestpractice.apply(apsw.bestpractice.connection_enable_foreign_keys)
15+
apsw.bestpractice.apply(apsw.bestpractice.recommended)
1616

1717
try: from sqlite_dump import iterdump
1818
except ImportError: iterdump = None
@@ -269,6 +269,7 @@ def __init__(
269269
self._registered_functions: set = set()
270270
self.use_counts_table = use_counts_table
271271
self.strict = strict
272+
# self.execute('PRAGMA foreign_keys=on;')
272273

273274

274275
def close(self):
@@ -1723,15 +1724,15 @@ def transform(
17231724
]
17241725
try:
17251726
if pragma_foreign_keys_was_on:
1726-
self.db.execute("PRAGMA foreign_keys=0;")
1727+
self.db.execute("PRAGMA foreign_keys=off;")
17271728
for sql in sqls:
17281729
self.db.execute(sql)
17291730
# Run the foreign_key_check before we commit
17301731
if pragma_foreign_keys_was_on:
17311732
self.db.execute("PRAGMA foreign_key_check;")
17321733
finally:
17331734
if pragma_foreign_keys_was_on:
1734-
self.db.execute("PRAGMA foreign_keys=1;")
1735+
self.db.execute("PRAGMA foreign_keys=on;")
17351736
return self
17361737

17371738
def transform_sql(

tests/test_transform.py

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from sqlite_minutils.utils import OperationalError
33
from sqlite3 import IntegrityError
44
import pytest
5+
import apsw
56

67

78
@pytest.mark.parametrize(
@@ -119,12 +120,12 @@ def tracer(sql, params):
119120
dogs.transform(**params)
120121
# If use_pragma_foreign_keys, check that we did the right thing
121122
if use_pragma_foreign_keys:
122-
assert ("PRAGMA foreign_keys=0;", None) in captured
123+
assert ("PRAGMA foreign_keys=off;", None) in captured
123124
assert captured[-2] == ("PRAGMA foreign_key_check;", None)
124-
assert captured[-1] == ("PRAGMA foreign_keys=1;", None)
125+
assert captured[-1] == ("PRAGMA foreign_keys=on;", None)
125126
else:
126-
assert ("PRAGMA foreign_keys=0;", None) not in captured
127-
assert ("PRAGMA foreign_keys=1;", None) not in captured
127+
assert ("PRAGMA foreign_keys=off;", None) not in captured
128+
assert ("PRAGMA foreign_keys=on;", None) not in captured
128129

129130

130131
@pytest.mark.parametrize(
@@ -172,32 +173,25 @@ def tracer(sql, params):
172173
),
173174
],
174175
)
175-
@pytest.mark.parametrize("use_pragma_foreign_keys", [False, True])
176176
def test_transform_sql_table_with_no_primary_key(
177-
fresh_db, params, expected_sql, use_pragma_foreign_keys
177+
fresh_db, params, expected_sql
178178
):
179179
captured = []
180180

181181
def tracer(sql, params):
182182
return captured.append((sql, params))
183183

184184
dogs = fresh_db["dogs"]
185-
if use_pragma_foreign_keys:
186-
fresh_db.conn.execute("PRAGMA foreign_keys=ON")
187185
dogs.insert({"id": 1, "name": "Cleo", "age": "5"})
188186
sql = dogs.transform_sql(**{**params, **{"tmp_suffix": "suffix"}})
189187
assert sql == expected_sql
190188
# Check that .transform() runs without exceptions:
191189
with fresh_db.tracer(tracer):
192190
dogs.transform(**params)
193-
# If use_pragma_foreign_keys, check that we did the right thing
194-
if use_pragma_foreign_keys:
195-
assert ("PRAGMA foreign_keys=0;", None) in captured
196-
assert captured[-2] == ("PRAGMA foreign_key_check;", None)
197-
assert captured[-1] == ("PRAGMA foreign_keys=1;", None)
198-
else:
199-
assert ("PRAGMA foreign_keys=0;", None) not in captured
200-
assert ("PRAGMA foreign_keys=1;", None) not in captured
191+
# We always use foreign keys
192+
assert ("PRAGMA foreign_keys=off;", None) in captured
193+
assert captured[-2] == ("PRAGMA foreign_key_check;", None)
194+
assert captured[-1] == ("PRAGMA foreign_keys=on;", None)
201195

202196

203197
def test_transform_sql_with_no_primary_key_to_primary_key_of_id(fresh_db):
@@ -392,7 +386,7 @@ def test_transform_verify_foreign_keys(fresh_db):
392386
try:
393387
fresh_db["authors"].transform(rename={"id": "id2"})
394388
fresh_db.commit()
395-
except IntegrityError:
389+
except apsw.ConstraintError:
396390
fresh_db.rollback()
397391

398392
# This should have rolled us back

0 commit comments

Comments
 (0)