Line data Source code
1 : /*------------------------------------------------------------------------- 2 : * 3 : * oid8.c 4 : * Functions for the built-in type Oid8 5 : * 6 : * Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group 7 : * Portions Copyright (c) 1994, Regents of the University of California 8 : * 9 : * 10 : * IDENTIFICATION 11 : * src/backend/utils/adt/oid8.c 12 : * 13 : *------------------------------------------------------------------------- 14 : */ 15 : #include "postgres.h" 16 : 17 : #include "catalog/pg_type.h" 18 : #include "libpq/pqformat.h" 19 : #include "utils/builtins.h" 20 : 21 : #define MAXOID8LEN 20 22 : 23 : /***************************************************************************** 24 : * USER I/O ROUTINES * 25 : *****************************************************************************/ 26 : 27 : Datum 28 3192 : oid8in(PG_FUNCTION_ARGS) 29 : { 30 3192 : char *s = PG_GETARG_CSTRING(0); 31 : Oid8 result; 32 : 33 3192 : result = uint64in_subr(s, NULL, "oid8", fcinfo->context); 34 3126 : PG_RETURN_OID8(result); 35 : } 36 : 37 : Datum 38 884 : oid8out(PG_FUNCTION_ARGS) 39 : { 40 884 : Oid8 val = PG_GETARG_OID8(0); 41 : char buf[MAXOID8LEN + 1]; 42 : char *result; 43 : int len; 44 : 45 884 : len = pg_ulltoa_n(val, buf) + 1; 46 884 : buf[len - 1] = '\0'; 47 : 48 : /* 49 : * Since the length is already known, we do a manual palloc() and memcpy() 50 : * to avoid the strlen() call that would otherwise be done in pstrdup(). 51 : */ 52 884 : result = palloc(len); 53 884 : memcpy(result, buf, len); 54 884 : PG_RETURN_CSTRING(result); 55 : } 56 : 57 : /* 58 : * oid8recv - converts external binary format to oid8 59 : */ 60 : Datum 61 0 : oid8recv(PG_FUNCTION_ARGS) 62 : { 63 0 : StringInfo buf = (StringInfo) PG_GETARG_POINTER(0); 64 : 65 0 : PG_RETURN_OID8(pq_getmsgint64(buf)); 66 : } 67 : 68 : /* 69 : * oid8send - converts oid8 to binary format 70 : */ 71 : Datum 72 0 : oid8send(PG_FUNCTION_ARGS) 73 : { 74 0 : Oid8 arg1 = PG_GETARG_OID8(0); 75 : StringInfoData buf; 76 : 77 0 : pq_begintypsend(&buf); 78 0 : pq_sendint64(&buf, arg1); 79 0 : PG_RETURN_BYTEA_P(pq_endtypsend(&buf)); 80 : } 81 : 82 : /***************************************************************************** 83 : * PUBLIC ROUTINES * 84 : *****************************************************************************/ 85 : 86 : Datum 87 2460 : oid8eq(PG_FUNCTION_ARGS) 88 : { 89 2460 : Oid8 arg1 = PG_GETARG_OID8(0); 90 2460 : Oid8 arg2 = PG_GETARG_OID8(1); 91 : 92 2460 : PG_RETURN_BOOL(arg1 == arg2); 93 : } 94 : 95 : Datum 96 60 : oid8ne(PG_FUNCTION_ARGS) 97 : { 98 60 : Oid8 arg1 = PG_GETARG_OID8(0); 99 60 : Oid8 arg2 = PG_GETARG_OID8(1); 100 : 101 60 : PG_RETURN_BOOL(arg1 != arg2); 102 : } 103 : 104 : Datum 105 60 : oid8lt(PG_FUNCTION_ARGS) 106 : { 107 60 : Oid8 arg1 = PG_GETARG_OID8(0); 108 60 : Oid8 arg2 = PG_GETARG_OID8(1); 109 : 110 60 : PG_RETURN_BOOL(arg1 < arg2); 111 : } 112 : 113 : Datum 114 60 : oid8le(PG_FUNCTION_ARGS) 115 : { 116 60 : Oid8 arg1 = PG_GETARG_OID8(0); 117 60 : Oid8 arg2 = PG_GETARG_OID8(1); 118 : 119 60 : PG_RETURN_BOOL(arg1 <= arg2); 120 : } 121 : 122 : Datum 123 60 : oid8ge(PG_FUNCTION_ARGS) 124 : { 125 60 : Oid8 arg1 = PG_GETARG_OID8(0); 126 60 : Oid8 arg2 = PG_GETARG_OID8(1); 127 : 128 60 : PG_RETURN_BOOL(arg1 >= arg2); 129 : } 130 : 131 : Datum 132 60 : oid8gt(PG_FUNCTION_ARGS) 133 : { 134 60 : Oid8 arg1 = PG_GETARG_OID8(0); 135 60 : Oid8 arg2 = PG_GETARG_OID8(1); 136 : 137 60 : PG_RETURN_BOOL(arg1 > arg2); 138 : } 139 : 140 : Datum 141 3132 : hashoid8(PG_FUNCTION_ARGS) 142 : { 143 3132 : return hashint8(fcinfo); 144 : } 145 : 146 : Datum 147 72 : hashoid8extended(PG_FUNCTION_ARGS) 148 : { 149 72 : return hashint8extended(fcinfo); 150 : } 151 : 152 : Datum 153 54 : oid8larger(PG_FUNCTION_ARGS) 154 : { 155 54 : Oid8 arg1 = PG_GETARG_OID8(0); 156 54 : Oid8 arg2 = PG_GETARG_OID8(1); 157 : 158 54 : PG_RETURN_OID8((arg1 > arg2) ? arg1 : arg2); 159 : } 160 : 161 : Datum 162 54 : oid8smaller(PG_FUNCTION_ARGS) 163 : { 164 54 : Oid8 arg1 = PG_GETARG_OID8(0); 165 54 : Oid8 arg2 = PG_GETARG_OID8(1); 166 : 167 54 : PG_RETURN_OID8((arg1 < arg2) ? arg1 : arg2); 168 : }