1
0
mirror of https://github.com/postgres/postgres.git synced 2025-06-26 12:21:12 +03:00

Change the UNKNOWN type to have an internal representation matching

cstring, rather than text, so as to eliminate useless conversions
inside the parser.  Per recent discussion.
This commit is contained in:
Tom Lane
2005-05-30 01:20:50 +00:00
parent c8f81df41b
commit cfd9be939e
5 changed files with 37 additions and 47 deletions

View File

@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/utils/adt/varlena.c,v 1.122 2005/05/27 00:57:49 neilc Exp $
* $PostgreSQL: pgsql/src/backend/utils/adt/varlena.c,v 1.123 2005/05/30 01:20:50 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@ -330,18 +330,10 @@ textsend(PG_FUNCTION_ARGS)
Datum
unknownin(PG_FUNCTION_ARGS)
{
char *inputStr = PG_GETARG_CSTRING(0);
unknown *result;
int len;
char *str = PG_GETARG_CSTRING(0);
len = strlen(inputStr) + VARHDRSZ;
result = (unknown *) palloc(len);
VARATT_SIZEP(result) = len;
memcpy(VARDATA(result), inputStr, len - VARHDRSZ);
PG_RETURN_UNKNOWN_P(result);
/* representation is same as cstring */
PG_RETURN_CSTRING(pstrdup(str));
}
/*
@ -350,16 +342,10 @@ unknownin(PG_FUNCTION_ARGS)
Datum
unknownout(PG_FUNCTION_ARGS)
{
unknown *t = PG_GETARG_UNKNOWN_P(0);
int len;
char *result;
/* representation is same as cstring */
char *str = PG_GETARG_CSTRING(0);
len = VARSIZE(t) - VARHDRSZ;
result = (char *) palloc(len + 1);
memcpy(result, VARDATA(t), len);
result[len] = '\0';
PG_RETURN_CSTRING(result);
PG_RETURN_CSTRING(pstrdup(str));
}
/*
@ -369,28 +355,27 @@ Datum
unknownrecv(PG_FUNCTION_ARGS)
{
StringInfo buf = (StringInfo) PG_GETARG_POINTER(0);
unknown *result;
char *str;
int nbytes;
nbytes = buf->len - buf->cursor;
result = (unknown *) palloc(nbytes + VARHDRSZ);
VARATT_SIZEP(result) = nbytes + VARHDRSZ;
pq_copymsgbytes(buf, VARDATA(result), nbytes);
PG_RETURN_UNKNOWN_P(result);
str = pq_getmsgtext(buf, buf->len - buf->cursor, &nbytes);
/* representation is same as cstring */
PG_RETURN_CSTRING(str);
}
/*
* unknownsend - converts unknown to binary format
*
* This is a special case: just copy the input, since it's
* effectively the same format as bytea
*/
Datum
unknownsend(PG_FUNCTION_ARGS)
{
unknown *vlena = PG_GETARG_UNKNOWN_P_COPY(0);
/* representation is same as cstring */
char *str = PG_GETARG_CSTRING(0);
StringInfoData buf;
PG_RETURN_UNKNOWN_P(vlena);
pq_begintypsend(&buf);
pq_sendtext(&buf, str, strlen(str));
PG_RETURN_BYTEA_P(pq_endtypsend(&buf));
}