Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  spgist.h

  Sprache: C
 

/*-------------------------------------------------------------------------
 *
 * spgist.h
 *   Public header file for SP-GiST access method.
 *
 *
 * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
 * Portions Copyright (c) 1994, Regents of the University of California
 *
 * src/include/access/spgist.h
 *
 *-------------------------------------------------------------------------
 */

#ifndef SPGIST_H
#define SPGIST_H

#include "access/amapi.h"
#include "access/xlogreader.h"
#include "lib/stringinfo.h"


/* SPGiST opclass support function numbers */
#define SPGIST_CONFIG_PROC    1
#define SPGIST_CHOOSE_PROC    2
#define SPGIST_PICKSPLIT_PROC   3
#define SPGIST_INNER_CONSISTENT_PROC 4
#define SPGIST_LEAF_CONSISTENT_PROC  5
#define SPGIST_COMPRESS_PROC   6
#define SPGIST_OPTIONS_PROC    7
#define SPGISTNRequiredProc    5
#define SPGISTNProc      7

/*
 * Argument structs for spg_config method
 */

typedef struct spgConfigIn
{
 Oid   attType;  /* Data type to be indexed */
} spgConfigIn;

typedef struct spgConfigOut
{
 Oid   prefixType;  /* Data type of inner-tuple prefixes */
 Oid   labelType;  /* Data type of inner-tuple node labels */
 Oid   leafType;  /* Data type of leaf-tuple values */
 bool  canReturnData; /* Opclass can reconstruct original data */
 bool  longValuesOK; /* Opclass can cope with values > 1 page */
} spgConfigOut;

/*
 * Argument structs for spg_choose method
 */

typedef struct spgChooseIn
{
 Datum  datum;   /* original datum to be indexed */
 Datum  leafDatum;  /* current datum to be stored at leaf */
 int   level;   /* current level (counting from zero) */

 /* Data from current inner tuple */
 bool  allTheSame;  /* tuple is marked all-the-same? */
 bool  hasPrefix;  /* tuple has a prefix? */
 Datum  prefixDatum; /* if so, the prefix value */
 int   nNodes;   /* number of nodes in the inner tuple */
 Datum    *nodeLabels;  /* node label values (NULL if none) */
} spgChooseIn;

typedef enum spgChooseResultType
{
 spgMatchNode = 1,   /* descend into existing node */
 spgAddNode,     /* add a node to the inner tuple */
 spgSplitTuple,    /* split inner tuple (change its prefix) */
} spgChooseResultType;

typedef struct spgChooseOut
{
 spgChooseResultType resultType; /* action code, see above */
 union
 {
  struct     /* results for spgMatchNode */
  {
   int   nodeN; /* descend to this node (index from 0) */
   int   levelAdd; /* increment level by this much */
   Datum  restDatum; /* new leaf datum */
  }   matchNode;
  struct     /* results for spgAddNode */
  {
   Datum  nodeLabel; /* new node's label */
   int   nodeN; /* where to insert it (index from 0) */
  }   addNode;
  struct     /* results for spgSplitTuple */
  {
   /* Info to form new upper-level inner tuple with one child tuple */
   bool  prefixHasPrefix; /* tuple should have a prefix? */
   Datum  prefixPrefixDatum; /* if so, its value */
   int   prefixNNodes; /* number of nodes */
   Datum    *prefixNodeLabels; /* their labels (or NULL for no
 * labels) */

   int   childNodeN; /* which node gets child tuple */

   /* Info to form new lower-level inner tuple with all old nodes */
   bool  postfixHasPrefix; /* tuple should have a prefix? */
   Datum  postfixPrefixDatum; /* if so, its value */
  }   splitTuple;
 }   result;
} spgChooseOut;

/*
 * Argument structs for spg_picksplit method
 */

typedef struct spgPickSplitIn
{
 int   nTuples;  /* number of leaf tuples */
 Datum    *datums;   /* their datums (array of length nTuples) */
 int   level;   /* current level (counting from zero) */
} spgPickSplitIn;

typedef struct spgPickSplitOut
{
 bool  hasPrefix;  /* new inner tuple should have a prefix? */
 Datum  prefixDatum; /* if so, its value */

 int   nNodes;   /* number of nodes for new inner tuple */
 Datum    *nodeLabels;  /* their labels (or NULL for no labels) */

 int     *mapTuplesToNodes; /* node index for each leaf tuple */
 Datum    *leafTupleDatums; /* datum to store in each new leaf tuple */
} spgPickSplitOut;

