Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Gpdb
提交
e3b1d571
G
Gpdb
项目概览
Greenplum
/
Gpdb
通知
7
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
Gpdb
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
e3b1d571
编写于
5月 02, 2017
作者:
J
Jemish Patel and Jesse Zhang
提交者:
Dhanashree Kashid
5月 08, 2017
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Extract true-check into PdxlnResultFromScalarConditionAndDxlChild [#144468913]
上级
ce347b4a
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
64 addition
and
31 deletion
+64
-31
libgpopt/include/gpopt/translate/CTranslatorExprToDXL.h
libgpopt/include/gpopt/translate/CTranslatorExprToDXL.h
+11
-0
libgpopt/src/translate/CTranslatorExprToDXL.cpp
libgpopt/src/translate/CTranslatorExprToDXL.cpp
+53
-31
未找到文件。
libgpopt/include/gpopt/translate/CTranslatorExprToDXL.h
浏览文件 @
e3b1d571
...
...
@@ -218,6 +218,17 @@ namespace gpopt
CDXLNode
*
PdxlnResult
(
CExpression
*
pexprFilter
,
DrgPcr
*
pdrgpcr
,
DrgPds
*
pdrgpdsBaseTables
,
ULONG
*
pulNonGatherMotions
,
BOOL
*
pfDML
);
// given a DXL plan tree pdxlnChild which represents the physical plan pexprRelational, construct a DXL
// Result node that filters on top of it using the scalar condition pdxlnScalar
CDXLNode
*
PdxlnResultFromScalarConditionAndDxlChild
(
CExpression
*
pexprRelational
,
CDXLNode
*
pdxlnChild
,
DrgPcr
*
pdrgpcr
,
CDXLNode
*
pdxlnScalar
,
CDXLPhysicalProperties
*
pdxlprop
);
CDXLNode
*
PdxlnResult
(
CExpression
*
pexprFilter
,
...
...
libgpopt/src/translate/CTranslatorExprToDXL.cpp
浏览文件 @
e3b1d571
...
...
@@ -1273,7 +1273,7 @@ CTranslatorExprToDXL::PdxlnResult
(
CExpression
*
pexprRelational
,
DrgPcr
*
pdrgpcr
,
DrgPds
*
pdrgpdsBaseTables
,
DrgPds
*
pdrgpdsBaseTables
,
ULONG
*
pulNonGatherMotions
,
BOOL
*
pfDML
,
CDXLNode
*
pdxlnScalar
,
...
...
@@ -1281,30 +1281,61 @@ CTranslatorExprToDXL::PdxlnResult
)
{
GPOS_ASSERT
(
NULL
!=
pexprRelational
);
GPOS_ASSERT
(
NULL
!=
pdxlprop
);
// translate relational child expression
CDXLNode
*
pdxlnChild
=
Pdxln
(
pexprRelational
,
pdrgpcr
,
pdrgpdsBaseTables
,
pulNonGatherMotions
,
pfDML
,
false
/*fRemap*/
,
false
/*fRoot */
);
// wrap condition in a DXL filter node
CDXLNode
*
pdxlnFilter
=
PdxlnFilter
(
pdxlnScalar
);
return
PdxlnResultFromScalarConditionAndDxlChild
(
pexprRelational
,
pdxlnChild
,
pdrgpcr
,
pdxlnScalar
,
pdxlprop
);
}
GPOS_ASSERT
(
NULL
!=
pexprRelational
->
Prpp
());
CColRefSet
*
pcrsOutput
=
pexprRelational
->
Prpp
()
->
PcrsRequired
();
CDXLNode
*
pdxlnPrL
=
PdxlnProjList
(
pcrsOutput
,
pdrgpcr
);
CDXLNode
*
CTranslatorExprToDXL
::
PdxlnResultFromScalarConditionAndDxlChild
(
CExpression
*
pexprRelational
,
CDXLNode
*
pdxlnChild
,
DrgPcr
*
pdrgpcr
,
CDXLNode
*
pdxlnScalar
,
CDXLPhysicalProperties
*
pdxlprop
)
{
GPOS_ASSERT
(
NULL
!=
pdxlprop
);
// for a true condition, just translate the child
if
(
CTranslatorExprToDXLUtils
::
FScalarConstTrue
(
m_pmda
,
pdxlnScalar
))
{
pdxlnScalar
->
Release
();
pdxlprop
->
Release
();
return
pdxlnChild
;
}
// create a result node over outer child
else
{
// wrap condition in a DXL filter node
CDXLNode
*
pdxlnFilter
=
PdxlnFilter
(
pdxlnScalar
);
// create an empty one-time filter
CDXLNode
*
pdxlnOneTimeFilter
=
GPOS_NEW
(
m_pmp
)
CDXLNode
(
m_pmp
,
GPOS_NEW
(
m_pmp
)
CDXLScalarOneTimeFilter
(
m_pmp
));
GPOS_ASSERT
(
NULL
!=
pexprRelational
->
Prpp
());
CColRefSet
*
pcrsOutput
=
pexprRelational
->
Prpp
()
->
PcrsRequired
();
CDXLNode
*
pdxlnPrL
=
PdxlnProjList
(
pcrsOutput
,
pdrgpcr
);
return
CTranslatorExprToDXLUtils
::
PdxlnResult
(
m_pmp
,
pdxlprop
,
pdxlnPrL
,
pdxlnFilter
,
pdxlnOneTimeFilter
,
pdxlnChild
);
// create an empty one-time filter
CDXLNode
*
pdxlnOneTimeFilter
=
GPOS_NEW
(
m_pmp
)
CDXLNode
(
m_pmp
,
GPOS_NEW
(
m_pmp
)
CDXLScalarOneTimeFilter
(
m_pmp
));
return
CTranslatorExprToDXLUtils
::
PdxlnResult
(
m_pmp
,
pdxlprop
,
pdxlnPrL
,
pdxlnFilter
,
pdxlnOneTimeFilter
,
pdxlnChild
);
}
}
...
...
@@ -1493,7 +1524,7 @@ CTranslatorExprToDXL::PdxlnResult
(
pexprRelational
,
pexprScalar
,
Pdxlprop
(
pexprFilter
),
Pdxlprop
(
pexprFilter
),
pdrgpcr
,
pdrgpdsBaseTables
);
...
...
@@ -3237,18 +3268,9 @@ CTranslatorExprToDXL::PdxlnCorrelatedNLJoin
default:
{
// for a true condition, just translate the child
if
(
CTranslatorExprToDXLUtils
::
FScalarConstTrue
(
m_pmda
,
pdxlnCond
))
{
pdxlnCond
->
Release
();
pdxln
=
Pdxln
(
pexprOuterChild
,
pdrgpcr
,
pdrgpdsBaseTables
,
pulNonGatherMotions
,
pfDML
,
false
/*fRemap*/
,
false
/*fRoot*/
);
}
else
{
// create a result node over outer child
pdxlprop
->
AddRef
();
pdxln
=
PdxlnResult
(
pexprOuterChild
,
pdrgpcr
,
pdrgpdsBaseTables
,
pulNonGatherMotions
,
pfDML
,
pdxlnCond
,
pdxlprop
);
}
// create a result node over outer child
pdxlprop
->
AddRef
();
pdxln
=
PdxlnResult
(
pexprOuterChild
,
pdrgpcr
,
pdrgpdsBaseTables
,
pulNonGatherMotions
,
pfDML
,
pdxlnCond
,
pdxlprop
);
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录