From: drh Date: Mon, 1 Feb 2016 13:21:13 +0000 (+0000) Subject: Minor simplification to the OP_AutoCommit opcode. Fix some code comments X-Git-Tag: version-3.11.0~72 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b0c886510f9f691ab382c5af82644ba48684a9f3;p=thirdparty%2Fsqlite.git Minor simplification to the OP_AutoCommit opcode. Fix some code comments related to transaction control. FossilOrigin-Name: a9b6a0672f84dd205f9333951e4c2a608d027d71 --- diff --git a/manifest b/manifest index adf078c951..fbe4e529cf 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\san\sassert()\sthat\smight\sfail\son\sa\scorrupt\sdatabase. -D 2016-02-01T00:21:08.846 +C Minor\ssimplification\sto\sthe\sOP_AutoCommit\sopcode.\s\sFix\ssome\scode\scomments\nrelated\sto\stransaction\scontrol. +D 2016-02-01T13:21:13.072 F Makefile.in 027c1603f255390c43a426671055a31c0a65fdb4 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc 72b7858f02017611c3ac1ddc965251017fed0845 @@ -293,7 +293,7 @@ F src/btmutex.c bc87dd3b062cc26edfe79918de2200ccb8d41e73 F src/btree.c a2a0244ea3f0b3f57f75019c2f229c744ca5d202 F src/btree.h 368ceeb4bd9312dc8df2ffd64b4b7dbcf4db5f8e F src/btreeInt.h c18b7d2a3494695133e4e60ee36061d37f45d9a5 -F src/build.c 0510844c48d80732aead74b5727403b493dd1cd5 +F src/build.c c177ca703d7a3ac6ea6bba3a6c396d67ce79bc69 F src/callback.c 29ae4faba226c7ebb9aee93016b5ce8a8f071261 F src/complete.c addcd8160b081131005d5bc2d34adf20c1c5c92f F src/ctime.c 60e135af364d777a9ab41c97e5e89cd224da6198 @@ -412,11 +412,11 @@ F src/update.c 17332f9fe818cbc0444c36a811800af8498af4c3 F src/utf.c 10cc2519e82e3369344d0969ad4b1a333dc86d18 F src/util.c 72d40df0a52d3f30b462a15f0e094fcbade6dc82 F src/vacuum.c 2ddd5cad2a7b9cef7f9e431b8c7771634c6b1701 -F src/vdbe.c 73f0f61eb5556e430487671a557d032ecac52240 +F src/vdbe.c 755b1e2117214549b768efb6e552fcd12a9d859b F src/vdbe.h 7a733ea8aac1b77305a67698e784fa3484ee3337 F src/vdbeInt.h 4b69d5451bcadd473e745af53ef1e8abfdce0a79 F src/vdbeapi.c 9d640d5efd9a140a6bda8da53b220aa258167993 -F src/vdbeaux.c 221631e40111b5efa96ea557c6e2e7f62fd32b2a +F src/vdbeaux.c b8ba8e6d48732fb7a735a23e3040a01f4848498e F src/vdbeblob.c 37c3d11a753e403698c69e17383d282e1ae73e75 F src/vdbemem.c b9181e77eca2a095929d46250daf85c8d2621fc0 F src/vdbesort.c ef3c6d1f1a7d44cf67bb2bee59ea3d1fe5bad174 @@ -1422,7 +1422,7 @@ F tool/vdbe_profile.tcl 246d0da094856d72d2c12efec03250d71639d19f F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4 F tool/warnings.sh 48bd54594752d5be3337f12c72f28d2080cb630b F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P a2810cf65db13479e2ab255c37abac7841ee985d -R 188fdebacf7930560dd1bef6de7f142e +P 22eaced7274764eaf7ab4b5fc52cc2fcfc285708 +R 48595a32d50edde169d3b975cd1cf3f9 U drh -Z 4925a52dc50a180b6685bbcef3b9e085 +Z 4ace4ad684d082250fc68f1cbbc590b5 diff --git a/manifest.uuid b/manifest.uuid index 85c92e6bfd..f7adbd19c9 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -22eaced7274764eaf7ab4b5fc52cc2fcfc285708 \ No newline at end of file +a9b6a0672f84dd205f9333951e4c2a608d027d71 \ No newline at end of file diff --git a/src/build.c b/src/build.c index be320b9c5a..88ddf406e6 100644 --- a/src/build.c +++ b/src/build.c @@ -3892,7 +3892,7 @@ void sqlite3SrcListShiftJoinType(SrcList *p){ } /* -** Begin a transaction +** Generate VDBE code for a BEGIN statement. */ void sqlite3BeginTransaction(Parse *pParse, int type){ sqlite3 *db; @@ -3902,7 +3902,6 @@ void sqlite3BeginTransaction(Parse *pParse, int type){ assert( pParse!=0 ); db = pParse->db; assert( db!=0 ); -/* if( db->aDb[0].pBt==0 ) return; */ if( sqlite3AuthCheck(pParse, SQLITE_TRANSACTION, "BEGIN", 0, 0) ){ return; } @@ -3914,11 +3913,11 @@ void sqlite3BeginTransaction(Parse *pParse, int type){ sqlite3VdbeUsesBtree(v, i); } } - sqlite3VdbeAddOp2(v, OP_AutoCommit, 0, 0); + sqlite3VdbeAddOp0(v, OP_AutoCommit); } /* -** Commit a transaction +** Generate VDBE code for a COMMIT statement. */ void sqlite3CommitTransaction(Parse *pParse){ Vdbe *v; @@ -3930,12 +3929,12 @@ void sqlite3CommitTransaction(Parse *pParse){ } v = sqlite3GetVdbe(pParse); if( v ){ - sqlite3VdbeAddOp2(v, OP_AutoCommit, 1, 0); + sqlite3VdbeAddOp1(v, OP_AutoCommit, 1); } } /* -** Rollback a transaction +** Generate VDBE code for a ROLLBACK statement. */ void sqlite3RollbackTransaction(Parse *pParse){ Vdbe *v; diff --git a/src/vdbe.c b/src/vdbe.c index a1e59e1170..2bb39c85bf 100644 --- a/src/vdbe.c +++ b/src/vdbe.c @@ -3008,28 +3008,27 @@ case OP_Savepoint: { case OP_AutoCommit: { int desiredAutoCommit; int iRollback; - int turnOnAC; desiredAutoCommit = pOp->p1; iRollback = pOp->p2; - turnOnAC = desiredAutoCommit && !db->autoCommit; assert( desiredAutoCommit==1 || desiredAutoCommit==0 ); assert( desiredAutoCommit==1 || iRollback==0 ); assert( db->nVdbeActive>0 ); /* At least this one VM is active */ assert( p->bIsReader ); - if( turnOnAC && !iRollback && db->nVdbeWrite>0 ){ - /* If this instruction implements a COMMIT and other VMs are writing - ** return an error indicating that the other VMs must complete first. - */ - sqlite3VdbeError(p, "cannot commit transaction - " - "SQL statements in progress"); - rc = SQLITE_BUSY; - }else if( desiredAutoCommit!=db->autoCommit ){ + if( desiredAutoCommit!=db->autoCommit ){ if( iRollback ){ assert( desiredAutoCommit==1 ); sqlite3RollbackAll(db, SQLITE_ABORT_ROLLBACK); db->autoCommit = 1; + }else if( desiredAutoCommit && db->nVdbeWrite>0 ){ + /* If this instruction implements a COMMIT and other VMs are writing + ** return an error indicating that the other VMs must complete first. + */ + sqlite3VdbeError(p, "cannot commit transaction - " + "SQL statements in progress"); + rc = SQLITE_BUSY; + break; }else if( (rc = sqlite3VdbeCheckFk(p, 1))!=SQLITE_OK ){ goto vdbe_return; }else{ diff --git a/src/vdbeaux.c b/src/vdbeaux.c index 619aada030..d6cf451af4 100644 --- a/src/vdbeaux.c +++ b/src/vdbeaux.c @@ -534,7 +534,7 @@ static void resolveP2Values(Vdbe *p, int *pMaxFuncArgs){ for(pOp=p->aOp, i=p->nOp-1; i>=0; i--, pOp++){ u8 opcode = pOp->opcode; - /* NOTE: Be sure to update mkopcodeh.awk when adding or removing + /* NOTE: Be sure to update mkopcodeh.tcl when adding or removing ** cases from this switch! */ switch( opcode ){ case OP_Transaction: {