fix: keep original udf file name when rename file error
This commit is contained in:
parent
c4d05af01a
commit
ba82f05d68
|
@ -241,7 +241,7 @@ typedef struct SUvUdfWork {
|
||||||
struct SUvUdfWork *pWorkNext;
|
struct SUvUdfWork *pWorkNext;
|
||||||
} SUvUdfWork;
|
} SUvUdfWork;
|
||||||
|
|
||||||
typedef enum { UDF_STATE_INIT = 0, UDF_STATE_LOADING, UDF_STATE_READY} EUdfState;
|
typedef enum { UDF_STATE_INIT = 0, UDF_STATE_LOADING, UDF_STATE_READY } EUdfState;
|
||||||
|
|
||||||
typedef struct SUdf {
|
typedef struct SUdf {
|
||||||
char name[TSDB_FUNC_NAME_LEN + 1];
|
char name[TSDB_FUNC_NAME_LEN + 1];
|
||||||
|
@ -439,7 +439,7 @@ int32_t udfdInitScriptPlugin(int8_t scriptType) {
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
fnError("udf script type %d not supported", scriptType);
|
fnError("udf script type %d not supported", scriptType);
|
||||||
taosMemoryFree(plugin);
|
taosMemoryFree(plugin);
|
||||||
|
@ -509,15 +509,15 @@ int32_t udfdRenameUdfFile(SUdf *udf) {
|
||||||
char newPath[PATH_MAX];
|
char newPath[PATH_MAX];
|
||||||
if (udf->scriptType == TSDB_FUNC_SCRIPT_BIN_LIB) {
|
if (udf->scriptType == TSDB_FUNC_SCRIPT_BIN_LIB) {
|
||||||
snprintf(newPath, PATH_MAX, "%s/lib%s.so", tsTempDir, udf->name);
|
snprintf(newPath, PATH_MAX, "%s/lib%s.so", tsTempDir, udf->name);
|
||||||
taosRenameFile(udf->path, newPath);
|
|
||||||
sprintf(udf->path, "%s", newPath);
|
|
||||||
} else if (udf->scriptType == TSDB_FUNC_SCRIPT_PYTHON) {
|
} else if (udf->scriptType == TSDB_FUNC_SCRIPT_PYTHON) {
|
||||||
snprintf(newPath, PATH_MAX, "%s/%s.py", tsTempDir, udf->name);
|
snprintf(newPath, PATH_MAX, "%s/%s.py", tsTempDir, udf->name);
|
||||||
taosRenameFile(udf->path, newPath);
|
|
||||||
sprintf(udf->path, "%s", newPath);
|
|
||||||
} else {
|
} else {
|
||||||
return TSDB_CODE_UDF_SCRIPT_NOT_SUPPORTED;
|
return TSDB_CODE_UDF_SCRIPT_NOT_SUPPORTED;
|
||||||
}
|
}
|
||||||
|
int32_t code = taosRenameFile(udf->path, newPath);
|
||||||
|
if (code == 0) {
|
||||||
|
sprintf(udf->path, "%s", newPath);
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1358,7 +1358,7 @@ int32_t udfdDeinitResidentFuncs() {
|
||||||
char *funcName = taosArrayGet(global.residentFuncs, i);
|
char *funcName = taosArrayGet(global.residentFuncs, i);
|
||||||
SUdf **udfInHash = taosHashGet(global.udfsHash, funcName, strlen(funcName));
|
SUdf **udfInHash = taosHashGet(global.udfsHash, funcName, strlen(funcName));
|
||||||
if (udfInHash) {
|
if (udfInHash) {
|
||||||
SUdf *udf = *udfInHash;
|
SUdf *udf = *udfInHash;
|
||||||
int32_t code = udf->scriptPlugin->udfDestroyFunc(udf->scriptUdfCtx);
|
int32_t code = udf->scriptPlugin->udfDestroyFunc(udf->scriptUdfCtx);
|
||||||
fnDebug("udfd destroy function returns %d", code);
|
fnDebug("udfd destroy function returns %d", code);
|
||||||
taosHashRemove(global.udfsHash, funcName, strlen(funcName));
|
taosHashRemove(global.udfsHash, funcName, strlen(funcName));
|
||||||
|
|
|
@ -1,61 +1,47 @@
|
||||||
#include <string.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
#include "taosudf.h"
|
#include "taosudf.h"
|
||||||
|
|
||||||
|
DLL_EXPORT int32_t bit_and_init() { return 0; }
|
||||||
|
|
||||||
DLL_EXPORT int32_t bit_and_init() {
|
DLL_EXPORT int32_t bit_and_destroy() { return 0; }
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
DLL_EXPORT int32_t bit_and_destroy() {
|
DLL_EXPORT int32_t bit_and(SUdfDataBlock* block, SUdfColumn* resultCol) {
|
||||||
return 0;
|
if (block->numOfCols < 2) {
|
||||||
}
|
return TSDB_CODE_UDF_INVALID_INPUT;
|
||||||
|
}
|
||||||
|
|
||||||
DLL_EXPORT int32_t bit_and(SUdfDataBlock* block, SUdfColumn *resultCol) {
|
for (int32_t i = 0; i < block->numOfCols; ++i) {
|
||||||
|
SUdfColumn* col = block->udfCols[i];
|
||||||
if (block->numOfCols < 2) {
|
if (!(col->colMeta.type == TSDB_DATA_TYPE_INT)) {
|
||||||
return TSDB_CODE_UDF_INVALID_INPUT;
|
return TSDB_CODE_UDF_INVALID_INPUT;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for (int32_t i = 0; i < block->numOfCols; ++i) {
|
SUdfColumnData* resultData = &resultCol->colData;
|
||||||
SUdfColumn* col = block->udfCols[i];
|
|
||||||
if (!(col->colMeta.type == TSDB_DATA_TYPE_INT)) {
|
for (int32_t i = 0; i < block->numOfRows; ++i) {
|
||||||
return TSDB_CODE_UDF_INVALID_INPUT;
|
if (udfColDataIsNull(block->udfCols[0], i)) {
|
||||||
}
|
udfColDataSetNull(resultCol, i);
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
int32_t result = *(int32_t*)udfColDataGetData(block->udfCols[0], i);
|
||||||
|
int j = 1;
|
||||||
|
for (; j < block->numOfCols; ++j) {
|
||||||
|
if (udfColDataIsNull(block->udfCols[j], i)) {
|
||||||
|
udfColDataSetNull(resultCol, i);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
SUdfColumnMeta *meta = &resultCol->colMeta;
|
char* colData = udfColDataGetData(block->udfCols[j], i);
|
||||||
meta->bytes = 4;
|
result &= *(int32_t*)colData;
|
||||||
meta->type = TSDB_DATA_TYPE_INT;
|
|
||||||
meta->scale = 0;
|
|
||||||
meta->precision = 0;
|
|
||||||
|
|
||||||
|
|
||||||
SUdfColumnData *resultData = &resultCol->colData;
|
|
||||||
|
|
||||||
resultData->numOfRows = block->numOfRows;
|
|
||||||
|
|
||||||
for (int32_t i = 0; i < resultData->numOfRows; ++i) {
|
|
||||||
if (udfColDataIsNull(block->udfCols[0], i)) {
|
|
||||||
udfColDataSetNull(resultCol, i);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
int32_t result = *(int32_t*)udfColDataGetData(block->udfCols[0], i);
|
|
||||||
int j = 1;
|
|
||||||
for (; j < block->numOfCols; ++j) {
|
|
||||||
if (udfColDataIsNull(block->udfCols[j], i)) {
|
|
||||||
udfColDataSetNull(resultCol, i);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
char* colData = udfColDataGetData(block->udfCols[j], i);
|
|
||||||
result &= *(int32_t*)colData;
|
|
||||||
}
|
|
||||||
if (j == block->numOfCols) {
|
|
||||||
udfColDataSet(resultCol, i, (char*)&result, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
return TSDB_CODE_SUCCESS;
|
if (j == block->numOfCols) {
|
||||||
|
udfColDataSet(resultCol, i, (char*)&result, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
resultData->numOfRows = block->numOfRows;
|
||||||
|
|
||||||
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue