mirror of
https://github.com/sqlite/sqlite.git
synced 2025-11-18 10:21:03 +03:00
Fix a bad interaction between constant propagation and transitive term handling causing patterns like "WHERE unlikely(t1.x=t1.y) AND t1.y=?" to return non-matching rows.
FossilOrigin-Name: 2363a14ca723c0343fbe350f6c19787a7a47c2289fd9af136c97a451b53b5226
This commit is contained in:
14
manifest
14
manifest
@@ -1,5 +1,5 @@
|
|||||||
C Add\sextra\stest\scase\sfor\sOOM\shandling\sin\swhere.c.
|
C Fix\sa\sbad\sinteraction\sbetween\sconstant\spropagation\sand\stransitive\sterm\shandling\scausing\spatterns\slike\s"WHERE\sunlikely(t1.x=t1.y)\sAND\st1.y=?"\sto\sreturn\snon-matching\srows.
|
||||||
D 2021-04-15T13:26:29.500
|
D 2021-04-15T19:09:19.856
|
||||||
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
||||||
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
||||||
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
|
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
|
||||||
@@ -629,7 +629,7 @@ F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9
|
|||||||
F src/wal.c 69e770e96fd56cc21608992bf2c6f1f3dc5cf2572d0495c6a643b06c3a679f14
|
F src/wal.c 69e770e96fd56cc21608992bf2c6f1f3dc5cf2572d0495c6a643b06c3a679f14
|
||||||
F src/wal.h c3aa7825bfa2fe0d85bef2db94655f99870a285778baa36307c0a16da32b226a
|
F src/wal.h c3aa7825bfa2fe0d85bef2db94655f99870a285778baa36307c0a16da32b226a
|
||||||
F src/walker.c d42d6c80ea363ef689a462e65eefcfe87deab924c50de5baa37ecb6af7d7ddaa
|
F src/walker.c d42d6c80ea363ef689a462e65eefcfe87deab924c50de5baa37ecb6af7d7ddaa
|
||||||
F src/where.c f388f31a6cb482b685be50acddcea424cc2edb746191716d94084ed0b52b049c
|
F src/where.c a96a99ec5acb186f789d5597249a2c1eb1a8602173fe2fee745be5510f590e27
|
||||||
F src/whereInt.h 446e5e8018f83358ef917cf32d8e6a86dc8430113d0b17e720f1839d3faa44c4
|
F src/whereInt.h 446e5e8018f83358ef917cf32d8e6a86dc8430113d0b17e720f1839d3faa44c4
|
||||||
F src/wherecode.c 8bdc239eae3d39f9f6ace4299eeb86e1e0c56eed88b60f9c473dc85ae79f4e89
|
F src/wherecode.c 8bdc239eae3d39f9f6ace4299eeb86e1e0c56eed88b60f9c473dc85ae79f4e89
|
||||||
F src/whereexpr.c d8cafcf6781cf871082f04d7540862cf0fe30cb381dd1b2145a380376364fe8e
|
F src/whereexpr.c d8cafcf6781cf871082f04d7540862cf0fe30cb381dd1b2145a380376364fe8e
|
||||||
@@ -1755,7 +1755,7 @@ F test/whereC.test cae295158703cb3fc23bf1a108a9ab730efff0f6
|
|||||||
F test/whereD.test c1c335e914e28b122e000e9310f02d2be83e1c9dbca2e29f46bd732703944d1b
|
F test/whereD.test c1c335e914e28b122e000e9310f02d2be83e1c9dbca2e29f46bd732703944d1b
|
||||||
F test/whereE.test 0ac7e61c6225354a980666996539da154991b4325af943a25a9079079c82fb03
|
F test/whereE.test 0ac7e61c6225354a980666996539da154991b4325af943a25a9079079c82fb03
|
||||||
F test/whereF.test 926b65519608e3f2aa28720822b9154fb5c7b13519dd78194f434a511ab3dac5
|
F test/whereF.test 926b65519608e3f2aa28720822b9154fb5c7b13519dd78194f434a511ab3dac5
|
||||||
F test/whereG.test 0a489c891a74500b3994266342785dc12e675ac55ad74935c7c1b70393edf82c
|
F test/whereG.test 8f1a753826d07ed7ae107fbec0d482d348bac6d7edf9db9c5736c06b0b3e9961
|
||||||
F test/whereH.test e4b07f7a3c2f5d31195cd33710054c78667573b2
|
F test/whereH.test e4b07f7a3c2f5d31195cd33710054c78667573b2
|
||||||
F test/whereI.test c4bb7e2ca56d49bd8ab5c7bd085b8b83e353922b46904d68aefb3c7468643581
|
F test/whereI.test c4bb7e2ca56d49bd8ab5c7bd085b8b83e353922b46904d68aefb3c7468643581
|
||||||
F test/whereJ.test fc05e374cc9f2dc204148d6c06822c380ad388895fe97a6d335b94a26a08aecf
|
F test/whereJ.test fc05e374cc9f2dc204148d6c06822c380ad388895fe97a6d335b94a26a08aecf
|
||||||
@@ -1912,7 +1912,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
|
|||||||
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
||||||
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
||||||
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
||||||
P 0e19af72d84f96245cb4a5cfc37232579b6f5fdebd525f8b6515a4f2cc84e273
|
P 7163de3dea0445bf25dba47a54c50f35bb5c7edc7bdae9630b51c1ca970ec6cf
|
||||||
R 80af88ce0f24fd91f696db7dc9e671f3
|
R cdb109bf0cd813339477f712ee9d6153
|
||||||
U dan
|
U dan
|
||||||
Z b81370fc38a26cfbb0e02a050e47c87c
|
Z 0bcb2e3640ff6543fca05af9e2907230
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
7163de3dea0445bf25dba47a54c50f35bb5c7edc7bdae9630b51c1ca970ec6cf
|
2363a14ca723c0343fbe350f6c19787a7a47c2289fd9af136c97a451b53b5226
|
||||||
@@ -261,7 +261,9 @@ static void createMask(WhereMaskSet *pMaskSet, int iCursor){
|
|||||||
*/
|
*/
|
||||||
static Expr *whereRightSubexprIsColumn(Expr *p){
|
static Expr *whereRightSubexprIsColumn(Expr *p){
|
||||||
p = sqlite3ExprSkipCollateAndLikely(p->pRight);
|
p = sqlite3ExprSkipCollateAndLikely(p->pRight);
|
||||||
if( ALWAYS(p!=0) && p->op==TK_COLUMN ) return p;
|
if( ALWAYS(p!=0) && p->op==TK_COLUMN && !ExprHasProperty(p, EP_FixedCol) ){
|
||||||
|
return p;
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -334,4 +334,37 @@ do_execsql_test 10.1 {
|
|||||||
SELECT g = g FROM f GROUP BY h;
|
SELECT g = g FROM f GROUP BY h;
|
||||||
} {1}
|
} {1}
|
||||||
|
|
||||||
|
reset_db
|
||||||
|
do_execsql_test 11.0 {
|
||||||
|
CREATE TABLE t1(x PRIMARY KEY, y);
|
||||||
|
INSERT INTO t1 VALUES('AAA', 'BBB');
|
||||||
|
|
||||||
|
CREATE TABLE t2(z);
|
||||||
|
INSERT INTO t2 VALUES('t2');
|
||||||
|
|
||||||
|
CREATE TABLE t3(x PRIMARY KEY, y);
|
||||||
|
INSERT INTO t3 VALUES('AAA', 'AAA');
|
||||||
|
}
|
||||||
|
|
||||||
|
do_execsql_test 11.1.1 {
|
||||||
|
SELECT * FROM t1 JOIN t2 ON unlikely(x=y) AND y='AAA'
|
||||||
|
}
|
||||||
|
do_execsql_test 11.1.2 {
|
||||||
|
SELECT * FROM t1 JOIN t2 ON likely(x=y) AND y='AAA'
|
||||||
|
}
|
||||||
|
do_execsql_test 11.1.3 {
|
||||||
|
SELECT * FROM t1 JOIN t2 ON x=y AND y='AAA'
|
||||||
|
}
|
||||||
|
|
||||||
|
do_execsql_test 11.2.1 {
|
||||||
|
SELECT * FROM t3 JOIN t2 ON unlikely(x=y) AND y='AAA'
|
||||||
|
} {AAA AAA t2}
|
||||||
|
do_execsql_test 11.2.2 {
|
||||||
|
SELECT * FROM t3 JOIN t2 ON likely(x=y) AND y='AAA'
|
||||||
|
} {AAA AAA t2}
|
||||||
|
do_execsql_test 11.2.3 {
|
||||||
|
SELECT * FROM t3 JOIN t2 ON x=y AND y='AAA'
|
||||||
|
} {AAA AAA t2}
|
||||||
|
|
||||||
|
|
||||||
finish_test
|
finish_test
|
||||||
|
|||||||
Reference in New Issue
Block a user