Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
fb632942
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看板
提交
fb632942
编写于
7月 25, 2023
作者:
D
dapan1121
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix: hash join res issue
上级
4f75eb56
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
102 addition
and
17 deletion
+102
-17
source/libs/executor/inc/hashjoin.h
source/libs/executor/inc/hashjoin.h
+11
-0
source/libs/executor/inc/querytask.h
source/libs/executor/inc/querytask.h
+1
-0
source/libs/executor/src/dynqueryctrloperator.c
source/libs/executor/src/dynqueryctrloperator.c
+2
-0
source/libs/executor/src/groupcacheoperator.c
source/libs/executor/src/groupcacheoperator.c
+10
-6
source/libs/executor/src/hashjoinoperator.c
source/libs/executor/src/hashjoinoperator.c
+66
-6
source/libs/executor/src/querytask.c
source/libs/executor/src/querytask.c
+1
-0
source/libs/executor/src/scanoperator.c
source/libs/executor/src/scanoperator.c
+11
-5
未找到文件。
source/libs/executor/inc/hashjoin.h
浏览文件 @
fb632942
...
@@ -83,6 +83,16 @@ typedef struct SHJoinTableInfo {
...
@@ -83,6 +83,16 @@ typedef struct SHJoinTableInfo {
bool
valColExist
;
bool
valColExist
;
}
SHJoinTableInfo
;
}
SHJoinTableInfo
;
typedef
struct
SHJoinExecInfo
{
int64_t
buildBlkNum
;
int64_t
buildBlkRows
;
int64_t
probeBlkNum
;
int64_t
probeBlkRows
;
int64_t
resRows
;
int64_t
expectRows
;
}
SHJoinExecInfo
;
typedef
struct
SHJoinOperatorInfo
{
typedef
struct
SHJoinOperatorInfo
{
int32_t
joinType
;
int32_t
joinType
;
SHJoinTableInfo
tbs
[
2
];
SHJoinTableInfo
tbs
[
2
];
...
@@ -96,6 +106,7 @@ typedef struct SHJoinOperatorInfo {
...
@@ -96,6 +106,7 @@ typedef struct SHJoinOperatorInfo {
SSHashObj
*
pKeyHash
;
SSHashObj
*
pKeyHash
;
bool
keyHashBuilt
;
bool
keyHashBuilt
;
SHJoinCtx
ctx
;
SHJoinCtx
ctx
;
SHJoinExecInfo
execInfo
;
}
SHJoinOperatorInfo
;
}
SHJoinOperatorInfo
;
#ifdef __cplusplus
#ifdef __cplusplus
...
...
source/libs/executor/inc/querytask.h
浏览文件 @
fb632942
...
@@ -39,6 +39,7 @@ typedef struct STaskIdInfo {
...
@@ -39,6 +39,7 @@ typedef struct STaskIdInfo {
uint64_t
templateId
;
uint64_t
templateId
;
char
*
str
;
char
*
str
;
int32_t
vgId
;
int32_t
vgId
;
uint64_t
taskId
;
}
STaskIdInfo
;
}
STaskIdInfo
;
typedef
struct
STaskCostInfo
{
typedef
struct
STaskCostInfo
{
...
...
source/libs/executor/src/dynqueryctrloperator.c
浏览文件 @
fb632942
...
@@ -148,6 +148,8 @@ static FORCE_INLINE int32_t buildBatchExchangeOperatorParam(SOperatorParam** ppR
...
@@ -148,6 +148,8 @@ static FORCE_INLINE int32_t buildBatchExchangeOperatorParam(SOperatorParam** ppR
basic
.
tableSeq
=
false
;
basic
.
tableSeq
=
false
;
tSimpleHashPut
(
pExc
->
pBatchs
,
pVgId
,
sizeof
(
*
pVgId
),
&
basic
,
sizeof
(
basic
));
tSimpleHashPut
(
pExc
->
pBatchs
,
pVgId
,
sizeof
(
*
pVgId
),
&
basic
,
sizeof
(
basic
));
qTrace
(
"build downstreamIdx %d batch scan, vgId:%d, uidNum:%"
PRId64
,
downstreamIdx
,
*
pVgId
,
(
int64_t
)
taosArrayGetSize
(
pUidList
));
}
}
(
*
ppRes
)
->
opType
=
QUERY_NODE_PHYSICAL_PLAN_EXCHANGE
;
(
*
ppRes
)
->
opType
=
QUERY_NODE_PHYSICAL_PLAN_EXCHANGE
;
...
...
source/libs/executor/src/groupcacheoperator.c
浏览文件 @
fb632942
...
@@ -86,7 +86,8 @@ static void destroyGroupCacheOperator(void* param) {
...
@@ -86,7 +86,8 @@ static void destroyGroupCacheOperator(void* param) {
}
}
static
FORCE_INLINE
int32_t
initOpenCacheFile
(
SGroupCacheFileFd
*
pFileFd
,
char
*
filename
)
{
static
FORCE_INLINE
int32_t
initOpenCacheFile
(
SGroupCacheFileFd
*
pFileFd
,
char
*
filename
)
{
TdFilePtr
newFd
=
taosOpenFile
(
filename
,
TD_FILE_CREATE
|
TD_FILE_READ
|
TD_FILE_WRITE
|
TD_FILE_AUTO_DEL
);
// TdFilePtr newFd = taosOpenFile(filename, TD_FILE_CREATE|TD_FILE_READ|TD_FILE_WRITE|TD_FILE_AUTO_DEL);
TdFilePtr
newFd
=
taosOpenFile
(
filename
,
TD_FILE_CREATE
|
TD_FILE_READ
|
TD_FILE_WRITE
);
if
(
NULL
==
newFd
)
{
if
(
NULL
==
newFd
)
{
return
TAOS_SYSTEM_ERROR
(
errno
);
return
TAOS_SYSTEM_ERROR
(
errno
);
}
}
...
@@ -158,7 +159,7 @@ static int32_t saveBlocksToDisk(SGroupCacheOperatorInfo* pGCache, SGcDownstreamC
...
@@ -158,7 +159,7 @@ static int32_t saveBlocksToDisk(SGroupCacheOperatorInfo* pGCache, SGcDownstreamC
releaseFdToFileCtx
(
pFd
);
releaseFdToFileCtx
(
pFd
);
qTrace
(
"FileId %u, blk %"
PRIu64
" size %"
PRIu64
" written to offset %"
PRIu64
,
qTrace
(
"FileId %u, blk %"
PRIu64
" size %"
PRIu64
" written to offset %"
PRIu64
,
pHead
->
basic
.
fileId
,
pHead
->
basic
.
blkId
,
pHead
->
basic
.
offset
,
pHead
->
basic
.
bufSize
);
pHead
->
basic
.
fileId
,
pHead
->
basic
.
blkId
,
pHead
->
basic
.
bufSize
,
pHead
->
basic
.
offset
);
int64_t
blkId
=
pHead
->
basic
.
blkId
;
int64_t
blkId
=
pHead
->
basic
.
blkId
;
pHead
=
pHead
->
next
;
pHead
=
pHead
->
next
;
...
@@ -347,7 +348,7 @@ static int32_t readBlockFromDisk(SGroupCacheOperatorInfo* pGCache, SGroupCacheDa
...
@@ -347,7 +348,7 @@ static int32_t readBlockFromDisk(SGroupCacheOperatorInfo* pGCache, SGroupCacheDa
}
}
qTrace
(
"FileId %u, blk %"
PRIu64
" size %"
PRIu64
" read from offset %"
PRIu64
,
qTrace
(
"FileId %u, blk %"
PRIu64
" size %"
PRIu64
" read from offset %"
PRIu64
,
pBasic
->
fileId
,
pBasic
->
blkId
,
pBasic
->
offset
,
pBasic
->
bufSize
);
pBasic
->
fileId
,
pBasic
->
blkId
,
pBasic
->
bufSize
,
pBasic
->
offset
);
_return:
_return:
...
@@ -387,7 +388,8 @@ static int32_t retrieveBlkFromBufCache(SGroupCacheOperatorInfo* pGCache, SGroupC
...
@@ -387,7 +388,8 @@ static int32_t retrieveBlkFromBufCache(SGroupCacheOperatorInfo* pGCache, SGroupC
static
FORCE_INLINE
void
initGcVgroupCtx
(
SOperatorInfo
*
pOperator
,
SGcVgroupCtx
*
pVgCtx
,
int32_t
downstreamId
,
int32_t
vgId
,
SArray
*
pTbList
)
{
static
FORCE_INLINE
void
initGcVgroupCtx
(
SOperatorInfo
*
pOperator
,
SGcVgroupCtx
*
pVgCtx
,
int32_t
downstreamId
,
int32_t
vgId
,
SArray
*
pTbList
)
{
pVgCtx
->
pTbList
=
pTbList
;
pVgCtx
->
pTbList
=
pTbList
;
snprintf
(
pVgCtx
->
fileCtx
.
baseFilename
,
sizeof
(
pVgCtx
->
fileCtx
.
baseFilename
)
-
1
,
"%s/gc_%d_%s_%d_%d"
,
tsTempDir
,
getpid
(),
GET_TASKID
(
pOperator
->
pTaskInfo
),
downstreamId
,
vgId
);
snprintf
(
pVgCtx
->
fileCtx
.
baseFilename
,
sizeof
(
pVgCtx
->
fileCtx
.
baseFilename
)
-
1
,
"%s/gc_%d_%"
PRIx64
"_%"
PRIu64
"_%d_%d"
,
tsTempDir
,
getpid
(),
pOperator
->
pTaskInfo
->
id
.
queryId
,
pOperator
->
pTaskInfo
->
id
.
taskId
,
downstreamId
,
vgId
);
pVgCtx
->
fileCtx
.
baseFilename
[
sizeof
(
pVgCtx
->
fileCtx
.
baseFilename
)
-
1
]
=
0
;
pVgCtx
->
fileCtx
.
baseFilename
[
sizeof
(
pVgCtx
->
fileCtx
.
baseFilename
)
-
1
]
=
0
;
pVgCtx
->
fileCtx
.
baseNameLen
=
strlen
(
pVgCtx
->
fileCtx
.
baseFilename
);
pVgCtx
->
fileCtx
.
baseNameLen
=
strlen
(
pVgCtx
->
fileCtx
.
baseFilename
);
...
@@ -857,6 +859,7 @@ static int32_t initGroupCacheBlockCache(SGroupCacheOperatorInfo* pInfo) {
...
@@ -857,6 +859,7 @@ static int32_t initGroupCacheBlockCache(SGroupCacheOperatorInfo* pInfo) {
if
(
NULL
==
pCache
->
pReadBlk
)
{
if
(
NULL
==
pCache
->
pReadBlk
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
return
TSDB_CODE_OUT_OF_MEMORY
;
}
}
pCache
->
writeDownstreamId
=
-
1
;
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
...
@@ -982,7 +985,8 @@ static int32_t initGroupCacheDownstreamCtx(SOperatorInfo* pOperator) {
...
@@ -982,7 +985,8 @@ static int32_t initGroupCacheDownstreamCtx(SOperatorInfo* pOperator) {
return
TSDB_CODE_OUT_OF_MEMORY
;
return
TSDB_CODE_OUT_OF_MEMORY
;
}
}
snprintf
(
pCtx
->
fileCtx
.
baseFilename
,
sizeof
(
pCtx
->
fileCtx
.
baseFilename
)
-
1
,
"%s/gc_%d_%s_%d"
,
tsTempDir
,
getpid
(),
GET_TASKID
(
pOperator
->
pTaskInfo
),
pCtx
->
id
);
snprintf
(
pCtx
->
fileCtx
.
baseFilename
,
sizeof
(
pCtx
->
fileCtx
.
baseFilename
)
-
1
,
"%s/gc_%d_%"
PRIx64
"_%"
PRIu64
"_%d"
,
tsTempDir
,
getpid
(),
pOperator
->
pTaskInfo
->
id
.
queryId
,
pOperator
->
pTaskInfo
->
id
.
taskId
,
pCtx
->
id
);
pCtx
->
fileCtx
.
baseFilename
[
sizeof
(
pCtx
->
fileCtx
.
baseFilename
)
-
1
]
=
0
;
pCtx
->
fileCtx
.
baseFilename
[
sizeof
(
pCtx
->
fileCtx
.
baseFilename
)
-
1
]
=
0
;
pCtx
->
fileCtx
.
baseNameLen
=
strlen
(
pCtx
->
fileCtx
.
baseFilename
);
pCtx
->
fileCtx
.
baseNameLen
=
strlen
(
pCtx
->
fileCtx
.
baseFilename
);
}
}
...
@@ -1018,7 +1022,7 @@ SOperatorInfo* createGroupCacheOperatorInfo(SOperatorInfo** pDownstream, int32_t
...
@@ -1018,7 +1022,7 @@ SOperatorInfo* createGroupCacheOperatorInfo(SOperatorInfo** pDownstream, int32_t
setOperatorInfo
(
pOperator
,
"GroupCacheOperator"
,
QUERY_NODE_PHYSICAL_PLAN_GROUP_CACHE
,
false
,
OP_NOT_OPENED
,
pInfo
,
pTaskInfo
);
setOperatorInfo
(
pOperator
,
"GroupCacheOperator"
,
QUERY_NODE_PHYSICAL_PLAN_GROUP_CACHE
,
false
,
OP_NOT_OPENED
,
pInfo
,
pTaskInfo
);
pInfo
->
maxCacheSize
=
1
04857600
;
pInfo
->
maxCacheSize
=
1
;
pInfo
->
grpByUid
=
pPhyciNode
->
grpByUid
;
pInfo
->
grpByUid
=
pPhyciNode
->
grpByUid
;
pInfo
->
globalGrp
=
pPhyciNode
->
globalGrp
;
pInfo
->
globalGrp
=
pPhyciNode
->
globalGrp
;
pInfo
->
batchFetch
=
pPhyciNode
->
batchFetch
;
pInfo
->
batchFetch
=
pPhyciNode
->
batchFetch
;
...
...
source/libs/executor/src/hashjoinoperator.c
浏览文件 @
fb632942
...
@@ -27,6 +27,31 @@
...
@@ -27,6 +27,31 @@
#include "ttypes.h"
#include "ttypes.h"
#include "hashjoin.h"
#include "hashjoin.h"
static
int64_t
getSingleKeyRowsNum
(
SBufRowInfo
*
pRow
)
{
int64_t
rows
=
0
;
while
(
pRow
)
{
rows
++
;
pRow
=
pRow
->
next
;
}
return
rows
;
}
static
int64_t
getRowsNumOfKeyHash
(
SSHashObj
*
pHash
)
{
SGroupData
*
pGroup
=
NULL
;
int32_t
iter
=
0
;
int64_t
rowsNum
=
0
;
while
(
pGroup
=
tSimpleHashIterate
(
pHash
,
pGroup
,
&
iter
))
{
int32_t
*
pKey
=
tSimpleHashGetKey
(
pGroup
,
NULL
);
int64_t
rows
=
getSingleKeyRowsNum
(
pGroup
->
rows
);
qTrace
(
"build_key:%d, rows:%"
PRId64
,
*
pKey
,
rows
);
rowsNum
+=
rows
;
}
return
rowsNum
;
}
static
int32_t
initHJoinKeyColsInfo
(
SHJoinTableInfo
*
pTable
,
SNodeList
*
pList
)
{
static
int32_t
initHJoinKeyColsInfo
(
SHJoinTableInfo
*
pTable
,
SNodeList
*
pList
)
{
pTable
->
keyNum
=
LIST_LENGTH
(
pList
);
pTable
->
keyNum
=
LIST_LENGTH
(
pList
);
...
@@ -274,6 +299,9 @@ static void destroyHJoinKeyHash(SSHashObj** ppHash) {
...
@@ -274,6 +299,9 @@ static void destroyHJoinKeyHash(SSHashObj** ppHash) {
static
void
destroyHashJoinOperator
(
void
*
param
)
{
static
void
destroyHashJoinOperator
(
void
*
param
)
{
SHJoinOperatorInfo
*
pJoinOperator
=
(
SHJoinOperatorInfo
*
)
param
;
SHJoinOperatorInfo
*
pJoinOperator
=
(
SHJoinOperatorInfo
*
)
param
;
qError
(
"hashJoin exec info, buildBlk:%"
PRId64
", buildRows:%"
PRId64
", probeBlk:%"
PRId64
", probeRows:%"
PRId64
", resRows:%"
PRId64
,
pJoinOperator
->
execInfo
.
buildBlkNum
,
pJoinOperator
->
execInfo
.
buildBlkRows
,
pJoinOperator
->
execInfo
.
probeBlkNum
,
pJoinOperator
->
execInfo
.
probeBlkRows
,
pJoinOperator
->
execInfo
.
resRows
);
destroyHJoinKeyHash
(
&
pJoinOperator
->
pKeyHash
);
destroyHJoinKeyHash
(
&
pJoinOperator
->
pKeyHash
);
...
@@ -348,19 +376,21 @@ static FORCE_INLINE int32_t copyHJoinResRowsToBlock(SHJoinOperatorInfo* pJoin, i
...
@@ -348,19 +376,21 @@ static FORCE_INLINE int32_t copyHJoinResRowsToBlock(SHJoinOperatorInfo* pJoin, i
}
}
static
FORCE_INLINE
void
appendHJoinResToBlock
(
struct
SOperatorInfo
*
pOperator
,
SSDataBlock
*
pRes
)
{
static
FORCE_INLINE
void
appendHJoinResToBlock
(
struct
SOperatorInfo
*
pOperator
,
SSDataBlock
*
pRes
,
bool
*
allFetched
)
{
SHJoinOperatorInfo
*
pJoin
=
pOperator
->
info
;
SHJoinOperatorInfo
*
pJoin
=
pOperator
->
info
;
SHJoinCtx
*
pCtx
=
&
pJoin
->
ctx
;
SHJoinCtx
*
pCtx
=
&
pJoin
->
ctx
;
SBufRowInfo
*
pStart
=
pCtx
->
pBuildRow
;
SBufRowInfo
*
pStart
=
pCtx
->
pBuildRow
;
int32_t
rowNum
=
0
;
int32_t
rowNum
=
0
;
int32_t
resNum
=
pRes
->
info
.
rows
;
int32_t
resNum
=
pRes
->
info
.
rows
;
while
(
pCtx
->
pBuildRow
&&
resNum
<
pRes
->
info
.
capacity
)
{
while
(
pCtx
->
pBuildRow
&&
(
resNum
<
pRes
->
info
.
capacity
)
)
{
rowNum
++
;
rowNum
++
;
resNum
++
;
resNum
++
;
pCtx
->
pBuildRow
=
pCtx
->
pBuildRow
->
next
;
pCtx
->
pBuildRow
=
pCtx
->
pBuildRow
->
next
;
}
}
pJoin
->
execInfo
.
resRows
+=
rowNum
;
int32_t
code
=
copyHJoinResRowsToBlock
(
pJoin
,
rowNum
,
pStart
,
pRes
);
int32_t
code
=
copyHJoinResRowsToBlock
(
pJoin
,
rowNum
,
pStart
,
pRes
);
if
(
code
)
{
if
(
code
)
{
pOperator
->
pTaskInfo
->
code
=
code
;
pOperator
->
pTaskInfo
->
code
=
code
;
...
@@ -368,7 +398,7 @@ static FORCE_INLINE void appendHJoinResToBlock(struct SOperatorInfo* pOperator,
...
@@ -368,7 +398,7 @@ static FORCE_INLINE void appendHJoinResToBlock(struct SOperatorInfo* pOperator,
}
}
pRes
->
info
.
rows
=
resNum
;
pRes
->
info
.
rows
=
resNum
;
pCtx
->
rowRemains
=
pCtx
->
pBuildRow
?
true
:
fals
e
;
*
allFetched
=
pCtx
->
pBuildRow
?
false
:
tru
e
;
}
}
...
@@ -412,23 +442,44 @@ static void doHashJoinImpl(struct SOperatorInfo* pOperator) {
...
@@ -412,23 +442,44 @@ static void doHashJoinImpl(struct SOperatorInfo* pOperator) {
SHJoinCtx
*
pCtx
=
&
pJoin
->
ctx
;
SHJoinCtx
*
pCtx
=
&
pJoin
->
ctx
;
SSDataBlock
*
pRes
=
pJoin
->
pRes
;
SSDataBlock
*
pRes
=
pJoin
->
pRes
;
size_t
bufLen
=
0
;
size_t
bufLen
=
0
;
bool
allFetched
=
false
;
if
(
pJoin
->
ctx
.
pBuildRow
)
{
if
(
pJoin
->
ctx
.
pBuildRow
)
{
appendHJoinResToBlock
(
pOperator
,
pRes
);
appendHJoinResToBlock
(
pOperator
,
pRes
,
&
allFetched
);
if
(
pRes
->
info
.
rows
>=
pRes
->
info
.
capacity
)
{
if
(
pRes
->
info
.
rows
>=
pRes
->
info
.
capacity
)
{
if
(
allFetched
)
{
++
pCtx
->
probeIdx
;
}
return
;
return
;
}
else
{
++
pCtx
->
probeIdx
;
}
}
}
}
for
(;
pCtx
->
probeIdx
<
pCtx
->
pProbeData
->
info
.
rows
;
++
pCtx
->
probeIdx
)
{
for
(;
pCtx
->
probeIdx
<
pCtx
->
pProbeData
->
info
.
rows
;
++
pCtx
->
probeIdx
)
{
copyKeyColsDataToBuf
(
pProbe
,
pCtx
->
probeIdx
,
&
bufLen
);
copyKeyColsDataToBuf
(
pProbe
,
pCtx
->
probeIdx
,
&
bufLen
);
SGroupData
*
pGroup
=
tSimpleHashGet
(
pJoin
->
pKeyHash
,
pProbe
->
keyData
,
bufLen
);
SGroupData
*
pGroup
=
tSimpleHashGet
(
pJoin
->
pKeyHash
,
pProbe
->
keyData
,
bufLen
);
/*
size_t keySize = 0;
int32_t* pKey = tSimpleHashGetKey(pGroup, &keySize);
ASSERT(keySize == bufLen && 0 == memcmp(pKey, pProbe->keyData, bufLen));
int64_t rows = getSingleKeyRowsNum(pGroup->rows);
pJoin->execInfo.expectRows += rows;
qTrace("hash_key:%d, rows:%" PRId64, *pKey, rows);
*/
if
(
pGroup
)
{
if
(
pGroup
)
{
pCtx
->
pBuildRow
=
pGroup
->
rows
;
pCtx
->
pBuildRow
=
pGroup
->
rows
;
appendHJoinResToBlock
(
pOperator
,
pRes
);
appendHJoinResToBlock
(
pOperator
,
pRes
,
&
allFetched
);
if
(
pRes
->
info
.
rows
>=
pRes
->
info
.
capacity
)
{
if
(
pRes
->
info
.
rows
>=
pRes
->
info
.
capacity
)
{
if
(
allFetched
)
{
++
pCtx
->
probeIdx
;
}
return
;
return
;
}
}
}
else
{
qTrace
(
"no key matched"
);
}
}
}
}
...
@@ -649,6 +700,9 @@ static int32_t buildHJoinKeyHash(struct SOperatorInfo* pOperator) {
...
@@ -649,6 +700,9 @@ static int32_t buildHJoinKeyHash(struct SOperatorInfo* pOperator) {
break
;
break
;
}
}
pJoin
->
execInfo
.
buildBlkNum
++
;
pJoin
->
execInfo
.
buildBlkRows
+=
pBlock
->
info
.
rows
;
code
=
addBlockRowsToHash
(
pBlock
,
pJoin
);
code
=
addBlockRowsToHash
(
pBlock
,
pJoin
);
if
(
code
)
{
if
(
code
)
{
return
code
;
return
code
;
...
@@ -673,6 +727,7 @@ static int32_t launchBlockHashJoin(struct SOperatorInfo* pOperator, SSDataBlock*
...
@@ -673,6 +727,7 @@ static int32_t launchBlockHashJoin(struct SOperatorInfo* pOperator, SSDataBlock*
pJoin
->
ctx
.
probeIdx
=
0
;
pJoin
->
ctx
.
probeIdx
=
0
;
pJoin
->
ctx
.
pBuildRow
=
NULL
;
pJoin
->
ctx
.
pBuildRow
=
NULL
;
pJoin
->
ctx
.
pProbeData
=
pBlock
;
pJoin
->
ctx
.
pProbeData
=
pBlock
;
pJoin
->
ctx
.
rowRemains
=
true
;
doHashJoinImpl
(
pOperator
);
doHashJoinImpl
(
pOperator
);
...
@@ -718,12 +773,14 @@ static SSDataBlock* doHashJoin(struct SOperatorInfo* pOperator) {
...
@@ -718,12 +773,14 @@ static SSDataBlock* doHashJoin(struct SOperatorInfo* pOperator) {
setHJoinDone
(
pOperator
);
setHJoinDone
(
pOperator
);
goto
_return
;
goto
_return
;
}
}
//qTrace("build table rows:%" PRId64, getRowsNumOfKeyHash(pJoin->pKeyHash));
}
}
if
(
pJoin
->
ctx
.
rowRemains
)
{
if
(
pJoin
->
ctx
.
rowRemains
)
{
doHashJoinImpl
(
pOperator
);
doHashJoinImpl
(
pOperator
);
if
(
pRes
->
info
.
rows
>=
p
Operator
->
resultInfo
.
threshold
&&
pOperator
->
exprSupp
.
pFilterInfo
!=
NULL
)
{
if
(
pRes
->
info
.
rows
>=
p
Res
->
info
.
capacity
&&
pOperator
->
exprSupp
.
pFilterInfo
!=
NULL
)
{
doFilter
(
pRes
,
pOperator
->
exprSupp
.
pFilterInfo
,
NULL
);
doFilter
(
pRes
,
pOperator
->
exprSupp
.
pFilterInfo
,
NULL
);
}
}
if
(
pRes
->
info
.
rows
>
0
)
{
if
(
pRes
->
info
.
rows
>
0
)
{
...
@@ -737,6 +794,9 @@ static SSDataBlock* doHashJoin(struct SOperatorInfo* pOperator) {
...
@@ -737,6 +794,9 @@ static SSDataBlock* doHashJoin(struct SOperatorInfo* pOperator) {
setHJoinDone
(
pOperator
);
setHJoinDone
(
pOperator
);
break
;
break
;
}
}
pJoin
->
execInfo
.
probeBlkNum
++
;
pJoin
->
execInfo
.
probeBlkRows
+=
pBlock
->
info
.
rows
;
code
=
launchBlockHashJoin
(
pOperator
,
pBlock
);
code
=
launchBlockHashJoin
(
pOperator
,
pBlock
);
if
(
code
)
{
if
(
code
)
{
...
...
source/libs/executor/src/querytask.c
浏览文件 @
fb632942
...
@@ -54,6 +54,7 @@ SExecTaskInfo* doCreateTask(uint64_t queryId, uint64_t taskId, int32_t vgId, EOP
...
@@ -54,6 +54,7 @@ SExecTaskInfo* doCreateTask(uint64_t queryId, uint64_t taskId, int32_t vgId, EOP
pTaskInfo
->
id
.
vgId
=
vgId
;
pTaskInfo
->
id
.
vgId
=
vgId
;
pTaskInfo
->
id
.
queryId
=
queryId
;
pTaskInfo
->
id
.
queryId
=
queryId
;
pTaskInfo
->
id
.
taskId
=
taskId
;
pTaskInfo
->
id
.
str
=
taosMemoryMalloc
(
64
);
pTaskInfo
->
id
.
str
=
taosMemoryMalloc
(
64
);
buildTaskId
(
taskId
,
queryId
,
pTaskInfo
->
id
.
str
);
buildTaskId
(
taskId
,
queryId
,
pTaskInfo
->
id
.
str
);
return
pTaskInfo
;
return
pTaskInfo
;
...
...
source/libs/executor/src/scanoperator.c
浏览文件 @
fb632942
...
@@ -803,18 +803,24 @@ static int32_t createTableListInfoFromParam(SOperatorInfo* pOperator) {
...
@@ -803,18 +803,24 @@ static int32_t createTableListInfoFromParam(SOperatorInfo* pOperator) {
pListInfo
->
oneTableForEachGroup
=
false
;
pListInfo
->
oneTableForEachGroup
=
false
;
pListInfo
->
numOfOuputGroups
=
1
;
pListInfo
->
numOfOuputGroups
=
1
;
}
}
STableKeyInfo
info
=
{.
groupId
=
0
};
for
(
int32_t
i
=
0
;
i
<
num
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
num
;
++
i
)
{
uint64_t
*
pUid
=
taosArrayGet
(
pParam
->
pUidList
,
i
);
uint64_t
*
pUid
=
taosArrayGet
(
pParam
->
pUidList
,
i
);
STableKeyInfo
info
=
{.
uid
=
*
pUid
,
.
groupId
=
0
};
if
(
taosHashPut
(
pListInfo
->
map
,
pUid
,
sizeof
(
uint64_t
),
&
i
,
sizeof
(
int32_t
)))
{
if
(
TSDB_CODE_DUP_KEY
==
terrno
)
{
continue
;
}
return
TSDB_CODE_OUT_OF_MEMORY
;
}
info
.
uid
=
*
pUid
;
void
*
p
=
taosArrayPush
(
pListInfo
->
pTableList
,
&
info
);
void
*
p
=
taosArrayPush
(
pListInfo
->
pTableList
,
&
info
);
if
(
p
==
NULL
)
{
if
(
p
==
NULL
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
return
TSDB_CODE_OUT_OF_MEMORY
;
}
}
taosHashPut
(
pListInfo
->
map
,
pUid
,
sizeof
(
uint64_t
),
&
i
,
sizeof
(
int32_t
));
qError
(
"add dynamic table scan uid:%"
PRIu64
", %s"
,
info
.
uid
,
GET_TASKID
(
pTaskInfo
));
qError
(
"add dynamic table scan uid:%"
PRIu64
", %s"
,
info
.
uid
,
GET_TASKID
(
pTaskInfo
));
}
}
...
@@ -3596,4 +3602,4 @@ static void destoryTableCountScanOperator(void* param) {
...
@@ -3596,4 +3602,4 @@ static void destoryTableCountScanOperator(void* param) {
taosArrayDestroy
(
pTableCountScanInfo
->
stbUidList
);
taosArrayDestroy
(
pTableCountScanInfo
->
stbUidList
);
taosMemoryFreeClear
(
param
);
taosMemoryFreeClear
(
param
);
}
}
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录