aboutsummaryrefslogtreecommitdiff
path: root/src/pager.c
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2010-05-19 19:26:05 +0000
committerdrh <drh@noemail.net>2010-05-19 19:26:05 +0000
commit9ff27ecdb2de9f010c4ba4bce262a0ea1c96ecdb (patch)
tree74ecb7012a13b09c887830b0cbb95fd1db5b0257 /src/pager.c
parent4c1cb6ab052377aed62d04eba6da4ac7ee2d3468 (diff)
downloadsqlite-9ff27ecdb2de9f010c4ba4bce262a0ea1c96ecdb.tar.gz
sqlite-9ff27ecdb2de9f010c4ba4bce262a0ea1c96ecdb.zip
Add the SQLITE_FCNTL_SIZE_HINT operator to sqlite3_file_control() and use it
to give the VFS hints about the ultimate size of a database file when the file is growing. FossilOrigin-Name: 2b7e3b4a30d6a7c4a8a4b8e7dd2ed728b565c96d
Diffstat (limited to 'src/pager.c')
-rw-r--r--src/pager.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/pager.c b/src/pager.c
index 42403c997..43ac8eb32 100644
--- a/src/pager.c
+++ b/src/pager.c
@@ -3332,6 +3332,14 @@ static int pager_write_pagelist(PgHdr *pList){
rc = pagerOpentemp(pPager, pPager->fd, pPager->vfsFlags);
}
+ /* Before the first write, give the VFS a hint of what the final
+ ** file size will be.
+ */
+ if( pPager->dbSize > (pPager->dbOrigSize+1) && isOpen(pPager->fd) ){
+ sqlite3_int64 szFile = pPager->pageSize * (sqlite3_int64)pPager->dbSize;
+ sqlite3OsFileControl(pPager->fd, SQLITE_FCNTL_SIZE_HINT, &szFile);
+ }
+
while( rc==SQLITE_OK && pList ){
Pgno pgno = pList->pgno;