1 /*-------------------------------------------------------------------------
4 * Functions for the built-in type "char".
5 * Functions for the built-in type "cid" (what's that doing here?)
7 * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
8 * Portions Copyright (c) 1994, Regents of the University of California
12 * $Header: /cvsroot/pgsql/src/backend/utils/adt/char.c,v 1.28 2000/06/05 07:28:51 tgl Exp $
14 *-------------------------------------------------------------------------
18 #include "utils/builtins.h"
20 /*****************************************************************************
22 *****************************************************************************/
25 * charin - converts "x" to 'x'
28 charin(PG_FUNCTION_ARGS)
30 char *ch = PG_GETARG_CSTRING(0);
32 PG_RETURN_CHAR(ch[0]);
36 * charout - converts 'x' to "x"
39 charout(PG_FUNCTION_ARGS)
41 char ch = PG_GETARG_CHAR(0);
42 char *result = (char *) palloc(2);
46 PG_RETURN_CSTRING(result);
49 /*****************************************************************************
51 *****************************************************************************/
54 * NOTE: comparisons are done as though char is unsigned (uint8).
55 * Arithmetic is done as though char is signed (int8).
57 * You wanted consistency?
61 chareq(PG_FUNCTION_ARGS)
63 char arg1 = PG_GETARG_CHAR(0);
64 char arg2 = PG_GETARG_CHAR(1);
66 PG_RETURN_BOOL(arg1 == arg2);
70 charne(PG_FUNCTION_ARGS)
72 char arg1 = PG_GETARG_CHAR(0);
73 char arg2 = PG_GETARG_CHAR(1);
75 PG_RETURN_BOOL(arg1 != arg2);
79 charlt(PG_FUNCTION_ARGS)
81 char arg1 = PG_GETARG_CHAR(0);
82 char arg2 = PG_GETARG_CHAR(1);
84 PG_RETURN_BOOL((uint8) arg1 < (uint8) arg2);
88 charle(PG_FUNCTION_ARGS)
90 char arg1 = PG_GETARG_CHAR(0);
91 char arg2 = PG_GETARG_CHAR(1);
93 PG_RETURN_BOOL((uint8) arg1 <= (uint8) arg2);
97 chargt(PG_FUNCTION_ARGS)
99 char arg1 = PG_GETARG_CHAR(0);
100 char arg2 = PG_GETARG_CHAR(1);
102 PG_RETURN_BOOL((uint8) arg1 > (uint8) arg2);
106 charge(PG_FUNCTION_ARGS)
108 char arg1 = PG_GETARG_CHAR(0);
109 char arg2 = PG_GETARG_CHAR(1);
111 PG_RETURN_BOOL((uint8) arg1 >= (uint8) arg2);
115 charpl(PG_FUNCTION_ARGS)
117 char arg1 = PG_GETARG_CHAR(0);
118 char arg2 = PG_GETARG_CHAR(1);
120 PG_RETURN_CHAR((int8) arg1 + (int8) arg2);
124 charmi(PG_FUNCTION_ARGS)
126 char arg1 = PG_GETARG_CHAR(0);
127 char arg2 = PG_GETARG_CHAR(1);
129 PG_RETURN_CHAR((int8) arg1 - (int8) arg2);
133 charmul(PG_FUNCTION_ARGS)
135 char arg1 = PG_GETARG_CHAR(0);
136 char arg2 = PG_GETARG_CHAR(1);
138 PG_RETURN_CHAR((int8) arg1 * (int8) arg2);
142 chardiv(PG_FUNCTION_ARGS)
144 char arg1 = PG_GETARG_CHAR(0);
145 char arg2 = PG_GETARG_CHAR(1);
147 PG_RETURN_CHAR((int8) arg1 / (int8) arg2);
151 text_char(PG_FUNCTION_ARGS)
153 text *arg1 = PG_GETARG_TEXT_P(0);
155 /* XXX what if arg1 has length zero? */
156 PG_RETURN_CHAR(*(VARDATA(arg1)));
160 char_text(PG_FUNCTION_ARGS)
162 char arg1 = PG_GETARG_CHAR(0);
163 text *result = palloc(VARHDRSZ + 1);
165 VARSIZE(result) = VARHDRSZ + 1;
166 *(VARDATA(result)) = arg1;
168 PG_RETURN_TEXT_P(result);
172 /*****************************************************************************
173 * USER I/O ROUTINES *
174 *****************************************************************************/
177 * cidin - converts CommandId to internal representation.
180 cidin(PG_FUNCTION_ARGS)
182 char *s = PG_GETARG_CSTRING(0);
187 /* XXX assume that CommandId is 32 bits... */
188 PG_RETURN_INT32((int32) c);
192 * cidout - converts a cid to external representation.
195 cidout(PG_FUNCTION_ARGS)
197 /* XXX assume that CommandId is 32 bits... */
198 CommandId c = PG_GETARG_INT32(0);
199 char *result = (char *) palloc(16);
201 sprintf(result, "%u", (unsigned int) c);
202 PG_RETURN_CSTRING(result);
205 /*****************************************************************************
207 *****************************************************************************/
210 cideq(PG_FUNCTION_ARGS)
212 /* XXX assume that CommandId is 32 bits... */
213 CommandId arg1 = PG_GETARG_INT32(0);
214 CommandId arg2 = PG_GETARG_INT32(1);
216 PG_RETURN_BOOL(arg1 == arg2);