Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
db12677c
T
TDengine
项目概览
taosdata
/
TDengine
大约 2 年 前同步成功
通知
1192
Star
22018
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看板
提交
db12677c
编写于
2月 08, 2021
作者:
H
Haojun Liao
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[td-225]refactor
上级
428bd3b7
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
132 addition
and
113 deletion
+132
-113
src/query/inc/qExecutor.h
src/query/inc/qExecutor.h
+1
-1
src/query/src/qExecutor.c
src/query/src/qExecutor.c
+118
-100
src/query/src/qUtil.c
src/query/src/qUtil.c
+7
-5
src/query/src/queryMain.c
src/query/src/queryMain.c
+6
-7
未找到文件。
src/query/inc/qExecutor.h
浏览文件 @
db12677c
...
@@ -269,6 +269,7 @@ typedef struct SQueryRuntimeEnv {
...
@@ -269,6 +269,7 @@ typedef struct SQueryRuntimeEnv {
SSDataBlock
*
ouptputBuf
;
SSDataBlock
*
ouptputBuf
;
int32_t
groupIndex
;
int32_t
groupIndex
;
int32_t
tableIndex
;
STableGroupInfo
tableqinfoGroupInfo
;
// this is a group array list, including SArray<STableQueryInfo*> structure
STableGroupInfo
tableqinfoGroupInfo
;
// this is a group array list, including SArray<STableQueryInfo*> structure
}
SQueryRuntimeEnv
;
}
SQueryRuntimeEnv
;
...
@@ -295,7 +296,6 @@ typedef struct SQInfo {
...
@@ -295,7 +296,6 @@ typedef struct SQInfo {
* the query is executed position on which meter of the whole list.
* the query is executed position on which meter of the whole list.
* when the index reaches the last one of the list, it means the query is completed.
* when the index reaches the last one of the list, it means the query is completed.
*/
*/
int32_t
tableIndex
;
SGroupResInfo
groupResInfo
;
SGroupResInfo
groupResInfo
;
void
*
pBuf
;
// allocated buffer for STableQueryInfo, sizeof(STableQueryInfo)*numOfTables;
void
*
pBuf
;
// allocated buffer for STableQueryInfo, sizeof(STableQueryInfo)*numOfTables;
...
...
src/query/src/qExecutor.c
浏览文件 @
db12677c
...
@@ -265,7 +265,9 @@ int64_t getNumOfResult(SQueryRuntimeEnv *pRuntimeEnv) {
...
@@ -265,7 +265,9 @@ int64_t getNumOfResult(SQueryRuntimeEnv *pRuntimeEnv) {
/*
/*
* the value of number of result needs to be update due to offset value upated.
* the value of number of result needs to be update due to offset value upated.
*/
*/
void
updateNumOfResult
(
SQueryRuntimeEnv
*
pRuntimeEnv
,
SQuery
*
pQuery
,
int32_t
numOfRes
)
{
void
updateNumOfResult
(
SQueryRuntimeEnv
*
pRuntimeEnv
,
int32_t
numOfRes
)
{
SQuery
*
pQuery
=
pRuntimeEnv
->
pQuery
;
for
(
int32_t
j
=
0
;
j
<
pQuery
->
numOfOutput
;
++
j
)
{
for
(
int32_t
j
=
0
;
j
<
pQuery
->
numOfOutput
;
++
j
)
{
SResultRowCellInfo
*
pResInfo
=
GET_RES_INFO
(
&
pRuntimeEnv
->
pCtx
[
j
]);
SResultRowCellInfo
*
pResInfo
=
GET_RES_INFO
(
&
pRuntimeEnv
->
pCtx
[
j
]);
...
@@ -854,7 +856,8 @@ static void doBlockwiseApplyFunctions(SQueryRuntimeEnv *pRuntimeEnv, STimeWindow
...
@@ -854,7 +856,8 @@ static void doBlockwiseApplyFunctions(SQueryRuntimeEnv *pRuntimeEnv, STimeWindow
}
}
}
}
static
void
doRowwiseApplyFunctions
(
SQueryRuntimeEnv
*
pRuntimeEnv
,
SQuery
*
pQuery
,
STimeWindow
*
pWin
,
int32_t
offset
)
{
static
void
doRowwiseApplyFunctions
(
SQueryRuntimeEnv
*
pRuntimeEnv
,
STimeWindow
*
pWin
,
int32_t
offset
)
{
SQuery
*
pQuery
=
pRuntimeEnv
->
pQuery
;
SQLFunctionCtx
*
pCtx
=
pRuntimeEnv
->
pCtx
;
SQLFunctionCtx
*
pCtx
=
pRuntimeEnv
->
pCtx
;
for
(
int32_t
k
=
0
;
k
<
pQuery
->
numOfOutput
;
++
k
)
{
for
(
int32_t
k
=
0
;
k
<
pQuery
->
numOfOutput
;
++
k
)
{
...
@@ -1902,8 +1905,7 @@ static int32_t setupQueryRuntimeEnv(SQueryRuntimeEnv *pRuntimeEnv, int32_t numOf
...
@@ -1902,8 +1905,7 @@ static int32_t setupQueryRuntimeEnv(SQueryRuntimeEnv *pRuntimeEnv, int32_t numOf
qDebug
(
"QInfo:%p setup runtime env"
,
GET_QINFO_ADDR
(
pRuntimeEnv
));
qDebug
(
"QInfo:%p setup runtime env"
,
GET_QINFO_ADDR
(
pRuntimeEnv
));
SQuery
*
pQuery
=
pRuntimeEnv
->
pQuery
;
SQuery
*
pQuery
=
pRuntimeEnv
->
pQuery
;
pRuntimeEnv
->
interBufSize
=
getOutputInterResultBufSize
(
pQuery
);
pQuery
->
interBufSize
=
getOutputInterResultBufSize
(
pQuery
);
pRuntimeEnv
->
summary
.
tableInfoSize
+=
(
numOfTables
*
sizeof
(
STableQueryInfo
));
pRuntimeEnv
->
pResultRowHashTable
=
taosHashInit
(
numOfTables
,
taosGetDefaultHashFunction
(
TSDB_DATA_TYPE_BINARY
),
true
,
HASH_NO_LOCK
);
pRuntimeEnv
->
pResultRowHashTable
=
taosHashInit
(
numOfTables
,
taosGetDefaultHashFunction
(
TSDB_DATA_TYPE_BINARY
),
true
,
HASH_NO_LOCK
);
pRuntimeEnv
->
keyBuf
=
malloc
(
pQuery
->
maxSrcColumnSize
+
sizeof
(
int64_t
));
pRuntimeEnv
->
keyBuf
=
malloc
(
pQuery
->
maxSrcColumnSize
+
sizeof
(
int64_t
));
...
@@ -1972,7 +1974,7 @@ static int32_t setupQueryRuntimeEnv(SQueryRuntimeEnv *pRuntimeEnv, int32_t numOf
...
@@ -1972,7 +1974,7 @@ static int32_t setupQueryRuntimeEnv(SQueryRuntimeEnv *pRuntimeEnv, int32_t numOf
pCtx
->
order
=
pQuery
->
order
.
order
;
pCtx
->
order
=
pQuery
->
order
.
order
;
pCtx
->
functionId
=
pSqlFuncMsg
->
functionId
;
pCtx
->
functionId
=
pSqlFuncMsg
->
functionId
;
pCtx
->
stableQuery
=
p
RuntimeEnv
->
stableQuery
;
pCtx
->
stableQuery
=
p
Query
->
stableQuery
;
pCtx
->
interBufBytes
=
pQuery
->
pExpr1
[
i
].
interBytes
;
pCtx
->
interBufBytes
=
pQuery
->
pExpr1
[
i
].
interBytes
;
pCtx
->
start
.
key
=
INT64_MIN
;
pCtx
->
start
.
key
=
INT64_MIN
;
pCtx
->
end
.
key
=
INT64_MIN
;
pCtx
->
end
.
key
=
INT64_MIN
;
...
@@ -2044,7 +2046,7 @@ static int32_t setupQueryRuntimeEnv(SQueryRuntimeEnv *pRuntimeEnv, int32_t numOf
...
@@ -2044,7 +2046,7 @@ static int32_t setupQueryRuntimeEnv(SQueryRuntimeEnv *pRuntimeEnv, int32_t numOf
// if it is group by normal column, do not set output buffer, the output buffer is pResult
// if it is group by normal column, do not set output buffer, the output buffer is pResult
// fixed output query/multi-output query for normal table
// fixed output query/multi-output query for normal table
if
(
!
pQuery
->
groupbyColumn
&&
!
p
RuntimeEnv
->
stableQuery
&&
!
QUERY_IS_INTERVAL_QUERY
(
pRuntimeEnv
->
pQuery
))
{
if
(
!
pQuery
->
groupbyColumn
&&
!
p
Query
->
stableQuery
&&
!
QUERY_IS_INTERVAL_QUERY
(
pRuntimeEnv
->
pQuery
))
{
resetDefaultResInfoOutputBuf
(
pRuntimeEnv
);
resetDefaultResInfoOutputBuf
(
pRuntimeEnv
);
}
}
...
@@ -2070,6 +2072,7 @@ _clean:
...
@@ -2070,6 +2072,7 @@ _clean:
static
void
doFreeQueryHandle
(
SQInfo
*
pQInfo
)
{
static
void
doFreeQueryHandle
(
SQInfo
*
pQInfo
)
{
SQueryRuntimeEnv
*
pRuntimeEnv
=
&
pQInfo
->
runtimeEnv
;
SQueryRuntimeEnv
*
pRuntimeEnv
=
&
pQInfo
->
runtimeEnv
;
SQuery
*
pQuery
=
pRuntimeEnv
->
pQuery
;
tsdbCleanupQueryHandle
(
pRuntimeEnv
->
pQueryHandle
);
tsdbCleanupQueryHandle
(
pRuntimeEnv
->
pQueryHandle
);
tsdbCleanupQueryHandle
(
pRuntimeEnv
->
pSecQueryHandle
);
tsdbCleanupQueryHandle
(
pRuntimeEnv
->
pSecQueryHandle
);
...
@@ -2077,7 +2080,7 @@ static void doFreeQueryHandle(SQInfo* pQInfo) {
...
@@ -2077,7 +2080,7 @@ static void doFreeQueryHandle(SQInfo* pQInfo) {
pRuntimeEnv
->
pQueryHandle
=
NULL
;
pRuntimeEnv
->
pQueryHandle
=
NULL
;
pRuntimeEnv
->
pSecQueryHandle
=
NULL
;
pRuntimeEnv
->
pSecQueryHandle
=
NULL
;
SMemRef
*
pMemRef
=
&
pQ
Info
->
memRef
;
SMemRef
*
pMemRef
=
&
pQ
uery
->
memRef
;
assert
(
pMemRef
->
ref
==
0
&&
pMemRef
->
imem
==
NULL
&&
pMemRef
->
mem
==
NULL
);
assert
(
pMemRef
->
ref
==
0
&&
pMemRef
->
imem
==
NULL
&&
pMemRef
->
mem
==
NULL
);
}
}
...
@@ -2179,7 +2182,7 @@ static bool isFixedOutputQuery(SQueryRuntimeEnv* pRuntimeEnv) {
...
@@ -2179,7 +2182,7 @@ static bool isFixedOutputQuery(SQueryRuntimeEnv* pRuntimeEnv) {
}
}
// Note:top/bottom query is fixed output query
// Note:top/bottom query is fixed output query
if
(
p
RuntimeEnv
->
topBotQuery
||
pQuery
->
groupbyColumn
)
{
if
(
p
Query
->
topBotQuery
||
pQuery
->
groupbyColumn
)
{
return
true
;
return
true
;
}
}
...
@@ -2478,9 +2481,10 @@ static void changeExecuteScanOrder(SQInfo *pQInfo, SQueryTableMsg* pQueryMsg, bo
...
@@ -2478,9 +2481,10 @@ static void changeExecuteScanOrder(SQInfo *pQInfo, SQueryTableMsg* pQueryMsg, bo
}
}
static
int32_t
getInitialPageNum
(
SQInfo
*
pQInfo
)
{
static
int32_t
getInitialPageNum
(
SQInfo
*
pQInfo
)
{
SQuery
*
pQuery
=
pQInfo
->
runtimeEnv
.
pQuery
;
SQueryRuntimeEnv
*
pRuntimeEnv
=
&
pQInfo
->
runtimeEnv
;
SQuery
*
pQuery
=
pRuntimeEnv
->
pQuery
;
int32_t
INITIAL_RESULT_ROWS_VALUE
=
16
;
int32_t
INITIAL_RESULT_ROWS_VALUE
=
16
;
int32_t
num
=
0
;
int32_t
num
=
0
;
if
(
isGroupbyColumn
(
pQuery
->
pGroupbyExpr
))
{
if
(
isGroupbyColumn
(
pQuery
->
pGroupbyExpr
))
{
...
@@ -2500,7 +2504,7 @@ static void getIntermediateBufInfo(SQueryRuntimeEnv* pRuntimeEnv, int32_t* ps, i
...
@@ -2500,7 +2504,7 @@ static void getIntermediateBufInfo(SQueryRuntimeEnv* pRuntimeEnv, int32_t* ps, i
SQuery
*
pQuery
=
pRuntimeEnv
->
pQuery
;
SQuery
*
pQuery
=
pRuntimeEnv
->
pQuery
;
int32_t
MIN_ROWS_PER_PAGE
=
4
;
int32_t
MIN_ROWS_PER_PAGE
=
4
;
*
rowsize
=
(
int32_t
)(
pQuery
->
resultRowSize
*
GET_ROW_PARAM_FOR_MULTIOUTPUT
(
pQuery
,
p
RuntimeEnv
->
topBotQuery
,
pRuntimeEnv
->
stableQuery
));
*
rowsize
=
(
int32_t
)(
pQuery
->
resultRowSize
*
GET_ROW_PARAM_FOR_MULTIOUTPUT
(
pQuery
,
p
Query
->
topBotQuery
,
pQuery
->
stableQuery
));
int32_t
overhead
=
sizeof
(
tFilePage
);
int32_t
overhead
=
sizeof
(
tFilePage
);
// one page contains at least two rows
// one page contains at least two rows
...
@@ -2518,7 +2522,7 @@ static void getIntermediateBufInfo(SQueryRuntimeEnv* pRuntimeEnv, int32_t* ps, i
...
@@ -2518,7 +2522,7 @@ static void getIntermediateBufInfo(SQueryRuntimeEnv* pRuntimeEnv, int32_t* ps, i
static
bool
needToLoadDataBlock
(
SQueryRuntimeEnv
*
pRuntimeEnv
,
SDataStatis
*
pDataStatis
,
SQLFunctionCtx
*
pCtx
,
static
bool
needToLoadDataBlock
(
SQueryRuntimeEnv
*
pRuntimeEnv
,
SDataStatis
*
pDataStatis
,
SQLFunctionCtx
*
pCtx
,
int32_t
numOfRows
)
{
int32_t
numOfRows
)
{
SQuery
*
pQuery
=
pRuntimeEnv
->
pQuery
;
SQuery
*
pQuery
=
pRuntimeEnv
->
pQuery
;
if
(
pDataStatis
==
NULL
||
(
pQuery
->
numOfFilterCols
==
0
&&
(
!
p
RuntimeEnv
->
topBotQuery
)))
{
if
(
pDataStatis
==
NULL
||
(
pQuery
->
numOfFilterCols
==
0
&&
(
!
p
Query
->
topBotQuery
)))
{
return
true
;
return
true
;
}
}
...
@@ -2577,7 +2581,7 @@ static bool needToLoadDataBlock(SQueryRuntimeEnv* pRuntimeEnv, SDataStatis *pDat
...
@@ -2577,7 +2581,7 @@ static bool needToLoadDataBlock(SQueryRuntimeEnv* pRuntimeEnv, SDataStatis *pDat
}
}
}
}
if
(
p
RuntimeEnv
->
topBotQuery
)
{
if
(
p
Query
->
topBotQuery
)
{
for
(
int32_t
i
=
0
;
i
<
pQuery
->
numOfOutput
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
pQuery
->
numOfOutput
;
++
i
)
{
int32_t
functionId
=
pQuery
->
pExpr1
[
i
].
base
.
functionId
;
int32_t
functionId
=
pQuery
->
pExpr1
[
i
].
base
.
functionId
;
if
(
functionId
==
TSDB_FUNC_TOP
||
functionId
==
TSDB_FUNC_BOTTOM
)
{
if
(
functionId
==
TSDB_FUNC_TOP
||
functionId
==
TSDB_FUNC_BOTTOM
)
{
...
@@ -2644,7 +2648,8 @@ int32_t loadDataBlockOnDemand(SQueryRuntimeEnv *pRuntimeEnv, SResultRowInfo * pW
...
@@ -2644,7 +2648,8 @@ int32_t loadDataBlockOnDemand(SQueryRuntimeEnv *pRuntimeEnv, SResultRowInfo * pW
SQuery
*
pQuery
=
pRuntimeEnv
->
pQuery
;
SQuery
*
pQuery
=
pRuntimeEnv
->
pQuery
;
int64_t
groupId
=
pQuery
->
current
->
groupIndex
;
int64_t
groupId
=
pQuery
->
current
->
groupIndex
;
SQueryCostInfo
*
pCost
=
&
pRuntimeEnv
->
summary
;
SQInfo
*
pQInfo
=
GET_QINFO_ADDR
(
pRuntimeEnv
);
SQueryCostInfo
*
pCost
=
&
pQInfo
->
summary
;
if
(
pQuery
->
numOfFilterCols
>
0
||
pRuntimeEnv
->
pTsBuf
>
0
)
{
if
(
pQuery
->
numOfFilterCols
>
0
||
pRuntimeEnv
->
pTsBuf
>
0
)
{
*
status
=
BLK_DATA_ALL_NEEDED
;
*
status
=
BLK_DATA_ALL_NEEDED
;
...
@@ -2855,7 +2860,9 @@ static void doSetInitialTimewindow(SQueryRuntimeEnv* pRuntimeEnv, SDataBlockInfo
...
@@ -2855,7 +2860,9 @@ static void doSetInitialTimewindow(SQueryRuntimeEnv* pRuntimeEnv, SDataBlockInfo
static
int64_t
doScanAllDataBlocks
(
SQueryRuntimeEnv
*
pRuntimeEnv
)
{
static
int64_t
doScanAllDataBlocks
(
SQueryRuntimeEnv
*
pRuntimeEnv
)
{
SQuery
*
pQuery
=
pRuntimeEnv
->
pQuery
;
SQuery
*
pQuery
=
pRuntimeEnv
->
pQuery
;
STableQueryInfo
*
pTableQueryInfo
=
pQuery
->
current
;
STableQueryInfo
*
pTableQueryInfo
=
pQuery
->
current
;
SQueryCostInfo
*
summary
=
&
pRuntimeEnv
->
summary
;
SQInfo
*
pQInfo
=
GET_QINFO_ADDR
(
pRuntimeEnv
);
SQueryCostInfo
*
summary
=
&
pQInfo
->
summary
;
qDebug
(
"QInfo:%p query start, qrange:%"
PRId64
"-%"
PRId64
", lastkey:%"
PRId64
", order:%d"
,
qDebug
(
"QInfo:%p query start, qrange:%"
PRId64
"-%"
PRId64
", lastkey:%"
PRId64
", order:%d"
,
GET_QINFO_ADDR
(
pRuntimeEnv
),
pTableQueryInfo
->
win
.
skey
,
pTableQueryInfo
->
win
.
ekey
,
pTableQueryInfo
->
lastKey
,
GET_QINFO_ADDR
(
pRuntimeEnv
),
pTableQueryInfo
->
win
.
skey
,
pTableQueryInfo
->
win
.
ekey
,
pTableQueryInfo
->
lastKey
,
...
@@ -2982,7 +2989,7 @@ void setTagVal(SQueryRuntimeEnv *pRuntimeEnv, void *pTable) {
...
@@ -2982,7 +2989,7 @@ void setTagVal(SQueryRuntimeEnv *pRuntimeEnv, void *pTable) {
SQInfo
*
pQInfo
=
GET_QINFO_ADDR
(
pRuntimeEnv
);
SQInfo
*
pQInfo
=
GET_QINFO_ADDR
(
pRuntimeEnv
);
SExprInfo
*
pExprInfo
=
&
pQuery
->
pExpr1
[
0
];
SExprInfo
*
pExprInfo
=
&
pQuery
->
pExpr1
[
0
];
if
(
pQuery
->
numOfOutput
==
1
&&
pExprInfo
->
base
.
functionId
==
TSDB_FUNC_TS_COMP
&&
p
RuntimeEnv
->
stableQuery
)
{
if
(
pQuery
->
numOfOutput
==
1
&&
pExprInfo
->
base
.
functionId
==
TSDB_FUNC_TS_COMP
&&
p
Query
->
stableQuery
)
{
assert
(
pExprInfo
->
base
.
numOfParams
==
1
);
assert
(
pExprInfo
->
base
.
numOfParams
==
1
);
int16_t
tagColId
=
(
int16_t
)
pExprInfo
->
base
.
arg
->
argValue
.
i64
;
int16_t
tagColId
=
(
int16_t
)
pExprInfo
->
base
.
arg
->
argValue
.
i64
;
...
@@ -3143,6 +3150,7 @@ void UNUSED_FUNC displayInterResult(tFilePage **pdata, SQueryRuntimeEnv* pRuntim
...
@@ -3143,6 +3150,7 @@ void UNUSED_FUNC displayInterResult(tFilePage **pdata, SQueryRuntimeEnv* pRuntim
static
int32_t
doCopyToSData
(
SQueryRuntimeEnv
*
pRuntimeEnv
,
SGroupResInfo
*
pGroupResInfo
,
int32_t
orderType
);
static
int32_t
doCopyToSData
(
SQueryRuntimeEnv
*
pRuntimeEnv
,
SGroupResInfo
*
pGroupResInfo
,
int32_t
orderType
);
void
copyResToQueryResultBuf
(
SQInfo
*
pQInfo
,
SQuery
*
pQuery
)
{
void
copyResToQueryResultBuf
(
SQInfo
*
pQInfo
,
SQuery
*
pQuery
)
{
SQueryRuntimeEnv
*
pRuntimeEnv
=
&
pQInfo
->
runtimeEnv
;
SGroupResInfo
*
pGroupResInfo
=
&
pQInfo
->
groupResInfo
;
SGroupResInfo
*
pGroupResInfo
=
&
pQInfo
->
groupResInfo
;
while
(
pGroupResInfo
->
currentGroup
<
pGroupResInfo
->
totalGroup
)
{
while
(
pGroupResInfo
->
currentGroup
<
pGroupResInfo
->
totalGroup
)
{
...
@@ -3160,7 +3168,7 @@ void copyResToQueryResultBuf(SQInfo *pQInfo, SQuery *pQuery) {
...
@@ -3160,7 +3168,7 @@ void copyResToQueryResultBuf(SQInfo *pQInfo, SQuery *pQuery) {
if
(
!
hasRemainData
(
pGroupResInfo
))
{
if
(
!
hasRemainData
(
pGroupResInfo
))
{
cleanupGroupResInfo
(
pGroupResInfo
);
cleanupGroupResInfo
(
pGroupResInfo
);
if
(
!
incNextGroup
(
pGroupResInfo
))
{
if
(
!
incNextGroup
(
pGroupResInfo
))
{
SET_STABLE_QUERY_OVER
(
p
QInfo
);
SET_STABLE_QUERY_OVER
(
p
RuntimeEnv
);
}
}
}
}
...
@@ -3241,11 +3249,12 @@ void disableFuncInReverseScan(SQInfo *pQInfo) {
...
@@ -3241,11 +3249,12 @@ void disableFuncInReverseScan(SQInfo *pQInfo) {
}
}
static
void
setupQueryRangeForReverseScan
(
SQInfo
*
pQInfo
)
{
static
void
setupQueryRangeForReverseScan
(
SQInfo
*
pQInfo
)
{
SQueryRuntimeEnv
*
pRuntimeEnv
=
&
pQInfo
->
runtimeEnv
;
SQuery
*
pQuery
=
pQInfo
->
runtimeEnv
.
pQuery
;
SQuery
*
pQuery
=
pQInfo
->
runtimeEnv
.
pQuery
;
int32_t
numOfGroups
=
(
int32_t
)(
GET_NUM_OF_TABLEGROUP
(
p
QInfo
));
int32_t
numOfGroups
=
(
int32_t
)(
GET_NUM_OF_TABLEGROUP
(
p
RuntimeEnv
));
for
(
int32_t
i
=
0
;
i
<
numOfGroups
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
numOfGroups
;
++
i
)
{
SArray
*
group
=
GET_TABLEGROUP
(
p
QInfo
,
i
);
SArray
*
group
=
GET_TABLEGROUP
(
p
RuntimeEnv
,
i
);
SArray
*
tableKeyGroup
=
taosArrayGetP
(
pQInfo
->
tableGroupInfo
.
pGroupList
,
i
);
SArray
*
tableKeyGroup
=
taosArrayGetP
(
pQInfo
->
tableGroupInfo
.
pGroupList
,
i
);
size_t
t
=
taosArrayGetSize
(
group
);
size_t
t
=
taosArrayGetSize
(
group
);
...
@@ -3495,7 +3504,7 @@ static void setEnvBeforeReverseScan(SQueryRuntimeEnv *pRuntimeEnv, SQueryStatusI
...
@@ -3495,7 +3504,7 @@ static void setEnvBeforeReverseScan(SQueryRuntimeEnv *pRuntimeEnv, SQueryStatusI
tsdbCleanupQueryHandle
(
pRuntimeEnv
->
pSecQueryHandle
);
tsdbCleanupQueryHandle
(
pRuntimeEnv
->
pSecQueryHandle
);
}
}
pRuntimeEnv
->
pSecQueryHandle
=
tsdbQueryTables
(
pQ
Info
->
tsdb
,
&
cond
,
&
pQInfo
->
tableGroupInfo
,
pQInfo
,
&
pQInfo
->
memRef
);
pRuntimeEnv
->
pSecQueryHandle
=
tsdbQueryTables
(
pQ
uery
->
tsdb
,
&
cond
,
&
pQInfo
->
tableGroupInfo
,
pQInfo
,
&
pQuery
->
memRef
);
if
(
pRuntimeEnv
->
pSecQueryHandle
==
NULL
)
{
if
(
pRuntimeEnv
->
pSecQueryHandle
==
NULL
)
{
longjmp
(
pRuntimeEnv
->
env
,
terrno
);
longjmp
(
pRuntimeEnv
->
env
,
terrno
);
}
}
...
@@ -3565,8 +3574,8 @@ static void handleInterpolationQuery(SQInfo* pQInfo) {
...
@@ -3565,8 +3574,8 @@ static void handleInterpolationQuery(SQInfo* pQInfo) {
return
;
return
;
}
}
SArray
*
prev
=
tsdbGetExternalRow
(
pRuntimeEnv
->
pQueryHandle
,
&
pQ
Info
->
memRef
,
TSDB_PREV_ROW
);
SArray
*
prev
=
tsdbGetExternalRow
(
pRuntimeEnv
->
pQueryHandle
,
&
pQ
uery
->
memRef
,
TSDB_PREV_ROW
);
SArray
*
next
=
tsdbGetExternalRow
(
pRuntimeEnv
->
pQueryHandle
,
&
pQ
Info
->
memRef
,
TSDB_NEXT_ROW
);
SArray
*
next
=
tsdbGetExternalRow
(
pRuntimeEnv
->
pQueryHandle
,
&
pQ
uery
->
memRef
,
TSDB_NEXT_ROW
);
if
(
prev
==
NULL
||
next
==
NULL
)
{
if
(
prev
==
NULL
||
next
==
NULL
)
{
return
;
return
;
}
}
...
@@ -3629,7 +3638,7 @@ void scanOneTableDataBlocks(SQueryRuntimeEnv *pRuntimeEnv, TSKEY start) {
...
@@ -3629,7 +3638,7 @@ void scanOneTableDataBlocks(SQueryRuntimeEnv *pRuntimeEnv, TSKEY start) {
SQueryStatusInfo
qstatus
=
getQueryStatusInfo
(
pRuntimeEnv
,
start
);
SQueryStatusInfo
qstatus
=
getQueryStatusInfo
(
pRuntimeEnv
,
start
);
SET_MASTER_SCAN_FLAG
(
pRuntimeEnv
);
SET_MASTER_SCAN_FLAG
(
pRuntimeEnv
);
if
(
!
pQuery
->
groupbyColumn
&&
p
RuntimeEnv
->
hasTagResults
)
{
if
(
!
pQuery
->
groupbyColumn
&&
p
Query
->
hasTagResults
)
{
setTagVal
(
pRuntimeEnv
,
pTableQueryInfo
->
pTable
);
setTagVal
(
pRuntimeEnv
,
pTableQueryInfo
->
pTable
);
}
}
...
@@ -3660,7 +3669,7 @@ void scanOneTableDataBlocks(SQueryRuntimeEnv *pRuntimeEnv, TSKEY start) {
...
@@ -3660,7 +3669,7 @@ void scanOneTableDataBlocks(SQueryRuntimeEnv *pRuntimeEnv, TSKEY start) {
STsdbQueryCond
cond
=
createTsdbQueryCond
(
pQuery
,
&
pQuery
->
window
);
STsdbQueryCond
cond
=
createTsdbQueryCond
(
pQuery
,
&
pQuery
->
window
);
restoreTimeWindow
(
&
pQInfo
->
tableGroupInfo
,
&
cond
);
restoreTimeWindow
(
&
pQInfo
->
tableGroupInfo
,
&
cond
);
pRuntimeEnv
->
pSecQueryHandle
=
tsdbQueryTables
(
pQ
Info
->
tsdb
,
&
cond
,
&
pQInfo
->
tableGroupInfo
,
pQInfo
,
&
pQInfo
->
memRef
);
pRuntimeEnv
->
pSecQueryHandle
=
tsdbQueryTables
(
pQ
uery
->
tsdb
,
&
cond
,
&
pQInfo
->
tableGroupInfo
,
pQInfo
,
&
pQuery
->
memRef
);
if
(
pRuntimeEnv
->
pSecQueryHandle
==
NULL
)
{
if
(
pRuntimeEnv
->
pSecQueryHandle
==
NULL
)
{
longjmp
(
pRuntimeEnv
->
env
,
terrno
);
longjmp
(
pRuntimeEnv
->
env
,
terrno
);
}
}
...
@@ -4221,8 +4230,8 @@ static void doCopyQueryResultToMsg(SQInfo *pQInfo, int32_t numOfRows, char *data
...
@@ -4221,8 +4230,8 @@ static void doCopyQueryResultToMsg(SQInfo *pQInfo, int32_t numOfRows, char *data
// Check if query is completed or not for stable query or normal table query respectively.
// Check if query is completed or not for stable query or normal table query respectively.
if
(
Q_STATUS_EQUAL
(
pQuery
->
status
,
QUERY_COMPLETED
))
{
if
(
Q_STATUS_EQUAL
(
pQuery
->
status
,
QUERY_COMPLETED
))
{
if
(
pQInfo
->
runtimeEnv
.
stableQuery
)
{
if
(
pQInfo
->
query
.
stableQuery
)
{
if
(
IS_STASBLE_QUERY_OVER
(
pQInfo
))
{
if
(
IS_STASBLE_QUERY_OVER
(
&
pQInfo
->
runtimeEnv
))
{
setQueryStatus
(
pQuery
,
QUERY_OVER
);
setQueryStatus
(
pQuery
,
QUERY_OVER
);
}
}
}
else
{
}
else
{
...
@@ -4279,7 +4288,7 @@ int32_t doFillGapsInResults(SQueryRuntimeEnv* pRuntimeEnv, tFilePage **pDst) {
...
@@ -4279,7 +4288,7 @@ int32_t doFillGapsInResults(SQueryRuntimeEnv* pRuntimeEnv, tFilePage **pDst) {
void
queryCostStatis
(
SQInfo
*
pQInfo
)
{
void
queryCostStatis
(
SQInfo
*
pQInfo
)
{
SQueryRuntimeEnv
*
pRuntimeEnv
=
&
pQInfo
->
runtimeEnv
;
SQueryRuntimeEnv
*
pRuntimeEnv
=
&
pQInfo
->
runtimeEnv
;
SQueryCostInfo
*
pSummary
=
&
p
RuntimeEnv
->
summary
;
SQueryCostInfo
*
pSummary
=
&
p
QInfo
->
summary
;
uint64_t
hashSize
=
taosHashGetMemSize
(
pQInfo
->
runtimeEnv
.
pResultRowHashTable
);
uint64_t
hashSize
=
taosHashGetMemSize
(
pQInfo
->
runtimeEnv
.
pResultRowHashTable
);
hashSize
+=
taosHashGetMemSize
(
pRuntimeEnv
->
tableqinfoGroupInfo
.
map
);
hashSize
+=
taosHashGetMemSize
(
pRuntimeEnv
->
tableqinfoGroupInfo
.
map
);
...
@@ -4619,23 +4628,23 @@ static int32_t setupQueryHandle(void* tsdb, SQInfo* pQInfo, bool isSTableQuery)
...
@@ -4619,23 +4628,23 @@ static int32_t setupQueryHandle(void* tsdb, SQInfo* pQInfo, bool isSTableQuery)
&&
(
!
isGroupbyColumn
(
pQuery
->
pGroupbyExpr
))
&&
(
!
isGroupbyColumn
(
pQuery
->
pGroupbyExpr
))
&&
(
!
isFixedOutputQuery
(
pRuntimeEnv
))
&&
(
!
isFixedOutputQuery
(
pRuntimeEnv
))
)
{
)
{
SArray
*
pa
=
GET_TABLEGROUP
(
p
QInfo
,
0
);
SArray
*
pa
=
GET_TABLEGROUP
(
p
RuntimeEnv
,
0
);
STableQueryInfo
*
pCheckInfo
=
taosArrayGetP
(
pa
,
0
);
STableQueryInfo
*
pCheckInfo
=
taosArrayGetP
(
pa
,
0
);
cond
.
twindow
=
pCheckInfo
->
win
;
cond
.
twindow
=
pCheckInfo
->
win
;
}
}
terrno
=
TSDB_CODE_SUCCESS
;
terrno
=
TSDB_CODE_SUCCESS
;
if
(
isFirstLastRowQuery
(
pQuery
))
{
if
(
isFirstLastRowQuery
(
pQuery
))
{
pRuntimeEnv
->
pQueryHandle
=
tsdbQueryLastRow
(
tsdb
,
&
cond
,
&
pQInfo
->
tableGroupInfo
,
pQInfo
,
&
pQ
Info
->
memRef
);
pRuntimeEnv
->
pQueryHandle
=
tsdbQueryLastRow
(
tsdb
,
&
cond
,
&
pQInfo
->
tableGroupInfo
,
pQInfo
,
&
pQ
uery
->
memRef
);
// update the query time window
// update the query time window
pQuery
->
window
=
cond
.
twindow
;
pQuery
->
window
=
cond
.
twindow
;
if
(
pQInfo
->
tableGroupInfo
.
numOfTables
==
0
)
{
if
(
pQInfo
->
tableGroupInfo
.
numOfTables
==
0
)
{
pRuntimeEnv
->
tableqinfoGroupInfo
.
numOfTables
=
0
;
pRuntimeEnv
->
tableqinfoGroupInfo
.
numOfTables
=
0
;
}
else
{
}
else
{
size_t
numOfGroups
=
GET_NUM_OF_TABLEGROUP
(
p
QInfo
);
size_t
numOfGroups
=
GET_NUM_OF_TABLEGROUP
(
p
RuntimeEnv
);
for
(
int32_t
i
=
0
;
i
<
numOfGroups
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
numOfGroups
;
++
i
)
{
SArray
*
group
=
GET_TABLEGROUP
(
p
QInfo
,
i
);
SArray
*
group
=
GET_TABLEGROUP
(
p
RuntimeEnv
,
i
);
size_t
t
=
taosArrayGetSize
(
group
);
size_t
t
=
taosArrayGetSize
(
group
);
for
(
int32_t
j
=
0
;
j
<
t
;
++
j
)
{
for
(
int32_t
j
=
0
;
j
<
t
;
++
j
)
{
...
@@ -4647,9 +4656,9 @@ static int32_t setupQueryHandle(void* tsdb, SQInfo* pQInfo, bool isSTableQuery)
...
@@ -4647,9 +4656,9 @@ static int32_t setupQueryHandle(void* tsdb, SQInfo* pQInfo, bool isSTableQuery)
}
}
}
}
}
else
if
(
isPointInterpoQuery
(
pQuery
))
{
}
else
if
(
isPointInterpoQuery
(
pQuery
))
{
pRuntimeEnv
->
pQueryHandle
=
tsdbQueryRowsInExternalWindow
(
tsdb
,
&
cond
,
&
pQInfo
->
tableGroupInfo
,
pQInfo
,
&
pQ
Info
->
memRef
);
pRuntimeEnv
->
pQueryHandle
=
tsdbQueryRowsInExternalWindow
(
tsdb
,
&
cond
,
&
pQInfo
->
tableGroupInfo
,
pQInfo
,
&
pQ
uery
->
memRef
);
}
else
{
}
else
{
pRuntimeEnv
->
pQueryHandle
=
tsdbQueryTables
(
tsdb
,
&
cond
,
&
pQInfo
->
tableGroupInfo
,
pQInfo
,
&
pQ
Info
->
memRef
);
pRuntimeEnv
->
pQueryHandle
=
tsdbQueryTables
(
tsdb
,
&
cond
,
&
pQInfo
->
tableGroupInfo
,
pQInfo
,
&
pQ
uery
->
memRef
);
}
}
return
terrno
;
return
terrno
;
...
@@ -4687,8 +4696,8 @@ int32_t doInitQInfo(SQInfo *pQInfo, STSBuf *pTsBuf, SArray* prevResult, void *ts
...
@@ -4687,8 +4696,8 @@ int32_t doInitQInfo(SQInfo *pQInfo, STSBuf *pTsBuf, SArray* prevResult, void *ts
SQuery
*
pQuery
=
pQInfo
->
runtimeEnv
.
pQuery
;
SQuery
*
pQuery
=
pQInfo
->
runtimeEnv
.
pQuery
;
p
RuntimeEnv
->
topBotQuery
=
isTopBottomQuery
(
pQuery
);
p
Query
->
topBotQuery
=
isTopBottomQuery
(
pQuery
);
p
RuntimeEnv
->
hasTagResults
=
hasTagValOutput
(
pQuery
);
p
Query
->
hasTagResults
=
hasTagValOutput
(
pQuery
);
pQuery
->
timeWindowInterpo
=
timeWindowInterpoRequired
(
pQuery
);
pQuery
->
timeWindowInterpo
=
timeWindowInterpoRequired
(
pQuery
);
pRuntimeEnv
->
prevResult
=
prevResult
;
pRuntimeEnv
->
prevResult
=
prevResult
;
...
@@ -4699,14 +4708,14 @@ int32_t doInitQInfo(SQInfo *pQInfo, STSBuf *pTsBuf, SArray* prevResult, void *ts
...
@@ -4699,14 +4708,14 @@ int32_t doInitQInfo(SQInfo *pQInfo, STSBuf *pTsBuf, SArray* prevResult, void *ts
return
code
;
return
code
;
}
}
pQ
Info
->
tsdb
=
tsdb
;
pQ
uery
->
tsdb
=
tsdb
;
pQInfo
->
vgId
=
vgId
;
pQInfo
->
vgId
=
vgId
;
pQInfo
->
groupResInfo
.
totalGroup
=
isSTableQuery
?
GET_NUM_OF_TABLEGROUP
(
p
QInfo
)
:
0
;
pQInfo
->
groupResInfo
.
totalGroup
=
isSTableQuery
?
GET_NUM_OF_TABLEGROUP
(
p
RuntimeEnv
)
:
0
;
pRuntimeEnv
->
pQuery
=
pQuery
;
pRuntimeEnv
->
pQuery
=
pQuery
;
pRuntimeEnv
->
pTsBuf
=
pTsBuf
;
pRuntimeEnv
->
pTsBuf
=
pTsBuf
;
pRuntimeEnv
->
cur
.
vgroupIndex
=
-
1
;
pRuntimeEnv
->
cur
.
vgroupIndex
=
-
1
;
p
RuntimeEnv
->
stableQuery
=
isSTableQuery
;
p
Query
->
stableQuery
=
isSTableQuery
;
pRuntimeEnv
->
prevGroupId
=
INT32_MIN
;
pRuntimeEnv
->
prevGroupId
=
INT32_MIN
;
pQuery
->
groupbyColumn
=
isGroupbyColumn
(
pQuery
->
pGroupbyExpr
);
pQuery
->
groupbyColumn
=
isGroupbyColumn
(
pQuery
->
pGroupbyExpr
);
...
@@ -4767,6 +4776,8 @@ int32_t doInitQInfo(SQInfo *pQInfo, STSBuf *pTsBuf, SArray* prevResult, void *ts
...
@@ -4767,6 +4776,8 @@ int32_t doInitQInfo(SQInfo *pQInfo, STSBuf *pTsBuf, SArray* prevResult, void *ts
}
}
// create runtime environment
// create runtime environment
int32_t
numOfTables
=
pQInfo
->
tableGroupInfo
.
numOfTables
;
pQInfo
->
summary
.
tableInfoSize
+=
(
numOfTables
*
sizeof
(
STableQueryInfo
));
code
=
setupQueryRuntimeEnv
(
pRuntimeEnv
,
(
int32_t
)
pQInfo
->
tableGroupInfo
.
numOfTables
,
pQuery
->
order
.
order
,
pQInfo
->
vgId
);
code
=
setupQueryRuntimeEnv
(
pRuntimeEnv
,
(
int32_t
)
pQInfo
->
tableGroupInfo
.
numOfTables
,
pQuery
->
order
.
order
,
pQInfo
->
vgId
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
return
code
;
return
code
;
...
@@ -4806,7 +4817,7 @@ static FORCE_INLINE void setEnvForEachBlock(SQInfo* pQInfo, STableQueryInfo* pTa
...
@@ -4806,7 +4817,7 @@ static FORCE_INLINE void setEnvForEachBlock(SQInfo* pQInfo, STableQueryInfo* pTa
SQuery
*
pQuery
=
pQInfo
->
runtimeEnv
.
pQuery
;
SQuery
*
pQuery
=
pQInfo
->
runtimeEnv
.
pQuery
;
int32_t
step
=
GET_FORWARD_DIRECTION_FACTOR
(
pQuery
->
order
.
order
);
int32_t
step
=
GET_FORWARD_DIRECTION_FACTOR
(
pQuery
->
order
.
order
);
if
(
p
RuntimeEnv
->
hasTagResults
||
pRuntimeEnv
->
pTsBuf
!=
NULL
)
{
if
(
p
Query
->
hasTagResults
||
pRuntimeEnv
->
pTsBuf
!=
NULL
)
{
setTagVal
(
pRuntimeEnv
,
pTableQueryInfo
->
pTable
);
setTagVal
(
pRuntimeEnv
,
pTableQueryInfo
->
pTable
);
}
}
...
@@ -4838,7 +4849,7 @@ static void doTableQueryInfoTimeWindowCheck(SQuery* pQuery, STableQueryInfo* pTa
...
@@ -4838,7 +4849,7 @@ static void doTableQueryInfoTimeWindowCheck(SQuery* pQuery, STableQueryInfo* pTa
static
int64_t
scanMultiTableDataBlocks
(
SQInfo
*
pQInfo
)
{
static
int64_t
scanMultiTableDataBlocks
(
SQInfo
*
pQInfo
)
{
SQueryRuntimeEnv
*
pRuntimeEnv
=
&
pQInfo
->
runtimeEnv
;
SQueryRuntimeEnv
*
pRuntimeEnv
=
&
pQInfo
->
runtimeEnv
;
SQuery
*
pQuery
=
pRuntimeEnv
->
pQuery
;
SQuery
*
pQuery
=
pRuntimeEnv
->
pQuery
;
SQueryCostInfo
*
summary
=
&
p
RuntimeEnv
->
summary
;
SQueryCostInfo
*
summary
=
&
p
QInfo
->
summary
;
int64_t
st
=
taosGetTimestampMs
();
int64_t
st
=
taosGetTimestampMs
();
...
@@ -4867,7 +4878,7 @@ static int64_t scanMultiTableDataBlocks(SQInfo *pQInfo) {
...
@@ -4867,7 +4878,7 @@ static int64_t scanMultiTableDataBlocks(SQInfo *pQInfo) {
setEnvForEachBlock
(
pQInfo
,
*
pTableQueryInfo
,
&
blockInfo
);
setEnvForEachBlock
(
pQInfo
,
*
pTableQueryInfo
,
&
blockInfo
);
}
}
if
(
p
RuntimeEnv
->
stabledev
)
{
if
(
p
Query
->
stabledev
)
{
for
(
int32_t
i
=
0
;
i
<
pQuery
->
numOfOutput
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
pQuery
->
numOfOutput
;
++
i
)
{
if
(
pQuery
->
pExpr1
[
i
].
base
.
functionId
==
TSDB_FUNC_STDDEV_DST
)
{
if
(
pQuery
->
pExpr1
[
i
].
base
.
functionId
==
TSDB_FUNC_STDDEV_DST
)
{
setParamValue
(
pRuntimeEnv
);
setParamValue
(
pRuntimeEnv
);
...
@@ -4914,10 +4925,10 @@ static bool multiTableMultioutputHelper(SQInfo *pQInfo, int32_t index) {
...
@@ -4914,10 +4925,10 @@ static bool multiTableMultioutputHelper(SQInfo *pQInfo, int32_t index) {
SQuery
*
pQuery
=
pRuntimeEnv
->
pQuery
;
SQuery
*
pQuery
=
pRuntimeEnv
->
pQuery
;
setQueryStatus
(
pQuery
,
QUERY_NOT_COMPLETED
);
setQueryStatus
(
pQuery
,
QUERY_NOT_COMPLETED
);
SArray
*
group
=
GET_TABLEGROUP
(
p
QInfo
,
0
);
SArray
*
group
=
GET_TABLEGROUP
(
p
RuntimeEnv
,
0
);
STableQueryInfo
*
pCheckInfo
=
taosArrayGetP
(
group
,
index
);
STableQueryInfo
*
pCheckInfo
=
taosArrayGetP
(
group
,
index
);
if
(
p
RuntimeEnv
->
hasTagResults
||
pRuntimeEnv
->
pTsBuf
!=
NULL
)
{
if
(
p
Query
->
hasTagResults
||
pRuntimeEnv
->
pTsBuf
!=
NULL
)
{
setTagVal
(
pRuntimeEnv
,
pCheckInfo
->
pTable
);
setTagVal
(
pRuntimeEnv
,
pCheckInfo
->
pTable
);
}
}
...
@@ -4949,7 +4960,7 @@ static bool multiTableMultioutputHelper(SQInfo *pQInfo, int32_t index) {
...
@@ -4949,7 +4960,7 @@ static bool multiTableMultioutputHelper(SQInfo *pQInfo, int32_t index) {
pRuntimeEnv
->
pQueryHandle
=
NULL
;
pRuntimeEnv
->
pQueryHandle
=
NULL
;
}
}
pRuntimeEnv
->
pQueryHandle
=
tsdbQueryTables
(
pQ
Info
->
tsdb
,
&
cond
,
&
gp
,
pQInfo
,
&
pQInfo
->
memRef
);
pRuntimeEnv
->
pQueryHandle
=
tsdbQueryTables
(
pQ
uery
->
tsdb
,
&
cond
,
&
gp
,
pQInfo
,
&
pQuery
->
memRef
);
taosArrayDestroy
(
tx
);
taosArrayDestroy
(
tx
);
taosArrayDestroy
(
g1
);
taosArrayDestroy
(
g1
);
if
(
pRuntimeEnv
->
pQueryHandle
==
NULL
)
{
if
(
pRuntimeEnv
->
pQueryHandle
==
NULL
)
{
...
@@ -5068,17 +5079,17 @@ static void sequentialTableProcess(SQInfo *pQInfo) {
...
@@ -5068,17 +5079,17 @@ static void sequentialTableProcess(SQInfo *pQInfo) {
SQuery
*
pQuery
=
pRuntimeEnv
->
pQuery
;
SQuery
*
pQuery
=
pRuntimeEnv
->
pQuery
;
setQueryStatus
(
pQuery
,
QUERY_COMPLETED
);
setQueryStatus
(
pQuery
,
QUERY_COMPLETED
);
size_t
numOfGroups
=
GET_NUM_OF_TABLEGROUP
(
p
QInfo
);
size_t
numOfGroups
=
GET_NUM_OF_TABLEGROUP
(
p
RuntimeEnv
);
if
(
isPointInterpoQuery
(
pQuery
))
{
if
(
isPointInterpoQuery
(
pQuery
))
{
resetDefaultResInfoOutputBuf
(
pRuntimeEnv
);
resetDefaultResInfoOutputBuf
(
pRuntimeEnv
);
assert
(
pQuery
->
limit
.
offset
==
0
&&
pQuery
->
limit
.
limit
!=
0
);
assert
(
pQuery
->
limit
.
offset
==
0
&&
pQuery
->
limit
.
limit
!=
0
);
while
(
p
QInfo
->
groupIndex
<
numOfGroups
)
{
while
(
p
RuntimeEnv
->
groupIndex
<
numOfGroups
)
{
SArray
*
group
=
taosArrayGetP
(
pQInfo
->
tableGroupInfo
.
pGroupList
,
p
QInfo
->
groupIndex
);
SArray
*
group
=
taosArrayGetP
(
pQInfo
->
tableGroupInfo
.
pGroupList
,
p
RuntimeEnv
->
groupIndex
);
qDebug
(
"QInfo:%p point interpolation query on group:%d, total group:%"
PRIzu
", current group:%p"
,
pQInfo
,
qDebug
(
"QInfo:%p point interpolation query on group:%d, total group:%"
PRIzu
", current group:%p"
,
pQInfo
,
p
QInfo
->
groupIndex
,
numOfGroups
,
group
);
p
RuntimeEnv
->
groupIndex
,
numOfGroups
,
group
);
STsdbQueryCond
cond
=
createTsdbQueryCond
(
pQuery
,
&
pQuery
->
window
);
STsdbQueryCond
cond
=
createTsdbQueryCond
(
pQuery
,
&
pQuery
->
window
);
SArray
*
g1
=
taosArrayInit
(
1
,
POINTER_BYTES
);
SArray
*
g1
=
taosArrayInit
(
1
,
POINTER_BYTES
);
...
@@ -5093,7 +5104,7 @@ static void sequentialTableProcess(SQInfo *pQInfo) {
...
@@ -5093,7 +5104,7 @@ static void sequentialTableProcess(SQInfo *pQInfo) {
pRuntimeEnv
->
pQueryHandle
=
NULL
;
pRuntimeEnv
->
pQueryHandle
=
NULL
;
}
}
pRuntimeEnv
->
pQueryHandle
=
tsdbQueryRowsInExternalWindow
(
pQ
Info
->
tsdb
,
&
cond
,
&
gp
,
pQInfo
,
&
pQInfo
->
memRef
);
pRuntimeEnv
->
pQueryHandle
=
tsdbQueryRowsInExternalWindow
(
pQ
uery
->
tsdb
,
&
cond
,
&
gp
,
pQInfo
,
&
pQuery
->
memRef
);
taosArrayDestroy
(
tx
);
taosArrayDestroy
(
tx
);
taosArrayDestroy
(
g1
);
taosArrayDestroy
(
g1
);
...
@@ -5110,7 +5121,7 @@ static void sequentialTableProcess(SQInfo *pQInfo) {
...
@@ -5110,7 +5121,7 @@ static void sequentialTableProcess(SQInfo *pQInfo) {
taosArrayDestroy
(
s
);
taosArrayDestroy
(
s
);
// here we simply set the first table as current table
// here we simply set the first table as current table
SArray
*
first
=
GET_TABLEGROUP
(
p
QInfo
,
pQInfo
->
groupIndex
);
SArray
*
first
=
GET_TABLEGROUP
(
p
RuntimeEnv
,
pRuntimeEnv
->
groupIndex
);
pQuery
->
current
=
taosArrayGetP
(
first
,
0
);
pQuery
->
current
=
taosArrayGetP
(
first
,
0
);
scanOneTableDataBlocks
(
pRuntimeEnv
,
pQuery
->
current
->
lastKey
);
scanOneTableDataBlocks
(
pRuntimeEnv
,
pQuery
->
current
->
lastKey
);
...
@@ -5122,7 +5133,7 @@ static void sequentialTableProcess(SQInfo *pQInfo) {
...
@@ -5122,7 +5133,7 @@ static void sequentialTableProcess(SQInfo *pQInfo) {
}
}
skipResults
(
pRuntimeEnv
);
skipResults
(
pRuntimeEnv
);
p
QInfo
->
groupIndex
+=
1
;
p
RuntimeEnv
->
groupIndex
+=
1
;
// enable execution for next table, when handling the projection query
// enable execution for next table, when handling the projection query
enableExecutionForNextTable
(
pRuntimeEnv
);
enableExecutionForNextTable
(
pRuntimeEnv
);
...
@@ -5133,10 +5144,10 @@ static void sequentialTableProcess(SQInfo *pQInfo) {
...
@@ -5133,10 +5144,10 @@ static void sequentialTableProcess(SQInfo *pQInfo) {
}
}
}
}
}
else
if
(
pQuery
->
groupbyColumn
)
{
// group-by on normal columns query
}
else
if
(
pQuery
->
groupbyColumn
)
{
// group-by on normal columns query
while
(
p
QInfo
->
groupIndex
<
numOfGroups
)
{
while
(
p
RuntimeEnv
->
groupIndex
<
numOfGroups
)
{
SArray
*
group
=
taosArrayGetP
(
pQInfo
->
tableGroupInfo
.
pGroupList
,
p
QInfo
->
groupIndex
);
SArray
*
group
=
taosArrayGetP
(
pQInfo
->
tableGroupInfo
.
pGroupList
,
p
RuntimeEnv
->
groupIndex
);
qDebug
(
"QInfo:%p group by normal columns group:%d, total group:%"
PRIzu
""
,
pQInfo
,
p
QInfo
->
groupIndex
,
qDebug
(
"QInfo:%p group by normal columns group:%d, total group:%"
PRIzu
""
,
pQInfo
,
p
RuntimeEnv
->
groupIndex
,
numOfGroups
);
numOfGroups
);
STsdbQueryCond
cond
=
createTsdbQueryCond
(
pQuery
,
&
pQuery
->
window
);
STsdbQueryCond
cond
=
createTsdbQueryCond
(
pQuery
,
&
pQuery
->
window
);
...
@@ -5154,7 +5165,7 @@ static void sequentialTableProcess(SQInfo *pQInfo) {
...
@@ -5154,7 +5165,7 @@ static void sequentialTableProcess(SQInfo *pQInfo) {
}
}
// no need to update the lastkey for each table
// no need to update the lastkey for each table
pRuntimeEnv
->
pQueryHandle
=
tsdbQueryTables
(
pQ
Info
->
tsdb
,
&
cond
,
&
gp
,
pQInfo
,
&
pQInfo
->
memRef
);
pRuntimeEnv
->
pQueryHandle
=
tsdbQueryTables
(
pQ
uery
->
tsdb
,
&
cond
,
&
gp
,
pQInfo
,
&
pQuery
->
memRef
);
taosArrayDestroy
(
g1
);
taosArrayDestroy
(
g1
);
taosArrayDestroy
(
tx
);
taosArrayDestroy
(
tx
);
...
@@ -5169,7 +5180,7 @@ static void sequentialTableProcess(SQInfo *pQInfo) {
...
@@ -5169,7 +5180,7 @@ static void sequentialTableProcess(SQInfo *pQInfo) {
// here we simply set the first table as current table
// here we simply set the first table as current table
scanMultiTableDataBlocks
(
pQInfo
);
scanMultiTableDataBlocks
(
pQInfo
);
p
QInfo
->
groupIndex
+=
1
;
p
RuntimeEnv
->
groupIndex
+=
1
;
taosArrayDestroy
(
s
);
taosArrayDestroy
(
s
);
...
@@ -5190,7 +5201,7 @@ static void sequentialTableProcess(SQInfo *pQInfo) {
...
@@ -5190,7 +5201,7 @@ static void sequentialTableProcess(SQInfo *pQInfo) {
}
}
qDebug
(
"QInfo:%p generated groupby columns results %d rows for group %d completed"
,
pQInfo
,
pWindowResInfo
->
size
,
qDebug
(
"QInfo:%p generated groupby columns results %d rows for group %d completed"
,
pQInfo
,
pWindowResInfo
->
size
,
p
QInfo
->
groupIndex
);
p
RuntimeEnv
->
groupIndex
);
pQuery
->
rec
.
rows
=
0
;
pQuery
->
rec
.
rows
=
0
;
if
(
pWindowResInfo
->
size
>
pQuery
->
rec
.
capacity
)
{
if
(
pWindowResInfo
->
size
>
pQuery
->
rec
.
capacity
)
{
...
@@ -5205,19 +5216,19 @@ static void sequentialTableProcess(SQInfo *pQInfo) {
...
@@ -5205,19 +5216,19 @@ static void sequentialTableProcess(SQInfo *pQInfo) {
cleanupGroupResInfo
(
&
pQInfo
->
groupResInfo
);
cleanupGroupResInfo
(
&
pQInfo
->
groupResInfo
);
break
;
break
;
}
}
}
else
if
(
p
RuntimeEnv
->
queryWindowIdentical
&&
pRuntimeEnv
->
pTsBuf
==
NULL
&&
!
isTsCompQuery
(
pQuery
))
{
}
else
if
(
p
Query
->
queryWindowIdentical
&&
pRuntimeEnv
->
pTsBuf
==
NULL
&&
!
isTsCompQuery
(
pQuery
))
{
//super table projection query with identical query time range for all tables.
//super table projection query with identical query time range for all tables.
SDataBlockInfo
blockInfo
=
SDATA_BLOCK_INITIALIZER
;
SDataBlockInfo
blockInfo
=
SDATA_BLOCK_INITIALIZER
;
resetDefaultResInfoOutputBuf
(
pRuntimeEnv
);
resetDefaultResInfoOutputBuf
(
pRuntimeEnv
);
SArray
*
group
=
GET_TABLEGROUP
(
p
QInfo
,
0
);
SArray
*
group
=
GET_TABLEGROUP
(
p
RuntimeEnv
,
0
);
assert
(
taosArrayGetSize
(
group
)
==
pRuntimeEnv
->
tableqinfoGroupInfo
.
numOfTables
&&
assert
(
taosArrayGetSize
(
group
)
==
pRuntimeEnv
->
tableqinfoGroupInfo
.
numOfTables
&&
1
==
taosArrayGetSize
(
pRuntimeEnv
->
tableqinfoGroupInfo
.
pGroupList
));
1
==
taosArrayGetSize
(
pRuntimeEnv
->
tableqinfoGroupInfo
.
pGroupList
));
void
*
pQueryHandle
=
pRuntimeEnv
->
pQueryHandle
;
void
*
pQueryHandle
=
pRuntimeEnv
->
pQueryHandle
;
if
(
pQueryHandle
==
NULL
)
{
if
(
pQueryHandle
==
NULL
)
{
STsdbQueryCond
con
=
createTsdbQueryCond
(
pQuery
,
&
pQuery
->
window
);
STsdbQueryCond
con
=
createTsdbQueryCond
(
pQuery
,
&
pQuery
->
window
);
pRuntimeEnv
->
pQueryHandle
=
tsdbQueryTables
(
pQ
Info
->
tsdb
,
&
con
,
&
pQInfo
->
tableGroupInfo
,
pQInfo
,
&
pQInfo
->
memRef
);
pRuntimeEnv
->
pQueryHandle
=
tsdbQueryTables
(
pQ
uery
->
tsdb
,
&
con
,
&
pQInfo
->
tableGroupInfo
,
pQInfo
,
&
pQuery
->
memRef
);
pQueryHandle
=
pRuntimeEnv
->
pQueryHandle
;
pQueryHandle
=
pRuntimeEnv
->
pQueryHandle
;
}
}
...
@@ -5236,7 +5247,7 @@ static void sequentialTableProcess(SQInfo *pQInfo) {
...
@@ -5236,7 +5247,7 @@ static void sequentialTableProcess(SQInfo *pQInfo) {
bool
hasMoreBlock
=
true
;
bool
hasMoreBlock
=
true
;
int32_t
step
=
GET_FORWARD_DIRECTION_FACTOR
(
pQuery
->
order
.
order
);
int32_t
step
=
GET_FORWARD_DIRECTION_FACTOR
(
pQuery
->
order
.
order
);
SQueryCostInfo
*
summary
=
&
p
RuntimeEnv
->
summary
;
SQueryCostInfo
*
summary
=
&
p
QInfo
->
summary
;
while
((
hasMoreBlock
=
tsdbNextDataBlock
(
pQueryHandle
))
==
true
)
{
while
((
hasMoreBlock
=
tsdbNextDataBlock
(
pQueryHandle
))
==
true
)
{
summary
->
totalBlocks
+=
1
;
summary
->
totalBlocks
+=
1
;
...
@@ -5254,7 +5265,7 @@ static void sequentialTableProcess(SQInfo *pQInfo) {
...
@@ -5254,7 +5265,7 @@ static void sequentialTableProcess(SQInfo *pQInfo) {
pQuery
->
current
=
*
pTableQueryInfo
;
pQuery
->
current
=
*
pTableQueryInfo
;
doTableQueryInfoTimeWindowCheck
(
pQuery
,
*
pTableQueryInfo
);
doTableQueryInfoTimeWindowCheck
(
pQuery
,
*
pTableQueryInfo
);
if
(
p
RuntimeEnv
->
hasTagResults
)
{
if
(
p
Query
->
hasTagResults
)
{
setTagVal
(
pRuntimeEnv
,
pQuery
->
current
->
pTable
);
setTagVal
(
pRuntimeEnv
,
pQuery
->
current
->
pTable
);
}
}
...
@@ -5326,7 +5337,7 @@ static void sequentialTableProcess(SQInfo *pQInfo) {
...
@@ -5326,7 +5337,7 @@ static void sequentialTableProcess(SQInfo *pQInfo) {
// the limitation of output result is reached, set the query completed
// the limitation of output result is reached, set the query completed
skipResults
(
pRuntimeEnv
);
skipResults
(
pRuntimeEnv
);
if
(
limitOperator
(
pQuery
,
pQInfo
))
{
if
(
limitOperator
(
pQuery
,
pQInfo
))
{
SET_STABLE_QUERY_OVER
(
p
QInfo
);
SET_STABLE_QUERY_OVER
(
p
RuntimeEnv
);
break
;
break
;
}
}
}
}
...
@@ -5339,7 +5350,7 @@ static void sequentialTableProcess(SQInfo *pQInfo) {
...
@@ -5339,7 +5350,7 @@ static void sequentialTableProcess(SQInfo *pQInfo) {
if
(
!
hasMoreBlock
)
{
if
(
!
hasMoreBlock
)
{
setQueryStatus
(
pQuery
,
QUERY_COMPLETED
);
setQueryStatus
(
pQuery
,
QUERY_COMPLETED
);
SET_STABLE_QUERY_OVER
(
p
QInfo
);
SET_STABLE_QUERY_OVER
(
p
RuntimeEnv
);
}
}
}
else
{
}
else
{
/*
/*
...
@@ -5358,32 +5369,32 @@ static void sequentialTableProcess(SQInfo *pQInfo) {
...
@@ -5358,32 +5369,32 @@ static void sequentialTableProcess(SQInfo *pQInfo) {
}
}
// all data have returned already
// all data have returned already
if
(
p
QInfo
->
tableIndex
>=
pRuntimeEnv
->
tableqinfoGroupInfo
.
numOfTables
)
{
if
(
p
RuntimeEnv
->
tableIndex
>=
pRuntimeEnv
->
tableqinfoGroupInfo
.
numOfTables
)
{
return
;
return
;
}
}
resetDefaultResInfoOutputBuf
(
pRuntimeEnv
);
resetDefaultResInfoOutputBuf
(
pRuntimeEnv
);
resetResultRowInfo
(
pRuntimeEnv
,
&
pRuntimeEnv
->
resultRowInfo
);
resetResultRowInfo
(
pRuntimeEnv
,
&
pRuntimeEnv
->
resultRowInfo
);
SArray
*
group
=
GET_TABLEGROUP
(
p
QInfo
,
0
);
SArray
*
group
=
GET_TABLEGROUP
(
p
RuntimeEnv
,
0
);
assert
(
taosArrayGetSize
(
group
)
==
pRuntimeEnv
->
tableqinfoGroupInfo
.
numOfTables
&&
assert
(
taosArrayGetSize
(
group
)
==
pRuntimeEnv
->
tableqinfoGroupInfo
.
numOfTables
&&
1
==
taosArrayGetSize
(
pRuntimeEnv
->
tableqinfoGroupInfo
.
pGroupList
));
1
==
taosArrayGetSize
(
pRuntimeEnv
->
tableqinfoGroupInfo
.
pGroupList
));
while
(
p
QInfo
->
tableIndex
<
pRuntimeEnv
->
tableqinfoGroupInfo
.
numOfTables
)
{
while
(
p
RuntimeEnv
->
tableIndex
<
pRuntimeEnv
->
tableqinfoGroupInfo
.
numOfTables
)
{
if
(
isQueryKilled
(
pQInfo
))
{
if
(
isQueryKilled
(
pQInfo
))
{
longjmp
(
pRuntimeEnv
->
env
,
TSDB_CODE_TSC_QUERY_CANCELLED
);
longjmp
(
pRuntimeEnv
->
env
,
TSDB_CODE_TSC_QUERY_CANCELLED
);
}
}
pQuery
->
current
=
taosArrayGetP
(
group
,
p
QInfo
->
tableIndex
);
pQuery
->
current
=
taosArrayGetP
(
group
,
p
RuntimeEnv
->
tableIndex
);
if
(
!
multiTableMultioutputHelper
(
pQInfo
,
p
QInfo
->
tableIndex
))
{
if
(
!
multiTableMultioutputHelper
(
pQInfo
,
p
RuntimeEnv
->
tableIndex
))
{
p
QInfo
->
tableIndex
++
;
p
RuntimeEnv
->
tableIndex
++
;
continue
;
continue
;
}
}
// TODO handle the limit offset problem
// TODO handle the limit offset problem
if
(
pQuery
->
numOfFilterCols
==
0
&&
pQuery
->
limit
.
offset
>
0
)
{
if
(
pQuery
->
numOfFilterCols
==
0
&&
pQuery
->
limit
.
offset
>
0
)
{
if
(
Q_STATUS_EQUAL
(
pQuery
->
status
,
QUERY_COMPLETED
))
{
if
(
Q_STATUS_EQUAL
(
pQuery
->
status
,
QUERY_COMPLETED
))
{
p
QInfo
->
tableIndex
++
;
p
RuntimeEnv
->
tableIndex
++
;
continue
;
continue
;
}
}
}
}
...
@@ -5393,7 +5404,7 @@ static void sequentialTableProcess(SQInfo *pQInfo) {
...
@@ -5393,7 +5404,7 @@ static void sequentialTableProcess(SQInfo *pQInfo) {
// the limitation of output result is reached, set the query completed
// the limitation of output result is reached, set the query completed
if
(
limitOperator
(
pQuery
,
pQInfo
))
{
if
(
limitOperator
(
pQuery
,
pQInfo
))
{
SET_STABLE_QUERY_OVER
(
p
QInfo
);
SET_STABLE_QUERY_OVER
(
p
RuntimeEnv
);
break
;
break
;
}
}
...
@@ -5407,7 +5418,7 @@ static void sequentialTableProcess(SQInfo *pQInfo) {
...
@@ -5407,7 +5418,7 @@ static void sequentialTableProcess(SQInfo *pQInfo) {
* not the consecutive query on meter on which is aborted due to buffer limitation
* not the consecutive query on meter on which is aborted due to buffer limitation
* to ensure that, we can reset the query range once query on a meter is completed.
* to ensure that, we can reset the query range once query on a meter is completed.
*/
*/
p
QInfo
->
tableIndex
++
;
p
RuntimeEnv
->
tableIndex
++
;
updateTableIdInfo
(
pQuery
,
pQInfo
->
arrTableIdInfo
);
updateTableIdInfo
(
pQuery
,
pQInfo
->
arrTableIdInfo
);
// if the buffer is full or group by each table, we need to jump out of the loop
// if the buffer is full or group by each table, we need to jump out of the loop
...
@@ -5432,7 +5443,7 @@ static void sequentialTableProcess(SQInfo *pQInfo) {
...
@@ -5432,7 +5443,7 @@ static void sequentialTableProcess(SQInfo *pQInfo) {
}
}
}
}
if
(
p
QInfo
->
tableIndex
>=
pRuntimeEnv
->
tableqinfoGroupInfo
.
numOfTables
)
{
if
(
p
RuntimeEnv
->
tableIndex
>=
pRuntimeEnv
->
tableqinfoGroupInfo
.
numOfTables
)
{
setQueryStatus
(
pQuery
,
QUERY_COMPLETED
);
setQueryStatus
(
pQuery
,
QUERY_COMPLETED
);
}
}
...
@@ -5457,7 +5468,7 @@ static void sequentialTableProcess(SQInfo *pQInfo) {
...
@@ -5457,7 +5468,7 @@ static void sequentialTableProcess(SQInfo *pQInfo) {
qDebug
(
"QInfo %p numOfTables:%"
PRIu64
", index:%d, numOfGroups:%"
PRIzu
", %"
PRId64
qDebug
(
"QInfo %p numOfTables:%"
PRIu64
", index:%d, numOfGroups:%"
PRIzu
", %"
PRId64
" points returned, total:%"
PRId64
", offset:%"
PRId64
,
" points returned, total:%"
PRId64
", offset:%"
PRId64
,
pQInfo
,
(
uint64_t
)
pRuntimeEnv
->
tableqinfoGroupInfo
.
numOfTables
,
p
QInfo
->
tableIndex
,
numOfGroups
,
pQuery
->
rec
.
rows
,
pQInfo
,
(
uint64_t
)
pRuntimeEnv
->
tableqinfoGroupInfo
.
numOfTables
,
p
RuntimeEnv
->
tableIndex
,
numOfGroups
,
pQuery
->
rec
.
rows
,
pQuery
->
rec
.
total
,
pQuery
->
limit
.
offset
);
pQuery
->
rec
.
total
,
pQuery
->
limit
.
offset
);
}
}
}
}
...
@@ -5487,7 +5498,7 @@ static int32_t doSaveContext(SQInfo *pQInfo) {
...
@@ -5487,7 +5498,7 @@ static int32_t doSaveContext(SQInfo *pQInfo) {
setupQueryRangeForReverseScan
(
pQInfo
);
setupQueryRangeForReverseScan
(
pQInfo
);
pRuntimeEnv
->
prevGroupId
=
INT32_MIN
;
pRuntimeEnv
->
prevGroupId
=
INT32_MIN
;
pRuntimeEnv
->
pSecQueryHandle
=
tsdbQueryTables
(
pQ
Info
->
tsdb
,
&
cond
,
&
pQInfo
->
tableGroupInfo
,
pQInfo
,
&
pQInfo
->
memRef
);
pRuntimeEnv
->
pSecQueryHandle
=
tsdbQueryTables
(
pQ
uery
->
tsdb
,
&
cond
,
&
pQInfo
->
tableGroupInfo
,
pQInfo
,
&
pQuery
->
memRef
);
return
(
pRuntimeEnv
->
pSecQueryHandle
==
NULL
)
?
-
1
:
0
;
return
(
pRuntimeEnv
->
pSecQueryHandle
==
NULL
)
?
-
1
:
0
;
}
}
...
@@ -5508,11 +5519,12 @@ static void doRestoreContext(SQInfo *pQInfo) {
...
@@ -5508,11 +5519,12 @@ static void doRestoreContext(SQInfo *pQInfo) {
static
void
doCloseAllTimeWindow
(
SQInfo
*
pQInfo
)
{
static
void
doCloseAllTimeWindow
(
SQInfo
*
pQInfo
)
{
SQuery
*
pQuery
=
pQInfo
->
runtimeEnv
.
pQuery
;
SQuery
*
pQuery
=
pQInfo
->
runtimeEnv
.
pQuery
;
SQueryRuntimeEnv
*
pRuntimeEnv
=
&
pQInfo
->
runtimeEnv
;
if
(
QUERY_IS_INTERVAL_QUERY
(
pQuery
))
{
if
(
QUERY_IS_INTERVAL_QUERY
(
pQuery
))
{
size_t
numOfGroup
=
GET_NUM_OF_TABLEGROUP
(
p
QInfo
);
size_t
numOfGroup
=
GET_NUM_OF_TABLEGROUP
(
p
RuntimeEnv
);
for
(
int32_t
i
=
0
;
i
<
numOfGroup
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
numOfGroup
;
++
i
)
{
SArray
*
group
=
GET_TABLEGROUP
(
p
QInfo
,
i
);
SArray
*
group
=
GET_TABLEGROUP
(
p
RuntimeEnv
,
i
);
size_t
num
=
taosArrayGetSize
(
group
);
size_t
num
=
taosArrayGetSize
(
group
);
for
(
int32_t
j
=
0
;
j
<
num
;
++
j
)
{
for
(
int32_t
j
=
0
;
j
<
num
;
++
j
)
{
...
@@ -5681,6 +5693,8 @@ static SSDataBlock* doScanTableImpl(STableScanInfo *pTableScanInfo) {
...
@@ -5681,6 +5693,8 @@ static SSDataBlock* doScanTableImpl(STableScanInfo *pTableScanInfo) {
return
pBlock
;
return
pBlock
;
}
}
return
NULL
;
}
}
static
SSDataBlock
*
doTableScan
(
void
*
param
)
{
static
SSDataBlock
*
doTableScan
(
void
*
param
)
{
...
@@ -5701,8 +5715,8 @@ static SSDataBlock* doTableScan(void* param) {
...
@@ -5701,8 +5715,8 @@ static SSDataBlock* doTableScan(void* param) {
tsdbCleanupQueryHandle
(
pTableScanInfo
->
pQueryHandle
);
tsdbCleanupQueryHandle
(
pTableScanInfo
->
pQueryHandle
);
STsdbQueryCond
cond
=
createTsdbQueryCond
(
pRuntimeEnv
->
pQuery
,
&
pRuntimeEnv
->
pQuery
->
window
);
STsdbQueryCond
cond
=
createTsdbQueryCond
(
pRuntimeEnv
->
pQuery
,
&
pRuntimeEnv
->
pQuery
->
window
);
pTableScanInfo
->
pQueryHandle
=
pTableScanInfo
->
pQueryHandle
=
tsdbQueryTables
(
pTableScanInfo
->
pQInfo
->
tsdb
,
&
cond
,
&
pTableScanInfo
->
pQInfo
->
tableGroupInfo
,
tsdbQueryTables
(
pTableScanInfo
->
pQInfo
->
query
.
tsdb
,
&
cond
,
&
pTableScanInfo
->
pQInfo
->
tableGroupInfo
,
pTableScanInfo
->
pQInfo
,
&
pTableScanInfo
->
pQInfo
->
memRef
);
pTableScanInfo
->
pQInfo
,
&
pTableScanInfo
->
pQInfo
->
query
.
memRef
);
if
(
pTableScanInfo
->
pQueryHandle
==
NULL
)
{
if
(
pTableScanInfo
->
pQueryHandle
==
NULL
)
{
longjmp
(
pRuntimeEnv
->
env
,
terrno
);
longjmp
(
pRuntimeEnv
->
env
,
terrno
);
}
}
...
@@ -5727,8 +5741,8 @@ static SSDataBlock* doTableScan(void* param) {
...
@@ -5727,8 +5741,8 @@ static SSDataBlock* doTableScan(void* param) {
STsdbQueryCond
cond
=
createTsdbQueryCond
(
pRuntimeEnv
->
pQuery
,
&
pRuntimeEnv
->
pQuery
->
window
);
STsdbQueryCond
cond
=
createTsdbQueryCond
(
pRuntimeEnv
->
pQuery
,
&
pRuntimeEnv
->
pQuery
->
window
);
pTableScanInfo
->
pQueryHandle
=
pTableScanInfo
->
pQueryHandle
=
tsdbQueryTables
(
pTableScanInfo
->
pQInfo
->
tsdb
,
&
cond
,
&
pTableScanInfo
->
pQInfo
->
tableGroupInfo
,
tsdbQueryTables
(
pTableScanInfo
->
pQInfo
->
query
.
tsdb
,
&
cond
,
&
pTableScanInfo
->
pQInfo
->
tableGroupInfo
,
pTableScanInfo
->
pQInfo
,
&
pTableScanInfo
->
pQInfo
->
memRef
);
pTableScanInfo
->
pQInfo
,
&
pTableScanInfo
->
pQInfo
->
query
.
memRef
);
qDebug
(
"QInfo:%p start to reverse scan data blocks due to query func required, qrange:%"
PRId64
"-%"
PRId64
,
qDebug
(
"QInfo:%p start to reverse scan data blocks due to query func required, qrange:%"
PRId64
"-%"
PRId64
,
pTableScanInfo
->
pQInfo
,
cond
.
twindow
.
skey
,
cond
.
twindow
.
ekey
);
pTableScanInfo
->
pQInfo
,
cond
.
twindow
.
skey
,
cond
.
twindow
.
ekey
);
...
@@ -5810,8 +5824,8 @@ static SSDataBlock* doAggOperator(void* param) {
...
@@ -5810,8 +5824,8 @@ static SSDataBlock* doAggOperator(void* param) {
setQueryStatus
(
pInfo
->
pRuntimeEnv
->
pQuery
,
QUERY_COMPLETED
);
setQueryStatus
(
pInfo
->
pRuntimeEnv
->
pQuery
,
QUERY_COMPLETED
);
finalizeQueryResult
(
pInfo
->
pRuntimeEnv
);
finalizeQueryResult
(
pInfo
->
pRuntimeEnv
);
pInfo
->
pRuntimeEnv
->
pQuery
->
ouptputBuf
->
info
.
rows
=
getNumOfResult
(
pInfo
->
pRuntimeEnv
);
pInfo
->
pRuntimeEnv
->
ouptputBuf
->
info
.
rows
=
getNumOfResult
(
pInfo
->
pRuntimeEnv
);
return
pInfo
->
pRuntimeEnv
->
pQuery
->
ouptputBuf
;
return
pInfo
->
pRuntimeEnv
->
ouptputBuf
;
}
}
// todo set the attribute of query scan count
// todo set the attribute of query scan count
...
@@ -5849,7 +5863,7 @@ static void tableAggregationProcess(SQInfo *pQInfo, STableQueryInfo* pTableInfo)
...
@@ -5849,7 +5863,7 @@ static void tableAggregationProcess(SQInfo *pQInfo, STableQueryInfo* pTableInfo)
SQueryRuntimeEnv
*
pRuntimeEnv
=
&
pQInfo
->
runtimeEnv
;
SQueryRuntimeEnv
*
pRuntimeEnv
=
&
pQInfo
->
runtimeEnv
;
SQuery
*
pQuery
=
pRuntimeEnv
->
pQuery
;
SQuery
*
pQuery
=
pRuntimeEnv
->
pQuery
;
if
(
!
p
RuntimeEnv
->
topBotQuery
&&
pQuery
->
limit
.
offset
>
0
)
{
// no need to execute, since the output will be ignore.
if
(
!
p
Query
->
topBotQuery
&&
pQuery
->
limit
.
offset
>
0
)
{
// no need to execute, since the output will be ignore.
return
;
return
;
}
}
...
@@ -6038,7 +6052,7 @@ void tableQueryImpl(SQInfo *pQInfo) {
...
@@ -6038,7 +6052,7 @@ void tableQueryImpl(SQInfo *pQInfo) {
int64_t
st
=
taosGetTimestampUs
();
int64_t
st
=
taosGetTimestampUs
();
assert
(
pRuntimeEnv
->
tableqinfoGroupInfo
.
numOfTables
==
1
);
assert
(
pRuntimeEnv
->
tableqinfoGroupInfo
.
numOfTables
==
1
);
SArray
*
g
=
GET_TABLEGROUP
(
p
QInfo
,
0
);
SArray
*
g
=
GET_TABLEGROUP
(
p
RuntimeEnv
,
0
);
STableQueryInfo
*
item
=
taosArrayGetP
(
g
,
0
);
STableQueryInfo
*
item
=
taosArrayGetP
(
g
,
0
);
pQuery
->
current
=
item
;
pQuery
->
current
=
item
;
...
@@ -6054,7 +6068,7 @@ void tableQueryImpl(SQInfo *pQInfo) {
...
@@ -6054,7 +6068,7 @@ void tableQueryImpl(SQInfo *pQInfo) {
}
}
// record the total elapsed time
// record the total elapsed time
p
RuntimeEnv
->
summary
.
elapsedTime
+=
(
taosGetTimestampUs
()
-
st
);
p
QInfo
->
summary
.
elapsedTime
+=
(
taosGetTimestampUs
()
-
st
);
assert
(
pRuntimeEnv
->
tableqinfoGroupInfo
.
numOfTables
==
1
);
assert
(
pRuntimeEnv
->
tableqinfoGroupInfo
.
numOfTables
==
1
);
}
}
...
@@ -6127,7 +6141,7 @@ void stableQueryImpl(SQInfo *pQInfo) {
...
@@ -6127,7 +6141,7 @@ void stableQueryImpl(SQInfo *pQInfo) {
}
}
// record the total elapsed time
// record the total elapsed time
pQInfo
->
runtimeEnv
.
summary
.
elapsedTime
+=
(
taosGetTimestampUs
()
-
st
);
pQInfo
->
summary
.
elapsedTime
+=
(
taosGetTimestampUs
()
-
st
);
}
}
static
int32_t
getColumnIndexInSource
(
SQueryTableMsg
*
pQueryMsg
,
SSqlFuncMsg
*
pExprMsg
,
SColumnInfo
*
pTagCols
)
{
static
int32_t
getColumnIndexInSource
(
SQueryTableMsg
*
pQueryMsg
,
SSqlFuncMsg
*
pExprMsg
,
SColumnInfo
*
pTagCols
)
{
...
@@ -6881,7 +6895,7 @@ SQInfo *createQInfoImpl(SQueryTableMsg *pQueryMsg, SSqlGroupbyExpr *pGroupbyExpr
...
@@ -6881,7 +6895,7 @@ SQInfo *createQInfoImpl(SQueryTableMsg *pQueryMsg, SSqlGroupbyExpr *pGroupbyExpr
}
}
doUpdateExprColumnIndex
(
pQuery
);
doUpdateExprColumnIndex
(
pQuery
);
pQ
uery
->
ouptputBuf
=
createOutputBuf
(
pQuery
);
pQ
Info
->
runtimeEnv
.
ouptputBuf
=
createOutputBuf
(
pQuery
);
int32_t
ret
=
createFilterInfo
(
pQInfo
,
pQuery
);
int32_t
ret
=
createFilterInfo
(
pQInfo
,
pQuery
);
if
(
ret
!=
TSDB_CODE_SUCCESS
)
{
if
(
ret
!=
TSDB_CODE_SUCCESS
)
{
...
@@ -6926,7 +6940,7 @@ SQInfo *createQInfoImpl(SQueryTableMsg *pQueryMsg, SSqlGroupbyExpr *pGroupbyExpr
...
@@ -6926,7 +6940,7 @@ SQInfo *createQInfoImpl(SQueryTableMsg *pQueryMsg, SSqlGroupbyExpr *pGroupbyExpr
size_t
numOfGroups
=
0
;
size_t
numOfGroups
=
0
;
if
(
pTableGroupInfo
->
pGroupList
!=
NULL
)
{
if
(
pTableGroupInfo
->
pGroupList
!=
NULL
)
{
numOfGroups
=
taosArrayGetSize
(
pTableGroupInfo
->
pGroupList
);
numOfGroups
=
taosArrayGetSize
(
pTableGroupInfo
->
pGroupList
);
STableGroupInfo
*
pTableqinfo
=
&
p
RuntimeEnv
->
tableqinfoGroupInfo
;
STableGroupInfo
*
pTableqinfo
=
&
p
QInfo
->
runtimeEnv
.
tableqinfoGroupInfo
;
pTableqinfo
->
pGroupList
=
taosArrayInit
(
numOfGroups
,
POINTER_BYTES
);
pTableqinfo
->
pGroupList
=
taosArrayInit
(
numOfGroups
,
POINTER_BYTES
);
pTableqinfo
->
numOfTables
=
pTableGroupInfo
->
numOfTables
;
pTableqinfo
->
numOfTables
=
pTableGroupInfo
->
numOfTables
;
...
@@ -6950,7 +6964,8 @@ SQInfo *createQInfoImpl(SQueryTableMsg *pQueryMsg, SSqlGroupbyExpr *pGroupbyExpr
...
@@ -6950,7 +6964,8 @@ SQInfo *createQInfoImpl(SQueryTableMsg *pQueryMsg, SSqlGroupbyExpr *pGroupbyExpr
pQuery
->
window
=
pQueryMsg
->
window
;
pQuery
->
window
=
pQueryMsg
->
window
;
changeExecuteScanOrder
(
pQInfo
,
pQueryMsg
,
stableQuery
);
changeExecuteScanOrder
(
pQInfo
,
pQueryMsg
,
stableQuery
);
pQInfo
->
runtimeEnv
.
queryWindowIdentical
=
true
;
SQueryRuntimeEnv
*
pRuntimeEnv
=
&
pQInfo
->
runtimeEnv
;
pQuery
->
queryWindowIdentical
=
true
;
bool
groupByCol
=
isGroupbyColumn
(
pQuery
->
pGroupbyExpr
);
bool
groupByCol
=
isGroupbyColumn
(
pQuery
->
pGroupbyExpr
);
STimeWindow
window
=
pQuery
->
window
;
STimeWindow
window
=
pQuery
->
window
;
...
@@ -6972,7 +6987,7 @@ SQInfo *createQInfoImpl(SQueryTableMsg *pQueryMsg, SSqlGroupbyExpr *pGroupbyExpr
...
@@ -6972,7 +6987,7 @@ SQInfo *createQInfoImpl(SQueryTableMsg *pQueryMsg, SSqlGroupbyExpr *pGroupbyExpr
window
.
skey
=
info
->
lastKey
;
window
.
skey
=
info
->
lastKey
;
if
(
info
->
lastKey
!=
pQuery
->
window
.
skey
)
{
if
(
info
->
lastKey
!=
pQuery
->
window
.
skey
)
{
pQInfo
->
runtimeEnv
.
queryWindowIdentical
=
false
;
pQInfo
->
query
.
queryWindowIdentical
=
false
;
}
}
void
*
buf
=
(
char
*
)
pQInfo
->
pBuf
+
index
*
sizeof
(
STableQueryInfo
);
void
*
buf
=
(
char
*
)
pQInfo
->
pBuf
+
index
*
sizeof
(
STableQueryInfo
);
...
@@ -6993,7 +7008,7 @@ SQInfo *createQInfoImpl(SQueryTableMsg *pQueryMsg, SSqlGroupbyExpr *pGroupbyExpr
...
@@ -6993,7 +7008,7 @@ SQInfo *createQInfoImpl(SQueryTableMsg *pQueryMsg, SSqlGroupbyExpr *pGroupbyExpr
colIdCheck
(
pQuery
);
colIdCheck
(
pQuery
);
// todo refactor
// todo refactor
pQInfo
->
runtimeEnv
.
queryBlockDist
=
(
numOfOutput
==
1
&&
pExprs
[
0
].
base
.
colInfo
.
colId
==
TSDB_BLOCK_DIST_COLUMN_INDEX
);
pQInfo
->
query
.
queryBlockDist
=
(
numOfOutput
==
1
&&
pExprs
[
0
].
base
.
colInfo
.
colId
==
TSDB_BLOCK_DIST_COLUMN_INDEX
);
qDebug
(
"qmsg:%p QInfo:%p created"
,
pQueryMsg
,
pQInfo
);
qDebug
(
"qmsg:%p QInfo:%p created"
,
pQueryMsg
,
pQInfo
);
return
pQInfo
;
return
pQInfo
;
...
@@ -7039,6 +7054,8 @@ bool isValidQInfo(void *param) {
...
@@ -7039,6 +7054,8 @@ bool isValidQInfo(void *param) {
int32_t
initQInfo
(
SQueryTableMsg
*
pQueryMsg
,
void
*
tsdb
,
int32_t
vgId
,
SQInfo
*
pQInfo
,
SQueryParam
*
param
,
bool
isSTable
)
{
int32_t
initQInfo
(
SQueryTableMsg
*
pQueryMsg
,
void
*
tsdb
,
int32_t
vgId
,
SQInfo
*
pQInfo
,
SQueryParam
*
param
,
bool
isSTable
)
{
int32_t
code
=
TSDB_CODE_SUCCESS
;
int32_t
code
=
TSDB_CODE_SUCCESS
;
SQueryRuntimeEnv
*
pRuntimeEnv
=
&
pQInfo
->
runtimeEnv
;
SQuery
*
pQuery
=
pQInfo
->
runtimeEnv
.
pQuery
;
SQuery
*
pQuery
=
pQInfo
->
runtimeEnv
.
pQuery
;
STSBuf
*
pTsBuf
=
NULL
;
STSBuf
*
pTsBuf
=
NULL
;
...
@@ -7149,6 +7166,7 @@ void freeQInfo(SQInfo *pQInfo) {
...
@@ -7149,6 +7166,7 @@ void freeQInfo(SQInfo *pQInfo) {
qDebug
(
"QInfo:%p start to free QInfo"
,
pQInfo
);
qDebug
(
"QInfo:%p start to free QInfo"
,
pQInfo
);
SQueryRuntimeEnv
*
pRuntimeEnv
=
&
pQInfo
->
runtimeEnv
;
releaseQueryBuf
(
pRuntimeEnv
->
tableqinfoGroupInfo
.
numOfTables
);
releaseQueryBuf
(
pRuntimeEnv
->
tableqinfoGroupInfo
.
numOfTables
);
teardownQueryRuntimeEnv
(
&
pQInfo
->
runtimeEnv
);
teardownQueryRuntimeEnv
(
&
pQInfo
->
runtimeEnv
);
...
@@ -7326,14 +7344,14 @@ void buildTagQueryResult(SQInfo* pQInfo) {
...
@@ -7326,14 +7344,14 @@ void buildTagQueryResult(SQInfo* pQInfo) {
SQueryRuntimeEnv
*
pRuntimeEnv
=
&
pQInfo
->
runtimeEnv
;
SQueryRuntimeEnv
*
pRuntimeEnv
=
&
pQInfo
->
runtimeEnv
;
SQuery
*
pQuery
=
pRuntimeEnv
->
pQuery
;
SQuery
*
pQuery
=
pRuntimeEnv
->
pQuery
;
size_t
numOfGroup
=
GET_NUM_OF_TABLEGROUP
(
p
QInfo
);
size_t
numOfGroup
=
GET_NUM_OF_TABLEGROUP
(
p
RuntimeEnv
);
assert
(
numOfGroup
==
0
||
numOfGroup
==
1
);
assert
(
numOfGroup
==
0
||
numOfGroup
==
1
);
if
(
numOfGroup
==
0
)
{
if
(
numOfGroup
==
0
)
{
return
;
return
;
}
}
SArray
*
pa
=
GET_TABLEGROUP
(
p
QInfo
,
0
);
SArray
*
pa
=
GET_TABLEGROUP
(
p
RuntimeEnv
,
0
);
size_t
num
=
taosArrayGetSize
(
pa
);
size_t
num
=
taosArrayGetSize
(
pa
);
assert
(
num
==
pRuntimeEnv
->
tableqinfoGroupInfo
.
numOfTables
);
assert
(
num
==
pRuntimeEnv
->
tableqinfoGroupInfo
.
numOfTables
);
...
@@ -7358,8 +7376,8 @@ void buildTagQueryResult(SQInfo* pQInfo) {
...
@@ -7358,8 +7376,8 @@ void buildTagQueryResult(SQInfo* pQInfo) {
}
}
}
}
while
(
p
QInfo
->
tableIndex
<
num
&&
count
<
pQuery
->
rec
.
capacity
)
{
while
(
p
RuntimeEnv
->
tableIndex
<
num
&&
count
<
pQuery
->
rec
.
capacity
)
{
int32_t
i
=
p
QInfo
->
tableIndex
++
;
int32_t
i
=
p
RuntimeEnv
->
tableIndex
++
;
STableQueryInfo
*
item
=
taosArrayGetP
(
pa
,
i
);
STableQueryInfo
*
item
=
taosArrayGetP
(
pa
,
i
);
char
*
output
=
pQuery
->
sdata
[
0
]
->
data
+
count
*
rsize
;
char
*
output
=
pQuery
->
sdata
[
0
]
->
data
+
count
*
rsize
;
...
@@ -7397,7 +7415,7 @@ void buildTagQueryResult(SQInfo* pQInfo) {
...
@@ -7397,7 +7415,7 @@ void buildTagQueryResult(SQInfo* pQInfo) {
*
(
int64_t
*
)
pQuery
->
sdata
[
0
]
->
data
=
num
;
*
(
int64_t
*
)
pQuery
->
sdata
[
0
]
->
data
=
num
;
count
=
1
;
count
=
1
;
SET_STABLE_QUERY_OVER
(
p
QInfo
);
SET_STABLE_QUERY_OVER
(
p
RuntimeEnv
);
qDebug
(
"QInfo:%p create count(tbname) query, res:%d rows:1"
,
pQInfo
,
count
);
qDebug
(
"QInfo:%p create count(tbname) query, res:%d rows:1"
,
pQInfo
,
count
);
}
else
{
// return only the tags|table name etc.
}
else
{
// return only the tags|table name etc.
count
=
0
;
count
=
0
;
...
@@ -7408,8 +7426,8 @@ void buildTagQueryResult(SQInfo* pQInfo) {
...
@@ -7408,8 +7426,8 @@ void buildTagQueryResult(SQInfo* pQInfo) {
maxNumOfTables
=
(
int32_t
)
pQuery
->
limit
.
limit
;
maxNumOfTables
=
(
int32_t
)
pQuery
->
limit
.
limit
;
}
}
while
(
p
QInfo
->
tableIndex
<
num
&&
count
<
maxNumOfTables
)
{
while
(
p
RuntimeEnv
->
tableIndex
<
num
&&
count
<
maxNumOfTables
)
{
int32_t
i
=
p
QInfo
->
tableIndex
++
;
int32_t
i
=
p
RuntimeEnv
->
tableIndex
++
;
// discard current result due to offset
// discard current result due to offset
if
(
pQuery
->
limit
.
offset
>
0
)
{
if
(
pQuery
->
limit
.
offset
>
0
)
{
...
...
src/query/src/qUtil.c
浏览文件 @
db12677c
...
@@ -164,7 +164,8 @@ SResultRowCellInfo* getResultCell(SQueryRuntimeEnv* pRuntimeEnv, const SResultRo
...
@@ -164,7 +164,8 @@ SResultRowCellInfo* getResultCell(SQueryRuntimeEnv* pRuntimeEnv, const SResultRo
}
}
size_t
getResultRowSize
(
SQueryRuntimeEnv
*
pRuntimeEnv
)
{
size_t
getResultRowSize
(
SQueryRuntimeEnv
*
pRuntimeEnv
)
{
return
(
pRuntimeEnv
->
pQuery
->
numOfOutput
*
sizeof
(
SResultRowCellInfo
))
+
pRuntimeEnv
->
interBufSize
+
sizeof
(
SResultRow
);
SQuery
*
pQuery
=
pRuntimeEnv
->
pQuery
;
return
(
pQuery
->
numOfOutput
*
sizeof
(
SResultRowCellInfo
))
+
pQuery
->
interBufSize
+
sizeof
(
SResultRow
);
}
}
SResultRowPool
*
initResultRowPool
(
size_t
size
)
{
SResultRowPool
*
initResultRowPool
(
size_t
size
)
{
...
@@ -540,11 +541,12 @@ static int32_t mergeIntoGroupResultImpl(SQueryRuntimeEnv *pRuntimeEnv, SGroupRes
...
@@ -540,11 +541,12 @@ static int32_t mergeIntoGroupResultImpl(SQueryRuntimeEnv *pRuntimeEnv, SGroupRes
int32_t
mergeIntoGroupResult
(
SGroupResInfo
*
pGroupResInfo
,
SQInfo
*
pQInfo
)
{
int32_t
mergeIntoGroupResult
(
SGroupResInfo
*
pGroupResInfo
,
SQInfo
*
pQInfo
)
{
int64_t
st
=
taosGetTimestampUs
();
int64_t
st
=
taosGetTimestampUs
();
SQueryRuntimeEnv
*
pRuntimeEnv
=
&
pQInfo
->
runtimeEnv
;
while
(
pGroupResInfo
->
currentGroup
<
pGroupResInfo
->
totalGroup
)
{
while
(
pGroupResInfo
->
currentGroup
<
pGroupResInfo
->
totalGroup
)
{
SArray
*
group
=
GET_TABLEGROUP
(
p
QInfo
,
pGroupResInfo
->
currentGroup
);
SArray
*
group
=
GET_TABLEGROUP
(
p
RuntimeEnv
,
pGroupResInfo
->
currentGroup
);
int32_t
ret
=
mergeIntoGroupResultImpl
(
&
pQInfo
->
r
untimeEnv
,
pGroupResInfo
,
group
,
pQInfo
);
int32_t
ret
=
mergeIntoGroupResultImpl
(
pR
untimeEnv
,
pGroupResInfo
,
group
,
pQInfo
);
if
(
ret
!=
TSDB_CODE_SUCCESS
)
{
if
(
ret
!=
TSDB_CODE_SUCCESS
)
{
return
ret
;
return
ret
;
}
}
...
@@ -560,13 +562,13 @@ int32_t mergeIntoGroupResult(SGroupResInfo* pGroupResInfo, SQInfo *pQInfo) {
...
@@ -560,13 +562,13 @@ int32_t mergeIntoGroupResult(SGroupResInfo* pGroupResInfo, SQInfo *pQInfo) {
}
}
if
(
pGroupResInfo
->
currentGroup
>=
pGroupResInfo
->
totalGroup
&&
!
hasRemainData
(
pGroupResInfo
))
{
if
(
pGroupResInfo
->
currentGroup
>=
pGroupResInfo
->
totalGroup
&&
!
hasRemainData
(
pGroupResInfo
))
{
SET_STABLE_QUERY_OVER
(
p
QInfo
);
SET_STABLE_QUERY_OVER
(
p
RuntimeEnv
);
}
}
int64_t
elapsedTime
=
taosGetTimestampUs
()
-
st
;
int64_t
elapsedTime
=
taosGetTimestampUs
()
-
st
;
qDebug
(
"QInfo:%p merge res data into group, index:%d, total group:%d, elapsed time:%"
PRId64
"us"
,
pQInfo
,
qDebug
(
"QInfo:%p merge res data into group, index:%d, total group:%d, elapsed time:%"
PRId64
"us"
,
pQInfo
,
pGroupResInfo
->
currentGroup
,
pGroupResInfo
->
totalGroup
,
elapsedTime
);
pGroupResInfo
->
currentGroup
,
pGroupResInfo
->
totalGroup
,
elapsedTime
);
pQInfo
->
runtimeEnv
.
summary
.
firstStageMergeTime
+=
elapsedTime
;
pQInfo
->
summary
.
firstStageMergeTime
+=
elapsedTime
;
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
src/query/src/queryMain.c
浏览文件 @
db12677c
...
@@ -216,7 +216,7 @@ bool qTableQuery(qinfo_t qinfo) {
...
@@ -216,7 +216,7 @@ bool qTableQuery(qinfo_t qinfo) {
return
doBuildResCheck
(
pQInfo
);
return
doBuildResCheck
(
pQInfo
);
}
}
if
(
pQInfo
->
tableqinfoGroupInfo
.
numOfTables
==
0
)
{
if
(
pQInfo
->
runtimeEnv
.
tableqinfoGroupInfo
.
numOfTables
==
0
)
{
qDebug
(
"QInfo:%p no table exists for query, abort"
,
pQInfo
);
qDebug
(
"QInfo:%p no table exists for query, abort"
,
pQInfo
);
setQueryStatus
(
pQInfo
->
runtimeEnv
.
pQuery
,
QUERY_COMPLETED
);
setQueryStatus
(
pQInfo
->
runtimeEnv
.
pQuery
,
QUERY_COMPLETED
);
return
doBuildResCheck
(
pQInfo
);
return
doBuildResCheck
(
pQInfo
);
...
@@ -236,9 +236,9 @@ bool qTableQuery(qinfo_t qinfo) {
...
@@ -236,9 +236,9 @@ bool qTableQuery(qinfo_t qinfo) {
if
(
onlyQueryTags
(
pQInfo
->
runtimeEnv
.
pQuery
))
{
if
(
onlyQueryTags
(
pQInfo
->
runtimeEnv
.
pQuery
))
{
assert
(
pQInfo
->
runtimeEnv
.
pQueryHandle
==
NULL
);
assert
(
pQInfo
->
runtimeEnv
.
pQueryHandle
==
NULL
);
buildTagQueryResult
(
pQInfo
);
buildTagQueryResult
(
pQInfo
);
}
else
if
(
pQInfo
->
runtimeEnv
.
stableQuery
)
{
}
else
if
(
pQInfo
->
query
.
stableQuery
)
{
stableQueryImpl
(
pQInfo
);
stableQueryImpl
(
pQInfo
);
}
else
if
(
pQInfo
->
runtimeEnv
.
queryBlockDist
){
}
else
if
(
pQInfo
->
query
.
queryBlockDist
){
buildTableBlockDistResult
(
pQInfo
);
buildTableBlockDistResult
(
pQInfo
);
}
else
{
}
else
{
tableQueryImpl
(
pQInfo
);
tableQueryImpl
(
pQInfo
);
...
@@ -248,7 +248,7 @@ bool qTableQuery(qinfo_t qinfo) {
...
@@ -248,7 +248,7 @@ bool qTableQuery(qinfo_t qinfo) {
if
(
isQueryKilled
(
pQInfo
))
{
if
(
isQueryKilled
(
pQInfo
))
{
qDebug
(
"QInfo:%p query is killed"
,
pQInfo
);
qDebug
(
"QInfo:%p query is killed"
,
pQInfo
);
}
else
if
(
pQuery
->
rec
.
rows
==
0
)
{
}
else
if
(
pQuery
->
rec
.
rows
==
0
)
{
qDebug
(
"QInfo:%p over, %"
PRIzu
" tables queried, %"
PRId64
" rows are returned"
,
pQInfo
,
p
QInfo
->
tableqinfoGroupInfo
.
numOfTables
,
pQuery
->
rec
.
total
);
qDebug
(
"QInfo:%p over, %"
PRIzu
" tables queried, %"
PRId64
" rows are returned"
,
pQInfo
,
p
RuntimeEnv
->
tableqinfoGroupInfo
.
numOfTables
,
pQuery
->
rec
.
total
);
}
else
{
}
else
{
qDebug
(
"QInfo:%p query paused, %"
PRId64
" rows returned, numOfTotal:%"
PRId64
" rows"
,
qDebug
(
"QInfo:%p query paused, %"
PRId64
" rows returned, numOfTotal:%"
PRId64
" rows"
,
pQInfo
,
pQuery
->
rec
.
rows
,
pQuery
->
rec
.
total
+
pQuery
->
rec
.
rows
);
pQInfo
,
pQuery
->
rec
.
rows
,
pQuery
->
rec
.
total
+
pQuery
->
rec
.
rows
);
...
@@ -309,7 +309,6 @@ int32_t qDumpRetrieveResult(qinfo_t qinfo, SRetrieveTableRsp **pRsp, int32_t *co
...
@@ -309,7 +309,6 @@ int32_t qDumpRetrieveResult(qinfo_t qinfo, SRetrieveTableRsp **pRsp, int32_t *co
return
TSDB_CODE_QRY_INVALID_QHANDLE
;
return
TSDB_CODE_QRY_INVALID_QHANDLE
;
}
}
SQueryRuntimeEnv
*
pRuntimeEnv
=
&
pQInfo
->
runtimeEnv
;
SQuery
*
pQuery
=
pQInfo
->
runtimeEnv
.
pQuery
;
SQuery
*
pQuery
=
pQInfo
->
runtimeEnv
.
pQuery
;
size_t
size
=
getResultSize
(
pQInfo
,
&
pQuery
->
rec
.
rows
);
size_t
size
=
getResultSize
(
pQInfo
,
&
pQuery
->
rec
.
rows
);
...
@@ -328,10 +327,10 @@ int32_t qDumpRetrieveResult(qinfo_t qinfo, SRetrieveTableRsp **pRsp, int32_t *co
...
@@ -328,10 +327,10 @@ int32_t qDumpRetrieveResult(qinfo_t qinfo, SRetrieveTableRsp **pRsp, int32_t *co
if
(
pQInfo
->
code
==
TSDB_CODE_SUCCESS
)
{
if
(
pQInfo
->
code
==
TSDB_CODE_SUCCESS
)
{
(
*
pRsp
)
->
offset
=
htobe64
(
pQuery
->
limit
.
offset
);
(
*
pRsp
)
->
offset
=
htobe64
(
pQuery
->
limit
.
offset
);
(
*
pRsp
)
->
useconds
=
htobe64
(
p
RuntimeEnv
->
summary
.
elapsedTime
);
(
*
pRsp
)
->
useconds
=
htobe64
(
p
QInfo
->
summary
.
elapsedTime
);
}
else
{
}
else
{
(
*
pRsp
)
->
offset
=
0
;
(
*
pRsp
)
->
offset
=
0
;
(
*
pRsp
)
->
useconds
=
htobe64
(
p
RuntimeEnv
->
summary
.
elapsedTime
);
(
*
pRsp
)
->
useconds
=
htobe64
(
p
QInfo
->
summary
.
elapsedTime
);
}
}
(
*
pRsp
)
->
precision
=
htons
(
pQuery
->
precision
);
(
*
pRsp
)
->
precision
=
htons
(
pQuery
->
precision
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录