The fix at [cab9b4cccd13bf0a] was incomplete, as demonstrated by
[forum:/forumpost/57bdf2217d|forum post 57bdf2217d]. This check-in should complete the fix. FossilOrigin-Name: fb0a23b6789da8e934562ce9ebd9d58ea13a10fd10dee5cbfc7ac8f394e1aeec
This commit is contained in:
parent
1d49768151
commit
ae8776e092
@ -733,4 +733,18 @@ do_execsql_test 19.1 {
|
||||
SELECT v0.x FROM v0, rt0 WHERE v0.x = rt0.b;
|
||||
} {0.0}
|
||||
|
||||
# 2022-06-20 https://sqlite.org/forum/forumpost/57bdf2217d
|
||||
#
|
||||
reset_db
|
||||
do_execsql_test 20.0 {
|
||||
CREATE VIRTUAL TABLE rt0 USING rtree(id, x0, x1);
|
||||
CREATE TABLE t0(a INT);
|
||||
CREATE TABLE t1(b INT);
|
||||
INSERT INTO rt0 VALUES(0, 0, 0);
|
||||
SELECT * FROM t1 JOIN t0 ON x0>a RIGHT JOIN rt0 ON true WHERE +x0 = 0;
|
||||
} {}
|
||||
do_execsql_test 20.1 {
|
||||
SELECT * FROM t1 JOIN t0 ON x0>a RIGHT JOIN rt0 ON true WHERE x0 = 0;
|
||||
} {}
|
||||
|
||||
finish_test
|
||||
|
16
manifest
16
manifest
@ -1,5 +1,5 @@
|
||||
C Follow-up\sto\scheck-in\s[0057bbb508e7662b]\s-\sensure\sthat\sthe\sdatabase\spage\nhas\sbeen\sinitialized\sprior\sto\scontinuing\swith\sthe\soptimization.\s\sIf\sthe\spage\nis\snot\sinitialized,\sthat\sindicates\sthat\sthe\sdatabase\sis\scorrupt.\ndbsqlfuzz\s09ee46becd5e6d1b2a55c9f8ad767335a90aadb0.
|
||||
D 2022-06-19T16:55:07.534
|
||||
C The\sfix\sat\s[cab9b4cccd13bf0a]\swas\sincomplete,\sas\sdemonstrated\sby\n[forum:/forumpost/57bdf2217d|forum\spost\s57bdf2217d].\s\sThis\scheck-in\nshould\scomplete\sthe\sfix.
|
||||
D 2022-06-20T12:42:28.345
|
||||
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
||||
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
||||
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
|
||||
@ -416,7 +416,7 @@ F ext/rtree/README 6315c0d73ebf0ec40dedb5aa0e942bc8b54e3761
|
||||
F ext/rtree/geopoly.c cc3f89c11abcf114fa60d74709ae8b5bc1eae5a261b30bc1bb7085089c03bfab
|
||||
F ext/rtree/rtree.c d7b4b8b81d8d54376a7f81de5be85ec58b37c11604bcf42984a8418b34158d93
|
||||
F ext/rtree/rtree.h 4a690463901cb5e6127cf05eb8e642f127012fd5003830dbc974eca5802d9412
|
||||
F ext/rtree/rtree1.test 35c3bc0def71317b7601ee0d1149e7df2cd8fc4f13ec89a64761ac3f46ca123f
|
||||
F ext/rtree/rtree1.test 70c092dcf34716b64edc9dbab171790322aa87b89a48f7437b8b4c7b466449c4
|
||||
F ext/rtree/rtree2.test 9d9deddbb16fd0c30c36e6b4fdc3ee3132d765567f0f9432ee71e1303d32603d
|
||||
F ext/rtree/rtree3.test 4ee5d7df86040efe3d8d84f141f2962a7745452200a7cba1db06f86d97050499
|
||||
F ext/rtree/rtree4.test 304de65d484540111b896827e4261815e5dca4ce28eeecd58be648cd73452c4b
|
||||
@ -570,7 +570,7 @@ F src/printf.c 6166a30417b05c5b2f82e1f183f75faa2926ad60531c0b688a57dbc951441a20
|
||||
F src/random.c 097dc8b31b8fba5a9aca1697aeb9fd82078ec91be734c16bffda620ced7ab83c
|
||||
F src/resolve.c a4eb3c617027fd049b07432f3b942ea7151fa793a332a11a7d0f58c9539e104f
|
||||
F src/rowset.c ba9515a922af32abe1f7d39406b9d35730ed65efab9443dc5702693b60854c92
|
||||
F src/select.c ee3113de67330163a35307eacb4188b6778fcae1e2d2f738a9dda2daa0346e24
|
||||
F src/select.c e3181898cc05e8a78195f1792f170760df49262d6267dcaa834160900aab7d37
|
||||
F src/shell.c.in 08e59f1cb9d9b1180aba52861aaada0c95f6ddd210488719684e160a0724c806
|
||||
F src/sqlite.h.in 172528c287399a34f188154017b7268bf82c6d5b780902e361958d2318c4e37c
|
||||
F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
|
||||
@ -1168,7 +1168,7 @@ F test/join4.test 1a352e4e267114444c29266ce79e941af5885916
|
||||
F test/join5.test d22b6cba8fb59ab3f1c82701434c360705eb12d4ce200c449f37b018fc47681a
|
||||
F test/join6.test f809c025fa253f9e150c0e9afd4cef8813257bceeb6f46e04041228c9403cc2c
|
||||
F test/join7.test 2268dcbb54b724391dda3748ea95c60d960607ffeed67885675998e7117697f6
|
||||
F test/join8.test e3c8ca1419e3519596a7ef129246ed118d2508b1ebb69ea83b51ea0eda32037c
|
||||
F test/join8.test c839d7cd4704b600468fd4d82d92bfe3eac67623c41dbfb99f804cdad7a3846e
|
||||
F test/join9.test 9056ddd3b0c0f4f9d658f4521038d9a37dc23ead8ca9a505d0b0db2b6a471e05
|
||||
F test/joinA.test 7eab225dc1c1ab258a5e62513a4ed7cabbd3db971d59d5d92f4fb6fa14c12f6a
|
||||
F test/joinB.test 1b2ba3fc8568b49411787fccbf540570c148e9b6a53a30f80691cb6268098ded
|
||||
@ -1978,8 +1978,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 66ca729bbbf37cb7ff8eb12f51429e0c0833bd5d3f0ef20a1eaeeb10820713c2
|
||||
R fa8846316014c6162dbcbfd1faaeecc9
|
||||
P 11162446f12ae3af6e4a63bb5c374129b2505f6006f91d4028c7165f05fe9651
|
||||
R e2f301053cf79999e11ddef561e846ed
|
||||
U drh
|
||||
Z fcfd6ea1142ee132e30beeda028c95e6
|
||||
Z 238d98417a47860062f9a4d41505b756
|
||||
# Remove this line to create a well-formed Fossil manifest.
|
||||
|
@ -1 +1 @@
|
||||
11162446f12ae3af6e4a63bb5c374129b2505f6006f91d4028c7165f05fe9651
|
||||
fb0a23b6789da8e934562ce9ebd9d58ea13a10fd10dee5cbfc7ac8f394e1aeec
|
18
src/select.c
18
src/select.c
@ -4666,6 +4666,8 @@ struct WhereConst {
|
||||
int nConst; /* Number for COLUMN=CONSTANT terms */
|
||||
int nChng; /* Number of times a constant is propagated */
|
||||
int bHasAffBlob; /* At least one column in apExpr[] as affinity BLOB */
|
||||
u32 mExcludeOn; /* Which ON expressions to exclude from considertion.
|
||||
** Either EP_OuterON or EP_InnerON|EP_OuterON */
|
||||
Expr **apExpr; /* [i*2] is COLUMN and [i*2+1] is VALUE */
|
||||
};
|
||||
|
||||
@ -4728,7 +4730,7 @@ static void constInsert(
|
||||
static void findConstInWhere(WhereConst *pConst, Expr *pExpr){
|
||||
Expr *pRight, *pLeft;
|
||||
if( NEVER(pExpr==0) ) return;
|
||||
if( ExprHasProperty(pExpr, EP_OuterON|EP_InnerON) ){
|
||||
if( ExprHasProperty(pExpr, pConst->mExcludeOn) ){
|
||||
testcase( ExprHasProperty(pExpr, EP_OuterON) );
|
||||
testcase( ExprHasProperty(pExpr, EP_InnerON) );
|
||||
return;
|
||||
@ -4768,9 +4770,10 @@ static int propagateConstantExprRewriteOne(
|
||||
int i;
|
||||
if( pConst->pOomFault[0] ) return WRC_Prune;
|
||||
if( pExpr->op!=TK_COLUMN ) return WRC_Continue;
|
||||
if( ExprHasProperty(pExpr, EP_FixedCol|EP_OuterON) ){
|
||||
if( ExprHasProperty(pExpr, EP_FixedCol|pConst->mExcludeOn) ){
|
||||
testcase( ExprHasProperty(pExpr, EP_FixedCol) );
|
||||
testcase( ExprHasProperty(pExpr, EP_OuterON) );
|
||||
testcase( ExprHasProperty(pExpr, EP_InnerON) );
|
||||
return WRC_Continue;
|
||||
}
|
||||
for(i=0; i<pConst->nConst; i++){
|
||||
@ -4894,6 +4897,17 @@ static int propagateConstants(
|
||||
x.nChng = 0;
|
||||
x.apExpr = 0;
|
||||
x.bHasAffBlob = 0;
|
||||
if( ALWAYS(p->pSrc!=0)
|
||||
&& p->pSrc->nSrc>0
|
||||
&& (p->pSrc->a[0].fg.jointype & JT_LTORJ)!=0
|
||||
){
|
||||
/* Do not propagate constants on any ON clause if there is a
|
||||
** RIGHT JOIN anywhere in the query */
|
||||
x.mExcludeOn = EP_InnerON | EP_OuterON;
|
||||
}else{
|
||||
/* Do not propagate constants through the ON clause of a LEFT JOIN */
|
||||
x.mExcludeOn = EP_OuterON;
|
||||
}
|
||||
findConstInWhere(&x, p->pWhere);
|
||||
if( x.nConst ){
|
||||
memset(&w, 0, sizeof(w));
|
||||
|
@ -661,6 +661,7 @@ do_execsql_test join8-20060 {
|
||||
# https://sqlite.org/forum/forumpost/8e4c352937e82929
|
||||
#
|
||||
# Do not allow constant propagation between ON and WHERE clause terms.
|
||||
# (Updated 2022-06-20) See also https://sqlite.org/forum/forumpost/57bdf2217d
|
||||
#
|
||||
reset_db
|
||||
do_execsql_test join8-21000 {
|
||||
@ -674,6 +675,21 @@ do_execsql_test join8-21010 {
|
||||
do_execsql_test join8-22020 {
|
||||
SELECT * FROM t1 JOIN t3 ON (b=TRUE) RIGHT JOIN t2 ON TRUE WHERE (b IS TRUE);
|
||||
} {}
|
||||
do_execsql_test join8-22030 {
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t2;
|
||||
DROP TABLE t3;
|
||||
CREATE TABLE t1(a INT);
|
||||
CREATE TABLE t2(b INT);
|
||||
CREATE TABLE t3(c INTEGER PRIMARY KEY, d INT);
|
||||
CREATE INDEX t3d ON t3(d);
|
||||
INSERT INTO t3 VALUES(0, 0);
|
||||
SELECT * FROM t1 JOIN t2 ON d>b RIGHT JOIN t3 ON true WHERE +d = 0;
|
||||
} {}
|
||||
do_execsql_test join8-22040 {
|
||||
SELECT * FROM t1 JOIN t2 ON d>b RIGHT JOIN t3 ON true WHERE d = 0;
|
||||
} {}
|
||||
|
||||
|
||||
# 2022-06-10
|
||||
# https://sqlite.org/forum/forumpost/51e6959f61
|
||||
|
Loading…
x
Reference in New Issue
Block a user