@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
@@ -1,14 +1,14 @@
1
1
  use serde_json::Value as JsonValue;
2
2
  use std::sync::Arc;
3
3
 
4
- use crate::entity_identity::EntityIdentity;
4
+ use crate::entity_pk::EntityPk;
5
5
  use crate::functions::{DeterministicMode, DeterministicSequence};
6
6
  use crate::json_store::NormalizedJson;
7
7
  use crate::live_state::{LiveStateReader, LiveStateRowRequest, MaterializedLiveStateRow};
8
8
  use crate::storage::StorageWriteSet;
9
9
  use crate::untracked_state::UntrackedStateContext;
10
10
  use crate::untracked_state::UntrackedStateRow;
11
- use crate::GLOBAL_VERSION_ID;
11
+ use crate::GLOBAL_BRANCH_ID;
12
12
  use crate::{LixError, NullableKeyFilter};
13
13
 
14
14
  pub(crate) const DETERMINISTIC_MODE_KEY: &str = "lix_deterministic_mode";
@@ -78,8 +78,8 @@ async fn load_key_value_row(
78
78
  live_state
79
79
  .load_row(&LiveStateRowRequest {
80
80
  schema_key: KEY_VALUE_SCHEMA_KEY.to_string(),
81
- version_id: GLOBAL_VERSION_ID.to_string(),
82
- entity_id: EntityIdentity::single(key),
81
+ branch_id: GLOBAL_BRANCH_ID.to_string(),
82
+ entity_pk: EntityPk::single(key),
83
83
  file_id: NullableKeyFilter::Null,
84
84
  })
85
85
  .await
@@ -154,7 +154,7 @@ fn deterministic_key_value_row(
154
154
  timestamp: &str,
155
155
  ) -> Result<UntrackedStateRow, LixError> {
156
156
  Ok(UntrackedStateRow {
157
- entity_id: crate::entity_identity::EntityIdentity::single(key),
157
+ entity_pk: crate::entity_pk::EntityPk::single(key),
158
158
  schema_key: KEY_VALUE_SCHEMA_KEY.to_string(),
159
159
  file_id: None,
160
160
  snapshot_content: Some(snapshot_content.to_string()),
@@ -162,17 +162,15 @@ fn deterministic_key_value_row(
162
162
  created_at: timestamp.to_string(),
163
163
  updated_at: timestamp.to_string(),
164
164
  global: true,
165
- version_id: GLOBAL_VERSION_ID.to_string(),
165
+ branch_id: GLOBAL_BRANCH_ID.to_string(),
166
166
  })
167
167
  }
168
168
 
169
169
  #[cfg(test)]
170
170
  mod tests {
171
- use std::sync::Arc;
172
-
173
- use crate::backend::testing::UnitTestBackend;
174
171
  use crate::live_state::{LiveStateContext, LiveStateRowRequest};
175
172
  use crate::storage::StorageContext;
173
+ use crate::storage::{InMemoryStorageBackend, StorageReadOptions, StorageWriteOptions};
176
174
 
177
175
  use super::*;
178
176
 
@@ -186,10 +184,13 @@ mod tests {
186
184
 
187
185
  #[tokio::test]
188
186
  async fn missing_mode_is_disabled() {
189
- let backend = Arc::new(UnitTestBackend::new());
190
- let storage = StorageContext::new(backend.clone());
187
+ let storage = StorageContext::new(InMemoryStorageBackend::new());
191
188
  let live_state = live_state_context();
192
- let reader = live_state.reader(storage.clone());
189
+ let reader = live_state.reader(
190
+ storage
191
+ .begin_read(StorageReadOptions::default())
192
+ .expect("read should open"),
193
+ );
193
194
 
194
195
  let mode = load_mode(&reader)
195
196
  .await
@@ -200,10 +201,9 @@ mod tests {
200
201
 
201
202
  #[tokio::test]
202
203
  async fn valid_mode_decodes_flags() {
203
- let backend = Arc::new(UnitTestBackend::new());
204
- let storage = StorageContext::new(backend.clone());
204
+ let storage = StorageContext::new(InMemoryStorageBackend::new());
205
205
  let live_state = live_state_context();
206
- crate::test_support::seed_global_version_head(storage.clone()).await;
206
+ crate::test_support::seed_global_branch_head(storage.clone()).await;
207
207
  write_test_key_value(
208
208
  storage.clone(),
209
209
  DETERMINISTIC_MODE_KEY,
@@ -214,7 +214,11 @@ mod tests {
214
214
  )
215
215
  .await;
216
216
 
217
- let reader = live_state.reader(storage.clone());
217
+ let reader = live_state.reader(
218
+ storage
219
+ .begin_read(StorageReadOptions::default())
220
+ .expect("read should open"),
221
+ );
218
222
  let mode = load_mode(&reader).await.expect("valid mode should decode");
219
223
 
220
224
  assert_eq!(
@@ -228,10 +232,13 @@ mod tests {
228
232
 
229
233
  #[tokio::test]
230
234
  async fn missing_sequence_is_uninitialized() {
231
- let backend = Arc::new(UnitTestBackend::new());
232
- let storage = StorageContext::new(backend.clone());
235
+ let storage = StorageContext::new(InMemoryStorageBackend::new());
233
236
  let live_state = live_state_context();
234
- let reader = live_state.reader(storage.clone());
237
+ let reader = live_state.reader(
238
+ storage
239
+ .begin_read(StorageReadOptions::default())
240
+ .expect("read should open"),
241
+ );
235
242
 
236
243
  let sequence = load_sequence(&reader)
237
244
  .await
@@ -242,10 +249,9 @@ mod tests {
242
249
 
243
250
  #[tokio::test]
244
251
  async fn valid_sequence_decodes_highest_seen() {
245
- let backend = Arc::new(UnitTestBackend::new());
246
- let storage = StorageContext::new(backend.clone());
252
+ let storage = StorageContext::new(InMemoryStorageBackend::new());
247
253
  let live_state = live_state_context();
248
- crate::test_support::seed_global_version_head(storage.clone()).await;
254
+ crate::test_support::seed_global_branch_head(storage.clone()).await;
249
255
  write_test_key_value(
250
256
  storage.clone(),
251
257
  DETERMINISTIC_SEQUENCE_KEY,
@@ -253,7 +259,11 @@ mod tests {
253
259
  )
254
260
  .await;
255
261
 
256
- let reader = live_state.reader(storage.clone());
262
+ let reader = live_state.reader(
263
+ storage
264
+ .begin_read(StorageReadOptions::default())
265
+ .expect("read should open"),
266
+ );
257
267
  let sequence = load_sequence(&reader)
258
268
  .await
259
269
  .expect("valid sequence should decode");
@@ -264,16 +274,11 @@ mod tests {
264
274
 
265
275
  #[tokio::test]
266
276
  async fn write_sequence_persists_untracked_global_key_value() {
267
- let backend = Arc::new(UnitTestBackend::new());
268
- let storage = StorageContext::new(backend.clone());
277
+ let storage = StorageContext::new(InMemoryStorageBackend::new());
269
278
  let live_state = live_state_context();
270
- crate::test_support::seed_global_version_head(storage.clone()).await;
271
- let mut tx = storage
272
- .begin_write_transaction()
273
- .await
274
- .expect("transaction should open");
279
+ crate::test_support::seed_global_branch_head(storage.clone()).await;
275
280
 
276
- let mut writes = StorageWriteSet::new();
281
+ let mut writes = storage.new_write_set();
277
282
  stage_sequence(
278
283
  &mut writes,
279
284
  DeterministicSequence { highest_seen: 7 },
@@ -281,20 +286,20 @@ mod tests {
281
286
  )
282
287
  .await
283
288
  .expect("sequence should stage");
284
- writes
285
- .apply(&mut tx.as_mut())
286
- .await
287
- .expect("sequence should apply");
288
- tx.commit().await.expect("transaction should commit");
289
-
290
- let reader = live_state.reader(storage.clone());
289
+ storage
290
+ .commit_write_set(writes, StorageWriteOptions::default())
291
+ .expect("sequence should commit");
292
+
293
+ let reader = live_state.reader(
294
+ storage
295
+ .begin_read(StorageReadOptions::default())
296
+ .expect("read should open"),
297
+ );
291
298
  let row = reader
292
299
  .load_row(&LiveStateRowRequest {
293
300
  schema_key: KEY_VALUE_SCHEMA_KEY.to_string(),
294
- version_id: GLOBAL_VERSION_ID.to_string(),
295
- entity_id: crate::entity_identity::EntityIdentity::single(
296
- DETERMINISTIC_SEQUENCE_KEY,
297
- ),
301
+ branch_id: GLOBAL_BRANCH_ID.to_string(),
302
+ entity_pk: crate::entity_pk::EntityPk::single(DETERMINISTIC_SEQUENCE_KEY),
298
303
  file_id: NullableKeyFilter::Null,
299
304
  })
300
305
  .await
@@ -311,26 +316,20 @@ mod tests {
311
316
  }
312
317
 
313
318
  async fn write_test_key_value(storage: StorageContext, key: &str, value: JsonValue) {
314
- let mut tx = storage
315
- .begin_write_transaction()
316
- .await
317
- .expect("transaction should open");
318
319
  let snapshot_content = serde_json::to_string(&serde_json::json!({
319
320
  "key": key,
320
321
  "value": value,
321
322
  }))
322
323
  .expect("snapshot should serialize");
323
- let mut writes = StorageWriteSet::new();
324
+ let mut writes = storage.new_write_set();
324
325
  let row = deterministic_key_value_row(key, &snapshot_content, "1970-01-01T00:00:00.000Z")
325
326
  .expect("test key-value should canonicalize");
326
327
  UntrackedStateContext::new()
327
328
  .writer(&mut writes)
328
329
  .stage_rows(std::iter::once(row.as_ref()))
329
330
  .expect("test key-value should stage");
330
- writes
331
- .apply(&mut tx.as_mut())
332
- .await
333
- .expect("test key-value should apply");
334
- tx.commit().await.expect("transaction should commit");
331
+ storage
332
+ .commit_write_set(writes, StorageWriteOptions::default())
333
+ .expect("test key-value should commit");
335
334
  }
336
335
  }