sqlrite 0.7.0__tar.gz → 0.9.0__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 (144) hide show
  1. {sqlrite-0.7.0 → sqlrite-0.9.0}/.github/workflows/ci.yml +12 -1
  2. {sqlrite-0.7.0 → sqlrite-0.9.0}/CLAUDE.md +11 -6
  3. {sqlrite-0.7.0 → sqlrite-0.9.0}/Cargo.lock +1181 -13
  4. {sqlrite-0.7.0 → sqlrite-0.9.0}/Cargo.toml +6 -3
  5. {sqlrite-0.7.0 → sqlrite-0.9.0}/Makefile +12 -0
  6. {sqlrite-0.7.0 → sqlrite-0.9.0}/PKG-INFO +1 -1
  7. {sqlrite-0.7.0 → sqlrite-0.9.0}/README.md +11 -4
  8. {sqlrite-0.7.0 → sqlrite-0.9.0}/desktop/package.json +1 -1
  9. {sqlrite-0.7.0 → sqlrite-0.9.0}/docs/_index.md +5 -0
  10. {sqlrite-0.7.0 → sqlrite-0.9.0}/docs/architecture.md +5 -5
  11. sqlrite-0.9.0/docs/benchmarks-plan.md +365 -0
  12. sqlrite-0.9.0/docs/benchmarks.md +203 -0
  13. sqlrite-0.9.0/docs/concurrent-writes-plan.md +412 -0
  14. {sqlrite-0.7.0 → sqlrite-0.9.0}/docs/design-decisions.md +19 -0
  15. {sqlrite-0.7.0 → sqlrite-0.9.0}/docs/roadmap.md +1 -1
  16. {sqlrite-0.7.0 → sqlrite-0.9.0}/docs/sql-engine.md +5 -3
  17. {sqlrite-0.7.0 → sqlrite-0.9.0}/docs/supported-sql.md +61 -4
  18. {sqlrite-0.7.0 → sqlrite-0.9.0}/pyproject.toml +1 -1
  19. {sqlrite-0.7.0 → sqlrite-0.9.0}/scripts/bump-version.sh +32 -1
  20. {sqlrite-0.7.0 → sqlrite-0.9.0}/sdk/python/Cargo.toml +1 -1
  21. {sqlrite-0.7.0 → sqlrite-0.9.0}/sqlrite-ask/Cargo.toml +1 -1
  22. {sqlrite-0.7.0 → sqlrite-0.9.0}/src/connection.rs +499 -63
  23. {sqlrite-0.7.0 → sqlrite-0.9.0}/src/lib.rs +3 -1
  24. {sqlrite-0.7.0 → sqlrite-0.9.0}/src/sql/executor.rs +1012 -85
  25. {sqlrite-0.7.0 → sqlrite-0.9.0}/src/sql/mod.rs +11 -2
  26. sqlrite-0.9.0/src/sql/params.rs +271 -0
  27. {sqlrite-0.7.0 → sqlrite-0.9.0}/src/sql/parser/select.rs +194 -25
  28. {sqlrite-0.7.0 → sqlrite-0.9.0}/.github/workflows/release-pr.yml +0 -0
  29. {sqlrite-0.7.0 → sqlrite-0.9.0}/.github/workflows/release.yml +0 -0
  30. {sqlrite-0.7.0 → sqlrite-0.9.0}/.github/workflows/rust.yml +0 -0
  31. {sqlrite-0.7.0 → sqlrite-0.9.0}/.gitignore +0 -0
  32. {sqlrite-0.7.0 → sqlrite-0.9.0}/CODE_OF_CONDUCT.md +0 -0
  33. {sqlrite-0.7.0 → sqlrite-0.9.0}/LICENSE +0 -0
  34. {sqlrite-0.7.0 → sqlrite-0.9.0}/MAINTAINERS +0 -0
  35. {sqlrite-0.7.0 → sqlrite-0.9.0}/desktop/index.html +0 -0
  36. {sqlrite-0.7.0 → sqlrite-0.9.0}/desktop/package-lock.json +0 -0
  37. {sqlrite-0.7.0 → sqlrite-0.9.0}/desktop/src/App.svelte +0 -0
  38. {sqlrite-0.7.0 → sqlrite-0.9.0}/desktop/src/app.css +0 -0
  39. {sqlrite-0.7.0 → sqlrite-0.9.0}/desktop/src/main.ts +0 -0
  40. {sqlrite-0.7.0 → sqlrite-0.9.0}/desktop/src/vite-env.d.ts +0 -0
  41. {sqlrite-0.7.0 → sqlrite-0.9.0}/desktop/svelte.config.js +0 -0
  42. {sqlrite-0.7.0 → sqlrite-0.9.0}/desktop/tsconfig.json +0 -0
  43. {sqlrite-0.7.0 → sqlrite-0.9.0}/desktop/vite.config.ts +0 -0
  44. {sqlrite-0.7.0 → sqlrite-0.9.0}/docs/ask-backend-examples.md +0 -0
  45. {sqlrite-0.7.0 → sqlrite-0.9.0}/docs/ask.md +0 -0
  46. {sqlrite-0.7.0 → sqlrite-0.9.0}/docs/desktop.md +0 -0
  47. {sqlrite-0.7.0 → sqlrite-0.9.0}/docs/embedding.md +0 -0
  48. {sqlrite-0.7.0 → sqlrite-0.9.0}/docs/file-format.md +0 -0
  49. {sqlrite-0.7.0 → sqlrite-0.9.0}/docs/fts.md +0 -0
  50. {sqlrite-0.7.0 → sqlrite-0.9.0}/docs/getting-started.md +0 -0
  51. {sqlrite-0.7.0 → sqlrite-0.9.0}/docs/mcp.md +0 -0
  52. {sqlrite-0.7.0 → sqlrite-0.9.0}/docs/pager.md +0 -0
  53. {sqlrite-0.7.0 → sqlrite-0.9.0}/docs/phase-7-plan.md +0 -0
  54. {sqlrite-0.7.0 → sqlrite-0.9.0}/docs/phase-8-plan.md +0 -0
  55. {sqlrite-0.7.0 → sqlrite-0.9.0}/docs/release-plan.md +0 -0
  56. {sqlrite-0.7.0 → sqlrite-0.9.0}/docs/release-secrets.md +0 -0
  57. {sqlrite-0.7.0 → sqlrite-0.9.0}/docs/smoke-test.md +0 -0
  58. {sqlrite-0.7.0 → sqlrite-0.9.0}/docs/storage-model.md +0 -0
  59. {sqlrite-0.7.0 → sqlrite-0.9.0}/docs/usage.md +0 -0
  60. {sqlrite-0.7.0 → sqlrite-0.9.0}/examples/README.md +0 -0
  61. {sqlrite-0.7.0 → sqlrite-0.9.0}/examples/c/Makefile +0 -0
  62. {sqlrite-0.7.0 → sqlrite-0.9.0}/examples/c/hello.c +0 -0
  63. {sqlrite-0.7.0 → sqlrite-0.9.0}/examples/go/go.mod +0 -0
  64. {sqlrite-0.7.0 → sqlrite-0.9.0}/examples/go/hello.go +0 -0
  65. {sqlrite-0.7.0 → sqlrite-0.9.0}/examples/hybrid-retrieval/README.md +0 -0
  66. {sqlrite-0.7.0 → sqlrite-0.9.0}/examples/hybrid-retrieval/hybrid_retrieval.rs +0 -0
  67. {sqlrite-0.7.0 → sqlrite-0.9.0}/examples/nodejs/hello.mjs +0 -0
  68. {sqlrite-0.7.0 → sqlrite-0.9.0}/examples/python/hello.py +0 -0
  69. {sqlrite-0.7.0 → sqlrite-0.9.0}/examples/rust/quickstart.rs +0 -0
  70. {sqlrite-0.7.0 → sqlrite-0.9.0}/examples/wasm/Makefile +0 -0
  71. {sqlrite-0.7.0 → sqlrite-0.9.0}/examples/wasm/index.html +0 -0
  72. {sqlrite-0.7.0 → sqlrite-0.9.0}/examples/wasm/server.mjs +0 -0
  73. {sqlrite-0.7.0 → sqlrite-0.9.0}/images/SQLRite - Desktop.png +0 -0
  74. {sqlrite-0.7.0 → sqlrite-0.9.0}/images/SQLRite Data Structures.png +0 -0
  75. {sqlrite-0.7.0 → sqlrite-0.9.0}/images/SQLRite Simple SQL Execution High Level Diagram.png +0 -0
  76. {sqlrite-0.7.0 → sqlrite-0.9.0}/images/SQLRite Simple SQL INSERT Execution High Level Diagram (Insert Row).png +0 -0
  77. {sqlrite-0.7.0 → sqlrite-0.9.0}/images/SQLRite Simple SQL INSERT Execution High Level Diagram.png +0 -0
  78. {sqlrite-0.7.0 → sqlrite-0.9.0}/images/SQLRite_logo.png +0 -0
  79. {sqlrite-0.7.0 → sqlrite-0.9.0}/images/architecture.png +0 -0
  80. {sqlrite-0.7.0 → sqlrite-0.9.0}/rust-toolchain.toml +0 -0
  81. {sqlrite-0.7.0 → sqlrite-0.9.0}/samples/AST.delete.example +0 -0
  82. {sqlrite-0.7.0 → sqlrite-0.9.0}/samples/AST.insert.exemple +0 -0
  83. {sqlrite-0.7.0 → sqlrite-0.9.0}/samples/AST.select.example +0 -0
  84. {sqlrite-0.7.0 → sqlrite-0.9.0}/samples/AST.update.example +0 -0
  85. {sqlrite-0.7.0 → sqlrite-0.9.0}/samples/CREATE TABLE sqlrite_schema.sql +0 -0
  86. {sqlrite-0.7.0 → sqlrite-0.9.0}/samples/CREATE_TABLE with duplicate.sql +0 -0
  87. {sqlrite-0.7.0 → sqlrite-0.9.0}/samples/CREATE_TABLE.sql +0 -0
  88. {sqlrite-0.7.0 → sqlrite-0.9.0}/samples/INSERT.sql +0 -0
  89. {sqlrite-0.7.0 → sqlrite-0.9.0}/sdk/go/README.md +0 -0
  90. {sqlrite-0.7.0 → sqlrite-0.9.0}/sdk/go/ask.go +0 -0
  91. {sqlrite-0.7.0 → sqlrite-0.9.0}/sdk/go/ask_test.go +0 -0
  92. {sqlrite-0.7.0 → sqlrite-0.9.0}/sdk/go/conn.go +0 -0
  93. {sqlrite-0.7.0 → sqlrite-0.9.0}/sdk/go/go.mod +0 -0
  94. {sqlrite-0.7.0 → sqlrite-0.9.0}/sdk/go/rows.go +0 -0
  95. {sqlrite-0.7.0 → sqlrite-0.9.0}/sdk/go/sqlrite.go +0 -0
  96. {sqlrite-0.7.0 → sqlrite-0.9.0}/sdk/go/sqlrite_test.go +0 -0
  97. {sqlrite-0.7.0 → sqlrite-0.9.0}/sdk/go/stmt.go +0 -0
  98. {sqlrite-0.7.0 → sqlrite-0.9.0}/sdk/python/README.md +0 -0
  99. {sqlrite-0.7.0 → sqlrite-0.9.0}/sdk/python/src/lib.rs +0 -0
  100. {sqlrite-0.7.0 → sqlrite-0.9.0}/sdk/python/tests/test_ask.py +0 -0
  101. {sqlrite-0.7.0 → sqlrite-0.9.0}/sdk/python/tests/test_sqlrite.py +0 -0
  102. {sqlrite-0.7.0 → sqlrite-0.9.0}/sqlrite-ask/README.md +0 -0
  103. {sqlrite-0.7.0 → sqlrite-0.9.0}/sqlrite-ask/src/lib.rs +0 -0
  104. {sqlrite-0.7.0 → sqlrite-0.9.0}/sqlrite-ask/src/prompt.rs +0 -0
  105. {sqlrite-0.7.0 → sqlrite-0.9.0}/sqlrite-ask/src/provider/anthropic.rs +0 -0
  106. {sqlrite-0.7.0 → sqlrite-0.9.0}/sqlrite-ask/src/provider/mock.rs +0 -0
  107. {sqlrite-0.7.0 → sqlrite-0.9.0}/sqlrite-ask/src/provider/mod.rs +0 -0
  108. {sqlrite-0.7.0 → sqlrite-0.9.0}/sqlrite-ask/tests/anthropic_http.rs +0 -0
  109. {sqlrite-0.7.0 → sqlrite-0.9.0}/src/ask/mod.rs +0 -0
  110. {sqlrite-0.7.0 → sqlrite-0.9.0}/src/ask/schema.rs +0 -0
  111. {sqlrite-0.7.0 → sqlrite-0.9.0}/src/error.rs +0 -0
  112. {sqlrite-0.7.0 → sqlrite-0.9.0}/src/main.rs +0 -0
  113. {sqlrite-0.7.0 → sqlrite-0.9.0}/src/meta_command/mod.rs +0 -0
  114. {sqlrite-0.7.0 → sqlrite-0.9.0}/src/repl/mod.rs +0 -0
  115. {sqlrite-0.7.0 → sqlrite-0.9.0}/src/sql/agg.rs +0 -0
  116. {sqlrite-0.7.0 → sqlrite-0.9.0}/src/sql/db/database.rs +0 -0
  117. {sqlrite-0.7.0 → sqlrite-0.9.0}/src/sql/db/mod.rs +0 -0
  118. {sqlrite-0.7.0 → sqlrite-0.9.0}/src/sql/db/secondary_index.rs +0 -0
  119. {sqlrite-0.7.0 → sqlrite-0.9.0}/src/sql/db/table.rs +0 -0
  120. {sqlrite-0.7.0 → sqlrite-0.9.0}/src/sql/fts/bm25.rs +0 -0
  121. {sqlrite-0.7.0 → sqlrite-0.9.0}/src/sql/fts/mod.rs +0 -0
  122. {sqlrite-0.7.0 → sqlrite-0.9.0}/src/sql/fts/posting_list.rs +0 -0
  123. {sqlrite-0.7.0 → sqlrite-0.9.0}/src/sql/fts/tokenizer.rs +0 -0
  124. {sqlrite-0.7.0 → sqlrite-0.9.0}/src/sql/hnsw.rs +0 -0
  125. {sqlrite-0.7.0 → sqlrite-0.9.0}/src/sql/pager/allocator.rs +0 -0
  126. {sqlrite-0.7.0 → sqlrite-0.9.0}/src/sql/pager/cell.rs +0 -0
  127. {sqlrite-0.7.0 → sqlrite-0.9.0}/src/sql/pager/file.rs +0 -0
  128. {sqlrite-0.7.0 → sqlrite-0.9.0}/src/sql/pager/freelist.rs +0 -0
  129. {sqlrite-0.7.0 → sqlrite-0.9.0}/src/sql/pager/fts_cell.rs +0 -0
  130. {sqlrite-0.7.0 → sqlrite-0.9.0}/src/sql/pager/header.rs +0 -0
  131. {sqlrite-0.7.0 → sqlrite-0.9.0}/src/sql/pager/hnsw_cell.rs +0 -0
  132. {sqlrite-0.7.0 → sqlrite-0.9.0}/src/sql/pager/index_cell.rs +0 -0
  133. {sqlrite-0.7.0 → sqlrite-0.9.0}/src/sql/pager/interior_page.rs +0 -0
  134. {sqlrite-0.7.0 → sqlrite-0.9.0}/src/sql/pager/mod.rs +0 -0
  135. {sqlrite-0.7.0 → sqlrite-0.9.0}/src/sql/pager/overflow.rs +0 -0
  136. {sqlrite-0.7.0 → sqlrite-0.9.0}/src/sql/pager/page.rs +0 -0
  137. {sqlrite-0.7.0 → sqlrite-0.9.0}/src/sql/pager/pager.rs +0 -0
  138. {sqlrite-0.7.0 → sqlrite-0.9.0}/src/sql/pager/table_page.rs +0 -0
  139. {sqlrite-0.7.0 → sqlrite-0.9.0}/src/sql/pager/varint.rs +0 -0
  140. {sqlrite-0.7.0 → sqlrite-0.9.0}/src/sql/pager/wal.rs +0 -0
  141. {sqlrite-0.7.0 → sqlrite-0.9.0}/src/sql/parser/create.rs +0 -0
  142. {sqlrite-0.7.0 → sqlrite-0.9.0}/src/sql/parser/insert.rs +0 -0
  143. {sqlrite-0.7.0 → sqlrite-0.9.0}/src/sql/parser/mod.rs +0 -0
  144. {sqlrite-0.7.0 → sqlrite-0.9.0}/src/sql/tokenizer.rs +0 -0
