]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Improved test coverage on insert.c. (CVS 2210)
authordrh <drh@noemail.net>
Fri, 14 Jan 2005 01:22:00 +0000 (01:22 +0000)
committerdrh <drh@noemail.net>
Fri, 14 Jan 2005 01:22:00 +0000 (01:22 +0000)
FossilOrigin-Name: c772f75166d55192132e732e8a0ddda5926f00f2

manifest
manifest.uuid
src/insert.c
test/insert3.test [new file with mode: 0644]

index 99633a6253f98659363f6f4c4d82d5412b5dd3bd..0c00b8c4ac4d3acf387f328132c12ffca420901f 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Need\sSQLITE_MEMDEBUG\sinstead\sof\sSQLITE_DEBUG\sin\stclsqlite.c.\s(CVS\s2209)
-D 2005-01-13T23:54:32
+C Improved\stest\scoverage\son\sinsert.c.\s(CVS\s2210)
+D 2005-01-14T01:22:01
 F Makefile.in 6ce51dde6a8fe82fc12f20dec750572f6a19f56a
 F Makefile.linux-gcc a9e5a0d309fa7c38e7c14d3ecf7690879d3a5457
 F README a01693e454a00cc117967e3f9fdab2d4d52e9bc1
@@ -39,7 +39,7 @@ F src/expr.c ecfc8fd972e73650708e1109f97b1c5a785e0a0e
 F src/func.c dc188d862d7276ea897655b248e2cb17022686e3
 F src/hash.c a97721a55440b7bea31ffe471bb2f6b4123cddd5
 F src/hash.h 1b0c445e1c89ff2aaad9b4605ba61375af001e84
-F src/insert.c f6b69e40e8938f63a2368cbcb5087a56098cf632
+F src/insert.c 2a8fadfd7494881632fcae453f115d42a7a58dee
 F src/legacy.c d58ea507bce885298a2c8c3cbb0f4bff5d47830b
 F src/main.c cbe5a05baabad9fabb733065d0fb00c0b36f6ef1
 F src/md5.c 7ae1c39044b95de2f62e066f47bb1deb880a1070
@@ -136,6 +136,7 @@ F test/index.test 1294997b4743007af57f8148c63ba14f07ad31ab
 F test/index2.test ed2409af110aa06ec0c9fedfa050031887c38707
 F test/insert.test 56f9c20c9adc8d707490c4ffa5d4daa94826ea03
 F test/insert2.test 0bb50ff999e35a21549d8ee5dc44db8ac24d31a7
+F test/insert3.test 421f6017ad268fcdba0b8ab56a2dff7265d3cf23
 F test/interrupt.test 5b4d8389e6cf2d01b94f87cfd02d9df1073bfb2d
 F test/intpkey.test b57cf5236fde1bd8cbc1388fa0c91908f6fd9194
 F test/ioerr.test 259bef101273a8e7b16d004018ee5a7873a26889
@@ -268,7 +269,7 @@ F www/tclsqlite.tcl e73f8f8e5f20e8277619433f7970060ab01088fc
 F www/vdbe.tcl 095f106d93875c94b47367384ebc870517431618
 F www/version3.tcl 092a01f5ef430d2c4acc0ae558d74c4bb89638a0
 F www/whentouse.tcl c3b50d3ac31c54be2a1af9b488a89d22f1e6e746
-P 7113b5ed8d51718356ce1cc51896a3070875a7e2
-R 97b9862e7f5be337d69e7b8a5cce7fca
+P 6e905270a933fd4c99f6db6707ed79166f6484ee
+R b0f921b0cc4246465f13a208b372d988
 U drh
