Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit81fc1d5

Browse files
committed
Rename same() to sameseti() to have a slightly less generic name. Move
nonoverlap_sets() and is_subset() to list.c, where they should have livedto begin with, and rename to nonoverlap_setsi and is_subseti since theyonly work on integer lists.
1 parent418b270 commit81fc1d5

File tree

8 files changed

+76
-81
lines changed

8 files changed

+76
-81
lines changed

‎src/backend/nodes/list.c

Lines changed: 53 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $Header: /cvsroot/pgsql/src/backend/nodes/list.c,v 1.28 2000/01/26 05:56:31 momjian Exp $
11+
* $Header: /cvsroot/pgsql/src/backend/nodes/list.c,v 1.29 2000/02/06 03:27:32 tgl Exp $
1212
*
1313
* NOTES
1414
* XXX a few of the following functions are duplicated to handle
@@ -264,34 +264,32 @@ freeList(List *list)
264264
}
265265

266266
/*
267-
*same
267+
*sameseti
268268
*
269-
*Returns t if two lists contain the same elements
269+
*Returns t if twointegerlists contain the same elements
270270
*(but unlike equal(), they need not be in the same order)
271-
*
272271
*
273-
* XXX should be called samei() --- only good for IntList-ay
272+
*Caution: this routine could be fooled if list1 contains
273+
*duplicate elements. It is intended to be used on lists
274+
*containing only nonduplicate elements, eg Relids lists.
274275
*/
275276
bool
276-
same(List*l1,List*l2)
277+
sameseti(List*list1,List*list2)
277278
{
278279
List*temp;
279280

280-
if (l1==NIL)
281-
returnl2==NIL;
282-
if (l2==NIL)
283-
returnl1==NIL;
284-
if (length(l1)==length(l2))
281+
if (list1==NIL)
282+
returnlist2==NIL;
283+
if (list2==NIL)
284+
return false;
285+
if (length(list1)!=length(list2))
286+
return false;
287+
foreach(temp,list1)
285288
{
286-
foreach(temp,l1)
287-
{
288-
if (!intMember(lfirsti(temp),l2))
289-
return false;
290-
}
291-
return true;
289+
if (!intMember(lfirsti(temp),list2))
290+
return false;
292291
}
293-
return false;
294-
292+
return true;
295293
}
296294

297295
/*
@@ -519,3 +517,39 @@ set_differencei(List *l1, List *l2)
519517
}
520518
returnresult;
521519
}
520+
521+
/*
522+
* Return t if two integer lists have no members in common.
523+
*/
524+
bool
525+
nonoverlap_setsi(List*list1,List*list2)
526+
{
527+
List*x;
528+
529+
foreach(x,list1)
530+
{
531+
inte=lfirsti(x);
532+
533+
if (intMember(e,list2))
534+
return false;
535+
}
536+
return true;
537+
}
538+
539+
/*
540+
* Return t if all members of integer list list1 appear in list2.
541+
*/
542+
bool
543+
is_subseti(List*list1,List*list2)
544+
{
545+
List*x;
546+
547+
foreach(x,list1)
548+
{
549+
inte=lfirsti(x);
550+
551+
if (!intMember(e,list2))
552+
return false;
553+
}
554+
return true;
555+
}

