Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
095b91d1
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1185
Star
22016
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看板
提交
095b91d1
编写于
12月 06, 2022
作者:
dengyihao
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
dynamic change index
上级
ccdef511
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
102 addition
and
138 deletion
+102
-138
include/common/tmsg.h
include/common/tmsg.h
+1
-0
source/dnode/vnode/src/meta/metaTable.c
source/dnode/vnode/src/meta/metaTable.c
+101
-138
未找到文件。
include/common/tmsg.h
浏览文件 @
095b91d1
...
...
@@ -341,6 +341,7 @@ void tFreeSSubmitRsp(SSubmitRsp* pRsp);
#define COL_CLR_SET(FLG) ((FLG) &= (~(COL_SET_VAL | COL_SET_NULL)))
#define IS_BSMA_ON(s) (((s)->flags & 0x01) == COL_SMA_ON)
#define IS_INDX_ON(s) (((s)->flags & 0x2) == COL_IDX_ON)
#define SSCHMEA_TYPE(s) ((s)->type)
#define SSCHMEA_FLAGS(s) ((s)->flags)
...
...
source/dnode/vnode/src/meta/metaTable.c
浏览文件 @
095b91d1
...
...
@@ -1186,7 +1186,6 @@ static int metaUpdateTableOptions(SMeta *pMeta, int64_t version, SVAlterTbReq *p
}
static
int
metaAddTagIndex
(
SMeta
*
pMeta
,
int64_t
version
,
SVAlterTbReq
*
pAlterTbReq
)
{
SMetaEntry
ctbEntry
=
{
0
};
SMetaEntry
stbEntry
=
{
0
};
void
*
pVal
=
NULL
;
int
nVal
=
0
;
...
...
@@ -1229,21 +1228,18 @@ static int metaAddTagIndex(SMeta *pMeta, int64_t version, SVAlterTbReq *pAlterTb
goto
_err
;
}
// Get targe schema info
SSchemaWrapper
*
pTagSchema
=
&
stbEntry
.
stbEntry
.
schemaTag
;
if
(
pTagSchema
->
nCols
==
1
&&
pTagSchema
->
pSchema
[
0
].
type
==
TSDB_DATA_TYPE_JSON
)
{
terrno
=
TSDB_CODE_VND_COL_ALREADY_EXISTS
;
goto
_err
;
}
SSchema
*
pCol
=
NULL
;
int32_t
iCol
=
0
;
for
(;;)
{
pCol
=
NULL
;
if
(
iCol
>=
pTagSchema
->
nCols
)
break
;
pCol
=
&
pTagSchema
->
pSchema
[
iCol
];
if
(
strcmp
(
pCol
->
name
,
pAlterTbReq
->
tagName
)
==
0
)
break
;
iCol
++
;
}
...
...
@@ -1273,142 +1269,32 @@ static int metaAddTagIndex(SMeta *pMeta, int64_t version, SVAlterTbReq *pAlterTb
rc
=
tdbTbcNext
(
pCtbIdxc
,
&
pKey
,
&
nKey
,
&
pVal
,
&
nVal
);
if
(
rc
<
0
)
break
;
if
(((
SCtbIdxKey
*
)
pKey
)
->
suid
!=
uid
)
{
tdbFree
(
pKey
);
tdbFree
(
pVal
);
continue
;
}
STag
*
pTag
=
pVal
;
}
// search uid index
// TBC *pUidIdxc = NULL;
// tdbTbcOpen(pMeta->pUidIdx, &pUidIdxc, pMeta->txn);
// tdbTbcMoveTo(pUidIdxc, &uid, sizeof(uid), &c);
// ASSERT(c == 0);
// tdbTbcGet(pUidIdxc, NULL, NULL, &pData, &nData);
// oversion = ((SUidIdxVal *)pData)[0].version;
// search table.db
// TBC *pTbDbc = NULL;
// SDecoder dc1 = {0};
// SDecoder dc2 = {0};
///* get ctbEntry */
// tdbTbcOpen(pMeta->pTbDb, &pTbDbc, pMeta->txn);
// tdbTbcMoveTo(pTbDbc, &((STbDbKey){.uid = uid, .version = oversion}), sizeof(STbDbKey), &c);
// ASSERT(c == 0);
// tdbTbcGet(pTbDbc, NULL, NULL, &pData, &nData);
STagIdxKey
*
pTagIdxKey
=
NULL
;
int32_t
nTagIdxKey
;
// ctbEntry.pBuf = taosMemoryMalloc(nData);
// memcpy(ctbEntry.pBuf, pData, nData);
// tDecoderInit(&dc1, ctbEntry.pBuf, nData);
// metaDecodeEntry(&dc1, &ctbEntry);
const
void
*
pTagData
=
NULL
;
int32_t
nTagData
=
0
;
/* get stbEntry*/
// tdbTbGet(pMeta->pUidIdx, &ctbEntry.ctbEntry.suid, sizeof(tb_uid_t), &pVal, &nVal);
// if (!pVal) {
// terrno = TSDB_CODE_INVALID_MSG;
// goto _err;
// }
// tdbTbGet(pMeta->pTbDb, &((STbDbKey){.uid = ctbEntry.ctbEntry.suid, .version = ((SUidIdxVal *)pVal)[0].version}),
// sizeof(STbDbKey), (void **)&stbEntry.pBuf, &nVal);
// tdbFree(pVal);
// tDecoderInit(&dc2, stbEntry.pBuf, nVal);
// metaDecodeEntry(&dc2, &stbEntry);
// SSchemaWrapper *pTagSchema = &stbEntry.stbEntry.schemaTag;
// SSchema *pColumn = NULL;
// int32_t iCol = 0;
// for (;;) {
// pColumn = NULL;
// if (iCol >= pTagSchema->nCols) break;
// pColumn = &pTagSchema->pSchema[iCol];
// if (strcmp(pColumn->name, pAlterTbReq->tagName) == 0) break;
// iCol++;
//}
// if (pColumn == NULL) {
// terrno = TSDB_CODE_VND_COL_NOT_EXISTS;
// goto _err;
// }
// ctbEntry.version = version;
// if (pTagSchema->nCols == 1 && pTagSchema->pSchema[0].type == TSDB_DATA_TYPE_JSON) {
// terrno = TSDB_CODE_INVALID_MSG;
// goto _err;
// }
// const STag *pOldTag = (const STag *)ctbEntry.ctbEntry.pTags;
// STag *pNewTag = NULL;
// SArray *pTagArray = taosArrayInit(pTagSchema->nCols, sizeof(STagVal));
// if (!pTagArray) {
// terrno = TSDB_CODE_OUT_OF_MEMORY;
// goto _err;
// }
// for (int32_t i = 0; i < pTagSchema->nCols; i++) {
// SSchema *pCol = &pTagSchema->pSchema[i];
// if (iCol == i) {
// if (pAlterTbReq->isNull) {
// continue;
// }
// STagVal val = {0};
// val.type = pCol->type;
// val.cid = pCol->colId;
// if (IS_VAR_DATA_TYPE(pCol->type)) {
// val.pData = pAlterTbReq->pTagVal;
// val.nData = pAlterTbReq->nTagVal;
// } else {
// memcpy(&val.i64, pAlterTbReq->pTagVal, pAlterTbReq->nTagVal);
// }
// taosArrayPush(pTagArray, &val);
// } else {
// STagVal val = {.cid = pCol->colId};
// if (tTagGet(pOldTag, &val)) {
// taosArrayPush(pTagArray, &val);
// }
// }
// }
// if ((terrno = tTagNew(pTagArray, pTagSchema->version, false, &pNewTag)) < 0) {
// taosArrayDestroy(pTagArray);
// goto _err;
// }
// ctbEntry.ctbEntry.pTags = (uint8_t *)pNewTag;
// taosArrayDestroy(pTagArray);
// metaWLock(pMeta);
// save to table.db
// metaSaveToTbDb(pMeta, &ctbEntry);
// save to uid.idx
// metaUpdateUidIdx(pMeta, &ctbEntry);
// if (iCol == 0) {
// metaUpdateTagIdx(pMeta, &ctbEntry);
// }
// ASSERT(ctbEntry.ctbEntry.pTags);
// SCtbIdxKey ctbIdxKey = {.suid = ctbEntry.ctbEntry.suid, .uid = uid};
// tdbTbUpsert(pMeta->pCtbIdx, &ctbIdxKey, sizeof(ctbIdxKey), ctbEntry.ctbEntry.pTags,
// ((STag *)(ctbEntry.ctbEntry.pTags))->len, pMeta->txn);
// metaUidCacheClear(pMeta, ctbEntry.ctbEntry.suid);
// metaULock(pMeta);
// tDecoderClear(&dc1);
// tDecoderClear(&dc2);
// taosMemoryFree((void *)ctbEntry.ctbEntry.pTags);
// if (ctbEntry.pBuf) taosMemoryFree(ctbEntry.pBuf);
// if (stbEntry.pBuf) tdbFree(stbEntry.pBuf);
// tdbTbcClose(pTbDbc);
// tdbTbcClose(pUidIdxc);
STagVal
tagVal
=
{.
cid
=
pCol
->
colId
};
tTagGet
((
const
STag
*
)
pVal
,
&
tagVal
);
if
(
IS_VAR_DATA_TYPE
(
pCol
->
type
))
{
pTagData
=
tagVal
.
pData
;
nTagData
=
(
int32_t
)
tagVal
.
nData
;
}
else
{
pTagData
=
&
(
tagVal
.
i64
);
nTagData
=
tDataTypes
[
pCol
->
type
].
bytes
;
}
if
(
metaCreateTagIdxKey
(
uid
,
pCol
->
colId
,
pTagData
,
nTagData
,
pCol
->
type
,
uid
,
&
pTagIdxKey
,
&
nTagIdxKey
)
<
0
)
{
metaDestroyTagIdxKey
(
pTagIdxKey
);
goto
_err
;
}
tdbTbUpsert
(
pMeta
->
pTagIdx
,
pTagIdxKey
,
nTagIdxKey
,
NULL
,
0
,
pMeta
->
txn
);
metaDestroyTagIdxKey
(
pTagIdxKey
);
}
return
0
;
_err:
...
...
@@ -1422,19 +1308,96 @@ _err:
}
static
int
metaDropTagIndex
(
SMeta
*
pMeta
,
int64_t
version
,
SVAlterTbReq
*
pAlterTbReq
)
{
SMetaEntry
ctbEntry
=
{
0
};
SMetaEntry
stbEntry
=
{
0
};
void
*
pVal
=
NULL
;
int
nVal
=
0
;
int
ret
;
int
c
;
tb_uid_t
uid
;
tb_uid_t
s
uid
;
int64_t
oversion
;
const
void
*
pData
=
NULL
;
int
nData
=
0
;
SDecoder
dc
=
{
0
};
if
(
pAlterTbReq
->
tagName
==
NULL
)
{
terrno
=
TSDB_CODE_INVALID_MSG
;
return
-
1
;
}
// search name index
ret
=
tdbTbGet
(
pMeta
->
pNameIdx
,
pAlterTbReq
->
tbName
,
strlen
(
pAlterTbReq
->
tbName
)
+
1
,
&
pVal
,
&
nVal
);
if
(
ret
<
0
)
{
terrno
=
TSDB_CODE_TDB_TABLE_NOT_EXIST
;
return
-
1
;
}
suid
=
*
(
tb_uid_t
*
)
pVal
;
tdbFree
(
pVal
);
pVal
=
NULL
;
if
(
tdbTbGet
(
pMeta
->
pUidIdx
,
&
suid
,
sizeof
(
tb_uid_t
),
&
pVal
,
&
nVal
)
==
-
1
)
{
ret
=
-
1
;
goto
_err
;
}
STbDbKey
tbDbKey
=
{
0
};
tbDbKey
.
uid
=
suid
;
tbDbKey
.
version
=
((
SUidIdxVal
*
)
pVal
)[
0
].
version
;
tdbTbGet
(
pMeta
->
pTbDb
,
&
tbDbKey
,
sizeof
(
tbDbKey
),
&
pVal
,
&
nVal
);
tDecoderInit
(
&
dc
,
pVal
,
nVal
);
ret
=
metaDecodeEntry
(
&
dc
,
&
stbEntry
);
if
(
ret
<
0
)
{
goto
_err
;
}
// Get targe schema info
SSchemaWrapper
*
pTagSchema
=
&
stbEntry
.
stbEntry
.
schemaTag
;
if
(
pTagSchema
->
nCols
==
1
&&
pTagSchema
->
pSchema
[
0
].
type
==
TSDB_DATA_TYPE_JSON
)
{
terrno
=
TSDB_CODE_VND_COL_ALREADY_EXISTS
;
goto
_err
;
}
SSchema
*
pCol
=
NULL
;
int32_t
iCol
=
0
;
for
(;;)
{
pCol
=
NULL
;
if
(
iCol
>=
pTagSchema
->
nCols
)
break
;
pCol
=
&
pTagSchema
->
pSchema
[
iCol
];
if
(
strcmp
(
pCol
->
name
,
pAlterTbReq
->
tagName
)
==
0
)
break
;
iCol
++
;
}
if
(
iCol
==
0
)
{
// cannot drop 1th tag index
terrno
=
-
1
;
goto
_err
;
}
if
(
pCol
==
NULL
)
{
terrno
=
TSDB_CODE_VND_COL_NOT_EXISTS
;
goto
_err
;
}
SArray
*
tagIdxList
=
taosArrayInit
(
512
,
sizeof
(
STagIdxKey
*
));
TBC
*
pTagIdxc
=
NULL
;
tdbTbcOpen
(
pMeta
->
pTagIdx
,
&
pTagIdxc
,
NULL
);
int
rc
=
tdbTbcMoveTo
(
pTagIdxc
,
&
(
STagIdxKey
){.
suid
=
suid
,
.
cid
=
INT32_MIN
,
.
type
=
pCol
->
type
},
sizeof
(
STagIdxKey
),
&
c
);
for
(;;)
{
void
*
pKey
,
*
pVal
;
int
nKey
,
nVal
;
rc
=
tdbTbcNext
(
pTagIdxc
,
&
pKey
,
&
nKey
,
&
pVal
,
&
nVal
);
STagIdxKey
*
pIdxKey
=
(
STagIdxKey
*
)
pKey
;
if
(
pIdxKey
->
suid
!=
suid
)
{
tdbFree
(
pKey
);
tdbFree
(
pVal
);
continue
;
}
taosArrayPush
(
tagIdxList
,
&
pIdxKey
);
}
tdbTbcClose
(
pTagIdxc
);
// drop index
return
0
;
_err:
return
-
1
;
}
int
metaAlterTable
(
SMeta
*
pMeta
,
int64_t
version
,
SVAlterTbReq
*
pReq
,
STableMetaRsp
*
pMetaRsp
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录