mirror of
https://github.com/postgres/postgres.git
synced 2026-06-11 01:30:11 -04:00
Adjust some incorrect *GetDatum() macros
This reverts portions of commit6dcfac9696, 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 of6dcfac9696that 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 to6dcfac9696. 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
This commit is contained in:
parent
4bfd0f1b76
commit
ac59a90bef
5 changed files with 7 additions and 7 deletions
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in a new issue