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 <[email protected]> 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: [email protected] For additional commands, e-mail: [email protected]
