From 3385497228038f5c849d91b55f60ba96020ffb04 Mon Sep 17 00:00:00 2001 From: "Vadim B. Mikheev" Date: Wed, 27 Nov 1996 07:25:52 +0000 Subject: [PATCH] New smgrtruncate smgr' interface func. --- src/backend/storage/smgr/smgr.c | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/src/backend/storage/smgr/smgr.c b/src/backend/storage/smgr/smgr.c index 2aaa156e25..bf74a3b750 100644 --- a/src/backend/storage/smgr/smgr.c +++ b/src/backend/storage/smgr/smgr.c @@ -10,7 +10,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/storage/smgr/smgr.c,v 1.4 1996/11/08 05:59:15 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/storage/smgr/smgr.c,v 1.5 1996/11/27 07:25:52 vadim Exp $ * *------------------------------------------------------------------------- */ @@ -36,6 +36,7 @@ typedef struct f_smgr { int (*smgr_flush)(); int (*smgr_blindwrt)(); int (*smgr_nblocks)(); + int (*smgr_truncate)(); int (*smgr_commit)(); /* may be NULL */ int (*smgr_abort)(); /* may be NULL */ } f_smgr; @@ -49,12 +50,14 @@ static f_smgr smgrsw[] = { /* magnetic disk */ { mdinit, NULL, mdcreate, mdunlink, mdextend, mdopen, mdclose, - mdread, mdwrite, mdflush, mdblindwrt, mdnblocks, mdcommit, mdabort }, + mdread, mdwrite, mdflush, mdblindwrt, mdnblocks, mdtruncate, + mdcommit, mdabort }, #ifdef MAIN_MEMORY /* main memory */ { mminit, mmshutdown, mmcreate, mmunlink, mmextend, mmopen, mmclose, - mmread, mmwrite, mmflush, mmblindwrt, mmnblocks, mmcommit, mmabort }, + mmread, mmwrite, mmflush, mmblindwrt, mmnblocks, NULL, + mmcommit, mmabort }, #endif /* MAIN_MEMORY */ }; @@ -321,6 +324,29 @@ smgrnblocks(int16 which, Relation reln) return (nblocks); } +/* + * smgrtruncate() -- Truncate supplied relation to a specified number + * of blocks + * + * Returns the number of blocks on success, aborts the current + * transaction on failure. + */ +int +smgrtruncate(int16 which, Relation reln, int nblocks) +{ + int newblks; + + newblks = nblocks; + if (smgrsw[which].smgr_truncate) + { + if ((newblks = (*(smgrsw[which].smgr_truncate))(reln, nblocks)) < 0) + elog(WARN, "cannot truncate %.*s to %d blocks", + NAMEDATALEN, &(reln->rd_rel->relname.data[0]), nblocks); + } + + return (newblks); +} + /* * smgrcommit(), smgrabort() -- Commit or abort changes made during the * current transaction. -- 2.40.0