Skip to content

Require Python >=3.14 and drop apsw dependency - #54

Merged
1yefuwang1 merged 2 commits into
mainfrom
drop-apsw-require-python-3.14
Jun 22, 2026
Merged

Require Python >=3.14 and drop apsw dependency#54
1yefuwang1 merged 2 commits into
mainfrom
drop-apsw-require-python-3.14

Conversation

@1yefuwang1

Copy link
Copy Markdown
Owner

Summary

Python 3.14 bundles SQLite 3.50.4 (>= 3.38), which satisfies vectorlite's metadata (rowid) filter requirement. The stdlib sqlite3 module can now be used everywhere, so the apsw dependency is no longer needed and is dropped.

Changes

Version requirement

  • pyproject.toml: requires-python = ">=3.14"

Tests & build infra (apsw removed)

  • bindings/python/vectorlite_py/test/vectorlite_test.py: migrated to stdlib sqlite3 (apsw.SQLErrorsqlite3.OperationalError, getdescription()description)
  • requirements-dev.txt, pyproject.toml cibuildwheel test-requires, .github/workflows/ci.yml: removed apsw

Examples (rewritten to sqlite3)

  • quickstart.py, metadata_filter.py, hnsw_param.py, index_serde.py (dropped the USE_BUILTIN_SQLITE3/apsw branching), requirements.txt, examples/README.md

Docs

  • README.md, doc/markdown/getting-started.md, benchmark/README.md, benchmark/benchmark.py: install line uses pip install vectorlite-py numpy; code uses sqlite3. The SQLite >= 3.38 requirement is kept, with a note that Python 3.14 bundles SQLite 3.50.4.

Verification

  • All 20 Python integration tests pass on Python 3.14.3 with apsw uninstalled.
  • All four examples run end-to-end (including rowid metadata filtering and index save/load).

1yefuwang1 and others added 2 commits June 22, 2026 08:49
Python 3.14 bundles SQLite 3.50.4 (>= 3.38), which satisfies vectorlite's
metadata (rowid) filter requirement. The stdlib sqlite3 module can now be
used everywhere, so apsw is no longer needed.

- Bump requires-python to >=3.14 in pyproject.toml
- Migrate Python integration tests from apsw to stdlib sqlite3
  (apsw.SQLError -> sqlite3.OperationalError, getdescription() ->
  description)
- Remove apsw from requirements-dev.txt, cibuildwheel test-requires, and CI
- Rewrite examples to use sqlite3; drop USE_BUILTIN_SQLITE3 branching in
  index_serde.py
- Update README, getting-started, examples and benchmark docs; keep the
  SQLite >= 3.38 requirement and note Python 3.14 bundles SQLite 3.50.4

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The prebuilt CPython interpreters used by cibuildwheel (manylinux, macOS,
Windows) and actions/setup-python ship a sqlite3 module compiled without
loadable-extension support, so they cannot load the vectorlite extension.
apsw was previously used to work around this on all platforms.

To drop apsw entirely while keeping full cross-platform coverage, test the
built wheels with a uv-managed CPython 3.14, whose sqlite3 has loadable
extensions enabled and bundles SQLite 3.50.x (>= 3.38).

- pyproject.toml: make [tool.cibuildwheel] build-only (drop test-requires /
  test-command)
- ci.yml: install uv + Python 3.14, create a venv, and run the integration
  tests, examples and benchmark against the built wheel with that interpreter
- ci.yml: drop pytest/numpy/apsw from the host cibuildwheel install step

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@1yefuwang1
1yefuwang1 merged commit 96c5d37 into main Jun 22, 2026
12 of 14 checks passed
@1yefuwang1
1yefuwang1 deleted the drop-apsw-require-python-3.14 branch June 22, 2026 11:02
1yefuwang1 added a commit that referenced this pull request Jun 23, 2026
* docs: add design for comprehensive Python integration regression suite

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* docs: add implementation plan for Python integration regression suite

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* docs: migrate test plan and spec from apsw to stdlib sqlite3

apsw was dropped on main (PR #54); Python >=3.14 stdlib sqlite3 (SQLite 3.50.4)
now provides loadable extensions and the required SQLite version.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* test: add shared helpers and fixtures for integration suite

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* test: characterize vector_distance, json, and vectorlite_info scalar functions

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* test: characterize vector column round-trip and quantization tolerances

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* test: characterize knn_search ordering, parameters, and filters

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* test: characterize DDL element types, spaces, and hnsw option parsing

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* test: characterize DML edge cases (update, capacity, replace-deleted)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* test: characterize save/load persistence and table lifecycle

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* ci: run on push to main to warm vcpkg binary cache

CI only triggered on pull_request and workflow_dispatch, so the default
branch never populated the vcpkg binary cache. GitHub Actions caches are
branch-scoped, so every PR started cold and recompiled all vcpkg deps
from source (~20m on the Intel macOS runner).

Add a push trigger on main so the cache is saved on the default branch
and restorable by all PRs. Tighten the upload/publish job conditions to
require workflow_dispatch so the new push trigger does not spawn empty
publish jobs on every merge.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant