llkv_table/
lib.rs

1//! Table abstraction and system catalog for LLKV.
2//!
3//! This crate provides the [`Table`] type, which builds on [`llkv-column-map`]'s
4//! columnar storage to offer a higher-level, schema-aware interface. It includes:
5//!
6//! - **[`Table`]**: Schema-aware table abstraction with append, scan, and schema operations
7//! - **[`SysCatalog`]**: System catalog (table 0) that stores table and column metadata
8//! - **[`TableMeta`]** and **[`ColMeta`]**: Metadata structures for tables and columns
9//! - **Schema management**: Arrow schema integration with field ID tracking
10//! - **Scan operations**: Projection, filtering, ordering, and computed columns
11//! - **MVCC integration**: Automatic handling of `created_by` and `deleted_by` columns
12//!
13//! # Architecture
14//!
15//! Tables use [`ColumnStore`](llkv_column_map::ColumnStore) for physical storage but add:
16//! - Schema validation and enforcement
17//! - Field ID assignment and tracking
18//! - System catalog for metadata persistence
19//! - MVCC column management
20//! - Row ID filtering (for transaction visibility)
21//!
22//! # Table IDs
23//!
24//! - **Table 0**: Reserved for the system catalog (stores [`TableMeta`] and [`ColMeta`])
25//! - **Tables 1+**: User tables
26//!
27//! See [`CATALOG_TABLE_ID`] and [`is_reserved_table_id`](reserved::is_reserved_table_id).
28//!
29//! # System Catalog
30//!
31//! The [`SysCatalog`] stores table metadata in table 0, which is a reserved system table.
32#![forbid(unsafe_code)]
33
34pub mod catalog;
35pub mod constants;
36pub mod constraints;
37pub mod ddl;
38pub mod gather;
39pub mod metadata;
40mod planner;
41pub mod reserved;
42pub mod resolvers;
43mod scalar_eval;
44pub mod schema_ext;
45mod sys_catalog;
46pub mod view;
47pub mod expr {
48    pub use llkv_expr::expr::*;
49}
50
51pub mod table;
52pub mod types;
53
54pub mod stream;
55
56pub use catalog::{CatalogManager, CreateTableResult, FieldResolver, TableCatalogSnapshot};
57pub use catalog::{SingleColumnIndexDescriptor, SingleColumnIndexRegistration};
58pub use constraints::{
59    CheckConstraint, ConstraintColumnInfo, ConstraintExpressionRef, ConstraintId, ConstraintKind,
60    ConstraintRecord, ConstraintService, ConstraintState, ForeignKeyAction,
61    ForeignKeyChildRowsFetch, ForeignKeyColumn, ForeignKeyConstraint, ForeignKeyParentRowsFetch,
62    ForeignKeyRowFetch, ForeignKeyTableInfo, InsertColumnConstraint, InsertMultiColumnUnique,
63    InsertUniqueColumn, PrimaryKeyConstraint, UniqueConstraint, UniqueKey, ValidatedForeignKey,
64    build_composite_unique_key, column_in_foreign_keys, column_in_multi_column_unique,
65    column_in_primary_or_unique, decode_constraint_row_id, encode_constraint_row_id,
66    ensure_multi_column_unique, ensure_primary_key, ensure_single_column_unique,
67    unique_key_component, validate_alter_table_operation, validate_check_constraints,
68    validate_foreign_key_rows, validate_foreign_keys,
69};
70pub use ddl::CatalogDdl;
71pub use metadata::MultiColumnUniqueRegistration;
72pub use metadata::{ForeignKeyDescriptor, MetadataManager};
73pub use reserved::CATALOG_TABLE_ID;
74pub use resolvers::{canonical_table_name, resolve_table_name};
75pub use stream::{ColumnStream, ColumnStreamBatch};
76pub use sys_catalog::{
77    ColMeta, CustomTypeMeta, MultiColumnUniqueEntryMeta, SingleColumnIndexEntryMeta, SysCatalog,
78    TableMeta, TableMultiColumnUniqueMeta, TableSingleColumnIndexMeta,
79};
80pub use table::Table;
81pub use types::{FieldId, ROW_ID_FIELD_ID, RowId, TableColumn, TableId};
82pub use view::{ForeignKeyView, TableConstraintSummaryView, TableView};
83
84pub use planner::plan_graph::{
85    PLAN_GRAPH_VERSION, PlanAnnotations, PlanEdge, PlanEdgeMetadata, PlanExpression, PlanField,
86    PlanGraph, PlanGraphBuilder, PlanGraphError, PlanGraphResult, PlanGraphVersion, PlanInput,
87    PlanNode, PlanNodeId, PlanOperator,
88};