@lix-js/sdk 0.6.0-preview.5 → 0.6.0

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 (274) hide show
  1. package/README.md +76 -4
  2. package/dist/errors.d.ts +7 -0
  3. package/dist/errors.js +19 -0
  4. package/dist/index.d.ts +4 -5
  5. package/dist/index.js +3 -3
  6. package/dist/native.d.ts +1 -0
  7. package/dist/native.js +47 -0
  8. package/dist/open-lix.d.ts +38 -207
  9. package/dist/open-lix.js +59 -284
  10. package/dist/result.d.ts +18 -0
  11. package/dist/result.js +48 -0
  12. package/dist/types.d.ts +114 -1
  13. package/dist/value.d.ts +28 -0
  14. package/dist/value.js +245 -0
  15. package/package.json +38 -71
  16. package/SKILL.md +0 -507
  17. package/dist/builtin-schemas.d.ts +0 -1
  18. package/dist/builtin-schemas.js +0 -1
  19. package/dist/engine-wasm/index.d.ts +0 -87
  20. package/dist/engine-wasm/index.js +0 -339
  21. package/dist/engine-wasm/wasm/lix_engine.d.ts +0 -79
  22. package/dist/engine-wasm/wasm/lix_engine.js +0 -833
  23. package/dist/engine-wasm/wasm/lix_engine.wasm +0 -0
  24. package/dist/engine-wasm/wasm/lix_engine.wasm.d.ts +0 -27
  25. package/dist/generated/builtin-schemas.d.ts +0 -427
  26. package/dist/generated/builtin-schemas.js +0 -643
  27. package/dist/sqlite/index.d.ts +0 -12
  28. package/dist/sqlite/index.js +0 -359
  29. package/dist-engine-src/README.md +0 -18
  30. package/dist-engine-src/src/backend/capabilities.rs +0 -67
  31. package/dist-engine-src/src/backend/conformance/baseline.rs +0 -1127
  32. package/dist-engine-src/src/backend/conformance/factory.rs +0 -93
  33. package/dist-engine-src/src/backend/conformance/failure_tests.rs +0 -608
  34. package/dist-engine-src/src/backend/conformance/fixtures.rs +0 -26
  35. package/dist-engine-src/src/backend/conformance/mod.rs +0 -75
  36. package/dist-engine-src/src/backend/conformance/model.rs +0 -28
  37. package/dist-engine-src/src/backend/conformance/model_based.rs +0 -257
  38. package/dist-engine-src/src/backend/conformance/persistence.rs +0 -204
  39. package/dist-engine-src/src/backend/conformance/projection.rs +0 -21
  40. package/dist-engine-src/src/backend/conformance/pushdown.rs +0 -24
  41. package/dist-engine-src/src/backend/conformance/runner.rs +0 -90
  42. package/dist-engine-src/src/backend/conformance/scan.rs +0 -24
  43. package/dist-engine-src/src/backend/conformance/write.rs +0 -16
  44. package/dist-engine-src/src/backend/error.rs +0 -94
  45. package/dist-engine-src/src/backend/in_memory.rs +0 -670
  46. package/dist-engine-src/src/backend/mod.rs +0 -39
  47. package/dist-engine-src/src/backend/predicate.rs +0 -80
  48. package/dist-engine-src/src/backend/traits.rs +0 -260
  49. package/dist-engine-src/src/backend/types.rs +0 -239
  50. package/dist-engine-src/src/binary_cas/chunking.rs +0 -31
  51. package/dist-engine-src/src/binary_cas/codec.rs +0 -346
  52. package/dist-engine-src/src/binary_cas/context.rs +0 -139
  53. package/dist-engine-src/src/binary_cas/kv.rs +0 -1038
  54. package/dist-engine-src/src/binary_cas/mod.rs +0 -11
  55. package/dist-engine-src/src/binary_cas/types.rs +0 -121
  56. package/dist-engine-src/src/branch/context.rs +0 -40
  57. package/dist-engine-src/src/branch/lifecycle.rs +0 -221
  58. package/dist-engine-src/src/branch/mod.rs +0 -13
  59. package/dist-engine-src/src/branch/refs.rs +0 -321
  60. package/dist-engine-src/src/branch/stage_rows.rs +0 -67
  61. package/dist-engine-src/src/branch/types.rs +0 -21
  62. package/dist-engine-src/src/catalog/context.rs +0 -412
  63. package/dist-engine-src/src/catalog/mod.rs +0 -10
  64. package/dist-engine-src/src/catalog/schema.rs +0 -4
  65. package/dist-engine-src/src/catalog/snapshot.rs +0 -1114
  66. package/dist-engine-src/src/cel/context.rs +0 -86
  67. package/dist-engine-src/src/cel/error.rs +0 -19
  68. package/dist-engine-src/src/cel/mod.rs +0 -8
  69. package/dist-engine-src/src/cel/provider.rs +0 -9
  70. package/dist-engine-src/src/cel/runtime.rs +0 -167
  71. package/dist-engine-src/src/cel/value.rs +0 -50
  72. package/dist-engine-src/src/changelog/bench_support.rs +0 -785
  73. package/dist-engine-src/src/changelog/change.rs +0 -1
  74. package/dist-engine-src/src/changelog/codec.rs +0 -497
  75. package/dist-engine-src/src/changelog/commit.rs +0 -1
  76. package/dist-engine-src/src/changelog/context.rs +0 -1614
  77. package/dist-engine-src/src/changelog/mod.rs +0 -29
  78. package/dist-engine-src/src/changelog/store.rs +0 -163
  79. package/dist-engine-src/src/changelog/test_support.rs +0 -54
  80. package/dist-engine-src/src/changelog/types.rs +0 -213
  81. package/dist-engine-src/src/commit_graph/context.rs +0 -944
  82. package/dist-engine-src/src/commit_graph/mod.rs +0 -9
  83. package/dist-engine-src/src/commit_graph/types.rs +0 -89
  84. package/dist-engine-src/src/commit_graph/walker.rs +0 -786
  85. package/dist-engine-src/src/common/error.rs +0 -347
  86. package/dist-engine-src/src/common/fingerprint.rs +0 -3
  87. package/dist-engine-src/src/common/fs_path.rs +0 -1336
  88. package/dist-engine-src/src/common/identity.rs +0 -145
  89. package/dist-engine-src/src/common/json_pointer.rs +0 -67
  90. package/dist-engine-src/src/common/metadata.rs +0 -40
  91. package/dist-engine-src/src/common/mod.rs +0 -23
  92. package/dist-engine-src/src/common/types.rs +0 -105
  93. package/dist-engine-src/src/common/wire.rs +0 -222
  94. package/dist-engine-src/src/domain.rs +0 -320
  95. package/dist-engine-src/src/engine.rs +0 -203
  96. package/dist-engine-src/src/entity_pk.rs +0 -402
  97. package/dist-engine-src/src/functions/context.rs +0 -296
  98. package/dist-engine-src/src/functions/deterministic.rs +0 -113
  99. package/dist-engine-src/src/functions/mod.rs +0 -18
  100. package/dist-engine-src/src/functions/provider.rs +0 -130
  101. package/dist-engine-src/src/functions/state.rs +0 -335
  102. package/dist-engine-src/src/functions/types.rs +0 -37
  103. package/dist-engine-src/src/init.rs +0 -692
  104. package/dist-engine-src/src/json_store/compression.rs +0 -77
  105. package/dist-engine-src/src/json_store/context.rs +0 -172
  106. package/dist-engine-src/src/json_store/encoded.rs +0 -15
  107. package/dist-engine-src/src/json_store/mod.rs +0 -38
  108. package/dist-engine-src/src/json_store/store.rs +0 -494
  109. package/dist-engine-src/src/json_store/types.rs +0 -212
  110. package/dist-engine-src/src/lib.rs +0 -92
  111. package/dist-engine-src/src/live_state/context.rs +0 -1883
  112. package/dist-engine-src/src/live_state/mod.rs +0 -21
  113. package/dist-engine-src/src/live_state/overlay.rs +0 -75
  114. package/dist-engine-src/src/live_state/reader.rs +0 -23
  115. package/dist-engine-src/src/live_state/types.rs +0 -231
  116. package/dist-engine-src/src/live_state/visibility.rs +0 -666
  117. package/dist-engine-src/src/plugin/archive.rs +0 -438
  118. package/dist-engine-src/src/plugin/component.rs +0 -183
  119. package/dist-engine-src/src/plugin/install.rs +0 -619
  120. package/dist-engine-src/src/plugin/manifest.rs +0 -516
  121. package/dist-engine-src/src/plugin/materializer.rs +0 -202
  122. package/dist-engine-src/src/plugin/mod.rs +0 -33
  123. package/dist-engine-src/src/plugin/plugin_manifest.json +0 -119
  124. package/dist-engine-src/src/plugin/storage.rs +0 -74
  125. package/dist-engine-src/src/schema/annotations/defaults.rs +0 -275
  126. package/dist-engine-src/src/schema/annotations/mod.rs +0 -1
  127. package/dist-engine-src/src/schema/builtin/lix_account.json +0 -21
  128. package/dist-engine-src/src/schema/builtin/lix_active_account.json +0 -29
  129. package/dist-engine-src/src/schema/builtin/lix_binary_blob_ref.json +0 -29
  130. package/dist-engine-src/src/schema/builtin/lix_branch_descriptor.json +0 -34
  131. package/dist-engine-src/src/schema/builtin/lix_branch_ref.json +0 -48
  132. package/dist-engine-src/src/schema/builtin/lix_change.json +0 -63
  133. package/dist-engine-src/src/schema/builtin/lix_change_author.json +0 -45
  134. package/dist-engine-src/src/schema/builtin/lix_commit.json +0 -24
  135. package/dist-engine-src/src/schema/builtin/lix_commit_edge.json +0 -53
  136. package/dist-engine-src/src/schema/builtin/lix_directory_descriptor.json +0 -52
  137. package/dist-engine-src/src/schema/builtin/lix_file_descriptor.json +0 -52
  138. package/dist-engine-src/src/schema/builtin/lix_key_value.json +0 -40
  139. package/dist-engine-src/src/schema/builtin/lix_label.json +0 -29
  140. package/dist-engine-src/src/schema/builtin/lix_label_assignment.json +0 -74
  141. package/dist-engine-src/src/schema/builtin/lix_registered_schema.json +0 -25
  142. package/dist-engine-src/src/schema/builtin/mod.rs +0 -220
  143. package/dist-engine-src/src/schema/compatibility.rs +0 -787
  144. package/dist-engine-src/src/schema/definition.json +0 -187
  145. package/dist-engine-src/src/schema/definition.rs +0 -742
  146. package/dist-engine-src/src/schema/key.rs +0 -138
  147. package/dist-engine-src/src/schema/mod.rs +0 -20
  148. package/dist-engine-src/src/schema/seed.rs +0 -14
  149. package/dist-engine-src/src/schema/tests.rs +0 -780
  150. package/dist-engine-src/src/session/context.rs +0 -1059
  151. package/dist-engine-src/src/session/create_branch.rs +0 -94
  152. package/dist-engine-src/src/session/execute.rs +0 -681
  153. package/dist-engine-src/src/session/merge/analysis.rs +0 -108
  154. package/dist-engine-src/src/session/merge/branch.rs +0 -417
  155. package/dist-engine-src/src/session/merge/conflicts.rs +0 -63
  156. package/dist-engine-src/src/session/merge/mod.rs +0 -10
  157. package/dist-engine-src/src/session/merge/stats.rs +0 -61
  158. package/dist-engine-src/src/session/mod.rs +0 -30
  159. package/dist-engine-src/src/session/switch_branch.rs +0 -113
  160. package/dist-engine-src/src/session/transaction.rs +0 -557
  161. package/dist-engine-src/src/sql2/bind/classify.rs +0 -102
  162. package/dist-engine-src/src/sql2/bind/error.rs +0 -5
  163. package/dist-engine-src/src/sql2/bind/expr.rs +0 -29
  164. package/dist-engine-src/src/sql2/bind/mod.rs +0 -12
  165. package/dist-engine-src/src/sql2/bind/public_udf.rs +0 -306
  166. package/dist-engine-src/src/sql2/bind/read.rs +0 -65
  167. package/dist-engine-src/src/sql2/bind/statement.rs +0 -2236
  168. package/dist-engine-src/src/sql2/bind/table.rs +0 -273
  169. package/dist-engine-src/src/sql2/bind/write.rs +0 -86
  170. package/dist-engine-src/src/sql2/branch_scope.rs +0 -436
  171. package/dist-engine-src/src/sql2/catalog/capability.rs +0 -20
  172. package/dist-engine-src/src/sql2/catalog/entity_surface.rs +0 -296
  173. package/dist-engine-src/src/sql2/catalog/mod.rs +0 -15
  174. package/dist-engine-src/src/sql2/catalog/registry.rs +0 -556
  175. package/dist-engine-src/src/sql2/catalog/schema.rs +0 -88
  176. package/dist-engine-src/src/sql2/catalog/surface.rs +0 -41
  177. package/dist-engine-src/src/sql2/change_materialization.rs +0 -122
  178. package/dist-engine-src/src/sql2/context.rs +0 -317
  179. package/dist-engine-src/src/sql2/dml.rs +0 -148
  180. package/dist-engine-src/src/sql2/error.rs +0 -215
  181. package/dist-engine-src/src/sql2/exec/bound_public_write.rs +0 -1593
  182. package/dist-engine-src/src/sql2/exec/datafusion.rs +0 -5266
  183. package/dist-engine-src/src/sql2/exec/fast_write.rs +0 -82
  184. package/dist-engine-src/src/sql2/exec/mod.rs +0 -24
  185. package/dist-engine-src/src/sql2/exec/write.rs +0 -661
  186. package/dist-engine-src/src/sql2/filesystem_planner.rs +0 -1485
  187. package/dist-engine-src/src/sql2/filesystem_predicates.rs +0 -159
  188. package/dist-engine-src/src/sql2/filesystem_visibility.rs +0 -383
  189. package/dist-engine-src/src/sql2/history_projection.rs +0 -56
  190. package/dist-engine-src/src/sql2/history_route.rs +0 -661
  191. package/dist-engine-src/src/sql2/mod.rs +0 -52
  192. package/dist-engine-src/src/sql2/optimize/datafusion.rs +0 -1
  193. package/dist-engine-src/src/sql2/optimize/mod.rs +0 -2
  194. package/dist-engine-src/src/sql2/optimize/simple_write.rs +0 -116
  195. package/dist-engine-src/src/sql2/parse/mod.rs +0 -69
  196. package/dist-engine-src/src/sql2/parse/normalize.rs +0 -1
  197. package/dist-engine-src/src/sql2/plan/branch_scope.rs +0 -24
  198. package/dist-engine-src/src/sql2/plan/mod.rs +0 -5
  199. package/dist-engine-src/src/sql2/plan/predicate.rs +0 -22
  200. package/dist-engine-src/src/sql2/plan/write.rs +0 -147
  201. package/dist-engine-src/src/sql2/predicate_typecheck.rs +0 -504
  202. package/dist-engine-src/src/sql2/providers/branch.rs +0 -1206
  203. package/dist-engine-src/src/sql2/providers/change.rs +0 -445
  204. package/dist-engine-src/src/sql2/providers/directory.rs +0 -2422
  205. package/dist-engine-src/src/sql2/providers/directory_history.rs +0 -645
  206. package/dist-engine-src/src/sql2/providers/entity.rs +0 -1484
  207. package/dist-engine-src/src/sql2/providers/entity_history.rs +0 -452
  208. package/dist-engine-src/src/sql2/providers/file.rs +0 -3686
  209. package/dist-engine-src/src/sql2/providers/file_history.rs +0 -924
  210. package/dist-engine-src/src/sql2/providers/history.rs +0 -426
  211. package/dist-engine-src/src/sql2/providers/lix_state.rs +0 -2542
  212. package/dist-engine-src/src/sql2/providers/mod.rs +0 -508
  213. package/dist-engine-src/src/sql2/read_only.rs +0 -63
  214. package/dist-engine-src/src/sql2/record_batch.rs +0 -17
  215. package/dist-engine-src/src/sql2/result_metadata.rs +0 -29
  216. package/dist-engine-src/src/sql2/runtime.rs +0 -60
  217. package/dist-engine-src/src/sql2/session.rs +0 -83
  218. package/dist-engine-src/src/sql2/storage/constraints.rs +0 -1
  219. package/dist-engine-src/src/sql2/storage/mod.rs +0 -1
  220. package/dist-engine-src/src/sql2/test_support/differential.rs +0 -712
  221. package/dist-engine-src/src/sql2/test_support/generators.rs +0 -354
  222. package/dist-engine-src/src/sql2/test_support/mod.rs +0 -2
  223. package/dist-engine-src/src/sql2/udfs/common.rs +0 -295
  224. package/dist-engine-src/src/sql2/udfs/lix_active_branch_commit_id.rs +0 -53
  225. package/dist-engine-src/src/sql2/udfs/lix_empty_blob.rs +0 -47
  226. package/dist-engine-src/src/sql2/udfs/lix_json.rs +0 -100
  227. package/dist-engine-src/src/sql2/udfs/lix_json_get.rs +0 -99
  228. package/dist-engine-src/src/sql2/udfs/lix_json_get_text.rs +0 -99
  229. package/dist-engine-src/src/sql2/udfs/lix_text_decode.rs +0 -82
  230. package/dist-engine-src/src/sql2/udfs/lix_text_encode.rs +0 -85
  231. package/dist-engine-src/src/sql2/udfs/lix_timestamp.rs +0 -76
  232. package/dist-engine-src/src/sql2/udfs/lix_uuid_v7.rs +0 -76
  233. package/dist-engine-src/src/sql2/udfs/mod.rs +0 -86
  234. package/dist-engine-src/src/sql2/write_normalization.rs +0 -368
  235. package/dist-engine-src/src/storage/conformance.rs +0 -399
  236. package/dist-engine-src/src/storage/context.rs +0 -620
  237. package/dist-engine-src/src/storage/mod.rs +0 -52
  238. package/dist-engine-src/src/storage/point.rs +0 -440
  239. package/dist-engine-src/src/storage/read_scope.rs +0 -67
  240. package/dist-engine-src/src/storage/reader.rs +0 -867
  241. package/dist-engine-src/src/storage/scan.rs +0 -784
  242. package/dist-engine-src/src/storage/spaces.rs +0 -236
  243. package/dist-engine-src/src/storage/stats.rs +0 -80
  244. package/dist-engine-src/src/storage/write_set.rs +0 -962
  245. package/dist-engine-src/src/storage_bench.rs +0 -171
  246. package/dist-engine-src/src/test_support.rs +0 -450
  247. package/dist-engine-src/src/tracked_state/bench_support.rs +0 -394
  248. package/dist-engine-src/src/tracked_state/codec.rs +0 -1183
  249. package/dist-engine-src/src/tracked_state/commit_root_rebuild.rs +0 -358
  250. package/dist-engine-src/src/tracked_state/context.rs +0 -2801
  251. package/dist-engine-src/src/tracked_state/diff.rs +0 -2140
  252. package/dist-engine-src/src/tracked_state/merge.rs +0 -478
  253. package/dist-engine-src/src/tracked_state/mod.rs +0 -35
  254. package/dist-engine-src/src/tracked_state/row_materialization.rs +0 -275
  255. package/dist-engine-src/src/tracked_state/storage.rs +0 -427
  256. package/dist-engine-src/src/tracked_state/tree.rs +0 -3063
  257. package/dist-engine-src/src/tracked_state/types.rs +0 -238
  258. package/dist-engine-src/src/transaction/bench_support.rs +0 -407
  259. package/dist-engine-src/src/transaction/commit.rs +0 -1592
  260. package/dist-engine-src/src/transaction/context.rs +0 -1653
  261. package/dist-engine-src/src/transaction/mod.rs +0 -24
  262. package/dist-engine-src/src/transaction/normalization.rs +0 -877
  263. package/dist-engine-src/src/transaction/prep.rs +0 -37
  264. package/dist-engine-src/src/transaction/schema_resolver.rs +0 -163
  265. package/dist-engine-src/src/transaction/staging.rs +0 -1525
  266. package/dist-engine-src/src/transaction/types.rs +0 -403
  267. package/dist-engine-src/src/transaction/validation.rs +0 -5766
  268. package/dist-engine-src/src/untracked_state/codec.rs +0 -615
  269. package/dist-engine-src/src/untracked_state/context.rs +0 -98
  270. package/dist-engine-src/src/untracked_state/materialization.rs +0 -63
  271. package/dist-engine-src/src/untracked_state/mod.rs +0 -15
  272. package/dist-engine-src/src/untracked_state/storage.rs +0 -898
  273. package/dist-engine-src/src/untracked_state/types.rs +0 -146
  274. package/dist-engine-src/src/wasm/mod.rs +0 -60
