FTS detection treats table names as LIKE patterns

Aperta Adatta ai principianti
#930 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 3 giorni

@IlyaKhalafi ci sta già lavorando.

Dal 6/11/2026.

  • #931 di @IlyaKhalafi — aperta

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
82/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
python, sqlite
Ambito
database

Direzione di ricerca

Inizia leggendo detect_fts() e i pattern LIKE che usa per trovare le tabelle FTS; l’issue indica nella gestione dei caratteri jolly nei nomi delle tabelle la causa. Riproduci il problema con l’esempio fornito book_titles e bookXtitles, poi verifica che un test di regressione copra sia _ sia %. Il lavoro è completato quando viene rilevata book_titles_fts e la ricerca di incorrect non restituisce righe.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

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.

Lingua principale
Python
Stelle
2.2k
Fork
215
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di simonw/sqlite-utils

Tutte le issue di simonw/sqlite-utils

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.