@lix-js/sdk 0.6.0-preview.5 → 0.6.1
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 +76 -4
- package/dist/errors.d.ts +7 -0
- package/dist/errors.js +19 -0
- package/dist/index.d.ts +4 -5
- package/dist/index.js +3 -3
- package/dist/native.d.ts +1 -0
- package/dist/native.js +47 -0
- package/dist/open-lix.d.ts +38 -207
- package/dist/open-lix.js +59 -284
- package/dist/result.d.ts +18 -0
- package/dist/result.js +48 -0
- package/dist/types.d.ts +114 -1
- package/dist/value.d.ts +28 -0
- package/dist/value.js +245 -0
- package/package.json +38 -71
- package/SKILL.md +0 -507
- package/dist/builtin-schemas.d.ts +0 -1
- package/dist/builtin-schemas.js +0 -1
- package/dist/engine-wasm/index.d.ts +0 -87
- package/dist/engine-wasm/index.js +0 -339
- package/dist/engine-wasm/wasm/lix_engine.d.ts +0 -79
- package/dist/engine-wasm/wasm/lix_engine.js +0 -833
- package/dist/engine-wasm/wasm/lix_engine.wasm +0 -0
- package/dist/engine-wasm/wasm/lix_engine.wasm.d.ts +0 -27
- package/dist/generated/builtin-schemas.d.ts +0 -427
- package/dist/generated/builtin-schemas.js +0 -643
- package/dist/sqlite/index.d.ts +0 -12
- package/dist/sqlite/index.js +0 -359
- package/dist-engine-src/README.md +0 -18
- package/dist-engine-src/src/backend/capabilities.rs +0 -67
- package/dist-engine-src/src/backend/conformance/baseline.rs +0 -1127
- package/dist-engine-src/src/backend/conformance/factory.rs +0 -93
- package/dist-engine-src/src/backend/conformance/failure_tests.rs +0 -608
- package/dist-engine-src/src/backend/conformance/fixtures.rs +0 -26
- package/dist-engine-src/src/backend/conformance/mod.rs +0 -75
- package/dist-engine-src/src/backend/conformance/model.rs +0 -28
- package/dist-engine-src/src/backend/conformance/model_based.rs +0 -257
- package/dist-engine-src/src/backend/conformance/persistence.rs +0 -204
- package/dist-engine-src/src/backend/conformance/projection.rs +0 -21
- package/dist-engine-src/src/backend/conformance/pushdown.rs +0 -24
- package/dist-engine-src/src/backend/conformance/runner.rs +0 -90
- package/dist-engine-src/src/backend/conformance/scan.rs +0 -24
- package/dist-engine-src/src/backend/conformance/write.rs +0 -16
- package/dist-engine-src/src/backend/error.rs +0 -94
- package/dist-engine-src/src/backend/in_memory.rs +0 -670
- package/dist-engine-src/src/backend/mod.rs +0 -39
- package/dist-engine-src/src/backend/predicate.rs +0 -80
- package/dist-engine-src/src/backend/traits.rs +0 -260
- package/dist-engine-src/src/backend/types.rs +0 -239
- package/dist-engine-src/src/binary_cas/chunking.rs +0 -31
- package/dist-engine-src/src/binary_cas/codec.rs +0 -346
- package/dist-engine-src/src/binary_cas/context.rs +0 -139
- package/dist-engine-src/src/binary_cas/kv.rs +0 -1038
- package/dist-engine-src/src/binary_cas/mod.rs +0 -11
- package/dist-engine-src/src/binary_cas/types.rs +0 -121
- package/dist-engine-src/src/branch/context.rs +0 -40
- package/dist-engine-src/src/branch/lifecycle.rs +0 -221
- package/dist-engine-src/src/branch/mod.rs +0 -13
- package/dist-engine-src/src/branch/refs.rs +0 -321
- package/dist-engine-src/src/branch/stage_rows.rs +0 -67
- package/dist-engine-src/src/branch/types.rs +0 -21
- package/dist-engine-src/src/catalog/context.rs +0 -412
- package/dist-engine-src/src/catalog/mod.rs +0 -10
- package/dist-engine-src/src/catalog/schema.rs +0 -4
- package/dist-engine-src/src/catalog/snapshot.rs +0 -1114
- package/dist-engine-src/src/cel/context.rs +0 -86
- package/dist-engine-src/src/cel/error.rs +0 -19
- package/dist-engine-src/src/cel/mod.rs +0 -8
- package/dist-engine-src/src/cel/provider.rs +0 -9
- package/dist-engine-src/src/cel/runtime.rs +0 -167
- package/dist-engine-src/src/cel/value.rs +0 -50
- package/dist-engine-src/src/changelog/bench_support.rs +0 -785
- package/dist-engine-src/src/changelog/change.rs +0 -1
- package/dist-engine-src/src/changelog/codec.rs +0 -497
- package/dist-engine-src/src/changelog/commit.rs +0 -1
- package/dist-engine-src/src/changelog/context.rs +0 -1614
- package/dist-engine-src/src/changelog/mod.rs +0 -29
- package/dist-engine-src/src/changelog/store.rs +0 -163
- package/dist-engine-src/src/changelog/test_support.rs +0 -54
- package/dist-engine-src/src/changelog/types.rs +0 -213
- package/dist-engine-src/src/commit_graph/context.rs +0 -944
- package/dist-engine-src/src/commit_graph/mod.rs +0 -9
- package/dist-engine-src/src/commit_graph/types.rs +0 -89
- package/dist-engine-src/src/commit_graph/walker.rs +0 -786
- package/dist-engine-src/src/common/error.rs +0 -347
- package/dist-engine-src/src/common/fingerprint.rs +0 -3
- package/dist-engine-src/src/common/fs_path.rs +0 -1336
- package/dist-engine-src/src/common/identity.rs +0 -145
- package/dist-engine-src/src/common/json_pointer.rs +0 -67
- package/dist-engine-src/src/common/metadata.rs +0 -40
- package/dist-engine-src/src/common/mod.rs +0 -23
- package/dist-engine-src/src/common/types.rs +0 -105
- package/dist-engine-src/src/common/wire.rs +0 -222
- package/dist-engine-src/src/domain.rs +0 -320
- package/dist-engine-src/src/engine.rs +0 -203
- package/dist-engine-src/src/entity_pk.rs +0 -402
- package/dist-engine-src/src/functions/context.rs +0 -296
- package/dist-engine-src/src/functions/deterministic.rs +0 -113
- package/dist-engine-src/src/functions/mod.rs +0 -18
- package/dist-engine-src/src/functions/provider.rs +0 -130
- package/dist-engine-src/src/functions/state.rs +0 -335
- package/dist-engine-src/src/functions/types.rs +0 -37
- package/dist-engine-src/src/init.rs +0 -692
- package/dist-engine-src/src/json_store/compression.rs +0 -77
- package/dist-engine-src/src/json_store/context.rs +0 -172
- package/dist-engine-src/src/json_store/encoded.rs +0 -15
- package/dist-engine-src/src/json_store/mod.rs +0 -38
- package/dist-engine-src/src/json_store/store.rs +0 -494
- package/dist-engine-src/src/json_store/types.rs +0 -212
- package/dist-engine-src/src/lib.rs +0 -92
- package/dist-engine-src/src/live_state/context.rs +0 -1883
- package/dist-engine-src/src/live_state/mod.rs +0 -21
- package/dist-engine-src/src/live_state/overlay.rs +0 -75
- package/dist-engine-src/src/live_state/reader.rs +0 -23
- package/dist-engine-src/src/live_state/types.rs +0 -231
- package/dist-engine-src/src/live_state/visibility.rs +0 -666
- package/dist-engine-src/src/plugin/archive.rs +0 -438
- package/dist-engine-src/src/plugin/component.rs +0 -183
- package/dist-engine-src/src/plugin/install.rs +0 -619
- package/dist-engine-src/src/plugin/manifest.rs +0 -516
- package/dist-engine-src/src/plugin/materializer.rs +0 -202
- package/dist-engine-src/src/plugin/mod.rs +0 -33
- package/dist-engine-src/src/plugin/plugin_manifest.json +0 -119
- package/dist-engine-src/src/plugin/storage.rs +0 -74
- package/dist-engine-src/src/schema/annotations/defaults.rs +0 -275
- package/dist-engine-src/src/schema/annotations/mod.rs +0 -1
- package/dist-engine-src/src/schema/builtin/lix_account.json +0 -21
- package/dist-engine-src/src/schema/builtin/lix_active_account.json +0 -29
- package/dist-engine-src/src/schema/builtin/lix_binary_blob_ref.json +0 -29
- package/dist-engine-src/src/schema/builtin/lix_branch_descriptor.json +0 -34
- package/dist-engine-src/src/schema/builtin/lix_branch_ref.json +0 -48
- package/dist-engine-src/src/schema/builtin/lix_change.json +0 -63
- package/dist-engine-src/src/schema/builtin/lix_change_author.json +0 -45
- package/dist-engine-src/src/schema/builtin/lix_commit.json +0 -24
- package/dist-engine-src/src/schema/builtin/lix_commit_edge.json +0 -53
- package/dist-engine-src/src/schema/builtin/lix_directory_descriptor.json +0 -52
- package/dist-engine-src/src/schema/builtin/lix_file_descriptor.json +0 -52
- package/dist-engine-src/src/schema/builtin/lix_key_value.json +0 -40
- package/dist-engine-src/src/schema/builtin/lix_label.json +0 -29
- package/dist-engine-src/src/schema/builtin/lix_label_assignment.json +0 -74
- package/dist-engine-src/src/schema/builtin/lix_registered_schema.json +0 -25
- package/dist-engine-src/src/schema/builtin/mod.rs +0 -220
- package/dist-engine-src/src/schema/compatibility.rs +0 -787
- package/dist-engine-src/src/schema/definition.json +0 -187
- package/dist-engine-src/src/schema/definition.rs +0 -742
- package/dist-engine-src/src/schema/key.rs +0 -138
- package/dist-engine-src/src/schema/mod.rs +0 -20
- package/dist-engine-src/src/schema/seed.rs +0 -14
- package/dist-engine-src/src/schema/tests.rs +0 -780
- package/dist-engine-src/src/session/context.rs +0 -1059
- package/dist-engine-src/src/session/create_branch.rs +0 -94
- package/dist-engine-src/src/session/execute.rs +0 -681
- package/dist-engine-src/src/session/merge/analysis.rs +0 -108
- package/dist-engine-src/src/session/merge/branch.rs +0 -417
- package/dist-engine-src/src/session/merge/conflicts.rs +0 -63
- package/dist-engine-src/src/session/merge/mod.rs +0 -10
- package/dist-engine-src/src/session/merge/stats.rs +0 -61
- package/dist-engine-src/src/session/mod.rs +0 -30
- package/dist-engine-src/src/session/switch_branch.rs +0 -113
- package/dist-engine-src/src/session/transaction.rs +0 -557
- package/dist-engine-src/src/sql2/bind/classify.rs +0 -102
- package/dist-engine-src/src/sql2/bind/error.rs +0 -5
- package/dist-engine-src/src/sql2/bind/expr.rs +0 -29
- package/dist-engine-src/src/sql2/bind/mod.rs +0 -12
- package/dist-engine-src/src/sql2/bind/public_udf.rs +0 -306
- package/dist-engine-src/src/sql2/bind/read.rs +0 -65
- package/dist-engine-src/src/sql2/bind/statement.rs +0 -2236
- package/dist-engine-src/src/sql2/bind/table.rs +0 -273
- package/dist-engine-src/src/sql2/bind/write.rs +0 -86
- package/dist-engine-src/src/sql2/branch_scope.rs +0 -436
- package/dist-engine-src/src/sql2/catalog/capability.rs +0 -20
- package/dist-engine-src/src/sql2/catalog/entity_surface.rs +0 -296
- package/dist-engine-src/src/sql2/catalog/mod.rs +0 -15
- package/dist-engine-src/src/sql2/catalog/registry.rs +0 -556
- package/dist-engine-src/src/sql2/catalog/schema.rs +0 -88
- package/dist-engine-src/src/sql2/catalog/surface.rs +0 -41
- package/dist-engine-src/src/sql2/change_materialization.rs +0 -122
- package/dist-engine-src/src/sql2/context.rs +0 -317
- package/dist-engine-src/src/sql2/dml.rs +0 -148
- package/dist-engine-src/src/sql2/error.rs +0 -215
- package/dist-engine-src/src/sql2/exec/bound_public_write.rs +0 -1593
- package/dist-engine-src/src/sql2/exec/datafusion.rs +0 -5266
- package/dist-engine-src/src/sql2/exec/fast_write.rs +0 -82
- package/dist-engine-src/src/sql2/exec/mod.rs +0 -24
- package/dist-engine-src/src/sql2/exec/write.rs +0 -661
- package/dist-engine-src/src/sql2/filesystem_planner.rs +0 -1485
- package/dist-engine-src/src/sql2/filesystem_predicates.rs +0 -159
- package/dist-engine-src/src/sql2/filesystem_visibility.rs +0 -383
- package/dist-engine-src/src/sql2/history_projection.rs +0 -56
- package/dist-engine-src/src/sql2/history_route.rs +0 -661
- package/dist-engine-src/src/sql2/mod.rs +0 -52
- package/dist-engine-src/src/sql2/optimize/datafusion.rs +0 -1
- package/dist-engine-src/src/sql2/optimize/mod.rs +0 -2
- package/dist-engine-src/src/sql2/optimize/simple_write.rs +0 -116
- package/dist-engine-src/src/sql2/parse/mod.rs +0 -69
- package/dist-engine-src/src/sql2/parse/normalize.rs +0 -1
- package/dist-engine-src/src/sql2/plan/branch_scope.rs +0 -24
- package/dist-engine-src/src/sql2/plan/mod.rs +0 -5
- package/dist-engine-src/src/sql2/plan/predicate.rs +0 -22
- package/dist-engine-src/src/sql2/plan/write.rs +0 -147
- package/dist-engine-src/src/sql2/predicate_typecheck.rs +0 -504
- package/dist-engine-src/src/sql2/providers/branch.rs +0 -1206
- package/dist-engine-src/src/sql2/providers/change.rs +0 -445
- package/dist-engine-src/src/sql2/providers/directory.rs +0 -2422
- package/dist-engine-src/src/sql2/providers/directory_history.rs +0 -645
- package/dist-engine-src/src/sql2/providers/entity.rs +0 -1484
- package/dist-engine-src/src/sql2/providers/entity_history.rs +0 -452
- package/dist-engine-src/src/sql2/providers/file.rs +0 -3686
- package/dist-engine-src/src/sql2/providers/file_history.rs +0 -924
- package/dist-engine-src/src/sql2/providers/history.rs +0 -426
- package/dist-engine-src/src/sql2/providers/lix_state.rs +0 -2542
- package/dist-engine-src/src/sql2/providers/mod.rs +0 -508
- package/dist-engine-src/src/sql2/read_only.rs +0 -63
- package/dist-engine-src/src/sql2/record_batch.rs +0 -17
- package/dist-engine-src/src/sql2/result_metadata.rs +0 -29
- package/dist-engine-src/src/sql2/runtime.rs +0 -60
- package/dist-engine-src/src/sql2/session.rs +0 -83
- package/dist-engine-src/src/sql2/storage/constraints.rs +0 -1
- package/dist-engine-src/src/sql2/storage/mod.rs +0 -1
- package/dist-engine-src/src/sql2/test_support/differential.rs +0 -712
- package/dist-engine-src/src/sql2/test_support/generators.rs +0 -354
- package/dist-engine-src/src/sql2/test_support/mod.rs +0 -2
- package/dist-engine-src/src/sql2/udfs/common.rs +0 -295
- package/dist-engine-src/src/sql2/udfs/lix_active_branch_commit_id.rs +0 -53
- package/dist-engine-src/src/sql2/udfs/lix_empty_blob.rs +0 -47
- package/dist-engine-src/src/sql2/udfs/lix_json.rs +0 -100
- package/dist-engine-src/src/sql2/udfs/lix_json_get.rs +0 -99
- package/dist-engine-src/src/sql2/udfs/lix_json_get_text.rs +0 -99
- package/dist-engine-src/src/sql2/udfs/lix_text_decode.rs +0 -82
- package/dist-engine-src/src/sql2/udfs/lix_text_encode.rs +0 -85
- package/dist-engine-src/src/sql2/udfs/lix_timestamp.rs +0 -76
- package/dist-engine-src/src/sql2/udfs/lix_uuid_v7.rs +0 -76
- package/dist-engine-src/src/sql2/udfs/mod.rs +0 -86
- package/dist-engine-src/src/sql2/write_normalization.rs +0 -368
- package/dist-engine-src/src/storage/conformance.rs +0 -399
- package/dist-engine-src/src/storage/context.rs +0 -620
- package/dist-engine-src/src/storage/mod.rs +0 -52
- package/dist-engine-src/src/storage/point.rs +0 -440
- package/dist-engine-src/src/storage/read_scope.rs +0 -67
- package/dist-engine-src/src/storage/reader.rs +0 -867
- package/dist-engine-src/src/storage/scan.rs +0 -784
- package/dist-engine-src/src/storage/spaces.rs +0 -236
- package/dist-engine-src/src/storage/stats.rs +0 -80
- package/dist-engine-src/src/storage/write_set.rs +0 -962
- package/dist-engine-src/src/storage_bench.rs +0 -171
- package/dist-engine-src/src/test_support.rs +0 -450
- package/dist-engine-src/src/tracked_state/bench_support.rs +0 -394
- package/dist-engine-src/src/tracked_state/codec.rs +0 -1183
- package/dist-engine-src/src/tracked_state/commit_root_rebuild.rs +0 -358
- package/dist-engine-src/src/tracked_state/context.rs +0 -2801
- package/dist-engine-src/src/tracked_state/diff.rs +0 -2140
- package/dist-engine-src/src/tracked_state/merge.rs +0 -478
- package/dist-engine-src/src/tracked_state/mod.rs +0 -35
- package/dist-engine-src/src/tracked_state/row_materialization.rs +0 -275
- package/dist-engine-src/src/tracked_state/storage.rs +0 -427
- package/dist-engine-src/src/tracked_state/tree.rs +0 -3063
- package/dist-engine-src/src/tracked_state/types.rs +0 -238
- package/dist-engine-src/src/transaction/bench_support.rs +0 -407
- package/dist-engine-src/src/transaction/commit.rs +0 -1592
- package/dist-engine-src/src/transaction/context.rs +0 -1653
- package/dist-engine-src/src/transaction/mod.rs +0 -24
- package/dist-engine-src/src/transaction/normalization.rs +0 -877
- package/dist-engine-src/src/transaction/prep.rs +0 -37
- package/dist-engine-src/src/transaction/schema_resolver.rs +0 -163
- package/dist-engine-src/src/transaction/staging.rs +0 -1525
- package/dist-engine-src/src/transaction/types.rs +0 -403
- package/dist-engine-src/src/transaction/validation.rs +0 -5766
- package/dist-engine-src/src/untracked_state/codec.rs +0 -615
- package/dist-engine-src/src/untracked_state/context.rs +0 -98
- package/dist-engine-src/src/untracked_state/materialization.rs +0 -63
- package/dist-engine-src/src/untracked_state/mod.rs +0 -15
- package/dist-engine-src/src/untracked_state/storage.rs +0 -898
- package/dist-engine-src/src/untracked_state/types.rs +0 -146
- package/dist-engine-src/src/wasm/mod.rs +0 -60
|
@@ -1,403 +0,0 @@
|
|
|
1
|
-
use std::{collections::BTreeSet, fmt, ops::Deref, sync::Arc};
|
|
2
|
-
|
|
3
|
-
use crate::catalog::SchemaPlanId;
|
|
4
|
-
use crate::entity_pk::EntityPk;
|
|
5
|
-
use crate::json_store::JsonRef;
|
|
6
|
-
use crate::live_state::MaterializedLiveStateRow;
|
|
7
|
-
use crate::untracked_state::MaterializedUntrackedStateRow;
|
|
8
|
-
use crate::LixError;
|
|
9
|
-
use serde::{Deserialize, Deserializer, Serialize, Serializer};
|
|
10
|
-
use serde_json::Value as JsonValue;
|
|
11
|
-
|
|
12
|
-
#[derive(Debug, Clone, PartialEq, Eq)]
|
|
13
|
-
pub(crate) struct TransactionJson {
|
|
14
|
-
value: Arc<JsonValue>,
|
|
15
|
-
normalized: Arc<str>,
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
impl TransactionJson {
|
|
19
|
-
pub(crate) fn from_value(value: JsonValue, context: &str) -> Result<Self, LixError> {
|
|
20
|
-
let normalized: Arc<str> = serde_json::to_string(&value)
|
|
21
|
-
.map_err(|error| {
|
|
22
|
-
LixError::new(
|
|
23
|
-
LixError::CODE_UNKNOWN,
|
|
24
|
-
format!("{context} failed to serialize as normalized JSON: {error}"),
|
|
25
|
-
)
|
|
26
|
-
})?
|
|
27
|
-
.into();
|
|
28
|
-
Ok(Self {
|
|
29
|
-
value: Arc::new(value),
|
|
30
|
-
normalized,
|
|
31
|
-
})
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
pub(crate) fn from_value_unchecked(value: JsonValue) -> Self {
|
|
35
|
-
Self::from_value(value, "transaction JSON")
|
|
36
|
-
.expect("serializing serde_json::Value should not fail")
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
#[cfg(test)]
|
|
40
|
-
pub(crate) fn from_value_for_test(value: JsonValue) -> Self {
|
|
41
|
-
Self::from_value(value, "test transaction JSON").expect("test JSON should normalize")
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
pub(crate) fn from_parts(value: Arc<JsonValue>, normalized: Arc<str>) -> Self {
|
|
45
|
-
Self { value, normalized }
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
pub(crate) fn value(&self) -> &JsonValue {
|
|
49
|
-
self.value.as_ref()
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
pub(crate) fn normalized(&self) -> &str {
|
|
53
|
-
self.normalized.as_ref()
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
pub(crate) fn into_parts(self) -> (Arc<JsonValue>, Arc<str>) {
|
|
57
|
-
(self.value, self.normalized)
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
impl Deref for TransactionJson {
|
|
62
|
-
type Target = JsonValue;
|
|
63
|
-
|
|
64
|
-
fn deref(&self) -> &Self::Target {
|
|
65
|
-
self.value()
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
impl PartialEq<JsonValue> for TransactionJson {
|
|
70
|
-
fn eq(&self, other: &JsonValue) -> bool {
|
|
71
|
-
self.value() == other
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
impl PartialEq<TransactionJson> for JsonValue {
|
|
76
|
-
fn eq(&self, other: &TransactionJson) -> bool {
|
|
77
|
-
self == other.value()
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
impl fmt::Display for TransactionJson {
|
|
82
|
-
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
|
83
|
-
f.write_str(self.normalized())
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
impl Serialize for TransactionJson {
|
|
88
|
-
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
|
|
89
|
-
where
|
|
90
|
-
S: Serializer,
|
|
91
|
-
{
|
|
92
|
-
self.value.serialize(serializer)
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
impl<'de> Deserialize<'de> for TransactionJson {
|
|
97
|
-
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
|
|
98
|
-
where
|
|
99
|
-
D: Deserializer<'de>,
|
|
100
|
-
{
|
|
101
|
-
let value = JsonValue::deserialize(deserializer)?;
|
|
102
|
-
Self::from_value(value, "transaction JSON").map_err(serde::de::Error::custom)
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
/// State row accepted at the transaction write boundary.
|
|
107
|
-
///
|
|
108
|
-
/// External SQL/provider code must parse any textual JSON before constructing
|
|
109
|
-
/// this type. The transaction receives `TransactionJson`, applies schema
|
|
110
|
-
/// defaults and identity derivation, then prepares JSON refs in
|
|
111
|
-
/// `PreparedStateRow` without serializing already-normalized JSON again.
|
|
112
|
-
///
|
|
113
|
-
/// SQL providers stage semantic rows, not final storage rows. INSERT providers
|
|
114
|
-
/// may omit defaulted snapshot fields and leave `entity_pk` unset when the
|
|
115
|
-
/// target schema has an `x-lix-primary-key`; transaction normalization applies
|
|
116
|
-
/// schema defaults and derives the final identity. Typed UPDATE providers must
|
|
117
|
-
/// stage full rewritten snapshots after applying column assignments to the
|
|
118
|
-
/// existing row. Raw `lix_state` snapshot updates are replacement writes, not
|
|
119
|
-
/// implicit patches.
|
|
120
|
-
#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
|
|
121
|
-
pub(crate) struct TransactionWriteRow {
|
|
122
|
-
pub(crate) entity_pk: Option<EntityPk>,
|
|
123
|
-
pub(crate) schema_key: String,
|
|
124
|
-
pub(crate) file_id: Option<String>,
|
|
125
|
-
pub(crate) snapshot: Option<TransactionJson>,
|
|
126
|
-
pub(crate) metadata: Option<TransactionJson>,
|
|
127
|
-
pub(crate) origin: Option<TransactionWriteOrigin>,
|
|
128
|
-
pub(crate) created_at: Option<String>,
|
|
129
|
-
pub(crate) updated_at: Option<String>,
|
|
130
|
-
pub(crate) global: bool,
|
|
131
|
-
pub(crate) change_id: Option<String>,
|
|
132
|
-
pub(crate) commit_id: Option<String>,
|
|
133
|
-
pub(crate) untracked: bool,
|
|
134
|
-
pub(crate) branch_id: String,
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
impl TransactionWriteRow {
|
|
138
|
-
pub(crate) fn schema_scope_branch_id(&self) -> &str {
|
|
139
|
-
if self.global {
|
|
140
|
-
crate::GLOBAL_BRANCH_ID
|
|
141
|
-
} else {
|
|
142
|
-
self.branch_id.as_str()
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
/// User-facing write operation that produced one physical staged row.
|
|
148
|
-
///
|
|
149
|
-
/// Composite SQL surfaces such as `lix_file` lower one logical row into
|
|
150
|
-
/// multiple state rows. The transaction layer owns final constraint validation,
|
|
151
|
-
/// but error messages should stay in the vocabulary of the logical operation
|
|
152
|
-
/// when the caller did not write the physical state schema directly.
|
|
153
|
-
#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
|
|
154
|
-
pub(crate) struct TransactionWriteOrigin {
|
|
155
|
-
pub(crate) surface: String,
|
|
156
|
-
pub(crate) operation: TransactionWriteOperation,
|
|
157
|
-
pub(crate) primary_key: Option<LogicalPrimaryKey>,
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
#[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
|
|
161
|
-
pub(crate) enum TransactionWriteOperation {
|
|
162
|
-
Insert,
|
|
163
|
-
Update,
|
|
164
|
-
Delete,
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
|
|
168
|
-
pub(crate) struct LogicalPrimaryKey {
|
|
169
|
-
pub(crate) columns: Vec<String>,
|
|
170
|
-
pub(crate) values: Vec<String>,
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
/// Incoming file payload paired with transaction write rows.
|
|
174
|
-
#[derive(Debug, Clone, PartialEq, Eq)]
|
|
175
|
-
pub(crate) struct TransactionFileData {
|
|
176
|
-
pub(crate) file_id: String,
|
|
177
|
-
pub(crate) branch_id: String,
|
|
178
|
-
pub(crate) untracked: bool,
|
|
179
|
-
pub(crate) data: Vec<u8>,
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
/// One decoded write batch accepted by the transaction boundary.
|
|
183
|
-
#[derive(Debug, Clone, PartialEq, Eq)]
|
|
184
|
-
pub(crate) enum TransactionWrite {
|
|
185
|
-
Rows {
|
|
186
|
-
mode: TransactionWriteMode,
|
|
187
|
-
rows: Vec<TransactionWriteRow>,
|
|
188
|
-
},
|
|
189
|
-
RowsWithFileData {
|
|
190
|
-
mode: TransactionWriteMode,
|
|
191
|
-
rows: Vec<TransactionWriteRow>,
|
|
192
|
-
file_data: Vec<TransactionFileData>,
|
|
193
|
-
count: u64,
|
|
194
|
-
},
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
/// One decoded write batch after semantic normalization and JSON preparation.
|
|
198
|
-
#[derive(Debug, Clone, PartialEq, Eq)]
|
|
199
|
-
pub(crate) enum PreparedTransactionWrite {
|
|
200
|
-
Rows {
|
|
201
|
-
mode: TransactionWriteMode,
|
|
202
|
-
rows: Vec<PreparedStateRow>,
|
|
203
|
-
},
|
|
204
|
-
RowsWithFileData {
|
|
205
|
-
mode: TransactionWriteMode,
|
|
206
|
-
rows: Vec<PreparedStateRow>,
|
|
207
|
-
file_data: Vec<TransactionFileData>,
|
|
208
|
-
count: u64,
|
|
209
|
-
},
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
|
213
|
-
pub(crate) enum TransactionWriteMode {
|
|
214
|
-
Insert,
|
|
215
|
-
Replace,
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
/// Result returned after the transaction accepts a write batch.
|
|
219
|
-
#[derive(Debug, Clone, PartialEq, Eq)]
|
|
220
|
-
pub(crate) struct TransactionWriteOutcome {
|
|
221
|
-
pub(crate) count: u64,
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
#[derive(Debug, Clone, PartialEq, Eq)]
|
|
225
|
-
pub(crate) struct StageJson {
|
|
226
|
-
pub(crate) value: Arc<serde_json::Value>,
|
|
227
|
-
pub(crate) normalized: Arc<str>,
|
|
228
|
-
pub(crate) json_ref: JsonRef,
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
impl StageJson {
|
|
232
|
-
pub(crate) fn materialize(&self) -> String {
|
|
233
|
-
self.normalized.as_ref().to_string()
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
pub(crate) fn stage_json_from_value(
|
|
238
|
-
value: TransactionJson,
|
|
239
|
-
_context: &str,
|
|
240
|
-
) -> Result<StageJson, LixError> {
|
|
241
|
-
let (value, normalized) = value.into_parts();
|
|
242
|
-
let json_ref = JsonRef::for_content(normalized.as_bytes());
|
|
243
|
-
Ok(StageJson {
|
|
244
|
-
value,
|
|
245
|
-
normalized,
|
|
246
|
-
json_ref,
|
|
247
|
-
})
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
#[derive(Debug, Clone, Default, PartialEq, Eq)]
|
|
251
|
-
pub(crate) struct PreparedRowFacts {
|
|
252
|
-
/// Placeholder for the next cut: row-derived constraint facts will be
|
|
253
|
-
/// computed once during normalization and consumed by validation.
|
|
254
|
-
pub(crate) _sealed: (),
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
/// Prepared state row owned by the transaction write buffer.
|
|
258
|
-
///
|
|
259
|
-
/// This is the first boundary that owns `StageJson`: JSON has been normalized
|
|
260
|
-
/// and assigned a content-addressed `JsonRef`. Durable placement belongs to the
|
|
261
|
-
/// JSON store at batch staging time, not row preparation time.
|
|
262
|
-
/// Storage owners must receive only the ref-backed row forms derived from this
|
|
263
|
-
/// type.
|
|
264
|
-
#[derive(Debug, Clone, PartialEq, Eq)]
|
|
265
|
-
pub(crate) struct PreparedStateRow {
|
|
266
|
-
pub(crate) schema_plan_id: SchemaPlanId,
|
|
267
|
-
pub(crate) facts: PreparedRowFacts,
|
|
268
|
-
pub(crate) entity_pk: EntityPk,
|
|
269
|
-
pub(crate) schema_key: String,
|
|
270
|
-
pub(crate) file_id: Option<String>,
|
|
271
|
-
pub(crate) snapshot: Option<StageJson>,
|
|
272
|
-
pub(crate) metadata: Option<StageJson>,
|
|
273
|
-
pub(crate) origin: Option<TransactionWriteOrigin>,
|
|
274
|
-
pub(crate) created_at: String,
|
|
275
|
-
pub(crate) updated_at: String,
|
|
276
|
-
pub(crate) global: bool,
|
|
277
|
-
pub(crate) change_id: Option<String>,
|
|
278
|
-
pub(crate) commit_id: Option<String>,
|
|
279
|
-
pub(crate) untracked: bool,
|
|
280
|
-
pub(crate) branch_id: String,
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
impl From<PreparedStateRow> for MaterializedLiveStateRow {
|
|
284
|
-
fn from(row: PreparedStateRow) -> Self {
|
|
285
|
-
let deleted = row.snapshot.is_none();
|
|
286
|
-
MaterializedLiveStateRow {
|
|
287
|
-
entity_pk: row.entity_pk,
|
|
288
|
-
schema_key: row.schema_key,
|
|
289
|
-
file_id: row.file_id,
|
|
290
|
-
snapshot_content: row.snapshot.map(|snapshot| snapshot.materialize()),
|
|
291
|
-
metadata: row.metadata.map(|metadata| metadata.materialize()),
|
|
292
|
-
deleted,
|
|
293
|
-
created_at: row.created_at,
|
|
294
|
-
updated_at: row.updated_at,
|
|
295
|
-
global: row.global,
|
|
296
|
-
change_id: row.change_id,
|
|
297
|
-
commit_id: row.commit_id,
|
|
298
|
-
untracked: row.untracked,
|
|
299
|
-
branch_id: row.branch_id,
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
|
|
304
|
-
impl From<&PreparedStateRow> for MaterializedLiveStateRow {
|
|
305
|
-
fn from(row: &PreparedStateRow) -> Self {
|
|
306
|
-
MaterializedLiveStateRow {
|
|
307
|
-
entity_pk: row.entity_pk.clone(),
|
|
308
|
-
schema_key: row.schema_key.clone(),
|
|
309
|
-
file_id: row.file_id.clone(),
|
|
310
|
-
snapshot_content: row.snapshot.as_ref().map(StageJson::materialize),
|
|
311
|
-
metadata: row.metadata.as_ref().map(StageJson::materialize),
|
|
312
|
-
deleted: row.snapshot.is_none(),
|
|
313
|
-
created_at: row.created_at.clone(),
|
|
314
|
-
updated_at: row.updated_at.clone(),
|
|
315
|
-
global: row.global,
|
|
316
|
-
change_id: row.change_id.clone(),
|
|
317
|
-
commit_id: row.commit_id.clone(),
|
|
318
|
-
untracked: row.untracked,
|
|
319
|
-
branch_id: row.branch_id.clone(),
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
impl From<PreparedStateRow> for MaterializedUntrackedStateRow {
|
|
325
|
-
fn from(row: PreparedStateRow) -> Self {
|
|
326
|
-
let deleted = row.snapshot.is_none();
|
|
327
|
-
MaterializedUntrackedStateRow {
|
|
328
|
-
entity_pk: row.entity_pk,
|
|
329
|
-
schema_key: row.schema_key,
|
|
330
|
-
file_id: row.file_id,
|
|
331
|
-
snapshot_content: row.snapshot.map(|snapshot| snapshot.materialize()),
|
|
332
|
-
metadata: row.metadata.map(|metadata| metadata.materialize()),
|
|
333
|
-
deleted,
|
|
334
|
-
created_at: row.created_at,
|
|
335
|
-
updated_at: row.updated_at,
|
|
336
|
-
global: row.global,
|
|
337
|
-
branch_id: row.branch_id,
|
|
338
|
-
}
|
|
339
|
-
}
|
|
340
|
-
}
|
|
341
|
-
|
|
342
|
-
/// Transaction-local commit change refs accumulated while rows are staged.
|
|
343
|
-
///
|
|
344
|
-
/// Final commit row materialization owns commit ids, parent heads, and commit
|
|
345
|
-
/// row timestamps. Staging only tracks which hydrated tracked changes the
|
|
346
|
-
/// future commit introduces for a branch.
|
|
347
|
-
#[derive(Debug, Clone, Default, PartialEq, Eq)]
|
|
348
|
-
pub(crate) struct StagedCommitChangeRefs {
|
|
349
|
-
pub(crate) commit_id: String,
|
|
350
|
-
pub(crate) commit_change_id: String,
|
|
351
|
-
pub(crate) created_at: String,
|
|
352
|
-
pub(crate) change_ids: BTreeSet<String>,
|
|
353
|
-
pub(crate) selected_change_refs: Vec<StagedCommitChangeRef>,
|
|
354
|
-
pub(crate) allow_empty: bool,
|
|
355
|
-
}
|
|
356
|
-
|
|
357
|
-
#[derive(Debug, Clone, PartialEq, Eq)]
|
|
358
|
-
pub(crate) struct StagedCommitChangeRef {
|
|
359
|
-
pub(crate) schema_key: String,
|
|
360
|
-
pub(crate) file_id: Option<String>,
|
|
361
|
-
pub(crate) entity_pk: EntityPk,
|
|
362
|
-
pub(crate) change_id: String,
|
|
363
|
-
pub(crate) snapshot_ref: Option<JsonRef>,
|
|
364
|
-
pub(crate) metadata_ref: Option<JsonRef>,
|
|
365
|
-
pub(crate) deleted: bool,
|
|
366
|
-
pub(crate) created_at: String,
|
|
367
|
-
pub(crate) updated_at: String,
|
|
368
|
-
}
|
|
369
|
-
|
|
370
|
-
impl StagedCommitChangeRefs {
|
|
371
|
-
pub(crate) fn new(commit_id: String, commit_change_id: String, created_at: String) -> Self {
|
|
372
|
-
Self {
|
|
373
|
-
commit_id,
|
|
374
|
-
commit_change_id,
|
|
375
|
-
created_at,
|
|
376
|
-
change_ids: BTreeSet::new(),
|
|
377
|
-
selected_change_refs: Vec::new(),
|
|
378
|
-
allow_empty: false,
|
|
379
|
-
}
|
|
380
|
-
}
|
|
381
|
-
|
|
382
|
-
pub(crate) fn add_change_id(&mut self, change_id: String) {
|
|
383
|
-
self.change_ids.insert(change_id);
|
|
384
|
-
}
|
|
385
|
-
|
|
386
|
-
pub(crate) fn add_selected_change_ref(&mut self, change_ref: StagedCommitChangeRef) {
|
|
387
|
-
if self.change_ids.insert(change_ref.change_id.clone()) {
|
|
388
|
-
self.selected_change_refs.push(change_ref);
|
|
389
|
-
}
|
|
390
|
-
}
|
|
391
|
-
|
|
392
|
-
pub(crate) fn remove_change_id(&mut self, change_id: &str) {
|
|
393
|
-
self.change_ids.remove(change_id);
|
|
394
|
-
}
|
|
395
|
-
|
|
396
|
-
pub(crate) fn is_empty(&self) -> bool {
|
|
397
|
-
self.change_ids.is_empty()
|
|
398
|
-
}
|
|
399
|
-
|
|
400
|
-
pub(crate) fn allow_empty(&mut self) {
|
|
401
|
-
self.allow_empty = true;
|
|
402
|
-
}
|
|
403
|
-
}
|