fix: create param node from function node

This commit is contained in:
factosea 2024-01-08 16:43:57 +08:00
parent 8c3fe7cc70
commit 45ec9fcbc8
2 changed files with 10 additions and 9 deletions

View File

@ -1477,6 +1477,16 @@ void createExprFromOneNode(SExprInfo* pExp, SNode* pNode, int16_t slotId) {
SValueNode* pvn = (SValueNode*)p1;
pExp->base.pParam[j].type = FUNC_PARAM_TYPE_VALUE;
nodesValueNodeToVariant(pvn, &pExp->base.pParam[j].param);
} else if (p1->type == QUERY_NODE_FUNCTION) {
if (strcmp(((SFunctionNode*)p1)->functionName, "_select_value") == 0 &&
((SFunctionNode*)p1)->pParameterList->length == 1 &&
((SFunctionNode*)p1)->pParameterList->pHead->pNode->type == QUERY_NODE_COLUMN) {
SColumnNode* pcn = (SColumnNode*)(((SFunctionNode*)p1)->pParameterList->pHead->pNode);
SValueNode* pvn = (SValueNode*)p1;
pExp->base.pParam[j].type = FUNC_PARAM_TYPE_COLUMN;
pExp->base.pParam[j].pCol =
createColumn(pcn->dataBlockId, pcn->slotId, pcn->colId, &pcn->node.resType, pcn->colType);
}
}
}
} else if (type == QUERY_NODE_OPERATOR) {

View File

@ -4513,15 +4513,6 @@ static EDealRes replaceOrderByAliasImpl(SNode** pNode, void* pContext) {
SExprNode* pExpr = (SExprNode*)pProject;
SNode* activeNode = pProject;
if (0 == strcmp(((SColumnRefNode*)*pNode)->colName, pExpr->aliasName)) {
if(QUERY_NODE_FUNCTION == pProject->type && strcmp(((SFunctionNode*)pProject)->functionName, "_select_value") == 0) {
SNode* paramNode = NULL;
FOREACH(paramNode, ((SFunctionNode*)pProject)->pParameterList) {
SExprNode* pExpr2 = (SExprNode*)pProject;
if (0 == strcmp(((SColumnRefNode*)*pNode)->colName, pExpr2->aliasName)) {
activeNode = paramNode;
}
}
}
SNode* pNew = nodesCloneNode(activeNode);
if (NULL == pNew) {
pCxt->pTranslateCxt->errCode = TSDB_CODE_OUT_OF_MEMORY;