@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
@@ -22,7 +22,6 @@ use serde::Deserialize;
22
22
  use tokio::sync::Mutex;
23
23
 
24
24
  use crate::binary_cas::{BlobDataReader, BlobHash};
25
- use crate::changelog::MaterializedCanonicalChange;
26
25
  use crate::commit_graph::CommitGraphReader;
27
26
  use crate::serialize_row_metadata;
28
27
  use crate::LixError;
@@ -33,10 +32,11 @@ use super::history_route::{
33
32
  HistoryColumnStyle, HistoryEntry, HistoryRoute, HistoryViewDescriptor, HISTORY_COL_CHANGE_ID,
34
33
  HISTORY_COL_COMMIT_CREATED_AT, HISTORY_COL_DEPTH, HISTORY_COL_ENTITY_ID, HISTORY_COL_FILE_ID,
35
34
  HISTORY_COL_METADATA, HISTORY_COL_OBSERVED_COMMIT_ID, HISTORY_COL_SCHEMA_KEY,
36
- HISTORY_COL_SCHEMA_VERSION, HISTORY_COL_SNAPSHOT_CONTENT, HISTORY_COL_START_COMMIT_ID,
35
+ HISTORY_COL_SNAPSHOT_CONTENT, HISTORY_COL_START_COMMIT_ID,
37
36
  };
38
37
  use super::result_metadata::json_field;
39
- use super::SqlChangelogQuerySource;
38
+ use super::SqlCommitStoreQuerySource;
39
+ use crate::commit_store::MaterializedChange;
40
40
 
41
41
  const FILE_DESCRIPTOR_SCHEMA_KEY: &str = "lix_file_descriptor";
42
42
  const DIRECTORY_DESCRIPTOR_SCHEMA_KEY: &str = "lix_directory_descriptor";
@@ -45,7 +45,7 @@ const BLOB_REF_SCHEMA_KEY: &str = "lix_binary_blob_ref";
45
45
  pub(crate) async fn register_lix_file_history_provider(
46
46
  session: &datafusion::prelude::SessionContext,
47
47
  commit_graph: Box<dyn CommitGraphReader>,
48
- query_source: SqlChangelogQuerySource,
48
+ query_source: SqlCommitStoreQuerySource,
49
49
  blob_reader: Arc<dyn BlobDataReader>,
50
50
  ) -> Result<(), LixError> {
51
51
  session
@@ -64,7 +64,7 @@ pub(crate) async fn register_lix_file_history_provider(
64
64
  struct LixFileHistoryProvider {
65
65
  schema: SchemaRef,
66
66
  commit_graph: Arc<Mutex<Box<dyn CommitGraphReader>>>,
67
- query_source: SqlChangelogQuerySource,
67
+ query_source: SqlCommitStoreQuerySource,
68
68
  blob_reader: Arc<dyn BlobDataReader>,
69
69
  }
70
70
 
@@ -77,7 +77,7 @@ impl std::fmt::Debug for LixFileHistoryProvider {
77
77
  impl LixFileHistoryProvider {
78
78
  fn new(
79
79
  commit_graph: Arc<Mutex<Box<dyn CommitGraphReader>>>,
80
- query_source: SqlChangelogQuerySource,
80
+ query_source: SqlCommitStoreQuerySource,
81
81
  blob_reader: Arc<dyn BlobDataReader>,
82
82
  ) -> Self {
83
83
  Self {
@@ -150,7 +150,7 @@ impl TableProvider for LixFileHistoryProvider {
150
150
 
151
151
  struct LixFileHistoryScanExec {
152
152
  commit_graph: Arc<Mutex<Box<dyn CommitGraphReader>>>,
153
- query_source: SqlChangelogQuerySource,
153
+ query_source: SqlCommitStoreQuerySource,
154
154
  blob_reader: Arc<dyn BlobDataReader>,
155
155
  schema: SchemaRef,
156
156
  needs_data: bool,
@@ -171,7 +171,7 @@ impl std::fmt::Debug for LixFileHistoryScanExec {
171
171
  impl LixFileHistoryScanExec {
172
172
  fn new(
173
173
  commit_graph: Arc<Mutex<Box<dyn CommitGraphReader>>>,
174
- query_source: SqlChangelogQuerySource,
174
+ query_source: SqlCommitStoreQuerySource,
175
175
  blob_reader: Arc<dyn BlobDataReader>,
176
176
  schema: SchemaRef,
177
177
  needs_data: bool,
@@ -312,7 +312,7 @@ struct FileHistoryEvent {
312
312
  start_commit_id: String,
313
313
  depth: u32,
314
314
  priority: u8,
315
- change: MaterializedCanonicalChange,
315
+ change: MaterializedChange,
316
316
  observed_commit_id: String,
317
317
  commit_created_at: String,
318
318
  }
@@ -326,7 +326,7 @@ struct FileHistoryOutputRow {
326
326
  name: Option<String>,
327
327
  hidden: Option<bool>,
328
328
  data: Option<Vec<u8>>,
329
- descriptor_change: MaterializedCanonicalChange,
329
+ descriptor_change: MaterializedChange,
330
330
  event: FileHistoryEvent,
331
331
  }
332
332
 
@@ -353,7 +353,7 @@ struct BlobRefSnapshot {
353
353
 
354
354
  async fn load_file_history_rows(
355
355
  commit_graph: Arc<Mutex<Box<dyn CommitGraphReader>>>,
356
- query_source: SqlChangelogQuerySource,
356
+ query_source: SqlCommitStoreQuerySource,
357
357
  blob_reader: &Arc<dyn BlobDataReader>,
358
358
  route: &HistoryRoute,
359
359
  needs_data: bool,
@@ -440,9 +440,10 @@ async fn load_file_history_rows(
440
440
  });
441
441
  }
442
442
  output.retain(|row| {
443
+ let entity_id = entity_id_json_array(&row.entity_id).ok();
443
444
  route.matches_surface_row(
444
445
  FILE_DESCRIPTOR_SCHEMA_KEY,
445
- &row.entity_id,
446
+ entity_id.as_deref().unwrap_or(&row.entity_id),
446
447
  Some(&row.entity_id),
447
448
  row.event.depth,
448
449
  )
@@ -574,7 +575,7 @@ fn parse_file_history_descriptors(
574
575
  .map(|entry| {
575
576
  let Some(snapshot_content) = entry.change.snapshot_content.as_deref() else {
576
577
  return Ok(FileHistoryDescriptorRecord {
577
- id: entry.change.entity_id.as_string()?,
578
+ id: entry.change.entity_id.as_single_string_owned()?,
578
579
  directory_id: None,
579
580
  name: None,
580
581
  hidden: None,
@@ -640,7 +641,7 @@ fn parse_file_history_blobs(
640
641
  entry
641
642
  .change
642
643
  .entity_id
643
- .as_string()
644
+ .as_single_string_owned()
644
645
  .expect("canonical change entity identity should project")
645
646
  }),
646
647
  blob_hash: None,
@@ -806,15 +807,15 @@ fn file_history_column_array(
806
807
  .map(|row| row.data.as_deref())
807
808
  .collect::<Vec<_>>(),
808
809
  )) as ArrayRef,
809
- HISTORY_COL_ENTITY_ID => string_array(rows.iter().map(|row| Some(row.entity_id.as_str()))),
810
+ HISTORY_COL_ENTITY_ID => Arc::new(StringArray::from(
811
+ rows.iter()
812
+ .map(|row| entity_id_json_array(&row.entity_id).map(Some))
813
+ .collect::<std::result::Result<Vec<_>, _>>()?,
814
+ )) as ArrayRef,
810
815
  HISTORY_COL_SCHEMA_KEY => {
811
816
  string_array(rows.iter().map(|_| Some(FILE_DESCRIPTOR_SCHEMA_KEY)))
812
817
  }
813
818
  HISTORY_COL_FILE_ID => string_array(rows.iter().map(|row| Some(row.entity_id.as_str()))),
814
- HISTORY_COL_SCHEMA_VERSION => string_array(
815
- rows.iter()
816
- .map(|row| Some(row.descriptor_change.schema_version.as_str())),
817
- ),
818
819
  HISTORY_COL_CHANGE_ID => {
819
820
  string_array(rows.iter().map(|row| Some(row.event.change.id.as_str())))
820
821
  }
@@ -868,11 +869,10 @@ fn lix_file_history_schema() -> SchemaRef {
868
869
  Field::new("name", DataType::Utf8, true),
869
870
  Field::new("hidden", DataType::Boolean, true),
870
871
  Field::new("data", DataType::Binary, true),
871
- Field::new(HISTORY_COL_ENTITY_ID, DataType::Utf8, false),
872
+ json_field(HISTORY_COL_ENTITY_ID, false),
872
873
  Field::new(HISTORY_COL_SCHEMA_KEY, DataType::Utf8, false),
873
874
  Field::new(HISTORY_COL_FILE_ID, DataType::Utf8, true),
874
875
  json_field(HISTORY_COL_SNAPSHOT_CONTENT, true),
875
- Field::new(HISTORY_COL_SCHEMA_VERSION, DataType::Utf8, false),
876
876
  Field::new(HISTORY_COL_CHANGE_ID, DataType::Utf8, false),
877
877
  json_field(HISTORY_COL_METADATA, true),
878
878
  Field::new(HISTORY_COL_OBSERVED_COMMIT_ID, DataType::Utf8, false),
@@ -897,6 +897,14 @@ fn datafusion_error_to_lix_error(error: DataFusionError) -> LixError {
897
897
  super::error::datafusion_error_to_lix_error(error)
898
898
  }
899
899
 
900
+ fn entity_id_json_array(entity_id: &str) -> Result<String, LixError> {
901
+ serde_json::to_string(&[entity_id]).map_err(|error| {
902
+ LixError::unknown(format!(
903
+ "failed to encode history entity id as JSON: {error}"
904
+ ))
905
+ })
906
+ }
907
+
900
908
  fn lix_error_to_datafusion_error(error: LixError) -> DataFusionError {
901
909
  super::error::lix_error_to_datafusion_error(error)
902
910
  }