From 89d05296d800b6039c34dacbcc84bf26311e44bc Mon Sep 17 00:00:00 2001 From: slzhou Date: Fri, 10 Mar 2023 14:56:35 +0800 Subject: [PATCH] fix: add varchar/nchar udf support --- include/libs/function/taosudf.h | 1 + source/libs/function/src/udfd.c | 12 ++---------- source/libs/parser/src/parTranslater.c | 1 + 3 files changed, 4 insertions(+), 10 deletions(-) diff --git a/include/libs/function/taosudf.h b/include/libs/function/taosudf.h index 3abefd6979..b4daa895fd 100644 --- a/include/libs/function/taosudf.h +++ b/include/libs/function/taosudf.h @@ -196,6 +196,7 @@ static FORCE_INLINE void udfColDataSetNull(SUdfColumn *pColumn, int32_t row) { udfColDataSetNull_f(pColumn, row); } pColumn->hasNull = true; + pColumn->colData.numOfRows = ((int32_t)(row + 1) > pColumn->colData.numOfRows) ? (int32_t)(row + 1) : pColumn->colData.numOfRows; } static FORCE_INLINE int32_t udfColDataSet(SUdfColumn *pColumn, uint32_t currentRow, const char *pData, bool isNull) { diff --git a/source/libs/function/src/udfd.c b/source/libs/function/src/udfd.c index 1593f97105..4bfa5ceb3b 100644 --- a/source/libs/function/src/udfd.c +++ b/source/libs/function/src/udfd.c @@ -621,11 +621,7 @@ void udfdProcessSetupRequest(SUvUdfWork *uvUdf, SUdfRequest *request) { rsp.code = code; rsp.setupRsp.udfHandle = (int64_t)(handle); rsp.setupRsp.outputType = udf->outputType; - if (!IS_VAR_DATA_TYPE(udf->outputType)) { - rsp.setupRsp.bytes = udf->outputLen; - } else { - rsp.setupRsp.bytes = udf->outputLen + VARSTR_HEADER_SIZE; - } + rsp.setupRsp.bytes = udf->outputLen; rsp.setupRsp.bufSize = udf->bufSize; int32_t len = encodeUdfResponse(NULL, &rsp); @@ -654,11 +650,7 @@ void udfdProcessCallRequest(SUvUdfWork *uvUdf, SUdfRequest *request) { switch (call->callType) { case TSDB_UDF_CALL_SCALA_PROC: { SUdfColumn output = {0}; - if (IS_VAR_DATA_TYPE(udf->outputType)) { - output.colMeta.bytes = udf->outputLen + VARSTR_HEADER_SIZE; - } else { - output.colMeta.bytes = udf->outputLen; - } + output.colMeta.bytes = udf->outputLen; output.colMeta.type = udf->outputType; output.colMeta.precision = 0; output.colMeta.scale = 0; diff --git a/source/libs/parser/src/parTranslater.c b/source/libs/parser/src/parTranslater.c index fdc0a08371..da9c1b9185 100644 --- a/source/libs/parser/src/parTranslater.c +++ b/source/libs/parser/src/parTranslater.c @@ -6395,6 +6395,7 @@ static int32_t translateCreateFunction(STranslateContext* pCxt, SCreateFunctionS req.funcType = pStmt->isAgg ? TSDB_FUNC_TYPE_AGGREGATE : TSDB_FUNC_TYPE_SCALAR; req.scriptType = pStmt->language; req.outputType = pStmt->outputDt.type; + pStmt->outputDt.bytes = calcTypeBytes(pStmt->outputDt); req.outputLen = pStmt->outputDt.bytes; req.bufSize = pStmt->bufSize; int32_t code = readFromFile(pStmt->libraryPath, &req.codeLen, &req.pCode);