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 1596 : oid8in(PG_FUNCTION_ARGS)
29 : {
30 1596 : char *s = PG_GETARG_CSTRING(0);
31 : Oid8 result;
32 :
33 1596 : result = uint64in_subr(s, NULL, "oid8", fcinfo->context);
34 1563 : PG_RETURN_OID8(result);
35 : }
36 :
37 : Datum
38 442 : oid8out(PG_FUNCTION_ARGS)
39 : {
40 442 : Oid8 val = PG_GETARG_OID8(0);
41 : char buf[MAXOID8LEN + 1];
42 : char *result;
43 : int len;
44 :
45 442 : len = pg_ulltoa_n(val, buf) + 1;
46 442 : 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 442 : result = palloc(len);
53 442 : memcpy(result, buf, len);
54 442 : 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 1230 : oid8eq(PG_FUNCTION_ARGS)
88 : {
89 1230 : Oid8 arg1 = PG_GETARG_OID8(0);
90 1230 : Oid8 arg2 = PG_GETARG_OID8(1);
91 :
92 1230 : PG_RETURN_BOOL(arg1 == arg2);
93 : }
94 :
95 : Datum
96 30 : oid8ne(PG_FUNCTION_ARGS)
97 : {
98 30 : Oid8 arg1 = PG_GETARG_OID8(0);
99 30 : Oid8 arg2 = PG_GETARG_OID8(1);
100 :
101 30 : PG_RETURN_BOOL(arg1 != arg2);
102 : }
103 :
104 : Datum
105 30 : oid8lt(PG_FUNCTION_ARGS)
106 : {
107 30 : Oid8 arg1 = PG_GETARG_OID8(0);
108 30 : Oid8 arg2 = PG_GETARG_OID8(1);
109 :
110 30 : PG_RETURN_BOOL(arg1 < arg2);
111 : }
112 :
113 : Datum
114 30 : oid8le(PG_FUNCTION_ARGS)
115 : {
116 30 : Oid8 arg1 = PG_GETARG_OID8(0);
117 30 : Oid8 arg2 = PG_GETARG_OID8(1);
118 :
119 30 : PG_RETURN_BOOL(arg1 <= arg2);
120 : }
121 :
122 : Datum
123 30 : oid8ge(PG_FUNCTION_ARGS)
124 : {
125 30 : Oid8 arg1 = PG_GETARG_OID8(0);
126 30 : Oid8 arg2 = PG_GETARG_OID8(1);
127 :
128 30 : PG_RETURN_BOOL(arg1 >= arg2);
129 : }
130 :
131 : Datum
132 30 : oid8gt(PG_FUNCTION_ARGS)
133 : {
134 30 : Oid8 arg1 = PG_GETARG_OID8(0);
135 30 : Oid8 arg2 = PG_GETARG_OID8(1);
136 :
137 30 : PG_RETURN_BOOL(arg1 > arg2);
138 : }
139 :
140 : Datum
141 1566 : hashoid8(PG_FUNCTION_ARGS)
142 : {
143 1566 : return hashint8(fcinfo);
144 : }
145 :
146 : Datum
147 36 : hashoid8extended(PG_FUNCTION_ARGS)
148 : {
149 36 : return hashint8extended(fcinfo);
150 : }
151 :
152 : Datum
153 27 : oid8larger(PG_FUNCTION_ARGS)
154 : {
155 27 : Oid8 arg1 = PG_GETARG_OID8(0);
156 27 : Oid8 arg2 = PG_GETARG_OID8(1);
157 :
158 27 : PG_RETURN_OID8((arg1 > arg2) ? arg1 : arg2);
159 : }
160 :
161 : Datum
162 27 : oid8smaller(PG_FUNCTION_ARGS)
163 : {
164 27 : Oid8 arg1 = PG_GETARG_OID8(0);
165 27 : Oid8 arg2 = PG_GETARG_OID8(1);
166 :
167 27 : PG_RETURN_OID8((arg1 < arg2) ? arg1 : arg2);
168 : }
|