@@ -91,12 +91,20 @@ jobs:
91
91
  # rlib targets (unresolved Python/Node symbols). The per-SDK
92
92
  # `python-sdk` + `nodejs-sdk` jobs below exercise these
93
93
  # crates through their native tooling (maturin / napi-rs).
94
+ #
95
+ # - `sqlrite-benchmarks` is the SQLR-4 / SQLR-16 bench harness.
96
+ # Excluded from CI for two reasons: criterion benches are
97
+ # noisy on shared GitHub runners (the published numbers come
98
+ # from a pinned local host per Q1), and the bundled rusqlite
99
+ # build pulls in a heavy C toolchain that we don't want to
100
+ # pay on every PR. Run locally with `make bench`.
94
101
  - name: cargo build
95
102
  run: |
96
103
  cargo build --workspace \
97
104
  --exclude sqlrite-desktop \
98
105
  --exclude sqlrite-python \
99
106
  --exclude sqlrite-nodejs \
107
+ --exclude sqlrite-benchmarks \
100
108
  --all-targets
101
109
 
102
110
  - name: cargo test
@@ -104,7 +112,8 @@ jobs:
104
112
  cargo test --workspace \
105
113
  --exclude sqlrite-desktop \
106
114
  --exclude sqlrite-python \
107
- --exclude sqlrite-nodejs
115
+ --exclude sqlrite-nodejs \
116
+ --exclude sqlrite-benchmarks
108
117
 
