Skip to content

Commit 369a635

Browse files
authored
fix: explain update sql panic (#17474)
* fix explain update panic * add test * fix * fix * make lint * fix * fix * fix * fix * fix * fix * fix test * fix test * fix test * fix * fix * add test * fix * fix * fix test * fix test * fix * fix test
1 parent 210c76d commit 369a635

40 files changed

+677
-518
lines changed

src/query/service/src/interpreters/interpreter_explain.rs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ use databend_common_pipeline_core::processors::PlanProfile;
3333
use databend_common_pipeline_core::ExecutionInfo;
3434
use databend_common_sql::binder::ExplainConfig;
3535
use databend_common_sql::executor::format_partial_tree;
36+
use databend_common_sql::executor::MutationBuildInfo;
3637
use databend_common_sql::optimizer::ColumnSet;
3738
use databend_common_sql::plans::Mutation;
3839
use databend_common_sql::BindContext;
@@ -46,6 +47,7 @@ use serde_json;
4647
use super::InsertMultiTableInterpreter;
4748
use super::InterpreterFactory;
4849
use crate::interpreters::interpreter::on_execution_finished;
50+
use crate::interpreters::interpreter_mutation::build_mutation_info;
4951
use crate::interpreters::interpreter_mutation::MutationInterpreter;
5052
use crate::interpreters::Interpreter;
5153
use crate::pipelines::executor::ExecutorSettings;
@@ -146,7 +148,7 @@ impl Interpreter for ExplainInterpreter {
146148
schema.clone(),
147149
metadata.clone(),
148150
)?;
149-
let plan = interpreter.build_physical_plan(&mutation, None).await?;
151+
let plan = interpreter.build_physical_plan(&mutation, true).await?;
150152
self.explain_physical_plan(&plan, metadata, &None).await?
151153
}
152154
_ => self.explain_plan(&self.plan)?,
@@ -181,16 +183,20 @@ impl Interpreter for ExplainInterpreter {
181183
s_expr,
182184
metadata,
183185
bind_context.column_set(),
186+
None,
184187
*ignore_result,
185188
)
186189
.await?
187190
}
188191
Plan::DataMutation { s_expr, .. } => {
189192
let plan: Mutation = s_expr.plan().clone().try_into()?;
193+
let mutation_build_info =
194+
build_mutation_info(self.ctx.clone(), &plan, true).await?;
190195
self.explain_analyze(
191196
s_expr.child(0)?,
192197
&plan.metadata,
193198
*plan.required_columns.clone(),
199+
Some(mutation_build_info),
194200
true,
195201
)
196202
.await?
@@ -437,9 +443,13 @@ impl ExplainInterpreter {
437443
s_expr: &SExpr,
438444
metadata: &MetadataRef,
439445
required: ColumnSet,
446+
mutation_build_info: Option<MutationBuildInfo>,
440447
ignore_result: bool,
441448
) -> Result<Vec<DataBlock>> {
442449
let mut builder = PhysicalPlanBuilder::new(metadata.clone(), self.ctx.clone(), true);
450+
if let Some(build_info) = mutation_build_info {
451+
builder.set_mutation_build_info(build_info);
452+
}
443453
let plan = builder.build(s_expr, required).await?;
444454
let build_res = build_query_pipeline(&self.ctx, &[], &plan, ignore_result).await?;
445455

@@ -537,7 +547,7 @@ impl ExplainInterpreter {
537547
schema,
538548
mutation.metadata.clone(),
539549
)?;
540-
let plan = interpreter.build_physical_plan(&mutation, None).await?;
550+
let plan = interpreter.build_physical_plan(&mutation, true).await?;
541551
let root_fragment = Fragmenter::try_create(self.ctx.clone())?.build_fragment(&plan)?;
542552

543553
let mut fragments_actions = QueryFragmentsActions::create(self.ctx.clone());

0 commit comments

Comments
 (0)