From: drh Date: Mon, 12 Dec 2011 20:01:12 +0000 (+0000) Subject: Backport a minimal set of changes needed to get 8+3 filenames and the X-Git-Tag: mountain-lion~8^2~41^2~5 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=73795becfe6358659b482f4ebd9a7c0358161a29;p=thirdparty%2Fsqlite.git Backport a minimal set of changes needed to get 8+3 filenames and the multiplexor shim playing well together. FossilOrigin-Name: c4e2ce486217c96373836bfe641f46abf891799a --- diff --git a/manifest b/manifest index aa26307489..7bfa9b8297 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Improvements\sto\sthe\sdocumentation\sof\sthe\ssqlite3_db_filename()\sinterface. -D 2011-11-17T11:49:58.484 +C Backport\sa\sminimal\sset\sof\schanges\sneeded\sto\sget\s8+3\sfilenames\sand\sthe\nmultiplexor\sshim\splaying\swell\stogether. +D 2011-12-12T20:01:12.623 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in 5b4a3e12a850b021547e43daf886b25133b44c07 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@ -166,7 +166,7 @@ F src/os.c 28bbdab2170dfce84d86c45456a18eab1d0f99a9 F src/os.h 9dbed8c2b9c1f2f2ebabc09e49829d4777c26bf9 F src/os_common.h 92815ed65f805560b66166e3583470ff94478f04 F src/os_os2.c 4a75888ba3dfc820ad5e8177025972d74d7f2440 -F src/os_unix.c 4fbb91726165e105c1679a2660f49a3f4c376e4f +F src/os_unix.c 02b3794c008bab490689399cca9a8b81c1df6eaa F src/os_win.c a22b88d2c088c09a678a471abafa8d60dbf56803 F src/pager.c d981f3bfcc0e4460537d983899620700ccf8f539 F src/pager.h 5cd760857707529b403837d813d86b68938d6183 @@ -181,7 +181,7 @@ F src/random.c cd4a67b3953b88019f8cd4ccd81394a8ddfaba50 F src/resolve.c 365ab1c870e38596d6869e76fb544fe6e4ffc809 F src/rowset.c 69afa95a97c524ba6faf3805e717b5b7ae85a697 F src/select.c 80f3ac44a8514b1d107b80f5df4a424ae059d2b6 -F src/shell.c 29812a900a780eb0f835c4bc65e216272689def8 +F src/shell.c 183c4b6a84e82c768fefcc554a1256e89fc8feba F src/sqlite.h.in 19706a000717456c4963bb0f96262581436ffb5a F src/sqlite3ext.h 6904f4aadf976f95241311fbffb00823075d9477 F src/sqliteInt.h f412e020e1009163c74be56eaac1bf7f6c0a4515 @@ -214,7 +214,7 @@ F src/test_intarray.h 489edb9068bb926583445cb02589344961054207 F src/test_journal.c 03313c693cca72959dcaaf79f8d76f21c01e19ff F src/test_loadext.c df586c27176e3c2cb2e099c78da67bf14379a56e F src/test_malloc.c 8d416f29ad8573f32601f6056c9d2b17472e9ad5 -F src/test_multiplex.c 3fc368022c46fe44ec22c5e1ed727223a54a6a1d +F src/test_multiplex.c 7dcf429b53f5f5ef22bba7987bea61234a0c7418 F src/test_multiplex.h e99c571bc4968b7a9363b661481f3934bfead61d F src/test_mutex.c a6bd7b9cf6e19d989e31392b06ac8d189f0d573e F src/test_onefile.c 40cf9e212a377a6511469384a64b01e6e34b2eec @@ -976,7 +976,10 @@ F tool/tostr.awk e75472c2f98dd76e06b8c9c1367f4ab07e122d06 F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f F tool/warnings-clang.sh 9f406d66e750e8ac031c63a9ef3248aaa347ef2a F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381 -P 4d3cf9e1d8ac356db5a708913f614e42a6a56b94 -R daa1b38027d3a49fc0c491c85b1f5a39 +P 1c45b2a0c055f6fc5da9d00ae2e9171099d904d4 +R d417f9c46d07ddef314e54db481adadc +T *branch * nx-devkit +T *sym-nx-devkit * +T -sym-trunk * U drh -Z f65f1ce31dbae92bc408999ba5cab4af +Z 6224f10399d131c42f88b8ba9dbbfa5d diff --git a/manifest.uuid b/manifest.uuid index 261f1cf6ad..b0605ecc85 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -1c45b2a0c055f6fc5da9d00ae2e9171099d904d4 \ No newline at end of file +c4e2ce486217c96373836bfe641f46abf891799a \ No newline at end of file diff --git a/src/os_unix.c b/src/os_unix.c index 51d144906a..ecd5bf2448 100644 --- a/src/os_unix.c +++ b/src/os_unix.c @@ -4899,7 +4899,7 @@ static int findCreateFileMode( */ nDb = sqlite3Strlen30(zPath) - 1; #ifdef SQLITE_ENABLE_8_3_NAMES - while( nDb>0 && !sqlite3Isalnum(zPath[nDb]) ) nDb--; + while( nDb>0 && sqlite3Isalnum(zPath[nDb]) ) nDb--; if( nDb==0 || zPath[nDb]!='-' ) return SQLITE_OK; #else while( zPath[nDb]!='-' ){ diff --git a/src/shell.c b/src/shell.c index e33a0687b4..07b1b60b41 100644 --- a/src/shell.c +++ b/src/shell.c @@ -2335,7 +2335,7 @@ static int do_meta_command(char *zLine, struct callback_data *p){ }else if( c=='v' && strncmp(azArg[0], "version", n)==0 ){ - printf("SQLite %s %s\n", + printf("SQLite %s %s\n" /*extra-version-info*/, sqlite3_libversion(), sqlite3_sourceid()); }else @@ -2932,7 +2932,7 @@ int main(int argc, char **argv){ char *zHistory = 0; int nHistory; printf( - "SQLite version %s %.19s\n" + "SQLite version %s %.19s\n" /*extra-version-info*/ "Enter \".help\" for instructions\n" "Enter SQL statements terminated with a \";\"\n", sqlite3_libversion(), sqlite3_sourceid() diff --git a/src/test_multiplex.c b/src/test_multiplex.c index 5d29607acb..091f2395fd 100644 --- a/src/test_multiplex.c +++ b/src/test_multiplex.c @@ -96,26 +96,16 @@ # define SQLITE_MULTIPLEX_CHUNK_SIZE 2147418112 #endif -/* Default limit on number of chunks. Care should be taken -** so that values for chunks numbers fit in the SQLITE_MULTIPLEX_EXT_FMT -** format specifier. It may be changed by calling -** the xFileControl() interface. +/* This used to be the default limit on number of chunks, but +** it is no longer enforced. There is currently no limit to the +** number of chunks. +** +** May be changed by calling the xFileControl() interface. */ #ifndef SQLITE_MULTIPLEX_MAX_CHUNKS -# define SQLITE_MULTIPLEX_MAX_CHUNKS 32 +# define SQLITE_MULTIPLEX_MAX_CHUNKS 12 #endif -/* If SQLITE_MULTIPLEX_EXT_OVWR is defined, the -** last SQLITE_MULTIPLEX_EXT_SZ characters of the -** filename will be overwritten, otherwise, the -** multiplex extension is simply appended to the filename. -** Ex. (undefined) test.db -> test.db01 -** (defined) test.db -> test.01 -** Chunk 0 does not have a modified extension. -*/ -#define SQLITE_MULTIPLEX_EXT_FMT "%02d" -#define SQLITE_MULTIPLEX_EXT_SZ 2 - /************************ Object Definitions ******************************/ /* Forward declaration of all object types */ @@ -304,20 +294,25 @@ static int multiplexSubFilename(multiplexGroup *pGroup, int iChunk){ if( pGroup->aReal[iChunk].z==0 ){ char *z; int n = pGroup->nName; - pGroup->aReal[iChunk].z = z = sqlite3_malloc( n+3 ); + pGroup->aReal[iChunk].z = z = sqlite3_malloc( n+4 ); if( z==0 ){ return SQLITE_NOMEM; } memcpy(z, pGroup->zName, n+1); if( iChunk>0 ){ #ifdef SQLITE_ENABLE_8_3_NAMES - if( n>3 && z[n-3]=='.' ){ - n--; - }else if( n>4 && z[n-4]=='.' ){ - n -= 2; + int i; + for(i=n-1; i>0 && i>=n-4 && z[i]!='.'; i--){} + if( i>=n-4 ) n = i+1; + if( pGroup->flags & (SQLITE_OPEN_MAIN_JOURNAL|SQLITE_OPEN_TEMP_JOURNAL) ){ + /* The extensions on overflow files for main databases are 001, 002, + ** 003 and so forth. To avoid name collisions, add 100 to the + ** extensions of journal files so that they are 101, 102, 103, .... + */ + iChunk += 100; } #endif - sqlite3_snprintf(3,&z[n],"%02d",iChunk); + sqlite3_snprintf(4,&z[n],"%03d",iChunk); } } return SQLITE_OK; @@ -754,7 +749,7 @@ static int multiplexTruncate(sqlite3_file *pConn, sqlite3_int64 size){ }else{ rc = pSubOpen->pMethods->xTruncate(pSubOpen, size); } - }else{ + }else if( (pGroup->flags & SQLITE_OPEN_MAIN_DB)==0 ){ int rc2; int i; sqlite3_file *pSubOpen; @@ -819,8 +814,13 @@ static int multiplexFileSize(sqlite3_file *pConn, sqlite3_int64 *pSize){ int exists = 0; rc = multiplexSubFilename(pGroup, i); if( rc ) break; - rc2 = pOrigVfs->xAccess(pOrigVfs, pGroup->aReal[i].z, - SQLITE_ACCESS_EXISTS, &exists); + if( pGroup->flags & SQLITE_OPEN_DELETEONCLOSE ){ + exists = pGroup->nReal>=i && pGroup->aReal[i].p!=0; + rc2 = SQLITE_OK; + }else{ + rc2 = pOrigVfs->xAccess(pOrigVfs, pGroup->aReal[i].z, + SQLITE_ACCESS_EXISTS, &exists); + } if( rc2==SQLITE_OK && exists){ /* if it exists, open it */ pSubOpen = multiplexSubOpen(pGroup, i, &rc, NULL);