Back-patch portability fixes for contrib/pageinspect/ginfuncs.c.
Back-patch commits 84ad68d64 and 367b99bbb.
This commit is contained in:
parent
ac6fc1b55c
commit
56d34ba5fb
@ -28,11 +28,31 @@ PG_FUNCTION_INFO_V1(gin_metapage_info);
|
||||
PG_FUNCTION_INFO_V1(gin_page_opaque_info);
|
||||
PG_FUNCTION_INFO_V1(gin_leafpage_items);
|
||||
|
||||
|
||||
static Page
|
||||
get_page_from_raw(bytea *raw_page)
|
||||
{
|
||||
int raw_page_size;
|
||||
Page page;
|
||||
|
||||
raw_page_size = VARSIZE(raw_page) - VARHDRSZ;
|
||||
if (raw_page_size < BLCKSZ)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
|
||||
errmsg("input page too small (%d bytes)", raw_page_size)));
|
||||
|
||||
/* make a copy so that the page is properly aligned for struct access */
|
||||
page = palloc(raw_page_size);
|
||||
memcpy(page, VARDATA(raw_page), raw_page_size);
|
||||
|
||||
return page;
|
||||
}
|
||||
|
||||
|
||||
Datum
|
||||
gin_metapage_info(PG_FUNCTION_ARGS)
|
||||
{
|
||||
bytea *raw_page = PG_GETARG_BYTEA_P(0);
|
||||
int raw_page_size;
|
||||
TupleDesc tupdesc;
|
||||
Page page;
|
||||
GinPageOpaque opaq;
|
||||
@ -46,12 +66,7 @@ gin_metapage_info(PG_FUNCTION_ARGS)
|
||||
(errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
|
||||
(errmsg("must be superuser to use raw page functions"))));
|
||||
|
||||
raw_page_size = VARSIZE(raw_page) - VARHDRSZ;
|
||||
if (raw_page_size < BLCKSZ)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
|
||||
errmsg("input page too small (%d bytes)", raw_page_size)));
|
||||
page = VARDATA(raw_page);
|
||||
page = get_page_from_raw(raw_page);
|
||||
|
||||
opaq = (GinPageOpaque) PageGetSpecialPointer(page);
|
||||
if (opaq->flags != GIN_META)
|
||||
@ -94,7 +109,6 @@ Datum
|
||||
gin_page_opaque_info(PG_FUNCTION_ARGS)
|
||||
{
|
||||
bytea *raw_page = PG_GETARG_BYTEA_P(0);
|
||||
int raw_page_size;
|
||||
TupleDesc tupdesc;
|
||||
Page page;
|
||||
GinPageOpaque opaq;
|
||||
@ -110,12 +124,7 @@ gin_page_opaque_info(PG_FUNCTION_ARGS)
|
||||
(errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
|
||||
(errmsg("must be superuser to use raw page functions"))));
|
||||
|
||||
raw_page_size = VARSIZE(raw_page) - VARHDRSZ;
|
||||
if (raw_page_size < BLCKSZ)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
|
||||
errmsg("input page too small (%d bytes)", raw_page_size)));
|
||||
page = VARDATA(raw_page);
|
||||
page = get_page_from_raw(raw_page);
|
||||
|
||||
opaq = (GinPageOpaque) PageGetSpecialPointer(page);
|
||||
|
||||
@ -173,7 +182,6 @@ Datum
|
||||
gin_leafpage_items(PG_FUNCTION_ARGS)
|
||||
{
|
||||
bytea *raw_page = PG_GETARG_BYTEA_P(0);
|
||||
int raw_page_size;
|
||||
FuncCallContext *fctx;
|
||||
gin_leafpage_items_state *inter_call_data;
|
||||
|
||||
@ -182,8 +190,6 @@ gin_leafpage_items(PG_FUNCTION_ARGS)
|
||||
(errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
|
||||
(errmsg("must be superuser to use raw page functions"))));
|
||||
|
||||
raw_page_size = VARSIZE(raw_page) - VARHDRSZ;
|
||||
|
||||
if (SRF_IS_FIRSTCALL())
|
||||
{
|
||||
TupleDesc tupdesc;
|
||||
@ -191,11 +197,10 @@ gin_leafpage_items(PG_FUNCTION_ARGS)
|
||||
Page page;
|
||||
GinPageOpaque opaq;
|
||||
|
||||
if (raw_page_size < BLCKSZ)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
|
||||
errmsg("input page too small (%d bytes)", raw_page_size)));
|
||||
page = VARDATA(raw_page);
|
||||
fctx = SRF_FIRSTCALL_INIT();
|
||||
mctx = MemoryContextSwitchTo(fctx->multi_call_memory_ctx);
|
||||
|
||||
page = get_page_from_raw(raw_page);
|
||||
|
||||
if (PageGetSpecialSize(page) != MAXALIGN(sizeof(GinPageOpaqueData)))
|
||||
ereport(ERROR,
|
||||
@ -214,9 +219,6 @@ gin_leafpage_items(PG_FUNCTION_ARGS)
|
||||
opaq->flags,
|
||||
(GIN_DATA | GIN_LEAF | GIN_COMPRESSED))));
|
||||
|
||||
fctx = SRF_FIRSTCALL_INIT();
|
||||
mctx = MemoryContextSwitchTo(fctx->multi_call_memory_ctx);
|
||||
|
||||
inter_call_data = palloc(sizeof(gin_leafpage_items_state));
|
||||
|
||||
/* Build a tuple descriptor for our result type */
|
||||
|
Loading…
x
Reference in New Issue
Block a user