mirror of
https://github.com/sqlite/sqlite.git
synced 2025-11-11 01:42:22 +03:00
Fix an issue with the OmitNoopJoin optimization and add test cases that
are specifically for that optimization. FossilOrigin-Name: 5480d124b74c9adaacc4fa9cb81560865b44f3e1
This commit is contained in:
16
manifest
16
manifest
@@ -1,5 +1,5 @@
|
|||||||
C Refactor\sthe\sVdbe.noIO\sfield\sas\sVdbe.bIsReader.\sThe\smeaning\sis\sinverted.
|
C Fix\san\sissue\swith\sthe\sOmitNoopJoin\soptimization\sand\sadd\stest\scases\sthat\nare\sspecifically\sfor\sthat\soptimization.
|
||||||
D 2013-06-28T01:24:57.868
|
D 2013-06-28T13:43:33.738
|
||||||
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
|
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
|
||||||
F Makefile.in 5e41da95d92656a5004b03d3576e8b226858a28e
|
F Makefile.in 5e41da95d92656a5004b03d3576e8b226858a28e
|
||||||
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
|
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
|
||||||
@@ -226,7 +226,7 @@ F src/sqliteLimit.h 164b0e6749d31e0daa1a4589a169d31c0dec7b3d
|
|||||||
F src/status.c bedc37ec1a6bb9399944024d63f4c769971955a9
|
F src/status.c bedc37ec1a6bb9399944024d63f4c769971955a9
|
||||||
F src/table.c 2cd62736f845d82200acfa1287e33feb3c15d62e
|
F src/table.c 2cd62736f845d82200acfa1287e33feb3c15d62e
|
||||||
F src/tclsqlite.c b8835978e853a89bf58de88acc943a5ca94d752e
|
F src/tclsqlite.c b8835978e853a89bf58de88acc943a5ca94d752e
|
||||||
F src/test1.c 06bd01f7795bbef4aaf59d3b9fe5b3131a6ef642
|
F src/test1.c 340156a7e65537ab0c22e14bccdf243b898f7e54
|
||||||
F src/test2.c 7355101c085304b90024f2261e056cdff13c6c35
|
F src/test2.c 7355101c085304b90024f2261e056cdff13c6c35
|
||||||
F src/test3.c 1c0e5d6f080b8e33c1ce8b3078e7013fdbcd560c
|
F src/test3.c 1c0e5d6f080b8e33c1ce8b3078e7013fdbcd560c
|
||||||
F src/test4.c 9b32d22f5f150abe23c1830e2057c4037c45b3df
|
F src/test4.c 9b32d22f5f150abe23c1830e2057c4037c45b3df
|
||||||
@@ -290,7 +290,7 @@ F src/vtab.c b05e5f1f4902461ba9f5fc49bb7eb7c3a0741a83
|
|||||||
F src/wal.c 7dc3966ef98b74422267e7e6e46e07ff6c6eb1b4
|
F src/wal.c 7dc3966ef98b74422267e7e6e46e07ff6c6eb1b4
|
||||||
F src/wal.h df01efe09c5cb8c8e391ff1715cca294f89668a4
|
F src/wal.h df01efe09c5cb8c8e391ff1715cca294f89668a4
|
||||||
F src/walker.c 4fa43583d0a84b48f93b1e88f11adf2065be4e73
|
F src/walker.c 4fa43583d0a84b48f93b1e88f11adf2065be4e73
|
||||||
F src/where.c 9bcfcb4ec6a14dd0111bf287bee02be88d5709f9
|
F src/where.c 69c39db2381017959e89a492a71535caefc662ca
|
||||||
F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
|
F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
|
||||||
F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2
|
F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2
|
||||||
F test/aggnested.test 45c0201e28045ad38a530b5a144b73cd4aa2cfd6
|
F test/aggnested.test 45c0201e28045ad38a530b5a144b73cd4aa2cfd6
|
||||||
@@ -1034,7 +1034,7 @@ F test/walslow.test e7be6d9888f83aa5d3d3c7c08aa9b5c28b93609a
|
|||||||
F test/walthread.test de8dbaf6d9e41481c460ba31ca61e163d7348f8e
|
F test/walthread.test de8dbaf6d9e41481c460ba31ca61e163d7348f8e
|
||||||
F test/where.test da54153a4c1571ea1b95659e5bec8119edf786aa
|
F test/where.test da54153a4c1571ea1b95659e5bec8119edf786aa
|
||||||
F test/where2.test dcf0ffafe0de55051c1373835a5a57aee6b50094
|
F test/where2.test dcf0ffafe0de55051c1373835a5a57aee6b50094
|
||||||
F test/where3.test 157071521ceabc06bfd4d37106e4270a8956364d
|
F test/where3.test a0682ba3dc8c8f46ffcc95a3d9f58c4327fc129f
|
||||||
F test/where4.test e9b9e2f2f98f00379e6031db6a6fca29bae782a2
|
F test/where4.test e9b9e2f2f98f00379e6031db6a6fca29bae782a2
|
||||||
F test/where5.test fdf66f96d29a064b63eb543e28da4dfdccd81ad2
|
F test/where5.test fdf66f96d29a064b63eb543e28da4dfdccd81ad2
|
||||||
F test/where6.test 5da5a98cec820d488e82708301b96cb8c18a258b
|
F test/where6.test 5da5a98cec820d488e82708301b96cb8c18a258b
|
||||||
@@ -1098,7 +1098,7 @@ F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
|
|||||||
F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381
|
F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381
|
||||||
F tool/wherecosttest.c f407dc4c79786982a475261866a161cd007947ae
|
F tool/wherecosttest.c f407dc4c79786982a475261866a161cd007947ae
|
||||||
F tool/win/sqlite.vsix 97894c2790eda7b5bce3cc79cb2a8ec2fde9b3ac
|
F tool/win/sqlite.vsix 97894c2790eda7b5bce3cc79cb2a8ec2fde9b3ac
|
||||||
P 14f796963474350e7aee8d3757acd3315fe78e4f
|
P 59f98c5c241e5a61cd5b6d0e69b55a6b44c5cafc
|
||||||
R fe26d24ee74e8945b518975ca34639ae
|
R 368bf30a2a407b15b250050c0cce7dc4
|
||||||
U drh
|
U drh
|
||||||
Z 103752d0a887c9636df5a0b29ea996df
|
Z 98db0c7caabc51789d3df033fefb950b
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
59f98c5c241e5a61cd5b6d0e69b55a6b44c5cafc
|
5480d124b74c9adaacc4fa9cb81560865b44f3e1
|
||||||
24
src/test1.c
24
src/test1.c
@@ -5959,15 +5959,19 @@ static int optimization_control(
|
|||||||
const char *zOptName;
|
const char *zOptName;
|
||||||
int mask;
|
int mask;
|
||||||
} aOpt[] = {
|
} aOpt[] = {
|
||||||
{ "all", SQLITE_AllOpts },
|
{ "all", SQLITE_AllOpts },
|
||||||
{ "query-flattener", SQLITE_QueryFlattener },
|
{ "none", 0 },
|
||||||
{ "column-cache", SQLITE_ColumnCache },
|
{ "query-flattener", SQLITE_QueryFlattener },
|
||||||
{ "groupby-order", SQLITE_GroupByOrder },
|
{ "column-cache", SQLITE_ColumnCache },
|
||||||
{ "factor-constants", SQLITE_FactorOutConst },
|
{ "groupby-order", SQLITE_GroupByOrder },
|
||||||
{ "real-as-int", SQLITE_IdxRealAsInt },
|
{ "factor-constants", SQLITE_FactorOutConst },
|
||||||
{ "distinct-opt", SQLITE_DistinctOpt },
|
{ "real-as-int", SQLITE_IdxRealAsInt },
|
||||||
{ "cover-idx-scan", SQLITE_CoverIdxScan },
|
{ "distinct-opt", SQLITE_DistinctOpt },
|
||||||
{ "order-by-idx-join",SQLITE_OrderByIdxJoin },
|
{ "cover-idx-scan", SQLITE_CoverIdxScan },
|
||||||
|
{ "order-by-idx-join", SQLITE_OrderByIdxJoin },
|
||||||
|
{ "transitive", SQLITE_Transitive },
|
||||||
|
{ "subquery-coroutine", SQLITE_SubqCoroutine },
|
||||||
|
{ "omit-noop-join", SQLITE_OmitNoopJoin },
|
||||||
};
|
};
|
||||||
|
|
||||||
if( objc!=4 ){
|
if( objc!=4 ){
|
||||||
@@ -5988,7 +5992,7 @@ static int optimization_control(
|
|||||||
Tcl_AppendResult(interp, "unknown optimization - should be one of:",
|
Tcl_AppendResult(interp, "unknown optimization - should be one of:",
|
||||||
(char*)0);
|
(char*)0);
|
||||||
for(i=0; i<sizeof(aOpt)/sizeof(aOpt[0]); i++){
|
for(i=0; i<sizeof(aOpt)/sizeof(aOpt[0]); i++){
|
||||||
Tcl_AppendResult(interp, " ", aOpt[i].zOptName);
|
Tcl_AppendResult(interp, " ", aOpt[i].zOptName, (char*)0);
|
||||||
}
|
}
|
||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
|
|||||||
10
src/where.c
10
src/where.c
@@ -5796,6 +5796,7 @@ WhereInfo *sqlite3WhereBegin(
|
|||||||
Bitmask tabUsed = exprListTableUsage(pMaskSet, pResultSet);
|
Bitmask tabUsed = exprListTableUsage(pMaskSet, pResultSet);
|
||||||
if( pOrderBy ) tabUsed |= exprListTableUsage(pMaskSet, pOrderBy);
|
if( pOrderBy ) tabUsed |= exprListTableUsage(pMaskSet, pOrderBy);
|
||||||
while( pWInfo->nLevel>=2 ){
|
while( pWInfo->nLevel>=2 ){
|
||||||
|
WhereTerm *pTerm, *pEnd;
|
||||||
pLoop = pWInfo->a[pWInfo->nLevel-1].pWLoop;
|
pLoop = pWInfo->a[pWInfo->nLevel-1].pWLoop;
|
||||||
if( (pWInfo->pTabList->a[pLoop->iTab].jointype & JT_LEFT)==0 ) break;
|
if( (pWInfo->pTabList->a[pLoop->iTab].jointype & JT_LEFT)==0 ) break;
|
||||||
if( (wctrlFlags & WHERE_WANT_DISTINCT)==0
|
if( (wctrlFlags & WHERE_WANT_DISTINCT)==0
|
||||||
@@ -5804,6 +5805,15 @@ WhereInfo *sqlite3WhereBegin(
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if( (tabUsed & pLoop->maskSelf)!=0 ) break;
|
if( (tabUsed & pLoop->maskSelf)!=0 ) break;
|
||||||
|
pEnd = sWLB.pWC->a + sWLB.pWC->nTerm;
|
||||||
|
for(pTerm=sWLB.pWC->a; pTerm<pEnd; pTerm++){
|
||||||
|
if( (pTerm->prereqAll & pLoop->maskSelf)!=0
|
||||||
|
&& !ExprHasProperty(pTerm->pExpr, EP_FromJoin)
|
||||||
|
){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if( pTerm<pEnd ) break;
|
||||||
WHERETRACE(0xffff, ("-> drop loop %c not used\n", pLoop->cId));
|
WHERETRACE(0xffff, ("-> drop loop %c not used\n", pLoop->cId));
|
||||||
pWInfo->nLevel--;
|
pWInfo->nLevel--;
|
||||||
nTabList--;
|
nTabList--;
|
||||||
|
|||||||
@@ -436,5 +436,48 @@ foreach predicate {
|
|||||||
} {1 w-one x-one y-one z-one 9 w-nine x-nine y-nine z-nine}
|
} {1 w-one x-one y-one z-one 9 w-nine x-nine y-nine z-nine}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
do_execsql_test where3-7-setup {
|
||||||
|
CREATE TABLE t71(x1 INTEGER PRIMARY KEY, y1);
|
||||||
|
CREATE TABLE t72(x2 INTEGER PRIMARY KEY, y2);
|
||||||
|
CREATE TABLE t73(x3, y3);
|
||||||
|
CREATE TABLE t74(x4, y4);
|
||||||
|
INSERT INTO t71 VALUES(123,234);
|
||||||
|
INSERT INTO t72 VALUES(234,345);
|
||||||
|
INSERT INTO t73 VALUES(123,234);
|
||||||
|
INSERT INTO t74 VALUES(234,345);
|
||||||
|
INSERT INTO t74 VALUES(234,678);
|
||||||
|
} {}
|
||||||
|
foreach disabled_opt {none omit-noop-join all} {
|
||||||
|
optimization_control db all 1
|
||||||
|
optimization_control db $disabled_opt 0
|
||||||
|
do_execsql_test where3-7.$disabled_opt.1 {
|
||||||
|
SELECT x1 FROM t71 LEFT JOIN t72 ON x2=y1;
|
||||||
|
} {123}
|
||||||
|
do_execsql_test where3-7.$disabled_opt.2 {
|
||||||
|
SELECT x1 FROM t71 LEFT JOIN t72 ON x2=y1 WHERE y2 IS NULL;
|
||||||
|
} {}
|
||||||
|
do_execsql_test where3-7.$disabled_opt.3 {
|
||||||
|
SELECT x1 FROM t71 LEFT JOIN t72 ON x2=y1 WHERE y2 IS NOT NULL;
|
||||||
|
} {123}
|
||||||
|
do_execsql_test where3-7.$disabled_opt.4 {
|
||||||
|
SELECT x1 FROM t71 LEFT JOIN t72 ON x2=y1 AND y2 IS NULL;
|
||||||
|
} {123}
|
||||||
|
do_execsql_test where3-7.$disabled_opt.5 {
|
||||||
|
SELECT x1 FROM t71 LEFT JOIN t72 ON x2=y1 AND y2 IS NOT NULL;
|
||||||
|
} {123}
|
||||||
|
do_execsql_test where3-7.$disabled_opt.6 {
|
||||||
|
SELECT x3 FROM t73 LEFT JOIN t72 ON x2=y3;
|
||||||
|
} {123}
|
||||||
|
do_execsql_test where3-7.$disabled_opt.7 {
|
||||||
|
SELECT DISTINCT x3 FROM t73 LEFT JOIN t72 ON x2=y3;
|
||||||
|
} {123}
|
||||||
|
do_execsql_test where3-7.$disabled_opt.8 {
|
||||||
|
SELECT x3 FROM t73 LEFT JOIN t74 ON x4=y3;
|
||||||
|
} {123 123}
|
||||||
|
do_execsql_test where3-7.$disabled_opt.9 {
|
||||||
|
SELECT DISTINCT x3 FROM t73 LEFT JOIN t74 ON x4=y3;
|
||||||
|
} {123}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
finish_test
|
finish_test
|
||||||
|
|||||||
Reference in New Issue
Block a user