Improve search.backends.sqlite retry logic

Retry with table creation should fail if it is attempted for a second
time.
This commit is contained in:
Ross Williams 2023-10-10 10:30:52 -04:00
parent 8fe5faf4d0
commit e0f8eeeaa7

View file

@ -129,14 +129,16 @@ def index(snapshot_id: str, texts: List[str]):
"INSERT OR REPLACE INTO" "INSERT OR REPLACE INTO"
f" {table}(rowid, {column}) VALUES ({SQLITE_BIND}, {SQLITE_BIND})", f" {table}(rowid, {column}) VALUES ({SQLITE_BIND}, {SQLITE_BIND})",
[rowid, text]) [rowid, text])
# All statements succeeded; break retry loop # All statements succeeded; return
break return
except Exception as e: except Exception as e:
if str(e).startswith(f"no such table:"): if str(e).startswith("no such table:") and retries > 0:
_create_tables() _create_tables()
else: else:
raise raise
raise RuntimeError("Failed to create tables for SQLite FTS5 search")
@enforce_types @enforce_types
def search(text: str) -> List[str]: def search(text: str) -> List[str]:
table = _escape_sqlite3_identifier(FTS_TABLE) table = _escape_sqlite3_identifier(FTS_TABLE)