Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
Postgres FD Implementation
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Abuhujair Javed
Postgres FD Implementation
Commits
1ed5cbbf
Commit
1ed5cbbf
authored
Feb 22, 1999
by
Bruce Momjian
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Final optimizer cleanups.
parent
47dd11bd
Changes
16
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
174 additions
and
163 deletions
+174
-163
src/backend/nodes/list.c
src/backend/nodes/list.c
+5
-1
src/backend/optimizer/path/allpaths.c
src/backend/optimizer/path/allpaths.c
+2
-2
src/backend/optimizer/path/hashutils.c
src/backend/optimizer/path/hashutils.c
+2
-4
src/backend/optimizer/path/indxpath.c
src/backend/optimizer/path/indxpath.c
+2
-2
src/backend/optimizer/path/joinpath.c
src/backend/optimizer/path/joinpath.c
+11
-8
src/backend/optimizer/path/joinrels.c
src/backend/optimizer/path/joinrels.c
+7
-5
src/backend/optimizer/path/pathkeys.c
src/backend/optimizer/path/pathkeys.c
+110
-105
src/backend/optimizer/plan/initsplan.c
src/backend/optimizer/plan/initsplan.c
+2
-2
src/backend/optimizer/util/joininfo.c
src/backend/optimizer/util/joininfo.c
+3
-3
src/backend/optimizer/util/var.c
src/backend/optimizer/util/var.c
+4
-1
src/backend/parser/gram.c
src/backend/parser/gram.c
+2
-2
src/backend/rewrite/rewriteHandler.c
src/backend/rewrite/rewriteHandler.c
+3
-3
src/include/nodes/pg_list.h
src/include/nodes/pg_list.h
+1
-4
src/include/optimizer/paths.h
src/include/optimizer/paths.h
+3
-3
src/interfaces/libpq/fe-misc.c
src/interfaces/libpq/fe-misc.c
+3
-3
src/man/postmaster.1
src/man/postmaster.1
+14
-15
No files found.
src/backend/nodes/list.c
View file @
1ed5cbbf
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/nodes/list.c,v 1.1
7 1999/02/13 23:15:57
momjian Exp $
* $Header: /cvsroot/pgsql/src/backend/nodes/list.c,v 1.1
8 1999/02/22 05:26:18
momjian Exp $
*
* NOTES
* XXX a few of the following functions are duplicated to handle
...
...
@@ -109,6 +109,7 @@ nconc(List *l1, List *l2)
}
#ifdef NOT_USED
List
*
nreverse
(
List
*
list
)
{
...
...
@@ -128,6 +129,7 @@ nreverse(List *list)
lnext
(
list
)
=
lnext
(
rlist
);
return
list
;
}
#endif
Value
*
makeInteger
(
long
i
)
...
...
@@ -245,6 +247,7 @@ append(List *l1, List *l2)
return
newlist
;
}
#ifdef NOT_USED
/*
* below are for backwards compatibility
*/
...
...
@@ -266,6 +269,7 @@ intAppend(List *l1, List *l2)
lnext
(
p
)
=
newlist2
;
return
newlist
;
}
#endif
/*
* same
...
...
src/backend/optimizer/path/allpaths.c
View file @
1ed5cbbf
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/optimizer/path/allpaths.c,v 1.4
3 1999/02/21 03:48:41 scrappy
Exp $
* $Header: /cvsroot/pgsql/src/backend/optimizer/path/allpaths.c,v 1.4
4 1999/02/22 05:26:18 momjian
Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -126,7 +126,7 @@ set_base_rel_pathlist(Query *root, List *rels)
rel
->
pathlist
=
add_pathlist
(
rel
,
sequential_scan_list
,
append
(
rel_index_scan_list
,
nconc
(
rel_index_scan_list
,
or_index_scan_list
));
set_cheapest
(
rel
,
rel
->
pathlist
);
...
...
src/backend/optimizer/path/hashutils.c
View file @
1ed5cbbf
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/optimizer/path/Attic/hashutils.c,v 1.1
3 1999/02/13 23:16:16
momjian Exp $
* $Header: /cvsroot/pgsql/src/backend/optimizer/path/Attic/hashutils.c,v 1.1
4 1999/02/22 05:26:18
momjian Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -83,9 +83,7 @@ group_clauses_by_hashop(List *restrictinfo_list,
xhashinfo
->
jmethod
.
jmkeys
=
NIL
;
xhashinfo
->
jmethod
.
clauses
=
NIL
;
/* XXX was push */
hashinfo_list
=
lappend
(
hashinfo_list
,
xhashinfo
);
hashinfo_list
=
nreverse
(
hashinfo_list
);
hashinfo_list
=
lcons
(
xhashinfo
,
hashinfo_list
);
}
xhashinfo
->
jmethod
.
clauses
=
lcons
(
clause
,
xhashinfo
->
jmethod
.
clauses
);
...
...
src/backend/optimizer/path/indxpath.c
View file @
1ed5cbbf
...
...
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/optimizer/path/indxpath.c,v 1.5
2 1999/02/21 03:48:44 scrappy
Exp $
* $Header: /cvsroot/pgsql/src/backend/optimizer/path/indxpath.c,v 1.5
3 1999/02/22 05:26:19 momjian
Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -1384,7 +1384,7 @@ create_index_path_group(Query *root,
static
List
*
add_index_paths
(
List
*
indexpaths
,
List
*
new_indexpaths
)
{
return
append
(
indexpaths
,
new_indexpaths
);
return
nconc
(
indexpaths
,
new_indexpaths
);
}
static
bool
...
...
src/backend/optimizer/path/joinpath.c
View file @
1ed5cbbf
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/optimizer/path/joinpath.c,v 1.3
1 1999/02/21 01:55:02
momjian Exp $
* $Header: /cvsroot/pgsql/src/backend/optimizer/path/joinpath.c,v 1.3
2 1999/02/22 05:26:20
momjian Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -104,7 +104,8 @@ update_rels_pathlist_for_joins(Query *root, List *joinrels)
lfirsti
(
innerrel
->
relids
));
/* need to flatten the relids list */
joinrel
->
relids
=
intAppend
(
outerrelids
,
innerrelids
);
joinrel
->
relids
=
nconc
(
listCopy
(
outerrelids
),
listCopy
(
innerrelids
));
/*
* 1. Consider mergejoin paths where both relations must be
...
...
@@ -213,11 +214,11 @@ sort_inner_and_outer(RelOptInfo *joinrel,
{
xmergeinfo
=
(
MergeInfo
*
)
lfirst
(
i
);
outerkeys
=
extract_path_
keys
(
xmergeinfo
->
jmethod
.
jmkeys
,
outerkeys
=
make_pathkeys_from_join
keys
(
xmergeinfo
->
jmethod
.
jmkeys
,
outerrel
->
targetlist
,
OUTER
);
innerkeys
=
extract_path_
keys
(
xmergeinfo
->
jmethod
.
jmkeys
,
innerkeys
=
make_pathkeys_from_join
keys
(
xmergeinfo
->
jmethod
.
jmkeys
,
innerrel
->
targetlist
,
INNER
);
...
...
@@ -352,7 +353,7 @@ match_unsorted_outer(RelOptInfo *joinrel,
innerrel
->
width
,
false
))));
if
(
!
path_is_cheaper_than_sort
)
{
varkeys
=
extract_path_
keys
(
matchedJoinKeys
,
varkeys
=
make_pathkeys_from_join
keys
(
matchedJoinKeys
,
innerrel
->
targetlist
,
INNER
);
}
...
...
@@ -473,7 +474,7 @@ match_unsorted_inner(RelOptInfo *joinrel,
if
(
temp2
)
{
List
*
outerkeys
=
extract_path_
keys
(
matchedJoinKeys
,
List
*
outerkeys
=
make_pathkeys_from_join
keys
(
matchedJoinKeys
,
outerrel
->
targetlist
,
OUTER
);
List
*
merge_pathkeys
=
new_join_pathkeys
(
outerkeys
,
...
...
@@ -551,10 +552,12 @@ hash_inner_and_outer(RelOptInfo *joinrel,
foreach
(
i
,
hashinfo_list
)
{
xhashinfo
=
(
HashInfo
*
)
lfirst
(
i
);
outerkeys
=
extract_path_keys
(((
JoinMethod
*
)
xhashinfo
)
->
jmkeys
,
outerkeys
=
make_pathkeys_from_joinkeys
(
((
JoinMethod
*
)
xhashinfo
)
->
jmkeys
,
outerrel
->
targetlist
,
OUTER
);
innerkeys
=
extract_path_keys
(((
JoinMethod
*
)
xhashinfo
)
->
jmkeys
,
innerkeys
=
make_pathkeys_from_joinkeys
(
((
JoinMethod
*
)
xhashinfo
)
->
jmkeys
,
innerrel
->
targetlist
,
INNER
);
hash_pathkeys
=
new_join_pathkeys
(
outerkeys
,
...
...
src/backend/optimizer/path/joinrels.c
View file @
1ed5cbbf
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/optimizer/path/joinrels.c,v 1.3
0 1999/02/18 06:00:46
momjian Exp $
* $Header: /cvsroot/pgsql/src/backend/optimizer/path/joinrels.c,v 1.3
1 1999/02/22 05:26:20
momjian Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -62,7 +62,7 @@ make_rels_by_joins(Query *root, List *old_rels)
joined_rels
=
make_rels_by_clauseless_joins
(
old_rel
,
root
->
base_rel_list
);
joined_rels
=
append
(
joined_rels
,
make_rels_by_clauseless_joins
(
old_rel
,
make_rels_by_clauseless_joins
(
old_rel
,
old_rels
));
}
...
...
@@ -235,9 +235,11 @@ make_join_rel(RelOptInfo *outer_rel, RelOptInfo *inner_rel, JoinInfo *joininfo)
if
(
joininfo
)
joinrel
->
restrictinfo
=
joininfo
->
jinfo_restrictinfo
;
joinrel_joininfo_list
=
new_joininfo_list
(
append
(
outer_rel
->
joininfo
,
inner_rel
->
joininfo
),
intAppend
(
outer_rel
->
relids
,
inner_rel
->
relids
));
joinrel_joininfo_list
=
new_joininfo_list
(
append
(
outer_rel
->
joininfo
,
inner_rel
->
joininfo
),
nconc
(
listCopy
(
outer_rel
->
relids
),
listCopy
(
inner_rel
->
relids
)));
joinrel
->
joininfo
=
joinrel_joininfo_list
;
...
...
src/backend/optimizer/path/pathkeys.c
View file @
1ed5cbbf
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/optimizer/path/pathkeys.c,v 1.
6 1999/02/21 01:55:02
momjian Exp $
* $Header: /cvsroot/pgsql/src/backend/optimizer/path/pathkeys.c,v 1.
7 1999/02/22 05:26:20
momjian Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -27,9 +27,9 @@
static
int
match_pathkey_joinkeys
(
List
*
pathkey
,
List
*
joinkeys
,
int
outer_or_inner
);
static
List
*
new_join_pathkey
(
List
*
subkeys
,
List
*
considered_subkeys
,
List
*
join_rel_tlist
,
List
*
joinclauses
);
static
List
*
new_matching_subkeys
(
Var
*
subkey
,
List
*
considered_sub
keys
,
static
List
*
new_join_pathkey
(
List
*
pathkeys
,
List
*
join_rel_tlist
,
List
*
joinclauses
);
static
List
*
get_joinvars_for_var
(
Var
*
pathkey
,
List
**
considered_path
keys
,
List
*
join_rel_tlist
,
List
*
joinclauses
);
...
...
@@ -86,7 +86,7 @@ static List *new_matching_subkeys(Var *subkey, List *considered_subkeys,
* ( (outer inner) (outer inner) ... )
* 'joinclauses' is a list of clauses corresponding to the join keys in
* 'joinkeys'
* 'outer_or_inner' is a flag that selects the desired
sub
key of a join key
* 'outer_or_inner' is a flag that selects the desired
path
key of a join key
* in 'joinkeys'
*
* Returns the join keys and corresponding join clauses in a list if all
...
...
@@ -133,10 +133,11 @@ order_joinkeys_by_pathkeys(List *pathkeys,
matched_joinkeys
=
lappend
(
matched_joinkeys
,
joinkey
);
}
if
(
matchedJoinClausesPtr
&&
joinclauses
)
if
(
matchedJoinClausesPtr
)
{
Expr
*
joinclause
=
nth
(
matched_joinkey_index
,
joinclauses
);
Assert
(
joinclauses
);
matched_joinclauses
=
lappend
(
matched_joinclauses
,
joinclause
);
}
}
...
...
@@ -169,7 +170,7 @@ order_joinkeys_by_pathkeys(List *pathkeys,
/*
* match_pathkey_joinkeys
* Returns the 0-based index into 'joinkeys' of the first joinkey whose
* outer or inner
sub
key matches any subkey of 'pathkey'.
* outer or inner
path
key matches any subkey of 'pathkey'.
*
* All these keys are equivalent, so any of them can match. See above.
*/
...
...
@@ -178,19 +179,19 @@ match_pathkey_joinkeys(List *pathkey,
List
*
joinkeys
,
int
outer_or_inner
)
{
Var
*
path_sub
key
;
Var
*
key
;
int
pos
;
List
*
i
,
*
x
;
JoinKey
*
jk
;
foreach
(
i
,
pathkey
)
{
path_sub
key
=
(
Var
*
)
lfirst
(
i
);
key
=
(
Var
*
)
lfirst
(
i
);
pos
=
0
;
foreach
(
x
,
joinkeys
)
{
jk
=
(
JoinKey
*
)
lfirst
(
x
);
if
(
var_equal
(
path_sub
key
,
extract_join_key
(
jk
,
outer_or_inner
)))
if
(
equal
(
key
,
extract_join_key
(
jk
,
outer_or_inner
)))
return
pos
;
pos
++
;
}
...
...
@@ -204,9 +205,9 @@ match_pathkey_joinkeys(List *pathkey,
* Attempts to find a path in 'paths' whose keys match a set of join
* keys 'joinkeys'. To match,
* 1. the path node ordering must equal 'ordering'.
* 2. each
subkey of a given path must match(i.e., be(var_
equal) to) the
* appropriate
sub
key of the corresponding join key in 'joinkeys',
* i.e., the Nth path key must match its
subkeys against the sub
key of
* 2. each
pathkey of a given path must match(i.e., be(
equal) to) the
* appropriate
path
key of the corresponding join key in 'joinkeys',
* i.e., the Nth path key must match its
pathkeys against the path
key of
* the Nth join key in 'joinkeys'.
*
* 'joinkeys' is the list of key pairs to which the path keys must be
...
...
@@ -215,7 +216,7 @@ match_pathkey_joinkeys(List *pathkey,
* must correspond
* 'paths' is a list of(inner) paths which are to be matched against
* each join key in 'joinkeys'
* 'outer_or_inner' is a flag that selects the desired
sub
key of a join key
* 'outer_or_inner' is a flag that selects the desired
path
key of a join key
* in 'joinkeys'
*
* Find the cheapest path that matches the join keys
...
...
@@ -232,7 +233,7 @@ get_cheapest_path_for_joinkeys(List *joinkeys,
foreach
(
i
,
paths
)
{
Path
*
path
=
(
Path
*
)
lfirst
(
i
);
int
better_sort
,
better_key
;
int
better_sort
;
if
(
order_joinkeys_by_pathkeys
(
path
->
pathkeys
,
joinkeys
,
NIL
,
outer_or_inner
,
NULL
,
NULL
)
&&
...
...
@@ -251,23 +252,23 @@ get_cheapest_path_for_joinkeys(List *joinkeys,
/*
*
extract_path_
keys
* Builds a
subkey list for a path by pulling one of the sub
keys from
*
make_pathkeys_from_join
keys
* Builds a
pathkey list for a path by pulling one of the path
keys from
* a list of join keys 'joinkeys' and then finding the var node in the
* target list 'tlist' that corresponds to that
sub
key.
* target list 'tlist' that corresponds to that
path
key.
*
* 'joinkeys' is a list of join key pairs
* 'tlist' is a relation target list
* 'outer_or_inner' is a flag that selects the desired
sub
key of a join key
* 'outer_or_inner' is a flag that selects the desired
path
key of a join key
* in 'joinkeys'
*
* Returns a list of pathkeys: ((tlvar1)(tlvar2)...(tlvarN)).
* It is a list of lists because of multi-key indexes.
*/
List
*
extract_path_
keys
(
List
*
joinkeys
,
List
*
tlist
,
int
outer_or_inner
)
make_pathkeys_from_join
keys
(
List
*
joinkeys
,
List
*
tlist
,
int
outer_or_inner
)
{
List
*
pathkeys
=
NIL
;
List
*
jk
;
...
...
@@ -275,30 +276,38 @@ extract_path_keys(List *joinkeys,
foreach
(
jk
,
joinkeys
)
{
JoinKey
*
jkey
=
(
JoinKey
*
)
lfirst
(
jk
);
Var
*
var
,
*
key
;
List
*
p
;
Var
*
key
;
List
*
p
,
*
p2
;
bool
found
=
false
;
/*
* find the right Var in the target list for this key
*/
var
=
(
Var
*
)
extract_join_key
(
jkey
,
outer_or_inner
);
key
=
(
Var
*
)
matching_tlist_var
(
var
,
tlist
);
key
=
(
Var
*
)
extract_join_key
(
jkey
,
outer_or_inner
);
/*
* Include it in the pathkeys list if we haven't already done so
*/
foreach
(
p
,
pathkeys
)
/* check to see if it is in the target list */
if
(
matching_tlist_var
(
key
,
tlist
))
{
Var
*
pkey
=
lfirst
((
List
*
)
lfirst
(
p
));
/* XXX fix me */
if
(
key
==
pkey
)
break
;
/*
* Include it in the pathkeys list if we haven't already done so
*/
foreach
(
p
,
pathkeys
)
{
List
*
pathkey
=
lfirst
(
p
);
foreach
(
p2
,
pathkey
)
{
Var
*
pkey
=
lfirst
(
p2
);
if
(
equal
(
key
,
pkey
))
{
found
=
true
;
break
;
}
}
if
(
found
)
break
;
}
if
(
!
found
)
pathkeys
=
lappend
(
pathkeys
,
lcons
(
key
,
NIL
));
}
if
(
p
!=
NIL
)
continue
;
/* key already in pathkeys */
pathkeys
=
lappend
(
pathkeys
,
lcons
(
key
,
NIL
));
}
return
pathkeys
;
}
...
...
@@ -331,99 +340,100 @@ new_join_pathkeys(List *outer_pathkeys,
List
*
joinclauses
)
{
List
*
outer_pathkey
=
NIL
;
List
*
t_list
=
NIL
;
List
*
x
;
List
*
final_pathkeys
=
NIL
;
List
*
new_pathkey
;
List
*
i
=
NIL
;
foreach
(
i
,
outer_pathkeys
)
{
outer_pathkey
=
lfirst
(
i
);
x
=
new_join_pathkey
(
outer_pathkey
,
NIL
,
join_rel_tlist
,
joinclauses
);
if
(
x
!=
NIL
)
t_list
=
lappend
(
t_list
,
x
);
new_pathkey
=
new_join_pathkey
(
outer_pathkey
,
join_rel_tlist
,
joinclauses
);
if
(
new_pathkey
!=
NIL
)
final_pathkeys
=
lappend
(
final_pathkeys
,
new_pathkey
);
}
return
t_list
;
return
final_pathkeys
;
}
/*
* new_join_pathkey
* Finds new vars that become
sub
keys due to qualification clauses that
* contain any previously considered
subkeys. These new sub
keys plus the
*
subkeys from 'sub
keys' form a new pathkey for the join relation.
* Finds new vars that become
path
keys due to qualification clauses that
* contain any previously considered
pathkeys. These new path
keys plus the
*
pathkeys from 'path
keys' form a new pathkey for the join relation.
*
* Note that each returned
sub
key is the var node found in
* Note that each returned
path
key is the var node found in
* 'join_rel_tlist' rather than the joinclause var node.
*
* '
subkeys' is a list of subkeys for which matching sub
keys are to be
* '
pathkeys' is a list of pathkeys for which matching path
keys are to be
* found
* 'considered_
subkeys' is the current list of all sub
keys corresponding
* 'considered_
pathkeys' is the current list of all path
keys corresponding
* to a given pathkey
*
* Returns a new pathkey(list of
sub
keys).
* Returns a new pathkey(list of
path
keys).
*
*/
static
List
*
new_join_pathkey
(
List
*
subkeys
,
List
*
considered_subkeys
,
new_join_pathkey
(
List
*
pathkey
,
List
*
join_rel_tlist
,
List
*
joinclauses
)
{
List
*
t_list
=
NIL
;
Var
*
subkey
;
List
*
final_pathkey
=
NIL
;
List
*
i
=
NIL
;
List
*
matched_subkeys
=
NIL
;
Expr
*
tlist_key
=
(
Expr
*
)
NULL
;
List
*
newly_considered_subkeys
=
NIL
;
List
*
considered_pathkeys
=
NIL
;
foreach
(
i
,
subkeys
)
foreach
(
i
,
pathkey
)
{
subkey
=
(
Var
*
)
lfirst
(
i
);
if
(
subkey
==
NULL
)
break
;
/* XXX something is wrong */
matched_subkeys
=
new_matching_subkeys
(
subkey
,
considered_subkeys
,
join_rel_tlist
,
joinclauses
);
tlist_key
=
matching_tlist_var
(
subkey
,
join_rel_tlist
);
newly_considered_subkeys
=
NIL
;
if
(
tlist_key
)
Var
*
key
=
(
Var
*
)
lfirst
(
i
);
List
*
joined_keys
;
Expr
*
tlist_key
;
Assert
(
key
);
joined_keys
=
get_joinvars_for_var
(
key
,
&
considered_pathkeys
,
join_rel_tlist
,
joinclauses
);
if
(
joined_keys
)
{
if
(
!
member
(
tlist_key
,
matched_subkeys
))
newly_considered_subkeys
=
lcons
(
tlist_key
,
matched_subkeys
);
considered_pathkeys
=
nconc
(
considered_pathkeys
,
joined_keys
);
final_pathkey
=
nconc
(
final_pathkey
,
joined_keys
);
}
tlist_key
=
matching_tlist_var
(
key
,
join_rel_tlist
);
if
(
tlist_key
&&
!
member
(
tlist_key
,
considered_pathkeys
))
{
/*
* If pathkey is in the target list, and not considered,
* add it
*/
considered_pathkeys
=
lcons
(
tlist_key
,
considered_pathkeys
);
final_pathkey
=
lcons
(
tlist_key
,
final_pathkey
);
}
else
newly_considered_subkeys
=
matched_subkeys
;
considered_subkeys
=
append
(
considered_subkeys
,
newly_considered_subkeys
);
t_list
=
nconc
(
t_list
,
newly_considered_subkeys
);
}
return
t_list
;
return
copyObject
(
final_pathkey
)
;
}
/*
*
new_matching_subkeys
* Returns a list of new
sub
keys:
* (1) which are not listed in 'considered_
sub
keys'
*
get_joinvars_for_var
* Returns a list of new
path
keys:
* (1) which are not listed in 'considered_
path
keys'
* (2) for which the "other" variable in some clause in 'joinclauses' is
* '
sub
key'
* '
path
key'
* (3) which are mentioned in 'join_rel_tlist'
*
* Note that each returned
sub
key is the var node found in
* Note that each returned
path
key is the var node found in
* 'join_rel_tlist' rather than the joinclause var node.
*
* '
sub
key' is the var node for which we are trying to find matching
* '
path
key' is the var node for which we are trying to find matching
* clauses
*
* Returns a list of new
sub
keys.
* Returns a list of new
path
keys.
*
*/
static
List
*
new_matching_subkeys
(
Var
*
sub
key
,
List
*
considered_sub
keys
,
get_joinvars_for_var
(
Var
*
key
,
List
*
*
considered_path
keys
,
List
*
join_rel_tlist
,
List
*
joinclauses
)
{
List
*
t_list
=
NIL
;
List
*
final_pathkey
=
NIL
;
Expr
*
joinclause
;
List
*
i
;
Expr
*
tlist_other_var
;
...
...
@@ -431,25 +441,20 @@ new_matching_subkeys(Var *subkey,
foreach
(
i
,
joinclauses
)
{
joinclause
=
lfirst
(
i
);
tlist_other_var
=
matching_tlist_var
(
other_join_clause_var
(
subkey
,
joinclause
),
join_rel_tlist
);
tlist_other_var
=
matching_tlist_var
(
other_join_clause_var
(
key
,
joinclause
),
join_rel_tlist
);
if
(
tlist_other_var
&&
!
(
member
(
tlist_other_var
,
considered_subkeys
)
))
!
member
(
tlist_other_var
,
*
considered_pathkeys
))
{
/* XXX was "push" function */
considered_subkeys
=
lappend
(
considered_subkeys
,
tlist_other_var
);
/*
*
considered_subkeys = nreverse(considered_subkeys); XXX -- I
*
am not sure of this
.
*
The key has a join variable that is in the target list,
*
and has not been considered
.
*/
t_list
=
lappend
(
t_list
,
tlist_other_var
);
*
considered_pathkeys
=
lcons
(
tlist_other_var
,
*
considered_pathkeys
);
final_pathkey
=
lcons
(
tlist_other_var
,
final_pathkey
);
}
}
return
t_list
;
return
final_pathkey
;
}
src/backend/optimizer/plan/initsplan.c
View file @
1ed5cbbf
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/optimizer/plan/initsplan.c,v 1.2
8 1999/02/18 00:49:26
momjian Exp $
* $Header: /cvsroot/pgsql/src/backend/optimizer/plan/initsplan.c,v 1.2
9 1999/02/22 05:26:21
momjian Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -72,7 +72,7 @@ make_var_only_tlist(Query *root, List *tlist)
{
TargetEntry
*
entry
=
(
TargetEntry
*
)
lfirst
(
l
);
tlist_vars
=
append
(
tlist_vars
,
pull_var_clause
(
entry
->
expr
));
tlist_vars
=
nconc
(
tlist_vars
,
pull_var_clause
(
entry
->
expr
));
}
/* now, the target list only contains Var nodes */
...
...
src/backend/optimizer/util/joininfo.c
View file @
1ed5cbbf
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/optimizer/util/joininfo.c,v 1.1
8 1999/02/18 00:49:37
momjian Exp $
* $Header: /cvsroot/pgsql/src/backend/optimizer/util/joininfo.c,v 1.1
9 1999/02/22 05:26:26
momjian Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -101,9 +101,9 @@ other_join_clause_var(Var *var, Expr *clause)
l
=
(
Var
*
)
get_leftop
(
clause
);
r
=
(
Var
*
)
get_rightop
(
clause
);
if
(
var_
equal
(
var
,
l
))
if
(
equal
(
var
,
l
))
retval
=
r
;
else
if
(
var_
equal
(
var
,
r
))
else
if
(
equal
(
var
,
r
))
retval
=
l
;
}
...
...
src/backend/optimizer/util/var.c
View file @
1ed5cbbf
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/optimizer/util/var.c,v 1.1
6 1999/02/13 23:16:50
momjian Exp $
* $Header: /cvsroot/pgsql/src/backend/optimizer/util/var.c,v 1.1
7 1999/02/22 05:26:27
momjian Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -235,6 +235,9 @@ pull_var_clause(Node *clause)
/*
* var_equal
*
* The only difference between this an equal() is that this does not
* test varnoold and varoattno.
*
* Returns t iff two var nodes correspond to the same attribute.
*/
bool
...
...
src/backend/parser/gram.c
View file @
1ed5cbbf
...
...
@@ -242,7 +242,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/parser/Attic/gram.c,v 2.7
3 1999/02/14 05:14:09
momjian Exp $
* $Header: /cvsroot/pgsql/src/backend/parser/Attic/gram.c,v 2.7
4 1999/02/22 05:26:33
momjian Exp $
*
* HISTORY
* AUTHOR DATE MAJOR EVENT
...
...
@@ -11574,7 +11574,7 @@ makeRowExpr(char *opr, List *largs, List *rargs)
elog
(
ERROR
,
"Operator '%s' not implemented for row expressions"
,
opr
);
}
#if
FALSE
#if
def NOT_USED
while
((
largs
!=
NIL
)
&&
(
rargs
!=
NIL
))
{
larg
=
lfirst
(
largs
);
...
...
src/backend/rewrite/rewriteHandler.c
View file @
1ed5cbbf
...
...
@@ -6,7 +6,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteHandler.c,v 1.3
6 1999/02/21 03:49:18 scrappy
Exp $
* $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteHandler.c,v 1.3
7 1999/02/22 05:26:46 momjian
Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -97,7 +97,7 @@ gatherRewriteMeta(Query *parsetree,
info
->
current_varno
=
rt_index
;
info
->
rt
=
parsetree
->
rtable
;
rt_length
=
length
(
info
->
rt
);
info
->
rt
=
append
(
info
->
rt
,
info
->
rule_action
->
rtable
);
info
->
rt
=
nconc
(
info
->
rt
,
copyObject
(
info
->
rule_action
->
rtable
)
);
info
->
new_varno
=
PRS2_NEW_VARNO
+
rt_length
;
OffsetVarNodes
(
info
->
rule_action
->
qual
,
rt_length
,
0
);
...
...
@@ -2206,7 +2206,7 @@ CopyAndAddQual(Query *parsetree,
rtable
=
new_tree
->
rtable
;
rt_length
=
length
(
rtable
);
rtable
=
append
(
rtable
,
listCopy
(
rule_action
->
rtable
));
rtable
=
nconc
(
rtable
,
copyObject
(
rule_action
->
rtable
));
new_tree
->
rtable
=
rtable
;
OffsetVarNodes
(
new_qual
,
rt_length
,
0
);
ChangeVarNodes
(
new_qual
,
PRS2_CURRENT_VARNO
+
rt_length
,
rt_index
,
0
);
...
...
src/include/nodes/pg_list.h
View file @
1ed5cbbf
...
...
@@ -6,7 +6,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
* $Id: pg_list.h,v 1.1
0 1999/02/13 23:21:39
momjian Exp $
* $Id: pg_list.h,v 1.1
1 1999/02/22 05:26:47
momjian Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -82,7 +82,6 @@ typedef struct List
* function prototypes in nodes/list.c
*/
extern
int
length
(
List
*
list
);
extern
List
*
append
(
List
*
list1
,
List
*
list2
);
extern
List
*
nconc
(
List
*
list1
,
List
*
list2
);
extern
List
*
lcons
(
void
*
datum
,
List
*
list
);
extern
bool
member
(
void
*
foo
,
List
*
bar
);
...
...
@@ -101,11 +100,9 @@ extern void set_nth(List *l, int n, void *elem);
List
*
lconsi
(
int
datum
,
List
*
list
);
List
*
lappendi
(
List
*
list
,
int
datum
);
extern
bool
intMember
(
int
,
List
*
);
extern
List
*
intAppend
(
List
*
list1
,
List
*
list2
);
extern
int
nthi
(
int
n
,
List
*
l
);
extern
List
*
nreverse
(
List
*
);
extern
List
*
set_difference
(
List
*
,
List
*
);
extern
List
*
set_differencei
(
List
*
,
List
*
);
extern
List
*
LispUnion
(
List
*
foo
,
List
*
bar
);
...
...
src/include/optimizer/paths.h
View file @
1ed5cbbf
...
...
@@ -7,7 +7,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
* $Id: paths.h,v 1.2
5 1999/02/21 01:55:03
momjian Exp $
* $Id: paths.h,v 1.2
6 1999/02/22 05:26:52
momjian Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -58,8 +58,8 @@ extern bool order_joinkeys_by_pathkeys(List *pathkeys,
List
*
joinkeys
,
List
*
joinclauses
,
int
outer_or_inner
,
List
**
matchedJoinKeysPtr
,
List
**
matchedJoinClausesPtr
);
extern
List
*
extract_path_
keys
(
List
*
joinkeys
,
List
*
tlist
,
int
outer_or_inner
);
extern
List
*
make_pathkeys_from_join
keys
(
List
*
joinkeys
,
List
*
tlist
,
int
outer_or_inner
);
extern
Path
*
get_cheapest_path_for_joinkeys
(
List
*
joinkeys
,
PathOrder
*
ordering
,
List
*
paths
,
int
outer_or_inner
);
extern
List
*
new_join_pathkeys
(
List
*
outer_pathkeys
,
...
...
src/interfaces/libpq/fe-misc.c
View file @
1ed5cbbf
...
...
@@ -24,7 +24,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-misc.c,v 1.2
2 1998/09/20 04:51:12
momjian Exp $
* $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-misc.c,v 1.2
3 1999/02/22 05:26:53
momjian Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -438,8 +438,8 @@ tryAgain2:
definitelyFailed:
sprintf
(
conn
->
errorMessage
,
"pqReadData() -- backend closed the channel unexpectedly.
\n
"
"
\t
This probably means the backend terminated abnormally"
"
before or while processing the request.
\n
"
);
"
\t
This probably means the backend terminated abnormally
\n
"
"
\t
before or while processing the request.
\n
"
);
conn
->
status
=
CONNECTION_BAD
;
/* No more connection to backend */
#ifdef WIN32
closesocket
(
conn
->
sock
);
...
...
src/man/postmaster.1
View file @
1ed5cbbf
.\" This is -*-nroff-*-
.\" XXX standard disclaimer belongs here....
.\" $Header: /cvsroot/pgsql/src/man/Attic/postmaster.1,v 1.1
4 1999/02/21 03:17:31 tgl
Exp $
.\" $Header: /cvsroot/pgsql/src/man/Attic/postmaster.1,v 1.1
5 1999/02/22 05:26:58 momjian
Exp $
.TH POSTMASTER UNIX 02/20/99 PostgreSQL PostgreSQL
.SH "NAME"
postmaster - run the Postgres postmaster
...
...
@@ -13,17 +13,17 @@ n_buffers]
.BR "-D"
data_dir]
[\c
.BR "-N"
n_backends]
.br
.in +5n
[\c
.BR "-S" \c
]
[\c
.BR "-a"
system]
[\c
.BR "-N"
n_backends]
.br
.in +5n
[\c
.BR "-b"
backend_pathname]
[\c
...
...
@@ -35,7 +35,6 @@ backend_pathname]
[\c
.BR "-n" \c
]
.br
[\c
.BR "-o"
backend_options]
...
...
@@ -81,6 +80,14 @@ is not set, then the directory used is
option is not specified, the default directory that was
set at compile-time is used.
.TP
.BR "-N" " n_backends"
.IR "n_backends"
is the maximum number of backend server processes that this postmaster
is allowed to start. In the stock configuration, this value defaults
to 64, and can be set as high as 1024 if your system will support that
many processes. Both the default and upper limit values can be altered
when building Postgres.
.TP
.BR "-S"
Specifies that the
.IR "postmaster"
...
...
@@ -108,14 +115,6 @@ connections, use
.BR "-a nounauth .
This option no longer has any effect.
.TP
.BR "-N" " n_backends"
.IR "n_backends"
is the maximum number of backend server processes that this postmaster
is allowed to start. In the stock configuration, this value defaults
to 64, and can be set as high as 1024 if your system will support that
many processes. Both the default and upper limit values can be altered
when building Postgres.
.TP
.BR "-b" " backend_pathname"
.IR "backend_pathname"
is the full pathname of the Postgres backend server executable file that
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment