This is an automated email from the ASF dual-hosted git repository.
alamb pushed a commit to branch string-view
in repository https://gitbox.apache.org/repos/asf/datafusion.git
The following commit(s) were added to refs/heads/string-view by this push:
new 959856be77 feat: Implement equality = and inequality <> support for
BinaryView (#11004)
959856be77 is described below
commit 959856be77ae131e232b40be0ccd2357f4926458
Author: Chojan Shang <[email protected]>
AuthorDate: Thu Jun 20 18:19:39 2024 +0800
feat: Implement equality = and inequality <> support for BinaryView (#11004)
* feat: Implement equality = and inequality <> support for BinaryView
Signed-off-by: Chojan Shang <[email protected]>
* chore: make fmt happy
Signed-off-by: Chojan Shang <[email protected]>
---------
Signed-off-by: Chojan Shang <[email protected]>
---
datafusion/common/src/scalar/mod.rs | 2 +-
datafusion/expr/src/type_coercion/binary.rs | 3 +
datafusion/sqllogictest/test_files/binary_view.slt | 154 +++++++++++++++++++++
3 files changed, 158 insertions(+), 1 deletion(-)
diff --git a/datafusion/common/src/scalar/mod.rs
b/datafusion/common/src/scalar/mod.rs
index 86ac115cca..e163fb68db 100644
--- a/datafusion/common/src/scalar/mod.rs
+++ b/datafusion/common/src/scalar/mod.rs
@@ -1573,6 +1573,7 @@ impl ScalarValue {
DataType::Utf8View => build_array_string!(StringViewArray,
Utf8View),
DataType::Utf8 => build_array_string!(StringArray, Utf8),
DataType::LargeUtf8 => build_array_string!(LargeStringArray,
LargeUtf8),
+ DataType::BinaryView => build_array_string!(BinaryViewArray,
BinaryView),
DataType::Binary => build_array_string!(BinaryArray, Binary),
DataType::LargeBinary => build_array_string!(LargeBinaryArray,
LargeBinary),
DataType::Date32 => build_array_primitive!(Date32Array, Date32),
@@ -1727,7 +1728,6 @@ impl ScalarValue {
| DataType::Time64(TimeUnit::Millisecond)
| DataType::Map(_, _)
| DataType::RunEndEncoded(_, _)
- | DataType::BinaryView
| DataType::ListView(_)
| DataType::LargeListView(_) => {
return _internal_err!(
diff --git a/datafusion/expr/src/type_coercion/binary.rs
b/datafusion/expr/src/type_coercion/binary.rs
index d57b5228cb..694e5e13f9 100644
--- a/datafusion/expr/src/type_coercion/binary.rs
+++ b/datafusion/expr/src/type_coercion/binary.rs
@@ -991,6 +991,9 @@ fn binary_coercion(lhs_type: &DataType, rhs_type:
&DataType) -> Option<DataType>
(Binary | Utf8, Binary) | (Binary, Utf8) => Some(Binary),
(LargeBinary | Binary | Utf8 | LargeUtf8, LargeBinary)
| (LargeBinary, Binary | Utf8 | LargeUtf8) => Some(LargeBinary),
+ (BinaryView, BinaryView) | (BinaryView, Binary) | (Binary, BinaryView)
=> {
+ Some(BinaryView)
+ }
_ => None,
}
}
diff --git a/datafusion/sqllogictest/test_files/binary_view.slt
b/datafusion/sqllogictest/test_files/binary_view.slt
new file mode 100644
index 0000000000..2728d4803c
--- /dev/null
+++ b/datafusion/sqllogictest/test_files/binary_view.slt
@@ -0,0 +1,154 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+
+# http://www.apache.org/licenses/LICENSE-2.0
+
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+########
+## Test setup
+########
+
+statement ok
+create table test_source as values
+ ('Andrew', 'X'),
+ ('Xiangpeng', 'Xiangpeng'),
+ ('Raphael', 'R'),
+ (NULL, 'R')
+;
+
+# Table with the different combination of column types
+statement ok
+CREATE TABLE test AS
+SELECT
+ arrow_cast(column1, 'Utf8') as column1_utf8,
+ arrow_cast(column2, 'Utf8') as column2_utf8,
+ arrow_cast(column1, 'Binary') AS column1_binary,
+ arrow_cast(column2, 'Binary') AS column2_binary,
+ arrow_cast(arrow_cast(column1, 'Binary'), 'BinaryView') AS
column1_binaryview,
+ arrow_cast(arrow_cast(column2, 'Binary'), 'BinaryView') AS
column2_binaryview,
+ arrow_cast(column1, 'Dictionary(Int32, Binary)') AS column1_dict,
+ arrow_cast(column2, 'Dictionary(Int32, Binary)') AS column2_dict
+FROM test_source;
+
+statement ok
+drop table test_source
+
+########
+## BinaryView to BinaryView
+########
+
+# BinaryView scalar to BinaryView scalar
+
+query BBBB
+SELECT
+ arrow_cast(arrow_cast('NULL', 'Binary'), 'BinaryView') =
arrow_cast(arrow_cast('Andrew', 'Binary'), 'BinaryView') AS comparison1,
+ arrow_cast(arrow_cast('NULL', 'Binary'), 'BinaryView') <>
arrow_cast(arrow_cast('Andrew', 'Binary'), 'BinaryView') AS comparison2,
+ arrow_cast(arrow_cast('Andrew', 'Binary'), 'BinaryView') =
arrow_cast(arrow_cast('Andrew', 'Binary'), 'BinaryView') AS comparison3,
+ arrow_cast(arrow_cast('Xiangpeng', 'Binary'), 'BinaryView') <>
arrow_cast(arrow_cast('Andrew', 'Binary'), 'BinaryView') AS comparison4;
+----
+false true true true
+
+
+# BinaryView column to BinaryView column comparison as filters
+
+query TT
+select column1_utf8, column2_utf8 from test where column1_binaryview =
column2_binaryview;
+----
+Xiangpeng Xiangpeng
+
+query TT
+select column1_utf8, column2_utf8 from test where column1_binaryview <>
column2_binaryview;
+----
+Andrew X
+Raphael R
+
+# BinaryView column to BinaryView column
+query TTBB
+select
+ column1_utf8, column2_utf8,
+ column1_binaryview = column2_binaryview,
+ column1_binaryview <> column2_binaryview
+from test;
+----
+Andrew X false true
+Xiangpeng Xiangpeng true false
+Raphael R false true
+NULL R NULL NULL
+
+# BinaryView column to BinaryView scalar comparison
+query TTBBBB
+select
+ column1_utf8, column2_utf8,
+ column1_binaryview = arrow_cast(arrow_cast('Andrew',
'Binary'), 'BinaryView'),
+ arrow_cast(arrow_cast('Andrew', 'Binary'), 'BinaryView') =
column1_binaryview,
+ column1_binaryview <> arrow_cast(arrow_cast('Andrew',
'Binary'), 'BinaryView'),
+ arrow_cast(arrow_cast('Andrew', 'Binary'), 'BinaryView') <>
column1_binaryview
+from test;
+----
+Andrew X true true false false
+Xiangpeng Xiangpeng false false true true
+Raphael R false false true true
+NULL R NULL NULL NULL NULL
+
+########
+## BinaryView to Binary
+########
+
+# test BinaryViewArray with Binary columns
+query TTBBBB
+select
+ column1_utf8, column2_utf8,
+ column1_binaryview = column2_binary,
+ column2_binary = column1_binaryview,
+ column1_binaryview <> column2_binary,
+ column2_binary <> column1_binaryview
+from test;
+----
+Andrew X false false true true
+Xiangpeng Xiangpeng true true false false
+Raphael R false false true true
+NULL R NULL NULL NULL NULL
+
+# BinaryView column to Binary scalar
+query TTBBBB
+select
+ column1_utf8, column2_utf8,
+ column1_binaryview = arrow_cast('Andrew', 'Binary'),
+ arrow_cast('Andrew', 'Binary') = column1_binaryview,
+ column1_binaryview <> arrow_cast('Andrew', 'Binary'),
+ arrow_cast('Andrew', 'Binary') <> column1_binaryview
+from test;
+----
+Andrew X true true false false
+Xiangpeng Xiangpeng false false true true
+Raphael R false false true true
+NULL R NULL NULL NULL NULL
+
+# Binary column to BinaryView scalar
+query TTBBBB
+select
+ column1_utf8, column2_utf8,
+ column1_binary = arrow_cast(arrow_cast('Andrew',
'Binary'), 'BinaryView'),
+ arrow_cast(arrow_cast('Andrew', 'Binary'), 'BinaryView') = column1_binary,
+ column1_binary <> arrow_cast(arrow_cast('Andrew',
'Binary'), 'BinaryView'),
+ arrow_cast(arrow_cast('Andrew', 'Binary'), 'BinaryView') <> column1_binary
+from test;
+----
+Andrew X true true false false
+Xiangpeng Xiangpeng false false true true
+Raphael R false false true true
+NULL R NULL NULL NULL NULL
+
+statement ok
+drop table test;
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]