grafeo_core/execution/operators/
mod.rs1mod aggregate;
23mod distinct;
24mod expand;
25mod filter;
26mod join;
27mod limit;
28mod merge;
29mod mutation;
30mod project;
31pub mod push;
32mod scan;
33mod shortest_path;
34pub mod single_row;
35mod sort;
36mod union;
37mod unwind;
38mod variable_length_expand;
39
40pub use aggregate::{
41 AggregateExpr, AggregateFunction, HashAggregateOperator, SimpleAggregateOperator,
42};
43pub use distinct::DistinctOperator;
44pub use expand::ExpandOperator;
45pub use filter::{
46 BinaryFilterOp, ExpressionPredicate, FilterExpression, FilterOperator, Predicate, UnaryFilterOp,
47};
48pub use join::{
49 EqualityCondition, HashJoinOperator, HashKey, JoinCondition, JoinType, NestedLoopJoinOperator,
50};
51pub use limit::{LimitOperator, LimitSkipOperator, SkipOperator};
52pub use merge::MergeOperator;
53pub use mutation::{
54 AddLabelOperator, CreateEdgeOperator, CreateNodeOperator, DeleteEdgeOperator,
55 DeleteNodeOperator, PropertySource, RemoveLabelOperator, SetPropertyOperator,
56};
57pub use project::{ProjectExpr, ProjectOperator};
58pub use push::{
59 AggregatePushOperator, DistinctMaterializingOperator, DistinctPushOperator, FilterPushOperator,
60 LimitPushOperator, ProjectPushOperator, SkipLimitPushOperator, SkipPushOperator,
61 SortPushOperator, SpillableAggregatePushOperator, SpillableSortPushOperator,
62};
63pub use scan::ScanOperator;
64pub use shortest_path::ShortestPathOperator;
65pub use sort::{NullOrder, SortDirection, SortKey, SortOperator};
66pub use union::UnionOperator;
67pub use unwind::UnwindOperator;
68pub use variable_length_expand::VariableLengthExpandOperator;
69
70use thiserror::Error;
71
72use super::DataChunk;
73
74pub type OperatorResult = Result<Option<DataChunk>, OperatorError>;
76
77#[derive(Error, Debug, Clone)]
79pub enum OperatorError {
80 #[error("type mismatch: expected {expected}, found {found}")]
82 TypeMismatch {
83 expected: String,
85 found: String,
87 },
88 #[error("column not found: {0}")]
90 ColumnNotFound(String),
91 #[error("execution error: {0}")]
93 Execution(String),
94}
95
96pub trait Operator: Send + Sync {
101 fn next(&mut self) -> OperatorResult;
103
104 fn reset(&mut self);
106
107 fn name(&self) -> &'static str;
109}