Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
6763c6f9
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看板
提交
6763c6f9
编写于
7月 12, 2023
作者:
D
dapan1121
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
enh: support parallel group cache fetch
上级
a42bd9e4
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
156 addition
and
68 deletion
+156
-68
source/libs/executor/inc/executorInt.h
source/libs/executor/inc/executorInt.h
+11
-2
source/libs/executor/inc/groupcache.h
source/libs/executor/inc/groupcache.h
+0
-5
source/libs/executor/src/executor.c
source/libs/executor/src/executor.c
+4
-1
source/libs/executor/src/groupcacheoperator.c
source/libs/executor/src/groupcacheoperator.c
+93
-59
source/libs/executor/src/operator.c
source/libs/executor/src/operator.c
+48
-1
未找到文件。
source/libs/executor/inc/executorInt.h
浏览文件 @
6763c6f9
...
...
@@ -106,7 +106,6 @@ typedef struct SExchangeOpStopInfo {
}
SExchangeOpStopInfo
;
typedef
struct
SGcOperatorParam
{
SOperatorParam
*
pChild
;
int64_t
sessionId
;
int32_t
downstreamIdx
;
bool
needCache
;
...
...
@@ -151,10 +150,20 @@ typedef struct SLimitInfo {
typedef
struct
SSortMergeJoinOperatorParam
{
}
SSortMergeJoinOperatorParam
;
typedef
struct
SExchangeOperatorParam
{
typedef
struct
SExchangeOperator
Basic
Param
{
int32_t
vgId
;
int32_t
srcOpType
;
SArray
*
uidList
;
}
SExchangeOperatorBasicParam
;
typedef
struct
SExchangeOperatorBatchParam
{
bool
multiParams
;
SArray
*
pBatchs
;
// SArray<SExchangeOperatorBasicParam>
}
SExchangeOperatorBatchParam
;
typedef
struct
SExchangeOperatorParam
{
bool
multiParams
;
SExchangeOperatorBasicParam
basic
;
}
SExchangeOperatorParam
;
typedef
struct
SExchangeInfo
{
...
...
source/libs/executor/inc/groupcache.h
浏览文件 @
6763c6f9
...
...
@@ -88,13 +88,8 @@ typedef struct SGcExecInfo {
int64_t
*
pDownstreamBlkNum
;
}
SGcExecInfo
;
typedef
struct
SGcNewGroupInfo
{
int64_t
uid
;
}
SGcNewGroupInfo
;
typedef
struct
SGroupCacheOperatorInfo
{
TdThreadMutex
sessionMutex
;
SGcNewGroupInfo
newGroup
;
SSHashObj
*
pSessionHash
;
SGroupColsInfo
groupColsInfo
;
bool
grpByUid
;
...
...
source/libs/executor/src/executor.c
浏览文件 @
6763c6f9
...
...
@@ -516,6 +516,10 @@ bool qIsDynamicExecTask(qTaskInfo_t tinfo) {
return
((
SExecTaskInfo
*
)
tinfo
)
->
dynamicTask
;
}
void
destroyOperatorParamValue
(
void
*
pValues
)
{
}
void
destroyOperatorParam
(
SOperatorParam
*
pParam
)
{
if
(
NULL
==
pParam
)
{
return
;
...
...
@@ -524,7 +528,6 @@ void destroyOperatorParam(SOperatorParam* pParam) {
//TODO
}
void
qUpdateOperatorParam
(
qTaskInfo_t
tinfo
,
void
*
pParam
)
{
destroyOperatorParam
(((
SExecTaskInfo
*
)
tinfo
)
->
pOpParam
);
((
SExecTaskInfo
*
)
tinfo
)
->
pOpParam
=
pParam
;
...
...
source/libs/executor/src/groupcacheoperator.c
浏览文件 @
6763c6f9
...
...
@@ -105,38 +105,73 @@ static FORCE_INLINE int32_t addPageToGroupCacheBuf(SArray* pBlkBufs) {
return
TSDB_CODE_SUCCESS
;
}
static
void
addBlkToBlkBufs
(
struct
SOperatorInfo
*
pOperator
,
SSDataBlock
*
pBlock
,
SGcBlkBufInfo
**
ppBuf
)
{
*
ppRes
=
pBlock
;
}
static
FORCE_INLINE
char
*
retrieveBlkFromBlkBufs
(
SArray
*
pBlkBufs
,
SGcBlkBufInfo
*
pBlkInfo
)
{
SGcBufPageInfo
*
pPage
=
taosArrayGet
(
pBlkBufs
,
pBlkInfo
->
pageId
);
return
pPage
->
data
+
pBlkInfo
->
offset
;
}
static
FORCE_INLINE
int32_t
appendNewGroupToDownstream
(
struct
SOperatorInfo
*
pOperator
,
int32_t
downstreamIdx
)
{
static
FORCE_INLINE
int32_t
appendNewGroupToDownstream
(
struct
SOperatorInfo
*
pOperator
,
int32_t
downstreamIdx
,
SOperatorParam
**
ppParam
)
{
int32_t
code
=
TSDB_CODE_SUCCESS
;
SGroupCacheOperatorInfo
*
pGCache
=
pOperator
->
info
;
SGcDownstreamCtx
*
pCtx
=
&
pGCache
->
pDownstreams
[
downstreamIdx
];
SOperatorParam
*
pDst
=
NULL
;
taosWLockLatch
(
&
pCtx
->
lock
);
int32_t
num
=
taosArrayGetSize
(
pCtx
->
pNewGrpList
);
if
(
num
<=
0
)
{
goto
_return
;
}
taosWLockLatch
(
&
pGCache
->
pDownstreams
[
pParam
->
downstreamIdx
].
lock
);
if
(
NULL
==
taosArrayPush
(
pCtx
->
pGrpUidList
,
&
pGCache
->
newGroup
.
uid
))
{
return
TSDB_CODE_OUT_OF_MEMORY
;
for
(
int32_t
i
=
0
;
i
<
num
;
++
i
)
{
SGcNewGroupInfo
*
pNew
=
taosArrayGet
(
pCtx
->
pNewGrpList
,
i
);
if
(
NULL
==
taosArrayPush
(
pCtx
->
pGrpUidList
,
&
pNew
->
uid
))
{
code
=
TSDB_CODE_OUT_OF_MEMORY
;
goto
_return
;
}
if
(
num
>
1
)
{
if
(
0
==
i
)
{
pDst
=
pNew
->
pParam
;
}
else
{
code
=
mergeOperatorParams
(
pDst
,
pNew
->
pParam
);
if
(
code
)
{
goto
_return
;
}
}
}
else
{
pDst
=
pNew
->
pParam
;
}
}
taosArrayClear
(
pCtx
->
pNewGrpList
);
pGCache
->
newGroup
.
uid
=
0
;
taosThreadMutexUnlock
(
&
pGCache
->
sessionMutex
);
_return:
taosWUnLockLatch
(
&
pCtx
->
lock
);
*
ppParam
=
pDst
;
return
TSDB_CODE_SUCCESS
;
return
code
;
}
static
FORCE_INLINE
int32_t
getBlkFromDownstreamOperator
(
struct
SOperatorInfo
*
pOperator
,
int32_t
downstreamIdx
,
SSDataBlock
**
ppRes
)
{
int32_t
code
=
TSDB_CODE_SUCCESS
;
SOperatorParam
*
pDownstreamParam
=
NULL
;
SSDataBlock
*
pBlock
=
NULL
;
SGroupCacheOperatorInfo
*
pGCache
=
pOperator
->
info
;
if
(
pGCache
->
pDownstreams
[
downstreamIdx
].
pNewGrpList
)
{
code
=
appendNewGroupToDownstream
(
pOperator
,
downstreamIdx
,
&
pGCache
->
newGroup
.
uid
);
if
(
code
)
{
return
code
;
}
code
=
appendNewGroupToDownstream
(
pOperator
,
downstreamIdx
,
&
pDownstreamParam
);
if
(
code
)
{
return
code
;
}
SSDataBlock
*
pBlock
=
getNextBlockFromDownstreamOnce
(
pOperator
,
downstreamIdx
);
if
(
pDownstreamParam
)
{
pBlock
=
pOperator
->
pDownstream
[
downstreamIdx
]
->
fpSet
.
getNextExtFn
(
pOperator
->
pDownstream
[
downstreamIdx
],
pDownstreamParam
);
}
else
{
pBlock
=
pOperator
->
pDownstream
[
downstreamIdx
]
->
fpSet
.
getNextFn
(
pOperator
->
pDownstream
[
downstreamIdx
]);
}
if
(
pBlock
)
{
pGCache
->
execInfo
.
pDownstreamBlkNum
[
downstreamIdx
]
++
;
}
...
...
@@ -146,10 +181,6 @@ static FORCE_INLINE int32_t getBlkFromDownstreamOperator(struct SOperatorInfo* p
return
TSDB_CODE_SUCCESS
;
}
static
void
addBlkToGroupCache
(
struct
SOperatorInfo
*
pOperator
,
SSDataBlock
*
pBlock
,
SSDataBlock
**
ppRes
)
{
*
ppRes
=
pBlock
;
}
static
void
notifyWaitingSessions
(
SArray
*
pWaitQueue
)
{
if
(
NULL
==
pWaitQueue
||
taosArrayGetSize
(
pWaitQueue
)
<=
0
)
{
return
;
...
...
@@ -171,7 +202,7 @@ int32_t handleGroupCacheRetrievedBlk(struct SOperatorInfo* pOperator, SSDataBloc
if
(
pGroup
->
needCache
)
{
SGcBlkBufInfo
*
pNewBlk
=
NULL
;
code
=
addBlkTo
GroupCache
(
pOperator
,
pBlock
,
&
pNewBlk
);
code
=
addBlkTo
BlkBufs
(
pOperator
,
pBlock
,
&
pNewBlk
);
if
(
code
)
{
return
code
;
}
...
...
@@ -197,7 +228,21 @@ int32_t handleGroupCacheRetrievedBlk(struct SOperatorInfo* pOperator, SSDataBloc
}
static
int32_t
handleDownstreamFetchDone
(
struct
SOperatorInfo
*
pOperator
,
SGcSessionCtx
*
pSession
)
{
notifyWaitingSessions
();
int32_t
code
=
TSDB_CODE_SUCCESS
;
SGroupCacheOperatorInfo
*
pGCache
=
pOperator
->
info
;
SGcDownstreamCtx
*
pCtx
=
&
pGCache
->
pDownstreams
[
pSession
->
downstreamIdx
];
int32_t
uidNum
=
taosArrayGetSize
(
pCtx
->
pGrpUidList
);
for
(
int32_t
i
=
0
;
i
<
uidNum
;
++
i
)
{
int64_t
*
pUid
=
taosArrayGet
(
pCtx
->
pGrpUidList
,
i
);
SGroupCacheData
*
pGroup
=
taosHashGet
(
pGCache
->
pBlkHash
,
pUid
,
sizeof
(
*
pUid
));
pGroup
->
pBlock
=
NULL
;
pGroup
->
fetchDone
=
true
;
notifyWaitingSessions
(
pGroup
->
waitQueue
);
}
taosArrayClear
(
pCtx
->
pGrpUidList
);
return
TSDB_CODE_SUCCESS
;
}
static
int32_t
getCacheBlkFromDownstreamOperator
(
struct
SOperatorInfo
*
pOperator
,
SGcSessionCtx
*
pSession
,
SSDataBlock
**
ppRes
)
{
...
...
@@ -334,15 +379,16 @@ static int32_t initGroupCacheBufPages(SGroupCacheOperatorInfo* pInfo) {
return
addPageToGroupCacheBuf
(
pInfo
->
pBlkBufs
);
}
static
int32_t
initGroupCacheGroupData
(
struct
SOperatorInfo
*
pOperator
,
S
Gc
OperatorParam
*
pParam
,
SGroupCacheData
**
ppGrp
)
{
static
int32_t
initGroupCacheGroupData
(
struct
SOperatorInfo
*
pOperator
,
SOperatorParam
*
pParam
,
SGroupCacheData
**
ppGrp
)
{
SGroupCacheOperatorInfo
*
pGCache
=
pOperator
->
info
;
SGcOperatorParam
*
pGcParam
=
pParam
->
value
;
SGroupCacheData
grpData
=
{
0
};
grpData
.
needCache
=
pParam
->
needCache
;
grpData
.
needCache
=
p
Gc
Param
->
needCache
;
while
(
true
)
{
if
(
0
!=
taosHashPut
(
pGCache
->
pBlkHash
,
p
Param
->
pGroupValue
,
p
Param
->
groupValueSize
,
&
grpData
,
sizeof
(
grpData
)))
{
if
(
0
!=
taosHashPut
(
pGCache
->
pBlkHash
,
p
GcParam
->
pGroupValue
,
pGc
Param
->
groupValueSize
,
&
grpData
,
sizeof
(
grpData
)))
{
if
(
terrno
==
TSDB_CODE_DUP_KEY
)
{
*
ppGrp
=
taosHashAcquire
(
pGCache
->
pBlkHash
,
p
Param
->
pGroupValue
,
p
Param
->
groupValueSize
);
*
ppGrp
=
taosHashAcquire
(
pGCache
->
pBlkHash
,
p
GcParam
->
pGroupValue
,
pGc
Param
->
groupValueSize
);
if
(
*
ppGrp
)
{
break
;
}
...
...
@@ -351,11 +397,12 @@ static int32_t initGroupCacheGroupData(struct SOperatorInfo* pOperator, SGcOpera
}
}
*
ppGrp
=
taosHashAcquire
(
pGCache
->
pBlkHash
,
p
Param
->
pGroupValue
,
p
Param
->
groupValueSize
);
*
ppGrp
=
taosHashAcquire
(
pGCache
->
pBlkHash
,
p
GcParam
->
pGroupValue
,
pGc
Param
->
groupValueSize
);
if
(
*
ppGrp
)
{
SGcNewGroupInfo
newGroup
;
newGroup
.
uid
=
*
(
int64_t
*
)
pParam
->
pGroupValue
;
newGroup
.
pParam
=
pOperator
->
pDownstreamParams
[
pParam
->
downstreamIdx
];
newGroup
.
uid
=
*
(
int64_t
*
)
pGcParam
->
pGroupValue
;
newGroup
.
pParam
=
taosArrayGet
(
pParam
->
pChildren
,
0
);
taosWLockLatch
(
&
pGCache
->
pDownstreams
[
pParam
->
downstreamIdx
].
lock
);
if
(
NULL
==
taosArrayPush
(
pGCache
->
pDownstreams
[
pParam
->
downstreamIdx
].
pNewGrpList
,
&
newGroup
))
{
taosWUnLockLatch
(
&
pGCache
->
pDownstreams
[
pParam
->
downstreamIdx
].
lock
);
...
...
@@ -370,11 +417,12 @@ static int32_t initGroupCacheGroupData(struct SOperatorInfo* pOperator, SGcOpera
return
TSDB_CODE_SUCCESS
;
}
static
int32_t
initGroupCacheSession
(
struct
SOperatorInfo
*
pOperator
,
S
Gc
OperatorParam
*
pParam
,
SGcSessionCtx
**
ppSession
)
{
static
int32_t
initGroupCacheSession
(
struct
SOperatorInfo
*
pOperator
,
SOperatorParam
*
pParam
,
SGcSessionCtx
**
ppSession
)
{
SGcSessionCtx
ctx
=
{
0
};
int32_t
code
=
0
;
SGcOperatorParam
*
pGcParam
=
pParam
->
value
;
SGroupCacheOperatorInfo
*
pGCache
=
pOperator
->
info
;
SGroupCacheData
*
pGroup
=
taosHashAcquire
(
pGCache
->
pBlkHash
,
p
Param
->
pGroupValue
,
p
Param
->
groupValueSize
);
SGroupCacheData
*
pGroup
=
taosHashAcquire
(
pGCache
->
pBlkHash
,
p
GcParam
->
pGroupValue
,
pGc
Param
->
groupValueSize
);
if
(
pGroup
)
{
ctx
.
pGroupData
=
pGroup
;
}
else
{
...
...
@@ -383,32 +431,28 @@ static int32_t initGroupCacheSession(struct SOperatorInfo* pOperator, SGcOperato
return
code
;
}
}
taosThreadMutexUnlock
(
&
pGCache
->
sessionMutex
);
ctx
.
pParam
=
pParam
;
ctx
.
pParam
=
p
Gc
Param
;
int32_t
code
=
tSimpleHashPut
(
pGCache
->
pSessionHash
,
&
p
Param
->
sessionId
,
sizeof
(
p
Param
->
sessionId
),
&
ctx
,
sizeof
(
ctx
));
int32_t
code
=
tSimpleHashPut
(
pGCache
->
pSessionHash
,
&
p
GcParam
->
sessionId
,
sizeof
(
pGc
Param
->
sessionId
),
&
ctx
,
sizeof
(
ctx
));
if
(
TSDB_CODE_SUCCESS
!=
code
)
{
return
code
;
}
*
ppSession
=
tSimpleHashGet
(
pGCache
->
pSessionHash
,
&
p
Param
->
sessionId
,
sizeof
(
p
Param
->
sessionId
));
*
ppSession
=
tSimpleHashGet
(
pGCache
->
pSessionHash
,
&
p
GcParam
->
sessionId
,
sizeof
(
pGc
Param
->
sessionId
));
return
TSDB_CODE_SUCCESS
;
}
static
int32_t
getBlkFrom
SessionCache
(
struct
SOperatorInfo
*
pOperator
,
SSDataBlock
**
ppRes
)
{
static
int32_t
getBlkFrom
GroupCache
(
struct
SOperatorInfo
*
pOperator
,
SSDataBlock
**
ppRes
,
SOperatorParam
*
pParam
)
{
SGroupCacheOperatorInfo
*
pGCache
=
pOperator
->
info
;
SGcOperatorParam
*
pGcParam
=
p
Operator
->
pOperator
Param
->
value
;
SGcOperatorParam
*
pGcParam
=
pParam
->
value
;
SGcSessionCtx
*
pSession
=
tSimpleHashGet
(
pGCache
->
pSessionHash
,
&
pGcParam
->
sessionId
,
sizeof
(
pGcParam
->
sessionId
));
if
(
NULL
==
pSession
)
{
int32_t
code
=
initGroupCacheSession
(
pOperator
,
p
Gc
Param
,
&
pSession
);
int32_t
code
=
initGroupCacheSession
(
pOperator
,
pParam
,
&
pSession
);
if
(
TSDB_CODE_SUCCESS
!=
code
)
{
return
code
;
}
}
else
{
taosThreadMutexUnlock
(
&
pGCache
->
sessionMutex
);
}
return
getBlkFromSessionCacheImpl
(
pOperator
,
pGcParam
->
sessionId
,
pSession
,
ppRes
);
...
...
@@ -426,19 +470,6 @@ static FORCE_INLINE void destroyCurrentGroupCacheSession(SGroupCacheOperatorInfo
*
pCurrentId
=
0
;
}
SSDataBlock
*
getBlkFromGroupCache
(
struct
SOperatorInfo
*
pOperator
)
{
SExecTaskInfo
*
pTaskInfo
=
pOperator
->
pTaskInfo
;
SSDataBlock
*
pRes
=
NULL
;
int32_t
code
=
getBlkFromSessionCache
(
pOperator
,
&
pRes
);
if
(
TSDB_CODE_SUCCESS
!=
code
)
{
pTaskInfo
->
code
=
code
;
T_LONG_JMP
(
pTaskInfo
->
env
,
pTaskInfo
->
code
);
}
return
pRes
;
}
static
int32_t
initGroupCacheExecInfo
(
SOperatorInfo
*
pOperator
)
{
SGroupCacheOperatorInfo
*
pInfo
=
pOperator
->
info
;
pInfo
->
execInfo
.
downstreamNum
=
pOperator
->
numOfDownstream
;
...
...
@@ -462,23 +493,26 @@ static int32_t initGroupCacheDownstreamCtx(SOperatorInfo* pOperator) {
if
(
NULL
==
pInfo
->
pDownstreams
[
i
].
pGrpUidList
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
}
pInfo
->
pDownstreams
[
i
].
pNewGrpList
=
taosArrayInit
(
10
,
sizeof
(
SGcNewGroupInfo
));
if
(
NULL
==
pInfo
->
pDownstreams
[
i
].
pNewGrpList
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
}
}
return
TSDB_CODE_SUCCESS
;
}
SSDataBlock
*
groupCacheGetNext
(
struct
SOperatorInfo
*
pOperator
,
SOperatorParam
*
pParam
)
{
SGroupCacheOperatorInfo
*
pGCache
=
pOperator
->
info
;
taosThreadMutexLock
(
&
pGCache
->
sessionMutex
);
SSDataBlock
*
pBlock
=
NULL
;
int32_t
code
=
setOperatorParams
(
pOperator
,
pParam
);
int32_t
code
=
getBlkFromGroupCache
(
pOperator
,
&
pBlock
,
pParam
);
if
(
TSDB_CODE_SUCCESS
!=
code
)
{
pOperator
->
pTaskInfo
->
code
=
code
;
T_LONG_JMP
(
pOperator
->
pTaskInfo
->
env
,
pOperator
->
pTaskInfo
->
code
);
}
return
getBlkFromGroupCache
(
pOperator
)
;
return
pBlock
;
}
...
...
@@ -542,7 +576,7 @@ SOperatorInfo* createGroupCacheOperatorInfo(SOperatorInfo** pDownstream, int32_t
goto
_error
;
}
pOperator
->
fpSet
=
createOperatorFpSet
(
optrDummyOpenFn
,
getBlkFromGroupCache
,
NULL
,
destroyGroupCacheOperator
,
optrDefaultBufFn
,
NULL
,
groupCacheGetNext
,
NULL
);
pOperator
->
fpSet
=
createOperatorFpSet
(
optrDummyOpenFn
,
NULL
,
NULL
,
destroyGroupCacheOperator
,
optrDefaultBufFn
,
NULL
,
groupCacheGetNext
,
NULL
);
return
pOperator
;
...
...
source/libs/executor/src/operator.c
浏览文件 @
6763c6f9
...
...
@@ -605,6 +605,46 @@ int32_t getOperatorExplainExecInfo(SOperatorInfo* operatorInfo, SArray* pExecInf
return
TSDB_CODE_SUCCESS
;
}
int32_t
mergeOperatorParams
(
SOperatorParam
*
pDst
,
SOperatorParam
*
pSrc
)
{
if
(
pDst
->
opType
!=
pSrc
->
opType
)
{
qError
(
"different optype %d:%d for merge operator params"
,
pDst
->
opType
,
pSrc
->
opType
);
return
TSDB_CODE_INVALID_PARA
;
}
switch
(
pDst
->
opType
)
{
case
QUERY_NODE_PHYSICAL_PLAN_EXCHANGE
:
{
SExchangeOperatorParam
*
pDExc
=
pDst
->
value
;
SExchangeOperatorParam
*
pSExc
=
pSrc
->
value
;
if
(
!
pDExc
->
multiParams
)
{
SExchangeOperatorBatchParam
*
pBatch
=
taosMemoryMalloc
(
sizeof
(
SExchangeOperatorBatchParam
));
if
(
NULL
==
pBatch
)
{
return
TSDB_CODE_OUT_OF_MEMORY
;
}
pBatch
->
multiParams
=
true
;
pBatch
->
pBatchs
=
taosArrayInit
(
4
,
sizeof
(
SExchangeOperatorBasicParam
));
if
(
NULL
==
pBatch
->
pBatchs
)
{
taosMemoryFree
(
pBatch
);
return
TSDB_CODE_OUT_OF_MEMORY
;
}
taosArrayPush
(
pBatch
->
pBatchs
,
&
pDExc
->
basic
);
taosArrayPush
(
pBatch
->
pBatchs
,
&
pSExc
->
basic
);
destroyOperatorParamValue
(
pDst
->
value
);
pDst
->
value
=
pBatch
;
}
else
{
SExchangeOperatorBatchParam
*
pBatch
=
pDst
->
value
;
taosArrayPush
(
pBatch
->
pBatchs
,
&
pSExc
->
basic
);
}
break
;
}
default:
qError
(
"invalid optype %d for merge operator params"
,
(
*
ppDst
)
->
opType
);
return
TSDB_CODE_INVALID_PARA
;
}
return
TSDB_CODE_SUCCESS
;
}
int32_t
setOperatorParams
(
struct
SOperatorInfo
*
pOperator
,
SOperatorParam
*
pParam
)
{
if
(
NULL
==
pParam
)
{
pOperator
->
pOperatorParam
=
NULL
;
...
...
@@ -637,7 +677,14 @@ int32_t setOperatorParams(struct SOperatorInfo* pOperator, SOperatorParam* pPara
for
(
int32_t
i
=
0
;
i
<
childrenNum
;
++
i
)
{
SOperatorParam
*
pChild
=
*
(
SOperatorParam
**
)
taosArrayGet
(
pOperator
->
pOperatorParam
->
pChildren
,
i
);
pOperator
->
pDownstreamParams
[
pChild
->
downstreamIdx
]
=
pChild
;
if
(
pOperator
->
pDownstreamParams
[
pChild
->
downstreamIdx
])
{
int32_t
code
=
mergeOperatorParams
(
&
pOperator
->
pDownstreamParams
[
pChild
->
downstreamIdx
],
pChild
);
if
(
code
)
{
return
code
;
}
}
else
{
pOperator
->
pDownstreamParams
[
pChild
->
downstreamIdx
]
=
pChild
;
}
}
taosArrayClear
(
pOperator
->
pOperatorParam
->
pChildren
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录