enable_fts() exhausts iterator columns before populating the index

Đang mở Phù hợp với người mới
#902 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 3 ngày

@syahra712 đang làm issue này rồi.

Từ ngày 11/10/2026.

  • #903 của @syahra712 — đang mở

Đánh giá

Độ khó
2/5
Thời gian dự kiến
1-3 giờ
Mức phù hợp với người mới
83/100
Loại issue
Lỗi
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
python, sqlite
Lĩnh vực
databases

Hướng nghiên cứu

Đọc phần triển khai của Table.enable_fts() và populate_fts(), bao gồm cả việc xây dựng trigger, sau đó chạy cách tái hiện trong issue trên cơ sở dữ liệu trong bộ nhớ. Kiểm tra cách iterable columns được dùng để tạo và nạp dữ liệu vào bảng FTS cũng như xây dựng trigger. Hoàn thành khi một iterator chỉ dùng được một lần hoạt động với cả FTS4 và FTS5, có hoặc không có trigger, và đầu vào dạng danh sách vẫn hoạt động.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

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.

Ngôn ngữ chính
Python
Star
2.2k
Fork
215
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của simonw/sqlite-utils

Tất cả issue của simonw/sqlite-utils

Issue tương tự

Thêm issue về Python

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.