Logo Search packages:      
Sourcecode: postgresql-8.4 version File versions  Download package

scankey.c
/*-------------------------------------------------------------------------
 *
 * scankey.c
 *      scan key support code
 *
 * Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
 * Portions Copyright (c) 1994, Regents of the University of California
 *
 *
 * IDENTIFICATION
 *      $PostgreSQL: pgsql/src/backend/access/common/scankey.c,v 1.32 2009/01/01 17:23:34 momjian Exp $
 *
 *-------------------------------------------------------------------------
 */
#include "postgres.h"

#include "access/skey.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 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,
                                 RegProcedure procedure,
                                 Datum argument)
{
      entry->sk_flags = flags;
      entry->sk_attno = attributeNumber;
      entry->sk_strategy = strategy;
      entry->sk_subtype = subtype;
      entry->sk_argument = argument;
      if (RegProcedureIsValid(procedure))
            fmgr_info(procedure, &entry->sk_func);
      else
      {
            Assert(flags & SK_SEARCHNULL);
            MemSet(&entry->sk_func, 0, sizeof(entry->sk_func));
      }
}

/*
 * ScanKeyInit
 *          Shorthand version of ScanKeyEntryInitialize: flags and subtype
 *          are assumed to be zero (the usual value).
 *
 * 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.
 *
 * 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_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,
                                             FmgrInfo *finfo,
                                             Datum argument)
{
      entry->sk_flags = flags;
      entry->sk_attno = attributeNumber;
      entry->sk_strategy = strategy;
      entry->sk_subtype = subtype;
      entry->sk_argument = argument;
      fmgr_info_copy(&entry->sk_func, finfo, CurrentMemoryContext);
}

Generated by  Doxygen 1.6.0   Back to index