Skip to main content

linkrs_query/executor/streaming/subquery/
env.rs

1//! Per-evaluation environment threaded into batch expression evaluation.
2
3use std::collections::HashMap;
4use std::sync::Arc;
5
6use linkrs_core::Value;
7
8use super::executor::SubqueryExecutor;
9
10/// Bundle of per-evaluation-environment state threaded into batch expression
11/// evaluation. Replaces the old standalone `params` argument so
12/// future operator kinds only need to add their facility to the env.
13#[derive(Debug, Clone, Default)]
14pub struct EvalEnv {
15    /// Query parameter values (`@name` references).
16    pub params: Option<Arc<HashMap<String, Value>>>,
17    /// Session variable snapshot (`$name` references), captured once per
18    /// statement at the API layer.
19    pub session_variables: Option<Arc<HashMap<String, Value>>>,
20    /// Expression-level subquery executor of the hosting operator, if any.
21    pub subquery_executor: Option<Arc<SubqueryExecutor>>,
22    /// Sequence catalog manager for `curr_val` / `next_val`, shared
23    /// engine-wide. Populated from the execution runtime at operator open.
24    pub sequence_manager: Option<Arc<linkrs_core::metadata::SequenceManager>>,
25}
26
27impl EvalEnv {
28    /// Build an env carrying only parameter values.
29    pub fn from_params(params: Option<Arc<HashMap<String, Value>>>) -> Self {
30        Self {
31            params,
32            session_variables: None,
33            subquery_executor: None,
34            sequence_manager: None,
35        }
36    }
37}