@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
@@ -21,7 +21,6 @@ use futures_util::stream;
21
21
  use serde::Deserialize;
22
22
  use tokio::sync::Mutex;
23
23
 
24
- use crate::changelog::MaterializedCanonicalChange;
25
24
  use crate::commit_graph::CommitGraphReader;
26
25
  use crate::serialize_row_metadata;
27
26
  use crate::LixError;
@@ -32,17 +31,18 @@ use super::history_route::{
32
31
  HistoryColumnStyle, HistoryEntry, HistoryRoute, HistoryViewDescriptor, HISTORY_COL_CHANGE_ID,
33
32
  HISTORY_COL_COMMIT_CREATED_AT, HISTORY_COL_DEPTH, HISTORY_COL_ENTITY_ID, HISTORY_COL_FILE_ID,
34
33
  HISTORY_COL_METADATA, HISTORY_COL_OBSERVED_COMMIT_ID, HISTORY_COL_SCHEMA_KEY,
35
- HISTORY_COL_SCHEMA_VERSION, HISTORY_COL_SNAPSHOT_CONTENT, HISTORY_COL_START_COMMIT_ID,
34
+ HISTORY_COL_SNAPSHOT_CONTENT, HISTORY_COL_START_COMMIT_ID,
36
35
  };
37
36
  use super::result_metadata::json_field;
38
- use super::SqlChangelogQuerySource;
37
+ use super::SqlCommitStoreQuerySource;
38
+ use crate::commit_store::MaterializedChange;
39
39
 
40
40
  const DIRECTORY_DESCRIPTOR_SCHEMA_KEY: &str = "lix_directory_descriptor";
41
41
 
