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;
30pub mod catalog;
31pub mod columnar;
32pub mod dialect;
33pub mod error;
34pub mod executor;
35pub mod parser;
36pub mod planner;
37pub mod storage;
38pub mod tokenizer;
39
40// AST types
41pub use ast::{
42    Statement, StatementKind,
43    ddl::*,
44    dml::*,
45    expr::*,
46    span::{Location, Span, Spanned},
47};
48
49// Dialect and parser types
50pub use dialect::{AlopexDialect, Dialect};
51pub use error::{ParserError, Result};
52pub use parser::Parser;
53pub use tokenizer::Tokenizer;
54pub use tokenizer::keyword::Keyword;
55pub use tokenizer::token::{Token, TokenWithSpan, Word};
56
57// Catalog types (re-exported for convenience)
58pub use catalog::{
59    Catalog, ColumnMetadata, Compression, IndexMetadata, MemoryCatalog, RowIdMode, StorageOptions,
60    StorageType, TableMetadata,
61};
62
63// Planner types (re-exported for convenience)
64pub use planner::{
65    LogicalPlan, NameResolver, Planner, PlannerError, ProjectedColumn, Projection, ResolvedColumn,
66    ResolvedType, SortExpr, TypeChecker, TypedAssignment, TypedExpr, TypedExprKind,
67};
68
69// Storage types
70pub use storage::{
71    IndexScanIterator, IndexStorage, KeyEncoder, RowCodec, SqlTransaction, SqlValue, StorageError,
72    TableScanIterator, TableStorage, TxnBridge, TxnContext,
73};
74
75// Executor types
76pub use executor::{
77    ColumnInfo, ConstraintViolation, EvaluationError, ExecutionResult, Executor, ExecutorError,
78    QueryResult, Row,
79};
80
81#[cfg(test)]
82mod integration;