Skip to content

Commit dbb2ab0

Browse files
Merge pull request #95 from dd-david-levin/david.levin/cherry-pick/apache-pr-21104-20260325
Cherry-pick apache#21104 Co-authored-by: dd-david-levin <david.levin@datadoghq.com>
2 parents 8498635 + 9742ac7 commit dbb2ab0

2 files changed

Lines changed: 59 additions & 35 deletions

File tree

datafusion/functions-nested/src/string.rs

Lines changed: 39 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -721,53 +721,57 @@ where
721721
let mut list_builder = ListBuilder::new(string_builder);
722722

723723
match null_value_array {
724-
None => {
725-
string_array.iter().zip(delimiter_array.iter()).for_each(
726-
|(string, delimiter)| {
727-
match (string, delimiter) {
728-
(Some(string), Some("")) => {
729-
list_builder.values().append_value(string);
730-
list_builder.append(true);
731-
}
732-
(Some(string), Some(delimiter)) => {
733-
string.split(delimiter).for_each(|s| {
734-
list_builder.values().append_value(s);
735-
});
736-
list_builder.append(true);
737-
}
738-
(Some(string), None) => {
739-
string.chars().map(|c| c.to_string()).for_each(|c| {
740-
list_builder.values().append_value(c.as_str());
741-
});
742-
list_builder.append(true);
743-
}
744-
_ => list_builder.append(false), // null value
724+
None => string_array.iter().zip(delimiter_array.iter()).for_each(
725+
|(string, delimiter)| match (string, delimiter) {
726+
(Some(string), Some("")) => {
727+
if !string.is_empty() {
728+
list_builder.values().append_value(string);
745729
}
746-
},
747-
)
748-
}
730+
list_builder.append(true);
731+
}
732+
(Some(string), Some(delimiter)) => {
733+
if !string.is_empty() {
734+
string.split(delimiter).for_each(|s| {
735+
list_builder.values().append_value(s);
736+
});
737+
}
738+
list_builder.append(true);
739+
}
740+
(Some(string), None) => {
741+
string.chars().map(|c| c.to_string()).for_each(|c| {
742+
list_builder.values().append_value(c.as_str());
743+
});
744+
list_builder.append(true);
745+
}
746+
_ => list_builder.append(false),
747+
},
748+
),
749749
Some(null_value_array) => string_array
750750
.iter()
751751
.zip(delimiter_array.iter())
752752
.zip(null_value_array.iter())
753753
.for_each(|((string, delimiter), null_value)| {
754754
match (string, delimiter) {
755755
(Some(string), Some("")) => {
756-
if Some(string) == null_value {
757-
list_builder.values().append_null();
758-
} else {
759-
list_builder.values().append_value(string);
756+
if !string.is_empty() {
757+
if Some(string) == null_value {
758+
list_builder.values().append_null();
759+
} else {
760+
list_builder.values().append_value(string);
761+
}
760762
}
761763
list_builder.append(true);
762764
}
763765
(Some(string), Some(delimiter)) => {
764-
string.split(delimiter).for_each(|s| {
765-
if Some(s) == null_value {
766-
list_builder.values().append_null();
767-
} else {
768-
list_builder.values().append_value(s);
769-
}
770-
});
766+
if !string.is_empty() {
767+
string.split(delimiter).for_each(|s| {
768+
if Some(s) == null_value {
769+
list_builder.values().append_null();
770+
} else {
771+
list_builder.values().append_value(s);
772+
}
773+
});
774+
}
771775
list_builder.append(true);
772776
}
773777
(Some(string), None) => {

datafusion/sqllogictest/test_files/array.slt

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8051,6 +8051,26 @@ SELECT string_to_array('abcxxxdef', 'xxx')
80518051
----
80528052
[abc, def]
80538053

8054+
query I
8055+
SELECT cardinality(string_to_array('', ','))
8056+
----
8057+
0
8058+
8059+
query I
8060+
SELECT cardinality(string_to_array('', ''))
8061+
----
8062+
0
8063+
8064+
query I
8065+
SELECT cardinality(string_to_array('', ',', 'x'))
8066+
----
8067+
0
8068+
8069+
query I
8070+
SELECT cardinality(string_to_array('', '', 'x'))
8071+
----
8072+
0
8073+
80548074
query ?
80558075
SELECT string_to_array('abc', '')
80568076
----

0 commit comments

Comments
 (0)