Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
慢慢CG
TDengine
提交
b666ed8f
T
TDengine
项目概览
慢慢CG
/
TDengine
与 Fork 源项目一致
Fork自
taosdata / TDengine
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
b666ed8f
编写于
3月 14, 2021
作者:
S
Shengliang Guan
提交者:
GitHub
3月 14, 2021
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #5428 from taosdata/feature/TD-3282
add table tag value check in TSDB
上级
3983f14e
776d9326
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
26 addition
and
4 deletion
+26
-4
src/inc/taoserror.h
src/inc/taoserror.h
+1
-0
src/tsdb/src/tsdbMeta.c
src/tsdb/src/tsdbMeta.c
+25
-4
未找到文件。
src/inc/taoserror.h
浏览文件 @
b666ed8f
...
...
@@ -238,6 +238,7 @@ int32_t* taosGetErrno();
#define TSDB_CODE_TDB_IVD_CREATE_TABLE_INFO TAOS_DEF_ERROR_CODE(0, 0x0612) //"Invalid information to create table")
#define TSDB_CODE_TDB_NO_AVAIL_DISK TAOS_DEF_ERROR_CODE(0, 0x0613) //"No available disk")
#define TSDB_CODE_TDB_MESSED_MSG TAOS_DEF_ERROR_CODE(0, 0x0614) //"TSDB messed message")
#define TSDB_CODE_TDB_IVLD_TAG_VAL TAOS_DEF_ERROR_CODE(0, 0x0615) //"TSDB invalid tag value")
// query
#define TSDB_CODE_QRY_INVALID_QHANDLE TAOS_DEF_ERROR_CODE(0, 0x0700) //"Invalid handle")
...
...
src/tsdb/src/tsdbMeta.c
浏览文件 @
b666ed8f
...
...
@@ -20,7 +20,7 @@
static
int
tsdbCompareSchemaVersion
(
const
void
*
key1
,
const
void
*
key2
);
static
char
*
getTagIndexKey
(
const
void
*
pData
);
static
STable
*
tsdbNewTable
();
static
STable
*
tsdbCreateTableFromCfg
(
STableCfg
*
pCfg
,
bool
isSuper
);
static
STable
*
tsdbCreateTableFromCfg
(
STableCfg
*
pCfg
,
bool
isSuper
,
STable
*
pSTable
);
static
void
tsdbFreeTable
(
STable
*
pTable
);
static
int
tsdbAddTableToMeta
(
STsdbRepo
*
pRepo
,
STable
*
pTable
,
bool
addIdx
,
bool
lock
);
static
void
tsdbRemoveTableFromMeta
(
STsdbRepo
*
pRepo
,
STable
*
pTable
,
bool
rmFromIdx
,
bool
lock
);
...
...
@@ -43,6 +43,7 @@ static void * tsdbInsertTableAct(STsdbRepo *pRepo, int8_t act, void *buf, STabl
static
int
tsdbRemoveTableFromStore
(
STsdbRepo
*
pRepo
,
STable
*
pTable
);
static
int
tsdbRmTableFromMeta
(
STsdbRepo
*
pRepo
,
STable
*
pTable
);
static
int
tsdbAdjustMetaTables
(
STsdbRepo
*
pRepo
,
int
tid
);
static
int
tsdbCheckTableTagVal
(
SKVRow
*
pKVRow
,
STSchema
*
pSchema
);
// ------------------ OUTER FUNCTIONS ------------------
int
tsdbCreateTable
(
STsdbRepo
*
repo
,
STableCfg
*
pCfg
)
{
...
...
@@ -87,7 +88,7 @@ int tsdbCreateTable(STsdbRepo *repo, STableCfg *pCfg) {
super
=
tsdbGetTableByUid
(
pMeta
,
pCfg
->
superUid
);
if
(
super
==
NULL
)
{
// super table not exists, try to create it
newSuper
=
true
;
super
=
tsdbCreateTableFromCfg
(
pCfg
,
true
);
super
=
tsdbCreateTableFromCfg
(
pCfg
,
true
,
NULL
);
if
(
super
==
NULL
)
goto
_err
;
}
else
{
if
(
TABLE_TYPE
(
super
)
!=
TSDB_SUPER_TABLE
||
TABLE_UID
(
super
)
!=
pCfg
->
superUid
)
{
...
...
@@ -108,7 +109,7 @@ int tsdbCreateTable(STsdbRepo *repo, STableCfg *pCfg) {
}
}
table
=
tsdbCreateTableFromCfg
(
pCfg
,
false
);
table
=
tsdbCreateTableFromCfg
(
pCfg
,
false
,
super
);
if
(
table
==
NULL
)
goto
_err
;
// Register to meta
...
...
@@ -674,7 +675,7 @@ static STable *tsdbNewTable() {
return
pTable
;
}
static
STable
*
tsdbCreateTableFromCfg
(
STableCfg
*
pCfg
,
bool
isSuper
)
{
static
STable
*
tsdbCreateTableFromCfg
(
STableCfg
*
pCfg
,
bool
isSuper
,
STable
*
pSTable
)
{
STable
*
pTable
=
NULL
;
size_t
tsize
=
0
;
...
...
@@ -726,6 +727,9 @@ static STable *tsdbCreateTableFromCfg(STableCfg *pCfg, bool isSuper) {
if
(
pCfg
->
type
==
TSDB_CHILD_TABLE
)
{
TABLE_SUID
(
pTable
)
=
pCfg
->
superUid
;
if
(
tsdbCheckTableTagVal
(
pCfg
->
tagValues
,
pSTable
->
tagSchema
)
<
0
)
{
goto
_err
;
}
pTable
->
tagVal
=
tdKVRowDup
(
pCfg
->
tagValues
);
if
(
pTable
->
tagVal
==
NULL
)
{
terrno
=
TSDB_CODE_TDB_OUT_OF_MEMORY
;
...
...
@@ -1302,3 +1306,20 @@ static int tsdbAdjustMetaTables(STsdbRepo *pRepo, int tid) {
return
0
;
}
static
int
tsdbCheckTableTagVal
(
SKVRow
*
pKVRow
,
STSchema
*
pSchema
)
{
for
(
size_t
i
=
0
;
i
<
kvRowNCols
(
pKVRow
);
i
++
)
{
SColIdx
*
pColIdx
=
kvRowColIdxAt
(
pKVRow
,
i
);
STColumn
*
pCol
=
tdGetColOfID
(
pSchema
,
pColIdx
->
colId
);
if
((
pCol
==
NULL
)
||
(
!
IS_VAR_DATA_TYPE
(
pCol
->
type
)))
continue
;
void
*
pValue
=
tdGetKVRowValOfCol
(
pKVRow
,
pCol
->
colId
);
if
(
varDataTLen
(
pValue
)
>
pCol
->
bytes
)
{
terrno
=
TSDB_CODE_TDB_IVLD_TAG_VAL
;
return
-
1
;
}
}
return
0
;
}
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录