Merge pull request #13478 from taosdata/fix/ZhiqiangWang/TD-15849-add-win32-udf-case
fix(os): add win32 udf case
This commit is contained in:
commit
03ed83e0b0
|
@ -401,9 +401,17 @@ void udfdProcessRpcRsp(void *parent, SRpcMsg *pMsg, SEpSet *pEpSet) {
|
||||||
udf->bufSize = pFuncInfo->bufSize;
|
udf->bufSize = pFuncInfo->bufSize;
|
||||||
|
|
||||||
char path[PATH_MAX] = {0};
|
char path[PATH_MAX] = {0};
|
||||||
|
#ifdef WINDOWS
|
||||||
|
snprintf(path, sizeof(path), "%s%s.dll", TD_TMP_DIR_PATH, pFuncInfo->name);
|
||||||
|
#else
|
||||||
snprintf(path, sizeof(path), "%s/lib%s.so", TD_TMP_DIR_PATH, pFuncInfo->name);
|
snprintf(path, sizeof(path), "%s/lib%s.so", TD_TMP_DIR_PATH, pFuncInfo->name);
|
||||||
|
#endif
|
||||||
TdFilePtr file =
|
TdFilePtr file =
|
||||||
taosOpenFile(path, TD_FILE_CREATE | TD_FILE_WRITE | TD_FILE_READ | TD_FILE_TRUNC | TD_FILE_AUTO_DEL);
|
taosOpenFile(path, TD_FILE_CREATE | TD_FILE_WRITE | TD_FILE_READ | TD_FILE_TRUNC | TD_FILE_AUTO_DEL);
|
||||||
|
if (file == NULL) {
|
||||||
|
fnError("udfd write udf shared library: %s failed, error: %d %s", path, errno, strerror(errno));
|
||||||
|
msgInfo->code = TSDB_CODE_FILE_CORRUPTED;
|
||||||
|
}
|
||||||
int64_t count = taosWriteFile(file, pFuncInfo->pCode, pFuncInfo->codeSize);
|
int64_t count = taosWriteFile(file, pFuncInfo->pCode, pFuncInfo->codeSize);
|
||||||
if (count != pFuncInfo->codeSize) {
|
if (count != pFuncInfo->codeSize) {
|
||||||
fnError("udfd write udf shared library failed");
|
fnError("udfd write udf shared library failed");
|
||||||
|
|
|
@ -9,15 +9,15 @@
|
||||||
#undef free
|
#undef free
|
||||||
#define free free
|
#define free free
|
||||||
|
|
||||||
int32_t udf1_init() {
|
DLL_EXPORT int32_t udf1_init() {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t udf1_destroy() {
|
DLL_EXPORT int32_t udf1_destroy() {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t udf1(SUdfDataBlock* block, SUdfColumn *resultCol) {
|
DLL_EXPORT int32_t udf1(SUdfDataBlock* block, SUdfColumn *resultCol) {
|
||||||
SUdfColumnMeta *meta = &resultCol->colMeta;
|
SUdfColumnMeta *meta = &resultCol->colMeta;
|
||||||
meta->bytes = 4;
|
meta->bytes = 4;
|
||||||
meta->type = TSDB_DATA_TYPE_INT;
|
meta->type = TSDB_DATA_TYPE_INT;
|
||||||
|
|
|
@ -9,22 +9,22 @@
|
||||||
#undef free
|
#undef free
|
||||||
#define free free
|
#define free free
|
||||||
|
|
||||||
int32_t udf2_init() {
|
DLL_EXPORT int32_t udf2_init() {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t udf2_destroy() {
|
DLL_EXPORT int32_t udf2_destroy() {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t udf2_start(SUdfInterBuf *buf) {
|
DLL_EXPORT int32_t udf2_start(SUdfInterBuf *buf) {
|
||||||
*(int64_t*)(buf->buf) = 0;
|
*(int64_t*)(buf->buf) = 0;
|
||||||
buf->bufLen = sizeof(double);
|
buf->bufLen = sizeof(double);
|
||||||
buf->numOfResult = 0;
|
buf->numOfResult = 0;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t udf2(SUdfDataBlock* block, SUdfInterBuf *interBuf, SUdfInterBuf *newInterBuf) {
|
DLL_EXPORT int32_t udf2(SUdfDataBlock* block, SUdfInterBuf *interBuf, SUdfInterBuf *newInterBuf) {
|
||||||
double sumSquares = *(double*)interBuf->buf;
|
double sumSquares = *(double*)interBuf->buf;
|
||||||
int8_t numNotNull = 0;
|
int8_t numNotNull = 0;
|
||||||
for (int32_t i = 0; i < block->numOfCols; ++i) {
|
for (int32_t i = 0; i < block->numOfCols; ++i) {
|
||||||
|
@ -71,7 +71,7 @@ int32_t udf2(SUdfDataBlock* block, SUdfInterBuf *interBuf, SUdfInterBuf *newInte
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t udf2_finish(SUdfInterBuf* buf, SUdfInterBuf *resultData) {
|
DLL_EXPORT int32_t udf2_finish(SUdfInterBuf* buf, SUdfInterBuf *resultData) {
|
||||||
if (buf->numOfResult == 0) {
|
if (buf->numOfResult == 0) {
|
||||||
resultData->numOfResult = 0;
|
resultData->numOfResult = 0;
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -399,6 +399,9 @@ int64_t taosPReadFile(TdFilePtr pFile, void *buf, int64_t count, int64_t offset)
|
||||||
}
|
}
|
||||||
|
|
||||||
int64_t taosWriteFile(TdFilePtr pFile, const void *buf, int64_t count) {
|
int64_t taosWriteFile(TdFilePtr pFile, const void *buf, int64_t count) {
|
||||||
|
if (pFile == NULL) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
#if FILE_WITH_LOCK
|
#if FILE_WITH_LOCK
|
||||||
taosThreadRwlockWrlock(&(pFile->rwlock));
|
taosThreadRwlockWrlock(&(pFile->rwlock));
|
||||||
#endif
|
#endif
|
||||||
|
@ -430,6 +433,9 @@ int64_t taosWriteFile(TdFilePtr pFile, const void *buf, int64_t count) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int64_t taosLSeekFile(TdFilePtr pFile, int64_t offset, int32_t whence) {
|
int64_t taosLSeekFile(TdFilePtr pFile, int64_t offset, int32_t whence) {
|
||||||
|
if (pFile == NULL) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
#if FILE_WITH_LOCK
|
#if FILE_WITH_LOCK
|
||||||
taosThreadRwlockRdlock(&(pFile->rwlock));
|
taosThreadRwlockRdlock(&(pFile->rwlock));
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -276,7 +276,8 @@ int32_t taosGetEmail(char *email, int32_t maxLen) {
|
||||||
|
|
||||||
int32_t taosGetOsReleaseName(char *releaseName, int32_t maxLen) {
|
int32_t taosGetOsReleaseName(char *releaseName, int32_t maxLen) {
|
||||||
#ifdef WINDOWS
|
#ifdef WINDOWS
|
||||||
assert(0);
|
snprintf(releaseName, maxLen, "Windows");
|
||||||
|
return 0;
|
||||||
#elif defined(_TD_DARWIN_64)
|
#elif defined(_TD_DARWIN_64)
|
||||||
char *line = NULL;
|
char *line = NULL;
|
||||||
size_t size = 0;
|
size_t size = 0;
|
||||||
|
@ -332,7 +333,15 @@ int32_t taosGetOsReleaseName(char *releaseName, int32_t maxLen) {
|
||||||
|
|
||||||
int32_t taosGetCpuInfo(char *cpuModel, int32_t maxLen, float *numOfCores) {
|
int32_t taosGetCpuInfo(char *cpuModel, int32_t maxLen, float *numOfCores) {
|
||||||
#ifdef WINDOWS
|
#ifdef WINDOWS
|
||||||
assert(0);
|
char value[100];
|
||||||
|
DWORD bufferSize = sizeof(value);
|
||||||
|
RegGetValue(HKEY_LOCAL_MACHINE, "HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0", "ProcessorNameString", RRF_RT_ANY, NULL, (PVOID)&value, &bufferSize);
|
||||||
|
tstrncpy(cpuModel, value, maxLen);
|
||||||
|
SYSTEM_INFO si;
|
||||||
|
memset(&si,0,sizeof(SYSTEM_INFO));
|
||||||
|
GetSystemInfo(&si);
|
||||||
|
*numOfCores = si.dwNumberOfProcessors;
|
||||||
|
return 0;
|
||||||
#elif defined(_TD_DARWIN_64)
|
#elif defined(_TD_DARWIN_64)
|
||||||
char *line = NULL;
|
char *line = NULL;
|
||||||
size_t size = 0;
|
size_t size = 0;
|
||||||
|
|
|
@ -767,32 +767,36 @@ void taosSetSystemTimezone(const char *inTimezoneStr, char *outTimezoneStr, int8
|
||||||
keyValue[4] = (keyValue[4] == '+' ? '-' : '+');
|
keyValue[4] = (keyValue[4] == '+' ? '-' : '+');
|
||||||
keyValue[10] = 0;
|
keyValue[10] = 0;
|
||||||
sprintf(winStr, "TZ=%s:00", &(keyValue[1]));
|
sprintf(winStr, "TZ=%s:00", &(keyValue[1]));
|
||||||
|
*tsTimezone = taosStr2Int32(&keyValue[4], NULL, 10);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
char *p = strchr(inTimezoneStr, '+');
|
if (winStr[0] == 0) {
|
||||||
if (p == NULL) p = strchr(inTimezoneStr, '-');
|
char *p = strchr(inTimezoneStr, '+');
|
||||||
if (p == NULL) {
|
if (p == NULL) p = strchr(inTimezoneStr, '-');
|
||||||
sprintf(winStr, "TZ=UTC+00:00:00");
|
if (p != NULL) {
|
||||||
} else {
|
char *pp = strchr(inTimezoneStr, '(');
|
||||||
sprintf(winStr, "TZ=UTC%c%c%c:%c%c:00", (p[0] == '+' ? '-' : '+'), p[1], p[2], p[3], p[4]);
|
char *ppp = strchr(inTimezoneStr, ',');
|
||||||
|
int indexStr;
|
||||||
|
if (pp == NULL || ppp == NULL) {
|
||||||
|
indexStr = sprintf(winStr, "TZ=UTC");
|
||||||
|
} else {
|
||||||
|
memcpy(winStr, "TZ=", 3);
|
||||||
|
pp++;
|
||||||
|
memcpy(&winStr[3], pp, ppp - pp);
|
||||||
|
indexStr = ppp - pp + 3;
|
||||||
|
}
|
||||||
|
sprintf(&winStr[indexStr], "%c%c%c:%c%c:00", (p[0] == '+'? '-' : '+'), p[1], p[2], p[3], p[4]);
|
||||||
|
*tsTimezone = taosStr2Int32(p, NULL, 10);
|
||||||
|
} else {
|
||||||
|
*tsTimezone = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
_putenv(winStr);
|
_putenv(winStr);
|
||||||
_tzset();
|
_tzset();
|
||||||
#ifdef _MSC_VER
|
strcpy(outTimezoneStr, inTimezoneStr);
|
||||||
#if _MSC_VER >= 1900
|
*outDaylight = 0;
|
||||||
int64_t timezone = _timezone;
|
|
||||||
int32_t daylight = _daylight;
|
|
||||||
char **tzname = _tzname;
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int32_t tz = (int32_t)((-timezone * MILLISECOND_PER_SECOND) / MILLISECOND_PER_HOUR);
|
|
||||||
*tsTimezone = tz;
|
|
||||||
tz += daylight;
|
|
||||||
sprintf(outTimezoneStr, "%s (%s, %s%02d00)", buf, tzname[daylight], tz >= 0 ? "+" : "-", abs(tz));
|
|
||||||
*outDaylight = daylight;
|
|
||||||
|
|
||||||
#elif defined(_TD_DARWIN_64)
|
#elif defined(_TD_DARWIN_64)
|
||||||
|
|
||||||
|
@ -822,34 +826,27 @@ void taosSetSystemTimezone(const char *inTimezoneStr, char *outTimezoneStr, int8
|
||||||
void taosGetSystemTimezone(char *outTimezoneStr, enum TdTimezone *tsTimezone) {
|
void taosGetSystemTimezone(char *outTimezoneStr, enum TdTimezone *tsTimezone) {
|
||||||
#ifdef WINDOWS
|
#ifdef WINDOWS
|
||||||
char value[100];
|
char value[100];
|
||||||
|
char keyPath[100];
|
||||||
DWORD bufferSize = sizeof(value);
|
DWORD bufferSize = sizeof(value);
|
||||||
char *buf = getenv("TZ");
|
RegGetValue(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Control\\TimeZoneInformation", "TimeZoneKeyName", RRF_RT_ANY, NULL, (PVOID)&value, &bufferSize);
|
||||||
if (buf == NULL || strlen(buf) == 0) {
|
strcpy(outTimezoneStr, "not configured");
|
||||||
RegGetValue(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Control\\TimeZoneInformation", "TimeZoneKeyName", RRF_RT_ANY, NULL, (PVOID)&value, &bufferSize);
|
*tsTimezone = 0;
|
||||||
strcpy(outTimezoneStr, "not configured");
|
if (bufferSize > 0) {
|
||||||
if (bufferSize > 0) {
|
for (size_t i = 0; i < 139; i++) {
|
||||||
for (size_t i = 0; i < 139; i++) {
|
if (strcmp(win_tz[i][0],value) == 0) {
|
||||||
if (strcmp(win_tz[i][0],value) == 0) {
|
strcpy(outTimezoneStr, win_tz[i][1]);
|
||||||
strcpy(outTimezoneStr, win_tz[i][1]);
|
bufferSize = sizeof(value);
|
||||||
break;
|
sprintf(keyPath, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Time Zones\\%s",value);
|
||||||
|
RegGetValue(HKEY_LOCAL_MACHINE, keyPath, "Display", RRF_RT_ANY, NULL, (PVOID)&value, &bufferSize);
|
||||||
|
if (bufferSize > 0) {
|
||||||
|
// value[4] = (value[4] == '+' ? '-' : '+');
|
||||||
|
sprintf(outTimezoneStr, "%s (UTC, %c%c%c%c%c)", outTimezoneStr, value[4], value[5], value[6], value[8], value[9]);
|
||||||
|
*tsTimezone = taosStr2Int32(&value[4], NULL, 10);
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
strcpy(outTimezoneStr, buf);
|
|
||||||
}
|
}
|
||||||
#ifdef _MSC_VER
|
|
||||||
#if _MSC_VER >= 1900
|
|
||||||
// see https://docs.microsoft.com/en-us/cpp/c-runtime-library/daylight-dstbias-timezone-and-tzname?view=vs-2019
|
|
||||||
int64_t timezone = _timezone;
|
|
||||||
int32_t daylight = _daylight;
|
|
||||||
char **tzname = _tzname;
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
int32_t tz = (int32_t)((-timezone * MILLISECOND_PER_SECOND) / MILLISECOND_PER_HOUR);
|
|
||||||
*tsTimezone = tz;
|
|
||||||
tz += daylight;
|
|
||||||
sprintf(outTimezoneStr, "%s (%s, %s%02d00)", outTimezoneStr, tzname[daylight], tz >= 0 ? "+" : "-", abs(tz));
|
|
||||||
#elif defined(_TD_DARWIN_64)
|
#elif defined(_TD_DARWIN_64)
|
||||||
char buf[4096] = {0};
|
char buf[4096] = {0};
|
||||||
char *tz = NULL;
|
char *tz = NULL;
|
||||||
|
|
|
@ -145,6 +145,12 @@ class TDDnode:
|
||||||
def init(self, path, remoteIP = ""):
|
def init(self, path, remoteIP = ""):
|
||||||
self.path = path
|
self.path = path
|
||||||
self.remoteIP = remoteIP
|
self.remoteIP = remoteIP
|
||||||
|
if (not self.remoteIP == ""):
|
||||||
|
try:
|
||||||
|
self.config = eval(self.remoteIP)
|
||||||
|
self.remote_conn = Connection(host=self.config["host"], port=self.config["port"], user=self.config["user"], connect_kwargs={'password':self.config["password"]})
|
||||||
|
except Exception as r:
|
||||||
|
print(r)
|
||||||
|
|
||||||
def setTestCluster(self, value):
|
def setTestCluster(self, value):
|
||||||
self.testCluster = value
|
self.testCluster = value
|
||||||
|
@ -169,13 +175,6 @@ class TDDnode:
|
||||||
self.cfgDict.update({option: value})
|
self.cfgDict.update({option: value})
|
||||||
|
|
||||||
def remoteExec(self, updateCfgDict, execCmd):
|
def remoteExec(self, updateCfgDict, execCmd):
|
||||||
try:
|
|
||||||
config = eval(self.remoteIP)
|
|
||||||
remote_conn = Connection(host=config["host"], port=config["port"], user=config["user"], connect_kwargs={'password':config["password"]})
|
|
||||||
remote_top_dir = config["path"]
|
|
||||||
except Exception as r:
|
|
||||||
remote_conn = Connection(host=self.remoteIP, port=22, user='root', connect_kwargs={'password':'123456'})
|
|
||||||
remote_top_dir = '~/test'
|
|
||||||
valgrindStr = ''
|
valgrindStr = ''
|
||||||
if (self.valgrind==1):
|
if (self.valgrind==1):
|
||||||
valgrindStr = '-g'
|
valgrindStr = '-g'
|
||||||
|
@ -188,8 +187,8 @@ class TDDnode:
|
||||||
del remoteCfgDict["cfgDir"]
|
del remoteCfgDict["cfgDir"]
|
||||||
remoteCfgDictStr = base64.b64encode(json.dumps(remoteCfgDict).encode()).decode()
|
remoteCfgDictStr = base64.b64encode(json.dumps(remoteCfgDict).encode()).decode()
|
||||||
execCmdStr = base64.b64encode(execCmd.encode()).decode()
|
execCmdStr = base64.b64encode(execCmd.encode()).decode()
|
||||||
with remote_conn.cd((remote_top_dir+sys.path[0].replace(self.path, '')).replace('\\','/')):
|
with self.remote_conn.cd((self.config["path"]+sys.path[0].replace(self.path, '')).replace('\\','/')):
|
||||||
remote_conn.run("python3 ./test.py %s -d %s -e %s"%(valgrindStr,remoteCfgDictStr,execCmdStr))
|
self.remote_conn.run("python3 ./test.py %s -d %s -e %s"%(valgrindStr,remoteCfgDictStr,execCmdStr))
|
||||||
|
|
||||||
def deploy(self, *updatecfgDict):
|
def deploy(self, *updatecfgDict):
|
||||||
self.logDir = "%s/sim/dnode%d/log" % (self.path, self.index)
|
self.logDir = "%s/sim/dnode%d/log" % (self.path, self.index)
|
||||||
|
|
|
@ -3,6 +3,7 @@ import taos
|
||||||
import sys
|
import sys
|
||||||
import time
|
import time
|
||||||
import os
|
import os
|
||||||
|
import platform
|
||||||
|
|
||||||
from util.log import *
|
from util.log import *
|
||||||
from util.sql import *
|
from util.sql import *
|
||||||
|
@ -25,7 +26,7 @@ class TDTestCase:
|
||||||
projPath = selfPath[:selfPath.find("tests")]
|
projPath = selfPath[:selfPath.find("tests")]
|
||||||
|
|
||||||
for root, dirs, files in os.walk(projPath):
|
for root, dirs, files in os.walk(projPath):
|
||||||
if ("taosd" in files):
|
if ("taosd" in files or "taosd.exe" in files):
|
||||||
rootRealPath = os.path.dirname(os.path.realpath(root))
|
rootRealPath = os.path.dirname(os.path.realpath(root))
|
||||||
if ("packaging" not in rootRealPath):
|
if ("packaging" not in rootRealPath):
|
||||||
buildPath = root[:len(root) - len("/build/bin")]
|
buildPath = root[:len(root) - len("/build/bin")]
|
||||||
|
@ -41,11 +42,19 @@ class TDTestCase:
|
||||||
projPath = selfPath[:selfPath.find("tests")]
|
projPath = selfPath[:selfPath.find("tests")]
|
||||||
print(projPath)
|
print(projPath)
|
||||||
|
|
||||||
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")
|
if platform.system().lower() == 'windows':
|
||||||
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 = 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")
|
||||||
os.system("mkdir /tmp/udf/")
|
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")
|
||||||
os.system("cp %s /tmp/udf/ "%libudf1.replace("\n" ,""))
|
if (not tdDnodes.dnodes[0].remoteIP == ""):
|
||||||
os.system("cp %s /tmp/udf/ "%libudf2.replace("\n" ,""))
|
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/libudf2.so',projPath+"\\debug\\build\\lib\\")
|
||||||
|
self.libudf1 = self.libudf1.replace('udf1.dll','libudf1.so')
|
||||||
|
self.libudf2 = self.libudf2.replace('udf2.dll','libudf2.so')
|
||||||
|
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.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.libudf2 = self.libudf2.replace('\r','').replace('\n','')
|
||||||
|
|
||||||
|
|
||||||
def prepare_data(self):
|
def prepare_data(self):
|
||||||
|
@ -136,11 +145,11 @@ class TDTestCase:
|
||||||
|
|
||||||
for i in range(5):
|
for i in range(5):
|
||||||
# create scalar functions
|
# create scalar functions
|
||||||
tdSql.execute("create function udf1 as '/tmp/udf/libudf1.so' outputtype int bufSize 8;")
|
tdSql.execute("create function udf1 as '%s' outputtype int bufSize 8;"%self.libudf1)
|
||||||
|
|
||||||
# create aggregate functions
|
# create aggregate functions
|
||||||
|
|
||||||
tdSql.execute("create aggregate function udf2 as '/tmp/udf/libudf2.so' outputtype double bufSize 8;")
|
tdSql.execute("create aggregate function udf2 as '%s' outputtype double bufSize 8;"%self.libudf2)
|
||||||
|
|
||||||
functions = tdSql.getResult("show functions")
|
functions = tdSql.getResult("show functions")
|
||||||
function_nums = len(functions)
|
function_nums = len(functions)
|
||||||
|
@ -161,11 +170,11 @@ class TDTestCase:
|
||||||
tdLog.info("drop two udf functions success ")
|
tdLog.info("drop two udf functions success ")
|
||||||
|
|
||||||
# create scalar functions
|
# create scalar functions
|
||||||
tdSql.execute("create function udf1 as '/tmp/udf/libudf1.so' outputtype int bufSize 8;")
|
tdSql.execute("create function udf1 as '%s' outputtype int bufSize 8;"%self.libudf1)
|
||||||
|
|
||||||
# create aggregate functions
|
# create aggregate functions
|
||||||
|
|
||||||
tdSql.execute("create aggregate function udf2 as '/tmp/udf/libudf2.so' outputtype double bufSize 8;")
|
tdSql.execute("create aggregate function udf2 as '%s' outputtype double bufSize 8;"%self.libudf2)
|
||||||
|
|
||||||
functions = tdSql.getResult("show functions")
|
functions = tdSql.getResult("show functions")
|
||||||
function_nums = len(functions)
|
function_nums = len(functions)
|
||||||
|
@ -533,8 +542,8 @@ class TDTestCase:
|
||||||
tdSql.query("drop function udf2 ")
|
tdSql.query("drop function udf2 ")
|
||||||
|
|
||||||
# create function without buffer
|
# create function without buffer
|
||||||
tdSql.execute("create function udf1 as '/tmp/udf/libudf1.so' outputtype int")
|
tdSql.execute("create function udf1 as '%s' outputtype int"%self.libudf1)
|
||||||
tdSql.execute("create aggregate function udf2 as '/tmp/udf/libudf2.so' outputtype double")
|
tdSql.execute("create aggregate function udf2 as '%s' outputtype double"%self.libudf2)
|
||||||
udf1_sqls ,udf2_sqls = self.try_query_sql()
|
udf1_sqls ,udf2_sqls = self.try_query_sql()
|
||||||
|
|
||||||
for scalar_sql in udf1_sqls:
|
for scalar_sql in udf1_sqls:
|
||||||
|
@ -549,8 +558,8 @@ class TDTestCase:
|
||||||
tdSql.query("drop function udf2 ")
|
tdSql.query("drop function udf2 ")
|
||||||
|
|
||||||
# create function without buffer
|
# create function without buffer
|
||||||
tdSql.execute("create aggregate function udf1 as '/tmp/udf/libudf1.so' outputtype int bufSize 8 ")
|
tdSql.execute("create aggregate function udf1 as '%s' outputtype int bufSize 8 "%self.libudf1)
|
||||||
tdSql.execute("create function udf2 as '/tmp/udf/libudf2.so' outputtype double bufSize 8")
|
tdSql.execute("create function udf2 as '%s' outputtype double bufSize 8"%self.libudf2)
|
||||||
udf1_sqls ,udf2_sqls = self.try_query_sql()
|
udf1_sqls ,udf2_sqls = self.try_query_sql()
|
||||||
|
|
||||||
for scalar_sql in udf1_sqls:
|
for scalar_sql in udf1_sqls:
|
||||||
|
@ -558,8 +567,8 @@ class TDTestCase:
|
||||||
for aggregate_sql in udf2_sqls:
|
for aggregate_sql in udf2_sqls:
|
||||||
tdSql.error(aggregate_sql)
|
tdSql.error(aggregate_sql)
|
||||||
|
|
||||||
tdSql.execute(" create function db as '/tmp/udf/libudf1.so' outputtype int bufSize 8 ")
|
tdSql.execute(" create function db as '%s' outputtype int bufSize 8 "%self.libudf1)
|
||||||
tdSql.execute(" create aggregate function test as '/tmp/udf/libudf1.so' outputtype int bufSize 8 ")
|
tdSql.execute(" create aggregate function test as '%s' outputtype int bufSize 8 "%self.libudf1)
|
||||||
tdSql.error(" select db(c1) from stb1 ")
|
tdSql.error(" select db(c1) from stb1 ")
|
||||||
tdSql.error(" select db(c1,c6), db(c6) from stb1 ")
|
tdSql.error(" select db(c1,c6), db(c6) from stb1 ")
|
||||||
tdSql.error(" select db(num1,num2), db(num1) from tb ")
|
tdSql.error(" select db(num1,num2), db(num1) from tb ")
|
||||||
|
@ -607,17 +616,17 @@ class TDTestCase:
|
||||||
tdLog.info(" create function name is not build_in functions ")
|
tdLog.info(" create function name is not build_in functions ")
|
||||||
tdSql.execute(" drop function udf1 ")
|
tdSql.execute(" drop function udf1 ")
|
||||||
tdSql.execute(" drop function udf2 ")
|
tdSql.execute(" drop function udf2 ")
|
||||||
tdSql.error("create function max as '/tmp/udf/libudf1.so' outputtype int bufSize 8")
|
tdSql.error("create function max as '%s' outputtype int bufSize 8"%self.libudf1)
|
||||||
tdSql.error("create aggregate function sum as '/tmp/udf/libudf2.so' outputtype double bufSize 8")
|
tdSql.error("create aggregate function sum as '%s' outputtype double bufSize 8"%self.libudf2)
|
||||||
tdSql.error("create function max as '/tmp/udf/libudf1.so' outputtype int bufSize 8")
|
tdSql.error("create function max as '%s' outputtype int bufSize 8"%self.libudf1)
|
||||||
tdSql.error("create aggregate function sum as '/tmp/udf/libudf2.so' outputtype double bufSize 8")
|
tdSql.error("create aggregate function sum as '%s' outputtype double bufSize 8"%self.libudf2)
|
||||||
tdSql.error("create aggregate function tbname as '/tmp/udf/libudf2.so' outputtype double bufSize 8")
|
tdSql.error("create aggregate function tbname as '%s' outputtype double bufSize 8"%self.libudf2)
|
||||||
tdSql.error("create aggregate function function as '/tmp/udf/libudf2.so' outputtype double bufSize 8")
|
tdSql.error("create aggregate function function as '%s' outputtype double bufSize 8"%self.libudf2)
|
||||||
tdSql.error("create aggregate function stable as '/tmp/udf/libudf2.so' outputtype double bufSize 8")
|
tdSql.error("create aggregate function stable as '%s' outputtype double bufSize 8"%self.libudf2)
|
||||||
tdSql.error("create aggregate function union as '/tmp/udf/libudf2.so' outputtype double bufSize 8")
|
tdSql.error("create aggregate function union as '%s' outputtype double bufSize 8"%self.libudf2)
|
||||||
tdSql.error("create aggregate function 123 as '/tmp/udf/libudf2.so' outputtype double bufSize 8")
|
tdSql.error("create aggregate function 123 as '%s' outputtype double bufSize 8"%self.libudf2)
|
||||||
tdSql.error("create aggregate function 123db as '/tmp/udf/libudf2.so' outputtype double bufSize 8")
|
tdSql.error("create aggregate function 123db as '%s' outputtype double bufSize 8"%self.libudf2)
|
||||||
tdSql.error("create aggregate function mnode as '/tmp/udf/libudf2.so' outputtype double bufSize 8")
|
tdSql.error("create aggregate function mnode as '%s' outputtype double bufSize 8"%self.libudf2)
|
||||||
|
|
||||||
def restart_taosd_query_udf(self):
|
def restart_taosd_query_udf(self):
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
|
|
||||||
python3 .\test.py -f 0-others\taosShell.py
|
python3 .\test.py -f 0-others\taosShell.py
|
||||||
python3 .\test.py -f 0-others\taosShellError.py
|
python3 .\test.py -f 0-others\taosShellError.py
|
||||||
python3 .\test.py -f 0-others\taosShellNetChk.py
|
python3 .\test.py -f 0-others\taosShellNetChk.py
|
||||||
|
python3 .\test.py -f 0-others\udfTest.py
|
Loading…
Reference in New Issue