mirror of
https://github.com/sqlite/sqlite.git
synced 2025-08-05 15:55:57 +03:00
Add the immutable=TRUE query parameter and SQLITE_IOCAP_IMMUTABLE, either
of which prevents locking of the database and omits tests for existance of journal files. FossilOrigin-Name: 71f152c85d79ebd9ca48bc9c4c71fc4debaf2437
This commit is contained in:
14
manifest
14
manifest
@@ -1,5 +1,5 @@
|
|||||||
C Merge\sin\sall\srecent\schanges\sand\senhancements\sfrom\strunk.
|
C Add\sthe\simmutable=TRUE\squery\sparameter\sand\sSQLITE_IOCAP_IMMUTABLE,\seither\nof\swhich\sprevents\slocking\sof\sthe\sdatabase\sand\somits\stests\sfor\sexistance\nof\sjournal\sfiles.
|
||||||
D 2014-04-30T20:32:41.139
|
D 2014-05-01T01:13:08.624
|
||||||
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
|
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
|
||||||
F Makefile.in 2ef13430cd359f7b361bb863504e227b25cc7f81
|
F Makefile.in 2ef13430cd359f7b361bb863504e227b25cc7f81
|
||||||
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
|
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
|
||||||
@@ -206,7 +206,7 @@ F src/os.h 4a46270a64e9193af4a0aaa3bc2c66dc07c29b3f
|
|||||||
F src/os_common.h 92815ed65f805560b66166e3583470ff94478f04
|
F src/os_common.h 92815ed65f805560b66166e3583470ff94478f04
|
||||||
F src/os_unix.c ae4b5240af4619d711301d7992396e182585269f
|
F src/os_unix.c ae4b5240af4619d711301d7992396e182585269f
|
||||||
F src/os_win.c 1662c40d22be162698a31725e836eede09e841ed
|
F src/os_win.c 1662c40d22be162698a31725e836eede09e841ed
|
||||||
F src/pager.c ab62a24218d87dda1be641f6c5ad291bff78fd94
|
F src/pager.c 5c296b584df0d675e2377196472ff8a993ad079d
|
||||||
F src/pager.h ffd5607f7b3e4590b415b007a4382f693334d428
|
F src/pager.h ffd5607f7b3e4590b415b007a4382f693334d428
|
||||||
F src/parse.y 22d6a074e5f5a7258947a1dc55a9bf946b765dd0
|
F src/parse.y 22d6a074e5f5a7258947a1dc55a9bf946b765dd0
|
||||||
F src/pcache.c d8eafac28290d4bb80332005435db44991d07fc2
|
F src/pcache.c d8eafac28290d4bb80332005435db44991d07fc2
|
||||||
@@ -220,7 +220,7 @@ F src/resolve.c 273d5f47c4e2c05b2d3d2bffeda939551ab59e66
|
|||||||
F src/rowset.c a9c9aae3234b44a6d7c6f5a3cadf90dce1e627be
|
F src/rowset.c a9c9aae3234b44a6d7c6f5a3cadf90dce1e627be
|
||||||
F src/select.c ed459f7f478a1e533d19c4b953693b3ffa2efd15
|
F src/select.c ed459f7f478a1e533d19c4b953693b3ffa2efd15
|
||||||
F src/shell.c 2afe7a7154e97be0c74c5feacf09626bda8493be
|
F src/shell.c 2afe7a7154e97be0c74c5feacf09626bda8493be
|
||||||
F src/sqlite.h.in bde98816e1ba0c9ffef50afe7b32f4e5a8f54fe0
|
F src/sqlite.h.in ad2bbeb6a41c228f6a9dbf24df62e4d3eff79ee5
|
||||||
F src/sqlite3.rc 11094cc6a157a028b301a9f06b3d03089ea37c3e
|
F src/sqlite3.rc 11094cc6a157a028b301a9f06b3d03089ea37c3e
|
||||||
F src/sqlite3ext.h 886f5a34de171002ad46fae8c36a7d8051c190fc
|
F src/sqlite3ext.h 886f5a34de171002ad46fae8c36a7d8051c190fc
|
||||||
F src/sqliteInt.h b2947801eccefd7ba3e5f14e1353289351a83cf3
|
F src/sqliteInt.h b2947801eccefd7ba3e5f14e1353289351a83cf3
|
||||||
@@ -1166,7 +1166,7 @@ F tool/vdbe_profile.tcl 67746953071a9f8f2f668b73fe899074e2c6d8c1
|
|||||||
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
|
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
|
||||||
F tool/warnings.sh d1a6de74685f360ab718efda6265994b99bbea01
|
F tool/warnings.sh d1a6de74685f360ab718efda6265994b99bbea01
|
||||||
F tool/win/sqlite.vsix 030f3eeaf2cb811a3692ab9c14d021a75ce41fff
|
F tool/win/sqlite.vsix 030f3eeaf2cb811a3692ab9c14d021a75ce41fff
|
||||||
P ffceacf61905dc3553978ba5f68e133947eca2fa 9bbca48b42e4fe16f2188e18dc736da30a96435c
|
P 84243f844417f888ab731841f7dbf95749f6e034
|
||||||
R de599c68866896adcd34d6a6ff4634e0
|
R 5c0369593ee1e8996babaee6957b771b
|
||||||
U drh
|
U drh
|
||||||
Z adbf9541c1c60ea64244c304cb7bb6d4
|
Z 54ea9e774afb5e969c7607c1ec92b0eb
|
||||||
|
@@ -1 +1 @@
|
|||||||
84243f844417f888ab731841f7dbf95749f6e034
|
71f152c85d79ebd9ca48bc9c4c71fc4debaf2437
|
51
src/pager.c
51
src/pager.c
@@ -4674,30 +4674,37 @@ int sqlite3PagerOpen(
|
|||||||
** + The value returned by sqlite3OsSectorSize()
|
** + The value returned by sqlite3OsSectorSize()
|
||||||
** + The largest page size that can be written atomically.
|
** + The largest page size that can be written atomically.
|
||||||
*/
|
*/
|
||||||
if( rc==SQLITE_OK && !readOnly ){
|
if( rc==SQLITE_OK ){
|
||||||
setSectorSize(pPager);
|
if( !readOnly ){
|
||||||
assert(SQLITE_DEFAULT_PAGE_SIZE<=SQLITE_MAX_DEFAULT_PAGE_SIZE);
|
|
||||||
if( szPageDflt<pPager->sectorSize ){
|
|
||||||
if( pPager->sectorSize>SQLITE_MAX_DEFAULT_PAGE_SIZE ){
|
|
||||||
szPageDflt = SQLITE_MAX_DEFAULT_PAGE_SIZE;
|
|
||||||
}else{
|
|
||||||
szPageDflt = (u32)pPager->sectorSize;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#ifdef SQLITE_ENABLE_ATOMIC_WRITE
|
|
||||||
{
|
|
||||||
int iDc = sqlite3OsDeviceCharacteristics(pPager->fd);
|
int iDc = sqlite3OsDeviceCharacteristics(pPager->fd);
|
||||||
int ii;
|
setSectorSize(pPager);
|
||||||
assert(SQLITE_IOCAP_ATOMIC512==(512>>8));
|
assert(SQLITE_DEFAULT_PAGE_SIZE<=SQLITE_MAX_DEFAULT_PAGE_SIZE);
|
||||||
assert(SQLITE_IOCAP_ATOMIC64K==(65536>>8));
|
if( szPageDflt<pPager->sectorSize ){
|
||||||
assert(SQLITE_MAX_DEFAULT_PAGE_SIZE<=65536);
|
if( pPager->sectorSize>SQLITE_MAX_DEFAULT_PAGE_SIZE ){
|
||||||
for(ii=szPageDflt; ii<=SQLITE_MAX_DEFAULT_PAGE_SIZE; ii=ii*2){
|
szPageDflt = SQLITE_MAX_DEFAULT_PAGE_SIZE;
|
||||||
if( iDc&(SQLITE_IOCAP_ATOMIC|(ii>>8)) ){
|
}else{
|
||||||
szPageDflt = ii;
|
szPageDflt = (u32)pPager->sectorSize;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#ifdef SQLITE_ENABLE_ATOMIC_WRITE
|
||||||
|
{
|
||||||
|
int ii;
|
||||||
|
assert(SQLITE_IOCAP_ATOMIC512==(512>>8));
|
||||||
|
assert(SQLITE_IOCAP_ATOMIC64K==(65536>>8));
|
||||||
|
assert(SQLITE_MAX_DEFAULT_PAGE_SIZE<=65536);
|
||||||
|
for(ii=szPageDflt; ii<=SQLITE_MAX_DEFAULT_PAGE_SIZE; ii=ii*2){
|
||||||
|
if( iDc&(SQLITE_IOCAP_ATOMIC|(ii>>8)) ){
|
||||||
|
szPageDflt = ii;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
if( (iDc & SQLITE_IOCAP_IMMUTABLE)!=0
|
||||||
|
|| sqlite3_uri_boolean(zFilename, "immutable", 0) ){
|
||||||
|
vfsFlags |= SQLITE_OPEN_READONLY;
|
||||||
|
goto act_like_temp_file;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
/* If a temporary file is requested, it is not opened immediately.
|
/* If a temporary file is requested, it is not opened immediately.
|
||||||
@@ -4708,6 +4715,7 @@ int sqlite3PagerOpen(
|
|||||||
** database is the same as a temp-file that is never written out to
|
** database is the same as a temp-file that is never written out to
|
||||||
** disk and uses an in-memory rollback journal.
|
** disk and uses an in-memory rollback journal.
|
||||||
*/
|
*/
|
||||||
|
act_like_temp_file:
|
||||||
tempFile = 1;
|
tempFile = 1;
|
||||||
pPager->eState = PAGER_READER;
|
pPager->eState = PAGER_READER;
|
||||||
pPager->eLock = EXCLUSIVE_LOCK;
|
pPager->eLock = EXCLUSIVE_LOCK;
|
||||||
@@ -4751,9 +4759,6 @@ int sqlite3PagerOpen(
|
|||||||
/* pPager->nPage = 0; */
|
/* pPager->nPage = 0; */
|
||||||
pPager->mxPgno = SQLITE_MAX_PAGE_COUNT;
|
pPager->mxPgno = SQLITE_MAX_PAGE_COUNT;
|
||||||
/* pPager->state = PAGER_UNLOCK; */
|
/* pPager->state = PAGER_UNLOCK; */
|
||||||
#if 0
|
|
||||||
assert( pPager->state == (tempFile ? PAGER_EXCLUSIVE : PAGER_UNLOCK) );
|
|
||||||
#endif
|
|
||||||
/* pPager->errMask = 0; */
|
/* pPager->errMask = 0; */
|
||||||
pPager->tempFile = (u8)tempFile;
|
pPager->tempFile = (u8)tempFile;
|
||||||
assert( tempFile==PAGER_LOCKINGMODE_NORMAL
|
assert( tempFile==PAGER_LOCKINGMODE_NORMAL
|
||||||
|
@@ -555,7 +555,10 @@ int sqlite3_exec(
|
|||||||
** file that were written at the application level might have changed
|
** file that were written at the application level might have changed
|
||||||
** and that adjacent bytes, even bytes within the same sector are
|
** and that adjacent bytes, even bytes within the same sector are
|
||||||
** guaranteed to be unchanged. The SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN
|
** guaranteed to be unchanged. The SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN
|
||||||
** flag indicate that a file cannot be deleted when open.
|
** flag indicate that a file cannot be deleted when open. The
|
||||||
|
** SQLITE_IOCAP_IMMUTABLE flag indicates that the file is on
|
||||||
|
** read-only media and cannot be changed even by processes with
|
||||||
|
** elevated privileges.
|
||||||
*/
|
*/
|
||||||
#define SQLITE_IOCAP_ATOMIC 0x00000001
|
#define SQLITE_IOCAP_ATOMIC 0x00000001
|
||||||
#define SQLITE_IOCAP_ATOMIC512 0x00000002
|
#define SQLITE_IOCAP_ATOMIC512 0x00000002
|
||||||
@@ -570,6 +573,7 @@ int sqlite3_exec(
|
|||||||
#define SQLITE_IOCAP_SEQUENTIAL 0x00000400
|
#define SQLITE_IOCAP_SEQUENTIAL 0x00000400
|
||||||
#define SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN 0x00000800
|
#define SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN 0x00000800
|
||||||
#define SQLITE_IOCAP_POWERSAFE_OVERWRITE 0x00001000
|
#define SQLITE_IOCAP_POWERSAFE_OVERWRITE 0x00001000
|
||||||
|
#define SQLITE_IOCAP_IMMUTABLE 0x00002000
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** CAPI3REF: File Locking Levels
|
** CAPI3REF: File Locking Levels
|
||||||
|
Reference in New Issue
Block a user