This is an automated email from the ASF dual-hosted git repository.

wanghailin pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/seatunnel.git


The following commit(s) were added to refs/heads/dev by this push:
     new f41e882a22 [Improve][Sql] Support boolean fields in case-when 
condition clauses (#9073)
f41e882a22 is described below

commit f41e882a22564fcc56bd28a1dc5967dcd380db7e
Author: hailin0 <wanghai...@apache.org>
AuthorDate: Sat Mar 29 10:07:11 2025 +0800

    [Improve][Sql] Support boolean fields in case-when condition clauses (#9073)
---
 docs/en/transform-v2/sql-functions.md              |  6 +++-
 .../transform/sql/zeta/ZetaSQLFilter.java          |  4 +++
 .../seatunnel/transform/sql/SQLTransformTest.java  | 33 ++++++++++++++++++++++
 3 files changed, 42 insertions(+), 1 deletion(-)

diff --git a/docs/en/transform-v2/sql-functions.md 
b/docs/en/transform-v2/sql-functions.md
index 48a3112e4b..3d79ebbccc 100644
--- a/docs/en/transform-v2/sql-functions.md
+++ b/docs/en/transform-v2/sql-functions.md
@@ -991,7 +991,11 @@ select
   case
     when c_tinyint <> 117 then 1
     else 0
-  end as c_number_0
+  end as c_number_0,
+  case
+    when c_boolean then 1
+    else 0
+  end as c_boolean_0
 from
   dual
 ```
diff --git 
a/seatunnel-transforms-v2/src/main/java/org/apache/seatunnel/transform/sql/zeta/ZetaSQLFilter.java
 
b/seatunnel-transforms-v2/src/main/java/org/apache/seatunnel/transform/sql/zeta/ZetaSQLFilter.java
index 7e84093bf4..0a0293ee14 100644
--- 
a/seatunnel-transforms-v2/src/main/java/org/apache/seatunnel/transform/sql/zeta/ZetaSQLFilter.java
+++ 
b/seatunnel-transforms-v2/src/main/java/org/apache/seatunnel/transform/sql/zeta/ZetaSQLFilter.java
@@ -39,6 +39,7 @@ import 
net.sf.jsqlparser.expression.operators.relational.MinorThan;
 import net.sf.jsqlparser.expression.operators.relational.MinorThanEquals;
 import net.sf.jsqlparser.expression.operators.relational.NotEqualsTo;
 import 
net.sf.jsqlparser.expression.operators.relational.ParenthesedExpressionList;
+import net.sf.jsqlparser.schema.Column;
 
 import java.time.LocalDate;
 import java.time.LocalDateTime;
@@ -114,6 +115,9 @@ public class ZetaSQLFilter {
         if (whereExpr instanceof Parenthesis) {
             return parenthesisExpr((Parenthesis) whereExpr, inputFields);
         }
+        if (whereExpr instanceof Column) {
+            return (boolean) zetaSQLFunction.computeForValue(whereExpr, 
inputFields);
+        }
         throw new TransformException(
                 CommonErrorCodeDeprecated.UNSUPPORTED_OPERATION,
                 String.format("Unsupported SQL Expression: %s ", whereExpr));
diff --git 
a/seatunnel-transforms-v2/src/test/java/org/apache/seatunnel/transform/sql/SQLTransformTest.java
 
b/seatunnel-transforms-v2/src/test/java/org/apache/seatunnel/transform/sql/SQLTransformTest.java
index 2d48f7b28a..2bf47c36c2 100644
--- 
a/seatunnel-transforms-v2/src/test/java/org/apache/seatunnel/transform/sql/SQLTransformTest.java
+++ 
b/seatunnel-transforms-v2/src/test/java/org/apache/seatunnel/transform/sql/SQLTransformTest.java
@@ -282,4 +282,37 @@ public class SQLTransformTest {
                 BasicType.STRING_TYPE, 
tableSchema.getColumns().get(1).getDataType());
         Assertions.assertEquals("a", result.get(0).getField(1));
     }
+
+    @Test
+    public void tesCaseWhenClausesWithBooleanField() {
+        String tableName = "test";
+        String[] fields = new String[] {"id", "bool"};
+        CatalogTable table =
+                CatalogTableUtil.getCatalogTable(
+                        tableName,
+                        new SeaTunnelRowType(
+                                fields,
+                                new SeaTunnelDataType[] {
+                                    BasicType.INT_TYPE, BasicType.BOOLEAN_TYPE
+                                }));
+        ReadonlyConfig config =
+                ReadonlyConfig.fromMap(
+                        Collections.singletonMap(
+                                "query",
+                                "select `id`, `bool`, case when bool then 1 
else 2 end as bool_1 from dual"));
+        SQLTransform sqlTransform = new SQLTransform(config, table);
+        List<SeaTunnelRow> result =
+                sqlTransform.transformRow(
+                        new SeaTunnelRow(new Object[] {Integer.valueOf(1), 
true}));
+        Assertions.assertEquals(1, result.get(0).getField(0));
+        Assertions.assertEquals(true, result.get(0).getField(1));
+        Assertions.assertEquals(1, result.get(0).getField(2));
+
+        result =
+                sqlTransform.transformRow(
+                        new SeaTunnelRow(new Object[] {Integer.valueOf(1), 
false}));
+        Assertions.assertEquals(1, result.get(0).getField(0));
+        Assertions.assertEquals(false, result.get(0).getField(1));
+        Assertions.assertEquals(2, result.get(0).getField(2));
+    }
 }

Reply via email to