Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

Request: SQLite IN-list chunking still exceeds the statement-wide parameter limit

Đã đóng
#1,993 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 1 ngày

Chưa có ai nhận issue này.

Đánh giá

Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức phù hợp với người mới
45/100
Loại issue
Lỗi
Độ rõ ràng
Khá rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
sqlite, typescript
Lĩnh vực
database

Hướng nghiên cứu

Start by tracing the SQLite persistence compiler from adapter.loadSubset and reproduce the issue with the Node SQLite harness using a variable limit of 999. Inspect how composed predicates contribute bound parameters, including index expressions and partial-index predicates. Done means each executed statement stays within SQLite’s parameter limit while preserving typed comparisons, bigint precision, and literal arrays in index definitions.

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

Mô tả

Problem

The SQLite persistence compiler splits large IN arrays into smaller clauses joined with OR, but keeps all their bound parameters in one SQL statement.

SQLite's bound-parameter limit applies to the entire statement. Splitting the clauses therefore does not prevent the limit from being exceeded.

Multiple smaller IN predicates can also exceed the limit when composed into one query.

Versions

  • @tanstack/db-sqlite-persistence-core: 0.4.0
  • @tanstack/browser-db-sqlite-persistence: 0.2.25
  • @tanstack/db: 0.11.0

The same compilation strategy is present in upstream main inspected on October 2, 2026.

Reproduction

Use a SQLite-backed adapter with the connection's variable limit set to 999. For example, our Node SQLite harness uses:

new DatabaseSync(':memory:', {
  limits: { variableNumber: 999 },
})

After initializing a collection, request:

import { IR } from '@tanstack/db'

const ids = Array.from({ length: 1_000 }, (_, i) => `issue-${i}`)

await adapter.loadSubset(collectionId, {
  where: new IR.Func('or', [
    new IR.Func('in', [
      new IR.PropRef(['issueId']),
      new IR.Value(ids),
    ]),
    new IR.Func('in', [
      new IR.PropRef(['relatedIssueId']),
      new IR.Value(ids),
    ]),
  ]),
})

Source inspection shows that this produces approximately 2,000 list parameters in one statement, despite the internal chunking. That exceeds the configured limit.

Expected behavior

Bound the total number of parameters in each executed statement, including parameters from composed predicates.

Downstream workaround

We bind each list as one JSON array and compile runtime predicates as:

field IN (SELECT value FROM json_each(?))

An alternative implementation would also be welcome. Important compatibility requirements include preserving typed comparisons and signed 64-bit bigint precision.

Index expressions and partial-index predicates need separate handling: SQLite does not permit these subqueries in index definitions.

Existing downstream tests cover 50,582 IDs across two fields, bigint values beyond JavaScript's safe-integer range, and literal arrays in index definitions. They were not rerun for this source-inspection report.

#810 concerns Electric HTTP request-size limits; this report concerns local SQLite statement parameters.

Ngôn ngữ chính
TypeScript
Star
3.9k
Fork
268
Merge trung bình
1 ngày 3 giờ
Pull request đã merge (30 ngày)
193

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 TanStack/db

Tất cả issue của TanStack/db

Issue tương tự

Thêm issue về TypeScript

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.