mirror of
https://github.com/sqlite/sqlite.git
synced 2025-07-30 19:03:16 +03:00
Fix a problem with mixing temp-files and mmap-mode.
FossilOrigin-Name: c80c5c62b2e2c5e47e0839f8e2d5b6341ca4a249
This commit is contained in:
14
manifest
14
manifest
@ -1,5 +1,5 @@
|
|||||||
C Fix\ssome\sproblems\sto\sdo\swith\stemp-file\sdatabases\sand\srecovering\sfrom\sIO\sand\sSQLITE_FULL\serrors.
|
C Fix\sa\sproblem\swith\smixing\stemp-files\sand\smmap-mode.
|
||||||
D 2016-04-23T14:55:28.020
|
D 2016-04-23T17:24:16.091
|
||||||
F Makefile.in eba680121821b8a60940a81454316f47a341487a
|
F Makefile.in eba680121821b8a60940a81454316f47a341487a
|
||||||
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
|
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
|
||||||
F Makefile.msc 71b8b16cf9393f68e2e2035486ca104872558836
|
F Makefile.msc 71b8b16cf9393f68e2e2035486ca104872558836
|
||||||
@ -362,7 +362,7 @@ F src/os_setup.h c9d4553b5aaa6f73391448b265b89bed0b890faa
|
|||||||
F src/os_unix.c d0b41a47eb5f0dc00e423a1723aadeab0e78c85f
|
F src/os_unix.c d0b41a47eb5f0dc00e423a1723aadeab0e78c85f
|
||||||
F src/os_win.c 1997a873bfc8296a701bd8e2df8c3d5da5afe956
|
F src/os_win.c 1997a873bfc8296a701bd8e2df8c3d5da5afe956
|
||||||
F src/os_win.h eb7a47aa17b26b77eb97e4823f20a00b8bda12ca
|
F src/os_win.h eb7a47aa17b26b77eb97e4823f20a00b8bda12ca
|
||||||
F src/pager.c 4981dc6154ce111361a7cd35eaa26aadf8914ea3
|
F src/pager.c cbc8996b773c191107b771424b529307ffdf19ba
|
||||||
F src/pager.h 329bdf078a4e0a3b35084534d58625d21fd03681
|
F src/pager.h 329bdf078a4e0a3b35084534d58625d21fd03681
|
||||||
F src/parse.y 10eb2f3fb62341291528c7984498054731f9d31e
|
F src/parse.y 10eb2f3fb62341291528c7984498054731f9d31e
|
||||||
F src/pcache.c b3230ecfc7f797063fbe167f2845da363e8f07f8
|
F src/pcache.c b3230ecfc7f797063fbe167f2845da363e8f07f8
|
||||||
@ -1111,7 +1111,7 @@ F test/tclsqlite.test e1306001a0ca92250b691ea6d3cecaca5b6342aa
|
|||||||
F test/tempdb.test bd92eba8f20e16a9136e434e20b280794de3cdb6
|
F test/tempdb.test bd92eba8f20e16a9136e434e20b280794de3cdb6
|
||||||
F test/tempfault.test 0c0d349c9a99bf5f374655742577f8712c647900
|
F test/tempfault.test 0c0d349c9a99bf5f374655742577f8712c647900
|
||||||
F test/temptable.test d2c9b87a54147161bcd1822e30c1d1cd891e5b30
|
F test/temptable.test d2c9b87a54147161bcd1822e30c1d1cd891e5b30
|
||||||
F test/temptable2.test e62783549be26283e1b3725f0de3309411be6c84
|
F test/temptable2.test 31485911fb33e72c7737087ba5a2b35acafba55a
|
||||||
F test/temptrigger.test 8ec228b0db5d7ebc4ee9b458fc28cb9e7873f5e1
|
F test/temptrigger.test 8ec228b0db5d7ebc4ee9b458fc28cb9e7873f5e1
|
||||||
F test/tester.tcl 7b740ee852c55e1e72b6ebe5044acee7aa4e5553
|
F test/tester.tcl 7b740ee852c55e1e72b6ebe5044acee7aa4e5553
|
||||||
F test/thread001.test 9f22fd3525a307ff42a326b6bc7b0465be1745a5
|
F test/thread001.test 9f22fd3525a307ff42a326b6bc7b0465be1745a5
|
||||||
@ -1484,7 +1484,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
|
|||||||
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
||||||
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
||||||
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
||||||
P 49aec9718d61c9f12aed96f530128666c3b01c81
|
P 3d61da4a76af8c9c2a293df085f3ed5a7bb447df
|
||||||
R 98471ae1c4ed8f399ba91e3e119d0ef8
|
R 85df4f851dc9e804fc35d28f4dbcf65b
|
||||||
U dan
|
U dan
|
||||||
Z 4115a15d29a4b7f5f76b2491e48cc4f1
|
Z 50e48f2ab5de65ac7aff6f1c82162e94
|
||||||
|
@ -1 +1 @@
|
|||||||
3d61da4a76af8c9c2a293df085f3ed5a7bb447df
|
c80c5c62b2e2c5e47e0839f8e2d5b6341ca4a249
|
@ -2034,7 +2034,7 @@ static int pager_end_transaction(Pager *pPager, int hasMaster, int bCommit){
|
|||||||
sqlite3BitvecDestroy(pPager->pInJournal);
|
sqlite3BitvecDestroy(pPager->pInJournal);
|
||||||
pPager->pInJournal = 0;
|
pPager->pInJournal = 0;
|
||||||
pPager->nRec = 0;
|
pPager->nRec = 0;
|
||||||
if( pagerFlushOnCommit(pPager) ){
|
if( MEMDB || pagerFlushOnCommit(pPager) ){
|
||||||
sqlite3PcacheCleanAll(pPager->pPCache);
|
sqlite3PcacheCleanAll(pPager->pPCache);
|
||||||
}else{
|
}else{
|
||||||
sqlite3PcacheClearWritable(pPager->pPCache);
|
sqlite3PcacheClearWritable(pPager->pPCache);
|
||||||
@ -5381,7 +5381,7 @@ int sqlite3PagerGet(
|
|||||||
);
|
);
|
||||||
|
|
||||||
if( rc==SQLITE_OK && pData ){
|
if( rc==SQLITE_OK && pData ){
|
||||||
if( pPager->eState>PAGER_READER ){
|
if( pPager->eState>PAGER_READER || pPager->tempFile ){
|
||||||
pPg = sqlite3PagerLookup(pPager, pgno);
|
pPg = sqlite3PagerLookup(pPager, pgno);
|
||||||
}
|
}
|
||||||
if( pPg==0 ){
|
if( pPg==0 ){
|
||||||
@ -6219,7 +6219,7 @@ int sqlite3PagerCommitPhaseOne(
|
|||||||
|
|
||||||
assert( MEMDB==0 || pPager->tempFile );
|
assert( MEMDB==0 || pPager->tempFile );
|
||||||
assert( isOpen(pPager->fd) || pPager->tempFile );
|
assert( isOpen(pPager->fd) || pPager->tempFile );
|
||||||
if( !isOpen(pPager->fd) ){
|
if( 0==pagerFlushOnCommit(pPager) ){
|
||||||
/* If this is an in-memory db, or no pages have been written to, or this
|
/* If this is an in-memory db, or no pages have been written to, or this
|
||||||
** function has already been called, it is mostly a no-op. However, any
|
** function has already been called, it is mostly a no-op. However, any
|
||||||
** backup in progress needs to be restarted. */
|
** backup in progress needs to be restarted. */
|
||||||
|
@ -316,5 +316,34 @@ foreach {tn mode} {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
# When using mmap mode with a temp file, SQLite must search the cache
|
||||||
|
# before using a mapped page even when there is no write transaction
|
||||||
|
# open. For a temp file, the on-disk version may not be up to date.
|
||||||
|
#
|
||||||
|
sqlite3 db ""
|
||||||
|
do_execsql_test 10.0 {
|
||||||
|
PRAGMA cache_size = 50;
|
||||||
|
PRAGMA page_size = 1024;
|
||||||
|
CREATE TABLE t1(a, b, PRIMARY KEY(a)) WITHOUT ROWID;
|
||||||
|
CREATE INDEX i1 ON t1(a);
|
||||||
|
CREATE TABLE t2(x, y);
|
||||||
|
INSERT INTO t2 VALUES(1, 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
do_execsql_test 10.1 {
|
||||||
|
BEGIN;
|
||||||
|
WITH x(i) AS ( SELECT 1 UNION ALL SELECT i+1 FROM x WHERE i<500 )
|
||||||
|
INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM x;
|
||||||
|
COMMIT;
|
||||||
|
INSERT INTO t2 VALUES(3, 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
do_execsql_test 10.2 {
|
||||||
|
PRAGMA mmap_size = 512000;
|
||||||
|
SELECT * FROM t2;
|
||||||
|
PRAGMA integrity_check;
|
||||||
|
} {512000 1 2 3 4 ok}
|
||||||
|
|
||||||
finish_test
|
finish_test
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user