*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/adt/varchar.c,v 1.18 1998/01/07 22:08:23 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/adt/varchar.c,v 1.19 1998/01/08 03:05:01 momjian Exp $
*
*-------------------------------------------------------------------------
*/
if (s == NULL)
return ((char *) NULL);
- len = strlen(s) + VARHDRSZ;
- if (typlen != -1 && len > typlen)
+ if (typelen == -1) /* we will remove this soon to make compact storage */
+ /* change varcharlen at the same time to use VARSIZE */
+ len = strlen(s) + VARHDRSZ;
+/* if (typlen != -1 && len > typlen) */
+ else
len = typlen; /* clip the string at max length */
if (len > 4096)
elog(ERROR, "Bad (null) char() external representation", NULL);
return(bcTruelen(arg));
-} /* bpcharlen() */
+}
bool
bpchareq(char *arg1, char *arg2)
* Comparison Functions used for varchar
*****************************************************************************/
+static int
+vcTruelen(char *arg)
+{
+ char *s = arg + VARHDRSZ;
+ int i;
+ int len;
+
+ len = *(int32 *) arg - VARHDRSZ;
+ for (i = 0; i < len; i++)
+ {
+ if (*s++ == '\0')
+ break;
+ }
+ return i;
+}
+
int32
varcharlen(char *arg)
{
if (!PointerIsValid(arg))
elog(ERROR, "Bad (null) varchar() external representation", NULL);
- return VARSIZE(arg) - VARHDRSZ;
+ return(vcTruelen(arg));
}
bool