lora-python 0.11.4__tar.gz → 0.11.5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (310) hide show
  1. {lora_python-0.11.4 → lora_python-0.11.5}/Cargo.lock +23 -17
  2. {lora_python-0.11.4 → lora_python-0.11.5}/Cargo.toml +13 -12
  3. {lora_python-0.11.4 → lora_python-0.11.5}/PKG-INFO +1 -1
  4. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-analyzer/Cargo.toml +1 -0
  5. lora_python-0.11.5/crates/lora-analyzer/src/analyzer/builtin_signatures.rs +7 -0
  6. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-analyzer/src/analyzer/clauses.rs +47 -2
  7. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-analyzer/src/analyzer/state.rs +1 -0
  8. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-analyzer/src/lib.rs +2 -2
  9. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-analyzer/src/resolved.rs +13 -0
  10. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-ast/src/ast.rs +13 -0
  11. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-ast/src/lib.rs +8 -8
  12. lora_python-0.11.5/crates/lora-builtins-meta/Cargo.toml +14 -0
  13. lora_python-0.11.4/crates/lora-analyzer/src/analyzer/builtin_signatures.rs → lora_python-0.11.5/crates/lora-builtins-meta/src/lib.rs +19 -6
  14. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-compiler/src/lib.rs +4 -4
  15. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-compiler/src/logical.rs +16 -2
  16. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-compiler/src/optimizer.rs +7 -0
  17. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-compiler/src/physical.rs +12 -2
  18. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-compiler/src/plan_tree.rs +6 -0
  19. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-compiler/src/planner.rs +17 -2
  20. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/src/database/pull_mode.rs +2 -1
  21. lora_python-0.11.5/crates/lora-database/tests/foreach.rs +209 -0
  22. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/errors.rs +3 -0
  23. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/eval/builtins/geo.rs +29 -2
  24. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/eval/builtins/temporal.rs +27 -10
  25. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/executor/immutable.rs +2 -0
  26. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/executor/mutable.rs +142 -0
  27. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/pull/columns.rs +1 -0
  28. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/pull/shape.rs +1 -0
  29. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-parser/src/cypher.pest +14 -2
  30. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-parser/src/parser/clauses.rs +27 -0
  31. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-parser/src/parser/query.rs +3 -2
  32. {lora_python-0.11.4 → lora_python-0.11.5}/pyproject.toml +1 -1
  33. {lora_python-0.11.4 → lora_python-0.11.5}/LICENSE +0 -0
  34. {lora_python-0.11.4 → lora_python-0.11.5}/README.md +0 -0
  35. {lora_python-0.11.4 → lora_python-0.11.5}/crates/bindings/lora-python/.gitignore +0 -0
  36. {lora_python-0.11.4 → lora_python-0.11.5}/crates/bindings/lora-python/Cargo.toml +0 -0
  37. {lora_python-0.11.4 → lora_python-0.11.5}/crates/bindings/lora-python/LICENSE +0 -0
  38. {lora_python-0.11.4 → lora_python-0.11.5}/crates/bindings/lora-python/README.md +0 -0
  39. {lora_python-0.11.4 → lora_python-0.11.5}/crates/bindings/lora-python/build.rs +0 -0
  40. {lora_python-0.11.4 → lora_python-0.11.5}/crates/bindings/lora-python/examples/async_demo.py +0 -0
  41. {lora_python-0.11.4 → lora_python-0.11.5}/crates/bindings/lora-python/examples/basic.py +0 -0
  42. {lora_python-0.11.4 → lora_python-0.11.5}/crates/bindings/lora-python/src/errors.rs +0 -0
  43. {lora_python-0.11.4 → lora_python-0.11.5}/crates/bindings/lora-python/src/from_python.rs +0 -0
  44. {lora_python-0.11.4 → lora_python-0.11.5}/crates/bindings/lora-python/src/lib.rs +0 -0
  45. {lora_python-0.11.4 → lora_python-0.11.5}/crates/bindings/lora-python/src/to_python.rs +0 -0
  46. {lora_python-0.11.4 → lora_python-0.11.5}/crates/bindings/lora-python/tests/test_async.py +0 -0
  47. {lora_python-0.11.4 → lora_python-0.11.5}/crates/bindings/lora-python/tests/test_explain_profile.py +0 -0
  48. {lora_python-0.11.4 → lora_python-0.11.5}/crates/bindings/lora-python/tests/test_sync.py +0 -0
  49. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-analyzer/src/analyzer/expressions.rs +0 -0
  50. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-analyzer/src/analyzer/mod.rs +0 -0
  51. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-analyzer/src/analyzer/patterns.rs +0 -0
  52. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-analyzer/src/analyzer/tests.rs +0 -0
  53. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-analyzer/src/errors.rs +0 -0
  54. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-analyzer/src/scope.rs +0 -0
  55. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-analyzer/src/symbols.rs +0 -0
  56. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-analyzer/tests/error_messages.rs +0 -0
  57. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-ast/Cargo.toml +0 -0
  58. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-compiler/Cargo.toml +0 -0
  59. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-compiler/src/pattern.rs +0 -0
  60. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/Cargo.toml +0 -0
  61. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/benches/README.md +0 -0
  62. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/benches/advanced.rs +0 -0
  63. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/benches/concurrency_guard.rs +0 -0
  64. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/benches/concurrent.rs +0 -0
  65. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/benches/engine.rs +0 -0
  66. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/benches/fixtures.rs +0 -0
  67. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/benches/index_acceleration.rs +0 -0
  68. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/benches/perf_smoke.rs +0 -0
  69. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/benches/perf_smoke_baseline.json +0 -0
  70. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/benches/query_implementations.rs +0 -0
  71. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/benches/realistic.rs +0 -0
  72. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/benches/scale.rs +0 -0
  73. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/benches/temporal_spatial.rs +0 -0
  74. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/benches/wal.rs +0 -0
  75. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/src/database/builder.rs +0 -0
  76. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/src/database/compile.rs +0 -0
  77. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/src/database/execute.rs +0 -0
  78. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/src/database/explain.rs +0 -0
  79. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/src/database/graph_api.rs +0 -0
  80. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/src/database/mod.rs +0 -0
  81. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/src/database/occ.rs +0 -0
  82. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/src/database/procedures.rs +0 -0
  83. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/src/database/profile.rs +0 -0
  84. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/src/database/replay.rs +0 -0
  85. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/src/database/row_projection.rs +0 -0
  86. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/src/database/schema.rs +0 -0
  87. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/src/database/show_pipeline.rs +0 -0
  88. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/src/database/stream.rs +0 -0
  89. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/src/database/write_guard.rs +0 -0
  90. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/src/durable_io.rs +0 -0
  91. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/src/error.rs +0 -0
  92. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/src/explain.rs +0 -0
  93. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/src/lib.rs +0 -0
  94. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/src/live_store.rs +0 -0
  95. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/src/named.rs +0 -0
  96. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/src/plan_cache.rs +0 -0
  97. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/src/snapshot/json.rs +0 -0
  98. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/src/snapshot/mod.rs +0 -0
  99. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/src/snapshot/store.rs +0 -0
  100. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/src/stream.rs +0 -0
  101. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/src/transaction.rs +0 -0
  102. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/src/wal/admin.rs +0 -0
  103. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/src/wal/archive/format.rs +0 -0
  104. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/src/wal/archive/lock.rs +0 -0
  105. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/src/wal/archive/platform.rs +0 -0
  106. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/src/wal/archive/worker.rs +0 -0
  107. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/src/wal/archive/workspace.rs +0 -0
  108. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/src/wal/archive.rs +0 -0
  109. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/src/wal/mod.rs +0 -0
  110. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/src/wal/write_scope.rs +0 -0
  111. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/tests/advanced_queries.rs +0 -0
  112. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/tests/aggregation.rs +0 -0
  113. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/tests/backend_stub.rs +0 -0
  114. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/tests/binary.rs +0 -0
  115. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/tests/builtin_namespaces.rs +0 -0
  116. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/tests/constraints.rs +0 -0
  117. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/tests/create.rs +0 -0
  118. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/tests/docs_examples.rs +0 -0
  119. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/tests/error_messages.rs +0 -0
  120. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/tests/errors.rs +0 -0
  121. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/tests/explain_profile.rs +0 -0
  122. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/tests/expressions.rs +0 -0
  123. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/tests/fulltext_index.rs +0 -0
  124. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/tests/functions_extended.rs +0 -0
  125. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/tests/index_acceleration.rs +0 -0
  126. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/tests/invariants.rs +0 -0
  127. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/tests/managed_snapshots.rs +0 -0
  128. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/tests/match.rs +0 -0
  129. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/tests/merge.rs +0 -0
  130. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/tests/ordering.rs +0 -0
  131. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/tests/parameters.rs +0 -0
  132. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/tests/parser.rs +0 -0
  133. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/tests/paths.rs +0 -0
  134. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/tests/projection.rs +0 -0
  135. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/tests/scale.rs +0 -0
  136. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/tests/schema.rs +0 -0
  137. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/tests/seeds.rs +0 -0
  138. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/tests/snapshot.rs +0 -0
  139. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/tests/spatial.rs +0 -0
  140. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/tests/temporal.rs +0 -0
  141. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/tests/test_helpers.rs +0 -0
  142. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/tests/transactions.rs +0 -0
  143. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/tests/types_advanced.rs +0 -0
  144. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/tests/union.rs +0 -0
  145. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/tests/unwind_ingestion.rs +0 -0
  146. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/tests/update.rs +0 -0
  147. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/tests/vector_index.rs +0 -0
  148. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/tests/vectors.rs +0 -0
  149. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/tests/wal.rs +0 -0
  150. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/tests/where_clause.rs +0 -0
  151. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-database/tests/with.rs +0 -0
  152. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/Cargo.toml +0 -0
  153. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/eval/binops.rs +0 -0
  154. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/eval/builtins/bits_ns.rs +0 -0
  155. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/eval/builtins/bytes_ns.rs +0 -0
  156. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/eval/builtins/cast_ns.rs +0 -0
  157. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/eval/builtins/crypto.rs +0 -0
  158. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/eval/builtins/edge.rs +0 -0
  159. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/eval/builtins/json_ns.rs +0 -0
  160. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/eval/builtins/list.rs +0 -0
  161. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/eval/builtins/map_ns.rs +0 -0
  162. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/eval/builtins/math_ns.rs +0 -0
  163. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/eval/builtins/mod.rs +0 -0
  164. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/eval/builtins/node.rs +0 -0
  165. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/eval/builtins/number.rs +0 -0
  166. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/eval/builtins/path.rs +0 -0
  167. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/eval/builtins/string_ns.rs +0 -0
  168. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/eval/builtins/text.rs +0 -0
  169. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/eval/builtins/type_ns.rs +0 -0
  170. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/eval/builtins/uuid_ns.rs +0 -0
  171. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/eval/builtins/value.rs +0 -0
  172. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/eval/builtins/vector_ns.rs +0 -0
  173. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/eval/errors.rs +0 -0
  174. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/eval/expr.rs +0 -0
  175. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/eval/functions.rs +0 -0
  176. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/eval/mod.rs +0 -0
  177. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/eval/point.rs +0 -0
  178. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/eval/regex.rs +0 -0
  179. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/eval/vector.rs +0 -0
  180. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/executor/aggregation.rs +0 -0
  181. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/executor/helpers.rs +0 -0
  182. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/executor/mod.rs +0 -0
  183. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/executor/optional.rs +0 -0
  184. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/executor/sort.rs +0 -0
  185. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/lib.rs +0 -0
  186. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/profile.rs +0 -0
  187. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/pull/aggregate.rs +0 -0
  188. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/pull/call_subquery.rs +0 -0
  189. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/pull/context.rs +0 -0
  190. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/pull/expand.rs +0 -0
  191. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/pull/filter.rs +0 -0
  192. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/pull/hydration.rs +0 -0
  193. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/pull/mod.rs +0 -0
  194. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/pull/mutable.rs +0 -0
  195. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/pull/optional.rs +0 -0
  196. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/pull/path.rs +0 -0
  197. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/pull/projection.rs +0 -0
  198. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/pull/scan.rs +0 -0
  199. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/pull/sort.rs +0 -0
  200. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/pull/source.rs +0 -0
  201. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/pull/tests.rs +0 -0
  202. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/pull/traits.rs +0 -0
  203. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/pull/union.rs +0 -0
  204. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/src/value.rs +0 -0
  205. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-executor/tests/error_messages.rs +0 -0
  206. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-parser/Cargo.toml +0 -0
  207. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-parser/src/errors.rs +0 -0
  208. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-parser/src/lib.rs +0 -0
  209. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-parser/src/parser/expressions.rs +0 -0
  210. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-parser/src/parser/literals.rs +0 -0
  211. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-parser/src/parser/mod.rs +0 -0
  212. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-parser/src/parser/patterns.rs +0 -0
  213. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-parser/src/parser/schema.rs +0 -0
  214. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-parser/src/parser/tests.rs +0 -0
  215. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-parser/src/parser/util.rs +0 -0
  216. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-parser/tests/error_messages.rs +0 -0
  217. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-snapshot/Cargo.toml +0 -0
  218. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-snapshot/src/body.rs +0 -0
  219. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-snapshot/src/codec.rs +0 -0
  220. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-snapshot/src/columnar.rs +0 -0
  221. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-snapshot/src/envelope.rs +0 -0
  222. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-snapshot/src/errors.rs +0 -0
  223. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-snapshot/src/format.rs +0 -0
  224. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-snapshot/src/lib.rs +0 -0
  225. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-snapshot/src/options.rs +0 -0
  226. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-snapshot/src/tests.rs +0 -0
  227. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-snapshot/src/transform.rs +0 -0
  228. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-snapshot/src/view.rs +0 -0
  229. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-snapshot/tests/error_messages.rs +0 -0
  230. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-store/Cargo.toml +0 -0
  231. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-store/src/codec.rs +0 -0
  232. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-store/src/lib.rs +0 -0
  233. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-store/src/lock_table.rs +0 -0
  234. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-store/src/memory/constraint_catalog.rs +0 -0
  235. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-store/src/memory/constraint_enforce.rs +0 -0
  236. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-store/src/memory/entity_index_store.rs +0 -0
  237. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-store/src/memory/fulltext_index.rs +0 -0
  238. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-store/src/memory/graph.rs +0 -0
  239. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-store/src/memory/impls.rs +0 -0
  240. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-store/src/memory/index_catalog.rs +0 -0
  241. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-store/src/memory/mod.rs +0 -0
  242. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-store/src/memory/point_index.rs +0 -0
  243. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-store/src/memory/property_index.rs +0 -0
  244. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-store/src/memory/secondary_index_maintenance.rs +0 -0
  245. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-store/src/memory/snapshot.rs +0 -0
  246. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-store/src/memory/sorted_property_index.rs +0 -0
  247. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-store/src/memory/stats.rs +0 -0
  248. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-store/src/memory/tests.rs +0 -0
  249. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-store/src/memory/text_index.rs +0 -0
  250. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-store/src/mutation.rs +0 -0
  251. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-store/src/snapshot.rs +0 -0
  252. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-store/src/traits.rs +0 -0
  253. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-store/src/types/binary/mod.rs +0 -0
  254. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-store/src/types/binary/tests.rs +0 -0
  255. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-store/src/types/binary/traits.rs +0 -0
  256. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-store/src/types/binary/types.rs +0 -0
  257. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-store/src/types/graph.rs +0 -0
  258. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-store/src/types/mod.rs +0 -0
  259. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-store/src/types/property_value.rs +0 -0
  260. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-store/src/types/spatial/distance.rs +0 -0
  261. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-store/src/types/spatial/mod.rs +0 -0
  262. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-store/src/types/spatial/point.rs +0 -0
  263. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-store/src/types/spatial/srid.rs +0 -0
  264. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-store/src/types/spatial/tests.rs +0 -0
  265. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-store/src/types/temporal/calendar.rs +0 -0
  266. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-store/src/types/temporal/date.rs +0 -0
  267. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-store/src/types/temporal/datetime.rs +0 -0
  268. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-store/src/types/temporal/duration.rs +0 -0
  269. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-store/src/types/temporal/format.rs +0 -0
  270. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-store/src/types/temporal/mod.rs +0 -0
  271. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-store/src/types/temporal/parsing.rs +0 -0
  272. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-store/src/types/temporal/time.rs +0 -0
  273. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-store/src/types/vector/build.rs +0 -0
  274. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-store/src/types/vector/mod.rs +0 -0
  275. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-store/src/types/vector/similarity.rs +0 -0
  276. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-store/src/types/vector/tests.rs +0 -0
  277. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-store/src/types/vector/types.rs +0 -0
  278. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-store/tests/error_messages.rs +0 -0
  279. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-wal/Cargo.toml +0 -0
  280. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-wal/src/codec/decode.rs +0 -0
  281. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-wal/src/codec/encode.rs +0 -0
  282. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-wal/src/codec/format.rs +0 -0
  283. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-wal/src/codec/mod.rs +0 -0
  284. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-wal/src/codec/tests.rs +0 -0
  285. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-wal/src/config.rs +0 -0
  286. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-wal/src/dir.rs +0 -0
  287. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-wal/src/errors.rs +0 -0
  288. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-wal/src/io.rs +0 -0
  289. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-wal/src/lib.rs +0 -0
  290. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-wal/src/lock.rs +0 -0
  291. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-wal/src/lsn.rs +0 -0
  292. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-wal/src/record.rs +0 -0
  293. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-wal/src/recorder/errors.rs +0 -0
  294. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-wal/src/recorder/mirror.rs +0 -0
  295. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-wal/src/recorder/mod.rs +0 -0
  296. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-wal/src/recorder/recorder.rs +0 -0
  297. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-wal/src/recorder/tests.rs +0 -0
  298. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-wal/src/replay.rs +0 -0
  299. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-wal/src/segment.rs +0 -0
  300. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-wal/src/testing.rs +0 -0
  301. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-wal/src/wal/group_flusher.rs +0 -0
  302. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-wal/src/wal/mod.rs +0 -0
  303. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-wal/src/wal/tests.rs +0 -0
  304. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-wal/src/wal/wal.rs +0 -0
  305. {lora_python-0.11.4 → lora_python-0.11.5}/crates/lora-wal/tests/error_messages.rs +0 -0
  306. {lora_python-0.11.4 → lora_python-0.11.5}/python/lora_python/__init__.py +0 -0
  307. {lora_python-0.11.4 → lora_python-0.11.5}/python/lora_python/_async.py +0 -0
  308. {lora_python-0.11.4 → lora_python-0.11.5}/python/lora_python/_native.pyi +0 -0
  309. {lora_python-0.11.4 → lora_python-0.11.5}/python/lora_python/py.typed +0 -0
  310. {lora_python-0.11.4 → lora_python-0.11.5}/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.11.4"
