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.
Files changed (521) hide show
  1. motedb_python-0.15.0/.github/workflows/node-publish.yml +185 -0
  2. {motedb_python-0.14.0 → motedb_python-0.15.0}/CHANGELOG.md +142 -0
  3. {motedb_python-0.14.0 → motedb_python-0.15.0}/Cargo.lock +8 -1
  4. {motedb_python-0.14.0 → motedb_python-0.15.0}/Cargo.toml +2 -1
  5. {motedb_python-0.14.0 → motedb_python-0.15.0}/PKG-INFO +1 -1
  6. {motedb_python-0.14.0 → motedb_python-0.15.0}/README.md +9 -0
  7. motedb_python-0.15.0/RELEASE_NOTES.md +99 -0
  8. motedb_python-0.15.0/bindings/go/README.md +44 -0
  9. motedb_python-0.15.0/bindings/go/go.mod +3 -0
  10. motedb_python-0.15.0/bindings/go/motedb.go +266 -0
  11. motedb_python-0.15.0/bindings/go/motedb.h +27 -0
  12. motedb_python-0.15.0/bindings/go/motedb_test.go +290 -0
  13. {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/Cargo.lock +9 -2
  14. {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/Cargo.toml +1 -1
  15. {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/e2e/e2e_workload.py +2 -0
  16. motedb_python-0.15.0/bindings/python/e2e/test_snapshot_export.py +82 -0
  17. {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/src/lib.rs +37 -0
  18. motedb_python-0.15.0/docs/design/2026-10-file-layout-plan.md +180 -0
  19. motedb_python-0.15.0/docs/design/2026-10-file-layout.md +160 -0
  20. motedb_python-0.15.0/examples/file_layout_bench.rs +153 -0
  21. motedb_python-0.15.0/examples/probe_ckpt.rs +72 -0
  22. {motedb_python-0.14.0 → motedb_python-0.15.0}/examples/traj_spike.rs +5 -7
  23. {motedb_python-0.14.0 → motedb_python-0.15.0}/pyproject.toml +1 -1
  24. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/api.rs +184 -19
  25. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/catalog/registry.rs +90 -13
  26. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/config.rs +7 -0
  27. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/database/core.rs +290 -229
  28. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/database/crud.rs +64 -92
  29. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/database/datasets.rs +4 -4
  30. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/database/helpers.rs +2 -1
  31. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/database/index_metadata.rs +50 -16
  32. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/database/indexes/timestamp.rs +106 -12
  33. motedb_python-0.15.0/src/database/meta_store.rs +344 -0
  34. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/database/mod.rs +2 -0
  35. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/database/persistence.rs +198 -6
  36. motedb_python-0.15.0/src/database/snapshot.rs +406 -0
  37. motedb_python-0.15.0/src/ffi.rs +533 -0
  38. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/index/btree.rs +66 -15
  39. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/mcap_import.rs +1 -1
  40. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/sql/ast.rs +5 -0
  41. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/sql/evaluator.rs +91 -94
  42. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/sql/executor/join.rs +1 -11
  43. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/sql/executor/mod.rs +132 -1277
  44. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/sql/executor/scan.rs +4 -129
  45. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/sql/parser.rs +72 -43
  46. motedb_python-0.15.0/src/storage/col_segment/manifest.rs +790 -0
  47. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/col_segment/mod.rs +1 -1
  48. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/col_segment/segment.rs +2 -2
  49. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/col_segment/store.rs +139 -35
  50. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/columnar/store.rs +6 -2
  51. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/lsm/blobstore.rs +44 -16
  52. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/txn/wal.rs +79 -57
  53. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_blob_type.rs +102 -0
  54. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_col_segment.rs +19 -21
  55. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_col_segment_fastpaths.rs +1 -1
  56. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_corruption_recovery.rs +11 -3
  57. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_datasets.rs +3 -3
  58. motedb_python-0.15.0/tests/test_file_layout.rs +284 -0
  59. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_fts_recovery_staleness.rs +17 -10
  60. motedb_python-0.15.0/tests/test_global_manifest.rs +488 -0
  61. motedb_python-0.15.0/tests/test_snapshot.rs +609 -0
  62. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_text_ts_search_semantics.rs +7 -0
  63. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_timeseries_semantics.rs +80 -0
  64. motedb_python-0.14.0/RELEASE_NOTES.md +0 -20
  65. motedb_python-0.14.0/src/ffi.rs +0 -110
  66. motedb_python-0.14.0/src/storage/col_segment/manifest.rs +0 -216
  67. {motedb_python-0.14.0 → motedb_python-0.15.0}/.cargo/config.toml +0 -0
  68. {motedb_python-0.14.0 → motedb_python-0.15.0}/.devcontainer/devcontainer.json +0 -0
  69. {motedb_python-0.14.0 → motedb_python-0.15.0}/.github/workflows/ci.yml +0 -0
  70. {motedb_python-0.14.0 → motedb_python-0.15.0}/.github/workflows/fuzz.yml +0 -0
  71. {motedb_python-0.14.0 → motedb_python-0.15.0}/.github/workflows/perf-gate.yml +0 -0
  72. {motedb_python-0.14.0 → motedb_python-0.15.0}/.github/workflows/publish.yml +0 -0
  73. {motedb_python-0.14.0 → motedb_python-0.15.0}/.github/workflows/python-wheels.yml +0 -0
  74. {motedb_python-0.14.0 → motedb_python-0.15.0}/.gitignore +0 -0
  75. {motedb_python-0.14.0 → motedb_python-0.15.0}/.zcode/plans/plan-sess_abb2c954-05fb-477e-9d0a-3e22261e2449.md +0 -0
  76. {motedb_python-0.14.0 → motedb_python-0.15.0}/.zcode/plans/plan-sess_b5937a06-b7bf-4471-9756-dbf2787b263c.md +0 -0
  77. {motedb_python-0.14.0 → motedb_python-0.15.0}/LICENSE +0 -0
  78. {motedb_python-0.14.0 → motedb_python-0.15.0}/Makefile +0 -0
  79. {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/README.md +0 -0
  80. {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/bench/README.md +0 -0
  81. {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/bench/adversarial_verify.py +0 -0
  82. {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/bench/bench_edge.py +0 -0
  83. {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/bench/compete_bench.py +0 -0
  84. {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/bench/compete_fts_industry.py +0 -0
  85. {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/bench/compete_scale.py +0 -0
  86. {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/bench/compete_spatial_ts.py +0 -0
  87. {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/bench/compete_vec_industry.py +0 -0
  88. {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/bench/compete_writes.py +0 -0
  89. {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/bench/fts_probe_once.py +0 -0
  90. {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/bench/perf_ab.py +0 -0
  91. {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/bench/perf_overall.py +0 -0
  92. {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/bench/prof_ann.py +0 -0
  93. {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/bench/prof_fts.py +0 -0
  94. {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/bench/prof_insert.py +0 -0
  95. {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/bench/prof_point.py +0 -0
  96. {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/bench/prof_real.py +0 -0
  97. {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/bench/prof_scale.py +0 -0
  98. {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/bench/prof_scale_vec.py +0 -0
  99. {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/bench/prof_vec_parallel.py +0 -0
  100. {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/bench/resource_bench.py +0 -0
  101. {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/bench/resource_bench_2026-09_profile.json +0 -0
  102. {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/bench/resource_bench_v0.10.0.json +0 -0
  103. {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/bench/spatial_eval.py +0 -0
  104. {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/bench/text_eval.py +0 -0
  105. {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/bench/ts_eval.py +0 -0
  106. {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/bench/vector_recall_eval.py +0 -0
  107. {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/build.rs +0 -0
  108. {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/e2e/test_durability_kwarg.py +0 -0
  109. {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/licenses/LICENSE +0 -0
  110. {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/scripts/build_wheel.sh +0 -0
  111. {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/tests/data/demo.mcap +0 -0
  112. {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/tests/test_backup.py +0 -0
  113. {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/tests/test_crash_recovery.py +0 -0
  114. {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/tests/test_e2e_cli.py +0 -0
  115. {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/tests/test_e2e_functional.py +0 -0
  116. {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/tests/test_feature_selfcheck.py +0 -0
  117. {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/tests/test_fetch_arrays.py +0 -0
  118. {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/tests/test_fuzz_bigtable.py +0 -0
  119. {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/tests/test_fuzz_differential.py +0 -0
  120. {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/tests/test_insert_arrays.py +0 -0
  121. {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/tests/test_mcap_import.py +0 -0
  122. {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/tests/test_parallel_ab.py +0 -0
  123. {motedb_python-0.14.0 → motedb_python-0.15.0}/bindings/python/tests/test_smoke.py +0 -0
  124. {motedb_python-0.14.0 → motedb_python-0.15.0}/deny.toml +0 -0
  125. {motedb_python-0.14.0 → motedb_python-0.15.0}/docs/01-quick-start.md +0 -0
  126. {motedb_python-0.14.0 → motedb_python-0.15.0}/docs/02-installation.md +0 -0
  127. {motedb_python-0.14.0 → motedb_python-0.15.0}/docs/03-sql-operations.md +0 -0
  128. {motedb_python-0.14.0 → motedb_python-0.15.0}/docs/04-batch-operations.md +0 -0
  129. {motedb_python-0.14.0 → motedb_python-0.15.0}/docs/05-transactions.md +0 -0
  130. {motedb_python-0.14.0 → motedb_python-0.15.0}/docs/06-indexes-overview.md +0 -0
  131. {motedb_python-0.14.0 → motedb_python-0.15.0}/docs/07-column-index.md +0 -0
  132. {motedb_python-0.14.0 → motedb_python-0.15.0}/docs/08-vector-index.md +0 -0
  133. {motedb_python-0.14.0 → motedb_python-0.15.0}/docs/09-text-index.md +0 -0
  134. {motedb_python-0.14.0 → motedb_python-0.15.0}/docs/10-spatial-index.md +0 -0
  135. {motedb_python-0.14.0 → motedb_python-0.15.0}/docs/11-timestamp-index.md +0 -0
  136. {motedb_python-0.14.0 → motedb_python-0.15.0}/docs/12-performance.md +0 -0
  137. {motedb_python-0.14.0 → motedb_python-0.15.0}/docs/13-data-types.md +0 -0
  138. {motedb_python-0.14.0 → motedb_python-0.15.0}/docs/14-api-reference.md +0 -0
  139. {motedb_python-0.14.0 → motedb_python-0.15.0}/docs/15-best-practices.md +0 -0
  140. {motedb_python-0.14.0 → motedb_python-0.15.0}/docs/16-faq.md +0 -0
  141. {motedb_python-0.14.0 → motedb_python-0.15.0}/docs/17-hybrid-arrow.md +0 -0
  142. {motedb_python-0.14.0 → motedb_python-0.15.0}/docs/README.md +0 -0
  143. {motedb_python-0.14.0 → motedb_python-0.15.0}/docs/benchmark_methodology.md +0 -0
  144. {motedb_python-0.14.0 → motedb_python-0.15.0}/docs/design/2026-10-embodied-roadmap.md +0 -0
  145. {motedb_python-0.14.0 → motedb_python-0.15.0}/docs/design/2026-10-traj-spike.md +0 -0
  146. {motedb_python-0.14.0 → motedb_python-0.15.0}/docs/paper/README.md +0 -0
  147. {motedb_python-0.14.0 → motedb_python-0.15.0}/docs/paper/motedb.tex +0 -0
  148. {motedb_python-0.14.0 → motedb_python-0.15.0}/examples/bench_300k.rs +0 -0
  149. {motedb_python-0.14.0 → motedb_python-0.15.0}/examples/bench_autocommit_lock.rs +0 -0
  150. {motedb_python-0.14.0 → motedb_python-0.15.0}/examples/bench_disk.rs +0 -0
  151. {motedb_python-0.14.0 → motedb_python-0.15.0}/examples/bench_exec_only.rs +0 -0
  152. {motedb_python-0.14.0 → motedb_python-0.15.0}/examples/bench_insert_engine.rs +0 -0
  153. {motedb_python-0.14.0 → motedb_python-0.15.0}/examples/bench_layer.rs +0 -0
  154. {motedb_python-0.14.0 → motedb_python-0.15.0}/examples/bench_memory.rs +0 -0
  155. {motedb_python-0.14.0 → motedb_python-0.15.0}/examples/bench_multimodal_vs_competitors.rs +0 -0
  156. {motedb_python-0.14.0 → motedb_python-0.15.0}/examples/bench_point_read.rs +0 -0
  157. {motedb_python-0.14.0 → motedb_python-0.15.0}/examples/bench_profile_hot.rs +0 -0
  158. {motedb_python-0.14.0 → motedb_python-0.15.0}/examples/bench_scaling.rs +0 -0
  159. {motedb_python-0.14.0 → motedb_python-0.15.0}/examples/bench_stability.rs +0 -0
  160. {motedb_python-0.14.0 → motedb_python-0.15.0}/examples/bench_vs_sqlite.rs +0 -0
  161. {motedb_python-0.14.0 → motedb_python-0.15.0}/examples/corruption_fuzz.rs +0 -0
  162. {motedb_python-0.14.0 → motedb_python-0.15.0}/examples/crud.rs +0 -0
  163. {motedb_python-0.14.0 → motedb_python-0.15.0}/examples/differential_fuzz.rs +0 -0
  164. {motedb_python-0.14.0 → motedb_python-0.15.0}/examples/gen_test_bag.rs +0 -0
  165. {motedb_python-0.14.0 → motedb_python-0.15.0}/examples/hello_world.rs +0 -0
  166. {motedb_python-0.14.0 → motedb_python-0.15.0}/examples/join_differential_fuzz.rs +0 -0
  167. {motedb_python-0.14.0 → motedb_python-0.15.0}/examples/logging.rs +0 -0
  168. {motedb_python-0.14.0 → motedb_python-0.15.0}/examples/perf_smoke.rs +0 -0
  169. {motedb_python-0.14.0 → motedb_python-0.15.0}/examples/probe_filter_decomp.rs +0 -0
  170. {motedb_python-0.14.0 → motedb_python-0.15.0}/examples/probe_jemalloc.rs +0 -0
  171. {motedb_python-0.14.0 → motedb_python-0.15.0}/examples/probe_memory_source.rs +0 -0
  172. {motedb_python-0.14.0 → motedb_python-0.15.0}/examples/probe_tail_latency.rs +0 -0
  173. {motedb_python-0.14.0 → motedb_python-0.15.0}/examples/text_rank_probe.rs +0 -0
  174. {motedb_python-0.14.0 → motedb_python-0.15.0}/examples/vector_recall_real.rs +0 -0
  175. {motedb_python-0.14.0 → motedb_python-0.15.0}/licenses/LICENSE +0 -0
  176. {motedb_python-0.14.0 → motedb_python-0.15.0}/python/motedb/__init__.py +0 -0
  177. {motedb_python-0.14.0 → motedb_python-0.15.0}/scripts/Dockerfile.e2e +0 -0
  178. {motedb_python-0.14.0 → motedb_python-0.15.0}/scripts/compete.sh +0 -0
  179. {motedb_python-0.14.0 → motedb_python-0.15.0}/scripts/docker_e2e.sh +0 -0
  180. {motedb_python-0.14.0 → motedb_python-0.15.0}/scripts/repro_point_query_gap.sh +0 -0
  181. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/bin/motedb-cli.rs +0 -0
  182. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/cache/mod.rs +0 -0
  183. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/cache/row_cache.rs +0 -0
  184. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/catalog/mod.rs +0 -0
  185. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/database/doctor.rs +0 -0
  186. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/database/indexes/column.rs +0 -0
  187. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/database/indexes/dashmap_migration.md +0 -0
  188. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/database/indexes/ioctree.rs +0 -0
  189. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/database/indexes/mod.rs +0 -0
  190. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/database/indexes/text.rs +0 -0
  191. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/database/indexes/vector.rs +0 -0
  192. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/database/mem_buffer.rs +0 -0
  193. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/database/pk_cache.rs +0 -0
  194. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/database/table.rs +0 -0
  195. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/database/timeseries.rs +0 -0
  196. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/database/transaction.rs +0 -0
  197. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/distance/cosine.rs +0 -0
  198. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/distance/euclidean.rs +0 -0
  199. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/distance/mod.rs +0 -0
  200. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/error.rs +0 -0
  201. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/index/btree_generic.rs +0 -0
  202. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/index/builder.rs +0 -0
  203. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/index/cached_index.rs +0 -0
  204. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/index/column_value.rs +0 -0
  205. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/index/fresh_graph.rs +0 -0
  206. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/index/ioctree/leaf_store.rs +0 -0
  207. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/index/ioctree/mod.rs +0 -0
  208. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/index/ioctree/node.rs +0 -0
  209. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/index/ioctree/persistence.rs +0 -0
  210. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/index/ioctree/search.rs +0 -0
  211. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/index/mod.rs +0 -0
  212. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/index/primary_key.rs +0 -0
  213. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/index/text_dictionary.rs +0 -0
  214. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/index/text_encoding.rs +0 -0
  215. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/index/text_fts.rs +0 -0
  216. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/index/text_query.rs +0 -0
  217. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/index/text_types.rs +0 -0
  218. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/index/tokenizers.rs +0 -0
  219. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/index/vamana/config.rs +0 -0
  220. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/index/vamana/disk_graph.rs +0 -0
  221. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/index/vamana/diskann_index.rs +0 -0
  222. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/index/vamana/mod.rs +0 -0
  223. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/index/vamana/pruner.rs +0 -0
  224. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/index/vamana/sq8.rs +0 -0
  225. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/index/vamana/sq8_vectors.rs +0 -0
  226. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/lib.rs +0 -0
  227. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/platform_io.rs +0 -0
  228. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/sql/executor/agg.rs +0 -0
  229. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/sql/join/hash_join.rs +0 -0
  230. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/sql/join/index_join.rs +0 -0
  231. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/sql/join/mod.rs +0 -0
  232. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/sql/lexer.rs +0 -0
  233. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/sql/mod.rs +0 -0
  234. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/sql/optimizer.rs +0 -0
  235. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/sql/row_converter.rs +0 -0
  236. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/sql/token.rs +0 -0
  237. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/sql/vector_exec.rs +0 -0
  238. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/checksum.rs +0 -0
  239. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/col_segment/merge.rs +0 -0
  240. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/colbatch.rs +0 -0
  241. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/columnar/column_encoding.rs +0 -0
  242. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/columnar/config.rs +0 -0
  243. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/columnar/gorilla.rs +0 -0
  244. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/columnar/mod.rs +0 -0
  245. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/columnar/segment.rs +0 -0
  246. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/columnar/segment_manager.rs +0 -0
  247. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/columnar/write_buffer.rs +0 -0
  248. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/file_manager.rs +0 -0
  249. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/lsm/bloom.rs +0 -0
  250. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/lsm/columnar.rs +0 -0
  251. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/lsm/compaction.rs +0 -0
  252. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/lsm/engine.rs +0 -0
  253. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/lsm/memtable.rs +0 -0
  254. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/lsm/merging_iterator.rs +0 -0
  255. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/lsm/mod.rs +0 -0
  256. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/lsm/sstable.rs +0 -0
  257. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/lsm/unified_memtable.rs +0 -0
  258. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/manifest/manifest.rs +0 -0
  259. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/manifest/mod.rs +0 -0
  260. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/manifest/version.rs +0 -0
  261. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/mod.rs +0 -0
  262. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/storage/row_format.rs +0 -0
  263. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/txn/coordinator.rs +0 -0
  264. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/txn/lock_manager.rs +0 -0
  265. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/txn/mod.rs +0 -0
  266. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/txn/mvcc.rs +0 -0
  267. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/txn/recovery.rs +0 -0
  268. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/txn/version_store.rs +0 -0
  269. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/types/comp_sum.rs +0 -0
  270. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/types/mod.rs +0 -0
  271. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/types/spatial.rs +0 -0
  272. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/types/table.rs +0 -0
  273. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/types/tensor.rs +0 -0
  274. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/types/text.rs +0 -0
  275. {motedb_python-0.14.0 → motedb_python-0.15.0}/src/types/timestamp.rs +0 -0
  276. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/acid_test.rs +0 -0
  277. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/bench_2m.rs +0 -0
  278. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/bench_acid.rs +0 -0
  279. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/bench_batch_ops.rs +0 -0
  280. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/bench_compare.rs +0 -0
  281. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/bench_comprehensive.rs +0 -0
  282. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/bench_concurrent.rs +0 -0
  283. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/bench_index_ops.rs +0 -0
  284. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/bench_multimodal.rs +0 -0
  285. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/bench_multimodal_full.rs +0 -0
  286. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/bench_multimodal_ops.rs +0 -0
  287. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/bench_perf_report.rs +0 -0
  288. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/bench_quick_baseline.rs +0 -0
  289. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/bench_release.rs +0 -0
  290. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/bench_report.rs +0 -0
  291. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/bench_resource.rs +0 -0
  292. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/bench_sql_queries.rs +0 -0
  293. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/bench_timeseries_index.rs +0 -0
  294. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/bench_v060_report.rs +0 -0
  295. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/bench_vs_sqlite_100k.rs +0 -0
  296. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/bench_vs_sqlite_v05.rs +0 -0
  297. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/common/mod.rs +0 -0
  298. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/durability_probe.rs +0 -0
  299. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/fts_probe.rs +0 -0
  300. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/perf_test.rs +0 -0
  301. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/repro_multirow_update_fts.rs +0 -0
  302. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/repro_point_gap.rs +0 -0
  303. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/stress_300k.rs +0 -0
  304. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/stress_test.rs +0 -0
  305. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_acid_audit.rs +0 -0
  306. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_acid_comprehensive.rs +0 -0
  307. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_advanced_hunt.rs +0 -0
  308. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_api_correctness.rs +0 -0
  309. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_asof_join.rs +0 -0
  310. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_auto_checkpoint_segments.rs +0 -0
  311. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_backup.rs +0 -0
  312. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_btree_integrity.rs +0 -0
  313. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt.rs +0 -0
  314. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt2.rs +0 -0
  315. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt3.rs +0 -0
  316. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt4.rs +0 -0
  317. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt5.rs +0 -0
  318. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt6.rs +0 -0
  319. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt7.rs +0 -0
  320. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v10.rs +0 -0
  321. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v100.rs +0 -0
  322. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v101.rs +0 -0
  323. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v11.rs +0 -0
  324. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v12.rs +0 -0
  325. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v13.rs +0 -0
  326. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v14.rs +0 -0
  327. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v15.rs +0 -0
  328. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v16.rs +0 -0
  329. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v17_cte.rs +0 -0
  330. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v18.rs +0 -0
  331. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v19.rs +0 -0
  332. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v2.rs +0 -0
  333. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v20.rs +0 -0
  334. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v21.rs +0 -0
  335. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v22.rs +0 -0
  336. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v23.rs +0 -0
  337. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v24.rs +0 -0
  338. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v25.rs +0 -0
  339. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v26.rs +0 -0
  340. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v27.rs +0 -0
  341. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v28.rs +0 -0
  342. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v29.rs +0 -0
  343. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v3.rs +0 -0
  344. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v30.rs +0 -0
  345. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v31.rs +0 -0
  346. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v32.rs +0 -0
  347. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v33.rs +0 -0
  348. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v34.rs +0 -0
  349. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v35.rs +0 -0
  350. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v36.rs +0 -0
  351. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v38.rs +0 -0
  352. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v39.rs +0 -0
  353. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v4.rs +0 -0
  354. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v40.rs +0 -0
  355. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v43.rs +0 -0
  356. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v45.rs +0 -0
  357. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v48.rs +0 -0
  358. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v49.rs +0 -0
  359. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v5.rs +0 -0
  360. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v50.rs +0 -0
  361. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v51.rs +0 -0
  362. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v52.rs +0 -0
  363. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v53.rs +0 -0
  364. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v54.rs +0 -0
  365. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v55.rs +0 -0
  366. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v56.rs +0 -0
  367. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v57.rs +0 -0
  368. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v58.rs +0 -0
  369. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v59.rs +0 -0
  370. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v6.rs +0 -0
  371. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v60.rs +0 -0
  372. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v61.rs +0 -0
  373. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v62.rs +0 -0
  374. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v63.rs +0 -0
  375. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v64.rs +0 -0
  376. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v65.rs +0 -0
  377. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v66.rs +0 -0
  378. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v67.rs +0 -0
  379. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v68.rs +0 -0
  380. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v69.rs +0 -0
  381. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v7.rs +0 -0
  382. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v70.rs +0 -0
  383. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v71.rs +0 -0
  384. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v72.rs +0 -0
  385. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v73.rs +0 -0
  386. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v74.rs +0 -0
  387. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v75.rs +0 -0
  388. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v76.rs +0 -0
  389. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v77.rs +0 -0
  390. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v78.rs +0 -0
  391. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v79.rs +0 -0
  392. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v8.rs +0 -0
  393. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v80.rs +0 -0
  394. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v81.rs +0 -0
  395. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v82.rs +0 -0
  396. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v83.rs +0 -0
  397. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v84.rs +0 -0
  398. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v85.rs +0 -0
  399. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v86.rs +0 -0
  400. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v87.rs +0 -0
  401. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v88.rs +0 -0
  402. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v89.rs +0 -0
  403. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v9.rs +0 -0
  404. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v90.rs +0 -0
  405. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v91.rs +0 -0
  406. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v92.rs +0 -0
  407. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v93.rs +0 -0
  408. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v94.rs +0 -0
  409. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v95.rs +0 -0
  410. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v96.rs +0 -0
  411. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v97.rs +0 -0
  412. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v98.rs +0 -0
  413. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_bug_hunt_v99.rs +0 -0
  414. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_columnar.rs +0 -0
  415. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_columnar_acid.rs +0 -0
  416. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_compact_storage.rs +0 -0
  417. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_compaction_integrity.rs +0 -0
  418. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_compiled_where_semantics.rs +0 -0
  419. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_comprehensive.rs +0 -0
  420. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_comprehensive_audit.rs +0 -0
  421. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_concurrent_sql_features.rs +0 -0
  422. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_concurrent_stress.rs +0 -0
  423. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_corruption_robustness.rs +0 -0
  424. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_crash_injection.rs +0 -0
  425. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_crash_recovery.rs +0 -0
  426. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_data_types.rs +0 -0
  427. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_db_path_hygiene.rs +0 -0
  428. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_deadlock_stress.rs +0 -0
  429. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_deep_edge.rs +0 -0
  430. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_delete_persist.rs +0 -0
  431. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_differential_correctness.rs +0 -0
  432. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_disk_bloat.rs +0 -0
  433. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_disk_usage.rs +0 -0
  434. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_doctor.rs +0 -0
  435. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_durability.rs +0 -0
  436. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_e2e_crash_and_stress.rs +0 -0
  437. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_edge_cases.rs +0 -0
  438. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_edge_semantics.rs +0 -0
  439. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_episodes.rs +0 -0
  440. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_executemany.rs +0 -0
  441. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_exists_subquery.rs +0 -0
  442. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_explain.rs +0 -0
  443. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_extreme_hunt.rs +0 -0
  444. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_fast_paths.rs +0 -0
  445. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_fuzz_sql_combinations.rs +0 -0
  446. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_groupby_first_query.rs +0 -0
  447. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_hybrid_search.rs +0 -0
  448. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_index_maintenance.rs +0 -0
  449. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_index_reopen.rs +0 -0
  450. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_index_robustness.rs +0 -0
  451. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_indexed_query_semantics.rs +0 -0
  452. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_insert_engine.rs +0 -0
  453. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_insert_explicit_fastpath.rs +0 -0
  454. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_insert_paths_index_maintenance.rs +0 -0
  455. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_insert_select.rs +0 -0
  456. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_ioctree.rs +0 -0
  457. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_isolation_levels.rs +0 -0
  458. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_join_count_fold.rs +0 -0
  459. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_knn_parallel.rs +0 -0
  460. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_large_rows.rs +0 -0
  461. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_m5_mines.rs +0 -0
  462. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_mcap_import.rs +0 -0
  463. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_memory_leak.rs +0 -0
  464. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_memory_linear.rs +0 -0
  465. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_multimodal.rs +0 -0
  466. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_multimodal_e2e.rs +0 -0
  467. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_mvcc_isolation.rs +0 -0
  468. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_mvcc_recovery.rs +0 -0
  469. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_no_bloat.rs +0 -0
  470. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_optimization_regression.rs +0 -0
  471. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_order_by_expr_keys.rs +0 -0
  472. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_parser_fuzz_regression.rs +0 -0
  473. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_performance_guarantees.rs +0 -0
  474. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_pk_change_semantics.rs +0 -0
  475. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_prepared_dml.rs +0 -0
  476. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_public_api.rs +0 -0
  477. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_query_equivalence.rs +0 -0
  478. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_range_count.rs +0 -0
  479. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_release_readiness.rs +0 -0
  480. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_repro12.rs +0 -0
  481. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_round12_optimizations.rs +0 -0
  482. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_round12b_edge.rs +0 -0
  483. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_round12c_e2e_bugs.rs +0 -0
  484. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_round13_bug_hunt.rs +0 -0
  485. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_row_api.rs +0 -0
  486. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_rrf_hybrid.rs +0 -0
  487. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_savepoint_window.rs +0 -0
  488. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_scalability.rs +0 -0
  489. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_scan_integrity.rs +0 -0
  490. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_semantic_edges.rs +0 -0
  491. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_spatial_index.rs +0 -0
  492. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_spatial_large_geometry.rs +0 -0
  493. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_spatial_sql_semantics.rs +0 -0
  494. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_sql_advanced.rs +0 -0
  495. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_sql_correctness.rs +0 -0
  496. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_sql_correctness_part2.rs +0 -0
  497. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_sql_ddl_features.rs +0 -0
  498. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_sql_errors_edges.rs +0 -0
  499. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_sql_functions.rs +0 -0
  500. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_sql_groupby.rs +0 -0
  501. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_sql_joins.rs +0 -0
  502. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_sql_scenarios.rs +0 -0
  503. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_storage_integrity.rs +0 -0
  504. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_stress.rs +0 -0
  505. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_stress_hunt.rs +0 -0
  506. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_timeseries_index.rs +0 -0
  507. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_timestamp_recovery.rs +0 -0
  508. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_transaction_semantics.rs +0 -0
  509. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_txn_ddl_and_nan_ordering.rs +0 -0
  510. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_update_perf.rs +0 -0
  511. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_upsert.rs +0 -0
  512. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_v050_features.rs +0 -0
  513. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_vec_m0.rs +0 -0
  514. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_vec_m4.rs +0 -0
  515. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_vector_column_read_paths.rs +0 -0
  516. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_vector_durability.rs +0 -0
  517. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_vector_index_recall.rs +0 -0
  518. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_vector_spatial_text.rs +0 -0
  519. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_vector_visibility.rs +0 -0
  520. {motedb_python-0.14.0 → motedb_python-0.15.0}/tests/test_wide_tables.rs +0 -0
  521. {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.14.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.14.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"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: motedb-python
3
- Version: 0.14.0
3
+ Version: 0.15.0
4
4
  Classifier: Development Status :: 4 - Beta
5
5
  Classifier: Intended Audience :: Developers
6
6
  Classifier: Intended Audience :: Science/Research
@@ -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 |
@@ -0,0 +1,3 @@
1
+ module github.com/motedb/motedb/bindings/go
2
+
3
+ go 1.22