1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-11-11 01:42:22 +03:00

Fix processing of BEFORE triggers on INSERT statements with RHS SELECTs

that insert a NULL into the INTEGER PRIMARY KEY.  Ticket #3832. (CVS 6583)

FossilOrigin-Name: 4a1f6a3a9ac8b476c86edac83b555adeef0be4e6
This commit is contained in:
drh
2009-05-01 02:08:04 +00:00
parent eb4ac06f4e
commit 7fe45908cc
4 changed files with 53 additions and 13 deletions

View File

@@ -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.261 2009/04/30 00:11:10 drh Exp $
** $Id: insert.c,v 1.262 2009/05/01 02:08:04 drh Exp $
*/
#include "sqliteInt.h"
@@ -781,12 +781,14 @@ void sqlite3Insert(
regTrigRowid = sqlite3GetTempReg(pParse);
if( keyColumn<0 ){
sqlite3VdbeAddOp2(v, OP_Integer, -1, regTrigRowid);
}else if( useTempTable ){
sqlite3VdbeAddOp3(v, OP_Column, srcTab, keyColumn, regTrigRowid);
}else{
int j1;
assert( pSelect==0 ); /* Otherwise useTempTable is true */
sqlite3ExprCode(pParse, pList->a[keyColumn].pExpr, regTrigRowid);
if( useTempTable ){
sqlite3VdbeAddOp3(v, OP_Column, srcTab, keyColumn, regTrigRowid);
}else{
assert( pSelect==0 ); /* Otherwise useTempTable is true */
sqlite3ExprCode(pParse, pList->a[keyColumn].pExpr, regTrigRowid);
}
j1 = sqlite3VdbeAddOp1(v, OP_NotNull, regTrigRowid);
sqlite3VdbeAddOp2(v, OP_Integer, -1, regTrigRowid);
sqlite3VdbeJumpHere(v, j1);