You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by GitBox <gi...@apache.org> on 2019/12/27 12:55:42 UTC

[GitHub] [incubator-doris] morningman commented on a change in pull request #2553: Add filter conditions for 'show partitions from table' syntax

morningman commented on a change in pull request #2553: Add filter conditions for 'show partitions from table' syntax
URL: https://github.com/apache/incubator-doris/pull/2553#discussion_r361656737
 
 

 ##########
 File path: fe/src/main/java/org/apache/doris/common/proc/PartitionsProcDir.java
 ##########
 @@ -65,8 +84,125 @@ public PartitionsProcDir(Database db, OlapTable olapTable) {
         this.olapTable = olapTable;
     }
 
-    @Override
-    public ProcResult fetchResult() throws AnalysisException {
+    public boolean filter(String columnName, Comparable element, Map<String, Expr> filterMap) throws AnalysisException {
+        if (filterMap == null) {
+            return true;
+        }
+        Expr subExpr = filterMap.get(columnName.toLowerCase());
+        if (subExpr == null) {
+            return true;
+        }
+        if (subExpr instanceof BinaryPredicate) {
+            BinaryPredicate binaryPredicate = (BinaryPredicate) subExpr;
+            if (subExpr.getChild(1) instanceof StringLiteral && binaryPredicate.getOp() == BinaryPredicate.Operator.EQ) {
+                return ((StringLiteral) subExpr.getChild(1)).getValue().equals(element);
+            }
+            long leftVal;
+            long rightVal;
+            if (subExpr.getChild(1) instanceof DateLiteral) {
+                leftVal = (new DateLiteral((String) element, Type.DATETIME)).getLongValue();
+                rightVal = ((DateLiteral) subExpr.getChild(1)).getLongValue();
+            } else {
+                leftVal = Long.parseLong(element.toString());
+                rightVal = ((IntLiteral)subExpr.getChild(1)).getLongValue();
+            }
+            switch (binaryPredicate.getOp()) {
+                case EQ:
+                case EQ_FOR_NULL:
+                    return leftVal == rightVal;
+                case GE:
+                    return leftVal >= rightVal;
+                case GT:
+                    return leftVal > rightVal;
+                case LE:
+                    return leftVal <= rightVal;
+                case LT:
+                    return leftVal < rightVal;
+                case NE:
+                    return leftVal != rightVal;
+                default:
+                    Preconditions.checkState(false, "No defined binary operator.");
+            }
+        } else {
+            return like((String)element, ((StringLiteral) subExpr.getChild(1)).getValue());
+        }
+        return true;
+    }
+
+    public boolean like(String str, String expr) {
+        expr = expr.toLowerCase();
+        expr = expr.replace(".", "\\.");
+        expr = expr.replace("?", ".");
+        expr = expr.replace("%", ".*");
+        str = str.toLowerCase();
+        return str.matches(expr);
+    }
+
+    public ProcResult fetchResultByFilter(Map<String, Expr> filterMap, List<OrderByPair> orderByPairs, LimitElement limitElement) throws AnalysisException {
+        List<List<Comparable>> partitionInfos = getPartitionInfos();
+        List<List<Comparable>> filterPartitionInfos = null;
+        //where
+        if (filterMap == null || filterMap.isEmpty()) {
+            filterPartitionInfos = partitionInfos;
+        } else {
+            filterPartitionInfos = Lists.newArrayList();
+            for (List<Comparable> partitionInfo : partitionInfos) {
+                if (partitionInfo.size() != TITLE_NAMES.size()) {
+                    LOG.warn("ParttitionInfos.size() " + partitionInfos.size()
 
 Review comment:
   I think this is bug and should throw exception?

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org