You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by yi...@apache.org on 2024/03/01 06:22:21 UTC

(doris) 04/07: [Bug](delete) ignore case on delete from command and add check on deletejob dispatch (#31593)

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

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

commit ba07acadc28b97a3073abeea54ff5cbb8f31c9ae
Author: Pxl <px...@qq.com>
AuthorDate: Fri Mar 1 11:21:00 2024 +0800

    [Bug](delete) ignore case on delete from command and add check on deletejob dispatch (#31593)
    
    ignore case on delete from command and add check on deletejob dispatch
---
 .../main/java/org/apache/doris/load/DeleteJob.java    | 19 +++++++++++++++++++
 .../trees/plans/commands/DeleteFromCommand.java       |  6 ++++--
 regression-test/suites/mv_p0/k1s2m3/k1s2m3.groovy     |  1 +
 3 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/fe/fe-core/src/main/java/org/apache/doris/load/DeleteJob.java b/fe/fe-core/src/main/java/org/apache/doris/load/DeleteJob.java
index 89d116253af..f2c77df53bc 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/load/DeleteJob.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/load/DeleteJob.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.InPredicate;
 import org.apache.doris.analysis.IsNullPredicate;
 import org.apache.doris.analysis.LiteralExpr;
@@ -78,6 +79,7 @@ import java.util.Map;
 import java.util.Set;
 import java.util.UUID;
 import java.util.concurrent.TimeUnit;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 public class DeleteJob extends AbstractTxnStateChangeCallback implements DeleteJobLifeCycle {
@@ -304,6 +306,23 @@ public class DeleteJob extends AbstractTxnStateChangeCallback implements DeleteJ
                     columnsDesc.add(column.toThrift());
                 }
 
+                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 : deleteConditions) {
+                    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);
+                    }
+                    if (column == null) {
+                        throw new AnalysisException(
+                                "condition's column not founded in index, column=" + columnName + " , index=" + index);
+                    }
+                }
+
                 for (Tablet tablet : index.getTablets()) {
                     long tabletId = tablet.getId();
 
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/DeleteFromCommand.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/DeleteFromCommand.java
index 0fbab6c72bb..43127d097fc 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/DeleteFromCommand.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/DeleteFromCommand.java
@@ -67,6 +67,7 @@ import org.apache.commons.lang3.StringUtils;
 import java.util.List;
 import java.util.Optional;
 import java.util.Set;
+import java.util.TreeSet;
 import java.util.stream.Collectors;
 
 /**
@@ -244,9 +245,10 @@ public class DeleteFromCommand extends Command implements ForwardWithSync {
 
         for (String indexName : table.getIndexNameToId().keySet()) {
             MaterializedIndexMeta meta = table.getIndexMetaByIndexId(table.getIndexIdByName(indexName));
-            Set<String> columns = meta.getSchema().stream()
+            Set<String> columns = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
+            meta.getSchema().stream()
                     .map(col -> org.apache.doris.analysis.CreateMaterializedViewStmt.mvColumnBreaker(col.getName()))
-                    .collect(Collectors.toSet());
+                    .forEach(name -> columns.add(name));
             if (!columns.contains(column.getName())) {
                 throw new AnalysisException("Column[" + column.getName() + "] not exist in index " + indexName
                         + ". maybe you need drop the corresponding materialized-view.");
diff --git a/regression-test/suites/mv_p0/k1s2m3/k1s2m3.groovy b/regression-test/suites/mv_p0/k1s2m3/k1s2m3.groovy
index bc206b61990..890b1106bcb 100644
--- a/regression-test/suites/mv_p0/k1s2m3/k1s2m3.groovy
+++ b/regression-test/suites/mv_p0/k1s2m3/k1s2m3.groovy
@@ -18,6 +18,7 @@
 import org.codehaus.groovy.runtime.IOGroovyMethods
 
 suite ("k1s2m3") {
+    sql "set enable_fallback_to_original_planner = false"
 
     sql """ DROP TABLE IF EXISTS d_table; """
 


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