/src/postgres/src/backend/access/rmgrdesc/genericdesc.c
Line | Count | Source |
1 | | /*------------------------------------------------------------------------- |
2 | | * |
3 | | * genericdesc.c |
4 | | * rmgr descriptor routines for access/transam/generic_xlog.c |
5 | | * |
6 | | * |
7 | | * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group |
8 | | * Portions Copyright (c) 1994, Regents of the University of California |
9 | | * |
10 | | * src/backend/access/rmgrdesc/genericdesc.c |
11 | | * |
12 | | *------------------------------------------------------------------------- |
13 | | */ |
14 | | #include "postgres.h" |
15 | | |
16 | | #include "access/generic_xlog.h" |
17 | | #include "lib/stringinfo.h" |
18 | | |
19 | | /* |
20 | | * Description of generic xlog record: write page regions that this record |
21 | | * overrides. |
22 | | */ |
23 | | void |
24 | | generic_desc(StringInfo buf, XLogReaderState *record) |
25 | 0 | { |
26 | 0 | Pointer ptr = XLogRecGetData(record), |
27 | 0 | end = ptr + XLogRecGetDataLen(record); |
28 | |
|
29 | 0 | while (ptr < end) |
30 | 0 | { |
31 | 0 | OffsetNumber offset, |
32 | 0 | length; |
33 | |
|
34 | 0 | memcpy(&offset, ptr, sizeof(offset)); |
35 | 0 | ptr += sizeof(offset); |
36 | 0 | memcpy(&length, ptr, sizeof(length)); |
37 | 0 | ptr += sizeof(length); |
38 | 0 | ptr += length; |
39 | |
|
40 | 0 | if (ptr < end) |
41 | 0 | appendStringInfo(buf, "offset %u, length %u; ", offset, length); |
42 | 0 | else |
43 | 0 | appendStringInfo(buf, "offset %u, length %u", offset, length); |
44 | 0 | } |
45 | 0 | } |
46 | | |
47 | | /* |
48 | | * Identification of generic xlog record: we don't distinguish any subtypes |
49 | | * inside generic xlog records. |
50 | | */ |
51 | | const char * |
52 | | generic_identify(uint8 info) |
53 | 0 | { |
54 | 0 | return "Generic"; |
55 | 0 | } |