]> granicus.if.org Git - postgresql/commitdiff
New mdtruncate() func for single segment relations (< 2Gb).
authorVadim B. Mikheev <vadim4o@yahoo.com>
Wed, 27 Nov 1996 07:24:02 +0000 (07:24 +0000)
committerVadim B. Mikheev <vadim4o@yahoo.com>
Wed, 27 Nov 1996 07:24:02 +0000 (07:24 +0000)
src/backend/storage/smgr/md.c

index a1515fd58f9585b0cc670e948c5ed15db8da9bce..3bab0bbc68770df90b4d0873887fff6ee5d37296 100644 (file)
@@ -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.
  *