]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Do not crash when compiling an "INSERT INTO tbl DEFAULT VALUES" when tbl has either...
authordan <dan@noemail.net>
Tue, 30 Mar 2010 12:40:32 +0000 (12:40 +0000)
committerdan <dan@noemail.net>
Tue, 30 Mar 2010 12:40:32 +0000 (12:40 +0000)
FossilOrigin-Name: ca359a3e8048bd11605c41c4b48134c0343e543b

manifest
manifest.uuid
src/insert.c
test/triggerC.test

index 512b6fb64fb2004147565f3023d24a227be818c7..decd367029558c9b94753233e13036f5467b237f 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,8 +1,5 @@
------BEGIN PGP SIGNED MESSAGE-----
-Hash: SHA1
-
-C Change\san\s#if\sinto\san\s#ifdef.
-D 2010-03-30T11:57:01
+C Do\snot\scrash\swhen\scompiling\san\s"INSERT\sINTO\stbl\sDEFAULT\sVALUES"\swhen\stbl\shas\seither\sBEFORE\sor\sINSTEAD\sOF\striggers\sattached\sto\sit.\sTicket\s[f3162063fd].
+D 2010-03-30T12:40:33
 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
 F Makefile.in 4f2f967b7e58a35bb74fb7ec8ae90e0f4ca7868b
 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
@@ -129,7 +126,7 @@ F src/global.c 5a9c1e3c93213ca574786ac1caa976ce8f709105
 F src/hash.c 458488dcc159c301b8e7686280ab209f1fb915af
 F src/hash.h 2894c932d84d9f892d4b4023a75e501f83050970
 F src/hwtime.h d32741c8f4df852c7d959236615444e2b1063b08
-F src/insert.c 76d6b44a9f9050134fd81205f4b792cbdac7c925
+F src/insert.c 3a9567687f6b84ab9a41448e3d2ce20424f4743c
 F src/journal.c b0ea6b70b532961118ab70301c00a33089f9315c
 F src/legacy.c a199d7683d60cef73089e892409113e69c23a99f
 F src/lempar.c 7f026423f4d71d989e719a743f98a1cbd4e6d99e
@@ -722,7 +719,7 @@ F test/trigger8.test 30cb0530bd7c4728055420e3f739aa00412eafa4
 F test/trigger9.test 5b0789f1c5c4600961f8e68511b825b87be53e31
 F test/triggerA.test 0718ad2d9bfef27c7af00e636df79bee6b988da7
 F test/triggerB.test 56780c031b454abac2340dbb3b71ac5c56c3d7fe
-F test/triggerC.test 4083c64d80854d271bad211268a08985f3d61cbd
+F test/triggerC.test cac41fe31adc1abb9fa08532762fc2b4f662ab03
 F test/triggerD.test c6add3817351451e419f6ff9e9a259b02b6e2de7
 F test/types.test 9a825ec8eea4e965d7113b74c76a78bb5240f2ac
 F test/types2.test 3555aacf8ed8dc883356e59efc314707e6247a84
@@ -797,14 +794,7 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
 F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
 F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
-P 0092b36c7bbd04bf3826de7805e8a14739390f31
-R e6830afd696f92886f4e15da36e8a21e
-U drh
-Z 40be774e9b474c9229e7a0a284180d51
------BEGIN PGP SIGNATURE-----
-Version: GnuPG v1.4.6 (GNU/Linux)
-
-iD8DBQFLsecQoxKgR168RlERArHaAJ9qx0xDw9sULVJZASqsXe/+aloLGQCeOPwi
-veew0hRT3qVYZBfj+VUdiAo=
-=Cote
------END PGP SIGNATURE-----
+P 371bab5d6534860ce908e52129c64a49946be33a
+R 3994aaba17557add292404e3cf90a6c0
+U dan
+Z ebc48098411fcbe12e5a9df180be6bde
index a4bbe9c9ef77ec7a5678024ebf9c51f314ccb45b..1f5cffa2112bb2fe28fc3d0a087e191d39083946 100644 (file)
@@ -1 +1 @@
-371bab5d6534860ce908e52129c64a49946be33a
\ No newline at end of file
+ca359a3e8048bd11605c41c4b48134c0343e543b
\ No newline at end of file
index 5379762069ed5e4ef4edecabf7b69986b4d2ffee..05964f849f5034cbe3af5aaa7592eaae75eb28dc 100644 (file)
@@ -846,7 +846,7 @@ void sqlite3Insert(
           if( pColumn->a[j].idx==i ) break;
         }
       }
