aboutsummaryrefslogtreecommitdiff
path: root/src/backend/commands/opclasscmds.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2006-12-18 18:56:29 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2006-12-18 18:56:29 +0000
commit93b4f0ff7711d42b8c10e48b0a7575e2847e30b3 (patch)
tree407a0358962555c7dd1bc475671eb1d1a977137e /src/backend/commands/opclasscmds.c
parent6b4fe0460cac52973c16c279cfc5d89b066c1fe0 (diff)
downloadpostgresql-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.c23
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