fix: taken onCondtion of join node into account when eliminate projects
This commit is contained in:
parent
5ad27aabe7
commit
5b8207556c
|
@ -1693,22 +1693,30 @@ static EDealRes eliminateProjOptCanUseNewChildTargetsImpl(SNode* pNode, void* pC
|
|||
CheckNewChildTargetsCxt* pCxt = pContext;
|
||||
SNode* pTarget = NULL;
|
||||
FOREACH(pTarget, pCxt->pNewChildTargets) {
|
||||
if (!nodesEqualNode(pTarget, pNode)) {
|
||||
pCxt->canUse = false;
|
||||
return DEAL_RES_END;
|
||||
if (nodesEqualNode(pTarget, pNode)) {
|
||||
pCxt->canUse = true;
|
||||
return DEAL_RES_CONTINUE;
|
||||
}
|
||||
}
|
||||
pCxt->canUse = false;
|
||||
return DEAL_RES_END;
|
||||
}
|
||||
return DEAL_RES_CONTINUE;
|
||||
}
|
||||
|
||||
static bool eliminateProjOptCanUseNewChildTargets(SLogicNode* pChild, SNodeList* pNewChildTargets) {
|
||||
if (NULL == pChild->pConditions) {
|
||||
return true;
|
||||
static bool eliminateProjOptCanChildConditionUseChildTargets(SLogicNode* pChild, SNodeList* pNewChildTargets) {
|
||||
if (NULL != pChild->pConditions) {
|
||||
CheckNewChildTargetsCxt cxt = {.pNewChildTargets = pNewChildTargets, .canUse = false};
|
||||
nodesWalkExpr(pChild->pConditions, eliminateProjOptCanUseNewChildTargetsImpl, &cxt);
|
||||
if (!cxt.canUse) return false;
|
||||
}
|
||||
CheckNewChildTargetsCxt cxt = {.pNewChildTargets = pNewChildTargets, .canUse = true};
|
||||
nodesWalkExpr(pChild->pConditions, eliminateProjOptCanUseNewChildTargetsImpl, &cxt);
|
||||
return cxt.canUse;
|
||||
if (QUERY_NODE_LOGIC_PLAN_JOIN == nodeType(pChild) && NULL != ((SJoinLogicNode*)pChild)->pOnConditions) {
|
||||
SJoinLogicNode* pJoinLogicNode = (SJoinLogicNode*)pChild;
|
||||
CheckNewChildTargetsCxt cxt = {.pNewChildTargets = pNewChildTargets, .canUse = false};
|
||||
nodesWalkExpr(pJoinLogicNode->pOnConditions, eliminateProjOptCanUseNewChildTargetsImpl, &cxt);
|
||||
if (!cxt.canUse) return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
static void alignProjectionWithTarget(SLogicNode* pNode) {
|
||||
|
@ -1748,7 +1756,7 @@ static int32_t eliminateProjOptimizeImpl(SOptimizeContext* pCxt, SLogicSubplan*
|
|||
}
|
||||
}
|
||||
}
|
||||
if (eliminateProjOptCanUseNewChildTargets(pChild, pNewChildTargets)) {
|
||||
if (eliminateProjOptCanChildConditionUseChildTargets(pChild, pNewChildTargets)) {
|
||||
nodesDestroyList(pChild->pTargets);
|
||||
pChild->pTargets = pNewChildTargets;
|
||||
} else {
|
||||
|
@ -1760,6 +1768,7 @@ static int32_t eliminateProjOptimizeImpl(SOptimizeContext* pCxt, SLogicSubplan*
|
|||
if (TSDB_CODE_SUCCESS == code) {
|
||||
NODES_CLEAR_LIST(pProjectNode->node.pChildren);
|
||||
nodesDestroyNode((SNode*)pProjectNode);
|
||||
//if pChild is a project logic node, remove its projection which is not reference by its target.
|
||||
alignProjectionWithTarget(pChild);
|
||||
}
|
||||
pCxt->optimized = true;
|
||||
|
|
|
@ -682,7 +682,7 @@ if $data08 != 3 then
|
|||
return -1
|
||||
endi
|
||||
|
||||
sql select st0.f1,st1.f1 from st0, st1 where st0.ts=st1.ts and st0.id1=st1.id1;
|
||||
sql select st0.f1,st1.f1 from st0, st1 where st0.ts=st1.ts and st0.id1=st1.id1 order by st0.f1;
|
||||
if $rows != 25 then
|
||||
return -1
|
||||
endi
|
||||
|
@ -721,22 +721,10 @@ endi
|
|||
if $data01 != @21-03-01 01:00:00.000@ then
|
||||
return -1
|
||||
endi
|
||||
if $data10 != @21-03-02 01:00:00.000@ then
|
||||
if $data50 != @21-03-02 01:00:00.000@ then
|
||||
return -1
|
||||
endi
|
||||
if $data11 != @21-03-02 01:00:00.000@ then
|
||||
return -1
|
||||
endi
|
||||
if $data20 != @21-03-03 01:00:00.000@ then
|
||||
return -1
|
||||
endi
|
||||
if $data21 != @21-03-03 01:00:00.000@ then
|
||||
return -1
|
||||
endi
|
||||
if $data30 != @21-03-04 01:00:00.000@ then
|
||||
return -1
|
||||
endi
|
||||
if $data31 != @21-03-04 01:00:00.000@ then
|
||||
if $data51 != @21-03-02 01:00:00.000@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
|
@ -782,23 +770,23 @@ endi
|
|||
if $data04 != 01 then
|
||||
return -1
|
||||
endi
|
||||
if $data10 != @21-03-02 01:00:00.000@ then
|
||||
if $data50 != @21-03-02 01:00:00.000@ then
|
||||
return -1
|
||||
endi
|
||||
if $data11 != 9901.000000000 then
|
||||
if $data51 != 9901.000000000 then
|
||||
return -1
|
||||
endi
|
||||
if $data12 != 11 then
|
||||
if $data52 != 11 then
|
||||
return -1
|
||||
endi
|
||||
if $data13 != 9911.000000000 then
|
||||
if $data53 != 9911.000000000 then
|
||||
return -1
|
||||
endi
|
||||
if $data14 != 01 then
|
||||
if $data54 != 01 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
sql select last(*) from st0, st1 where st0.ts=st1.ts and st0.id1=st1.id1 interval(10a);
|
||||
sql select _wstart, last(*) from st0, st1 where st0.ts=st1.ts and st0.id1=st1.id1 interval(10a);
|
||||
if $rows != 25 then
|
||||
return -1
|
||||
endi
|
||||
|
@ -830,7 +818,7 @@ if $data08 != 11 then
|
|||
return -1
|
||||
endi
|
||||
|
||||
sql select last(*) from st0, st1 where st0.ts=st1.ts and st0.id1=st1.id1 interval(1d) sliding(1d);
|
||||
sql select _wstart, last(*) from st0, st1 where st0.ts=st1.ts and st0.id1=st1.id1 interval(1d) sliding(1d);
|
||||
if $rows != 5 then
|
||||
return -1
|
||||
endi
|
||||
|
@ -937,7 +925,7 @@ sql select st0.*,st1.* from st0, st1 where st1.id1=st0.id1 and st0.ts=st1.ts and
|
|||
if $rows != 5 then
|
||||
return -1
|
||||
endi
|
||||
if $data00 != @21-03-01 01:00:00.000@ then
|
||||
if $data00 != @21-03-02 01:00:00.000@ then
|
||||
print $data00
|
||||
return -1
|
||||
endi
|
||||
|
@ -965,7 +953,7 @@ endi
|
|||
if $data08 != 3 then
|
||||
return -1
|
||||
endi
|
||||
if $data09 != @21-03-01 01:00:00.000@ then
|
||||
if $data09 != @21-03-02 01:00:00.000@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
|
@ -973,38 +961,23 @@ sql select top(st1.f1, 5) from st0, st1 where st1.id1=st0.id1 and st0.ts=st1.ts
|
|||
if $rows != 5 then
|
||||
return -1
|
||||
endi
|
||||
if $data00 != @21-03-01 05:00:00.000@ then
|
||||
return -1
|
||||
endi
|
||||
if $data01 != 9915 then
|
||||
if $data00 != 9915 then
|
||||
return -1
|
||||
endi
|
||||
if $data10 != @21-03-02 05:00:00.000@ then
|
||||
return -1
|
||||
endi
|
||||
if $data11 != 9915 then
|
||||
if $data10 != 9915 then
|
||||
return -1
|
||||
endi
|
||||
if $data20 != @21-03-03 05:00:00.000@ then
|
||||
return -1
|
||||
endi
|
||||
if $data21 != 9915 then
|
||||
if $data20 != 9915 then
|
||||
return -1
|
||||
endi
|
||||
if $data30 != @21-03-04 05:00:00.000@ then
|
||||
return -1
|
||||
endi
|
||||
if $data31 != 9915 then
|
||||
if $data30 != 9915 then
|
||||
return -1
|
||||
endi
|
||||
if $data40 != @21-03-05 05:00:00.000@ then
|
||||
return -1
|
||||
endi
|
||||
if $data41 != 9915 then
|
||||
if $data40 != 9915 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
sql select top(st0.f1,5) from st0, st1 where st1.id1=st0.id1 and st0.ts=st1.ts and st1.ts=st0.ts and st0.id1=st1.id1;
|
||||
sql select st0.ts, top(st0.f1,5) from st0, st1 where st1.id1=st0.id1 and st0.ts=st1.ts and st1.ts=st0.ts and st0.id1=st1.id1 order by st0.ts;
|
||||
if $rows != 5 then
|
||||
return -1
|
||||
endi
|
||||
|
|
Loading…
Reference in New Issue