Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
b8cbc935
T
TDengine
项目概览
taosdata
/
TDengine
大约 2 年 前同步成功
通知
1192
Star
22018
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
b8cbc935
编写于
12月 30, 2022
作者:
D
dapan1121
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'origin' into enh/TD-21108
上级
586b73be
fcf64fa3
变更
27
隐藏空白更改
内联
并排
Showing
27 changed file
with
913 addition
and
188 deletion
+913
-188
include/os/osMemory.h
include/os/osMemory.h
+5
-1
include/os/osSystem.h
include/os/osSystem.h
+65
-12
include/util/tcompare.h
include/util/tcompare.h
+16
-13
include/util/tlog.h
include/util/tlog.h
+8
-3
include/util/tutil.h
include/util/tutil.h
+6
-0
source/common/src/tglobal.c
source/common/src/tglobal.c
+2
-0
source/common/src/ttypes.c
source/common/src/ttypes.c
+4
-1
source/dnode/mgmt/mgmt_vnode/src/vmFile.c
source/dnode/mgmt/mgmt_vnode/src/vmFile.c
+13
-5
source/dnode/mgmt/mgmt_vnode/src/vmHandle.c
source/dnode/mgmt/mgmt_vnode/src/vmHandle.c
+4
-3
source/dnode/mgmt/mgmt_vnode/src/vmInt.c
source/dnode/mgmt/mgmt_vnode/src/vmInt.c
+5
-5
source/libs/executor/inc/executorimpl.h
source/libs/executor/inc/executorimpl.h
+2
-0
source/libs/executor/src/timewindowoperator.c
source/libs/executor/src/timewindowoperator.c
+2
-2
source/libs/executor/test/executorTests.cpp
source/libs/executor/test/executorTests.cpp
+13
-0
source/libs/qworker/src/qworker.c
source/libs/qworker/src/qworker.c
+4
-3
source/libs/scalar/inc/sclInt.h
source/libs/scalar/inc/sclInt.h
+0
-3
source/libs/scalar/src/filter.c
source/libs/scalar/src/filter.c
+12
-10
source/libs/scalar/src/sclvector.c
source/libs/scalar/src/sclvector.c
+54
-29
source/libs/scalar/test/scalar/scalarTests.cpp
source/libs/scalar/test/scalar/scalarTests.cpp
+7
-3
source/os/CMakeLists.txt
source/os/CMakeLists.txt
+1
-1
source/os/test/CMakeLists.txt
source/os/test/CMakeLists.txt
+24
-0
source/os/test/osTests.cpp
source/os/test/osTests.cpp
+38
-0
source/util/src/tcompare.c
source/util/src/tcompare.c
+143
-93
source/util/src/tlog.c
source/util/src/tlog.c
+20
-1
source/util/src/tutil.c
source/util/src/tutil.c
+80
-0
source/util/test/utilTests.cpp
source/util/test/utilTests.cpp
+297
-0
tests/parallel_test/cases.task
tests/parallel_test/cases.task
+1
-0
tests/system-test/0-others/backquote_check.py
tests/system-test/0-others/backquote_check.py
+87
-0
未找到文件。
include/os/osMemory.h
浏览文件 @
b8cbc935
...
@@ -22,12 +22,16 @@ extern "C" {
...
@@ -22,12 +22,16 @@ extern "C" {
// If the error is in a third-party library, place this header file under the third-party library header file.
// If the error is in a third-party library, place this header file under the third-party library header file.
// When you want to use this feature, you should find or add the same function in the following sectio
// When you want to use this feature, you should find or add the same function in the following sectio
#if !defined(WINDOWS)
#ifndef ALLOW_FORBID_FUNC
#ifndef ALLOW_FORBID_FUNC
#define malloc MALLOC_FUNC_TAOS_FORBID
#define malloc MALLOC_FUNC_TAOS_FORBID
#define calloc CALLOC_FUNC_TAOS_FORBID
#define calloc CALLOC_FUNC_TAOS_FORBID
#define realloc REALLOC_FUNC_TAOS_FORBID
#define realloc REALLOC_FUNC_TAOS_FORBID
#define free FREE_FUNC_TAOS_FORBID
#define free FREE_FUNC_TAOS_FORBID
#endif
#endif // ifndef ALLOW_FORBID_FUNC
#endif // if !defined(WINDOWS)
void
*
taosMemoryMalloc
(
int64_t
size
);
void
*
taosMemoryMalloc
(
int64_t
size
);
void
*
taosMemoryCalloc
(
int64_t
num
,
int64_t
size
);
void
*
taosMemoryCalloc
(
int64_t
num
,
int64_t
size
);
...
...
include/os/osSystem.h
浏览文件 @
b8cbc935
...
@@ -46,10 +46,12 @@ void taosSetTerminalMode();
...
@@ -46,10 +46,12 @@ void taosSetTerminalMode();
int32_t
taosGetOldTerminalMode
();
int32_t
taosGetOldTerminalMode
();
void
taosResetTerminalMode
();
void
taosResetTerminalMode
();
#define STACKSIZE 100
#if !defined(WINDOWS)
#if !defined(WINDOWS)
#define taosLogTraceToBuf(buf, bufSize, ignoreNum) { \
#define taosLogTraceToBuf(buf, bufSize, ignoreNum) { \
void* array[
100
]; \
void* array[
STACKSIZE
]; \
int32_t size = backtrace(array,
100
); \
int32_t size = backtrace(array,
STACKSIZE
); \
char** strings = backtrace_symbols(array, size); \
char** strings = backtrace_symbols(array, size); \
int32_t offset = 0; \
int32_t offset = 0; \
if (strings != NULL) { \
if (strings != NULL) { \
...
@@ -64,8 +66,8 @@ void taosResetTerminalMode();
...
@@ -64,8 +66,8 @@ void taosResetTerminalMode();
#define taosPrintTrace(flags, level, dflag, ignoreNum) \
#define taosPrintTrace(flags, level, dflag, ignoreNum) \
{ \
{ \
void* array[
100
]; \
void* array[
STACKSIZE
]; \
int32_t size = backtrace(array,
100
); \
int32_t size = backtrace(array,
STACKSIZE
); \
char** strings = backtrace_symbols(array, size); \
char** strings = backtrace_symbols(array, size); \
if (strings != NULL) { \
if (strings != NULL) { \
taosPrintLog(flags, level, dflag, "obtained %d stack frames", (ignoreNum > 0) ? size - ignoreNum : size); \
taosPrintLog(flags, level, dflag, "obtained %d stack frames", (ignoreNum > 0) ? size - ignoreNum : size); \
...
@@ -77,15 +79,66 @@ void taosResetTerminalMode();
...
@@ -77,15 +79,66 @@ void taosResetTerminalMode();
taosMemoryFree(strings); \
taosMemoryFree(strings); \
}
}
#else
#else
#define taosLogTraceToBuf(buf, bufSize, ignoreNum) { \
snprintf(buf, bufSize - 1, \
"backtrace not implemented on windows, so detailed stack information cannot be printed"); \
}
#define taosPrintTrace(flags, level, dflag, ignoreNum) \
#include <windows.h>
{ \
#include <dbghelp.h>
taosPrintLog(flags, level, dflag, \
"backtrace not implemented on windows, so detailed stack information cannot be printed"); \
#define taosLogTraceToBuf(buf, bufSize, ignoreNum) { \
unsigned int i; \
void* stack[STACKSIZE]; \
unsigned short frames; \
SYMBOL_INFO* symbol; \
HANDLE process; \
int32_t offset = 0; \
\
process = GetCurrentProcess(); \
\
SymInitialize(process, NULL, TRUE); \
\
frames = CaptureStackBackTrace(0, STACKSIZE, stack, NULL); \
symbol = (SYMBOL_INFO*)calloc(sizeof(SYMBOL_INFO) + 256 * sizeof(char), 1); \
if (symbol != NULL) { \
symbol->MaxNameLen = 255; \
symbol->SizeOfStruct = sizeof(SYMBOL_INFO); \
\
if (frames > 0) { \
offset = snprintf(buf, bufSize - 1, "obtained %d stack frames", frames); \
for (i = 0; i < frames; i++) { \
SymFromAddr(process, (DWORD64)(stack[i]), 0, symbol); \
offset += snprintf(buf + offset, bufSize - 1 - offset, "frame:%i, %s - 0x%0X", frames - i - 1, symbol->Name, symbol->Address); \
} \
} \
free(symbol); \
} \
}
#define taosPrintTrace(flags, level, dflag, ignoreNum) \
{ \
unsigned int i; \
void* stack[STACKSIZE]; \
unsigned short frames; \
SYMBOL_INFO* symbol; \
HANDLE process; \
\
process = GetCurrentProcess(); \
\
SymInitialize(process, NULL, TRUE); \
\
frames = CaptureStackBackTrace(0, STACKSIZE, stack, NULL); \
symbol = (SYMBOL_INFO*)calloc(sizeof(SYMBOL_INFO) + 256 * sizeof(char), 1); \
if (symbol != NULL) { \
symbol->MaxNameLen = 255; \
symbol->SizeOfStruct = sizeof(SYMBOL_INFO); \
\
if (frames > 0) { \
taosPrintLog(flags, level, dflag, "obtained %d stack frames", frames); \
for (i = 0; i < frames; i++) { \
SymFromAddr(process, (DWORD64)(stack[i]), 0, symbol); \
taosPrintLog(flags, level, dflag, "frame:%i, %s - 0x%0X", frames - i - 1, symbol->Name, symbol->Address); \
} \
} \
free(symbol); \
} \
}
}
#endif
#endif
...
...
include/util/tcompare.h
浏览文件 @
b8cbc935
...
@@ -36,17 +36,18 @@ extern "C" {
...
@@ -36,17 +36,18 @@ extern "C" {
#define FLT_GREATEREQUAL(_x, _y) (FLT_EQUAL((_x), (_y)) || ((_x) > (_y)))
#define FLT_GREATEREQUAL(_x, _y) (FLT_EQUAL((_x), (_y)) || ((_x) > (_y)))
#define FLT_LESSEQUAL(_x, _y) (FLT_EQUAL((_x), (_y)) || ((_x) < (_y)))
#define FLT_LESSEQUAL(_x, _y) (FLT_EQUAL((_x), (_y)) || ((_x) < (_y)))
#define PATTERN_COMPARE_INFO_INITIALIZER \
#define PATTERN_COMPARE_INFO_INITIALIZER { '%', '_', L'%', L'_' }
{ '%', '_' }
typedef
struct
SPatternCompareInfo
{
typedef
struct
SPatternCompareInfo
{
char
matchAll
;
// symbol for match all wildcard, default: '%'
char
matchAll
;
// symbol for match all wildcard, default: '%'
char
matchOne
;
// symbol for match one wildcard, default: '_'
char
matchOne
;
// symbol for match one wildcard, default: '_'
TdUcs4
umatchAll
;
// unicode version matchAll
TdUcs4
umatchOne
;
// unicode version matchOne
}
SPatternCompareInfo
;
}
SPatternCompareInfo
;
int32_t
patternMatch
(
const
char
*
pattern
,
const
char
*
str
,
size_t
size
,
const
SPatternCompareInfo
*
pInfo
);
int32_t
patternMatch
(
const
char
*
pattern
,
size_t
psize
,
const
char
*
str
,
size_t
s
size
,
const
SPatternCompareInfo
*
pInfo
);
int32_t
WCSPatternMatch
(
const
TdUcs4
*
pattern
,
const
TdUcs4
*
str
,
size_t
size
,
const
SPatternCompareInfo
*
pInfo
);
int32_t
wcsPatternMatch
(
const
TdUcs4
*
pattern
,
size_t
psize
,
const
TdUcs4
*
str
,
size_t
s
size
,
const
SPatternCompareInfo
*
pInfo
);
int32_t
taosArrayCompareString
(
const
void
*
a
,
const
void
*
b
);
int32_t
taosArrayCompareString
(
const
void
*
a
,
const
void
*
b
);
...
@@ -79,9 +80,11 @@ int32_t compareDoubleVal(const void *pLeft, const void *pRight);
...
@@ -79,9 +80,11 @@ int32_t compareDoubleVal(const void *pLeft, const void *pRight);
int32_t
compareLenPrefixedStr
(
const
void
*
pLeft
,
const
void
*
pRight
);
int32_t
compareLenPrefixedStr
(
const
void
*
pLeft
,
const
void
*
pRight
);
int32_t
compareLenPrefixedWStr
(
const
void
*
pLeft
,
const
void
*
pRight
);
int32_t
compareLenPrefixedWStr
(
const
void
*
pLeft
,
const
void
*
pRight
);
int32_t
compareStrRegexComp
(
const
void
*
pLeft
,
const
void
*
pRight
);
int32_t
comparestrRegexMatch
(
const
void
*
pLeft
,
const
void
*
pRight
);
int32_t
compareStrRegexCompMatch
(
const
void
*
pLeft
,
const
void
*
pRight
);
int32_t
comparestrRegexNMatch
(
const
void
*
pLeft
,
const
void
*
pRight
);
int32_t
compareStrRegexCompNMatch
(
const
void
*
pLeft
,
const
void
*
pRight
);
int32_t
comparewcsRegexMatch
(
const
void
*
pLeft
,
const
void
*
pRight
);
int32_t
comparewcsRegexNMatch
(
const
void
*
pLeft
,
const
void
*
pRight
);
int32_t
compareInt8ValDesc
(
const
void
*
pLeft
,
const
void
*
pRight
);
int32_t
compareInt8ValDesc
(
const
void
*
pLeft
,
const
void
*
pRight
);
int32_t
compareInt16ValDesc
(
const
void
*
pLeft
,
const
void
*
pRight
);
int32_t
compareInt16ValDesc
(
const
void
*
pLeft
,
const
void
*
pRight
);
...
@@ -99,11 +102,11 @@ int32_t compareUint64ValDesc(const void *pLeft, const void *pRight);
...
@@ -99,11 +102,11 @@ int32_t compareUint64ValDesc(const void *pLeft, const void *pRight);
int32_t
compareLenPrefixedStrDesc
(
const
void
*
pLeft
,
const
void
*
pRight
);
int32_t
compareLenPrefixedStrDesc
(
const
void
*
pLeft
,
const
void
*
pRight
);
int32_t
compareLenPrefixedWStrDesc
(
const
void
*
pLeft
,
const
void
*
pRight
);
int32_t
compareLenPrefixedWStrDesc
(
const
void
*
pLeft
,
const
void
*
pRight
);
int32_t
compare
S
trPatternMatch
(
const
void
*
pLeft
,
const
void
*
pRight
);
int32_t
compare
s
trPatternMatch
(
const
void
*
pLeft
,
const
void
*
pRight
);
int32_t
compare
StrPatternNot
Match
(
const
void
*
pLeft
,
const
void
*
pRight
);
int32_t
compare
strPatternN
Match
(
const
void
*
pLeft
,
const
void
*
pRight
);
int32_t
compare
WStr
PatternMatch
(
const
void
*
pLeft
,
const
void
*
pRight
);
int32_t
compare
wcs
PatternMatch
(
const
void
*
pLeft
,
const
void
*
pRight
);
int32_t
compare
WStrPatternNot
Match
(
const
void
*
pLeft
,
const
void
*
pRight
);
int32_t
compare
wcsPatternN
Match
(
const
void
*
pLeft
,
const
void
*
pRight
);
int32_t
compareInt8Int16
(
const
void
*
pLeft
,
const
void
*
pRight
);
int32_t
compareInt8Int16
(
const
void
*
pLeft
,
const
void
*
pRight
);
int32_t
compareInt8Int32
(
const
void
*
pLeft
,
const
void
*
pRight
);
int32_t
compareInt8Int32
(
const
void
*
pLeft
,
const
void
*
pRight
);
...
...
include/util/tlog.h
浏览文件 @
b8cbc935
...
@@ -83,9 +83,14 @@ void taosPrintLongString(const char *flags, ELogLevel level, int32_t dflag, cons
...
@@ -83,9 +83,14 @@ void taosPrintLongString(const char *flags, ELogLevel level, int32_t dflag, cons
#endif
#endif
;
;
bool
taosAssert
(
bool
condition
,
const
char
*
file
,
int32_t
line
,
const
char
*
format
,
...);
bool
taosAssertDebug
(
bool
condition
,
const
char
*
file
,
int32_t
line
,
const
char
*
format
,
...);
#define ASSERTS(condition, ...) taosAssert(condition, __FILE__, __LINE__, __VA_ARGS__)
bool
taosAssertRelease
(
bool
condition
);
#define ASSERT(condition) ASSERTS(condition, "assert info not provided")
#define ASSERTS(condition, ...) taosAssertDebug(condition, __FILE__, __LINE__, __VA_ARGS__)
#ifdef NDEBUG
#define ASSERT(condition) taosAssertRelease(condition)
#else
#define ASSERT(condition) taosAssertDebug(condition, __FILE__, __LINE__, "assert info not provided")
#endif
void
taosLogCrashInfo
(
char
*
nodeType
,
char
*
pMsg
,
int64_t
msgLen
,
int
signum
,
void
*
sigInfo
);
void
taosLogCrashInfo
(
char
*
nodeType
,
char
*
pMsg
,
int64_t
msgLen
,
int
signum
,
void
*
sigInfo
);
void
taosReadCrashInfo
(
char
*
filepath
,
char
**
pMsg
,
int64_t
*
pMsgLen
,
TdFilePtr
*
pFd
);
void
taosReadCrashInfo
(
char
*
filepath
,
char
**
pMsg
,
int64_t
*
pMsgLen
,
TdFilePtr
*
pFd
);
...
...
include/util/tutil.h
浏览文件 @
b8cbc935
...
@@ -29,11 +29,17 @@ extern "C" {
...
@@ -29,11 +29,17 @@ extern "C" {
int32_t
strdequote
(
char
*
src
);
int32_t
strdequote
(
char
*
src
);
size_t
strtrim
(
char
*
src
);
size_t
strtrim
(
char
*
src
);
char
*
strnchr
(
const
char
*
haystack
,
char
needle
,
int32_t
len
,
bool
skipquote
);
char
*
strnchr
(
const
char
*
haystack
,
char
needle
,
int32_t
len
,
bool
skipquote
);
TdUcs4
*
wcsnchr
(
const
TdUcs4
*
haystack
,
TdUcs4
needle
,
size_t
len
);
char
**
strsplit
(
char
*
src
,
const
char
*
delim
,
int32_t
*
num
);
char
**
strsplit
(
char
*
src
,
const
char
*
delim
,
int32_t
*
num
);
char
*
strtolower
(
char
*
dst
,
const
char
*
src
);
char
*
strtolower
(
char
*
dst
,
const
char
*
src
);
char
*
strntolower
(
char
*
dst
,
const
char
*
src
,
int32_t
n
);
char
*
strntolower
(
char
*
dst
,
const
char
*
src
,
int32_t
n
);
char
*
strntolower_s
(
char
*
dst
,
const
char
*
src
,
int32_t
n
);
char
*
strntolower_s
(
char
*
dst
,
const
char
*
src
,
int32_t
n
);
int64_t
strnatoi
(
char
*
num
,
int32_t
len
);
int64_t
strnatoi
(
char
*
num
,
int32_t
len
);
size_t
tstrncspn
(
const
char
*
str
,
size_t
ssize
,
const
char
*
reject
,
size_t
rsize
);
size_t
twcsncspn
(
const
TdUcs4
*
wcs
,
size_t
size
,
const
TdUcs4
*
reject
,
size_t
rsize
);
char
*
strbetween
(
char
*
string
,
char
*
begin
,
char
*
end
);
char
*
strbetween
(
char
*
string
,
char
*
begin
,
char
*
end
);
char
*
paGetToken
(
char
*
src
,
char
**
token
,
int32_t
*
tokenLen
);
char
*
paGetToken
(
char
*
src
,
char
**
token
,
int32_t
*
tokenLen
);
...
...
source/common/src/tglobal.c
浏览文件 @
b8cbc935
...
@@ -723,6 +723,8 @@ static int32_t taosSetServerCfg(SConfig *pCfg) {
...
@@ -723,6 +723,8 @@ static int32_t taosSetServerCfg(SConfig *pCfg) {
tsNumOfSnodeWriteThreads
=
cfgGetItem
(
pCfg
,
"numOfSnodeUniqueThreads"
)
->
i32
;
tsNumOfSnodeWriteThreads
=
cfgGetItem
(
pCfg
,
"numOfSnodeUniqueThreads"
)
->
i32
;
tsRpcQueueMemoryAllowed
=
cfgGetItem
(
pCfg
,
"rpcQueueMemoryAllowed"
)
->
i64
;
tsRpcQueueMemoryAllowed
=
cfgGetItem
(
pCfg
,
"rpcQueueMemoryAllowed"
)
->
i64
;
tsSIMDBuiltins
=
(
bool
)
cfgGetItem
(
pCfg
,
"SIMD-builtins"
)
->
bval
;
tsEnableMonitor
=
cfgGetItem
(
pCfg
,
"monitor"
)
->
bval
;
tsEnableMonitor
=
cfgGetItem
(
pCfg
,
"monitor"
)
->
bval
;
tsMonitorInterval
=
cfgGetItem
(
pCfg
,
"monitorInterval"
)
->
i32
;
tsMonitorInterval
=
cfgGetItem
(
pCfg
,
"monitorInterval"
)
->
i32
;
tstrncpy
(
tsMonitorFqdn
,
cfgGetItem
(
pCfg
,
"monitorFqdn"
)
->
str
,
TSDB_FQDN_LEN
);
tstrncpy
(
tsMonitorFqdn
,
cfgGetItem
(
pCfg
,
"monitorFqdn"
)
->
str
,
TSDB_FQDN_LEN
);
...
...
source/common/src/ttypes.c
浏览文件 @
b8cbc935
...
@@ -131,7 +131,10 @@ void assignVal(char *val, const char *src, int32_t len, int32_t type) {
...
@@ -131,7 +131,10 @@ void assignVal(char *val, const char *src, int32_t len, int32_t type) {
varDataCopy
(
val
,
src
);
varDataCopy
(
val
,
src
);
break
;
break
;
default:
{
default:
{
memcpy
(
val
,
src
,
len
);
if
(
len
>
0
)
{
memcpy
(
val
,
src
,
len
);
}
break
;
break
;
}
}
}
}
...
...
source/dnode/mgmt/mgmt_vnode/src/vmFile.c
浏览文件 @
b8cbc935
...
@@ -16,7 +16,7 @@
...
@@ -16,7 +16,7 @@
#define _DEFAULT_SOURCE
#define _DEFAULT_SOURCE
#include "vmInt.h"
#include "vmInt.h"
#define MAX_CONTENT_LEN 1024 * 1024
#define MAX_CONTENT_LEN
2 *
1024 * 1024
SVnodeObj
**
vmGetVnodeListFromHash
(
SVnodeMgmt
*
pMgmt
,
int32_t
*
numOfVnodes
)
{
SVnodeObj
**
vmGetVnodeListFromHash
(
SVnodeMgmt
*
pMgmt
,
int32_t
*
numOfVnodes
)
{
taosThreadRwlockRdlock
(
&
pMgmt
->
lock
);
taosThreadRwlockRdlock
(
&
pMgmt
->
lock
);
...
@@ -60,7 +60,7 @@ int32_t vmGetVnodeListFromFile(SVnodeMgmt *pMgmt, SWrapperCfg **ppCfgs, int32_t
...
@@ -60,7 +60,7 @@ int32_t vmGetVnodeListFromFile(SVnodeMgmt *pMgmt, SWrapperCfg **ppCfgs, int32_t
pFile
=
taosOpenFile
(
file
,
TD_FILE_READ
);
pFile
=
taosOpenFile
(
file
,
TD_FILE_READ
);
if
(
pFile
==
NULL
)
{
if
(
pFile
==
NULL
)
{
d
Debug
(
"file %s not exist"
,
file
);
d
Info
(
"file %s not exist"
,
file
);
code
=
0
;
code
=
0
;
goto
_OVER
;
goto
_OVER
;
}
}
...
@@ -133,7 +133,7 @@ int32_t vmGetVnodeListFromFile(SVnodeMgmt *pMgmt, SWrapperCfg **ppCfgs, int32_t
...
@@ -133,7 +133,7 @@ int32_t vmGetVnodeListFromFile(SVnodeMgmt *pMgmt, SWrapperCfg **ppCfgs, int32_t
*
numOfVnodes
=
vnodesNum
;
*
numOfVnodes
=
vnodesNum
;
code
=
0
;
code
=
0
;
d
Debug
(
"succcessed to read file %s, numOfVnodes:%d"
,
file
,
vnodesNum
);
d
Info
(
"succcessed to read file %s, numOfVnodes:%d"
,
file
,
vnodesNum
);
_OVER:
_OVER:
if
(
content
!=
NULL
)
taosMemoryFree
(
content
);
if
(
content
!=
NULL
)
taosMemoryFree
(
content
);
...
@@ -163,6 +163,7 @@ int32_t vmWriteVnodeListToFile(SVnodeMgmt *pMgmt) {
...
@@ -163,6 +163,7 @@ int32_t vmWriteVnodeListToFile(SVnodeMgmt *pMgmt) {
if
(
ppVnodes
==
NULL
)
{
if
(
ppVnodes
==
NULL
)
{
terrno
=
TSDB_CODE_OUT_OF_MEMORY
;
terrno
=
TSDB_CODE_OUT_OF_MEMORY
;
code
=
-
1
;
code
=
-
1
;
dError
(
"failed to write %s while get vnodelist"
,
file
);
goto
_OVER
;
goto
_OVER
;
}
}
...
@@ -172,6 +173,7 @@ int32_t vmWriteVnodeListToFile(SVnodeMgmt *pMgmt) {
...
@@ -172,6 +173,7 @@ int32_t vmWriteVnodeListToFile(SVnodeMgmt *pMgmt) {
if
(
content
==
NULL
)
{
if
(
content
==
NULL
)
{
terrno
=
TSDB_CODE_OUT_OF_MEMORY
;
terrno
=
TSDB_CODE_OUT_OF_MEMORY
;
code
=
-
1
;
code
=
-
1
;
dError
(
"failed to write %s while malloc content"
,
file
);
goto
_OVER
;
goto
_OVER
;
}
}
...
@@ -213,6 +215,12 @@ _OVER:
...
@@ -213,6 +215,12 @@ _OVER:
if
(
code
!=
0
)
return
-
1
;
if
(
code
!=
0
)
return
-
1
;
dDebug
(
"successed to write %s, numOfVnodes:%d"
,
realfile
,
numOfVnodes
);
dInfo
(
"successed to write %s, numOfVnodes:%d"
,
realfile
,
numOfVnodes
);
return
taosRenameFile
(
file
,
realfile
);
code
=
taosRenameFile
(
file
,
realfile
);
if
(
code
!=
0
)
{
dError
(
"failed to rename %s to %s"
,
file
,
realfile
);
}
return
code
;
}
}
\ No newline at end of file
source/dnode/mgmt/mgmt_vnode/src/vmHandle.c
浏览文件 @
b8cbc935
...
@@ -213,7 +213,7 @@ int32_t vmProcessCreateVnodeReq(SVnodeMgmt *pMgmt, SRpcMsg *pMsg) {
...
@@ -213,7 +213,7 @@ int32_t vmProcessCreateVnodeReq(SVnodeMgmt *pMgmt, SRpcMsg *pMsg) {
SVnodeObj
*
pVnode
=
vmAcquireVnode
(
pMgmt
,
req
.
vgId
);
SVnodeObj
*
pVnode
=
vmAcquireVnode
(
pMgmt
,
req
.
vgId
);
if
(
pVnode
!=
NULL
)
{
if
(
pVnode
!=
NULL
)
{
d
Debug
(
"vgId:%d, already exist"
,
req
.
vgId
);
d
Info
(
"vgId:%d, already exist"
,
req
.
vgId
);
tFreeSCreateVnodeReq
(
&
req
);
tFreeSCreateVnodeReq
(
&
req
);
vmReleaseVnode
(
pMgmt
,
pVnode
);
vmReleaseVnode
(
pMgmt
,
pVnode
);
terrno
=
TSDB_CODE_VND_ALREADY_EXIST
;
terrno
=
TSDB_CODE_VND_ALREADY_EXIST
;
...
@@ -358,7 +358,7 @@ int32_t vmProcessDropVnodeReq(SVnodeMgmt *pMgmt, SRpcMsg *pMsg) {
...
@@ -358,7 +358,7 @@ int32_t vmProcessDropVnodeReq(SVnodeMgmt *pMgmt, SRpcMsg *pMsg) {
}
}
int32_t
vgId
=
dropReq
.
vgId
;
int32_t
vgId
=
dropReq
.
vgId
;
d
Debug
(
"vgId:%d, start to drop vnode"
,
vgId
);
d
Info
(
"vgId:%d, start to drop vnode"
,
vgId
);
if
(
dropReq
.
dnodeId
!=
pMgmt
->
pData
->
dnodeId
)
{
if
(
dropReq
.
dnodeId
!=
pMgmt
->
pData
->
dnodeId
)
{
terrno
=
TSDB_CODE_INVALID_MSG
;
terrno
=
TSDB_CODE_INVALID_MSG
;
...
@@ -368,7 +368,7 @@ int32_t vmProcessDropVnodeReq(SVnodeMgmt *pMgmt, SRpcMsg *pMsg) {
...
@@ -368,7 +368,7 @@ int32_t vmProcessDropVnodeReq(SVnodeMgmt *pMgmt, SRpcMsg *pMsg) {
SVnodeObj
*
pVnode
=
vmAcquireVnode
(
pMgmt
,
vgId
);
SVnodeObj
*
pVnode
=
vmAcquireVnode
(
pMgmt
,
vgId
);
if
(
pVnode
==
NULL
)
{
if
(
pVnode
==
NULL
)
{
d
Debug
(
"vgId:%d, failed to drop since %s"
,
vgId
,
terrstr
());
d
Info
(
"vgId:%d, failed to drop since %s"
,
vgId
,
terrstr
());
terrno
=
TSDB_CODE_VND_NOT_EXIST
;
terrno
=
TSDB_CODE_VND_NOT_EXIST
;
return
-
1
;
return
-
1
;
}
}
...
@@ -383,6 +383,7 @@ int32_t vmProcessDropVnodeReq(SVnodeMgmt *pMgmt, SRpcMsg *pMsg) {
...
@@ -383,6 +383,7 @@ int32_t vmProcessDropVnodeReq(SVnodeMgmt *pMgmt, SRpcMsg *pMsg) {
vmCloseVnode
(
pMgmt
,
pVnode
);
vmCloseVnode
(
pMgmt
,
pVnode
);
vmWriteVnodeListToFile
(
pMgmt
);
vmWriteVnodeListToFile
(
pMgmt
);
dInfo
(
"vgId:%d, is dropped"
,
vgId
);
return
0
;
return
0
;
}
}
...
...
source/dnode/mgmt/mgmt_vnode/src/vmInt.c
浏览文件 @
b8cbc935
...
@@ -138,7 +138,7 @@ static void *vmOpenVnodeInThread(void *param) {
...
@@ -138,7 +138,7 @@ static void *vmOpenVnodeInThread(void *param) {
SVnodeMgmt
*
pMgmt
=
pThread
->
pMgmt
;
SVnodeMgmt
*
pMgmt
=
pThread
->
pMgmt
;
char
path
[
TSDB_FILENAME_LEN
];
char
path
[
TSDB_FILENAME_LEN
];
d
Debug
(
"thread:%d, start to open %d vnodes"
,
pThread
->
threadIndex
,
pThread
->
vnodeNum
);
d
Info
(
"thread:%d, start to open %d vnodes"
,
pThread
->
threadIndex
,
pThread
->
vnodeNum
);
setThreadName
(
"open-vnodes"
);
setThreadName
(
"open-vnodes"
);
for
(
int32_t
v
=
0
;
v
<
pThread
->
vnodeNum
;
++
v
)
{
for
(
int32_t
v
=
0
;
v
<
pThread
->
vnodeNum
;
++
v
)
{
...
@@ -156,14 +156,14 @@ static void *vmOpenVnodeInThread(void *param) {
...
@@ -156,14 +156,14 @@ static void *vmOpenVnodeInThread(void *param) {
pThread
->
failed
++
;
pThread
->
failed
++
;
}
else
{
}
else
{
vmOpenVnode
(
pMgmt
,
pCfg
,
pImpl
);
vmOpenVnode
(
pMgmt
,
pCfg
,
pImpl
);
d
Debug
(
"vgId:%d, is opened by thread:%d"
,
pCfg
->
vgId
,
pThread
->
threadIndex
);
d
Info
(
"vgId:%d, is opened by thread:%d"
,
pCfg
->
vgId
,
pThread
->
threadIndex
);
pThread
->
opened
++
;
pThread
->
opened
++
;
atomic_add_fetch_32
(
&
pMgmt
->
state
.
openVnodes
,
1
);
atomic_add_fetch_32
(
&
pMgmt
->
state
.
openVnodes
,
1
);
}
}
}
}
d
Debug
(
"thread:%d, numOfVnodes:%d, opened:%d failed:%d"
,
pThread
->
threadIndex
,
pThread
->
vnodeNum
,
pThread
->
opened
,
d
Info
(
"thread:%d, numOfVnodes:%d, opened:%d failed:%d"
,
pThread
->
threadIndex
,
pThread
->
vnodeNum
,
pThread
->
opened
,
pThread
->
failed
);
pThread
->
failed
);
return
NULL
;
return
NULL
;
}
}
...
@@ -496,7 +496,7 @@ static void *vmRestoreVnodeInThread(void *param) {
...
@@ -496,7 +496,7 @@ static void *vmRestoreVnodeInThread(void *param) {
dError
(
"vgId:%d, failed to restore vnode by thread:%d"
,
pVnode
->
vgId
,
pThread
->
threadIndex
);
dError
(
"vgId:%d, failed to restore vnode by thread:%d"
,
pVnode
->
vgId
,
pThread
->
threadIndex
);
pThread
->
failed
++
;
pThread
->
failed
++
;
}
else
{
}
else
{
d
Debug
(
"vgId:%d, is restored by thread:%d"
,
pVnode
->
vgId
,
pThread
->
threadIndex
);
d
Info
(
"vgId:%d, is restored by thread:%d"
,
pVnode
->
vgId
,
pThread
->
threadIndex
);
pThread
->
opened
++
;
pThread
->
opened
++
;
atomic_add_fetch_32
(
&
pMgmt
->
state
.
openVnodes
,
1
);
atomic_add_fetch_32
(
&
pMgmt
->
state
.
openVnodes
,
1
);
}
}
...
...
source/libs/executor/inc/executorimpl.h
浏览文件 @
b8cbc935
...
@@ -852,6 +852,8 @@ int32_t releaseOutputBuf(SStreamState* pState, SWinKey* pKey, SResultRow* pResul
...
@@ -852,6 +852,8 @@ int32_t releaseOutputBuf(SStreamState* pState, SWinKey* pKey, SResultRow* pResul
int32_t
saveOutputBuf
(
SStreamState
*
pState
,
SWinKey
*
pKey
,
SResultRow
*
pResult
,
int32_t
resSize
);
int32_t
saveOutputBuf
(
SStreamState
*
pState
,
SWinKey
*
pKey
,
SResultRow
*
pResult
,
int32_t
resSize
);
void
getNextIntervalWindow
(
SInterval
*
pInterval
,
STimeWindow
*
tw
,
int32_t
order
);
void
getNextIntervalWindow
(
SInterval
*
pInterval
,
STimeWindow
*
tw
,
int32_t
order
);
int32_t
qAppendTaskStopInfo
(
SExecTaskInfo
*
pTaskInfo
,
SExchangeOpStopInfo
*
pInfo
);
int32_t
qAppendTaskStopInfo
(
SExecTaskInfo
*
pTaskInfo
,
SExchangeOpStopInfo
*
pInfo
);
int32_t
getForwardStepsInBlock
(
int32_t
numOfRows
,
__block_search_fn_t
searchFn
,
TSKEY
ekey
,
int32_t
pos
,
int32_t
order
,
int64_t
*
pData
);
#ifdef __cplusplus
#ifdef __cplusplus
}
}
...
...
source/libs/executor/src/timewindowoperator.c
浏览文件 @
b8cbc935
...
@@ -119,8 +119,8 @@ static void doKeepNewWindowStartInfo(SWindowRowsSup* pRowSup, const int64_t* tsL
...
@@ -119,8 +119,8 @@ static void doKeepNewWindowStartInfo(SWindowRowsSup* pRowSup, const int64_t* tsL
pRowSup
->
groupId
=
groupId
;
pRowSup
->
groupId
=
groupId
;
}
}
static
FORCE_INLINE
int32_t
getForwardStepsInBlock
(
int32_t
numOfRows
,
__block_search_fn_t
searchFn
,
TSKEY
ekey
,
FORCE_INLINE
int32_t
getForwardStepsInBlock
(
int32_t
numOfRows
,
__block_search_fn_t
searchFn
,
TSKEY
ekey
,
int
16_t
pos
,
int16
_t
order
,
int64_t
*
pData
)
{
int
32_t
pos
,
int32
_t
order
,
int64_t
*
pData
)
{
int32_t
forwardRows
=
0
;
int32_t
forwardRows
=
0
;
if
(
order
==
TSDB_ORDER_ASC
)
{
if
(
order
==
TSDB_ORDER_ASC
)
{
...
...
source/libs/executor/test/executorTests.cpp
浏览文件 @
b8cbc935
...
@@ -43,6 +43,19 @@ enum {
...
@@ -43,6 +43,19 @@ enum {
data_desc
=
0x3
,
data_desc
=
0x3
,
};
};
TEST
(
testCase
,
windowFunctionTest
)
{
int64_t
tsCol
[
100000
];
int32_t
rows
=
100000
;
for
(
int32_t
i
=
0
;
i
<
rows
;
i
++
)
{
tsCol
[
i
]
=
1648791213000
+
i
;
}
int32_t
ekeyNum
=
50000
;
int32_t
pos
=
40000
;
int64_t
ekey
=
tsCol
[
ekeyNum
];
int32_t
num
=
getForwardStepsInBlock
(
rows
,
binarySearchForKey
,
ekey
,
pos
,
TSDB_ORDER_ASC
,
tsCol
);
ASSERT_EQ
(
num
,
ekeyNum
-
pos
+
1
);
}
typedef
struct
SDummyInputInfo
{
typedef
struct
SDummyInputInfo
{
int32_t
totalPages
;
// numOfPages
int32_t
totalPages
;
// numOfPages
int32_t
current
;
int32_t
current
;
...
...
source/libs/qworker/src/qworker.c
浏览文件 @
b8cbc935
...
@@ -681,6 +681,7 @@ int32_t qwProcessCQuery(QW_FPARAMS_DEF, SQWMsg *qwMsg) {
...
@@ -681,6 +681,7 @@ int32_t qwProcessCQuery(QW_FPARAMS_DEF, SQWMsg *qwMsg) {
void
*
rsp
=
NULL
;
void
*
rsp
=
NULL
;
int32_t
dataLen
=
0
;
int32_t
dataLen
=
0
;
bool
queryStop
=
false
;
bool
queryStop
=
false
;
bool
qComplete
=
false
;
do
{
do
{
ctx
=
NULL
;
ctx
=
NULL
;
...
@@ -705,11 +706,12 @@ int32_t qwProcessCQuery(QW_FPARAMS_DEF, SQWMsg *qwMsg) {
...
@@ -705,11 +706,12 @@ int32_t qwProcessCQuery(QW_FPARAMS_DEF, SQWMsg *qwMsg) {
}
}
if
(
rsp
)
{
if
(
rsp
)
{
bool
qComplete
=
(
DS_BUF_EMPTY
==
sOutput
.
bufStatus
&&
sOutput
.
queryEnd
);
qComplete
=
(
DS_BUF_EMPTY
==
sOutput
.
bufStatus
&&
sOutput
.
queryEnd
);
qwBuildFetchRsp
(
rsp
,
&
sOutput
,
dataLen
,
qComplete
);
qwBuildFetchRsp
(
rsp
,
&
sOutput
,
dataLen
,
qComplete
);
if
(
qComplete
)
{
if
(
qComplete
)
{
atomic_store_8
((
int8_t
*
)
&
ctx
->
queryEnd
,
true
);
atomic_store_8
((
int8_t
*
)
&
ctx
->
queryEnd
,
true
);
atomic_store_8
((
int8_t
*
)
&
ctx
->
queryContinue
,
0
);
}
}
qwMsg
->
connInfo
=
ctx
->
dataConnInfo
;
qwMsg
->
connInfo
=
ctx
->
dataConnInfo
;
...
@@ -743,8 +745,7 @@ int32_t qwProcessCQuery(QW_FPARAMS_DEF, SQWMsg *qwMsg) {
...
@@ -743,8 +745,7 @@ int32_t qwProcessCQuery(QW_FPARAMS_DEF, SQWMsg *qwMsg) {
}
}
QW_LOCK
(
QW_WRITE
,
&
ctx
->
lock
);
QW_LOCK
(
QW_WRITE
,
&
ctx
->
lock
);
if
((
queryStop
&&
(
0
==
atomic_load_8
((
int8_t
*
)
&
ctx
->
queryContinue
)))
||
code
||
if
(
qComplete
||
(
queryStop
&&
(
0
==
atomic_load_8
((
int8_t
*
)
&
ctx
->
queryContinue
)))
||
code
)
{
0
==
atomic_load_8
((
int8_t
*
)
&
ctx
->
queryContinue
))
{
// Note: query is not running anymore
// Note: query is not running anymore
QW_SET_PHASE
(
ctx
,
0
);
QW_SET_PHASE
(
ctx
,
0
);
QW_UNLOCK
(
QW_WRITE
,
&
ctx
->
lock
);
QW_UNLOCK
(
QW_WRITE
,
&
ctx
->
lock
);
...
...
source/libs/scalar/inc/sclInt.h
浏览文件 @
b8cbc935
...
@@ -53,9 +53,6 @@ typedef struct SScalarCtx {
...
@@ -53,9 +53,6 @@ typedef struct SScalarCtx {
#define SCL_IS_COMPARISON_OPERATOR(_opType) ((_opType) >= OP_TYPE_GREATER_THAN && (_opType) < OP_TYPE_IS_NOT_UNKNOWN)
#define SCL_IS_COMPARISON_OPERATOR(_opType) ((_opType) >= OP_TYPE_GREATER_THAN && (_opType) < OP_TYPE_IS_NOT_UNKNOWN)
#define SCL_DOWNGRADE_DATETYPE(_type) \
#define SCL_DOWNGRADE_DATETYPE(_type) \
((_type) == TSDB_DATA_TYPE_BIGINT || TSDB_DATA_TYPE_DOUBLE == (_type) || (_type) == TSDB_DATA_TYPE_UBIGINT)
((_type) == TSDB_DATA_TYPE_BIGINT || TSDB_DATA_TYPE_DOUBLE == (_type) || (_type) == TSDB_DATA_TYPE_UBIGINT)
#define SCL_NO_NEED_CONVERT_COMPARISION(_ltype, _rtype, _optr) \
(IS_NUMERIC_TYPE(_ltype) && IS_NUMERIC_TYPE(_rtype) && \
((_optr) >= OP_TYPE_GREATER_THAN && (_optr) <= OP_TYPE_NOT_EQUAL))
#define sclFatal(...) qFatal(__VA_ARGS__)
#define sclFatal(...) qFatal(__VA_ARGS__)
#define sclError(...) qError(__VA_ARGS__)
#define sclError(...) qError(__VA_ARGS__)
...
...
source/libs/scalar/src/filter.c
浏览文件 @
b8cbc935
...
@@ -130,9 +130,9 @@ __compar_fn_t gDataCompare[] = {compareInt32Val,
...
@@ -130,9 +130,9 @@ __compar_fn_t gDataCompare[] = {compareInt32Val,
compareFloatVal
,
compareFloatVal
,
compareDoubleVal
,
compareDoubleVal
,
compareLenPrefixedStr
,
compareLenPrefixedStr
,
compare
S
trPatternMatch
,
compare
s
trPatternMatch
,
compareChkInString
,
compareChkInString
,
compare
WStr
PatternMatch
,
compare
wcs
PatternMatch
,
compareLenPrefixedWStr
,
compareLenPrefixedWStr
,
compareUint8Val
,
compareUint8Val
,
compareUint16Val
,
compareUint16Val
,
...
@@ -142,15 +142,17 @@ __compar_fn_t gDataCompare[] = {compareInt32Val,
...
@@ -142,15 +142,17 @@ __compar_fn_t gDataCompare[] = {compareInt32Val,
setChkInBytes2
,
setChkInBytes2
,
setChkInBytes4
,
setChkInBytes4
,
setChkInBytes8
,
setChkInBytes8
,
compare
StrRegexComp
Match
,
compare
strRegex
Match
,
compare
StrRegexComp
NMatch
,
compare
strRegex
NMatch
,
setChkNotInBytes1
,
setChkNotInBytes1
,
setChkNotInBytes2
,
setChkNotInBytes2
,
setChkNotInBytes4
,
setChkNotInBytes4
,
setChkNotInBytes8
,
setChkNotInBytes8
,
compareChkNotInString
,
compareChkNotInString
,
compareStrPatternNotMatch
,
comparestrPatternNMatch
,
compareWStrPatternNotMatch
};
comparewcsPatternNMatch
,
comparewcsRegexMatch
,
comparewcsRegexNMatch
,};
__compar_fn_t
gInt8SignCompare
[]
=
{
compareInt8Val
,
compareInt8Int16
,
compareInt8Int32
,
__compar_fn_t
gInt8SignCompare
[]
=
{
compareInt8Val
,
compareInt8Int16
,
compareInt8Int32
,
compareInt8Int64
,
compareInt8Float
,
compareInt8Double
};
compareInt8Int64
,
compareInt8Float
,
compareInt8Double
};
...
@@ -295,9 +297,9 @@ int8_t filterGetCompFuncIdx(int32_t type, int32_t optr) {
...
@@ -295,9 +297,9 @@ int8_t filterGetCompFuncIdx(int32_t type, int32_t optr) {
case
TSDB_DATA_TYPE_NCHAR
:
{
case
TSDB_DATA_TYPE_NCHAR
:
{
if
(
optr
==
OP_TYPE_MATCH
)
{
if
(
optr
==
OP_TYPE_MATCH
)
{
comparFn
=
19
;
comparFn
=
28
;
}
else
if
(
optr
==
OP_TYPE_NMATCH
)
{
}
else
if
(
optr
==
OP_TYPE_NMATCH
)
{
comparFn
=
2
0
;
comparFn
=
2
9
;
}
else
if
(
optr
==
OP_TYPE_LIKE
)
{
}
else
if
(
optr
==
OP_TYPE_LIKE
)
{
comparFn
=
9
;
comparFn
=
9
;
}
else
if
(
optr
==
OP_TYPE_NOT_LIKE
)
{
}
else
if
(
optr
==
OP_TYPE_NOT_LIKE
)
{
...
@@ -336,7 +338,7 @@ int8_t filterGetCompFuncIdx(int32_t type, int32_t optr) {
...
@@ -336,7 +338,7 @@ int8_t filterGetCompFuncIdx(int32_t type, int32_t optr) {
__compar_fn_t
filterGetCompFunc
(
int32_t
type
,
int32_t
optr
)
{
return
gDataCompare
[
filterGetCompFuncIdx
(
type
,
optr
)];
}
__compar_fn_t
filterGetCompFunc
(
int32_t
type
,
int32_t
optr
)
{
return
gDataCompare
[
filterGetCompFuncIdx
(
type
,
optr
)];
}
__compar_fn_t
filterGetCompFuncEx
(
int32_t
lType
,
int32_t
rType
,
int32_t
optr
)
{
__compar_fn_t
filterGetCompFuncEx
(
int32_t
lType
,
int32_t
rType
,
int32_t
optr
)
{
if
(
TSDB_DATA_TYPE_NULL
==
rType
)
{
if
(
TSDB_DATA_TYPE_NULL
==
rType
||
TSDB_DATA_TYPE_JSON
==
rType
)
{
return
NULL
;
return
NULL
;
}
}
...
@@ -4085,7 +4087,7 @@ bool filterExecute(SFilterInfo *info, SSDataBlock *pSrc, SColumnInfoData **p, SC
...
@@ -4085,7 +4087,7 @@ bool filterExecute(SFilterInfo *info, SSDataBlock *pSrc, SColumnInfoData **p, SC
SArray
*
pList
=
taosArrayInit
(
1
,
POINTER_BYTES
);
SArray
*
pList
=
taosArrayInit
(
1
,
POINTER_BYTES
);
taosArrayPush
(
pList
,
&
pSrc
);
taosArrayPush
(
pList
,
&
pSrc
);
int32_t
code
=
scalarCalculate
(
info
->
sclCtx
.
node
,
pList
,
&
output
);
code
=
scalarCalculate
(
info
->
sclCtx
.
node
,
pList
,
&
output
);
taosArrayDestroy
(
pList
);
taosArrayDestroy
(
pList
);
FLT_ERR_RET
(
code
);
FLT_ERR_RET
(
code
);
...
...
source/libs/scalar/src/sclvector.c
浏览文件 @
b8cbc935
...
@@ -37,6 +37,11 @@
...
@@ -37,6 +37,11 @@
#define IS_HELPER_NULL(col, i) colDataIsNull_s(col, i) || IS_JSON_NULL(col->info.type, colDataGetVarData(col, i))
#define IS_HELPER_NULL(col, i) colDataIsNull_s(col, i) || IS_JSON_NULL(col->info.type, colDataGetVarData(col, i))
bool
noConvertBeforeCompare
(
int32_t
leftType
,
int32_t
rightType
,
int32_t
optr
)
{
return
IS_NUMERIC_TYPE
(
leftType
)
&&
IS_NUMERIC_TYPE
(
rightType
)
&&
(
optr
>=
OP_TYPE_GREATER_THAN
&&
optr
<=
OP_TYPE_NOT_EQUAL
);
}
void
convertNumberToNumber
(
const
void
*
inData
,
void
*
outData
,
int8_t
inType
,
int8_t
outType
)
{
void
convertNumberToNumber
(
const
void
*
inData
,
void
*
outData
,
int8_t
inType
,
int8_t
outType
)
{
switch
(
outType
)
{
switch
(
outType
)
{
case
TSDB_DATA_TYPE_BOOL
:
{
case
TSDB_DATA_TYPE_BOOL
:
{
...
@@ -338,6 +343,7 @@ static FORCE_INLINE void varToBool(char *buf, SScalarParam *pOut, int32_t rowInd
...
@@ -338,6 +343,7 @@ static FORCE_INLINE void varToBool(char *buf, SScalarParam *pOut, int32_t rowInd
colDataAppendInt8
(
pOut
->
columnData
,
rowIndex
,
(
int8_t
*
)
&
v
);
colDataAppendInt8
(
pOut
->
columnData
,
rowIndex
,
(
int8_t
*
)
&
v
);
}
}
// todo remove this malloc
static
FORCE_INLINE
void
varToNchar
(
char
*
buf
,
SScalarParam
*
pOut
,
int32_t
rowIndex
,
int32_t
*
overflow
)
{
static
FORCE_INLINE
void
varToNchar
(
char
*
buf
,
SScalarParam
*
pOut
,
int32_t
rowIndex
,
int32_t
*
overflow
)
{
int32_t
len
=
0
;
int32_t
len
=
0
;
int32_t
inputLen
=
varDataLen
(
buf
);
int32_t
inputLen
=
varDataLen
(
buf
);
...
@@ -399,6 +405,8 @@ int32_t vectorConvertFromVarData(SSclVectorConvCtx *pCtx, int32_t *overflow) {
...
@@ -399,6 +405,8 @@ int32_t vectorConvertFromVarData(SSclVectorConvCtx *pCtx, int32_t *overflow) {
}
}
pCtx
->
pOut
->
numOfRows
=
pCtx
->
pIn
->
numOfRows
;
pCtx
->
pOut
->
numOfRows
=
pCtx
->
pIn
->
numOfRows
;
char
*
tmp
=
NULL
;
for
(
int32_t
i
=
pCtx
->
startIndex
;
i
<=
pCtx
->
endIndex
;
++
i
)
{
for
(
int32_t
i
=
pCtx
->
startIndex
;
i
<=
pCtx
->
endIndex
;
++
i
)
{
if
(
IS_HELPER_NULL
(
pCtx
->
pIn
->
columnData
,
i
))
{
if
(
IS_HELPER_NULL
(
pCtx
->
pIn
->
columnData
,
i
))
{
colDataAppendNULL
(
pCtx
->
pOut
->
columnData
,
i
);
colDataAppendNULL
(
pCtx
->
pOut
->
columnData
,
i
);
...
@@ -421,12 +429,16 @@ int32_t vectorConvertFromVarData(SSclVectorConvCtx *pCtx, int32_t *overflow) {
...
@@ -421,12 +429,16 @@ int32_t vectorConvertFromVarData(SSclVectorConvCtx *pCtx, int32_t *overflow) {
continue
;
continue
;
}
}
}
}
int32_t
bufSize
=
pCtx
->
pIn
->
columnData
->
info
.
bytes
;
int32_t
bufSize
=
pCtx
->
pIn
->
columnData
->
info
.
bytes
;
char
*
tmp
=
taosMemoryMalloc
(
varDataTLen
(
data
));
if
(
tmp
==
NULL
)
{
if
(
!
tmp
)
{
tmp
=
taosMemoryMalloc
(
bufSize
);
sclError
(
"out of memory in vectorConvertFromVarData"
);
if
(
tmp
==
NULL
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
sclError
(
"out of memory in vectorConvertFromVarData"
);
return
TSDB_CODE_OUT_OF_MEMORY
;
}
}
}
if
(
vton
)
{
if
(
vton
)
{
memcpy
(
tmp
,
data
,
varDataTLen
(
data
));
memcpy
(
tmp
,
data
,
varDataTLen
(
data
));
}
else
{
}
else
{
...
@@ -434,6 +446,7 @@ int32_t vectorConvertFromVarData(SSclVectorConvCtx *pCtx, int32_t *overflow) {
...
@@ -434,6 +446,7 @@ int32_t vectorConvertFromVarData(SSclVectorConvCtx *pCtx, int32_t *overflow) {
memcpy
(
tmp
,
varDataVal
(
data
),
varDataLen
(
data
));
memcpy
(
tmp
,
varDataVal
(
data
),
varDataLen
(
data
));
tmp
[
varDataLen
(
data
)]
=
0
;
tmp
[
varDataLen
(
data
)]
=
0
;
}
else
if
(
TSDB_DATA_TYPE_NCHAR
==
convertType
)
{
}
else
if
(
TSDB_DATA_TYPE_NCHAR
==
convertType
)
{
// we need to convert it to native char string, and then perform the string to numeric data
ASSERT
(
varDataLen
(
data
)
<=
bufSize
);
ASSERT
(
varDataLen
(
data
)
<=
bufSize
);
int
len
=
taosUcs4ToMbs
((
TdUcs4
*
)
varDataVal
(
data
),
varDataLen
(
data
),
tmp
);
int
len
=
taosUcs4ToMbs
((
TdUcs4
*
)
varDataVal
(
data
),
varDataLen
(
data
),
tmp
);
...
@@ -448,9 +461,11 @@ int32_t vectorConvertFromVarData(SSclVectorConvCtx *pCtx, int32_t *overflow) {
...
@@ -448,9 +461,11 @@ int32_t vectorConvertFromVarData(SSclVectorConvCtx *pCtx, int32_t *overflow) {
}
}
(
*
func
)(
tmp
,
pCtx
->
pOut
,
i
,
overflow
);
(
*
func
)(
tmp
,
pCtx
->
pOut
,
i
,
overflow
);
taosMemoryFreeClear
(
tmp
);
}
}
if
(
tmp
!=
NULL
)
{
taosMemoryFreeClear
(
tmp
);
}
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
...
@@ -901,9 +916,11 @@ int32_t vectorGetConvertType(int32_t type1, int32_t type2) {
...
@@ -901,9 +916,11 @@ int32_t vectorGetConvertType(int32_t type1, int32_t type2) {
int32_t
vectorConvertSingleCol
(
SScalarParam
*
input
,
SScalarParam
*
output
,
int32_t
type
,
int32_t
startIndex
,
int32_t
vectorConvertSingleCol
(
SScalarParam
*
input
,
SScalarParam
*
output
,
int32_t
type
,
int32_t
startIndex
,
int32_t
numOfRows
)
{
int32_t
numOfRows
)
{
SDataType
t
=
{.
type
=
type
,
.
bytes
=
tDataTypes
[
type
].
bytes
};
output
->
numOfRows
=
input
->
numOfRows
;
output
->
numOfRows
=
input
->
numOfRows
;
SDataType
t
=
{.
type
=
type
};
t
.
bytes
=
IS_VAR_DATA_TYPE
(
t
.
type
)
?
input
->
columnData
->
info
.
bytes
:
tDataTypes
[
type
].
bytes
;
int32_t
code
=
sclCreateColumnInfoData
(
&
t
,
input
->
numOfRows
,
output
);
int32_t
code
=
sclCreateColumnInfoData
(
&
t
,
input
->
numOfRows
,
output
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
return
TSDB_CODE_OUT_OF_MEMORY
;
...
@@ -925,25 +942,43 @@ int32_t vectorConvertCols(SScalarParam *pLeft, SScalarParam *pRight, SScalarPara
...
@@ -925,25 +942,43 @@ int32_t vectorConvertCols(SScalarParam *pLeft, SScalarParam *pRight, SScalarPara
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
int8_t
type
=
0
;
int32_t
code
=
0
;
SScalarParam
*
param1
=
NULL
,
*
paramOut1
=
NULL
;
SScalarParam
*
param1
=
NULL
,
*
paramOut1
=
NULL
;
SScalarParam
*
param2
=
NULL
,
*
paramOut2
=
NULL
;
SScalarParam
*
param2
=
NULL
,
*
paramOut2
=
NULL
;
int32_t
code
=
0
;
if
(
leftType
<
rightType
)
{
// always convert least data
if
(
IS_VAR_DATA_TYPE
(
leftType
)
&&
IS_VAR_DATA_TYPE
(
rightType
)
&&
(
pLeft
->
numOfRows
!=
pRight
->
numOfRows
)
&&
leftType
!=
TSDB_DATA_TYPE_JSON
&&
rightType
!=
TSDB_DATA_TYPE_JSON
)
{
param1
=
pLeft
;
param1
=
pLeft
;
param2
=
pRight
;
param2
=
pRight
;
paramOut1
=
pLeftOut
;
paramOut1
=
pLeftOut
;
paramOut2
=
pRightOut
;
paramOut2
=
pRightOut
;
if
(
pLeft
->
numOfRows
>
pRight
->
numOfRows
)
{
type
=
leftType
;
}
else
{
type
=
rightType
;
}
}
else
{
}
else
{
param1
=
pRight
;
// we only define half value in the convert-matrix, so make sure param1 always less equal than param2
param2
=
pLeft
;
if
(
leftType
<
rightType
)
{
paramOut1
=
pRightOut
;
param1
=
pLeft
;
paramOut2
=
pLeftOut
;
param2
=
pRight
;
}
paramOut1
=
pLeftOut
;
paramOut2
=
pRightOut
;
}
else
{
param1
=
pRight
;
param2
=
pLeft
;
paramOut1
=
pRightOut
;
paramOut2
=
pLeftOut
;
}
int8_t
type
=
vectorGetConvertType
(
GET_PARAM_TYPE
(
param1
),
GET_PARAM_TYPE
(
param2
));
type
=
vectorGetConvertType
(
GET_PARAM_TYPE
(
param1
),
GET_PARAM_TYPE
(
param2
));
if
(
0
==
type
)
{
if
(
0
==
type
)
{
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
}
if
(
type
!=
GET_PARAM_TYPE
(
param1
))
{
if
(
type
!=
GET_PARAM_TYPE
(
param1
))
{
...
@@ -1683,23 +1718,13 @@ void vectorCompareImpl(SScalarParam *pLeft, SScalarParam *pRight, SScalarParam *
...
@@ -1683,23 +1718,13 @@ void vectorCompareImpl(SScalarParam *pLeft, SScalarParam *pRight, SScalarParam *
SScalarParam
*
param1
=
NULL
;
SScalarParam
*
param1
=
NULL
;
SScalarParam
*
param2
=
NULL
;
SScalarParam
*
param2
=
NULL
;
if
(
SCL_NO_NEED_CONVERT_COMPARISION
(
GET_PARAM_TYPE
(
pLeft
),
GET_PARAM_TYPE
(
pRight
),
optr
))
{
if
(
noConvertBeforeCompare
(
GET_PARAM_TYPE
(
pLeft
),
GET_PARAM_TYPE
(
pRight
),
optr
))
{
param1
=
pLeft
;
param1
=
pLeft
;
param2
=
pRight
;
param2
=
pRight
;
}
else
{
}
else
{
vectorConvertCols
(
pLeft
,
pRight
,
&
pLeftOut
,
&
pRightOut
,
startIndex
,
numOfRows
);
vectorConvertCols
(
pLeft
,
pRight
,
&
pLeftOut
,
&
pRightOut
,
startIndex
,
numOfRows
);
param1
=
(
pLeftOut
.
columnData
!=
NULL
)
?
&
pLeftOut
:
pLeft
;
if
(
pLeftOut
.
columnData
!=
NULL
)
{
param2
=
(
pRightOut
.
columnData
!=
NULL
)
?
&
pRightOut
:
pRight
;
param1
=
&
pLeftOut
;
}
else
{
param1
=
pLeft
;
}
if
(
pRightOut
.
columnData
!=
NULL
)
{
param2
=
&
pRightOut
;
}
else
{
param2
=
pRight
;
}
}
}
doVectorCompare
(
param1
,
param2
,
pOut
,
startIndex
,
numOfRows
,
_ord
,
optr
);
doVectorCompare
(
param1
,
param2
,
pOut
,
startIndex
,
numOfRows
,
_ord
,
optr
);
...
...
source/libs/scalar/test/scalar/scalarTests.cpp
浏览文件 @
b8cbc935
...
@@ -344,7 +344,7 @@ TEST(constantTest, int_or_binary) {
...
@@ -344,7 +344,7 @@ TEST(constantTest, int_or_binary) {
ASSERT_EQ
(
nodeType
(
res
),
QUERY_NODE_VALUE
);
ASSERT_EQ
(
nodeType
(
res
),
QUERY_NODE_VALUE
);
SValueNode
*
v
=
(
SValueNode
*
)
res
;
SValueNode
*
v
=
(
SValueNode
*
)
res
;
ASSERT_EQ
(
v
->
node
.
resType
.
type
,
TSDB_DATA_TYPE_BIGINT
);
ASSERT_EQ
(
v
->
node
.
resType
.
type
,
TSDB_DATA_TYPE_BIGINT
);
ASSERT_EQ
(
v
->
datum
.
b
,
scltLeftV
|
scltRightV
);
ASSERT_EQ
(
v
->
datum
.
i
,
scltLeftV
|
scltRightV
);
nodesDestroyNode
(
res
);
nodesDestroyNode
(
res
);
}
}
...
@@ -1101,7 +1101,8 @@ void makeCalculate(void *json, void *key, int32_t rightType, void *rightData, do
...
@@ -1101,7 +1101,8 @@ void makeCalculate(void *json, void *key, int32_t rightType, void *rightData, do
opType
==
OP_TYPE_LIKE
||
opType
==
OP_TYPE_NOT_LIKE
||
opType
==
OP_TYPE_MATCH
||
opType
==
OP_TYPE_LIKE
||
opType
==
OP_TYPE_NOT_LIKE
||
opType
==
OP_TYPE_MATCH
||
opType
==
OP_TYPE_NMATCH
)
{
opType
==
OP_TYPE_NMATCH
)
{
printf
(
"op:%s,3result:%d,except:%f
\n
"
,
operatorTypeStr
(
opType
),
*
((
bool
*
)
colDataGetData
(
column
,
0
)),
exceptValue
);
printf
(
"op:%s,3result:%d,except:%f
\n
"
,
operatorTypeStr
(
opType
),
*
((
bool
*
)
colDataGetData
(
column
,
0
)),
exceptValue
);
ASSERT_EQ
(
*
((
bool
*
)
colDataGetData
(
column
,
0
)),
exceptValue
);
assert
(
*
(
bool
*
)
colDataGetData
(
column
,
0
)
==
exceptValue
);
// ASSERT_EQ((int) *((bool *)colDataGetData(column, 0)), (int)exceptValue);
}
}
taosArrayDestroyEx
(
blockList
,
scltFreeDataBlock
);
taosArrayDestroyEx
(
blockList
,
scltFreeDataBlock
);
...
@@ -1426,7 +1427,7 @@ TEST(columnTest, json_column_logic_op) {
...
@@ -1426,7 +1427,7 @@ TEST(columnTest, json_column_logic_op) {
printf
(
"--------------------json string-- 6.6hello {1, 8, 2, 2, 3, 0, 0, 0, 0}-------------------
\n
"
);
printf
(
"--------------------json string-- 6.6hello {1, 8, 2, 2, 3, 0, 0, 0, 0}-------------------
\n
"
);
key
=
"k9"
;
key
=
"k9"
;
bool
eRes8
[
len
+
len1
]
=
{
false
,
false
,
false
,
false
,
false
,
false
,
false
,
true
,
true
,
false
,
true
,
fals
e
,
true
};
bool
eRes8
[
len
+
len1
]
=
{
false
,
false
,
false
,
false
,
false
,
false
,
false
,
true
,
true
,
false
,
true
,
tru
e
,
true
};
for
(
int
i
=
0
;
i
<
len
;
i
++
)
{
for
(
int
i
=
0
;
i
<
len
;
i
++
)
{
makeCalculate
(
row
,
key
,
TSDB_DATA_TYPE_INT
,
&
input
[
i
],
eRes8
[
i
],
op
[
i
],
false
);
makeCalculate
(
row
,
key
,
TSDB_DATA_TYPE_INT
,
&
input
[
i
],
eRes8
[
i
],
op
[
i
],
false
);
}
}
...
@@ -1437,6 +1438,9 @@ TEST(columnTest, json_column_logic_op) {
...
@@ -1437,6 +1438,9 @@ TEST(columnTest, json_column_logic_op) {
for
(
int
i
=
len
;
i
<
len
+
len1
;
i
++
)
{
for
(
int
i
=
len
;
i
<
len
+
len1
;
i
++
)
{
void
*
rightData
=
prepareNchar
(
inputNchar
[
i
-
len
]);
void
*
rightData
=
prepareNchar
(
inputNchar
[
i
-
len
]);
if
(
i
==
11
)
{
printf
(
"abc
\n
"
);
}
makeCalculate
(
row
,
key
,
TSDB_DATA_TYPE_NCHAR
,
rightData
,
eRes8
[
i
],
op
[
i
],
false
);
makeCalculate
(
row
,
key
,
TSDB_DATA_TYPE_NCHAR
,
rightData
,
eRes8
[
i
],
op
[
i
],
false
);
taosMemoryFree
(
rightData
);
taosMemoryFree
(
rightData
);
}
}
...
...
source/os/CMakeLists.txt
浏览文件 @
b8cbc935
...
@@ -41,7 +41,7 @@ target_link_libraries(
...
@@ -41,7 +41,7 @@ target_link_libraries(
)
)
if
(
TD_WINDOWS
)
if
(
TD_WINDOWS
)
target_link_libraries
(
target_link_libraries
(
os PUBLIC ws2_32 iconv msvcregex wcwidth winmm crashdump
os PUBLIC ws2_32 iconv msvcregex wcwidth winmm crashdump
dbghelp
)
)
elseif
(
TD_DARWIN_64
)
elseif
(
TD_DARWIN_64
)
find_library
(
CORE_FOUNDATION_FRAMEWORK CoreFoundation
)
find_library
(
CORE_FOUNDATION_FRAMEWORK CoreFoundation
)
...
...
source/os/test/CMakeLists.txt
0 → 100644
浏览文件 @
b8cbc935
CMAKE_MINIMUM_REQUIRED
(
VERSION 2.8...3.20
)
PROJECT
(
TDengine
)
FIND_PATH
(
HEADER_GTEST_INCLUDE_DIR gtest.h /usr/include/gtest /usr/local/include/gtest
)
FIND_LIBRARY
(
LIB_GTEST_STATIC_DIR libgtest.a /usr/lib/ /usr/local/lib /usr/lib64
)
FIND_LIBRARY
(
LIB_GTEST_SHARED_DIR libgtest.so /usr/lib/ /usr/local/lib /usr/lib64
)
IF
(
HEADER_GTEST_INCLUDE_DIR
AND
(
LIB_GTEST_STATIC_DIR OR LIB_GTEST_SHARED_DIR
))
MESSAGE
(
STATUS
"gTest library found, build os test"
)
INCLUDE_DIRECTORIES
(
${
HEADER_GTEST_INCLUDE_DIR
}
)
AUX_SOURCE_DIRECTORY
(
${
CMAKE_CURRENT_SOURCE_DIR
}
SOURCE_LIST
)
ENDIF
()
INCLUDE_DIRECTORIES
(
${
TD_SOURCE_DIR
}
/src/util/inc
)
# osTests
add_executable
(
osTests
"osTests.cpp"
)
target_link_libraries
(
osTests os util gtest_main
)
add_test
(
NAME osTests
COMMAND osTests
)
\ No newline at end of file
source/os/test/osTests.cpp
浏览文件 @
b8cbc935
/*
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
*
* This program is free software: you can use, redistribute, and/or modify
* it under the terms of the GNU Affero General Public License, version 3
* or later ("AGPL"), as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <gtest/gtest.h>
#include <iostream>
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wwrite-strings"
#pragma GCC diagnostic ignored "-Wunused-function"
#pragma GCC diagnostic ignored "-Wunused-variable"
#pragma GCC diagnostic ignored "-Wsign-compare"
#pragma GCC diagnostic ignored "-Wsign-compare"
#pragma GCC diagnostic ignored "-Wformat"
#pragma GCC diagnostic ignored "-Wint-to-pointer-cast"
#pragma GCC diagnostic ignored "-Wpointer-arith"
#include "os.h"
TEST
(
osTest
,
osSystem
)
{
const
char
*
flags
=
"UTL FATAL "
;
ELogLevel
level
=
DEBUG_FATAL
;
int32_t
dflag
=
255
;
// tsLogEmbedded ? 255 : uDebugFlag
taosPrintTrace
(
flags
,
level
,
dflag
);
}
#pragma GCC diagnostic pop
source/util/src/tcompare.c
浏览文件 @
b8cbc935
...
@@ -17,6 +17,7 @@
...
@@ -17,6 +17,7 @@
#define _XOPEN_SOURCE
#define _XOPEN_SOURCE
#define _DEFAULT_SOURCE
#define _DEFAULT_SOURCE
#include "tcompare.h"
#include "tcompare.h"
#include "tutil.h"
#include "regex.h"
#include "regex.h"
#include "tdef.h"
#include "tdef.h"
#include "thash.h"
#include "thash.h"
...
@@ -997,6 +998,7 @@ int32_t compareUint64Uint32(const void *pLeft, const void *pRight) {
...
@@ -997,6 +998,7 @@ int32_t compareUint64Uint32(const void *pLeft, const void *pRight) {
}
}
int32_t
compareJsonValDesc
(
const
void
*
pLeft
,
const
void
*
pRight
)
{
return
compareJsonVal
(
pRight
,
pLeft
);
}
int32_t
compareJsonValDesc
(
const
void
*
pLeft
,
const
void
*
pRight
)
{
return
compareJsonVal
(
pRight
,
pLeft
);
}
/*
/*
* Compare two strings
* Compare two strings
* TSDB_MATCH: Match
* TSDB_MATCH: Match
...
@@ -1007,59 +1009,62 @@ int32_t compareJsonValDesc(const void *pLeft, const void *pRight) { return compa
...
@@ -1007,59 +1009,62 @@ int32_t compareJsonValDesc(const void *pLeft, const void *pRight) { return compa
* '_': Matches one character
* '_': Matches one character
*
*
*/
*/
int32_t
patternMatch
(
const
char
*
patter
Str
,
const
char
*
str
,
size_t
size
,
const
SPatternCompareInfo
*
pInfo
)
{
int32_t
patternMatch
(
const
char
*
patter
n
,
size_t
psize
,
const
char
*
str
,
size_t
s
size
,
const
SPatternCompareInfo
*
pInfo
)
{
char
c
,
c1
;
char
c
,
c1
;
int32_t
i
=
0
;
int32_t
i
=
0
;
int32_t
j
=
0
;
int32_t
j
=
0
;
int32_t
o
=
0
;
int32_t
nMatchChar
=
0
;
int32_t
m
=
0
;
while
((
c
=
patterStr
[
i
++
])
!=
0
)
{
while
((
i
<
psize
)
&&
((
c
=
pattern
[
i
++
])
!=
0
)
)
{
if
(
c
==
pInfo
->
matchAll
)
{
/* Match "*" */
if
(
c
==
pInfo
->
matchAll
)
{
/* Match "*" */
while
((
c
=
patterStr
[
i
++
])
==
pInfo
->
matchAll
||
c
==
pInfo
->
matchOne
)
{
while
((
i
<
psize
)
&&
((
c
=
pattern
[
i
++
])
==
pInfo
->
matchAll
||
c
==
pInfo
->
matchOne
)
)
{
if
(
c
==
pInfo
->
matchOne
)
{
if
(
c
==
pInfo
->
matchOne
)
{
if
(
j
>
size
||
str
[
j
++
]
==
0
)
{
if
(
j
>=
ssize
||
str
[
j
++
]
==
0
)
{
// empty string, return not match
// empty string, return not match
return
TSDB_PATTERN_NOWILDCARDMATCH
;
return
TSDB_PATTERN_NOWILDCARDMATCH
;
}
else
{
}
else
{
++
o
;
++
nMatchChar
;
}
}
}
}
}
}
if
(
c
==
0
)
{
if
(
i
>=
psize
&&
(
c
==
pInfo
->
umatchOne
||
c
==
pInfo
->
umatchAll
)
)
{
return
TSDB_PATTERN_MATCH
;
/* "*" at the end of the pattern matches */
return
TSDB_PATTERN_MATCH
;
/* "*" at the end of the pattern matches */
}
}
char
next
[
3
]
=
{
toupper
(
c
),
tolower
(
c
),
0
};
char
rejectList
[
2
]
=
{
toupper
(
c
),
tolower
(
c
)};
m
=
o
;
str
+=
nMatchChar
;
int32_t
remain
=
ssize
-
nMatchChar
;
while
(
1
)
{
while
(
1
)
{
size_t
n
=
strcspn
(
str
+
m
,
next
);
size_t
n
=
tstrncspn
(
str
,
remain
,
rejectList
,
2
);
str
+=
m
+
n
;
str
+=
n
;
remain
-=
n
;
if
(
str
[
0
]
==
0
||
(
n
>=
size
)
)
{
if
(
(
remain
<=
0
)
||
str
[
0
]
==
0
)
{
break
;
break
;
}
}
int32_t
ret
=
patternMatch
(
&
patter
Str
[
i
],
++
str
,
size
-
n
-
1
,
pInfo
);
int32_t
ret
=
patternMatch
(
&
patter
n
[
i
],
psize
-
i
,
++
str
,
--
remain
,
pInfo
);
if
(
ret
!=
TSDB_PATTERN_NOMATCH
)
{
if
(
ret
!=
TSDB_PATTERN_NOMATCH
)
{
return
ret
;
return
ret
;
}
}
m
=
0
;
}
}
return
TSDB_PATTERN_NOWILDCARDMATCH
;
return
TSDB_PATTERN_NOWILDCARDMATCH
;
}
}
c1
=
str
[
j
++
];
if
(
j
<
ssize
)
{
++
o
;
c1
=
str
[
j
++
];
++
nMatchChar
;
if
(
j
<=
size
)
{
if
(
c
==
'\\'
&&
pattern
[
i
]
==
'_'
&&
c1
==
'_'
)
{
if
(
c
==
'\\'
&&
patterStr
[
i
]
==
'_'
&&
c1
==
'_'
)
{
i
++
;
i
++
;
continue
;
continue
;
}
}
if
(
c
==
c1
||
tolower
(
c
)
==
tolower
(
c1
)
||
(
c
==
pInfo
->
matchOne
&&
c1
!=
0
))
{
if
(
c
==
c1
||
tolower
(
c
)
==
tolower
(
c1
)
||
(
c
==
pInfo
->
matchOne
&&
c1
!=
0
))
{
continue
;
continue
;
}
}
...
@@ -1068,39 +1073,48 @@ int32_t patternMatch(const char *patterStr, const char *str, size_t size, const
...
@@ -1068,39 +1073,48 @@ int32_t patternMatch(const char *patterStr, const char *str, size_t size, const
return
TSDB_PATTERN_NOMATCH
;
return
TSDB_PATTERN_NOMATCH
;
}
}
return
(
str
[
j
]
==
0
||
j
>=
size
)
?
TSDB_PATTERN_MATCH
:
TSDB_PATTERN_NOMATCH
;
return
(
j
>=
ssize
||
str
[
j
]
==
0
)
?
TSDB_PATTERN_MATCH
:
TSDB_PATTERN_NOMATCH
;
}
}
int32_t
WCSPatternMatch
(
const
TdUcs4
*
patterStr
,
const
TdUcs4
*
str
,
size_t
size
,
const
SPatternCompareInfo
*
pInfo
)
{
int32_t
wcsPatternMatch
(
const
TdUcs4
*
pattern
,
size_t
psize
,
const
TdUcs4
*
str
,
size_t
s
size
,
const
SPatternCompareInfo
*
pInfo
)
{
TdUcs4
c
,
c1
;
TdUcs4
c
,
c1
;
TdUcs4
matchOne
=
L'_'
;
// "_"
TdUcs4
matchAll
=
L'%'
;
// "%"
int32_t
i
=
0
;
int32_t
i
=
0
;
int32_t
j
=
0
;
int32_t
j
=
0
;
int32_t
nMatchChar
=
0
;
while
((
c
=
patterStr
[
i
++
])
!=
0
)
{
while
((
i
<
psize
)
&&
((
c
=
pattern
[
i
++
])
!=
0
)
)
{
if
(
c
==
matchAll
)
{
/* Match "%" */
if
(
c
==
pInfo
->
u
matchAll
)
{
/* Match "%" */
while
((
c
=
patterStr
[
i
++
])
==
matchAll
||
c
==
matchOne
)
{
while
((
i
<
psize
)
&&
((
c
=
pattern
[
i
++
])
==
pInfo
->
umatchAll
||
c
==
pInfo
->
umatchOne
))
{
if
(
c
==
matchOne
&&
(
j
>=
size
||
str
[
j
++
]
==
0
))
{
if
(
c
==
pInfo
->
umatchOne
)
{
return
TSDB_PATTERN_NOWILDCARDMATCH
;
if
(
j
>=
ssize
||
str
[
j
++
]
==
0
)
{
return
TSDB_PATTERN_NOWILDCARDMATCH
;
}
else
{
++
nMatchChar
;
}
}
}
}
}
if
(
c
==
0
)
{
if
(
i
>=
psize
&&
(
c
==
pInfo
->
umatchOne
||
c
==
pInfo
->
umatchAll
))
{
return
TSDB_PATTERN_MATCH
;
return
TSDB_PATTERN_MATCH
;
}
}
TdUcs4
accept
[
3
]
=
{
towupper
(
c
),
towlower
(
c
),
0
};
TdUcs4
rejectList
[
2
]
=
{
towupper
(
c
),
towlower
(
c
)};
str
+=
nMatchChar
;
int32_t
remain
=
ssize
-
nMatchChar
;
while
(
1
)
{
while
(
1
)
{
size_t
n
=
wcscspn
(
str
,
accept
);
size_t
n
=
twcsncspn
(
str
,
remain
,
rejectList
,
2
);
str
+=
n
;
str
+=
n
;
if
(
str
[
0
]
==
0
||
(
n
>=
size
))
{
remain
-=
n
;
if
((
remain
<=
0
)
||
str
[
0
]
==
0
)
{
break
;
break
;
}
}
int32_t
ret
=
WCSPatternMatch
(
&
patterStr
[
i
],
++
str
,
size
-
n
-
1
,
pInfo
);
int32_t
ret
=
wcsPatternMatch
(
&
pattern
[
i
],
psize
-
i
,
++
str
,
--
remain
,
pInfo
);
if
(
ret
!=
TSDB_PATTERN_NOMATCH
)
{
if
(
ret
!=
TSDB_PATTERN_NOMATCH
)
{
return
ret
;
return
ret
;
}
}
...
@@ -1109,10 +1123,16 @@ int32_t WCSPatternMatch(const TdUcs4 *patterStr, const TdUcs4 *str, size_t size,
...
@@ -1109,10 +1123,16 @@ int32_t WCSPatternMatch(const TdUcs4 *patterStr, const TdUcs4 *str, size_t size,
return
TSDB_PATTERN_NOWILDCARDMATCH
;
return
TSDB_PATTERN_NOWILDCARDMATCH
;
}
}
c1
=
str
[
j
++
];
if
(
j
<
ssize
)
{
c1
=
str
[
j
++
];
nMatchChar
++
;
if
(
c
==
L'\\'
&&
pattern
[
i
]
==
L'_'
&&
c1
==
L'_'
)
{
i
++
;
continue
;
}
if
(
j
<=
size
)
{
if
(
c
==
c1
||
towlower
(
c
)
==
towlower
(
c1
)
||
(
c
==
pInfo
->
umatchOne
&&
c1
!=
0
))
{
if
(
c
==
c1
||
towlower
(
c
)
==
towlower
(
c1
)
||
(
c
==
matchOne
&&
c1
!=
0
))
{
continue
;
continue
;
}
}
}
}
...
@@ -1120,16 +1140,39 @@ int32_t WCSPatternMatch(const TdUcs4 *patterStr, const TdUcs4 *str, size_t size,
...
@@ -1120,16 +1140,39 @@ int32_t WCSPatternMatch(const TdUcs4 *patterStr, const TdUcs4 *str, size_t size,
return
TSDB_PATTERN_NOMATCH
;
return
TSDB_PATTERN_NOMATCH
;
}
}
return
(
str
[
j
]
==
0
||
j
>=
size
)
?
TSDB_PATTERN_MATCH
:
TSDB_PATTERN_NOMATCH
;
return
(
j
>=
ssize
||
str
[
j
]
==
0
)
?
TSDB_PATTERN_MATCH
:
TSDB_PATTERN_NOMATCH
;
}
int32_t
comparestrRegexNMatch
(
const
void
*
pLeft
,
const
void
*
pRight
)
{
return
comparestrRegexMatch
(
pLeft
,
pRight
)
?
0
:
1
;
}
}
int32_t
compareStrRegexCompMatch
(
const
void
*
pLeft
,
const
void
*
pRight
)
{
return
compareStrRegexComp
(
pLeft
,
pRight
);
}
static
int32_t
doExecRegexMatch
(
const
char
*
pString
,
const
char
*
pPattern
)
{
int32_t
ret
=
0
;
regex_t
regex
;
char
msgbuf
[
256
]
=
{
0
};
int32_t
cflags
=
REG_EXTENDED
;
if
((
ret
=
regcomp
(
&
regex
,
pPattern
,
cflags
))
!=
0
)
{
regerror
(
ret
,
&
regex
,
msgbuf
,
tListLen
(
msgbuf
));
int32_t
compareStrRegexCompNMatch
(
const
void
*
pLeft
,
const
void
*
pRight
)
{
uError
(
"Failed to compile regex pattern %s. reason %s"
,
pPattern
,
msgbuf
);
return
compareStrRegexComp
(
pLeft
,
pRight
)
?
0
:
1
;
regfree
(
&
regex
);
return
1
;
}
regmatch_t
pmatch
[
1
];
ret
=
regexec
(
&
regex
,
pString
,
1
,
pmatch
,
0
);
if
(
ret
!=
0
&&
ret
!=
REG_NOMATCH
)
{
regerror
(
ret
,
&
regex
,
msgbuf
,
sizeof
(
msgbuf
));
uDebug
(
"Failed to match %s with pattern %s, reason %s"
,
pString
,
pPattern
,
msgbuf
)
}
regfree
(
&
regex
);
return
(
ret
==
0
)
?
0
:
1
;
}
}
int32_t
compare
StrRegexComp
(
const
void
*
pLeft
,
const
void
*
pRight
)
{
int32_t
compare
strRegexMatch
(
const
void
*
pLeft
,
const
void
*
pRight
)
{
size_t
sz
=
varDataLen
(
pRight
);
size_t
sz
=
varDataLen
(
pRight
);
char
*
pattern
=
taosMemoryMalloc
(
sz
+
1
);
char
*
pattern
=
taosMemoryMalloc
(
sz
+
1
);
memcpy
(
pattern
,
varDataVal
(
pRight
),
varDataLen
(
pRight
));
memcpy
(
pattern
,
varDataVal
(
pRight
),
varDataLen
(
pRight
));
...
@@ -1140,30 +1183,48 @@ int32_t compareStrRegexComp(const void *pLeft, const void *pRight) {
...
@@ -1140,30 +1183,48 @@ int32_t compareStrRegexComp(const void *pLeft, const void *pRight) {
memcpy
(
str
,
varDataVal
(
pLeft
),
sz
);
memcpy
(
str
,
varDataVal
(
pLeft
),
sz
);
str
[
sz
]
=
0
;
str
[
sz
]
=
0
;
int32_t
errCode
=
0
;
int32_t
ret
=
doExecRegexMatch
(
str
,
pattern
);
regex_t
regex
;
char
msgbuf
[
256
]
=
{
0
};
int32_t
cflags
=
REG_EXTENDED
;
taosMemoryFree
(
str
);
if
((
errCode
=
regcomp
(
&
regex
,
pattern
,
cflags
))
!=
0
)
{
taosMemoryFree
(
pattern
);
regerror
(
errCode
,
&
regex
,
msgbuf
,
sizeof
(
msgbuf
));
uError
(
"Failed to compile regex pattern %s. reason %s"
,
pattern
,
msgbuf
);
return
(
ret
==
0
)
?
0
:
1
;;
regfree
(
&
regex
);
}
taosMemoryFree
(
str
);
int32_t
comparewcsRegexMatch
(
const
void
*
pString
,
const
void
*
pPattern
)
{
size_t
len
=
varDataLen
(
pPattern
);
char
*
pattern
=
taosMemoryMalloc
(
len
+
1
);
int
convertLen
=
taosUcs4ToMbs
((
TdUcs4
*
)
varDataVal
(
pPattern
),
len
,
pattern
);
if
(
convertLen
<
0
)
{
taosMemoryFree
(
pattern
);
taosMemoryFree
(
pattern
);
return
1
;
return
TSDB_CODE_APP_ERROR
;
}
}
errCode
=
regexec
(
&
regex
,
str
,
0
,
NULL
,
0
);
pattern
[
convertLen
]
=
0
;
if
(
errCode
!=
0
&&
errCode
!=
REG_NOMATCH
)
{
regerror
(
errCode
,
&
regex
,
msgbuf
,
sizeof
(
msgbuf
));
len
=
varDataLen
(
pString
);
uDebug
(
"Failed to match %s with pattern %s, reason %s"
,
str
,
pattern
,
msgbuf
)
char
*
str
=
taosMemoryMalloc
(
len
+
1
);
convertLen
=
taosUcs4ToMbs
((
TdUcs4
*
)
varDataVal
(
pString
),
len
,
str
);
if
(
convertLen
<
0
)
{
taosMemoryFree
(
str
);
taosMemoryFree
(
pattern
);
return
TSDB_CODE_APP_ERROR
;
}
}
int32_t
result
=
(
errCode
==
0
)
?
0
:
1
;
regfree
(
&
regex
);
str
[
convertLen
]
=
0
;
int32_t
ret
=
doExecRegexMatch
(
str
,
pattern
);
taosMemoryFree
(
str
);
taosMemoryFree
(
str
);
taosMemoryFree
(
pattern
);
taosMemoryFree
(
pattern
);
return
result
;
return
(
ret
==
0
)
?
0
:
1
;
}
int32_t
comparewcsRegexNMatch
(
const
void
*
pLeft
,
const
void
*
pRight
)
{
return
comparewcsRegexMatch
(
pLeft
,
pRight
)
?
0
:
1
;
}
}
int32_t
taosArrayCompareString
(
const
void
*
a
,
const
void
*
b
)
{
int32_t
taosArrayCompareString
(
const
void
*
a
,
const
void
*
b
)
{
...
@@ -1173,46 +1234,35 @@ int32_t taosArrayCompareString(const void *a, const void *b) {
...
@@ -1173,46 +1234,35 @@ int32_t taosArrayCompareString(const void *a, const void *b) {
return
compareLenPrefixedStr
(
x
,
y
);
return
compareLenPrefixedStr
(
x
,
y
);
}
}
int32_t
compareStrPatternMatch
(
const
void
*
pLeft
,
const
void
*
pRight
)
{
int32_t
comparestrPatternMatch
(
const
void
*
pLeft
,
const
void
*
pRight
)
{
SPatternCompareInfo
pInfo
=
{
'%'
,
'_'
};
SPatternCompareInfo
pInfo
=
PATTERN_COMPARE_INFO_INITIALIZER
;
assert
(
varDataLen
(
pRight
)
<=
TSDB_MAX_FIELD_LEN
);
char
*
pattern
=
taosMemoryCalloc
(
varDataLen
(
pRight
)
+
1
,
sizeof
(
char
));
memcpy
(
pattern
,
varDataVal
(
pRight
),
varDataLen
(
pRight
));
ASSERT
(
varDataLen
(
pRight
)
<=
TSDB_MAX_FIELD_LEN
);
size_t
pLen
=
varDataLen
(
pRight
);
size_t
sz
=
varDataLen
(
pLeft
);
size_t
sz
=
varDataLen
(
pLeft
);
char
*
buf
=
taosMemoryMalloc
(
sz
+
1
);
memcpy
(
buf
,
varDataVal
(
pLeft
),
sz
);
buf
[
sz
]
=
0
;
int32_t
ret
=
patternMatch
(
pattern
,
buf
,
sz
,
&
pInfo
);
int32_t
ret
=
patternMatch
(
varDataVal
(
pRight
),
pLen
,
varDataVal
(
pLeft
),
sz
,
&
pInfo
);
taosMemoryFree
(
buf
);
taosMemoryFree
(
pattern
);
return
(
ret
==
TSDB_PATTERN_MATCH
)
?
0
:
1
;
return
(
ret
==
TSDB_PATTERN_MATCH
)
?
0
:
1
;
}
}
int32_t
compare
StrPatternNot
Match
(
const
void
*
pLeft
,
const
void
*
pRight
)
{
int32_t
compare
strPatternN
Match
(
const
void
*
pLeft
,
const
void
*
pRight
)
{
return
compare
S
trPatternMatch
(
pLeft
,
pRight
)
?
0
:
1
;
return
compare
s
trPatternMatch
(
pLeft
,
pRight
)
?
0
:
1
;
}
}
int32_t
compare
WStr
PatternMatch
(
const
void
*
pLeft
,
const
void
*
pRight
)
{
int32_t
compare
wcs
PatternMatch
(
const
void
*
pLeft
,
const
void
*
pRight
)
{
SPatternCompareInfo
pInfo
=
{
'%'
,
'_'
}
;
SPatternCompareInfo
pInfo
=
PATTERN_COMPARE_INFO_INITIALIZER
;
assert
(
varDataLen
(
pRight
)
<=
TSDB_MAX_FIELD_LEN
*
TSDB_NCHAR_SIZE
);
size_t
psize
=
varDataLen
(
pRight
);
char
*
pattern
=
taosMemoryCalloc
(
varDataLen
(
pRight
)
+
TSDB_NCHAR_SIZE
,
1
);
memcpy
(
pattern
,
varDataVal
(
pRight
),
varDataLen
(
pRight
));
int32_t
ret
=
WCSPatternMatch
((
TdUcs4
*
)
pattern
,
(
TdUcs4
*
)
varDataVal
(
pLeft
),
varDataLen
(
pLeft
)
/
TSDB_NCHAR_SIZE
,
&
pInfo
);
taosMemoryFree
(
pattern
);
int32_t
ret
=
wcsPatternMatch
((
TdUcs4
*
)
varDataVal
(
pRight
),
psize
/
TSDB_NCHAR_SIZE
,
(
TdUcs4
*
)
varDataVal
(
pLeft
),
varDataLen
(
pLeft
)
/
TSDB_NCHAR_SIZE
,
&
pInfo
);
return
(
ret
==
TSDB_PATTERN_MATCH
)
?
0
:
1
;
return
(
ret
==
TSDB_PATTERN_MATCH
)
?
0
:
1
;
}
}
int32_t
compare
WStrPatternNot
Match
(
const
void
*
pLeft
,
const
void
*
pRight
)
{
int32_t
compare
wcsPatternN
Match
(
const
void
*
pLeft
,
const
void
*
pRight
)
{
return
compare
WStr
PatternMatch
(
pLeft
,
pRight
)
?
0
:
1
;
return
compare
wcs
PatternMatch
(
pLeft
,
pRight
)
?
0
:
1
;
}
}
__compar_fn_t
getComparFunc
(
int32_t
type
,
int32_t
optr
)
{
__compar_fn_t
getComparFunc
(
int32_t
type
,
int32_t
optr
)
{
__compar_fn_t
comparFn
=
NULL
;
__compar_fn_t
comparFn
=
NULL
;
...
@@ -1285,13 +1335,13 @@ __compar_fn_t getComparFunc(int32_t type, int32_t optr) {
...
@@ -1285,13 +1335,13 @@ __compar_fn_t getComparFunc(int32_t type, int32_t optr) {
break
;
break
;
case
TSDB_DATA_TYPE_BINARY
:
{
case
TSDB_DATA_TYPE_BINARY
:
{
if
(
optr
==
OP_TYPE_MATCH
)
{
if
(
optr
==
OP_TYPE_MATCH
)
{
comparFn
=
compare
StrRegexComp
Match
;
comparFn
=
compare
strRegex
Match
;
}
else
if
(
optr
==
OP_TYPE_NMATCH
)
{
}
else
if
(
optr
==
OP_TYPE_NMATCH
)
{
comparFn
=
compare
StrRegexComp
NMatch
;
comparFn
=
compare
strRegex
NMatch
;
}
else
if
(
optr
==
OP_TYPE_LIKE
)
{
/* wildcard query using like operator */
}
else
if
(
optr
==
OP_TYPE_LIKE
)
{
/* wildcard query using like operator */
comparFn
=
compare
S
trPatternMatch
;
comparFn
=
compare
s
trPatternMatch
;
}
else
if
(
optr
==
OP_TYPE_NOT_LIKE
)
{
/* wildcard query using like operator */
}
else
if
(
optr
==
OP_TYPE_NOT_LIKE
)
{
/* wildcard query using like operator */
comparFn
=
compare
StrPatternNot
Match
;
comparFn
=
compare
strPatternN
Match
;
}
else
if
(
optr
==
OP_TYPE_IN
)
{
}
else
if
(
optr
==
OP_TYPE_IN
)
{
comparFn
=
compareChkInString
;
comparFn
=
compareChkInString
;
}
else
if
(
optr
==
OP_TYPE_NOT_IN
)
{
}
else
if
(
optr
==
OP_TYPE_NOT_IN
)
{
...
@@ -1305,13 +1355,13 @@ __compar_fn_t getComparFunc(int32_t type, int32_t optr) {
...
@@ -1305,13 +1355,13 @@ __compar_fn_t getComparFunc(int32_t type, int32_t optr) {
case
TSDB_DATA_TYPE_NCHAR
:
{
case
TSDB_DATA_TYPE_NCHAR
:
{
if
(
optr
==
OP_TYPE_MATCH
)
{
if
(
optr
==
OP_TYPE_MATCH
)
{
comparFn
=
compare
StrRegexComp
Match
;
comparFn
=
compare
wcsRegex
Match
;
}
else
if
(
optr
==
OP_TYPE_NMATCH
)
{
}
else
if
(
optr
==
OP_TYPE_NMATCH
)
{
comparFn
=
compare
StrRegexComp
NMatch
;
comparFn
=
compare
wcsRegex
NMatch
;
}
else
if
(
optr
==
OP_TYPE_LIKE
)
{
}
else
if
(
optr
==
OP_TYPE_LIKE
)
{
comparFn
=
compare
WStr
PatternMatch
;
comparFn
=
compare
wcs
PatternMatch
;
}
else
if
(
optr
==
OP_TYPE_NOT_LIKE
)
{
}
else
if
(
optr
==
OP_TYPE_NOT_LIKE
)
{
comparFn
=
compare
WStrPatternNot
Match
;
comparFn
=
compare
wcsPatternN
Match
;
}
else
if
(
optr
==
OP_TYPE_IN
)
{
}
else
if
(
optr
==
OP_TYPE_IN
)
{
comparFn
=
compareChkInString
;
comparFn
=
compareChkInString
;
}
else
if
(
optr
==
OP_TYPE_NOT_IN
)
{
}
else
if
(
optr
==
OP_TYPE_NOT_IN
)
{
...
...
source/util/src/tlog.c
浏览文件 @
b8cbc935
...
@@ -792,7 +792,7 @@ cmp_end:
...
@@ -792,7 +792,7 @@ cmp_end:
return
ret
;
return
ret
;
}
}
bool
taosAssert
(
bool
condition
,
const
char
*
file
,
int32_t
line
,
const
char
*
format
,
...)
{
bool
taosAssert
Debug
(
bool
condition
,
const
char
*
file
,
int32_t
line
,
const
char
*
format
,
...)
{
if
(
condition
)
return
false
;
if
(
condition
)
return
false
;
const
char
*
flags
=
"UTL FATAL "
;
const
char
*
flags
=
"UTL FATAL "
;
...
@@ -1026,3 +1026,22 @@ void taosReleaseCrashLogFile(TdFilePtr pFile, bool truncateFile) {
...
@@ -1026,3 +1026,22 @@ void taosReleaseCrashLogFile(TdFilePtr pFile, bool truncateFile) {
taosCloseFile
(
&
pFile
);
taosCloseFile
(
&
pFile
);
}
}
#ifdef NDEBUG
bool
taosAssertRelease
(
bool
condition
)
{
if
(
condition
)
return
false
;
const
char
*
flags
=
"UTL FATAL "
;
ELogLevel
level
=
DEBUG_FATAL
;
int32_t
dflag
=
255
;
// tsLogEmbedded ? 255 : uDebugFlag
taosPrintLog
(
flags
,
level
,
dflag
,
"tAssert called in release mode, exit:%d"
,
tsAssert
);
taosPrintTrace
(
flags
,
level
,
dflag
);
if
(
tsAssert
)
{
taosMsleep
(
300
);
abort
();
}
return
true
;
}
#endif
source/util/src/tutil.c
浏览文件 @
b8cbc935
...
@@ -144,6 +144,16 @@ char *strnchr(const char *haystack, char needle, int32_t len, bool skipquote) {
...
@@ -144,6 +144,16 @@ char *strnchr(const char *haystack, char needle, int32_t len, bool skipquote) {
return
NULL
;
return
NULL
;
}
}
TdUcs4
*
wcsnchr
(
const
TdUcs4
*
haystack
,
TdUcs4
needle
,
size_t
len
)
{
for
(
int32_t
i
=
0
;
i
<
len
;
++
i
)
{
if
(
haystack
[
i
]
==
needle
)
{
return
(
TdUcs4
*
)
&
haystack
[
i
];
}
}
return
NULL
;
}
char
*
strtolower
(
char
*
dst
,
const
char
*
src
)
{
char
*
strtolower
(
char
*
dst
,
const
char
*
src
)
{
int32_t
esc
=
0
;
int32_t
esc
=
0
;
char
quote
=
0
,
*
p
=
dst
,
c
;
char
quote
=
0
,
*
p
=
dst
,
c
;
...
@@ -376,3 +386,73 @@ void taosIp2String(uint32_t ip, char *str) {
...
@@ -376,3 +386,73 @@ void taosIp2String(uint32_t ip, char *str) {
void
taosIpPort2String
(
uint32_t
ip
,
uint16_t
port
,
char
*
str
)
{
void
taosIpPort2String
(
uint32_t
ip
,
uint16_t
port
,
char
*
str
)
{
sprintf
(
str
,
"%u.%u.%u.%u:%u"
,
ip
&
0xFF
,
(
ip
>>
8
)
&
0xFF
,
(
ip
>>
16
)
&
0xFF
,
(
uint8_t
)(
ip
>>
24
),
port
);
sprintf
(
str
,
"%u.%u.%u.%u:%u"
,
ip
&
0xFF
,
(
ip
>>
8
)
&
0xFF
,
(
ip
>>
16
)
&
0xFF
,
(
uint8_t
)(
ip
>>
24
),
port
);
}
}
size_t
tstrncspn
(
const
char
*
str
,
size_t
size
,
const
char
*
reject
,
size_t
rsize
)
{
if
(
rsize
==
0
||
rsize
==
1
)
{
char
*
p
=
strnchr
(
str
,
reject
[
0
],
size
,
false
);
return
(
p
==
NULL
)
?
size
:
(
p
-
str
);
}
/* Use multiple small memsets to enable inlining on most targets. */
unsigned
char
table
[
256
];
unsigned
char
*
p
=
memset
(
table
,
0
,
64
);
memset
(
p
+
64
,
0
,
64
);
memset
(
p
+
128
,
0
,
64
);
memset
(
p
+
192
,
0
,
64
);
unsigned
char
*
s
=
(
unsigned
char
*
)
reject
;
int32_t
index
=
0
;
do
{
p
[
s
[
index
++
]]
=
1
;
}
while
(
index
<
rsize
);
s
=
(
unsigned
char
*
)
str
;
int32_t
times
=
size
>>
2
;
if
(
times
==
0
)
{
for
(
int32_t
i
=
0
;
i
<
size
;
++
i
)
{
if
(
p
[
s
[
i
]])
{
return
i
;
}
}
return
size
;
}
index
=
0
;
uint32_t
c0
,
c1
,
c2
,
c3
;
for
(
int32_t
i
=
0
;
i
<
times
;
++
i
,
index
+=
4
)
{
int32_t
j
=
index
;
c0
=
p
[
s
[
j
]];
c1
=
p
[
s
[
j
+
1
]];
c2
=
p
[
s
[
j
+
2
]];
c3
=
p
[
s
[
j
+
3
]];
if
((
c0
|
c1
|
c2
|
c3
)
!=
0
)
{
size_t
count
=
((
i
+
1
)
>>
2
);
return
(
c0
|
c1
)
!=
0
?
count
-
c0
+
1
:
count
-
c2
+
3
;
}
}
int32_t
offset
=
times
*
4
;
for
(
int32_t
i
=
offset
;
i
<
size
;
++
i
)
{
if
(
p
[
s
[
i
]])
{
return
i
;
}
}
return
size
;
}
size_t
twcsncspn
(
const
TdUcs4
*
wcs
,
size_t
size
,
const
TdUcs4
*
reject
,
size_t
rsize
)
{
if
(
rsize
==
0
||
rsize
==
1
)
{
TdUcs4
*
p
=
wcsnchr
(
wcs
,
reject
[
0
],
size
);
return
(
p
==
NULL
)
?
size
:
(
p
-
wcs
);
}
size_t
index
=
0
;
while
((
index
<
size
)
&&
(
wcsnchr
(
reject
,
wcs
[
index
],
rsize
)
==
NULL
))
{
++
index
;
}
return
index
;
}
source/util/test/utilTests.cpp
浏览文件 @
b8cbc935
#include <gtest/gtest.h>
#include <stdlib.h>
#include <tutil.h>
#include <random>
#include "tarray.h"
#include "tcompare.h"
namespace
{
}
// namespace
TEST
(
utilTest
,
wchar_pattern_match_test
)
{
const
TdWchar
*
pattern
=
L"%1"
;
int32_t
ret
=
0
;
SPatternCompareInfo
pInfo
=
PATTERN_COMPARE_INFO_INITIALIZER
;
const
TdWchar
*
str0
=
L"14"
;
ret
=
wcsPatternMatch
(
reinterpret_cast
<
const
TdUcs4
*>
(
pattern
),
2
,
reinterpret_cast
<
const
TdUcs4
*>
(
str0
),
wcslen
(
str0
),
&
pInfo
);
ASSERT_EQ
(
ret
,
TSDB_PATTERN_NOWILDCARDMATCH
);
const
TdWchar
*
str1
=
L"11"
;
ret
=
wcsPatternMatch
(
reinterpret_cast
<
const
TdUcs4
*>
(
pattern
),
2
,
reinterpret_cast
<
const
TdUcs4
*>
(
str1
),
wcslen
(
str1
),
&
pInfo
);
ASSERT_EQ
(
ret
,
TSDB_PATTERN_MATCH
);
const
TdWchar
*
str2
=
L"41"
;
ret
=
wcsPatternMatch
(
reinterpret_cast
<
const
TdUcs4
*>
(
pattern
),
2
,
reinterpret_cast
<
const
TdUcs4
*>
(
str2
),
wcslen
(
str2
),
&
pInfo
);
ASSERT_EQ
(
ret
,
TSDB_PATTERN_MATCH
);
const
TdWchar
*
pattern3
=
L"%_"
;
const
TdWchar
*
str3
=
L"88"
;
ret
=
wcsPatternMatch
(
reinterpret_cast
<
const
TdUcs4
*>
(
pattern3
),
2
,
reinterpret_cast
<
const
TdUcs4
*>
(
str3
),
wcslen
(
str3
),
&
pInfo
);
ASSERT_EQ
(
ret
,
TSDB_PATTERN_MATCH
);
const
TdWchar
*
pattern4
=
L"%___"
;
const
TdWchar
*
str4
=
L"88"
;
ret
=
wcsPatternMatch
(
reinterpret_cast
<
const
TdUcs4
*>
(
pattern4
),
4
,
reinterpret_cast
<
const
TdUcs4
*>
(
str4
),
wcslen
(
str4
),
&
pInfo
);
ASSERT_EQ
(
ret
,
TSDB_PATTERN_NOWILDCARDMATCH
);
const
TdWchar
*
pattern5
=
L"%___"
;
const
TdWchar
*
str5
=
L"883391"
;
ret
=
wcsPatternMatch
(
reinterpret_cast
<
const
TdUcs4
*>
(
pattern5
),
4
,
reinterpret_cast
<
const
TdUcs4
*>
(
str5
),
wcslen
(
str5
),
&
pInfo
);
ASSERT_EQ
(
ret
,
TSDB_PATTERN_MATCH
);
const
TdWchar
*
pattern6
=
L"%___66"
;
const
TdWchar
*
str6
=
L"88339166"
;
ret
=
wcsPatternMatch
(
reinterpret_cast
<
const
TdUcs4
*>
(
pattern6
),
6
,
reinterpret_cast
<
const
TdUcs4
*>
(
str6
),
wcslen
(
str6
),
&
pInfo
);
ASSERT_EQ
(
ret
,
TSDB_PATTERN_MATCH
);
const
TdWchar
*
pattern7
=
L"%____66"
;
const
TdWchar
*
str7
=
L"66166"
;
ret
=
wcsPatternMatch
(
reinterpret_cast
<
const
TdUcs4
*>
(
pattern7
),
7
,
reinterpret_cast
<
const
TdUcs4
*>
(
str7
),
wcslen
(
str7
),
&
pInfo
);
ASSERT_EQ
(
ret
,
TSDB_PATTERN_NOWILDCARDMATCH
);
const
TdWchar
*
pattern8
=
L"6%____66"
;
const
TdWchar
*
str8
=
L"666166"
;
ret
=
wcsPatternMatch
(
reinterpret_cast
<
const
TdUcs4
*>
(
pattern8
),
8
,
reinterpret_cast
<
const
TdUcs4
*>
(
str8
),
wcslen
(
str8
),
&
pInfo
);
ASSERT_EQ
(
ret
,
TSDB_PATTERN_NOWILDCARDMATCH
);
const
TdWchar
*
pattern9
=
L"6
\\
__6"
;
const
TdWchar
*
str9
=
L"6_66"
;
ret
=
wcsPatternMatch
(
reinterpret_cast
<
const
TdUcs4
*>
(
pattern9
),
6
,
reinterpret_cast
<
const
TdUcs4
*>
(
str9
),
wcslen
(
str9
),
&
pInfo
);
ASSERT_EQ
(
ret
,
TSDB_PATTERN_MATCH
);
const
TdWchar
*
pattern10
=
L"%"
;
const
TdWchar
*
str10
=
L""
;
ret
=
wcsPatternMatch
(
reinterpret_cast
<
const
TdUcs4
*>
(
pattern10
),
1
,
reinterpret_cast
<
const
TdUcs4
*>
(
str10
),
0
,
&
pInfo
);
ASSERT_EQ
(
ret
,
TSDB_PATTERN_MATCH
);
const
TdWchar
*
pattern11
=
L"china%"
;
const
TdWchar
*
str11
=
L"CHI "
;
ret
=
wcsPatternMatch
(
reinterpret_cast
<
const
TdUcs4
*>
(
pattern11
),
6
,
reinterpret_cast
<
const
TdUcs4
*>
(
str11
),
3
,
&
pInfo
);
ASSERT_EQ
(
ret
,
TSDB_PATTERN_NOMATCH
);
const
TdWchar
*
pattern12
=
L"abc%"
;
const
TdWchar
*
str12
=
L""
;
ret
=
wcsPatternMatch
(
reinterpret_cast
<
const
TdUcs4
*>
(
pattern12
),
4
,
reinterpret_cast
<
const
TdUcs4
*>
(
str12
),
0
,
&
pInfo
);
ASSERT_EQ
(
ret
,
TSDB_PATTERN_NOMATCH
);
}
TEST
(
utilTest
,
wchar_pattern_match_no_terminated
)
{
const
TdWchar
*
pattern
=
L"%1 "
;
int32_t
ret
=
0
;
SPatternCompareInfo
pInfo
=
PATTERN_COMPARE_INFO_INITIALIZER
;
const
TdWchar
*
str0
=
L"14 "
;
ret
=
wcsPatternMatch
(
reinterpret_cast
<
const
TdUcs4
*>
(
pattern
),
2
,
reinterpret_cast
<
const
TdUcs4
*>
(
str0
),
2
,
&
pInfo
);
ASSERT_EQ
(
ret
,
TSDB_PATTERN_NOWILDCARDMATCH
);
const
TdWchar
*
str1
=
L"11 "
;
ret
=
wcsPatternMatch
(
reinterpret_cast
<
const
TdUcs4
*>
(
pattern
),
2
,
reinterpret_cast
<
const
TdUcs4
*>
(
str1
),
2
,
&
pInfo
);
ASSERT_EQ
(
ret
,
TSDB_PATTERN_MATCH
);
const
TdWchar
*
str2
=
L"41 "
;
ret
=
wcsPatternMatch
(
reinterpret_cast
<
const
TdUcs4
*>
(
pattern
),
2
,
reinterpret_cast
<
const
TdUcs4
*>
(
str2
),
2
,
&
pInfo
);
ASSERT_EQ
(
ret
,
TSDB_PATTERN_MATCH
);
const
TdWchar
*
pattern3
=
L"%_ "
;
const
TdWchar
*
str3
=
L"88 "
;
ret
=
wcsPatternMatch
(
reinterpret_cast
<
const
TdUcs4
*>
(
pattern3
),
2
,
reinterpret_cast
<
const
TdUcs4
*>
(
str3
),
2
,
&
pInfo
);
ASSERT_EQ
(
ret
,
TSDB_PATTERN_MATCH
);
const
TdWchar
*
pattern4
=
L"%___ "
;
const
TdWchar
*
str4
=
L"88 "
;
ret
=
wcsPatternMatch
(
reinterpret_cast
<
const
TdUcs4
*>
(
pattern4
),
4
,
reinterpret_cast
<
const
TdUcs4
*>
(
str4
),
2
,
&
pInfo
);
ASSERT_EQ
(
ret
,
TSDB_PATTERN_NOWILDCARDMATCH
);
const
TdWchar
*
pattern5
=
L"%___ "
;
const
TdWchar
*
str5
=
L"883391 "
;
ret
=
wcsPatternMatch
(
reinterpret_cast
<
const
TdUcs4
*>
(
pattern5
),
4
,
reinterpret_cast
<
const
TdUcs4
*>
(
str5
),
6
,
&
pInfo
);
ASSERT_EQ
(
ret
,
TSDB_PATTERN_MATCH
);
const
TdWchar
*
pattern6
=
L"%___66 "
;
const
TdWchar
*
str6
=
L"88339166 "
;
ret
=
wcsPatternMatch
(
reinterpret_cast
<
const
TdUcs4
*>
(
pattern6
),
6
,
reinterpret_cast
<
const
TdUcs4
*>
(
str6
),
8
,
&
pInfo
);
ASSERT_EQ
(
ret
,
TSDB_PATTERN_MATCH
);
const
TdWchar
*
pattern7
=
L"%____66 "
;
const
TdWchar
*
str7
=
L"66166 "
;
ret
=
wcsPatternMatch
(
reinterpret_cast
<
const
TdUcs4
*>
(
pattern7
),
7
,
reinterpret_cast
<
const
TdUcs4
*>
(
str7
),
5
,
&
pInfo
);
ASSERT_EQ
(
ret
,
TSDB_PATTERN_NOWILDCARDMATCH
);
const
TdWchar
*
pattern8
=
L"6%____66 "
;
const
TdWchar
*
str8
=
L"666166 "
;
ret
=
wcsPatternMatch
(
reinterpret_cast
<
const
TdUcs4
*>
(
pattern8
),
8
,
reinterpret_cast
<
const
TdUcs4
*>
(
str8
),
6
,
&
pInfo
);
ASSERT_EQ
(
ret
,
TSDB_PATTERN_NOWILDCARDMATCH
);
const
TdWchar
*
pattern9
=
L"6
\\
_6 "
;
const
TdWchar
*
str9
=
L"6_6 "
;
ret
=
wcsPatternMatch
(
reinterpret_cast
<
const
TdUcs4
*>
(
pattern9
),
4
,
reinterpret_cast
<
const
TdUcs4
*>
(
str9
),
3
,
&
pInfo
);
ASSERT_EQ
(
ret
,
TSDB_PATTERN_MATCH
);
const
TdWchar
*
pattern10
=
L"% "
;
const
TdWchar
*
str10
=
L"6_6 "
;
ret
=
wcsPatternMatch
(
reinterpret_cast
<
const
TdUcs4
*>
(
pattern10
),
1
,
reinterpret_cast
<
const
TdUcs4
*>
(
str10
),
3
,
&
pInfo
);
ASSERT_EQ
(
ret
,
TSDB_PATTERN_MATCH
);
}
TEST
(
utilTest
,
char_pattern_match_test
)
{
const
char
*
pattern
=
"%1"
;
int32_t
ret
=
0
;
SPatternCompareInfo
pInfo
=
PATTERN_COMPARE_INFO_INITIALIZER
;
const
char
*
str0
=
"14"
;
ret
=
patternMatch
(
pattern
,
2
,
str0
,
strlen
(
str0
),
&
pInfo
);
ASSERT_EQ
(
ret
,
TSDB_PATTERN_NOWILDCARDMATCH
);
const
char
*
str1
=
"11"
;
ret
=
patternMatch
(
pattern
,
2
,
str1
,
strlen
(
str1
),
&
pInfo
);
ASSERT_EQ
(
ret
,
TSDB_PATTERN_MATCH
);
const
char
*
str2
=
"41"
;
ret
=
patternMatch
(
pattern
,
2
,
str2
,
strlen
(
str2
),
&
pInfo
);
ASSERT_EQ
(
ret
,
TSDB_PATTERN_MATCH
);
const
char
*
pattern3
=
"%_"
;
const
char
*
str3
=
"88"
;
ret
=
patternMatch
(
pattern3
,
2
,
str3
,
strlen
(
str3
),
&
pInfo
);
ASSERT_EQ
(
ret
,
TSDB_PATTERN_MATCH
);
const
char
*
pattern4
=
"%___"
;
const
char
*
str4
=
"88"
;
ret
=
patternMatch
(
pattern4
,
4
,
str4
,
strlen
(
str4
),
&
pInfo
);
ASSERT_EQ
(
ret
,
TSDB_PATTERN_NOWILDCARDMATCH
);
const
char
*
pattern5
=
"%___"
;
const
char
*
str5
=
"883391"
;
ret
=
patternMatch
(
pattern5
,
4
,
str5
,
strlen
(
str5
),
&
pInfo
);
ASSERT_EQ
(
ret
,
TSDB_PATTERN_MATCH
);
const
char
*
pattern6
=
"%___66"
;
const
char
*
str6
=
"88339166"
;
ret
=
patternMatch
(
pattern6
,
6
,
str6
,
strlen
(
str6
),
&
pInfo
);
ASSERT_EQ
(
ret
,
TSDB_PATTERN_MATCH
);
const
char
*
pattern7
=
"%____66"
;
const
char
*
str7
=
"66166"
;
ret
=
patternMatch
(
pattern7
,
7
,
str7
,
strlen
(
str7
),
&
pInfo
);
ASSERT_EQ
(
ret
,
TSDB_PATTERN_NOWILDCARDMATCH
);
const
char
*
pattern8
=
"6%____66"
;
const
char
*
str8
=
"666166"
;
ret
=
patternMatch
(
pattern8
,
8
,
str8
,
strlen
(
str8
),
&
pInfo
);
ASSERT_EQ
(
ret
,
TSDB_PATTERN_NOWILDCARDMATCH
);
const
char
*
pattern9
=
"6
\\
_6"
;
const
char
*
str9
=
"6_6"
;
ret
=
patternMatch
(
pattern9
,
5
,
str9
,
strlen
(
str9
),
&
pInfo
);
ASSERT_EQ
(
ret
,
TSDB_PATTERN_MATCH
);
const
char
*
pattern10
=
"%"
;
const
char
*
str10
=
" "
;
ret
=
patternMatch
(
pattern10
,
1
,
str10
,
0
,
&
pInfo
);
ASSERT_EQ
(
ret
,
TSDB_PATTERN_MATCH
);
const
char
*
pattern11
=
"china%"
;
const
char
*
str11
=
"abc "
;
ret
=
patternMatch
(
pattern11
,
6
,
str11
,
3
,
&
pInfo
);
ASSERT_EQ
(
ret
,
TSDB_PATTERN_NOMATCH
);
const
char
*
pattern12
=
"abc%"
;
const
char
*
str12
=
NULL
;
ret
=
patternMatch
(
pattern12
,
4
,
str12
,
0
,
&
pInfo
);
ASSERT_EQ
(
ret
,
TSDB_PATTERN_NOMATCH
);
}
TEST
(
utilTest
,
char_pattern_match_no_terminated
)
{
const
char
*
pattern
=
"%1 "
;
int32_t
ret
=
0
;
SPatternCompareInfo
pInfo
=
PATTERN_COMPARE_INFO_INITIALIZER
;
const
char
*
str0
=
"14"
;
ret
=
patternMatch
(
pattern
,
2
,
str0
,
strlen
(
str0
),
&
pInfo
);
ASSERT_EQ
(
ret
,
TSDB_PATTERN_NOWILDCARDMATCH
);
const
char
*
str1
=
"11"
;
ret
=
patternMatch
(
pattern
,
2
,
str1
,
strlen
(
str1
),
&
pInfo
);
ASSERT_EQ
(
ret
,
TSDB_PATTERN_MATCH
);
const
char
*
str2
=
"41"
;
ret
=
patternMatch
(
pattern
,
2
,
str2
,
strlen
(
str2
),
&
pInfo
);
ASSERT_EQ
(
ret
,
TSDB_PATTERN_MATCH
);
const
char
*
pattern3
=
"%_ "
;
const
char
*
str3
=
"88"
;
ret
=
patternMatch
(
pattern3
,
2
,
str3
,
strlen
(
str3
),
&
pInfo
);
ASSERT_EQ
(
ret
,
TSDB_PATTERN_MATCH
);
const
char
*
pattern4
=
"%___ "
;
const
char
*
str4
=
"88"
;
ret
=
patternMatch
(
pattern4
,
4
,
str4
,
strlen
(
str4
),
&
pInfo
);
ASSERT_EQ
(
ret
,
TSDB_PATTERN_NOWILDCARDMATCH
);
const
char
*
pattern5
=
"%___ "
;
const
char
*
str5
=
"883391"
;
ret
=
patternMatch
(
pattern5
,
4
,
str5
,
strlen
(
str5
),
&
pInfo
);
ASSERT_EQ
(
ret
,
TSDB_PATTERN_MATCH
);
const
char
*
pattern6
=
"%___66 "
;
const
char
*
str6
=
"88339166"
;
ret
=
patternMatch
(
pattern6
,
6
,
str6
,
strlen
(
str6
),
&
pInfo
);
ASSERT_EQ
(
ret
,
TSDB_PATTERN_MATCH
);
const
char
*
pattern7
=
"%____66 "
;
const
char
*
str7
=
"66166"
;
ret
=
patternMatch
(
pattern7
,
7
,
str7
,
strlen
(
str7
),
&
pInfo
);
ASSERT_EQ
(
ret
,
TSDB_PATTERN_NOWILDCARDMATCH
);
const
char
*
pattern8
=
"6%____66 "
;
const
char
*
str8
=
"666166"
;
ret
=
patternMatch
(
pattern8
,
8
,
str8
,
strlen
(
str8
),
&
pInfo
);
ASSERT_EQ
(
ret
,
TSDB_PATTERN_NOWILDCARDMATCH
);
const
char
*
pattern9
=
"6
\\
_6 "
;
const
char
*
str9
=
"6_6"
;
ret
=
patternMatch
(
pattern9
,
4
,
str9
,
strlen
(
str9
),
&
pInfo
);
ASSERT_EQ
(
ret
,
TSDB_PATTERN_MATCH
);
const
char
*
pattern10
=
"% "
;
const
char
*
str10
=
"6_6"
;
ret
=
patternMatch
(
pattern10
,
1
,
str10
,
strlen
(
str10
),
&
pInfo
);
ASSERT_EQ
(
ret
,
TSDB_PATTERN_MATCH
);
}
TEST
(
utilTest
,
tstrncspn
)
{
const
char
*
p1
=
"abc"
;
const
char
*
reject
=
"d"
;
size_t
v
=
tstrncspn
(
p1
,
strlen
(
p1
),
reject
,
1
);
ASSERT_EQ
(
v
,
3
);
const
char
*
reject1
=
"a"
;
v
=
tstrncspn
(
p1
,
strlen
(
p1
),
reject1
,
1
);
ASSERT_EQ
(
v
,
0
);
const
char
*
reject2
=
"de"
;
v
=
tstrncspn
(
p1
,
strlen
(
p1
),
reject2
,
2
);
ASSERT_EQ
(
v
,
3
);
const
char
*
p2
=
"abcdefghijklmn"
;
v
=
tstrncspn
(
p2
,
strlen
(
p2
),
reject2
,
2
);
ASSERT_EQ
(
v
,
3
);
const
char
*
reject3
=
"12345n"
;
v
=
tstrncspn
(
p2
,
strlen
(
p2
),
reject3
,
6
);
ASSERT_EQ
(
v
,
13
);
const
char
*
reject4
=
""
;
v
=
tstrncspn
(
p2
,
strlen
(
p2
),
reject4
,
0
);
ASSERT_EQ
(
v
,
14
);
const
char
*
reject5
=
"911"
;
v
=
tstrncspn
(
p2
,
strlen
(
p2
),
reject5
,
0
);
ASSERT_EQ
(
v
,
14
);
}
\ No newline at end of file
tests/parallel_test/cases.task
浏览文件 @
b8cbc935
...
@@ -408,6 +408,7 @@
...
@@ -408,6 +408,7 @@
,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/taosShellError.py
,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/taosShellError.py
,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/taosShellNetChk.py
,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/taosShellNetChk.py
,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/telemetry.py
,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/telemetry.py
,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/backquote_check.py
,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/taosdMonitor.py
,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/taosdMonitor.py
,,n,system-test,python3 ./test.py -f 0-others/taosdShell.py -N 5 -M 3 -Q 3
,,n,system-test,python3 ./test.py -f 0-others/taosdShell.py -N 5 -M 3 -Q 3
,,n,system-test,python3 ./test.py -f 0-others/udfTest.py
,,n,system-test,python3 ./test.py -f 0-others/udfTest.py
...
...
tests/system-test/0-others/backquote_check.py
0 → 100644
浏览文件 @
b8cbc935
###################################################################
# Copyright (c) 2016 by TAOS Technologies, Inc.
# All rights reserved.
#
# This file is proprietary and confidential to TAOS Technologies.
# No part of this file may be reproduced, stored, transmitted,
# disclosed or used in any form or by any means other than as
# expressly provided by the written permission from Jianhui Tao
#
###################################################################
# -*- coding: utf-8 -*-
from
util.log
import
*
from
util.cases
import
*
from
util.sql
import
*
from
util.common
import
*
from
util.sqlset
import
*
class
TDTestCase
:
def
init
(
self
,
conn
,
logSql
,
replicaVar
=
1
):
self
.
replicaVar
=
int
(
replicaVar
)
tdLog
.
debug
(
"start to execute %s"
%
__file__
)
tdSql
.
init
(
conn
.
cursor
())
self
.
dbname
=
'db'
self
.
setsql
=
TDSetSql
()
self
.
stbname
=
'stb'
self
.
streamname
=
'stm'
self
.
streamtb
=
'stm_stb'
def
topic_name_check
(
self
):
tdSql
.
execute
(
f
'create database if not exists
{
self
.
dbname
}
'
)
tdSql
.
execute
(
f
'use
{
self
.
dbname
}
'
)
tdSql
.
execute
(
f
'create stable
{
self
.
stbname
}
(ts timestamp,c0 int) tags(t0 int)'
)
for
name
in
[
self
.
dbname
,
self
.
stbname
]:
type
=
''
if
name
==
self
.
dbname
:
type
=
'database'
elif
name
==
self
.
stbname
:
type
=
'stable'
tdSql
.
execute
(
f
'create topic if not exists
{
name
}
as
{
type
}
{
name
}
'
)
tdSql
.
query
(
'show topics'
)
tdSql
.
checkEqual
(
tdSql
.
queryResult
[
0
][
0
],
name
)
tdSql
.
execute
(
f
'drop topic
{
name
}
'
)
tdSql
.
execute
(
f
'create topic if not exists `
{
name
}
` as
{
type
}
{
name
}
'
)
tdSql
.
query
(
'show topics'
)
tdSql
.
checkEqual
(
tdSql
.
queryResult
[
0
][
0
],
name
)
tdSql
.
execute
(
f
'drop topic
{
name
}
'
)
tdSql
.
execute
(
f
'create topic if not exists `
{
name
}
` as
{
type
}
`
{
name
}
`'
)
tdSql
.
query
(
'show topics'
)
tdSql
.
checkEqual
(
tdSql
.
queryResult
[
0
][
0
],
name
)
tdSql
.
execute
(
f
'drop topic
{
name
}
'
)
tdSql
.
execute
(
f
'create topic if not exists `
{
name
}
` as
{
type
}
`
{
name
}
`'
)
tdSql
.
query
(
'show topics'
)
tdSql
.
checkEqual
(
tdSql
.
queryResult
[
0
][
0
],
name
)
tdSql
.
execute
(
f
'drop topic `
{
name
}
`'
)
def
db_name_check
(
self
):
tdSql
.
execute
(
f
'create database if not exists `
{
self
.
dbname
}
`'
)
tdSql
.
execute
(
f
'use `
{
self
.
dbname
}
`'
)
tdSql
.
execute
(
f
'drop database
{
self
.
dbname
}
'
)
def
stream_name_check
(
self
):
tdSql
.
execute
(
f
'create database if not exists
{
self
.
dbname
}
'
)
tdSql
.
execute
(
f
'use
{
self
.
dbname
}
'
)
tdSql
.
execute
(
f
'create stable
{
self
.
stbname
}
(ts timestamp,c0 int) tags(t0 int)'
)
tdSql
.
execute
(
f
'create stream `
{
self
.
streamname
}
` into `
{
self
.
streamtb
}
` as select count(*) from
{
self
.
stbname
}
interval(10s);'
)
tdSql
.
query
(
'show streams'
)
tdSql
.
checkEqual
(
tdSql
.
queryResult
[
0
][
0
],
self
.
streamname
)
tdSql
.
execute
(
f
'drop stream
{
self
.
streamname
}
'
)
tdSql
.
execute
(
f
'drop stable
{
self
.
streamtb
}
'
)
tdSql
.
execute
(
f
'create stream
{
self
.
streamname
}
into `
{
self
.
streamtb
}
` as select count(*) from
{
self
.
stbname
}
interval(10s);'
)
tdSql
.
query
(
'show streams'
)
tdSql
.
checkEqual
(
tdSql
.
queryResult
[
0
][
0
],
self
.
streamname
)
tdSql
.
execute
(
f
'drop stream `
{
self
.
streamname
}
`'
)
tdSql
.
execute
(
f
'drop database
{
self
.
dbname
}
'
)
def
run
(
self
):
self
.
topic_name_check
()
self
.
db_name_check
()
self
.
stream_name_check
()
def
stop
(
self
):
tdSql
.
close
()
tdLog
.
success
(
"%s successfully executed"
%
__file__
)
tdCases
.
addWindows
(
__file__
,
TDTestCase
())
tdCases
.
addLinux
(
__file__
,
TDTestCase
())
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录