Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
a55087de
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看板
未验证
提交
a55087de
编写于
3月 06, 2023
作者:
S
Shengliang Guan
提交者:
GitHub
3月 06, 2023
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #20266 from taosdata/fix/TD-22900
fix:give error if col is same in schemless & fix json parse error in TD-22903
上级
3a9247ed
cea32f2e
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
202 addition
and
269 deletion
+202
-269
source/client/inc/clientSml.h
source/client/inc/clientSml.h
+1
-1
source/client/src/clientSml.c
source/client/src/clientSml.c
+2
-4
source/client/src/clientSmlJson.c
source/client/src/clientSmlJson.c
+22
-64
source/client/src/clientSmlLine.c
source/client/src/clientSmlLine.c
+55
-135
source/client/src/clientSmlTelnet.c
source/client/src/clientSmlTelnet.c
+21
-64
source/common/src/tglobal.c
source/common/src/tglobal.c
+1
-0
source/dnode/vnode/src/vnd/vnodeSync.c
source/dnode/vnode/src/vnd/vnodeSync.c
+1
-1
utils/test/c/sml_test.c
utils/test/c/sml_test.c
+99
-0
未找到文件。
source/client/inc/clientSml.h
浏览文件 @
a55087de
...
...
@@ -190,7 +190,7 @@ typedef struct {
//
SArray
*
preLineTagKV
;
SArray
*
maxTagKVs
;
SArray
*
preLineColKV
;
SArray
*
masColKVs
;
SSmlLineInfo
preLine
;
STableMeta
*
currSTableMeta
;
...
...
source/client/src/clientSml.c
浏览文件 @
a55087de
...
...
@@ -1073,8 +1073,6 @@ void smlDestroyInfo(SSmlHandle *info) {
taosArrayDestroy
(
info
->
valueJsonArray
);
taosArrayDestroy
(
info
->
preLineTagKV
);
taosArrayDestroy
(
info
->
maxTagKVs
);
taosArrayDestroy
(
info
->
preLineColKV
);
if
(
!
info
->
dataFormat
)
{
for
(
int
i
=
0
;
i
<
info
->
lineNum
;
i
++
)
{
...
...
@@ -1117,8 +1115,6 @@ SSmlHandle *smlBuildSmlInfo(TAOS *taos) {
info
->
tagJsonArray
=
taosArrayInit
(
8
,
POINTER_BYTES
);
info
->
valueJsonArray
=
taosArrayInit
(
8
,
POINTER_BYTES
);
info
->
preLineTagKV
=
taosArrayInit
(
8
,
sizeof
(
SSmlKv
));
info
->
maxTagKVs
=
taosArrayInit
(
8
,
sizeof
(
SSmlKv
));
info
->
preLineColKV
=
taosArrayInit
(
8
,
sizeof
(
SSmlKv
));
if
(
NULL
==
info
->
pVgHash
||
NULL
==
info
->
childTables
||
NULL
==
info
->
superTables
)
{
uError
(
"create SSmlHandle failed"
);
...
...
@@ -1141,6 +1137,7 @@ static int32_t smlPushCols(SArray *colsArray, SArray *cols) {
for
(
size_t
i
=
0
;
i
<
taosArrayGetSize
(
cols
);
i
++
)
{
SSmlKv
*
kv
=
(
SSmlKv
*
)
taosArrayGet
(
cols
,
i
);
taosHashPut
(
kvHash
,
kv
->
key
,
kv
->
keyLen
,
&
kv
,
POINTER_BYTES
);
if
(
terrno
==
TSDB_CODE_DUP_KEY
){
return
terrno
;}
}
taosArrayPush
(
colsArray
,
&
kvHash
);
...
...
@@ -1204,6 +1201,7 @@ static int32_t smlParseLineBottom(SSmlHandle *info) {
SSmlSTableMeta
*
meta
=
smlBuildSTableMeta
(
info
->
dataFormat
);
smlInsertMeta
(
meta
->
tagHash
,
meta
->
tags
,
tinfo
->
tags
);
if
(
terrno
==
TSDB_CODE_DUP_KEY
){
return
terrno
;}
smlInsertMeta
(
meta
->
colHash
,
meta
->
cols
,
elements
->
colArray
);
taosHashPut
(
info
->
superTables
,
elements
->
measure
,
elements
->
measureLen
,
&
meta
,
POINTER_BYTES
);
}
...
...
source/client/src/clientSmlJson.c
浏览文件 @
a55087de
...
...
@@ -683,13 +683,10 @@ 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
)
{
if
(
unlikely
(
!
isSameMeasure
))
{
SSmlSTableMeta
**
tmp
=
(
SSmlSTableMeta
**
)
taosHashGet
(
info
->
superTables
,
elements
->
measure
,
elements
->
measureLen
);
SSmlSTableMeta
*
sMeta
=
NULL
;
SSmlSTableMeta
*
sMeta
=
NULL
;
if
(
unlikely
(
tmp
==
NULL
))
{
STableMeta
*
pTableMeta
=
smlGetMeta
(
info
,
elements
->
measure
,
elements
->
measureLen
);
if
(
pTableMeta
==
NULL
)
{
...
...
@@ -700,18 +697,16 @@ static int32_t smlParseTagsFromJSON(SSmlHandle *info, cJSON *tags, SSmlLineInfo
sMeta
=
smlBuildSTableMeta
(
info
->
dataFormat
);
sMeta
->
tableMeta
=
pTableMeta
;
taosHashPut
(
info
->
superTables
,
elements
->
measure
,
elements
->
measureLen
,
&
sMeta
,
POINTER_BYTES
);
for
(
int
i
=
pTableMeta
->
tableInfo
.
numOfColumns
;
i
<
pTableMeta
->
tableInfo
.
numOfTags
+
pTableMeta
->
tableInfo
.
numOfColumns
;
i
++
){
SSchema
*
tag
=
pTableMeta
->
schema
+
i
;
SSmlKv
kv
=
{.
key
=
tag
->
name
,
.
keyLen
=
strlen
(
tag
->
name
),
.
type
=
tag
->
type
,
.
length
=
(
tag
->
bytes
-
VARSTR_HEADER_SIZE
)
/
TSDB_NCHAR_SIZE
};
taosArrayPush
(
sMeta
->
tags
,
&
kv
);
}
tmp
=
&
sMeta
;
}
info
->
currSTableMeta
=
(
*
tmp
)
->
tableMeta
;
superKV
=
(
*
tmp
)
->
tags
;
if
(
unlikely
(
taosArrayGetSize
(
superKV
)
==
0
))
{
isSuperKVInit
=
false
;
}
taosArrayClear
(
maxKVs
);
info
->
maxTagKVs
=
(
*
tmp
)
->
tags
;
}
}
else
{
taosArrayClear
(
maxKVs
);
}
taosArrayClear
(
preLineKV
);
...
...
@@ -747,58 +742,21 @@ static int32_t smlParseTagsFromJSON(SSmlHandle *info, cJSON *tags, SSmlLineInfo
return
TSDB_CODE_SUCCESS
;
}
if
(
isSameMeasure
)
{
if
(
unlikely
(
cnt
>=
taosArrayGetSize
(
maxKVs
)))
{
info
->
dataFormat
=
false
;
info
->
reRun
=
true
;
return
TSDB_CODE_SUCCESS
;
}
SSmlKv
*
maxKV
=
(
SSmlKv
*
)
taosArrayGet
(
maxKVs
,
cnt
);
if
(
unlikely
(
kv
.
length
>
maxKV
->
length
))
{
maxKV
->
length
=
kv
.
length
;
SSmlSTableMeta
**
tableMeta
=
(
SSmlSTableMeta
**
)
taosHashGet
(
info
->
superTables
,
elements
->
measure
,
elements
->
measureLen
);
if
(
unlikely
(
NULL
==
tableMeta
))
{
uError
(
"SML:0x%"
PRIx64
" NULL == tableMeta"
,
info
->
id
);
return
TSDB_CODE_SML_INTERNAL_ERROR
;
}
SSmlKv
*
oldKV
=
(
SSmlKv
*
)
taosArrayGet
((
*
tableMeta
)
->
tags
,
cnt
);
oldKV
->
length
=
kv
.
length
;
info
->
needModifySchema
=
true
;
}
if
(
unlikely
(
!
IS_SAME_KEY
))
{
info
->
dataFormat
=
false
;
info
->
reRun
=
true
;
return
TSDB_CODE_SUCCESS
;
}
}
else
{
if
(
isSuperKVInit
)
{
if
(
unlikely
(
cnt
>=
taosArrayGetSize
(
superKV
)))
{
info
->
dataFormat
=
false
;
info
->
reRun
=
true
;
return
TSDB_CODE_SUCCESS
;
}
SSmlKv
*
maxKV
=
(
SSmlKv
*
)
taosArrayGet
(
superKV
,
cnt
);
if
(
unlikely
(
kv
.
length
>
maxKV
->
length
))
{
maxKV
->
length
=
kv
.
length
;
}
else
{
kv
.
length
=
maxKV
->
length
;
}
info
->
needModifySchema
=
true
;
if
(
unlikely
(
!
IS_SAME_KEY
))
{
info
->
dataFormat
=
false
;
info
->
reRun
=
true
;
return
TSDB_CODE_SUCCESS
;
}
}
else
{
taosArrayPush
(
superKV
,
&
kv
);
}
taosArrayPush
(
maxKVs
,
&
kv
);
if
(
unlikely
(
cnt
>=
taosArrayGetSize
(
info
->
maxTagKVs
)))
{
info
->
dataFormat
=
false
;
info
->
reRun
=
true
;
return
TSDB_CODE_SUCCESS
;
}
SSmlKv
*
maxKV
=
(
SSmlKv
*
)
taosArrayGet
(
info
->
maxTagKVs
,
cnt
);
if
(
unlikely
(
!
IS_SAME_KEY
))
{
info
->
dataFormat
=
false
;
info
->
reRun
=
true
;
return
TSDB_CODE_SUCCESS
;
}
if
(
unlikely
(
kv
.
length
>
maxKV
->
length
))
{
maxKV
->
length
=
kv
.
length
;
info
->
needModifySchema
=
true
;
}
}
else
{
taosArrayPush
(
maxKVs
,
&
kv
);
}
taosArrayPush
(
preLineKV
,
&
kv
);
cnt
++
;
...
...
@@ -1214,7 +1172,7 @@ static int32_t smlParseJSONString(SSmlHandle *info, char **start, SSmlLineInfo *
return
TSDB_CODE_INVALID_TIMESTAMP
;
}
else
if
(
elements
->
timestamp
[
0
]
==
'{'
)
{
char
tmp
=
elements
->
timestamp
[
elements
->
timestampLen
];
elements
->
cols
[
elements
->
timestampLen
]
=
'\0'
;
elements
->
timestamp
[
elements
->
timestampLen
]
=
'\0'
;
cJSON
*
tsJson
=
cJSON_Parse
(
elements
->
timestamp
);
ts
=
smlParseTSFromJSON
(
info
,
tsJson
);
if
(
unlikely
(
ts
<
0
))
{
...
...
source/client/src/clientSmlLine.c
浏览文件 @
a55087de
...
...
@@ -144,13 +144,11 @@ static int32_t smlParseTagKv(SSmlHandle *info, char **sql, char *sqlEnd, SSmlLin
int
cnt
=
0
;
SArray
*
preLineKV
=
info
->
preLineTagKV
;
SArray
*
maxKVs
=
info
->
maxTagKVs
;
bool
isSuperKVInit
=
true
;
SArray
*
superKV
=
NULL
;
if
(
info
->
dataFormat
)
{
if
(
unlikely
(
!
isSameMeasure
))
{
SSmlSTableMeta
**
tmp
=
(
SSmlSTableMeta
**
)
taosHashGet
(
info
->
superTables
,
currElement
->
measure
,
currElement
->
measureLen
);
SSmlSTableMeta
*
sMeta
=
NULL
;
if
(
unlikely
(
tmp
==
NULL
))
{
STableMeta
*
pTableMeta
=
smlGetMeta
(
info
,
currElement
->
measure
,
currElement
->
measureLen
);
...
...
@@ -162,18 +160,16 @@ static int32_t smlParseTagKv(SSmlHandle *info, char **sql, char *sqlEnd, SSmlLin
sMeta
=
smlBuildSTableMeta
(
info
->
dataFormat
);
sMeta
->
tableMeta
=
pTableMeta
;
taosHashPut
(
info
->
superTables
,
currElement
->
measure
,
currElement
->
measureLen
,
&
sMeta
,
POINTER_BYTES
);
for
(
int
i
=
pTableMeta
->
tableInfo
.
numOfColumns
;
i
<
pTableMeta
->
tableInfo
.
numOfTags
+
pTableMeta
->
tableInfo
.
numOfColumns
;
i
++
){
SSchema
*
tag
=
pTableMeta
->
schema
+
i
;
SSmlKv
kv
=
{.
key
=
tag
->
name
,
.
keyLen
=
strlen
(
tag
->
name
),
.
type
=
tag
->
type
,
.
length
=
(
tag
->
bytes
-
VARSTR_HEADER_SIZE
)
/
TSDB_NCHAR_SIZE
};
taosArrayPush
(
sMeta
->
tags
,
&
kv
);
}
tmp
=
&
sMeta
;
}
info
->
currSTableMeta
=
(
*
tmp
)
->
tableMeta
;
superKV
=
(
*
tmp
)
->
tags
;
if
(
unlikely
(
taosArrayGetSize
(
superKV
)
==
0
))
{
isSuperKVInit
=
false
;
}
taosArrayClear
(
maxKVs
);
info
->
maxTagKVs
=
(
*
tmp
)
->
tags
;
}
}
else
{
taosArrayClear
(
maxKVs
);
}
taosArrayClear
(
preLineKV
);
...
...
@@ -252,58 +248,23 @@ static int32_t smlParseTagKv(SSmlHandle *info, char **sql, char *sqlEnd, SSmlLin
return
TSDB_CODE_SUCCESS
;
}
if
(
isSameMeasure
)
{
if
(
unlikely
(
cnt
>=
taosArrayGetSize
(
maxKVs
)))
{
info
->
dataFormat
=
false
;
info
->
reRun
=
true
;
return
TSDB_CODE_SUCCESS
;
}
SSmlKv
*
maxKV
=
(
SSmlKv
*
)
taosArrayGet
(
maxKVs
,
cnt
);
if
(
unlikely
(
kv
.
length
>
maxKV
->
length
))
{
maxKV
->
length
=
kv
.
length
;
SSmlSTableMeta
**
tableMeta
=
(
SSmlSTableMeta
**
)
taosHashGet
(
info
->
superTables
,
currElement
->
measure
,
currElement
->
measureLen
);
if
(
unlikely
(
NULL
==
tableMeta
))
{
uError
(
"SML:0x%"
PRIx64
" NULL == tableMeta"
,
info
->
id
);
return
TSDB_CODE_SML_INTERNAL_ERROR
;
}
if
(
unlikely
(
cnt
>=
taosArrayGetSize
(
info
->
maxTagKVs
)))
{
info
->
dataFormat
=
false
;
info
->
reRun
=
true
;
return
TSDB_CODE_SUCCESS
;
}
SSmlKv
*
maxKV
=
(
SSmlKv
*
)
taosArrayGet
(
info
->
maxTagKVs
,
cnt
);
SSmlKv
*
oldKV
=
(
SSmlKv
*
)
taosArrayGet
((
*
tableMeta
)
->
tags
,
cnt
);
oldKV
->
length
=
kv
.
length
;
info
->
needModifySchema
=
true
;
}
if
(
unlikely
(
!
IS_SAME_KEY
))
{
info
->
dataFormat
=
false
;
info
->
reRun
=
true
;
return
TSDB_CODE_SUCCESS
;
}
}
else
{
if
(
isSuperKVInit
)
{
if
(
unlikely
(
cnt
>=
taosArrayGetSize
(
superKV
)))
{
info
->
dataFormat
=
false
;
info
->
reRun
=
true
;
return
TSDB_CODE_SUCCESS
;
}
SSmlKv
*
maxKV
=
(
SSmlKv
*
)
taosArrayGet
(
superKV
,
cnt
);
if
(
unlikely
(
kv
.
length
>
maxKV
->
length
))
{
maxKV
->
length
=
kv
.
length
;
}
else
{
kv
.
length
=
maxKV
->
length
;
}
info
->
needModifySchema
=
true
;
if
(
unlikely
(
!
IS_SAME_KEY
))
{
info
->
dataFormat
=
false
;
info
->
reRun
=
true
;
return
TSDB_CODE_SUCCESS
;
}
if
(
unlikely
(
!
IS_SAME_KEY
))
{
info
->
dataFormat
=
false
;
info
->
reRun
=
true
;
return
TSDB_CODE_SUCCESS
;
}
}
else
{
taosArrayPush
(
superKV
,
&
kv
);
}
taosArrayPush
(
maxKVs
,
&
kv
);
if
(
unlikely
(
kv
.
length
>
maxKV
->
length
))
{
maxKV
->
length
=
kv
.
length
;
info
->
needModifySchema
=
true
;
}
}
else
{
taosArrayPush
(
maxKVs
,
&
kv
);
}
taosArrayPush
(
preLineKV
,
&
kv
);
...
...
@@ -344,9 +305,6 @@ static int32_t smlParseTagKv(SSmlHandle *info, char **sql, char *sqlEnd, SSmlLin
static
int32_t
smlParseColKv
(
SSmlHandle
*
info
,
char
**
sql
,
char
*
sqlEnd
,
SSmlLineInfo
*
currElement
,
bool
isSameMeasure
,
bool
isSameCTable
)
{
int
cnt
=
0
;
SArray
*
preLineKV
=
info
->
preLineColKV
;
bool
isSuperKVInit
=
true
;
SArray
*
superKV
=
NULL
;
if
(
info
->
dataFormat
)
{
if
(
unlikely
(
!
isSameCTable
))
{
SSmlTableInfo
**
oneTable
=
...
...
@@ -361,7 +319,6 @@ static int32_t smlParseColKv(SSmlHandle *info, char **sql, char *sqlEnd, SSmlLin
if
(
unlikely
(
!
isSameMeasure
))
{
SSmlSTableMeta
**
tmp
=
(
SSmlSTableMeta
**
)
taosHashGet
(
info
->
superTables
,
currElement
->
measure
,
currElement
->
measureLen
);
SSmlSTableMeta
*
sMeta
=
NULL
;
if
(
unlikely
(
tmp
==
NULL
))
{
STableMeta
*
pTableMeta
=
smlGetMeta
(
info
,
currElement
->
measure
,
currElement
->
measureLen
);
if
(
pTableMeta
==
NULL
)
{
...
...
@@ -369,17 +326,23 @@ static int32_t smlParseColKv(SSmlHandle *info, char **sql, char *sqlEnd, SSmlLin
info
->
reRun
=
true
;
return
TSDB_CODE_SUCCESS
;
}
sMeta
=
smlBuildSTableMeta
(
info
->
dataFormat
);
sMeta
->
tableMeta
=
pTableMeta
;
taosHashPut
(
info
->
superTables
,
currElement
->
measure
,
currElement
->
measureLen
,
&
sMeta
,
POINTER_BYTES
);
tmp
=
&
sMeta
;
*
tmp
=
smlBuildSTableMeta
(
info
->
dataFormat
);
(
*
tmp
)
->
tableMeta
=
pTableMeta
;
taosHashPut
(
info
->
superTables
,
currElement
->
measure
,
currElement
->
measureLen
,
tmp
,
POINTER_BYTES
);
for
(
int
i
=
0
;
i
<
pTableMeta
->
tableInfo
.
numOfColumns
;
i
++
){
SSchema
*
tag
=
pTableMeta
->
schema
+
i
;
SSmlKv
kv
=
{.
key
=
tag
->
name
,
.
keyLen
=
strlen
(
tag
->
name
),
.
type
=
tag
->
type
};
if
(
tag
->
type
==
TSDB_DATA_TYPE_NCHAR
){
kv
.
length
=
(
tag
->
bytes
-
VARSTR_HEADER_SIZE
)
/
TSDB_NCHAR_SIZE
;
}
else
if
(
tag
->
type
==
TSDB_DATA_TYPE_BINARY
){
kv
.
length
=
tag
->
bytes
-
VARSTR_HEADER_SIZE
;
}
taosArrayPush
((
*
tmp
)
->
cols
,
&
kv
);
}
}
info
->
currSTableMeta
=
(
*
tmp
)
->
tableMeta
;
superKV
=
(
*
tmp
)
->
cols
;
if
(
unlikely
(
taosArrayGetSize
(
superKV
)
==
0
))
{
isSuperKVInit
=
false
;
}
taosArrayClear
(
preLineKV
);
info
->
masColKVs
=
(
*
tmp
)
->
cols
;
}
}
...
...
@@ -478,69 +441,26 @@ static int32_t smlParseColKv(SSmlHandle *info, char **sql, char *sqlEnd, SSmlLin
info
->
reRun
=
true
;
return
TSDB_CODE_SUCCESS
;
}
if
(
cnt
>=
taosArrayGetSize
(
info
->
masColKVs
))
{
info
->
dataFormat
=
false
;
info
->
reRun
=
true
;
return
TSDB_CODE_SUCCESS
;
}
SSmlKv
*
maxKV
=
(
SSmlKv
*
)
taosArrayGet
(
info
->
masColKVs
,
cnt
);
if
(
kv
.
type
!=
maxKV
->
type
)
{
info
->
dataFormat
=
false
;
info
->
reRun
=
true
;
return
TSDB_CODE_SUCCESS
;
}
if
(
unlikely
(
!
IS_SAME_KEY
))
{
info
->
dataFormat
=
false
;
info
->
reRun
=
true
;
return
TSDB_CODE_SUCCESS
;
}
if
(
isSameMeasure
)
{
if
(
cnt
>=
taosArrayGetSize
(
preLineKV
))
{
info
->
dataFormat
=
false
;
info
->
reRun
=
true
;
return
TSDB_CODE_SUCCESS
;
}
SSmlKv
*
maxKV
=
(
SSmlKv
*
)
taosArrayGet
(
preLineKV
,
cnt
);
if
(
kv
.
type
!=
maxKV
->
type
)
{
info
->
dataFormat
=
false
;
info
->
reRun
=
true
;
return
TSDB_CODE_SUCCESS
;
}
if
(
unlikely
(
IS_VAR_DATA_TYPE
(
kv
.
type
)
&&
kv
.
length
>
maxKV
->
length
))
{
maxKV
->
length
=
kv
.
length
;
SSmlSTableMeta
**
tableMeta
=
(
SSmlSTableMeta
**
)
taosHashGet
(
info
->
superTables
,
currElement
->
measure
,
currElement
->
measureLen
);
if
(
unlikely
(
NULL
==
tableMeta
))
{
uError
(
"SML:0x%"
PRIx64
" NULL == tableMeta"
,
info
->
id
);
return
TSDB_CODE_SML_INTERNAL_ERROR
;
}
SSmlKv
*
oldKV
=
(
SSmlKv
*
)
taosArrayGet
((
*
tableMeta
)
->
cols
,
cnt
);
oldKV
->
length
=
kv
.
length
;
info
->
needModifySchema
=
true
;
}
if
(
unlikely
(
!
IS_SAME_KEY
))
{
info
->
dataFormat
=
false
;
info
->
reRun
=
true
;
return
TSDB_CODE_SUCCESS
;
}
}
else
{
if
(
isSuperKVInit
)
{
if
(
unlikely
(
cnt
>=
taosArrayGetSize
(
superKV
)))
{
info
->
dataFormat
=
false
;
info
->
reRun
=
true
;
return
TSDB_CODE_SUCCESS
;
}
SSmlKv
*
maxKV
=
(
SSmlKv
*
)
taosArrayGet
(
superKV
,
cnt
);
if
(
unlikely
(
kv
.
type
!=
maxKV
->
type
))
{
info
->
dataFormat
=
false
;
info
->
reRun
=
true
;
return
TSDB_CODE_SUCCESS
;
}
if
(
IS_VAR_DATA_TYPE
(
kv
.
type
))
{
if
(
kv
.
length
>
maxKV
->
length
)
{
maxKV
->
length
=
kv
.
length
;
}
else
{
kv
.
length
=
maxKV
->
length
;
}
info
->
needModifySchema
=
true
;
}
if
(
unlikely
(
!
IS_SAME_KEY
))
{
info
->
dataFormat
=
false
;
info
->
reRun
=
true
;
return
TSDB_CODE_SUCCESS
;
}
}
else
{
taosArrayPush
(
superKV
,
&
kv
);
}
taosArrayPush
(
preLineKV
,
&
kv
);
if
(
unlikely
(
IS_VAR_DATA_TYPE
(
kv
.
type
)
&&
kv
.
length
>
maxKV
->
length
))
{
maxKV
->
length
=
kv
.
length
;
info
->
needModifySchema
=
true
;
}
}
else
{
if
(
currElement
->
colArray
==
NULL
)
{
...
...
source/client/src/clientSmlTelnet.c
浏览文件 @
a55087de
...
...
@@ -79,13 +79,10 @@ 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
)
{
if
(
!
isSameMeasure
)
{
SSmlSTableMeta
**
tmp
=
(
SSmlSTableMeta
**
)
taosHashGet
(
info
->
superTables
,
elements
->
measure
,
elements
->
measureLen
);
SSmlSTableMeta
*
sMeta
=
NULL
;
SSmlSTableMeta
*
sMeta
=
NULL
;
if
(
unlikely
(
tmp
==
NULL
))
{
STableMeta
*
pTableMeta
=
smlGetMeta
(
info
,
elements
->
measure
,
elements
->
measureLen
);
if
(
pTableMeta
==
NULL
)
{
...
...
@@ -96,18 +93,16 @@ static int32_t smlParseTelnetTags(SSmlHandle *info, char *data, char *sqlEnd, SS
sMeta
=
smlBuildSTableMeta
(
info
->
dataFormat
);
sMeta
->
tableMeta
=
pTableMeta
;
taosHashPut
(
info
->
superTables
,
elements
->
measure
,
elements
->
measureLen
,
&
sMeta
,
POINTER_BYTES
);
for
(
int
i
=
pTableMeta
->
tableInfo
.
numOfColumns
;
i
<
pTableMeta
->
tableInfo
.
numOfTags
+
pTableMeta
->
tableInfo
.
numOfColumns
;
i
++
){
SSchema
*
tag
=
pTableMeta
->
schema
+
i
;
SSmlKv
kv
=
{.
key
=
tag
->
name
,
.
keyLen
=
strlen
(
tag
->
name
),
.
type
=
tag
->
type
,
.
length
=
(
tag
->
bytes
-
VARSTR_HEADER_SIZE
)
/
TSDB_NCHAR_SIZE
};
taosArrayPush
(
sMeta
->
tags
,
&
kv
);
}
tmp
=
&
sMeta
;
}
info
->
currSTableMeta
=
(
*
tmp
)
->
tableMeta
;
superKV
=
(
*
tmp
)
->
tags
;
if
(
unlikely
(
taosArrayGetSize
(
superKV
)
==
0
))
{
isSuperKVInit
=
false
;
}
taosArrayClear
(
maxKVs
);
info
->
maxTagKVs
=
(
*
tmp
)
->
tags
;
}
}
else
{
taosArrayClear
(
maxKVs
);
}
taosArrayClear
(
preLineKV
);
...
...
@@ -175,59 +170,21 @@ static int32_t smlParseTelnetTags(SSmlHandle *info, char *data, char *sqlEnd, SS
info
->
reRun
=
true
;
return
TSDB_CODE_SUCCESS
;
}
if
(
isSameMeasure
)
{
if
(
unlikely
(
cnt
>=
taosArrayGetSize
(
maxKVs
)))
{
info
->
dataFormat
=
false
;
info
->
reRun
=
true
;
return
TSDB_CODE_SUCCESS
;
}
SSmlKv
*
maxKV
=
(
SSmlKv
*
)
taosArrayGet
(
maxKVs
,
cnt
);
if
(
unlikely
(
kv
.
length
>
maxKV
->
length
))
{
maxKV
->
length
=
kv
.
length
;
SSmlSTableMeta
**
tableMeta
=
(
SSmlSTableMeta
**
)
taosHashGet
(
info
->
superTables
,
elements
->
measure
,
elements
->
measureLen
);
if
(
unlikely
(
NULL
==
tableMeta
))
{
uError
(
"SML:0x%"
PRIx64
" NULL == tableMeta"
,
info
->
id
);
return
TSDB_CODE_SML_INTERNAL_ERROR
;
}
SSmlKv
*
oldKV
=
(
SSmlKv
*
)
taosArrayGet
((
*
tableMeta
)
->
tags
,
cnt
);
oldKV
->
length
=
kv
.
length
;
info
->
needModifySchema
=
true
;
}
if
(
unlikely
(
!
IS_SAME_KEY
))
{
info
->
dataFormat
=
false
;
info
->
reRun
=
true
;
return
TSDB_CODE_SUCCESS
;
}
}
else
{
if
(
isSuperKVInit
)
{
if
(
unlikely
(
cnt
>=
taosArrayGetSize
(
superKV
)))
{
info
->
dataFormat
=
false
;
info
->
reRun
=
true
;
return
TSDB_CODE_SUCCESS
;
}
SSmlKv
*
maxKV
=
(
SSmlKv
*
)
taosArrayGet
(
superKV
,
cnt
);
if
(
unlikely
(
kv
.
length
>
maxKV
->
length
))
{
maxKV
->
length
=
kv
.
length
;
}
else
{
kv
.
length
=
maxKV
->
length
;
}
info
->
needModifySchema
=
true
;
if
(
unlikely
(
!
IS_SAME_KEY
))
{
info
->
dataFormat
=
false
;
info
->
reRun
=
true
;
return
TSDB_CODE_SUCCESS
;
}
}
else
{
taosArrayPush
(
superKV
,
&
kv
);
}
taosArrayPush
(
maxKVs
,
&
kv
);
if
(
unlikely
(
cnt
>=
taosArrayGetSize
(
info
->
maxTagKVs
)))
{
info
->
dataFormat
=
false
;
info
->
reRun
=
true
;
return
TSDB_CODE_SUCCESS
;
}
SSmlKv
*
maxKV
=
(
SSmlKv
*
)
taosArrayGet
(
info
->
maxTagKVs
,
cnt
);
if
(
unlikely
(
!
IS_SAME_KEY
))
{
info
->
dataFormat
=
false
;
info
->
reRun
=
true
;
return
TSDB_CODE_SUCCESS
;
}
if
(
unlikely
(
kv
.
length
>
maxKV
->
length
))
{
maxKV
->
length
=
kv
.
length
;
info
->
needModifySchema
=
true
;
}
}
else
{
taosArrayPush
(
maxKVs
,
&
kv
);
}
taosArrayPush
(
preLineKV
,
&
kv
);
cnt
++
;
...
...
source/common/src/tglobal.c
浏览文件 @
a55087de
...
...
@@ -1249,6 +1249,7 @@ int32_t taosCreateLog(const char *logname, int32_t logFileNum, const char *cfgDi
taosSetAllDebugFlag
(
cfgGetItem
(
pCfg
,
"debugFlag"
)
->
i32
,
false
);
if
(
taosMulModeMkDir
(
tsLogDir
,
0777
)
!=
0
)
{
terrno
=
TAOS_SYSTEM_ERROR
(
errno
);
uError
(
"failed to create dir:%s since %s"
,
tsLogDir
,
terrstr
());
cfgCleanup
(
pCfg
);
return
-
1
;
...
...
source/dnode/vnode/src/vnd/vnodeSync.c
浏览文件 @
a55087de
...
...
@@ -292,7 +292,7 @@ void vnodeProposeWriteMsg(SQueueInfo *pInfo, STaosQall *qall, int32_t numOfMsgs)
code
=
vnodePreProcessWriteMsg
(
pVnode
,
pMsg
);
if
(
code
!=
0
)
{
vGError
(
"vgId:%d, msg:%p failed to pre-process since %s"
,
vgId
,
pMsg
,
t
errstr
(
));
vGError
(
"vgId:%d, msg:%p failed to pre-process since %s"
,
vgId
,
pMsg
,
t
strerror
(
code
));
if
(
terrno
!=
0
)
code
=
terrno
;
vnodeHandleProposeError
(
pVnode
,
pMsg
,
code
);
rpcFreeCont
(
pMsg
->
pCont
);
...
...
utils/test/c/sml_test.c
浏览文件 @
a55087de
...
...
@@ -137,6 +137,8 @@ int smlProcess_json1_Test() {
for
(
int
i
=
0
;
i
<
1
;
i
++
)
{
taosMemoryFree
(
sql1
[
i
]);
}
ASSERT
(
code
==
0
);
const
char
*
sql2
[]
=
{
"[{
\"
metric
\"
:
\"
sys.cpu.nice
\"
,
\"
timestamp
\"
:1662344041,
\"
value
\"
:13,
\"
tags
\"
:{
\"
host
\"
:
\"
web01
\"
,
\"
dc
\"
:
\"
lga
\"
}"
...
...
@@ -164,6 +166,34 @@ int smlProcess_json1_Test() {
taosMemoryFree
(
sql3
[
i
]);
}
ASSERT
(
code
==
0
);
// TD-22903
const
char
*
sql4
[]
=
{
"[{
\"
metric
\"
:
\"
test_us
\"
,
\"
timestamp
\"
: {
\"
value
\"
: 1626006833639,
\"
type
\"
:
\"
ms
\"
},
\"
value
\"
: true,
\"
tags
\"
: {
\"
t0
\"
: true}}, {
\"
metric
\"
:
\"
test_us
\"
,
\"
timestamp
\"
: {
\"
value
\"
: 1626006833638,
\"
type
\"
:
\"
ms
\"
},
\"
value
\"
: false,
\"
tags
\"
: {
\"
t0
\"
: true}}]"
};
char
*
sql5
[
1
]
=
{
0
};
for
(
int
i
=
0
;
i
<
1
;
i
++
)
{
sql5
[
i
]
=
taosMemoryCalloc
(
1
,
1024
);
strncpy
(
sql5
[
i
],
sql4
[
i
],
1023
);
}
pRes
=
taos_schemaless_insert
(
taos
,
(
char
**
)
sql5
,
sizeof
(
sql5
)
/
sizeof
(
sql5
[
0
]),
TSDB_SML_JSON_PROTOCOL
,
TSDB_SML_TIMESTAMP_NANO_SECONDS
);
code
=
taos_errno
(
pRes
);
if
(
code
!=
0
)
{
printf
(
"%s result:%s
\n
"
,
__FUNCTION__
,
taos_errstr
(
pRes
));
}
else
{
printf
(
"%s result:success
\n
"
,
__FUNCTION__
);
}
taos_free_result
(
pRes
);
for
(
int
i
=
0
;
i
<
1
;
i
++
)
{
taosMemoryFree
(
sql5
[
i
]);
}
ASSERT
(
code
==
0
);
taos_close
(
taos
);
return
code
;
...
...
@@ -927,6 +957,71 @@ int sml_ts2164_Test() {
return
code
;
}
int
sml_td22898_Test
()
{
TAOS
*
taos
=
taos_connect
(
"localhost"
,
"root"
,
"taosdata"
,
NULL
,
0
);
TAOS_RES
*
pRes
=
taos_query
(
taos
,
"CREATE DATABASE IF NOT EXISTS line_test BUFFER 384 MINROWS 1000 PAGES 256 PRECISION 'ns'"
);
taos_free_result
(
pRes
);
const
char
*
sql
[]
=
{
"svlzxdfutx,id=nyavpjyfas,t0=t,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
binaryTagValue
\"
,t8=L
\"
ncharTagValue
\"
c0=t,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
binaryColValue
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639"
};
pRes
=
taos_query
(
taos
,
"use line_test"
);
taos_free_result
(
pRes
);
pRes
=
taos_schemaless_insert
(
taos
,
(
char
**
)
sql
,
sizeof
(
sql
)
/
sizeof
(
sql
[
0
]),
TSDB_SML_LINE_PROTOCOL
,
TSDB_SML_TIMESTAMP_MILLI_SECONDS
);
printf
(
"%s result:%s
\n
"
,
__FUNCTION__
,
taos_errstr
(
pRes
));
int
code
=
taos_errno
(
pRes
);
taos_free_result
(
pRes
);
const
char
*
sql1
[]
=
{
"svlzxdfutx,id=nyavpjyfas,t0=True,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=
\"
tgqkvsws
\"
,t8=L
\"
ncharTagValue
\"
c0=f,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7=
\"
htvnnldm
\"
,c8=L
\"
ncharColValue
\"
,c9=7u64 1626006833639"
};
pRes
=
taos_schemaless_insert
(
taos
,
(
char
**
)
sql1
,
sizeof
(
sql1
)
/
sizeof
(
sql1
[
0
]),
TSDB_SML_LINE_PROTOCOL
,
TSDB_SML_TIMESTAMP_MILLI_SECONDS
);
printf
(
"%s result:%s
\n
"
,
__FUNCTION__
,
taos_errstr
(
pRes
));
code
=
taos_errno
(
pRes
);
taos_free_result
(
pRes
);
pRes
=
taos_query
(
taos
,
"select * from svlzxdfutx"
);
taos_free_result
(
pRes
);
taos_close
(
taos
);
return
code
;
}
int
sml_td22900_Test
()
{
TAOS
*
taos
=
taos_connect
(
"localhost"
,
"root"
,
"taosdata"
,
NULL
,
0
);
TAOS_RES
*
pRes
=
taos_query
(
taos
,
"CREATE DATABASE IF NOT EXISTS line_test BUFFER 384 MINROWS 1000 PAGES 256 PRECISION 'ns'"
);
taos_free_result
(
pRes
);
const
char
*
sql
[]
=
{
"qddkgilwfu,id=qddkgilwfu_42383_49198,t0=t,t1=127i8 c4=9223372036854775807i64,c6=11.12345f32,c6=22.123456789f64 1626006833639"
};
pRes
=
taos_query
(
taos
,
"use line_test"
);
taos_free_result
(
pRes
);
pRes
=
taos_schemaless_insert
(
taos
,
(
char
**
)
sql
,
sizeof
(
sql
)
/
sizeof
(
sql
[
0
]),
TSDB_SML_LINE_PROTOCOL
,
TSDB_SML_TIMESTAMP_MILLI_SECONDS
);
printf
(
"%s result:%s
\n
"
,
__FUNCTION__
,
taos_errstr
(
pRes
));
int
code
=
taos_errno
(
pRes
);
taos_free_result
(
pRes
);
taos_close
(
taos
);
return
code
;
}
int
sml_ttl_Test
()
{
TAOS
*
taos
=
taos_connect
(
"localhost"
,
"root"
,
"taosdata"
,
NULL
,
0
);
...
...
@@ -1106,6 +1201,10 @@ int main(int argc, char *argv[]) {
ASSERT
(
!
ret
);
ret
=
sml_ts2164_Test
();
ASSERT
(
!
ret
);
ret
=
sml_td22898_Test
();
ASSERT
(
!
ret
);
ret
=
sml_td22900_Test
();
ASSERT
(
ret
);
ret
=
smlProcess_influx_Test
();
ASSERT
(
!
ret
);
ret
=
smlProcess_telnet_Test
();
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录