@lix-js/sdk 0.6.0-preview.4 → 0.6.0-preview.5

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 (234) hide show
  1. package/README.md +1 -1
  2. package/SKILL.md +65 -64
  3. package/dist/engine-wasm/index.js +4 -4
  4. package/dist/engine-wasm/wasm/lix_engine.d.ts +5 -5
  5. package/dist/engine-wasm/wasm/lix_engine.js +130 -118
  6. package/dist/engine-wasm/wasm/lix_engine.wasm +0 -0
  7. package/dist/engine-wasm/wasm/lix_engine.wasm.d.ts +9 -8
  8. package/dist/generated/builtin-schemas.d.ts +69 -69
  9. package/dist/generated/builtin-schemas.js +94 -94
  10. package/dist/open-lix.d.ts +33 -26
  11. package/dist/open-lix.js +10 -10
  12. package/dist/sqlite/index.js +86 -30
  13. package/dist-engine-src/README.md +3 -3
  14. package/dist-engine-src/src/backend/capabilities.rs +67 -0
  15. package/dist-engine-src/src/backend/conformance/baseline.rs +1127 -0
  16. package/dist-engine-src/src/backend/conformance/factory.rs +93 -0
  17. package/dist-engine-src/src/backend/conformance/failure_tests.rs +608 -0
  18. package/dist-engine-src/src/backend/conformance/fixtures.rs +26 -0
  19. package/dist-engine-src/src/backend/conformance/mod.rs +75 -0
  20. package/dist-engine-src/src/backend/conformance/model.rs +28 -0
  21. package/dist-engine-src/src/backend/conformance/model_based.rs +257 -0
  22. package/dist-engine-src/src/backend/conformance/persistence.rs +204 -0
  23. package/dist-engine-src/src/backend/conformance/projection.rs +21 -0
  24. package/dist-engine-src/src/backend/conformance/pushdown.rs +24 -0
  25. package/dist-engine-src/src/backend/conformance/runner.rs +90 -0
  26. package/dist-engine-src/src/backend/conformance/scan.rs +24 -0
  27. package/dist-engine-src/src/backend/conformance/write.rs +16 -0
  28. package/dist-engine-src/src/backend/error.rs +94 -0
  29. package/dist-engine-src/src/backend/in_memory.rs +670 -0
  30. package/dist-engine-src/src/backend/mod.rs +36 -9
  31. package/dist-engine-src/src/backend/predicate.rs +80 -0
  32. package/dist-engine-src/src/backend/traits.rs +260 -0
  33. package/dist-engine-src/src/backend/types.rs +224 -81
  34. package/dist-engine-src/src/binary_cas/context.rs +8 -8
  35. package/dist-engine-src/src/binary_cas/kv.rs +234 -259
  36. package/dist-engine-src/src/{version → branch}/context.rs +12 -12
  37. package/dist-engine-src/src/branch/lifecycle.rs +221 -0
  38. package/dist-engine-src/src/branch/mod.rs +13 -0
  39. package/dist-engine-src/src/branch/refs.rs +321 -0
  40. package/dist-engine-src/src/branch/stage_rows.rs +67 -0
  41. package/dist-engine-src/src/branch/types.rs +21 -0
  42. package/dist-engine-src/src/catalog/context.rs +18 -18
  43. package/dist-engine-src/src/catalog/snapshot.rs +8 -8
  44. package/dist-engine-src/src/changelog/bench_support.rs +785 -0
  45. package/dist-engine-src/src/changelog/change.rs +1 -0
  46. package/dist-engine-src/src/changelog/codec.rs +497 -0
  47. package/dist-engine-src/src/changelog/commit.rs +1 -0
  48. package/dist-engine-src/src/changelog/context.rs +1614 -0
  49. package/dist-engine-src/src/changelog/mod.rs +29 -0
  50. package/dist-engine-src/src/changelog/store.rs +163 -0
  51. package/dist-engine-src/src/changelog/test_support.rs +54 -0
  52. package/dist-engine-src/src/changelog/types.rs +213 -0
  53. package/dist-engine-src/src/commit_graph/context.rs +317 -274
  54. package/dist-engine-src/src/commit_graph/mod.rs +2 -4
  55. package/dist-engine-src/src/commit_graph/types.rs +22 -42
  56. package/dist-engine-src/src/commit_graph/walker.rs +133 -103
  57. package/dist-engine-src/src/common/error.rs +52 -18
  58. package/dist-engine-src/src/common/identity.rs +2 -2
  59. package/dist-engine-src/src/common/mod.rs +1 -1
  60. package/dist-engine-src/src/domain.rs +42 -46
  61. package/dist-engine-src/src/engine.rs +74 -96
  62. package/dist-engine-src/src/{entity_identity.rs → entity_pk.rs} +89 -92
  63. package/dist-engine-src/src/functions/context.rs +56 -52
  64. package/dist-engine-src/src/functions/state.rs +51 -52
  65. package/dist-engine-src/src/init.rs +288 -154
  66. package/dist-engine-src/src/json_store/context.rs +15 -266
  67. package/dist-engine-src/src/json_store/mod.rs +26 -0
  68. package/dist-engine-src/src/json_store/store.rs +103 -718
  69. package/dist-engine-src/src/json_store/types.rs +4 -9
  70. package/dist-engine-src/src/lib.rs +49 -19
  71. package/dist-engine-src/src/live_state/context.rs +654 -790
  72. package/dist-engine-src/src/live_state/mod.rs +9 -3
  73. package/dist-engine-src/src/live_state/overlay.rs +4 -4
  74. package/dist-engine-src/src/live_state/types.rs +30 -21
  75. package/dist-engine-src/src/live_state/visibility.rs +514 -71
  76. package/dist-engine-src/src/plugin/install.rs +48 -48
  77. package/dist-engine-src/src/plugin/manifest.rs +7 -7
  78. package/dist-engine-src/src/plugin/materializer.rs +0 -275
  79. package/dist-engine-src/src/plugin/plugin_manifest.json +4 -3
  80. package/dist-engine-src/src/schema/builtin/lix_binary_blob_ref.json +2 -2
  81. package/dist-engine-src/src/schema/builtin/lix_branch_descriptor.json +34 -0
  82. package/dist-engine-src/src/schema/builtin/lix_branch_ref.json +48 -0
  83. package/dist-engine-src/src/schema/builtin/lix_change.json +3 -3
  84. package/dist-engine-src/src/schema/builtin/lix_commit.json +1 -1
  85. package/dist-engine-src/src/schema/builtin/lix_label_assignment.json +6 -6
  86. package/dist-engine-src/src/schema/builtin/mod.rs +18 -20
  87. package/dist-engine-src/src/schema/compatibility.rs +11 -11
  88. package/dist-engine-src/src/schema/definition.json +2 -2
  89. package/dist-engine-src/src/schema/definition.rs +5 -5
  90. package/dist-engine-src/src/schema/key.rs +3 -3
  91. package/dist-engine-src/src/schema/mod.rs +1 -1
  92. package/dist-engine-src/src/schema/tests.rs +18 -18
  93. package/dist-engine-src/src/session/context.rs +803 -148
  94. package/dist-engine-src/src/session/create_branch.rs +94 -0
  95. package/dist-engine-src/src/session/execute.rs +223 -83
  96. package/dist-engine-src/src/session/merge/analysis.rs +9 -3
  97. package/dist-engine-src/src/session/merge/{version.rs → branch.rs} +119 -129
  98. package/dist-engine-src/src/session/merge/conflicts.rs +2 -2
  99. package/dist-engine-src/src/session/merge/mod.rs +5 -6
  100. package/dist-engine-src/src/session/merge/stats.rs +7 -11
  101. package/dist-engine-src/src/session/mod.rs +15 -12
  102. package/dist-engine-src/src/session/switch_branch.rs +113 -0
  103. package/dist-engine-src/src/session/transaction.rs +495 -14
  104. package/dist-engine-src/src/sql2/{classify.rs → bind/classify.rs} +3 -75
  105. package/dist-engine-src/src/sql2/bind/error.rs +5 -0
  106. package/dist-engine-src/src/sql2/bind/expr.rs +29 -0
  107. package/dist-engine-src/src/sql2/bind/mod.rs +12 -0
  108. package/dist-engine-src/src/sql2/{udfs/public_call.rs → bind/public_udf.rs} +71 -3
  109. package/dist-engine-src/src/sql2/bind/read.rs +65 -0
  110. package/dist-engine-src/src/sql2/bind/statement.rs +2236 -0
  111. package/dist-engine-src/src/sql2/bind/table.rs +273 -0
  112. package/dist-engine-src/src/sql2/bind/write.rs +86 -0
  113. package/dist-engine-src/src/sql2/branch_scope.rs +436 -0
  114. package/dist-engine-src/src/sql2/catalog/capability.rs +20 -0
  115. package/dist-engine-src/src/sql2/catalog/entity_surface.rs +296 -0
  116. package/dist-engine-src/src/sql2/catalog/mod.rs +15 -0
  117. package/dist-engine-src/src/sql2/catalog/registry.rs +556 -0
  118. package/dist-engine-src/src/sql2/catalog/schema.rs +88 -0
  119. package/dist-engine-src/src/sql2/catalog/surface.rs +41 -0
  120. package/dist-engine-src/src/sql2/change_materialization.rs +122 -0
  121. package/dist-engine-src/src/sql2/context.rs +36 -30
  122. package/dist-engine-src/src/sql2/error.rs +1 -1
  123. package/dist-engine-src/src/sql2/exec/bound_public_write.rs +1593 -0
  124. package/dist-engine-src/src/sql2/exec/datafusion.rs +5266 -0
  125. package/dist-engine-src/src/sql2/exec/fast_write.rs +82 -0
  126. package/dist-engine-src/src/sql2/exec/mod.rs +24 -0
  127. package/dist-engine-src/src/sql2/exec/write.rs +661 -0
  128. package/dist-engine-src/src/sql2/filesystem_planner.rs +72 -77
  129. package/dist-engine-src/src/sql2/filesystem_visibility.rs +21 -21
  130. package/dist-engine-src/src/sql2/history_projection.rs +8 -8
  131. package/dist-engine-src/src/sql2/history_route.rs +35 -31
  132. package/dist-engine-src/src/sql2/mod.rs +28 -23
  133. package/dist-engine-src/src/sql2/optimize/datafusion.rs +1 -0
  134. package/dist-engine-src/src/sql2/optimize/mod.rs +2 -0
  135. package/dist-engine-src/src/sql2/optimize/simple_write.rs +116 -0
  136. package/dist-engine-src/src/sql2/parse/mod.rs +69 -0
  137. package/dist-engine-src/src/sql2/parse/normalize.rs +1 -0
  138. package/dist-engine-src/src/sql2/plan/branch_scope.rs +24 -0
  139. package/dist-engine-src/src/sql2/plan/mod.rs +5 -0
  140. package/dist-engine-src/src/sql2/plan/predicate.rs +22 -0
  141. package/dist-engine-src/src/sql2/plan/write.rs +147 -0
  142. package/dist-engine-src/src/sql2/predicate_typecheck.rs +258 -0
  143. package/dist-engine-src/src/sql2/{version_provider.rs → providers/branch.rs} +218 -214
  144. package/dist-engine-src/src/sql2/{change_provider.rs → providers/change.rs} +156 -42
  145. package/dist-engine-src/src/sql2/{directory_provider.rs → providers/directory.rs} +291 -322
  146. package/dist-engine-src/src/sql2/{directory_history_provider.rs → providers/directory_history.rs} +56 -42
  147. package/dist-engine-src/src/sql2/providers/entity.rs +1484 -0
  148. package/dist-engine-src/src/sql2/{entity_history_provider.rs → providers/entity_history.rs} +43 -31
  149. package/dist-engine-src/src/sql2/{file_provider.rs → providers/file.rs} +323 -316
  150. package/dist-engine-src/src/sql2/{file_history_provider.rs → providers/file_history.rs} +60 -46
  151. package/dist-engine-src/src/sql2/{history_provider.rs → providers/history.rs} +46 -32
  152. package/dist-engine-src/src/sql2/{lix_state_provider.rs → providers/lix_state.rs} +359 -329
  153. package/dist-engine-src/src/sql2/providers/mod.rs +508 -0
  154. package/dist-engine-src/src/sql2/read_only.rs +2 -2
  155. package/dist-engine-src/src/sql2/session.rs +47 -96
  156. package/dist-engine-src/src/sql2/storage/constraints.rs +1 -0
  157. package/dist-engine-src/src/sql2/storage/mod.rs +1 -0
  158. package/dist-engine-src/src/sql2/test_support/differential.rs +712 -0
  159. package/dist-engine-src/src/sql2/test_support/generators.rs +354 -0
  160. package/dist-engine-src/src/sql2/test_support/mod.rs +2 -0
  161. package/dist-engine-src/src/sql2/udfs/{lix_active_version_commit_id.rs → lix_active_branch_commit_id.rs} +7 -7
  162. package/dist-engine-src/src/sql2/udfs/mod.rs +3 -6
  163. package/dist-engine-src/src/sql2/write_normalization.rs +45 -22
  164. package/dist-engine-src/src/storage/conformance.rs +399 -0
  165. package/dist-engine-src/src/storage/context.rs +552 -288
  166. package/dist-engine-src/src/storage/mod.rs +48 -10
  167. package/dist-engine-src/src/storage/point.rs +440 -0
  168. package/dist-engine-src/src/storage/read_scope.rs +43 -64
  169. package/dist-engine-src/src/storage/reader.rs +867 -0
  170. package/dist-engine-src/src/storage/scan.rs +784 -0
  171. package/dist-engine-src/src/storage/spaces.rs +236 -0
  172. package/dist-engine-src/src/storage/stats.rs +80 -0
  173. package/dist-engine-src/src/storage/write_set.rs +962 -0
  174. package/dist-engine-src/src/storage_bench.rs +136 -4828
  175. package/dist-engine-src/src/test_support.rs +360 -138
  176. package/dist-engine-src/src/tracked_state/bench_support.rs +394 -0
  177. package/dist-engine-src/src/tracked_state/codec.rs +155 -1057
  178. package/dist-engine-src/src/tracked_state/commit_root_rebuild.rs +358 -0
  179. package/dist-engine-src/src/tracked_state/context.rs +1927 -993
  180. package/dist-engine-src/src/tracked_state/diff.rs +1715 -261
  181. package/dist-engine-src/src/tracked_state/merge.rs +74 -88
  182. package/dist-engine-src/src/tracked_state/mod.rs +19 -16
  183. package/dist-engine-src/src/tracked_state/{materialization.rs → row_materialization.rs} +50 -178
  184. package/dist-engine-src/src/tracked_state/storage.rs +243 -191
  185. package/dist-engine-src/src/tracked_state/tree.rs +247 -371
  186. package/dist-engine-src/src/tracked_state/types.rs +49 -42
  187. package/dist-engine-src/src/transaction/bench_support.rs +407 -0
  188. package/dist-engine-src/src/transaction/commit.rs +821 -713
  189. package/dist-engine-src/src/transaction/context.rs +705 -600
  190. package/dist-engine-src/src/transaction/mod.rs +13 -2
  191. package/dist-engine-src/src/transaction/normalization.rs +63 -76
  192. package/dist-engine-src/src/transaction/prep.rs +13 -13
  193. package/dist-engine-src/src/transaction/schema_resolver.rs +19 -5
  194. package/dist-engine-src/src/transaction/staging.rs +228 -434
  195. package/dist-engine-src/src/transaction/types.rs +41 -98
  196. package/dist-engine-src/src/transaction/validation.rs +382 -446
  197. package/dist-engine-src/src/untracked_state/codec.rs +337 -29
  198. package/dist-engine-src/src/untracked_state/context.rs +7 -7
  199. package/dist-engine-src/src/untracked_state/materialization.rs +2 -2
  200. package/dist-engine-src/src/untracked_state/mod.rs +1 -1
  201. package/dist-engine-src/src/untracked_state/storage.rs +659 -157
  202. package/dist-engine-src/src/untracked_state/types.rs +21 -21
  203. package/package.json +71 -68
  204. package/dist-engine-src/src/backend/kv.rs +0 -358
  205. package/dist-engine-src/src/backend/testing.rs +0 -658
  206. package/dist-engine-src/src/commit_store/codec.rs +0 -887
  207. package/dist-engine-src/src/commit_store/context.rs +0 -944
  208. package/dist-engine-src/src/commit_store/materialization.rs +0 -84
  209. package/dist-engine-src/src/commit_store/mod.rs +0 -16
  210. package/dist-engine-src/src/commit_store/storage.rs +0 -600
  211. package/dist-engine-src/src/commit_store/types.rs +0 -215
  212. package/dist-engine-src/src/schema/builtin/lix_version_descriptor.json +0 -34
  213. package/dist-engine-src/src/schema/builtin/lix_version_ref.json +0 -48
  214. package/dist-engine-src/src/session/create_version.rs +0 -88
  215. package/dist-engine-src/src/session/merge/apply.rs +0 -23
  216. package/dist-engine-src/src/session/optimization9_sql2_bench.rs +0 -100
  217. package/dist-engine-src/src/session/switch_version.rs +0 -110
  218. package/dist-engine-src/src/sql2/entity_provider.rs +0 -3211
  219. package/dist-engine-src/src/sql2/execute.rs +0 -3533
  220. package/dist-engine-src/src/sql2/public_bind/assignment.rs +0 -46
  221. package/dist-engine-src/src/sql2/public_bind/capability.rs +0 -41
  222. package/dist-engine-src/src/sql2/public_bind/dml.rs +0 -172
  223. package/dist-engine-src/src/sql2/public_bind/mod.rs +0 -26
  224. package/dist-engine-src/src/sql2/public_bind/table.rs +0 -168
  225. package/dist-engine-src/src/sql2/version_scope.rs +0 -394
  226. package/dist-engine-src/src/storage/types.rs +0 -501
  227. package/dist-engine-src/src/tracked_state/by_file_index.rs +0 -98
  228. package/dist-engine-src/src/tracked_state/materializer.rs +0 -488
  229. package/dist-engine-src/src/transaction/live_state_overlay.rs +0 -35
  230. package/dist-engine-src/src/version/lifecycle.rs +0 -221
  231. package/dist-engine-src/src/version/mod.rs +0 -13
  232. package/dist-engine-src/src/version/refs.rs +0 -330
  233. package/dist-engine-src/src/version/stage_rows.rs +0 -67
  234. package/dist-engine-src/src/version/types.rs +0 -21
