@lix-js/sdk 0.6.0-preview.3 → 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 (235) hide show
  1. package/README.md +1 -1
  2. package/SKILL.md +105 -65
  3. package/dist/engine-wasm/index.js +4 -4
  4. package/dist/engine-wasm/wasm/lix_engine.d.ts +30 -6
  5. package/dist/engine-wasm/wasm/lix_engine.js +187 -117
  6. package/dist/engine-wasm/wasm/lix_engine.wasm +0 -0
  7. package/dist/engine-wasm/wasm/lix_engine.wasm.d.ts +14 -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 +42 -28
  11. package/dist/open-lix.js +49 -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 +819 -124
  94. package/dist-engine-src/src/session/create_branch.rs +94 -0
  95. package/dist-engine-src/src/session/execute.rs +260 -57
  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 +19 -16
  102. package/dist-engine-src/src/session/switch_branch.rs +113 -0
  103. package/dist-engine-src/src/session/transaction.rs +557 -0
  104. package/dist-engine-src/src/sql2/bind/classify.rs +102 -0
  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} +98 -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 +4 -5
  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 +30 -24
  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 -109
  218. package/dist-engine-src/src/sql2/classify.rs +0 -182
  219. package/dist-engine-src/src/sql2/entity_provider.rs +0 -3211
  220. package/dist-engine-src/src/sql2/execute.rs +0 -3440
  221. package/dist-engine-src/src/sql2/public_bind/assignment.rs +0 -46
  222. package/dist-engine-src/src/sql2/public_bind/capability.rs +0 -41
  223. package/dist-engine-src/src/sql2/public_bind/dml.rs +0 -166
  224. package/dist-engine-src/src/sql2/public_bind/mod.rs +0 -25
  225. package/dist-engine-src/src/sql2/public_bind/table.rs +0 -168
  226. package/dist-engine-src/src/sql2/version_scope.rs +0 -394
  227. package/dist-engine-src/src/storage/types.rs +0 -501
  228. package/dist-engine-src/src/tracked_state/by_file_index.rs +0 -98
  229. package/dist-engine-src/src/tracked_state/materializer.rs +0 -488
  230. package/dist-engine-src/src/transaction/live_state_overlay.rs +0 -35
  231. package/dist-engine-src/src/version/lifecycle.rs +0 -221
  232. package/dist-engine-src/src/version/mod.rs +0 -13
  233. package/dist-engine-src/src/version/refs.rs +0 -330
  234. package/dist-engine-src/src/version/stage_rows.rs +0 -67
  235. package/dist-engine-src/src/version/types.rs +0 -21
@@ -22,33 +22,36 @@ use tokio::sync::Mutex;
22
22
 
23
23
  use crate::commit_graph::CommitGraphReader;
24
24
  use crate::serialize_row_metadata;
25
+ use crate::sql2::change_materialization::MaterializedChange;
25
26
  use crate::LixError;
26
27
 
