diff --git a/src/backend/commands/variable.c b/src/backend/commands/variable.c index d7e730544b03902e1e1583a835f906cd008a17c3..a70dfcad9bb48e5027b911ad4221cd3e81476bc5 100644 --- a/src/backend/commands/variable.c +++ b/src/backend/commands/variable.c @@ -9,7 +9,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/commands/variable.c,v 1.39 2000/07/14 15:35:44 thomas Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/variable.c,v 1.40 2000/08/01 18:29:29 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -566,7 +566,7 @@ parse_random_seed(char *value) else { sscanf(value, "%lf", &seed); - setseed(&seed); + DirectFunctionCall1(setseed, Float8GetDatum(seed)); } return (TRUE); } @@ -583,7 +583,7 @@ reset_random_seed(void) { double seed = 0.5; - setseed(&seed); + DirectFunctionCall1(setseed, Float8GetDatum(seed)); return (TRUE); } diff --git a/src/backend/utils/adt/cash.c b/src/backend/utils/adt/cash.c index b85f37942c1dd5b79d40582a9e610cc21916f84d..e1a68940a84446d0eb22d171d0b988749b9cab90 100644 --- a/src/backend/utils/adt/cash.c +++ b/src/backend/utils/adt/cash.c @@ -9,7 +9,7 @@ * workings can be found in the book "Software Solutions in C" by * Dale Schumacher, Academic Press, ISBN: 0-12-632360-7. * - * $Header: /cvsroot/pgsql/src/backend/utils/adt/cash.c,v 1.43 2000/07/07 18:49:52 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/cash.c,v 1.44 2000/08/01 18:29:35 tgl Exp $ */ #include <limits.h> @@ -425,31 +425,31 @@ cash_mi(Cash *c1, Cash *c2) /* cash_mul_flt8() * Multiply cash by float8. */ -Cash * -cash_mul_flt8(Cash *c, float8 *f) +Datum +cash_mul_flt8(PG_FUNCTION_ARGS) { - Cash *result; - - if (!PointerIsValid(f) || !PointerIsValid(c)) - return NULL; - - if (!PointerIsValid(result = palloc(sizeof(Cash)))) - elog(ERROR, "Memory allocation failed, can't multiply cash"); - - *result = ((*f) * (*c)); + Cash c = PG_GETARG_CASH(0); + float8 f = PG_GETARG_FLOAT8(1); + Cash result; - return result; -} /* cash_mul_flt8() */ + result = c * f; + PG_RETURN_CASH(result); +} /* flt8_mul_cash() * Multiply float8 by cash. */ -Cash * -flt8_mul_cash(float8 *f, Cash *c) +Datum +flt8_mul_cash(PG_FUNCTION_ARGS) { - return cash_mul_flt8(c, f); -} /* flt8_mul_cash() */ + float8 f = PG_GETARG_FLOAT8(0); + Cash c = PG_GETARG_CASH(1); + Cash result; + + result = f * c; + PG_RETURN_CASH(result); +} /* cash_div_flt8() @@ -458,53 +458,48 @@ flt8_mul_cash(float8 *f, Cash *c) * XXX Don't know if rounding or truncating is correct behavior. * Round for now. - tgl 97/04/15 */ -Cash * -cash_div_flt8(Cash *c, float8 *f) +Datum +cash_div_flt8(PG_FUNCTION_ARGS) { - Cash *result; - - if (!PointerIsValid(f) || !PointerIsValid(c)) - return NULL; - - if (!PointerIsValid(result = palloc(sizeof(Cash)))) - elog(ERROR, "Memory allocation failed, can't divide cash"); + Cash c = PG_GETARG_CASH(0); + float8 f = PG_GETARG_FLOAT8(1); + Cash result; - if (*f == 0.0) + if (f == 0.0) elog(ERROR, "cash_div: divide by 0.0 error"); - *result = rint(*c / *f); - - return result; -} /* cash_div_flt8() */ + result = rint(c / f); + PG_RETURN_CASH(result); +} /* cash_mul_flt4() * Multiply cash by float4. */ -Cash * -cash_mul_flt4(Cash *c, float4 *f) +Datum +cash_mul_flt4(PG_FUNCTION_ARGS) { - Cash *result; - - if (!PointerIsValid(f) || !PointerIsValid(c)) - return NULL; - - if (!PointerIsValid(result = palloc(sizeof(Cash)))) - elog(ERROR, "Memory allocation failed, can't multiply cash"); - - *result = ((*f) * (*c)); + Cash c = PG_GETARG_CASH(0); + float4 f = PG_GETARG_FLOAT4(1); + Cash result; - return result; -} /* cash_mul_flt4() */ + result = c * f; + PG_RETURN_CASH(result); +} /* flt4_mul_cash() - * Multiply float4 by float4. + * Multiply float4 by cash. */ -Cash * -flt4_mul_cash(float4 *f, Cash *c) +Datum +flt4_mul_cash(PG_FUNCTION_ARGS) { - return cash_mul_flt4(c, f); -} /* flt4_mul_cash() */ + float4 f = PG_GETARG_FLOAT4(0); + Cash c = PG_GETARG_CASH(1); + Cash result; + + result = f * c; + PG_RETURN_CASH(result); +} /* cash_div_flt4() @@ -513,24 +508,19 @@ flt4_mul_cash(float4 *f, Cash *c) * XXX Don't know if rounding or truncating is correct behavior. * Round for now. - tgl 97/04/15 */ -Cash * -cash_div_flt4(Cash *c, float4 *f) +Datum +cash_div_flt4(PG_FUNCTION_ARGS) { - Cash *result; - - if (!PointerIsValid(f) || !PointerIsValid(c)) - return NULL; - - if (!PointerIsValid(result = palloc(sizeof(Cash)))) - elog(ERROR, "Memory allocation failed, can't divide cash"); + Cash c = PG_GETARG_CASH(0); + float4 f = PG_GETARG_FLOAT4(1); + Cash result; - if (*f == 0.0) + if (f == 0.0) elog(ERROR, "cash_div: divide by 0.0 error"); - *result = rint(*c / *f); - - return result; -} /* cash_div_flt4() */ + result = rint(c / f); + PG_RETURN_CASH(result); +} /* cash_mul_int4() diff --git a/src/backend/utils/adt/float.c b/src/backend/utils/adt/float.c index 940724ab05f23ffde190e51bc9846a088ba408be..54735191a9f2fdffbe09773f658839fd236147cb 100644 --- a/src/backend/utils/adt/float.c +++ b/src/backend/utils/adt/float.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/float.c,v 1.66 2000/07/28 02:13:31 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/float.c,v 1.67 2000/08/01 18:29:35 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -54,7 +54,6 @@ #include "postgres.h" #include <limits.h> - /* for finite() on Solaris */ #ifdef HAVE_IEEEFP_H # include <ieeefp.h> @@ -64,24 +63,6 @@ #include "utils/array.h" #include "utils/builtins.h" -static void CheckFloat8Val(double val); - -#ifndef NAN -#define NAN (0.0/0.0) -#endif - -#ifndef SHRT_MAX -#define SHRT_MAX 32767 -#endif -#ifndef SHRT_MIN -#define SHRT_MIN (-32768) -#endif - -#define FORMAT 'g' /* use "g" output format as standard - * format */ -/* not sure what the following should be, but better to make it over-sufficient */ -#define MAXFLOATWIDTH 64 -#define MAXDOUBLEWIDTH 128 #if !(NeXT && NX_CURRENT_COMPILER_RELEASE > NX_COMPILER_RELEASE_3_2) /* NS3.3 has conflicting declarations of these in <math.h> */ @@ -110,6 +91,32 @@ extern double rint(double x); #endif /* NeXT check */ + +static void CheckFloat4Val(double val); +static void CheckFloat8Val(double val); + +#ifndef M_PI +/* from my RH5.2 gcc math.h file - thomas 2000-04-03 */ +#define M_PI 3.14159265358979323846 +#endif + +#ifndef NAN +#define NAN (0.0/0.0) +#endif + +#ifndef SHRT_MAX +#define SHRT_MAX 32767 +#endif +#ifndef SHRT_MIN +#define SHRT_MIN (-32768) +#endif + +#define FORMAT 'g' /* use "g" output format as standard + * format */ +/* not sure what the following should be, but better to make it over-sufficient */ +#define MAXFLOATWIDTH 64 +#define MAXDOUBLEWIDTH 128 + /* ========== USER I/O ROUTINES ========== */ @@ -176,10 +183,10 @@ CheckFloat8Val(double val) * where <sp> is a space, digit is 0-9, * <exp> is "e" or "E" followed by an integer. */ -float32 -float4in(char *num) +Datum +float4in(PG_FUNCTION_ARGS) { - float32 result = (float32) palloc(sizeof(float32data)); + char *num = PG_GETARG_CSTRING(0); double val; char *endptr; @@ -200,30 +207,25 @@ float4in(char *num) * if we get here, we have a legal double, still need to check to see * if it's a legal float */ - CheckFloat4Val(val); - *result = val; - return result; + PG_RETURN_FLOAT4((float4) val); } /* * float4out - converts a float4 number to a string * using a standard output format */ -char * -float4out(float32 num) +Datum +float4out(PG_FUNCTION_ARGS) { + float4 num = PG_GETARG_FLOAT4(0); char *ascii = (char *) palloc(MAXFLOATWIDTH + 1); - if (!num) - return strcpy(ascii, "(null)"); - - sprintf(ascii, "%.*g", FLT_DIG, *num); - return ascii; + sprintf(ascii, "%.*g", FLT_DIG, num); + PG_RETURN_CSTRING(ascii); } - /* * float8in - converts "num" to float8 * restricted syntax: @@ -231,10 +233,10 @@ float4out(float32 num) * where <sp> is a space, digit is 0-9, * <exp> is "e" or "E" followed by an integer. */ -float64 -float8in(char *num) +Datum +float8in(PG_FUNCTION_ARGS) { - float64 result = (float64) palloc(sizeof(float64data)); + char *num = PG_GETARG_CSTRING(0); double val; char *endptr; @@ -257,8 +259,7 @@ float8in(char *num) CheckFloat8Val(val); - *result = val; - return result; + PG_RETURN_FLOAT8(val); } @@ -266,21 +267,19 @@ float8in(char *num) * float8out - converts float8 number to a string * using a standard output format */ -char * -float8out(float64 num) +Datum +float8out(PG_FUNCTION_ARGS) { + float8 num = PG_GETARG_FLOAT8(0); char *ascii = (char *) palloc(MAXDOUBLEWIDTH + 1); - if (!num) - return strcpy(ascii, "(null)"); + if (isnan(num)) + PG_RETURN_CSTRING(strcpy(ascii, "NaN")); + if (isinf(num)) + PG_RETURN_CSTRING(strcpy(ascii, "Infinity")); - if (isnan(*num)) - return strcpy(ascii, "NaN"); - if (isinf(*num)) - return strcpy(ascii, "Infinity"); - - sprintf(ascii, "%.*g", DBL_DIG, *num); - return ascii; + sprintf(ascii, "%.*g", DBL_DIG, num); + PG_RETURN_CSTRING(ascii); } /* ========== PUBLIC ROUTINES ========== */ @@ -293,72 +292,47 @@ float8out(float64 num) */ /* - * float4abs - returns a pointer to |arg1| (absolute value) + * float4abs - returns |arg1| (absolute value) */ -float32 -float4abs(float32 arg1) +Datum +float4abs(PG_FUNCTION_ARGS) { - float32 result; - double val; - - if (!arg1) - return (float32) NULL; - - val = fabs(*arg1); + float4 arg1 = PG_GETARG_FLOAT4(0); - CheckFloat4Val(val); - - result = (float32) palloc(sizeof(float32data)); - *result = val; - return result; + PG_RETURN_FLOAT4((float4) fabs(arg1)); } /* - * float4um - returns a pointer to -arg1 (unary minus) + * float4um - returns -arg1 (unary minus) */ -float32 -float4um(float32 arg1) +Datum +float4um(PG_FUNCTION_ARGS) { - float32 result; - double val; - - if (!arg1) - return (float32) NULL; + float4 arg1 = PG_GETARG_FLOAT4(0); - val = ((*arg1 != 0) ? -(*arg1) : *arg1); - CheckFloat4Val(val); - - result = (float32) palloc(sizeof(float32data)); - *result = val; - return result; + PG_RETURN_FLOAT4((float4) -arg1); } -float32 -float4larger(float32 arg1, float32 arg2) +Datum +float4larger(PG_FUNCTION_ARGS) { - float32 result; - - if (!arg1 || !arg2) - return (float32) NULL; - - result = (float32) palloc(sizeof(float32data)); + float4 arg1 = PG_GETARG_FLOAT4(0); + float4 arg2 = PG_GETARG_FLOAT4(1); + float4 result; - *result = ((*arg1 > *arg2) ? *arg1 : *arg2); - return result; + result = ((arg1 > arg2) ? arg1 : arg2); + PG_RETURN_FLOAT4(result); } -float32 -float4smaller(float32 arg1, float32 arg2) +Datum +float4smaller(PG_FUNCTION_ARGS) { - float32 result; - - if (!arg1 || !arg2) - return (float32) NULL; - - result = (float32) palloc(sizeof(float32data)); + float4 arg1 = PG_GETARG_FLOAT4(0); + float4 arg2 = PG_GETARG_FLOAT4(1); + float4 result; - *result = ((*arg1 > *arg2) ? *arg2 : *arg1); - return result; + result = ((arg1 < arg2) ? arg1 : arg2); + PG_RETURN_FLOAT4(result); } /* @@ -368,72 +342,58 @@ float4smaller(float32 arg1, float32 arg2) */ /* - * float8abs - returns a pointer to |arg1| (absolute value) + * float8abs - returns |arg1| (absolute value) */ -float64 -float8abs(float64 arg1) +Datum +float8abs(PG_FUNCTION_ARGS) { - float64 result; - double val; - - if (!arg1) - return (float64) NULL; + float8 arg1 = PG_GETARG_FLOAT8(0); + float8 result; - result = (float64) palloc(sizeof(float64data)); + result = fabs(arg1); - val = fabs(*arg1); - CheckFloat8Val(val); - *result = val; - return result; + CheckFloat8Val(result); + PG_RETURN_FLOAT8(result); } /* - * float8um - returns a pointer to -arg1 (unary minus) + * float8um - returns -arg1 (unary minus) */ -float64 -float8um(float64 arg1) +Datum +float8um(PG_FUNCTION_ARGS) { - float64 result; - double val; - - if (!arg1) - return (float64) NULL; + float8 arg1 = PG_GETARG_FLOAT8(0); + float8 result; - val = ((*arg1 != 0) ? -(*arg1) : *arg1); + result = ((arg1 != 0) ? -(arg1) : arg1); - CheckFloat8Val(val); - result = (float64) palloc(sizeof(float64data)); - *result = val; - return result; + CheckFloat8Val(result); + PG_RETURN_FLOAT8(result); } -float64 -float8larger(float64 arg1, float64 arg2) +Datum +float8larger(PG_FUNCTION_ARGS) { - float64 result; - - if (!arg1 || !arg2) - return (float64) NULL; + float8 arg1 = PG_GETARG_FLOAT8(0); + float8 arg2 = PG_GETARG_FLOAT8(1); + float8 result; - result = (float64) palloc(sizeof(float64data)); + result = ((arg1 > arg2) ? arg1 : arg2); - *result = ((*arg1 > *arg2) ? *arg1 : *arg2); - return result; + PG_RETURN_FLOAT8(result); } -float64 -float8smaller(float64 arg1, float64 arg2) +Datum +float8smaller(PG_FUNCTION_ARGS) { - float64 result; - - if (!arg1 || !arg2) - return (float64) NULL; + float8 arg1 = PG_GETARG_FLOAT8(0); + float8 arg2 = PG_GETARG_FLOAT8(1); + float8 result; - result = (float64) palloc(sizeof(float64data)); + result = ((arg1 < arg2) ? arg1 : arg2); - *result = ((*arg1 > *arg2) ? *arg2 : *arg1); - return result; + PG_RETURN_FLOAT8(result); } @@ -444,158 +404,123 @@ float8smaller(float64 arg1, float64 arg2) */ /* - * float4pl - returns a pointer to arg1 + arg2 - * float4mi - returns a pointer to arg1 - arg2 - * float4mul - returns a pointer to arg1 * arg2 - * float4div - returns a pointer to arg1 / arg2 + * float4pl - returns arg1 + arg2 + * float4mi - returns arg1 - arg2 + * float4mul - returns arg1 * arg2 + * float4div - returns arg1 / arg2 */ -float32 -float4pl(float32 arg1, float32 arg2) +Datum +float4pl(PG_FUNCTION_ARGS) { - float32 result; - double val; - - if (!arg1 || !arg2) - return (float32) NULL; - - val = *arg1 + *arg2; - CheckFloat4Val(val); - - result = (float32) palloc(sizeof(float32data)); - *result = val; + float4 arg1 = PG_GETARG_FLOAT4(0); + float4 arg2 = PG_GETARG_FLOAT4(1); + double result; - return result; + result = arg1 + arg2; + CheckFloat4Val(result); + PG_RETURN_FLOAT4((float4) result); } -float32 -float4mi(float32 arg1, float32 arg2) +Datum +float4mi(PG_FUNCTION_ARGS) { - float32 result; - double val; - - if (!arg1 || !arg2) - return (float32) NULL; - - val = *arg1 - *arg2; + float4 arg1 = PG_GETARG_FLOAT4(0); + float4 arg2 = PG_GETARG_FLOAT4(1); + double result; - CheckFloat4Val(val); - result = (float32) palloc(sizeof(float32data)); - *result = val; - return result; + result = arg1 - arg2; + CheckFloat4Val(result); + PG_RETURN_FLOAT4((float4) result); } -float32 -float4mul(float32 arg1, float32 arg2) +Datum +float4mul(PG_FUNCTION_ARGS) { - float32 result; - double val; - - if (!arg1 || !arg2) - return (float32) NULL; - - val = *arg1 * *arg2; + float4 arg1 = PG_GETARG_FLOAT4(0); + float4 arg2 = PG_GETARG_FLOAT4(1); + double result; - CheckFloat4Val(val); - result = (float32) palloc(sizeof(float32data)); - *result = val; - return result; + result = arg1 * arg2; + CheckFloat4Val(result); + PG_RETURN_FLOAT4((float4) result); } -float32 -float4div(float32 arg1, float32 arg2) +Datum +float4div(PG_FUNCTION_ARGS) { - float32 result; - double val; + float4 arg1 = PG_GETARG_FLOAT4(0); + float4 arg2 = PG_GETARG_FLOAT4(1); + double result; - if (!arg1 || !arg2) - return (float32) NULL; - - if (*arg2 == 0.0) + if (arg2 == 0.0) elog(ERROR, "float4div: divide by zero error"); - val = *arg1 / *arg2; + /* Do division in float8, then check for overflow */ + result = (float8) arg1 / (float8) arg2; - CheckFloat4Val(val); - result = (float32) palloc(sizeof(float32data)); - *result = val; - return result; + CheckFloat4Val(result); + PG_RETURN_FLOAT4((float4) result); } /* - * float8pl - returns a pointer to arg1 + arg2 - * float8mi - returns a pointer to arg1 - arg2 - * float8mul - returns a pointer to arg1 * arg2 - * float8div - returns a pointer to arg1 / arg2 + * float8pl - returns arg1 + arg2 + * float8mi - returns arg1 - arg2 + * float8mul - returns arg1 * arg2 + * float8div - returns arg1 / arg2 */ -float64 -float8pl(float64 arg1, float64 arg2) +Datum +float8pl(PG_FUNCTION_ARGS) { - float64 result; - double val; - - if (!arg1 || !arg2) - return (float64) NULL; + float8 arg1 = PG_GETARG_FLOAT8(0); + float8 arg2 = PG_GETARG_FLOAT8(1); + float8 result; - result = (float64) palloc(sizeof(float64data)); + result = arg1 + arg2; - val = *arg1 + *arg2; - CheckFloat8Val(val); - *result = val; - return result; + CheckFloat8Val(result); + PG_RETURN_FLOAT8(result); } -float64 -float8mi(float64 arg1, float64 arg2) +Datum +float8mi(PG_FUNCTION_ARGS) { - float64 result; - double val; - - if (!arg1 || !arg2) - return (float64) NULL; + float8 arg1 = PG_GETARG_FLOAT8(0); + float8 arg2 = PG_GETARG_FLOAT8(1); + float8 result; - result = (float64) palloc(sizeof(float64data)); + result = arg1 - arg2; - val = *arg1 - *arg2; - CheckFloat8Val(val); - *result = val; - return result; + CheckFloat8Val(result); + PG_RETURN_FLOAT8(result); } -float64 -float8mul(float64 arg1, float64 arg2) +Datum +float8mul(PG_FUNCTION_ARGS) { - float64 result; - double val; - - if (!arg1 || !arg2) - return (float64) NULL; + float8 arg1 = PG_GETARG_FLOAT8(0); + float8 arg2 = PG_GETARG_FLOAT8(1); + float8 result; - result = (float64) palloc(sizeof(float64data)); + result = arg1 * arg2; - val = *arg1 * *arg2; - CheckFloat8Val(val); - *result = val; - return result; + CheckFloat8Val(result); + PG_RETURN_FLOAT8(result); } -float64 -float8div(float64 arg1, float64 arg2) +Datum +float8div(PG_FUNCTION_ARGS) { - float64 result; - double val; - - if (!arg1 || !arg2) - return (float64) NULL; - - result = (float64) palloc(sizeof(float64data)); + float8 arg1 = PG_GETARG_FLOAT8(0); + float8 arg2 = PG_GETARG_FLOAT8(1); + float8 result; - if (*arg2 == 0.0) + if (arg2 == 0.0) elog(ERROR, "float8div: divide by zero error"); - val = *arg1 / *arg2; - CheckFloat8Val(val); - *result = val; - return result; + result = arg1 / arg2; + + CheckFloat8Val(result); + PG_RETURN_FLOAT8(result); } @@ -608,115 +533,115 @@ float8div(float64 arg1, float64 arg2) /* * float4{eq,ne,lt,le,gt,ge} - float4/float4 comparison operations */ -bool -float4eq(float32 arg1, float32 arg2) +Datum +float4eq(PG_FUNCTION_ARGS) { - if (!arg1 || !arg2) - return 0; + float4 arg1 = PG_GETARG_FLOAT4(0); + float4 arg2 = PG_GETARG_FLOAT4(1); - return *arg1 == *arg2; + PG_RETURN_BOOL(arg1 == arg2); } -bool -float4ne(float32 arg1, float32 arg2) +Datum +float4ne(PG_FUNCTION_ARGS) { - if (!arg1 || !arg2) - return 0; + float4 arg1 = PG_GETARG_FLOAT4(0); + float4 arg2 = PG_GETARG_FLOAT4(1); - return *arg1 != *arg2; + PG_RETURN_BOOL(arg1 != arg2); } -bool -float4lt(float32 arg1, float32 arg2) +Datum +float4lt(PG_FUNCTION_ARGS) { - if (!arg1 || !arg2) - return 0; + float4 arg1 = PG_GETARG_FLOAT4(0); + float4 arg2 = PG_GETARG_FLOAT4(1); - return *arg1 < *arg2; + PG_RETURN_BOOL(arg1 < arg2); } -bool -float4le(float32 arg1, float32 arg2) +Datum +float4le(PG_FUNCTION_ARGS) { - if (!arg1 || !arg2) - return 0; + float4 arg1 = PG_GETARG_FLOAT4(0); + float4 arg2 = PG_GETARG_FLOAT4(1); - return *arg1 <= *arg2; + PG_RETURN_BOOL(arg1 <= arg2); } -bool -float4gt(float32 arg1, float32 arg2) +Datum +float4gt(PG_FUNCTION_ARGS) { - if (!arg1 || !arg2) - return 0; + float4 arg1 = PG_GETARG_FLOAT4(0); + float4 arg2 = PG_GETARG_FLOAT4(1); - return *arg1 > *arg2; + PG_RETURN_BOOL(arg1 > arg2); } -bool -float4ge(float32 arg1, float32 arg2) +Datum +float4ge(PG_FUNCTION_ARGS) { - if (!arg1 || !arg2) - return 0; + float4 arg1 = PG_GETARG_FLOAT4(0); + float4 arg2 = PG_GETARG_FLOAT4(1); - return *arg1 >= *arg2; + PG_RETURN_BOOL(arg1 >= arg2); } /* * float8{eq,ne,lt,le,gt,ge} - float8/float8 comparison operations */ -bool -float8eq(float64 arg1, float64 arg2) +Datum +float8eq(PG_FUNCTION_ARGS) { - if (!arg1 || !arg2) - return 0; + float8 arg1 = PG_GETARG_FLOAT8(0); + float8 arg2 = PG_GETARG_FLOAT8(1); - return *arg1 == *arg2; + PG_RETURN_BOOL(arg1 == arg2); } -bool -float8ne(float64 arg1, float64 arg2) +Datum +float8ne(PG_FUNCTION_ARGS) { - if (!arg1 || !arg2) - return 0; + float8 arg1 = PG_GETARG_FLOAT8(0); + float8 arg2 = PG_GETARG_FLOAT8(1); - return *arg1 != *arg2; + PG_RETURN_BOOL(arg1 != arg2); } -bool -float8lt(float64 arg1, float64 arg2) +Datum +float8lt(PG_FUNCTION_ARGS) { - if (!arg1 || !arg2) - return 0; + float8 arg1 = PG_GETARG_FLOAT8(0); + float8 arg2 = PG_GETARG_FLOAT8(1); - return *arg1 < *arg2; + PG_RETURN_BOOL(arg1 < arg2); } -bool -float8le(float64 arg1, float64 arg2) +Datum +float8le(PG_FUNCTION_ARGS) { - if (!arg1 || !arg2) - return 0; + float8 arg1 = PG_GETARG_FLOAT8(0); + float8 arg2 = PG_GETARG_FLOAT8(1); - return *arg1 <= *arg2; + PG_RETURN_BOOL(arg1 <= arg2); } -bool -float8gt(float64 arg1, float64 arg2) +Datum +float8gt(PG_FUNCTION_ARGS) { - if (!arg1 || !arg2) - return 0; + float8 arg1 = PG_GETARG_FLOAT8(0); + float8 arg2 = PG_GETARG_FLOAT8(1); - return *arg1 > *arg2; + PG_RETURN_BOOL(arg1 > arg2); } -bool -float8ge(float64 arg1, float64 arg2) +Datum +float8ge(PG_FUNCTION_ARGS) { - if (!arg1 || !arg2) - return 0; + float8 arg1 = PG_GETARG_FLOAT8(0); + float8 arg2 = PG_GETARG_FLOAT8(1); - return *arg1 >= *arg2; + PG_RETURN_BOOL(arg1 >= arg2); } @@ -729,57 +654,43 @@ float8ge(float64 arg1, float64 arg2) /* * ftod - converts a float4 number to a float8 number */ -float64 -ftod(float32 num) +Datum +ftod(PG_FUNCTION_ARGS) { - float64 result; - - if (!num) - return (float64) NULL; - - result = (float64) palloc(sizeof(float64data)); + float4 num = PG_GETARG_FLOAT4(0); - *result = *num; - return result; + PG_RETURN_FLOAT8((float8) num); } /* * dtof - converts a float8 number to a float4 number */ -float32 -dtof(float64 num) +Datum +dtof(PG_FUNCTION_ARGS) { - float32 result; - - if (!num) - return (float32) NULL; - - CheckFloat4Val(*num); + float8 num = PG_GETARG_FLOAT8(0); - result = (float32) palloc(sizeof(float32data)); + CheckFloat4Val(num); - *result = *num; - return result; + PG_RETURN_FLOAT4((float4) num); } /* * dtoi4 - converts a float8 number to an int4 number */ -int32 -dtoi4(float64 num) +Datum +dtoi4(PG_FUNCTION_ARGS) { + float8 num = PG_GETARG_FLOAT8(0); int32 result; - if (!num) - return 0; /* fmgr will return NULL anyway */ - - if ((*num < INT_MIN) || (*num > INT_MAX)) + if ((num < INT_MIN) || (num > INT_MAX)) elog(ERROR, "dtoi4: integer out of range"); - result = rint(*num); - return result; + result = (int32) rint(num); + PG_RETURN_INT32(result); } @@ -829,21 +740,19 @@ i2tod(PG_FUNCTION_ARGS) /* - * ftoi4 - converts a float8 number to an int4 number + * ftoi4 - converts a float4 number to an int4 number */ -int32 -ftoi4(float32 num) +Datum +ftoi4(PG_FUNCTION_ARGS) { + float4 num = PG_GETARG_FLOAT4(0); int32 result; - if (!num) - return 0; /* fmgr will return NULL anyway */ - - if ((*num < INT_MIN) || (*num > INT_MAX)) + if ((num < INT_MIN) || (num > INT_MAX)) elog(ERROR, "ftoi4: integer out of range"); - result = rint(*num); - return result; + result = (int32) rint(num); + PG_RETURN_INT32(result); } @@ -903,7 +812,9 @@ float8_text(PG_FUNCTION_ARGS) int len; char *str; - str = float8out(&num); /* XXX temporary hack */ + str = DatumGetCString(DirectFunctionCall1(float8out, + Float8GetDatum(num))); + len = strlen(str) + VARHDRSZ; result = (text *) palloc(len); @@ -924,7 +835,7 @@ Datum text_float8(PG_FUNCTION_ARGS) { text *string = PG_GETARG_TEXT_P(0); - float64 result; + Datum result; int len; char *str; @@ -933,11 +844,11 @@ text_float8(PG_FUNCTION_ARGS) memcpy(str, VARDATA(string), len); *(str + len) = '\0'; - result = float8in(str); + result = DirectFunctionCall1(float8in, CStringGetDatum(str)); pfree(str); - return PointerGetDatum(result); + PG_RETURN_DATUM(result); } @@ -952,7 +863,9 @@ float4_text(PG_FUNCTION_ARGS) int len; char *str; - str = float4out(&num); /* XXX temporary hack */ + str = DatumGetCString(DirectFunctionCall1(float4out, + Float4GetDatum(num))); + len = strlen(str) + VARHDRSZ; result = (text *) palloc(len); @@ -973,7 +886,7 @@ Datum text_float4(PG_FUNCTION_ARGS) { text *string = PG_GETARG_TEXT_P(0); - float32 result; + Datum result; int len; char *str; @@ -982,11 +895,11 @@ text_float4(PG_FUNCTION_ARGS) memcpy(str, VARDATA(string), len); *(str + len) = '\0'; - result = float4in(str); + result = DirectFunctionCall1(float4in, CStringGetDatum(str)); pfree(str); - return PointerGetDatum(result); + PG_RETURN_DATUM(result); } @@ -997,143 +910,111 @@ text_float4(PG_FUNCTION_ARGS) */ /* - * dround - returns a pointer to ROUND(arg1) + * dround - returns ROUND(arg1) */ -float64 -dround(float64 arg1) +Datum +dround(PG_FUNCTION_ARGS) { - float64 result; - double tmp; - - if (!arg1) - return (float64) NULL; + float8 arg1 = PG_GETARG_FLOAT8(0); + float8 result; - result = (float64) palloc(sizeof(float64data)); + result = rint(arg1); - tmp = *arg1; - *result = (float64data) rint(tmp); - return result; + PG_RETURN_FLOAT8(result); } /* - * dtrunc - returns a pointer to truncation of arg1, - * arg1 >= 0 ... the greatest integer as float8 less + * dtrunc - returns truncation-towards-zero of arg1, + * arg1 >= 0 ... the greatest integer less * than or equal to arg1 - * arg1 < 0 ... the greatest integer as float8 greater + * arg1 < 0 ... the least integer greater * than or equal to arg1 */ -float64 -dtrunc(float64 arg1) +Datum +dtrunc(PG_FUNCTION_ARGS) { - float64 result; - double tmp; - - if (!arg1) - return (float64) NULL; - - result = (float64) palloc(sizeof(float64data)); + float8 arg1 = PG_GETARG_FLOAT8(0); + float8 result; - tmp = *arg1; - if (*arg1 >= 0) - *result = (float64data) floor(tmp); + if (arg1 >= 0) + result = floor(arg1); else - *result = (float64data) -(floor(-tmp)); - return result; + result = -floor(-arg1); + + PG_RETURN_FLOAT8(result); } /* - * dsqrt - returns a pointer to square root of arg1 + * dsqrt - returns square root of arg1 */ -float64 -dsqrt(float64 arg1) +Datum +dsqrt(PG_FUNCTION_ARGS) { - float64 result; - double tmp; + float8 arg1 = PG_GETARG_FLOAT8(0); + float8 result; - if (!arg1) - return (float64) NULL; + if (arg1 < 0) + elog(ERROR, "can't take sqrt of a negative number"); - result = (float64) palloc(sizeof(float64data)); + result = sqrt(arg1); - tmp = *arg1; - *result = (float64data) sqrt(tmp); - return result; + CheckFloat8Val(result); + PG_RETURN_FLOAT8(result); } /* - * dcbrt - returns a pointer to cube root of arg1 + * dcbrt - returns cube root of arg1 */ -float64 -dcbrt(float64 arg1) +Datum +dcbrt(PG_FUNCTION_ARGS) { - float64 result; - double tmp; - - if (!arg1) - return (float64) NULL; - - result = (float64) palloc(sizeof(float64data)); + float8 arg1 = PG_GETARG_FLOAT8(0); + float8 result; - tmp = *arg1; - *result = (float64data) cbrt(tmp); - return result; + result = cbrt(arg1); + PG_RETURN_FLOAT8(result); } /* - * dpow - returns a pointer to pow(arg1,arg2) + * dpow - returns pow(arg1,arg2) */ -float64 -dpow(float64 arg1, float64 arg2) +Datum +dpow(PG_FUNCTION_ARGS) { - float64 result; - double tmp1, - tmp2; - - if (!arg1 || !arg2) - return (float64) NULL; - - result = (float64) palloc(sizeof(float64data)); - - tmp1 = *arg1; - tmp2 = *arg2; + float8 arg1 = PG_GETARG_FLOAT8(0); + float8 arg2 = PG_GETARG_FLOAT8(1); + float8 result; /* * We must check both for errno getting set and for a NaN result, in * order to deal with the vagaries of different platforms... */ errno = 0; - *result = (float64data) pow(tmp1, tmp2); + result = pow(arg1, arg2); if (errno != 0 #ifdef HAVE_FINITE - || !finite(*result) + || !finite(result) #endif ) elog(ERROR, "pow() result is out of range"); - CheckFloat8Val(*result); - return result; + CheckFloat8Val(result); + PG_RETURN_FLOAT8(result); } /* - * dexp - returns a pointer to the exponential function of arg1 + * dexp - returns the exponential function of arg1 */ -float64 -dexp(float64 arg1) +Datum +dexp(PG_FUNCTION_ARGS) { - float64 result; - double tmp; - - if (!arg1) - return (float64) NULL; - - result = (float64) palloc(sizeof(float64data)); - - tmp = *arg1; + float8 arg1 = PG_GETARG_FLOAT8(0); + float8 result; /* * We must check both for errno getting set and for a NaN result, in @@ -1141,395 +1022,318 @@ dexp(float64 arg1) * zero result implies unreported underflow. */ errno = 0; - *result = (float64data) exp(tmp); - if (errno != 0 || *result == 0.0 + result = exp(arg1); + if (errno != 0 || result == 0.0 #ifdef HAVE_FINITE - || !finite(*result) + || !finite(result) #endif ) elog(ERROR, "exp() result is out of range"); - CheckFloat8Val(*result); - return result; + CheckFloat8Val(result); + PG_RETURN_FLOAT8(result); } /* - * dlog1 - returns a pointer to the natural logarithm of arg1 + * dlog1 - returns the natural logarithm of arg1 * ("dlog" is already a logging routine...) */ -float64 -dlog1(float64 arg1) +Datum +dlog1(PG_FUNCTION_ARGS) { - float64 result; - double tmp; - - if (!PointerIsValid(arg1)) - return (float64) NULL; - - result = (float64) palloc(sizeof(float64data)); + float8 arg1 = PG_GETARG_FLOAT8(0); + float8 result; - tmp = *arg1; - if (tmp == 0.0) + if (arg1 == 0.0) elog(ERROR, "can't take log of zero"); - if (tmp < 0) + if (arg1 < 0) elog(ERROR, "can't take log of a negative number"); - *result = (float64data) log(tmp); - CheckFloat8Val(*result); - return result; -} /* dlog1() */ + result = log(arg1); + + CheckFloat8Val(result); + PG_RETURN_FLOAT8(result); +} /* - * dlog10 - returns a pointer to the base 10 logarithm of arg1 + * dlog10 - returns the base 10 logarithm of arg1 */ -float64 -dlog10(float64 arg1) +Datum +dlog10(PG_FUNCTION_ARGS) { - float64 result; - double tmp; - - if (!PointerIsValid(arg1)) - return (float64) NULL; - - result = (float64) palloc(sizeof(float64data)); + float8 arg1 = PG_GETARG_FLOAT8(0); + float8 result; - tmp = *arg1; - if (tmp == 0.0) + if (arg1 == 0.0) elog(ERROR, "can't take log of zero"); - if (tmp < 0) + if (arg1 < 0) elog(ERROR, "can't take log of a negative number"); - *result = (float64data) log10(tmp); - CheckFloat8Val(*result); - return result; -} /* dlog10() */ + result = log10(arg1); + + CheckFloat8Val(result); + PG_RETURN_FLOAT8(result); +} /* - * dacos - returns a pointer to the arccos of arg1 (radians) + * dacos - returns the arccos of arg1 (radians) */ -float64 -dacos(float64 arg1) +Datum +dacos(PG_FUNCTION_ARGS) { - float64 result; - double tmp; - - if (!PointerIsValid(arg1)) - return (float64) NULL; - - result = (float64) palloc(sizeof(float64data)); + float8 arg1 = PG_GETARG_FLOAT8(0); + float8 result; - tmp = *arg1; errno = 0; - *result = (float64data) acos(tmp); + result = acos(arg1); if (errno != 0 #ifdef HAVE_FINITE - || !finite(*result) + || !finite(result) #endif ) - elog(ERROR, "dacos(%f) input is out of range", *arg1); + elog(ERROR, "acos(%f) input is out of range", arg1); - CheckFloat8Val(*result); - return result; -} /* dacos() */ + CheckFloat8Val(result); + PG_RETURN_FLOAT8(result); +} /* - * dasin - returns a pointer to the arcsin of arg1 (radians) + * dasin - returns the arcsin of arg1 (radians) */ -float64 -dasin(float64 arg1) +Datum +dasin(PG_FUNCTION_ARGS) { - float64 result; - double tmp; - - if (!PointerIsValid(arg1)) - return (float64) NULL; - - result = (float64) palloc(sizeof(float64data)); + float8 arg1 = PG_GETARG_FLOAT8(0); + float8 result; - tmp = *arg1; errno = 0; - *result = (float64data) asin(tmp); + result = asin(arg1); if (errno != 0 #ifdef HAVE_FINITE - || !finite(*result) + || !finite(result) #endif ) - elog(ERROR, "dasin(%f) input is out of range", *arg1); + elog(ERROR, "asin(%f) input is out of range", arg1); - CheckFloat8Val(*result); - return result; -} /* dasin() */ + CheckFloat8Val(result); + PG_RETURN_FLOAT8(result); +} /* - * datan - returns a pointer to the arctan of arg1 (radians) + * datan - returns the arctan of arg1 (radians) */ -float64 -datan(float64 arg1) +Datum +datan(PG_FUNCTION_ARGS) { - float64 result; - double tmp; - - if (!PointerIsValid(arg1)) - return (float64) NULL; - - result = (float64) palloc(sizeof(float64data)); + float8 arg1 = PG_GETARG_FLOAT8(0); + float8 result; - tmp = *arg1; errno = 0; - *result = (float64data) atan(tmp); + result = atan(arg1); if (errno != 0 #ifdef HAVE_FINITE - || !finite(*result) + || !finite(result) #endif ) - elog(ERROR, "atan(%f) input is out of range", *arg1); + elog(ERROR, "atan(%f) input is out of range", arg1); - CheckFloat8Val(*result); - return result; -} /* datan() */ + CheckFloat8Val(result); + PG_RETURN_FLOAT8(result); +} /* - * atan2 - returns a pointer to the arctan2 of arg1 (radians) + * atan2 - returns the arctan2 of arg1 (radians) */ -float64 -datan2(float64 arg1, float64 arg2) +Datum +datan2(PG_FUNCTION_ARGS) { - float64 result; - - if (!PointerIsValid(arg1) || !PointerIsValid(arg1)) - return (float64) NULL; - - result = (float64) palloc(sizeof(float64data)); + float8 arg1 = PG_GETARG_FLOAT8(0); + float8 arg2 = PG_GETARG_FLOAT8(1); + float8 result; errno = 0; - *result = (float64data) atan2(*arg1, *arg2); + result = atan2(arg1, arg2); if (errno != 0 #ifdef HAVE_FINITE - || !finite(*result) + || !finite(result) #endif ) - elog(ERROR, "atan2(%f,%f) input is out of range", *arg1, *arg2); + elog(ERROR, "atan2(%f,%f) input is out of range", arg1, arg2); - CheckFloat8Val(*result); - return result; -} /* datan2() */ + CheckFloat8Val(result); + PG_RETURN_FLOAT8(result); +} /* - * dcos - returns a pointer to the cosine of arg1 (radians) + * dcos - returns the cosine of arg1 (radians) */ -float64 -dcos(float64 arg1) +Datum +dcos(PG_FUNCTION_ARGS) { - float64 result; - double tmp; - - if (!PointerIsValid(arg1)) - return (float64) NULL; - - result = (float64) palloc(sizeof(float64data)); + float8 arg1 = PG_GETARG_FLOAT8(0); + float8 result; - tmp = *arg1; errno = 0; - *result = (float64data) cos(tmp); + result = cos(arg1); if (errno != 0 #ifdef HAVE_FINITE - || !finite(*result) + || !finite(result) #endif ) - elog(ERROR, "dcos(%f) input is out of range", *arg1); + elog(ERROR, "cos(%f) input is out of range", arg1); - CheckFloat8Val(*result); - return result; -} /* dcos() */ + CheckFloat8Val(result); + PG_RETURN_FLOAT8(result); +} /* - * dcot - returns a pointer to the cotangent of arg1 (radians) + * dcot - returns the cotangent of arg1 (radians) */ -float64 -dcot(float64 arg1) +Datum +dcot(PG_FUNCTION_ARGS) { - float64 result; - double tmp; - - if (!PointerIsValid(arg1)) - return (float64) NULL; - - result = (float64) palloc(sizeof(float64data)); + float8 arg1 = PG_GETARG_FLOAT8(0); + float8 result; - tmp = *arg1; errno = 0; - *result = (float64data) tan(tmp); - if ((errno != 0) || (*result == 0.0) + result = tan(arg1); + if (errno != 0 || result == 0.0 #ifdef HAVE_FINITE - || !finite(*result) + || !finite(result) #endif ) - elog(ERROR, "dcot(%f) input is out of range", *arg1); + elog(ERROR, "cot(%f) input is out of range", arg1); - *result = 1.0 / (*result); - CheckFloat8Val(*result); - return result; -} /* dcot() */ + result = 1.0 / result; + CheckFloat8Val(result); + PG_RETURN_FLOAT8(result); +} /* - * dsin - returns a pointer to the sine of arg1 (radians) + * dsin - returns the sine of arg1 (radians) */ -float64 -dsin(float64 arg1) +Datum +dsin(PG_FUNCTION_ARGS) { - float64 result; - double tmp; - - if (!PointerIsValid(arg1)) - return (float64) NULL; - - result = (float64) palloc(sizeof(float64data)); + float8 arg1 = PG_GETARG_FLOAT8(0); + float8 result; - tmp = *arg1; errno = 0; - *result = (float64data) sin(tmp); + result = sin(arg1); if (errno != 0 #ifdef HAVE_FINITE - || !finite(*result) + || !finite(result) #endif ) - elog(ERROR, "dsin(%f) input is out of range", *arg1); + elog(ERROR, "sin(%f) input is out of range", arg1); - CheckFloat8Val(*result); - return result; -} /* dsin() */ + CheckFloat8Val(result); + PG_RETURN_FLOAT8(result); +} /* - * dtan - returns a pointer to the tangent of arg1 (radians) + * dtan - returns the tangent of arg1 (radians) */ -float64 -dtan(float64 arg1) +Datum +dtan(PG_FUNCTION_ARGS) { - float64 result; - double tmp; - - if (!PointerIsValid(arg1)) - return (float64) NULL; - - result = (float64) palloc(sizeof(float64data)); + float8 arg1 = PG_GETARG_FLOAT8(0); + float8 result; - tmp = *arg1; errno = 0; - *result = (float64data) tan(tmp); + result = tan(arg1); if (errno != 0 #ifdef HAVE_FINITE - || !finite(*result) + || !finite(result) #endif ) - elog(ERROR, "dtan(%f) input is out of range", *arg1); - - CheckFloat8Val(*result); - return result; -} /* dtan() */ + elog(ERROR, "tan(%f) input is out of range", arg1); - -#ifndef M_PI -/* from my RH5.2 gcc math.h file - thomas 2000-04-03 */ -#define M_PI 3.14159265358979323846 -#endif + CheckFloat8Val(result); + PG_RETURN_FLOAT8(result); +} /* - * degrees - returns a pointer to degrees converted from radians + * degrees - returns degrees converted from radians */ -float64 -degrees(float64 arg1) +Datum +degrees(PG_FUNCTION_ARGS) { - float64 result; - - if (!arg1) - return (float64) NULL; - - result = (float64) palloc(sizeof(float64data)); + float8 arg1 = PG_GETARG_FLOAT8(0); + float8 result; - *result = ((*arg1) * (180.0 / M_PI)); + result = arg1 * (180.0 / M_PI); - CheckFloat8Val(*result); - return result; -} /* degrees() */ + CheckFloat8Val(result); + PG_RETURN_FLOAT8(result); +} /* - * dpi - returns a pointer to degrees converted to radians + * dpi - returns the constant PI */ -float64 -dpi(void) +Datum +dpi(PG_FUNCTION_ARGS) { - float64 result; - - result = (float64) palloc(sizeof(float64data)); - - *result = (M_PI); - - return result; -} /* dpi() */ + PG_RETURN_FLOAT8(M_PI); +} /* - * radians - returns a pointer to radians converted from degrees + * radians - returns radians converted from degrees */ -float64 -radians(float64 arg1) +Datum +radians(PG_FUNCTION_ARGS) { - float64 result; - - if (!arg1) - return (float64) NULL; - - result = (float64) palloc(sizeof(float64data)); + float8 arg1 = PG_GETARG_FLOAT8(0); + float8 result; - *result = ((*arg1) * (M_PI / 180.0)); + result = arg1 * (M_PI / 180.0); - CheckFloat8Val(*result); - return result; -} /* radians() */ + CheckFloat8Val(result); + PG_RETURN_FLOAT8(result); +} /* * drandom - returns a random number */ -float64 -drandom(void) +Datum +drandom(PG_FUNCTION_ARGS) { - float64 result; - - result = (float64) palloc(sizeof(float64data)); + float8 result; /* result 0.0-1.0 */ - *result = (((double) random()) / RAND_MAX); + result = ((double) random()) / RAND_MAX; - CheckFloat8Val(*result); - return result; -} /* drandom() */ + PG_RETURN_FLOAT8(result); +} /* * setseed - set seed for the random number generator */ -int32 -setseed(float64 seed) +Datum +setseed(PG_FUNCTION_ARGS) { - int iseed = ((*seed) * RAND_MAX); + float8 seed = PG_GETARG_FLOAT8(0); + int iseed = (seed * RAND_MAX); - srandom((unsigned int) ((*seed) * RAND_MAX)); + srandom((unsigned int) iseed); - return iseed; -} /* setseed() */ + PG_RETURN_INT32(iseed); +} @@ -1710,142 +1514,121 @@ float8_stddev(PG_FUNCTION_ARGS) */ /* - * float48pl - returns a pointer to arg1 + arg2 - * float48mi - returns a pointer to arg1 - arg2 - * float48mul - returns a pointer to arg1 * arg2 - * float48div - returns a pointer to arg1 / arg2 + * float48pl - returns arg1 + arg2 + * float48mi - returns arg1 - arg2 + * float48mul - returns arg1 * arg2 + * float48div - returns arg1 / arg2 */ -float64 -float48pl(float32 arg1, float64 arg2) +Datum +float48pl(PG_FUNCTION_ARGS) { - float64 result; - - if (!arg1 || !arg2) - return (float64) NULL; - - result = (float64) palloc(sizeof(float64data)); + float4 arg1 = PG_GETARG_FLOAT4(0); + float8 arg2 = PG_GETARG_FLOAT8(1); + float8 result; - *result = *arg1 + *arg2; - CheckFloat8Val(*result); - return result; + result = arg1 + arg2; + CheckFloat8Val(result); + PG_RETURN_FLOAT8(result); } -float64 -float48mi(float32 arg1, float64 arg2) +Datum +float48mi(PG_FUNCTION_ARGS) { - float64 result; - - if (!arg1 || !arg2) - return (float64) NULL; - - result = (float64) palloc(sizeof(float64data)); + float4 arg1 = PG_GETARG_FLOAT4(0); + float8 arg2 = PG_GETARG_FLOAT8(1); + float8 result; - *result = *arg1 - *arg2; - CheckFloat8Val(*result); - return result; + result = arg1 - arg2; + CheckFloat8Val(result); + PG_RETURN_FLOAT8(result); } -float64 -float48mul(float32 arg1, float64 arg2) +Datum +float48mul(PG_FUNCTION_ARGS) { - float64 result; - - if (!arg1 || !arg2) - return (float64) NULL; - - result = (float64) palloc(sizeof(float64data)); + float4 arg1 = PG_GETARG_FLOAT4(0); + float8 arg2 = PG_GETARG_FLOAT8(1); + float8 result; - *result = *arg1 * *arg2; - CheckFloat8Val(*result); - return result; + result = arg1 * arg2; + CheckFloat8Val(result); + PG_RETURN_FLOAT8(result); } -float64 -float48div(float32 arg1, float64 arg2) +Datum +float48div(PG_FUNCTION_ARGS) { - float64 result; - - if (!arg1 || !arg2) - return (float64) NULL; - - result = (float64) palloc(sizeof(float64data)); + float4 arg1 = PG_GETARG_FLOAT4(0); + float8 arg2 = PG_GETARG_FLOAT8(1); + float8 result; - if (*arg2 == 0.0) + if (arg2 == 0.0) elog(ERROR, "float48div: divide by zero"); - *result = *arg1 / *arg2; - CheckFloat8Val(*result); - return result; + result = arg1 / arg2; + CheckFloat8Val(result); + PG_RETURN_FLOAT8(result); } /* - * float84pl - returns a pointer to arg1 + arg2 - * float84mi - returns a pointer to arg1 - arg2 - * float84mul - returns a pointer to arg1 * arg2 - * float84div - returns a pointer to arg1 / arg2 + * float84pl - returns arg1 + arg2 + * float84mi - returns arg1 - arg2 + * float84mul - returns arg1 * arg2 + * float84div - returns arg1 / arg2 */ -float64 -float84pl(float64 arg1, float32 arg2) +Datum +float84pl(PG_FUNCTION_ARGS) { - float64 result; - - if (!arg1 || !arg2) - return (float64) NULL; + float8 arg1 = PG_GETARG_FLOAT8(0); + float4 arg2 = PG_GETARG_FLOAT4(1); + float8 result; - result = (float64) palloc(sizeof(float64data)); + result = arg1 + arg2; - *result = *arg1 + *arg2; - CheckFloat8Val(*result); - return result; + CheckFloat8Val(result); + PG_RETURN_FLOAT8(result); } -float64 -float84mi(float64 arg1, float32 arg2) +Datum +float84mi(PG_FUNCTION_ARGS) { - float64 result; - - if (!arg1 || !arg2) - return (float64) NULL; + float8 arg1 = PG_GETARG_FLOAT8(0); + float4 arg2 = PG_GETARG_FLOAT4(1); + float8 result; - result = (float64) palloc(sizeof(float64data)); + result = arg1 - arg2; - *result = *arg1 - *arg2; - CheckFloat8Val(*result); - return result; + CheckFloat8Val(result); + PG_RETURN_FLOAT8(result); } -float64 -float84mul(float64 arg1, float32 arg2) +Datum +float84mul(PG_FUNCTION_ARGS) { + float8 arg1 = PG_GETARG_FLOAT8(0); + float4 arg2 = PG_GETARG_FLOAT4(1); + float8 result; - float64 result; - - if (!arg1 || !arg2) - return (float64) NULL; - - result = (float64) palloc(sizeof(float64data)); + result = arg1 * arg2; - *result = *arg1 * *arg2; - CheckFloat8Val(*result); - return result; + CheckFloat8Val(result); + PG_RETURN_FLOAT8(result); } -float64 -float84div(float64 arg1, float32 arg2) +Datum +float84div(PG_FUNCTION_ARGS) { - float64 result; - - if (!arg1 || !arg2) - return (float64) NULL; + float8 arg1 = PG_GETARG_FLOAT8(0); + float4 arg2 = PG_GETARG_FLOAT4(1); + float8 result; - result = (float64) palloc(sizeof(float64data)); + if (arg2 == 0.0) + elog(ERROR, "float84div: divide by zero"); - if (*arg2 == 0.0) - elog(ERROR, "float48div: divide by zero"); + result = arg1 / arg2; - *result = *arg1 / *arg2; - CheckFloat8Val(*result); - return result; + CheckFloat8Val(result); + PG_RETURN_FLOAT8(result); } /* @@ -1857,115 +1640,115 @@ float84div(float64 arg1, float32 arg2) /* * float48{eq,ne,lt,le,gt,ge} - float4/float8 comparison operations */ -bool -float48eq(float32 arg1, float64 arg2) +Datum +float48eq(PG_FUNCTION_ARGS) { - if (!arg1 || !arg2) - return 0; + float4 arg1 = PG_GETARG_FLOAT4(0); + float8 arg2 = PG_GETARG_FLOAT8(1); - return *arg1 == *arg2; + PG_RETURN_BOOL(arg1 == arg2); } -bool -float48ne(float32 arg1, float64 arg2) +Datum +float48ne(PG_FUNCTION_ARGS) { - if (!arg1 || !arg2) - return 0; + float4 arg1 = PG_GETARG_FLOAT4(0); + float8 arg2 = PG_GETARG_FLOAT8(1); - return *arg1 != *arg2; + PG_RETURN_BOOL(arg1 != arg2); } -bool -float48lt(float32 arg1, float64 arg2) +Datum +float48lt(PG_FUNCTION_ARGS) { - if (!arg1 || !arg2) - return 0; + float4 arg1 = PG_GETARG_FLOAT4(0); + float8 arg2 = PG_GETARG_FLOAT8(1); - return *arg1 < *arg2; + PG_RETURN_BOOL(arg1 < arg2); } -bool -float48le(float32 arg1, float64 arg2) +Datum +float48le(PG_FUNCTION_ARGS) { - if (!arg1 || !arg2) - return 0; + float4 arg1 = PG_GETARG_FLOAT4(0); + float8 arg2 = PG_GETARG_FLOAT8(1); - return *arg1 <= *arg2; + PG_RETURN_BOOL(arg1 <= arg2); } -bool -float48gt(float32 arg1, float64 arg2) +Datum +float48gt(PG_FUNCTION_ARGS) { - if (!arg1 || !arg2) - return 0; + float4 arg1 = PG_GETARG_FLOAT4(0); + float8 arg2 = PG_GETARG_FLOAT8(1); - return *arg1 > *arg2; + PG_RETURN_BOOL(arg1 > arg2); } -bool -float48ge(float32 arg1, float64 arg2) +Datum +float48ge(PG_FUNCTION_ARGS) { - if (!arg1 || !arg2) - return 0; + float4 arg1 = PG_GETARG_FLOAT4(0); + float8 arg2 = PG_GETARG_FLOAT8(1); - return *arg1 >= *arg2; + PG_RETURN_BOOL(arg1 >= arg2); } /* - * float84{eq,ne,lt,le,gt,ge} - float4/float8 comparison operations + * float84{eq,ne,lt,le,gt,ge} - float8/float4 comparison operations */ -bool -float84eq(float64 arg1, float32 arg2) +Datum +float84eq(PG_FUNCTION_ARGS) { - if (!arg1 || !arg2) - return 0; + float8 arg1 = PG_GETARG_FLOAT8(0); + float4 arg2 = PG_GETARG_FLOAT4(1); - return *arg1 == *arg2; + PG_RETURN_BOOL(arg1 == arg2); } -bool -float84ne(float64 arg1, float32 arg2) +Datum +float84ne(PG_FUNCTION_ARGS) { - if (!arg1 || !arg2) - return 0; + float8 arg1 = PG_GETARG_FLOAT8(0); + float4 arg2 = PG_GETARG_FLOAT4(1); - return *arg1 != *arg2; + PG_RETURN_BOOL(arg1 != arg2); } -bool -float84lt(float64 arg1, float32 arg2) +Datum +float84lt(PG_FUNCTION_ARGS) { - if (!arg1 || !arg2) - return 0; + float8 arg1 = PG_GETARG_FLOAT8(0); + float4 arg2 = PG_GETARG_FLOAT4(1); - return *arg1 < *arg2; + PG_RETURN_BOOL(arg1 < arg2); } -bool -float84le(float64 arg1, float32 arg2) +Datum +float84le(PG_FUNCTION_ARGS) { - if (!arg1 || !arg2) - return 0; + float8 arg1 = PG_GETARG_FLOAT8(0); + float4 arg2 = PG_GETARG_FLOAT4(1); - return *arg1 <= *arg2; + PG_RETURN_BOOL(arg1 <= arg2); } -bool -float84gt(float64 arg1, float32 arg2) +Datum +float84gt(PG_FUNCTION_ARGS) { - if (!arg1 || !arg2) - return 0; + float8 arg1 = PG_GETARG_FLOAT8(0); + float4 arg2 = PG_GETARG_FLOAT4(1); - return *arg1 > *arg2; + PG_RETURN_BOOL(arg1 > arg2); } -bool -float84ge(float64 arg1, float32 arg2) +Datum +float84ge(PG_FUNCTION_ARGS) { - if (!arg1 || !arg2) - return 0; + float8 arg1 = PG_GETARG_FLOAT8(0); + float4 arg2 = PG_GETARG_FLOAT4(1); - return *arg1 >= *arg2; + PG_RETURN_BOOL(arg1 >= arg2); } /* ========== PRIVATE ROUTINES ========== */ @@ -1996,26 +1779,14 @@ float84ge(float64 arg1, float32 arg2) * Inexact flag raised if x not equal to rint(x). */ -#ifdef __STDC__ -static const double -#else -static double -#endif - one = 1.0, +static const double one = 1.0, TWO52[2] = { 4.50359962737049600000e+15, /* 0x43300000, 0x00000000 */ -4.50359962737049600000e+15,/* 0xC3300000, 0x00000000 */ }; -#ifdef __STDC__ static double rint(double x) -#else -static double -rint(x) -double x; - -#endif { int i0, n0, @@ -2088,10 +1859,8 @@ double x; #ifndef HAVE_CBRT -static -double -cbrt(x) -double x; +static double +cbrt(double x) { int isneg = (x < 0.0); double tmpres = pow(fabs(x), (double) 1.0 / (double) 3.0); diff --git a/src/backend/utils/adt/int.c b/src/backend/utils/adt/int.c index 7133142c0b6cbe6bbc0316c68c1c2328915f6bd1..b1153c30d1763f40225d4578abe41a9b1cb4297c 100644 --- a/src/backend/utils/adt/int.c +++ b/src/backend/utils/adt/int.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/int.c,v 1.41 2000/07/17 03:05:17 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/int.c,v 1.42 2000/08/01 18:29:35 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -65,7 +65,7 @@ int2out(PG_FUNCTION_ARGS) int16 arg1 = PG_GETARG_INT16(0); char *result = (char *) palloc(7); /* sign, 5 digits, '\0' */ - itoa((int) arg1, result); + pg_itoa(arg1, result); PG_RETURN_CSTRING(result); } @@ -123,7 +123,7 @@ int2vectorout(PG_FUNCTION_ARGS) { if (num != 0) *rp++ = ' '; - ltoa(int2Array[num], rp); + pg_itoa(int2Array[num], rp); while (*++rp != '\0') ; } @@ -187,7 +187,7 @@ int44out(PG_FUNCTION_ARGS) walk = result; for (i = 0; i < 4; i++) { - itoa(an_array[i], walk); + pg_ltoa(an_array[i], walk); while (*++walk != '\0') ; *walk++ = ' '; @@ -221,7 +221,7 @@ int4out(PG_FUNCTION_ARGS) int32 arg1 = PG_GETARG_INT32(0); char *result = (char *) palloc(12); /* sign, 10 digits, '\0' */ - ltoa(arg1, result); + pg_ltoa(arg1, result); PG_RETURN_CSTRING(result); } @@ -259,7 +259,7 @@ int2_text(PG_FUNCTION_ARGS) int16 arg1 = PG_GETARG_INT16(0); text *result = (text *) palloc(7+VARHDRSZ); /* sign,5 digits, '\0' */ - itoa((int) arg1, VARDATA(result)); + pg_itoa(arg1, VARDATA(result)); VARATT_SIZEP(result) = strlen(VARDATA(result)) + VARHDRSZ; PG_RETURN_TEXT_P(result); } @@ -290,7 +290,7 @@ int4_text(PG_FUNCTION_ARGS) int32 arg1 = PG_GETARG_INT32(0); text *result = (text *) palloc(12+VARHDRSZ); /* sign,10 digits,'\0' */ - ltoa(arg1, VARDATA(result)); + pg_ltoa(arg1, VARDATA(result)); VARATT_SIZEP(result) = strlen(VARDATA(result)) + VARHDRSZ; PG_RETURN_TEXT_P(result); } diff --git a/src/backend/utils/adt/numeric.c b/src/backend/utils/adt/numeric.c index bc9a6fe6b31ec1e0ac159923ef89bcfd3b65f0f8..a867e7f34824c128e79a733490e0fc53200bd0a6 100644 --- a/src/backend/utils/adt/numeric.c +++ b/src/backend/utils/adt/numeric.c @@ -5,7 +5,7 @@ * * 1998 Jan Wieck * - * $Header: /cvsroot/pgsql/src/backend/utils/adt/numeric.c,v 1.33 2000/07/29 03:26:41 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/numeric.c,v 1.34 2000/08/01 18:29:35 tgl Exp $ * * ---------- */ @@ -1766,17 +1766,19 @@ numeric_float8(PG_FUNCTION_ARGS) { Numeric num = PG_GETARG_NUMERIC(0); char *tmp; - float64 result; + Datum result; if (NUMERIC_IS_NAN(num)) PG_RETURN_FLOAT8(NAN); tmp = DatumGetCString(DirectFunctionCall1(numeric_out, NumericGetDatum(num))); - result = float8in(tmp); + + result = DirectFunctionCall1(float8in, CStringGetDatum(tmp)); + pfree(tmp); - PG_RETURN_POINTER(result); + PG_RETURN_DATUM(result); } @@ -1809,17 +1811,19 @@ numeric_float4(PG_FUNCTION_ARGS) { Numeric num = PG_GETARG_NUMERIC(0); char *tmp; - float32 result; + Datum result; if (NUMERIC_IS_NAN(num)) - PG_RETURN_FLOAT4(NAN); + PG_RETURN_FLOAT4((float4) NAN); tmp = DatumGetCString(DirectFunctionCall1(numeric_out, NumericGetDatum(num))); - result = float4in(tmp); + + result = DirectFunctionCall1(float4in, CStringGetDatum(tmp)); + pfree(tmp); - PG_RETURN_POINTER(result); + PG_RETURN_DATUM(result); } diff --git a/src/backend/utils/adt/numutils.c b/src/backend/utils/adt/numutils.c index 3d4956afe2eca8ed7a63d728dc4ed206690db027..ea188e70f3196c8e925c8b70ef1d1f657f7b255c 100644 --- a/src/backend/utils/adt/numutils.c +++ b/src/backend/utils/adt/numutils.c @@ -3,7 +3,7 @@ * numutils.c * utility functions for I/O of built-in numeric types. * - * integer: itoa, ltoa + * integer: pg_itoa, pg_ltoa * floating point: ftoa, atof1 * * Portions Copyright (c) 1996-2000, PostgreSQL, Inc @@ -11,7 +11,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/numutils.c,v 1.41 2000/07/12 22:59:09 petere Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/numutils.c,v 1.42 2000/08/01 18:29:35 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -116,27 +116,27 @@ pg_atoi(char *s, int size, int c) } /* - * itoa - converts a short int to its string represention + * pg_itoa - converts a short int to its string represention * * Note: * previously based on ~ingres/source/gutil/atoi.c * now uses vendor's sprintf conversion */ void -itoa(int i, char *a) +pg_itoa(int16 i, char *a) { sprintf(a, "%hd", (short) i); } /* - * ltoa - converts a long int to its string represention + * pg_ltoa - converts a long int to its string represention * * Note: * previously based on ~ingres/source/gutil/atoi.c * now uses vendor's sprintf conversion */ void -ltoa(int32 l, char *a) +pg_ltoa(int32 l, char *a) { sprintf(a, "%d", l); } diff --git a/src/backend/utils/adt/oid.c b/src/backend/utils/adt/oid.c index a51eadfc5ef5969ee70cf0224b34731f6c338e27..6ae7d48d2c73b6fd4b82e1acbfd29dc754155b89 100644 --- a/src/backend/utils/adt/oid.c +++ b/src/backend/utils/adt/oid.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/oid.c,v 1.37 2000/07/03 23:09:52 wieck Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/oid.c,v 1.38 2000/08/01 18:29:35 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -79,7 +79,7 @@ oidvectorout(PG_FUNCTION_ARGS) { if (num != 0) *rp++ = ' '; - ltoa(oidArray[num], rp); + pg_ltoa((int32) oidArray[num], rp); while (*++rp != '\0') ; } diff --git a/src/include/catalog/pg_proc.h b/src/include/catalog/pg_proc.h index 7d06975b70286987360a81629a2dc058fc8689e0..42e99039c715cbd49532323302ebd2cc98e73ad2 100644 --- a/src/include/catalog/pg_proc.h +++ b/src/include/catalog/pg_proc.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2000, PostgreSQL, Inc * Portions Copyright (c) 1994, Regents of the University of California * - * $Id: pg_proc.h,v 1.154 2000/07/31 22:39:05 tgl Exp $ + * $Id: pg_proc.h,v 1.155 2000/08/01 18:29:30 tgl Exp $ * * NOTES * The script catalog/genbki.sh reads this file and generates .bki @@ -365,13 +365,13 @@ DESCR("modulus"); DATA(insert OID = 175 ( int42mod PGUID 12 f t t t 2 f 23 "23 21" 100 0 0 100 int42mod - )); DESCR("modulus"); DATA(insert OID = 176 ( int2pl PGUID 12 f t t t 2 f 21 "21 21" 100 0 0 100 int2pl - )); -DESCR("addition"); +DESCR("add"); DATA(insert OID = 177 ( int4pl PGUID 12 f t t t 2 f 23 "23 23" 100 0 0 100 int4pl - )); -DESCR("addition"); +DESCR("add"); DATA(insert OID = 178 ( int24pl PGUID 12 f t t t 2 f 23 "21 23" 100 0 0 100 int24pl - )); -DESCR("addition"); +DESCR("add"); DATA(insert OID = 179 ( int42pl PGUID 12 f t t t 2 f 23 "23 21" 100 0 0 100 int42pl - )); -DESCR("addition"); +DESCR("add"); DATA(insert OID = 180 ( int2mi PGUID 12 f t t t 2 f 21 "21 21" 100 0 0 100 int2mi - )); DESCR("subtract"); DATA(insert OID = 181 ( int4mi PGUID 12 f t t t 2 f 23 "23 23" 100 0 0 100 int4mi - )); @@ -415,27 +415,27 @@ DESCR("r-tree"); /* OIDS 200 - 299 */ -DATA(insert OID = 200 ( float4in PGUID 11 f t t t 1 f 700 "0" 100 0 0 100 float4in - )); +DATA(insert OID = 200 ( float4in PGUID 12 f t t t 1 f 700 "0" 100 0 0 100 float4in - )); DESCR("(internal)"); -DATA(insert OID = 201 ( float4out PGUID 11 f t t t 1 f 23 "0" 100 0 0 100 float4out - )); +DATA(insert OID = 201 ( float4out PGUID 12 f t t t 1 f 23 "700" 100 0 0 100 float4out - )); DESCR("(internal)"); -DATA(insert OID = 202 ( float4mul PGUID 11 f t t t 2 f 700 "700 700" 100 0 0 100 float4mul - )); +DATA(insert OID = 202 ( float4mul PGUID 12 f t t t 2 f 700 "700 700" 100 0 0 100 float4mul - )); DESCR("multiply"); -DATA(insert OID = 203 ( float4div PGUID 11 f t t t 2 f 700 "700 700" 100 0 0 100 float4div - )); +DATA(insert OID = 203 ( float4div PGUID 12 f t t t 2 f 700 "700 700" 100 0 0 100 float4div - )); DESCR("divide"); -DATA(insert OID = 204 ( float4pl PGUID 11 f t t t 2 f 700 "700 700" 100 0 0 100 float4pl - )); -DESCR("addition"); -DATA(insert OID = 205 ( float4mi PGUID 11 f t t t 2 f 700 "700 700" 100 0 0 100 float4mi - )); +DATA(insert OID = 204 ( float4pl PGUID 12 f t t t 2 f 700 "700 700" 100 0 0 100 float4pl - )); +DESCR("add"); +DATA(insert OID = 205 ( float4mi PGUID 12 f t t t 2 f 700 "700 700" 100 0 0 100 float4mi - )); DESCR("subtract"); -DATA(insert OID = 206 ( float4um PGUID 11 f t t t 1 f 700 "700" 100 0 0 100 float4um - )); +DATA(insert OID = 206 ( float4um PGUID 12 f t t t 1 f 700 "700" 100 0 0 100 float4um - )); DESCR("negate"); -DATA(insert OID = 207 ( float4abs PGUID 11 f t t t 1 f 700 "700" 100 0 0 100 float4abs - )); +DATA(insert OID = 207 ( float4abs PGUID 12 f t t t 1 f 700 "700" 100 0 0 100 float4abs - )); DESCR("absolute value"); DATA(insert OID = 208 ( float4_accum PGUID 12 f t t t 2 f 1022 "1022 700" 100 0 0 100 float4_accum - )); DESCR("aggregate transition function"); -DATA(insert OID = 209 ( float4larger PGUID 11 f t t t 2 f 700 "700 700" 100 0 0 100 float4larger - )); +DATA(insert OID = 209 ( float4larger PGUID 12 f t t t 2 f 700 "700 700" 100 0 0 100 float4larger - )); DESCR("larger of two"); -DATA(insert OID = 211 ( float4smaller PGUID 11 f t t t 2 f 700 "700 700" 100 0 0 100 float4smaller - )); +DATA(insert OID = 211 ( float4smaller PGUID 12 f t t t 2 f 700 "700 700" 100 0 0 100 float4smaller - )); DESCR("smaller of two"); DATA(insert OID = 212 ( int4um PGUID 12 f t t t 1 f 23 "23" 100 0 0 100 int4um - )); @@ -443,27 +443,27 @@ DESCR("negate"); DATA(insert OID = 213 ( int2um PGUID 12 f t t t 1 f 21 "21" 100 0 0 100 int2um - )); DESCR("negate"); -DATA(insert OID = 214 ( float8in PGUID 11 f t t t 1 f 701 "0" 100 0 0 100 float8in - )); +DATA(insert OID = 214 ( float8in PGUID 12 f t t t 1 f 701 "0" 100 0 0 100 float8in - )); DESCR("(internal)"); -DATA(insert OID = 215 ( float8out PGUID 11 f t t t 1 f 23 "0" 100 0 0 100 float8out - )); +DATA(insert OID = 215 ( float8out PGUID 12 f t t t 1 f 23 "701" 100 0 0 100 float8out - )); DESCR("(internal)"); -DATA(insert OID = 216 ( float8mul PGUID 11 f t t t 2 f 701 "701 701" 100 0 0 100 float8mul - )); +DATA(insert OID = 216 ( float8mul PGUID 12 f t t t 2 f 701 "701 701" 100 0 0 100 float8mul - )); DESCR("multiply"); -DATA(insert OID = 217 ( float8div PGUID 11 f t t t 2 f 701 "701 701" 100 0 0 100 float8div - )); +DATA(insert OID = 217 ( float8div PGUID 12 f t t t 2 f 701 "701 701" 100 0 0 100 float8div - )); DESCR("divide"); -DATA(insert OID = 218 ( float8pl PGUID 11 f t t t 2 f 701 "701 701" 100 0 0 100 float8pl - )); -DESCR("addition"); -DATA(insert OID = 219 ( float8mi PGUID 11 f t t t 2 f 701 "701 701" 100 0 0 100 float8mi - )); +DATA(insert OID = 218 ( float8pl PGUID 12 f t t t 2 f 701 "701 701" 100 0 0 100 float8pl - )); +DESCR("add"); +DATA(insert OID = 219 ( float8mi PGUID 12 f t t t 2 f 701 "701 701" 100 0 0 100 float8mi - )); DESCR("subtract"); -DATA(insert OID = 220 ( float8um PGUID 11 f t t t 1 f 701 "701" 100 0 0 100 float8um - )); +DATA(insert OID = 220 ( float8um PGUID 12 f t t t 1 f 701 "701" 100 0 0 100 float8um - )); DESCR("negate"); -DATA(insert OID = 221 ( float8abs PGUID 11 f t t t 1 f 701 "701" 100 0 0 100 float8abs - )); +DATA(insert OID = 221 ( float8abs PGUID 12 f t t t 1 f 701 "701" 100 0 0 100 float8abs - )); DESCR("absolute value"); DATA(insert OID = 222 ( float8_accum PGUID 12 f t t t 2 f 1022 "1022 701" 100 0 0 100 float8_accum - )); DESCR("aggregate transition function"); -DATA(insert OID = 223 ( float8larger PGUID 11 f t t t 2 f 701 "701 701" 100 0 0 100 float8larger - )); +DATA(insert OID = 223 ( float8larger PGUID 12 f t t t 2 f 701 "701 701" 100 0 0 100 float8larger - )); DESCR("larger of two"); -DATA(insert OID = 224 ( float8smaller PGUID 11 f t t t 2 f 701 "701 701" 100 0 0 100 float8smaller - )); +DATA(insert OID = 224 ( float8smaller PGUID 12 f t t t 2 f 701 "701 701" 100 0 0 100 float8smaller - )); DESCR("smaller of two"); DATA(insert OID = 225 ( lseg_center PGUID 12 f t t t 1 f 600 "601" 100 0 0 100 lseg_center - )); @@ -473,19 +473,19 @@ DESCR("center of"); DATA(insert OID = 227 ( poly_center PGUID 12 f t t t 1 f 600 "604" 100 0 0 100 poly_center - )); DESCR("center of"); -DATA(insert OID = 228 ( dround PGUID 11 f t t t 1 f 701 "701" 100 0 0 100 dround - )); -DESCR("round to integer"); -DATA(insert OID = 229 ( dtrunc PGUID 11 f t t t 1 f 701 "701" 100 0 0 100 dtrunc - )); +DATA(insert OID = 228 ( dround PGUID 12 f t t t 1 f 701 "701" 100 0 0 100 dround - )); +DESCR("round to nearest integer"); +DATA(insert OID = 229 ( dtrunc PGUID 12 f t t t 1 f 701 "701" 100 0 0 100 dtrunc - )); DESCR("truncate to integer"); -DATA(insert OID = 230 ( dsqrt PGUID 11 f t t t 1 f 701 "701" 100 0 0 100 dsqrt - )); +DATA(insert OID = 230 ( dsqrt PGUID 12 f t t t 1 f 701 "701" 100 0 0 100 dsqrt - )); DESCR("square root"); -DATA(insert OID = 231 ( dcbrt PGUID 11 f t t t 1 f 701 "701" 100 0 0 100 dcbrt - )); +DATA(insert OID = 231 ( dcbrt PGUID 12 f t t t 1 f 701 "701" 100 0 0 100 dcbrt - )); DESCR("cube root"); -DATA(insert OID = 232 ( dpow PGUID 11 f t t t 2 f 701 "701 701" 100 0 0 100 dpow - )); +DATA(insert OID = 232 ( dpow PGUID 12 f t t t 2 f 701 "701 701" 100 0 0 100 dpow - )); DESCR("exponentiation (x^y)"); -DATA(insert OID = 233 ( dexp PGUID 11 f t t t 1 f 701 "701" 100 0 0 100 dexp - )); +DATA(insert OID = 233 ( dexp PGUID 12 f t t t 1 f 701 "701" 100 0 0 100 dexp - )); DESCR("natural exponential (e^x)"); -DATA(insert OID = 234 ( dlog1 PGUID 11 f t t t 1 f 701 "701" 100 0 0 100 dlog1 - )); +DATA(insert OID = 234 ( dlog1 PGUID 12 f t t t 1 f 701 "701" 100 0 0 100 dlog1 - )); DESCR("natural logarithm"); DATA(insert OID = 235 ( float8 PGUID 12 f t t t 1 f 701 "21" 100 0 0 100 i2tod - )); DESCR("convert int2 to float8"); @@ -507,7 +507,7 @@ DESCR("(internal)"); DATA(insert OID = 243 ( reltimeout PGUID 12 f t f t 1 f 23 "0" 100 0 0 100 reltimeout - )); DESCR("(internal)"); DATA(insert OID = 244 ( timepl PGUID 12 f t f t 2 f 702 "702 703" 100 0 0 100 timepl - )); -DESCR("addition"); +DESCR("add"); DATA(insert OID = 245 ( timemi PGUID 12 f t f t 2 f 702 "702 703" 100 0 0 100 timemi - )); DESCR("subtract"); DATA(insert OID = 246 ( tintervalin PGUID 12 f t f t 1 f 704 "0" 100 0 0 100 tintervalin - )); @@ -579,80 +579,80 @@ DESCR(""); DATA(insert OID = 278 ( inter_lb PGUID 12 f t t t 2 f 16 "628 603" 100 0 0 100 inter_lb - )); DESCR(""); -DATA(insert OID = 279 ( float48mul PGUID 11 f t t t 2 f 701 "700 701" 100 0 0 100 float48mul - )); +DATA(insert OID = 279 ( float48mul PGUID 12 f t t t 2 f 701 "700 701" 100 0 0 100 float48mul - )); DESCR("multiply"); -DATA(insert OID = 280 ( float48div PGUID 11 f t t t 2 f 701 "700 701" 100 0 0 100 float48div - )); +DATA(insert OID = 280 ( float48div PGUID 12 f t t t 2 f 701 "700 701" 100 0 0 100 float48div - )); DESCR("divide"); -DATA(insert OID = 281 ( float48pl PGUID 11 f t t t 2 f 701 "700 701" 100 0 0 100 float48pl - )); -DESCR("addition"); -DATA(insert OID = 282 ( float48mi PGUID 11 f t t t 2 f 701 "700 701" 100 0 0 100 float48mi - )); +DATA(insert OID = 281 ( float48pl PGUID 12 f t t t 2 f 701 "700 701" 100 0 0 100 float48pl - )); +DESCR("add"); +DATA(insert OID = 282 ( float48mi PGUID 12 f t t t 2 f 701 "700 701" 100 0 0 100 float48mi - )); DESCR("subtract"); -DATA(insert OID = 283 ( float84mul PGUID 11 f t t t 2 f 701 "701 700" 100 0 0 100 float84mul - )); +DATA(insert OID = 283 ( float84mul PGUID 12 f t t t 2 f 701 "701 700" 100 0 0 100 float84mul - )); DESCR("multiply"); -DATA(insert OID = 284 ( float84div PGUID 11 f t t t 2 f 701 "701 700" 100 0 0 100 float84div - )); +DATA(insert OID = 284 ( float84div PGUID 12 f t t t 2 f 701 "701 700" 100 0 0 100 float84div - )); DESCR("divide"); -DATA(insert OID = 285 ( float84pl PGUID 11 f t t t 2 f 701 "701 700" 100 0 0 100 float84pl - )); -DESCR("addition"); -DATA(insert OID = 286 ( float84mi PGUID 11 f t t t 2 f 701 "701 700" 100 0 0 100 float84mi - )); +DATA(insert OID = 285 ( float84pl PGUID 12 f t t t 2 f 701 "701 700" 100 0 0 100 float84pl - )); +DESCR("add"); +DATA(insert OID = 286 ( float84mi PGUID 12 f t t t 2 f 701 "701 700" 100 0 0 100 float84mi - )); DESCR("subtract"); -DATA(insert OID = 287 ( float4eq PGUID 11 f t t t 2 f 16 "700 700" 100 0 0 100 float4eq - )); +DATA(insert OID = 287 ( float4eq PGUID 12 f t t t 2 f 16 "700 700" 100 0 0 100 float4eq - )); DESCR("equal"); -DATA(insert OID = 288 ( float4ne PGUID 11 f t t t 2 f 16 "700 700" 100 0 0 100 float4ne - )); +DATA(insert OID = 288 ( float4ne PGUID 12 f t t t 2 f 16 "700 700" 100 0 0 100 float4ne - )); DESCR("not equal"); -DATA(insert OID = 289 ( float4lt PGUID 11 f t t t 2 f 16 "700 700" 100 0 0 100 float4lt - )); +DATA(insert OID = 289 ( float4lt PGUID 12 f t t t 2 f 16 "700 700" 100 0 0 100 float4lt - )); DESCR("less-than"); -DATA(insert OID = 290 ( float4le PGUID 11 f t t t 2 f 16 "700 700" 100 0 0 100 float4le - )); +DATA(insert OID = 290 ( float4le PGUID 12 f t t t 2 f 16 "700 700" 100 0 0 100 float4le - )); DESCR("less-than-or-equal"); -DATA(insert OID = 291 ( float4gt PGUID 11 f t t t 2 f 16 "700 700" 100 0 0 100 float4gt - )); +DATA(insert OID = 291 ( float4gt PGUID 12 f t t t 2 f 16 "700 700" 100 0 0 100 float4gt - )); DESCR("greater-than"); -DATA(insert OID = 292 ( float4ge PGUID 11 f t t t 2 f 16 "700 700" 100 0 0 100 float4ge - )); +DATA(insert OID = 292 ( float4ge PGUID 12 f t t t 2 f 16 "700 700" 100 0 0 100 float4ge - )); DESCR("greater-than-or-equal"); -DATA(insert OID = 293 ( float8eq PGUID 11 f t t t 2 f 16 "701 701" 100 0 0 100 float8eq - )); +DATA(insert OID = 293 ( float8eq PGUID 12 f t t t 2 f 16 "701 701" 100 0 0 100 float8eq - )); DESCR("equal"); -DATA(insert OID = 294 ( float8ne PGUID 11 f t t t 2 f 16 "701 701" 100 0 0 100 float8ne - )); +DATA(insert OID = 294 ( float8ne PGUID 12 f t t t 2 f 16 "701 701" 100 0 0 100 float8ne - )); DESCR("not equal"); -DATA(insert OID = 295 ( float8lt PGUID 11 f t t t 2 f 16 "701 701" 100 0 0 100 float8lt - )); +DATA(insert OID = 295 ( float8lt PGUID 12 f t t t 2 f 16 "701 701" 100 0 0 100 float8lt - )); DESCR("less-than"); -DATA(insert OID = 296 ( float8le PGUID 11 f t t t 2 f 16 "701 701" 100 0 0 100 float8le - )); +DATA(insert OID = 296 ( float8le PGUID 12 f t t t 2 f 16 "701 701" 100 0 0 100 float8le - )); DESCR("less-than-or-equal"); -DATA(insert OID = 297 ( float8gt PGUID 11 f t t t 2 f 16 "701 701" 100 0 0 100 float8gt - )); +DATA(insert OID = 297 ( float8gt PGUID 12 f t t t 2 f 16 "701 701" 100 0 0 100 float8gt - )); DESCR("greater-than"); -DATA(insert OID = 298 ( float8ge PGUID 11 f t t t 2 f 16 "701 701" 100 0 0 100 float8ge - )); +DATA(insert OID = 298 ( float8ge PGUID 12 f t t t 2 f 16 "701 701" 100 0 0 100 float8ge - )); DESCR("greater-than-or-equal"); -DATA(insert OID = 299 ( float48eq PGUID 11 f t t t 2 f 16 "700 701" 100 0 0 100 float48eq - )); +DATA(insert OID = 299 ( float48eq PGUID 12 f t t t 2 f 16 "700 701" 100 0 0 100 float48eq - )); DESCR("equal"); /* OIDS 300 - 399 */ -DATA(insert OID = 300 ( float48ne PGUID 11 f t t t 2 f 16 "700 701" 100 0 0 100 float48ne - )); +DATA(insert OID = 300 ( float48ne PGUID 12 f t t t 2 f 16 "700 701" 100 0 0 100 float48ne - )); DESCR("not equal"); -DATA(insert OID = 301 ( float48lt PGUID 11 f t t t 2 f 16 "700 701" 100 0 0 100 float48lt - )); +DATA(insert OID = 301 ( float48lt PGUID 12 f t t t 2 f 16 "700 701" 100 0 0 100 float48lt - )); DESCR("less-than"); -DATA(insert OID = 302 ( float48le PGUID 11 f t t t 2 f 16 "700 701" 100 0 0 100 float48le - )); +DATA(insert OID = 302 ( float48le PGUID 12 f t t t 2 f 16 "700 701" 100 0 0 100 float48le - )); DESCR("less-than-or-equal"); -DATA(insert OID = 303 ( float48gt PGUID 11 f t t t 2 f 16 "700 701" 100 0 0 100 float48gt - )); +DATA(insert OID = 303 ( float48gt PGUID 12 f t t t 2 f 16 "700 701" 100 0 0 100 float48gt - )); DESCR("greater-than"); -DATA(insert OID = 304 ( float48ge PGUID 11 f t t t 2 f 16 "700 701" 100 0 0 100 float48ge - )); +DATA(insert OID = 304 ( float48ge PGUID 12 f t t t 2 f 16 "700 701" 100 0 0 100 float48ge - )); DESCR("greater-than-or-equal"); -DATA(insert OID = 305 ( float84eq PGUID 11 f t t t 2 f 16 "701 700" 100 0 0 100 float84eq - )); +DATA(insert OID = 305 ( float84eq PGUID 12 f t t t 2 f 16 "701 700" 100 0 0 100 float84eq - )); DESCR("equal"); -DATA(insert OID = 306 ( float84ne PGUID 11 f t t t 2 f 16 "701 700" 100 0 0 100 float84ne - )); +DATA(insert OID = 306 ( float84ne PGUID 12 f t t t 2 f 16 "701 700" 100 0 0 100 float84ne - )); DESCR("not equal"); -DATA(insert OID = 307 ( float84lt PGUID 11 f t t t 2 f 16 "701 700" 100 0 0 100 float84lt - )); +DATA(insert OID = 307 ( float84lt PGUID 12 f t t t 2 f 16 "701 700" 100 0 0 100 float84lt - )); DESCR("less-than"); -DATA(insert OID = 308 ( float84le PGUID 11 f t t t 2 f 16 "701 700" 100 0 0 100 float84le - )); +DATA(insert OID = 308 ( float84le PGUID 12 f t t t 2 f 16 "701 700" 100 0 0 100 float84le - )); DESCR("less-than-or-equal"); -DATA(insert OID = 309 ( float84gt PGUID 11 f t t t 2 f 16 "701 700" 100 0 0 100 float84gt - )); +DATA(insert OID = 309 ( float84gt PGUID 12 f t t t 2 f 16 "701 700" 100 0 0 100 float84gt - )); DESCR("greater-than"); -DATA(insert OID = 310 ( float84ge PGUID 11 f t t t 2 f 16 "701 700" 100 0 0 100 float84ge - )); +DATA(insert OID = 310 ( float84ge PGUID 12 f t t t 2 f 16 "701 700" 100 0 0 100 float84ge - )); DESCR("greater-than-or-equal"); -DATA(insert OID = 311 ( float8 PGUID 11 f t t t 1 f 701 "700" 100 0 0 100 ftod - )); +DATA(insert OID = 311 ( float8 PGUID 12 f t t t 1 f 701 "700" 100 0 0 100 ftod - )); DESCR("convert float4 to float8"); -DATA(insert OID = 312 ( float4 PGUID 11 f t t t 1 f 700 "701" 100 0 0 100 dtof - )); +DATA(insert OID = 312 ( float4 PGUID 12 f t t t 1 f 700 "701" 100 0 0 100 dtof - )); DESCR("convert float8 to float4"); DATA(insert OID = 313 ( int4 PGUID 12 f t t t 1 f 23 "21" 100 0 0 100 i2toi4 - )); DESCR("convert int2 to int4"); @@ -662,11 +662,11 @@ DATA(insert OID = 315 ( int2vectoreq PGUID 12 f t t t 2 f 16 "22 22" 100 0 DESCR("equal"); DATA(insert OID = 316 ( float8 PGUID 12 f t t t 1 f 701 "23" 100 0 0 100 i4tod - )); DESCR("convert int4 to float8"); -DATA(insert OID = 317 ( int4 PGUID 11 f t t t 1 f 23 "701" 100 0 0 100 dtoi4 - )); +DATA(insert OID = 317 ( int4 PGUID 12 f t t t 1 f 23 "701" 100 0 0 100 dtoi4 - )); DESCR("convert float8 to int4"); DATA(insert OID = 318 ( float4 PGUID 12 f t t t 1 f 700 "23" 100 0 0 100 i4tof - )); DESCR("convert int4 to float4"); -DATA(insert OID = 319 ( int4 PGUID 11 f t t t 1 f 23 "700" 100 0 0 100 ftoi4 - )); +DATA(insert OID = 319 ( int4 PGUID 12 f t t t 1 f 23 "700" 100 0 0 100 ftoi4 - )); DESCR("convert float4 to int4"); DATA(insert OID = 320 ( rtinsert PGUID 12 f t f t 5 f 23 "0 0 0 0 0" 100 0 0 100 rtinsert - )); @@ -842,9 +842,9 @@ DESCR("(internal)"); DATA(insert OID = 462 ( int8um PGUID 12 f t t t 1 f 20 "20" 100 0 0 100 int8um - )); DESCR("negate"); DATA(insert OID = 463 ( int8pl PGUID 12 f t t t 2 f 20 "20 20" 100 0 0 100 int8pl - )); -DESCR("addition"); +DESCR("add"); DATA(insert OID = 464 ( int8mi PGUID 12 f t t t 2 f 20 "20 20" 100 0 0 100 int8mi - )); -DESCR("subtraction"); +DESCR("subtract"); DATA(insert OID = 465 ( int8mul PGUID 12 f t t t 2 f 20 "20 20" 100 0 0 100 int8mul - )); DESCR("multiply"); DATA(insert OID = 466 ( int8div PGUID 12 f t t t 2 f 20 "20 20" 100 0 0 100 int8div - )); @@ -1058,11 +1058,11 @@ DESCR("convert float8 to text"); DATA(insert OID = 841 ( text PGUID 12 f t t t 1 f 25 "700" 100 0 0 100 float4_text -)); DESCR("convert float4 to text"); -DATA(insert OID = 846 ( cash_mul_flt4 PGUID 11 f t t t 2 f 790 "790 700" 100 0 0 100 cash_mul_flt4 - )); +DATA(insert OID = 846 ( cash_mul_flt4 PGUID 12 f t t t 2 f 790 "790 700" 100 0 0 100 cash_mul_flt4 - )); DESCR("multiply"); -DATA(insert OID = 847 ( cash_div_flt4 PGUID 11 f t t t 2 f 790 "790 700" 100 0 0 100 cash_div_flt4 - )); +DATA(insert OID = 847 ( cash_div_flt4 PGUID 12 f t t t 2 f 790 "790 700" 100 0 0 100 cash_div_flt4 - )); DESCR("divide"); -DATA(insert OID = 848 ( flt4_mul_cash PGUID 11 f t t t 2 f 790 "700 790" 100 0 0 100 flt4_mul_cash - )); +DATA(insert OID = 848 ( flt4_mul_cash PGUID 12 f t t t 2 f 790 "700 790" 100 0 0 100 flt4_mul_cash - )); DESCR("multiply"); DATA(insert OID = 849 ( position PGUID 12 f t t t 2 f 23 "25 25" 100 0 1 0 textpos - )); @@ -1127,19 +1127,19 @@ DESCR("greater-than"); DATA(insert OID = 893 ( cash_ge PGUID 11 f t t t 2 f 16 "790 790" 100 0 0 100 cash_ge - )); DESCR("greater-than-or-equal"); DATA(insert OID = 894 ( cash_pl PGUID 11 f t t t 2 f 790 "790 790" 100 0 0 100 cash_pl - )); -DESCR("addition"); +DESCR("add"); DATA(insert OID = 895 ( cash_mi PGUID 11 f t t t 2 f 790 "790 790" 100 0 0 100 cash_mi - )); DESCR("subtract"); -DATA(insert OID = 896 ( cash_mul_flt8 PGUID 11 f t t t 2 f 790 "790 701" 100 0 0 100 cash_mul_flt8 - )); +DATA(insert OID = 896 ( cash_mul_flt8 PGUID 12 f t t t 2 f 790 "790 701" 100 0 0 100 cash_mul_flt8 - )); DESCR("multiply"); -DATA(insert OID = 897 ( cash_div_flt8 PGUID 11 f t t t 2 f 790 "790 701" 100 0 0 100 cash_div_flt8 - )); +DATA(insert OID = 897 ( cash_div_flt8 PGUID 12 f t t t 2 f 790 "790 701" 100 0 0 100 cash_div_flt8 - )); DESCR("divide"); DATA(insert OID = 898 ( cashlarger PGUID 11 f t t t 2 f 790 "790 790" 100 0 0 100 cashlarger - )); DESCR("larger of two"); DATA(insert OID = 899 ( cashsmaller PGUID 11 f t t t 2 f 790 "790 790" 100 0 0 100 cashsmaller - )); DESCR("smaller of two"); -DATA(insert OID = 919 ( flt8_mul_cash PGUID 11 f t t t 2 f 790 "701 790" 100 0 0 100 flt8_mul_cash - )); +DATA(insert OID = 919 ( flt8_mul_cash PGUID 12 f t t t 2 f 790 "701 790" 100 0 0 100 flt8_mul_cash - )); DESCR("multiply"); /* OIDS 900 - 999 */ @@ -1348,7 +1348,7 @@ DESCR("smaller of two"); DATA(insert OID = 1140 ( date_mi PGUID 12 f t t t 2 f 23 "1082 1082" 100 0 0 100 date_mi - )); DESCR("subtract"); DATA(insert OID = 1141 ( date_pli PGUID 12 f t t t 2 f 1082 "1082 23" 100 0 0 100 date_pli - )); -DESCR("addition"); +DESCR("add"); DATA(insert OID = 1142 ( date_mii PGUID 12 f t t t 2 f 1082 "1082 23" 100 0 0 100 date_mii - )); DESCR("subtract"); DATA(insert OID = 1143 ( time_in PGUID 12 f t f t 1 f 1083 "0" 100 0 0 100 time_in - )); @@ -1359,7 +1359,7 @@ DATA(insert OID = 1145 ( time_eq PGUID 12 f t t t 2 f 16 "1083 1083" 100 0 DESCR("equal"); DATA(insert OID = 1146 ( circle_add_pt PGUID 12 f t t t 2 f 718 "718 600" 100 0 0 100 circle_add_pt - )); -DESCR("addition"); +DESCR("add"); DATA(insert OID = 1147 ( circle_sub_pt PGUID 12 f t t t 2 f 718 "718 600" 100 0 0 100 circle_sub_pt - )); DESCR("subtract"); DATA(insert OID = 1148 ( circle_mul_pt PGUID 12 f t t t 2 f 718 "718 600" 100 0 0 100 circle_mul_pt - )); @@ -1405,7 +1405,7 @@ DESCR("greater-than"); DATA(insert OID = 1168 ( interval_um PGUID 12 f t f t 1 f 1186 "1186" 100 0 0 100 interval_um - )); DESCR("subtract"); DATA(insert OID = 1169 ( interval_pl PGUID 12 f t f t 2 f 1186 "1186 1186" 100 0 0 100 interval_pl - )); -DESCR("addition"); +DESCR("add"); DATA(insert OID = 1170 ( interval_mi PGUID 12 f t f t 2 f 1186 "1186 1186" 100 0 0 100 interval_mi - )); DESCR("subtract"); DATA(insert OID = 1171 ( date_part PGUID 12 f t f t 2 f 701 "25 1184" 100 0 0 100 timestamp_part - )); @@ -1494,17 +1494,17 @@ DATA(insert OID = 1272 ( datetime_pl PGUID 12 f t f t 2 f 1184 "1082 1083" 1 DESCR("convert date and time to timestamp"); DATA(insert OID = 1274 ( int84pl PGUID 12 f t t t 2 f 20 "20 23" 100 0 0 100 int84pl - )); -DESCR("addition"); +DESCR("add"); DATA(insert OID = 1275 ( int84mi PGUID 12 f t t t 2 f 20 "20 23" 100 0 0 100 int84mi - )); -DESCR("subtraction"); +DESCR("subtract"); DATA(insert OID = 1276 ( int84mul PGUID 12 f t t t 2 f 20 "20 23" 100 0 0 100 int84mul - )); DESCR("multiply"); DATA(insert OID = 1277 ( int84div PGUID 12 f t t t 2 f 20 "20 23" 100 0 0 100 int84div - )); DESCR("divide"); DATA(insert OID = 1278 ( int48pl PGUID 12 f t t t 2 f 20 "23 20" 100 0 0 100 int48pl - )); -DESCR("addition"); +DESCR("add"); DATA(insert OID = 1279 ( int48mi PGUID 12 f t t t 2 f 20 "23 20" 100 0 0 100 int48mi - )); -DESCR("subtraction"); +DESCR("subtract"); DATA(insert OID = 1280 ( int48mul PGUID 12 f t t t 2 f 20 "23 20" 100 0 0 100 int48mul - )); DESCR("multiply"); DATA(insert OID = 1281 ( int48div PGUID 12 f t t t 2 f 20 "23 20" 100 0 0 100 int48div - )); @@ -1582,23 +1582,23 @@ DESCR("character length"); DATA(insert OID = 1326 ( interval_div PGUID 12 f t f t 2 f 1186 "1186 701" 100 0 0 100 interval_div - )); DESCR("divide"); -DATA(insert OID = 1339 ( dlog10 PGUID 11 f t t t 1 f 701 "701" 100 0 0 100 dlog10 - )); +DATA(insert OID = 1339 ( dlog10 PGUID 12 f t t t 1 f 701 "701" 100 0 0 100 dlog10 - )); DESCR("base 10 logarithm"); -DATA(insert OID = 1340 ( log PGUID 11 f t t t 1 f 701 "701" 100 0 0 100 dlog10 - )); +DATA(insert OID = 1340 ( log PGUID 12 f t t t 1 f 701 "701" 100 0 0 100 dlog10 - )); DESCR("base 10 logarithm"); -DATA(insert OID = 1341 ( ln PGUID 11 f t t t 1 f 701 "701" 100 0 0 100 dlog1 - )); +DATA(insert OID = 1341 ( ln PGUID 12 f t t t 1 f 701 "701" 100 0 0 100 dlog1 - )); DESCR("natural logarithm"); -DATA(insert OID = 1342 ( round PGUID 11 f t t t 1 f 701 "701" 100 0 0 100 dround - )); -DESCR("round to integral part"); -DATA(insert OID = 1343 ( trunc PGUID 11 f t t t 1 f 701 "701" 100 0 0 100 dtrunc - )); -DESCR("truncate to integral part"); -DATA(insert OID = 1344 ( sqrt PGUID 11 f t t t 1 f 701 "701" 100 0 0 100 dsqrt - )); +DATA(insert OID = 1342 ( round PGUID 12 f t t t 1 f 701 "701" 100 0 0 100 dround - )); +DESCR("round to nearest integer"); +DATA(insert OID = 1343 ( trunc PGUID 12 f t t t 1 f 701 "701" 100 0 0 100 dtrunc - )); +DESCR("truncate to integer"); +DATA(insert OID = 1344 ( sqrt PGUID 12 f t t t 1 f 701 "701" 100 0 0 100 dsqrt - )); DESCR("square root"); -DATA(insert OID = 1345 ( cbrt PGUID 11 f t t t 1 f 701 "701" 100 0 0 100 dcbrt - )); +DATA(insert OID = 1345 ( cbrt PGUID 12 f t t t 1 f 701 "701" 100 0 0 100 dcbrt - )); DESCR("cube root"); -DATA(insert OID = 1346 ( pow PGUID 11 f t t t 2 f 701 "701 701" 100 0 0 100 dpow - )); +DATA(insert OID = 1346 ( pow PGUID 12 f t t t 2 f 701 "701 701" 100 0 0 100 dpow - )); DESCR("exponentiation"); -DATA(insert OID = 1347 ( exp PGUID 11 f t t t 1 f 701 "701" 100 0 0 100 dexp - )); +DATA(insert OID = 1347 ( exp PGUID 12 f t t t 1 f 701 "701" 100 0 0 100 dexp - )); DESCR("exponential"); DATA(insert OID = 1348 ( obj_description PGUID 14 f t f t 1 f 25 "26" 100 0 0 100 "select description from pg_description where objoid = $1" - )); @@ -1696,9 +1696,9 @@ DATA(insert OID = 1392 ( factorial PGUID 12 f t t t 1 f 23 "23" 100 0 0 100 DESCR("factorial"); DATA(insert OID = 1393 ( factorial PGUID 12 f t t t 1 f 20 "20" 100 0 0 100 int8fac - )); DESCR("factorial"); -DATA(insert OID = 1394 ( abs PGUID 11 f t t t 1 f 700 "700" 100 0 0 100 float4abs - )); +DATA(insert OID = 1394 ( abs PGUID 12 f t t t 1 f 700 "700" 100 0 0 100 float4abs - )); DESCR("absolute value"); -DATA(insert OID = 1395 ( abs PGUID 11 f t t t 1 f 701 "701" 100 0 0 100 float8abs - )); +DATA(insert OID = 1395 ( abs PGUID 12 f t t t 1 f 701 "701" 100 0 0 100 float8abs - )); DESCR("absolute value"); DATA(insert OID = 1396 ( abs PGUID 12 f t t t 1 f 20 "20" 100 0 0 100 int8abs - )); DESCR("absolute value"); @@ -1993,34 +1993,34 @@ DESCR("less than"); DATA(insert OID = 1596 ( bitcmp PGUID 11 f t t t 2 f 23 "1560 1560" 100 0 1 0 bitcmp - )); DESCR("compare"); -DATA(insert OID = 1598 ( random PGUID 11 f t f t 0 f 701 "0" 100 0 0 100 drandom - )); -DESCR("radians to degrees"); -DATA(insert OID = 1599 ( setseed PGUID 11 f t t t 1 f 23 "701" 100 0 0 100 setseed - )); -DESCR("radians to degrees"); +DATA(insert OID = 1598 ( random PGUID 12 f t f t 0 f 701 "0" 100 0 0 100 drandom - )); +DESCR("random value"); +DATA(insert OID = 1599 ( setseed PGUID 12 f t f t 1 f 23 "701" 100 0 0 100 setseed - )); +DESCR("set random seed"); /* OIDS 1600 - 1699 */ -DATA(insert OID = 1600 ( asin PGUID 11 f t t t 1 f 701 "701" 100 0 0 100 dasin - )); +DATA(insert OID = 1600 ( asin PGUID 12 f t t t 1 f 701 "701" 100 0 0 100 dasin - )); DESCR("arcsine"); -DATA(insert OID = 1601 ( acos PGUID 11 f t t t 1 f 701 "701" 100 0 0 100 dacos - )); -DESCR("arcsine"); -DATA(insert OID = 1602 ( atan PGUID 11 f t t t 1 f 701 "701" 100 0 0 100 datan - )); +DATA(insert OID = 1601 ( acos PGUID 12 f t t t 1 f 701 "701" 100 0 0 100 dacos - )); +DESCR("arccosine"); +DATA(insert OID = 1602 ( atan PGUID 12 f t t t 1 f 701 "701" 100 0 0 100 datan - )); DESCR("arctangent"); -DATA(insert OID = 1603 ( atan2 PGUID 11 f t t t 2 f 701 "701 701" 100 0 0 100 datan2 - )); +DATA(insert OID = 1603 ( atan2 PGUID 12 f t t t 2 f 701 "701 701" 100 0 0 100 datan2 - )); DESCR("arctangent, two arguments"); -DATA(insert OID = 1604 ( sin PGUID 11 f t t t 1 f 701 "701" 100 0 0 100 dsin - )); +DATA(insert OID = 1604 ( sin PGUID 12 f t t t 1 f 701 "701" 100 0 0 100 dsin - )); DESCR("sine"); -DATA(insert OID = 1605 ( cos PGUID 11 f t t t 1 f 701 "701" 100 0 0 100 dcos - )); +DATA(insert OID = 1605 ( cos PGUID 12 f t t t 1 f 701 "701" 100 0 0 100 dcos - )); DESCR("cosine"); -DATA(insert OID = 1606 ( tan PGUID 11 f t t t 1 f 701 "701" 100 0 0 100 dtan - )); +DATA(insert OID = 1606 ( tan PGUID 12 f t t t 1 f 701 "701" 100 0 0 100 dtan - )); DESCR("tangent"); -DATA(insert OID = 1607 ( cot PGUID 11 f t t t 1 f 701 "701" 100 0 0 100 dcot - )); +DATA(insert OID = 1607 ( cot PGUID 12 f t t t 1 f 701 "701" 100 0 0 100 dcot - )); DESCR("cotangent"); -DATA(insert OID = 1608 ( degrees PGUID 11 f t t t 1 f 701 "701" 100 0 0 100 degrees - )); -DESCR("radians to degrees"); -DATA(insert OID = 1609 ( radians PGUID 11 f t t t 1 f 701 "701" 100 0 0 100 radians - )); +DATA(insert OID = 1608 ( degrees PGUID 12 f t t t 1 f 701 "701" 100 0 0 100 degrees - )); DESCR("radians to degrees"); -DATA(insert OID = 1610 ( pi PGUID 11 f t t t 0 f 701 "0" 100 0 0 100 dpi - )); +DATA(insert OID = 1609 ( radians PGUID 12 f t t t 1 f 701 "701" 100 0 0 100 radians - )); +DESCR("degrees to radians"); +DATA(insert OID = 1610 ( pi PGUID 12 f t t t 0 f 701 "0" 100 0 0 100 dpi - )); DESCR("PI"); DATA(insert OID = 1618 ( interval_mul PGUID 12 f t t t 2 f 1186 "1186 701" 100 0 0 100 interval_mul - )); @@ -2295,7 +2295,7 @@ DESCR("lower-than"); DATA(insert OID = 1723 ( numeric_le PGUID 12 f t t t 2 f 16 "1700 1700" 100 0 0 100 numeric_le - )); DESCR("lower-than-or-equal"); DATA(insert OID = 1724 ( numeric_add PGUID 12 f t t t 2 f 1700 "1700 1700" 100 0 0 100 numeric_add - )); -DESCR("addition"); +DESCR("add"); DATA(insert OID = 1725 ( numeric_sub PGUID 12 f t t t 2 f 1700 "1700 1700" 100 0 0 100 numeric_sub - )); DESCR("subtract"); DATA(insert OID = 1726 ( numeric_mul PGUID 12 f t t t 2 f 1700 "1700 1700" 100 0 0 100 numeric_mul - )); diff --git a/src/include/utils/builtins.h b/src/include/utils/builtins.h index dfbc422993935f5d9c0ebe66641d840d8eb9b663..862cea230c51c9a72d7592a2b18f134f31f77243 100644 --- a/src/include/utils/builtins.h +++ b/src/include/utils/builtins.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2000, PostgreSQL, Inc * Portions Copyright (c) 1994, Regents of the University of California * - * $Id: builtins.h,v 1.127 2000/07/30 22:14:04 tgl Exp $ + * $Id: builtins.h,v 1.128 2000/08/01 18:29:31 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -141,19 +141,9 @@ extern int namestrcpy(Name name, const char *str); extern int namestrcmp(Name name, const char *str); /* numutils.c */ -/* XXX hack. HP-UX has a ltoa (with different arguments) already. */ -#ifdef __hpux -#define ltoa pg_ltoa -#endif /* hpux */ extern int32 pg_atoi(char *s, int size, int c); - -/* XXX hack. QNX has itoa and ltoa (with different arguments) already. */ -#ifdef __QNX__ -#define itoa pg_itoa -#define ltoa pg_ltoa -#endif /* QNX */ -extern void itoa(int i, char *a); -extern void ltoa(int32 l, char *a); +extern void pg_itoa(int16 i, char *a); +extern void pg_ltoa(int32 l, char *a); /* * Per-opclass comparison functions for new btrees. These are @@ -172,105 +162,99 @@ extern Datum btcharcmp(PG_FUNCTION_ARGS); extern Datum btnamecmp(PG_FUNCTION_ARGS); extern Datum bttextcmp(PG_FUNCTION_ARGS); -/* filename.c */ -extern char *filename_in(char *file); -extern char *filename_out(char *s); - /* float.c */ -extern float32 float4in(char *num); -extern char *float4out(float32 num); -extern float64 float8in(char *num); -extern char *float8out(float64 num); -extern float32 float4abs(float32 arg1); -extern float32 float4um(float32 arg1); -extern float32 float4larger(float32 arg1, float32 arg2); -extern float32 float4smaller(float32 arg1, float32 arg2); -extern float64 float8abs(float64 arg1); -extern float64 float8um(float64 arg1); -extern float64 float8larger(float64 arg1, float64 arg2); -extern float64 float8smaller(float64 arg1, float64 arg2); -extern float32 float4pl(float32 arg1, float32 arg2); -extern float32 float4mi(float32 arg1, float32 arg2); -extern float32 float4mul(float32 arg1, float32 arg2); -extern float32 float4div(float32 arg1, float32 arg2); -extern float64 float8pl(float64 arg1, float64 arg2); -extern float64 float8mi(float64 arg1, float64 arg2); -extern float64 float8mul(float64 arg1, float64 arg2); -extern float64 float8div(float64 arg1, float64 arg2); -extern bool float4eq(float32 arg1, float32 arg2); -extern bool float4ne(float32 arg1, float32 arg2); -extern bool float4lt(float32 arg1, float32 arg2); -extern bool float4le(float32 arg1, float32 arg2); -extern bool float4gt(float32 arg1, float32 arg2); -extern bool float4ge(float32 arg1, float32 arg2); -extern bool float8eq(float64 arg1, float64 arg2); -extern bool float8ne(float64 arg1, float64 arg2); -extern bool float8lt(float64 arg1, float64 arg2); -extern bool float8le(float64 arg1, float64 arg2); -extern bool float8gt(float64 arg1, float64 arg2); -extern bool float8ge(float64 arg1, float64 arg2); -extern float64 ftod(float32 num); +extern Datum float4in(PG_FUNCTION_ARGS); +extern Datum float4out(PG_FUNCTION_ARGS); +extern Datum float8in(PG_FUNCTION_ARGS); +extern Datum float8out(PG_FUNCTION_ARGS); +extern Datum float4abs(PG_FUNCTION_ARGS); +extern Datum float4um(PG_FUNCTION_ARGS); +extern Datum float4larger(PG_FUNCTION_ARGS); +extern Datum float4smaller(PG_FUNCTION_ARGS); +extern Datum float8abs(PG_FUNCTION_ARGS); +extern Datum float8um(PG_FUNCTION_ARGS); +extern Datum float8larger(PG_FUNCTION_ARGS); +extern Datum float8smaller(PG_FUNCTION_ARGS); +extern Datum float4pl(PG_FUNCTION_ARGS); +extern Datum float4mi(PG_FUNCTION_ARGS); +extern Datum float4mul(PG_FUNCTION_ARGS); +extern Datum float4div(PG_FUNCTION_ARGS); +extern Datum float8pl(PG_FUNCTION_ARGS); +extern Datum float8mi(PG_FUNCTION_ARGS); +extern Datum float8mul(PG_FUNCTION_ARGS); +extern Datum float8div(PG_FUNCTION_ARGS); +extern Datum float4eq(PG_FUNCTION_ARGS); +extern Datum float4ne(PG_FUNCTION_ARGS); +extern Datum float4lt(PG_FUNCTION_ARGS); +extern Datum float4le(PG_FUNCTION_ARGS); +extern Datum float4gt(PG_FUNCTION_ARGS); +extern Datum float4ge(PG_FUNCTION_ARGS); +extern Datum float8eq(PG_FUNCTION_ARGS); +extern Datum float8ne(PG_FUNCTION_ARGS); +extern Datum float8lt(PG_FUNCTION_ARGS); +extern Datum float8le(PG_FUNCTION_ARGS); +extern Datum float8gt(PG_FUNCTION_ARGS); +extern Datum float8ge(PG_FUNCTION_ARGS); +extern Datum ftod(PG_FUNCTION_ARGS); extern Datum i4tod(PG_FUNCTION_ARGS); extern Datum i2tod(PG_FUNCTION_ARGS); -extern float32 dtof(float64 num); -extern int32 dtoi4(float64 num); +extern Datum dtof(PG_FUNCTION_ARGS); +extern Datum dtoi4(PG_FUNCTION_ARGS); extern Datum dtoi2(PG_FUNCTION_ARGS); extern Datum i4tof(PG_FUNCTION_ARGS); extern Datum i2tof(PG_FUNCTION_ARGS); -extern int32 ftoi4(float32 num); +extern Datum ftoi4(PG_FUNCTION_ARGS); extern Datum ftoi2(PG_FUNCTION_ARGS); extern Datum text_float8(PG_FUNCTION_ARGS); extern Datum text_float4(PG_FUNCTION_ARGS); extern Datum float8_text(PG_FUNCTION_ARGS); extern Datum float4_text(PG_FUNCTION_ARGS); -extern float64 dround(float64 arg1); -extern float64 dtrunc(float64 arg1); -extern float64 dsqrt(float64 arg1); -extern float64 dcbrt(float64 arg1); -extern float64 dpow(float64 arg1, float64 arg2); -extern float64 dexp(float64 arg1); -extern float64 dlog1(float64 arg1); -extern float64 dlog10(float64 arg1); -extern float64 dacos(float64 arg1); -extern float64 dasin(float64 arg1); -extern float64 datan(float64 arg1); -extern float64 datan2(float64 arg1, float64 arg2); -extern float64 dcos(float64 arg1); -extern float64 dcot(float64 arg1); -extern float64 dsin(float64 arg1); -extern float64 dtan(float64 arg1); -extern float64 degrees(float64 arg1); -extern float64 dpi(void); -extern float64 radians(float64 arg1); -extern float64 dtan(float64 arg1); -extern float64 drandom(void); -extern int32 setseed(float64 seed); +extern Datum dround(PG_FUNCTION_ARGS); +extern Datum dtrunc(PG_FUNCTION_ARGS); +extern Datum dsqrt(PG_FUNCTION_ARGS); +extern Datum dcbrt(PG_FUNCTION_ARGS); +extern Datum dpow(PG_FUNCTION_ARGS); +extern Datum dexp(PG_FUNCTION_ARGS); +extern Datum dlog1(PG_FUNCTION_ARGS); +extern Datum dlog10(PG_FUNCTION_ARGS); +extern Datum dacos(PG_FUNCTION_ARGS); +extern Datum dasin(PG_FUNCTION_ARGS); +extern Datum datan(PG_FUNCTION_ARGS); +extern Datum datan2(PG_FUNCTION_ARGS); +extern Datum dcos(PG_FUNCTION_ARGS); +extern Datum dcot(PG_FUNCTION_ARGS); +extern Datum dsin(PG_FUNCTION_ARGS); +extern Datum dtan(PG_FUNCTION_ARGS); +extern Datum degrees(PG_FUNCTION_ARGS); +extern Datum dpi(PG_FUNCTION_ARGS); +extern Datum radians(PG_FUNCTION_ARGS); +extern Datum drandom(PG_FUNCTION_ARGS); +extern Datum setseed(PG_FUNCTION_ARGS); extern Datum float8_accum(PG_FUNCTION_ARGS); extern Datum float4_accum(PG_FUNCTION_ARGS); extern Datum float8_avg(PG_FUNCTION_ARGS); extern Datum float8_variance(PG_FUNCTION_ARGS); extern Datum float8_stddev(PG_FUNCTION_ARGS); - -extern float64 float48pl(float32 arg1, float64 arg2); -extern float64 float48mi(float32 arg1, float64 arg2); -extern float64 float48mul(float32 arg1, float64 arg2); -extern float64 float48div(float32 arg1, float64 arg2); -extern float64 float84pl(float64 arg1, float32 arg2); -extern float64 float84mi(float64 arg1, float32 arg2); -extern float64 float84mul(float64 arg1, float32 arg2); -extern float64 float84div(float64 arg1, float32 arg2); -extern bool float48eq(float32 arg1, float64 arg2); -extern bool float48ne(float32 arg1, float64 arg2); -extern bool float48lt(float32 arg1, float64 arg2); -extern bool float48le(float32 arg1, float64 arg2); -extern bool float48gt(float32 arg1, float64 arg2); -extern bool float48ge(float32 arg1, float64 arg2); -extern bool float84eq(float64 arg1, float32 arg2); -extern bool float84ne(float64 arg1, float32 arg2); -extern bool float84lt(float64 arg1, float32 arg2); -extern bool float84le(float64 arg1, float32 arg2); -extern bool float84gt(float64 arg1, float32 arg2); -extern bool float84ge(float64 arg1, float32 arg2); +extern Datum float48pl(PG_FUNCTION_ARGS); +extern Datum float48mi(PG_FUNCTION_ARGS); +extern Datum float48mul(PG_FUNCTION_ARGS); +extern Datum float48div(PG_FUNCTION_ARGS); +extern Datum float84pl(PG_FUNCTION_ARGS); +extern Datum float84mi(PG_FUNCTION_ARGS); +extern Datum float84mul(PG_FUNCTION_ARGS); +extern Datum float84div(PG_FUNCTION_ARGS); +extern Datum float48eq(PG_FUNCTION_ARGS); +extern Datum float48ne(PG_FUNCTION_ARGS); +extern Datum float48lt(PG_FUNCTION_ARGS); +extern Datum float48le(PG_FUNCTION_ARGS); +extern Datum float48gt(PG_FUNCTION_ARGS); +extern Datum float48ge(PG_FUNCTION_ARGS); +extern Datum float84eq(PG_FUNCTION_ARGS); +extern Datum float84ne(PG_FUNCTION_ARGS); +extern Datum float84lt(PG_FUNCTION_ARGS); +extern Datum float84le(PG_FUNCTION_ARGS); +extern Datum float84gt(PG_FUNCTION_ARGS); +extern Datum float84ge(PG_FUNCTION_ARGS); /* misc.c */ extern Datum nullvalue(PG_FUNCTION_ARGS); diff --git a/src/include/utils/cash.h b/src/include/utils/cash.h index cc612961d2954f132123aab06fc315c15bb72c0d..4a5829b090c65d06bd33b4919b150541f13286e6 100644 --- a/src/include/utils/cash.h +++ b/src/include/utils/cash.h @@ -25,13 +25,13 @@ extern bool cash_ge(Cash *c1, Cash *c2); extern Cash *cash_pl(Cash *c1, Cash *c2); extern Cash *cash_mi(Cash *c1, Cash *c2); -extern Cash *cash_mul_flt8(Cash *c, float8 *f); -extern Cash *cash_div_flt8(Cash *c, float8 *f); -extern Cash *flt8_mul_cash(float8 *f, Cash *c); +extern Datum cash_mul_flt8(PG_FUNCTION_ARGS); +extern Datum cash_div_flt8(PG_FUNCTION_ARGS); +extern Datum flt8_mul_cash(PG_FUNCTION_ARGS); -extern Cash *cash_mul_flt4(Cash *c, float4 *f); -extern Cash *cash_div_flt4(Cash *c, float4 *f); -extern Cash *flt4_mul_cash(float4 *f, Cash *c); +extern Datum cash_mul_flt4(PG_FUNCTION_ARGS); +extern Datum cash_div_flt4(PG_FUNCTION_ARGS); +extern Datum flt4_mul_cash(PG_FUNCTION_ARGS); extern Datum cash_mul_int4(PG_FUNCTION_ARGS); extern Datum cash_div_int4(PG_FUNCTION_ARGS);