@@ -25,28 +25,33 @@ use crate::commit_graph::CommitGraphReader;
25
25
  use crate::serialize_row_metadata;
26
26
  use crate::LixError;
27
27
 
28
- use super::history_projection::{tombstone_identity_column_value, HistoryIdentityProjection};
29
- use super::history_route::{
28
+ use crate::sql2::change_materialization::MaterializedChange;
29
+ use crate::sql2::history_projection::{tombstone_identity_column_value, HistoryIdentityProjection};
30
+ use crate::sql2::history_route::{
30
31
  history_descriptor_event_matches, load_history_entries, parse_history_filter,
31
32
  HistoryColumnStyle, HistoryEntry, HistoryRoute, HistoryViewDescriptor, HISTORY_COL_CHANGE_ID,
32
- HISTORY_COL_COMMIT_CREATED_AT, HISTORY_COL_DEPTH, HISTORY_COL_ENTITY_ID, HISTORY_COL_FILE_ID,
33
+ HISTORY_COL_COMMIT_CREATED_AT, HISTORY_COL_DEPTH, HISTORY_COL_ENTITY_PK, HISTORY_COL_FILE_ID,
33
34
  HISTORY_COL_METADATA, HISTORY_COL_OBSERVED_COMMIT_ID, HISTORY_COL_SCHEMA_KEY,
34
35
  HISTORY_COL_SNAPSHOT_CONTENT, HISTORY_COL_START_COMMIT_ID,
35
36
  };
36
- use super::result_metadata::json_field;
37
- use super::SqlCommitStoreQuerySource;
38
- use crate::commit_store::MaterializedChange;
37
+ use crate::sql2::result_metadata::json_field;
38
+ use crate::sql2::SqlHistoryQuerySource;
39
+ use crate::storage::StorageRead;
39
40
 
40
41
  const DIRECTORY_DESCRIPTOR_SCHEMA_KEY: &str = "lix_directory_descriptor";
41
42
 
42
- pub(crate) async fn register_lix_directory_history_provider(
43
+ pub(super) async fn register_lix_directory_history_surface<S>(
43
44
  session: &datafusion::prelude::SessionContext,
45
+ surface_name: &str,
44
46
  commit_graph: Box<dyn CommitGraphReader>,
45
- query_source: SqlCommitStoreQuerySource,
46
- ) -> Result<(), LixError> {
47
+ query_source: SqlHistoryQuerySource<S>,
48
+ ) -> Result<(), LixError>
49
+ where
50
+ S: StorageRead + Clone + Send + Sync + 'static,
51
+ {
47
52
  session
48
53
  .register_table(
49
- "lix_directory_history",
54
+ surface_name,
50
55
  Arc::new(LixDirectoryHistoryProvider::new(
51
56
  Arc::new(Mutex::new(commit_graph)),
52
57
  query_source,
@@ -56,22 +61,22 @@ pub(crate) async fn register_lix_directory_history_provider(
56
61
  Ok(())
57
62
  }
58
63
 
59
- struct LixDirectoryHistoryProvider {
64
+ struct LixDirectoryHistoryProvider<S> {
60
65
  schema: SchemaRef,
61
66
  commit_graph: Arc<Mutex<Box<dyn CommitGraphReader>>>,
62
- query_source: SqlCommitStoreQuerySource,
67
+ query_source: SqlHistoryQuerySource<S>,
63
68
  }
64
69
 
65
- impl std::fmt::Debug for LixDirectoryHistoryProvider {
70
+ impl<S> std::fmt::Debug for LixDirectoryHistoryProvider<S> {
66
71
  fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
67
72
  f.debug_struct("LixDirectoryHistoryProvider").finish()
68
73
  }
69
74
  }
70
75
 
71
- impl LixDirectoryHistoryProvider {
76
+ impl<S> LixDirectoryHistoryProvider<S> {
72
77
  fn new(
73
78
  commit_graph: Arc<Mutex<Box<dyn CommitGraphReader>>>,
74
- query_source: SqlCommitStoreQuerySource,
79
+ query_source: SqlHistoryQuerySource<S>,
75
80
  ) -> Self {
76
81
  Self {
77
82
  schema: lix_directory_history_schema(),
@@ -82,7 +87,10 @@ impl LixDirectoryHistoryProvider {
82
87
  }
83
88
 
84
89
  #[async_trait]
85
- impl TableProvider for LixDirectoryHistoryProvider {
90
+ impl<S> TableProvider for LixDirectoryHistoryProvider<S>
91
+ where
92
+ S: StorageRead + Clone + Send + Sync + 'static,
93
+ {
86
94
  fn as_any(&self) -> &dyn Any {
87
95
  self
88
96
  }
@@ -128,16 +136,16 @@ impl TableProvider for LixDirectoryHistoryProvider {
128
136
  }
129
137
  }
130
138
 
131
- struct LixDirectoryHistoryScanExec {
139
+ struct LixDirectoryHistoryScanExec<S> {
132
140
  commit_graph: Arc<Mutex<Box<dyn CommitGraphReader>>>,
133
- query_source: SqlCommitStoreQuerySource,
141
+ query_source: SqlHistoryQuerySource<S>,
134
142
  schema: SchemaRef,
135
143
  route: HistoryRoute,
136
144
  limit: Option<usize>,
137
145
  properties: Arc<PlanProperties>,
138
146
  }
139
147
 
140
- impl std::fmt::Debug for LixDirectoryHistoryScanExec {
148
+ impl<S> std::fmt::Debug for LixDirectoryHistoryScanExec<S> {
141
149
  fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
142
150
  f.debug_struct("LixDirectoryHistoryScanExec")
143
151
  .field("route", &self.route)
@@ -146,10 +154,10 @@ impl std::fmt::Debug for LixDirectoryHistoryScanExec {
146
154
  }
147
155
  }
148
156
 
149
- impl LixDirectoryHistoryScanExec {
157
+ impl<S> LixDirectoryHistoryScanExec<S> {
150
158
  fn new(
151
159
  commit_graph: Arc<Mutex<Box<dyn CommitGraphReader>>>,
152
- query_source: SqlCommitStoreQuerySource,
160
+ query_source: SqlHistoryQuerySource<S>,
153
161
  schema: SchemaRef,
154
162
  route: HistoryRoute,
155
163
  limit: Option<usize>,
@@ -171,7 +179,7 @@ impl LixDirectoryHistoryScanExec {
171
179
  }
172
180
  }
173
181
 
174
- impl DisplayAs for LixDirectoryHistoryScanExec {
182
+ impl<S> DisplayAs for LixDirectoryHistoryScanExec<S> {
175
183
  fn fmt_as(&self, t: DisplayFormatType, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
176
184
  match t {
177
185
  DisplayFormatType::Default | DisplayFormatType::Verbose => write!(
@@ -184,7 +192,10 @@ impl DisplayAs for LixDirectoryHistoryScanExec {
184
192
  }
185
193
  }
186
194
 
187
- impl ExecutionPlan for LixDirectoryHistoryScanExec {
195
+ impl<S> ExecutionPlan for LixDirectoryHistoryScanExec<S>
196
+ where
197
+ S: StorageRead + Clone + Send + Sync + 'static,
198
+ {
188
199
  fn name(&self) -> &str {
189
200
  "LixDirectoryHistoryScanExec"
190
201
  }
@@ -259,7 +270,7 @@ struct DirectoryHistoryRecord {
259
270
 
260
271
  #[derive(Debug, Clone)]
261
272
  struct DirectoryHistoryOutputRow {
262
- entity_id: String,
273
+ entity_pk: String,
263
274
  id: String,
264
275
  path: Option<String>,
265
276
  parent_id: Option<String>,
@@ -287,11 +298,14 @@ struct DirectoryDescriptorSnapshot {
287
298
  hidden: Option<bool>,
288
299
  }
289
300
 
290
- async fn load_directory_history_rows(
301
+ async fn load_directory_history_rows<S>(
291
302
  commit_graph: Arc<Mutex<Box<dyn CommitGraphReader>>>,
292
- query_source: SqlCommitStoreQuerySource,
303
+ query_source: SqlHistoryQuerySource<S>,
293
304
  route: &HistoryRoute,
294
- ) -> Result<Vec<DirectoryHistoryOutputRow>, LixError> {
305
+ ) -> Result<Vec<DirectoryHistoryOutputRow>, LixError>
306
+ where
307
+ S: StorageRead + Clone + Send + Sync + 'static,
308
+ {
295
309
  let event_route = route.traversal_only();
296
310
  let event_entries = load_history_entries(
297
311
  HistoryViewDescriptor {
@@ -345,7 +359,7 @@ async fn load_directory_history_rows(
345
359
  .and_then(|value| value.as_str().map(ToOwned::to_owned))
346
360
  .unwrap_or_else(|| visible_descriptor.id.clone());
347
361
  output.push(DirectoryHistoryOutputRow {
348
- entity_id: visible_descriptor.id.clone(),
362
+ entity_pk: visible_descriptor.id.clone(),
349
363
  id,
350
364
  path,
351
365
  parent_id: visible_descriptor.parent_id.clone(),
@@ -356,18 +370,18 @@ async fn load_directory_history_rows(
356
370
  });
357
371
  }
358
372
  output.retain(|row| {
359
- let entity_id = entity_id_json_array(&row.entity_id).ok();
373
+ let entity_pk = entity_pk_json_array(&row.entity_pk).ok();
360
374
  route.matches_surface_row(
361
375
  DIRECTORY_DESCRIPTOR_SCHEMA_KEY,
362
- entity_id.as_deref().unwrap_or(&row.entity_id),
376
+ entity_pk.as_deref().unwrap_or(&row.entity_pk),
363
377
  None,
364
378
  row.event.depth,
365
379
  )
366
380
  });
367
381
 
368
382
  output.sort_by(|left, right| {
369
- left.entity_id
370
- .cmp(&right.entity_id)
383
+ left.entity_pk
384
+ .cmp(&right.entity_pk)
371
385
  .then(left.event.start_commit_id.cmp(&right.event.start_commit_id))
372
386
  .then(left.event.depth.cmp(&right.event.depth))
373
387
  .then(
@@ -389,7 +403,7 @@ fn parse_directory_history_records(
389
403
  .map(|entry| {
390
404
  let Some(snapshot_content) = entry.change.snapshot_content.as_deref() else {
391
405
  return Ok(DirectoryHistoryRecord {
392
- id: entry.change.entity_id.as_single_string_owned()?,
406
+ id: entry.change.entity_pk.as_single_string_owned()?,
393
407
  parent_id: None,
394
408
  name: None,
395
409
  hidden: None,
@@ -529,9 +543,9 @@ fn directory_history_column_array(
529
543
  "hidden" => Arc::new(BooleanArray::from(
530
544
  rows.iter().map(|row| row.hidden).collect::<Vec<_>>(),
531
545
  )) as ArrayRef,
532
- HISTORY_COL_ENTITY_ID => Arc::new(StringArray::from(
546
+ HISTORY_COL_ENTITY_PK => Arc::new(StringArray::from(
533
547
  rows.iter()
534
- .map(|row| entity_id_json_array(&row.entity_id).map(Some))
548
+ .map(|row| entity_pk_json_array(&row.entity_pk).map(Some))
535
549
  .collect::<std::result::Result<Vec<_>, _>>()?,
536
550
  )) as ArrayRef,
537
551
  HISTORY_COL_SCHEMA_KEY => {
@@ -583,14 +597,14 @@ fn directory_history_column_array(
583
597
  })
584
598
  }
585
599
 
586
- fn lix_directory_history_schema() -> SchemaRef {
600
+ pub(super) fn lix_directory_history_schema() -> SchemaRef {
587
601
  Arc::new(Schema::new(vec![
588
602
  Field::new("id", DataType::Utf8, false),
589
603
  Field::new("path", DataType::Utf8, true),
590
604
  Field::new("parent_id", DataType::Utf8, true),
591
605
  Field::new("name", DataType::Utf8, true),
592
606
  Field::new("hidden", DataType::Boolean, true),
593
- json_field(HISTORY_COL_ENTITY_ID, false),
607
+ json_field(HISTORY_COL_ENTITY_PK, false),
594
608
  Field::new(HISTORY_COL_SCHEMA_KEY, DataType::Utf8, false),
595
609
  Field::new(HISTORY_COL_FILE_ID, DataType::Utf8, true),
596
610
  json_field(HISTORY_COL_SNAPSHOT_CONTENT, true),
@@ -615,17 +629,17 @@ fn string_array<'a>(values: impl Iterator<Item = Option<&'a str>>) -> ArrayRef {
615
629
  }
616
630
 
617
631
  fn datafusion_error_to_lix_error(error: DataFusionError) -> LixError {
618
- super::error::datafusion_error_to_lix_error(error)
632
+ crate::sql2::error::datafusion_error_to_lix_error(error)
619
633
  }
620
634
 
621
- fn entity_id_json_array(entity_id: &str) -> Result<String, LixError> {
622
- serde_json::to_string(&[entity_id]).map_err(|error| {
635
+ fn entity_pk_json_array(entity_pk: &str) -> Result<String, LixError> {
636
+ serde_json::to_string(&[entity_pk]).map_err(|error| {
623
637
  LixError::unknown(format!(
624
- "failed to encode history entity id as JSON: {error}"
638
+ "failed to encode history entity pk as JSON: {error}"
625
639
  ))
626
640
  })
627
641
  }
628
642
 
629
643
  fn lix_error_to_datafusion_error(error: LixError) -> DataFusionError {
630
- super::error::lix_error_to_datafusion_error(error)
644
+ crate::sql2::error::lix_error_to_datafusion_error(error)
631
645
  }