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