diff options
author | drh <drh@noemail.net> | 2006-03-15 16:26:10 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2006-03-15 16:26:10 +0000 |
commit | aa01c7e2cdaaf096298a01ebdb8071142c365a4b (patch) | |
tree | 2f35b15fad0841d7ea105a82036f9249bc42e2c6 /src | |
parent | afed086386646ffbebb9f030311c398831ed2c7d (diff) | |
download | sqlite-aa01c7e2cdaaf096298a01ebdb8071142c365a4b.tar.gz sqlite-aa01c7e2cdaaf096298a01ebdb8071142c365a4b.zip |
Fix CHECK constraints to use alternative conflict resolution. Ticket #1717. (CVS 3137)
FossilOrigin-Name: c0d20fa97f94313e6b7ee5b4baa236ef5b664d76
Diffstat (limited to 'src')
-rw-r--r-- | src/insert.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/insert.c b/src/insert.c index 7e4048228..c8c5090e9 100644 --- a/src/insert.c +++ b/src/insert.c @@ -12,7 +12,7 @@ ** This file contains C code routines that are called by the parser ** to handle INSERT statements in SQLite. ** -** $Id: insert.c,v 1.163 2006/03/06 20:55:46 drh Exp $ +** $Id: insert.c,v 1.164 2006/03/15 16:26:10 drh Exp $ */ #include "sqliteInt.h" @@ -874,7 +874,13 @@ void sqlite3GenerateConstraintChecks( sqlite3ExprIfTrue(pParse, pTab->pCheck, allOk, 1); assert( pParse->ckOffset==nCol ); pParse->ckOffset = 0; - sqlite3VdbeAddOp(v, OP_Halt, SQLITE_CONSTRAINT, OE_Abort); + onError = overrideError!=OE_Default ? overrideError : OE_Abort; + if( onError==OE_Ignore || onError==OE_Replace ){ + sqlite3VdbeAddOp(v, OP_Pop, nCol+1+hasTwoRowids, 0); + sqlite3VdbeAddOp(v, OP_Goto, 0, ignoreDest); + }else{ + sqlite3VdbeAddOp(v, OP_Halt, SQLITE_CONSTRAINT, onError); + } sqlite3VdbeResolveLabel(v, allOk); } #endif /* !defined(SQLITE_OMIT_CHECK) */ |