[Bug](planner) fix unassigned conjunct assigned on wrong node (#19672)

* fix unassigned conjunct assigned on wrong node
This commit is contained in:
Pxl
2023-05-17 10:28:22 +08:00
committed by GitHub
parent 2d9cc8fe8f
commit d784c99360
3 changed files with 26 additions and 7 deletions

View File

@ -1421,10 +1421,10 @@ public class Analyzer {
}
if (e.isBoundByTupleIds(tupleIds)
&& !e.isAuxExpr()
&& !globalState.assignedConjuncts.contains(e.getId())
&& (!globalState.assignedConjuncts.contains(e.getId()) || e.isConstant())
&& ((inclOjConjuncts && !e.isConstant())
|| (!globalState.ojClauseByConjunct.containsKey(e.getId())
&& !globalState.sjClauseByConjunct.containsKey(e.getId())))) {
|| (!globalState.ojClauseByConjunct.containsKey(e.getId())
&& !globalState.sjClauseByConjunct.containsKey(e.getId())))) {
result.add(e);
}
}
@ -2451,7 +2451,14 @@ public class Analyzer {
* Wrapper around getUnassignedConjuncts(List<TupleId> tupleIds).
*/
public List<Expr> getUnassignedConjuncts(PlanNode node) {
return getUnassignedConjuncts(node.getTblRefIds());
// constant conjuncts should be push down to all leaf node.
// so we need remove constant conjuncts when expr is not a leaf node.
List<Expr> unassigned = getUnassignedConjuncts(node.getTblRefIds());
if (!node.getChildren().isEmpty()) {
unassigned = unassigned.stream()
.filter(e -> !e.isConstant()).collect(Collectors.toList());
}
return unassigned;
}
/**

View File

@ -2885,3 +2885,5 @@ false true true false false
14
15
-- !test --

View File

@ -1241,8 +1241,6 @@ suite("test_join", "query,p0") {
qt_sql """select k1 from test right anti join baseall on false order by k1;"""
// test bucket shuffle join, github issue #6171
sql"""create database if not exists test_issue_6171"""
sql"""use test_issue_6171"""
List table_list = ["T_DORIS_A", "T_DORIS_B", "T_DORIS_C", "T_DORIS_D", "T_DORIS_E"]
List column_list = [",APPLY_CRCL bigint(19)",
",FACTOR_FIN_VALUE decimal(19,2),PRJT_ID bigint(19)",
@ -1261,5 +1259,17 @@ suite("test_join", "query,p0") {
B.FACTOR_FIN_VALUE, D.limit_id desc;"""
logger.info(ret.toString())
assertTrue(ret.toString().contains(" | join op: INNER JOIN(BROADCAST)"))
sql"""drop database test_issue_6171"""
sql """
CREATE TABLE t0(c0 BOOLEAN NOT NULL) DISTRIBUTED BY HASH (c0) BUCKETS 8 PROPERTIES ("replication_num" = "1");
"""
sql """
CREATE TABLE t1(c0 DATETIME NOT NULL) DISTRIBUTED BY HASH (c0) BUCKETS 9 PROPERTIES ("replication_num" = "1");
"""
sql """INSERT INTO t1 (c0) VALUES (DATE '1970-02-15'), (DATE '1970-11-05'), (DATE '1970-07-10');"""
sql """INSERT INTO t1 (c0) VALUES (DATE '1970-04-04');"""
sql """INSERT INTO t1 (c0) VALUES (DATE '1970-09-06');"""
sql """INSERT INTO t0 (c0) VALUES (true);"""
sql """INSERT INTO t0 (c0) VALUES (false);"""
qt_test """SELECT t1.c0 FROM t1 RIGHT JOIN t0 ON true WHERE (abs(1)=0) GROUP BY t1.c0;"""
}