From: drh Date: Tue, 22 Nov 2016 01:26:42 +0000 (+0000) Subject: Remove unnecessary OP_Close opcodes for a size reduction and performance X-Git-Tag: version-3.16.0~109 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=65f38d960d22370c45e67ca9557f26f3e0e9356c;p=thirdparty%2Fsqlite.git Remove unnecessary OP_Close opcodes for a size reduction and performance increase. FossilOrigin-Name: 32be7aae92ee48bf2cd260ea41e79c2bc62738f9 --- diff --git a/manifest b/manifest index cf92f6bee8..12324450ae 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Remove\sunnecessary\sOP_Close\sopcodes\sat\sthe\send\sof\sINSERT\soperations,\sresulting\nin\ssmaller\sand\sfaster\scode. -D 2016-11-21T21:33:46.646 +C Remove\sunnecessary\sOP_Close\sopcodes\sfor\sa\ssize\sreduction\sand\sperformance\nincrease. +D 2016-11-22T01:26:42.349 F Makefile.in 6b572807415d3f0a379cebc9461416d8df4a12c8 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc bb4d970894abbbe0e88d00aac29bd52af8bc95f4 @@ -330,7 +330,7 @@ F src/auth.c 930b376a9c56998557367e6f7f8aaeac82a2a792 F src/backup.c faf17e60b43233c214aae6a8179d24503a61e83b F src/bitvec.c 3ee4c8b2c94ed3a7377256e18199e6ff5cf33f63 F src/btmutex.c bc87dd3b062cc26edfe79918de2200ccb8d41e73 -F src/btree.c a7ed407f879be72c94b81f965d552e51b54a971f +F src/btree.c 090a13ac2a11bff2fcd30763a7347af998cf468f F src/btree.h 01ec45846fa177e929f01ee36a8e34337d653544 F src/btreeInt.h c18b7d2a3494695133e4e60ee36061d37f45d9a5 F src/build.c 178f16698cbcb43402c343a9413fe22c99ffee21 @@ -339,7 +339,7 @@ F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e F src/ctime.c a2a52d6e353f459d8ab0f07321f60fafa47d5421 F src/date.c 95c9a8d00767e7221a8e9a31f4e913fc8029bf6b F src/dbstat.c 19ee7a4e89979d4df8e44cfac7a8f905ec89b77d -F src/delete.c 6cac3a6c3f3c5ad4cacc402aee1610fc94ebc3dc +F src/delete.c 99949851e8e9ea4e1db739b0d354d360e1f80f2b F src/expr.c d8c8277d77e95d7fcce3b6b6d0f66652e482567f F src/fault.c 160a0c015b6c2629d3899ed2daf63d75754a32bb F src/fkey.c b9ca262f6ad4d030a3cab737ebf9b0b3c8b4ac80 @@ -450,7 +450,7 @@ F src/threads.c 4ae07fa022a3dc7c5beb373cf744a85d3c5c6c3c F src/tokenize.c 78c8085bc7af1922aa687f0f4bbd716821330de5 F src/treeview.c 4e44ade3bfe59d82005039f72e09333ce2b4162c F src/trigger.c 3419bb9862983d84d70735fb4c94b21b934cd0c5 -F src/update.c bb9854778bdbbbca55d7533e55058733bd3fefe3 +F src/update.c 68714ed42a506d782a3d75ff8f09640706d6a3b2 F src/utf.c 699001c79f28e48e9bcdf8a463da029ea660540c F src/util.c 3e2da6101888d073e79ecc6af5e0a2f70fa1e498 F src/vacuum.c 33c174b28886b2faf26e503b5a49a1c01a9b1c16 @@ -459,7 +459,7 @@ F src/vdbe.h c044be7050ac6bf596eecc6ab159f5dbc020a3b7 F src/vdbeInt.h 29b25318a0286c4b2599c0fbef6acf524398489a F src/vdbeapi.c 97129bec6b1553da50d8e73f523c278bda66d9f6 F src/vdbeaux.c 52d9b840859f260ce8418be9333dd77c902e1c74 -F src/vdbeblob.c 3e82a797b60c3b9fed7b8de8c539ca7607874937 +F src/vdbeblob.c ba5b57b9fa47b320ad5c46468e77d8660c931190 F src/vdbemem.c fcdd73a2001a673f48a244a77b1038928ae729c9 F src/vdbesort.c 91fda3909326860382b0ca8aa251e609c6a9d62c F src/vdbetrace.c 41963d5376f0349842b5fc4aaaaacd7d9cdc0834 @@ -468,7 +468,7 @@ F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9 F src/wal.c 7e8557314bcf867ffe3fff1d8ef2d207ace8e065 F src/wal.h bf03a23da3100ab25e5c0363450233cfee09cfc2 F src/walker.c 91a6df7435827e41cff6bb7df50ea00934ee78b0 -F src/where.c 952f76e7a03727480b274b66ca6641b1657cd591 +F src/where.c 6bbf9284f4f15a6fa48663d033870cc0d7f5ee66 F src/whereInt.h 2bcc3d176e6091cb8f50a30b65c006e88a73614d F src/wherecode.c 4ea298998499db5a407ffd70e87e119a86ed7834 F src/whereexpr.c c19a84ac530835d37217db2181e4fe75901b7b97 @@ -1534,7 +1534,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 9979ba80a649ee61d9d174dc9d9fcab7e9fc1332 -R 92d61cb2d5bdcee0374dbd9c4ae6bd21 +P abeddb6d5a4040e1d0a87a4f32ad79794ba0842b +R 0b6428f20f271d9267866f8abeb28948 U drh -Z 31a59b2224bec36ffef21dc37a376954 +Z c9fbc8dd9eccb05e2261cb73023007c2 diff --git a/manifest.uuid b/manifest.uuid index 659aa4015d..aae65b2c2f 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -abeddb6d5a4040e1d0a87a4f32ad79794ba0842b \ No newline at end of file +32be7aae92ee48bf2cd260ea41e79c2bc62738f9 \ No newline at end of file diff --git a/src/btree.c b/src/btree.c index 895e8009ed..d4f0e067f0 100644 --- a/src/btree.c +++ b/src/btree.c @@ -8578,27 +8578,7 @@ static int btreeDropTable(Btree *p, Pgno iTable, int *piMoved){ assert( sqlite3BtreeHoldsMutex(p) ); assert( p->inTrans==TRANS_WRITE ); - - /* It is illegal to drop a table if any cursors are open on the - ** database. This is because in auto-vacuum mode the backend may - ** need to move another root-page to fill a gap left by the deleted - ** root page. If an open cursor was using this page a problem would - ** occur. - ** - ** This error is caught long before control reaches this point. - */ - if( NEVER(pBt->pCursor) ){ - sqlite3ConnectionBlocked(p->db, pBt->pCursor->pBtree->db); - return SQLITE_LOCKED_SHAREDCACHE; - } - - /* - ** It is illegal to drop the sqlite_master table on page 1. But again, - ** this error is caught long before reaching this point. - */ - if( NEVER(iTable<2) ){ - return SQLITE_CORRUPT_BKPT; - } + assert( iTable>=2 ); rc = btreeGetPage(pBt, (Pgno)iTable, &pPage, 0); if( rc ) return rc; diff --git a/src/delete.c b/src/delete.c index e16e9485b2..46af65a361 100644 --- a/src/delete.c +++ b/src/delete.c @@ -538,14 +538,6 @@ void sqlite3DeleteFrom( sqlite3VdbeGoto(v, addrLoop); sqlite3VdbeJumpHere(v, addrLoop); } - - /* Close the cursors open on the table and its indexes. */ - if( !isView && !IsVirtual(pTab) ){ - if( !pPk ) sqlite3VdbeAddOp1(v, OP_Close, iDataCur); - for(i=0, pIdx=pTab->pIndex; pIdx; i++, pIdx=pIdx->pNext){ - sqlite3VdbeAddOp1(v, OP_Close, iIdxCur + i); - } - } } /* End non-truncate path */ /* Update the sqlite_sequence table by storing the content of the diff --git a/src/update.c b/src/update.c index 6838c74398..b370a4ec1a 100644 --- a/src/update.c +++ b/src/update.c @@ -659,15 +659,6 @@ void sqlite3Update( } sqlite3VdbeResolveLabel(v, labelBreak); - /* Close all tables */ - for(i=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, i++){ - assert( aRegIdx ); - if( aToOpen[i+1] ){ - sqlite3VdbeAddOp2(v, OP_Close, iIdxCur+i, 0); - } - } - if( iDataCurpStmt; int iDb = sqlite3SchemaToIndex(db, pTab->pSchema); diff --git a/src/where.c b/src/where.c index ddcb2fc881..81cc1f131b 100644 --- a/src/where.c +++ b/src/where.c @@ -4911,27 +4911,6 @@ void sqlite3WhereEnd(WhereInfo *pWInfo){ continue; } - /* Close all of the cursors that were opened by sqlite3WhereBegin. - ** Except, do not close cursors that will be reused by the OR optimization - ** (WHERE_OR_SUBCLAUSE). And do not close the OP_OpenWrite cursors - ** created for the ONEPASS optimization. - */ - if( (pTab->tabFlags & TF_Ephemeral)==0 - && pTab->pSelect==0 - && (pWInfo->wctrlFlags & WHERE_OR_SUBCLAUSE)==0 - ){ - int ws = pLoop->wsFlags; - if( pWInfo->eOnePass==ONEPASS_OFF && (ws & WHERE_IDX_ONLY)==0 ){ - sqlite3VdbeAddOp1(v, OP_Close, pTabItem->iCursor); - } - if( (ws & WHERE_INDEXED)!=0 - && (ws & (WHERE_IPK|WHERE_AUTO_INDEX))==0 - && pLevel->iIdxCur!=pWInfo->aiCurOnePass[1] - ){ - sqlite3VdbeAddOp1(v, OP_Close, pLevel->iIdxCur); - } - } - /* If this scan uses an index, make VDBE code substitutions to read data ** from the index instead of from the table where possible. In some cases ** this optimization prevents the table from ever being read, which can