Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Gpdb
提交
d404f100
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,发现更多精彩内容 >>
提交
d404f100
编写于
12月 22, 1997
作者:
B
Bruce Momjian
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix for select 1=1 or 2=2, select 1=1 and 2=2, and select sum(2+2).
上级
78a055a6
变更
10
隐藏空白更改
内联
并排
Showing
10 changed file
with
69 addition
and
56 deletion
+69
-56
src/backend/commands/defind.c
src/backend/commands/defind.c
+2
-4
src/backend/executor/nodeAgg.c
src/backend/executor/nodeAgg.c
+13
-0
src/backend/optimizer/path/xfunc.c
src/backend/optimizer/path/xfunc.c
+4
-4
src/backend/optimizer/plan/planmain.c
src/backend/optimizer/plan/planmain.c
+26
-11
src/backend/optimizer/plan/planner.c
src/backend/optimizer/plan/planner.c
+4
-26
src/backend/optimizer/plan/setrefs.c
src/backend/optimizer/plan/setrefs.c
+10
-1
src/backend/optimizer/util/clauses.c
src/backend/optimizer/util/clauses.c
+3
-3
src/backend/optimizer/util/var.c
src/backend/optimizer/util/var.c
+3
-3
src/backend/parser/parse_agg.c
src/backend/parser/parse_agg.c
+2
-2
src/backend/parser/parser.c
src/backend/parser/parser.c
+2
-2
未找到文件。
src/backend/commands/defind.c
浏览文件 @
d404f100
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/commands/Attic/defind.c,v 1.1
7 1997/09/18 20:20:20
momjian Exp $
* $Header: /cvsroot/pgsql/src/backend/commands/Attic/defind.c,v 1.1
8 1997/12/22 05:41:49
momjian Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -385,9 +385,7 @@ CheckPredExpr(Node *predicate, List *rangeTable, Oid baseRelOid)
CheckPredClause
((
Expr
*
)
predicate
,
rangeTable
,
baseRelOid
);
return
;
}
else
if
(
or_clause
(
predicate
))
clauses
=
((
Expr
*
)
predicate
)
->
args
;
else
if
(
and_clause
(
predicate
))
else
if
(
or_clause
(
predicate
)
||
and_clause
(
predicate
))
clauses
=
((
Expr
*
)
predicate
)
->
args
;
else
elog
(
WARN
,
"Unsupported partial-index predicate expression type"
);
...
...
src/backend/executor/nodeAgg.c
浏览文件 @
d404f100
...
...
@@ -534,6 +534,19 @@ ExecInitAgg(Agg *node, EState *estate, Plan *parent)
outerPlan
=
outerPlan
(
node
);
ExecInitNode
(
outerPlan
,
estate
,
(
Plan
*
)
node
);
/*
* Result runs in its own context, but make it use our aggregates
* fix for 'select sum(2+2)'
*/
if
(
nodeTag
(
outerPlan
)
==
T_Result
)
{
((
Result
*
)
outerPlan
)
->
resstate
->
cstate
.
cs_ProjInfo
->
pi_exprContext
->
ecxt_values
=
econtext
->
ecxt_values
;
((
Result
*
)
outerPlan
)
->
resstate
->
cstate
.
cs_ProjInfo
->
pi_exprContext
->
ecxt_nulls
=
econtext
->
ecxt_nulls
;
}
/* ----------------
* initialize tuple type.
* ----------------
...
...
src/backend/optimizer/path/xfunc.c
浏览文件 @
d404f100
...
...
@@ -9,7 +9,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/optimizer/path/Attic/xfunc.c,v 1.
8 1997/12/11 17:36:2
9 momjian Exp $
* $Header: /cvsroot/pgsql/src/backend/optimizer/path/Attic/xfunc.c,v 1.
9 1997/12/22 05:41:5
9 momjian Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -451,7 +451,7 @@ xfunc_local_expense(LispValue clause)
(
LispValue
)
get_funcargs
(
clause
)));
else
if
(
fast_not_clause
(
clause
))
return
(
xfunc_local_expense
(
lsecond
(
clause
)));
else
if
(
fast_or_clause
(
clause
))
else
if
(
fast_or_clause
(
clause
)
||
fast_and_clause
(
clause
)
)
{
/* find cost of evaluating each disjunct */
for
(
tmpclause
=
lnext
(
clause
);
tmpclause
!=
LispNil
;
...
...
@@ -845,7 +845,7 @@ xfunc_find_references(LispValue clause)
}
else
if
(
fast_not_clause
(
clause
))
return
(
xfunc_find_references
(
lsecond
(
clause
)));
else
if
(
fast_or_clause
(
clause
))
else
if
(
fast_or_clause
(
clause
)
||
fast_and_clause
(
clause
)
)
{
/* string together result of all operands of OR */
for
(
tmpclause
=
lnext
(
clause
);
tmpclause
!=
LispNil
;
...
...
@@ -1186,7 +1186,7 @@ xfunc_fixvars(LispValue clause, /* clause being pulled up */
xfunc_fixvars
(
lfirst
(
tmpclause
),
rel
,
varno
);
else
if
(
fast_not_clause
(
clause
))
xfunc_fixvars
(
lsecond
(
clause
),
rel
,
varno
);
else
if
(
fast_or_clause
(
clause
))
else
if
(
fast_or_clause
(
clause
)
||
fast_and_clause
(
clause
)
)
for
(
tmpclause
=
lnext
(
clause
);
tmpclause
!=
LispNil
;
tmpclause
=
lnext
(
tmpclause
))
xfunc_fixvars
(
lfirst
(
tmpclause
),
rel
,
varno
);
...
...
src/backend/optimizer/plan/planmain.c
浏览文件 @
d404f100
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planmain.c,v 1.1
2 1997/12/20 07:59:25
momjian Exp $
* $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planmain.c,v 1.1
3 1997/12/22 05:42:04
momjian Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -69,7 +69,7 @@ query_planner(Query *root,
List
*
qual
)
{
List
*
constant_qual
=
NIL
;
List
*
flattened
_tlist
=
NIL
;
List
*
var_only
_tlist
=
NIL
;
List
*
level_tlist
=
NIL
;
Plan
*
subplan
=
(
Plan
*
)
NULL
;
...
...
@@ -109,16 +109,12 @@ query_planner(Query *root,
* Create a target list that consists solely of (resdom var) target
* list entries, i.e., contains no arbitrary expressions.
*/
flattened_tlist
=
flatten_tlist
(
tlist
);
if
(
flattened_tlist
)
{
level_tlist
=
flattened_tlist
;
}
var_only_tlist
=
flatten_tlist
(
tlist
);
if
(
var_only_tlist
)
level_tlist
=
var_only_tlist
;
else
{
/* from old code. the logic is beyond me. - ay 2/95 */
level_tlist
=
tlist
;
}
/*
* A query may have a non-variable target list and a non-variable
...
...
@@ -126,7 +122,7 @@ query_planner(Query *root,
* all-new tuples, or - the query is a replace (a scan must still be
* done in this case).
*/
if
(
flattened
_tlist
==
NULL
&&
qual
==
NULL
)
if
(
var_only
_tlist
==
NULL
&&
qual
==
NULL
)
{
switch
(
command_type
)
...
...
@@ -192,11 +188,30 @@ query_planner(Query *root,
return
(
plan
);
}
/*
* fix up the flattened target list of the plan root node so that
* expressions are evaluated. this forces expression evaluations that
* may involve expensive function calls to be delayed to the very last
* stage of query execution. this could be bad. but it is joey's
* responsibility to optimally push these expressions down the plan
* tree. -- Wei
*
* But now nothing to do if there are GroupBy and/or Aggregates: 1.
* make_groupPlan fixes tlist; 2. flatten_tlist_vars does nothing with
* aggregates fixing only other entries (i.e. - GroupBy-ed and so
* fixed by make_groupPlan). - vadim 04/05/97
*/
if
(
root
->
groupClause
==
NULL
&&
root
->
qry_aggs
==
NULL
)
{
subplan
->
targetlist
=
flatten_tlist_vars
(
tlist
,
subplan
->
targetlist
);
}
#ifdef NOT_USED
/*
* Destructively modify the query plan's targetlist to add fjoin lists
* to flatten functions that return sets of base types
*/
#ifdef NOT_USED
subplan
->
targetlist
=
generate_fjoin
(
subplan
->
targetlist
);
#endif
...
...
src/backend/optimizer/plan/planner.c
浏览文件 @
d404f100
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planner.c,v 1.1
4 1997/12/20 07:59:27
momjian Exp $
* $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planner.c,v 1.1
5 1997/12/22 05:42:08
momjian Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -74,7 +74,6 @@ planner(Query *parse)
List
*
rangetable
=
parse
->
rtable
;
char
*
uniqueflag
=
parse
->
uniqueFlag
;
List
*
sortclause
=
parse
->
sortClause
;
Agg
*
aggplan
=
NULL
;
Plan
*
result_plan
=
(
Plan
*
)
NULL
;
...
...
@@ -141,7 +140,7 @@ planner(Query *parse)
*/
if
(
parse
->
qry_aggs
)
{
aggplan
=
make_agg
(
tlist
,
result_plan
=
(
Plan
*
)
make_agg
(
tlist
,
parse
->
qry_numAgg
,
parse
->
qry_aggs
,
result_plan
);
...
...
@@ -153,29 +152,8 @@ planner(Query *parse)
* pointers, after a few dozen's of copying, they're not the same
* as those in the target list.)
*/
set_agg_tlist_references
(
aggplan
);
set_agg_agglist_references
(
aggplan
);
result_plan
=
(
Plan
*
)
aggplan
;
}
/*
* fix up the flattened target list of the plan root node so that
* expressions are evaluated. this forces expression evaluations that
* may involve expensive function calls to be delayed to the very last
* stage of query execution. this could be bad. but it is joey's
* responsibility to optimally push these expressions down the plan
* tree. -- Wei
*
* But now nothing to do if there are GroupBy and/or Aggregates: 1.
* make_groupPlan fixes tlist; 2. flatten_tlist_vars does nothing with
* aggregates fixing only other entries (i.e. - GroupBy-ed and so
* fixed by make_groupPlan). - vadim 04/05/97
*/
if
(
parse
->
groupClause
==
NULL
&&
aggplan
==
NULL
)
{
result_plan
->
targetlist
=
flatten_tlist_vars
(
tlist
,
result_plan
->
targetlist
);
set_agg_tlist_references
((
Agg
*
)
result_plan
);
set_agg_agglist_references
((
Agg
*
)
result_plan
);
}
/*
...
...
src/backend/optimizer/plan/setrefs.c
浏览文件 @
d404f100
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/optimizer/plan/setrefs.c,v 1.
9 1997/12/20 07:59:28
momjian Exp $
* $Header: /cvsroot/pgsql/src/backend/optimizer/plan/setrefs.c,v 1.
10 1997/12/22 05:42:10
momjian Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -329,6 +329,15 @@ replace_clause_joinvar_refs(Expr *clause,
{
return
((
List
*
)
clause
);
}
else
if
(
and_clause
((
Node
*
)
clause
))
{
List
*
andclause
=
replace_subclause_joinvar_refs
(((
Expr
*
)
clause
)
->
args
,
outer_tlist
,
inner_tlist
);
return
((
List
*
)
make_andclause
(
andclause
));
}
else
if
(
or_clause
((
Node
*
)
clause
))
{
List
*
orclause
=
...
...
src/backend/optimizer/util/clauses.c
浏览文件 @
d404f100
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/optimizer/util/clauses.c,v 1.1
2 1997/09/25 12:48:15 vadim
Exp $
* $Header: /cvsroot/pgsql/src/backend/optimizer/util/clauses.c,v 1.1
3 1997/12/22 05:42:14 momjian
Exp $
*
* HISTORY
* AUTHOR DATE MAJOR EVENT
...
...
@@ -431,7 +431,7 @@ contains_not(Node *clause)
if
(
not_clause
(
clause
))
return
(
true
);
if
(
or_clause
(
clause
))
if
(
or_clause
(
clause
)
||
and_clause
(
clause
)
)
{
List
*
a
;
...
...
@@ -518,7 +518,7 @@ fix_opid(Node *clause)
{
;
}
else
if
(
or_clause
(
clause
))
else
if
(
or_clause
(
clause
)
||
and_clause
(
clause
)
)
{
fix_opids
(((
Expr
*
)
clause
)
->
args
);
}
...
...
src/backend/optimizer/util/var.c
浏览文件 @
d404f100
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/optimizer/util/var.c,v 1.
6 1997/09/08 21:45:5
6 momjian Exp $
* $Header: /cvsroot/pgsql/src/backend/optimizer/util/var.c,v 1.
7 1997/12/22 05:42:1
6 momjian Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -85,7 +85,7 @@ contain_var_clause(Node *clause)
return
contain_var_clause
(((
Iter
*
)
clause
)
->
iterexpr
);
else
if
(
single_node
(
clause
))
return
FALSE
;
else
if
(
or_clause
(
clause
))
else
if
(
or_clause
(
clause
)
||
and_clause
(
clause
)
)
{
List
*
temp
;
...
...
@@ -156,7 +156,7 @@ pull_var_clause(Node *clause)
retval
=
pull_var_clause
(((
Iter
*
)
clause
)
->
iterexpr
);
else
if
(
single_node
(
clause
))
retval
=
NIL
;
else
if
(
or_clause
(
clause
))
else
if
(
or_clause
(
clause
)
||
and_clause
(
clause
)
)
{
List
*
temp
;
...
...
src/backend/parser/parse_agg.c
浏览文件 @
d404f100
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/parser/parse_agg.c,v 1.
3 1997/11/26 03:42:37
momjian Exp $
* $Header: /cvsroot/pgsql/src/backend/parser/parse_agg.c,v 1.
4 1997/12/22 05:42:19
momjian Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -108,7 +108,7 @@ contain_agg_clause(Node *clause)
return
contain_agg_clause
(((
Iter
*
)
clause
)
->
iterexpr
);
else
if
(
single_node
(
clause
))
return
FALSE
;
else
if
(
or_clause
(
clause
))
else
if
(
or_clause
(
clause
)
||
and_clause
(
clause
)
)
{
List
*
temp
;
...
...
src/backend/parser/parser.c
浏览文件 @
d404f100
...
...
@@ -6,7 +6,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/parser/parser.c,v 1.3
0 1997/11/26 01:11:36
momjian Exp $
* $Header: /cvsroot/pgsql/src/backend/parser/parser.c,v 1.3
1 1997/12/22 05:42:25
momjian Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -141,7 +141,7 @@ define_sets(Node *clause)
{
return
;
}
else
if
(
or_clause
(
clause
))
else
if
(
or_clause
(
clause
)
||
and_clause
(
clause
)
)
{
List
*
temp
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录