Skip to content

Commit 0142622

Browse files
committed
more dict test cases
1 parent 9996215 commit 0142622

File tree

1 file changed

+35
-0
lines changed
  • datafusion/physical-expr/src/expressions

1 file changed

+35
-0
lines changed

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

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2833,6 +2833,41 @@ mod tests {
28332833
))
28342834
})?;
28352835

2836+
// Additional test: Dictionary deduplication with repeated keys
2837+
// This tests that multiple rows with the same key (pointing to the same value)
2838+
// are evaluated correctly
2839+
let dedup_case = DictionaryInListTestCase {
2840+
_name: "dictionary_deduplication",
2841+
dict_type: DataType::Dictionary(
2842+
Box::new(DataType::Int8),
2843+
Box::new(DataType::Utf8),
2844+
),
2845+
// Keys: [0, 1, 0, 1, null] - keys 0 and 1 are repeated
2846+
// This creates data: ["a", "d", "a", "d", null]
2847+
dict_keys: vec![Some(0), Some(1), Some(0), Some(1), None],
2848+
dict_values: Arc::new(StringArray::from(vec![Some("a"), Some("d")])),
2849+
list_values_no_null: vec![lit("a"), lit("b")],
2850+
list_values_with_null: vec![lit("a"), lit("b"), lit(ScalarValue::Utf8(None))],
2851+
// Test 1: a IN ("a", "b") → [true, false, true, false, null]
2852+
// Rows 0 and 2 both have key 0 → "a", so both are true
2853+
expected_1: vec![Some(true), Some(false), Some(true), Some(false), None],
2854+
// Test 2: a NOT IN ("a", "b") → [false, true, false, true, null]
2855+
expected_2: vec![Some(false), Some(true), Some(false), Some(true), None],
2856+
// Test 3: a IN ("a", "b", NULL) → [true, null, true, null, null]
2857+
// "d" becomes null due to NULL in list
2858+
expected_3: vec![Some(true), None, Some(true), None, None],
2859+
// Test 4: a NOT IN ("a", "b", NULL) → [false, null, false, null, null]
2860+
expected_4: vec![Some(false), None, Some(false), None, None],
2861+
dict_needle_test: None,
2862+
};
2863+
2864+
run_dictionary_in_list_test(dedup_case).map_err(|e| {
2865+
datafusion_common::DataFusionError::Execution(format!(
2866+
"Dictionary deduplication test failed: {}",
2867+
e
2868+
))
2869+
})?;
2870+
28362871
// Additional test for Float64 NaN in IN list
28372872
let dict_type =
28382873
DataType::Dictionary(Box::new(DataType::Int8), Box::new(DataType::Float64));

0 commit comments

Comments
 (0)