FTS detection treats table names as LIKE patterns

Offen Anfängerfreundlich
#930 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Maintainer antworten meist innerhalb von 3 Tagen

@IlyaKhalafi arbeitet bereits daran.

Seit 06.11.2026.

  • #931 von @IlyaKhalafi — offen

Bewertung

Schwierigkeit
2/5
Geschätzter Aufwand
1-3 Stunden
Anfängerfreundlichkeit
82/100
Issue-Typ
Bug
Klarheit
Klar beschrieben
Aktivitätsstatus
Aktiv
Tech-Stack
python, sqlite
Bereich
database

Rechercherichtung

Lies zuerst detect_fts() und die LIKE-Muster, die es zum Finden von FTS-Tabellen verwendet; das Issue nennt die Behandlung von Platzhaltern in Tabellennamen als Ursache. Reproduziere das Problem mit dem bereitgestellten Beispiel book_titles und bookXtitles und prüfe dann, ob ein Regressionstest sowohl _ als auch % abdeckt. Fertig ist die Arbeit, wenn book_titles_fts erkannt wird und die Suche nach incorrect keine Zeilen zurückgibt.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

When a table name contains _ or %, detect_fts() treats those characters as SQL LIKE wildcards. It can select another table's FTS index and use its matching row IDs against the requested table.

from sqlite_utils import Database

db = Database(memory=True)
db["bookXtitles"].insert({"title": "incorrect"}).enable_fts(["title"])
db["book_titles"].insert({"title": "correct"}).enable_fts(["title"])

print(db["book_titles"].detect_fts())
print(list(db["book_titles"].search("incorrect")))

Current main prints bookXtitles_fts and returns the row containing correct, even though that row does not match the search. It should detect book_titles_fts and return no rows for this query.

The same issue occurs with % in the table name. The table-name portion of the LIKE patterns needs escaping. The quote delimiters added for #434 prevent prefix matches but leave wildcard characters active.

Reproduced on Python 3.12 and SQLite 3.53.1 using current main.

Vorherrschende Sprache
Python
Sterne
2.2k
Forks
215
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Entwicklungsumgebung

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus simonw/sqlite-utils

Alle Issues in simonw/sqlite-utils

Ähnliche Issues

Weitere Issues zu Python

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.