diff --git a/src/backend/bootstrap/bootparse.y b/src/backend/bootstrap/bootparse.y index 162ca00e78..5a2a6e09fd 100644 --- a/src/backend/bootstrap/bootparse.y +++ b/src/backend/bootstrap/bootparse.y @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/bootstrap/bootparse.y,v 1.21 1998/08/24 01:13:36 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/bootstrap/bootparse.y,v 1.22 1999/01/21 22:48:04 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -225,7 +225,7 @@ Boot_DeclareIndexStmt: DefineIndex(LexIDStr($5), LexIDStr($3), LexIDStr($7), - $9, NIL, 0, 0, NIL); + $9, NIL, 0, 0, 0, NIL); DO_END; } ; diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c index 29565ba285..ce9d7343c8 100644 --- a/src/backend/catalog/index.c +++ b/src/backend/catalog/index.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/catalog/index.c,v 1.66 1998/12/15 12:45:43 vadim Exp $ + * $Header: /cvsroot/pgsql/src/backend/catalog/index.c,v 1.67 1999/01/21 22:48:05 momjian Exp $ * * * INTERFACE ROUTINES @@ -82,7 +82,7 @@ static void static void UpdateIndexRelation(Oid indexoid, Oid heapoid, FuncIndexInfo *funcInfo, int natts, AttrNumber *attNums, Oid *classOids, Node *predicate, - List *attributeList, bool islossy, bool unique); + List *attributeList, bool islossy, bool unique, bool primary); static void DefaultBuild(Relation heapRelation, Relation indexRelation, int numberOfAttributes, AttrNumber *attributeNumber, IndexStrategy indexStrategy, uint16 parameterCount, @@ -734,7 +734,8 @@ UpdateIndexRelation(Oid indexoid, Node *predicate, List *attributeList, bool islossy, - bool unique) + bool unique, + bool primary) { Form_pg_index indexForm; IndexElem *IndexKey; @@ -775,6 +776,7 @@ UpdateIndexRelation(Oid indexoid, indexForm->indproc = (PointerIsValid(funcInfo)) ? FIgetProcOid(funcInfo) : InvalidOid; indexForm->indislossy = islossy; + indexForm->indisprimary = primary; indexForm->indisunique = unique; indexForm->indhaskeytype = 0; @@ -1014,7 +1016,8 @@ index_create(char *heapRelationName, Datum *parameter, Node *predicate, bool islossy, - bool unique) + bool unique, + bool primary) { Relation heapRelation; Relation indexRelation; @@ -1126,7 +1129,7 @@ index_create(char *heapRelationName, */ UpdateIndexRelation(indexoid, heapoid, funcInfo, numatts, attNums, classObjectId, predicate, - attributeList, islossy, unique); + attributeList, islossy, unique, primary); predInfo = (PredInfo *) palloc(sizeof(PredInfo)); predInfo->pred = predicate; diff --git a/src/backend/commands/cluster.c b/src/backend/commands/cluster.c index 9d9324e8ff..a810391206 100644 --- a/src/backend/commands/cluster.c +++ b/src/backend/commands/cluster.c @@ -14,7 +14,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/commands/cluster.c,v 1.34 1998/12/14 05:18:39 scrappy Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/cluster.c,v 1.35 1999/01/21 22:48:06 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -321,7 +321,8 @@ copy_index(Oid OIDOldIndex, Oid OIDNewHeap) Old_pg_index_Form->indclass, (uint16) 0, (Datum) NULL, NULL, Old_pg_index_Form->indislossy, - Old_pg_index_Form->indisunique); + Old_pg_index_Form->indisunique, + Old_pg_index_Form->indisprimary); heap_close(OldIndex); heap_close(NewHeap); diff --git a/src/backend/commands/defind.c b/src/backend/commands/defind.c index 33d069e651..692e178236 100644 --- a/src/backend/commands/defind.c +++ b/src/backend/commands/defind.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/commands/Attic/defind.c,v 1.29 1998/12/15 12:45:56 vadim Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/Attic/defind.c,v 1.30 1999/01/21 22:48:06 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -71,6 +71,7 @@ DefineIndex(char *heapRelationName, List *attributeList, List *parameterList, bool unique, + bool primary, Expr *predicate, List *rangetable) { @@ -189,7 +190,7 @@ DefineIndex(char *heapRelationName, &fInfo, NULL, accessMethodId, numberOfAttributes, attributeNumberA, classObjectId, parameterCount, parameterA, (Node *) cnfPred, - lossy, unique); + lossy, unique, primary); } else { @@ -206,7 +207,7 @@ DefineIndex(char *heapRelationName, attributeList, accessMethodId, numberOfAttributes, attributeNumberA, classObjectId, parameterCount, parameterA, (Node *) cnfPred, - lossy, unique); + lossy, unique, primary); } } diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c index af94800d2e..9f61e83b35 100644 --- a/src/backend/parser/analyze.c +++ b/src/backend/parser/analyze.c @@ -5,7 +5,7 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: analyze.c,v 1.93 1999/01/21 16:08:38 vadim Exp $ + * $Id: analyze.c,v 1.94 1999/01/21 22:48:07 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -721,10 +721,14 @@ transformCreateStmt(ParseState *pstate, CreateStmt *stmt) elog(ERROR, "CREATE TABLE/PRIMARY KEY multiple keys for table %s are not legal", stmt->relname); have_pkey = TRUE; + index->primary = TRUE; index->idxname = makeTableName(stmt->relname, "pkey", NULL); } else + { + index->primary = FALSE; index->idxname = NULL; + } index->relname = stmt->relname; index->accessMethod = "btree"; diff --git a/src/backend/storage/large_object/inv_api.c b/src/backend/storage/large_object/inv_api.c index 4046040419..255b05c7c1 100644 --- a/src/backend/storage/large_object/inv_api.c +++ b/src/backend/storage/large_object/inv_api.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/storage/large_object/inv_api.c,v 1.44 1998/12/15 12:46:26 vadim Exp $ + * $Header: /cvsroot/pgsql/src/backend/storage/large_object/inv_api.c,v 1.45 1999/01/21 22:48:09 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -178,7 +178,7 @@ inv_create(int flags) classObjectId[0] = INT4_OPS_OID; index_create(objname, indname, NULL, NULL, BTREE_AM_OID, 1, &attNums[0], &classObjectId[0], - 0, (Datum) NULL, NULL, FALSE, FALSE); + 0, (Datum) NULL, NULL, FALSE, FALSE, FALSE); /* make the index visible in this transaction */ CommandCounterIncrement(); diff --git a/src/backend/tcop/utility.c b/src/backend/tcop/utility.c index 7d9e11ba5b..22f915c592 100644 --- a/src/backend/tcop/utility.c +++ b/src/backend/tcop/utility.c @@ -9,7 +9,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/tcop/utility.c,v 1.52 1999/01/17 06:18:44 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/tcop/utility.c,v 1.53 1999/01/21 22:48:11 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -404,6 +404,7 @@ ProcessUtility(Node *parsetree, stmt->indexParams, /* parameters */ stmt->withClause, stmt->unique, + 0, /* CREATE INDEX can't be primary */ (Expr *) stmt->whereClause, stmt->rangetable); } diff --git a/src/include/catalog/index.h b/src/include/catalog/index.h index d377832241..b08d72e7d1 100644 --- a/src/include/catalog/index.h +++ b/src/include/catalog/index.h @@ -6,7 +6,7 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: index.h,v 1.13 1998/09/01 04:34:43 momjian Exp $ + * $Id: index.h,v 1.14 1999/01/21 22:48:14 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -38,7 +38,8 @@ extern void index_create(char *heapRelationName, Datum *parameter, Node *predicate, bool islossy, - bool unique); + bool unique, + bool primary); extern void index_destroy(Oid indexId); diff --git a/src/include/commands/defrem.h b/src/include/commands/defrem.h index 37b287d9fa..f5867bd3fa 100644 --- a/src/include/commands/defrem.h +++ b/src/include/commands/defrem.h @@ -6,7 +6,7 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: defrem.h,v 1.13 1998/09/01 04:35:30 momjian Exp $ + * $Id: defrem.h,v 1.14 1999/01/21 22:48:16 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -25,6 +25,7 @@ extern void DefineIndex(char *heapRelationName, List *attributeList, List *parameterList, bool unique, + bool primary, Expr *predicate, List *rangetable); extern void ExtendIndex(char *indexRelationName, diff --git a/src/include/nodes/parsenodes.h b/src/include/nodes/parsenodes.h index 0e6c8e5068..32fd65c69e 100644 --- a/src/include/nodes/parsenodes.h +++ b/src/include/nodes/parsenodes.h @@ -6,7 +6,7 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: parsenodes.h,v 1.67 1999/01/21 16:08:55 vadim Exp $ + * $Id: parsenodes.h,v 1.68 1999/01/21 22:48:20 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -333,6 +333,7 @@ typedef struct IndexStmt * transformStmt() */ bool *lossy; /* is index lossy? */ bool unique; /* is index unique? */ + bool primary; /* is index on primary key? */ } IndexStmt; /* ----------------------