From: drh Date: Fri, 8 Jul 2005 14:14:22 +0000 (+0000) Subject: Add the EP_OptOnly flag on expressions for WHERE clause X-Git-Tag: version-3.6.10~3619 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=392e597c8a2723c65186b6d277abfe70c8d3ffc4;p=thirdparty%2Fsqlite.git Add the EP_OptOnly flag on expressions for WHERE clause terms that are added by the optimizer but should not be coded. (CVS 2540) FossilOrigin-Name: f4a66ed04dfd8714746b766b4859682ea18e328f --- diff --git a/manifest b/manifest index 7a6dc3b297..c340befca1 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\sthe\sSQLITE_CASE_SENSITIVE_LIKE\scompile-time\soption.\s(CVS\s2539) -D 2005-07-08T13:53:22 +C Add\sthe\sEP_OptOnly\sflag\son\sexpressions\sfor\sWHERE\sclause\nterms\sthat\sare\sadded\sby\sthe\soptimizer\sbut\sshould\snot\sbe\scoded.\s(CVS\s2540) +D 2005-07-08T14:14:23 F Makefile.in 3c10cd7bc3ecbd60fe4d5a5c0f59bfa7fb217a66 F Makefile.linux-gcc 06be33b2a9ad4f005a5f42b22c4a19dab3cbb5c7 F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028 @@ -64,7 +64,7 @@ F src/random.c 90adff4e73a3b249eb4f1fc2a6ff9cf78c7233a4 F src/select.c 28b752e58955c7920711fbdbfdcd369a2bd09448 F src/shell.c 25b3217d7c64e6497225439d261a253a23efff26 F src/sqlite.h.in e06d5774e9cfa5962376ae988300a9f114a3e3d7 -F src/sqliteInt.h a5ad4b51d99ada5e065808670f7cef87264606df +F src/sqliteInt.h b7b2f7fc2c24bcfcedd2c0981a685860f16eb90b F src/table.c 25b3ff2b39b7d87e8d4a5da0713d68dfc06cbee9 F src/tclsqlite.c cccaf6b78c290d824cf8ea089b8b27377e545830 F src/test1.c 83ead44dead55033adff61ce69a1e2fc3e72935e @@ -85,7 +85,7 @@ F src/vdbeapi.c 7f392f0792d1258c958083d7de9eae7c3530c9a6 F src/vdbeaux.c 3732a86566a6be4da4c606e9334baf3fd98667af F src/vdbefifo.c b8805850afe13b43f1de78d58088cb5d66f88e1e F src/vdbemem.c da8e8d6f29dd1323f782f000d7cd120027c9ff03 -F src/where.c 97f356317024597e684b750658f2e8822cb15f10 +F src/where.c e9c0c19052742d74783bdc8dba07ab42609debb7 F tclinstaller.tcl 046e3624671962dc50f0481d7c25b38ef803eb42 F test/all.test 7f0988442ab811dfa41793b5b550f5828ce316f3 F test/alter.test 9d6837a3d946b73df692b7cef2a7644d2e2f6bc6 @@ -285,7 +285,7 @@ F www/tclsqlite.tcl 425be741b8ae664f55cb1ef2371aab0a75109cf9 F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0 F www/version3.tcl a99cf5f6d8bd4d5537584a2b342f0fb9fa601d8b F www/whentouse.tcl 528299b8316726dbcc5548e9aa0648c8b1bd055b -P 94c120bb782fed53142317d1755e70c858930486 -R b0c32db552222c1fd1e02ca33b3a5bc8 +P b72bff81f9937378417a0af0610d8558279b67a7 +R c4fc77478fdb3a3d8e789b5f5aefe0b7 U drh -Z e8701805019a78e6817d706ed8df3c13 +Z bbe2b8533b9721f74ae254c674c04a75 diff --git a/manifest.uuid b/manifest.uuid index b7f5f9b4cd..53516219b5 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -b72bff81f9937378417a0af0610d8558279b67a7 \ No newline at end of file +f4a66ed04dfd8714746b766b4859682ea18e328f \ No newline at end of file diff --git a/src/sqliteInt.h b/src/sqliteInt.h index d7f304be97..0b2c0ea9f0 100644 --- a/src/sqliteInt.h +++ b/src/sqliteInt.h @@ -11,7 +11,7 @@ ************************************************************************* ** Internal interface definitions for SQLite. ** -** @(#) $Id: sqliteInt.h,v 1.390 2005/07/08 12:13:05 drh Exp $ +** @(#) $Id: sqliteInt.h,v 1.391 2005/07/08 14:14:23 drh Exp $ */ #ifndef _SQLITEINT_H_ #define _SQLITEINT_H_ @@ -838,12 +838,13 @@ struct Expr { /* ** The following are the meanings of bits in the Expr.flags field. */ -#define EP_FromJoin 0x0001 /* Originated in ON or USING clause of a join */ -#define EP_Agg 0x0002 /* Contains one or more aggregate functions */ -#define EP_Resolved 0x0004 /* IDs have been resolved to COLUMNs */ -#define EP_Error 0x0008 /* Expression contains one or more errors */ -#define EP_Not 0x0010 /* Operator preceeded by NOT */ -#define EP_VarSelect 0x0020 /* pSelect is correlated, not constant */ +#define EP_FromJoin 0x01 /* Originated in ON or USING clause of a join */ +#define EP_Agg 0x02 /* Contains one or more aggregate functions */ +#define EP_Resolved 0x04 /* IDs have been resolved to COLUMNs */ +#define EP_Error 0x08 /* Expression contains one or more errors */ +#define EP_Not 0x10 /* Operator preceeded by NOT */ +#define EP_VarSelect 0x20 /* pSelect is correlated, not constant */ +#define EP_OptOnly 0x40 /* A constraint used by the optimizer only */ /* ** These macros can be used to test, set, or clear bits in the diff --git a/src/where.c b/src/where.c index 1fd9ff3a4e..75cc412cea 100644 --- a/src/where.c +++ b/src/where.c @@ -16,7 +16,7 @@ ** so is applicable. Because this module is responsible for selecting ** indices, you might also think of this module as the "query optimizer". ** -** $Id: where.c,v 1.140 2005/07/01 11:38:45 drh Exp $ +** $Id: where.c,v 1.141 2005/07/08 14:14:23 drh Exp $ */ #include "sqliteInt.h" @@ -1309,12 +1309,13 @@ WhereInfo *sqlite3WhereBegin( ** computed using the current set of tables. */ for(pTerm=aExpr, j=0; jp==0 ) continue; + Expr *pE = pTerm->p; + if( pE==0 || ExprHasProperty(pE, EP_OptOnly) ) continue; if( (pTerm->prereqAll & loopMask)!=pTerm->prereqAll ) continue; - if( pLevel->iLeftJoin && !ExprHasProperty(pTerm->p,EP_FromJoin) ){ + if( pLevel->iLeftJoin && !ExprHasProperty(pE, EP_FromJoin) ){ continue; } - sqlite3ExprIfFalse(pParse, pTerm->p, cont, 1); + sqlite3ExprIfFalse(pParse, pE, cont, 1); pTerm->p = 0; } brk = cont; @@ -1328,9 +1329,10 @@ WhereInfo *sqlite3WhereBegin( sqlite3VdbeAddOp(v, OP_MemStore, pLevel->iLeftJoin, 1); VdbeComment((v, "# record LEFT JOIN hit")); for(pTerm=aExpr, j=0; jp==0 ) continue; + Expr *pE = pTerm->p; + if( pE==0 || ExprHasProperty(pE, EP_OptOnly) ) continue; if( (pTerm->prereqAll & loopMask)!=pTerm->prereqAll ) continue; - sqlite3ExprIfFalse(pParse, pTerm->p, cont, 1); + sqlite3ExprIfFalse(pParse, pE, cont, 1); pTerm->p = 0; } }