feat: diff/derivate/irate/twa do not support desc order
This commit is contained in:
parent
486a83671c
commit
8d5bed5076
|
@ -1322,8 +1322,56 @@ static bool sortPriKeyOptMayBeOptimized(SLogicNode* pNode) {
|
|||
return true;
|
||||
}
|
||||
|
||||
static bool sortPriKeyOptHasUnsupportedPkFunc(SLogicNode* pLogicNode, EOrder sortOrder) {
|
||||
if (sortOrder == ORDER_ASC) {
|
||||
return false;
|
||||
}
|
||||
|
||||
SNodeList* pFuncList = NULL;
|
||||
switch (nodeType(pLogicNode)) {
|
||||
case QUERY_NODE_LOGIC_PLAN_AGG:
|
||||
pFuncList = ((SAggLogicNode*)pLogicNode)->pAggFuncs;
|
||||
break;
|
||||
case QUERY_NODE_LOGIC_PLAN_WINDOW:
|
||||
pFuncList = ((SWindowLogicNode*)pLogicNode)->pFuncs;
|
||||
break;
|
||||
case QUERY_NODE_LOGIC_PLAN_PARTITION:
|
||||
pFuncList = ((SPartitionLogicNode*)pLogicNode)->pAggFuncs;
|
||||
break;
|
||||
case QUERY_NODE_LOGIC_PLAN_INDEF_ROWS_FUNC:
|
||||
pFuncList = ((SIndefRowsFuncLogicNode*)pLogicNode)->pFuncs;
|
||||
break;
|
||||
case QUERY_NODE_LOGIC_PLAN_INTERP_FUNC:
|
||||
pFuncList = ((SInterpFuncLogicNode*)pLogicNode)->pFuncs;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
SNode* pNode = 0;
|
||||
FOREACH(pNode, pFuncList) {
|
||||
if (nodeType(pNode) != QUERY_NODE_FUNCTION) {
|
||||
continue;
|
||||
}
|
||||
SFunctionNode* pFuncNode = (SFunctionNode*)pLogicNode;
|
||||
if (pFuncNode->hasPk &&
|
||||
(pFuncNode->funcType == FUNCTION_TYPE_DIFF ||
|
||||
pFuncNode->funcType == FUNCTION_TYPE_DERIVATIVE ||
|
||||
pFuncNode->funcType == FUNCTION_TYPE_IRATE ||
|
||||
pFuncNode->funcType == FUNCTION_TYPE_TWA)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
static int32_t sortPriKeyOptGetSequencingNodesImpl(SLogicNode* pNode, bool groupSort, EOrder sortOrder,
|
||||
bool* pNotOptimize, SNodeList** pSequencingNodes) {
|
||||
if (sortPriKeyOptHasUnsupportedPkFunc(pNode, sortOrder)) {
|
||||
*pNotOptimize = true;
|
||||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
if (NULL != pNode->pLimit || NULL != pNode->pSlimit) {
|
||||
*pNotOptimize = false;
|
||||
return TSDB_CODE_SUCCESS;
|
||||
|
|
Loading…
Reference in New Issue