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

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


The following commit(s) were added to refs/heads/master by this push:
     new 8249441335 [Bug](planner) add conjunct slotref id to table function 
node to avoid result incorrect (#18063)
8249441335 is described below

commit 82494413358fd523b4c9c9503663d42c15e4399b
Author: Pxl <pxl...@qq.com>
AuthorDate: Fri Mar 24 14:48:03 2023 +0800

    [Bug](planner) add conjunct slotref id to table function node to avoid 
result incorrect (#18063)
    
    add conjunct slotref id to table function node to avoid result incorrect
---
 .../org/apache/doris/planner/TableFunctionNode.java   | 11 +++++++++++
 .../query_p0/sql_functions/table_function/explode.out | 17 +++++++++++++++++
 .../sql_functions/table_function/explode.groovy       | 19 +++++++++++++++++++
 3 files changed, 47 insertions(+)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/planner/TableFunctionNode.java 
b/fe/fe-core/src/main/java/org/apache/doris/planner/TableFunctionNode.java
index 92e1d7cdaf..80ca77da84 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/planner/TableFunctionNode.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/planner/TableFunctionNode.java
@@ -148,6 +148,17 @@ public class TableFunctionNode extends PlanNode {
     public void init(Analyzer analyzer) throws UserException {
         super.init(analyzer);
         fnCallExprList = new ArrayList<>(lateralViewRefs.stream().map(e -> 
e.getFnExpr()).collect(Collectors.toList()));
+        Set<SlotRef> outputSlotRef = Sets.newHashSet();
+        for (Expr expr : conjuncts) {
+            expr.getSlotRefsBoundByTupleIds(tupleIds, outputSlotRef);
+            Expr dst = outputSmap.get(expr);
+            if (dst != null) {
+                dst.getSlotRefsBoundByTupleIds(tupleIds, outputSlotRef);
+            }
+        }
+        for (SlotRef slotRef : outputSlotRef) {
+            outputSlotIds.add(slotRef.getSlotId());
+        }
         /*
         When the expression of the lateral view involves the column of the 
subquery,
         the column needs to be rewritten as the real column in the subquery 
through childrenSmap.
diff --git 
a/regression-test/data/query_p0/sql_functions/table_function/explode.out 
b/regression-test/data/query_p0/sql_functions/table_function/explode.out
index 55bd9056c6..c3e327625a 100644
--- a/regression-test/data/query_p0/sql_functions/table_function/explode.out
+++ b/regression-test/data/query_p0/sql_functions/table_function/explode.out
@@ -29,3 +29,20 @@
 1
 \N
 
+-- !test1 --
+0
+1
+2
+3
+4
+
+-- !test2 --
+1
+
+-- !test3 --
+0      1
+1      1
+2      1
+3      1
+4      1
+
diff --git 
a/regression-test/suites/query_p0/sql_functions/table_function/explode.groovy 
b/regression-test/suites/query_p0/sql_functions/table_function/explode.groovy
index ebcee70ddf..7118ebf43b 100644
--- 
a/regression-test/suites/query_p0/sql_functions/table_function/explode.groovy
+++ 
b/regression-test/suites/query_p0/sql_functions/table_function/explode.groovy
@@ -30,4 +30,23 @@ suite("explode") {
     // array with null elements
     qt_explode """ select e1 from (select 1 k1) as t lateral view 
explode([null,1,null]) tmp1 as e1; """
     qt_explode_outer """ select e1 from (select 1 k1) as t lateral view 
explode_outer([null,1,null]) tmp1 as e1; """
+
+    sql """ DROP TABLE IF EXISTS d_table; """
+    sql """
+            create table d_table(
+                k1 int null,
+                k2 int not null,
+                k3 bigint null,
+                k4 varchar(100) null
+            )
+            duplicate key (k1,k2,k3)
+            distributed BY hash(k1) buckets 3
+            properties("replication_num" = "1");
+        """
+
+    sql "insert into d_table select 1,1,1,'a';"
+
+    qt_test1 """select e1 from (select k1 from d_table) as t lateral view 
explode_numbers(5) tmp1 as e1;"""
+    qt_test2 """select e1 from (select k1 from d_table) as t lateral view 
explode_numbers(5) tmp1 as e1 where e1=k1;"""
+    qt_test3 """select e1,k1 from (select k1 from d_table) as t lateral view 
explode_numbers(5) tmp1 as e1;"""
 }


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

Reply via email to