postgresql/src/backend/access/rmgrdesc/rmgrdesc_utils.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);
}