]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Adjust some incorrect *GetDatum() macros
authorMichael Paquier <michael@paquier.xyz>
Thu, 30 Apr 2026 04:10:19 +0000 (13:10 +0900)
committerMichael Paquier <michael@paquier.xyz>
Thu, 30 Apr 2026 04:10:19 +0000 (13:10 +0900)
This reverts portions of commit 6dcfac9696cb, which is wrong in trying
to use a *GetDatum() that matches with the C types of the values read.
*GetDatum() should match with the output argument types of the SQL
functions.

The portions of 6dcfac9696cb that are right regarding this rule are:
- gistget.c, where the GiST support functions use DatumGetUInt16() to
retrieve the strategy number.
- The BRIN code for strategynum, used in syscache lookups.

The adjustments done in this commit are for pageinspect, pg_buffercache
and pg_lock_status().

While double-checking the whole state of the tree regarding non-matching
pairs of DatumGet*() and *GetDatum(), I have found much more code paths
that are incorrect, unrelated to 6dcfac9696cb.  These may be adjusted in
the future, in a different patch (perhaps not for v19, as we are already
past feature freeze).

Reported-by: Peter Eisentraut <peter@eisentraut.org>
Discussion: https://postgr.es/m/97f9375a-be61-4272-a44d-408337fe8fa6@eisentraut.org
Discussion: https://postgr.es/m/CAJ7c6TMcGu8qmRe1gZfJ-gOzVnZq-t=fwn-UuyStx1w6ZyydMw@mail.gmail.com

contrib/pageinspect/btreefuncs.c
contrib/pageinspect/ginfuncs.c
contrib/pageinspect/gistfuncs.c
contrib/pg_buffercache/pg_buffercache_pages.c
src/backend/utils/adt/lockfuncs.c

index 0585b7cee4028ce61ba5326622a110e3d15d06e6..62c905c6e7c2c2ec73642cf97de9014099093a8c 100644 (file)
@@ -507,7 +507,7 @@ bt_page_print_tuples(ua_page_items *uargs)
 
        j = 0;
        memset(nulls, 0, sizeof(nulls));
-       values[j++] = UInt16GetDatum(offset);
+       values[j++] = Int16GetDatum(offset);
        values[j++] = ItemPointerGetDatum(&itup->t_tid);
        values[j++] = Int32GetDatum((int) IndexTupleSize(itup));
        values[j++] = BoolGetDatum(IndexTupleHasNulls(itup));
index b6574083b0a147e2e7cd2b754c0b1186a6a03c16..ebcc2b3db5c71e8761ec408ad0585ecbe57764d8 100644 (file)
@@ -73,7 +73,7 @@ gin_metapage_info(PG_FUNCTION_ARGS)
 
        values[0] = Int64GetDatum(metadata->head);
        values[1] = Int64GetDatum(metadata->tail);
-       values[2] = UInt32GetDatum(metadata->tailFreeSize);
+       values[2] = Int32GetDatum(metadata->tailFreeSize);
        values[3] = Int64GetDatum(metadata->nPendingPages);
        values[4] = Int64GetDatum(metadata->nPendingHeapTuples);
 
index 89678d377c7bfc12e55494bbd7bbbfb039ab357d..23a4b49771d45212486db10d0933ae2a8286948c 100644 (file)
@@ -177,7 +177,7 @@ gist_page_items_bytea(PG_FUNCTION_ARGS)
 
                memset(nulls, 0, sizeof(nulls));
 
-               values[0] = UInt16GetDatum(offset);
+               values[0] = Int16GetDatum(offset);
                values[1] = ItemPointerGetDatum(&itup->t_tid);
                values[2] = Int32GetDatum((int) IndexTupleSize(itup));
 
@@ -284,7 +284,7 @@ gist_page_items(PG_FUNCTION_ARGS)
 
                memset(nulls, 0, sizeof(nulls));
 
-               values[0] = UInt16GetDatum(offset);
+               values[0] = Int16GetDatum(offset);
                values[1] = ItemPointerGetDatum(&itup->t_tid);
                values[2] = Int32GetDatum((int) IndexTupleSize(itup));
                values[3] = BoolGetDatum(ItemIdIsDead(id));
index 1ec2cf0e6f468049066903ee26cc852ad1c22151..bf2e6c972202d6434391b709e21109f033275094 100644 (file)
@@ -192,7 +192,7 @@ pg_buffercache_pages(PG_FUNCTION_ARGS)
                        nulls[5] = false;
                        values[6] = BoolGetDatum(isdirty);
                        nulls[6] = false;
-                       values[7] = UInt16GetDatum(usagecount);
+                       values[7] = Int16GetDatum(usagecount);
                        nulls[7] = false;
                        /* unused for v1.0 callers, but the array is always long enough */
                        values[8] = Int32GetDatum(pinning_backends);
index 4481c354fd61967a39098d9587fb1f35038cecc9..dc58e9cb0a6de245ee0a21be4e42884938dd3ff8 100644 (file)
@@ -330,7 +330,7 @@ pg_lock_status(PG_FUNCTION_ARGS)
                                values[1] = ObjectIdGetDatum(instance->locktag.locktag_field1);
                                values[8] = ObjectIdGetDatum(instance->locktag.locktag_field2);
                                values[6] = ObjectIdGetDatum(instance->locktag.locktag_field3);
-                               values[9] = UInt16GetDatum(instance->locktag.locktag_field4);
+                               values[9] = Int16GetDatum(instance->locktag.locktag_field4);
                                nulls[2] = true;
                                nulls[3] = true;
                                nulls[4] = true;
@@ -344,7 +344,7 @@ pg_lock_status(PG_FUNCTION_ARGS)
                                values[1] = ObjectIdGetDatum(instance->locktag.locktag_field1);
                                values[7] = ObjectIdGetDatum(instance->locktag.locktag_field2);
                                values[8] = ObjectIdGetDatum(instance->locktag.locktag_field3);
-                               values[9] = UInt16GetDatum(instance->locktag.locktag_field4);
+                               values[9] = Int16GetDatum(instance->locktag.locktag_field4);
                                nulls[2] = true;
                                nulls[3] = true;
                                nulls[4] = true;