Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 3385497

Browse files
committed
New smgrtruncate smgr' interface func.
1 parent a2a33e1 commit 3385497

File tree

1 file changed

+29
-3
lines changed
  • src/backend/storage/smgr

1 file changed

+29
-3
lines changed

src/backend/storage/smgr/smgr.c

+29-3
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
*
1111
*
1212
* 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 $
1414
*
1515
*-------------------------------------------------------------------------
1616
*/
@@ -36,6 +36,7 @@ typedef struct f_smgr {
3636
int (*smgr_flush)();
3737
int (*smgr_blindwrt)();
3838
int (*smgr_nblocks)();
39+
int (*smgr_truncate)();
3940
int (*smgr_commit)(); /* may be NULL */
4041
int (*smgr_abort)(); /* may be NULL */
4142
} f_smgr;
@@ -49,12 +50,14 @@ static f_smgr smgrsw[] = {
4950

5051
/* magnetic disk */
5152
{ 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 },
5355

5456
#ifdef MAIN_MEMORY
5557
/* main memory */
5658
{ 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 },
5861

5962
#endif /* MAIN_MEMORY */
6063
};
@@ -321,6 +324,29 @@ smgrnblocks(int16 which, Relation reln)
321324
return (nblocks);
322325
}
323326

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+
324350
/*
325351
* smgrcommit(), smgrabort() -- Commit or abort changes made during the
326352
* current transaction.

0 commit comments

Comments
 (0)