Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Postgres/src/backend/access/common/   (Postgres Database Version 18.4©)  Datei vom 11.4.2026 mit Größe 3 kB image not shown  

Quelle  scankey.c

  Sprache: C
 

/*-------------------------------------------------------------------------
 *
 * scankey.c
 *   scan key support code
 *
 * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
 * Portions Copyright (c) 1994, Regents of the University of California
 *
 *
 * IDENTIFICATION
 *   src/backend/access/common/scankey.c
 *
 *-------------------------------------------------------------------------
 */

#include "postgres.h"

#include "access/skey.h"
#include "catalog/pg_collation.h"


/*
 * ScanKeyEntryInitialize
 *  Initializes a scan key entry given all the field values.
 *  The target procedure is specified by OID (but can be invalid
 *  if SK_SEARCHNULL or SK_SEARCHNOTNULL is set).
 *
 * Note: CurrentMemoryContext at call should be as long-lived as the ScanKey
 * itself, because that's what will be used for any subsidiary info attached
 * to the ScanKey's FmgrInfo record.
 */

void
ScanKeyEntryInitialize(ScanKey entry,
        int flags,
        AttrNumber attributeNumber,
        StrategyNumber strategy,
        Oid subtype,
        Oid collation,
        RegProcedure procedure,
        Datum argument)
{
 entry->sk_flags = flags;
 entry->sk_attno = attributeNumber;
 entry->sk_strategy = strategy;
 entry->sk_subtype = subtype;
 entry->sk_collation = collation;
 entry->sk_argument = argument;
 if (RegProcedureIsValid(procedure))
 {
  fmgr_info(procedure, &entry->sk_func);
 }
 else
 {
  Assert(flags & (SK_SEARCHNULL | SK_SEARCHNOTNULL));
  MemSet(&entry->sk_func, 0sizeof(entry->sk_func));
 }
}

/*
 * ScanKeyInit
 *  Shorthand version of ScanKeyEntryInitialize: flags and subtype
 *  are assumed to be zero (the usual value), and collation is defaulted.
 *
 * This is the recommended version for hardwired lookups in system catalogs.
 * It cannot handle NULL arguments, unary operators, or nondefault operators,
 * but we need none of those features for most hardwired lookups.
 *
 * We set collation to C_COLLATION_OID always.  This is the correct value
 * for all collation-aware columns in system catalogs, and it will be ignored
 * for other column types, so it's not worth trying to be more finicky.
 *
 * Note: CurrentMemoryContext at call should be as long-lived as the ScanKey
 * itself, because that's what will be used for any subsidiary info attached
 * to the ScanKey's FmgrInfo record.
 */

void
ScanKeyInit(ScanKey entry,
   AttrNumber attributeNumber,
   StrategyNumber strategy,
   RegProcedure procedure,
   Datum argument)
{
 entry->sk_flags = 0;
 entry->sk_attno = attributeNumber;
 entry->sk_strategy = strategy;
 entry->sk_subtype = InvalidOid;
 entry->sk_collation = C_COLLATION_OID;
 entry->sk_argument = argument;
 fmgr_info(procedure, &entry->sk_func);
}

/*
 * ScanKeyEntryInitializeWithInfo
 *  Initializes a scan key entry using an already-completed FmgrInfo
 *  function lookup record.
 *
 * Note: CurrentMemoryContext at call should be as long-lived as the ScanKey
 * itself, because that's what will be used for any subsidiary info attached
 * to the ScanKey's FmgrInfo record.
 */

void
ScanKeyEntryInitializeWithInfo(ScanKey entry,
          int flags,
          AttrNumber attributeNumber,
          StrategyNumber strategy,
          Oid subtype,
          Oid collation,
          FmgrInfo *finfo,
          Datum argument)
{
 entry->sk_flags = flags;
 entry->sk_attno = attributeNumber;
 entry->sk_strategy = strategy;
 entry->sk_subtype = subtype;
 entry->sk_collation = collation;
 entry->sk_argument = argument;
 fmgr_info_copy(&entry->sk_func, finfo, CurrentMemoryContext);
}

Messung V0.5 in Prozent
C=89 H=97 G=93

¤ Dauer der Verarbeitung: 0.16 Sekunden  (vorverarbeitet am  2026-08-08) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.