summaryrefslogtreecommitdiff
path: root/src/backend/optimizer/path/costsize.c
diff options
context:
space:
mode:
authorBruce Momjian <bruce@momjian.us>1999-02-15 03:22:37 +0000
committerBruce Momjian <bruce@momjian.us>1999-02-15 03:22:37 +0000
commitba2883b264d7bc392604bc9f76abfc30de89f5f8 (patch)
tree67aaa53cf2b12967f12b8fabaad7088ffcddb550 /src/backend/optimizer/path/costsize.c
parent944d3c395e292c213c1a2be617af1b8473299b1b (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.c18
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;