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 98a03a90cb [common] Fix SubstringTransform null check for field refs
(#7987)
98a03a90cb is described below
commit 98a03a90cb8d95dac43af9a9e5c6a26d1f0b3368
Author: QuakeWang <[email protected]>
AuthorDate: Wed May 27 11:06:35 2026 +0800
[common] Fix SubstringTransform null check for field refs (#7987)
`SubstringTransform` checked source field nullability with column `0`,
but read the value from `sourceFieldRef.index()`. When column `0` was
null and the actual source field was non-null, substring masking
incorrectly returned null.
This PR uses the source field index for both the null check and value
access, and adds a regression test for that case.
---
.../org/apache/paimon/predicate/SubstringTransform.java | 3 ++-
.../org/apache/paimon/predicate/SubstringTransformTest.java | 13 +++++++++++++
2 files changed, 15 insertions(+), 1 deletion(-)
diff --git
a/paimon-common/src/main/java/org/apache/paimon/predicate/SubstringTransform.java
b/paimon-common/src/main/java/org/apache/paimon/predicate/SubstringTransform.java
index 00431a61f3..054422a201 100644
---
a/paimon-common/src/main/java/org/apache/paimon/predicate/SubstringTransform.java
+++
b/paimon-common/src/main/java/org/apache/paimon/predicate/SubstringTransform.java
@@ -56,7 +56,8 @@ public class SubstringTransform implements Transform {
if (source instanceof FieldRef) {
FieldRef sourceFieldRef = (FieldRef) source;
checkArgument(sourceFieldRef.type().is(CHARACTER_STRING));
- sourceString = row.isNullAt(0) ? null :
row.getString(sourceFieldRef.index());
+ int sourceIndex = sourceFieldRef.index();
+ sourceString = row.isNullAt(sourceIndex) ? null :
row.getString(sourceIndex);
} else {
sourceString = (BinaryString) inputs.get(0);
}
diff --git
a/paimon-common/src/test/java/org/apache/paimon/predicate/SubstringTransformTest.java
b/paimon-common/src/test/java/org/apache/paimon/predicate/SubstringTransformTest.java
index 8ddb74440b..b4d998bea9 100644
---
a/paimon-common/src/test/java/org/apache/paimon/predicate/SubstringTransformTest.java
+++
b/paimon-common/src/test/java/org/apache/paimon/predicate/SubstringTransformTest.java
@@ -99,4 +99,17 @@ class SubstringTransformTest {
3));
assertThat(result).isEqualTo(BinaryString.fromString("ell"));
}
+
+ @Test
+ public void testSubstringRefInputUsesSourceFieldNullability() {
+ List<Object> inputs = new ArrayList<>();
+ inputs.add(new FieldRef(1, "f1", DataTypes.STRING()));
+ inputs.add(2);
+ inputs.add(3);
+ SubstringTransform transform = new SubstringTransform(inputs);
+
+ Object result = transform.transform(GenericRow.of(null,
BinaryString.fromString("hello")));
+
+ assertThat(result).isEqualTo(BinaryString.fromString("ell"));
+ }
}