-      if( pColumn && j>=pColumn->nId ){
+      if( (!useTempTable && !pList) || (pColumn && j>=pColumn->nId) ){
         sqlite3ExprCode(pParse, pTab->aCol[i].pDflt, regCols+i+1);
       }else if( useTempTable ){
         sqlite3VdbeAddOp3(v, OP_Column, srcTab, j, regCols+i+1); 
index c1967bedb6f2a788f8cef46919808223760ae041..879594c2c8f023a07926ec0e441a960f45a49de6 100644 (file)
@@ -855,5 +855,67 @@ do_test triggerC-10.3 {
   } 
 } {5 2 3 35 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 32 33 22 34 35 36 37 38 39 40}
 
+#-------------------------------------------------------------------------
+# Test that bug [371bab5d65] has been fixed. BEFORE INSERT and INSTEAD OF
+# INSERT triggers with the DEFAULT VALUES INSERT syntax.
+#
+do_test triggerC-11.0 {
+  catchsql { DROP TABLE log }
+  execsql  { CREATE TABLE log(a, b) }
+} {}
+
+foreach {testno tbl defaults} {
+  1 "CREATE TABLE t1(a, b)"                          {{} {}}
+  2 "CREATE TABLE t1(a DEFAULT 1, b DEFAULT 'abc')"  {1 abc}
+  3 "CREATE TABLE t1(a, b DEFAULT 4.5)"              {{} 4.5}
+} {
+  do_test triggerC-11.$testno.1 {
+    catchsql { DROP TABLE t1 }
+    execsql { DELETE FROM log }
+    execsql $tbl
+    execsql {
+      CREATE TRIGGER tt1 BEFORE INSERT ON t1 BEGIN 
+        INSERT INTO log VALUES(new.a, new.b);
+      END;
+      INSERT INTO t1 DEFAULT VALUES;
+      SELECT * FROM log;
+    }
+  } $defaults
+
+  do_test triggerC-11.$testno.2 {
+    execsql { DELETE FROM log }
+    execsql {
+      CREATE TRIGGER tt2 AFTER INSERT ON t1 BEGIN 
+        INSERT INTO log VALUES(new.a, new.b);
+      END;
+      INSERT INTO t1 DEFAULT VALUES;
+      SELECT * FROM log;
+    }
+  } [concat $defaults $defaults]
+
+  do_test triggerC-11.$testno.3 {
+    execsql { DROP TRIGGER tt1 }
+    execsql { DELETE FROM log }
+    execsql {
+      INSERT INTO t1 DEFAULT VALUES;
+      SELECT * FROM log;
+    }
+  } $defaults
+} 
+do_test triggerC-11.4 {
+  catchsql { DROP TABLE t2 }
+  execsql {
+    DELETE FROM log;
+    CREATE TABLE t2(a, b);
+    CREATE VIEW v2 AS SELECT * FROM t2;
+    CREATE TRIGGER tv2 INSTEAD OF INSERT ON v2 BEGIN
+      INSERT INTO log VALUES(new.a, new.b);
+    END;
+    INSERT INTO v2 DEFAULT VALUES;
+    SELECT a, b, a IS NULL, b IS NULL FROM log;
+  }
+} {{} {} 1 1}
+
+
 
 finish_test