From 5b964187c42b21ebeaf093e34da5d29ed68492f0 Mon Sep 17 00:00:00 2001 From: waralexrom <108349432+waralexrom@users.noreply.github.com> Date: Wed, 1 Jul 2026 17:38:14 +0200 Subject: [PATCH] fix(tesseract): resolve FILTER_PARAMS callback-column placeholders in segments (#11189) --- .../cubesqlplanner/src/planner/sql_call.rs | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/rust/cube/cubesqlplanner/cubesqlplanner/src/planner/sql_call.rs b/rust/cube/cubesqlplanner/cubesqlplanner/src/planner/sql_call.rs index b8698b2f0babf..4b496c4153855 100644 --- a/rust/cube/cubesqlplanner/cubesqlplanner/src/planner/sql_call.rs +++ b/rust/cube/cubesqlplanner/cubesqlplanner/src/planner/sql_call.rs @@ -337,6 +337,26 @@ impl SqlCall { .collect::, _>>()?; let context_values = self.eval_security_context_values(&query_tools); + + // A FILTER_PARAMS column can itself be a template referencing this + // call's members (e.g. `.filter(`${CUBE.col}`)`), so the rendered + // predicate may still carry `{arg:N}`/`{sv:N}` placeholders. Resolve + // them against the just-computed dependencies before the predicate is + // spliced into the outer template, which would otherwise leave them + // untouched (the outer pass never rescans substituted values). + let filter_params = filter_params + .iter() + .map(|s| { + Self::substitute_template(s, &deps, &filter_params, &filter_groups, &context_values) + }) + .collect::, _>>()?; + let filter_groups = filter_groups + .iter() + .map(|s| { + Self::substitute_template(s, &deps, &filter_params, &filter_groups, &context_values) + }) + .collect::, _>>()?; + Ok((filter_params, filter_groups, deps, context_values)) }