use std::sync::Arc;
use reifydb_abi::operator::capabilities::CAPABILITY_ALL_STANDARD;
use reifydb_core::{
interface::{catalog::flow::FlowNodeId, change::Change},
value::column::columns::Columns,
};
use reifydb_rql::expression::Expression;
use reifydb_type::{Result, value::row_number::RowNumber};
use crate::{Operator, operator::Operators, transaction::FlowTransaction};
pub struct ExtendOperator {
parent: Arc<Operators>,
node: FlowNodeId,
#[allow(dead_code)]
expressions: Vec<Expression>,
}
impl ExtendOperator {
pub fn new(parent: Arc<Operators>, node: FlowNodeId, expressions: Vec<Expression>) -> Self {
Self {
parent,
node,
expressions,
}
}
}
impl Operator for ExtendOperator {
fn id(&self) -> FlowNodeId {
self.node
}
fn capabilities(&self) -> u32 {
CAPABILITY_ALL_STANDARD
}
fn apply(&self, _txn: &mut FlowTransaction, change: Change) -> Result<Change> {
Ok(Change::from_flow(self.node, change.version, change.diffs, change.changed_at))
}
fn pull(&self, txn: &mut FlowTransaction, rows: &[RowNumber]) -> Result<Columns> {
self.parent.pull(txn, rows)
}
}