Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
284acb1f
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看板
提交
284acb1f
编写于
12月 15, 2022
作者:
wmmhello
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
opti:json parser
上级
5ec92e7d
变更
3
显示空白变更内容
内联
并排
Showing
3 changed file
with
84 addition
and
3 deletion
+84
-3
source/client/inc/clientSml.h
source/client/inc/clientSml.h
+1
-0
source/client/src/clientSmlJson.c
source/client/src/clientSmlJson.c
+77
-2
source/client/test/smlTest.cpp
source/client/test/smlTest.cpp
+6
-1
未找到文件。
source/client/inc/clientSml.h
浏览文件 @
284acb1f
...
@@ -178,6 +178,7 @@ typedef struct {
...
@@ -178,6 +178,7 @@ typedef struct {
SSmlMsgBuf
msgBuf
;
SSmlMsgBuf
msgBuf
;
// cJSON *root; // for parse json
// cJSON *root; // for parse json
int8_t
offset
[
4
];
SSmlLineInfo
*
lines
;
// element is SSmlLineInfo
SSmlLineInfo
*
lines
;
// element is SSmlLineInfo
//
//
...
...
source/client/src/clientSmlJson.c
浏览文件 @
284acb1f
...
@@ -233,12 +233,19 @@ static char* smlJsonGetObj(char *payload){
...
@@ -233,12 +233,19 @@ static char* smlJsonGetObj(char *payload){
return
NULL
;
return
NULL
;
}
}
static
inline
void
smlJsonParseObj
(
char
**
start
,
SSmlLineInfo
*
element
){
static
inline
void
smlJsonParseObjFirst
(
char
**
start
,
SSmlLineInfo
*
element
,
int8_t
*
offset
){
int
index
=
0
;
while
(
*
(
*
start
)){
while
(
*
(
*
start
)){
if
((
*
start
)[
0
]
!=
'"'
){
if
((
*
start
)[
0
]
!=
'"'
){
(
*
start
)
++
;
(
*
start
)
++
;
continue
;
continue
;
}
}
if
(
unlikely
(
index
>=
4
))
{
uError
(
"index >= 4, %s"
,
*
start
)
break
;
}
char
*
sTmp
=
*
start
;
if
((
*
start
)[
1
]
==
'm'
&&
(
*
start
)[
2
]
==
'e'
&&
(
*
start
)[
3
]
==
't'
if
((
*
start
)[
1
]
==
'm'
&&
(
*
start
)[
2
]
==
'e'
&&
(
*
start
)[
3
]
==
't'
&&
(
*
start
)[
4
]
==
'r'
&&
(
*
start
)[
5
]
==
'i'
&&
(
*
start
)[
6
]
==
'c'
&&
(
*
start
)[
7
]
==
'"'
){
&&
(
*
start
)[
4
]
==
'r'
&&
(
*
start
)[
5
]
==
'i'
&&
(
*
start
)[
6
]
==
'c'
&&
(
*
start
)[
7
]
==
'"'
){
...
@@ -247,6 +254,7 @@ static inline void smlJsonParseObj(char **start, SSmlLineInfo *element){
...
@@ -247,6 +254,7 @@ static inline void smlJsonParseObj(char **start, SSmlLineInfo *element){
while
(
*
(
*
start
)){
while
(
*
(
*
start
)){
if
(
unlikely
(
!
isInQuote
&&
*
(
*
start
)
==
'"'
)){
if
(
unlikely
(
!
isInQuote
&&
*
(
*
start
)
==
'"'
)){
(
*
start
)
++
;
(
*
start
)
++
;
offset
[
index
++
]
=
*
start
-
sTmp
;
element
->
measure
=
(
*
start
);
element
->
measure
=
(
*
start
);
isInQuote
=
true
;
isInQuote
=
true
;
continue
;
continue
;
...
@@ -267,6 +275,7 @@ static inline void smlJsonParseObj(char **start, SSmlLineInfo *element){
...
@@ -267,6 +275,7 @@ static inline void smlJsonParseObj(char **start, SSmlLineInfo *element){
if
(
unlikely
(
!
hasColon
&&
*
(
*
start
)
==
':'
)){
if
(
unlikely
(
!
hasColon
&&
*
(
*
start
)
==
':'
)){
(
*
start
)
++
;
(
*
start
)
++
;
JUMP_JSON_SPACE
((
*
start
))
JUMP_JSON_SPACE
((
*
start
))
offset
[
index
++
]
=
*
start
-
sTmp
;
element
->
timestamp
=
(
*
start
);
element
->
timestamp
=
(
*
start
);
hasColon
=
true
;
hasColon
=
true
;
continue
;
continue
;
...
@@ -287,6 +296,7 @@ static inline void smlJsonParseObj(char **start, SSmlLineInfo *element){
...
@@ -287,6 +296,7 @@ static inline void smlJsonParseObj(char **start, SSmlLineInfo *element){
if
(
unlikely
(
!
hasColon
&&
*
(
*
start
)
==
':'
)){
if
(
unlikely
(
!
hasColon
&&
*
(
*
start
)
==
':'
)){
(
*
start
)
++
;
(
*
start
)
++
;
JUMP_JSON_SPACE
((
*
start
))
JUMP_JSON_SPACE
((
*
start
))
offset
[
index
++
]
=
*
start
-
sTmp
;
element
->
cols
=
(
*
start
);
element
->
cols
=
(
*
start
);
hasColon
=
true
;
hasColon
=
true
;
continue
;
continue
;
...
@@ -305,6 +315,7 @@ static inline void smlJsonParseObj(char **start, SSmlLineInfo *element){
...
@@ -305,6 +315,7 @@ static inline void smlJsonParseObj(char **start, SSmlLineInfo *element){
if
(
unlikely
(
*
(
*
start
)
==
':'
)){
if
(
unlikely
(
*
(
*
start
)
==
':'
)){
(
*
start
)
++
;
(
*
start
)
++
;
JUMP_JSON_SPACE
((
*
start
))
JUMP_JSON_SPACE
((
*
start
))
offset
[
index
++
]
=
*
start
-
sTmp
;
element
->
tags
=
(
*
start
);
element
->
tags
=
(
*
start
);
char
*
tmp
=
smlJsonGetObj
((
*
start
));
char
*
tmp
=
smlJsonGetObj
((
*
start
));
if
(
tmp
){
if
(
tmp
){
...
@@ -324,10 +335,74 @@ static inline void smlJsonParseObj(char **start, SSmlLineInfo *element){
...
@@ -324,10 +335,74 @@ static inline void smlJsonParseObj(char **start, SSmlLineInfo *element){
}
}
}
}
static
inline
void
smlJsonParseObj
(
char
**
start
,
SSmlLineInfo
*
element
,
int8_t
*
offset
){
int
index
=
0
;
while
(
*
(
*
start
)){
if
((
*
start
)[
0
]
!=
'"'
){
(
*
start
)
++
;
continue
;
}
if
(
unlikely
(
index
>=
4
))
{
uError
(
"index >= 4, %s"
,
*
start
)
break
;
}
if
((
*
start
)[
1
]
==
'm'
){
(
*
start
)
+=
offset
[
index
++
];
element
->
measure
=
*
start
;
while
(
*
(
*
start
)){
if
(
unlikely
(
*
(
*
start
)
==
'"'
)){
element
->
measureLen
=
(
*
start
)
-
element
->
measure
;
break
;
}
(
*
start
)
++
;
}
}
else
if
((
*
start
)[
1
]
==
't'
&&
(
*
start
)[
2
]
==
'i'
){
(
*
start
)
+=
offset
[
index
++
];
element
->
timestamp
=
*
start
;
while
(
*
(
*
start
)){
if
(
unlikely
(
*
(
*
start
)
==
','
||
*
(
*
start
)
==
'}'
||
(
*
(
*
start
))
<=
32
)){
element
->
timestampLen
=
(
*
start
)
-
element
->
timestamp
;
break
;
}
(
*
start
)
++
;
}
}
else
if
((
*
start
)[
1
]
==
'v'
){
(
*
start
)
+=
offset
[
index
++
];
element
->
cols
=
*
start
;
while
(
*
(
*
start
)){
if
(
unlikely
(
*
(
*
start
)
==
','
||
*
(
*
start
)
==
'}'
||
(
*
(
*
start
))
<=
32
)){
element
->
colsLen
=
(
*
start
)
-
element
->
cols
;
break
;
}
(
*
start
)
++
;
}
}
else
if
((
*
start
)[
1
]
==
't'
&&
(
*
start
)[
2
]
==
'a'
){
(
*
start
)
+=
offset
[
index
++
];
element
->
tags
=
(
*
start
);
char
*
tmp
=
smlJsonGetObj
((
*
start
));
if
(
tmp
){
element
->
tagsLen
=
tmp
-
(
*
start
);
*
start
=
tmp
;
}
break
;
}
if
(
*
(
*
start
)
==
'}'
){
(
*
start
)
++
;
break
;
}
(
*
start
)
++
;
}
}
static
int32_t
smlParseJSONString
(
SSmlHandle
*
info
,
char
**
start
,
SSmlLineInfo
*
elements
)
{
static
int32_t
smlParseJSONString
(
SSmlHandle
*
info
,
char
**
start
,
SSmlLineInfo
*
elements
)
{
int32_t
ret
=
TSDB_CODE_SUCCESS
;
int32_t
ret
=
TSDB_CODE_SUCCESS
;
smlJsonParseObj
(
start
,
elements
);
if
(
info
->
offset
[
0
]
==
0
){
smlJsonParseObjFirst
(
start
,
elements
,
info
->
offset
);
}
else
{
smlJsonParseObj
(
start
,
elements
,
info
->
offset
);
}
if
(
**
start
==
'\0'
)
return
TSDB_CODE_SUCCESS
;
if
(
**
start
==
'\0'
)
return
TSDB_CODE_SUCCESS
;
SSmlKv
kv
=
{.
key
=
VALUE
,
.
keyLen
=
VALUE_LEN
,
.
value
=
elements
->
cols
,
.
length
=
(
size_t
)
elements
->
colsLen
};
SSmlKv
kv
=
{.
key
=
VALUE
,
.
keyLen
=
VALUE_LEN
,
.
value
=
elements
->
cols
,
.
length
=
(
size_t
)
elements
->
colsLen
};
...
...
source/client/test/smlTest.cpp
浏览文件 @
284acb1f
...
@@ -497,9 +497,14 @@ TEST(testCase, smlParseTelnetLine_diff_json_type2_Test) {
...
@@ -497,9 +497,14 @@ TEST(testCase, smlParseTelnetLine_diff_json_type2_Test) {
};
};
for
(
int
i
=
0
;
i
<
sizeof
(
sql
)
/
sizeof
(
sql
[
0
]);
i
++
)
{
for
(
int
i
=
0
;
i
<
sizeof
(
sql
)
/
sizeof
(
sql
[
0
]);
i
++
)
{
char
*
dataPointStart
=
(
char
*
)
sql
[
i
];
char
*
dataPointStart
=
(
char
*
)
sql
[
i
];
int8_t
offset
[
4
]
=
{
0
};
while
(
1
)
{
while
(
1
)
{
SSmlLineInfo
elements
=
{
0
};
SSmlLineInfo
elements
=
{
0
};
smlJsonParseObj
(
&
dataPointStart
,
&
elements
);
if
(
offset
[
0
]
==
0
){
smlJsonParseObjFirst
(
&
dataPointStart
,
&
elements
,
offset
);
}
else
{
smlJsonParseObj
(
&
dataPointStart
,
&
elements
,
offset
);
}
if
(
*
dataPointStart
==
'\0'
)
break
;
if
(
*
dataPointStart
==
'\0'
)
break
;
SArray
*
tags
=
smlJsonParseTags
(
elements
.
tags
,
elements
.
tags
+
elements
.
tagsLen
);
SArray
*
tags
=
smlJsonParseTags
(
elements
.
tags
,
elements
.
tags
+
elements
.
tagsLen
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录