LCOV - differential code coverage report
Current view: top level - src/backend/access/rmgrdesc - gindesc.c (source / functions) Coverage Total Hit UBC GBC
Current: Differential Code Coverage 16@8cea358b128 vs 17@8cea358b128 Lines: 30.6 % 124 38 86 38
Current Date: 2024-04-14 14:21:10 Functions: 66.7 % 3 2 1 2
Baseline: 16@8cea358b128 Branches: 23.7 % 59 14 45 14
Baseline Date: 2024-04-14 14:21:09 Line coverage date bins:
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed (240..) days: 30.6 % 124 38 86 38
Function coverage date bins:
(240..) days: 66.7 % 3 2 1 2
Branch coverage date bins:
(240..) days: 23.7 % 59 14 45 14

 Age         Owner                    Branch data    TLA  Line data    Source code
                                  1                 :                : /*-------------------------------------------------------------------------
                                  2                 :                :  *
                                  3                 :                :  * gindesc.c
                                  4                 :                :  *    rmgr descriptor routines for access/transam/gin/ginxlog.c
                                  5                 :                :  *
                                  6                 :                :  * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
                                  7                 :                :  * Portions Copyright (c) 1994, Regents of the University of California
                                  8                 :                :  *
                                  9                 :                :  *
                                 10                 :                :  * IDENTIFICATION
                                 11                 :                :  *    src/backend/access/rmgrdesc/gindesc.c
                                 12                 :                :  *
                                 13                 :                :  *-------------------------------------------------------------------------
                                 14                 :                :  */
                                 15                 :                : #include "postgres.h"
                                 16                 :                : 
                                 17                 :                : #include "access/ginxlog.h"
                                 18                 :                : #include "lib/stringinfo.h"
                                 19                 :                : 
                                 20                 :                : static void
 3667 heikki.linnakangas@i       21                 :UBC           0 : desc_recompress_leaf(StringInfo buf, ginxlogRecompressDataLeaf *insertData)
                                 22                 :                : {
                                 23                 :                :     int         i;
                                 24                 :              0 :     char       *walbuf = ((char *) insertData) + sizeof(ginxlogRecompressDataLeaf);
                                 25                 :                : 
                                 26                 :              0 :     appendStringInfo(buf, " %d segments:", (int) insertData->nactions);
                                 27                 :                : 
                                 28         [ #  # ]:              0 :     for (i = 0; i < insertData->nactions; i++)
                                 29                 :                :     {
                                 30                 :              0 :         uint8       a_segno = *((uint8 *) (walbuf++));
                                 31                 :              0 :         uint8       a_action = *((uint8 *) (walbuf++));
                                 32                 :              0 :         uint16      nitems = 0;
                                 33                 :              0 :         int         newsegsize = 0;
                                 34                 :                : 
                                 35   [ #  #  #  # ]:              0 :         if (a_action == GIN_SEGMENT_INSERT ||
                                 36                 :                :             a_action == GIN_SEGMENT_REPLACE)
                                 37                 :                :         {
                                 38                 :              0 :             newsegsize = SizeOfGinPostingList((GinPostingList *) walbuf);
                                 39                 :              0 :             walbuf += SHORTALIGN(newsegsize);
                                 40                 :                :         }
                                 41                 :                : 
                                 42         [ #  # ]:              0 :         if (a_action == GIN_SEGMENT_ADDITEMS)
                                 43                 :                :         {
                                 44                 :              0 :             memcpy(&nitems, walbuf, sizeof(uint16));
                                 45                 :              0 :             walbuf += sizeof(uint16);
                                 46                 :              0 :             walbuf += nitems * sizeof(ItemPointerData);
                                 47                 :                :         }
                                 48                 :                : 
 3631 bruce@momjian.us           49   [ #  #  #  #  :              0 :         switch (a_action)
                                                 # ]
                                 50                 :                :         {
 3667 heikki.linnakangas@i       51                 :              0 :             case GIN_SEGMENT_ADDITEMS:
                                 52                 :              0 :                 appendStringInfo(buf, " %d (add %d items)", a_segno, nitems);
                                 53                 :              0 :                 break;
                                 54                 :              0 :             case GIN_SEGMENT_DELETE:
                                 55                 :              0 :                 appendStringInfo(buf, " %d (delete)", a_segno);
                                 56                 :              0 :                 break;
                                 57                 :              0 :             case GIN_SEGMENT_INSERT:
                                 58                 :              0 :                 appendStringInfo(buf, " %d (insert)", a_segno);
                                 59                 :              0 :                 break;
                                 60                 :              0 :             case GIN_SEGMENT_REPLACE:
                                 61                 :              0 :                 appendStringInfo(buf, " %d (replace)", a_segno);
                                 62                 :              0 :                 break;
                                 63                 :              0 :             default:
                                 64                 :              0 :                 appendStringInfo(buf, " %d unknown action %d ???", a_segno, a_action);
                                 65                 :                :                 /* cannot decode unrecognized actions further */
                                 66                 :              0 :                 return;
                                 67                 :                :         }
                                 68                 :                :     }
                                 69                 :                : }
                                 70                 :                : 
                                 71                 :                : void
 3433 heikki.linnakangas@i       72                 :GBC        3096 : gin_desc(StringInfo buf, XLogReaderState *record)
                                 73                 :                : {
 3592                            74                 :           3096 :     char       *rec = XLogRecGetData(record);
 3433                            75                 :           3096 :     uint8       info = XLogRecGetInfo(record) & ~XLR_INFO_MASK;
                                 76                 :                : 
 4155 alvherre@alvh.no-ip.       77   [ -  +  -  -  :           3096 :     switch (info)
                                     -  -  +  +  +  
                                                 - ]
                                 78                 :                :     {
 4155 alvherre@alvh.no-ip.       79                 :UBC           0 :         case XLOG_GIN_CREATE_PTREE:
                                 80                 :                :             /* no further information */
                                 81                 :              0 :             break;
 4155 alvherre@alvh.no-ip.       82                 :GBC          36 :         case XLOG_GIN_INSERT:
                                 83                 :                :             {
 3791 heikki.linnakangas@i       84                 :             36 :                 ginxlogInsert *xlrec = (ginxlogInsert *) rec;
                                 85                 :                : 
 3433 heikki.linnakangas@i       86                 :UBC           0 :                 appendStringInfo(buf, "isdata: %c isleaf: %c",
 2489 tgl@sss.pgh.pa.us          87         [ -  + ]:GBC          36 :                                  (xlrec->flags & GIN_INSERT_ISDATA) ? 'T' : 'F',
                                 88         [ +  - ]:             36 :                                  (xlrec->flags & GIN_INSERT_ISLEAF) ? 'T' : 'F');
 3791 heikki.linnakangas@i       89         [ -  + ]:             36 :                 if (!(xlrec->flags & GIN_INSERT_ISLEAF))
                                 90                 :                :                 {
 2687 fujii@postgresql.org       91                 :UBC           0 :                     char       *payload = rec + sizeof(ginxlogInsert);
                                 92                 :                :                     BlockNumber leftChildBlkno;
                                 93                 :                :                     BlockNumber rightChildBlkno;
                                 94                 :                : 
 3790 heikki.linnakangas@i       95                 :              0 :                     leftChildBlkno = BlockIdGetBlockNumber((BlockId) payload);
                                 96                 :              0 :                     payload += sizeof(BlockIdData);
                                 97                 :              0 :                     rightChildBlkno = BlockIdGetBlockNumber((BlockId) payload);
 3791                            98                 :              0 :                     payload += sizeof(BlockNumber);
                                 99                 :              0 :                     appendStringInfo(buf, " children: %u/%u",
                                100                 :                :                                      leftChildBlkno, rightChildBlkno);
                                101                 :                :                 }
 2687 fujii@postgresql.org      102         [ -  + ]:GBC          36 :                 if (XLogRecHasBlockImage(record, 0))
                                103                 :                :                 {
 2622 rhaas@postgresql.org      104         [ #  # ]:UBC           0 :                     if (XLogRecBlockImageApply(record, 0))
                                105                 :              0 :                         appendStringInfoString(buf, " (full page image)");
                                106                 :                :                     else
                                107                 :              0 :                         appendStringInfoString(buf, " (full page image, for WAL verification)");
                                108                 :                :                 }
                                109                 :                :                 else
                                110                 :                :                 {
 2687 fujii@postgresql.org      111                 :GBC          36 :                     char       *payload = XLogRecGetBlockData(record, 0, NULL);
                                112                 :                : 
                                113         [ +  - ]:             36 :                     if (!(xlrec->flags & GIN_INSERT_ISDATA))
 2687 fujii@postgresql.org      114                 :UBC           0 :                         appendStringInfo(buf, " isdelete: %c",
 2524 bruce@momjian.us          115         [ -  + ]:GBC          36 :                                          (((ginxlogInsertEntry *) payload)->isDelete) ? 'T' : 'F');
 2687 fujii@postgresql.org      116         [ #  # ]:UBC           0 :                     else if (xlrec->flags & GIN_INSERT_ISLEAF)
                                117                 :              0 :                         desc_recompress_leaf(buf, (ginxlogRecompressDataLeaf *) payload);
                                118                 :                :                     else
                                119                 :                :                     {
                                120                 :              0 :                         ginxlogInsertDataInternal *insertData =
                                121                 :                :                             (ginxlogInsertDataInternal *) payload;
                                122                 :                : 
                                123                 :              0 :                         appendStringInfo(buf, " pitem: %u-%u/%u",
 2489 tgl@sss.pgh.pa.us         124                 :              0 :                                          PostingItemGetBlockNumber(&insertData->newitem),
                                125                 :              0 :                                          ItemPointerGetBlockNumber(&insertData->newitem.key),
                                126                 :              0 :                                          ItemPointerGetOffsetNumber(&insertData->newitem.key));
                                127                 :                :                     }
                                128                 :                :                 }
                                129                 :                :             }
 4155 alvherre@alvh.no-ip.      130                 :GBC          36 :             break;
 4155 alvherre@alvh.no-ip.      131                 :UBC           0 :         case XLOG_GIN_SPLIT:
                                132                 :                :             {
 3735 heikki.linnakangas@i      133                 :              0 :                 ginxlogSplit *xlrec = (ginxlogSplit *) rec;
                                134                 :                : 
 3433                           135                 :              0 :                 appendStringInfo(buf, "isrootsplit: %c",
 2489 tgl@sss.pgh.pa.us         136         [ #  # ]:              0 :                                  (((ginxlogSplit *) rec)->flags & GIN_SPLIT_ROOT) ? 'T' : 'F');
 3735 heikki.linnakangas@i      137                 :              0 :                 appendStringInfo(buf, " isdata: %c isleaf: %c",
 2489 tgl@sss.pgh.pa.us         138         [ #  # ]:              0 :                                  (xlrec->flags & GIN_INSERT_ISDATA) ? 'T' : 'F',
                                139         [ #  # ]:              0 :                                  (xlrec->flags & GIN_INSERT_ISLEAF) ? 'T' : 'F');
                                140                 :                :             }
 4155 alvherre@alvh.no-ip.      141                 :              0 :             break;
                                142                 :              0 :         case XLOG_GIN_VACUUM_PAGE:
                                143                 :                :             /* no further information */
                                144                 :              0 :             break;
 3735 heikki.linnakangas@i      145                 :              0 :         case XLOG_GIN_VACUUM_DATA_LEAF_PAGE:
                                146                 :                :             {
 3433                           147         [ #  # ]:              0 :                 if (XLogRecHasBlockImage(record, 0))
                                148                 :                :                 {
 2622 rhaas@postgresql.org      149         [ #  # ]:              0 :                     if (XLogRecBlockImageApply(record, 0))
                                150                 :              0 :                         appendStringInfoString(buf, " (full page image)");
                                151                 :                :                     else
                                152                 :              0 :                         appendStringInfoString(buf, " (full page image, for WAL verification)");
                                153                 :                :                 }
                                154                 :                :                 else
                                155                 :                :                 {
                                156                 :                :                     ginxlogVacuumDataLeafPage *xlrec =
  331 tgl@sss.pgh.pa.us         157                 :              0 :                         (ginxlogVacuumDataLeafPage *) XLogRecGetBlockData(record, 0, NULL);
                                158                 :                : 
 3667 heikki.linnakangas@i      159                 :              0 :                     desc_recompress_leaf(buf, &xlrec->data);
                                160                 :                :                 }
                                161                 :                :             }
 3735                           162                 :              0 :             break;
 4155 alvherre@alvh.no-ip.      163                 :              0 :         case XLOG_GIN_DELETE_PAGE:
                                164                 :                :             /* no further information */
                                165                 :              0 :             break;
 4155 alvherre@alvh.no-ip.      166                 :GBC        3006 :         case XLOG_GIN_UPDATE_META_PAGE:
                                167                 :                :             /* no further information */
                                168                 :           3006 :             break;
                                169                 :             48 :         case XLOG_GIN_INSERT_LISTPAGE:
                                170                 :                :             /* no further information */
                                171                 :             48 :             break;
                                172                 :              6 :         case XLOG_GIN_DELETE_LISTPAGE:
 3433 heikki.linnakangas@i      173                 :              6 :             appendStringInfo(buf, "ndeleted: %d",
                                174                 :                :                              ((ginxlogDeleteListPages *) rec)->ndeleted);
 4155 alvherre@alvh.no-ip.      175                 :              6 :             break;
                                176                 :                :     }
 3495 andres@anarazel.de        177                 :           3096 : }
                                178                 :                : 
                                179                 :                : const char *
                                180                 :           3100 : gin_identify(uint8 info)
                                181                 :                : {
                                182                 :           3100 :     const char *id = NULL;
                                183                 :                : 
 3492                           184   [ -  +  -  -  :           3100 :     switch (info & ~XLR_INFO_MASK)
                                     -  -  +  +  +  
                                                 - ]
                                185                 :                :     {
 3495 andres@anarazel.de        186                 :UBC           0 :         case XLOG_GIN_CREATE_PTREE:
                                187                 :              0 :             id = "CREATE_PTREE";
                                188                 :              0 :             break;
 3495 andres@anarazel.de        189                 :GBC          37 :         case XLOG_GIN_INSERT:
                                190                 :             37 :             id = "INSERT";
                                191                 :             37 :             break;
 3495 andres@anarazel.de        192                 :UBC           0 :         case XLOG_GIN_SPLIT:
                                193                 :              0 :             id = "SPLIT";
                                194                 :              0 :             break;
                                195                 :              0 :         case XLOG_GIN_VACUUM_PAGE:
                                196                 :              0 :             id = "VACUUM_PAGE";
                                197                 :              0 :             break;
                                198                 :              0 :         case XLOG_GIN_VACUUM_DATA_LEAF_PAGE:
                                199                 :              0 :             id = "VACUUM_DATA_LEAF_PAGE";
                                200                 :              0 :             break;
                                201                 :              0 :         case XLOG_GIN_DELETE_PAGE:
                                202                 :              0 :             id = "DELETE_PAGE";
                                203                 :              0 :             break;
 3495 andres@anarazel.de        204                 :GBC        3007 :         case XLOG_GIN_UPDATE_META_PAGE:
                                205                 :           3007 :             id = "UPDATE_META_PAGE";
                                206                 :           3007 :             break;
                                207                 :             49 :         case XLOG_GIN_INSERT_LISTPAGE:
                                208                 :             49 :             id = "INSERT_LISTPAGE";
                                209                 :             49 :             break;
                                210                 :              7 :         case XLOG_GIN_DELETE_LISTPAGE:
                                211                 :              7 :             id = "DELETE_LISTPAGE";
 4155 alvherre@alvh.no-ip.      212                 :              7 :             break;
                                213                 :                :     }
                                214                 :                : 
 3495 andres@anarazel.de        215                 :           3100 :     return id;
                                216                 :                : }
        

Generated by: LCOV version 2.1-beta2-3-g6141622