sqlrite 0.1.9__tar.gz → 0.1.10__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {sqlrite-0.1.9 → sqlrite-0.1.10}/Cargo.lock +5 -5
- {sqlrite-0.1.9 → sqlrite-0.1.10}/Cargo.toml +1 -1
- {sqlrite-0.1.9 → sqlrite-0.1.10}/PKG-INFO +3 -3
- {sqlrite-0.1.9 → sqlrite-0.1.10}/README.md +9 -9
- {sqlrite-0.1.9 → sqlrite-0.1.10}/desktop/package.json +1 -1
- {sqlrite-0.1.9 → sqlrite-0.1.10}/docs/_index.md +9 -1
- {sqlrite-0.1.9 → sqlrite-0.1.10}/docs/embedding.md +2 -2
- {sqlrite-0.1.9 → sqlrite-0.1.10}/docs/file-format.md +5 -1
- sqlrite-0.1.10/docs/phase-7-plan.md +498 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/docs/release-secrets.md +3 -4
- {sqlrite-0.1.9 → sqlrite-0.1.10}/docs/roadmap.md +24 -9
- {sqlrite-0.1.9 → sqlrite-0.1.10}/docs/supported-sql.md +2 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/pyproject.toml +1 -1
- {sqlrite-0.1.9 → sqlrite-0.1.10}/sdk/go/sqlrite.go +9 -6
- {sqlrite-0.1.9 → sqlrite-0.1.10}/sdk/python/Cargo.toml +1 -1
- {sqlrite-0.1.9 → sqlrite-0.1.10}/sdk/python/README.md +2 -2
- {sqlrite-0.1.9 → sqlrite-0.1.10}/sdk/python/src/lib.rs +8 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/src/sql/db/table.rs +306 -5
- {sqlrite-0.1.9 → sqlrite-0.1.10}/src/sql/executor.rs +1 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/src/sql/mod.rs +158 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/src/sql/pager/cell.rs +124 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/src/sql/pager/header.rs +6 -1
- {sqlrite-0.1.9 → sqlrite-0.1.10}/src/sql/pager/mod.rs +82 -8
- {sqlrite-0.1.9 → sqlrite-0.1.10}/src/sql/parser/create.rs +65 -11
- {sqlrite-0.1.9 → sqlrite-0.1.10}/src/sql/parser/insert.rs +17 -1
- {sqlrite-0.1.9 → sqlrite-0.1.10}/.github/workflows/ci.yml +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/.github/workflows/release-pr.yml +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/.github/workflows/release.yml +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/.github/workflows/rust.yml +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/.gitignore +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/CODE_OF_CONDUCT.md +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/LICENSE +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/MAINTAINERS +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/Makefile +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/desktop/index.html +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/desktop/package-lock.json +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/desktop/src/App.svelte +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/desktop/src/app.css +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/desktop/src/main.ts +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/desktop/src/vite-env.d.ts +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/desktop/svelte.config.js +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/desktop/tsconfig.json +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/desktop/vite.config.ts +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/docs/architecture.md +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/docs/design-decisions.md +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/docs/desktop.md +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/docs/getting-started.md +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/docs/pager.md +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/docs/release-plan.md +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/docs/smoke-test.md +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/docs/sql-engine.md +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/docs/storage-model.md +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/docs/usage.md +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/examples/README.md +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/examples/c/Makefile +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/examples/c/hello.c +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/examples/go/go.mod +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/examples/go/hello.go +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/examples/nodejs/hello.mjs +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/examples/python/hello.py +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/examples/rust/quickstart.rs +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/examples/wasm/Makefile +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/examples/wasm/index.html +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/images/SQLRite - Desktop.png +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/images/SQLRite Data Structures.png +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/images/SQLRite Simple SQL Execution High Level Diagram.png +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/images/SQLRite Simple SQL INSERT Execution High Level Diagram (Insert Row).png +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/images/SQLRite Simple SQL INSERT Execution High Level Diagram.png +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/images/SQLRite_logo.png +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/images/architecture.png +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/rust-toolchain.toml +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/samples/AST.delete.example +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/samples/AST.insert.exemple +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/samples/AST.select.example +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/samples/AST.update.example +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/samples/CREATE TABLE sqlrite_schema.sql +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/samples/CREATE_TABLE with duplicate.sql +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/samples/CREATE_TABLE.sql +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/samples/INSERT.sql +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/scripts/bump-version.sh +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/sdk/go/README.md +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/sdk/go/conn.go +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/sdk/go/go.mod +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/sdk/go/rows.go +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/sdk/go/sqlrite_test.go +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/sdk/go/stmt.go +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/sdk/python/tests/test_sqlrite.py +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/src/connection.rs +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/src/error.rs +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/src/lib.rs +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/src/main.rs +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/src/meta_command/mod.rs +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/src/repl/mod.rs +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/src/sql/db/database.rs +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/src/sql/db/mod.rs +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/src/sql/db/secondary_index.rs +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/src/sql/pager/file.rs +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/src/sql/pager/index_cell.rs +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/src/sql/pager/interior_page.rs +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/src/sql/pager/overflow.rs +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/src/sql/pager/page.rs +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/src/sql/pager/pager.rs +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/src/sql/pager/table_page.rs +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/src/sql/pager/varint.rs +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/src/sql/pager/wal.rs +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/src/sql/parser/mod.rs +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/src/sql/parser/select.rs +0 -0
- {sqlrite-0.1.9 → sqlrite-0.1.10}/src/sql/tokenizer.rs +0 -0
|
@@ -3736,7 +3736,7 @@ dependencies = [
|
|
|
3736
3736
|
|
|
3737
3737
|
[[package]]
|
|
3738
3738
|
name = "sqlrite-desktop"
|
|
3739
|
-
version = "0.1.
|
|
3739
|
+
version = "0.1.10"
|
|
3740
3740
|
dependencies = [
|
|
3741
3741
|
"serde",
|
|
3742
3742
|
"serde_json",
|
|
@@ -3748,7 +3748,7 @@ dependencies = [
|
|
|
3748
3748
|
|
|
3749
3749
|
[[package]]
|
|
3750
3750
|
name = "sqlrite-engine"
|
|
3751
|
-
version = "0.1.
|
|
3751
|
+
version = "0.1.10"
|
|
3752
3752
|
dependencies = [
|
|
3753
3753
|
"clap",
|
|
3754
3754
|
"env_logger",
|
|
@@ -3763,7 +3763,7 @@ dependencies = [
|
|
|
3763
3763
|
|
|
3764
3764
|
[[package]]
|
|
3765
3765
|
name = "sqlrite-ffi"
|
|
3766
|
-
version = "0.1.
|
|
3766
|
+
version = "0.1.10"
|
|
3767
3767
|
dependencies = [
|
|
3768
3768
|
"cbindgen",
|
|
3769
3769
|
"sqlrite-engine",
|
|
@@ -3771,7 +3771,7 @@ dependencies = [
|
|
|
3771
3771
|
|
|
3772
3772
|
[[package]]
|
|
3773
3773
|
name = "sqlrite-nodejs"
|
|
3774
|
-
version = "0.1.
|
|
3774
|
+
version = "0.1.10"
|
|
3775
3775
|
dependencies = [
|
|
3776
3776
|
"napi",
|
|
3777
3777
|
"napi-build",
|
|
@@ -3781,7 +3781,7 @@ dependencies = [
|
|
|
3781
3781
|
|
|
3782
3782
|
[[package]]
|
|
3783
3783
|
name = "sqlrite-python"
|
|
3784
|
-
version = "0.1.
|
|
3784
|
+
version = "0.1.10"
|
|
3785
3785
|
dependencies = [
|
|
3786
3786
|
"pyo3",
|
|
3787
3787
|
"sqlrite-engine",
|
|
@@ -27,7 +27,7 @@ resolver = "3"
|
|
|
27
27
|
# `package =` key so the import name stays `sqlrite` internally:
|
|
28
28
|
# sqlrite = { package = "sqlrite-engine", path = "…" }
|
|
29
29
|
name = "sqlrite-engine"
|
|
30
|
-
version = "0.1.
|
|
30
|
+
version = "0.1.10"
|
|
31
31
|
authors = ["Joao Henrique Machado Silva <joaoh82@gmail.com>"]
|
|
32
32
|
edition = "2024"
|
|
33
33
|
rust-version = "1.85"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sqlrite
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.10
|
|
4
4
|
Classifier: Development Status :: 3 - Alpha
|
|
5
5
|
Classifier: Intended Audience :: Developers
|
|
6
6
|
Classifier: License :: OSI Approved :: MIT License
|
|
@@ -30,7 +30,7 @@ Python bindings for [SQLRite](https://github.com/joaoh82/rust_sqlite) — a smal
|
|
|
30
30
|
## Install
|
|
31
31
|
|
|
32
32
|
```bash
|
|
33
|
-
# From PyPI
|
|
33
|
+
# From PyPI:
|
|
34
34
|
pip install sqlrite
|
|
35
35
|
|
|
36
36
|
# From source in a clone of the repo:
|
|
@@ -125,7 +125,7 @@ python -m pytest tests/
|
|
|
125
125
|
|
|
126
126
|
- PyO3 (`abi3-py38`) for the Rust-Python boundary — one wheel works on every CPython 3.8+ release, no per-version rebuild.
|
|
127
127
|
- maturin as the build backend, emitting standard `.whl` files that pip can install directly.
|
|
128
|
-
- Phase
|
|
128
|
+
- Phase 6f's CI publishes abi3-py38 wheels to PyPI for manylinux x86_64/aarch64, macOS aarch64, and Windows x86_64 (plus an sdist) on every release. OIDC trusted publishing — no long-lived PyPI token in the repo.
|
|
129
129
|
|
|
130
130
|
## Status
|
|
131
131
|
|
|
@@ -29,8 +29,8 @@ Rust-SQLite (SQLRite)
|
|
|
29
29
|
<td><a href="https://github.com/sponsors/joaoh82"><img src="https://img.shields.io/opencollective/backers/sqlrite"></a></td>
|
|
30
30
|
</tr>
|
|
31
31
|
<tr>
|
|
32
|
-
<td><a href="https://docs.rs/sqlrite">
|
|
33
|
-
<td><a href="https://docs.rs/sqlrite"><img src="https://docs.rs/sqlrite/badge.svg"></a></td>
|
|
32
|
+
<td><a href="https://docs.rs/sqlrite-engine">Rust API docs on docs.rs</a></td>
|
|
33
|
+
<td><a href="https://docs.rs/sqlrite-engine"><img src="https://docs.rs/sqlrite-engine/badge.svg"></a></td>
|
|
34
34
|
</tr>
|
|
35
35
|
<tr>
|
|
36
36
|
<td><a href="https://discord.gg/dHPmw89zAE">Come and Chat about databases with us</a></td>
|
|
@@ -212,9 +212,9 @@ The project is staged in phases, each independently shippable. A finished phase
|
|
|
212
212
|
**Phase 5 — Embedding surface: public API + language SDKs**
|
|
213
213
|
- [x] **5a — Public Rust API** *(partial)*: `Connection` / `Statement` / `Rows` / `Row` / `OwnedRow` / `FromValue` / `Value` at the crate root; structured row return from the executor; `examples/rust/quickstart.rs` runnable via `cargo run --example quickstart`. Parameter binding + cursor abstraction deferred to 5a.2.
|
|
214
214
|
- [x] **5b — C FFI shim**: new `sqlrite-ffi/` workspace crate ships `libsqlrite_c.{so,dylib,dll}` + a cbindgen-generated `sqlrite.h`. Opaque-pointer types, thread-local last-error, split `sqlrite_execute` (DDL/DML/transactions) vs `sqlrite_query`/`sqlrite_step` (SELECT iteration). Runnable `examples/c/hello.c` + `Makefile` (`cd examples/c && make run`).
|
|
215
|
-
- [x] **5c — Python SDK**: new `sdk/python/` workspace crate via PyO3 (`abi3-py38`) + maturin. DB-API 2.0-inspired — `sqlrite.connect(path)` → `Cursor.execute` / `fetchall` / iteration, context-manager support (commit-on-clean-exit / rollback-on-exception), read-only connections, 16-test pytest suite. `examples/python/hello.py` runs after `maturin develop`. PyPI publish
|
|
216
|
-
- [x] **5d — Node.js SDK**: new `sdk/nodejs/` workspace crate via napi-rs (N-API v9, Node 18+). Prebuilt `.node` binaries — no `node-gyp` install step. `better-sqlite3`-style sync API (`new Database(path)`, `stmt.all() / get() / iterate()` returning row objects), auto-generated TypeScript defs, 11 `node:test` integration tests. `examples/nodejs/hello.mjs` runs after `npm install && npm run build`. npm publish
|
|
217
|
-
- [x] **5e — Go SDK**: new `sdk/go/` module at `github.com/joaoh82/rust_sqlite/sdk/go`; cgo-wired against `libsqlrite_c` from Phase 5b. Implements the full `database/sql/driver` surface so users get the standard-library experience (`sql.Open("sqlrite", path)`, `db.Query/Exec/Begin`, `rows.Scan(&id, &name)`). 9-test `go test` integration suite. `examples/go/hello.go` runs after `cargo build --release -p sqlrite-ffi`.
|
|
215
|
+
- [x] **5c — Python SDK**: new `sdk/python/` workspace crate via PyO3 (`abi3-py38`) + maturin. DB-API 2.0-inspired — `sqlrite.connect(path)` → `Cursor.execute` / `fetchall` / iteration, context-manager support (commit-on-clean-exit / rollback-on-exception), read-only connections, 16-test pytest suite. `examples/python/hello.py` runs after `maturin develop`. PyPI publish landed in Phase 6f as `sqlrite`.
|
|
216
|
+
- [x] **5d — Node.js SDK**: new `sdk/nodejs/` workspace crate via napi-rs (N-API v9, Node 18+). Prebuilt `.node` binaries — no `node-gyp` install step. `better-sqlite3`-style sync API (`new Database(path)`, `stmt.all() / get() / iterate()` returning row objects), auto-generated TypeScript defs, 11 `node:test` integration tests. `examples/nodejs/hello.mjs` runs after `npm install && npm run build`. npm publish landed in Phase 6g as `@joaoh82/sqlrite` (scoped — npm rejected the unscoped `sqlrite` name as too similar to `sqlite`).
|
|
217
|
+
- [x] **5e — Go SDK**: new `sdk/go/` module at `github.com/joaoh82/rust_sqlite/sdk/go`; cgo-wired against `libsqlrite_c` from Phase 5b. Implements the full `database/sql/driver` surface so users get the standard-library experience (`sql.Open("sqlrite", path)`, `db.Query/Exec/Begin`, `rows.Scan(&id, &name)`). 9-test `go test` integration suite. `examples/go/hello.go` runs after `cargo build --release -p sqlrite-ffi`. Module publish landed in Phase 6i — `go get github.com/joaoh82/rust_sqlite/sdk/go@vX.Y.Z` resolves directly via VCS tag.
|
|
218
218
|
- [ ] **5f — Rust crate polish** *(deferred — Phase 6c companion)*: crate metadata, docs.rs config, prep for `cargo publish`. Deferred to land alongside the actual publish workflow.
|
|
219
219
|
- [x] **5g — WASM** build: new `sdk/wasm/` crate via `wasm-bindgen`; engine runs entirely in a browser tab. Feature-gated root crate (`cli` + `file-locks` optional, both default-on) so WASM disables fs2 / rustyline / clap / env_logger cleanly. `Database` class with `exec/query/columns/inTransaction`; rows as plain JS objects in projection order. ~1.8 MB wasm / ~500 KB gzipped. Three `wasm-pack` targets (web/bundler/nodejs). `examples/wasm/` ships a self-contained HTML SQL console.
|
|
220
220
|
- [ ] Code examples for every language under `examples/{rust,python,nodejs,go,wasm}/`
|
|
@@ -226,11 +226,11 @@ Lockstep versioning — one dispatch bumps every product to the same `vX.Y.Z`. T
|
|
|
226
226
|
- [x] **6b — CI**: `.github/workflows/ci.yml` runs on every PR + push to main. Seven parallel jobs: `rust-build-and-test` (Linux/macOS/Windows × cargo build + test), `rust-lint` (fmt + clippy + doc), `python-sdk` (Linux/macOS/Windows × maturin develop + pytest in a venv), `nodejs-sdk` (Linux/macOS/Windows × napi build + node --test), `go-sdk` (Linux/macOS × cargo build sqlrite-ffi + go test), `wasm-build` (wasm-pack + size report), `desktop-build` (npm ci + Tauri Rust compile). Cargo / npm / pip caching for fast PR turnaround.
|
|
227
227
|
- [x] **6c — Trusted publisher setup + branch protection runbook**: [`docs/release-secrets.md`](docs/release-secrets.md) captures the one-time web-UI setup — crates.io token in the `release` environment, OIDC trusted publishers on PyPI (`sqlrite`) and npm (`@joaoh82/sqlrite` + `@joaoh82/sqlrite-wasm` — both scoped because npm's similarity check rejects the unscoped names against `sqlite`/`sqlite3`/`sqlite-wasm`), GitHub `release` environment with required reviewer, branch protection on `main` requiring 14 CI jobs + 1 review. No code changes — executable as-is, ready to run through in the GitHub + registry UIs.
|
|
228
228
|
- [x] **6d — Release PR + skeleton publish**: two workflows under `.github/workflows/`. `release-pr.yml` (manual dispatch with version input → bump-version.sh → PR), `release.yml` (fires on `release: v<semver>` merge commit → `tag-all` + `publish-crate` + `publish-ffi` matrix [linux x86_64/aarch64, macOS aarch64, windows x86_64] + umbrella release). Idempotent tag creation so "Re-run failed jobs" works after partial failures. `cargo publish` gated by the `release` environment's required-reviewer rule. First canary: `v0.1.1`.
|
|
229
|
-
- [
|
|
230
|
-
- [
|
|
231
|
-
- [
|
|
229
|
+
- [x] **6e — Desktop publish**: `publish-desktop` matrix in `release.yml` — `tauri-action@v0` on ubuntu-22.04 (AppImage + deb + rpm), macos-latest (dmg aarch64 + .app tarball), windows-latest (msi + NSIS exe). Seven installer formats per release. Unsigned for now (Phase 6.1 wires up signing). Pre-generated icons committed to `desktop/src-tauri/icons/` keep CI deterministic.
|
|
230
|
+
- [x] **6f — Python SDK publish**: 3-job design (`build-python-wheels` matrix → `build-python-sdist` → `publish-python` aggregator). `maturin-action` builds abi3-py38 wheels for Linux x86_64/aarch64 (manylinux2014), macOS aarch64, Windows x86_64 + an sdist. Atomic OIDC upload via `pypa/gh-action-pypi-publish` to `sqlrite` on PyPI. PEP 740 publish attestations attached automatically.
|
|
231
|
+
- [x] **6g — Node.js SDK publish**: 2-job design (`build-nodejs-binaries` matrix → `publish-nodejs` aggregator). `@napi-rs/cli` builds `.node` binaries per platform; `index.js` dispatcher selects the right one at require time. OIDC publish to npm as `@joaoh82/sqlrite` with sigstore-signed provenance. Painful three-iteration debug to land the OIDC dance — see [docs/release-secrets.md](docs/release-secrets.md) §3 for the playbook the next person should use.
|
|
232
232
|
- [x] **6h — WASM publish**: `wasm-pack build --target bundler --scope joaoh82` + `npm publish --provenance` (OIDC) → `@joaoh82/sqlrite-wasm` on npm. Single job, no matrix (WebAssembly is universal). `.wasm` also attached to the `sqlrite-wasm-v<V>` GitHub Release.
|
|
233
|
-
- [x] **6i — Go SDK publish**: `sdk/go/
|
|
233
|
+
- [x] **6i — Go SDK publish**: no registry — `sdk/go/v<V>` git tag (Go modules pull straight from VCS), GitHub Release at that tag with the FFI tarballs from `publish-ffi` re-attached so Go users have one page with `go get` + cgo deps. `go get github.com/joaoh82/rust_sqlite/sdk/go@vX.Y.Z` resolves through proxy.golang.org as soon as the tag is pushed.
|
|
234
234
|
|
|
235
235
|
**Phase 6.1 — Code signing** *(follow-up)*
|
|
236
236
|
- [ ] macOS Apple Developer ID cert → `codesign` + `notarytool` in `tauri-action`
|
|
@@ -34,8 +34,11 @@ As of April 2026, SQLRite has:
|
|
|
34
34
|
|
|
35
35
|
- A working SQL engine (in-memory + on-disk with a real B-Tree per table + secondary indexes, Phases 0 – 3 complete)
|
|
36
36
|
- WAL-backed persistence with crash-safe checkpointing, shared/exclusive lock modes, and real `BEGIN` / `COMMIT` / `ROLLBACK` transactions (Phase 4 complete)
|
|
37
|
-
- A stable public Rust embedding API
|
|
37
|
+
- A stable public Rust embedding API plus C FFI shim and SDKs for Python, Node.js, Go, and WASM (Phase 5 complete except the optional 5f crate-polish task)
|
|
38
38
|
- A Tauri 2.0 + Svelte desktop app (Phase 2.5 complete)
|
|
39
|
+
- A fully-automated release pipeline that ships every product to its registry on every release with one human action — Rust crate to crates.io (`sqlrite-engine`), Python wheels to PyPI (`sqlrite`), Node.js + WASM to npm (`@joaoh82/sqlrite` + `@joaoh82/sqlrite-wasm`), Go module via `sdk/go/v*` git tag, plus C FFI tarballs and unsigned desktop installers as GitHub Release assets (Phase 6 complete)
|
|
40
|
+
|
|
41
|
+
The active frontier is **Phase 7 — AI-era extensions**.
|
|
39
42
|
|
|
40
43
|
See the [Roadmap](roadmap.md) for the full phase plan.
|
|
41
44
|
|
|
@@ -45,6 +48,11 @@ See the [Roadmap](roadmap.md) for the full phase plan.
|
|
|
45
48
|
- [Release secrets runbook](release-secrets.md) — one-time web-UI setup for crates.io, PyPI, npm, GitHub `release` environment, and `main` branch protection
|
|
46
49
|
- [`scripts/`](../scripts/) — runnable tooling used by release workflows + reproducible locally (start with `scripts/bump-version.sh`)
|
|
47
50
|
|
|
51
|
+
## Future work
|
|
52
|
+
|
|
53
|
+
- [Phase 7 plan](phase-7-plan.md) — AI-era extensions (vector column type + HNSW, JSON, NL→SQL `ask()` API across REPL/library/SDKs/desktop/MCP, MCP server). **Approved 2026-04-26**, implementation starts at sub-phase 7a.
|
|
54
|
+
- Phase 8 — Full-text search (FTS5-style BM25) + hybrid retrieval, deferred from Phase 7 per the plan-doc's Q1.
|
|
55
|
+
|
|
48
56
|
## Conventions
|
|
49
57
|
|
|
50
58
|
- Code lives under [`src/`](../src/); docs live here under [`docs/`](./).
|
|
@@ -138,7 +138,7 @@ with sqlrite.connect("foo.sqlrite") as conn:
|
|
|
138
138
|
print(row) # tuples
|
|
139
139
|
```
|
|
140
140
|
|
|
141
|
-
The Python binding wraps the Rust `Connection` directly (not via the C FFI) — PyO3 marshals types cheaper than a C round-trip. Build via `cd sdk/python && maturin develop`; tests via `python -m pytest sdk/python/tests/`. PyPI
|
|
141
|
+
The Python binding wraps the Rust `Connection` directly (not via the C FFI) — PyO3 marshals types cheaper than a C round-trip. Build via `cd sdk/python && maturin develop`; tests via `python -m pytest sdk/python/tests/`. Phase 6f publishes abi3-py38 wheels to PyPI on every release via OIDC trusted publishing.
|
|
142
142
|
|
|
143
143
|
Full API tour: [`sdk/python/README.md`](../sdk/python/README.md); runnable walkthrough: [`examples/python/hello.py`](../examples/python/hello.py).
|
|
144
144
|
|
|
@@ -157,7 +157,7 @@ for (const row of db.prepare('SELECT id, name FROM users').all()) {
|
|
|
157
157
|
db.close();
|
|
158
158
|
```
|
|
159
159
|
|
|
160
|
-
Unlike the C SDK, the Node.js binding wraps the Rust `Connection` directly (via napi-rs, no C FFI hop).
|
|
160
|
+
Unlike the C SDK, the Node.js binding wraps the Rust `Connection` directly (via napi-rs, no C FFI hop). Phase 6g publishes prebuilt `.node` binaries per platform under the `@joaoh82/sqlrite` scope on npm, with sigstore-signed provenance attestations via OIDC trusted publishing — no `node-gyp` install step on the user side. TypeScript definitions (`index.d.ts`) auto-generated from the Rust source.
|
|
161
161
|
|
|
162
162
|
Full API tour: [`sdk/nodejs/README.md`](../sdk/nodejs/README.md); runnable walkthrough: [`examples/nodejs/hello.mjs`](../examples/nodejs/hello.mjs).
|
|
163
163
|
|
|
@@ -152,9 +152,12 @@ tag u8
|
|
|
152
152
|
0x01 Real f64 little-endian, 8 bytes
|
|
153
153
|
0x02 Text varint length, UTF-8 bytes
|
|
154
154
|
0x03 Bool u8 (0 or 1)
|
|
155
|
+
0x04 Vector varint dim, then dim × 4 bytes f32 little-endian (Phase 7a, format v4)
|
|
155
156
|
body variable (see tag)
|
|
156
157
|
```
|
|
157
158
|
|
|
159
|
+
The Vector tag (Phase 7a) carries its own dimension as a leading varint so `decode_value` doesn't need schema context to read it. For the typical embedding sizes (384, 768, 1536) the dim varint is 2-3 bytes; the f32 array dominates payload size (4·dim bytes). Vectors that exceed the local-cell budget spill into the overflow chain via the same machinery as long Text values — no Vector-specific overflow path.
|
|
160
|
+
|
|
158
161
|
### Overflow cell body
|
|
159
162
|
|
|
160
163
|
When a cell's full local encoding would exceed `OVERFLOW_THRESHOLD` (1022 bytes in the current code), the body is written to a chain of `Overflow` pages instead, and the on-page cell is replaced by a compact marker:
|
|
@@ -280,7 +283,8 @@ These are not all enforced on open — we validate the header strictly and rely
|
|
|
280
283
|
|
|
281
284
|
- **v1** (Phases 2 / 3a / 3b) — schema catalog and table data were opaque `bincode` blobs chained across typed payload pages.
|
|
282
285
|
- **v2** (Phases 3c / 3d) — cell-based storage and `sqlrite_master`. Phase 3d added interior pages without a version bump.
|
|
283
|
-
- **v3** (Phase 3e
|
|
286
|
+
- **v3** (Phase 3e) — `sqlrite_master` gains a `type` column; secondary indexes persist as their own cell-based B-Trees whose leaves carry `KIND_INDEX` cells.
|
|
287
|
+
- **v4** (Phase 7a, current) — value block dispatch gains the `0x04 Vector` tag for the new `VECTOR(N)` column type. Per the [Phase 7 plan's Q8](phase-7-plan.md#q8-file-format-version-bump), later Phase 7 sub-phases (JSON storage, HNSW indexes) will add their own value/cell tags inside this same v4 envelope — no v5 mid-Phase-7. The `CREATE TABLE` SQL stored in `sqlrite_master` carries vector columns as `VECTOR(N)` in the type position; on open, the engine re-parses that SQL and reconstructs `DataType::Vector(N)` from the `Custom` AST node sqlparser produces.
|
|
284
288
|
|
|
285
289
|
The page header (7 bytes) and chaining mechanism are stable across future phases. Phase 4's WAL introduces a sibling file (`.sqlrite-wal`) rather than changing the main file format.
|
|
286
290
|
|