blob: 798dcc4b67d76af402e18ceab158eb9d4d45d55a [file] [log] [blame]
drh2d458342003-04-05 03:42:26 +00001# 2003 April 4
drh1962bda2003-01-12 19:33:52 +00002#
3# The author disclaims copyright to this source code. In place of
4# a legal notice, here is a blessing:
5#
6# May you do good and not evil.
7# May you find forgiveness for yourself and forgive others.
8# May you share freely, never taking more than you give.
9#
10#***********************************************************************
11# This file implements regression tests for SQLite library. The
drh2d458342003-04-05 03:42:26 +000012# focus of this script is testing the ATTACH and DETACH commands
13# and related functionality.
drh1962bda2003-01-12 19:33:52 +000014#
drh1211de32004-07-26 12:24:22 +000015# $Id: auth.test,v 1.17 2004/07/26 12:24:24 drh Exp $
drh1962bda2003-01-12 19:33:52 +000016#
17
18set testdir [file dirname $argv0]
19source $testdir/tester.tcl
20
drhe22a3342003-04-22 20:30:37 +000021# disable this test if the SQLITE_OMIT_AUTHORIZATION macro is
22# defined during compilation.
drh1211de32004-07-26 12:24:22 +000023if {[catch {db auth {}} msg]} {
24 finish_test
25 return
26}
drh1962bda2003-01-12 19:33:52 +000027
drhdcd997e2003-01-31 17:21:49 +000028do_test auth-1.1.1 {
drh1962bda2003-01-12 19:33:52 +000029 db close
drhef4ac8f2004-06-19 00:16:31 +000030 set ::DB [sqlite3 db test.db]
drhe22a3342003-04-22 20:30:37 +000031 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +000032 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
drh1962bda2003-01-12 19:33:52 +000033 return SQLITE_DENY
34 }
35 return SQLITE_OK
36 }
drhe22a3342003-04-22 20:30:37 +000037 db authorizer ::auth
drh1962bda2003-01-12 19:33:52 +000038 catchsql {CREATE TABLE t1(a,b,c)}
drhe5f9c642003-01-13 23:27:31 +000039} {1 {not authorized}}
drhdcd997e2003-01-31 17:21:49 +000040do_test auth-1.1.2 {
41 db errorcode
42} {23}
drh0f14e2e2004-06-29 12:39:08 +000043do_test auth-1.1.3 {
44 db authorizer
45} {::auth}
drh1962bda2003-01-12 19:33:52 +000046do_test auth-1.2 {
drhe5f9c642003-01-13 23:27:31 +000047 execsql {SELECT name FROM sqlite_master}
48} {}
drh77ad4e42003-01-14 02:49:27 +000049do_test auth-1.3.1 {
drhe22a3342003-04-22 20:30:37 +000050 proc auth {code arg1 arg2 arg3 arg4} {
drhe5f9c642003-01-13 23:27:31 +000051 if {$code=="SQLITE_CREATE_TABLE"} {
drhe22a3342003-04-22 20:30:37 +000052 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drhe5f9c642003-01-13 23:27:31 +000053 return SQLITE_DENY
54 }
55 return SQLITE_OK
56 }
57 catchsql {CREATE TABLE t1(a,b,c)}
58} {1 {not authorized}}
drh77ad4e42003-01-14 02:49:27 +000059do_test auth-1.3.2 {
drhdcd997e2003-01-31 17:21:49 +000060 db errorcode
61} {23}
62do_test auth-1.3.3 {
drh77ad4e42003-01-14 02:49:27 +000063 set ::authargs
drhe22a3342003-04-22 20:30:37 +000064} {t1 {} main {}}
drhe5f9c642003-01-13 23:27:31 +000065do_test auth-1.4 {
66 execsql {SELECT name FROM sqlite_master}
67} {}
68
69do_test auth-1.5 {
drhe22a3342003-04-22 20:30:37 +000070 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +000071 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
drhe5f9c642003-01-13 23:27:31 +000072 return SQLITE_DENY
73 }
74 return SQLITE_OK
75 }
76 catchsql {CREATE TEMP TABLE t1(a,b,c)}
77} {1 {not authorized}}
78do_test auth-1.6 {
79 execsql {SELECT name FROM sqlite_temp_master}
80} {}
drh77ad4e42003-01-14 02:49:27 +000081do_test auth-1.7.1 {
drhe22a3342003-04-22 20:30:37 +000082 proc auth {code arg1 arg2 arg3 arg4} {
drhe5f9c642003-01-13 23:27:31 +000083 if {$code=="SQLITE_CREATE_TEMP_TABLE"} {
drhe22a3342003-04-22 20:30:37 +000084 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drhe5f9c642003-01-13 23:27:31 +000085 return SQLITE_DENY
86 }
87 return SQLITE_OK
88 }
89 catchsql {CREATE TEMP TABLE t1(a,b,c)}
90} {1 {not authorized}}
drh77ad4e42003-01-14 02:49:27 +000091do_test auth-1.7.2 {
92 set ::authargs
drhe22a3342003-04-22 20:30:37 +000093} {t1 {} temp {}}
drhe5f9c642003-01-13 23:27:31 +000094do_test auth-1.8 {
95 execsql {SELECT name FROM sqlite_temp_master}
96} {}
97
98do_test auth-1.9 {
drhe22a3342003-04-22 20:30:37 +000099 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000100 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
drh1962bda2003-01-12 19:33:52 +0000101 return SQLITE_IGNORE
102 }
103 return SQLITE_OK
104 }
105 catchsql {CREATE TABLE t1(a,b,c)}
drhe5f9c642003-01-13 23:27:31 +0000106} {0 {}}
107do_test auth-1.10 {
108 execsql {SELECT name FROM sqlite_master}
109} {}
110do_test auth-1.11 {
drhe22a3342003-04-22 20:30:37 +0000111 proc auth {code arg1 arg2 arg3 arg4} {
drhe5f9c642003-01-13 23:27:31 +0000112 if {$code=="SQLITE_CREATE_TABLE"} {
drhe22a3342003-04-22 20:30:37 +0000113 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drhe5f9c642003-01-13 23:27:31 +0000114 return SQLITE_IGNORE
drh1962bda2003-01-12 19:33:52 +0000115 }
116 return SQLITE_OK
117 }
118 catchsql {CREATE TABLE t1(a,b,c)}
119} {0 {}}
drhe5f9c642003-01-13 23:27:31 +0000120do_test auth-1.12 {
drh1962bda2003-01-12 19:33:52 +0000121 execsql {SELECT name FROM sqlite_master}
drhe5f9c642003-01-13 23:27:31 +0000122} {}
123do_test auth-1.13 {
drhe22a3342003-04-22 20:30:37 +0000124 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000125 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
drhe5f9c642003-01-13 23:27:31 +0000126 return SQLITE_IGNORE
127 }
128 return SQLITE_OK
129 }
130 catchsql {CREATE TEMP TABLE t1(a,b,c)}
131} {0 {}}
132do_test auth-1.14 {
133 execsql {SELECT name FROM sqlite_temp_master}
134} {}
135do_test auth-1.15 {
drhe22a3342003-04-22 20:30:37 +0000136 proc auth {code arg1 arg2 arg3 arg4} {
drhe5f9c642003-01-13 23:27:31 +0000137 if {$code=="SQLITE_CREATE_TEMP_TABLE"} {
drhe22a3342003-04-22 20:30:37 +0000138 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drhe5f9c642003-01-13 23:27:31 +0000139 return SQLITE_IGNORE
140 }
141 return SQLITE_OK
142 }
143 catchsql {CREATE TEMP TABLE t1(a,b,c)}
144} {0 {}}
145do_test auth-1.16 {
146 execsql {SELECT name FROM sqlite_temp_master}
147} {}
148
149do_test auth-1.17 {
drhe22a3342003-04-22 20:30:37 +0000150 proc auth {code arg1 arg2 arg3 arg4} {
drhe5f9c642003-01-13 23:27:31 +0000151 if {$code=="SQLITE_CREATE_TABLE"} {
drhe22a3342003-04-22 20:30:37 +0000152 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000153 return SQLITE_DENY
drhe5f9c642003-01-13 23:27:31 +0000154 }
155 return SQLITE_OK
156 }
157 catchsql {CREATE TEMP TABLE t1(a,b,c)}
158} {0 {}}
159do_test auth-1.18 {
160 execsql {SELECT name FROM sqlite_temp_master}
161} {t1}
drh77ad4e42003-01-14 02:49:27 +0000162do_test auth-1.19.1 {
163 set ::authargs {}
drhe22a3342003-04-22 20:30:37 +0000164 proc auth {code arg1 arg2 arg3 arg4} {
drhe5f9c642003-01-13 23:27:31 +0000165 if {$code=="SQLITE_CREATE_TEMP_TABLE"} {
drhe22a3342003-04-22 20:30:37 +0000166 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000167 return SQLITE_DENY
drh1962bda2003-01-12 19:33:52 +0000168 }
169 return SQLITE_OK
170 }
171 catchsql {CREATE TABLE t2(a,b,c)}
drh1962bda2003-01-12 19:33:52 +0000172} {0 {}}
drh77ad4e42003-01-14 02:49:27 +0000173do_test auth-1.19.2 {
174 set ::authargs
175} {}
drh1962bda2003-01-12 19:33:52 +0000176do_test auth-1.20 {
drhe5f9c642003-01-13 23:27:31 +0000177 execsql {SELECT name FROM sqlite_master}
178} {t2}
drh1962bda2003-01-12 19:33:52 +0000179
drh77ad4e42003-01-14 02:49:27 +0000180do_test auth-1.21.1 {
drhe22a3342003-04-22 20:30:37 +0000181 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000182 if {$code=="SQLITE_DROP_TABLE"} {
drhe22a3342003-04-22 20:30:37 +0000183 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000184 return SQLITE_DENY
185 }
186 return SQLITE_OK
187 }
188 catchsql {DROP TABLE t2}
189} {1 {not authorized}}
190do_test auth-1.21.2 {
191 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000192} {t2 {} main {}}
drh77ad4e42003-01-14 02:49:27 +0000193do_test auth-1.22 {
194 execsql {SELECT name FROM sqlite_master}
195} {t2}
196do_test auth-1.23.1 {
drhe22a3342003-04-22 20:30:37 +0000197 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000198 if {$code=="SQLITE_DROP_TABLE"} {
drhe22a3342003-04-22 20:30:37 +0000199 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000200 return SQLITE_IGNORE
201 }
202 return SQLITE_OK
203 }
204 catchsql {DROP TABLE t2}
205} {0 {}}
206do_test auth-1.23.2 {
207 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000208} {t2 {} main {}}
drh77ad4e42003-01-14 02:49:27 +0000209do_test auth-1.24 {
210 execsql {SELECT name FROM sqlite_master}
211} {t2}
drhe5f9c642003-01-13 23:27:31 +0000212
drh77ad4e42003-01-14 02:49:27 +0000213do_test auth-1.25 {
drhe22a3342003-04-22 20:30:37 +0000214 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000215 if {$code=="SQLITE_DROP_TEMP_TABLE"} {
drhe22a3342003-04-22 20:30:37 +0000216 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000217 return SQLITE_DENY
218 }
219 return SQLITE_OK
220 }
221 catchsql {DROP TABLE t1}
222} {1 {not authorized}}
223do_test auth-1.26 {
224 execsql {SELECT name FROM sqlite_temp_master}
225} {t1}
226do_test auth-1.27 {
drhe22a3342003-04-22 20:30:37 +0000227 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000228 if {$code=="SQLITE_DROP_TEMP_TABLE"} {
drhe22a3342003-04-22 20:30:37 +0000229 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000230 return SQLITE_IGNORE
231 }
232 return SQLITE_OK
233 }
234 catchsql {DROP TABLE t1}
235} {0 {}}
236do_test auth-1.28 {
237 execsql {SELECT name FROM sqlite_temp_master}
238} {t1}
239
240do_test auth-1.29 {
drhe22a3342003-04-22 20:30:37 +0000241 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000242 if {$code=="SQLITE_INSERT" && $arg1=="t2"} {
243 return SQLITE_DENY
244 }
245 return SQLITE_OK
246 }
247 catchsql {INSERT INTO t2 VALUES(1,2,3)}
248} {1 {not authorized}}
249do_test auth-1.30 {
250 execsql {SELECT * FROM t2}
251} {}
252do_test auth-1.31 {
drhe22a3342003-04-22 20:30:37 +0000253 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000254 if {$code=="SQLITE_INSERT" && $arg1=="t2"} {
255 return SQLITE_IGNORE
256 }
257 return SQLITE_OK
258 }
259 catchsql {INSERT INTO t2 VALUES(1,2,3)}
260} {0 {}}
261do_test auth-1.32 {
262 execsql {SELECT * FROM t2}
263} {}
264do_test auth-1.33 {
drhe22a3342003-04-22 20:30:37 +0000265 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000266 if {$code=="SQLITE_INSERT" && $arg1=="t1"} {
267 return SQLITE_IGNORE
268 }
269 return SQLITE_OK
270 }
271 catchsql {INSERT INTO t2 VALUES(1,2,3)}
272} {0 {}}
273do_test auth-1.34 {
274 execsql {SELECT * FROM t2}
275} {1 2 3}
276
drh4925ca02003-11-27 00:48:57 +0000277do_test auth-1.35.1 {
drhe22a3342003-04-22 20:30:37 +0000278 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000279 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="b"} {
280 return SQLITE_DENY
281 }
282 return SQLITE_OK
283 }
284 catchsql {SELECT * FROM t2}
285} {1 {access to t2.b is prohibited}}
drh4925ca02003-11-27 00:48:57 +0000286do_test auth-1.35.2 {
287 execsql {ATTACH DATABASE 'test.db' AS two}
288 catchsql {SELECT * FROM two.t2}
289} {1 {access to two.t2.b is prohibited}}
290execsql {DETACH DATABASE two}
drh77ad4e42003-01-14 02:49:27 +0000291do_test auth-1.36 {
drhe22a3342003-04-22 20:30:37 +0000292 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000293 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="b"} {
294 return SQLITE_IGNORE
295 }
296 return SQLITE_OK
297 }
298 catchsql {SELECT * FROM t2}
299} {0 {1 {} 3}}
300do_test auth-1.37 {
drhe22a3342003-04-22 20:30:37 +0000301 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000302 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="b"} {
303 return SQLITE_IGNORE
304 }
305 return SQLITE_OK
306 }
307 catchsql {SELECT * FROM t2 WHERE b=2}
308} {0 {}}
309do_test auth-1.38 {
drhe22a3342003-04-22 20:30:37 +0000310 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000311 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="a"} {
312 return SQLITE_IGNORE
313 }
314 return SQLITE_OK
315 }
316 catchsql {SELECT * FROM t2 WHERE b=2}
317} {0 {{} 2 3}}
318do_test auth-1.39 {
drhe22a3342003-04-22 20:30:37 +0000319 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000320 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="b"} {
321 return SQLITE_IGNORE
322 }
323 return SQLITE_OK
324 }
325 catchsql {SELECT * FROM t2 WHERE b IS NULL}
326} {0 {1 {} 3}}
327do_test auth-1.40 {
drhe22a3342003-04-22 20:30:37 +0000328 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000329 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="b"} {
330 return SQLITE_DENY
331 }
332 return SQLITE_OK
333 }
334 catchsql {SELECT a,c FROM t2 WHERE b IS NULL}
335} {1 {access to t2.b is prohibited}}
336
337do_test auth-1.41 {
drhe22a3342003-04-22 20:30:37 +0000338 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000339 if {$code=="SQLITE_UPDATE" && $arg1=="t2" && $arg2=="b"} {
340 return SQLITE_DENY
341 }
342 return SQLITE_OK
343 }
344 catchsql {UPDATE t2 SET a=11}
345} {0 {}}
346do_test auth-1.42 {
347 execsql {SELECT * FROM t2}
348} {11 2 3}
349do_test auth-1.43 {
drhe22a3342003-04-22 20:30:37 +0000350 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000351 if {$code=="SQLITE_UPDATE" && $arg1=="t2" && $arg2=="b"} {
352 return SQLITE_DENY
353 }
354 return SQLITE_OK
355 }
356 catchsql {UPDATE t2 SET b=22, c=33}
357} {1 {not authorized}}
358do_test auth-1.44 {
359 execsql {SELECT * FROM t2}
360} {11 2 3}
361do_test auth-1.45 {
drhe22a3342003-04-22 20:30:37 +0000362 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000363 if {$code=="SQLITE_UPDATE" && $arg1=="t2" && $arg2=="b"} {
364 return SQLITE_IGNORE
365 }
366 return SQLITE_OK
367 }
368 catchsql {UPDATE t2 SET b=22, c=33}
369} {0 {}}
370do_test auth-1.46 {
371 execsql {SELECT * FROM t2}
372} {11 2 33}
373
374do_test auth-1.47 {
drhe22a3342003-04-22 20:30:37 +0000375 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000376 if {$code=="SQLITE_DELETE" && $arg1=="t2"} {
377 return SQLITE_DENY
378 }
379 return SQLITE_OK
380 }
381 catchsql {DELETE FROM t2 WHERE a=11}
382} {1 {not authorized}}
383do_test auth-1.48 {
384 execsql {SELECT * FROM t2}
385} {11 2 33}
386do_test auth-1.49 {
drhe22a3342003-04-22 20:30:37 +0000387 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000388 if {$code=="SQLITE_DELETE" && $arg1=="t2"} {
389 return SQLITE_IGNORE
390 }
391 return SQLITE_OK
392 }
393 catchsql {DELETE FROM t2 WHERE a=11}
394} {0 {}}
395do_test auth-1.50 {
396 execsql {SELECT * FROM t2}
397} {11 2 33}
398
399do_test auth-1.51 {
drhe22a3342003-04-22 20:30:37 +0000400 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000401 if {$code=="SQLITE_SELECT"} {
402 return SQLITE_DENY
403 }
404 return SQLITE_OK
405 }
406 catchsql {SELECT * FROM t2}
407} {1 {not authorized}}
408do_test auth-1.52 {
drhe22a3342003-04-22 20:30:37 +0000409 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000410 if {$code=="SQLITE_SELECT"} {
411 return SQLITE_IGNORE
412 }
413 return SQLITE_OK
414 }
415 catchsql {SELECT * FROM t2}
416} {0 {}}
417do_test auth-1.53 {
drhe22a3342003-04-22 20:30:37 +0000418 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000419 if {$code=="SQLITE_SELECT"} {
420 return SQLITE_OK
421 }
422 return SQLITE_OK
423 }
424 catchsql {SELECT * FROM t2}
425} {0 {11 2 33}}
426
danielk19772ac79702004-06-14 11:54:18 +0000427# Update for version 3: There used to be a handful of test here that
428# tested the authorisation callback with the COPY command. The following
429# test makes the same database modifications as they used to.
430do_test auth-1.54 {
431 execsql {INSERT INTO t2 VALUES(7, 8, 9);}
432} {}
433do_test auth-1.55 {
434 execsql {SELECT * FROM t2}
435} {11 2 33 7 8 9}
drh77ad4e42003-01-14 02:49:27 +0000436
437do_test auth-1.63 {
drhe22a3342003-04-22 20:30:37 +0000438 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000439 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
440 return SQLITE_DENY
441 }
442 return SQLITE_OK
443 }
444 catchsql {DROP TABLE t2}
445} {1 {not authorized}}
446do_test auth-1.64 {
447 execsql {SELECT name FROM sqlite_master}
448} {t2}
449do_test auth-1.65 {
drhe22a3342003-04-22 20:30:37 +0000450 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000451 if {$code=="SQLITE_DELETE" && $arg1=="t2"} {
452 return SQLITE_DENY
453 }
454 return SQLITE_OK
455 }
456 catchsql {DROP TABLE t2}
457} {1 {not authorized}}
458do_test auth-1.66 {
459 execsql {SELECT name FROM sqlite_master}
460} {t2}
461do_test auth-1.67 {
drhe22a3342003-04-22 20:30:37 +0000462 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000463 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
464 return SQLITE_DENY
465 }
466 return SQLITE_OK
467 }
468 catchsql {DROP TABLE t1}
469} {1 {not authorized}}
470do_test auth-1.68 {
471 execsql {SELECT name FROM sqlite_temp_master}
472} {t1}
473do_test auth-1.69 {
drhe22a3342003-04-22 20:30:37 +0000474 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000475 if {$code=="SQLITE_DELETE" && $arg1=="t1"} {
476 return SQLITE_DENY
477 }
478 return SQLITE_OK
479 }
480 catchsql {DROP TABLE t1}
481} {1 {not authorized}}
482do_test auth-1.70 {
483 execsql {SELECT name FROM sqlite_temp_master}
484} {t1}
485
486do_test auth-1.71 {
drhe22a3342003-04-22 20:30:37 +0000487 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000488 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
489 return SQLITE_IGNORE
490 }
491 return SQLITE_OK
492 }
493 catchsql {DROP TABLE t2}
494} {0 {}}
495do_test auth-1.72 {
496 execsql {SELECT name FROM sqlite_master}
497} {t2}
498do_test auth-1.73 {
drhe22a3342003-04-22 20:30:37 +0000499 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000500 if {$code=="SQLITE_DELETE" && $arg1=="t2"} {
501 return SQLITE_IGNORE
502 }
503 return SQLITE_OK
504 }
505 catchsql {DROP TABLE t2}
506} {0 {}}
507do_test auth-1.74 {
508 execsql {SELECT name FROM sqlite_master}
509} {t2}
510do_test auth-1.75 {
drhe22a3342003-04-22 20:30:37 +0000511 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000512 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
513 return SQLITE_IGNORE
514 }
515 return SQLITE_OK
516 }
517 catchsql {DROP TABLE t1}
518} {0 {}}
519do_test auth-1.76 {
520 execsql {SELECT name FROM sqlite_temp_master}
521} {t1}
522do_test auth-1.77 {
drhe22a3342003-04-22 20:30:37 +0000523 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000524 if {$code=="SQLITE_DELETE" && $arg1=="t1"} {
525 return SQLITE_IGNORE
526 }
527 return SQLITE_OK
528 }
529 catchsql {DROP TABLE t1}
530} {0 {}}
531do_test auth-1.78 {
532 execsql {SELECT name FROM sqlite_temp_master}
533} {t1}
534
535do_test auth-1.79 {
drhe22a3342003-04-22 20:30:37 +0000536 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000537 if {$code=="SQLITE_CREATE_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000538 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000539 return SQLITE_DENY
540 }
541 return SQLITE_OK
542 }
543 catchsql {CREATE VIEW v1 AS SELECT a+1,b+1 FROM t2}
544} {1 {not authorized}}
545do_test auth-1.80 {
546 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000547} {v1 {} main {}}
drh77ad4e42003-01-14 02:49:27 +0000548do_test auth-1.81 {
549 execsql {SELECT name FROM sqlite_master}
550} {t2}
551do_test auth-1.82 {
drhe22a3342003-04-22 20:30:37 +0000552 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000553 if {$code=="SQLITE_CREATE_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000554 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000555 return SQLITE_IGNORE
556 }
557 return SQLITE_OK
558 }
559 catchsql {CREATE VIEW v1 AS SELECT a+1,b+1 FROM t2}
560} {0 {}}
561do_test auth-1.83 {
562 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000563} {v1 {} main {}}
drh77ad4e42003-01-14 02:49:27 +0000564do_test auth-1.84 {
565 execsql {SELECT name FROM sqlite_master}
566} {t2}
567
568do_test auth-1.85 {
drhe22a3342003-04-22 20:30:37 +0000569 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000570 if {$code=="SQLITE_CREATE_TEMP_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000571 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000572 return SQLITE_DENY
573 }
574 return SQLITE_OK
575 }
576 catchsql {CREATE TEMPORARY VIEW v1 AS SELECT a+1,b+1 FROM t2}
577} {1 {not authorized}}
578do_test auth-1.86 {
579 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000580} {v1 {} temp {}}
drh77ad4e42003-01-14 02:49:27 +0000581do_test auth-1.87 {
582 execsql {SELECT name FROM sqlite_temp_master}
583} {t1}
584do_test auth-1.88 {
drhe22a3342003-04-22 20:30:37 +0000585 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000586 if {$code=="SQLITE_CREATE_TEMP_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000587 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000588 return SQLITE_IGNORE
589 }
590 return SQLITE_OK
591 }
592 catchsql {CREATE TEMPORARY VIEW v1 AS SELECT a+1,b+1 FROM t2}
593} {0 {}}
594do_test auth-1.89 {
595 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000596} {v1 {} temp {}}
drh77ad4e42003-01-14 02:49:27 +0000597do_test auth-1.90 {
598 execsql {SELECT name FROM sqlite_temp_master}
599} {t1}
600
601do_test auth-1.91 {
drhe22a3342003-04-22 20:30:37 +0000602 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000603 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
604 return SQLITE_DENY
605 }
606 return SQLITE_OK
607 }
608 catchsql {CREATE VIEW v1 AS SELECT a+1,b+1 FROM t2}
609} {1 {not authorized}}
610do_test auth-1.92 {
611 execsql {SELECT name FROM sqlite_master}
612} {t2}
613do_test auth-1.93 {
drhe22a3342003-04-22 20:30:37 +0000614 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000615 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
616 return SQLITE_IGNORE
617 }
618 return SQLITE_OK
619 }
620 catchsql {CREATE VIEW v1 AS SELECT a+1,b+1 FROM t2}
621} {0 {}}
622do_test auth-1.94 {
623 execsql {SELECT name FROM sqlite_master}
624} {t2}
625
626do_test auth-1.95 {
drhe22a3342003-04-22 20:30:37 +0000627 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000628 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
629 return SQLITE_DENY
630 }
631 return SQLITE_OK
632 }
633 catchsql {CREATE TEMPORARY VIEW v1 AS SELECT a+1,b+1 FROM t2}
634} {1 {not authorized}}
635do_test auth-1.96 {
636 execsql {SELECT name FROM sqlite_temp_master}
637} {t1}
638do_test auth-1.97 {
drhe22a3342003-04-22 20:30:37 +0000639 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000640 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
641 return SQLITE_IGNORE
642 }
643 return SQLITE_OK
644 }
645 catchsql {CREATE TEMPORARY VIEW v1 AS SELECT a+1,b+1 FROM t2}
646} {0 {}}
647do_test auth-1.98 {
648 execsql {SELECT name FROM sqlite_temp_master}
649} {t1}
650
651do_test auth-1.99 {
drhe22a3342003-04-22 20:30:37 +0000652 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000653 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
654 return SQLITE_DENY
655 }
656 return SQLITE_OK
657 }
658 catchsql {
659 CREATE VIEW v2 AS SELECT a+1,b+1 FROM t2;
660 DROP VIEW v2
661 }
662} {1 {not authorized}}
663do_test auth-1.100 {
664 execsql {SELECT name FROM sqlite_master}
665} {t2 v2}
666do_test auth-1.101 {
drhe22a3342003-04-22 20:30:37 +0000667 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000668 if {$code=="SQLITE_DROP_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000669 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000670 return SQLITE_DENY
671 }
672 return SQLITE_OK
673 }
674 catchsql {DROP VIEW v2}
675} {1 {not authorized}}
676do_test auth-1.102 {
677 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000678} {v2 {} main {}}
drh77ad4e42003-01-14 02:49:27 +0000679do_test auth-1.103 {
680 execsql {SELECT name FROM sqlite_master}
681} {t2 v2}
682do_test auth-1.104 {
drhe22a3342003-04-22 20:30:37 +0000683 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000684 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
685 return SQLITE_IGNORE
686 }
687 return SQLITE_OK
688 }
689 catchsql {DROP VIEW v2}
690} {0 {}}
691do_test auth-1.105 {
692 execsql {SELECT name FROM sqlite_master}
693} {t2 v2}
694do_test auth-1.106 {
drhe22a3342003-04-22 20:30:37 +0000695 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000696 if {$code=="SQLITE_DROP_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000697 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000698 return SQLITE_IGNORE
699 }
700 return SQLITE_OK
701 }
702 catchsql {DROP VIEW v2}
703} {0 {}}
704do_test auth-1.107 {
705 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000706} {v2 {} main {}}
drh77ad4e42003-01-14 02:49:27 +0000707do_test auth-1.108 {
708 execsql {SELECT name FROM sqlite_master}
709} {t2 v2}
710do_test auth-1.109 {
drhe22a3342003-04-22 20:30:37 +0000711 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000712 if {$code=="SQLITE_DROP_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000713 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000714 return SQLITE_OK
715 }
716 return SQLITE_OK
717 }
718 catchsql {DROP VIEW v2}
719} {0 {}}
720do_test auth-1.110 {
721 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000722} {v2 {} main {}}
drh77ad4e42003-01-14 02:49:27 +0000723do_test auth-1.111 {
724 execsql {SELECT name FROM sqlite_master}
725} {t2}
726
727
728do_test auth-1.112 {
drhe22a3342003-04-22 20:30:37 +0000729 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000730 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
731 return SQLITE_DENY
732 }
733 return SQLITE_OK
734 }
735 catchsql {
736 CREATE TEMP VIEW v1 AS SELECT a+1,b+1 FROM t1;
737 DROP VIEW v1
738 }
739} {1 {not authorized}}
740do_test auth-1.113 {
741 execsql {SELECT name FROM sqlite_temp_master}
742} {t1 v1}
743do_test auth-1.114 {
drhe22a3342003-04-22 20:30:37 +0000744 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000745 if {$code=="SQLITE_DROP_TEMP_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000746 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000747 return SQLITE_DENY
748 }
749 return SQLITE_OK
750 }
751 catchsql {DROP VIEW v1}
752} {1 {not authorized}}
753do_test auth-1.115 {
754 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000755} {v1 {} temp {}}
drh77ad4e42003-01-14 02:49:27 +0000756do_test auth-1.116 {
757 execsql {SELECT name FROM sqlite_temp_master}
758} {t1 v1}
759do_test auth-1.117 {
drhe22a3342003-04-22 20:30:37 +0000760 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000761 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
762 return SQLITE_IGNORE
763 }
764 return SQLITE_OK
765 }
766 catchsql {DROP VIEW v1}
767} {0 {}}
768do_test auth-1.118 {
769 execsql {SELECT name FROM sqlite_temp_master}
770} {t1 v1}
771do_test auth-1.119 {
drhe22a3342003-04-22 20:30:37 +0000772 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000773 if {$code=="SQLITE_DROP_TEMP_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000774 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000775 return SQLITE_IGNORE
776 }
777 return SQLITE_OK
778 }
779 catchsql {DROP VIEW v1}
780} {0 {}}
781do_test auth-1.120 {
782 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000783} {v1 {} temp {}}
drh77ad4e42003-01-14 02:49:27 +0000784do_test auth-1.121 {
785 execsql {SELECT name FROM sqlite_temp_master}
786} {t1 v1}
787do_test auth-1.122 {
drhe22a3342003-04-22 20:30:37 +0000788 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000789 if {$code=="SQLITE_DROP_TEMP_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000790 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000791 return SQLITE_OK
792 }
793 return SQLITE_OK
794 }
795 catchsql {DROP VIEW v1}
796} {0 {}}
797do_test auth-1.123 {
798 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000799} {v1 {} temp {}}
drh77ad4e42003-01-14 02:49:27 +0000800do_test auth-1.124 {
801 execsql {SELECT name FROM sqlite_temp_master}
802} {t1}
803
804do_test auth-1.125 {
drhe22a3342003-04-22 20:30:37 +0000805 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000806 if {$code=="SQLITE_CREATE_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +0000807 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000808 return SQLITE_DENY
809 }
810 return SQLITE_OK
811 }
812 catchsql {
813 CREATE TRIGGER r2 DELETE on t2 BEGIN
814 SELECT NULL;
815 END;
816 }
817} {1 {not authorized}}
818do_test auth-1.126 {
819 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000820} {r2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +0000821do_test auth-1.127 {
822 execsql {SELECT name FROM sqlite_master}
823} {t2}
824do_test auth-1.128 {
drhe22a3342003-04-22 20:30:37 +0000825 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000826 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
827 return SQLITE_DENY
828 }
829 return SQLITE_OK
830 }
831 catchsql {
832 CREATE TRIGGER r2 DELETE on t2 BEGIN
833 SELECT NULL;
834 END;
835 }
836} {1 {not authorized}}
837do_test auth-1.129 {
838 execsql {SELECT name FROM sqlite_master}
839} {t2}
840do_test auth-1.130 {
drhe22a3342003-04-22 20:30:37 +0000841 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000842 if {$code=="SQLITE_CREATE_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +0000843 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000844 return SQLITE_IGNORE
845 }
846 return SQLITE_OK
847 }
848 catchsql {
849 CREATE TRIGGER r2 DELETE on t2 BEGIN
850 SELECT NULL;
851 END;
852 }
853} {0 {}}
854do_test auth-1.131 {
855 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000856} {r2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +0000857do_test auth-1.132 {
858 execsql {SELECT name FROM sqlite_master}
859} {t2}
860do_test auth-1.133 {
drhe22a3342003-04-22 20:30:37 +0000861 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000862 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
863 return SQLITE_IGNORE
864 }
865 return SQLITE_OK
866 }
867 catchsql {
868 CREATE TRIGGER r2 DELETE on t2 BEGIN
869 SELECT NULL;
870 END;
871 }
872} {0 {}}
873do_test auth-1.134 {
874 execsql {SELECT name FROM sqlite_master}
875} {t2}
876do_test auth-1.135 {
drhe22a3342003-04-22 20:30:37 +0000877 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000878 if {$code=="SQLITE_CREATE_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +0000879 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000880 return SQLITE_OK
881 }
882 return SQLITE_OK
883 }
884 catchsql {
drhe22a3342003-04-22 20:30:37 +0000885 CREATE TABLE tx(id);
886 CREATE TRIGGER r2 AFTER INSERT ON t2 BEGIN
887 INSERT INTO tx VALUES(NEW.rowid);
drh77ad4e42003-01-14 02:49:27 +0000888 END;
889 }
890} {0 {}}
drhe22a3342003-04-22 20:30:37 +0000891do_test auth-1.136.1 {
drh77ad4e42003-01-14 02:49:27 +0000892 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000893} {r2 t2 main {}}
894do_test auth-1.136.2 {
895 execsql {
896 SELECT name FROM sqlite_master WHERE type='trigger'
897 }
898} {r2}
899do_test auth-1.136.3 {
900 proc auth {code arg1 arg2 arg3 arg4} {
901 lappend ::authargs $code $arg1 $arg2 $arg3 $arg4
902 return SQLITE_OK
903 }
904 set ::authargs {}
905 execsql {
906 INSERT INTO t2 VALUES(1,2,3);
907 }
908 set ::authargs
909} {SQLITE_INSERT t2 {} main {} SQLITE_INSERT tx {} main r2 SQLITE_READ t2 ROWID main r2}
910do_test auth-1.136.4 {
911 execsql {
912 SELECT * FROM tx;
913 }
914} {3}
drh77ad4e42003-01-14 02:49:27 +0000915do_test auth-1.137 {
916 execsql {SELECT name FROM sqlite_master}
drhe22a3342003-04-22 20:30:37 +0000917} {t2 tx r2}
drh77ad4e42003-01-14 02:49:27 +0000918do_test auth-1.138 {
drhe22a3342003-04-22 20:30:37 +0000919 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000920 if {$code=="SQLITE_CREATE_TEMP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +0000921 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000922 return SQLITE_DENY
923 }
924 return SQLITE_OK
925 }
926 catchsql {
927 CREATE TRIGGER r1 DELETE on t1 BEGIN
928 SELECT NULL;
929 END;
930 }
931} {1 {not authorized}}
932do_test auth-1.139 {
933 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000934} {r1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +0000935do_test auth-1.140 {
936 execsql {SELECT name FROM sqlite_temp_master}
937} {t1}
938do_test auth-1.141 {
drhe22a3342003-04-22 20:30:37 +0000939 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000940 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
941 return SQLITE_DENY
942 }
943 return SQLITE_OK
944 }
945 catchsql {
946 CREATE TRIGGER r1 DELETE on t1 BEGIN
947 SELECT NULL;
948 END;
949 }
950} {1 {not authorized}}
951do_test auth-1.142 {
952 execsql {SELECT name FROM sqlite_temp_master}
953} {t1}
954do_test auth-1.143 {
drhe22a3342003-04-22 20:30:37 +0000955 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000956 if {$code=="SQLITE_CREATE_TEMP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +0000957 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000958 return SQLITE_IGNORE
959 }
960 return SQLITE_OK
961 }
962 catchsql {
963 CREATE TRIGGER r1 DELETE on t1 BEGIN
964 SELECT NULL;
965 END;
966 }
967} {0 {}}
968do_test auth-1.144 {
969 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000970} {r1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +0000971do_test auth-1.145 {
972 execsql {SELECT name FROM sqlite_temp_master}
973} {t1}
974do_test auth-1.146 {
drhe22a3342003-04-22 20:30:37 +0000975 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000976 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
977 return SQLITE_IGNORE
978 }
979 return SQLITE_OK
980 }
981 catchsql {
982 CREATE TRIGGER r1 DELETE on t1 BEGIN
983 SELECT NULL;
984 END;
985 }
986} {0 {}}
987do_test auth-1.147 {
988 execsql {SELECT name FROM sqlite_temp_master}
989} {t1}
990do_test auth-1.148 {
drhe22a3342003-04-22 20:30:37 +0000991 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000992 if {$code=="SQLITE_CREATE_TEMP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +0000993 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000994 return SQLITE_OK
995 }
996 return SQLITE_OK
997 }
998 catchsql {
999 CREATE TRIGGER r1 DELETE on t1 BEGIN
1000 SELECT NULL;
1001 END;
1002 }
1003} {0 {}}
1004do_test auth-1.149 {
1005 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001006} {r1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001007do_test auth-1.150 {
1008 execsql {SELECT name FROM sqlite_temp_master}
1009} {t1 r1}
1010
1011do_test auth-1.151 {
drhe22a3342003-04-22 20:30:37 +00001012 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001013 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
1014 return SQLITE_DENY
1015 }
1016 return SQLITE_OK
1017 }
1018 catchsql {DROP TRIGGER r2}
1019} {1 {not authorized}}
1020do_test auth-1.152 {
1021 execsql {SELECT name FROM sqlite_master}
drhe22a3342003-04-22 20:30:37 +00001022} {t2 tx r2}
drh77ad4e42003-01-14 02:49:27 +00001023do_test auth-1.153 {
drhe22a3342003-04-22 20:30:37 +00001024 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001025 if {$code=="SQLITE_DROP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +00001026 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001027 return SQLITE_DENY
1028 }
1029 return SQLITE_OK
1030 }
1031 catchsql {DROP TRIGGER r2}
1032} {1 {not authorized}}
1033do_test auth-1.154 {
1034 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001035} {r2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001036do_test auth-1.155 {
1037 execsql {SELECT name FROM sqlite_master}
drhe22a3342003-04-22 20:30:37 +00001038} {t2 tx r2}
drh77ad4e42003-01-14 02:49:27 +00001039do_test auth-1.156 {
drhe22a3342003-04-22 20:30:37 +00001040 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001041 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
1042 return SQLITE_IGNORE
1043 }
1044 return SQLITE_OK
1045 }
1046 catchsql {DROP TRIGGER r2}
1047} {0 {}}
1048do_test auth-1.157 {
1049 execsql {SELECT name FROM sqlite_master}
drhe22a3342003-04-22 20:30:37 +00001050} {t2 tx r2}
drh77ad4e42003-01-14 02:49:27 +00001051do_test auth-1.158 {
drhe22a3342003-04-22 20:30:37 +00001052 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001053 if {$code=="SQLITE_DROP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +00001054 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001055 return SQLITE_IGNORE
1056 }
1057 return SQLITE_OK
1058 }
1059 catchsql {DROP TRIGGER r2}
1060} {0 {}}
1061do_test auth-1.159 {
1062 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001063} {r2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001064do_test auth-1.160 {
1065 execsql {SELECT name FROM sqlite_master}
drhe22a3342003-04-22 20:30:37 +00001066} {t2 tx r2}
drh77ad4e42003-01-14 02:49:27 +00001067do_test auth-1.161 {
drhe22a3342003-04-22 20:30:37 +00001068 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001069 if {$code=="SQLITE_DROP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +00001070 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001071 return SQLITE_OK
1072 }
1073 return SQLITE_OK
1074 }
1075 catchsql {DROP TRIGGER r2}
1076} {0 {}}
1077do_test auth-1.162 {
1078 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001079} {r2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001080do_test auth-1.163 {
drhe22a3342003-04-22 20:30:37 +00001081 execsql {
1082 DROP TABLE tx;
1083 DELETE FROM t2 WHERE a=1 AND b=2 AND c=3;
1084 SELECT name FROM sqlite_master;
1085 }
drh77ad4e42003-01-14 02:49:27 +00001086} {t2}
1087
1088do_test auth-1.164 {
drhe22a3342003-04-22 20:30:37 +00001089 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001090 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
1091 return SQLITE_DENY
1092 }
1093 return SQLITE_OK
1094 }
1095 catchsql {DROP TRIGGER r1}
1096} {1 {not authorized}}
1097do_test auth-1.165 {
1098 execsql {SELECT name FROM sqlite_temp_master}
1099} {t1 r1}
1100do_test auth-1.166 {
drhe22a3342003-04-22 20:30:37 +00001101 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001102 if {$code=="SQLITE_DROP_TEMP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +00001103 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001104 return SQLITE_DENY
1105 }
1106 return SQLITE_OK
1107 }
1108 catchsql {DROP TRIGGER r1}
1109} {1 {not authorized}}
1110do_test auth-1.167 {
1111 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001112} {r1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001113do_test auth-1.168 {
1114 execsql {SELECT name FROM sqlite_temp_master}
1115} {t1 r1}
1116do_test auth-1.169 {
drhe22a3342003-04-22 20:30:37 +00001117 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001118 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
1119 return SQLITE_IGNORE
1120 }
1121 return SQLITE_OK
1122 }
1123 catchsql {DROP TRIGGER r1}
1124} {0 {}}
1125do_test auth-1.170 {
1126 execsql {SELECT name FROM sqlite_temp_master}
1127} {t1 r1}
1128do_test auth-1.171 {
drhe22a3342003-04-22 20:30:37 +00001129 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001130 if {$code=="SQLITE_DROP_TEMP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +00001131 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001132 return SQLITE_IGNORE
1133 }
1134 return SQLITE_OK
1135 }
1136 catchsql {DROP TRIGGER r1}
1137} {0 {}}
1138do_test auth-1.172 {
1139 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001140} {r1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001141do_test auth-1.173 {
1142 execsql {SELECT name FROM sqlite_temp_master}
1143} {t1 r1}
1144do_test auth-1.174 {
drhe22a3342003-04-22 20:30:37 +00001145 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001146 if {$code=="SQLITE_DROP_TEMP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +00001147 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001148 return SQLITE_OK
1149 }
1150 return SQLITE_OK
1151 }
1152 catchsql {DROP TRIGGER r1}
1153} {0 {}}
1154do_test auth-1.175 {
1155 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001156} {r1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001157do_test auth-1.176 {
1158 execsql {SELECT name FROM sqlite_temp_master}
1159} {t1}
1160
1161do_test auth-1.177 {
drhe22a3342003-04-22 20:30:37 +00001162 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001163 if {$code=="SQLITE_CREATE_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001164 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001165 return SQLITE_DENY
1166 }
1167 return SQLITE_OK
1168 }
1169 catchsql {CREATE INDEX i2 ON t2(a)}
1170} {1 {not authorized}}
1171do_test auth-1.178 {
1172 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001173} {i2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001174do_test auth-1.179 {
1175 execsql {SELECT name FROM sqlite_master}
1176} {t2}
1177do_test auth-1.180 {
drhe22a3342003-04-22 20:30:37 +00001178 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001179 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
1180 return SQLITE_DENY
1181 }
1182 return SQLITE_OK
1183 }
1184 catchsql {CREATE INDEX i2 ON t2(a)}
1185} {1 {not authorized}}
1186do_test auth-1.181 {
1187 execsql {SELECT name FROM sqlite_master}
1188} {t2}
1189do_test auth-1.182 {
drhe22a3342003-04-22 20:30:37 +00001190 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001191 if {$code=="SQLITE_CREATE_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001192 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001193 return SQLITE_IGNORE
1194 }
1195 return SQLITE_OK
1196 }
1197 catchsql {CREATE INDEX i2 ON t2(b)}
1198} {0 {}}
1199do_test auth-1.183 {
1200 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001201} {i2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001202do_test auth-1.184 {
1203 execsql {SELECT name FROM sqlite_master}
1204} {t2}
1205do_test auth-1.185 {
drhe22a3342003-04-22 20:30:37 +00001206 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001207 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
1208 return SQLITE_IGNORE
1209 }
1210 return SQLITE_OK
1211 }
1212 catchsql {CREATE INDEX i2 ON t2(b)}
1213} {0 {}}
1214do_test auth-1.186 {
1215 execsql {SELECT name FROM sqlite_master}
1216} {t2}
1217do_test auth-1.187 {
drhe22a3342003-04-22 20:30:37 +00001218 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001219 if {$code=="SQLITE_CREATE_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001220 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001221 return SQLITE_OK
1222 }
1223 return SQLITE_OK
1224 }
1225 catchsql {CREATE INDEX i2 ON t2(a)}
1226} {0 {}}
1227do_test auth-1.188 {
1228 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001229} {i2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001230do_test auth-1.189 {
1231 execsql {SELECT name FROM sqlite_master}
1232} {t2 i2}
1233
1234do_test auth-1.190 {
drhe22a3342003-04-22 20:30:37 +00001235 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001236 if {$code=="SQLITE_CREATE_TEMP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001237 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001238 return SQLITE_DENY
1239 }
1240 return SQLITE_OK
1241 }
1242 catchsql {CREATE INDEX i1 ON t1(a)}
1243} {1 {not authorized}}
1244do_test auth-1.191 {
1245 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001246} {i1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001247do_test auth-1.192 {
1248 execsql {SELECT name FROM sqlite_temp_master}
1249} {t1}
1250do_test auth-1.193 {
drhe22a3342003-04-22 20:30:37 +00001251 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001252 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
1253 return SQLITE_DENY
1254 }
1255 return SQLITE_OK
1256 }
1257 catchsql {CREATE INDEX i1 ON t1(b)}
1258} {1 {not authorized}}
1259do_test auth-1.194 {
1260 execsql {SELECT name FROM sqlite_temp_master}
1261} {t1}
1262do_test auth-1.195 {
drhe22a3342003-04-22 20:30:37 +00001263 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001264 if {$code=="SQLITE_CREATE_TEMP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001265 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001266 return SQLITE_IGNORE
1267 }
1268 return SQLITE_OK
1269 }
1270 catchsql {CREATE INDEX i1 ON t1(b)}
1271} {0 {}}
1272do_test auth-1.196 {
1273 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001274} {i1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001275do_test auth-1.197 {
1276 execsql {SELECT name FROM sqlite_temp_master}
1277} {t1}
1278do_test auth-1.198 {
drhe22a3342003-04-22 20:30:37 +00001279 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001280 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
1281 return SQLITE_IGNORE
1282 }
1283 return SQLITE_OK
1284 }
1285 catchsql {CREATE INDEX i1 ON t1(c)}
1286} {0 {}}
1287do_test auth-1.199 {
1288 execsql {SELECT name FROM sqlite_temp_master}
1289} {t1}
1290do_test auth-1.200 {
drhe22a3342003-04-22 20:30:37 +00001291 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001292 if {$code=="SQLITE_CREATE_TEMP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001293 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001294 return SQLITE_OK
1295 }
1296 return SQLITE_OK
1297 }
1298 catchsql {CREATE INDEX i1 ON t1(a)}
1299} {0 {}}
1300do_test auth-1.201 {
1301 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001302} {i1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001303do_test auth-1.202 {
1304 execsql {SELECT name FROM sqlite_temp_master}
1305} {t1 i1}
1306
1307do_test auth-1.203 {
drhe22a3342003-04-22 20:30:37 +00001308 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001309 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
1310 return SQLITE_DENY
1311 }
1312 return SQLITE_OK
1313 }
1314 catchsql {DROP INDEX i2}
1315} {1 {not authorized}}
1316do_test auth-1.204 {
1317 execsql {SELECT name FROM sqlite_master}
1318} {t2 i2}
1319do_test auth-1.205 {
drhe22a3342003-04-22 20:30:37 +00001320 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001321 if {$code=="SQLITE_DROP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001322 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001323 return SQLITE_DENY
1324 }
1325 return SQLITE_OK
1326 }
1327 catchsql {DROP INDEX i2}
1328} {1 {not authorized}}
1329do_test auth-1.206 {
1330 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001331} {i2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001332do_test auth-1.207 {
1333 execsql {SELECT name FROM sqlite_master}
1334} {t2 i2}
1335do_test auth-1.208 {
drhe22a3342003-04-22 20:30:37 +00001336 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001337 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
1338 return SQLITE_IGNORE
1339 }
1340 return SQLITE_OK
1341 }
1342 catchsql {DROP INDEX i2}
1343} {0 {}}
1344do_test auth-1.209 {
1345 execsql {SELECT name FROM sqlite_master}
1346} {t2 i2}
1347do_test auth-1.210 {
drhe22a3342003-04-22 20:30:37 +00001348 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001349 if {$code=="SQLITE_DROP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001350 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001351 return SQLITE_IGNORE
1352 }
1353 return SQLITE_OK
1354 }
1355 catchsql {DROP INDEX i2}
1356} {0 {}}
1357do_test auth-1.211 {
1358 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001359} {i2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001360do_test auth-1.212 {
1361 execsql {SELECT name FROM sqlite_master}
1362} {t2 i2}
1363do_test auth-1.213 {
drhe22a3342003-04-22 20:30:37 +00001364 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001365 if {$code=="SQLITE_DROP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001366 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001367 return SQLITE_OK
1368 }
1369 return SQLITE_OK
1370 }
1371 catchsql {DROP INDEX i2}
1372} {0 {}}
1373do_test auth-1.214 {
1374 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001375} {i2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001376do_test auth-1.215 {
1377 execsql {SELECT name FROM sqlite_master}
1378} {t2}
1379
1380do_test auth-1.216 {
drhe22a3342003-04-22 20:30:37 +00001381 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001382 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
1383 return SQLITE_DENY
1384 }
1385 return SQLITE_OK
1386 }
1387 catchsql {DROP INDEX i1}
1388} {1 {not authorized}}
1389do_test auth-1.217 {
1390 execsql {SELECT name FROM sqlite_temp_master}
1391} {t1 i1}
1392do_test auth-1.218 {
drhe22a3342003-04-22 20:30:37 +00001393 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001394 if {$code=="SQLITE_DROP_TEMP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001395 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001396 return SQLITE_DENY
1397 }
1398 return SQLITE_OK
1399 }
1400 catchsql {DROP INDEX i1}
1401} {1 {not authorized}}
1402do_test auth-1.219 {
1403 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001404} {i1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001405do_test auth-1.220 {
1406 execsql {SELECT name FROM sqlite_temp_master}
1407} {t1 i1}
1408do_test auth-1.221 {
drhe22a3342003-04-22 20:30:37 +00001409 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001410 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
1411 return SQLITE_IGNORE
1412 }
1413 return SQLITE_OK
1414 }
1415 catchsql {DROP INDEX i1}
1416} {0 {}}
1417do_test auth-1.222 {
1418 execsql {SELECT name FROM sqlite_temp_master}
1419} {t1 i1}
1420do_test auth-1.223 {
drhe22a3342003-04-22 20:30:37 +00001421 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001422 if {$code=="SQLITE_DROP_TEMP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001423 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001424 return SQLITE_IGNORE
1425 }
1426 return SQLITE_OK
1427 }
1428 catchsql {DROP INDEX i1}
1429} {0 {}}
1430do_test auth-1.224 {
1431 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001432} {i1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001433do_test auth-1.225 {
1434 execsql {SELECT name FROM sqlite_temp_master}
1435} {t1 i1}
1436do_test auth-1.226 {
drhe22a3342003-04-22 20:30:37 +00001437 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001438 if {$code=="SQLITE_DROP_TEMP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001439 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001440 return SQLITE_OK
1441 }
1442 return SQLITE_OK
1443 }
1444 catchsql {DROP INDEX i1}
1445} {0 {}}
1446do_test auth-1.227 {
1447 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001448} {i1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001449do_test auth-1.228 {
1450 execsql {SELECT name FROM sqlite_temp_master}
1451} {t1}
1452
1453do_test auth-1.229 {
drhe22a3342003-04-22 20:30:37 +00001454 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001455 if {$code=="SQLITE_PRAGMA"} {
drhe22a3342003-04-22 20:30:37 +00001456 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001457 return SQLITE_DENY
1458 }
1459 return SQLITE_OK
1460 }
1461 catchsql {PRAGMA full_column_names=on}
1462} {1 {not authorized}}
1463do_test auth-1.230 {
1464 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001465} {full_column_names on {} {}}
drh77ad4e42003-01-14 02:49:27 +00001466do_test auth-1.231 {
1467 execsql2 {SELECT a FROM t2}
1468} {a 11 a 7}
1469do_test auth-1.232 {
drhe22a3342003-04-22 20:30:37 +00001470 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001471 if {$code=="SQLITE_PRAGMA"} {
drhe22a3342003-04-22 20:30:37 +00001472 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001473 return SQLITE_IGNORE
1474 }
1475 return SQLITE_OK
1476 }
1477 catchsql {PRAGMA full_column_names=on}
1478} {0 {}}
1479do_test auth-1.233 {
1480 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001481} {full_column_names on {} {}}
drh77ad4e42003-01-14 02:49:27 +00001482do_test auth-1.234 {
1483 execsql2 {SELECT a FROM t2}
1484} {a 11 a 7}
1485do_test auth-1.235 {
drhe22a3342003-04-22 20:30:37 +00001486 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001487 if {$code=="SQLITE_PRAGMA"} {
drhe22a3342003-04-22 20:30:37 +00001488 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001489 return SQLITE_OK
1490 }
1491 return SQLITE_OK
1492 }
1493 catchsql {PRAGMA full_column_names=on}
1494} {0 {}}
1495do_test auth-1.236 {
1496 execsql2 {SELECT a FROM t2}
1497} {t2.a 11 t2.a 7}
1498do_test auth-1.237 {
drhe22a3342003-04-22 20:30:37 +00001499 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001500 if {$code=="SQLITE_PRAGMA"} {
drhe22a3342003-04-22 20:30:37 +00001501 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001502 return SQLITE_OK
1503 }
1504 return SQLITE_OK
1505 }
1506 catchsql {PRAGMA full_column_names=OFF}
1507} {0 {}}
1508do_test auth-1.238 {
1509 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001510} {full_column_names OFF {} {}}
drh77ad4e42003-01-14 02:49:27 +00001511do_test auth-1.239 {
1512 execsql2 {SELECT a FROM t2}
1513} {a 11 a 7}
drhe5f9c642003-01-13 23:27:31 +00001514
drh2c3831c2003-01-14 13:48:20 +00001515do_test auth-1.240 {
drhe22a3342003-04-22 20:30:37 +00001516 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001517 if {$code=="SQLITE_TRANSACTION"} {
drhe22a3342003-04-22 20:30:37 +00001518 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh2c3831c2003-01-14 13:48:20 +00001519 return SQLITE_DENY
1520 }
1521 return SQLITE_OK
1522 }
1523 catchsql {BEGIN}
1524} {1 {not authorized}}
1525do_test auth-1.241 {
1526 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001527} {BEGIN {} {} {}}
drh2c3831c2003-01-14 13:48:20 +00001528do_test auth-1.242 {
drhe22a3342003-04-22 20:30:37 +00001529 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001530 if {$code=="SQLITE_TRANSACTION" && $arg1!="BEGIN"} {
drhe22a3342003-04-22 20:30:37 +00001531 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh2c3831c2003-01-14 13:48:20 +00001532 return SQLITE_DENY
1533 }
1534 return SQLITE_OK
1535 }
1536 catchsql {BEGIN; INSERT INTO t2 VALUES(44,55,66); COMMIT}
1537} {1 {not authorized}}
1538do_test auth-1.243 {
1539 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001540} {COMMIT {} {} {}}
drh2c3831c2003-01-14 13:48:20 +00001541do_test auth-1.244 {
1542 execsql {SELECT * FROM t2}
1543} {11 2 33 7 8 9 44 55 66}
1544do_test auth-1.245 {
1545 catchsql {ROLLBACK}
1546} {1 {not authorized}}
1547do_test auth-1.246 {
1548 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001549} {ROLLBACK {} {} {}}
drh2c3831c2003-01-14 13:48:20 +00001550do_test auth-1.247 {
1551 catchsql {END TRANSACTION}
1552} {1 {not authorized}}
1553do_test auth-1.248 {
1554 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001555} {COMMIT {} {} {}}
drh2c3831c2003-01-14 13:48:20 +00001556do_test auth-1.249 {
drhe22a3342003-04-22 20:30:37 +00001557 db authorizer {}
drh2c3831c2003-01-14 13:48:20 +00001558 catchsql {ROLLBACK}
1559} {0 {}}
1560do_test auth-1.250 {
1561 execsql {SELECT * FROM t2}
1562} {11 2 33 7 8 9}
1563
drh81e293b2003-06-06 19:00:42 +00001564# ticket #340 - authorization for ATTACH and DETACH.
1565#
1566do_test auth-1.251 {
1567 db authorizer ::auth
1568 proc auth {code arg1 arg2 arg3 arg4} {
1569 if {$code=="SQLITE_ATTACH"} {
1570 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
1571 }
1572 return SQLITE_OK
1573 }
1574 catchsql {
1575 ATTACH DATABASE ':memory:' AS test1
1576 }
1577} {0 {}}
1578do_test auth-1.252 {
1579 set ::authargs
1580} {:memory: {} {} {}}
1581do_test auth-1.253 {
1582 catchsql {DETACH DATABASE test1}
1583 proc auth {code arg1 arg2 arg3 arg4} {
1584 if {$code=="SQLITE_ATTACH"} {
1585 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
1586 return SQLITE_DENY
1587 }
1588 return SQLITE_OK
1589 }
1590 catchsql {
1591 ATTACH DATABASE ':memory:' AS test1;
1592 }
1593} {1 {not authorized}}
1594do_test auth-1.254 {
1595 lindex [execsql {PRAGMA database_list}] 7
1596} {}
1597do_test auth-1.255 {
1598 catchsql {DETACH DATABASE test1}
1599 proc auth {code arg1 arg2 arg3 arg4} {
1600 if {$code=="SQLITE_ATTACH"} {
1601 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
1602 return SQLITE_IGNORE
1603 }
1604 return SQLITE_OK
1605 }
1606 catchsql {
1607 ATTACH DATABASE ':memory:' AS test1;
1608 }
1609} {0 {}}
1610do_test auth-1.256 {
1611 lindex [execsql {PRAGMA database_list}] 7
1612} {}
1613do_test auth-1.257 {
1614 proc auth {code arg1 arg2 arg3 arg4} {
1615 if {$code=="SQLITE_DETACH"} {
1616 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
1617 return SQLITE_OK
1618 }
1619 return SQLITE_OK
1620 }
1621 execsql {ATTACH DATABASE ':memory:' AS test1}
1622 catchsql {
1623 DETACH DATABASE test1;
1624 }
1625} {0 {}}
1626do_test auth-1.258 {
1627 lindex [execsql {PRAGMA database_list}] 7
1628} {}
1629do_test auth-1.259 {
1630 execsql {ATTACH DATABASE ':memory:' AS test1}
1631 proc auth {code arg1 arg2 arg3 arg4} {
1632 if {$code=="SQLITE_DETACH"} {
1633 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
1634 return SQLITE_IGNORE
1635 }
1636 return SQLITE_OK
1637 }
1638 catchsql {
1639 DETACH DATABASE test1;
1640 }
1641} {0 {}}
1642do_test auth-1.260 {
1643 lindex [execsql {PRAGMA database_list}] 7
1644} {test1}
1645do_test auth-1.261 {
1646 proc auth {code arg1 arg2 arg3 arg4} {
1647 if {$code=="SQLITE_DETACH"} {
1648 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
1649 return SQLITE_DENY
1650 }
1651 return SQLITE_OK
1652 }
1653 catchsql {
1654 DETACH DATABASE test1;
1655 }
1656} {1 {not authorized}}
1657do_test auth-1.262 {
1658 lindex [execsql {PRAGMA database_list}] 7
1659} {test1}
1660db authorizer {}
1661execsql {DETACH DATABASE test1}
1662
1663
drh2c3831c2003-01-14 13:48:20 +00001664do_test auth-2.1 {
drhe22a3342003-04-22 20:30:37 +00001665 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001666 if {$code=="SQLITE_READ" && $arg1=="t3" && $arg2=="x"} {
1667 return SQLITE_DENY
1668 }
1669 return SQLITE_OK
1670 }
drhe22a3342003-04-22 20:30:37 +00001671 db authorizer ::auth
drh2c3831c2003-01-14 13:48:20 +00001672 execsql {CREATE TABLE t3(x INTEGER PRIMARY KEY, y, z)}
1673 catchsql {SELECT * FROM t3}
1674} {1 {access to t3.x is prohibited}}
1675do_test auth-2.1 {
1676 catchsql {SELECT y,z FROM t3}
1677} {0 {}}
1678do_test auth-2.2 {
1679 catchsql {SELECT ROWID,y,z FROM t3}
1680} {1 {access to t3.x is prohibited}}
1681do_test auth-2.3 {
1682 catchsql {SELECT OID,y,z FROM t3}
1683} {1 {access to t3.x is prohibited}}
1684do_test auth-2.4 {
drhe22a3342003-04-22 20:30:37 +00001685 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001686 if {$code=="SQLITE_READ" && $arg1=="t3" && $arg2=="x"} {
1687 return SQLITE_IGNORE
1688 }
1689 return SQLITE_OK
1690 }
1691 execsql {INSERT INTO t3 VALUES(44,55,66)}
1692 catchsql {SELECT * FROM t3}
1693} {0 {{} 55 66}}
1694do_test auth-2.5 {
1695 catchsql {SELECT rowid,y,z FROM t3}
1696} {0 {{} 55 66}}
1697do_test auth-2.6 {
drhe22a3342003-04-22 20:30:37 +00001698 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001699 if {$code=="SQLITE_READ" && $arg1=="t3" && $arg2=="ROWID"} {
1700 return SQLITE_IGNORE
1701 }
1702 return SQLITE_OK
1703 }
1704 catchsql {SELECT * FROM t3}
1705} {0 {44 55 66}}
1706do_test auth-2.7 {
1707 catchsql {SELECT ROWID,y,z FROM t3}
1708} {0 {44 55 66}}
1709do_test auth-2.8 {
drhe22a3342003-04-22 20:30:37 +00001710 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001711 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="ROWID"} {
1712 return SQLITE_IGNORE
1713 }
1714 return SQLITE_OK
1715 }
1716 catchsql {SELECT ROWID,b,c FROM t2}
1717} {0 {{} 2 33 {} 8 9}}
drhdcd997e2003-01-31 17:21:49 +00001718do_test auth-2.9.1 {
drhe22a3342003-04-22 20:30:37 +00001719 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001720 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="ROWID"} {
1721 return bogus
1722 }
1723 return SQLITE_OK
1724 }
1725 catchsql {SELECT ROWID,b,c FROM t2}
1726} {1 {illegal return value (999) from the authorization function - should be SQLITE_OK, SQLITE_IGNORE, or SQLITE_DENY}}
drhdcd997e2003-01-31 17:21:49 +00001727do_test auth-2.9.2 {
1728 db errorcode
1729} {21}
drh2c3831c2003-01-14 13:48:20 +00001730do_test auth-2.10 {
drhe22a3342003-04-22 20:30:37 +00001731 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001732 if {$code=="SQLITE_SELECT"} {
1733 return bogus
1734 }
1735 return SQLITE_OK
1736 }
1737 catchsql {SELECT ROWID,b,c FROM t2}
1738} {1 {illegal return value (1) from the authorization function - should be SQLITE_OK, SQLITE_IGNORE, or SQLITE_DENY}}
drh6f8c91c2003-12-07 00:24:35 +00001739do_test auth-2.11.1 {
drhe22a3342003-04-22 20:30:37 +00001740 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001741 if {$code=="SQLITE_READ" && $arg2=="a"} {
1742 return SQLITE_IGNORE
1743 }
1744 return SQLITE_OK
1745 }
1746 catchsql {SELECT * FROM t2, t3}
1747} {0 {{} 2 33 44 55 66 {} 8 9 44 55 66}}
drh6f8c91c2003-12-07 00:24:35 +00001748do_test auth-2.11.2 {
drhe22a3342003-04-22 20:30:37 +00001749 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001750 if {$code=="SQLITE_READ" && $arg2=="x"} {
1751 return SQLITE_IGNORE
1752 }
1753 return SQLITE_OK
1754 }
1755 catchsql {SELECT * FROM t2, t3}
1756} {0 {11 2 33 {} 55 66 7 8 9 {} 55 66}}
drhe5f9c642003-01-13 23:27:31 +00001757
drh027850b2003-04-16 20:24:52 +00001758# Make sure the OLD and NEW pseudo-tables of a trigger get authorized.
1759#
1760do_test auth-3.1 {
drhe22a3342003-04-22 20:30:37 +00001761 proc auth {code arg1 arg2 arg3 arg4} {
drh027850b2003-04-16 20:24:52 +00001762 return SQLITE_OK
1763 }
1764 execsql {
1765 CREATE TABLE tx(a1,a2,b1,b2,c1,c2);
1766 CREATE TRIGGER r1 AFTER UPDATE ON t2 FOR EACH ROW BEGIN
1767 INSERT INTO tx VALUES(OLD.a,NEW.a,OLD.b,NEW.b,OLD.c,NEW.c);
1768 END;
1769 UPDATE t2 SET a=a+1;
1770 SELECT * FROM tx;
1771 }
1772} {11 12 2 2 33 33 7 8 8 8 9 9}
1773do_test auth-3.2 {
drhe22a3342003-04-22 20:30:37 +00001774 proc auth {code arg1 arg2 arg3 arg4} {
drh027850b2003-04-16 20:24:52 +00001775 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="c"} {
1776 return SQLITE_IGNORE
1777 }
1778 return SQLITE_OK
1779 }
1780 execsql {
1781 DELETE FROM tx;
1782 UPDATE t2 SET a=a+100;
1783 SELECT * FROM tx;
1784 }
1785} {12 112 2 2 {} {} 8 108 8 8 {} {}}
1786
drh85e20962003-04-25 17:52:11 +00001787# Make sure the names of views and triggers are passed on on arg4.
1788#
1789do_test auth-4.1 {
1790 proc auth {code arg1 arg2 arg3 arg4} {
1791 lappend ::authargs $code $arg1 $arg2 $arg3 $arg4
1792 return SQLITE_OK
1793 }
1794 set authargs {}
1795 execsql {
1796 UPDATE t2 SET a=a+1;
1797 }
1798 set authargs
1799} [list \
1800 SQLITE_READ t2 a main {} \
1801 SQLITE_UPDATE t2 a main {} \
1802 SQLITE_INSERT tx {} main r1 \
1803 SQLITE_READ t2 a main r1 \
1804 SQLITE_READ t2 a main r1 \
1805 SQLITE_READ t2 b main r1 \
1806 SQLITE_READ t2 b main r1 \
1807 SQLITE_READ t2 c main r1 \
1808 SQLITE_READ t2 c main r1]
1809do_test auth-4.2 {
1810 execsql {
1811 CREATE VIEW v1 AS SELECT a+b AS x FROM t2;
1812 CREATE TABLE v1chng(x1,x2);
1813 CREATE TRIGGER r2 INSTEAD OF UPDATE ON v1 BEGIN
1814 INSERT INTO v1chng VALUES(OLD.x,NEW.x);
1815 END;
1816 SELECT * FROM v1;
1817 }
1818} {115 117}
1819do_test auth-4.3 {
1820 set authargs {}
1821 execsql {
1822 UPDATE v1 SET x=1 WHERE x=117
1823 }
1824 set authargs
1825} [list \
1826 SQLITE_UPDATE v1 x main {} \
1827 SQLITE_READ v1 x main {} \
1828 SQLITE_SELECT {} {} {} v1 \
1829 SQLITE_READ t2 a main v1 \
1830 SQLITE_READ t2 b main v1 \
1831 SQLITE_INSERT v1chng {} main r2 \
1832 SQLITE_READ v1 x main r2 \
1833 SQLITE_READ v1 x main r2]
1834do_test auth-4.4 {
1835 execsql {
1836 CREATE TRIGGER r3 INSTEAD OF DELETE ON v1 BEGIN
1837 INSERT INTO v1chng VALUES(OLD.x,NULL);
1838 END;
1839 SELECT * FROM v1;
1840 }
1841} {115 117}
1842do_test auth-4.5 {
1843 set authargs {}
1844 execsql {
1845 DELETE FROM v1 WHERE x=117
1846 }
1847 set authargs
1848} [list \
1849 SQLITE_DELETE v1 {} main {} \
1850 SQLITE_READ v1 x main {} \
1851 SQLITE_SELECT {} {} {} v1 \
1852 SQLITE_READ t2 a main v1 \
1853 SQLITE_READ t2 b main v1 \
1854 SQLITE_INSERT v1chng {} main r3 \
1855 SQLITE_READ v1 x main r3]
drh1962bda2003-01-12 19:33:52 +00001856
1857finish_test