aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/shell.c14
-rw-r--r--src/test_multiplex.c21
2 files changed, 31 insertions, 4 deletions
diff --git a/src/shell.c b/src/shell.c
index a54c922e8..05272b2df 100644
--- a/src/shell.c
+++ b/src/shell.c
@@ -2632,6 +2632,9 @@ static const char zOptions[] =
#ifdef SQLITE_ENABLE_VFSTRACE
" -vfstrace enable tracing of all VFS calls\n"
#endif
+#ifdef SQLITE_ENABLE_MULTIPLEX
+ " -multiplex enable the multiplexor VFS\n"
+#endif
;
static void usage(int showDetail){
fprintf(stderr,
@@ -2733,6 +2736,11 @@ int main(int argc, char **argv){
);
vfstrace_register("trace",0,(int(*)(const char*,void*))fputs,stderr,1);
#endif
+#ifdef SQLITE_ENABLE_MULTIPLEX
+ }else if( strcmp(argv[i],"-multiplex")==0 ){
+ extern int sqlite3_multiple_initialize(const char*,int);
+ sqlite3_multiplex_initialize(0, 1);
+#endif
}else if( strcmp(argv[i],"-vfs")==0 ){
sqlite3_vfs *pVfs = sqlite3_vfs_find(argv[++i]);
if( pVfs ){
@@ -2851,8 +2859,14 @@ int main(int argc, char **argv){
i++;
}else if( strcmp(z,"-vfs")==0 ){
i++;
+#ifdef SQLITE_ENABLE_VFSTRACE
}else if( strcmp(z,"-vfstrace")==0 ){
i++;
+#endif
+#ifdef SQLITE_ENABLE_MULTIPLEX
+ }else if( strcmp(z,"-multiplex")==0 ){
+ i++;
+#endif
}else if( strcmp(z,"-help")==0 || strcmp(z, "--help")==0 ){
usage(1);
}else{
diff --git a/src/test_multiplex.c b/src/test_multiplex.c
index f709c9a99..60ccbcc35 100644
--- a/src/test_multiplex.c
+++ b/src/test_multiplex.c
@@ -45,6 +45,7 @@
#include "sqlite3.h"
#include <string.h>
#include <assert.h>
+#include <stdlib.h>
#include "test_multiplex.h"
#ifndef SQLITE_CORE
@@ -78,20 +79,26 @@
/************************ Shim Definitions ******************************/
-#define SQLITE_MULTIPLEX_VFS_NAME "multiplex"
+#ifndef SQLITE_MULTIPLEX_VFS_NAME
+# define SQLITE_MULTIPLEX_VFS_NAME "multiplex"
+#endif
/* This is the limit on the chunk size. It may be changed by calling
** the xFileControl() interface. It will be rounded up to a
-** multiple of MAX_PAGE_SIZE. We default it here to 1GB.
+** multiple of MAX_PAGE_SIZE. We default it here to 2GiB less 64KiB.
*/
-#define SQLITE_MULTIPLEX_CHUNK_SIZE (MAX_PAGE_SIZE*16384)
+#ifndef SQLITE_MULTIPLEX_CHUNK_SIZE
+# 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.
*/
-#define SQLITE_MULTIPLEX_MAX_CHUNKS 32
+#ifndef SQLITE_MULTIPLEX_MAX_CHUNKS
+# define SQLITE_MULTIPLEX_MAX_CHUNKS 32
+#endif
/* If SQLITE_MULTIPLEX_EXT_OVWR is defined, the
** last SQLITE_MULTIPLEX_EXT_SZ characters of the
@@ -431,12 +438,18 @@ static int multiplexOpen(
}
if( rc==SQLITE_OK ){
+ const char *zChunkSize;
/* assign pointers to extra space allocated */
char *p = (char *)&pGroup[1];
pMultiplexOpen->pGroup = pGroup;
memset(pGroup, 0, sz);
pGroup->bEnabled = -1;
pGroup->nChunkSize = SQLITE_MULTIPLEX_CHUNK_SIZE;
+ zChunkSize = sqlite3_uri_parameter(zName, "chunksize");
+ if( zChunkSize ){
+ int n = atoi(zChunkSize);
+ if( n>0 ) pGroup->nChunkSize = (n+0xffff)&~0xffff;
+ }
pGroup->nMaxChunks = SQLITE_MULTIPLEX_MAX_CHUNKS;
pGroup->pReal = (sqlite3_file **)p;
p += (sizeof(sqlite3_file *)*pGroup->nMaxChunks);