| # 2018 September 2 |
| # |
| # The author disclaims copyright to this source code. In place of |
| # a legal notice, here is a blessing: |
| # |
| # May you do good and not evil. |
| # May you find forgiveness for yourself and forgive others. |
| # May you share freely, never taking more than you give. |
| # |
| #************************************************************************* |
| # |
| |
| set testdir [file dirname $argv0] |
| |
| source $testdir/tester.tcl |
| |
| # If SQLITE_OMIT_ALTERTABLE is defined, omit this file. |
| ifcapable !altertable { |
| finish_test |
| return |
| } |
| set testprefix alterauth |
| |
| set ::auth [list] |
| proc xAuth {type args} { |
| if {$type == "SQLITE_ALTER_TABLE"} { |
| lappend ::auth [concat $type [lrange $args 0 3]] |
| } |
| return SQLITE_OK |
| } |
| db auth xAuth |
| |
| do_execsql_test 1.0 { CREATE TABLE t1(a, b, c); } |
| |
| do_test 1.1 { |
| set ::auth [list] |
| execsql { ALTER TABLE t1 RENAME TO t2 } |
| set ::auth |
| } {{SQLITE_ALTER_TABLE main t1 {} {}}} |
| |
| do_test 1.2 { |
| set ::auth [list] |
| execsql { ALTER TABLE t2 RENAME c TO ccc } |
| set ::auth |
| } {{SQLITE_ALTER_TABLE main t2 {} {}}} |
| |
| do_test 1.3 { |
| set ::auth [list] |
| execsql { ALTER TABLE t2 ADD COLUMN d } |
| set ::auth |
| } {{SQLITE_ALTER_TABLE main t2 {} {}}} |
| |
| proc xAuth {type args} { |
| if {$type == "SQLITE_ALTER_TABLE"} { |
| return SQLITE_DENY |
| } |
| return SQLITE_OK |
| } |
| |
| do_test 2.1 { |
| catchsql { ALTER TABLE t2 RENAME TO t3 } |
| } {1 {not authorized}} |
| |
| do_test 2.2 { |
| catchsql { ALTER TABLE t2 RENAME d TO ddd } |
| } {1 {not authorized}} |
| |
| do_test 2.3 { |
| catchsql { ALTER TABLE t2 ADD COLUMN e } |
| } {1 {not authorized}} |
| |
| finish_test |