Remove bool args in optimize_plan

This commit is contained in:
김선우
2024-12-23 04:47:05 +09:00
parent 6f235e6f6c
commit 82c127b7a3

View File

@@ -9,58 +9,58 @@ use super::plan::{
Direction, IterationDirection, Plan, Search, SourceOperator,
};
pub fn optimize_select_plan(plan: Plan) -> Result<Plan> {
optimize_plan(plan, true, true, true)
}
pub fn optimize_delete_plan(plan: Plan) -> Result<Plan> {
optimize_plan(plan, false, true, false)
}
/**
* Make a few passes over the plan to optimize it.
* TODO: these could probably be done in less passes,
* but having them separate makes them easier to understand
*/
fn optimize_plan(
mut select_plan: Plan,
optimize_push_predicates: bool,
optimize_use_indexes: bool,
optimize_eliminate_unnecessary_order_by: bool,
) -> Result<Plan> {
eliminate_between(&mut select_plan.source, &mut select_plan.where_clause)?;
pub fn optimize_select_plan(mut plan: Plan) -> Result<Plan> {
eliminate_between(&mut plan.source, &mut plan.where_clause)?;
if let ConstantConditionEliminationResult::ImpossibleCondition =
eliminate_constants(&mut select_plan.source, &mut select_plan.where_clause)?
eliminate_constants(&mut plan.source, &mut plan.where_clause)?
{
select_plan.contains_constant_false_condition = true;
return Ok(select_plan);
plan.contains_constant_false_condition = true;
return Ok(plan);
}
if optimize_push_predicates {
push_predicates(
&mut select_plan.source,
&mut select_plan.where_clause,
&select_plan.referenced_tables,
)?;
push_predicates(
&mut plan.source,
&mut plan.where_clause,
&plan.referenced_tables,
)?;
use_indexes(
&mut plan.source,
&plan.referenced_tables,
&plan.available_indexes,
)?;
eliminate_unnecessary_orderby(
&mut plan.source,
&mut plan.order_by,
&plan.referenced_tables,
&plan.available_indexes,
)?;
Ok(plan)
}
pub fn optimize_delete_plan(mut plan: Plan) -> Result<Plan> {
eliminate_between(&mut plan.source, &mut plan.where_clause)?;
if let ConstantConditionEliminationResult::ImpossibleCondition =
eliminate_constants(&mut plan.source, &mut plan.where_clause)?
{
plan.contains_constant_false_condition = true;
return Ok(plan);
}
if optimize_use_indexes {
use_indexes(
&mut select_plan.source,
&select_plan.referenced_tables,
&select_plan.available_indexes,
)?;
}
use_indexes(
&mut plan.source,
&plan.referenced_tables,
&plan.available_indexes,
)?;
if optimize_eliminate_unnecessary_order_by {
eliminate_unnecessary_orderby(
&mut select_plan.source,
&mut select_plan.order_by,
&select_plan.referenced_tables,
&select_plan.available_indexes,
)?;
}
Ok(select_plan)
Ok(plan)
}
fn _operator_is_already_ordered_by(