Skip to content

Commit 1936c30

Browse files
author
Cheng-Yuan-Lai
committed
fix: add string view variant and rules
1 parent 2dcee88 commit 1936c30

File tree

4 files changed

+21
-5
lines changed

4 files changed

+21
-5
lines changed

datafusion/common/src/types/builtin.rs

+1
Original file line numberDiff line numberDiff line change
@@ -47,3 +47,4 @@ singleton!(LOGICAL_FLOAT64, logical_float64, Float64);
4747
singleton!(LOGICAL_DATE, logical_date, Date);
4848
singleton!(LOGICAL_BINARY, logical_binary, Binary);
4949
singleton!(LOGICAL_STRING, logical_string, String);
50+
singleton!(LOGICAL_STRING_VIEW, logical_string_view, StringView);

datafusion/common/src/types/native.rs

+5-1
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,8 @@ pub enum NativeType {
150150
FixedSizeBinary(i32),
151151
/// A variable-length string in Unicode with UTF-8 encoding.
152152
String,
153+
/// A variable-length stringView in Unicode with UTF-8 encoding.
154+
StringView,
153155
/// A list of some logical data type with variable length.
154156
List(LogicalFieldRef),
155157
/// A list of some logical data type with fixed length.
@@ -261,6 +263,7 @@ impl LogicalType for NativeType {
261263
LargeUtf8
262264
}
263265
(Self::String, data_type) if can_cast_types(data_type, &Utf8) => Utf8,
266+
(Self::StringView, _) => Utf8View,
264267
(Self::List(to_field), List(from_field) | FixedSizeList(from_field, _)) => {
265268
List(default_field_cast(to_field, from_field)?)
266269
}
@@ -395,7 +398,8 @@ impl From<DataType> for NativeType {
395398
DataType::Interval(iu) => Interval(iu),
396399
DataType::Binary | DataType::LargeBinary | DataType::BinaryView => Binary,
397400
DataType::FixedSizeBinary(size) => FixedSizeBinary(size),
398-
DataType::Utf8 | DataType::LargeUtf8 | DataType::Utf8View => String,
401+
DataType::Utf8 | DataType::LargeUtf8 => String,
402+
DataType::Utf8View => StringView,
399403
DataType::List(field)
400404
| DataType::ListView(field)
401405
| DataType::LargeList(field)

datafusion/expr-common/src/signature.rs

+1
Original file line numberDiff line numberDiff line change
@@ -546,6 +546,7 @@ fn get_data_types(native_type: &NativeType) -> Vec<DataType> {
546546
NativeType::String => {
547547
vec![DataType::Utf8, DataType::LargeUtf8, DataType::Utf8View]
548548
}
549+
NativeType::StringView => vec![DataType::Utf8View],
549550
// TODO: support other native types
550551
_ => vec![],
551552
}

datafusion/functions/src/crypto/digest.rs

+14-4
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
use super::basic::{digest, utf8_or_binary_to_binary_type};
2020
use arrow::datatypes::DataType;
2121
use datafusion_common::{
22-
types::{logical_binary, logical_string},
22+
types::{logical_binary, logical_string, logical_string_view, NativeType},
2323
Result,
2424
};
2525
use datafusion_expr::{
@@ -71,12 +71,22 @@ impl DigestFunc {
7171
Self {
7272
signature: Signature::one_of(
7373
vec![
74+
// (Utf8View, Utf8View) case
7475
TypeSignature::Coercible(vec![
75-
Coercion::new_exact(TypeSignatureClass::Native(logical_string())),
76-
Coercion::new_exact(TypeSignatureClass::Native(logical_string())),
76+
Coercion::new_exact(TypeSignatureClass::Native(
77+
logical_string_view(),
78+
)),
79+
Coercion::new_exact(TypeSignatureClass::Native(
80+
logical_string_view(),
81+
)),
7782
]),
83+
// Other cases
7884
TypeSignature::Coercible(vec![
79-
Coercion::new_exact(TypeSignatureClass::Native(logical_binary())),
85+
Coercion::new_implicit(
86+
TypeSignatureClass::Native(logical_string()),
87+
vec![TypeSignatureClass::Native(logical_string())],
88+
NativeType::String,
89+
),
8090
Coercion::new_exact(TypeSignatureClass::Native(logical_string())),
8191
]),
8292
],

0 commit comments

Comments
 (0)