]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Correctly invalidate a column cache line when it is overwritten with NULL.
authordrh <drh@noemail.net>
Wed, 13 Dec 2017 18:01:52 +0000 (18:01 +0000)
committerdrh <drh@noemail.net>
Wed, 13 Dec 2017 18:01:52 +0000 (18:01 +0000)
Fix for ticket [123c9ba32130a6c9d432].

FossilOrigin-Name: 65754dc3b830ef9482655d2e93c2cd4acaa7a8715a58d8309955d04378541f89

manifest
manifest.uuid
src/wherecode.c
test/limit2.test

index f66d23cb12c67ff11a8c0ae9f2859521a4d57d30..ef06a4dad0f00d99aa5ccdb842cfaac6bf2ceb0e 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Change\ssome\sLSM\scode\sinternal\stypenames\sfrom\s"Blob"\sand\s"Pgno"\sto\s"LsmBlob"\nand\s"LsmPgno".\sThis\sallows\sthe\sLSM\scode\sto\sbe\scompiled\sas\sa\ssingle\sunit\swith\nsqlite3.c.
-D 2017-12-13T15:32:33.291
+C Correctly\sinvalidate\sa\scolumn\scache\sline\swhen\sit\sis\soverwritten\swith\sNULL.\nFix\sfor\sticket\s[123c9ba32130a6c9d432].
+D 2017-12-13T18:01:52.248
 F Makefile.in 6a879cbf01e37f9eac131414955f71774b566502d9a57ded1b8585b507503cb8
 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
 F Makefile.msc e5d7606238f55816da99f719969598df5b091aa2e9a6935c9412fcae8f53fc44
@@ -557,7 +557,7 @@ F src/wal.h 8de5d2d3de0956d6f6cb48c83a4012d5f227b8fe940f3a349a4b7e85ebcb492a
 F src/walker.c da987a20d40145c0a03c07d8fefcb2ed363becc7680d0500d9c79915591f5b1f
 F src/where.c ee9dd4a438a07cd364c8449e834db4c4d6163a2576a69e937d7a4c37685612a2
 F src/whereInt.h 82c04c5075308abbac59180c8bad5ecb45b07453981f60a53f3c7dee21e1e971
-F src/wherecode.c 611fcabd05592ed2febd7d182f9621425b0466c5232d70e0981c842d429356d5
+F src/wherecode.c ff2f079097a3bdce6ebabfde1419fba448c9ce5feb7cb964e8bfa2a4e27274ef
 F src/whereexpr.c 427ea8e96ec24f2a7814c67b8024ad664a9c7656264c4566c34743cb23186e46
 F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
 F test/affinity2.test a6d901b436328bd67a79b41bb0ac2663918fe3bd
@@ -1008,7 +1008,7 @@ F test/like.test 11cfd7d4ef8625389df9efc46735ff0b0b41d5e62047ef0f3bc24c380d28a7a
 F test/like2.test 3b2ee13149ba4a8a60b59756f4e5d345573852da
 F test/like3.test 3608a2042b6f922f900fbfd5d3ce4e7eca57f7c4
 F test/limit.test 0c99a27a87b14c646a9d583c7c89fd06c352663e
-F test/limit2.test e35f57bd3a62d7c5dcb5ac4306e675c75f974809
+F test/limit2.test 360982809e03211636d2b18ddbc97d5da06826941370607e4b00e113f827cb5a
 F test/loadext.test d077450695ddb5c1ea3ad7d48e5f5850fe732ad9
 F test/loadext2.test 0408380b57adca04004247179837a18e866a74f7
 F test/lock.test be4fe08118fb988fed741f429b7dd5d65e1c90db
@@ -1680,7 +1680,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 e32b69d73062e233b0ac853611d10b24546a346a603289ab0e339a3604ae2af4
-R 3d8a0d79c82564334f201ac883edd045
-U dan
-Z 7a59c9677684f4709aed2e3a45c7d151
+P 30bf38d589adf0b2eb613e184ffb03ed7e625736cb04fd5c341328f72bc5ef4d
+R 0b90f4f4961013e5f05c73c6020a97dc
+U drh
+Z 53ad352984145a11e63d4c3ee646c195
index d947d934df18cce8e323bfd272934422a92c3d3a..15f6d50382d3c7817f59fcbb14dd682207a0963d 100644 (file)
@@ -1 +1 @@
-30bf38d589adf0b2eb613e184ffb03ed7e625736cb04fd5c341328f72bc5ef4d
\ No newline at end of file
+65754dc3b830ef9482655d2e93c2cd4acaa7a8715a58d8309955d04378541f89
\ No newline at end of file
index 40c5f41182f5fc6b77e7dcc5afbf1d7cb03409cb..3c166a1210f85811d3a7eb6c7ddefeea3b337829 100644 (file)
@@ -1690,6 +1690,7 @@ Bitmask sqlite3WhereCodeOneLoopStart(
       }
     }else if( bStopAtNull ){
       sqlite3VdbeAddOp2(v, OP_Null, 0, regBase+nEq);
+      sqlite3ExprCacheRemove(pParse, regBase+nEq, 1);
       endEq = 0;
       nConstraint++;
     }
index f6eaefb8aa4bc7927d1f0b6f7dc38406c66b3a6e..83c67506f5705a9e727e888b4d357227cefd61a1 100644 (file)
@@ -150,4 +150,21 @@ do_execsql_test 502 {
   SELECT j FROM t502 WHERE i IN (1,2,3,4,5) ORDER BY j LIMIT 3;
 } {1 3 4}
 
+# Ticket https://www.sqlite.org/src/info/123c9ba32130a6c9 2017-12-13
+# Incorrect result when an idnex is used for an ordered join.
+#
+# This test case is in the limit2.test module because the problem was first
+# exposed by check-in https://www.sqlite.org/src/info/559733b09e which 
+# implemented the ORDER BY LIMIT optimization that limit2.test strives to
+# test.
+#
+do_execsql_test 600 {
+  DROP TABLE IF EXISTS t1;
+  CREATE TABLE t1(a, b);  INSERT INTO t1 VALUES(1,2);
+  DROP TABLE IF EXISTS t2;
+  CREATE TABLE t2(x, y);  INSERT INTO t2 VALUES(1,3);
+  CREATE INDEX t1ab ON t1(a,b);
+  SELECT y FROM t1, t2 WHERE a=x AND b<=y ORDER BY b DESC;
+} {3}
+
 finish_test