motedb-python 0.14.0__tar.gz → 0.15.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.
- motedb_python-0.15.0/.github/workflows/node-publish.yml +185 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/CHANGELOG.md +142 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/Cargo.lock +8 -1
- {motedb_python-0.14.0 → motedb_python-0.15.0}/Cargo.toml +2 -1
- {motedb_python-0.14.0 → motedb_python-0.15.0}/PKG-INFO +1 -1
- {motedb_python-0.14.0 → motedb_python-0.15.0}/README.md +9 -0
- motedb_python-0.15.0/RELEASE_NOTES.md +99 -0
- motedb_python-0.15.0/bindings/go/README.md +44 -0
- motedb_python-0.15.0/bindings/go/go.mod +3 -0
- motedb_python-0.15.0/bindings/go/motedb.go +266 -0
- motedb_python-0.15.0/bindings/go/motedb.h +27 -0
- motedb_python-0.15.0/bindings/go/motedb_test.go +290 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/Cargo.lock +9 -2
- {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/Cargo.toml +1 -1
- {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/e2e/e2e_workload.py +2 -0
- motedb_python-0.15.0/bindings/python/e2e/test_snapshot_export.py +82 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/src/lib.rs +37 -0
- motedb_python-0.15.0/docs/design/2026-10-file-layout-plan.md +180 -0
- motedb_python-0.15.0/docs/design/2026-10-file-layout.md +160 -0
- motedb_python-0.15.0/examples/file_layout_bench.rs +153 -0
- motedb_python-0.15.0/examples/probe_ckpt.rs +72 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/examples/traj_spike.rs +5 -7
- {motedb_python-0.14.0 → motedb_python-0.15.0}/pyproject.toml +1 -1
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/api.rs +184 -19
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/catalog/registry.rs +90 -13
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/config.rs +7 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/database/core.rs +290 -229
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/database/crud.rs +64 -92
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/database/datasets.rs +4 -4
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/database/helpers.rs +2 -1
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/database/index_metadata.rs +50 -16
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/database/indexes/timestamp.rs +106 -12
- motedb_python-0.15.0/src/database/meta_store.rs +344 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/database/mod.rs +2 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/database/persistence.rs +198 -6
- motedb_python-0.15.0/src/database/snapshot.rs +406 -0
- motedb_python-0.15.0/src/ffi.rs +533 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/index/btree.rs +66 -15
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/mcap_import.rs +1 -1
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/sql/ast.rs +5 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/sql/evaluator.rs +91 -94
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/sql/executor/join.rs +1 -11
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/sql/executor/mod.rs +132 -1277
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/sql/executor/scan.rs +4 -129
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/sql/parser.rs +72 -43
- motedb_python-0.15.0/src/storage/col_segment/manifest.rs +790 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/col_segment/mod.rs +1 -1
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/col_segment/segment.rs +2 -2
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/col_segment/store.rs +139 -35
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/columnar/store.rs +6 -2
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/lsm/blobstore.rs +44 -16
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/txn/wal.rs +79 -57
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_blob_type.rs +102 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_col_segment.rs +19 -21
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_col_segment_fastpaths.rs +1 -1
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_corruption_recovery.rs +11 -3
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_datasets.rs +3 -3
- motedb_python-0.15.0/tests/test_file_layout.rs +284 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_fts_recovery_staleness.rs +17 -10
- motedb_python-0.15.0/tests/test_global_manifest.rs +488 -0
- motedb_python-0.15.0/tests/test_snapshot.rs +609 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_text_ts_search_semantics.rs +7 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_timeseries_semantics.rs +80 -0
- motedb_python-0.14.0/RELEASE_NOTES.md +0 -20
- motedb_python-0.14.0/src/ffi.rs +0 -110
- motedb_python-0.14.0/src/storage/col_segment/manifest.rs +0 -216
- {motedb_python-0.14.0 → motedb_python-0.15.0}/.cargo/config.toml +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/.devcontainer/devcontainer.json +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/.github/workflows/ci.yml +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/.github/workflows/fuzz.yml +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/.github/workflows/perf-gate.yml +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/.github/workflows/publish.yml +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/.github/workflows/python-wheels.yml +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/.gitignore +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/.zcode/plans/plan-sess_abb2c954-05fb-477e-9d0a-3e22261e2449.md +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/.zcode/plans/plan-sess_b5937a06-b7bf-4471-9756-dbf2787b263c.md +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/LICENSE +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/Makefile +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/README.md +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/bench/README.md +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/bench/adversarial_verify.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/bench/bench_edge.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/bench/compete_bench.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/bench/compete_fts_industry.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/bench/compete_scale.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/bench/compete_spatial_ts.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/bench/compete_vec_industry.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/bench/compete_writes.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/bench/fts_probe_once.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/bench/perf_ab.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/bench/perf_overall.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/bench/prof_ann.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/bench/prof_fts.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/bench/prof_insert.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/bench/prof_point.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/bench/prof_real.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/bench/prof_scale.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/bench/prof_scale_vec.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/bench/prof_vec_parallel.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/bench/resource_bench.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/bench/resource_bench_2026-09_profile.json +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/bench/resource_bench_v0.10.0.json +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/bench/spatial_eval.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/bench/text_eval.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/bench/ts_eval.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/bench/vector_recall_eval.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/build.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/e2e/test_durability_kwarg.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/licenses/LICENSE +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/scripts/build_wheel.sh +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/tests/data/demo.mcap +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/tests/test_backup.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/tests/test_crash_recovery.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/tests/test_e2e_cli.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/tests/test_e2e_functional.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/tests/test_feature_selfcheck.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/tests/test_fetch_arrays.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/tests/test_fuzz_bigtable.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/tests/test_fuzz_differential.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/tests/test_insert_arrays.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/tests/test_mcap_import.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/tests/test_parallel_ab.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/tests/test_smoke.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/deny.toml +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/docs/01-quick-start.md +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/docs/02-installation.md +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/docs/03-sql-operations.md +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/docs/04-batch-operations.md +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/docs/05-transactions.md +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/docs/06-indexes-overview.md +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/docs/07-column-index.md +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/docs/08-vector-index.md +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/docs/09-text-index.md +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/docs/10-spatial-index.md +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/docs/11-timestamp-index.md +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/docs/12-performance.md +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/docs/13-data-types.md +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/docs/14-api-reference.md +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/docs/15-best-practices.md +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/docs/16-faq.md +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/docs/17-hybrid-arrow.md +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/docs/README.md +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/docs/benchmark_methodology.md +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/docs/design/2026-10-embodied-roadmap.md +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/docs/design/2026-10-traj-spike.md +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/docs/paper/README.md +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/docs/paper/motedb.tex +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/examples/bench_300k.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/examples/bench_autocommit_lock.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/examples/bench_disk.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/examples/bench_exec_only.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/examples/bench_insert_engine.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/examples/bench_layer.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/examples/bench_memory.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/examples/bench_multimodal_vs_competitors.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/examples/bench_point_read.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/examples/bench_profile_hot.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/examples/bench_scaling.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/examples/bench_stability.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/examples/bench_vs_sqlite.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/examples/corruption_fuzz.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/examples/crud.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/examples/differential_fuzz.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/examples/gen_test_bag.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/examples/hello_world.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/examples/join_differential_fuzz.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/examples/logging.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/examples/perf_smoke.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/examples/probe_filter_decomp.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/examples/probe_jemalloc.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/examples/probe_memory_source.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/examples/probe_tail_latency.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/examples/text_rank_probe.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/examples/vector_recall_real.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/licenses/LICENSE +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/python/motedb/__init__.py +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/scripts/Dockerfile.e2e +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/scripts/compete.sh +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/scripts/docker_e2e.sh +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/scripts/repro_point_query_gap.sh +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/bin/motedb-cli.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/cache/mod.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/cache/row_cache.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/catalog/mod.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/database/doctor.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/database/indexes/column.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/database/indexes/dashmap_migration.md +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/database/indexes/ioctree.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/database/indexes/mod.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/database/indexes/text.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/database/indexes/vector.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/database/mem_buffer.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/database/pk_cache.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/database/table.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/database/timeseries.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/database/transaction.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/distance/cosine.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/distance/euclidean.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/distance/mod.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/error.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/index/btree_generic.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/index/builder.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/index/cached_index.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/index/column_value.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/index/fresh_graph.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/index/ioctree/leaf_store.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/index/ioctree/mod.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/index/ioctree/node.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/index/ioctree/persistence.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/index/ioctree/search.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/index/mod.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/index/primary_key.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/index/text_dictionary.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/index/text_encoding.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/index/text_fts.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/index/text_query.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/index/text_types.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/index/tokenizers.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/index/vamana/config.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/index/vamana/disk_graph.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/index/vamana/diskann_index.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/index/vamana/mod.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/index/vamana/pruner.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/index/vamana/sq8.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/index/vamana/sq8_vectors.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/lib.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/platform_io.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/sql/executor/agg.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/sql/join/hash_join.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/sql/join/index_join.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/sql/join/mod.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/sql/lexer.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/sql/mod.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/sql/optimizer.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/sql/row_converter.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/sql/token.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/sql/vector_exec.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/checksum.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/col_segment/merge.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/colbatch.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/columnar/column_encoding.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/columnar/config.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/columnar/gorilla.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/columnar/mod.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/columnar/segment.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/columnar/segment_manager.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/columnar/write_buffer.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/file_manager.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/lsm/bloom.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/lsm/columnar.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/lsm/compaction.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/lsm/engine.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/lsm/memtable.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/lsm/merging_iterator.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/lsm/mod.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/lsm/sstable.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/lsm/unified_memtable.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/manifest/manifest.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/manifest/mod.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/manifest/version.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/mod.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/row_format.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/txn/coordinator.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/txn/lock_manager.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/txn/mod.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/txn/mvcc.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/txn/recovery.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/txn/version_store.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/types/comp_sum.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/types/mod.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/types/spatial.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/types/table.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/types/tensor.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/types/text.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/src/types/timestamp.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/acid_test.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/bench_2m.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/bench_acid.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/bench_batch_ops.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/bench_compare.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/bench_comprehensive.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/bench_concurrent.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/bench_index_ops.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/bench_multimodal.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/bench_multimodal_full.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/bench_multimodal_ops.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/bench_perf_report.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/bench_quick_baseline.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/bench_release.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/bench_report.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/bench_resource.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/bench_sql_queries.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/bench_timeseries_index.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/bench_v060_report.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/bench_vs_sqlite_100k.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/bench_vs_sqlite_v05.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/common/mod.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/durability_probe.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/fts_probe.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/perf_test.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/repro_multirow_update_fts.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/repro_point_gap.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/stress_300k.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/stress_test.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_acid_audit.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_acid_comprehensive.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_advanced_hunt.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_api_correctness.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_asof_join.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_auto_checkpoint_segments.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_backup.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_btree_integrity.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt2.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt3.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt4.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt5.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt6.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt7.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v10.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v100.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v101.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v11.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v12.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v13.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v14.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v15.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v16.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v17_cte.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v18.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v19.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v2.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v20.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v21.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v22.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v23.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v24.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v25.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v26.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v27.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v28.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v29.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v3.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v30.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v31.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v32.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v33.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v34.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v35.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v36.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v38.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v39.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v4.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v40.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v43.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v45.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v48.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v49.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v5.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v50.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v51.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v52.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v53.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v54.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v55.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v56.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v57.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v58.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v59.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v6.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v60.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v61.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v62.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v63.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v64.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v65.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v66.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v67.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v68.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v69.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v7.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v70.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v71.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v72.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v73.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v74.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v75.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v76.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v77.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v78.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v79.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v8.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v80.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v81.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v82.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v83.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v84.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v85.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v86.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v87.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v88.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v89.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v9.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v90.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v91.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v92.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v93.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v94.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v95.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v96.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v97.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v98.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v99.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_columnar.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_columnar_acid.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_compact_storage.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_compaction_integrity.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_compiled_where_semantics.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_comprehensive.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_comprehensive_audit.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_concurrent_sql_features.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_concurrent_stress.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_corruption_robustness.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_crash_injection.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_crash_recovery.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_data_types.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_db_path_hygiene.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_deadlock_stress.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_deep_edge.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_delete_persist.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_differential_correctness.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_disk_bloat.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_disk_usage.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_doctor.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_durability.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_e2e_crash_and_stress.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_edge_cases.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_edge_semantics.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_episodes.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_executemany.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_exists_subquery.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_explain.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_extreme_hunt.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_fast_paths.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_fuzz_sql_combinations.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_groupby_first_query.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_hybrid_search.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_index_maintenance.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_index_reopen.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_index_robustness.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_indexed_query_semantics.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_insert_engine.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_insert_explicit_fastpath.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_insert_paths_index_maintenance.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_insert_select.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_ioctree.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_isolation_levels.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_join_count_fold.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_knn_parallel.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_large_rows.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_m5_mines.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_mcap_import.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_memory_leak.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_memory_linear.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_multimodal.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_multimodal_e2e.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_mvcc_isolation.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_mvcc_recovery.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_no_bloat.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_optimization_regression.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_order_by_expr_keys.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_parser_fuzz_regression.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_performance_guarantees.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_pk_change_semantics.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_prepared_dml.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_public_api.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_query_equivalence.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_range_count.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_release_readiness.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_repro12.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_round12_optimizations.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_round12b_edge.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_round12c_e2e_bugs.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_round13_bug_hunt.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_row_api.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_rrf_hybrid.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_savepoint_window.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_scalability.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_scan_integrity.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_semantic_edges.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_spatial_index.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_spatial_large_geometry.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_spatial_sql_semantics.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_sql_advanced.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_sql_correctness.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_sql_correctness_part2.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_sql_ddl_features.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_sql_errors_edges.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_sql_functions.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_sql_groupby.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_sql_joins.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_sql_scenarios.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_storage_integrity.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_stress.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_stress_hunt.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_timeseries_index.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_timestamp_recovery.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_transaction_semantics.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_txn_ddl_and_nan_ordering.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_update_perf.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_upsert.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_v050_features.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_vec_m0.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_vec_m4.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_vector_column_read_paths.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_vector_durability.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_vector_index_recall.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_vector_spatial_text.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_vector_visibility.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_wide_tables.rs +0 -0
- {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_write_concurrency.rs +0 -0
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
name: Node SDK publish (npm)
|
|
2
|
+
|
|
3
|
+
# Multi-platform prebuilt napi binaries → npm optional packages:
|
|
4
|
+
# motedb (main) + motedb-darwin-arm64 / -darwin-x64 /
|
|
5
|
+
# motedb-linux-x64-gnu / -linux-arm64-gnu / -win32-x64-msvc
|
|
6
|
+
# Triggers on v* tags (publish) and PRs touching the binding (build-only).
|
|
7
|
+
|
|
8
|
+
on:
|
|
9
|
+
push:
|
|
10
|
+
tags: ["v*"]
|
|
11
|
+
pull_request:
|
|
12
|
+
paths:
|
|
13
|
+
- "bindings/node/**"
|
|
14
|
+
- ".github/workflows/node-publish.yml"
|
|
15
|
+
workflow_dispatch:
|
|
16
|
+
|
|
17
|
+
concurrency:
|
|
18
|
+
group: node-publish-${{ github.ref }}
|
|
19
|
+
cancel-in-progress: true
|
|
20
|
+
|
|
21
|
+
permissions:
|
|
22
|
+
contents: write
|
|
23
|
+
id-token: write
|
|
24
|
+
|
|
25
|
+
jobs:
|
|
26
|
+
build:
|
|
27
|
+
strategy:
|
|
28
|
+
fail-fast: false
|
|
29
|
+
matrix:
|
|
30
|
+
include:
|
|
31
|
+
- os: macos-latest # arm64
|
|
32
|
+
target: aarch64-apple-darwin
|
|
33
|
+
- os: macos-13 # x64
|
|
34
|
+
target: x86_64-apple-darwin
|
|
35
|
+
- os: ubuntu-latest # x64 gnu
|
|
36
|
+
target: x86_64-unknown-linux-gnu
|
|
37
|
+
- os: ubuntu-24.04-arm
|
|
38
|
+
target: aarch64-unknown-linux-gnu
|
|
39
|
+
- os: windows-latest
|
|
40
|
+
target: x86_64-pc-windows-msvc
|
|
41
|
+
runs-on: ${{ matrix.os }}
|
|
42
|
+
steps:
|
|
43
|
+
- uses: actions/checkout@v4
|
|
44
|
+
|
|
45
|
+
- uses: actions/setup-node@v4
|
|
46
|
+
with:
|
|
47
|
+
node-version: 22
|
|
48
|
+
|
|
49
|
+
- uses: dtolnay/rust-toolchain@stable
|
|
50
|
+
with:
|
|
51
|
+
targets: ${{ matrix.target }}
|
|
52
|
+
|
|
53
|
+
- uses: Swatinem/rust-cache@v2
|
|
54
|
+
with:
|
|
55
|
+
workspaces: bindings/node
|
|
56
|
+
key: ${{ matrix.target }}
|
|
57
|
+
|
|
58
|
+
- name: Install napi CLI
|
|
59
|
+
working-directory: bindings/node
|
|
60
|
+
run: npm install --no-save @napi-rs/cli@3.10.8
|
|
61
|
+
|
|
62
|
+
- name: Build (napi layout)
|
|
63
|
+
working-directory: bindings/node
|
|
64
|
+
shell: bash
|
|
65
|
+
run: |
|
|
66
|
+
set -e
|
|
67
|
+
ARGS=(--release --platform --target ${{ matrix.target }} --js false --dts false)
|
|
68
|
+
if [[ "${{ matrix.target }}" == x86_64-unknown-linux-gnu ]]; then
|
|
69
|
+
# musl-free runners: keep default gnu toolchain
|
|
70
|
+
ARGS+=(--cargo-flags="--features jemalloc")
|
|
71
|
+
fi
|
|
72
|
+
npx napi build "${ARGS[@]}"
|
|
73
|
+
|
|
74
|
+
- name: Smoke (JS loader)
|
|
75
|
+
if: matrix.target == 'aarch64-apple-darwin' || matrix.target == 'x86_64-unknown-linux-gnu'
|
|
76
|
+
working-directory: bindings/node
|
|
77
|
+
shell: bash
|
|
78
|
+
run: |
|
|
79
|
+
cat > /tmp/smoke.js <<'JS'
|
|
80
|
+
const Database = require('../bindings/node');
|
|
81
|
+
const os = require('node:os'), path = require('node:path'), fs = require('node:fs');
|
|
82
|
+
const dir = fs.mkdtempSync(path.join(os.tmpdir(), 'motedb-ci-'));
|
|
83
|
+
const db = new Database(path.join(dir, 't.mote'));
|
|
84
|
+
db.execute('CREATE TABLE t (id INT PRIMARY KEY, emb VECTOR(2), data BLOB)');
|
|
85
|
+
for (let i = 0; i < 10; i++) {
|
|
86
|
+
db.execute('INSERT INTO t VALUES (?, ?, ?)',
|
|
87
|
+
[i, [i, -i], Buffer.from([1, 2, i])]);
|
|
88
|
+
}
|
|
89
|
+
const nn = db.query('SELECT id FROM t ORDER BY emb <-> [5, -5] LIMIT 1');
|
|
90
|
+
if (nn[0].id !== 5) throw new Error('knn ' + JSON.stringify(nn));
|
|
91
|
+
db.checkpoint();
|
|
92
|
+
const again = new Database(path.join(dir, 't.mote'));
|
|
93
|
+
if (again.query('SELECT COUNT(*) AS n FROM t')[0].n !== 10) throw new Error('reopen');
|
|
94
|
+
again.close();
|
|
95
|
+
fs.rmSync(dir, { recursive: true, force: true });
|
|
96
|
+
console.log('smoke OK');
|
|
97
|
+
JS
|
|
98
|
+
node /tmp/smoke.js
|
|
99
|
+
|
|
100
|
+
- name: Upload binding artifact
|
|
101
|
+
uses: actions/upload-artifact@v4
|
|
102
|
+
with:
|
|
103
|
+
name: bindings-${{ matrix.target }}
|
|
104
|
+
path: bindings/node/*.node
|
|
105
|
+
if-no-files-found: error
|
|
106
|
+
|
|
107
|
+
package:
|
|
108
|
+
needs: build
|
|
109
|
+
runs-on: ubuntu-latest
|
|
110
|
+
steps:
|
|
111
|
+
- uses: actions/checkout@v4
|
|
112
|
+
- uses: actions/setup-node@v4
|
|
113
|
+
with:
|
|
114
|
+
node-version: 22
|
|
115
|
+
- name: Install napi CLI
|
|
116
|
+
working-directory: bindings/node
|
|
117
|
+
run: npm install --no-save @napi-rs/cli@3.10.8
|
|
118
|
+
- name: Create npm dirs
|
|
119
|
+
working-directory: bindings/node
|
|
120
|
+
run: npx napi create-npm-dirs
|
|
121
|
+
- uses: actions/download-artifact@v4
|
|
122
|
+
with:
|
|
123
|
+
path: bindings/node/artifacts
|
|
124
|
+
- name: Place binaries into npm dirs
|
|
125
|
+
working-directory: bindings/node
|
|
126
|
+
shell: bash
|
|
127
|
+
run: |
|
|
128
|
+
set -e
|
|
129
|
+
for d in artifacts/bindings-*; do
|
|
130
|
+
target="${d#artifacts/bindings-}"
|
|
131
|
+
npx napi artifacts "$d" --target "$target"
|
|
132
|
+
done
|
|
133
|
+
ls -R npm | head -40
|
|
134
|
+
- name: Dry-run publish (structure validation only)
|
|
135
|
+
if: ${{ !startsWith(github.ref, 'refs/tags/v') }}
|
|
136
|
+
working-directory: bindings/node
|
|
137
|
+
shell: bash
|
|
138
|
+
run: |
|
|
139
|
+
set -e
|
|
140
|
+
# pre-publish performs REAL npm publishes, so staging (PRs) only
|
|
141
|
+
# validates each platform package with npm publish --dry-run.
|
|
142
|
+
for d in npm/*/; do
|
|
143
|
+
(cd "$d" && npm publish --dry-run --access public) || exit 1
|
|
144
|
+
done
|
|
145
|
+
npm pack --dry-run
|
|
146
|
+
|
|
147
|
+
publish:
|
|
148
|
+
needs: [build, package]
|
|
149
|
+
if: startsWith(github.ref, 'refs/tags/v')
|
|
150
|
+
runs-on: ubuntu-latest
|
|
151
|
+
environment: npm
|
|
152
|
+
steps:
|
|
153
|
+
- uses: actions/checkout@v4
|
|
154
|
+
- uses: actions/setup-node@v4
|
|
155
|
+
with:
|
|
156
|
+
node-version: 22
|
|
157
|
+
registry-url: https://registry.npmjs.org
|
|
158
|
+
- name: Install napi CLI
|
|
159
|
+
working-directory: bindings/node
|
|
160
|
+
run: npm install --no-save @napi-rs/cli@3.10.8
|
|
161
|
+
- name: Create npm dirs
|
|
162
|
+
working-directory: bindings/node
|
|
163
|
+
run: npx napi create-npm-dirs
|
|
164
|
+
- uses: actions/download-artifact@v4
|
|
165
|
+
with:
|
|
166
|
+
path: bindings/node/artifacts
|
|
167
|
+
- name: Place binaries into npm dirs
|
|
168
|
+
working-directory: bindings/node
|
|
169
|
+
shell: bash
|
|
170
|
+
run: |
|
|
171
|
+
set -e
|
|
172
|
+
for d in artifacts/bindings-*; do
|
|
173
|
+
target="${d#artifacts/bindings-}"
|
|
174
|
+
npx napi artifacts "$d" --target "$target"
|
|
175
|
+
done
|
|
176
|
+
- name: Publish platform packages + root
|
|
177
|
+
# 🔑 napi pre-publish IS the publish command: it validates all
|
|
178
|
+
# platform packages, then runs `npm publish` for each + the root.
|
|
179
|
+
# Requires the NPM_TOKEN secret (automation token, npmjs.com →
|
|
180
|
+
# motedb → Access Tokens → Generate). Without it this job fails
|
|
181
|
+
# with ENEEDAUTH.
|
|
182
|
+
working-directory: bindings/node
|
|
183
|
+
env:
|
|
184
|
+
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
185
|
+
run: ./node_modules/.bin/napi pre-publish -p npm
|
|
@@ -1,5 +1,147 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.15.0] — 2026-10-17
|
|
4
|
+
|
|
5
|
+
### 存储文件布局收敛 (docs/design/2026-10-file-layout{,-plan}.md, P1~P4)
|
|
6
|
+
|
|
7
|
+
- **P1 惰性文件创建 + 死文件清理**: WAL 分区文件首写物化、CHECKPOINT
|
|
8
|
+
由截断改为删除(缺失=空语义); 纯 Standard 库不再创建空 `columnar/`;
|
|
9
|
+
LSM blob 首写物化; `indexes/timestamp.idx` 惰性化(LazyTsIndex, 无
|
|
10
|
+
TIMESTAMP 列的库不建 `indexes/`); `fts_indexes.fresh` → `.clean_close`
|
|
11
|
+
(旧名一次性兼容)。空库固定文件 11→4, 零写入库常驻 fd 6→1
|
|
12
|
+
- **P2 全局单一 MANIFEST**: v2 记录携带 table_id + DropTable;
|
|
13
|
+
全库一个 `columnar_ms/MANIFEST` — 每表 -1 文件 -1 常驻 fd, fd 不再随
|
|
14
|
+
表数线性增长(50 表实测进程 fd<40, 原为 56+)。v0.14 旧布局打开即
|
|
15
|
+
自动迁移(先写后删 + 重入幂等); manifest 尾损坏孤儿领养语义不变
|
|
16
|
+
- **P3 meta.bin 四合一**: catalog/index 元数据/LSN/干净关闭旗标并入
|
|
17
|
+
单个分节容器(每节 CRC32 + header flags), 任一节更新整文件原子重写;
|
|
18
|
+
旧三文件字节透明采纳后清理。🔒 catalog 节损坏/魔数不识别 → fail-fast
|
|
19
|
+
硬错误(对齐旧 corrupt catalog 行为, 杜绝空注册表覆盖备份)
|
|
20
|
+
- **P4 EXPORT/IMPORT 单文件快照 (MOTESNAP)**: `EXPORT DB TO 'snap.mote'
|
|
21
|
+
[COMPRESSED]` — 数据库的"运输形态": 顺序流式条目 + 每文件 CRC32 +
|
|
22
|
+
逐文件 zstd, 1MiB 缓冲内存有界; 静默纪律复用 backup_to 全套
|
|
23
|
+
(CAS+checkpoint_mutex+全写条纹+WAL 截断)。导入: 路径穿越防护 +
|
|
24
|
+
逐条校验 + 截断检测, 产物即 P3 布局。Rust API/FFI/Python/Node/Go
|
|
25
|
+
全接线(`export_snapshot`/`open_snapshot`/`export_to`/
|
|
26
|
+
`import_snapshot`/`ExportSnapshot`/`ImportSnapshot`)
|
|
27
|
+
- **总账**: 库固定文件 11→4(.lock/meta.bin/MANIFEST/数据段); 文件
|
|
28
|
+
3+表数+索引数; fd 恒定个位数; 断电语义未动(temp+rename/孤儿领养/
|
|
29
|
+
per-segment mmap); 每阶段旧格式读兼容。测试: test_file_layout 5/5 ·
|
|
30
|
+
test_global_manifest 8/8 · test_snapshot 5/5 · corruption 4/4 ·
|
|
31
|
+
全量回归零 FAILED · 同机 A/B(file_layout_bench) 吞吐零回退
|
|
32
|
+
- **F1 性能修复(布局收敛审查发现)**: 全局 MANIFEST 增量内存状态 — 打开
|
|
33
|
+
时解析一次(原每 store 全量重解析, N 表 = N 次); manifest compaction —
|
|
34
|
+
文件超过 max(64KB, 4×活跃态)时最简重写(AddSegment×active + Retired×
|
|
35
|
+
文件仍在的退役 id + DropTable), 退役 id 按段文件存在性裁剪(段 id 单调
|
|
36
|
+
不复用, 文件已删者彻底遗忘) → churn 下有界常量。实测 50 表×60 轮:
|
|
37
|
+
manifest 210KB→17KB, 打开 77ms→17.6ms(4.4×); 修复 ever_seen 多重集
|
|
38
|
+
计数膨胀 2-3× 导致阈值永不触发的 bug。恢复扫描 Vec→HashSet
|
|
39
|
+
- **F2 checkpoint 成本优化(纯省略型, 零持久化语义变化)**: 分解发现脏
|
|
40
|
+
checkpoint ~28ms 中三项是"写没变的数据" — ① AUTO_INCREMENT 计数器
|
|
41
|
+
未变也全量重写 catalog 节 → registry 脏标记(写方持锁置位/快照持锁
|
|
42
|
+
清除, 无丢更新窗口), 干净则零 fsync; ② LSN 节与 catalog 节两次整文件
|
|
43
|
+
重写 → update_sections 合并为单次原子重写; ③ manifest 无新记录也
|
|
44
|
+
fsync → append/sync 脏标记, 空转跳过。noop checkpoint 0.05ms 不变;
|
|
45
|
+
实测脏 checkpoint: 1 表 28→24.5ms, 50 表 42→24.6ms (表数平坦化,
|
|
46
|
+
每表边际成本 ~0.3ms→~0)。剩余固定成本: legacy 双写缓冲 ~5ms(方案 E
|
|
47
|
+
范畴)、WAL 截断 3.3ms 与 meta LSN 重写 4.1ms(均为真耐久性开销)。
|
|
48
|
+
新增 examples/probe_ckpt.rs
|
|
49
|
+
- **BLOB 缺口完全修复 (v0.13 已知缺口关闭)**: WHERE <int 列> <op> <
|
|
50
|
+
字面量> 路由的 scan_i64_filtered_limit 两处缺陷 — ① 文本段装载门只
|
|
51
|
+
匹配 ColumnTypeTag::Text(Blob 列不装载) ② 输出臂缺 ColumnType::Blob
|
|
52
|
+
— 修复后 int 过滤查询下 blob 列(裸投影/LENGTH/混合列/ORDER BY/重开)
|
|
53
|
+
全部正确。隔离单测 + SQL 级回归 test_blob_type 5/5
|
|
54
|
+
- **🔑 方案 E: TimeSeries 引擎统一 (v0.15 最大结构清理)**: TIMESERIES(ts)
|
|
55
|
+
表改由统一的 ColSegmentStore 服务 — 与标准表同一条写/读/恢复路径,
|
|
56
|
+
旧 ColumnarStore 引擎退出运行时 (仅保留只读迁移用途)。写路径:
|
|
57
|
+
get_or_create 放开 + INSERT 统一准备路径 + API 快解析去 TS 绕行;
|
|
58
|
+
读路径: 移除 executor 10 处 TS 专属路由/优化臂 (latest_by/order_limit/
|
|
59
|
+
simple_aggregate/columnar_select/窗口源等, 死代码 ~600 行删除),
|
|
60
|
+
LATEST BY/ORDER BY/聚合走通用路径; 恢复: WAL 回放并入标准 by_table
|
|
61
|
+
重放; 迁移: 打开时 .mcdb → 段存储一次性拷贝(幂等) + next_row_id
|
|
62
|
+
推进(修复迁移后新插入覆盖同号迁移行 — 探针实测发现); TTL/DELETE
|
|
63
|
+
时间窗重写为段存储 tombstone 版 (gc_timeseries)。顺带修复两个被旧
|
|
64
|
+
路径掩盖的存量 bug: ① TableRowStreamingInner Columnar 解码缺
|
|
65
|
+
TIMESTAMP 臂(物化路径读 ts 变 Integer) ② BTree superblock 内联页偏移
|
|
66
|
+
表超 4096 保留区 — 任何 10 万行 ts-first 表 close 即炸("SuperBlock
|
|
67
|
+
too large"), v3 64KB 保留 + >2M 键降级重建阀。实测: TS 与标准表
|
|
68
|
+
checkpoint 同价 (18.2ms vs 18.3ms, legacy flush 退出); 迁移探针全绿
|
|
69
|
+
(3000 行 .mcdb → 段存储 → 新插入/LATEST BY/重开无重复无丢失);
|
|
70
|
+
TS 语义 13+18、columnar/crash/backup 全绿
|
|
71
|
+
- **🔑 容器模式 (只读快照直开)**: `Database::open_readonly('snap.mote')`
|
|
72
|
+
及 `open()` 自动路由(命中 MOTESNAP 魔数的文件) — 部署形态落地: 固件
|
|
73
|
+
预置库一个文件分发, 打开即查。实现: 容器幂等解包到系统临时目录的
|
|
74
|
+
per-container 缓存(FNV 路径哈希 + size/mtime 新鲜度戳, 容器变更自动
|
|
75
|
+
重解包); 引擎级只读门 — 全部写语句拒绝(SQL 快路径+executor 双入口+
|
|
76
|
+
insert_rows 直写 API), checkpoint/vacuum/backup/export 禁用, 不取
|
|
77
|
+
flock(多读者共存), 后台写线程不启动, 关闭免盖章; trusted-clean 跳过
|
|
78
|
+
崩溃校验(容器导出时已静默+checkpoint)。源容器文件字节级不变(验收
|
|
79
|
+
断言)。回归 test_snapshot 6/6(查询正确性含 BLOB/TS/FTS、八类写拒绝、
|
|
80
|
+
字节不变、自动路由、双句柄共存、非容器报错)
|
|
81
|
+
- **发布前审计修复 ×4**: ① BTree read_superblock 对 <64KB 文件 read_exact
|
|
82
|
+
EOF — v2 升级路径与零页 v3 文件(空表建索引)重开即炸; 改 EOF-容忍读+
|
|
83
|
+
零填充 ② execute_prepared/many 走 execute_streaming_ref — 绕过容器
|
|
84
|
+
只读门, 补门 ③ Python/Node 构造器 create-or-open 启发式绕过 open()
|
|
85
|
+
容器自动路由 — Python 补魔数检测, Node/Go 经 api::open 已覆盖(FFI
|
|
86
|
+
直连) ④ create+read_only 组合显式拒绝。bindings 全面复验(方案 E 后
|
|
87
|
+
首次): Python e2e×3 + TS/容器冒烟、Node 冒烟×2、Go 测试×7 全过;
|
|
88
|
+
e2e time_bucket 断言适配通用 GROUP BY 哈希序
|
|
89
|
+
- **发布前审计轮 2 (升级路径专项) ×3**:
|
|
90
|
+
- 🔴 BTree v3 版本检查曾把存量 v2 索引文件静默重置为空 — 干净关闭的库
|
|
91
|
+
无 WAL 重放 → 索引重建被跳过 → 所有列索引升级即丢(索引驱动查询
|
|
92
|
+
悄悄返回空)。改为 v2 保持可读(序列化布局未变, 仅写侧保留区扩大),
|
|
93
|
+
仅 v1 重建、更新版本硬错误。回归: 索引版本字节改 2 后重开查询正确
|
|
94
|
+
- 🔴 方案 E 迁移曾位于 WAL 回放之后 — 崩溃升级(旧库带未 checkpoint
|
|
95
|
+
的 WAL)时回放先填 store → '非空即跳过迁移' → .mcdb 已 checkpoint
|
|
96
|
+
行丢失; 且即便迁移, 其版本时间戳高于回放行, 旧行会错误胜出。迁移
|
|
97
|
+
移到回放前(空 store 判定成立 + 回放行 newest-wins 正确覆盖), 计数
|
|
98
|
+
播种加守卫(有重放的表不播, COUNT 走扫描保正确)。回归: TS 崩溃恢复
|
|
99
|
+
(300 行不 checkpoint 丢句柄重开全量可见)
|
|
100
|
+
- 🟡 多进程同时首开同一容器: 解包竞争落败方曾直接报错 — 改私有临时
|
|
101
|
+
目录 + 戳最后写入 + 原子 rename 舞步(胜者采纳/陈旧替换)。回归:
|
|
102
|
+
并发 open_readonly 双成功
|
|
103
|
+
- **发布前审计轮 3 (派生数据自愈链) ×3**:
|
|
104
|
+
- 🔴 列索引静默空泛化修复: BTree 降级阀(>2M 键, 偏移表被丢弃 → 打开
|
|
105
|
+
重置为空)及任何未来'索引载入为空'路径, 在干净关闭(无 WAL 重放)下
|
|
106
|
+
永不重建 — 索引驱动查询悄悄返空。重建门扩展为 total_row_ids==0
|
|
107
|
+
也触发(空表上重建为廉价 no-op, 自愈)。回归: 手工置空索引文件 →
|
|
108
|
+
重开 → 查询正确
|
|
109
|
+
- 🟡 容器陈旧替换链验证: 同路径容器被替换(重新导出)后, size/mtime
|
|
110
|
+
戳不匹配 → 自动重解包 → 新数据可见(新增回归测试)
|
|
111
|
+
- 🟡 孤儿 legacy 目录清扫: DROP 过的表在 columnar/<table_id>/ 的
|
|
112
|
+
.mcdb 数据永占空间(迁移只走 registry 表) — 打开时按 registry
|
|
113
|
+
id 集清扫。doctor 确认只读安全
|
|
114
|
+
- 遗留可选: —
|
|
115
|
+
|
|
116
|
+
### SDK cycle
|
|
117
|
+
|
|
118
|
+
- **🔑 Node.js SDK(bindings/node, napi-rs v3)**: Database 类 —
|
|
119
|
+
create-or-open / execute(mutations, ?-params) / query(行对象) /
|
|
120
|
+
checkpoint / backupTo / close / doctor。值映射: number↔Integer/Float ·
|
|
121
|
+
number[]↔VECTOR · Buffer 参数↔BLOB · BLOB 结果=base64 ·
|
|
122
|
+
TIMESTAMP↔µs。napi 3.14 适配: build.rs 注入 -undefined
|
|
123
|
+
dynamic_lookup(macOS) · Null::from_napi_value 不校验类型 → null 探针
|
|
124
|
+
必须放链尾(smoke 实抓全变 NULL)。JS 冒烟 debug+release 全过
|
|
125
|
+
- **🔑 Go SDK(bindings/go, cgo)**: Database — Open/Close/Exec/Query/
|
|
126
|
+
Checkpoint/BackupTo, 经扩展的 C ABI(motedb_db_open/db_exec JSON
|
|
127
|
+
参数化/last_error/checkpoint/backup)。值映射: int/int64/float64 ·
|
|
128
|
+
string · bool · nil · []float64↔VECTOR · []byte↔BLOB(JSON 边界对称
|
|
129
|
+
{"$blob": base64}, 出入一致) · time.Time↔TIMESTAMP。go test 5 项:
|
|
130
|
+
CRUD/类型往返/向量 KNN/重开耐久/EPISODES/ASOF/backup 快照
|
|
131
|
+
- **npm 预构建流水线(.github/workflows/node-publish.yml)**:
|
|
132
|
+
五平台矩阵(macOS arm64/x64 · Linux x64/arm64-gnu · Windows x64)
|
|
133
|
+
napi build --platform → artifact 上传; PR staging = 每平台
|
|
134
|
+
npm publish --dry-run 结构校验(pre-publish 含真实发布, PR 严禁);
|
|
135
|
+
tag 触发 = napi pre-publish 逐包发布 + 根包。
|
|
136
|
+
本地验证: napi 布局 optionalDependencies 装载 ALL OK(修 index.js
|
|
137
|
+
suffix 丢连字符)、五平台 dry-run 全过、根包 files 白名单修正
|
|
138
|
+
(*.node 曾把 8.8MB 开发副本打进根包 tarball)。
|
|
139
|
+
⚠️ npm 发布需配置 NPM_TOKEN secret
|
|
140
|
+
- C ABI 扩展(src/ffi.rs): motedb_db_open/db_exec(JSON 参数化, 统一
|
|
141
|
+
execute+query 出 {"columns","rows","affectedRows"})/
|
|
142
|
+
db_checkpoint/db_backup/db_free_string/motedb_last_error; 句柄切
|
|
143
|
+
高层 api::Database
|
|
144
|
+
|
|
3
145
|
## [0.14.0] — 2026-10-12
|
|
4
146
|
|
|
5
147
|
- **🔑 ASOF JOIN(W8, v0.14)**: 机器人帧↔状态对齐原语
|
|
@@ -112,6 +112,12 @@ version = "1.5.1"
|
|
|
112
112
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
113
113
|
checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53"
|
|
114
114
|
|
|
115
|
+
[[package]]
|
|
116
|
+
name = "base64"
|
|
117
|
+
version = "0.22.1"
|
|
118
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
119
|
+
checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
|
|
120
|
+
|
|
115
121
|
[[package]]
|
|
116
122
|
name = "bimap"
|
|
117
123
|
version = "0.6.3"
|
|
@@ -921,9 +927,10 @@ dependencies = [
|
|
|
921
927
|
|
|
922
928
|
[[package]]
|
|
923
929
|
name = "motedb"
|
|
924
|
-
version = "0.
|
|
930
|
+
version = "0.15.0"
|
|
925
931
|
dependencies = [
|
|
926
932
|
"arc-swap",
|
|
933
|
+
"base64",
|
|
927
934
|
"bincode",
|
|
928
935
|
"clap",
|
|
929
936
|
"crc32fast",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[package]
|
|
2
2
|
name = "motedb"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.15.0"
|
|
4
4
|
edition = "2021"
|
|
5
5
|
rust-version = "1.87"
|
|
6
6
|
description = "AI-native embedded multimodal database for embodied intelligence (robots, AR glasses, industrial arms)."
|
|
@@ -65,6 +65,7 @@ roaring = "0.10"
|
|
|
65
65
|
serde = { version = "1.0", features = ["derive"] }
|
|
66
66
|
bincode = "1.3" # Binary serialization for indexes and storage
|
|
67
67
|
serde_json = "1.0" # JSON for manifest and metadata
|
|
68
|
+
base64 = "0.22"
|
|
68
69
|
|
|
69
70
|
# Error handling (used throughout)
|
|
70
71
|
thiserror = "1.0"
|
|
@@ -270,6 +270,15 @@ Every push runs through three CI workflows:
|
|
|
270
270
|
| **Perf Gate** | Query-shape latency *ratios* vs a full-scan baseline — machine-independent budgets that catch complexity-class regressions (e.g. an O(N²) path that slipped through once) |
|
|
271
271
|
| **Fuzz** (daily) | 5 min × 2 targets (`fuzz_sql_parser`, `fuzz_wal_recover`) under AddressSanitizer — found and fixed a parser stack-overflow on day one |
|
|
272
272
|
|
|
273
|
+
### Multi-language SDKs
|
|
274
|
+
|
|
275
|
+
| Language | Package | Status |
|
|
276
|
+
|---|---|---|
|
|
277
|
+
| Rust | `motedb` (crates.io) | stable |
|
|
278
|
+
| Python | `motedb-python` (PyPI) | stable |
|
|
279
|
+
| Node.js | `motedb` (npm, bindings/node, napi-rs v3) | preview (linux-gnu builds; musl not yet) |
|
|
280
|
+
| Go | `bindings/go` (cgo) | preview |
|
|
281
|
+
|
|
273
282
|
## Installation
|
|
274
283
|
|
|
275
284
|
```bash
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# MoteDB v0.15.0
|
|
2
|
+
|
|
3
|
+
四条主线:**多语言 SDK 生态**(Node.js / Go + npm 五平台预构建流水线)、
|
|
4
|
+
**存储文件布局收敛**(P1~P4 + 只读容器模式)、**TimeSeries 引擎统一**
|
|
5
|
+
(方案 E)、以及 **F1/F2 性能战役与三轮发布前审计**(共 10 项修复)。
|
|
6
|
+
核心 crate / Python / Node 版本对齐 0.15.0。
|
|
7
|
+
|
|
8
|
+
## 一、存储文件布局收敛 — "采集是目录, 运输是一个文件"
|
|
9
|
+
|
|
10
|
+
具身智能数据生命周期(采集→运输→训练→部署)对磁盘形态的要求不同:采集期
|
|
11
|
+
要断电安全与高性能(目录形态的强项),运输期要单文件可拷贝/校验/续传,
|
|
12
|
+
部署期要只读打开。本版按此定位收敛运行时布局,并补齐运输与部署形态。
|
|
13
|
+
|
|
14
|
+
### 数字总账(v0.14 → v0.15)
|
|
15
|
+
|
|
16
|
+
| 指标 | v0.14 | v0.15 |
|
|
17
|
+
|---|---|---|
|
|
18
|
+
| 空库固定文件 | 11 | **4**(.lock / meta.bin / columnar_ms/MANIFEST) |
|
|
19
|
+
| 50 表库文件 | ~111 | ~55(= 3+表数+索引数) |
|
|
20
|
+
| 50 表运行时 fd | 56+ | **个位数**(50 表进程总 fd 实测 <40) |
|
|
21
|
+
| 打开耗时(50 表×60 轮 churn) | 77ms,随历史线性恶化 | **17.6ms**,有界常量(F1) |
|
|
22
|
+
| manifest 体积 | 无上限线性增长 | **有界常量**(F1 compaction) |
|
|
23
|
+
| 脏 checkpoint 50 表 | ~42ms | **24.6ms 平坦**(F2) |
|
|
24
|
+
| 运输形态 | 目录拷贝 | **单文件 .mote 快照**(可压缩/校验) |
|
|
25
|
+
| 部署形态 | 无 | **open('snap.mote') 只读直开** |
|
|
26
|
+
| 断电语义 | — | 未动(temp+rename/孤儿领养/mmap) |
|
|
27
|
+
| 旧库升级 | — | 打开即自动迁移(每阶段前向兼容) |
|
|
28
|
+
|
|
29
|
+
- **P1 惰性创建**: WAL 分区首写物化、CHECKPOINT 删文件替代截断、
|
|
30
|
+
columnar//LSM blob/timestamp.idx 全部按需 — 零字节残留消失
|
|
31
|
+
- **P2 全局单一 MANIFEST**: 记录携带 table_id,全库一个文件 — fd 线性项
|
|
32
|
+
消除;旧 per-table 布局打开即迁移(崩溃安全幂等)
|
|
33
|
+
- **P3 meta.bin 四合一**: catalog/index 元数据/LSN/关闭旗标并入分节容器
|
|
34
|
+
(每节 CRC32);catalog 节损坏 fail-fast 硬错误
|
|
35
|
+
- **P4 EXPORT DB TO 单文件快照 (MOTESNAP)**: 流式条目+每文件 CRC32+
|
|
36
|
+
逐文件 zstd;静默纪律复用 backup_to 全套;五语言接线
|
|
37
|
+
- **只读容器模式**: `Database::open_readonly('snap.mote')` 及 open()
|
|
38
|
+
自动路由 — 幂等解包缓存(多进程竞争安全)、引擎级只读门(全部写路径
|
|
39
|
+
拒绝)、多读者共存、源容器字节不变
|
|
40
|
+
|
|
41
|
+
## 二、TimeSeries 引擎统一 (方案 E)
|
|
42
|
+
|
|
43
|
+
TIMESERIES(ts) 表与标准表同一条写/读/恢复路径,旧 ColumnarStore 引擎
|
|
44
|
+
退出运行时(仅留只读迁移):executor 10 处 TS 专属路由臂删除(净 -1226
|
|
45
|
+
行),WAL 回放并入标准路径,.mcdb 数据打开时一次性迁移(崩溃升级窗口
|
|
46
|
+
经审计修复:迁移先于回放+next_row_id 推进),TTL/DELETE 时间窗重写为
|
|
47
|
+
段存储 tombstone 版。实测 TS 与标准表 checkpoint 同价(18.2ms)。
|
|
48
|
+
|
|
49
|
+
顺带修复两个被旧路径掩盖的存量 bug:物化读回 TIMESTAMP 变 Integer;
|
|
50
|
+
**BTree superblock 内联页偏移表超 4096 保留区 — 任何 10 万行 ts-first
|
|
51
|
+
表 close 即炸**(v3: 64KB 保留 + 降级阀 + 空载自愈)。
|
|
52
|
+
|
|
53
|
+
## 三、性能战役 (F1/F2)
|
|
54
|
+
|
|
55
|
+
- **F1 全局 MANIFEST 增量状态 + 有界 compaction**: 打开时解析一次(原
|
|
56
|
+
每表全量重解析);文件超阈值最简重写;退役 id 按段文件存在性裁剪 —
|
|
57
|
+
打开 77ms→17.6ms(4.4×),manifest 210KB→17KB
|
|
58
|
+
- **F2 checkpoint 三项省略型优化**: 计数器脏标记/LSN+catalog 合并单
|
|
59
|
+
重写/manifest 空转跳 fsync — 50 表 42→24.6ms 表数平坦化,零持久化
|
|
60
|
+
语义变化
|
|
61
|
+
|
|
62
|
+
## 四、v0.13 已知缺口关闭
|
|
63
|
+
|
|
64
|
+
BLOB 在 int 过滤查询下的双缺陷(装载门只匹配 Text tag + 输出臂缺 Blob)
|
|
65
|
+
— 修复后裸投影/LENGTH/混合列/重开/ORDER BY 全部正确。
|
|
66
|
+
|
|
67
|
+
## 五、三轮发布前审计(10 项修复)
|
|
68
|
+
|
|
69
|
+
- **轮 1(新代码自身)**: BTree read_superblock EOF 容忍;execute_prepared
|
|
70
|
+
绕过只读门;Python 构造器绕过容器自动路由;create+read_only 拒绝
|
|
71
|
+
- **轮 2(升级/并发窗口)**: v2 索引读兼容(曾升级即静默清空全部列索引);
|
|
72
|
+
崩溃升级迁移序(曾丢 .mcdb 已 checkpoint 行);容器解包竞争(原子
|
|
73
|
+
rename 舞步 + 同进程临时目录唯一化)
|
|
74
|
+
- **轮 3(派生数据自愈)**: 空载列索引打开时从源重建(降级阀/未来静默
|
|
75
|
+
空路径自愈);容器陈旧替换链;孤儿 legacy 目录清扫
|
|
76
|
+
|
|
77
|
+
## 六、SDK cycle
|
|
78
|
+
|
|
79
|
+
- **Node.js SDK**(napi-rs v3): execute(?-params)/query/checkpoint/
|
|
80
|
+
backupTo/exportSnapshot/openSnapshot/openReadonly/close/doctor
|
|
81
|
+
- **Go SDK**(cgo): Open/Exec/Query/Checkpoint/BackupTo/ExportSnapshot/
|
|
82
|
+
ImportSnapshot;go test 7 项
|
|
83
|
+
- **Python**: export_to/import_snapshot + 构造器容器自动路由;e2e×3
|
|
84
|
+
- **npm 预构建流水线**: 五平台矩阵,tag 触发发布(需 NPM_TOKEN)
|
|
85
|
+
- **C ABI**: db_open/db_exec(JSON 参数化)/checkpoint/backup/db_export/
|
|
86
|
+
db_import/last_error
|
|
87
|
+
|
|
88
|
+
## 升级与兼容
|
|
89
|
+
|
|
90
|
+
- 老库(v0.12~v0.14)直接打开:惰性迁移自动完成,无需停机;v2 索引文件
|
|
91
|
+
保持可读,空/损坏索引自动从源重建
|
|
92
|
+
- `backup_to`(目录快照)与 `EXPORT DB`(单文件)并存;容器模式覆盖
|
|
93
|
+
部署形态
|
|
94
|
+
|
|
95
|
+
## 已知限制
|
|
96
|
+
|
|
97
|
+
- npm 发布流水线待 NPM_TOKEN 配置后重跑
|
|
98
|
+
- timestamp 索引覆盖 ts 首列表;非首列 ts 的 query_timestamp_range
|
|
99
|
+
走扫描(与 v0.14 相同)
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# motedb (Go)
|
|
2
|
+
|
|
3
|
+
AI-native embedded multimodal database — Go bindings via the C ABI
|
|
4
|
+
(`src/ffi.rs`).
|
|
5
|
+
|
|
6
|
+
## Build
|
|
7
|
+
|
|
8
|
+
Requires the MoteDB static library (built at the repo root):
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
cargo build --release # → target/release/libmotedb.a
|
|
12
|
+
cd bindings/go && go test ./...
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
The cgo directives default to repo-relative paths; override with
|
|
16
|
+
`CGO_CFLAGS` / `CGO_LDFLAGS` for prebuilt libraries elsewhere.
|
|
17
|
+
|
|
18
|
+
## Usage
|
|
19
|
+
|
|
20
|
+
```go
|
|
21
|
+
import motedb "github.com/motedb/motedb/bindings/go"
|
|
22
|
+
|
|
23
|
+
db, err := motedb.Open("/data/robot.mote") // creates when missing
|
|
24
|
+
_, err = db.Exec("INSERT INTO frames VALUES (?, ?, ?)",
|
|
25
|
+
"f1", time.Now(), []byte{0xde, 0xad}) // []byte → BLOB
|
|
26
|
+
rows, err := db.Query(
|
|
27
|
+
"SELECT name FROM robots ORDER BY emb <-> ? LIMIT 1",
|
|
28
|
+
[]float64{0.1, 0.9, 0.2}) // []float64 → VECTOR
|
|
29
|
+
db.Checkpoint()
|
|
30
|
+
db.BackupTo("/data/snap.mote")
|
|
31
|
+
db.Close()
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Value mapping
|
|
35
|
+
|
|
36
|
+
| SQL type | Go param | Go result |
|
|
37
|
+
|---|---|---|
|
|
38
|
+
| INTEGER / FLOAT | `int` / `int64` / `float64` | `float64` |
|
|
39
|
+
| TEXT | `string` | `string` |
|
|
40
|
+
| BOOLEAN | `bool` | `bool` |
|
|
41
|
+
| NULL | `nil` | `nil` |
|
|
42
|
+
| VECTOR(n) | `[]float64` | `[]any` (numbers) |
|
|
43
|
+
| BLOB | `[]byte` | `[]byte` (base64 over the JSON boundary) |
|
|
44
|
+
| TIMESTAMP | `time.Time` | `int64` µs-since-epoch |
|