diff --git a/source/common/src/tdatablock.c b/source/common/src/tdatablock.c index 64f56212af..0c38d43543 100644 --- a/source/common/src/tdatablock.c +++ b/source/common/src/tdatablock.c @@ -1707,8 +1707,6 @@ void* tDecodeDataBlock(const void* buf, SSDataBlock* pBlock) { if (IS_VAR_DATA_TYPE(data.info.type)) { buf = taosDecodeBinary(buf, (void**)&data.varmeta.offset, pBlock->info.rows * sizeof(int32_t)); - data.varmeta.length = pBlock->info.rows * sizeof(int32_t); - data.varmeta.allocLen = data.varmeta.length; } else { buf = taosDecodeBinary(buf, (void**)&data.nullbitmap, BitmapLen(pBlock->info.rows)); } @@ -1716,6 +1714,10 @@ void* tDecodeDataBlock(const void* buf, SSDataBlock* pBlock) { int32_t len = 0; buf = taosDecodeFixedI32(buf, &len); buf = taosDecodeBinary(buf, (void**)&data.pData, len); + if (IS_VAR_DATA_TYPE(data.info.type)) { + data.varmeta.length = len; + data.varmeta.allocLen = len; + } taosArrayPush(pBlock->pDataBlock, &data); } return (void*)buf; diff --git a/source/libs/function/src/udfd.c b/source/libs/function/src/udfd.c index f8c4f171ba..088aa62248 100644 --- a/source/libs/function/src/udfd.c +++ b/source/libs/function/src/udfd.c @@ -888,10 +888,11 @@ static int32_t udfdUvInit() { } global.loop = loop; - uv_pipe_init(global.loop, &global.ctrlPipe, 1); - uv_pipe_open(&global.ctrlPipe, 0); - uv_read_start((uv_stream_t *)&global.ctrlPipe, udfdCtrlAllocBufCb, udfdCtrlReadCb); - + if (tsStartUdfd) { // udfd is started by taosd, which shall exit when taosd exit + uv_pipe_init(global.loop, &global.ctrlPipe, 1); + uv_pipe_open(&global.ctrlPipe, 0); + uv_read_start((uv_stream_t *)&global.ctrlPipe, udfdCtrlAllocBufCb, udfdCtrlReadCb); + } getUdfdPipeName(global.listenPipeName, sizeof(global.listenPipeName)); removeListeningPipe(); @@ -979,13 +980,13 @@ int32_t udfdDeinitResidentFuncs() { char* funcName = taosArrayGet(global.residentFuncs, i); SUdf** udfInHash = taosHashGet(global.udfsHash, funcName, strlen(funcName)); if (udfInHash) { - taosHashRemove(global.udfsHash, funcName, strlen(funcName)); SUdf* udf = *udfInHash; if (udf->destroyFunc) { (udf->destroyFunc)(); } uv_dlclose(&udf->lib); taosMemoryFree(udf); + taosHashRemove(global.udfsHash, funcName, strlen(funcName)); } } taosArrayDestroy(global.residentFuncs); diff --git a/source/libs/scalar/src/scalar.c b/source/libs/scalar/src/scalar.c index 7c59c70f30..70d1bb2685 100644 --- a/source/libs/scalar/src/scalar.c +++ b/source/libs/scalar/src/scalar.c @@ -1085,7 +1085,8 @@ EDealRes sclRewriteNonConstOperator(SNode **pNode, SScalarCtx *ctx) { EDealRes sclRewriteFunction(SNode **pNode, SScalarCtx *ctx) { SFunctionNode *node = (SFunctionNode *)*pNode; SNode *tnode = NULL; - if (!fmIsScalarFunc(node->funcId) && (!ctx->dual)) { + if ((!fmIsScalarFunc(node->funcId) && (!ctx->dual)) || + fmIsUserDefinedFunc(node->funcId)) { return DEAL_RES_CONTINUE; }