diff --git a/src/client/src/tscSQLParser.c b/src/client/src/tscSQLParser.c index 9a88ff8437947c90e462a4c74b9a70a5f41e9b76..0f8118e7202f8199de9bbcbc04768353e7014721 100644 --- a/src/client/src/tscSQLParser.c +++ b/src/client/src/tscSQLParser.c @@ -2031,13 +2031,7 @@ static bool willProcessFunctionWithExpr(const tSqlExprItem* pItem) { if (TSDB_FUNC_IS_SCALAR(functionId)) { return true; - } else if (functionId == TSDB_FUNC_SUM || - functionId == TSDB_FUNC_AVG || - functionId == TSDB_FUNC_MAX || - functionId == TSDB_FUNC_MIN) { - return true; } - return false; } @@ -4449,6 +4443,24 @@ static int32_t validateSQLExprTerm(SSqlCmd* pCmd, tSqlExpr* pExpr, if (ret != TSDB_CODE_SUCCESS) { return ret; } + + { + tSqlExpr* leftChild = pExpr->pLeft; + tSqlExpr* rightChild = pExpr->pRight; + // return invalid operation when one child aggregate and the other child scalar or column + if (leftChild->type == SQL_NODE_SQLFUNCTION && !TSDB_FUNC_IS_SCALAR(leftChild->functionId)) { + if ((rightChild->type == SQL_NODE_SQLFUNCTION && TSDB_FUNC_IS_SCALAR(rightChild->functionId)) || + rightChild->type == SQL_NODE_TABLE_COLUMN) { + return TSDB_CODE_TSC_INVALID_OPERATION; + } + } + if (rightChild->type == SQL_NODE_SQLFUNCTION && !TSDB_FUNC_IS_SCALAR(rightChild->functionId)) { + if ((leftChild->type == SQL_NODE_SQLFUNCTION && TSDB_FUNC_IS_SCALAR(leftChild->functionId)) || + leftChild->type == SQL_NODE_TABLE_COLUMN) { + return TSDB_CODE_TSC_INVALID_OPERATION; + } + } + } if (uidLeft != uidRight && uidLeft != 0 && uidRight != 0) { return TSDB_CODE_TSC_INVALID_OPERATION;