Skip to content

Commit 34066c9

Browse files
committed
add setting
1 parent 974beb6 commit 34066c9

File tree

4 files changed

+26
-1
lines changed

4 files changed

+26
-1
lines changed

src/query/settings/src/settings_default.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -408,6 +408,13 @@ impl DefaultSettings {
408408
scope: SettingScope::Both,
409409
range: Some(SettingRange::Numeric(0..=1)),
410410
}),
411+
("enable_experimental_common_subexpression_elimination", DefaultSettingValue {
412+
value: UserSettingValue::UInt64(1),
413+
desc: "Enables experimental common subexpression elimination optimization.",
414+
mode: SettingMode::Both,
415+
scope: SettingScope::Both,
416+
range: Some(SettingRange::Numeric(0..=1)),
417+
}),
411418
("enable_dio", DefaultSettingValue {
412419
value: UserSettingValue::UInt64(1),
413420
desc: "Enables Direct IO.",

src/query/settings/src/settings_getter_setter.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -342,6 +342,10 @@ impl Settings {
342342
Ok(self.try_get_u64("enable_cbo")? != 0)
343343
}
344344

345+
pub fn get_enable_experimental_common_subexpression_elimination(&self) -> Result<bool> {
346+
Ok(self.try_get_u64("enable_experimental_common_subexpression_elimination")? != 0)
347+
}
348+
345349
pub fn get_enable_dio(&self) -> Result<bool> {
346350
Ok(self.try_get_u64("enable_dio")? != 0)
347351
}

src/query/sql/src/planner/optimizer/optimizer.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,10 @@ pub async fn optimize_query(opt_ctx: Arc<OptimizerContext>, s_expr: SExpr) -> Re
263263
RuleID::SplitAggregate,
264264
]))
265265
// 10. Apply CSE optimization to reduce redundant computations
266-
.add(CommonSubexpressionOptimizer::new(opt_ctx.clone()))
266+
.add_if(
267+
opt_ctx.get_enable_experimental_common_subexpression_elimination(),
268+
CommonSubexpressionOptimizer::new(opt_ctx.clone()),
269+
)
267270
// 11. Apply DPhyp algorithm for cost-based join reordering
268271
.add(DPhpyOptimizer::new(opt_ctx.clone()))
269272
// 12. After join reorder, Convert some single join to inner join.

src/query/sql/src/planner/optimizer/optimizer_context.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ pub struct OptimizerContext {
3636
enable_distributed_optimization: RwLock<bool>,
3737
enable_join_reorder: RwLock<bool>,
3838
enable_dphyp: RwLock<bool>,
39+
enable_experimental_common_subexpression_elimination: RwLock<bool>,
3940
max_push_down_limit: RwLock<usize>,
4041
planning_agg_index: RwLock<bool>,
4142
#[educe(Debug(ignore))]
@@ -59,6 +60,7 @@ impl OptimizerContext {
5960
enable_distributed_optimization: RwLock::new(false),
6061
enable_join_reorder: RwLock::new(true),
6162
enable_dphyp: RwLock::new(true),
63+
enable_experimental_common_subexpression_elimination: RwLock::new(true),
6264
max_push_down_limit: RwLock::new(10000),
6365
sample_executor: RwLock::new(None),
6466
planning_agg_index: RwLock::new(false),
@@ -70,6 +72,9 @@ impl OptimizerContext {
7072
pub fn with_settings(self: Arc<Self>, settings: &Settings) -> Result<Arc<Self>> {
7173
self.set_enable_join_reorder(unsafe { !settings.get_disable_join_reorder()? });
7274
*self.enable_dphyp.write() = settings.get_enable_dphyp()?;
75+
*self
76+
.enable_experimental_common_subexpression_elimination
77+
.write() = settings.get_enable_experimental_common_subexpression_elimination()?;
7378
*self.max_push_down_limit.write() = settings.get_max_push_down_limit()?;
7479
*self.enable_trace.write() = settings.get_enable_optimizer_trace()?;
7580

@@ -106,6 +111,12 @@ impl OptimizerContext {
106111
*self.enable_dphyp.read()
107112
}
108113

114+
pub fn get_enable_experimental_common_subexpression_elimination(&self) -> bool {
115+
*self
116+
.enable_experimental_common_subexpression_elimination
117+
.read()
118+
}
119+
109120
pub fn set_sample_executor(
110121
self: &Arc<Self>,
111122
sample_executor: Option<Arc<dyn QueryExecutor>>,

0 commit comments

Comments
 (0)