]> granicus.if.org Git - postgresql/blob - src/backend/utils/adt/oid.c
Renaming cleanup, no pgindent yet.
[postgresql] / src / backend / utils / adt / oid.c
1 /*-------------------------------------------------------------------------
2  *
3  * oid.c--
4  *        Functions for the built-in type Oid.
5  *
6  * Copyright (c) 1994, Regents of the University of California
7  *
8  *
9  * IDENTIFICATION
10  *        $Header: /cvsroot/pgsql/src/backend/utils/adt/oid.c,v 1.17 1998/09/01 03:26:13 momjian Exp $
11  *
12  *-------------------------------------------------------------------------
13  */
14
15 #include <stdio.h>
16 #include <string.h>
17
18 #include "postgres.h"
19 #include "utils/builtins.h"             /* where function declarations go */
20
21 /*****************************************************************************
22  *       USER I/O ROUTINES                                                                                                               *
23  *****************************************************************************/
24
25 /*
26  *              oid8in                  - converts "num num ..." to internal form
27  *
28  *              Note:
29  *                              Fills any nonexistent digits with NULL oids.
30  */
31 Oid *
32 oid8in(char *oidString)
33 {
34         Oid                     **result;
35         int                     nums;
36
37         if (oidString == NULL)
38                 return NULL;
39         result = (Oid **) palloc(sizeof(Oid[8]));
40         if ((nums = sscanf(oidString, "%d%d%d%d%d%d%d%d",
41                                            &(*result)[0],
42                                            &(*result)[1],
43                                            &(*result)[2],
44                                            &(*result)[3],
45                                            &(*result)[4],
46                                            &(*result)[5],
47                                            &(*result)[6],
48                                            &(*result)[7])) != 8)
49         {
50                 do
51                         (*result)[nums++] = 0;
52                 while (nums < 8);
53         }
54         return (Oid *) result;
55 }
56
57 /*
58  *              oid8out - converts internal form to "num num ..."
59  */
60 char *
61 oid8out(Oid **oidArray)
62 {
63         int                     num;
64         Oid                *sp;
65         char       *rp;
66         char       *result;
67
68         if (oidArray == NULL)
69         {
70                 result = (char *) palloc(2);
71                 result[0] = '-';
72                 result[1] = '\0';
73                 return result;
74         }
75
76         /* assumes sign, 10 digits, ' ' */
77         rp = result = (char *) palloc(8 * 12);
78         sp = *oidArray;
79         for (num = 8; num != 0; num--)
80         {
81                 ltoa(*sp++, rp);
82                 while (*++rp != '\0')
83                         ;
84                 *rp++ = ' ';
85         }
86         *--rp = '\0';
87         return result;
88 }
89
90 Oid
91 oidin(char *s)
92 {
93         return int4in(s);
94 }
95
96 char *
97 oidout(Oid o)
98 {
99         return int4out(o);
100 }
101
102 /*****************************************************************************
103  *       PUBLIC ROUTINES                                                                                                                 *
104  *****************************************************************************/
105
106 /*
107  * If you change this function, change heap_keytest()
108  * because we have hardcoded this in there as an optimization
109  */
110 bool
111 oideq(Oid arg1, Oid arg2)
112 {
113         return arg1 == arg2;
114 }
115
116 bool
117 oidne(Oid arg1, Oid arg2)
118 {
119         return arg1 != arg2;
120 }
121
122 bool
123 oid8eq(Oid *arg1, Oid *arg2)
124 {
125         return (bool) (memcmp(arg1, arg2, 8 * sizeof(Oid)) == 0);
126 }
127
128 bool
129 oid8lt(Oid *arg1, Oid *arg2)
130 {
131         int i;
132         for (i=0; i < 8; i++)
133                 if (!int4eq(arg1[i], arg2[i]))
134                         return int4lt(arg1[i], arg2[i]);
135         return false;
136 }
137
138 bool
139 oid8le(Oid *arg1, Oid *arg2)
140 {
141         int i;
142         for (i=0; i < 8; i++)
143                 if (!int4eq(arg1[i], arg2[i]))
144                         return int4le(arg1[i], arg2[i]);
145         return true;
146 }
147
148 bool
149 oid8ge(Oid *arg1, Oid *arg2)
150 {
151         int i;
152         for (i=0; i < 8; i++)
153                 if (!int4eq(arg1[i], arg2[i]))
154                         return int4ge(arg1[i], arg2[i]);
155         return true;
156 }
157
158 bool
159 oid8gt(Oid *arg1, Oid *arg2)
160 {
161         int i;
162         for (i=0; i < 8; i++)
163                 if (!int4eq(arg1[i], arg2[i]))
164                         return int4gt(arg1[i], arg2[i]);
165         return false;
166 }
167
168 bool
169 oideqint4(Oid arg1, int32 arg2)
170 {
171 /* oid is unsigned, but int4 is signed */
172         return arg2 >= 0 && arg1 == arg2;
173 }
174
175 bool
176 int4eqoid(int32 arg1, Oid arg2)
177 {
178 /* oid is unsigned, but int4 is signed */
179         return arg1 >= 0 && arg1 == arg2;
180 }
181
182 text *
183 oid_text(Oid oid)
184 {
185         text       *result;
186
187         int                     len;
188         char       *str;
189
190         str = oidout(oid);
191         len = (strlen(str) + VARHDRSZ);
192
193         result = palloc(len);
194
195         VARSIZE(result) = len;
196         memmove(VARDATA(result), str, (len - VARHDRSZ));
197         pfree(str);
198
199         return result;
200 }       /* oid_text() */
201
202 Oid
203 text_oid(text *string)
204 {
205         Oid                     result;
206
207         int                     len;
208         char       *str;
209
210         len = (VARSIZE(string) - VARHDRSZ);
211
212         str = palloc(len + 1);
213         memmove(str, VARDATA(string), len);
214         *(str + len) = '\0';
215
216         result = oidin(str);
217         pfree(str);
218
219         return result;
220 }       /* oid_text() */