This commit is contained in:
factosea 2024-01-11 18:34:21 +08:00
parent c8fb8486ef
commit 3ed63df082
3 changed files with 23 additions and 25 deletions

View File

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

View File

@ -1088,17 +1088,15 @@ static EDealRes translateColumnUseAlias(STranslateContext* pCxt, SColumnNode** p
FOREACH(pNode, pProjectionList) { FOREACH(pNode, pProjectionList) {
SExprNode* pExpr = (SExprNode*)pNode; SExprNode* pExpr = (SExprNode*)pNode;
if (0 == strcmp((*pCol)->colName, pExpr->userAlias)) { if (0 == strcmp((*pCol)->colName, pExpr->userAlias)) {
SColumnRefNode* pColRef = (SColumnRefNode*)nodesMakeNode(QUERY_NODE_COLUMN_REF); SNode* pNew = nodesCloneNode(pNode);
if (NULL == pColRef) { if (NULL == pNew) {
pCxt->errCode = TSDB_CODE_OUT_OF_MEMORY; pCxt->errCode = TSDB_CODE_OUT_OF_MEMORY;
return DEAL_RES_ERROR; return DEAL_RES_ERROR;
} }
strcpy(pColRef->colName, pExpr->aliasName); nodesDestroyNode(*(SNode**)pCol);
pColRef->resType = pExpr->resType; *(SNode**)pCol = (SNode*)pNew;
nodesDestroyNode(*(SNode**)pCol); *pFound = true;
*(SNode**)pCol = (SNode*)pColRef; return DEAL_RES_CONTINUE;
*pFound = true;
return DEAL_RES_CONTINUE;
} }
} }
*pFound = false; *pFound = false;
@ -1316,7 +1314,7 @@ static EDealRes translateColumn(STranslateContext* pCxt, SColumnNode** pCol) {
} else { } else {
bool found = false; bool found = false;
if (SQL_CLAUSE_ORDER_BY == pCxt->currClause) { if (SQL_CLAUSE_ORDER_BY == pCxt->currClause) {
// res = translateColumnUseAlias(pCxt, pCol, &found); res = translateColumnUseAlias(pCxt, pCol, &found);
} }
if (DEAL_RES_ERROR != res && !found) { if (DEAL_RES_ERROR != res && !found) {
if (isSetOperator(pCxt->pCurrStmt)) { if (isSetOperator(pCxt->pCurrStmt)) {

View File

@ -431,7 +431,7 @@ TEST_F(ParserSelectTest, semanticCheck) {
run("SELECT ts, last(ts) FROM t1 order by last(ts)"); run("SELECT ts, last(ts) FROM t1 order by last(ts)");
run("SELECT first(ts), c2 FROM t1 order by last(c1)"); run("SELECT first(ts), c2 FROM t1 order by last(c1)", TSDB_CODE_PAR_NOT_SINGLE_GROUP);
run("SELECT c1 FROM t1 order by concat(c2, 'abc')"); run("SELECT c1 FROM t1 order by concat(c2, 'abc')");