Skip to content

Commit

Permalink
Added support for Null inputs and corrected output for empty inputs
Browse files Browse the repository at this point in the history
  • Loading branch information
Spaarsh committed Feb 5, 2025
1 parent 0d15f9c commit a729942
Showing 1 changed file with 14 additions and 14 deletions.
28 changes: 14 additions & 14 deletions datafusion/functions/src/hash/xxhash.rs
Original file line number Diff line number Diff line change
Expand Up @@ -155,14 +155,16 @@ impl ScalarUDFImpl for XxHash32Func {
Arc::new(hash_array) as Arc<dyn Array>
}
ColumnarValue::Scalar(scalar) => match scalar {
ScalarValue::Utf8(None)
| ScalarValue::Utf8View(None)
| ScalarValue::LargeUtf8(None) => {
let hash_array = StringArray::from(vec![String::new()]);
Arc::new(hash_array) as Arc<dyn Array>
}
ScalarValue::Utf8(Some(ref v))
| ScalarValue::Utf8View(Some(ref v))
| ScalarValue::LargeUtf8(Some(ref v)) => {
if v.is_empty() {
return Ok(ColumnarValue::Array(Arc::new(StringArray::from(
vec![""],
))));
}

let hash_result = hash_value(
v.as_bytes(),
XxHash32::with_seed(seed),
Expand Down Expand Up @@ -322,14 +324,15 @@ impl ScalarUDFImpl for XxHash64Func {
Arc::new(hash_array) as Arc<dyn Array>
}
ColumnarValue::Scalar(scalar) => match scalar {
ScalarValue::Utf8(None)
| ScalarValue::Utf8View(None)
| ScalarValue::LargeUtf8(None) => {
let hash_array = StringArray::from(vec![String::new()]);
Arc::new(hash_array) as Arc<dyn Array>
}
ScalarValue::Utf8(Some(ref v))
| ScalarValue::Utf8View(Some(ref v))
| ScalarValue::LargeUtf8(Some(ref v)) => {
if v.is_empty() {
return Ok(ColumnarValue::Array(Arc::new(StringArray::from(
vec![""],
))));
}
let hash_result = hash_value(
v.as_bytes(),
XxHash64::with_seed(seed),
Expand Down Expand Up @@ -421,10 +424,7 @@ fn process_array<T: Hasher>(
.unwrap()
.value(i)
};
if value.is_empty() {
hash_results.push(String::new());
continue;
}

hash_results.push(hash_value(
value.as_bytes(),
&mut hasher,
Expand Down

0 comments on commit a729942

Please sign in to comment.