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:06 UTC
[doris] 01/01: support delete stmt on materialized-view
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