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

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


The following commit(s) were added to refs/heads/branch-2.0 by this push:
     new 92af9b64957 support delete stmt on materialized-view (#25740)
92af9b64957 is described below

commit 92af9b64957947a3edd9ced887d0ddd48f579907
Author: Pxl <[email protected]>
AuthorDate: Mon Oct 23 11:46:44 2023 +0800

    support delete stmt on materialized-view (#25740)
    
    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: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to