From 26df7066cc229887d4defdf1d105c0a22b8a88fb Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Fri, 15 May 2015 17:03:16 -0300 Subject: Move strategy numbers to include/access/stratnum.h For upcoming BRIN opclasses, it's convenient to have strategy numbers defined in a single place. Since there's nothing appropriate, create it. The StrategyNumber typedef now lives there, as well as existing strategy numbers for B-trees (from skey.h) and R-tree-and-friends (from gist.h). skey.h is forced to include stratnum.h because of the StrategyNumber typedef, but gist.h is not; extensions that currently rely on gist.h for rtree strategy numbers might need to add a new A few .c files can stop including skey.h and/or gist.h, which is a nice side benefit. Per discussion: https://www.postgresql.org/message-id/20150514232132.GZ2523@alvh.no-ip.org Authored by Emre Hasegeli and Álvaro. (It's not clear to me why bootscanner.l has any #include lines at all.) --- src/include/access/gist.h | 20 ------------ src/include/access/nbtree.h | 2 +- src/include/access/skey.h | 23 +------------ src/include/access/stratnum.h | 75 +++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 77 insertions(+), 43 deletions(-) create mode 100644 src/include/access/stratnum.h (limited to 'src/include/access') diff --git a/src/include/access/gist.h b/src/include/access/gist.h index 50261b8bdd5..81e559bc2dd 100644 --- a/src/include/access/gist.h +++ b/src/include/access/gist.h @@ -36,26 +36,6 @@ #define GIST_FETCH_PROC 9 #define GISTNProcs 9 -/* - * strategy numbers for GiST opclasses that want to implement the old - * RTREE behavior. - */ -#define RTLeftStrategyNumber 1 -#define RTOverLeftStrategyNumber 2 -#define RTOverlapStrategyNumber 3 -#define RTOverRightStrategyNumber 4 -#define RTRightStrategyNumber 5 -#define RTSameStrategyNumber 6 -#define RTContainsStrategyNumber 7 /* for @> */ -#define RTContainedByStrategyNumber 8 /* for <@ */ -#define RTOverBelowStrategyNumber 9 -#define RTBelowStrategyNumber 10 -#define RTAboveStrategyNumber 11 -#define RTOverAboveStrategyNumber 12 -#define RTOldContainsStrategyNumber 13 /* for old spelling of @> */ -#define RTOldContainedByStrategyNumber 14 /* for old spelling of <@ */ -#define RTKNNSearchStrategyNumber 15 - /* * Page opaque data in a GiST index page. */ diff --git a/src/include/access/nbtree.h b/src/include/access/nbtree.h index 2ef349b7483..9e48efd8292 100644 --- a/src/include/access/nbtree.h +++ b/src/include/access/nbtree.h @@ -430,7 +430,7 @@ typedef struct xl_btree_newroot /* - * Operator strategy numbers for B-tree have been moved to access/skey.h, + * Operator strategy numbers for B-tree have been moved to access/stratnum.h, * because many places need to use them in ScanKeyInit() calls. * * The strategy numbers are chosen so that we can commute them by diff --git a/src/include/access/skey.h b/src/include/access/skey.h index eeee1f43d44..76c33bcfc43 100644 --- a/src/include/access/skey.h +++ b/src/include/access/skey.h @@ -15,31 +15,10 @@ #define SKEY_H #include "access/attnum.h" +#include "access/stratnum.h" #include "fmgr.h" -/* - * Strategy numbers identify the semantics that particular operators have - * with respect to particular operator classes. In some cases a strategy - * subtype (an OID) is used as further information. - */ -typedef uint16 StrategyNumber; - -#define InvalidStrategy ((StrategyNumber) 0) - -/* - * We define the strategy numbers for B-tree indexes here, to avoid having - * to import access/nbtree.h into a lot of places that shouldn't need it. - */ -#define BTLessStrategyNumber 1 -#define BTLessEqualStrategyNumber 2 -#define BTEqualStrategyNumber 3 -#define BTGreaterEqualStrategyNumber 4 -#define BTGreaterStrategyNumber 5 - -#define BTMaxStrategyNumber 5 - - /* * A ScanKey represents the application of a comparison operator between * a table or index column and a constant. When it's part of an array of diff --git a/src/include/access/stratnum.h b/src/include/access/stratnum.h new file mode 100644 index 00000000000..458f4dc888d --- /dev/null +++ b/src/include/access/stratnum.h @@ -0,0 +1,75 @@ +/*------------------------------------------------------------------------- + * + * stratnum.h + * POSTGRES strategy number definitions. + * + * + * Portions Copyright (c) 1996-2015, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * src/include/access/stratnum.h + * + *------------------------------------------------------------------------- + */ +#ifndef STRATNUM_H +#define STRATNUM_H + +/* + * Strategy numbers identify the semantics that particular operators have + * with respect to particular operator classes. In some cases a strategy + * subtype (an OID) is used as further information. + */ +typedef uint16 StrategyNumber; + +#define InvalidStrategy ((StrategyNumber) 0) + +/* + * Strategy numbers for B-tree indexes. + */ +#define BTLessStrategyNumber 1 +#define BTLessEqualStrategyNumber 2 +#define BTEqualStrategyNumber 3 +#define BTGreaterEqualStrategyNumber 4 +#define BTGreaterStrategyNumber 5 + +#define BTMaxStrategyNumber 5 + + +/* + * Strategy numbers common to (some) GiST, SP-GiST and BRIN opclasses. + * + * The first few of these come from the R-Tree indexing method (hence the + * names); the others have been added over time as they have been needed. + */ +#define RTLeftStrategyNumber 1 /* for << */ +#define RTOverLeftStrategyNumber 2 /* for &< */ +#define RTOverlapStrategyNumber 3 /* for && */ +#define RTOverRightStrategyNumber 4 /* for &> */ +#define RTRightStrategyNumber 5 /* for >> */ +#define RTSameStrategyNumber 6 /* for ~= */ +#define RTContainsStrategyNumber 7 /* for @> */ +#define RTContainedByStrategyNumber 8 /* for <@ */ +#define RTOverBelowStrategyNumber 9 /* for &<| */ +#define RTBelowStrategyNumber 10 /* for <<| */ +#define RTAboveStrategyNumber 11 /* for |>> */ +#define RTOverAboveStrategyNumber 12 /* for |&> */ +#define RTOldContainsStrategyNumber 13 /* for old spelling of @> */ +#define RTOldContainedByStrategyNumber 14 /* for old spelling of <@ */ +#define RTKNNSearchStrategyNumber 15 /* for <-> (distance) */ +#define RTContainsElemStrategyNumber 16 /* for range types @> elem */ +#define RTAdjacentStrategyNumber 17 /* for -|- */ +#define RTEqualStrategyNumber 18 /* for = */ +#define RTNotEqualStrategyNumber 19 /* for != */ +#define RTLessStrategyNumber 20 /* for < */ +#define RTLessEqualStrategyNumber 21 /* for <= */ +#define RTGreaterStrategyNumber 22 /* for > */ +#define RTGreaterEqualStrategyNumber 23 /* for >= */ +#define RTSubStrategyNumber 24 /* for inet >> */ +#define RTSubOrEqualStrategyNumber 25 /* for inet <<= */ +#define RTSuperStrategyNumber 26 /* for inet << */ +#define RTSuperOrEqualStrategyNumber 27 /* for inet >>= */ + +#define RTMaxStrategyNumber 27 + + +#endif /* STRATNUM_H */ -- cgit v1.2.3