summaryrefslogtreecommitdiff
path: root/src/backend/utils/adt/int8.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/utils/adt/int8.c')
-rw-r--r--src/backend/utils/adt/int8.c817
1 files changed, 0 insertions, 817 deletions
diff --git a/src/backend/utils/adt/int8.c b/src/backend/utils/adt/int8.c
deleted file mode 100644
index 33e0b41fe59..00000000000
--- a/src/backend/utils/adt/int8.c
+++ /dev/null
@@ -1,817 +0,0 @@
-/*-------------------------------------------------------------------------
- *
- * int8.c
- * Internal 64-bit integer operations
- *
- * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
- * Portions Copyright (c) 1994, Regents of the University of California
- *
- * IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/adt/int8.c,v 1.40 2002/06/20 20:29:37 momjian Exp $
- *
- *-------------------------------------------------------------------------
- */
-#include "postgres.h"
-
-#include <ctype.h>
-#include <time.h>
-#include <math.h>
-#include <float.h>
-#include <limits.h>
-
-#include "utils/int8.h"
-
-
-#define MAXINT8LEN 25
-
-#ifndef INT_MAX
-#define INT_MAX (0x7FFFFFFFL)
-#endif
-#ifndef INT_MIN
-#define INT_MIN (-INT_MAX-1)
-#endif
-#ifndef SHRT_MAX
-#define SHRT_MAX (0x7FFF)
-#endif
-#ifndef SHRT_MIN
-#define SHRT_MIN (-SHRT_MAX-1)
-#endif
-
-
-/***********************************************************************
- **
- ** Routines for 64-bit integers.
- **
- ***********************************************************************/
-
-/*----------------------------------------------------------
- * Formatting and conversion routines.
- *---------------------------------------------------------*/
-
-/* int8in()
- */
-Datum
-int8in(PG_FUNCTION_ARGS)
-{
- char *str = PG_GETARG_CSTRING(0);
- int64 result;
- char *ptr = str;
- int64 tmp = 0;
- int sign = 1;
-
- /*
- * Do our own scan, rather than relying on sscanf which might be
- * broken for long long.
- */
- while (*ptr && isspace((unsigned char) *ptr)) /* skip leading spaces */
- ptr++;
- /* handle sign */
- if (*ptr == '-')
- {
- ptr++;
- sign = -1;
- /*
- * Do an explicit check for INT64_MIN. Ugly though this is, it's
- * cleaner than trying to get the loop below to handle it portably.
- */
-#ifndef INT64_IS_BUSTED
- if (strcmp(ptr, "9223372036854775808") == 0)
- {
- result = - INT64CONST(0x7fffffffffffffff) - 1;
- PG_RETURN_INT64(result);
- }
-#endif
- }
- else if (*ptr == '+')
- ptr++;
- if (!isdigit((unsigned char) *ptr)) /* require at least one digit */
- elog(ERROR, "Bad int8 external representation \"%s\"", str);
- while (*ptr && isdigit((unsigned char) *ptr)) /* process digits */
- {
- int64 newtmp = tmp * 10 + (*ptr++ - '0');
-
- if ((newtmp / 10) != tmp) /* overflow? */
- elog(ERROR, "int8 value out of range: \"%s\"", str);
- tmp = newtmp;
- }
- if (*ptr) /* trailing junk? */
- elog(ERROR, "Bad int8 external representation \"%s\"", str);
-
- result = (sign < 0) ? -tmp : tmp;
-
- PG_RETURN_INT64(result);
-}
-
-
-/* int8out()
- */
-Datum
-int8out(PG_FUNCTION_ARGS)
-{
- int64 val = PG_GETARG_INT64(0);
- char *result;
- int len;
- char buf[MAXINT8LEN + 1];
-
- if ((len = snprintf(buf, MAXINT8LEN, INT64_FORMAT, val)) < 0)
- elog(ERROR, "Unable to format int8");
-
- result = pstrdup(buf);
- PG_RETURN_CSTRING(result);
-}
-
-
-/*----------------------------------------------------------
- * Relational operators for int8s, including cross-data-type comparisons.
- *---------------------------------------------------------*/
-
-/* int8relop()
- * Is val1 relop val2?
- */
-Datum
-int8eq(PG_FUNCTION_ARGS)
-{
- int64 val1 = PG_GETARG_INT64(0);
- int64 val2 = PG_GETARG_INT64(1);
-
- PG_RETURN_BOOL(val1 == val2);
-}
-
-Datum
-int8ne(PG_FUNCTION_ARGS)
-{
- int64 val1 = PG_GETARG_INT64(0);
- int64 val2 = PG_GETARG_INT64(1);
-
- PG_RETURN_BOOL(val1 != val2);
-}
-
-Datum
-int8lt(PG_FUNCTION_ARGS)
-{
- int64 val1 = PG_GETARG_INT64(0);
- int64 val2 = PG_GETARG_INT64(1);
-
- PG_RETURN_BOOL(val1 < val2);
-}
-
-Datum
-int8gt(PG_FUNCTION_ARGS)
-{
- int64 val1 = PG_GETARG_INT64(0);
- int64 val2 = PG_GETARG_INT64(1);
-
- PG_RETURN_BOOL(val1 > val2);
-}
-
-Datum
-int8le(PG_FUNCTION_ARGS)
-{
- int64 val1 = PG_GETARG_INT64(0);
- int64 val2 = PG_GETARG_INT64(1);
-
- PG_RETURN_BOOL(val1 <= val2);
-}
-
-Datum
-int8ge(PG_FUNCTION_ARGS)
-{
- int64 val1 = PG_GETARG_INT64(0);
- int64 val2 = PG_GETARG_INT64(1);
-
- PG_RETURN_BOOL(val1 >= val2);
-}
-
-/* int84relop()
- * Is 64-bit val1 relop 32-bit val2?
- */
-Datum
-int84eq(PG_FUNCTION_ARGS)
-{
- int64 val1 = PG_GETARG_INT64(0);
- int32 val2 = PG_GETARG_INT32(1);
-
- PG_RETURN_BOOL(val1 == val2);
-}
-
-Datum
-int84ne(PG_FUNCTION_ARGS)
-{
- int64 val1 = PG_GETARG_INT64(0);
- int32 val2 = PG_GETARG_INT32(1);
-
- PG_RETURN_BOOL(val1 != val2);
-}
-
-Datum
-int84lt(PG_FUNCTION_ARGS)
-{
- int64 val1 = PG_GETARG_INT64(0);
- int32 val2 = PG_GETARG_INT32(1);
-
- PG_RETURN_BOOL(val1 < val2);
-}
-
-Datum
-int84gt(PG_FUNCTION_ARGS)
-{
- int64 val1 = PG_GETARG_INT64(0);
- int32 val2 = PG_GETARG_INT32(1);
-
- PG_RETURN_BOOL(val1 > val2);
-}
-
-Datum
-int84le(PG_FUNCTION_ARGS)
-{
- int64 val1 = PG_GETARG_INT64(0);
- int32 val2 = PG_GETARG_INT32(1);
-
- PG_RETURN_BOOL(val1 <= val2);
-}
-
-Datum
-int84ge(PG_FUNCTION_ARGS)
-{
- int64 val1 = PG_GETARG_INT64(0);
- int32 val2 = PG_GETARG_INT32(1);
-
- PG_RETURN_BOOL(val1 >= val2);
-}
-
-/* int48relop()
- * Is 32-bit val1 relop 64-bit val2?
- */
-Datum
-int48eq(PG_FUNCTION_ARGS)
-{
- int32 val1 = PG_GETARG_INT32(0);
- int64 val2 = PG_GETARG_INT64(1);
-
- PG_RETURN_BOOL(val1 == val2);
-}
-
-Datum
-int48ne(PG_FUNCTION_ARGS)
-{
- int32 val1 = PG_GETARG_INT32(0);
- int64 val2 = PG_GETARG_INT64(1);
-
- PG_RETURN_BOOL(val1 != val2);
-}
-
-Datum
-int48lt(PG_FUNCTION_ARGS)
-{
- int32 val1 = PG_GETARG_INT32(0);
- int64 val2 = PG_GETARG_INT64(1);
-
- PG_RETURN_BOOL(val1 < val2);
-}
-
-Datum
-int48gt(PG_FUNCTION_ARGS)
-{
- int32 val1 = PG_GETARG_INT32(0);
- int64 val2 = PG_GETARG_INT64(1);
-
- PG_RETURN_BOOL(val1 > val2);
-}
-
-Datum
-int48le(PG_FUNCTION_ARGS)
-{
- int32 val1 = PG_GETARG_INT32(0);
- int64 val2 = PG_GETARG_INT64(1);
-
- PG_RETURN_BOOL(val1 <= val2);
-}
-
-Datum
-int48ge(PG_FUNCTION_ARGS)
-{
- int32 val1 = PG_GETARG_INT32(0);
- int64 val2 = PG_GETARG_INT64(1);
-
- PG_RETURN_BOOL(val1 >= val2);
-}
-
-/* int82relop()
- * Is 64-bit val1 relop 16-bit val2?
- */
-Datum
-int82eq(PG_FUNCTION_ARGS)
-{
- int64 val1 = PG_GETARG_INT64(0);
- int16 val2 = PG_GETARG_INT16(1);
-
- PG_RETURN_BOOL(val1 == val2);
-}
-
-Datum
-int82ne(PG_FUNCTION_ARGS)
-{
- int64 val1 = PG_GETARG_INT64(0);
- int16 val2 = PG_GETARG_INT16(1);
-
- PG_RETURN_BOOL(val1 != val2);
-}
-
-Datum
-int82lt(PG_FUNCTION_ARGS)
-{
- int64 val1 = PG_GETARG_INT64(0);
- int16 val2 = PG_GETARG_INT16(1);
-
- PG_RETURN_BOOL(val1 < val2);
-}
-
-Datum
-int82gt(PG_FUNCTION_ARGS)
-{
- int64 val1 = PG_GETARG_INT64(0);
- int16 val2 = PG_GETARG_INT16(1);
-
- PG_RETURN_BOOL(val1 > val2);
-}
-
-Datum
-int82le(PG_FUNCTION_ARGS)
-{
- int64 val1 = PG_GETARG_INT64(0);
- int16 val2 = PG_GETARG_INT16(1);
-
- PG_RETURN_BOOL(val1 <= val2);
-}
-
-Datum
-int82ge(PG_FUNCTION_ARGS)
-{
- int64 val1 = PG_GETARG_INT64(0);
- int16 val2 = PG_GETARG_INT16(1);
-
- PG_RETURN_BOOL(val1 >= val2);
-}
-
-/* int28relop()
- * Is 16-bit val1 relop 64-bit val2?
- */
-Datum
-int28eq(PG_FUNCTION_ARGS)
-{
- int16 val1 = PG_GETARG_INT16(0);
- int64 val2 = PG_GETARG_INT64(1);
-
- PG_RETURN_BOOL(val1 == val2);
-}
-
-Datum
-int28ne(PG_FUNCTION_ARGS)
-{
- int16 val1 = PG_GETARG_INT16(0);
- int64 val2 = PG_GETARG_INT64(1);
-
- PG_RETURN_BOOL(val1 != val2);
-}
-
-Datum
-int28lt(PG_FUNCTION_ARGS)
-{
- int16 val1 = PG_GETARG_INT16(0);
- int64 val2 = PG_GETARG_INT64(1);
-
- PG_RETURN_BOOL(val1 < val2);
-}
-
-Datum
-int28gt(PG_FUNCTION_ARGS)
-{
- int16 val1 = PG_GETARG_INT16(0);
- int64 val2 = PG_GETARG_INT64(1);
-
- PG_RETURN_BOOL(val1 > val2);
-}
-
-Datum
-int28le(PG_FUNCTION_ARGS)
-{
- int16 val1 = PG_GETARG_INT16(0);
- int64 val2 = PG_GETARG_INT64(1);
-
- PG_RETURN_BOOL(val1 <= val2);
-}
-
-Datum
-int28ge(PG_FUNCTION_ARGS)
-{
- int16 val1 = PG_GETARG_INT16(0);
- int64 val2 = PG_GETARG_INT64(1);
-
- PG_RETURN_BOOL(val1 >= val2);
-}
-
-
-/*----------------------------------------------------------
- * Arithmetic operators on 64-bit integers.
- *---------------------------------------------------------*/
-
-Datum
-int8um(PG_FUNCTION_ARGS)
-{
- int64 val = PG_GETARG_INT64(0);
-
- PG_RETURN_INT64(-val);
-}
-
-Datum
-int8up(PG_FUNCTION_ARGS)
-{
- int64 val = PG_GETARG_INT64(0);
-
- PG_RETURN_INT64(val);
-}
-
-Datum
-int8pl(PG_FUNCTION_ARGS)
-{
- int64 val1 = PG_GETARG_INT64(0);
- int64 val2 = PG_GETARG_INT64(1);
-
- PG_RETURN_INT64(val1 + val2);
-}
-
-Datum
-int8mi(PG_FUNCTION_ARGS)
-{
- int64 val1 = PG_GETARG_INT64(0);
- int64 val2 = PG_GETARG_INT64(1);
-
- PG_RETURN_INT64(val1 - val2);
-}
-
-Datum
-int8mul(PG_FUNCTION_ARGS)
-{
- int64 val1 = PG_GETARG_INT64(0);
- int64 val2 = PG_GETARG_INT64(1);
-
- PG_RETURN_INT64(val1 * val2);
-}
-
-Datum
-int8div(PG_FUNCTION_ARGS)
-{
- int64 val1 = PG_GETARG_INT64(0);
- int64 val2 = PG_GETARG_INT64(1);
-
- PG_RETURN_INT64(val1 / val2);
-}
-
-/* int8abs()
- * Absolute value
- */
-Datum
-int8abs(PG_FUNCTION_ARGS)
-{
- int64 arg1 = PG_GETARG_INT64(0);
-
- PG_RETURN_INT64((arg1 < 0) ? -arg1 : arg1);
-}
-
-/* int8mod()
- * Modulo operation.
- */
-Datum
-int8mod(PG_FUNCTION_ARGS)
-{
- int64 val1 = PG_GETARG_INT64(0);
- int64 val2 = PG_GETARG_INT64(1);
- int64 result;
-
- result = val1 / val2;
- result *= val2;
- result = val1 - result;
-
- PG_RETURN_INT64(result);
-}
-
-/* int8fac()
- * Factorial
- */
-Datum
-int8fac(PG_FUNCTION_ARGS)
-{
- int64 arg1 = PG_GETARG_INT64(0);
- int64 result;
- int64 i;
-
- if (arg1 == 0)
- result = 1;
- else if (arg1 < 1)
- result = 0;
- else
- for (i = arg1, result = 1; i > 0; --i)
- result *= i;
-
- PG_RETURN_INT64(result);
-}
-
-Datum
-int8inc(PG_FUNCTION_ARGS)
-{
- int64 arg = PG_GETARG_INT64(0);
-
- PG_RETURN_INT64(arg + 1);
-}
-
-Datum
-int8larger(PG_FUNCTION_ARGS)
-{
- int64 val1 = PG_GETARG_INT64(0);
- int64 val2 = PG_GETARG_INT64(1);
- int64 result;
-
- result = ((val1 > val2) ? val1 : val2);
-
- PG_RETURN_INT64(result);
-}
-
-Datum
-int8smaller(PG_FUNCTION_ARGS)
-{
- int64 val1 = PG_GETARG_INT64(0);
- int64 val2 = PG_GETARG_INT64(1);
- int64 result;
-
- result = ((val1 < val2) ? val1 : val2);
-
- PG_RETURN_INT64(result);
-}
-
-Datum
-int84pl(PG_FUNCTION_ARGS)
-{
- int64 val1 = PG_GETARG_INT64(0);
- int32 val2 = PG_GETARG_INT32(1);
-
- PG_RETURN_INT64(val1 + val2);
-}
-
-Datum
-int84mi(PG_FUNCTION_ARGS)
-{
- int64 val1 = PG_GETARG_INT64(0);
- int32 val2 = PG_GETARG_INT32(1);
-
- PG_RETURN_INT64(val1 - val2);
-}
-
-Datum
-int84mul(PG_FUNCTION_ARGS)
-{
- int64 val1 = PG_GETARG_INT64(0);
- int32 val2 = PG_GETARG_INT32(1);
-
- PG_RETURN_INT64(val1 * val2);
-}
-
-Datum
-int84div(PG_FUNCTION_ARGS)
-{
- int64 val1 = PG_GETARG_INT64(0);
- int32 val2 = PG_GETARG_INT32(1);
-
- PG_RETURN_INT64(val1 / val2);
-}
-
-Datum
-int48pl(PG_FUNCTION_ARGS)
-{
- int32 val1 = PG_GETARG_INT32(0);
- int64 val2 = PG_GETARG_INT64(1);
-
- PG_RETURN_INT64(val1 + val2);
-}
-
-Datum
-int48mi(PG_FUNCTION_ARGS)
-{
- int32 val1 = PG_GETARG_INT32(0);
- int64 val2 = PG_GETARG_INT64(1);
-
- PG_RETURN_INT64(val1 - val2);
-}
-
-Datum
-int48mul(PG_FUNCTION_ARGS)
-{
- int32 val1 = PG_GETARG_INT32(0);
- int64 val2 = PG_GETARG_INT64(1);
-
- PG_RETURN_INT64(val1 * val2);
-}
-
-Datum
-int48div(PG_FUNCTION_ARGS)
-{
- int32 val1 = PG_GETARG_INT32(0);
- int64 val2 = PG_GETARG_INT64(1);
-
- PG_RETURN_INT64(val1 / val2);
-}
-
-/* Binary arithmetics
- *
- * int8and - returns arg1 & arg2
- * int8or - returns arg1 | arg2
- * int8xor - returns arg1 # arg2
- * int8not - returns ~arg1
- * int8shl - returns arg1 << arg2
- * int8shr - returns arg1 >> arg2
- */
-
-Datum
-int8and(PG_FUNCTION_ARGS)
-{
- int64 arg1 = PG_GETARG_INT64(0);
- int64 arg2 = PG_GETARG_INT64(1);
-
- PG_RETURN_INT64(arg1 & arg2);
-}
-
-Datum
-int8or(PG_FUNCTION_ARGS)
-{
- int64 arg1 = PG_GETARG_INT64(0);
- int64 arg2 = PG_GETARG_INT64(1);
-
- PG_RETURN_INT64(arg1 | arg2);
-}
-
-Datum
-int8xor(PG_FUNCTION_ARGS)
-{
- int64 arg1 = PG_GETARG_INT64(0);
- int64 arg2 = PG_GETARG_INT64(1);
-
- PG_RETURN_INT64(arg1 ^ arg2);
-}
-
-Datum
-int8not(PG_FUNCTION_ARGS)
-{
- int64 arg1 = PG_GETARG_INT64(0);
-
- PG_RETURN_INT64(~arg1);
-}
-
-Datum
-int8shl(PG_FUNCTION_ARGS)
-{
- int64 arg1 = PG_GETARG_INT64(0);
- int32 arg2 = PG_GETARG_INT32(1);
-
- PG_RETURN_INT64(arg1 << arg2);
-}
-
-Datum
-int8shr(PG_FUNCTION_ARGS)
-{
- int64 arg1 = PG_GETARG_INT64(0);
- int32 arg2 = PG_GETARG_INT32(1);
-
- PG_RETURN_INT64(arg1 >> arg2);
-}
-
-/*----------------------------------------------------------
- * Conversion operators.
- *---------------------------------------------------------*/
-
-Datum
-int48(PG_FUNCTION_ARGS)
-{
- int32 val = PG_GETARG_INT32(0);
-
- PG_RETURN_INT64((int64) val);
-}
-
-Datum
-int84(PG_FUNCTION_ARGS)
-{
- int64 val = PG_GETARG_INT64(0);
- int32 result;
-
- result = (int32) val;
-
- /* Test for overflow by reverse-conversion. */
- if ((int64) result != val)
- elog(ERROR, "int8 conversion to int4 is out of range");
-
- PG_RETURN_INT32(result);
-}
-
-Datum
-int28(PG_FUNCTION_ARGS)
-{
- int16 val = PG_GETARG_INT16(0);
-
- PG_RETURN_INT64((int64) val);
-}
-
-Datum
-int82(PG_FUNCTION_ARGS)
-{
- int64 val = PG_GETARG_INT64(0);
- int16 result;
-
- result = (int16) val;
-
- /* Test for overflow by reverse-conversion. */
- if ((int64) result != val)
- elog(ERROR, "int8 conversion to int2 is out of range");
-
- PG_RETURN_INT16(result);
-}
-
-Datum
-i8tod(PG_FUNCTION_ARGS)
-{
- int64 val = PG_GETARG_INT64(0);
- float8 result;
-
- result = val;
-
- PG_RETURN_FLOAT8(result);
-}
-
-/* dtoi8()
- * Convert double float to 8-byte integer.
- */
-Datum
-dtoi8(PG_FUNCTION_ARGS)
-{
- float8 val = PG_GETARG_FLOAT8(0);
- int64 result;
-
- /* Round val to nearest integer (but it's still in float form) */
- val = rint(val);
-
- /*
- * Does it fit in an int64? Avoid assuming that we have handy
- * constants defined for the range boundaries, instead test for
- * overflow by reverse-conversion.
- */
- result = (int64) val;
-
- if ((float8) result != val)
- elog(ERROR, "Floating point conversion to int8 is out of range");
-
- PG_RETURN_INT64(result);
-}
-
-/* text_int8()
- */
-Datum
-text_int8(PG_FUNCTION_ARGS)
-{
- text *str = PG_GETARG_TEXT_P(0);
- int len;
- char *s;
- Datum result;
-
- len = (VARSIZE(str) - VARHDRSZ);
- s = palloc(len + 1);
- memcpy(s, VARDATA(str), len);
- *(s + len) = '\0';
-
- result = DirectFunctionCall1(int8in, CStringGetDatum(s));
-
- pfree(s);
-
- return result;
-}
-
-
-/* int8_text()
- */
-Datum
-int8_text(PG_FUNCTION_ARGS)
-{
- /* val is int64, but easier to leave it as Datum */
- Datum val = PG_GETARG_DATUM(0);
- char *s;
- int len;
- text *result;
-
- s = DatumGetCString(DirectFunctionCall1(int8out, val));
- len = strlen(s);
-
- result = (text *) palloc(VARHDRSZ + len);
-
- VARATT_SIZEP(result) = len + VARHDRSZ;
- memcpy(VARDATA(result), s, len);
-
- pfree(s);
-
- PG_RETURN_TEXT_P(result);
-}