From 1ad93a003d9666f9efdbf20f4f4f810d46f43830 Mon Sep 17 00:00:00 2001 From: drh Date: Wed, 2 Nov 2016 02:17:52 +0000 Subject: [PATCH] Use NOT NULL partial indexes when the query is constrained by a single LIKE or GLOB. FossilOrigin-Name: 9b3a3b41b59a7ce7d3dd82c7402d6fdc6a5ca43c --- manifest | 15 +++++++-------- manifest.uuid | 2 +- src/expr.c | 9 ++++----- 3 files changed, 12 insertions(+), 14 deletions(-) diff --git a/manifest b/manifest index 66d4767d33..d5880b1fb9 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\sthe\sSQLITE_DBCONFIG_NO_CKPT_ON_CLOSE\ssqlite3_dbconfig()\soption\s-\sfor\ndisabling\sSQLite's\sdefault\scheckpoint-on-close\sbehaviour. -D 2016-10-31T16:49:18.127 +C Use\sNOT\sNULL\spartial\sindexes\swhen\sthe\squery\sis\sconstrained\sby\sa\ssingle\nLIKE\sor\sGLOB. +D 2016-11-02T02:17:52.919 F Makefile.in 6fd48ffcf7c2deea7499062d1f3747f986c19678 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc 5151cc64c4c05f3455f4f692ad11410a810d937f @@ -340,7 +340,7 @@ F src/ctime.c a2a52d6e353f459d8ab0f07321f60fafa47d5421 F src/date.c 95c9a8d00767e7221a8e9a31f4e913fc8029bf6b F src/dbstat.c 19ee7a4e89979d4df8e44cfac7a8f905ec89b77d F src/delete.c cb3f6300df24c26c609778b2731f82644b5532ec -F src/expr.c aac0b8d39373ce8f1d47829ce12c3d7af90c46a6 +F src/expr.c ce7110980fac6dfdfbe1e393443bdb79bad29339 F src/fault.c 160a0c015b6c2629d3899ed2daf63d75754a32bb F src/fkey.c b9ca262f6ad4d030a3cab737ebf9b0b3c8b4ac80 F src/func.c 29cc9acb170ec1387b9f63eb52cd85f8de96c771 @@ -1529,8 +1529,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 6374978e8f1ac091394a9f5a1896be92af658bcd 093d2fc2288b75c15ccf877bfa0e622d3918a562 -R f901fbda939dcfa6ff6d756b39418ee6 -T +closed 093d2fc2288b75c15ccf877bfa0e622d3918a562 -U dan -Z 5d42ae70ac4da1275b3f1c98c68ab01c +P 6d142025c74f66f2d48155354b556cd5b2682cb2 +R 6a21c44879153ad3b8a90965de65b693 +U drh +Z 3251c60dbcdf547bbc5e5373f62e3557 diff --git a/manifest.uuid b/manifest.uuid index 7b3b4972d7..eabbb7dbc2 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -6d142025c74f66f2d48155354b556cd5b2682cb2 \ No newline at end of file +9b3a3b41b59a7ce7d3dd82c7402d6fdc6a5ca43c \ No newline at end of file diff --git a/src/expr.c b/src/expr.c index 6d2ec437ff..c2b9c8fe46 100644 --- a/src/expr.c +++ b/src/expr.c @@ -4600,11 +4600,10 @@ int sqlite3ExprImpliesExpr(Expr *pE1, Expr *pE2, int iTab){ ){ return 1; } - if( pE2->op==TK_NOTNULL - && sqlite3ExprCompare(pE1->pLeft, pE2->pLeft, iTab)==0 - && (pE1->op!=TK_ISNULL && pE1->op!=TK_IS) - ){ - return 1; + if( pE2->op==TK_NOTNULL && pE1->op!=TK_ISNULL && pE1->op!=TK_IS ){ + Expr *pX = sqlite3ExprSkipCollate(pE1->pLeft); + testcase( pX!=pE1->pLeft ); + if( sqlite3ExprCompare(pX, pE2->pLeft, iTab)==0 ) return 1; } return 0; } -- 2.47.2