]> granicus.if.org Git - postgresql/blobdiff - src/include/catalog/pg_am.h
Create a "sort support" interface API for faster sorting.
[postgresql] / src / include / catalog / pg_am.h
index 2ef62c24944d201de2353d2d71dfbb8e93d0c581..ddacdf274c49ac7e83b941aa983dbf96214f5812 100644 (file)
@@ -5,13 +5,13 @@
  *       along with the relation's initial contents.
  *
  *
- * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/catalog/pg_am.h,v 1.39 2005/11/07 17:36:46 tgl Exp $
+ * src/include/catalog/pg_am.h
  *
  * NOTES
- *             the genbki.sh script reads this file and generates .bki
+ *             the genbki.pl script reads this file and generates .bki
  *             information from the DATA() statements.
  *
  *             XXX do NOT break up DATA() statements into multiple lines!
 #ifndef PG_AM_H
 #define PG_AM_H
 
-/* ----------------
- *             postgres.h contains the system type definitions and the
- *             CATALOG(), BKI_BOOTSTRAP and DATA() sugar words so this file
- *             can be read by both genbki.sh and the C compiler.
- * ----------------
- */
+#include "catalog/genbki.h"
 
 /* ----------------
  *             pg_am definition.  cpp turns this into
 CATALOG(pg_am,2601)
 {
        NameData        amname;                 /* access method name */
-       int2            amstrategies;   /* total NUMBER of strategies (operators) by
-                                                                * which we can traverse/search this AM */
-       int2            amsupport;              /* total NUMBER of support functions that this
+       int2            amstrategies;   /* total number of strategies (operators) by
+                                                                * which we can traverse/search this AM. Zero
+                                                                * if AM does not have a fixed set of strategy
+                                                                * assignments. */
+       int2            amsupport;              /* total number of support functions that this
                                                                 * AM uses */
-       int2            amorderstrategy;/* if this AM has a sort order, the strategy
-                                                                * number of the sort operator. Zero if AM is
-                                                                * not ordered. */
+       bool            amcanorder;             /* does AM support order by column value? */
+       bool            amcanorderbyop; /* does AM support order by operator result? */
+       bool            amcanbackward;  /* does AM support backward scan? */
        bool            amcanunique;    /* does AM support UNIQUE indexes? */
        bool            amcanmulticol;  /* does AM support multi-column indexes? */
+       bool            amcanreturn;    /* can AM return IndexTuples? */
        bool            amoptionalkey;  /* can query omit key for the first column? */
-       bool            amindexnulls;   /* does AM support NULL index entries? */
-       bool            amconcurrent;   /* does AM support concurrent updates? */
+       bool            amsearcharray;  /* can AM handle ScalarArrayOpExpr quals? */
+       bool            amsearchnulls;  /* can AM search for NULL/NOT NULL entries? */
+       bool            amstorage;              /* can storage type differ from column type? */
+       bool            amclusterable;  /* does AM support cluster command? */
+       bool            ampredlocks;    /* does AM handle predicate locks? */
+       Oid                     amkeytype;              /* type of data in index, or InvalidOid */
        regproc         aminsert;               /* "insert this tuple" function */
-       regproc         ambeginscan;    /* "start new scan" function */
-       regproc         amgettuple;             /* "next valid tuple" function */
-       regproc         amgetmulti;             /* "fetch multiple tuples" function */
-       regproc         amrescan;               /* "restart this scan" function */
-       regproc         amendscan;              /* "end this scan" function */
+       regproc         ambeginscan;    /* "prepare for index scan" function */
+       regproc         amgettuple;             /* "next valid tuple" function, or 0 */
+       regproc         amgetbitmap;    /* "fetch all valid tuples" function, or 0 */
+       regproc         amrescan;               /* "(re)start index scan" function */
+       regproc         amendscan;              /* "end index scan" function */
        regproc         ammarkpos;              /* "mark current scan position" function */
        regproc         amrestrpos;             /* "restore marked scan position" function */
        regproc         ambuild;                /* "build new index" function */
+       regproc         ambuildempty;   /* "build empty index" function */
        regproc         ambulkdelete;   /* bulk-delete function */
        regproc         amvacuumcleanup;        /* post-VACUUM cleanup function */
        regproc         amcostestimate; /* estimate cost of an indexscan */
+       regproc         amoptions;              /* parse AM-specific parameters */
 } FormData_pg_am;
 
 /* ----------------
@@ -76,42 +80,54 @@ typedef FormData_pg_am *Form_pg_am;
  *             compiler constants for pg_am
  * ----------------
  */
-#define Natts_pg_am                                            21
+#define Natts_pg_am                                            30
 #define Anum_pg_am_amname                              1
 #define Anum_pg_am_amstrategies                        2
 #define Anum_pg_am_amsupport                   3
