diff --git a/src/client/src/tscSQLParser.c b/src/client/src/tscSQLParser.c index 4442338a7bbc8789f883f7a427687130c50a548f..1a3817d7a02523a3d8316dc54bfffbf07c1abe77 100644 --- a/src/client/src/tscSQLParser.c +++ b/src/client/src/tscSQLParser.c @@ -3354,8 +3354,14 @@ int32_t addExprAndResultField(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, int32_t col return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg12); } - if(functionId == TSDB_FUNC_UNIQUE){ - GET_INT64_VAL(val) = MAX_UNIQUE_RESULT_ROWS; + if(functionId == TSDB_FUNC_UNIQUE){ // consider of memory size + if(pSchema->bytes < 10){ + GET_INT64_VAL(val) = MAX_UNIQUE_RESULT_ROWS * 100; + }else if(pSchema->bytes < 100){ + GET_INT64_VAL(val) = MAX_UNIQUE_RESULT_ROWS * 10; + }else{ + GET_INT64_VAL(val) = MAX_UNIQUE_RESULT_ROWS; + } } // todo REFACTOR // set the first column ts for top/bottom query diff --git a/src/query/inc/qResultbuf.h b/src/query/inc/qResultbuf.h index c8779f8130ff9bfb63ae60fd823d2ae01529c092..5191ddab46411032e25f4663122b04931281b132 100644 --- a/src/query/inc/qResultbuf.h +++ b/src/query/inc/qResultbuf.h @@ -78,8 +78,8 @@ typedef struct SDiskbasedResultBuf { #define DEFAULT_INTERN_BUF_PAGE_SIZE (1024L) // in bytes #define PAGE_INFO_INITIALIZER (SPageDiskInfo){-1, -1} -#define MAX_UNIQUE_RESULT_ROWS (1000) -#define MAX_UNIQUE_RESULT_SIZE (1024*1024*1) +#define MAX_UNIQUE_RESULT_ROWS (10000) +#define MAX_UNIQUE_RESULT_SIZE (1024*1024*10) #define MAX_MODE_INNER_RESULT_ROWS (1000000) #define MAX_MODE_INNER_RESULT_SIZE (1024*1024*10) /** diff --git a/src/query/src/qAggMain.c b/src/query/src/qAggMain.c index 7ba858eda09ea8f8356c43be751efccda7487f89..bc403b8b51e10de2081bb9b280c1be2a0a95f896 100644 --- a/src/query/src/qAggMain.c +++ b/src/query/src/qAggMain.c @@ -5346,7 +5346,7 @@ static void unique_function(SQLFunctionCtx *pCtx) { do_unique_function(pCtx, pInfo, k, pData, NULL, pCtx->inputBytes, pCtx->inputType); if (sizeof(SUniqueFuncInfo) + pInfo->num * (sizeof(UniqueUnit) + pCtx->inputBytes + pCtx->tagInfo.tagsLen) >= MAX_UNIQUE_RESULT_SIZE - || (pInfo->num > MAX_UNIQUE_RESULT_ROWS)){ + || (pInfo->num > pCtx->param[0].i64)){ GET_RES_INFO(pCtx)->numOfRes = -1; // mark out of memory return; } @@ -5367,7 +5367,7 @@ static void unique_function_merge(SQLFunctionCtx *pCtx) { do_unique_function(pCtx, pOutput, timestamp, data, tags, pCtx->outputBytes, pCtx->outputType); if (sizeof(SUniqueFuncInfo) + pOutput->num * (sizeof(UniqueUnit) + pCtx->outputBytes + pCtx->tagInfo.tagsLen) >= MAX_UNIQUE_RESULT_SIZE - || (pOutput->num > MAX_UNIQUE_RESULT_ROWS)){ + || (pOutput->num > pCtx->param[0].i64)){ GET_RES_INFO(pCtx)->numOfRes = -1; // mark out of memory return; } diff --git a/src/query/src/qUtil.c b/src/query/src/qUtil.c index 8e39af3e6bc542f958bffd04413e92b4b242a7a3..67dfc130ed58d416500d278c60945114ef8a3fe4 100644 --- a/src/query/src/qUtil.c +++ b/src/query/src/qUtil.c @@ -39,13 +39,10 @@ int32_t getRowNumForMultioutput(SQueryAttr* pQueryAttr, bool topBottomQuery, boo pQueryAttr->pExpr1[i].base.functionId == TSDB_FUNC_BOTTOM || pQueryAttr->pExpr1[i].base.functionId == TSDB_FUNC_SAMPLE || pQueryAttr->pExpr1[i].base.functionId == TSDB_FUNC_HISTOGRAM || - pQueryAttr->pExpr1[i].base.functionId == TSDB_FUNC_TAIL) { + pQueryAttr->pExpr1[i].base.functionId == TSDB_FUNC_TAIL || + pQueryAttr->pExpr1[i].base.functionId == TSDB_FUNC_UNIQUE) { return (int32_t)pQueryAttr->pExpr1[i].base.param[0].i64; } - - if (pQueryAttr->pExpr1[i].base.functionId == TSDB_FUNC_UNIQUE){ - return MAX_UNIQUE_RESULT_ROWS; - } } }