Line data Source code
1 : /*-------------------------------------------------------------------------
2 : *
3 : * rmgrdesc_utils.c
4 : * Support functions for rmgrdesc routines
5 : *
6 : * Copyright (c) 2023-2024, PostgreSQL Global Development Group
7 : *
8 : *
9 : * IDENTIFICATION
10 : * src/backend/access/rmgrdesc/rmgrdesc_utils.c
11 : *
12 : *-------------------------------------------------------------------------
13 : */
14 : #include "postgres.h"
15 :
16 : #include "access/rmgrdesc_utils.h"
17 : #include "storage/off.h"
18 :
19 : /*
20 : * Helper function to print an array, in the format described in the
21 : * README.
22 : */
23 : void
24 12088 : array_desc(StringInfo buf, void *array, size_t elem_size, int count,
25 : void (*elem_desc) (StringInfo buf, void *elem, void *data),
26 : void *data)
27 : {
28 12088 : if (count == 0)
29 : {
30 12 : appendStringInfoString(buf, " []");
31 12 : return;
32 : }
33 12076 : appendStringInfoString(buf, " [");
34 191268 : for (int i = 0; i < count; i++)
35 : {
36 179192 : elem_desc(buf, (char *) array + elem_size * i, data);
37 179192 : if (i < count - 1)
38 167116 : appendStringInfoString(buf, ", ");
39 : }
40 12076 : appendStringInfoChar(buf, ']');
41 : }
42 :
43 : void
44 176712 : offset_elem_desc(StringInfo buf, void *offset, void *data)
45 : {
46 176712 : appendStringInfo(buf, "%u", *(OffsetNumber *) offset);
47 176712 : }
48 :
49 : void
50 1264 : redirect_elem_desc(StringInfo buf, void *offset, void *data)
51 : {
52 1264 : OffsetNumber *new_offset = (OffsetNumber *) offset;
53 :
54 1264 : appendStringInfo(buf, "%u->%u", new_offset[0], new_offset[1]);
55 1264 : }
56 :
57 : void
58 12 : oid_elem_desc(StringInfo buf, void *relid, void *data)
59 : {
60 12 : appendStringInfo(buf, "%u", *(Oid *) relid);
61 12 : }
|