From 62c6819115ca67ca27bed7ee57eeac53b5adaa3b Mon Sep 17 00:00:00 2001 From: drh Date: Tue, 30 May 2000 00:51:26 +0000 Subject: [PATCH] :-) (CVS 11) FossilOrigin-Name: 9818723ee127bc535e79f6876546cc027b4999e6 --- manifest | 16 ++++---- manifest.uuid | 2 +- src/build.c | 10 ++--- test/delete.test | 47 ++++++++++++++++++++++ test/insert.test | 101 +++++++++++++++++++++++++++++++++++++++++++++++ test/tester.tcl | 5 +-- 6 files changed, 165 insertions(+), 16 deletions(-) create mode 100644 test/delete.test create mode 100644 test/insert.test diff --git a/manifest b/manifest index f8dc604f7b..f8b5fb50e0 100644 --- a/manifest +++ b/manifest @@ -1,12 +1,12 @@ -C :-)\s(CVS\s10) -D 2000-05-30T00:05:13 +C :-)\s(CVS\s11) +D 2000-05-30T00:51:27 F COPYRIGHT 74a8a6531a42e124df07ab5599aad63870fa0bd4 F Makefile.in 89921c1ee4de75275bfadfbac198396da31704d1 F README 6b5960603c7f8bf42fc022b4b6436f242f238dbb F configure 00a5b5c82147a576fa6e82d7c1b0d55c321d6d2c x F configure.in 6ccfd5fc80517f7cfe605a7fc7e0f62d962a233c F doc/lemon.html e233a3e97a779c7a87e1bc4528c664a58e49dd47 -F src/build.c 56fd0763b19fa5aa3bdeb4acb4566b17305428a8 +F src/build.c 6c7b4b79ed4c2caeb33dd66c1e3c3d6e062f0d60 F src/dbbe.c ab05293e89525041eaab8b4aca10516db3648792 F src/dbbe.h bedeb3a0985bb584458e7849fb59927e99e751e6 F src/main.c 25cce7bce0eb3ba10bada7c05f4b38dc6dbbc86f @@ -21,9 +21,11 @@ F src/vdbe.c 80132b6bb9a744d1990a1c16666d54baaff2dbc3 F src/vdbe.h e721ad308f2e6ca805cebc4dd0a196ce4419d030 F src/where.c 67ffea57920e16b33c580e9a9b9855b3ec9dea7b F test/all.test 66a8a5b8291a472157944edcdce51a320ebd1f35 +F test/delete.test bfa5a1d39b07a28f1e6c22044d78108ded6e60e7 F test/index.test 37cd05c590469d72c5a9299b510eb6bea00ada28 +F test/insert.test e9a927aa60ff34bb04143a38e5628cc3074457b4 F test/table.test 7eea7cd2a055b694fb1ba6b5de83ed7d78870b61 -F test/tester.tcl 0c260d6e56ba5ba69fbddef130638562e79bb2a3 +F test/tester.tcl 70d25b7ced0a958bc377c72399b3dc6bf6a2d09e F tool/gdbmdump.c 529e67c78d920606ba196326ea55b57b75fcc82b F tool/lemon.c cff35578b3c4d1491021b6418016639ebe21b1a5 F tool/lempar.c a1eec94d6eacc12332368660ec65f3b248853833 @@ -33,7 +35,7 @@ F tool/renumberOps.awk 6d067177ad5f8d711b79577b462da9b3634bd0a9 F www/c_interface.tcl f875864edf7974157d1c257ca08de854660882a5 F www/index.tcl 2466d1b2e26c6f354b0acedee12025309a216799 F www/sqlite.tcl 947e067bcc347dc767af4c1a6e5a8d47d8404aa3 -P 84333008b70a11006053938f95bb048f7ee4f655 -R d7d842b04a2ca13987a8e3488e7d9871 +P 1c1d9c0d4ad91cf0b077f4fff82499dcafae36d7 +R 3873d46fc99cb65f2b72af28e1592d68 U drh -Z 7242b994245d2109ffa13546f2d68c6d +Z eb44043639c5eea1b0351d3c17d1a099 diff --git a/manifest.uuid b/manifest.uuid index ecdb1fc515..5b1ab8d8c2 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -1c1d9c0d4ad91cf0b077f4fff82499dcafae36d7 \ No newline at end of file +9818723ee127bc535e79f6876546cc027b4999e6 \ No newline at end of file diff --git a/src/build.c b/src/build.c index aadc3326b9..9407b43812 100644 --- a/src/build.c +++ b/src/build.c @@ -24,7 +24,7 @@ ** This file contains C code routines that are called by the parser ** when syntax rules are reduced. ** -** $Id: build.c,v 1.3 2000/05/29 23:30:51 drh Exp $ +** $Id: build.c,v 1.4 2000/05/30 00:51:27 drh Exp $ */ #include "sqliteInt.h" @@ -770,7 +770,7 @@ void sqliteInsert( sprintf(zNum1,"%d", pList->nExpr); sprintf(zNum2,"%d", pTab->nCol); sqliteSetString(&pParse->zErrMsg, "table ", pTab->zName, - " has ", zNum2, " columns but only ", + " has ", zNum2, " columns but ", zNum1, " values were supplied", 0); pParse->nErr++; goto insert_cleanup; @@ -779,7 +779,7 @@ void sqliteInsert( char zNum1[30]; char zNum2[30]; sprintf(zNum1,"%d", pList->nExpr); - sprintf(zNum2,"%d", pTab->nCol); + sprintf(zNum2,"%d", pField->nId); sqliteSetString(&pParse->zErrMsg, zNum1, " values for ", zNum2, " columns", 0); pParse->nErr++; @@ -1173,8 +1173,8 @@ void sqliteDeleteFrom( for(i=0; inId; i++){ pTabList->a[i].pTab = sqliteFindTable(pParse->db, pTabList->a[i].zName); if( pTabList->a[i].pTab==0 ){ - sqliteSetString(&pParse->zErrMsg, "unknown table \"", - pTabList->a[i].zName, "\"", 0); + sqliteSetString(&pParse->zErrMsg, "no such table: ", + pTabList->a[i].zName, 0); pParse->nErr++; goto delete_from_cleanup; } diff --git a/test/delete.test b/test/delete.test new file mode 100644 index 0000000000..4be52ee70e --- /dev/null +++ b/test/delete.test @@ -0,0 +1,47 @@ +# Copyright (c) 1999, 2000 D. Richard Hipp +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this library; if not, write to the +# Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. +# +# Author contact information: +# drh@hwaci.com +# http://www.hwaci.com/drh/ +# +#*********************************************************************** +# This file implements regression tests for SQLite library. The +# focus of this file is testing the DELETE FROM statement. +# +# $Id: delete.test,v 1.1 2000/05/30 00:51:27 drh Exp $ + +set testdir [file dirname $argv0] +source $testdir/tester.tcl + +# Try to delete from a non-existant table. +# +do_test delete-1.1 { + set v [catch {execsql {DELETE FROM test1}} msg] + lappend v $msg +} {1 {no such table: test1}} + +# Try to delete from sqlite_master +# +do_test delete-2.1 { + set v [catch {execsql {DELETE FROM sqlite_master}} msg] + lappend v $msg +} {1 {table "sqlite_master" may not be modified}} + + + +finish_test diff --git a/test/insert.test b/test/insert.test new file mode 100644 index 0000000000..e5bdb669d3 --- /dev/null +++ b/test/insert.test @@ -0,0 +1,101 @@ +# Copyright (c) 1999, 2000 D. Richard Hipp +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this library; if not, write to the +# Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. +# +# Author contact information: +# drh@hwaci.com +# http://www.hwaci.com/drh/ +# +#*********************************************************************** +# This file implements regression tests for SQLite library. The +# focus of this file is testing the INSERT statement. +# +# $Id: insert.test,v 1.1 2000/05/30 00:51:27 drh Exp $ + +set testdir [file dirname $argv0] +source $testdir/tester.tcl + +# Try to insert into a non-existant table. +# +do_test insert-1.1 { + set v [catch {execsql {INSERT INTO test1 VALUES(1,2,3)}} msg] + lappend v $msg +} {1 {no such table: "test1"}} + +# Try to insert into sqlite_master +# +do_test insert-1.2 { + set v [catch {execsql {INSERT INTO sqlite_master VALUES(1,2,3,4)}} msg] + lappend v $msg +} {1 {table "sqlite_master" may not be modified}} + +# Try to insert the wrong number of entries. +# +do_test insert-1.3 { + execsql {CREATE TABLE test1(one int, two int, three int)} + set v [catch {execsql {INSERT INTO test1 VALUES(1,2)}} msg] + lappend v $msg +} {1 {table test1 has 3 columns but 2 values were supplied}} +do_test insert-1.3b { + set v [catch {execsql {INSERT INTO test1 VALUES(1,2,3,4)}} msg] + lappend v $msg +} {1 {table test1 has 3 columns but 4 values were supplied}} +do_test insert-1.3c { + set v [catch {execsql {INSERT INTO test1(one,two) VALUES(1,2,3,4)}} msg] + lappend v $msg +} {1 {4 values for 2 columns}} +do_test insert-1.3d { + set v [catch {execsql {INSERT INTO test1(one,two) VALUES(1)}} msg] + lappend v $msg +} {1 {1 values for 2 columns}} + +# Try to insert into a non-existant column of a table. +# +do_test insert-1.4 { + set v [catch {execsql {INSERT INTO test1(one,four) VALUES(1,2)}} msg] + lappend v $msg +} {1 {table test1 has no column named four}} + +# Make sure the inserts actually happen +# +do_test insert-1.5 { + execsql {INSERT INTO test1 VALUES(1,2,3)} + execsql {SELECT * FROM test1} +} {1 2 3} +do_test insert-1.5b { + execsql {INSERT INTO test1 VALUES(4,5,6)} + execsql {SELECT * FROM test1 ORDER BY one} +} {1 2 3 4 5 6} +do_test insert-1.5c { + execsql {INSERT INTO test1 VALUES(7,8,9)} + execsql {SELECT * FROM test1 ORDER BY one} +} {1 2 3 4 5 6 7 8 9} + +do_test insert-1.6 { + execsql {DELETE FROM test1} + execsql {INSERT INTO test1(one,two) VALUES(1,2)} + execsql {SELECT * FROM test1 ORDER BY one} +} {1 2 {}} +do_test insert-1.6b { + execsql {INSERT INTO test1(two,three) VALUES(5,6)} + execsql {SELECT * FROM test1 ORDER BY one} +} {{} 5 6 1 2 {}} +do_test insert-1.6c { + execsql {INSERT INTO test1(three,one) VALUES(7,8)} + execsql {SELECT * FROM test1 ORDER BY one} +} {{} 5 6 1 2 {} 8 {} 7} + +finish_test diff --git a/test/tester.tcl b/test/tester.tcl index c289a44e3d..9448ae0638 100644 --- a/test/tester.tcl +++ b/test/tester.tcl @@ -23,7 +23,7 @@ # This file implements some common TCL routines used for regression # testing the SQLite library # -# $Id: tester.tcl,v 1.2 2000/05/29 23:48:23 drh Exp $ +# $Id: tester.tcl,v 1.3 2000/05/30 00:51:27 drh Exp $ # Create a test database # @@ -83,8 +83,7 @@ proc finish_test {} { proc execsql {sql} { set result {} db eval $sql data { - foreach f [lsort [array names data]] { - if {$f=="*"} continue + foreach f $data(*) { lappend result $data($f) } }