58 lines
1.3 KiB
C
58 lines
1.3 KiB
C
/*-------------------------------------------------------------------------
|
|
*
|
|
* rmgrdesc_utils.c
|
|
* Support functions for rmgrdesc routines
|
|
*
|
|
* Copyright (c) 2023, PostgreSQL Global Development Group
|
|
*
|
|
*
|
|
* IDENTIFICATION
|
|
* src/backend/access/rmgrdesc/rmgrdesc_utils.c
|
|
*
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
#include "postgres.h"
|
|
|
|
#include "access/rmgrdesc_utils.h"
|
|
#include "storage/off.h"
|
|
|
|
void
|
|
array_desc(StringInfo buf, void *array, size_t elem_size, int count,
|
|
void (*elem_desc) (StringInfo buf, void *elem, void *data),
|
|
void *data)
|
|
{
|
|
if (count == 0)
|
|
{
|
|
appendStringInfoString(buf, " []");
|
|
return;
|
|
}
|
|
appendStringInfoString(buf, " [");
|
|
for (int i = 0; i < count; i++)
|
|
{
|
|
elem_desc(buf, (char *) array + elem_size * i, data);
|
|
if (i < count - 1)
|
|
appendStringInfoString(buf, ", ");
|
|
}
|
|
appendStringInfoString(buf, "]");
|
|
}
|
|
|
|
void
|
|
offset_elem_desc(StringInfo buf, void *offset, void *data)
|
|
{
|
|
appendStringInfo(buf, "%u", *(OffsetNumber *) offset);
|
|
}
|
|
|
|
void
|
|
redirect_elem_desc(StringInfo buf, void *offset, void *data)
|
|
{
|
|
OffsetNumber *new_offset = (OffsetNumber *) offset;
|
|
|
|
appendStringInfo(buf, "%u->%u", new_offset[0], new_offset[1]);
|
|
}
|
|
|
|
void
|
|
oid_elem_desc(StringInfo buf, void *relid, void *data)
|
|
{
|
|
appendStringInfo(buf, "%u", *(Oid *) relid);
|
|
}
|