@lix-js/sdk 0.6.0-preview.2 → 0.6.0-preview.3

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 (165) hide show
  1. package/SKILL.md +4 -5
  2. package/dist/engine-wasm/wasm/lix_engine.js +1 -1
  3. package/dist/engine-wasm/wasm/lix_engine.wasm +0 -0
  4. package/dist/generated/builtin-schemas.d.ts +87 -162
  5. package/dist/generated/builtin-schemas.js +139 -236
  6. package/dist/open-lix.d.ts +1 -1
  7. package/dist-engine-src/src/binary_cas/types.rs +0 -6
  8. package/dist-engine-src/src/catalog/context.rs +412 -0
  9. package/dist-engine-src/src/catalog/mod.rs +10 -0
  10. package/dist-engine-src/src/catalog/schema.rs +4 -0
  11. package/dist-engine-src/src/catalog/snapshot.rs +1114 -0
  12. package/dist-engine-src/src/cel/mod.rs +1 -1
  13. package/dist-engine-src/src/cel/provider.rs +1 -1
  14. package/dist-engine-src/src/commit_graph/context.rs +328 -1015
  15. package/dist-engine-src/src/commit_graph/mod.rs +2 -3
  16. package/dist-engine-src/src/commit_graph/types.rs +7 -43
  17. package/dist-engine-src/src/commit_graph/walker.rs +57 -81
  18. package/dist-engine-src/src/commit_store/codec.rs +887 -0
  19. package/dist-engine-src/src/commit_store/context.rs +944 -0
  20. package/dist-engine-src/src/commit_store/materialization.rs +84 -0
  21. package/dist-engine-src/src/commit_store/mod.rs +16 -0
  22. package/dist-engine-src/src/commit_store/storage.rs +600 -0
  23. package/dist-engine-src/src/commit_store/types.rs +215 -0
  24. package/dist-engine-src/src/common/identity.rs +15 -5
  25. package/dist-engine-src/src/common/json_pointer.rs +67 -0
  26. package/dist-engine-src/src/common/metadata.rs +17 -12
  27. package/dist-engine-src/src/common/mod.rs +5 -5
  28. package/dist-engine-src/src/domain.rs +324 -0
  29. package/dist-engine-src/src/engine.rs +29 -43
  30. package/dist-engine-src/src/entity_identity.rs +238 -118
  31. package/dist-engine-src/src/functions/context.rs +17 -52
  32. package/dist-engine-src/src/functions/deterministic.rs +1 -1
  33. package/dist-engine-src/src/functions/mod.rs +1 -1
  34. package/dist-engine-src/src/functions/provider.rs +4 -4
  35. package/dist-engine-src/src/functions/state.rs +39 -66
  36. package/dist-engine-src/src/functions/types.rs +1 -1
  37. package/dist-engine-src/src/init.rs +204 -151
  38. package/dist-engine-src/src/json_store/context.rs +354 -60
  39. package/dist-engine-src/src/json_store/encoded.rs +6 -6
  40. package/dist-engine-src/src/json_store/mod.rs +4 -1
  41. package/dist-engine-src/src/json_store/store.rs +884 -11
  42. package/dist-engine-src/src/json_store/types.rs +166 -1
  43. package/dist-engine-src/src/lib.rs +10 -9
  44. package/dist-engine-src/src/live_state/context.rs +608 -830
  45. package/dist-engine-src/src/live_state/mod.rs +3 -3
  46. package/dist-engine-src/src/live_state/overlay.rs +7 -7
  47. package/dist-engine-src/src/live_state/reader.rs +5 -5
  48. package/dist-engine-src/src/live_state/types.rs +19 -36
  49. package/dist-engine-src/src/live_state/visibility.rs +19 -14
  50. package/dist-engine-src/src/plugin/archive.rs +3 -6
  51. package/dist-engine-src/src/plugin/install.rs +0 -18
  52. package/dist-engine-src/src/plugin/plugin_manifest.json +0 -1
  53. package/dist-engine-src/src/schema/annotations/defaults.rs +2 -7
  54. package/dist-engine-src/src/schema/builtin/lix_account.json +0 -1
  55. package/dist-engine-src/src/schema/builtin/lix_active_account.json +0 -1
  56. package/dist-engine-src/src/schema/builtin/lix_binary_blob_ref.json +0 -1
  57. package/dist-engine-src/src/schema/builtin/lix_change.json +11 -10
  58. package/dist-engine-src/src/schema/builtin/lix_change_author.json +0 -1
  59. package/dist-engine-src/src/schema/builtin/lix_commit.json +8 -46
  60. package/dist-engine-src/src/schema/builtin/lix_commit_edge.json +29 -22
  61. package/dist-engine-src/src/schema/builtin/lix_directory_descriptor.json +0 -1
  62. package/dist-engine-src/src/schema/builtin/lix_file_descriptor.json +0 -1
  63. package/dist-engine-src/src/schema/builtin/lix_key_value.json +0 -1
  64. package/dist-engine-src/src/schema/builtin/lix_label.json +10 -3
  65. package/dist-engine-src/src/schema/builtin/lix_label_assignment.json +74 -0
  66. package/dist-engine-src/src/schema/builtin/lix_registered_schema.json +2 -8
  67. package/dist-engine-src/src/schema/builtin/lix_version_descriptor.json +0 -1
  68. package/dist-engine-src/src/schema/builtin/lix_version_ref.json +0 -1
  69. package/dist-engine-src/src/schema/builtin/mod.rs +10 -59
  70. package/dist-engine-src/src/schema/compatibility.rs +787 -0
  71. package/dist-engine-src/src/schema/definition.json +47 -17
  72. package/dist-engine-src/src/schema/definition.rs +202 -96
  73. package/dist-engine-src/src/schema/key.rs +9 -77
  74. package/dist-engine-src/src/schema/mod.rs +4 -4
  75. package/dist-engine-src/src/schema/tests.rs +133 -92
  76. package/dist-engine-src/src/session/context.rs +40 -42
  77. package/dist-engine-src/src/session/create_version.rs +22 -14
  78. package/dist-engine-src/src/session/execute.rs +45 -14
  79. package/dist-engine-src/src/session/merge/apply.rs +4 -4
  80. package/dist-engine-src/src/session/merge/conflicts.rs +3 -2
  81. package/dist-engine-src/src/session/merge/stats.rs +1 -1
  82. package/dist-engine-src/src/session/merge/version.rs +35 -45
  83. package/dist-engine-src/src/session/mod.rs +4 -2
  84. package/dist-engine-src/src/session/optimization9_sql2_bench.rs +100 -0
  85. package/dist-engine-src/src/session/switch_version.rs +16 -28
  86. package/dist-engine-src/src/sql2/change_provider.rs +14 -20
  87. package/dist-engine-src/src/sql2/classify.rs +61 -26
  88. package/dist-engine-src/src/sql2/context.rs +22 -18
  89. package/dist-engine-src/src/sql2/directory_history_provider.rs +28 -20
  90. package/dist-engine-src/src/sql2/directory_provider.rs +131 -83
  91. package/dist-engine-src/src/sql2/entity_history_provider.rs +10 -14
  92. package/dist-engine-src/src/sql2/entity_provider.rs +680 -169
  93. package/dist-engine-src/src/sql2/error.rs +21 -1
  94. package/dist-engine-src/src/sql2/execute.rs +325 -264
  95. package/dist-engine-src/src/sql2/file_history_provider.rs +29 -21
  96. package/dist-engine-src/src/sql2/file_provider.rs +533 -108
  97. package/dist-engine-src/src/sql2/filesystem_planner.rs +58 -94
  98. package/dist-engine-src/src/sql2/filesystem_visibility.rs +37 -23
  99. package/dist-engine-src/src/sql2/history_projection.rs +3 -27
  100. package/dist-engine-src/src/sql2/history_provider.rs +11 -17
  101. package/dist-engine-src/src/sql2/history_route.rs +22 -8
  102. package/dist-engine-src/src/sql2/lix_state_provider.rs +178 -96
  103. package/dist-engine-src/src/sql2/mod.rs +6 -3
  104. package/dist-engine-src/src/sql2/predicate_typecheck.rs +246 -0
  105. package/dist-engine-src/src/sql2/public_bind/assignment.rs +46 -0
  106. package/dist-engine-src/src/sql2/public_bind/capability.rs +41 -0
  107. package/dist-engine-src/src/sql2/public_bind/dml.rs +166 -0
  108. package/dist-engine-src/src/sql2/public_bind/mod.rs +25 -0
  109. package/dist-engine-src/src/sql2/public_bind/table.rs +168 -0
  110. package/dist-engine-src/src/sql2/read_only.rs +10 -12
  111. package/dist-engine-src/src/sql2/session.rs +7 -10
  112. package/dist-engine-src/src/sql2/udfs/lix_timestamp.rs +76 -0
  113. package/dist-engine-src/src/sql2/udfs/mod.rs +8 -1
  114. package/dist-engine-src/src/sql2/udfs/public_call.rs +211 -0
  115. package/dist-engine-src/src/sql2/version_provider.rs +46 -31
  116. package/dist-engine-src/src/sql2/version_scope.rs +4 -4
  117. package/dist-engine-src/src/storage_bench.rs +1782 -325
  118. package/dist-engine-src/src/test_support.rs +183 -36
  119. package/dist-engine-src/src/tracked_state/by_file_index.rs +20 -24
  120. package/dist-engine-src/src/tracked_state/codec.rs +1519 -181
  121. package/dist-engine-src/src/tracked_state/context.rs +1155 -271
  122. package/dist-engine-src/src/tracked_state/diff.rs +249 -57
  123. package/dist-engine-src/src/tracked_state/materialization.rs +365 -103
  124. package/dist-engine-src/src/tracked_state/materializer.rs +488 -0
  125. package/dist-engine-src/src/tracked_state/merge.rs +37 -19
  126. package/dist-engine-src/src/tracked_state/mod.rs +8 -7
  127. package/dist-engine-src/src/tracked_state/storage.rs +138 -6
  128. package/dist-engine-src/src/tracked_state/tree.rs +695 -252
  129. package/dist-engine-src/src/tracked_state/types.rs +176 -6
  130. package/dist-engine-src/src/transaction/commit.rs +695 -435
  131. package/dist-engine-src/src/transaction/context.rs +551 -310
  132. package/dist-engine-src/src/transaction/live_state_overlay.rs +9 -8
  133. package/dist-engine-src/src/transaction/mod.rs +2 -0
  134. package/dist-engine-src/src/transaction/normalization.rs +311 -447
  135. package/dist-engine-src/src/transaction/prep.rs +37 -0
  136. package/dist-engine-src/src/transaction/schema_resolver.rs +93 -71
  137. package/dist-engine-src/src/transaction/staging.rs +701 -406
  138. package/dist-engine-src/src/transaction/types.rs +231 -122
  139. package/dist-engine-src/src/transaction/validation.rs +2717 -1698
  140. package/dist-engine-src/src/untracked_state/codec.rs +40 -96
  141. package/dist-engine-src/src/untracked_state/context.rs +21 -5
  142. package/dist-engine-src/src/untracked_state/materialization.rs +10 -104
  143. package/dist-engine-src/src/untracked_state/mod.rs +3 -5
  144. package/dist-engine-src/src/untracked_state/storage.rs +105 -57
  145. package/dist-engine-src/src/untracked_state/types.rs +63 -13
  146. package/dist-engine-src/src/version/context.rs +1 -13
  147. package/dist-engine-src/src/version/lifecycle.rs +221 -0
  148. package/dist-engine-src/src/version/mod.rs +3 -2
  149. package/dist-engine-src/src/version/refs.rs +12 -103
  150. package/dist-engine-src/src/version/stage_rows.rs +15 -19
  151. package/package.json +1 -1
  152. package/dist-engine-src/src/changelog/codec.rs +0 -321
  153. package/dist-engine-src/src/changelog/context.rs +0 -92
  154. package/dist-engine-src/src/changelog/materialization.rs +0 -121
  155. package/dist-engine-src/src/changelog/mod.rs +0 -13
  156. package/dist-engine-src/src/changelog/reader.rs +0 -20
  157. package/dist-engine-src/src/changelog/storage.rs +0 -220
  158. package/dist-engine-src/src/changelog/types.rs +0 -38
  159. package/dist-engine-src/src/schema/builtin/lix_change_set.json +0 -18
  160. package/dist-engine-src/src/schema/builtin/lix_change_set_element.json +0 -75
  161. package/dist-engine-src/src/schema/builtin/lix_entity_label.json +0 -63
  162. package/dist-engine-src/src/schema_registry.rs +0 -294
  163. package/dist-engine-src/src/sql2/commit_derived_provider.rs +0 -591
  164. package/dist-engine-src/src/tracked_state/rebuild.rs +0 -771
  165. package/dist-engine-src/src/tracked_state/tree_types.rs +0 -176
