aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/adt/oid.c
blob: d423853da15f10da6f4f1de8d499fcb3b2177cb2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
/*-------------------------------------------------------------------------
 *
 * oid.c--
 *    Functions for the built-in type Oid.
 *
 * Copyright (c) 1994, Regents of the University of California
 *
 *
 * IDENTIFICATION
 *    $Header: /cvsroot/pgsql/src/backend/utils/adt/oid.c,v 1.2 1996/11/06 06:49:55 scrappy Exp $
 *
 *-------------------------------------------------------------------------
 */
#include "postgres.h"
#include "utils/palloc.h"
#include "utils/builtins.h"	/* where function declarations go */

/***************************************************************************** 
 *   USER I/O ROUTINES                                                       *
 *****************************************************************************/

/*
 *	oid8in		- converts "num num ..." to internal form
 *
 *	Note:
 *		Fills any nonexistent digits with NULL oids.
 */
Oid *oid8in(char *oidString)
{
    register Oid	(*result)[];
    int			nums;
    
    if (oidString == NULL)
	return(NULL);
    result = (Oid (*)[]) palloc(sizeof(Oid [8]));
    if ((nums = sscanf(oidString, "%d%d%d%d%d%d%d%d",
		       *result,
		       *result + 1,
		       *result + 2,
		       *result + 3,
		       *result + 4,
		       *result + 5,
		       *result + 6,
		       *result + 7)) != 8) {
	do
	    (*result)[nums++] = 0;
	while (nums < 8);
    }
    return((Oid *) result);
}

/*
 *	oid8out	- converts internal form to "num num ..."
 */
char *oid8out(Oid	(*oidArray)[])
{
    register int		num;
    register Oid	*sp;
    register char		*rp;
    char			*result;
    
    if (oidArray == NULL) {
	result = (char *) palloc(2);
	result[0] = '-';
	result[1] = '\0';
	return(result);
    }
    
    /* assumes sign, 10 digits, ' ' */
    rp = result = (char *) palloc(8 * 12);
    sp = *oidArray;
    for (num = 8; num != 0; num--) {
	ltoa(*sp++, rp);
	while (*++rp != '\0')
	    ;
	*rp++ = ' ';
    }
    *--rp = '\0';
    return(result);
}

Oid oidin(char *s)
{
    extern int32 int4in();
    
    return(int4in(s));
}

char *oidout(Oid o)
{
    extern char *int4out();
    
    return(int4out(o));
}

/***************************************************************************** 
 *   PUBLIC ROUTINES                                                         *
 *****************************************************************************/

int32 oideq(Oid arg1, Oid arg2)
{
    return(arg1 == arg2);
}

int32 oidne(Oid arg1, Oid arg2)
{
    return(arg1 != arg2);
}

int32 oid8eq(Oid arg1[], Oid arg2[])
{
    return (int32)(memcmp(arg1, arg2, 8 * sizeof(Oid)) == 0);
}

bool oideqint4(Oid arg1, int32 arg2)
{
/* oid is unsigned, but int4 is signed */
    return (arg2 >= 0 && arg1 == arg2);
}

bool int4eqoid(int32 arg1, Oid arg2)
{
/* oid is unsigned, but int4 is signed */
    return (arg1 >= 0 && arg1 == arg2);
}