10
10
*
11
11
*
12
12
* IDENTIFICATION
13
- * $Header: /cvsroot/pgsql/src/backend/storage/smgr/smgr.c,v 1.4 1996/11/08 05:59:15 momjian Exp $
13
+ * $Header: /cvsroot/pgsql/src/backend/storage/smgr/smgr.c,v 1.5 1996/11/27 07:25:52 vadim Exp $
14
14
*
15
15
*-------------------------------------------------------------------------
16
16
*/
@@ -36,6 +36,7 @@ typedef struct f_smgr {
36
36
int (* smgr_flush )();
37
37
int (* smgr_blindwrt )();
38
38
int (* smgr_nblocks )();
39
+ int (* smgr_truncate )();
39
40
int (* smgr_commit )();/* may be NULL */
40
41
int (* smgr_abort )();/* may be NULL */
41
42
}f_smgr ;
@@ -49,12 +50,14 @@ static f_smgr smgrsw[] = {
49
50
50
51
/* magnetic disk */
51
52
{mdinit ,NULL ,mdcreate ,mdunlink ,mdextend ,mdopen ,mdclose ,
52
- mdread ,mdwrite ,mdflush ,mdblindwrt ,mdnblocks ,mdcommit ,mdabort },
53
+ mdread ,mdwrite ,mdflush ,mdblindwrt ,mdnblocks ,mdtruncate ,
54
+ mdcommit ,mdabort },
53
55
54
56
#ifdef MAIN_MEMORY
55
57
/* main memory */
56
58
{mminit ,mmshutdown ,mmcreate ,mmunlink ,mmextend ,mmopen ,mmclose ,
57
- mmread ,mmwrite ,mmflush ,mmblindwrt ,mmnblocks ,mmcommit ,mmabort },
59
+ mmread ,mmwrite ,mmflush ,mmblindwrt ,mmnblocks ,NULL ,
60
+ mmcommit ,mmabort },
58
61
59
62
#endif /* MAIN_MEMORY */
60
63
};
@@ -321,6 +324,29 @@ smgrnblocks(int16 which, Relation reln)
321
324
return (nblocks );
322
325
}
323
326
327
+ /*
328
+ * smgrtruncate() -- Truncate supplied relation to a specified number
329
+ *of blocks
330
+ *
331
+ *Returns the number of blocks on success, aborts the current
332
+ *transaction on failure.
333
+ */
334
+ int
335
+ smgrtruncate (int16 which ,Relation reln ,int nblocks )
336
+ {
337
+ int newblks ;
338
+
339
+ newblks = nblocks ;
340
+ if (smgrsw [which ].smgr_truncate )
341
+ {
342
+ if ((newblks = (* (smgrsw [which ].smgr_truncate ))(reln ,nblocks ))< 0 )
343
+ elog (WARN ,"cannot truncate %.*s to %d blocks" ,
344
+ NAMEDATALEN ,& (reln -> rd_rel -> relname .data [0 ]),nblocks );
345
+ }
346
+
347
+ return (newblks );
348
+ }
349
+
324
350
/*
325
351
* smgrcommit(), smgrabort() -- Commit or abort changes made during the
326
352
* current transaction.