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 c9db424777 [common] Fix wildcard matching for line terminators (#9358)
c9db424777 is described below

commit c9db424777512a65f63e5891438f74fec2956e35
Author: Arnav Balyan <[email protected]>
AuthorDate: Sun Aug 23 20:49:13 2026 +0530

    [common] Fix wildcard matching for line terminators (#9358)
---
 .../main/java/org/apache/paimon/predicate/Like.java    |  2 +-
 .../org/apache/paimon/predicate/PredicateTest.java     | 18 ++++++++++++++++++
 2 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/paimon-common/src/main/java/org/apache/paimon/predicate/Like.java 
b/paimon-common/src/main/java/org/apache/paimon/predicate/Like.java
index e12fc8b2a4..29281fe3b4 100644
--- a/paimon-common/src/main/java/org/apache/paimon/predicate/Like.java
+++ b/paimon-common/src/main/java/org/apache/paimon/predicate/Like.java
@@ -116,7 +116,7 @@ public class Like extends LeafBinaryFunction {
                 javaPattern.append(nextChar);
                 ++i;
             } else if (c == '_') {
-                javaPattern.append('.');
+                javaPattern.append("(?s:.)");
             } else if (c == '%') {
                 javaPattern.append("(?s:.*)");
             } else {
diff --git 
a/paimon-common/src/test/java/org/apache/paimon/predicate/PredicateTest.java 
b/paimon-common/src/test/java/org/apache/paimon/predicate/PredicateTest.java
index 37be3e0b4f..9585bb7199 100644
--- a/paimon-common/src/test/java/org/apache/paimon/predicate/PredicateTest.java
+++ b/paimon-common/src/test/java/org/apache/paimon/predicate/PredicateTest.java
@@ -604,6 +604,24 @@ public class PredicateTest {
         assertThat(getLikeFunc("a_c")).isEqualTo(Like.INSTANCE);
     }
 
+    @Test
+    public void testLikeSingleCharacterWildcardMatchesLineTerminators() {
+        String[] lineTerminators = {"\n", "\r", "\u0085", "\u2028", "\u2029"};
+        for (String lineTerminator : lineTerminators) {
+            assertThat(
+                            Like.INSTANCE.test(
+                                    DataTypes.STRING(),
+                                    fromString("a" + lineTerminator + "b"),
+                                    fromString("a_b")))
+                    .isTrue();
+        }
+
+        assertThat(Like.INSTANCE.test(DataTypes.STRING(), 
fromString("a\r\nb"), fromString("a_b")))
+                .isFalse();
+        assertThat(Like.INSTANCE.test(DataTypes.STRING(), 
fromString("a\r\nb"), fromString("a__b")))
+                .isTrue();
+    }
+
     private boolean executeLike(String s, String pattern) {
         ThreadLocalRandom rnd = ThreadLocalRandom.current();
         if (rnd.nextBoolean()) {

Reply via email to