lora-python 0.11.4__tar.gz → 0.12.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {lora_python-0.11.4 → lora_python-0.12.0}/Cargo.lock +24 -17
- {lora_python-0.11.4 → lora_python-0.12.0}/Cargo.toml +13 -12
- {lora_python-0.11.4 → lora_python-0.12.0}/PKG-INFO +1 -1
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-analyzer/Cargo.toml +1 -0
- lora_python-0.12.0/crates/lora-analyzer/src/analyzer/builtin_signatures.rs +7 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-analyzer/src/analyzer/clauses.rs +47 -2
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-analyzer/src/analyzer/state.rs +1 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-analyzer/src/lib.rs +2 -2
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-analyzer/src/resolved.rs +13 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-ast/src/ast.rs +13 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-ast/src/lib.rs +8 -8
- lora_python-0.12.0/crates/lora-builtins-meta/Cargo.toml +14 -0
- lora_python-0.11.4/crates/lora-analyzer/src/analyzer/builtin_signatures.rs → lora_python-0.12.0/crates/lora-builtins-meta/src/lib.rs +19 -6
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-compiler/src/lib.rs +4 -4
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-compiler/src/logical.rs +16 -2
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-compiler/src/optimizer.rs +7 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-compiler/src/physical.rs +12 -2
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-compiler/src/plan_tree.rs +6 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-compiler/src/planner.rs +17 -2
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/benches/fixtures.rs +75 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/benches/query_implementations.rs +61 -1
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/src/database/procedures.rs +102 -104
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/src/database/pull_mode.rs +2 -1
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/src/database/schema.rs +115 -2
- lora_python-0.12.0/crates/lora-database/tests/foreach.rs +209 -0
- lora_python-0.12.0/crates/lora-database/tests/vector_index.rs +1222 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/errors.rs +3 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/eval/builtins/geo.rs +29 -2
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/eval/builtins/temporal.rs +27 -10
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/executor/immutable.rs +2 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/executor/mutable.rs +142 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/pull/columns.rs +1 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/pull/shape.rs +1 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-parser/src/cypher.pest +14 -2
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-parser/src/parser/clauses.rs +27 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-parser/src/parser/query.rs +3 -2
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-snapshot/Cargo.toml +1 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-snapshot/src/columnar.rs +36 -3
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-snapshot/src/format.rs +6 -1
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-snapshot/src/tests.rs +2 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-store/src/lib.rs +1 -1
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-store/src/memory/entity_index_store.rs +3 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-store/src/memory/graph.rs +146 -22
- lora_python-0.12.0/crates/lora-store/src/memory/hnsw.rs +783 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-store/src/memory/impls.rs +33 -2
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-store/src/memory/index_catalog.rs +10 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-store/src/memory/mod.rs +3 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-store/src/memory/point_index.rs +16 -1
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-store/src/memory/secondary_index_maintenance.rs +45 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-store/src/memory/snapshot.rs +28 -0
- lora_python-0.12.0/crates/lora-store/src/memory/vector_index.rs +489 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-store/src/snapshot.rs +8 -1
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-store/src/traits.rs +27 -2
- {lora_python-0.11.4 → lora_python-0.12.0}/pyproject.toml +1 -1
- lora_python-0.11.4/crates/lora-database/tests/vector_index.rs +0 -350
- {lora_python-0.11.4 → lora_python-0.12.0}/LICENSE +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/README.md +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/bindings/lora-python/.gitignore +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/bindings/lora-python/Cargo.toml +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/bindings/lora-python/LICENSE +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/bindings/lora-python/README.md +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/bindings/lora-python/build.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/bindings/lora-python/examples/async_demo.py +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/bindings/lora-python/examples/basic.py +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/bindings/lora-python/src/errors.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/bindings/lora-python/src/from_python.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/bindings/lora-python/src/lib.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/bindings/lora-python/src/to_python.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/bindings/lora-python/tests/test_async.py +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/bindings/lora-python/tests/test_explain_profile.py +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/bindings/lora-python/tests/test_sync.py +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-analyzer/src/analyzer/expressions.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-analyzer/src/analyzer/mod.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-analyzer/src/analyzer/patterns.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-analyzer/src/analyzer/tests.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-analyzer/src/errors.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-analyzer/src/scope.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-analyzer/src/symbols.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-analyzer/tests/error_messages.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-ast/Cargo.toml +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-compiler/Cargo.toml +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-compiler/src/pattern.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/Cargo.toml +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/benches/README.md +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/benches/advanced.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/benches/concurrency_guard.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/benches/concurrent.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/benches/engine.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/benches/index_acceleration.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/benches/perf_smoke.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/benches/perf_smoke_baseline.json +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/benches/realistic.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/benches/scale.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/benches/temporal_spatial.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/benches/wal.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/src/database/builder.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/src/database/compile.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/src/database/execute.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/src/database/explain.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/src/database/graph_api.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/src/database/mod.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/src/database/occ.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/src/database/profile.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/src/database/replay.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/src/database/row_projection.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/src/database/show_pipeline.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/src/database/stream.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/src/database/write_guard.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/src/durable_io.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/src/error.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/src/explain.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/src/lib.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/src/live_store.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/src/named.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/src/plan_cache.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/src/snapshot/json.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/src/snapshot/mod.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/src/snapshot/store.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/src/stream.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/src/transaction.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/src/wal/admin.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/src/wal/archive/format.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/src/wal/archive/lock.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/src/wal/archive/platform.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/src/wal/archive/worker.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/src/wal/archive/workspace.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/src/wal/archive.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/src/wal/mod.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/src/wal/write_scope.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/tests/advanced_queries.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/tests/aggregation.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/tests/backend_stub.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/tests/binary.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/tests/builtin_namespaces.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/tests/constraints.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/tests/create.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/tests/docs_examples.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/tests/error_messages.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/tests/errors.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/tests/explain_profile.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/tests/expressions.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/tests/fulltext_index.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/tests/functions_extended.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/tests/index_acceleration.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/tests/invariants.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/tests/managed_snapshots.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/tests/match.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/tests/merge.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/tests/ordering.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/tests/parameters.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/tests/parser.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/tests/paths.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/tests/projection.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/tests/scale.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/tests/schema.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/tests/seeds.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/tests/snapshot.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/tests/spatial.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/tests/temporal.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/tests/test_helpers.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/tests/transactions.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/tests/types_advanced.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/tests/union.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/tests/unwind_ingestion.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/tests/update.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/tests/vectors.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/tests/wal.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/tests/where_clause.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-database/tests/with.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/Cargo.toml +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/eval/binops.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/eval/builtins/bits_ns.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/eval/builtins/bytes_ns.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/eval/builtins/cast_ns.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/eval/builtins/crypto.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/eval/builtins/edge.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/eval/builtins/json_ns.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/eval/builtins/list.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/eval/builtins/map_ns.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/eval/builtins/math_ns.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/eval/builtins/mod.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/eval/builtins/node.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/eval/builtins/number.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/eval/builtins/path.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/eval/builtins/string_ns.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/eval/builtins/text.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/eval/builtins/type_ns.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/eval/builtins/uuid_ns.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/eval/builtins/value.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/eval/builtins/vector_ns.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/eval/errors.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/eval/expr.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/eval/functions.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/eval/mod.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/eval/point.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/eval/regex.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/eval/vector.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/executor/aggregation.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/executor/helpers.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/executor/mod.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/executor/optional.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/executor/sort.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/lib.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/profile.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/pull/aggregate.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/pull/call_subquery.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/pull/context.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/pull/expand.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/pull/filter.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/pull/hydration.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/pull/mod.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/pull/mutable.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/pull/optional.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/pull/path.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/pull/projection.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/pull/scan.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/pull/sort.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/pull/source.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/pull/tests.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/pull/traits.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/pull/union.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/src/value.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-executor/tests/error_messages.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-parser/Cargo.toml +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-parser/src/errors.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-parser/src/lib.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-parser/src/parser/expressions.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-parser/src/parser/literals.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-parser/src/parser/mod.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-parser/src/parser/patterns.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-parser/src/parser/schema.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-parser/src/parser/tests.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-parser/src/parser/util.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-parser/tests/error_messages.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-snapshot/src/body.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-snapshot/src/codec.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-snapshot/src/envelope.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-snapshot/src/errors.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-snapshot/src/lib.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-snapshot/src/options.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-snapshot/src/transform.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-snapshot/src/view.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-snapshot/tests/error_messages.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-store/Cargo.toml +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-store/src/codec.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-store/src/lock_table.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-store/src/memory/constraint_catalog.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-store/src/memory/constraint_enforce.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-store/src/memory/fulltext_index.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-store/src/memory/property_index.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-store/src/memory/sorted_property_index.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-store/src/memory/stats.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-store/src/memory/tests.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-store/src/memory/text_index.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-store/src/mutation.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-store/src/types/binary/mod.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-store/src/types/binary/tests.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-store/src/types/binary/traits.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-store/src/types/binary/types.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-store/src/types/graph.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-store/src/types/mod.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-store/src/types/property_value.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-store/src/types/spatial/distance.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-store/src/types/spatial/mod.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-store/src/types/spatial/point.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-store/src/types/spatial/srid.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-store/src/types/spatial/tests.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-store/src/types/temporal/calendar.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-store/src/types/temporal/date.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-store/src/types/temporal/datetime.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-store/src/types/temporal/duration.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-store/src/types/temporal/format.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-store/src/types/temporal/mod.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-store/src/types/temporal/parsing.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-store/src/types/temporal/time.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-store/src/types/vector/build.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-store/src/types/vector/mod.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-store/src/types/vector/similarity.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-store/src/types/vector/tests.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-store/src/types/vector/types.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-store/tests/error_messages.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-wal/Cargo.toml +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-wal/src/codec/decode.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-wal/src/codec/encode.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-wal/src/codec/format.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-wal/src/codec/mod.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-wal/src/codec/tests.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-wal/src/config.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-wal/src/dir.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-wal/src/errors.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-wal/src/io.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-wal/src/lib.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-wal/src/lock.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-wal/src/lsn.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-wal/src/record.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-wal/src/recorder/errors.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-wal/src/recorder/mirror.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-wal/src/recorder/mod.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-wal/src/recorder/recorder.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-wal/src/recorder/tests.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-wal/src/replay.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-wal/src/segment.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-wal/src/testing.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-wal/src/wal/group_flusher.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-wal/src/wal/mod.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-wal/src/wal/tests.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-wal/src/wal/wal.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/crates/lora-wal/tests/error_messages.rs +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/python/lora_python/__init__.py +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/python/lora_python/_async.py +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/python/lora_python/_native.pyi +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/python/lora_python/py.typed +0 -0
- {lora_python-0.11.4 → lora_python-0.12.0}/python/lora_python/types.py +0 -0
|
@@ -773,9 +773,10 @@ checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897"
|
|
|
773
773
|
|
|
774
774
|
[[package]]
|
|
775
775
|
name = "lora-analyzer"
|
|
776
|
-
version = "0.
|
|
776
|
+
version = "0.12.0"
|
|
777
777
|
dependencies = [
|
|
778
778
|
"lora-ast",
|
|
779
|
+
"lora-builtins-meta",
|
|
779
780
|
"lora-parser",
|
|
780
781
|
"lora-store",
|
|
781
782
|
"thiserror",
|
|
@@ -783,22 +784,26 @@ dependencies = [
|
|
|
783
784
|
|
|
784
785
|
[[package]]
|
|
785
786
|
name = "lora-ast"
|
|
786
|
-
version = "0.
|
|
787
|
+
version = "0.12.0"
|
|
787
788
|
dependencies = [
|
|
788
789
|
"smallvec 2.0.0-alpha.12",
|
|
789
790
|
]
|
|
790
791
|
|
|
791
792
|
[[package]]
|
|
792
793
|
name = "lora-binding-buffer"
|
|
793
|
-
version = "0.
|
|
794
|
+
version = "0.12.0"
|
|
794
795
|
dependencies = [
|
|
795
796
|
"lora-database",
|
|
796
797
|
"lora-store",
|
|
797
798
|
]
|
|
798
799
|
|
|
800
|
+
[[package]]
|
|
801
|
+
name = "lora-builtins-meta"
|
|
802
|
+
version = "0.12.0"
|
|
803
|
+
|
|
799
804
|
[[package]]
|
|
800
805
|
name = "lora-compiler"
|
|
801
|
-
version = "0.
|
|
806
|
+
version = "0.12.0"
|
|
802
807
|
dependencies = [
|
|
803
808
|
"lora-analyzer",
|
|
804
809
|
"lora-ast",
|
|
@@ -807,7 +812,7 @@ dependencies = [
|
|
|
807
812
|
|
|
808
813
|
[[package]]
|
|
809
814
|
name = "lora-database"
|
|
810
|
-
version = "0.
|
|
815
|
+
version = "0.12.0"
|
|
811
816
|
dependencies = [
|
|
812
817
|
"anyhow",
|
|
813
818
|
"chacha20poly1305",
|
|
@@ -831,7 +836,7 @@ dependencies = [
|
|
|
831
836
|
|
|
832
837
|
[[package]]
|
|
833
838
|
name = "lora-executor"
|
|
834
|
-
version = "0.
|
|
839
|
+
version = "0.12.0"
|
|
835
840
|
dependencies = [
|
|
836
841
|
"blake3",
|
|
837
842
|
"crc32fast",
|
|
@@ -854,7 +859,7 @@ dependencies = [
|
|
|
854
859
|
|
|
855
860
|
[[package]]
|
|
856
861
|
name = "lora-ffi"
|
|
857
|
-
version = "0.
|
|
862
|
+
version = "0.12.0"
|
|
858
863
|
dependencies = [
|
|
859
864
|
"anyhow",
|
|
860
865
|
"lora-binding-buffer",
|
|
@@ -866,7 +871,7 @@ dependencies = [
|
|
|
866
871
|
|
|
867
872
|
[[package]]
|
|
868
873
|
name = "lora-node"
|
|
869
|
-
version = "0.
|
|
874
|
+
version = "0.12.0"
|
|
870
875
|
dependencies = [
|
|
871
876
|
"anyhow",
|
|
872
877
|
"lora-binding-buffer",
|
|
@@ -881,7 +886,7 @@ dependencies = [
|
|
|
881
886
|
|
|
882
887
|
[[package]]
|
|
883
888
|
name = "lora-parser"
|
|
884
|
-
version = "0.
|
|
889
|
+
version = "0.12.0"
|
|
885
890
|
dependencies = [
|
|
886
891
|
"lora-ast",
|
|
887
892
|
"pest",
|
|
@@ -892,7 +897,7 @@ dependencies = [
|
|
|
892
897
|
|
|
893
898
|
[[package]]
|
|
894
899
|
name = "lora-python"
|
|
895
|
-
version = "0.
|
|
900
|
+
version = "0.12.0"
|
|
896
901
|
dependencies = [
|
|
897
902
|
"anyhow",
|
|
898
903
|
"lora-database",
|
|
@@ -904,11 +909,12 @@ dependencies = [
|
|
|
904
909
|
|
|
905
910
|
[[package]]
|
|
906
911
|
name = "lora-query-wasm"
|
|
907
|
-
version = "0.
|
|
912
|
+
version = "0.12.0"
|
|
908
913
|
dependencies = [
|
|
909
914
|
"console_error_panic_hook",
|
|
910
915
|
"js-sys",
|
|
911
916
|
"lora-ast",
|
|
917
|
+
"lora-builtins-meta",
|
|
912
918
|
"lora-parser",
|
|
913
919
|
"serde",
|
|
914
920
|
"serde-wasm-bindgen",
|
|
@@ -917,7 +923,7 @@ dependencies = [
|
|
|
917
923
|
|
|
918
924
|
[[package]]
|
|
919
925
|
name = "lora-server"
|
|
920
|
-
version = "0.
|
|
926
|
+
version = "0.12.0"
|
|
921
927
|
dependencies = [
|
|
922
928
|
"anyhow",
|
|
923
929
|
"axum",
|
|
@@ -931,7 +937,7 @@ dependencies = [
|
|
|
931
937
|
|
|
932
938
|
[[package]]
|
|
933
939
|
name = "lora-snapshot"
|
|
934
|
-
version = "0.
|
|
940
|
+
version = "0.12.0"
|
|
935
941
|
dependencies = [
|
|
936
942
|
"argon2",
|
|
937
943
|
"blake3",
|
|
@@ -940,12 +946,13 @@ dependencies = [
|
|
|
940
946
|
"getrandom",
|
|
941
947
|
"lora-store",
|
|
942
948
|
"serde",
|
|
949
|
+
"serde_json",
|
|
943
950
|
"thiserror",
|
|
944
951
|
]
|
|
945
952
|
|
|
946
953
|
[[package]]
|
|
947
954
|
name = "lora-store"
|
|
948
|
-
version = "0.
|
|
955
|
+
version = "0.12.0"
|
|
949
956
|
dependencies = [
|
|
950
957
|
"crc32fast",
|
|
951
958
|
"js-sys",
|
|
@@ -956,7 +963,7 @@ dependencies = [
|
|
|
956
963
|
|
|
957
964
|
[[package]]
|
|
958
965
|
name = "lora-wal"
|
|
959
|
-
version = "0.
|
|
966
|
+
version = "0.12.0"
|
|
960
967
|
dependencies = [
|
|
961
968
|
"crc32fast",
|
|
962
969
|
"lora-store",
|
|
@@ -966,7 +973,7 @@ dependencies = [
|
|
|
966
973
|
|
|
967
974
|
[[package]]
|
|
968
975
|
name = "lora-wasm"
|
|
969
|
-
version = "0.
|
|
976
|
+
version = "0.12.0"
|
|
970
977
|
dependencies = [
|
|
971
978
|
"anyhow",
|
|
972
979
|
"console_error_panic_hook",
|
|
@@ -982,7 +989,7 @@ dependencies = [
|
|
|
982
989
|
|
|
983
990
|
[[package]]
|
|
984
991
|
name = "lora_ruby"
|
|
985
|
-
version = "0.
|
|
992
|
+
version = "0.12.0"
|
|
986
993
|
dependencies = [
|
|
987
994
|
"anyhow",
|
|
988
995
|
"lora-database",
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
[workspace]
|
|
2
|
-
members = ["crates/lora-ast", "crates/lora-parser", "crates/lora-analyzer", "crates/lora-compiler", "crates/lora-store", "crates/lora-snapshot", "crates/lora-wal", "crates/lora-executor", "crates/lora-database", "crates/bindings/lora-python"]
|
|
2
|
+
members = ["crates/lora-ast", "crates/lora-parser", "crates/lora-builtins-meta", "crates/lora-analyzer", "crates/lora-compiler", "crates/lora-store", "crates/lora-snapshot", "crates/lora-wal", "crates/lora-executor", "crates/lora-database", "crates/bindings/lora-python"]
|
|
3
3
|
resolver = "2"
|
|
4
4
|
|
|
5
5
|
[workspace.package]
|
|
6
6
|
edition = "2021"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.12.0"
|
|
8
8
|
license = "BUSL-1.1"
|
|
9
9
|
authors = ["LoraDB, Inc."]
|
|
10
10
|
repository = "https://github.com/lora-db/lora"
|
|
@@ -15,16 +15,17 @@ rust-version = "1.87"
|
|
|
15
15
|
# Internal crates — versions are kept in lockstep with [workspace.package].version
|
|
16
16
|
# by `scripts/sync-versions.mjs`. Both `path` and `version` are set so that
|
|
17
17
|
# `cargo publish` works (crates.io cannot resolve path-only deps).
|
|
18
|
-
lora-ast = { path = "crates/lora-ast", version = "=0.
|
|
19
|
-
lora-parser = { path = "crates/lora-parser", version = "=0.
|
|
20
|
-
lora-
|
|
21
|
-
lora-
|
|
22
|
-
lora-
|
|
23
|
-
lora-
|
|
24
|
-
lora-
|
|
25
|
-
lora-
|
|
26
|
-
lora-
|
|
27
|
-
lora-
|
|
18
|
+
lora-ast = { path = "crates/lora-ast", version = "=0.12.0" }
|
|
19
|
+
lora-parser = { path = "crates/lora-parser", version = "=0.12.0" }
|
|
20
|
+
lora-builtins-meta = { path = "crates/lora-builtins-meta", version = "=0.12.0" }
|
|
21
|
+
lora-analyzer = { path = "crates/lora-analyzer", version = "=0.12.0" }
|
|
22
|
+
lora-compiler = { path = "crates/lora-compiler", version = "=0.12.0" }
|
|
23
|
+
lora-store = { path = "crates/lora-store", version = "=0.12.0" }
|
|
24
|
+
lora-snapshot = { path = "crates/lora-snapshot", version = "=0.12.0", default-features = false }
|
|
25
|
+
lora-wal = { path = "crates/lora-wal", version = "=0.12.0" }
|
|
26
|
+
lora-executor = { path = "crates/lora-executor", version = "=0.12.0", default-features = false }
|
|
27
|
+
lora-database = { path = "crates/lora-database", version = "=0.12.0" }
|
|
28
|
+
lora-binding-buffer = { path = "crates/bindings/lora-binding-buffer", version = "=0.12.0" }
|
|
28
29
|
|
|
29
30
|
# External crates.
|
|
30
31
|
anyhow = "1"
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
//! Re-export of the builtin metadata table.
|
|
2
|
+
//!
|
|
3
|
+
//! The actual specs and aliases live in the `lora-builtins-meta` crate
|
|
4
|
+
//! so the editor's WASM bridge can pull from the same source of truth
|
|
5
|
+
//! without dragging in `lora-store` (an analyzer transitive dep). This
|
|
6
|
+
//! shim keeps the existing in-tree call sites working unchanged.
|
|
7
|
+
pub use lora_builtins_meta::*;
|
|
@@ -2,8 +2,8 @@ use super::expressions::expr_contains_aggregate;
|
|
|
2
2
|
use super::state::{Analyzer, PatternContext};
|
|
3
3
|
use crate::{errors::*, resolved::*, symbols::*};
|
|
4
4
|
use lora_ast::{
|
|
5
|
-
Create, Delete, Expr, InQueryCall, Match, Merge, ProjectionBody, ProjectionItem,
|
|
6
|
-
RemoveItem, Return, Set, SetItem, Unwind, With,
|
|
5
|
+
Create, Delete, Expr, Foreach, InQueryCall, Match, Merge, ProjectionBody, ProjectionItem,
|
|
6
|
+
Remove, RemoveItem, Return, Set, SetItem, Unwind, UpdatingClause, With,
|
|
7
7
|
};
|
|
8
8
|
use lora_store::GraphCatalog;
|
|
9
9
|
use std::collections::{BTreeMap, BTreeSet};
|
|
@@ -151,6 +151,51 @@ impl<'a, S: GraphCatalog + ?Sized> Analyzer<'a, S> {
|
|
|
151
151
|
Ok(ResolvedSet { items })
|
|
152
152
|
}
|
|
153
153
|
|
|
154
|
+
pub(super) fn analyze_foreach(
|
|
155
|
+
&mut self,
|
|
156
|
+
f: &Foreach,
|
|
157
|
+
) -> Result<ResolvedForeach, SemanticError> {
|
|
158
|
+
// The list expression is evaluated in the outer scope.
|
|
159
|
+
let list = self.analyze_expr(&f.list)?;
|
|
160
|
+
|
|
161
|
+
// Push the loop variable into a fresh scope so the body sees it
|
|
162
|
+
// and shadowing rules track properly. Snapshot the outer scope
|
|
163
|
+
// so we can restore it once the body is analyzed — the loop
|
|
164
|
+
// variable must not leak into clauses that follow FOREACH.
|
|
165
|
+
let outer = self.visible_bindings();
|
|
166
|
+
let var_id = self.declare_fresh_variable(&f.variable.name)?;
|
|
167
|
+
|
|
168
|
+
let mut body = Vec::with_capacity(f.body.len());
|
|
169
|
+
for clause in &f.body {
|
|
170
|
+
body.push(self.analyze_foreach_body_clause(clause)?);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
self.replace_scope(outer);
|
|
174
|
+
|
|
175
|
+
Ok(ResolvedForeach {
|
|
176
|
+
variable: var_id,
|
|
177
|
+
list,
|
|
178
|
+
body,
|
|
179
|
+
})
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/// Analyze one body clause inside `FOREACH`. The body is restricted
|
|
183
|
+
/// to updating clauses (Create / Merge / Delete / Set / Remove /
|
|
184
|
+
/// nested Foreach) — reading clauses and RETURN are not legal there.
|
|
185
|
+
fn analyze_foreach_body_clause(
|
|
186
|
+
&mut self,
|
|
187
|
+
uc: &UpdatingClause,
|
|
188
|
+
) -> Result<ResolvedClause, SemanticError> {
|
|
189
|
+
match uc {
|
|
190
|
+
UpdatingClause::Create(c) => Ok(ResolvedClause::Create(self.analyze_create(c)?)),
|
|
191
|
+
UpdatingClause::Merge(m) => Ok(ResolvedClause::Merge(self.analyze_merge(m)?)),
|
|
192
|
+
UpdatingClause::Delete(d) => Ok(ResolvedClause::Delete(self.analyze_delete(d)?)),
|
|
193
|
+
UpdatingClause::Set(s) => Ok(ResolvedClause::Set(self.analyze_set(s)?)),
|
|
194
|
+
UpdatingClause::Remove(r) => Ok(ResolvedClause::Remove(self.analyze_remove(r)?)),
|
|
195
|
+
UpdatingClause::Foreach(f) => Ok(ResolvedClause::Foreach(self.analyze_foreach(f)?)),
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
|
|
154
199
|
pub(super) fn analyze_remove(&mut self, r: &Remove) -> Result<ResolvedRemove, SemanticError> {
|
|
155
200
|
let mut items = Vec::with_capacity(r.items.len());
|
|
156
201
|
|
|
@@ -224,6 +224,7 @@ impl<'a, S: GraphCatalog + ?Sized> Analyzer<'a, S> {
|
|
|
224
224
|
UpdatingClause::Delete(d) => Ok(ResolvedClause::Delete(self.analyze_delete(d)?)),
|
|
225
225
|
UpdatingClause::Set(s) => Ok(ResolvedClause::Set(self.analyze_set(s)?)),
|
|
226
226
|
UpdatingClause::Remove(r) => Ok(ResolvedClause::Remove(self.analyze_remove(r)?)),
|
|
227
|
+
UpdatingClause::Foreach(f) => Ok(ResolvedClause::Foreach(self.analyze_foreach(f)?)),
|
|
227
228
|
}
|
|
228
229
|
}
|
|
229
230
|
|
|
@@ -11,8 +11,8 @@ pub use analyzer::{
|
|
|
11
11
|
pub use errors::SemanticError;
|
|
12
12
|
pub use resolved::{
|
|
13
13
|
LiteralValue, ResolvedCallSubquery, ResolvedChain, ResolvedClause, ResolvedCreate,
|
|
14
|
-
ResolvedDelete, ResolvedExpr, ResolvedMapSelector, ResolvedMatch,
|
|
15
|
-
ResolvedMergeAction, ResolvedNode, ResolvedPattern, ResolvedPatternElement,
|
|
14
|
+
ResolvedDelete, ResolvedExpr, ResolvedForeach, ResolvedMapSelector, ResolvedMatch,
|
|
15
|
+
ResolvedMerge, ResolvedMergeAction, ResolvedNode, ResolvedPattern, ResolvedPatternElement,
|
|
16
16
|
ResolvedPatternPart, ResolvedProjection, ResolvedQuery, ResolvedRel, ResolvedRemove,
|
|
17
17
|
ResolvedRemoveItem, ResolvedReturn, ResolvedSet, ResolvedSetItem, ResolvedSortItem,
|
|
18
18
|
ResolvedUnionPart, ResolvedUnwind, ResolvedWith,
|
|
@@ -28,6 +28,7 @@ pub enum ResolvedClause {
|
|
|
28
28
|
Delete(ResolvedDelete),
|
|
29
29
|
Set(ResolvedSet),
|
|
30
30
|
Remove(ResolvedRemove),
|
|
31
|
+
Foreach(ResolvedForeach),
|
|
31
32
|
Return(ResolvedReturn),
|
|
32
33
|
With(ResolvedWith),
|
|
33
34
|
CallSubquery(ResolvedCallSubquery),
|
|
@@ -112,6 +113,18 @@ pub struct ResolvedRemove {
|
|
|
112
113
|
pub items: Vec<ResolvedRemoveItem>,
|
|
113
114
|
}
|
|
114
115
|
|
|
116
|
+
/// `FOREACH (var IN list | body...)`. The body is restricted to
|
|
117
|
+
/// updating clauses (Create / Merge / Delete / Set / Remove / nested
|
|
118
|
+
/// Foreach). The analyzer enforces that restriction; the planner /
|
|
119
|
+
/// executor treat each body item as a side-effect-only operation
|
|
120
|
+
/// applied row-by-row inside the iteration.
|
|
121
|
+
#[derive(Debug, Clone)]
|
|
122
|
+
pub struct ResolvedForeach {
|
|
123
|
+
pub variable: VarId,
|
|
124
|
+
pub list: ResolvedExpr,
|
|
125
|
+
pub body: Vec<ResolvedClause>,
|
|
126
|
+
}
|
|
127
|
+
|
|
115
128
|
#[derive(Debug, Clone)]
|
|
116
129
|
pub enum ResolvedRemoveItem {
|
|
117
130
|
Labels {
|
|
@@ -402,6 +402,7 @@ pub enum UpdatingClause {
|
|
|
402
402
|
Delete(Delete),
|
|
403
403
|
Set(Set),
|
|
404
404
|
Remove(Remove),
|
|
405
|
+
Foreach(Foreach),
|
|
405
406
|
}
|
|
406
407
|
|
|
407
408
|
#[derive(Debug, Clone)]
|
|
@@ -482,6 +483,18 @@ pub struct Remove {
|
|
|
482
483
|
pub span: Span,
|
|
483
484
|
}
|
|
484
485
|
|
|
486
|
+
/// `FOREACH (var IN list | body...)` — runs each body updating clause
|
|
487
|
+
/// once per element in `list`, with `var` bound to the element. The
|
|
488
|
+
/// body itself contains only updating clauses (CREATE / MERGE / DELETE
|
|
489
|
+
/// / SET / REMOVE / nested FOREACH).
|
|
490
|
+
#[derive(Debug, Clone)]
|
|
491
|
+
pub struct Foreach {
|
|
492
|
+
pub variable: Variable,
|
|
493
|
+
pub list: Expr,
|
|
494
|
+
pub body: Vec<UpdatingClause>,
|
|
495
|
+
pub span: Span,
|
|
496
|
+
}
|
|
497
|
+
|
|
485
498
|
#[derive(Debug, Clone)]
|
|
486
499
|
pub enum RemoveItem {
|
|
487
500
|
Labels {
|
|
@@ -9,14 +9,14 @@ pub mod ast;
|
|
|
9
9
|
|
|
10
10
|
pub use ast::{
|
|
11
11
|
BinaryOp, CallSubquery, ConstraintKind, ConstraintNameSpec, Create, CreateConstraint,
|
|
12
|
-
CreateIndex, Delete, Direction, Document, DropConstraint, DropIndex, Expr,
|
|
13
|
-
IndexEntityKind, IndexKind, IndexKindFilter, IndexNameSpec, IndexOptions,
|
|
14
|
-
LiteralTypeExpr, MapProjectionSelector, Match, Merge, MergeAction,
|
|
15
|
-
Pattern, PatternElement, PatternElementChain, PatternPart,
|
|
16
|
-
ProcedureInvocationKind, ProcedureName, ProjectionBody, ProjectionItem,
|
|
17
|
-
PropertyTypeTerm, Query, QueryPart, RangeLiteral, ReadingClause,
|
|
18
|
-
RelationshipDetail, RelationshipPattern, Remove, RemoveItem, Return, ScalarType,
|
|
19
|
-
Set, SetItem, ShowConstraints, ShowIndexes, ShowPipeline, ShowReturn, ShowYield,
|
|
12
|
+
CreateIndex, Delete, Direction, Document, DropConstraint, DropIndex, Expr, Foreach,
|
|
13
|
+
InQueryCall, IndexEntityKind, IndexKind, IndexKindFilter, IndexNameSpec, IndexOptions,
|
|
14
|
+
ListPredicateKind, LiteralTypeExpr, MapProjectionSelector, Match, Merge, MergeAction,
|
|
15
|
+
MultiPartQuery, NodePattern, Pattern, PatternElement, PatternElementChain, PatternPart,
|
|
16
|
+
ProcedureInvocation, ProcedureInvocationKind, ProcedureName, ProjectionBody, ProjectionItem,
|
|
17
|
+
PropertyTypeExpr, PropertyTypeTerm, Query, QueryPart, RangeLiteral, ReadingClause,
|
|
18
|
+
RegularQuery, RelationshipDetail, RelationshipPattern, Remove, RemoveItem, Return, ScalarType,
|
|
19
|
+
SchemaCommand, Set, SetItem, ShowConstraints, ShowIndexes, ShowPipeline, ShowReturn, ShowYield,
|
|
20
20
|
SinglePartQuery, SingleQuery, SortDirection, SortItem, Span, StandaloneCall, Statement,
|
|
21
21
|
UnaryOp, UnionPart, Unwind, UpdatingClause, Variable, VectorCoordType, With, YieldItem,
|
|
22
22
|
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
[package]
|
|
2
|
+
name = "lora-builtins-meta"
|
|
3
|
+
edition.workspace = true
|
|
4
|
+
version.workspace = true
|
|
5
|
+
license.workspace = true
|
|
6
|
+
authors.workspace = true
|
|
7
|
+
repository.workspace = true
|
|
8
|
+
homepage.workspace = true
|
|
9
|
+
rust-version.workspace = true
|
|
10
|
+
description = "Static metadata table for LoraDB's namespaced builtin functions — arity, aliases, aggregates. Shared by the analyzer, executor, and editor WASM."
|
|
11
|
+
keywords = ["loradb", "cypher", "builtins", "metadata"]
|
|
12
|
+
categories = ["compilers", "parser-implementations"]
|
|
13
|
+
|
|
14
|
+
[dependencies]
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
//! Metadata table for lora's namespaced builtin functions.
|
|
2
2
|
//!
|
|
3
|
-
//! Owned by
|
|
4
|
-
//! references at compile time
|
|
5
|
-
//! `op` strings
|
|
3
|
+
//! Owned by this leaf crate so the analyzer (which validates function
|
|
4
|
+
//! references at compile time), the executor (which dispatches on the
|
|
5
|
+
//! `op` strings), and the editor's WASM bridge (which feeds the
|
|
6
|
+
//! autocomplete / signature-hint surface) can all share a single
|
|
7
|
+
//! declaration. Drift-safety tests in lora-executor assert that every
|
|
6
8
|
//! entry here has a dispatch arm.
|
|
7
9
|
//!
|
|
8
|
-
//! This is intentionally more than an arity table: enum-like argument
|
|
9
|
-
//! live here too, so analyzer rewrites and executor dispatch
|
|
10
|
-
//! declaration for each builtin.
|
|
10
|
+
//! This is intentionally more than an arity table: enum-like argument
|
|
11
|
+
//! slots live here too, so analyzer rewrites and executor dispatch
|
|
12
|
+
//! share one declaration for each builtin.
|
|
11
13
|
|
|
12
14
|
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
|
13
15
|
pub struct BuiltinSpec {
|
|
@@ -423,6 +425,7 @@ pub const BUILTIN_SPECS: &[BuiltinSpec] = &[
|
|
|
423
425
|
// -- geo.* --------------------------------------------------------------
|
|
424
426
|
spec("geo.distance", 2, Some(2)),
|
|
425
427
|
spec("geo.within_bbox", 3, Some(3)),
|
|
428
|
+
spec("geo.point", 1, Some(1)),
|
|
426
429
|
// -- vector.* -----------------------------------------------------------
|
|
427
430
|
spec("vector.dimension", 1, Some(1)),
|
|
428
431
|
spec_enum("vector.distance", 3, Some(3), &[2]),
|
|
@@ -477,6 +480,16 @@ pub const BUILTIN_ALIASES: &[BuiltinAlias] = &[
|
|
|
477
480
|
alias("type.can_cast", "cast.can"),
|
|
478
481
|
alias("now", "temporal.now"),
|
|
479
482
|
alias("datetime", "temporal.now"),
|
|
483
|
+
// Cypher temporal constructors. `temporal.now` doubles as a parser
|
|
484
|
+
// when called with a string argument (see `temporal::now` in the
|
|
485
|
+
// executor — `date("2025-01-01")` lands in the string-parse branch
|
|
486
|
+
// that picks DateTime/Date/Duration based on the literal's shape).
|
|
487
|
+
alias("date", "temporal.now"),
|
|
488
|
+
alias("time", "temporal.now"),
|
|
489
|
+
alias("localdatetime", "temporal.now"),
|
|
490
|
+
alias("localtime", "temporal.now"),
|
|
491
|
+
alias("duration", "temporal.now"),
|
|
492
|
+
alias("point", "geo.point"),
|
|
480
493
|
alias("timestamp", "temporal.timestamp"),
|
|
481
494
|
alias("timezone", "temporal.timezone"),
|
|
482
495
|
alias("new", "uuid.new"),
|
|
@@ -9,15 +9,15 @@ mod planner;
|
|
|
9
9
|
pub use plan_tree::{plan_tree_from_compiled, PlanTree, PlanTreeNode};
|
|
10
10
|
|
|
11
11
|
pub use logical::{
|
|
12
|
-
Aggregation, Argument, Create, Delete, Expand, Filter, Limit, LogicalOp, LogicalPlan,
|
|
13
|
-
NodeByPointScan, NodeByPropertyRangeScan, NodeByPropertyScan, NodeByTextScan, NodeScan,
|
|
12
|
+
Aggregation, Argument, Create, Delete, Expand, Filter, Foreach, Limit, LogicalOp, LogicalPlan,
|
|
13
|
+
Merge, NodeByPointScan, NodeByPropertyRangeScan, NodeByPropertyScan, NodeByTextScan, NodeScan,
|
|
14
14
|
OptionalMatch, PathBuild, PlanNodeId, PointPredicate, Projection, RelByPointScan,
|
|
15
15
|
RelByPropertyRangeScan, RelByTextScan, Remove, Set, Sort, TextPredicate, Unwind,
|
|
16
16
|
};
|
|
17
17
|
pub use optimizer::Optimizer;
|
|
18
18
|
pub use physical::{
|
|
19
|
-
ArgumentExec, CreateExec, DeleteExec, ExpandExec, FilterExec,
|
|
20
|
-
MergeExec, NodeByLabelScanExec, NodeByPointScanExec, NodeByPropertyRangeScanExec,
|
|
19
|
+
ArgumentExec, CreateExec, DeleteExec, ExpandExec, FilterExec, ForeachExec, HashAggregationExec,
|
|
20
|
+
LimitExec, MergeExec, NodeByLabelScanExec, NodeByPointScanExec, NodeByPropertyRangeScanExec,
|
|
21
21
|
NodeByPropertyScanExec, NodeByTextScanExec, NodeScanExec, OptionalMatchExec, PathBuildExec,
|
|
22
22
|
PhysicalNodeId, PhysicalOp, PhysicalPlan, ProjectionExec, RelByPointScanExec,
|
|
23
23
|
RelByPropertyRangeScanExec, RelByTextScanExec, RemoveExec, SetExec, SortExec, UnwindExec,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
use lora_analyzer::symbols::VarId;
|
|
2
2
|
use lora_analyzer::{
|
|
3
|
-
ResolvedExpr, ResolvedMergeAction, ResolvedPattern, ResolvedPatternPart,
|
|
4
|
-
ResolvedRemoveItem, ResolvedSetItem, ResolvedSortItem,
|
|
3
|
+
ResolvedClause, ResolvedExpr, ResolvedMergeAction, ResolvedPattern, ResolvedPatternPart,
|
|
4
|
+
ResolvedProjection, ResolvedRemoveItem, ResolvedSetItem, ResolvedSortItem,
|
|
5
5
|
};
|
|
6
6
|
use lora_ast::{Direction, RangeLiteral};
|
|
7
7
|
|
|
@@ -36,11 +36,25 @@ pub enum LogicalOp {
|
|
|
36
36
|
Set(Set),
|
|
37
37
|
Remove(Remove),
|
|
38
38
|
Create(Create),
|
|
39
|
+
Foreach(Foreach),
|
|
39
40
|
OptionalMatch(OptionalMatch),
|
|
40
41
|
PathBuild(PathBuild),
|
|
41
42
|
CallSubquery(CallSubquery),
|
|
42
43
|
}
|
|
43
44
|
|
|
45
|
+
/// `FOREACH (var IN list | body...)` — for each input row, evaluate
|
|
46
|
+
/// the list, then run each body clause once per element with `var`
|
|
47
|
+
/// bound to the element. The body is a flat list of resolved updating
|
|
48
|
+
/// clauses applied for side effects only; the outer row is emitted
|
|
49
|
+
/// unchanged after the loop.
|
|
50
|
+
#[derive(Debug, Clone)]
|
|
51
|
+
pub struct Foreach {
|
|
52
|
+
pub input: PlanNodeId,
|
|
53
|
+
pub variable: VarId,
|
|
54
|
+
pub list: ResolvedExpr,
|
|
55
|
+
pub body: Vec<ResolvedClause>,
|
|
56
|
+
}
|
|
57
|
+
|
|
44
58
|
/// `CALL { ... }` subquery: for each upstream row, runs the inner
|
|
45
59
|
/// sub-plan with the upstream row as its initial argument, then
|
|
46
60
|
/// emits the cartesian product of `(upstream row, inner row)` for
|
|
@@ -354,6 +354,13 @@ fn lower_logical_op(op: LogicalOp) -> PhysicalOp {
|
|
|
354
354
|
items: remove.items,
|
|
355
355
|
}),
|
|
356
356
|
|
|
357
|
+
LogicalOp::Foreach(foreach) => PhysicalOp::Foreach(crate::ForeachExec {
|
|
358
|
+
input: foreach.input,
|
|
359
|
+
variable: foreach.variable,
|
|
360
|
+
list: foreach.list,
|
|
361
|
+
body: foreach.body,
|
|
362
|
+
}),
|
|
363
|
+
|
|
357
364
|
LogicalOp::OptionalMatch(om) => PhysicalOp::OptionalMatch(OptionalMatchExec {
|
|
358
365
|
input: om.input,
|
|
359
366
|
inner: om.inner,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
use lora_analyzer::symbols::VarId;
|
|
2
2
|
use lora_analyzer::{
|
|
3
|
-
ResolvedExpr, ResolvedMergeAction, ResolvedPattern, ResolvedPatternPart,
|
|
4
|
-
ResolvedRemoveItem, ResolvedSetItem, ResolvedSortItem,
|
|
3
|
+
ResolvedClause, ResolvedExpr, ResolvedMergeAction, ResolvedPattern, ResolvedPatternPart,
|
|
4
|
+
ResolvedProjection, ResolvedRemoveItem, ResolvedSetItem, ResolvedSortItem,
|
|
5
5
|
};
|
|
6
6
|
use lora_ast::{Direction, RangeLiteral};
|
|
7
7
|
|
|
@@ -37,11 +37,21 @@ pub enum PhysicalOp {
|
|
|
37
37
|
Delete(DeleteExec),
|
|
38
38
|
Set(SetExec),
|
|
39
39
|
Remove(RemoveExec),
|
|
40
|
+
Foreach(ForeachExec),
|
|
40
41
|
OptionalMatch(OptionalMatchExec),
|
|
41
42
|
PathBuild(PathBuildExec),
|
|
42
43
|
CallSubquery(CallSubqueryExec),
|
|
43
44
|
}
|
|
44
45
|
|
|
46
|
+
/// See [`crate::logical::Foreach`].
|
|
47
|
+
#[derive(Debug, Clone)]
|
|
48
|
+
pub struct ForeachExec {
|
|
49
|
+
pub input: PhysicalNodeId,
|
|
50
|
+
pub variable: VarId,
|
|
51
|
+
pub list: ResolvedExpr,
|
|
52
|
+
pub body: Vec<ResolvedClause>,
|
|
53
|
+
}
|
|
54
|
+
|
|
45
55
|
/// `CALL { ... }` subquery executor node. See [`crate::logical::CallSubquery`].
|
|
46
56
|
#[derive(Debug, Clone)]
|
|
47
57
|
pub struct CallSubqueryExec {
|
|
@@ -387,6 +387,12 @@ fn describe(op: &PhysicalOp) -> PlanDescription {
|
|
|
387
387
|
d.insert("items".to_string(), n.items.len().to_string());
|
|
388
388
|
PlanDescription::with_children("Remove", d, vec![n.input])
|
|
389
389
|
}
|
|
390
|
+
PhysicalOp::Foreach(n) => {
|
|
391
|
+
d.insert("variable".to_string(), var_str(n.variable));
|
|
392
|
+
d.insert("list".to_string(), expr_str(&n.list));
|
|
393
|
+
d.insert("body".to_string(), n.body.len().to_string());
|
|
394
|
+
PlanDescription::with_children("Foreach", d, vec![n.input])
|
|
395
|
+
}
|
|
390
396
|
PhysicalOp::OptionalMatch(n) => describe_optional_match(n),
|
|
391
397
|
PhysicalOp::CallSubquery(n) => {
|
|
392
398
|
d.insert(
|
|
@@ -6,8 +6,9 @@ use crate::{
|
|
|
6
6
|
use lora_analyzer::symbols::VarId;
|
|
7
7
|
use lora_analyzer::{
|
|
8
8
|
ResolvedCallSubquery, ResolvedClause, ResolvedCreate, ResolvedDelete, ResolvedExpr,
|
|
9
|
-
ResolvedMatch, ResolvedMerge, ResolvedPattern, ResolvedPatternElement,
|
|
10
|
-
ResolvedQuery, ResolvedRemove, ResolvedReturn, ResolvedSet, ResolvedUnwind,
|
|
9
|
+
ResolvedForeach, ResolvedMatch, ResolvedMerge, ResolvedPattern, ResolvedPatternElement,
|
|
10
|
+
ResolvedProjection, ResolvedQuery, ResolvedRemove, ResolvedReturn, ResolvedSet, ResolvedUnwind,
|
|
11
|
+
ResolvedWith,
|
|
11
12
|
};
|
|
12
13
|
|
|
13
14
|
pub struct Planner {
|
|
@@ -77,6 +78,11 @@ impl Planner {
|
|
|
77
78
|
self.plan_remove(upstream, rm)
|
|
78
79
|
}
|
|
79
80
|
|
|
81
|
+
ResolvedClause::Foreach(f) => {
|
|
82
|
+
let upstream = input.unwrap_or_else(|| self.plan_unit_input());
|
|
83
|
+
self.plan_foreach(upstream, f)
|
|
84
|
+
}
|
|
85
|
+
|
|
80
86
|
ResolvedClause::With(w) => {
|
|
81
87
|
let upstream = input.unwrap_or_else(|| self.plan_unit_input());
|
|
82
88
|
self.plan_with(upstream, w)
|
|
@@ -198,6 +204,15 @@ impl Planner {
|
|
|
198
204
|
}))
|
|
199
205
|
}
|
|
200
206
|
|
|
207
|
+
fn plan_foreach(&mut self, input: PlanNodeId, f: &ResolvedForeach) -> PlanNodeId {
|
|
208
|
+
self.push(LogicalOp::Foreach(crate::Foreach {
|
|
209
|
+
input,
|
|
210
|
+
variable: f.variable,
|
|
211
|
+
list: f.list.clone(),
|
|
212
|
+
body: f.body.clone(),
|
|
213
|
+
}))
|
|
214
|
+
}
|
|
215
|
+
|
|
201
216
|
fn plan_with(&mut self, input: PlanNodeId, with: &ResolvedWith) -> PlanNodeId {
|
|
202
217
|
let mut node = input;
|
|
203
218
|
|