This is an automated email from the ASF dual-hosted git repository. yiguolei pushed a commit to branch branch-3.0 in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-3.0 by this push: new 4d3c77c644e branch-3.0: [Fix](show-stmt) Raise an error when show partitions with complex predicate #45257 (#45518) 4d3c77c644e is described below commit 4d3c77c644eebcf29fdbe19a98b366db50a0363b Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> AuthorDate: Tue Dec 17 22:03:03 2024 +0800 branch-3.0: [Fix](show-stmt) Raise an error when show partitions with complex predicate #45257 (#45518) Cherry-picked from #45257 Co-authored-by: zclllyybb <zhaochan...@selectdb.com> --- .../doris/common/proc/PartitionsProcDir.java | 9 ++++- .../query_p0/show/test_show_partitions.groovy | 39 ++++++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/common/proc/PartitionsProcDir.java b/fe/fe-core/src/main/java/org/apache/doris/common/proc/PartitionsProcDir.java index c76a4185fca..3fd945c013c 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/common/proc/PartitionsProcDir.java +++ b/fe/fe-core/src/main/java/org/apache/doris/common/proc/PartitionsProcDir.java @@ -22,6 +22,7 @@ import org.apache.doris.analysis.DateLiteral; import org.apache.doris.analysis.Expr; import org.apache.doris.analysis.IntLiteral; import org.apache.doris.analysis.LimitElement; +import org.apache.doris.analysis.LiteralExpr; import org.apache.doris.analysis.StringLiteral; import org.apache.doris.catalog.Column; import org.apache.doris.catalog.DataProperty; @@ -94,11 +95,16 @@ public class PartitionsProcDir implements ProcDirInterface { if (filterMap == null) { return true; } - Expr subExpr = filterMap.get(columnName.toLowerCase()); + Expr subExpr = filterMap.get(columnName.toLowerCase()); // predicate on this column. if (subExpr == null) { return true; } if (subExpr instanceof BinaryPredicate) { + // show partitions only provide very limited filtering capacity in FE. so restrict here. + if (!(subExpr.getChild(1) instanceof LiteralExpr)) { + throw new AnalysisException("Not Supported. Use `select * from partitions(...)` instead"); + } + BinaryPredicate binaryPredicate = (BinaryPredicate) subExpr; if (subExpr.getChild(1) instanceof StringLiteral && binaryPredicate.getOp() == BinaryPredicate.Operator.EQ) { @@ -169,6 +175,7 @@ public class PartitionsProcDir implements ProcDirInterface { filterPartitionInfos = partitionInfos; } else { filterPartitionInfos = Lists.newArrayList(); + // TODO: we should change the order of loops to speed up. use filters to filter column value. for (List<Comparable> partitionInfo : partitionInfos) { if (partitionInfo.size() != TITLE_NAMES.size()) { throw new AnalysisException("PartitionInfos.size() " + partitionInfos.size() diff --git a/regression-test/suites/query_p0/show/test_show_partitions.groovy b/regression-test/suites/query_p0/show/test_show_partitions.groovy new file mode 100644 index 00000000000..bf88872029e --- /dev/null +++ b/regression-test/suites/query_p0/show/test_show_partitions.groovy @@ -0,0 +1,39 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +suite("test_show_partitions") { + sql "drop table if exists test_show_part" + sql """ + create table test_show_part ( + month varchar (255), + id int, + code varchar (255), + name varchar (255) + ) ENGINE = OLAP DUPLICATE KEY(month, id) + AUTO PARTITION BY LIST (month)() + distributed by hash (id) buckets auto + PROPERTIES( + "replication_allocation" = "tag.location.default: 1" + ) + """ + sql """ insert into test_show_part(month, id, code, name) values ('2024-12', 10001, 'test10001', 'test') """ + test { + sql "show partitions from test_show_part where PartitionName = auto_partition_name('list','2024-12')" + exception "Not Supported. Use `select * from partitions(...)` instead" + } + sql " show partitions from test_show_part where PartitionName = '123'; " +} \ No newline at end of file --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org