diff options
Diffstat (limited to 'src/backend/utils/adt/tsgistidx.c')
-rw-r--r-- | src/backend/utils/adt/tsgistidx.c | 17 |
1 files changed, 4 insertions, 13 deletions
diff --git a/src/backend/utils/adt/tsgistidx.c b/src/backend/utils/adt/tsgistidx.c index 5698ee5502b..1438ff35209 100644 --- a/src/backend/utils/adt/tsgistidx.c +++ b/src/backend/utils/adt/tsgistidx.c @@ -96,34 +96,25 @@ gtsvectorin(PG_FUNCTION_ARGS) PG_RETURN_VOID(); /* keep compiler quiet */ } -#define SINGOUTSTR "%d true bits, %d false bits" -#define ARROUTSTR "%d unique words" -#define EXTRALEN ( 2*13 ) - -static int outbuf_maxlen = 0; - Datum gtsvectorout(PG_FUNCTION_ARGS) { SignTSVector *key = (SignTSVector *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); char *outbuf; - if (outbuf_maxlen == 0) - outbuf_maxlen = 2 * EXTRALEN + Max(strlen(SINGOUTSTR), strlen(ARROUTSTR)) + 1; - outbuf = palloc(outbuf_maxlen); - if (ISARRKEY(key)) - sprintf(outbuf, ARROUTSTR, (int) ARRNELEM(key)); + outbuf = psprintf("%d unique words", (int) ARRNELEM(key)); else { if (ISALLTRUE(key)) - sprintf(outbuf, "all true bits"); + outbuf = pstrdup("all true bits"); else { int siglen = GETSIGLEN(key); int cnttrue = sizebitvec(GETSIGN(key), siglen); - sprintf(outbuf, SINGOUTSTR, cnttrue, (int) SIGLENBIT(siglen) - cnttrue); + outbuf = psprintf("%d true bits, %d false bits", + cnttrue, (int) SIGLENBIT(siglen) - cnttrue); } } |