diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 1999-09-26 21:21:15 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 1999-09-26 21:21:15 +0000 |
commit | be09bc9ff2e49f0d303bd4f26ce4c9de631b14bd (patch) | |
tree | 2b5c2d41ce4ab211b8b1af90d92e4befb2dd066c /src/backend/utils/adt/float.c | |
parent | 40f65241614deac2dda82c13e7228d132ee73153 (diff) | |
download | postgresql-be09bc9ff2e49f0d303bd4f26ce4c9de631b14bd.tar.gz postgresql-be09bc9ff2e49f0d303bd4f26ce4c9de631b14bd.zip |
Modify nodeAgg.c so that no rows are returned for a GROUP BY
with no input rows, per pghackers discussions around 7/22/99. Clean up
a bunch of ugly coding while at it; remove redundant re-lookup of
aggregate info at start of each new GROUP. Arrange to pfree intermediate
values when they are pass-by-ref types, so that aggregates on pass-by-ref
types no longer eat memory. This takes care of a couple of TODO items...
Diffstat (limited to 'src/backend/utils/adt/float.c')
-rw-r--r-- | src/backend/utils/adt/float.c | 41 |
1 files changed, 23 insertions, 18 deletions
diff --git a/src/backend/utils/adt/float.c b/src/backend/utils/adt/float.c index 97b2065cd40..2ce5a92598b 100644 --- a/src/backend/utils/adt/float.c +++ b/src/backend/utils/adt/float.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/float.c,v 1.48 1999/09/21 20:58:25 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/float.c,v 1.49 1999/09/26 21:21:15 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -540,22 +540,25 @@ float4div(float32 arg1, float32 arg2) CheckFloat4Val(val); result = (float32) palloc(sizeof(float32data)); - *result = *arg1 / *arg2; + *result = val; return result; } float32 float4inc(float32 arg1) { + float32 result; double val; if (!arg1) return (float32) NULL; val = *arg1 + (float32data) 1.0; + CheckFloat4Val(val); - *arg1 = val; - return arg1; + result = (float32) palloc(sizeof(float32data)); + *result = val; + return result; } /* @@ -639,6 +642,7 @@ float8div(float64 arg1, float64 arg2) float64 float8inc(float64 arg1) { + float64 result; double val; if (!arg1) @@ -646,8 +650,9 @@ float8inc(float64 arg1) val = *arg1 + (float64data) 1.0; CheckFloat8Val(val); - *arg1 = val; - return arg1; + result = (float64) palloc(sizeof(float64data)); + *result = val; + return result; } @@ -1388,7 +1393,7 @@ float48eq(float32 arg1, float64 arg2) if (!arg1 || !arg2) return 0; - return *arg1 == (float) *arg2; + return *arg1 == *arg2; } bool @@ -1397,7 +1402,7 @@ float48ne(float32 arg1, float64 arg2) if (!arg1 || !arg2) return 0; - return *arg1 != (float) *arg2; + return *arg1 != *arg2; } bool @@ -1406,7 +1411,7 @@ float48lt(float32 arg1, float64 arg2) if (!arg1 || !arg2) return 0; - return *arg1 < (float) *arg2; + return *arg1 < *arg2; } bool @@ -1415,7 +1420,7 @@ float48le(float32 arg1, float64 arg2) if (!arg1 || !arg2) return 0; - return *arg1 <= (float) *arg2; + return *arg1 <= *arg2; } bool @@ -1424,7 +1429,7 @@ float48gt(float32 arg1, float64 arg2) if (!arg1 || !arg2) return 0; - return *arg1 > (float) *arg2; + return *arg1 > *arg2; } bool @@ -1433,7 +1438,7 @@ float48ge(float32 arg1, float64 arg2) if (!arg1 || !arg2) return 0; - return *arg1 >= (float) *arg2; + return *arg1 >= *arg2; } /* @@ -1445,7 +1450,7 @@ float84eq(float64 arg1, float32 arg2) if (!arg1 || !arg2) return 0; - return (float) *arg1 == *arg2; + return *arg1 == *arg2; } bool @@ -1454,7 +1459,7 @@ float84ne(float64 arg1, float32 arg2) if (!arg1 || !arg2) return 0; - return (float) *arg1 != *arg2; + return *arg1 != *arg2; } bool @@ -1463,7 +1468,7 @@ float84lt(float64 arg1, float32 arg2) if (!arg1 || !arg2) return 0; - return (float) *arg1 < *arg2; + return *arg1 < *arg2; } bool @@ -1472,7 +1477,7 @@ float84le(float64 arg1, float32 arg2) if (!arg1 || !arg2) return 0; - return (float) *arg1 <= *arg2; + return *arg1 <= *arg2; } bool @@ -1481,7 +1486,7 @@ float84gt(float64 arg1, float32 arg2) if (!arg1 || !arg2) return 0; - return (float) *arg1 > *arg2; + return *arg1 > *arg2; } bool @@ -1490,7 +1495,7 @@ float84ge(float64 arg1, float32 arg2) if (!arg1 || !arg2) return 0; - return (float) *arg1 >= *arg2; + return *arg1 >= *arg2; } /* ========== PRIVATE ROUTINES ========== */ |