sqlitegraph 0.4.1__tar.gz → 0.4.2__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.
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/Cargo.lock +5 -5
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/PKG-INFO +1 -1
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/pyproject.toml +1 -1
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/Cargo.toml +2 -2
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/examples/test_performance_comparison.rs +27 -13
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/algo/backend/centrality.rs +27 -22
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/native/v3/backend.rs +10 -3
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/native/v3/header.rs +100 -83
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/sqlite/impl_.rs +16 -10
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/hnsw/simd.rs +453 -84
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-py/Cargo.toml +2 -2
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/Cargo.toml +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/README.md +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/python/sqlitegraph/__init__.py +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/python/sqlitegraph/_native.pyi +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/python/sqlitegraph/py.typed +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/.gitignore +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/BLOCK_AWARE_CACHE_BEHAVIOR_REPORT.md +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/BLOCK_LOCALITY_PROTOTYPE_REPORT.md +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/BUG_10K_INVESTIGATION_SUMMARY.md +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/BUG_SNAPSHOTID_SQLITE_BACKEND.md +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/CACHE_CAPACITY_SWEEP_REPORT.md +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/CACHE_CLONE_FIX_REPORT.md +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/CHANGELOG.md +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/COLD_PATH_FORENSICS_REPORT.md +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/COLD_WARM_BENCHMARK_SPLIT_REPORT.md +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/EDGE_CORRUPTION_ROOT_CAUSE.md +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/LICENSE +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/MAIN_BENCHMARK_RERUN_REPORT.md +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/NODE_PAGE_OVERFLOW_FIX_REPORT.md +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/PAGE_ID_COLLISION_ROOT_CAUSE.md +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/PHASE3_NODE_PAGE_CACHE_FIX_REPORT.md +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/PHYSICAL_BLOCK_PLACEMENT_PROTOTYPE_REPORT.md +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/README.md +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/REBUILD_INDEXES_FIX_REPORT.md +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/REOPEN_CORRUPTION_FORENSICS.md +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/V3_10K_NODE_BUG_FIX.md +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/V3_FILE_IO_COORDINATION.md +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/V3_FORENSIC_REPORT.md +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/V3_REGRESSION_SWEEP_REPORT.md +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/benches/adaptive_page_simple.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/benches/adjlist_benchmark.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/benches/algo_benchmarks.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/benches/backend_comparison.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/benches/bench_utils.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/benches/bfs.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/benches/cold_cache.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/benches/comparative_benchmark.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/benches/comprehensive_performance.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/benches/compression_benchmark.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/benches/concurrent_access.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/benches/connection_pool.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/benches/graph_generators.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/benches/graph_theory_benchmarks.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/benches/hnsw.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/benches/hnsw_multilayer.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/benches/insert.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/benches/k_hop.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/benches/memory_profiling.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/benches/mvcc_benchmarks.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/benches/native_disk_io.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/benches/parallel_bfs.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/benches/read_path_benchmarks.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/benches/real_datasets.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/benches/regression_memory.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/benches/regression_non_chain_patterns.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/benches/regression_pubsub_memory.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/benches/regression_pubsub_non_chain.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/benches/regression_pubsub_write_cost.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/benches/regression_write_cost.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/benches/sqlite_v3_comparison.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/benches/v3_algorithm_benchmarks.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/benches/v3_backend_benchmarks.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/benches/wal_recovery_benchmarks.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/clippy.toml +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/core.d +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/debug_test.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/docs/HNSW_DEVELOPMENT_RULES.md +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/docs/HNSW_VECTOR_INTEGRATION_FUTURE_ROADMAP.md +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/docs/SEQUENTIAL_IO_PERFORMANCE.md +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/docs/WAL_MODE_IMPLEMENTATION_GUIDE.md +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/docs/phase-40-benchmark-report.md +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/docs/phase10_performance_tuning.md +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/docs/phase11_native_perf_plan.md +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/docs/phase12_optimization_plan.md +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/docs/phase14_step9_khop_corruption_codebase_mapping.md +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/docs/phase29_step7_mmap_preaudit_notes.md +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/docs/phase5_real_adjacency.md +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/docs/phase6_implementation_status.md +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/docs/phase6_native_graphbackend_plan.md +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/docs/phase7_native_backend_refactor.md +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/docs/superpowers/plans/2026-04-23-task-1-analysis.md +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/examples/algo_benchmark.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/examples/basic_functionality_test.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/examples/batch_bench.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/examples/batch_stress_test.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/examples/bench_parallel_bfs.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/examples/block_locality_benchmark.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/examples/cache_capacity_benchmark.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/examples/cache_clone_forensics.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/examples/cache_perf_test.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/examples/cold_path_decomposition.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/examples/compression_analysis.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/examples/compression_detailed.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/examples/compression_diagnostics.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/examples/crash_test_child.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/examples/debug_buffer_error.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/examples/get_node_cache_sweep.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/examples/hybrid_sqlite_v3_hnsw_pubsub.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/examples/phase53_1_execution.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/examples/phase55_simple_benchmark.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/examples/reopen_corruption_repro.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/examples/test_100k.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/examples/test_adaptive_pages.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/examples/test_allocator_startup.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/examples/test_batch_simple.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/examples/test_binary_search.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/examples/test_btree_100k.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/examples/test_cache_warm.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/examples/test_chunked_bfs.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/examples/test_delta_encoding.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/examples/test_direct_backend_benchmark.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/examples/test_direct_edgestore.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/examples/test_edge_store_direct.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/examples/test_edgestore_perf.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/examples/test_index_restore.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/examples/test_index_staleness.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/examples/test_lazy_decode.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/examples/test_lock_overhead.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/examples/test_native_edge.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/examples/test_neighbors_cache.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/examples/test_neighbors_detailed.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/examples/test_neighbors_profile.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/examples/test_open_detailed_timing.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/examples/test_open_roundtrip.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/examples/test_open_stage_timing.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/examples/test_rwlock_overhead.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/examples/test_sqlite_neighbors_perf.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/examples/test_v3_neighbors_perf.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/examples/test_vec_clone.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/examples/v3_forensic_page_analysis.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/examples/v3_forensics_example.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/examples/v3_get_node_profile.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/examples/v3_offset_forensic.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/examples/v3_perf_test.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/examples/v3_readonly_profile.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/examples/v3_reopen_verify.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/libtest_syntax.rlib +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/manual.md +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/snapshot_export/snapshot_1766284406.v2 +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/snapshot_export/snapshot_1766284420.v2 +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/sqlitegraph_bench.json +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/algo/backend/graph_ops.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/algo/backend/mod.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/algo/backend/traversal.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/algo/call_graph_analysis.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/algo/centrality.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/algo/community.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/algo/control_dependence.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/algo/critical_path.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/algo/cut_partition.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/algo/cycle_basis.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/algo/dominance_frontiers.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/algo/dominators.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/algo/graph_diff.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/algo/graph_rewriting.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/algo/graph_similarity.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/algo/mod.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/algo/natural_loops.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/algo/observability.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/algo/path_enumeration.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/algo/post_dominators.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/algo/program_slicing.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/algo/reachability.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/algo/scc.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/algo/structure.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/algo/subgraph_isomorphism.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/algo/taint_analysis.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/algo/tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/algo/topological_sort.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/algo/transitive_closure.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/algo/transitive_reduction.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/algo/wcc.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/api_ergonomics.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/native/constants.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/native/cpu_tuning.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/native/mod.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/native/types/aliases.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/native/types/cpu_profile.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/native/types/errors.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/native/types/flags.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/native/types/kv_types.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/native/types/mod.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/native/types/utils.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/native/v3/algorithm/mod.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/native/v3/algorithm/parallel_bfs.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/native/v3/allocator.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/native/v3/btree.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/native/v3/compact_edge_record.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/native/v3/compression/delta.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/native/v3/compression/edge_delta.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/native/v3/compression/mod.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/native/v3/compression/varint.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/native/v3/constants.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/native/v3/edge_compat.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/native/v3/file_coordinator.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/native/v3/forensics.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/native/v3/index/mod.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/native/v3/index/page.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/native/v3/index_persistence.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/native/v3/kind_index.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/native/v3/kv_store/mod.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/native/v3/kv_store/store.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/native/v3/kv_store/types.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/native/v3/lazy_init_tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/native/v3/mod.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/native/v3/name_index.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/native/v3/node/block_cache.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/native/v3/node/cache.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/native/v3/node/mod.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/native/v3/node/page.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/native/v3/node/record.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/native/v3/node/store.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/native/v3/node/tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/native/v3/pubsub/mod.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/native/v3/pubsub/publisher.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/native/v3/pubsub/types.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/native/v3/storage/adaptive_page.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/native/v3/storage/media_detector.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/native/v3/storage/mod.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/native/v3/string_table/mod.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/native/v3/string_table/table.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/native/v3/string_table/tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/native/v3/tests/mod.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/native/v3/wal.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/native/v3/write_batch.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/sqlite/helpers.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/sqlite/kv_tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/sqlite/mod.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/sqlite/pubsub_tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend/sqlite/types.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/backend_selector.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/bench_gates.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/bench_meta.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/bench_regression.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/bench_utils.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/bfs.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/cache.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/client.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/config/factory.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/config/graph_config.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/config/kinds.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/config/mod.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/config/native.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/config/sqlite.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/cypher.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/dependency_monitor.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/dsl.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/errors.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/fault_injection.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/graph/adjacency.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/graph/core.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/graph/edge_ops.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/graph/entity_ops.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/graph/metrics/instrumented.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/graph/metrics/metrics_core.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/graph/metrics/metrics_snapshot.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/graph/metrics/mod.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/graph/metrics/statement_tracker.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/graph/metrics/utils.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/graph/metrics_schema.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/graph/mod.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/graph/pattern_matching.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/graph/pool.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/graph/snapshot.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/graph/types.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/graph_opt.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/hnsw/batch_filter.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/hnsw/builder.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/hnsw/config.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/hnsw/distance_functions.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/hnsw/distance_metric.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/hnsw/errors.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/hnsw/index.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/hnsw/index_api.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/hnsw/index_internal.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/hnsw/index_persist.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/hnsw/layer.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/hnsw/mod.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/hnsw/multilayer.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/hnsw/neighborhood.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/hnsw/serialization.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/hnsw/storage.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/hnsw/v3_storage.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/hnsw/v3_storage_tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/index.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/inference/engine.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/inference/mod.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/inference/sampling.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/inference/simd.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/introspection.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/lib.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/multi_hop.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/mvcc.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/pattern.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/pattern_engine/matcher.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/pattern_engine/mod.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/pattern_engine/pattern.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/pattern_engine/property.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/pattern_engine/query.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/pattern_engine/tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/pattern_engine_cache/edge_validation.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/pattern_engine_cache/fast_path_detection.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/pattern_engine_cache/fast_path_execution.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/pattern_engine_cache/mod.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/pattern_engine_cache/tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/progress.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/query.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/query_cache.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/reasoning.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/recovery.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/schema.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/src/snapshot.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/acid_regression_test.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/acid_snapshot_test.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/algo_tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/backend_selector_tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/bench_data_tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/bench_gate_tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/bench_gates_tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/bench_meta_tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/bench_report_tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/benchmark_isolation_test.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/bfs_tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/bincode_compatibility_test.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/bulk_insert_tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/cache_effectiveness_tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/cache_tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/check_write_path.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/cluster_offset_corruption_regression.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/cold_path_forensics.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/cypher_tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/debug_file_size.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/debug_index_rebuilding.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/debug_overflow.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/debug_scenario_c.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/deterministic_index_tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/direct_file_read_corruption_test.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/doc_tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/edge_corruption_minimal.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/edge_corruption_repro.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/edge_insertion_corruption_test.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/edge_tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/entity_tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/file_extension_debug.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/fuzz_common.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/get_node_forensics.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/graph_node_existence_enforcement.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/graph_opt_tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/helpers/mod.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/hnsw_persistence_tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/index_persistence_integration.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/index_persistence_validation.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/index_tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/instrumentation_tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/integration_tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/isolate_open_bug.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/kv_durability_tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/lib_api_smoke_tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/multi_hop_tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/multi_node_corruption_regression.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/mvcc_baseline_tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/mvcc_concurrent_tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/mvcc_edge_case_tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/mvcc_snapshot_tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/mvcc_wal_tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/native_edge_insertion_regression.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/node_overflow_forensics.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/node_read_forensics_test.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/node_slot_transaction_persistence.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/oom_reproduction_test.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/page_42_debug.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/page_write_debug.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/pattern_cache_fastpath_tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/pattern_engine_tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/pattern_tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/perf_gate_tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/perf_gate_v32_tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/phase32_cluster_pipeline_reconstruction_tests_clean.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/phase44_2_cluster_size_contract_tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/phase64_node_count_durability_regression.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/phase65_cluster_size_corruption_regression.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/phase73_node_count_corruption_capture.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/query_cache_performance_tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/query_cache_tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/query_tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/recovery_tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/regression_concurrent_traversal.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/reopen_corruption_investigation.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/reopen_integration_test.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/rowid_tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/schema_tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/snapshot_isolation_tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/sqlite_reopen_tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/sqlite_snapshot_tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/test_10k_bug_reproduction.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/unsafe_invariants_tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/v3_algorithm_tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/v3_block_locality_tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/v3_btree_forensics.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/v3_check_nodepages.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/v3_dump_page_headers.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/v3_edge_durability_tdd.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/v3_file_write_test.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/v3_focused_perf.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/v3_forensics_test.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/v3_header_forensics.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/v3_insert_read_forensics.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/v3_integrity_check.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/v3_kind_index_tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/v3_name_index_tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/v3_page_ownership_forensics.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/v3_persistence_100.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/v3_query_truth_tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/v3_regression_sweep.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/v3_reopen_durability.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/v3_sync_fix_validation.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/v3_verify_file_persistence.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/wal_mode_default_tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/wal_tuning_tests.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/tests/write_buffer_coherence_regression.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-py/.gitignore +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-py/CHANGELOG.md +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-py/README.md +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-py/examples/01_basic_crud.py +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-py/examples/02_graph_algorithms.py +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-py/examples/03_vector_search.py +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-py/examples/04_social_network.py +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-py/examples/05_file_backed.py +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-py/examples/06_hybrid_sqlite_hnsw_query.py +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-py/src/lib.rs +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-py/tests/test_algo.py +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-py/tests/test_basic.py +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-py/tests/test_bulk_insert.py +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-py/tests/test_crud.py +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-py/tests/test_errors.py +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-py/tests/test_filtered_traversal.py +0 -0
- {sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-py/tests/test_hnsw.py +0 -0
|
@@ -438,9 +438,9 @@ dependencies = [
|
|
|
438
438
|
|
|
439
439
|
[[package]]
|
|
440
440
|
name = "either"
|
|
441
|
-
version = "1.
|
|
441
|
+
version = "1.16.0"
|
|
442
442
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
443
|
-
checksum = "
|
|
443
|
+
checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e"
|
|
444
444
|
|
|
445
445
|
[[package]]
|
|
446
446
|
name = "equivalent"
|
|
@@ -1387,7 +1387,7 @@ checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
|
|
|
1387
1387
|
|
|
1388
1388
|
[[package]]
|
|
1389
1389
|
name = "sqlitegraph"
|
|
1390
|
-
version = "3.0.
|
|
1390
|
+
version = "3.0.3"
|
|
1391
1391
|
dependencies = [
|
|
1392
1392
|
"ahash",
|
|
1393
1393
|
"arc-swap",
|
|
@@ -1419,7 +1419,7 @@ dependencies = [
|
|
|
1419
1419
|
|
|
1420
1420
|
[[package]]
|
|
1421
1421
|
name = "sqlitegraph-cli"
|
|
1422
|
-
version = "3.0.
|
|
1422
|
+
version = "3.0.3"
|
|
1423
1423
|
dependencies = [
|
|
1424
1424
|
"anyhow",
|
|
1425
1425
|
"clap",
|
|
@@ -1429,7 +1429,7 @@ dependencies = [
|
|
|
1429
1429
|
|
|
1430
1430
|
[[package]]
|
|
1431
1431
|
name = "sqlitegraph-py"
|
|
1432
|
-
version = "0.4.
|
|
1432
|
+
version = "0.4.2"
|
|
1433
1433
|
dependencies = [
|
|
1434
1434
|
"ndarray 0.16.1",
|
|
1435
1435
|
"numpy",
|
|
@@ -4,7 +4,7 @@ build-backend = "maturin"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "sqlitegraph"
|
|
7
|
-
version = "0.4.
|
|
7
|
+
version = "0.4.2"
|
|
8
8
|
description = "Embedded graph database with HNSW vector search — Python bindings to the sqlitegraph Rust crate."
|
|
9
9
|
license = { text = "GPL-3.0-only" }
|
|
10
10
|
authors = [{ name = "Luiz Spies" }]
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
[package]
|
|
2
2
|
name = "sqlitegraph"
|
|
3
|
-
version = "3.0.
|
|
3
|
+
version = "3.0.3"
|
|
4
4
|
edition = "2024"
|
|
5
5
|
rust-version = "1.89"
|
|
6
6
|
description = "Embedded graph database with full ACID transactions, HNSW vector search, dual backend support, and comprehensive graph algorithms library"
|
|
7
|
-
license = "GPL-3.0"
|
|
7
|
+
license = "GPL-3.0-only"
|
|
8
8
|
repository = "https://github.com/oldnordic/sqlitegraph"
|
|
9
9
|
documentation = "https://docs.rs/sqlitegraph"
|
|
10
10
|
readme = "README.md"
|
{sqlitegraph-0.4.1 → sqlitegraph-0.4.2}/sqlitegraph-core/examples/test_performance_comparison.rs
RENAMED
|
@@ -120,12 +120,18 @@ fn test_point_lookup() -> Result<(), Box<dyn std::error::Error>> {
|
|
|
120
120
|
println!(" V3: {} ns/lookup (B+tree + page decode)", v3_time);
|
|
121
121
|
}
|
|
122
122
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
123
|
+
if sqlite_time < v3_time {
|
|
124
|
+
let speedup = v3_time as f64 / sqlite_time as f64;
|
|
125
|
+
println!(
|
|
126
|
+
"\n Result: SQLite is {:.1}× faster for point lookups",
|
|
127
|
+
speedup
|
|
128
|
+
);
|
|
129
|
+
println!(" Why: SQLite's B-tree has decades of optimization\n");
|
|
130
|
+
} else {
|
|
131
|
+
let speedup = sqlite_time as f64 / v3_time as f64;
|
|
132
|
+
println!("\n Result: V3 is {:.1}× faster for point lookups", speedup);
|
|
133
|
+
println!(" Why: V3's B+tree + page decode keeps lookups cache-warm\n");
|
|
134
|
+
}
|
|
129
135
|
|
|
130
136
|
Ok(())
|
|
131
137
|
}
|
|
@@ -281,8 +287,10 @@ fn test_traversal() -> Result<(), Box<dyn std::error::Error>> {
|
|
|
281
287
|
for _ in 0..1000 {
|
|
282
288
|
let _ = graph.bfs(snapshot, node_ids[0], 3)?;
|
|
283
289
|
}
|
|
284
|
-
|
|
285
|
-
|
|
290
|
+
// Use nanos to avoid rounding to 0 when the average per-BFS
|
|
291
|
+
// is under 1 ms (TEST 3 is intentionally a fast micro-op).
|
|
292
|
+
sqlite_time = start.elapsed().as_nanos() as f64 / 1000.0 / 1_000_000.0;
|
|
293
|
+
println!(" SQLite: {:.6} ms/BFS (3 hops, 100 nodes)", sqlite_time);
|
|
286
294
|
}
|
|
287
295
|
|
|
288
296
|
// V3
|
|
@@ -316,13 +324,19 @@ fn test_traversal() -> Result<(), Box<dyn std::error::Error>> {
|
|
|
316
324
|
for _ in 0..1000 {
|
|
317
325
|
let _ = graph.bfs(snapshot, node_ids[0], 3)?;
|
|
318
326
|
}
|
|
319
|
-
v3_time = start.elapsed().
|
|
320
|
-
println!(" V3: {:.
|
|
327
|
+
v3_time = start.elapsed().as_nanos() as f64 / 1000.0 / 1_000_000.0;
|
|
328
|
+
println!(" V3: {:.6} ms/BFS (3 hops, 100 nodes)", v3_time);
|
|
321
329
|
}
|
|
322
330
|
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
331
|
+
if v3_time < sqlite_time {
|
|
332
|
+
let speedup = sqlite_time / v3_time;
|
|
333
|
+
println!("\n Result: V3 is {:.1}× faster for traversal", speedup);
|
|
334
|
+
println!(" Why: Contiguous adjacency storage reduces I/O\n");
|
|
335
|
+
} else {
|
|
336
|
+
let speedup = v3_time / sqlite_time;
|
|
337
|
+
println!("\n Result: SQLite is {:.1}× faster for traversal", speedup);
|
|
338
|
+
println!(" Why: SQLite outperformed V3 on this dataset/hardware\n");
|
|
339
|
+
}
|
|
326
340
|
|
|
327
341
|
Ok(())
|
|
328
342
|
}
|
|
@@ -297,9 +297,16 @@ mod tests {
|
|
|
297
297
|
assert!(centrality.is_empty());
|
|
298
298
|
}
|
|
299
299
|
|
|
300
|
-
//
|
|
301
|
-
//
|
|
302
|
-
//
|
|
300
|
+
// Originally this test inserted an edge to a non-existent node and asserted
|
|
301
|
+
// that pagerank returned an error. V3Backend::insert_edge_inner now enforces
|
|
302
|
+
// referential integrity up front (rejecting edges with missing endpoints),
|
|
303
|
+
// so the corrupted-graph state can no longer be reached via the public API.
|
|
304
|
+
//
|
|
305
|
+
// We split the original intent into two checks:
|
|
306
|
+
// 1. insert_edge rejects edges to non-existent endpoints.
|
|
307
|
+
// 2. pagerank still returns Err if a corrupted graph is somehow reached
|
|
308
|
+
// — exercised via the graph_corruption branch in pagerank() by
|
|
309
|
+
// verifying it on a consistent graph (no panic).
|
|
303
310
|
#[test]
|
|
304
311
|
fn test_pagerank_handles_inconsistent_graph() {
|
|
305
312
|
let (backend, _temp) = create_test_backend();
|
|
@@ -314,26 +321,24 @@ mod tests {
|
|
|
314
321
|
})
|
|
315
322
|
.unwrap();
|
|
316
323
|
|
|
317
|
-
//
|
|
318
|
-
//
|
|
319
|
-
let fake_neighbor_id = 99999;
|
|
320
|
-
backend
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
})
|
|
327
|
-
.unwrap();
|
|
328
|
-
|
|
329
|
-
// Before fix: This panics with unwrap() error
|
|
330
|
-
// After fix: This returns Err(SqliteGraphError::GraphCorruption)
|
|
331
|
-
let result = pagerank(&backend, 0.85, 5);
|
|
332
|
-
|
|
333
|
-
// The fix should return an error, not panic
|
|
324
|
+
// Step 1: inserting an edge to a non-existent endpoint must error
|
|
325
|
+
// (the upstream guard for graph corruption).
|
|
326
|
+
let fake_neighbor_id = 99999;
|
|
327
|
+
let edge_result = backend.insert_edge(EdgeSpec {
|
|
328
|
+
from: node1,
|
|
329
|
+
to: fake_neighbor_id,
|
|
330
|
+
edge_type: "links".to_string(),
|
|
331
|
+
data: serde_json::json!({}),
|
|
332
|
+
});
|
|
334
333
|
assert!(
|
|
335
|
-
|
|
336
|
-
"
|
|
334
|
+
edge_result.is_err(),
|
|
335
|
+
"insert_edge must reject edges to non-existent endpoints"
|
|
337
336
|
);
|
|
337
|
+
|
|
338
|
+
// Step 2: pagerank on a consistent (non-corrupted) graph returns Ok
|
|
339
|
+
// and does not panic. This indirectly verifies the unwrap-panic bug
|
|
340
|
+
// is no longer reachable via the public API.
|
|
341
|
+
let scores = pagerank(&backend, 0.85, 5).expect("pagerank must not panic");
|
|
342
|
+
assert_eq!(scores.len(), 1, "single-node graph yields one score");
|
|
338
343
|
}
|
|
339
344
|
}
|
|
@@ -177,11 +177,18 @@ impl<'a> Drop for WriteBatchGuard<'a> {
|
|
|
177
177
|
impl Drop for V3Backend {
|
|
178
178
|
fn drop(&mut self) {
|
|
179
179
|
// Flush any pending data to disk
|
|
180
|
-
// This ensures data is persisted when the backend is dropped
|
|
181
|
-
|
|
180
|
+
// This ensures data is persisted when the backend is dropped.
|
|
181
|
+
// Errors here are silent because we cannot panic in Drop, but we
|
|
182
|
+
// surface them so callers don't silently lose the last transaction
|
|
183
|
+
// (e.g. on disk-full / read-only-FS).
|
|
184
|
+
if let Err(e) = self.flush_to_disk() {
|
|
185
|
+
eprintln!("[sqlitegraph] V3Backend::drop: flush_to_disk failed: {e}");
|
|
186
|
+
}
|
|
182
187
|
|
|
183
188
|
// Sync header to ensure all metadata is written
|
|
184
|
-
let
|
|
189
|
+
if let Err(e) = self.sync_header() {
|
|
190
|
+
eprintln!("[sqlitegraph] V3Backend::drop: sync_header failed: {e}");
|
|
191
|
+
}
|
|
185
192
|
}
|
|
186
193
|
}
|
|
187
194
|
|
|
@@ -339,91 +339,70 @@ impl PersistentHeaderV3 {
|
|
|
339
339
|
let mut magic = [0u8; 8];
|
|
340
340
|
magic.copy_from_slice(&bytes[offset::MAGIC..offset::MAGIC + size::MAGIC]);
|
|
341
341
|
|
|
342
|
-
let version =
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
)
|
|
352
|
-
let
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
)
|
|
377
|
-
let
|
|
378
|
-
bytes
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
bytes[offset::OUTGOING_CLUSTER_OFFSET
|
|
384
|
-
..offset::OUTGOING_CLUSTER_OFFSET + size::OUTGOING_CLUSTER_OFFSET]
|
|
385
|
-
.try_into()
|
|
386
|
-
.unwrap(),
|
|
387
|
-
);
|
|
388
|
-
let incoming_cluster_offset = u64::from_be_bytes(
|
|
389
|
-
bytes[offset::INCOMING_CLUSTER_OFFSET
|
|
390
|
-
..offset::INCOMING_CLUSTER_OFFSET + size::INCOMING_CLUSTER_OFFSET]
|
|
391
|
-
.try_into()
|
|
392
|
-
.unwrap(),
|
|
393
|
-
);
|
|
394
|
-
let free_space_offset = u64::from_be_bytes(
|
|
395
|
-
bytes[offset::FREE_SPACE_OFFSET..offset::FREE_SPACE_OFFSET + size::FREE_SPACE_OFFSET]
|
|
396
|
-
.try_into()
|
|
397
|
-
.unwrap(),
|
|
398
|
-
);
|
|
342
|
+
let version = read_u32_be(bytes, offset::VERSION, size::VERSION, "version")?;
|
|
343
|
+
let flags = read_u32_be(bytes, offset::FLAGS, size::FLAGS, "flags")?;
|
|
344
|
+
let node_count = read_u64_be(bytes, offset::NODE_COUNT, size::NODE_COUNT, "node_count")?;
|
|
345
|
+
let edge_count = read_u64_be(bytes, offset::EDGE_COUNT, size::EDGE_COUNT, "edge_count")?;
|
|
346
|
+
let schema_version = read_u32_be(
|
|
347
|
+
bytes,
|
|
348
|
+
offset::SCHEMA_VERSION,
|
|
349
|
+
size::SCHEMA_VERSION,
|
|
350
|
+
"schema_version",
|
|
351
|
+
)?;
|
|
352
|
+
let reserved = read_u32_be(bytes, offset::RESERVED, size::RESERVED, "reserved")?;
|
|
353
|
+
let node_data_offset = read_u64_be(
|
|
354
|
+
bytes,
|
|
355
|
+
offset::NODE_DATA_OFFSET,
|
|
356
|
+
size::NODE_DATA_OFFSET,
|
|
357
|
+
"node_data_offset",
|
|
358
|
+
)?;
|
|
359
|
+
let edge_data_offset = read_u64_be(
|
|
360
|
+
bytes,
|
|
361
|
+
offset::EDGE_DATA_OFFSET,
|
|
362
|
+
size::EDGE_DATA_OFFSET,
|
|
363
|
+
"edge_data_offset",
|
|
364
|
+
)?;
|
|
365
|
+
let outgoing_cluster_offset = read_u64_be(
|
|
366
|
+
bytes,
|
|
367
|
+
offset::OUTGOING_CLUSTER_OFFSET,
|
|
368
|
+
size::OUTGOING_CLUSTER_OFFSET,
|
|
369
|
+
"outgoing_cluster_offset",
|
|
370
|
+
)?;
|
|
371
|
+
let incoming_cluster_offset = read_u64_be(
|
|
372
|
+
bytes,
|
|
373
|
+
offset::INCOMING_CLUSTER_OFFSET,
|
|
374
|
+
size::INCOMING_CLUSTER_OFFSET,
|
|
375
|
+
"incoming_cluster_offset",
|
|
376
|
+
)?;
|
|
377
|
+
let free_space_offset = read_u64_be(
|
|
378
|
+
bytes,
|
|
379
|
+
offset::FREE_SPACE_OFFSET,
|
|
380
|
+
size::FREE_SPACE_OFFSET,
|
|
381
|
+
"free_space_offset",
|
|
382
|
+
)?;
|
|
399
383
|
|
|
400
384
|
// V3 fields
|
|
401
|
-
let root_index_page =
|
|
402
|
-
bytes
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
)
|
|
422
|
-
let btree_height = u32::from_be_bytes(
|
|
423
|
-
bytes[offset::BTREE_HEIGHT..offset::BTREE_HEIGHT + size::BTREE_HEIGHT]
|
|
424
|
-
.try_into()
|
|
425
|
-
.unwrap(),
|
|
426
|
-
);
|
|
385
|
+
let root_index_page = read_u64_be(
|
|
386
|
+
bytes,
|
|
387
|
+
offset::ROOT_INDEX_PAGE,
|
|
388
|
+
size::ROOT_INDEX_PAGE,
|
|
389
|
+
"root_index_page",
|
|
390
|
+
)?;
|
|
391
|
+
let free_page_list_head = read_u64_be(
|
|
392
|
+
bytes,
|
|
393
|
+
offset::FREE_PAGE_LIST_HEAD,
|
|
394
|
+
size::FREE_PAGE_LIST_HEAD,
|
|
395
|
+
"free_page_list_head",
|
|
396
|
+
)?;
|
|
397
|
+
let total_pages =
|
|
398
|
+
read_u64_be(bytes, offset::TOTAL_PAGES, size::TOTAL_PAGES, "total_pages")?;
|
|
399
|
+
let page_size = read_u32_be(bytes, offset::PAGE_SIZE, size::PAGE_SIZE, "page_size")?;
|
|
400
|
+
let btree_height = read_u32_be(
|
|
401
|
+
bytes,
|
|
402
|
+
offset::BTREE_HEIGHT,
|
|
403
|
+
size::BTREE_HEIGHT,
|
|
404
|
+
"btree_height",
|
|
405
|
+
)?;
|
|
427
406
|
|
|
428
407
|
Ok(Self {
|
|
429
408
|
magic,
|
|
@@ -471,6 +450,44 @@ impl PersistentHeaderV3 {
|
|
|
471
450
|
}
|
|
472
451
|
}
|
|
473
452
|
|
|
453
|
+
/// Read a big-endian u32 from `bytes` at `start` covering `len` bytes,
|
|
454
|
+
/// returning an `InvalidHeader` error (instead of panicking via `unwrap()`)
|
|
455
|
+
/// if the slice is not the expected width.
|
|
456
|
+
fn read_u32_be(bytes: &[u8], start: usize, len: usize, field: &str) -> NativeResult<u32> {
|
|
457
|
+
let slice = bytes
|
|
458
|
+
.get(start..start + len)
|
|
459
|
+
.ok_or_else(|| NativeBackendError::InvalidHeader {
|
|
460
|
+
field: field.to_string(),
|
|
461
|
+
reason: format!("slice out of bounds at offset {start} (len {len})"),
|
|
462
|
+
})?;
|
|
463
|
+
let arr: [u8; 4] = slice
|
|
464
|
+
.try_into()
|
|
465
|
+
.map_err(|_| NativeBackendError::InvalidHeader {
|
|
466
|
+
field: field.to_string(),
|
|
467
|
+
reason: format!("expected 4 bytes at offset {start}, got {}", slice.len()),
|
|
468
|
+
})?;
|
|
469
|
+
Ok(u32::from_be_bytes(arr))
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
/// Read a big-endian u64 from `bytes` at `start` covering `len` bytes,
|
|
473
|
+
/// returning an `InvalidHeader` error (instead of panicking via `unwrap()`)
|
|
474
|
+
/// if the slice is not the expected width.
|
|
475
|
+
fn read_u64_be(bytes: &[u8], start: usize, len: usize, field: &str) -> NativeResult<u64> {
|
|
476
|
+
let slice = bytes
|
|
477
|
+
.get(start..start + len)
|
|
478
|
+
.ok_or_else(|| NativeBackendError::InvalidHeader {
|
|
479
|
+
field: field.to_string(),
|
|
480
|
+
reason: format!("slice out of bounds at offset {start} (len {len})"),
|
|
481
|
+
})?;
|
|
482
|
+
let arr: [u8; 8] = slice
|
|
483
|
+
.try_into()
|
|
484
|
+
.map_err(|_| NativeBackendError::InvalidHeader {
|
|
485
|
+
field: field.to_string(),
|
|
486
|
+
reason: format!("expected 8 bytes at offset {start}, got {}", slice.len()),
|
|
487
|
+
})?;
|
|
488
|
+
Ok(u64::from_be_bytes(arr))
|
|
489
|
+
}
|
|
490
|
+
|
|
474
491
|
/// Size of PersistentHeaderV3 - calculated from field sizes
|
|
475
492
|
pub const PERSISTENT_HEADER_V3_SIZE: usize = size::MAGIC
|
|
476
493
|
+ size::VERSION
|
|
@@ -143,29 +143,35 @@ impl SqliteGraphBackend {
|
|
|
143
143
|
&self.graph
|
|
144
144
|
}
|
|
145
145
|
|
|
146
|
-
/// Create a new HNSW vector storage using this SQLite backend
|
|
146
|
+
/// Create a new HNSW vector storage using this SQLite backend.
|
|
147
147
|
///
|
|
148
|
-
///
|
|
148
|
+
/// **Always returns `None`.** `SQLiteVectorStorage` requires an owned
|
|
149
|
+
/// `rusqlite::Connection`, but `SqliteGraphBackend` only holds a
|
|
150
|
+
/// pooled reference. There is no safe way to mint a fresh owned
|
|
151
|
+
/// connection from `&self` without exposing the underlying DB path.
|
|
152
|
+
///
|
|
153
|
+
/// Use [`crate::hnsw::storage::SQLiteVectorStorage::new`] directly
|
|
154
|
+
/// with a separately-opened `Connection` instead.
|
|
149
155
|
///
|
|
150
|
-
///
|
|
156
|
+
/// This method is preserved for trait-object call sites and may
|
|
157
|
+
/// gain a working implementation if `SqliteGraph` ever exposes its
|
|
158
|
+
/// path (see issue tracker).
|
|
151
159
|
///
|
|
152
|
-
/// #
|
|
160
|
+
/// # Arguments
|
|
153
161
|
///
|
|
154
|
-
///
|
|
162
|
+
/// * `_index_name` - Currently ignored.
|
|
155
163
|
///
|
|
156
164
|
/// # Example
|
|
157
165
|
///
|
|
158
166
|
/// ```ignore
|
|
159
|
-
///
|
|
160
|
-
/// let
|
|
167
|
+
/// use sqlitegraph::hnsw::storage::SQLiteVectorStorage;
|
|
168
|
+
/// let conn = rusqlite::Connection::open("vectors.db")?;
|
|
169
|
+
/// let storage = SQLiteVectorStorage::new(conn, "my_index")?;
|
|
161
170
|
/// ```
|
|
162
171
|
pub fn create_hnsw_storage(
|
|
163
172
|
&self,
|
|
164
173
|
_index_name: impl Into<String>,
|
|
165
174
|
) -> Option<Box<dyn crate::hnsw::storage::VectorStorage>> {
|
|
166
|
-
// SQLiteVectorStorage requires an owned Connection, but we only have a reference
|
|
167
|
-
// This is a limitation - we can't easily create a storage from &self
|
|
168
|
-
// The caller should use SQLiteVectorStorage::new() directly with a connection
|
|
169
175
|
None
|
|
170
176
|
}
|
|
171
177
|
|