blob: d796361fe8b9ab9a9db976d33b854de5d69996fc [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#
drh8be51132000-06-03 19:19:41 +000026# $Id: delete.test,v 1.4 2000/06/03 19:19:42 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)}
61 execsql {DELETE FROM table1 WHERE f1=3}
62 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
75} {1 {no such field: f3}}
76
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
82finish_test