@@ -1,11 +1,24 @@
1
1
  use std::sync::Arc;
2
2
 
3
- use crate::json_store::JsonStoreContext;
3
+ use crate::commit_store::{Change, CommitDraftRef, CommitStoreContext};
4
+ use crate::json_store::{
5
+ JsonStoreContext, JsonWritePlacementRef, NormalizedJson, NormalizedJsonRef,
6
+ };
4
7
  use crate::storage::StorageContext;
5
8
  use crate::storage::StorageWriteSet;
6
- use crate::tracked_state::{TrackedStateContext, TrackedStateRow};
7
- use crate::untracked_state::UntrackedStateContext;
9
+ use crate::storage::StorageWriteTransaction;
10
+ use crate::tracked_state::{
11
+ MaterializedTrackedStateRow, TrackedStateContext, TrackedStateDeltaRef,
12
+ };
13
+ use crate::transaction::prepare_version_ref_row;
14
+ use crate::untracked_state::{
15
+ MaterializedUntrackedStateRow, UntrackedStateContext, UntrackedStateRow,
16
+ };
8
17
  use crate::version::VersionContext;
18
+
19
+ fn prepare_json_ref(value: &str) -> crate::json_store::JsonRef {
20
+ crate::json_store::JsonRef::for_content(value.as_bytes())
21
+ }
9
22
  use crate::GLOBAL_VERSION_ID;
