@@ -33,6 +33,7 @@ use databend_common_pipeline_core::processors::PlanProfile;
33
33
use databend_common_pipeline_core:: ExecutionInfo ;
34
34
use databend_common_sql:: binder:: ExplainConfig ;
35
35
use databend_common_sql:: executor:: format_partial_tree;
36
+ use databend_common_sql:: executor:: MutationBuildInfo ;
36
37
use databend_common_sql:: optimizer:: ColumnSet ;
37
38
use databend_common_sql:: plans:: Mutation ;
38
39
use databend_common_sql:: BindContext ;
@@ -46,6 +47,7 @@ use serde_json;
46
47
use super :: InsertMultiTableInterpreter ;
47
48
use super :: InterpreterFactory ;
48
49
use crate :: interpreters:: interpreter:: on_execution_finished;
50
+ use crate :: interpreters:: interpreter_mutation:: build_mutation_info;
49
51
use crate :: interpreters:: interpreter_mutation:: MutationInterpreter ;
50
52
use crate :: interpreters:: Interpreter ;
51
53
use crate :: pipelines:: executor:: ExecutorSettings ;
@@ -146,7 +148,7 @@ impl Interpreter for ExplainInterpreter {
146
148
schema. clone ( ) ,
147
149
metadata. clone ( ) ,
148
150
) ?;
149
- let plan = interpreter. build_physical_plan ( & mutation, None ) . await ?;
151
+ let plan = interpreter. build_physical_plan ( & mutation, true ) . await ?;
150
152
self . explain_physical_plan ( & plan, metadata, & None ) . await ?
151
153
}
152
154
_ => self . explain_plan ( & self . plan ) ?,
@@ -181,16 +183,20 @@ impl Interpreter for ExplainInterpreter {
181
183
s_expr,
182
184
metadata,
183
185
bind_context. column_set ( ) ,
186
+ None ,
184
187
* ignore_result,
185
188
)
186
189
. await ?
187
190
}
188
191
Plan :: DataMutation { s_expr, .. } => {
189
192
let plan: Mutation = s_expr. plan ( ) . clone ( ) . try_into ( ) ?;
193
+ let mutation_build_info =
194
+ build_mutation_info ( self . ctx . clone ( ) , & plan, true ) . await ?;
190
195
self . explain_analyze (
191
196
s_expr. child ( 0 ) ?,
192
197
& plan. metadata ,
193
198
* plan. required_columns . clone ( ) ,
199
+ Some ( mutation_build_info) ,
194
200
true ,
195
201
)
196
202
. await ?
@@ -437,9 +443,13 @@ impl ExplainInterpreter {
437
443
s_expr : & SExpr ,
438
444
metadata : & MetadataRef ,
439
445
required : ColumnSet ,
446
+ mutation_build_info : Option < MutationBuildInfo > ,
440
447
ignore_result : bool ,
441
448
) -> Result < Vec < DataBlock > > {
442
449
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
+ }
443
453
let plan = builder. build ( s_expr, required) . await ?;
444
454
let build_res = build_query_pipeline ( & self . ctx , & [ ] , & plan, ignore_result) . await ?;
445
455
@@ -537,7 +547,7 @@ impl ExplainInterpreter {
537
547
schema,
538
548
mutation. metadata . clone ( ) ,
539
549
) ?;
540
- let plan = interpreter. build_physical_plan ( & mutation, None ) . await ?;
550
+ let plan = interpreter. build_physical_plan ( & mutation, true ) . await ?;
541
551
let root_fragment = Fragmenter :: try_create ( self . ctx . clone ( ) ) ?. build_fragment ( & plan) ?;
542
552
543
553
let mut fragments_actions = QueryFragmentsActions :: create ( self . ctx . clone ( ) ) ;
0 commit comments