-C More\scleanup,\setc.\sto\ssupport\sMSVC\scompiles.\s(CVS\s6582)
-D 2009-04-30T17:45:34
+C Fix\sprocessing\sof\sBEFORE\striggers\son\sINSERT\sstatements\swith\sRHS\sSELECTs\nthat\sinsert\sa\sNULL\sinto\sthe\sINTEGER\sPRIMARY\sKEY.\s\sTicket\s#3832.\s(CVS\s6583)
+D 2009-05-01T02:08:04
F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
F Makefile.in 583e87706abc3026960ed759aff6371faf84c211
F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
F src/hash.c 0caea57f020226903cd8591125732e1e19f17f14
F src/hash.h 457e230c3b2bd3c56742824d43b16618ff30d7c0
F src/hwtime.h 4a1d45f4cae1f402ea19686acf24acf4f0cb53cb
-F src/insert.c cdb0f64e53c3d84949b96d50090cc31646fc2857
+F src/insert.c 76667db0ca22b0c9f3a04625e5380612d9eb0ab5
F src/journal.c e00df0c0da8413ab6e1bb7d7cab5665d4a9000d0
F src/legacy.c 2ad5b52df322d0f132f66817095e0e79c8942611
F src/loadext.c 3f96631089fc4f3871a67f02f2e4fc7ea4d51edc
F test/tkt3791.test a6624b9a80b216a26cf473607f42f3e51898c267
F test/tkt3793.test 3aa2efe55bc31fc9459618feea2016ea9a52b2af
F test/tkt3824.test 3da2f5c81b057e3ff355f5dfc9aa0cf0a92e0206
+F test/tkt3832.test 7ebd5ac82d1e430accd5eec9768044133a94c2aa
F test/tokenize.test ce430a7aed48fc98301611429595883fdfcab5d7
F test/trace.test 19ffbc09885c3321d56358a5738feae8587fb377
F test/trans.test d887cb07630dc39879a322d958ad8b006137485c
F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
-P 92b69481bd0eedf06599c40623b38a6f4990010a
-R 1fb8411f09203d4b0b597f4bb4bb4448
-U shane
-Z c3fcacee57f0e52fd4f695bca1750e29
+P 2cd9655e7313671f2bbe8d4a6f13246cbbf61205
+R 8ad70b144833bbdff165cb6ab4489cc8
+U drh
+Z 62d906d73f4d5c255b59654f71b42323
-2cd9655e7313671f2bbe8d4a6f13246cbbf61205
\ No newline at end of file
+4a1f6a3a9ac8b476c86edac83b555adeef0be4e6
\ No newline at end of file
** 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"
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);
--- /dev/null
+# 2009 April 30
+#
+# The author disclaims copyright to this source code. In place of
+# a legal notice, here is a blessing:
+#
+# May you do good and not evil.
+# May you find forgiveness for yourself and forgive others.
+# May you share freely, never taking more than you give.
+#
+#***********************************************************************
+#
+# Ticket #3832
+#
+# A segfault when using a BEFORE trigger on an INSERT and inserting
+# a NULL into the INTEGER PRIMARY KEY.
+#
+# $Id: tkt3832.test,v 1.1 2009/05/01 02:08:04 drh Exp $
+
+set testdir [file dirname $argv0]
+source $testdir/tester.tcl
+
+
+do_test tkt3832-1.1 {
+ db eval {
+ CREATE TABLE t1(a INT, b INTEGER PRIMARY KEY);
+ CREATE TABLE log(x);
+ CREATE TRIGGER t1r1 BEFORE INSERT ON t1 BEGIN
+ INSERT INTO log VALUES(new.b);
+ END;
+ INSERT INTO t1 VALUES(NULL,5);
+ INSERT INTO t1 SELECT b, a FROM t1 ORDER BY b;
+ SELECT rowid, * FROM t1;
+ SELECT rowid, * FROM log;
+ }
+} {5 {} 5 6 5 6 1 5 2 -1}
+
+finish_test