From: drh Date: Sat, 8 Dec 2012 04:10:44 +0000 (+0000) Subject: Duplicating check constraint expressions prior to code generation is no X-Git-Tag: version-3.7.15~7^2~3 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=2d8e9203393a732dfa29383ef2d970aa4d6cbcf5;p=thirdparty%2Fsqlite.git Duplicating check constraint expressions prior to code generation is no longer required, and so it is removed. FossilOrigin-Name: 1a9db8dc2f3c5cb089801d56122cdf5c3a618163 --- diff --git a/manifest b/manifest index eab7d22844..0a0208befc 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Veryquick\spasses\sall\stests\snow. -D 2012-12-08T03:34:04.199 +C Duplicating\scheck\sconstraint\sexpressions\sprior\sto\scode\sgeneration\sis\sno\nlonger\srequired,\sand\sso\sit\sis\sremoved. +D 2012-12-08T04:10:44.860 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in 690d441a758cbffd13e814dc2724a721a6ebd400 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@ -138,7 +138,7 @@ F src/global.c e59ecd2c553ad0d4bfbc84ca71231336f8993a7a F src/hash.c ac3470bbf1ca4ae4e306a8ecb0fdf1731810ffe4 F src/hash.h 2894c932d84d9f892d4b4023a75e501f83050970 F src/hwtime.h d32741c8f4df852c7d959236615444e2b1063b08 -F src/insert.c d7ed04b1fab887d6d26cf5e36753f5d6d1246290 +F src/insert.c dc197aa9293a26d300eb5378880e701f7b20fefa F src/journal.c eb7b9f5e783266521bcd9b2b93d419a219411f71 F src/legacy.c a199d7683d60cef73089e892409113e69c23a99f F src/lempar.c cdf0a000315332fc9b50b62f3b5e22e080a0952b @@ -1025,7 +1025,7 @@ F tool/vdbe-compress.tcl f12c884766bd14277f4fcedcae07078011717381 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4 F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381 F tool/win/sqlite.vsix 97894c2790eda7b5bce3cc79cb2a8ec2fde9b3ac -P f66c1db2965054f38125218202b6a6ec62d57666 -R 511d405c0f499c6308ea89128ae45a9c +P 7b96115e81deab0aa0472839cf787ba3f2fc64a7 +R 8013579f53b80064be673dd6b756f3d9 U drh -Z c72d9ea52b798f92d7f766e244fc6469 +Z 116d2ac1551cc67be301e91dcf07c1f6 diff --git a/manifest.uuid b/manifest.uuid index 372a38725b..150b22cf8e 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -7b96115e81deab0aa0472839cf787ba3f2fc64a7 \ No newline at end of file +1a9db8dc2f3c5cb089801d56122cdf5c3a618163 \ No newline at end of file diff --git a/src/insert.c b/src/insert.c index d7425d4fe8..89a5dc8a13 100644 --- a/src/insert.c +++ b/src/insert.c @@ -1274,25 +1274,20 @@ void sqlite3GenerateConstraintChecks( onError = overrideError!=OE_Default ? overrideError : OE_Abort; for(i=0; inExpr; i++){ int allOk = sqlite3VdbeMakeLabel(v); - Expr *pDup = sqlite3ExprDup(db, pCheck->a[i].pExpr, 0); - if( !db->mallocFailed ){ - assert( pDup!=0 ); - sqlite3ExprIfTrue(pParse, pDup, allOk, SQLITE_JUMPIFNULL); - if( onError==OE_Ignore ){ - sqlite3VdbeAddOp2(v, OP_Goto, 0, ignoreDest); + sqlite3ExprIfTrue(pParse, pCheck->a[i].pExpr, allOk, SQLITE_JUMPIFNULL); + if( onError==OE_Ignore ){ + sqlite3VdbeAddOp2(v, OP_Goto, 0, ignoreDest); + }else{ + char *zConsName = pCheck->a[i].zName; + if( onError==OE_Replace ) onError = OE_Abort; /* IMP: R-15569-63625 */ + if( zConsName ){ + zConsName = sqlite3MPrintf(db, "constraint %s failed", zConsName); }else{ - char *zConsName = pCheck->a[i].zName; - if( onError==OE_Replace ) onError = OE_Abort; /* IMP: R-15569-63625 */ - if( zConsName ){ - zConsName = sqlite3MPrintf(db, "constraint %s failed", zConsName); - }else{ - zConsName = 0; - } - sqlite3HaltConstraint(pParse, onError, zConsName, P4_DYNAMIC); + zConsName = 0; } - sqlite3VdbeResolveLabel(v, allOk); + sqlite3HaltConstraint(pParse, onError, zConsName, P4_DYNAMIC); } - sqlite3ExprDelete(db, pDup); + sqlite3VdbeResolveLabel(v, allOk); } } #endif /* !defined(SQLITE_OMIT_CHECK) */