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

michaelsmith pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/impala.git

commit 11fb2500a58a1fe9f78fbb0cd1a0b634a079ba44
Author: Arnab Karmakar <[email protected]>
AuthorDate: Mon Jan 5 20:47:33 2026 -0800

    IMPALA-14660: Fix incorrect parameter validation in IcebergPartitionExpr
    
    The validation condition at line 61 of IcebergPartitionExpr.java used
    AND (&&) instead of OR (||), creating an impossible condition that
    could never be true:
    `if (params.size() > 2 && params.size() < 1)`
    
    This allowed partition transforms with more than 2 arguments to pass
    validation silently, with the extra parameters being ignored. The
    correct condition should reject calls with less than 1 OR more than
    2 parameters:
    `if (params.size() < 1 || params.size() > 2)`
    
    This bug affected all Iceberg partition transforms (truncate, bucket,
    year, month, day, hour) since they share the same validation logic.
    
    Change-Id: Iba0bbf349fa207cd59e04a276e8813546e5b5ea9
    Reviewed-on: http://gerrit.cloudera.org:8080/23827
    Reviewed-by: Impala Public Jenkins <[email protected]>
    Tested-by: Impala Public Jenkins <[email protected]>
---
 fe/src/main/java/org/apache/impala/analysis/IcebergPartitionExpr.java | 2 +-
 fe/src/test/java/org/apache/impala/analysis/AnalyzeDDLTest.java       | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git 
a/fe/src/main/java/org/apache/impala/analysis/IcebergPartitionExpr.java 
b/fe/src/main/java/org/apache/impala/analysis/IcebergPartitionExpr.java
index c889fb4e5..52e98dbe8 100644
--- a/fe/src/main/java/org/apache/impala/analysis/IcebergPartitionExpr.java
+++ b/fe/src/main/java/org/apache/impala/analysis/IcebergPartitionExpr.java
@@ -58,7 +58,7 @@ public class IcebergPartitionExpr extends Expr {
       throws AnalysisException {
     partitionSpec_ = partitionSpec;
     FunctionParams params = callExpr.getParams();
-    if (params.size() > 2 && params.size() < 1) {
+    if (params.size() < 1 || params.size() > 2) {
       throw new AnalysisException("Invalid partition predicate: " + 
callExpr.toSql());
     }
     Expr slotRefExpr;
diff --git a/fe/src/test/java/org/apache/impala/analysis/AnalyzeDDLTest.java 
b/fe/src/test/java/org/apache/impala/analysis/AnalyzeDDLTest.java
index 1ac166b17..d832d48fb 100644
--- a/fe/src/test/java/org/apache/impala/analysis/AnalyzeDDLTest.java
+++ b/fe/src/test/java/org/apache/impala/analysis/AnalyzeDDLTest.java
@@ -377,7 +377,7 @@ public class AnalyzeDDLTest extends FrontendTestBase {
     AnalyzesOk(partitioned + "(action = 'click' or action = 'download')");
     AnalyzesOk(partitioned + "(action in ('click', 'download'))");
     AnalyzesOk(partitioned + "(hour(event_time) in ('2020-01-01-9', 
'2020-01-01-1'))");
-    AnalyzesOk(evolution + "(truncate(4,date_string_col,4) = '1231')");
+    AnalyzesOk(evolution + "(truncate(4,date_string_col) = '1231')");
     AnalyzesOk(evolution + "(month = 12)");
     // Paimon ADD/DROP PARTITION Test
     String paimon_partitioned =
@@ -4442,7 +4442,7 @@ public class AnalyzeDDLTest extends FrontendTestBase {
         + " partition (hour(event_time) in ('2020-01-01-9', '2020-01-01-1'))");
     AnalyzesOk(icebergPartitioned
         + " partition (hour(event_time) = '2020-01-01-9', action = 'click')");
-    AnalyzesOk(icebergEvolution + " partition (truncate(4,date_string_col,4) = 
'1231')");
+    AnalyzesOk(icebergEvolution + " partition (truncate(4,date_string_col) = 
'1231')");
     AnalyzesOk(icebergEvolution + " partition (month = 12)");
 
     // Error cases for Iceberg partition filters

Reply via email to