From: drh Date: Wed, 9 Sep 2009 14:17:52 +0000 (+0000) Subject: Added SQLITE_OPEN_SHAREDCACHE and SQLITE_OPEN_PRIVATECACHE flags as X-Git-Tag: fts3-refactor~202 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f1f12688d8c6baec7dcecacf15be2e2e59afa87e;p=thirdparty%2Fsqlite.git Added SQLITE_OPEN_SHAREDCACHE and SQLITE_OPEN_PRIVATECACHE flags as possibilities to sqlite3_open_v2(), to override the global shared cache mode setting. Ticket [9fd0bc36639c15] FossilOrigin-Name: f509eb8b488bb39deda4ca88f66ed40c6784af02 --- diff --git a/manifest b/manifest index 9151017ff7..7c268e019b 100644 --- a/manifest +++ b/manifest @@ -1,8 +1,8 @@ -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 -C Increase\sthe\ssize\sof\sbitvec\sobjects\sto\s1024\sbytes\son\s64-bit\ssystems. -D 2009-09-09T12:41:18 +C Added\sSQLITE_OPEN_SHAREDCACHE\sand\sSQLITE_OPEN_PRIVATECACHE\sflags\sas\npossibilities\sto\ssqlite3_open_v2(),\sto\soverride\sthe\sglobal\sshared\ncache\smode\ssetting.\s\sTicket\s[9fd0bc36639c15] +D 2009-09-09T14:17:53 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0 F Makefile.in 73ddeec9dd10b85876c5c2ce1fdce627e1dcc7f8 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654 @@ -109,7 +109,7 @@ F src/auth.c d6a88bf8e81e6a079ccb8881002b327e42ec46b9 F src/backup.c 6f1c2d9862c8a3feb7739dfcca02c1f5352e37f3 F src/bitvec.c ed215b95734045e58358c3b3e16448f8fe6a235a F src/btmutex.c 0f43a75bb5b8147b386e8e1c3e71ba734e3863b7 -F src/btree.c 873a82706e07604a638e02e12617983df8e8070a +F src/btree.c 9c425425784c5d569bc0309c22251698ba906451 F src/btree.h 577448a890c2ab9b21e6ab74f073526184bceebe F src/btreeInt.h 1c86297e69380f6577e7ae67452597dd8d5c2705 F src/build.c 5269733241f459705189aa39f4eacf18b10d7661 @@ -129,7 +129,7 @@ F src/journal.c e00df0c0da8413ab6e1bb7d7cab5665d4a9000d0 F src/legacy.c 303b4ffcf1ae652fcf5ef635846c563c254564f6 F src/lempar.c 0c4d1ab0a5ef2b0381eb81a732c54f68f27a574d F src/loadext.c 0e88a335665db0b2fb4cece3e49dcb65d832635a -F src/main.c e33c4d17cc0a398847f5c9926ccdfe7e66605b87 +F src/main.c 482a5a4a6f22d04c03deefeeae5c49c2f06a5d15 F src/malloc.c b1725183bcc4ce2e569f1b65da844dc3e4c7a643 F src/mem0.c f2f84062d1f35814d6535c9f9e33de3bfb3b132c F src/mem1.c e6d5c23941288df8191b8a98c28e3f57771e2270 @@ -144,7 +144,7 @@ F src/mutex_os2.c 6b5a74f812082a8483c3df05b47bbaac2424b9a0 F src/mutex_unix.c aff26c77f698b552becfedfa677ad1036c42d790 F src/mutex_w32.c b2c1481ee93b0ac7a8fa5346570fd173b6763fdb F src/notify.c 0127121816d8a861deb0dfd111b495346bf233db -F src/os.c 9fea283e336ee31caa4654d6cb05a129a1c42d2f +F src/os.c 8d62d8d98ad7909cb0dd294c1e5f3835c887ccb6 F src/os.h 00a1334a4eecee7f7bef79ac606b88d325119f21 F src/os_common.h 8c61457df58f1a4bd5f5adc3e90e01b37bf7afbc F src/os_os2.c bed77dc26e3a95ce4a204936b9a1ca6fe612fcc5 @@ -164,7 +164,7 @@ F src/resolve.c 941843301f6fda6c6350839c6955a172441a0782 F src/rowset.c c64dafba1f9fd876836c8db8682966b9d197eb1f F src/select.c a7a075456d4e640ffd7d0a33202d306c69c88f72 F src/shell.c db2643650b9268df89a4bedca3f1c6d9e786f1bb -F src/sqlite.h.in e5949b46f9a05aadde22848f92fae5c9ba87ee0e +F src/sqlite.h.in 5af8181f815831a8672c3834c60e6b4418448bcc F src/sqlite3ext.h 1db7d63ab5de4b3e6b83dd03d1a4e64fef6d2a17 F src/sqliteInt.h 66914c7a4a8ad427dc3705e13df95763003ea8fb F src/sqliteLimit.h be44f7f46c14bb4c21870074b1e6f1ac0abd6701 @@ -753,14 +753,14 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f -P 135d656a20a2a450955ed9ec57d9637cf31493c6 -R f91172640a09b757977e441541b57ec0 +P f1272b90f6078d301ab05592593e9415f2b2b90b +R 30f716aefa81fdbf0f2b201c3325eab7 U drh -Z 997645a8d3a88141379209cea73b2e0e +Z 679e313c9aeecd41d844d799997842b6 -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (GNU/Linux) -iD8DBQFKp6JxoxKgR168RlERAljzAJ9qUdcCxBF0PoRplZd+1q307qwxOQCgi1x0 -dP4jOO6AZZUJzlZM1fHDEUs= -=rmmB +iD8DBQFKp7kUoxKgR168RlERAqDGAKCNO6g4tKDZlhNsaEYURMls5+SB5gCgiROs +0eW6S21fZd96/lHFcfmX7eE= +=ebjX -----END PGP SIGNATURE----- diff --git a/manifest.uuid b/manifest.uuid index 3155761f73..3981b46987 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -f1272b90f6078d301ab05592593e9415f2b2b90b \ No newline at end of file +f509eb8b488bb39deda4ca88f66ed40c6784af02 \ No newline at end of file diff --git a/src/btree.c b/src/btree.c index dde289752b..a9ab445047 100644 --- a/src/btree.c +++ b/src/btree.c @@ -1694,7 +1694,7 @@ int sqlite3BtreeOpen( ** existing BtShared object that we can share with */ if( isMemdb==0 && zFilename && zFilename[0] ){ - if( sqlite3GlobalConfig.sharedCacheEnabled ){ + if( vfsFlags & SQLITE_OPEN_SHAREDCACHE ){ int nFullPathname = pVfs->mxPathname+1; char *zFullPathname = sqlite3Malloc(nFullPathname); sqlite3_mutex *mutexShared; diff --git a/src/main.c b/src/main.c index cd78961e7c..9dacf9ebd9 100644 --- a/src/main.c +++ b/src/main.c @@ -1544,6 +1544,11 @@ static int openDatabase( }else{ isThreadsafe = sqlite3GlobalConfig.bFullMutex; } + if( flags & SQLITE_OPEN_PRIVATECACHE ){ + flags &= SQLITE_OPEN_SHAREDCACHE; + }else if( sqlite3GlobalConfig.sharedCacheEnabled ){ + flags |= SQLITE_OPEN_SHAREDCACHE; + } /* Remove harmful bits from the flags parameter ** diff --git a/src/os.c b/src/os.c index 7f080ecd42..942072159e 100644 --- a/src/os.c +++ b/src/os.c @@ -114,7 +114,11 @@ int sqlite3OsOpen( ){ int rc; DO_OS_MALLOC_TEST(0); - rc = pVfs->xOpen(pVfs, zPath, pFile, flags, pFlagsOut); + /* 0x7f1f is a mask of SQLITE_OPEN_ flags that are valid to be passed + ** down into the VFS layer. Some SQLITE_OPEN_ flags (for example, + ** SQLITE_OPEN_FULLMUTEX or SQLITE_OPEN_SHAREDCACHE) are blocked before + ** reaching the VFS. */ + rc = pVfs->xOpen(pVfs, zPath, pFile, flags & 0x7f1f, pFlagsOut); assert( rc==SQLITE_OK || pFile->pMethods==0 ); return rc; } diff --git a/src/sqlite.h.in b/src/sqlite.h.in index 39cfba76e9..b5184348bc 100644 --- a/src/sqlite.h.in +++ b/src/sqlite.h.in @@ -434,6 +434,8 @@ int sqlite3_exec( #define SQLITE_OPEN_MASTER_JOURNAL 0x00004000 /* VFS only */ #define SQLITE_OPEN_NOMUTEX 0x00008000 /* Ok for sqlite3_open_v2() */ #define SQLITE_OPEN_FULLMUTEX 0x00010000 /* Ok for sqlite3_open_v2() */ +#define SQLITE_OPEN_SHAREDCACHE 0x00020000 /* Ok for sqlite3_open_v2() */ +#define SQLITE_OPEN_PRIVATECACHE 0x00040000 /* Ok for sqlite3_open_v2() */ /* ** CAPI3REF: Device Characteristics {H10240} @@ -2095,7 +2097,8 @@ void sqlite3_progress_handler(sqlite3*, int, int(*)(void*), void*); ** except that it accepts two additional parameters for additional control ** over the new database connection. The flags parameter can take one of ** the following three values, optionally combined with the -** [SQLITE_OPEN_NOMUTEX] or [SQLITE_OPEN_FULLMUTEX] flags: +** [SQLITE_OPEN_NOMUTEX], [SQLITE_OPEN_FULLMUTEX], [SQLITE_OPEN_SHAREDCACHE], +** and/or [SQLITE_OPEN_PRIVATECACHE] flags: ** **
**
[SQLITE_OPEN_READONLY]
@@ -2115,7 +2118,8 @@ void sqlite3_progress_handler(sqlite3*, int, int(*)(void*), void*); ** ** If the 3rd parameter to sqlite3_open_v2() is not one of the ** combinations shown above or one of the combinations shown above combined -** with the [SQLITE_OPEN_NOMUTEX] or [SQLITE_OPEN_FULLMUTEX] flags, +** with the [SQLITE_OPEN_NOMUTEX], [SQLITE_OPEN_FULLMUTEX], +** [SQLITE_OPEN_SHAREDCACHE] and/or [SQLITE_OPEN_SHAREDCACHE] flags, ** then the behavior is undefined. ** ** If the [SQLITE_OPEN_NOMUTEX] flag is set, then the database connection @@ -2124,6 +2128,11 @@ void sqlite3_progress_handler(sqlite3*, int, int(*)(void*), void*); ** [SQLITE_OPEN_FULLMUTEX] flag is set then the database connection opens ** in the serialized [threading mode] unless single-thread was ** previously selected at compile-time or start-time. +** The [SQLITE_OPEN_SHAREDCACHE] flag causes the database connection to be +** eligible to use [shared cache mode], regardless of whether or not shared +** cache is enabled using [sqlite3_enable_shared_cache()]. The +** [SQLITE_OPEN_PRIVATECACHE] flag causes the database connection to not +** participate in [shared cache mode] even if it is enabled. ** ** If the filename is ":memory:", then a private, temporary in-memory database ** is created for the connection. This in-memory database will vanish when