summaryrefslogtreecommitdiff
path: root/src/backend/tcop/utility.c
diff options
context:
space:
mode:
authorBruce Momjian <bruce@momjian.us>1999-09-23 17:03:39 +0000
committerBruce Momjian <bruce@momjian.us>1999-09-23 17:03:39 +0000
commite7cad7b0cbf88e2c0c5bf89957e60657561ffd70 (patch)
tree2d88ae4f0faeadd7796481f626364e81f116e956 /src/backend/tcop/utility.c
parentabd4bf13416e0dab832be4944d51de2f9e25f784 (diff)
downloadpostgresql-e7cad7b0cbf88e2c0c5bf89957e60657561ffd70.tar.gz
Add TRUNCATE command, with psql help and sgml additions.
Diffstat (limited to 'src/backend/tcop/utility.c')
-rw-r--r--src/backend/tcop/utility.c34
1 files changed, 33 insertions, 1 deletions
diff --git a/src/backend/tcop/utility.c b/src/backend/tcop/utility.c
index 29b4fb527c..26735a5d80 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.65 1999/09/18 19:07:44 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/tcop/utility.c,v 1.66 1999/09/23 17:02:52 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -206,6 +206,38 @@ ProcessUtility(Node *parsetree,
}
break;
+ case T_TruncateStmt:
+ {
+
+ Relation rel;
+
+ 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);
+ }
+
+ rel = heap_openr(relname);
+ if (RelationIsValid(rel)) {
+ if (rel->rd_rel->relkind == RELKIND_SEQUENCE) {
+ elog(ERROR, "TRUNCATE cannot be used on sequences. '%s' is a sequence",
+ relname);
+ }
+ heap_close(rel);
+ }
+#ifndef NO_SECURITY
+ if (!pg_ownercheck(userName, relname, RELNAME)) {
+ elog(ERROR, "you do not own class \"%s\"", relname);
+ }
+#endif
+ TruncateRelation(((TruncateStmt *) parsetree)->relName);
+
+ }
+ break;
+
case T_CopyStmt:
{
CopyStmt *stmt = (CopyStmt *) parsetree;