Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Tonvia
TDengine
提交
54813175
T
TDengine
项目概览
Tonvia
/
TDengine
与 Fork 源项目一致
Fork自
taosdata / TDengine
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
54813175
编写于
8月 09, 2021
作者:
sangshuduo
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
refactor stmt functions.
上级
07603323
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
627 addition
and
376 deletion
+627
-376
src/kit/taosdemo/taosdemo.c
src/kit/taosdemo/taosdemo.c
+627
-376
未找到文件。
src/kit/taosdemo/taosdemo.c
浏览文件 @
54813175
...
...
@@ -295,6 +295,9 @@ typedef struct SSuperTable_S {
uint64_t
lenOfTagOfOneRow
;
char
*
sampleDataBuf
;
#if STMT_IFACE_ENABLED == 1
void
*
sampleBindArray
;
#endif
//int sampleRowCount;
//int sampleUsePos;
...
...
@@ -454,7 +457,7 @@ typedef struct SThreadInfo_S {
int64_t
start_time
;
char
*
cols
;
bool
use_metric
;
SSuperTable
*
s
uperTbl
Info
;
SSuperTable
*
s
tb
Info
;
char
*
buffer
;
// sql cmd buffer
// for async insert
...
...
@@ -3088,7 +3091,7 @@ int createDatabasesAndStables(char *command) {
errorPrint
(
"Failed to connect to TDengine, reason:%s
\n
"
,
taos_errstr
(
NULL
));
return
-
1
;
}
for
(
int
i
=
0
;
i
<
g_Dbs
.
dbCount
;
i
++
)
{
if
(
g_Dbs
.
db
[
i
].
drop
)
{
sprintf
(
command
,
"drop database if exists %s;"
,
g_Dbs
.
db
[
i
].
dbName
);
...
...
@@ -3099,35 +3102,43 @@ int createDatabasesAndStables(char *command) {
int
dataLen
=
0
;
dataLen
+=
snprintf
(
command
+
dataLen
,
BUFFER_SIZE
-
dataLen
,
"create database if not exists %s"
,
g_Dbs
.
db
[
i
].
dbName
);
BUFFER_SIZE
-
dataLen
,
"create database if not exists %s"
,
g_Dbs
.
db
[
i
].
dbName
);
if
(
g_Dbs
.
db
[
i
].
dbCfg
.
blocks
>
0
)
{
dataLen
+=
snprintf
(
command
+
dataLen
,
BUFFER_SIZE
-
dataLen
,
" blocks %d"
,
g_Dbs
.
db
[
i
].
dbCfg
.
blocks
);
BUFFER_SIZE
-
dataLen
,
" blocks %d"
,
g_Dbs
.
db
[
i
].
dbCfg
.
blocks
);
}
if
(
g_Dbs
.
db
[
i
].
dbCfg
.
cache
>
0
)
{
dataLen
+=
snprintf
(
command
+
dataLen
,
BUFFER_SIZE
-
dataLen
,
" cache %d"
,
g_Dbs
.
db
[
i
].
dbCfg
.
cache
);
BUFFER_SIZE
-
dataLen
,
" cache %d"
,
g_Dbs
.
db
[
i
].
dbCfg
.
cache
);
}
if
(
g_Dbs
.
db
[
i
].
dbCfg
.
days
>
0
)
{
dataLen
+=
snprintf
(
command
+
dataLen
,
BUFFER_SIZE
-
dataLen
,
" days %d"
,
g_Dbs
.
db
[
i
].
dbCfg
.
days
);
BUFFER_SIZE
-
dataLen
,
" days %d"
,
g_Dbs
.
db
[
i
].
dbCfg
.
days
);
}
if
(
g_Dbs
.
db
[
i
].
dbCfg
.
keep
>
0
)
{
dataLen
+=
snprintf
(
command
+
dataLen
,
BUFFER_SIZE
-
dataLen
,
" keep %d"
,
g_Dbs
.
db
[
i
].
dbCfg
.
keep
);
BUFFER_SIZE
-
dataLen
,
" keep %d"
,
g_Dbs
.
db
[
i
].
dbCfg
.
keep
);
}
if
(
g_Dbs
.
db
[
i
].
dbCfg
.
quorum
>
1
)
{
dataLen
+=
snprintf
(
command
+
dataLen
,
BUFFER_SIZE
-
dataLen
,
" quorum %d"
,
g_Dbs
.
db
[
i
].
dbCfg
.
quorum
);
BUFFER_SIZE
-
dataLen
,
" quorum %d"
,
g_Dbs
.
db
[
i
].
dbCfg
.
quorum
);
}
if
(
g_Dbs
.
db
[
i
].
dbCfg
.
replica
>
0
)
{
dataLen
+=
snprintf
(
command
+
dataLen
,
BUFFER_SIZE
-
dataLen
,
" replica %d"
,
g_Dbs
.
db
[
i
].
dbCfg
.
replica
);
BUFFER_SIZE
-
dataLen
,
" replica %d"
,
g_Dbs
.
db
[
i
].
dbCfg
.
replica
);
}
if
(
g_Dbs
.
db
[
i
].
dbCfg
.
update
>
0
)
{
dataLen
+=
snprintf
(
command
+
dataLen
,
BUFFER_SIZE
-
dataLen
,
" update %d"
,
g_Dbs
.
db
[
i
].
dbCfg
.
update
);
BUFFER_SIZE
-
dataLen
,
" update %d"
,
g_Dbs
.
db
[
i
].
dbCfg
.
update
);
}
//if (g_Dbs.db[i].dbCfg.maxtablesPerVnode > 0) {
// dataLen += snprintf(command + dataLen,
...
...
@@ -3135,42 +3146,48 @@ int createDatabasesAndStables(char *command) {
//}
if
(
g_Dbs
.
db
[
i
].
dbCfg
.
minRows
>
0
)
{
dataLen
+=
snprintf
(
command
+
dataLen
,
BUFFER_SIZE
-
dataLen
,
" minrows %d"
,
g_Dbs
.
db
[
i
].
dbCfg
.
minRows
);
BUFFER_SIZE
-
dataLen
,
" minrows %d"
,
g_Dbs
.
db
[
i
].
dbCfg
.
minRows
);
}
if
(
g_Dbs
.
db
[
i
].
dbCfg
.
maxRows
>
0
)
{
dataLen
+=
snprintf
(
command
+
dataLen
,
BUFFER_SIZE
-
dataLen
,
" maxrows %d"
,
g_Dbs
.
db
[
i
].
dbCfg
.
maxRows
);
BUFFER_SIZE
-
dataLen
,
" maxrows %d"
,
g_Dbs
.
db
[
i
].
dbCfg
.
maxRows
);
}
if
(
g_Dbs
.
db
[
i
].
dbCfg
.
comp
>
0
)
{
dataLen
+=
snprintf
(
command
+
dataLen
,
BUFFER_SIZE
-
dataLen
,
" comp %d"
,
g_Dbs
.
db
[
i
].
dbCfg
.
comp
);
BUFFER_SIZE
-
dataLen
,
" comp %d"
,
g_Dbs
.
db
[
i
].
dbCfg
.
comp
);
}
if
(
g_Dbs
.
db
[
i
].
dbCfg
.
walLevel
>
0
)
{
dataLen
+=
snprintf
(
command
+
dataLen
,
BUFFER_SIZE
-
dataLen
,
" wal %d"
,
g_Dbs
.
db
[
i
].
dbCfg
.
walLevel
);
BUFFER_SIZE
-
dataLen
,
" wal %d"
,
g_Dbs
.
db
[
i
].
dbCfg
.
walLevel
);
}
if
(
g_Dbs
.
db
[
i
].
dbCfg
.
cacheLast
>
0
)
{
dataLen
+=
snprintf
(
command
+
dataLen
,
BUFFER_SIZE
-
dataLen
,
" cachelast %d"
,
g_Dbs
.
db
[
i
].
dbCfg
.
cacheLast
);
BUFFER_SIZE
-
dataLen
,
" cachelast %d"
,
g_Dbs
.
db
[
i
].
dbCfg
.
cacheLast
);
}
if
(
g_Dbs
.
db
[
i
].
dbCfg
.
fsync
>
0
)
{
dataLen
+=
snprintf
(
command
+
dataLen
,
BUFFER_SIZE
-
dataLen
,
" fsync %d"
,
g_Dbs
.
db
[
i
].
dbCfg
.
fsync
);
}
if
((
0
==
strncasecmp
(
g_Dbs
.
db
[
i
].
dbCfg
.
precision
,
"ms"
,
strlen
(
"ms"
)
))
if
((
0
==
strncasecmp
(
g_Dbs
.
db
[
i
].
dbCfg
.
precision
,
"ms"
,
2
))
#if NANO_SECOND_ENABLED == 1
||
(
0
==
strncasecmp
(
g_Dbs
.
db
[
i
].
dbCfg
.
precision
,
"ns"
,
strlen
(
"ns"
)
))
"ns"
,
2
))
#endif
||
(
0
==
strncasecmp
(
g_Dbs
.
db
[
i
].
dbCfg
.
precision
,
"us"
,
strlen
(
"us"
))))
{
"us"
,
2
)))
{
dataLen
+=
snprintf
(
command
+
dataLen
,
BUFFER_SIZE
-
dataLen
,
" precision
\'
%s
\'
;"
,
g_Dbs
.
db
[
i
].
dbCfg
.
precision
);
}
if
(
0
!=
queryDbExec
(
taos
,
command
,
NO_INSERT_TYPE
,
false
))
{
taos_close
(
taos
);
errorPrint
(
"
\n
create database %s failed!
\n\n
"
,
g_Dbs
.
db
[
i
].
dbName
);
errorPrint
(
"
\n
create database %s failed!
\n\n
"
,
g_Dbs
.
db
[
i
].
dbName
);
return
-
1
;
}
printf
(
"
\n
create database %s success!
\n\n
"
,
g_Dbs
.
db
[
i
].
dbName
);
...
...
@@ -3217,7 +3234,7 @@ int createDatabasesAndStables(char *command) {
static
void
*
createTable
(
void
*
sarg
)
{
threadInfo
*
pThreadInfo
=
(
threadInfo
*
)
sarg
;
SSuperTable
*
s
uperTblInfo
=
pThreadInfo
->
superTbl
Info
;
SSuperTable
*
s
tbInfo
=
pThreadInfo
->
stb
Info
;
setThreadName
(
"createTable"
);
...
...
@@ -3247,7 +3264,7 @@ static void* createTable(void *sarg)
g_args
.
tb_prefix
,
i
,
pThreadInfo
->
cols
);
}
else
{
if
(
s
uperTbl
Info
==
NULL
)
{
if
(
s
tb
Info
==
NULL
)
{
errorPrint
(
"%s() LN%d, use metric, but super table info is NULL
\n
"
,
__func__
,
__LINE__
);
free
(
pThreadInfo
->
buffer
);
...
...
@@ -3260,12 +3277,12 @@ static void* createTable(void *sarg)
buff_len
-
len
,
"create table "
);
}
char
*
tagsValBuf
=
NULL
;
if
(
0
==
s
uperTbl
Info
->
tagSource
)
{
tagsValBuf
=
generateTagValuesForStb
(
s
uperTbl
Info
,
i
);
if
(
0
==
s
tb
Info
->
tagSource
)
{
tagsValBuf
=
generateTagValuesForStb
(
s
tb
Info
,
i
);
}
else
{
tagsValBuf
=
getTagValueFromTagSample
(
s
uperTbl
Info
,
i
%
s
uperTbl
Info
->
tagSampleCount
);
s
tb
Info
,
i
%
s
tb
Info
->
tagSampleCount
);
}
if
(
NULL
==
tagsValBuf
)
{
free
(
pThreadInfo
->
buffer
);
...
...
@@ -3274,14 +3291,14 @@ static void* createTable(void *sarg)
len
+=
snprintf
(
pThreadInfo
->
buffer
+
len
,
buff_len
-
len
,
"if not exists %s.%s%"
PRIu64
" using %s.%s tags %s "
,
pThreadInfo
->
db_name
,
s
uperTbl
Info
->
childTblPrefix
,
pThreadInfo
->
db_name
,
s
tb
Info
->
childTblPrefix
,
i
,
pThreadInfo
->
db_name
,
s
uperTbl
Info
->
sTblName
,
tagsValBuf
);
s
tb
Info
->
sTblName
,
tagsValBuf
);
free
(
tagsValBuf
);
batchNum
++
;
if
((
batchNum
<
s
uperTbl
Info
->
batchCreateTableNum
)
if
((
batchNum
<
s
tb
Info
->
batchCreateTableNum
)
&&
((
buff_len
-
len
)
>=
(
s
uperTbl
Info
->
lenOfTagOfOneRow
+
256
)))
{
>=
(
s
tb
Info
->
lenOfTagOfOneRow
+
256
)))
{
continue
;
}
}
...
...
@@ -3316,7 +3333,7 @@ static void* createTable(void *sarg)
static
int
startMultiThreadCreateChildTable
(
char
*
cols
,
int
threads
,
uint64_t
tableFrom
,
int64_t
ntables
,
char
*
db_name
,
SSuperTable
*
s
uperTbl
Info
)
{
char
*
db_name
,
SSuperTable
*
s
tb
Info
)
{
pthread_t
*
pids
=
calloc
(
1
,
threads
*
sizeof
(
pthread_t
));
threadInfo
*
infos
=
calloc
(
1
,
threads
*
sizeof
(
threadInfo
));
...
...
@@ -3343,7 +3360,7 @@ static int startMultiThreadCreateChildTable(
threadInfo
*
pThreadInfo
=
infos
+
i
;
pThreadInfo
->
threadID
=
i
;
tstrncpy
(
pThreadInfo
->
db_name
,
db_name
,
TSDB_DB_NAME_LEN
);
pThreadInfo
->
s
uperTblInfo
=
superTbl
Info
;
pThreadInfo
->
s
tbInfo
=
stb
Info
;
verbosePrint
(
"%s() %d db_name: %s
\n
"
,
__func__
,
__LINE__
,
db_name
);
pThreadInfo
->
taos
=
taos_connect
(
g_Dbs
.
host
,
...
...
@@ -3450,26 +3467,26 @@ static void createChildTables() {
/*
Read 10000 lines at most. If more than 10000 lines, continue to read after using
*/
static
int
readTagFromCsvFileToMem
(
SSuperTable
*
s
uperTbl
Info
)
{
static
int
readTagFromCsvFileToMem
(
SSuperTable
*
s
tb
Info
)
{
size_t
n
=
0
;
ssize_t
readLen
=
0
;
char
*
line
=
NULL
;
FILE
*
fp
=
fopen
(
s
uperTbl
Info
->
tagsFile
,
"r"
);
FILE
*
fp
=
fopen
(
s
tb
Info
->
tagsFile
,
"r"
);
if
(
fp
==
NULL
)
{
printf
(
"Failed to open tags file: %s, reason:%s
\n
"
,
s
uperTbl
Info
->
tagsFile
,
strerror
(
errno
));
s
tb
Info
->
tagsFile
,
strerror
(
errno
));
return
-
1
;
}
if
(
s
uperTbl
Info
->
tagDataBuf
)
{
free
(
s
uperTbl
Info
->
tagDataBuf
);
s
uperTbl
Info
->
tagDataBuf
=
NULL
;
if
(
s
tb
Info
->
tagDataBuf
)
{
free
(
s
tb
Info
->
tagDataBuf
);
s
tb
Info
->
tagDataBuf
=
NULL
;
}
int
tagCount
=
10000
;
int
count
=
0
;
char
*
tagDataBuf
=
calloc
(
1
,
s
uperTbl
Info
->
lenOfTagOfOneRow
*
tagCount
);
char
*
tagDataBuf
=
calloc
(
1
,
s
tb
Info
->
lenOfTagOfOneRow
*
tagCount
);
if
(
tagDataBuf
==
NULL
)
{
printf
(
"Failed to calloc, reason:%s
\n
"
,
strerror
(
errno
));
fclose
(
fp
);
...
...
@@ -3485,20 +3502,20 @@ static int readTagFromCsvFileToMem(SSuperTable * superTblInfo) {
continue
;
}
memcpy
(
tagDataBuf
+
count
*
s
uperTbl
Info
->
lenOfTagOfOneRow
,
line
,
readLen
);
memcpy
(
tagDataBuf
+
count
*
s
tb
Info
->
lenOfTagOfOneRow
,
line
,
readLen
);
count
++
;
if
(
count
>=
tagCount
-
1
)
{
char
*
tmp
=
realloc
(
tagDataBuf
,
(
size_t
)
tagCount
*
1
.
5
*
s
uperTbl
Info
->
lenOfTagOfOneRow
);
(
size_t
)
tagCount
*
1
.
5
*
s
tb
Info
->
lenOfTagOfOneRow
);
if
(
tmp
!=
NULL
)
{
tagDataBuf
=
tmp
;
tagCount
=
(
int
)(
tagCount
*
1
.
5
);
memset
(
tagDataBuf
+
count
*
s
uperTbl
Info
->
lenOfTagOfOneRow
,
0
,
(
size_t
)((
tagCount
-
count
)
*
s
uperTbl
Info
->
lenOfTagOfOneRow
));
memset
(
tagDataBuf
+
count
*
s
tb
Info
->
lenOfTagOfOneRow
,
0
,
(
size_t
)((
tagCount
-
count
)
*
s
tb
Info
->
lenOfTagOfOneRow
));
}
else
{
// exit, if allocate more memory failed
printf
(
"realloc fail for save tag val from %s
\n
"
,
s
uperTbl
Info
->
tagsFile
);
printf
(
"realloc fail for save tag val from %s
\n
"
,
s
tb
Info
->
tagsFile
);
tmfree
(
tagDataBuf
);
free
(
line
);
fclose
(
fp
);
...
...
@@ -3507,8 +3524,8 @@ static int readTagFromCsvFileToMem(SSuperTable * superTblInfo) {
}
}
s
uperTbl
Info
->
tagDataBuf
=
tagDataBuf
;
s
uperTbl
Info
->
tagSampleCount
=
count
;
s
tb
Info
->
tagDataBuf
=
tagDataBuf
;
s
tb
Info
->
tagSampleCount
=
count
;
free
(
line
);
fclose
(
fp
);
...
...
@@ -3519,28 +3536,28 @@ static int readTagFromCsvFileToMem(SSuperTable * superTblInfo) {
Read 10000 lines at most. If more than 10000 lines, continue to read after using
*/
static
int
readSampleFromCsvFileToMem
(
SSuperTable
*
s
uperTbl
Info
)
{
SSuperTable
*
s
tb
Info
)
{
size_t
n
=
0
;
ssize_t
readLen
=
0
;
char
*
line
=
NULL
;
int
getRows
=
0
;
FILE
*
fp
=
fopen
(
s
uperTbl
Info
->
sampleFile
,
"r"
);
FILE
*
fp
=
fopen
(
s
tb
Info
->
sampleFile
,
"r"
);
if
(
fp
==
NULL
)
{
errorPrint
(
"Failed to open sample file: %s, reason:%s
\n
"
,
s
uperTbl
Info
->
sampleFile
,
strerror
(
errno
));
s
tb
Info
->
sampleFile
,
strerror
(
errno
));
return
-
1
;
}
assert
(
s
uperTbl
Info
->
sampleDataBuf
);
memset
(
s
uperTbl
Info
->
sampleDataBuf
,
0
,
MAX_SAMPLES_ONCE_FROM_FILE
*
s
uperTbl
Info
->
lenOfOneRow
);
assert
(
s
tb
Info
->
sampleDataBuf
);
memset
(
s
tb
Info
->
sampleDataBuf
,
0
,
MAX_SAMPLES_ONCE_FROM_FILE
*
s
tb
Info
->
lenOfOneRow
);
while
(
1
)
{
readLen
=
tgetline
(
&
line
,
&
n
,
fp
);
if
(
-
1
==
readLen
)
{
if
(
0
!=
fseek
(
fp
,
0
,
SEEK_SET
))
{
errorPrint
(
"Failed to fseek file: %s, reason:%s
\n
"
,
s
uperTbl
Info
->
sampleFile
,
strerror
(
errno
));
s
tb
Info
->
sampleFile
,
strerror
(
errno
));
fclose
(
fp
);
return
-
1
;
}
...
...
@@ -3555,13 +3572,13 @@ static int readSampleFromCsvFileToMem(
continue
;
}
if
(
readLen
>
s
uperTbl
Info
->
lenOfOneRow
)
{
if
(
readLen
>
s
tb
Info
->
lenOfOneRow
)
{
printf
(
"sample row len[%d] overflow define schema len[%"
PRIu64
"], so discard this row
\n
"
,
(
int32_t
)
readLen
,
s
uperTbl
Info
->
lenOfOneRow
);
(
int32_t
)
readLen
,
s
tb
Info
->
lenOfOneRow
);
continue
;
}
memcpy
(
s
uperTblInfo
->
sampleDataBuf
+
getRows
*
superTbl
Info
->
lenOfOneRow
,
memcpy
(
s
tbInfo
->
sampleDataBuf
+
getRows
*
stb
Info
->
lenOfOneRow
,
line
,
readLen
);
getRows
++
;
...
...
@@ -5046,6 +5063,18 @@ static void postFreeResource() {
free
(
g_Dbs
.
db
[
i
].
superTbls
[
j
].
sampleDataBuf
);
g_Dbs
.
db
[
i
].
superTbls
[
j
].
sampleDataBuf
=
NULL
;
}
#if STMT_IFACE_ENABLED == 1
if
(
g_Dbs
.
db
[
i
].
superTbls
[
j
].
sampleBindArray
)
{
for
(
int
c
=
0
;
c
<
MAX_SAMPLES_ONCE_FROM_FILE
;
c
++
)
{
uintptr_t
*
tmp
=
(
uintptr_t
*
)(
*
(
uintptr_t
*
)(
g_Dbs
.
db
[
i
].
superTbls
[
j
].
sampleBindArray
+
sizeof
(
uintptr_t
*
)
*
c
));
tmfree
((
char
*
)
tmp
);
}
}
tmfree
((
char
*
)
g_Dbs
.
db
[
i
].
superTbls
[
j
].
sampleBindArray
);
#endif
if
(
0
!=
g_Dbs
.
db
[
i
].
superTbls
[
j
].
tagDataBuf
)
{
free
(
g_Dbs
.
db
[
i
].
superTbls
[
j
].
tagDataBuf
);
g_Dbs
.
db
[
i
].
superTbls
[
j
].
tagDataBuf
=
NULL
;
...
...
@@ -5066,12 +5095,12 @@ static void postFreeResource() {
tmfree
(
g_randfloat_buff
);
tmfree
(
g_rand_current_buff
);
tmfree
(
g_rand_phase_buff
);
tmfree
(
g_randdouble_buff
);
}
static
int
getRowDataFromSample
(
char
*
dataBuf
,
int64_t
maxLen
,
int64_t
timestamp
,
SSuperTable
*
s
uperTbl
Info
,
int64_t
*
sampleUsePos
)
SSuperTable
*
s
tb
Info
,
int64_t
*
sampleUsePos
)
{
if
((
*
sampleUsePos
)
==
MAX_SAMPLES_ONCE_FROM_FILE
)
{
*
sampleUsePos
=
0
;
...
...
@@ -5083,8 +5112,8 @@ static int getRowDataFromSample(
"(%"
PRId64
", "
,
timestamp
);
dataLen
+=
snprintf
(
dataBuf
+
dataLen
,
maxLen
-
dataLen
,
"%s"
,
s
uperTbl
Info
->
sampleDataBuf
+
s
uperTbl
Info
->
lenOfOneRow
*
(
*
sampleUsePos
));
s
tb
Info
->
sampleDataBuf
+
s
tb
Info
->
lenOfOneRow
*
(
*
sampleUsePos
));
dataLen
+=
snprintf
(
dataBuf
+
dataLen
,
maxLen
-
dataLen
,
")"
);
(
*
sampleUsePos
)
++
;
...
...
@@ -5257,27 +5286,27 @@ static int64_t generateData(char *recBuf, char **data_type,
return
(
int32_t
)
strlen
(
recBuf
);
}
static
int
prepareSampleDataForSTable
(
SSuperTable
*
s
uperTbl
Info
)
{
static
int
prepareSampleDataForSTable
(
SSuperTable
*
s
tb
Info
)
{
char
*
sampleDataBuf
=
NULL
;
sampleDataBuf
=
calloc
(
s
uperTbl
Info
->
lenOfOneRow
*
MAX_SAMPLES_ONCE_FROM_FILE
,
1
);
s
tb
Info
->
lenOfOneRow
*
MAX_SAMPLES_ONCE_FROM_FILE
,
1
);
if
(
sampleDataBuf
==
NULL
)
{
errorPrint
(
"%s() LN%d, Failed to calloc %"
PRIu64
" Bytes, reason:%s
\n
"
,
__func__
,
__LINE__
,
s
uperTbl
Info
->
lenOfOneRow
*
MAX_SAMPLES_ONCE_FROM_FILE
,
s
tb
Info
->
lenOfOneRow
*
MAX_SAMPLES_ONCE_FROM_FILE
,
strerror
(
errno
));
return
-
1
;
}
s
uperTbl
Info
->
sampleDataBuf
=
sampleDataBuf
;
int
ret
=
readSampleFromCsvFileToMem
(
s
uperTbl
Info
);
s
tb
Info
->
sampleDataBuf
=
sampleDataBuf
;
int
ret
=
readSampleFromCsvFileToMem
(
s
tb
Info
);
if
(
0
!=
ret
)
{
errorPrint
(
"%s() LN%d, read sample from csv file failed.
\n
"
,
__func__
,
__LINE__
);
tmfree
(
sampleDataBuf
);
s
uperTbl
Info
->
sampleDataBuf
=
NULL
;
s
tb
Info
->
sampleDataBuf
=
NULL
;
return
-
1
;
}
...
...
@@ -5287,14 +5316,14 @@ static int prepareSampleDataForSTable(SSuperTable *superTblInfo) {
static
int32_t
execInsert
(
threadInfo
*
pThreadInfo
,
uint32_t
k
)
{
int32_t
affectedRows
;
SSuperTable
*
s
uperTblInfo
=
pThreadInfo
->
superTbl
Info
;
SSuperTable
*
s
tbInfo
=
pThreadInfo
->
stb
Info
;
verbosePrint
(
"[%d] %s() LN%d %s
\n
"
,
pThreadInfo
->
threadID
,
__func__
,
__LINE__
,
pThreadInfo
->
buffer
);
uint16_t
iface
;
if
(
s
uperTbl
Info
)
iface
=
s
uperTbl
Info
->
iface
;
if
(
s
tb
Info
)
iface
=
s
tb
Info
->
iface
;
else
{
if
(
g_args
.
iface
==
INTERFACE_BUT
)
iface
=
TAOSC_IFACE
;
...
...
@@ -5342,7 +5371,7 @@ static int32_t execInsert(threadInfo *pThreadInfo, uint32_t k)
default:
errorPrint
(
"%s() LN%d: unknown insert mode: %d
\n
"
,
__func__
,
__LINE__
,
s
uperTbl
Info
->
iface
);
__func__
,
__LINE__
,
s
tb
Info
->
iface
);
affectedRows
=
0
;
}
...
...
@@ -5352,24 +5381,24 @@ static int32_t execInsert(threadInfo *pThreadInfo, uint32_t k)
static
void
getTableName
(
char
*
pTblName
,
threadInfo
*
pThreadInfo
,
uint64_t
tableSeq
)
{
SSuperTable
*
s
uperTblInfo
=
pThreadInfo
->
superTbl
Info
;
if
(
s
uperTbl
Info
)
{
if
(
AUTO_CREATE_SUBTBL
!=
s
uperTbl
Info
->
autoCreateTable
)
{
if
(
s
uperTbl
Info
->
childTblLimit
>
0
)
{
SSuperTable
*
s
tbInfo
=
pThreadInfo
->
stb
Info
;
if
(
s
tb
Info
)
{
if
(
AUTO_CREATE_SUBTBL
!=
s
tb
Info
->
autoCreateTable
)
{
if
(
s
tb
Info
->
childTblLimit
>
0
)
{
snprintf
(
pTblName
,
TSDB_TABLE_NAME_LEN
,
"%s"
,
s
uperTbl
Info
->
childTblName
+
(
tableSeq
-
s
uperTbl
Info
->
childTblOffset
)
*
TSDB_TABLE_NAME_LEN
);
s
tb
Info
->
childTblName
+
(
tableSeq
-
s
tb
Info
->
childTblOffset
)
*
TSDB_TABLE_NAME_LEN
);
}
else
{
verbosePrint
(
"[%d] %s() LN%d: from=%"
PRIu64
" count=%"
PRId64
" seq=%"
PRIu64
"
\n
"
,
pThreadInfo
->
threadID
,
__func__
,
__LINE__
,
pThreadInfo
->
start_table_from
,
pThreadInfo
->
ntables
,
tableSeq
);
snprintf
(
pTblName
,
TSDB_TABLE_NAME_LEN
,
"%s"
,
s
uperTbl
Info
->
childTblName
+
tableSeq
*
TSDB_TABLE_NAME_LEN
);
s
tb
Info
->
childTblName
+
tableSeq
*
TSDB_TABLE_NAME_LEN
);
}
}
else
{
snprintf
(
pTblName
,
TSDB_TABLE_NAME_LEN
,
"%s%"
PRIu64
""
,
s
uperTbl
Info
->
childTblPrefix
,
tableSeq
);
s
tb
Info
->
childTblPrefix
,
tableSeq
);
}
}
else
{
snprintf
(
pTblName
,
TSDB_TABLE_NAME_LEN
,
"%s%"
PRIu64
""
,
...
...
@@ -5450,7 +5479,7 @@ static int64_t getTSRandTail(int64_t timeStampStep, int32_t seq,
}
static
int32_t
generateStbDataTail
(
SSuperTable
*
s
uperTbl
Info
,
SSuperTable
*
s
tb
Info
,
uint32_t
batch
,
char
*
buffer
,
int64_t
remainderBufLen
,
int64_t
insertRows
,
uint64_t
recordFrom
,
int64_t
startTime
,
...
...
@@ -5460,7 +5489,7 @@ static int32_t generateStbDataTail(
char
*
pstr
=
buffer
;
bool
tsRand
;
if
(
0
==
strncasecmp
(
s
uperTbl
Info
->
dataSource
,
"rand"
,
strlen
(
"rand"
)))
{
if
(
0
==
strncasecmp
(
s
tb
Info
->
dataSource
,
"rand"
,
strlen
(
"rand"
)))
{
tsRand
=
true
;
}
else
{
tsRand
=
false
;
...
...
@@ -5475,26 +5504,26 @@ static int32_t generateStbDataTail(
int64_t
lenOfRow
=
0
;
if
(
tsRand
)
{
if
(
s
uperTbl
Info
->
disorderRatio
>
0
)
{
lenOfRow
=
generateStbRowData
(
s
uperTbl
Info
,
data
,
if
(
s
tb
Info
->
disorderRatio
>
0
)
{
lenOfRow
=
generateStbRowData
(
s
tb
Info
,
data
,
remainderBufLen
,
startTime
+
getTSRandTail
(
s
uperTbl
Info
->
timeStampStep
,
k
,
s
uperTbl
Info
->
disorderRatio
,
s
uperTbl
Info
->
disorderRange
)
s
tb
Info
->
timeStampStep
,
k
,
s
tb
Info
->
disorderRatio
,
s
tb
Info
->
disorderRange
)
);
}
else
{
lenOfRow
=
generateStbRowData
(
s
uperTbl
Info
,
data
,
lenOfRow
=
generateStbRowData
(
s
tb
Info
,
data
,
remainderBufLen
,
startTime
+
s
uperTbl
Info
->
timeStampStep
*
k
startTime
+
s
tb
Info
->
timeStampStep
*
k
);
}
}
else
{
lenOfRow
=
getRowDataFromSample
(
data
,
(
remainderBufLen
<
MAX_DATA_SIZE
)
?
remainderBufLen
:
MAX_DATA_SIZE
,
startTime
+
s
uperTbl
Info
->
timeStampStep
*
k
,
s
uperTbl
Info
,
startTime
+
s
tb
Info
->
timeStampStep
*
k
,
s
tb
Info
,
pSamplePos
);
}
...
...
@@ -5550,7 +5579,7 @@ static int generateSQLHeadWithoutStb(char *tableName,
}
static
int
generateStbSQLHead
(
SSuperTable
*
s
uperTbl
Info
,
SSuperTable
*
s
tb
Info
,
char
*
tableName
,
int64_t
tableSeq
,
char
*
dbName
,
char
*
buffer
,
int
remainderBufLen
)
...
...
@@ -5559,14 +5588,14 @@ static int generateStbSQLHead(
char
headBuf
[
HEAD_BUFF_LEN
];
if
(
AUTO_CREATE_SUBTBL
==
s
uperTbl
Info
->
autoCreateTable
)
{
if
(
AUTO_CREATE_SUBTBL
==
s
tb
Info
->
autoCreateTable
)
{
char
*
tagsValBuf
=
NULL
;
if
(
0
==
s
uperTbl
Info
->
tagSource
)
{
tagsValBuf
=
generateTagValuesForStb
(
s
uperTbl
Info
,
tableSeq
);
if
(
0
==
s
tb
Info
->
tagSource
)
{
tagsValBuf
=
generateTagValuesForStb
(
s
tb
Info
,
tableSeq
);
}
else
{
tagsValBuf
=
getTagValueFromTagSample
(
s
uperTbl
Info
,
tableSeq
%
s
uperTbl
Info
->
tagSampleCount
);
s
tb
Info
,
tableSeq
%
s
tb
Info
->
tagSampleCount
);
}
if
(
NULL
==
tagsValBuf
)
{
errorPrint
(
"%s() LN%d, tag buf failed to allocate memory
\n
"
,
...
...
@@ -5581,10 +5610,10 @@ static int generateStbSQLHead(
dbName
,
tableName
,
dbName
,
s
uperTbl
Info
->
sTblName
,
s
tb
Info
->
sTblName
,
tagsValBuf
);
tmfree
(
tagsValBuf
);
}
else
if
(
TBL_ALREADY_EXISTS
==
s
uperTbl
Info
->
childTblExists
)
{
}
else
if
(
TBL_ALREADY_EXISTS
==
s
tb
Info
->
childTblExists
)
{
len
=
snprintf
(
headBuf
,
HEAD_BUFF_LEN
,
...
...
@@ -5609,12 +5638,12 @@ static int generateStbSQLHead(
}
static
int32_t
generateStbInterlaceData
(
SSuperTable
*
superTbl
Info
,
threadInfo
*
pThread
Info
,
char
*
tableName
,
uint32_t
batchPerTbl
,
uint64_t
i
,
uint32_t
batchPerTblTimes
,
uint64_t
tableSeq
,
threadInfo
*
pThreadInfo
,
char
*
buffer
,
char
*
buffer
,
int64_t
insertRows
,
int64_t
startTime
,
uint64_t
*
pRemainderBufLen
)
...
...
@@ -5622,8 +5651,9 @@ static int32_t generateStbInterlaceData(
assert
(
buffer
);
char
*
pstr
=
buffer
;
SSuperTable
*
stbInfo
=
pThreadInfo
->
stbInfo
;
int
headLen
=
generateStbSQLHead
(
s
uperTbl
Info
,
s
tb
Info
,
tableName
,
tableSeq
,
pThreadInfo
->
db_name
,
pstr
,
*
pRemainderBufLen
);
...
...
@@ -5643,12 +5673,12 @@ static int32_t generateStbInterlaceData(
pThreadInfo
->
threadID
,
__func__
,
__LINE__
,
i
,
batchPerTblTimes
,
batchPerTbl
);
if
(
0
==
strncasecmp
(
s
uperTbl
Info
->
startTimestamp
,
"now"
,
3
))
{
if
(
0
==
strncasecmp
(
s
tb
Info
->
startTimestamp
,
"now"
,
3
))
{
startTime
=
taosGetTimestamp
(
pThreadInfo
->
time_precision
);
}
int32_t
k
=
generateStbDataTail
(
s
uperTbl
Info
,
s
tb
Info
,
batchPerTbl
,
pstr
,
*
pRemainderBufLen
,
insertRows
,
0
,
startTime
,
&
(
pThreadInfo
->
samplePos
),
&
dataLen
);
...
...
@@ -5911,14 +5941,14 @@ static int32_t prepareStmtBindArrayByType(TAOS_BIND *bind,
}
static
int32_t
prepareStmtWithoutStb
(
TAOS_STMT
*
stmt
,
threadInfo
*
pThreadInfo
,
char
*
tableName
,
uint32_t
batch
,
int64_t
insertRows
,
int64_t
recordFrom
,
int32_t
timePrec
,
int64_t
startTime
)
{
TAOS_STMT
*
stmt
=
pThreadInfo
->
stmt
;
int
ret
=
taos_stmt_set_tbname
(
stmt
,
tableName
);
if
(
ret
!=
0
)
{
errorPrint
(
"failed to execute taos_stmt_set_tbname(%s). return 0x%x. reason: %s
\n
"
,
...
...
@@ -5972,7 +6002,7 @@ static int32_t prepareStmtWithoutStb(
data_type
[
i
],
g_args
.
len_of_binary
,
&
ptr
,
timePrec
,
pThreadInfo
->
time_precision
,
NULL
))
{
return
-
1
;
}
...
...
@@ -6000,12 +6030,46 @@ static int32_t prepareStmtWithoutStb(
return
k
;
}
static
int32_t
prepareStbStmtBind
(
char
*
bindArray
,
SSuperTable
*
stbInfo
,
bool
sourceRand
,
static
int32_t
prepareStbStmtBindTag
(
char
*
bindArray
,
SSuperTable
*
stbInfo
,
char
*
tagsVal
,
int32_t
timePrec
)
{
char
*
bindBuffer
=
calloc
(
1
,
DOUBLE_BUFF_LEN
);
// g_args.len_of_binary);
if
(
bindBuffer
==
NULL
)
{
errorPrint
(
"%s() LN%d, Failed to allocate %d bind buffer
\n
"
,
__func__
,
__LINE__
,
g_args
.
len_of_binary
);
return
-
1
;
}
char
data
[
MAX_DATA_SIZE
];
memset
(
data
,
0
,
MAX_DATA_SIZE
);
char
*
ptr
=
data
;
TAOS_BIND
*
tag
;
for
(
int
t
=
0
;
t
<
stbInfo
->
tagCount
;
t
++
)
{
tag
=
(
TAOS_BIND
*
)((
char
*
)
bindArray
+
(
sizeof
(
TAOS_BIND
)
*
t
));
if
(
-
1
==
prepareStmtBindArrayByType
(
tag
,
stbInfo
->
tags
[
t
].
dataType
,
stbInfo
->
tags
[
t
].
dataLen
,
&
ptr
,
timePrec
,
NULL
))
{
free
(
bindBuffer
);
return
-
1
;
}
}
free
(
bindBuffer
);
return
0
;
}
static
int32_t
prepareStbStmtBindRand
(
char
*
bindArray
,
SSuperTable
*
stbInfo
,
int64_t
startTime
,
int32_t
recSeq
,
int32_t
timePrec
,
int64_t
samplePos
,
bool
isColumn
)
int32_t
timePrec
)
{
char
*
bindBuffer
=
calloc
(
1
,
DOUBLE_BUFF_LEN
);
// g_args.len_of_binary);
if
(
bindBuffer
==
NULL
)
{
...
...
@@ -6020,126 +6084,139 @@ static int32_t prepareStbStmtBind(
TAOS_BIND
*
bind
;
if
(
isColumn
)
{
int
cursor
=
0
;
for
(
int
i
=
0
;
i
<
stbInfo
->
columnCount
+
1
;
i
++
)
{
bind
=
(
TAOS_BIND
*
)((
char
*
)
bindArray
+
(
sizeof
(
TAOS_BIND
)
*
i
))
;
for
(
int
i
=
0
;
i
<
stbInfo
->
columnCount
+
1
;
i
++
)
{
bind
=
(
TAOS_BIND
*
)((
char
*
)
bindArray
+
(
sizeof
(
TAOS_BIND
)
*
i
))
;
if
(
i
==
0
)
{
int64_t
*
bind_ts
;
if
(
i
==
0
)
{
int64_t
*
bind_ts
;
bind_ts
=
(
int64_t
*
)
ptr
;
bind
->
buffer_type
=
TSDB_DATA_TYPE_TIMESTAMP
;
if
(
stbInfo
->
disorderRatio
)
{
*
bind_ts
=
startTime
+
getTSRandTail
(
stbInfo
->
timeStampStep
,
recSeq
,
stbInfo
->
disorderRatio
,
stbInfo
->
disorderRange
);
}
else
{
*
bind_ts
=
startTime
+
stbInfo
->
timeStampStep
*
recSeq
;
}
bind
->
buffer_length
=
sizeof
(
int64_t
);
bind
->
buffer
=
bind_ts
;
bind
->
length
=
&
bind
->
buffer_length
;
bind
->
is_null
=
NULL
;
ptr
+=
bind
->
buffer_length
;
}
else
if
(
-
1
==
prepareStmtBindArrayByType
(
bind
,
stbInfo
->
columns
[
i
-
1
].
dataType
,
stbInfo
->
columns
[
i
-
1
].
dataLen
,
&
ptr
,
timePrec
,
NULL
))
{
tmfree
(
bindBuffer
);
return
-
1
;
}
}
bind_ts
=
(
int64_t
*
)
ptr
;
bind
->
buffer_type
=
TSDB_DATA_TYPE_TIMESTAMP
;
if
(
stbInfo
->
disorderRatio
)
{
*
bind_ts
=
startTime
+
getTSRandTail
(
stbInfo
->
timeStampStep
,
recSeq
,
stbInfo
->
disorderRatio
,
stbInfo
->
disorderRange
);
}
else
{
*
bind_ts
=
startTime
+
stbInfo
->
timeStampStep
*
recSeq
;
}
bind
->
buffer_length
=
sizeof
(
int64_t
);
bind
->
buffer
=
bind_ts
;
bind
->
length
=
&
bind
->
buffer_length
;
bind
->
is_null
=
NULL
;
tmfree
(
bindBuffer
);
return
0
;
}
ptr
+=
bind
->
buffer_length
;
static
int32_t
prepareStbStmtBindWithSample
(
char
*
bindArray
,
SSuperTable
*
stbInfo
,
int64_t
startTime
,
int32_t
recSeq
,
int32_t
timePrec
,
int64_t
samplePos
)
{
char
*
bindBuffer
=
calloc
(
1
,
DOUBLE_BUFF_LEN
);
// g_args.len_of_binary);
if
(
bindBuffer
==
NULL
)
{
errorPrint
(
"%s() LN%d, Failed to allocate %d bind buffer
\n
"
,
__func__
,
__LINE__
,
g_args
.
len_of_binary
);
return
-
1
;
}
char
data
[
MAX_DATA_SIZE
];
memset
(
data
,
0
,
MAX_DATA_SIZE
);
char
*
ptr
=
data
;
TAOS_BIND
*
bind
;
int
cursor
=
0
;
for
(
int
i
=
0
;
i
<
stbInfo
->
columnCount
+
1
;
i
++
)
{
bind
=
(
TAOS_BIND
*
)((
char
*
)
bindArray
+
(
sizeof
(
TAOS_BIND
)
*
i
));
if
(
i
==
0
)
{
int64_t
*
bind_ts
;
bind_ts
=
(
int64_t
*
)
ptr
;
bind
->
buffer_type
=
TSDB_DATA_TYPE_TIMESTAMP
;
if
(
stbInfo
->
disorderRatio
)
{
*
bind_ts
=
startTime
+
getTSRandTail
(
stbInfo
->
timeStampStep
,
recSeq
,
stbInfo
->
disorderRatio
,
stbInfo
->
disorderRange
);
}
else
{
*
bind_ts
=
startTime
+
stbInfo
->
timeStampStep
*
recSeq
;
}
bind
->
buffer_length
=
sizeof
(
int64_t
);
bind
->
buffer
=
bind_ts
;
bind
->
length
=
&
bind
->
buffer_length
;
bind
->
is_null
=
NULL
;
if
(
sourceRand
)
{
if
(
-
1
==
prepareStmtBindArrayByType
(
bind
,
stbInfo
->
columns
[
i
-
1
].
dataType
,
stbInfo
->
columns
[
i
-
1
].
dataLen
,
&
ptr
,
timePrec
,
NULL
))
{
free
(
bindBuffer
);
return
-
1
;
}
}
else
{
char
*
restStr
=
stbInfo
->
sampleDataBuf
+
stbInfo
->
lenOfOneRow
*
samplePos
+
cursor
;
int
lengthOfRest
=
strlen
(
restStr
);
int
index
=
0
;
for
(
index
=
0
;
index
<
lengthOfRest
;
index
++
)
{
if
(
restStr
[
index
]
==
','
)
{
break
;
}
}
ptr
+=
bind
->
buffer_length
;
}
else
{
char
*
restStr
=
stbInfo
->
sampleDataBuf
+
stbInfo
->
lenOfOneRow
*
samplePos
+
cursor
;
int
lengthOfRest
=
strlen
(
restStr
);
memset
(
bindBuffer
,
0
,
DOUBLE_BUFF_LEN
);
strncpy
(
bindBuffer
,
restStr
,
index
);
cursor
+=
index
+
1
;
// skip ',' too
if
(
-
1
==
prepareStmtBindArrayByType
(
bind
,
stbInfo
->
columns
[
i
-
1
].
dataType
,
stbInfo
->
columns
[
i
-
1
].
dataLen
,
&
ptr
,
timePrec
,
bindBuffer
))
{
free
(
bindBuffer
);
return
-
1
;
}
int
index
=
0
;
for
(
index
=
0
;
index
<
lengthOfRest
;
index
++
)
{
if
(
restStr
[
index
]
==
','
)
{
break
;
}
}
}
}
else
{
TAOS_BIND
*
tag
;
for
(
int
t
=
0
;
t
<
stbInfo
->
tagCount
;
t
++
)
{
tag
=
(
TAOS_BIND
*
)((
char
*
)
bindArray
+
(
sizeof
(
TAOS_BIND
)
*
t
));
memset
(
bindBuffer
,
0
,
DOUBLE_BUFF_LEN
);
strncpy
(
bindBuffer
,
restStr
,
index
);
cursor
+=
index
+
1
;
// skip ',' too
if
(
-
1
==
prepareStmtBindArrayByType
(
tag
,
stbInfo
->
tags
[
t
].
dataType
,
stbInfo
->
tags
[
t
].
dataLen
,
bind
,
stbInfo
->
columns
[
i
-
1
].
dataType
,
stbInfo
->
columns
[
i
-
1
].
dataLen
,
&
ptr
,
timePrec
,
NULL
))
{
bindBuffer
))
{
free
(
bindBuffer
);
return
-
1
;
}
}
}
free
(
bindBuffer
);
return
0
;
}
static
int32_t
prepareStbStmt
(
SSuperTable
*
stbInfo
,
TAOS_STMT
*
stmt
,
static
int32_t
prepareStbStmtRand
(
threadInfo
*
pThreadInfo
,
char
*
tableName
,
int64_t
tableSeq
,
uint32_t
batch
,
uint64_t
insertRows
,
uint64_t
recordFrom
,
int64_t
startTime
,
int32_t
timePrec
,
int64_t
*
pSamplePos
)
int64_t
startTime
)
{
int
ret
;
bool
sourceRand
;
if
(
0
==
strncasecmp
(
stbInfo
->
dataSource
,
"rand"
,
strlen
(
"rand"
)))
{
sourceRand
=
true
;
}
else
{
sourceRand
=
false
;
// from sample data file
}
SSuperTable
*
stbInfo
=
pThreadInfo
->
stbInfo
;
TAOS_STMT
*
stmt
=
pThreadInfo
->
stmt
;
if
(
AUTO_CREATE_SUBTBL
==
stbInfo
->
autoCreateTable
)
{
char
*
tagsValBuf
=
NULL
;
bool
tagRand
;
if
(
0
==
stbInfo
->
tagSource
)
{
tagRand
=
true
;
tagsValBuf
=
generateTagValuesForStb
(
stbInfo
,
tableSeq
);
}
else
{
tagRand
=
false
;
tagsValBuf
=
getTagValueFromTagSample
(
stbInfo
,
tableSeq
%
stbInfo
->
tagSampleCount
);
...
...
@@ -6159,11 +6236,9 @@ static int32_t prepareStbStmt(
return
-
1
;
}
if
(
-
1
==
prepareStbStmtBind
(
tagsArray
,
stbInfo
,
tagRand
,
-
1
,
-
1
,
timePrec
,
*
pSamplePos
,
false
/* is tag */
))
{
if
(
-
1
==
prepareStbStmtBindTag
(
tagsArray
,
stbInfo
,
tagsValBuf
,
pThreadInfo
->
time_precision
/* is tag */
))
{
tmfree
(
tagsValBuf
);
tmfree
(
tagsArray
);
return
-
1
;
...
...
@@ -6198,11 +6273,10 @@ static int32_t prepareStbStmt(
uint32_t
k
;
for
(
k
=
0
;
k
<
batch
;)
{
/* columnCount + 1 (ts) */
if
(
-
1
==
prepareStbStmtBind
(
bindArray
,
stbInfo
,
sourceRand
,
if
(
-
1
==
prepareStbStmtBind
Rand
(
bindArray
,
stbInfo
,
startTime
,
k
,
timePrec
,
*
pSamplePos
,
true
/* is column */
))
{
pThreadInfo
->
time_precision
/* is column */
))
{
free
(
bindArray
);
return
-
1
;
}
...
...
@@ -6225,13 +6299,6 @@ static int32_t prepareStbStmt(
k
++
;
recordFrom
++
;
if
(
!
sourceRand
)
{
(
*
pSamplePos
)
++
;
if
((
*
pSamplePos
)
==
MAX_SAMPLES_ONCE_FROM_FILE
)
{
*
pSamplePos
=
0
;
}
}
if
(
recordFrom
>=
insertRows
)
{
break
;
}
...
...
@@ -6241,56 +6308,129 @@ static int32_t prepareStbStmt(
return
k
;
}
static
int32_t
prepareStbStmtInterlace
(
SSuperTable
*
stbInfo
,
TAOS_STMT
*
stmt
,
static
int32_t
prepareStbStmtWithSample
(
threadInfo
*
pThreadInfo
,
char
*
tableName
,
int64_t
tableSeq
,
uint32_t
batch
,
uint64_t
insertRows
,
uint64_t
recordFrom
,
int64_t
startTime
,
int32_t
timePrec
,
int64_t
*
pSamplePos
)
{
return
prepareStbStmt
(
stbInfo
,
stmt
,
tableName
,
tableSeq
,
batch
,
insertRows
,
0
,
startTime
,
timePrec
,
pSamplePos
);
}
int
ret
;
SSuperTable
*
stbInfo
=
pThreadInfo
->
stbInfo
;
TAOS_STMT
*
stmt
=
pThreadInfo
->
stmt
;
static
int32_t
prepareStbStmtProgressive
(
SSuperTable
*
stbInfo
,
TAOS_STMT
*
stmt
,
char
*
tableName
,
int64_t
tableSeq
,
uint32_t
batch
,
uint64_t
insertRows
,
uint64_t
recordFrom
,
int64_t
startTime
,
int32_t
timePrec
,
int64_t
*
pSamplePos
)
{
return
prepareStbStmt
(
stbInfo
,
stmt
,
tableName
,
tableSeq
,
g_args
.
num_of_RPR
,
insertRows
,
recordFrom
,
startTime
,
timePrec
,
pSamplePos
);
if
(
AUTO_CREATE_SUBTBL
==
stbInfo
->
autoCreateTable
)
{
char
*
tagsValBuf
=
NULL
;
if
(
0
==
stbInfo
->
tagSource
)
{
tagsValBuf
=
generateTagValuesForStb
(
stbInfo
,
tableSeq
);
}
else
{
tagsValBuf
=
getTagValueFromTagSample
(
stbInfo
,
tableSeq
%
stbInfo
->
tagSampleCount
);
}
if
(
NULL
==
tagsValBuf
)
{
errorPrint
(
"%s() LN%d, tag buf failed to allocate memory
\n
"
,
__func__
,
__LINE__
);
return
-
1
;
}
char
*
tagsArray
=
calloc
(
1
,
sizeof
(
TAOS_BIND
)
*
stbInfo
->
tagCount
);
if
(
NULL
==
tagsArray
)
{
tmfree
(
tagsValBuf
);
errorPrint
(
"%s() LN%d, tag buf failed to allocate memory
\n
"
,
__func__
,
__LINE__
);
return
-
1
;
}
if
(
-
1
==
prepareStbStmtBindTag
(
tagsArray
,
stbInfo
,
tagsValBuf
,
pThreadInfo
->
time_precision
/* is tag */
))
{
tmfree
(
tagsValBuf
);
tmfree
(
tagsArray
);
return
-
1
;
}
ret
=
taos_stmt_set_tbname_tags
(
stmt
,
tableName
,
(
TAOS_BIND
*
)
tagsArray
);
tmfree
(
tagsValBuf
);
tmfree
(
tagsArray
);
if
(
0
!=
ret
)
{
errorPrint
(
"%s() LN%d, stmt_set_tbname_tags() failed! reason: %s
\n
"
,
__func__
,
__LINE__
,
taos_stmt_errstr
(
stmt
));
return
-
1
;
}
}
else
{
ret
=
taos_stmt_set_tbname
(
stmt
,
tableName
);
if
(
0
!=
ret
)
{
errorPrint
(
"%s() LN%d, stmt_set_tbname() failed! reason: %s
\n
"
,
__func__
,
__LINE__
,
taos_stmt_errstr
(
stmt
));
return
-
1
;
}
}
char
*
bindArray
=
calloc
(
1
,
sizeof
(
TAOS_BIND
)
*
(
stbInfo
->
columnCount
+
1
));
if
(
bindArray
==
NULL
)
{
errorPrint
(
"%s() LN%d, Failed to allocate %d bind params
\n
"
,
__func__
,
__LINE__
,
(
stbInfo
->
columnCount
+
1
));
return
-
1
;
}
uint32_t
k
;
for
(
k
=
0
;
k
<
batch
;)
{
/* columnCount + 1 (ts) */
if
(
-
1
==
prepareStbStmtBindWithSample
(
bindArray
,
stbInfo
,
startTime
,
k
,
pThreadInfo
->
time_precision
,
*
pSamplePos
/* is column */
))
{
free
(
bindArray
);
return
-
1
;
}
ret
=
taos_stmt_bind_param
(
stmt
,
(
TAOS_BIND
*
)
bindArray
);
if
(
0
!=
ret
)
{
errorPrint
(
"%s() LN%d, stmt_bind_param() failed! reason: %s
\n
"
,
__func__
,
__LINE__
,
taos_stmt_errstr
(
stmt
));
free
(
bindArray
);
return
-
1
;
}
// if msg > 3MB, break
ret
=
taos_stmt_add_batch
(
stmt
);
if
(
0
!=
ret
)
{
errorPrint
(
"%s() LN%d, stmt_add_batch() failed! reason: %s
\n
"
,
__func__
,
__LINE__
,
taos_stmt_errstr
(
stmt
));
free
(
bindArray
);
return
-
1
;
}
k
++
;
recordFrom
++
;
(
*
pSamplePos
)
++
;
if
((
*
pSamplePos
)
==
MAX_SAMPLES_ONCE_FROM_FILE
)
{
*
pSamplePos
=
0
;
}
if
(
recordFrom
>=
insertRows
)
{
break
;
}
}
free
(
bindArray
);
return
k
;
}
#endif
static
int32_t
generateStbProgressiveData
(
SSuperTable
*
s
uperTbl
Info
,
SSuperTable
*
s
tb
Info
,
char
*
tableName
,
int64_t
tableSeq
,
char
*
dbName
,
char
*
buffer
,
...
...
@@ -6304,7 +6444,7 @@ static int32_t generateStbProgressiveData(
memset
(
pstr
,
0
,
*
pRemainderBufLen
);
int64_t
headLen
=
generateStbSQLHead
(
s
uperTbl
Info
,
s
tb
Info
,
tableName
,
tableSeq
,
dbName
,
buffer
,
*
pRemainderBufLen
);
...
...
@@ -6316,7 +6456,7 @@ static int32_t generateStbProgressiveData(
int64_t
dataLen
;
return
generateStbDataTail
(
s
uperTbl
Info
,
return
generateStbDataTail
(
s
tb
Info
,
g_args
.
num_of_RPR
,
pstr
,
*
pRemainderBufLen
,
insertRows
,
recordFrom
,
startTime
,
...
...
@@ -6376,26 +6516,34 @@ static void* syncWriteInterlace(threadInfo *pThreadInfo) {
int64_t
nTimeStampStep
;
uint64_t
insert_interval
;
SSuperTable
*
superTblInfo
=
pThreadInfo
->
superTblInfo
;
bool
sourceRand
;
SSuperTable
*
stbInfo
=
pThreadInfo
->
stbInfo
;
if
(
s
uperTbl
Info
)
{
insertRows
=
s
uperTbl
Info
->
insertRows
;
if
(
s
tb
Info
)
{
insertRows
=
s
tb
Info
->
insertRows
;
if
((
s
uperTbl
Info
->
interlaceRows
==
0
)
if
((
s
tb
Info
->
interlaceRows
==
0
)
&&
(
g_args
.
interlace_rows
>
0
))
{
interlaceRows
=
g_args
.
interlace_rows
;
}
else
{
interlaceRows
=
superTblInfo
->
interlaceRows
;
interlaceRows
=
stbInfo
->
interlaceRows
;
}
maxSqlLen
=
stbInfo
->
maxSqlLen
;
nTimeStampStep
=
stbInfo
->
timeStampStep
;
insert_interval
=
stbInfo
->
insertInterval
;
if
(
0
==
strncasecmp
(
stbInfo
->
dataSource
,
"rand"
,
4
))
{
sourceRand
=
true
;
}
else
{
sourceRand
=
false
;
// from sample data file
}
maxSqlLen
=
superTblInfo
->
maxSqlLen
;
nTimeStampStep
=
superTblInfo
->
timeStampStep
;
insert_interval
=
superTblInfo
->
insertInterval
;
}
else
{
insertRows
=
g_args
.
num_of_DPT
;
interlaceRows
=
g_args
.
interlace_rows
;
maxSqlLen
=
g_args
.
max_sql_len
;
nTimeStampStep
=
g_args
.
timestamp_step
;
insert_interval
=
g_args
.
insert_interval
;
sourceRand
=
true
;
}
debugPrint
(
"[%d] %s() LN%d: start_table_from=%"
PRIu64
" ntables=%"
PRId64
" insertRows=%"
PRIu64
"
\n
"
,
...
...
@@ -6475,29 +6623,38 @@ static void* syncWriteInterlace(threadInfo *pThreadInfo) {
uint64_t
oldRemainderLen
=
remainderBufLen
;
int32_t
generated
;
if
(
s
uperTbl
Info
)
{
if
(
s
uperTbl
Info
->
iface
==
STMT_IFACE
)
{
if
(
s
tb
Info
)
{
if
(
s
tb
Info
->
iface
==
STMT_IFACE
)
{
#if STMT_IFACE_ENABLED == 1
generated
=
prepareStbStmtInterlace
(
superTblInfo
,
pThreadInfo
->
stmt
,
tableName
,
tableSeq
,
batchPerTbl
,
insertRows
,
i
,
startTime
,
pThreadInfo
->
time_precision
,
&
(
pThreadInfo
->
samplePos
));
if
(
sourceRand
)
{
generated
=
prepareStbStmtRand
(
pThreadInfo
,
tableName
,
tableSeq
,
batchPerTbl
,
insertRows
,
0
,
startTime
);
}
else
{
generated
=
prepareStbStmtWithSample
(
pThreadInfo
,
tableName
,
tableSeq
,
batchPerTbl
,
insertRows
,
0
,
startTime
,
&
(
pThreadInfo
->
samplePos
));
}
#else
generated
=
-
1
;
#endif
}
else
{
generated
=
generateStbInterlaceData
(
superTbl
Info
,
pThread
Info
,
tableName
,
batchPerTbl
,
i
,
batchPerTblTimes
,
tableSeq
,
p
ThreadInfo
,
p
str
,
pstr
,
insertRows
,
startTime
,
&
remainderBufLen
);
...
...
@@ -6510,10 +6667,10 @@ static void* syncWriteInterlace(threadInfo *pThreadInfo) {
tableName
,
batchPerTbl
,
startTime
);
#if STMT_IFACE_ENABLED == 1
generated
=
prepareStmtWithoutStb
(
pThreadInfo
->
stmt
,
tableName
,
pThreadInfo
,
tableName
,
batchPerTbl
,
insertRows
,
i
,
pThreadInfo
->
time_precision
,
startTime
);
#else
generated
=
-
1
;
...
...
@@ -6653,12 +6810,12 @@ free_of_interlace:
static
void
*
syncWriteProgressive
(
threadInfo
*
pThreadInfo
)
{
debugPrint
(
"%s() LN%d: ### progressive write
\n
"
,
__func__
,
__LINE__
);
SSuperTable
*
s
uperTblInfo
=
pThreadInfo
->
superTbl
Info
;
uint64_t
maxSqlLen
=
s
uperTblInfo
?
superTbl
Info
->
maxSqlLen
:
g_args
.
max_sql_len
;
SSuperTable
*
s
tbInfo
=
pThreadInfo
->
stb
Info
;
uint64_t
maxSqlLen
=
s
tbInfo
?
stb
Info
->
maxSqlLen
:
g_args
.
max_sql_len
;
int64_t
timeStampStep
=
s
uperTblInfo
?
superTbl
Info
->
timeStampStep
:
g_args
.
timestamp_step
;
s
tbInfo
?
stb
Info
->
timeStampStep
:
g_args
.
timestamp_step
;
int64_t
insertRows
=
(
s
uperTblInfo
)
?
superTbl
Info
->
insertRows
:
g_args
.
num_of_DPT
;
(
s
tbInfo
)
?
stb
Info
->
insertRows
:
g_args
.
num_of_DPT
;
verbosePrint
(
"%s() LN%d insertRows=%"
PRId64
"
\n
"
,
__func__
,
__LINE__
,
insertRows
);
...
...
@@ -6677,6 +6834,17 @@ static void* syncWriteProgressive(threadInfo *pThreadInfo) {
pThreadInfo
->
totalInsertRows
=
0
;
pThreadInfo
->
totalAffectedRows
=
0
;
bool
sourceRand
;
if
(
stbInfo
)
{
if
(
0
==
strncasecmp
(
stbInfo
->
dataSource
,
"rand"
,
4
))
{
sourceRand
=
true
;
}
else
{
sourceRand
=
false
;
// from sample data file
}
}
else
{
sourceRand
=
true
;
}
pThreadInfo
->
samplePos
=
0
;
for
(
uint64_t
tableSeq
=
pThreadInfo
->
start_table_from
;
...
...
@@ -6707,25 +6875,35 @@ static void* syncWriteProgressive(threadInfo *pThreadInfo) {
remainderBufLen
-=
len
;
int32_t
generated
;
if
(
s
uperTbl
Info
)
{
if
(
s
uperTbl
Info
->
iface
==
STMT_IFACE
)
{
if
(
s
tb
Info
)
{
if
(
s
tb
Info
->
iface
==
STMT_IFACE
)
{
#if STMT_IFACE_ENABLED == 1
generated
=
prepareStbStmtProgressive
(
superTblInfo
,
pThreadInfo
->
stmt
,
tableName
,
tableSeq
,
g_args
.
num_of_RPR
,
insertRows
,
i
,
start_time
,
pThreadInfo
->
time_precision
,
&
(
pThreadInfo
->
samplePos
));
if
(
sourceRand
)
{
generated
=
prepareStbStmtRand
(
pThreadInfo
,
tableName
,
tableSeq
,
g_args
.
num_of_RPR
,
insertRows
,
i
,
start_time
);
}
else
{
generated
=
prepareStbStmtWithSample
(
pThreadInfo
,
tableName
,
tableSeq
,
g_args
.
num_of_RPR
,
insertRows
,
i
,
start_time
,
&
(
pThreadInfo
->
samplePos
));
}
#else
generated
=
-
1
;
#endif
}
else
{
generated
=
generateStbProgressiveData
(
superTblInfo
,
tableName
,
tableSeq
,
pThreadInfo
->
db_name
,
pstr
,
stbInfo
,
tableName
,
tableSeq
,
pThreadInfo
->
db_name
,
pstr
,
insertRows
,
i
,
start_time
,
&
(
pThreadInfo
->
samplePos
),
&
remainderBufLen
);
...
...
@@ -6734,11 +6912,10 @@ static void* syncWriteProgressive(threadInfo *pThreadInfo) {
if
(
g_args
.
iface
==
STMT_IFACE
)
{
#if STMT_IFACE_ENABLED == 1
generated
=
prepareStmtWithoutStb
(
pThreadInfo
->
stmt
,
pThreadInfo
,
tableName
,
g_args
.
num_of_RPR
,
insertRows
,
i
,
pThreadInfo
->
time_precision
,
start_time
);
#else
generated
=
-
1
;
...
...
@@ -6800,9 +6977,9 @@ static void* syncWriteProgressive(threadInfo *pThreadInfo) {
}
// num_of_DPT
if
((
g_args
.
verbose_print
)
&&
(
tableSeq
==
pThreadInfo
->
ntables
-
1
)
&&
(
s
uperTbl
Info
)
(
tableSeq
==
pThreadInfo
->
ntables
-
1
)
&&
(
s
tb
Info
)
&&
(
0
==
strncasecmp
(
s
uperTbl
Info
->
dataSource
,
s
tb
Info
->
dataSource
,
"sample"
,
strlen
(
"sample"
))))
{
verbosePrint
(
"%s() LN%d samplePos=%"
PRId64
"
\n
"
,
__func__
,
__LINE__
,
pThreadInfo
->
samplePos
);
...
...
@@ -6818,18 +6995,18 @@ free_of_progressive:
static
void
*
syncWrite
(
void
*
sarg
)
{
threadInfo
*
pThreadInfo
=
(
threadInfo
*
)
sarg
;
SSuperTable
*
s
uperTblInfo
=
pThreadInfo
->
superTbl
Info
;
SSuperTable
*
s
tbInfo
=
pThreadInfo
->
stb
Info
;
setThreadName
(
"syncWrite"
);
uint32_t
interlaceRows
;
if
(
s
uperTbl
Info
)
{
if
((
s
uperTbl
Info
->
interlaceRows
==
0
)
if
(
s
tb
Info
)
{
if
((
s
tb
Info
->
interlaceRows
==
0
)
&&
(
g_args
.
interlace_rows
>
0
))
{
interlaceRows
=
g_args
.
interlace_rows
;
}
else
{
interlaceRows
=
s
uperTbl
Info
->
interlaceRows
;
interlaceRows
=
s
tb
Info
->
interlaceRows
;
}
}
else
{
interlaceRows
=
g_args
.
interlace_rows
;
...
...
@@ -6846,10 +7023,10 @@ static void* syncWrite(void *sarg) {
static
void
callBack
(
void
*
param
,
TAOS_RES
*
res
,
int
code
)
{
threadInfo
*
pThreadInfo
=
(
threadInfo
*
)
param
;
SSuperTable
*
s
uperTblInfo
=
pThreadInfo
->
superTbl
Info
;
SSuperTable
*
s
tbInfo
=
pThreadInfo
->
stb
Info
;
int
insert_interval
=
s
uperTblInfo
?
superTbl
Info
->
insertInterval
:
g_args
.
insert_interval
;
s
tbInfo
?
stb
Info
->
insertInterval
:
g_args
.
insert_interval
;
if
(
insert_interval
)
{
pThreadInfo
->
et
=
taosGetTimestampMs
();
if
((
pThreadInfo
->
et
-
pThreadInfo
->
st
)
<
insert_interval
)
{
...
...
@@ -6857,13 +7034,13 @@ static void callBack(void *param, TAOS_RES *res, int code) {
}
}
char
*
buffer
=
calloc
(
1
,
pThreadInfo
->
s
uperTbl
Info
->
maxSqlLen
);
char
*
buffer
=
calloc
(
1
,
pThreadInfo
->
s
tb
Info
->
maxSqlLen
);
char
data
[
MAX_DATA_SIZE
];
char
*
pstr
=
buffer
;
pstr
+=
sprintf
(
pstr
,
"insert into %s.%s%"
PRId64
" values"
,
pThreadInfo
->
db_name
,
pThreadInfo
->
tb_prefix
,
pThreadInfo
->
start_table_from
);
// if (pThreadInfo->counter >= pThreadInfo->s
uperTbl
Info->insertRows) {
// if (pThreadInfo->counter >= pThreadInfo->s
tb
Info->insertRows) {
if
(
pThreadInfo
->
counter
>=
g_args
.
num_of_RPR
)
{
pThreadInfo
->
start_table_from
++
;
pThreadInfo
->
counter
=
0
;
...
...
@@ -6877,15 +7054,15 @@ static void callBack(void *param, TAOS_RES *res, int code) {
for
(
int
i
=
0
;
i
<
g_args
.
num_of_RPR
;
i
++
)
{
int
rand_num
=
taosRandom
()
%
100
;
if
(
0
!=
pThreadInfo
->
s
uperTbl
Info
->
disorderRatio
&&
rand_num
<
pThreadInfo
->
s
uperTbl
Info
->
disorderRatio
)
{
if
(
0
!=
pThreadInfo
->
s
tb
Info
->
disorderRatio
&&
rand_num
<
pThreadInfo
->
s
tb
Info
->
disorderRatio
)
{
int64_t
d
=
pThreadInfo
->
lastTs
-
(
taosRandom
()
%
pThreadInfo
->
s
uperTbl
Info
->
disorderRange
+
1
);
generateStbRowData
(
pThreadInfo
->
s
uperTbl
Info
,
data
,
-
(
taosRandom
()
%
pThreadInfo
->
s
tb
Info
->
disorderRange
+
1
);
generateStbRowData
(
pThreadInfo
->
s
tb
Info
,
data
,
MAX_DATA_SIZE
,
d
);
}
else
{
generateStbRowData
(
pThreadInfo
->
s
uperTbl
Info
,
generateStbRowData
(
pThreadInfo
->
s
tb
Info
,
data
,
MAX_DATA_SIZE
,
pThreadInfo
->
lastTs
+=
1000
);
...
...
@@ -6893,7 +7070,7 @@ static void callBack(void *param, TAOS_RES *res, int code) {
pstr
+=
sprintf
(
pstr
,
"%s"
,
data
);
pThreadInfo
->
counter
++
;
if
(
pThreadInfo
->
counter
>=
pThreadInfo
->
s
uperTbl
Info
->
insertRows
)
{
if
(
pThreadInfo
->
counter
>=
pThreadInfo
->
s
tb
Info
->
insertRows
)
{
break
;
}
}
...
...
@@ -6909,7 +7086,7 @@ static void callBack(void *param, TAOS_RES *res, int code) {
static
void
*
asyncWrite
(
void
*
sarg
)
{
threadInfo
*
pThreadInfo
=
(
threadInfo
*
)
sarg
;
SSuperTable
*
s
uperTblInfo
=
pThreadInfo
->
superTbl
Info
;
SSuperTable
*
s
tbInfo
=
pThreadInfo
->
stb
Info
;
setThreadName
(
"asyncWrite"
);
...
...
@@ -6918,7 +7095,7 @@ static void *asyncWrite(void *sarg) {
pThreadInfo
->
lastTs
=
pThreadInfo
->
start_time
;
int
insert_interval
=
s
uperTblInfo
?
superTbl
Info
->
insertInterval
:
g_args
.
insert_interval
;
s
tbInfo
?
stb
Info
->
insertInterval
:
g_args
.
insert_interval
;
if
(
insert_interval
)
{
pThreadInfo
->
st
=
taosGetTimestampMs
();
}
...
...
@@ -6956,15 +7133,86 @@ static int convertHostToServAddr(char *host, uint16_t port, struct sockaddr_in *
}
#if STMT_IFACE_ENABLED == 1
static
void
parseSampleFileToStmt
(
)
static
int
parseSampleFileToStmt
(
SSuperTable
*
stbInfo
,
uint32_t
timePrec
)
{
// TODO:
stbInfo
->
sampleBindArray
=
calloc
(
sizeof
(
char
*
),
MAX_SAMPLES_ONCE_FROM_FILE
);
assert
(
stbInfo
->
sampleBindArray
);
char
*
bindBuffer
=
calloc
(
1
,
DOUBLE_BUFF_LEN
);
// g_args.len_of_binary);
if
(
bindBuffer
==
NULL
)
{
errorPrint
(
"%s() LN%d, Failed to allocate %d bind buffer
\n
"
,
__func__
,
__LINE__
,
g_args
.
len_of_binary
);
return
-
1
;
}
for
(
int
i
=
0
;
i
<
MAX_SAMPLES_ONCE_FROM_FILE
;
i
++
)
{
char
*
bindArray
=
calloc
(
1
,
sizeof
(
TAOS_BIND
)
*
(
stbInfo
->
columnCount
+
1
));
if
(
bindArray
==
NULL
)
{
errorPrint
(
"%s() LN%d, Failed to allocate %d bind params
\n
"
,
__func__
,
__LINE__
,
(
stbInfo
->
columnCount
+
1
));
return
-
1
;
}
char
data
[
MAX_DATA_SIZE
];
memset
(
data
,
0
,
MAX_DATA_SIZE
);
char
*
ptr
=
data
;
TAOS_BIND
*
bind
;
int
cursor
=
0
;
for
(
int
c
=
0
;
c
<
stbInfo
->
columnCount
+
1
;
c
++
)
{
bind
=
(
TAOS_BIND
*
)((
char
*
)
bindArray
+
(
sizeof
(
TAOS_BIND
)
*
c
));
if
(
c
==
0
)
{
int64_t
*
bind_ts
;
bind_ts
=
(
int64_t
*
)
ptr
;
bind
->
buffer_type
=
TSDB_DATA_TYPE_TIMESTAMP
;
bind
->
buffer_length
=
sizeof
(
int64_t
);
bind
->
buffer
=
bind_ts
;
bind
->
length
=
&
bind
->
buffer_length
;
bind
->
is_null
=
NULL
;
ptr
+=
bind
->
buffer_length
;
}
else
{
char
*
restStr
=
stbInfo
->
sampleDataBuf
+
stbInfo
->
lenOfOneRow
*
i
+
cursor
;
int
lengthOfRest
=
strlen
(
restStr
);
int
index
=
0
;
for
(
index
=
0
;
index
<
lengthOfRest
;
index
++
)
{
if
(
restStr
[
index
]
==
','
)
{
break
;
}
}
memset
(
bindBuffer
,
0
,
DOUBLE_BUFF_LEN
);
strncpy
(
bindBuffer
,
restStr
,
index
);
cursor
+=
index
+
1
;
// skip ',' too
if
(
-
1
==
prepareStmtBindArrayByType
(
bind
,
stbInfo
->
columns
[
c
-
1
].
dataType
,
stbInfo
->
columns
[
c
-
1
].
dataLen
,
&
ptr
,
timePrec
,
bindBuffer
))
{
free
(
bindBuffer
);
return
-
1
;
}
}
}
*
((
uintptr_t
*
)(
stbInfo
->
sampleBindArray
+
(
sizeof
(
char
*
))
*
i
))
=
(
uintptr_t
)
bindArray
;
}
free
(
bindBuffer
);
return
0
;
}
#endif
static
void
startMultiThreadInsertData
(
int
threads
,
char
*
db_name
,
char
*
precision
,
SSuperTable
*
s
uperTbl
Info
)
{
char
*
precision
,
SSuperTable
*
s
tb
Info
)
{
int32_t
timePrec
=
TSDB_TIME_PRECISION_MILLI
;
if
(
0
!=
precision
[
0
])
{
...
...
@@ -6983,14 +7231,14 @@ static void startMultiThreadInsertData(int threads, char* db_name,
}
int64_t
start_time
;
if
(
s
uperTbl
Info
)
{
if
(
0
==
strncasecmp
(
s
uperTbl
Info
->
startTimestamp
,
"now"
,
3
))
{
if
(
s
tb
Info
)
{
if
(
0
==
strncasecmp
(
s
tb
Info
->
startTimestamp
,
"now"
,
3
))
{
start_time
=
taosGetTimestamp
(
timePrec
);
}
else
{
if
(
TSDB_CODE_SUCCESS
!=
taosParseTime
(
s
uperTbl
Info
->
startTimestamp
,
s
tb
Info
->
startTimestamp
,
&
start_time
,
strlen
(
s
uperTbl
Info
->
startTimestamp
),
strlen
(
s
tb
Info
->
startTimestamp
),
timePrec
,
0
))
{
ERROR_EXIT
(
"failed to parse time!
\n
"
);
}
...
...
@@ -7004,9 +7252,9 @@ static void startMultiThreadInsertData(int threads, char* db_name,
int64_t
start
=
taosGetTimestampMs
();
// read sample data from file first
if
((
s
uperTblInfo
)
&&
(
0
==
strncasecmp
(
superTbl
Info
->
dataSource
,
if
((
s
tbInfo
)
&&
(
0
==
strncasecmp
(
stb
Info
->
dataSource
,
"sample"
,
strlen
(
"sample"
))))
{
if
(
0
!=
prepareSampleDataForSTable
(
s
uperTbl
Info
))
{
if
(
0
!=
prepareSampleDataForSTable
(
s
tb
Info
))
{
errorPrint
(
"%s() LN%d, prepare sample data for stable failed!
\n
"
,
__func__
,
__LINE__
);
exit
(
-
1
);
...
...
@@ -7025,52 +7273,52 @@ static void startMultiThreadInsertData(int threads, char* db_name,
int64_t
ntables
=
0
;
uint64_t
tableFrom
;
if
(
s
uperTbl
Info
)
{
if
(
s
tb
Info
)
{
int64_t
limit
;
uint64_t
offset
;
if
((
NULL
!=
g_args
.
sqlFile
)
&&
(
s
uperTbl
Info
->
childTblExists
==
TBL_NO_EXISTS
)
&&
((
s
uperTbl
Info
->
childTblOffset
!=
0
)
||
(
s
uperTbl
Info
->
childTblLimit
>=
0
)))
{
&&
(
s
tb
Info
->
childTblExists
==
TBL_NO_EXISTS
)
&&
((
s
tb
Info
->
childTblOffset
!=
0
)
||
(
s
tb
Info
->
childTblLimit
>=
0
)))
{
printf
(
"WARNING: offset and limit will not be used since the child tables not exists!
\n
"
);
}
if
(
s
uperTbl
Info
->
childTblExists
==
TBL_ALREADY_EXISTS
)
{
if
((
s
uperTbl
Info
->
childTblLimit
<
0
)
||
((
s
uperTbl
Info
->
childTblOffset
+
s
uperTbl
Info
->
childTblLimit
)
>
(
s
uperTbl
Info
->
childTblCount
)))
{
s
uperTbl
Info
->
childTblLimit
=
s
uperTblInfo
->
childTblCount
-
superTbl
Info
->
childTblOffset
;
if
(
s
tb
Info
->
childTblExists
==
TBL_ALREADY_EXISTS
)
{
if
((
s
tb
Info
->
childTblLimit
<
0
)
||
((
s
tb
Info
->
childTblOffset
+
s
tb
Info
->
childTblLimit
)
>
(
s
tb
Info
->
childTblCount
)))
{
s
tb
Info
->
childTblLimit
=
s
tbInfo
->
childTblCount
-
stb
Info
->
childTblOffset
;
}
offset
=
s
uperTbl
Info
->
childTblOffset
;
limit
=
s
uperTbl
Info
->
childTblLimit
;
offset
=
s
tb
Info
->
childTblOffset
;
limit
=
s
tb
Info
->
childTblLimit
;
}
else
{
limit
=
s
uperTbl
Info
->
childTblCount
;
limit
=
s
tb
Info
->
childTblCount
;
offset
=
0
;
}
ntables
=
limit
;
tableFrom
=
offset
;
if
((
s
uperTbl
Info
->
childTblExists
!=
TBL_NO_EXISTS
)
&&
((
s
uperTblInfo
->
childTblOffset
+
superTblInfo
->
childTblLimit
)
>
s
uperTbl
Info
->
childTblCount
))
{
if
((
s
tb
Info
->
childTblExists
!=
TBL_NO_EXISTS
)
&&
((
s
tbInfo
->
childTblOffset
+
stbInfo
->
childTblLimit
)
>
s
tb
Info
->
childTblCount
))
{
printf
(
"WARNING: specified offset + limit > child table count!
\n
"
);
prompt
();
}
if
((
s
uperTbl
Info
->
childTblExists
!=
TBL_NO_EXISTS
)
&&
(
0
==
s
uperTbl
Info
->
childTblLimit
))
{
if
((
s
tb
Info
->
childTblExists
!=
TBL_NO_EXISTS
)
&&
(
0
==
s
tb
Info
->
childTblLimit
))
{
printf
(
"WARNING: specified limit = 0, which cannot find table name to insert or query!
\n
"
);
prompt
();
}
s
uperTbl
Info
->
childTblName
=
(
char
*
)
calloc
(
1
,
s
tb
Info
->
childTblName
=
(
char
*
)
calloc
(
1
,
limit
*
TSDB_TABLE_NAME_LEN
);
if
(
s
uperTbl
Info
->
childTblName
==
NULL
)
{
if
(
s
tb
Info
->
childTblName
==
NULL
)
{
errorPrint
(
"%s() LN%d, alloc memory failed!
\n
"
,
__func__
,
__LINE__
);
taos_close
(
taos0
);
exit
(
-
1
);
...
...
@@ -7079,8 +7327,8 @@ static void startMultiThreadInsertData(int threads, char* db_name,
int64_t
childTblCount
;
getChildNameOfSuperTableWithLimitAndOffset
(
taos0
,
db_name
,
s
uperTbl
Info
->
sTblName
,
&
s
uperTbl
Info
->
childTblName
,
&
childTblCount
,
db_name
,
s
tb
Info
->
sTblName
,
&
s
tb
Info
->
childTblName
,
&
childTblCount
,
limit
,
offset
);
}
else
{
...
...
@@ -7101,8 +7349,8 @@ static void startMultiThreadInsertData(int threads, char* db_name,
b
=
ntables
%
threads
;
}
if
((
s
uperTbl
Info
)
&&
(
s
uperTbl
Info
->
iface
==
REST_IFACE
))
{
if
((
s
tb
Info
)
&&
(
s
tb
Info
->
iface
==
REST_IFACE
))
{
if
(
convertHostToServAddr
(
g_Dbs
.
host
,
g_Dbs
.
port
,
&
(
g_Dbs
.
serv_addr
))
!=
0
)
{
exit
(
-
1
);
...
...
@@ -7122,16 +7370,16 @@ static void startMultiThreadInsertData(int threads, char* db_name,
char
*
stmtBuffer
=
calloc
(
1
,
BUFFER_SIZE
);
assert
(
stmtBuffer
);
if
((
g_args
.
iface
==
STMT_IFACE
)
||
((
s
uperTbl
Info
)
&&
(
s
uperTbl
Info
->
iface
==
STMT_IFACE
)))
{
||
((
s
tb
Info
)
&&
(
s
tb
Info
->
iface
==
STMT_IFACE
)))
{
char
*
pstr
=
stmtBuffer
;
if
((
s
uperTbl
Info
)
if
((
s
tb
Info
)
&&
(
AUTO_CREATE_SUBTBL
==
s
uperTbl
Info
->
autoCreateTable
))
{
==
s
tb
Info
->
autoCreateTable
))
{
pstr
+=
sprintf
(
pstr
,
"INSERT INTO ? USING %s TAGS(?"
,
s
uperTbl
Info
->
sTblName
);
for
(
int
tag
=
0
;
tag
<
(
s
uperTbl
Info
->
tagCount
-
1
);
s
tb
Info
->
sTblName
);
for
(
int
tag
=
0
;
tag
<
(
s
tb
Info
->
tagCount
-
1
);
tag
++
)
{
pstr
+=
sprintf
(
pstr
,
",?"
);
}
...
...
@@ -7141,8 +7389,8 @@ static void startMultiThreadInsertData(int threads, char* db_name,
}
int
columnCount
;
if
(
s
uperTbl
Info
)
{
columnCount
=
s
uperTbl
Info
->
columnCount
;
if
(
s
tb
Info
)
{
columnCount
=
s
tb
Info
->
columnCount
;
}
else
{
columnCount
=
g_args
.
num_of_CPR
;
}
...
...
@@ -7154,7 +7402,10 @@ static void startMultiThreadInsertData(int threads, char* db_name,
debugPrint
(
"%s() LN%d, stmtBuffer: %s"
,
__func__
,
__LINE__
,
stmtBuffer
);
parseSampleFileToStmt
();
if
((
stbInfo
)
&&
(
0
==
strncasecmp
(
stbInfo
->
dataSource
,
"sample"
,
strlen
(
"sample"
))))
{
parseSampleFileToStmt
(
stbInfo
,
timePrec
);
}
}
#endif
...
...
@@ -7164,13 +7415,13 @@ static void startMultiThreadInsertData(int threads, char* db_name,
tstrncpy
(
pThreadInfo
->
db_name
,
db_name
,
TSDB_DB_NAME_LEN
);
pThreadInfo
->
time_precision
=
timePrec
;
pThreadInfo
->
s
uperTblInfo
=
superTbl
Info
;
pThreadInfo
->
s
tbInfo
=
stb
Info
;
pThreadInfo
->
start_time
=
start_time
;
pThreadInfo
->
minDelay
=
UINT64_MAX
;
if
((
NULL
==
s
uperTbl
Info
)
||
(
s
uperTbl
Info
->
iface
!=
REST_IFACE
))
{
if
((
NULL
==
s
tb
Info
)
||
(
s
tb
Info
->
iface
!=
REST_IFACE
))
{
//t_info->taos = taos;
pThreadInfo
->
taos
=
taos_connect
(
g_Dbs
.
host
,
g_Dbs
.
user
,
...
...
@@ -7186,8 +7437,8 @@ static void startMultiThreadInsertData(int threads, char* db_name,
#if STMT_IFACE_ENABLED == 1
if
((
g_args
.
iface
==
STMT_IFACE
)
||
((
s
uperTbl
Info
)
&&
(
s
uperTbl
Info
->
iface
==
STMT_IFACE
)))
{
||
((
s
tb
Info
)
&&
(
s
tb
Info
->
iface
==
STMT_IFACE
)))
{
pThreadInfo
->
stmt
=
taos_stmt_init
(
pThreadInfo
->
taos
);
...
...
@@ -7216,8 +7467,8 @@ static void startMultiThreadInsertData(int threads, char* db_name,
pThreadInfo
->
taos
=
NULL
;
}
/* if ((NULL == s
uperTbl
Info)
|| (0 == s
uperTbl
Info->multiThreadWriteOneTbl)) {
/* if ((NULL == s
tb
Info)
|| (0 == s
tb
Info->multiThreadWriteOneTbl)) {
*/
pThreadInfo
->
start_table_from
=
tableFrom
;
pThreadInfo
->
ntables
=
i
<
b
?
a
+
1
:
a
;
...
...
@@ -7225,7 +7476,7 @@ static void startMultiThreadInsertData(int threads, char* db_name,
tableFrom
=
pThreadInfo
->
end_table_to
+
1
;
/* } else {
pThreadInfo->start_table_from = 0;
pThreadInfo->ntables = s
uperTbl
Info->childTblCount;
pThreadInfo->ntables = s
tb
Info->childTblCount;
pThreadInfo->start_time = pThreadInfo->start_time + rand_int() % 10000 - rand_tinyint();
}
*/
...
...
@@ -7268,9 +7519,9 @@ static void startMultiThreadInsertData(int threads, char* db_name,
__func__
,
__LINE__
,
pThreadInfo
->
threadID
,
pThreadInfo
->
totalInsertRows
,
pThreadInfo
->
totalAffectedRows
);
if
(
s
uperTbl
Info
)
{
s
uperTbl
Info
->
totalAffectedRows
+=
pThreadInfo
->
totalAffectedRows
;
s
uperTbl
Info
->
totalInsertRows
+=
pThreadInfo
->
totalInsertRows
;
if
(
s
tb
Info
)
{
s
tb
Info
->
totalAffectedRows
+=
pThreadInfo
->
totalAffectedRows
;
s
tb
Info
->
totalInsertRows
+=
pThreadInfo
->
totalInsertRows
;
}
else
{
g_args
.
totalAffectedRows
+=
pThreadInfo
->
totalAffectedRows
;
g_args
.
totalInsertRows
+=
pThreadInfo
->
totalInsertRows
;
...
...
@@ -7291,22 +7542,22 @@ static void startMultiThreadInsertData(int threads, char* db_name,
double
tInMs
=
t
/
1000
.
0
;
if
(
s
uperTbl
Info
)
{
if
(
s
tb
Info
)
{
fprintf
(
stderr
,
"Spent %.2f seconds to insert rows: %"
PRIu64
", affected rows: %"
PRIu64
" with %d thread(s) into %s.%s. %.2f records/second
\n\n
"
,
tInMs
,
s
uperTbl
Info
->
totalInsertRows
,
s
uperTbl
Info
->
totalAffectedRows
,
threads
,
db_name
,
s
uperTbl
Info
->
sTblName
,
tInMs
,
s
tb
Info
->
totalInsertRows
,
s
tb
Info
->
totalAffectedRows
,
threads
,
db_name
,
s
tb
Info
->
sTblName
,
(
tInMs
)
?
(
double
)(
s
uperTbl
Info
->
totalInsertRows
/
tInMs
)
:
FLT_MAX
);
(
double
)(
s
tb
Info
->
totalInsertRows
/
tInMs
)
:
FLT_MAX
);
if
(
g_fpOfInsertResult
)
{
fprintf
(
g_fpOfInsertResult
,
"Spent %.2f seconds to insert rows: %"
PRIu64
", affected rows: %"
PRIu64
" with %d thread(s) into %s.%s. %.2f records/second
\n\n
"
,
tInMs
,
s
uperTbl
Info
->
totalInsertRows
,
s
uperTbl
Info
->
totalAffectedRows
,
threads
,
db_name
,
s
uperTbl
Info
->
sTblName
,
tInMs
,
s
tb
Info
->
totalInsertRows
,
s
tb
Info
->
totalAffectedRows
,
threads
,
db_name
,
s
tb
Info
->
sTblName
,
(
tInMs
)
?
(
double
)(
s
uperTbl
Info
->
totalInsertRows
/
tInMs
)
:
FLT_MAX
);
(
double
)(
s
tb
Info
->
totalInsertRows
/
tInMs
)
:
FLT_MAX
);
}
}
else
{
fprintf
(
stderr
,
"Spent %.2f seconds to insert rows: %"
PRIu64
", affected rows: %"
PRIu64
" with %d thread(s) into %s %.2f records/second
\n\n
"
,
...
...
@@ -7361,8 +7612,8 @@ static void *readTable(void *sarg) {
}
int64_t
num_of_DPT
;
/* if (pThreadInfo->s
uperTbl
Info) {
num_of_DPT = pThreadInfo->s
uperTbl
Info->insertRows; // nrecords_per_table;
/* if (pThreadInfo->s
tb
Info) {
num_of_DPT = pThreadInfo->s
tb
Info->insertRows; // nrecords_per_table;
} else {
*/
num_of_DPT
=
g_args
.
num_of_DPT
;
...
...
@@ -7436,7 +7687,7 @@ static void *readMetric(void *sarg) {
return
NULL
;
}
int64_t
num_of_DPT
=
pThreadInfo
->
s
uperTbl
Info
->
insertRows
;
int64_t
num_of_DPT
=
pThreadInfo
->
s
tb
Info
->
insertRows
;
int64_t
num_of_tables
=
pThreadInfo
->
ntables
;
// rinfo->end_table_to - rinfo->start_table_from + 1;
int64_t
totalData
=
num_of_DPT
*
num_of_tables
;
bool
do_aggreFunc
=
g_Dbs
.
do_aggreFunc
;
...
...
@@ -7575,14 +7826,14 @@ static int insertTestProcess() {
if
(
g_Dbs
.
db
[
i
].
superTblCount
>
0
)
{
for
(
uint64_t
j
=
0
;
j
<
g_Dbs
.
db
[
i
].
superTblCount
;
j
++
)
{
SSuperTable
*
s
uperTbl
Info
=
&
g_Dbs
.
db
[
i
].
superTbls
[
j
];
SSuperTable
*
s
tb
Info
=
&
g_Dbs
.
db
[
i
].
superTbls
[
j
];
if
(
s
uperTblInfo
&&
(
superTbl
Info
->
insertRows
>
0
))
{
if
(
s
tbInfo
&&
(
stb
Info
->
insertRows
>
0
))
{
startMultiThreadInsertData
(
g_Dbs
.
threadCount
,
g_Dbs
.
db
[
i
].
dbName
,
g_Dbs
.
db
[
i
].
dbCfg
.
precision
,
s
uperTbl
Info
);
s
tb
Info
);
}
}
}
...
...
@@ -8697,7 +8948,7 @@ static void queryResult() {
if
(
g_args
.
use_metric
)
{
pThreadInfo
->
ntables
=
g_Dbs
.
db
[
0
].
superTbls
[
0
].
childTblCount
;
pThreadInfo
->
end_table_to
=
g_Dbs
.
db
[
0
].
superTbls
[
0
].
childTblCount
-
1
;
pThreadInfo
->
s
uperTbl
Info
=
&
g_Dbs
.
db
[
0
].
superTbls
[
0
];
pThreadInfo
->
s
tb
Info
=
&
g_Dbs
.
db
[
0
].
superTbls
[
0
];
tstrncpy
(
pThreadInfo
->
tb_prefix
,
g_Dbs
.
db
[
0
].
superTbls
[
0
].
childTblPrefix
,
TBNAME_PREFIX_LEN
);
}
else
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录