Improve description of keys in tsvector
authorMichael Paquier
Tue, 5 Sep 2023 04:57:44 +0000 (13:57 +0900)
committerMichael Paquier
Tue, 5 Sep 2023 04:57:44 +0000 (13:57 +0900)
If all the bits of a key in a tsvector are true (marked with ALLISTRUE),
gtsvectorout() would show the following description:
"0 true bits, 0 false bits"

This is confusing, as all the bits are true, but this would be
equivalent to the information if siglen is 0.

This commit improves the output so as "all true bits" show instead in
this case.  Alexander has proposed a regression test for pageinspect,
not included here as it is rather expensive compared to its coverage
value.

Author: Alexander Lakhin
Discussion: https://postgr.es/m/17950-6c80a8d2b94ec695@postgresql.org

src/backend/utils/adt/tsgistidx.c

index 12a4111e99a0903ae0490baa85a055da3dd1775a..273f9b09253c393e5c31ab7853f846bc2ffffbc9 100644 (file)
@@ -115,10 +115,15 @@ gtsvectorout(PG_FUNCTION_ARGS)
        sprintf(outbuf, ARROUTSTR, (int) ARRNELEM(key));
    else
    {
-       int         siglen = GETSIGLEN(key);
-       int         cnttrue = (ISALLTRUE(key)) ? SIGLENBIT(siglen) : sizebitvec(GETSIGN(key), siglen);
+       if (ISALLTRUE(key))
+           sprintf(outbuf, "all true bits");
+       else
+       {
+           int         siglen = GETSIGLEN(key);
+           int         cnttrue = sizebitvec(GETSIGN(key), siglen);
 
-       sprintf(outbuf, SINGOUTSTR, cnttrue, (int) SIGLENBIT(siglen) - cnttrue);
+           sprintf(outbuf, SINGOUTSTR, cnttrue, (int) SIGLENBIT(siglen) - cnttrue);
+       }
    }
 
    PG_FREE_IF_COPY(key, 0);