lora-python 0.12.0__tar.gz → 0.14.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (326) hide show
  1. {lora_python-0.12.0 → lora_python-0.14.0}/Cargo.lock +31 -18
  2. {lora_python-0.12.0 → lora_python-0.14.0}/Cargo.toml +15 -14
  3. {lora_python-0.12.0 → lora_python-0.14.0}/PKG-INFO +1 -1
  4. {lora_python-0.12.0 → lora_python-0.14.0}/crates/bindings/lora-python/src/errors.rs +10 -2
  5. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-analyzer/src/analyzer/clauses.rs +5 -0
  6. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-analyzer/src/analyzer/state.rs +15 -2
  7. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-analyzer/src/analyzer/tests.rs +36 -0
  8. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/Cargo.toml +5 -0
  9. lora_python-0.14.0/crates/lora-database/benches/memory.rs +162 -0
  10. lora_python-0.14.0/crates/lora-database/benches/memory_baseline.json +66 -0
  11. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/src/database/execute.rs +3 -4
  12. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/src/database/graph_api.rs +12 -8
  13. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/src/database/mod.rs +42 -13
  14. lora_python-0.14.0/crates/lora-database/src/database/occ.rs +151 -0
  15. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/src/database/procedures.rs +87 -54
  16. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/src/database/row_projection.rs +5 -2
  17. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/src/database/schema.rs +126 -52
  18. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/src/database/write_guard.rs +80 -61
  19. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/src/error.rs +343 -17
  20. lora_python-0.14.0/crates/lora-database/src/io.rs +338 -0
  21. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/src/lib.rs +13 -1
  22. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/src/live_store.rs +4 -0
  23. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/src/snapshot/mod.rs +7 -3
  24. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/src/stream.rs +4 -4
  25. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/tests/backend_stub.rs +8 -4
  26. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/tests/constraints.rs +24 -1
  27. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/tests/errors.rs +23 -0
  28. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/tests/schema.rs +1 -0
  29. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/tests/transactions.rs +78 -3
  30. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/tests/vector_index.rs +4 -0
  31. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/tests/wal.rs +47 -40
  32. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/errors.rs +3 -0
  33. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/builtins/edge.rs +2 -2
  34. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/builtins/list.rs +81 -16
  35. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/builtins/math_ns.rs +19 -1
  36. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/builtins/node.rs +2 -2
  37. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/builtins/number.rs +1 -1
  38. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/builtins/temporal.rs +3 -1
  39. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/builtins/value.rs +4 -4
  40. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/expr.rs +6 -4
  41. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/executor/helpers.rs +23 -6
  42. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/executor/mutable.rs +123 -24
  43. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/pull/call_subquery.rs +6 -5
  44. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/pull/expand.rs +1 -1
  45. lora_python-0.14.0/crates/lora-io/Cargo.toml +23 -0
  46. lora_python-0.14.0/crates/lora-io/src/csv.rs +1171 -0
  47. lora_python-0.14.0/crates/lora-io/src/format.rs +259 -0
  48. lora_python-0.14.0/crates/lora-io/src/json_array.rs +588 -0
  49. lora_python-0.14.0/crates/lora-io/src/jsonl.rs +379 -0
  50. lora_python-0.14.0/crates/lora-io/src/lib.rs +33 -0
  51. lora_python-0.14.0/crates/lora-io/src/mapping.rs +311 -0
  52. lora_python-0.14.0/crates/lora-io/src/value_json.rs +336 -0
  53. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-snapshot/src/columnar.rs +38 -16
  54. lora_python-0.14.0/crates/lora-store/src/intern.rs +136 -0
  55. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-store/src/lib.rs +15 -0
  56. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-store/src/memory/fulltext_index.rs +3 -3
  57. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-store/src/memory/graph.rs +18 -16
  58. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-store/src/memory/hnsw.rs +24 -13
  59. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-store/src/memory/impls.rs +30 -9
  60. lora_python-0.14.0/crates/lora-store/src/memory/mem_report.rs +568 -0
  61. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-store/src/memory/mod.rs +2 -0
  62. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-store/src/memory/point_index.rs +3 -3
  63. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-store/src/memory/secondary_index_maintenance.rs +1 -1
  64. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-store/src/memory/sorted_property_index.rs +2 -2
  65. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-store/src/memory/tests.rs +1 -1
  66. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-store/src/memory/text_index.rs +2 -2
  67. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-store/src/memory/vector_index.rs +2 -2
  68. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-store/src/traits.rs +29 -9
  69. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-store/src/types/graph.rs +15 -1
  70. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-wal/src/codec/decode.rs +1 -1
  71. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-wal/src/codec/tests.rs +5 -1
  72. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-wal/src/dir.rs +1 -2
  73. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-wal/src/lsn.rs +9 -8
  74. {lora_python-0.12.0 → lora_python-0.14.0}/pyproject.toml +1 -1
  75. lora_python-0.12.0/crates/lora-database/src/database/occ.rs +0 -52
  76. {lora_python-0.12.0 → lora_python-0.14.0}/LICENSE +0 -0
  77. {lora_python-0.12.0 → lora_python-0.14.0}/README.md +0 -0
  78. {lora_python-0.12.0 → lora_python-0.14.0}/crates/bindings/lora-python/.gitignore +0 -0
  79. {lora_python-0.12.0 → lora_python-0.14.0}/crates/bindings/lora-python/Cargo.toml +0 -0
  80. {lora_python-0.12.0 → lora_python-0.14.0}/crates/bindings/lora-python/LICENSE +0 -0
  81. {lora_python-0.12.0 → lora_python-0.14.0}/crates/bindings/lora-python/README.md +0 -0
  82. {lora_python-0.12.0 → lora_python-0.14.0}/crates/bindings/lora-python/build.rs +0 -0
  83. {lora_python-0.12.0 → lora_python-0.14.0}/crates/bindings/lora-python/examples/async_demo.py +0 -0
  84. {lora_python-0.12.0 → lora_python-0.14.0}/crates/bindings/lora-python/examples/basic.py +0 -0
  85. {lora_python-0.12.0 → lora_python-0.14.0}/crates/bindings/lora-python/src/from_python.rs +0 -0
  86. {lora_python-0.12.0 → lora_python-0.14.0}/crates/bindings/lora-python/src/lib.rs +0 -0
  87. {lora_python-0.12.0 → lora_python-0.14.0}/crates/bindings/lora-python/src/to_python.rs +0 -0
  88. {lora_python-0.12.0 → lora_python-0.14.0}/crates/bindings/lora-python/tests/test_async.py +0 -0
  89. {lora_python-0.12.0 → lora_python-0.14.0}/crates/bindings/lora-python/tests/test_explain_profile.py +0 -0
  90. {lora_python-0.12.0 → lora_python-0.14.0}/crates/bindings/lora-python/tests/test_sync.py +0 -0
  91. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-analyzer/Cargo.toml +0 -0
  92. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-analyzer/src/analyzer/builtin_signatures.rs +0 -0
  93. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-analyzer/src/analyzer/expressions.rs +0 -0
  94. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-analyzer/src/analyzer/mod.rs +0 -0
  95. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-analyzer/src/analyzer/patterns.rs +0 -0
  96. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-analyzer/src/errors.rs +0 -0
  97. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-analyzer/src/lib.rs +0 -0
  98. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-analyzer/src/resolved.rs +0 -0
  99. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-analyzer/src/scope.rs +0 -0
  100. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-analyzer/src/symbols.rs +0 -0
  101. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-analyzer/tests/error_messages.rs +0 -0
  102. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-ast/Cargo.toml +0 -0
  103. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-ast/src/ast.rs +0 -0
  104. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-ast/src/lib.rs +0 -0
  105. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-builtins-meta/Cargo.toml +0 -0
  106. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-builtins-meta/src/lib.rs +0 -0
  107. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-compiler/Cargo.toml +0 -0
  108. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-compiler/src/lib.rs +0 -0
  109. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-compiler/src/logical.rs +0 -0
  110. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-compiler/src/optimizer.rs +0 -0
  111. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-compiler/src/pattern.rs +0 -0
  112. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-compiler/src/physical.rs +0 -0
  113. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-compiler/src/plan_tree.rs +0 -0
  114. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-compiler/src/planner.rs +0 -0
  115. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/benches/README.md +0 -0
  116. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/benches/advanced.rs +0 -0
  117. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/benches/concurrency_guard.rs +0 -0
  118. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/benches/concurrent.rs +0 -0
  119. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/benches/engine.rs +0 -0
  120. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/benches/fixtures.rs +0 -0
  121. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/benches/index_acceleration.rs +0 -0
  122. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/benches/perf_smoke.rs +0 -0
  123. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/benches/perf_smoke_baseline.json +0 -0
  124. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/benches/query_implementations.rs +0 -0
  125. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/benches/realistic.rs +0 -0
  126. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/benches/scale.rs +0 -0
  127. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/benches/temporal_spatial.rs +0 -0
  128. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/benches/wal.rs +0 -0
  129. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/src/database/builder.rs +0 -0
  130. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/src/database/compile.rs +0 -0
  131. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/src/database/explain.rs +0 -0
  132. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/src/database/profile.rs +0 -0
  133. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/src/database/pull_mode.rs +0 -0
  134. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/src/database/replay.rs +0 -0
  135. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/src/database/show_pipeline.rs +0 -0
  136. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/src/database/stream.rs +0 -0
  137. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/src/durable_io.rs +0 -0
  138. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/src/explain.rs +0 -0
  139. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/src/named.rs +0 -0
  140. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/src/plan_cache.rs +0 -0
  141. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/src/snapshot/json.rs +0 -0
  142. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/src/snapshot/store.rs +0 -0
  143. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/src/transaction.rs +0 -0
  144. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/src/wal/admin.rs +0 -0
  145. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/src/wal/archive/format.rs +0 -0
  146. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/src/wal/archive/lock.rs +0 -0
  147. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/src/wal/archive/platform.rs +0 -0
  148. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/src/wal/archive/worker.rs +0 -0
  149. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/src/wal/archive/workspace.rs +0 -0
  150. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/src/wal/archive.rs +0 -0
  151. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/src/wal/mod.rs +0 -0
  152. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/src/wal/write_scope.rs +0 -0
  153. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/tests/advanced_queries.rs +0 -0
  154. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/tests/aggregation.rs +0 -0
  155. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/tests/binary.rs +0 -0
  156. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/tests/builtin_namespaces.rs +0 -0
  157. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/tests/create.rs +0 -0
  158. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/tests/docs_examples.rs +0 -0
  159. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/tests/error_messages.rs +0 -0
  160. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/tests/explain_profile.rs +0 -0
  161. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/tests/expressions.rs +0 -0
  162. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/tests/foreach.rs +0 -0
  163. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/tests/fulltext_index.rs +0 -0
  164. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/tests/functions_extended.rs +0 -0
  165. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/tests/index_acceleration.rs +0 -0
  166. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/tests/invariants.rs +0 -0
  167. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/tests/managed_snapshots.rs +0 -0
  168. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/tests/match.rs +0 -0
  169. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/tests/merge.rs +0 -0
  170. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/tests/ordering.rs +0 -0
  171. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/tests/parameters.rs +0 -0
  172. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/tests/parser.rs +0 -0
  173. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/tests/paths.rs +0 -0
  174. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/tests/projection.rs +0 -0
  175. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/tests/scale.rs +0 -0
  176. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/tests/seeds.rs +0 -0
  177. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/tests/snapshot.rs +0 -0
  178. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/tests/spatial.rs +0 -0
  179. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/tests/temporal.rs +0 -0
  180. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/tests/test_helpers.rs +0 -0
  181. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/tests/types_advanced.rs +0 -0
  182. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/tests/union.rs +0 -0
  183. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/tests/unwind_ingestion.rs +0 -0
  184. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/tests/update.rs +0 -0
  185. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/tests/vectors.rs +0 -0
  186. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/tests/where_clause.rs +0 -0
  187. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-database/tests/with.rs +0 -0
  188. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/Cargo.toml +0 -0
  189. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/binops.rs +0 -0
  190. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/builtins/bits_ns.rs +0 -0
  191. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/builtins/bytes_ns.rs +0 -0
  192. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/builtins/cast_ns.rs +0 -0
  193. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/builtins/crypto.rs +0 -0
  194. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/builtins/geo.rs +0 -0
  195. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/builtins/json_ns.rs +0 -0
  196. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/builtins/map_ns.rs +0 -0
  197. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/builtins/mod.rs +0 -0
  198. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/builtins/path.rs +0 -0
  199. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/builtins/string_ns.rs +0 -0
  200. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/builtins/text.rs +0 -0
  201. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/builtins/type_ns.rs +0 -0
  202. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/builtins/uuid_ns.rs +0 -0
  203. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/builtins/vector_ns.rs +0 -0
  204. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/errors.rs +0 -0
  205. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/functions.rs +0 -0
  206. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/mod.rs +0 -0
  207. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/point.rs +0 -0
  208. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/regex.rs +0 -0
  209. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/vector.rs +0 -0
  210. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/executor/aggregation.rs +0 -0
  211. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/executor/immutable.rs +0 -0
  212. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/executor/mod.rs +0 -0
  213. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/executor/optional.rs +0 -0
  214. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/executor/sort.rs +0 -0
  215. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/lib.rs +0 -0
  216. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/profile.rs +0 -0
  217. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/pull/aggregate.rs +0 -0
  218. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/pull/columns.rs +0 -0
  219. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/pull/context.rs +0 -0
  220. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/pull/filter.rs +0 -0
  221. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/pull/hydration.rs +0 -0
  222. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/pull/mod.rs +0 -0
  223. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/pull/mutable.rs +0 -0
  224. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/pull/optional.rs +0 -0
  225. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/pull/path.rs +0 -0
  226. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/pull/projection.rs +0 -0
  227. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/pull/scan.rs +0 -0
  228. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/pull/shape.rs +0 -0
  229. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/pull/sort.rs +0 -0
  230. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/pull/source.rs +0 -0
  231. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/pull/tests.rs +0 -0
  232. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/pull/traits.rs +0 -0
  233. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/pull/union.rs +0 -0
  234. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/src/value.rs +0 -0
  235. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-executor/tests/error_messages.rs +0 -0
  236. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-parser/Cargo.toml +0 -0
  237. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-parser/src/cypher.pest +0 -0
  238. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-parser/src/errors.rs +0 -0
  239. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-parser/src/lib.rs +0 -0
  240. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-parser/src/parser/clauses.rs +0 -0
  241. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-parser/src/parser/expressions.rs +0 -0
  242. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-parser/src/parser/literals.rs +0 -0
  243. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-parser/src/parser/mod.rs +0 -0
  244. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-parser/src/parser/patterns.rs +0 -0
  245. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-parser/src/parser/query.rs +0 -0
  246. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-parser/src/parser/schema.rs +0 -0
  247. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-parser/src/parser/tests.rs +0 -0
  248. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-parser/src/parser/util.rs +0 -0
  249. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-parser/tests/error_messages.rs +0 -0
  250. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-snapshot/Cargo.toml +0 -0
  251. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-snapshot/src/body.rs +0 -0
  252. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-snapshot/src/codec.rs +0 -0
  253. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-snapshot/src/envelope.rs +0 -0
  254. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-snapshot/src/errors.rs +0 -0
  255. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-snapshot/src/format.rs +0 -0
  256. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-snapshot/src/lib.rs +0 -0
  257. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-snapshot/src/options.rs +0 -0
  258. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-snapshot/src/tests.rs +0 -0
  259. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-snapshot/src/transform.rs +0 -0
  260. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-snapshot/src/view.rs +0 -0
  261. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-snapshot/tests/error_messages.rs +0 -0
  262. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-store/Cargo.toml +0 -0
  263. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-store/src/codec.rs +0 -0
  264. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-store/src/lock_table.rs +0 -0
  265. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-store/src/memory/constraint_catalog.rs +0 -0
  266. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-store/src/memory/constraint_enforce.rs +0 -0
  267. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-store/src/memory/entity_index_store.rs +0 -0
  268. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-store/src/memory/index_catalog.rs +0 -0
  269. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-store/src/memory/property_index.rs +0 -0
  270. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-store/src/memory/snapshot.rs +0 -0
  271. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-store/src/memory/stats.rs +0 -0
  272. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-store/src/mutation.rs +0 -0
  273. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-store/src/snapshot.rs +0 -0
  274. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-store/src/types/binary/mod.rs +0 -0
  275. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-store/src/types/binary/tests.rs +0 -0
  276. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-store/src/types/binary/traits.rs +0 -0
  277. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-store/src/types/binary/types.rs +0 -0
  278. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-store/src/types/mod.rs +0 -0
  279. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-store/src/types/property_value.rs +0 -0
  280. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-store/src/types/spatial/distance.rs +0 -0
  281. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-store/src/types/spatial/mod.rs +0 -0
  282. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-store/src/types/spatial/point.rs +0 -0
  283. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-store/src/types/spatial/srid.rs +0 -0
  284. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-store/src/types/spatial/tests.rs +0 -0
  285. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-store/src/types/temporal/calendar.rs +0 -0
  286. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-store/src/types/temporal/date.rs +0 -0
  287. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-store/src/types/temporal/datetime.rs +0 -0
  288. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-store/src/types/temporal/duration.rs +0 -0
  289. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-store/src/types/temporal/format.rs +0 -0
  290. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-store/src/types/temporal/mod.rs +0 -0
  291. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-store/src/types/temporal/parsing.rs +0 -0
  292. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-store/src/types/temporal/time.rs +0 -0
  293. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-store/src/types/vector/build.rs +0 -0
  294. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-store/src/types/vector/mod.rs +0 -0
  295. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-store/src/types/vector/similarity.rs +0 -0
  296. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-store/src/types/vector/tests.rs +0 -0
  297. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-store/src/types/vector/types.rs +0 -0
  298. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-store/tests/error_messages.rs +0 -0
  299. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-wal/Cargo.toml +0 -0
  300. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-wal/src/codec/encode.rs +0 -0
  301. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-wal/src/codec/format.rs +0 -0
  302. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-wal/src/codec/mod.rs +0 -0
  303. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-wal/src/config.rs +0 -0
  304. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-wal/src/errors.rs +0 -0
  305. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-wal/src/io.rs +0 -0
  306. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-wal/src/lib.rs +0 -0
  307. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-wal/src/lock.rs +0 -0
  308. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-wal/src/record.rs +0 -0
  309. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-wal/src/recorder/errors.rs +0 -0
  310. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-wal/src/recorder/mirror.rs +0 -0
  311. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-wal/src/recorder/mod.rs +0 -0
  312. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-wal/src/recorder/recorder.rs +0 -0
  313. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-wal/src/recorder/tests.rs +0 -0
  314. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-wal/src/replay.rs +0 -0
  315. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-wal/src/segment.rs +0 -0
  316. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-wal/src/testing.rs +0 -0
  317. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-wal/src/wal/group_flusher.rs +0 -0
  318. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-wal/src/wal/mod.rs +0 -0
  319. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-wal/src/wal/tests.rs +0 -0
  320. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-wal/src/wal/wal.rs +0 -0
  321. {lora_python-0.12.0 → lora_python-0.14.0}/crates/lora-wal/tests/error_messages.rs +0 -0
  322. {lora_python-0.12.0 → lora_python-0.14.0}/python/lora_python/__init__.py +0 -0
  323. {lora_python-0.12.0 → lora_python-0.14.0}/python/lora_python/_async.py +0 -0
  324. {lora_python-0.12.0 → lora_python-0.14.0}/python/lora_python/_native.pyi +0 -0
  325. {lora_python-0.12.0 → lora_python-0.14.0}/python/lora_python/py.typed +0 -0
  326. {lora_python-0.12.0 → lora_python-0.14.0}/python/lora_python/types.py +0 -0
