*/
void usage(const char *zArgv0){
fprintf(stderr,
-"Usage: %s [-step NSTEP] TARGET-DB RBU-DB\n"
+"Usage: %s ?OPTIONS? TARGET-DB RBU-DB\n"
"\n"
-" Argument RBU-DB must be an RBU database containing an update suitable for\n"
-" target database TARGET-DB. If NSTEP is set to less than or equal to zero\n"
-" (the default value), this program attempts to apply the entire update to\n"
-" the target database.\n"
+"Where options are:\n"
+"\n"
+" -step NSTEP\n"
+" -vacuum\n"
+"\n"
+" If the -vacuum switch is not present, argument RBU-DB must be an RBU\n"
+" database containing an update suitable for target database TARGET-DB.\n"
+" Or, if -vacuum is specified, then TARGET-DB is a database to vacuum using\n"
+" RBU, and RBU-DB is used as the state database for the vacuum (refer to\n"
+" API documentation for details).\n"
+"\n"
+" If NSTEP is set to less than or equal to zero (the default value), this \n"
+" program attempts to perform the entire update or vacuum operation before\n"
+" exiting\n"
"\n"
" If NSTEP is greater than zero, then a maximum of NSTEP calls are made\n"
" to sqlite3rbu_step(). If the RBU update has not been completely applied\n"
char *zErrmsg; /* Error message, if any */
sqlite3rbu *pRbu; /* RBU handle */
int nStep = 0; /* Maximum number of step() calls */
+ int bVacuum = 0;
int rc;
sqlite3_int64 nProgress = 0;
+ int nArg = argc-2;
- /* Process command line arguments. Following this block local variables
- ** zTarget, zRbu and nStep are all set. */
- if( argc==5 ){
- size_t nArg1 = strlen(argv[1]);
- if( nArg1>5 || nArg1<2 || memcmp("-step", argv[1], nArg1) ) usage(argv[0]);
- nStep = atoi(argv[2]);
- }else if( argc!=3 ){
- usage(argv[0]);
+ if( argc<3 ) usage(argv[0]);
+ for(i=1; i<nArg; i++){
+ const char *zArg = argv[i];
+ int nArg = strlen(zArg);
+ if( nArg>1 && nArg<=8 && 0==memcmp(zArg, "-vacuum", nArg) ){
+ bVacuum = 1;
+ }else if( nArg>1 && nArg<=5 && 0==memcmp(zArg, "-step", nArg) && i<nArg-1 ){
+ i++;
+ nStep = atoi(argv[i]);
+ }else{
+ usage(argv[0]);
+ }
}
+
zTarget = argv[argc-2];
zRbu = argv[argc-1];
report_default_vfs();
- /* Open an RBU handle. If nStep is less than or equal to zero, call
+ /* Open an RBU handle. A vacuum handle if -vacuum was specified, or a
+ ** regular RBU update handle otherwise. */
+ if( bVacuum ){
+ pRbu = sqlite3rbu_vacuum(zTarget, zRbu);
+ }else{
+ pRbu = sqlite3rbu_open(zTarget, zRbu, 0);
+ }
+ report_rbu_vfs(pRbu);
+
+ /* If nStep is less than or equal to zero, call
** sqlite3rbu_step() until either the RBU has been completely applied
** or an error occurs. Or, if nStep is greater than zero, call
** sqlite3rbu_step() a maximum of nStep times. */
- pRbu = sqlite3rbu_open(zTarget, zRbu, 0);
- report_rbu_vfs(pRbu);
for(i=0; (nStep<=0 || i<nStep) && sqlite3rbu_step(pRbu)==SQLITE_OK; i++);
nProgress = sqlite3rbu_progress(pRbu);
rc = sqlite3rbu_close(pRbu, &zErrmsg);
-C Changes\sso\sthat\srbu\svacuum\sworks\swith\szipvfs\sdatabases.
-D 2016-04-16T19:02:53.248
+C Add\sthe\s-vacuum\sswitch\sto\sthe\s"rbu"\sdemonstration\sprogram.
+D 2016-04-18T09:17:05.073
F Makefile.in eba680121821b8a60940a81454316f47a341487a
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
F Makefile.msc 71b8b16cf9393f68e2e2035486ca104872558836
F ext/misc/vfslog.c fe40fab5c077a40477f7e5eba994309ecac6cc95
F ext/misc/vtshim.c babb0dc2bf116029e3e7c9a618b8a1377045303e
F ext/misc/wholenumber.c 784b12543d60702ebdd47da936e278aa03076212
-F ext/rbu/rbu.c ba3983dceffa0938532e79142f391737513de023
+F ext/rbu/rbu.c b2c0b5e6ae1a89affc0edfc127ebfa5f637a0ce4
F ext/rbu/rbu1.test 42bd835e019eff789ec241017965277baeb658b1
F ext/rbu/rbu10.test 046b0980041d30700464a800bbf6733ed2df515d
F ext/rbu/rbu11.test 9bc68c2d3dbeb1720153626e3bd0466dcc017702
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P dc19aacc7e99213edca9bb57b5c11a8a1ac99113
-R 51e4311e92cd324079b6a63abfa03656
+P bae7f875f476f6e01112751cb404fef42ba0a01c
+R 446c70a62698b2fec86a1f84d13dd5af
U dan
-Z c0a4c5c182b536f7f5ddad73d82153a8
+Z be7942fa7aee76e8d89cc36d886361a8