Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
c0692a3e
TDengine
项目概览
taosdata
/
TDengine
接近 2 年 前同步成功
通知
1191
Star
22018
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
c0692a3e
编写于
12月 09, 2021
作者:
S
Shengliang Guan
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
TD-10431 table manage
上级
8d77b0a7
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
331 addition
and
19 deletion
+331
-19
include/common/taosmsg.h
include/common/taosmsg.h
+2
-4
source/dnode/mnode/impl/inc/mndDef.h
source/dnode/mnode/impl/inc/mndDef.h
+12
-8
source/dnode/mnode/impl/src/mndStable.c
source/dnode/mnode/impl/src/mndStable.c
+304
-4
source/dnode/mnode/impl/src/mndVgroup.c
source/dnode/mnode/impl/src/mndVgroup.c
+13
-3
未找到文件。
include/common/taosmsg.h
浏览文件 @
c0692a3e
...
...
@@ -272,14 +272,12 @@ typedef struct {
SShellSubmitRspBlock
failedBlocks
[];
}
SShellSubmitRspMsg
;
//#if 0
typedef
struct
SSchema
{
uint8_t
type
;
char
name
[
TSDB_COL_NAME_LEN
];
int8_t
type
;
int16_t
colId
;
int32_t
bytes
;
char
name
[
TSDB_COL_NAME_LEN
];
}
SSchema
;
//#endif
typedef
struct
{
int32_t
contLen
;
...
...
source/dnode/mnode/impl/inc/mndDef.h
浏览文件 @
c0692a3e
...
...
@@ -47,7 +47,7 @@ typedef struct SAcctObj SAcctObj;
typedef
struct
SUserObj
SUserObj
;
typedef
struct
SDbObj
SDbObj
;
typedef
struct
SVgObj
SVgObj
;
typedef
struct
S
STableObj
S
STableObj
;
typedef
struct
S
TableObj
STableObj
;
typedef
struct
SFuncObj
SFuncObj
;
typedef
struct
SOperObj
SOperObj
;
...
...
@@ -242,15 +242,19 @@ typedef struct SVgObj {
SVnodeGid
vnodeGid
[
TSDB_MAX_REPLICA
];
}
SVgObj
;
typedef
struct
SS
T
ableObj
{
char
tableId
[
TSDB_TABLE_
NAME_LEN
];
uint64_t
uid
;
typedef
struct
SS
t
ableObj
{
char
name
[
TSDB_TABLE_F
NAME_LEN
];
char
db
[
TSDB_FULL_DB_NAME_LEN
]
;
int64_t
createdTime
;
int64_t
updateTime
;
int32_t
numOfColumns
;
// used by normal table
int32_t
numOfTags
;
SSchema
*
schema
;
}
SSTableObj
;
uint64_t
uid
;
int32_t
version
;
int16_t
numOfFields
;
int16_t
numOfTags
;
SSchema
*
fieldSchema
;
SSchema
*
tagSchema
;
char
pCont
[];
}
SStableObj
;
typedef
struct
SFuncObj
{
char
name
[
TSDB_FUNC_NAME_LEN
];
...
...
source/dnode/mnode/impl/src/mndStable.c
浏览文件 @
c0692a3e
...
...
@@ -14,8 +14,308 @@
*/
#define _DEFAULT_SOURCE
#include "os.h"
#include "mndInt.h"
#include "mndStable.h"
#include "mndDnode.h"
#include "mndMnode.h"
#include "mndShow.h"
#include "mndTrans.h"
#include "mndUser.h"
#include "mndDb.h"
int32_t
mndInitStable
(
SMnode
*
pMnode
)
{
return
0
;
}
void
mndCleanupStable
(
SMnode
*
pMnode
)
{}
\ No newline at end of file
#define TSDB_STABLE_VER_NUM 1
#define TSDB_STABLE_RESERVE_SIZE 64
static
SSdbRaw
*
mndStableActionEncode
(
SStableObj
*
pStable
);
static
SSdbRow
*
mndStableActionDecode
(
SSdbRaw
*
pRaw
);
static
int32_t
mndStableActionInsert
(
SSdb
*
pSdb
,
SStableObj
*
pStable
);
static
int32_t
mndStableActionDelete
(
SSdb
*
pSdb
,
SStableObj
*
pStable
);
static
int32_t
mndStableActionUpdate
(
SSdb
*
pSdb
,
SStableObj
*
pOldStable
,
SStableObj
*
pNewStable
);
static
int32_t
mndProcessCreateStableMsg
(
SMnodeMsg
*
pMsg
);
static
int32_t
mndProcessAlterStableMsg
(
SMnodeMsg
*
pMsg
);
static
int32_t
mndProcessDropStableMsg
(
SMnodeMsg
*
pMsg
);
static
int32_t
mndGetStableMeta
(
SMnodeMsg
*
pMsg
,
SShowObj
*
pShow
,
STableMetaMsg
*
pMeta
);
static
int32_t
mndRetrieveStables
(
SMnodeMsg
*
pMsg
,
SShowObj
*
pShow
,
char
*
data
,
int32_t
rows
);
static
void
mndCancelGetNextStable
(
SMnode
*
pMnode
,
void
*
pIter
);
int32_t
mndInitStable
(
SMnode
*
pMnode
)
{
SSdbTable
table
=
{.
sdbType
=
SDB_STABLE
,
.
keyType
=
SDB_KEY_BINARY
,
.
encodeFp
=
(
SdbEncodeFp
)
mndStableActionEncode
,
.
decodeFp
=
(
SdbDecodeFp
)
mndStableActionDecode
,
.
insertFp
=
(
SdbInsertFp
)
mndStableActionInsert
,
.
updateFp
=
(
SdbUpdateFp
)
mndStableActionUpdate
,
.
deleteFp
=
(
SdbDeleteFp
)
mndStableActionDelete
};
mndSetMsgHandle
(
pMnode
,
TSDB_MSG_TYPE_CREATE_DB
,
mndProcessCreateStableMsg
);
mndSetMsgHandle
(
pMnode
,
TSDB_MSG_TYPE_ALTER_DB
,
mndProcessAlterStableMsg
);
mndSetMsgHandle
(
pMnode
,
TSDB_MSG_TYPE_DROP_DB
,
mndProcessDropStableMsg
);
mndAddShowMetaHandle
(
pMnode
,
TSDB_MGMT_TABLE_DB
,
mndGetStableMeta
);
mndAddShowRetrieveHandle
(
pMnode
,
TSDB_MGMT_TABLE_DB
,
mndRetrieveStables
);
mndAddShowFreeIterHandle
(
pMnode
,
TSDB_MGMT_TABLE_DB
,
mndCancelGetNextStable
);
}
void
mndCleanupStable
(
SMnode
*
pMnode
)
{}
static
SSdbRaw
*
mndStableActionEncode
(
SStableObj
*
pStable
)
{
int32_t
size
=
sizeof
(
SStableObj
)
+
(
pStable
->
numOfFields
+
pStable
->
numOfTags
)
*
sizeof
(
SSchema
);
SSdbRaw
*
pRaw
=
sdbAllocRaw
(
SDB_STABLE
,
TSDB_STABLE_VER_NUM
,
size
);
if
(
pRaw
==
NULL
)
return
NULL
;
int32_t
dataPos
=
0
;
SDB_SET_BINARY
(
pRaw
,
dataPos
,
pStable
->
name
,
TSDB_TABLE_NAME_LEN
)
SDB_SET_INT64
(
pRaw
,
dataPos
,
pStable
->
createdTime
)
SDB_SET_INT64
(
pRaw
,
dataPos
,
pStable
->
updateTime
)
SDB_SET_INT64
(
pRaw
,
dataPos
,
pStable
->
uid
)
SDB_SET_INT64
(
pRaw
,
dataPos
,
pStable
->
version
)
SDB_SET_INT16
(
pRaw
,
dataPos
,
pStable
->
numOfFields
)
SDB_SET_INT16
(
pRaw
,
dataPos
,
pStable
->
numOfTags
)
for
(
int32_t
i
=
0
;
i
<
pStable
->
numOfFields
;
++
i
)
{
SSchema
*
pSchema
=
&
pStable
->
fieldSchema
[
i
];
SDB_SET_INT8
(
pRaw
,
dataPos
,
pSchema
->
type
);
SDB_SET_INT16
(
pRaw
,
dataPos
,
pSchema
->
colId
);
SDB_SET_INT16
(
pRaw
,
dataPos
,
pSchema
->
bytes
);
SDB_SET_BINARY
(
pRaw
,
dataPos
,
pSchema
->
name
,
TSDB_COL_NAME_LEN
);
}
for
(
int32_t
i
=
0
;
i
<
pStable
->
numOfTags
;
++
i
)
{
SSchema
*
pSchema
=
&
pStable
->
tagSchema
[
i
];
SDB_SET_INT8
(
pRaw
,
dataPos
,
pSchema
->
type
);
SDB_SET_INT32
(
pRaw
,
dataPos
,
pSchema
->
colId
);
SDB_SET_INT32
(
pRaw
,
dataPos
,
pSchema
->
bytes
);
SDB_SET_BINARY
(
pRaw
,
dataPos
,
pSchema
->
name
,
TSDB_COL_NAME_LEN
);
}
SDB_SET_RESERVE
(
pRaw
,
dataPos
,
TSDB_STABLE_RESERVE_SIZE
)
SDB_SET_DATALEN
(
pRaw
,
dataPos
);
return
pRaw
;
}
static
SSdbRow
*
mndStableActionDecode
(
SSdbRaw
*
pRaw
)
{
int8_t
sver
=
0
;
if
(
sdbGetRawSoftVer
(
pRaw
,
&
sver
)
!=
0
)
return
NULL
;
if
(
sver
!=
TSDB_STABLE_VER_NUM
)
{
mError
(
"failed to decode stable since %s"
,
terrstr
());
terrno
=
TSDB_CODE_SDB_INVALID_DATA_VER
;
return
NULL
;
}
int32_t
size
=
sizeof
(
SStableObj
)
+
TSDB_MAX_COLUMNS
*
sizeof
(
SSchema
);
SSdbRow
*
pRow
=
sdbAllocRow
(
size
);
SStableObj
*
pStable
=
sdbGetRowObj
(
pRow
);
if
(
pStable
==
NULL
)
return
NULL
;
int32_t
dataPos
=
0
;
SDB_GET_BINARY
(
pRaw
,
pRow
,
dataPos
,
pStable
->
name
,
TSDB_TABLE_NAME_LEN
)
SDB_GET_INT64
(
pRaw
,
pRow
,
dataPos
,
&
pStable
->
createdTime
)
SDB_GET_INT64
(
pRaw
,
pRow
,
dataPos
,
&
pStable
->
updateTime
)
SDB_GET_INT64
(
pRaw
,
pRow
,
dataPos
,
&
pStable
->
uid
)
SDB_GET_INT32
(
pRaw
,
pRow
,
dataPos
,
&
pStable
->
version
)
SDB_GET_INT16
(
pRaw
,
pRow
,
dataPos
,
&
pStable
->
numOfFields
)
SDB_GET_INT16
(
pRaw
,
pRow
,
dataPos
,
&
pStable
->
numOfTags
)
pStable
->
fieldSchema
=
(
SSchema
*
)
pStable
->
pCont
;
pStable
->
tagSchema
=
(
SSchema
*
)(
pStable
->
pCont
+
pStable
->
numOfFields
*
sizeof
(
SSchema
));
for
(
int32_t
i
=
0
;
i
<
pStable
->
numOfFields
;
++
i
)
{
SSchema
*
pSchema
=
&
pStable
->
fieldSchema
[
i
];
SDB_GET_INT8
(
pRaw
,
pRow
,
dataPos
,
&
pSchema
->
type
);
SDB_GET_INT16
(
pRaw
,
pRow
,
dataPos
,
&
pSchema
->
colId
);
SDB_GET_INT32
(
pRaw
,
pRow
,
dataPos
,
&
pSchema
->
bytes
);
SDB_GET_BINARY
(
pRaw
,
pRow
,
dataPos
,
pSchema
->
name
,
TSDB_COL_NAME_LEN
);
}
for
(
int32_t
i
=
0
;
i
<
pStable
->
numOfTags
;
++
i
)
{
SSchema
*
pSchema
=
&
pStable
->
tagSchema
[
i
];
SDB_GET_INT8
(
pRaw
,
pRow
,
dataPos
,
&
pSchema
->
type
);
SDB_GET_INT16
(
pRaw
,
pRow
,
dataPos
,
&
pSchema
->
colId
);
SDB_GET_INT32
(
pRaw
,
pRow
,
dataPos
,
&
pSchema
->
bytes
);
SDB_GET_BINARY
(
pRaw
,
pRow
,
dataPos
,
pSchema
->
name
,
TSDB_COL_NAME_LEN
);
}
SDB_GET_RESERVE
(
pRaw
,
pRow
,
dataPos
,
TSDB_STABLE_RESERVE_SIZE
)
return
pRow
;
}
static
int32_t
mndStableActionInsert
(
SSdb
*
pSdb
,
SStableObj
*
pStable
)
{
mTrace
(
"stable:%s, perform insert action"
,
pStable
->
name
);
return
0
;
}
static
int32_t
mndStableActionDelete
(
SSdb
*
pSdb
,
SStableObj
*
pStable
)
{
mTrace
(
"stable:%s, perform delete action"
,
pStable
->
name
);
return
0
;
}
static
int32_t
mndStableActionUpdate
(
SSdb
*
pSdb
,
SStableObj
*
pOldStable
,
SStableObj
*
pNewStable
)
{
mTrace
(
"stable:%s, perform update action"
,
pOldStable
->
name
);
memcpy
(
pOldStable
->
name
,
pNewStable
->
name
,
TSDB_TABLE_NAME_LEN
);
pOldStable
->
createdTime
=
pNewStable
->
createdTime
;
pOldStable
->
updateTime
=
pNewStable
->
updateTime
;
pOldStable
->
uid
=
pNewStable
->
uid
;
pOldStable
->
version
=
pNewStable
->
version
;
pOldStable
->
numOfFields
=
pNewStable
->
numOfFields
;
pOldStable
->
numOfTags
=
pNewStable
->
numOfTags
;
pOldStable
->
createdTime
=
pNewStable
->
createdTime
;
memcpy
(
pOldStable
->
pCont
,
pNewStable
,
sizeof
(
SDbObj
));
// pStable->fieldSchema = pStable->pCont;
// pStable->tagSchema = pStable->pCont + pStable->numOfFields * sizeof(SSchema);
return
0
;
}
static
int32_t
mndProcessCreateStableMsg
(
SMnodeMsg
*
pMsg
)
{
return
0
;
}
static
int32_t
mndProcessAlterStableMsg
(
SMnodeMsg
*
pMsg
)
{
return
0
;
}
static
int32_t
mndProcessDropStableMsg
(
SMnodeMsg
*
pMsg
)
{
return
0
;
}
static
int32_t
mndGetNumOfStables
(
SMnode
*
pMnode
,
char
*
dbName
,
int32_t
*
pNumOfStables
)
{
SSdb
*
pSdb
=
pMnode
->
pSdb
;
SDbObj
*
pDb
=
mndAcquireDb
(
pMnode
,
dbName
);
if
(
pDb
==
NULL
)
{
terrno
=
TSDB_CODE_MND_DB_NOT_SELECTED
;
return
-
1
;
}
int32_t
numOfStables
=
0
;
void
*
pIter
=
NULL
;
while
(
1
)
{
SStableObj
*
pStable
=
NULL
;
pIter
=
sdbFetch
(
pSdb
,
SDB_VGROUP
,
pIter
,
(
void
**
)
&
pStable
);
if
(
pIter
==
NULL
)
break
;
if
(
strcmp
(
pStable
->
db
,
dbName
)
==
0
)
{
numOfStables
++
;
}
sdbRelease
(
pSdb
,
pStable
);
}
*
pNumOfStables
=
numOfStables
;
return
0
;
}
static
int32_t
mndGetStableMeta
(
SMnodeMsg
*
pMsg
,
SShowObj
*
pShow
,
STableMetaMsg
*
pMeta
)
{
SMnode
*
pMnode
=
pMsg
->
pMnode
;
SSdb
*
pSdb
=
pMnode
->
pSdb
;
if
(
mndGetNumOfStables
(
pMnode
,
pShow
->
db
,
&
pShow
->
numOfRows
)
!=
0
)
{
return
-
1
;
}
int32_t
cols
=
0
;
SSchema
*
pSchema
=
pMeta
->
schema
;
pShow
->
bytes
[
cols
]
=
TSDB_TABLE_NAME_LEN
+
VARSTR_HEADER_SIZE
;
pSchema
[
cols
].
type
=
TSDB_DATA_TYPE_BINARY
;
strcpy
(
pSchema
[
cols
].
name
,
"name"
);
pSchema
[
cols
].
bytes
=
htons
(
pShow
->
bytes
[
cols
]);
cols
++
;
pShow
->
bytes
[
cols
]
=
8
;
pSchema
[
cols
].
type
=
TSDB_DATA_TYPE_TIMESTAMP
;
strcpy
(
pSchema
[
cols
].
name
,
"create time"
);
pSchema
[
cols
].
bytes
=
htons
(
pShow
->
bytes
[
cols
]);
cols
++
;
pShow
->
bytes
[
cols
]
=
2
;
pSchema
[
cols
].
type
=
TSDB_DATA_TYPE_SMALLINT
;
strcpy
(
pSchema
[
cols
].
name
,
"columns"
);
pSchema
[
cols
].
bytes
=
htons
(
pShow
->
bytes
[
cols
]);
cols
++
;
pShow
->
bytes
[
cols
]
=
2
;
pSchema
[
cols
].
type
=
TSDB_DATA_TYPE_SMALLINT
;
strcpy
(
pSchema
[
cols
].
name
,
"tags"
);
pSchema
[
cols
].
bytes
=
htons
(
pShow
->
bytes
[
cols
]);
cols
++
;
pMeta
->
numOfColumns
=
htons
(
cols
);
pShow
->
numOfColumns
=
cols
;
pShow
->
offset
[
0
]
=
0
;
for
(
int32_t
i
=
1
;
i
<
cols
;
++
i
)
{
pShow
->
offset
[
i
]
=
pShow
->
offset
[
i
-
1
]
+
pShow
->
bytes
[
i
-
1
];
}
pShow
->
rowSize
=
pShow
->
offset
[
cols
-
1
]
+
pShow
->
bytes
[
cols
-
1
];
strcpy
(
pMeta
->
tableFname
,
mndShowStr
(
pShow
->
type
));
return
0
;
}
static
void
mnodeExtractTableName
(
char
*
tableId
,
char
*
name
)
{
int
pos
=
-
1
;
int
num
=
0
;
for
(
pos
=
0
;
tableId
[
pos
]
!=
0
;
++
pos
)
{
if
(
tableId
[
pos
]
==
'.'
)
num
++
;
if
(
num
==
2
)
break
;
}
if
(
num
==
2
)
{
strcpy
(
name
,
tableId
+
pos
+
1
);
}
}
static
int32_t
mndRetrieveStables
(
SMnodeMsg
*
pMsg
,
SShowObj
*
pShow
,
char
*
data
,
int32_t
rows
)
{
SMnode
*
pMnode
=
pMsg
->
pMnode
;
SSdb
*
pSdb
=
pMnode
->
pSdb
;
int32_t
numOfRows
=
0
;
SStableObj
*
pStable
=
NULL
;
int32_t
cols
=
0
;
char
*
pWrite
;
char
prefix
[
64
]
=
{
0
};
tstrncpy
(
prefix
,
pShow
->
db
,
64
);
strcat
(
prefix
,
TS_PATH_DELIMITER
);
int32_t
prefixLen
=
(
int32_t
)
strlen
(
prefix
);
while
(
numOfRows
<
rows
)
{
pShow
->
pIter
=
sdbFetch
(
pSdb
,
SDB_STABLE
,
pShow
->
pIter
,
(
void
**
)
&
pStable
);
if
(
pShow
->
pIter
==
NULL
)
break
;
if
(
strncmp
(
pStable
->
name
,
prefix
,
prefixLen
)
!=
0
)
{
sdbRelease
(
pSdb
,
pStable
);
continue
;
}
cols
=
0
;
char
stableName
[
TSDB_TABLE_FNAME_LEN
]
=
{
0
};
memcpy
(
stableName
,
pStable
->
name
+
prefixLen
,
TSDB_TABLE_FNAME_LEN
-
prefixLen
);
pWrite
=
data
+
pShow
->
offset
[
cols
]
*
rows
+
pShow
->
bytes
[
cols
]
*
numOfRows
;
STR_TO_VARSTR
(
pWrite
,
stableName
);
cols
++
;
pWrite
=
data
+
pShow
->
offset
[
cols
]
*
rows
+
pShow
->
bytes
[
cols
]
*
numOfRows
;
*
(
int64_t
*
)
pWrite
=
pStable
->
createdTime
;
cols
++
;
pWrite
=
data
+
pShow
->
offset
[
cols
]
*
rows
+
pShow
->
bytes
[
cols
]
*
numOfRows
;
*
(
int16_t
*
)
pWrite
=
pStable
->
numOfFields
;
cols
++
;
pWrite
=
data
+
pShow
->
offset
[
cols
]
*
rows
+
pShow
->
bytes
[
cols
]
*
numOfRows
;
*
(
int16_t
*
)
pWrite
=
pStable
->
numOfTags
;
cols
++
;
numOfRows
++
;
sdbRelease
(
pSdb
,
pStable
);
}
pShow
->
numOfReads
+=
numOfRows
;
mnodeVacuumResult
(
data
,
pShow
->
numOfColumns
,
numOfRows
,
rows
,
pShow
);
return
numOfRows
;
}
static
void
mndCancelGetNextStable
(
SMnode
*
pMnode
,
void
*
pIter
)
{
SSdb
*
pSdb
=
pMnode
->
pSdb
;
sdbCancelFetch
(
pSdb
,
pIter
);
}
\ No newline at end of file
source/dnode/mnode/impl/src/mndVgroup.c
浏览文件 @
c0692a3e
...
...
@@ -161,8 +161,15 @@ void mndReleaseVgroup(SMnode *pMnode, SVgObj *pVgroup) {
sdbRelease
(
pSdb
,
pVgroup
);
}
static
void
mndGetVgroupMaxReplica
(
SMnode
*
pMnode
,
char
*
dbName
,
int8_t
*
pReplica
,
int32_t
*
pNumOfVgroups
)
{
SSdb
*
pSdb
=
pMnode
->
pSdb
;
static
int32_t
mndGetVgroupMaxReplica
(
SMnode
*
pMnode
,
char
*
dbName
,
int8_t
*
pReplica
,
int32_t
*
pNumOfVgroups
)
{
SSdb
*
pSdb
=
pMnode
->
pSdb
;
SDbObj
*
pDb
=
mndAcquireDb
(
pMnode
,
dbName
);
if
(
pDb
==
NULL
)
{
terrno
=
TSDB_CODE_MND_DB_NOT_SELECTED
;
return
-
1
;
}
int8_t
replica
=
1
;
int32_t
numOfVgroups
=
0
;
...
...
@@ -182,13 +189,16 @@ static void mndGetVgroupMaxReplica(SMnode *pMnode, char *dbName, int8_t *pReplic
*
pReplica
=
replica
;
*
pNumOfVgroups
=
numOfVgroups
;
return
0
;
}
static
int32_t
mndGetVgroupMeta
(
SMnodeMsg
*
pMsg
,
SShowObj
*
pShow
,
STableMetaMsg
*
pMeta
)
{
SMnode
*
pMnode
=
pMsg
->
pMnode
;
SSdb
*
pSdb
=
pMnode
->
pSdb
;
mndGetVgroupMaxReplica
(
pMnode
,
pShow
->
db
,
&
pShow
->
replica
,
&
pShow
->
numOfRows
);
if
(
mndGetVgroupMaxReplica
(
pMnode
,
pShow
->
db
,
&
pShow
->
replica
,
&
pShow
->
numOfRows
)
!=
0
)
{
return
-
1
;
}
int32_t
cols
=
0
;
SSchema
*
pSchema
=
pMeta
->
schema
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录