-C Version\s3.41.1
-D 2023-03-10T12:13:52.703
+C The\scherry-pick\smerge\sat\s[371838562a675c1b]\scaused\sa\sperformance\sregression\nfor\ssome\squeries,\swhich\sis\shere\sfixed.
+D 2023-03-11T23:29:34.543
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c
F src/resolve.c 4233c3030341bf1a21cea90890e6b3d3531721acc62ede147e899d36ffad8238
F src/rowset.c ba9515a922af32abe1f7d39406b9d35730ed65efab9443dc5702693b60854c92
-F src/select.c 316c9bd757700692400369568a38a8d87f830f9fa896539abcbc331c228cbd20
+F src/select.c 9c6f537469c54af6e5b981d68ac18714562c497e6ff57782f338bb17b3ec9777
F src/shell.c.in 6f36f5ca05f1bebf74935a7fcf2dce983016e807a09cbd752a673583ad7da087
F src/sqlite.h.in 662a2fa083d093896b92560c871dea6d86792b49dc4bf7b4e8dbeca8e7171488
F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
F test/ioerr6.test a395a6ab144b26a9e3e21059a1ab6a7149cca65b
F test/istrue.test e7f285bb70282625c258e866ce6337d4c762922f5a300e1b50f958aef6e7d9c9
F test/join.test e32cb9b1491eed682489e2cde33a22a4eb7611fe5aa3b0aa4b275fe27ab3f3ac
-F test/join2.test c378a2c59db8da13a265481c9aeab08d854c524f56a0eda12fa7bc535bfbebb1
+F test/join2.test 8561fe82ce434ac96de91544072e578dc2cadddf2d9bc9cd802f866a9b92502e
F test/join3.test 6f0c774ff1ba0489e6c88a3e77b9d3528fb4fda0
F test/join4.test 1a352e4e267114444c29266ce79e941af5885916
F test/join5.test 91f1f4c7d81fd87b58e9ba7cf4a2b5d39e3583b4f8e498a162722a60259c5208
F test/notify2.test 2ecabaa1305083856b7c39cf32816b612740c161
F test/notify3.test 796c7b7157f55c93b4e672b724e9c923a6fc6aa72ac419379a623e2350472e22
F test/notnull.test a37b663d5bb728d66fc182016613fb8e4a0a4bbf3d75b8876a7527f7d4ed3f18
-F test/notnull2.test 8e1aa4f311df37f9d2cd4f5563eea955b8028c692151404e9cc896420a01a3dc
+F test/notnull2.test 1ee4acbd614d3cf5f1c4a52f5af7fc771b82352f1a51a86afeaa02c9df1d82ef
F test/notnullfault.test fc4bb7845582a2b3db376001ef49118393b1b11abe0d24adb03db057ee2b73d5
F test/null.test b7ff206a1c60fe01aa2abd33ef9ea83c93727d993ca8a613de86e925c9f2bc6f
F test/nulls1.test 7a5e4346ee4285034100b4cd20e6784f16a9d6c927e44ecdf10034086bbee9c9
F test/temptable2.test 76821347810ecc88203e6ef0dd6897b6036ac788e9dd3e6b04fd4d1631311a16
F test/temptable3.test d11a0974e52b347e45ee54ef1923c91ed91e4637
F test/temptrigger.test 38f0ca479b1822d3117069e014daabcaacefffcc
-F test/tester.tcl 8d54d40a55e12554b4509bc12078b201b233c8e842a7543629094a21b1ba956d
+F test/tester.tcl 68454ef88508c196d19e8694daa27bff7107a91857799eaa12f417188ae53ede
F test/testrunner.tcl e0b36a732956c69ce19370611b8dc69b44e627d5ea8ec2a5455ca3e8a170ddaa
F test/testrunner_data.tcl 8169c68654ac8906833b8a6aadca973358a441ebf88270dd05c153e5f96f76b8
F test/thread001.test a0985c117eab62c0c65526e9fa5d1360dd1cac5b03bde223902763274ce21899
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P cc8a0ee40cfc83ab42a0ff452de0a53fe17784aefb944ea7ac2cb078a8310730
-R 36a17de70fdfc70a02115f278d762e2d
-T +sym-release *
-T +sym-version-3.41.1 *
+P 20399f3eda5ec249d147ba9e48da6e87f969d7966a9a896764ca437ff7e737ff
+Q +dc9f025dc43cb8008e7d8d644175d8b2d084e602a1513803c40c513d1e99fea4
+R 2f8f4d851a6e1e6e1df00137b0152c8b
U drh
-Z 6594aef6b42302816d333b0c05d59faf
+Z 604e8487283a0732e6243f3c7d1d2399
# Remove this line to create a well-formed Fossil manifest.
SELECT * FROM t1 LEFT JOIN t3 ON y=z;
} {NULL -2 -2 3 NULL 1 NULL NULL 0 2 2 3}
+# 2023-03-11 https://sqlite.org/forum/forumpost/b405033490fa56d9
+# The fix that test 11.1 above checks also caused a performance regression.
+# This test case verifies that the performance regression has been resolved.
+#
+do_execsql_test 12.1 {
+ DROP TABLE t1;
+ DROP TABLE t2;
+ DROP VIEW t3;
+ CREATE TABLE t1(a INTEGER PRIMARY KEY);
+ WITH RECURSIVE c(n) AS (VALUES(1) UNION ALL SELECT n+1 FROM c WHERE n<100)
+ INSERT INTO t1(a) SELECT n FROM c;
+ CREATE VIEW t2(b) AS SELECT a FROM t1;
+}
+do_vmstep_test 12.2 {
+ SELECT * FROM t1 LEFT JOIN t2 ON a=b LIMIT 10 OFFSET 98;
+} 2000 {99 99 100 100}
+do_eqp_test 12.3 {
+ SELECT * FROM t1 LEFT JOIN t2 ON a=b LIMIT 10 OFFSET 98;
+} {
+ QUERY PLAN
+ |--SCAN t1
+ `--SEARCH t1 USING INTEGER PRIMARY KEY (rowid=?) LEFT-JOIN
+}
+
finish_test
INSERT INTO t2 SELECT * FROM t1;
}
-proc do_vmstep_test {tn sql nstep {res {}}} {
- uplevel [list do_execsql_test $tn.0 $sql $res]
-
- set vmstep [db status vmstep]
- if {[string range $nstep 0 0]=="+"} {
- set body "if {$vmstep<$nstep} {
- error \"got $vmstep, expected more than [string range $nstep 1 end]\"
- }"
- } else {
- set body "if {$vmstep>$nstep} {
- error \"got $vmstep, expected less than $nstep\"
- }"
- }
-
- # set name "$tn.vmstep=$vmstep,expect=$nstep"
- set name "$tn.1"
- uplevel [list do_test $name $body {}]
-}
do_vmstep_test 1.1.1 {
SELECT * FROM t1 LEFT JOIN t2 WHERE a=c AND d IS NULL;
set L2
}
+# Run SQL and verify that the number of "vmsteps" required is greater
+# than or less than some constant.
+#
+proc do_vmstep_test {tn sql nstep {res {}}} {
+ uplevel [list do_execsql_test $tn.0 $sql $res]
+
+ set vmstep [db status vmstep]
+ if {[string range $nstep 0 0]=="+"} {
+ set body "if {$vmstep<$nstep} {
+ error \"got $vmstep, expected more than [string range $nstep 1 end]\"
+ }"
+ } else {
+ set body "if {$vmstep>$nstep} {
+ error \"got $vmstep, expected less than $nstep\"
+ }"
+ }
+
+ # set name "$tn.vmstep=$vmstep,expect=$nstep"
+ set name "$tn.1"
+ uplevel [list do_test $name $body {}]
+}
+
+
# Either:
#
# do_execsql_test TESTNAME SQL ?RES?