]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Modify the OP_IfNotOpen opcode so that the jump is taken if the cursor is open
authordrh <>
Tue, 20 Sep 2022 19:22:17 +0000 (19:22 +0000)
committerdrh <>
Tue, 20 Sep 2022 19:22:17 +0000 (19:22 +0000)
but was previously set to a NULL row using OP_NullRow.

FossilOrigin-Name: 1292d68caa7086610ddda343f3852e63de8da1eb66536ee4716b6529f5a31bc6

manifest
manifest.uuid
src/expr.c
src/vdbe.c

index 4ddfaacbfd7409a5a1cb56fdffd1c7db1a986b35..45f45fb98f546266e656d3fd6f0f8c3655aa8617 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Remove\scode\sthat\shas\sbeen\spreviously\scommented\sout.
-D 2022-09-20T18:18:00.607
+C Modify\sthe\sOP_IfNotOpen\sopcode\sso\sthat\sthe\sjump\sis\staken\sif\sthe\scursor\sis\sopen\nbut\swas\spreviously\sset\sto\sa\sNULL\srow\susing\sOP_NullRow.
+D 2022-09-20T19:22:17.805
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -539,7 +539,7 @@ F src/date.c 94ce83b4cd848a387680a5f920c9018c16655db778c4d36525af0a0f34679ac5
 F src/dbpage.c 5808e91bc27fa3981b028000f8fadfdc10ce9e59a34ce7dc4e035a69be3906ec
 F src/dbstat.c 861e08690fcb0f2ee1165eff0060ea8d4f3e2ea10f80dab7d32ad70443a6ff2d
 F src/delete.c 86573edae75e3d3e9a8b590d87db8e47222103029df4f3e11fa56044459b514e
-F src/expr.c a6692ca00680c8ac4ec6cf637e04df1ca331e1a68e311b425eea61f0c8477019
+F src/expr.c 1cbdd76eeedb729ea9060df03e3e6b74a302784a13bfa38794a8194f894641ea
 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007
 F src/fkey.c 722f20779f5342a787922deded3628d8c74b5249cab04098cf17ee2f2aaff002
 F src/func.c 8f72e88cccdee22185133c10f96ccd61dc34c5ea4b1fa9a73c237ef59b2e64f1
@@ -660,7 +660,7 @@ F src/upsert.c 8789047a8f0a601ea42fa0256d1ba3190c13746b6ba940fe2d25643a7e991937
 F src/utf.c ee39565f0843775cc2c81135751ddd93eceb91a673ea2c57f61c76f288b041a0
 F src/util.c 0be191521ff6d2805995f4910f0b6231b42843678b2efdc1abecaf39929a673f
 F src/vacuum.c bb346170b0b54c6683bba4a5983aea40485597fdf605c87ec8bc2e199fe88cd8
-F src/vdbe.c d27ec9a57f752fc2acf6a64d43bbf6072d2415efc976184f6d8a146e65819d3b
+F src/vdbe.c 0d1e3c658d98a7bb7201532ea7a3e4d59bf9165421c780d5f84c361e372f1179
 F src/vdbe.h 64619af62603dc3c4f5ff6ff6d2c8f389abd667a29ce6007ed44bd22b3211cd0
 F src/vdbeInt.h 17b7461ffcf9ee760d1341731715a419f6b8c763089a7ece25c2e8098d702b3f
 F src/vdbeapi.c fc3183daf72808b4311b228989120fdbc2dc44972fb0d77d5c453460cc0e5b2c
@@ -2000,8 +2000,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 930a8c1561d0d5dc70dc5378edac77f79ac59ab6569b561de3dfb02f160c38c5
-R dcb98f6a73c54efed4da4f980f298d5b
+P 852b385a5de622aa32026824210d4bd23db52a4a8a697b83d22d6000edeba487
+R 58d9f89a36d9e4cf587663a233307943
 U drh
-Z 1cd83b2593765cf9bcd77e53d7a14363
+Z 7e40ae1a3e52a669a3942bf4dda137ff
 # Remove this line to create a well-formed Fossil manifest.
index ac64a7f2b0a8f1f75e2f07fd47a92ae3431d4e7b..97e708724c3e3f5e01d927c8163db8f71d8edf92 100644 (file)
@@ -1 +1 @@
-852b385a5de622aa32026824210d4bd23db52a4a8a697b83d22d6000edeba487
\ No newline at end of file
+1292d68caa7086610ddda343f3852e63de8da1eb66536ee4716b6529f5a31bc6
\ No newline at end of file
index 064e78fdea451fcabef2fb722c240f0cca67c649..baa0fe647612284e795138dfd51bd3b5486a56d0 100644 (file)
@@ -3223,7 +3223,7 @@ void sqlite3CodeRhsOfIN(
     sqlite3VdbeChangeP4(v, addr, (void *)pKeyInfo, P4_KEYINFO);
   }
   if( addrOnce ){
-    sqlite3VdbeAddOp2(v, OP_Rewind, iTab, sqlite3VdbeCurrentAddr(v)+1);
+    sqlite3VdbeAddOp1(v, OP_NullRow, iTab);
     sqlite3VdbeJumpHere(v, addrOnce);
     /* Subroutine return */
     assert( ExprUseYSub(pExpr) );
index 686ebf175f70942bda966a558e36a94b0b36cf71..ebf52e67af1a973a31ada121fe14628720e9ccfd 100644 (file)
@@ -4897,12 +4897,16 @@ case OP_SeekHit: {
 /* Opcode: IfNotOpen P1 P2 * * *
 ** Synopsis: if( !csr[P1] ) goto P2
 **
-** If cursor P1 is not open, jump to instruction P2. Otherwise, fall through.
+** If cursor P1 is not open or if P1 is set to a NULL row using the
+** OP_NullRow opcode, then jump to instruction P2. Otherwise, fall through.
 */
 case OP_IfNotOpen: {        /* jump */
+  VdbeCursor *pCur;
+
   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
-  VdbeBranchTaken(p->apCsr[pOp->p1]==0, 2);
-  if( !p->apCsr[pOp->p1] ){
+  pCur = p->apCsr[pOp->p1];
+  VdbeBranchTaken(pCur==0 || pCur->nullRow, 2);
+  if( pCur==0 || pCur->nullRow ){
     goto jump_to_p2_and_check_for_interrupt;
   }
   break;