AryaWu/sqlite
0
1# 2018 October 62#3# The author disclaims copyright to this source code. In place of4# a legal notice, here is a blessing:5#6# May you do good and not evil.7# May you find forgiveness for yourself and forgive others.8# May you share freely, never taking more than you give.9#10#*************************************************************************11#12 13set testdir [file dirname $argv0]14 15source $testdir/tester.tcl16 17# If SQLITE_OMIT_ALTERTABLE is defined, omit this file.18ifcapable !altertable {19 finish_test20 return21}22set testprefix alterauth223 24set ::auth [list]25proc xAuth {type args} {26 lappend ::auth [concat $type [lrange $args 0 3]]27 if {$type=="SQLITE_READ" && [lindex $args 0] == "t2"} breakpoint28 return SQLITE_OK29}30db auth xAuth31 32proc do_auth_test {tn sql authcode} {33 set script "34 set ::auth \[list\]35 execsql {$sql}36 lsort -unique \[set ::auth\]37 "38 39 set normal [list {*}$authcode]40 uplevel [list do_test $tn $script $normal]41}42 43do_execsql_test 1.0 { 44 CREATE TABLE t1(a, b, c); 45 CREATE VIEW v1 AS SELECT * FROM t1;46 CREATE TRIGGER tr1 AFTER INSERT ON t1 BEGIN47 DELETE FROM t1 WHERE a<new.a;48 END;49 50 CREATE TEMP TRIGGER tr2 AFTER UPDATE OF a, b ON t1 BEGIN51 UPDATE t1 SET a=a+1 WHERE new.b<b;52 END;53}54 55do_auth_test 1.1 {56 ALTER TABLE t1 RENAME TO t2;57} {58 {SQLITE_ALTER_TABLE main t1 {} {}} 59 {SQLITE_FUNCTION {} like {} {}} 60 {SQLITE_FUNCTION {} sqlite_rename_table {} {}} 61 {SQLITE_FUNCTION {} sqlite_rename_test {} {}} 62 {SQLITE_FUNCTION {} substr {} {}} 63 {SQLITE_READ sqlite_master name main {}} 64 {SQLITE_READ sqlite_master sql main {}} 65 {SQLITE_READ sqlite_master tbl_name main {}} 66 {SQLITE_READ sqlite_master type main {}} 67 {SQLITE_READ sqlite_temp_master name temp {}} 68 {SQLITE_READ sqlite_temp_master sql temp {}} 69 {SQLITE_READ sqlite_temp_master tbl_name temp {}} 70 {SQLITE_READ sqlite_temp_master type temp {}} 71 {SQLITE_SELECT {} {} {} {}} 72 {SQLITE_UPDATE sqlite_master name main {}} 73 {SQLITE_UPDATE sqlite_master sql main {}} 74 {SQLITE_UPDATE sqlite_master tbl_name main {}} 75 {SQLITE_UPDATE sqlite_temp_master sql temp {}} 76 {SQLITE_UPDATE sqlite_temp_master tbl_name temp {}}77}78 79do_auth_test 1.2 {80 ALTER TABLE t2 RENAME a TO aaa;81} {82 {SQLITE_ALTER_TABLE main t2 {} {}} 83 {SQLITE_FUNCTION {} like {} {}} 84 {SQLITE_FUNCTION {} sqlite_rename_column {} {}} 85 {SQLITE_FUNCTION {} sqlite_rename_quotefix {} {}} 86 {SQLITE_FUNCTION {} sqlite_rename_test {} {}} 87 {SQLITE_READ sqlite_master name main {}} 88 {SQLITE_READ sqlite_master sql main {}} 89 {SQLITE_READ sqlite_master tbl_name main {}} 90 {SQLITE_READ sqlite_master type main {}} 91 {SQLITE_READ sqlite_temp_master name temp {}} 92 {SQLITE_READ sqlite_temp_master sql temp {}} 93 {SQLITE_READ sqlite_temp_master type temp {}} 94 {SQLITE_SELECT {} {} {} {}} 95 {SQLITE_UPDATE sqlite_master sql main {}} 96 {SQLITE_UPDATE sqlite_temp_master sql temp {}}97}98 99do_auth_test 1.3 {100 ALTER TABLE t2 DROP COLUMN c;101} {102 {SQLITE_ALTER_TABLE main t2 c {}} 103 {SQLITE_FUNCTION {} like {} {}} 104 {SQLITE_FUNCTION {} sqlite_drop_column {} {}}105 {SQLITE_FUNCTION {} sqlite_rename_quotefix {} {}} 106 {SQLITE_FUNCTION {} sqlite_rename_test {} {}} 107 {SQLITE_READ sqlite_master name main {}} 108 {SQLITE_READ sqlite_master sql main {}} 109 {SQLITE_READ sqlite_master tbl_name main {}} 110 {SQLITE_READ sqlite_master type main {}} 111 {SQLITE_READ sqlite_temp_master name temp {}} 112 {SQLITE_READ sqlite_temp_master sql temp {}} 113 {SQLITE_READ sqlite_temp_master type temp {}} 114 {SQLITE_SELECT {} {} {} {}} 115 {SQLITE_UPDATE sqlite_master sql main {}}116 {SQLITE_UPDATE sqlite_temp_master sql temp {}}117}118 119do_auth_test 1.4 {120 ALTER TABLE t2 ALTER COLUMN b SET NOT NULL;121} {122 {SQLITE_ALTER_TABLE main t2 b {}} 123 {SQLITE_FUNCTION {} sqlite_add_constraint {} {}} 124 {SQLITE_FUNCTION {} sqlite_drop_constraint {} {}} 125 {SQLITE_FUNCTION {} sqlite_fail {} {}} 126 {SQLITE_READ sqlite_master sql main {}} 127 {SQLITE_READ sqlite_master tbl_name main {}} 128 {SQLITE_READ sqlite_master type main {}} 129 {SQLITE_READ t2 b main {}} 130 {SQLITE_SELECT {} {} {} {}} 131 {SQLITE_UPDATE sqlite_master sql main {}}132}133do_auth_test 1.5 {134 ALTER TABLE t2 ALTER COLUMN 'b' DROP NOT NULL;135} {136 {SQLITE_ALTER_TABLE main t2 b {}} 137 {SQLITE_FUNCTION {} sqlite_drop_constraint {} {}} 138 {SQLITE_READ sqlite_master sql main {}} 139 {SQLITE_READ sqlite_master tbl_name main {}} 140 {SQLITE_READ sqlite_master type main {}} 141 {SQLITE_UPDATE sqlite_master sql main {}}142}143 144do_auth_test 1.6 {145 ALTER TABLE t2 ADD CONSTRAINT abc CHECK (aaa>b)146} {147 {SQLITE_ALTER_TABLE main t2 {} {}} 148 {SQLITE_FUNCTION {} sqlite_add_constraint {} {}} 149 {SQLITE_FUNCTION {} sqlite_fail {} {}} 150 {SQLITE_FUNCTION {} sqlite_find_constraint {} {}} 151 {SQLITE_READ sqlite_master sql main {}} 152 {SQLITE_READ sqlite_master tbl_name main {}} 153 {SQLITE_READ sqlite_master type main {}} 154 {SQLITE_READ t2 aaa main {}} 155 {SQLITE_READ t2 b main {}} 156 {SQLITE_SELECT {} {} {} {}} 157 {SQLITE_UPDATE sqlite_master sql main {}}158}159do_auth_test 1.7 {160 ALTER TABLE t2 DROP CONSTRAINT abc;161} {162 {SQLITE_ALTER_TABLE main t2 {} {}} 163 {SQLITE_FUNCTION {} sqlite_drop_constraint {} {}} 164 {SQLITE_READ sqlite_master sql main {}} 165 {SQLITE_READ sqlite_master tbl_name main {}} 166 {SQLITE_READ sqlite_master type main {}} 167 {SQLITE_UPDATE sqlite_master sql main {}}168}169 170finish_test171 