]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Ensure that when an ephemeral cursor is reopened with a second invocation of to OP_Op...
authordan <dan@noemail.net>
Wed, 26 Jun 2019 21:04:30 +0000 (21:04 +0000)
committerdan <dan@noemail.net>
Wed, 26 Jun 2019 21:04:30 +0000 (21:04 +0000)
FossilOrigin-Name: 5fd20e09a522b62a529cf4d76fbdf0a09426f67ffa30430cac6b81ebf32ba43e

manifest
manifest.uuid
src/vdbe.c
test/subquery2.test

index 4f39424cf5bd860f2f6b089587c9bd5cf231b550..a70f6b5a896049f19315221debd222df28cf8088 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fix\sa\stypo\sin\san\soption\sname\sfor\sthe\s.dbconfig\scommand\sin\sshell.c.in:\ss/wriable_schema/writable_schema/
-D 2019-06-21T14:05:27.839
+C Ensure\sthat\swhen\san\sephemeral\scursor\sis\sreopened\swith\sa\ssecond\sinvocation\sof\sto\sOP_OpenEphemeral,\sthe\ssequence\scounter\sis\sreset\sand\sthe\scache\smarked\sas\sstale.\sFix\sfor\s[9cdc5c46].
+D 2019-06-26T21:04:30.194
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -594,7 +594,7 @@ F src/upsert.c 0dd81b40206841814d46942a7337786932475f085716042d0cb2fc7791bf8ca4
 F src/utf.c 2f0fac345c7660d5c5bd3df9e9d8d33d4c27f366bcfb09e07443064d751a0507
 F src/util.c aef606a78b85d042138a841babbc0f98471b19b9a340b962e8fae307bc8cf3da
 F src/vacuum.c 82dcec9e7b1afa980288718ad11bc499651c722d7b9f32933c4d694d91cb6ebf
-F src/vdbe.c 42a7966812a5c3305cadd3e1060a0e962d6674e4a647fcc153e8693ecf59af74
+F src/vdbe.c aaa36d1ac7d55baf007e9c03ee7c826834a51dfe7a56ba4c386318695dd87c99
 F src/vdbe.h 712bca562eaed1c25506b9faf9680bdc75fc42e2f4a1cd518d883fa79c7a4237
 F src/vdbeInt.h 3ba14553508d66f58753952d6dd287dce4ec735de02c6440858b4891aed51c17
 F src/vdbeapi.c f9161e5c77f512fbb80091ce8af621d19c9556bda5e734cffaac1198407400da
@@ -1365,7 +1365,7 @@ F test/stmt.test 54ed2cc0764bf3e48a058331813c3dbd19fc1d0827c3d8369914a5d8f564ec7
 F test/stmtvtab1.test 6873dfb24f8e79cbb5b799b95c2e4349060eb7a3b811982749a84b359468e2d5
 F test/subjournal.test 8d4e2572c0ee9a15549f0d8e40863161295107e52f07a3e8012a2e1fdd093c49
 F test/subquery.test d7268d193dd33d5505df965399d3a594e76ae13f
-F test/subquery2.test 8250dfd6a773b04c7a5c37ac63276f62b329157ce171244d0cbe1acc365e3303
+F test/subquery2.test 90cf944b9de8204569cf656028391e4af1ccc8c0cc02d4ef38ee3be8de1ffb12
 F test/subselect.test 0966aa8e720224dbd6a5e769a3ec2a723e332303
 F test/substr.test 18f57c4ca8a598805c4d64e304c418734d843c1a
 F test/subtype1.test 7fe09496352f97053af1437150751be2d0a0cae8
@@ -1830,7 +1830,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 45bfcb88e71451a656982e217375e257fc8e68374349c2984be1266bf86fb8cf
-R 6c12d6336fc82578eae036f8206dac72
+P 1c58522e49cd91426bca7efccf0d99e0f2803dcd5991ae5d56166fc5510e4c62
+R aa86bccf5d83f42eb7e88df9492939da
 U dan
-Z d88e871f7274ab00b3162208bb6a423c
+Z 83cefd86767b67dddce8adaf1f2cbca7
index 1788abe673f196ef20dc7a955ab15b5dc539e471..483673e8b2a4174fa338a185e110cdb1686e7849 100644 (file)
@@ -1 +1 @@
-1c58522e49cd91426bca7efccf0d99e0f2803dcd5991ae5d56166fc5510e4c62
\ No newline at end of file
+5fd20e09a522b62a529cf4d76fbdf0a09426f67ffa30430cac6b81ebf32ba43e
\ No newline at end of file
index d37ba1ccebd2b552eb0a4712966f77301143f0a2..d697d6b1e0d59703ee7c3b1f14f14d6e239ee312 100644 (file)
@@ -3753,13 +3753,14 @@ case OP_OpenEphemeral: {
     /* If the ephermeral table is already open, erase all existing content
     ** so that the table is empty again, rather than creating a new table. */
     assert( pCx->isEphemeral );
+    pCx->seqCount = 0;
+    pCx->cacheStatus = CACHE_STALE;
     if( pCx->pBtx ){
       rc = sqlite3BtreeClearTable(pCx->pBtx, pCx->pgnoRoot, 0);
     }
   }else{
     pCx = allocateCursor(p, pOp->p1, pOp->p2, -1, CURTYPE_BTREE);
     if( pCx==0 ) goto no_mem;
-    pCx->nullRow = 1;
     pCx->isEphemeral = 1;
     rc = sqlite3BtreeOpen(db->pVfs, 0, db, &pCx->pBtx, 
                           BTREE_OMIT_JOURNAL | BTREE_SINGLE | pOp->p5,
@@ -3795,6 +3796,7 @@ case OP_OpenEphemeral: {
     pCx->isOrdered = (pOp->p5!=BTREE_UNORDERED);
   }
   if( rc ) goto abort_due_to_error;
+  pCx->nullRow = 1;
   break;
 }
 
index 8ccd229e80b3eea3812b850d161ff1e7576eacd0..0c1bdc669731d4e39d845a4deef36e26090e92a6 100644 (file)
@@ -197,5 +197,22 @@ foreach {tn sql} {
   }]
 }
 
+#-------------------------------------------------------------------------
+# Test that ticket [9cdc5c46] is fixed.
+#
+reset_db
+do_execsql_test 5.0 {
+  CREATE TABLE t1(x);
+  INSERT INTO t1 VALUES('ALFKI');
+  INSERT INTO t1 VALUES('ANATR');
+
+  CREATE TABLE t2(y, z);
+  CREATE INDEX t2y ON t2 (y);
+  INSERT INTO t2 VALUES('ANATR', '1997-08-08 00:00:00');
+  INSERT INTO t2 VALUES('ALFKI', '1997-08-25 00:00:00');
+}
+do_execsql_test 5.1 {
+  SELECT ( SELECT y FROM t2 WHERE x = y ORDER BY y, z) FROM t1;
+} {ALFKI ANATR}
 
 finish_test