From 47410db46aab6548de286368b1477addf95a6407 Mon Sep 17 00:00:00 2001 From: slzhou Date: Tue, 26 Mar 2024 16:30:53 +0800 Subject: [PATCH] fix: set hasPk and pkBytes for partial func and merge func --- source/libs/function/src/builtinsimpl.c | 10 ++++++++++ source/libs/function/src/functionMgt.c | 8 ++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/source/libs/function/src/builtinsimpl.c b/source/libs/function/src/builtinsimpl.c index 70fe2b19df..b63fa6a167 100644 --- a/source/libs/function/src/builtinsimpl.c +++ b/source/libs/function/src/builtinsimpl.c @@ -2343,6 +2343,11 @@ EFuncDataRequired firstDynDataReq(void* pRes, SDataBlockInfo* pBlockInfo) { SFirstLastRes* pResult = GET_ROWCELL_INTERBUF(pEntry); if (pResult->hasResult) { + if (pResult->pkBytes > 0) { + pResult->pkData = pResult->buf + pResult->bytes; + } else { + pResult->pkData = NULL; + } if (pResult->ts < pBlockInfo->window.skey) { return FUNC_DATA_REQUIRED_NOT_LOAD; } else if (pResult->ts == pBlockInfo->window.skey && pResult->pkData) { @@ -2366,6 +2371,11 @@ EFuncDataRequired lastDynDataReq(void* pRes, SDataBlockInfo* pBlockInfo) { SFirstLastRes* pResult = GET_ROWCELL_INTERBUF(pEntry); if (pResult->hasResult) { + if (pResult->pkBytes > 0) { + pResult->pkData = pResult->buf + pResult->bytes; + } else { + pResult->pkData = NULL; + } if (pResult->ts > pBlockInfo->window.ekey) { return FUNC_DATA_REQUIRED_NOT_LOAD; } else if (pResult->ts == pBlockInfo->window.ekey && pResult->pkData) { diff --git a/source/libs/function/src/functionMgt.c b/source/libs/function/src/functionMgt.c index 697efb63fd..03bc1b4e59 100644 --- a/source/libs/function/src/functionMgt.c +++ b/source/libs/function/src/functionMgt.c @@ -415,6 +415,8 @@ static int32_t createPartialFunction(const SFunctionNode* pSrcFunc, SFunctionNod int32_t len = snprintf(name, sizeof(name) - 1, "%s.%p", (*pPartialFunc)->functionName, pSrcFunc); taosCreateMD5Hash(name, len); strncpy((*pPartialFunc)->node.aliasName, name, TSDB_COL_NAME_LEN - 1); + (*pPartialFunc)->hasPk = pSrcFunc->hasPk; + (*pPartialFunc)->pkBytes = pSrcFunc->pkBytes; return TSDB_CODE_SUCCESS; } @@ -453,7 +455,8 @@ static int32_t createMidFunction(const SFunctionNode* pSrcFunc, const SFunctionN } else { nodesDestroyList(pParameterList); } - + (*pMidFunc)->hasPk = pPartialFunc->hasPk; + (*pMidFunc)->pkBytes = pPartialFunc->pkBytes; return code; } @@ -482,7 +485,8 @@ static int32_t createMergeFunction(const SFunctionNode* pSrcFunc, const SFunctio } else { nodesDestroyList(pParameterList); } - + (*pMergeFunc)->hasPk = pPartialFunc->hasPk; + (*pMergeFunc)->pkBytes = pPartialFunc->pkBytes; return code; }