LCOV - code coverage report
Current view: top level - src/backend/access/common - scankey.c (source / functions) Coverage Total Hit
Test: PostgreSQL 19devel Lines: 100.0 % 29 29
Test Date: 2026-03-15 21:15:10 Functions: 100.0 % 3 3
Legend: Lines:     hit not hit

            Line data    Source code
       1              : /*-------------------------------------------------------------------------
       2              :  *
       3              :  * scankey.c
       4              :  *    scan key support code
       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/common/scankey.c
      12              :  *
      13              :  *-------------------------------------------------------------------------
      14              :  */
      15              : #include "postgres.h"
      16              : 
      17              : #include "access/skey.h"
      18              : #include "catalog/pg_collation.h"
      19              : 
      20              : 
      21              : /*
      22              :  * ScanKeyEntryInitialize
      23              :  *      Initializes a scan key entry given all the field values.
      24              :  *      The target procedure is specified by OID (but can be invalid
      25              :  *      if SK_SEARCHNULL or SK_SEARCHNOTNULL is set).
      26              :  *
      27              :  * Note: CurrentMemoryContext at call should be as long-lived as the ScanKey
      28              :  * itself, because that's what will be used for any subsidiary info attached
      29              :  * to the ScanKey's FmgrInfo record.
      30              :  */
      31              : void
      32       306489 : ScanKeyEntryInitialize(ScanKey entry,
      33              :                        int flags,
      34              :                        AttrNumber attributeNumber,
      35              :                        StrategyNumber strategy,
      36              :                        Oid subtype,
      37              :                        Oid collation,
      38              :                        RegProcedure procedure,
      39              :                        Datum argument)
      40              : {
      41       306489 :     entry->sk_flags = flags;
      42       306489 :     entry->sk_attno = attributeNumber;
      43       306489 :     entry->sk_strategy = strategy;
      44       306489 :     entry->sk_subtype = subtype;
      45       306489 :     entry->sk_collation = collation;
      46       306489 :     entry->sk_argument = argument;
      47       306489 :     if (RegProcedureIsValid(procedure))
      48              :     {
      49       238614 :         fmgr_info(procedure, &entry->sk_func);
      50              :     }
      51              :     else
      52              :     {
      53              :         Assert(flags & (SK_SEARCHNULL | SK_SEARCHNOTNULL));
      54       475125 :         MemSet(&entry->sk_func, 0, sizeof(entry->sk_func));
      55              :     }
      56       306489 : }
      57              : 
      58              : /*
      59              :  * ScanKeyInit
      60              :  *      Shorthand version of ScanKeyEntryInitialize: flags and subtype
      61              :  *      are assumed to be zero (the usual value), and collation is defaulted.
      62              :  *
      63              :  * This is the recommended version for hardwired lookups in system catalogs.
      64              :  * It cannot handle NULL arguments, unary operators, or nondefault operators,
      65              :  * but we need none of those features for most hardwired lookups.
      66              :  *
      67              :  * We set collation to C_COLLATION_OID always.  This is the correct value
      68              :  * for all collation-aware columns in system catalogs, and it will be ignored
      69              :  * for other column types, so it's not worth trying to be more finicky.
      70              :  *
      71              :  * Note: CurrentMemoryContext at call should be as long-lived as the ScanKey
      72              :  * itself, because that's what will be used for any subsidiary info attached
      73              :  * to the ScanKey's FmgrInfo record.
      74              :  */
      75              : void
      76      6867783 : ScanKeyInit(ScanKey entry,
      77              :             AttrNumber attributeNumber,
      78              :             StrategyNumber strategy,
      79              :             RegProcedure procedure,
      80              :             Datum argument)
      81              : {
      82      6867783 :     entry->sk_flags = 0;
      83      6867783 :     entry->sk_attno = attributeNumber;
      84      6867783 :     entry->sk_strategy = strategy;
      85      6867783 :     entry->sk_subtype = InvalidOid;
      86      6867783 :     entry->sk_collation = C_COLLATION_OID;
      87      6867783 :     entry->sk_argument = argument;
      88      6867783 :     fmgr_info(procedure, &entry->sk_func);
      89      6867783 : }
      90              : 
      91              : /*
      92              :  * ScanKeyEntryInitializeWithInfo
      93              :  *      Initializes a scan key entry using an already-completed FmgrInfo
      94              :  *      function lookup record.
      95              :  *
      96              :  * Note: CurrentMemoryContext at call should be as long-lived as the ScanKey
      97              :  * itself, because that's what will be used for any subsidiary info attached
      98              :  * to the ScanKey's FmgrInfo record.
      99              :  */
     100              : void
     101     24401939 : ScanKeyEntryInitializeWithInfo(ScanKey entry,
     102              :                                int flags,
     103              :                                AttrNumber attributeNumber,
     104              :                                StrategyNumber strategy,
     105              :                                Oid subtype,
     106              :                                Oid collation,
     107              :                                FmgrInfo *finfo,
     108              :                                Datum argument)
     109              : {
     110     24401939 :     entry->sk_flags = flags;
     111     24401939 :     entry->sk_attno = attributeNumber;
     112     24401939 :     entry->sk_strategy = strategy;
     113     24401939 :     entry->sk_subtype = subtype;
     114     24401939 :     entry->sk_collation = collation;
     115     24401939 :     entry->sk_argument = argument;
     116     24401939 :     fmgr_info_copy(&entry->sk_func, finfo, CurrentMemoryContext);
     117     24401939 : }
        

Generated by: LCOV version 2.0-1