Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Gpdb
提交
f22d8e66
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,发现更多精彩内容 >>
提交
f22d8e66
编写于
1月 14, 1998
作者:
B
Bruce Momjian
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Function cleanupo for List* when it should be Node *.
上级
cb3ce64f
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
26 addition
and
25 deletion
+26
-25
src/backend/optimizer/plan/setrefs.c
src/backend/optimizer/plan/setrefs.c
+26
-25
未找到文件。
src/backend/optimizer/plan/setrefs.c
浏览文件 @
f22d8e66
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/optimizer/plan/setrefs.c,v 1.1
3 1998/01/14 15:48:21
momjian Exp $
* $Header: /cvsroot/pgsql/src/backend/optimizer/plan/setrefs.c,v 1.1
4 1998/01/14 19:55:53
momjian Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -42,7 +42,7 @@ static List *replace_subclause_joinvar_refs(List *clauses,
List
*
outer_tlist
,
List
*
inner_tlist
);
static
Var
*
replace_joinvar_refs
(
Var
*
var
,
List
*
outer_tlist
,
List
*
inner_tlist
);
static
List
*
tlist_temp_references
(
Oid
tempid
,
List
*
tlist
);
static
void
replace_result_clause
(
List
*
clause
,
List
*
subplanTargetList
);
static
void
replace_result_clause
(
Node
*
clause
,
List
*
subplanTargetList
);
static
bool
OperandIsInner
(
Node
*
opnd
,
int
inner_relid
);
static
void
replace_agg_clause
(
Node
*
expr
,
List
*
targetlist
);
static
Node
*
del_agg_clause
(
Node
*
clause
);
...
...
@@ -554,7 +554,7 @@ set_result_tlist_references(Result *resultNode)
{
entry
=
(
TargetEntry
*
)
lfirst
(
t
);
expr
=
(
Expr
*
)
get_expr
(
entry
);
replace_result_clause
((
List
*
)
expr
,
subplanTargetList
);
replace_result_clause
((
Node
*
)
expr
,
subplanTargetList
);
}
}
...
...
@@ -568,16 +568,15 @@ set_result_tlist_references(Result *resultNode)
*
*/
static
void
replace_result_clause
(
List
*
clause
,
replace_result_clause
(
Node
*
clause
,
List
*
subplanTargetList
)
/* target list of the
* subplan */
{
List
*
t
;
List
*
subClause
;
TargetEntry
*
subplanVar
;
if
(
IsA
(
clause
,
Var
))
{
TargetEntry
*
subplanVar
;
/*
* Ha! A Var node!
...
...
@@ -591,15 +590,20 @@ replace_result_clause(List *clause,
((
Var
*
)
clause
)
->
varno
=
(
Index
)
OUTER
;
((
Var
*
)
clause
)
->
varattno
=
subplanVar
->
resdom
->
resno
;
}
else
if
(
is_funcclause
((
Node
*
)
clause
))
else
if
(
IsA
(
clause
,
Aggreg
))
{
replace_result_clause
(((
Aggreg
*
)
clause
)
->
target
,
subplanTargetList
);
}
else
if
(
is_funcclause
(
clause
))
{
List
*
subExpr
;
/*
* This is a function. Recursively call this routine for its
* arguments...
*/
sub
Clause
=
((
Expr
*
)
clause
)
->
args
;
foreach
(
t
,
sub
Clause
)
sub
Expr
=
((
Expr
*
)
clause
)
->
args
;
foreach
(
t
,
sub
Expr
)
{
replace_result_clause
(
lfirst
(
t
),
subplanTargetList
);
}
...
...
@@ -607,39 +611,38 @@ replace_result_clause(List *clause,
else
if
(
IsA
(
clause
,
ArrayRef
))
{
ArrayRef
*
aref
=
(
ArrayRef
*
)
clause
;
/*
* This is an arrayref. Recursively call this routine for its
* expression and its index expression...
*/
subClause
=
aref
->
refupperindexpr
;
foreach
(
t
,
subClause
)
foreach
(
t
,
aref
->
refupperindexpr
)
{
replace_result_clause
(
lfirst
(
t
),
subplanTargetList
);
}
subClause
=
aref
->
reflowerindexpr
;
foreach
(
t
,
subClause
)
foreach
(
t
,
aref
->
reflowerindexpr
)
{
replace_result_clause
(
lfirst
(
t
),
subplanTargetList
);
}
replace_result_clause
(
(
List
*
)
aref
->
refexpr
,
replace_result_clause
(
aref
->
refexpr
,
subplanTargetList
);
replace_result_clause
(
(
List
*
)
aref
->
refassgnexpr
,
replace_result_clause
(
aref
->
refassgnexpr
,
subplanTargetList
);
}
else
if
(
is_opclause
(
(
Node
*
)
clause
))
else
if
(
is_opclause
(
clause
))
{
Node
*
subNode
;
/*
* This is an operator. Recursively call this routine for both its
* left and right operands
*/
sub
Clause
=
(
List
*
)
get_leftop
((
Expr
*
)
clause
);
replace_result_clause
(
sub
Claus
e
,
subplanTargetList
);
sub
Clause
=
(
List
*
)
get_rightop
((
Expr
*
)
clause
);
replace_result_clause
(
sub
Claus
e
,
subplanTargetList
);
sub
Node
=
(
Node
*
)
get_leftop
((
Expr
*
)
clause
);
replace_result_clause
(
sub
Nod
e
,
subplanTargetList
);
sub
Node
=
(
Node
*
)
get_rightop
((
Expr
*
)
clause
);
replace_result_clause
(
sub
Nod
e
,
subplanTargetList
);
}
else
if
(
IsA
(
clause
,
Param
)
||
IsA
(
clause
,
Const
))
else
if
(
IsA
(
clause
,
Param
)
||
IsA
(
clause
,
Const
))
{
/* do nothing! */
}
...
...
@@ -731,10 +734,9 @@ static void
replace_agg_clause
(
Node
*
clause
,
List
*
subplanTargetList
)
{
List
*
t
;
TargetEntry
*
subplanVar
;
if
(
IsA
(
clause
,
Var
))
{
TargetEntry
*
subplanVar
;
/*
* Ha! A Var node!
...
...
@@ -784,7 +786,6 @@ replace_agg_clause(Node *clause, List *subplanTargetList)
}
else
if
(
is_opclause
(
clause
))
{
/*
* This is an operator. Recursively call this routine for both its
* left and right operands
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录