@@ -773,7 +773,7 @@ checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897"
773
773
 
774
774
  [[package]]
775
775
  name = "lora-analyzer"
776
- version = "0.12.0"
776
+ version = "0.14.0"
777
777
  dependencies = [
778
778
  "lora-ast",
779
779
  "lora-builtins-meta",
@@ -784,14 +784,14 @@ dependencies = [
784
784
 
785
785
  [[package]]
786
786
  name = "lora-ast"
787
- version = "0.12.0"
787
+ version = "0.14.0"
788
788
  dependencies = [
789
789
  "smallvec 2.0.0-alpha.12",
790
790
  ]
791
791
 
792
792
  [[package]]
793
793
  name = "lora-binding-buffer"
794
- version = "0.12.0"
794
+ version = "0.14.0"
795
795
  dependencies = [
796
796
  "lora-database",
797
797
  "lora-store",
@@ -799,11 +799,11 @@ dependencies = [
799
799
 
800
800
  [[package]]
801
801
  name = "lora-builtins-meta"
802
- version = "0.12.0"
802
+ version = "0.14.0"
803
803
 
804
804
  [[package]]
805
805
  name = "lora-compiler"
806
- version = "0.12.0"
806
+ version = "0.14.0"
807
807
  dependencies = [
808
808
  "lora-analyzer",
809
809
  "lora-ast",
@@ -812,7 +812,7 @@ dependencies = [
812
812
 
813
813
  [[package]]
814
814
  name = "lora-database"
815
- version = "0.12.0"
815
+ version = "0.14.0"
816
816
  dependencies = [
817
817
  "anyhow",
818
818
  "chacha20poly1305",
@@ -824,6 +824,7 @@ dependencies = [
824
824
  "lora-ast",
825
825
  "lora-compiler",
826
826
  "lora-executor",
827
+ "lora-io",
827
828
  "lora-parser",
828
829
  "lora-snapshot",
829
830
  "lora-store",
@@ -836,7 +837,7 @@ dependencies = [
836
837
 
837
838
  [[package]]
838
839
  name = "lora-executor"
839
- version = "0.12.0"
840
+ version = "0.14.0"
840
841
  dependencies = [
841
842
  "blake3",
842
843
  "crc32fast",
@@ -859,7 +860,7 @@ dependencies = [
859
860
 
860
861
  [[package]]
861
862
  name = "lora-ffi"
862
- version = "0.12.0"
863
+ version = "0.14.0"
863
864
  dependencies = [
864
865
  "anyhow",
865
866
  "lora-binding-buffer",
@@ -869,9 +870,20 @@ dependencies = [
869
870
  "serde_json",
870
871
  ]
871
872
 
873
+ [[package]]
874
+ name = "lora-io"
875
+ version = "0.14.0"
876
+ dependencies = [
877
+ "lora-executor",
878
+ "lora-store",
879
+ "serde",
880
+ "serde_json",
881
+ "thiserror",
882
+ ]
883
+
872
884
  [[package]]
873
885
  name = "lora-node"
874
- version = "0.12.0"
886
+ version = "0.14.0"
875
887
  dependencies = [
876
888
  "anyhow",
877
889
  "lora-binding-buffer",
@@ -886,7 +898,7 @@ dependencies = [
886
898
 
887
899
  [[package]]
888
900
  name = "lora-parser"
889
- version = "0.12.0"
901
+ version = "0.14.0"
890
902
  dependencies = [
891
903
  "lora-ast",
892
904
  "pest",
@@ -897,7 +909,7 @@ dependencies = [
897
909
 
898
910
  [[package]]
899
911
  name = "lora-python"
900
- version = "0.12.0"
912
+ version = "0.14.0"
901
913
  dependencies = [
902
914
  "anyhow",
903
915
  "lora-database",
@@ -909,7 +921,7 @@ dependencies = [
909
921
 
910
922
  [[package]]
911
923
  name = "lora-query-wasm"
912
- version = "0.12.0"
924
+ version = "0.14.0"
913
925
  dependencies = [
914
926
  "console_error_panic_hook",
915
927
  "js-sys",
@@ -923,7 +935,7 @@ dependencies = [
923
935
 
924
936
  [[package]]
925
937
  name = "lora-server"
926
- version = "0.12.0"
938
+ version = "0.14.0"
927
939
  dependencies = [
928
940
  "anyhow",
929
941
  "axum",
@@ -933,11 +945,12 @@ dependencies = [
933
945
  "serde_json",
934
946
  "tokio",
935
947
  "tower",
948
+ "tracing",
936
949
  ]
937
950
 
938
951
  [[package]]
939
952
  name = "lora-snapshot"
940
- version = "0.12.0"
953
+ version = "0.14.0"
941
954
  dependencies = [
942
955
  "argon2",
943
956
  "blake3",
@@ -952,7 +965,7 @@ dependencies = [
952
965
 
953
966
  [[package]]
954
967
  name = "lora-store"
955
- version = "0.12.0"
968
+ version = "0.14.0"
956
969
  dependencies = [
957
970
  "crc32fast",
958
971
  "js-sys",
@@ -963,7 +976,7 @@ dependencies = [
963
976
 
964
977
  [[package]]
965
978
  name = "lora-wal"
966
- version = "0.12.0"
979
+ version = "0.14.0"
967
980
  dependencies = [
968
981
  "crc32fast",
969
982
  "lora-store",
@@ -973,7 +986,7 @@ dependencies = [
973
986
 
974
987
  [[package]]
975
988
  name = "lora-wasm"
976
- version = "0.12.0"
989
+ version = "0.14.0"
977
990
  dependencies = [
978
991
  "anyhow",
979
992
  "console_error_panic_hook",
@@ -989,7 +1002,7 @@ dependencies = [
989
1002
 
990
1003
  [[package]]
991
1004
  name = "lora_ruby"
992
- version = "0.12.0"
1005
+ version = "0.14.0"
993
1006
  dependencies = [
994
1007
  "anyhow",
995
1008
  "lora-database",
@@ -1,10 +1,10 @@
1
1
  [workspace]
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"]
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-io", "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.12.0"
7
+ version = "0.14.0"
8
8
  license = "BUSL-1.1"
9
9
  authors = ["LoraDB, Inc."]
10
10
  repository = "https://github.com/lora-db/lora"
@@ -15,17 +15,18 @@ 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.12.0" }
19
- lora-parser = { path = "crates/lora-parser", version = "=0.12.0" }
20
- lora-builtins-meta = { path = "crates/lora-builtins-meta", version = "=0.12.0" }
21
- lora-analyzer = { path = "crates/lora-analyzer", version = "=0.12.0" }
22
- lora-compiler = { path = "crates/lora-compiler", version = "=0.12.0" }
23
- lora-store = { path = "crates/lora-store", version = "=0.12.0" }
24
- lora-snapshot = { path = "crates/lora-snapshot", version = "=0.12.0", default-features = false }
25
- lora-wal = { path = "crates/lora-wal", version = "=0.12.0" }
26
- lora-executor = { path = "crates/lora-executor", version = "=0.12.0", default-features = false }
27
- lora-database = { path = "crates/lora-database", version = "=0.12.0" }
28
- lora-binding-buffer = { path = "crates/bindings/lora-binding-buffer", version = "=0.12.0" }
18
+ lora-ast = { path = "crates/lora-ast", version = "=0.14.0" }
19
+ lora-parser = { path = "crates/lora-parser", version = "=0.14.0" }
20
+ lora-builtins-meta = { path = "crates/lora-builtins-meta", version = "=0.14.0" }
21
+ lora-analyzer = { path = "crates/lora-analyzer", version = "=0.14.0" }
22
+ lora-compiler = { path = "crates/lora-compiler", version = "=0.14.0" }
23
+ lora-store = { path = "crates/lora-store", version = "=0.14.0" }
24
+ lora-snapshot = { path = "crates/lora-snapshot", version = "=0.14.0", default-features = false }
25
+ lora-io = { path = "crates/lora-io", version = "=0.14.0" }
26
+ lora-wal = { path = "crates/lora-wal", version = "=0.14.0" }
27
+ lora-executor = { path = "crates/lora-executor", version = "=0.14.0", default-features = false }
28
+ lora-database = { path = "crates/lora-database", version = "=0.14.0" }
29
+ lora-binding-buffer = { path = "crates/bindings/lora-binding-buffer", version = "=0.14.0" }
29
30
 
30
31
  # External crates.
31
32
  anyhow = "1"
@@ -36,7 +37,7 @@ tokio = "1"
36
37
  smallvec = "2.0.0-alpha.12"
37
38
  pest = "2"
38
39
  pest_derive = "2"
39
- serde = { version = "1", features = ["derive"] }
40
+ serde = { version = "1", features = ["derive", "rc"] }
40
41
  serde_json = "1.0.149"
41
42
  regex = "1"
42
43
  unicode-normalization = "0.1"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lora-python
3
- Version: 0.12.0
3
+ Version: 0.14.0
4
4
  Classifier: Programming Language :: Rust
5
5
  Classifier: Programming Language :: Python :: 3
6
6
  Classifier: Programming Language :: Python :: 3.8
@@ -43,7 +43,11 @@ create_exception!(
43
43
  /// the same path.
44
44
  pub(crate) fn lora_query_err_from_anyhow(err: impl Into<EngineLoraError>) -> PyErr {
45
45
  let lora = err.into();
46
- LoraQueryError::new_err(format!("{}: {}", lora.code().as_str(), lora.message()))
46
+ LoraQueryError::new_err(format!(
47
+ "{}: {}",
48
+ lora.code().as_str(),
49
+ lora.public_message()
50
+ ))
47
51
  }
48
52
 
49
53
  /// Borrowed-by-reference variant for call sites that don't have an
@@ -51,7 +55,11 @@ pub(crate) fn lora_query_err_from_anyhow(err: impl Into<EngineLoraError>) -> PyE
51
55
  #[allow(dead_code)]
52
56
  pub(crate) fn lora_query_err_from_anyhow_ref(err: &anyhow::Error) -> PyErr {
53
57
  let lora = EngineLoraError::from_anyhow_ref(err);
54
- LoraQueryError::new_err(format!("{}: {}", lora.code().as_str(), lora.message()))
58
+ LoraQueryError::new_err(format!(
59
+ "{}: {}",
60
+ lora.code().as_str(),
61
+ lora.public_message()
62
+ ))
55
63
  }
56
64
 
57
65
  /// Build a [`LoraQueryError`] for a binding-side message that doesn't
@@ -54,6 +54,11 @@ impl<'a, S: GraphCatalog + ?Sized> Analyzer<'a, S> {
54
54
  pub(super) fn analyze_unwind(&mut self, u: &Unwind) -> Result<ResolvedUnwind, SemanticError> {
55
55
  let expr = self.analyze_expr(&u.expr)?;
56
56
  let alias = self.declare_fresh_variable(&u.alias.name)?;
57
+ // UNWIND iterates a list — typically `$rows` from a batched
58
+ // import, where each element is a map of arbitrary keys. The
59
+ // analyzer can't know the row shape, so let property access on
60
+ // the alias skip the graph-catalog check.
61
+ self.dynamic_property_vars.insert(alias);
57
62
 
58
63
  Ok(ResolvedUnwind { expr, alias })
59
64
  }
@@ -4,12 +4,18 @@ use lora_ast::{
4
4
  UpdatingClause,
5
5
  };
6
6
  use lora_store::GraphCatalog;
7
- use std::collections::BTreeMap;
7
+ use std::collections::{BTreeMap, BTreeSet};
8
8
 
9
9
  pub struct Analyzer<'a, S: GraphCatalog + ?Sized> {
10
10
  pub(super) storage: &'a S,
11
11
  pub(super) scopes: ScopeStack,
12
12
  pub(super) symbols: SymbolTable,
13
+ /// Variables whose runtime value shape isn't tracked by the analyzer
14
+ /// (UNWIND-bound elements, anything that may legitimately hold a map
15
+ /// or list of maps). Property access on these vars must skip the
16
+ /// graph-catalog check — the caller can't know which keys the data
17
+ /// carries until rows are bound at execution time.
18
+ pub(super) dynamic_property_vars: BTreeSet<VarId>,
13
19
  }
14
20
 
15
21
  #[derive(Debug, Clone, Copy, PartialEq, Eq)]
@@ -26,6 +32,7 @@ impl<'a, S: GraphCatalog + ?Sized> Analyzer<'a, S> {
26
32
  storage,
27
33
  scopes: ScopeStack::new(),
28
34
  symbols: SymbolTable::default(),
35
+ dynamic_property_vars: BTreeSet::new(),
29
36
  }
30
37
  }
31
38
 
@@ -324,7 +331,13 @@ impl<'a, S: GraphCatalog + ?Sized> Analyzer<'a, S> {
324
331
 
325
332
  pub(super) fn property_access_allowed(&self, base: &ResolvedExpr, key: &str) -> bool {
326
333
  match base {
327
- ResolvedExpr::Map(_) => true,
334
+ // Map literals and query parameters carry their own keys —
335
+ // there's nothing in the graph catalog to check against.
336
+ ResolvedExpr::Map(_) | ResolvedExpr::Parameter(_) => true,
337
+ // Variables whose value shape isn't tracked (UNWIND-bound
338
+ // row elements, etc.) — the catalog can't speak to keys on
339
+ // values that come from `$params` at execution time.
340
+ ResolvedExpr::Variable(id) if self.dynamic_property_vars.contains(id) => true,
328
341
  _ => {
329
342
  self.storage.has_property_key(key)
330
343
  || (self.storage.node_count() == 0 && self.storage.relationship_count() == 0)
@@ -31,6 +31,42 @@ fn create_allows_new_relationship_type_when_graph_is_not_empty() {
31
31
  ));
32
32
  }
33
33
 
34
+ #[test]
35
+ fn unwind_alias_allows_property_access_with_unknown_keys() {
36
+ // Regression: when the playground import driver runs
37
+ // UNWIND $rows AS r CREATE (:Label {`User Id`: r.`User Id`})
38
+ // against a non-empty graph that has never seen "User Id" as a
39
+ // property key, the analyzer used to reject `r.\`User Id\`` as an
40
+ // unknown property. UNWIND-bound vars hold whatever the parameter
41
+ // payload carries, so property access on them must skip the
42
+ // catalog check.
43
+ let mut graph = InMemoryGraph::new();
44
+ let _ = graph.create_node(vec!["Other".into()], Properties::new());
45
+
46
+ let doc = parse_query(
47
+ "UNWIND $rows AS r CREATE (:People {`User Id`: r.`User Id`, `First Name`: r.`First Name`})",
48
+ )
49
+ .unwrap();
50
+ let mut analyzer = Analyzer::new(&graph);
51
+ analyzer
52
+ .analyze(&doc)
53
+ .expect("UNWIND-bound row variable should allow any property key");
54
+ }
55
+
56
+ #[test]
57
+ fn parameter_property_access_allowed_with_unknown_keys() {
58
+ // Parameters are runtime maps the analyzer can't introspect — keys
59
+ // on `$ctx.foo` must not be gated by the graph catalog either.
60
+ let mut graph = InMemoryGraph::new();
61
+ let _ = graph.create_node(vec!["Other".into()], Properties::new());
62
+
63
+ let doc = parse_query("RETURN $ctx.user_id AS u").unwrap();
64
+ let mut analyzer = Analyzer::new(&graph);
65
+ analyzer
66
+ .analyze(&doc)
67
+ .expect("property access on a parameter should skip the catalog check");
68
+ }
69
+
34
70
  // --- Vector function analyzer tests ----------------------------------
35
71
 
36
72
  #[test]
@@ -36,6 +36,7 @@ lora-compiler.workspace = true
36
36
  lora-executor = { workspace = true, default-features = false }
37
37
  lora-store.workspace = true
38
38
  lora-snapshot.workspace = true
39
+ lora-io.workspace = true
39
40
  lora-wal.workspace = true
40
41
 
41
42
  serde_json.workspace = true
@@ -88,3 +89,7 @@ harness = false
88
89
  [[bench]]
89
90
  name = "index_acceleration"
90
91
  harness = false
92
+
93
+ [[bench]]
94
+ name = "memory"
95
+ harness = false
@@ -0,0 +1,162 @@
1
+ //! Memory-footprint benchmark for `InMemoryGraph`.
2
+ //!
3
+ //! Run with: `cargo bench -p lora-database --bench memory`
4
+ //!
5
+ //! Unlike the other benches in this directory, this one is *not* a
6
+ //! latency benchmark. It builds representative graph shapes, walks
7
+ //! the new [`MemoryReport`] estimator over each, and prints a
8
+ //! `grep`-friendly summary so a future regression gate can diff two
9
+ //! runs without having to re-derive the methodology.
10
+ //!
11
+ //! Output format (one line per scenario):
12
+ //!
13
+ //! ```text
14
+ //! memreport scenario=chain_100k nodes=100000 rels=99999 \
15
+ //! total=NNNN graph=NNNN nodes_bytes=NNNN ... bytes_per_node=NNN.N
16
+ //! ```
17
+ //!
18
+ //! The Criterion harness is used only to wire `cargo bench --bench
19
+ //! memory` into the existing workflow; per-scenario timing is *not*
20
+ //! the headline metric (we ignore the iteration count and
21
+ //! re-construct the dataset for every iter to surface allocator
22
+ //! noise, not to micro-measure construction speed).
23
+
24
+ mod fixtures;
25
+
26
+ use criterion::{criterion_group, criterion_main, Criterion};
27
+ use fixtures::{
28
+ build_chain, build_node_graph, build_social_graph, build_star, build_vector_graph, BenchDb,
29
+ };
30
+ use lora_database::{InMemoryGraph, MemoryReport};
31
+ use std::collections::BTreeMap;
32
+ use std::time::Duration;
33
+
34
+ fn bench_config() -> Criterion {
35
+ Criterion::default()
36
+ .warm_up_time(Duration::from_millis(50))
37
+ .measurement_time(Duration::from_millis(200))
38
+ .sample_size(10)
39
+ }
40
+
41
+ /// Render one scenario's report as a `memreport` line. Keep the key
42
+ /// order stable so future tooling can `awk` over it.
43
+ fn print_report(scenario: &str, db: &BenchDb) {
44
+ let report: MemoryReport = db
45
+ .service
46
+ .with_store(|s: &InMemoryGraph| s.memory_estimate());
47
+
48
+ // Capture the breakdown via the public field set so any future
49
+ // additions to `MemoryReport` show up in the output the next time
50
+ // the bench is regenerated.
51
+ let mut kv: BTreeMap<&str, u128> = BTreeMap::new();
52
+ kv.insert("total", report.total_bytes() as u128);
53
+ kv.insert("graph", report.graph_core_bytes() as u128);
54
+ kv.insert("indexes", report.secondary_index_bytes() as u128);
55
+ kv.insert("catalogs", report.catalog_bytes() as u128);
56
+ kv.insert("nodes_bytes", report.nodes_bytes as u128);
57
+ kv.insert("rels_bytes", report.relationships_bytes as u128);
58
+ kv.insert("outgoing_bytes", report.outgoing_bytes as u128);
59
+ kv.insert("incoming_bytes", report.incoming_bytes as u128);
60
+ kv.insert("label_index_bytes", report.label_index_bytes as u128);
61
+ kv.insert("type_index_bytes", report.type_index_bytes as u128);
62
+ kv.insert("property_index_bytes", report.property_index_bytes as u128);
63
+ kv.insert("sorted_index_bytes", report.sorted_index_bytes as u128);
64
+ kv.insert("text_index_bytes", report.text_index_bytes as u128);
65
+ kv.insert("point_index_bytes", report.point_index_bytes as u128);
66
+ kv.insert("fulltext_index_bytes", report.fulltext_index_bytes as u128);
67
+ kv.insert("vector_index_bytes", report.vector_index_bytes as u128);
68
+
69
+ let mut line = format!(
70
+ "memreport scenario={} nodes={} rels={} tomb_nodes={} tomb_rels={}",
71
+ scenario,
72
+ report.live_node_count,
73
+ report.live_relationship_count,
74
+ report.node_tombstone_count,
75
+ report.relationship_tombstone_count,
76
+ );
77
+ for (k, v) in &kv {
78
+ line.push_str(&format!(" {k}={v}"));
79
+ }
80
+ line.push_str(&format!(
81
+ " bytes_per_node={:.1} bytes_per_rel={:.1}",
82
+ report.bytes_per_live_node(),
83
+ report.bytes_per_live_relationship(),
84
+ ));
85
+ println!("{line}");
86
+ }
87
+
88
+ /// Build a graph and run the documented workloads, capturing both
89
+ /// the post-build report and a post-query report — peak-bytes
90
+ /// regression candidates live in the difference, not the absolute
91
+ /// value.
92
+ fn print_with_query(scenario: &str, db: &BenchDb, query: &str) {
93
+ print_report(&format!("{scenario}.build"), db);
94
+ let _ = db.service.execute(query, None).unwrap();
95
+ print_report(&format!("{scenario}.after_query"), db);
96
+ }
97
+
98
+ fn bench_memory(c: &mut Criterion) {
99
+ let mut group = c.benchmark_group("memory_estimate");
100
+
101
+ // ---- isolated nodes ----
102
+ {
103
+ let db = build_node_graph(10_000);
104
+ print_report("node_only_10k", &db);
105
+ group.bench_function("node_only_10k_estimate", |b| {
106
+ b.iter(|| {
107
+ let _ = db
108
+ .service
109
+ .with_store(|s: &InMemoryGraph| s.memory_estimate());
110
+ });
111
+ });
112
+ }
113
+
114
+ // ---- chains (1 edge / node) ----
115
+ for &n in &[1_000usize, 10_000, 100_000] {
116
+ let db = build_chain(n);
117
+ print_with_query(
118
+ &format!("chain_{n}"),
119
+ &db,
120
+ "MATCH (n:Chain) RETURN count(n) AS c",
121
+ );
122
+ }
123
+
124
+ // ---- hub-and-spoke (star) ----
125
+ for &spokes in &[1_000usize, 10_000, 100_000] {
126
+ let db = build_star(spokes);
127
+ print_with_query(
128
+ &format!("star_{spokes}"),
129
+ &db,
130
+ "MATCH (h:Hub)-[:ARM]->(s) RETURN count(s) AS c",
131
+ );
132
+ }
133
+
134
+ // ---- social graph (mixed fanout + properties) ----
135
+ {
136
+ let db = build_social_graph(20_000, 8);
137
+ print_with_query(
138
+ "social_20k_x8",
139
+ &db,
140
+ "MATCH (a:Person)-[:KNOWS]->(b) RETURN count(b) AS c",
141
+ );
142
+ }
143
+
144
+ // ---- vector workloads ----
145
+ {
146
+ let db = build_vector_graph(5_000, 128, "cosine", "flat");
147
+ print_report("vector_flat_5k_d128", &db);
148
+ }
149
+ {
150
+ let db = build_vector_graph(5_000, 128, "cosine", "hnsw");
151
+ print_report("vector_hnsw_5k_d128", &db);
152
+ }
153
+
154
+ group.finish();
155
+ }
156
+
157
+ criterion_group!(
158
+ name = benches;
159
+ config = bench_config();
160
+ targets = bench_memory
161
+ );
162
+ criterion_main!(benches);
@@ -0,0 +1,66 @@
1
+ {
2
+ "_meta": {
3
+ "default_tolerance_pct": 10,
4
+ "last_updated": "2026-05-23",
5
+ "notes": "Captured from `cargo bench -p lora-database --bench memory -- --quick` on Apple Silicon. Numbers are bytes from `MemoryReport::total_bytes()` after the build phase (or after_query for chain/star/social which run a representative MATCH after building). Tolerance is per-scenario; a regression beyond `total * (1 + tolerance_pct/100)` fails the gate. Bump the baseline whenever an intentional storage-shape change shifts a scenario."
6
+ },
7
+ "benchmarks": {
8
+ "node_only_10k": {
9
+ "total_bytes": 4896966,
10
+ "bytes_per_node": 428.9,
11
+ "tolerance_pct": 10
12
+ },
13
+ "chain_1000.build": {
14
+ "total_bytes": 665387,
15
+ "bytes_per_node": 213.0,
16
+ "bytes_per_rel": 100.0,
17
+ "tolerance_pct": 10
18
+ },
19
+ "chain_10000.build": {
20
+ "total_bytes": 5834195,
21
+ "bytes_per_node": 213.0,
22
+ "bytes_per_rel": 100.0,
23
+ "tolerance_pct": 10
24
+ },
25
+ "chain_100000.build": {
26
+ "total_bytes": 57764195,
27
+ "bytes_per_node": 213.0,
28
+ "bytes_per_rel": 100.0,
29
+ "tolerance_pct": 10
30
+ },
31
+ "star_1000.build": {
32
+ "total_bytes": 416075,
33
+ "bytes_per_node": 212.0,
34
+ "bytes_per_rel": 99.0,
35
+ "tolerance_pct": 10
36
+ },
37
+ "star_10000.build": {
38
+ "total_bytes": 4102499,
39
+ "bytes_per_node": 212.0,
40
+ "bytes_per_rel": 99.0,
41
+ "tolerance_pct": 10
42
+ },
43
+ "star_100000.build": {
44
+ "total_bytes": 41452499,
45
+ "bytes_per_node": 212.0,
46
+ "bytes_per_rel": 99.0,
47
+ "tolerance_pct": 10
48
+ },
49
+ "social_20k_x8.build": {
50
+ "total_bytes": 53593249,
51
+ "bytes_per_node": 543.6,
52
+ "bytes_per_rel": 205.0,
53
+ "tolerance_pct": 10
54
+ },
55
+ "vector_flat_5k_d128": {
56
+ "total_bytes": 6829412,
57
+ "bytes_per_node": 721.0,
58
+ "tolerance_pct": 10
59
+ },
60
+ "vector_hnsw_5k_d128": {
61
+ "total_bytes": 10459212,
62
+ "bytes_per_node": 721.0,
63
+ "tolerance_pct": 15
64
+ }
65
+ }
66
+ }
@@ -75,10 +75,9 @@ where
75
75
  /// mutation record, and `TxCommit` only when mutations occurred,
76
76
  /// then applies the WAL's configured single-thread flush policy.
77
77
  /// 4. On Err, `recorder.abort()` clears the pending batch. The
78
- /// engine has no rollback, so the in-memory state may already
79
- /// be partially mutated; the live handle is quarantined while
80
- /// durable recovery stays atomic because no committed batch was
81
- /// written.
78
+ /// staged graph is discarded without publishing, so the live
79
+ /// in-memory state and durable WAL both remain at the last
80
+ /// successful commit.
82
81
  /// 5. The recorder's poisoned flag is polled once. If set, the query
83
82
  /// fails loudly with the durability error so the caller can act on it;
84
83
  /// the WAL refuses further appends until the operator restarts the