109
118
  # ---------------------------------------------------------------------------
110
119
  # Rust: lint — fmt + clippy + doc. One cell (ubuntu) because these
@@ -140,6 +149,7 @@ jobs:
140
149
  --exclude sqlrite-desktop \
141
150
  --exclude sqlrite-python \
142
151
  --exclude sqlrite-nodejs \
152
+ --exclude sqlrite-benchmarks \
143
153
  --all-targets
144
154
 
145
155
  - name: cargo doc
@@ -150,6 +160,7 @@ jobs:
150
160
  --exclude sqlrite-desktop \
151
161
  --exclude sqlrite-python \
152
162
  --exclude sqlrite-nodejs \
163
+ --exclude sqlrite-benchmarks \
153
164
  --no-deps
154
165
 
155
166
  # ---------------------------------------------------------------------------
@@ -8,13 +8,14 @@ SQLRite is a from-scratch SQLite-style embedded database written in Rust. It's p
8
8
 
9
9
  ## Workspace layout
10
10
 
11
- `Cargo.toml` is a workspace whose members are: `.` (the engine, package `sqlrite-engine`, lib `sqlrite`), `desktop/src-tauri`, `sqlrite-ffi`, `sqlrite-ask`, `sqlrite-mcp`, `sdk/python`, `sdk/nodejs`. `sdk/wasm` and `sdk/go` are deliberately **not** workspace members (wasm32 target / cgo separation).
11
+ `Cargo.toml` is a workspace whose members are: `.` (the engine, package `sqlrite-engine`, lib `sqlrite`), `desktop/src-tauri`, `sqlrite-ffi`, `sqlrite-ask`, `sqlrite-mcp`, `sdk/python`, `sdk/nodejs`, `benchmarks`. `sdk/wasm` and `sdk/go` are deliberately **not** workspace members (wasm32 target / cgo separation).
12
12
 
