]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Changes so that rbu vacuum works with zipvfs databases.
authordan <dan@noemail.net>
Sat, 16 Apr 2016 19:02:53 +0000 (19:02 +0000)
committerdan <dan@noemail.net>
Sat, 16 Apr 2016 19:02:53 +0000 (19:02 +0000)
FossilOrigin-Name: bae7f875f476f6e01112751cb404fef42ba0a01c

ext/rbu/sqlite3rbu.c
manifest
manifest.uuid

index ff01f307257d735ef9df04d8e03b277c5b7d46a5..280b64bb2a43e787a152d0e4b46e080e7f2f7e34 100644 (file)
@@ -2213,11 +2213,15 @@ static int rbuGetUpdateStmt(
   return p->rc;
 }
 
-static sqlite3 *rbuOpenDbhandle(sqlite3rbu *p, const char *zName){
+static sqlite3 *rbuOpenDbhandle(
+  sqlite3rbu *p, 
+  const char *zName, 
+  int bUseVfs
+){
   sqlite3 *db = 0;
   if( p->rc==SQLITE_OK ){
     const int flags = SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE|SQLITE_OPEN_URI;
-    p->rc = sqlite3_open_v2(zName, &db, flags, p->zVfsName);
+    p->rc = sqlite3_open_v2(zName, &db, flags, bUseVfs ? p->zVfsName : 0);
     if( p->rc ){
       p->zErrmsg = sqlite3_mprintf("%s", sqlite3_errmsg(db));
       sqlite3_close(db);
@@ -2326,7 +2330,7 @@ static void rbuOpenDatabase(sqlite3rbu *p){
   assert( rbuIsVacuum(p) || p->zTarget!=0 );
 
   /* Open the RBU database */
-  p->dbRbu = rbuOpenDbhandle(p, p->zRbu);
+  p->dbRbu = rbuOpenDbhandle(p, p->zRbu, 1);
 
   /* If using separate RBU and state databases, attach the state database to
   ** the RBU db handle now.  */
@@ -2351,24 +2355,26 @@ static void rbuOpenDatabase(sqlite3rbu *p){
         rbuFreeState(pState);
       }
     }
-    if( bOpen ) p->dbMain = rbuOpenDbhandle(p, p->zRbu);
+    if( bOpen ) p->dbMain = rbuOpenDbhandle(p, p->zRbu, 1);
   }
 
   p->eStage = 0;
   if( p->dbMain==0 ){
     if( !rbuIsVacuum(p) ){
-      p->dbMain = rbuOpenDbhandle(p, p->zTarget);
+      p->dbMain = rbuOpenDbhandle(p, p->zTarget, 1);
     }else{
+      int frc = sqlite3_file_control(p->dbRbu, "main", SQLITE_FCNTL_ZIPVFS, 0);
       char *zTarget = sqlite3_mprintf("file:%s-vacuum?rbu_memory=1", p->zRbu);
       if( zTarget==0 ){
         p->rc = SQLITE_NOMEM;
         return;
       }
-      p->dbMain = rbuOpenDbhandle(p, zTarget);
+      p->dbMain = rbuOpenDbhandle(p, zTarget, frc!=SQLITE_OK);
       sqlite3_free(zTarget);
       if( p->rc==SQLITE_OK ){
         p->rc = sqlite3_exec(p->dbMain, 
-            "PRAGMA journal_mode=off; BEGIN EXCLUSIVE; COMMIT;", 0, 0, 0
+            "PRAGMA journal_mode=off; PRAGMA zipvfs_journal_mode = off;"
+            "BEGIN EXCLUSIVE; COMMIT;", 0, 0, 0
         );
       }
     }
@@ -3310,7 +3316,6 @@ static void rbuInitPhaseOneSteps(sqlite3rbu *p){
 static void rbuCreateTargetSchema(sqlite3rbu *p){
   sqlite3_stmt *pSql = 0;
   sqlite3_stmt *pInsert = 0;
-  int rc2;
 
   assert( rbuIsVacuum(p) );
 
@@ -3319,7 +3324,7 @@ static void rbuCreateTargetSchema(sqlite3rbu *p){
     " ORDER BY type DESC"
   );
   while( p->rc==SQLITE_OK && sqlite3_step(pSql)==SQLITE_ROW ){
-    const char *zSql = sqlite3_column_text(pSql, 0);
+    const char *zSql = (const char*)sqlite3_column_text(pSql, 0);
     p->rc = sqlite3_exec(p->dbMain, zSql, 0, 0, &p->zErrmsg);
   }
   rbuFinalize(p, pSql);
@@ -3782,15 +3787,6 @@ static void rbuPutU32(u8 *aBuf, u32 iVal){
   aBuf[3] = (iVal >>  0) & 0xFF;
 }
 
-/*
-** Write an unsigned 16-bit value in big-endian format to the supplied
-** buffer.
-*/
-static void rbuPutU16(u8 *aBuf, u16 iVal){
-  aBuf[0] = (iVal >>  8) & 0xFF;
-  aBuf[1] = (iVal >>  0) & 0xFF;
-}
-
 /*
 ** Read data from an rbuVfs-file.
 */
index 0e404f7022f59f925b8870fa73b51979be86e6b4..bcd6ca601c1a195c648097b517db72522d0458bd 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Avoid\screating\sany\sextra\sfiles\s("<target>-vacuum")\swhen\srunning\san\sRBU\svacuum.\sEnsure\sthat\sthe\sOAL\sfile\screated\sis\s"<target>-oal",\snot\s"<target>-vacuum-oal".
-D 2016-04-16T17:53:14.824
+C Changes\sso\sthat\srbu\svacuum\sworks\swith\szipvfs\sdatabases.
+D 2016-04-16T19:02:53.248
 F Makefile.in eba680121821b8a60940a81454316f47a341487a
 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
 F Makefile.msc 71b8b16cf9393f68e2e2035486ca104872558836
@@ -247,7 +247,7 @@ F ext/rbu/rbufts.test 828cd689da825f0a7b7c53ffc1f6f7fdb6fa5bda
 F ext/rbu/rbuprogress.test 2023a7df2c523e3df1cb532eff811cda385a789a
 F ext/rbu/rbusave.test 0f43b6686084f426ddd040b878426452fd2c2f48
 F ext/rbu/rbuvacuum.test 75b4231f85622859e814c7f028afad0303f72f60
-F ext/rbu/sqlite3rbu.c 471b4055618473612e9ae7d7e4f1922559b59aaf
+F ext/rbu/sqlite3rbu.c 721c6c116018b5d02f6318b6bbb7834098bc6a07
 F ext/rbu/sqlite3rbu.h 1342ab6121e715b8da59ec35c5b5c16060be7a6b
 F ext/rbu/test_rbu.c 430b8b9520c233505371d564d3561e0b554355f4
 F ext/rtree/README 6315c0d73ebf0ec40dedb5aa0e942bc8b54e3761
@@ -1483,7 +1483,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 8eb3d7d8360530f364bbbebac53e1f0e6753d924
-R 4d03a7f5bef5f70852d283bb46ff80e2
+P dc19aacc7e99213edca9bb57b5c11a8a1ac99113
+R 51e4311e92cd324079b6a63abfa03656
 U dan
-Z 0a7d529e6f2d77bae387935d2996f1da
+Z c0a4c5c182b536f7f5ddad73d82153a8
index 56172c7c761734dc15ce3a2d5958372df2f029b7..3a2c90ce4f5b9d4f3418146a9875dd8787f6bf93 100644 (file)
@@ -1 +1 @@
-dc19aacc7e99213edca9bb57b5c11a8a1ac99113
\ No newline at end of file
+bae7f875f476f6e01112751cb404fef42ba0a01c
\ No newline at end of file