From fb512359809a36ffc4a04ef958865890f59a7609 Mon Sep 17 00:00:00 2001 From: yihaoDeng Date: Thu, 22 Apr 2021 11:40:10 +0800 Subject: [PATCH] fix type bug --- src/client/src/tscSQLParser.c | 6 ++++-- src/query/src/qScript.c | 21 ++++++++++++++++++--- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/client/src/tscSQLParser.c b/src/client/src/tscSQLParser.c index 1db6fbcab0..4bb5782e5b 100644 --- a/src/client/src/tscSQLParser.c +++ b/src/client/src/tscSQLParser.c @@ -311,7 +311,7 @@ int32_t handleUserDefinedFunc(SSqlObj* pSql, struct SSqlInfo* pInfo) { createInfo->path.z[createInfo->path.n] = 0; strdequote(createInfo->path.z); - + if (strlen(createInfo->path.z) >= PATH_MAX) { return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg2); } @@ -320,7 +320,9 @@ int32_t handleUserDefinedFunc(SSqlObj* pSql, struct SSqlInfo* pInfo) { if (ret) { return ret; } - if (!isValidScript(buf, len)) { + //distinguish *.lua and *.so + int32_t pathLen = (int32_t)strlen(createInfo->path.z); + if ((pathLen > 3) && (0 == strncmp(createInfo->path.z + pathLen - 3, "lua", 3)) && !isValidScript(buf, len)) { return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg4); } diff --git a/src/query/src/qScript.c b/src/query/src/qScript.c index e5655cc3b5..9df5c558cf 100644 --- a/src/query/src/qScript.c +++ b/src/query/src/qScript.c @@ -18,6 +18,7 @@ #include "ttype.h" #include "tstrbuild.h" #include "queryLog.h" +#include "ttokendef.h" static ScriptEnvPool *pool = NULL; @@ -226,9 +227,23 @@ void luaValueToTaosType(lua_State *lua, char *interBuf, int32_t *numOfOutput, in break; case LUA_TNUMBER: { - float v = lua_tonumber(lua, -1); - memcpy(interBuf, (char *)&v, oBytes); - sz = 1; + if (oType == TSDB_DATA_TYPE_FLOAT) { + float v = lua_tonumber(lua, -1); + memcpy(interBuf, (char *)&v, oBytes); + sz = 1; + } else if (oType == TSDB_DATA_TYPE_DOUBLE) { + double v = lua_tonumber(lua, -1); + memcpy(interBuf, (char *)&v, oBytes); + sz = 1; + } else if (oType == TSDB_DATA_TYPE_BIGINT) { + int64_t v = lua_tonumber(lua, -1); + memcpy(interBuf, (char *)&v, oBytes); + sz = 1; + } else if (oType <= TSDB_DATA_TYPE_INT) { + int32_t v = lua_tonumber(lua, -1); + memcpy(interBuf, (char *)&v, oBytes); + sz = 1; + } } break; case LUA_TTABLE: