sqlitegraph 0.3.0__tar.gz → 0.4.1__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.3.0 → sqlitegraph-0.4.1}/Cargo.lock +4 -3
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/PKG-INFO +65 -2
- sqlitegraph-0.4.1/README.md +107 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/pyproject.toml +1 -1
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/Cargo.toml +3 -1
- sqlitegraph-0.4.1/sqlitegraph-core/README.md +193 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/benches/adjlist_benchmark.rs +12 -12
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/benches/bench_utils.rs +21 -10
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/benches/comprehensive_performance.rs +2 -2
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/benches/graph_generators.rs +13 -1
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/benches/hnsw.rs +8 -8
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/benches/native_disk_io.rs +2 -2
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/benches/sqlite_v3_comparison.rs +2 -1
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/clippy.toml +3 -1
- sqlitegraph-0.4.1/sqlitegraph-core/examples/hybrid_sqlite_v3_hnsw_pubsub.rs +166 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/algo/call_graph_analysis.rs +14 -14
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/algo/centrality.rs +12 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/algo/community.rs +14 -5
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/algo/critical_path.rs +1 -1
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/algo/cut_partition.rs +8 -9
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/algo/cycle_basis.rs +41 -41
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/algo/dominance_frontiers.rs +5 -7
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/algo/graph_diff.rs +5 -5
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/algo/graph_rewriting.rs +34 -36
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/algo/graph_similarity.rs +2 -2
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/algo/path_enumeration.rs +15 -15
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/algo/program_slicing.rs +1 -1
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/algo/scc.rs +7 -4
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/algo/structure.rs +9 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/algo/subgraph_isomorphism.rs +36 -36
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/algo/taint_analysis.rs +17 -17
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/algo/tests.rs +4 -7
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/algo/transitive_closure.rs +18 -18
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/native/v3/algorithm/parallel_bfs.rs +3 -3
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/native/v3/backend.rs +54 -6
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/native/v3/compression/edge_delta.rs +2 -2
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/native/v3/edge_compat.rs +31 -31
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/native/v3/file_coordinator.rs +3 -3
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/native/v3/index/page.rs +2 -2
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/native/v3/node/page.rs +2 -2
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/native/v3/node/store.rs +14 -15
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/native/v3/node/tests.rs +3 -3
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/native/v3/storage/adaptive_page.rs +3 -3
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/native/v3/storage/media_detector.rs +5 -5
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/native/v3/string_table/mod.rs +1 -1
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/native/v3/string_table/tests.rs +1 -1
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/native/v3/write_batch.rs +8 -5
- sqlitegraph-0.4.1/sqlitegraph-core/src/cypher.rs +2037 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/graph/core.rs +44 -2
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/graph/entity_ops.rs +44 -19
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/graph/snapshot.rs +3 -3
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/hnsw/builder.rs +5 -6
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/hnsw/config.rs +2 -2
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/hnsw/distance_functions.rs +1 -1
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/hnsw/errors.rs +25 -22
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/hnsw/index.rs +8 -7
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/hnsw/index_api.rs +33 -16
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/hnsw/index_internal.rs +2 -3
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/hnsw/layer.rs +1 -1
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/hnsw/mod.rs +1 -1
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/hnsw/multilayer.rs +13 -14
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/hnsw/neighborhood.rs +2 -3
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/hnsw/simd.rs +2 -2
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/hnsw/storage.rs +8 -7
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/inference/engine.rs +29 -21
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/inference/simd.rs +24 -24
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/lib.rs +1 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/pattern_engine_cache/tests.rs +1 -1
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/progress.rs +6 -7
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/schema.rs +13 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/snapshot.rs +4 -4
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/algo_tests.rs +1 -1
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/benchmark_isolation_test.rs +3 -3
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/bulk_insert_tests.rs +2 -2
- sqlitegraph-0.4.1/sqlitegraph-core/tests/cypher_tests.rs +1293 -0
- sqlitegraph-0.4.1/sqlitegraph-core/tests/edge_insertion_corruption_test.rs +207 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/graph_node_existence_enforcement.rs +10 -4
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/hnsw_persistence_tests.rs +4 -4
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/instrumentation_tests.rs +6 -1
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/mvcc_baseline_tests.rs +3 -3
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/mvcc_concurrent_tests.rs +1 -1
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/mvcc_edge_case_tests.rs +2 -2
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/mvcc_snapshot_tests.rs +3 -3
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/node_slot_transaction_persistence.rs +102 -104
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/page_write_debug.rs +1 -1
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/perf_gate_v32_tests.rs +14 -4
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/phase32_cluster_pipeline_reconstruction_tests_clean.rs +4 -3
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/query_cache_performance_tests.rs +1 -1
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/reopen_integration_test.rs +9 -7
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/sqlite_reopen_tests.rs +1 -1
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/v3_algorithm_tests.rs +5 -5
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/v3_btree_forensics.rs +8 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/v3_file_write_test.rs +1 -1
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/v3_name_index_tests.rs +23 -16
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/v3_regression_sweep.rs +7 -7
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/v3_sync_fix_validation.rs +2 -2
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-py/CHANGELOG.md +37 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-py/Cargo.toml +1 -1
- sqlitegraph-0.4.1/sqlitegraph-py/README.md +107 -0
- sqlitegraph-0.4.1/sqlitegraph-py/examples/06_hybrid_sqlite_hnsw_query.py +100 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-py/src/lib.rs +125 -1
- sqlitegraph-0.4.1/sqlitegraph-py/tests/test_algo.py +197 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-py/tests/test_hnsw.py +11 -0
- sqlitegraph-0.3.0/README.md +0 -44
- sqlitegraph-0.3.0/sqlitegraph-core/README.md +0 -123
- sqlitegraph-0.3.0/sqlitegraph-core/tests/edge_insertion_corruption_test.rs +0 -253
- sqlitegraph-0.3.0/sqlitegraph-core/tests/json_parsing_diagnostics.rs +0 -73
- sqlitegraph-0.3.0/sqlitegraph-core/tests/transaction_begin_corruption_proof.rs +0 -220
- sqlitegraph-0.3.0/sqlitegraph-py/README.md +0 -44
- sqlitegraph-0.3.0/sqlitegraph-py/tests/test_algo.py +0 -78
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/Cargo.toml +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/python/sqlitegraph/__init__.py +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/python/sqlitegraph/_native.pyi +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/python/sqlitegraph/py.typed +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/.gitignore +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/BLOCK_AWARE_CACHE_BEHAVIOR_REPORT.md +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/BLOCK_LOCALITY_PROTOTYPE_REPORT.md +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/BUG_10K_INVESTIGATION_SUMMARY.md +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/BUG_SNAPSHOTID_SQLITE_BACKEND.md +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/CACHE_CAPACITY_SWEEP_REPORT.md +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/CACHE_CLONE_FIX_REPORT.md +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/CHANGELOG.md +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/COLD_PATH_FORENSICS_REPORT.md +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/COLD_WARM_BENCHMARK_SPLIT_REPORT.md +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/EDGE_CORRUPTION_ROOT_CAUSE.md +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/LICENSE +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/MAIN_BENCHMARK_RERUN_REPORT.md +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/NODE_PAGE_OVERFLOW_FIX_REPORT.md +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/PAGE_ID_COLLISION_ROOT_CAUSE.md +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/PHASE3_NODE_PAGE_CACHE_FIX_REPORT.md +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/PHYSICAL_BLOCK_PLACEMENT_PROTOTYPE_REPORT.md +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/REBUILD_INDEXES_FIX_REPORT.md +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/REOPEN_CORRUPTION_FORENSICS.md +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/V3_10K_NODE_BUG_FIX.md +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/V3_FILE_IO_COORDINATION.md +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/V3_FORENSIC_REPORT.md +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/V3_REGRESSION_SWEEP_REPORT.md +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/benches/adaptive_page_simple.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/benches/algo_benchmarks.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/benches/backend_comparison.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/benches/bfs.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/benches/cold_cache.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/benches/comparative_benchmark.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/benches/compression_benchmark.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/benches/concurrent_access.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/benches/connection_pool.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/benches/graph_theory_benchmarks.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/benches/hnsw_multilayer.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/benches/insert.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/benches/k_hop.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/benches/memory_profiling.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/benches/mvcc_benchmarks.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/benches/parallel_bfs.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/benches/read_path_benchmarks.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/benches/real_datasets.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/benches/regression_memory.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/benches/regression_non_chain_patterns.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/benches/regression_pubsub_memory.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/benches/regression_pubsub_non_chain.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/benches/regression_pubsub_write_cost.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/benches/regression_write_cost.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/benches/v3_algorithm_benchmarks.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/benches/v3_backend_benchmarks.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/benches/wal_recovery_benchmarks.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/core.d +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/debug_test.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/docs/HNSW_DEVELOPMENT_RULES.md +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/docs/HNSW_VECTOR_INTEGRATION_FUTURE_ROADMAP.md +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/docs/SEQUENTIAL_IO_PERFORMANCE.md +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/docs/WAL_MODE_IMPLEMENTATION_GUIDE.md +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/docs/phase-40-benchmark-report.md +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/docs/phase10_performance_tuning.md +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/docs/phase11_native_perf_plan.md +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/docs/phase12_optimization_plan.md +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/docs/phase14_step9_khop_corruption_codebase_mapping.md +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/docs/phase29_step7_mmap_preaudit_notes.md +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/docs/phase5_real_adjacency.md +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/docs/phase6_implementation_status.md +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/docs/phase6_native_graphbackend_plan.md +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/docs/phase7_native_backend_refactor.md +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/docs/superpowers/plans/2026-04-23-task-1-analysis.md +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/examples/algo_benchmark.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/examples/basic_functionality_test.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/examples/batch_bench.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/examples/batch_stress_test.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/examples/bench_parallel_bfs.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/examples/block_locality_benchmark.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/examples/cache_capacity_benchmark.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/examples/cache_clone_forensics.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/examples/cache_perf_test.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/examples/cold_path_decomposition.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/examples/compression_analysis.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/examples/compression_detailed.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/examples/compression_diagnostics.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/examples/crash_test_child.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/examples/debug_buffer_error.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/examples/get_node_cache_sweep.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/examples/phase53_1_execution.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/examples/phase55_simple_benchmark.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/examples/reopen_corruption_repro.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/examples/test_100k.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/examples/test_adaptive_pages.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/examples/test_allocator_startup.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/examples/test_batch_simple.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/examples/test_binary_search.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/examples/test_btree_100k.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/examples/test_cache_warm.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/examples/test_chunked_bfs.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/examples/test_delta_encoding.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/examples/test_direct_backend_benchmark.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/examples/test_direct_edgestore.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/examples/test_edge_store_direct.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/examples/test_edgestore_perf.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/examples/test_index_restore.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/examples/test_index_staleness.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/examples/test_lazy_decode.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/examples/test_lock_overhead.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/examples/test_native_edge.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/examples/test_neighbors_cache.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/examples/test_neighbors_detailed.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/examples/test_neighbors_profile.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/examples/test_open_detailed_timing.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/examples/test_open_roundtrip.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/examples/test_open_stage_timing.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/examples/test_performance_comparison.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/examples/test_rwlock_overhead.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/examples/test_sqlite_neighbors_perf.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/examples/test_v3_neighbors_perf.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/examples/test_vec_clone.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/examples/v3_forensic_page_analysis.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/examples/v3_forensics_example.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/examples/v3_get_node_profile.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/examples/v3_offset_forensic.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/examples/v3_perf_test.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/examples/v3_readonly_profile.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/examples/v3_reopen_verify.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/libtest_syntax.rlib +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/manual.md +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/snapshot_export/snapshot_1766284406.v2 +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/snapshot_export/snapshot_1766284420.v2 +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/sqlitegraph_bench.json +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/algo/backend/centrality.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/algo/backend/graph_ops.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/algo/backend/mod.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/algo/backend/traversal.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/algo/control_dependence.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/algo/dominators.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/algo/mod.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/algo/natural_loops.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/algo/observability.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/algo/post_dominators.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/algo/reachability.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/algo/topological_sort.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/algo/transitive_reduction.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/algo/wcc.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/api_ergonomics.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/native/constants.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/native/cpu_tuning.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/native/mod.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/native/types/aliases.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/native/types/cpu_profile.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/native/types/errors.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/native/types/flags.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/native/types/kv_types.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/native/types/mod.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/native/types/utils.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/native/v3/algorithm/mod.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/native/v3/allocator.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/native/v3/btree.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/native/v3/compact_edge_record.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/native/v3/compression/delta.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/native/v3/compression/mod.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/native/v3/compression/varint.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/native/v3/constants.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/native/v3/forensics.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/native/v3/header.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/native/v3/index/mod.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/native/v3/index_persistence.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/native/v3/kind_index.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/native/v3/kv_store/mod.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/native/v3/kv_store/store.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/native/v3/kv_store/types.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/native/v3/lazy_init_tests.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/native/v3/mod.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/native/v3/name_index.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/native/v3/node/block_cache.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/native/v3/node/cache.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/native/v3/node/mod.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/native/v3/node/record.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/native/v3/pubsub/mod.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/native/v3/pubsub/publisher.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/native/v3/pubsub/types.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/native/v3/storage/mod.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/native/v3/string_table/table.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/native/v3/tests/mod.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/native/v3/wal.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/sqlite/helpers.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/sqlite/impl_.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/sqlite/kv_tests.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/sqlite/mod.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/sqlite/pubsub_tests.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend/sqlite/types.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/backend_selector.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/bench_gates.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/bench_meta.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/bench_regression.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/bench_utils.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/bfs.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/cache.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/client.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/config/factory.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/config/graph_config.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/config/kinds.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/config/mod.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/config/native.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/config/sqlite.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/dependency_monitor.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/dsl.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/errors.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/fault_injection.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/graph/adjacency.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/graph/edge_ops.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/graph/metrics/instrumented.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/graph/metrics/metrics_core.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/graph/metrics/metrics_snapshot.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/graph/metrics/mod.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/graph/metrics/statement_tracker.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/graph/metrics/utils.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/graph/metrics_schema.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/graph/mod.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/graph/pattern_matching.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/graph/pool.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/graph/types.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/graph_opt.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/hnsw/batch_filter.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/hnsw/distance_metric.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/hnsw/index_persist.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/hnsw/serialization.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/hnsw/v3_storage.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/hnsw/v3_storage_tests.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/index.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/inference/mod.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/inference/sampling.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/introspection.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/multi_hop.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/mvcc.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/pattern.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/pattern_engine/matcher.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/pattern_engine/mod.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/pattern_engine/pattern.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/pattern_engine/property.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/pattern_engine/query.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/pattern_engine/tests.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/pattern_engine_cache/edge_validation.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/pattern_engine_cache/fast_path_detection.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/pattern_engine_cache/fast_path_execution.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/pattern_engine_cache/mod.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/query.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/query_cache.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/reasoning.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/src/recovery.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/acid_regression_test.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/acid_snapshot_test.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/backend_selector_tests.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/bench_data_tests.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/bench_gate_tests.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/bench_gates_tests.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/bench_meta_tests.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/bench_report_tests.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/bfs_tests.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/bincode_compatibility_test.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/cache_effectiveness_tests.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/cache_tests.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/check_write_path.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/cluster_offset_corruption_regression.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/cold_path_forensics.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/debug_file_size.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/debug_index_rebuilding.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/debug_overflow.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/debug_scenario_c.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/deterministic_index_tests.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/direct_file_read_corruption_test.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/doc_tests.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/edge_corruption_minimal.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/edge_corruption_repro.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/edge_tests.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/entity_tests.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/file_extension_debug.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/fuzz_common.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/get_node_forensics.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/graph_opt_tests.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/helpers/mod.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/index_persistence_integration.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/index_persistence_validation.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/index_tests.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/integration_tests.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/isolate_open_bug.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/kv_durability_tests.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/lib_api_smoke_tests.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/multi_hop_tests.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/multi_node_corruption_regression.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/mvcc_wal_tests.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/native_edge_insertion_regression.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/node_overflow_forensics.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/node_read_forensics_test.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/oom_reproduction_test.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/page_42_debug.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/pattern_cache_fastpath_tests.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/pattern_engine_tests.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/pattern_tests.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/perf_gate_tests.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/phase44_2_cluster_size_contract_tests.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/phase64_node_count_durability_regression.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/phase65_cluster_size_corruption_regression.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/phase73_node_count_corruption_capture.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/query_cache_tests.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/query_tests.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/recovery_tests.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/regression_concurrent_traversal.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/reopen_corruption_investigation.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/rowid_tests.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/schema_tests.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/snapshot_isolation_tests.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/sqlite_snapshot_tests.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/test_10k_bug_reproduction.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/unsafe_invariants_tests.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/v3_block_locality_tests.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/v3_check_nodepages.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/v3_dump_page_headers.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/v3_edge_durability_tdd.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/v3_focused_perf.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/v3_forensics_test.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/v3_header_forensics.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/v3_insert_read_forensics.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/v3_integrity_check.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/v3_kind_index_tests.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/v3_page_ownership_forensics.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/v3_persistence_100.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/v3_query_truth_tests.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/v3_reopen_durability.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/v3_verify_file_persistence.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/wal_mode_default_tests.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/wal_tuning_tests.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/tests/write_buffer_coherence_regression.rs +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-py/.gitignore +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-py/examples/01_basic_crud.py +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-py/examples/02_graph_algorithms.py +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-py/examples/03_vector_search.py +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-py/examples/04_social_network.py +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-py/examples/05_file_backed.py +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-py/tests/test_basic.py +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-py/tests/test_bulk_insert.py +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-py/tests/test_crud.py +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-py/tests/test_errors.py +0 -0
- {sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-py/tests/test_filtered_traversal.py +0 -0
|
@@ -1387,7 +1387,7 @@ checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
|
|
|
1387
1387
|
|
|
1388
1388
|
[[package]]
|
|
1389
1389
|
name = "sqlitegraph"
|
|
1390
|
-
version = "
|
|
1390
|
+
version = "3.0.1"
|
|
1391
1391
|
dependencies = [
|
|
1392
1392
|
"ahash",
|
|
1393
1393
|
"arc-swap",
|
|
@@ -1406,6 +1406,7 @@ dependencies = [
|
|
|
1406
1406
|
"r2d2_sqlite",
|
|
1407
1407
|
"rand 0.8.6",
|
|
1408
1408
|
"rayon",
|
|
1409
|
+
"regex",
|
|
1409
1410
|
"rusqlite",
|
|
1410
1411
|
"rustc_version",
|
|
1411
1412
|
"serde",
|
|
@@ -1418,7 +1419,7 @@ dependencies = [
|
|
|
1418
1419
|
|
|
1419
1420
|
[[package]]
|
|
1420
1421
|
name = "sqlitegraph-cli"
|
|
1421
|
-
version = "
|
|
1422
|
+
version = "3.0.1"
|
|
1422
1423
|
dependencies = [
|
|
1423
1424
|
"anyhow",
|
|
1424
1425
|
"clap",
|
|
@@ -1428,7 +1429,7 @@ dependencies = [
|
|
|
1428
1429
|
|
|
1429
1430
|
[[package]]
|
|
1430
1431
|
name = "sqlitegraph-py"
|
|
1431
|
-
version = "0.
|
|
1432
|
+
version = "0.4.1"
|
|
1432
1433
|
dependencies = [
|
|
1433
1434
|
"ndarray 0.16.1",
|
|
1434
1435
|
"numpy",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sqlitegraph
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.4.1
|
|
4
4
|
Classifier: Development Status :: 3 - Alpha
|
|
5
5
|
Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
|
|
6
6
|
Classifier: Programming Language :: Python :: 3
|
|
@@ -54,6 +54,68 @@ g.add_edge(alice, order, "placed")
|
|
|
54
54
|
print(g.neighbors(alice))
|
|
55
55
|
```
|
|
56
56
|
|
|
57
|
+
## Query language
|
|
58
|
+
|
|
59
|
+
`Graph.query()` exposes the same Cypher-inspired language as the CLI:
|
|
60
|
+
|
|
61
|
+
```python
|
|
62
|
+
from sqlitegraph import Graph
|
|
63
|
+
|
|
64
|
+
g = Graph.open_in_memory()
|
|
65
|
+
alice = g.add_node(kind="User", name="Alice", data={"age": 30})
|
|
66
|
+
bob = g.add_node(kind="User", name="Bob", data={"age": 31})
|
|
67
|
+
g.add_edge(alice, bob, "KNOWS")
|
|
68
|
+
|
|
69
|
+
result = g.query("MATCH (a:User)-[:KNOWS]->(b:User) RETURN a.name, b.name")
|
|
70
|
+
print(result["results"])
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Supported query features include node scans, edge traversal, multi-hop chains,
|
|
74
|
+
star/multi-pattern joins, variable-depth edges, `WHERE` with regex/numeric
|
|
75
|
+
operators and parentheses, `LIMIT`, `CREATE`, `SET`, `DELETE`, and HNSW vector
|
|
76
|
+
search through `CALL db.index.vector.queryNodes(...)`.
|
|
77
|
+
|
|
78
|
+
## Algorithms
|
|
79
|
+
|
|
80
|
+
```python
|
|
81
|
+
from sqlitegraph import Graph
|
|
82
|
+
|
|
83
|
+
g = Graph.open_in_memory()
|
|
84
|
+
a = g.add_node(kind="Page", name="A")
|
|
85
|
+
b = g.add_node(kind="Page", name="B")
|
|
86
|
+
c = g.add_node(kind="Page", name="C")
|
|
87
|
+
g.add_edge(a, b, "LINKS")
|
|
88
|
+
g.add_edge(b, c, "LINKS")
|
|
89
|
+
g.add_edge(c, a, "LINKS")
|
|
90
|
+
|
|
91
|
+
print(g.pagerank(iterations=20))
|
|
92
|
+
print(g.connected_components())
|
|
93
|
+
print(g.strongly_connected_components())
|
|
94
|
+
print(g.label_propagation(50))
|
|
95
|
+
print(g.find_cycles(10))
|
|
96
|
+
print(g.dominators(a))
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
`critical_path()` is also available for directed acyclic graphs and returns
|
|
100
|
+
`{"path": [...], "distance": float, "path_length": int}`.
|
|
101
|
+
|
|
102
|
+
## HNSW vector search
|
|
103
|
+
|
|
104
|
+
```python
|
|
105
|
+
from sqlitegraph import Graph
|
|
106
|
+
|
|
107
|
+
g = Graph.open_in_memory()
|
|
108
|
+
idx = g.create_hnsw_index("embeddings", dimension=3, metric="cosine")
|
|
109
|
+
|
|
110
|
+
idx.insert_vector([1.0, 0.8, 0.1], {"label": "graph databases"})
|
|
111
|
+
idx.insert_vector([0.1, 0.2, 1.0], {"label": "baking"})
|
|
112
|
+
|
|
113
|
+
print(idx.search([1.0, 0.9, 0.0], 1))
|
|
114
|
+
print(g.list_hnsw_indexes())
|
|
115
|
+
|
|
116
|
+
g.delete_hnsw_index("embeddings")
|
|
117
|
+
```
|
|
118
|
+
|
|
57
119
|
## Examples
|
|
58
120
|
|
|
59
121
|
The [`examples/`](./examples/) directory contains runnable scripts:
|
|
@@ -61,10 +123,11 @@ The [`examples/`](./examples/) directory contains runnable scripts:
|
|
|
61
123
|
| Example | What it shows |
|
|
62
124
|
|---------|---------------|
|
|
63
125
|
| [`01_basic_crud.py`](./examples/01_basic_crud.py) | Nodes, edges, update, delete, query by kind/pattern, degrees |
|
|
64
|
-
| [`02_graph_algorithms.py`](./examples/02_graph_algorithms.py) | BFS, k-hop, shortest path, PageRank, Louvain communities, connected components |
|
|
126
|
+
| [`02_graph_algorithms.py`](./examples/02_graph_algorithms.py) | BFS, k-hop, shortest path, PageRank, Louvain & label-propagation communities, connected components (WCC), strongly-connected components (SCC), cycle search, dominator tree, critical path |
|
|
65
127
|
| [`03_vector_search.py`](./examples/03_vector_search.py) | HNSW index creation, insert, search, bulk insert, index listing |
|
|
66
128
|
| [`04_social_network.py`](./examples/04_social_network.py) | Realistic network: influencers (PageRank), communities, connection paths, mutual follows |
|
|
67
129
|
| [`05_file_backed.py`](./examples/05_file_backed.py) | Persistent `Graph.open(path)`, checkpoint, reopen, cleanup |
|
|
130
|
+
| [`06_hybrid_sqlite_hnsw_query.py`](./examples/06_hybrid_sqlite_hnsw_query.py) | sqlite3 application rows + sqlitegraph metadata + HNSW + `Graph.query()` expansion |
|
|
68
131
|
|
|
69
132
|
Run any example from the repo root:
|
|
70
133
|
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# sqlitegraph
|
|
2
|
+
|
|
3
|
+
Python bindings to the [`sqlitegraph`](https://crates.io/crates/sqlitegraph)
|
|
4
|
+
embedded graph database. Storage, graph algorithms, and HNSW vector search
|
|
5
|
+
run in a reviewed Rust core; this package is the Pythonic surface.
|
|
6
|
+
|
|
7
|
+
> Alpha — API subject to change before 1.0.
|
|
8
|
+
|
|
9
|
+
## Install
|
|
10
|
+
|
|
11
|
+
pip install sqlitegraph
|
|
12
|
+
|
|
13
|
+
## Quick start
|
|
14
|
+
|
|
15
|
+
```python
|
|
16
|
+
from sqlitegraph import Graph
|
|
17
|
+
|
|
18
|
+
g = Graph.open_in_memory()
|
|
19
|
+
alice = g.add_node(kind="User", name="Alice", data={"age": 30})
|
|
20
|
+
order = g.add_node(kind="Order", name="Order-123")
|
|
21
|
+
g.add_edge(alice, order, "placed")
|
|
22
|
+
|
|
23
|
+
print(g.neighbors(alice))
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Query language
|
|
27
|
+
|
|
28
|
+
`Graph.query()` exposes the same Cypher-inspired language as the CLI:
|
|
29
|
+
|
|
30
|
+
```python
|
|
31
|
+
from sqlitegraph import Graph
|
|
32
|
+
|
|
33
|
+
g = Graph.open_in_memory()
|
|
34
|
+
alice = g.add_node(kind="User", name="Alice", data={"age": 30})
|
|
35
|
+
bob = g.add_node(kind="User", name="Bob", data={"age": 31})
|
|
36
|
+
g.add_edge(alice, bob, "KNOWS")
|
|
37
|
+
|
|
38
|
+
result = g.query("MATCH (a:User)-[:KNOWS]->(b:User) RETURN a.name, b.name")
|
|
39
|
+
print(result["results"])
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Supported query features include node scans, edge traversal, multi-hop chains,
|
|
43
|
+
star/multi-pattern joins, variable-depth edges, `WHERE` with regex/numeric
|
|
44
|
+
operators and parentheses, `LIMIT`, `CREATE`, `SET`, `DELETE`, and HNSW vector
|
|
45
|
+
search through `CALL db.index.vector.queryNodes(...)`.
|
|
46
|
+
|
|
47
|
+
## Algorithms
|
|
48
|
+
|
|
49
|
+
```python
|
|
50
|
+
from sqlitegraph import Graph
|
|
51
|
+
|
|
52
|
+
g = Graph.open_in_memory()
|
|
53
|
+
a = g.add_node(kind="Page", name="A")
|
|
54
|
+
b = g.add_node(kind="Page", name="B")
|
|
55
|
+
c = g.add_node(kind="Page", name="C")
|
|
56
|
+
g.add_edge(a, b, "LINKS")
|
|
57
|
+
g.add_edge(b, c, "LINKS")
|
|
58
|
+
g.add_edge(c, a, "LINKS")
|
|
59
|
+
|
|
60
|
+
print(g.pagerank(iterations=20))
|
|
61
|
+
print(g.connected_components())
|
|
62
|
+
print(g.strongly_connected_components())
|
|
63
|
+
print(g.label_propagation(50))
|
|
64
|
+
print(g.find_cycles(10))
|
|
65
|
+
print(g.dominators(a))
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
`critical_path()` is also available for directed acyclic graphs and returns
|
|
69
|
+
`{"path": [...], "distance": float, "path_length": int}`.
|
|
70
|
+
|
|
71
|
+
## HNSW vector search
|
|
72
|
+
|
|
73
|
+
```python
|
|
74
|
+
from sqlitegraph import Graph
|
|
75
|
+
|
|
76
|
+
g = Graph.open_in_memory()
|
|
77
|
+
idx = g.create_hnsw_index("embeddings", dimension=3, metric="cosine")
|
|
78
|
+
|
|
79
|
+
idx.insert_vector([1.0, 0.8, 0.1], {"label": "graph databases"})
|
|
80
|
+
idx.insert_vector([0.1, 0.2, 1.0], {"label": "baking"})
|
|
81
|
+
|
|
82
|
+
print(idx.search([1.0, 0.9, 0.0], 1))
|
|
83
|
+
print(g.list_hnsw_indexes())
|
|
84
|
+
|
|
85
|
+
g.delete_hnsw_index("embeddings")
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## Examples
|
|
89
|
+
|
|
90
|
+
The [`examples/`](./examples/) directory contains runnable scripts:
|
|
91
|
+
|
|
92
|
+
| Example | What it shows |
|
|
93
|
+
|---------|---------------|
|
|
94
|
+
| [`01_basic_crud.py`](./examples/01_basic_crud.py) | Nodes, edges, update, delete, query by kind/pattern, degrees |
|
|
95
|
+
| [`02_graph_algorithms.py`](./examples/02_graph_algorithms.py) | BFS, k-hop, shortest path, PageRank, Louvain & label-propagation communities, connected components (WCC), strongly-connected components (SCC), cycle search, dominator tree, critical path |
|
|
96
|
+
| [`03_vector_search.py`](./examples/03_vector_search.py) | HNSW index creation, insert, search, bulk insert, index listing |
|
|
97
|
+
| [`04_social_network.py`](./examples/04_social_network.py) | Realistic network: influencers (PageRank), communities, connection paths, mutual follows |
|
|
98
|
+
| [`05_file_backed.py`](./examples/05_file_backed.py) | Persistent `Graph.open(path)`, checkpoint, reopen, cleanup |
|
|
99
|
+
| [`06_hybrid_sqlite_hnsw_query.py`](./examples/06_hybrid_sqlite_hnsw_query.py) | sqlite3 application rows + sqlitegraph metadata + HNSW + `Graph.query()` expansion |
|
|
100
|
+
|
|
101
|
+
Run any example from the repo root:
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
cd sqlitegraph-py
|
|
105
|
+
source .venv/bin/activate
|
|
106
|
+
python examples/01_basic_crud.py
|
|
107
|
+
```
|
|
@@ -4,7 +4,7 @@ build-backend = "maturin"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "sqlitegraph"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.4.1"
|
|
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,7 +1,8 @@
|
|
|
1
1
|
[package]
|
|
2
2
|
name = "sqlitegraph"
|
|
3
|
-
version = "
|
|
3
|
+
version = "3.0.1"
|
|
4
4
|
edition = "2024"
|
|
5
|
+
rust-version = "1.89"
|
|
5
6
|
description = "Embedded graph database with full ACID transactions, HNSW vector search, dual backend support, and comprehensive graph algorithms library"
|
|
6
7
|
license = "GPL-3.0"
|
|
7
8
|
repository = "https://github.com/oldnordic/sqlitegraph"
|
|
@@ -41,6 +42,7 @@ log = "0.4"
|
|
|
41
42
|
rayon = "1.10"
|
|
42
43
|
petgraph = "0.6"
|
|
43
44
|
sha2 = "0.10"
|
|
45
|
+
regex = "1"
|
|
44
46
|
|
|
45
47
|
[dependencies.lru]
|
|
46
48
|
version = "0.12"
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
# SQLiteGraph
|
|
2
|
+
|
|
3
|
+
[](https://crates.io/crates/sqlitegraph)
|
|
4
|
+
[](https://docs.rs/sqlitegraph)
|
|
5
|
+
|
|
6
|
+
Embedded graph database with dual backend architecture, graph algorithms,
|
|
7
|
+
Cypher-inspired queries, and HNSW vector search.
|
|
8
|
+
|
|
9
|
+
**Positioning:** Single-binary embedded database (no server). Persistent storage with
|
|
10
|
+
atomic batch commits. Graph algorithms + HNSW vector search in one engine.
|
|
11
|
+
SQLite: stable, mature, excellent for adjacency queries. V3: high-performance,
|
|
12
|
+
designed for large-scale graphs, faster for bulk traversals. See benchmarks below.
|
|
13
|
+
|
|
14
|
+
## What's New in v3.0.0
|
|
15
|
+
|
|
16
|
+
`v3.0.0` is the first release that ships the full Cypher engine, the
|
|
17
|
+
expanded CLI surface, and the cross-session HNSW persistence fix:
|
|
18
|
+
|
|
19
|
+
- Cypher-inspired `MATCH`, `CREATE`, `SET`, `DELETE`, multi-hop, variable-depth,
|
|
20
|
+
star/multi-pattern joins, `WHERE` with precedence/parentheses, and HNSW
|
|
21
|
+
vector search via `CALL db.index.vector.queryNodes(...)`.
|
|
22
|
+
- CLI coverage for PageRank, betweenness, WCC/SCC, Louvain, label propagation,
|
|
23
|
+
cycle search, dominators, topological sort, critical path, and HNSW
|
|
24
|
+
create/insert/search/list/delete.
|
|
25
|
+
- Python `Graph.query()` plus algorithm bindings for SCC, label propagation,
|
|
26
|
+
cycle search, dominators, critical path, and HNSW index deletion.
|
|
27
|
+
- V3 durability fixes and HNSW autoload persistence fixes.
|
|
28
|
+
|
|
29
|
+
See [CHANGELOG](https://github.com/oldnordic/sqlitegraph/blob/main/CHANGELOG.md) for full history.
|
|
30
|
+
|
|
31
|
+
## Backends
|
|
32
|
+
|
|
33
|
+
| Feature | SQLite | Native V3 |
|
|
34
|
+
|---------|--------|-----------|
|
|
35
|
+
| Status | Stable | Stable |
|
|
36
|
+
| Storage | `.db` file | `.graph` file |
|
|
37
|
+
| Max nodes | Unlimited | Unlimited |
|
|
38
|
+
| Graph algorithms | 35+ | 35+ |
|
|
39
|
+
| HNSW vectors | Yes | Yes |
|
|
40
|
+
| Pub/Sub | Yes | Yes |
|
|
41
|
+
| LRU Cache | No | Yes (v2.1.0) |
|
|
42
|
+
| Parallel BFS | No | Yes (v2.1.1) |
|
|
43
|
+
|
|
44
|
+
## Benchmarks
|
|
45
|
+
|
|
46
|
+
See [Architecture](https://github.com/oldnordic/sqlitegraph/blob/main/docs/ARCHITECTURE.md) for system design details.
|
|
47
|
+
|
|
48
|
+
**Backend Comparison (v2.2.4 - AMD Ryzen 7 7800X3D, tmpfs, Rust 1.95.0):**
|
|
49
|
+
|
|
50
|
+
| Benchmark | SQLite | V3 | Ratio |
|
|
51
|
+
|-----------|--------|----|-------|
|
|
52
|
+
| BFS 1K nodes / 5K edges | 2.5ms | 0.45ms | V3 **5.5x faster** |
|
|
53
|
+
| BFS 10K / 50K | 26ms | 27ms | ~parity |
|
|
54
|
+
| BFS 50K / 250K | 160ms | 586ms | SQLite 3.6x faster |
|
|
55
|
+
| DFS 1K / 5K | 2.4ms | 0.46ms | V3 **5.2x faster** |
|
|
56
|
+
| Point lookup 1K | 15us | 82us | SQLite 5.4x faster |
|
|
57
|
+
| Point lookup 10K | 27us | 503us | SQLite 18x faster |
|
|
58
|
+
| Shortest path 1K | 304us | 393us | SQLite 29% faster |
|
|
59
|
+
|
|
60
|
+
V3 excels at small-scale traversals. SQLite dominates at larger graph sizes and
|
|
61
|
+
point lookups.
|
|
62
|
+
|
|
63
|
+
**Run benchmarks yourself:**
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
git clone https://github.com/oldnordic/sqlitegraph.git
|
|
67
|
+
cd sqlitegraph/sqlitegraph-core
|
|
68
|
+
cargo run --example test_performance_comparison --features native-v3
|
|
69
|
+
cargo bench --features native-v3 -- backend_comparison
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
See [examples/](https://github.com/oldnordic/sqlitegraph/tree/main/sqlitegraph-core/examples) for reproducible performance tests.
|
|
73
|
+
|
|
74
|
+
## Quick Start
|
|
75
|
+
|
|
76
|
+
```toml
|
|
77
|
+
[dependencies]
|
|
78
|
+
# SQLite backend (default)
|
|
79
|
+
sqlitegraph = "2.4"
|
|
80
|
+
|
|
81
|
+
# OR Native V3 backend (faster traversals)
|
|
82
|
+
sqlitegraph = { version = "2.4", features = ["native-v3"] }
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
```rust
|
|
86
|
+
use sqlitegraph::backend::{GraphBackend, NodeSpec};
|
|
87
|
+
use sqlitegraph::backend::sqlite::SqliteGraphBackend;
|
|
88
|
+
|
|
89
|
+
fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|
90
|
+
let backend = SqliteGraphBackend::in_memory()?;
|
|
91
|
+
|
|
92
|
+
let node_id = backend.insert_node(NodeSpec {
|
|
93
|
+
kind: "User".to_string(),
|
|
94
|
+
name: "Alice".to_string(),
|
|
95
|
+
file_path: None,
|
|
96
|
+
data: serde_json::json!({"age": 30}),
|
|
97
|
+
})?;
|
|
98
|
+
|
|
99
|
+
println!("Created node: {}", node_id);
|
|
100
|
+
Ok(())
|
|
101
|
+
}
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## CLI
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
cargo install sqlitegraph-cli
|
|
108
|
+
|
|
109
|
+
# Query
|
|
110
|
+
sqlitegraph --db graph.db query "MATCH (n:User) RETURN n.name"
|
|
111
|
+
|
|
112
|
+
# Algorithms
|
|
113
|
+
sqlitegraph --db graph.db bfs --start 1 --depth 3
|
|
114
|
+
sqlitegraph --db graph.db algo pagerank --iterations 100
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## Copy-Paste CLI Demo
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
rm -f /tmp/sqlitegraph-demo.db
|
|
121
|
+
|
|
122
|
+
sqlitegraph --db /tmp/sqlitegraph-demo.db --write insert --kind User --name Alice --data '{"age":30}'
|
|
123
|
+
sqlitegraph --db /tmp/sqlitegraph-demo.db --write insert --kind User --name Bob --data '{"age":31}'
|
|
124
|
+
sqlitegraph --db /tmp/sqlitegraph-demo.db --write query 'CREATE (1)-[:KNOWS]->(2)'
|
|
125
|
+
|
|
126
|
+
sqlitegraph --db /tmp/sqlitegraph-demo.db query 'MATCH (a:User)-[:KNOWS]->(b:User) RETURN a.name, b.name'
|
|
127
|
+
sqlitegraph --db /tmp/sqlitegraph-demo.db algo scc
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
## Hybrid Runtime Demo
|
|
131
|
+
|
|
132
|
+
This crate includes a runnable demo that combines ordinary SQLite rows, Native
|
|
133
|
+
V3 graph metadata, SQLite-backed HNSW vectors, and V3 pub/sub:
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
cargo run -p sqlitegraph --example hybrid_sqlite_v3_hnsw_pubsub --features native-v3
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
## Safety Invariants
|
|
140
|
+
|
|
141
|
+
- Orphan edges are detected by verifying every edge endpoint references a stored entity before any reasoning or subgraph extraction runs.
|
|
142
|
+
- Duplicate edges (identical `(from,to,type)` tuples) are tallied so traversal/pipeline counts stay deterministic and regressions surface quickly.
|
|
143
|
+
- Invalid label/property references (metadata rows pointing at missing entities) are reported by the safety-check helpers.
|
|
144
|
+
- Integrity sweeps perform a deep table walk (entities/edges/labels/properties), verifying sorted IDs, valid JSON payloads, and metadata references before committing to pipelines or migrations.
|
|
145
|
+
|
|
146
|
+
## DSL Constraints
|
|
147
|
+
|
|
148
|
+
- Supported clauses are limited to deterministic `pattern`, `k-hop`, `filter type=…`, and `score` steps; ordering matters and only one filter clause is allowed.
|
|
149
|
+
- Combination syntax (`CALLS*2`, `CALLS->USES`) must not introduce conflicting filters or unknown tokens—ambiguous or unsupported input causes parser errors surfaced to the CLI/tests.
|
|
150
|
+
|
|
151
|
+
## Performance & Instrumentation
|
|
152
|
+
|
|
153
|
+
Performance thresholds in sqlitegraph_bench.json gate releases. Benchmarks produce HTML reports under `target/criterion`. Use `cargo bench --bench bench_insert` (etc.) to isolate suites. The `bench_driver` binary runs all benches sequentially and surfaces pass/fail summaries.
|
|
154
|
+
|
|
155
|
+
Runtime instrumentation is exposed through the core APIs used by benchmarks and
|
|
156
|
+
integration tests: prepare/execute counts, transaction begins/commits/rollbacks,
|
|
157
|
+
and cache hits/misses can be captured while reproducing workloads.
|
|
158
|
+
|
|
159
|
+
## Schema Compatibility Matrix
|
|
160
|
+
|
|
161
|
+
| Version | Description |
|
|
162
|
+
|---------|-------------|
|
|
163
|
+
| 1 | Base tables (`graph_entities`, `graph_edges`, `graph_labels`, `graph_properties`) plus indexes and `graph_meta`. |
|
|
164
|
+
| 2 | Adds `graph_meta_history` rows so each migration application is recorded; exposed via `run_pending_migrations` / CLI `migrate`. |
|
|
165
|
+
| Future | The CLI refuses to open DBs whose version exceeds the compiled `SCHEMA_VERSION`. |
|
|
166
|
+
|
|
167
|
+
Upgrade workflow:
|
|
168
|
+
1. Inspect the database with `sqlitegraph --db <path> status`.
|
|
169
|
+
2. Review pending migrations through the library migration helpers.
|
|
170
|
+
3. Apply migrations atomically through the library helper; history entries are appended automatically.
|
|
171
|
+
|
|
172
|
+
## Ecosystem
|
|
173
|
+
|
|
174
|
+
Tools built on SQLiteGraph:
|
|
175
|
+
|
|
176
|
+
| Tool | Purpose | Repository | crates.io |
|
|
177
|
+
|------|---------|------------|-----------|
|
|
178
|
+
| **Magellan** | Code graph indexing, symbol navigation | [github.com/oldnordic/magellan](https://github.com/oldnordic/magellan) | [crates.io/crates/magellan](https://crates.io/crates/magellan) |
|
|
179
|
+
| **llmgrep** | Semantic code search | [github.com/oldnordic/llmgrep](https://github.com/oldnordic/llmgrep) | [crates.io/crates/llmgrep](https://crates.io/crates/llmgrep) |
|
|
180
|
+
| **Mirage** | CFG analysis, path enumeration | [github.com/oldnordic/mirage](https://github.com/oldnordic/mirage) | [crates.io/crates/mirage-analyzer](https://crates.io/crates/mirage-analyzer) |
|
|
181
|
+
| **splice** | Precision code editing | [github.com/oldnordic/splice](https://github.com/oldnordic/splice) | [crates.io/crates/splice](https://crates.io/crates/splice) |
|
|
182
|
+
|
|
183
|
+
## Documentation
|
|
184
|
+
|
|
185
|
+
- [Architecture](https://github.com/oldnordic/sqlitegraph/blob/main/docs/ARCHITECTURE.md) - System design
|
|
186
|
+
- [Manual](https://github.com/oldnordic/sqlitegraph/blob/main/MANUAL.md) - API guide
|
|
187
|
+
- [Query Language](https://github.com/oldnordic/sqlitegraph/blob/main/docs/QUERY_LANGUAGE.md) - Cypher-inspired query reference
|
|
188
|
+
- [Changelog](https://github.com/oldnordic/sqlitegraph/blob/main/CHANGELOG.md) - Version history
|
|
189
|
+
- [SnapshotId Migration Guide](https://github.com/oldnordic/sqlitegraph/blob/main/docs/SNAPSHOTID_MIGRATION.md) - v2.1.2 API changes
|
|
190
|
+
|
|
191
|
+
## License
|
|
192
|
+
|
|
193
|
+
GPL-3.0
|
|
@@ -36,15 +36,15 @@ impl SimpleAdjList {
|
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
fn add_edge(&mut self, src: u64, dst: u64) {
|
|
39
|
-
if let Some(outgoing) = self.outgoing.get_mut(&src)
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
39
|
+
if let Some(outgoing) = self.outgoing.get_mut(&src)
|
|
40
|
+
&& !outgoing.contains(&dst)
|
|
41
|
+
{
|
|
42
|
+
outgoing.push(dst);
|
|
43
43
|
}
|
|
44
|
-
if let Some(incoming) = self.incoming.get_mut(&dst)
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
44
|
+
if let Some(incoming) = self.incoming.get_mut(&dst)
|
|
45
|
+
&& !incoming.contains(&src)
|
|
46
|
+
{
|
|
47
|
+
incoming.push(src);
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
50
|
|
|
@@ -68,10 +68,10 @@ impl SimpleAdjList {
|
|
|
68
68
|
visited.insert(start);
|
|
69
69
|
|
|
70
70
|
while let Some((node, depth)) = queue.pop_front() {
|
|
71
|
-
if let Some(max_depth) = max_depth
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
71
|
+
if let Some(max_depth) = max_depth
|
|
72
|
+
&& depth > max_depth
|
|
73
|
+
{
|
|
74
|
+
continue;
|
|
75
75
|
}
|
|
76
76
|
|
|
77
77
|
result.push(node);
|
|
@@ -2,6 +2,14 @@
|
|
|
2
2
|
//!
|
|
3
3
|
//! Provides utilities for creating deterministic test graphs and running
|
|
4
4
|
//! fair performance comparisons between SQLite and Native backends.
|
|
5
|
+
//!
|
|
6
|
+
//! This module is consumed by many benchmark binaries; clippy reports dead
|
|
7
|
+
//! code per-target, but every helper here is used by at least one bench.
|
|
8
|
+
|
|
9
|
+
#![allow(
|
|
10
|
+
dead_code,
|
|
11
|
+
reason = "shared bench utilities used across multiple bench targets"
|
|
12
|
+
)]
|
|
5
13
|
|
|
6
14
|
use std::time::Duration;
|
|
7
15
|
use tempfile::TempDir;
|
|
@@ -84,14 +92,14 @@ pub fn create_benchmark_graph(backend: BackendKind, spec: &BenchmarkGraph) -> Be
|
|
|
84
92
|
}
|
|
85
93
|
|
|
86
94
|
// Generate edges based on topology using individual insertions
|
|
87
|
-
let edge_count = generate_edges(
|
|
95
|
+
let edge_count = generate_edges(&*graph, &node_ids, spec);
|
|
88
96
|
|
|
89
97
|
let creation_time = start_time.elapsed();
|
|
90
98
|
|
|
91
99
|
BenchmarkResult {
|
|
92
100
|
backend,
|
|
93
101
|
node_count: node_ids.len(),
|
|
94
|
-
edge_count
|
|
102
|
+
edge_count,
|
|
95
103
|
creation_time,
|
|
96
104
|
temp_dir,
|
|
97
105
|
db_path,
|
|
@@ -110,7 +118,7 @@ pub struct BenchmarkResult {
|
|
|
110
118
|
|
|
111
119
|
/// Generate edges based on the specified topology
|
|
112
120
|
fn generate_edges(
|
|
113
|
-
graph: &
|
|
121
|
+
graph: &dyn sqlitegraph::GraphBackend,
|
|
114
122
|
node_ids: &[i64],
|
|
115
123
|
spec: &BenchmarkGraph,
|
|
116
124
|
) -> usize {
|
|
@@ -138,11 +146,12 @@ fn generate_edges(
|
|
|
138
146
|
return 0;
|
|
139
147
|
}
|
|
140
148
|
let center = node_ids[0];
|
|
141
|
-
|
|
149
|
+
let take = (spec.edge_count + 1).min(node_ids.len()).saturating_sub(1);
|
|
150
|
+
for (i, &to) in node_ids.iter().enumerate().skip(1).take(take) {
|
|
142
151
|
graph
|
|
143
152
|
.insert_edge(EdgeSpec {
|
|
144
153
|
from: center,
|
|
145
|
-
to
|
|
154
|
+
to,
|
|
146
155
|
edge_type: "star".to_string(),
|
|
147
156
|
data: serde_json::json!({"spoke": i}),
|
|
148
157
|
})
|
|
@@ -237,9 +246,10 @@ impl BenchInMemoryGraph {
|
|
|
237
246
|
|
|
238
247
|
match spec.topology {
|
|
239
248
|
GraphTopology::Chain => {
|
|
240
|
-
|
|
249
|
+
let limit = spec.node_count.min(spec.edge_count);
|
|
250
|
+
for (i, adj) in adjacency.iter_mut().enumerate().take(limit) {
|
|
241
251
|
if i + 1 < spec.node_count {
|
|
242
|
-
|
|
252
|
+
adj.push(i as u32 + 1);
|
|
243
253
|
}
|
|
244
254
|
}
|
|
245
255
|
}
|
|
@@ -263,18 +273,19 @@ impl BenchInMemoryGraph {
|
|
|
263
273
|
}
|
|
264
274
|
GraphTopology::Grid => {
|
|
265
275
|
let grid_size = (spec.node_count as f64).sqrt() as usize;
|
|
266
|
-
|
|
276
|
+
let limit = spec.node_count.min(spec.edge_count);
|
|
277
|
+
for (i, adj) in adjacency.iter_mut().enumerate().take(limit) {
|
|
267
278
|
let row = i / grid_size;
|
|
268
279
|
let col = i % grid_size;
|
|
269
280
|
|
|
270
281
|
// Right neighbor
|
|
271
282
|
if col + 1 < grid_size && i + 1 < spec.node_count {
|
|
272
|
-
|
|
283
|
+
adj.push((i + 1) as u32);
|
|
273
284
|
}
|
|
274
285
|
|
|
275
286
|
// Bottom neighbor
|
|
276
287
|
if row + 1 < grid_size && i + grid_size < spec.node_count {
|
|
277
|
-
|
|
288
|
+
adj.push((i + grid_size) as u32);
|
|
278
289
|
}
|
|
279
290
|
}
|
|
280
291
|
}
|
{sqlitegraph-0.3.0 → sqlitegraph-0.4.1}/sqlitegraph-core/benches/comprehensive_performance.rs
RENAMED
|
@@ -97,7 +97,7 @@ fn bench_insert_throughput(criterion: &mut Criterion) {
|
|
|
97
97
|
&batch_size,
|
|
98
98
|
|b, &size| {
|
|
99
99
|
b.iter_batched(
|
|
100
|
-
|
|
100
|
+
create_benchmark_temp_dir,
|
|
101
101
|
|temp_dir| {
|
|
102
102
|
let db_path = temp_dir.path().join("insert.db");
|
|
103
103
|
let graph = open_graph(&db_path, &GraphConfig::native()).unwrap();
|
|
@@ -209,7 +209,7 @@ fn bench_memory_efficiency(criterion: &mut Criterion) {
|
|
|
209
209
|
&node_count,
|
|
210
210
|
|b, &count| {
|
|
211
211
|
b.iter_batched(
|
|
212
|
-
|
|
212
|
+
create_benchmark_temp_dir,
|
|
213
213
|
|temp_dir| {
|
|
214
214
|
let db_path = temp_dir.path().join("memory.db");
|
|
215
215
|
let graph = open_graph(&db_path, &GraphConfig::native()).unwrap();
|
|
@@ -2,6 +2,14 @@
|
|
|
2
2
|
//!
|
|
3
3
|
//! Provides various graph structures to test algorithm performance
|
|
4
4
|
//! under different topological conditions.
|
|
5
|
+
//!
|
|
6
|
+
//! Each bench binary uses a subset of these helpers; clippy flags the rest
|
|
7
|
+
//! as dead per-target. Allow it here so the shared utilities stay green.
|
|
8
|
+
|
|
9
|
+
#![allow(
|
|
10
|
+
dead_code,
|
|
11
|
+
reason = "shared bench utilities used across multiple bench targets"
|
|
12
|
+
)]
|
|
5
13
|
|
|
6
14
|
use rand::Rng;
|
|
7
15
|
use sqlitegraph::backend::{EdgeSpec, NodeSpec};
|
|
@@ -307,7 +315,7 @@ fn generate_power_law(nodes: usize, target_edges: usize, alpha: f64) -> GraphDat
|
|
|
307
315
|
|
|
308
316
|
/// Generate grid/lattice structure
|
|
309
317
|
fn generate_grid(nodes: usize, width: usize) -> GraphData {
|
|
310
|
-
let height = (
|
|
318
|
+
let height = nodes.div_ceil(width);
|
|
311
319
|
|
|
312
320
|
let node_specs = (0..nodes)
|
|
313
321
|
.map(|i| NodeSpec {
|
|
@@ -392,6 +400,10 @@ fn generate_complete(nodes: usize) -> GraphData {
|
|
|
392
400
|
|
|
393
401
|
#[cfg(test)]
|
|
394
402
|
mod tests {
|
|
403
|
+
#[allow(
|
|
404
|
+
unused_imports,
|
|
405
|
+
reason = "items resolved through allow(dead_code) attribute"
|
|
406
|
+
)]
|
|
395
407
|
use super::*;
|
|
396
408
|
|
|
397
409
|
#[test]
|