diff options
author | Bruce Momjian <bruce@momjian.us> | 1999-02-15 03:22:37 +0000 |
---|---|---|
committer | Bruce Momjian <bruce@momjian.us> | 1999-02-15 03:22:37 +0000 |
commit | ba2883b264d7bc392604bc9f76abfc30de89f5f8 (patch) | |
tree | 67aaa53cf2b12967f12b8fabaad7088ffcddb550 /src/backend/optimizer/path/costsize.c | |
parent | 944d3c395e292c213c1a2be617af1b8473299b1b (diff) |
Remove duplicate geqo functions, and more optimizer cleanup
Diffstat (limited to 'src/backend/optimizer/path/costsize.c')
-rw-r--r-- | src/backend/optimizer/path/costsize.c | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/src/backend/optimizer/path/costsize.c b/src/backend/optimizer/path/costsize.c index facadef913b..cb30dec42cc 100644 --- a/src/backend/optimizer/path/costsize.c +++ b/src/backend/optimizer/path/costsize.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/path/costsize.c,v 1.32 1999/02/13 23:16:16 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/path/costsize.c,v 1.33 1999/02/15 03:22:04 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -440,21 +440,19 @@ compute_joinrel_size(JoinPath *joinpath) Cost temp = 1.0; int temp1 = 0; + /* cartesian product */ temp *= ((Path *) joinpath->outerjoinpath)->parent->size; temp *= ((Path *) joinpath->innerjoinpath)->parent->size; temp = temp * product_selec(joinpath->pathinfo); - if (temp >= (MAXINT - 1)) - temp1 = MAXINT; - else + if (temp >= (MAXINT-1)/2) { - - /* - * should be ceil here, we don't want joinrel size's of one, do - * we? - */ - temp1 = ceil((double) temp); + /* if we exceed (MAXINT-1)/2, we switch to log scale */ + /* +1 prevents log(0) */ + temp1 = ceil(log(temp + 1 - (MAXINT-1)/2) + (MAXINT-1)/2); } + else + temp1 = ceil((double) temp); Assert(temp1 >= 0); return temp1; |