xref: /sqlite-3.40.0/test/alterauth2.test (revision 8c53b4e7)
1# 2018 October 6
2#
3# The author disclaims copyright to this source code.  In place of
4# 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.tcl
16
17# If SQLITE_OMIT_ALTERTABLE is defined, omit this file.
18ifcapable !altertable {
19  finish_test
20  return
21}
22set testprefix alterauth2
23
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"} breakpoint
28  return SQLITE_OK
29}
30db auth xAuth
31
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 BEGIN
47    DELETE FROM t1 WHERE a<new.a;
48  END;
49
50  CREATE TEMP TRIGGER tr2 AFTER UPDATE OF a, b ON t1 BEGIN
51    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_test {} {}}
86  {SQLITE_READ sqlite_master name main {}}
87  {SQLITE_READ sqlite_master sql main {}}
88  {SQLITE_READ sqlite_master tbl_name main {}}
89  {SQLITE_READ sqlite_master type main {}}
90  {SQLITE_READ sqlite_temp_master name temp {}}
91  {SQLITE_READ sqlite_temp_master sql temp {}}
92  {SQLITE_READ sqlite_temp_master type temp {}}
93  {SQLITE_SELECT {} {} {} {}}
94  {SQLITE_UPDATE sqlite_master sql main {}}
95  {SQLITE_UPDATE sqlite_temp_master sql temp {}}
96}
97
98finish_test
99