summaryrefslogtreecommitdiff
path: root/src/backend/utils/adt/varlena.c
diff options
context:
space:
mode:
authorBruce Momjian <bruce@momjian.us>2002-04-24 02:12:53 +0000
committerBruce Momjian <bruce@momjian.us>2002-04-24 02:12:53 +0000
commit5d2fdf6e6d0aa397eee8b5946ba705917e5bf695 (patch)
tree72535777186fc1c8a1234ec35c9540e963b1703a /src/backend/utils/adt/varlena.c
parentbe9728acf1395ee45d82aa1e922570a82f9d040f (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.c42
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 ========== */
/*