fix comparison of dictionaries with different values arrays (#332) (#333)
diff --git a/arrow/src/array/ord.rs b/arrow/src/array/ord.rs
index efd68b1..c2c94f5 100644
--- a/arrow/src/array/ord.rs
+++ b/arrow/src/array/ord.rs
@@ -94,7 +94,7 @@
let right_keys = right.keys_array();
let left_values = StringArray::from(left.values().data().clone());
- let right_values = StringArray::from(left.values().data().clone());
+ let right_values = StringArray::from(right.values().data().clone());
Box::new(move |i: usize, j: usize| {
let key_left = left_keys.value(i).to_usize().unwrap();
@@ -222,7 +222,7 @@
return Err(ArrowError::InvalidArgumentError(format!(
"Dictionaries do not support keys of type {:?}",
lhs
- )))
+ )));
}
}
}
@@ -230,7 +230,7 @@
return Err(ArrowError::InvalidArgumentError(format!(
"The data type type {:?} has no natural order",
lhs
- )))
+ )));
}
})
}
@@ -307,4 +307,19 @@
assert_eq!(Ordering::Greater, (cmp)(2, 3));
Ok(())
}
+
+ #[test]
+ fn test_multiple_dict() -> Result<()> {
+ let d1 = vec!["a", "b", "c", "d"];
+ let a1 = DictionaryArray::<Int16Type>::from_iter(d1.into_iter());
+ let d2 = vec!["e", "f", "g", "a"];
+ let a2 = DictionaryArray::<Int16Type>::from_iter(d2.into_iter());
+
+ let cmp = build_compare(&a1, &a2)?;
+
+ assert_eq!(Ordering::Less, (cmp)(0, 0));
+ assert_eq!(Ordering::Equal, (cmp)(0, 3));
+ assert_eq!(Ordering::Greater, (cmp)(1, 3));
+ Ok(())
+ }
}