blob: d8c6f561856f2e7c14bd7d3c8eabef349fe00ad5 [file] [log] [blame]
drh62c68192000-05-30 00:51:26 +00001# Copyright (c) 1999, 2000 D. Richard Hipp
2#
3# This program is free software; you can redistribute it and/or
4# modify it under the terms of the GNU General Public
5# License as published by the Free Software Foundation; either
6# version 2 of the License, or (at your option) any later version.
7#
8# This program is distributed in the hope that it will be useful,
9# but WITHOUT ANY WARRANTY; without even the implied warranty of
10# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11# General Public License for more details.
12#
13# You should have received a copy of the GNU General Public
14# License along with this library; if not, write to the
15# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
16# Boston, MA 02111-1307, USA.
17#
18# Author contact information:
19# drh@hwaci.com
20# http://www.hwaci.com/drh/
21#
22#***********************************************************************
23# This file implements regression tests for SQLite library. The
24# focus of this file is testing the DELETE FROM statement.
25#
drh3494ffe2001-03-20 12:55:13 +000026# $Id: delete.test,v 1.7 2001/03/20 12:55:14 drh Exp $
drh62c68192000-05-30 00:51:26 +000027
28set testdir [file dirname $argv0]
29source $testdir/tester.tcl
30
31# Try to delete from a non-existant table.
32#
33do_test delete-1.1 {
34 set v [catch {execsql {DELETE FROM test1}} msg]
35 lappend v $msg
36} {1 {no such table: test1}}
37
38# Try to delete from sqlite_master
39#
40do_test delete-2.1 {
41 set v [catch {execsql {DELETE FROM sqlite_master}} msg]
42 lappend v $msg
drh1d37e282000-05-30 03:12:21 +000043} {1 {table sqlite_master may not be modified}}
drh62c68192000-05-30 00:51:26 +000044
drh7020f652000-06-03 18:06:52 +000045# Delete selected entries from a table with and without an index.
46#
47do_test delete-3.1a {
48 execsql {CREATE TABLE table1(f1 int, f2 int)}
49 execsql {INSERT INTO table1 VALUES(1,2)}
50 execsql {INSERT INTO table1 VALUES(2,4)}
51 execsql {INSERT INTO table1 VALUES(3,8)}
52 execsql {INSERT INTO table1 VALUES(4,16)}
53 execsql {SELECT * FROM table1 ORDER BY f1}
54} {1 2 2 4 3 8 4 16}
55do_test delete-3.1b {
56 execsql {DELETE FROM table1 WHERE f1=3}
57 execsql {SELECT * FROM table1 ORDER BY f1}
58} {1 2 2 4 4 16}
59do_test delete-3.1c {
60 execsql {CREATE INDEX index1 ON table1(f1)}
drh4cfa7932000-06-08 15:10:46 +000061 execsql {DELETE FROM 'table1' WHERE f1=3}
drh7020f652000-06-03 18:06:52 +000062 execsql {SELECT * FROM table1 ORDER BY f1}
63} {1 2 2 4 4 16}
64do_test delete-3.1d {
65 execsql {DELETE FROM table1 WHERE f1=2}
66 execsql {SELECT * FROM table1 ORDER BY f1}
67} {1 2 4 16}
drh62c68192000-05-30 00:51:26 +000068
drh8be51132000-06-03 19:19:41 +000069# Semantic errors in the WHERE clause
70#
71do_test delete-4.1 {
72 execsql {CREATE TABLE table2(f1 int, f2 int)}
73 set v [catch {execsql {DELETE FROM table2 WHERE f3=5}} msg]
74 lappend v $msg
drh967e8b72000-06-21 13:59:10 +000075} {1 {no such column: f3}}
drh8be51132000-06-03 19:19:41 +000076
77do_test delete-4.2 {
78 set v [catch {execsql {DELETE FROM table2 WHERE xyzzy(f1+4)}} msg]
79 lappend v $msg
80} {1 {no such function: xyzzy}}
drh62c68192000-05-30 00:51:26 +000081
drh3494ffe2001-03-20 12:55:13 +000082# Lots of deletes
83#
84do_test delete-5.1 {
85 execsql {DELETE FROM table1}
86 execsql {SELECT count(*) FROM table1}
87} {}
88do_test delete-5.2 {
89 for {set i 1} {$i<=200} {incr i} {
90 execsql "INSERT INTO table1 VALUES($i,[expr {$i*$i}])"
91 }
92 execsql {SELECT count(*) FROM table1}
93} {200}
94do_test delete-5.3 {
95 for {set i 1} {$i<=200} {incr i 4} {
96 execsql "DELETE FROM table1 WHERE f1==$i"
97 }
98 execsql {SELECT count(*) FROM table1}
99} {150}
100do_test delete-5.4 {
101 execsql "DELETE FROM table1 WHERE f1>50"
102 execsql {SELECT count(*) FROM table1}
103} {37}
104do_test delete-5.5 {
105 for {set i 1} {$i<=70} {incr i 3} {
106 execsql "DELETE FROM table1 WHERE f1==$i"
107 }
108 execsql {SELECT f1 FROM table1 ORDER BY f1}
109} {2 3 6 8 11 12 14 15 18 20 23 24 26 27 30 32 35 36 38 39 42 44 47 48 50}
110do_test delete-5.6 {
111 for {set i 1} {$i<40} {incr i} {
112 execsql "DELETE FROM table1 WHERE f1==$i"
113 }
114 execsql {SELECT f1 FROM table1 ORDER BY f1}
115} {42 44 47 48 50}
116do_test delete-5.7 {
117 execsql "DELETE FROM table1 WHERE f1!=48"
118 execsql {SELECT f1 FROM table1 ORDER BY f1}
119} {48}
120
drh62c68192000-05-30 00:51:26 +0000121finish_test