@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
@@ -0,0 +1,122 @@
1
+ use crate::changelog::ChangeRecord;
2
+ use crate::entity_pk::EntityPk;
3
+ use crate::json_store::{JsonLoadRequestRef, JsonReadScopeRef, JsonRef, JsonStoreReader};
4
+ use crate::storage::StorageRead;
5
+ use crate::{parse_row_metadata, LixError};
6
+
7
+ /// Read-boundary view of a changelog change with JSON refs resolved.
8
+ ///
9
+ /// `lix_change` materializes direct durable `changelog.change` facts and
10
+ /// derived `lix_commit` changes from `changelog.commit`. History surfaces
11
+ /// materialize reachability-aware commit-graph changes, while traversal context
12
+ /// stays outside this row shape.
13
+ #[derive(Debug, Clone, PartialEq, Eq)]
14
+ pub(crate) struct MaterializedChange {
15
+ pub(crate) id: String,
16
+ pub(crate) entity_pk: EntityPk,
17
+ pub(crate) schema_key: String,
18
+ pub(crate) file_id: Option<String>,
19
+ pub(crate) snapshot_content: Option<String>,
20
+ pub(crate) metadata: Option<String>,
21
+ pub(crate) created_at: String,
22
+ }
23
+
24
+ pub(crate) async fn materialize_located_history_change<S>(
25
+ json_reader: &mut JsonStoreReader<S>,
26
+ change: crate::commit_graph::CommitGraphChange,
27
+ ) -> Result<MaterializedChange, LixError>
28
+ where
29
+ S: StorageRead,
30
+ {
31
+ materialize_commit_graph_change(json_reader, change).await
32
+ }
33
+
34
+ pub(crate) async fn materialize_changelog_change_record<S>(
35
+ json_reader: &mut JsonStoreReader<S>,
36
+ change: ChangeRecord,
37
+ ) -> Result<MaterializedChange, LixError>
38
+ where
39
+ S: StorageRead,
40
+ {
41
+ materialize_commit_graph_change(
42
+ json_reader,
43
+ crate::commit_graph::CommitGraphChange {
44
+ id: change.change_id,
45
+ entity_pk: change.entity_pk,
46
+ schema_key: change.schema_key,
47
+ file_id: change.file_id,
48
+ snapshot_ref: change.snapshot_ref,
49
+ metadata_ref: change.metadata_ref,
50
+ created_at: change.created_at,
51
+ },
52
+ )
53
+ .await
54
+ }
55
+
56
+ pub(crate) async fn materialize_commit_graph_change<S>(
57
+ json_reader: &mut JsonStoreReader<S>,
58
+ change: crate::commit_graph::CommitGraphChange,
59
+ ) -> Result<MaterializedChange, LixError>
60
+ where
61
+ S: StorageRead,
62
+ {
63
+ let snapshot_content = load_optional_changelog_json_text(
64
+ json_reader,
65
+ change.snapshot_ref.as_ref(),
66
+ "snapshot_ref",
67
+ )
68
+ .await?;
69
+ let metadata = match load_optional_changelog_json_text(
70
+ json_reader,
71
+ change.metadata_ref.as_ref(),
72
+ "metadata_ref",
73
+ )
74
+ .await?
75
+ {
76
+ Some(value) => Some(parse_row_metadata(&value, "changelog change metadata_ref")?),
77
+ None => None,
78
+ };
79
+ Ok(MaterializedChange {
80
+ id: change.id,
81
+ entity_pk: change.entity_pk,
82
+ schema_key: change.schema_key,
83
+ file_id: change.file_id,
84
+ snapshot_content,
85
+ metadata,
86
+ created_at: change.created_at,
87
+ })
88
+ }
89
+
90
+ async fn load_optional_changelog_json_text<S>(
91
+ json_reader: &mut JsonStoreReader<S>,
92
+ json_ref: Option<&JsonRef>,
93
+ field: &str,
94
+ ) -> Result<Option<String>, LixError>
95
+ where
96
+ S: StorageRead,
97
+ {
98
+ let Some(json_ref) = json_ref else {
99
+ return Ok(None);
100
+ };
101
+ let batch = json_reader
102
+ .load_bytes_many(JsonLoadRequestRef {
103
+ refs: std::slice::from_ref(json_ref),
104
+ scope: JsonReadScopeRef::OutOfBand,
105
+ })
106
+ .await?;
107
+ let Some(bytes) = batch.into_values().into_iter().next().flatten() else {
108
+ return Err(LixError::new(
109
+ LixError::CODE_INTERNAL_ERROR,
110
+ format!(
111
+ "changelog change {field} '{}' is missing",
112
+ json_ref.to_hex()
113
+ ),
114
+ ));
115
+ };
116
+ String::from_utf8(bytes).map(Some).map_err(|error| {
117
+ LixError::new(
118
+ LixError::CODE_INTERNAL_ERROR,
119
+ format!("changelog change {field} is not UTF-8 JSON: {error}"),
120
+ )
121
+ })
122
+ }
@@ -6,28 +6,31 @@ use serde_json::Value as JsonValue;
6
6
  use tokio::sync::Mutex;
