]> granicus.if.org Git - postgresql/commitdiff
Add conversion functions to and from the "name" data type.
authorThomas G. Lockhart <lockhart@fourpalms.org>
Fri, 29 May 1998 13:33:58 +0000 (13:33 +0000)
committerThomas G. Lockhart <lockhart@fourpalms.org>
Fri, 29 May 1998 13:33:58 +0000 (13:33 +0000)
src/backend/utils/adt/varchar.c
src/backend/utils/adt/varlena.c

index 7f30f2bab6915cdc16cdbca6fab4ac7c69e25a41..cd43dcdace9ff0cdddce58272aa6a134d6275446 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/utils/adt/varchar.c,v 1.31 1998/05/09 22:42:07 thomas Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/utils/adt/varchar.c,v 1.32 1998/05/29 13:33:24 thomas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -201,8 +201,7 @@ int32
 bpchar_char(char *s)
 {
        return ((int32) *VARDATA(s));
-} /* char_bpchar() */
-
+} /* bpchar_char() */
 
 /* char_bpchar()
  * Convert char to bpchar(1).
@@ -221,6 +220,70 @@ char_bpchar(int32 c)
 } /* char_bpchar() */
 
 
+/* bpchar_name()
+ * Converts a bpchar() type to a NameData type.
+ */
+NameData *
+bpchar_name(char *s)
+{
+       NameData   *result;
+       int                     len;
+
+       if (s == NULL)
+               return (NULL);
+
+       len = VARSIZE(s) - VARHDRSZ;
+       if (len > NAMEDATALEN) len = NAMEDATALEN;
+
+       while (len > 0) {
+               if (*(VARDATA(s)+len-1) != ' ') break;
+               len--;
+       }
+
+#ifdef STRINGDEBUG
+printf("bpchar- convert string length %d (%d) ->%d\n",
+ VARSIZE(s)-VARHDRSZ, VARSIZE(s), len);
+#endif
+
+       result = (NameData *) palloc(NAMEDATALEN);
+       StrNCpy(result->data, VARDATA(s), NAMEDATALEN);
+
+       /* now null pad to full length... */
+       while (len < NAMEDATALEN) {
+               *(result->data + len) = '\0';
+               len++;
+       }
+
+       return (result);
+} /* bpchar_name() */
+
+/* name_bpchar()
+ * Converts a NameData type to a bpchar type.
+ */
+char *
+name_bpchar(NameData *s)
+{
+       char       *result;
+       int                     len;
+
+       if (s == NULL)
+               return (NULL);
+
+       len = strlen(s->data);
+
+#ifdef STRINGDEBUG
+printf("bpchar- convert string length %d (%d) ->%d\n",
+ VARSIZE(s)-VARHDRSZ, VARSIZE(s), len);
+#endif
+
+       result = (char *) palloc(VARHDRSZ + len);
+       strncpy(VARDATA(result), s->data, len);
+       VARSIZE(result) = len + VARHDRSZ;
+
+       return (result);
+} /* name_bpchar() */
+
+
 /*****************************************************************************
  *      varchar - varchar()                                                                                                     *
  *****************************************************************************/
index 1fad410b85aa8ea1e76352c18c51a50c1c47f826..6475a018895d436d0e62f32d46f5edc0638c777b 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/utils/adt/varlena.c,v 1.34 1998/05/09 22:42:07 thomas Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/utils/adt/varlena.c,v 1.35 1998/05/29 13:33:58 thomas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -759,3 +759,62 @@ byteaSetBit(text *v, int32 n, int32 newBit)
 
        return (res);
 }
+
+
+/* text_name()
+ * Converts a text() type to a NameData type.
+ */
+NameData *
+text_name(text *s)
+{
+       NameData   *result;
+       int                     len;
+
+       if (s == NULL)
+               return (NULL);
+
+       len = VARSIZE(s) - VARHDRSZ;
+       if (len > NAMEDATALEN) len = NAMEDATALEN;
+
+#ifdef STRINGDEBUG
+printf("text- convert string length %d (%d) ->%d\n",
+ VARSIZE(s)-VARHDRSZ, VARSIZE(s), len);
+#endif
+
+       result = palloc(NAMEDATALEN);
+       StrNCpy(result->data, VARDATA(s), NAMEDATALEN);
+
+       /* now null pad to full length... */
+       while (len < NAMEDATALEN) {
+               *(result->data + len) = '\0';
+               len++;
+       }
+
+       return (result);
+} /* text_name() */
+
+/* name_text()
+ * Converts a NameData type to a text type.
+ */
+text *
+name_text(NameData *s)
+{
+       text       *result;
+       int                     len;
+
+       if (s == NULL)
+               return (NULL);
+
+       len = strlen(s->data);
+
+#ifdef STRINGDEBUG
+printf("text- convert string length %d (%d) ->%d\n",
+ VARSIZE(s)-VARHDRSZ, VARSIZE(s), len);
+#endif
+
+       result = palloc(VARHDRSZ + len);
+       strncpy(VARDATA(result), s->data, len);
+       VARSIZE(result) = len + VARHDRSZ;
+
+       return (result);
+} /* name_text() */