-Z 48311deeb016a5dd529c213b5f492974
+Z 0f466f7cb587c20134aa5d2e4fe7cd6a
index d4ca7f8e2b5b154e1e10292d7efd175960a633a3..64846c6ed12aa823fef7eb72074d2652ab0e7766 100644 (file)
@@ -1 +1 @@
-6e905270a933fd4c99f6db6707ed79166f6484ee
\ No newline at end of file
+c772f75166d55192132e732e8a0ddda5926f00f2
\ No newline at end of file
index ebc51e2e03c7a43d6281166676d6005aa27f7e02..156973162e5b6f43ef6c7e5aba1749c952256dbf 100644 (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.129 2005/01/10 02:48:49 danielk1977 Exp $
+** $Id: insert.c,v 1.130 2005/01/14 01:22:01 drh Exp $
 */
 #include "sqliteInt.h"
 
@@ -496,9 +496,8 @@ void sqlite3Insert(
       sqlite3VdbeAddOp(v, OP_Integer, -1, 0);
     }else if( useTempTable ){
       sqlite3VdbeAddOp(v, OP_Column, srcTab, keyColumn);
-    }else if( pSelect ){
-      sqlite3VdbeAddOp(v, OP_Dup, nColumn - keyColumn - 1, 1);
     }else{
+      assert( pSelect==0 );  /* Otherwise useTempTable is true */
       sqlite3ExprCode(pParse, pList->a[keyColumn].pExpr);
       sqlite3VdbeAddOp(v, OP_NotNull, -1, sqlite3VdbeCurrentAddr(v)+3);
       sqlite3VdbeAddOp(v, OP_Pop, 1, 0);
@@ -520,9 +519,8 @@ void sqlite3Insert(
         sqlite3ExprCode(pParse, pTab->aCol[i].pDflt);
       }else if( useTempTable ){
         sqlite3VdbeAddOp(v, OP_Column, srcTab, j); 
-      }else if( pSelect ){
-        sqlite3VdbeAddOp(v, OP_Dup, nColumn-j-1, 1);
       }else{
+        assert( pSelect==0 ); /* Otherwise useTempTable is true */
         sqlite3ExprCodeAndCache(pParse, pList->a[j].pExpr);
       }
     }
diff --git a/test/insert3.test b/test/insert3.test
new file mode 100644 (file)
index 0000000..7e6153a
--- /dev/null
@@ -0,0 +1,97 @@
+# 2005 January 13
+#
+# 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.
+#
+#***********************************************************************
+# This file implements regression tests for SQLite library.  The
+# focus of this file is testing corner cases of the INSERT statement.
+#
+# $Id: insert3.test,v 1.1 2005/01/14 01:22:01 drh Exp $
+
+set testdir [file dirname $argv0]
+source $testdir/tester.tcl
+
+# Create a table and a corresponding insert trigger.  Do a self-insert
+# into the table.
+#
+do_test insert3-1.0 {
+  execsql {
+    CREATE TABLE t1(a,b);
+    CREATE TABLE log(x UNIQUE, y);
+    CREATE TRIGGER r1 AFTER INSERT ON t1 BEGIN
+      UPDATE log SET y=y+1 WHERE x=new.a;
+      INSERT OR IGNORE INTO log VALUES(new.a, 1);
+    END;
+    INSERT INTO t1 VALUES('hello','world');
+    INSERT INTO t1 VALUES(5,10);
+    SELECT * FROM log ORDER BY x;
+  }
+} {5 1 hello 1}
+do_test insert3-1.1 {
+  execsql {
+    INSERT INTO t1 SELECT a, b+10 FROM t1;
+    SELECT * FROM log ORDER BY x;
+  }
+} {5 2 hello 2}
+do_test insert3-1.2 {
+  execsql {
+    CREATE TABLE log2(x PRIMARY KEY,y);
+    CREATE TRIGGER r2 BEFORE INSERT ON t1 BEGIN
+      UPDATE log2 SET y=y+1 WHERE x=new.b;
+      INSERT OR IGNORE INTO log2 VALUES(new.b,1);
+    END;
+    INSERT INTO t1 VALUES(453,'hi');
+    SELECT * FROM log ORDER BY x;
+  }
+} {5 2 453 1 hello 2}
+do_test insert3-1.3 {
+  execsql {
+    SELECT * FROM log2 ORDER BY x;
+  }
+} {hi 1}
+do_test insert3-1.4 {
+  execsql {
+    INSERT INTO t1 SELECT * FROM t1;
+    SELECT 'a:', x, y FROM log UNION ALL SELECT 'b:', x, y FROM log2 ORDER BY x;
+  }
+} {a: 5 4 b: 10 2 b: 20 1 a: 453 2 a: hello 4 b: hi 2 b: world 1}
+do_test insert3-1.5 {
+  execsql {
+    INSERT INTO t1(a) VALUES('xyz');
+    SELECT * FROM log ORDER BY x;
+  }
+} {5 4 453 2 hello 4 xyz 1}
+
+do_test insert3-2.1 {
+  execsql {
+    CREATE TABLE t2(
+      a INTEGER PRIMARY KEY,
+      b DEFAULT 'b',
+      c DEFAULT 'c'
+    );
+    CREATE TABLE t2dup(a,b,c);
+    CREATE TRIGGER t2r1 BEFORE INSERT ON t2 BEGIN
+      INSERT INTO t2dup(a,b,c) VALUES(new.a,new.b,new.c);
+    END;
+    INSERT INTO t2(a) VALUES(123);
+    INSERT INTO t2(b) VALUES(234);
+    INSERT INTO t2(c) VALUES(345);
+    SELECT * FROM t2dup;
+  }
+} {123 b c -1 234 c -1 b 345}
+do_test insert3-2.2 {
+  execsql {
+    DELETE FROM t2dup;
+    INSERT INTO t2(a) SELECT 1 FROM t1 LIMIT 1;
+    INSERT INTO t2(b) SELECT 987 FROM t1 LIMIT 1;
+    INSERT INTO t2(c) SELECT 876 FROM t1 LIMIT 1;
+    SELECT * FROM t2dup;
+  }
+} {1 b c -1 987 c -1 b 876}
+
+finish_test