You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by mo...@apache.org on 2022/07/09 04:39:19 UTC

[doris] branch dev-1.0.1-v20220709 created (now 3d1d8ebdce)

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

morningman pushed a change to branch dev-1.0.1-v20220709
in repository https://gitbox.apache.org/repos/asf/doris.git


      at 3d1d8ebdce [tmpfix] expr compose and replace bug

This branch includes the following new commits:

     new 3d1d8ebdce [tmpfix] expr compose and replace bug

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: [tmpfix] expr compose and replace bug

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

morningman pushed a commit to branch dev-1.0.1-v20220709
in repository https://gitbox.apache.org/repos/asf/doris.git

commit 3d1d8ebdce6edcb9b02d8598b830e3293b7b097d
Author: morningman <mo...@apache.org>
AuthorDate: Sat Jul 9 12:39:01 2022 +0800

    [tmpfix] expr compose and replace bug
---
 be/src/vec/exprs/vslot_ref.cpp                     |  5 +++--
 .../apache/doris/analysis/ExprSubstitutionMap.java | 23 +++++++++++++++++-----
 .../org/apache/doris/planner/HashJoinNode.java     |  2 +-
 3 files changed, 22 insertions(+), 8 deletions(-)

diff --git a/be/src/vec/exprs/vslot_ref.cpp b/be/src/vec/exprs/vslot_ref.cpp
index 57038eb63f..8cbc56cb37 100644
--- a/be/src/vec/exprs/vslot_ref.cpp
+++ b/be/src/vec/exprs/vslot_ref.cpp
@@ -20,6 +20,7 @@
 #include <fmt/format.h>
 
 #include "runtime/descriptors.h"
+#include "util/stack_util.h"
 
 namespace doris::vectorized {
 using doris::Status;
@@ -59,7 +60,7 @@ Status VSlotRef::prepare(doris::RuntimeState* state, const doris::RowDescriptor&
 }
 
 Status VSlotRef::execute(VExprContext* context, Block* block, int* result_column_id) {
-    DCHECK_GE(_column_id, 0);
+    CHECK_GE(_column_id, 0) << ", " << debug_string() << ", " << get_stack_trace();
     *result_column_id = _column_id;
     return Status::OK();
 }
@@ -69,7 +70,7 @@ const std::string& VSlotRef::expr_name() const {
 }
 std::string VSlotRef::debug_string() const {
     std::stringstream out;
-    out << "SlotRef(slot_id=" << _slot_id << VExpr::debug_string() << ")";
+    out << "SlotRef(slot_id=" << _slot_id << VExpr::debug_string() << ") column id: " << _column_id << ", name: " << *_column_name << ", is nulable: " << _is_nullable;
     return out.str();
 }
 } // namespace doris::vectorized
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/ExprSubstitutionMap.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/ExprSubstitutionMap.java
index e0df525ce5..6fe94f8578 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/ExprSubstitutionMap.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/ExprSubstitutionMap.java
@@ -17,6 +17,8 @@
 
 package org.apache.doris.analysis;
 
+import org.apache.doris.common.AnalysisException;
+
 import java.util.List;
 import java.util.Objects;
 
@@ -189,7 +191,7 @@ public final class ExprSubstitutionMap {
      * f [A.id, B.id] [A.name, B.name] g [A.id, C.id] [A.age, C.age]
      * return: [A.id, C,id] [A.name, B.name] [A.age, C.age]
      */
-    public static ExprSubstitutionMap composeAndReplace(ExprSubstitutionMap f, ExprSubstitutionMap g) {
+    public static ExprSubstitutionMap composeAndReplace(ExprSubstitutionMap f, ExprSubstitutionMap g, Analyzer analyzer) throws AnalysisException {
         if (f == null && g == null) {
             return new ExprSubstitutionMap();
         }
@@ -200,11 +202,22 @@ public final class ExprSubstitutionMap {
             return f;
         }
         ExprSubstitutionMap result = new ExprSubstitutionMap();
-        result = ExprSubstitutionMap.combine(result, g);
+        // compose f and g
         for (int i = 0; i < g.size(); i++) {
-            // case a->b, b->c => a->c
-            if (f.mappingForRhsExpr(g.getLhs().get(i)) != null) {
-                result.getLhs().set(i, f.mappingForRhsExpr(g.getLhs().get(i)));
+            boolean findGMatch = false;
+            Expr gLhs = g.getLhs().get(i);
+            for (int j = 0; j < f.size(); j++) {
+                // case a->fn(b), b->c => a->fn(c)
+                Expr fRhs = f.getRhs().get(j);
+                if (fRhs.contains(gLhs)) {
+                    Expr newRhs = fRhs.trySubstitute(g, analyzer, false);
+                    result.put(f.getLhs().get(j), newRhs);
+                    findGMatch = true;
+                    break;
+                }
+            }
+            if (!findGMatch) {
+                result.put(g.getLhs().get(i), g.getRhs().get(i));
             }
         }
         // add remaining f
diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/HashJoinNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/HashJoinNode.java
index 16e82b644f..f0c20ebec1 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/planner/HashJoinNode.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/planner/HashJoinNode.java
@@ -441,7 +441,7 @@ public class HashJoinNode extends PlanNode {
             }
         }
         // 4. change the outputSmap
-        outputSmap = ExprSubstitutionMap.composeAndReplace(outputSmap, srcTblRefToOutputTupleSmap);
+        outputSmap = ExprSubstitutionMap.composeAndReplace(outputSmap, srcTblRefToOutputTupleSmap, analyzer);
     }
 
     private void replaceOutputSmapForOuterJoin() {


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