From 6b9e565e54fb7277234fd50939091ab0daf8c079 Mon Sep 17 00:00:00 2001 From: drh Date: Mon, 8 Oct 2012 20:27:35 +0000 Subject: [PATCH] Further tweaks to the ORDER BY optimizer, to fix a bug and to get the optimizer to recognize some additional cases. FossilOrigin-Name: bcb4f262476193cfb17818d8c62bab528dddeef9 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/where.c | 16 +++++++++------- 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/manifest b/manifest index a505a09dff..60325045c0 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Bug\sfixes\sin\sthe\sORDER\sBY\soptimizer. -D 2012-10-08T19:41:38.447 +C Further\stweaks\sto\sthe\sORDER\sBY\soptimizer,\sto\sfix\sa\sbug\sand\sto\sget\sthe\s\noptimizer\sto\srecognize\ssome\sadditional\scases. +D 2012-10-08T20:27:35.617 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in 5f4f26109f9d80829122e0e09f9cda008fa065fb F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@ -249,7 +249,7 @@ F src/vtab.c d8020c0a0e8ccc490ca449d7e665311b6e9f3ba9 F src/wal.c e1fe8f92a0ea0fef8faa87ec43a127a478589d22 F src/wal.h 29c197540b19044e6cd73487017e5e47a1d3dac6 F src/walker.c 3d75ba73de15e0f8cd0737643badbeb0e002f07b -F src/where.c d4a39bc7ea96ac2580b662df73c16d5ddacd9723 +F src/where.c 6bc65388a642277ede4449bf852ef09f630997e8 F test/8_3_names.test 631ea964a3edb091cf73c3b540f6bcfdb36ce823 F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2 F test/aggnested.test 0be144b453e0622a085fae8665c32f5676708e00 @@ -1018,7 +1018,7 @@ F tool/vdbe-compress.tcl f12c884766bd14277f4fcedcae07078011717381 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4 F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381 F tool/win/sqlite.vsix 67d8a99aceb56384a81b3f30d6c71743146d2cc9 -P adbdc663f3d22ff03f21040a811d585cf2218626 -R 3f2fb8221173011002c406e4b1569bb1 +P 301bbee4045aa169e29fb4fb75743b71eb4760a1 +R efd94f360278497c63522273f6fc0188 U drh -Z 5a939ce30180c1cb84b0892ff09f4ab1 +Z e6fe7146356897869a54564ecea90f21 diff --git a/manifest.uuid b/manifest.uuid index 1996a19ef2..2a7390063c 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -301bbee4045aa169e29fb4fb75743b71eb4760a1 \ No newline at end of file +bcb4f262476193cfb17818d8c62bab528dddeef9 \ No newline at end of file diff --git a/src/where.c b/src/where.c index 2701bbda08..21b34a6175 100644 --- a/src/where.c +++ b/src/where.c @@ -2908,11 +2908,11 @@ static int isSortingIndex( isEq = 0; }else if( pConstraint->eOperator==WO_IN ){ break; - }else if( pConstraint->prereqRight==0 ){ - isEq = 1; }else if( pConstraint->eOperator==WO_ISNULL ){ uniqueNotNull = 0; isEq = 1; + }else if( pConstraint->prereqRight==0 ){ + isEq = 1; }else{ Expr *pRight = pConstraint->pExpr->pRight; if( pRight->op==TK_COLUMN ){ @@ -2935,17 +2935,19 @@ static int isSortingIndex( }else{ continue; } - }else if( sortOrder==2 ){ - sortOrder = termSortOrder; - }else if( termSortOrder!=sortOrder ){ - break; + }else if( isEq!=1 ){ + if( sortOrder==2 ){ + sortOrder = termSortOrder; + }else if( termSortOrder!=sortOrder ){ + break; + } } j++; pOBItem++; if( iColumn<0 ){ seenRowid = 1; break; - }else if( pTab->aCol[iColumn].notNull==0 ){ + }else if( pTab->aCol[iColumn].notNull==0 && isEq==0 ){ uniqueNotNull = 0; } } -- 2.47.2