From: drh Date: Sat, 28 Jul 2018 01:30:43 +0000 (+0000) Subject: Add assert() statements to sqlite3ExprDelete() that prove various symmetry X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=35284b6c48eef43829222d9626f353f66ee005f2;p=thirdparty%2Fsqlite.git Add assert() statements to sqlite3ExprDelete() that prove various symmetry properties of the Expr object that might be exploited to make the Expr object smaller and faster. FossilOrigin-Name: 81f25d5c84e4d2d0cd3c6a7c105c7c93d310218feeea4e023dbc32e7e96b2a52 --- diff --git a/manifest b/manifest index 1eeed1854b..1504cd8098 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Improvements\sto\sthe\sparser\sto\sincrease\scoverage.\s\sFix\sthe\sparser\sso\sthat\nat\sleast\sone\sexpresssion\sis\srequired\safter\sPARTITION\sBY\sand\swithin\sthe\nlist\sof\sexpressions\son\sVALUES(). -D 2018-07-27T23:33:16.472 +C Add\sassert()\sstatements\sto\ssqlite3ExprDelete()\sthat\sprove\svarious\ssymmetry\nproperties\sof\sthe\sExpr\sobject\sthat\smight\sbe\sexploited\sto\smake\sthe\sExpr\sobject\nsmaller\sand\sfaster. +D 2018-07-28T01:30:43.176 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 0a3a6c81e6fcb969ff9106e882f0a08547014ba463cb6beca4c4efaecc924ee6 @@ -450,7 +450,7 @@ F src/date.c ebe1dc7c8a347117bb02570f1a931c62dd78f4a2b1b516f4837d45b7d6426957 F src/dbpage.c 4aa7f26198934dbd002e69418220eae3dbc71b010bbac32bd78faf86b52ce6c3 F src/dbstat.c edabb82611143727511a45ca0859b8cd037851ebe756ae3db289859dd18b6f91 F src/delete.c 4c8c7604277a2041647f96b78f4b9a47858e9217e4fb333d35e7b5ab32c5b57f -F src/expr.c 907d7de6cac23e55e32f22133a4fa8ca1558d7fe7c9a37e01feebb1106416fe7 +F src/expr.c eeb14df211a01166a107dee3af221bff2145391cead4189bfed7e21839decbfa F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007 F src/fkey.c f59253c0be4b1e9dfcb073b6d6d6ab83090ae50c08b5c113b76013c4b157cd6a F src/func.c 7c288b4ce309b5a8b8473514b88e1f8e69a80134509a8c0db8e39c858e367e7f @@ -1753,7 +1753,10 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 7efdba2bbc8547ee9292a1bbd1e61d38b40d7aabc0860ceba188bdec539f5114 -R 471a9deda4100ce593be82a25e7c7930 +P 02204f8b246c868846f39bd44f2e3bc0fab0275aa09ef3a0e5a8e3d58f484ca8 +R 310262b835cd592d636879692e903d61 +T *branch * expr-simplify +T *sym-expr-simplify * +T -sym-trunk * U drh -Z 49ba2c803564fb9ad5a228c53691471f +Z 2ccd694ba875056547f326b1b678ff15 diff --git a/manifest.uuid b/manifest.uuid index fbf370f762..6a15e4ee8e 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -02204f8b246c868846f39bd44f2e3bc0fab0275aa09ef3a0e5a8e3d58f484ca8 \ No newline at end of file +81f25d5c84e4d2d0cd3c6a7c105c7c93d310218feeea4e023dbc32e7e96b2a52 \ No newline at end of file diff --git a/src/expr.c b/src/expr.c index 986b4f9aa9..ccfd632517 100644 --- a/src/expr.c +++ b/src/expr.c @@ -1060,6 +1060,17 @@ static SQLITE_NOINLINE void sqlite3ExprDeleteNN(sqlite3 *db, Expr *p){ assert( p->pRight==0 ); assert( p->x.pSelect==0 ); } + if( !ExprHasProperty(p, EP_TokenOnly) ){ + assert( p->op!=TK_FUNCTION || p->pLeft==0 ); + assert( p->pRight==0 || p->x.pSelect==0 ); + } + if( !ExprHasProperty(p, (EP_TokenOnly|EP_Reduced)) ){ + assert( p->pWin==0 || p->pLeft==0 ); + assert( p->pWin==0 || p->pTab==0 ); + assert( p->pWin==0 || p->op==TK_FUNCTION ); + assert( p->pWin==0 || !ExprHasProperty(p, EP_xIsSelect) ); + assert( p->pTab==0 || (p->pRight==0 && p->x.pSelect==0) ); + } #endif if( !ExprHasProperty(p, (EP_TokenOnly|EP_Leaf)) ){ /* The Expr.x union is never used at the same time as Expr.pRight */