Skip to main content

reifydb_engine/vm/volcano/
mod.rs

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