Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
a32dd76b
T
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1185
Star
22016
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看板
提交
a32dd76b
编写于
5月 28, 2022
作者:
H
Hongze Cheng
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat: optimize tag
上级
e890ec69
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
48 addition
and
16 deletion
+48
-16
source/common/src/tdataformat.c
source/common/src/tdataformat.c
+48
-16
未找到文件。
source/common/src/tdataformat.c
浏览文件 @
a32dd76b
...
...
@@ -32,12 +32,14 @@ typedef struct {
#pragma pack(pop)
#pragma pack(push, 1)
#define TD_TAG_JSON ((int8_t)0x1)
#define TD_TAG_LARGE ((int8_t)0x2)
struct
STag
{
int8_t
isJson
;
int8_t
flags
;
int16_t
len
;
int16_t
nTag
;
int32_t
ver
;
int
16_t
idx
[];
int
8_t
idx
[];
};
#pragma pack(pop)
...
...
@@ -525,7 +527,6 @@ static int tTagValCmprFn(const void *p1, const void *p2) {
return
1
;
}
ASSERT
(
0
);
return
0
;
}
static
int
tTagValJsonCmprFn
(
const
void
*
p1
,
const
void
*
p2
)
{
...
...
@@ -584,7 +585,8 @@ int32_t tTagNew(SArray *pArray, int32_t version, int8_t isJson, STag **ppTag) {
uint8_t
*
p
=
NULL
;
int16_t
n
=
0
;
int16_t
nTag
=
taosArrayGetSize
(
pArray
);
int32_t
szTag
=
sizeof
(
STag
)
+
sizeof
(
int16_t
)
*
nTag
;
int32_t
szTag
=
0
;
int8_t
isLarge
=
0
;
// sort
if
(
isJson
)
{
...
...
@@ -597,12 +599,14 @@ int32_t tTagNew(SArray *pArray, int32_t version, int8_t isJson, STag **ppTag) {
for
(
int16_t
iTag
=
0
;
iTag
<
nTag
;
iTag
++
)
{
szTag
+=
tPutTagVal
(
NULL
,
(
STagVal
*
)
taosArrayGet
(
pArray
,
iTag
),
isJson
);
}
if
(
szTag
<=
INT8_MAX
)
{
szTag
=
szTag
+
sizeof
(
STag
)
+
sizeof
(
int8_t
)
*
nTag
;
}
else
{
szTag
=
szTag
+
sizeof
(
STag
)
+
sizeof
(
int16_t
)
*
nTag
;
isLarge
=
1
;
}
// TODO
// if (szTag >= 16 * 1024) {
// code = TSDB_CODE_IVLD_TAG;
// goto _err;
// }
ASSERT
(
szTag
<=
INT16_MAX
);
// build tag
(
*
ppTag
)
=
(
STag
*
)
taosMemoryMalloc
(
szTag
);
...
...
@@ -610,15 +614,29 @@ int32_t tTagNew(SArray *pArray, int32_t version, int8_t isJson, STag **ppTag) {
code
=
TSDB_CODE_OUT_OF_MEMORY
;
goto
_err
;
}
(
*
ppTag
)
->
isJson
=
isJson
?
1
:
0
;
(
*
ppTag
)
->
flags
=
0
;
if
(
isJson
)
{
(
*
ppTag
)
->
flags
|=
TD_TAG_JSON
;
}
if
(
isLarge
)
{
(
*
ppTag
)
->
flags
|=
TD_TAG_LARGE
;
}
(
*
ppTag
)
->
len
=
szTag
;
(
*
ppTag
)
->
nTag
=
nTag
;
(
*
ppTag
)
->
ver
=
version
;
p
=
(
uint8_t
*
)
&
(
*
ppTag
)
->
idx
[
nTag
];
if
(
isLarge
)
{
p
=
(
uint8_t
*
)
&
((
int16_t
*
)(
*
ppTag
)
->
idx
)[
nTag
];
}
else
{
p
=
(
uint8_t
*
)
&
(
*
ppTag
)
->
idx
[
nTag
];
}
n
=
0
;
for
(
int16_t
iTag
=
0
;
iTag
<
nTag
;
iTag
++
)
{
(
*
ppTag
)
->
idx
[
iTag
]
=
n
;
if
(
isLarge
)
{
((
int16_t
*
)(
*
ppTag
)
->
idx
)[
iTag
]
=
n
;
}
else
{
(
*
ppTag
)
->
idx
[
iTag
]
=
n
;
}
n
+=
tPutTagVal
(
p
+
n
,
(
STagVal
*
)
taosArrayGet
(
pArray
,
iTag
),
isJson
);
}
...
...
@@ -636,18 +654,32 @@ void tTagGet(STag *pTag, STagVal *pTagVal) {
int16_t
lidx
=
0
;
int16_t
ridx
=
pTag
->
nTag
-
1
;
int16_t
midx
;
uint8_t
*
p
=
(
uint8_t
*
)
&
pTag
->
idx
[
pTag
->
nTag
];
uint8_t
*
p
;
int8_t
isJson
=
pTag
->
flags
&
TD_TAG_JSON
;
int8_t
isLarge
=
pTag
->
flags
&
TD_TAG_LARGE
;
int16_t
offset
;
STagVal
tv
;
int
c
;
if
(
isLarge
)
{
p
=
(
uint8_t
*
)
&
((
int16_t
*
)
pTag
->
idx
)[
pTag
->
nTag
];
}
else
{
p
=
(
uint8_t
*
)
&
pTag
->
idx
[
pTag
->
nTag
];
}
pTagVal
->
type
=
TSDB_DATA_TYPE_NULL
;
pTagVal
->
pData
=
NULL
;
pTagVal
->
nData
=
0
;
while
(
lidx
<=
ridx
)
{
midx
=
(
lidx
+
ridx
)
/
2
;
if
(
isLarge
)
{
offset
=
((
int16_t
*
)
pTag
->
idx
)[
midx
];
}
else
{
offset
=
pTag
->
idx
[
midx
];
}
tGetTagVal
(
p
+
pTag
->
idx
[
midx
],
&
tv
,
pTag
->
isJson
);
if
(
pTag
->
isJson
)
{
tGetTagVal
(
p
+
offset
,
&
tv
,
isJson
);
if
(
isJson
)
{
c
=
tTagValJsonCmprFn
(
pTagVal
,
&
tv
);
}
else
{
c
=
tTagValCmprFn
(
pTagVal
,
&
tv
);
...
...
@@ -684,7 +716,7 @@ int32_t tTagToValArray(STag *pTag, SArray **ppArray) {
}
for
(
int16_t
iTag
=
0
;
iTag
<
pTag
->
nTag
;
iTag
++
)
{
tGetTagVal
(
p
+
pTag
->
idx
[
iTag
],
&
tv
,
pTag
->
isJson
);
tGetTagVal
(
p
+
pTag
->
idx
[
iTag
],
&
tv
,
pTag
->
flags
&
TD_TAG_JSON
);
taosArrayPush
(
*
ppArray
,
&
tv
);
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录