lora-python 0.13.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.13.0 → lora_python-0.14.0}/Cargo.lock +20 -19
  2. {lora_python-0.13.0 → lora_python-0.14.0}/Cargo.toml +14 -14
  3. {lora_python-0.13.0 → lora_python-0.14.0}/PKG-INFO +1 -1
  4. {lora_python-0.13.0 → lora_python-0.14.0}/crates/bindings/lora-python/src/errors.rs +10 -2
  5. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/Cargo.toml +4 -0
  6. lora_python-0.14.0/crates/lora-database/benches/memory.rs +162 -0
  7. lora_python-0.14.0/crates/lora-database/benches/memory_baseline.json +66 -0
  8. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/src/database/execute.rs +3 -4
  9. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/src/database/graph_api.rs +12 -8
  10. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/src/database/mod.rs +42 -13
  11. lora_python-0.14.0/crates/lora-database/src/database/occ.rs +151 -0
  12. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/src/database/procedures.rs +87 -54
  13. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/src/database/row_projection.rs +5 -2
  14. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/src/database/schema.rs +126 -52
  15. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/src/database/write_guard.rs +80 -61
  16. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/src/error.rs +343 -17
  17. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/src/lib.rs +2 -1
  18. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/src/live_store.rs +4 -0
  19. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/src/snapshot/mod.rs +7 -3
  20. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/src/stream.rs +4 -4
  21. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/tests/backend_stub.rs +8 -4
  22. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/tests/constraints.rs +24 -1
  23. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/tests/errors.rs +23 -0
  24. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/tests/schema.rs +1 -0
  25. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/tests/transactions.rs +78 -3
  26. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/tests/vector_index.rs +4 -0
  27. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/tests/wal.rs +47 -40
  28. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/errors.rs +3 -0
  29. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/builtins/edge.rs +2 -2
  30. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/builtins/list.rs +81 -16
  31. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/builtins/math_ns.rs +19 -1
  32. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/builtins/node.rs +2 -2
  33. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/builtins/number.rs +1 -1
  34. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/builtins/temporal.rs +3 -1
  35. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/builtins/value.rs +4 -4
  36. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/expr.rs +6 -4
  37. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/executor/helpers.rs +23 -6
  38. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/executor/mutable.rs +123 -24
  39. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/pull/call_subquery.rs +6 -5
  40. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/pull/expand.rs +1 -1
  41. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-io/src/csv.rs +42 -9
  42. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-io/src/json_array.rs +11 -2
  43. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-snapshot/src/columnar.rs +38 -16
  44. lora_python-0.14.0/crates/lora-store/src/intern.rs +136 -0
  45. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-store/src/lib.rs +15 -0
  46. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-store/src/memory/fulltext_index.rs +3 -3
  47. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-store/src/memory/graph.rs +18 -16
  48. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-store/src/memory/hnsw.rs +24 -13
  49. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-store/src/memory/impls.rs +30 -9
  50. lora_python-0.14.0/crates/lora-store/src/memory/mem_report.rs +568 -0
  51. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-store/src/memory/mod.rs +2 -0
  52. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-store/src/memory/point_index.rs +3 -3
  53. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-store/src/memory/secondary_index_maintenance.rs +1 -1
  54. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-store/src/memory/sorted_property_index.rs +2 -2
  55. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-store/src/memory/tests.rs +1 -1
  56. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-store/src/memory/text_index.rs +2 -2
  57. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-store/src/memory/vector_index.rs +2 -2
  58. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-store/src/traits.rs +29 -9
  59. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-store/src/types/graph.rs +15 -1
  60. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-wal/src/codec/decode.rs +1 -1
  61. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-wal/src/codec/tests.rs +5 -1
  62. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-wal/src/dir.rs +1 -2
  63. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-wal/src/lsn.rs +9 -8
  64. {lora_python-0.13.0 → lora_python-0.14.0}/pyproject.toml +1 -1
  65. lora_python-0.13.0/crates/lora-database/src/database/occ.rs +0 -52
  66. {lora_python-0.13.0 → lora_python-0.14.0}/LICENSE +0 -0
  67. {lora_python-0.13.0 → lora_python-0.14.0}/README.md +0 -0
  68. {lora_python-0.13.0 → lora_python-0.14.0}/crates/bindings/lora-python/.gitignore +0 -0
  69. {lora_python-0.13.0 → lora_python-0.14.0}/crates/bindings/lora-python/Cargo.toml +0 -0
  70. {lora_python-0.13.0 → lora_python-0.14.0}/crates/bindings/lora-python/LICENSE +0 -0
  71. {lora_python-0.13.0 → lora_python-0.14.0}/crates/bindings/lora-python/README.md +0 -0
  72. {lora_python-0.13.0 → lora_python-0.14.0}/crates/bindings/lora-python/build.rs +0 -0
  73. {lora_python-0.13.0 → lora_python-0.14.0}/crates/bindings/lora-python/examples/async_demo.py +0 -0
  74. {lora_python-0.13.0 → lora_python-0.14.0}/crates/bindings/lora-python/examples/basic.py +0 -0
  75. {lora_python-0.13.0 → lora_python-0.14.0}/crates/bindings/lora-python/src/from_python.rs +0 -0
  76. {lora_python-0.13.0 → lora_python-0.14.0}/crates/bindings/lora-python/src/lib.rs +0 -0
  77. {lora_python-0.13.0 → lora_python-0.14.0}/crates/bindings/lora-python/src/to_python.rs +0 -0
  78. {lora_python-0.13.0 → lora_python-0.14.0}/crates/bindings/lora-python/tests/test_async.py +0 -0
  79. {lora_python-0.13.0 → lora_python-0.14.0}/crates/bindings/lora-python/tests/test_explain_profile.py +0 -0
  80. {lora_python-0.13.0 → lora_python-0.14.0}/crates/bindings/lora-python/tests/test_sync.py +0 -0
  81. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-analyzer/Cargo.toml +0 -0
  82. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-analyzer/src/analyzer/builtin_signatures.rs +0 -0
  83. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-analyzer/src/analyzer/clauses.rs +0 -0
  84. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-analyzer/src/analyzer/expressions.rs +0 -0
  85. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-analyzer/src/analyzer/mod.rs +0 -0
  86. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-analyzer/src/analyzer/patterns.rs +0 -0
  87. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-analyzer/src/analyzer/state.rs +0 -0
  88. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-analyzer/src/analyzer/tests.rs +0 -0
  89. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-analyzer/src/errors.rs +0 -0
  90. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-analyzer/src/lib.rs +0 -0
  91. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-analyzer/src/resolved.rs +0 -0
  92. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-analyzer/src/scope.rs +0 -0
  93. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-analyzer/src/symbols.rs +0 -0
  94. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-analyzer/tests/error_messages.rs +0 -0
  95. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-ast/Cargo.toml +0 -0
  96. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-ast/src/ast.rs +0 -0
  97. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-ast/src/lib.rs +0 -0
  98. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-builtins-meta/Cargo.toml +0 -0
  99. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-builtins-meta/src/lib.rs +0 -0
  100. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-compiler/Cargo.toml +0 -0
  101. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-compiler/src/lib.rs +0 -0
  102. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-compiler/src/logical.rs +0 -0
  103. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-compiler/src/optimizer.rs +0 -0
  104. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-compiler/src/pattern.rs +0 -0
  105. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-compiler/src/physical.rs +0 -0
  106. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-compiler/src/plan_tree.rs +0 -0
  107. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-compiler/src/planner.rs +0 -0
  108. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/benches/README.md +0 -0
  109. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/benches/advanced.rs +0 -0
  110. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/benches/concurrency_guard.rs +0 -0
  111. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/benches/concurrent.rs +0 -0
  112. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/benches/engine.rs +0 -0
  113. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/benches/fixtures.rs +0 -0
  114. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/benches/index_acceleration.rs +0 -0
  115. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/benches/perf_smoke.rs +0 -0
  116. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/benches/perf_smoke_baseline.json +0 -0
  117. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/benches/query_implementations.rs +0 -0
  118. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/benches/realistic.rs +0 -0
  119. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/benches/scale.rs +0 -0
  120. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/benches/temporal_spatial.rs +0 -0
  121. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/benches/wal.rs +0 -0
  122. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/src/database/builder.rs +0 -0
  123. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/src/database/compile.rs +0 -0
  124. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/src/database/explain.rs +0 -0
  125. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/src/database/profile.rs +0 -0
  126. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/src/database/pull_mode.rs +0 -0
  127. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/src/database/replay.rs +0 -0
  128. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/src/database/show_pipeline.rs +0 -0
  129. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/src/database/stream.rs +0 -0
  130. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/src/durable_io.rs +0 -0
  131. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/src/explain.rs +0 -0
  132. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/src/io.rs +0 -0
  133. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/src/named.rs +0 -0
  134. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/src/plan_cache.rs +0 -0
  135. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/src/snapshot/json.rs +0 -0
  136. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/src/snapshot/store.rs +0 -0
  137. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/src/transaction.rs +0 -0
  138. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/src/wal/admin.rs +0 -0
  139. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/src/wal/archive/format.rs +0 -0
  140. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/src/wal/archive/lock.rs +0 -0
  141. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/src/wal/archive/platform.rs +0 -0
  142. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/src/wal/archive/worker.rs +0 -0
  143. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/src/wal/archive/workspace.rs +0 -0
  144. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/src/wal/archive.rs +0 -0
  145. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/src/wal/mod.rs +0 -0
  146. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/src/wal/write_scope.rs +0 -0
  147. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/tests/advanced_queries.rs +0 -0
  148. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/tests/aggregation.rs +0 -0
  149. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/tests/binary.rs +0 -0
  150. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/tests/builtin_namespaces.rs +0 -0
  151. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/tests/create.rs +0 -0
  152. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/tests/docs_examples.rs +0 -0
  153. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/tests/error_messages.rs +0 -0
  154. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/tests/explain_profile.rs +0 -0
  155. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/tests/expressions.rs +0 -0
  156. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/tests/foreach.rs +0 -0
  157. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/tests/fulltext_index.rs +0 -0
  158. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/tests/functions_extended.rs +0 -0
  159. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/tests/index_acceleration.rs +0 -0
  160. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/tests/invariants.rs +0 -0
  161. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/tests/managed_snapshots.rs +0 -0
  162. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/tests/match.rs +0 -0
  163. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/tests/merge.rs +0 -0
  164. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/tests/ordering.rs +0 -0
  165. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/tests/parameters.rs +0 -0
  166. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/tests/parser.rs +0 -0
  167. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/tests/paths.rs +0 -0
  168. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/tests/projection.rs +0 -0
  169. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/tests/scale.rs +0 -0
  170. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/tests/seeds.rs +0 -0
  171. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/tests/snapshot.rs +0 -0
  172. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/tests/spatial.rs +0 -0
  173. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/tests/temporal.rs +0 -0
  174. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/tests/test_helpers.rs +0 -0
  175. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/tests/types_advanced.rs +0 -0
  176. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/tests/union.rs +0 -0
  177. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/tests/unwind_ingestion.rs +0 -0
  178. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/tests/update.rs +0 -0
  179. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/tests/vectors.rs +0 -0
  180. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/tests/where_clause.rs +0 -0
  181. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-database/tests/with.rs +0 -0
  182. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/Cargo.toml +0 -0
  183. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/binops.rs +0 -0
  184. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/builtins/bits_ns.rs +0 -0
  185. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/builtins/bytes_ns.rs +0 -0
  186. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/builtins/cast_ns.rs +0 -0
  187. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/builtins/crypto.rs +0 -0
  188. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/builtins/geo.rs +0 -0
  189. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/builtins/json_ns.rs +0 -0
  190. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/builtins/map_ns.rs +0 -0
  191. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/builtins/mod.rs +0 -0
  192. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/builtins/path.rs +0 -0
  193. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/builtins/string_ns.rs +0 -0
  194. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/builtins/text.rs +0 -0
  195. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/builtins/type_ns.rs +0 -0
  196. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/builtins/uuid_ns.rs +0 -0
  197. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/builtins/vector_ns.rs +0 -0
  198. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/errors.rs +0 -0
  199. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/functions.rs +0 -0
  200. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/mod.rs +0 -0
  201. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/point.rs +0 -0
  202. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/regex.rs +0 -0
  203. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/eval/vector.rs +0 -0
  204. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/executor/aggregation.rs +0 -0
  205. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/executor/immutable.rs +0 -0
  206. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/executor/mod.rs +0 -0
  207. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/executor/optional.rs +0 -0
  208. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/executor/sort.rs +0 -0
  209. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/lib.rs +0 -0
  210. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/profile.rs +0 -0
  211. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/pull/aggregate.rs +0 -0
  212. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/pull/columns.rs +0 -0
  213. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/pull/context.rs +0 -0
  214. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/pull/filter.rs +0 -0
  215. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/pull/hydration.rs +0 -0
  216. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/pull/mod.rs +0 -0
  217. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/pull/mutable.rs +0 -0
  218. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/pull/optional.rs +0 -0
  219. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/pull/path.rs +0 -0
  220. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/pull/projection.rs +0 -0
  221. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/pull/scan.rs +0 -0
  222. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/pull/shape.rs +0 -0
  223. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/pull/sort.rs +0 -0
  224. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/pull/source.rs +0 -0
  225. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/pull/tests.rs +0 -0
  226. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/pull/traits.rs +0 -0
  227. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/pull/union.rs +0 -0
  228. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/src/value.rs +0 -0
  229. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-executor/tests/error_messages.rs +0 -0
  230. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-io/Cargo.toml +0 -0
  231. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-io/src/format.rs +0 -0
  232. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-io/src/jsonl.rs +0 -0
  233. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-io/src/lib.rs +0 -0
  234. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-io/src/mapping.rs +0 -0
  235. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-io/src/value_json.rs +0 -0
  236. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-parser/Cargo.toml +0 -0
  237. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-parser/src/cypher.pest +0 -0
  238. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-parser/src/errors.rs +0 -0
  239. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-parser/src/lib.rs +0 -0
  240. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-parser/src/parser/clauses.rs +0 -0
  241. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-parser/src/parser/expressions.rs +0 -0
  242. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-parser/src/parser/literals.rs +0 -0
  243. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-parser/src/parser/mod.rs +0 -0
  244. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-parser/src/parser/patterns.rs +0 -0
  245. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-parser/src/parser/query.rs +0 -0
  246. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-parser/src/parser/schema.rs +0 -0
  247. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-parser/src/parser/tests.rs +0 -0
  248. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-parser/src/parser/util.rs +0 -0
  249. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-parser/tests/error_messages.rs +0 -0
  250. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-snapshot/Cargo.toml +0 -0
  251. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-snapshot/src/body.rs +0 -0
  252. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-snapshot/src/codec.rs +0 -0
  253. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-snapshot/src/envelope.rs +0 -0
  254. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-snapshot/src/errors.rs +0 -0
  255. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-snapshot/src/format.rs +0 -0
  256. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-snapshot/src/lib.rs +0 -0
  257. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-snapshot/src/options.rs +0 -0
  258. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-snapshot/src/tests.rs +0 -0
  259. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-snapshot/src/transform.rs +0 -0
  260. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-snapshot/src/view.rs +0 -0
  261. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-snapshot/tests/error_messages.rs +0 -0
  262. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-store/Cargo.toml +0 -0
  263. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-store/src/codec.rs +0 -0
  264. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-store/src/lock_table.rs +0 -0
  265. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-store/src/memory/constraint_catalog.rs +0 -0
  266. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-store/src/memory/constraint_enforce.rs +0 -0
  267. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-store/src/memory/entity_index_store.rs +0 -0
  268. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-store/src/memory/index_catalog.rs +0 -0
  269. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-store/src/memory/property_index.rs +0 -0
  270. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-store/src/memory/snapshot.rs +0 -0
  271. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-store/src/memory/stats.rs +0 -0
  272. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-store/src/mutation.rs +0 -0
  273. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-store/src/snapshot.rs +0 -0
  274. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-store/src/types/binary/mod.rs +0 -0
  275. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-store/src/types/binary/tests.rs +0 -0
  276. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-store/src/types/binary/traits.rs +0 -0
  277. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-store/src/types/binary/types.rs +0 -0
  278. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-store/src/types/mod.rs +0 -0
  279. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-store/src/types/property_value.rs +0 -0
  280. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-store/src/types/spatial/distance.rs +0 -0
  281. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-store/src/types/spatial/mod.rs +0 -0
  282. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-store/src/types/spatial/point.rs +0 -0
  283. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-store/src/types/spatial/srid.rs +0 -0
  284. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-store/src/types/spatial/tests.rs +0 -0
  285. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-store/src/types/temporal/calendar.rs +0 -0
  286. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-store/src/types/temporal/date.rs +0 -0
  287. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-store/src/types/temporal/datetime.rs +0 -0
  288. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-store/src/types/temporal/duration.rs +0 -0
  289. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-store/src/types/temporal/format.rs +0 -0
  290. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-store/src/types/temporal/mod.rs +0 -0
  291. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-store/src/types/temporal/parsing.rs +0 -0
  292. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-store/src/types/temporal/time.rs +0 -0
  293. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-store/src/types/vector/build.rs +0 -0
  294. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-store/src/types/vector/mod.rs +0 -0
  295. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-store/src/types/vector/similarity.rs +0 -0
  296. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-store/src/types/vector/tests.rs +0 -0
  297. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-store/src/types/vector/types.rs +0 -0
  298. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-store/tests/error_messages.rs +0 -0
  299. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-wal/Cargo.toml +0 -0
  300. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-wal/src/codec/encode.rs +0 -0
  301. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-wal/src/codec/format.rs +0 -0
  302. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-wal/src/codec/mod.rs +0 -0
  303. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-wal/src/config.rs +0 -0
  304. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-wal/src/errors.rs +0 -0
  305. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-wal/src/io.rs +0 -0
  306. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-wal/src/lib.rs +0 -0
  307. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-wal/src/lock.rs +0 -0
  308. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-wal/src/record.rs +0 -0
  309. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-wal/src/recorder/errors.rs +0 -0
  310. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-wal/src/recorder/mirror.rs +0 -0
  311. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-wal/src/recorder/mod.rs +0 -0
  312. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-wal/src/recorder/recorder.rs +0 -0
  313. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-wal/src/recorder/tests.rs +0 -0
  314. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-wal/src/replay.rs +0 -0
  315. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-wal/src/segment.rs +0 -0
  316. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-wal/src/testing.rs +0 -0
  317. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-wal/src/wal/group_flusher.rs +0 -0
  318. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-wal/src/wal/mod.rs +0 -0
  319. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-wal/src/wal/tests.rs +0 -0
  320. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-wal/src/wal/wal.rs +0 -0
  321. {lora_python-0.13.0 → lora_python-0.14.0}/crates/lora-wal/tests/error_messages.rs +0 -0
  322. {lora_python-0.13.0 → lora_python-0.14.0}/python/lora_python/__init__.py +0 -0
  323. {lora_python-0.13.0 → lora_python-0.14.0}/python/lora_python/_async.py +0 -0
  324. {lora_python-0.13.0 → lora_python-0.14.0}/python/lora_python/_native.pyi +0 -0
  325. {lora_python-0.13.0 → lora_python-0.14.0}/python/lora_python/py.typed +0 -0
  326. {lora_python-0.13.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.13.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.13.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.13.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.13.0"
802
+ version = "0.14.0"
803
803
 
804
804
  [[package]]
805
805
  name = "lora-compiler"
806
- version = "0.13.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.13.0"
815
+ version = "0.14.0"
816
816
  dependencies = [
817
817
  "anyhow",
818
818
  "chacha20poly1305",
@@ -837,7 +837,7 @@ dependencies = [
837
837
 
838
838
  [[package]]
839
839
  name = "lora-executor"
840
- version = "0.13.0"
840
+ version = "0.14.0"
841
841
  dependencies = [
842
842
  "blake3",
843
843
  "crc32fast",
@@ -860,7 +860,7 @@ dependencies = [
860
860
 
861
861
  [[package]]
862
862
  name = "lora-ffi"
863
- version = "0.13.0"
863
+ version = "0.14.0"
864
864
  dependencies = [
865
865
  "anyhow",
866
866
  "lora-binding-buffer",
@@ -872,7 +872,7 @@ dependencies = [
872
872
 
873
873
  [[package]]
874
874
  name = "lora-io"
875
- version = "0.13.0"
875
+ version = "0.14.0"
876
876
  dependencies = [
877
877
  "lora-executor",
878
878
  "lora-store",
@@ -883,7 +883,7 @@ dependencies = [
883
883
 
884
884
  [[package]]
885
885
  name = "lora-node"
886
- version = "0.13.0"
886
+ version = "0.14.0"
887
887
  dependencies = [
888
888
  "anyhow",
889
889
  "lora-binding-buffer",
@@ -898,7 +898,7 @@ dependencies = [
898
898
 
899
899
  [[package]]
900
900
  name = "lora-parser"
901
- version = "0.13.0"
901
+ version = "0.14.0"
902
902
  dependencies = [
903
903
  "lora-ast",
904
904
  "pest",
@@ -909,7 +909,7 @@ dependencies = [
909
909
 
910
910
  [[package]]
911
911
  name = "lora-python"
912
- version = "0.13.0"
912
+ version = "0.14.0"
913
913
  dependencies = [
914
914
  "anyhow",
915
915
  "lora-database",
@@ -921,7 +921,7 @@ dependencies = [
921
921
 
922
922
  [[package]]
923
923
  name = "lora-query-wasm"
924
- version = "0.13.0"
924
+ version = "0.14.0"
925
925
  dependencies = [
926
926
  "console_error_panic_hook",
927
927
  "js-sys",
@@ -935,7 +935,7 @@ dependencies = [
935
935
 
936
936
  [[package]]
937
937
  name = "lora-server"
938
- version = "0.13.0"
938
+ version = "0.14.0"
939
939
  dependencies = [
940
940
  "anyhow",
941
941
  "axum",
@@ -945,11 +945,12 @@ dependencies = [
945
945
  "serde_json",
946
946
  "tokio",
947
947
  "tower",
948
+ "tracing",
948
949
  ]
949
950
 
950
951
  [[package]]
951
952
  name = "lora-snapshot"
952
- version = "0.13.0"
953
+ version = "0.14.0"
953
954
  dependencies = [
954
955
  "argon2",
955
956
  "blake3",
@@ -964,7 +965,7 @@ dependencies = [
964
965
 
965
966
  [[package]]
966
967
  name = "lora-store"
967
- version = "0.13.0"
968
+ version = "0.14.0"
968
969
  dependencies = [
969
970
  "crc32fast",
970
971
  "js-sys",
@@ -975,7 +976,7 @@ dependencies = [
975
976
 
976
977
  [[package]]
977
978
  name = "lora-wal"
978
- version = "0.13.0"
979
+ version = "0.14.0"
979
980
  dependencies = [
980
981
  "crc32fast",
981
982
  "lora-store",
@@ -985,7 +986,7 @@ dependencies = [
985
986
 
986
987
  [[package]]
987
988
  name = "lora-wasm"
988
- version = "0.13.0"
989
+ version = "0.14.0"
989
990
  dependencies = [
990
991
  "anyhow",
991
992
  "console_error_panic_hook",
@@ -1001,7 +1002,7 @@ dependencies = [
1001
1002
 
1002
1003
  [[package]]
1003
1004
  name = "lora_ruby"
1004
- version = "0.13.0"
1005
+ version = "0.14.0"
1005
1006
  dependencies = [
1006
1007
  "anyhow",
1007
1008
  "lora-database",
@@ -4,7 +4,7 @@ resolver = "2"
4
4
 
5
5
  [workspace.package]
6
6
  edition = "2021"
7
- version = "0.13.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,18 +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.13.0" }
19
- lora-parser = { path = "crates/lora-parser", version = "=0.13.0" }
20
- lora-builtins-meta = { path = "crates/lora-builtins-meta", version = "=0.13.0" }
21
- lora-analyzer = { path = "crates/lora-analyzer", version = "=0.13.0" }
22
- lora-compiler = { path = "crates/lora-compiler", version = "=0.13.0" }
23
- lora-store = { path = "crates/lora-store", version = "=0.13.0" }
24
- lora-snapshot = { path = "crates/lora-snapshot", version = "=0.13.0", default-features = false }
25
- lora-io = { path = "crates/lora-io", version = "=0.13.0" }
26
- lora-wal = { path = "crates/lora-wal", version = "=0.13.0" }
27
- lora-executor = { path = "crates/lora-executor", version = "=0.13.0", default-features = false }
28
- lora-database = { path = "crates/lora-database", version = "=0.13.0" }
29
- lora-binding-buffer = { path = "crates/bindings/lora-binding-buffer", version = "=0.13.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" }
30
30
 
31
31
  # External crates.
32
32
  anyhow = "1"
@@ -37,7 +37,7 @@ tokio = "1"
37
37
  smallvec = "2.0.0-alpha.12"
38
38
  pest = "2"
39
39
  pest_derive = "2"
40
- serde = { version = "1", features = ["derive"] }
40
+ serde = { version = "1", features = ["derive", "rc"] }
41
41
  serde_json = "1.0.149"
42
42
  regex = "1"
43
43
  unicode-normalization = "0.1"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lora-python
3
- Version: 0.13.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
@@ -89,3 +89,7 @@ harness = false
89
89
  [[bench]]
90
90
  name = "index_acceleration"
91
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
@@ -62,7 +62,7 @@ where
62
62
  store.node_properties(id).map(|props| {
63
63
  props
64
64
  .into_iter()
65
- .map(|(key, value)| (key, LoraValue::from(value)))
65
+ .map(|(key, value)| (key.to_string(), LoraValue::from(value)))
66
66
  .collect()
67
67
  })
68
68
  })
@@ -112,7 +112,7 @@ where
112
112
  store.relationship_properties(id).map(|props| {
113
113
  props
114
114
  .into_iter()
115
- .map(|(key, value)| (key, LoraValue::from(value)))
115
+ .map(|(key, value)| (key.to_string(), LoraValue::from(value)))
116
116
  .collect()
117
117
  })
118
118
  })
@@ -186,7 +186,7 @@ where
186
186
  key: &str,
187
187
  value: LoraValue,
188
188
  ) -> Result<Vec<NodeId>> {
189
- let value = lora_value_to_property(value).map_err(|e| anyhow!(e))?;
189
+ let value = lora_value_to_property(value).map_err(anyhow::Error::from)?;
190
190
  Ok(self.with_store(|store| store.find_node_ids_by_property(label, key, &value)))
191
191
  }
192
192
 
@@ -196,7 +196,7 @@ where
196
196
  key: &str,
197
197
  value: LoraValue,
198
198
  ) -> Result<Vec<RelationshipId>> {
199
- let value = lora_value_to_property(value).map_err(|e| anyhow!(e))?;
199
+ let value = lora_value_to_property(value).map_err(anyhow::Error::from)?;
200
200
  Ok(self.with_store(|store| store.find_relationship_ids_by_property(rel_type, key, &value)))
201
201
  }
202
202
 
@@ -208,8 +208,12 @@ where
208
208
  properties: BTreeMap<String, LoraValue>,
209
209
  ) -> Result<NodeRecord, LoraError> {
210
210
  let properties = values_to_properties(properties).map_err(LoraError::from_anyhow)?;
211
- self.with_logged_store_mut(|store| Ok(store.create_node(labels, properties)))
212
- .map_err(LoraError::from_anyhow)
211
+ self.with_logged_store_mut(|store| {
212
+ store
213
+ .try_create_node(labels, properties)
214
+ .ok_or_else(|| anyhow!("failed to create node because storage is exhausted"))
215
+ })
216
+ .map_err(LoraError::from_anyhow)
213
217
  }
214
218
 
215
219
  pub fn graph_create_relationship(
@@ -232,7 +236,7 @@ where
232
236
  key: String,
233
237
  value: LoraValue,
234
238
  ) -> Result<bool, LoraError> {
235
- let value = lora_value_to_property(value).map_err(|e| anyhow!(e))?;
239
+ let value = lora_value_to_property(value).map_err(anyhow::Error::from)?;
236
240
  self.with_logged_store_mut(|store| Ok(store.set_node_property(node_id, key, value)))
237
241
  .map_err(LoraError::from_anyhow)
238
242
  }
@@ -291,7 +295,7 @@ where
291
295
  key: String,
292
296
  value: LoraValue,
293
297
  ) -> Result<bool, LoraError> {
294
- let value = lora_value_to_property(value).map_err(|e| anyhow!(e))?;
298
+ let value = lora_value_to_property(value).map_err(anyhow::Error::from)?;
295
299
  self.with_logged_store_mut(|store| Ok(store.set_relationship_property(rel_id, key, value)))
296
300
  .map_err(LoraError::from_anyhow)
297
301
  }
@@ -2,7 +2,7 @@ use std::any::Any;
2
2
  use std::collections::BTreeMap;
3
3
  use std::sync::{Arc, Mutex};
4
4
 
5
- use anyhow::{anyhow, Result};
5
+ use anyhow::{Error, Result};
6
6
  use lora_ast::{Direction, Document};
7
7
  use lora_executor::{lora_value_to_property, ExecuteOptions, LoraValue, QueryResult};
8
8
  use lora_parser::parse_query;
@@ -48,6 +48,24 @@ pub trait QueryRunner: Send + Sync + 'static {
48
48
  options: Option<ExecuteOptions>,
49
49
  ) -> Result<QueryResult, LoraError>;
50
50
 
51
+ /// Execute a query with bound parameters. Implementors that cannot bind
52
+ /// parameters should reject non-empty maps instead of silently ignoring
53
+ /// them.
54
+ fn execute_with_params(
55
+ &self,
56
+ query: &str,
57
+ options: Option<ExecuteOptions>,
58
+ params: BTreeMap<String, LoraValue>,
59
+ ) -> Result<QueryResult, LoraError> {
60
+ if params.is_empty() {
61
+ return self.execute(query, options);
62
+ }
63
+ Err(LoraError::new(
64
+ crate::error::LoraErrorCode::InvalidParams,
65
+ "query parameters are not supported by this database runner",
66
+ ))
67
+ }
68
+
51
69
  /// Compile a query and return its plan without executing it.
52
70
  fn explain(
53
71
  &self,
@@ -130,8 +148,8 @@ pub(crate) fn values_to_properties(values: BTreeMap<String, LoraValue>) -> Resul
130
148
  values
131
149
  .into_iter()
132
150
  .map(|(key, value)| {
133
- let value = lora_value_to_property(value).map_err(|e| anyhow!(e))?;
134
- Ok((key, value))
151
+ let value = lora_value_to_property(value).map_err(Error::from)?;
152
+ Ok((lora_store::intern_owned(key), value))
135
153
  })
136
154
  .collect()
137
155
  }
@@ -260,20 +278,22 @@ where
260
278
  f(&*snapshot)
261
279
  }
262
280
 
263
- /// Run a closure with an exclusive borrow of the underlying store. Reserved
264
- /// for admin paths (restore, bulk load); regular mutation goes through
265
- /// `execute_with_params`. The closure mutates the live graph in place
266
- /// via `Arc::make_mut`, so callers don't pay an O(N+E) snapshot clone
267
- /// just to overwrite the graph. Concurrent readers, when present,
268
- /// force a single CoW clone and keep observing their pre-mutation
269
- /// snapshot via the `Arc<S>` they already hold.
281
+ /// Run a closure with an exclusive borrow of a staged store, then publish
282
+ /// it atomically after the closure returns. Reserved for admin paths;
283
+ /// regular mutation goes through `execute_with_params`.
284
+ ///
285
+ /// If the closure panics, the staged copy is dropped and the live store is
286
+ /// left untouched.
270
287
  pub fn with_store_mut<R>(&self, f: impl FnOnce(&mut S) -> R) -> R {
271
- let _lock = self
288
+ let _writer_lock = self
272
289
  .writer
273
290
  .lock()
274
291
  .unwrap_or_else(|poisoned| poisoned.into_inner());
275
- let mut handle = self.store.write();
276
- f(handle.as_mut())
292
+ let snapshot = self.store.load_full();
293
+ let mut staged: S = (*snapshot).clone();
294
+ let result = f(&mut staged);
295
+ self.store.store(Arc::new(staged));
296
+ result
277
297
  }
278
298
  }
279
299
 
@@ -289,6 +309,15 @@ where
289
309
  Database::execute(self, query, options)
290
310
  }
291
311
 
312
+ fn execute_with_params(
313
+ &self,
314
+ query: &str,
315
+ options: Option<ExecuteOptions>,
316
+ params: BTreeMap<String, LoraValue>,
317
+ ) -> Result<QueryResult, LoraError> {
318
+ Database::execute_with_params(self, query, options, params)
319
+ }
320
+
292
321
  fn explain(
293
322
  &self,
294
323
  query: &str,