Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
26197a8c
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看板
未验证
提交
26197a8c
编写于
1月 24, 2022
作者:
S
Shengliang Guan
提交者:
GitHub
1月 24, 2022
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #9993 from taosdata/feature/mnode
Feature/mnode
上级
24136f01
0e2d0334
变更
17
隐藏空白更改
内联
并排
Showing
17 changed file
with
742 addition
and
167 deletion
+742
-167
include/common/tmsg.h
include/common/tmsg.h
+7
-6
include/common/tmsgdef.h
include/common/tmsgdef.h
+3
-3
include/util/taoserror.h
include/util/taoserror.h
+1
-0
include/util/tdef.h
include/util/tdef.h
+1
-0
source/dnode/mgmt/impl/src/dndTransport.c
source/dnode/mgmt/impl/src/dndTransport.c
+3
-3
source/dnode/mgmt/impl/test/sut/inc/sut.h
source/dnode/mgmt/impl/test/sut/inc/sut.h
+9
-0
source/dnode/mnode/impl/inc/mndDef.h
source/dnode/mnode/impl/inc/mndDef.h
+1
-1
source/dnode/mnode/impl/src/mndFunc.c
source/dnode/mnode/impl/src/mndFunc.c
+167
-142
source/dnode/mnode/impl/src/mndShow.c
source/dnode/mnode/impl/src/mndShow.c
+1
-1
source/dnode/mnode/impl/src/mndStb.c
source/dnode/mnode/impl/src/mndStb.c
+8
-6
source/dnode/mnode/impl/src/mndTrans.c
source/dnode/mnode/impl/src/mndTrans.c
+5
-3
source/dnode/mnode/impl/test/CMakeLists.txt
source/dnode/mnode/impl/test/CMakeLists.txt
+1
-0
source/dnode/mnode/impl/test/func/CMakeLists.txt
source/dnode/mnode/impl/test/func/CMakeLists.txt
+11
-0
source/dnode/mnode/impl/test/func/func.cpp
source/dnode/mnode/impl/test/func/func.cpp
+521
-0
source/libs/parser/inc/sql.y
source/libs/parser/inc/sql.y
+1
-1
source/libs/parser/src/sql.c
source/libs/parser/src/sql.c
+1
-1
source/util/src/terror.c
source/util/src/terror.c
+1
-0
未找到文件。
include/common/tmsg.h
浏览文件 @
26197a8c
...
...
@@ -100,7 +100,7 @@ typedef enum _mgmt_table {
TSDB_MGMT_TABLE_CLUSTER
,
TSDB_MGMT_TABLE_STREAMTABLES
,
TSDB_MGMT_TABLE_TP
,
TSDB_MGMT_TABLE_FUNC
TION
,
TSDB_MGMT_TABLE_FUNC
,
TSDB_MGMT_TABLE_MAX
,
}
EShowType
;
...
...
@@ -526,20 +526,21 @@ typedef struct {
typedef
struct
{
char
name
[
TSDB_FUNC_NAME_LEN
];
int8_t
igExists
;
int8_t
funcType
;
int8_t
scriptType
;
int8_t
align
;
int8_t
outputType
;
int32_t
outputLen
;
int32_t
bufSize
;
int64_t
sigature
;
int64_t
sig
n
ature
;
int32_t
commentSize
;
int32_t
codeSize
;
char
pCont
[];
}
SCreateFuncReq
;
typedef
struct
{
char
name
[
TSDB_FUNC_NAME_LEN
];
char
name
[
TSDB_FUNC_NAME_LEN
];
int8_t
igNotExists
;
}
SDropFuncReq
;
typedef
struct
{
...
...
@@ -549,13 +550,13 @@ typedef struct {
typedef
struct
{
char
name
[
TSDB_FUNC_NAME_LEN
];
int8_t
align
;
int8_t
funcType
;
int8_t
scriptType
;
int8_t
align
;
int8_t
outputType
;
int32_t
outputLen
;
int32_t
bufSize
;
int64_t
sigature
;
int64_t
sig
n
ature
;
int32_t
commentSize
;
int32_t
codeSize
;
char
pCont
[];
...
...
include/common/tmsgdef.h
浏览文件 @
26197a8c
...
...
@@ -119,9 +119,9 @@ enum {
TD_DEF_MSG_TYPE
(
TDMT_MND_ALTER_DB
,
"mnode-alter-db"
,
NULL
,
NULL
)
TD_DEF_MSG_TYPE
(
TDMT_MND_SYNC_DB
,
"mnode-sync-db"
,
NULL
,
NULL
)
TD_DEF_MSG_TYPE
(
TDMT_MND_COMPACT_DB
,
"mnode-compact-db"
,
NULL
,
NULL
)
TD_DEF_MSG_TYPE
(
TDMT_MND_CREATE_FUNC
TION
,
"mnode-create-function
"
,
NULL
,
NULL
)
TD_DEF_MSG_TYPE
(
TDMT_MND_RETRIEVE_FUNC
TION
,
"mnode-retrieve-function
"
,
NULL
,
NULL
)
TD_DEF_MSG_TYPE
(
TDMT_MND_DROP_FUNC
TION
,
"mnode-drop-function
"
,
NULL
,
NULL
)
TD_DEF_MSG_TYPE
(
TDMT_MND_CREATE_FUNC
,
"mnode-create-func
"
,
NULL
,
NULL
)
TD_DEF_MSG_TYPE
(
TDMT_MND_RETRIEVE_FUNC
,
"mnode-retrieve-func
"
,
NULL
,
NULL
)
TD_DEF_MSG_TYPE
(
TDMT_MND_DROP_FUNC
,
"mnode-drop-func
"
,
NULL
,
NULL
)
TD_DEF_MSG_TYPE
(
TDMT_MND_CREATE_STB
,
"mnode-create-stb"
,
NULL
,
NULL
)
TD_DEF_MSG_TYPE
(
TDMT_MND_ALTER_STB
,
"mnode-alter-stb"
,
NULL
,
NULL
)
TD_DEF_MSG_TYPE
(
TDMT_MND_DROP_STB
,
"mnode-drop-stb"
,
NULL
,
NULL
)
...
...
include/util/taoserror.h
浏览文件 @
26197a8c
...
...
@@ -239,6 +239,7 @@ int32_t* taosGetErrno();
#define TSDB_CODE_MND_INVALID_FUNC_COMMENT TAOS_DEF_ERROR_CODE(0, 0x03C4)
#define TSDB_CODE_MND_INVALID_FUNC_CODE TAOS_DEF_ERROR_CODE(0, 0x03C5)
#define TSDB_CODE_MND_INVALID_FUNC_BUFSIZE TAOS_DEF_ERROR_CODE(0, 0x03C6)
#define TSDB_CODE_MND_INVALID_FUNC_RETRIEVE TAOS_DEF_ERROR_CODE(0, 0x03C7)
// mnode-trans
#define TSDB_CODE_MND_TRANS_ALREADY_EXIST TAOS_DEF_ERROR_CODE(0, 0x03D0)
...
...
include/util/tdef.h
浏览文件 @
26197a8c
...
...
@@ -173,6 +173,7 @@ do { \
#define TSDB_FUNC_BUF_SIZE 512
#define TSDB_FUNC_TYPE_SCALAR 1
#define TSDB_FUNC_TYPE_AGGREGATE 2
#define TSDB_FUNC_MAX_RETRIEVE 1024
#define TSDB_TYPE_STR_MAX_LEN 32
#define TSDB_TABLE_FNAME_LEN (TSDB_DB_FNAME_LEN + TSDB_TABLE_NAME_LEN + TSDB_NAME_DELIMITER_LEN)
...
...
source/dnode/mgmt/impl/src/dndTransport.c
浏览文件 @
26197a8c
...
...
@@ -90,9 +90,9 @@ static void dndInitMsgFp(STransMgmt *pMgmt) {
pMgmt
->
msgFp
[
TMSG_INDEX
(
TDMT_MND_ALTER_DB
)]
=
dndProcessMnodeWriteMsg
;
pMgmt
->
msgFp
[
TMSG_INDEX
(
TDMT_MND_SYNC_DB
)]
=
dndProcessMnodeWriteMsg
;
pMgmt
->
msgFp
[
TMSG_INDEX
(
TDMT_MND_COMPACT_DB
)]
=
dndProcessMnodeWriteMsg
;
pMgmt
->
msgFp
[
TMSG_INDEX
(
TDMT_MND_CREATE_FUNC
TION
)]
=
dndProcessMnodeWriteMsg
;
pMgmt
->
msgFp
[
TMSG_INDEX
(
TDMT_MND_RETRIEVE_FUNC
TION
)]
=
dndProcessMnodeWriteMsg
;
pMgmt
->
msgFp
[
TMSG_INDEX
(
TDMT_MND_DROP_FUNC
TION
)]
=
dndProcessMnodeWriteMsg
;
pMgmt
->
msgFp
[
TMSG_INDEX
(
TDMT_MND_CREATE_FUNC
)]
=
dndProcessMnodeWriteMsg
;
pMgmt
->
msgFp
[
TMSG_INDEX
(
TDMT_MND_RETRIEVE_FUNC
)]
=
dndProcessMnodeWriteMsg
;
pMgmt
->
msgFp
[
TMSG_INDEX
(
TDMT_MND_DROP_FUNC
)]
=
dndProcessMnodeWriteMsg
;
pMgmt
->
msgFp
[
TMSG_INDEX
(
TDMT_MND_CREATE_STB
)]
=
dndProcessMnodeWriteMsg
;
pMgmt
->
msgFp
[
TMSG_INDEX
(
TDMT_MND_ALTER_STB
)]
=
dndProcessMnodeWriteMsg
;
pMgmt
->
msgFp
[
TMSG_INDEX
(
TDMT_MND_DROP_STB
)]
=
dndProcessMnodeWriteMsg
;
...
...
source/dnode/mgmt/impl/test/sut/inc/sut.h
浏览文件 @
26197a8c
...
...
@@ -96,6 +96,15 @@ class Testbase {
#define CheckBinary(val, len) \
{ EXPECT_STREQ(test.GetShowBinary(len), val); }
#define CheckBinaryByte(b, len) \
{ \
char* bytes = (char*)calloc(1, len); \
for (int32_t i = 0; i < len - 1; ++i) { \
bytes[i] = b; \
} \
EXPECT_STREQ(test.GetShowBinary(len), bytes); \
}
#define CheckInt8(val) \
{ EXPECT_EQ(test.GetShowInt8(), val); }
...
...
source/dnode/mnode/impl/inc/mndDef.h
浏览文件 @
26197a8c
...
...
@@ -314,7 +314,7 @@ typedef struct {
int8_t
outputType
;
int32_t
outputLen
;
int32_t
bufSize
;
int64_t
sigature
;
int64_t
sig
n
ature
;
int32_t
commentSize
;
int32_t
codeSize
;
char
*
pComment
;
...
...
source/dnode/mnode/impl/src/mndFunc.c
浏览文件 @
26197a8c
...
...
@@ -25,14 +25,14 @@ static SSdbRaw *mndFuncActionEncode(SFuncObj *pFunc);
static
SSdbRow
*
mndFuncActionDecode
(
SSdbRaw
*
pRaw
);
static
int32_t
mndFuncActionInsert
(
SSdb
*
pSdb
,
SFuncObj
*
pFunc
);
static
int32_t
mndFuncActionDelete
(
SSdb
*
pSdb
,
SFuncObj
*
pFunc
);
static
int32_t
mndFuncActionUpdate
(
SSdb
*
pSdb
,
SFuncObj
*
pOld
Func
,
SFuncObj
*
pNewFunc
);
static
int32_t
mndCreateFunc
(
SMnode
*
pMnode
,
SMnodeMsg
*
p
Msg
,
SCreateFuncReq
*
pCreate
);
static
int32_t
mndDropFunc
(
SMnode
*
pMnode
,
SMnodeMsg
*
p
Msg
,
SFuncObj
*
pFunc
);
static
int32_t
mndProcessCreateFunc
Msg
(
SMnodeMsg
*
pMsg
);
static
int32_t
mndProcessDropFunc
Msg
(
SMnodeMsg
*
pMsg
);
static
int32_t
mndProcessRetrieveFunc
Msg
(
SMnodeMsg
*
pMsg
);
static
int32_t
mndGetFuncMeta
(
SMnodeMsg
*
p
Msg
,
SShowObj
*
pShow
,
STableMetaRsp
*
pMeta
);
static
int32_t
mndRetrieveFuncs
(
SMnodeMsg
*
p
Msg
,
SShowObj
*
pShow
,
char
*
data
,
int32_t
rows
);
static
int32_t
mndFuncActionUpdate
(
SSdb
*
pSdb
,
SFuncObj
*
pOld
,
SFuncObj
*
pNew
);
static
int32_t
mndCreateFunc
(
SMnode
*
pMnode
,
SMnodeMsg
*
p
Req
,
SCreateFuncReq
*
pCreate
);
static
int32_t
mndDropFunc
(
SMnode
*
pMnode
,
SMnodeMsg
*
p
Req
,
SFuncObj
*
pFunc
);
static
int32_t
mndProcessCreateFunc
Req
(
SMnodeMsg
*
pReq
);
static
int32_t
mndProcessDropFunc
Req
(
SMnodeMsg
*
pReq
);
static
int32_t
mndProcessRetrieveFunc
Req
(
SMnodeMsg
*
pReq
);
static
int32_t
mndGetFuncMeta
(
SMnodeMsg
*
p
Req
,
SShowObj
*
pShow
,
STableMetaRsp
*
pMeta
);
static
int32_t
mndRetrieveFuncs
(
SMnodeMsg
*
p
Req
,
SShowObj
*
pShow
,
char
*
data
,
int32_t
rows
);
static
void
mndCancelGetNextFunc
(
SMnode
*
pMnode
,
void
*
pIter
);
int32_t
mndInitFunc
(
SMnode
*
pMnode
)
{
...
...
@@ -44,13 +44,13 @@ int32_t mndInitFunc(SMnode *pMnode) {
.
updateFp
=
(
SdbUpdateFp
)
mndFuncActionUpdate
,
.
deleteFp
=
(
SdbDeleteFp
)
mndFuncActionDelete
};
mndSetMsgHandle
(
pMnode
,
TDMT_MND_CREATE_FUNC
TION
,
mndProcessCreateFuncMsg
);
mndSetMsgHandle
(
pMnode
,
TDMT_MND_DROP_FUNC
TION
,
mndProcessDropFuncMsg
);
mndSetMsgHandle
(
pMnode
,
TDMT_MND_RETRIEVE_FUNC
TION
,
mndProcessRetrieveFuncMsg
);
mndSetMsgHandle
(
pMnode
,
TDMT_MND_CREATE_FUNC
,
mndProcessCreateFuncReq
);
mndSetMsgHandle
(
pMnode
,
TDMT_MND_DROP_FUNC
,
mndProcessDropFuncReq
);
mndSetMsgHandle
(
pMnode
,
TDMT_MND_RETRIEVE_FUNC
,
mndProcessRetrieveFuncReq
);
mndAddShowMetaHandle
(
pMnode
,
TSDB_MGMT_TABLE_FUNC
TION
,
mndGetFuncMeta
);
mndAddShowRetrieveHandle
(
pMnode
,
TSDB_MGMT_TABLE_FUNC
TION
,
mndRetrieveFuncs
);
mndAddShowFreeIterHandle
(
pMnode
,
TSDB_MGMT_TABLE_FUNC
TION
,
mndCancelGetNextFunc
);
mndAddShowMetaHandle
(
pMnode
,
TSDB_MGMT_TABLE_FUNC
,
mndGetFuncMeta
);
mndAddShowRetrieveHandle
(
pMnode
,
TSDB_MGMT_TABLE_FUNC
,
mndRetrieveFuncs
);
mndAddShowFreeIterHandle
(
pMnode
,
TSDB_MGMT_TABLE_FUNC
,
mndCancelGetNextFunc
);
return
sdbSetTable
(
pMnode
->
pSdb
,
table
);
}
...
...
@@ -73,7 +73,7 @@ static SSdbRaw *mndFuncActionEncode(SFuncObj *pFunc) {
SDB_SET_INT8
(
pRaw
,
dataPos
,
pFunc
->
outputType
,
FUNC_ENCODE_OVER
)
SDB_SET_INT32
(
pRaw
,
dataPos
,
pFunc
->
outputLen
,
FUNC_ENCODE_OVER
)
SDB_SET_INT32
(
pRaw
,
dataPos
,
pFunc
->
bufSize
,
FUNC_ENCODE_OVER
)
SDB_SET_INT64
(
pRaw
,
dataPos
,
pFunc
->
sigature
,
FUNC_ENCODE_OVER
)
SDB_SET_INT64
(
pRaw
,
dataPos
,
pFunc
->
sig
n
ature
,
FUNC_ENCODE_OVER
)
SDB_SET_INT32
(
pRaw
,
dataPos
,
pFunc
->
commentSize
,
FUNC_ENCODE_OVER
)
SDB_SET_INT32
(
pRaw
,
dataPos
,
pFunc
->
codeSize
,
FUNC_ENCODE_OVER
)
SDB_SET_BINARY
(
pRaw
,
dataPos
,
pFunc
->
pComment
,
pFunc
->
commentSize
,
FUNC_ENCODE_OVER
)
...
...
@@ -104,13 +104,11 @@ static SSdbRow *mndFuncActionDecode(SSdbRaw *pRaw) {
goto
FUNC_DECODE_OVER
;
}
int32_t
size
=
sizeof
(
SFuncObj
)
+
TSDB_FUNC_COMMENT_LEN
+
TSDB_FUNC_CODE_LEN
;
SSdbRow
*
pRow
=
sdbAllocRow
(
size
);
SSdbRow
*
pRow
=
sdbAllocRow
(
sizeof
(
SFuncObj
));
if
(
pRow
==
NULL
)
goto
FUNC_DECODE_OVER
;
SFuncObj
*
pFunc
=
sdbGetRowObj
(
pRow
);
if
(
pFunc
==
NULL
)
goto
FUNC_DECODE_OVER
;
char
*
tmp
=
(
char
*
)
pFunc
+
sizeof
(
SFuncObj
);
int32_t
dataPos
=
0
;
SDB_GET_BINARY
(
pRaw
,
dataPos
,
pFunc
->
name
,
TSDB_FUNC_NAME_LEN
,
FUNC_DECODE_OVER
)
...
...
@@ -121,12 +119,18 @@ static SSdbRow *mndFuncActionDecode(SSdbRaw *pRaw) {
SDB_GET_INT8
(
pRaw
,
dataPos
,
&
pFunc
->
outputType
,
FUNC_DECODE_OVER
)
SDB_GET_INT32
(
pRaw
,
dataPos
,
&
pFunc
->
outputLen
,
FUNC_DECODE_OVER
)
SDB_GET_INT32
(
pRaw
,
dataPos
,
&
pFunc
->
bufSize
,
FUNC_DECODE_OVER
)
SDB_GET_INT64
(
pRaw
,
dataPos
,
&
pFunc
->
sigature
,
FUNC_DECODE_OVER
)
SDB_GET_INT64
(
pRaw
,
dataPos
,
&
pFunc
->
sig
n
ature
,
FUNC_DECODE_OVER
)
SDB_GET_INT32
(
pRaw
,
dataPos
,
&
pFunc
->
commentSize
,
FUNC_DECODE_OVER
)
SDB_GET_INT32
(
pRaw
,
dataPos
,
&
pFunc
->
codeSize
,
FUNC_DECODE_OVER
)
SDB_GET_BINARY
(
pRaw
,
dataPos
,
pFunc
->
pData
,
pFunc
->
commentSize
+
pFunc
->
codeSize
,
FUNC_DECODE_OVER
)
pFunc
->
pComment
=
pFunc
->
pData
;
pFunc
->
pCode
=
(
pFunc
->
pData
+
pFunc
->
commentSize
);
pFunc
->
pComment
=
calloc
(
1
,
pFunc
->
commentSize
);
pFunc
->
pCode
=
calloc
(
1
,
pFunc
->
codeSize
);
if
(
pFunc
->
pComment
==
NULL
||
pFunc
->
pCode
==
NULL
)
{
goto
FUNC_DECODE_OVER
;
}
SDB_GET_BINARY
(
pRaw
,
dataPos
,
pFunc
->
pComment
,
pFunc
->
commentSize
,
FUNC_DECODE_OVER
)
SDB_GET_BINARY
(
pRaw
,
dataPos
,
pFunc
->
pCode
,
pFunc
->
codeSize
,
FUNC_DECODE_OVER
)
terrno
=
0
;
...
...
@@ -148,136 +152,136 @@ static int32_t mndFuncActionInsert(SSdb *pSdb, SFuncObj *pFunc) {
static
int32_t
mndFuncActionDelete
(
SSdb
*
pSdb
,
SFuncObj
*
pFunc
)
{
mTrace
(
"func:%s, perform delete action, row:%p"
,
pFunc
->
name
,
pFunc
);
tfree
(
pFunc
->
pCode
);
tfree
(
pFunc
->
pComment
);
return
0
;
}
static
int32_t
mndFuncActionUpdate
(
SSdb
*
pSdb
,
SFuncObj
*
pOld
Func
,
SFuncObj
*
pNewFunc
)
{
mTrace
(
"func:%s, perform update action, old row:%p new row:%p"
,
pOld
Func
->
name
,
pOldFunc
,
pNewFunc
);
static
int32_t
mndFuncActionUpdate
(
SSdb
*
pSdb
,
SFuncObj
*
pOld
,
SFuncObj
*
pNew
)
{
mTrace
(
"func:%s, perform update action, old row:%p new row:%p"
,
pOld
->
name
,
pOld
,
pNew
);
return
0
;
}
static
int32_t
mndCreateFunc
(
SMnode
*
pMnode
,
SMnodeMsg
*
pMsg
,
SCreateFuncReq
*
pCreate
)
{
SFuncObj
*
pFunc
=
calloc
(
1
,
sizeof
(
SFuncObj
)
+
pCreate
->
commentSize
+
pCreate
->
codeSize
);
pFunc
->
createdTime
=
taosGetTimestampMs
();
pFunc
->
funcType
=
pCreate
->
funcType
;
pFunc
->
scriptType
=
pCreate
->
scriptType
;
pFunc
->
outputType
=
pCreate
->
outputType
;
pFunc
->
outputLen
=
pCreate
->
outputLen
;
pFunc
->
bufSize
=
pCreate
->
bufSize
;
pFunc
->
sigature
=
pCreate
->
sigature
;
pFunc
->
commentSize
=
pCreate
->
commentSize
;
pFunc
->
codeSize
=
pCreate
->
codeSize
;
pFunc
->
pComment
=
pFunc
->
pData
;
memcpy
(
pFunc
->
pComment
,
pCreate
->
pCont
,
pCreate
->
commentSize
);
pFunc
->
pCode
=
pFunc
->
pData
+
pCreate
->
commentSize
;
memcpy
(
pFunc
->
pCode
,
pCreate
->
pCont
+
pCreate
->
commentSize
,
pFunc
->
codeSize
);
STrans
*
pTrans
=
mndTransCreate
(
pMnode
,
TRN_POLICY_ROLLBACK
,
&
pMsg
->
rpcMsg
);
if
(
pTrans
==
NULL
)
{
free
(
pFunc
);
mError
(
"func:%s, failed to create since %s"
,
pCreate
->
name
,
terrstr
());
return
-
1
;
static
SFuncObj
*
mndAcquireFunc
(
SMnode
*
pMnode
,
char
*
funcName
)
{
SSdb
*
pSdb
=
pMnode
->
pSdb
;
SFuncObj
*
pFunc
=
sdbAcquire
(
pSdb
,
SDB_FUNC
,
funcName
);
if
(
pFunc
==
NULL
&&
terrno
==
TSDB_CODE_SDB_OBJ_NOT_THERE
)
{
terrno
=
TSDB_CODE_MND_FUNC_NOT_EXIST
;
}
return
pFunc
;
}
mDebug
(
"trans:%d, used to create func:%s"
,
pTrans
->
id
,
pCreate
->
name
);
static
void
mndReleaseFunc
(
SMnode
*
pMnode
,
SFuncObj
*
pFunc
)
{
SSdb
*
pSdb
=
pMnode
->
pSdb
;
sdbRelease
(
pSdb
,
pFunc
);
}
SSdbRaw
*
pRedoRaw
=
mndFuncActionEncode
(
pFunc
);
if
(
pRedoRaw
==
NULL
||
mndTransAppendRedolog
(
pTrans
,
pRedoRaw
)
!=
0
)
{
mError
(
"trans:%d, failed to append redo log since %s"
,
pTrans
->
id
,
terrstr
());
free
(
pFunc
);
mndTransDrop
(
pTrans
);
return
-
1
;
static
int32_t
mndCreateFunc
(
SMnode
*
pMnode
,
SMnodeMsg
*
pReq
,
SCreateFuncReq
*
pCreate
)
{
int32_t
code
=
-
1
;
STrans
*
pTrans
=
NULL
;
SFuncObj
func
=
{
0
};
memcpy
(
func
.
name
,
pCreate
->
name
,
TSDB_FUNC_NAME_LEN
);
func
.
createdTime
=
taosGetTimestampMs
();
func
.
funcType
=
pCreate
->
funcType
;
func
.
scriptType
=
pCreate
->
scriptType
;
func
.
outputType
=
pCreate
->
outputType
;
func
.
outputLen
=
pCreate
->
outputLen
;
func
.
bufSize
=
pCreate
->
bufSize
;
func
.
signature
=
pCreate
->
signature
;
func
.
commentSize
=
pCreate
->
commentSize
;
func
.
codeSize
=
pCreate
->
codeSize
;
func
.
pComment
=
malloc
(
func
.
commentSize
);
func
.
pCode
=
malloc
(
func
.
codeSize
);
if
(
func
.
pCode
==
NULL
||
func
.
pCode
==
NULL
)
{
terrno
=
TSDB_CODE_OUT_OF_MEMORY
;
goto
CREATE_FUNC_OVER
;
}
sdbSetRawStatus
(
pRedoRaw
,
SDB_STATUS_CREATING
);
SSdbRaw
*
pUndoRaw
=
mndFuncActionEncode
(
pFunc
);
if
(
pUndoRaw
==
NULL
||
mndTransAppendUndolog
(
pTrans
,
pUndoRaw
)
!=
0
)
{
mError
(
"trans:%d, failed to append undo log since %s"
,
pTrans
->
id
,
terrstr
());
free
(
pFunc
);
mndTransDrop
(
pTrans
);
return
-
1
;
}
sdbSetRawStatus
(
pUndoRaw
,
SDB_STATUS_DROPPED
);
memcpy
(
func
.
pComment
,
pCreate
->
pCont
,
pCreate
->
commentSize
);
memcpy
(
func
.
pCode
,
pCreate
->
pCont
+
pCreate
->
commentSize
,
func
.
codeSize
);
SSdbRaw
*
pCommitRaw
=
mndFuncActionEncode
(
pFunc
);
if
(
pCommitRaw
==
NULL
||
mndTransAppendCommitlog
(
pTrans
,
pCommitRaw
)
!=
0
)
{
mError
(
"trans:%d, failed to append commit log since %s"
,
pTrans
->
id
,
terrstr
());
free
(
pFunc
);
mndTransDrop
(
pTrans
);
return
-
1
;
}
sdbSetRawStatus
(
pCommitRaw
,
SDB_STATUS_READY
);
pTrans
=
mndTransCreate
(
pMnode
,
TRN_POLICY_ROLLBACK
,
&
pReq
->
rpcMsg
);
if
(
pTrans
==
NULL
)
goto
CREATE_FUNC_OVER
;
if
(
mndTransPrepare
(
pMnode
,
pTrans
)
!=
0
)
{
mError
(
"trans:%d, failed to prepare since %s"
,
pTrans
->
id
,
terrstr
());
mndTransDrop
(
pTrans
);
return
-
1
;
}
mDebug
(
"trans:%d, used to create func:%s"
,
pTrans
->
id
,
pCreate
->
name
);
SSdbRaw
*
pRedoRaw
=
mndFuncActionEncode
(
&
func
);
if
(
pRedoRaw
==
NULL
||
mndTransAppendRedolog
(
pTrans
,
pRedoRaw
)
!=
0
)
goto
CREATE_FUNC_OVER
;
if
(
sdbSetRawStatus
(
pRedoRaw
,
SDB_STATUS_CREATING
)
!=
0
)
goto
CREATE_FUNC_OVER
;
free
(
pFunc
);
SSdbRaw
*
pUndoRaw
=
mndFuncActionEncode
(
&
func
);
if
(
pUndoRaw
==
NULL
||
mndTransAppendUndolog
(
pTrans
,
pUndoRaw
)
!=
0
)
goto
CREATE_FUNC_OVER
;
if
(
sdbSetRawStatus
(
pUndoRaw
,
SDB_STATUS_DROPPED
)
!=
0
)
goto
CREATE_FUNC_OVER
;
SSdbRaw
*
pCommitRaw
=
mndFuncActionEncode
(
&
func
);
if
(
pCommitRaw
==
NULL
||
mndTransAppendCommitlog
(
pTrans
,
pCommitRaw
)
!=
0
)
goto
CREATE_FUNC_OVER
;
if
(
sdbSetRawStatus
(
pCommitRaw
,
SDB_STATUS_READY
)
!=
0
)
goto
CREATE_FUNC_OVER
;
if
(
mndTransPrepare
(
pMnode
,
pTrans
)
!=
0
)
goto
CREATE_FUNC_OVER
;
code
=
0
;
CREATE_FUNC_OVER:
free
(
func
.
pCode
);
free
(
func
.
pComment
);
mndTransDrop
(
pTrans
);
return
0
;
return
code
;
}
static
int32_t
mndDropFunc
(
SMnode
*
pMnode
,
SMnodeMsg
*
pMsg
,
SFuncObj
*
pFunc
)
{
STrans
*
pTrans
=
mndTransCreate
(
pMnode
,
TRN_POLICY_ROLLBACK
,
&
pMsg
->
rpcMsg
);
if
(
pTrans
==
NULL
)
{
mError
(
"func:%s, failed to drop since %s"
,
pFunc
->
name
,
terrstr
());
return
-
1
;
}
static
int32_t
mndDropFunc
(
SMnode
*
pMnode
,
SMnodeMsg
*
pReq
,
SFuncObj
*
pFunc
)
{
int32_t
code
=
-
1
;
STrans
*
pTrans
=
mndTransCreate
(
pMnode
,
TRN_POLICY_ROLLBACK
,
&
pReq
->
rpcMsg
);
if
(
pTrans
==
NULL
)
goto
DROP_FUNC_OVER
;
mDebug
(
"trans:%d, used to drop user:%s"
,
pTrans
->
id
,
pFunc
->
name
);
SSdbRaw
*
pRedoRaw
=
mndFuncActionEncode
(
pFunc
);
if
(
pRedoRaw
==
NULL
||
mndTransAppendRedolog
(
pTrans
,
pRedoRaw
)
!=
0
)
{
mError
(
"trans:%d, failed to append redo log since %s"
,
pTrans
->
id
,
terrstr
());
mndTransDrop
(
pTrans
);
return
-
1
;
}
if
(
pRedoRaw
==
NULL
||
mndTransAppendRedolog
(
pTrans
,
pRedoRaw
)
!=
0
)
goto
DROP_FUNC_OVER
;
sdbSetRawStatus
(
pRedoRaw
,
SDB_STATUS_DROPPING
);
SSdbRaw
*
pUndoRaw
=
mndFuncActionEncode
(
pFunc
);
if
(
pUndoRaw
==
NULL
||
mndTransAppendUndolog
(
pTrans
,
pUndoRaw
)
!=
0
)
{
mError
(
"trans:%d, failed to append undo log since %s"
,
pTrans
->
id
,
terrstr
());
mndTransDrop
(
pTrans
);
return
-
1
;
}
if
(
pUndoRaw
==
NULL
||
mndTransAppendUndolog
(
pTrans
,
pUndoRaw
)
!=
0
)
goto
DROP_FUNC_OVER
;
sdbSetRawStatus
(
pUndoRaw
,
SDB_STATUS_READY
);
SSdbRaw
*
pCommitRaw
=
mndFuncActionEncode
(
pFunc
);
if
(
pCommitRaw
==
NULL
||
mndTransAppendCommitlog
(
pTrans
,
pCommitRaw
)
!=
0
)
{
mError
(
"trans:%d, failed to append commit log since %s"
,
pTrans
->
id
,
terrstr
());
mndTransDrop
(
pTrans
);
return
-
1
;
}
if
(
pCommitRaw
==
NULL
||
mndTransAppendCommitlog
(
pTrans
,
pCommitRaw
)
!=
0
)
goto
DROP_FUNC_OVER
;
sdbSetRawStatus
(
pCommitRaw
,
SDB_STATUS_DROPPED
);
if
(
mndTransPrepare
(
pMnode
,
pTrans
)
!=
0
)
{
mError
(
"trans:%d, failed to prepare since %s"
,
pTrans
->
id
,
terrstr
());
mndTransDrop
(
pTrans
);
return
-
1
;
}
if
(
mndTransPrepare
(
pMnode
,
pTrans
)
!=
0
)
goto
DROP_FUNC_OVER
;
code
=
0
;
DROP_FUNC_OVER:
mndTransDrop
(
pTrans
);
return
0
;
return
code
;
}
static
int32_t
mndProcessCreateFunc
Msg
(
SMnodeMsg
*
pMsg
)
{
SMnode
*
pMnode
=
p
Msg
->
pMnode
;
static
int32_t
mndProcessCreateFunc
Req
(
SMnodeMsg
*
pReq
)
{
SMnode
*
pMnode
=
p
Req
->
pMnode
;
SCreateFuncReq
*
pCreate
=
p
Msg
->
rpcMsg
.
pCont
;
SCreateFuncReq
*
pCreate
=
p
Req
->
rpcMsg
.
pCont
;
pCreate
->
outputLen
=
htonl
(
pCreate
->
outputLen
);
pCreate
->
bufSize
=
htonl
(
pCreate
->
bufSize
);
pCreate
->
sig
ature
=
htobe64
(
pCreate
->
sig
ature
);
pCreate
->
sig
nature
=
htobe64
(
pCreate
->
sign
ature
);
pCreate
->
commentSize
=
htonl
(
pCreate
->
commentSize
);
pCreate
->
codeSize
=
htonl
(
pCreate
->
codeSize
);
mDebug
(
"func:%s, start to create"
,
pCreate
->
name
);
SFuncObj
*
pFunc
=
sdbAcquire
(
pMnode
->
pSdb
,
SDB_FUNC
,
pCreate
->
name
);
SFuncObj
*
pFunc
=
mndAcquireFunc
(
pMnode
,
pCreate
->
name
);
if
(
pFunc
!=
NULL
)
{
sdbRelease
(
pMnode
->
pSdb
,
pFunc
);
terrno
=
TSDB_CODE_MND_FUNC_ALREADY_EXIST
;
mError
(
"func:%s, failed to create since %s"
,
pCreate
->
name
,
terrstr
());
mndReleaseFunc
(
pMnode
,
pFunc
);
if
(
pCreate
->
igExists
)
{
mDebug
(
"stb:%s, already exist, ignore exist is set"
,
pCreate
->
name
);
return
0
;
}
else
{
terrno
=
TSDB_CODE_MND_FUNC_ALREADY_EXIST
;
mError
(
"func:%s, failed to create since %s"
,
pCreate
->
name
,
terrstr
());
return
-
1
;
}
}
else
if
(
terrno
==
TSDB_CODE_MND_FUNC_ALREADY_EXIST
)
{
mError
(
"stb:%s, failed to create since %s"
,
pCreate
->
name
,
terrstr
());
return
-
1
;
}
...
...
@@ -305,14 +309,13 @@ static int32_t mndProcessCreateFuncMsg(SMnodeMsg *pMsg) {
return
-
1
;
}
if
(
pCreate
->
bufSize
<
0
||
pCreate
->
bufSize
>
TSDB_FUNC_BUF_SIZE
)
{
if
(
pCreate
->
bufSize
<
=
0
||
pCreate
->
bufSize
>
TSDB_FUNC_BUF_SIZE
)
{
terrno
=
TSDB_CODE_MND_INVALID_FUNC_BUFSIZE
;
mError
(
"func:%s, failed to create since %s"
,
pCreate
->
name
,
terrstr
());
return
-
1
;
}
int32_t
code
=
mndCreateFunc
(
pMnode
,
pMsg
,
pCreate
);
int32_t
code
=
mndCreateFunc
(
pMnode
,
pReq
,
pCreate
);
if
(
code
!=
0
)
{
mError
(
"func:%s, failed to create since %s"
,
pCreate
->
name
,
terrstr
());
return
-
1
;
...
...
@@ -321,9 +324,9 @@ static int32_t mndProcessCreateFuncMsg(SMnodeMsg *pMsg) {
return
TSDB_CODE_MND_ACTION_IN_PROGRESS
;
}
static
int32_t
mndProcessDropFunc
Msg
(
SMnodeMsg
*
pMsg
)
{
SMnode
*
pMnode
=
p
Msg
->
pMnode
;
SDropFuncReq
*
pDrop
=
p
Msg
->
rpcMsg
.
pCont
;
static
int32_t
mndProcessDropFunc
Req
(
SMnodeMsg
*
pReq
)
{
SMnode
*
pMnode
=
p
Req
->
pMnode
;
SDropFuncReq
*
pDrop
=
p
Req
->
rpcMsg
.
pCont
;
mDebug
(
"func:%s, start to drop"
,
pDrop
->
name
);
...
...
@@ -333,14 +336,20 @@ static int32_t mndProcessDropFuncMsg(SMnodeMsg *pMsg) {
return
-
1
;
}
SFuncObj
*
pFunc
=
sdbAcquire
(
pMnode
->
pSdb
,
SDB_FUNC
,
pDrop
->
name
);
SFuncObj
*
pFunc
=
mndAcquireFunc
(
pMnode
,
pDrop
->
name
);
if
(
pFunc
==
NULL
)
{
terrno
=
TSDB_CODE_MND_FUNC_NOT_EXIST
;
mError
(
"func:%s, failed to drop since %s"
,
pDrop
->
name
,
terrstr
());
return
-
1
;
if
(
pDrop
->
igNotExists
)
{
mDebug
(
"func:%s, not exist, ignore not exist is set"
,
pDrop
->
name
);
return
0
;
}
else
{
terrno
=
TSDB_CODE_MND_FUNC_NOT_EXIST
;
mError
(
"func:%s, failed to drop since %s"
,
pDrop
->
name
,
terrstr
());
return
-
1
;
}
}
int32_t
code
=
mndDropFunc
(
pMnode
,
pMsg
,
pFunc
);
int32_t
code
=
mndDropFunc
(
pMnode
,
pReq
,
pFunc
);
mndReleaseFunc
(
pMnode
,
pFunc
);
if
(
code
!=
0
)
{
mError
(
"func:%s, failed to drop since %s"
,
pDrop
->
name
,
terrstr
());
...
...
@@ -350,15 +359,26 @@ static int32_t mndProcessDropFuncMsg(SMnodeMsg *pMsg) {
return
TSDB_CODE_MND_ACTION_IN_PROGRESS
;
}
static
int32_t
mndProcessRetrieveFuncMsg
(
SMnodeMsg
*
pMsg
)
{
SMnode
*
pMnode
=
pMsg
->
pMnode
;
static
int32_t
mndProcessRetrieveFuncReq
(
SMnodeMsg
*
pReq
)
{
int32_t
code
=
-
1
;
SMnode
*
pMnode
=
pReq
->
pMnode
;
SRetrieveFuncReq
*
pRetrieve
=
p
Msg
->
rpcMsg
.
pCont
;
SRetrieveFuncReq
*
pRetrieve
=
p
Req
->
rpcMsg
.
pCont
;
pRetrieve
->
numOfFuncs
=
htonl
(
pRetrieve
->
numOfFuncs
);
if
(
pRetrieve
->
numOfFuncs
<=
0
||
pRetrieve
->
numOfFuncs
>
TSDB_FUNC_MAX_RETRIEVE
)
{
terrno
=
TSDB_CODE_MND_INVALID_FUNC_RETRIEVE
;
return
-
1
;
}
int32_t
size
=
sizeof
(
SRetrieveFuncRsp
)
+
(
sizeof
(
SFuncInfo
)
+
TSDB_FUNC_CODE_LEN
)
*
pRetrieve
->
numOfFuncs
+
16384
;
int32_t
fsize
=
sizeof
(
SFuncInfo
)
+
TSDB_FUNC_CODE_LEN
+
TSDB_FUNC_COMMENT_LEN
;
int32_t
size
=
sizeof
(
SRetrieveFuncRsp
)
+
fsize
*
pRetrieve
->
numOfFuncs
;
SRetrieveFuncRsp
*
pRetrieveRsp
=
rpcMallocCont
(
size
);
if
(
pRetrieveRsp
==
NULL
)
{
terrno
=
TSDB_CODE_OUT_OF_MEMORY
;
goto
FUNC_RETRIEVE_OVER
;
}
pRetrieveRsp
->
numOfFuncs
=
htonl
(
pRetrieve
->
numOfFuncs
);
char
*
pOutput
=
pRetrieveRsp
->
pFuncInfos
;
...
...
@@ -366,37 +386,42 @@ static int32_t mndProcessRetrieveFuncMsg(SMnodeMsg *pMsg) {
char
funcName
[
TSDB_FUNC_NAME_LEN
]
=
{
0
};
memcpy
(
funcName
,
pRetrieve
->
pFuncNames
+
i
*
TSDB_FUNC_NAME_LEN
,
TSDB_FUNC_NAME_LEN
);
SFuncObj
*
pFunc
=
sdbAcquire
(
pMnode
->
pSdb
,
SDB_FUNC
,
funcName
);
SFuncObj
*
pFunc
=
mndAcquireFunc
(
pMnode
,
funcName
);
if
(
pFunc
==
NULL
)
{
terrno
=
TSDB_CODE_MND_INVALID_FUNC
;
mError
(
"func:%s, failed to retrieve since %s"
,
funcName
,
terrstr
());
return
-
1
;
goto
FUNC_RETRIEVE_OVER
;
}
SFuncInfo
*
pFuncInfo
=
(
SFuncInfo
*
)
pOutput
;
strncpy
(
pFuncInfo
->
name
,
pFunc
->
name
,
TSDB_FUNC_NAME_LEN
);
memcpy
(
pFuncInfo
->
name
,
pFunc
->
name
,
TSDB_FUNC_NAME_LEN
);
pFuncInfo
->
funcType
=
pFunc
->
funcType
;
pFuncInfo
->
scriptType
=
pFunc
->
scriptType
;
pFuncInfo
->
outputType
=
pFunc
->
outputType
;
pFuncInfo
->
outputLen
=
htonl
(
pFunc
->
outputLen
);
pFuncInfo
->
bufSize
=
htonl
(
pFunc
->
bufSize
);
pFuncInfo
->
sig
ature
=
htobe64
(
pFunc
->
sig
ature
);
pFuncInfo
->
sig
nature
=
htobe64
(
pFunc
->
sign
ature
);
pFuncInfo
->
commentSize
=
htonl
(
pFunc
->
commentSize
);
pFuncInfo
->
codeSize
=
htonl
(
pFunc
->
codeSize
);
memcpy
(
pFuncInfo
->
pCont
,
pFunc
->
pCode
,
pFunc
->
commentSize
+
pFunc
->
codeSize
);
pOutput
+=
sizeof
(
SFuncInfo
)
+
pFunc
->
commentSize
+
pFunc
->
codeSize
;
memcpy
(
pFuncInfo
->
pCont
,
pFunc
->
pComment
,
pFunc
->
commentSize
);
memcpy
(
pFuncInfo
->
pCont
+
pFunc
->
commentSize
,
pFunc
->
pCode
,
pFunc
->
codeSize
);
pOutput
+=
(
sizeof
(
SFuncInfo
)
+
pFunc
->
commentSize
+
pFunc
->
codeSize
);
mndReleaseFunc
(
pMnode
,
pFunc
);
}
p
Msg
->
pCont
=
pRetrieveRsp
;
p
Msg
->
contLen
=
(
int32_t
)(
pOutput
-
(
char
*
)
pRetrieveRsp
);
p
Req
->
pCont
=
pRetrieveRsp
;
p
Req
->
contLen
=
(
int32_t
)(
pOutput
-
(
char
*
)
pRetrieveRsp
);
return
0
;
code
=
0
;
FUNC_RETRIEVE_OVER:
if
(
code
!=
0
)
rpcFreeCont
(
pRetrieveRsp
);
return
code
;
}
static
int32_t
mndGetFuncMeta
(
SMnodeMsg
*
p
Msg
,
SShowObj
*
pShow
,
STableMetaRsp
*
pMeta
)
{
SMnode
*
pMnode
=
p
Msg
->
pMnode
;
static
int32_t
mndGetFuncMeta
(
SMnodeMsg
*
p
Req
,
SShowObj
*
pShow
,
STableMetaRsp
*
pMeta
)
{
SMnode
*
pMnode
=
p
Req
->
pMnode
;
SSdb
*
pSdb
=
pMnode
->
pSdb
;
int32_t
cols
=
0
;
...
...
@@ -454,7 +479,7 @@ static int32_t mndGetFuncMeta(SMnodeMsg *pMsg, SShowObj *pShow, STableMetaRsp *p
pShow
->
numOfRows
=
sdbGetSize
(
pSdb
,
SDB_FUNC
);
pShow
->
rowSize
=
pShow
->
offset
[
cols
-
1
]
+
pShow
->
bytes
[
cols
-
1
];
strcpy
(
pMeta
->
tbFname
,
"show funcs"
);
strcpy
(
pMeta
->
tbFname
,
mndShowStr
(
pShow
->
type
)
);
return
0
;
}
...
...
@@ -477,8 +502,8 @@ static void *mnodeGenTypeStr(char *buf, int32_t buflen, uint8_t type, int16_t le
return
tDataTypes
[
type
].
name
;
}
static
int32_t
mndRetrieveFuncs
(
SMnodeMsg
*
p
Msg
,
SShowObj
*
pShow
,
char
*
data
,
int32_t
rows
)
{
SMnode
*
pMnode
=
p
Msg
->
pMnode
;
static
int32_t
mndRetrieveFuncs
(
SMnodeMsg
*
p
Req
,
SShowObj
*
pShow
,
char
*
data
,
int32_t
rows
)
{
SMnode
*
pMnode
=
p
Req
->
pMnode
;
SSdb
*
pSdb
=
pMnode
->
pSdb
;
int32_t
numOfRows
=
0
;
SFuncObj
*
pFunc
=
NULL
;
...
...
source/dnode/mnode/impl/src/mndShow.c
浏览文件 @
26197a8c
...
...
@@ -296,7 +296,7 @@ char *mndShowStr(int32_t showType) {
return
"show streamtables"
;
case
TSDB_MGMT_TABLE_TP
:
return
"show topics"
;
case
TSDB_MGMT_TABLE_FUNC
TION
:
case
TSDB_MGMT_TABLE_FUNC
:
return
"show functions"
;
default:
return
"undefined"
;
...
...
source/dnode/mnode/impl/src/mndStb.c
浏览文件 @
26197a8c
...
...
@@ -123,8 +123,7 @@ static SSdbRow *mndStbActionDecode(SSdbRaw *pRaw) {
goto
STB_DECODE_OVER
;
}
int32_t
size
=
sizeof
(
SStbObj
)
+
TSDB_MAX_COLUMNS
*
sizeof
(
SSchema
);
SSdbRow
*
pRow
=
sdbAllocRow
(
size
);
SSdbRow
*
pRow
=
sdbAllocRow
(
sizeof
(
SStbObj
));
if
(
pRow
==
NULL
)
goto
STB_DECODE_OVER
;
SStbObj
*
pStb
=
sdbGetRowObj
(
pRow
);
...
...
@@ -143,6 +142,9 @@ static SSdbRow *mndStbActionDecode(SSdbRaw *pRaw) {
int32_t
totalCols
=
pStb
->
numOfColumns
+
pStb
->
numOfTags
;
pStb
->
pSchema
=
calloc
(
totalCols
,
sizeof
(
SSchema
));
if
(
pStb
->
pSchema
==
NULL
)
{
goto
STB_DECODE_OVER
;
}
for
(
int32_t
i
=
0
;
i
<
totalCols
;
++
i
)
{
SSchema
*
pSchema
=
&
pStb
->
pSchema
[
i
];
...
...
@@ -448,7 +450,7 @@ static int32_t mndCreateStb(SMnode *pMnode, SMnodeMsg *pReq, SMCreateStbReq *pCr
stbObj
.
pSchema
[
i
].
colId
=
i
+
1
;
}
int32_t
code
=
0
;
int32_t
code
=
-
1
;
STrans
*
pTrans
=
mndTransCreate
(
pMnode
,
TRN_POLICY_ROLLBACK
,
&
pReq
->
rpcMsg
);
if
(
pTrans
==
NULL
)
goto
CREATE_STB_OVER
;
...
...
@@ -481,7 +483,7 @@ static int32_t mndProcessMCreateStbReq(SMnodeMsg *pReq) {
SStbObj
*
pStb
=
mndAcquireStb
(
pMnode
,
pCreate
->
name
);
if
(
pStb
!=
NULL
)
{
sdbRelease
(
pMnode
->
pSdb
,
pStb
);
mndReleaseStb
(
pMnode
,
pStb
);
if
(
pCreate
->
igExists
)
{
mDebug
(
"stb:%s, already exist, ignore exist is set"
,
pCreate
->
name
);
return
0
;
...
...
@@ -492,6 +494,7 @@ static int32_t mndProcessMCreateStbReq(SMnodeMsg *pReq) {
}
}
else
if
(
terrno
!=
TSDB_CODE_MND_STB_NOT_EXIST
)
{
mError
(
"stb:%s, failed to create since %s"
,
pCreate
->
name
,
terrstr
());
return
-
1
;
}
// topic should have different name with stb
...
...
@@ -640,7 +643,7 @@ static int32_t mndDropStb(SMnode *pMnode, SMnodeMsg *pReq, SStbObj *pStb) {
DROP_STB_OVER:
mndTransDrop
(
pTrans
);
return
0
;
return
code
;
}
static
int32_t
mndProcessMDropStbReq
(
SMnodeMsg
*
pReq
)
{
...
...
@@ -665,7 +668,6 @@ static int32_t mndProcessMDropStbReq(SMnodeMsg *pReq) {
mndReleaseStb
(
pMnode
,
pStb
);
if
(
code
!=
0
)
{
terrno
=
code
;
mError
(
"stb:%s, failed to drop since %s"
,
pDrop
->
name
,
terrstr
());
return
-
1
;
}
...
...
source/dnode/mnode/impl/src/mndTrans.c
浏览文件 @
26197a8c
...
...
@@ -390,9 +390,11 @@ static void mndTransDropActions(SArray *pArray) {
}
void
mndTransDrop
(
STrans
*
pTrans
)
{
mndTransDropData
(
pTrans
);
mDebug
(
"trans:%d, is dropped, data:%p"
,
pTrans
->
id
,
pTrans
);
tfree
(
pTrans
);
if
(
pTrans
!=
NULL
)
{
mndTransDropData
(
pTrans
);
mDebug
(
"trans:%d, is dropped, data:%p"
,
pTrans
->
id
,
pTrans
);
tfree
(
pTrans
);
}
}
static
int32_t
mndTransAppendLog
(
SArray
*
pArray
,
SSdbRaw
*
pRaw
)
{
...
...
source/dnode/mnode/impl/test/CMakeLists.txt
浏览文件 @
26197a8c
...
...
@@ -12,3 +12,4 @@ add_subdirectory(dnode)
add_subdirectory
(
mnode
)
add_subdirectory
(
db
)
add_subdirectory
(
stb
)
add_subdirectory
(
func
)
source/dnode/mnode/impl/test/func/CMakeLists.txt
0 → 100644
浏览文件 @
26197a8c
aux_source_directory
(
. FUNC_SRC
)
add_executable
(
mnode_test_func
${
FUNC_SRC
}
)
target_link_libraries
(
mnode_test_func
PUBLIC sut
)
add_test
(
NAME mnode_test_func
COMMAND mnode_test_func
)
source/dnode/mnode/impl/test/func/func.cpp
0 → 100644
浏览文件 @
26197a8c
/**
* @file func.cpp
* @author slguan (slguan@taosdata.com)
* @brief MNODE module func tests
* @version 1.0
* @date 2022-01-24
*
* @copyright Copyright (c) 2022
*
*/
#include "sut.h"
class
MndTestFunc
:
public
::
testing
::
Test
{
protected:
static
void
SetUpTestSuite
()
{
test
.
Init
(
"/tmp/mnode_test_func"
,
9038
);
}
static
void
TearDownTestSuite
()
{
test
.
Cleanup
();
}
static
Testbase
test
;
public:
void
SetUp
()
override
{}
void
TearDown
()
override
{}
};
Testbase
MndTestFunc
::
test
;
TEST_F
(
MndTestFunc
,
01
_Show_Func
)
{
test
.
SendShowMetaReq
(
TSDB_MGMT_TABLE_FUNC
,
""
);
CHECK_META
(
"show functions"
,
7
);
CHECK_SCHEMA
(
0
,
TSDB_DATA_TYPE_BINARY
,
TSDB_FUNC_NAME_LEN
+
VARSTR_HEADER_SIZE
,
"name"
);
CHECK_SCHEMA
(
1
,
TSDB_DATA_TYPE_BINARY
,
PATH_MAX
+
VARSTR_HEADER_SIZE
,
"comment"
);
CHECK_SCHEMA
(
2
,
TSDB_DATA_TYPE_INT
,
4
,
"aggregate"
);
CHECK_SCHEMA
(
3
,
TSDB_DATA_TYPE_BINARY
,
TSDB_TYPE_STR_MAX_LEN
+
VARSTR_HEADER_SIZE
,
"outputtype"
);
CHECK_SCHEMA
(
4
,
TSDB_DATA_TYPE_TIMESTAMP
,
8
,
"create_time"
);
CHECK_SCHEMA
(
5
,
TSDB_DATA_TYPE_INT
,
4
,
"code_len"
);
CHECK_SCHEMA
(
6
,
TSDB_DATA_TYPE_INT
,
4
,
"bufsize"
);
test
.
SendShowRetrieveReq
();
EXPECT_EQ
(
test
.
GetShowRows
(),
0
);
}
TEST_F
(
MndTestFunc
,
02
_Create_Func
)
{
{
int32_t
contLen
=
sizeof
(
SCreateFuncReq
);
SCreateFuncReq
*
pReq
=
(
SCreateFuncReq
*
)
rpcMallocCont
(
contLen
);
strcpy
(
pReq
->
name
,
""
);
SRpcMsg
*
pRsp
=
test
.
SendReq
(
TDMT_MND_CREATE_FUNC
,
pReq
,
contLen
);
ASSERT_NE
(
pRsp
,
nullptr
);
ASSERT_EQ
(
pRsp
->
code
,
TSDB_CODE_MND_INVALID_FUNC_NAME
);
}
{
int32_t
contLen
=
sizeof
(
SCreateFuncReq
);
SCreateFuncReq
*
pReq
=
(
SCreateFuncReq
*
)
rpcMallocCont
(
contLen
);
strcpy
(
pReq
->
name
,
"f1"
);
SRpcMsg
*
pRsp
=
test
.
SendReq
(
TDMT_MND_CREATE_FUNC
,
pReq
,
contLen
);
ASSERT_NE
(
pRsp
,
nullptr
);
ASSERT_EQ
(
pRsp
->
code
,
TSDB_CODE_MND_INVALID_FUNC_COMMENT
);
}
{
int32_t
contLen
=
sizeof
(
SCreateFuncReq
);
SCreateFuncReq
*
pReq
=
(
SCreateFuncReq
*
)
rpcMallocCont
(
contLen
);
strcpy
(
pReq
->
name
,
"f1"
);
pReq
->
commentSize
=
htonl
(
TSDB_FUNC_COMMENT_LEN
+
1
);
SRpcMsg
*
pRsp
=
test
.
SendReq
(
TDMT_MND_CREATE_FUNC
,
pReq
,
contLen
);
ASSERT_NE
(
pRsp
,
nullptr
);
ASSERT_EQ
(
pRsp
->
code
,
TSDB_CODE_MND_INVALID_FUNC_COMMENT
);
}
{
int32_t
contLen
=
sizeof
(
SCreateFuncReq
);
SCreateFuncReq
*
pReq
=
(
SCreateFuncReq
*
)
rpcMallocCont
(
contLen
);
strcpy
(
pReq
->
name
,
"f1"
);
pReq
->
commentSize
=
htonl
(
TSDB_FUNC_COMMENT_LEN
);
SRpcMsg
*
pRsp
=
test
.
SendReq
(
TDMT_MND_CREATE_FUNC
,
pReq
,
contLen
);
ASSERT_NE
(
pRsp
,
nullptr
);
ASSERT_EQ
(
pRsp
->
code
,
TSDB_CODE_MND_INVALID_FUNC_CODE
);
}
{
int32_t
contLen
=
sizeof
(
SCreateFuncReq
);
SCreateFuncReq
*
pReq
=
(
SCreateFuncReq
*
)
rpcMallocCont
(
contLen
);
strcpy
(
pReq
->
name
,
"f1"
);
pReq
->
commentSize
=
htonl
(
TSDB_FUNC_COMMENT_LEN
);
pReq
->
codeSize
=
htonl
(
TSDB_FUNC_CODE_LEN
-
1
);
SRpcMsg
*
pRsp
=
test
.
SendReq
(
TDMT_MND_CREATE_FUNC
,
pReq
,
contLen
);
ASSERT_NE
(
pRsp
,
nullptr
);
ASSERT_EQ
(
pRsp
->
code
,
TSDB_CODE_MND_INVALID_FUNC_CODE
);
}
{
int32_t
contLen
=
sizeof
(
SCreateFuncReq
)
+
24
;
SCreateFuncReq
*
pReq
=
(
SCreateFuncReq
*
)
rpcMallocCont
(
contLen
);
strcpy
(
pReq
->
name
,
"f1"
);
pReq
->
commentSize
=
htonl
(
TSDB_FUNC_COMMENT_LEN
);
pReq
->
codeSize
=
htonl
(
TSDB_FUNC_CODE_LEN
);
pReq
->
pCont
[
0
]
=
0
;
SRpcMsg
*
pRsp
=
test
.
SendReq
(
TDMT_MND_CREATE_FUNC
,
pReq
,
contLen
);
ASSERT_NE
(
pRsp
,
nullptr
);
ASSERT_EQ
(
pRsp
->
code
,
TSDB_CODE_MND_INVALID_FUNC_CODE
);
}
{
int32_t
contLen
=
sizeof
(
SCreateFuncReq
)
+
24
;
SCreateFuncReq
*
pReq
=
(
SCreateFuncReq
*
)
rpcMallocCont
(
contLen
);
strcpy
(
pReq
->
name
,
"f1"
);
pReq
->
commentSize
=
htonl
(
TSDB_FUNC_COMMENT_LEN
);
pReq
->
codeSize
=
htonl
(
TSDB_FUNC_CODE_LEN
);
pReq
->
pCont
[
0
]
=
'a'
;
SRpcMsg
*
pRsp
=
test
.
SendReq
(
TDMT_MND_CREATE_FUNC
,
pReq
,
contLen
);
ASSERT_NE
(
pRsp
,
nullptr
);
ASSERT_EQ
(
pRsp
->
code
,
TSDB_CODE_MND_INVALID_FUNC_BUFSIZE
);
}
{
int32_t
contLen
=
sizeof
(
SCreateFuncReq
)
+
24
;
SCreateFuncReq
*
pReq
=
(
SCreateFuncReq
*
)
rpcMallocCont
(
contLen
);
strcpy
(
pReq
->
name
,
"f1"
);
pReq
->
commentSize
=
htonl
(
TSDB_FUNC_COMMENT_LEN
);
pReq
->
codeSize
=
htonl
(
TSDB_FUNC_CODE_LEN
);
pReq
->
pCont
[
0
]
=
'a'
;
pReq
->
bufSize
=
htonl
(
TSDB_FUNC_BUF_SIZE
+
1
);
SRpcMsg
*
pRsp
=
test
.
SendReq
(
TDMT_MND_CREATE_FUNC
,
pReq
,
contLen
);
ASSERT_NE
(
pRsp
,
nullptr
);
ASSERT_EQ
(
pRsp
->
code
,
TSDB_CODE_MND_INVALID_FUNC_BUFSIZE
);
}
for
(
int32_t
i
=
0
;
i
<
3
;
++
i
)
{
int32_t
contLen
=
sizeof
(
SCreateFuncReq
);
int32_t
commentSize
=
TSDB_FUNC_COMMENT_LEN
;
int32_t
codeSize
=
TSDB_FUNC_CODE_LEN
;
contLen
=
(
contLen
+
codeSize
+
commentSize
);
SCreateFuncReq
*
pReq
=
(
SCreateFuncReq
*
)
rpcMallocCont
(
contLen
);
strcpy
(
pReq
->
name
,
"f1"
);
pReq
->
igExists
=
0
;
if
(
i
==
2
)
pReq
->
igExists
=
1
;
pReq
->
funcType
=
1
;
pReq
->
scriptType
=
2
;
pReq
->
outputType
=
TSDB_DATA_TYPE_SMALLINT
;
pReq
->
outputLen
=
htonl
(
12
);
pReq
->
bufSize
=
htonl
(
4
);
pReq
->
signature
=
htobe64
(
5
);
pReq
->
commentSize
=
htonl
(
commentSize
);
pReq
->
codeSize
=
htonl
(
codeSize
);
for
(
int32_t
i
=
0
;
i
<
commentSize
-
1
;
++
i
)
{
pReq
->
pCont
[
i
]
=
'm'
;
}
for
(
int32_t
i
=
commentSize
;
i
<
commentSize
+
codeSize
-
1
;
++
i
)
{
pReq
->
pCont
[
i
]
=
'd'
;
}
SRpcMsg
*
pRsp
=
test
.
SendReq
(
TDMT_MND_CREATE_FUNC
,
pReq
,
contLen
);
ASSERT_NE
(
pRsp
,
nullptr
);
if
(
i
==
0
||
i
==
2
)
{
ASSERT_EQ
(
pRsp
->
code
,
0
);
}
else
{
ASSERT_EQ
(
pRsp
->
code
,
TSDB_CODE_MND_FUNC_ALREADY_EXIST
);
}
}
test
.
SendShowMetaReq
(
TSDB_MGMT_TABLE_FUNC
,
""
);
CHECK_META
(
"show functions"
,
7
);
test
.
SendShowRetrieveReq
();
EXPECT_EQ
(
test
.
GetShowRows
(),
1
);
CheckBinary
(
"f1"
,
TSDB_FUNC_NAME_LEN
);
CheckBinaryByte
(
'm'
,
TSDB_FUNC_COMMENT_LEN
);
CheckInt32
(
0
);
CheckBinary
(
"SMALLINT"
,
TSDB_TYPE_STR_MAX_LEN
);
CheckTimestamp
();
CheckInt32
(
TSDB_FUNC_CODE_LEN
);
CheckInt32
(
4
);
}
TEST_F
(
MndTestFunc
,
03
_Retrieve_Func
)
{
{
int32_t
contLen
=
sizeof
(
SRetrieveFuncReq
);
int32_t
numOfFuncs
=
1
;
contLen
=
(
contLen
+
numOfFuncs
*
TSDB_FUNC_NAME_LEN
);
SRetrieveFuncReq
*
pReq
=
(
SRetrieveFuncReq
*
)
rpcMallocCont
(
contLen
);
pReq
->
numOfFuncs
=
htonl
(
1
);
strcpy
(
pReq
->
pFuncNames
,
"f1"
);
SRpcMsg
*
pRsp
=
test
.
SendReq
(
TDMT_MND_RETRIEVE_FUNC
,
pReq
,
contLen
);
ASSERT_NE
(
pRsp
,
nullptr
);
ASSERT_EQ
(
pRsp
->
code
,
0
);
SRetrieveFuncRsp
*
pRetrieveRsp
=
(
SRetrieveFuncRsp
*
)
pRsp
->
pCont
;
pRetrieveRsp
->
numOfFuncs
=
htonl
(
pRetrieveRsp
->
numOfFuncs
);
SFuncInfo
*
pFuncInfo
=
(
SFuncInfo
*
)(
pRetrieveRsp
->
pFuncInfos
);
pFuncInfo
->
outputLen
=
htonl
(
pFuncInfo
->
outputLen
);
pFuncInfo
->
bufSize
=
htonl
(
pFuncInfo
->
bufSize
);
pFuncInfo
->
signature
=
htobe64
(
pFuncInfo
->
signature
);
pFuncInfo
->
commentSize
=
htonl
(
pFuncInfo
->
commentSize
);
pFuncInfo
->
codeSize
=
htonl
(
pFuncInfo
->
codeSize
);
EXPECT_STREQ
(
pFuncInfo
->
name
,
"f1"
);
EXPECT_EQ
(
pFuncInfo
->
funcType
,
1
);
EXPECT_EQ
(
pFuncInfo
->
scriptType
,
2
);
EXPECT_EQ
(
pFuncInfo
->
outputType
,
TSDB_DATA_TYPE_SMALLINT
);
EXPECT_EQ
(
pFuncInfo
->
outputLen
,
12
);
EXPECT_EQ
(
pFuncInfo
->
bufSize
,
4
);
EXPECT_EQ
(
pFuncInfo
->
signature
,
5
);
EXPECT_EQ
(
pFuncInfo
->
commentSize
,
TSDB_FUNC_COMMENT_LEN
);
EXPECT_EQ
(
pFuncInfo
->
codeSize
,
TSDB_FUNC_CODE_LEN
);
char
*
pComment
=
pFuncInfo
->
pCont
;
char
*
pCode
=
pFuncInfo
->
pCont
+
pFuncInfo
->
commentSize
;
char
comments
[
TSDB_FUNC_COMMENT_LEN
]
=
{
0
};
for
(
int32_t
i
=
0
;
i
<
TSDB_FUNC_COMMENT_LEN
-
1
;
++
i
)
{
comments
[
i
]
=
'm'
;
}
char
codes
[
TSDB_FUNC_CODE_LEN
]
=
{
0
};
for
(
int32_t
i
=
0
;
i
<
TSDB_FUNC_CODE_LEN
-
1
;
++
i
)
{
codes
[
i
]
=
'd'
;
}
EXPECT_STREQ
(
pComment
,
comments
);
EXPECT_STREQ
(
pCode
,
codes
);
}
{
int32_t
contLen
=
sizeof
(
SRetrieveFuncReq
);
int32_t
numOfFuncs
=
0
;
contLen
=
(
contLen
+
numOfFuncs
*
TSDB_FUNC_NAME_LEN
);
SRetrieveFuncReq
*
pReq
=
(
SRetrieveFuncReq
*
)
rpcMallocCont
(
contLen
);
pReq
->
numOfFuncs
=
htonl
(
numOfFuncs
);
SRpcMsg
*
pRsp
=
test
.
SendReq
(
TDMT_MND_RETRIEVE_FUNC
,
pReq
,
contLen
);
ASSERT_NE
(
pRsp
,
nullptr
);
ASSERT_EQ
(
pRsp
->
code
,
TSDB_CODE_MND_INVALID_FUNC_RETRIEVE
);
}
{
int32_t
contLen
=
sizeof
(
SRetrieveFuncReq
);
int32_t
numOfFuncs
=
TSDB_FUNC_MAX_RETRIEVE
+
1
;
contLen
=
(
contLen
+
numOfFuncs
*
TSDB_FUNC_NAME_LEN
);
SRetrieveFuncReq
*
pReq
=
(
SRetrieveFuncReq
*
)
rpcMallocCont
(
contLen
);
pReq
->
numOfFuncs
=
htonl
(
numOfFuncs
);
SRpcMsg
*
pRsp
=
test
.
SendReq
(
TDMT_MND_RETRIEVE_FUNC
,
pReq
,
contLen
);
ASSERT_NE
(
pRsp
,
nullptr
);
ASSERT_EQ
(
pRsp
->
code
,
TSDB_CODE_MND_INVALID_FUNC_RETRIEVE
);
}
{
int32_t
contLen
=
sizeof
(
SRetrieveFuncReq
);
int32_t
numOfFuncs
=
1
;
contLen
=
(
contLen
+
numOfFuncs
*
TSDB_FUNC_NAME_LEN
);
SRetrieveFuncReq
*
pReq
=
(
SRetrieveFuncReq
*
)
rpcMallocCont
(
contLen
);
pReq
->
numOfFuncs
=
htonl
(
numOfFuncs
);
strcpy
(
pReq
->
pFuncNames
,
"f2"
);
SRpcMsg
*
pRsp
=
test
.
SendReq
(
TDMT_MND_RETRIEVE_FUNC
,
pReq
,
contLen
);
ASSERT_NE
(
pRsp
,
nullptr
);
ASSERT_EQ
(
pRsp
->
code
,
TSDB_CODE_MND_INVALID_FUNC
);
}
{
int32_t
contLen
=
sizeof
(
SCreateFuncReq
);
int32_t
commentSize
=
1024
;
int32_t
codeSize
=
9527
;
contLen
=
(
contLen
+
codeSize
+
commentSize
);
SCreateFuncReq
*
pReq
=
(
SCreateFuncReq
*
)
rpcMallocCont
(
contLen
);
strcpy
(
pReq
->
name
,
"f2"
);
pReq
->
igExists
=
1
;
pReq
->
funcType
=
2
;
pReq
->
scriptType
=
3
;
pReq
->
outputType
=
TSDB_DATA_TYPE_BINARY
;
pReq
->
outputLen
=
htonl
(
24
);
pReq
->
bufSize
=
htonl
(
6
);
pReq
->
signature
=
htobe64
(
18
);
pReq
->
commentSize
=
htonl
(
commentSize
);
pReq
->
codeSize
=
htonl
(
codeSize
);
for
(
int32_t
i
=
0
;
i
<
commentSize
-
1
;
++
i
)
{
pReq
->
pCont
[
i
]
=
'p'
;
}
for
(
int32_t
i
=
commentSize
;
i
<
commentSize
+
codeSize
-
1
;
++
i
)
{
pReq
->
pCont
[
i
]
=
'q'
;
}
SRpcMsg
*
pRsp
=
test
.
SendReq
(
TDMT_MND_CREATE_FUNC
,
pReq
,
contLen
);
ASSERT_NE
(
pRsp
,
nullptr
);
ASSERT_EQ
(
pRsp
->
code
,
0
);
test
.
SendShowMetaReq
(
TSDB_MGMT_TABLE_FUNC
,
""
);
CHECK_META
(
"show functions"
,
7
);
test
.
SendShowRetrieveReq
();
EXPECT_EQ
(
test
.
GetShowRows
(),
2
);
}
{
int32_t
contLen
=
sizeof
(
SRetrieveFuncReq
);
int32_t
numOfFuncs
=
1
;
contLen
=
(
contLen
+
numOfFuncs
*
TSDB_FUNC_NAME_LEN
);
SRetrieveFuncReq
*
pReq
=
(
SRetrieveFuncReq
*
)
rpcMallocCont
(
contLen
);
pReq
->
numOfFuncs
=
htonl
(
1
);
strcpy
(
pReq
->
pFuncNames
,
"f2"
);
SRpcMsg
*
pRsp
=
test
.
SendReq
(
TDMT_MND_RETRIEVE_FUNC
,
pReq
,
contLen
);
ASSERT_NE
(
pRsp
,
nullptr
);
ASSERT_EQ
(
pRsp
->
code
,
0
);
SRetrieveFuncRsp
*
pRetrieveRsp
=
(
SRetrieveFuncRsp
*
)
pRsp
->
pCont
;
pRetrieveRsp
->
numOfFuncs
=
htonl
(
pRetrieveRsp
->
numOfFuncs
);
SFuncInfo
*
pFuncInfo
=
(
SFuncInfo
*
)(
pRetrieveRsp
->
pFuncInfos
);
pFuncInfo
->
outputLen
=
htonl
(
pFuncInfo
->
outputLen
);
pFuncInfo
->
bufSize
=
htonl
(
pFuncInfo
->
bufSize
);
pFuncInfo
->
signature
=
htobe64
(
pFuncInfo
->
signature
);
pFuncInfo
->
commentSize
=
htonl
(
pFuncInfo
->
commentSize
);
pFuncInfo
->
codeSize
=
htonl
(
pFuncInfo
->
codeSize
);
EXPECT_STREQ
(
pFuncInfo
->
name
,
"f2"
);
EXPECT_EQ
(
pFuncInfo
->
funcType
,
2
);
EXPECT_EQ
(
pFuncInfo
->
scriptType
,
3
);
EXPECT_EQ
(
pFuncInfo
->
outputType
,
TSDB_DATA_TYPE_BINARY
);
EXPECT_EQ
(
pFuncInfo
->
outputLen
,
24
);
EXPECT_EQ
(
pFuncInfo
->
bufSize
,
6
);
EXPECT_EQ
(
pFuncInfo
->
signature
,
18
);
EXPECT_EQ
(
pFuncInfo
->
commentSize
,
1024
);
EXPECT_EQ
(
pFuncInfo
->
codeSize
,
9527
);
char
*
pComment
=
pFuncInfo
->
pCont
;
char
*
pCode
=
pFuncInfo
->
pCont
+
pFuncInfo
->
commentSize
;
char
*
comments
=
(
char
*
)
calloc
(
1
,
1024
);
for
(
int32_t
i
=
0
;
i
<
1024
-
1
;
++
i
)
{
comments
[
i
]
=
'p'
;
}
char
*
codes
=
(
char
*
)
calloc
(
1
,
9527
);
for
(
int32_t
i
=
0
;
i
<
9527
-
1
;
++
i
)
{
codes
[
i
]
=
'q'
;
}
EXPECT_STREQ
(
pComment
,
comments
);
EXPECT_STREQ
(
pCode
,
codes
);
free
(
comments
);
free
(
codes
);
}
{
int32_t
contLen
=
sizeof
(
SRetrieveFuncReq
);
int32_t
numOfFuncs
=
2
;
contLen
=
(
contLen
+
numOfFuncs
*
TSDB_FUNC_NAME_LEN
);
SRetrieveFuncReq
*
pReq
=
(
SRetrieveFuncReq
*
)
rpcMallocCont
(
contLen
);
pReq
->
numOfFuncs
=
htonl
(
numOfFuncs
);
strcpy
(
pReq
->
pFuncNames
,
"f2"
);
strcpy
((
char
*
)
pReq
->
pFuncNames
+
TSDB_FUNC_NAME_LEN
,
"f1"
);
SRpcMsg
*
pRsp
=
test
.
SendReq
(
TDMT_MND_RETRIEVE_FUNC
,
pReq
,
contLen
);
ASSERT_NE
(
pRsp
,
nullptr
);
ASSERT_EQ
(
pRsp
->
code
,
0
);
SRetrieveFuncRsp
*
pRetrieveRsp
=
(
SRetrieveFuncRsp
*
)
pRsp
->
pCont
;
pRetrieveRsp
->
numOfFuncs
=
htonl
(
pRetrieveRsp
->
numOfFuncs
);
{
SFuncInfo
*
pFuncInfo
=
(
SFuncInfo
*
)(
pRetrieveRsp
->
pFuncInfos
);
pFuncInfo
->
outputLen
=
htonl
(
pFuncInfo
->
outputLen
);
pFuncInfo
->
bufSize
=
htonl
(
pFuncInfo
->
bufSize
);
pFuncInfo
->
signature
=
htobe64
(
pFuncInfo
->
signature
);
pFuncInfo
->
commentSize
=
htonl
(
pFuncInfo
->
commentSize
);
pFuncInfo
->
codeSize
=
htonl
(
pFuncInfo
->
codeSize
);
EXPECT_STREQ
(
pFuncInfo
->
name
,
"f2"
);
EXPECT_EQ
(
pFuncInfo
->
funcType
,
2
);
EXPECT_EQ
(
pFuncInfo
->
scriptType
,
3
);
EXPECT_EQ
(
pFuncInfo
->
outputType
,
TSDB_DATA_TYPE_BINARY
);
EXPECT_EQ
(
pFuncInfo
->
outputLen
,
24
);
EXPECT_EQ
(
pFuncInfo
->
bufSize
,
6
);
EXPECT_EQ
(
pFuncInfo
->
signature
,
18
);
EXPECT_EQ
(
pFuncInfo
->
commentSize
,
1024
);
EXPECT_EQ
(
pFuncInfo
->
codeSize
,
9527
);
char
*
pComment
=
pFuncInfo
->
pCont
;
char
*
pCode
=
pFuncInfo
->
pCont
+
pFuncInfo
->
commentSize
;
char
*
comments
=
(
char
*
)
calloc
(
1
,
1024
);
for
(
int32_t
i
=
0
;
i
<
1024
-
1
;
++
i
)
{
comments
[
i
]
=
'p'
;
}
char
*
codes
=
(
char
*
)
calloc
(
1
,
9527
);
for
(
int32_t
i
=
0
;
i
<
9527
-
1
;
++
i
)
{
codes
[
i
]
=
'q'
;
}
EXPECT_STREQ
(
pComment
,
comments
);
EXPECT_STREQ
(
pCode
,
codes
);
free
(
comments
);
free
(
codes
);
}
{
SFuncInfo
*
pFuncInfo
=
(
SFuncInfo
*
)(
pRetrieveRsp
->
pFuncInfos
+
sizeof
(
SFuncInfo
)
+
1024
+
9527
);
pFuncInfo
->
outputLen
=
htonl
(
pFuncInfo
->
outputLen
);
pFuncInfo
->
bufSize
=
htonl
(
pFuncInfo
->
bufSize
);
pFuncInfo
->
signature
=
htobe64
(
pFuncInfo
->
signature
);
pFuncInfo
->
commentSize
=
htonl
(
pFuncInfo
->
commentSize
);
pFuncInfo
->
codeSize
=
htonl
(
pFuncInfo
->
codeSize
);
EXPECT_STREQ
(
pFuncInfo
->
name
,
"f1"
);
EXPECT_EQ
(
pFuncInfo
->
funcType
,
1
);
EXPECT_EQ
(
pFuncInfo
->
scriptType
,
2
);
EXPECT_EQ
(
pFuncInfo
->
outputType
,
TSDB_DATA_TYPE_SMALLINT
);
EXPECT_EQ
(
pFuncInfo
->
outputLen
,
12
);
EXPECT_EQ
(
pFuncInfo
->
bufSize
,
4
);
EXPECT_EQ
(
pFuncInfo
->
signature
,
5
);
EXPECT_EQ
(
pFuncInfo
->
commentSize
,
TSDB_FUNC_COMMENT_LEN
);
EXPECT_EQ
(
pFuncInfo
->
codeSize
,
TSDB_FUNC_CODE_LEN
);
char
*
pComment
=
pFuncInfo
->
pCont
;
char
*
pCode
=
pFuncInfo
->
pCont
+
pFuncInfo
->
commentSize
;
char
comments
[
TSDB_FUNC_COMMENT_LEN
]
=
{
0
};
for
(
int32_t
i
=
0
;
i
<
TSDB_FUNC_COMMENT_LEN
-
1
;
++
i
)
{
comments
[
i
]
=
'm'
;
}
char
codes
[
TSDB_FUNC_CODE_LEN
]
=
{
0
};
for
(
int32_t
i
=
0
;
i
<
TSDB_FUNC_CODE_LEN
-
1
;
++
i
)
{
codes
[
i
]
=
'd'
;
}
EXPECT_STREQ
(
pComment
,
comments
);
EXPECT_STREQ
(
pCode
,
codes
);
}
}
{
int32_t
contLen
=
sizeof
(
SRetrieveFuncReq
);
int32_t
numOfFuncs
=
2
;
contLen
=
(
contLen
+
numOfFuncs
*
TSDB_FUNC_NAME_LEN
);
SRetrieveFuncReq
*
pReq
=
(
SRetrieveFuncReq
*
)
rpcMallocCont
(
contLen
);
pReq
->
numOfFuncs
=
htonl
(
numOfFuncs
);
strcpy
(
pReq
->
pFuncNames
,
"f2"
);
strcpy
((
char
*
)
pReq
->
pFuncNames
+
TSDB_FUNC_NAME_LEN
,
"f3"
);
SRpcMsg
*
pRsp
=
test
.
SendReq
(
TDMT_MND_RETRIEVE_FUNC
,
pReq
,
contLen
);
ASSERT_NE
(
pRsp
,
nullptr
);
ASSERT_EQ
(
pRsp
->
code
,
TSDB_CODE_MND_INVALID_FUNC
);
}
}
TEST_F
(
MndTestFunc
,
04
_Drop_Func
)
{
{
int32_t
contLen
=
sizeof
(
SDropFuncReq
);
SDropFuncReq
*
pReq
=
(
SDropFuncReq
*
)
rpcMallocCont
(
contLen
);
strcpy
(
pReq
->
name
,
""
);
SRpcMsg
*
pRsp
=
test
.
SendReq
(
TDMT_MND_DROP_FUNC
,
pReq
,
contLen
);
ASSERT_NE
(
pRsp
,
nullptr
);
ASSERT_EQ
(
pRsp
->
code
,
TSDB_CODE_MND_INVALID_FUNC_NAME
);
}
{
int32_t
contLen
=
sizeof
(
SDropFuncReq
);
SDropFuncReq
*
pReq
=
(
SDropFuncReq
*
)
rpcMallocCont
(
contLen
);
strcpy
(
pReq
->
name
,
"f3"
);
SRpcMsg
*
pRsp
=
test
.
SendReq
(
TDMT_MND_DROP_FUNC
,
pReq
,
contLen
);
ASSERT_NE
(
pRsp
,
nullptr
);
ASSERT_EQ
(
pRsp
->
code
,
TSDB_CODE_MND_FUNC_NOT_EXIST
);
}
{
int32_t
contLen
=
sizeof
(
SDropFuncReq
);
SDropFuncReq
*
pReq
=
(
SDropFuncReq
*
)
rpcMallocCont
(
contLen
);
strcpy
(
pReq
->
name
,
"f3"
);
pReq
->
igNotExists
=
1
;
SRpcMsg
*
pRsp
=
test
.
SendReq
(
TDMT_MND_DROP_FUNC
,
pReq
,
contLen
);
ASSERT_NE
(
pRsp
,
nullptr
);
ASSERT_EQ
(
pRsp
->
code
,
0
);
}
{
int32_t
contLen
=
sizeof
(
SDropFuncReq
);
SDropFuncReq
*
pReq
=
(
SDropFuncReq
*
)
rpcMallocCont
(
contLen
);
strcpy
(
pReq
->
name
,
"f1"
);
SRpcMsg
*
pRsp
=
test
.
SendReq
(
TDMT_MND_DROP_FUNC
,
pReq
,
contLen
);
ASSERT_NE
(
pRsp
,
nullptr
);
ASSERT_EQ
(
pRsp
->
code
,
0
);
}
test
.
SendShowMetaReq
(
TSDB_MGMT_TABLE_FUNC
,
""
);
CHECK_META
(
"show functions"
,
7
);
test
.
SendShowRetrieveReq
();
EXPECT_EQ
(
test
.
GetShowRows
(),
1
);
// restart
test
.
Restart
();
test
.
SendShowMetaReq
(
TSDB_MGMT_TABLE_FUNC
,
""
);
CHECK_META
(
"show functions"
,
7
);
test
.
SendShowRetrieveReq
();
EXPECT_EQ
(
test
.
GetShowRows
(),
1
);
CheckBinary
(
"f2"
,
TSDB_FUNC_NAME_LEN
);
}
source/libs/parser/inc/sql.y
浏览文件 @
26197a8c
...
...
@@ -65,7 +65,7 @@ program ::= cmd. {}
//////////////////////////////////THE SHOW STATEMENT///////////////////////////////////////////
cmd ::= SHOW DATABASES. { setShowOptions(pInfo, TSDB_MGMT_TABLE_DB, 0, 0);}
cmd ::= SHOW TOPICS. { setShowOptions(pInfo, TSDB_MGMT_TABLE_TP, 0, 0);}
cmd ::= SHOW FUNCTIONS. { setShowOptions(pInfo, TSDB_MGMT_TABLE_FUNC
TION
, 0, 0);}
cmd ::= SHOW FUNCTIONS. { setShowOptions(pInfo, TSDB_MGMT_TABLE_FUNC, 0, 0);}
cmd ::= SHOW MNODES. { setShowOptions(pInfo, TSDB_MGMT_TABLE_MNODE, 0, 0);}
cmd ::= SHOW DNODES. { setShowOptions(pInfo, TSDB_MGMT_TABLE_DNODE, 0, 0);}
cmd ::= SHOW ACCOUNTS. { setShowOptions(pInfo, TSDB_MGMT_TABLE_ACCT, 0, 0);}
...
...
source/libs/parser/src/sql.c
浏览文件 @
26197a8c
...
...
@@ -2232,7 +2232,7 @@ static void yy_reduce(
{
setShowOptions
(
pInfo
,
TSDB_MGMT_TABLE_TP
,
0
,
0
);}
break
;
case
3
:
/* cmd ::= SHOW FUNCTIONS */
{
setShowOptions
(
pInfo
,
TSDB_MGMT_TABLE_FUNC
TION
,
0
,
0
);}
{
setShowOptions
(
pInfo
,
TSDB_MGMT_TABLE_FUNC
,
0
,
0
);}
break
;
case
4
:
/* cmd ::= SHOW MNODES */
{
setShowOptions
(
pInfo
,
TSDB_MGMT_TABLE_MNODE
,
0
,
0
);}
...
...
source/util/src/terror.c
浏览文件 @
26197a8c
...
...
@@ -248,6 +248,7 @@ TAOS_DEFINE_ERROR(TSDB_CODE_MND_INVALID_FUNC_NAME, "Invalid func name")
TAOS_DEFINE_ERROR
(
TSDB_CODE_MND_INVALID_FUNC_COMMENT
,
"Invalid func comment"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_MND_INVALID_FUNC_CODE
,
"Invalid func code"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_MND_INVALID_FUNC_BUFSIZE
,
"Invalid func bufSize"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_MND_INVALID_FUNC_RETRIEVE
,
"Invalid func retrieve msg"
)
// mnode-trans
TAOS_DEFINE_ERROR
(
TSDB_CODE_MND_TRANS_ALREADY_EXIST
,
"Transaction already exists"
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录