/* * charrecv - converts external binary format to char * * The external representation is one byte, with no character set * conversion. This is somewhat dubious, perhaps, but in many * cases people use char for a 1-byte binary type. */ Datum charrecv(PG_FUNCTION_ARGS) { StringInfo buf = (StringInfo) PG_GETARG_POINTER(0); PG_RETURN_CHAR(pq_getmsgbyte(buf)); }
/* * charin - converts "x" to 'x' * * Note that an empty input string will implicitly be converted to \0. */ Datum charin(PG_FUNCTION_ARGS) { char *ch = PG_GETARG_CSTRING(0); PG_RETURN_CHAR(ch[0]); }
Datum charmul(PG_FUNCTION_ARGS) { char arg1 = PG_GETARG_CHAR(0); char arg2 = PG_GETARG_CHAR(1); PG_RETURN_CHAR((int8) arg1 * (int8) arg2); }
Datum i4tochar(PG_FUNCTION_ARGS) { int32 arg1 = PG_GETARG_INT32(0); if (arg1 < SCHAR_MIN || arg1 > SCHAR_MAX) ereport(ERROR, (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE), errmsg("\"char\" out of range"))); PG_RETURN_CHAR((int8) arg1); }
Datum chardiv(PG_FUNCTION_ARGS) { char arg1 = PG_GETARG_CHAR(0); char arg2 = PG_GETARG_CHAR(1); if (arg2 == 0) ereport(ERROR, (errcode(ERRCODE_DIVISION_BY_ZERO), errmsg("division by zero"))); PG_RETURN_CHAR((int8) arg1 / (int8) arg2); }
Datum text_char(PG_FUNCTION_ARGS) { text *arg1 = PG_GETARG_TEXT_P(0); char result; /* * An empty input string is converted to \0 (for consistency with charin). * If the input is longer than one character, the excess data is silently * discarded. */ if (VARSIZE(arg1) > VARHDRSZ) result = *(VARDATA(arg1)); else result = '\0'; PG_RETURN_CHAR(result); }