Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
慢慢CG
TDengine
提交
c303ff2a
T
TDengine
项目概览
慢慢CG
/
TDengine
与 Fork 源项目一致
Fork自
taosdata / TDengine
通知
1
Star
0
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看板
提交
c303ff2a
编写于
1月 31, 2020
作者:
H
hjxilinx
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
refactor some codes [tbase-266]
上级
8c2766e3
变更
6
展开全部
隐藏空白更改
内联
并排
Showing
6 changed file
with
290 addition
and
268 deletion
+290
-268
src/client/src/tscFunctionImpl.c
src/client/src/tscFunctionImpl.c
+29
-27
src/system/detail/inc/vnodeQueryImpl.h
src/system/detail/inc/vnodeQueryImpl.h
+5
-3
src/system/detail/inc/vnodeRead.h
src/system/detail/inc/vnodeRead.h
+5
-6
src/system/detail/src/vnodeQueryImpl.c
src/system/detail/src/vnodeQueryImpl.c
+195
-174
src/system/detail/src/vnodeQueryProcess.c
src/system/detail/src/vnodeQueryProcess.c
+54
-56
src/system/detail/src/vnodeRead.c
src/system/detail/src/vnodeRead.c
+2
-2
未找到文件。
src/client/src/tscFunctionImpl.c
浏览文件 @
c303ff2a
...
...
@@ -72,6 +72,8 @@ for (int32_t i = 0; i < (ctx)->tagInfo.numOfTagCols; ++i) { \
void
noop1
(
SQLFunctionCtx
*
UNUSED_PARAM
(
pCtx
))
{}
void
noop2
(
SQLFunctionCtx
*
UNUSED_PARAM
(
pCtx
),
int32_t
UNUSED_PARAM
(
index
))
{}
void
doFinalizer
(
SQLFunctionCtx
*
pCtx
)
{
resetResultInfo
(
GET_RES_INFO
(
pCtx
));
}
typedef
struct
tValuePair
{
tVariant
v
;
int64_t
timestamp
;
...
...
@@ -355,8 +357,8 @@ static void function_finalizer(SQLFunctionCtx *pCtx) {
pTrace
(
"no result generated, result is set to NULL"
);
setNull
(
pCtx
->
aOutputBuf
,
pCtx
->
outputType
,
pCtx
->
outputBytes
);
}
resetResultInfo
(
GET_RES_INFO
(
pCtx
)
);
doFinalizer
(
pCtx
);
}
/*
...
...
@@ -889,6 +891,7 @@ static void avg_finalizer(SQLFunctionCtx *pCtx) {
// cannot set the numOfIteratedElems again since it is set during previous iteration
GET_RES_INFO
(
pCtx
)
->
numOfRes
=
1
;
doFinalizer
(
pCtx
);
}
/////////////////////////////////////////////////////////////////////////////////////////////
...
...
@@ -1433,8 +1436,8 @@ static void stddev_finalizer(SQLFunctionCtx *pCtx) {
*
retValue
=
sqrt
(
pStd
->
res
/
pStd
->
num
);
SET_VAL
(
pCtx
,
1
,
1
);
}
resetResultInfo
(
GET_RES_INFO
(
pCtx
)
);
doFinalizer
(
pCtx
);
}
//////////////////////////////////////////////////////////////////////////////////////
...
...
@@ -1836,7 +1839,7 @@ static void last_row_finalizer(SQLFunctionCtx *pCtx) {
}
GET_RES_INFO
(
pCtx
)
->
numOfRes
=
1
;
resetResultInfo
(
GET_RES_INFO
(
pCtx
)
);
doFinalizer
(
pCtx
);
}
//////////////////////////////////////////////////////////////////////////////////
...
...
@@ -2404,8 +2407,8 @@ static void top_bottom_func_finalizer(SQLFunctionCtx *pCtx) {
GET_TRUE_DATA_TYPE
();
copyTopBotRes
(
pCtx
,
type
);
resetResultInfo
(
pResInfo
);
doFinalizer
(
pCtx
);
}
///////////////////////////////////////////////////////////////////////////////////////////////
...
...
@@ -2481,8 +2484,8 @@ static void percentile_finalizer(SQLFunctionCtx *pCtx) {
tOrderDescDestroy
(
pMemBucket
->
pOrderDesc
);
tMemBucketDestroy
(
pMemBucket
);
resetResultInfo
(
GET_RES_INFO
(
pCtx
)
);
doFinalizer
(
pCtx
);
}
//////////////////////////////////////////////////////////////////////////////////
...
...
@@ -2690,8 +2693,8 @@ static void apercentile_finalizer(SQLFunctionCtx *pCtx) {
return
;
}
}
resetResultInfo
(
pResInfo
);
doFinalizer
(
pCtx
);
}
/////////////////////////////////////////////////////////////////////////////////
...
...
@@ -2871,7 +2874,7 @@ static void leastsquares_finalizer(SQLFunctionCtx *pCtx) {
param
[
1
][
2
]
/=
param
[
1
][
1
];
sprintf
(
pCtx
->
aOutputBuf
,
"(%lf, %lf)"
,
param
[
0
][
2
],
param
[
1
][
2
]);
resetResultInfo
(
GET_RES_INFO
(
pCtx
)
);
doFinalizer
(
pCtx
);
}
static
void
date_col_output_function
(
SQLFunctionCtx
*
pCtx
)
{
...
...
@@ -2927,18 +2930,17 @@ static void tag_project_function(SQLFunctionCtx *pCtx) {
INC_INIT_VAL
(
pCtx
,
pCtx
->
size
);
assert
(
pCtx
->
inputBytes
==
pCtx
->
outputBytes
);
// int32_t factor = GET_FORWARD_DIRECTION_FACTOR(pCtx->order);
for
(
int32_t
i
=
0
;
i
<
pCtx
->
size
;
++
i
)
{
tVariantDump
(
&
pCtx
->
tag
,
pCtx
->
aOutputBuf
,
pCtx
->
outputType
);
pCtx
->
aOutputBuf
+=
pCtx
->
outputBytes
/* * factor*/
;
pCtx
->
aOutputBuf
+=
pCtx
->
outputBytes
;
}
}
static
void
tag_project_function_f
(
SQLFunctionCtx
*
pCtx
,
int32_t
index
)
{
INC_INIT_VAL
(
pCtx
,
1
);
tVariantDump
(
&
pCtx
->
tag
,
pCtx
->
aOutputBuf
,
pCtx
->
tag
.
nType
);
pCtx
->
aOutputBuf
+=
pCtx
->
outputBytes
/* * GET_FORWARD_DIRECTION_FACTOR(pCtx->order)*/
;
pCtx
->
aOutputBuf
+=
pCtx
->
outputBytes
;
}
/**
...
...
@@ -4183,7 +4185,7 @@ void twa_function_finalizer(SQLFunctionCtx *pCtx) {
}
GET_RES_INFO
(
pCtx
)
->
numOfRes
=
1
;
resetResultInfo
(
GET_RES_INFO
(
pCtx
)
);
doFinalizer
(
pCtx
);
}
/**
...
...
@@ -4345,7 +4347,7 @@ static void ts_comp_finalize(SQLFunctionCtx *pCtx) {
strcpy
(
pCtx
->
aOutputBuf
,
pTSbuf
->
path
);
tsBufDestory
(
pTSbuf
);
resetResultInfo
(
GET_RES_INFO
(
pCtx
)
);
doFinalizer
(
pCtx
);
}
/*
...
...
@@ -4385,7 +4387,7 @@ SQLAggFuncElem aAggs[28] = {{
count_function
,
count_function_f
,
no_next_step
,
noop1
,
doFinalizer
,
count_func_merge
,
count_func_merge
,
count_load_data_info
,
...
...
@@ -4628,7 +4630,7 @@ SQLAggFuncElem aAggs[28] = {{
date_col_output_function
,
date_col_output_function_f
,
no_next_step
,
noop1
,
doFinalizer
,
copy_function
,
copy_function
,
no_data_info
,
...
...
@@ -4643,7 +4645,7 @@ SQLAggFuncElem aAggs[28] = {{
noop1
,
noop2
,
no_next_step
,
noop1
,
doFinalizer
,
copy_function
,
copy_function
,
data_req_load_info
,
...
...
@@ -4658,7 +4660,7 @@ SQLAggFuncElem aAggs[28] = {{
tag_function
,
noop2
,
no_next_step
,
noop1
,
doFinalizer
,
copy_function
,
copy_function
,
no_data_info
,
...
...
@@ -4688,7 +4690,7 @@ SQLAggFuncElem aAggs[28] = {{
tag_function
,
tag_function_f
,
no_next_step
,
noop1
,
doFinalizer
,
copy_function
,
copy_function
,
no_data_info
,
...
...
@@ -4703,7 +4705,7 @@ SQLAggFuncElem aAggs[28] = {{
col_project_function
,
col_project_function_f
,
no_next_step
,
noop1
,
doFinalizer
,
copy_function
,
copy_function
,
data_req_load_info
,
...
...
@@ -4718,7 +4720,7 @@ SQLAggFuncElem aAggs[28] = {{
tag_project_function
,
tag_project_function_f
,
no_next_step
,
noop1
,
doFinalizer
,
copy_function
,
copy_function
,
no_data_info
,
...
...
@@ -4733,7 +4735,7 @@ SQLAggFuncElem aAggs[28] = {{
arithmetic_function
,
arithmetic_function_f
,
no_next_step
,
noop1
,
doFinalizer
,
copy_function
,
copy_function
,
data_req_load_info
,
...
...
@@ -4748,7 +4750,7 @@ SQLAggFuncElem aAggs[28] = {{
diff_function
,
diff_function_f
,
no_next_step
,
noop1
,
doFinalizer
,
noop1
,
noop1
,
data_req_load_info
,
...
...
@@ -4794,7 +4796,7 @@ SQLAggFuncElem aAggs[28] = {{
interp_function
,
do_sum_f
,
// todo filter handle
no_next_step
,
noop1
,
doFinalizer
,
noop1
,
copy_function
,
no_data_info
,
...
...
src/system/detail/inc/vnodeQueryImpl.h
浏览文件 @
c303ff2a
...
...
@@ -279,9 +279,11 @@ void vnodePrintQueryStatistics(SMeterQuerySupportObj* pSupporter);
void
clearGroupResultBuf
(
SOutputRes
*
pOneOutputRes
,
int32_t
nOutputCols
);
void
copyGroupResultBuf
(
SOutputRes
*
dst
,
const
SOutputRes
*
src
,
int32_t
nOutputCols
);
void
resetResWindowInfo
(
SSlidingWindowResInfo
*
pWindowResInfo
,
int32_t
numOfCols
);
void
clearCompletedResWindows
(
SSlidingWindowResInfo
*
pWindowResInfo
,
int32_t
numOfCols
);
int32_t
numOfResFromResWindowInfo
(
SSlidingWindowResInfo
*
pWindowResInfo
);
void
resetSlidingWindowInfo
(
SSlidingWindowInfo
*
pSlidingWindowInfo
,
int32_t
numOfCols
);
void
clearCompletedSlidingWindows
(
SSlidingWindowInfo
*
pSlidingWindowInfo
,
int32_t
numOfCols
);
int32_t
numOfClosedSlidingWindow
(
SSlidingWindowInfo
*
pSlidingWindowInfo
);
void
closeSlidingWindow
(
SSlidingWindowInfo
*
pSlidingWindowInfo
,
int32_t
slot
);
void
closeAllSlidingWindow
(
SSlidingWindowInfo
*
pSlidingWindowInfo
);
#ifdef __cplusplus
}
...
...
src/system/detail/inc/vnodeRead.h
浏览文件 @
c303ff2a
...
...
@@ -122,7 +122,7 @@ typedef struct SWindowStatus {
bool
closed
;
}
SWindowStatus
;
typedef
struct
SSlidingWindow
Res
Info
{
typedef
struct
SSlidingWindowInfo
{
SOutputRes
*
pResult
;
// reference to SQuerySupporter->pResult
SWindowStatus
*
pStatus
;
// current query window closed or not?
void
*
hashList
;
// hash list for quick access
...
...
@@ -134,7 +134,7 @@ typedef struct SSlidingWindowResInfo {
int64_t
startTime
;
// start time of the first time window for sliding query
int64_t
prevSKey
;
// previous (not completed) sliding window start key
int64_t
threshold
;
// threshold for return completed results.
}
SSlidingWindow
Res
Info
;
}
SSlidingWindowInfo
;
typedef
struct
SQueryRuntimeEnv
{
SPositionInfo
startPos
;
/* the start position, used for secondary/third iteration */
...
...
@@ -159,14 +159,13 @@ typedef struct SQueryRuntimeEnv {
SInterpolationInfo
interpoInfo
;
SData
**
pInterpoBuf
;
SSlidingWindow
Res
Info
swindowResInfo
;
SSlidingWindowInfo
swindowResInfo
;
STSBuf
*
pTSBuf
;
STSCursor
cur
;
SQueryCostSummary
summary
;
TSKEY
intervalSKey
;
// skey of the complete time window, not affected by the actual data distribution
TSKEY
intervalEKey
;
// ekey of the complete time window
STimeWindow
intervalWindow
;
// the complete time window, not affected by the actual data distribution
/*
* Temporarily hold the in-memory cache block info during scan cache blocks
...
...
@@ -296,7 +295,7 @@ int32_t vnodeMultiMeterQueryPrepare(SQInfo* pQInfo, SQuery* pQuery, void* param)
void
vnodeDecMeterRefcnt
(
SQInfo
*
pQInfo
);
/* sql query handle in dnode */
void
vnodeSingle
Meter
Query
(
SSchedMsg
*
pMsg
);
void
vnodeSingle
Table
Query
(
SSchedMsg
*
pMsg
);
/*
* handle multi-meter query process
...
...
src/system/detail/src/vnodeQueryImpl.c
浏览文件 @
c303ff2a
此差异已折叠。
点击以展开。
src/system/detail/src/vnodeQueryProcess.c
浏览文件 @
c303ff2a
...
...
@@ -88,22 +88,10 @@ static void setStartPositionForCacheBlock(SQuery *pQuery, SCacheBlock *pBlock, b
static
void
enableExecutionForNextTable
(
SQueryRuntimeEnv
*
pRuntimeEnv
)
{
SQuery
*
pQuery
=
pRuntimeEnv
->
pQuery
;
// enable execution for next table
if
(
isGroupbyNormalCol
(
pQuery
->
pGroupbyExpr
)
||
(
pQuery
->
nAggTimeInterval
>
0
&&
pQuery
->
slidingTime
>
0
))
{
SSlidingWindowResInfo
*
pWindowResInfo
=
&
pRuntimeEnv
->
swindowResInfo
;
for
(
int32_t
i
=
0
;
i
<
pWindowResInfo
->
size
;
++
i
)
{
SOutputRes
*
buf
=
&
pWindowResInfo
->
pResult
[
i
];
for
(
int32_t
j
=
0
;
j
<
pQuery
->
numOfOutputCols
;
++
j
)
{
buf
->
resultInfo
[
j
].
complete
=
false
;
}
}
}
else
{
for
(
int32_t
i
=
0
;
i
<
pQuery
->
numOfOutputCols
;
++
i
)
{
SResultInfo
*
pResInfo
=
GET_RES_INFO
(
&
pRuntimeEnv
->
pCtx
[
i
]);
if
(
pResInfo
!=
NULL
)
{
pResInfo
->
complete
=
false
;
}
for
(
int32_t
i
=
0
;
i
<
pQuery
->
numOfOutputCols
;
++
i
)
{
SResultInfo
*
pResInfo
=
GET_RES_INFO
(
&
pRuntimeEnv
->
pCtx
[
i
]);
if
(
pResInfo
!=
NULL
)
{
pResInfo
->
complete
=
false
;
}
}
}
...
...
@@ -535,6 +523,7 @@ static bool multimeterMultioutputHelper(SQInfo *pQInfo, bool *dataInDisk, bool *
}
}
initCtxOutputBuf
(
pRuntimeEnv
);
return
true
;
}
...
...
@@ -572,13 +561,8 @@ static int64_t doCheckMetersInGroup(SQInfo *pQInfo, int32_t index, int32_t start
vnodeScanAllData
(
pRuntimeEnv
);
// enable execution for next table
enableExecutionForNextTable
(
pRuntimeEnv
);
// first/last_row query, do not invoke the finalize for super table query
if
(
!
isFirstLastRowQuery
(
pQuery
))
{
doFinalizeResult
(
pRuntimeEnv
);
}
doFinalizeResult
(
pRuntimeEnv
);
int64_t
numOfRes
=
getNumOfResult
(
pRuntimeEnv
);
assert
(
numOfRes
==
1
||
numOfRes
==
0
);
...
...
@@ -592,7 +576,14 @@ static int64_t doCheckMetersInGroup(SQInfo *pQInfo, int32_t index, int32_t start
return
numOfRes
;
}
static
void
vnodeMultiMeterMultiOutputProcessor
(
SQInfo
*
pQInfo
)
{
/**
* super table query handler
* 1. super table projection query, group-by on normal columns query, ts-comp query
* 2. point interpolation query, last row query
*
* @param pQInfo
*/
static
void
vnodeSTableSeqProcessor
(
SQInfo
*
pQInfo
)
{
SMeterQuerySupportObj
*
pSupporter
=
pQInfo
->
pMeterQuerySupporter
;
SMeterSidExtInfo
**
pMeterSidExtInfo
=
pSupporter
->
pMeterSidExtInfo
;
...
...
@@ -601,8 +592,8 @@ static void vnodeMultiMeterMultiOutputProcessor(SQInfo *pQInfo) {
SQuery
*
pQuery
=
&
pQInfo
->
query
;
tSidSet
*
pSids
=
pSupporter
->
pSidSet
;
SMeterObj
*
pOneMeter
=
getMeterObj
(
pSupporter
->
pMetersHashTable
,
pMeterSidExtInfo
[
0
]
->
sid
)
;
int32_t
vid
=
getMeterObj
(
pSupporter
->
pMetersHashTable
,
pMeterSidExtInfo
[
0
]
->
sid
)
->
vnode
;
resetCtxOutputBuf
(
pRuntimeEnv
);
if
(
isPointInterpoQuery
(
pQuery
))
{
...
...
@@ -613,7 +604,7 @@ static void vnodeMultiMeterMultiOutputProcessor(SQInfo *pQInfo) {
int32_t
end
=
pSids
->
starterPos
[
pSupporter
->
subgroupIdx
+
1
]
-
1
;
if
(
isFirstLastRowQuery
(
pQuery
))
{
dTrace
(
"QInfo:%p last_row query on vid:%d, numOfGroups:%d, current group:%d"
,
pQInfo
,
pOneMeter
->
vnode
,
dTrace
(
"QInfo:%p last_row query on vid:%d, numOfGroups:%d, current group:%d"
,
pQInfo
,
vid
,
pSids
->
numOfSubSet
,
pSupporter
->
subgroupIdx
);
TSKEY
key
=
-
1
;
...
...
@@ -646,7 +637,7 @@ static void vnodeMultiMeterMultiOutputProcessor(SQInfo *pQInfo) {
int64_t
num
=
doCheckMetersInGroup
(
pQInfo
,
index
,
start
);
assert
(
num
>=
0
);
}
else
{
dTrace
(
"QInfo:%p interp query on vid:%d, numOfGroups:%d, current group:%d"
,
pQInfo
,
pOneMeter
->
vnode
,
dTrace
(
"QInfo:%p interp query on vid:%d, numOfGroups:%d, current group:%d"
,
pQInfo
,
vid
,
pSids
->
numOfSubSet
,
pSupporter
->
subgroupIdx
);
for
(
int32_t
k
=
start
;
k
<=
end
;
++
k
)
{
...
...
@@ -673,7 +664,9 @@ static void vnodeMultiMeterMultiOutputProcessor(SQInfo *pQInfo) {
}
}
}
else
{
// this procedure treats all tables as single group
/*
* 1. super table projection query, 2. group-by on normal columns query, 3. ts-comp query
*/
assert
(
pSupporter
->
meterIdx
>=
0
);
/*
...
...
@@ -693,9 +686,9 @@ static void vnodeMultiMeterMultiOutputProcessor(SQInfo *pQInfo) {
return
;
}
reset
Res
WindowInfo
(
&
pRuntimeEnv
->
swindowResInfo
,
pQuery
->
numOfOutputCols
);
reset
Sliding
WindowInfo
(
&
pRuntimeEnv
->
swindowResInfo
,
pQuery
->
numOfOutputCols
);
while
(
pSupporter
->
meterIdx
<
pSupporter
->
numOfMeters
)
{
while
(
pSupporter
->
meterIdx
<
pSupporter
->
numOfMeters
)
{
int32_t
k
=
pSupporter
->
meterIdx
;
if
(
isQueryKilled
(
pQuery
))
{
...
...
@@ -752,7 +745,7 @@ static void vnodeMultiMeterMultiOutputProcessor(SQInfo *pQInfo) {
break
;
}
// enable execution for next table
// enable execution for next table
, when handling the projection query
enableExecutionForNextTable
(
pRuntimeEnv
);
if
(
Q_STATUS_EQUAL
(
pQuery
->
over
,
QUERY_NO_DATA_TO_CHECK
|
QUERY_COMPLETED
))
{
...
...
@@ -772,8 +765,7 @@ static void vnodeMultiMeterMultiOutputProcessor(SQInfo *pQInfo) {
break
;
}
}
else
{
// forward query range
}
else
{
// forward query range
pQuery
->
skey
=
pQuery
->
lastKey
;
// all data in the result buffer are skipped due to the offset, continue to retrieve data from current meter
...
...
@@ -789,7 +781,18 @@ static void vnodeMultiMeterMultiOutputProcessor(SQInfo *pQInfo) {
}
}
if
(
!
isGroupbyNormalCol
(
pQuery
->
pGroupbyExpr
)
&&
!
isFirstLastRowQuery
(
pQuery
))
{
/*
* 1. super table projection query, group-by on normal columns query, ts-comp query
* 2. point interpolation query, last row query
*
* group-by on normal columns query and last_row query do NOT invoke the finalizer here,
* since the finalize stage will be done at the client side.
*
* projection query, point interpolation query do not need the finalizer.
*
* Only the ts-comp query requires the finalizer function to be executed here.
*/
if
(
isTSCompQuery
(
pQuery
))
{
doFinalizeResult
(
pRuntimeEnv
);
}
...
...
@@ -799,11 +802,11 @@ static void vnodeMultiMeterMultiOutputProcessor(SQInfo *pQInfo) {
// todo refactor
if
(
isGroupbyNormalCol
(
pQuery
->
pGroupbyExpr
))
{
SSlidingWindow
ResInfo
*
pWindowRes
Info
=
&
pRuntimeEnv
->
swindowResInfo
;
SSlidingWindow
Info
*
pSlidingWindow
Info
=
&
pRuntimeEnv
->
swindowResInfo
;
for
(
int32_t
i
=
0
;
i
<
p
WindowRes
Info
->
size
;
++
i
)
{
SOutputRes
*
buf
=
&
p
WindowRes
Info
->
pResult
[
i
];
p
WindowRes
Info
->
pStatus
[
i
].
closed
=
true
;
// enable return all results for group by normal columns
for
(
int32_t
i
=
0
;
i
<
p
SlidingWindow
Info
->
size
;
++
i
)
{
SOutputRes
*
buf
=
&
p
SlidingWindow
Info
->
pResult
[
i
];
p
SlidingWindow
Info
->
pStatus
[
i
].
closed
=
true
;
// enable return all results for group by normal columns
for
(
int32_t
j
=
0
;
j
<
pQuery
->
numOfOutputCols
;
++
j
)
{
buf
->
numOfRows
=
MAX
(
buf
->
numOfRows
,
buf
->
resultInfo
[
j
].
numOfRes
);
...
...
@@ -812,7 +815,7 @@ static void vnodeMultiMeterMultiOutputProcessor(SQInfo *pQInfo) {
pQInfo
->
pMeterQuerySupporter
->
subgroupIdx
=
0
;
pQuery
->
pointsRead
=
0
;
copyFromGroupBuf
(
pQInfo
,
p
WindowRes
Info
->
pResult
);
copyFromGroupBuf
(
pQInfo
,
p
SlidingWindow
Info
->
pResult
);
}
pQInfo
->
pointsRead
+=
pQuery
->
pointsRead
;
...
...
@@ -821,7 +824,7 @@ static void vnodeMultiMeterMultiOutputProcessor(SQInfo *pQInfo) {
dTrace
(
"QInfo %p vid:%d, numOfMeters:%d, index:%d, numOfGroups:%d, %d points returned, totalRead:%d totalReturn:%d,"
"next skey:%"
PRId64
", offset:%"
PRId64
,
pQInfo
,
pOneMeter
->
vnode
,
pSids
->
numOfSids
,
pSupporter
->
meterIdx
,
pSids
->
numOfSubSet
,
pQuery
->
pointsRead
,
pQInfo
,
vid
,
pSids
->
numOfSids
,
pSupporter
->
meterIdx
,
pSids
->
numOfSubSet
,
pQuery
->
pointsRead
,
pQInfo
->
pointsRead
,
pQInfo
->
pointsReturned
,
pQuery
->
skey
,
pQuery
->
limit
.
offset
);
}
...
...
@@ -979,7 +982,7 @@ static void vnodeMultiMeterQueryProcessor(SQInfo *pQInfo) {
* select count(*)/top(field,k)/avg(field name) from table_name [where ts>now-1a];
* select count(*) from table_name group by status_column;
*/
static
void
vnodeSingle
Meter
FixedOutputProcessor
(
SQInfo
*
pQInfo
)
{
static
void
vnodeSingle
Table
FixedOutputProcessor
(
SQInfo
*
pQInfo
)
{
SQuery
*
pQuery
=
&
pQInfo
->
query
;
SQueryRuntimeEnv
*
pRuntimeEnv
=
&
pQInfo
->
pMeterQuerySupporter
->
runtimeEnv
;
...
...
@@ -1002,19 +1005,13 @@ static void vnodeSingleMeterFixedOutputProcessor(SQInfo *pQInfo) {
assert
(
isTopBottomQuery
(
pQuery
));
}
if
(
isGroupbyNormalCol
(
pQuery
->
pGroupbyExpr
))
{
pQInfo
->
pMeterQuerySupporter
->
subgroupIdx
=
0
;
pQuery
->
pointsRead
=
0
;
copyFromGroupBuf
(
pQInfo
,
pRuntimeEnv
->
swindowResInfo
.
pResult
);
}
doSkipResults
(
pRuntimeEnv
);
doRevisedResultsByLimit
(
pQInfo
);
pQInfo
->
pointsRead
=
pQuery
->
pointsRead
;
}
static
void
vnodeSingle
Meter
MultiOutputProcessor
(
SQInfo
*
pQInfo
)
{
static
void
vnodeSingle
Table
MultiOutputProcessor
(
SQInfo
*
pQInfo
)
{
SQuery
*
pQuery
=
&
pQInfo
->
query
;
SMeterObj
*
pMeterObj
=
pQInfo
->
pObj
;
...
...
@@ -1083,7 +1080,7 @@ static void vnodeSingleMeterIntervalMainLooper(SMeterQuerySupportObj *pSupporter
(
pQuery
->
skey
>=
pQuery
->
ekey
&&
!
QUERY_IS_ASC_QUERY
(
pQuery
)));
initCtxOutputBuf
(
pRuntimeEnv
);
clearCompleted
Res
Windows
(
&
pRuntimeEnv
->
swindowResInfo
,
pQuery
->
numOfOutputCols
);
clearCompleted
Sliding
Windows
(
&
pRuntimeEnv
->
swindowResInfo
,
pQuery
->
numOfOutputCols
);
vnodeScanAllData
(
pRuntimeEnv
);
if
(
isQueryKilled
(
pQuery
))
{
...
...
@@ -1133,7 +1130,7 @@ static void vnodeSingleMeterIntervalMainLooper(SMeterQuerySupportObj *pSupporter
}
/* handle time interval query on single table */
static
void
vnodeSingle
Meter
IntervalProcessor
(
SQInfo
*
pQInfo
)
{
static
void
vnodeSingle
Table
IntervalProcessor
(
SQInfo
*
pQInfo
)
{
SQuery
*
pQuery
=
&
(
pQInfo
->
query
);
SMeterObj
*
pMeterObj
=
pQInfo
->
pObj
;
...
...
@@ -1187,7 +1184,7 @@ static void vnodeSingleMeterIntervalProcessor(SQInfo *pQInfo) {
pQInfo
->
pointsRead
-
pQInfo
->
pointsInterpo
,
pQInfo
->
pointsInterpo
,
pQInfo
->
pointsReturned
);
}
void
vnodeSingle
Meter
Query
(
SSchedMsg
*
pMsg
)
{
void
vnodeSingle
Table
Query
(
SSchedMsg
*
pMsg
)
{
SQInfo
*
pQInfo
=
(
SQInfo
*
)
pMsg
->
ahandle
;
if
(
pQInfo
==
NULL
||
pQInfo
->
pMeterQuerySupporter
==
NULL
)
{
...
...
@@ -1280,16 +1277,17 @@ void vnodeSingleMeterQuery(SSchedMsg *pMsg) {
int64_t
st
=
taosGetTimestampUs
();
if
(
pQuery
->
nAggTimeInterval
!=
0
)
{
// interval (down sampling operation)
// group by normal column, sliding window query, interval query are handled by interval query processor
if
(
pQuery
->
nAggTimeInterval
!=
0
||
isGroupbyNormalCol
(
pQuery
->
pGroupbyExpr
))
{
// interval (down sampling operation)
assert
(
pQuery
->
checkBufferInLoop
==
0
&&
pQuery
->
pointsOffset
==
pQuery
->
pointsToRead
);
vnodeSingle
Meter
IntervalProcessor
(
pQInfo
);
vnodeSingle
Table
IntervalProcessor
(
pQInfo
);
}
else
{
if
(
isFixedOutputQuery
(
pQuery
))
{
assert
(
pQuery
->
checkBufferInLoop
==
0
);
vnodeSingle
Meter
FixedOutputProcessor
(
pQInfo
);
vnodeSingle
Table
FixedOutputProcessor
(
pQInfo
);
}
else
{
// diff/add/multiply/subtract/division
assert
(
pQuery
->
checkBufferInLoop
==
1
);
vnodeSingle
Meter
MultiOutputProcessor
(
pQInfo
);
vnodeSingle
Table
MultiOutputProcessor
(
pQInfo
);
}
}
...
...
@@ -1336,7 +1334,7 @@ void vnodeMultiMeterQuery(SSchedMsg *pMsg) {
assert
((
pQuery
->
checkBufferInLoop
==
1
&&
pQuery
->
nAggTimeInterval
==
0
)
||
isPointInterpoQuery
(
pQuery
)
||
isGroupbyNormalCol
(
pQuery
->
pGroupbyExpr
));
vnode
MultiMeterMultiOutput
Processor
(
pQInfo
);
vnode
STableSeq
Processor
(
pQInfo
);
}
/* record the total elapsed time */
...
...
src/system/detail/src/vnodeRead.c
浏览文件 @
c303ff2a
...
...
@@ -673,7 +673,7 @@ void *vnodeQueryOnSingleTable(SMeterObj **pMetersObj, SSqlGroupbyExpr *pGroupbyE
return
pQInfo
;
}
schedMsg
.
fp
=
vnodeSingle
Meter
Query
;
schedMsg
.
fp
=
vnodeSingle
Table
Query
;
}
/*
...
...
@@ -891,7 +891,7 @@ int vnodeSaveQueryResult(void *handle, char *data, int32_t *size) {
if
(
pQInfo
->
pMeterQuerySupporter
!=
NULL
)
{
if
(
pQInfo
->
pMeterQuerySupporter
->
pSidSet
==
NULL
)
{
schedMsg
.
fp
=
vnodeSingle
Meter
Query
;
schedMsg
.
fp
=
vnodeSingle
Table
Query
;
}
else
{
// group by tag
schedMsg
.
fp
=
vnodeMultiMeterQuery
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录