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.
0 commit comments