Expand description
ManifoldDB Query
This crate provides query parsing, planning, and execution for ManifoldDB.
§Overview
The query system consists of several layers:
- AST: Abstract syntax tree representation of parsed queries
- Parser: SQL parser with graph and vector extensions
- Plan: Query planning (logical and physical plans)
- Exec: Query execution engine
§Modules
ast- Query abstract syntax tree typesparser- SQL parser with graph/vector extensionsplan- Query planning (logical and physical)exec- Query executionerror- Error types for parsing and execution
§Quick Start
Parse a simple SQL query:
use manifoldb_query::parser::parse_sql;
let statements = parse_sql("SELECT * FROM users WHERE id = 1").unwrap();Parse a query with graph patterns:
use manifoldb_query::parser::ExtendedParser;
let statements = ExtendedParser::parse(
"SELECT * FROM users MATCH (u)-[:FOLLOWS]->(f) WHERE u.id = 1"
).unwrap();Build AST programmatically:
use manifoldb_query::ast::{
Expr, QualifiedName, SelectItem, SelectStatement, TableRef,
};
let query = SelectStatement::new(vec![SelectItem::Wildcard])
.from(TableRef::table(QualifiedName::simple("users")))
.where_clause(
Expr::column(QualifiedName::simple("id"))
.eq(Expr::integer(1))
);Build a logical plan from a parsed query:
use manifoldb_query::parser::parse_single_statement;
use manifoldb_query::plan::logical::PlanBuilder;
let stmt = parse_single_statement("SELECT * FROM users WHERE id = 1").unwrap();
let plan = PlanBuilder::new().build_statement(&stmt).unwrap();
println!("{}", plan.display_tree());Re-exports§
pub use error::ParseError;pub use error::ParseResult;pub use exec::ExecutionContext;pub use exec::Executor;pub use exec::Operator;pub use exec::QueryResult;pub use exec::ResultSet;pub use exec::Row;pub use exec::RowBatch;pub use parser::parse_single_statement;pub use parser::parse_sql;pub use parser::ExtendedParser;pub use plan::LogicalExpr;pub use plan::LogicalPlan;pub use plan::PhysicalPlanner;pub use plan::PlanBuilder;pub use plan::PlanError;pub use plan::PlanResult;pub use plan::PlannerCatalog;pub use plan::PlannerIndexInfo;pub use plan::PlannerIndexType;pub use plan::TableStats;