LCOV - differential code coverage report
Current view: top level - contrib/pageinspect - fsmfuncs.c (source / functions) Coverage Total Hit UBC CBC
Current: Differential Code Coverage HEAD vs 15 Lines: 93.3 % 15 14 1 14
Current Date: 2023-04-08 15:15:32 Functions: 100.0 % 2 2 2
Baseline: 15
Baseline Date: 2023-04-08 15:09:40
Legend: Lines: hit not hit

           TLA  Line data    Source code
       1                 : /*-------------------------------------------------------------------------
       2                 :  *
       3                 :  * fsmfuncs.c
       4                 :  *    Functions to investigate FSM pages
       5                 :  *
       6                 :  * These functions are restricted to superusers for the fear of introducing
       7                 :  * security holes if the input checking isn't as water-tight as it should.
       8                 :  * You'd need to be superuser to obtain a raw page image anyway, so
       9                 :  * there's hardly any use case for using these without superuser-rights
      10                 :  * anyway.
      11                 :  *
      12                 :  * Copyright (c) 2007-2023, PostgreSQL Global Development Group
      13                 :  *
      14                 :  * IDENTIFICATION
      15                 :  *    contrib/pageinspect/fsmfuncs.c
      16                 :  *
      17                 :  *-------------------------------------------------------------------------
      18                 :  */
      19                 : 
      20                 : #include "postgres.h"
      21                 : 
      22                 : #include "funcapi.h"
      23                 : #include "lib/stringinfo.h"
      24                 : #include "miscadmin.h"
      25                 : #include "pageinspect.h"
      26                 : #include "storage/fsm_internals.h"
      27                 : #include "utils/builtins.h"
      28                 : 
      29                 : /*
      30                 :  * Dumps the contents of a FSM page.
      31                 :  */
      32 CBC           7 : PG_FUNCTION_INFO_V1(fsm_page_contents);
      33                 : 
      34                 : Datum
      35               3 : fsm_page_contents(PG_FUNCTION_ARGS)
      36                 : {
      37               3 :     bytea      *raw_page = PG_GETARG_BYTEA_P(0);
      38                 :     StringInfoData sinfo;
      39                 :     Page        page;
      40                 :     FSMPage     fsmpage;
      41                 :     int         i;
      42                 : 
      43               3 :     if (!superuser())
      44 UBC           0 :         ereport(ERROR,
      45                 :                 (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
      46                 :                  errmsg("must be superuser to use raw page functions")));
      47                 : 
      48 CBC           3 :     page = get_page_from_raw(raw_page);
      49                 : 
      50               2 :     if (PageIsNew(page))
      51               1 :         PG_RETURN_NULL();
      52                 : 
      53               1 :     fsmpage = (FSMPage) PageGetContents(page);
      54                 : 
      55               1 :     initStringInfo(&sinfo);
      56                 : 
      57            8165 :     for (i = 0; i < NodesPerPage; i++)
      58                 :     {
      59            8164 :         if (fsmpage->fp_nodes[i] != 0)
      60              13 :             appendStringInfo(&sinfo, "%d: %d\n", i, fsmpage->fp_nodes[i]);
      61                 :     }
      62               1 :     appendStringInfo(&sinfo, "fp_next_slot: %d\n", fsmpage->fp_next_slot);
      63                 : 
      64               1 :     PG_RETURN_TEXT_P(cstring_to_text_with_len(sinfo.data, sinfo.len));
      65                 : }
        

Generated by: LCOV version v1.16-55-g56c0a2a