From f7ea9312877abcb508669359fa2a05fc69ec91b9 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sat, 14 Jan 2006 22:03:35 +0000 Subject: [PATCH] Some minor code cleanup, falling out from the removal of rtree. SK_NEGATE isn't being used anywhere anymore, and there seems no point in a generic index_keytest() routine when two out of three remaining access methods aren't using it. Also, add a comment documenting a convention for letting access methods define private flag bits in ScanKey sk_flags. There are no such flags at the moment but I'm thinking about changing btree's handling of "required keys" to use flag bits in the keys rather than a count of required key positions. Also, if some AM did still want SK_NEGATE then it would be reasonable to treat it as a private flag bit. --- src/backend/access/common/Makefile | 5 +-- src/backend/access/common/indexvalid.c | 78 ---------------------------------- src/backend/access/gist/gistget.c | 18 ++++---- src/backend/access/hash/hashutil.c | 39 +++++++++++++++-- src/backend/executor/execUtils.c | 6 +-- src/include/access/iqual.h | 31 -------------- src/include/access/skey.h | 11 +++-- 7 files changed, 57 insertions(+), 131 deletions(-) delete mode 100644 src/backend/access/common/indexvalid.c delete mode 100644 src/include/access/iqual.h diff --git a/src/backend/access/common/Makefile b/src/backend/access/common/Makefile index e322351bcd..7cd4a4ab0e 100644 --- a/src/backend/access/common/Makefile +++ b/src/backend/access/common/Makefile @@ -4,7 +4,7 @@ # Makefile for access/common # # IDENTIFICATION -# $PostgreSQL: pgsql/src/backend/access/common/Makefile,v 1.20 2003/11/29 19:51:39 pgsql Exp $ +# $PostgreSQL: pgsql/src/backend/access/common/Makefile,v 1.21 2006/01/14 22:03:35 tgl Exp $ # #------------------------------------------------------------------------- @@ -12,8 +12,7 @@ subdir = src/backend/access/common top_builddir = ../../../.. include $(top_builddir)/src/Makefile.global -OBJS = heaptuple.o indextuple.o indexvalid.o printtup.o \ - scankey.o tupdesc.o +OBJS = heaptuple.o indextuple.o printtup.o scankey.o tupdesc.o all: SUBSYS.o diff --git a/src/backend/access/common/indexvalid.c b/src/backend/access/common/indexvalid.c deleted file mode 100644 index 29ee54c3bf..0000000000 --- a/src/backend/access/common/indexvalid.c +++ /dev/null @@ -1,78 +0,0 @@ -/*------------------------------------------------------------------------- - * - * indexvalid.c - * index tuple qualification validity checking code - * - * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group - * Portions Copyright (c) 1994, Regents of the University of California - * - * - * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/access/common/indexvalid.c,v 1.34 2005/06/24 00:18:52 tgl Exp $ - * - *------------------------------------------------------------------------- - */ - -#include "postgres.h" - -#include "access/iqual.h" -#include "executor/execdebug.h" - -/* ---------------------------------------------------------------- - * index scan key qualification code - * ---------------------------------------------------------------- - */ -int NIndexTupleProcessed; - - -/* ---------------- - * index_keytest - does this index tuple satisfy the scan key(s)? - * ---------------- - */ -bool -index_keytest(IndexTuple tuple, - TupleDesc tupdesc, - int scanKeySize, - ScanKey key) -{ - IncrIndexProcessed(); - - while (scanKeySize > 0) - { - Datum datum; - bool isNull; - Datum test; - - datum = index_getattr(tuple, - key->sk_attno, - tupdesc, - &isNull); - - if (isNull) - { - /* XXX eventually should check if SK_ISNULL */ - return false; - } - - if (key->sk_flags & SK_ISNULL) - return false; - - test = FunctionCall2(&key->sk_func, datum, key->sk_argument); - - if (key->sk_flags & SK_NEGATE) - { - if (DatumGetBool(test)) - return false; - } - else - { - if (!DatumGetBool(test)) - return false; - } - - key++; - scanKeySize--; - } - - return true; -} diff --git a/src/backend/access/gist/gistget.c b/src/backend/access/gist/gistget.c index 5e4cf7fcc2..7b8b462df1 100644 --- a/src/backend/access/gist/gistget.c +++ b/src/backend/access/gist/gistget.c @@ -8,7 +8,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/access/gist/gistget.c,v 1.54 2005/11/22 18:17:05 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/access/gist/gistget.c,v 1.55 2006/01/14 22:03:35 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -332,13 +332,15 @@ gistnext(IndexScanDesc scan, ScanDirection dir, ItemPointer tids, int maxtids, b } /* - * Similar to index_keytest, but first decompress the key in the - * IndexTuple before passing it to the sk_func (and we have previously - * overwritten the sk_func to use the user-defined Consistent method, - * so we actually invoke that). Note that this function is always - * invoked in a short-lived memory context, so we don't need to worry - * about cleaning up allocated memory (either here or in the - * implementation of any Consistent methods). + * gistindex_keytest() -- does this index tuple satisfy the scan key(s)? + * + * We must decompress the key in the IndexTuple before passing it to the + * sk_func (and we have previously overwritten the sk_func to use the + * user-defined Consistent method, so we actually are invoking that). + * + * Note that this function is always invoked in a short-lived memory context, + * so we don't need to worry about cleaning up allocated memory, either here + * or in the implementation of any Consistent methods. */ static bool gistindex_keytest(IndexTuple tuple, diff --git a/src/backend/access/hash/hashutil.c b/src/backend/access/hash/hashutil.c index 3cd573e368..25defa9e2b 100644 --- a/src/backend/access/hash/hashutil.c +++ b/src/backend/access/hash/hashutil.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/access/hash/hashutil.c,v 1.44 2005/11/22 18:17:05 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/access/hash/hashutil.c,v 1.45 2006/01/14 22:03:35 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -16,7 +16,7 @@ #include "access/genam.h" #include "access/hash.h" -#include "access/iqual.h" +#include "executor/execdebug.h" /* @@ -25,8 +25,39 @@ bool _hash_checkqual(IndexScanDesc scan, IndexTuple itup) { - return index_keytest(itup, RelationGetDescr(scan->indexRelation), - scan->numberOfKeys, scan->keyData); + TupleDesc tupdesc = RelationGetDescr(scan->indexRelation); + ScanKey key = scan->keyData; + int scanKeySize = scan->numberOfKeys; + + IncrIndexProcessed(); + + while (scanKeySize > 0) + { + Datum datum; + bool isNull; + Datum test; + + datum = index_getattr(itup, + key->sk_attno, + tupdesc, + &isNull); + + /* assume sk_func is strict */ + if (isNull) + return false; + if (key->sk_flags & SK_ISNULL) + return false; + + test = FunctionCall2(&key->sk_func, datum, key->sk_argument); + + if (!DatumGetBool(test)) + return false; + + key++; + scanKeySize--; + } + + return true; } /* diff --git a/src/backend/executor/execUtils.c b/src/backend/executor/execUtils.c index 500ff0f4f2..bb44ffccb7 100644 --- a/src/backend/executor/execUtils.c +++ b/src/backend/executor/execUtils.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/executor/execUtils.c,v 1.131 2005/12/03 05:51:01 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/executor/execUtils.c,v 1.132 2006/01/14 22:03:35 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -67,9 +67,7 @@ int NTupleReplaced; int NTupleAppended; int NTupleDeleted; int NIndexTupleInserted; -extern int NIndexTupleProcessed; /* have to be defined in the access - * method level so that the - * cinterface.a will link ok. */ +int NIndexTupleProcessed; static void ShutdownExprContext(ExprContext *econtext); diff --git a/src/include/access/iqual.h b/src/include/access/iqual.h deleted file mode 100644 index 3340acb9b1..0000000000 --- a/src/include/access/iqual.h +++ /dev/null @@ -1,31 +0,0 @@ -/*------------------------------------------------------------------------- - * - * iqual.h - * Index scan key qualification definitions. - * - * - * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group - * Portions Copyright (c) 1994, Regents of the University of California - * - * $PostgreSQL: pgsql/src/include/access/iqual.h,v 1.23 2004/12/31 22:03:21 pgsql Exp $ - * - *------------------------------------------------------------------------- - */ -#ifndef IQUAL_H -#define IQUAL_H - -#include "access/itup.h" -#include "access/skey.h" - - -/* ---------------- - * index tuple qualification support - * ---------------- - */ - -extern int NIndexTupleProcessed; - -extern bool index_keytest(IndexTuple tuple, TupleDesc tupdesc, - int scanKeySize, ScanKey key); - -#endif /* IQUAL_H */ diff --git a/src/include/access/skey.h b/src/include/access/skey.h index 61a8e81a83..f3845e5518 100644 --- a/src/include/access/skey.h +++ b/src/include/access/skey.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/access/skey.h,v 1.29 2005/06/24 00:18:52 tgl Exp $ + * $PostgreSQL: pgsql/src/include/access/skey.h,v 1.30 2006/01/14 22:03:35 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -69,10 +69,15 @@ typedef struct ScanKeyData typedef ScanKeyData *ScanKey; -/* ScanKeyData sk_flags */ +/* + * ScanKeyData sk_flags + * + * sk_flags bits 0-15 are reserved for system-wide use (symbols for those + * bits should be defined here). Bits 16-31 are reserved for use within + * individual index access methods. + */ #define SK_ISNULL 0x0001 /* sk_argument is NULL */ #define SK_UNARY 0x0002 /* unary operator (currently unsupported) */ -#define SK_NEGATE 0x0004 /* must negate the function result */ /* -- 2.11.0