This is an automated email from the ASF dual-hosted git repository.
JingsongLi pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/paimon.git
The following commit(s) were added to refs/heads/master by this push:
new 37b90f0e5a [common] Fix npe on null value map(k, v) cast (#8218)
37b90f0e5a is described below
commit 37b90f0e5a0c87c27a4123e01ec4ae1ae5668df1
Author: Arnav Balyan <[email protected]>
AuthorDate: Sat Jun 13 04:39:14 2026 +0200
[common] Fix npe on null value map(k, v) cast (#8218)
---
.../org/apache/paimon/casting/StringToMapCastRule.java | 18 +++++++-----------
.../org/apache/paimon/casting/CastExecutorTest.java | 9 +++++++++
2 files changed, 16 insertions(+), 11 deletions(-)
diff --git
a/paimon-common/src/main/java/org/apache/paimon/casting/StringToMapCastRule.java
b/paimon-common/src/main/java/org/apache/paimon/casting/StringToMapCastRule.java
index 02b21fc397..2183a67d77 100644
---
a/paimon-common/src/main/java/org/apache/paimon/casting/StringToMapCastRule.java
+++
b/paimon-common/src/main/java/org/apache/paimon/casting/StringToMapCastRule.java
@@ -37,8 +37,6 @@ import java.util.Map;
import java.util.Stack;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import java.util.stream.Collectors;
-import java.util.stream.IntStream;
/** {@link DataTypeFamily#CHARACTER_STRING} to {@link DataTypeRoot#MAP} cast
rule. */
class StringToMapCastRule extends AbstractCastRule<BinaryString, InternalMap> {
@@ -141,15 +139,13 @@ class StringToMapCastRule extends
AbstractCastRule<BinaryString, InternalMap> {
throw new RuntimeException("Invalid Function map format: odd
number of elements");
}
- return IntStream.range(0, elements.size() / 2)
- .boxed()
- .collect(
- Collectors.toMap(
- i -> parseValue(elements.get(i * 2).trim(),
keyCastExecutor),
- i ->
- parseValue(
- elements.get(i * 2 + 1).trim(),
- valueCastExecutor)));
+ Map<Object, Object> mapContent = Maps.newHashMap();
+ for (int i = 0; i < elements.size(); i += 2) {
+ mapContent.put(
+ parseValue(elements.get(i).trim(), keyCastExecutor),
+ parseValue(elements.get(i + 1).trim(), valueCastExecutor));
+ }
+ return mapContent;
}
private Map<Object, Object> parseMapEntry(
diff --git
a/paimon-common/src/test/java/org/apache/paimon/casting/CastExecutorTest.java
b/paimon-common/src/test/java/org/apache/paimon/casting/CastExecutorTest.java
index dd6d53bf4c..0bcc455986 100644
---
a/paimon-common/src/test/java/org/apache/paimon/casting/CastExecutorTest.java
+++
b/paimon-common/src/test/java/org/apache/paimon/casting/CastExecutorTest.java
@@ -643,6 +643,15 @@ public class CastExecutorTest {
assertThat(valueArray.getInt(0)).isEqualTo(42);
assertThat(keyArray.getString(1).toString()).isEqualTo("key1");
assertThat(valueArray.isNullAt(1)).isTrue();
+
+ result = stringToMap.cast(BinaryString.fromString("MAP(key1, null,
key2, 42)"));
+ assertThat(result.size()).isEqualTo(2);
+ keyArray = result.keyArray();
+ valueArray = result.valueArray();
+ assertThat(keyArray.getString(0).toString()).isEqualTo("key2");
+ assertThat(valueArray.getInt(0)).isEqualTo(42);
+ assertThat(keyArray.getString(1).toString()).isEqualTo("key1");
+ assertThat(valueArray.isNullAt(1)).isTrue();
}
@Test