enable_fts() exhausts iterator columns before populating the index

Abierto Apto para principiantes
#902 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 3 días

@syahra712 ya está trabajando en esto.

Desde el 11/10/2026.

  • #903 de @syahra712 — abierto

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
83/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
python, sqlite
Área
databases

Línea de trabajo

Lee la implementación de Table.enable_fts() y populate_fts(), incluida la construcción de triggers, y luego ejecuta la reproducción del issue con una base de datos en memoria. Comprueba cómo se usa el iterable columns para crear y rellenar la tabla FTS y construir triggers. Se considera terminado cuando un iterador de un solo uso funciona con FTS4 y FTS5, con y sin triggers, y la entrada como lista sigue funcionando.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

Problem

Table.enable_fts() accepts columns: Iterable[str], but passing a one-shot iterator raises sqlite3.OperationalError: near ")": syntax error. The same columns supplied as a list work. The FTS virtual table has already been created when the error occurs, so a retry without replace=True also encounters an existing table.

Reproduced locally against main 9c66bafa52ae23d40499c74b0db3b635bcddb876, Python 3.12.14, using an in-memory database:

from sqlite_utils import Database

db = Database(memory=True)
table = db["notes"].insert({"text": "hello"})
table.enable_fts(iter(["text"]))
# sqlite3.OperationalError: near ")": syntax error

Replacing iter(["text"]) with ["text"] succeeds and list(table.search("hello")) returns the record. I reproduced the failure with both FTS4 and FTS5, with and without create_triggers=True.

The iterable is consumed while building CREATE VIRTUAL TABLE, then passed to populate_fts(). Trigger construction also reuses it. Materializing the columns once would preserve the declared iterable contract.

AI assistance: OpenAI Codex inspected the code and ran this reproduction. No live service, user database, or external model call was used.

Lenguaje dominante
Python
Estrellas
2.2k
Forks
215
Métricas de merge de PR
Sin PR fusionados en 30 d

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de simonw/sqlite-utils

Todos los issues de simonw/sqlite-utils

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.