Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Gpdb
提交
e51c674c
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,发现更多精彩内容 >>
提交
e51c674c
编写于
2月 13, 1998
作者:
V
Vadim B. Mikheev
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Support for subselects.
上级
91840733
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
42 addition
and
22 deletion
+42
-22
src/backend/optimizer/util/clauses.c
src/backend/optimizer/util/clauses.c
+20
-12
src/backend/optimizer/util/tlist.c
src/backend/optimizer/util/tlist.c
+4
-3
src/backend/optimizer/util/var.c
src/backend/optimizer/util/var.c
+18
-7
未找到文件。
src/backend/optimizer/util/clauses.c
浏览文件 @
e51c674c
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/optimizer/util/clauses.c,v 1.1
4 1998/01/20 22:11:39 momjian
Exp $
* $Header: /cvsroot/pgsql/src/backend/optimizer/util/clauses.c,v 1.1
5 1998/02/13 03:40:19 vadim
Exp $
*
* HISTORY
* AUTHOR DATE MAJOR EVENT
...
...
@@ -22,6 +22,7 @@
#include "nodes/primnodes.h"
#include "nodes/relation.h"
#include "nodes/parsenodes.h"
#include "nodes/plannodes.h"
#include "nodes/makefuncs.h"
#include "nodes/nodeFuncs.h"
...
...
@@ -57,6 +58,7 @@ make_clause(int type, Node *oper, List *args)
}
else
{
elog
(
ERROR
,
"make_clause: unsupported type %d"
,
type
);
/* will this ever happen? translated from lispy C code - ay 10/94 */
return
((
Expr
*
)
args
);
}
...
...
@@ -375,10 +377,10 @@ clause_relids_vars(Node *clause, List **relids, List **vars)
foreach
(
vi
,
var_list
)
{
Var
*
in_list
=
(
Var
*
)
lfirst
(
vi
);
Assert
(
var
->
varlevelsup
==
0
);
if
(
in_list
->
varno
==
var
->
varno
&&
in_list
->
varattno
==
var
->
varattno
&&
in_list
->
varlevelsup
==
var
->
varlevelsup
)
in_list
->
varattno
==
var
->
varattno
)
break
;
}
if
(
vi
==
NIL
)
...
...
@@ -492,6 +494,7 @@ qual_clause_p(Node *clause)
if
(
!
is_opclause
(
clause
))
return
false
;
/* How about Param-s ? - vadim 02/03/98 */
if
(
IsA
(
get_leftop
((
Expr
*
)
clause
),
Var
)
&&
IsA
(
get_rightop
((
Expr
*
)
clause
),
Const
))
{
...
...
@@ -550,6 +553,17 @@ fix_opid(Node *clause)
{
fix_opid
(((
Aggreg
*
)
clause
)
->
target
);
}
else
if
(
is_subplan
(
clause
)
&&
((
SubPlan
*
)
((
Expr
*
)
clause
)
->
oper
)
->
sublink
->
subLinkType
!=
EXISTS_SUBLINK
)
{
List
*
lst
;
foreach
(
lst
,
((
SubPlan
*
)
((
Expr
*
)
clause
)
->
oper
)
->
sublink
->
oper
)
{
replace_opid
((
Oper
*
)
((
Expr
*
)
lfirst
(
lst
))
->
oper
);
fix_opid
((
Node
*
)
get_leftop
((
Expr
*
)
lfirst
(
lst
)));
}
}
}
...
...
@@ -627,16 +641,13 @@ get_relattval(Node *clause,
*
flag
=
(
_SELEC_CONSTANT_RIGHT_
|
_SELEC_NOT_CONSTANT_
);
}
#ifdef INDEXSCAN_PATCH
}
else
if
(
is_opclause
(
clause
)
&&
IsA
(
left
,
Var
)
&&
IsA
(
right
,
Param
))
else
if
(
is_opclause
(
clause
)
&&
IsA
(
left
,
Var
)
&&
IsA
(
right
,
Param
))
{
/* Function parameter used as index scan arg. DZ - 27-8-1996 */
*
relid
=
left
->
varno
;
*
attno
=
left
->
varattno
;
*
constval
=
0
;
*
flag
=
(
_SELEC_NOT_CONSTANT_
);
#endif
}
else
if
(
is_opclause
(
clause
)
&&
is_funcclause
((
Node
*
)
left
)
&&
...
...
@@ -680,16 +691,13 @@ get_relattval(Node *clause,
*
constval
=
0
;
*
flag
=
(
_SELEC_NOT_CONSTANT_
);
}
#ifdef INDEXSCAN_PATCH
}
else
if
(
is_opclause
(
clause
)
&&
IsA
(
right
,
Var
)
&&
IsA
(
left
,
Param
))
else
if
(
is_opclause
(
clause
)
&&
IsA
(
right
,
Var
)
&&
IsA
(
left
,
Param
))
{
/* ...And here... - vadim 01/22/97 */
*
relid
=
right
->
varno
;
*
attno
=
right
->
varattno
;
*
constval
=
0
;
*
flag
=
(
_SELEC_NOT_CONSTANT_
);
#endif
}
else
{
...
...
src/backend/optimizer/util/tlist.c
浏览文件 @
e51c674c
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/optimizer/util/tlist.c,v 1.1
0 1998/02/10 04:01:21 momjian
Exp $
* $Header: /cvsroot/pgsql/src/backend/optimizer/util/tlist.c,v 1.1
1 1998/02/13 03:40:21 vadim
Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -273,6 +273,7 @@ match_varid(Var *test_var, List *tlist)
type_var
=
(
Oid
)
test_var
->
vartype
;
Assert
(
test_var
->
varlevelsup
==
0
);
foreach
(
tl
,
tlist
)
{
TargetEntry
*
entry
;
...
...
@@ -288,9 +289,9 @@ match_varid(Var *test_var, List *tlist)
* we test the original varno (instead of varno which might be
* changed to INNER/OUTER.
*/
Assert
(
tlvar
->
varlevelsup
==
0
);
if
(
tlvar
->
varnoold
==
test_var
->
varnoold
&&
tlvar
->
varoattno
==
test_var
->
varoattno
&&
tlvar
->
varlevelsup
==
test_var
->
varlevelsup
)
tlvar
->
varoattno
==
test_var
->
varoattno
)
{
if
(
tlvar
->
vartype
==
type_var
)
...
...
src/backend/optimizer/util/var.c
浏览文件 @
e51c674c
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/optimizer/util/var.c,v 1.
9 1998/02/10 04:01:27 momjian
Exp $
* $Header: /cvsroot/pgsql/src/backend/optimizer/util/var.c,v 1.
10 1998/02/13 03:40:23 vadim
Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -18,6 +18,7 @@
#include <nodes/relation.h>
#include "nodes/primnodes.h"
#include "nodes/plannodes.h"
#include "nodes/nodeFuncs.h"
#include "optimizer/internal.h"
...
...
@@ -85,7 +86,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
)
||
and_clause
(
clause
))
else
if
(
or_clause
(
clause
)
||
and_clause
(
clause
)
||
is_funcclause
(
clause
)
)
{
List
*
temp
;
...
...
@@ -96,7 +97,7 @@ contain_var_clause(Node *clause)
}
return
FALSE
;
}
else
if
(
is_
funcclause
(
clause
))
else
if
(
is_
subplan
(
clause
))
{
List
*
temp
;
...
...
@@ -105,6 +106,12 @@ contain_var_clause(Node *clause)
if
(
contain_var_clause
(
lfirst
(
temp
)))
return
TRUE
;
}
/* Ok - check left sides of Oper-s */
foreach
(
temp
,
((
SubPlan
*
)
((
Expr
*
)
clause
)
->
oper
)
->
sublink
->
oper
)
{
if
(
contain_var_clause
(
lfirst
(((
Expr
*
)
lfirst
(
temp
))
->
args
)))
return
TRUE
;
}
return
FALSE
;
}
else
if
(
IsA
(
clause
,
ArrayRef
))
...
...
@@ -156,19 +163,23 @@ pull_var_clause(Node *clause)
retval
=
pull_var_clause
(((
Iter
*
)
clause
)
->
iterexpr
);
else
if
(
single_node
(
clause
))
retval
=
NIL
;
else
if
(
or_clause
(
clause
)
||
and_clause
(
clause
))
else
if
(
or_clause
(
clause
)
||
and_clause
(
clause
)
||
is_funcclause
(
clause
)
)
{
List
*
temp
;
foreach
(
temp
,
((
Expr
*
)
clause
)
->
args
)
retval
=
nconc
(
retval
,
pull_var_clause
(
lfirst
(
temp
)));
}
else
if
(
is_
funcclause
(
clause
))
else
if
(
is_
subplan
(
clause
))
{
List
*
temp
;
foreach
(
temp
,
((
Expr
*
)
clause
)
->
args
)
foreach
(
temp
,
((
Expr
*
)
clause
)
->
args
)
retval
=
nconc
(
retval
,
pull_var_clause
(
lfirst
(
temp
)));
/* Ok - get Var-s from left sides of Oper-s */
foreach
(
temp
,
((
SubPlan
*
)
((
Expr
*
)
clause
)
->
oper
)
->
sublink
->
oper
)
retval
=
nconc
(
retval
,
pull_var_clause
(
lfirst
(((
Expr
*
)
lfirst
(
temp
))
->
args
)));
}
else
if
(
IsA
(
clause
,
Aggreg
))
{
...
...
@@ -213,7 +224,7 @@ var_equal(Var *var1, Var *var2)
(((
Var
*
)
var1
)
->
varlevelsup
==
((
Var
*
)
var2
)
->
varlevelsup
)
&&
(((
Var
*
)
var1
)
->
varattno
==
((
Var
*
)
var2
)
->
varattno
))
{
Assert
(((
Var
*
)
var1
)
->
varlevelsup
==
0
);
return
(
true
);
}
else
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录