diff --git a/optd-datafusion-bridge/src/lib.rs b/optd-datafusion-bridge/src/lib.rs index 4bea295d..e6413653 100644 --- a/optd-datafusion-bridge/src/lib.rs +++ b/optd-datafusion-bridge/src/lib.rs @@ -233,6 +233,16 @@ impl OptdQueryPlanner { if optimizer.is_heuristic_enabled() { optd_rel = optimizer.heuristic_optimize(optd_rel); + if let Some(explains) = &mut explains { + explains.push(StringifiedPlan::new( + PlanType::OptimizedLogicalPlan { + optimizer_name: "optd-heuristic".to_string(), + }, + PlanNode::from_rel_node(optd_rel.clone()) + .unwrap() + .explain_to_string(None), + )) + } } let (group_id, optimized_rel, meta) = optimizer.cascades_optimize(optd_rel)?; diff --git a/optd-sqlplannertest/src/lib.rs b/optd-sqlplannertest/src/lib.rs index 2dbd6f54..d69ca31d 100644 --- a/optd-sqlplannertest/src/lib.rs +++ b/optd-sqlplannertest/src/lib.rs @@ -163,6 +163,16 @@ impl DatafusionDBMS { .map(|x| &x[1]) .unwrap() )?; + } else if subtask == "logical_optd_heuristic" { + writeln!( + r, + "{}", + result + .iter() + .find(|x| x[0] == "logical_plan after optd-heuristic") + .map(|x| &x[1]) + .unwrap() + )?; } else if subtask == "logical_optd" { writeln!( r,