1*c5c4113dSnw141292 2*c5c4113dSnw141292#pragma ident "%Z%%M% %I% %E% SMI" 3*c5c4113dSnw141292 4*c5c4113dSnw141292# 2003 April 4 5*c5c4113dSnw141292# 6*c5c4113dSnw141292# The author disclaims copyright to this source code. In place of 7*c5c4113dSnw141292# a legal notice, here is a blessing: 8*c5c4113dSnw141292# 9*c5c4113dSnw141292# May you do good and not evil. 10*c5c4113dSnw141292# May you find forgiveness for yourself and forgive others. 11*c5c4113dSnw141292# May you share freely, never taking more than you give. 12*c5c4113dSnw141292# 13*c5c4113dSnw141292#*********************************************************************** 14*c5c4113dSnw141292# This file implements regression tests for SQLite library. The 15*c5c4113dSnw141292# focus of this script is testing the ATTACH and DETACH commands 16*c5c4113dSnw141292# and related functionality. 17*c5c4113dSnw141292# 18*c5c4113dSnw141292# $Id: auth.test,v 1.12 2003/12/07 00:24:35 drh Exp $ 19*c5c4113dSnw141292# 20*c5c4113dSnw141292 21*c5c4113dSnw141292set testdir [file dirname $argv0] 22*c5c4113dSnw141292source $testdir/tester.tcl 23*c5c4113dSnw141292 24*c5c4113dSnw141292# disable this test if the SQLITE_OMIT_AUTHORIZATION macro is 25*c5c4113dSnw141292# defined during compilation. 26*c5c4113dSnw141292 27*c5c4113dSnw141292do_test auth-1.1.1 { 28*c5c4113dSnw141292 db close 29*c5c4113dSnw141292 set ::DB [sqlite db test.db] 30*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 31*c5c4113dSnw141292 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} { 32*c5c4113dSnw141292 return SQLITE_DENY 33*c5c4113dSnw141292 } 34*c5c4113dSnw141292 return SQLITE_OK 35*c5c4113dSnw141292 } 36*c5c4113dSnw141292 db authorizer ::auth 37*c5c4113dSnw141292 catchsql {CREATE TABLE t1(a,b,c)} 38*c5c4113dSnw141292} {1 {not authorized}} 39*c5c4113dSnw141292do_test auth-1.1.2 { 40*c5c4113dSnw141292 db errorcode 41*c5c4113dSnw141292} {23} 42*c5c4113dSnw141292do_test auth-1.2 { 43*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_master} 44*c5c4113dSnw141292} {} 45*c5c4113dSnw141292do_test auth-1.3.1 { 46*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 47*c5c4113dSnw141292 if {$code=="SQLITE_CREATE_TABLE"} { 48*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 49*c5c4113dSnw141292 return SQLITE_DENY 50*c5c4113dSnw141292 } 51*c5c4113dSnw141292 return SQLITE_OK 52*c5c4113dSnw141292 } 53*c5c4113dSnw141292 catchsql {CREATE TABLE t1(a,b,c)} 54*c5c4113dSnw141292} {1 {not authorized}} 55*c5c4113dSnw141292do_test auth-1.3.2 { 56*c5c4113dSnw141292 db errorcode 57*c5c4113dSnw141292} {23} 58*c5c4113dSnw141292do_test auth-1.3.3 { 59*c5c4113dSnw141292 set ::authargs 60*c5c4113dSnw141292} {t1 {} main {}} 61*c5c4113dSnw141292do_test auth-1.4 { 62*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_master} 63*c5c4113dSnw141292} {} 64*c5c4113dSnw141292 65*c5c4113dSnw141292do_test auth-1.5 { 66*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 67*c5c4113dSnw141292 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} { 68*c5c4113dSnw141292 return SQLITE_DENY 69*c5c4113dSnw141292 } 70*c5c4113dSnw141292 return SQLITE_OK 71*c5c4113dSnw141292 } 72*c5c4113dSnw141292 catchsql {CREATE TEMP TABLE t1(a,b,c)} 73*c5c4113dSnw141292} {1 {not authorized}} 74*c5c4113dSnw141292do_test auth-1.6 { 75*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_temp_master} 76*c5c4113dSnw141292} {} 77*c5c4113dSnw141292do_test auth-1.7.1 { 78*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 79*c5c4113dSnw141292 if {$code=="SQLITE_CREATE_TEMP_TABLE"} { 80*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 81*c5c4113dSnw141292 return SQLITE_DENY 82*c5c4113dSnw141292 } 83*c5c4113dSnw141292 return SQLITE_OK 84*c5c4113dSnw141292 } 85*c5c4113dSnw141292 catchsql {CREATE TEMP TABLE t1(a,b,c)} 86*c5c4113dSnw141292} {1 {not authorized}} 87*c5c4113dSnw141292do_test auth-1.7.2 { 88*c5c4113dSnw141292 set ::authargs 89*c5c4113dSnw141292} {t1 {} temp {}} 90*c5c4113dSnw141292do_test auth-1.8 { 91*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_temp_master} 92*c5c4113dSnw141292} {} 93*c5c4113dSnw141292 94*c5c4113dSnw141292do_test auth-1.9 { 95*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 96*c5c4113dSnw141292 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} { 97*c5c4113dSnw141292 return SQLITE_IGNORE 98*c5c4113dSnw141292 } 99*c5c4113dSnw141292 return SQLITE_OK 100*c5c4113dSnw141292 } 101*c5c4113dSnw141292 catchsql {CREATE TABLE t1(a,b,c)} 102*c5c4113dSnw141292} {0 {}} 103*c5c4113dSnw141292do_test auth-1.10 { 104*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_master} 105*c5c4113dSnw141292} {} 106*c5c4113dSnw141292do_test auth-1.11 { 107*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 108*c5c4113dSnw141292 if {$code=="SQLITE_CREATE_TABLE"} { 109*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 110*c5c4113dSnw141292 return SQLITE_IGNORE 111*c5c4113dSnw141292 } 112*c5c4113dSnw141292 return SQLITE_OK 113*c5c4113dSnw141292 } 114*c5c4113dSnw141292 catchsql {CREATE TABLE t1(a,b,c)} 115*c5c4113dSnw141292} {0 {}} 116*c5c4113dSnw141292do_test auth-1.12 { 117*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_master} 118*c5c4113dSnw141292} {} 119*c5c4113dSnw141292do_test auth-1.13 { 120*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 121*c5c4113dSnw141292 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} { 122*c5c4113dSnw141292 return SQLITE_IGNORE 123*c5c4113dSnw141292 } 124*c5c4113dSnw141292 return SQLITE_OK 125*c5c4113dSnw141292 } 126*c5c4113dSnw141292 catchsql {CREATE TEMP TABLE t1(a,b,c)} 127*c5c4113dSnw141292} {0 {}} 128*c5c4113dSnw141292do_test auth-1.14 { 129*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_temp_master} 130*c5c4113dSnw141292} {} 131*c5c4113dSnw141292do_test auth-1.15 { 132*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 133*c5c4113dSnw141292 if {$code=="SQLITE_CREATE_TEMP_TABLE"} { 134*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 135*c5c4113dSnw141292 return SQLITE_IGNORE 136*c5c4113dSnw141292 } 137*c5c4113dSnw141292 return SQLITE_OK 138*c5c4113dSnw141292 } 139*c5c4113dSnw141292 catchsql {CREATE TEMP TABLE t1(a,b,c)} 140*c5c4113dSnw141292} {0 {}} 141*c5c4113dSnw141292do_test auth-1.16 { 142*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_temp_master} 143*c5c4113dSnw141292} {} 144*c5c4113dSnw141292 145*c5c4113dSnw141292do_test auth-1.17 { 146*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 147*c5c4113dSnw141292 if {$code=="SQLITE_CREATE_TABLE"} { 148*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 149*c5c4113dSnw141292 return SQLITE_DENY 150*c5c4113dSnw141292 } 151*c5c4113dSnw141292 return SQLITE_OK 152*c5c4113dSnw141292 } 153*c5c4113dSnw141292 catchsql {CREATE TEMP TABLE t1(a,b,c)} 154*c5c4113dSnw141292} {0 {}} 155*c5c4113dSnw141292do_test auth-1.18 { 156*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_temp_master} 157*c5c4113dSnw141292} {t1} 158*c5c4113dSnw141292do_test auth-1.19.1 { 159*c5c4113dSnw141292 set ::authargs {} 160*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 161*c5c4113dSnw141292 if {$code=="SQLITE_CREATE_TEMP_TABLE"} { 162*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 163*c5c4113dSnw141292 return SQLITE_DENY 164*c5c4113dSnw141292 } 165*c5c4113dSnw141292 return SQLITE_OK 166*c5c4113dSnw141292 } 167*c5c4113dSnw141292 catchsql {CREATE TABLE t2(a,b,c)} 168*c5c4113dSnw141292} {0 {}} 169*c5c4113dSnw141292do_test auth-1.19.2 { 170*c5c4113dSnw141292 set ::authargs 171*c5c4113dSnw141292} {} 172*c5c4113dSnw141292do_test auth-1.20 { 173*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_master} 174*c5c4113dSnw141292} {t2} 175*c5c4113dSnw141292 176*c5c4113dSnw141292do_test auth-1.21.1 { 177*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 178*c5c4113dSnw141292 if {$code=="SQLITE_DROP_TABLE"} { 179*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 180*c5c4113dSnw141292 return SQLITE_DENY 181*c5c4113dSnw141292 } 182*c5c4113dSnw141292 return SQLITE_OK 183*c5c4113dSnw141292 } 184*c5c4113dSnw141292 catchsql {DROP TABLE t2} 185*c5c4113dSnw141292} {1 {not authorized}} 186*c5c4113dSnw141292do_test auth-1.21.2 { 187*c5c4113dSnw141292 set ::authargs 188*c5c4113dSnw141292} {t2 {} main {}} 189*c5c4113dSnw141292do_test auth-1.22 { 190*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_master} 191*c5c4113dSnw141292} {t2} 192*c5c4113dSnw141292do_test auth-1.23.1 { 193*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 194*c5c4113dSnw141292 if {$code=="SQLITE_DROP_TABLE"} { 195*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 196*c5c4113dSnw141292 return SQLITE_IGNORE 197*c5c4113dSnw141292 } 198*c5c4113dSnw141292 return SQLITE_OK 199*c5c4113dSnw141292 } 200*c5c4113dSnw141292 catchsql {DROP TABLE t2} 201*c5c4113dSnw141292} {0 {}} 202*c5c4113dSnw141292do_test auth-1.23.2 { 203*c5c4113dSnw141292 set ::authargs 204*c5c4113dSnw141292} {t2 {} main {}} 205*c5c4113dSnw141292do_test auth-1.24 { 206*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_master} 207*c5c4113dSnw141292} {t2} 208*c5c4113dSnw141292 209*c5c4113dSnw141292do_test auth-1.25 { 210*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 211*c5c4113dSnw141292 if {$code=="SQLITE_DROP_TEMP_TABLE"} { 212*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 213*c5c4113dSnw141292 return SQLITE_DENY 214*c5c4113dSnw141292 } 215*c5c4113dSnw141292 return SQLITE_OK 216*c5c4113dSnw141292 } 217*c5c4113dSnw141292 catchsql {DROP TABLE t1} 218*c5c4113dSnw141292} {1 {not authorized}} 219*c5c4113dSnw141292do_test auth-1.26 { 220*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_temp_master} 221*c5c4113dSnw141292} {t1} 222*c5c4113dSnw141292do_test auth-1.27 { 223*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 224*c5c4113dSnw141292 if {$code=="SQLITE_DROP_TEMP_TABLE"} { 225*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 226*c5c4113dSnw141292 return SQLITE_IGNORE 227*c5c4113dSnw141292 } 228*c5c4113dSnw141292 return SQLITE_OK 229*c5c4113dSnw141292 } 230*c5c4113dSnw141292 catchsql {DROP TABLE t1} 231*c5c4113dSnw141292} {0 {}} 232*c5c4113dSnw141292do_test auth-1.28 { 233*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_temp_master} 234*c5c4113dSnw141292} {t1} 235*c5c4113dSnw141292 236*c5c4113dSnw141292do_test auth-1.29 { 237*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 238*c5c4113dSnw141292 if {$code=="SQLITE_INSERT" && $arg1=="t2"} { 239*c5c4113dSnw141292 return SQLITE_DENY 240*c5c4113dSnw141292 } 241*c5c4113dSnw141292 return SQLITE_OK 242*c5c4113dSnw141292 } 243*c5c4113dSnw141292 catchsql {INSERT INTO t2 VALUES(1,2,3)} 244*c5c4113dSnw141292} {1 {not authorized}} 245*c5c4113dSnw141292do_test auth-1.30 { 246*c5c4113dSnw141292 execsql {SELECT * FROM t2} 247*c5c4113dSnw141292} {} 248*c5c4113dSnw141292do_test auth-1.31 { 249*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 250*c5c4113dSnw141292 if {$code=="SQLITE_INSERT" && $arg1=="t2"} { 251*c5c4113dSnw141292 return SQLITE_IGNORE 252*c5c4113dSnw141292 } 253*c5c4113dSnw141292 return SQLITE_OK 254*c5c4113dSnw141292 } 255*c5c4113dSnw141292 catchsql {INSERT INTO t2 VALUES(1,2,3)} 256*c5c4113dSnw141292} {0 {}} 257*c5c4113dSnw141292do_test auth-1.32 { 258*c5c4113dSnw141292 execsql {SELECT * FROM t2} 259*c5c4113dSnw141292} {} 260*c5c4113dSnw141292do_test auth-1.33 { 261*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 262*c5c4113dSnw141292 if {$code=="SQLITE_INSERT" && $arg1=="t1"} { 263*c5c4113dSnw141292 return SQLITE_IGNORE 264*c5c4113dSnw141292 } 265*c5c4113dSnw141292 return SQLITE_OK 266*c5c4113dSnw141292 } 267*c5c4113dSnw141292 catchsql {INSERT INTO t2 VALUES(1,2,3)} 268*c5c4113dSnw141292} {0 {}} 269*c5c4113dSnw141292do_test auth-1.34 { 270*c5c4113dSnw141292 execsql {SELECT * FROM t2} 271*c5c4113dSnw141292} {1 2 3} 272*c5c4113dSnw141292 273*c5c4113dSnw141292do_test auth-1.35.1 { 274*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 275*c5c4113dSnw141292 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="b"} { 276*c5c4113dSnw141292 return SQLITE_DENY 277*c5c4113dSnw141292 } 278*c5c4113dSnw141292 return SQLITE_OK 279*c5c4113dSnw141292 } 280*c5c4113dSnw141292 catchsql {SELECT * FROM t2} 281*c5c4113dSnw141292} {1 {access to t2.b is prohibited}} 282*c5c4113dSnw141292do_test auth-1.35.2 { 283*c5c4113dSnw141292 execsql {ATTACH DATABASE 'test.db' AS two} 284*c5c4113dSnw141292 catchsql {SELECT * FROM two.t2} 285*c5c4113dSnw141292} {1 {access to two.t2.b is prohibited}} 286*c5c4113dSnw141292execsql {DETACH DATABASE two} 287*c5c4113dSnw141292do_test auth-1.36 { 288*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 289*c5c4113dSnw141292 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="b"} { 290*c5c4113dSnw141292 return SQLITE_IGNORE 291*c5c4113dSnw141292 } 292*c5c4113dSnw141292 return SQLITE_OK 293*c5c4113dSnw141292 } 294*c5c4113dSnw141292 catchsql {SELECT * FROM t2} 295*c5c4113dSnw141292} {0 {1 {} 3}} 296*c5c4113dSnw141292do_test auth-1.37 { 297*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 298*c5c4113dSnw141292 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="b"} { 299*c5c4113dSnw141292 return SQLITE_IGNORE 300*c5c4113dSnw141292 } 301*c5c4113dSnw141292 return SQLITE_OK 302*c5c4113dSnw141292 } 303*c5c4113dSnw141292 catchsql {SELECT * FROM t2 WHERE b=2} 304*c5c4113dSnw141292} {0 {}} 305*c5c4113dSnw141292do_test auth-1.38 { 306*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 307*c5c4113dSnw141292 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="a"} { 308*c5c4113dSnw141292 return SQLITE_IGNORE 309*c5c4113dSnw141292 } 310*c5c4113dSnw141292 return SQLITE_OK 311*c5c4113dSnw141292 } 312*c5c4113dSnw141292 catchsql {SELECT * FROM t2 WHERE b=2} 313*c5c4113dSnw141292} {0 {{} 2 3}} 314*c5c4113dSnw141292do_test auth-1.39 { 315*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 316*c5c4113dSnw141292 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="b"} { 317*c5c4113dSnw141292 return SQLITE_IGNORE 318*c5c4113dSnw141292 } 319*c5c4113dSnw141292 return SQLITE_OK 320*c5c4113dSnw141292 } 321*c5c4113dSnw141292 catchsql {SELECT * FROM t2 WHERE b IS NULL} 322*c5c4113dSnw141292} {0 {1 {} 3}} 323*c5c4113dSnw141292do_test auth-1.40 { 324*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 325*c5c4113dSnw141292 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="b"} { 326*c5c4113dSnw141292 return SQLITE_DENY 327*c5c4113dSnw141292 } 328*c5c4113dSnw141292 return SQLITE_OK 329*c5c4113dSnw141292 } 330*c5c4113dSnw141292 catchsql {SELECT a,c FROM t2 WHERE b IS NULL} 331*c5c4113dSnw141292} {1 {access to t2.b is prohibited}} 332*c5c4113dSnw141292 333*c5c4113dSnw141292do_test auth-1.41 { 334*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 335*c5c4113dSnw141292 if {$code=="SQLITE_UPDATE" && $arg1=="t2" && $arg2=="b"} { 336*c5c4113dSnw141292 return SQLITE_DENY 337*c5c4113dSnw141292 } 338*c5c4113dSnw141292 return SQLITE_OK 339*c5c4113dSnw141292 } 340*c5c4113dSnw141292 catchsql {UPDATE t2 SET a=11} 341*c5c4113dSnw141292} {0 {}} 342*c5c4113dSnw141292do_test auth-1.42 { 343*c5c4113dSnw141292 execsql {SELECT * FROM t2} 344*c5c4113dSnw141292} {11 2 3} 345*c5c4113dSnw141292do_test auth-1.43 { 346*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 347*c5c4113dSnw141292 if {$code=="SQLITE_UPDATE" && $arg1=="t2" && $arg2=="b"} { 348*c5c4113dSnw141292 return SQLITE_DENY 349*c5c4113dSnw141292 } 350*c5c4113dSnw141292 return SQLITE_OK 351*c5c4113dSnw141292 } 352*c5c4113dSnw141292 catchsql {UPDATE t2 SET b=22, c=33} 353*c5c4113dSnw141292} {1 {not authorized}} 354*c5c4113dSnw141292do_test auth-1.44 { 355*c5c4113dSnw141292 execsql {SELECT * FROM t2} 356*c5c4113dSnw141292} {11 2 3} 357*c5c4113dSnw141292do_test auth-1.45 { 358*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 359*c5c4113dSnw141292 if {$code=="SQLITE_UPDATE" && $arg1=="t2" && $arg2=="b"} { 360*c5c4113dSnw141292 return SQLITE_IGNORE 361*c5c4113dSnw141292 } 362*c5c4113dSnw141292 return SQLITE_OK 363*c5c4113dSnw141292 } 364*c5c4113dSnw141292 catchsql {UPDATE t2 SET b=22, c=33} 365*c5c4113dSnw141292} {0 {}} 366*c5c4113dSnw141292do_test auth-1.46 { 367*c5c4113dSnw141292 execsql {SELECT * FROM t2} 368*c5c4113dSnw141292} {11 2 33} 369*c5c4113dSnw141292 370*c5c4113dSnw141292do_test auth-1.47 { 371*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 372*c5c4113dSnw141292 if {$code=="SQLITE_DELETE" && $arg1=="t2"} { 373*c5c4113dSnw141292 return SQLITE_DENY 374*c5c4113dSnw141292 } 375*c5c4113dSnw141292 return SQLITE_OK 376*c5c4113dSnw141292 } 377*c5c4113dSnw141292 catchsql {DELETE FROM t2 WHERE a=11} 378*c5c4113dSnw141292} {1 {not authorized}} 379*c5c4113dSnw141292do_test auth-1.48 { 380*c5c4113dSnw141292 execsql {SELECT * FROM t2} 381*c5c4113dSnw141292} {11 2 33} 382*c5c4113dSnw141292do_test auth-1.49 { 383*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 384*c5c4113dSnw141292 if {$code=="SQLITE_DELETE" && $arg1=="t2"} { 385*c5c4113dSnw141292 return SQLITE_IGNORE 386*c5c4113dSnw141292 } 387*c5c4113dSnw141292 return SQLITE_OK 388*c5c4113dSnw141292 } 389*c5c4113dSnw141292 catchsql {DELETE FROM t2 WHERE a=11} 390*c5c4113dSnw141292} {0 {}} 391*c5c4113dSnw141292do_test auth-1.50 { 392*c5c4113dSnw141292 execsql {SELECT * FROM t2} 393*c5c4113dSnw141292} {11 2 33} 394*c5c4113dSnw141292 395*c5c4113dSnw141292do_test auth-1.51 { 396*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 397*c5c4113dSnw141292 if {$code=="SQLITE_SELECT"} { 398*c5c4113dSnw141292 return SQLITE_DENY 399*c5c4113dSnw141292 } 400*c5c4113dSnw141292 return SQLITE_OK 401*c5c4113dSnw141292 } 402*c5c4113dSnw141292 catchsql {SELECT * FROM t2} 403*c5c4113dSnw141292} {1 {not authorized}} 404*c5c4113dSnw141292do_test auth-1.52 { 405*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 406*c5c4113dSnw141292 if {$code=="SQLITE_SELECT"} { 407*c5c4113dSnw141292 return SQLITE_IGNORE 408*c5c4113dSnw141292 } 409*c5c4113dSnw141292 return SQLITE_OK 410*c5c4113dSnw141292 } 411*c5c4113dSnw141292 catchsql {SELECT * FROM t2} 412*c5c4113dSnw141292} {0 {}} 413*c5c4113dSnw141292do_test auth-1.53 { 414*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 415*c5c4113dSnw141292 if {$code=="SQLITE_SELECT"} { 416*c5c4113dSnw141292 return SQLITE_OK 417*c5c4113dSnw141292 } 418*c5c4113dSnw141292 return SQLITE_OK 419*c5c4113dSnw141292 } 420*c5c4113dSnw141292 catchsql {SELECT * FROM t2} 421*c5c4113dSnw141292} {0 {11 2 33}} 422*c5c4113dSnw141292 423*c5c4113dSnw141292set f [open data1.txt w] 424*c5c4113dSnw141292puts $f "7:8:9" 425*c5c4113dSnw141292close $f 426*c5c4113dSnw141292do_test auth-1.54 { 427*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 428*c5c4113dSnw141292 if {$code=="SQLITE_COPY"} { 429*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 430*c5c4113dSnw141292 return SQLITE_DENY 431*c5c4113dSnw141292 } 432*c5c4113dSnw141292 return SQLITE_OK 433*c5c4113dSnw141292 } 434*c5c4113dSnw141292 catchsql {COPY t2 FROM 'data1.txt' USING DELIMITERS ':'} 435*c5c4113dSnw141292} {1 {not authorized}} 436*c5c4113dSnw141292do_test auth-1.55 { 437*c5c4113dSnw141292 set ::authargs 438*c5c4113dSnw141292} {t2 data1.txt main {}} 439*c5c4113dSnw141292do_test auth-1.56 { 440*c5c4113dSnw141292 execsql {SELECT * FROM t2} 441*c5c4113dSnw141292} {11 2 33} 442*c5c4113dSnw141292do_test auth-1.57 { 443*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 444*c5c4113dSnw141292 if {$code=="SQLITE_COPY"} { 445*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 446*c5c4113dSnw141292 return SQLITE_IGNORE 447*c5c4113dSnw141292 } 448*c5c4113dSnw141292 return SQLITE_OK 449*c5c4113dSnw141292 } 450*c5c4113dSnw141292 catchsql {COPY t2 FROM 'data1.txt' USING DELIMITERS ':'} 451*c5c4113dSnw141292} {0 {}} 452*c5c4113dSnw141292do_test auth-1.58 { 453*c5c4113dSnw141292 set ::authargs 454*c5c4113dSnw141292} {t2 data1.txt main {}} 455*c5c4113dSnw141292do_test auth-1.59 { 456*c5c4113dSnw141292 execsql {SELECT * FROM t2} 457*c5c4113dSnw141292} {11 2 33} 458*c5c4113dSnw141292do_test auth-1.60 { 459*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 460*c5c4113dSnw141292 if {$code=="SQLITE_COPY"} { 461*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 462*c5c4113dSnw141292 return SQLITE_OK 463*c5c4113dSnw141292 } 464*c5c4113dSnw141292 return SQLITE_OK 465*c5c4113dSnw141292 } 466*c5c4113dSnw141292 catchsql {COPY t2 FROM 'data1.txt' USING DELIMITERS ':'} 467*c5c4113dSnw141292} {0 {}} 468*c5c4113dSnw141292do_test auth-1.61 { 469*c5c4113dSnw141292 set ::authargs 470*c5c4113dSnw141292} {t2 data1.txt main {}} 471*c5c4113dSnw141292do_test auth-1.62 { 472*c5c4113dSnw141292 execsql {SELECT * FROM t2} 473*c5c4113dSnw141292} {11 2 33 7 8 9} 474*c5c4113dSnw141292 475*c5c4113dSnw141292do_test auth-1.63 { 476*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 477*c5c4113dSnw141292 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} { 478*c5c4113dSnw141292 return SQLITE_DENY 479*c5c4113dSnw141292 } 480*c5c4113dSnw141292 return SQLITE_OK 481*c5c4113dSnw141292 } 482*c5c4113dSnw141292 catchsql {DROP TABLE t2} 483*c5c4113dSnw141292} {1 {not authorized}} 484*c5c4113dSnw141292do_test auth-1.64 { 485*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_master} 486*c5c4113dSnw141292} {t2} 487*c5c4113dSnw141292do_test auth-1.65 { 488*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 489*c5c4113dSnw141292 if {$code=="SQLITE_DELETE" && $arg1=="t2"} { 490*c5c4113dSnw141292 return SQLITE_DENY 491*c5c4113dSnw141292 } 492*c5c4113dSnw141292 return SQLITE_OK 493*c5c4113dSnw141292 } 494*c5c4113dSnw141292 catchsql {DROP TABLE t2} 495*c5c4113dSnw141292} {1 {not authorized}} 496*c5c4113dSnw141292do_test auth-1.66 { 497*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_master} 498*c5c4113dSnw141292} {t2} 499*c5c4113dSnw141292do_test auth-1.67 { 500*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 501*c5c4113dSnw141292 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} { 502*c5c4113dSnw141292 return SQLITE_DENY 503*c5c4113dSnw141292 } 504*c5c4113dSnw141292 return SQLITE_OK 505*c5c4113dSnw141292 } 506*c5c4113dSnw141292 catchsql {DROP TABLE t1} 507*c5c4113dSnw141292} {1 {not authorized}} 508*c5c4113dSnw141292do_test auth-1.68 { 509*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_temp_master} 510*c5c4113dSnw141292} {t1} 511*c5c4113dSnw141292do_test auth-1.69 { 512*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 513*c5c4113dSnw141292 if {$code=="SQLITE_DELETE" && $arg1=="t1"} { 514*c5c4113dSnw141292 return SQLITE_DENY 515*c5c4113dSnw141292 } 516*c5c4113dSnw141292 return SQLITE_OK 517*c5c4113dSnw141292 } 518*c5c4113dSnw141292 catchsql {DROP TABLE t1} 519*c5c4113dSnw141292} {1 {not authorized}} 520*c5c4113dSnw141292do_test auth-1.70 { 521*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_temp_master} 522*c5c4113dSnw141292} {t1} 523*c5c4113dSnw141292 524*c5c4113dSnw141292do_test auth-1.71 { 525*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 526*c5c4113dSnw141292 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} { 527*c5c4113dSnw141292 return SQLITE_IGNORE 528*c5c4113dSnw141292 } 529*c5c4113dSnw141292 return SQLITE_OK 530*c5c4113dSnw141292 } 531*c5c4113dSnw141292 catchsql {DROP TABLE t2} 532*c5c4113dSnw141292} {0 {}} 533*c5c4113dSnw141292do_test auth-1.72 { 534*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_master} 535*c5c4113dSnw141292} {t2} 536*c5c4113dSnw141292do_test auth-1.73 { 537*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 538*c5c4113dSnw141292 if {$code=="SQLITE_DELETE" && $arg1=="t2"} { 539*c5c4113dSnw141292 return SQLITE_IGNORE 540*c5c4113dSnw141292 } 541*c5c4113dSnw141292 return SQLITE_OK 542*c5c4113dSnw141292 } 543*c5c4113dSnw141292 catchsql {DROP TABLE t2} 544*c5c4113dSnw141292} {0 {}} 545*c5c4113dSnw141292do_test auth-1.74 { 546*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_master} 547*c5c4113dSnw141292} {t2} 548*c5c4113dSnw141292do_test auth-1.75 { 549*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 550*c5c4113dSnw141292 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} { 551*c5c4113dSnw141292 return SQLITE_IGNORE 552*c5c4113dSnw141292 } 553*c5c4113dSnw141292 return SQLITE_OK 554*c5c4113dSnw141292 } 555*c5c4113dSnw141292 catchsql {DROP TABLE t1} 556*c5c4113dSnw141292} {0 {}} 557*c5c4113dSnw141292do_test auth-1.76 { 558*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_temp_master} 559*c5c4113dSnw141292} {t1} 560*c5c4113dSnw141292do_test auth-1.77 { 561*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 562*c5c4113dSnw141292 if {$code=="SQLITE_DELETE" && $arg1=="t1"} { 563*c5c4113dSnw141292 return SQLITE_IGNORE 564*c5c4113dSnw141292 } 565*c5c4113dSnw141292 return SQLITE_OK 566*c5c4113dSnw141292 } 567*c5c4113dSnw141292 catchsql {DROP TABLE t1} 568*c5c4113dSnw141292} {0 {}} 569*c5c4113dSnw141292do_test auth-1.78 { 570*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_temp_master} 571*c5c4113dSnw141292} {t1} 572*c5c4113dSnw141292 573*c5c4113dSnw141292do_test auth-1.79 { 574*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 575*c5c4113dSnw141292 if {$code=="SQLITE_CREATE_VIEW"} { 576*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 577*c5c4113dSnw141292 return SQLITE_DENY 578*c5c4113dSnw141292 } 579*c5c4113dSnw141292 return SQLITE_OK 580*c5c4113dSnw141292 } 581*c5c4113dSnw141292 catchsql {CREATE VIEW v1 AS SELECT a+1,b+1 FROM t2} 582*c5c4113dSnw141292} {1 {not authorized}} 583*c5c4113dSnw141292do_test auth-1.80 { 584*c5c4113dSnw141292 set ::authargs 585*c5c4113dSnw141292} {v1 {} main {}} 586*c5c4113dSnw141292do_test auth-1.81 { 587*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_master} 588*c5c4113dSnw141292} {t2} 589*c5c4113dSnw141292do_test auth-1.82 { 590*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 591*c5c4113dSnw141292 if {$code=="SQLITE_CREATE_VIEW"} { 592*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 593*c5c4113dSnw141292 return SQLITE_IGNORE 594*c5c4113dSnw141292 } 595*c5c4113dSnw141292 return SQLITE_OK 596*c5c4113dSnw141292 } 597*c5c4113dSnw141292 catchsql {CREATE VIEW v1 AS SELECT a+1,b+1 FROM t2} 598*c5c4113dSnw141292} {0 {}} 599*c5c4113dSnw141292do_test auth-1.83 { 600*c5c4113dSnw141292 set ::authargs 601*c5c4113dSnw141292} {v1 {} main {}} 602*c5c4113dSnw141292do_test auth-1.84 { 603*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_master} 604*c5c4113dSnw141292} {t2} 605*c5c4113dSnw141292 606*c5c4113dSnw141292do_test auth-1.85 { 607*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 608*c5c4113dSnw141292 if {$code=="SQLITE_CREATE_TEMP_VIEW"} { 609*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 610*c5c4113dSnw141292 return SQLITE_DENY 611*c5c4113dSnw141292 } 612*c5c4113dSnw141292 return SQLITE_OK 613*c5c4113dSnw141292 } 614*c5c4113dSnw141292 catchsql {CREATE TEMPORARY VIEW v1 AS SELECT a+1,b+1 FROM t2} 615*c5c4113dSnw141292} {1 {not authorized}} 616*c5c4113dSnw141292do_test auth-1.86 { 617*c5c4113dSnw141292 set ::authargs 618*c5c4113dSnw141292} {v1 {} temp {}} 619*c5c4113dSnw141292do_test auth-1.87 { 620*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_temp_master} 621*c5c4113dSnw141292} {t1} 622*c5c4113dSnw141292do_test auth-1.88 { 623*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 624*c5c4113dSnw141292 if {$code=="SQLITE_CREATE_TEMP_VIEW"} { 625*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 626*c5c4113dSnw141292 return SQLITE_IGNORE 627*c5c4113dSnw141292 } 628*c5c4113dSnw141292 return SQLITE_OK 629*c5c4113dSnw141292 } 630*c5c4113dSnw141292 catchsql {CREATE TEMPORARY VIEW v1 AS SELECT a+1,b+1 FROM t2} 631*c5c4113dSnw141292} {0 {}} 632*c5c4113dSnw141292do_test auth-1.89 { 633*c5c4113dSnw141292 set ::authargs 634*c5c4113dSnw141292} {v1 {} temp {}} 635*c5c4113dSnw141292do_test auth-1.90 { 636*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_temp_master} 637*c5c4113dSnw141292} {t1} 638*c5c4113dSnw141292 639*c5c4113dSnw141292do_test auth-1.91 { 640*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 641*c5c4113dSnw141292 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} { 642*c5c4113dSnw141292 return SQLITE_DENY 643*c5c4113dSnw141292 } 644*c5c4113dSnw141292 return SQLITE_OK 645*c5c4113dSnw141292 } 646*c5c4113dSnw141292 catchsql {CREATE VIEW v1 AS SELECT a+1,b+1 FROM t2} 647*c5c4113dSnw141292} {1 {not authorized}} 648*c5c4113dSnw141292do_test auth-1.92 { 649*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_master} 650*c5c4113dSnw141292} {t2} 651*c5c4113dSnw141292do_test auth-1.93 { 652*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 653*c5c4113dSnw141292 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} { 654*c5c4113dSnw141292 return SQLITE_IGNORE 655*c5c4113dSnw141292 } 656*c5c4113dSnw141292 return SQLITE_OK 657*c5c4113dSnw141292 } 658*c5c4113dSnw141292 catchsql {CREATE VIEW v1 AS SELECT a+1,b+1 FROM t2} 659*c5c4113dSnw141292} {0 {}} 660*c5c4113dSnw141292do_test auth-1.94 { 661*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_master} 662*c5c4113dSnw141292} {t2} 663*c5c4113dSnw141292 664*c5c4113dSnw141292do_test auth-1.95 { 665*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 666*c5c4113dSnw141292 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} { 667*c5c4113dSnw141292 return SQLITE_DENY 668*c5c4113dSnw141292 } 669*c5c4113dSnw141292 return SQLITE_OK 670*c5c4113dSnw141292 } 671*c5c4113dSnw141292 catchsql {CREATE TEMPORARY VIEW v1 AS SELECT a+1,b+1 FROM t2} 672*c5c4113dSnw141292} {1 {not authorized}} 673*c5c4113dSnw141292do_test auth-1.96 { 674*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_temp_master} 675*c5c4113dSnw141292} {t1} 676*c5c4113dSnw141292do_test auth-1.97 { 677*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 678*c5c4113dSnw141292 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} { 679*c5c4113dSnw141292 return SQLITE_IGNORE 680*c5c4113dSnw141292 } 681*c5c4113dSnw141292 return SQLITE_OK 682*c5c4113dSnw141292 } 683*c5c4113dSnw141292 catchsql {CREATE TEMPORARY VIEW v1 AS SELECT a+1,b+1 FROM t2} 684*c5c4113dSnw141292} {0 {}} 685*c5c4113dSnw141292do_test auth-1.98 { 686*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_temp_master} 687*c5c4113dSnw141292} {t1} 688*c5c4113dSnw141292 689*c5c4113dSnw141292do_test auth-1.99 { 690*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 691*c5c4113dSnw141292 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} { 692*c5c4113dSnw141292 return SQLITE_DENY 693*c5c4113dSnw141292 } 694*c5c4113dSnw141292 return SQLITE_OK 695*c5c4113dSnw141292 } 696*c5c4113dSnw141292 catchsql { 697*c5c4113dSnw141292 CREATE VIEW v2 AS SELECT a+1,b+1 FROM t2; 698*c5c4113dSnw141292 DROP VIEW v2 699*c5c4113dSnw141292 } 700*c5c4113dSnw141292} {1 {not authorized}} 701*c5c4113dSnw141292do_test auth-1.100 { 702*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_master} 703*c5c4113dSnw141292} {t2 v2} 704*c5c4113dSnw141292do_test auth-1.101 { 705*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 706*c5c4113dSnw141292 if {$code=="SQLITE_DROP_VIEW"} { 707*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 708*c5c4113dSnw141292 return SQLITE_DENY 709*c5c4113dSnw141292 } 710*c5c4113dSnw141292 return SQLITE_OK 711*c5c4113dSnw141292 } 712*c5c4113dSnw141292 catchsql {DROP VIEW v2} 713*c5c4113dSnw141292} {1 {not authorized}} 714*c5c4113dSnw141292do_test auth-1.102 { 715*c5c4113dSnw141292 set ::authargs 716*c5c4113dSnw141292} {v2 {} main {}} 717*c5c4113dSnw141292do_test auth-1.103 { 718*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_master} 719*c5c4113dSnw141292} {t2 v2} 720*c5c4113dSnw141292do_test auth-1.104 { 721*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 722*c5c4113dSnw141292 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} { 723*c5c4113dSnw141292 return SQLITE_IGNORE 724*c5c4113dSnw141292 } 725*c5c4113dSnw141292 return SQLITE_OK 726*c5c4113dSnw141292 } 727*c5c4113dSnw141292 catchsql {DROP VIEW v2} 728*c5c4113dSnw141292} {0 {}} 729*c5c4113dSnw141292do_test auth-1.105 { 730*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_master} 731*c5c4113dSnw141292} {t2 v2} 732*c5c4113dSnw141292do_test auth-1.106 { 733*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 734*c5c4113dSnw141292 if {$code=="SQLITE_DROP_VIEW"} { 735*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 736*c5c4113dSnw141292 return SQLITE_IGNORE 737*c5c4113dSnw141292 } 738*c5c4113dSnw141292 return SQLITE_OK 739*c5c4113dSnw141292 } 740*c5c4113dSnw141292 catchsql {DROP VIEW v2} 741*c5c4113dSnw141292} {0 {}} 742*c5c4113dSnw141292do_test auth-1.107 { 743*c5c4113dSnw141292 set ::authargs 744*c5c4113dSnw141292} {v2 {} main {}} 745*c5c4113dSnw141292do_test auth-1.108 { 746*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_master} 747*c5c4113dSnw141292} {t2 v2} 748*c5c4113dSnw141292do_test auth-1.109 { 749*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 750*c5c4113dSnw141292 if {$code=="SQLITE_DROP_VIEW"} { 751*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 752*c5c4113dSnw141292 return SQLITE_OK 753*c5c4113dSnw141292 } 754*c5c4113dSnw141292 return SQLITE_OK 755*c5c4113dSnw141292 } 756*c5c4113dSnw141292 catchsql {DROP VIEW v2} 757*c5c4113dSnw141292} {0 {}} 758*c5c4113dSnw141292do_test auth-1.110 { 759*c5c4113dSnw141292 set ::authargs 760*c5c4113dSnw141292} {v2 {} main {}} 761*c5c4113dSnw141292do_test auth-1.111 { 762*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_master} 763*c5c4113dSnw141292} {t2} 764*c5c4113dSnw141292 765*c5c4113dSnw141292 766*c5c4113dSnw141292do_test auth-1.112 { 767*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 768*c5c4113dSnw141292 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} { 769*c5c4113dSnw141292 return SQLITE_DENY 770*c5c4113dSnw141292 } 771*c5c4113dSnw141292 return SQLITE_OK 772*c5c4113dSnw141292 } 773*c5c4113dSnw141292 catchsql { 774*c5c4113dSnw141292 CREATE TEMP VIEW v1 AS SELECT a+1,b+1 FROM t1; 775*c5c4113dSnw141292 DROP VIEW v1 776*c5c4113dSnw141292 } 777*c5c4113dSnw141292} {1 {not authorized}} 778*c5c4113dSnw141292do_test auth-1.113 { 779*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_temp_master} 780*c5c4113dSnw141292} {t1 v1} 781*c5c4113dSnw141292do_test auth-1.114 { 782*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 783*c5c4113dSnw141292 if {$code=="SQLITE_DROP_TEMP_VIEW"} { 784*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 785*c5c4113dSnw141292 return SQLITE_DENY 786*c5c4113dSnw141292 } 787*c5c4113dSnw141292 return SQLITE_OK 788*c5c4113dSnw141292 } 789*c5c4113dSnw141292 catchsql {DROP VIEW v1} 790*c5c4113dSnw141292} {1 {not authorized}} 791*c5c4113dSnw141292do_test auth-1.115 { 792*c5c4113dSnw141292 set ::authargs 793*c5c4113dSnw141292} {v1 {} temp {}} 794*c5c4113dSnw141292do_test auth-1.116 { 795*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_temp_master} 796*c5c4113dSnw141292} {t1 v1} 797*c5c4113dSnw141292do_test auth-1.117 { 798*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 799*c5c4113dSnw141292 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} { 800*c5c4113dSnw141292 return SQLITE_IGNORE 801*c5c4113dSnw141292 } 802*c5c4113dSnw141292 return SQLITE_OK 803*c5c4113dSnw141292 } 804*c5c4113dSnw141292 catchsql {DROP VIEW v1} 805*c5c4113dSnw141292} {0 {}} 806*c5c4113dSnw141292do_test auth-1.118 { 807*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_temp_master} 808*c5c4113dSnw141292} {t1 v1} 809*c5c4113dSnw141292do_test auth-1.119 { 810*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 811*c5c4113dSnw141292 if {$code=="SQLITE_DROP_TEMP_VIEW"} { 812*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 813*c5c4113dSnw141292 return SQLITE_IGNORE 814*c5c4113dSnw141292 } 815*c5c4113dSnw141292 return SQLITE_OK 816*c5c4113dSnw141292 } 817*c5c4113dSnw141292 catchsql {DROP VIEW v1} 818*c5c4113dSnw141292} {0 {}} 819*c5c4113dSnw141292do_test auth-1.120 { 820*c5c4113dSnw141292 set ::authargs 821*c5c4113dSnw141292} {v1 {} temp {}} 822*c5c4113dSnw141292do_test auth-1.121 { 823*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_temp_master} 824*c5c4113dSnw141292} {t1 v1} 825*c5c4113dSnw141292do_test auth-1.122 { 826*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 827*c5c4113dSnw141292 if {$code=="SQLITE_DROP_TEMP_VIEW"} { 828*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 829*c5c4113dSnw141292 return SQLITE_OK 830*c5c4113dSnw141292 } 831*c5c4113dSnw141292 return SQLITE_OK 832*c5c4113dSnw141292 } 833*c5c4113dSnw141292 catchsql {DROP VIEW v1} 834*c5c4113dSnw141292} {0 {}} 835*c5c4113dSnw141292do_test auth-1.123 { 836*c5c4113dSnw141292 set ::authargs 837*c5c4113dSnw141292} {v1 {} temp {}} 838*c5c4113dSnw141292do_test auth-1.124 { 839*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_temp_master} 840*c5c4113dSnw141292} {t1} 841*c5c4113dSnw141292 842*c5c4113dSnw141292do_test auth-1.125 { 843*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 844*c5c4113dSnw141292 if {$code=="SQLITE_CREATE_TRIGGER"} { 845*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 846*c5c4113dSnw141292 return SQLITE_DENY 847*c5c4113dSnw141292 } 848*c5c4113dSnw141292 return SQLITE_OK 849*c5c4113dSnw141292 } 850*c5c4113dSnw141292 catchsql { 851*c5c4113dSnw141292 CREATE TRIGGER r2 DELETE on t2 BEGIN 852*c5c4113dSnw141292 SELECT NULL; 853*c5c4113dSnw141292 END; 854*c5c4113dSnw141292 } 855*c5c4113dSnw141292} {1 {not authorized}} 856*c5c4113dSnw141292do_test auth-1.126 { 857*c5c4113dSnw141292 set ::authargs 858*c5c4113dSnw141292} {r2 t2 main {}} 859*c5c4113dSnw141292do_test auth-1.127 { 860*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_master} 861*c5c4113dSnw141292} {t2} 862*c5c4113dSnw141292do_test auth-1.128 { 863*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 864*c5c4113dSnw141292 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} { 865*c5c4113dSnw141292 return SQLITE_DENY 866*c5c4113dSnw141292 } 867*c5c4113dSnw141292 return SQLITE_OK 868*c5c4113dSnw141292 } 869*c5c4113dSnw141292 catchsql { 870*c5c4113dSnw141292 CREATE TRIGGER r2 DELETE on t2 BEGIN 871*c5c4113dSnw141292 SELECT NULL; 872*c5c4113dSnw141292 END; 873*c5c4113dSnw141292 } 874*c5c4113dSnw141292} {1 {not authorized}} 875*c5c4113dSnw141292do_test auth-1.129 { 876*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_master} 877*c5c4113dSnw141292} {t2} 878*c5c4113dSnw141292do_test auth-1.130 { 879*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 880*c5c4113dSnw141292 if {$code=="SQLITE_CREATE_TRIGGER"} { 881*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 882*c5c4113dSnw141292 return SQLITE_IGNORE 883*c5c4113dSnw141292 } 884*c5c4113dSnw141292 return SQLITE_OK 885*c5c4113dSnw141292 } 886*c5c4113dSnw141292 catchsql { 887*c5c4113dSnw141292 CREATE TRIGGER r2 DELETE on t2 BEGIN 888*c5c4113dSnw141292 SELECT NULL; 889*c5c4113dSnw141292 END; 890*c5c4113dSnw141292 } 891*c5c4113dSnw141292} {0 {}} 892*c5c4113dSnw141292do_test auth-1.131 { 893*c5c4113dSnw141292 set ::authargs 894*c5c4113dSnw141292} {r2 t2 main {}} 895*c5c4113dSnw141292do_test auth-1.132 { 896*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_master} 897*c5c4113dSnw141292} {t2} 898*c5c4113dSnw141292do_test auth-1.133 { 899*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 900*c5c4113dSnw141292 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} { 901*c5c4113dSnw141292 return SQLITE_IGNORE 902*c5c4113dSnw141292 } 903*c5c4113dSnw141292 return SQLITE_OK 904*c5c4113dSnw141292 } 905*c5c4113dSnw141292 catchsql { 906*c5c4113dSnw141292 CREATE TRIGGER r2 DELETE on t2 BEGIN 907*c5c4113dSnw141292 SELECT NULL; 908*c5c4113dSnw141292 END; 909*c5c4113dSnw141292 } 910*c5c4113dSnw141292} {0 {}} 911*c5c4113dSnw141292do_test auth-1.134 { 912*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_master} 913*c5c4113dSnw141292} {t2} 914*c5c4113dSnw141292do_test auth-1.135 { 915*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 916*c5c4113dSnw141292 if {$code=="SQLITE_CREATE_TRIGGER"} { 917*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 918*c5c4113dSnw141292 return SQLITE_OK 919*c5c4113dSnw141292 } 920*c5c4113dSnw141292 return SQLITE_OK 921*c5c4113dSnw141292 } 922*c5c4113dSnw141292 catchsql { 923*c5c4113dSnw141292 CREATE TABLE tx(id); 924*c5c4113dSnw141292 CREATE TRIGGER r2 AFTER INSERT ON t2 BEGIN 925*c5c4113dSnw141292 INSERT INTO tx VALUES(NEW.rowid); 926*c5c4113dSnw141292 END; 927*c5c4113dSnw141292 } 928*c5c4113dSnw141292} {0 {}} 929*c5c4113dSnw141292do_test auth-1.136.1 { 930*c5c4113dSnw141292 set ::authargs 931*c5c4113dSnw141292} {r2 t2 main {}} 932*c5c4113dSnw141292do_test auth-1.136.2 { 933*c5c4113dSnw141292 execsql { 934*c5c4113dSnw141292 SELECT name FROM sqlite_master WHERE type='trigger' 935*c5c4113dSnw141292 } 936*c5c4113dSnw141292} {r2} 937*c5c4113dSnw141292do_test auth-1.136.3 { 938*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 939*c5c4113dSnw141292 lappend ::authargs $code $arg1 $arg2 $arg3 $arg4 940*c5c4113dSnw141292 return SQLITE_OK 941*c5c4113dSnw141292 } 942*c5c4113dSnw141292 set ::authargs {} 943*c5c4113dSnw141292 execsql { 944*c5c4113dSnw141292 INSERT INTO t2 VALUES(1,2,3); 945*c5c4113dSnw141292 } 946*c5c4113dSnw141292 set ::authargs 947*c5c4113dSnw141292} {SQLITE_INSERT t2 {} main {} SQLITE_INSERT tx {} main r2 SQLITE_READ t2 ROWID main r2} 948*c5c4113dSnw141292do_test auth-1.136.4 { 949*c5c4113dSnw141292 execsql { 950*c5c4113dSnw141292 SELECT * FROM tx; 951*c5c4113dSnw141292 } 952*c5c4113dSnw141292} {3} 953*c5c4113dSnw141292do_test auth-1.137 { 954*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_master} 955*c5c4113dSnw141292} {t2 tx r2} 956*c5c4113dSnw141292do_test auth-1.138 { 957*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 958*c5c4113dSnw141292 if {$code=="SQLITE_CREATE_TEMP_TRIGGER"} { 959*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 960*c5c4113dSnw141292 return SQLITE_DENY 961*c5c4113dSnw141292 } 962*c5c4113dSnw141292 return SQLITE_OK 963*c5c4113dSnw141292 } 964*c5c4113dSnw141292 catchsql { 965*c5c4113dSnw141292 CREATE TRIGGER r1 DELETE on t1 BEGIN 966*c5c4113dSnw141292 SELECT NULL; 967*c5c4113dSnw141292 END; 968*c5c4113dSnw141292 } 969*c5c4113dSnw141292} {1 {not authorized}} 970*c5c4113dSnw141292do_test auth-1.139 { 971*c5c4113dSnw141292 set ::authargs 972*c5c4113dSnw141292} {r1 t1 temp {}} 973*c5c4113dSnw141292do_test auth-1.140 { 974*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_temp_master} 975*c5c4113dSnw141292} {t1} 976*c5c4113dSnw141292do_test auth-1.141 { 977*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 978*c5c4113dSnw141292 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} { 979*c5c4113dSnw141292 return SQLITE_DENY 980*c5c4113dSnw141292 } 981*c5c4113dSnw141292 return SQLITE_OK 982*c5c4113dSnw141292 } 983*c5c4113dSnw141292 catchsql { 984*c5c4113dSnw141292 CREATE TRIGGER r1 DELETE on t1 BEGIN 985*c5c4113dSnw141292 SELECT NULL; 986*c5c4113dSnw141292 END; 987*c5c4113dSnw141292 } 988*c5c4113dSnw141292} {1 {not authorized}} 989*c5c4113dSnw141292do_test auth-1.142 { 990*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_temp_master} 991*c5c4113dSnw141292} {t1} 992*c5c4113dSnw141292do_test auth-1.143 { 993*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 994*c5c4113dSnw141292 if {$code=="SQLITE_CREATE_TEMP_TRIGGER"} { 995*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 996*c5c4113dSnw141292 return SQLITE_IGNORE 997*c5c4113dSnw141292 } 998*c5c4113dSnw141292 return SQLITE_OK 999*c5c4113dSnw141292 } 1000*c5c4113dSnw141292 catchsql { 1001*c5c4113dSnw141292 CREATE TRIGGER r1 DELETE on t1 BEGIN 1002*c5c4113dSnw141292 SELECT NULL; 1003*c5c4113dSnw141292 END; 1004*c5c4113dSnw141292 } 1005*c5c4113dSnw141292} {0 {}} 1006*c5c4113dSnw141292do_test auth-1.144 { 1007*c5c4113dSnw141292 set ::authargs 1008*c5c4113dSnw141292} {r1 t1 temp {}} 1009*c5c4113dSnw141292do_test auth-1.145 { 1010*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_temp_master} 1011*c5c4113dSnw141292} {t1} 1012*c5c4113dSnw141292do_test auth-1.146 { 1013*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 1014*c5c4113dSnw141292 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} { 1015*c5c4113dSnw141292 return SQLITE_IGNORE 1016*c5c4113dSnw141292 } 1017*c5c4113dSnw141292 return SQLITE_OK 1018*c5c4113dSnw141292 } 1019*c5c4113dSnw141292 catchsql { 1020*c5c4113dSnw141292 CREATE TRIGGER r1 DELETE on t1 BEGIN 1021*c5c4113dSnw141292 SELECT NULL; 1022*c5c4113dSnw141292 END; 1023*c5c4113dSnw141292 } 1024*c5c4113dSnw141292} {0 {}} 1025*c5c4113dSnw141292do_test auth-1.147 { 1026*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_temp_master} 1027*c5c4113dSnw141292} {t1} 1028*c5c4113dSnw141292do_test auth-1.148 { 1029*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 1030*c5c4113dSnw141292 if {$code=="SQLITE_CREATE_TEMP_TRIGGER"} { 1031*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 1032*c5c4113dSnw141292 return SQLITE_OK 1033*c5c4113dSnw141292 } 1034*c5c4113dSnw141292 return SQLITE_OK 1035*c5c4113dSnw141292 } 1036*c5c4113dSnw141292 catchsql { 1037*c5c4113dSnw141292 CREATE TRIGGER r1 DELETE on t1 BEGIN 1038*c5c4113dSnw141292 SELECT NULL; 1039*c5c4113dSnw141292 END; 1040*c5c4113dSnw141292 } 1041*c5c4113dSnw141292} {0 {}} 1042*c5c4113dSnw141292do_test auth-1.149 { 1043*c5c4113dSnw141292 set ::authargs 1044*c5c4113dSnw141292} {r1 t1 temp {}} 1045*c5c4113dSnw141292do_test auth-1.150 { 1046*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_temp_master} 1047*c5c4113dSnw141292} {t1 r1} 1048*c5c4113dSnw141292 1049*c5c4113dSnw141292do_test auth-1.151 { 1050*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 1051*c5c4113dSnw141292 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} { 1052*c5c4113dSnw141292 return SQLITE_DENY 1053*c5c4113dSnw141292 } 1054*c5c4113dSnw141292 return SQLITE_OK 1055*c5c4113dSnw141292 } 1056*c5c4113dSnw141292 catchsql {DROP TRIGGER r2} 1057*c5c4113dSnw141292} {1 {not authorized}} 1058*c5c4113dSnw141292do_test auth-1.152 { 1059*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_master} 1060*c5c4113dSnw141292} {t2 tx r2} 1061*c5c4113dSnw141292do_test auth-1.153 { 1062*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 1063*c5c4113dSnw141292 if {$code=="SQLITE_DROP_TRIGGER"} { 1064*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 1065*c5c4113dSnw141292 return SQLITE_DENY 1066*c5c4113dSnw141292 } 1067*c5c4113dSnw141292 return SQLITE_OK 1068*c5c4113dSnw141292 } 1069*c5c4113dSnw141292 catchsql {DROP TRIGGER r2} 1070*c5c4113dSnw141292} {1 {not authorized}} 1071*c5c4113dSnw141292do_test auth-1.154 { 1072*c5c4113dSnw141292 set ::authargs 1073*c5c4113dSnw141292} {r2 t2 main {}} 1074*c5c4113dSnw141292do_test auth-1.155 { 1075*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_master} 1076*c5c4113dSnw141292} {t2 tx r2} 1077*c5c4113dSnw141292do_test auth-1.156 { 1078*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 1079*c5c4113dSnw141292 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} { 1080*c5c4113dSnw141292 return SQLITE_IGNORE 1081*c5c4113dSnw141292 } 1082*c5c4113dSnw141292 return SQLITE_OK 1083*c5c4113dSnw141292 } 1084*c5c4113dSnw141292 catchsql {DROP TRIGGER r2} 1085*c5c4113dSnw141292} {0 {}} 1086*c5c4113dSnw141292do_test auth-1.157 { 1087*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_master} 1088*c5c4113dSnw141292} {t2 tx r2} 1089*c5c4113dSnw141292do_test auth-1.158 { 1090*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 1091*c5c4113dSnw141292 if {$code=="SQLITE_DROP_TRIGGER"} { 1092*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 1093*c5c4113dSnw141292 return SQLITE_IGNORE 1094*c5c4113dSnw141292 } 1095*c5c4113dSnw141292 return SQLITE_OK 1096*c5c4113dSnw141292 } 1097*c5c4113dSnw141292 catchsql {DROP TRIGGER r2} 1098*c5c4113dSnw141292} {0 {}} 1099*c5c4113dSnw141292do_test auth-1.159 { 1100*c5c4113dSnw141292 set ::authargs 1101*c5c4113dSnw141292} {r2 t2 main {}} 1102*c5c4113dSnw141292do_test auth-1.160 { 1103*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_master} 1104*c5c4113dSnw141292} {t2 tx r2} 1105*c5c4113dSnw141292do_test auth-1.161 { 1106*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 1107*c5c4113dSnw141292 if {$code=="SQLITE_DROP_TRIGGER"} { 1108*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 1109*c5c4113dSnw141292 return SQLITE_OK 1110*c5c4113dSnw141292 } 1111*c5c4113dSnw141292 return SQLITE_OK 1112*c5c4113dSnw141292 } 1113*c5c4113dSnw141292 catchsql {DROP TRIGGER r2} 1114*c5c4113dSnw141292} {0 {}} 1115*c5c4113dSnw141292do_test auth-1.162 { 1116*c5c4113dSnw141292 set ::authargs 1117*c5c4113dSnw141292} {r2 t2 main {}} 1118*c5c4113dSnw141292do_test auth-1.163 { 1119*c5c4113dSnw141292 execsql { 1120*c5c4113dSnw141292 DROP TABLE tx; 1121*c5c4113dSnw141292 DELETE FROM t2 WHERE a=1 AND b=2 AND c=3; 1122*c5c4113dSnw141292 SELECT name FROM sqlite_master; 1123*c5c4113dSnw141292 } 1124*c5c4113dSnw141292} {t2} 1125*c5c4113dSnw141292 1126*c5c4113dSnw141292do_test auth-1.164 { 1127*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 1128*c5c4113dSnw141292 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} { 1129*c5c4113dSnw141292 return SQLITE_DENY 1130*c5c4113dSnw141292 } 1131*c5c4113dSnw141292 return SQLITE_OK 1132*c5c4113dSnw141292 } 1133*c5c4113dSnw141292 catchsql {DROP TRIGGER r1} 1134*c5c4113dSnw141292} {1 {not authorized}} 1135*c5c4113dSnw141292do_test auth-1.165 { 1136*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_temp_master} 1137*c5c4113dSnw141292} {t1 r1} 1138*c5c4113dSnw141292do_test auth-1.166 { 1139*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 1140*c5c4113dSnw141292 if {$code=="SQLITE_DROP_TEMP_TRIGGER"} { 1141*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 1142*c5c4113dSnw141292 return SQLITE_DENY 1143*c5c4113dSnw141292 } 1144*c5c4113dSnw141292 return SQLITE_OK 1145*c5c4113dSnw141292 } 1146*c5c4113dSnw141292 catchsql {DROP TRIGGER r1} 1147*c5c4113dSnw141292} {1 {not authorized}} 1148*c5c4113dSnw141292do_test auth-1.167 { 1149*c5c4113dSnw141292 set ::authargs 1150*c5c4113dSnw141292} {r1 t1 temp {}} 1151*c5c4113dSnw141292do_test auth-1.168 { 1152*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_temp_master} 1153*c5c4113dSnw141292} {t1 r1} 1154*c5c4113dSnw141292do_test auth-1.169 { 1155*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 1156*c5c4113dSnw141292 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} { 1157*c5c4113dSnw141292 return SQLITE_IGNORE 1158*c5c4113dSnw141292 } 1159*c5c4113dSnw141292 return SQLITE_OK 1160*c5c4113dSnw141292 } 1161*c5c4113dSnw141292 catchsql {DROP TRIGGER r1} 1162*c5c4113dSnw141292} {0 {}} 1163*c5c4113dSnw141292do_test auth-1.170 { 1164*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_temp_master} 1165*c5c4113dSnw141292} {t1 r1} 1166*c5c4113dSnw141292do_test auth-1.171 { 1167*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 1168*c5c4113dSnw141292 if {$code=="SQLITE_DROP_TEMP_TRIGGER"} { 1169*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 1170*c5c4113dSnw141292 return SQLITE_IGNORE 1171*c5c4113dSnw141292 } 1172*c5c4113dSnw141292 return SQLITE_OK 1173*c5c4113dSnw141292 } 1174*c5c4113dSnw141292 catchsql {DROP TRIGGER r1} 1175*c5c4113dSnw141292} {0 {}} 1176*c5c4113dSnw141292do_test auth-1.172 { 1177*c5c4113dSnw141292 set ::authargs 1178*c5c4113dSnw141292} {r1 t1 temp {}} 1179*c5c4113dSnw141292do_test auth-1.173 { 1180*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_temp_master} 1181*c5c4113dSnw141292} {t1 r1} 1182*c5c4113dSnw141292do_test auth-1.174 { 1183*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 1184*c5c4113dSnw141292 if {$code=="SQLITE_DROP_TEMP_TRIGGER"} { 1185*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 1186*c5c4113dSnw141292 return SQLITE_OK 1187*c5c4113dSnw141292 } 1188*c5c4113dSnw141292 return SQLITE_OK 1189*c5c4113dSnw141292 } 1190*c5c4113dSnw141292 catchsql {DROP TRIGGER r1} 1191*c5c4113dSnw141292} {0 {}} 1192*c5c4113dSnw141292do_test auth-1.175 { 1193*c5c4113dSnw141292 set ::authargs 1194*c5c4113dSnw141292} {r1 t1 temp {}} 1195*c5c4113dSnw141292do_test auth-1.176 { 1196*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_temp_master} 1197*c5c4113dSnw141292} {t1} 1198*c5c4113dSnw141292 1199*c5c4113dSnw141292do_test auth-1.177 { 1200*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 1201*c5c4113dSnw141292 if {$code=="SQLITE_CREATE_INDEX"} { 1202*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 1203*c5c4113dSnw141292 return SQLITE_DENY 1204*c5c4113dSnw141292 } 1205*c5c4113dSnw141292 return SQLITE_OK 1206*c5c4113dSnw141292 } 1207*c5c4113dSnw141292 catchsql {CREATE INDEX i2 ON t2(a)} 1208*c5c4113dSnw141292} {1 {not authorized}} 1209*c5c4113dSnw141292do_test auth-1.178 { 1210*c5c4113dSnw141292 set ::authargs 1211*c5c4113dSnw141292} {i2 t2 main {}} 1212*c5c4113dSnw141292do_test auth-1.179 { 1213*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_master} 1214*c5c4113dSnw141292} {t2} 1215*c5c4113dSnw141292do_test auth-1.180 { 1216*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 1217*c5c4113dSnw141292 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} { 1218*c5c4113dSnw141292 return SQLITE_DENY 1219*c5c4113dSnw141292 } 1220*c5c4113dSnw141292 return SQLITE_OK 1221*c5c4113dSnw141292 } 1222*c5c4113dSnw141292 catchsql {CREATE INDEX i2 ON t2(a)} 1223*c5c4113dSnw141292} {1 {not authorized}} 1224*c5c4113dSnw141292do_test auth-1.181 { 1225*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_master} 1226*c5c4113dSnw141292} {t2} 1227*c5c4113dSnw141292do_test auth-1.182 { 1228*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 1229*c5c4113dSnw141292 if {$code=="SQLITE_CREATE_INDEX"} { 1230*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 1231*c5c4113dSnw141292 return SQLITE_IGNORE 1232*c5c4113dSnw141292 } 1233*c5c4113dSnw141292 return SQLITE_OK 1234*c5c4113dSnw141292 } 1235*c5c4113dSnw141292 catchsql {CREATE INDEX i2 ON t2(b)} 1236*c5c4113dSnw141292} {0 {}} 1237*c5c4113dSnw141292do_test auth-1.183 { 1238*c5c4113dSnw141292 set ::authargs 1239*c5c4113dSnw141292} {i2 t2 main {}} 1240*c5c4113dSnw141292do_test auth-1.184 { 1241*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_master} 1242*c5c4113dSnw141292} {t2} 1243*c5c4113dSnw141292do_test auth-1.185 { 1244*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 1245*c5c4113dSnw141292 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} { 1246*c5c4113dSnw141292 return SQLITE_IGNORE 1247*c5c4113dSnw141292 } 1248*c5c4113dSnw141292 return SQLITE_OK 1249*c5c4113dSnw141292 } 1250*c5c4113dSnw141292 catchsql {CREATE INDEX i2 ON t2(b)} 1251*c5c4113dSnw141292} {0 {}} 1252*c5c4113dSnw141292do_test auth-1.186 { 1253*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_master} 1254*c5c4113dSnw141292} {t2} 1255*c5c4113dSnw141292do_test auth-1.187 { 1256*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 1257*c5c4113dSnw141292 if {$code=="SQLITE_CREATE_INDEX"} { 1258*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 1259*c5c4113dSnw141292 return SQLITE_OK 1260*c5c4113dSnw141292 } 1261*c5c4113dSnw141292 return SQLITE_OK 1262*c5c4113dSnw141292 } 1263*c5c4113dSnw141292 catchsql {CREATE INDEX i2 ON t2(a)} 1264*c5c4113dSnw141292} {0 {}} 1265*c5c4113dSnw141292do_test auth-1.188 { 1266*c5c4113dSnw141292 set ::authargs 1267*c5c4113dSnw141292} {i2 t2 main {}} 1268*c5c4113dSnw141292do_test auth-1.189 { 1269*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_master} 1270*c5c4113dSnw141292} {t2 i2} 1271*c5c4113dSnw141292 1272*c5c4113dSnw141292do_test auth-1.190 { 1273*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 1274*c5c4113dSnw141292 if {$code=="SQLITE_CREATE_TEMP_INDEX"} { 1275*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 1276*c5c4113dSnw141292 return SQLITE_DENY 1277*c5c4113dSnw141292 } 1278*c5c4113dSnw141292 return SQLITE_OK 1279*c5c4113dSnw141292 } 1280*c5c4113dSnw141292 catchsql {CREATE INDEX i1 ON t1(a)} 1281*c5c4113dSnw141292} {1 {not authorized}} 1282*c5c4113dSnw141292do_test auth-1.191 { 1283*c5c4113dSnw141292 set ::authargs 1284*c5c4113dSnw141292} {i1 t1 temp {}} 1285*c5c4113dSnw141292do_test auth-1.192 { 1286*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_temp_master} 1287*c5c4113dSnw141292} {t1} 1288*c5c4113dSnw141292do_test auth-1.193 { 1289*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 1290*c5c4113dSnw141292 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} { 1291*c5c4113dSnw141292 return SQLITE_DENY 1292*c5c4113dSnw141292 } 1293*c5c4113dSnw141292 return SQLITE_OK 1294*c5c4113dSnw141292 } 1295*c5c4113dSnw141292 catchsql {CREATE INDEX i1 ON t1(b)} 1296*c5c4113dSnw141292} {1 {not authorized}} 1297*c5c4113dSnw141292do_test auth-1.194 { 1298*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_temp_master} 1299*c5c4113dSnw141292} {t1} 1300*c5c4113dSnw141292do_test auth-1.195 { 1301*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 1302*c5c4113dSnw141292 if {$code=="SQLITE_CREATE_TEMP_INDEX"} { 1303*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 1304*c5c4113dSnw141292 return SQLITE_IGNORE 1305*c5c4113dSnw141292 } 1306*c5c4113dSnw141292 return SQLITE_OK 1307*c5c4113dSnw141292 } 1308*c5c4113dSnw141292 catchsql {CREATE INDEX i1 ON t1(b)} 1309*c5c4113dSnw141292} {0 {}} 1310*c5c4113dSnw141292do_test auth-1.196 { 1311*c5c4113dSnw141292 set ::authargs 1312*c5c4113dSnw141292} {i1 t1 temp {}} 1313*c5c4113dSnw141292do_test auth-1.197 { 1314*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_temp_master} 1315*c5c4113dSnw141292} {t1} 1316*c5c4113dSnw141292do_test auth-1.198 { 1317*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 1318*c5c4113dSnw141292 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} { 1319*c5c4113dSnw141292 return SQLITE_IGNORE 1320*c5c4113dSnw141292 } 1321*c5c4113dSnw141292 return SQLITE_OK 1322*c5c4113dSnw141292 } 1323*c5c4113dSnw141292 catchsql {CREATE INDEX i1 ON t1(c)} 1324*c5c4113dSnw141292} {0 {}} 1325*c5c4113dSnw141292do_test auth-1.199 { 1326*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_temp_master} 1327*c5c4113dSnw141292} {t1} 1328*c5c4113dSnw141292do_test auth-1.200 { 1329*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 1330*c5c4113dSnw141292 if {$code=="SQLITE_CREATE_TEMP_INDEX"} { 1331*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 1332*c5c4113dSnw141292 return SQLITE_OK 1333*c5c4113dSnw141292 } 1334*c5c4113dSnw141292 return SQLITE_OK 1335*c5c4113dSnw141292 } 1336*c5c4113dSnw141292 catchsql {CREATE INDEX i1 ON t1(a)} 1337*c5c4113dSnw141292} {0 {}} 1338*c5c4113dSnw141292do_test auth-1.201 { 1339*c5c4113dSnw141292 set ::authargs 1340*c5c4113dSnw141292} {i1 t1 temp {}} 1341*c5c4113dSnw141292do_test auth-1.202 { 1342*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_temp_master} 1343*c5c4113dSnw141292} {t1 i1} 1344*c5c4113dSnw141292 1345*c5c4113dSnw141292do_test auth-1.203 { 1346*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 1347*c5c4113dSnw141292 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} { 1348*c5c4113dSnw141292 return SQLITE_DENY 1349*c5c4113dSnw141292 } 1350*c5c4113dSnw141292 return SQLITE_OK 1351*c5c4113dSnw141292 } 1352*c5c4113dSnw141292 catchsql {DROP INDEX i2} 1353*c5c4113dSnw141292} {1 {not authorized}} 1354*c5c4113dSnw141292do_test auth-1.204 { 1355*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_master} 1356*c5c4113dSnw141292} {t2 i2} 1357*c5c4113dSnw141292do_test auth-1.205 { 1358*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 1359*c5c4113dSnw141292 if {$code=="SQLITE_DROP_INDEX"} { 1360*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 1361*c5c4113dSnw141292 return SQLITE_DENY 1362*c5c4113dSnw141292 } 1363*c5c4113dSnw141292 return SQLITE_OK 1364*c5c4113dSnw141292 } 1365*c5c4113dSnw141292 catchsql {DROP INDEX i2} 1366*c5c4113dSnw141292} {1 {not authorized}} 1367*c5c4113dSnw141292do_test auth-1.206 { 1368*c5c4113dSnw141292 set ::authargs 1369*c5c4113dSnw141292} {i2 t2 main {}} 1370*c5c4113dSnw141292do_test auth-1.207 { 1371*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_master} 1372*c5c4113dSnw141292} {t2 i2} 1373*c5c4113dSnw141292do_test auth-1.208 { 1374*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 1375*c5c4113dSnw141292 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} { 1376*c5c4113dSnw141292 return SQLITE_IGNORE 1377*c5c4113dSnw141292 } 1378*c5c4113dSnw141292 return SQLITE_OK 1379*c5c4113dSnw141292 } 1380*c5c4113dSnw141292 catchsql {DROP INDEX i2} 1381*c5c4113dSnw141292} {0 {}} 1382*c5c4113dSnw141292do_test auth-1.209 { 1383*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_master} 1384*c5c4113dSnw141292} {t2 i2} 1385*c5c4113dSnw141292do_test auth-1.210 { 1386*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 1387*c5c4113dSnw141292 if {$code=="SQLITE_DROP_INDEX"} { 1388*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 1389*c5c4113dSnw141292 return SQLITE_IGNORE 1390*c5c4113dSnw141292 } 1391*c5c4113dSnw141292 return SQLITE_OK 1392*c5c4113dSnw141292 } 1393*c5c4113dSnw141292 catchsql {DROP INDEX i2} 1394*c5c4113dSnw141292} {0 {}} 1395*c5c4113dSnw141292do_test auth-1.211 { 1396*c5c4113dSnw141292 set ::authargs 1397*c5c4113dSnw141292} {i2 t2 main {}} 1398*c5c4113dSnw141292do_test auth-1.212 { 1399*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_master} 1400*c5c4113dSnw141292} {t2 i2} 1401*c5c4113dSnw141292do_test auth-1.213 { 1402*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 1403*c5c4113dSnw141292 if {$code=="SQLITE_DROP_INDEX"} { 1404*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 1405*c5c4113dSnw141292 return SQLITE_OK 1406*c5c4113dSnw141292 } 1407*c5c4113dSnw141292 return SQLITE_OK 1408*c5c4113dSnw141292 } 1409*c5c4113dSnw141292 catchsql {DROP INDEX i2} 1410*c5c4113dSnw141292} {0 {}} 1411*c5c4113dSnw141292do_test auth-1.214 { 1412*c5c4113dSnw141292 set ::authargs 1413*c5c4113dSnw141292} {i2 t2 main {}} 1414*c5c4113dSnw141292do_test auth-1.215 { 1415*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_master} 1416*c5c4113dSnw141292} {t2} 1417*c5c4113dSnw141292 1418*c5c4113dSnw141292do_test auth-1.216 { 1419*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 1420*c5c4113dSnw141292 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} { 1421*c5c4113dSnw141292 return SQLITE_DENY 1422*c5c4113dSnw141292 } 1423*c5c4113dSnw141292 return SQLITE_OK 1424*c5c4113dSnw141292 } 1425*c5c4113dSnw141292 catchsql {DROP INDEX i1} 1426*c5c4113dSnw141292} {1 {not authorized}} 1427*c5c4113dSnw141292do_test auth-1.217 { 1428*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_temp_master} 1429*c5c4113dSnw141292} {t1 i1} 1430*c5c4113dSnw141292do_test auth-1.218 { 1431*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 1432*c5c4113dSnw141292 if {$code=="SQLITE_DROP_TEMP_INDEX"} { 1433*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 1434*c5c4113dSnw141292 return SQLITE_DENY 1435*c5c4113dSnw141292 } 1436*c5c4113dSnw141292 return SQLITE_OK 1437*c5c4113dSnw141292 } 1438*c5c4113dSnw141292 catchsql {DROP INDEX i1} 1439*c5c4113dSnw141292} {1 {not authorized}} 1440*c5c4113dSnw141292do_test auth-1.219 { 1441*c5c4113dSnw141292 set ::authargs 1442*c5c4113dSnw141292} {i1 t1 temp {}} 1443*c5c4113dSnw141292do_test auth-1.220 { 1444*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_temp_master} 1445*c5c4113dSnw141292} {t1 i1} 1446*c5c4113dSnw141292do_test auth-1.221 { 1447*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 1448*c5c4113dSnw141292 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} { 1449*c5c4113dSnw141292 return SQLITE_IGNORE 1450*c5c4113dSnw141292 } 1451*c5c4113dSnw141292 return SQLITE_OK 1452*c5c4113dSnw141292 } 1453*c5c4113dSnw141292 catchsql {DROP INDEX i1} 1454*c5c4113dSnw141292} {0 {}} 1455*c5c4113dSnw141292do_test auth-1.222 { 1456*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_temp_master} 1457*c5c4113dSnw141292} {t1 i1} 1458*c5c4113dSnw141292do_test auth-1.223 { 1459*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 1460*c5c4113dSnw141292 if {$code=="SQLITE_DROP_TEMP_INDEX"} { 1461*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 1462*c5c4113dSnw141292 return SQLITE_IGNORE 1463*c5c4113dSnw141292 } 1464*c5c4113dSnw141292 return SQLITE_OK 1465*c5c4113dSnw141292 } 1466*c5c4113dSnw141292 catchsql {DROP INDEX i1} 1467*c5c4113dSnw141292} {0 {}} 1468*c5c4113dSnw141292do_test auth-1.224 { 1469*c5c4113dSnw141292 set ::authargs 1470*c5c4113dSnw141292} {i1 t1 temp {}} 1471*c5c4113dSnw141292do_test auth-1.225 { 1472*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_temp_master} 1473*c5c4113dSnw141292} {t1 i1} 1474*c5c4113dSnw141292do_test auth-1.226 { 1475*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 1476*c5c4113dSnw141292 if {$code=="SQLITE_DROP_TEMP_INDEX"} { 1477*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 1478*c5c4113dSnw141292 return SQLITE_OK 1479*c5c4113dSnw141292 } 1480*c5c4113dSnw141292 return SQLITE_OK 1481*c5c4113dSnw141292 } 1482*c5c4113dSnw141292 catchsql {DROP INDEX i1} 1483*c5c4113dSnw141292} {0 {}} 1484*c5c4113dSnw141292do_test auth-1.227 { 1485*c5c4113dSnw141292 set ::authargs 1486*c5c4113dSnw141292} {i1 t1 temp {}} 1487*c5c4113dSnw141292do_test auth-1.228 { 1488*c5c4113dSnw141292 execsql {SELECT name FROM sqlite_temp_master} 1489*c5c4113dSnw141292} {t1} 1490*c5c4113dSnw141292 1491*c5c4113dSnw141292do_test auth-1.229 { 1492*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 1493*c5c4113dSnw141292 if {$code=="SQLITE_PRAGMA"} { 1494*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 1495*c5c4113dSnw141292 return SQLITE_DENY 1496*c5c4113dSnw141292 } 1497*c5c4113dSnw141292 return SQLITE_OK 1498*c5c4113dSnw141292 } 1499*c5c4113dSnw141292 catchsql {PRAGMA full_column_names=on} 1500*c5c4113dSnw141292} {1 {not authorized}} 1501*c5c4113dSnw141292do_test auth-1.230 { 1502*c5c4113dSnw141292 set ::authargs 1503*c5c4113dSnw141292} {full_column_names on {} {}} 1504*c5c4113dSnw141292do_test auth-1.231 { 1505*c5c4113dSnw141292 execsql2 {SELECT a FROM t2} 1506*c5c4113dSnw141292} {a 11 a 7} 1507*c5c4113dSnw141292do_test auth-1.232 { 1508*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 1509*c5c4113dSnw141292 if {$code=="SQLITE_PRAGMA"} { 1510*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 1511*c5c4113dSnw141292 return SQLITE_IGNORE 1512*c5c4113dSnw141292 } 1513*c5c4113dSnw141292 return SQLITE_OK 1514*c5c4113dSnw141292 } 1515*c5c4113dSnw141292 catchsql {PRAGMA full_column_names=on} 1516*c5c4113dSnw141292} {0 {}} 1517*c5c4113dSnw141292do_test auth-1.233 { 1518*c5c4113dSnw141292 set ::authargs 1519*c5c4113dSnw141292} {full_column_names on {} {}} 1520*c5c4113dSnw141292do_test auth-1.234 { 1521*c5c4113dSnw141292 execsql2 {SELECT a FROM t2} 1522*c5c4113dSnw141292} {a 11 a 7} 1523*c5c4113dSnw141292do_test auth-1.235 { 1524*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 1525*c5c4113dSnw141292 if {$code=="SQLITE_PRAGMA"} { 1526*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 1527*c5c4113dSnw141292 return SQLITE_OK 1528*c5c4113dSnw141292 } 1529*c5c4113dSnw141292 return SQLITE_OK 1530*c5c4113dSnw141292 } 1531*c5c4113dSnw141292 catchsql {PRAGMA full_column_names=on} 1532*c5c4113dSnw141292} {0 {}} 1533*c5c4113dSnw141292do_test auth-1.236 { 1534*c5c4113dSnw141292 execsql2 {SELECT a FROM t2} 1535*c5c4113dSnw141292} {t2.a 11 t2.a 7} 1536*c5c4113dSnw141292do_test auth-1.237 { 1537*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 1538*c5c4113dSnw141292 if {$code=="SQLITE_PRAGMA"} { 1539*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 1540*c5c4113dSnw141292 return SQLITE_OK 1541*c5c4113dSnw141292 } 1542*c5c4113dSnw141292 return SQLITE_OK 1543*c5c4113dSnw141292 } 1544*c5c4113dSnw141292 catchsql {PRAGMA full_column_names=OFF} 1545*c5c4113dSnw141292} {0 {}} 1546*c5c4113dSnw141292do_test auth-1.238 { 1547*c5c4113dSnw141292 set ::authargs 1548*c5c4113dSnw141292} {full_column_names OFF {} {}} 1549*c5c4113dSnw141292do_test auth-1.239 { 1550*c5c4113dSnw141292 execsql2 {SELECT a FROM t2} 1551*c5c4113dSnw141292} {a 11 a 7} 1552*c5c4113dSnw141292 1553*c5c4113dSnw141292do_test auth-1.240 { 1554*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 1555*c5c4113dSnw141292 if {$code=="SQLITE_TRANSACTION"} { 1556*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 1557*c5c4113dSnw141292 return SQLITE_DENY 1558*c5c4113dSnw141292 } 1559*c5c4113dSnw141292 return SQLITE_OK 1560*c5c4113dSnw141292 } 1561*c5c4113dSnw141292 catchsql {BEGIN} 1562*c5c4113dSnw141292} {1 {not authorized}} 1563*c5c4113dSnw141292do_test auth-1.241 { 1564*c5c4113dSnw141292 set ::authargs 1565*c5c4113dSnw141292} {BEGIN {} {} {}} 1566*c5c4113dSnw141292do_test auth-1.242 { 1567*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 1568*c5c4113dSnw141292 if {$code=="SQLITE_TRANSACTION" && $arg1!="BEGIN"} { 1569*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 1570*c5c4113dSnw141292 return SQLITE_DENY 1571*c5c4113dSnw141292 } 1572*c5c4113dSnw141292 return SQLITE_OK 1573*c5c4113dSnw141292 } 1574*c5c4113dSnw141292 catchsql {BEGIN; INSERT INTO t2 VALUES(44,55,66); COMMIT} 1575*c5c4113dSnw141292} {1 {not authorized}} 1576*c5c4113dSnw141292do_test auth-1.243 { 1577*c5c4113dSnw141292 set ::authargs 1578*c5c4113dSnw141292} {COMMIT {} {} {}} 1579*c5c4113dSnw141292do_test auth-1.244 { 1580*c5c4113dSnw141292 execsql {SELECT * FROM t2} 1581*c5c4113dSnw141292} {11 2 33 7 8 9 44 55 66} 1582*c5c4113dSnw141292do_test auth-1.245 { 1583*c5c4113dSnw141292 catchsql {ROLLBACK} 1584*c5c4113dSnw141292} {1 {not authorized}} 1585*c5c4113dSnw141292do_test auth-1.246 { 1586*c5c4113dSnw141292 set ::authargs 1587*c5c4113dSnw141292} {ROLLBACK {} {} {}} 1588*c5c4113dSnw141292do_test auth-1.247 { 1589*c5c4113dSnw141292 catchsql {END TRANSACTION} 1590*c5c4113dSnw141292} {1 {not authorized}} 1591*c5c4113dSnw141292do_test auth-1.248 { 1592*c5c4113dSnw141292 set ::authargs 1593*c5c4113dSnw141292} {COMMIT {} {} {}} 1594*c5c4113dSnw141292do_test auth-1.249 { 1595*c5c4113dSnw141292 db authorizer {} 1596*c5c4113dSnw141292 catchsql {ROLLBACK} 1597*c5c4113dSnw141292} {0 {}} 1598*c5c4113dSnw141292do_test auth-1.250 { 1599*c5c4113dSnw141292 execsql {SELECT * FROM t2} 1600*c5c4113dSnw141292} {11 2 33 7 8 9} 1601*c5c4113dSnw141292 1602*c5c4113dSnw141292# ticket #340 - authorization for ATTACH and DETACH. 1603*c5c4113dSnw141292# 1604*c5c4113dSnw141292do_test auth-1.251 { 1605*c5c4113dSnw141292 db authorizer ::auth 1606*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 1607*c5c4113dSnw141292 if {$code=="SQLITE_ATTACH"} { 1608*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 1609*c5c4113dSnw141292 } 1610*c5c4113dSnw141292 return SQLITE_OK 1611*c5c4113dSnw141292 } 1612*c5c4113dSnw141292 catchsql { 1613*c5c4113dSnw141292 ATTACH DATABASE ':memory:' AS test1 1614*c5c4113dSnw141292 } 1615*c5c4113dSnw141292} {0 {}} 1616*c5c4113dSnw141292do_test auth-1.252 { 1617*c5c4113dSnw141292 set ::authargs 1618*c5c4113dSnw141292} {:memory: {} {} {}} 1619*c5c4113dSnw141292do_test auth-1.253 { 1620*c5c4113dSnw141292 catchsql {DETACH DATABASE test1} 1621*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 1622*c5c4113dSnw141292 if {$code=="SQLITE_ATTACH"} { 1623*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 1624*c5c4113dSnw141292 return SQLITE_DENY 1625*c5c4113dSnw141292 } 1626*c5c4113dSnw141292 return SQLITE_OK 1627*c5c4113dSnw141292 } 1628*c5c4113dSnw141292 catchsql { 1629*c5c4113dSnw141292 ATTACH DATABASE ':memory:' AS test1; 1630*c5c4113dSnw141292 } 1631*c5c4113dSnw141292} {1 {not authorized}} 1632*c5c4113dSnw141292do_test auth-1.254 { 1633*c5c4113dSnw141292 lindex [execsql {PRAGMA database_list}] 7 1634*c5c4113dSnw141292} {} 1635*c5c4113dSnw141292do_test auth-1.255 { 1636*c5c4113dSnw141292 catchsql {DETACH DATABASE test1} 1637*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 1638*c5c4113dSnw141292 if {$code=="SQLITE_ATTACH"} { 1639*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 1640*c5c4113dSnw141292 return SQLITE_IGNORE 1641*c5c4113dSnw141292 } 1642*c5c4113dSnw141292 return SQLITE_OK 1643*c5c4113dSnw141292 } 1644*c5c4113dSnw141292 catchsql { 1645*c5c4113dSnw141292 ATTACH DATABASE ':memory:' AS test1; 1646*c5c4113dSnw141292 } 1647*c5c4113dSnw141292} {0 {}} 1648*c5c4113dSnw141292do_test auth-1.256 { 1649*c5c4113dSnw141292 lindex [execsql {PRAGMA database_list}] 7 1650*c5c4113dSnw141292} {} 1651*c5c4113dSnw141292do_test auth-1.257 { 1652*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 1653*c5c4113dSnw141292 if {$code=="SQLITE_DETACH"} { 1654*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 1655*c5c4113dSnw141292 return SQLITE_OK 1656*c5c4113dSnw141292 } 1657*c5c4113dSnw141292 return SQLITE_OK 1658*c5c4113dSnw141292 } 1659*c5c4113dSnw141292 execsql {ATTACH DATABASE ':memory:' AS test1} 1660*c5c4113dSnw141292 catchsql { 1661*c5c4113dSnw141292 DETACH DATABASE test1; 1662*c5c4113dSnw141292 } 1663*c5c4113dSnw141292} {0 {}} 1664*c5c4113dSnw141292do_test auth-1.258 { 1665*c5c4113dSnw141292 lindex [execsql {PRAGMA database_list}] 7 1666*c5c4113dSnw141292} {} 1667*c5c4113dSnw141292do_test auth-1.259 { 1668*c5c4113dSnw141292 execsql {ATTACH DATABASE ':memory:' AS test1} 1669*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 1670*c5c4113dSnw141292 if {$code=="SQLITE_DETACH"} { 1671*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 1672*c5c4113dSnw141292 return SQLITE_IGNORE 1673*c5c4113dSnw141292 } 1674*c5c4113dSnw141292 return SQLITE_OK 1675*c5c4113dSnw141292 } 1676*c5c4113dSnw141292 catchsql { 1677*c5c4113dSnw141292 DETACH DATABASE test1; 1678*c5c4113dSnw141292 } 1679*c5c4113dSnw141292} {0 {}} 1680*c5c4113dSnw141292do_test auth-1.260 { 1681*c5c4113dSnw141292 lindex [execsql {PRAGMA database_list}] 7 1682*c5c4113dSnw141292} {test1} 1683*c5c4113dSnw141292do_test auth-1.261 { 1684*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 1685*c5c4113dSnw141292 if {$code=="SQLITE_DETACH"} { 1686*c5c4113dSnw141292 set ::authargs [list $arg1 $arg2 $arg3 $arg4] 1687*c5c4113dSnw141292 return SQLITE_DENY 1688*c5c4113dSnw141292 } 1689*c5c4113dSnw141292 return SQLITE_OK 1690*c5c4113dSnw141292 } 1691*c5c4113dSnw141292 catchsql { 1692*c5c4113dSnw141292 DETACH DATABASE test1; 1693*c5c4113dSnw141292 } 1694*c5c4113dSnw141292} {1 {not authorized}} 1695*c5c4113dSnw141292do_test auth-1.262 { 1696*c5c4113dSnw141292 lindex [execsql {PRAGMA database_list}] 7 1697*c5c4113dSnw141292} {test1} 1698*c5c4113dSnw141292db authorizer {} 1699*c5c4113dSnw141292execsql {DETACH DATABASE test1} 1700*c5c4113dSnw141292 1701*c5c4113dSnw141292 1702*c5c4113dSnw141292do_test auth-2.1 { 1703*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 1704*c5c4113dSnw141292 if {$code=="SQLITE_READ" && $arg1=="t3" && $arg2=="x"} { 1705*c5c4113dSnw141292 return SQLITE_DENY 1706*c5c4113dSnw141292 } 1707*c5c4113dSnw141292 return SQLITE_OK 1708*c5c4113dSnw141292 } 1709*c5c4113dSnw141292 db authorizer ::auth 1710*c5c4113dSnw141292 execsql {CREATE TABLE t3(x INTEGER PRIMARY KEY, y, z)} 1711*c5c4113dSnw141292 catchsql {SELECT * FROM t3} 1712*c5c4113dSnw141292} {1 {access to t3.x is prohibited}} 1713*c5c4113dSnw141292do_test auth-2.1 { 1714*c5c4113dSnw141292 catchsql {SELECT y,z FROM t3} 1715*c5c4113dSnw141292} {0 {}} 1716*c5c4113dSnw141292do_test auth-2.2 { 1717*c5c4113dSnw141292 catchsql {SELECT ROWID,y,z FROM t3} 1718*c5c4113dSnw141292} {1 {access to t3.x is prohibited}} 1719*c5c4113dSnw141292do_test auth-2.3 { 1720*c5c4113dSnw141292 catchsql {SELECT OID,y,z FROM t3} 1721*c5c4113dSnw141292} {1 {access to t3.x is prohibited}} 1722*c5c4113dSnw141292do_test auth-2.4 { 1723*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 1724*c5c4113dSnw141292 if {$code=="SQLITE_READ" && $arg1=="t3" && $arg2=="x"} { 1725*c5c4113dSnw141292 return SQLITE_IGNORE 1726*c5c4113dSnw141292 } 1727*c5c4113dSnw141292 return SQLITE_OK 1728*c5c4113dSnw141292 } 1729*c5c4113dSnw141292 execsql {INSERT INTO t3 VALUES(44,55,66)} 1730*c5c4113dSnw141292 catchsql {SELECT * FROM t3} 1731*c5c4113dSnw141292} {0 {{} 55 66}} 1732*c5c4113dSnw141292do_test auth-2.5 { 1733*c5c4113dSnw141292 catchsql {SELECT rowid,y,z FROM t3} 1734*c5c4113dSnw141292} {0 {{} 55 66}} 1735*c5c4113dSnw141292do_test auth-2.6 { 1736*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 1737*c5c4113dSnw141292 if {$code=="SQLITE_READ" && $arg1=="t3" && $arg2=="ROWID"} { 1738*c5c4113dSnw141292 return SQLITE_IGNORE 1739*c5c4113dSnw141292 } 1740*c5c4113dSnw141292 return SQLITE_OK 1741*c5c4113dSnw141292 } 1742*c5c4113dSnw141292 catchsql {SELECT * FROM t3} 1743*c5c4113dSnw141292} {0 {44 55 66}} 1744*c5c4113dSnw141292do_test auth-2.7 { 1745*c5c4113dSnw141292 catchsql {SELECT ROWID,y,z FROM t3} 1746*c5c4113dSnw141292} {0 {44 55 66}} 1747*c5c4113dSnw141292do_test auth-2.8 { 1748*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 1749*c5c4113dSnw141292 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="ROWID"} { 1750*c5c4113dSnw141292 return SQLITE_IGNORE 1751*c5c4113dSnw141292 } 1752*c5c4113dSnw141292 return SQLITE_OK 1753*c5c4113dSnw141292 } 1754*c5c4113dSnw141292 catchsql {SELECT ROWID,b,c FROM t2} 1755*c5c4113dSnw141292} {0 {{} 2 33 {} 8 9}} 1756*c5c4113dSnw141292do_test auth-2.9.1 { 1757*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 1758*c5c4113dSnw141292 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="ROWID"} { 1759*c5c4113dSnw141292 return bogus 1760*c5c4113dSnw141292 } 1761*c5c4113dSnw141292 return SQLITE_OK 1762*c5c4113dSnw141292 } 1763*c5c4113dSnw141292 catchsql {SELECT ROWID,b,c FROM t2} 1764*c5c4113dSnw141292} {1 {illegal return value (999) from the authorization function - should be SQLITE_OK, SQLITE_IGNORE, or SQLITE_DENY}} 1765*c5c4113dSnw141292do_test auth-2.9.2 { 1766*c5c4113dSnw141292 db errorcode 1767*c5c4113dSnw141292} {21} 1768*c5c4113dSnw141292do_test auth-2.10 { 1769*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 1770*c5c4113dSnw141292 if {$code=="SQLITE_SELECT"} { 1771*c5c4113dSnw141292 return bogus 1772*c5c4113dSnw141292 } 1773*c5c4113dSnw141292 return SQLITE_OK 1774*c5c4113dSnw141292 } 1775*c5c4113dSnw141292 catchsql {SELECT ROWID,b,c FROM t2} 1776*c5c4113dSnw141292} {1 {illegal return value (1) from the authorization function - should be SQLITE_OK, SQLITE_IGNORE, or SQLITE_DENY}} 1777*c5c4113dSnw141292do_test auth-2.11.1 { 1778*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 1779*c5c4113dSnw141292 if {$code=="SQLITE_READ" && $arg2=="a"} { 1780*c5c4113dSnw141292 return SQLITE_IGNORE 1781*c5c4113dSnw141292 } 1782*c5c4113dSnw141292 return SQLITE_OK 1783*c5c4113dSnw141292 } 1784*c5c4113dSnw141292 catchsql {SELECT * FROM t2, t3} 1785*c5c4113dSnw141292} {0 {{} 2 33 44 55 66 {} 8 9 44 55 66}} 1786*c5c4113dSnw141292do_test auth-2.11.2 { 1787*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 1788*c5c4113dSnw141292 if {$code=="SQLITE_READ" && $arg2=="x"} { 1789*c5c4113dSnw141292 return SQLITE_IGNORE 1790*c5c4113dSnw141292 } 1791*c5c4113dSnw141292 return SQLITE_OK 1792*c5c4113dSnw141292 } 1793*c5c4113dSnw141292 catchsql {SELECT * FROM t2, t3} 1794*c5c4113dSnw141292} {0 {11 2 33 {} 55 66 7 8 9 {} 55 66}} 1795*c5c4113dSnw141292 1796*c5c4113dSnw141292# Make sure the OLD and NEW pseudo-tables of a trigger get authorized. 1797*c5c4113dSnw141292# 1798*c5c4113dSnw141292do_test auth-3.1 { 1799*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 1800*c5c4113dSnw141292 return SQLITE_OK 1801*c5c4113dSnw141292 } 1802*c5c4113dSnw141292 execsql { 1803*c5c4113dSnw141292 CREATE TABLE tx(a1,a2,b1,b2,c1,c2); 1804*c5c4113dSnw141292 CREATE TRIGGER r1 AFTER UPDATE ON t2 FOR EACH ROW BEGIN 1805*c5c4113dSnw141292 INSERT INTO tx VALUES(OLD.a,NEW.a,OLD.b,NEW.b,OLD.c,NEW.c); 1806*c5c4113dSnw141292 END; 1807*c5c4113dSnw141292 UPDATE t2 SET a=a+1; 1808*c5c4113dSnw141292 SELECT * FROM tx; 1809*c5c4113dSnw141292 } 1810*c5c4113dSnw141292} {11 12 2 2 33 33 7 8 8 8 9 9} 1811*c5c4113dSnw141292do_test auth-3.2 { 1812*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 1813*c5c4113dSnw141292 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="c"} { 1814*c5c4113dSnw141292 return SQLITE_IGNORE 1815*c5c4113dSnw141292 } 1816*c5c4113dSnw141292 return SQLITE_OK 1817*c5c4113dSnw141292 } 1818*c5c4113dSnw141292 execsql { 1819*c5c4113dSnw141292 DELETE FROM tx; 1820*c5c4113dSnw141292 UPDATE t2 SET a=a+100; 1821*c5c4113dSnw141292 SELECT * FROM tx; 1822*c5c4113dSnw141292 } 1823*c5c4113dSnw141292} {12 112 2 2 {} {} 8 108 8 8 {} {}} 1824*c5c4113dSnw141292 1825*c5c4113dSnw141292# Make sure the names of views and triggers are passed on on arg4. 1826*c5c4113dSnw141292# 1827*c5c4113dSnw141292do_test auth-4.1 { 1828*c5c4113dSnw141292 proc auth {code arg1 arg2 arg3 arg4} { 1829*c5c4113dSnw141292 lappend ::authargs $code $arg1 $arg2 $arg3 $arg4 1830*c5c4113dSnw141292 return SQLITE_OK 1831*c5c4113dSnw141292 } 1832*c5c4113dSnw141292 set authargs {} 1833*c5c4113dSnw141292 execsql { 1834*c5c4113dSnw141292 UPDATE t2 SET a=a+1; 1835*c5c4113dSnw141292 } 1836*c5c4113dSnw141292 set authargs 1837*c5c4113dSnw141292} [list \ 1838*c5c4113dSnw141292 SQLITE_READ t2 a main {} \ 1839*c5c4113dSnw141292 SQLITE_UPDATE t2 a main {} \ 1840*c5c4113dSnw141292 SQLITE_INSERT tx {} main r1 \ 1841*c5c4113dSnw141292 SQLITE_READ t2 a main r1 \ 1842*c5c4113dSnw141292 SQLITE_READ t2 a main r1 \ 1843*c5c4113dSnw141292 SQLITE_READ t2 b main r1 \ 1844*c5c4113dSnw141292 SQLITE_READ t2 b main r1 \ 1845*c5c4113dSnw141292 SQLITE_READ t2 c main r1 \ 1846*c5c4113dSnw141292 SQLITE_READ t2 c main r1] 1847*c5c4113dSnw141292do_test auth-4.2 { 1848*c5c4113dSnw141292 execsql { 1849*c5c4113dSnw141292 CREATE VIEW v1 AS SELECT a+b AS x FROM t2; 1850*c5c4113dSnw141292 CREATE TABLE v1chng(x1,x2); 1851*c5c4113dSnw141292 CREATE TRIGGER r2 INSTEAD OF UPDATE ON v1 BEGIN 1852*c5c4113dSnw141292 INSERT INTO v1chng VALUES(OLD.x,NEW.x); 1853*c5c4113dSnw141292 END; 1854*c5c4113dSnw141292 SELECT * FROM v1; 1855*c5c4113dSnw141292 } 1856*c5c4113dSnw141292} {115 117} 1857*c5c4113dSnw141292do_test auth-4.3 { 1858*c5c4113dSnw141292 set authargs {} 1859*c5c4113dSnw141292 execsql { 1860*c5c4113dSnw141292 UPDATE v1 SET x=1 WHERE x=117 1861*c5c4113dSnw141292 } 1862*c5c4113dSnw141292 set authargs 1863*c5c4113dSnw141292} [list \ 1864*c5c4113dSnw141292 SQLITE_UPDATE v1 x main {} \ 1865*c5c4113dSnw141292 SQLITE_READ v1 x main {} \ 1866*c5c4113dSnw141292 SQLITE_SELECT {} {} {} v1 \ 1867*c5c4113dSnw141292 SQLITE_READ t2 a main v1 \ 1868*c5c4113dSnw141292 SQLITE_READ t2 b main v1 \ 1869*c5c4113dSnw141292 SQLITE_INSERT v1chng {} main r2 \ 1870*c5c4113dSnw141292 SQLITE_READ v1 x main r2 \ 1871*c5c4113dSnw141292 SQLITE_READ v1 x main r2] 1872*c5c4113dSnw141292do_test auth-4.4 { 1873*c5c4113dSnw141292 execsql { 1874*c5c4113dSnw141292 CREATE TRIGGER r3 INSTEAD OF DELETE ON v1 BEGIN 1875*c5c4113dSnw141292 INSERT INTO v1chng VALUES(OLD.x,NULL); 1876*c5c4113dSnw141292 END; 1877*c5c4113dSnw141292 SELECT * FROM v1; 1878*c5c4113dSnw141292 } 1879*c5c4113dSnw141292} {115 117} 1880*c5c4113dSnw141292do_test auth-4.5 { 1881*c5c4113dSnw141292 set authargs {} 1882*c5c4113dSnw141292 execsql { 1883*c5c4113dSnw141292 DELETE FROM v1 WHERE x=117 1884*c5c4113dSnw141292 } 1885*c5c4113dSnw141292 set authargs 1886*c5c4113dSnw141292} [list \ 1887*c5c4113dSnw141292 SQLITE_DELETE v1 {} main {} \ 1888*c5c4113dSnw141292 SQLITE_READ v1 x main {} \ 1889*c5c4113dSnw141292 SQLITE_SELECT {} {} {} v1 \ 1890*c5c4113dSnw141292 SQLITE_READ t2 a main v1 \ 1891*c5c4113dSnw141292 SQLITE_READ t2 b main v1 \ 1892*c5c4113dSnw141292 SQLITE_INSERT v1chng {} main r3 \ 1893*c5c4113dSnw141292 SQLITE_READ v1 x main r3] 1894*c5c4113dSnw141292 1895*c5c4113dSnw141292finish_test 1896