@@ -1,556 +0,0 @@
1
- use std::collections::BTreeMap;
2
- #[cfg(test)]
3
- use std::sync::Arc;
4
-
5
- #[cfg(test)]
6
- use datafusion::arrow::datatypes::{DataType, Field, Schema, SchemaRef};
7
- use serde_json::Value as JsonValue;
8
-
9
- use crate::LixError;
10
-
11
- use super::{PublicColumn, PublicSurfaceContract, PublicSurfaceKind, SurfaceCapabilities};
12
- #[cfg(test)]
13
- use crate::sql2::catalog::entity_surface_schema;
14
- use crate::sql2::catalog::{
15
- derive_entity_surface_spec_from_schema, entity_system_fields,
16
- schema_exposed_as_entity_history_surface, schema_exposed_as_entity_surface, EntitySurfaceShape,
17
- EntitySurfaceSpec,
18
- };
19
- use crate::sql2::history_route::{
20
- HISTORY_COL_CHANGE_ID, HISTORY_COL_COMMIT_CREATED_AT, HISTORY_COL_DEPTH, HISTORY_COL_ENTITY_PK,
21
- HISTORY_COL_FILE_ID, HISTORY_COL_METADATA, HISTORY_COL_OBSERVED_COMMIT_ID,
22
- HISTORY_COL_SCHEMA_KEY, HISTORY_COL_SNAPSHOT_CONTENT, HISTORY_COL_START_COMMIT_ID,
23
- };
24
- #[cfg(test)]
25
- use crate::sql2::result_metadata::json_field;
26
-
27
- #[derive(Clone, Debug, Default)]
28
- pub(crate) struct PublicCatalog {
29
- surfaces: BTreeMap<String, PublicSurfaceContract>,
30
- entity_specs: BTreeMap<String, EntitySurfaceSpec>,
31
- }
32
-
33
- impl PublicCatalog {
34
- pub(crate) fn from_visible_schemas(schema_definitions: &[JsonValue]) -> Result<Self, LixError> {
35
- let mut catalog = Self::default();
36
- catalog.insert_system_surfaces()?;
37
- for schema in schema_definitions {
38
- catalog.insert_entity_surfaces_from_schema(schema)?;
39
- }
40
- Ok(catalog)
41
- }
42
-
43
- pub(crate) fn insert(&mut self, surface: PublicSurfaceContract) -> Result<(), LixError> {
44
- if self.surfaces.contains_key(&surface.name) {
45
- return Err(LixError::new(
46
- LixError::CODE_SCHEMA_DEFINITION,
47
- format!("duplicate public SQL surface '{}'", surface.name),
48
- ));
49
- }
50
- self.surfaces.insert(surface.name.clone(), surface);
51
- Ok(())
52
- }
53
-
54
- pub(crate) fn surface(&self, table_name: &str) -> Option<&PublicSurfaceContract> {
55
- self.surfaces.get(table_name)
56
- }
57
-
58
- pub(crate) fn surfaces(&self) -> impl Iterator<Item = &PublicSurfaceContract> {
59
- self.surfaces.values()
60
- }
61
-
62
- pub(crate) fn entity_spec(&self, schema_key: &str) -> Option<&EntitySurfaceSpec> {
63
- self.entity_specs.get(schema_key)
64
- }
65
-
66
- #[cfg(test)]
67
- pub(crate) fn surface_schema(&self, table_name: &str) -> Option<SchemaRef> {
68
- let surface = self.surface(table_name)?;
69
- Some(match &surface.kind {
70
- PublicSurfaceKind::LixState => lix_state_schema(false),
71
- PublicSurfaceKind::LixStateByBranch => lix_state_schema(true),
72
- PublicSurfaceKind::File => filesystem_schema(false, true),
73
- PublicSurfaceKind::FileByBranch => filesystem_schema(true, true),
74
- PublicSurfaceKind::Directory => filesystem_schema(false, false),
75
- PublicSurfaceKind::DirectoryByBranch => filesystem_schema(true, false),
76
- PublicSurfaceKind::Branch => Arc::new(Schema::new(vec![
77
- Field::new("id", DataType::Utf8, false),
78
- Field::new("name", DataType::Utf8, false),
79
- Field::new("hidden", DataType::Boolean, false),
80
- Field::new("commit_id", DataType::Utf8, false),
81
- ])),
82
- PublicSurfaceKind::Change => Arc::new(Schema::new(vec![
83
- Field::new("id", DataType::Utf8, false),
84
- json_field("entity_pk", false),
85
- Field::new("schema_key", DataType::Utf8, false),
86
- Field::new("file_id", DataType::Utf8, true),
87
- json_field("metadata", true),
88
- Field::new("created_at", DataType::Utf8, false),
89
- json_field("snapshot_content", true),
90
- ])),
91
- PublicSurfaceKind::History => Arc::new(Schema::new(vec![
92
- json_field("entity_pk", false),
93
- Field::new("schema_key", DataType::Utf8, false),
94
- Field::new("file_id", DataType::Utf8, true),
95
- json_field("snapshot_content", true),
96
- json_field("metadata", true),
97
- Field::new("change_id", DataType::Utf8, false),
98
- Field::new("observed_commit_id", DataType::Utf8, false),
99
- Field::new("commit_created_at", DataType::Utf8, false),
100
- Field::new("start_commit_id", DataType::Utf8, false),
101
- Field::new("depth", DataType::Int64, false),
102
- ])),
103
- PublicSurfaceKind::FileHistory => history_filesystem_schema(true),
104
- PublicSurfaceKind::DirectoryHistory => history_filesystem_schema(false),
105
- PublicSurfaceKind::EntityBase { schema_key } => {
106
- entity_surface_schema(self.entity_spec(schema_key)?, EntitySurfaceShape::Active)
107
- }
108
- PublicSurfaceKind::EntityByBranch { schema_key } => {
109
- entity_surface_schema(self.entity_spec(schema_key)?, EntitySurfaceShape::ByBranch)
110
- }
111
- PublicSurfaceKind::EntityHistory { schema_key } => {
112
- entity_surface_schema(self.entity_spec(schema_key)?, EntitySurfaceShape::History)
113
- }
114
- })
115
- }
116
-
117
- pub(crate) fn require_surface(
118
- &self,
119
- table_name: &str,
120
- ) -> Result<&PublicSurfaceContract, LixError> {
121
- self.surface(table_name).ok_or_else(|| {
122
- LixError::new(
123
- LixError::CODE_UNSUPPORTED_SQL,
124
- format!("unknown SQL table '{table_name}'"),
125
- )
126
- })
127
- }
128
-
129
- fn insert_system_surfaces(&mut self) -> Result<(), LixError> {
130
- self.insert(surface(
131
- "lix_state",
132
- PublicSurfaceKind::LixState,
133
- lix_state_columns(false),
134
- SurfaceCapabilities::read_write(),
135
- ))?;
136
- self.insert(surface(
137
- "lix_state_by_branch",
138
- PublicSurfaceKind::LixStateByBranch,
139
- lix_state_columns(true),
140
- SurfaceCapabilities::read_write(),
141
- ))?;
142
- self.insert(surface(
143
- "lix_file",
144
- PublicSurfaceKind::File,
145
- filesystem_columns(false),
146
- SurfaceCapabilities::read_write(),
147
- ))?;
148
- self.insert(surface(
149
- "lix_file_by_branch",
150
- PublicSurfaceKind::FileByBranch,
151
- filesystem_columns(true),
152
- SurfaceCapabilities::read_write(),
153
- ))?;
154
- self.insert(surface(
155
- "lix_directory",
156
- PublicSurfaceKind::Directory,
157
- directory_columns(false),
158
- SurfaceCapabilities::read_write(),
159
- ))?;
160
- self.insert(surface(
161
- "lix_directory_by_branch",
162
- PublicSurfaceKind::DirectoryByBranch,
163
- directory_columns(true),
164
- SurfaceCapabilities::read_write(),
165
- ))?;
166
- self.insert(surface(
167
- "lix_branch",
168
- PublicSurfaceKind::Branch,
169
- vec![
170
- PublicColumn::public_insert_only("id"),
171
- PublicColumn::public("name"),
172
- PublicColumn::public("hidden"),
173
- PublicColumn::public("commit_id"),
174
- ],
175
- SurfaceCapabilities::read_write(),
176
- ))?;
177
- self.insert(surface(
178
- "lix_change",
179
- PublicSurfaceKind::Change,
180
- public_columns([
181
- "id",
182
- "entity_pk",
183
- "schema_key",
184
- "file_id",
185
- "metadata",
186
- "created_at",
187
- "snapshot_content",
188
- ]),
189
- SurfaceCapabilities::read_only(),
190
- ))?;
191
- self.insert(surface(
192
- "lix_state_history",
193
- PublicSurfaceKind::History,
194
- state_history_columns(),
195
- SurfaceCapabilities::read_only(),
196
- ))?;
197
- self.insert(surface(
198
- "lix_file_history",
199
- PublicSurfaceKind::FileHistory,
200
- file_history_columns(),
201
- SurfaceCapabilities::read_only(),
202
- ))?;
203
- self.insert(surface(
204
- "lix_directory_history",
205
- PublicSurfaceKind::DirectoryHistory,
206
- directory_history_columns(),
207
- SurfaceCapabilities::read_only(),
208
- ))?;
209
- Ok(())
210
- }
211
-
212
- fn insert_entity_surfaces_from_schema(&mut self, schema: &JsonValue) -> Result<(), LixError> {
213
- let spec = match derive_entity_surface_spec_from_schema(schema) {
214
- Ok(spec) => spec,
215
- Err(_) => return Ok(()),
216
- };
217
-
218
- if !schema_exposed_as_entity_surface(&spec.schema_key) {
219
- return Ok(());
220
- };
221
-
222
- let mut columns = entity_columns(&spec);
223
- columns.extend(entity_hidden_columns(false));
224
-
225
- self.insert(surface(
226
- &spec.schema_key,
227
- PublicSurfaceKind::EntityBase {
228
- schema_key: spec.schema_key.clone(),
229
- },
230
- columns,
231
- SurfaceCapabilities::read_write(),
232
- ))?;
233
-
234
- let mut by_branch_columns = entity_columns(&spec);
235
- by_branch_columns.extend(entity_hidden_columns(true));
236
-
237
- self.insert(surface(
238
- format!("{}_by_branch", spec.schema_key),
239
- PublicSurfaceKind::EntityByBranch {
240
- schema_key: spec.schema_key.clone(),
241
- },
242
- by_branch_columns,
243
- SurfaceCapabilities::read_write(),
244
- ))?;
245
-
246
- if schema_exposed_as_entity_history_surface(&spec.schema_key) {
247
- let mut history_columns = spec
248
- .columns
249
- .iter()
250
- .map(|column| PublicColumn::public(column.name.as_str()))
251
- .collect::<Vec<_>>();
252
- history_columns.extend(entity_system_columns(EntitySurfaceShape::History));
253
-
254
- self.insert(surface(
255
- format!("{}_history", spec.schema_key),
256
- PublicSurfaceKind::EntityHistory {
257
- schema_key: spec.schema_key.clone(),
258
- },
259
- history_columns,
260
- SurfaceCapabilities::read_only(),
261
- ))?;
262
- }
263
-
264
- self.entity_specs.insert(spec.schema_key.clone(), spec);
265
- Ok(())
266
- }
267
- }
268
-
269
- #[cfg(test)]
270
- fn lix_state_schema(by_branch: bool) -> SchemaRef {
271
- let mut fields = vec![
272
- json_field("entity_pk", false),
273
- Field::new("schema_key", DataType::Utf8, false),
274
- Field::new("file_id", DataType::Utf8, true),
275
- json_field("snapshot_content", true),
276
- json_field("metadata", true),
277
- Field::new("created_at", DataType::Utf8, true),
278
- Field::new("updated_at", DataType::Utf8, true),
279
- Field::new("global", DataType::Boolean, true),
280
- Field::new("change_id", DataType::Utf8, true),
281
- Field::new("commit_id", DataType::Utf8, true),
282
- Field::new("untracked", DataType::Boolean, true),
283
- ];
284
- if by_branch {
285
- fields.push(Field::new("branch_id", DataType::Utf8, false));
286
- }
287
- Arc::new(Schema::new(fields))
288
- }
289
-
290
- #[cfg(test)]
291
- fn filesystem_schema(by_branch: bool, include_data: bool) -> SchemaRef {
292
- let mut fields = if include_data {
293
- vec![
294
- Field::new("id", DataType::Utf8, true),
295
- Field::new("path", DataType::Utf8, false),
296
- Field::new("directory_id", DataType::Utf8, true),
297
- Field::new("name", DataType::Utf8, false),
298
- Field::new("hidden", DataType::Boolean, true),
299
- Field::new("data", DataType::Binary, true),
300
- ]
301
- } else {
302
- vec![
303
- Field::new("id", DataType::Utf8, true),
304
- Field::new("path", DataType::Utf8, true),
305
- Field::new("parent_id", DataType::Utf8, true),
306
- Field::new("name", DataType::Utf8, false),
307
- Field::new("hidden", DataType::Boolean, true),
308
- ]
309
- };
310
- fields.extend([
311
- json_field("lixcol_entity_pk", false),
312
- Field::new("lixcol_schema_key", DataType::Utf8, false),
313
- Field::new("lixcol_file_id", DataType::Utf8, true),
314
- Field::new("lixcol_global", DataType::Boolean, true),
315
- Field::new("lixcol_change_id", DataType::Utf8, true),
316
- Field::new("lixcol_created_at", DataType::Utf8, true),
317
- Field::new("lixcol_updated_at", DataType::Utf8, true),
318
- Field::new("lixcol_commit_id", DataType::Utf8, true),
319
- Field::new("lixcol_untracked", DataType::Boolean, true),
320
- json_field("lixcol_metadata", true),
321
- ]);
322
- if by_branch {
323
- fields.push(Field::new("lixcol_branch_id", DataType::Utf8, false));
324
- }
325
- Arc::new(Schema::new(fields))
326
- }
327
-
328
- #[cfg(test)]
329
- fn history_filesystem_schema(include_data: bool) -> SchemaRef {
330
- let mut fields = if include_data {
331
- vec![
332
- Field::new("id", DataType::Utf8, false),
333
- Field::new("path", DataType::Utf8, true),
334
- Field::new("directory_id", DataType::Utf8, true),
335
- Field::new("name", DataType::Utf8, true),
336
- Field::new("hidden", DataType::Boolean, true),
337
- Field::new("data", DataType::Binary, true),
338
- ]
339
- } else {
340
- vec![
341
- Field::new("id", DataType::Utf8, false),
342
- Field::new("path", DataType::Utf8, true),
343
- Field::new("parent_id", DataType::Utf8, true),
344
- Field::new("name", DataType::Utf8, true),
345
- Field::new("hidden", DataType::Boolean, true),
346
- ]
347
- };
348
- fields.extend([
349
- json_field(HISTORY_COL_ENTITY_PK, false),
350
- Field::new(HISTORY_COL_SCHEMA_KEY, DataType::Utf8, false),
351
- Field::new(HISTORY_COL_FILE_ID, DataType::Utf8, true),
352
- json_field(HISTORY_COL_SNAPSHOT_CONTENT, true),
353
- Field::new(HISTORY_COL_CHANGE_ID, DataType::Utf8, false),
354
- json_field(HISTORY_COL_METADATA, true),
355
- Field::new(HISTORY_COL_OBSERVED_COMMIT_ID, DataType::Utf8, false),
356
- Field::new(HISTORY_COL_COMMIT_CREATED_AT, DataType::Utf8, false),
357
- Field::new(HISTORY_COL_START_COMMIT_ID, DataType::Utf8, false),
358
- Field::new(HISTORY_COL_DEPTH, DataType::Int64, false),
359
- ]);
360
- Arc::new(Schema::new(fields))
361
- }
362
-
363
- fn surface(
364
- name: impl Into<String>,
365
- kind: PublicSurfaceKind,
366
- columns: Vec<PublicColumn>,
367
- capabilities: SurfaceCapabilities,
368
- ) -> PublicSurfaceContract {
369
- let columns = columns
370
- .into_iter()
371
- .enumerate()
372
- .map(|(id, column)| column.with_id(id))
373
- .collect();
374
- PublicSurfaceContract {
375
- name: name.into(),
376
- kind,
377
- columns,
378
- capabilities,
379
- }
380
- }
381
-
382
- fn public_columns<const N: usize>(names: [&str; N]) -> Vec<PublicColumn> {
383
- names.into_iter().map(PublicColumn::public).collect()
384
- }
385
-
386
- fn entity_columns(spec: &EntitySurfaceSpec) -> Vec<PublicColumn> {
387
- let primary_key_roots = spec
388
- .primary_key_paths
389
- .iter()
390
- .filter_map(|path| path.first())
391
- .collect::<std::collections::BTreeSet<_>>();
392
- spec.columns
393
- .iter()
394
- .map(|column| {
395
- if spec.schema_key == "lix_registered_schema" && column.name == "value" {
396
- PublicColumn::public(column.name.as_str())
397
- } else if primary_key_roots.contains(&column.name) {
398
- PublicColumn::public_insert_only(column.name.as_str())
399
- } else {
400
- PublicColumn::public(column.name.as_str())
401
- }
402
- })
403
- .collect()
404
- }
405
-
406
- fn lix_state_columns(by_branch: bool) -> Vec<PublicColumn> {
407
- let mut columns = vec![
408
- PublicColumn::public_insert_only("entity_pk"),
409
- PublicColumn::public_insert_only("schema_key"),
410
- PublicColumn::public_insert_only("file_id"),
411
- PublicColumn::public("snapshot_content"),
412
- PublicColumn::public("metadata"),
413
- PublicColumn::public_insert_only("created_at"),
414
- PublicColumn::public_insert_only("updated_at"),
415
- PublicColumn::public_insert_only("global"),
416
- PublicColumn::public_insert_only("change_id"),
417
- PublicColumn::public_insert_only("commit_id"),
418
- PublicColumn::public_insert_only("untracked"),
419
- ];
420
- if by_branch {
421
- columns.push(PublicColumn::public_insert_only("branch_id"));
422
- }
423
- columns
424
- }
425
-
426
- fn filesystem_columns(by_branch: bool) -> Vec<PublicColumn> {
427
- let mut columns = vec![
428
- PublicColumn::public_insert_only("id"),
429
- PublicColumn::public("path"),
430
- PublicColumn::public("directory_id"),
431
- PublicColumn::public("name"),
432
- PublicColumn::public("hidden"),
433
- PublicColumn::public("data"),
434
- ];
435
- columns.extend(filesystem_hidden_columns(by_branch));
436
- columns
437
- }
438
-
439
- fn directory_columns(by_branch: bool) -> Vec<PublicColumn> {
440
- let mut columns = vec![
441
- PublicColumn::public_insert_only("id"),
442
- PublicColumn::public_insert_only("path"),
443
- PublicColumn::public("parent_id"),
444
- PublicColumn::public("name"),
445
- PublicColumn::public("hidden"),
446
- ];
447
- columns.extend(filesystem_hidden_columns(by_branch));
448
- columns
449
- }
450
-
451
- fn entity_hidden_columns(by_branch: bool) -> Vec<PublicColumn> {
452
- entity_system_columns(if by_branch {
453
- EntitySurfaceShape::ByBranch
454
- } else {
455
- EntitySurfaceShape::Active
456
- })
457
- }
458
-
459
- fn filesystem_hidden_columns(by_branch: bool) -> Vec<PublicColumn> {
460
- let mut columns = vec![
461
- PublicColumn::hidden("lixcol_entity_pk"),
462
- PublicColumn::hidden("lixcol_schema_key"),
463
- PublicColumn::hidden("lixcol_file_id"),
464
- PublicColumn::public_insert_only("lixcol_global"),
465
- PublicColumn::hidden("lixcol_change_id"),
466
- PublicColumn::hidden("lixcol_created_at"),
467
- PublicColumn::hidden("lixcol_updated_at"),
468
- PublicColumn::hidden("lixcol_commit_id"),
469
- PublicColumn::public_insert_only("lixcol_untracked"),
470
- PublicColumn::public("lixcol_metadata"),
471
- ];
472
- if by_branch {
473
- columns.push(PublicColumn::public_insert_only("lixcol_branch_id"));
474
- }
475
- columns
476
- }
477
-
478
- fn entity_system_columns(variant: EntitySurfaceShape) -> Vec<PublicColumn> {
479
- if variant == EntitySurfaceShape::History {
480
- return entity_system_fields(variant)
481
- .into_iter()
482
- .map(|field| PublicColumn::public(field.name().as_str()))
483
- .collect();
484
- }
485
-
486
- entity_system_fields(variant)
487
- .into_iter()
488
- .map(|field| match field.name().as_str() {
489
- "lixcol_schema_key" | "lixcol_change_id" | "lixcol_created_at"
490
- | "lixcol_updated_at" | "lixcol_commit_id" => {
491
- PublicColumn::public_read_only(field.name().as_str())
492
- }
493
- "lixcol_entity_pk" | "lixcol_global" | "lixcol_untracked" | "lixcol_branch_id" => {
494
- PublicColumn::public_insert_only(field.name().as_str())
495
- }
496
- "lixcol_metadata" => PublicColumn::public(field.name().as_str()),
497
- _ => PublicColumn::hidden(field.name().as_str()),
498
- })
499
- .collect()
500
- }
501
-
502
- fn state_history_columns() -> Vec<PublicColumn> {
503
- public_columns([
504
- "entity_pk",
505
- "schema_key",
506
- "file_id",
507
- "snapshot_content",
508
- "metadata",
509
- "change_id",
510
- "observed_commit_id",
511
- "commit_created_at",
512
- "start_commit_id",
513
- "depth",
514
- ])
515
- }
516
-
517
- fn file_history_columns() -> Vec<PublicColumn> {
518
- public_columns([
519
- "id",
520
- "path",
521
- "directory_id",
522
- "name",
523
- "hidden",
524
- "data",
525
- HISTORY_COL_ENTITY_PK,
526
- HISTORY_COL_SCHEMA_KEY,
527
- HISTORY_COL_FILE_ID,
528
- HISTORY_COL_SNAPSHOT_CONTENT,
529
- HISTORY_COL_CHANGE_ID,
530
- HISTORY_COL_METADATA,
531
- HISTORY_COL_OBSERVED_COMMIT_ID,
532
- HISTORY_COL_COMMIT_CREATED_AT,
533
- HISTORY_COL_START_COMMIT_ID,
534
- HISTORY_COL_DEPTH,
535
- ])
536
- }
537
-
538
- fn directory_history_columns() -> Vec<PublicColumn> {
539
- public_columns([
540
- "id",
541
- "path",
542
- "parent_id",
543
- "name",
544
- "hidden",
545
- HISTORY_COL_ENTITY_PK,
546
- HISTORY_COL_SCHEMA_KEY,
547
- HISTORY_COL_FILE_ID,
548
- HISTORY_COL_SNAPSHOT_CONTENT,
549
- HISTORY_COL_CHANGE_ID,
550
- HISTORY_COL_METADATA,
551
- HISTORY_COL_OBSERVED_COMMIT_ID,
552
- HISTORY_COL_COMMIT_CREATED_AT,
553
- HISTORY_COL_START_COMMIT_ID,
554
- HISTORY_COL_DEPTH,
555
- ])
556
- }
@@ -1,88 +0,0 @@
1
- #[derive(Clone, Debug, Eq, PartialEq)]
2
- pub(crate) struct PublicColumn {
3
- pub(crate) id: usize,
4
- pub(crate) name: String,
5
- pub(crate) role: PublicColumnRole,
6
- pub(crate) write: PublicColumnWrite,
7
- }
8
-
9
- impl PublicColumn {
10
- pub(crate) fn public(name: impl Into<String>) -> Self {
11
- Self {
12
- id: 0,
13
- name: name.into(),
14
- role: PublicColumnRole::Public,
15
- write: PublicColumnWrite::READ_WRITE,
16
- }
17
- }
18
-
19
- pub(crate) fn public_insert_only(name: impl Into<String>) -> Self {
20
- Self {
21
- id: 0,
22
- name: name.into(),
23
- role: PublicColumnRole::Public,
24
- write: PublicColumnWrite {
25
- insert: true,
26
- update: false,
27
- },
28
- }
29
- }
30
-
31
- pub(crate) fn public_read_only(name: impl Into<String>) -> Self {
32
- Self {
33
- id: 0,
34
- name: name.into(),
35
- role: PublicColumnRole::Public,
36
- write: PublicColumnWrite::READ_ONLY,
37
- }
38
- }
39
-
40
- pub(crate) fn hidden(name: impl Into<String>) -> Self {
41
- Self {
42
- id: 0,
43
- name: name.into(),
44
- role: PublicColumnRole::Hidden,
45
- write: PublicColumnWrite::READ_ONLY,
46
- }
47
- }
48
-
49
- pub(crate) fn is_public(&self) -> bool {
50
- self.role == PublicColumnRole::Public
51
- }
52
-
53
- pub(crate) fn with_id(mut self, id: usize) -> Self {
54
- self.id = id;
55
- self
56
- }
57
-
58
- pub(crate) fn is_insertable(&self) -> bool {
59
- self.write.insert
60
- }
61
-
62
- pub(crate) fn is_updatable(&self) -> bool {
63
- self.write.update
64
- }
65
- }
66
-
67
- #[derive(Clone, Debug, Eq, PartialEq)]
68
- pub(crate) enum PublicColumnRole {
69
- Public,
70
- Hidden,
71
- }
72
-
73
- #[derive(Clone, Copy, Debug, Eq, PartialEq)]
74
- pub(crate) struct PublicColumnWrite {
75
- insert: bool,
76
- update: bool,
77
- }
78
-
79
- impl PublicColumnWrite {
80
- const READ_WRITE: Self = Self {
81
- insert: true,
82
- update: true,
83
- };
84
- const READ_ONLY: Self = Self {
85
- insert: false,
86
- update: false,
87
- };
88
- }
@@ -1,41 +0,0 @@
1
- use super::{PublicColumn, SurfaceCapabilities};
2
-
3
- #[derive(Clone, Debug, Eq, PartialEq)]
4
- pub(crate) struct PublicSurfaceContract {
5
- pub(crate) name: String,
6
- pub(crate) kind: PublicSurfaceKind,
7
- pub(crate) columns: Vec<PublicColumn>,
8
- pub(crate) capabilities: SurfaceCapabilities,
9
- }
10
-
11
- impl PublicSurfaceContract {
12
- pub(crate) fn public_column(&self, column_name: &str) -> Option<&PublicColumn> {
13
- self.columns
14
- .iter()
15
- .find(|column| column.name == column_name && column.is_public())
16
- }
17
-
18
- pub(crate) fn column(&self, column_name: &str) -> Option<&PublicColumn> {
19
- self.columns
20
- .iter()
21
- .find(|column| column.name == column_name)
22
- }
23
- }
24
-
25
- #[derive(Clone, Debug, Eq, PartialEq)]
26
- pub(crate) enum PublicSurfaceKind {
27
- LixState,
28
- LixStateByBranch,
29
- EntityBase { schema_key: String },
30
- EntityByBranch { schema_key: String },
31
- EntityHistory { schema_key: String },
32
- File,
33
- FileByBranch,
34
- FileHistory,
35
- Directory,
36
- DirectoryByBranch,
37
- DirectoryHistory,
38
- Branch,
39
- Change,
40
- History,
41
- }