mirror of
https://github.com/simonw/sqlite-utils.git
synced 2026-09-24 19:04:12 +02:00
Use sqlean if available in environment (#560)
Closes #559 Closes #235 Refs https://github.com/simonw/llm/issues/60 - Uses `sqlean` in place of `sqlite3` if `sqlean.py` is installed - Uses `sqlite-dump` if available and `conn.iterdump()` does not exist - New `with db.ensure_autocommit_off()` method for ensuring autocommit is off, used by `enable_wal()` and `disable_wal()`.
This commit is contained in:
parent
2747257a33
commit
f5c63088e1
12 changed files with 136 additions and 19 deletions
|
|
@ -14,7 +14,9 @@ def db(fresh_db):
|
|||
def test_analyze_whole_database(db):
|
||||
assert set(db.table_names()) == {"one_index", "two_indexes"}
|
||||
db.analyze()
|
||||
assert set(db.table_names()) == {"one_index", "two_indexes", "sqlite_stat1"}
|
||||
assert set(db.table_names()).issuperset(
|
||||
{"one_index", "two_indexes", "sqlite_stat1"}
|
||||
)
|
||||
assert list(db["sqlite_stat1"].rows) == [
|
||||
{"tbl": "two_indexes", "idx": "idx_two_indexes_species", "stat": "1 1"},
|
||||
{"tbl": "two_indexes", "idx": "idx_two_indexes_name", "stat": "1 1"},
|
||||
|
|
@ -24,13 +26,15 @@ def test_analyze_whole_database(db):
|
|||
|
||||
@pytest.mark.parametrize("method", ("db_method_with_name", "table_method"))
|
||||
def test_analyze_one_table(db, method):
|
||||
assert set(db.table_names()) == {"one_index", "two_indexes"}
|
||||
assert set(db.table_names()).issuperset({"one_index", "two_indexes"})
|
||||
if method == "db_method_with_name":
|
||||
db.analyze("one_index")
|
||||
elif method == "table_method":
|
||||
db["one_index"].analyze()
|
||||
|
||||
assert set(db.table_names()) == {"one_index", "two_indexes", "sqlite_stat1"}
|
||||
assert set(db.table_names()).issuperset(
|
||||
{"one_index", "two_indexes", "sqlite_stat1"}
|
||||
)
|
||||
assert list(db["sqlite_stat1"].rows) == [
|
||||
{"tbl": "one_index", "idx": "idx_one_index_name", "stat": "1 1"}
|
||||
]
|
||||
|
|
@ -39,7 +43,9 @@ def test_analyze_one_table(db, method):
|
|||
def test_analyze_index_by_name(db):
|
||||
assert set(db.table_names()) == {"one_index", "two_indexes"}
|
||||
db.analyze("idx_two_indexes_species")
|
||||
assert set(db.table_names()) == {"one_index", "two_indexes", "sqlite_stat1"}
|
||||
assert set(db.table_names()).issuperset(
|
||||
{"one_index", "two_indexes", "sqlite_stat1"}
|
||||
)
|
||||
assert list(db["sqlite_stat1"].rows) == [
|
||||
{"tbl": "two_indexes", "idx": "idx_two_indexes_species", "stat": "1 1"},
|
||||
]
|
||||
|
|
|
|||
|
|
@ -135,7 +135,8 @@ def test_analyze_column(db_to_analyze, column, extra_kwargs, expected):
|
|||
def db_to_analyze_path(db_to_analyze, tmpdir):
|
||||
path = str(tmpdir / "test.db")
|
||||
db = sqlite3.connect(path)
|
||||
db.executescript("\n".join(db_to_analyze.conn.iterdump()))
|
||||
sql = "\n".join(db_to_analyze.iterdump())
|
||||
db.executescript(sql)
|
||||
return path
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1429,7 +1429,7 @@ def test_enable_wal():
|
|||
db = Database(dbname)
|
||||
db["t"].create({"pk": int}, pk="pk")
|
||||
assert db.journal_mode == "delete"
|
||||
result = runner.invoke(cli.cli, ["enable-wal"] + dbs)
|
||||
result = runner.invoke(cli.cli, ["enable-wal"] + dbs, catch_exceptions=False)
|
||||
assert 0 == result.exit_code
|
||||
for dbname in dbs:
|
||||
db = Database(dbname)
|
||||
|
|
|
|||
|
|
@ -164,9 +164,9 @@ def test_memory_dump(extra_args):
|
|||
input="id,name\n1,Cleo\n2,Bants",
|
||||
)
|
||||
assert result.exit_code == 0
|
||||
assert result.output.strip() == (
|
||||
expected = (
|
||||
"BEGIN TRANSACTION;\n"
|
||||
'CREATE TABLE "stdin" (\n'
|
||||
'CREATE TABLE IF NOT EXISTS "stdin" (\n'
|
||||
" [id] INTEGER,\n"
|
||||
" [name] TEXT\n"
|
||||
");\n"
|
||||
|
|
@ -176,6 +176,9 @@ def test_memory_dump(extra_args):
|
|||
"CREATE VIEW t AS select * from [stdin];\n"
|
||||
"COMMIT;"
|
||||
)
|
||||
# Using sqlite-dump it won't have IF NOT EXISTS
|
||||
expected_alternative = expected.replace("IF NOT EXISTS ", "")
|
||||
assert result.output.strip() in (expected, expected_alternative)
|
||||
|
||||
|
||||
@pytest.mark.parametrize("extra_args", ([], ["select 1"]))
|
||||
|
|
|
|||
|
|
@ -6,6 +6,12 @@ from sqlite_utils.cli import cli
|
|||
from sqlite_utils.db import Database
|
||||
from sqlite_utils.utils import find_spatialite, sqlite3
|
||||
|
||||
try:
|
||||
import sqlean
|
||||
except ImportError:
|
||||
sqlean = None
|
||||
|
||||
|
||||
pytestmark = [
|
||||
pytest.mark.skipif(
|
||||
not find_spatialite(), reason="Could not find SpatiaLite extension"
|
||||
|
|
@ -14,6 +20,9 @@ pytestmark = [
|
|||
not hasattr(sqlite3.Connection, "enable_load_extension"),
|
||||
reason="sqlite3.Connection missing enable_load_extension",
|
||||
),
|
||||
pytest.mark.skipif(
|
||||
sqlean is not None, reason="sqlean.py is not compatible with SpatiaLite"
|
||||
),
|
||||
]
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue