@lix-js/sdk 0.6.0-preview.4 → 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.
- package/README.md +1 -1
- package/SKILL.md +65 -64
- package/dist/engine-wasm/index.js +4 -4
- package/dist/engine-wasm/wasm/lix_engine.d.ts +5 -5
- package/dist/engine-wasm/wasm/lix_engine.js +130 -118
- package/dist/engine-wasm/wasm/lix_engine.wasm +0 -0
- package/dist/engine-wasm/wasm/lix_engine.wasm.d.ts +9 -8
- package/dist/generated/builtin-schemas.d.ts +69 -69
- package/dist/generated/builtin-schemas.js +94 -94
- package/dist/open-lix.d.ts +33 -26
- package/dist/open-lix.js +10 -10
- package/dist/sqlite/index.js +86 -30
- package/dist-engine-src/README.md +3 -3
- package/dist-engine-src/src/backend/capabilities.rs +67 -0
- package/dist-engine-src/src/backend/conformance/baseline.rs +1127 -0
- package/dist-engine-src/src/backend/conformance/factory.rs +93 -0
- package/dist-engine-src/src/backend/conformance/failure_tests.rs +608 -0
- package/dist-engine-src/src/backend/conformance/fixtures.rs +26 -0
- package/dist-engine-src/src/backend/conformance/mod.rs +75 -0
- package/dist-engine-src/src/backend/conformance/model.rs +28 -0
- package/dist-engine-src/src/backend/conformance/model_based.rs +257 -0
- package/dist-engine-src/src/backend/conformance/persistence.rs +204 -0
- package/dist-engine-src/src/backend/conformance/projection.rs +21 -0
- package/dist-engine-src/src/backend/conformance/pushdown.rs +24 -0
- package/dist-engine-src/src/backend/conformance/runner.rs +90 -0
- package/dist-engine-src/src/backend/conformance/scan.rs +24 -0
- package/dist-engine-src/src/backend/conformance/write.rs +16 -0
- package/dist-engine-src/src/backend/error.rs +94 -0
- package/dist-engine-src/src/backend/in_memory.rs +670 -0
- package/dist-engine-src/src/backend/mod.rs +36 -9
- package/dist-engine-src/src/backend/predicate.rs +80 -0
- package/dist-engine-src/src/backend/traits.rs +260 -0
- package/dist-engine-src/src/backend/types.rs +224 -81
- package/dist-engine-src/src/binary_cas/context.rs +8 -8
- package/dist-engine-src/src/binary_cas/kv.rs +234 -259
- package/dist-engine-src/src/{version → branch}/context.rs +12 -12
- package/dist-engine-src/src/branch/lifecycle.rs +221 -0
- package/dist-engine-src/src/branch/mod.rs +13 -0
- package/dist-engine-src/src/branch/refs.rs +321 -0
- package/dist-engine-src/src/branch/stage_rows.rs +67 -0
- package/dist-engine-src/src/branch/types.rs +21 -0
- package/dist-engine-src/src/catalog/context.rs +18 -18
- package/dist-engine-src/src/catalog/snapshot.rs +8 -8
- package/dist-engine-src/src/changelog/bench_support.rs +785 -0
- package/dist-engine-src/src/changelog/change.rs +1 -0
- package/dist-engine-src/src/changelog/codec.rs +497 -0
- package/dist-engine-src/src/changelog/commit.rs +1 -0
- package/dist-engine-src/src/changelog/context.rs +1614 -0
- package/dist-engine-src/src/changelog/mod.rs +29 -0
- package/dist-engine-src/src/changelog/store.rs +163 -0
- package/dist-engine-src/src/changelog/test_support.rs +54 -0
- package/dist-engine-src/src/changelog/types.rs +213 -0
- package/dist-engine-src/src/commit_graph/context.rs +317 -274
- package/dist-engine-src/src/commit_graph/mod.rs +2 -4
- package/dist-engine-src/src/commit_graph/types.rs +22 -42
- package/dist-engine-src/src/commit_graph/walker.rs +133 -103
- package/dist-engine-src/src/common/error.rs +52 -18
- package/dist-engine-src/src/common/identity.rs +2 -2
- package/dist-engine-src/src/common/mod.rs +1 -1
- package/dist-engine-src/src/domain.rs +42 -46
- package/dist-engine-src/src/engine.rs +74 -96
- package/dist-engine-src/src/{entity_identity.rs → entity_pk.rs} +89 -92
- package/dist-engine-src/src/functions/context.rs +56 -52
- package/dist-engine-src/src/functions/state.rs +51 -52
- package/dist-engine-src/src/init.rs +288 -154
- package/dist-engine-src/src/json_store/context.rs +15 -266
- package/dist-engine-src/src/json_store/mod.rs +26 -0
- package/dist-engine-src/src/json_store/store.rs +103 -718
- package/dist-engine-src/src/json_store/types.rs +4 -9
- package/dist-engine-src/src/lib.rs +49 -19
- package/dist-engine-src/src/live_state/context.rs +654 -790
- package/dist-engine-src/src/live_state/mod.rs +9 -3
- package/dist-engine-src/src/live_state/overlay.rs +4 -4
- package/dist-engine-src/src/live_state/types.rs +30 -21
- package/dist-engine-src/src/live_state/visibility.rs +514 -71
- package/dist-engine-src/src/plugin/install.rs +48 -48
- package/dist-engine-src/src/plugin/manifest.rs +7 -7
- package/dist-engine-src/src/plugin/materializer.rs +0 -275
- package/dist-engine-src/src/plugin/plugin_manifest.json +4 -3
- package/dist-engine-src/src/schema/builtin/lix_binary_blob_ref.json +2 -2
- package/dist-engine-src/src/schema/builtin/lix_branch_descriptor.json +34 -0
- package/dist-engine-src/src/schema/builtin/lix_branch_ref.json +48 -0
- package/dist-engine-src/src/schema/builtin/lix_change.json +3 -3
- package/dist-engine-src/src/schema/builtin/lix_commit.json +1 -1
- package/dist-engine-src/src/schema/builtin/lix_label_assignment.json +6 -6
- package/dist-engine-src/src/schema/builtin/mod.rs +18 -20
- package/dist-engine-src/src/schema/compatibility.rs +11 -11
- package/dist-engine-src/src/schema/definition.json +2 -2
- package/dist-engine-src/src/schema/definition.rs +5 -5
- package/dist-engine-src/src/schema/key.rs +3 -3
- package/dist-engine-src/src/schema/mod.rs +1 -1
- package/dist-engine-src/src/schema/tests.rs +18 -18
- package/dist-engine-src/src/session/context.rs +803 -148
- package/dist-engine-src/src/session/create_branch.rs +94 -0
- package/dist-engine-src/src/session/execute.rs +223 -83
- package/dist-engine-src/src/session/merge/analysis.rs +9 -3
- package/dist-engine-src/src/session/merge/{version.rs → branch.rs} +119 -129
- package/dist-engine-src/src/session/merge/conflicts.rs +2 -2
- package/dist-engine-src/src/session/merge/mod.rs +5 -6
- package/dist-engine-src/src/session/merge/stats.rs +7 -11
- package/dist-engine-src/src/session/mod.rs +15 -12
- package/dist-engine-src/src/session/switch_branch.rs +113 -0
- package/dist-engine-src/src/session/transaction.rs +495 -14
- package/dist-engine-src/src/sql2/{classify.rs → bind/classify.rs} +3 -75
- package/dist-engine-src/src/sql2/bind/error.rs +5 -0
- package/dist-engine-src/src/sql2/bind/expr.rs +29 -0
- package/dist-engine-src/src/sql2/bind/mod.rs +12 -0
- package/dist-engine-src/src/sql2/{udfs/public_call.rs → bind/public_udf.rs} +71 -3
- package/dist-engine-src/src/sql2/bind/read.rs +65 -0
- package/dist-engine-src/src/sql2/bind/statement.rs +2236 -0
- package/dist-engine-src/src/sql2/bind/table.rs +273 -0
- package/dist-engine-src/src/sql2/bind/write.rs +86 -0
- package/dist-engine-src/src/sql2/branch_scope.rs +436 -0
- package/dist-engine-src/src/sql2/catalog/capability.rs +20 -0
- package/dist-engine-src/src/sql2/catalog/entity_surface.rs +296 -0
- package/dist-engine-src/src/sql2/catalog/mod.rs +15 -0
- package/dist-engine-src/src/sql2/catalog/registry.rs +556 -0
- package/dist-engine-src/src/sql2/catalog/schema.rs +88 -0
- package/dist-engine-src/src/sql2/catalog/surface.rs +41 -0
- package/dist-engine-src/src/sql2/change_materialization.rs +122 -0
- package/dist-engine-src/src/sql2/context.rs +36 -30
- package/dist-engine-src/src/sql2/error.rs +1 -1
- package/dist-engine-src/src/sql2/exec/bound_public_write.rs +1593 -0
- package/dist-engine-src/src/sql2/exec/datafusion.rs +5266 -0
- package/dist-engine-src/src/sql2/exec/fast_write.rs +82 -0
- package/dist-engine-src/src/sql2/exec/mod.rs +24 -0
- package/dist-engine-src/src/sql2/exec/write.rs +661 -0
- package/dist-engine-src/src/sql2/filesystem_planner.rs +72 -77
- package/dist-engine-src/src/sql2/filesystem_visibility.rs +21 -21
- package/dist-engine-src/src/sql2/history_projection.rs +8 -8
- package/dist-engine-src/src/sql2/history_route.rs +35 -31
- package/dist-engine-src/src/sql2/mod.rs +28 -23
- package/dist-engine-src/src/sql2/optimize/datafusion.rs +1 -0
- package/dist-engine-src/src/sql2/optimize/mod.rs +2 -0
- package/dist-engine-src/src/sql2/optimize/simple_write.rs +116 -0
- package/dist-engine-src/src/sql2/parse/mod.rs +69 -0
- package/dist-engine-src/src/sql2/parse/normalize.rs +1 -0
- package/dist-engine-src/src/sql2/plan/branch_scope.rs +24 -0
- package/dist-engine-src/src/sql2/plan/mod.rs +5 -0
- package/dist-engine-src/src/sql2/plan/predicate.rs +22 -0
- package/dist-engine-src/src/sql2/plan/write.rs +147 -0
- package/dist-engine-src/src/sql2/predicate_typecheck.rs +258 -0
- package/dist-engine-src/src/sql2/{version_provider.rs → providers/branch.rs} +218 -214
- package/dist-engine-src/src/sql2/{change_provider.rs → providers/change.rs} +156 -42
- package/dist-engine-src/src/sql2/{directory_provider.rs → providers/directory.rs} +291 -322
- package/dist-engine-src/src/sql2/{directory_history_provider.rs → providers/directory_history.rs} +56 -42
- package/dist-engine-src/src/sql2/providers/entity.rs +1484 -0
- package/dist-engine-src/src/sql2/{entity_history_provider.rs → providers/entity_history.rs} +43 -31
- package/dist-engine-src/src/sql2/{file_provider.rs → providers/file.rs} +323 -316
- package/dist-engine-src/src/sql2/{file_history_provider.rs → providers/file_history.rs} +60 -46
- package/dist-engine-src/src/sql2/{history_provider.rs → providers/history.rs} +46 -32
- package/dist-engine-src/src/sql2/{lix_state_provider.rs → providers/lix_state.rs} +359 -329
- package/dist-engine-src/src/sql2/providers/mod.rs +508 -0
- package/dist-engine-src/src/sql2/read_only.rs +2 -2
- package/dist-engine-src/src/sql2/session.rs +47 -96
- package/dist-engine-src/src/sql2/storage/constraints.rs +1 -0
- package/dist-engine-src/src/sql2/storage/mod.rs +1 -0
- package/dist-engine-src/src/sql2/test_support/differential.rs +712 -0
- package/dist-engine-src/src/sql2/test_support/generators.rs +354 -0
- package/dist-engine-src/src/sql2/test_support/mod.rs +2 -0
- package/dist-engine-src/src/sql2/udfs/{lix_active_version_commit_id.rs → lix_active_branch_commit_id.rs} +7 -7
- package/dist-engine-src/src/sql2/udfs/mod.rs +3 -6
- package/dist-engine-src/src/sql2/write_normalization.rs +45 -22
- package/dist-engine-src/src/storage/conformance.rs +399 -0
- package/dist-engine-src/src/storage/context.rs +552 -288
- package/dist-engine-src/src/storage/mod.rs +48 -10
- package/dist-engine-src/src/storage/point.rs +440 -0
- package/dist-engine-src/src/storage/read_scope.rs +43 -64
- package/dist-engine-src/src/storage/reader.rs +867 -0
- package/dist-engine-src/src/storage/scan.rs +784 -0
- package/dist-engine-src/src/storage/spaces.rs +236 -0
- package/dist-engine-src/src/storage/stats.rs +80 -0
- package/dist-engine-src/src/storage/write_set.rs +962 -0
- package/dist-engine-src/src/storage_bench.rs +136 -4828
- package/dist-engine-src/src/test_support.rs +360 -138
- package/dist-engine-src/src/tracked_state/bench_support.rs +394 -0
- package/dist-engine-src/src/tracked_state/codec.rs +155 -1057
- package/dist-engine-src/src/tracked_state/commit_root_rebuild.rs +358 -0
- package/dist-engine-src/src/tracked_state/context.rs +1927 -993
- package/dist-engine-src/src/tracked_state/diff.rs +1715 -261
- package/dist-engine-src/src/tracked_state/merge.rs +74 -88
- package/dist-engine-src/src/tracked_state/mod.rs +19 -16
- package/dist-engine-src/src/tracked_state/{materialization.rs → row_materialization.rs} +50 -178
- package/dist-engine-src/src/tracked_state/storage.rs +243 -191
- package/dist-engine-src/src/tracked_state/tree.rs +247 -371
- package/dist-engine-src/src/tracked_state/types.rs +49 -42
- package/dist-engine-src/src/transaction/bench_support.rs +407 -0
- package/dist-engine-src/src/transaction/commit.rs +821 -713
- package/dist-engine-src/src/transaction/context.rs +705 -600
- package/dist-engine-src/src/transaction/mod.rs +13 -2
- package/dist-engine-src/src/transaction/normalization.rs +63 -76
- package/dist-engine-src/src/transaction/prep.rs +13 -13
- package/dist-engine-src/src/transaction/schema_resolver.rs +19 -5
- package/dist-engine-src/src/transaction/staging.rs +228 -434
- package/dist-engine-src/src/transaction/types.rs +41 -98
- package/dist-engine-src/src/transaction/validation.rs +382 -446
- package/dist-engine-src/src/untracked_state/codec.rs +337 -29
- package/dist-engine-src/src/untracked_state/context.rs +7 -7
- package/dist-engine-src/src/untracked_state/materialization.rs +2 -2
- package/dist-engine-src/src/untracked_state/mod.rs +1 -1
- package/dist-engine-src/src/untracked_state/storage.rs +659 -157
- package/dist-engine-src/src/untracked_state/types.rs +21 -21
- package/package.json +71 -68
- package/dist-engine-src/src/backend/kv.rs +0 -358
- package/dist-engine-src/src/backend/testing.rs +0 -658
- package/dist-engine-src/src/commit_store/codec.rs +0 -887
- package/dist-engine-src/src/commit_store/context.rs +0 -944
- package/dist-engine-src/src/commit_store/materialization.rs +0 -84
- package/dist-engine-src/src/commit_store/mod.rs +0 -16
- package/dist-engine-src/src/commit_store/storage.rs +0 -600
- package/dist-engine-src/src/commit_store/types.rs +0 -215
- package/dist-engine-src/src/schema/builtin/lix_version_descriptor.json +0 -34
- package/dist-engine-src/src/schema/builtin/lix_version_ref.json +0 -48
- package/dist-engine-src/src/session/create_version.rs +0 -88
- package/dist-engine-src/src/session/merge/apply.rs +0 -23
- package/dist-engine-src/src/session/optimization9_sql2_bench.rs +0 -100
- package/dist-engine-src/src/session/switch_version.rs +0 -110
- package/dist-engine-src/src/sql2/entity_provider.rs +0 -3211
- package/dist-engine-src/src/sql2/execute.rs +0 -3533
- package/dist-engine-src/src/sql2/public_bind/assignment.rs +0 -46
- package/dist-engine-src/src/sql2/public_bind/capability.rs +0 -41
- package/dist-engine-src/src/sql2/public_bind/dml.rs +0 -172
- package/dist-engine-src/src/sql2/public_bind/mod.rs +0 -26
- package/dist-engine-src/src/sql2/public_bind/table.rs +0 -168
- package/dist-engine-src/src/sql2/version_scope.rs +0 -394
- package/dist-engine-src/src/storage/types.rs +0 -501
- package/dist-engine-src/src/tracked_state/by_file_index.rs +0 -98
- package/dist-engine-src/src/tracked_state/materializer.rs +0 -488
- package/dist-engine-src/src/transaction/live_state_overlay.rs +0 -35
- package/dist-engine-src/src/version/lifecycle.rs +0 -221
- package/dist-engine-src/src/version/mod.rs +0 -13
- package/dist-engine-src/src/version/refs.rs +0 -330
- package/dist-engine-src/src/version/stage_rows.rs +0 -67
- package/dist-engine-src/src/version/types.rs +0 -21
|
@@ -3,7 +3,7 @@ use std::collections::BTreeMap;
|
|
|
3
3
|
use serde_json::Value as JsonValue;
|
|
4
4
|
|
|
5
5
|
use crate::catalog::SchemaCatalogFact;
|
|
6
|
-
use crate::domain::{
|
|
6
|
+
use crate::domain::{committed_row_is_exact_branch_scoped, Domain};
|
|
7
7
|
use crate::live_state::MaterializedLiveStateRow;
|
|
8
8
|
use crate::live_state::{LiveStateFilter, LiveStateReader, LiveStateScanRequest};
|
|
9
9
|
use crate::schema::schema_key_from_definition;
|
|
@@ -23,7 +23,7 @@ impl CatalogContext {
|
|
|
23
23
|
Self
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
/// Loads schema definitions for SQL surface planning at `
|
|
26
|
+
/// Loads schema definitions for SQL surface planning at `branch_id`.
|
|
27
27
|
///
|
|
28
28
|
/// SQL surfaces are a read-planning projection over the active untracked
|
|
29
29
|
/// schema catalog. Validation must use `schema_facts_for_domain` instead so
|
|
@@ -31,13 +31,13 @@ impl CatalogContext {
|
|
|
31
31
|
pub(crate) async fn schema_jsons_for_sql_read_planning<R>(
|
|
32
32
|
&self,
|
|
33
33
|
live_state: &R,
|
|
34
|
-
|
|
34
|
+
branch_id: &str,
|
|
35
35
|
) -> Result<Vec<JsonValue>, LixError>
|
|
36
36
|
where
|
|
37
37
|
R: LiveStateReader + ?Sized,
|
|
38
38
|
{
|
|
39
39
|
let facts = self
|
|
40
|
-
.schema_facts_for_domain(live_state, &Domain::schema_catalog(
|
|
40
|
+
.schema_facts_for_domain(live_state, &Domain::schema_catalog(branch_id, true))
|
|
41
41
|
.await?;
|
|
42
42
|
let mut schemas = BTreeMap::<String, JsonValue>::new();
|
|
43
43
|
for fact in facts {
|
|
@@ -74,7 +74,7 @@ impl CatalogContext {
|
|
|
74
74
|
.scan_rows(&LiveStateScanRequest {
|
|
75
75
|
filter: LiveStateFilter {
|
|
76
76
|
schema_keys: vec![REGISTERED_SCHEMA_KEY.to_string()],
|
|
77
|
-
|
|
77
|
+
branch_ids: vec![schema_domain.branch_id().to_string()],
|
|
78
78
|
file_ids: vec![NullableKeyFilter::Null],
|
|
79
79
|
untracked: Some(schema_domain.untracked()),
|
|
80
80
|
include_tombstones: false,
|
|
@@ -101,9 +101,9 @@ fn row_belongs_to_schema_catalog_domain(row: &MaterializedLiveStateRow, domain:
|
|
|
101
101
|
row.schema_key == REGISTERED_SCHEMA_KEY
|
|
102
102
|
&& row.file_id.is_none()
|
|
103
103
|
&& row.snapshot_content.is_some()
|
|
104
|
-
&& row.
|
|
104
|
+
&& row.branch_id == domain.branch_id()
|
|
105
105
|
&& row.untracked == domain.untracked()
|
|
106
|
-
&&
|
|
106
|
+
&& committed_row_is_exact_branch_scoped(row, domain.branch_id())
|
|
107
107
|
}
|
|
108
108
|
|
|
109
109
|
fn decode_registered_schema_row(
|
|
@@ -146,7 +146,7 @@ mod tests {
|
|
|
146
146
|
|
|
147
147
|
use super::*;
|
|
148
148
|
use crate::live_state::LiveStateRowRequest;
|
|
149
|
-
use crate::
|
|
149
|
+
use crate::GLOBAL_BRANCH_ID;
|
|
150
150
|
|
|
151
151
|
#[tokio::test]
|
|
152
152
|
async fn visible_schemas_are_loaded_from_registered_schema_rows() {
|
|
@@ -257,11 +257,11 @@ mod tests {
|
|
|
257
257
|
}
|
|
258
258
|
|
|
259
259
|
#[tokio::test]
|
|
260
|
-
async fn
|
|
260
|
+
async fn visible_schemas_ignore_projected_global_schema_rows_for_branch_scope() {
|
|
261
261
|
let context = CatalogContext::new();
|
|
262
262
|
let mut global_only = registered_schema_row("global_only_schema");
|
|
263
263
|
global_only.global = true;
|
|
264
|
-
global_only.
|
|
264
|
+
global_only.branch_id = "main".to_string();
|
|
265
265
|
|
|
266
266
|
let schemas = context
|
|
267
267
|
.schema_jsons_for_sql_read_planning(
|
|
@@ -338,8 +338,8 @@ mod tests {
|
|
|
338
338
|
|| request.filter.schema_keys.contains(&row.schema_key)
|
|
339
339
|
})
|
|
340
340
|
.filter(|row| {
|
|
341
|
-
request.filter.
|
|
342
|
-
|| request.filter.
|
|
341
|
+
request.filter.branch_ids.is_empty()
|
|
342
|
+
|| request.filter.branch_ids.contains(&row.branch_id)
|
|
343
343
|
})
|
|
344
344
|
.filter(|row| {
|
|
345
345
|
request
|
|
@@ -360,8 +360,8 @@ mod tests {
|
|
|
360
360
|
.iter()
|
|
361
361
|
.find(|row| {
|
|
362
362
|
row.schema_key == request.schema_key
|
|
363
|
-
&& row.
|
|
364
|
-
&& row.
|
|
363
|
+
&& row.branch_id == request.branch_id
|
|
364
|
+
&& row.entity_pk == request.entity_pk
|
|
365
365
|
})
|
|
366
366
|
.cloned())
|
|
367
367
|
}
|
|
@@ -369,10 +369,10 @@ mod tests {
|
|
|
369
369
|
|
|
370
370
|
fn registered_schema_row(schema_key: &str) -> MaterializedLiveStateRow {
|
|
371
371
|
MaterializedLiveStateRow {
|
|
372
|
-
|
|
372
|
+
entity_pk: registered_schema_entity_pk(schema_key),
|
|
373
373
|
file_id: None,
|
|
374
374
|
schema_key: REGISTERED_SCHEMA_KEY.to_string(),
|
|
375
|
-
|
|
375
|
+
branch_id: GLOBAL_BRANCH_ID.to_string(),
|
|
376
376
|
metadata: None,
|
|
377
377
|
deleted: false,
|
|
378
378
|
change_id: Some("change-registered-schema".to_string()),
|
|
@@ -398,8 +398,8 @@ mod tests {
|
|
|
398
398
|
}
|
|
399
399
|
}
|
|
400
400
|
|
|
401
|
-
fn
|
|
402
|
-
crate::
|
|
401
|
+
fn registered_schema_entity_pk(schema_key: &str) -> crate::entity_pk::EntityPk {
|
|
402
|
+
crate::entity_pk::EntityPk::from_primary_key_paths(
|
|
403
403
|
&json!({
|
|
404
404
|
"value": {
|
|
405
405
|
"x-lix-key": schema_key,
|
|
@@ -5,7 +5,7 @@ use serde_json::{Map as JsonMap, Value as JsonValue};
|
|
|
5
5
|
|
|
6
6
|
use crate::common::{format_json_pointer, parse_json_pointer};
|
|
7
7
|
use crate::domain::{Domain, DomainSchemaIdentity};
|
|
8
|
-
use crate::
|
|
8
|
+
use crate::entity_pk::canonical_json_text;
|
|
9
9
|
use crate::functions::FunctionProviderHandle;
|
|
10
10
|
use crate::schema::{compile_lix_schema, validate_schema_amendment, SchemaKey};
|
|
11
11
|
use crate::LixError;
|
|
@@ -48,7 +48,7 @@ impl CatalogSnapshot {
|
|
|
48
48
|
let key = crate::schema::schema_key_from_definition(schema)?;
|
|
49
49
|
let catalog_key = SchemaCatalogKey::from_schema_key(key);
|
|
50
50
|
let identity = DomainSchemaIdentity::new(
|
|
51
|
-
Domain::schema_catalog(crate::
|
|
51
|
+
Domain::schema_catalog(crate::GLOBAL_BRANCH_ID, true),
|
|
52
52
|
catalog_key.schema_key.clone(),
|
|
53
53
|
);
|
|
54
54
|
catalog.remember_schema_identity(identity, catalog_key, schema.clone())?;
|
|
@@ -447,8 +447,8 @@ struct UnboundForeignKeyPlan {
|
|
|
447
447
|
|
|
448
448
|
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)]
|
|
449
449
|
pub(crate) struct StateForeignKeyPlan {
|
|
450
|
-
/// Slot [0] in `x-lix-state-foreign-keys`: local pointer to the target
|
|
451
|
-
pub(crate)
|
|
450
|
+
/// Slot [0] in `x-lix-state-foreign-keys`: local pointer to the target entity_pk.
|
|
451
|
+
pub(crate) entity_pk_property: Vec<String>,
|
|
452
452
|
/// Slot [1] in `x-lix-state-foreign-keys`: local pointer to the target schema_key.
|
|
453
453
|
pub(crate) schema_key_property: Vec<String>,
|
|
454
454
|
/// Slot [2] in `x-lix-state-foreign-keys`: local pointer to the target file_id.
|
|
@@ -458,7 +458,7 @@ pub(crate) struct StateForeignKeyPlan {
|
|
|
458
458
|
impl StateForeignKeyPlan {
|
|
459
459
|
pub(crate) fn local_properties(&self) -> PointerGroup {
|
|
460
460
|
vec![
|
|
461
|
-
self.
|
|
461
|
+
self.entity_pk_property.clone(),
|
|
462
462
|
self.schema_key_property.clone(),
|
|
463
463
|
self.file_id_property.clone(),
|
|
464
464
|
]
|
|
@@ -648,7 +648,7 @@ fn bind_foreign_key_plans(
|
|
|
648
648
|
return Err(LixError::new(
|
|
649
649
|
LixError::CODE_SCHEMA_DEFINITION,
|
|
650
650
|
format!(
|
|
651
|
-
"foreign key on schema '{}' must not reference schemaKey 'lix_state'; use x-lix-state-foreign-keys with pointers ordered as [
|
|
651
|
+
"foreign key on schema '{}' must not reference schemaKey 'lix_state'; use x-lix-state-foreign-keys with pointers ordered as [entity_pk, schema_key, file_id]",
|
|
652
652
|
source_key.schema_key
|
|
653
653
|
),
|
|
654
654
|
));
|
|
@@ -868,12 +868,12 @@ fn state_foreign_key_plans(schema: &JsonValue) -> Result<Vec<StateForeignKeyPlan
|
|
|
868
868
|
return Err(LixError::new(
|
|
869
869
|
LixError::CODE_SCHEMA_DEFINITION,
|
|
870
870
|
format!(
|
|
871
|
-
"x-lix-state-foreign-keys[{index}] must contain exactly three JSON Pointers ordered as [
|
|
871
|
+
"x-lix-state-foreign-keys[{index}] must contain exactly three JSON Pointers ordered as [entity_pk, schema_key, file_id]"
|
|
872
872
|
),
|
|
873
873
|
));
|
|
874
874
|
}
|
|
875
875
|
Ok(StateForeignKeyPlan {
|
|
876
|
-
|
|
876
|
+
entity_pk_property: local_properties[0].clone(),
|
|
877
877
|
schema_key_property: local_properties[1].clone(),
|
|
878
878
|
file_id_property: local_properties[2].clone(),
|
|
879
879
|
})
|