mirror of
https://github.com/sqlite/sqlite.git
synced 2025-08-08 14:02:16 +03:00
Require the SQLITE_ENABLE_READONLY_WALJOURNAL pre-processor macro to activate the new feature on this branch.
FossilOrigin-Name: 21ed4e78863f2622d756d2f5e0e951f3c4a992913cd1e459b2366cb5bab0153c
This commit is contained in:
18
manifest
18
manifest
@@ -1,5 +1,5 @@
|
|||||||
C Merge\slatest\strunk\schanges\sinto\sthis\sbranch.
|
C Require\sthe\sSQLITE_ENABLE_READONLY_WALJOURNAL\spre-processor\smacro\sto\sactivate\sthe\snew\sfeature\son\sthis\sbranch.
|
||||||
D 2024-10-30T11:21:55.931
|
D 2024-10-30T13:47:08.825
|
||||||
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
||||||
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
||||||
F LICENSE.md c5b4009dca54d127d2d6033c22fd9cc34f53bedb6ef12c7cbaa468381c74ab28
|
F LICENSE.md c5b4009dca54d127d2d6033c22fd9cc34f53bedb6ef12c7cbaa468381c74ab28
|
||||||
@@ -763,7 +763,7 @@ F src/os_setup.h 6011ad7af5db4e05155f385eb3a9b4470688de6f65d6166b8956e58a3d87210
|
|||||||
F src/os_unix.c 0ad4e0885294b3a0e135a18533590ec9ad91ffe82f6a08e55b40babd51772928
|
F src/os_unix.c 0ad4e0885294b3a0e135a18533590ec9ad91ffe82f6a08e55b40babd51772928
|
||||||
F src/os_win.c 69fa1aaff68270423c85cff4327ba17ef99a1eb017e1a2bfb97416d9b8398b05
|
F src/os_win.c 69fa1aaff68270423c85cff4327ba17ef99a1eb017e1a2bfb97416d9b8398b05
|
||||||
F src/os_win.h 7b073010f1451abe501be30d12f6bc599824944a
|
F src/os_win.h 7b073010f1451abe501be30d12f6bc599824944a
|
||||||
F src/pager.c c814c0b46740f660f5c6a0b3c06189528821ca829da9040af56111272673cf7f
|
F src/pager.c 9aae5bb8a2bcd5a6347cc2548e7df428a0108b6c52834876ebe12900e5158c47
|
||||||
F src/pager.h 4b1140d691860de0be1347474c51fee07d5420bd7f802d38cbab8ea4ab9f538a
|
F src/pager.h 4b1140d691860de0be1347474c51fee07d5420bd7f802d38cbab8ea4ab9f538a
|
||||||
F src/parse.y a7a8d42eeff01d267444ddb476029b0b1726fb70ae3d77984140f17ad02e2d61
|
F src/parse.y a7a8d42eeff01d267444ddb476029b0b1726fb70ae3d77984140f17ad02e2d61
|
||||||
F src/pcache.c 588cc3c5ccaaadde689ed35ce5c5c891a1f7b1f4d1f56f6cf0143b74d8ee6484
|
F src/pcache.c 588cc3c5ccaaadde689ed35ce5c5c891a1f7b1f4d1f56f6cf0143b74d8ee6484
|
||||||
@@ -800,7 +800,7 @@ F src/test_backup.c bd901e3c116c7f3b3bbbd4aae4ce87d99b400c9cbb0a9e7b4610af451d97
|
|||||||
F src/test_bestindex.c 3401bee51665cbf7f9ed2552b5795452a8b86365e4c9ece745b54155a55670c6
|
F src/test_bestindex.c 3401bee51665cbf7f9ed2552b5795452a8b86365e4c9ece745b54155a55670c6
|
||||||
F src/test_blob.c bcdf6a6c22d0bcc13c41479d63692ef413add2a4d30e1e26b9f74ab85b9fb4d5
|
F src/test_blob.c bcdf6a6c22d0bcc13c41479d63692ef413add2a4d30e1e26b9f74ab85b9fb4d5
|
||||||
F src/test_btree.c 28283787d32b8fa953eb77412ad0de2c9895260e4e5bd5a94b3c7411664f90d5
|
F src/test_btree.c 28283787d32b8fa953eb77412ad0de2c9895260e4e5bd5a94b3c7411664f90d5
|
||||||
F src/test_config.c bff5e1625c007f14a9ea4d346b6a741149b5e1f885c1c7ae69bb28a8ddade151
|
F src/test_config.c 83f1d7d66cbbd3a76ff4ae238569d7c4654e99177b976e5a895ab50ff2ed7a8a
|
||||||
F src/test_delete.c e2fe07646dff6300b48d49b2fee2fe192ed389e834dd635e3b3bac0ce0bf9f8f
|
F src/test_delete.c e2fe07646dff6300b48d49b2fee2fe192ed389e834dd635e3b3bac0ce0bf9f8f
|
||||||
F src/test_demovfs.c 3efa2adf4f21e10d95521721687d5ca047aea91fa62dd8cc22ac9e5a9c942383
|
F src/test_demovfs.c 3efa2adf4f21e10d95521721687d5ca047aea91fa62dd8cc22ac9e5a9c942383
|
||||||
F src/test_devsym.c 649434ed34d0b03fbd5a6b42df80f0f9a7e53f94dd1710aad5dd8831e91c4e86
|
F src/test_devsym.c 649434ed34d0b03fbd5a6b42df80f0f9a7e53f94dd1710aad5dd8831e91c4e86
|
||||||
@@ -1550,8 +1550,8 @@ F test/randexpr1.test eda062a97e60f9c38ae8d806b03b0ddf23d796df
|
|||||||
F test/rbu.test 168573d353cd0fd10196b87b0caa322c144ef736
|
F test/rbu.test 168573d353cd0fd10196b87b0caa322c144ef736
|
||||||
F test/rdonly.test 64e2696c322e3538df0b1ed624e21f9a23ed9ff8
|
F test/rdonly.test 64e2696c322e3538df0b1ed624e21f9a23ed9ff8
|
||||||
F test/readonly.test 69a7ccec846cad2e000b3539d56360d02f327061dc5e41f7f9a3e01f19719952
|
F test/readonly.test 69a7ccec846cad2e000b3539d56360d02f327061dc5e41f7f9a3e01f19719952
|
||||||
F test/readonly2.test 45040ad5d1c84b2b6e36c972721b3b5f51289867baae8516178c77c647bc0d13
|
F test/readonly2.test 4f4c451adf06e314c3eeed5c5e01e5df8fa10fb3cd5f537a77a48ef50ed97b84
|
||||||
F test/readonlyfault.test a96653369f6c2912ccf9d18a43fe82dcb8b19bdbb3e9871ed76325ebea755fd1
|
F test/readonlyfault.test 2b9c98ed3ac47e3f3cb00db3850b4d7fc7c857be1502a7b74985fecf50837b1e
|
||||||
F test/recover.test a163a156ea9f2beea63fa83c4dcd8dea6e57b8a569fc647155e3d2754eaac1b5
|
F test/recover.test a163a156ea9f2beea63fa83c4dcd8dea6e57b8a569fc647155e3d2754eaac1b5
|
||||||
F test/regexp1.test 8f2a8bc1569666e29a4cee6c1a666cd224eb6d50e2470d1dc1df995170f3e0f1
|
F test/regexp1.test 8f2a8bc1569666e29a4cee6c1a666cd224eb6d50e2470d1dc1df995170f3e0f1
|
||||||
F test/regexp2.test 55ed41da802b0e284ac7e2fe944be3948f93ff25abbca0361a609acfed1368b5
|
F test/regexp2.test 55ed41da802b0e284ac7e2fe944be3948f93ff25abbca0361a609acfed1368b5
|
||||||
@@ -2200,8 +2200,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350
|
|||||||
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
|
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
|
||||||
F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139
|
F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139
|
||||||
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
|
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
|
||||||
P 85b5ed0253a84791dc263fa9fc672e340f223d785005e915e675c01054f90e0c 47157dcf9ec6b52b37578bcd5dc5ace8c36e62c8ca2625c94252c15db784b115
|
P 403e01b03c31349425fa2831285b5e8e2665d5779548b4ce581cbd781c4c61d9
|
||||||
R df31c3e6f1a10e7e6597644d89acb06d
|
R 71b15b831df2ffd1de74e20e698836da
|
||||||
U dan
|
U dan
|
||||||
Z 3099c79c517e8a8194527164f3707392
|
Z e413f4c8a6f0450a7402fd29f4aa9d38
|
||||||
# Remove this line to create a well-formed Fossil manifest.
|
# Remove this line to create a well-formed Fossil manifest.
|
||||||
|
@@ -1 +1 @@
|
|||||||
403e01b03c31349425fa2831285b5e8e2665d5779548b4ce581cbd781c4c61d9
|
21ed4e78863f2622d756d2f5e0e951f3c4a992913cd1e459b2366cb5bab0153c
|
||||||
|
13
src/pager.c
13
src/pager.c
@@ -5081,6 +5081,7 @@ sqlite3_file *sqlite3_database_file_object(const char *zName){
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef SQLITE_ENABLE_READONLY_WALJOURNAL
|
||||||
/*
|
/*
|
||||||
** This is used by a read-only database connection in cases where there
|
** This is used by a read-only database connection in cases where there
|
||||||
** is a hot journal which cannot be rolled back, but the hot journal was
|
** is a hot journal which cannot be rolled back, but the hot journal was
|
||||||
@@ -5106,6 +5107,7 @@ static int getPageOneNoWal(
|
|||||||
setGetterMethod(pPager);
|
setGetterMethod(pPager);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
#endif /* SQLITE_ENABLE_READONLY_WALJOURNAL */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** This function is called after a potentially hot journal has been opened
|
** This function is called after a potentially hot journal has been opened
|
||||||
@@ -5131,7 +5133,9 @@ static int checkHotJournal(Pager *pPager, int *pbHot){
|
|||||||
if( rc==SQLITE_OK ){
|
if( rc==SQLITE_OK ){
|
||||||
if( aHdr[0]==0 ){
|
if( aHdr[0]==0 ){
|
||||||
*pbHot = 0;
|
*pbHot = 0;
|
||||||
}else if( pPager->readOnly ){
|
}
|
||||||
|
#ifdef SQLITE_ENABLE_READONLY_WALJOURNAL
|
||||||
|
else if( pPager->readOnly ){
|
||||||
u32 nPg = sqlite3Get4byte(&aHdr[8]);
|
u32 nPg = sqlite3Get4byte(&aHdr[8]);
|
||||||
u32 off = sqlite3Get4byte(&aHdr[20]);
|
u32 off = sqlite3Get4byte(&aHdr[20]);
|
||||||
u32 pgsz = sqlite3Get4byte(&aHdr[24]);
|
u32 pgsz = sqlite3Get4byte(&aHdr[24]);
|
||||||
@@ -5163,6 +5167,7 @@ static int checkHotJournal(Pager *pPager, int *pbHot){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif /* SQLITE_ENABLE_READONLY_WALJOURNAL */
|
||||||
}
|
}
|
||||||
if( rc==SQLITE_IOERR_SHORT_READ ){
|
if( rc==SQLITE_IOERR_SHORT_READ ){
|
||||||
rc = SQLITE_OK;
|
rc = SQLITE_OK;
|
||||||
@@ -5333,7 +5338,6 @@ int sqlite3PagerSharedLock(Pager *pPager){
|
|||||||
|
|
||||||
assert( !MEMDB );
|
assert( !MEMDB );
|
||||||
assert( pPager->tempFile==0 || pPager->eLock==EXCLUSIVE_LOCK );
|
assert( pPager->tempFile==0 || pPager->eLock==EXCLUSIVE_LOCK );
|
||||||
assert( pPager->xGet!=getPageOneNoWal );
|
|
||||||
|
|
||||||
rc = pager_wait_on_lock(pPager, SHARED_LOCK);
|
rc = pager_wait_on_lock(pPager, SHARED_LOCK);
|
||||||
if( rc!=SQLITE_OK ){
|
if( rc!=SQLITE_OK ){
|
||||||
@@ -5519,8 +5523,10 @@ int sqlite3PagerSharedLock(Pager *pPager){
|
|||||||
assert( !MEMDB );
|
assert( !MEMDB );
|
||||||
pager_unlock(pPager);
|
pager_unlock(pPager);
|
||||||
assert( pPager->eState==PAGER_OPEN );
|
assert( pPager->eState==PAGER_OPEN );
|
||||||
|
#ifdef SQLITE_ENABLE_READONLY_WALJOURNAL
|
||||||
testcase( pPager->xGet==getPageOneNoWal );
|
testcase( pPager->xGet==getPageOneNoWal );
|
||||||
setGetterMethod(pPager);
|
setGetterMethod(pPager);
|
||||||
|
#endif /* SQLITE_ENABLE_READONLY_WALJOURNAL */
|
||||||
}else{
|
}else{
|
||||||
pPager->eState = PAGER_READER;
|
pPager->eState = PAGER_READER;
|
||||||
pPager->hasHeldSharedLock = 1;
|
pPager->hasHeldSharedLock = 1;
|
||||||
@@ -7489,11 +7495,14 @@ int sqlite3PagerSetJournalMode(Pager *pPager, int eMode){
|
|||||||
if( state==PAGER_OPEN ){
|
if( state==PAGER_OPEN ){
|
||||||
rc = sqlite3PagerSharedLock(pPager);
|
rc = sqlite3PagerSharedLock(pPager);
|
||||||
|
|
||||||
|
#ifdef SQLITE_ENABLE_READONLY_WALJOURNAL
|
||||||
/* If this is a read-only connection, and there is a hot-journal
|
/* If this is a read-only connection, and there is a hot-journal
|
||||||
** created by "PRAGMA journal_mode = wal" in the file-system, then
|
** created by "PRAGMA journal_mode = wal" in the file-system, then
|
||||||
** the Pager.xGet method may have been set to getPageOneNoWal. Call
|
** the Pager.xGet method may have been set to getPageOneNoWal. Call
|
||||||
** setGetterMethod() here to ensure it is set properly. */
|
** setGetterMethod() here to ensure it is set properly. */
|
||||||
|
testcase( pPager->xGet==getPageOneNoWal );
|
||||||
setGetterMethod(pPager);
|
setGetterMethod(pPager);
|
||||||
|
#endif /* SQLITE_ENABLE_READONLY_WALJOURNAL */
|
||||||
}
|
}
|
||||||
if( pPager->eState==PAGER_READER ){
|
if( pPager->eState==PAGER_READER ){
|
||||||
assert( rc==SQLITE_OK );
|
assert( rc==SQLITE_OK );
|
||||||
|
@@ -563,6 +563,14 @@ Tcl_SetVar2(interp, "sqlite_options", "mergesort", "1", TCL_GLOBAL_ONLY);
|
|||||||
Tcl_SetVar2(interp, "sqlite_options", "progress", "1", TCL_GLOBAL_ONLY);
|
Tcl_SetVar2(interp, "sqlite_options", "progress", "1", TCL_GLOBAL_ONLY);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef SQLITE_ENABLE_READONLY_WALJOURNAL
|
||||||
|
Tcl_SetVar2(
|
||||||
|
interp, "sqlite_options", "readonly_waljournal", "1", TCL_GLOBAL_ONLY);
|
||||||
|
#else
|
||||||
|
Tcl_SetVar2(
|
||||||
|
interp, "sqlite_options", "readonly_waljournal", "0", TCL_GLOBAL_ONLY);
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef SQLITE_OMIT_REINDEX
|
#ifdef SQLITE_OMIT_REINDEX
|
||||||
Tcl_SetVar2(interp, "sqlite_options", "reindex", "0", TCL_GLOBAL_ONLY);
|
Tcl_SetVar2(interp, "sqlite_options", "reindex", "0", TCL_GLOBAL_ONLY);
|
||||||
#else
|
#else
|
||||||
|
@@ -15,6 +15,10 @@
|
|||||||
|
|
||||||
set testdir [file dirname $argv0]
|
set testdir [file dirname $argv0]
|
||||||
source $testdir/tester.tcl
|
source $testdir/tester.tcl
|
||||||
|
ifcapable !readonly_waljournal {
|
||||||
|
finish_test
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
set ::testprefix readonly2
|
set ::testprefix readonly2
|
||||||
|
|
||||||
|
@@ -12,6 +12,10 @@
|
|||||||
|
|
||||||
set testdir [file dirname $argv0]
|
set testdir [file dirname $argv0]
|
||||||
source $testdir/tester.tcl
|
source $testdir/tester.tcl
|
||||||
|
ifcapable !readonly_waljournal {
|
||||||
|
finish_test
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
set ::testprefix readonlyfault
|
set ::testprefix readonlyfault
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user