-#define Anum_pg_am_amorderstrategy             4
-#define Anum_pg_am_amcanunique                 5
-#define Anum_pg_am_amcanmulticol               6
-#define Anum_pg_am_amoptionalkey               7
-#define Anum_pg_am_amindexnulls                        8
-#define Anum_pg_am_amconcurrent                        9
-#define Anum_pg_am_aminsert                            10
-#define Anum_pg_am_ambeginscan                 11
-#define Anum_pg_am_amgettuple                  12
-#define Anum_pg_am_amgetmulti                  13
-#define Anum_pg_am_amrescan                            14
-#define Anum_pg_am_amendscan                   15
-#define Anum_pg_am_ammarkpos                   16
-#define Anum_pg_am_amrestrpos                  17
-#define Anum_pg_am_ambuild                             18
-#define Anum_pg_am_ambulkdelete                        19
-#define Anum_pg_am_amvacuumcleanup             20
-#define Anum_pg_am_amcostestimate              21
+#define Anum_pg_am_amcanorder                  4
+#define Anum_pg_am_amcanorderbyop              5
+#define Anum_pg_am_amcanbackward               6
+#define Anum_pg_am_amcanunique                 7
+#define Anum_pg_am_amcanmulticol               8
+#define Anum_pg_am_amcanreturn                 9
+#define Anum_pg_am_amoptionalkey               10
+#define Anum_pg_am_amsearcharray               11
+#define Anum_pg_am_amsearchnulls               12
+#define Anum_pg_am_amstorage                   13
+#define Anum_pg_am_amclusterable               14
+#define Anum_pg_am_ampredlocks                 15
+#define Anum_pg_am_amkeytype                   16
+#define Anum_pg_am_aminsert                            17
+#define Anum_pg_am_ambeginscan                 18
+#define Anum_pg_am_amgettuple                  19
+#define Anum_pg_am_amgetbitmap                 20
+#define Anum_pg_am_amrescan                            21
+#define Anum_pg_am_amendscan                   22
+#define Anum_pg_am_ammarkpos                   23
+#define Anum_pg_am_amrestrpos                  24
+#define Anum_pg_am_ambuild                             25
+#define Anum_pg_am_ambuildempty                        26
+#define Anum_pg_am_ambulkdelete                        27
+#define Anum_pg_am_amvacuumcleanup             28
+#define Anum_pg_am_amcostestimate              29
+#define Anum_pg_am_amoptions                   30
 
 /* ----------------
  *             initial contents of pg_am
  * ----------------
  */
 
-DATA(insert OID = 403 (  btree 5 1 1 t t t t t btinsert btbeginscan btgettuple btgetmulti btrescan btendscan btmarkpos btrestrpos btbuild btbulkdelete btvacuumcleanup btcostestimate ));
+DATA(insert OID = 403 (  btree 5 2 t f t t t t t t t f t t 0 btinsert btbeginscan btgettuple btgetbitmap btrescan btendscan btmarkpos btrestrpos btbuild btbuildempty btbulkdelete btvacuumcleanup btcostestimate btoptions ));
 DESCR("b-tree index access method");
 #define BTREE_AM_OID 403
-DATA(insert OID = 405 (  hash  1 1 0 f f f f t hashinsert hashbeginscan hashgettuple hashgetmulti hashrescan hashendscan hashmarkpos hashrestrpos hashbuild hashbulkdelete - hashcostestimate ));
+DATA(insert OID = 405 (  hash  1 1 f f t f f f f f f f f f 23 hashinsert hashbeginscan hashgettuple hashgetbitmap hashrescan hashendscan hashmarkpos hashrestrpos hashbuild hashbuildempty hashbulkdelete hashvacuumcleanup hashcostestimate hashoptions ));
 DESCR("hash index access method");
 #define HASH_AM_OID 405
-DATA(insert OID = 783 (  gist  100 7 0 f t f f t gistinsert gistbeginscan gistgettuple gistgetmulti gistrescan gistendscan gistmarkpos gistrestrpos gistbuild gistbulkdelete gistvacuumcleanup gistcostestimate ));
+DATA(insert OID = 783 (  gist  0 8 f t f f t f t f t t t f 0 gistinsert gistbeginscan gistgettuple gistgetbitmap gistrescan gistendscan gistmarkpos gistrestrpos gistbuild gistbuildempty gistbulkdelete gistvacuumcleanup gistcostestimate gistoptions ));
 DESCR("GiST index access method");
 #define GIST_AM_OID 783
+DATA(insert OID = 2742 (  gin  0 5 f f f f t f t f f t f f 0 gininsert ginbeginscan - gingetbitmap ginrescan ginendscan ginmarkpos ginrestrpos ginbuild ginbuildempty ginbulkdelete ginvacuumcleanup gincostestimate ginoptions ));
+DESCR("GIN index access method");
+#define GIN_AM_OID 2742
 
 #endif   /* PG_AM_H */