*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.187 2002/03/19 02:18:14 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.188 2002/03/19 02:58:19 momjian Exp $
*
*
* INTERFACE ROUTINES
*/
void
-heap_truncate(char *relname)
+heap_truncate(const char *relname)
{
Relation rel;
Oid rid;
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/commands/Attic/creatinh.c,v 1.86 2002/03/19 02:18:15 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/commands/Attic/creatinh.c,v 1.87 2002/03/19 02:58:19 momjian Exp $
*
*-------------------------------------------------------------------------
*/
#include "postgres.h"
#include "access/heapam.h"
+#include "catalog/catalog.h"
#include "catalog/catname.h"
#include "catalog/indexing.h"
#include "catalog/heap.h"
* themselves will be destroyed, too.
*/
void
-RemoveRelation(char *name)
+RemoveRelation(const char *name)
{
AssertArg(name);
heap_drop_with_catalog(name, allowSystemTableMods);
* Rows are removed, indices are truncated and reconstructed.
*/
void
-TruncateRelation(char *name)
+TruncateRelation(const char *relname)
{
- AssertArg(name);
- heap_truncate(name);
+ Relation rel;
+
+ AssertArg(relname);
+
+ if (!allowSystemTableMods && IsSystemRelationName(relname))
+ elog(ERROR, "TRUNCATE cannot be used on system tables. '%s' is a system table",
+ relname);
+
+ if (!pg_ownercheck(GetUserId(), relname, RELNAME))
+ elog(ERROR, "you do not own relation \"%s\"", 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);
+
+ if (rel->rd_rel->relkind == RELKIND_VIEW)
+ elog(ERROR, "TRUNCATE cannot be used on views. '%s' is a view",
+ relname);
+
+ /* Keep the lock until transaction commit */
+ heap_close(rel, NoLock);
+
+ heap_truncate(relname);
}
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/tcop/utility.c,v 1.133 2002/03/19 02:18:20 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/tcop/utility.c,v 1.134 2002/03/19 02:58:19 momjian Exp $
*
*-------------------------------------------------------------------------
*/
break;
/*
- * ******************************** relation and attribute
- * manipulation ********************************
- *
+ * relation and attribute manipulation
*/
case T_CreateStmt:
DefineRelation((CreateStmt *) parsetree, RELKIND_RELATION);
case T_TruncateStmt:
{
- Relation rel;
-
- relname = ((TruncateStmt *) parsetree)->relName;
- if (!allowSystemTableMods && IsSystemRelationName(relname))
- elog(ERROR, "TRUNCATE cannot be used on system tables. '%s' is a system table",
- 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);
- if (rel->rd_rel->relkind == RELKIND_VIEW)
- elog(ERROR, "TRUNCATE cannot be used on views. '%s' is a view",
- relname);
- heap_close(rel, NoLock);
-
- if (!pg_ownercheck(GetUserId(), relname, RELNAME))
- elog(ERROR, "you do not own class \"%s\"", relname);
- TruncateRelation(relname);
+ TruncateRelation(((TruncateStmt *) parsetree)->relName);
}
break;
* Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: heap.h,v 1.44 2002/03/19 02:18:22 momjian Exp $
+ * $Id: heap.h,v 1.45 2002/03/19 02:58:19 momjian Exp $
*
*-------------------------------------------------------------------------
*/
extern void heap_drop_with_catalog(const char *relname,
bool allow_system_table_mods);
-extern void heap_truncate(char *relname);
+extern void heap_truncate(const char *relname);
extern void AddRelationRawConstraints(Relation rel,
List *rawColDefaults,
* Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: creatinh.h,v 1.17 2001/11/05 17:46:33 momjian Exp $
+ * $Id: creatinh.h,v 1.18 2002/03/19 02:58:20 momjian Exp $
*
*-------------------------------------------------------------------------
*/
#include "nodes/parsenodes.h"
extern void DefineRelation(CreateStmt *stmt, char relkind);
-extern void RemoveRelation(char *name);
-extern void TruncateRelation(char *name);
+extern void RemoveRelation(const char *name);
+extern void TruncateRelation(const char *name);
#endif /* CREATINH_H */