Merge pull request #20685 from taosdata/fix/main_bugfix_wxy
fix: error in determining whether last(t.*) is a selection function
This commit is contained in:
commit
dab01b3159
|
@ -1634,13 +1634,15 @@ static bool isTableStar(SNode* pNode) {
|
||||||
(0 == strcmp(((SColumnNode*)pNode)->colName, "*"));
|
(0 == strcmp(((SColumnNode*)pNode)->colName, "*"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool isStarParam(SNode* pNode) { return isStar(pNode) || isTableStar(pNode); }
|
||||||
|
|
||||||
static int32_t translateMultiResFunc(STranslateContext* pCxt, SFunctionNode* pFunc) {
|
static int32_t translateMultiResFunc(STranslateContext* pCxt, SFunctionNode* pFunc) {
|
||||||
if (!fmIsMultiResFunc(pFunc->funcId)) {
|
if (!fmIsMultiResFunc(pFunc->funcId)) {
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
if (SQL_CLAUSE_SELECT != pCxt->currClause) {
|
if (SQL_CLAUSE_SELECT != pCxt->currClause) {
|
||||||
SNode* pPara = nodesListGetNode(pFunc->pParameterList, 0);
|
SNode* pPara = nodesListGetNode(pFunc->pParameterList, 0);
|
||||||
if (isStar(pPara) || isTableStar(pPara)) {
|
if (isStarParam(pPara)) {
|
||||||
return generateSyntaxErrMsgExt(&pCxt->msgBuf, TSDB_CODE_PAR_NOT_ALLOWED_FUNC,
|
return generateSyntaxErrMsgExt(&pCxt->msgBuf, TSDB_CODE_PAR_NOT_ALLOWED_FUNC,
|
||||||
"%s(*) is only supported in SELECTed list", pFunc->functionName);
|
"%s(*) is only supported in SELECTed list", pFunc->functionName);
|
||||||
}
|
}
|
||||||
|
@ -1654,7 +1656,7 @@ static int32_t translateMultiResFunc(STranslateContext* pCxt, SFunctionNode* pFu
|
||||||
|
|
||||||
static int32_t getMultiResFuncNum(SNodeList* pParameterList) {
|
static int32_t getMultiResFuncNum(SNodeList* pParameterList) {
|
||||||
if (1 == LIST_LENGTH(pParameterList)) {
|
if (1 == LIST_LENGTH(pParameterList)) {
|
||||||
return isStar(nodesListGetNode(pParameterList, 0)) ? 2 : 1;
|
return isStarParam(nodesListGetNode(pParameterList, 0)) ? 2 : 1;
|
||||||
}
|
}
|
||||||
return LIST_LENGTH(pParameterList);
|
return LIST_LENGTH(pParameterList);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1089,9 +1089,15 @@ static int32_t doCreateExchangePhysiNode(SPhysiPlanContext* pCxt, SExchangeLogic
|
||||||
pExchange->srcStartGroupId = pExchangeLogicNode->srcStartGroupId;
|
pExchange->srcStartGroupId = pExchangeLogicNode->srcStartGroupId;
|
||||||
pExchange->srcEndGroupId = pExchangeLogicNode->srcEndGroupId;
|
pExchange->srcEndGroupId = pExchangeLogicNode->srcEndGroupId;
|
||||||
pExchange->seqRecvData = pExchangeLogicNode->seqRecvData;
|
pExchange->seqRecvData = pExchangeLogicNode->seqRecvData;
|
||||||
*pPhyNode = (SPhysiNode*)pExchange;
|
|
||||||
|
|
||||||
return TSDB_CODE_SUCCESS;
|
int32_t code = setConditionsSlotId(pCxt, (const SLogicNode*)pExchangeLogicNode, (SPhysiNode*)pExchange);
|
||||||
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
|
*pPhyNode = (SPhysiNode*)pExchange;
|
||||||
|
} else {
|
||||||
|
nodesDestroyNode((SNode*)pExchange);
|
||||||
|
}
|
||||||
|
|
||||||
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t createStreamScanPhysiNodeByExchange(SPhysiPlanContext* pCxt, SExchangeLogicNode* pExchangeLogicNode,
|
static int32_t createStreamScanPhysiNodeByExchange(SPhysiPlanContext* pCxt, SExchangeLogicNode* pExchangeLogicNode,
|
||||||
|
@ -1119,6 +1125,9 @@ static int32_t createStreamScanPhysiNodeByExchange(SPhysiPlanContext* pCxt, SExc
|
||||||
if (TSDB_CODE_SUCCESS == code) {
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
code = addDataBlockSlots(pCxt, pScan->pScanCols, pScan->node.pOutputDataBlockDesc);
|
code = addDataBlockSlots(pCxt, pScan->pScanCols, pScan->node.pOutputDataBlockDesc);
|
||||||
}
|
}
|
||||||
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
|
code = setConditionsSlotId(pCxt, (const SLogicNode*)pExchangeLogicNode, (SPhysiNode*)pScan);
|
||||||
|
}
|
||||||
|
|
||||||
if (TSDB_CODE_SUCCESS == code) {
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
*pPhyNode = (SPhysiNode*)pScan;
|
*pPhyNode = (SPhysiNode*)pScan;
|
||||||
|
|
|
@ -1365,7 +1365,8 @@ static int32_t unAllSplCreateExchangeNode(SSplitContext* pCxt, int32_t startGrou
|
||||||
pExchange->srcEndGroupId = pCxt->groupId - 1;
|
pExchange->srcEndGroupId = pCxt->groupId - 1;
|
||||||
pExchange->node.precision = pProject->node.precision;
|
pExchange->node.precision = pProject->node.precision;
|
||||||
pExchange->node.pTargets = nodesCloneList(pProject->node.pTargets);
|
pExchange->node.pTargets = nodesCloneList(pProject->node.pTargets);
|
||||||
if (NULL == pExchange->node.pTargets) {
|
pExchange->node.pConditions = nodesCloneNode(pProject->node.pConditions);
|
||||||
|
if (NULL == pExchange->node.pTargets || (NULL != pProject->node.pConditions && NULL == pExchange->node.pConditions)) {
|
||||||
return TSDB_CODE_OUT_OF_MEMORY;
|
return TSDB_CODE_OUT_OF_MEMORY;
|
||||||
}
|
}
|
||||||
TSWAP(pExchange->node.pLimit, pProject->node.pLimit);
|
TSWAP(pExchange->node.pLimit, pProject->node.pLimit);
|
||||||
|
|
Loading…
Reference in New Issue