sqlrite 0.1.8__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.
Files changed (108) hide show
  1. {sqlrite-0.1.8 → sqlrite-0.1.10}/.github/workflows/release.yml +144 -4
  2. {sqlrite-0.1.8 → sqlrite-0.1.10}/Cargo.lock +5 -5
  3. {sqlrite-0.1.8 → sqlrite-0.1.10}/Cargo.toml +1 -1
  4. {sqlrite-0.1.8 → sqlrite-0.1.10}/PKG-INFO +3 -3
  5. {sqlrite-0.1.8 → sqlrite-0.1.10}/README.md +9 -9
  6. {sqlrite-0.1.8 → sqlrite-0.1.10}/desktop/package.json +1 -1
  7. {sqlrite-0.1.8 → sqlrite-0.1.10}/docs/_index.md +9 -1
  8. {sqlrite-0.1.8 → sqlrite-0.1.10}/docs/embedding.md +2 -2
  9. {sqlrite-0.1.8 → sqlrite-0.1.10}/docs/file-format.md +5 -1
  10. sqlrite-0.1.10/docs/phase-7-plan.md +498 -0
  11. {sqlrite-0.1.8 → sqlrite-0.1.10}/docs/release-secrets.md +3 -4
  12. {sqlrite-0.1.8 → sqlrite-0.1.10}/docs/roadmap.md +36 -11
  13. {sqlrite-0.1.8 → sqlrite-0.1.10}/docs/supported-sql.md +2 -0
  14. {sqlrite-0.1.8 → sqlrite-0.1.10}/pyproject.toml +1 -1
  15. {sqlrite-0.1.8 → sqlrite-0.1.10}/sdk/go/README.md +1 -1
  16. {sqlrite-0.1.8 → sqlrite-0.1.10}/sdk/go/sqlrite.go +9 -6
  17. {sqlrite-0.1.8 → sqlrite-0.1.10}/sdk/python/Cargo.toml +1 -1
  18. {sqlrite-0.1.8 → sqlrite-0.1.10}/sdk/python/README.md +2 -2
  19. {sqlrite-0.1.8 → sqlrite-0.1.10}/sdk/python/src/lib.rs +8 -0
  20. {sqlrite-0.1.8 → sqlrite-0.1.10}/src/sql/db/table.rs +306 -5
  21. {sqlrite-0.1.8 → sqlrite-0.1.10}/src/sql/executor.rs +1 -0
  22. {sqlrite-0.1.8 → sqlrite-0.1.10}/src/sql/mod.rs +158 -0
  23. {sqlrite-0.1.8 → sqlrite-0.1.10}/src/sql/pager/cell.rs +124 -0
  24. {sqlrite-0.1.8 → sqlrite-0.1.10}/src/sql/pager/header.rs +6 -1
  25. {sqlrite-0.1.8 → sqlrite-0.1.10}/src/sql/pager/mod.rs +82 -8
  26. {sqlrite-0.1.8 → sqlrite-0.1.10}/src/sql/parser/create.rs +65 -11
  27. {sqlrite-0.1.8 → sqlrite-0.1.10}/src/sql/parser/insert.rs +17 -1
  28. {sqlrite-0.1.8 → sqlrite-0.1.10}/.github/workflows/ci.yml +0 -0
  29. {sqlrite-0.1.8 → sqlrite-0.1.10}/.github/workflows/release-pr.yml +0 -0
  30. {sqlrite-0.1.8 → sqlrite-0.1.10}/.github/workflows/rust.yml +0 -0
  31. {sqlrite-0.1.8 → sqlrite-0.1.10}/.gitignore +0 -0
  32. {sqlrite-0.1.8 → sqlrite-0.1.10}/CODE_OF_CONDUCT.md +0 -0
  33. {sqlrite-0.1.8 → sqlrite-0.1.10}/LICENSE +0 -0
  34. {sqlrite-0.1.8 → sqlrite-0.1.10}/MAINTAINERS +0 -0
  35. {sqlrite-0.1.8 → sqlrite-0.1.10}/Makefile +0 -0
  36. {sqlrite-0.1.8 → sqlrite-0.1.10}/desktop/index.html +0 -0
  37. {sqlrite-0.1.8 → sqlrite-0.1.10}/desktop/package-lock.json +0 -0
  38. {sqlrite-0.1.8 → sqlrite-0.1.10}/desktop/src/App.svelte +0 -0
  39. {sqlrite-0.1.8 → sqlrite-0.1.10}/desktop/src/app.css +0 -0
  40. {sqlrite-0.1.8 → sqlrite-0.1.10}/desktop/src/main.ts +0 -0
  41. {sqlrite-0.1.8 → sqlrite-0.1.10}/desktop/src/vite-env.d.ts +0 -0
  42. {sqlrite-0.1.8 → sqlrite-0.1.10}/desktop/svelte.config.js +0 -0
  43. {sqlrite-0.1.8 → sqlrite-0.1.10}/desktop/tsconfig.json +0 -0
  44. {sqlrite-0.1.8 → sqlrite-0.1.10}/desktop/vite.config.ts +0 -0
  45. {sqlrite-0.1.8 → sqlrite-0.1.10}/docs/architecture.md +0 -0
  46. {sqlrite-0.1.8 → sqlrite-0.1.10}/docs/design-decisions.md +0 -0
  47. {sqlrite-0.1.8 → sqlrite-0.1.10}/docs/desktop.md +0 -0
  48. {sqlrite-0.1.8 → sqlrite-0.1.10}/docs/getting-started.md +0 -0
  49. {sqlrite-0.1.8 → sqlrite-0.1.10}/docs/pager.md +0 -0
  50. {sqlrite-0.1.8 → sqlrite-0.1.10}/docs/release-plan.md +0 -0
  51. {sqlrite-0.1.8 → sqlrite-0.1.10}/docs/smoke-test.md +0 -0
  52. {sqlrite-0.1.8 → sqlrite-0.1.10}/docs/sql-engine.md +0 -0
  53. {sqlrite-0.1.8 → sqlrite-0.1.10}/docs/storage-model.md +0 -0
  54. {sqlrite-0.1.8 → sqlrite-0.1.10}/docs/usage.md +0 -0
  55. {sqlrite-0.1.8 → sqlrite-0.1.10}/examples/README.md +0 -0
  56. {sqlrite-0.1.8 → sqlrite-0.1.10}/examples/c/Makefile +0 -0
  57. {sqlrite-0.1.8 → sqlrite-0.1.10}/examples/c/hello.c +0 -0
  58. {sqlrite-0.1.8 → sqlrite-0.1.10}/examples/go/go.mod +0 -0
  59. {sqlrite-0.1.8 → sqlrite-0.1.10}/examples/go/hello.go +0 -0
  60. {sqlrite-0.1.8 → sqlrite-0.1.10}/examples/nodejs/hello.mjs +0 -0
  61. {sqlrite-0.1.8 → sqlrite-0.1.10}/examples/python/hello.py +0 -0
  62. {sqlrite-0.1.8 → sqlrite-0.1.10}/examples/rust/quickstart.rs +0 -0
  63. {sqlrite-0.1.8 → sqlrite-0.1.10}/examples/wasm/Makefile +0 -0
  64. {sqlrite-0.1.8 → sqlrite-0.1.10}/examples/wasm/index.html +0 -0
  65. {sqlrite-0.1.8 → sqlrite-0.1.10}/images/SQLRite - Desktop.png +0 -0
  66. {sqlrite-0.1.8 → sqlrite-0.1.10}/images/SQLRite Data Structures.png +0 -0
  67. {sqlrite-0.1.8 → sqlrite-0.1.10}/images/SQLRite Simple SQL Execution High Level Diagram.png +0 -0
  68. {sqlrite-0.1.8 → sqlrite-0.1.10}/images/SQLRite Simple SQL INSERT Execution High Level Diagram (Insert Row).png +0 -0
  69. {sqlrite-0.1.8 → sqlrite-0.1.10}/images/SQLRite Simple SQL INSERT Execution High Level Diagram.png +0 -0
  70. {sqlrite-0.1.8 → sqlrite-0.1.10}/images/SQLRite_logo.png +0 -0
  71. {sqlrite-0.1.8 → sqlrite-0.1.10}/images/architecture.png +0 -0
  72. {sqlrite-0.1.8 → sqlrite-0.1.10}/rust-toolchain.toml +0 -0
  73. {sqlrite-0.1.8 → sqlrite-0.1.10}/samples/AST.delete.example +0 -0
  74. {sqlrite-0.1.8 → sqlrite-0.1.10}/samples/AST.insert.exemple +0 -0
  75. {sqlrite-0.1.8 → sqlrite-0.1.10}/samples/AST.select.example +0 -0
  76. {sqlrite-0.1.8 → sqlrite-0.1.10}/samples/AST.update.example +0 -0
  77. {sqlrite-0.1.8 → sqlrite-0.1.10}/samples/CREATE TABLE sqlrite_schema.sql +0 -0
  78. {sqlrite-0.1.8 → sqlrite-0.1.10}/samples/CREATE_TABLE with duplicate.sql +0 -0
  79. {sqlrite-0.1.8 → sqlrite-0.1.10}/samples/CREATE_TABLE.sql +0 -0
  80. {sqlrite-0.1.8 → sqlrite-0.1.10}/samples/INSERT.sql +0 -0
  81. {sqlrite-0.1.8 → sqlrite-0.1.10}/scripts/bump-version.sh +0 -0
  82. {sqlrite-0.1.8 → sqlrite-0.1.10}/sdk/go/conn.go +0 -0
  83. {sqlrite-0.1.8 → sqlrite-0.1.10}/sdk/go/go.mod +0 -0
  84. {sqlrite-0.1.8 → sqlrite-0.1.10}/sdk/go/rows.go +0 -0
  85. {sqlrite-0.1.8 → sqlrite-0.1.10}/sdk/go/sqlrite_test.go +0 -0
  86. {sqlrite-0.1.8 → sqlrite-0.1.10}/sdk/go/stmt.go +0 -0
  87. {sqlrite-0.1.8 → sqlrite-0.1.10}/sdk/python/tests/test_sqlrite.py +0 -0
  88. {sqlrite-0.1.8 → sqlrite-0.1.10}/src/connection.rs +0 -0
  89. {sqlrite-0.1.8 → sqlrite-0.1.10}/src/error.rs +0 -0
  90. {sqlrite-0.1.8 → sqlrite-0.1.10}/src/lib.rs +0 -0
  91. {sqlrite-0.1.8 → sqlrite-0.1.10}/src/main.rs +0 -0
  92. {sqlrite-0.1.8 → sqlrite-0.1.10}/src/meta_command/mod.rs +0 -0
  93. {sqlrite-0.1.8 → sqlrite-0.1.10}/src/repl/mod.rs +0 -0
  94. {sqlrite-0.1.8 → sqlrite-0.1.10}/src/sql/db/database.rs +0 -0
  95. {sqlrite-0.1.8 → sqlrite-0.1.10}/src/sql/db/mod.rs +0 -0
  96. {sqlrite-0.1.8 → sqlrite-0.1.10}/src/sql/db/secondary_index.rs +0 -0
  97. {sqlrite-0.1.8 → sqlrite-0.1.10}/src/sql/pager/file.rs +0 -0
  98. {sqlrite-0.1.8 → sqlrite-0.1.10}/src/sql/pager/index_cell.rs +0 -0
  99. {sqlrite-0.1.8 → sqlrite-0.1.10}/src/sql/pager/interior_page.rs +0 -0
  100. {sqlrite-0.1.8 → sqlrite-0.1.10}/src/sql/pager/overflow.rs +0 -0
  101. {sqlrite-0.1.8 → sqlrite-0.1.10}/src/sql/pager/page.rs +0 -0
  102. {sqlrite-0.1.8 → sqlrite-0.1.10}/src/sql/pager/pager.rs +0 -0
  103. {sqlrite-0.1.8 → sqlrite-0.1.10}/src/sql/pager/table_page.rs +0 -0
  104. {sqlrite-0.1.8 → sqlrite-0.1.10}/src/sql/pager/varint.rs +0 -0
  105. {sqlrite-0.1.8 → sqlrite-0.1.10}/src/sql/pager/wal.rs +0 -0
  106. {sqlrite-0.1.8 → sqlrite-0.1.10}/src/sql/parser/mod.rs +0 -0
  107. {sqlrite-0.1.8 → sqlrite-0.1.10}/src/sql/parser/select.rs +0 -0
  108. {sqlrite-0.1.8 → sqlrite-0.1.10}/src/sql/tokenizer.rs +0 -0
