blob: 2b06b7e168aa9d2c00cabc031b918d1694080a30 [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#
danielk19772ac79702004-06-14 11:54:18 +000015# $Id: auth.test,v 1.14 2004/06/14 11:54:18 danielk1977 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.
drh1962bda2003-01-12 19:33:52 +000023
drhdcd997e2003-01-31 17:21:49 +000024do_test auth-1.1.1 {
drh1962bda2003-01-12 19:33:52 +000025 db close
26 set ::DB [sqlite db test.db]
drhe22a3342003-04-22 20:30:37 +000027 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +000028 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
drh1962bda2003-01-12 19:33:52 +000029 return SQLITE_DENY
30 }
31 return SQLITE_OK
32 }
drhe22a3342003-04-22 20:30:37 +000033 db authorizer ::auth
drh1962bda2003-01-12 19:33:52 +000034 catchsql {CREATE TABLE t1(a,b,c)}
drhe5f9c642003-01-13 23:27:31 +000035} {1 {not authorized}}
drhdcd997e2003-01-31 17:21:49 +000036do_test auth-1.1.2 {
37 db errorcode
38} {23}
drh1962bda2003-01-12 19:33:52 +000039do_test auth-1.2 {
drhe5f9c642003-01-13 23:27:31 +000040 execsql {SELECT name FROM sqlite_master}
41} {}
drh77ad4e42003-01-14 02:49:27 +000042do_test auth-1.3.1 {
drhe22a3342003-04-22 20:30:37 +000043 proc auth {code arg1 arg2 arg3 arg4} {
drhe5f9c642003-01-13 23:27:31 +000044 if {$code=="SQLITE_CREATE_TABLE"} {
drhe22a3342003-04-22 20:30:37 +000045 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drhe5f9c642003-01-13 23:27:31 +000046 return SQLITE_DENY
47 }
48 return SQLITE_OK
49 }
50 catchsql {CREATE TABLE t1(a,b,c)}
51} {1 {not authorized}}
drh77ad4e42003-01-14 02:49:27 +000052do_test auth-1.3.2 {
drhdcd997e2003-01-31 17:21:49 +000053 db errorcode
54} {23}
55do_test auth-1.3.3 {
drh77ad4e42003-01-14 02:49:27 +000056 set ::authargs
drhe22a3342003-04-22 20:30:37 +000057} {t1 {} main {}}
drhe5f9c642003-01-13 23:27:31 +000058do_test auth-1.4 {
59 execsql {SELECT name FROM sqlite_master}
60} {}
61
62do_test auth-1.5 {
drhe22a3342003-04-22 20:30:37 +000063 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +000064 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
drhe5f9c642003-01-13 23:27:31 +000065 return SQLITE_DENY
66 }
67 return SQLITE_OK
68 }
69 catchsql {CREATE TEMP TABLE t1(a,b,c)}
70} {1 {not authorized}}
71do_test auth-1.6 {
72 execsql {SELECT name FROM sqlite_temp_master}
73} {}
drh77ad4e42003-01-14 02:49:27 +000074do_test auth-1.7.1 {
drhe22a3342003-04-22 20:30:37 +000075 proc auth {code arg1 arg2 arg3 arg4} {
drhe5f9c642003-01-13 23:27:31 +000076 if {$code=="SQLITE_CREATE_TEMP_TABLE"} {
drhe22a3342003-04-22 20:30:37 +000077 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drhe5f9c642003-01-13 23:27:31 +000078 return SQLITE_DENY
79 }
80 return SQLITE_OK
81 }
82 catchsql {CREATE TEMP TABLE t1(a,b,c)}
83} {1 {not authorized}}
drh77ad4e42003-01-14 02:49:27 +000084do_test auth-1.7.2 {
85 set ::authargs
drhe22a3342003-04-22 20:30:37 +000086} {t1 {} temp {}}
drhe5f9c642003-01-13 23:27:31 +000087do_test auth-1.8 {
88 execsql {SELECT name FROM sqlite_temp_master}
89} {}
90
91do_test auth-1.9 {
drhe22a3342003-04-22 20:30:37 +000092 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +000093 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
drh1962bda2003-01-12 19:33:52 +000094 return SQLITE_IGNORE
95 }
96 return SQLITE_OK
97 }
98 catchsql {CREATE TABLE t1(a,b,c)}
drhe5f9c642003-01-13 23:27:31 +000099} {0 {}}
100do_test auth-1.10 {
101 execsql {SELECT name FROM sqlite_master}
102} {}
103do_test auth-1.11 {
drhe22a3342003-04-22 20:30:37 +0000104 proc auth {code arg1 arg2 arg3 arg4} {
drhe5f9c642003-01-13 23:27:31 +0000105 if {$code=="SQLITE_CREATE_TABLE"} {
drhe22a3342003-04-22 20:30:37 +0000106 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drhe5f9c642003-01-13 23:27:31 +0000107 return SQLITE_IGNORE
drh1962bda2003-01-12 19:33:52 +0000108 }
109 return SQLITE_OK
110 }
111 catchsql {CREATE TABLE t1(a,b,c)}
112} {0 {}}
drhe5f9c642003-01-13 23:27:31 +0000113do_test auth-1.12 {
drh1962bda2003-01-12 19:33:52 +0000114 execsql {SELECT name FROM sqlite_master}
drhe5f9c642003-01-13 23:27:31 +0000115} {}
116do_test auth-1.13 {
drhe22a3342003-04-22 20:30:37 +0000117 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000118 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
drhe5f9c642003-01-13 23:27:31 +0000119 return SQLITE_IGNORE
120 }
121 return SQLITE_OK
122 }
123 catchsql {CREATE TEMP TABLE t1(a,b,c)}
124} {0 {}}
125do_test auth-1.14 {
126 execsql {SELECT name FROM sqlite_temp_master}
127} {}
128do_test auth-1.15 {
drhe22a3342003-04-22 20:30:37 +0000129 proc auth {code arg1 arg2 arg3 arg4} {
drhe5f9c642003-01-13 23:27:31 +0000130 if {$code=="SQLITE_CREATE_TEMP_TABLE"} {
drhe22a3342003-04-22 20:30:37 +0000131 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drhe5f9c642003-01-13 23:27:31 +0000132 return SQLITE_IGNORE
133 }
134 return SQLITE_OK
135 }
136 catchsql {CREATE TEMP TABLE t1(a,b,c)}
137} {0 {}}
138do_test auth-1.16 {
139 execsql {SELECT name FROM sqlite_temp_master}
140} {}
141
142do_test auth-1.17 {
drhe22a3342003-04-22 20:30:37 +0000143 proc auth {code arg1 arg2 arg3 arg4} {
drhe5f9c642003-01-13 23:27:31 +0000144 if {$code=="SQLITE_CREATE_TABLE"} {
drhe22a3342003-04-22 20:30:37 +0000145 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000146 return SQLITE_DENY
drhe5f9c642003-01-13 23:27:31 +0000147 }
148 return SQLITE_OK
149 }
150 catchsql {CREATE TEMP TABLE t1(a,b,c)}
151} {0 {}}
152do_test auth-1.18 {
153 execsql {SELECT name FROM sqlite_temp_master}
154} {t1}
drh77ad4e42003-01-14 02:49:27 +0000155do_test auth-1.19.1 {
156 set ::authargs {}
drhe22a3342003-04-22 20:30:37 +0000157 proc auth {code arg1 arg2 arg3 arg4} {
drhe5f9c642003-01-13 23:27:31 +0000158 if {$code=="SQLITE_CREATE_TEMP_TABLE"} {
drhe22a3342003-04-22 20:30:37 +0000159 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000160 return SQLITE_DENY
drh1962bda2003-01-12 19:33:52 +0000161 }
162 return SQLITE_OK
163 }
164 catchsql {CREATE TABLE t2(a,b,c)}
drh1962bda2003-01-12 19:33:52 +0000165} {0 {}}
drh77ad4e42003-01-14 02:49:27 +0000166do_test auth-1.19.2 {
167 set ::authargs
168} {}
drh1962bda2003-01-12 19:33:52 +0000169do_test auth-1.20 {
drhe5f9c642003-01-13 23:27:31 +0000170 execsql {SELECT name FROM sqlite_master}
171} {t2}
drh1962bda2003-01-12 19:33:52 +0000172
drh77ad4e42003-01-14 02:49:27 +0000173do_test auth-1.21.1 {
drhe22a3342003-04-22 20:30:37 +0000174 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000175 if {$code=="SQLITE_DROP_TABLE"} {
drhe22a3342003-04-22 20:30:37 +0000176 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000177 return SQLITE_DENY
178 }
179 return SQLITE_OK
180 }
181 catchsql {DROP TABLE t2}
182} {1 {not authorized}}
183do_test auth-1.21.2 {
184 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000185} {t2 {} main {}}
drh77ad4e42003-01-14 02:49:27 +0000186do_test auth-1.22 {
187 execsql {SELECT name FROM sqlite_master}
188} {t2}
189do_test auth-1.23.1 {
drhe22a3342003-04-22 20:30:37 +0000190 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000191 if {$code=="SQLITE_DROP_TABLE"} {
drhe22a3342003-04-22 20:30:37 +0000192 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000193 return SQLITE_IGNORE
194 }
195 return SQLITE_OK
196 }
197 catchsql {DROP TABLE t2}
198} {0 {}}
199do_test auth-1.23.2 {
200 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000201} {t2 {} main {}}
drh77ad4e42003-01-14 02:49:27 +0000202do_test auth-1.24 {
203 execsql {SELECT name FROM sqlite_master}
204} {t2}
drhe5f9c642003-01-13 23:27:31 +0000205
drh77ad4e42003-01-14 02:49:27 +0000206do_test auth-1.25 {
drhe22a3342003-04-22 20:30:37 +0000207 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000208 if {$code=="SQLITE_DROP_TEMP_TABLE"} {
drhe22a3342003-04-22 20:30:37 +0000209 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000210 return SQLITE_DENY
211 }
212 return SQLITE_OK
213 }
214 catchsql {DROP TABLE t1}
215} {1 {not authorized}}
216do_test auth-1.26 {
217 execsql {SELECT name FROM sqlite_temp_master}
218} {t1}
219do_test auth-1.27 {
drhe22a3342003-04-22 20:30:37 +0000220 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000221 if {$code=="SQLITE_DROP_TEMP_TABLE"} {
drhe22a3342003-04-22 20:30:37 +0000222 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000223 return SQLITE_IGNORE
224 }
225 return SQLITE_OK
226 }
227 catchsql {DROP TABLE t1}
228} {0 {}}
229do_test auth-1.28 {
230 execsql {SELECT name FROM sqlite_temp_master}
231} {t1}
232
233do_test auth-1.29 {
drhe22a3342003-04-22 20:30:37 +0000234 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000235 if {$code=="SQLITE_INSERT" && $arg1=="t2"} {
236 return SQLITE_DENY
237 }
238 return SQLITE_OK
239 }
240 catchsql {INSERT INTO t2 VALUES(1,2,3)}
241} {1 {not authorized}}
242do_test auth-1.30 {
243 execsql {SELECT * FROM t2}
244} {}
245do_test auth-1.31 {
drhe22a3342003-04-22 20:30:37 +0000246 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000247 if {$code=="SQLITE_INSERT" && $arg1=="t2"} {
248 return SQLITE_IGNORE
249 }
250 return SQLITE_OK
251 }
252 catchsql {INSERT INTO t2 VALUES(1,2,3)}
253} {0 {}}
254do_test auth-1.32 {
255 execsql {SELECT * FROM t2}
256} {}
257do_test auth-1.33 {
drhe22a3342003-04-22 20:30:37 +0000258 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000259 if {$code=="SQLITE_INSERT" && $arg1=="t1"} {
260 return SQLITE_IGNORE
261 }
262 return SQLITE_OK
263 }
264 catchsql {INSERT INTO t2 VALUES(1,2,3)}
265} {0 {}}
266do_test auth-1.34 {
267 execsql {SELECT * FROM t2}
268} {1 2 3}
269
drh4925ca02003-11-27 00:48:57 +0000270do_test auth-1.35.1 {
drhe22a3342003-04-22 20:30:37 +0000271 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000272 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="b"} {
273 return SQLITE_DENY
274 }
275 return SQLITE_OK
276 }
277 catchsql {SELECT * FROM t2}
278} {1 {access to t2.b is prohibited}}
drh4925ca02003-11-27 00:48:57 +0000279do_test auth-1.35.2 {
280 execsql {ATTACH DATABASE 'test.db' AS two}
281 catchsql {SELECT * FROM two.t2}
282} {1 {access to two.t2.b is prohibited}}
283execsql {DETACH DATABASE two}
drh77ad4e42003-01-14 02:49:27 +0000284do_test auth-1.36 {
drhe22a3342003-04-22 20:30:37 +0000285 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000286 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="b"} {
287 return SQLITE_IGNORE
288 }
289 return SQLITE_OK
290 }
291 catchsql {SELECT * FROM t2}
292} {0 {1 {} 3}}
293do_test auth-1.37 {
drhe22a3342003-04-22 20:30:37 +0000294 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000295 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="b"} {
296 return SQLITE_IGNORE
297 }
298 return SQLITE_OK
299 }
300 catchsql {SELECT * FROM t2 WHERE b=2}
301} {0 {}}
302do_test auth-1.38 {
drhe22a3342003-04-22 20:30:37 +0000303 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000304 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="a"} {
305 return SQLITE_IGNORE
306 }
307 return SQLITE_OK
308 }
309 catchsql {SELECT * FROM t2 WHERE b=2}
310} {0 {{} 2 3}}
311do_test auth-1.39 {
drhe22a3342003-04-22 20:30:37 +0000312 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000313 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="b"} {
314 return SQLITE_IGNORE
315 }
316 return SQLITE_OK
317 }
318 catchsql {SELECT * FROM t2 WHERE b IS NULL}
319} {0 {1 {} 3}}
320do_test auth-1.40 {
drhe22a3342003-04-22 20:30:37 +0000321 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000322 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="b"} {
323 return SQLITE_DENY
324 }
325 return SQLITE_OK
326 }
327 catchsql {SELECT a,c FROM t2 WHERE b IS NULL}
328} {1 {access to t2.b is prohibited}}
329
330do_test auth-1.41 {
drhe22a3342003-04-22 20:30:37 +0000331 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000332 if {$code=="SQLITE_UPDATE" && $arg1=="t2" && $arg2=="b"} {
333 return SQLITE_DENY
334 }
335 return SQLITE_OK
336 }
337 catchsql {UPDATE t2 SET a=11}
338} {0 {}}
339do_test auth-1.42 {
340 execsql {SELECT * FROM t2}
341} {11 2 3}
342do_test auth-1.43 {
drhe22a3342003-04-22 20:30:37 +0000343 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000344 if {$code=="SQLITE_UPDATE" && $arg1=="t2" && $arg2=="b"} {
345 return SQLITE_DENY
346 }
347 return SQLITE_OK
348 }
349 catchsql {UPDATE t2 SET b=22, c=33}
350} {1 {not authorized}}
351do_test auth-1.44 {
352 execsql {SELECT * FROM t2}
353} {11 2 3}
354do_test auth-1.45 {
drhe22a3342003-04-22 20:30:37 +0000355 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000356 if {$code=="SQLITE_UPDATE" && $arg1=="t2" && $arg2=="b"} {
357 return SQLITE_IGNORE
358 }
359 return SQLITE_OK
360 }
361 catchsql {UPDATE t2 SET b=22, c=33}
362} {0 {}}
363do_test auth-1.46 {
364 execsql {SELECT * FROM t2}
365} {11 2 33}
366
367do_test auth-1.47 {
drhe22a3342003-04-22 20:30:37 +0000368 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000369 if {$code=="SQLITE_DELETE" && $arg1=="t2"} {
370 return SQLITE_DENY
371 }
372 return SQLITE_OK
373 }
374 catchsql {DELETE FROM t2 WHERE a=11}
375} {1 {not authorized}}
376do_test auth-1.48 {
377 execsql {SELECT * FROM t2}
378} {11 2 33}
379do_test auth-1.49 {
drhe22a3342003-04-22 20:30:37 +0000380 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000381 if {$code=="SQLITE_DELETE" && $arg1=="t2"} {
382 return SQLITE_IGNORE
383 }
384 return SQLITE_OK
385 }
386 catchsql {DELETE FROM t2 WHERE a=11}
387} {0 {}}
388do_test auth-1.50 {
389 execsql {SELECT * FROM t2}
390} {11 2 33}
391
392do_test auth-1.51 {
drhe22a3342003-04-22 20:30:37 +0000393 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000394 if {$code=="SQLITE_SELECT"} {
395 return SQLITE_DENY
396 }
397 return SQLITE_OK
398 }
399 catchsql {SELECT * FROM t2}
400} {1 {not authorized}}
401do_test auth-1.52 {
drhe22a3342003-04-22 20:30:37 +0000402 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000403 if {$code=="SQLITE_SELECT"} {
404 return SQLITE_IGNORE
405 }
406 return SQLITE_OK
407 }
408 catchsql {SELECT * FROM t2}
409} {0 {}}
410do_test auth-1.53 {
drhe22a3342003-04-22 20:30:37 +0000411 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000412 if {$code=="SQLITE_SELECT"} {
413 return SQLITE_OK
414 }
415 return SQLITE_OK
416 }
417 catchsql {SELECT * FROM t2}
418} {0 {11 2 33}}
419
danielk19772ac79702004-06-14 11:54:18 +0000420# Update for version 3: There used to be a handful of test here that
421# tested the authorisation callback with the COPY command. The following
422# test makes the same database modifications as they used to.
423do_test auth-1.54 {
424 execsql {INSERT INTO t2 VALUES(7, 8, 9);}
425} {}
426do_test auth-1.55 {
427 execsql {SELECT * FROM t2}
428} {11 2 33 7 8 9}
drh77ad4e42003-01-14 02:49:27 +0000429
430do_test auth-1.63 {
drhe22a3342003-04-22 20:30:37 +0000431 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000432 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
433 return SQLITE_DENY
434 }
435 return SQLITE_OK
436 }
437 catchsql {DROP TABLE t2}
438} {1 {not authorized}}
439do_test auth-1.64 {
440 execsql {SELECT name FROM sqlite_master}
441} {t2}
442do_test auth-1.65 {
drhe22a3342003-04-22 20:30:37 +0000443 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000444 if {$code=="SQLITE_DELETE" && $arg1=="t2"} {
445 return SQLITE_DENY
446 }
447 return SQLITE_OK
448 }
449 catchsql {DROP TABLE t2}
450} {1 {not authorized}}
451do_test auth-1.66 {
452 execsql {SELECT name FROM sqlite_master}
453} {t2}
454do_test auth-1.67 {
drhe22a3342003-04-22 20:30:37 +0000455 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000456 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
457 return SQLITE_DENY
458 }
459 return SQLITE_OK
460 }
461 catchsql {DROP TABLE t1}
462} {1 {not authorized}}
463do_test auth-1.68 {
464 execsql {SELECT name FROM sqlite_temp_master}
465} {t1}
466do_test auth-1.69 {
drhe22a3342003-04-22 20:30:37 +0000467 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000468 if {$code=="SQLITE_DELETE" && $arg1=="t1"} {
469 return SQLITE_DENY
470 }
471 return SQLITE_OK
472 }
473 catchsql {DROP TABLE t1}
474} {1 {not authorized}}
475do_test auth-1.70 {
476 execsql {SELECT name FROM sqlite_temp_master}
477} {t1}
478
479do_test auth-1.71 {
drhe22a3342003-04-22 20:30:37 +0000480 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000481 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
482 return SQLITE_IGNORE
483 }
484 return SQLITE_OK
485 }
486 catchsql {DROP TABLE t2}
487} {0 {}}
488do_test auth-1.72 {
489 execsql {SELECT name FROM sqlite_master}
490} {t2}
491do_test auth-1.73 {
drhe22a3342003-04-22 20:30:37 +0000492 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000493 if {$code=="SQLITE_DELETE" && $arg1=="t2"} {
494 return SQLITE_IGNORE
495 }
496 return SQLITE_OK
497 }
498 catchsql {DROP TABLE t2}
499} {0 {}}
500do_test auth-1.74 {
501 execsql {SELECT name FROM sqlite_master}
502} {t2}
503do_test auth-1.75 {
drhe22a3342003-04-22 20:30:37 +0000504 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000505 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
506 return SQLITE_IGNORE
507 }
508 return SQLITE_OK
509 }
510 catchsql {DROP TABLE t1}
511} {0 {}}
512do_test auth-1.76 {
513 execsql {SELECT name FROM sqlite_temp_master}
514} {t1}
515do_test auth-1.77 {
drhe22a3342003-04-22 20:30:37 +0000516 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000517 if {$code=="SQLITE_DELETE" && $arg1=="t1"} {
518 return SQLITE_IGNORE
519 }
520 return SQLITE_OK
521 }
522 catchsql {DROP TABLE t1}
523} {0 {}}
524do_test auth-1.78 {
525 execsql {SELECT name FROM sqlite_temp_master}
526} {t1}
527
528do_test auth-1.79 {
drhe22a3342003-04-22 20:30:37 +0000529 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000530 if {$code=="SQLITE_CREATE_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000531 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000532 return SQLITE_DENY
533 }
534 return SQLITE_OK
535 }
536 catchsql {CREATE VIEW v1 AS SELECT a+1,b+1 FROM t2}
537} {1 {not authorized}}
538do_test auth-1.80 {
539 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000540} {v1 {} main {}}
drh77ad4e42003-01-14 02:49:27 +0000541do_test auth-1.81 {
542 execsql {SELECT name FROM sqlite_master}
543} {t2}
544do_test auth-1.82 {
drhe22a3342003-04-22 20:30:37 +0000545 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000546 if {$code=="SQLITE_CREATE_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000547 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000548 return SQLITE_IGNORE
549 }
550 return SQLITE_OK
551 }
552 catchsql {CREATE VIEW v1 AS SELECT a+1,b+1 FROM t2}
553} {0 {}}
554do_test auth-1.83 {
555 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000556} {v1 {} main {}}
drh77ad4e42003-01-14 02:49:27 +0000557do_test auth-1.84 {
558 execsql {SELECT name FROM sqlite_master}
559} {t2}
560
561do_test auth-1.85 {
drhe22a3342003-04-22 20:30:37 +0000562 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000563 if {$code=="SQLITE_CREATE_TEMP_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000564 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000565 return SQLITE_DENY
566 }
567 return SQLITE_OK
568 }
569 catchsql {CREATE TEMPORARY VIEW v1 AS SELECT a+1,b+1 FROM t2}
570} {1 {not authorized}}
571do_test auth-1.86 {
572 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000573} {v1 {} temp {}}
drh77ad4e42003-01-14 02:49:27 +0000574do_test auth-1.87 {
575 execsql {SELECT name FROM sqlite_temp_master}
576} {t1}
577do_test auth-1.88 {
drhe22a3342003-04-22 20:30:37 +0000578 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000579 if {$code=="SQLITE_CREATE_TEMP_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000580 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000581 return SQLITE_IGNORE
582 }
583 return SQLITE_OK
584 }
585 catchsql {CREATE TEMPORARY VIEW v1 AS SELECT a+1,b+1 FROM t2}
586} {0 {}}
587do_test auth-1.89 {
588 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000589} {v1 {} temp {}}
drh77ad4e42003-01-14 02:49:27 +0000590do_test auth-1.90 {
591 execsql {SELECT name FROM sqlite_temp_master}
592} {t1}
593
594do_test auth-1.91 {
drhe22a3342003-04-22 20:30:37 +0000595 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000596 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
597 return SQLITE_DENY
598 }
599 return SQLITE_OK
600 }
601 catchsql {CREATE VIEW v1 AS SELECT a+1,b+1 FROM t2}
602} {1 {not authorized}}
603do_test auth-1.92 {
604 execsql {SELECT name FROM sqlite_master}
605} {t2}
606do_test auth-1.93 {
drhe22a3342003-04-22 20:30:37 +0000607 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000608 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
609 return SQLITE_IGNORE
610 }
611 return SQLITE_OK
612 }
613 catchsql {CREATE VIEW v1 AS SELECT a+1,b+1 FROM t2}
614} {0 {}}
615do_test auth-1.94 {
616 execsql {SELECT name FROM sqlite_master}
617} {t2}
618
619do_test auth-1.95 {
drhe22a3342003-04-22 20:30:37 +0000620 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000621 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
622 return SQLITE_DENY
623 }
624 return SQLITE_OK
625 }
626 catchsql {CREATE TEMPORARY VIEW v1 AS SELECT a+1,b+1 FROM t2}
627} {1 {not authorized}}
628do_test auth-1.96 {
629 execsql {SELECT name FROM sqlite_temp_master}
630} {t1}
631do_test auth-1.97 {
drhe22a3342003-04-22 20:30:37 +0000632 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000633 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
634 return SQLITE_IGNORE
635 }
636 return SQLITE_OK
637 }
638 catchsql {CREATE TEMPORARY VIEW v1 AS SELECT a+1,b+1 FROM t2}
639} {0 {}}
640do_test auth-1.98 {
641 execsql {SELECT name FROM sqlite_temp_master}
642} {t1}
643
644do_test auth-1.99 {
drhe22a3342003-04-22 20:30:37 +0000645 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000646 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
647 return SQLITE_DENY
648 }
649 return SQLITE_OK
650 }
651 catchsql {
652 CREATE VIEW v2 AS SELECT a+1,b+1 FROM t2;
653 DROP VIEW v2
654 }
655} {1 {not authorized}}
656do_test auth-1.100 {
657 execsql {SELECT name FROM sqlite_master}
658} {t2 v2}
659do_test auth-1.101 {
drhe22a3342003-04-22 20:30:37 +0000660 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000661 if {$code=="SQLITE_DROP_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000662 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000663 return SQLITE_DENY
664 }
665 return SQLITE_OK
666 }
667 catchsql {DROP VIEW v2}
668} {1 {not authorized}}
669do_test auth-1.102 {
670 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000671} {v2 {} main {}}
drh77ad4e42003-01-14 02:49:27 +0000672do_test auth-1.103 {
673 execsql {SELECT name FROM sqlite_master}
674} {t2 v2}
675do_test auth-1.104 {
drhe22a3342003-04-22 20:30:37 +0000676 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000677 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
678 return SQLITE_IGNORE
679 }
680 return SQLITE_OK
681 }
682 catchsql {DROP VIEW v2}
683} {0 {}}
684do_test auth-1.105 {
685 execsql {SELECT name FROM sqlite_master}
686} {t2 v2}
687do_test auth-1.106 {
drhe22a3342003-04-22 20:30:37 +0000688 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000689 if {$code=="SQLITE_DROP_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000690 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000691 return SQLITE_IGNORE
692 }
693 return SQLITE_OK
694 }
695 catchsql {DROP VIEW v2}
696} {0 {}}
697do_test auth-1.107 {
698 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000699} {v2 {} main {}}
drh77ad4e42003-01-14 02:49:27 +0000700do_test auth-1.108 {
701 execsql {SELECT name FROM sqlite_master}
702} {t2 v2}
703do_test auth-1.109 {
drhe22a3342003-04-22 20:30:37 +0000704 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000705 if {$code=="SQLITE_DROP_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000706 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000707 return SQLITE_OK
708 }
709 return SQLITE_OK
710 }
711 catchsql {DROP VIEW v2}
712} {0 {}}
713do_test auth-1.110 {
714 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000715} {v2 {} main {}}
drh77ad4e42003-01-14 02:49:27 +0000716do_test auth-1.111 {
717 execsql {SELECT name FROM sqlite_master}
718} {t2}
719
720
721do_test auth-1.112 {
drhe22a3342003-04-22 20:30:37 +0000722 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000723 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
724 return SQLITE_DENY
725 }
726 return SQLITE_OK
727 }
728 catchsql {
729 CREATE TEMP VIEW v1 AS SELECT a+1,b+1 FROM t1;
730 DROP VIEW v1
731 }
732} {1 {not authorized}}
733do_test auth-1.113 {
734 execsql {SELECT name FROM sqlite_temp_master}
735} {t1 v1}
736do_test auth-1.114 {
drhe22a3342003-04-22 20:30:37 +0000737 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000738 if {$code=="SQLITE_DROP_TEMP_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000739 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000740 return SQLITE_DENY
741 }
742 return SQLITE_OK
743 }
744 catchsql {DROP VIEW v1}
745} {1 {not authorized}}
746do_test auth-1.115 {
747 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000748} {v1 {} temp {}}
drh77ad4e42003-01-14 02:49:27 +0000749do_test auth-1.116 {
750 execsql {SELECT name FROM sqlite_temp_master}
751} {t1 v1}
752do_test auth-1.117 {
drhe22a3342003-04-22 20:30:37 +0000753 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000754 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
755 return SQLITE_IGNORE
756 }
757 return SQLITE_OK
758 }
759 catchsql {DROP VIEW v1}
760} {0 {}}
761do_test auth-1.118 {
762 execsql {SELECT name FROM sqlite_temp_master}
763} {t1 v1}
764do_test auth-1.119 {
drhe22a3342003-04-22 20:30:37 +0000765 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000766 if {$code=="SQLITE_DROP_TEMP_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000767 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000768 return SQLITE_IGNORE
769 }
770 return SQLITE_OK
771 }
772 catchsql {DROP VIEW v1}
773} {0 {}}
774do_test auth-1.120 {
775 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000776} {v1 {} temp {}}
drh77ad4e42003-01-14 02:49:27 +0000777do_test auth-1.121 {
778 execsql {SELECT name FROM sqlite_temp_master}
779} {t1 v1}
780do_test auth-1.122 {
drhe22a3342003-04-22 20:30:37 +0000781 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000782 if {$code=="SQLITE_DROP_TEMP_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000783 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000784 return SQLITE_OK
785 }
786 return SQLITE_OK
787 }
788 catchsql {DROP VIEW v1}
789} {0 {}}
790do_test auth-1.123 {
791 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000792} {v1 {} temp {}}
drh77ad4e42003-01-14 02:49:27 +0000793do_test auth-1.124 {
794 execsql {SELECT name FROM sqlite_temp_master}
795} {t1}
796
797do_test auth-1.125 {
drhe22a3342003-04-22 20:30:37 +0000798 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000799 if {$code=="SQLITE_CREATE_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +0000800 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000801 return SQLITE_DENY
802 }
803 return SQLITE_OK
804 }
805 catchsql {
806 CREATE TRIGGER r2 DELETE on t2 BEGIN
807 SELECT NULL;
808 END;
809 }
810} {1 {not authorized}}
811do_test auth-1.126 {
812 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000813} {r2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +0000814do_test auth-1.127 {
815 execsql {SELECT name FROM sqlite_master}
816} {t2}
817do_test auth-1.128 {
drhe22a3342003-04-22 20:30:37 +0000818 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000819 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
820 return SQLITE_DENY
821 }
822 return SQLITE_OK
823 }
824 catchsql {
825 CREATE TRIGGER r2 DELETE on t2 BEGIN
826 SELECT NULL;
827 END;
828 }
829} {1 {not authorized}}
830do_test auth-1.129 {
831 execsql {SELECT name FROM sqlite_master}
832} {t2}
833do_test auth-1.130 {
drhe22a3342003-04-22 20:30:37 +0000834 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000835 if {$code=="SQLITE_CREATE_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +0000836 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000837 return SQLITE_IGNORE
838 }
839 return SQLITE_OK
840 }
841 catchsql {
842 CREATE TRIGGER r2 DELETE on t2 BEGIN
843 SELECT NULL;
844 END;
845 }
846} {0 {}}
847do_test auth-1.131 {
848 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000849} {r2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +0000850do_test auth-1.132 {
851 execsql {SELECT name FROM sqlite_master}
852} {t2}
853do_test auth-1.133 {
drhe22a3342003-04-22 20:30:37 +0000854 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000855 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
856 return SQLITE_IGNORE
857 }
858 return SQLITE_OK
859 }
860 catchsql {
861 CREATE TRIGGER r2 DELETE on t2 BEGIN
862 SELECT NULL;
863 END;
864 }
865} {0 {}}
866do_test auth-1.134 {
867 execsql {SELECT name FROM sqlite_master}
868} {t2}
869do_test auth-1.135 {
drhe22a3342003-04-22 20:30:37 +0000870 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000871 if {$code=="SQLITE_CREATE_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +0000872 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000873 return SQLITE_OK
874 }
875 return SQLITE_OK
876 }
877 catchsql {
drhe22a3342003-04-22 20:30:37 +0000878 CREATE TABLE tx(id);
879 CREATE TRIGGER r2 AFTER INSERT ON t2 BEGIN
880 INSERT INTO tx VALUES(NEW.rowid);
drh77ad4e42003-01-14 02:49:27 +0000881 END;
882 }
883} {0 {}}
drhe22a3342003-04-22 20:30:37 +0000884do_test auth-1.136.1 {
drh77ad4e42003-01-14 02:49:27 +0000885 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000886} {r2 t2 main {}}
887do_test auth-1.136.2 {
888 execsql {
889 SELECT name FROM sqlite_master WHERE type='trigger'
890 }
891} {r2}
892do_test auth-1.136.3 {
893 proc auth {code arg1 arg2 arg3 arg4} {
894 lappend ::authargs $code $arg1 $arg2 $arg3 $arg4
895 return SQLITE_OK
896 }
897 set ::authargs {}
898 execsql {
899 INSERT INTO t2 VALUES(1,2,3);
900 }
901 set ::authargs
902} {SQLITE_INSERT t2 {} main {} SQLITE_INSERT tx {} main r2 SQLITE_READ t2 ROWID main r2}
903do_test auth-1.136.4 {
904 execsql {
905 SELECT * FROM tx;
906 }
907} {3}
drh77ad4e42003-01-14 02:49:27 +0000908do_test auth-1.137 {
909 execsql {SELECT name FROM sqlite_master}
drhe22a3342003-04-22 20:30:37 +0000910} {t2 tx r2}
drh77ad4e42003-01-14 02:49:27 +0000911do_test auth-1.138 {
drhe22a3342003-04-22 20:30:37 +0000912 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000913 if {$code=="SQLITE_CREATE_TEMP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +0000914 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000915 return SQLITE_DENY
916 }
917 return SQLITE_OK
918 }
919 catchsql {
920 CREATE TRIGGER r1 DELETE on t1 BEGIN
921 SELECT NULL;
922 END;
923 }
924} {1 {not authorized}}
925do_test auth-1.139 {
926 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000927} {r1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +0000928do_test auth-1.140 {
929 execsql {SELECT name FROM sqlite_temp_master}
930} {t1}
931do_test auth-1.141 {
drhe22a3342003-04-22 20:30:37 +0000932 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000933 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
934 return SQLITE_DENY
935 }
936 return SQLITE_OK
937 }
938 catchsql {
939 CREATE TRIGGER r1 DELETE on t1 BEGIN
940 SELECT NULL;
941 END;
942 }
943} {1 {not authorized}}
944do_test auth-1.142 {
945 execsql {SELECT name FROM sqlite_temp_master}
946} {t1}
947do_test auth-1.143 {
drhe22a3342003-04-22 20:30:37 +0000948 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000949 if {$code=="SQLITE_CREATE_TEMP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +0000950 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000951 return SQLITE_IGNORE
952 }
953 return SQLITE_OK
954 }
955 catchsql {
956 CREATE TRIGGER r1 DELETE on t1 BEGIN
957 SELECT NULL;
958 END;
959 }
960} {0 {}}
961do_test auth-1.144 {
962 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000963} {r1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +0000964do_test auth-1.145 {
965 execsql {SELECT name FROM sqlite_temp_master}
966} {t1}
967do_test auth-1.146 {
drhe22a3342003-04-22 20:30:37 +0000968 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000969 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
970 return SQLITE_IGNORE
971 }
972 return SQLITE_OK
973 }
974 catchsql {
975 CREATE TRIGGER r1 DELETE on t1 BEGIN
976 SELECT NULL;
977 END;
978 }
979} {0 {}}
980do_test auth-1.147 {
981 execsql {SELECT name FROM sqlite_temp_master}
982} {t1}
983do_test auth-1.148 {
drhe22a3342003-04-22 20:30:37 +0000984 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000985 if {$code=="SQLITE_CREATE_TEMP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +0000986 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000987 return SQLITE_OK
988 }
989 return SQLITE_OK
990 }
991 catchsql {
992 CREATE TRIGGER r1 DELETE on t1 BEGIN
993 SELECT NULL;
994 END;
995 }
996} {0 {}}
997do_test auth-1.149 {
998 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000999} {r1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001000do_test auth-1.150 {
1001 execsql {SELECT name FROM sqlite_temp_master}
1002} {t1 r1}
1003
1004do_test auth-1.151 {
drhe22a3342003-04-22 20:30:37 +00001005 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001006 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
1007 return SQLITE_DENY
1008 }
1009 return SQLITE_OK
1010 }
1011 catchsql {DROP TRIGGER r2}
1012} {1 {not authorized}}
1013do_test auth-1.152 {
1014 execsql {SELECT name FROM sqlite_master}
drhe22a3342003-04-22 20:30:37 +00001015} {t2 tx r2}
drh77ad4e42003-01-14 02:49:27 +00001016do_test auth-1.153 {
drhe22a3342003-04-22 20:30:37 +00001017 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001018 if {$code=="SQLITE_DROP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +00001019 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001020 return SQLITE_DENY
1021 }
1022 return SQLITE_OK
1023 }
1024 catchsql {DROP TRIGGER r2}
1025} {1 {not authorized}}
1026do_test auth-1.154 {
1027 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001028} {r2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001029do_test auth-1.155 {
1030 execsql {SELECT name FROM sqlite_master}
drhe22a3342003-04-22 20:30:37 +00001031} {t2 tx r2}
drh77ad4e42003-01-14 02:49:27 +00001032do_test auth-1.156 {
drhe22a3342003-04-22 20:30:37 +00001033 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001034 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
1035 return SQLITE_IGNORE
1036 }
1037 return SQLITE_OK
1038 }
1039 catchsql {DROP TRIGGER r2}
1040} {0 {}}
1041do_test auth-1.157 {
1042 execsql {SELECT name FROM sqlite_master}
drhe22a3342003-04-22 20:30:37 +00001043} {t2 tx r2}
drh77ad4e42003-01-14 02:49:27 +00001044do_test auth-1.158 {
drhe22a3342003-04-22 20:30:37 +00001045 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001046 if {$code=="SQLITE_DROP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +00001047 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001048 return SQLITE_IGNORE
1049 }
1050 return SQLITE_OK
1051 }
1052 catchsql {DROP TRIGGER r2}
1053} {0 {}}
1054do_test auth-1.159 {
1055 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001056} {r2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001057do_test auth-1.160 {
1058 execsql {SELECT name FROM sqlite_master}
drhe22a3342003-04-22 20:30:37 +00001059} {t2 tx r2}
drh77ad4e42003-01-14 02:49:27 +00001060do_test auth-1.161 {
drhe22a3342003-04-22 20:30:37 +00001061 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001062 if {$code=="SQLITE_DROP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +00001063 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001064 return SQLITE_OK
1065 }
1066 return SQLITE_OK
1067 }
1068 catchsql {DROP TRIGGER r2}
1069} {0 {}}
1070do_test auth-1.162 {
1071 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001072} {r2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001073do_test auth-1.163 {
drhe22a3342003-04-22 20:30:37 +00001074 execsql {
1075 DROP TABLE tx;
1076 DELETE FROM t2 WHERE a=1 AND b=2 AND c=3;
1077 SELECT name FROM sqlite_master;
1078 }
drh77ad4e42003-01-14 02:49:27 +00001079} {t2}
1080
1081do_test auth-1.164 {
drhe22a3342003-04-22 20:30:37 +00001082 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001083 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
1084 return SQLITE_DENY
1085 }
1086 return SQLITE_OK
1087 }
1088 catchsql {DROP TRIGGER r1}
1089} {1 {not authorized}}
1090do_test auth-1.165 {
1091 execsql {SELECT name FROM sqlite_temp_master}
1092} {t1 r1}
1093do_test auth-1.166 {
drhe22a3342003-04-22 20:30:37 +00001094 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001095 if {$code=="SQLITE_DROP_TEMP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +00001096 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001097 return SQLITE_DENY
1098 }
1099 return SQLITE_OK
1100 }
1101 catchsql {DROP TRIGGER r1}
1102} {1 {not authorized}}
1103do_test auth-1.167 {
1104 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001105} {r1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001106do_test auth-1.168 {
1107 execsql {SELECT name FROM sqlite_temp_master}
1108} {t1 r1}
1109do_test auth-1.169 {
drhe22a3342003-04-22 20:30:37 +00001110 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001111 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
1112 return SQLITE_IGNORE
1113 }
1114 return SQLITE_OK
1115 }
1116 catchsql {DROP TRIGGER r1}
1117} {0 {}}
1118do_test auth-1.170 {
1119 execsql {SELECT name FROM sqlite_temp_master}
1120} {t1 r1}
1121do_test auth-1.171 {
drhe22a3342003-04-22 20:30:37 +00001122 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001123 if {$code=="SQLITE_DROP_TEMP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +00001124 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001125 return SQLITE_IGNORE
1126 }
1127 return SQLITE_OK
1128 }
1129 catchsql {DROP TRIGGER r1}
1130} {0 {}}
1131do_test auth-1.172 {
1132 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001133} {r1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001134do_test auth-1.173 {
1135 execsql {SELECT name FROM sqlite_temp_master}
1136} {t1 r1}
1137do_test auth-1.174 {
drhe22a3342003-04-22 20:30:37 +00001138 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001139 if {$code=="SQLITE_DROP_TEMP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +00001140 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001141 return SQLITE_OK
1142 }
1143 return SQLITE_OK
1144 }
1145 catchsql {DROP TRIGGER r1}
1146} {0 {}}
1147do_test auth-1.175 {
1148 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001149} {r1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001150do_test auth-1.176 {
1151 execsql {SELECT name FROM sqlite_temp_master}
1152} {t1}
1153
1154do_test auth-1.177 {
drhe22a3342003-04-22 20:30:37 +00001155 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001156 if {$code=="SQLITE_CREATE_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001157 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001158 return SQLITE_DENY
1159 }
1160 return SQLITE_OK
1161 }
1162 catchsql {CREATE INDEX i2 ON t2(a)}
1163} {1 {not authorized}}
1164do_test auth-1.178 {
1165 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001166} {i2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001167do_test auth-1.179 {
1168 execsql {SELECT name FROM sqlite_master}
1169} {t2}
1170do_test auth-1.180 {
drhe22a3342003-04-22 20:30:37 +00001171 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001172 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
1173 return SQLITE_DENY
1174 }
1175 return SQLITE_OK
1176 }
1177 catchsql {CREATE INDEX i2 ON t2(a)}
1178} {1 {not authorized}}
1179do_test auth-1.181 {
1180 execsql {SELECT name FROM sqlite_master}
1181} {t2}
1182do_test auth-1.182 {
drhe22a3342003-04-22 20:30:37 +00001183 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001184 if {$code=="SQLITE_CREATE_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001185 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001186 return SQLITE_IGNORE
1187 }
1188 return SQLITE_OK
1189 }
1190 catchsql {CREATE INDEX i2 ON t2(b)}
1191} {0 {}}
1192do_test auth-1.183 {
1193 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001194} {i2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001195do_test auth-1.184 {
1196 execsql {SELECT name FROM sqlite_master}
1197} {t2}
1198do_test auth-1.185 {
drhe22a3342003-04-22 20:30:37 +00001199 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001200 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
1201 return SQLITE_IGNORE
1202 }
1203 return SQLITE_OK
1204 }
1205 catchsql {CREATE INDEX i2 ON t2(b)}
1206} {0 {}}
1207do_test auth-1.186 {
1208 execsql {SELECT name FROM sqlite_master}
1209} {t2}
1210do_test auth-1.187 {
drhe22a3342003-04-22 20:30:37 +00001211 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001212 if {$code=="SQLITE_CREATE_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001213 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001214 return SQLITE_OK
1215 }
1216 return SQLITE_OK
1217 }
1218 catchsql {CREATE INDEX i2 ON t2(a)}
1219} {0 {}}
1220do_test auth-1.188 {
1221 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001222} {i2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001223do_test auth-1.189 {
1224 execsql {SELECT name FROM sqlite_master}
1225} {t2 i2}
1226
1227do_test auth-1.190 {
drhe22a3342003-04-22 20:30:37 +00001228 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001229 if {$code=="SQLITE_CREATE_TEMP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001230 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001231 return SQLITE_DENY
1232 }
1233 return SQLITE_OK
1234 }
1235 catchsql {CREATE INDEX i1 ON t1(a)}
1236} {1 {not authorized}}
1237do_test auth-1.191 {
1238 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001239} {i1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001240do_test auth-1.192 {
1241 execsql {SELECT name FROM sqlite_temp_master}
1242} {t1}
1243do_test auth-1.193 {
drhe22a3342003-04-22 20:30:37 +00001244 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001245 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
1246 return SQLITE_DENY
1247 }
1248 return SQLITE_OK
1249 }
1250 catchsql {CREATE INDEX i1 ON t1(b)}
1251} {1 {not authorized}}
1252do_test auth-1.194 {
1253 execsql {SELECT name FROM sqlite_temp_master}
1254} {t1}
1255do_test auth-1.195 {
drhe22a3342003-04-22 20:30:37 +00001256 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001257 if {$code=="SQLITE_CREATE_TEMP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001258 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001259 return SQLITE_IGNORE
1260 }
1261 return SQLITE_OK
1262 }
1263 catchsql {CREATE INDEX i1 ON t1(b)}
1264} {0 {}}
1265do_test auth-1.196 {
1266 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001267} {i1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001268do_test auth-1.197 {
1269 execsql {SELECT name FROM sqlite_temp_master}
1270} {t1}
1271do_test auth-1.198 {
drhe22a3342003-04-22 20:30:37 +00001272 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001273 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
1274 return SQLITE_IGNORE
1275 }
1276 return SQLITE_OK
1277 }
1278 catchsql {CREATE INDEX i1 ON t1(c)}
1279} {0 {}}
1280do_test auth-1.199 {
1281 execsql {SELECT name FROM sqlite_temp_master}
1282} {t1}
1283do_test auth-1.200 {
drhe22a3342003-04-22 20:30:37 +00001284 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001285 if {$code=="SQLITE_CREATE_TEMP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001286 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001287 return SQLITE_OK
1288 }
1289 return SQLITE_OK
1290 }
1291 catchsql {CREATE INDEX i1 ON t1(a)}
1292} {0 {}}
1293do_test auth-1.201 {
1294 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001295} {i1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001296do_test auth-1.202 {
1297 execsql {SELECT name FROM sqlite_temp_master}
1298} {t1 i1}
1299
1300do_test auth-1.203 {
drhe22a3342003-04-22 20:30:37 +00001301 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001302 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
1303 return SQLITE_DENY
1304 }
1305 return SQLITE_OK
1306 }
1307 catchsql {DROP INDEX i2}
1308} {1 {not authorized}}
1309do_test auth-1.204 {
1310 execsql {SELECT name FROM sqlite_master}
1311} {t2 i2}
1312do_test auth-1.205 {
drhe22a3342003-04-22 20:30:37 +00001313 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001314 if {$code=="SQLITE_DROP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001315 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001316 return SQLITE_DENY
1317 }
1318 return SQLITE_OK
1319 }
1320 catchsql {DROP INDEX i2}
1321} {1 {not authorized}}
1322do_test auth-1.206 {
1323 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001324} {i2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001325do_test auth-1.207 {
1326 execsql {SELECT name FROM sqlite_master}
1327} {t2 i2}
1328do_test auth-1.208 {
drhe22a3342003-04-22 20:30:37 +00001329 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001330 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
1331 return SQLITE_IGNORE
1332 }
1333 return SQLITE_OK
1334 }
1335 catchsql {DROP INDEX i2}
1336} {0 {}}
1337do_test auth-1.209 {
1338 execsql {SELECT name FROM sqlite_master}
1339} {t2 i2}
1340do_test auth-1.210 {
drhe22a3342003-04-22 20:30:37 +00001341 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001342 if {$code=="SQLITE_DROP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001343 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001344 return SQLITE_IGNORE
1345 }
1346 return SQLITE_OK
1347 }
1348 catchsql {DROP INDEX i2}
1349} {0 {}}
1350do_test auth-1.211 {
1351 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001352} {i2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001353do_test auth-1.212 {
1354 execsql {SELECT name FROM sqlite_master}
1355} {t2 i2}
1356do_test auth-1.213 {
drhe22a3342003-04-22 20:30:37 +00001357 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001358 if {$code=="SQLITE_DROP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001359 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001360 return SQLITE_OK
1361 }
1362 return SQLITE_OK
1363 }
1364 catchsql {DROP INDEX i2}
1365} {0 {}}
1366do_test auth-1.214 {
1367 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001368} {i2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001369do_test auth-1.215 {
1370 execsql {SELECT name FROM sqlite_master}
1371} {t2}
1372
1373do_test auth-1.216 {
drhe22a3342003-04-22 20:30:37 +00001374 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001375 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
1376 return SQLITE_DENY
1377 }
1378 return SQLITE_OK
1379 }
1380 catchsql {DROP INDEX i1}
1381} {1 {not authorized}}
1382do_test auth-1.217 {
1383 execsql {SELECT name FROM sqlite_temp_master}
1384} {t1 i1}
1385do_test auth-1.218 {
drhe22a3342003-04-22 20:30:37 +00001386 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001387 if {$code=="SQLITE_DROP_TEMP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001388 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001389 return SQLITE_DENY
1390 }
1391 return SQLITE_OK
1392 }
1393 catchsql {DROP INDEX i1}
1394} {1 {not authorized}}
1395do_test auth-1.219 {
1396 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001397} {i1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001398do_test auth-1.220 {
1399 execsql {SELECT name FROM sqlite_temp_master}
1400} {t1 i1}
1401do_test auth-1.221 {
drhe22a3342003-04-22 20:30:37 +00001402 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001403 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
1404 return SQLITE_IGNORE
1405 }
1406 return SQLITE_OK
1407 }
1408 catchsql {DROP INDEX i1}
1409} {0 {}}
1410do_test auth-1.222 {
1411 execsql {SELECT name FROM sqlite_temp_master}
1412} {t1 i1}
1413do_test auth-1.223 {
drhe22a3342003-04-22 20:30:37 +00001414 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001415 if {$code=="SQLITE_DROP_TEMP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001416 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001417 return SQLITE_IGNORE
1418 }
1419 return SQLITE_OK
1420 }
1421 catchsql {DROP INDEX i1}
1422} {0 {}}
1423do_test auth-1.224 {
1424 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001425} {i1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001426do_test auth-1.225 {
1427 execsql {SELECT name FROM sqlite_temp_master}
1428} {t1 i1}
1429do_test auth-1.226 {
drhe22a3342003-04-22 20:30:37 +00001430 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001431 if {$code=="SQLITE_DROP_TEMP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001432 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001433 return SQLITE_OK
1434 }
1435 return SQLITE_OK
1436 }
1437 catchsql {DROP INDEX i1}
1438} {0 {}}
1439do_test auth-1.227 {
1440 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001441} {i1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001442do_test auth-1.228 {
1443 execsql {SELECT name FROM sqlite_temp_master}
1444} {t1}
1445
1446do_test auth-1.229 {
drhe22a3342003-04-22 20:30:37 +00001447 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001448 if {$code=="SQLITE_PRAGMA"} {
drhe22a3342003-04-22 20:30:37 +00001449 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001450 return SQLITE_DENY
1451 }
1452 return SQLITE_OK
1453 }
1454 catchsql {PRAGMA full_column_names=on}
1455} {1 {not authorized}}
1456do_test auth-1.230 {
1457 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001458} {full_column_names on {} {}}
drh77ad4e42003-01-14 02:49:27 +00001459do_test auth-1.231 {
1460 execsql2 {SELECT a FROM t2}
1461} {a 11 a 7}
1462do_test auth-1.232 {
drhe22a3342003-04-22 20:30:37 +00001463 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001464 if {$code=="SQLITE_PRAGMA"} {
drhe22a3342003-04-22 20:30:37 +00001465 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001466 return SQLITE_IGNORE
1467 }
1468 return SQLITE_OK
1469 }
1470 catchsql {PRAGMA full_column_names=on}
1471} {0 {}}
1472do_test auth-1.233 {
1473 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001474} {full_column_names on {} {}}
drh77ad4e42003-01-14 02:49:27 +00001475do_test auth-1.234 {
1476 execsql2 {SELECT a FROM t2}
1477} {a 11 a 7}
1478do_test auth-1.235 {
drhe22a3342003-04-22 20:30:37 +00001479 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001480 if {$code=="SQLITE_PRAGMA"} {
drhe22a3342003-04-22 20:30:37 +00001481 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001482 return SQLITE_OK
1483 }
1484 return SQLITE_OK
1485 }
1486 catchsql {PRAGMA full_column_names=on}
1487} {0 {}}
1488do_test auth-1.236 {
1489 execsql2 {SELECT a FROM t2}
1490} {t2.a 11 t2.a 7}
1491do_test auth-1.237 {
drhe22a3342003-04-22 20:30:37 +00001492 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001493 if {$code=="SQLITE_PRAGMA"} {
drhe22a3342003-04-22 20:30:37 +00001494 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001495 return SQLITE_OK
1496 }
1497 return SQLITE_OK
1498 }
1499 catchsql {PRAGMA full_column_names=OFF}
1500} {0 {}}
1501do_test auth-1.238 {
1502 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001503} {full_column_names OFF {} {}}
drh77ad4e42003-01-14 02:49:27 +00001504do_test auth-1.239 {
1505 execsql2 {SELECT a FROM t2}
1506} {a 11 a 7}
drhe5f9c642003-01-13 23:27:31 +00001507
drh2c3831c2003-01-14 13:48:20 +00001508do_test auth-1.240 {
drhe22a3342003-04-22 20:30:37 +00001509 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001510 if {$code=="SQLITE_TRANSACTION"} {
drhe22a3342003-04-22 20:30:37 +00001511 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh2c3831c2003-01-14 13:48:20 +00001512 return SQLITE_DENY
1513 }
1514 return SQLITE_OK
1515 }
1516 catchsql {BEGIN}
1517} {1 {not authorized}}
1518do_test auth-1.241 {
1519 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001520} {BEGIN {} {} {}}
drh2c3831c2003-01-14 13:48:20 +00001521do_test auth-1.242 {
drhe22a3342003-04-22 20:30:37 +00001522 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001523 if {$code=="SQLITE_TRANSACTION" && $arg1!="BEGIN"} {
drhe22a3342003-04-22 20:30:37 +00001524 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh2c3831c2003-01-14 13:48:20 +00001525 return SQLITE_DENY
1526 }
1527 return SQLITE_OK
1528 }
1529 catchsql {BEGIN; INSERT INTO t2 VALUES(44,55,66); COMMIT}
1530} {1 {not authorized}}
1531do_test auth-1.243 {
1532 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001533} {COMMIT {} {} {}}
drh2c3831c2003-01-14 13:48:20 +00001534do_test auth-1.244 {
1535 execsql {SELECT * FROM t2}
1536} {11 2 33 7 8 9 44 55 66}
1537do_test auth-1.245 {
1538 catchsql {ROLLBACK}
1539} {1 {not authorized}}
1540do_test auth-1.246 {
1541 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001542} {ROLLBACK {} {} {}}
drh2c3831c2003-01-14 13:48:20 +00001543do_test auth-1.247 {
1544 catchsql {END TRANSACTION}
1545} {1 {not authorized}}
1546do_test auth-1.248 {
1547 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001548} {COMMIT {} {} {}}
drh2c3831c2003-01-14 13:48:20 +00001549do_test auth-1.249 {
drhe22a3342003-04-22 20:30:37 +00001550 db authorizer {}
drh2c3831c2003-01-14 13:48:20 +00001551 catchsql {ROLLBACK}
1552} {0 {}}
1553do_test auth-1.250 {
1554 execsql {SELECT * FROM t2}
1555} {11 2 33 7 8 9}
1556
drh81e293b2003-06-06 19:00:42 +00001557# ticket #340 - authorization for ATTACH and DETACH.
1558#
1559do_test auth-1.251 {
1560 db authorizer ::auth
1561 proc auth {code arg1 arg2 arg3 arg4} {
1562 if {$code=="SQLITE_ATTACH"} {
1563 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
1564 }
1565 return SQLITE_OK
1566 }
1567 catchsql {
1568 ATTACH DATABASE ':memory:' AS test1
1569 }
1570} {0 {}}
1571do_test auth-1.252 {
1572 set ::authargs
1573} {:memory: {} {} {}}
1574do_test auth-1.253 {
1575 catchsql {DETACH DATABASE test1}
1576 proc auth {code arg1 arg2 arg3 arg4} {
1577 if {$code=="SQLITE_ATTACH"} {
1578 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
1579 return SQLITE_DENY
1580 }
1581 return SQLITE_OK
1582 }
1583 catchsql {
1584 ATTACH DATABASE ':memory:' AS test1;
1585 }
1586} {1 {not authorized}}
1587do_test auth-1.254 {
1588 lindex [execsql {PRAGMA database_list}] 7
1589} {}
1590do_test auth-1.255 {
1591 catchsql {DETACH DATABASE test1}
1592 proc auth {code arg1 arg2 arg3 arg4} {
1593 if {$code=="SQLITE_ATTACH"} {
1594 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
1595 return SQLITE_IGNORE
1596 }
1597 return SQLITE_OK
1598 }
1599 catchsql {
1600 ATTACH DATABASE ':memory:' AS test1;
1601 }
1602} {0 {}}
1603do_test auth-1.256 {
1604 lindex [execsql {PRAGMA database_list}] 7
1605} {}
1606do_test auth-1.257 {
1607 proc auth {code arg1 arg2 arg3 arg4} {
1608 if {$code=="SQLITE_DETACH"} {
1609 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
1610 return SQLITE_OK
1611 }
1612 return SQLITE_OK
1613 }
1614 execsql {ATTACH DATABASE ':memory:' AS test1}
1615 catchsql {
1616 DETACH DATABASE test1;
1617 }
1618} {0 {}}
1619do_test auth-1.258 {
1620 lindex [execsql {PRAGMA database_list}] 7
1621} {}
1622do_test auth-1.259 {
1623 execsql {ATTACH DATABASE ':memory:' AS test1}
1624 proc auth {code arg1 arg2 arg3 arg4} {
1625 if {$code=="SQLITE_DETACH"} {
1626 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
1627 return SQLITE_IGNORE
1628 }
1629 return SQLITE_OK
1630 }
1631 catchsql {
1632 DETACH DATABASE test1;
1633 }
1634} {0 {}}
1635do_test auth-1.260 {
1636 lindex [execsql {PRAGMA database_list}] 7
1637} {test1}
1638do_test auth-1.261 {
1639 proc auth {code arg1 arg2 arg3 arg4} {
1640 if {$code=="SQLITE_DETACH"} {
1641 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
1642 return SQLITE_DENY
1643 }
1644 return SQLITE_OK
1645 }
1646 catchsql {
1647 DETACH DATABASE test1;
1648 }
1649} {1 {not authorized}}
1650do_test auth-1.262 {
1651 lindex [execsql {PRAGMA database_list}] 7
1652} {test1}
1653db authorizer {}
1654execsql {DETACH DATABASE test1}
1655
1656
drh2c3831c2003-01-14 13:48:20 +00001657do_test auth-2.1 {
drhe22a3342003-04-22 20:30:37 +00001658 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001659 if {$code=="SQLITE_READ" && $arg1=="t3" && $arg2=="x"} {
1660 return SQLITE_DENY
1661 }
1662 return SQLITE_OK
1663 }
drhe22a3342003-04-22 20:30:37 +00001664 db authorizer ::auth
drh2c3831c2003-01-14 13:48:20 +00001665 execsql {CREATE TABLE t3(x INTEGER PRIMARY KEY, y, z)}
1666 catchsql {SELECT * FROM t3}
1667} {1 {access to t3.x is prohibited}}
1668do_test auth-2.1 {
1669 catchsql {SELECT y,z FROM t3}
1670} {0 {}}
1671do_test auth-2.2 {
1672 catchsql {SELECT ROWID,y,z FROM t3}
1673} {1 {access to t3.x is prohibited}}
1674do_test auth-2.3 {
1675 catchsql {SELECT OID,y,z FROM t3}
1676} {1 {access to t3.x is prohibited}}
1677do_test auth-2.4 {
drhe22a3342003-04-22 20:30:37 +00001678 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001679 if {$code=="SQLITE_READ" && $arg1=="t3" && $arg2=="x"} {
1680 return SQLITE_IGNORE
1681 }
1682 return SQLITE_OK
1683 }
1684 execsql {INSERT INTO t3 VALUES(44,55,66)}
1685 catchsql {SELECT * FROM t3}
1686} {0 {{} 55 66}}
1687do_test auth-2.5 {
1688 catchsql {SELECT rowid,y,z FROM t3}
1689} {0 {{} 55 66}}
1690do_test auth-2.6 {
drhe22a3342003-04-22 20:30:37 +00001691 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001692 if {$code=="SQLITE_READ" && $arg1=="t3" && $arg2=="ROWID"} {
1693 return SQLITE_IGNORE
1694 }
1695 return SQLITE_OK
1696 }
1697 catchsql {SELECT * FROM t3}
1698} {0 {44 55 66}}
1699do_test auth-2.7 {
1700 catchsql {SELECT ROWID,y,z FROM t3}
1701} {0 {44 55 66}}
1702do_test auth-2.8 {
drhe22a3342003-04-22 20:30:37 +00001703 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001704 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="ROWID"} {
1705 return SQLITE_IGNORE
1706 }
1707 return SQLITE_OK
1708 }
1709 catchsql {SELECT ROWID,b,c FROM t2}
1710} {0 {{} 2 33 {} 8 9}}
drhdcd997e2003-01-31 17:21:49 +00001711do_test auth-2.9.1 {
drhe22a3342003-04-22 20:30:37 +00001712 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001713 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="ROWID"} {
1714 return bogus
1715 }
1716 return SQLITE_OK
1717 }
1718 catchsql {SELECT ROWID,b,c FROM t2}
1719} {1 {illegal return value (999) from the authorization function - should be SQLITE_OK, SQLITE_IGNORE, or SQLITE_DENY}}
drhdcd997e2003-01-31 17:21:49 +00001720do_test auth-2.9.2 {
1721 db errorcode
1722} {21}
drh2c3831c2003-01-14 13:48:20 +00001723do_test auth-2.10 {
drhe22a3342003-04-22 20:30:37 +00001724 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001725 if {$code=="SQLITE_SELECT"} {
1726 return bogus
1727 }
1728 return SQLITE_OK
1729 }
1730 catchsql {SELECT ROWID,b,c FROM t2}
1731} {1 {illegal return value (1) from the authorization function - should be SQLITE_OK, SQLITE_IGNORE, or SQLITE_DENY}}
drh6f8c91c2003-12-07 00:24:35 +00001732do_test auth-2.11.1 {
drhe22a3342003-04-22 20:30:37 +00001733 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001734 if {$code=="SQLITE_READ" && $arg2=="a"} {
1735 return SQLITE_IGNORE
1736 }
1737 return SQLITE_OK
1738 }
1739 catchsql {SELECT * FROM t2, t3}
1740} {0 {{} 2 33 44 55 66 {} 8 9 44 55 66}}
drh6f8c91c2003-12-07 00:24:35 +00001741do_test auth-2.11.2 {
drhe22a3342003-04-22 20:30:37 +00001742 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001743 if {$code=="SQLITE_READ" && $arg2=="x"} {
1744 return SQLITE_IGNORE
1745 }
1746 return SQLITE_OK
1747 }
1748 catchsql {SELECT * FROM t2, t3}
1749} {0 {11 2 33 {} 55 66 7 8 9 {} 55 66}}
drhe5f9c642003-01-13 23:27:31 +00001750
drh027850b2003-04-16 20:24:52 +00001751# Make sure the OLD and NEW pseudo-tables of a trigger get authorized.
1752#
1753do_test auth-3.1 {
drhe22a3342003-04-22 20:30:37 +00001754 proc auth {code arg1 arg2 arg3 arg4} {
drh027850b2003-04-16 20:24:52 +00001755 return SQLITE_OK
1756 }
1757 execsql {
1758 CREATE TABLE tx(a1,a2,b1,b2,c1,c2);
1759 CREATE TRIGGER r1 AFTER UPDATE ON t2 FOR EACH ROW BEGIN
1760 INSERT INTO tx VALUES(OLD.a,NEW.a,OLD.b,NEW.b,OLD.c,NEW.c);
1761 END;
1762 UPDATE t2 SET a=a+1;
1763 SELECT * FROM tx;
1764 }
1765} {11 12 2 2 33 33 7 8 8 8 9 9}
1766do_test auth-3.2 {
drhe22a3342003-04-22 20:30:37 +00001767 proc auth {code arg1 arg2 arg3 arg4} {
drh027850b2003-04-16 20:24:52 +00001768 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="c"} {
1769 return SQLITE_IGNORE
1770 }
1771 return SQLITE_OK
1772 }
1773 execsql {
1774 DELETE FROM tx;
1775 UPDATE t2 SET a=a+100;
1776 SELECT * FROM tx;
1777 }
1778} {12 112 2 2 {} {} 8 108 8 8 {} {}}
1779
drh85e20962003-04-25 17:52:11 +00001780# Make sure the names of views and triggers are passed on on arg4.
1781#
1782do_test auth-4.1 {
1783 proc auth {code arg1 arg2 arg3 arg4} {
1784 lappend ::authargs $code $arg1 $arg2 $arg3 $arg4
1785 return SQLITE_OK
1786 }
1787 set authargs {}
1788 execsql {
1789 UPDATE t2 SET a=a+1;
1790 }
1791 set authargs
1792} [list \
1793 SQLITE_READ t2 a main {} \
1794 SQLITE_UPDATE t2 a main {} \
1795 SQLITE_INSERT tx {} main r1 \
1796 SQLITE_READ t2 a main r1 \
1797 SQLITE_READ t2 a main r1 \
1798 SQLITE_READ t2 b main r1 \
1799 SQLITE_READ t2 b main r1 \
1800 SQLITE_READ t2 c main r1 \
1801 SQLITE_READ t2 c main r1]
1802do_test auth-4.2 {
1803 execsql {
1804 CREATE VIEW v1 AS SELECT a+b AS x FROM t2;
1805 CREATE TABLE v1chng(x1,x2);
1806 CREATE TRIGGER r2 INSTEAD OF UPDATE ON v1 BEGIN
1807 INSERT INTO v1chng VALUES(OLD.x,NEW.x);
1808 END;
1809 SELECT * FROM v1;
1810 }
1811} {115 117}
1812do_test auth-4.3 {
1813 set authargs {}
1814 execsql {
1815 UPDATE v1 SET x=1 WHERE x=117
1816 }
1817 set authargs
1818} [list \
1819 SQLITE_UPDATE v1 x main {} \
1820 SQLITE_READ v1 x main {} \
1821 SQLITE_SELECT {} {} {} v1 \
1822 SQLITE_READ t2 a main v1 \
1823 SQLITE_READ t2 b main v1 \
1824 SQLITE_INSERT v1chng {} main r2 \
1825 SQLITE_READ v1 x main r2 \
1826 SQLITE_READ v1 x main r2]
1827do_test auth-4.4 {
1828 execsql {
1829 CREATE TRIGGER r3 INSTEAD OF DELETE ON v1 BEGIN
1830 INSERT INTO v1chng VALUES(OLD.x,NULL);
1831 END;
1832 SELECT * FROM v1;
1833 }
1834} {115 117}
1835do_test auth-4.5 {
1836 set authargs {}
1837 execsql {
1838 DELETE FROM v1 WHERE x=117
1839 }
1840 set authargs
1841} [list \
1842 SQLITE_DELETE v1 {} main {} \
1843 SQLITE_READ v1 x main {} \
1844 SQLITE_SELECT {} {} {} v1 \
1845 SQLITE_READ t2 a main v1 \
1846 SQLITE_READ t2 b main v1 \
1847 SQLITE_INSERT v1chng {} main r3 \
1848 SQLITE_READ v1 x main r3]
drh1962bda2003-01-12 19:33:52 +00001849
1850finish_test