Skip to content

Commit 10d78d4

Browse files
committed
feat: enhance debug output in apply and apply_cmp functions for better traceability
1 parent 4fe0cb2 commit 10d78d4

File tree

2 files changed

+34
-61
lines changed

2 files changed

+34
-61
lines changed

datafusion/physical-expr-common/src/datum.rs

Lines changed: 33 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -35,88 +35,53 @@ pub fn apply(
3535
rhs: &ColumnarValue,
3636
f: impl Fn(&dyn Datum, &dyn Datum) -> Result<ArrayRef, ArrowError>,
3737
) -> Result<ColumnarValue> {
38+
println!("==> apply] lhs={:?}, rhs={:?}", lhs, rhs);
39+
3840
match (&lhs, &rhs) {
3941
(ColumnarValue::Array(left), ColumnarValue::Array(right)) => {
42+
println!(
43+
"==> apply array vs array => left_dt={:?}, right_dt={:?}",
44+
&lhs.data_type(),
45+
&rhs.data_type()
46+
);
4047
Ok(ColumnarValue::Array(f(&left.as_ref(), &right.as_ref())?))
4148
}
42-
(ColumnarValue::Scalar(left), ColumnarValue::Array(right)) => Ok(
43-
ColumnarValue::Array(f(&left.to_scalar()?, &right.as_ref())?),
44-
),
45-
(ColumnarValue::Array(left), ColumnarValue::Scalar(right)) => Ok(
46-
ColumnarValue::Array(f(&left.as_ref(), &right.to_scalar()?)?),
47-
),
49+
(ColumnarValue::Scalar(left), ColumnarValue::Array(right)) => {
50+
println!("==> apply scalar vs array");
51+
Ok(ColumnarValue::Array(f(
52+
&left.to_scalar()?,
53+
&right.as_ref(),
54+
)?))
55+
}
56+
(ColumnarValue::Array(left), ColumnarValue::Scalar(right)) => {
57+
println!("==> apply array vs scalar");
58+
Ok(ColumnarValue::Array(f(
59+
&left.as_ref(),
60+
&right.to_scalar()?,
61+
)?))
62+
}
4863
(ColumnarValue::Scalar(left), ColumnarValue::Scalar(right)) => {
64+
println!("==> apply scalar vs scalar");
4965
let array = f(&left.to_scalar()?, &right.to_scalar()?)?;
5066
let scalar = ScalarValue::try_from_array(array.as_ref(), 0)?;
5167
Ok(ColumnarValue::Scalar(scalar))
5268
}
5369
}
5470
}
5571

56-
/// Applies a binary [`Datum`] comparison kernel `f` to `lhs` and `rhs`
5772
pub fn apply_cmp(
5873
lhs: &ColumnarValue,
5974
rhs: &ColumnarValue,
6075
f: impl Fn(&dyn Datum, &dyn Datum) -> Result<BooleanArray, ArrowError>,
6176
) -> Result<ColumnarValue> {
6277
println!(
63-
"==> apply_cmp: lhs type={:?}, rhs type={:?}",
78+
"==> apply_cmp: lhs={:?}, rhs={:?}, lhs_dt={:?}, rhs_dt={:?}",
79+
lhs, // Prints the full ColumnarValue
80+
rhs, // This might show you e.g. 'DictionaryArray(...)' or 'Scalar(...)'
6481
lhs.data_type(),
6582
rhs.data_type()
6683
);
6784

68-
match (lhs, rhs) {
69-
// Array vs Array
70-
(ColumnarValue::Array(left_arr), ColumnarValue::Array(right_arr)) => {
71-
println!(
72-
"==> apply_cmp: array vs array => lhs.dt={:?}, rhs.dt={:?}",
73-
left_arr.data_type(),
74-
right_arr.data_type()
75-
);
76-
let res = f(&**left_arr, &**right_arr)?;
77-
Ok(ColumnarValue::Array(Arc::new(res)))
78-
}
79-
80-
// Scalar vs Array
81-
(ColumnarValue::Scalar(left_scalar), ColumnarValue::Array(right_arr)) => {
82-
println!(
83-
"==> apply_cmp: scalar vs array => lhs.scalar={:?}, rhs.dt={:?}",
84-
left_scalar,
85-
right_arr.data_type()
86-
);
87-
let left_datum = left_scalar.as_ref();
88-
let res = right_arr
89-
.iter()
90-
.map(|r| f(left_datum, &r))
91-
.collect::<Result<BooleanArray, _>>()?;
92-
Ok(ColumnarValue::Array(Arc::new(res)))
93-
}
94-
95-
// Array vs Scalar
96-
(ColumnarValue::Array(left_arr), ColumnarValue::Scalar(right_scalar)) => {
97-
println!(
98-
"==> apply_cmp: array vs scalar => lhs.dt={:?}, rhs.scalar={:?}",
99-
left_arr.data_type(),
100-
right_scalar
101-
);
102-
let right_datum = right_scalar.as_ref();
103-
let res = left_arr
104-
.iter()
105-
.map(|l| f(&l, right_datum))
106-
.collect::<Result<BooleanArray, _>>()?;
107-
Ok(ColumnarValue::Array(Arc::new(res)))
108-
}
109-
110-
// Scalar vs Scalar
111-
(ColumnarValue::Scalar(left_scalar), ColumnarValue::Scalar(right_scalar)) => {
112-
println!(
113-
"==> apply_cmp: scalar vs scalar => lhs.scalar={:?}, rhs.scalar={:?}",
114-
left_scalar, right_scalar
115-
);
116-
let res = f(left_scalar.as_ref(), right_scalar.as_ref())?;
117-
Ok(ColumnarValue::Scalar(Arc::new(res)))
118-
}
119-
}
12085
apply(lhs, rhs, |l, r| Ok(Arc::new(f(l, r)?)))
12186
}
12287

@@ -127,6 +92,14 @@ pub fn apply_cmp_for_nested(
12792
lhs: &ColumnarValue,
12893
rhs: &ColumnarValue,
12994
) -> Result<ColumnarValue> {
95+
println!(
96+
"==> apply_cmp_for_nested: op={:?}, lhs={:?}, rhs={:?}, lhs_dt={:?}, rhs_dt={:?}",
97+
op,
98+
lhs,
99+
rhs,
100+
lhs.data_type(),
101+
rhs.data_type()
102+
);
130103
if matches!(
131104
op,
132105
Operator::Eq

datafusion/physical-expr/src/expressions/binary.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -316,7 +316,7 @@ impl PhysicalExpr for BinaryExpr {
316316
},
317317
match &rhs {
318318
ColumnarValue::Scalar(s) =>
319-
format!("Scalar(type={:?}, value={:?})", s.get_type(), s),
319+
format!("Scalar(type={:?}, value={:?})", s.data_type(), s),
320320
_ => format!("{:?}", rhs),
321321
}
322322
);

0 commit comments

Comments
 (0)