mirror of
https://github.com/sqlite/sqlite.git
synced 2025-11-18 10:21:03 +03:00
Proposed fix for the query planner problem of ticket
[ec32177c99ccac2b1]. FossilOrigin-Name: eef8cbef3c49e6331301a8f3f8a5fd12090b1e99e68487c2d405e53ef771f688
This commit is contained in:
14
manifest
14
manifest
@@ -1,5 +1,5 @@
|
|||||||
C Fix\scompiler\swarnings\sin\szipfile.c.
|
C Proposed\sfix\sfor\sthe\squery\splanner\sproblem\sof\sticket\n[ec32177c99ccac2b1].
|
||||||
D 2018-01-27T03:26:10.457
|
D 2018-01-27T05:40:10.409
|
||||||
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 Makefile.in 7a3f714b4fcf793108042b7b0a5c720b0b310ec84314d61ba7f3f49f27e550ea
|
F Makefile.in 7a3f714b4fcf793108042b7b0a5c720b0b310ec84314d61ba7f3f49f27e550ea
|
||||||
@@ -570,7 +570,7 @@ F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9
|
|||||||
F src/wal.c 5a3f464edd64596f601683ed321d12e6fd93c5fb9afdfb3653d6ffd0fee9c48f
|
F src/wal.c 5a3f464edd64596f601683ed321d12e6fd93c5fb9afdfb3653d6ffd0fee9c48f
|
||||||
F src/wal.h 8de5d2d3de0956d6f6cb48c83a4012d5f227b8fe940f3a349a4b7e85ebcb492a
|
F src/wal.h 8de5d2d3de0956d6f6cb48c83a4012d5f227b8fe940f3a349a4b7e85ebcb492a
|
||||||
F src/walker.c da987a20d40145c0a03c07d8fefcb2ed363becc7680d0500d9c79915591f5b1f
|
F src/walker.c da987a20d40145c0a03c07d8fefcb2ed363becc7680d0500d9c79915591f5b1f
|
||||||
F src/where.c caf0b6c9d31f22f0b2c91aba723858de52b5d665aaa89034099015aaf9bb8219
|
F src/where.c 10c7e13c909e4dc93057fae930733f5018cdf1a040f73b9e873a264edfc101e5
|
||||||
F src/whereInt.h 82c04c5075308abbac59180c8bad5ecb45b07453981f60a53f3c7dee21e1e971
|
F src/whereInt.h 82c04c5075308abbac59180c8bad5ecb45b07453981f60a53f3c7dee21e1e971
|
||||||
F src/wherecode.c cb360c511f69294ddf00340d7b390e6b1d601a1cfb77b42c4d316fe2f4cd01c3
|
F src/wherecode.c cb360c511f69294ddf00340d7b390e6b1d601a1cfb77b42c4d316fe2f4cd01c3
|
||||||
F src/whereexpr.c 22dbfd3bf5f6051a61523dd0ebef7a944fb29ee4aa7d2a62feb8aac6ffbbc0eb
|
F src/whereexpr.c 22dbfd3bf5f6051a61523dd0ebef7a944fb29ee4aa7d2a62feb8aac6ffbbc0eb
|
||||||
@@ -1574,7 +1574,7 @@ F test/whereB.test 0def95db3bdec220a731c7e4bec5930327c1d8c5
|
|||||||
F test/whereC.test cae295158703cb3fc23bf1a108a9ab730efff0f6
|
F test/whereC.test cae295158703cb3fc23bf1a108a9ab730efff0f6
|
||||||
F test/whereD.test 711d4df58d6d4fb9b3f5ce040b818564198be002
|
F test/whereD.test 711d4df58d6d4fb9b3f5ce040b818564198be002
|
||||||
F test/whereE.test b3a055eef928c992b0a33198a7b8dc10eea5ad2f
|
F test/whereE.test b3a055eef928c992b0a33198a7b8dc10eea5ad2f
|
||||||
F test/whereF.test d44b58338fe5ddd7286023e9bedb255aa264a6c4d2168b49591b167371c675c7
|
F test/whereF.test 15552693e5965e096d58a325216bfcf102b6e2b38f4f5a0d64a728c2f3826714
|
||||||
F test/whereG.test dde4c52a97385a55be6a7cd46be8373f0cf35501
|
F test/whereG.test dde4c52a97385a55be6a7cd46be8373f0cf35501
|
||||||
F test/whereH.test e4b07f7a3c2f5d31195cd33710054c78667573b2
|
F test/whereH.test e4b07f7a3c2f5d31195cd33710054c78667573b2
|
||||||
F test/whereI.test eab5b226bbc344ac70d7dc09b963a064860ae6d7
|
F test/whereI.test eab5b226bbc344ac70d7dc09b963a064860ae6d7
|
||||||
@@ -1702,7 +1702,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 7daa687340e475972d6849f84fe1419a1f5700934f53fd80656849adc73d6d04
|
P bed610d99b5322ee209b06966c0086e8c55f8a82be8d7693cfdeb4d728679721
|
||||||
R db0d53a567e4f3bfdfebf8c5b2a2a369
|
R 5bfee097e7e4c4077c4171c76898db44
|
||||||
U drh
|
U drh
|
||||||
Z 1789fd20b7b2fb64dfc10fb2cef79caf
|
Z 3dd05a091b8a00a96f3fbc2c2cb36a31
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
bed610d99b5322ee209b06966c0086e8c55f8a82be8d7693cfdeb4d728679721
|
eef8cbef3c49e6331301a8f3f8a5fd12090b1e99e68487c2d405e53ef771f688
|
||||||
@@ -4631,6 +4631,7 @@ WhereInfo *sqlite3WhereBegin(
|
|||||||
*/
|
*/
|
||||||
for(ii=0; ii<sWLB.pWC->nTerm; ii++){
|
for(ii=0; ii<sWLB.pWC->nTerm; ii++){
|
||||||
WhereTerm *pT = &sWLB.pWC->a[ii];
|
WhereTerm *pT = &sWLB.pWC->a[ii];
|
||||||
|
if( pT->wtFlags & TERM_VIRTUAL ) continue;
|
||||||
if( pT->prereqAll==0 && (nTabList==0 || exprIsDeterministic(pT->pExpr)) ){
|
if( pT->prereqAll==0 && (nTabList==0 || exprIsDeterministic(pT->pExpr)) ){
|
||||||
sqlite3ExprIfFalse(pParse, pT->pExpr, pWInfo->iBreak, SQLITE_JUMPIFNULL);
|
sqlite3ExprIfFalse(pParse, pT->pExpr, pWInfo->iBreak, SQLITE_JUMPIFNULL);
|
||||||
pT->wtFlags |= TERM_CODED;
|
pT->wtFlags |= TERM_CODED;
|
||||||
|
|||||||
@@ -215,4 +215,70 @@ ifcapable json1&&vtab {
|
|||||||
} {{{"foo":"meep","other":12345}}}
|
} {{{"foo":"meep","other":12345}}}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# 2018-01-27
|
||||||
|
# Ticket https://sqlite.org/src/tktview/ec32177c99ccac2b180fd3ea2083
|
||||||
|
# Incorrect result when using the new OR clause factoring optimization
|
||||||
|
#
|
||||||
|
# This is the original test case as reported on the sqlite-users mailing
|
||||||
|
# list
|
||||||
|
#
|
||||||
|
do_execsql_test 7.1 {
|
||||||
|
DROP TABLE IF EXISTS cd;
|
||||||
|
CREATE TABLE cd ( cdid INTEGER PRIMARY KEY NOT NULL, genreid integer );
|
||||||
|
CREATE INDEX cd_idx_genreid ON cd (genreid);
|
||||||
|
INSERT INTO cd ( cdid, genreid ) VALUES
|
||||||
|
( 1, 1 ),
|
||||||
|
( 2, NULL ),
|
||||||
|
( 3, NULL ),
|
||||||
|
( 4, NULL ),
|
||||||
|
( 5, NULL );
|
||||||
|
|
||||||
|
SELECT cdid
|
||||||
|
FROM cd me
|
||||||
|
WHERE 2 > (
|
||||||
|
SELECT COUNT( * )
|
||||||
|
FROM cd rownum__emulation
|
||||||
|
WHERE
|
||||||
|
(
|
||||||
|
me.genreid IS NOT NULL
|
||||||
|
AND
|
||||||
|
rownum__emulation.genreid IS NULL
|
||||||
|
)
|
||||||
|
OR
|
||||||
|
(
|
||||||
|
me.genreid IS NOT NULL
|
||||||
|
AND
|
||||||
|
rownum__emulation.genreid IS NOT NULL
|
||||||
|
AND
|
||||||
|
rownum__emulation.genreid < me.genreid
|
||||||
|
)
|
||||||
|
OR
|
||||||
|
(
|
||||||
|
( me.genreid = rownum__emulation.genreid OR ( me.genreid IS NULL
|
||||||
|
AND rownum__emulation.genreid IS NULL ) )
|
||||||
|
AND
|
||||||
|
rownum__emulation.cdid > me.cdid
|
||||||
|
)
|
||||||
|
);
|
||||||
|
} {4 5}
|
||||||
|
|
||||||
|
# Simplified test cases from the ticket
|
||||||
|
#
|
||||||
|
do_execsql_test 7.2 {
|
||||||
|
DROP TABLE IF EXISTS t1;
|
||||||
|
DROP TABLE IF EXISTS t2;
|
||||||
|
CREATE TABLE t1(a INTEGER PRIMARY KEY, b);
|
||||||
|
INSERT INTO t1(a,b) VALUES(1,1);
|
||||||
|
CREATE TABLE t2(aa INTEGER PRIMARY KEY, bb);
|
||||||
|
INSERT INTO t2(aa,bb) VALUES(1,1),(2,NULL),(3,NULL);
|
||||||
|
SELECT (
|
||||||
|
SELECT COUNT(*) FROM t2
|
||||||
|
WHERE ( t1.b IS NOT NULL AND t2.bb IS NULL )
|
||||||
|
OR ( t2.bb < t1.b )
|
||||||
|
OR ( t1.b IS t2.bb AND t2.aa > t1.a )
|
||||||
|
)
|
||||||
|
FROM t1;
|
||||||
|
} {2}
|
||||||
|
|
||||||
|
|
||||||
finish_test
|
finish_test
|
||||||
|
|||||||
Reference in New Issue
Block a user