Skip to main content

reifydb_sub_flow/operator/
extend.rs

1// SPDX-License-Identifier: Apache-2.0
2// Copyright (c) 2025 ReifyDB
3
4use std::sync::Arc;
5
6use reifydb_core::{
7	interface::{catalog::flow::FlowNodeId, change::Change},
8	value::column::columns::Columns,
9};
10use reifydb_rql::expression::Expression;
11use reifydb_type::{Result, value::row_number::RowNumber};
12
13use crate::{Operator, operator::Operators, transaction::FlowTransaction};
14
15pub struct ExtendOperator {
16	parent: Arc<Operators>,
17	node: FlowNodeId,
18	#[allow(dead_code)]
19	expressions: Vec<Expression>,
20}
21
22impl ExtendOperator {
23	pub fn new(parent: Arc<Operators>, node: FlowNodeId, expressions: Vec<Expression>) -> Self {
24		Self {
25			parent,
26			node,
27			expressions,
28		}
29	}
30}
31
32impl Operator for ExtendOperator {
33	fn id(&self) -> FlowNodeId {
34		self.node
35	}
36
37	fn apply(&self, _txn: &mut FlowTransaction, change: Change) -> Result<Change> {
38		// TODO: Implement single-encoded extend processing
39		// For now, just pass through all changes with updated from
40		Ok(Change::from_flow(self.node, change.version, change.diffs))
41	}
42
43	fn pull(&self, txn: &mut FlowTransaction, rows: &[RowNumber]) -> Result<Columns> {
44		self.parent.pull(txn, rows)
45	}
46}