13
13
  - `src/` — engine. Public API is `Connection`/`Statement`/`Rows`/`Row`/`Value` from [src/connection.rs](src/connection.rs), re-exported via [src/lib.rs](src/lib.rs). Any new SDK should bind only to this surface.
14
14
  - `sqlrite-ask/` — pure-Rust LLM adapter (Anthropic/OpenAI/Ollama) for natural-language → SQL. The engine's `ask` feature provides the thin `ConnectionAskExt::ask` glue.
15
15
  - `sqlrite-mcp/` — MCP stdio server. Seven tools: `list_tables`, `describe_table`, `query`, `execute`, `schema_dump`, `vector_search`, `ask`. `--read-only` opens with a shared lock and hides `execute`.
16
16
  - `sqlrite-ffi/` — C ABI cdylib + generated `sqlrite.h` header. Backs the Go SDK and any C consumer.
17
17
  - `desktop/` — Tauri 2 + Svelte 5 GUI. Embeds the engine directly (no FFI hop).
18
+ - `benchmarks/` — SQLR-4 / SQLR-16 bench harness. `Driver` trait + SQLRite + SQLite (rusqlite-bundled) drivers + criterion-driven workloads. Excluded from the default CI build/test/clippy/doc commands; run locally with `make bench` (or `make bench-duckdb`). See [docs/benchmarks-plan.md](docs/benchmarks-plan.md).
18
19
 