10
23
 
11
24
  pub(crate) const TEST_EMPTY_ROOT_COMMIT_ID: &str = "test-empty-root";
@@ -30,7 +43,7 @@ pub(crate) async fn seed_version_head_with_rows(
30
43
  storage: StorageContext,
31
44
  version_id: &str,
32
45
  commit_id: &str,
33
- rows: &[TrackedStateRow],
46
+ rows: &[MaterializedTrackedStateRow],
34
47
  ) {
35
48
  let mut transaction = storage
36
49
  .begin_write_transaction()
@@ -38,44 +51,178 @@ pub(crate) async fn seed_version_head_with_rows(
38
51
  .expect("seed transaction should open");
39
52
  let version_ctx = VersionContext::new(Arc::new(UntrackedStateContext::new()));
40
53
  let mut writes = StorageWriteSet::new();
41
- let canonical_row = {
42
- let mut json_writer = JsonStoreContext::new().writer();
43
- version_ctx
44
- .canonical_ref_row(
45
- &mut writes,
46
- &mut json_writer,
47
- version_id,
48
- commit_id,
49
- TEST_TIMESTAMP,
50
- )
51
- .expect("version ref should canonicalize")
52
- };
54
+ let canonical_row = prepare_version_ref_row(version_id, commit_id, TEST_TIMESTAMP)
55
+ .expect("version ref should canonicalize");
53
56
  version_ctx
54
- .stage_canonical_ref_rows(&mut writes, &[canonical_row])
57
+ .stage_canonical_ref_rows(&mut writes, &[canonical_row.row])
55
58
  .expect("version ref should stage");
56
59
  writes
57
60
  .apply(&mut transaction.as_mut())
58
61
  .await
59
62
  .expect("version ref should write");
63
+ stage_tracked_root_from_materialized(
64
+ transaction.as_mut(),
65
+ &TrackedStateContext::new(),
66
+ commit_id,
67
+ None,
68
+ rows,
69
+ )
70
+ .await
71
+ .expect("tracked root should write");
72
+ transaction.commit().await.expect("seed should commit");
73
+ }
74
+
75
+ pub(crate) async fn stage_tracked_root_from_materialized(
76
+ transaction: &mut dyn StorageWriteTransaction,
77
+ tracked_state: &TrackedStateContext,
78
+ commit_id: &str,
79
+ parent_commit_id: Option<&str>,
80
+ rows: &[MaterializedTrackedStateRow],
81
+ ) -> Result<(), crate::LixError> {
60
82
  let mut writes = StorageWriteSet::new();
61
- {
62
- let mut json_writer = JsonStoreContext::new().writer();
63
- TrackedStateContext::new()
64
- .writer()
65
- .stage_root(
66
- &mut transaction.as_mut(),
67
- &mut writes,
68
- &mut json_writer,
69
- commit_id,
70
- None,
71
- rows,
72
- )
73
- .await
74
- .expect("tracked root should write");
83
+ let changes = rows
84
+ .iter()
85
+ .map(tracked_change_from_materialized)
86
+ .collect::<Result<Vec<_>, _>>()?;
87
+ let json_payloads = materialized_tracked_json_payloads(rows);
88
+ JsonStoreContext::new().writer().stage_batch(
89
+ &mut writes,
90
+ JsonWritePlacementRef::CommitPack {
91
+ commit_id,
92
+ pack_id: 0,
93
+ },
94
+ json_payloads
95
+ .iter()
96
+ .map(|json| NormalizedJsonRef::from(json)),
97
+ )?;
98
+
99
+ let parent_ids = parent_commit_id
100
+ .map(|parent| vec![parent.to_string()])
101
+ .unwrap_or_default();
102
+ let commit_change_id = format!("{commit_id}:commit");
103
+ let commit = CommitDraftRef {
104
+ id: commit_id,
105
+ change_id: &commit_change_id,
106
+ parent_ids: &parent_ids,
107
+ author_account_ids: &[],
108
+ created_at: rows
109
+ .first()
110
+ .map(|row| row.updated_at.as_str())
111
+ .unwrap_or(TEST_TIMESTAMP),
112
+ };
113
+ let commit_store = CommitStoreContext::new();
114
+ let change_ids = changes
115
+ .iter()
116
+ .map(|change| change.id.clone())
117
+ .collect::<Vec<_>>();
118
+ let existing_changes = commit_store
119
+ .reader(&mut *transaction)
120
+ .load_change_index_entries(&change_ids)
121
+ .await?;
122
+ let mut authored_changes = Vec::new();
123
+ let mut authored_created_at = Vec::new();
124
+ let mut authored_updated_at = Vec::new();
125
+ let mut adopted_changes = Vec::new();
126
+ let mut adopted_created_at = Vec::new();
127
+ let mut adopted_updated_at = Vec::new();
128
+ for ((change, row), existing) in changes.iter().zip(rows).zip(existing_changes) {
129
+ if existing.is_some() {
130
+ adopted_changes.push(change.as_ref());
131
+ adopted_created_at.push(row.created_at.as_str());
132
+ adopted_updated_at.push(row.updated_at.as_str());
133
+ } else {
134
+ authored_changes.push(change.as_ref());
135
+ authored_created_at.push(row.created_at.as_str());
136
+ authored_updated_at.push(row.updated_at.as_str());
137
+ }
75
138
  }
76
- writes
77
- .apply(&mut transaction.as_mut())
78
- .await
79
- .expect("tracked root should write");
80
- transaction.commit().await.expect("seed should commit");
139
+ let staged = commit_store
140
+ .writer(&mut *transaction, &mut writes)
141
+ .stage_tracked_commit_draft(commit, authored_changes.clone(), adopted_changes.clone())
142
+ .await?;
143
+ let mut deltas = Vec::with_capacity(changes.len());
144
+ deltas.extend(
145
+ authored_changes
146
+ .iter()
147
+ .zip(&staged.authored_locators)
148
+ .zip(authored_created_at)
149
+ .zip(authored_updated_at)
150
+ .map(
151
+ |(((change, locator), created_at), updated_at)| TrackedStateDeltaRef {
152
+ change: *change,
153
+ locator: locator.as_ref(),
154
+ created_at,
155
+ updated_at,
156
+ },
157
+ ),
158
+ );
159
+ deltas.extend(
160
+ adopted_changes
161
+ .iter()
162
+ .zip(&staged.adopted_locators)
163
+ .zip(adopted_created_at)
164
+ .zip(adopted_updated_at)
165
+ .map(
166
+ |(((change, locator), created_at), updated_at)| TrackedStateDeltaRef {
167
+ change: *change,
168
+ locator: locator.as_ref(),
169
+ created_at,
170
+ updated_at,
171
+ },
172
+ ),
173
+ );
174
+ tracked_state
175
+ .writer(&mut *transaction, &mut writes)
176
+ .stage_delta(commit_id, parent_commit_id, &deltas)
177
+ .await?;
178
+ writes.apply(&mut *transaction).await.map(|_| ())
179
+ }
180
+
181
+ pub(crate) fn tracked_change_from_materialized(
182
+ row: &MaterializedTrackedStateRow,
183
+ ) -> Result<Change, crate::LixError> {
184
+ Ok(Change {
185
+ id: row.change_id.clone(),
186
+ entity_id: row.entity_id.clone(),
187
+ schema_key: row.schema_key.clone(),
188
+ file_id: row.file_id.clone(),
189
+ snapshot_ref: row.snapshot_content.as_deref().map(prepare_json_ref),
190
+ metadata_ref: row.metadata.as_ref().map(|value| {
191
+ let serialized = crate::serialize_row_metadata(value);
192
+ prepare_json_ref(&serialized)
193
+ }),
194
+ created_at: row.created_at.clone(),
195
+ })
196
+ }
197
+
198
+ fn materialized_tracked_json_payloads(rows: &[MaterializedTrackedStateRow]) -> Vec<NormalizedJson> {
199
+ let mut payloads = Vec::new();
200
+ for row in rows {
201
+ if let Some(snapshot) = row.snapshot_content.as_deref() {
202
+ payloads.push(NormalizedJson::from_arc_unchecked(Arc::from(snapshot)));
203
+ }
204
+ if let Some(metadata) = row.metadata.as_ref() {
205
+ payloads.push(NormalizedJson::from_arc_unchecked(Arc::from(
206
+ crate::serialize_row_metadata(metadata),
207
+ )));
208
+ }
209
+ }
210
+ payloads
211
+ }
212
+
213
+ pub(crate) fn untracked_state_row_from_materialized(
214
+ _writes: &mut StorageWriteSet,
215
+ row: &MaterializedUntrackedStateRow,
216
+ ) -> Result<UntrackedStateRow, crate::LixError> {
217
+ Ok(UntrackedStateRow {
218
+ entity_id: row.entity_id.clone(),
219
+ schema_key: row.schema_key.clone(),
220
+ file_id: row.file_id.clone(),
221
+ snapshot_content: row.snapshot_content.clone(),
222
+ metadata: row.metadata.as_ref().map(crate::serialize_row_metadata),
223
+ created_at: row.created_at.clone(),
224
+ updated_at: row.updated_at.clone(),
225
+ global: row.global,
226
+ version_id: row.version_id.clone(),
227
+ })
81
228
  }
@@ -1,7 +1,10 @@
1
- use crate::tracked_state::tree_types::{
2
- TrackedStateKey, TrackedStateTreeScanRequest, TrackedStateValue,
1
+ use crate::tracked_state::codec::{
2
+ encode_key_ref as encode_tracked_key_ref, encode_value_ref as encode_tracked_value_ref,
3
3
  };
4
- use crate::tracked_state::{TrackedStateRow, TrackedStateScanRequest};
4
+ use crate::tracked_state::types::{
5
+ TrackedStateIndexValueRef, TrackedStateKey, TrackedStateKeyRef, TrackedStateTreeScanRequest,
6
+ };
7
+ use crate::tracked_state::TrackedStateScanRequest;
5
8
  use crate::NullableKeyFilter;
6
9
 
7
10
  const NULL_COMPONENT: &str = "\0";
@@ -16,19 +19,19 @@ impl ByFileIndex {
16
19
  .filter
17
20
  .file_ids
18
21
  .iter()
19
- .all(|filter| !matches!(filter, NullableKeyFilter::Any))
22
+ .all(|filter| matches!(filter, NullableKeyFilter::Value(_)))
20
23
  }
21
24
 
22
25
  pub(crate) fn scan_request_from_tracked(
23
26
  request: &TrackedStateScanRequest,
24
27
  ) -> TrackedStateTreeScanRequest {
28
+ debug_assert!(Self::should_use(request));
25
29
  let schema_keys = request
26
30
  .filter
27
31
  .file_ids
28
32
  .iter()
29
33
  .filter_map(|filter| match filter {
30
- NullableKeyFilter::Any => None,
31
- NullableKeyFilter::Null => Some(NULL_COMPONENT.to_string()),
34
+ NullableKeyFilter::Any | NullableKeyFilter::Null => None,
32
35
  NullableKeyFilter::Value(file_id) => Some(value_component(file_id)),
33
36
  })
34
37
  .collect();
@@ -43,17 +46,19 @@ impl ByFileIndex {
43
46
  schema_keys,
44
47
  entity_ids: request.filter.entity_ids.clone(),
45
48
  file_ids,
46
- include_tombstones: true,
49
+ include_tombstones: request.filter.include_tombstones,
47
50
  limit: None,
48
51
  }
49
52
  }
50
53
 
51
- pub(crate) fn key_from_row(row: &TrackedStateRow) -> TrackedStateKey {
52
- TrackedStateKey {
53
- schema_key: component(row.file_id.as_deref()),
54
- file_id: Some(row.schema_key.clone()),
55
- entity_id: row.entity_id.clone(),
56
- }
54
+ pub(crate) fn encode_key_ref(row: TrackedStateKeyRef<'_>) -> Vec<u8> {
55
+ debug_assert!(row.file_id.is_some());
56
+ let schema_key = component(row.file_id);
57
+ encode_tracked_key_ref(TrackedStateKeyRef {
58
+ schema_key: &schema_key,
59
+ file_id: Some(row.schema_key),
60
+ entity_id: row.entity_id,
61
+ })
57
62
  }
58
63
 
59
64
  pub(crate) fn primary_key_from_index_key(
@@ -67,17 +72,8 @@ impl ByFileIndex {
67
72
  })
68
73
  }
69
74
 
70
- pub(crate) fn header_value_from_primary(value: &TrackedStateValue) -> TrackedStateValue {
71
- TrackedStateValue {
72
- snapshot_ref: None,
73
- metadata_ref: None,
74
- schema_version: value.schema_version.clone(),
75
- created_at: value.created_at.clone(),
76
- updated_at: value.updated_at.clone(),
77
- change_id: value.change_id.clone(),
78
- commit_id: value.commit_id.clone(),
79
- deleted: value.deleted,
80
- }
75
+ pub(crate) fn encode_header_value_ref(value: TrackedStateIndexValueRef<'_>) -> Vec<u8> {
76
+ encode_tracked_value_ref(value)
81
77
  }
82
78
  }
83
79