lora-python 0.26.0__tar.gz → 0.26.1__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 (432) hide show
  1. {lora_python-0.26.0 → lora_python-0.26.1}/Cargo.lock +19 -19
  2. {lora_python-0.26.0 → lora_python-0.26.1}/Cargo.toml +13 -13
  3. {lora_python-0.26.0 → lora_python-0.26.1}/PKG-INFO +1 -1
  4. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/examples/storage_baseline.rs +71 -13
  5. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/streaming_scans.rs +19 -0
  6. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/pull/scan.rs +93 -87
  7. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/encoded.rs +134 -298
  8. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/lib.rs +1 -0
  9. lora_python-0.26.1/crates/lora-store/src/memory/adjacency.rs +724 -0
  10. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/memory/chunked_vec.rs +5 -19
  11. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/memory/constraint_enforce.rs +173 -51
  12. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/memory/cow.rs +1 -1
  13. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/memory/graph.rs +160 -182
  14. lora_python-0.26.1/crates/lora-store/src/memory/id_bitmap.rs +493 -0
  15. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/memory/id_map.rs +1 -1
  16. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/memory/id_set.rs +382 -163
  17. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/memory/impls.rs +28 -39
  18. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/memory/mem_report.rs +32 -42
  19. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/memory/mod.rs +16 -3
  20. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/memory/property_index.rs +68 -8
  21. lora_python-0.26.1/crates/lora-store/src/memory/record_slab.rs +887 -0
  22. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/memory/snapshot.rs +4 -4
  23. lora_python-0.26.1/crates/lora-store/src/memory/test_util.rs +9 -0
  24. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/types/view.rs +3 -3
  25. lora_python-0.26.1/crates/lora-store/src/varint.rs +105 -0
  26. {lora_python-0.26.0 → lora_python-0.26.1}/pyproject.toml +1 -1
  27. lora_python-0.26.0/crates/lora-store/src/memory/adjacency.rs +0 -335
  28. {lora_python-0.26.0 → lora_python-0.26.1}/LICENSE +0 -0
  29. {lora_python-0.26.0 → lora_python-0.26.1}/README.md +0 -0
  30. {lora_python-0.26.0 → lora_python-0.26.1}/crates/bindings/lora-binding-buffer/Cargo.toml +0 -0
  31. {lora_python-0.26.0 → lora_python-0.26.1}/crates/bindings/lora-binding-buffer/src/lib.rs +0 -0
  32. {lora_python-0.26.0 → lora_python-0.26.1}/crates/bindings/lora-binding-buffer/src/stream.rs +0 -0
  33. {lora_python-0.26.0 → lora_python-0.26.1}/crates/bindings/lora-python/.gitignore +0 -0
  34. {lora_python-0.26.0 → lora_python-0.26.1}/crates/bindings/lora-python/Cargo.toml +0 -0
  35. {lora_python-0.26.0 → lora_python-0.26.1}/crates/bindings/lora-python/LICENSE +0 -0
  36. {lora_python-0.26.0 → lora_python-0.26.1}/crates/bindings/lora-python/README.md +0 -0
  37. {lora_python-0.26.0 → lora_python-0.26.1}/crates/bindings/lora-python/build.rs +0 -0
  38. {lora_python-0.26.0 → lora_python-0.26.1}/crates/bindings/lora-python/examples/async_demo.py +0 -0
  39. {lora_python-0.26.0 → lora_python-0.26.1}/crates/bindings/lora-python/examples/basic.py +0 -0
  40. {lora_python-0.26.0 → lora_python-0.26.1}/crates/bindings/lora-python/src/errors.rs +0 -0
  41. {lora_python-0.26.0 → lora_python-0.26.1}/crates/bindings/lora-python/src/from_python.rs +0 -0
  42. {lora_python-0.26.0 → lora_python-0.26.1}/crates/bindings/lora-python/src/gil.rs +0 -0
  43. {lora_python-0.26.0 → lora_python-0.26.1}/crates/bindings/lora-python/src/lib.rs +0 -0
  44. {lora_python-0.26.0 → lora_python-0.26.1}/crates/bindings/lora-python/src/stream.rs +0 -0
  45. {lora_python-0.26.0 → lora_python-0.26.1}/crates/bindings/lora-python/src/to_python.rs +0 -0
  46. {lora_python-0.26.0 → lora_python-0.26.1}/crates/bindings/lora-python/tests/test_async.py +0 -0
  47. {lora_python-0.26.0 → lora_python-0.26.1}/crates/bindings/lora-python/tests/test_concurrency.py +0 -0
  48. {lora_python-0.26.0 → lora_python-0.26.1}/crates/bindings/lora-python/tests/test_explain_profile.py +0 -0
  49. {lora_python-0.26.0 → lora_python-0.26.1}/crates/bindings/lora-python/tests/test_sync.py +0 -0
  50. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-analyzer/Cargo.toml +0 -0
  51. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-analyzer/src/analyzer/builtin_signatures.rs +0 -0
  52. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-analyzer/src/analyzer/clauses.rs +0 -0
  53. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-analyzer/src/analyzer/expressions.rs +0 -0
  54. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-analyzer/src/analyzer/mod.rs +0 -0
  55. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-analyzer/src/analyzer/patterns.rs +0 -0
  56. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-analyzer/src/analyzer/state.rs +0 -0
  57. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-analyzer/src/analyzer/tests.rs +0 -0
  58. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-analyzer/src/errors.rs +0 -0
  59. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-analyzer/src/lib.rs +0 -0
  60. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-analyzer/src/resolved.rs +0 -0
  61. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-analyzer/src/scope.rs +0 -0
  62. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-analyzer/src/symbols.rs +0 -0
  63. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-analyzer/tests/error_messages.rs +0 -0
  64. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-ast/Cargo.toml +0 -0
  65. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-ast/src/ast.rs +0 -0
  66. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-ast/src/lib.rs +0 -0
  67. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-builtins-meta/Cargo.toml +0 -0
  68. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-builtins-meta/src/lib.rs +0 -0
  69. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-compiler/Cargo.toml +0 -0
  70. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-compiler/src/lib.rs +0 -0
  71. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-compiler/src/logical.rs +0 -0
  72. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-compiler/src/optimizer.rs +0 -0
  73. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-compiler/src/pattern.rs +0 -0
  74. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-compiler/src/physical.rs +0 -0
  75. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-compiler/src/plan_tree.rs +0 -0
  76. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-compiler/src/planner.rs +0 -0
  77. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/Cargo.toml +0 -0
  78. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/benches/README.md +0 -0
  79. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/benches/advanced.rs +0 -0
  80. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/benches/concurrency_guard.rs +0 -0
  81. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/benches/concurrent.rs +0 -0
  82. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/benches/engine.rs +0 -0
  83. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/benches/fixtures.rs +0 -0
  84. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/benches/index_acceleration.rs +0 -0
  85. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/benches/memory.rs +0 -0
  86. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/benches/memory_baseline.json +0 -0
  87. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/benches/perf_smoke.rs +0 -0
  88. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/benches/perf_smoke_baseline.json +0 -0
  89. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/benches/query_implementations.rs +0 -0
  90. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/benches/realistic.rs +0 -0
  91. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/benches/scale.rs +0 -0
  92. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/benches/temporal_spatial.rs +0 -0
  93. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/benches/wal.rs +0 -0
  94. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/examples/bulk_probe.rs +0 -0
  95. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/examples/carried_probe.rs +0 -0
  96. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/examples/heap_probe.rs +0 -0
  97. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/examples/keyset_probe.rs +0 -0
  98. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/examples/optional_probe.rs +0 -0
  99. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/examples/perf_probe.rs +0 -0
  100. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/examples/pushdown_probe.rs +0 -0
  101. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/src/changes/build.rs +0 -0
  102. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/src/changes/history.rs +0 -0
  103. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/src/changes/mod.rs +0 -0
  104. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/src/database/builder.rs +0 -0
  105. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/src/database/changes.rs +0 -0
  106. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/src/database/compile.rs +0 -0
  107. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/src/database/execute.rs +0 -0
  108. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/src/database/explain.rs +0 -0
  109. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/src/database/graph_api.rs +0 -0
  110. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/src/database/mod.rs +0 -0
  111. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/src/database/occ.rs +0 -0
  112. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/src/database/procedures.rs +0 -0
  113. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/src/database/profile.rs +0 -0
  114. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/src/database/pull_mode.rs +0 -0
  115. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/src/database/replay.rs +0 -0
  116. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/src/database/row_projection.rs +0 -0
  117. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/src/database/schema.rs +0 -0
  118. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/src/database/show_pipeline.rs +0 -0
  119. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/src/database/stream.rs +0 -0
  120. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/src/database/write_guard.rs +0 -0
  121. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/src/durable_io.rs +0 -0
  122. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/src/error.rs +0 -0
  123. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/src/explain.rs +0 -0
  124. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/src/io.rs +0 -0
  125. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/src/lib.rs +0 -0
  126. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/src/live_store.rs +0 -0
  127. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/src/named.rs +0 -0
  128. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/src/plan_cache.rs +0 -0
  129. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/src/snapshot/json.rs +0 -0
  130. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/src/snapshot/mod.rs +0 -0
  131. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/src/snapshot/store.rs +0 -0
  132. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/src/stream.rs +0 -0
  133. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/src/transaction.rs +0 -0
  134. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/src/wal/admin.rs +0 -0
  135. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/src/wal/archive/format.rs +0 -0
  136. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/src/wal/archive/lock.rs +0 -0
  137. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/src/wal/archive/platform.rs +0 -0
  138. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/src/wal/archive/worker.rs +0 -0
  139. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/src/wal/archive/workspace.rs +0 -0
  140. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/src/wal/archive.rs +0 -0
  141. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/src/wal/mod.rs +0 -0
  142. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/src/wal/write_scope.rs +0 -0
  143. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/advanced_queries.rs +0 -0
  144. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/aggregate_semantics.rs +0 -0
  145. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/aggregation.rs +0 -0
  146. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/and_or_short_circuit.rs +0 -0
  147. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/backend_stub.rs +0 -0
  148. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/bbox_antimeridian.rs +0 -0
  149. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/binary.rs +0 -0
  150. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/bit_shifts.rs +0 -0
  151. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/borrowed_variable_reads.rs +0 -0
  152. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/builtin_namespaces.rs +0 -0
  153. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/call_subquery_writes.rs +0 -0
  154. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/carried_value_sharing.rs +0 -0
  155. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/change_feed.rs +0 -0
  156. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/collect_nulls.rs +0 -0
  157. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/comparison_ordering.rs +0 -0
  158. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/constraints.rs +0 -0
  159. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/create.rs +0 -0
  160. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/cypher_compat.rs +0 -0
  161. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/deferred_existence_end_state.rs +0 -0
  162. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/docs_examples.rs +0 -0
  163. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/early_limit.rs +0 -0
  164. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/empty_ranges.rs +0 -0
  165. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/entity_property_values.rs +0 -0
  166. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/error_messages.rs +0 -0
  167. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/errors.rs +0 -0
  168. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/explain_estimates.rs +0 -0
  169. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/explain_profile.rs +0 -0
  170. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/expression_semantics.rs +0 -0
  171. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/expressions.rs +0 -0
  172. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/foreach.rs +0 -0
  173. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/fulltext_index.rs +0 -0
  174. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/fulltext_list_properties.rs +0 -0
  175. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/functions_extended.rs +0 -0
  176. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/grouping_key_identity.rs +0 -0
  177. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/id_seek.rs +0 -0
  178. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/index_acceleration.rs +0 -0
  179. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/integer_literals.rs +0 -0
  180. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/invariants.rs +0 -0
  181. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/limit_skip_counts.rs +0 -0
  182. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/managed_snapshots.rs +0 -0
  183. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/match.rs +0 -0
  184. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/merge.rs +0 -0
  185. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/merge_bound_end.rs +0 -0
  186. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/missing_parameters.rs +0 -0
  187. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/nested_aggregates.rs +0 -0
  188. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/null_pattern_variables.rs +0 -0
  189. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/null_properties_and_deferred_existence.rs +0 -0
  190. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/optional_match_correlated.rs +0 -0
  191. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/optional_match_leading.rs +0 -0
  192. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/order_by_aggregates.rs +0 -0
  193. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/order_by_grouping_key_parts.rs +0 -0
  194. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/order_by_index.rs +0 -0
  195. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/order_limit_semantics.rs +0 -0
  196. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/ordering.rs +0 -0
  197. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/parameters.rs +0 -0
  198. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/parser.rs +0 -0
  199. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/paths.rs +0 -0
  200. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/pattern_subquery_property_seek.rs +0 -0
  201. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/pattern_subquery_rel_properties.rs +0 -0
  202. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/pattern_subquery_scope.rs +0 -0
  203. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/pattern_subquery_var_length.rs +0 -0
  204. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/pattern_subquery_where_seek.rs +0 -0
  205. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/planner_pushdown.rs +0 -0
  206. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/planner_stats.rs +0 -0
  207. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/procedure_yield.rs +0 -0
  208. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/projection.rs +0 -0
  209. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/range_scan_other_kinds.rs +0 -0
  210. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/restart_index_state.rs +0 -0
  211. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/scale.rs +0 -0
  212. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/schema.rs +0 -0
  213. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/schema_in_transaction.rs +0 -0
  214. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/seeds.rs +0 -0
  215. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/shared_index_value_writes.rs +0 -0
  216. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/snapshot.rs +0 -0
  217. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/sort_limit_probe.rs +0 -0
  218. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/spatial.rs +0 -0
  219. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/starts_with_range_seek.rs +0 -0
  220. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/statement_atomicity.rs +0 -0
  221. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/string_number_addition.rs +0 -0
  222. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/sum_empty.rs +0 -0
  223. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/temporal.rs +0 -0
  224. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/temporal_constructor_functions.rs +0 -0
  225. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/temporal_constructors.rs +0 -0
  226. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/temporal_map_components.rs +0 -0
  227. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/temporal_range_index.rs +0 -0
  228. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/temporal_strings.rs +0 -0
  229. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/temporal_time_zones.rs +0 -0
  230. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/temporal_zone_accessors.rs +0 -0
  231. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/test_helpers.rs +0 -0
  232. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/timeouts.rs +0 -0
  233. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/transactions.rs +0 -0
  234. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/types_advanced.rs +0 -0
  235. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/union.rs +0 -0
  236. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/unknown_names.rs +0 -0
  237. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/unwind_ingestion.rs +0 -0
  238. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/update.rs +0 -0
  239. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/var_length_bound_endpoint.rs +0 -0
  240. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/var_length_hop_ranges.rs +0 -0
  241. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/vector_index.rs +0 -0
  242. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/vectors.rs +0 -0
  243. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/wal.rs +0 -0
  244. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/where_clause.rs +0 -0
  245. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/with.rs +0 -0
  246. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/with_predicates.rs +0 -0
  247. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/write_path_bindings.rs +0 -0
  248. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/write_results.rs +0 -0
  249. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-database/tests/write_scaling.rs +0 -0
  250. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/Cargo.toml +0 -0
  251. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/cancel.rs +0 -0
  252. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/errors.rs +0 -0
  253. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/eval/binops.rs +0 -0
  254. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/eval/builtins/bits_ns.rs +0 -0
  255. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/eval/builtins/bytes_ns.rs +0 -0
  256. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/eval/builtins/cast_ns.rs +0 -0
  257. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/eval/builtins/crypto.rs +0 -0
  258. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/eval/builtins/edge.rs +0 -0
  259. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/eval/builtins/geo.rs +0 -0
  260. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/eval/builtins/index_ns.rs +0 -0
  261. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/eval/builtins/json_ns.rs +0 -0
  262. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/eval/builtins/list.rs +0 -0
  263. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/eval/builtins/map_ns.rs +0 -0
  264. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/eval/builtins/math_ns.rs +0 -0
  265. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/eval/builtins/mod.rs +0 -0
  266. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/eval/builtins/node.rs +0 -0
  267. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/eval/builtins/number.rs +0 -0
  268. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/eval/builtins/path.rs +0 -0
  269. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/eval/builtins/string_ns.rs +0 -0
  270. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/eval/builtins/temporal.rs +0 -0
  271. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/eval/builtins/temporal_build.rs +0 -0
  272. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/eval/builtins/text.rs +0 -0
  273. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/eval/builtins/type_ns.rs +0 -0
  274. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/eval/builtins/uuid_ns.rs +0 -0
  275. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/eval/builtins/value.rs +0 -0
  276. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/eval/builtins/vector_ns.rs +0 -0
  277. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/eval/errors.rs +0 -0
  278. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/eval/expr.rs +0 -0
  279. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/eval/functions.rs +0 -0
  280. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/eval/mod.rs +0 -0
  281. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/eval/point.rs +0 -0
  282. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/eval/regex.rs +0 -0
  283. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/eval/vector.rs +0 -0
  284. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/executor/aggregation.rs +0 -0
  285. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/executor/helpers.rs +0 -0
  286. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/executor/immutable.rs +0 -0
  287. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/executor/mod.rs +0 -0
  288. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/executor/mutable.rs +0 -0
  289. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/executor/optional.rs +0 -0
  290. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/executor/sort.rs +0 -0
  291. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/lib.rs +0 -0
  292. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/profile.rs +0 -0
  293. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/pull/aggregate.rs +0 -0
  294. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/pull/call_subquery.rs +0 -0
  295. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/pull/columns.rs +0 -0
  296. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/pull/context.rs +0 -0
  297. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/pull/expand.rs +0 -0
  298. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/pull/filter.rs +0 -0
  299. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/pull/hydration.rs +0 -0
  300. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/pull/mod.rs +0 -0
  301. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/pull/mutable.rs +0 -0
  302. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/pull/optional.rs +0 -0
  303. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/pull/path.rs +0 -0
  304. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/pull/projection.rs +0 -0
  305. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/pull/shape.rs +0 -0
  306. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/pull/sort.rs +0 -0
  307. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/pull/source.rs +0 -0
  308. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/pull/tests.rs +0 -0
  309. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/pull/traits.rs +0 -0
  310. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/pull/union.rs +0 -0
  311. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/src/value.rs +0 -0
  312. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-executor/tests/error_messages.rs +0 -0
  313. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-io/Cargo.toml +0 -0
  314. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-io/src/csv.rs +0 -0
  315. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-io/src/format.rs +0 -0
  316. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-io/src/json_array.rs +0 -0
  317. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-io/src/jsonl.rs +0 -0
  318. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-io/src/lib.rs +0 -0
  319. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-io/src/mapping.rs +0 -0
  320. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-io/src/value_json.rs +0 -0
  321. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-parser/Cargo.toml +0 -0
  322. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-parser/src/cypher.pest +0 -0
  323. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-parser/src/errors.rs +0 -0
  324. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-parser/src/lib.rs +0 -0
  325. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-parser/src/parser/clauses.rs +0 -0
  326. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-parser/src/parser/expressions.rs +0 -0
  327. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-parser/src/parser/literals.rs +0 -0
  328. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-parser/src/parser/mod.rs +0 -0
  329. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-parser/src/parser/patterns.rs +0 -0
  330. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-parser/src/parser/query.rs +0 -0
  331. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-parser/src/parser/schema.rs +0 -0
  332. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-parser/src/parser/tests.rs +0 -0
  333. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-parser/src/parser/util.rs +0 -0
  334. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-parser/tests/error_messages.rs +0 -0
  335. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-snapshot/Cargo.toml +0 -0
  336. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-snapshot/src/body.rs +0 -0
  337. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-snapshot/src/codec.rs +0 -0
  338. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-snapshot/src/columnar.rs +0 -0
  339. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-snapshot/src/envelope.rs +0 -0
  340. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-snapshot/src/errors.rs +0 -0
  341. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-snapshot/src/format.rs +0 -0
  342. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-snapshot/src/lib.rs +0 -0
  343. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-snapshot/src/options.rs +0 -0
  344. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-snapshot/src/tests.rs +0 -0
  345. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-snapshot/src/transform.rs +0 -0
  346. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-snapshot/src/view.rs +0 -0
  347. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-snapshot/tests/error_messages.rs +0 -0
  348. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/Cargo.toml +0 -0
  349. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/codec.rs +0 -0
  350. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/dict.rs +0 -0
  351. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/intern.rs +0 -0
  352. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/lock_table.rs +0 -0
  353. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/memory/constraint_catalog.rs +0 -0
  354. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/memory/distinct_stats.rs +0 -0
  355. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/memory/entity_index_store.rs +0 -0
  356. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/memory/fulltext_index.rs +0 -0
  357. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/memory/hnsw.rs +0 -0
  358. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/memory/index_catalog.rs +0 -0
  359. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/memory/model_tests.rs +0 -0
  360. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/memory/point_index.rs +0 -0
  361. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/memory/secondary_index_maintenance.rs +0 -0
  362. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/memory/sorted_property_index.rs +0 -0
  363. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/memory/stats.rs +0 -0
  364. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/memory/tests.rs +0 -0
  365. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/memory/text_index.rs +0 -0
  366. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/memory/vector_index.rs +0 -0
  367. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/mutation.rs +0 -0
  368. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/snapshot.rs +0 -0
  369. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/traits.rs +0 -0
  370. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/types/binary/mod.rs +0 -0
  371. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/types/binary/tests.rs +0 -0
  372. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/types/binary/traits.rs +0 -0
  373. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/types/binary/types.rs +0 -0
  374. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/types/graph.rs +0 -0
  375. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/types/mod.rs +0 -0
  376. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/types/name.rs +0 -0
  377. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/types/property_map.rs +0 -0
  378. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/types/property_value.rs +0 -0
  379. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/types/spatial/bbox.rs +0 -0
  380. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/types/spatial/distance.rs +0 -0
  381. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/types/spatial/mod.rs +0 -0
  382. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/types/spatial/point.rs +0 -0
  383. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/types/spatial/srid.rs +0 -0
  384. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/types/spatial/tests.rs +0 -0
  385. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/types/temporal/calendar.rs +0 -0
  386. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/types/temporal/date.rs +0 -0
  387. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/types/temporal/datetime.rs +0 -0
  388. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/types/temporal/duration.rs +0 -0
  389. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/types/temporal/format.rs +0 -0
  390. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/types/temporal/mod.rs +0 -0
  391. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/types/temporal/parsing.rs +0 -0
  392. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/types/temporal/time.rs +0 -0
  393. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/types/temporal/zone.rs +0 -0
  394. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/types/vector/build.rs +0 -0
  395. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/types/vector/mod.rs +0 -0
  396. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/types/vector/similarity.rs +0 -0
  397. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/types/vector/tests.rs +0 -0
  398. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/src/types/vector/types.rs +0 -0
  399. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-store/tests/error_messages.rs +0 -0
  400. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-wal/Cargo.toml +0 -0
  401. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-wal/src/codec/decode.rs +0 -0
  402. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-wal/src/codec/encode.rs +0 -0
  403. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-wal/src/codec/format.rs +0 -0
  404. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-wal/src/codec/mod.rs +0 -0
  405. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-wal/src/codec/tests.rs +0 -0
  406. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-wal/src/config.rs +0 -0
  407. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-wal/src/dir.rs +0 -0
  408. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-wal/src/errors.rs +0 -0
  409. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-wal/src/history.rs +0 -0
  410. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-wal/src/io.rs +0 -0
  411. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-wal/src/lib.rs +0 -0
  412. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-wal/src/lock.rs +0 -0
  413. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-wal/src/lsn.rs +0 -0
  414. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-wal/src/record.rs +0 -0
  415. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-wal/src/recorder/errors.rs +0 -0
  416. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-wal/src/recorder/mirror.rs +0 -0
  417. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-wal/src/recorder/mod.rs +0 -0
  418. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-wal/src/recorder/recorder.rs +0 -0
  419. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-wal/src/recorder/tests.rs +0 -0
  420. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-wal/src/replay.rs +0 -0
  421. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-wal/src/segment.rs +0 -0
  422. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-wal/src/testing.rs +0 -0
  423. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-wal/src/wal/group_flusher.rs +0 -0
  424. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-wal/src/wal/mod.rs +0 -0
  425. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-wal/src/wal/tests.rs +0 -0
  426. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-wal/src/wal/wal.rs +0 -0
  427. {lora_python-0.26.0 → lora_python-0.26.1}/crates/lora-wal/tests/error_messages.rs +0 -0
  428. {lora_python-0.26.0 → lora_python-0.26.1}/python/lora_python/__init__.py +0 -0
  429. {lora_python-0.26.0 → lora_python-0.26.1}/python/lora_python/_async.py +0 -0
  430. {lora_python-0.26.0 → lora_python-0.26.1}/python/lora_python/_native.pyi +0 -0
  431. {lora_python-0.26.0 → lora_python-0.26.1}/python/lora_python/py.typed +0 -0
  432. {lora_python-0.26.0 → lora_python-0.26.1}/python/lora_python/types.py +0 -0