27
- use super::entity_provider::{
28
- entity_f64_value, entity_i64_value, entity_json_text_value, entity_surface_schema,
29
- parse_snapshot, string_array, EntityColumnType, EntityProviderVariant, EntitySurfaceSpec,
28
+ use crate::sql2::catalog::{
29
+ entity_surface_schema, EntityColumnType, EntitySurfaceShape, EntitySurfaceSpec,
30
30
  };
31
- use super::history_projection::{tombstone_identity_column_value, HistoryIdentityProjection};
32
- use super::history_route::{
31
+ use crate::sql2::history_projection::{tombstone_identity_column_value, HistoryIdentityProjection};
32
+ use crate::sql2::history_route::{
33
33
  load_history_entries, parse_history_filter, HistoryColumnStyle, HistoryRoute,
34
34
  HistoryViewDescriptor, HISTORY_COL_START_COMMIT_ID,
35
35
  };
36
- use super::SqlCommitStoreQuerySource;
37
- use crate::commit_store::MaterializedChange;
36
+ use crate::sql2::providers::entity::{
37
+ entity_f64_value, entity_i64_value, entity_json_text_value, parse_snapshot, string_array,
38
+ };
39
+ use crate::sql2::SqlHistoryQuerySource;
40
+ use crate::storage::StorageRead;
38
41
 
39
42
  /// Schema-specific history surface backed directly by the commit graph.
40
43
  ///
41
44
  /// The provider does not query `lix_state_history` through SQL. It uses the same
42
45
  /// commit graph primitive as the generic history surface, then shapes canonical
43
46
  /// changes into the typed entity columns for one registered schema.
44
- pub(crate) struct EntityHistoryProvider {
47
+ pub(crate) struct EntityHistoryProvider<S> {
45
48
  spec: Arc<EntitySurfaceSpec>,
46
49
  schema: SchemaRef,
47
50
  commit_graph: Arc<Mutex<Box<dyn CommitGraphReader>>>,
48
- query_source: SqlCommitStoreQuerySource,
51
+ query_source: SqlHistoryQuerySource<S>,
49
52
  }
50
53
 
51
- impl std::fmt::Debug for EntityHistoryProvider {
54
+ impl<S> std::fmt::Debug for EntityHistoryProvider<S> {
52
55
  fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
53
56
  f.debug_struct("EntityHistoryProvider")
54
57
  .field("schema_key", &self.spec.schema_key)
@@ -56,14 +59,14 @@ impl std::fmt::Debug for EntityHistoryProvider {
56
59
  }
57
60
  }
58
61
 
59
- impl EntityHistoryProvider {
62
+ impl<S> EntityHistoryProvider<S> {
60
63
  pub(crate) fn new(
61
64
  spec: Arc<EntitySurfaceSpec>,
62
65
  commit_graph: Arc<Mutex<Box<dyn CommitGraphReader>>>,
63
- query_source: SqlCommitStoreQuerySource,
66
+ query_source: SqlHistoryQuerySource<S>,
64
67
  ) -> Self {
65
68
  Self {
66
- schema: entity_surface_schema(&spec, EntityProviderVariant::History),
69
+ schema: entity_surface_schema(&spec, EntitySurfaceShape::History),
67
70
  spec,
68
71
  commit_graph,
69
72
  query_source,
@@ -72,7 +75,10 @@ impl EntityHistoryProvider {
72
75
  }
73
76
 
74
77
  #[async_trait]
75
- impl TableProvider for EntityHistoryProvider {
78
+ impl<S> TableProvider for EntityHistoryProvider<S>
79
+ where
80
+ S: StorageRead + Clone + Send + Sync + 'static,
81
+ {
76
82
  fn as_any(&self) -> &dyn Any {
77
83
  self
78
84
  }
@@ -121,17 +127,17 @@ impl TableProvider for EntityHistoryProvider {
121
127
  }
122
128
  }
123
129
 
124
- struct EntityHistoryScanExec {
130
+ struct EntityHistoryScanExec<S> {
125
131
  spec: Arc<EntitySurfaceSpec>,
126
132
  commit_graph: Arc<Mutex<Box<dyn CommitGraphReader>>>,
127
- query_source: SqlCommitStoreQuerySource,
133
+ query_source: SqlHistoryQuerySource<S>,
128
134
  schema: SchemaRef,
129
135
  route: HistoryRoute,
130
136
  limit: Option<usize>,
131
137
  properties: Arc<PlanProperties>,
132
138
  }
133
139
 
134
- impl std::fmt::Debug for EntityHistoryScanExec {
140
+ impl<S> std::fmt::Debug for EntityHistoryScanExec<S> {
135
141
  fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
136
142
  f.debug_struct("EntityHistoryScanExec")
137
143
  .field("schema_key", &self.spec.schema_key)
@@ -141,11 +147,11 @@ impl std::fmt::Debug for EntityHistoryScanExec {
141
147
  }
142
148
  }
143
149
 
144
- impl EntityHistoryScanExec {
150
+ impl<S> EntityHistoryScanExec<S> {
145
151
  fn new(
146
152
  spec: Arc<EntitySurfaceSpec>,
147
153
  commit_graph: Arc<Mutex<Box<dyn CommitGraphReader>>>,
148
- query_source: SqlCommitStoreQuerySource,
154
+ query_source: SqlHistoryQuerySource<S>,
149
155
  schema: SchemaRef,
150
156
  route: HistoryRoute,
151
157
  limit: Option<usize>,
@@ -168,7 +174,7 @@ impl EntityHistoryScanExec {
168
174
  }
169
175
  }
170
176
 
171
- impl DisplayAs for EntityHistoryScanExec {
177
+ impl<S> DisplayAs for EntityHistoryScanExec<S> {
172
178
  fn fmt_as(&self, t: DisplayFormatType, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
173
179
  match t {
174
180
  DisplayFormatType::Default | DisplayFormatType::Verbose => write!(
@@ -181,7 +187,10 @@ impl DisplayAs for EntityHistoryScanExec {
181
187
  }
182
188
  }
183
189
 
184
- impl ExecutionPlan for EntityHistoryScanExec {
190
+ impl<S> ExecutionPlan for EntityHistoryScanExec<S>
191
+ where
192
+ S: StorageRead + Clone + Send + Sync + 'static,
193
+ {
185
194
  fn name(&self) -> &str {
186
195
  "EntityHistoryScanExec"
187
196
  }
@@ -251,13 +260,16 @@ struct EntityHistoryRow {
251
260
  depth: u32,
252
261
  }
253
262
 
254
- async fn load_entity_history_rows(
263
+ async fn load_entity_history_rows<S>(
255
264
  spec: &EntitySurfaceSpec,
256
265
  commit_graph: Arc<Mutex<Box<dyn CommitGraphReader>>>,
257
- query_source: SqlCommitStoreQuerySource,
266
+ query_source: SqlHistoryQuerySource<S>,
258
267
  route: &HistoryRoute,
259
268
  limit: Option<usize>,
260
- ) -> Result<Vec<EntityHistoryRow>, LixError> {
269
+ ) -> Result<Vec<EntityHistoryRow>, LixError>
270
+ where
271
+ S: StorageRead + Clone + Send + Sync + 'static,
272
+ {
261
273
  let history_view_name = format!("{}_history", spec.schema_key);
262
274
  let entries = load_history_entries(
263
275
  HistoryViewDescriptor {
@@ -364,14 +376,14 @@ fn entity_history_column_value(
364
376
  return Ok(snapshot.get(column_name).cloned());
365
377
  }
366
378
 
367
- let entity_id = row.change.entity_id.as_json_array_text().map_err(|error| {
379
+ let entity_pk = row.change.entity_pk.as_json_array_text().map_err(|error| {
368
380
  DataFusionError::Execution(format!(
369
- "sql2 entity history provider failed to project entity id: {error}"
381
+ "sql2 entity history provider failed to project entity pk: {error}"
370
382
  ))
371
383
  })?;
372
384
  tombstone_identity_column_value(
373
385
  column_name,
374
- &entity_id,
386
+ &entity_pk,
375
387
  HistoryIdentityProjection::PrimaryKeyPaths(&spec.primary_key_paths),
376
388
  )
377
389
  .map_err(|error| DataFusionError::Execution(error.to_string()))
@@ -382,14 +394,14 @@ fn entity_history_system_column_array(
382
394
  rows: &[EntityHistoryRow],
383
395
  ) -> Result<ArrayRef> {
384
396
  Ok(match column_name {
385
- "entity_id" => Arc::new(StringArray::from(
397
+ "entity_pk" => Arc::new(StringArray::from(
386
398
  rows.iter()
387
399
  .map(|row| {
388
400
  Some(
389
401
  row.change
390
- .entity_id
402
+ .entity_pk
391
403
  .as_json_array_text()
392
- .expect("canonical change entity identity should project"),
404
+ .expect("canonical change entity primary key should project"),
393
405
  )
394
406
  })
395
407
  .collect::<Vec<_>>(),
@@ -436,5 +448,5 @@ fn projected_schema(schema: &SchemaRef, projection: Option<&Vec<usize>>) -> Resu
436
448
  }
437
449
 
438
450
  fn lix_error_to_datafusion_error(error: LixError) -> DataFusionError {
439
- super::error::lix_error_to_datafusion_error(error)
451
+ crate::sql2::error::lix_error_to_datafusion_error(error)
440
452
  }