mirror of
https://github.com/simonw/sqlite-utils.git
synced 2026-07-23 01:14:31 +02:00
Option to add triggers when enabling FTS (#57)
--create-triggers CLI option and create_triggers=True in the Python library * Add an option to create triggers for fts table. * Add cli option for the create-update-trigger. * Add tests for the create-update-trigger option. * Change FTS table escaping to square brackets.
This commit is contained in:
parent
cb70f7d109
commit
405e092d59
4 changed files with 128 additions and 17 deletions
|
|
@ -315,6 +315,7 @@ def test_index_foreign_keys(db_path):
|
|||
db = Database(db_path)
|
||||
assert [] == db["books"].indexes
|
||||
result = CliRunner().invoke(cli.cli, ["index-foreign-keys", db_path])
|
||||
assert 0 == result.exit_code
|
||||
assert [["author_id"], ["author_name_ref"]] == [
|
||||
i.columns for i in db["books"].indexes
|
||||
]
|
||||
|
|
@ -328,6 +329,43 @@ def test_enable_fts(db_path):
|
|||
assert 0 == result.exit_code
|
||||
assert "Gosh_fts" == Database(db_path)["Gosh"].detect_fts()
|
||||
|
||||
# Table names with restricted chars are handled correctly.
|
||||
# colons and dots are restricted characters for table names.
|
||||
Database(db_path)["http://example.com"].create({"c1": str, "c2": str, "c3": str})
|
||||
assert None == Database(db_path)["http://example.com"].detect_fts()
|
||||
result = CliRunner().invoke(
|
||||
cli.cli, ["enable-fts", db_path, "http://example.com", "c1", "--fts4"]
|
||||
)
|
||||
assert 0 == result.exit_code
|
||||
assert (
|
||||
"http://example.com_fts" == Database(db_path)["http://example.com"].detect_fts()
|
||||
)
|
||||
Database(db_path)["http://example.com"].drop()
|
||||
|
||||
|
||||
def test_enable_fts_with_triggers(db_path):
|
||||
Database(db_path)["Gosh"].insert_all([{"c1": "baz"}])
|
||||
exit_code = (
|
||||
CliRunner()
|
||||
.invoke(
|
||||
cli.cli,
|
||||
["enable-fts", db_path, "Gosh", "c1", "--fts4", "--create-triggers"],
|
||||
)
|
||||
.exit_code
|
||||
)
|
||||
assert 0 == exit_code
|
||||
|
||||
def search(q):
|
||||
return (
|
||||
Database(db_path)
|
||||
.conn.execute("select c1 from Gosh_fts where c1 match ?", [q])
|
||||
.fetchall()
|
||||
)
|
||||
|
||||
assert [("baz",)] == search("baz")
|
||||
Database(db_path)["Gosh"].insert_all([{"c1": "martha"}])
|
||||
assert [("martha",)] == search("martha")
|
||||
|
||||
|
||||
def test_populate_fts(db_path):
|
||||
Database(db_path)["Gosh"].insert_all([{"c1": "baz"}])
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue