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