From: drh Date: Mon, 7 Feb 2011 23:56:01 +0000 (+0000) Subject: Cleanup to the OP_Checkpoint opcode. X-Git-Tag: version-3.7.6~159 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=30aa3b93b631a4d9a7327691b88564978e43c086;p=thirdparty%2Fsqlite.git Cleanup to the OP_Checkpoint opcode. FossilOrigin-Name: f611a5a879b7dec1ed1d8bf32413c8a6b81c3172 --- diff --git a/manifest b/manifest index c3c03e6197..b7c52bccd9 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,8 @@ -C Fix\ssome\stest\scases\sin\swalfault.test.\sExtend\sone\stest\scase\sto\srestore\scode\scoverage.\sAdd\swal5.test\sto\sthe\s"coverage-wal"\spermutation. -D 2011-02-07T16:24:39.731 +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA1 + +C Cleanup\sto\sthe\sOP_Checkpoint\sopcode. +D 2011-02-07T23:56:01.776 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in de6498556d536ae60bb8bb10e8c1ba011448658c F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@ -169,7 +172,7 @@ F src/parse.y 12b7ebd61ea54f0e1b1083ff69cc2c8ce9353d58 F src/pcache.c 09d38c44ab275db581f7a2f6ff8b9bc7f8c0faaa F src/pcache.h c683390d50f856d4cd8e24342ae62027d1bb6050 F src/pcache1.c d548e31beafa792d1994b663a29a5303569efc4e -F src/pragma.c 3d48a7f0a90bae8740adcc0d86e583b79da57f5b +F src/pragma.c a83f320497aee18eda60fc8d854df5897906c2b1 F src/prepare.c 395b3fab1b93f45b6aa194b23ebc201221c47b99 F src/printf.c df2ff3bb5409e8958136933342c46464fbd017e7 F src/random.c cd4a67b3953b88019f8cd4ccd81394a8ddfaba50 @@ -229,7 +232,7 @@ F src/update.c 227e6cd512108b84f69421fc6c7aa1b83d60d6e0 F src/utf.c 1baeeac91707a4df97ccc6141ec0f808278af685 F src/util.c ab1c92426494f499f42b9e307537b03e923d75c1 F src/vacuum.c 924bd1bcee2dfb05376f79845bd3b4cec7b54b2f -F src/vdbe.c 7f54982de40509458ee7ede8e356dccc19f5b161 +F src/vdbe.c 167432ac0db5820b886685a7a6ad8f39520db4fb F src/vdbe.h 4de0efb4b0fdaaa900cf419b35c458933ef1c6d2 F src/vdbeInt.h 6e6f28e9bccc6c703dca1372fd661c57b5c15fb0 F src/vdbeapi.c 8e9324fd35eb70d0b5904bd1af40f2598744dc4d @@ -906,7 +909,14 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f -P 5a4b6652cf3780ffed6fe0fe669e8090b0b71e81 -R d8e3b7dc9ee829705f21f80baf365b1e -U dan -Z a9734195708d8a3e3714a424a8d821c7 +P f83b07ace340c9dd3e0cbe3cd3c106db003b0bd4 +R 9dff0923b368f38852a045e469f02e78 +U drh +Z 6b35d5e6fad59de45e9947a1e34c052b +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.4.6 (GNU/Linux) + +iD8DBQFNUIaUoxKgR168RlERAlSZAJ0VEHxRU9y2VR34VGKpOjMwCIDtOwCZAc54 +Vv+GWj7csdaDbvii+wYkKCc= +=OT7F +-----END PGP SIGNATURE----- diff --git a/manifest.uuid b/manifest.uuid index 9c7fc35a29..0dbc82b569 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -f83b07ace340c9dd3e0cbe3cd3c106db003b0bd4 \ No newline at end of file +f611a5a879b7dec1ed1d8bf32413c8a6b81c3172 \ No newline at end of file diff --git a/src/pragma.c b/src/pragma.c index 15e2bef59f..cbfe01f014 100644 --- a/src/pragma.c +++ b/src/pragma.c @@ -1407,7 +1407,7 @@ void sqlite3Pragma( sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "log", SQLITE_STATIC); sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "checkpointed", SQLITE_STATIC); - sqlite3VdbeAddOp2(v, OP_Checkpoint, iBt, eMode); + sqlite3VdbeAddOp3(v, OP_Checkpoint, iBt, eMode, 1); sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 3); }else diff --git a/src/vdbe.c b/src/vdbe.c index 90e4065e74..c2237ebf97 100644 --- a/src/vdbe.c +++ b/src/vdbe.c @@ -5219,29 +5219,32 @@ case OP_AggFinal: { ** ** Checkpoint database P1. This is a no-op if P1 is not currently in ** WAL mode. Parameter P2 is one of SQLITE_CHECKPOINT_PASSIVE, FULL -** or RESTART. +** or RESTART. Write 1 or 0 into mem[P3] if the checkpoint returns +** SQLITE_BUSY or not, respectively. Write the number of pages in the +** WAL after the checkpoint into mem[P3+1] and the number of pages +** in the WAL that have been checkpointed after the checkpoint +** completes into mem[P3+2]. However on an error, mem[P3+1] and +** mem[P3+2] are initialized to -1. */ case OP_Checkpoint: { - int nLog = -1; /* Number of pages in WAL log */ - int nCkpt = -1; /* Number of checkpointed pages */ - int bBusy = 0; + int i; /* Loop counter */ + int aRes[3]; /* Results */ + Mem *pMem; /* Write results here */ + + aRes[0] = 0; + aRes[1] = aRes[2] = -1; assert( pOp->p2==SQLITE_CHECKPOINT_PASSIVE || pOp->p2==SQLITE_CHECKPOINT_FULL || pOp->p2==SQLITE_CHECKPOINT_RESTART ); - rc = sqlite3Checkpoint(db, pOp->p1, pOp->p2, &nLog, &nCkpt); + rc = sqlite3Checkpoint(db, pOp->p1, pOp->p2, &aRes[1], &aRes[2]); if( rc==SQLITE_BUSY ){ rc = SQLITE_OK; - bBusy = 1; + aRes[0] = 1; } - - aMem[1].u.i = bBusy; - aMem[2].u.i = nLog; - aMem[3].u.i = nCkpt; - MemSetTypeFlag(&aMem[1], MEM_Int); - MemSetTypeFlag(&aMem[2], MEM_Int); - MemSetTypeFlag(&aMem[3], MEM_Int); - + for(i=0, pMem = &aMem[pOp->p3]; i<3; i++, pMem++){ + sqlite3VdbeMemSetInt64(pMem, (i64)aRes[i]); + } break; }; #endif