pub mod adapters;
pub mod ast;
pub mod build;
pub mod context;
pub mod engine;
pub mod errors;
#[cfg(feature = "json")]
pub mod json;
pub mod lexer;
pub mod optimize;
pub mod parser;
pub mod plan;
pub mod planner;
pub mod print;
pub mod regex_dialect;
pub mod resolve;
pub mod semantics;
pub mod value;
pub mod walk;
pub use adapters::IndexedCollection;
#[cfg(feature = "sqlite")]
pub use adapters::SqliteTable;
pub use ast::{
BinaryOp, Consumer, CountCmp, Expr, Follow, FollowDestination, LogicalOp, OpNode, OrderSpec,
Query, RelOp, SelectItem, Span, Subquery, UnaryOp, Where,
};
pub const LANGUAGE_VERSION: &str = "0.20";
pub const VERSION: &str = env!("CARGO_PKG_VERSION");
pub use context::{DataContext, DefaultContext};
pub use engine::{Engine, InMemoryEngine, OqxResult};
pub use errors::{OqxError, Result, Stage};
#[cfg(feature = "json")]
pub use json::{ast_to_json, query_from_json};
pub use lexer::{TokType, Token, lex_string, lex_template, raw_source};
pub use optimize::{BlockPlan, Correlation, DEFAULT_RULES, HashIndex, RowIndex, Rule, RuleContext};
pub use parser::{parse_string, parse_template};
pub use plan::{
Equality, ROWS_ROOT, as_equality, const_value, is_const, partition_pushable, residual_query,
};
pub use planner::{Plan, PlannedEngine, QueryPlanner};
pub use print::{Template, print, print_query, print_template};
pub use regex_dialect::{CompiledRegex, RegexDialect, RegexFlags, compile_regex};
pub use resolve::{resolve_aliases, resolve_subquery};
pub use value::{Object, Range, Value};
pub use walk::{Clause, Node, VisitContext, Visitor, strip_spans, transform, visit};
pub fn run_query(query: &Query, bindings: &[Value], roots: Object) -> Result<OqxResult> {
let resolved = resolve_aliases(query)?;
InMemoryEngine::new(DefaultContext::new(roots)).run(&resolved, bindings)
}
pub fn execute(source: &str, roots: Object) -> Result<Value> {
let query = parser::parse_string(source)?;
Ok(run_query(&query, &[], roots)?.into_value())
}