19
20
  Architecture deep-dive: [docs/architecture.md](docs/architecture.md). The full doc index is [docs/_index.md](docs/_index.md).
20
21
 
@@ -24,20 +25,20 @@ SQL string → [src/sql/mod.rs](src/sql/mod.rs) `process_command` parses with th
24
25
 
25
26
  ## Commands
26
27
 
27
- CI is the source of truth — the workspace excludes that follow are required because the desktop crate needs a Svelte build first and the PyO3/napi-rs cdylibs can't link standalone test binaries.
28
+ CI is the source of truth — the workspace excludes that follow are required because the desktop crate needs a Svelte build first, the PyO3/napi-rs cdylibs can't link standalone test binaries, and the `benchmarks/` harness deliberately stays out of CI (criterion is noisy on shared runners; the rusqlite-bundled build is heavy).
28
29
 
29
30
  ```sh
30
31
  # Build / test the Rust workspace (matches CI)
31
- cargo build --workspace --exclude sqlrite-desktop --exclude sqlrite-python --exclude sqlrite-nodejs --all-targets
32
- cargo test --workspace --exclude sqlrite-desktop --exclude sqlrite-python --exclude sqlrite-nodejs
32
+ cargo build --workspace --exclude sqlrite-desktop --exclude sqlrite-python --exclude sqlrite-nodejs --exclude sqlrite-benchmarks --all-targets
33
+ cargo test --workspace --exclude sqlrite-desktop --exclude sqlrite-python --exclude sqlrite-nodejs --exclude sqlrite-benchmarks
33
34
 
34
35
  # Single test (exact name; --nocapture to see println!)
35
36
  cargo test <test_name> -- --nocapture
36
37
 
37
38
  # Lint (CI runs all three)
38
39
  cargo fmt --all -- --check
39
- cargo clippy --workspace --exclude sqlrite-desktop --exclude sqlrite-python --exclude sqlrite-nodejs --all-targets
40
- cargo doc --workspace --exclude sqlrite-desktop --exclude sqlrite-python --exclude sqlrite-nodejs --no-deps
40
+ cargo clippy --workspace --exclude sqlrite-desktop --exclude sqlrite-python --exclude sqlrite-nodejs --exclude sqlrite-benchmarks --all-targets
41
+ cargo doc --workspace --exclude sqlrite-desktop --exclude sqlrite-python --exclude sqlrite-nodejs --exclude sqlrite-benchmarks --no-deps
41
42
 
42
43
  # Run the REPL (default features include cli + ask + file-locks)
43
44
  cargo run # in-memory
@@ -49,6 +50,10 @@ cargo build --release -p sqlrite-ffi # C cdylib + sqlrite.h
49
50
  cd desktop && npm install && npm run tauri dev # desktop app dev mode
50
51
  cargo run -p sqlrite-mcp -- /path/to.sqlrite # MCP server (stdio)
51
52
 
53
+ # Benchmarks (SQLR-4 / SQLR-16) — local-only, never CI
54
+ make bench # SQLRite + SQLite (lean)
55
+ make bench-duckdb # adds DuckDB driver (Group B only)
56
+
52
57
  # Release plumbing
53
58
  scripts/bump-version.sh 0.2.0 # bumps version across 11 manifests
54
59
  ```