Improve description of keys in tsvector
authorMichael Paquier <michael@paquier.xyz>
Tue, 5 Sep 2023 04:57:44 +0000 (13:57 +0900)
committerMichael Paquier <michael@paquier.xyz>
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);