Skip to content

Commit b0bd899

Browse files
authored
Encapsulate fields of EquivalenceGroup (#14039)
1 parent 3887087 commit b0bd899

File tree

4 files changed

+27
-15
lines changed

4 files changed

+27
-15
lines changed

datafusion/core/tests/fuzz_cases/equivalence/utils.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ fn add_equal_conditions_test() -> Result<()> {
179179
// This new entry is redundant, size shouldn't increase
180180
eq_properties.add_equal_conditions(&col_b_expr, &col_a_expr)?;
181181
assert_eq!(eq_properties.eq_group().len(), 1);
182-
let eq_groups = &eq_properties.eq_group().classes[0];
182+
let eq_groups = eq_properties.eq_group().iter().next().unwrap();
183183
assert_eq!(eq_groups.len(), 2);
184184
assert!(eq_groups.contains(&col_a_expr));
185185
assert!(eq_groups.contains(&col_b_expr));
@@ -188,7 +188,7 @@ fn add_equal_conditions_test() -> Result<()> {
188188
// however there shouldn't be any new equivalence class
189189
eq_properties.add_equal_conditions(&col_b_expr, &col_c_expr)?;
190190
assert_eq!(eq_properties.eq_group().len(), 1);
191-
let eq_groups = &eq_properties.eq_group().classes[0];
191+
let eq_groups = eq_properties.eq_group().iter().next().unwrap();
192192
assert_eq!(eq_groups.len(), 3);
193193
assert!(eq_groups.contains(&col_a_expr));
194194
assert!(eq_groups.contains(&col_b_expr));
@@ -202,7 +202,7 @@ fn add_equal_conditions_test() -> Result<()> {
202202
// Hence equivalent class count should decrease from 2 to 1.
203203
eq_properties.add_equal_conditions(&col_x_expr, &col_a_expr)?;
204204
assert_eq!(eq_properties.eq_group().len(), 1);
205-
let eq_groups = &eq_properties.eq_group().classes[0];
205+
let eq_groups = eq_properties.eq_group().iter().next().unwrap();
206206
assert_eq!(eq_groups.len(), 5);
207207
assert!(eq_groups.contains(&col_a_expr));
208208
assert!(eq_groups.contains(&col_b_expr));

datafusion/physical-expr/src/equivalence/class.rs

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,12 @@ use crate::{
2020
expressions::Column, LexOrdering, LexRequirement, PhysicalExpr, PhysicalExprRef,
2121
PhysicalSortExpr, PhysicalSortRequirement,
2222
};
23-
use std::fmt::Display;
24-
use std::sync::Arc;
25-
2623
use datafusion_common::tree_node::{Transformed, TransformedResult, TreeNode};
2724
use datafusion_common::{JoinType, ScalarValue};
2825
use datafusion_physical_expr_common::physical_expr::format_physical_expr_list;
26+
use std::fmt::Display;
27+
use std::sync::Arc;
28+
use std::vec::IntoIter;
2929

3030
use indexmap::{IndexMap, IndexSet};
3131

@@ -323,11 +323,10 @@ impl Display for EquivalenceClass {
323323
}
324324
}
325325

326-
/// An `EquivalenceGroup` is a collection of `EquivalenceClass`es where each
327-
/// class represents a distinct equivalence class in a relation.
326+
/// A collection of distinct `EquivalenceClass`es
328327
#[derive(Debug, Clone)]
329328
pub struct EquivalenceGroup {
330-
pub classes: Vec<EquivalenceClass>,
329+
classes: Vec<EquivalenceClass>,
331330
}
332331

333332
impl EquivalenceGroup {
@@ -717,6 +716,20 @@ impl EquivalenceGroup {
717716
.zip(right_children)
718717
.all(|(left_child, right_child)| self.exprs_equal(left_child, right_child))
719718
}
719+
720+
/// Return the inner classes of this equivalence group.
721+
pub fn into_inner(self) -> Vec<EquivalenceClass> {
722+
self.classes
723+
}
724+
}
725+
726+
impl IntoIterator for EquivalenceGroup {
727+
type Item = EquivalenceClass;
728+
type IntoIter = IntoIter<EquivalenceClass>;
729+
730+
fn into_iter(self) -> Self::IntoIter {
731+
self.classes.into_iter()
732+
}
720733
}
721734

722735
impl Display for EquivalenceGroup {

datafusion/physical-expr/src/equivalence/mod.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,7 @@ mod tests {
254254
// This new entry is redundant, size shouldn't increase
255255
eq_properties.add_equal_conditions(&col_b_expr, &col_a_expr)?;
256256
assert_eq!(eq_properties.eq_group().len(), 1);
257-
let eq_groups = &eq_properties.eq_group().classes[0];
257+
let eq_groups = eq_properties.eq_group().iter().next().unwrap();
258258
assert_eq!(eq_groups.len(), 2);
259259
assert!(eq_groups.contains(&col_a_expr));
260260
assert!(eq_groups.contains(&col_b_expr));
@@ -263,7 +263,7 @@ mod tests {
263263
// however there shouldn't be any new equivalence class
264264
eq_properties.add_equal_conditions(&col_b_expr, &col_c_expr)?;
265265
assert_eq!(eq_properties.eq_group().len(), 1);
266-
let eq_groups = &eq_properties.eq_group().classes[0];
266+
let eq_groups = eq_properties.eq_group().iter().next().unwrap();
267267
assert_eq!(eq_groups.len(), 3);
268268
assert!(eq_groups.contains(&col_a_expr));
269269
assert!(eq_groups.contains(&col_b_expr));
@@ -277,7 +277,7 @@ mod tests {
277277
// Hence equivalent class count should decrease from 2 to 1.
278278
eq_properties.add_equal_conditions(&col_x_expr, &col_a_expr)?;
279279
assert_eq!(eq_properties.eq_group().len(), 1);
280-
let eq_groups = &eq_properties.eq_group().classes[0];
280+
let eq_groups = eq_properties.eq_group().iter().next().unwrap();
281281
assert_eq!(eq_groups.len(), 5);
282282
assert!(eq_groups.contains(&col_a_expr));
283283
assert!(eq_groups.contains(&col_b_expr));

datafusion/physical-expr/src/equivalence/properties.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -338,7 +338,6 @@ impl EquivalenceProperties {
338338
let normalized_expr = self.eq_group().normalize_expr(Arc::clone(expr));
339339
let eq_class = self
340340
.eq_group
341-
.classes
342341
.iter()
343342
.find_map(|class| {
344343
class
@@ -1234,7 +1233,7 @@ impl EquivalenceProperties {
12341233

12351234
// Rewrite equivalence classes according to the new schema:
12361235
let mut eq_classes = vec![];
1237-
for eq_class in self.eq_group.classes {
1236+
for eq_class in self.eq_group {
12381237
let new_eq_exprs = eq_class
12391238
.into_vec()
12401239
.into_iter()
@@ -2315,7 +2314,7 @@ mod tests {
23152314

23162315
// At the output a1=a2=a3=a4
23172316
assert_eq!(out_properties.eq_group().len(), 1);
2318-
let eq_class = &out_properties.eq_group().classes[0];
2317+
let eq_class = out_properties.eq_group().iter().next().unwrap();
23192318
assert_eq!(eq_class.len(), 4);
23202319
assert!(eq_class.contains(col_a1));
23212320
assert!(eq_class.contains(col_a2));

0 commit comments

Comments
 (0)