diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2006-12-18 18:56:29 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2006-12-18 18:56:29 +0000 |
commit | 93b4f0ff7711d42b8c10e48b0a7575e2847e30b3 (patch) | |
tree | 407a0358962555c7dd1bc475671eb1d1a977137e /src/backend/commands/opclasscmds.c | |
parent | 6b4fe0460cac52973c16c279cfc5d89b066c1fe0 (diff) | |
download | postgresql-93b4f0ff7711d42b8c10e48b0a7575e2847e30b3.tar.gz postgresql-93b4f0ff7711d42b8c10e48b0a7575e2847e30b3.zip |
Set pg_am.amstrategies to zero for index AMs that don't have fixed
operator strategy numbers, ie, GiST and GIN. This is almost cosmetic
enough to not need a catversion bump, but since the opr_sanity regression
test has to change in sync with the catalog entry, I figured I'd better
do one.
Diffstat (limited to 'src/backend/commands/opclasscmds.c')
-rw-r--r-- | src/backend/commands/opclasscmds.c | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/src/backend/commands/opclasscmds.c b/src/backend/commands/opclasscmds.c index 4407e2785c0..d4dec746501 100644 --- a/src/backend/commands/opclasscmds.c +++ b/src/backend/commands/opclasscmds.c @@ -9,12 +9,14 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/commands/opclasscmds.c,v 1.49 2006/10/04 00:29:51 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/commands/opclasscmds.c,v 1.50 2006/12/18 18:56:28 tgl Exp $ * *------------------------------------------------------------------------- */ #include "postgres.h" +#include <limits.h> + #include "access/genam.h" #include "access/heapam.h" #include "catalog/dependency.h" @@ -73,8 +75,8 @@ DefineOpClass(CreateOpClassStmt *stmt) storageoid, /* storage datatype oid, if any */ namespaceoid, /* namespace to create opclass in */ opclassoid; /* oid of opclass we create */ - int numOperators, /* amstrategies value */ - numProcs; /* amsupport value */ + int maxOpNumber, /* amstrategies value */ + maxProcNumber; /* amsupport value */ bool amstorage; /* amstorage flag */ List *operators; /* OpClassMember list for operators */ List *procedures; /* OpClassMember list for support procs */ @@ -112,8 +114,11 @@ DefineOpClass(CreateOpClassStmt *stmt) amoid = HeapTupleGetOid(tup); pg_am = (Form_pg_am) GETSTRUCT(tup); - numOperators = pg_am->amstrategies; - numProcs = pg_am->amsupport; + maxOpNumber = pg_am->amstrategies; + /* if amstrategies is zero, just enforce that op numbers fit in int16 */ + if (maxOpNumber <= 0) + maxOpNumber = SHRT_MAX; + maxProcNumber = pg_am->amsupport; amstorage = pg_am->amstorage; /* XXX Should we make any privilege check against the AM? */ @@ -176,12 +181,12 @@ DefineOpClass(CreateOpClassStmt *stmt) switch (item->itemtype) { case OPCLASS_ITEM_OPERATOR: - if (item->number <= 0 || item->number > numOperators) + if (item->number <= 0 || item->number > maxOpNumber) ereport(ERROR, (errcode(ERRCODE_INVALID_OBJECT_DEFINITION), errmsg("invalid operator number %d," " must be between 1 and %d", - item->number, numOperators))); + item->number, maxOpNumber))); if (item->args != NIL) { TypeName *typeName1 = (TypeName *) linitial(item->args); @@ -220,12 +225,12 @@ DefineOpClass(CreateOpClassStmt *stmt) addClassMember(&operators, member, false); break; case OPCLASS_ITEM_FUNCTION: - if (item->number <= 0 || item->number > numProcs) + if (item->number <= 0 || item->number > maxProcNumber) ereport(ERROR, (errcode(ERRCODE_INVALID_OBJECT_DEFINITION), errmsg("invalid procedure number %d," " must be between 1 and %d", - item->number, numProcs))); + item->number, maxProcNumber))); funcOid = LookupFuncNameTypeNames(item->name, item->args, false); #ifdef NOT_USED |