lora-python 0.11.3__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.3 → lora_python-0.11.5}/Cargo.lock +35 -17
  2. {lora_python-0.11.3 → lora_python-0.11.5}/Cargo.toml +15 -12
  3. {lora_python-0.11.3 → lora_python-0.11.5}/PKG-INFO +1 -1
  4. {lora_python-0.11.3 → 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.3 → lora_python-0.11.5}/crates/lora-analyzer/src/analyzer/clauses.rs +47 -2
  7. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-analyzer/src/analyzer/state.rs +1 -0
  8. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-analyzer/src/lib.rs +2 -2
  9. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-analyzer/src/resolved.rs +13 -0
  10. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-ast/src/ast.rs +13 -0
  11. {lora_python-0.11.3 → 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.3/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.3 → lora_python-0.11.5}/crates/lora-compiler/src/lib.rs +4 -4
  15. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-compiler/src/logical.rs +16 -2
  16. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-compiler/src/optimizer.rs +7 -0
  17. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-compiler/src/physical.rs +12 -2
  18. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-compiler/src/plan_tree.rs +6 -0
  19. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-compiler/src/planner.rs +17 -2
  20. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/Cargo.toml +1 -0
  21. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/src/database/execute.rs +3 -1
  22. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/src/database/occ.rs +1 -1
  23. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/src/database/profile.rs +1 -1
  24. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/src/database/pull_mode.rs +2 -1
  25. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/src/database/schema.rs +2 -1
  26. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/src/database/write_guard.rs +3 -1
  27. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/src/transaction.rs +3 -1
  28. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/src/wal/archive/workspace.rs +2 -1
  29. lora_python-0.11.5/crates/lora-database/tests/foreach.rs +209 -0
  30. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/Cargo.toml +1 -0
  31. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/errors.rs +3 -0
  32. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/eval/builtins/geo.rs +29 -2
  33. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/eval/builtins/list.rs +1 -1
  34. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/eval/builtins/math_ns.rs +1 -1
  35. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/eval/builtins/temporal.rs +28 -11
  36. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/executor/helpers.rs +2 -1
  37. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/executor/immutable.rs +3 -1
  38. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/executor/mutable.rs +143 -1
  39. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/profile.rs +2 -1
  40. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/pull/columns.rs +1 -0
  41. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/pull/shape.rs +1 -0
  42. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-parser/src/cypher.pest +14 -2
  43. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-parser/src/parser/clauses.rs +27 -0
  44. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-parser/src/parser/query.rs +3 -2
  45. {lora_python-0.11.3 → lora_python-0.11.5}/pyproject.toml +1 -1
  46. {lora_python-0.11.3 → lora_python-0.11.5}/LICENSE +0 -0
  47. {lora_python-0.11.3 → lora_python-0.11.5}/README.md +0 -0
  48. {lora_python-0.11.3 → lora_python-0.11.5}/crates/bindings/lora-python/.gitignore +0 -0
  49. {lora_python-0.11.3 → lora_python-0.11.5}/crates/bindings/lora-python/Cargo.toml +0 -0
  50. {lora_python-0.11.3 → lora_python-0.11.5}/crates/bindings/lora-python/LICENSE +0 -0
  51. {lora_python-0.11.3 → lora_python-0.11.5}/crates/bindings/lora-python/README.md +0 -0
  52. {lora_python-0.11.3 → lora_python-0.11.5}/crates/bindings/lora-python/build.rs +0 -0
  53. {lora_python-0.11.3 → lora_python-0.11.5}/crates/bindings/lora-python/examples/async_demo.py +0 -0
  54. {lora_python-0.11.3 → lora_python-0.11.5}/crates/bindings/lora-python/examples/basic.py +0 -0
  55. {lora_python-0.11.3 → lora_python-0.11.5}/crates/bindings/lora-python/src/errors.rs +0 -0
  56. {lora_python-0.11.3 → lora_python-0.11.5}/crates/bindings/lora-python/src/from_python.rs +0 -0
  57. {lora_python-0.11.3 → lora_python-0.11.5}/crates/bindings/lora-python/src/lib.rs +0 -0
  58. {lora_python-0.11.3 → lora_python-0.11.5}/crates/bindings/lora-python/src/to_python.rs +0 -0
  59. {lora_python-0.11.3 → lora_python-0.11.5}/crates/bindings/lora-python/tests/test_async.py +0 -0
  60. {lora_python-0.11.3 → lora_python-0.11.5}/crates/bindings/lora-python/tests/test_explain_profile.py +0 -0
  61. {lora_python-0.11.3 → lora_python-0.11.5}/crates/bindings/lora-python/tests/test_sync.py +0 -0
  62. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-analyzer/src/analyzer/expressions.rs +0 -0
  63. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-analyzer/src/analyzer/mod.rs +0 -0
  64. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-analyzer/src/analyzer/patterns.rs +0 -0
  65. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-analyzer/src/analyzer/tests.rs +0 -0
  66. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-analyzer/src/errors.rs +0 -0
  67. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-analyzer/src/scope.rs +0 -0
  68. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-analyzer/src/symbols.rs +0 -0
  69. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-analyzer/tests/error_messages.rs +0 -0
  70. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-ast/Cargo.toml +0 -0
  71. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-compiler/Cargo.toml +0 -0
  72. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-compiler/src/pattern.rs +0 -0
  73. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/benches/README.md +0 -0
  74. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/benches/advanced.rs +0 -0
  75. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/benches/concurrency_guard.rs +0 -0
  76. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/benches/concurrent.rs +0 -0
  77. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/benches/engine.rs +0 -0
  78. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/benches/fixtures.rs +0 -0
  79. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/benches/index_acceleration.rs +0 -0
  80. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/benches/perf_smoke.rs +0 -0
  81. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/benches/perf_smoke_baseline.json +0 -0
  82. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/benches/query_implementations.rs +0 -0
  83. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/benches/realistic.rs +0 -0
  84. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/benches/scale.rs +0 -0
  85. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/benches/temporal_spatial.rs +0 -0
  86. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/benches/wal.rs +0 -0
  87. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/src/database/builder.rs +0 -0
  88. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/src/database/compile.rs +0 -0
  89. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/src/database/explain.rs +0 -0
  90. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/src/database/graph_api.rs +0 -0
  91. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/src/database/mod.rs +0 -0
  92. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/src/database/procedures.rs +0 -0
  93. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/src/database/replay.rs +0 -0
  94. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/src/database/row_projection.rs +0 -0
  95. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/src/database/show_pipeline.rs +0 -0
  96. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/src/database/stream.rs +0 -0
  97. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/src/durable_io.rs +0 -0
  98. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/src/error.rs +0 -0
  99. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/src/explain.rs +0 -0
  100. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/src/lib.rs +0 -0
  101. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/src/live_store.rs +0 -0
  102. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/src/named.rs +0 -0
  103. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/src/plan_cache.rs +0 -0
  104. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/src/snapshot/json.rs +0 -0
  105. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/src/snapshot/mod.rs +0 -0
  106. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/src/snapshot/store.rs +0 -0
  107. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/src/stream.rs +0 -0
  108. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/src/wal/admin.rs +0 -0
  109. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/src/wal/archive/format.rs +0 -0
  110. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/src/wal/archive/lock.rs +0 -0
  111. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/src/wal/archive/platform.rs +0 -0
  112. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/src/wal/archive/worker.rs +0 -0
  113. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/src/wal/archive.rs +0 -0
  114. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/src/wal/mod.rs +0 -0
  115. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/src/wal/write_scope.rs +0 -0
  116. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/tests/advanced_queries.rs +0 -0
  117. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/tests/aggregation.rs +0 -0
  118. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/tests/backend_stub.rs +0 -0
  119. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/tests/binary.rs +0 -0
  120. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/tests/builtin_namespaces.rs +0 -0
  121. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/tests/constraints.rs +0 -0
  122. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/tests/create.rs +0 -0
  123. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/tests/docs_examples.rs +0 -0
  124. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/tests/error_messages.rs +0 -0
  125. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/tests/errors.rs +0 -0
  126. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/tests/explain_profile.rs +0 -0
  127. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/tests/expressions.rs +0 -0
  128. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/tests/fulltext_index.rs +0 -0
  129. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/tests/functions_extended.rs +0 -0
  130. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/tests/index_acceleration.rs +0 -0
  131. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/tests/invariants.rs +0 -0
  132. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/tests/managed_snapshots.rs +0 -0
  133. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/tests/match.rs +0 -0
  134. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/tests/merge.rs +0 -0
  135. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/tests/ordering.rs +0 -0
  136. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/tests/parameters.rs +0 -0
  137. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/tests/parser.rs +0 -0
  138. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/tests/paths.rs +0 -0
  139. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/tests/projection.rs +0 -0
  140. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/tests/scale.rs +0 -0
  141. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/tests/schema.rs +0 -0
  142. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/tests/seeds.rs +0 -0
  143. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/tests/snapshot.rs +0 -0
  144. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/tests/spatial.rs +0 -0
  145. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/tests/temporal.rs +0 -0
  146. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/tests/test_helpers.rs +0 -0
  147. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/tests/transactions.rs +0 -0
  148. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/tests/types_advanced.rs +0 -0
  149. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/tests/union.rs +0 -0
  150. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/tests/unwind_ingestion.rs +0 -0
  151. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/tests/update.rs +0 -0
  152. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/tests/vector_index.rs +0 -0
  153. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/tests/vectors.rs +0 -0
  154. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/tests/wal.rs +0 -0
  155. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/tests/where_clause.rs +0 -0
  156. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-database/tests/with.rs +0 -0
  157. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/eval/binops.rs +0 -0
  158. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/eval/builtins/bits_ns.rs +0 -0
  159. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/eval/builtins/bytes_ns.rs +0 -0
  160. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/eval/builtins/cast_ns.rs +0 -0
  161. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/eval/builtins/crypto.rs +0 -0
  162. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/eval/builtins/edge.rs +0 -0
  163. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/eval/builtins/json_ns.rs +0 -0
  164. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/eval/builtins/map_ns.rs +0 -0
  165. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/eval/builtins/mod.rs +0 -0
  166. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/eval/builtins/node.rs +0 -0
  167. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/eval/builtins/number.rs +0 -0
  168. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/eval/builtins/path.rs +0 -0
  169. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/eval/builtins/string_ns.rs +0 -0
  170. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/eval/builtins/text.rs +0 -0
  171. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/eval/builtins/type_ns.rs +0 -0
  172. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/eval/builtins/uuid_ns.rs +0 -0
  173. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/eval/builtins/value.rs +0 -0
  174. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/eval/builtins/vector_ns.rs +0 -0
  175. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/eval/errors.rs +0 -0
  176. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/eval/expr.rs +0 -0
  177. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/eval/functions.rs +0 -0
  178. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/eval/mod.rs +0 -0
  179. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/eval/point.rs +0 -0
  180. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/eval/regex.rs +0 -0
  181. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/eval/vector.rs +0 -0
  182. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/executor/aggregation.rs +0 -0
  183. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/executor/mod.rs +0 -0
  184. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/executor/optional.rs +0 -0
  185. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/executor/sort.rs +0 -0
  186. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/lib.rs +0 -0
  187. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/pull/aggregate.rs +0 -0
  188. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/pull/call_subquery.rs +0 -0
  189. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/pull/context.rs +0 -0
  190. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/pull/expand.rs +0 -0
  191. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/pull/filter.rs +0 -0
  192. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/pull/hydration.rs +0 -0
  193. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/pull/mod.rs +0 -0
  194. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/pull/mutable.rs +0 -0
  195. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/pull/optional.rs +0 -0
  196. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/pull/path.rs +0 -0
  197. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/pull/projection.rs +0 -0
  198. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/pull/scan.rs +0 -0
  199. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/pull/sort.rs +0 -0
  200. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/pull/source.rs +0 -0
  201. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/pull/tests.rs +0 -0
  202. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/pull/traits.rs +0 -0
  203. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/pull/union.rs +0 -0
  204. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/src/value.rs +0 -0
  205. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-executor/tests/error_messages.rs +0 -0
  206. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-parser/Cargo.toml +0 -0
  207. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-parser/src/errors.rs +0 -0
  208. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-parser/src/lib.rs +0 -0
  209. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-parser/src/parser/expressions.rs +0 -0
  210. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-parser/src/parser/literals.rs +0 -0
  211. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-parser/src/parser/mod.rs +0 -0
  212. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-parser/src/parser/patterns.rs +0 -0
  213. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-parser/src/parser/schema.rs +0 -0
  214. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-parser/src/parser/tests.rs +0 -0
  215. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-parser/src/parser/util.rs +0 -0
  216. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-parser/tests/error_messages.rs +0 -0
  217. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-snapshot/Cargo.toml +0 -0
  218. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-snapshot/src/body.rs +0 -0
  219. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-snapshot/src/codec.rs +0 -0
  220. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-snapshot/src/columnar.rs +0 -0
  221. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-snapshot/src/envelope.rs +0 -0
  222. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-snapshot/src/errors.rs +0 -0
  223. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-snapshot/src/format.rs +0 -0
  224. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-snapshot/src/lib.rs +0 -0
  225. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-snapshot/src/options.rs +0 -0
  226. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-snapshot/src/tests.rs +0 -0
  227. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-snapshot/src/transform.rs +0 -0
  228. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-snapshot/src/view.rs +0 -0
  229. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-snapshot/tests/error_messages.rs +0 -0
  230. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-store/Cargo.toml +0 -0
  231. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-store/src/codec.rs +0 -0
  232. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-store/src/lib.rs +0 -0
  233. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-store/src/lock_table.rs +0 -0
  234. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-store/src/memory/constraint_catalog.rs +0 -0
  235. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-store/src/memory/constraint_enforce.rs +0 -0
  236. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-store/src/memory/entity_index_store.rs +0 -0
  237. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-store/src/memory/fulltext_index.rs +0 -0
  238. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-store/src/memory/graph.rs +0 -0
  239. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-store/src/memory/impls.rs +0 -0
  240. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-store/src/memory/index_catalog.rs +0 -0
  241. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-store/src/memory/mod.rs +0 -0
  242. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-store/src/memory/point_index.rs +0 -0
  243. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-store/src/memory/property_index.rs +0 -0
  244. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-store/src/memory/secondary_index_maintenance.rs +0 -0
  245. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-store/src/memory/snapshot.rs +0 -0
  246. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-store/src/memory/sorted_property_index.rs +0 -0
  247. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-store/src/memory/stats.rs +0 -0
  248. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-store/src/memory/tests.rs +0 -0
  249. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-store/src/memory/text_index.rs +0 -0
  250. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-store/src/mutation.rs +0 -0
  251. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-store/src/snapshot.rs +0 -0
  252. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-store/src/traits.rs +0 -0
  253. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-store/src/types/binary/mod.rs +0 -0
  254. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-store/src/types/binary/tests.rs +0 -0
  255. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-store/src/types/binary/traits.rs +0 -0
  256. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-store/src/types/binary/types.rs +0 -0
  257. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-store/src/types/graph.rs +0 -0
  258. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-store/src/types/mod.rs +0 -0
  259. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-store/src/types/property_value.rs +0 -0
  260. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-store/src/types/spatial/distance.rs +0 -0
  261. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-store/src/types/spatial/mod.rs +0 -0
  262. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-store/src/types/spatial/point.rs +0 -0
  263. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-store/src/types/spatial/srid.rs +0 -0
  264. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-store/src/types/spatial/tests.rs +0 -0
  265. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-store/src/types/temporal/calendar.rs +0 -0
  266. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-store/src/types/temporal/date.rs +0 -0
  267. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-store/src/types/temporal/datetime.rs +0 -0
  268. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-store/src/types/temporal/duration.rs +0 -0
  269. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-store/src/types/temporal/format.rs +0 -0
  270. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-store/src/types/temporal/mod.rs +0 -0
  271. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-store/src/types/temporal/parsing.rs +0 -0
  272. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-store/src/types/temporal/time.rs +0 -0
  273. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-store/src/types/vector/build.rs +0 -0
  274. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-store/src/types/vector/mod.rs +0 -0
  275. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-store/src/types/vector/similarity.rs +0 -0
  276. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-store/src/types/vector/tests.rs +0 -0
  277. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-store/src/types/vector/types.rs +0 -0
  278. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-store/tests/error_messages.rs +0 -0
  279. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-wal/Cargo.toml +0 -0
  280. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-wal/src/codec/decode.rs +0 -0
  281. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-wal/src/codec/encode.rs +0 -0
  282. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-wal/src/codec/format.rs +0 -0
  283. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-wal/src/codec/mod.rs +0 -0
  284. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-wal/src/codec/tests.rs +0 -0
  285. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-wal/src/config.rs +0 -0
  286. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-wal/src/dir.rs +0 -0
  287. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-wal/src/errors.rs +0 -0
  288. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-wal/src/io.rs +0 -0
  289. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-wal/src/lib.rs +0 -0
  290. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-wal/src/lock.rs +0 -0
  291. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-wal/src/lsn.rs +0 -0
  292. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-wal/src/record.rs +0 -0
  293. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-wal/src/recorder/errors.rs +0 -0
  294. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-wal/src/recorder/mirror.rs +0 -0
  295. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-wal/src/recorder/mod.rs +0 -0
  296. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-wal/src/recorder/recorder.rs +0 -0
  297. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-wal/src/recorder/tests.rs +0 -0
  298. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-wal/src/replay.rs +0 -0
  299. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-wal/src/segment.rs +0 -0
  300. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-wal/src/testing.rs +0 -0
  301. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-wal/src/wal/group_flusher.rs +0 -0
  302. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-wal/src/wal/mod.rs +0 -0
  303. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-wal/src/wal/tests.rs +0 -0
  304. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-wal/src/wal/wal.rs +0 -0
  305. {lora_python-0.11.3 → lora_python-0.11.5}/crates/lora-wal/tests/error_messages.rs +0 -0
  306. {lora_python-0.11.3 → lora_python-0.11.5}/python/lora_python/__init__.py +0 -0
  307. {lora_python-0.11.3 → lora_python-0.11.5}/python/lora_python/_async.py +0 -0
  308. {lora_python-0.11.3 → lora_python-0.11.5}/python/lora_python/_native.pyi +0 -0
  309. {lora_python-0.11.3 → lora_python-0.11.5}/python/lora_python/py.typed +0 -0
  310. {lora_python-0.11.3 → 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.3"
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.3"
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.3"
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.3"
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.3"
815
+ version = "0.11.5"
811
816
  dependencies = [
812
817
  "anyhow",
813
818
  "chacha20poly1305",
@@ -826,11 +831,12 @@ dependencies = [
826
831
  "serde_json",
827
832
  "thiserror",
828
833
  "tracing",
834
+ "web-time",
829
835
  ]
830
836
 
831
837
  [[package]]
832
838
  name = "lora-executor"
833
- version = "0.11.3"
839
+ version = "0.11.5"
834
840
  dependencies = [
835
841
  "blake3",
836
842
  "crc32fast",
@@ -848,11 +854,12 @@ dependencies = [
848
854
  "thiserror",
849
855
  "tracing",
850
856
  "unicode-normalization",
857
+ "web-time",
851
858
  ]
852
859
 
853
860
  [[package]]
854
861
  name = "lora-ffi"
855
- version = "0.11.3"
862
+ version = "0.11.5"
856
863
  dependencies = [
857
864
  "anyhow",
858
865
  "lora-binding-buffer",
@@ -864,7 +871,7 @@ dependencies = [
864
871
 
865
872
  [[package]]
866
873
  name = "lora-node"
867
- version = "0.11.3"
874
+ version = "0.11.5"
868
875
  dependencies = [
869
876
  "anyhow",
870
877
  "lora-binding-buffer",
@@ -879,7 +886,7 @@ dependencies = [
879
886
 
880
887
  [[package]]
881
888
  name = "lora-parser"
882
- version = "0.11.3"
889
+ version = "0.11.5"
883
890
  dependencies = [
884
891
  "lora-ast",
885
892
  "pest",
@@ -890,7 +897,7 @@ dependencies = [
890
897
 
891
898
  [[package]]
892
899
  name = "lora-python"
893
- version = "0.11.3"
900
+ version = "0.11.5"
894
901
  dependencies = [
895
902
  "anyhow",
896
903
  "lora-database",
@@ -902,11 +909,12 @@ dependencies = [
902
909
 
903
910
  [[package]]
904
911
  name = "lora-query-wasm"
905
- version = "0.11.3"
912
+ version = "0.11.5"
906
913
  dependencies = [
907
914
  "console_error_panic_hook",
908
915
  "js-sys",
909
916
  "lora-ast",
917
+ "lora-builtins-meta",
910
918
  "lora-parser",
911
919
  "serde",
912
920
  "serde-wasm-bindgen",
@@ -915,7 +923,7 @@ dependencies = [
915
923
 
916
924
  [[package]]
917
925
  name = "lora-server"
918
- version = "0.11.3"
926
+ version = "0.11.5"
919
927
  dependencies = [
920
928
  "anyhow",
921
929
  "axum",
@@ -929,7 +937,7 @@ dependencies = [
929
937
 
930
938
  [[package]]
931
939
  name = "lora-snapshot"
932
- version = "0.11.3"
940
+ version = "0.11.5"
933
941
  dependencies = [
934
942
  "argon2",
935
943
  "blake3",
@@ -943,7 +951,7 @@ dependencies = [
943
951
 
944
952
  [[package]]
945
953
  name = "lora-store"
946
- version = "0.11.3"
954
+ version = "0.11.5"
947
955
  dependencies = [
948
956
  "crc32fast",
949
957
  "js-sys",
@@ -954,7 +962,7 @@ dependencies = [
954
962
 
955
963
  [[package]]
956
964
  name = "lora-wal"
957
- version = "0.11.3"
965
+ version = "0.11.5"
958
966
  dependencies = [
959
967
  "crc32fast",
960
968
  "lora-store",
@@ -964,7 +972,7 @@ dependencies = [
964
972
 
965
973
  [[package]]
966
974
  name = "lora-wasm"
967
- version = "0.11.3"
975
+ version = "0.11.5"
968
976
  dependencies = [
969
977
  "anyhow",
970
978
  "console_error_panic_hook",
@@ -980,7 +988,7 @@ dependencies = [
980
988
 
981
989
  [[package]]
982
990
  name = "lora_ruby"
983
- version = "0.11.3"
991
+ version = "0.11.5"
984
992
  dependencies = [
985
993
  "anyhow",
986
994
  "lora-database",
@@ -1932,6 +1940,16 @@ dependencies = [
1932
1940
  "wasm-bindgen",
1933
1941
  ]
1934
1942
 
1943
+ [[package]]
1944
+ name = "web-time"
1945
+ version = "1.1.0"
1946
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1947
+ checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb"
1948
+ dependencies = [
1949
+ "js-sys",
1950
+ "wasm-bindgen",
1951
+ ]
1952
+
1935
1953
  [[package]]
1936
1954
  name = "winapi"
1937
1955
  version = "0.3.9"
@@ -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.3"
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.3" }
19
- lora-parser = { path = "crates/lora-parser", version = "=0.11.3" }
20
- lora-analyzer = { path = "crates/lora-analyzer", version = "=0.11.3" }
21
- lora-compiler = { path = "crates/lora-compiler", version = "=0.11.3" }
22
- lora-store = { path = "crates/lora-store", version = "=0.11.3" }
23
- lora-snapshot = { path = "crates/lora-snapshot", version = "=0.11.3", default-features = false }
24
- lora-wal = { path = "crates/lora-wal", version = "=0.11.3" }
25
- lora-executor = { path = "crates/lora-executor", version = "=0.11.3", default-features = false }
26
- lora-database = { path = "crates/lora-database", version = "=0.11.3" }
27
- lora-binding-buffer = { path = "crates/bindings/lora-binding-buffer", version = "=0.11.3" }
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"
@@ -48,3 +49,5 @@ getrandom = "0.2"
48
49
  argon2 = "0.5"
49
50
  flate2 = "1"
50
51
  rayon = "1"
52
+
53
+ web-time = "1"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lora-python
3
- Version: 0.11.3
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
 
@@ -40,6 +40,7 @@ lora-wal.workspace = true
40
40
 
41
41
  serde_json.workspace = true
42
42
  tracing.workspace = true
43
+ web-time.workspace = true
43
44
 
44
45
  [dev-dependencies]
45
46
  criterion.workspace = true