/*
 * Argument structs for spg_inner_consistent method
 */

typedef struct spgInnerConsistentIn
{
 ScanKey  scankeys;  /* array of operators and comparison values */
 ScanKey  orderbys;  /* array of ordering operators and comparison
 * values */

 int   nkeys;   /* length of scankeys array */
 int   norderbys;  /* length of orderbys array */

 Datum  reconstructedValue; /* value reconstructed at parent */
 void    *traversalValue; /* opclass-specific traverse value */
 MemoryContext traversalMemoryContext; /* put new traverse values here */
 int   level;   /* current level (counting from zero) */
 bool  returnData;  /* original data must be returned? */

 /* Data from current inner tuple */
 bool  allTheSame;  /* tuple is marked all-the-same? */
 bool  hasPrefix;  /* tuple has a prefix? */
 Datum  prefixDatum; /* if so, the prefix value */
 int   nNodes;   /* number of nodes in the inner tuple */
 Datum    *nodeLabels;  /* node label values (NULL if none) */
} spgInnerConsistentIn;

typedef struct spgInnerConsistentOut
{
 int   nNodes;   /* number of child nodes to be visited */
 int     *nodeNumbers; /* their indexes in the node array */
 int     *levelAdds;  /* increment level by this much for each */
 Datum    *reconstructedValues; /* associated reconstructed values */
 void   **traversalValues; /* opclass-specific traverse values */
 double   **distances;  /* associated distances */
} spgInnerConsistentOut;

/*
 * Argument structs for spg_leaf_consistent method
 */

typedef struct spgLeafConsistentIn
{
 ScanKey  scankeys;  /* array of operators and comparison values */
 ScanKey  orderbys;  /* array of ordering operators and comparison
 * values */

 int   nkeys;   /* length of scankeys array */
 int   norderbys;  /* length of orderbys array */

 Datum  reconstructedValue; /* value reconstructed at parent */
 void    *traversalValue; /* opclass-specific traverse value */
 int   level;   /* current level (counting from zero) */
 bool  returnData;  /* original data must be returned? */

 Datum  leafDatum;  /* datum in leaf tuple */
} spgLeafConsistentIn;

typedef struct spgLeafConsistentOut
{
 Datum  leafValue;  /* reconstructed original data, if any */
 bool  recheck;  /* set true if operator must be rechecked */
 bool  recheckDistances; /* set true if distances must be rechecked */
 double    *distances;  /* associated distances */
} spgLeafConsistentOut;


/* spgutils.c */
extern bytea *spgoptions(Datum reloptions, bool validate);

/* spginsert.c */
extern IndexBuildResult *spgbuild(Relation heap, Relation index,
          struct IndexInfo *indexInfo);
extern void spgbuildempty(Relation index);
extern bool spginsert(Relation index, Datum *values, bool *isnull,
       ItemPointer ht_ctid, Relation heapRel,
       IndexUniqueCheck checkUnique,
       bool indexUnchanged,
       struct IndexInfo *indexInfo);

/* spgscan.c */
extern IndexScanDesc spgbeginscan(Relation rel, int keysz, int orderbysz);
extern void spgendscan(IndexScanDesc scan);
extern void spgrescan(IndexScanDesc scan, ScanKey scankey, int nscankeys,
       ScanKey orderbys, int norderbys);
extern int64 spggetbitmap(IndexScanDesc scan, TIDBitmap *tbm);
extern bool spggettuple(IndexScanDesc scan, ScanDirection dir);
extern bool spgcanreturn(Relation index, int attno);

/* spgvacuum.c */
extern IndexBulkDeleteResult *spgbulkdelete(IndexVacuumInfo *info,
           IndexBulkDeleteResult *stats,
           IndexBulkDeleteCallback callback,
           void *callback_state);
extern IndexBulkDeleteResult *spgvacuumcleanup(IndexVacuumInfo *info,
              IndexBulkDeleteResult *stats);

/* spgvalidate.c */
extern bool spgvalidate(Oid opclassoid);
extern void spgadjustmembers(Oid opfamilyoid,
        Oid opclassoid,
        List *operators,
        List *functions);

#endif       /* SPGIST_H */

Messung V0.5 in Prozent
C=82 H=99 G=90

¤ 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.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Open Source Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Statistik
#Sources=277311
#Domains=752002