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
