Improved test coverage on insert.c. (CVS 2210)
FossilOrigin-Name: c772f75166d55192132e732e8a0ddda5926f00f2
This commit is contained in:
parent
3b93bc8cb1
commit
d6fe961ef4
13
manifest
13
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
|
||||
|
@ -1 +1 @@
|
||||
6e905270a933fd4c99f6db6707ed79166f6484ee
|
||||
c772f75166d55192132e732e8a0ddda5926f00f2
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
97
test/insert3.test
Normal file
97
test/insert3.test
Normal file
@ -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
|
Loading…
Reference in New Issue
Block a user