diff --git a/manifest b/manifest index 5325f93076..8bd0968857 100644 --- a/manifest +++ b/manifest @@ -1,8 +1,8 @@ -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 -C Change\sthe\sSHM\sVFS\slogic\sin\sos_unix.c\sso\sthat\sit\sdoes\snot\shold\san\sexclusive\nlock\sn\sthe\smapped\smemory\swhen\salso\sholding\sa\sCHECKPOINT\slock.\s\sThis\nimproves\sconcurrency\sbetween\sreaders\sand\scheckpointers. -D 2010-04-30T17:47:51 +C Merge\sin\schanges\sfrom\sthe\strunk. +D 2010-04-30T22:28:06 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0 F Makefile.in d83a0ffef3dcbfb08b410a6c6dd6c009ec9167fb F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654 @@ -227,7 +227,7 @@ F src/vtab.c a0f8a40274e4261696ef57aa806de2776ab72cda F src/wal.c 2115a90d42e1cc14c0f196677609f6c9b32afec7 F src/wal.h c3f347ba8f1cde46d9bcc6fedaf3ed0aa4b53294 F src/walker.c 3112bb3afe1d85dc52317cb1d752055e9a781f8f -F src/where.c faadd9c2bf08868e5135192b44e0d753e363a885 +F src/where.c 75fee9e255b62f773fcadd1d1f25b6f63ac7a356 F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2 F test/alias.test 4529fbc152f190268a15f9384a5651bbbabc9d87 F test/all.test 14165b3e32715b700b5f0cbf8f6e3833dda0be45 @@ -769,7 +769,7 @@ F test/walmode.test 40119078da084e6a7403ba57485d5a86ee0e2646 F test/walslow.test 38076d5fad49e3678027be0f8110e6a32d531dc2 F test/walthread.test c9c3b5d19eeb4968254d93f61a7ccd6e8b63f554 F test/where.test de337a3fe0a459ec7c93db16a519657a90552330 -F test/where2.test 45eacc126aabb37959a387aa83e59ce1f1f03820 +F test/where2.test 43d4becaf5a5df854e6c21d624a1cb84c6904554 F test/where3.test aa44a9b29e8c9f3d7bb94a3bb3a95b31627d520d F test/where4.test e9b9e2f2f98f00379e6031db6a6fca29bae782a2 F test/where5.test fdf66f96d29a064b63eb543e28da4dfdccd81ad2 @@ -811,14 +811,14 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f -P a012aed498bf41a5f6f3006182b0c4c2ab0fe1bb -R 8c6bff1c20fef6364d82d75506d94733 +P 8660cda6f8ef43bd276897ef3b5fc2376b5684dc 946e06cd2a2cc209b0786b7e9d28c0746320d646 +R 34e37e2e07b357ad442391f6d6aea47a U drh -Z 01ae0928e38536e336a0fa4223ef6f3d +Z f36c3392b22f93b3ce95c9951a47e7e6 -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (GNU/Linux) -iD8DBQFL2xfKoxKgR168RlERAu5rAKCJ9R7soT0Y2Sx2CpYlaWrlm57SuACeIVK9 -g9rON3+p6pxGk+AOwiTbLws= -=wAdF +iD8DBQFL21l5oxKgR168RlERAqNRAJ906Wol3RyZLztZzmkcpokv0+CtRgCfbeMz +ohrTG6i1s6JqVvmqdQdSCDg= +=50x7 -----END PGP SIGNATURE----- diff --git a/manifest.uuid b/manifest.uuid index 74da902bdf..695f751f08 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -8660cda6f8ef43bd276897ef3b5fc2376b5684dc \ No newline at end of file +76bf0eee1fd4003a3f1c39922f8f059611d41dd0 \ No newline at end of file diff --git a/src/where.c b/src/where.c index e13ca51d03..69ba496ed5 100644 --- a/src/where.c +++ b/src/where.c @@ -2897,7 +2897,7 @@ static void bestIndex( */ static void disableTerm(WhereLevel *pLevel, WhereTerm *pTerm){ if( pTerm - && ALWAYS((pTerm->wtFlags & TERM_CODED)==0) + && (pTerm->wtFlags & TERM_CODED)==0 && (pLevel->iLeftJoin==0 || ExprHasProperty(pTerm->pExpr, EP_FromJoin)) ){ pTerm->wtFlags |= TERM_CODED; @@ -3095,7 +3095,9 @@ static int codeAllEqualityTerms( int k = pIdx->aiColumn[j]; pTerm = findTerm(pWC, iCur, k, notReady, pLevel->plan.wsFlags, pIdx); if( NEVER(pTerm==0) ) break; - assert( (pTerm->wtFlags & TERM_CODED)==0 ); + /* The following true for indices with redundant columns. + ** Ex: CREATE INDEX i1 ON t1(a,b,a); SELECT * FROM t1 WHERE a=0 AND b=0; */ + testcase( (pTerm->wtFlags & TERM_CODED)!=0 ); r1 = codeEqualityTerm(pParse, pTerm, pLevel, regBase+j); if( r1!=regBase+j ){ if( nReg==1 ){ diff --git a/test/where2.test b/test/where2.test index 5682ed498d..d61c0897e8 100644 --- a/test/where2.test +++ b/test/where2.test @@ -620,4 +620,35 @@ ifcapable or_opt&&tclvar { } } +# Indices with redundant columns +# +do_test where2-11.1 { + execsql { + CREATE TABLE t11(a,b,c,d); + CREATE INDEX i11aba ON t11(a,b,a,c); -- column A occurs twice. + INSERT INTO t11 VALUES(1,2,3,4); + INSERT INTO t11 VALUES(5,6,7,8); + INSERT INTO t11 VALUES(1,2,9,10); + INSERT INTO t11 VALUES(5,11,12,13); + SELECT c FROM t11 WHERE a=1 AND b=2 ORDER BY c; + } +} {3 9} +do_test where2-11.2 { + execsql { + CREATE INDEX i11cccccccc ON t11(c,c,c,c,c,c,c,c); -- repeated column + SELECT d FROM t11 WHERE c=9; + } +} {10} +do_test where2-11.3 { + execsql { + SELECT d FROM t11 WHERE c IN (1,2,3,4,5); + } +} {4} +do_test where2-11.4 { + execsql { + SELECT d FROM t11 WHERE c=7 OR (a=1 AND b=2) ORDER BY d; + } +} {4 8 10} + + finish_test