Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
慢慢CG
TDengine
提交
d1d6b192
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看板
提交
d1d6b192
编写于
2月 08, 2021
作者:
H
Haojun Liao
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[td-225]refactor
上级
db12677c
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
43 addition
and
51 deletion
+43
-51
src/query/inc/qExecutor.h
src/query/inc/qExecutor.h
+2
-3
src/query/src/qExecutor.c
src/query/src/qExecutor.c
+41
-48
未找到文件。
src/query/inc/qExecutor.h
浏览文件 @
d1d6b192
...
...
@@ -234,6 +234,7 @@ typedef struct SQuery {
void
*
tsdb
;
SMemRef
memRef
;
STableGroupInfo
tableGroupInfo
;
// table <tid, last_key> list SArray<STableKeyInfo>
}
SQuery
;
typedef
struct
SQueryRuntimeEnv
{
...
...
@@ -285,7 +286,6 @@ typedef struct SQInfo {
int64_t
owner
;
// if it is in execution
int32_t
vgId
;
STableGroupInfo
tableGroupInfo
;
// table <tid, last_key> list SArray<STableKeyInfo>
SQueryRuntimeEnv
runtimeEnv
;
SQuery
query
;
...
...
@@ -305,8 +305,7 @@ typedef struct SQInfo {
void
*
rspContext
;
// response context
int64_t
startExecTs
;
// start to exec timestamp
char
*
sql
;
// query sql string
SQueryCostInfo
summary
;
SQueryCostInfo
summary
;
}
SQInfo
;
typedef
struct
SQueryParam
{
...
...
src/query/src/qExecutor.c
浏览文件 @
d1d6b192
...
...
@@ -2373,9 +2373,10 @@ static bool onlyFirstQuery(SQuery *pQuery) { return onlyOneQueryType(pQuery, TSD
static
bool
onlyLastQuery
(
SQuery
*
pQuery
)
{
return
onlyOneQueryType
(
pQuery
,
TSDB_FUNC_LAST
,
TSDB_FUNC_LAST_DST
);
}
static
void
doExchangeTimeWindow
(
SQInfo
*
pQInfo
,
STimeWindow
*
win
)
{
size_t
t
=
taosArrayGetSize
(
pQInfo
->
tableGroupInfo
.
pGroupList
);
SQuery
*
pQuery
=
&
pQInfo
->
query
;
size_t
t
=
taosArrayGetSize
(
pQuery
->
tableGroupInfo
.
pGroupList
);
for
(
int32_t
i
=
0
;
i
<
t
;
++
i
)
{
SArray
*
p1
=
taosArrayGetP
(
pQ
Info
->
tableGroupInfo
.
pGroupList
,
i
);
SArray
*
p1
=
taosArrayGetP
(
pQ
uery
->
tableGroupInfo
.
pGroupList
,
i
);
size_t
len
=
taosArrayGetSize
(
p1
);
for
(
int32_t
j
=
0
;
j
<
len
;
++
j
)
{
...
...
@@ -3220,8 +3221,7 @@ static void disableFuncInReverseScanImpl(SQueryRuntimeEnv* pRuntimeEnv, SResultR
}
}
void
disableFuncInReverseScan
(
SQInfo
*
pQInfo
)
{
SQueryRuntimeEnv
*
pRuntimeEnv
=
&
pQInfo
->
runtimeEnv
;
void
disableFuncInReverseScan
(
SQueryRuntimeEnv
*
pRuntimeEnv
)
{
SQuery
*
pQuery
=
pRuntimeEnv
->
pQuery
;
int32_t
order
=
pQuery
->
order
.
order
;
...
...
@@ -3255,7 +3255,7 @@ static void setupQueryRangeForReverseScan(SQInfo* pQInfo) {
for
(
int32_t
i
=
0
;
i
<
numOfGroups
;
++
i
)
{
SArray
*
group
=
GET_TABLEGROUP
(
pRuntimeEnv
,
i
);
SArray
*
tableKeyGroup
=
taosArrayGetP
(
pQ
Info
->
tableGroupInfo
.
pGroupList
,
i
);
SArray
*
tableKeyGroup
=
taosArrayGetP
(
pQ
uery
->
tableGroupInfo
.
pGroupList
,
i
);
size_t
t
=
taosArrayGetSize
(
group
);
for
(
int32_t
j
=
0
;
j
<
t
;
++
j
)
{
...
...
@@ -3496,7 +3496,7 @@ static void setEnvBeforeReverseScan(SQueryRuntimeEnv *pRuntimeEnv, SQueryStatusI
setQueryStatus
(
pQuery
,
QUERY_NOT_COMPLETED
);
switchCtxOrder
(
pRuntimeEnv
);
disableFuncInReverseScan
(
p
QInfo
);
disableFuncInReverseScan
(
p
RuntimeEnv
);
setupQueryRangeForReverseScan
(
pQInfo
);
// clean unused handle
...
...
@@ -3504,7 +3504,7 @@ static void setEnvBeforeReverseScan(SQueryRuntimeEnv *pRuntimeEnv, SQueryStatusI
tsdbCleanupQueryHandle
(
pRuntimeEnv
->
pSecQueryHandle
);
}
pRuntimeEnv
->
pSecQueryHandle
=
tsdbQueryTables
(
pQuery
->
tsdb
,
&
cond
,
&
pQ
Info
->
tableGroupInfo
,
pQInfo
,
&
pQuery
->
memRef
);
pRuntimeEnv
->
pSecQueryHandle
=
tsdbQueryTables
(
pQuery
->
tsdb
,
&
cond
,
&
pQ
uery
->
tableGroupInfo
,
pQInfo
,
&
pQuery
->
memRef
);
if
(
pRuntimeEnv
->
pSecQueryHandle
==
NULL
)
{
longjmp
(
pRuntimeEnv
->
env
,
terrno
);
}
...
...
@@ -3533,7 +3533,7 @@ static void setEnvBeforeReverseScan_rv(SQueryRuntimeEnv *pRuntimeEnv) {
SET_REVERSE_SCAN_FLAG
(
pRuntimeEnv
);
setQueryStatus
(
pQuery
,
QUERY_NOT_COMPLETED
);
switchCtxOrder
(
pRuntimeEnv
);
disableFuncInReverseScan
(
p
QInfo
);
disableFuncInReverseScan
(
p
RuntimeEnv
);
setupQueryRangeForReverseScan
(
pQInfo
);
}
...
...
@@ -3668,8 +3668,8 @@ void scanOneTableDataBlocks(SQueryRuntimeEnv *pRuntimeEnv, TSKEY start) {
}
STsdbQueryCond
cond
=
createTsdbQueryCond
(
pQuery
,
&
pQuery
->
window
);
restoreTimeWindow
(
&
pQ
Info
->
tableGroupInfo
,
&
cond
);
pRuntimeEnv
->
pSecQueryHandle
=
tsdbQueryTables
(
pQuery
->
tsdb
,
&
cond
,
&
pQ
Info
->
tableGroupInfo
,
pQInfo
,
&
pQuery
->
memRef
);
restoreTimeWindow
(
&
pQ
uery
->
tableGroupInfo
,
&
cond
);
pRuntimeEnv
->
pSecQueryHandle
=
tsdbQueryTables
(
pQuery
->
tsdb
,
&
cond
,
&
pQ
uery
->
tableGroupInfo
,
pQInfo
,
&
pQuery
->
memRef
);
if
(
pRuntimeEnv
->
pSecQueryHandle
==
NULL
)
{
longjmp
(
pRuntimeEnv
->
env
,
terrno
);
}
...
...
@@ -4635,11 +4635,11 @@ static int32_t setupQueryHandle(void* tsdb, SQInfo* pQInfo, bool isSTableQuery)
terrno
=
TSDB_CODE_SUCCESS
;
if
(
isFirstLastRowQuery
(
pQuery
))
{
pRuntimeEnv
->
pQueryHandle
=
tsdbQueryLastRow
(
tsdb
,
&
cond
,
&
pQ
Info
->
tableGroupInfo
,
pQInfo
,
&
pQuery
->
memRef
);
pRuntimeEnv
->
pQueryHandle
=
tsdbQueryLastRow
(
tsdb
,
&
cond
,
&
pQ
uery
->
tableGroupInfo
,
pQInfo
,
&
pQuery
->
memRef
);
// update the query time window
pQuery
->
window
=
cond
.
twindow
;
if
(
pQ
Info
->
tableGroupInfo
.
numOfTables
==
0
)
{
if
(
pQ
uery
->
tableGroupInfo
.
numOfTables
==
0
)
{
pRuntimeEnv
->
tableqinfoGroupInfo
.
numOfTables
=
0
;
}
else
{
size_t
numOfGroups
=
GET_NUM_OF_TABLEGROUP
(
pRuntimeEnv
);
...
...
@@ -4656,9 +4656,9 @@ static int32_t setupQueryHandle(void* tsdb, SQInfo* pQInfo, bool isSTableQuery)
}
}
}
else
if
(
isPointInterpoQuery
(
pQuery
))
{
pRuntimeEnv
->
pQueryHandle
=
tsdbQueryRowsInExternalWindow
(
tsdb
,
&
cond
,
&
pQ
Info
->
tableGroupInfo
,
pQInfo
,
&
pQuery
->
memRef
);
pRuntimeEnv
->
pQueryHandle
=
tsdbQueryRowsInExternalWindow
(
tsdb
,
&
cond
,
&
pQ
uery
->
tableGroupInfo
,
pQInfo
,
&
pQuery
->
memRef
);
}
else
{
pRuntimeEnv
->
pQueryHandle
=
tsdbQueryTables
(
tsdb
,
&
cond
,
&
pQ
Info
->
tableGroupInfo
,
pQInfo
,
&
pQuery
->
memRef
);
pRuntimeEnv
->
pQueryHandle
=
tsdbQueryTables
(
tsdb
,
&
cond
,
&
pQ
uery
->
tableGroupInfo
,
pQInfo
,
&
pQuery
->
memRef
);
}
return
terrno
;
...
...
@@ -4776,9 +4776,9 @@ int32_t doInitQInfo(SQInfo *pQInfo, STSBuf *pTsBuf, SArray* prevResult, void *ts
}
// create runtime environment
int32_t
numOfTables
=
pQ
Info
->
tableGroupInfo
.
numOfTables
;
int32_t
numOfTables
=
pQ
uery
->
tableGroupInfo
.
numOfTables
;
pQInfo
->
summary
.
tableInfoSize
+=
(
numOfTables
*
sizeof
(
STableQueryInfo
));
code
=
setupQueryRuntimeEnv
(
pRuntimeEnv
,
(
int32_t
)
pQ
Info
->
tableGroupInfo
.
numOfTables
,
pQuery
->
order
.
order
,
pQInfo
->
vgId
);
code
=
setupQueryRuntimeEnv
(
pRuntimeEnv
,
(
int32_t
)
pQ
uery
->
tableGroupInfo
.
numOfTables
,
pQuery
->
order
.
order
,
pQInfo
->
vgId
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
return
code
;
}
...
...
@@ -5086,7 +5086,7 @@ static void sequentialTableProcess(SQInfo *pQInfo) {
assert
(
pQuery
->
limit
.
offset
==
0
&&
pQuery
->
limit
.
limit
!=
0
);
while
(
pRuntimeEnv
->
groupIndex
<
numOfGroups
)
{
SArray
*
group
=
taosArrayGetP
(
pQ
Info
->
tableGroupInfo
.
pGroupList
,
pRuntimeEnv
->
groupIndex
);
SArray
*
group
=
taosArrayGetP
(
pQ
uery
->
tableGroupInfo
.
pGroupList
,
pRuntimeEnv
->
groupIndex
);
qDebug
(
"QInfo:%p point interpolation query on group:%d, total group:%"
PRIzu
", current group:%p"
,
pQInfo
,
pRuntimeEnv
->
groupIndex
,
numOfGroups
,
group
);
...
...
@@ -5145,7 +5145,7 @@ static void sequentialTableProcess(SQInfo *pQInfo) {
}
}
else
if
(
pQuery
->
groupbyColumn
)
{
// group-by on normal columns query
while
(
pRuntimeEnv
->
groupIndex
<
numOfGroups
)
{
SArray
*
group
=
taosArrayGetP
(
pQ
Info
->
tableGroupInfo
.
pGroupList
,
pRuntimeEnv
->
groupIndex
);
SArray
*
group
=
taosArrayGetP
(
pQ
uery
->
tableGroupInfo
.
pGroupList
,
pRuntimeEnv
->
groupIndex
);
qDebug
(
"QInfo:%p group by normal columns group:%d, total group:%"
PRIzu
""
,
pQInfo
,
pRuntimeEnv
->
groupIndex
,
numOfGroups
);
...
...
@@ -5228,7 +5228,7 @@ static void sequentialTableProcess(SQInfo *pQInfo) {
void
*
pQueryHandle
=
pRuntimeEnv
->
pQueryHandle
;
if
(
pQueryHandle
==
NULL
)
{
STsdbQueryCond
con
=
createTsdbQueryCond
(
pQuery
,
&
pQuery
->
window
);
pRuntimeEnv
->
pQueryHandle
=
tsdbQueryTables
(
pQuery
->
tsdb
,
&
con
,
&
pQ
Info
->
tableGroupInfo
,
pQInfo
,
&
pQuery
->
memRef
);
pRuntimeEnv
->
pQueryHandle
=
tsdbQueryTables
(
pQuery
->
tsdb
,
&
con
,
&
pQ
uery
->
tableGroupInfo
,
pQInfo
,
&
pQuery
->
memRef
);
pQueryHandle
=
pRuntimeEnv
->
pQueryHandle
;
}
...
...
@@ -5494,11 +5494,11 @@ static int32_t doSaveContext(SQInfo *pQInfo) {
setQueryStatus
(
pQuery
,
QUERY_NOT_COMPLETED
);
switchCtxOrder
(
pRuntimeEnv
);
disableFuncInReverseScan
(
p
QInfo
);
disableFuncInReverseScan
(
p
RuntimeEnv
);
setupQueryRangeForReverseScan
(
pQInfo
);
pRuntimeEnv
->
prevGroupId
=
INT32_MIN
;
pRuntimeEnv
->
pSecQueryHandle
=
tsdbQueryTables
(
pQuery
->
tsdb
,
&
cond
,
&
pQ
Info
->
tableGroupInfo
,
pQInfo
,
&
pQuery
->
memRef
);
pRuntimeEnv
->
pSecQueryHandle
=
tsdbQueryTables
(
pQuery
->
tsdb
,
&
cond
,
&
pQ
uery
->
tableGroupInfo
,
pQInfo
,
&
pQuery
->
memRef
);
return
(
pRuntimeEnv
->
pSecQueryHandle
==
NULL
)
?
-
1
:
0
;
}
...
...
@@ -5700,6 +5700,7 @@ static SSDataBlock* doScanTableImpl(STableScanInfo *pTableScanInfo) {
static
SSDataBlock
*
doTableScan
(
void
*
param
)
{
STableScanInfo
*
pTableScanInfo
=
(
STableScanInfo
*
)
param
;
SQueryRuntimeEnv
*
pRuntimeEnv
=
&
pTableScanInfo
->
pQInfo
->
runtimeEnv
;
SQuery
*
pQuery
=
pRuntimeEnv
->
pQuery
;
while
(
pTableScanInfo
->
current
<
pTableScanInfo
->
times
)
{
SSDataBlock
*
p
=
doScanTableImpl
(
pTableScanInfo
);
...
...
@@ -5713,16 +5714,16 @@ static SSDataBlock* doTableScan(void* param) {
// do prepare for the next round table scan operation
tsdbCleanupQueryHandle
(
pTableScanInfo
->
pQueryHandle
);
STsdbQueryCond
cond
=
createTsdbQueryCond
(
p
RuntimeEnv
->
pQuery
,
&
pRuntimeEnv
->
pQuery
->
window
);
STsdbQueryCond
cond
=
createTsdbQueryCond
(
p
Query
,
&
pQuery
->
window
);
pTableScanInfo
->
pQueryHandle
=
tsdbQueryTables
(
p
TableScanInfo
->
pQInfo
->
query
.
tsdb
,
&
cond
,
&
pTableScanInfo
->
pQInfo
->
tableGroupInfo
,
pTableScanInfo
->
pQInfo
,
&
p
TableScanInfo
->
pQInfo
->
query
.
memRef
);
tsdbQueryTables
(
p
Query
->
tsdb
,
&
cond
,
&
pQuery
->
tableGroupInfo
,
pTableScanInfo
->
pQInfo
,
&
p
Query
->
memRef
);
if
(
pTableScanInfo
->
pQueryHandle
==
NULL
)
{
longjmp
(
pRuntimeEnv
->
env
,
terrno
);
}
pRuntimeEnv
->
resultRowInfo
.
curIndex
=
0
;
setQueryStatus
(
p
RuntimeEnv
->
p
Query
,
QUERY_NOT_COMPLETED
);
setQueryStatus
(
pQuery
,
QUERY_NOT_COMPLETED
);
pRuntimeEnv
->
scanFlag
=
REPEAT_SCAN
;
if
(
pRuntimeEnv
->
pTsBuf
)
{
...
...
@@ -5739,9 +5740,9 @@ static SSDataBlock* doTableScan(void* param) {
tsdbCleanupQueryHandle
(
pTableScanInfo
->
pQueryHandle
);
STsdbQueryCond
cond
=
createTsdbQueryCond
(
p
RuntimeEnv
->
pQuery
,
&
pRuntimeEnv
->
pQuery
->
window
);
STsdbQueryCond
cond
=
createTsdbQueryCond
(
p
Query
,
&
pQuery
->
window
);
pTableScanInfo
->
pQueryHandle
=
tsdbQueryTables
(
p
TableScanInfo
->
pQInfo
->
query
.
tsdb
,
&
cond
,
&
pTableScanInfo
->
pQInfo
->
tableGroupInfo
,
tsdbQueryTables
(
p
Query
->
tsdb
,
&
cond
,
&
pQuery
->
tableGroupInfo
,
pTableScanInfo
->
pQInfo
,
&
pTableScanInfo
->
pQInfo
->
query
.
memRef
);
qDebug
(
"QInfo:%p start to reverse scan data blocks due to query func required, qrange:%"
PRId64
"-%"
PRId64
,
...
...
@@ -5798,6 +5799,7 @@ static UNUSED_FUNC int32_t getScanOrder(STableScanInfo* pTableScanInfo) {
// this is a blocking operator
static
SSDataBlock
*
doAggOperator
(
void
*
param
)
{
SAggOperatorInfo
*
pInfo
=
(
SAggOperatorInfo
*
)
param
;
SQueryRuntimeEnv
*
pRuntimeEnv
=
pInfo
->
pRuntimeEnv
;
int32_t
countId
=
0
;
int32_t
order
=
getScanOrder
(
pInfo
->
pTableScanInfo
);
...
...
@@ -5809,23 +5811,23 @@ static SSDataBlock* doAggOperator(void* param) {
}
if
(
countId
!=
getTableScanTime
(
pInfo
->
pTableScanInfo
))
{
needRepeatScan
(
p
Info
->
p
RuntimeEnv
);
needRepeatScan
(
pRuntimeEnv
);
countId
=
getTableScanTime
(
pInfo
->
pTableScanInfo
);
}
if
(
order
!=
getScanOrder
(
pInfo
->
pTableScanInfo
))
{
setEnvBeforeReverseScan_rv
(
p
Info
->
p
RuntimeEnv
);
setEnvBeforeReverseScan_rv
(
pRuntimeEnv
);
order
=
getScanOrder
(
pInfo
->
pTableScanInfo
);
}
aggApplyFunctions
(
p
Info
->
p
RuntimeEnv
,
pBlock
->
pBlockStatis
,
&
pBlock
->
info
,
pBlock
->
pDataBlock
);
aggApplyFunctions
(
pRuntimeEnv
,
pBlock
->
pBlockStatis
,
&
pBlock
->
info
,
pBlock
->
pDataBlock
);
}
setQueryStatus
(
p
Info
->
p
RuntimeEnv
->
pQuery
,
QUERY_COMPLETED
);
finalizeQueryResult
(
p
Info
->
p
RuntimeEnv
);
setQueryStatus
(
pRuntimeEnv
->
pQuery
,
QUERY_COMPLETED
);
finalizeQueryResult
(
pRuntimeEnv
);
p
Info
->
pRuntimeEnv
->
ouptputBuf
->
info
.
rows
=
getNumOfResult
(
pInfo
->
pRuntimeEnv
);
return
p
Info
->
p
RuntimeEnv
->
ouptputBuf
;
p
RuntimeEnv
->
ouptputBuf
->
info
.
rows
=
getNumOfResult
(
pRuntimeEnv
);
return
pRuntimeEnv
->
ouptputBuf
;
}
// todo set the attribute of query scan count
...
...
@@ -5871,8 +5873,7 @@ static void tableAggregationProcess(SQInfo *pQInfo, STableQueryInfo* pTableInfo)
SSDataBlock
*
pResBlock
=
pAggInfo
->
apply
(
pAggInfo
);
// since the numOfRows must be identical for all functions that are allowed to be executed simutaneously.
// pQuery->rec.rows = getNumOfResult(pRuntimeEnv);
pQuery
->
rec
.
rows
=
pResBlock
->
info
.
rows
;
//getNumOfResult(pRuntimeEnv);
pQuery
->
rec
.
rows
=
pResBlock
->
info
.
rows
;
// doSecondaryArithmeticProcess(pQuery);
// TODO limit/offset refactor to be one operator
...
...
@@ -6840,15 +6841,10 @@ SQInfo *createQInfoImpl(SQueryTableMsg *pQueryMsg, SSqlGroupbyExpr *pGroupbyExpr
// to make sure third party won't overwrite this structure
pQInfo
->
signature
=
pQInfo
;
pQInfo
->
tableGroupInfo
=
*
pTableGroupInfo
;
SQuery
*
pQuery
=
calloc
(
1
,
sizeof
(
SQuery
));
if
(
pQuery
==
NULL
)
{
goto
_cleanup_query
;
}
SQuery
*
pQuery
=
&
pQInfo
->
query
;
pQInfo
->
runtimeEnv
.
pQuery
=
pQuery
;
pQuery
->
tableGroupInfo
=
*
pTableGroupInfo
;
pQuery
->
numOfCols
=
numOfCols
;
pQuery
->
numOfOutput
=
numOfOutput
;
pQuery
->
limit
.
limit
=
pQueryMsg
->
limit
;
...
...
@@ -6972,7 +6968,7 @@ SQInfo *createQInfoImpl(SQueryTableMsg *pQueryMsg, SSqlGroupbyExpr *pGroupbyExpr
int32_t
index
=
0
;
for
(
int32_t
i
=
0
;
i
<
numOfGroups
;
++
i
)
{
SArray
*
pa
=
taosArrayGetP
(
pQ
Info
->
tableGroupInfo
.
pGroupList
,
i
);
SArray
*
pa
=
taosArrayGetP
(
pQ
uery
->
tableGroupInfo
.
pGroupList
,
i
);
size_t
s
=
taosArrayGetSize
(
pa
);
SArray
*
p1
=
taosArrayInit
(
s
,
POINTER_BYTES
);
...
...
@@ -7016,7 +7012,6 @@ SQInfo *createQInfoImpl(SQueryTableMsg *pQueryMsg, SSqlGroupbyExpr *pGroupbyExpr
_cleanup_qinfo:
tsdbDestroyTableGroup
(
pTableGroupInfo
);
_cleanup_query:
if
(
pGroupbyExpr
!=
NULL
)
{
taosArrayDestroy
(
pGroupbyExpr
->
columnInfo
);
free
(
pGroupbyExpr
);
...
...
@@ -7208,8 +7203,6 @@ void freeQInfo(SQInfo *pQInfo) {
taosArrayDestroy
(
pQuery
->
pGroupbyExpr
->
columnInfo
);
tfree
(
pQuery
->
pGroupbyExpr
);
}
tfree
(
pQuery
);
}
doDestroyTableQueryInfo
(
&
pRuntimeEnv
->
tableqinfoGroupInfo
);
...
...
@@ -7217,7 +7210,7 @@ void freeQInfo(SQInfo *pQInfo) {
tfree
(
pQInfo
->
pBuf
);
tfree
(
pQInfo
->
sql
);
tsdbDestroyTableGroup
(
&
pQ
Info
->
tableGroupInfo
);
tsdbDestroyTableGroup
(
&
pQ
uery
->
tableGroupInfo
);
taosHashCleanup
(
pQInfo
->
arrTableIdInfo
);
taosArrayDestroy
(
pQInfo
->
groupResInfo
.
pRows
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录