alopex_sql/
lib.rs

1//! SQL parser and planning components for the Alopex DB SQL dialect.
2//!
3//! This crate provides:
4//!
5//! - **Tokenizer**: Lexical analysis of SQL strings
6//! - **Parser**: SQL parsing into an AST
7//! - **Catalog**: Table and index metadata management
8//! - **Planner**: AST to logical plan conversion with type checking
9//!
10//! # Quick Start
11//!
12//! ```
13//! use alopex_sql::{Parser, AlopexDialect};
14//! use alopex_sql::catalog::MemoryCatalog;
15//! use alopex_sql::planner::Planner;
16//!
17//! // Parse SQL using the convenience method
18//! let sql = "CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)";
19//! let dialect = AlopexDialect::default();
20//! let stmts = Parser::parse_sql(&dialect, sql).unwrap();
21//! let stmt = &stmts[0];
22//!
23//! // Plan with catalog
24//! let catalog = MemoryCatalog::new();
25//! let planner = Planner::new(&catalog);
26//! let plan = planner.plan(stmt).unwrap();
27//! ```
28
29pub mod ast;
30#[cfg(feature = "async")]
31pub mod async_api;
32pub mod catalog;
33pub mod columnar;
34pub mod dialect;
35pub mod error;
36pub mod executor;
37pub mod parser;
38pub mod planner;
39pub mod storage;
40pub mod tokenizer;
41#[cfg(all(feature = "tokio", not(target_arch = "wasm32")))]
42pub mod tokio_adapter;
43pub mod unified_error;
44
45// AST types
46pub use ast::{
47    Statement, StatementKind,
48    ddl::*,
49    dml::*,
50    expr::*,
51    span::{Location, Span, Spanned},
52};
53
54// Dialect and parser types
55pub use dialect::{AlopexDialect, Dialect};
56pub use error::{ParserError, Result};
57pub use parser::Parser;
58pub use tokenizer::Tokenizer;
59pub use tokenizer::keyword::Keyword;
60pub use tokenizer::token::{Token, TokenWithSpan, Word};
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, Planner, PlannerError, ProjectedColumn, Projection, ResolvedColumn,
73    ResolvedType, SortExpr, TypeChecker, TypedAssignment, TypedExpr, TypedExprKind,
74};
75
76// Storage types
77#[cfg(feature = "tokio")]
78pub use storage::ErasedAsyncSqlTransaction;
79pub use storage::{
80    IndexScanIterator, IndexStorage, KeyEncoder, RowCodec, SqlTransaction, SqlValue, StorageError,
81    TableScanIterator, TableStorage, TxnBridge, TxnContext,
82};
83
84// Executor types
85#[cfg(feature = "tokio")]
86pub use executor::AsyncExecutor;
87pub use executor::{
88    ColumnInfo, ConstraintViolation, EvaluationError, ExecutionResult, Executor, ExecutorError,
89    QueryResult, Row,
90};
91
92// Async facade types
93#[cfg(feature = "async")]
94pub use async_api::{AsyncResult, AsyncRowStream, AsyncSqlTransaction, AsyncTxnBridge};
95#[cfg(all(feature = "tokio", not(target_arch = "wasm32")))]
96pub use tokio_adapter::{TokioAsyncSqlTransaction, TokioAsyncTxnBridge};
97
98/// `ExecutionResult` の公開 API 名。
99pub type SqlResult = ExecutionResult;
100
101#[cfg(test)]
102mod integration;