Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
11dbf0a0
T
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1185
Star
22017
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看板
提交
11dbf0a0
编写于
1月 02, 2023
作者:
wmmhello
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix:error in parse json
上级
3220ee9f
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
63 addition
and
96 deletion
+63
-96
source/client/inc/clientSml.h
source/client/inc/clientSml.h
+2
-1
source/client/src/clientSml.c
source/client/src/clientSml.c
+2
-0
source/client/src/clientSmlJson.c
source/client/src/clientSmlJson.c
+20
-15
source/client/src/clientSmlLine.c
source/client/src/clientSmlLine.c
+24
-68
source/client/src/clientSmlTelnet.c
source/client/src/clientSmlTelnet.c
+15
-12
未找到文件。
source/client/inc/clientSml.h
浏览文件 @
11dbf0a0
...
...
@@ -185,6 +185,7 @@ typedef struct {
//
SArray
*
preLineTagKV
;
SArray
*
maxTagKVs
;
SArray
*
preLineColKV
;
SSmlLineInfo
preLine
;
...
...
@@ -199,7 +200,7 @@ typedef struct {
#define IS_SAME_SUPER_TABLE (elements->measureLen == info->preLine.measureLen \
&& memcmp(elements->measure, info->preLine.measure, elements->measureLen) == 0)
#define IS_SAME_KEY (
preKV->keyLen == kv.keyLen && memcmp(pre
KV->key, kv.key, kv.keyLen) == 0)
#define IS_SAME_KEY (
maxKV->keyLen == kv.keyLen && memcmp(max
KV->key, kv.key, kv.keyLen) == 0)
extern
int64_t
smlFactorNS
[
3
];
extern
int64_t
smlFactorS
[
3
];
...
...
source/client/src/clientSml.c
浏览文件 @
11dbf0a0
...
...
@@ -1054,6 +1054,7 @@ void smlDestroyInfo(SSmlHandle *info) {
taosHashCleanup
(
info
->
pVgHash
);
taosArrayDestroy
(
info
->
preLineTagKV
);
taosArrayDestroy
(
info
->
maxTagKVs
);
taosArrayDestroy
(
info
->
preLineColKV
);
if
(
!
info
->
dataFormat
)
{
...
...
@@ -1090,6 +1091,7 @@ SSmlHandle *smlBuildSmlInfo(TAOS *taos) {
info
->
dataFormat
=
true
;
info
->
preLineTagKV
=
taosArrayInit
(
8
,
sizeof
(
SSmlKv
));
info
->
maxTagKVs
=
taosArrayInit
(
8
,
sizeof
(
SSmlKv
));
info
->
preLineColKV
=
taosArrayInit
(
8
,
sizeof
(
SSmlKv
));
if
(
NULL
==
info
->
pVgHash
)
{
...
...
source/client/src/clientSmlJson.c
浏览文件 @
11dbf0a0
...
...
@@ -429,9 +429,8 @@ static inline int32_t smlParseMetricFromJSON(SSmlHandle *info, cJSON *metric, SS
const
char
*
jsonName
[
OTD_JSON_FIELDS_NUM
]
=
{
"metric"
,
"timestamp"
,
"value"
,
"tags"
};
static
int32_t
smlGetJsonElements
(
cJSON
*
root
,
cJSON
***
marks
){
cJSON
*
child
=
root
->
child
;
for
(
int
i
=
0
;
i
<
OTD_JSON_FIELDS_NUM
;
++
i
)
{
cJSON
*
child
=
root
->
child
;
while
(
child
!=
NULL
)
{
if
(
strcasecmp
(
child
->
string
,
jsonName
[
i
])
==
0
){
...
...
@@ -441,7 +440,7 @@ static int32_t smlGetJsonElements(cJSON *root, cJSON ***marks){
child
=
child
->
next
;
}
if
(
*
marks
[
i
]
==
NULL
){
uError
(
"smlGetJsonElements error, not find mark:%
s"
,
jsonName
[
i
]);
uError
(
"smlGetJsonElements error, not find mark:%
d:%s"
,
i
,
jsonName
[
i
]);
return
-
1
;
}
}
...
...
@@ -648,6 +647,7 @@ static int32_t smlParseTagsFromJSON(SSmlHandle *info, cJSON *tags, SSmlLineInfo
int
cnt
=
0
;
SArray
*
preLineKV
=
info
->
preLineTagKV
;
SArray
*
maxKVs
=
info
->
maxTagKVs
;
bool
isSuperKVInit
=
true
;
SArray
*
superKV
=
NULL
;
if
(
info
->
dataFormat
){
...
...
@@ -671,11 +671,12 @@ static int32_t smlParseTagsFromJSON(SSmlHandle *info, cJSON *tags, SSmlLineInfo
if
(
unlikely
(
taosArrayGetSize
(
superKV
)
==
0
)){
isSuperKVInit
=
false
;
}
taosArraySetSize
(
preLineKV
,
0
);
taosArraySetSize
(
maxKVs
,
0
);
}
}
else
{
taosArraySetSize
(
preLineKV
,
0
);
taosArraySetSize
(
maxKVs
,
0
);
}
taosArraySetSize
(
preLineKV
,
0
);
int32_t
tagNum
=
cJSON_GetArraySize
(
tags
);
if
(
unlikely
(
tagNum
==
0
)){
...
...
@@ -710,14 +711,14 @@ static int32_t smlParseTagsFromJSON(SSmlHandle *info, cJSON *tags, SSmlLineInfo
}
if
(
isSameMeasure
){
if
(
unlikely
(
cnt
>=
taosArrayGetSize
(
preLineKV
)))
{
if
(
unlikely
(
cnt
>=
taosArrayGetSize
(
maxKVs
)))
{
info
->
dataFormat
=
false
;
info
->
reRun
=
true
;
return
TSDB_CODE_SUCCESS
;
}
SSmlKv
*
preKV
=
(
SSmlKv
*
)
taosArrayGet
(
preLineKV
,
cnt
);
if
(
unlikely
(
kv
.
length
>
pre
KV
->
length
)){
pre
KV
->
length
=
kv
.
length
;
SSmlKv
*
maxKV
=
(
SSmlKv
*
)
taosArrayGet
(
maxKVs
,
cnt
);
if
(
unlikely
(
kv
.
length
>
max
KV
->
length
)){
max
KV
->
length
=
kv
.
length
;
SSmlSTableMeta
*
tableMeta
=
(
SSmlSTableMeta
*
)
nodeListGet
(
info
->
superTables
,
elements
->
measure
,
elements
->
measureLen
,
NULL
);
ASSERT
(
tableMeta
!=
NULL
);
...
...
@@ -737,11 +738,11 @@ static int32_t smlParseTagsFromJSON(SSmlHandle *info, cJSON *tags, SSmlLineInfo
info
->
reRun
=
true
;
return
TSDB_CODE_SUCCESS
;
}
SSmlKv
*
pre
KV
=
(
SSmlKv
*
)
taosArrayGet
(
superKV
,
cnt
);
if
(
unlikely
(
kv
.
length
>
pre
KV
->
length
))
{
pre
KV
->
length
=
kv
.
length
;
SSmlKv
*
max
KV
=
(
SSmlKv
*
)
taosArrayGet
(
superKV
,
cnt
);
if
(
unlikely
(
kv
.
length
>
max
KV
->
length
))
{
max
KV
->
length
=
kv
.
length
;
}
else
{
kv
.
length
=
pre
KV
->
length
;
kv
.
length
=
max
KV
->
length
;
}
info
->
needModifySchema
=
true
;
...
...
@@ -753,11 +754,12 @@ static int32_t smlParseTagsFromJSON(SSmlHandle *info, cJSON *tags, SSmlLineInfo
}
else
{
taosArrayPush
(
superKV
,
&
kv
);
}
taosArrayPush
(
preLineKV
,
&
kv
);
taosArrayPush
(
maxKVs
,
&
kv
);
}
}
else
{
taosArrayPush
(
preLineKV
,
&
kv
);
taosArrayPush
(
maxKVs
,
&
kv
);
}
taosArrayPush
(
preLineKV
,
&
kv
);
cnt
++
;
}
...
...
@@ -921,6 +923,9 @@ static int32_t smlParseJSONStringExt(SSmlHandle *info, cJSON *root, SSmlLineInfo
cJSON
*
tsJson
=
NULL
;
cJSON
*
valueJson
=
NULL
;
cJSON
*
tagsJson
=
NULL
;
char
*
rootStr
=
cJSON_PrintUnformatted
(
root
);
uError
(
"rootStr:%s"
,
rootStr
);
taosMemoryFree
(
rootStr
);
int32_t
size
=
cJSON_GetArraySize
(
root
);
// outmost json fields has to be exactly 4
...
...
source/client/src/clientSmlLine.c
浏览文件 @
11dbf0a0
...
...
@@ -57,52 +57,6 @@ uint8_t smlPrecisionConvert[7] = {TSDB_TIME_PRECISION_NANO, TSDB_TIME_PRECISION_
TSDB_TIME_PRECISION_SECONDS
,
TSDB_TIME_PRECISION_MILLI
,
TSDB_TIME_PRECISION_MICRO
,
TSDB_TIME_PRECISION_NANO
};
static
bool
smlParseBool
(
SSmlKv
*
kvVal
)
{
const
char
*
pVal
=
kvVal
->
value
;
int32_t
len
=
kvVal
->
length
;
if
((
len
==
1
)
&&
(
pVal
[
0
]
==
't'
||
pVal
[
0
]
==
'T'
))
{
kvVal
->
i
=
TSDB_TRUE
;
return
true
;
}
if
((
len
==
1
)
&&
(
pVal
[
0
]
==
'f'
||
pVal
[
0
]
==
'F'
))
{
kvVal
->
i
=
TSDB_FALSE
;
return
true
;
}
if
((
len
==
4
)
&&
!
strncasecmp
(
pVal
,
"true"
,
len
))
{
kvVal
->
i
=
TSDB_TRUE
;
return
true
;
}
if
((
len
==
5
)
&&
!
strncasecmp
(
pVal
,
"false"
,
len
))
{
kvVal
->
i
=
TSDB_FALSE
;
return
true
;
}
return
false
;
}
static
bool
smlIsBinary
(
const
char
*
pVal
,
uint16_t
len
)
{
// binary: "abc"
if
(
len
<
2
)
{
return
false
;
}
if
(
pVal
[
0
]
==
'"'
&&
pVal
[
len
-
1
]
==
'"'
)
{
return
true
;
}
return
false
;
}
static
bool
smlIsNchar
(
const
char
*
pVal
,
uint16_t
len
)
{
// nchar: L"abc"
if
(
len
<
3
)
{
return
false
;
}
if
(
pVal
[
1
]
==
'"'
&&
pVal
[
len
-
1
]
==
'"'
&&
(
pVal
[
0
]
==
'l'
||
pVal
[
0
]
==
'L'
))
{
return
true
;
}
return
false
;
}
static
int64_t
smlParseInfluxTime
(
SSmlHandle
*
info
,
const
char
*
data
,
int32_t
len
)
{
uint8_t
toPrecision
=
info
->
currSTableMeta
?
info
->
currSTableMeta
->
tableInfo
.
precision
:
TSDB_TIME_PRECISION_NANO
;
...
...
@@ -189,6 +143,7 @@ static int32_t smlParseTagKv(SSmlHandle *info, char **sql, char *sqlEnd,
int
cnt
=
0
;
SArray
*
preLineKV
=
info
->
preLineTagKV
;
SArray
*
maxKVs
=
info
->
maxTagKVs
;
bool
isSuperKVInit
=
true
;
SArray
*
superKV
=
NULL
;
if
(
info
->
dataFormat
){
...
...
@@ -212,12 +167,12 @@ static int32_t smlParseTagKv(SSmlHandle *info, char **sql, char *sqlEnd,
if
(
unlikely
(
taosArrayGetSize
(
superKV
)
==
0
)){
isSuperKVInit
=
false
;
}
taosArraySetSize
(
preLineKV
,
0
);
taosArraySetSize
(
maxKVs
,
0
);
}
}
else
{
taosArraySetSize
(
preLineKV
,
0
);
taosArraySetSize
(
maxKVs
,
0
);
}
taosArraySetSize
(
preLineKV
,
0
);
while
(
*
sql
<
sqlEnd
)
{
if
(
unlikely
(
IS_SPACE
(
*
sql
)))
{
...
...
@@ -295,14 +250,14 @@ static int32_t smlParseTagKv(SSmlHandle *info, char **sql, char *sqlEnd,
}
if
(
isSameMeasure
){
if
(
unlikely
(
cnt
>=
taosArrayGetSize
(
preLineKV
)))
{
if
(
unlikely
(
cnt
>=
taosArrayGetSize
(
maxKVs
)))
{
info
->
dataFormat
=
false
;
info
->
reRun
=
true
;
return
TSDB_CODE_SUCCESS
;
}
SSmlKv
*
preKV
=
(
SSmlKv
*
)
taosArrayGet
(
preLineKV
,
cnt
);
if
(
unlikely
(
kv
.
length
>
pre
KV
->
length
)){
pre
KV
->
length
=
kv
.
length
;
SSmlKv
*
maxKV
=
(
SSmlKv
*
)
taosArrayGet
(
maxKVs
,
cnt
);
if
(
unlikely
(
kv
.
length
>
max
KV
->
length
)){
max
KV
->
length
=
kv
.
length
;
SSmlSTableMeta
*
tableMeta
=
(
SSmlSTableMeta
*
)
nodeListGet
(
info
->
superTables
,
currElement
->
measure
,
currElement
->
measureLen
,
NULL
);
ASSERT
(
tableMeta
!=
NULL
);
...
...
@@ -322,11 +277,11 @@ static int32_t smlParseTagKv(SSmlHandle *info, char **sql, char *sqlEnd,
info
->
reRun
=
true
;
return
TSDB_CODE_SUCCESS
;
}
SSmlKv
*
pre
KV
=
(
SSmlKv
*
)
taosArrayGet
(
superKV
,
cnt
);
if
(
unlikely
(
kv
.
length
>
pre
KV
->
length
))
{
pre
KV
->
length
=
kv
.
length
;
SSmlKv
*
max
KV
=
(
SSmlKv
*
)
taosArrayGet
(
superKV
,
cnt
);
if
(
unlikely
(
kv
.
length
>
max
KV
->
length
))
{
max
KV
->
length
=
kv
.
length
;
}
else
{
kv
.
length
=
pre
KV
->
length
;
kv
.
length
=
max
KV
->
length
;
}
info
->
needModifySchema
=
true
;
...
...
@@ -338,11 +293,12 @@ static int32_t smlParseTagKv(SSmlHandle *info, char **sql, char *sqlEnd,
}
else
{
taosArrayPush
(
superKV
,
&
kv
);
}
taosArrayPush
(
preLineKV
,
&
kv
);
taosArrayPush
(
maxKVs
,
&
kv
);
}
}
else
{
taosArrayPush
(
preLineKV
,
&
kv
);
taosArrayPush
(
maxKVs
,
&
kv
);
}
taosArrayPush
(
preLineKV
,
&
kv
);
cnt
++
;
if
(
IS_SPACE
(
*
sql
)){
...
...
@@ -518,15 +474,15 @@ static int32_t smlParseColKv(SSmlHandle *info, char **sql, char *sqlEnd,
info
->
reRun
=
true
;
return
TSDB_CODE_SUCCESS
;
}
SSmlKv
*
pre
KV
=
(
SSmlKv
*
)
taosArrayGet
(
preLineKV
,
cnt
);
if
(
kv
.
type
!=
pre
KV
->
type
){
SSmlKv
*
max
KV
=
(
SSmlKv
*
)
taosArrayGet
(
preLineKV
,
cnt
);
if
(
kv
.
type
!=
max
KV
->
type
){
info
->
dataFormat
=
false
;
info
->
reRun
=
true
;
return
TSDB_CODE_SUCCESS
;
}
if
(
unlikely
(
IS_VAR_DATA_TYPE
(
kv
.
type
)
&&
kv
.
length
>
pre
KV
->
length
)){
pre
KV
->
length
=
kv
.
length
;
if
(
unlikely
(
IS_VAR_DATA_TYPE
(
kv
.
type
)
&&
kv
.
length
>
max
KV
->
length
)){
max
KV
->
length
=
kv
.
length
;
SSmlSTableMeta
*
tableMeta
=
(
SSmlSTableMeta
*
)
nodeListGet
(
info
->
superTables
,
currElement
->
measure
,
currElement
->
measureLen
,
NULL
);
ASSERT
(
tableMeta
!=
NULL
);
...
...
@@ -546,18 +502,18 @@ static int32_t smlParseColKv(SSmlHandle *info, char **sql, char *sqlEnd,
info
->
reRun
=
true
;
return
TSDB_CODE_SUCCESS
;
}
SSmlKv
*
pre
KV
=
(
SSmlKv
*
)
taosArrayGet
(
superKV
,
cnt
);
if
(
unlikely
(
kv
.
type
!=
pre
KV
->
type
)){
SSmlKv
*
max
KV
=
(
SSmlKv
*
)
taosArrayGet
(
superKV
,
cnt
);
if
(
unlikely
(
kv
.
type
!=
max
KV
->
type
)){
info
->
dataFormat
=
false
;
info
->
reRun
=
true
;
return
TSDB_CODE_SUCCESS
;
}
if
(
IS_VAR_DATA_TYPE
(
kv
.
type
)){
if
(
kv
.
length
>
pre
KV
->
length
)
{
pre
KV
->
length
=
kv
.
length
;
if
(
kv
.
length
>
max
KV
->
length
)
{
max
KV
->
length
=
kv
.
length
;
}
else
{
kv
.
length
=
pre
KV
->
length
;
kv
.
length
=
max
KV
->
length
;
}
info
->
needModifySchema
=
true
;
}
...
...
source/client/src/clientSmlTelnet.c
浏览文件 @
11dbf0a0
...
...
@@ -73,6 +73,7 @@ static int32_t smlParseTelnetTags(SSmlHandle *info, char *data, char *sqlEnd, SS
int
cnt
=
0
;
SArray
*
preLineKV
=
info
->
preLineTagKV
;
SArray
*
maxKVs
=
info
->
maxTagKVs
;
bool
isSuperKVInit
=
true
;
SArray
*
superKV
=
NULL
;
if
(
info
->
dataFormat
){
...
...
@@ -96,12 +97,13 @@ static int32_t smlParseTelnetTags(SSmlHandle *info, char *data, char *sqlEnd, SS
if
(
unlikely
(
taosArrayGetSize
(
superKV
)
==
0
)){
isSuperKVInit
=
false
;
}
taosArraySetSize
(
preLineKV
,
0
);
taosArraySetSize
(
maxKVs
,
0
);
}
}
else
{
taosArraySetSize
(
preLineKV
,
0
);
taosArraySetSize
(
maxKVs
,
0
);
}
taosArraySetSize
(
preLineKV
,
0
);
const
char
*
sql
=
data
;
while
(
sql
<
sqlEnd
)
{
JUMP_SPACE
(
sql
,
sqlEnd
)
...
...
@@ -168,14 +170,14 @@ static int32_t smlParseTelnetTags(SSmlHandle *info, char *data, char *sqlEnd, SS
}
if
(
isSameMeasure
){
if
(
unlikely
(
cnt
>=
taosArrayGetSize
(
preLineKV
)))
{
if
(
unlikely
(
cnt
>=
taosArrayGetSize
(
maxKVs
)))
{
info
->
dataFormat
=
false
;
info
->
reRun
=
true
;
return
TSDB_CODE_SUCCESS
;
}
SSmlKv
*
preKV
=
(
SSmlKv
*
)
taosArrayGet
(
preLineKV
,
cnt
);
if
(
unlikely
(
kv
.
length
>
pre
KV
->
length
)){
pre
KV
->
length
=
kv
.
length
;
SSmlKv
*
maxKV
=
(
SSmlKv
*
)
taosArrayGet
(
maxKVs
,
cnt
);
if
(
unlikely
(
kv
.
length
>
max
KV
->
length
)){
max
KV
->
length
=
kv
.
length
;
SSmlSTableMeta
*
tableMeta
=
(
SSmlSTableMeta
*
)
nodeListGet
(
info
->
superTables
,
elements
->
measure
,
elements
->
measureLen
,
NULL
);
ASSERT
(
tableMeta
!=
NULL
);
...
...
@@ -195,11 +197,11 @@ static int32_t smlParseTelnetTags(SSmlHandle *info, char *data, char *sqlEnd, SS
info
->
reRun
=
true
;
return
TSDB_CODE_SUCCESS
;
}
SSmlKv
*
pre
KV
=
(
SSmlKv
*
)
taosArrayGet
(
superKV
,
cnt
);
if
(
unlikely
(
kv
.
length
>
pre
KV
->
length
))
{
pre
KV
->
length
=
kv
.
length
;
SSmlKv
*
max
KV
=
(
SSmlKv
*
)
taosArrayGet
(
superKV
,
cnt
);
if
(
unlikely
(
kv
.
length
>
max
KV
->
length
))
{
max
KV
->
length
=
kv
.
length
;
}
else
{
kv
.
length
=
pre
KV
->
length
;
kv
.
length
=
max
KV
->
length
;
}
info
->
needModifySchema
=
true
;
...
...
@@ -211,11 +213,12 @@ static int32_t smlParseTelnetTags(SSmlHandle *info, char *data, char *sqlEnd, SS
}
else
{
taosArrayPush
(
superKV
,
&
kv
);
}
taosArrayPush
(
preLineKV
,
&
kv
);
taosArrayPush
(
maxKVs
,
&
kv
);
}
}
else
{
taosArrayPush
(
preLineKV
,
&
kv
);
taosArrayPush
(
maxKVs
,
&
kv
);
}
taosArrayPush
(
preLineKV
,
&
kv
);
cnt
++
;
}
SSmlTableInfo
*
tinfo
=
(
SSmlTableInfo
*
)
nodeListGet
(
info
->
childTables
,
elements
,
POINTER_BYTES
,
is_same_child_table_telnet
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录