use reifydb_core::{
interface::{catalog::flow::OperatorId, change::Change, flow::OperatorCapability},
value::column::columns::Columns,
};
use reifydb_rql::expression::Expression;
use reifydb_value::Result;
use crate::operator::{HostOperator, host::HostContext};
pub struct SortOperator {
parent_schema: Option<Columns>,
operator: OperatorId,
_expressions: Vec<Expression>,
}
impl SortOperator {
pub fn new(parent_schema: Option<Columns>, operator: OperatorId, _expressions: Vec<Expression>) -> Self {
Self {
parent_schema,
operator,
_expressions,
}
}
pub(crate) fn output_schema(&self) -> Option<Columns> {
self.parent_schema.clone()
}
}
impl HostOperator for SortOperator {
fn id(&self) -> OperatorId {
self.operator
}
fn capabilities(&self) -> &[OperatorCapability] {
OperatorCapability::STANDARD
}
fn apply(&mut self, _host: &mut dyn HostContext, change: Change) -> Result<Change> {
Ok(Change::from_flow(self.operator, change.version, change.diffs, change.changed_at))
}
fn output_schema(&self) -> Option<Columns> {
self.output_schema()
}
}