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

Reply via email to