Skip to main content

reddb_server/storage/query/
mod.rs

1//! Query Engine for RedDB
2//!
3//! Provides query execution, filtering, sorting, and similarity search
4//! capabilities for the RedDB storage engine.
5//!
6//! # Components
7//!
8//! - **filter**: Filter predicates (Eq, Lt, Gt, Between, Like, etc.)
9//! - **sort**: Sorting and ordering operations
10//! - **executor**: Query plan execution
11//! - **similarity**: Vector similarity search integration
12//! - **modes**: Multi-mode query parsing (SQL, Gremlin, Cypher, SPARQL, Natural Language)
13//!
14//! # Multi-Mode Parsing
15//!
16//! The query engine supports multiple query languages with automatic mode detection:
17//!
18//! ```ignore
19//! use reddb_rql::modes::{parse_multi, detect_mode, QueryMode};
20//!
21//! // Gremlin
22//! let gremlin = parse_multi("g.V().hasLabel('host').out('connects')").unwrap();
23//!
24//! // SPARQL
25//! let sparql = parse_multi("SELECT ?host WHERE { ?host :hasIP ?ip }").unwrap();
26//!
27//! // Natural language
28//! let natural = parse_multi("find all hosts with ssh open").unwrap();
29//! ```
30//!
31//! # Example
32//!
33//! ```ignore
34//! use reddb::storage::query::{Query, Filter, OrderBy, Direction};
35//!
36//! let query = Query::select("users")
37//!     .filter(Filter::eq("status", "active"))
38//!     .filter(Filter::gt("age", 18))
39//!     .order_by("created_at", Direction::Desc)
40//!     .limit(10);
41//!
42//! let results = executor.execute(&query)?;
43//! ```
44
45pub mod analyze_cmd;
46pub mod batch;
47pub mod binary;
48pub mod engine;
49pub mod evaluator;
50pub mod executor;
51pub mod executors;
52pub mod filter;
53pub mod filter_compiled;
54pub mod planner;
55pub mod rag;
56pub mod similarity;
57pub mod sort;
58pub mod step;
59#[cfg(test)]
60pub(crate) mod test_support;
61pub mod unified;
62pub mod user_params;
63pub(crate) mod value_compare;
64
65// Re-export common types
66pub use engine::{
67    Binding, BindingBuilder, BindingIterator, Op, OpBGP, OpDisjunction, OpDistinct, OpExtend,
68    OpFilter, OpGroup, OpJoin, OpLeftJoin, OpMinus, OpNull, OpOrder, OpProject, OpReduced,
69    OpSequence, OpSlice, OpTable, OpTransform, OpTriple, OpUnion, OpVisitor, Pattern, QueryEngine,
70    QueryEngineFactory, QueryEngineRegistry, QueryIter, QueryIterBase, QueryIterFilter,
71    QueryIterJoin, QueryIterProject, QueryIterSlice, QueryIterSort, QueryIterUnion, TransformCopy,
72    TransformPushFilter, Triple, Var,
73};
74pub use executor::{QueryExecutor, QueryPlan, QueryResult};
75pub use executors::{
76    CteContext, CteExecutor, CteStats, ExecuteResult, GremlinExecutor, MultiModeExecutor,
77    NaturalExecutor, SparqlExecutor,
78};
79pub use filter::{Filter, FilterOp, Predicate};
80pub use planner::{
81    CacheStats, CachedPlan, CardinalityEstimate, CostEstimator, PlanCache, PlanCost,
82    QueryPlan as PlannerQueryPlan, QueryPlanner,
83};
84pub use rag::{
85    ChunkSource, ContextChunk, EntityType, MultiSourceRetriever, QueryAnalysis, QueryIntent,
86    RagConfig, RagEngine, RetrievalContext, RetrievalStrategy, SimilarEntity,
87};
88pub use reddb_types::{SqlTypeName, TypeModifier};
89pub use similarity::{SimilarityQuery, SimilarityResult};
90pub use sort::{Direction, NullsOrder, OrderBy, QueryLimits, SortKey};
91pub use step::{
92    AggregateStep, BarrierStep, BasicTraversal, BranchStep, ChooseStep, CollectingBarrierStep,
93    DedupStep, Direction as TraversalDirection, EdgeSourceStep, EdgeStep, ExecutionMode,
94    FilterStep, FlatMapStep, FoldStep, GroupStep, HasStep, IdStep, LimitStep, LoopState, MapStep,
95    OptionalStep, OrderStep, Path, PathStep, Predicate as StepPredicate, ProjectStep, PropertyStep,
96    RangeStep, ReducingBarrierStep, RepeatStep, SelectStep, SideEffectStep, SourceStep, Step,
97    StepPosition, StepResult, StoreStep, Traversal, TraversalParent, Traverser, TraverserGenerator,
98    TraverserRequirement, TraverserValue, UnionStep, ValueMapStep, VertexSourceStep, VertexStep,
99    WhereStep,
100};
101pub use unified::{
102    ExecutionError, GraphPath, MatchedEdge, MatchedNode, QueryStats, UnifiedExecutor,
103    UnifiedRecord, UnifiedResult,
104};
105
106/// Returns true when the table source should be interpreted as the universal entity
107/// space (table, document, graph, vector mixed mode).
108pub fn is_universal_entity_source(table: &str) -> bool {
109    table.eq_ignore_ascii_case("any")
110        || table.eq_ignore_ascii_case("_any")
111        || table.eq_ignore_ascii_case("all")
112        || table.eq_ignore_ascii_case("entity")
113        || table.eq_ignore_ascii_case("universal")
114        || table.eq_ignore_ascii_case("mixed")
115        || table == "*"
116}