xref: /sqlite-3.40.0/test/alterauth.test (revision 85c6892a)
1# 2018 September 2
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 alterauth
23
24set ::auth [list]
25proc xAuth {type args} {
26  if {$type == "SQLITE_ALTER_TABLE"} {
27    lappend ::auth [concat $type [lrange $args 0 3]]
28  }
29  return SQLITE_OK
30}
31db auth xAuth
32
33do_execsql_test 1.0 { CREATE TABLE t1(a, b, c); }
34
35do_test 1.1 {
36  set ::auth [list]
37  execsql { ALTER TABLE t1 RENAME TO t2 }
38  set ::auth
39} {{SQLITE_ALTER_TABLE main t1 {} {}}}
40
41do_test 1.2 {
42  set ::auth [list]
43  execsql { ALTER TABLE t2 RENAME c TO ccc }
44  set ::auth
45} {{SQLITE_ALTER_TABLE main t2 {} {}}}
46
47do_test 1.3 {
48  set ::auth [list]
49  execsql { ALTER TABLE t2 ADD COLUMN d }
50  set ::auth
51} {{SQLITE_ALTER_TABLE main t2 {} {}}}
52
53proc xAuth {type args} {
54  if {$type == "SQLITE_ALTER_TABLE"} {
55    return SQLITE_DENY
56  }
57  return SQLITE_OK
58}
59
60do_test 2.1 {
61  catchsql { ALTER TABLE t2 RENAME TO t3 }
62} {1 {not authorized}}
63
64do_test 2.2 {
65  catchsql { ALTER TABLE t2 RENAME d TO ddd }
66} {1 {not authorized}}
67
68do_test 2.3 {
69  catchsql { ALTER TABLE t2 ADD COLUMN e }
70} {1 {not authorized}}
71
72finish_test
73