diff options
author | Bruce Momjian <bruce@momjian.us> | 2002-04-24 02:12:53 +0000 |
---|---|---|
committer | Bruce Momjian <bruce@momjian.us> | 2002-04-24 02:12:53 +0000 |
commit | 5d2fdf6e6d0aa397eee8b5946ba705917e5bf695 (patch) | |
tree | 72535777186fc1c8a1234ec35c9540e963b1703a /src/backend/utils/adt/varlena.c | |
parent | be9728acf1395ee45d82aa1e922570a82f9d040f (diff) |
Here's a patch to add unknownin/unknownout support. I also poked around
looking for places that assume UNKNOWN == TEXT. One of those was the
"SET" type in pg_type.h, which was using textin/textout. This one I took
care of in this patch. The other suspicious place was in
string_to_dataum (which is defined in both selfuncs.c and indxpath.c). I
wasn't too sure about those, so I left them be.
Joe Conway
Diffstat (limited to 'src/backend/utils/adt/varlena.c')
-rw-r--r-- | src/backend/utils/adt/varlena.c | 42 |
1 files changed, 41 insertions, 1 deletions
diff --git a/src/backend/utils/adt/varlena.c b/src/backend/utils/adt/varlena.c index 2007e78910f..e7ac4b30b59 100644 --- a/src/backend/utils/adt/varlena.c +++ b/src/backend/utils/adt/varlena.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/varlena.c,v 1.83 2002/04/15 07:54:37 ishii Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/varlena.c,v 1.84 2002/04/24 02:12:53 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -228,6 +228,46 @@ textout(PG_FUNCTION_ARGS) } +/* + * unknownin - converts "..." to internal representation + */ +Datum +unknownin(PG_FUNCTION_ARGS) +{ + char *inputStr = PG_GETARG_CSTRING(0); + unknown *result; + int len; + + len = strlen(inputStr) + VARHDRSZ; + + result = (unknown *) palloc(len); + VARATT_SIZEP(result) = len; + + memcpy(VARDATA(result), inputStr, len - VARHDRSZ); + + PG_RETURN_UNKNOWN_P(result); +} + + +/* + * unknownout - converts internal representation to "..." + */ +Datum +unknownout(PG_FUNCTION_ARGS) +{ + unknown *t = PG_GETARG_UNKNOWN_P(0); + int len; + char *result; + + len = VARSIZE(t) - VARHDRSZ; + result = (char *) palloc(len + 1); + memcpy(result, VARDATA(t), len); + result[len] = '\0'; + + PG_RETURN_CSTRING(result); +} + + /* ========== PUBLIC ROUTINES ========== */ /* |