@lix-js/sdk 0.6.0-preview.3 → 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 +105 -65
- package/dist/engine-wasm/index.js +4 -4
- package/dist/engine-wasm/wasm/lix_engine.d.ts +30 -6
- package/dist/engine-wasm/wasm/lix_engine.js +187 -117
- package/dist/engine-wasm/wasm/lix_engine.wasm +0 -0
- package/dist/engine-wasm/wasm/lix_engine.wasm.d.ts +14 -8
- package/dist/generated/builtin-schemas.d.ts +69 -69
- package/dist/generated/builtin-schemas.js +94 -94
- package/dist/open-lix.d.ts +42 -28
- package/dist/open-lix.js +49 -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 +819 -124
- package/dist-engine-src/src/session/create_branch.rs +94 -0
- package/dist-engine-src/src/session/execute.rs +260 -57
- 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 +19 -16
- package/dist-engine-src/src/session/switch_branch.rs +113 -0
- package/dist-engine-src/src/session/transaction.rs +557 -0
- package/dist-engine-src/src/sql2/bind/classify.rs +102 -0
- 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} +98 -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 +4 -5
- 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 +30 -24
- 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 -109
- package/dist-engine-src/src/sql2/classify.rs +0 -182
- package/dist-engine-src/src/sql2/entity_provider.rs +0 -3211
- package/dist-engine-src/src/sql2/execute.rs +0 -3440
- 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 -166
- package/dist-engine-src/src/sql2/public_bind/mod.rs +0 -25
- 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
package/dist-engine-src/src/sql2/{directory_history_provider.rs → providers/directory_history.rs}
RENAMED
|
@@ -25,28 +25,33 @@ use crate::commit_graph::CommitGraphReader;
|
|
|
25
25
|
use crate::serialize_row_metadata;
|
|
26
26
|
use crate::LixError;
|
|
27
27
|
|
|
28
|
-
use
|
|
29
|
-
use
|
|
28
|
+
use crate::sql2::change_materialization::MaterializedChange;
|
|
29
|
+
use crate::sql2::history_projection::{tombstone_identity_column_value, HistoryIdentityProjection};
|
|
30
|
+
use crate::sql2::history_route::{
|
|
30
31
|
history_descriptor_event_matches, load_history_entries, parse_history_filter,
|
|
31
32
|
HistoryColumnStyle, HistoryEntry, HistoryRoute, HistoryViewDescriptor, HISTORY_COL_CHANGE_ID,
|
|
32
|
-
HISTORY_COL_COMMIT_CREATED_AT, HISTORY_COL_DEPTH,
|
|
33
|
+
HISTORY_COL_COMMIT_CREATED_AT, HISTORY_COL_DEPTH, HISTORY_COL_ENTITY_PK, HISTORY_COL_FILE_ID,
|
|
33
34
|
HISTORY_COL_METADATA, HISTORY_COL_OBSERVED_COMMIT_ID, HISTORY_COL_SCHEMA_KEY,
|
|
34
35
|
HISTORY_COL_SNAPSHOT_CONTENT, HISTORY_COL_START_COMMIT_ID,
|
|
35
36
|
};
|
|
36
|
-
use
|
|
37
|
-
use
|
|
38
|
-
use crate::
|
|
37
|
+
use crate::sql2::result_metadata::json_field;
|
|
38
|
+
use crate::sql2::SqlHistoryQuerySource;
|
|
39
|
+
use crate::storage::StorageRead;
|
|
39
40
|
|
|
40
41
|
const DIRECTORY_DESCRIPTOR_SCHEMA_KEY: &str = "lix_directory_descriptor";
|
|
41
42
|
|
|
42
|
-
pub(
|
|
43
|
+
pub(super) async fn register_lix_directory_history_surface<S>(
|
|
43
44
|
session: &datafusion::prelude::SessionContext,
|
|
45
|
+
surface_name: &str,
|
|
44
46
|
commit_graph: Box<dyn CommitGraphReader>,
|
|
45
|
-
query_source:
|
|
46
|
-
) -> Result<(), LixError>
|
|
47
|
+
query_source: SqlHistoryQuerySource<S>,
|
|
48
|
+
) -> Result<(), LixError>
|
|
49
|
+
where
|
|
50
|
+
S: StorageRead + Clone + Send + Sync + 'static,
|
|
51
|
+
{
|
|
47
52
|
session
|
|
48
53
|
.register_table(
|
|
49
|
-
|
|
54
|
+
surface_name,
|
|
50
55
|
Arc::new(LixDirectoryHistoryProvider::new(
|
|
51
56
|
Arc::new(Mutex::new(commit_graph)),
|
|
52
57
|
query_source,
|
|
@@ -56,22 +61,22 @@ pub(crate) async fn register_lix_directory_history_provider(
|
|
|
56
61
|
Ok(())
|
|
57
62
|
}
|
|
58
63
|
|
|
59
|
-
struct LixDirectoryHistoryProvider {
|
|
64
|
+
struct LixDirectoryHistoryProvider<S> {
|
|
60
65
|
schema: SchemaRef,
|
|
61
66
|
commit_graph: Arc<Mutex<Box<dyn CommitGraphReader>>>,
|
|
62
|
-
query_source:
|
|
67
|
+
query_source: SqlHistoryQuerySource<S>,
|
|
63
68
|
}
|
|
64
69
|
|
|
65
|
-
impl std::fmt::Debug for LixDirectoryHistoryProvider {
|
|
70
|
+
impl<S> std::fmt::Debug for LixDirectoryHistoryProvider<S> {
|
|
66
71
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
|
67
72
|
f.debug_struct("LixDirectoryHistoryProvider").finish()
|
|
68
73
|
}
|
|
69
74
|
}
|
|
70
75
|
|
|
71
|
-
impl LixDirectoryHistoryProvider {
|
|
76
|
+
impl<S> LixDirectoryHistoryProvider<S> {
|
|
72
77
|
fn new(
|
|
73
78
|
commit_graph: Arc<Mutex<Box<dyn CommitGraphReader>>>,
|
|
74
|
-
query_source:
|
|
79
|
+
query_source: SqlHistoryQuerySource<S>,
|
|
75
80
|
) -> Self {
|
|
76
81
|
Self {
|
|
77
82
|
schema: lix_directory_history_schema(),
|
|
@@ -82,7 +87,10 @@ impl LixDirectoryHistoryProvider {
|
|
|
82
87
|
}
|
|
83
88
|
|
|
84
89
|
#[async_trait]
|
|
85
|
-
impl TableProvider for LixDirectoryHistoryProvider
|
|
90
|
+
impl<S> TableProvider for LixDirectoryHistoryProvider<S>
|
|
91
|
+
where
|
|
92
|
+
S: StorageRead + Clone + Send + Sync + 'static,
|
|
93
|
+
{
|
|
86
94
|
fn as_any(&self) -> &dyn Any {
|
|
87
95
|
self
|
|
88
96
|
}
|
|
@@ -128,16 +136,16 @@ impl TableProvider for LixDirectoryHistoryProvider {
|
|
|
128
136
|
}
|
|
129
137
|
}
|
|
130
138
|
|
|
131
|
-
struct LixDirectoryHistoryScanExec {
|
|
139
|
+
struct LixDirectoryHistoryScanExec<S> {
|
|
132
140
|
commit_graph: Arc<Mutex<Box<dyn CommitGraphReader>>>,
|
|
133
|
-
query_source:
|
|
141
|
+
query_source: SqlHistoryQuerySource<S>,
|
|
134
142
|
schema: SchemaRef,
|
|
135
143
|
route: HistoryRoute,
|
|
136
144
|
limit: Option<usize>,
|
|
137
145
|
properties: Arc<PlanProperties>,
|
|
138
146
|
}
|
|
139
147
|
|
|
140
|
-
impl std::fmt::Debug for LixDirectoryHistoryScanExec {
|
|
148
|
+
impl<S> std::fmt::Debug for LixDirectoryHistoryScanExec<S> {
|
|
141
149
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
|
142
150
|
f.debug_struct("LixDirectoryHistoryScanExec")
|
|
143
151
|
.field("route", &self.route)
|
|
@@ -146,10 +154,10 @@ impl std::fmt::Debug for LixDirectoryHistoryScanExec {
|
|
|
146
154
|
}
|
|
147
155
|
}
|
|
148
156
|
|
|
149
|
-
impl LixDirectoryHistoryScanExec {
|
|
157
|
+
impl<S> LixDirectoryHistoryScanExec<S> {
|
|
150
158
|
fn new(
|
|
151
159
|
commit_graph: Arc<Mutex<Box<dyn CommitGraphReader>>>,
|
|
152
|
-
query_source:
|
|
160
|
+
query_source: SqlHistoryQuerySource<S>,
|
|
153
161
|
schema: SchemaRef,
|
|
154
162
|
route: HistoryRoute,
|
|
155
163
|
limit: Option<usize>,
|
|
@@ -171,7 +179,7 @@ impl LixDirectoryHistoryScanExec {
|
|
|
171
179
|
}
|
|
172
180
|
}
|
|
173
181
|
|
|
174
|
-
impl DisplayAs for LixDirectoryHistoryScanExec {
|
|
182
|
+
impl<S> DisplayAs for LixDirectoryHistoryScanExec<S> {
|
|
175
183
|
fn fmt_as(&self, t: DisplayFormatType, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
|
176
184
|
match t {
|
|
177
185
|
DisplayFormatType::Default | DisplayFormatType::Verbose => write!(
|
|
@@ -184,7 +192,10 @@ impl DisplayAs for LixDirectoryHistoryScanExec {
|
|
|
184
192
|
}
|
|
185
193
|
}
|
|
186
194
|
|
|
187
|
-
impl ExecutionPlan for LixDirectoryHistoryScanExec
|
|
195
|
+
impl<S> ExecutionPlan for LixDirectoryHistoryScanExec<S>
|
|
196
|
+
where
|
|
197
|
+
S: StorageRead + Clone + Send + Sync + 'static,
|
|
198
|
+
{
|
|
188
199
|
fn name(&self) -> &str {
|
|
189
200
|
"LixDirectoryHistoryScanExec"
|
|
190
201
|
}
|
|
@@ -259,7 +270,7 @@ struct DirectoryHistoryRecord {
|
|
|
259
270
|
|
|
260
271
|
#[derive(Debug, Clone)]
|
|
261
272
|
struct DirectoryHistoryOutputRow {
|
|
262
|
-
|
|
273
|
+
entity_pk: String,
|
|
263
274
|
id: String,
|
|
264
275
|
path: Option<String>,
|
|
265
276
|
parent_id: Option<String>,
|
|
@@ -287,11 +298,14 @@ struct DirectoryDescriptorSnapshot {
|
|
|
287
298
|
hidden: Option<bool>,
|
|
288
299
|
}
|
|
289
300
|
|
|
290
|
-
async fn load_directory_history_rows(
|
|
301
|
+
async fn load_directory_history_rows<S>(
|
|
291
302
|
commit_graph: Arc<Mutex<Box<dyn CommitGraphReader>>>,
|
|
292
|
-
query_source:
|
|
303
|
+
query_source: SqlHistoryQuerySource<S>,
|
|
293
304
|
route: &HistoryRoute,
|
|
294
|
-
) -> Result<Vec<DirectoryHistoryOutputRow>, LixError>
|
|
305
|
+
) -> Result<Vec<DirectoryHistoryOutputRow>, LixError>
|
|
306
|
+
where
|
|
307
|
+
S: StorageRead + Clone + Send + Sync + 'static,
|
|
308
|
+
{
|
|
295
309
|
let event_route = route.traversal_only();
|
|
296
310
|
let event_entries = load_history_entries(
|
|
297
311
|
HistoryViewDescriptor {
|
|
@@ -345,7 +359,7 @@ async fn load_directory_history_rows(
|
|
|
345
359
|
.and_then(|value| value.as_str().map(ToOwned::to_owned))
|
|
346
360
|
.unwrap_or_else(|| visible_descriptor.id.clone());
|
|
347
361
|
output.push(DirectoryHistoryOutputRow {
|
|
348
|
-
|
|
362
|
+
entity_pk: visible_descriptor.id.clone(),
|
|
349
363
|
id,
|
|
350
364
|
path,
|
|
351
365
|
parent_id: visible_descriptor.parent_id.clone(),
|
|
@@ -356,18 +370,18 @@ async fn load_directory_history_rows(
|
|
|
356
370
|
});
|
|
357
371
|
}
|
|
358
372
|
output.retain(|row| {
|
|
359
|
-
let
|
|
373
|
+
let entity_pk = entity_pk_json_array(&row.entity_pk).ok();
|
|
360
374
|
route.matches_surface_row(
|
|
361
375
|
DIRECTORY_DESCRIPTOR_SCHEMA_KEY,
|
|
362
|
-
|
|
376
|
+
entity_pk.as_deref().unwrap_or(&row.entity_pk),
|
|
363
377
|
None,
|
|
364
378
|
row.event.depth,
|
|
365
379
|
)
|
|
366
380
|
});
|
|
367
381
|
|
|
368
382
|
output.sort_by(|left, right| {
|
|
369
|
-
left.
|
|
370
|
-
.cmp(&right.
|
|
383
|
+
left.entity_pk
|
|
384
|
+
.cmp(&right.entity_pk)
|
|
371
385
|
.then(left.event.start_commit_id.cmp(&right.event.start_commit_id))
|
|
372
386
|
.then(left.event.depth.cmp(&right.event.depth))
|
|
373
387
|
.then(
|
|
@@ -389,7 +403,7 @@ fn parse_directory_history_records(
|
|
|
389
403
|
.map(|entry| {
|
|
390
404
|
let Some(snapshot_content) = entry.change.snapshot_content.as_deref() else {
|
|
391
405
|
return Ok(DirectoryHistoryRecord {
|
|
392
|
-
id: entry.change.
|
|
406
|
+
id: entry.change.entity_pk.as_single_string_owned()?,
|
|
393
407
|
parent_id: None,
|
|
394
408
|
name: None,
|
|
395
409
|
hidden: None,
|
|
@@ -529,9 +543,9 @@ fn directory_history_column_array(
|
|
|
529
543
|
"hidden" => Arc::new(BooleanArray::from(
|
|
530
544
|
rows.iter().map(|row| row.hidden).collect::<Vec<_>>(),
|
|
531
545
|
)) as ArrayRef,
|
|
532
|
-
|
|
546
|
+
HISTORY_COL_ENTITY_PK => Arc::new(StringArray::from(
|
|
533
547
|
rows.iter()
|
|
534
|
-
.map(|row|
|
|
548
|
+
.map(|row| entity_pk_json_array(&row.entity_pk).map(Some))
|
|
535
549
|
.collect::<std::result::Result<Vec<_>, _>>()?,
|
|
536
550
|
)) as ArrayRef,
|
|
537
551
|
HISTORY_COL_SCHEMA_KEY => {
|
|
@@ -583,14 +597,14 @@ fn directory_history_column_array(
|
|
|
583
597
|
})
|
|
584
598
|
}
|
|
585
599
|
|
|
586
|
-
fn lix_directory_history_schema() -> SchemaRef {
|
|
600
|
+
pub(super) fn lix_directory_history_schema() -> SchemaRef {
|
|
587
601
|
Arc::new(Schema::new(vec![
|
|
588
602
|
Field::new("id", DataType::Utf8, false),
|
|
589
603
|
Field::new("path", DataType::Utf8, true),
|
|
590
604
|
Field::new("parent_id", DataType::Utf8, true),
|
|
591
605
|
Field::new("name", DataType::Utf8, true),
|
|
592
606
|
Field::new("hidden", DataType::Boolean, true),
|
|
593
|
-
json_field(
|
|
607
|
+
json_field(HISTORY_COL_ENTITY_PK, false),
|
|
594
608
|
Field::new(HISTORY_COL_SCHEMA_KEY, DataType::Utf8, false),
|
|
595
609
|
Field::new(HISTORY_COL_FILE_ID, DataType::Utf8, true),
|
|
596
610
|
json_field(HISTORY_COL_SNAPSHOT_CONTENT, true),
|
|
@@ -615,17 +629,17 @@ fn string_array<'a>(values: impl Iterator<Item = Option<&'a str>>) -> ArrayRef {
|
|
|
615
629
|
}
|
|
616
630
|
|
|
617
631
|
fn datafusion_error_to_lix_error(error: DataFusionError) -> LixError {
|
|
618
|
-
|
|
632
|
+
crate::sql2::error::datafusion_error_to_lix_error(error)
|
|
619
633
|
}
|
|
620
634
|
|
|
621
|
-
fn
|
|
622
|
-
serde_json::to_string(&[
|
|
635
|
+
fn entity_pk_json_array(entity_pk: &str) -> Result<String, LixError> {
|
|
636
|
+
serde_json::to_string(&[entity_pk]).map_err(|error| {
|
|
623
637
|
LixError::unknown(format!(
|
|
624
|
-
"failed to encode history entity
|
|
638
|
+
"failed to encode history entity pk as JSON: {error}"
|
|
625
639
|
))
|
|
626
640
|
})
|
|
627
641
|
}
|
|
628
642
|
|
|
629
643
|
fn lix_error_to_datafusion_error(error: LixError) -> DataFusionError {
|
|
630
|
-
|
|
644
|
+
crate::sql2::error::lix_error_to_datafusion_error(error)
|
|
631
645
|
}
|