Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
1526eb29
T
TDengine
项目概览
taosdata
/
TDengine
大约 2 年 前同步成功
通知
1193
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看板
提交
1526eb29
编写于
5月 08, 2023
作者:
D
dapan1121
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix: projection group merge issue
上级
1f25cc57
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
24 addition
and
17 deletion
+24
-17
source/libs/planner/src/planLogicCreater.c
source/libs/planner/src/planLogicCreater.c
+1
-1
source/libs/planner/src/planOptimizer.c
source/libs/planner/src/planOptimizer.c
+2
-16
source/libs/planner/src/planSpliter.c
source/libs/planner/src/planSpliter.c
+21
-0
未找到文件。
source/libs/planner/src/planLogicCreater.c
浏览文件 @
1526eb29
...
@@ -1070,7 +1070,7 @@ static int32_t createProjectLogicNode(SLogicPlanContext* pCxt, SSelectStmt* pSel
...
@@ -1070,7 +1070,7 @@ static int32_t createProjectLogicNode(SLogicPlanContext* pCxt, SSelectStmt* pSel
TSWAP
(
pProject
->
node
.
pLimit
,
pSelect
->
pLimit
);
TSWAP
(
pProject
->
node
.
pLimit
,
pSelect
->
pLimit
);
TSWAP
(
pProject
->
node
.
pSlimit
,
pSelect
->
pSlimit
);
TSWAP
(
pProject
->
node
.
pSlimit
,
pSelect
->
pSlimit
);
pProject
->
ignoreGroupId
=
(
pSelect
->
isSubquery
&&
NULL
==
pProject
->
node
.
pLimit
&&
NULL
==
pProject
->
node
.
pSlimit
)
?
true
:
(
NULL
==
pSelect
->
pPartitionByList
);
pProject
->
ignoreGroupId
=
pSelect
->
isSubquery
?
true
:
(
NULL
==
pSelect
->
pPartitionByList
);
pProject
->
node
.
groupAction
=
pProject
->
node
.
groupAction
=
(
!
pSelect
->
isSubquery
&&
pCxt
->
pPlanCxt
->
streamQuery
)
?
GROUP_ACTION_KEEP
:
GROUP_ACTION_CLEAR
;
(
!
pSelect
->
isSubquery
&&
pCxt
->
pPlanCxt
->
streamQuery
)
?
GROUP_ACTION_KEEP
:
GROUP_ACTION_CLEAR
;
pProject
->
node
.
requireDataOrder
=
DATA_ORDER_LEVEL_NONE
;
pProject
->
node
.
requireDataOrder
=
DATA_ORDER_LEVEL_NONE
;
...
...
source/libs/planner/src/planOptimizer.c
浏览文件 @
1526eb29
...
@@ -2351,17 +2351,6 @@ static EDealRes mergeProjectionsExpr(SNode** pNode, void* pContext) {
...
@@ -2351,17 +2351,6 @@ static EDealRes mergeProjectionsExpr(SNode** pNode, void* pContext) {
return
DEAL_RES_CONTINUE
;
return
DEAL_RES_CONTINUE
;
}
}
static
int32_t
mergeProjectionsLogicNode
(
SLogicNode
*
pDstNode
,
SLogicNode
*
pSrcNode
)
{
SProjectLogicNode
*
pDstPro
=
(
SProjectLogicNode
*
)
pDstNode
;
SProjectLogicNode
*
pSrcPro
=
(
SProjectLogicNode
*
)
pSrcNode
;
if
(
!
pSrcPro
->
ignoreGroupId
)
{
pDstPro
->
ignoreGroupId
=
pSrcPro
->
ignoreGroupId
;
}
return
TSDB_CODE_SUCCESS
;
}
static
int32_t
mergeProjectsOptimizeImpl
(
SOptimizeContext
*
pCxt
,
SLogicSubplan
*
pLogicSubplan
,
SLogicNode
*
pSelfNode
)
{
static
int32_t
mergeProjectsOptimizeImpl
(
SOptimizeContext
*
pCxt
,
SLogicSubplan
*
pLogicSubplan
,
SLogicNode
*
pSelfNode
)
{
SLogicNode
*
pChild
=
(
SLogicNode
*
)
nodesListGetNode
(
pSelfNode
->
pChildren
,
0
);
SLogicNode
*
pChild
=
(
SLogicNode
*
)
nodesListGetNode
(
pSelfNode
->
pChildren
,
0
);
...
@@ -2371,11 +2360,8 @@ static int32_t mergeProjectsOptimizeImpl(SOptimizeContext* pCxt, SLogicSubplan*
...
@@ -2371,11 +2360,8 @@ static int32_t mergeProjectsOptimizeImpl(SOptimizeContext* pCxt, SLogicSubplan*
if
(
TSDB_CODE_SUCCESS
==
code
)
{
if
(
TSDB_CODE_SUCCESS
==
code
)
{
if
(
1
==
LIST_LENGTH
(
pChild
->
pChildren
))
{
if
(
1
==
LIST_LENGTH
(
pChild
->
pChildren
))
{
code
=
mergeProjectionsLogicNode
(
pSelfNode
,
pChild
);
SLogicNode
*
pGrandChild
=
(
SLogicNode
*
)
nodesListGetNode
(
pChild
->
pChildren
,
0
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
replaceLogicNode
(
pLogicSubplan
,
pChild
,
pGrandChild
);
SLogicNode
*
pGrandChild
=
(
SLogicNode
*
)
nodesListGetNode
(
pChild
->
pChildren
,
0
);
code
=
replaceLogicNode
(
pLogicSubplan
,
pChild
,
pGrandChild
);
}
}
else
{
// no grand child
}
else
{
// no grand child
NODES_CLEAR_LIST
(
pSelfNode
->
pChildren
);
NODES_CLEAR_LIST
(
pSelfNode
->
pChildren
);
}
}
...
...
source/libs/planner/src/planSpliter.c
浏览文件 @
1526eb29
...
@@ -532,6 +532,24 @@ static int32_t stbSplGetNumOfVgroups(SLogicNode* pNode) {
...
@@ -532,6 +532,24 @@ static int32_t stbSplGetNumOfVgroups(SLogicNode* pNode) {
return
0
;
return
0
;
}
}
static
int32_t
stbSplRewriteFromMergeNode
(
SMergeLogicNode
*
pMerge
,
SLogicNode
*
pNode
)
{
int32_t
code
=
TSDB_CODE_SUCCESS
;
switch
(
nodeType
(
pNode
))
{
case
QUERY_NODE_LOGIC_PLAN_PROJECT
:
{
SProjectLogicNode
*
pLogicNode
=
(
SProjectLogicNode
*
)
pNode
;
if
(
pMerge
->
node
.
pLimit
||
pMerge
->
node
.
pSlimit
)
{
pLogicNode
->
ignoreGroupId
=
false
;
}
break
;
}
default:
break
;
}
return
code
;
}
static
int32_t
stbSplCreateMergeNode
(
SSplitContext
*
pCxt
,
SLogicSubplan
*
pSubplan
,
SLogicNode
*
pSplitNode
,
static
int32_t
stbSplCreateMergeNode
(
SSplitContext
*
pCxt
,
SLogicSubplan
*
pSubplan
,
SLogicNode
*
pSplitNode
,
SNodeList
*
pMergeKeys
,
SLogicNode
*
pPartChild
,
bool
groupSort
)
{
SNodeList
*
pMergeKeys
,
SLogicNode
*
pPartChild
,
bool
groupSort
)
{
SMergeLogicNode
*
pMerge
=
(
SMergeLogicNode
*
)
nodesMakeNode
(
QUERY_NODE_LOGIC_PLAN_MERGE
);
SMergeLogicNode
*
pMerge
=
(
SMergeLogicNode
*
)
nodesMakeNode
(
QUERY_NODE_LOGIC_PLAN_MERGE
);
...
@@ -563,6 +581,9 @@ static int32_t stbSplCreateMergeNode(SSplitContext* pCxt, SLogicSubplan* pSubpla
...
@@ -563,6 +581,9 @@ static int32_t stbSplCreateMergeNode(SSplitContext* pCxt, SLogicSubplan* pSubpla
((
SLimitNode
*
)
pSplitNode
->
pLimit
)
->
limit
+=
((
SLimitNode
*
)
pSplitNode
->
pLimit
)
->
offset
;
((
SLimitNode
*
)
pSplitNode
->
pLimit
)
->
limit
+=
((
SLimitNode
*
)
pSplitNode
->
pLimit
)
->
offset
;
((
SLimitNode
*
)
pSplitNode
->
pLimit
)
->
offset
=
0
;
((
SLimitNode
*
)
pSplitNode
->
pLimit
)
->
offset
=
0
;
}
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
stbSplRewriteFromMergeNode
(
pMerge
,
pSplitNode
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
if
(
TSDB_CODE_SUCCESS
==
code
)
{
if
(
NULL
==
pSubplan
)
{
if
(
NULL
==
pSubplan
)
{
code
=
nodesListMakeAppend
(
&
pSplitNode
->
pChildren
,
(
SNode
*
)
pMerge
);
code
=
nodesListMakeAppend
(
&
pSplitNode
->
pChildren
,
(
SNode
*
)
pMerge
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录