42
42
  pub(crate) async fn register_lix_directory_history_provider(
43
43
  session: &datafusion::prelude::SessionContext,
44
44
  commit_graph: Box<dyn CommitGraphReader>,
45
- query_source: SqlChangelogQuerySource,
45
+ query_source: SqlCommitStoreQuerySource,
46
46
  ) -> Result<(), LixError> {
47
47
  session
48
48
  .register_table(
@@ -59,7 +59,7 @@ pub(crate) async fn register_lix_directory_history_provider(
59
59
  struct LixDirectoryHistoryProvider {
60
60
  schema: SchemaRef,
61
61
  commit_graph: Arc<Mutex<Box<dyn CommitGraphReader>>>,
62
- query_source: SqlChangelogQuerySource,
62
+ query_source: SqlCommitStoreQuerySource,
63
63
  }
64
64
 
65
65
  impl std::fmt::Debug for LixDirectoryHistoryProvider {
@@ -71,7 +71,7 @@ impl std::fmt::Debug for LixDirectoryHistoryProvider {
71
71
  impl LixDirectoryHistoryProvider {
72
72
  fn new(
73
73
  commit_graph: Arc<Mutex<Box<dyn CommitGraphReader>>>,
74
- query_source: SqlChangelogQuerySource,
74
+ query_source: SqlCommitStoreQuerySource,
75
75
  ) -> Self {
76
76
  Self {
77
77
  schema: lix_directory_history_schema(),
@@ -130,7 +130,7 @@ impl TableProvider for LixDirectoryHistoryProvider {
130
130
 
131
131
  struct LixDirectoryHistoryScanExec {
132
132
  commit_graph: Arc<Mutex<Box<dyn CommitGraphReader>>>,
133
- query_source: SqlChangelogQuerySource,
133
+ query_source: SqlCommitStoreQuerySource,
134
134
  schema: SchemaRef,
135
135
  route: HistoryRoute,
136
136
  limit: Option<usize>,
@@ -149,7 +149,7 @@ impl std::fmt::Debug for LixDirectoryHistoryScanExec {
149
149
  impl LixDirectoryHistoryScanExec {
150
150
  fn new(
151
151
  commit_graph: Arc<Mutex<Box<dyn CommitGraphReader>>>,
152
- query_source: SqlChangelogQuerySource,
152
+ query_source: SqlCommitStoreQuerySource,
153
153
  schema: SchemaRef,
154
154
  route: HistoryRoute,
155
155
  limit: Option<usize>,
@@ -265,7 +265,7 @@ struct DirectoryHistoryOutputRow {
265
265
  parent_id: Option<String>,
266
266
  name: Option<String>,
267
267
  hidden: Option<bool>,
268
- descriptor_change: MaterializedCanonicalChange,
268
+ descriptor_change: MaterializedChange,
269
269
  event: DirectoryHistoryEvent,
270
270
  }
271
271
 
@@ -274,7 +274,7 @@ struct DirectoryHistoryEvent {
274
274
  directory_id: String,
275
275
  start_commit_id: String,
276
276
  depth: u32,
277
- change: MaterializedCanonicalChange,
277
+ change: MaterializedChange,
278
278
  observed_commit_id: String,
279
279
  commit_created_at: String,
280
280
  }
@@ -289,7 +289,7 @@ struct DirectoryDescriptorSnapshot {
289
289
 
290
290
  async fn load_directory_history_rows(
291
291
  commit_graph: Arc<Mutex<Box<dyn CommitGraphReader>>>,
292
- query_source: SqlChangelogQuerySource,
292
+ query_source: SqlCommitStoreQuerySource,
293
293
  route: &HistoryRoute,
294
294
  ) -> Result<Vec<DirectoryHistoryOutputRow>, LixError> {
295
295
  let event_route = route.traversal_only();
@@ -356,9 +356,10 @@ async fn load_directory_history_rows(
356
356
  });
357
357
  }
358
358
  output.retain(|row| {
359
+ let entity_id = entity_id_json_array(&row.entity_id).ok();
359
360
  route.matches_surface_row(
360
361
  DIRECTORY_DESCRIPTOR_SCHEMA_KEY,
361
- &row.entity_id,
362
+ entity_id.as_deref().unwrap_or(&row.entity_id),
362
363
  None,
363
364
  row.event.depth,
364
365
  )
@@ -388,7 +389,7 @@ fn parse_directory_history_records(
388
389
  .map(|entry| {
389
390
  let Some(snapshot_content) = entry.change.snapshot_content.as_deref() else {
390
391
  return Ok(DirectoryHistoryRecord {
391
- id: entry.change.entity_id.as_string()?,
392
+ id: entry.change.entity_id.as_single_string_owned()?,
392
393
  parent_id: None,
393
394
  name: None,
394
395
  hidden: None,
@@ -528,15 +529,15 @@ fn directory_history_column_array(
528
529
  "hidden" => Arc::new(BooleanArray::from(
529
530
  rows.iter().map(|row| row.hidden).collect::<Vec<_>>(),
530
531
  )) as ArrayRef,
531
- HISTORY_COL_ENTITY_ID => string_array(rows.iter().map(|row| Some(row.entity_id.as_str()))),
532
+ HISTORY_COL_ENTITY_ID => Arc::new(StringArray::from(
533
+ rows.iter()
534
+ .map(|row| entity_id_json_array(&row.entity_id).map(Some))
535
+ .collect::<std::result::Result<Vec<_>, _>>()?,
536
+ )) as ArrayRef,
532
537
  HISTORY_COL_SCHEMA_KEY => {
533
538
  string_array(rows.iter().map(|_| Some(DIRECTORY_DESCRIPTOR_SCHEMA_KEY)))
534
539
  }
535
540
  HISTORY_COL_FILE_ID => string_array(rows.iter().map(|_| None)),
536
- HISTORY_COL_SCHEMA_VERSION => string_array(
537
- rows.iter()
538
- .map(|row| Some(row.descriptor_change.schema_version.as_str())),
539
- ),
540
541
  HISTORY_COL_CHANGE_ID => {
541
542
  string_array(rows.iter().map(|row| Some(row.event.change.id.as_str())))
542
543
  }
@@ -589,11 +590,10 @@ fn lix_directory_history_schema() -> SchemaRef {
589
590
  Field::new("parent_id", DataType::Utf8, true),
590
591
  Field::new("name", DataType::Utf8, true),
591
592
  Field::new("hidden", DataType::Boolean, true),
592
- Field::new(HISTORY_COL_ENTITY_ID, DataType::Utf8, false),
593
+ json_field(HISTORY_COL_ENTITY_ID, false),
593
594
  Field::new(HISTORY_COL_SCHEMA_KEY, DataType::Utf8, false),
594
595
  Field::new(HISTORY_COL_FILE_ID, DataType::Utf8, true),
595
596
  json_field(HISTORY_COL_SNAPSHOT_CONTENT, true),
596
- Field::new(HISTORY_COL_SCHEMA_VERSION, DataType::Utf8, false),
597
597
  Field::new(HISTORY_COL_CHANGE_ID, DataType::Utf8, false),
598
598
  json_field(HISTORY_COL_METADATA, true),
599
599
  Field::new(HISTORY_COL_OBSERVED_COMMIT_ID, DataType::Utf8, false),
@@ -618,6 +618,14 @@ fn datafusion_error_to_lix_error(error: DataFusionError) -> LixError {
618
618
  super::error::datafusion_error_to_lix_error(error)
619
619
  }
620
620
 
621
+ fn entity_id_json_array(entity_id: &str) -> Result<String, LixError> {
622
+ serde_json::to_string(&[entity_id]).map_err(|error| {
623
+ LixError::unknown(format!(
624
+ "failed to encode history entity id as JSON: {error}"
625
+ ))
626
+ })
627
+ }
628
+
621
629
  fn lix_error_to_datafusion_error(error: LixError) -> DataFusionError {
622
630
  super::error::lix_error_to_datafusion_error(error)
623
631
  }