test: add the cast that select field include two udf function
This commit is contained in:
parent
8adcd91420
commit
ba0a6e087f
|
@ -79,6 +79,26 @@ ENDIF ()
|
||||||
target_link_libraries(
|
target_link_libraries(
|
||||||
udf1 PUBLIC os ${LINK_JEMALLOC})
|
udf1 PUBLIC os ${LINK_JEMALLOC})
|
||||||
|
|
||||||
|
|
||||||
|
add_library(udf1_dup STATIC MODULE test/udf1_dup.c)
|
||||||
|
target_include_directories(
|
||||||
|
udf1_dup
|
||||||
|
PUBLIC
|
||||||
|
"${TD_SOURCE_DIR}/include/libs/function"
|
||||||
|
"${TD_SOURCE_DIR}/include/util"
|
||||||
|
"${TD_SOURCE_DIR}/include/common"
|
||||||
|
"${TD_SOURCE_DIR}/include/client"
|
||||||
|
"${TD_SOURCE_DIR}/include/os"
|
||||||
|
PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/inc"
|
||||||
|
)
|
||||||
|
|
||||||
|
IF (TD_LINUX_64 AND JEMALLOC_ENABLED)
|
||||||
|
ADD_DEPENDENCIES(udf1_dup jemalloc)
|
||||||
|
ENDIF ()
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
udf1_dup PUBLIC os ${LINK_JEMALLOC})
|
||||||
|
|
||||||
add_library(udf2 STATIC MODULE test/udf2.c)
|
add_library(udf2 STATIC MODULE test/udf2.c)
|
||||||
target_include_directories(
|
target_include_directories(
|
||||||
udf2
|
udf2
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#ifdef LINUX
|
||||||
|
#include <unistd.h>
|
||||||
|
#endif
|
||||||
|
#ifdef WINDOWS
|
||||||
|
#include <windows.h>
|
||||||
|
#endif
|
||||||
|
#include "taosudf.h"
|
||||||
|
|
||||||
|
|
||||||
|
DLL_EXPORT int32_t udf1_init() { return 0; }
|
||||||
|
|
||||||
|
DLL_EXPORT int32_t udf1_destroy() { return 0; }
|
||||||
|
|
||||||
|
DLL_EXPORT int32_t udf1(SUdfDataBlock *block, SUdfColumn *resultCol) {
|
||||||
|
SUdfColumnData *resultData = &resultCol->colData;
|
||||||
|
for (int32_t i = 0; i < block->numOfRows; ++i) {
|
||||||
|
int j = 0;
|
||||||
|
for (; j < block->numOfCols; ++j) {
|
||||||
|
if (udfColDataIsNull(block->udfCols[j], i)) {
|
||||||
|
udfColDataSetNull(resultCol, i);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (j == block->numOfCols) {
|
||||||
|
int32_t luckyNum = 2;
|
||||||
|
udfColDataSet(resultCol, i, (char *)&luckyNum, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// to simulate actual processing delay by udf
|
||||||
|
#ifdef LINUX
|
||||||
|
usleep(1 * 1000); // usleep takes sleep time in us (1 millionth of a second)
|
||||||
|
#endif
|
||||||
|
#ifdef WINDOWS
|
||||||
|
Sleep(1);
|
||||||
|
#endif
|
||||||
|
resultData->numOfRows = block->numOfRows;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
|
@ -47,14 +47,18 @@ class TDTestCase:
|
||||||
|
|
||||||
if platform.system().lower() == 'windows':
|
if platform.system().lower() == 'windows':
|
||||||
self.libudf1 = subprocess.Popen('(for /r %s %%i in ("udf1.d*") do @echo %%i)|grep lib|head -n1'%projPath , shell=True, stdout=subprocess.PIPE,stderr=subprocess.STDOUT).stdout.read().decode("utf-8")
|
self.libudf1 = subprocess.Popen('(for /r %s %%i in ("udf1.d*") do @echo %%i)|grep lib|head -n1'%projPath , shell=True, stdout=subprocess.PIPE,stderr=subprocess.STDOUT).stdout.read().decode("utf-8")
|
||||||
|
self.libudf1_dup = subprocess.Popen('(for /r %s %%i in ("udf1_dup.d*") do @echo %%i)|grep lib|head -n1'%projPath , shell=True, stdout=subprocess.PIPE,stderr=subprocess.STDOUT).stdout.read().decode("utf-8")
|
||||||
self.libudf2 = subprocess.Popen('(for /r %s %%i in ("udf2.d*") do @echo %%i)|grep lib|head -n1'%projPath , shell=True, stdout=subprocess.PIPE,stderr=subprocess.STDOUT).stdout.read().decode("utf-8")
|
self.libudf2 = subprocess.Popen('(for /r %s %%i in ("udf2.d*") do @echo %%i)|grep lib|head -n1'%projPath , shell=True, stdout=subprocess.PIPE,stderr=subprocess.STDOUT).stdout.read().decode("utf-8")
|
||||||
if (not tdDnodes.dnodes[0].remoteIP == ""):
|
if (not tdDnodes.dnodes[0].remoteIP == ""):
|
||||||
tdDnodes.dnodes[0].remote_conn.get(tdDnodes.dnodes[0].config["path"]+'/debug/build/lib/libudf1.so',projPath+"\\debug\\build\\lib\\")
|
tdDnodes.dnodes[0].remote_conn.get(tdDnodes.dnodes[0].config["path"]+'/debug/build/lib/libudf1.so',projPath+"\\debug\\build\\lib\\")
|
||||||
|
tdDnodes.dnodes[0].remote_conn.get(tdDnodes.dnodes[0].config["path"]+'/debug/build/lib/libudf1_dup.so',projPath+"\\debug\\build\\lib\\")
|
||||||
tdDnodes.dnodes[0].remote_conn.get(tdDnodes.dnodes[0].config["path"]+'/debug/build/lib/libudf2.so',projPath+"\\debug\\build\\lib\\")
|
tdDnodes.dnodes[0].remote_conn.get(tdDnodes.dnodes[0].config["path"]+'/debug/build/lib/libudf2.so',projPath+"\\debug\\build\\lib\\")
|
||||||
self.libudf1 = self.libudf1.replace('udf1.dll','libudf1.so')
|
self.libudf1 = self.libudf1.replace('udf1.dll','libudf1.so')
|
||||||
|
self.libudf1 = self.libudf1.replace('udf1.dll','libudf1_dup.so')
|
||||||
self.libudf2 = self.libudf2.replace('udf2.dll','libudf2.so')
|
self.libudf2 = self.libudf2.replace('udf2.dll','libudf2.so')
|
||||||
else:
|
else:
|
||||||
self.libudf1 = subprocess.Popen('find %s -name "libudf1.so"|grep lib|head -n1'%projPath , shell=True, stdout=subprocess.PIPE,stderr=subprocess.STDOUT).stdout.read().decode("utf-8")
|
self.libudf1 = subprocess.Popen('find %s -name "libudf1.so"|grep lib|head -n1'%projPath , shell=True, stdout=subprocess.PIPE,stderr=subprocess.STDOUT).stdout.read().decode("utf-8")
|
||||||
|
self.libudf1_dup = subprocess.Popen('find %s -name "libudf1_dup.so"|grep lib|head -n1'%projPath , shell=True, stdout=subprocess.PIPE,stderr=subprocess.STDOUT).stdout.read().decode("utf-8")
|
||||||
self.libudf2 = subprocess.Popen('find %s -name "libudf2.so"|grep lib|head -n1'%projPath , shell=True, stdout=subprocess.PIPE,stderr=subprocess.STDOUT).stdout.read().decode("utf-8")
|
self.libudf2 = subprocess.Popen('find %s -name "libudf2.so"|grep lib|head -n1'%projPath , shell=True, stdout=subprocess.PIPE,stderr=subprocess.STDOUT).stdout.read().decode("utf-8")
|
||||||
self.libudf1 = self.libudf1.replace('\r','').replace('\n','')
|
self.libudf1 = self.libudf1.replace('\r','').replace('\n','')
|
||||||
self.libudf2 = self.libudf2.replace('\r','').replace('\n','')
|
self.libudf2 = self.libudf2.replace('\r','').replace('\n','')
|
||||||
|
@ -174,6 +178,7 @@ class TDTestCase:
|
||||||
|
|
||||||
# create scalar functions
|
# create scalar functions
|
||||||
tdSql.execute("create function udf1 as '%s' outputtype int;"%self.libudf1)
|
tdSql.execute("create function udf1 as '%s' outputtype int;"%self.libudf1)
|
||||||
|
tdSql.execute("create function udf1_dup as '%s' outputtype int;"%self.libudf1_dup)
|
||||||
|
|
||||||
# create aggregate functions
|
# create aggregate functions
|
||||||
|
|
||||||
|
@ -188,6 +193,13 @@ class TDTestCase:
|
||||||
|
|
||||||
# scalar functions
|
# scalar functions
|
||||||
|
|
||||||
|
# udf1_dup
|
||||||
|
tdSql.query("select num1 , udf1(num1) ,udf1_dup(num1) from tb")
|
||||||
|
tdSql.checkData(1,0,1)
|
||||||
|
tdSql.checkData(1,1,2)
|
||||||
|
tdSql.checkData(2,0,1)
|
||||||
|
tdSql.checkData(2,1,2)
|
||||||
|
|
||||||
tdSql.execute("use db ")
|
tdSql.execute("use db ")
|
||||||
tdSql.query("select num1 , udf1(num1) ,num2 ,udf1(num2),num3 ,udf1(num3),num4 ,udf1(num4) from tb")
|
tdSql.query("select num1 , udf1(num1) ,num2 ,udf1(num2),num3 ,udf1(num3),num4 ,udf1(num4) from tb")
|
||||||
tdSql.checkData(0,0,None)
|
tdSql.checkData(0,0,None)
|
||||||
|
|
Loading…
Reference in New Issue