7
7
 
8
8
  use crate::binary_cas::{BlobBytesBatch, BlobDataReader, BlobHash};
9
+ use crate::branch::{BranchHead, BranchRefReader};
9
10
  use crate::commit_graph::CommitGraphReader;
10
- use crate::commit_store::CommitStoreReader;
11
11
  use crate::functions::FunctionProviderHandle;
12
12
  use crate::json_store::JsonStoreReader;
13
13
  use crate::live_state::{
14
14
  LiveStateFilter, LiveStateReader, LiveStateRowRequest, LiveStateScanRequest,
15
15
  MaterializedLiveStateRow,
16
16
  };
17
- use crate::storage::{ScopedStorageReader, StorageReadTransaction};
17
+ use crate::storage::StorageRead;
18
18
  use crate::transaction::types::{TransactionWrite, TransactionWriteOutcome};
19
- use crate::version::{VersionHead, VersionRefReader};
20
19
  use crate::LixError;
21
20
 
22
- pub(crate) type SqlReadStore =
23
- ScopedStorageReader<Box<dyn StorageReadTransaction + Send + Sync + 'static>>;
24
- pub(crate) type SqlCommitStoreQuerySource = CommitStoreQuerySource<SqlReadStore>;
25
- pub(crate) type SqlJsonReader = JsonStoreReader<ScopedStorageReader<SqlReadStore>>;
21
+ pub(crate) type SqlChangelogQuerySource<S> = ChangelogQuerySource<S>;
22
+ pub(crate) type SqlHistoryQuerySource<S> = HistoryQuerySource<S>;
23
+ pub(crate) type SqlJsonReader<S> = JsonStoreReader<S>;
26
24
 
27
25
  #[derive(Clone)]
28
- pub(crate) struct CommitStoreQuerySource<S> {
29
- pub(crate) commit_store_reader: Arc<CommitStoreReader<ScopedStorageReader<S>>>,
30
- pub(crate) json_reader: JsonStoreReader<ScopedStorageReader<S>>,
26
+ pub(crate) struct HistoryQuerySource<S> {
27
+ pub(crate) json_reader: JsonStoreReader<S>,
28
+ }
29
+
30
+ #[derive(Clone)]
31
+ pub(crate) struct ChangelogQuerySource<S> {
32
+ pub(crate) store: S,
33
+ pub(crate) json_reader: JsonStoreReader<S>,
31
34
  }
32
35
 
33
36
  /// Read-only execution boundary for `sql2::execute_sql(...)`.
@@ -41,12 +44,15 @@ pub(crate) struct CommitStoreQuerySource<S> {
41
44
  /// sources.
42
45
  #[allow(dead_code)]
43
46
  pub(crate) trait SqlExecutionContext {
44
- fn active_version_id(&self) -> &str;
47
+ type ReadStore: StorageRead + Clone + Send + Sync + 'static;
48
+
49
+ fn active_branch_id(&self) -> &str;
45
50
  fn live_state(&self) -> Arc<dyn LiveStateReader>;
46
51
  fn functions(&self) -> FunctionProviderHandle;
47
- fn commit_store_query_source(&self) -> SqlCommitStoreQuerySource;
52
+ fn history_query_source(&self) -> SqlHistoryQuerySource<Self::ReadStore>;
53
+ fn changelog_query_source(&self) -> SqlChangelogQuerySource<Self::ReadStore>;
48
54
  fn commit_graph(&self) -> Box<dyn CommitGraphReader>;
49
- fn version_ref(&self) -> Arc<dyn VersionRefReader>;
55
+ fn branch_ref(&self) -> Arc<dyn BranchRefReader>;
50
56
  fn blob_reader(&self) -> Arc<dyn BlobDataReader>;
51
57
  fn list_visible_schemas(&self) -> Result<Vec<JsonValue>, LixError>;
52
58
  }
@@ -60,7 +66,7 @@ pub(crate) trait SqlExecutionContext {
60
66
  #[async_trait]
61
67
  #[allow(dead_code)]
62
68
  pub(crate) trait SqlWriteExecutionContext {
63
- fn active_version_id(&self) -> &str;
69
+ fn active_branch_id(&self) -> &str;
64
70
  fn functions(&self) -> FunctionProviderHandle;
65
71
  fn list_visible_schemas(&self) -> Result<Vec<JsonValue>, LixError>;
66
72
 
@@ -71,7 +77,7 @@ pub(crate) trait SqlWriteExecutionContext {
71
77
  request: &LiveStateScanRequest,
72
78
  ) -> Result<Vec<MaterializedLiveStateRow>, LixError>;
73
79
 
74
- async fn load_version_head(&mut self, version_id: &str) -> Result<Option<String>, LixError>;
80
+ async fn load_branch_head(&mut self, branch_id: &str) -> Result<Option<String>, LixError>;
75
81
 
76
82
  async fn stage_write(
77
83
  &mut self,
@@ -120,8 +126,8 @@ impl SqlWriteContext {
120
126
  unsafe { self.ptr.0.as_ref().list_visible_schemas() }
121
127
  }
122
128
 
123
- pub(crate) fn active_version_id(&self) -> String {
124
- unsafe { self.ptr.0.as_ref().active_version_id().to_string() }
129
+ pub(crate) fn active_branch_id(&self) -> String {
130
+ unsafe { self.ptr.0.as_ref().active_branch_id().to_string() }
125
131
  }
126
132
 
127
133
  pub(crate) async fn scan_live_state(
@@ -156,9 +162,9 @@ impl SqlWriteContext {
156
162
  }
157
163
  }
158
164
 
159
- pub(crate) async fn load_version_head(
165
+ pub(crate) async fn load_branch_head(
160
166
  &self,
161
- version_id: &str,
167
+ branch_id: &str,
162
168
  ) -> Result<Option<String>, LixError> {
163
169
  let _guard = self.gate.lock().await;
164
170
  unsafe {
@@ -167,7 +173,7 @@ impl SqlWriteContext {
167
173
  .as_ptr()
168
174
  .as_mut()
169
175
  .unwrap()
170
- .load_version_head(version_id)
176
+ .load_branch_head(branch_id)
171
177
  .await
172
178
  }
173
179
  }
@@ -266,8 +272,8 @@ impl LiveStateReader for WriteContextLiveStateReader {
266
272
  .scan_live_state(&LiveStateScanRequest {
267
273
  filter: LiveStateFilter {
268
274
  schema_keys: vec![request.schema_key.clone()],
269
- entity_ids: vec![request.entity_id.clone()],
270
- version_ids: vec![request.version_id.clone()],
275
+ entity_pks: vec![request.entity_pk.clone()],
276
+ branch_ids: vec![request.branch_id.clone()],
271
277
  file_ids: vec![request.file_id.clone()],
272
278
  ..LiveStateFilter::default()
273
279
  },
@@ -279,30 +285,30 @@ impl LiveStateReader for WriteContextLiveStateReader {
279
285
  }
280
286
  }
281
287
 
282
- pub(crate) struct WriteContextVersionRefReader {
288
+ pub(crate) struct WriteContextBranchRefReader {
283
289
  ctx: SqlWriteContext,
284
290
  }
285
291
 
286
- impl WriteContextVersionRefReader {
292
+ impl WriteContextBranchRefReader {
287
293
  pub(crate) fn new(ctx: SqlWriteContext) -> Self {
288
294
  Self { ctx }
289
295
  }
290
296
  }
291
297
 
292
298
  #[async_trait]
293
- impl VersionRefReader for WriteContextVersionRefReader {
294
- async fn load_head(&self, version_id: &str) -> Result<Option<VersionHead>, LixError> {
299
+ impl BranchRefReader for WriteContextBranchRefReader {
300
+ async fn load_head(&self, branch_id: &str) -> Result<Option<BranchHead>, LixError> {
295
301
  Ok(self
296
302
  .ctx
297
- .load_version_head(version_id)
303
+ .load_branch_head(branch_id)
298
304
  .await?
299
- .map(|commit_id| VersionHead {
300
- version_id: version_id.to_string(),
305
+ .map(|commit_id| BranchHead {
306
+ branch_id: branch_id.to_string(),
301
307
  commit_id,
302
308
  }))
303
309
  }
304
310
 
305
- async fn scan_heads(&self) -> Result<Vec<VersionHead>, LixError> {
311
+ async fn scan_heads(&self) -> Result<Vec<BranchHead>, LixError> {
306
312
  Err(LixError::new(
307
313
  "LIX_ERROR_UNKNOWN",
308
314
  "scan_heads is not available through sql2 write context",
@@ -85,7 +85,7 @@ fn classify_datafusion_error(error: &DataFusionError) -> LixError {
85
85
  || lower.contains("history table")
86
86
  {
87
87
  return LixError::new(LixError::CODE_HISTORY_FILTER_REQUIRED, message)
88
- .with_hint("Add a commit/version range predicate before querying history tables.");
88
+ .with_hint("Add a commit/branch range predicate before querying history tables.");
89
89
  }
90
90
 
91
91
  if lower.contains("table not found")