xref: /titanic_50/usr/src/lib/libsqlite/test/auth.test (revision c5c4113dfcabb1eed3d4bdf7609de5170027a794)
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