107052d55Sdan# 2018 October 6 207052d55Sdan# 307052d55Sdan# The author disclaims copyright to this source code. In place of 407052d55Sdan# a legal notice, here is a blessing: 507052d55Sdan# 607052d55Sdan# May you do good and not evil. 707052d55Sdan# May you find forgiveness for yourself and forgive others. 807052d55Sdan# May you share freely, never taking more than you give. 907052d55Sdan# 1007052d55Sdan#************************************************************************* 1107052d55Sdan# 1207052d55Sdan 1307052d55Sdanset testdir [file dirname $argv0] 1407052d55Sdan 1507052d55Sdansource $testdir/tester.tcl 1607052d55Sdan 1707052d55Sdan# If SQLITE_OMIT_ALTERTABLE is defined, omit this file. 1807052d55Sdanifcapable !altertable { 1907052d55Sdan finish_test 2007052d55Sdan return 2107052d55Sdan} 2207052d55Sdanset testprefix alterauth2 2307052d55Sdan 2407052d55Sdanset ::auth [list] 2507052d55Sdanproc xAuth {type args} { 2607052d55Sdan lappend ::auth [concat $type [lrange $args 0 3]] 2707052d55Sdan if {$type=="SQLITE_READ" && [lindex $args 0] == "t2"} breakpoint 2807052d55Sdan return SQLITE_OK 2907052d55Sdan} 3007052d55Sdandb auth xAuth 3107052d55Sdan 3207052d55Sdanproc do_auth_test {tn sql authcode} { 3307052d55Sdan set script " 3407052d55Sdan set ::auth \[list\] 3507052d55Sdan execsql {$sql} 3607052d55Sdan lsort -unique \[set ::auth\] 3707052d55Sdan " 3807052d55Sdan 3907052d55Sdan set normal [list {*}$authcode] 4007052d55Sdan uplevel [list do_test $tn $script $normal] 4107052d55Sdan} 4207052d55Sdan 4307052d55Sdando_execsql_test 1.0 { 4407052d55Sdan CREATE TABLE t1(a, b, c); 4507052d55Sdan CREATE VIEW v1 AS SELECT * FROM t1; 4607052d55Sdan CREATE TRIGGER tr1 AFTER INSERT ON t1 BEGIN 4707052d55Sdan DELETE FROM t1 WHERE a<new.a; 4807052d55Sdan END; 4907052d55Sdan 5007052d55Sdan CREATE TEMP TRIGGER tr2 AFTER UPDATE OF a, b ON t1 BEGIN 5107052d55Sdan UPDATE t1 SET a=a+1 WHERE new.b<b; 5207052d55Sdan END; 5307052d55Sdan} 5407052d55Sdan 5507052d55Sdando_auth_test 1.1 { 5607052d55Sdan ALTER TABLE t1 RENAME TO t2; 5707052d55Sdan} { 5807052d55Sdan {SQLITE_ALTER_TABLE main t1 {} {}} 5907052d55Sdan {SQLITE_FUNCTION {} like {} {}} 6007052d55Sdan {SQLITE_FUNCTION {} sqlite_rename_table {} {}} 6107052d55Sdan {SQLITE_FUNCTION {} sqlite_rename_test {} {}} 6207052d55Sdan {SQLITE_FUNCTION {} substr {} {}} 6307052d55Sdan {SQLITE_READ sqlite_master name main {}} 6407052d55Sdan {SQLITE_READ sqlite_master sql main {}} 6507052d55Sdan {SQLITE_READ sqlite_master tbl_name main {}} 6607052d55Sdan {SQLITE_READ sqlite_master type main {}} 6707052d55Sdan {SQLITE_READ sqlite_temp_master name temp {}} 6807052d55Sdan {SQLITE_READ sqlite_temp_master sql temp {}} 6907052d55Sdan {SQLITE_READ sqlite_temp_master tbl_name temp {}} 7007052d55Sdan {SQLITE_READ sqlite_temp_master type temp {}} 7107052d55Sdan {SQLITE_SELECT {} {} {} {}} 7207052d55Sdan {SQLITE_UPDATE sqlite_master name main {}} 7307052d55Sdan {SQLITE_UPDATE sqlite_master sql main {}} 7407052d55Sdan {SQLITE_UPDATE sqlite_master tbl_name main {}} 7507052d55Sdan {SQLITE_UPDATE sqlite_temp_master sql temp {}} 7607052d55Sdan {SQLITE_UPDATE sqlite_temp_master tbl_name temp {}} 7707052d55Sdan} 7807052d55Sdan 7907052d55Sdando_auth_test 1.2 { 8007052d55Sdan ALTER TABLE t2 RENAME a TO aaa; 8107052d55Sdan} { 8207052d55Sdan {SQLITE_ALTER_TABLE main t2 {} {}} 8307052d55Sdan {SQLITE_FUNCTION {} like {} {}} 8407052d55Sdan {SQLITE_FUNCTION {} sqlite_rename_column {} {}} 852ad080aaSdan {SQLITE_FUNCTION {} sqlite_rename_quotefix {} {}} 8607052d55Sdan {SQLITE_FUNCTION {} sqlite_rename_test {} {}} 8707052d55Sdan {SQLITE_READ sqlite_master name main {}} 8807052d55Sdan {SQLITE_READ sqlite_master sql main {}} 8907052d55Sdan {SQLITE_READ sqlite_master tbl_name main {}} 9007052d55Sdan {SQLITE_READ sqlite_master type main {}} 9107052d55Sdan {SQLITE_READ sqlite_temp_master name temp {}} 9207052d55Sdan {SQLITE_READ sqlite_temp_master sql temp {}} 9307052d55Sdan {SQLITE_READ sqlite_temp_master type temp {}} 9407052d55Sdan {SQLITE_SELECT {} {} {} {}} 9507052d55Sdan {SQLITE_UPDATE sqlite_master sql main {}} 9607052d55Sdan {SQLITE_UPDATE sqlite_temp_master sql temp {}} 9707052d55Sdan} 9807052d55Sdan 99678f3b33Sdando_auth_test 1.3 { 100678f3b33Sdan ALTER TABLE t2 DROP COLUMN c; 101678f3b33Sdan} { 102*29a7bbffSdrh {SQLITE_ALTER_TABLE main t2 c {}} 103678f3b33Sdan {SQLITE_FUNCTION {} like {} {}} 104678f3b33Sdan {SQLITE_FUNCTION {} sqlite_drop_column {} {}} 1052ad080aaSdan {SQLITE_FUNCTION {} sqlite_rename_quotefix {} {}} 106678f3b33Sdan {SQLITE_FUNCTION {} sqlite_rename_test {} {}} 107678f3b33Sdan {SQLITE_READ sqlite_master name main {}} 108678f3b33Sdan {SQLITE_READ sqlite_master sql main {}} 109678f3b33Sdan {SQLITE_READ sqlite_master tbl_name main {}} 110678f3b33Sdan {SQLITE_READ sqlite_master type main {}} 111678f3b33Sdan {SQLITE_READ sqlite_temp_master name temp {}} 112678f3b33Sdan {SQLITE_READ sqlite_temp_master sql temp {}} 113678f3b33Sdan {SQLITE_READ sqlite_temp_master type temp {}} 114678f3b33Sdan {SQLITE_SELECT {} {} {} {}} 115678f3b33Sdan {SQLITE_UPDATE sqlite_master sql main {}} 1162ad080aaSdan {SQLITE_UPDATE sqlite_temp_master sql temp {}} 117678f3b33Sdan} 118678f3b33Sdan 11907052d55Sdanfinish_test 120