@@ -9,7 +9,9 @@
9
9
  # Phase 6f adds build-python-wheels + publish-python.
10
10
  # Phase 6g adds build-nodejs-binaries + publish-nodejs.
11
11
  # Phase 6h adds publish-wasm.
12
- # Phase 6i adds publish-go.
12
+ # Phase 6i adds publish-go (no registry — git tag + GitHub Release
13
+ # with the FFI tarballs attached for users who want prebuilt
14
+ # libsqlrite_c alongside `go get`).
13
15
  #
14
16
  # Design doc: docs/release-plan.md.
15
17
  # One-time registry / branch-protection setup: docs/release-secrets.md.
@@ -128,6 +130,7 @@ jobs:
128
130
  "sqlrite-py-v$V"
129
131
  "sqlrite-node-v$V"
130
132
  "sqlrite-wasm-v$V"
133
+ "sdk/go/v$V"
131
134
  "v$V"
132
135
  )
133
136
  for tag in "${TAGS[@]}"; do
@@ -1074,6 +1077,144 @@ jobs:
1074
1077
  files: sdk/wasm/pkg/*.wasm
1075
1078
  generate_release_notes: true
1076
1079
 
1080
+ # ---------------------------------------------------------------------------
1081
+ # Step 3i: publish the Go SDK. (Phase 6i.)
1082
+ #
1083
+ # Go's distribution model is unique among our publish channels:
1084
+ # there's NO central registry. Go modules pull straight from VCS
1085
+ # via tag, and `go get github.com/joaoh82/rust_sqlite/sdk/go@v0.X.Y`
1086
+ # works the moment a `sdk/go/v0.X.Y` tag is on the remote (modulo
1087
+ # ~minutes of cache lag at proxy.golang.org). The tag is created
1088
+ # by `tag-all` upstream of this job — there's nothing to upload.
1089
+ #
1090
+ # **What this job DOES do:** the binding uses cgo against
1091
+ # `libsqlrite_c` (the C FFI from sqlrite-ffi), so end users
1092
+ # need that shared library on their system to run anything.
1093
+ # We pull the per-platform tarballs that publish-ffi already
1094
+ # uploaded to its release and re-attach them to the Go release
1095
+ # page so Go users have a one-stop-shop:
1096
+ #
1097
+ # `go get github.com/joaoh82/rust_sqlite/sdk/go@vX.Y.Z`
1098
+ # download `libsqlrite_c-<platform>.tar.gz` from the same
1099
+ # release page → set CGO_LDFLAGS / CGO_CFLAGS → `go build`.
1100
+ #
1101
+ # **Tag with slashes:** Go's submodule tag convention is
1102
+ # `<subpath>/vX.Y.Z` — for our module path
1103
+ # `github.com/joaoh82/rust_sqlite/sdk/go`, the canonical tag is
1104
+ # `sdk/go/vX.Y.Z` (slashes intact). GitHub Releases handle
1105
+ # slash-bearing tags fine; the URL just URL-encodes them.
1106
+ publish-go:
1107
+ name: Publish Go SDK GitHub Release
1108
+ needs: [detect, tag-all, publish-ffi]
1109
+ if: needs.detect.outputs.should_release == 'true'
1110
+ runs-on: ubuntu-latest
1111
+ permissions:
1112
+ # For softprops/action-gh-release + gh CLI release-download.
1113
+ contents: write
1114
+ steps:
1115
+ - uses: actions/checkout@v4
1116
+ with:
1117
+ # Need full tag history to verify tag-all's `sdk/go/v$V`
1118
+ # is on the remote.
1119
+ fetch-depth: 0
1120
+
1121
+ # Cheap consistency check that tag-all did its job. If this
1122
+ # fires, something's wrong upstream and the human should
1123
+ # know before we cut a confusingly-named GitHub Release.
1124
+ - name: Verify Go module tag exists
1125
+ run: |
1126
+ V="${{ needs.detect.outputs.version }}"
1127
+ TAG="sdk/go/v$V"
1128
+ if ! git rev-parse "$TAG" >/dev/null 2>&1; then
1129
+ echo "::error::Tag $TAG not found — tag-all should have created + pushed it"
1130
+ exit 1
1131
+ fi
1132
+ echo "Tag $TAG exists at $(git rev-parse --short $TAG)"
1133
+
1134
+ # Pull the tarballs publish-ffi already attached to the
1135
+ # sqlrite-ffi-v<V> release. The `gh release download` flow
1136
+ # avoids re-running the whole publish-ffi build matrix just
1137
+ # to get the artifacts here — it's a single API call with
1138
+ # the workflow's auto-injected GITHUB_TOKEN.
1139
+ - name: Download FFI tarballs from this release wave
1140
+ env:
1141
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
1142
+ run: |
1143
+ V="${{ needs.detect.outputs.version }}"
1144
+ mkdir -p ffi-tarballs
1145
+ gh release download "sqlrite-ffi-v$V" \
1146
+ --repo joaoh82/rust_sqlite \
1147
+ --dir ffi-tarballs \
1148
+ --pattern '*.tar.gz'
1149
+ echo "--- FFI tarballs downloaded ---"
1150
+ ls -la ffi-tarballs/
1151
+
1152
+ # Cut the Go release page. Tag has slashes — softprops handles
1153
+ # that correctly (URL-encodes the slashes in the resulting
1154
+ # release URL).
1155
+ - name: GitHub Release
1156
+ uses: softprops/action-gh-release@v2
1157
+ with:
1158
+ tag_name: sdk/go/v${{ needs.detect.outputs.version }}
1159
+ name: Go SDK v${{ needs.detect.outputs.version }}
1160
+ body: |
1161
+ ```bash
1162
+ go get github.com/joaoh82/rust_sqlite/sdk/go@v${{ needs.detect.outputs.version }}
1163
+ ```
1164
+
1165
+ ```go
1166
+ package main
1167
+
1168
+ import (
1169
+ "database/sql"
1170
+ "fmt"
1171
+
1172
+ _ "github.com/joaoh82/rust_sqlite/sdk/go" // registers "sqlrite" driver
1173
+ )
1174
+
1175
+ func main() {
1176
+ db, _ := sql.Open("sqlrite", ":memory:")
1177
+ defer db.Close()
1178
+
1179
+ _, _ = db.Exec("CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)")
1180
+ _, _ = db.Exec("INSERT INTO users (name) VALUES ('alice')")
1181
+
1182
+ rows, _ := db.Query("SELECT id, name FROM users")
1183
+ defer rows.Close()
1184
+ for rows.Next() {
1185
+ var id int64
1186
+ var name string
1187
+ rows.Scan(&id, &name)
1188
+ fmt.Printf("%d: %s\n", id, name)
1189
+ }
1190
+ }
1191
+ ```
1192
+
1193
+ ## Prebuilt `libsqlrite_c` (cgo dependency)
1194
+
1195
+ The Go binding uses cgo against the `libsqlrite_c` shared library shipped by [`sqlrite-ffi`](https://github.com/joaoh82/rust_sqlite/tree/main/sqlrite-ffi). The tarballs attached below are the same ones from this release wave's [C FFI release](../../releases/tag/sqlrite-ffi-v${{ needs.detect.outputs.version }}) — provided here so Go users have a one-stop-shop:
1196
+
1197
+ - `sqlrite-ffi-v${{ needs.detect.outputs.version }}-linux-x86_64.tar.gz`
1198
+ - `sqlrite-ffi-v${{ needs.detect.outputs.version }}-linux-aarch64.tar.gz`
1199
+ - `sqlrite-ffi-v${{ needs.detect.outputs.version }}-macos-aarch64.tar.gz`
1200
+ - `sqlrite-ffi-v${{ needs.detect.outputs.version }}-windows-x86_64.tar.gz`
1201
+
1202
+ Extract for your platform, then point cgo at it:
1203
+
1204
+ ```bash
1205
+ tar xzf sqlrite-ffi-v${{ needs.detect.outputs.version }}-<platform>.tar.gz
1206
+ export CGO_CFLAGS="-I$(pwd)/sqlrite-ffi-v${{ needs.detect.outputs.version }}-<platform>/include"
1207
+ export CGO_LDFLAGS="-L$(pwd)/sqlrite-ffi-v${{ needs.detect.outputs.version }}-<platform>/lib -lsqlrite_c"
1208
+ export LD_LIBRARY_PATH="$(pwd)/sqlrite-ffi-v${{ needs.detect.outputs.version }}-<platform>/lib"
1209
+ go build ./...
1210
+ ```
1211
+
1212
+ (On macOS use `DYLD_LIBRARY_PATH` instead of `LD_LIBRARY_PATH`. On Windows, place the `.dll` next to your binary or on `%PATH%`.)
1213
+
1214
+ See the umbrella release [v${{ needs.detect.outputs.version }}](../../releases/tag/v${{ needs.detect.outputs.version }}) for the full changelog.
1215
+ files: ffi-tarballs/*.tar.gz
1216
+ generate_release_notes: true
1217
+
1077
1218
  # ---------------------------------------------------------------------------
1078
1219
  # Step 4: create the umbrella GitHub Release. Runs after all
1079
1220
  # publish-* jobs succeed. Uses GitHub's native auto-generated
@@ -1082,7 +1223,7 @@ jobs:
1082
1223
  # config if we add one later.
1083
1224
  finalize:
1084
1225
  name: Finalize umbrella release
1085
- needs: [detect, publish-crate, publish-ffi, publish-desktop, publish-python, publish-nodejs, publish-wasm]
1226
+ needs: [detect, publish-crate, publish-ffi, publish-desktop, publish-python, publish-nodejs, publish-wasm, publish-go]
1086
1227
  if: needs.detect.outputs.should_release == 'true'
1087
1228
  runs-on: ubuntu-latest
1088
1229
  steps:
@@ -1106,8 +1247,7 @@ jobs:
1106
1247
  - 🐍 [Python](../../releases/tag/sqlrite-py-v${{ needs.detect.outputs.version }}) → [PyPI](https://pypi.org/project/sqlrite/${{ needs.detect.outputs.version }}/) — abi3-py38 wheels for Linux x86_64/aarch64, macOS aarch64, Windows x86_64 + sdist
1107
1248
  - 🟢 [Node.js](../../releases/tag/sqlrite-node-v${{ needs.detect.outputs.version }}) → [npm](https://www.npmjs.com/package/@joaoh82/sqlrite/v/${{ needs.detect.outputs.version }}) — N-API bindings with prebuilt `.node` binaries for Linux x86_64/aarch64, macOS aarch64, Windows x86_64
1108
1249
  - 🌐 [WASM](../../releases/tag/sqlrite-wasm-v${{ needs.detect.outputs.version }}) → [npm](https://www.npmjs.com/package/@joaoh82/sqlrite-wasm/v/${{ needs.detect.outputs.version }}) — browser/bundler-target WebAssembly build via wasm-pack
1109
-
1110
- _Go SDK lands as its publish job comes online (Phase 6i)._
1250
+ - 🐹 [Go SDK](../../releases/tag/sdk%2Fgo%2Fv${{ needs.detect.outputs.version }}) → `go get github.com/joaoh82/rust_sqlite/sdk/go@v${{ needs.detect.outputs.version }}` — `database/sql` driver via cgo against `libsqlrite_c`
1111
1251
 
1112
1252
  ---
1113
1253
 
@@ -3736,7 +3736,7 @@ dependencies = [
3736
3736
 
3737
3737
  [[package]]
3738
3738
  name = "sqlrite-desktop"
3739
- version = "0.1.8"
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.8"
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.8"
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.8"
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.8"
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.8"
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.8
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 (once Phase 6e's CI/CD release pipeline is live):
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 6e lands GitHub Actions that publish wheels to PyPI for manylinux x86_64/aarch64, macOS universal, and Windows x86_64 on every `v*` tag push.
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">Documentation (coming soon)</a></td>
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 lands in Phase 6e.
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 lands in Phase 6e.
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`. Go modules publish via `sdk/go/v*` git tags in Phase 6e.
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
- - [ ] **6e — Desktop publish**: add `publish-desktop` to `release.yml` — Tauri build matrix → unsigned `.AppImage` / `.deb` / `.dmg` / `.msi` GitHub Release
230
- - [ ] **6f — Python SDK publish**: `maturin-action` abi3 wheels for manylinux x86_64/aarch64 + macOS universal + Windows x86_64 PyPI via OIDC
231
- - [ ] **6g — Node.js SDK publish**: `@napi-rs/cli` `.node` binaries per platform npm via OIDC
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
- - [ ] **6i — Go SDK publish**: `sdk/go/vX.Y.Z` git tag + attach FFI tarballs to the Go GitHub Release for `go get` users who want prebuilt `libsqlrite_c`
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`
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "sqlrite-desktop-frontend",
3
3
  "private": true,
4
- "version": "0.1.8",
4
+ "version": "0.1.10",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "dev": "vite",
@@ -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 (Phase 5a complete the current frontier is Phase 5b, the C FFI shim, and the language SDKs that build on it)
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 publish lands in Phase 6e.
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). Prebuilt `.node` binaries shipped per platform in Phase 6e — no `node-gyp` install step. TypeScript definitions (`index.d.ts`) auto-generated from the Rust source.
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, current) — `sqlrite_master` gains a `type` column; secondary indexes persist as their own cell-based B-Trees whose leaves carry `KIND_INDEX` cells.
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