*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/tcop/utility.c,v 1.68 1999/09/29 16:06:11 wieck Exp $
+ * $Header: /cvsroot/pgsql/src/backend/tcop/utility.c,v 1.69 1999/09/30 01:12:36 tgl Exp $
*
*-------------------------------------------------------------------------
*/
}
break;
- case T_TruncateStmt:
- {
+ case T_TruncateStmt:
+ {
+ Relation rel;
- Relation rel;
+ PS_SET_STATUS(commandTag = "TRUNCATE");
+ CHECK_IF_ABORTED();
- PS_SET_STATUS(commandTag = "TRUNCATE");
- CHECK_IF_ABORTED();
+ relname = ((TruncateStmt *) parsetree)->relName;
+ if (!allowSystemTableMods && IsSystemRelationName(relname))
+ elog(ERROR, "TRUNCATE cannot be used on system tables. '%s' is a system table",
+ relname);
- relname = ((TruncateStmt *) parsetree)->relName;
- if (!allowSystemTableMods && IsSystemRelationName(relname)) {
- elog(ERROR, "TRUNCATE cannot be used on system tables. '%s' is a system table",
- relname);
- }
-
- rel = heap_openr(relname, AccessExclusiveLock);
- if (RelationIsValid(rel)) {
- if (rel->rd_rel->relkind == RELKIND_SEQUENCE) {
- elog(ERROR, "TRUNCATE cannot be used on sequences. '%s' is a sequence",
- relname);
- }
+ /* Grab exclusive lock in preparation for truncate... */
+ rel = heap_openr(relname, AccessExclusiveLock);
+ if (rel->rd_rel->relkind == RELKIND_SEQUENCE)
+ elog(ERROR, "TRUNCATE cannot be used on sequences. '%s' is a sequence",
+ relname);
heap_close(rel, NoLock);
- }
+
#ifndef NO_SECURITY
- if (!pg_ownercheck(userName, relname, RELNAME)) {
- elog(ERROR, "you do not own class \"%s\"", relname);
- }
+ if (!pg_ownercheck(userName, relname, RELNAME))
+ elog(ERROR, "you do not own class \"%s\"", relname);
#endif
- TruncateRelation(((TruncateStmt *) parsetree)->relName);
-
+ TruncateRelation(relname);
}
break;