11db95106Sdan# 2010 Jun 28 21db95106Sdan# 31db95106Sdan# The author disclaims copyright to this source code. In place of 41db95106Sdan# a legal notice, here is a blessing: 51db95106Sdan# 61db95106Sdan# May you do good and not evil. 71db95106Sdan# May you find forgiveness for yourself and forgive others. 81db95106Sdan# May you share freely, never taking more than you give. 91db95106Sdan# 101db95106Sdan#*********************************************************************** 111db95106Sdan# This file implements regression tests for SQLite library. 121db95106Sdan# 131db95106Sdan 141db95106Sdanset testdir [file dirname $argv0] 151db95106Sdansource $testdir/tester.tcl 161db95106Sdansource $testdir/malloc_common.tcl 171db95106Sdansource $testdir/lock_common.tcl 181db95106Sdan 19*37f3ac8fSdan# If SQLITE_OMIT_ALTERTABLE is defined, omit this file. 20*37f3ac8fSdanifcapable !altertable { 21*37f3ac8fSdan finish_test 22*37f3ac8fSdan return 23*37f3ac8fSdan} 24*37f3ac8fSdan 251db95106Sdan# This block tests that if one client modifies the database schema, a 261db95106Sdan# second client updates its internal cache of the database schema before 271db95106Sdan# executing any queries. Specifically, it does not return a "no such column" 281db95106Sdan# or "no such table" error if the table or column in question does exist 291db95106Sdan# but was added after the second client loaded its cache of the database 301db95106Sdan# schema. 311db95106Sdan# 321db95106Sdan# Types of schema modifications: 331db95106Sdan# 341db95106Sdan# 1. Adding a database table. 351db95106Sdan# 2. Adding a database view. 361db95106Sdan# 3. Adding a database index. 371db95106Sdan# 4. Adding a database trigger. 381db95106Sdan# 5. Adding a column to an existing table (ALTER TABLE). 391db95106Sdan# 401db95106Sdando_multiclient_test tn { 411db95106Sdan 421db95106Sdan # Have connections [db1] and [db2] load the current database schema. 431db95106Sdan # 441db95106Sdan sql1 { SELECT * FROM sqlite_master } 451db95106Sdan sql2 { SELECT * FROM sqlite_master } 461db95106Sdan 471db95106Sdan foreach {tn2 c1 c2} { 481db95106Sdan 1 { CREATE TABLE t1(a, b) } { SELECT * FROM t1 } 491db95106Sdan 2 { CREATE TABLE t2(a, b) } { UPDATE t2 SET a = b } 501db95106Sdan 3 { CREATE TABLE t3(a, b) } { DELETE FROM t3 } 511db95106Sdan 4 { CREATE TABLE t4(a, b) } { INSERT INTO t4 VALUES(1, 2) } 521db95106Sdan 5 { CREATE TABLE t5(a, b) } { DROP TABLE t5 } 531db95106Sdan 6 { CREATE TABLE t6(a, b) } { CREATE INDEX i1 ON t6(a) } 541db95106Sdan 551db95106Sdan 7 { ALTER TABLE t1 ADD COLUMN c } { SELECT a, b, c FROM t1 } 561db95106Sdan 8 { ALTER TABLE t2 ADD COLUMN c } { UPDATE t2 SET a = c } 571db95106Sdan 9 { ALTER TABLE t2 ADD COLUMN d } { UPDATE t2 SET d = c } 581db95106Sdan 10 { ALTER TABLE t3 ADD COLUMN c } { DELETE FROM t3 WHERE c>10 } 591db95106Sdan 11 { ALTER TABLE t4 ADD COLUMN c } { INSERT INTO t4(a,b,c) VALUES(1,2,3) } 601db95106Sdan 12 { ALTER TABLE t6 ADD COLUMN c } { CREATE INDEX i2 ON t6(c) } 611db95106Sdan 13 { ALTER TABLE t6 ADD COLUMN d } { 621db95106Sdan CREATE TRIGGER tr1 AFTER UPDATE OF d ON t6 BEGIN 631db95106Sdan SELECT 1, 2, 3; 641db95106Sdan END; 651db95106Sdan } 661db95106Sdan 671db95106Sdan 14 { CREATE INDEX i3 ON t1(a) } { DROP INDEX i3 } 681db95106Sdan 15 { CREATE INDEX i4 ON t2(a) } { 691db95106Sdan SELECT * FROM t2 INDEXED BY i4 ORDER BY a 701db95106Sdan } 711db95106Sdan 721db95106Sdan 16 { CREATE TRIGGER tr2 AFTER INSERT ON t3 BEGIN SELECT 1 ; END } { 731db95106Sdan DROP TRIGGER tr2 741db95106Sdan } 751db95106Sdan 761db95106Sdan 17 { CREATE VIEW v1 AS SELECT * FROM t1 } { SELECT a,b,c FROM v1 } 771db95106Sdan 18 { ALTER TABLE t1 ADD COLUMN d } { SELECT a,b,c,d FROM v1 } 781db95106Sdan 791db95106Sdan 19 { CREATE TABLE t7(a, b) } { 801db95106Sdan DROP TABLE IF EXISTS t7; CREATE TABLE t7(c, d); 811db95106Sdan } 821db95106Sdan 20 { CREATE INDEX i5 ON t7(c, d) } { 831db95106Sdan DROP INDEX IF EXISTS i5; CREATE INDEX i5 ON t7(c) 841db95106Sdan } 851db95106Sdan 21 { CREATE TRIGGER tr3 BEFORE DELETE ON t7 BEGIN SELECT 1, 2, 3 ; END } { 861db95106Sdan DROP TRIGGER IF EXISTS tr3; 871db95106Sdan CREATE TRIGGER tr3 AFTER INSERT ON t7 BEGIN SELECT 1, 2, 3 ; END 881db95106Sdan } 899c788140Sdan 909c788140Sdan 22 { CREATE TABLE t8(a, b) } { 919c788140Sdan CREATE TRIGGER tr4 AFTER UPDATE OF a ON t8 BEGIN 929c788140Sdan SELECT 1, 2, 3; 939c788140Sdan END; 949c788140Sdan } 951db95106Sdan } { 961db95106Sdan do_test schema3-1.$tn.$tn2 { 971db95106Sdan sql1 $c1 981db95106Sdan sql2 $c2 991db95106Sdan } {} 1001db95106Sdan } 1011db95106Sdan} 1021db95106Sdan 1031db95106Sdanfinish_test 104