‎src/backend/optimizer/path/joinpath.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $Header: /cvsroot/pgsql/src/backend/optimizer/path/joinpath.c,v 1.49 2000/01/26 05:56:34 momjian Exp $
11+
* $Header: /cvsroot/pgsql/src/backend/optimizer/path/joinpath.c,v 1.50 2000/02/06 03:27:32 tgl Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -181,7 +181,7 @@ best_innerjoin(List *join_paths, Relids outer_relids)
181181
* outer_relids in order to use this inner path, because those
182182
* rels are used in the index join quals of this inner path.
183183
*/
184-
if (is_subset(((IndexPath*)path)->joinrelids,outer_relids)&&
184+
if (is_subseti(((IndexPath*)path)->joinrelids,outer_relids)&&
185185
(cheapest==NULL||
186186
path_is_cheaper(path,cheapest)))
187187
cheapest=path;

‎src/backend/optimizer/path/joinrels.c

Lines changed: 4 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $Header: /cvsroot/pgsql/src/backend/optimizer/path/joinrels.c,v 1.41 2000/01/26 05:56:34 momjian Exp $
11+
* $Header: /cvsroot/pgsql/src/backend/optimizer/path/joinrels.c,v 1.42 2000/02/06 03:27:32 tgl Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -144,8 +144,8 @@ make_rels_by_clause_joins(Query *root, RelOptInfo *old_rel,
144144
RelOptInfo*join_rel=lfirst(r);
145145

146146
Assert(length(join_rel->relids)>1);
147-
if (is_subset(unjoined_relids,join_rel->relids)&&
148-
nonoverlap_sets(old_rel->relids,join_rel->relids))
147+
if (is_subseti(unjoined_relids,join_rel->relids)&&
148+
nonoverlap_setsi(old_rel->relids,join_rel->relids))
149149
{
150150
joined_rel=make_join_rel(old_rel,join_rel);
151151
join_list=lappend(join_list,joined_rel);
@@ -175,7 +175,7 @@ make_rels_by_clauseless_joins(RelOptInfo *old_rel, List *inner_rels)
175175
{
176176
RelOptInfo*inner_rel= (RelOptInfo*)lfirst(i);
177177

178-
if (nonoverlap_sets(inner_rel->relids,old_rel->relids))
178+
if (nonoverlap_setsi(inner_rel->relids,old_rel->relids))
179179
{
180180
join_list=lappend(join_list,
181181
make_join_rel(old_rel,inner_rel));
@@ -404,39 +404,3 @@ get_cheapest_complete_rel(List *join_rel_list)
404404

405405
returnfinal_rel;
406406
}
407-
408-
/*
409-
* Subset-inclusion tests on integer lists.
410-
*
411-
* XXX these probably ought to be in nodes/list.c or some such place.
412-
*/
413-
414-
bool
415-
nonoverlap_sets(List*s1,List*s2)
416-
{
417-
List*x;
418-
419-
foreach(x,s1)
420-
{
421-
inte=lfirsti(x);
422-
423-
if (intMember(e,s2))
424-
return false;
425-
}
426-
return true;
427-
}
428-
429-
bool
430-
is_subset(List*s1,List*s2)
431-
{
432-
List*x;
433-
434-
foreach(x,s1)
435-
{
436-
inte=lfirsti(x);
437-
438-
if (!intMember(e,s2))
439-
return false;
440-
}
441-
return true;
442-
}

‎src/backend/optimizer/path/prune.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $Header: /cvsroot/pgsql/src/backend/optimizer/path/Attic/prune.c,v 1.45 2000/01/26 05:56:34 momjian Exp $
11+
* $Header: /cvsroot/pgsql/src/backend/optimizer/path/Attic/prune.c,v 1.46 2000/02/06 03:27:32 tgl Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -67,7 +67,7 @@ merge_rel_with_same_relids(RelOptInfo *rel, List *unmerged_rels)
6767
{
6868
RelOptInfo*unmerged_rel= (RelOptInfo*)lfirst(i);
6969

70-
if (same(rel->relids,unmerged_rel->relids))
70+
if (sameseti(rel->relids,unmerged_rel->relids))
7171
{
7272
/*
7373
* These rels are for the same set of base relations,

‎src/backend/optimizer/util/joininfo.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $Header: /cvsroot/pgsql/src/backend/optimizer/util/joininfo.c,v 1.25 2000/01/26 05:56:40 momjian Exp $
11+
* $Header: /cvsroot/pgsql/src/backend/optimizer/util/joininfo.c,v 1.26 2000/02/06 03:27:33 tgl Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -41,7 +41,7 @@ joininfo_member(List *join_relids, List *joininfo_list)
4141
{
4242
JoinInfo*joininfo= (JoinInfo*)lfirst(i);
4343

44-
if (same(join_relids,joininfo->unjoined_relids))
44+
if (sameseti(join_relids,joininfo->unjoined_relids))
4545
returnjoininfo;
4646
}
4747
returnNULL;

‎src/backend/optimizer/util/relnode.c

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,12 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $Header: /cvsroot/pgsql/src/backend/optimizer/util/relnode.c,v 1.21 2000/01/26 05:56:40 momjian Exp $
11+
* $Header: /cvsroot/pgsql/src/backend/optimizer/util/relnode.c,v 1.22 2000/02/06 03:27:33 tgl Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
1515
#include"postgres.h"
1616

17-
1817
#include"optimizer/internal.h"
1918
#include"optimizer/pathnode.h"
2019
#include"optimizer/plancat.h"
@@ -97,17 +96,14 @@ get_join_rel(Query *root, Relids relid)
9796
RelOptInfo*
9897
rel_member(Relidsrelids,List*rels)
9998
{
100-
if (relids!=NIL&&rels!=NIL)
101-
{
102-
List*temp;
99+
List*temp;
103100

104-
foreach(temp,rels)
105-
{
106-
RelOptInfo*rel= (RelOptInfo*)lfirst(temp);
101+
foreach(temp,rels)
102+
{
103+
RelOptInfo*rel= (RelOptInfo*)lfirst(temp);
107104

108-
if (same(rel->relids,relids))
109-
returnrel;
110-
}
105+
if (sameseti(rel->relids,relids))
106+
returnrel;
111107
}
112108
returnNULL;
113109
}

‎src/include/nodes/pg_list.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
88
* Portions Copyright (c) 1994, Regents of the University of California
99
*
10-
* $Id: pg_list.h,v 1.14 2000/01/26 05:58:16 momjian Exp $
10+
* $Id: pg_list.h,v 1.15 2000/02/06 03:27:35 tgl Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -106,7 +106,10 @@ extern List *set_difference(List *list1, List *list2);
106106
externList*set_differencei(List*list1,List*list2);
107107
externList*LispUnion(List*list1,List*list2);
108108
externList*LispUnioni(List*list1,List*list2);
109-
externboolsame(List*list1,List*list2);
109+
110+
externboolsameseti(List*list1,List*list2);
111+
externboolnonoverlap_setsi(List*list1,List*list2);
112+
externboolis_subseti(List*list1,List*list2);
110113

111114
externvoidfreeList(List*list);
112115

‎src/include/optimizer/paths.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
99
* Portions Copyright (c) 1994, Regents of the University of California
1010
*
11-
* $Id: paths.h,v 1.40 2000/02/05 18:26:07 tgl Exp $
11+
* $Id: paths.h,v 1.41 2000/02/06 03:27:35 tgl Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -100,8 +100,6 @@ extern List *make_rels_by_clause_joins(Query *root, RelOptInfo *old_rel,
100100
externList*make_rels_by_clauseless_joins(RelOptInfo*old_rel,
101101
List*inner_rels);
102102
externRelOptInfo*get_cheapest_complete_rel(List*join_rel_list);
103-
externboolnonoverlap_sets(List*s1,List*s2);
104-
externboolis_subset(List*s1,List*s2);
105103

106104
/*
107105
* prune.c

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp