blob: acec238427230ae4aa6aa8ba72a8a2b5fc20c0ab [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#
danielk19770fa8ddb2004-11-22 08:43:32 +000015# $Id: auth.test,v 1.22 2004/11/22 08:43:32 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.
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}
drh56891232004-09-09 13:55:50 +000046do_test auth-1.1.4 {
47 # Ticket #896.
48 catchsql {
49 SELECT x;
50 }
51} {1 {no such column: x}}
drh1962bda2003-01-12 19:33:52 +000052do_test auth-1.2 {
drhe5f9c642003-01-13 23:27:31 +000053 execsql {SELECT name FROM sqlite_master}
54} {}
drh77ad4e42003-01-14 02:49:27 +000055do_test auth-1.3.1 {
drhe22a3342003-04-22 20:30:37 +000056 proc auth {code arg1 arg2 arg3 arg4} {
drhe5f9c642003-01-13 23:27:31 +000057 if {$code=="SQLITE_CREATE_TABLE"} {
drhe22a3342003-04-22 20:30:37 +000058 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drhe5f9c642003-01-13 23:27:31 +000059 return SQLITE_DENY
60 }
61 return SQLITE_OK
62 }
63 catchsql {CREATE TABLE t1(a,b,c)}
64} {1 {not authorized}}
drh77ad4e42003-01-14 02:49:27 +000065do_test auth-1.3.2 {
drhdcd997e2003-01-31 17:21:49 +000066 db errorcode
67} {23}
68do_test auth-1.3.3 {
drh77ad4e42003-01-14 02:49:27 +000069 set ::authargs
drhe22a3342003-04-22 20:30:37 +000070} {t1 {} main {}}
drhe5f9c642003-01-13 23:27:31 +000071do_test auth-1.4 {
72 execsql {SELECT name FROM sqlite_master}
73} {}
74
75do_test auth-1.5 {
drhe22a3342003-04-22 20:30:37 +000076 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +000077 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
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}}
84do_test auth-1.6 {
85 execsql {SELECT name FROM sqlite_temp_master}
86} {}
drh77ad4e42003-01-14 02:49:27 +000087do_test auth-1.7.1 {
drhe22a3342003-04-22 20:30:37 +000088 proc auth {code arg1 arg2 arg3 arg4} {
drhe5f9c642003-01-13 23:27:31 +000089 if {$code=="SQLITE_CREATE_TEMP_TABLE"} {
drhe22a3342003-04-22 20:30:37 +000090 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drhe5f9c642003-01-13 23:27:31 +000091 return SQLITE_DENY
92 }
93 return SQLITE_OK
94 }
95 catchsql {CREATE TEMP TABLE t1(a,b,c)}
96} {1 {not authorized}}
drh77ad4e42003-01-14 02:49:27 +000097do_test auth-1.7.2 {
98 set ::authargs
drhe22a3342003-04-22 20:30:37 +000099} {t1 {} temp {}}
drhe5f9c642003-01-13 23:27:31 +0000100do_test auth-1.8 {
101 execsql {SELECT name FROM sqlite_temp_master}
102} {}
103
104do_test auth-1.9 {
drhe22a3342003-04-22 20:30:37 +0000105 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000106 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
drh1962bda2003-01-12 19:33:52 +0000107 return SQLITE_IGNORE
108 }
109 return SQLITE_OK
110 }
111 catchsql {CREATE TABLE t1(a,b,c)}
drhe5f9c642003-01-13 23:27:31 +0000112} {0 {}}
113do_test auth-1.10 {
114 execsql {SELECT name FROM sqlite_master}
115} {}
116do_test auth-1.11 {
drhe22a3342003-04-22 20:30:37 +0000117 proc auth {code arg1 arg2 arg3 arg4} {
drhe5f9c642003-01-13 23:27:31 +0000118 if {$code=="SQLITE_CREATE_TABLE"} {
drhe22a3342003-04-22 20:30:37 +0000119 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drhe5f9c642003-01-13 23:27:31 +0000120 return SQLITE_IGNORE
drh1962bda2003-01-12 19:33:52 +0000121 }
122 return SQLITE_OK
123 }
124 catchsql {CREATE TABLE t1(a,b,c)}
125} {0 {}}
drhe5f9c642003-01-13 23:27:31 +0000126do_test auth-1.12 {
drh1962bda2003-01-12 19:33:52 +0000127 execsql {SELECT name FROM sqlite_master}
drhe5f9c642003-01-13 23:27:31 +0000128} {}
129do_test auth-1.13 {
drhe22a3342003-04-22 20:30:37 +0000130 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000131 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
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.14 {
139 execsql {SELECT name FROM sqlite_temp_master}
140} {}
141do_test auth-1.15 {
drhe22a3342003-04-22 20:30:37 +0000142 proc auth {code arg1 arg2 arg3 arg4} {
drhe5f9c642003-01-13 23:27:31 +0000143 if {$code=="SQLITE_CREATE_TEMP_TABLE"} {
drhe22a3342003-04-22 20:30:37 +0000144 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drhe5f9c642003-01-13 23:27:31 +0000145 return SQLITE_IGNORE
146 }
147 return SQLITE_OK
148 }
149 catchsql {CREATE TEMP TABLE t1(a,b,c)}
150} {0 {}}
151do_test auth-1.16 {
152 execsql {SELECT name FROM sqlite_temp_master}
153} {}
154
155do_test auth-1.17 {
drhe22a3342003-04-22 20:30:37 +0000156 proc auth {code arg1 arg2 arg3 arg4} {
drhe5f9c642003-01-13 23:27:31 +0000157 if {$code=="SQLITE_CREATE_TABLE"} {
drhe22a3342003-04-22 20:30:37 +0000158 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000159 return SQLITE_DENY
drhe5f9c642003-01-13 23:27:31 +0000160 }
161 return SQLITE_OK
162 }
163 catchsql {CREATE TEMP TABLE t1(a,b,c)}
164} {0 {}}
165do_test auth-1.18 {
166 execsql {SELECT name FROM sqlite_temp_master}
167} {t1}
drh77ad4e42003-01-14 02:49:27 +0000168do_test auth-1.19.1 {
169 set ::authargs {}
drhe22a3342003-04-22 20:30:37 +0000170 proc auth {code arg1 arg2 arg3 arg4} {
drhe5f9c642003-01-13 23:27:31 +0000171 if {$code=="SQLITE_CREATE_TEMP_TABLE"} {
drhe22a3342003-04-22 20:30:37 +0000172 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000173 return SQLITE_DENY
drh1962bda2003-01-12 19:33:52 +0000174 }
175 return SQLITE_OK
176 }
177 catchsql {CREATE TABLE t2(a,b,c)}
drh1962bda2003-01-12 19:33:52 +0000178} {0 {}}
drh77ad4e42003-01-14 02:49:27 +0000179do_test auth-1.19.2 {
180 set ::authargs
181} {}
drh1962bda2003-01-12 19:33:52 +0000182do_test auth-1.20 {
drhe5f9c642003-01-13 23:27:31 +0000183 execsql {SELECT name FROM sqlite_master}
184} {t2}
drh1962bda2003-01-12 19:33:52 +0000185
drh77ad4e42003-01-14 02:49:27 +0000186do_test auth-1.21.1 {
drhe22a3342003-04-22 20:30:37 +0000187 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000188 if {$code=="SQLITE_DROP_TABLE"} {
drhe22a3342003-04-22 20:30:37 +0000189 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000190 return SQLITE_DENY
191 }
192 return SQLITE_OK
193 }
194 catchsql {DROP TABLE t2}
195} {1 {not authorized}}
196do_test auth-1.21.2 {
197 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000198} {t2 {} main {}}
drh77ad4e42003-01-14 02:49:27 +0000199do_test auth-1.22 {
200 execsql {SELECT name FROM sqlite_master}
201} {t2}
202do_test auth-1.23.1 {
drhe22a3342003-04-22 20:30:37 +0000203 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000204 if {$code=="SQLITE_DROP_TABLE"} {
drhe22a3342003-04-22 20:30:37 +0000205 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000206 return SQLITE_IGNORE
207 }
208 return SQLITE_OK
209 }
210 catchsql {DROP TABLE t2}
211} {0 {}}
212do_test auth-1.23.2 {
213 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000214} {t2 {} main {}}
drh77ad4e42003-01-14 02:49:27 +0000215do_test auth-1.24 {
216 execsql {SELECT name FROM sqlite_master}
217} {t2}
drhe5f9c642003-01-13 23:27:31 +0000218
drh77ad4e42003-01-14 02:49:27 +0000219do_test auth-1.25 {
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_DENY
224 }
225 return SQLITE_OK
226 }
227 catchsql {DROP TABLE t1}
228} {1 {not authorized}}
229do_test auth-1.26 {
230 execsql {SELECT name FROM sqlite_temp_master}
231} {t1}
232do_test auth-1.27 {
drhe22a3342003-04-22 20:30:37 +0000233 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000234 if {$code=="SQLITE_DROP_TEMP_TABLE"} {
drhe22a3342003-04-22 20:30:37 +0000235 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000236 return SQLITE_IGNORE
237 }
238 return SQLITE_OK
239 }
240 catchsql {DROP TABLE t1}
241} {0 {}}
242do_test auth-1.28 {
243 execsql {SELECT name FROM sqlite_temp_master}
244} {t1}
245
246do_test auth-1.29 {
drhe22a3342003-04-22 20:30:37 +0000247 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000248 if {$code=="SQLITE_INSERT" && $arg1=="t2"} {
249 return SQLITE_DENY
250 }
251 return SQLITE_OK
252 }
253 catchsql {INSERT INTO t2 VALUES(1,2,3)}
254} {1 {not authorized}}
255do_test auth-1.30 {
256 execsql {SELECT * FROM t2}
257} {}
258do_test auth-1.31 {
drhe22a3342003-04-22 20:30:37 +0000259 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000260 if {$code=="SQLITE_INSERT" && $arg1=="t2"} {
261 return SQLITE_IGNORE
262 }
263 return SQLITE_OK
264 }
265 catchsql {INSERT INTO t2 VALUES(1,2,3)}
266} {0 {}}
267do_test auth-1.32 {
268 execsql {SELECT * FROM t2}
269} {}
270do_test auth-1.33 {
drhe22a3342003-04-22 20:30:37 +0000271 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000272 if {$code=="SQLITE_INSERT" && $arg1=="t1"} {
273 return SQLITE_IGNORE
274 }
275 return SQLITE_OK
276 }
277 catchsql {INSERT INTO t2 VALUES(1,2,3)}
278} {0 {}}
279do_test auth-1.34 {
280 execsql {SELECT * FROM t2}
281} {1 2 3}
282
drh4925ca02003-11-27 00:48:57 +0000283do_test auth-1.35.1 {
drhe22a3342003-04-22 20:30:37 +0000284 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000285 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="b"} {
286 return SQLITE_DENY
287 }
288 return SQLITE_OK
289 }
290 catchsql {SELECT * FROM t2}
291} {1 {access to t2.b is prohibited}}
drh4925ca02003-11-27 00:48:57 +0000292do_test auth-1.35.2 {
293 execsql {ATTACH DATABASE 'test.db' AS two}
294 catchsql {SELECT * FROM two.t2}
295} {1 {access to two.t2.b is prohibited}}
296execsql {DETACH DATABASE two}
drh77ad4e42003-01-14 02:49:27 +0000297do_test auth-1.36 {
drhe22a3342003-04-22 20:30:37 +0000298 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000299 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="b"} {
300 return SQLITE_IGNORE
301 }
302 return SQLITE_OK
303 }
304 catchsql {SELECT * FROM t2}
305} {0 {1 {} 3}}
306do_test auth-1.37 {
drhe22a3342003-04-22 20:30:37 +0000307 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000308 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="b"} {
309 return SQLITE_IGNORE
310 }
311 return SQLITE_OK
312 }
313 catchsql {SELECT * FROM t2 WHERE b=2}
314} {0 {}}
315do_test auth-1.38 {
drhe22a3342003-04-22 20:30:37 +0000316 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000317 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="a"} {
318 return SQLITE_IGNORE
319 }
320 return SQLITE_OK
321 }
322 catchsql {SELECT * FROM t2 WHERE b=2}
323} {0 {{} 2 3}}
324do_test auth-1.39 {
drhe22a3342003-04-22 20:30:37 +0000325 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000326 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="b"} {
327 return SQLITE_IGNORE
328 }
329 return SQLITE_OK
330 }
331 catchsql {SELECT * FROM t2 WHERE b IS NULL}
332} {0 {1 {} 3}}
333do_test auth-1.40 {
drhe22a3342003-04-22 20:30:37 +0000334 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000335 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="b"} {
336 return SQLITE_DENY
337 }
338 return SQLITE_OK
339 }
340 catchsql {SELECT a,c FROM t2 WHERE b IS NULL}
341} {1 {access to t2.b is prohibited}}
342
343do_test auth-1.41 {
drhe22a3342003-04-22 20:30:37 +0000344 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000345 if {$code=="SQLITE_UPDATE" && $arg1=="t2" && $arg2=="b"} {
346 return SQLITE_DENY
347 }
348 return SQLITE_OK
349 }
350 catchsql {UPDATE t2 SET a=11}
351} {0 {}}
352do_test auth-1.42 {
353 execsql {SELECT * FROM t2}
354} {11 2 3}
355do_test auth-1.43 {
drhe22a3342003-04-22 20:30:37 +0000356 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000357 if {$code=="SQLITE_UPDATE" && $arg1=="t2" && $arg2=="b"} {
358 return SQLITE_DENY
359 }
360 return SQLITE_OK
361 }
362 catchsql {UPDATE t2 SET b=22, c=33}
363} {1 {not authorized}}
364do_test auth-1.44 {
365 execsql {SELECT * FROM t2}
366} {11 2 3}
367do_test auth-1.45 {
drhe22a3342003-04-22 20:30:37 +0000368 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000369 if {$code=="SQLITE_UPDATE" && $arg1=="t2" && $arg2=="b"} {
370 return SQLITE_IGNORE
371 }
372 return SQLITE_OK
373 }
374 catchsql {UPDATE t2 SET b=22, c=33}
375} {0 {}}
376do_test auth-1.46 {
377 execsql {SELECT * FROM t2}
378} {11 2 33}
379
380do_test auth-1.47 {
drhe22a3342003-04-22 20:30:37 +0000381 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000382 if {$code=="SQLITE_DELETE" && $arg1=="t2"} {
383 return SQLITE_DENY
384 }
385 return SQLITE_OK
386 }
387 catchsql {DELETE FROM t2 WHERE a=11}
388} {1 {not authorized}}
389do_test auth-1.48 {
390 execsql {SELECT * FROM t2}
391} {11 2 33}
392do_test auth-1.49 {
drhe22a3342003-04-22 20:30:37 +0000393 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000394 if {$code=="SQLITE_DELETE" && $arg1=="t2"} {
395 return SQLITE_IGNORE
396 }
397 return SQLITE_OK
398 }
399 catchsql {DELETE FROM t2 WHERE a=11}
400} {0 {}}
401do_test auth-1.50 {
402 execsql {SELECT * FROM t2}
403} {11 2 33}
404
405do_test auth-1.51 {
drhe22a3342003-04-22 20:30:37 +0000406 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000407 if {$code=="SQLITE_SELECT"} {
408 return SQLITE_DENY
409 }
410 return SQLITE_OK
411 }
412 catchsql {SELECT * FROM t2}
413} {1 {not authorized}}
414do_test auth-1.52 {
drhe22a3342003-04-22 20:30:37 +0000415 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000416 if {$code=="SQLITE_SELECT"} {
417 return SQLITE_IGNORE
418 }
419 return SQLITE_OK
420 }
421 catchsql {SELECT * FROM t2}
422} {0 {}}
423do_test auth-1.53 {
drhe22a3342003-04-22 20:30:37 +0000424 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000425 if {$code=="SQLITE_SELECT"} {
426 return SQLITE_OK
427 }
428 return SQLITE_OK
429 }
430 catchsql {SELECT * FROM t2}
431} {0 {11 2 33}}
432
danielk19772ac79702004-06-14 11:54:18 +0000433# Update for version 3: There used to be a handful of test here that
434# tested the authorisation callback with the COPY command. The following
435# test makes the same database modifications as they used to.
436do_test auth-1.54 {
437 execsql {INSERT INTO t2 VALUES(7, 8, 9);}
438} {}
439do_test auth-1.55 {
440 execsql {SELECT * FROM t2}
441} {11 2 33 7 8 9}
drh77ad4e42003-01-14 02:49:27 +0000442
443do_test auth-1.63 {
drhe22a3342003-04-22 20:30:37 +0000444 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000445 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
446 return SQLITE_DENY
447 }
448 return SQLITE_OK
449 }
450 catchsql {DROP TABLE t2}
451} {1 {not authorized}}
452do_test auth-1.64 {
453 execsql {SELECT name FROM sqlite_master}
454} {t2}
455do_test auth-1.65 {
drhe22a3342003-04-22 20:30:37 +0000456 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000457 if {$code=="SQLITE_DELETE" && $arg1=="t2"} {
458 return SQLITE_DENY
459 }
460 return SQLITE_OK
461 }
462 catchsql {DROP TABLE t2}
463} {1 {not authorized}}
464do_test auth-1.66 {
465 execsql {SELECT name FROM sqlite_master}
466} {t2}
467do_test auth-1.67 {
drhe22a3342003-04-22 20:30:37 +0000468 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000469 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
470 return SQLITE_DENY
471 }
472 return SQLITE_OK
473 }
474 catchsql {DROP TABLE t1}
475} {1 {not authorized}}
476do_test auth-1.68 {
477 execsql {SELECT name FROM sqlite_temp_master}
478} {t1}
479do_test auth-1.69 {
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=="t1"} {
482 return SQLITE_DENY
483 }
484 return SQLITE_OK
485 }
486 catchsql {DROP TABLE t1}
487} {1 {not authorized}}
488do_test auth-1.70 {
489 execsql {SELECT name FROM sqlite_temp_master}
490} {t1}
491
492do_test auth-1.71 {
drhe22a3342003-04-22 20:30:37 +0000493 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000494 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
495 return SQLITE_IGNORE
496 }
497 return SQLITE_OK
498 }
499 catchsql {DROP TABLE t2}
500} {0 {}}
501do_test auth-1.72 {
502 execsql {SELECT name FROM sqlite_master}
503} {t2}
504do_test auth-1.73 {
drhe22a3342003-04-22 20:30:37 +0000505 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000506 if {$code=="SQLITE_DELETE" && $arg1=="t2"} {
507 return SQLITE_IGNORE
508 }
509 return SQLITE_OK
510 }
511 catchsql {DROP TABLE t2}
512} {0 {}}
513do_test auth-1.74 {
514 execsql {SELECT name FROM sqlite_master}
515} {t2}
516do_test auth-1.75 {
drhe22a3342003-04-22 20:30:37 +0000517 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000518 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
519 return SQLITE_IGNORE
520 }
521 return SQLITE_OK
522 }
523 catchsql {DROP TABLE t1}
524} {0 {}}
525do_test auth-1.76 {
526 execsql {SELECT name FROM sqlite_temp_master}
527} {t1}
528do_test auth-1.77 {
drhe22a3342003-04-22 20:30:37 +0000529 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000530 if {$code=="SQLITE_DELETE" && $arg1=="t1"} {
531 return SQLITE_IGNORE
532 }
533 return SQLITE_OK
534 }
535 catchsql {DROP TABLE t1}
536} {0 {}}
537do_test auth-1.78 {
538 execsql {SELECT name FROM sqlite_temp_master}
539} {t1}
540
danielk19770fa8ddb2004-11-22 08:43:32 +0000541# Test cases auth-1.79 to auth-1.123 test creating and dropping views.
542# Omit these if the library was compiled with views omitted.
543ifcapable view {
drh77ad4e42003-01-14 02:49:27 +0000544do_test auth-1.79 {
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_DENY
549 }
550 return SQLITE_OK
551 }
552 catchsql {CREATE VIEW v1 AS SELECT a+1,b+1 FROM t2}
553} {1 {not authorized}}
554do_test auth-1.80 {
555 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000556} {v1 {} main {}}
drh77ad4e42003-01-14 02:49:27 +0000557do_test auth-1.81 {
558 execsql {SELECT name FROM sqlite_master}
559} {t2}
560do_test auth-1.82 {
drhe22a3342003-04-22 20:30:37 +0000561 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000562 if {$code=="SQLITE_CREATE_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000563 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000564 return SQLITE_IGNORE
565 }
566 return SQLITE_OK
567 }
568 catchsql {CREATE VIEW v1 AS SELECT a+1,b+1 FROM t2}
569} {0 {}}
570do_test auth-1.83 {
571 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000572} {v1 {} main {}}
drh77ad4e42003-01-14 02:49:27 +0000573do_test auth-1.84 {
574 execsql {SELECT name FROM sqlite_master}
575} {t2}
576
577do_test auth-1.85 {
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_DENY
582 }
583 return SQLITE_OK
584 }
585 catchsql {CREATE TEMPORARY VIEW v1 AS SELECT a+1,b+1 FROM t2}
586} {1 {not authorized}}
587do_test auth-1.86 {
588 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000589} {v1 {} temp {}}
drh77ad4e42003-01-14 02:49:27 +0000590do_test auth-1.87 {
591 execsql {SELECT name FROM sqlite_temp_master}
592} {t1}
593do_test auth-1.88 {
drhe22a3342003-04-22 20:30:37 +0000594 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000595 if {$code=="SQLITE_CREATE_TEMP_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000596 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000597 return SQLITE_IGNORE
598 }
599 return SQLITE_OK
600 }
601 catchsql {CREATE TEMPORARY VIEW v1 AS SELECT a+1,b+1 FROM t2}
602} {0 {}}
603do_test auth-1.89 {
604 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000605} {v1 {} temp {}}
drh77ad4e42003-01-14 02:49:27 +0000606do_test auth-1.90 {
607 execsql {SELECT name FROM sqlite_temp_master}
608} {t1}
609
610do_test auth-1.91 {
drhe22a3342003-04-22 20:30:37 +0000611 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000612 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
613 return SQLITE_DENY
614 }
615 return SQLITE_OK
616 }
617 catchsql {CREATE VIEW v1 AS SELECT a+1,b+1 FROM t2}
618} {1 {not authorized}}
619do_test auth-1.92 {
620 execsql {SELECT name FROM sqlite_master}
621} {t2}
622do_test auth-1.93 {
drhe22a3342003-04-22 20:30:37 +0000623 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000624 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
625 return SQLITE_IGNORE
626 }
627 return SQLITE_OK
628 }
629 catchsql {CREATE VIEW v1 AS SELECT a+1,b+1 FROM t2}
630} {0 {}}
631do_test auth-1.94 {
632 execsql {SELECT name FROM sqlite_master}
633} {t2}
634
635do_test auth-1.95 {
drhe22a3342003-04-22 20:30:37 +0000636 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000637 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
638 return SQLITE_DENY
639 }
640 return SQLITE_OK
641 }
642 catchsql {CREATE TEMPORARY VIEW v1 AS SELECT a+1,b+1 FROM t2}
643} {1 {not authorized}}
644do_test auth-1.96 {
645 execsql {SELECT name FROM sqlite_temp_master}
646} {t1}
647do_test auth-1.97 {
drhe22a3342003-04-22 20:30:37 +0000648 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000649 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
650 return SQLITE_IGNORE
651 }
652 return SQLITE_OK
653 }
654 catchsql {CREATE TEMPORARY VIEW v1 AS SELECT a+1,b+1 FROM t2}
655} {0 {}}
656do_test auth-1.98 {
657 execsql {SELECT name FROM sqlite_temp_master}
658} {t1}
659
660do_test auth-1.99 {
drhe22a3342003-04-22 20:30:37 +0000661 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000662 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
663 return SQLITE_DENY
664 }
665 return SQLITE_OK
666 }
667 catchsql {
668 CREATE VIEW v2 AS SELECT a+1,b+1 FROM t2;
669 DROP VIEW v2
670 }
671} {1 {not authorized}}
672do_test auth-1.100 {
673 execsql {SELECT name FROM sqlite_master}
674} {t2 v2}
675do_test auth-1.101 {
drhe22a3342003-04-22 20:30:37 +0000676 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000677 if {$code=="SQLITE_DROP_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000678 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000679 return SQLITE_DENY
680 }
681 return SQLITE_OK
682 }
683 catchsql {DROP VIEW v2}
684} {1 {not authorized}}
685do_test auth-1.102 {
686 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000687} {v2 {} main {}}
drh77ad4e42003-01-14 02:49:27 +0000688do_test auth-1.103 {
689 execsql {SELECT name FROM sqlite_master}
690} {t2 v2}
691do_test auth-1.104 {
drhe22a3342003-04-22 20:30:37 +0000692 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000693 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
694 return SQLITE_IGNORE
695 }
696 return SQLITE_OK
697 }
698 catchsql {DROP VIEW v2}
699} {0 {}}
700do_test auth-1.105 {
701 execsql {SELECT name FROM sqlite_master}
702} {t2 v2}
703do_test auth-1.106 {
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_IGNORE
708 }
709 return SQLITE_OK
710 }
711 catchsql {DROP VIEW v2}
712} {0 {}}
713do_test auth-1.107 {
714 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000715} {v2 {} main {}}
drh77ad4e42003-01-14 02:49:27 +0000716do_test auth-1.108 {
717 execsql {SELECT name FROM sqlite_master}
718} {t2 v2}
719do_test auth-1.109 {
drhe22a3342003-04-22 20:30:37 +0000720 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000721 if {$code=="SQLITE_DROP_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000722 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000723 return SQLITE_OK
724 }
725 return SQLITE_OK
726 }
727 catchsql {DROP VIEW v2}
728} {0 {}}
729do_test auth-1.110 {
730 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000731} {v2 {} main {}}
drh77ad4e42003-01-14 02:49:27 +0000732do_test auth-1.111 {
733 execsql {SELECT name FROM sqlite_master}
734} {t2}
735
736
737do_test auth-1.112 {
drhe22a3342003-04-22 20:30:37 +0000738 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000739 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
740 return SQLITE_DENY
741 }
742 return SQLITE_OK
743 }
744 catchsql {
745 CREATE TEMP VIEW v1 AS SELECT a+1,b+1 FROM t1;
746 DROP VIEW v1
747 }
748} {1 {not authorized}}
749do_test auth-1.113 {
750 execsql {SELECT name FROM sqlite_temp_master}
751} {t1 v1}
752do_test auth-1.114 {
drhe22a3342003-04-22 20:30:37 +0000753 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000754 if {$code=="SQLITE_DROP_TEMP_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000755 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000756 return SQLITE_DENY
757 }
758 return SQLITE_OK
759 }
760 catchsql {DROP VIEW v1}
761} {1 {not authorized}}
762do_test auth-1.115 {
763 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000764} {v1 {} temp {}}
drh77ad4e42003-01-14 02:49:27 +0000765do_test auth-1.116 {
766 execsql {SELECT name FROM sqlite_temp_master}
767} {t1 v1}
768do_test auth-1.117 {
drhe22a3342003-04-22 20:30:37 +0000769 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000770 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
771 return SQLITE_IGNORE
772 }
773 return SQLITE_OK
774 }
775 catchsql {DROP VIEW v1}
776} {0 {}}
777do_test auth-1.118 {
778 execsql {SELECT name FROM sqlite_temp_master}
779} {t1 v1}
780do_test auth-1.119 {
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_IGNORE
785 }
786 return SQLITE_OK
787 }
788 catchsql {DROP VIEW v1}
789} {0 {}}
790do_test auth-1.120 {
791 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000792} {v1 {} temp {}}
drh77ad4e42003-01-14 02:49:27 +0000793do_test auth-1.121 {
794 execsql {SELECT name FROM sqlite_temp_master}
795} {t1 v1}
796do_test auth-1.122 {
drhe22a3342003-04-22 20:30:37 +0000797 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000798 if {$code=="SQLITE_DROP_TEMP_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000799 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000800 return SQLITE_OK
801 }
802 return SQLITE_OK
803 }
804 catchsql {DROP VIEW v1}
805} {0 {}}
806do_test auth-1.123 {
807 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000808} {v1 {} temp {}}
drh77ad4e42003-01-14 02:49:27 +0000809do_test auth-1.124 {
810 execsql {SELECT name FROM sqlite_temp_master}
811} {t1}
danielk19770fa8ddb2004-11-22 08:43:32 +0000812} ;# ifcapable view
drh77ad4e42003-01-14 02:49:27 +0000813
814do_test auth-1.125 {
drhe22a3342003-04-22 20:30:37 +0000815 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000816 if {$code=="SQLITE_CREATE_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +0000817 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000818 return SQLITE_DENY
819 }
820 return SQLITE_OK
821 }
822 catchsql {
823 CREATE TRIGGER r2 DELETE on t2 BEGIN
824 SELECT NULL;
825 END;
826 }
827} {1 {not authorized}}
828do_test auth-1.126 {
829 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000830} {r2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +0000831do_test auth-1.127 {
832 execsql {SELECT name FROM sqlite_master}
833} {t2}
834do_test auth-1.128 {
drhe22a3342003-04-22 20:30:37 +0000835 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000836 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
837 return SQLITE_DENY
838 }
839 return SQLITE_OK
840 }
841 catchsql {
842 CREATE TRIGGER r2 DELETE on t2 BEGIN
843 SELECT NULL;
844 END;
845 }
846} {1 {not authorized}}
847do_test auth-1.129 {
848 execsql {SELECT name FROM sqlite_master}
849} {t2}
850do_test auth-1.130 {
drhe22a3342003-04-22 20:30:37 +0000851 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000852 if {$code=="SQLITE_CREATE_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +0000853 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000854 return SQLITE_IGNORE
855 }
856 return SQLITE_OK
857 }
858 catchsql {
859 CREATE TRIGGER r2 DELETE on t2 BEGIN
860 SELECT NULL;
861 END;
862 }
863} {0 {}}
864do_test auth-1.131 {
865 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000866} {r2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +0000867do_test auth-1.132 {
868 execsql {SELECT name FROM sqlite_master}
869} {t2}
870do_test auth-1.133 {
drhe22a3342003-04-22 20:30:37 +0000871 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000872 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
873 return SQLITE_IGNORE
874 }
875 return SQLITE_OK
876 }
877 catchsql {
878 CREATE TRIGGER r2 DELETE on t2 BEGIN
879 SELECT NULL;
880 END;
881 }
882} {0 {}}
883do_test auth-1.134 {
884 execsql {SELECT name FROM sqlite_master}
885} {t2}
886do_test auth-1.135 {
drhe22a3342003-04-22 20:30:37 +0000887 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000888 if {$code=="SQLITE_CREATE_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +0000889 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000890 return SQLITE_OK
891 }
892 return SQLITE_OK
893 }
894 catchsql {
drhe22a3342003-04-22 20:30:37 +0000895 CREATE TABLE tx(id);
896 CREATE TRIGGER r2 AFTER INSERT ON t2 BEGIN
897 INSERT INTO tx VALUES(NEW.rowid);
drh77ad4e42003-01-14 02:49:27 +0000898 END;
899 }
900} {0 {}}
drhe22a3342003-04-22 20:30:37 +0000901do_test auth-1.136.1 {
drh77ad4e42003-01-14 02:49:27 +0000902 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000903} {r2 t2 main {}}
904do_test auth-1.136.2 {
905 execsql {
906 SELECT name FROM sqlite_master WHERE type='trigger'
907 }
908} {r2}
909do_test auth-1.136.3 {
910 proc auth {code arg1 arg2 arg3 arg4} {
911 lappend ::authargs $code $arg1 $arg2 $arg3 $arg4
912 return SQLITE_OK
913 }
914 set ::authargs {}
915 execsql {
916 INSERT INTO t2 VALUES(1,2,3);
917 }
918 set ::authargs
919} {SQLITE_INSERT t2 {} main {} SQLITE_INSERT tx {} main r2 SQLITE_READ t2 ROWID main r2}
920do_test auth-1.136.4 {
921 execsql {
922 SELECT * FROM tx;
923 }
924} {3}
drh77ad4e42003-01-14 02:49:27 +0000925do_test auth-1.137 {
926 execsql {SELECT name FROM sqlite_master}
drhe22a3342003-04-22 20:30:37 +0000927} {t2 tx r2}
drh77ad4e42003-01-14 02:49:27 +0000928do_test auth-1.138 {
drhe22a3342003-04-22 20:30:37 +0000929 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000930 if {$code=="SQLITE_CREATE_TEMP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +0000931 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000932 return SQLITE_DENY
933 }
934 return SQLITE_OK
935 }
936 catchsql {
937 CREATE TRIGGER r1 DELETE on t1 BEGIN
938 SELECT NULL;
939 END;
940 }
941} {1 {not authorized}}
942do_test auth-1.139 {
943 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000944} {r1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +0000945do_test auth-1.140 {
946 execsql {SELECT name FROM sqlite_temp_master}
947} {t1}
948do_test auth-1.141 {
drhe22a3342003-04-22 20:30:37 +0000949 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000950 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
951 return SQLITE_DENY
952 }
953 return SQLITE_OK
954 }
955 catchsql {
956 CREATE TRIGGER r1 DELETE on t1 BEGIN
957 SELECT NULL;
958 END;
959 }
960} {1 {not authorized}}
961do_test auth-1.142 {
962 execsql {SELECT name FROM sqlite_temp_master}
963} {t1}
964do_test auth-1.143 {
drhe22a3342003-04-22 20:30:37 +0000965 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000966 if {$code=="SQLITE_CREATE_TEMP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +0000967 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000968 return SQLITE_IGNORE
969 }
970 return SQLITE_OK
971 }
972 catchsql {
973 CREATE TRIGGER r1 DELETE on t1 BEGIN
974 SELECT NULL;
975 END;
976 }
977} {0 {}}
978do_test auth-1.144 {
979 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000980} {r1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +0000981do_test auth-1.145 {
982 execsql {SELECT name FROM sqlite_temp_master}
983} {t1}
984do_test auth-1.146 {
drhe22a3342003-04-22 20:30:37 +0000985 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000986 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
987 return SQLITE_IGNORE
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.147 {
998 execsql {SELECT name FROM sqlite_temp_master}
999} {t1}
1000do_test auth-1.148 {
drhe22a3342003-04-22 20:30:37 +00001001 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001002 if {$code=="SQLITE_CREATE_TEMP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +00001003 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001004 return SQLITE_OK
1005 }
1006 return SQLITE_OK
1007 }
1008 catchsql {
1009 CREATE TRIGGER r1 DELETE on t1 BEGIN
1010 SELECT NULL;
1011 END;
1012 }
1013} {0 {}}
1014do_test auth-1.149 {
1015 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001016} {r1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001017do_test auth-1.150 {
1018 execsql {SELECT name FROM sqlite_temp_master}
1019} {t1 r1}
1020
1021do_test auth-1.151 {
drhe22a3342003-04-22 20:30:37 +00001022 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001023 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
1024 return SQLITE_DENY
1025 }
1026 return SQLITE_OK
1027 }
1028 catchsql {DROP TRIGGER r2}
1029} {1 {not authorized}}
1030do_test auth-1.152 {
1031 execsql {SELECT name FROM sqlite_master}
drhe22a3342003-04-22 20:30:37 +00001032} {t2 tx r2}
drh77ad4e42003-01-14 02:49:27 +00001033do_test auth-1.153 {
drhe22a3342003-04-22 20:30:37 +00001034 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001035 if {$code=="SQLITE_DROP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +00001036 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001037 return SQLITE_DENY
1038 }
1039 return SQLITE_OK
1040 }
1041 catchsql {DROP TRIGGER r2}
1042} {1 {not authorized}}
1043do_test auth-1.154 {
1044 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001045} {r2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001046do_test auth-1.155 {
1047 execsql {SELECT name FROM sqlite_master}
drhe22a3342003-04-22 20:30:37 +00001048} {t2 tx r2}
drh77ad4e42003-01-14 02:49:27 +00001049do_test auth-1.156 {
drhe22a3342003-04-22 20:30:37 +00001050 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001051 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
1052 return SQLITE_IGNORE
1053 }
1054 return SQLITE_OK
1055 }
1056 catchsql {DROP TRIGGER r2}
1057} {0 {}}
1058do_test auth-1.157 {
1059 execsql {SELECT name FROM sqlite_master}
drhe22a3342003-04-22 20:30:37 +00001060} {t2 tx r2}
drh77ad4e42003-01-14 02:49:27 +00001061do_test auth-1.158 {
drhe22a3342003-04-22 20:30:37 +00001062 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001063 if {$code=="SQLITE_DROP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +00001064 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001065 return SQLITE_IGNORE
1066 }
1067 return SQLITE_OK
1068 }
1069 catchsql {DROP TRIGGER r2}
1070} {0 {}}
1071do_test auth-1.159 {
1072 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001073} {r2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001074do_test auth-1.160 {
1075 execsql {SELECT name FROM sqlite_master}
drhe22a3342003-04-22 20:30:37 +00001076} {t2 tx r2}
drh77ad4e42003-01-14 02:49:27 +00001077do_test auth-1.161 {
drhe22a3342003-04-22 20:30:37 +00001078 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001079 if {$code=="SQLITE_DROP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +00001080 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001081 return SQLITE_OK
1082 }
1083 return SQLITE_OK
1084 }
1085 catchsql {DROP TRIGGER r2}
1086} {0 {}}
1087do_test auth-1.162 {
1088 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001089} {r2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001090do_test auth-1.163 {
drhe22a3342003-04-22 20:30:37 +00001091 execsql {
1092 DROP TABLE tx;
1093 DELETE FROM t2 WHERE a=1 AND b=2 AND c=3;
1094 SELECT name FROM sqlite_master;
1095 }
drh77ad4e42003-01-14 02:49:27 +00001096} {t2}
1097
1098do_test auth-1.164 {
drhe22a3342003-04-22 20:30:37 +00001099 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001100 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
1101 return SQLITE_DENY
1102 }
1103 return SQLITE_OK
1104 }
1105 catchsql {DROP TRIGGER r1}
1106} {1 {not authorized}}
1107do_test auth-1.165 {
1108 execsql {SELECT name FROM sqlite_temp_master}
1109} {t1 r1}
1110do_test auth-1.166 {
drhe22a3342003-04-22 20:30:37 +00001111 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001112 if {$code=="SQLITE_DROP_TEMP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +00001113 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001114 return SQLITE_DENY
1115 }
1116 return SQLITE_OK
1117 }
1118 catchsql {DROP TRIGGER r1}
1119} {1 {not authorized}}
1120do_test auth-1.167 {
1121 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001122} {r1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001123do_test auth-1.168 {
1124 execsql {SELECT name FROM sqlite_temp_master}
1125} {t1 r1}
1126do_test auth-1.169 {
drhe22a3342003-04-22 20:30:37 +00001127 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001128 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
1129 return SQLITE_IGNORE
1130 }
1131 return SQLITE_OK
1132 }
1133 catchsql {DROP TRIGGER r1}
1134} {0 {}}
1135do_test auth-1.170 {
1136 execsql {SELECT name FROM sqlite_temp_master}
1137} {t1 r1}
1138do_test auth-1.171 {
drhe22a3342003-04-22 20:30:37 +00001139 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001140 if {$code=="SQLITE_DROP_TEMP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +00001141 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001142 return SQLITE_IGNORE
1143 }
1144 return SQLITE_OK
1145 }
1146 catchsql {DROP TRIGGER r1}
1147} {0 {}}
1148do_test auth-1.172 {
1149 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001150} {r1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001151do_test auth-1.173 {
1152 execsql {SELECT name FROM sqlite_temp_master}
1153} {t1 r1}
1154do_test auth-1.174 {
drhe22a3342003-04-22 20:30:37 +00001155 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001156 if {$code=="SQLITE_DROP_TEMP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +00001157 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001158 return SQLITE_OK
1159 }
1160 return SQLITE_OK
1161 }
1162 catchsql {DROP TRIGGER r1}
1163} {0 {}}
1164do_test auth-1.175 {
1165 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001166} {r1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001167do_test auth-1.176 {
1168 execsql {SELECT name FROM sqlite_temp_master}
1169} {t1}
1170
1171do_test auth-1.177 {
drhe22a3342003-04-22 20:30:37 +00001172 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001173 if {$code=="SQLITE_CREATE_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001174 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001175 return SQLITE_DENY
1176 }
1177 return SQLITE_OK
1178 }
1179 catchsql {CREATE INDEX i2 ON t2(a)}
1180} {1 {not authorized}}
1181do_test auth-1.178 {
1182 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001183} {i2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001184do_test auth-1.179 {
1185 execsql {SELECT name FROM sqlite_master}
1186} {t2}
1187do_test auth-1.180 {
drhe22a3342003-04-22 20:30:37 +00001188 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001189 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
1190 return SQLITE_DENY
1191 }
1192 return SQLITE_OK
1193 }
1194 catchsql {CREATE INDEX i2 ON t2(a)}
1195} {1 {not authorized}}
1196do_test auth-1.181 {
1197 execsql {SELECT name FROM sqlite_master}
1198} {t2}
1199do_test auth-1.182 {
drhe22a3342003-04-22 20:30:37 +00001200 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001201 if {$code=="SQLITE_CREATE_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001202 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001203 return SQLITE_IGNORE
1204 }
1205 return SQLITE_OK
1206 }
1207 catchsql {CREATE INDEX i2 ON t2(b)}
1208} {0 {}}
1209do_test auth-1.183 {
1210 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001211} {i2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001212do_test auth-1.184 {
1213 execsql {SELECT name FROM sqlite_master}
1214} {t2}
1215do_test auth-1.185 {
drhe22a3342003-04-22 20:30:37 +00001216 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001217 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
1218 return SQLITE_IGNORE
1219 }
1220 return SQLITE_OK
1221 }
1222 catchsql {CREATE INDEX i2 ON t2(b)}
1223} {0 {}}
1224do_test auth-1.186 {
1225 execsql {SELECT name FROM sqlite_master}
1226} {t2}
1227do_test auth-1.187 {
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_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001230 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001231 return SQLITE_OK
1232 }
1233 return SQLITE_OK
1234 }
1235 catchsql {CREATE INDEX i2 ON t2(a)}
1236} {0 {}}
1237do_test auth-1.188 {
1238 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001239} {i2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001240do_test auth-1.189 {
1241 execsql {SELECT name FROM sqlite_master}
1242} {t2 i2}
1243
1244do_test auth-1.190 {
drhe22a3342003-04-22 20:30:37 +00001245 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001246 if {$code=="SQLITE_CREATE_TEMP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001247 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001248 return SQLITE_DENY
1249 }
1250 return SQLITE_OK
1251 }
1252 catchsql {CREATE INDEX i1 ON t1(a)}
1253} {1 {not authorized}}
1254do_test auth-1.191 {
1255 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001256} {i1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001257do_test auth-1.192 {
1258 execsql {SELECT name FROM sqlite_temp_master}
1259} {t1}
1260do_test auth-1.193 {
drhe22a3342003-04-22 20:30:37 +00001261 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001262 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
1263 return SQLITE_DENY
1264 }
1265 return SQLITE_OK
1266 }
1267 catchsql {CREATE INDEX i1 ON t1(b)}
1268} {1 {not authorized}}
1269do_test auth-1.194 {
1270 execsql {SELECT name FROM sqlite_temp_master}
1271} {t1}
1272do_test auth-1.195 {
drhe22a3342003-04-22 20:30:37 +00001273 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001274 if {$code=="SQLITE_CREATE_TEMP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001275 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001276 return SQLITE_IGNORE
1277 }
1278 return SQLITE_OK
1279 }
1280 catchsql {CREATE INDEX i1 ON t1(b)}
1281} {0 {}}
1282do_test auth-1.196 {
1283 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001284} {i1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001285do_test auth-1.197 {
1286 execsql {SELECT name FROM sqlite_temp_master}
1287} {t1}
1288do_test auth-1.198 {
drhe22a3342003-04-22 20:30:37 +00001289 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001290 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
1291 return SQLITE_IGNORE
1292 }
1293 return SQLITE_OK
1294 }
1295 catchsql {CREATE INDEX i1 ON t1(c)}
1296} {0 {}}
1297do_test auth-1.199 {
1298 execsql {SELECT name FROM sqlite_temp_master}
1299} {t1}
1300do_test auth-1.200 {
drhe22a3342003-04-22 20:30:37 +00001301 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001302 if {$code=="SQLITE_CREATE_TEMP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001303 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001304 return SQLITE_OK
1305 }
1306 return SQLITE_OK
1307 }
1308 catchsql {CREATE INDEX i1 ON t1(a)}
1309} {0 {}}
1310do_test auth-1.201 {
1311 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001312} {i1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001313do_test auth-1.202 {
1314 execsql {SELECT name FROM sqlite_temp_master}
1315} {t1 i1}
1316
1317do_test auth-1.203 {
drhe22a3342003-04-22 20:30:37 +00001318 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001319 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
1320 return SQLITE_DENY
1321 }
1322 return SQLITE_OK
1323 }
1324 catchsql {DROP INDEX i2}
1325} {1 {not authorized}}
1326do_test auth-1.204 {
1327 execsql {SELECT name FROM sqlite_master}
1328} {t2 i2}
1329do_test auth-1.205 {
drhe22a3342003-04-22 20:30:37 +00001330 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001331 if {$code=="SQLITE_DROP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001332 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001333 return SQLITE_DENY
1334 }
1335 return SQLITE_OK
1336 }
1337 catchsql {DROP INDEX i2}
1338} {1 {not authorized}}
1339do_test auth-1.206 {
1340 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001341} {i2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001342do_test auth-1.207 {
1343 execsql {SELECT name FROM sqlite_master}
1344} {t2 i2}
1345do_test auth-1.208 {
drhe22a3342003-04-22 20:30:37 +00001346 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001347 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
1348 return SQLITE_IGNORE
1349 }
1350 return SQLITE_OK
1351 }
1352 catchsql {DROP INDEX i2}
1353} {0 {}}
1354do_test auth-1.209 {
1355 execsql {SELECT name FROM sqlite_master}
1356} {t2 i2}
1357do_test auth-1.210 {
drhe22a3342003-04-22 20:30:37 +00001358 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001359 if {$code=="SQLITE_DROP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001360 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001361 return SQLITE_IGNORE
1362 }
1363 return SQLITE_OK
1364 }
1365 catchsql {DROP INDEX i2}
1366} {0 {}}
1367do_test auth-1.211 {
1368 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001369} {i2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001370do_test auth-1.212 {
1371 execsql {SELECT name FROM sqlite_master}
1372} {t2 i2}
1373do_test auth-1.213 {
drhe22a3342003-04-22 20:30:37 +00001374 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001375 if {$code=="SQLITE_DROP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001376 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001377 return SQLITE_OK
1378 }
1379 return SQLITE_OK
1380 }
1381 catchsql {DROP INDEX i2}
1382} {0 {}}
1383do_test auth-1.214 {
1384 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001385} {i2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001386do_test auth-1.215 {
1387 execsql {SELECT name FROM sqlite_master}
1388} {t2}
1389
1390do_test auth-1.216 {
drhe22a3342003-04-22 20:30:37 +00001391 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001392 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
1393 return SQLITE_DENY
1394 }
1395 return SQLITE_OK
1396 }
1397 catchsql {DROP INDEX i1}
1398} {1 {not authorized}}
1399do_test auth-1.217 {
1400 execsql {SELECT name FROM sqlite_temp_master}
1401} {t1 i1}
1402do_test auth-1.218 {
drhe22a3342003-04-22 20:30:37 +00001403 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001404 if {$code=="SQLITE_DROP_TEMP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001405 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001406 return SQLITE_DENY
1407 }
1408 return SQLITE_OK
1409 }
1410 catchsql {DROP INDEX i1}
1411} {1 {not authorized}}
1412do_test auth-1.219 {
1413 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001414} {i1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001415do_test auth-1.220 {
1416 execsql {SELECT name FROM sqlite_temp_master}
1417} {t1 i1}
1418do_test auth-1.221 {
drhe22a3342003-04-22 20:30:37 +00001419 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001420 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
1421 return SQLITE_IGNORE
1422 }
1423 return SQLITE_OK
1424 }
1425 catchsql {DROP INDEX i1}
1426} {0 {}}
1427do_test auth-1.222 {
1428 execsql {SELECT name FROM sqlite_temp_master}
1429} {t1 i1}
1430do_test auth-1.223 {
drhe22a3342003-04-22 20:30:37 +00001431 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001432 if {$code=="SQLITE_DROP_TEMP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001433 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001434 return SQLITE_IGNORE
1435 }
1436 return SQLITE_OK
1437 }
1438 catchsql {DROP INDEX i1}
1439} {0 {}}
1440do_test auth-1.224 {
1441 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001442} {i1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001443do_test auth-1.225 {
1444 execsql {SELECT name FROM sqlite_temp_master}
1445} {t1 i1}
1446do_test auth-1.226 {
drhe22a3342003-04-22 20:30:37 +00001447 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001448 if {$code=="SQLITE_DROP_TEMP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001449 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001450 return SQLITE_OK
1451 }
1452 return SQLITE_OK
1453 }
1454 catchsql {DROP INDEX i1}
1455} {0 {}}
1456do_test auth-1.227 {
1457 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001458} {i1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001459do_test auth-1.228 {
1460 execsql {SELECT name FROM sqlite_temp_master}
1461} {t1}
1462
1463do_test auth-1.229 {
drhe22a3342003-04-22 20:30:37 +00001464 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001465 if {$code=="SQLITE_PRAGMA"} {
drhe22a3342003-04-22 20:30:37 +00001466 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001467 return SQLITE_DENY
1468 }
1469 return SQLITE_OK
1470 }
1471 catchsql {PRAGMA full_column_names=on}
1472} {1 {not authorized}}
1473do_test auth-1.230 {
1474 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001475} {full_column_names on {} {}}
drh77ad4e42003-01-14 02:49:27 +00001476do_test auth-1.231 {
1477 execsql2 {SELECT a FROM t2}
1478} {a 11 a 7}
1479do_test auth-1.232 {
drhe22a3342003-04-22 20:30:37 +00001480 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001481 if {$code=="SQLITE_PRAGMA"} {
drhe22a3342003-04-22 20:30:37 +00001482 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001483 return SQLITE_IGNORE
1484 }
1485 return SQLITE_OK
1486 }
1487 catchsql {PRAGMA full_column_names=on}
1488} {0 {}}
1489do_test auth-1.233 {
1490 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001491} {full_column_names on {} {}}
drh77ad4e42003-01-14 02:49:27 +00001492do_test auth-1.234 {
1493 execsql2 {SELECT a FROM t2}
1494} {a 11 a 7}
1495do_test auth-1.235 {
drhe22a3342003-04-22 20:30:37 +00001496 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001497 if {$code=="SQLITE_PRAGMA"} {
drhe22a3342003-04-22 20:30:37 +00001498 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001499 return SQLITE_OK
1500 }
1501 return SQLITE_OK
1502 }
1503 catchsql {PRAGMA full_column_names=on}
1504} {0 {}}
1505do_test auth-1.236 {
1506 execsql2 {SELECT a FROM t2}
1507} {t2.a 11 t2.a 7}
1508do_test auth-1.237 {
drhe22a3342003-04-22 20:30:37 +00001509 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001510 if {$code=="SQLITE_PRAGMA"} {
drhe22a3342003-04-22 20:30:37 +00001511 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001512 return SQLITE_OK
1513 }
1514 return SQLITE_OK
1515 }
1516 catchsql {PRAGMA full_column_names=OFF}
1517} {0 {}}
1518do_test auth-1.238 {
1519 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001520} {full_column_names OFF {} {}}
drh77ad4e42003-01-14 02:49:27 +00001521do_test auth-1.239 {
1522 execsql2 {SELECT a FROM t2}
1523} {a 11 a 7}
drhe5f9c642003-01-13 23:27:31 +00001524
drh2c3831c2003-01-14 13:48:20 +00001525do_test auth-1.240 {
drhe22a3342003-04-22 20:30:37 +00001526 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001527 if {$code=="SQLITE_TRANSACTION"} {
drhe22a3342003-04-22 20:30:37 +00001528 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh2c3831c2003-01-14 13:48:20 +00001529 return SQLITE_DENY
1530 }
1531 return SQLITE_OK
1532 }
1533 catchsql {BEGIN}
1534} {1 {not authorized}}
1535do_test auth-1.241 {
1536 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001537} {BEGIN {} {} {}}
drh2c3831c2003-01-14 13:48:20 +00001538do_test auth-1.242 {
drhe22a3342003-04-22 20:30:37 +00001539 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001540 if {$code=="SQLITE_TRANSACTION" && $arg1!="BEGIN"} {
drhe22a3342003-04-22 20:30:37 +00001541 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh2c3831c2003-01-14 13:48:20 +00001542 return SQLITE_DENY
1543 }
1544 return SQLITE_OK
1545 }
1546 catchsql {BEGIN; INSERT INTO t2 VALUES(44,55,66); COMMIT}
1547} {1 {not authorized}}
1548do_test auth-1.243 {
1549 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001550} {COMMIT {} {} {}}
drh2c3831c2003-01-14 13:48:20 +00001551do_test auth-1.244 {
1552 execsql {SELECT * FROM t2}
1553} {11 2 33 7 8 9 44 55 66}
1554do_test auth-1.245 {
1555 catchsql {ROLLBACK}
1556} {1 {not authorized}}
1557do_test auth-1.246 {
1558 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001559} {ROLLBACK {} {} {}}
drh2c3831c2003-01-14 13:48:20 +00001560do_test auth-1.247 {
1561 catchsql {END TRANSACTION}
1562} {1 {not authorized}}
1563do_test auth-1.248 {
1564 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001565} {COMMIT {} {} {}}
drh2c3831c2003-01-14 13:48:20 +00001566do_test auth-1.249 {
drhe22a3342003-04-22 20:30:37 +00001567 db authorizer {}
drh2c3831c2003-01-14 13:48:20 +00001568 catchsql {ROLLBACK}
1569} {0 {}}
1570do_test auth-1.250 {
1571 execsql {SELECT * FROM t2}
1572} {11 2 33 7 8 9}
1573
drh81e293b2003-06-06 19:00:42 +00001574# ticket #340 - authorization for ATTACH and DETACH.
1575#
1576do_test auth-1.251 {
1577 db authorizer ::auth
1578 proc auth {code arg1 arg2 arg3 arg4} {
1579 if {$code=="SQLITE_ATTACH"} {
1580 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
1581 }
1582 return SQLITE_OK
1583 }
1584 catchsql {
1585 ATTACH DATABASE ':memory:' AS test1
1586 }
1587} {0 {}}
1588do_test auth-1.252 {
1589 set ::authargs
1590} {:memory: {} {} {}}
1591do_test auth-1.253 {
1592 catchsql {DETACH DATABASE test1}
1593 proc auth {code arg1 arg2 arg3 arg4} {
1594 if {$code=="SQLITE_ATTACH"} {
1595 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
1596 return SQLITE_DENY
1597 }
1598 return SQLITE_OK
1599 }
1600 catchsql {
1601 ATTACH DATABASE ':memory:' AS test1;
1602 }
1603} {1 {not authorized}}
1604do_test auth-1.254 {
1605 lindex [execsql {PRAGMA database_list}] 7
1606} {}
1607do_test auth-1.255 {
1608 catchsql {DETACH DATABASE test1}
1609 proc auth {code arg1 arg2 arg3 arg4} {
1610 if {$code=="SQLITE_ATTACH"} {
1611 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
1612 return SQLITE_IGNORE
1613 }
1614 return SQLITE_OK
1615 }
1616 catchsql {
1617 ATTACH DATABASE ':memory:' AS test1;
1618 }
1619} {0 {}}
1620do_test auth-1.256 {
1621 lindex [execsql {PRAGMA database_list}] 7
1622} {}
1623do_test auth-1.257 {
1624 proc auth {code arg1 arg2 arg3 arg4} {
1625 if {$code=="SQLITE_DETACH"} {
1626 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
1627 return SQLITE_OK
1628 }
1629 return SQLITE_OK
1630 }
1631 execsql {ATTACH DATABASE ':memory:' AS test1}
1632 catchsql {
1633 DETACH DATABASE test1;
1634 }
1635} {0 {}}
1636do_test auth-1.258 {
1637 lindex [execsql {PRAGMA database_list}] 7
1638} {}
1639do_test auth-1.259 {
1640 execsql {ATTACH DATABASE ':memory:' AS test1}
1641 proc auth {code arg1 arg2 arg3 arg4} {
1642 if {$code=="SQLITE_DETACH"} {
1643 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
1644 return SQLITE_IGNORE
1645 }
1646 return SQLITE_OK
1647 }
1648 catchsql {
1649 DETACH DATABASE test1;
1650 }
1651} {0 {}}
1652do_test auth-1.260 {
1653 lindex [execsql {PRAGMA database_list}] 7
1654} {test1}
1655do_test auth-1.261 {
1656 proc auth {code arg1 arg2 arg3 arg4} {
1657 if {$code=="SQLITE_DETACH"} {
1658 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
1659 return SQLITE_DENY
1660 }
1661 return SQLITE_OK
1662 }
1663 catchsql {
1664 DETACH DATABASE test1;
1665 }
1666} {1 {not authorized}}
1667do_test auth-1.262 {
1668 lindex [execsql {PRAGMA database_list}] 7
1669} {test1}
1670db authorizer {}
1671execsql {DETACH DATABASE test1}
danielk19771c8c23c2004-11-12 15:53:37 +00001672db authorizer ::auth
1673
danielk1977215e64d2004-11-22 03:34:21 +00001674# Authorization for ALTER TABLE. These tests are omitted if the library
1675# was built without ALTER TABLE support.
1676ifcapable altertable {
1677
danielk19771c8c23c2004-11-12 15:53:37 +00001678do_test auth-1.263 {
1679 proc auth {code arg1 arg2 arg3 arg4} {
1680 if {$code=="SQLITE_ALTER_TABLE"} {
1681 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
1682 return SQLITE_OK
1683 }
1684 return SQLITE_OK
1685 }
1686 catchsql {
1687 ALTER TABLE t1 RENAME TO t1x
1688 }
1689} {0 {}}
1690do_test auth-1.264 {
1691 execsql {SELECT name FROM sqlite_temp_master WHERE type='table'}
1692} {t1x}
1693do_test auth-1.265 {
1694 set authargs
1695} {temp t1 {} {}}
1696do_test auth-1.266 {
1697 proc auth {code arg1 arg2 arg3 arg4} {
1698 if {$code=="SQLITE_ALTER_TABLE"} {
1699 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
1700 return SQLITE_IGNORE
1701 }
1702 return SQLITE_OK
1703 }
1704 catchsql {
1705 ALTER TABLE t1x RENAME TO t1
1706 }
1707} {0 {}}
1708do_test auth-1.267 {
1709 execsql {SELECT name FROM sqlite_temp_master WHERE type='table'}
1710} {t1x}
1711do_test auth-1.268 {
1712 set authargs
1713} {temp t1x {} {}}
1714do_test auth-1.269 {
1715 proc auth {code arg1 arg2 arg3 arg4} {
1716 if {$code=="SQLITE_ALTER_TABLE"} {
1717 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
1718 return SQLITE_DENY
1719 }
1720 return SQLITE_OK
1721 }
1722 catchsql {
1723 ALTER TABLE t1x RENAME TO t1
1724 }
1725} {1 {not authorized}}
1726do_test auth-1.270 {
1727 execsql {SELECT name FROM sqlite_temp_master WHERE type='table'}
1728} {t1x}
1729do_test auth-1.271 {
1730 set authargs
1731} {temp t1x {} {}}
1732db authorizer {}
1733catchsql {ALTER TABLE t1x RENAME TO t1}
1734db authorizer ::auth
1735do_test auth-1.272 {
1736 proc auth {code arg1 arg2 arg3 arg4} {
1737 if {$code=="SQLITE_ALTER_TABLE"} {
1738 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
1739 return SQLITE_OK
1740 }
1741 return SQLITE_OK
1742 }
1743 catchsql {
1744 ALTER TABLE t2 RENAME TO t2x
1745 }
1746} {0 {}}
1747do_test auth-1.273 {
1748 execsql {SELECT name FROM sqlite_master WHERE type='table'}
1749} {t2x}
1750do_test auth-1.274 {
1751 set authargs
1752} {main t2 {} {}}
1753do_test auth-1.275 {
1754 proc auth {code arg1 arg2 arg3 arg4} {
1755 if {$code=="SQLITE_ALTER_TABLE"} {
1756 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
1757 return SQLITE_IGNORE
1758 }
1759 return SQLITE_OK
1760 }
1761 catchsql {
1762 ALTER TABLE t2x RENAME TO t2
1763 }
1764} {0 {}}
1765do_test auth-1.276 {
1766 execsql {SELECT name FROM sqlite_master WHERE type='table'}
1767} {t2x}
1768do_test auth-1.277 {
1769 set authargs
1770} {main t2x {} {}}
1771do_test auth-1.278 {
1772 proc auth {code arg1 arg2 arg3 arg4} {
1773 if {$code=="SQLITE_ALTER_TABLE"} {
1774 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
1775 return SQLITE_DENY
1776 }
1777 return SQLITE_OK
1778 }
1779 catchsql {
1780 ALTER TABLE t2x RENAME TO t2
1781 }
1782} {1 {not authorized}}
1783do_test auth-1.279 {
1784 execsql {SELECT name FROM sqlite_master WHERE type='table'}
1785} {t2x}
1786do_test auth-1.280 {
1787 set authargs
1788} {main t2x {} {}}
1789db authorizer {}
1790catchsql {ALTER TABLE t2x RENAME TO t2}
drh81e293b2003-06-06 19:00:42 +00001791
danielk1977215e64d2004-11-22 03:34:21 +00001792} ;# ifcapable altertable
1793
drh81e293b2003-06-06 19:00:42 +00001794
drh2c3831c2003-01-14 13:48:20 +00001795do_test auth-2.1 {
drhe22a3342003-04-22 20:30:37 +00001796 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001797 if {$code=="SQLITE_READ" && $arg1=="t3" && $arg2=="x"} {
1798 return SQLITE_DENY
1799 }
1800 return SQLITE_OK
1801 }
drhe22a3342003-04-22 20:30:37 +00001802 db authorizer ::auth
drh2c3831c2003-01-14 13:48:20 +00001803 execsql {CREATE TABLE t3(x INTEGER PRIMARY KEY, y, z)}
1804 catchsql {SELECT * FROM t3}
1805} {1 {access to t3.x is prohibited}}
1806do_test auth-2.1 {
1807 catchsql {SELECT y,z FROM t3}
1808} {0 {}}
1809do_test auth-2.2 {
1810 catchsql {SELECT ROWID,y,z FROM t3}
1811} {1 {access to t3.x is prohibited}}
1812do_test auth-2.3 {
1813 catchsql {SELECT OID,y,z FROM t3}
1814} {1 {access to t3.x is prohibited}}
1815do_test auth-2.4 {
drhe22a3342003-04-22 20:30:37 +00001816 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001817 if {$code=="SQLITE_READ" && $arg1=="t3" && $arg2=="x"} {
1818 return SQLITE_IGNORE
1819 }
1820 return SQLITE_OK
1821 }
1822 execsql {INSERT INTO t3 VALUES(44,55,66)}
1823 catchsql {SELECT * FROM t3}
1824} {0 {{} 55 66}}
1825do_test auth-2.5 {
1826 catchsql {SELECT rowid,y,z FROM t3}
1827} {0 {{} 55 66}}
1828do_test auth-2.6 {
drhe22a3342003-04-22 20:30:37 +00001829 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001830 if {$code=="SQLITE_READ" && $arg1=="t3" && $arg2=="ROWID"} {
1831 return SQLITE_IGNORE
1832 }
1833 return SQLITE_OK
1834 }
1835 catchsql {SELECT * FROM t3}
1836} {0 {44 55 66}}
1837do_test auth-2.7 {
1838 catchsql {SELECT ROWID,y,z FROM t3}
1839} {0 {44 55 66}}
1840do_test auth-2.8 {
drhe22a3342003-04-22 20:30:37 +00001841 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001842 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="ROWID"} {
1843 return SQLITE_IGNORE
1844 }
1845 return SQLITE_OK
1846 }
1847 catchsql {SELECT ROWID,b,c FROM t2}
1848} {0 {{} 2 33 {} 8 9}}
drhdcd997e2003-01-31 17:21:49 +00001849do_test auth-2.9.1 {
drhe22a3342003-04-22 20:30:37 +00001850 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001851 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="ROWID"} {
1852 return bogus
1853 }
1854 return SQLITE_OK
1855 }
1856 catchsql {SELECT ROWID,b,c FROM t2}
1857} {1 {illegal return value (999) from the authorization function - should be SQLITE_OK, SQLITE_IGNORE, or SQLITE_DENY}}
drhdcd997e2003-01-31 17:21:49 +00001858do_test auth-2.9.2 {
1859 db errorcode
drhc60d0442004-09-30 13:43:13 +00001860} {1}
drh2c3831c2003-01-14 13:48:20 +00001861do_test auth-2.10 {
drhe22a3342003-04-22 20:30:37 +00001862 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001863 if {$code=="SQLITE_SELECT"} {
1864 return bogus
1865 }
1866 return SQLITE_OK
1867 }
1868 catchsql {SELECT ROWID,b,c FROM t2}
1869} {1 {illegal return value (1) from the authorization function - should be SQLITE_OK, SQLITE_IGNORE, or SQLITE_DENY}}
drh6f8c91c2003-12-07 00:24:35 +00001870do_test auth-2.11.1 {
drhe22a3342003-04-22 20:30:37 +00001871 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001872 if {$code=="SQLITE_READ" && $arg2=="a"} {
1873 return SQLITE_IGNORE
1874 }
1875 return SQLITE_OK
1876 }
1877 catchsql {SELECT * FROM t2, t3}
1878} {0 {{} 2 33 44 55 66 {} 8 9 44 55 66}}
drh6f8c91c2003-12-07 00:24:35 +00001879do_test auth-2.11.2 {
drhe22a3342003-04-22 20:30:37 +00001880 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001881 if {$code=="SQLITE_READ" && $arg2=="x"} {
1882 return SQLITE_IGNORE
1883 }
1884 return SQLITE_OK
1885 }
1886 catchsql {SELECT * FROM t2, t3}
1887} {0 {11 2 33 {} 55 66 7 8 9 {} 55 66}}
drhe5f9c642003-01-13 23:27:31 +00001888
drh027850b2003-04-16 20:24:52 +00001889# Make sure the OLD and NEW pseudo-tables of a trigger get authorized.
1890#
1891do_test auth-3.1 {
drhe22a3342003-04-22 20:30:37 +00001892 proc auth {code arg1 arg2 arg3 arg4} {
drh027850b2003-04-16 20:24:52 +00001893 return SQLITE_OK
1894 }
1895 execsql {
1896 CREATE TABLE tx(a1,a2,b1,b2,c1,c2);
1897 CREATE TRIGGER r1 AFTER UPDATE ON t2 FOR EACH ROW BEGIN
1898 INSERT INTO tx VALUES(OLD.a,NEW.a,OLD.b,NEW.b,OLD.c,NEW.c);
1899 END;
1900 UPDATE t2 SET a=a+1;
1901 SELECT * FROM tx;
1902 }
1903} {11 12 2 2 33 33 7 8 8 8 9 9}
1904do_test auth-3.2 {
drhe22a3342003-04-22 20:30:37 +00001905 proc auth {code arg1 arg2 arg3 arg4} {
drh027850b2003-04-16 20:24:52 +00001906 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="c"} {
1907 return SQLITE_IGNORE
1908 }
1909 return SQLITE_OK
1910 }
1911 execsql {
1912 DELETE FROM tx;
1913 UPDATE t2 SET a=a+100;
1914 SELECT * FROM tx;
1915 }
1916} {12 112 2 2 {} {} 8 108 8 8 {} {}}
1917
drh85e20962003-04-25 17:52:11 +00001918# Make sure the names of views and triggers are passed on on arg4.
1919#
1920do_test auth-4.1 {
1921 proc auth {code arg1 arg2 arg3 arg4} {
1922 lappend ::authargs $code $arg1 $arg2 $arg3 $arg4
1923 return SQLITE_OK
1924 }
1925 set authargs {}
1926 execsql {
1927 UPDATE t2 SET a=a+1;
1928 }
1929 set authargs
1930} [list \
1931 SQLITE_READ t2 a main {} \
1932 SQLITE_UPDATE t2 a main {} \
1933 SQLITE_INSERT tx {} main r1 \
1934 SQLITE_READ t2 a main r1 \
1935 SQLITE_READ t2 a main r1 \
1936 SQLITE_READ t2 b main r1 \
1937 SQLITE_READ t2 b main r1 \
1938 SQLITE_READ t2 c main r1 \
1939 SQLITE_READ t2 c main r1]
danielk19770fa8ddb2004-11-22 08:43:32 +00001940
1941ifcapable view {
drh85e20962003-04-25 17:52:11 +00001942do_test auth-4.2 {
1943 execsql {
1944 CREATE VIEW v1 AS SELECT a+b AS x FROM t2;
1945 CREATE TABLE v1chng(x1,x2);
1946 CREATE TRIGGER r2 INSTEAD OF UPDATE ON v1 BEGIN
1947 INSERT INTO v1chng VALUES(OLD.x,NEW.x);
1948 END;
1949 SELECT * FROM v1;
1950 }
1951} {115 117}
1952do_test auth-4.3 {
1953 set authargs {}
1954 execsql {
1955 UPDATE v1 SET x=1 WHERE x=117
1956 }
1957 set authargs
1958} [list \
1959 SQLITE_UPDATE v1 x main {} \
1960 SQLITE_READ v1 x main {} \
1961 SQLITE_SELECT {} {} {} v1 \
1962 SQLITE_READ t2 a main v1 \
1963 SQLITE_READ t2 b main v1 \
1964 SQLITE_INSERT v1chng {} main r2 \
1965 SQLITE_READ v1 x main r2 \
1966 SQLITE_READ v1 x main r2]
1967do_test auth-4.4 {
1968 execsql {
1969 CREATE TRIGGER r3 INSTEAD OF DELETE ON v1 BEGIN
1970 INSERT INTO v1chng VALUES(OLD.x,NULL);
1971 END;
1972 SELECT * FROM v1;
1973 }
1974} {115 117}
1975do_test auth-4.5 {
1976 set authargs {}
1977 execsql {
1978 DELETE FROM v1 WHERE x=117
1979 }
1980 set authargs
1981} [list \
1982 SQLITE_DELETE v1 {} main {} \
1983 SQLITE_READ v1 x main {} \
1984 SQLITE_SELECT {} {} {} v1 \
1985 SQLITE_READ t2 a main v1 \
1986 SQLITE_READ t2 b main v1 \
1987 SQLITE_INSERT v1chng {} main r3 \
1988 SQLITE_READ v1 x main r3]
drh1962bda2003-01-12 19:33:52 +00001989
danielk19770fa8ddb2004-11-22 08:43:32 +00001990} ;# ifcapable view
1991
drh1962bda2003-01-12 19:33:52 +00001992finish_test