.optimize() no longer cleans up _docsize

This isn't necessary any more since the new .rebuild_fts()
method can achieve the same thing.

Refs #155, #153
This commit is contained in:
Simon Willison 2020-09-08 15:18:12 -07:00
commit 64799df78b
4 changed files with 22 additions and 38 deletions

View file

@ -1,4 +1,5 @@
import pytest
from sqlite_utils import Database
from sqlite_utils.utils import sqlite3
search_records = [
@ -199,3 +200,20 @@ def test_rebuild_fts_invalid(fresh_db, invalid_table):
# Raise OperationalError on invalid table
with pytest.raises(sqlite3.OperationalError):
fresh_db[invalid_table].rebuild_fts()
@pytest.mark.parametrize("fts_version", ["FTS4", "FTS5"])
def test_rebuild_removes_junk_docsize_rows(tmpdir, fts_version):
# Recreating https://github.com/simonw/sqlite-utils/issues/149
path = tmpdir / "test.db"
db = Database(str(path), recursive_triggers=False)
licenses = [{"key": "apache2", "name": "Apache 2"}, {"key": "bsd", "name": "BSD"}]
db["licenses"].insert_all(licenses, pk="key", replace=True)
db["licenses"].enable_fts(["name"], create_triggers=True, fts_version=fts_version)
assert db["licenses_fts_docsize"].count == 2
# Bug: insert with replace increases the number of rows in _docsize:
db["licenses"].insert_all(licenses, pk="key", replace=True)
assert db["licenses_fts_docsize"].count == 4
# rebuild should fix this:
db["licenses_fts"].rebuild_fts()
assert db["licenses_fts_docsize"].count == 2

View file

@ -1,20 +0,0 @@
import pytest
from sqlite_utils import Database
import sqlite3
@pytest.mark.parametrize("fts_version", ["FTS4", "FTS5"])
def test_optimizes_removes_junk_docsize_rows(tmpdir, fts_version):
# Recreating https://github.com/simonw/sqlite-utils/issues/149
path = tmpdir / "test.db"
db = Database(str(path), recursive_triggers=False)
licenses = [{"key": "apache2", "name": "Apache 2"}, {"key": "bsd", "name": "BSD"}]
db["licenses"].insert_all(licenses, pk="key", replace=True)
db["licenses"].enable_fts(["name"], create_triggers=True, fts_version=fts_version)
assert db["licenses_fts_docsize"].count == 2
# Bug: insert with replace increases the number of rows in _docsize:
db["licenses"].insert_all(licenses, pk="key", replace=True)
assert db["licenses_fts_docsize"].count == 4
# Optimize should fix this:
db["licenses_fts"].optimize()
assert db["licenses_fts_docsize"].count == 2