@@ -854,7 +854,7 @@ checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897"
854
854
 
855
855
  [[package]]
856
856
  name = "lora-analyzer"
857
- version = "0.26.0"
857
+ version = "0.26.1"
858
858
  dependencies = [
859
859
  "lora-ast",
860
860
  "lora-builtins-meta",
@@ -865,14 +865,14 @@ dependencies = [
865
865
 
866
866
  [[package]]
867
867
  name = "lora-ast"
868
- version = "0.26.0"
868
+ version = "0.26.1"
869
869
  dependencies = [
870
870
  "smallvec 2.0.0-alpha.12",
871
871
  ]
872
872
 
873
873
  [[package]]
874
874
  name = "lora-binding-buffer"
875
- version = "0.26.0"
875
+ version = "0.26.1"
876
876
  dependencies = [
877
877
  "lora-database",
878
878
  "lora-store",
@@ -880,11 +880,11 @@ dependencies = [
880
880
 
881
881
  [[package]]
882
882
  name = "lora-builtins-meta"
883
- version = "0.26.0"
883
+ version = "0.26.1"
884
884
 
885
885
  [[package]]
886
886
  name = "lora-compiler"
887
- version = "0.26.0"
887
+ version = "0.26.1"
888
888
  dependencies = [
889
889
  "lora-analyzer",
890
890
  "lora-ast",
@@ -893,7 +893,7 @@ dependencies = [
893
893
 
894
894
  [[package]]
895
895
  name = "lora-database"
896
- version = "0.26.0"
896
+ version = "0.26.1"
897
897
  dependencies = [
898
898
  "anyhow",
899
899
  "chacha20poly1305",
@@ -918,7 +918,7 @@ dependencies = [
918
918
 
919
919
  [[package]]
920
920
  name = "lora-executor"
921
- version = "0.26.0"
921
+ version = "0.26.1"
922
922
  dependencies = [
923
923
  "blake3",
924
924
  "crc32fast",
@@ -941,7 +941,7 @@ dependencies = [
941
941
 
942
942
  [[package]]
943
943
  name = "lora-ffi"
944
- version = "0.26.0"
944
+ version = "0.26.1"
945
945
  dependencies = [
946
946
  "anyhow",
947
947
  "lora-binding-buffer",
@@ -953,7 +953,7 @@ dependencies = [
953
953
 
954
954
  [[package]]
955
955
  name = "lora-io"
956
- version = "0.26.0"
956
+ version = "0.26.1"
957
957
  dependencies = [
958
958
  "lora-executor",
959
959
  "lora-store",
@@ -964,7 +964,7 @@ dependencies = [
964
964
 
965
965
  [[package]]
966
966
  name = "lora-node"
967
- version = "0.26.0"
967
+ version = "0.26.1"
968
968
  dependencies = [
969
969
  "anyhow",
970
970
  "lora-binding-buffer",
@@ -979,7 +979,7 @@ dependencies = [
979
979
 
980
980
  [[package]]
981
981
  name = "lora-parser"
982
- version = "0.26.0"
982
+ version = "0.26.1"
983
983
  dependencies = [
984
984
  "lora-ast",
985
985
  "pest",
@@ -990,7 +990,7 @@ dependencies = [
990
990
 
991
991
  [[package]]
992
992
  name = "lora-python"
993
- version = "0.26.0"
993
+ version = "0.26.1"
994
994
  dependencies = [
995
995
  "anyhow",
996
996
  "lora-binding-buffer",
@@ -1003,7 +1003,7 @@ dependencies = [
1003
1003
 
1004
1004
  [[package]]
1005
1005
  name = "lora-query-wasm"
1006
- version = "0.26.0"
1006
+ version = "0.26.1"
1007
1007
  dependencies = [
1008
1008
  "console_error_panic_hook",
1009
1009
  "js-sys",
@@ -1017,7 +1017,7 @@ dependencies = [
1017
1017
 
1018
1018
  [[package]]
1019
1019
  name = "lora-server"
1020
- version = "0.26.0"
1020
+ version = "0.26.1"
1021
1021
  dependencies = [
1022
1022
  "anyhow",
1023
1023
  "axum",
@@ -1032,7 +1032,7 @@ dependencies = [
1032
1032
 
1033
1033
  [[package]]
1034
1034
  name = "lora-snapshot"
1035
- version = "0.26.0"
1035
+ version = "0.26.1"
1036
1036
  dependencies = [
1037
1037
  "argon2",
1038
1038
  "blake3",
@@ -1047,7 +1047,7 @@ dependencies = [
1047
1047
 
1048
1048
  [[package]]
1049
1049
  name = "lora-store"
1050
- version = "0.26.0"
1050
+ version = "0.26.1"
1051
1051
  dependencies = [
1052
1052
  "crc32fast",
1053
1053
  "jiff",
@@ -1062,7 +1062,7 @@ dependencies = [
1062
1062
 
1063
1063
  [[package]]
1064
1064
  name = "lora-wal"
1065
- version = "0.26.0"
1065
+ version = "0.26.1"
1066
1066
  dependencies = [
1067
1067
  "crc32fast",
1068
1068
  "lora-store",
@@ -1072,7 +1072,7 @@ dependencies = [
1072
1072
 
1073
1073
  [[package]]
1074
1074
  name = "lora-wasm"
1075
- version = "0.26.0"
1075
+ version = "0.26.1"
1076
1076
  dependencies = [
1077
1077
  "anyhow",
1078
1078
  "console_error_panic_hook",
@@ -1088,7 +1088,7 @@ dependencies = [
1088
1088
 
1089
1089
  [[package]]
1090
1090
  name = "lora_ruby"
1091
- version = "0.26.0"
1091
+ version = "0.26.1"
1092
1092
  dependencies = [
1093
1093
  "anyhow",
1094
1094
  "lora-database",
@@ -4,7 +4,7 @@ resolver = "2"
4
4
 
5
5
  [workspace.package]
6
6
  edition = "2021"
7
- version = "0.26.0"
7
+ version = "0.26.1"
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.26.0" }
19
- lora-parser = { path = "crates/lora-parser", version = "=0.26.0" }
20
- lora-builtins-meta = { path = "crates/lora-builtins-meta", version = "=0.26.0" }
21
- lora-analyzer = { path = "crates/lora-analyzer", version = "=0.26.0" }
22
- lora-compiler = { path = "crates/lora-compiler", version = "=0.26.0" }
23
- lora-store = { path = "crates/lora-store", version = "=0.26.0" }
24
- lora-snapshot = { path = "crates/lora-snapshot", version = "=0.26.0", default-features = false }
25
- lora-io = { path = "crates/lora-io", version = "=0.26.0" }
26
- lora-wal = { path = "crates/lora-wal", version = "=0.26.0" }
27
- lora-executor = { path = "crates/lora-executor", version = "=0.26.0", default-features = false }
28
- lora-database = { path = "crates/lora-database", version = "=0.26.0" }
29
- lora-binding-buffer = { path = "crates/bindings/lora-binding-buffer", version = "=0.26.0" }
18
+ lora-ast = { path = "crates/lora-ast", version = "=0.26.1" }
19
+ lora-parser = { path = "crates/lora-parser", version = "=0.26.1" }
20
+ lora-builtins-meta = { path = "crates/lora-builtins-meta", version = "=0.26.1" }
21
+ lora-analyzer = { path = "crates/lora-analyzer", version = "=0.26.1" }
22
+ lora-compiler = { path = "crates/lora-compiler", version = "=0.26.1" }
23
+ lora-store = { path = "crates/lora-store", version = "=0.26.1" }
24
+ lora-snapshot = { path = "crates/lora-snapshot", version = "=0.26.1", default-features = false }
25
+ lora-io = { path = "crates/lora-io", version = "=0.26.1" }
26
+ lora-wal = { path = "crates/lora-wal", version = "=0.26.1" }
27
+ lora-executor = { path = "crates/lora-executor", version = "=0.26.1", default-features = false }
28
+ lora-database = { path = "crates/lora-database", version = "=0.26.1" }
29
+ lora-binding-buffer = { path = "crates/bindings/lora-binding-buffer", version = "=0.26.1" }
30
30
 
31
31
  # External crates.
32
32
  anyhow = "1"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lora-python
3
- Version: 0.26.0
3
+ Version: 0.26.1
4
4
  Classifier: Programming Language :: Rust
5
5
  Classifier: Programming Language :: Python :: 3
6
6
  Classifier: Programming Language :: Python :: 3.8
@@ -12,6 +12,7 @@
12
12
  //!
13
13
  //! Modes:
14
14
  //! storage_baseline mem <variant> <N> one variant, retained heap + RSS
15
+ //! storage_baseline build <N> [rounds] bulk-build timings, node and relationship phases
15
16
  //! storage_baseline lat <N> latency suite + snapshot save/load
16
17
  //! storage_baseline wal <N> Cypher ingest with WAL, then recover()
17
18
  //!
@@ -36,12 +37,20 @@ use lora_store::{intern, GraphStorage, GraphStorageMut, Properties, PropertyValu
36
37
 
37
38
  struct Counting;
38
39
  static LIVE: AtomicIsize = AtomicIsize::new(0);
40
+ /// High-water mark of `LIVE` since the last [`reset_peak`].
41
+ static PEAK: AtomicIsize = AtomicIsize::new(0);
42
+
43
+ #[inline]
44
+ fn grew(delta: isize) {
45
+ let now = LIVE.fetch_add(delta, Ordering::Relaxed) + delta;
46
+ PEAK.fetch_max(now, Ordering::Relaxed);
47
+ }
39
48
 
40
49
  unsafe impl GlobalAlloc for Counting {
41
50
  unsafe fn alloc(&self, layout: Layout) -> *mut u8 {
42
51
  let p = System.alloc(layout);
43
52
  if !p.is_null() {
44
- LIVE.fetch_add(layout.size() as isize, Ordering::Relaxed);
53
+ grew(layout.size() as isize);
45
54
  }
46
55
  p
47
56
  }
@@ -52,10 +61,7 @@ unsafe impl GlobalAlloc for Counting {
52
61
  unsafe fn realloc(&self, ptr: *mut u8, layout: Layout, new_size: usize) -> *mut u8 {
53
62
  let p = System.realloc(ptr, layout, new_size);
54
63
  if !p.is_null() {
55
- LIVE.fetch_add(
56
- new_size as isize - layout.size() as isize,
57
- Ordering::Relaxed,
58
- );
64
+ grew(new_size as isize - layout.size() as isize);
59
65
  }
60
66
  p
61
67
  }
@@ -68,6 +74,15 @@ fn live() -> isize {
68
74
  LIVE.load(Ordering::Relaxed)
69
75
  }
70
76
 
77
+ /// Start a new high-water mark at the current live heap.
78
+ fn reset_peak() {
79
+ PEAK.store(live(), Ordering::Relaxed);
80
+ }
81
+
82
+ fn peak() -> isize {
83
+ PEAK.load(Ordering::Relaxed)
84
+ }
85
+
71
86
  fn rss_bytes() -> u64 {
72
87
  let out = std::process::Command::new("ps")
73
88
  .args(["-o", "rss=", "-p", &std::process::id().to_string()])
@@ -164,6 +179,34 @@ fn build(n: u64, props: Props, rels: bool, rel_props: bool) -> InMemoryGraph {
164
179
  g
165
180
  }
166
181
 
182
+ /// Bulk-build timings: the node phase and the relationship phase of
183
+ /// [`build`] separately, `rounds` times in one process (compare minimums).
184
+ fn build_mode(n: u64, rounds: usize) {
185
+ for round in 0..rounds {
186
+ let t = Instant::now();
187
+ let mut g = InMemoryGraph::new();
188
+ for i in 0..n {
189
+ g.create_node(vec!["Person".to_string()], node_props(i, Props::All));
190
+ }
191
+ let nodes_s = t.elapsed().as_secs_f64();
192
+ let t = Instant::now();
193
+ let w = intern("w");
194
+ for i in 0..n {
195
+ for k in 0..DEGREE {
196
+ let mut p = Properties::new();
197
+ p.insert(w.clone(), PropertyValue::Int(((i + k) % 100) as i64));
198
+ g.create_relationship(i, target(i, k, n), "KNOWS", p)
199
+ .expect("rel");
200
+ }
201
+ }
202
+ let rels_s = t.elapsed().as_secs_f64();
203
+ let t = Instant::now();
204
+ drop(g);
205
+ let drop_s = t.elapsed().as_secs_f64();
206
+ println!("build round={round} nodes_s={nodes_s:.3} rels_s={rels_s:.3} drop_s={drop_s:.3}");
207
+ }
208
+ }
209
+
167
210
  // ---------------------------------------------------------------------------
168
211
  // mem mode
169
212
  // ---------------------------------------------------------------------------
@@ -182,6 +225,9 @@ fn mem_mode(variant: &str, n: u64) {
182
225
  let rss0 = rss_bytes();
183
226
  let live0 = live();
184
227
  let t = Instant::now();
228
+ // Index variants: the index statement's heap high-water mark above
229
+ // what the graph holds once it returns (its temporaries).
230
+ let mut index_transient = None;
185
231
  let (nodes, rels, props_per_node, keep): (u64, u64, u64, Box<dyn std::any::Any>) = match variant
186
232
  {
187
233
  "bare" => (n, 0, 0, Box::new(build(n, Props::None, false, false))),
@@ -200,6 +246,7 @@ fn mem_mode(variant: &str, n: u64) {
200
246
  "range_idx" | "unique" | "hash_idx" | "range_idx_name" => {
201
247
  let g = build(n, Props::All, true, true);
202
248
  let db = Database::from_graph(g);
249
+ reset_peak();
203
250
  match variant {
204
251
  "range_idx" => run(&db, "CREATE INDEX person_id FOR (p:Person) ON (p.id)"),
205
252
  "range_idx_name" => run(&db, "CREATE INDEX person_name FOR (p:Person) ON (p.name)"),
@@ -216,6 +263,7 @@ fn mem_mode(variant: &str, n: u64) {
216
263
  }
217
264
  _ => unreachable!(),
218
265
  }
266
+ index_transient = Some(peak() - live());
219
267
  (n, n * DEGREE, 4, Box::new(db))
220
268
  }
221
269
  other => panic!("unknown variant {other}"),
@@ -223,19 +271,25 @@ fn mem_mode(variant: &str, n: u64) {
223
271
  let build_s = t.elapsed().as_secs_f64();
224
272
  let bytes = (live() - live0) as f64;
225
273
  let rss = rss_bytes().saturating_sub(rss0) as f64;
226
- let estimate = if let Some(g) = keep.downcast_ref::<InMemoryGraph>() {
227
- g.memory_estimate().total_bytes() as f64
228
- } else if let Some(db) = keep.downcast_ref::<Database<InMemoryGraph>>() {
229
- db.with_store(|g| g.memory_estimate().total_bytes()) as f64
274
+ let report = if let Some(g) = keep.downcast_ref::<InMemoryGraph>() {
275
+ Some(g.memory_estimate())
230
276
  } else {
231
- 0.0
277
+ keep.downcast_ref::<Database<InMemoryGraph>>()
278
+ .map(|db| db.with_store(|g| g.memory_estimate()))
232
279
  };
280
+ let estimate = report.as_ref().map_or(0.0, |r| r.total_bytes() as f64);
281
+ if std::env::var_os("MEM_REPORT").is_some() {
282
+ if let Some(r) = &report {
283
+ eprintln!("{r:#?}");
284
+ }
285
+ }
233
286
  println!(
234
287
  "mem variant={variant} nodes={nodes} rels={rels} props_per_node={props_per_node} \
235
288
  live_bytes={bytes:.0} rss_delta={rss:.0} estimate={estimate:.0} \
236
- live_per_element={:.1} rss_per_element={:.1} build_s={build_s:.2}",
289
+ live_per_element={:.1} rss_per_element={:.1} build_s={build_s:.2}{}",
237
290
  bytes / (nodes + rels) as f64,
238
- rss / (nodes + rels) as f64
291
+ rss / (nodes + rels) as f64,
292
+ index_transient.map_or(String::new(), |b| format!(" index_transient_bytes={b}")),
239
293
  );
240
294
  drop(keep);
241
295
  }
@@ -1255,6 +1309,10 @@ fn main() {
1255
1309
  let _ = Duration::ZERO;
1256
1310
  match args.get(1).map(String::as_str) {
1257
1311
  Some("mem") => mem_mode(&args[2], args[3].parse().unwrap()),
1312
+ Some("build") => build_mode(
1313
+ args[2].parse().unwrap(),
1314
+ args.get(3).map_or(5, |r| r.parse().unwrap()),
1315
+ ),
1258
1316
  Some("lat") => lat_mode(args[2].parse().unwrap()),
1259
1317
  Some("wal") => wal_mode(args[2].parse().unwrap()),
1260
1318
  Some("restart") => restart_mode(args[2].parse().unwrap()),
@@ -1264,7 +1322,7 @@ fn main() {
1264
1322
  Some("labels") => labels_mode(args[2].parse().unwrap()),
1265
1323
  Some("wide") => wide_mode(args[2].parse().unwrap()),
1266
1324
  _ => eprintln!(
1267
- "usage: storage_baseline mem <variant> <N> | lat <N> | wal <N> | restart <N> | idlat <N> | hop <N> | scan <N> | labels <L> | wide <W>"
1325
+ "usage: storage_baseline mem <variant> <N> | build <N> [rounds] | lat <N> | wal <N> | restart <N> | idlat <N> | hop <N> | scan <N> | labels <L> | wide <W>"
1268
1326
  ),
1269
1327
  }
1270
1328
  }
@@ -32,6 +32,25 @@ fn paged_scans_return_every_node_once() {
32
32
  db.assert_count("MATCH (n:Missing) RETURN n", 0);
33
33
  }
34
34
 
35
+ /// Pages start at 32 ids and double up to 1024: counts on and around
36
+ /// each boundary (32, 32 + 64, ..., and past the first 1024-id page).
37
+ #[test]
38
+ fn paged_scans_end_on_and_around_page_boundaries() {
39
+ for n in [1, 31, 32, 33, 96, 97, 2016, 2017, 3040, 3041] {
40
+ let db = TestDb::new();
41
+ db.run(&format!("UNWIND range(1, {n}) AS i CREATE (:L {{i: i}})"));
42
+ db.assert_count("MATCH (n:L) RETURN n", n);
43
+ db.assert_count("MATCH (n) RETURN n", n);
44
+ db.assert_count("MATCH (n:L) RETURN n LIMIT 33", n.min(33));
45
+ let expected: Vec<i64> = (1..=n as i64).collect();
46
+ assert_eq!(
47
+ db.sorted_ints("MATCH (n:L) RETURN n.i AS i", "i"),
48
+ expected,
49
+ "n = {n}"
50
+ );
51
+ }
52
+ }
53
+
35
54
  #[test]
36
55
  fn a_scan_feeding_a_write_does_not_see_that_write() {
37
56
  let db = seeded();
@@ -39,14 +39,8 @@ pub struct NodeScanSource<'a, S: GraphStorage> {
39
39
  /// The currently-active input row. `None` means the next call
40
40
  /// must pull a fresh row from upstream.
41
41
  cur_row: Option<Row>,
42
- /// One page of node ids for the current input row.
43
- cur_ids: Vec<NodeId>,
44
- /// Position into `cur_ids`.
45
- cur_idx: usize,
46
- /// Where the store's id scan resumes for the next page.
47
- scan_cursor: u64,
48
- /// The store has no more ids for the current input row.
49
- scan_done: bool,
42
+ /// The node ids of the current input row.
43
+ ids: ScanIds,
50
44
  /// Fetch ids a page at a time (see [`StableStoreScope`]); otherwise
51
45
  /// all of them before the first row.
52
46
  paged: bool,
@@ -54,9 +48,73 @@ pub struct NodeScanSource<'a, S: GraphStorage> {
54
48
  cur_emitted: bool,
55
49
  }
56
50
 
57
- /// Node ids fetched per page of a streaming scan: a scan holds this many
58
- /// ids at a time instead of the whole label.
51
+ /// Node ids fetched per page of a streaming scan: a scan holds at most
52
+ /// this many ids at a time instead of the whole label.
59
53
  const SCAN_PAGE: usize = 1024;
54
+ /// The first page of a scan. Pages double from here to [`SCAN_PAGE`], so a
55
+ /// `LIMIT 10` does not fetch a thousand ids.
56
+ const FIRST_SCAN_PAGE: usize = 32;
57
+
58
+ /// The node ids one input row scans: fetched from the store a page at a
59
+ /// time, pages doubling from [`FIRST_SCAN_PAGE`] to [`SCAN_PAGE`], or all
60
+ /// at once.
61
+ struct ScanIds {
62
+ /// The current page.
63
+ page: Vec<NodeId>,
64
+ /// Position into `page`.
65
+ idx: usize,
66
+ /// Where the store's id scan resumes for the next page.
67
+ cursor: u64,
68
+ /// Ids to fetch for the next page.
69
+ page_size: usize,
70
+ /// No page is left to fetch; the current one may still hold ids.
71
+ done: bool,
72
+ }
73
+
74
+ impl ScanIds {
75
+ fn new() -> Self {
76
+ Self {
77
+ page: Vec::new(),
78
+ idx: 0,
79
+ cursor: 0,
80
+ page_size: FIRST_SCAN_PAGE,
81
+ done: false,
82
+ }
83
+ }
84
+
85
+ /// Start over, for a new input row.
86
+ fn reset(&mut self) {
87
+ self.page.clear();
88
+ self.idx = 0;
89
+ self.cursor = 0;
90
+ self.page_size = FIRST_SCAN_PAGE;
91
+ self.done = false;
92
+ }
93
+
94
+ /// The next id of the current page.
95
+ #[inline]
96
+ fn next(&mut self) -> Option<NodeId> {
97
+ let id = *self.page.get(self.idx)?;
98
+ self.idx += 1;
99
+ Some(id)
100
+ }
101
+
102
+ /// Replace the page with the next ids carrying `label`, or of all
103
+ /// nodes.
104
+ fn fetch_page<S: GraphStorage>(&mut self, storage: &S, label: Option<&str>) {
105
+ self.page.clear();
106
+ self.idx = 0;
107
+ self.done = !storage.scan_node_ids(label, &mut self.cursor, self.page_size, &mut self.page);
108
+ self.page_size = (self.page_size * 2).min(SCAN_PAGE);
109
+ }
110
+
111
+ /// Replace the page with all of `ids`, the last page.
112
+ fn fetch_all(&mut self, ids: Vec<NodeId>) {
113
+ self.page = ids;
114
+ self.idx = 0;
115
+ self.done = true;
116
+ }
117
+ }
60
118
 
61
119
  thread_local! {
62
120
  /// Set while a read-only pipeline is being built: nothing writes to
@@ -106,21 +164,11 @@ impl<'a, S: GraphStorage> NodeScanSource<'a, S> {
106
164
  storage,
107
165
  var,
108
166
  cur_row: None,
109
- cur_ids: Vec::new(),
110
- cur_idx: 0,
111
- scan_cursor: 0,
112
- scan_done: false,
167
+ ids: ScanIds::new(),
113
168
  paged: store_is_stable(),
114
169
  cur_emitted: false,
115
170
  }
116
171
  }
117
-
118
- fn reset_scan(&mut self) {
119
- self.cur_ids.clear();
120
- self.cur_idx = 0;
121
- self.scan_cursor = 0;
122
- self.scan_done = false;
123
- }
124
172
  }
125
173
 
126
174
  impl<'a, S: GraphStorage> RowSource for NodeScanSource<'a, S> {
@@ -130,7 +178,7 @@ impl<'a, S: GraphStorage> RowSource for NodeScanSource<'a, S> {
130
178
  match self.upstream.next_row()? {
131
179
  Some(row) => {
132
180
  self.cur_row = Some(row);
133
- self.reset_scan();
181
+ self.ids.reset();
134
182
  self.cur_emitted = false;
135
183
  }
136
184
  None => return Ok(None),
@@ -138,7 +186,7 @@ impl<'a, S: GraphStorage> RowSource for NodeScanSource<'a, S> {
138
186
  }
139
187
 
140
188
  let Some(row_ref) = self.cur_row.as_ref() else {
141
- self.reset_scan();
189
+ self.ids.reset();
142
190
  self.cur_emitted = false;
143
191
  continue;
144
192
  };
@@ -165,31 +213,18 @@ impl<'a, S: GraphStorage> RowSource for NodeScanSource<'a, S> {
165
213
 
166
214
  // Unbound case: yield one row per node id, fetching the ids
167
215
  // a page at a time.
168
- if self.cur_idx >= self.cur_ids.len() {
169
- if self.scan_done {
170
- self.cur_row = None;
171
- continue;
172
- }
173
- self.cur_ids.clear();
174
- self.cur_idx = 0;
175
- if self.paged {
176
- self.scan_done = !self.storage.scan_node_ids(
177
- None,
178
- &mut self.scan_cursor,
179
- SCAN_PAGE,
180
- &mut self.cur_ids,
181
- );
182
- } else {
183
- self.cur_ids = self.storage.all_node_ids();
184
- self.scan_done = true;
185
- }
186
- continue;
216
+ if let Some(id) = self.ids.next() {
217
+ let mut new_row = row_ref.clone();
218
+ new_row.insert(self.var, LoraValue::Node(id));
219
+ return Ok(Some(new_row));
220
+ }
221
+ if self.ids.done {
222
+ self.cur_row = None;
223
+ } else if self.paged {
224
+ self.ids.fetch_page(self.storage, None);
225
+ } else {
226
+ self.ids.fetch_all(self.storage.all_node_ids());
187
227
  }
188
- let id = self.cur_ids[self.cur_idx];
189
- self.cur_idx += 1;
190
- let mut new_row = row_ref.clone();
191
- new_row.insert(self.var, LoraValue::Node(id));
192
- return Ok(Some(new_row));
193
228
  }
194
229
  }
195
230
  }
@@ -210,10 +245,8 @@ pub struct NodeByLabelScanSource<'a, S: GraphStorage> {
210
245
  /// before the first row.
211
246
  single_label: Option<&'a str>,
212
247
  cur_row: Option<Row>,
213
- cur_ids: Vec<NodeId>,
214
- cur_idx: usize,
215
- scan_cursor: u64,
216
- scan_done: bool,
248
+ /// Candidate ids of the current input row.
249
+ ids: ScanIds,
217
250
  cur_emitted: bool,
218
251
  }
219
252
 
@@ -238,38 +271,18 @@ impl<'a, S: GraphStorage> NodeByLabelScanSource<'a, S> {
238
271
  _ => None,
239
272
  },
240
273
  cur_row: None,
241
- cur_ids: Vec::new(),
242
- cur_idx: 0,
243
- scan_cursor: 0,
244
- scan_done: false,
274
+ ids: ScanIds::new(),
245
275
  cur_emitted: false,
246
276
  }
247
277
  }
248
278
 
249
- fn reset_scan(&mut self) {
250
- self.cur_ids.clear();
251
- self.cur_idx = 0;
252
- self.scan_cursor = 0;
253
- self.scan_done = false;
254
- }
255
-
256
279
  /// Fetch the next candidates for the current input row.
257
280
  fn fill_candidates(&mut self) {
258
- self.cur_ids.clear();
259
- self.cur_idx = 0;
260
281
  match self.single_label {
261
- Some(label) => {
262
- self.scan_done = !self.storage.scan_node_ids(
263
- Some(label),
264
- &mut self.scan_cursor,
265
- SCAN_PAGE,
266
- &mut self.cur_ids,
267
- );
268
- }
269
- None => {
270
- self.cur_ids = scan_node_ids_for_label_groups(self.storage, self.labels);
271
- self.scan_done = true;
272
- }
282
+ Some(label) => self.ids.fetch_page(self.storage, Some(label)),
283
+ None => self
284
+ .ids
285
+ .fetch_all(scan_node_ids_for_label_groups(self.storage, self.labels)),
273
286
  }
274
287
  }
275
288
  }
@@ -281,7 +294,7 @@ impl<'a, S: GraphStorage> RowSource for NodeByLabelScanSource<'a, S> {
281
294
  match self.upstream.next_row()? {
282
295
  Some(row) => {
283
296
  self.cur_row = Some(row);
284
- self.reset_scan();
297
+ self.ids.reset();
285
298
  self.cur_emitted = false;
286
299
  }
287
300
  None => return Ok(None),
@@ -289,7 +302,7 @@ impl<'a, S: GraphStorage> RowSource for NodeByLabelScanSource<'a, S> {
289
302
  }
290
303
 
291
304
  let Some(row_ref) = self.cur_row.as_ref() else {
292
- self.reset_scan();
305
+ self.ids.reset();
293
306
  self.cur_emitted = false;
294
307
  continue;
295
308
  };
@@ -316,13 +329,7 @@ impl<'a, S: GraphStorage> RowSource for NodeByLabelScanSource<'a, S> {
316
329
  continue;
317
330
  }
318
331
 
319
- while self.cur_idx < self.cur_ids.len() {
320
- let Some(&id) = self.cur_ids.get(self.cur_idx) else {
321
- return Err(ExecutorError::RuntimeError(
322
- "label scan cursor index moved past candidate ids".into(),
323
- ));
324
- };
325
- self.cur_idx += 1;
332
+ while let Some(id) = self.ids.next() {
326
333
  if !self.candidates_prefiltered {
327
334
  let labels_ok = self
328
335
  .storage
@@ -337,9 +344,8 @@ impl<'a, S: GraphStorage> RowSource for NodeByLabelScanSource<'a, S> {
337
344
  return Ok(Some(new_row));
338
345
  }
339
346
 
340
- if self.scan_done {
347
+ if self.ids.done {
341
348
  self.cur_row = None;
342
- self.cur_ids.clear();
343
349
  } else {
344
350
  self.fill_candidates();
345
351
  }