LCOV - differential code coverage report
Current view: top level - src/backend/access/rmgrdesc - heapdesc.c (source / functions) Coverage Total Hit UNC LBC UBC GBC GNC CBC EUB DCB
Current: bed3ffbf9d952be6c7d739d068cdce44c046dfb7 vs 574581b50ac9c63dd9e4abebb731a3b67e5b50f6 Lines: 89.4 % 254 227 1 26 7 220 8
Current Date: 2026-05-05 10:23:31 +0900 Functions: 100.0 % 8 8 3 5 1
Baseline: lcov-20260505-025707-baseline Branches: 78.8 % 113 89 1 2 21 2 5 82 1 2
Baseline Date: 2026-05-05 10:27:06 +0900 Line coverage date bins:
Legend: Lines:     hit not hit
Branches: + taken - not taken # not executed
(30,360] days: 87.5 % 8 7 1 7
(360..) days: 89.4 % 246 220 26 220
Function coverage date bins:
(30,360] days: 100.0 % 1 1 1
(360..) days: 100.0 % 7 7 2 5
Branch coverage date bins:
(30,360] days: 83.3 % 6 5 1 5
(360..) days: 77.8 % 108 84 2 21 2 82 1

 Age         Owner                    Branch data    TLA  Line data    Source code
                                  1                 :                : /*-------------------------------------------------------------------------
                                  2                 :                :  *
                                  3                 :                :  * heapdesc.c
                                  4                 :                :  *    rmgr descriptor routines for access/heap/heapam.c
                                  5                 :                :  *
                                  6                 :                :  * Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
                                  7                 :                :  * Portions Copyright (c) 1994, Regents of the University of California
                                  8                 :                :  *
                                  9                 :                :  *
                                 10                 :                :  * IDENTIFICATION
                                 11                 :                :  *    src/backend/access/rmgrdesc/heapdesc.c
                                 12                 :                :  *
                                 13                 :                :  *-------------------------------------------------------------------------
                                 14                 :                :  */
                                 15                 :                : #include "postgres.h"
                                 16                 :                : 
                                 17                 :                : #include "access/heapam_xlog.h"
                                 18                 :                : #include "access/rmgrdesc_utils.h"
                                 19                 :                : #include "access/visibilitymapdefs.h"
                                 20                 :                : #include "storage/standbydefs.h"
                                 21                 :                : 
                                 22                 :                : /*
                                 23                 :                :  * NOTE: "keyname" argument cannot have trailing spaces or punctuation
                                 24                 :                :  * characters
                                 25                 :                :  */
                                 26                 :                : static void
 1120 pg@bowt.ie                 27                 :CBC      142171 : infobits_desc(StringInfo buf, uint8 infobits, const char *keyname)
                                 28                 :                : {
                                 29                 :         142171 :     appendStringInfo(buf, "%s: [", keyname);
                                 30                 :                : 
                                 31         [ -  + ]:         142171 :     Assert(buf->data[buf->len - 1] != ' ');
                                 32                 :                : 
 4850 alvherre@alvh.no-ip.       33         [ -  + ]:         142171 :     if (infobits & XLHL_XMAX_IS_MULTI)
 1120 pg@bowt.ie                 34                 :UBC           0 :         appendStringInfoString(buf, "IS_MULTI, ");
 4850 alvherre@alvh.no-ip.       35         [ +  + ]:CBC      142171 :     if (infobits & XLHL_XMAX_LOCK_ONLY)
 1120 pg@bowt.ie                 36                 :          70402 :         appendStringInfoString(buf, "LOCK_ONLY, ");
 4850 alvherre@alvh.no-ip.       37         [ +  + ]:         142171 :     if (infobits & XLHL_XMAX_EXCL_LOCK)
 1120 pg@bowt.ie                 38                 :          70402 :         appendStringInfoString(buf, "EXCL_LOCK, ");
 4850 alvherre@alvh.no-ip.       39         [ -  + ]:         142171 :     if (infobits & XLHL_XMAX_KEYSHR_LOCK)
 1120 pg@bowt.ie                 40                 :UBC           0 :         appendStringInfoString(buf, "KEYSHR_LOCK, ");
 4850 alvherre@alvh.no-ip.       41         [ +  + ]:CBC      142171 :     if (infobits & XLHL_KEYS_UPDATED)
 1120 pg@bowt.ie                 42                 :            449 :         appendStringInfoString(buf, "KEYS_UPDATED, ");
                                 43                 :                : 
                                 44         [ +  + ]:         142171 :     if (buf->data[buf->len - 1] == ' ')
                                 45                 :                :     {
                                 46                 :                :         /* Truncate-away final unneeded ", "  */
                                 47         [ -  + ]:          70851 :         Assert(buf->data[buf->len - 2] == ',');
                                 48                 :          70851 :         buf->len -= 2;
                                 49                 :          70851 :         buf->data[buf->len] = '\0';
                                 50                 :                :     }
                                 51                 :                : 
  945 drowley@postgresql.o       52                 :         142171 :     appendStringInfoChar(buf, ']');
 1120 pg@bowt.ie                 53                 :         142171 : }
                                 54                 :                : 
                                 55                 :                : static void
                                 56                 :             14 : truncate_flags_desc(StringInfo buf, uint8 flags)
                                 57                 :                : {
                                 58                 :             14 :     appendStringInfoString(buf, "flags: [");
                                 59                 :                : 
                                 60         [ -  + ]:             14 :     if (flags & XLH_TRUNCATE_CASCADE)
 1120 pg@bowt.ie                 61                 :UBC           0 :         appendStringInfoString(buf, "CASCADE, ");
 1120 pg@bowt.ie                 62         [ -  + ]:CBC          14 :     if (flags & XLH_TRUNCATE_RESTART_SEQS)
 1120 pg@bowt.ie                 63                 :UBC           0 :         appendStringInfoString(buf, "RESTART_SEQS, ");
                                 64                 :                : 
 1120 pg@bowt.ie                 65         [ -  + ]:CBC          14 :     if (buf->data[buf->len - 1] == ' ')
                                 66                 :                :     {
                                 67                 :                :         /* Truncate-away final unneeded ", "  */
 1120 pg@bowt.ie                 68         [ #  # ]:UBC           0 :         Assert(buf->data[buf->len - 2] == ',');
                                 69                 :              0 :         buf->len -= 2;
                                 70                 :              0 :         buf->data[buf->len] = '\0';
                                 71                 :                :     }
                                 72                 :                : 
  945 drowley@postgresql.o       73                 :CBC          14 :     appendStringInfoChar(buf, ']');
 1124 pg@bowt.ie                 74                 :             14 : }
                                 75                 :                : 
                                 76                 :                : static void
                                 77                 :            641 : plan_elem_desc(StringInfo buf, void *plan, void *data)
                                 78                 :                : {
  771 heikki.linnakangas@i       79                 :            641 :     xlhp_freeze_plan *new_plan = (xlhp_freeze_plan *) plan;
 1124 pg@bowt.ie                 80                 :            641 :     OffsetNumber **offsets = data;
                                 81                 :                : 
                                 82                 :            641 :     appendStringInfo(buf, "{ xmax: %u, infomask: %u, infomask2: %u, ntuples: %u",
                                 83                 :                :                      new_plan->xmax,
                                 84                 :            641 :                      new_plan->t_infomask, new_plan->t_infomask2,
                                 85                 :            641 :                      new_plan->ntuples);
                                 86                 :                : 
                                 87                 :            641 :     appendStringInfoString(buf, ", offsets:");
                                 88                 :            641 :     array_desc(buf, *offsets, sizeof(OffsetNumber), new_plan->ntuples,
                                 89                 :                :                &offset_elem_desc, NULL);
                                 90                 :                : 
                                 91                 :            641 :     *offsets += new_plan->ntuples;
                                 92                 :                : 
  945 drowley@postgresql.o       93                 :            641 :     appendStringInfoString(buf, " }");
 4850 alvherre@alvh.no-ip.       94                 :            641 : }
                                 95                 :                : 
                                 96                 :                : 
                                 97                 :                : /*
                                 98                 :                :  * Given a MAXALIGNed buffer returned by XLogRecGetBlockData() and pointed to
                                 99                 :                :  * by cursor and any xl_heap_prune flags, deserialize the arrays of
                                100                 :                :  * OffsetNumbers contained in an XLOG_HEAP2_PRUNE_* record.
                                101                 :                :  *
                                102                 :                :  * This is in heapdesc.c so it can be shared between heap2_redo and heap2_desc
                                103                 :                :  * code, the latter of which is used in frontend (pg_waldump) code.
                                104                 :                :  */
                                105                 :                : void
  204 melanieplageman@gmai      106                 :GNC       16101 : heap_xlog_deserialize_prune_and_freeze(char *cursor, uint16 flags,
                                107                 :                :                                        int *nplans, xlhp_freeze_plan **plans,
                                108                 :                :                                        OffsetNumber **frz_offsets,
                                109                 :                :                                        int *nredirected, OffsetNumber **redirected,
                                110                 :                :                                        int *ndead, OffsetNumber **nowdead,
                                111                 :                :                                        int *nunused, OffsetNumber **nowunused)
                                112                 :                : {
  771 heikki.linnakangas@i      113         [ +  + ]:CBC       16101 :     if (flags & XLHP_HAS_FREEZE_PLANS)
                                114                 :                :     {
                                115                 :           2216 :         xlhp_freeze_plans *freeze_plans = (xlhp_freeze_plans *) cursor;
                                116                 :                : 
                                117                 :           2216 :         *nplans = freeze_plans->nplans;
                                118         [ -  + ]:           2216 :         Assert(*nplans > 0);
                                119                 :           2216 :         *plans = freeze_plans->plans;
                                120                 :                : 
                                121                 :           2216 :         cursor += offsetof(xlhp_freeze_plans, plans);
                                122                 :           2216 :         cursor += sizeof(xlhp_freeze_plan) * *nplans;
                                123                 :                :     }
                                124                 :                :     else
                                125                 :                :     {
                                126                 :          13885 :         *nplans = 0;
                                127                 :          13885 :         *plans = NULL;
                                128                 :                :     }
                                129                 :                : 
                                130         [ +  + ]:          16101 :     if (flags & XLHP_HAS_REDIRECTIONS)
                                131                 :                :     {
                                132                 :           2416 :         xlhp_prune_items *subrecord = (xlhp_prune_items *) cursor;
                                133                 :                : 
                                134                 :           2416 :         *nredirected = subrecord->ntargets;
                                135         [ -  + ]:           2416 :         Assert(*nredirected > 0);
                                136                 :           2416 :         *redirected = &subrecord->data[0];
                                137                 :                : 
                                138                 :           2416 :         cursor += offsetof(xlhp_prune_items, data);
                                139                 :           2416 :         cursor += sizeof(OffsetNumber[2]) * *nredirected;
                                140                 :                :     }
                                141                 :                :     else
                                142                 :                :     {
                                143                 :          13685 :         *nredirected = 0;
                                144                 :          13685 :         *redirected = NULL;
                                145                 :                :     }
                                146                 :                : 
                                147         [ +  + ]:          16101 :     if (flags & XLHP_HAS_DEAD_ITEMS)
                                148                 :                :     {
                                149                 :           7367 :         xlhp_prune_items *subrecord = (xlhp_prune_items *) cursor;
                                150                 :                : 
                                151                 :           7367 :         *ndead = subrecord->ntargets;
                                152         [ -  + ]:           7367 :         Assert(*ndead > 0);
                                153                 :           7367 :         *nowdead = subrecord->data;
                                154                 :                : 
                                155                 :           7367 :         cursor += offsetof(xlhp_prune_items, data);
                                156                 :           7367 :         cursor += sizeof(OffsetNumber) * *ndead;
                                157                 :                :     }
                                158                 :                :     else
                                159                 :                :     {
                                160                 :           8734 :         *ndead = 0;
                                161                 :           8734 :         *nowdead = NULL;
                                162                 :                :     }
                                163                 :                : 
                                164         [ +  + ]:          16101 :     if (flags & XLHP_HAS_NOW_UNUSED_ITEMS)
                                165                 :                :     {
                                166                 :           5616 :         xlhp_prune_items *subrecord = (xlhp_prune_items *) cursor;
                                167                 :                : 
                                168                 :           5616 :         *nunused = subrecord->ntargets;
                                169         [ -  + ]:           5616 :         Assert(*nunused > 0);
                                170                 :           5616 :         *nowunused = subrecord->data;
                                171                 :                : 
                                172                 :           5616 :         cursor += offsetof(xlhp_prune_items, data);
                                173                 :           5616 :         cursor += sizeof(OffsetNumber) * *nunused;
                                174                 :                :     }
                                175                 :                :     else
                                176                 :                :     {
                                177                 :          10485 :         *nunused = 0;
                                178                 :          10485 :         *nowunused = NULL;
                                179                 :                :     }
                                180                 :                : 
                                181                 :          16101 :     *frz_offsets = (OffsetNumber *) cursor;
                                182                 :          16101 : }
                                183                 :                : 
                                184                 :                : void
 4184                           185                 :         341233 : heap_desc(StringInfo buf, XLogReaderState *record)
                                186                 :                : {
 4343                           187                 :         341233 :     char       *rec = XLogRecGetData(record);
 4184                           188                 :         341233 :     uint8       info = XLogRecGetInfo(record) & ~XLR_INFO_MASK;
                                189                 :                : 
 4906 alvherre@alvh.no-ip.      190                 :         341233 :     info &= XLOG_HEAP_OPMASK;
                                191         [ +  + ]:         341233 :     if (info == XLOG_HEAP_INSERT)
                                192                 :                :     {
                                193                 :         196455 :         xl_heap_insert *xlrec = (xl_heap_insert *) rec;
                                194                 :                : 
 1124 pg@bowt.ie                195                 :         196455 :         appendStringInfo(buf, "off: %u, flags: 0x%02X",
                                196                 :         196455 :                          xlrec->offnum,
 2729 michael@paquier.xyz       197                 :         196455 :                          xlrec->flags);
                                198                 :                :     }
 4906 alvherre@alvh.no-ip.      199         [ +  + ]:         144778 :     else if (info == XLOG_HEAP_DELETE)
                                200                 :                :     {
                                201                 :            449 :         xl_heap_delete *xlrec = (xl_heap_delete *) rec;
                                202                 :                : 
 1120 pg@bowt.ie                203                 :            449 :         appendStringInfo(buf, "xmax: %u, off: %u, ",
                                204                 :            449 :                          xlrec->xmax, xlrec->offnum);
                                205                 :            449 :         infobits_desc(buf, xlrec->infobits_set, "infobits");
                                206                 :            449 :         appendStringInfo(buf, ", flags: 0x%02X", xlrec->flags);
                                207                 :                :     }
 4906 alvherre@alvh.no-ip.      208         [ +  + ]:         144329 :     else if (info == XLOG_HEAP_UPDATE)
                                209                 :                :     {
                                210                 :          70468 :         xl_heap_update *xlrec = (xl_heap_update *) rec;
                                211                 :                : 
 1120 pg@bowt.ie                212                 :          70468 :         appendStringInfo(buf, "old_xmax: %u, old_off: %u, ",
                                213                 :          70468 :                          xlrec->old_xmax, xlrec->old_offnum);
                                214                 :          70468 :         infobits_desc(buf, xlrec->old_infobits_set, "old_infobits");
                                215                 :          70468 :         appendStringInfo(buf, ", flags: 0x%02X, new_xmax: %u, new_off: %u",
                                216                 :          70468 :                          xlrec->flags, xlrec->new_xmax, xlrec->new_offnum);
                                217                 :                :     }
 4906 alvherre@alvh.no-ip.      218         [ +  + ]:          73861 :     else if (info == XLOG_HEAP_HOT_UPDATE)
                                219                 :                :     {
                                220                 :            852 :         xl_heap_update *xlrec = (xl_heap_update *) rec;
                                221                 :                : 
 1120 pg@bowt.ie                222                 :            852 :         appendStringInfo(buf, "old_xmax: %u, old_off: %u, ",
                                223                 :            852 :                          xlrec->old_xmax, xlrec->old_offnum);
                                224                 :            852 :         infobits_desc(buf, xlrec->old_infobits_set, "old_infobits");
                                225                 :            852 :         appendStringInfo(buf, ", flags: 0x%02X, new_xmax: %u, new_off: %u",
                                226                 :            852 :                          xlrec->flags, xlrec->new_xmax, xlrec->new_offnum);
                                227                 :                :     }
 2950 peter_e@gmx.net           228         [ +  + ]:          73009 :     else if (info == XLOG_HEAP_TRUNCATE)
                                229                 :                :     {
                                230                 :             14 :         xl_heap_truncate *xlrec = (xl_heap_truncate *) rec;
                                231                 :                : 
 1120 pg@bowt.ie                232                 :             14 :         truncate_flags_desc(buf, xlrec->flags);
 1124                           233                 :             14 :         appendStringInfo(buf, ", nrelids: %u", xlrec->nrelids);
                                234                 :             14 :         appendStringInfoString(buf, ", relids:");
                                235                 :             14 :         array_desc(buf, xlrec->relids, sizeof(Oid), xlrec->nrelids,
                                236                 :                :                    &oid_elem_desc, NULL);
                                237                 :                :     }
 4015 andres@anarazel.de        238         [ -  + ]:          72995 :     else if (info == XLOG_HEAP_CONFIRM)
                                239                 :                :     {
 4015 andres@anarazel.de        240                 :UBC           0 :         xl_heap_confirm *xlrec = (xl_heap_confirm *) rec;
                                241                 :                : 
 1124 pg@bowt.ie                242                 :              0 :         appendStringInfo(buf, "off: %u", xlrec->offnum);
                                243                 :                :     }
 4906 alvherre@alvh.no-ip.      244         [ +  + ]:CBC       72995 :     else if (info == XLOG_HEAP_LOCK)
                                245                 :                :     {
                                246                 :          70402 :         xl_heap_lock *xlrec = (xl_heap_lock *) rec;
                                247                 :                : 
 1120 pg@bowt.ie                248                 :          70402 :         appendStringInfo(buf, "xmax: %u, off: %u, ",
                                249                 :          70402 :                          xlrec->xmax, xlrec->offnum);
                                250                 :          70402 :         infobits_desc(buf, xlrec->infobits_set, "infobits");
                                251                 :          70402 :         appendStringInfo(buf, ", flags: 0x%02X", xlrec->flags);
                                252                 :                :     }
 4906 alvherre@alvh.no-ip.      253         [ +  - ]:           2593 :     else if (info == XLOG_HEAP_INPLACE)
                                254                 :                :     {
                                255                 :           2593 :         xl_heap_inplace *xlrec = (xl_heap_inplace *) rec;
                                256                 :                : 
 1124 pg@bowt.ie                257                 :           2593 :         appendStringInfo(buf, "off: %u", xlrec->offnum);
  557 noah@leadboat.com         258                 :           2593 :         standby_desc_invalidations(buf, xlrec->nmsgs, xlrec->msgs,
                                259                 :                :                                    xlrec->dbId, xlrec->tsId,
                                260                 :           2593 :                                    xlrec->relcacheInitFileInval);
                                261                 :                :     }
 4906 alvherre@alvh.no-ip.      262                 :         341233 : }
                                263                 :                : 
                                264                 :                : void
 4184 heikki.linnakangas@i      265                 :          12121 : heap2_desc(StringInfo buf, XLogReaderState *record)
                                266                 :                : {
 4343                           267                 :          12121 :     char       *rec = XLogRecGetData(record);
 4184                           268                 :          12121 :     uint8       info = XLogRecGetInfo(record) & ~XLR_INFO_MASK;
                                269                 :                : 
 4906 alvherre@alvh.no-ip.      270                 :          12121 :     info &= XLOG_HEAP_OPMASK;
  771 heikki.linnakangas@i      271   [ +  +  +  + ]:          12121 :     if (info == XLOG_HEAP2_PRUNE_ON_ACCESS ||
                                272         [ +  + ]:           9099 :         info == XLOG_HEAP2_PRUNE_VACUUM_SCAN ||
                                273                 :                :         info == XLOG_HEAP2_PRUNE_VACUUM_CLEANUP)
 4906 alvherre@alvh.no-ip.      274                 :           3506 :     {
 1855 pg@bowt.ie                275                 :           3506 :         xl_heap_prune *xlrec = (xl_heap_prune *) rec;
                                276                 :                : 
  771 heikki.linnakangas@i      277         [ +  + ]:           3506 :         if (xlrec->flags & XLHP_HAS_CONFLICT_HORIZON)
                                278                 :                :         {
                                279                 :                :             TransactionId conflict_xid;
                                280                 :                : 
                                281                 :           2562 :             memcpy(&conflict_xid, rec + SizeOfHeapPrune, sizeof(TransactionId));
                                282                 :                : 
                                283                 :           2562 :             appendStringInfo(buf, "snapshotConflictHorizon: %u",
                                284                 :                :                              conflict_xid);
                                285                 :                :         }
                                286                 :                : 
                                287                 :           3506 :         appendStringInfo(buf, ", isCatalogRel: %c",
                                288         [ +  + ]:           3506 :                          xlrec->flags & XLHP_IS_CATALOG_REL ? 'T' : 'F');
                                289                 :                : 
  204 melanieplageman@gmai      290         [ +  + ]:GNC        3506 :         if (xlrec->flags & XLHP_VM_ALL_VISIBLE)
                                291                 :                :         {
                                292                 :           2626 :             uint8       vmflags = VISIBILITYMAP_ALL_VISIBLE;
                                293                 :                : 
                                294         [ +  + ]:           2626 :             if (xlrec->flags & XLHP_VM_ALL_FROZEN)
                                295                 :           1360 :                 vmflags |= VISIBILITYMAP_ALL_FROZEN;
                                296                 :           2626 :             appendStringInfo(buf, ", vm_flags: 0x%02X", vmflags);
                                297                 :                :         }
                                298                 :                : 
 1112 pg@bowt.ie                299         [ +  + ]:CBC        3506 :         if (XLogRecHasBlockData(record, 0))
                                300                 :                :         {
                                301                 :                :             Size        datalen;
                                302                 :                :             OffsetNumber *redirected;
                                303                 :                :             OffsetNumber *nowdead;
                                304                 :                :             OffsetNumber *nowunused;
                                305                 :                :             int         nredirected;
                                306                 :                :             int         nunused;
                                307                 :                :             int         ndead;
                                308                 :                :             int         nplans;
                                309                 :                :             xlhp_freeze_plan *plans;
                                310                 :                :             OffsetNumber *frz_offsets;
                                311                 :                : 
  771 heikki.linnakangas@i      312                 :           1896 :             char       *cursor = XLogRecGetBlockData(record, 0, &datalen);
                                313                 :                : 
                                314                 :           1896 :             heap_xlog_deserialize_prune_and_freeze(cursor, xlrec->flags,
                                315                 :                :                                                    &nplans, &plans, &frz_offsets,
                                316                 :                :                                                    &nredirected, &redirected,
                                317                 :                :                                                    &ndead, &nowdead,
                                318                 :                :                                                    &nunused, &nowunused);
                                319                 :                : 
                                320                 :           1896 :             appendStringInfo(buf, ", nplans: %u, nredirected: %u, ndead: %u, nunused: %u",
                                321                 :                :                              nplans, nredirected, ndead, nunused);
                                322                 :                : 
                                323         [ +  + ]:           1896 :             if (nplans > 0)
                                324                 :                :             {
                                325                 :            537 :                 appendStringInfoString(buf, ", plans:");
                                326                 :            537 :                 array_desc(buf, plans, sizeof(xlhp_freeze_plan), nplans,
                                327                 :                :                            &plan_elem_desc, &frz_offsets);
                                328                 :                :             }
                                329                 :                : 
                                330         [ +  + ]:           1896 :             if (nredirected > 0)
                                331                 :                :             {
                                332                 :            327 :                 appendStringInfoString(buf, ", redirected:");
                                333                 :            327 :                 array_desc(buf, redirected, sizeof(OffsetNumber) * 2,
                                334                 :                :                            nredirected, &redirect_elem_desc, NULL);
                                335                 :                :             }
                                336                 :                : 
                                337         [ +  + ]:           1896 :             if (ndead > 0)
                                338                 :                :             {
                                339                 :            582 :                 appendStringInfoString(buf, ", dead:");
                                340                 :            582 :                 array_desc(buf, nowdead, sizeof(OffsetNumber), ndead,
                                341                 :                :                            &offset_elem_desc, NULL);
                                342                 :                :             }
                                343                 :                : 
                                344         [ +  + ]:           1896 :             if (nunused > 0)
                                345                 :                :             {
                                346                 :            587 :                 appendStringInfoString(buf, ", unused:");
                                347                 :            587 :                 array_desc(buf, nowunused, sizeof(OffsetNumber), nunused,
                                348                 :                :                            &offset_elem_desc, NULL);
                                349                 :                :             }
                                350                 :                :         }
                                351                 :                :     }
 4906 alvherre@alvh.no-ip.      352         [ +  + ]:           8615 :     else if (info == XLOG_HEAP2_MULTI_INSERT)
                                353                 :                :     {
                                354                 :           4846 :         xl_heap_multi_insert *xlrec = (xl_heap_multi_insert *) rec;
 1124 pg@bowt.ie                355                 :           4846 :         bool        isinit = (XLogRecGetInfo(record) & XLOG_HEAP_INIT_PAGE) != 0;
                                356                 :                : 
                                357                 :           4846 :         appendStringInfo(buf, "ntuples: %d, flags: 0x%02X", xlrec->ntuples,
 2729 michael@paquier.xyz       358                 :           4846 :                          xlrec->flags);
                                359                 :                : 
  208 melanieplageman@gmai      360         [ -  + ]:GNC        4846 :         if (xlrec->flags & XLH_INSERT_ALL_FROZEN_SET)
  208 melanieplageman@gmai      361                 :UNC           0 :             appendStringInfo(buf, ", vm_flags: 0x%02X",
                                362                 :                :                              VISIBILITYMAP_ALL_VISIBLE |
                                363                 :                :                              VISIBILITYMAP_ALL_FROZEN);
                                364                 :                : 
 1112 pg@bowt.ie                365   [ +  +  +  + ]:CBC        4846 :         if (XLogRecHasBlockData(record, 0) && !isinit)
                                366                 :                :         {
 1120                           367                 :           4630 :             appendStringInfoString(buf, ", offsets:");
 1124                           368                 :           4630 :             array_desc(buf, xlrec->offsets, sizeof(OffsetNumber),
                                369                 :           4630 :                        xlrec->ntuples, &offset_elem_desc, NULL);
                                370                 :                :         }
                                371                 :                :     }
 4850 alvherre@alvh.no-ip.      372         [ -  + ]:           3769 :     else if (info == XLOG_HEAP2_LOCK_UPDATED)
                                373                 :                :     {
 4850 alvherre@alvh.no-ip.      374                 :UBC           0 :         xl_heap_lock_updated *xlrec = (xl_heap_lock_updated *) rec;
                                375                 :                : 
 1120 pg@bowt.ie                376                 :              0 :         appendStringInfo(buf, "xmax: %u, off: %u, ",
                                377                 :              0 :                          xlrec->xmax, xlrec->offnum);
                                378                 :              0 :         infobits_desc(buf, xlrec->infobits_set, "infobits");
                                379                 :              0 :         appendStringInfo(buf, ", flags: 0x%02X", xlrec->flags);
                                380                 :                :     }
 4529 rhaas@postgresql.org      381         [ +  - ]:CBC        3769 :     else if (info == XLOG_HEAP2_NEW_CID)
                                382                 :                :     {
                                383                 :           3769 :         xl_heap_new_cid *xlrec = (xl_heap_new_cid *) rec;
                                384                 :                : 
 1124 pg@bowt.ie                385                 :           3769 :         appendStringInfo(buf, "rel: %u/%u/%u, tid: %u/%u",
                                386                 :                :                          xlrec->target_locator.spcOid,
                                387                 :                :                          xlrec->target_locator.dbOid,
                                388                 :                :                          xlrec->target_locator.relNumber,
 4184 heikki.linnakangas@i      389                 :           3769 :                          ItemPointerGetBlockNumber(&(xlrec->target_tid)),
                                390                 :           3769 :                          ItemPointerGetOffsetNumber(&(xlrec->target_tid)));
 1124 pg@bowt.ie                391                 :           3769 :         appendStringInfo(buf, ", cmin: %u, cmax: %u, combo: %u",
                                392                 :                :                          xlrec->cmin, xlrec->cmax, xlrec->combocid);
                                393                 :                :     }
 4246 andres@anarazel.de        394                 :          12121 : }
                                395                 :                : 
                                396                 :                : const char *
                                397                 :         341260 : heap_identify(uint8 info)
                                398                 :                : {
                                399                 :         341260 :     const char *id = NULL;
                                400                 :                : 
 4243                           401   [ +  +  +  +  :         341260 :     switch (info & ~XLR_INFO_MASK)
                                     +  +  -  +  -  
                                           +  +  - ]
                                402                 :                :     {
 4246                           403                 :         193223 :         case XLOG_HEAP_INSERT:
                                404                 :         193223 :             id = "INSERT";
                                405                 :         193223 :             break;
 4243                           406                 :           3238 :         case XLOG_HEAP_INSERT | XLOG_HEAP_INIT_PAGE:
                                407                 :           3238 :             id = "INSERT+INIT";
                                408                 :           3238 :             break;
 4246                           409                 :            452 :         case XLOG_HEAP_DELETE:
                                410                 :            452 :             id = "DELETE";
                                411                 :            452 :             break;
                                412                 :          70009 :         case XLOG_HEAP_UPDATE:
                                413                 :          70009 :             id = "UPDATE";
                                414                 :          70009 :             break;
 4243                           415                 :            465 :         case XLOG_HEAP_UPDATE | XLOG_HEAP_INIT_PAGE:
                                416                 :            465 :             id = "UPDATE+INIT";
                                417                 :            465 :             break;
 4246                           418                 :            855 :         case XLOG_HEAP_HOT_UPDATE:
                                419                 :            855 :             id = "HOT_UPDATE";
                                420                 :            855 :             break;
 4243 andres@anarazel.de        421                 :UBC           0 :         case XLOG_HEAP_HOT_UPDATE | XLOG_HEAP_INIT_PAGE:
                                422                 :              0 :             id = "HOT_UPDATE+INIT";
                                423                 :              0 :             break;
 2950 peter_e@gmx.net           424                 :CBC          17 :         case XLOG_HEAP_TRUNCATE:
                                425                 :             17 :             id = "TRUNCATE";
                                426                 :             17 :             break;
 4015 andres@anarazel.de        427                 :UBC           0 :         case XLOG_HEAP_CONFIRM:
                                428                 :              0 :             id = "HEAP_CONFIRM";
                                429                 :              0 :             break;
 4246 andres@anarazel.de        430                 :CBC       70405 :         case XLOG_HEAP_LOCK:
                                431                 :          70405 :             id = "LOCK";
                                432                 :          70405 :             break;
                                433                 :           2596 :         case XLOG_HEAP_INPLACE:
                                434                 :           2596 :             id = "INPLACE";
                                435                 :           2596 :             break;
                                436                 :                :     }
                                437                 :                : 
                                438                 :         341260 :     return id;
                                439                 :                : }
                                440                 :                : 
                                441                 :                : const char *
                                442                 :          12139 : heap2_identify(uint8 info)
                                443                 :                : {
                                444                 :          12139 :     const char *id = NULL;
                                445                 :                : 
 4243                           446   [ +  +  +  +  :          12139 :     switch (info & ~XLR_INFO_MASK)
                                     +  -  +  -  -  
                                                 - ]
                                447                 :                :     {
  771 heikki.linnakangas@i      448                 :            530 :         case XLOG_HEAP2_PRUNE_ON_ACCESS:
                                449                 :            530 :             id = "PRUNE_ON_ACCESS";
 1855 pg@bowt.ie                450                 :            530 :             break;
  771 heikki.linnakangas@i      451                 :           2498 :         case XLOG_HEAP2_PRUNE_VACUUM_SCAN:
                                452                 :           2498 :             id = "PRUNE_VACUUM_SCAN";
 4246 andres@anarazel.de        453                 :           2498 :             break;
  771 heikki.linnakangas@i      454                 :            487 :         case XLOG_HEAP2_PRUNE_VACUUM_CLEANUP:
                                455                 :            487 :             id = "PRUNE_VACUUM_CLEANUP";
 4246 andres@anarazel.de        456                 :            487 :             break;
                                457                 :           4707 :         case XLOG_HEAP2_MULTI_INSERT:
                                458                 :           4707 :             id = "MULTI_INSERT";
                                459                 :           4707 :             break;
 4243                           460                 :            145 :         case XLOG_HEAP2_MULTI_INSERT | XLOG_HEAP_INIT_PAGE:
                                461                 :            145 :             id = "MULTI_INSERT+INIT";
                                462                 :            145 :             break;
 4246 andres@anarazel.de        463                 :UBC           0 :         case XLOG_HEAP2_LOCK_UPDATED:
                                464                 :              0 :             id = "LOCK_UPDATED";
                                465                 :              0 :             break;
 4246 andres@anarazel.de        466                 :CBC        3772 :         case XLOG_HEAP2_NEW_CID:
                                467                 :           3772 :             id = "NEW_CID";
                                468                 :           3772 :             break;
 4246 andres@anarazel.de        469                 :UBC           0 :         case XLOG_HEAP2_REWRITE:
                                470                 :              0 :             id = "REWRITE";
                                471                 :              0 :             break;
                                472                 :                :     }
                                473                 :                : 
 4246 andres@anarazel.de        474                 :CBC       12139 :     return id;
                                475                 :                : }
        

Generated by: LCOV version 2.5.0-beta