This is an automated email from the ASF dual-hosted git repository.
tustvold pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-rs.git
The following commit(s) were added to refs/heads/main by this push:
new 764b34af4a fix: mark (Large)ListView as nested and support in equal
data type (#6995)
764b34af4a is described below
commit 764b34af4abf39e46575b1e8e3eaf0a36976cafb
Author: Raz Luvaton <[email protected]>
AuthorDate: Sun Jan 19 23:15:52 2025 +0200
fix: mark (Large)ListView as nested and support in equal data type (#6995)
---
arrow-schema/src/datatype.rs | 26 ++++++++++++++++++++------
1 file changed, 20 insertions(+), 6 deletions(-)
diff --git a/arrow-schema/src/datatype.rs b/arrow-schema/src/datatype.rs
index 7cd53b13c7..23bd2e2cfa 100644
--- a/arrow-schema/src/datatype.rs
+++ b/arrow-schema/src/datatype.rs
@@ -552,16 +552,21 @@ impl DataType {
matches!(self, Int16 | Int32 | Int64)
}
- /// Returns true if this type is nested (List, FixedSizeList, LargeList,
Struct, Union,
+ /// Returns true if this type is nested (List, FixedSizeList, LargeList,
ListView. LargeListView, Struct, Union,
/// or Map), or a dictionary of a nested type
#[inline]
pub fn is_nested(&self) -> bool {
use DataType::*;
match self {
Dictionary(_, v) => DataType::is_nested(v.as_ref()),
- List(_) | FixedSizeList(_, _) | LargeList(_) | Struct(_) |
Union(_, _) | Map(_, _) => {
- true
- }
+ List(_)
+ | FixedSizeList(_, _)
+ | LargeList(_)
+ | ListView(_)
+ | LargeListView(_)
+ | Struct(_)
+ | Union(_, _)
+ | Map(_, _) => true,
_ => false,
}
}
@@ -578,7 +583,9 @@ impl DataType {
pub fn equals_datatype(&self, other: &DataType) -> bool {
match (&self, other) {
(DataType::List(a), DataType::List(b))
- | (DataType::LargeList(a), DataType::LargeList(b)) => {
+ | (DataType::LargeList(a), DataType::LargeList(b))
+ | (DataType::ListView(a), DataType::ListView(b))
+ | (DataType::LargeListView(a), DataType::LargeListView(b)) => {
a.is_nullable() == b.is_nullable() &&
a.data_type().equals_datatype(b.data_type())
}
(DataType::FixedSizeList(a, a_size), DataType::FixedSizeList(b,
b_size)) => {
@@ -725,7 +732,9 @@ impl DataType {
pub fn contains(&self, other: &DataType) -> bool {
match (self, other) {
(DataType::List(f1), DataType::List(f2))
- | (DataType::LargeList(f1), DataType::LargeList(f2)) =>
f1.contains(f2),
+ | (DataType::LargeList(f1), DataType::LargeList(f2))
+ | (DataType::ListView(f1), DataType::ListView(f2))
+ | (DataType::LargeListView(f1), DataType::LargeListView(f2)) =>
f1.contains(f2),
(DataType::FixedSizeList(f1, s1), DataType::FixedSizeList(f2, s2))
=> {
s1 == s2 && f1.contains(f2)
}
@@ -1006,11 +1015,16 @@ mod tests {
#[test]
fn test_nested() {
let list = DataType::List(Arc::new(Field::new("foo", DataType::Utf8,
true)));
+ let list_view = DataType::ListView(Arc::new(Field::new("foo",
DataType::Utf8, true)));
+ let large_list_view =
+ DataType::LargeListView(Arc::new(Field::new("foo", DataType::Utf8,
true)));
assert!(!DataType::is_nested(&DataType::Boolean));
assert!(!DataType::is_nested(&DataType::Int32));
assert!(!DataType::is_nested(&DataType::Utf8));
assert!(DataType::is_nested(&list));
+ assert!(DataType::is_nested(&list_view));
+ assert!(DataType::is_nested(&large_list_view));
assert!(!DataType::is_nested(&DataType::Dictionary(
Box::new(DataType::Int32),