Skip to main content

alopex_sql/
lib.rs

1//! SQL parser and planning components for the Alopex DB SQL dialect.
2//!
3//! This crate provides:
4//!
5//! - **Parser**: SQL parsing into an AST via the Nim FFI parser
6//! - **Catalog**: Table and index metadata management
7//! - **Planner**: AST to logical plan conversion with type checking
8//!
9//! # Quick Start
10//!
11//! ```
12//! use alopex_sql::{Parser, AlopexDialect};
13//! use alopex_sql::catalog::MemoryCatalog;
14//! use alopex_sql::planner::Planner;
15//!
16//! // Parse SQL using the convenience method
17//! let sql = "CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)";
18//! let dialect = AlopexDialect::default();
19//! let stmts = Parser::parse_sql(&dialect, sql).unwrap();
20//! let stmt = &stmts[0];
21//!
22//! // Plan with catalog
23//! let catalog = MemoryCatalog::new();
24//! let planner = Planner::new(&catalog);
25//! let plan = planner.plan(stmt).unwrap();
26//! ```
27
28pub mod ast;
29#[cfg(feature = "async")]
30pub mod async_api;
31pub mod catalog;
32pub mod columnar;
33pub mod dialect;
34pub mod distributed_read;
35pub mod error;
36pub mod executor;
37mod nim_bridge;
38mod nim_ffi;
39pub mod parser;
40pub mod planner;
41pub mod scalar;
42pub mod storage;
43#[cfg(all(feature = "tokio", not(target_arch = "wasm32")))]
44pub mod tokio_adapter;
45pub mod unified_error;
46
47// AST types
48pub use ast::{
49    PragmaValue, Statement, StatementKind,
50    ddl::*,
51    dml::*,
52    expr::*,
53    span::{Location, Span, Spanned},
54};
55
56// Dialect and parser types
57pub use dialect::{AlopexDialect, Dialect};
58pub use error::{ParserError, Result};
59pub use nim_bridge::parser_contract_version;
60pub use parser::Parser;
61pub use unified_error::SqlError;
62
63// Catalog types (re-exported for convenience)
64pub use catalog::persistent::{CatalogOverlay, DataSourceFormat, TableType};
65pub use catalog::{
66    Catalog, ColumnMetadata, Compression, IndexMetadata, MemoryCatalog, RowIdMode, StorageOptions,
67    StorageType, TableMetadata,
68};
69
70// Planner types (re-exported for convenience)
71pub use planner::{
72    LogicalPlan, NameResolver, PlannedStatement, Planner, PlannerError, PlanningDiagnostic,
73    PlanningDiagnosticSeverity, ProjectedColumn, Projection, ResolvedColumn, ResolvedType,
74    RoutingInput, SortExpr, TableReference, TableReferenceAccess, TableReferenceExtractor,
75    TableReferenceSource, TypeChecker, TypedAssignment, TypedExpr, TypedExprKind,
76    plan_sql_for_routing, plan_statement_for_routing,
77};
78
79// Storage types
80#[cfg(feature = "tokio")]
81pub use storage::ErasedAsyncSqlTransaction;
82pub use storage::{
83    IndexScanIterator, IndexStorage, KeyEncoder, RangeBoundedScanIterator, RangeReadSnapshot,
84    RowCodec, SqlTransaction, SqlValue, StorageError, StorageRangeConstraint,
85    StorageRangeConstraintError, TableScanIterator, TableStorage, TxnBridge, TxnContext,
86};
87
88// Executor types
89#[cfg(feature = "tokio")]
90pub use executor::AsyncExecutor;
91pub use executor::{
92    ColumnInfo, ConstraintViolation, EvaluationError, ExecutionResult, Executor, ExecutorError,
93    QueryResult, Row,
94};
95
96// Async facade types
97#[cfg(feature = "async")]
98pub use async_api::{AsyncResult, AsyncRowStream, AsyncSqlTransaction, AsyncTxnBridge};
99#[cfg(all(feature = "tokio", not(target_arch = "wasm32")))]
100pub use tokio_adapter::{TokioAsyncSqlTransaction, TokioAsyncTxnBridge};
101
102/// `ExecutionResult` の公開 API 名。
103pub type SqlResult = ExecutionResult;
104
105#[cfg(test)]
106mod integration;