Skip to main content

reifydb_engine/vm/volcano/
mod.rs

1// SPDX-License-Identifier: Apache-2.0
2// Copyright (c) 2025 ReifyDB
3
4use reifydb_core::{
5	interface::catalog::dictionary::Dictionary,
6	value::column::{buffer::ColumnBuffer, columns::Columns},
7};
8use reifydb_transaction::transaction::Transaction;
9use reifydb_type::value::{Value, dictionary::DictionaryEntryId};
10
11use crate::{Result, transaction::operation::dictionary::DictionaryOperations};
12
13pub(crate) fn decode_dictionary_columns(
14	columns: &mut Columns,
15	dictionaries: &[Option<Dictionary>],
16	rx: &mut Transaction,
17) -> Result<()> {
18	for (col_idx, dict_opt) in dictionaries.iter().enumerate() {
19		if let Some(dictionary) = dict_opt {
20			if col_idx >= columns.len() {
21				continue;
22			}
23			let col = &columns[col_idx];
24			let row_count = col.len();
25			let mut new_data = ColumnBuffer::with_capacity(dictionary.value_type.clone(), row_count);
26			for row_idx in 0..row_count {
27				let id_value = col.get_value(row_idx);
28				if let Some(entry_id) = DictionaryEntryId::from_value(&id_value) {
29					match rx.get_from_dictionary(dictionary, entry_id)? {
30						Some(decoded) => new_data.push_value(decoded),
31						None => new_data.push_value(Value::none()),
32					}
33				} else {
34					new_data.push_value(Value::none());
35				}
36			}
37			columns.columns.make_mut()[col_idx] = new_data;
38		}
39	}
40	Ok(())
41}
42
43use query::{QueryContext, QueryNode};
44use reifydb_core::value::column::headers::ColumnHeaders;
45
46/// Placeholder node used temporarily during `mem::replace` in initialize().
47pub(crate) struct NoopNode;
48
49impl QueryNode for NoopNode {
50	fn initialize<'a>(&mut self, _: &mut Transaction<'a>, _: &QueryContext) -> Result<()> {
51		Ok(())
52	}
53	fn next<'a>(&mut self, _: &mut Transaction<'a>, _: &mut QueryContext) -> Result<Option<Columns>> {
54		Ok(None)
55	}
56	fn headers(&self) -> Option<ColumnHeaders> {
57		None
58	}
59}
60
61pub mod aggregate;
62pub mod apply_transform;
63pub mod assert;
64pub mod compile;
65pub mod distinct;
66pub mod environment;
67pub mod extend;
68pub mod filter;
69pub mod generator;
70pub mod inline;
71pub mod join;
72pub mod map;
73pub mod patch;
74pub mod query;
75pub mod row_lookup;
76pub mod run_tests;
77pub mod scalarize;
78pub mod scan;
79pub mod sort;
80pub mod take;
81pub mod top_k;
82pub(crate) mod udf;
83pub mod variable;