-C :-)\s(CVS\s8)
-D 2000-05-29T23:48:23
+C :-)\s(CVS\s9)
+D 2000-05-29T23:58:12
F COPYRIGHT 74a8a6531a42e124df07ab5599aad63870fa0bd4
F Makefile.in 89921c1ee4de75275bfadfbac198396da31704d1
F README 6b5960603c7f8bf42fc022b4b6436f242f238dbb
F src/vdbe.h e721ad308f2e6ca805cebc4dd0a196ce4419d030
F src/where.c 67ffea57920e16b33c580e9a9b9855b3ec9dea7b
F test/all.test 66a8a5b8291a472157944edcdce51a320ebd1f35
-F test/crtidx.test 56de1628220deafe33037c40369229eb02c1907d
-F test/crttbl.test 45889cb39e3c3de9e10d79057f424a38ecebe93f
+F test/index.test 37cd05c590469d72c5a9299b510eb6bea00ada28
+F test/table.test 7eea7cd2a055b694fb1ba6b5de83ed7d78870b61
F test/tester.tcl 0c260d6e56ba5ba69fbddef130638562e79bb2a3
F tool/gdbmdump.c 529e67c78d920606ba196326ea55b57b75fcc82b
F tool/lemon.c cff35578b3c4d1491021b6418016639ebe21b1a5
F www/c_interface.tcl f875864edf7974157d1c257ca08de854660882a5
F www/index.tcl 67b2bee04077377eacede2b11e21fe37ef7e10c6
F www/sqlite.tcl 947e067bcc347dc767af4c1a6e5a8d47d8404aa3
-P fdf4b31a18fcbbcd358bf92c91fccbf94a79bc26
-R 8e7ef511fbf73d9fc2da9869644b9298
+P e34143c24f1b3eff0c9f1e22702f099674e0ef4e
+R 54f9c4e3d938cf3051ef76323625c2ee
U drh
-Z 333679d5ad9690cc5b3b61743c281f2f
+Z 09e5fac9544134338a0bd303b6437e57
-e34143c24f1b3eff0c9f1e22702f099674e0ef4e
\ No newline at end of file
+84333008b70a11006053938f95bb048f7ee4f655
\ No newline at end of file
# This file implements regression tests for SQLite library. The
# focus of this file is testing the CREATE INDEX statement.
#
-# $Id: crtidx.test,v 1.1 2000/05/29 23:30:51 drh Exp $
+# $Id: index.test,v 1.1 2000/05/29 23:58:12 drh Exp $
set testdir [file dirname $argv0]
source $testdir/tester.tcl
# Create a basic index and verify it is added to sqlite_master
#
-do_test crtidx-1.1 {
+do_test index-1.1 {
execsql {CREATE TABLE test1(f1 int, f2 int, f3 int)}
execsql {CREATE INDEX index1 ON test1(f1)}
execsql {SELECT name FROM sqlite_master ORDER BY name}
} {index1 test1}
-do_test crtidx-1.1b {
+do_test index-1.1b {
execsql {SELECT name, sql, tbl_name, type FROM sqlite_master
WHERE name='index1'}
} {index1 {CREATE INDEX index1 ON test1(f1)} test1 index}
-do_test crtidx-1.1c {
+do_test index-1.1c {
db close
sqlite db testdb
execsql {SELECT name, sql, tbl_name, type FROM sqlite_master
WHERE name='index1'}
} {index1 {CREATE INDEX index1 ON test1(f1)} test1 index}
-do_test crtidx-1.1d {
+do_test index-1.1d {
db close
sqlite db testdb
execsql {SELECT name FROM sqlite_master ORDER BY name}
# Verify that the index dies with the table
#
-do_test crtidx-1.2 {
+do_test index-1.2 {
execsql {DROP TABLE test1}
execsql {SELECT name FROM sqlite_master ORDER BY name}
} {}
# Try adding an index to a table that does not exist
#
-do_test crtidx-2.1 {
+do_test index-2.1 {
set v [catch {execsql {CREATE INDEX index1 ON test1(f1)}} msg]
lappend v $msg
} {1 {no such table: test1}}
# Try adding an index on a field of a table where the table
# exists but the field does not.
#
-do_test crtidx-2.1 {
+do_test index-2.1 {
execsql {CREATE TABLE test1(f1 int, f2 int, f3 int)}
set v [catch {execsql {CREATE INDEX index1 ON test1(f4)}} msg]
lappend v $msg
# Try an index with some fields that match and others that do now.
#
-do_test crtidx-2.2 {
+do_test index-2.2 {
set v [catch {execsql {CREATE INDEX index1 ON test1(f1, f2, f4, f3)}} msg]
execsql {DROP TABLE test1}
lappend v $msg
for {set i 1} {$i<100} {incr i} {
lappend r index$i
}
-do_test crtidx-3.1 {
+do_test index-3.1 {
execsql {CREATE TABLE test1(f1 int, f2 int, f3 int, f4 int, f5 int)}
for {set i 1} {$i<100} {incr i} {
set sql "CREATE INDEX index$i ON test1(f[expr {($i%5)+1}])"
for {set i 1} {$i<100} {incr i} {
lappend r testdb/index$i.tbl
}
-do_test crtidx-3.2 {
+do_test index-3.2 {
execsql {INSERT INTO test1 VALUES(1,2,3,4,5)}
lsort -dictionary [glob testdb/index*.tbl]
} $r
# Verify that all the indices go away when we drop the table.
#
-do_test crtidx-3.3 {
+do_test index-3.3 {
execsql {DROP TABLE test1}
execsql {SELECT name FROM sqlite_master
WHERE type='index' AND tbl_name='test1'
ORDER BY name}
} {}
-do_test crtidx-3.4 {
+do_test index-3.4 {
lsort -dictionary [glob -nocomplain testdb/index*.tbl]
} {}
# an index on that table. Verify that we can select values
# from the table correctly using the index.
#
-do_test crtidx-4.1 {
+do_test index-4.1 {
execsql {CREATE TABLE test1(cnt int, power int)}
for {set i 1} {$i<20} {incr i} {
execsql "INSERT INTO test1 VALUES($i,[expr {int(pow(2,$i))}])"
execsql {CREATE INDEX index2 ON test1(cnt)}
execsql {SELECT name FROM sqlite_master ORDER BY name}
} {index1 index2 test1}
-do_test crtidx-4.2 {
+do_test index-4.2 {
execsql {SELECT cnt FROM test1 WHERE power=4}
} {2}
-do_test crtidx-4.3 {
+do_test index-4.3 {
execsql {SELECT cnt FROM test1 WHERE power=1024}
} {10}
-do_test crtidx-4.4 {
+do_test index-4.4 {
execsql {SELECT power FROM test1 WHERE cnt=6}
} {64}
-do_test crtidx-4.5 {
+do_test index-4.5 {
execsql {DROP TABLE test1}
} {}
# Do not allow indices to be added to sqlite_master
#
-do_test crtidx-5.1 {
+do_test index-5.1 {
set v [catch {execsql {CREATE INDEX index1 ON sqlite_master(name)}} msg]
lappend v $msg
} {1 {table sqlite_master may not have new indices added}}
-do_test crtidx-5.2 {
+do_test index-5.2 {
execsql {SELECT name FROM sqlite_master}
} {}
# Do not allow indices with duplicate names to be added
#
-do_test crtidx-6.1 {
+do_test index-6.1 {
execsql {CREATE TABLE test1(f1 int, f2 int)}
execsql {CREATE TABLE test2(g1 real, g2 real)}
execsql {CREATE INDEX index1 ON test1(f1)}
set v [catch {execsql {CREATE INDEX index1 ON test2(g1)}} msg]
lappend v $msg
} {1 {index "index1" already exists}}
-do_test crtidx-6.1b {
+do_test index-6.1b {
execsql {SELECT name FROM sqlite_master ORDER BY name}
} {index1 test1 test2}
-do_test crtidx-6.2 {
+do_test index-6.2 {
set v [catch {execsql {CREATE INDEX test1 ON test2(g1)}} msg]
lappend v $msg
} {1 {there is already a table named "test1"}}
-do_test crtidx-6.2b {
+do_test index-6.2b {
execsql {SELECT name FROM sqlite_master ORDER BY name}
} {index1 test1 test2}
-do_test crtidx-6.3 {
+do_test index-6.3 {
execsql {DROP TABLE test1}
execsql {DROP TABLE test2}
execsql {SELECT name FROM sqlite_master ORDER BY name}
# Create a primary key
#
-do_test crtidx-7.1 {
+do_test index-7.1 {
execsql {CREATE TABLE test1(f1 int, f2 int primary key)}
for {set i 1} {$i<20} {incr i} {
execsql "INSERT INTO test1 VALUES($i,[expr {int(pow(2,$i))}])"
}
lsort -dictionary [glob testdb/test1*.tbl]
} {testdb/test1.tbl testdb/test1__primary_key.tbl}
-do_test crtidx-7.2 {
+do_test index-7.2 {
execsql {SELECT f1 FROM test1 WHERE f2=65536}
} {16}
-do_test crtidx-7.3 {
+do_test index-7.3 {
set code [execsql {EXPLAIN SELECT f1 FROM test1 WHERE f2=65536}]
expr {[lsearch $code test1__primary_key]>0}
} {1}
+do_test index-7.4 {
+ execsql {DROP table test1}
+ execsql {SELECT name FROM sqlite_master}
+} {}
+
+# Make sure we cannot drop a non-existant table.
+#
+do_test index-8.1 {
+ set v [catch {execsql {DROP INDEX index1}} msg]
+ lappend v $msg
+} {1 {no such index: "index1"}}
+
+
finish_test
# This file implements regression tests for SQLite library. The
# focus of this file is testing the CREATE TABLE statement.
#
-# $Id: crttbl.test,v 1.2 2000/05/29 23:30:51 drh Exp $
+# $Id: table.test,v 1.1 2000/05/29 23:58:12 drh Exp $
set testdir [file dirname $argv0]
source $testdir/tester.tcl
# Create a basic table and verify it is added to sqlite_master
#
-do_test crttbl-1.1 {
+do_test table-1.1 {
execsql {
CREATE TABLE test1 (
one varchar(10),
# Verify that both table files exists in the database directory
#
-do_test crttbl-1.2 {
+do_test table-1.2 {
execsql {INSERT INTO test1 VALUES('hi', 'y''all')}
lsort [glob -nocomplain testdb/*.tbl]
} {testdb/sqlite_master.tbl testdb/test1.tbl}
# Verify the other fields of the sqlite_master file.
#
-do_test crttbl-1.3 {
+do_test table-1.3 {
execsql {SELECT name, tbl_name, type FROM sqlite_master}
} {test1 test1 table}
# Close and reopen the database. Verify that everything is
# still the same.
#
-do_test crttbl-1.4 {
+do_test table-1.4 {
db close
sqlite db testdb
execsql {SELECT name, tbl_name, type from sqlite_master}
# Drop the database and make sure it disappears.
#
-do_test crttbl-1.5 {
+do_test table-1.5 {
execsql {DROP TABLE test1}
execsql {SELECT * FROM sqlite_master}
} {}
# Verify that the file associated with the database is gone.
#
-do_test crttbl-1.5 {
+do_test table-1.5 {
lsort [glob -nocomplain testdb/*.tbl]
} {testdb/sqlite_master.tbl}
# Close and reopen the database. Verify that the table is
# still gone.
#
-do_test crttbl-1.6 {
+do_test table-1.6 {
db close
sqlite db testdb
execsql {SELECT name FROM sqlite_master}
# Verify that we cannot make two tables with the same name
#
-do_test crttbl-2.1 {
+do_test table-2.1 {
execsql {CREATE TABLE test2(one text)}
set v [catch {execsql {CREATE TABLE test2(two text)}} msg]
lappend v $msg
} {1 {table "test2" already exists}}
-do_test crttbl-2.1b {
+do_test table-2.1b {
set v [catch {execsql {CREATE TABLE sqlite_master(two text)}} msg]
lappend v $msg
} {1 {table "sqlite_master" already exists}}
-do_test crttbl-2.1c {
+do_test table-2.1c {
db close
sqlite db testdb
set v [catch {execsql {CREATE TABLE sqlite_master(two text)}} msg]
lappend v $msg
} {1 {table "sqlite_master" already exists}}
-do_test crttbl-2.1d {
+do_test table-2.1d {
execsql {DROP TABLE test2; SELECT name FROM sqlite_master}
} {}
# Verify that we cannot make a table with the same name as an index
#
-do_test crttbl-2.2 {
+do_test table-2.2 {
execsql {CREATE TABLE test2(one text); CREATE INDEX test3 ON test2(one)}
set v [catch {execsql {CREATE TABLE test3(two text)}} msg]
lappend v $msg
} {1 {there is already an index named "test3"}}
-do_test crttbl-2.2b {
+do_test table-2.2b {
db close
sqlite db testdb
set v [catch {execsql {CREATE TABLE test3(two text)}} msg]
lappend v $msg
} {1 {there is already an index named "test3"}}
-do_test crttbl-2.2c {
+do_test table-2.2c {
execsql {DROP INDEX test3}
set v [catch {execsql {CREATE TABLE test3(two text)}} msg]
lappend v $msg
} {0 {}}
-do_test crttbl-2.2d {
+do_test table-2.2d {
execsql {SELECT name FROM sqlite_master ORDER BY name}
} {test2 test3}
-do_test crttbl-2.2e {
+do_test table-2.2e {
execsql {DROP TABLE test2; DROP TABLE test3}
execsql {SELECT name FROM sqlite_master ORDER BY name}
} {}
f19 text,
f20 text
)}
-do_test crttbl-3.1 {
+do_test table-3.1 {
execsql $big_table
execsql {SELECT sql FROM sqlite_master}
} \{$big_table\}
-do_test crttbl-3.2 {
+do_test table-3.2 {
set v [catch {execsql {CREATE TABLE BIG(xyz foo)}} msg]
lappend v $msg
} {1 {table "BIG" already exists}}
-do_test crttbl-3.3 {
+do_test table-3.3 {
set v [catch {execsql {CREATE TABLE biG(xyz foo)}} msg]
lappend v $msg
} {1 {table "biG" already exists}}
-do_test crttbl-3.4 {
+do_test table-3.4 {
set v [catch {execsql {CREATE TABLE bIg(xyz foo)}} msg]
lappend v $msg
} {1 {table "bIg" already exists}}
-do_test crttbl-3.5 {
+do_test table-3.5 {
db close
sqlite db testdb
set v [catch {execsql {CREATE TABLE Big(xyz foo)}} msg]
lappend v $msg
} {1 {table "Big" already exists}}
-do_test crttbl-3.6 {
+do_test table-3.6 {
execsql {DROP TABLE big}
execsql {SELECT name FROM sqlite_master}
} {}
for {set i 1} {$i<=100} {incr i} {
lappend r test$i
}
-do_test crttbl-4.1 {
+do_test table-4.1 {
for {set i 1} {$i<=100} {incr i} {
set sql "CREATE TABLE test$i ("
for {set k 1} {$k<$i} {incr k} {
}
execsql {SELECT name FROM sqlite_master ORDER BY name}
} $r
-do_test crttbl-4.1b {
+do_test table-4.1b {
db close
sqlite db testdb
execsql {SELECT name FROM sqlite_master ORDER BY name}
for {set i 1} {$i<=100} {incr i 2} {
lappend r test$i
}
-do_test crttbl-4.2 {
+do_test table-4.2 {
for {set i 2} {$i<=100} {incr i 2} {
set sql "DROP TABLE TEST$i"
execsql $sql
# Drop the odd number tables
#
-do_test crttbl-4.3 {
+do_test table-4.3 {
for {set i 1} {$i<=100} {incr i 2} {
set sql "DROP TABLE test$i"
execsql $sql
execsql {SELECT name FROM sqlite_master ORDER BY name}
} {}
+# Try to drop a table that does not exist
+#
+do_test table-5.1 {
+ set v [catch {execsql {DROP TABLE test9}} msg]
+ lappend v $msg
+} {1 {no such table: test9}}
+
+# Try to drop sqlite_master
+#
+do_test table-5.2 {
+ set v [catch {execsql {DROP TABLE sqlite_master}} msg]
+ lappend v $msg
+} {1 {table "sqlite_master" may not be dropped}}
+
+# Make sure an EXPLAIN does not really create a new table
+#
+do_test table-5.3 {
+ execsql {EXPLAIN CREATE TABLE test1(f1 int)}
+ execsql {SELECT name FROM sqlite_master}
+} {}
+
+# Make sure an EXPLAIN does not really drop an existing table
+#
+do_test table-5.4 {
+ execsql {CREATE TABLE test1(f1 int)}
+ execsql {EXPLAIN DROP TABLE test1}
+ execsql {SELECT name FROM sqlite_master}
+} {test1}
+
finish_test