This is an automated email from the ASF dual-hosted git repository.
lzljs3620320 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 3c9f9e8feb [flink] SqlPredicate add not in (#5957)
3c9f9e8feb is described below
commit 3c9f9e8feba4b995307845735adb63f3499c24eb
Author: WenDing-Y <[email protected]>
AuthorDate: Fri Jul 25 18:50:43 2025 +0800
[flink] SqlPredicate add not in (#5957)
---
.../paimon/flink/predicate/SimpleSqlPredicateConvertor.java | 13 +++++++++++++
.../org/apache/paimon/flink/utils/FlinkCalciteClasses.java | 4 ++++
.../flink/predicate/SimpleSqlPredicateConvertorTest.java | 13 +++++++++++++
3 files changed, 30 insertions(+)
diff --git
a/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/predicate/SimpleSqlPredicateConvertor.java
b/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/predicate/SimpleSqlPredicateConvertor.java
index dcdcc31a9f..d54c76f6f5 100644
---
a/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/predicate/SimpleSqlPredicateConvertor.java
+++
b/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/predicate/SimpleSqlPredicateConvertor.java
@@ -93,6 +93,19 @@ public class SimpleSqlPredicateConvertor {
list.add(literal);
}
return builder.in(index, list);
+ } else if (kind == calciteClasses.sqlKindDelegate().notIn()) {
+ int index = getFieldIndex(left.toString());
+ List<?> elementslist =
calciteClasses.sqlNodeListDelegate().getList(right);
+
+ List<Object> list = new ArrayList<>();
+ for (Object sqlNode : elementslist) {
+ Object literal =
+ TypeUtils.castFromString(
+
calciteClasses.sqlLiteralDelegate().toValue(sqlNode),
+ rowType.getFieldTypes().get(index));
+ list.add(literal);
+ }
+ return builder.in(index, list).negate().get();
}
} else if
(calciteClasses.sqlOperatorDelegate().instanceOfSqlPostfixOperator(operator)) {
Object child =
diff --git
a/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/utils/FlinkCalciteClasses.java
b/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/utils/FlinkCalciteClasses.java
index 396a3c4c07..5410dc3533 100644
---
a/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/utils/FlinkCalciteClasses.java
+++
b/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/utils/FlinkCalciteClasses.java
@@ -207,6 +207,10 @@ public class FlinkCalciteClasses {
public Object not() throws NoSuchFieldException,
IllegalAccessException {
return clazz.getField("NOT").get(null);
}
+
+ public Object notIn() throws NoSuchFieldException,
IllegalAccessException {
+ return clazz.getField("NOT_IN").get(null);
+ }
}
/** Accessing org.apache.calcite.sql.parser.SqlParser$Config by
Reflection. */
diff --git
a/paimon-flink/paimon-flink-common/src/test/java/org/apache/paimon/flink/predicate/SimpleSqlPredicateConvertorTest.java
b/paimon-flink/paimon-flink-common/src/test/java/org/apache/paimon/flink/predicate/SimpleSqlPredicateConvertorTest.java
index 55695da03c..a68d15e746 100644
---
a/paimon-flink/paimon-flink-common/src/test/java/org/apache/paimon/flink/predicate/SimpleSqlPredicateConvertorTest.java
+++
b/paimon-flink/paimon-flink-common/src/test/java/org/apache/paimon/flink/predicate/SimpleSqlPredicateConvertorTest.java
@@ -162,6 +162,19 @@ class SimpleSqlPredicateConvertorTest {
.isEqualTo(predicateBuilder.in(predicateBuilder.indexOf("a"),
elements));
}
+ @Test
+ public void testNotIn() throws Exception {
+ Predicate predicate =
+ simpleSqlPredicateConvertor.convertSqlToPredicate("a not in
('1','2')");
+ List<Object> elements = Lists.newArrayList(1, 2);
+ Assertions.assertThat(predicate)
+ .isEqualTo(
+ predicateBuilder
+ .in(predicateBuilder.indexOf("a"), elements)
+ .negate()
+ .get());
+ }
+
@Test
public void testIsNull() throws Exception {
Predicate predicate =
simpleSqlPredicateConvertor.convertSqlToPredicate("a is null ");