Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
85549472
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看板
提交
85549472
编写于
5月 03, 2022
作者:
S
shenglian zhou
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
snprintf check
上级
e605c270
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
77 addition
and
19 deletion
+77
-19
src/client/src/tscParseLineProtocol.c
src/client/src/tscParseLineProtocol.c
+77
-19
未找到文件。
src/client/src/tscParseLineProtocol.c
浏览文件 @
85549472
...
...
@@ -789,6 +789,21 @@ static int32_t arrangePointsByChildTableName(TAOS_SML_DATA_POINT* points, int nu
return
0
;
}
static
int
smlSnprintf
(
char
*
buf
,
int32_t
*
total
,
int32_t
cap
,
char
*
fmt
,
...)
{
if
(
*
total
>
cap
)
{
return
-
1
;
}
va_list
argp
;
va_start
(
argp
,
fmt
);
int
len
=
vsnprintf
(
buf
+
*
total
,
cap
-
*
total
,
fmt
,
argp
);
if
(
len
<
0
||
len
>=
cap
-
*
total
)
{
return
-
2
;
}
*
total
+=
len
;
return
0
;
}
static
int32_t
addChildTableDataPointsToInsertSql
(
char
*
cTableName
,
char
*
sTableName
,
SSmlSTableSchema
*
sTableSchema
,
SArray
*
cTablePoints
,
char
*
sql
,
int32_t
capacity
,
int32_t
*
cTableSqlLen
,
int
fromIndex
,
int
*
nextIndex
,
SSmlLinesInfo
*
info
)
{
size_t
numTags
=
taosArrayGetSize
(
sTableSchema
->
tags
);
...
...
@@ -806,48 +821,79 @@ static int32_t addChildTableDataPointsToInsertSql(char* cTableName, char* sTable
}
}
int32_t
freeBytes
=
capacity
;
TAOS_SML_KV
**
colKVs
=
malloc
(
numCols
*
sizeof
(
TAOS_SML_KV
*
));
int
r
=
fromIndex
;
int32_t
totalLen
=
0
;
totalLen
+=
sprintf
(
sql
,
" %s using %s ("
,
cTableName
,
sTableName
);
int
ret
=
0
;
ret
=
smlSnprintf
(
sql
,
&
totalLen
,
capacity
,
" %s using %s ("
,
cTableName
,
sTableName
);
if
(
ret
!=
0
)
{
goto
_cleanup
;
}
for
(
int
i
=
0
;
i
<
numTags
;
++
i
)
{
SSchema
*
tagSchema
=
taosArrayGet
(
tagsSchema
,
i
);
totalLen
+=
snprintf
(
sql
+
totalLen
,
freeBytes
-
totalLen
,
"%s,"
,
tagSchema
->
name
);
ret
=
smlSnprintf
(
sql
,
&
totalLen
,
capacity
,
"%s,"
,
tagSchema
->
name
);
if
(
ret
!=
0
)
{
goto
_cleanup
;
}
}
--
totalLen
;
totalLen
+=
snprintf
(
sql
+
totalLen
,
freeBytes
-
totalLen
,
")"
);
totalLen
+=
snprintf
(
sql
+
totalLen
,
freeBytes
-
totalLen
,
" tags ("
);
ret
=
smlSnprintf
(
sql
,
&
totalLen
,
capacity
,
") tags ("
);
if
(
ret
!=
0
)
{
goto
_cleanup
;
}
for
(
int
i
=
0
;
i
<
numTags
;
++
i
)
{
if
(
capacity
-
totalLen
<
1024
*
16
)
{
goto
_cleanup
;
}
if
(
tagKVs
[
i
]
==
NULL
)
{
totalLen
+=
snprintf
(
sql
+
totalLen
,
freeBytes
-
totalLen
,
"NULL,"
);
ret
=
smlSnprintf
(
sql
,
&
totalLen
,
capacity
,
"NULL,"
);
if
(
ret
!=
0
)
{
goto
_cleanup
;
}
}
else
{
TAOS_SML_KV
*
kv
=
tagKVs
[
i
];
size_t
beforeLen
=
totalLen
;
int32_t
len
=
0
;
converToStr
(
sql
+
beforeLen
,
kv
->
type
,
kv
->
value
,
kv
->
length
,
&
len
);
totalLen
+=
len
;
totalLen
+=
snprintf
(
sql
+
totalLen
,
freeBytes
-
totalLen
,
","
);
ret
=
smlSnprintf
(
sql
,
&
totalLen
,
capacity
,
","
);
if
(
ret
!=
0
)
{
goto
_cleanup
;
}
}
}
--
totalLen
;
totalLen
+=
snprintf
(
sql
+
totalLen
,
freeBytes
-
totalLen
,
") ("
);
ret
=
smlSnprintf
(
sql
,
&
totalLen
,
capacity
,
") ("
);
if
(
ret
!=
0
)
{
goto
_cleanup
;
}
for
(
int
i
=
0
;
i
<
numCols
;
++
i
)
{
SSchema
*
colSchema
=
taosArrayGet
(
colsSchema
,
i
);
totalLen
+=
snprintf
(
sql
+
totalLen
,
freeBytes
-
totalLen
,
"%s,"
,
colSchema
->
name
);
ret
=
smlSnprintf
(
sql
,
&
totalLen
,
capacity
,
"%s,"
,
colSchema
->
name
);
if
(
ret
!=
0
)
{
goto
_cleanup
;
}
}
--
totalLen
;
totalLen
+=
snprintf
(
sql
+
totalLen
,
freeBytes
-
totalLen
,
") values "
);
ret
=
smlSnprintf
(
sql
,
&
totalLen
,
capacity
,
") values "
);
if
(
ret
!=
0
)
{
goto
_cleanup
;
}
TAOS_SML_KV
**
colKVs
=
malloc
(
numCols
*
sizeof
(
TAOS_SML_KV
*
));
int
r
=
fromIndex
;
for
(;
r
<
rows
;
++
r
)
{
if
(
freeBytes
-
totalLen
<
1024
*
16
)
{
if
(
capacity
-
totalLen
<
1024
*
16
)
{
break
;
}
totalLen
+=
snprintf
(
sql
+
totalLen
,
freeBytes
-
totalLen
,
"("
);
ret
=
smlSnprintf
(
sql
,
&
totalLen
,
capacity
,
"("
);
if
(
ret
!=
0
)
{
goto
_cleanup
;
}
memset
(
colKVs
,
0
,
numCols
*
sizeof
(
TAOS_SML_KV
*
));
TAOS_SML_DATA_POINT
*
point
=
taosArrayGetP
(
cTablePoints
,
r
);
...
...
@@ -858,26 +904,38 @@ static int32_t addChildTableDataPointsToInsertSql(char* cTableName, char* sTable
for
(
int
i
=
0
;
i
<
numCols
;
++
i
)
{
if
(
colKVs
[
i
]
==
NULL
)
{
totalLen
+=
snprintf
(
sql
+
totalLen
,
freeBytes
-
totalLen
,
"NULL,"
);
ret
=
smlSnprintf
(
sql
,
&
totalLen
,
capacity
,
"NULL,"
);
if
(
ret
!=
0
)
{
goto
_cleanup
;
}
}
else
{
TAOS_SML_KV
*
kv
=
colKVs
[
i
];
size_t
beforeLen
=
totalLen
;
int32_t
len
=
0
;
converToStr
(
sql
+
beforeLen
,
kv
->
type
,
kv
->
value
,
kv
->
length
,
&
len
);
totalLen
+=
len
;
totalLen
+=
snprintf
(
sql
+
totalLen
,
freeBytes
-
totalLen
,
","
);
ret
=
smlSnprintf
(
sql
,
&
totalLen
,
capacity
,
","
);
if
(
ret
!=
0
)
{
goto
_cleanup
;
}
}
}
--
totalLen
;
totalLen
+=
snprintf
(
sql
+
totalLen
,
freeBytes
-
totalLen
,
")"
);
ret
=
smlSnprintf
(
sql
,
&
totalLen
,
capacity
,
")"
);
if
(
ret
!=
0
)
{
goto
_cleanup
;
}
}
_cleanup:
free
(
colKVs
);
if
(
r
==
fromIndex
)
{
tscError
(
"buffer can not fit one line"
);
*
cTableSqlLen
=
0
;
}
else
{
*
cTableSqlLen
=
totalLen
;
}
*
nextIndex
=
r
;
*
cTableSqlLen
=
totalLen
;
return
0
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录