You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by pa...@apache.org on 2023/10/23 03:46:05 UTC

[doris] branch pick_1023 created (now a81948e46e0)

This is an automated email from the ASF dual-hosted git repository.

panxiaolei pushed a change to branch pick_1023
in repository https://gitbox.apache.org/repos/asf/doris.git


      at a81948e46e0 support delete stmt on materialized-view

This branch includes the following new commits:

     new a81948e46e0 support delete stmt on materialized-view

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



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


[doris] 01/01: support delete stmt on materialized-view

Posted by pa...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

panxiaolei pushed a commit to branch pick_1023
in repository https://gitbox.apache.org/repos/asf/doris.git

commit a81948e46e0056cb1cac56c0f0f022bd54151263
Author: BiteTheDDDDt <px...@qq.com>
AuthorDate: Mon Oct 23 11:45:53 2023 +0800

    support delete stmt on materialized-view
---
 .../java/org/apache/doris/load/DeleteHandler.java  |  4 ++++
 .../main/java/org/apache/doris/task/PushTask.java  | 27 +++++++++++++++++-----
 2 files changed, 25 insertions(+), 6 deletions(-)

diff --git a/fe/fe-core/src/main/java/org/apache/doris/load/DeleteHandler.java b/fe/fe-core/src/main/java/org/apache/doris/load/DeleteHandler.java
index dbf303f10fb..e86fa933e2b 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/load/DeleteHandler.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/load/DeleteHandler.java
@@ -18,6 +18,7 @@
 package org.apache.doris.load;
 
 import org.apache.doris.analysis.BinaryPredicate;
+import org.apache.doris.analysis.CreateMaterializedViewStmt;
 import org.apache.doris.analysis.DateLiteral;
 import org.apache.doris.analysis.DeleteStmt;
 import org.apache.doris.analysis.InPredicate;
@@ -785,6 +786,9 @@ public class DeleteHandler implements Writable {
                 SlotRef slotRef = getSlotRef(condition);
                 String columnName = slotRef.getColumnName();
                 Column column = indexColNameToColumn.get(columnName);
+                if (column == null) {
+                    column = indexColNameToColumn.get(CreateMaterializedViewStmt.mvColumnBuilder(columnName));
+                }
                 if (column == null) {
                     ErrorReport.reportDdlException(ErrorCode.ERR_BAD_FIELD_ERROR,
                             columnName, "index[" + indexName + "]");
diff --git a/fe/fe-core/src/main/java/org/apache/doris/task/PushTask.java b/fe/fe-core/src/main/java/org/apache/doris/task/PushTask.java
index fb61fe356d3..dd301728787 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/task/PushTask.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/task/PushTask.java
@@ -19,6 +19,7 @@ package org.apache.doris.task;
 
 import org.apache.doris.analysis.BinaryPredicate;
 import org.apache.doris.analysis.BinaryPredicate.Operator;
+import org.apache.doris.analysis.CreateMaterializedViewStmt;
 import org.apache.doris.analysis.InPredicate;
 import org.apache.doris.analysis.IsNullPredicate;
 import org.apache.doris.analysis.LiteralExpr;
@@ -35,11 +36,15 @@ import org.apache.doris.thrift.TPushType;
 import org.apache.doris.thrift.TResourceInfo;
 import org.apache.doris.thrift.TTaskType;
 
+import com.google.common.collect.Maps;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 
 public class PushTask extends AgentTask {
     private static final Logger LOG = LogManager.getLogger(PushTask.class);
@@ -127,33 +132,43 @@ public class PushTask extends AgentTask {
                 break;
             case DELETE:
                 List<TCondition> tConditions = new ArrayList<TCondition>();
+                Map<String, TColumn> colNameToColDesc = columnsDesc.stream()
+                        .collect(Collectors.toMap(c -> c.getColumnName(), Function.identity(), (v1, v2) -> v1,
+                                () -> Maps.newTreeMap(String.CASE_INSENSITIVE_ORDER)));
                 for (Predicate condition : conditions) {
                     TCondition tCondition = new TCondition();
                     ArrayList<String> conditionValues = new ArrayList<String>();
+
+                    SlotRef slotRef = (SlotRef) condition.getChild(0);
+                    String columnName = new String(slotRef.getColumnName());
+                    TColumn column = colNameToColDesc.get(slotRef.getColumnName());
+                    if (column == null) {
+                        columnName = CreateMaterializedViewStmt.mvColumnBuilder(columnName);
+                        column = colNameToColDesc.get(columnName);
+                        // condition's name and column's name may have inconsistent case
+                        columnName = column.getColumnName();
+                    }
+
+                    tCondition.setColumnName(columnName);
+
                     if (condition instanceof BinaryPredicate) {
                         BinaryPredicate binaryPredicate = (BinaryPredicate) condition;
-                        String columnName = ((SlotRef) binaryPredicate.getChild(0)).getColumnName();
                         String value = ((LiteralExpr) binaryPredicate.getChild(1)).getStringValue();
                         Operator op = binaryPredicate.getOp();
-                        tCondition.setColumnName(columnName);
                         tCondition.setConditionOp(op.toString());
                         conditionValues.add(value);
                     } else if (condition instanceof IsNullPredicate) {
                         IsNullPredicate isNullPredicate = (IsNullPredicate) condition;
-                        String columnName = ((SlotRef) isNullPredicate.getChild(0)).getColumnName();
                         String op = "IS";
                         String value = "NULL";
                         if (isNullPredicate.isNotNull()) {
                             value = "NOT NULL";
                         }
-                        tCondition.setColumnName(columnName);
                         tCondition.setConditionOp(op);
                         conditionValues.add(value);
                     } else if (condition instanceof InPredicate) {
                         InPredicate inPredicate = (InPredicate) condition;
-                        String columnName = ((SlotRef) inPredicate.getChild(0)).getColumnName();
                         String op = inPredicate.isNotIn() ? "!*=" : "*=";
-                        tCondition.setColumnName(columnName);
                         tCondition.setConditionOp(op);
                         for (int i = 1; i <= inPredicate.getInElementNum(); i++) {
                             conditionValues.add(inPredicate.getChild(i).getStringValue());


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