Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions native-engine/datafusion-ext-plans/src/joins/test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -323,6 +323,7 @@ mod tests {
JoinSide::Right,
true,
None,
false,
)?)
}
BHJRightProbed => {
Expand All @@ -339,6 +340,7 @@ mod tests {
JoinSide::Left,
true,
None,
false,
)?)
}
SHJLeftProbed => Arc::new(BroadcastJoinExec::try_new(
Expand All @@ -350,6 +352,7 @@ mod tests {
JoinSide::Right,
false,
None,
false,
)?),
SHJRightProbed => Arc::new(BroadcastJoinExec::try_new(
schema,
Expand All @@ -360,6 +363,7 @@ mod tests {
JoinSide::Left,
false,
None,
false,
)?),
};
let columns = columns(&join.schema());
Expand Down Expand Up @@ -539,12 +543,12 @@ mod tests {
("a1", &vec![1, 1, 1, 1, 1]),
("b1", &vec![1, 2, 3, 4, 5]),
("c1", &vec![1, 2, 3, 4, 5]),
);
)?;
let right = build_table(
("a2", &vec![1, 1, 1, 1, 1, 1, 1]),
("b2", &vec![1, 2, 3, 4, 5, 6, 7]),
("c2", &vec![1, 2, 3, 4, 5, 6, 7]),
);
)?;
let on: JoinOn = vec![(
Arc::new(Column::new_with_schema("a1", &left.schema())?),
Arc::new(Column::new_with_schema("a2", &right.schema())?),
Expand Down
87 changes: 56 additions & 31 deletions native-engine/datafusion-ext-plans/src/orc_exec.rs
Original file line number Diff line number Diff line change
Expand Up @@ -518,7 +518,12 @@ fn convert_expr_to_orc(
}

if predicates.len() == 1 {
return Some(predicates.into_iter().next().unwrap());
return Some(
predicates
.into_iter()
.next()
.expect("Expected non-empty predicates"),
);
}

return Some(Predicate::and(predicates));
Expand All @@ -534,7 +539,12 @@ fn convert_expr_to_orc(
}

if predicates.len() == 1 {
return Some(predicates.into_iter().next().unwrap());
return Some(
predicates
.into_iter()
.next()
.expect("Expected non-empty predicates"),
);
}

return Some(Predicate::or(predicates));
Expand All @@ -551,7 +561,12 @@ fn convert_expr_to_orc(
}

if predicates.len() == 1 {
return Some(predicates.into_iter().next().unwrap());
return Some(
predicates
.into_iter()
.next()
.expect("Expected non-empty predicates"),
);
}

return Some(Predicate::and(predicates));
Expand All @@ -567,7 +582,12 @@ fn convert_expr_to_orc(
}

if predicates.len() == 1 {
return Some(predicates.into_iter().next().unwrap());
return Some(
predicates
.into_iter()
.next()
.expect("Expected non-empty predicates"),
);
}

return Some(Predicate::or(predicates));
Expand Down Expand Up @@ -803,7 +823,7 @@ mod tests {

let result = convert_predicate_to_orc(Some(expr), &schema);
assert!(result.is_some());
let predicate = result.unwrap();
let predicate = result.expect("Expected valid ORC predicate");
assert_eq!(
format!("{:?}", predicate),
"Comparison { column: \"id\", op: Equal, value: Int32(Some(42)) }"
Expand All @@ -819,7 +839,7 @@ mod tests {

let result = convert_predicate_to_orc(Some(expr), &schema);
assert!(result.is_some());
let predicate = result.unwrap();
let predicate = result.expect("Expected valid ORC predicate");
assert_eq!(
format!("{:?}", predicate),
"Comparison { column: \"name\", op: NotEqual, value: Utf8(Some(\"test\")) }"
Expand Down Expand Up @@ -879,7 +899,7 @@ mod tests {
let expr = Arc::new(BinaryExpr::new(lit.clone(), Operator::Lt, col.clone()));
let result = convert_predicate_to_orc(Some(expr), &schema);
assert!(result.is_some());
let predicate = result.unwrap();
let predicate = result.expect("Expected valid ORC predicate");
let debug_str = format!("{:?}", predicate);
// Should be GreaterThan, not LessThan
assert!(
Expand All @@ -892,7 +912,7 @@ mod tests {
let expr = Arc::new(BinaryExpr::new(lit.clone(), Operator::LtEq, col.clone()));
let result = convert_predicate_to_orc(Some(expr), &schema);
assert!(result.is_some());
let predicate = result.unwrap();
let predicate = result.expect("Expected valid ORC predicate");
let debug_str = format!("{:?}", predicate);
assert!(
debug_str.contains("GreaterThanOrEqual")
Expand All @@ -906,7 +926,7 @@ mod tests {
let expr = Arc::new(BinaryExpr::new(lit.clone(), Operator::Gt, col.clone()));
let result = convert_predicate_to_orc(Some(expr), &schema);
assert!(result.is_some());
let predicate = result.unwrap();
let predicate = result.expect("Expected valid ORC predicate");
let debug_str = format!("{:?}", predicate);
assert!(
debug_str.contains("LessThan") || debug_str.contains("Lt"),
Expand All @@ -918,7 +938,7 @@ mod tests {
let expr = Arc::new(BinaryExpr::new(lit, Operator::GtEq, col));
let result = convert_predicate_to_orc(Some(expr), &schema);
assert!(result.is_some());
let predicate = result.unwrap();
let predicate = result.expect("Expected valid ORC predicate");
let debug_str = format!("{:?}", predicate);
assert!(
debug_str.contains("LessThanOrEqual")
Expand All @@ -937,7 +957,7 @@ mod tests {

let result = convert_predicate_to_orc(Some(expr), &schema);
assert!(result.is_some());
let predicate = result.unwrap();
let predicate = result.expect("Expected valid ORC predicate");
assert_eq!(format!("{:?}", predicate), "IsNull { column: \"name\" }");
}

Expand All @@ -949,7 +969,7 @@ mod tests {

let result = convert_predicate_to_orc(Some(expr), &schema);
assert!(result.is_some());
let predicate = result.unwrap();
let predicate = result.expect("Expected valid ORC predicate");
assert_eq!(
format!("{:?}", predicate),
"Not(IsNull { column: \"age\" })"
Expand All @@ -966,7 +986,7 @@ mod tests {

let result = convert_predicate_to_orc(Some(not_expr), &schema);
assert!(result.is_some());
let predicate = result.unwrap();
let predicate = result.expect("Expected valid ORC predicate");
assert!(format!("{:?}", predicate).starts_with("Not(Comparison"));
}

Expand All @@ -986,7 +1006,7 @@ mod tests {

let result = convert_predicate_to_orc(Some(expr), &schema);
assert!(result.is_some());
let predicate = result.unwrap();
let predicate = result.expect("Expected valid ORC predicate");
// IN list should be converted to OR of equality predicates
assert!(format!("{:?}", predicate).starts_with("Or(["));
}
Expand All @@ -1005,7 +1025,7 @@ mod tests {

let result = convert_predicate_to_orc(Some(expr), &schema);
assert!(result.is_some());
let predicate = result.unwrap();
let predicate = result.expect("Expected valid ORC predicate");
// NOT IN should be converted to NOT(OR(...))
assert!(format!("{:?}", predicate).starts_with("Not(Or(["));
}
Expand All @@ -1026,7 +1046,7 @@ mod tests {

let result = convert_predicate_to_orc(Some(and_expr), &schema);
assert!(result.is_some());
let predicate = result.unwrap();
let predicate = result.expect("Expected valid ORC predicate");
assert!(format!("{:?}", predicate).starts_with("And(["));
}

Expand All @@ -1052,7 +1072,7 @@ mod tests {

let result = convert_predicate_to_orc(Some(and2), &schema);
assert!(result.is_some());
let predicate = result.unwrap();
let predicate = result.expect("Expected valid ORC predicate");
let debug_str = format!("{:?}", predicate);
// Should be flattened to And([cond1, cond2, cond3])
assert!(debug_str.starts_with("And(["));
Expand All @@ -1076,7 +1096,7 @@ mod tests {

let result = convert_predicate_to_orc(Some(or_expr), &schema);
assert!(result.is_some());
let predicate = result.unwrap();
let predicate = result.expect("Expected valid ORC predicate");
assert!(format!("{:?}", predicate).starts_with("Or(["));
}

Expand All @@ -1102,7 +1122,7 @@ mod tests {

let result = convert_predicate_to_orc(Some(or2), &schema);
assert!(result.is_some());
let predicate = result.unwrap();
let predicate = result.expect("Expected valid ORC predicate");
let debug_str = format!("{:?}", predicate);
// Should be flattened to Or([cond1, cond2, cond3])
assert!(debug_str.starts_with("Or(["));
Expand Down Expand Up @@ -1130,7 +1150,7 @@ mod tests {

let result = convert_predicate_to_orc(Some(and_expr), &schema);
assert!(result.is_some());
let predicate = result.unwrap();
let predicate = result.expect("Expected valid ORC predicate");
let debug_str = format!("{:?}", predicate);
// Should have And at top level
assert!(
Expand Down Expand Up @@ -1176,7 +1196,7 @@ mod tests {

let result = convert_predicate_to_orc(Some(and3), &schema);
assert!(result.is_some());
let predicate = result.unwrap();
let predicate = result.expect("Expected valid ORC predicate");
let debug_str = format!("{:?}", predicate);
// Should be flattened to And([cond1, cond2, cond3, cond4])
assert!(debug_str.starts_with("And(["));
Expand Down Expand Up @@ -1311,7 +1331,7 @@ mod tests {

let result = convert_predicate_to_orc(Some(expr), &schema);
assert!(result.is_some());
let predicate = result.unwrap();
let predicate = result.expect("Expected valid ORC predicate");
let debug_str = format!("{:?}", predicate);
// Should be converted to OR of equality predicates
// NULL values should be included (even though they won't match)
Expand All @@ -1336,7 +1356,7 @@ mod tests {

let result = convert_predicate_to_orc(Some(expr), &schema);
assert!(result.is_some());
let predicate = result.unwrap();
let predicate = result.expect("Expected valid ORC predicate");
let debug_str = format!("{:?}", predicate);
// Should be NOT(OR(...))
assert!(debug_str.starts_with("Not(Or(["));
Expand Down Expand Up @@ -1381,7 +1401,7 @@ mod tests {

let result = convert_predicate_to_orc(Some(and_expr), &schema);
assert!(result.is_some());
let predicate = result.unwrap();
let predicate = result.expect("Expected valid ORC predicate");
let debug_str = format!("{:?}", predicate);
// Should be flattened to And([...])
assert!(debug_str.contains("And"));
Expand All @@ -1404,7 +1424,7 @@ mod tests {

let result = convert_predicate_to_orc(Some(or_expr), &schema);
assert!(result.is_some());
let predicate = result.unwrap();
let predicate = result.expect("Expected valid ORC predicate");
let debug_str = format!("{:?}", predicate);
// Should be flattened to Or([...])
assert!(debug_str.contains("Or"));
Expand All @@ -1423,7 +1443,12 @@ mod tests {
];

for (col_name, null_value) in test_cases {
let col = Arc::new(Column::new(col_name, schema.index_of(col_name).unwrap()));
let col = Arc::new(Column::new(
col_name,
schema
.index_of(col_name)
.expect(&format!("Column '{}' not found", col_name)),
));
let null_lit = Arc::new(Literal::new(null_value));
let expr = Arc::new(BinaryExpr::new(col, Operator::Eq, null_lit));

Expand Down Expand Up @@ -1472,7 +1497,7 @@ mod tests {
"WHERE false should produce a predicate even with empty schema"
);

let predicate = result.unwrap();
let predicate = result.expect("Expected valid ORC predicate");
let debug_str = format!("{:?}", predicate);

// Should use the synthetic column name
Expand Down Expand Up @@ -1517,7 +1542,7 @@ mod tests {
let result = convert_predicate_to_orc(Some(sc_and_expr), &schema);
assert!(result.is_some(), "SCAndExpr should convert to predicate");

let predicate = result.unwrap();
let predicate = result.expect("Expected valid ORC predicate");
let debug_str = format!("{:?}", predicate);
// Should be flattened to And([...])
assert!(
Expand Down Expand Up @@ -1545,7 +1570,7 @@ mod tests {
let result = convert_predicate_to_orc(Some(sc_or_expr), &schema);
assert!(result.is_some(), "SCOrExpr should convert to predicate");

let predicate = result.unwrap();
let predicate = result.expect("Expected valid ORC predicate");
let debug_str = format!("{:?}", predicate);
// Should be flattened to Or([...])
assert!(
Expand Down Expand Up @@ -1582,7 +1607,7 @@ mod tests {
"Nested SCAndExpr/SCOrExpr should convert to predicate"
);

let predicate = result.unwrap();
let predicate = result.expect("Expected valid ORC predicate");
let debug_str = format!("{:?}", predicate);
// Should have And at top level with Or inside
assert!(
Expand Down Expand Up @@ -1624,7 +1649,7 @@ mod tests {
"Mixed BinaryExpr/SCAndExpr should convert to predicate"
);

let predicate = result.unwrap();
let predicate = result.expect("Expected valid ORC predicate");
let debug_str = format!("{:?}", predicate);
// Should all be flattened to And([...])
assert!(
Expand Down