LCOV - code coverage report
Current view: top level - src/backend/utils/adt - skipsupport.c (source / functions) Coverage Total Hit
Test: PostgreSQL 19devel Lines: 100.0 % 14 14
Test Date: 2026-03-01 15:14:58 Functions: 100.0 % 1 1
Legend: Lines:     hit not hit

            Line data    Source code
       1              : /*-------------------------------------------------------------------------
       2              :  *
       3              :  * skipsupport.c
       4              :  *    Support routines for B-Tree skip scan.
       5              :  *
       6              :  *
       7              :  * Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
       8              :  * Portions Copyright (c) 1994, Regents of the University of California
       9              :  *
      10              :  * IDENTIFICATION
      11              :  *    src/backend/utils/adt/skipsupport.c
      12              :  *
      13              :  *-------------------------------------------------------------------------
      14              :  */
      15              : 
      16              : #include "postgres.h"
      17              : 
      18              : #include "access/nbtree.h"
      19              : #include "utils/lsyscache.h"
      20              : #include "utils/skipsupport.h"
      21              : 
      22              : /*
      23              :  * Fill in SkipSupport given an operator class (opfamily + opcintype).
      24              :  *
      25              :  * On success, returns skip support struct, allocating in caller's memory
      26              :  * context.  Otherwise returns NULL, indicating that operator class has no
      27              :  * skip support function.
      28              :  */
      29              : SkipSupport
      30         2085 : PrepareSkipSupportFromOpclass(Oid opfamily, Oid opcintype, bool reverse)
      31              : {
      32              :     Oid         skipSupportFunction;
      33              :     SkipSupport sksup;
      34              : 
      35              :     /* Look for a skip support function */
      36         2085 :     skipSupportFunction = get_opfamily_proc(opfamily, opcintype, opcintype,
      37              :                                             BTSKIPSUPPORT_PROC);
      38         2085 :     if (!OidIsValid(skipSupportFunction))
      39          267 :         return NULL;
      40              : 
      41         1818 :     sksup = palloc_object(SkipSupportData);
      42         1818 :     OidFunctionCall1(skipSupportFunction, PointerGetDatum(sksup));
      43              : 
      44         1818 :     if (reverse)
      45              :     {
      46              :         /*
      47              :          * DESC/reverse case: swap low_elem with high_elem, and swap decrement
      48              :          * with increment
      49              :          */
      50           36 :         Datum       low_elem = sksup->low_elem;
      51           36 :         SkipSupportIncDec decrement = sksup->decrement;
      52              : 
      53           36 :         sksup->low_elem = sksup->high_elem;
      54           36 :         sksup->decrement = sksup->increment;
      55              : 
      56           36 :         sksup->high_elem = low_elem;
      57           36 :         sksup->increment = decrement;
      58              :     }
      59              : 
      60         1818 :     return sksup;
      61              : }
        

Generated by: LCOV version 2.0-1