manifoldb_query/lib.rs
1//! `ManifoldDB` Query
2//!
3//! This crate provides query parsing, planning, and execution for `ManifoldDB`.
4//!
5//! # Overview
6//!
7//! The query system consists of several layers:
8//!
9//! - **AST**: Abstract syntax tree representation of parsed queries
10//! - **Parser**: SQL parser with graph and vector extensions
11//! - **Plan**: Query planning (logical and physical plans)
12//! - **Exec**: Query execution engine
13//!
14//! # Modules
15//!
16//! - [`ast`] - Query abstract syntax tree types
17//! - [`parser`] - SQL parser with graph/vector extensions
18//! - [`plan`] - Query planning (logical and physical)
19//! - [`exec`] - Query execution
20//! - [`error`] - Error types for parsing and execution
21//!
22//! # Quick Start
23//!
24//! Parse a simple SQL query:
25//!
26//! ```
27//! use manifoldb_query::parser::parse_sql;
28//!
29//! let statements = parse_sql("SELECT * FROM users WHERE id = 1").unwrap();
30//! ```
31//!
32//! Parse a query with graph patterns:
33//!
34//! ```
35//! use manifoldb_query::parser::ExtendedParser;
36//!
37//! let statements = ExtendedParser::parse(
38//! "SELECT * FROM users MATCH (u)-[:FOLLOWS]->(f) WHERE u.id = 1"
39//! ).unwrap();
40//! ```
41//!
42//! Build AST programmatically:
43//!
44//! ```
45//! use manifoldb_query::ast::{
46//! Expr, QualifiedName, SelectItem, SelectStatement, TableRef,
47//! };
48//!
49//! let query = SelectStatement::new(vec![SelectItem::Wildcard])
50//! .from(TableRef::table(QualifiedName::simple("users")))
51//! .where_clause(
52//! Expr::column(QualifiedName::simple("id"))
53//! .eq(Expr::integer(1))
54//! );
55//! ```
56//!
57//! Build a logical plan from a parsed query:
58//!
59//! ```
60//! use manifoldb_query::parser::parse_single_statement;
61//! use manifoldb_query::plan::logical::PlanBuilder;
62//!
63//! let stmt = parse_single_statement("SELECT * FROM users WHERE id = 1").unwrap();
64//! let plan = PlanBuilder::new().build_statement(&stmt).unwrap();
65//! println!("{}", plan.display_tree());
66//! ```
67
68// Deny unwrap in library code to ensure proper error handling
69#![deny(clippy::unwrap_used)]
70
71pub mod ast;
72pub mod error;
73pub mod exec;
74pub mod parser;
75pub mod plan;
76
77// Re-export commonly used items at the crate root
78pub use error::{ParseError, ParseResult};
79pub use exec::{ExecutionContext, Executor, Operator, QueryResult, ResultSet, Row, RowBatch};
80pub use parser::{parse_single_statement, parse_sql, ExtendedParser};
81pub use plan::{
82 LogicalExpr, LogicalPlan, PhysicalPlanner, PlanBuilder, PlanError, PlanResult, PlannerCatalog,
83 PlannerIndexInfo, PlannerIndexType, TableStats,
84};