Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
e5a36038
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看板
提交
e5a36038
编写于
10月 27, 2020
作者:
F
freemine
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'upstream/develop' into odbc
上级
3b13a3f0
7354ae1a
变更
16
隐藏空白更改
内联
并排
Showing
16 changed file
with
131 addition
and
101 deletion
+131
-101
Jenkinsfile
Jenkinsfile
+8
-1
src/client/src/tscFunctionImpl.c
src/client/src/tscFunctionImpl.c
+14
-4
src/client/src/tscSubquery.c
src/client/src/tscSubquery.c
+26
-25
src/client/src/tscUtil.c
src/client/src/tscUtil.c
+2
-0
src/mnode/src/mnodeProfile.c
src/mnode/src/mnodeProfile.c
+1
-1
src/query/src/qExecutor.c
src/query/src/qExecutor.c
+10
-8
tests/pytest/fulltest.sh
tests/pytest/fulltest.sh
+1
-1
tests/pytest/stream/new.py
tests/pytest/stream/new.py
+14
-6
tests/script/general/parser/groupby.sim
tests/script/general/parser/groupby.sim
+1
-1
tests/script/general/parser/join.sim
tests/script/general/parser/join.sim
+1
-1
tests/script/general/parser/join_multivnode.sim
tests/script/general/parser/join_multivnode.sim
+1
-1
tests/script/general/parser/projection_limit_offset.sim
tests/script/general/parser/projection_limit_offset.sim
+1
-1
tests/script/general/parser/sliding.sim
tests/script/general/parser/sliding.sim
+1
-1
tests/script/general/parser/testSuite.sim
tests/script/general/parser/testSuite.sim
+48
-48
tests/script/general/parser/union.sim
tests/script/general/parser/union.sim
+1
-1
tests/script/general/parser/where.sim
tests/script/general/parser/where.sim
+1
-1
未找到文件。
Jenkinsfile
浏览文件 @
e5a36038
...
...
@@ -79,7 +79,14 @@ pipeline {
cmake .. > /dev/null
make > /dev/null
cd ${WKC}/tests/pytest
./crash_gen.sh -a -p -t 4 -s 2000
'''
catchError
(
buildResult:
'SUCCESS'
,
stageResult:
'FAILURE'
)
{
sh
'''
cd ${WKC}/tests/pytest
./crash_gen.sh -a -p -t 4 -s 2000
'''
}
sh
'''
date
cd ${WKC}/tests
./test-all.sh b2
...
...
src/client/src/tscFunctionImpl.c
浏览文件 @
e5a36038
...
...
@@ -2461,12 +2461,22 @@ static void percentile_function(SQLFunctionCtx *pCtx) {
// the first stage, only acquire the min/max value
if
(
pInfo
->
stage
==
0
)
{
if
(
pCtx
->
preAggVals
.
isSet
)
{
if
(
GET_DOUBLE_VAL
(
&
pInfo
->
minval
)
>
pCtx
->
preAggVals
.
statis
.
min
)
{
SET_DOUBLE_VAL
(
&
pInfo
->
minval
,
(
double
)
pCtx
->
preAggVals
.
statis
.
min
);
double
tmin
=
0
.
0
,
tmax
=
0
.
0
;
if
(
pCtx
->
inputType
>=
TSDB_DATA_TYPE_TINYINT
&&
pCtx
->
inputType
<=
TSDB_DATA_TYPE_BIGINT
)
{
tmin
=
(
double
)
GET_INT64_VAL
(
&
pCtx
->
preAggVals
.
statis
.
min
);
tmax
=
(
double
)
GET_INT64_VAL
(
&
pCtx
->
preAggVals
.
statis
.
max
);
}
else
if
(
pCtx
->
inputType
==
TSDB_DATA_TYPE_DOUBLE
||
pCtx
->
inputType
==
TSDB_DATA_TYPE_FLOAT
)
{
tmin
=
GET_DOUBLE_VAL
(
&
pCtx
->
preAggVals
.
statis
.
min
);
tmax
=
GET_DOUBLE_VAL
(
&
pCtx
->
preAggVals
.
statis
.
max
);
}
else
{
assert
(
true
);
}
if
(
GET_DOUBLE_VAL
(
&
pInfo
->
minval
)
>
tmin
)
{
SET_DOUBLE_VAL
(
&
pInfo
->
minval
,
tmin
);
}
if
(
GET_DOUBLE_VAL
(
&
pInfo
->
maxval
)
<
pCtx
->
preAggVals
.
statis
.
max
)
{
SET_DOUBLE_VAL
(
&
pInfo
->
maxval
,
(
double
)
pCtx
->
preAggVals
.
statis
.
max
);
if
(
GET_DOUBLE_VAL
(
&
pInfo
->
maxval
)
<
t
max
)
{
SET_DOUBLE_VAL
(
&
pInfo
->
maxval
,
t
max
);
}
pInfo
->
numOfElems
+=
(
pCtx
->
size
-
pCtx
->
preAggVals
.
statis
.
numOfNull
);
...
...
src/client/src/tscSubquery.c
浏览文件 @
e5a36038
...
...
@@ -219,6 +219,11 @@ static void tscDestroyJoinSupporter(SJoinSupporter* pSupporter) {
pSupporter
->
f
=
NULL
;
}
if
(
pSupporter
->
pVgroupTables
!=
NULL
)
{
taosArrayDestroy
(
pSupporter
->
pVgroupTables
);
pSupporter
->
pVgroupTables
=
NULL
;
}
taosTFree
(
pSupporter
->
pIdTagList
);
tscTagCondRelease
(
&
pSupporter
->
tagCond
);
free
(
pSupporter
);
...
...
@@ -327,6 +332,7 @@ static int32_t tscLaunchRealSubqueries(SSqlObj* pSql) {
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pNewQueryInfo
,
0
);
pTableMetaInfo
->
pVgroupTables
=
pSupporter
->
pVgroupTables
;
pSupporter
->
pVgroupTables
=
NULL
;
/*
* When handling the projection query, the offset value will be modified for table-table join, which is changed
...
...
@@ -359,7 +365,7 @@ static int32_t tscLaunchRealSubqueries(SSqlObj* pSql) {
int16_t
colId
=
tscGetJoinTagColIdByUid
(
&
pQueryInfo
->
tagCond
,
pTableMetaInfo
->
pTableMeta
->
id
.
uid
);
// set the tag column id for executor to extract correct tag value
pExpr
->
param
[
0
]
.
i64Key
=
colId
;
pExpr
->
param
[
0
]
=
(
tVariant
)
{.
i64Key
=
colId
,
.
nType
=
TSDB_DATA_TYPE_BIGINT
,
.
nLen
=
sizeof
(
int64_t
)}
;
pExpr
->
numOfParams
=
1
;
}
...
...
@@ -388,25 +394,6 @@ static int32_t tscLaunchRealSubqueries(SSqlObj* pSql) {
assert
(
taosArrayGetSize
(
pTableMetaInfo
->
pVgroupTables
)
>
0
);
TSDB_QUERY_SET_TYPE
(
pQueryInfo
->
type
,
TSDB_QUERY_TYPE_MULTITABLE_QUERY
);
}
else
{
// TODO remove unnecessarily accessed vnode
// pTableMetaInfo->vgroupList->
// for(int32_t k = 0; k < taosArrayGetSize(pTableMetaInfo->pVgroupTables);) {
// SVgroupTableInfo* p = taosArrayGet(pTableMetaInfo->pVgroupTables, k);
//
// bool found = false;
// for(int32_t f = 0; f < num; ++f) {
// if (p->vgInfo.vgId == list[f]) {
// found = true;
// break;
// }
// }
//
// if (!found) {
// tscRemoveVgroupTableGroup(pTableMetaInfo->pVgroupTables, k);
// } else {
// k++;
// }
// }
}
taosTFree
(
list
);
...
...
@@ -1023,15 +1010,28 @@ void tscFetchDatablockFromSubquery(SSqlObj* pSql) {
// If at least one subquery is completed in current vnode, try the next vnode in case of multi-vnode
// super table projection query.
if
(
numOfFetch
<=
0
&&
!
reachLimit
)
{
if
(
reachLimit
)
{
pSql
->
res
.
completed
=
true
;
freeJoinSubqueryObj
(
pSql
);
if
(
pSql
->
res
.
code
==
TSDB_CODE_SUCCESS
)
{
(
*
pSql
->
fp
)(
pSql
->
param
,
pSql
,
0
);
}
else
{
tscQueueAsyncRes
(
pSql
);
}
return
;
}
if
(
numOfFetch
<=
0
)
{
bool
tryNextVnode
=
false
;
SSqlObj
*
pp
=
pSql
->
pSubs
[
0
];
SSqlObj
*
pp
=
pSql
->
pSubs
[
0
];
SQueryInfo
*
pi
=
tscGetQueryInfoDetail
(
&
pp
->
cmd
,
0
);
// get the number of subquery that need to retrieve the next vnode.
if
(
tscNonOrderedProjectionQueryOnSTable
(
pi
,
0
))
{
for
(
int32_t
i
=
0
;
i
<
pSql
->
subState
.
numOfSub
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
pSql
->
subState
.
numOfSub
;
++
i
)
{
SSqlObj
*
pSub
=
pSql
->
pSubs
[
i
];
if
(
pSub
!=
NULL
&&
pSub
->
res
.
row
>=
pSub
->
res
.
numOfRows
&&
pSub
->
res
.
completed
)
{
pSql
->
subState
.
numOfRemain
++
;
...
...
@@ -1047,7 +1047,8 @@ void tscFetchDatablockFromSubquery(SSqlObj* pSql) {
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfoDetail
(
&
pSub
->
cmd
,
0
);
if
(
tscNonOrderedProjectionQueryOnSTable
(
pQueryInfo
,
0
)
&&
pSub
->
res
.
row
>=
pSub
->
res
.
numOfRows
&&
pSub
->
res
.
completed
)
{
if
(
tscNonOrderedProjectionQueryOnSTable
(
pQueryInfo
,
0
)
&&
pSub
->
res
.
row
>=
pSub
->
res
.
numOfRows
&&
pSub
->
res
.
completed
)
{
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
assert
(
pQueryInfo
->
numOfTables
==
1
);
...
...
@@ -1085,7 +1086,7 @@ void tscFetchDatablockFromSubquery(SSqlObj* pSql) {
}
else
{
tscQueueAsyncRes
(
pSql
);
}
return
;
}
...
...
src/client/src/tscUtil.c
浏览文件 @
e5a36038
...
...
@@ -1121,6 +1121,8 @@ int32_t tscSqlExprCopy(SArray* dst, const SArray* src, uint64_t uid, bool deepco
}
*
p1
=
*
pExpr
;
memset
(
p1
->
param
,
0
,
sizeof
(
tVariant
)
*
tListLen
(
p1
->
param
));
for
(
int32_t
j
=
0
;
j
<
pExpr
->
numOfParams
;
++
j
)
{
tVariantAssign
(
&
p1
->
param
[
j
],
&
pExpr
->
param
[
j
]);
}
...
...
src/mnode/src/mnodeProfile.c
浏览文件 @
e5a36038
...
...
@@ -182,7 +182,7 @@ static int32_t mnodeGetConnsMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pC
// app name
pShow
->
bytes
[
cols
]
=
TSDB_APPNAME_LEN
+
VARSTR_HEADER_SIZE
;
pSchema
[
cols
].
type
=
TSDB_DATA_TYPE_BINARY
;
strcpy
(
pSchema
[
cols
].
name
,
"
app_name
"
);
strcpy
(
pSchema
[
cols
].
name
,
"
program
"
);
pSchema
[
cols
].
bytes
=
htons
(
pShow
->
bytes
[
cols
]);
cols
++
;
...
...
src/query/src/qExecutor.c
浏览文件 @
e5a36038
...
...
@@ -2631,17 +2631,19 @@ void setTagVal(SQueryRuntimeEnv *pRuntimeEnv, void *pTable, void *tsdb) {
pFuncMsg
->
colInfo
.
colIndex
==
PRIMARYKEY_TIMESTAMP_COL_INDEX
)
{
assert
(
pFuncMsg
->
numOfParams
==
1
);
int16_t
tagColId
=
(
int16_t
)
pExprInfo
->
base
.
arg
->
argValue
.
i64
;
SColumnInfo
*
pColInfo
=
doGetTagColumnInfoById
(
pQuery
->
tagColList
,
pQuery
->
numOfTags
,
tagColId
);
int16_t
tagColId
=
(
int16_t
)
pExprInfo
->
base
.
arg
->
argValue
.
i64
;
SColumnInfo
*
pColInfo
=
doGetTagColumnInfoById
(
pQuery
->
tagColList
,
pQuery
->
numOfTags
,
tagColId
);
doSetTagValueInParam
(
tsdb
,
pTable
,
tagColId
,
&
pRuntimeEnv
->
pCtx
[
0
].
tag
,
pColInfo
->
type
,
pColInfo
->
bytes
);
if
(
pRuntimeEnv
->
pCtx
[
0
].
tag
.
nType
==
TSDB_DATA_TYPE_BINARY
||
pRuntimeEnv
->
pCtx
[
0
].
tag
.
nType
==
TSDB_DATA_TYPE_NCHAR
)
{}
qDebug
(
"QInfo:%p set tag value for join comparison, colId:%"
PRId64
", val:%s"
,
pQInfo
,
pExprInfo
->
base
.
arg
->
argValue
.
i64
,
pRuntimeEnv
->
pCtx
[
0
].
tag
.
pz
);
}
else
{
qDebug
(
"QInfo:%p set tag value for join comparison, colId:%"
PRId64
", val:%"
PRId64
,
pQInfo
,
pExprInfo
->
base
.
arg
->
argValue
.
i64
,
pRuntimeEnv
->
pCtx
[
0
].
tag
.
i64Key
);
int16_t
tagType
=
pRuntimeEnv
->
pCtx
[
0
].
tag
.
nType
;
if
(
tagType
==
TSDB_DATA_TYPE_BINARY
||
tagType
==
TSDB_DATA_TYPE_NCHAR
)
{
qDebug
(
"QInfo:%p set tag value for join comparison, colId:%"
PRId64
", val:%s"
,
pQInfo
,
pExprInfo
->
base
.
arg
->
argValue
.
i64
,
pRuntimeEnv
->
pCtx
[
0
].
tag
.
pz
);
}
else
{
qDebug
(
"QInfo:%p set tag value for join comparison, colId:%"
PRId64
", val:%"
PRId64
,
pQInfo
,
pExprInfo
->
base
.
arg
->
argValue
.
i64
,
pRuntimeEnv
->
pCtx
[
0
].
tag
.
i64Key
);
}
}
}
}
...
...
tests/pytest/fulltest.sh
浏览文件 @
e5a36038
...
...
@@ -186,7 +186,7 @@ python3 ./test.py -f functions/function_leastsquares.py -r 1
python3 ./test.py
-f
functions/function_max.py
-r
1
python3 ./test.py
-f
functions/function_min.py
-r
1
python3 ./test.py
-f
functions/function_operations.py
-r
1
python3 ./test.py
-f
functions/function_percentile.py
python3 ./test.py
-f
functions/function_percentile.py
-r
1
python3 ./test.py
-f
functions/function_spread.py
-r
1
python3 ./test.py
-f
functions/function_stddev.py
-r
1
python3 ./test.py
-f
functions/function_sum.py
-r
1
...
...
tests/pytest/stream/new.py
浏览文件 @
e5a36038
...
...
@@ -26,7 +26,6 @@ class TDTestCase:
def
run
(
self
):
rowNum
=
200
totalNum
=
200
tdSql
.
prepare
()
tdLog
.
info
(
"=============== step1"
)
...
...
@@ -42,7 +41,9 @@ class TDTestCase:
tdSql
.
execute
(
"create table st as select count(*), count(tbcol), count(tbcol2) from mt interval(10s)"
)
tdLog
.
info
(
"=============== step3"
)
start
=
time
.
time
()
tdSql
.
waitedQuery
(
"select * from st"
,
1
,
120
)
delay
=
int
(
time
.
time
()
-
start
)
+
20
v
=
tdSql
.
getData
(
0
,
3
)
if
v
>=
51
:
tdLog
.
exit
(
"value is %d, which is larger than 51"
%
v
)
...
...
@@ -54,11 +55,18 @@ class TDTestCase:
tdSql
.
execute
(
"insert into tb%d values(now + %ds, %d, %d)"
%
(
i
,
j
,
j
,
j
))
tdLog
.
info
(
"=============== step5"
)
tdLog
.
sleep
(
40
)
tdSql
.
waitedQuery
(
"select * from st order by ts desc"
,
1
,
120
)
v
=
tdSql
.
getData
(
0
,
3
)
if
v
<=
51
:
tdLog
.
exit
(
"value is %d, which is smaller than 51"
%
v
)
maxValue
=
0
for
i
in
range
(
delay
):
time
.
sleep
(
1
)
tdSql
.
query
(
"select * from st order by ts desc"
)
v
=
tdSql
.
getData
(
0
,
3
)
if
v
>
maxValue
:
maxValue
=
v
if
v
>
51
:
break
if
maxValue
<=
51
:
tdLog
.
exit
(
"value is %d, which is smaller than 51"
%
maxValue
)
def
stop
(
self
):
tdSql
.
close
()
...
...
tests/script/general/parser/groupby.sim
浏览文件 @
e5a36038
...
...
@@ -27,7 +27,7 @@ $mt = $mtPrefix . $i
$tstart = 100000
sql drop database if exits $db -x step1
sql drop database if exi
s
ts $db -x step1
step1:
sql create database if not exists $db keep 36500
sql use $db
...
...
tests/script/general/parser/join.sim
浏览文件 @
e5a36038
...
...
@@ -24,7 +24,7 @@ $mt = $mtPrefix . $i
$tstart = 100000
sql drop database if exits $db -x step1
sql drop database if exi
s
ts $db -x step1
step1:
sql create database if not exists $db keep 36500
sql use $db
...
...
tests/script/general/parser/join_multivnode.sim
浏览文件 @
e5a36038
...
...
@@ -22,7 +22,7 @@ $mt = $mtPrefix . $i
$tstart = 100000
sql drop database if exits $db -x step1
sql drop database if exi
s
ts $db -x step1
step1:
sql create database if not exists $db keep 36500
sql use $db
...
...
tests/script/general/parser/projection_limit_offset.sim
浏览文件 @
e5a36038
...
...
@@ -21,7 +21,7 @@ $mt = $mtPrefix . $i
$tstart = 100000
sql drop database if exits $db -x step1
sql drop database if exi
s
ts $db -x step1
step1:
sql create database if not exists $db keep 36500
sql use $db
...
...
tests/script/general/parser/sliding.sim
浏览文件 @
e5a36038
...
...
@@ -26,7 +26,7 @@ $i = 0
$db = $dbPrefix . $i
$mt = $mtPrefix . $i
sql drop database if exits $db -x step1
sql drop database if exi
s
ts $db -x step1
step1:
sql create database if not exists $db maxtables 4 keep 36500
sql use $db
...
...
tests/script/general/parser/testSuite.sim
浏览文件 @
e5a36038
sleep 2000
run general/parser/alter.sim
sleep 2000
run general/parser/alter1.sim
sleep 2000
run general/parser/alter_stable.sim
sleep 2000
run general/parser/auto_create_tb.sim
sleep 2000
run general/parser/auto_create_tb_drop_tb.sim
sleep 2000
run general/parser/col_arithmetic_operation.sim
sleep 2000
run general/parser/columnValue.sim
sleep 2000
run general/parser/commit.sim
sleep 2000
run general/parser/create_db.sim
sleep 2000
run general/parser/create_mt.sim
sleep 2000
run general/parser/create_tb.sim
sleep 2000
run general/parser/dbtbnameValidate.sim
sleep 2000
run general/parser/fill.sim
sleep 2000
run general/parser/fill_stb.sim
sleep 2000
#run general/parser/fill_us.sim #
sleep 2000
run general/parser/first_last.sim
sleep 2000
run general/parser/import_commit1.sim
sleep 2000
run general/parser/import_commit2.sim
sleep 2000
run general/parser/import_commit3.sim
sleep 2000
#run general/parser/import_file.sim
sleep 2000
run general/parser/insert_tb.sim
sleep 2000
run general/parser/tags_dynamically_specifiy.sim
sleep 2000
run general/parser/interp.sim
sleep 2000
run general/parser/lastrow.sim
#
sleep 2000
#
run general/parser/alter.sim
#
sleep 2000
#
run general/parser/alter1.sim
#
sleep 2000
#
run general/parser/alter_stable.sim
#
sleep 2000
#
run general/parser/auto_create_tb.sim
#
sleep 2000
#
run general/parser/auto_create_tb_drop_tb.sim
#
sleep 2000
#
run general/parser/col_arithmetic_operation.sim
#
sleep 2000
#
run general/parser/columnValue.sim
#
sleep 2000
#
run general/parser/commit.sim
#
sleep 2000
#
run general/parser/create_db.sim
#
sleep 2000
#
run general/parser/create_mt.sim
#
sleep 2000
#
run general/parser/create_tb.sim
#
sleep 2000
#
run general/parser/dbtbnameValidate.sim
#
sleep 2000
#
run general/parser/fill.sim
#
sleep 2000
#
run general/parser/fill_stb.sim
#
sleep 2000
#
#
run general/parser/fill_us.sim #
#
sleep 2000
#
run general/parser/first_last.sim
#
sleep 2000
#
run general/parser/import_commit1.sim
#
sleep 2000
#
run general/parser/import_commit2.sim
#
sleep 2000
#
run general/parser/import_commit3.sim
#
sleep 2000
#
#
run general/parser/import_file.sim
#
sleep 2000
#
run general/parser/insert_tb.sim
#
sleep 2000
#
run general/parser/tags_dynamically_specifiy.sim
#
sleep 2000
#
run general/parser/interp.sim
#
sleep 2000
#
run general/parser/lastrow.sim
sleep 2000
run general/parser/limit.sim
sleep 2000
...
...
tests/script/general/parser/union.sim
浏览文件 @
e5a36038
...
...
@@ -27,7 +27,7 @@ $j = 1
$mt1 = $mtPrefix . $j
sql drop database if exits $db -x step1
sql drop database if exi
s
ts $db -x step1
step1:
sql create database if not exists $db
sql use $db
...
...
tests/script/general/parser/where.sim
浏览文件 @
e5a36038
...
...
@@ -20,7 +20,7 @@ $i = 0
$db = $dbPrefix . $i
$mt = $mtPrefix . $i
sql drop database if exits $db -x step1
sql drop database if exi
s
ts $db -x step1
step1:
sql create database if not exists $db
sql use $db
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录