mirror of
https://github.com/sqlite/sqlite.git
synced 2025-08-07 02:42:48 +03:00
On a backup from a smaller to a larger page size, do not begin committing
the transaction until the source pages after the pending byte have been copied. FossilOrigin-Name: 612e2599d3e1a17c268402fce018a53dee6dffe1
This commit is contained in:
18
manifest
18
manifest
@@ -1,8 +1,8 @@
|
|||||||
-----BEGIN PGP SIGNED MESSAGE-----
|
-----BEGIN PGP SIGNED MESSAGE-----
|
||||||
Hash: SHA1
|
Hash: SHA1
|
||||||
|
|
||||||
C Make\ssure\sthe\schange-counter\sand\sSQLite-version\sfields\sof\sthe\sheader\sare\nset\scorrectly\seven\swhen\sdoing\sa\sVACUUM\swith\slocking_mode=EXCLUSIVE.\nTicket\s[5d863f876ee9561b].
|
C On\sa\sbackup\sfrom\sa\ssmaller\sto\sa\slarger\spage\ssize,\sdo\snot\sbegin\scommitting\nthe\stransaction\suntil\sthe\ssource\spages\safter\sthe\spending\sbyte\shave\sbeen\ncopied.
|
||||||
D 2011-01-16T00:56:19.189
|
D 2011-01-16T22:37:09.511
|
||||||
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
|
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
|
||||||
F Makefile.in de6498556d536ae60bb8bb10e8c1ba011448658c
|
F Makefile.in de6498556d536ae60bb8bb10e8c1ba011448658c
|
||||||
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
|
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
|
||||||
@@ -119,7 +119,7 @@ F src/alter.c 6a0c176e64a34929a4436048066a84ef4f1445b3
|
|||||||
F src/analyze.c 3af3fdb5edea9e69496b078935a3e6a2a1118b30
|
F src/analyze.c 3af3fdb5edea9e69496b078935a3e6a2a1118b30
|
||||||
F src/attach.c 252c4f7e36cc219349451ed63e278c60e80b26f3
|
F src/attach.c 252c4f7e36cc219349451ed63e278c60e80b26f3
|
||||||
F src/auth.c 523da7fb4979469955d822ff9298352d6b31de34
|
F src/auth.c 523da7fb4979469955d822ff9298352d6b31de34
|
||||||
F src/backup.c ce552d975069f65ab1fc798950ff3582d8e76d58
|
F src/backup.c 8c39a1ebba1e9dc385519cc4d434c7b0cab6638c
|
||||||
F src/bitvec.c af50f1c8c0ff54d6bdb7a80e2fceca5a93670bef
|
F src/bitvec.c af50f1c8c0ff54d6bdb7a80e2fceca5a93670bef
|
||||||
F src/btmutex.c 96a12f50f7a17475155971a241d85ec5171573ff
|
F src/btmutex.c 96a12f50f7a17475155971a241d85ec5171573ff
|
||||||
F src/btree.c a27c3b41082889fc258278ba501ff2594dda2a41
|
F src/btree.c a27c3b41082889fc258278ba501ff2594dda2a41
|
||||||
@@ -899,14 +899,14 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
|
|||||||
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
|
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
|
||||||
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
|
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
|
||||||
F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
|
F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
|
||||||
P 0be92a75769dbafbc08c3b229089aaac03a9a907
|
P 04fa1e16905183b948ee6456675799a873d5f97d
|
||||||
R d8d7beadfbe9f74ad99892b81bbe4834
|
R 3d005f718593bfc47c66fc1735978f86
|
||||||
U drh
|
U drh
|
||||||
Z 3a8faf9676cfe40a39d768a062675239
|
Z 78481d4f7ffafe220d59a58e27e67e91
|
||||||
-----BEGIN PGP SIGNATURE-----
|
-----BEGIN PGP SIGNATURE-----
|
||||||
Version: GnuPG v1.4.6 (GNU/Linux)
|
Version: GnuPG v1.4.6 (GNU/Linux)
|
||||||
|
|
||||||
iD8DBQFNMkI4oxKgR168RlERAiL1AJ4+ojIGGkSFg5PKjeVFo2Q3S5VKTwCghUnC
|
iD8DBQFNM3MZoxKgR168RlERAgouAJ9jAfVlLbWbhs2V9PnGaztVeVe3PACggVMY
|
||||||
uUw3JTyu+W3ezvTZ0vpp/zI=
|
rNuHhMxi5oUQ5cjcmZrMH5g=
|
||||||
=Qcvp
|
=1Q7m
|
||||||
-----END PGP SIGNATURE-----
|
-----END PGP SIGNATURE-----
|
||||||
|
@@ -1 +1 @@
|
|||||||
04fa1e16905183b948ee6456675799a873d5f97d
|
612e2599d3e1a17c268402fce018a53dee6dffe1
|
38
src/backup.c
38
src/backup.c
@@ -441,31 +441,33 @@ int sqlite3_backup_step(sqlite3_backup *p, int nPage){
|
|||||||
*/
|
*/
|
||||||
const i64 iSize = (i64)pgszSrc * (i64)nSrcPage;
|
const i64 iSize = (i64)pgszSrc * (i64)nSrcPage;
|
||||||
sqlite3_file * const pFile = sqlite3PagerFile(pDestPager);
|
sqlite3_file * const pFile = sqlite3PagerFile(pDestPager);
|
||||||
|
i64 iOff;
|
||||||
|
i64 iEnd;
|
||||||
|
|
||||||
assert( pFile );
|
assert( pFile );
|
||||||
assert( (i64)nDestTruncate*(i64)pgszDest >= iSize || (
|
assert( (i64)nDestTruncate*(i64)pgszDest >= iSize || (
|
||||||
nDestTruncate==(int)(PENDING_BYTE_PAGE(p->pDest->pBt)-1)
|
nDestTruncate==(int)(PENDING_BYTE_PAGE(p->pDest->pBt)-1)
|
||||||
&& iSize>=PENDING_BYTE && iSize<=PENDING_BYTE+pgszDest
|
&& iSize>=PENDING_BYTE && iSize<=PENDING_BYTE+pgszDest
|
||||||
));
|
));
|
||||||
if( SQLITE_OK==(rc = sqlite3PagerCommitPhaseOne(pDestPager, 0, 1))
|
iEnd = MIN(PENDING_BYTE + pgszDest, iSize);
|
||||||
&& SQLITE_OK==(rc = backupTruncateFile(pFile, iSize))
|
for(
|
||||||
&& SQLITE_OK==(rc = sqlite3PagerSync(pDestPager))
|
iOff=PENDING_BYTE+pgszSrc;
|
||||||
|
rc==SQLITE_OK && iOff<iEnd;
|
||||||
|
iOff+=pgszSrc
|
||||||
){
|
){
|
||||||
i64 iOff;
|
PgHdr *pSrcPg = 0;
|
||||||
i64 iEnd = MIN(PENDING_BYTE + pgszDest, iSize);
|
const Pgno iSrcPg = (Pgno)((iOff/pgszSrc)+1);
|
||||||
for(
|
rc = sqlite3PagerGet(pSrcPager, iSrcPg, &pSrcPg);
|
||||||
iOff=PENDING_BYTE+pgszSrc;
|
if( rc==SQLITE_OK ){
|
||||||
rc==SQLITE_OK && iOff<iEnd;
|
u8 *zData = sqlite3PagerGetData(pSrcPg);
|
||||||
iOff+=pgszSrc
|
rc = sqlite3OsWrite(pFile, zData, pgszSrc, iOff);
|
||||||
){
|
}
|
||||||
PgHdr *pSrcPg = 0;
|
sqlite3PagerUnref(pSrcPg);
|
||||||
const Pgno iSrcPg = (Pgno)((iOff/pgszSrc)+1);
|
}
|
||||||
rc = sqlite3PagerGet(pSrcPager, iSrcPg, &pSrcPg);
|
if( rc==SQLITE_OK ){
|
||||||
if( rc==SQLITE_OK ){
|
rc = sqlite3PagerCommitPhaseOne(pDestPager, 0, 1);
|
||||||
u8 *zData = sqlite3PagerGetData(pSrcPg);
|
if( rc==SQLITE_OK ){
|
||||||
rc = sqlite3OsWrite(pFile, zData, pgszSrc, iOff);
|
rc = backupTruncateFile(pFile, iSize);
|
||||||
}
|
|
||||||
sqlite3PagerUnref(pSrcPg);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
|
Reference in New Issue
Block a user