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

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 (169) hide show
  1. package/SKILL.md +46 -8
  2. package/dist/engine-wasm/wasm/lix_engine.d.ts +25 -1
  3. package/dist/engine-wasm/wasm/lix_engine.js +60 -2
  4. package/dist/engine-wasm/wasm/lix_engine.wasm +0 -0
  5. package/dist/engine-wasm/wasm/lix_engine.wasm.d.ts +5 -0
  6. package/dist/generated/builtin-schemas.d.ts +87 -162
  7. package/dist/generated/builtin-schemas.js +139 -236
  8. package/dist/open-lix.d.ts +10 -3
  9. package/dist/open-lix.js +39 -0
  10. package/dist-engine-src/src/binary_cas/types.rs +0 -6
  11. package/dist-engine-src/src/catalog/context.rs +412 -0
  12. package/dist-engine-src/src/catalog/mod.rs +10 -0
  13. package/dist-engine-src/src/catalog/schema.rs +4 -0
  14. package/dist-engine-src/src/catalog/snapshot.rs +1114 -0
  15. package/dist-engine-src/src/cel/mod.rs +1 -1
  16. package/dist-engine-src/src/cel/provider.rs +1 -1
  17. package/dist-engine-src/src/commit_graph/context.rs +328 -1015
  18. package/dist-engine-src/src/commit_graph/mod.rs +2 -3
  19. package/dist-engine-src/src/commit_graph/types.rs +7 -43
  20. package/dist-engine-src/src/commit_graph/walker.rs +57 -81
  21. package/dist-engine-src/src/commit_store/codec.rs +887 -0
  22. package/dist-engine-src/src/commit_store/context.rs +944 -0
  23. package/dist-engine-src/src/commit_store/materialization.rs +84 -0
  24. package/dist-engine-src/src/commit_store/mod.rs +16 -0
  25. package/dist-engine-src/src/commit_store/storage.rs +600 -0
  26. package/dist-engine-src/src/commit_store/types.rs +215 -0
  27. package/dist-engine-src/src/common/identity.rs +15 -5
  28. package/dist-engine-src/src/common/json_pointer.rs +67 -0
  29. package/dist-engine-src/src/common/metadata.rs +17 -12
  30. package/dist-engine-src/src/common/mod.rs +5 -5
  31. package/dist-engine-src/src/domain.rs +324 -0
  32. package/dist-engine-src/src/engine.rs +29 -43
  33. package/dist-engine-src/src/entity_identity.rs +238 -118
  34. package/dist-engine-src/src/functions/context.rs +17 -52
  35. package/dist-engine-src/src/functions/deterministic.rs +1 -1
  36. package/dist-engine-src/src/functions/mod.rs +1 -1
  37. package/dist-engine-src/src/functions/provider.rs +4 -4
  38. package/dist-engine-src/src/functions/state.rs +39 -66
  39. package/dist-engine-src/src/functions/types.rs +1 -1
  40. package/dist-engine-src/src/init.rs +204 -151
  41. package/dist-engine-src/src/json_store/context.rs +354 -60
  42. package/dist-engine-src/src/json_store/encoded.rs +6 -6
  43. package/dist-engine-src/src/json_store/mod.rs +4 -1
  44. package/dist-engine-src/src/json_store/store.rs +884 -11
  45. package/dist-engine-src/src/json_store/types.rs +166 -1
  46. package/dist-engine-src/src/lib.rs +11 -10
  47. package/dist-engine-src/src/live_state/context.rs +608 -830
  48. package/dist-engine-src/src/live_state/mod.rs +3 -3
  49. package/dist-engine-src/src/live_state/overlay.rs +7 -7
  50. package/dist-engine-src/src/live_state/reader.rs +5 -5
  51. package/dist-engine-src/src/live_state/types.rs +19 -36
  52. package/dist-engine-src/src/live_state/visibility.rs +19 -14
  53. package/dist-engine-src/src/plugin/archive.rs +3 -6
  54. package/dist-engine-src/src/plugin/install.rs +0 -18
  55. package/dist-engine-src/src/plugin/plugin_manifest.json +0 -1
  56. package/dist-engine-src/src/schema/annotations/defaults.rs +2 -7
  57. package/dist-engine-src/src/schema/builtin/lix_account.json +0 -1
  58. package/dist-engine-src/src/schema/builtin/lix_active_account.json +0 -1
  59. package/dist-engine-src/src/schema/builtin/lix_binary_blob_ref.json +0 -1
  60. package/dist-engine-src/src/schema/builtin/lix_change.json +11 -10
  61. package/dist-engine-src/src/schema/builtin/lix_change_author.json +0 -1
  62. package/dist-engine-src/src/schema/builtin/lix_commit.json +8 -46
  63. package/dist-engine-src/src/schema/builtin/lix_commit_edge.json +29 -22
  64. package/dist-engine-src/src/schema/builtin/lix_directory_descriptor.json +0 -1
  65. package/dist-engine-src/src/schema/builtin/lix_file_descriptor.json +0 -1
  66. package/dist-engine-src/src/schema/builtin/lix_key_value.json +0 -1
  67. package/dist-engine-src/src/schema/builtin/lix_label.json +10 -3
  68. package/dist-engine-src/src/schema/builtin/lix_label_assignment.json +74 -0
  69. package/dist-engine-src/src/schema/builtin/lix_registered_schema.json +2 -8
  70. package/dist-engine-src/src/schema/builtin/lix_version_descriptor.json +0 -1
  71. package/dist-engine-src/src/schema/builtin/lix_version_ref.json +0 -1
  72. package/dist-engine-src/src/schema/builtin/mod.rs +10 -59
  73. package/dist-engine-src/src/schema/compatibility.rs +787 -0
  74. package/dist-engine-src/src/schema/definition.json +47 -17
  75. package/dist-engine-src/src/schema/definition.rs +202 -96
  76. package/dist-engine-src/src/schema/key.rs +9 -77
  77. package/dist-engine-src/src/schema/mod.rs +4 -4
  78. package/dist-engine-src/src/schema/tests.rs +133 -92
  79. package/dist-engine-src/src/session/context.rs +86 -48
  80. package/dist-engine-src/src/session/create_version.rs +22 -14
  81. package/dist-engine-src/src/session/execute.rs +117 -23
  82. package/dist-engine-src/src/session/merge/apply.rs +4 -4
  83. package/dist-engine-src/src/session/merge/conflicts.rs +3 -2
  84. package/dist-engine-src/src/session/merge/stats.rs +1 -1
  85. package/dist-engine-src/src/session/merge/version.rs +35 -45
  86. package/dist-engine-src/src/session/mod.rs +9 -7
  87. package/dist-engine-src/src/session/optimization9_sql2_bench.rs +100 -0
  88. package/dist-engine-src/src/session/switch_version.rs +17 -28
  89. package/dist-engine-src/src/session/transaction.rs +76 -0
  90. package/dist-engine-src/src/sql2/change_provider.rs +14 -20
  91. package/dist-engine-src/src/sql2/classify.rs +75 -48
  92. package/dist-engine-src/src/sql2/context.rs +22 -18
  93. package/dist-engine-src/src/sql2/directory_history_provider.rs +28 -20
  94. package/dist-engine-src/src/sql2/directory_provider.rs +131 -83
  95. package/dist-engine-src/src/sql2/entity_history_provider.rs +10 -14
  96. package/dist-engine-src/src/sql2/entity_provider.rs +680 -169
  97. package/dist-engine-src/src/sql2/error.rs +24 -5
  98. package/dist-engine-src/src/sql2/execute.rs +426 -272
  99. package/dist-engine-src/src/sql2/file_history_provider.rs +29 -21
  100. package/dist-engine-src/src/sql2/file_provider.rs +533 -108
  101. package/dist-engine-src/src/sql2/filesystem_planner.rs +58 -94
  102. package/dist-engine-src/src/sql2/filesystem_visibility.rs +37 -23
  103. package/dist-engine-src/src/sql2/history_projection.rs +3 -27
  104. package/dist-engine-src/src/sql2/history_provider.rs +11 -17
  105. package/dist-engine-src/src/sql2/history_route.rs +22 -8
  106. package/dist-engine-src/src/sql2/lix_state_provider.rs +178 -96
  107. package/dist-engine-src/src/sql2/mod.rs +8 -4
  108. package/dist-engine-src/src/sql2/predicate_typecheck.rs +246 -0
  109. package/dist-engine-src/src/sql2/public_bind/assignment.rs +46 -0
  110. package/dist-engine-src/src/sql2/public_bind/capability.rs +41 -0
  111. package/dist-engine-src/src/sql2/public_bind/dml.rs +172 -0
  112. package/dist-engine-src/src/sql2/public_bind/mod.rs +26 -0
  113. package/dist-engine-src/src/sql2/public_bind/table.rs +168 -0
  114. package/dist-engine-src/src/sql2/read_only.rs +10 -12
  115. package/dist-engine-src/src/sql2/session.rs +7 -10
  116. package/dist-engine-src/src/sql2/udfs/lix_timestamp.rs +76 -0
  117. package/dist-engine-src/src/sql2/udfs/mod.rs +8 -1
  118. package/dist-engine-src/src/sql2/udfs/public_call.rs +238 -0
  119. package/dist-engine-src/src/sql2/version_provider.rs +46 -31
  120. package/dist-engine-src/src/sql2/version_scope.rs +4 -4
  121. package/dist-engine-src/src/storage_bench.rs +1782 -325
  122. package/dist-engine-src/src/test_support.rs +183 -36
  123. package/dist-engine-src/src/tracked_state/by_file_index.rs +20 -24
  124. package/dist-engine-src/src/tracked_state/codec.rs +1519 -181
  125. package/dist-engine-src/src/tracked_state/context.rs +1155 -271
  126. package/dist-engine-src/src/tracked_state/diff.rs +249 -57
  127. package/dist-engine-src/src/tracked_state/materialization.rs +365 -103
  128. package/dist-engine-src/src/tracked_state/materializer.rs +488 -0
  129. package/dist-engine-src/src/tracked_state/merge.rs +37 -19
  130. package/dist-engine-src/src/tracked_state/mod.rs +8 -7
  131. package/dist-engine-src/src/tracked_state/storage.rs +138 -6
  132. package/dist-engine-src/src/tracked_state/tree.rs +695 -252
  133. package/dist-engine-src/src/tracked_state/types.rs +176 -6
  134. package/dist-engine-src/src/transaction/commit.rs +695 -435
  135. package/dist-engine-src/src/transaction/context.rs +551 -310
  136. package/dist-engine-src/src/transaction/live_state_overlay.rs +9 -8
  137. package/dist-engine-src/src/transaction/mod.rs +2 -0
  138. package/dist-engine-src/src/transaction/normalization.rs +311 -447
  139. package/dist-engine-src/src/transaction/prep.rs +37 -0
  140. package/dist-engine-src/src/transaction/schema_resolver.rs +93 -71
  141. package/dist-engine-src/src/transaction/staging.rs +701 -406
  142. package/dist-engine-src/src/transaction/types.rs +231 -122
  143. package/dist-engine-src/src/transaction/validation.rs +2717 -1698
  144. package/dist-engine-src/src/untracked_state/codec.rs +40 -96
  145. package/dist-engine-src/src/untracked_state/context.rs +21 -5
  146. package/dist-engine-src/src/untracked_state/materialization.rs +10 -104
  147. package/dist-engine-src/src/untracked_state/mod.rs +3 -5
  148. package/dist-engine-src/src/untracked_state/storage.rs +105 -57
  149. package/dist-engine-src/src/untracked_state/types.rs +63 -13
  150. package/dist-engine-src/src/version/context.rs +1 -13
  151. package/dist-engine-src/src/version/lifecycle.rs +221 -0
  152. package/dist-engine-src/src/version/mod.rs +3 -2
  153. package/dist-engine-src/src/version/refs.rs +12 -103
  154. package/dist-engine-src/src/version/stage_rows.rs +15 -19
  155. package/package.json +1 -1
  156. package/dist-engine-src/src/changelog/codec.rs +0 -321
  157. package/dist-engine-src/src/changelog/context.rs +0 -92
  158. package/dist-engine-src/src/changelog/materialization.rs +0 -121
  159. package/dist-engine-src/src/changelog/mod.rs +0 -13
  160. package/dist-engine-src/src/changelog/reader.rs +0 -20
  161. package/dist-engine-src/src/changelog/storage.rs +0 -220
  162. package/dist-engine-src/src/changelog/types.rs +0 -38
  163. package/dist-engine-src/src/schema/builtin/lix_change_set.json +0 -18
  164. package/dist-engine-src/src/schema/builtin/lix_change_set_element.json +0 -75
  165. package/dist-engine-src/src/schema/builtin/lix_entity_label.json +0 -63
  166. package/dist-engine-src/src/schema_registry.rs +0 -294
  167. package/dist-engine-src/src/sql2/commit_derived_provider.rs +0 -591
  168. package/dist-engine-src/src/tracked_state/rebuild.rs +0 -771
  169. 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