From 77874e782bbee07b2845842f87ac0bed3cc1c86c Mon Sep 17 00:00:00 2001 From: drh <> Date: Mon, 9 May 2022 12:59:16 +0000 Subject: [PATCH 1/4] Simplify a branch in the "*" expansion logic. New test case for an INSTEAD OF trigger on a RIGHT and FULL outer join. FossilOrigin-Name: d2717348f43b571c7bb58498e0c723331abf85de174189e66aca2c438ca26d5f --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/select.c | 2 +- test/joinD.test | 41 +++++++++++++++++++++++++++++++++++++++-- 4 files changed, 48 insertions(+), 11 deletions(-) diff --git a/manifest b/manifest index 7cf52986c1..d7e3c3c844 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Perserve\sthe\srequested\sreserved-bytes\ssize\sfor\sthe\sdatabase\sfile\swhen\ndoing\sa\sVACUUM. -D 2022-05-06T22:29:45.170 +C Simplify\sa\sbranch\sin\sthe\s"*"\sexpansion\slogic.\s\sNew\stest\scase\sfor\san\nINSTEAD\sOF\strigger\son\sa\sRIGHT\sand\sFULL\souter\sjoin. +D 2022-05-09T12:59:16.562 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -553,7 +553,7 @@ F src/printf.c 512574910a45341c8ad244bd3d4939968ebdfde215645b676fff01cc46e90757 F src/random.c 097dc8b31b8fba5a9aca1697aeb9fd82078ec91be734c16bffda620ced7ab83c F src/resolve.c e9ee235c4151d2b7fa47435a219bfd30bf516a804d2f004639858087ebf3137b F src/rowset.c ba9515a922af32abe1f7d39406b9d35730ed65efab9443dc5702693b60854c92 -F src/select.c 151adca2c9ea6f51215e4351bb8eb4f0012bf98c3d5a5c991d4a019c7cbb143e +F src/select.c 625865ad9f8efec6bd3176461c5eeb36c8003f7a5366438d86e3f89f45df1f01 F src/shell.c.in ae0a6fae983caac6f8c824733f0599dfdf7b3a7e8efdef3cb5e3ab2e457ffc35 F src/sqlite.h.in 2a35f62185eb5e7ecc64a2f68442b538ce9be74f80f28a00abc24837edcf1c17 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 @@ -1153,7 +1153,7 @@ F test/join9.test 9056ddd3b0c0f4f9d658f4521038d9a37dc23ead8ca9a505d0b0db2b6a471e F test/joinA.test 7eab225dc1c1ab258a5e62513a4ed7cabbd3db971d59d5d92f4fb6fa14c12f6a F test/joinB.test 1b2ba3fc8568b49411787fccbf540570c148e9b6a53a30f80691cb6268098ded F test/joinC.test 1f1a602c2127f55f136e2cbd3bf2d26546614bf8cffe5902ec1ac9c07f87f207 -F test/joinD.test 58fb0aae651798a2264128f3f6f6ee3c9b5d5548071a1044365511b10de4edd3 +F test/joinD.test 7f0f4dd1f2767330bf1fda5c9cc8a437015a54bcd2355036b4d04ddfc1519d76 F test/journal1.test c7b768041b7f494471531e17abc2f4f5ebf9e5096984f43ed17c4eb80ba34497 F test/journal2.test 9dac6b4ba0ca79c3b21446bbae993a462c2397c4 F test/journal3.test 7c3cf23ffc77db06601c1fcfc9743de8441cb77db9d1aa931863d94f5ffa140e @@ -1953,8 +1953,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 217b33234dc3dc36b5b6add50c170869421057a56a7576d1a61767956248d5c9 -R fb5b71dd78e91f00920386e6c95ee22a +P dac6d87c71606f3ec7ce601be6d17357d323476ecb60dbb167030146783b62b2 +R d81ef2c896b333ba6ad03fd21ef90d06 U drh -Z 5c19e3fe26f9144dbbad9274556b129a +Z 1c1d5a324638d0fbf012275c6ac59a4c # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 80d0655a95..a2209b5b33 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -dac6d87c71606f3ec7ce601be6d17357d323476ecb60dbb167030146783b62b2 \ No newline at end of file +d2717348f43b571c7bb58498e0c723331abf85de174189e66aca2c438ca26d5f \ No newline at end of file diff --git a/src/select.c b/src/select.c index 4ae8f16d1e..232554a914 100644 --- a/src/select.c +++ b/src/select.c @@ -5884,7 +5884,7 @@ static int selectExpander(Walker *pWalker, Select *p){ */ if( pTab->aCol[j].colFlags & (COLFLAG_HIDDEN|COLFLAG_NOEXPAND) ){ if( IsHiddenColumn(&pTab->aCol[j]) - && (selFlags & (SF_IncludeHidden|SF_NestedFrom))==0 + && (selFlags & SF_IncludeHidden)==0 ){ continue; } diff --git a/test/joinD.test b/test/joinD.test index 9ac813ffab..aba1d62800 100644 --- a/test/joinD.test +++ b/test/joinD.test @@ -11,8 +11,8 @@ # # This file implements tests for JOINs that use Bloom filters. # -# The test case output is all generated by PostgreSQL 14. This test module -# was created as follows: +# The test case output is (mostly) all generated by PostgreSQL 14. This +# test module was created as follows: # # 1. Run a TCL script (included at the bottom of this file) that # generates an input script for "psql" that will run man @@ -26,6 +26,9 @@ # # 4. Add this header, and the script content at the footer. # +# A few extra tests that were not generated from postgresql output are +# added at the end. +# set testdir [file dirname $argv0] source $testdir/tester.tcl db nullvalue - @@ -2897,7 +2900,41 @@ do_execsql_test joinD-64 { - - - - - - 200 0 - - - - - - - - - - 300 0 } + +############################################################################# +# The following are extra tests added manually + +do_execsql_test joinD-1000 { + CREATE VIEW v1 AS + SELECT * + FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0 + RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0 + LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0; + CREATE TRIGGER v1r1 INSTEAD OF UPDATE OF c ON v1 BEGIN + UPDATE t1 SET c=new.c WHERE (a,b,c,d) IS (old.a,old.b,old.c,old.d); + UPDATE t3 SET c=new.c WHERE (c,y) IS (old.c,old.y); + END; + SELECT * FROM v1 WHERE y BETWEEN 30 AND 40 ORDER BY y; +} { + 30 130 230 330 130 30 230 30 330 30 + - - - - - - 233 33 - - + 36 136 236 336 136 36 236 36 - - + - - - - - - 239 39 - - +} +do_execsql_test joinD-1010 { + BEGIN; + UPDATE v1 SET c=c+1000 WHERE y BETWEEN 30 and 40; + SELECT * FROM v1 WHERE y BETWEEN 30 AND 40 ORDER BY y; + ROLLBACK; +} { + 30 130 1230 330 130 30 1230 30 330 30 + - - - - - - 233 33 - - + 36 136 1236 336 136 36 1236 36 - - + - - - - - - 239 39 - - +} + finish_test + ############################################################################# # This is the TCL script used to generate the psql script that generated # the data above. From 4077b006adaa157b5c1bb3a6ec751aeca7191baf Mon Sep 17 00:00:00 2001 From: drh <> Date: Mon, 9 May 2022 16:29:53 +0000 Subject: [PATCH 2/4] Add ALWAYS() on two unreachable branches in the * expander. FossilOrigin-Name: 387c852375bba62df040330944c9e979a6993f95ece3443597c5fc66e34263ca --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/select.c | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index d7e3c3c844..9453487b65 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Simplify\sa\sbranch\sin\sthe\s"*"\sexpansion\slogic.\s\sNew\stest\scase\sfor\san\nINSTEAD\sOF\strigger\son\sa\sRIGHT\sand\sFULL\souter\sjoin. -D 2022-05-09T12:59:16.562 +C Add\sALWAYS()\son\stwo\sunreachable\sbranches\sin\sthe\s*\sexpander. +D 2022-05-09T16:29:53.023 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -553,7 +553,7 @@ F src/printf.c 512574910a45341c8ad244bd3d4939968ebdfde215645b676fff01cc46e90757 F src/random.c 097dc8b31b8fba5a9aca1697aeb9fd82078ec91be734c16bffda620ced7ab83c F src/resolve.c e9ee235c4151d2b7fa47435a219bfd30bf516a804d2f004639858087ebf3137b F src/rowset.c ba9515a922af32abe1f7d39406b9d35730ed65efab9443dc5702693b60854c92 -F src/select.c 625865ad9f8efec6bd3176461c5eeb36c8003f7a5366438d86e3f89f45df1f01 +F src/select.c 6c0fba59d2a74bf606065f23e3bb6a8f29106c84f90ec34290ac4245e83b918c F src/shell.c.in ae0a6fae983caac6f8c824733f0599dfdf7b3a7e8efdef3cb5e3ab2e457ffc35 F src/sqlite.h.in 2a35f62185eb5e7ecc64a2f68442b538ce9be74f80f28a00abc24837edcf1c17 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 @@ -1953,8 +1953,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 dac6d87c71606f3ec7ce601be6d17357d323476ecb60dbb167030146783b62b2 -R d81ef2c896b333ba6ad03fd21ef90d06 +P d2717348f43b571c7bb58498e0c723331abf85de174189e66aca2c438ca26d5f +R bfa78738985cc250c9ab2a579702f4b0 U drh -Z 1c1d5a324638d0fbf012275c6ac59a4c +Z 4ad8291fd7545a4052c6d83a014b41b4 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index a2209b5b33..5a40556588 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -d2717348f43b571c7bb58498e0c723331abf85de174189e66aca2c438ca26d5f \ No newline at end of file +387c852375bba62df040330944c9e979a6993f95ece3443597c5fc66e34263ca \ No newline at end of file diff --git a/src/select.c b/src/select.c index 232554a914..7390d24f2b 100644 --- a/src/select.c +++ b/src/select.c @@ -5884,11 +5884,11 @@ static int selectExpander(Walker *pWalker, Select *p){ */ if( pTab->aCol[j].colFlags & (COLFLAG_HIDDEN|COLFLAG_NOEXPAND) ){ if( IsHiddenColumn(&pTab->aCol[j]) - && (selFlags & SF_IncludeHidden)==0 + && ALWAYS((selFlags & SF_IncludeHidden)==0) ){ continue; } - if( (pTab->aCol[j].colFlags & COLFLAG_NOEXPAND)!=0 + if( ALWAYS((pTab->aCol[j].colFlags & COLFLAG_NOEXPAND)!=0) && zTName==0 && (selFlags & (SF_NestedFrom))==0 ){ From f71b8123df5c0d1913e2b5e148c2a26d319f8fde Mon Sep 17 00:00:00 2001 From: drh <> Date: Mon, 9 May 2022 17:55:34 +0000 Subject: [PATCH 3/4] Minor STAT4 test case change due to the ANALYZE enhancement of [eb59c46a5aed69bc|check-in eb59c46a5aed69bc]. FossilOrigin-Name: 8ce2fecb580da53fc01c53d8de10e2cc99499094215429ba925e777717e369b2 --- manifest | 12 ++++++------ manifest.uuid | 2 +- test/analyze9.test | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index 9453487b65..9377830496 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\sALWAYS()\son\stwo\sunreachable\sbranches\sin\sthe\s*\sexpander. -D 2022-05-09T16:29:53.023 +C Minor\sSTAT4\stest\scase\schange\sdue\sto\sthe\sANALYZE\senhancement\sof\n[eb59c46a5aed69bc|check-in\seb59c46a5aed69bc]. +D 2022-05-09T17:55:34.846 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -679,7 +679,7 @@ F test/analyze5.test fa5131952303ac4146aba101b116b9c8cb89e2637531c334a6df7f7d19d F test/analyze6.test 028f5bdfc9e5b5294768fa9a7185b8cd1d019aa7aab5b2f8ee42d7271d9a3b28 F test/analyze7.test 079d17c495e396bdbd6cc6a083112788a6fbfb3b95c42e760e4270a53c9ead8f F test/analyze8.test 29ef237d8a59b39cc31c3310134fefe96a690b195e3deed5ecb652839089f15c -F test/analyze9.test 162cd40d713310fbe7a63a5ecff5d3a013777d86809618838177d9b2af4dd09c +F test/analyze9.test 30e1cb99336045a384a11d97900720184333c88174b3b89bc07444ea39e7df19 F test/analyzeC.test 1111830ad355d29a294a5dda654dd5f6a8622c6a223a4f7b7b3d091df7a7a42b F test/analyzeD.test 485f621cfd2ef0a8f8ac79672586651bfa495bd899db50461bb4b558400ab3c1 F test/analyzeE.test 69d130f9ba78c9853dcd5a18317e81f462a72d704cec0c4c30afb220213acd29 @@ -1953,8 +1953,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 d2717348f43b571c7bb58498e0c723331abf85de174189e66aca2c438ca26d5f -R bfa78738985cc250c9ab2a579702f4b0 +P 387c852375bba62df040330944c9e979a6993f95ece3443597c5fc66e34263ca +R cbb8544fd969bd1dbd19e4e7428f857d U drh -Z 4ad8291fd7545a4052c6d83a014b41b4 +Z 4859f8d06796c35fb9e8207cbbd745d2 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 5a40556588..24609f9f4b 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -387c852375bba62df040330944c9e979a6993f95ece3443597c5fc66e34263ca \ No newline at end of file +8ce2fecb580da53fc01c53d8de10e2cc99499094215429ba925e777717e369b2 \ No newline at end of file diff --git a/test/analyze9.test b/test/analyze9.test index a7f9b5deae..b2121fd07b 100644 --- a/test/analyze9.test +++ b/test/analyze9.test @@ -399,7 +399,7 @@ do_test 9.2 { for {set i 0} {$i < 100} {incr i} { execsql "INSERT INTO t1 VALUES('x', 'y', 'z', $i, [expr $i/2])" } - for {set i 0} {$i < 20} {incr i} { + for {set i 0} {$i < 21} {incr i} { execsql "INSERT INTO t1 VALUES('x', 'y', 'z', 101, $i)" } for {set i 102} {$i < 200} {incr i} { From adef15986a6054a96bb503102327a57b25d64c7d Mon Sep 17 00:00:00 2001 From: drh <> Date: Tue, 10 May 2022 00:24:01 +0000 Subject: [PATCH 4/4] Simplified "hidden" and "no-expand" handling in the *-expander. FossilOrigin-Name: c6c3115f3a008cf9b0d7c5c812f17e38c8a75a904032c5f05f0bea03a7340527 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/select.c | 22 ++++++++++------------ 3 files changed, 17 insertions(+), 19 deletions(-) diff --git a/manifest b/manifest index 9377830496..e7fde4d1c6 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Minor\sSTAT4\stest\scase\schange\sdue\sto\sthe\sANALYZE\senhancement\sof\n[eb59c46a5aed69bc|check-in\seb59c46a5aed69bc]. -D 2022-05-09T17:55:34.846 +C Simplified\s"hidden"\sand\s"no-expand"\shandling\sin\sthe\s*-expander. +D 2022-05-10T00:24:01.438 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -553,7 +553,7 @@ F src/printf.c 512574910a45341c8ad244bd3d4939968ebdfde215645b676fff01cc46e90757 F src/random.c 097dc8b31b8fba5a9aca1697aeb9fd82078ec91be734c16bffda620ced7ab83c F src/resolve.c e9ee235c4151d2b7fa47435a219bfd30bf516a804d2f004639858087ebf3137b F src/rowset.c ba9515a922af32abe1f7d39406b9d35730ed65efab9443dc5702693b60854c92 -F src/select.c 6c0fba59d2a74bf606065f23e3bb6a8f29106c84f90ec34290ac4245e83b918c +F src/select.c cd17de0cab436f0efc4cfeeeef1b8e03c41c40335ec757eff68e341e6a3f763f F src/shell.c.in ae0a6fae983caac6f8c824733f0599dfdf7b3a7e8efdef3cb5e3ab2e457ffc35 F src/sqlite.h.in 2a35f62185eb5e7ecc64a2f68442b538ce9be74f80f28a00abc24837edcf1c17 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 @@ -1953,8 +1953,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 387c852375bba62df040330944c9e979a6993f95ece3443597c5fc66e34263ca -R cbb8544fd969bd1dbd19e4e7428f857d +P 8ce2fecb580da53fc01c53d8de10e2cc99499094215429ba925e777717e369b2 +R 1d734b9b8260c8ccdbe3f05b6dc084ca U drh -Z 4859f8d06796c35fb9e8207cbbd745d2 +Z 5869ac2082a6ad38c03068b658209d1b # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 24609f9f4b..cc85684e99 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -8ce2fecb580da53fc01c53d8de10e2cc99499094215429ba925e777717e369b2 \ No newline at end of file +c6c3115f3a008cf9b0d7c5c812f17e38c8a75a904032c5f05f0bea03a7340527 \ No newline at end of file diff --git a/src/select.c b/src/select.c index 7390d24f2b..b53c0c9151 100644 --- a/src/select.c +++ b/src/select.c @@ -5882,18 +5882,16 @@ static int selectExpander(Walker *pWalker, Select *p){ ** result-set list unless the SELECT has the SF_IncludeHidden ** bit set. */ - if( pTab->aCol[j].colFlags & (COLFLAG_HIDDEN|COLFLAG_NOEXPAND) ){ - if( IsHiddenColumn(&pTab->aCol[j]) - && ALWAYS((selFlags & SF_IncludeHidden)==0) - ){ - continue; - } - if( ALWAYS((pTab->aCol[j].colFlags & COLFLAG_NOEXPAND)!=0) - && zTName==0 - && (selFlags & (SF_NestedFrom))==0 - ){ - continue; - } + if( (p->selFlags & SF_IncludeHidden)==0 + && IsHiddenColumn(&pTab->aCol[j]) + ){ + continue; + } + if( (pTab->aCol[j].colFlags & COLFLAG_NOEXPAND)!=0 + && zTName==0 + && (selFlags & (SF_NestedFrom))==0 + ){ + continue; } tableSeen = 1;