diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/TableScanParams.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/TableScanParams.java index 77f00af9fa5126..a73b208a6112a7 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/TableScanParams.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/TableScanParams.java @@ -18,6 +18,7 @@ package org.apache.doris.analysis; import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; import org.bouncycastle.util.Strings; import java.util.List; @@ -25,9 +26,13 @@ public class TableScanParams { public static final String PARAMS_NAME = "name"; - public static String INCREMENTAL_READ = "incr"; - public static String BRANCH = "branch"; - public static String TAG = "tag"; + public static final String INCREMENTAL_READ = "incr"; + public static final String BRANCH = "branch"; + public static final String TAG = "tag"; + private static final ImmutableSet VALID_PARAM_TYPES = ImmutableSet.of( + INCREMENTAL_READ, + BRANCH, + TAG); private final String paramType; // There are two ways to pass parameters to a function. @@ -38,10 +43,18 @@ public class TableScanParams { private final Map mapParams; private final List listParams; + private void validate() { + if (!VALID_PARAM_TYPES.contains(paramType)) { + throw new IllegalArgumentException("Invalid param type: " + paramType); + } + // TODO: validate mapParams and listParams for different param types + } + public TableScanParams(String paramType, Map mapParams, List listParams) { this.paramType = Strings.toLowerCase(paramType); this.mapParams = mapParams == null ? ImmutableMap.of() : ImmutableMap.copyOf(mapParams); this.listParams = listParams; + validate(); } public List getListParams() { diff --git a/regression-test/suites/external_table_p0/iceberg/iceberg_query_tag_branch.groovy b/regression-test/suites/external_table_p0/iceberg/iceberg_query_tag_branch.groovy index 4062a6df64944b..1fb21cb8c27f55 100644 --- a/regression-test/suites/external_table_p0/iceberg/iceberg_query_tag_branch.groovy +++ b/regression-test/suites/external_table_p0/iceberg/iceberg_query_tag_branch.groovy @@ -220,6 +220,11 @@ suite("iceberg_query_tag_branch", "p0,external,doris,external_docker,external_do sql """ select * from tag_branch_table@tag(b1) ; """ exception "does not have tag named b1" } + + test { + sql """ select * from tag_branch_table@brand(b1) ; """ + exception "Invalid param type: brand" + } } try { diff --git a/regression-test/suites/external_table_p0/paimon/paimon_time_travel.groovy b/regression-test/suites/external_table_p0/paimon/paimon_time_travel.groovy index b6d3caddb8c4c4..da5bf34a9b4c3b 100644 --- a/regression-test/suites/external_table_p0/paimon/paimon_time_travel.groovy +++ b/regression-test/suites/external_table_p0/paimon/paimon_time_travel.groovy @@ -270,6 +270,11 @@ suite("paimon_time_travel", "p0,external,doris,external_docker,external_docker_d exception "must contain key 'name' in params" } + test { + sql """ select * from ${tableName}@brand('nme'='not_exists_branch'); """ + exception "Invalid param type: brand" + } + } finally { // sql """drop catalog if exists ${catalog_name}""" }