From a2a33e1344e9c9b7fb72c1ec0457f87692bd599c Mon Sep 17 00:00:00 2001 From: "Vadim B. Mikheev" Date: Wed, 27 Nov 1996 07:24:02 +0000 Subject: [PATCH] New mdtruncate() func for single segment relations (< 2Gb). --- src/backend/storage/smgr/md.c | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/src/backend/storage/smgr/md.c b/src/backend/storage/smgr/md.c index a1515fd58f9..3bab0bbc687 100644 --- a/src/backend/storage/smgr/md.c +++ b/src/backend/storage/smgr/md.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/storage/smgr/md.c,v 1.9 1996/11/25 06:33:51 bryanh Exp $ + * $Header: /cvsroot/pgsql/src/backend/storage/smgr/md.c,v 1.10 1996/11/27 07:24:02 vadim Exp $ * *------------------------------------------------------------------------- */ @@ -528,6 +528,36 @@ mdnblocks(Relation reln) } } +/* + * mdtruncate() -- Truncate relation to specified number of blocks. + * + * Returns # of blocks or -1 on error. + */ +int +mdtruncate (Relation reln, int nblocks) +{ + int fd; + MdfdVec *v; + int curnblk; + + curnblk = mdnblocks (reln); + if ( curnblk / RELSEG_SIZE > 0 ) + { + elog (NOTICE, "Can't truncate multi-segments relation %.*s", + NAMEDATALEN, &(reln->rd_rel->relname.data[0])); + return (curnblk); + } + + fd = RelationGetFile(reln); + v = &Md_fdvec[fd]; + + if ( FileTruncate (v->mdfd_vfd, nblocks * BLCKSZ) < 0 ) + return (-1); + + return (nblocks); + +} /* mdtruncate */ + /* * mdcommit() -- Commit a transaction. *