776
+ version = "0.11.5"
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.11.4"
787
+ version = "0.11.5"
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.11.4"
794
+ version = "0.11.5"
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.11.5"
803
+
799
804
  [[package]]
800
805
  name = "lora-compiler"
801
- version = "0.11.4"
806
+ version = "0.11.5"
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.11.4"
815
+ version = "0.11.5"
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.11.4"
839
+ version = "0.11.5"
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.11.4"
862
+ version = "0.11.5"
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.11.4"
874
+ version = "0.11.5"
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.11.4"
889
+ version = "0.11.5"
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.11.4"
900
+ version = "0.11.5"
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.11.4"
912
+ version = "0.11.5"
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.11.4"
926
+ version = "0.11.5"
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.11.4"
940
+ version = "0.11.5"
935
941
  dependencies = [
936
942
  "argon2",
937
943
  "blake3",
@@ -945,7 +951,7 @@ dependencies = [
945
951
 
946
952
  [[package]]
947
953
  name = "lora-store"
948
- version = "0.11.4"
954
+ version = "0.11.5"
949
955
  dependencies = [
950
956
  "crc32fast",
951
957
  "js-sys",
@@ -956,7 +962,7 @@ dependencies = [
956
962
 
957
963
  [[package]]
958
964
  name = "lora-wal"
959
- version = "0.11.4"
965
+ version = "0.11.5"
960
966
  dependencies = [
961
967
  "crc32fast",
962
968
  "lora-store",
@@ -966,7 +972,7 @@ dependencies = [
966
972
 
967
973
  [[package]]
968
974
  name = "lora-wasm"
969
- version = "0.11.4"
975
+ version = "0.11.5"
970
976
  dependencies = [
971
977
  "anyhow",
972
978
  "console_error_panic_hook",
@@ -982,7 +988,7 @@ dependencies = [
982
988
 
983
989
  [[package]]
984
990
  name = "lora_ruby"
985
- version = "0.11.4"
991
+ version = "0.11.5"
986
992
  dependencies = [
987
993
  "anyhow",
988
994
  "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.11.4"
7
+ version = "0.11.5"
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.11.4" }
19
- lora-parser = { path = "crates/lora-parser", version = "=0.11.4" }
20
- lora-analyzer = { path = "crates/lora-analyzer", version = "=0.11.4" }
21
- lora-compiler = { path = "crates/lora-compiler", version = "=0.11.4" }
22
- lora-store = { path = "crates/lora-store", version = "=0.11.4" }
23
- lora-snapshot = { path = "crates/lora-snapshot", version = "=0.11.4", default-features = false }
24
- lora-wal = { path = "crates/lora-wal", version = "=0.11.4" }
25
- lora-executor = { path = "crates/lora-executor", version = "=0.11.4", default-features = false }
26
- lora-database = { path = "crates/lora-database", version = "=0.11.4" }
27
- lora-binding-buffer = { path = "crates/bindings/lora-binding-buffer", version = "=0.11.4" }
18
+ lora-ast = { path = "crates/lora-ast", version = "=0.11.5" }
19
+ lora-parser = { path = "crates/lora-parser", version = "=0.11.5" }
20
+ lora-builtins-meta = { path = "crates/lora-builtins-meta", version = "=0.11.5" }
21
+ lora-analyzer = { path = "crates/lora-analyzer", version = "=0.11.5" }
22
+ lora-compiler = { path = "crates/lora-compiler", version = "=0.11.5" }
23
+ lora-store = { path = "crates/lora-store", version = "=0.11.5" }
24
+ lora-snapshot = { path = "crates/lora-snapshot", version = "=0.11.5", default-features = false }
25
+ lora-wal = { path = "crates/lora-wal", version = "=0.11.5" }
26
+ lora-executor = { path = "crates/lora-executor", version = "=0.11.5", default-features = false }
27
+ lora-database = { path = "crates/lora-database", version = "=0.11.5" }
28
+ lora-binding-buffer = { path = "crates/bindings/lora-binding-buffer", version = "=0.11.5" }
28
29
 
29
30
  # External crates.
30
31
  anyhow = "1"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lora-python
3
- Version: 0.11.4
3
+ Version: 0.11.5
4
4
  Classifier: Programming Language :: Rust
5
5
  Classifier: Programming Language :: Python :: 3
6
6
  Classifier: Programming Language :: Python :: 3.8
@@ -13,6 +13,7 @@ categories = ["compilers", "parser-implementations"]
13
13
 
14
14
  [dependencies]
15
15
  lora-ast.workspace = true
16
+ lora-builtins-meta.workspace = true
16
17
  lora-store.workspace = true
17
18
  lora-parser.workspace = true
18
19
  thiserror.workspace = true
@@ -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, Remove,
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, ResolvedMerge,
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, InQueryCall,
13
- IndexEntityKind, IndexKind, IndexKindFilter, IndexNameSpec, IndexOptions, ListPredicateKind,
14
- LiteralTypeExpr, MapProjectionSelector, Match, Merge, MergeAction, MultiPartQuery, NodePattern,
15
- Pattern, PatternElement, PatternElementChain, PatternPart, ProcedureInvocation,
16
- ProcedureInvocationKind, ProcedureName, ProjectionBody, ProjectionItem, PropertyTypeExpr,
17
- PropertyTypeTerm, Query, QueryPart, RangeLiteral, ReadingClause, RegularQuery,
18
- RelationshipDetail, RelationshipPattern, Remove, RemoveItem, Return, ScalarType, SchemaCommand,
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 the analyzer because the analyzer validates function
4
- //! references at compile time. The executor consults the same
5
- //! `op` strings; drift-safety tests in lora-executor assert that every
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 slots
9
- //! live here too, so analyzer rewrites and executor dispatch share one
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, Merge,
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, HashAggregationExec, LimitExec,
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, ResolvedProjection,
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, ResolvedProjection,
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, ResolvedProjection,
10
- ResolvedQuery, ResolvedRemove, ResolvedReturn, ResolvedSet, ResolvedUnwind, ResolvedWith,
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
 
@@ -53,6 +53,7 @@ fn subtree_contains_blocking_limit_input(plan: &PhysicalPlan, node_id: PhysicalN
53
53
  | PhysicalOp::Merge(_)
54
54
  | PhysicalOp::Delete(_)
55
55
  | PhysicalOp::Set(_)
56
- | PhysicalOp::Remove(_) => true,
56
+ | PhysicalOp::Remove(_)
57
+ | PhysicalOp::Foreach(_) => true,
57
58
  }
58
59
  }