fix: fill clause error
This commit is contained in:
parent
2ad70dff1e
commit
79f005552e
|
@ -798,13 +798,13 @@ static bool needFillValue(SNode* pNode) {
|
|||
return hasFillCol;
|
||||
}
|
||||
|
||||
static int32_t partFillExprs(SNodeList* pProjectionList, SNodeList** pFillExprs, SNodeList** pNotFillExprs) {
|
||||
static int32_t partFillExprs(SSelectStmt* pSelect, SNodeList** pFillExprs, SNodeList** pNotFillExprs) {
|
||||
int32_t code = TSDB_CODE_SUCCESS;
|
||||
SNode* pProject = NULL;
|
||||
FOREACH(pProject, pProjectionList) {
|
||||
FOREACH(pProject, pSelect->pProjectionList) {
|
||||
if (needFillValue(pProject)) {
|
||||
code = nodesListMakeStrictAppend(pFillExprs, nodesCloneNode(pProject));
|
||||
} else {
|
||||
} else if (QUERY_NODE_VALUE != nodeType(pProject)) {
|
||||
code = nodesListMakeStrictAppend(pNotFillExprs, nodesCloneNode(pProject));
|
||||
}
|
||||
if (TSDB_CODE_SUCCESS != code) {
|
||||
|
@ -813,6 +813,22 @@ static int32_t partFillExprs(SNodeList* pProjectionList, SNodeList** pFillExprs,
|
|||
break;
|
||||
}
|
||||
}
|
||||
if (!pSelect->isDistinct) {
|
||||
SNode* pOrderExpr = NULL;
|
||||
FOREACH(pOrderExpr, pSelect->pOrderByList) {
|
||||
SNode* pExpr = ((SOrderByExprNode*)pOrderExpr)->pExpr;
|
||||
if (needFillValue(pExpr)) {
|
||||
code = nodesListMakeStrictAppend(pFillExprs, nodesCloneNode(pExpr));
|
||||
} else if (QUERY_NODE_VALUE != nodeType(pExpr)) {
|
||||
code = nodesListMakeStrictAppend(pNotFillExprs, nodesCloneNode(pExpr));
|
||||
}
|
||||
if (TSDB_CODE_SUCCESS != code) {
|
||||
NODES_DESTORY_LIST(*pFillExprs);
|
||||
NODES_DESTORY_LIST(*pNotFillExprs);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return code;
|
||||
}
|
||||
|
||||
|
@ -837,7 +853,7 @@ static int32_t createFillLogicNode(SLogicPlanContext* pCxt, SSelectStmt* pSelect
|
|||
pFill->node.resultDataOrder = pFill->node.requireDataOrder;
|
||||
pFill->inputTsOrder = ORDER_ASC;
|
||||
|
||||
int32_t code = partFillExprs(pSelect->pProjectionList, &pFill->pFillExprs, &pFill->pNotFillExprs);
|
||||
int32_t code = partFillExprs(pSelect, &pFill->pFillExprs, &pFill->pNotFillExprs);
|
||||
if (TSDB_CODE_SUCCESS == code) {
|
||||
code = rewriteExprsForSelect(pFill->pFillExprs, pSelect, SQL_CLAUSE_FILL);
|
||||
}
|
||||
|
|
|
@ -51,6 +51,9 @@ TEST_F(PlanIntervalTest, fill) {
|
|||
|
||||
run("SELECT COUNT(c1), MAX(c3), COUNT(c1) FROM t1 "
|
||||
"WHERE ts > '2022-04-01 00:00:00' and ts < '2022-04-30 23:59:59' INTERVAL(10s) FILL(PREV)");
|
||||
|
||||
run("SELECT COUNT(c1) FROM t1 WHERE ts > '2022-04-01 00:00:00' and ts < '2022-04-30 23:59:59' "
|
||||
"PARTITION BY c2 INTERVAL(10s) FILL(PREV) ORDER BY c2");
|
||||
}
|
||||
|
||||
TEST_F(PlanIntervalTest, selectFunc) {
|
||||
|
|
Loading…
Reference in New Issue