From a8eab158ad6d5bf9d319a6b9fad73cdcfa4361cf Mon Sep 17 00:00:00 2001 From: Andrew Lamb Date: Tue, 26 Sep 2023 07:36:51 -0400 Subject: [PATCH 1/2] Minor: add doc comments to `ExtractEquijoinPredicate` --- .../optimizer/src/extract_equijoin_predicate.rs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/datafusion/optimizer/src/extract_equijoin_predicate.rs b/datafusion/optimizer/src/extract_equijoin_predicate.rs index 20b9c629712c6..9affee2684320 100644 --- a/datafusion/optimizer/src/extract_equijoin_predicate.rs +++ b/datafusion/optimizer/src/extract_equijoin_predicate.rs @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -//! Optimizer rule to extract equijoin expr from filter +//! [`ExtractEquijoinPredicate`] rule that extracts equijoin predicates use crate::optimizer::ApplyOrder; use crate::utils::split_conjunction; use crate::{OptimizerConfig, OptimizerRule}; @@ -28,7 +28,17 @@ use std::sync::Arc; // equijoin predicate type EquijoinPredicate = (Expr, Expr); -/// Optimization rule that extract equijoin expr from the filter +/// Optimizer that splits conjunctive join predicates into equijoin +/// predicates and filter (other) predicates. +/// +/// Join algorithms are often highly optimized for equality predicates such as `x = y`, +/// often called `equijoin` predicates, so it is important to locate such predicates +/// and treat them specially. +/// +/// For example, `SELECT ... FROM A JOIN B ON (A.x = B.y AND B.z > 50)` +/// has one equijoin predicate (`A.x = B.y`) and one filter predicate (`B.z > 50`). +/// See [find_valid_equijoin_key_pair] for more information on what predicates +/// are considered equijoins. #[derive(Default)] pub struct ExtractEquijoinPredicate; From 9e9ace9d51697543ebec43c025db5d62aa3f5aa0 Mon Sep 17 00:00:00 2001 From: Andrew Lamb Date: Wed, 27 Sep 2023 07:05:09 -0400 Subject: [PATCH 2/2] Update datafusion/optimizer/src/extract_equijoin_predicate.rs Co-authored-by: Liang-Chi Hsieh --- datafusion/optimizer/src/extract_equijoin_predicate.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/datafusion/optimizer/src/extract_equijoin_predicate.rs b/datafusion/optimizer/src/extract_equijoin_predicate.rs index 9affee2684320..e328eeeb00a15 100644 --- a/datafusion/optimizer/src/extract_equijoin_predicate.rs +++ b/datafusion/optimizer/src/extract_equijoin_predicate.rs @@ -29,7 +29,7 @@ use std::sync::Arc; type EquijoinPredicate = (Expr, Expr); /// Optimizer that splits conjunctive join predicates into equijoin -/// predicates and filter (other) predicates. +/// predicates and (other) filter predicates. /// /// Join algorithms are often highly optimized for equality predicates such as `x = y`, /// often called `equijoin` predicates, so it is important to locate such predicates