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;
|
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,
|
static int32_t sortPriKeyOptGetSequencingNodesImpl(SLogicNode* pNode, bool groupSort, EOrder sortOrder,
|
||||||
bool* pNotOptimize, SNodeList** pSequencingNodes) {
|
bool* pNotOptimize, SNodeList** pSequencingNodes) {
|
||||||
|
if (sortPriKeyOptHasUnsupportedPkFunc(pNode, sortOrder)) {
|
||||||
|
*pNotOptimize = true;
|
||||||
|
return TSDB_CODE_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
if (NULL != pNode->pLimit || NULL != pNode->pSlimit) {
|
if (NULL != pNode->pLimit || NULL != pNode->pSlimit) {
|
||||||
*pNotOptimize = false;
|
*pNotOptimize = false;
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
|
|
Loading…
Reference in New Issue