FTS detection treats table names as LIKE patterns

Aberta Para iniciantes
#930 0 comentários 0 reações 0 responsáveis Ver no GitHub

Mantenedores costumam responder em até 3 dias

@IlyaKhalafi já está trabalhando nisso.

Desde 6/11/2026.

  • #931 de @IlyaKhalafi — aberto

Avaliação

Dificuldade
2/5
Tempo estimado
1-3 horas
Facilidade para iniciantes
82/100
Tipo de issue
Bug
Clareza
Claramente especificada
Status de atividade
Ativa
Stack de tecnologia
python, sqlite
Domínio
database

Direção de pesquisa

Comece lendo detect_fts() e os padrões LIKE que ele usa para encontrar tabelas FTS; a issue identifica o tratamento de curingas em nomes de tabelas como a causa. Reproduza o problema com o exemplo fornecido book_titles e bookXtitles e, em seguida, verifique se há um teste de regressão que cubra tanto _ quanto %. O trabalho estará concluído quando book_titles_fts for detectada e a busca por incorrect não retornar nenhuma linha.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

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.

Linguagem predominante
Python
Estrelas
2.2k
Forks
215
Métricas de merge de PRs
Nenhum PR com merge em 30d

Preparar o ambiente

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de simonw/sqlite-utils

Todas as issues de simonw/sqlite-utils

Issues semelhantes

Mais issues de Python

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.