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()) {