blob: c88415792e735621674c4d7c234a9027b9ce9ef6 [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#
drh6f8c91c2003-12-07 00:24:35 +000015# $Id: auth.test,v 1.12 2003/12/07 00:24:35 drh Exp $
drh1962bda2003-01-12 19:33:52 +000016#
17
18set testdir [file dirname $argv0]
19source $testdir/tester.tcl
20
drhe22a3342003-04-22 20:30:37 +000021# disable this test if the SQLITE_OMIT_AUTHORIZATION macro is
22# defined during compilation.
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
420set f [open data1.txt w]
421puts $f "7:8:9"
422close $f
423do_test auth-1.54 {
drhe22a3342003-04-22 20:30:37 +0000424 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000425 if {$code=="SQLITE_COPY"} {
drhe22a3342003-04-22 20:30:37 +0000426 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000427 return SQLITE_DENY
428 }
429 return SQLITE_OK
430 }
431 catchsql {COPY t2 FROM 'data1.txt' USING DELIMITERS ':'}
432} {1 {not authorized}}
433do_test auth-1.55 {
434 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000435} {t2 data1.txt main {}}
drh77ad4e42003-01-14 02:49:27 +0000436do_test auth-1.56 {
437 execsql {SELECT * FROM t2}
438} {11 2 33}
439do_test auth-1.57 {
drhe22a3342003-04-22 20:30:37 +0000440 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000441 if {$code=="SQLITE_COPY"} {
drhe22a3342003-04-22 20:30:37 +0000442 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000443 return SQLITE_IGNORE
444 }
445 return SQLITE_OK
446 }
447 catchsql {COPY t2 FROM 'data1.txt' USING DELIMITERS ':'}
448} {0 {}}
449do_test auth-1.58 {
450 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000451} {t2 data1.txt main {}}
drh77ad4e42003-01-14 02:49:27 +0000452do_test auth-1.59 {
453 execsql {SELECT * FROM t2}
454} {11 2 33}
455do_test auth-1.60 {
drhe22a3342003-04-22 20:30:37 +0000456 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000457 if {$code=="SQLITE_COPY"} {
drhe22a3342003-04-22 20:30:37 +0000458 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000459 return SQLITE_OK
460 }
461 return SQLITE_OK
462 }
463 catchsql {COPY t2 FROM 'data1.txt' USING DELIMITERS ':'}
464} {0 {}}
465do_test auth-1.61 {
466 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000467} {t2 data1.txt main {}}
drh77ad4e42003-01-14 02:49:27 +0000468do_test auth-1.62 {
469 execsql {SELECT * FROM t2}
470} {11 2 33 7 8 9}
471
472do_test auth-1.63 {
drhe22a3342003-04-22 20:30:37 +0000473 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000474 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
475 return SQLITE_DENY
476 }
477 return SQLITE_OK
478 }
479 catchsql {DROP TABLE t2}
480} {1 {not authorized}}
481do_test auth-1.64 {
482 execsql {SELECT name FROM sqlite_master}
483} {t2}
484do_test auth-1.65 {
drhe22a3342003-04-22 20:30:37 +0000485 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000486 if {$code=="SQLITE_DELETE" && $arg1=="t2"} {
487 return SQLITE_DENY
488 }
489 return SQLITE_OK
490 }
491 catchsql {DROP TABLE t2}
492} {1 {not authorized}}
493do_test auth-1.66 {
494 execsql {SELECT name FROM sqlite_master}
495} {t2}
496do_test auth-1.67 {
drhe22a3342003-04-22 20:30:37 +0000497 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000498 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
499 return SQLITE_DENY
500 }
501 return SQLITE_OK
502 }
503 catchsql {DROP TABLE t1}
504} {1 {not authorized}}
505do_test auth-1.68 {
506 execsql {SELECT name FROM sqlite_temp_master}
507} {t1}
508do_test auth-1.69 {
drhe22a3342003-04-22 20:30:37 +0000509 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000510 if {$code=="SQLITE_DELETE" && $arg1=="t1"} {
511 return SQLITE_DENY
512 }
513 return SQLITE_OK
514 }
515 catchsql {DROP TABLE t1}
516} {1 {not authorized}}
517do_test auth-1.70 {
518 execsql {SELECT name FROM sqlite_temp_master}
519} {t1}
520
521do_test auth-1.71 {
drhe22a3342003-04-22 20:30:37 +0000522 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000523 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
524 return SQLITE_IGNORE
525 }
526 return SQLITE_OK
527 }
528 catchsql {DROP TABLE t2}
529} {0 {}}
530do_test auth-1.72 {
531 execsql {SELECT name FROM sqlite_master}
532} {t2}
533do_test auth-1.73 {
drhe22a3342003-04-22 20:30:37 +0000534 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000535 if {$code=="SQLITE_DELETE" && $arg1=="t2"} {
536 return SQLITE_IGNORE
537 }
538 return SQLITE_OK
539 }
540 catchsql {DROP TABLE t2}
541} {0 {}}
542do_test auth-1.74 {
543 execsql {SELECT name FROM sqlite_master}
544} {t2}
545do_test auth-1.75 {
drhe22a3342003-04-22 20:30:37 +0000546 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000547 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
548 return SQLITE_IGNORE
549 }
550 return SQLITE_OK
551 }
552 catchsql {DROP TABLE t1}
553} {0 {}}
554do_test auth-1.76 {
555 execsql {SELECT name FROM sqlite_temp_master}
556} {t1}
557do_test auth-1.77 {
drhe22a3342003-04-22 20:30:37 +0000558 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000559 if {$code=="SQLITE_DELETE" && $arg1=="t1"} {
560 return SQLITE_IGNORE
561 }
562 return SQLITE_OK
563 }
564 catchsql {DROP TABLE t1}
565} {0 {}}
566do_test auth-1.78 {
567 execsql {SELECT name FROM sqlite_temp_master}
568} {t1}
569
570do_test auth-1.79 {
drhe22a3342003-04-22 20:30:37 +0000571 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000572 if {$code=="SQLITE_CREATE_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000573 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000574 return SQLITE_DENY
575 }
576 return SQLITE_OK
577 }
578 catchsql {CREATE VIEW v1 AS SELECT a+1,b+1 FROM t2}
579} {1 {not authorized}}
580do_test auth-1.80 {
581 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000582} {v1 {} main {}}
drh77ad4e42003-01-14 02:49:27 +0000583do_test auth-1.81 {
584 execsql {SELECT name FROM sqlite_master}
585} {t2}
586do_test auth-1.82 {
drhe22a3342003-04-22 20:30:37 +0000587 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000588 if {$code=="SQLITE_CREATE_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000589 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000590 return SQLITE_IGNORE
591 }
592 return SQLITE_OK
593 }
594 catchsql {CREATE VIEW v1 AS SELECT a+1,b+1 FROM t2}
595} {0 {}}
596do_test auth-1.83 {
597 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000598} {v1 {} main {}}
drh77ad4e42003-01-14 02:49:27 +0000599do_test auth-1.84 {
600 execsql {SELECT name FROM sqlite_master}
601} {t2}
602
603do_test auth-1.85 {
drhe22a3342003-04-22 20:30:37 +0000604 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000605 if {$code=="SQLITE_CREATE_TEMP_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000606 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000607 return SQLITE_DENY
608 }
609 return SQLITE_OK
610 }
611 catchsql {CREATE TEMPORARY VIEW v1 AS SELECT a+1,b+1 FROM t2}
612} {1 {not authorized}}
613do_test auth-1.86 {
614 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000615} {v1 {} temp {}}
drh77ad4e42003-01-14 02:49:27 +0000616do_test auth-1.87 {
617 execsql {SELECT name FROM sqlite_temp_master}
618} {t1}
619do_test auth-1.88 {
drhe22a3342003-04-22 20:30:37 +0000620 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000621 if {$code=="SQLITE_CREATE_TEMP_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000622 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000623 return SQLITE_IGNORE
624 }
625 return SQLITE_OK
626 }
627 catchsql {CREATE TEMPORARY VIEW v1 AS SELECT a+1,b+1 FROM t2}
628} {0 {}}
629do_test auth-1.89 {
630 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000631} {v1 {} temp {}}
drh77ad4e42003-01-14 02:49:27 +0000632do_test auth-1.90 {
633 execsql {SELECT name FROM sqlite_temp_master}
634} {t1}
635
636do_test auth-1.91 {
drhe22a3342003-04-22 20:30:37 +0000637 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000638 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
639 return SQLITE_DENY
640 }
641 return SQLITE_OK
642 }
643 catchsql {CREATE VIEW v1 AS SELECT a+1,b+1 FROM t2}
644} {1 {not authorized}}
645do_test auth-1.92 {
646 execsql {SELECT name FROM sqlite_master}
647} {t2}
648do_test auth-1.93 {
drhe22a3342003-04-22 20:30:37 +0000649 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000650 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
651 return SQLITE_IGNORE
652 }
653 return SQLITE_OK
654 }
655 catchsql {CREATE VIEW v1 AS SELECT a+1,b+1 FROM t2}
656} {0 {}}
657do_test auth-1.94 {
658 execsql {SELECT name FROM sqlite_master}
659} {t2}
660
661do_test auth-1.95 {
drhe22a3342003-04-22 20:30:37 +0000662 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000663 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
664 return SQLITE_DENY
665 }
666 return SQLITE_OK
667 }
668 catchsql {CREATE TEMPORARY VIEW v1 AS SELECT a+1,b+1 FROM t2}
669} {1 {not authorized}}
670do_test auth-1.96 {
671 execsql {SELECT name FROM sqlite_temp_master}
672} {t1}
673do_test auth-1.97 {
drhe22a3342003-04-22 20:30:37 +0000674 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000675 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
676 return SQLITE_IGNORE
677 }
678 return SQLITE_OK
679 }
680 catchsql {CREATE TEMPORARY VIEW v1 AS SELECT a+1,b+1 FROM t2}
681} {0 {}}
682do_test auth-1.98 {
683 execsql {SELECT name FROM sqlite_temp_master}
684} {t1}
685
686do_test auth-1.99 {
drhe22a3342003-04-22 20:30:37 +0000687 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000688 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
689 return SQLITE_DENY
690 }
691 return SQLITE_OK
692 }
693 catchsql {
694 CREATE VIEW v2 AS SELECT a+1,b+1 FROM t2;
695 DROP VIEW v2
696 }
697} {1 {not authorized}}
698do_test auth-1.100 {
699 execsql {SELECT name FROM sqlite_master}
700} {t2 v2}
701do_test auth-1.101 {
drhe22a3342003-04-22 20:30:37 +0000702 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000703 if {$code=="SQLITE_DROP_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000704 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000705 return SQLITE_DENY
706 }
707 return SQLITE_OK
708 }
709 catchsql {DROP VIEW v2}
710} {1 {not authorized}}
711do_test auth-1.102 {
712 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000713} {v2 {} main {}}
drh77ad4e42003-01-14 02:49:27 +0000714do_test auth-1.103 {
715 execsql {SELECT name FROM sqlite_master}
716} {t2 v2}
717do_test auth-1.104 {
drhe22a3342003-04-22 20:30:37 +0000718 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000719 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
720 return SQLITE_IGNORE
721 }
722 return SQLITE_OK
723 }
724 catchsql {DROP VIEW v2}
725} {0 {}}
726do_test auth-1.105 {
727 execsql {SELECT name FROM sqlite_master}
728} {t2 v2}
729do_test auth-1.106 {
drhe22a3342003-04-22 20:30:37 +0000730 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000731 if {$code=="SQLITE_DROP_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000732 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000733 return SQLITE_IGNORE
734 }
735 return SQLITE_OK
736 }
737 catchsql {DROP VIEW v2}
738} {0 {}}
739do_test auth-1.107 {
740 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000741} {v2 {} main {}}
drh77ad4e42003-01-14 02:49:27 +0000742do_test auth-1.108 {
743 execsql {SELECT name FROM sqlite_master}
744} {t2 v2}
745do_test auth-1.109 {
drhe22a3342003-04-22 20:30:37 +0000746 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000747 if {$code=="SQLITE_DROP_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000748 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000749 return SQLITE_OK
750 }
751 return SQLITE_OK
752 }
753 catchsql {DROP VIEW v2}
754} {0 {}}
755do_test auth-1.110 {
756 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000757} {v2 {} main {}}
drh77ad4e42003-01-14 02:49:27 +0000758do_test auth-1.111 {
759 execsql {SELECT name FROM sqlite_master}
760} {t2}
761
762
763do_test auth-1.112 {
drhe22a3342003-04-22 20:30:37 +0000764 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000765 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
766 return SQLITE_DENY
767 }
768 return SQLITE_OK
769 }
770 catchsql {
771 CREATE TEMP VIEW v1 AS SELECT a+1,b+1 FROM t1;
772 DROP VIEW v1
773 }
774} {1 {not authorized}}
775do_test auth-1.113 {
776 execsql {SELECT name FROM sqlite_temp_master}
777} {t1 v1}
778do_test auth-1.114 {
drhe22a3342003-04-22 20:30:37 +0000779 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000780 if {$code=="SQLITE_DROP_TEMP_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000781 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000782 return SQLITE_DENY
783 }
784 return SQLITE_OK
785 }
786 catchsql {DROP VIEW v1}
787} {1 {not authorized}}
788do_test auth-1.115 {
789 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000790} {v1 {} temp {}}
drh77ad4e42003-01-14 02:49:27 +0000791do_test auth-1.116 {
792 execsql {SELECT name FROM sqlite_temp_master}
793} {t1 v1}
794do_test auth-1.117 {
drhe22a3342003-04-22 20:30:37 +0000795 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000796 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
797 return SQLITE_IGNORE
798 }
799 return SQLITE_OK
800 }
801 catchsql {DROP VIEW v1}
802} {0 {}}
803do_test auth-1.118 {
804 execsql {SELECT name FROM sqlite_temp_master}
805} {t1 v1}
806do_test auth-1.119 {
drhe22a3342003-04-22 20:30:37 +0000807 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000808 if {$code=="SQLITE_DROP_TEMP_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000809 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000810 return SQLITE_IGNORE
811 }
812 return SQLITE_OK
813 }
814 catchsql {DROP VIEW v1}
815} {0 {}}
816do_test auth-1.120 {
817 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000818} {v1 {} temp {}}
drh77ad4e42003-01-14 02:49:27 +0000819do_test auth-1.121 {
820 execsql {SELECT name FROM sqlite_temp_master}
821} {t1 v1}
822do_test auth-1.122 {
drhe22a3342003-04-22 20:30:37 +0000823 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000824 if {$code=="SQLITE_DROP_TEMP_VIEW"} {
drhe22a3342003-04-22 20:30:37 +0000825 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000826 return SQLITE_OK
827 }
828 return SQLITE_OK
829 }
830 catchsql {DROP VIEW v1}
831} {0 {}}
832do_test auth-1.123 {
833 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000834} {v1 {} temp {}}
drh77ad4e42003-01-14 02:49:27 +0000835do_test auth-1.124 {
836 execsql {SELECT name FROM sqlite_temp_master}
837} {t1}
838
839do_test auth-1.125 {
drhe22a3342003-04-22 20:30:37 +0000840 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000841 if {$code=="SQLITE_CREATE_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +0000842 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000843 return SQLITE_DENY
844 }
845 return SQLITE_OK
846 }
847 catchsql {
848 CREATE TRIGGER r2 DELETE on t2 BEGIN
849 SELECT NULL;
850 END;
851 }
852} {1 {not authorized}}
853do_test auth-1.126 {
854 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000855} {r2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +0000856do_test auth-1.127 {
857 execsql {SELECT name FROM sqlite_master}
858} {t2}
859do_test auth-1.128 {
drhe22a3342003-04-22 20:30:37 +0000860 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000861 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
862 return SQLITE_DENY
863 }
864 return SQLITE_OK
865 }
866 catchsql {
867 CREATE TRIGGER r2 DELETE on t2 BEGIN
868 SELECT NULL;
869 END;
870 }
871} {1 {not authorized}}
872do_test auth-1.129 {
873 execsql {SELECT name FROM sqlite_master}
874} {t2}
875do_test auth-1.130 {
drhe22a3342003-04-22 20:30:37 +0000876 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000877 if {$code=="SQLITE_CREATE_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +0000878 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000879 return SQLITE_IGNORE
880 }
881 return SQLITE_OK
882 }
883 catchsql {
884 CREATE TRIGGER r2 DELETE on t2 BEGIN
885 SELECT NULL;
886 END;
887 }
888} {0 {}}
889do_test auth-1.131 {
890 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000891} {r2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +0000892do_test auth-1.132 {
893 execsql {SELECT name FROM sqlite_master}
894} {t2}
895do_test auth-1.133 {
drhe22a3342003-04-22 20:30:37 +0000896 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000897 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
898 return SQLITE_IGNORE
899 }
900 return SQLITE_OK
901 }
902 catchsql {
903 CREATE TRIGGER r2 DELETE on t2 BEGIN
904 SELECT NULL;
905 END;
906 }
907} {0 {}}
908do_test auth-1.134 {
909 execsql {SELECT name FROM sqlite_master}
910} {t2}
911do_test auth-1.135 {
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_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +0000914 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000915 return SQLITE_OK
916 }
917 return SQLITE_OK
918 }
919 catchsql {
drhe22a3342003-04-22 20:30:37 +0000920 CREATE TABLE tx(id);
921 CREATE TRIGGER r2 AFTER INSERT ON t2 BEGIN
922 INSERT INTO tx VALUES(NEW.rowid);
drh77ad4e42003-01-14 02:49:27 +0000923 END;
924 }
925} {0 {}}
drhe22a3342003-04-22 20:30:37 +0000926do_test auth-1.136.1 {
drh77ad4e42003-01-14 02:49:27 +0000927 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000928} {r2 t2 main {}}
929do_test auth-1.136.2 {
930 execsql {
931 SELECT name FROM sqlite_master WHERE type='trigger'
932 }
933} {r2}
934do_test auth-1.136.3 {
935 proc auth {code arg1 arg2 arg3 arg4} {
936 lappend ::authargs $code $arg1 $arg2 $arg3 $arg4
937 return SQLITE_OK
938 }
939 set ::authargs {}
940 execsql {
941 INSERT INTO t2 VALUES(1,2,3);
942 }
943 set ::authargs
944} {SQLITE_INSERT t2 {} main {} SQLITE_INSERT tx {} main r2 SQLITE_READ t2 ROWID main r2}
945do_test auth-1.136.4 {
946 execsql {
947 SELECT * FROM tx;
948 }
949} {3}
drh77ad4e42003-01-14 02:49:27 +0000950do_test auth-1.137 {
951 execsql {SELECT name FROM sqlite_master}
drhe22a3342003-04-22 20:30:37 +0000952} {t2 tx r2}
drh77ad4e42003-01-14 02:49:27 +0000953do_test auth-1.138 {
drhe22a3342003-04-22 20:30:37 +0000954 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000955 if {$code=="SQLITE_CREATE_TEMP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +0000956 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000957 return SQLITE_DENY
958 }
959 return SQLITE_OK
960 }
961 catchsql {
962 CREATE TRIGGER r1 DELETE on t1 BEGIN
963 SELECT NULL;
964 END;
965 }
966} {1 {not authorized}}
967do_test auth-1.139 {
968 set ::authargs
drhe22a3342003-04-22 20:30:37 +0000969} {r1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +0000970do_test auth-1.140 {
971 execsql {SELECT name FROM sqlite_temp_master}
972} {t1}
973do_test auth-1.141 {
drhe22a3342003-04-22 20:30:37 +0000974 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000975 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
976 return SQLITE_DENY
977 }
978 return SQLITE_OK
979 }
980 catchsql {
981 CREATE TRIGGER r1 DELETE on t1 BEGIN
982 SELECT NULL;
983 END;
984 }
985} {1 {not authorized}}
986do_test auth-1.142 {
987 execsql {SELECT name FROM sqlite_temp_master}
988} {t1}
989do_test auth-1.143 {
drhe22a3342003-04-22 20:30:37 +0000990 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +0000991 if {$code=="SQLITE_CREATE_TEMP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +0000992 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +0000993 return SQLITE_IGNORE
994 }
995 return SQLITE_OK
996 }
997 catchsql {
998 CREATE TRIGGER r1 DELETE on t1 BEGIN
999 SELECT NULL;
1000 END;
1001 }
1002} {0 {}}
1003do_test auth-1.144 {
1004 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001005} {r1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001006do_test auth-1.145 {
1007 execsql {SELECT name FROM sqlite_temp_master}
1008} {t1}
1009do_test auth-1.146 {
drhe22a3342003-04-22 20:30:37 +00001010 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001011 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
1012 return SQLITE_IGNORE
1013 }
1014 return SQLITE_OK
1015 }
1016 catchsql {
1017 CREATE TRIGGER r1 DELETE on t1 BEGIN
1018 SELECT NULL;
1019 END;
1020 }
1021} {0 {}}
1022do_test auth-1.147 {
1023 execsql {SELECT name FROM sqlite_temp_master}
1024} {t1}
1025do_test auth-1.148 {
drhe22a3342003-04-22 20:30:37 +00001026 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001027 if {$code=="SQLITE_CREATE_TEMP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +00001028 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001029 return SQLITE_OK
1030 }
1031 return SQLITE_OK
1032 }
1033 catchsql {
1034 CREATE TRIGGER r1 DELETE on t1 BEGIN
1035 SELECT NULL;
1036 END;
1037 }
1038} {0 {}}
1039do_test auth-1.149 {
1040 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001041} {r1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001042do_test auth-1.150 {
1043 execsql {SELECT name FROM sqlite_temp_master}
1044} {t1 r1}
1045
1046do_test auth-1.151 {
drhe22a3342003-04-22 20:30:37 +00001047 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001048 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
1049 return SQLITE_DENY
1050 }
1051 return SQLITE_OK
1052 }
1053 catchsql {DROP TRIGGER r2}
1054} {1 {not authorized}}
1055do_test auth-1.152 {
1056 execsql {SELECT name FROM sqlite_master}
drhe22a3342003-04-22 20:30:37 +00001057} {t2 tx r2}
drh77ad4e42003-01-14 02:49:27 +00001058do_test auth-1.153 {
drhe22a3342003-04-22 20:30:37 +00001059 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001060 if {$code=="SQLITE_DROP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +00001061 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001062 return SQLITE_DENY
1063 }
1064 return SQLITE_OK
1065 }
1066 catchsql {DROP TRIGGER r2}
1067} {1 {not authorized}}
1068do_test auth-1.154 {
1069 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001070} {r2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001071do_test auth-1.155 {
1072 execsql {SELECT name FROM sqlite_master}
drhe22a3342003-04-22 20:30:37 +00001073} {t2 tx r2}
drh77ad4e42003-01-14 02:49:27 +00001074do_test auth-1.156 {
drhe22a3342003-04-22 20:30:37 +00001075 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001076 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
1077 return SQLITE_IGNORE
1078 }
1079 return SQLITE_OK
1080 }
1081 catchsql {DROP TRIGGER r2}
1082} {0 {}}
1083do_test auth-1.157 {
1084 execsql {SELECT name FROM sqlite_master}
drhe22a3342003-04-22 20:30:37 +00001085} {t2 tx r2}
drh77ad4e42003-01-14 02:49:27 +00001086do_test auth-1.158 {
drhe22a3342003-04-22 20:30:37 +00001087 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001088 if {$code=="SQLITE_DROP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +00001089 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001090 return SQLITE_IGNORE
1091 }
1092 return SQLITE_OK
1093 }
1094 catchsql {DROP TRIGGER r2}
1095} {0 {}}
1096do_test auth-1.159 {
1097 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001098} {r2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001099do_test auth-1.160 {
1100 execsql {SELECT name FROM sqlite_master}
drhe22a3342003-04-22 20:30:37 +00001101} {t2 tx r2}
drh77ad4e42003-01-14 02:49:27 +00001102do_test auth-1.161 {
drhe22a3342003-04-22 20:30:37 +00001103 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001104 if {$code=="SQLITE_DROP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +00001105 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001106 return SQLITE_OK
1107 }
1108 return SQLITE_OK
1109 }
1110 catchsql {DROP TRIGGER r2}
1111} {0 {}}
1112do_test auth-1.162 {
1113 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001114} {r2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001115do_test auth-1.163 {
drhe22a3342003-04-22 20:30:37 +00001116 execsql {
1117 DROP TABLE tx;
1118 DELETE FROM t2 WHERE a=1 AND b=2 AND c=3;
1119 SELECT name FROM sqlite_master;
1120 }
drh77ad4e42003-01-14 02:49:27 +00001121} {t2}
1122
1123do_test auth-1.164 {
drhe22a3342003-04-22 20:30:37 +00001124 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001125 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
1126 return SQLITE_DENY
1127 }
1128 return SQLITE_OK
1129 }
1130 catchsql {DROP TRIGGER r1}
1131} {1 {not authorized}}
1132do_test auth-1.165 {
1133 execsql {SELECT name FROM sqlite_temp_master}
1134} {t1 r1}
1135do_test auth-1.166 {
drhe22a3342003-04-22 20:30:37 +00001136 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001137 if {$code=="SQLITE_DROP_TEMP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +00001138 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001139 return SQLITE_DENY
1140 }
1141 return SQLITE_OK
1142 }
1143 catchsql {DROP TRIGGER r1}
1144} {1 {not authorized}}
1145do_test auth-1.167 {
1146 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001147} {r1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001148do_test auth-1.168 {
1149 execsql {SELECT name FROM sqlite_temp_master}
1150} {t1 r1}
1151do_test auth-1.169 {
drhe22a3342003-04-22 20:30:37 +00001152 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001153 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
1154 return SQLITE_IGNORE
1155 }
1156 return SQLITE_OK
1157 }
1158 catchsql {DROP TRIGGER r1}
1159} {0 {}}
1160do_test auth-1.170 {
1161 execsql {SELECT name FROM sqlite_temp_master}
1162} {t1 r1}
1163do_test auth-1.171 {
drhe22a3342003-04-22 20:30:37 +00001164 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001165 if {$code=="SQLITE_DROP_TEMP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +00001166 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001167 return SQLITE_IGNORE
1168 }
1169 return SQLITE_OK
1170 }
1171 catchsql {DROP TRIGGER r1}
1172} {0 {}}
1173do_test auth-1.172 {
1174 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001175} {r1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001176do_test auth-1.173 {
1177 execsql {SELECT name FROM sqlite_temp_master}
1178} {t1 r1}
1179do_test auth-1.174 {
drhe22a3342003-04-22 20:30:37 +00001180 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001181 if {$code=="SQLITE_DROP_TEMP_TRIGGER"} {
drhe22a3342003-04-22 20:30:37 +00001182 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001183 return SQLITE_OK
1184 }
1185 return SQLITE_OK
1186 }
1187 catchsql {DROP TRIGGER r1}
1188} {0 {}}
1189do_test auth-1.175 {
1190 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001191} {r1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001192do_test auth-1.176 {
1193 execsql {SELECT name FROM sqlite_temp_master}
1194} {t1}
1195
1196do_test auth-1.177 {
drhe22a3342003-04-22 20:30:37 +00001197 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001198 if {$code=="SQLITE_CREATE_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001199 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001200 return SQLITE_DENY
1201 }
1202 return SQLITE_OK
1203 }
1204 catchsql {CREATE INDEX i2 ON t2(a)}
1205} {1 {not authorized}}
1206do_test auth-1.178 {
1207 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001208} {i2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001209do_test auth-1.179 {
1210 execsql {SELECT name FROM sqlite_master}
1211} {t2}
1212do_test auth-1.180 {
drhe22a3342003-04-22 20:30:37 +00001213 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001214 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
1215 return SQLITE_DENY
1216 }
1217 return SQLITE_OK
1218 }
1219 catchsql {CREATE INDEX i2 ON t2(a)}
1220} {1 {not authorized}}
1221do_test auth-1.181 {
1222 execsql {SELECT name FROM sqlite_master}
1223} {t2}
1224do_test auth-1.182 {
drhe22a3342003-04-22 20:30:37 +00001225 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001226 if {$code=="SQLITE_CREATE_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001227 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001228 return SQLITE_IGNORE
1229 }
1230 return SQLITE_OK
1231 }
1232 catchsql {CREATE INDEX i2 ON t2(b)}
1233} {0 {}}
1234do_test auth-1.183 {
1235 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001236} {i2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001237do_test auth-1.184 {
1238 execsql {SELECT name FROM sqlite_master}
1239} {t2}
1240do_test auth-1.185 {
drhe22a3342003-04-22 20:30:37 +00001241 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001242 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
1243 return SQLITE_IGNORE
1244 }
1245 return SQLITE_OK
1246 }
1247 catchsql {CREATE INDEX i2 ON t2(b)}
1248} {0 {}}
1249do_test auth-1.186 {
1250 execsql {SELECT name FROM sqlite_master}
1251} {t2}
1252do_test auth-1.187 {
drhe22a3342003-04-22 20:30:37 +00001253 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001254 if {$code=="SQLITE_CREATE_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001255 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001256 return SQLITE_OK
1257 }
1258 return SQLITE_OK
1259 }
1260 catchsql {CREATE INDEX i2 ON t2(a)}
1261} {0 {}}
1262do_test auth-1.188 {
1263 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001264} {i2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001265do_test auth-1.189 {
1266 execsql {SELECT name FROM sqlite_master}
1267} {t2 i2}
1268
1269do_test auth-1.190 {
drhe22a3342003-04-22 20:30:37 +00001270 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001271 if {$code=="SQLITE_CREATE_TEMP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001272 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001273 return SQLITE_DENY
1274 }
1275 return SQLITE_OK
1276 }
1277 catchsql {CREATE INDEX i1 ON t1(a)}
1278} {1 {not authorized}}
1279do_test auth-1.191 {
1280 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001281} {i1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001282do_test auth-1.192 {
1283 execsql {SELECT name FROM sqlite_temp_master}
1284} {t1}
1285do_test auth-1.193 {
drhe22a3342003-04-22 20:30:37 +00001286 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001287 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
1288 return SQLITE_DENY
1289 }
1290 return SQLITE_OK
1291 }
1292 catchsql {CREATE INDEX i1 ON t1(b)}
1293} {1 {not authorized}}
1294do_test auth-1.194 {
1295 execsql {SELECT name FROM sqlite_temp_master}
1296} {t1}
1297do_test auth-1.195 {
drhe22a3342003-04-22 20:30:37 +00001298 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001299 if {$code=="SQLITE_CREATE_TEMP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001300 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001301 return SQLITE_IGNORE
1302 }
1303 return SQLITE_OK
1304 }
1305 catchsql {CREATE INDEX i1 ON t1(b)}
1306} {0 {}}
1307do_test auth-1.196 {
1308 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001309} {i1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001310do_test auth-1.197 {
1311 execsql {SELECT name FROM sqlite_temp_master}
1312} {t1}
1313do_test auth-1.198 {
drhe22a3342003-04-22 20:30:37 +00001314 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001315 if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
1316 return SQLITE_IGNORE
1317 }
1318 return SQLITE_OK
1319 }
1320 catchsql {CREATE INDEX i1 ON t1(c)}
1321} {0 {}}
1322do_test auth-1.199 {
1323 execsql {SELECT name FROM sqlite_temp_master}
1324} {t1}
1325do_test auth-1.200 {
drhe22a3342003-04-22 20:30:37 +00001326 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001327 if {$code=="SQLITE_CREATE_TEMP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001328 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001329 return SQLITE_OK
1330 }
1331 return SQLITE_OK
1332 }
1333 catchsql {CREATE INDEX i1 ON t1(a)}
1334} {0 {}}
1335do_test auth-1.201 {
1336 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001337} {i1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001338do_test auth-1.202 {
1339 execsql {SELECT name FROM sqlite_temp_master}
1340} {t1 i1}
1341
1342do_test auth-1.203 {
drhe22a3342003-04-22 20:30:37 +00001343 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001344 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
1345 return SQLITE_DENY
1346 }
1347 return SQLITE_OK
1348 }
1349 catchsql {DROP INDEX i2}
1350} {1 {not authorized}}
1351do_test auth-1.204 {
1352 execsql {SELECT name FROM sqlite_master}
1353} {t2 i2}
1354do_test auth-1.205 {
drhe22a3342003-04-22 20:30:37 +00001355 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001356 if {$code=="SQLITE_DROP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001357 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001358 return SQLITE_DENY
1359 }
1360 return SQLITE_OK
1361 }
1362 catchsql {DROP INDEX i2}
1363} {1 {not authorized}}
1364do_test auth-1.206 {
1365 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001366} {i2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001367do_test auth-1.207 {
1368 execsql {SELECT name FROM sqlite_master}
1369} {t2 i2}
1370do_test auth-1.208 {
drhe22a3342003-04-22 20:30:37 +00001371 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001372 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
1373 return SQLITE_IGNORE
1374 }
1375 return SQLITE_OK
1376 }
1377 catchsql {DROP INDEX i2}
1378} {0 {}}
1379do_test auth-1.209 {
1380 execsql {SELECT name FROM sqlite_master}
1381} {t2 i2}
1382do_test auth-1.210 {
drhe22a3342003-04-22 20:30:37 +00001383 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001384 if {$code=="SQLITE_DROP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001385 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001386 return SQLITE_IGNORE
1387 }
1388 return SQLITE_OK
1389 }
1390 catchsql {DROP INDEX i2}
1391} {0 {}}
1392do_test auth-1.211 {
1393 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001394} {i2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001395do_test auth-1.212 {
1396 execsql {SELECT name FROM sqlite_master}
1397} {t2 i2}
1398do_test auth-1.213 {
drhe22a3342003-04-22 20:30:37 +00001399 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001400 if {$code=="SQLITE_DROP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001401 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001402 return SQLITE_OK
1403 }
1404 return SQLITE_OK
1405 }
1406 catchsql {DROP INDEX i2}
1407} {0 {}}
1408do_test auth-1.214 {
1409 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001410} {i2 t2 main {}}
drh77ad4e42003-01-14 02:49:27 +00001411do_test auth-1.215 {
1412 execsql {SELECT name FROM sqlite_master}
1413} {t2}
1414
1415do_test auth-1.216 {
drhe22a3342003-04-22 20:30:37 +00001416 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001417 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
1418 return SQLITE_DENY
1419 }
1420 return SQLITE_OK
1421 }
1422 catchsql {DROP INDEX i1}
1423} {1 {not authorized}}
1424do_test auth-1.217 {
1425 execsql {SELECT name FROM sqlite_temp_master}
1426} {t1 i1}
1427do_test auth-1.218 {
drhe22a3342003-04-22 20:30:37 +00001428 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001429 if {$code=="SQLITE_DROP_TEMP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001430 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001431 return SQLITE_DENY
1432 }
1433 return SQLITE_OK
1434 }
1435 catchsql {DROP INDEX i1}
1436} {1 {not authorized}}
1437do_test auth-1.219 {
1438 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001439} {i1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001440do_test auth-1.220 {
1441 execsql {SELECT name FROM sqlite_temp_master}
1442} {t1 i1}
1443do_test auth-1.221 {
drhe22a3342003-04-22 20:30:37 +00001444 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001445 if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
1446 return SQLITE_IGNORE
1447 }
1448 return SQLITE_OK
1449 }
1450 catchsql {DROP INDEX i1}
1451} {0 {}}
1452do_test auth-1.222 {
1453 execsql {SELECT name FROM sqlite_temp_master}
1454} {t1 i1}
1455do_test auth-1.223 {
drhe22a3342003-04-22 20:30:37 +00001456 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001457 if {$code=="SQLITE_DROP_TEMP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001458 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001459 return SQLITE_IGNORE
1460 }
1461 return SQLITE_OK
1462 }
1463 catchsql {DROP INDEX i1}
1464} {0 {}}
1465do_test auth-1.224 {
1466 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001467} {i1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001468do_test auth-1.225 {
1469 execsql {SELECT name FROM sqlite_temp_master}
1470} {t1 i1}
1471do_test auth-1.226 {
drhe22a3342003-04-22 20:30:37 +00001472 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001473 if {$code=="SQLITE_DROP_TEMP_INDEX"} {
drhe22a3342003-04-22 20:30:37 +00001474 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001475 return SQLITE_OK
1476 }
1477 return SQLITE_OK
1478 }
1479 catchsql {DROP INDEX i1}
1480} {0 {}}
1481do_test auth-1.227 {
1482 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001483} {i1 t1 temp {}}
drh77ad4e42003-01-14 02:49:27 +00001484do_test auth-1.228 {
1485 execsql {SELECT name FROM sqlite_temp_master}
1486} {t1}
1487
1488do_test auth-1.229 {
drhe22a3342003-04-22 20:30:37 +00001489 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001490 if {$code=="SQLITE_PRAGMA"} {
drhe22a3342003-04-22 20:30:37 +00001491 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001492 return SQLITE_DENY
1493 }
1494 return SQLITE_OK
1495 }
1496 catchsql {PRAGMA full_column_names=on}
1497} {1 {not authorized}}
1498do_test auth-1.230 {
1499 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001500} {full_column_names on {} {}}
drh77ad4e42003-01-14 02:49:27 +00001501do_test auth-1.231 {
1502 execsql2 {SELECT a FROM t2}
1503} {a 11 a 7}
1504do_test auth-1.232 {
drhe22a3342003-04-22 20:30:37 +00001505 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001506 if {$code=="SQLITE_PRAGMA"} {
drhe22a3342003-04-22 20:30:37 +00001507 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001508 return SQLITE_IGNORE
1509 }
1510 return SQLITE_OK
1511 }
1512 catchsql {PRAGMA full_column_names=on}
1513} {0 {}}
1514do_test auth-1.233 {
1515 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001516} {full_column_names on {} {}}
drh77ad4e42003-01-14 02:49:27 +00001517do_test auth-1.234 {
1518 execsql2 {SELECT a FROM t2}
1519} {a 11 a 7}
1520do_test auth-1.235 {
drhe22a3342003-04-22 20:30:37 +00001521 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001522 if {$code=="SQLITE_PRAGMA"} {
drhe22a3342003-04-22 20:30:37 +00001523 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001524 return SQLITE_OK
1525 }
1526 return SQLITE_OK
1527 }
1528 catchsql {PRAGMA full_column_names=on}
1529} {0 {}}
1530do_test auth-1.236 {
1531 execsql2 {SELECT a FROM t2}
1532} {t2.a 11 t2.a 7}
1533do_test auth-1.237 {
drhe22a3342003-04-22 20:30:37 +00001534 proc auth {code arg1 arg2 arg3 arg4} {
drh77ad4e42003-01-14 02:49:27 +00001535 if {$code=="SQLITE_PRAGMA"} {
drhe22a3342003-04-22 20:30:37 +00001536 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh77ad4e42003-01-14 02:49:27 +00001537 return SQLITE_OK
1538 }
1539 return SQLITE_OK
1540 }
1541 catchsql {PRAGMA full_column_names=OFF}
1542} {0 {}}
1543do_test auth-1.238 {
1544 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001545} {full_column_names OFF {} {}}
drh77ad4e42003-01-14 02:49:27 +00001546do_test auth-1.239 {
1547 execsql2 {SELECT a FROM t2}
1548} {a 11 a 7}
drhe5f9c642003-01-13 23:27:31 +00001549
drh2c3831c2003-01-14 13:48:20 +00001550do_test auth-1.240 {
drhe22a3342003-04-22 20:30:37 +00001551 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001552 if {$code=="SQLITE_TRANSACTION"} {
drhe22a3342003-04-22 20:30:37 +00001553 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh2c3831c2003-01-14 13:48:20 +00001554 return SQLITE_DENY
1555 }
1556 return SQLITE_OK
1557 }
1558 catchsql {BEGIN}
1559} {1 {not authorized}}
1560do_test auth-1.241 {
1561 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001562} {BEGIN {} {} {}}
drh2c3831c2003-01-14 13:48:20 +00001563do_test auth-1.242 {
drhe22a3342003-04-22 20:30:37 +00001564 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001565 if {$code=="SQLITE_TRANSACTION" && $arg1!="BEGIN"} {
drhe22a3342003-04-22 20:30:37 +00001566 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
drh2c3831c2003-01-14 13:48:20 +00001567 return SQLITE_DENY
1568 }
1569 return SQLITE_OK
1570 }
1571 catchsql {BEGIN; INSERT INTO t2 VALUES(44,55,66); COMMIT}
1572} {1 {not authorized}}
1573do_test auth-1.243 {
1574 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001575} {COMMIT {} {} {}}
drh2c3831c2003-01-14 13:48:20 +00001576do_test auth-1.244 {
1577 execsql {SELECT * FROM t2}
1578} {11 2 33 7 8 9 44 55 66}
1579do_test auth-1.245 {
1580 catchsql {ROLLBACK}
1581} {1 {not authorized}}
1582do_test auth-1.246 {
1583 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001584} {ROLLBACK {} {} {}}
drh2c3831c2003-01-14 13:48:20 +00001585do_test auth-1.247 {
1586 catchsql {END TRANSACTION}
1587} {1 {not authorized}}
1588do_test auth-1.248 {
1589 set ::authargs
drhe22a3342003-04-22 20:30:37 +00001590} {COMMIT {} {} {}}
drh2c3831c2003-01-14 13:48:20 +00001591do_test auth-1.249 {
drhe22a3342003-04-22 20:30:37 +00001592 db authorizer {}
drh2c3831c2003-01-14 13:48:20 +00001593 catchsql {ROLLBACK}
1594} {0 {}}
1595do_test auth-1.250 {
1596 execsql {SELECT * FROM t2}
1597} {11 2 33 7 8 9}
1598
drh81e293b2003-06-06 19:00:42 +00001599# ticket #340 - authorization for ATTACH and DETACH.
1600#
1601do_test auth-1.251 {
1602 db authorizer ::auth
1603 proc auth {code arg1 arg2 arg3 arg4} {
1604 if {$code=="SQLITE_ATTACH"} {
1605 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
1606 }
1607 return SQLITE_OK
1608 }
1609 catchsql {
1610 ATTACH DATABASE ':memory:' AS test1
1611 }
1612} {0 {}}
1613do_test auth-1.252 {
1614 set ::authargs
1615} {:memory: {} {} {}}
1616do_test auth-1.253 {
1617 catchsql {DETACH DATABASE test1}
1618 proc auth {code arg1 arg2 arg3 arg4} {
1619 if {$code=="SQLITE_ATTACH"} {
1620 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
1621 return SQLITE_DENY
1622 }
1623 return SQLITE_OK
1624 }
1625 catchsql {
1626 ATTACH DATABASE ':memory:' AS test1;
1627 }
1628} {1 {not authorized}}
1629do_test auth-1.254 {
1630 lindex [execsql {PRAGMA database_list}] 7
1631} {}
1632do_test auth-1.255 {
1633 catchsql {DETACH DATABASE test1}
1634 proc auth {code arg1 arg2 arg3 arg4} {
1635 if {$code=="SQLITE_ATTACH"} {
1636 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
1637 return SQLITE_IGNORE
1638 }
1639 return SQLITE_OK
1640 }
1641 catchsql {
1642 ATTACH DATABASE ':memory:' AS test1;
1643 }
1644} {0 {}}
1645do_test auth-1.256 {
1646 lindex [execsql {PRAGMA database_list}] 7
1647} {}
1648do_test auth-1.257 {
1649 proc auth {code arg1 arg2 arg3 arg4} {
1650 if {$code=="SQLITE_DETACH"} {
1651 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
1652 return SQLITE_OK
1653 }
1654 return SQLITE_OK
1655 }
1656 execsql {ATTACH DATABASE ':memory:' AS test1}
1657 catchsql {
1658 DETACH DATABASE test1;
1659 }
1660} {0 {}}
1661do_test auth-1.258 {
1662 lindex [execsql {PRAGMA database_list}] 7
1663} {}
1664do_test auth-1.259 {
1665 execsql {ATTACH DATABASE ':memory:' AS test1}
1666 proc auth {code arg1 arg2 arg3 arg4} {
1667 if {$code=="SQLITE_DETACH"} {
1668 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
1669 return SQLITE_IGNORE
1670 }
1671 return SQLITE_OK
1672 }
1673 catchsql {
1674 DETACH DATABASE test1;
1675 }
1676} {0 {}}
1677do_test auth-1.260 {
1678 lindex [execsql {PRAGMA database_list}] 7
1679} {test1}
1680do_test auth-1.261 {
1681 proc auth {code arg1 arg2 arg3 arg4} {
1682 if {$code=="SQLITE_DETACH"} {
1683 set ::authargs [list $arg1 $arg2 $arg3 $arg4]
1684 return SQLITE_DENY
1685 }
1686 return SQLITE_OK
1687 }
1688 catchsql {
1689 DETACH DATABASE test1;
1690 }
1691} {1 {not authorized}}
1692do_test auth-1.262 {
1693 lindex [execsql {PRAGMA database_list}] 7
1694} {test1}
1695db authorizer {}
1696execsql {DETACH DATABASE test1}
1697
1698
drh2c3831c2003-01-14 13:48:20 +00001699do_test auth-2.1 {
drhe22a3342003-04-22 20:30:37 +00001700 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001701 if {$code=="SQLITE_READ" && $arg1=="t3" && $arg2=="x"} {
1702 return SQLITE_DENY
1703 }
1704 return SQLITE_OK
1705 }
drhe22a3342003-04-22 20:30:37 +00001706 db authorizer ::auth
drh2c3831c2003-01-14 13:48:20 +00001707 execsql {CREATE TABLE t3(x INTEGER PRIMARY KEY, y, z)}
1708 catchsql {SELECT * FROM t3}
1709} {1 {access to t3.x is prohibited}}
1710do_test auth-2.1 {
1711 catchsql {SELECT y,z FROM t3}
1712} {0 {}}
1713do_test auth-2.2 {
1714 catchsql {SELECT ROWID,y,z FROM t3}
1715} {1 {access to t3.x is prohibited}}
1716do_test auth-2.3 {
1717 catchsql {SELECT OID,y,z FROM t3}
1718} {1 {access to t3.x is prohibited}}
1719do_test auth-2.4 {
drhe22a3342003-04-22 20:30:37 +00001720 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001721 if {$code=="SQLITE_READ" && $arg1=="t3" && $arg2=="x"} {
1722 return SQLITE_IGNORE
1723 }
1724 return SQLITE_OK
1725 }
1726 execsql {INSERT INTO t3 VALUES(44,55,66)}
1727 catchsql {SELECT * FROM t3}
1728} {0 {{} 55 66}}
1729do_test auth-2.5 {
1730 catchsql {SELECT rowid,y,z FROM t3}
1731} {0 {{} 55 66}}
1732do_test auth-2.6 {
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" && $arg1=="t3" && $arg2=="ROWID"} {
1735 return SQLITE_IGNORE
1736 }
1737 return SQLITE_OK
1738 }
1739 catchsql {SELECT * FROM t3}
1740} {0 {44 55 66}}
1741do_test auth-2.7 {
1742 catchsql {SELECT ROWID,y,z FROM t3}
1743} {0 {44 55 66}}
1744do_test auth-2.8 {
drhe22a3342003-04-22 20:30:37 +00001745 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001746 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="ROWID"} {
1747 return SQLITE_IGNORE
1748 }
1749 return SQLITE_OK
1750 }
1751 catchsql {SELECT ROWID,b,c FROM t2}
1752} {0 {{} 2 33 {} 8 9}}
drhdcd997e2003-01-31 17:21:49 +00001753do_test auth-2.9.1 {
drhe22a3342003-04-22 20:30:37 +00001754 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001755 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="ROWID"} {
1756 return bogus
1757 }
1758 return SQLITE_OK
1759 }
1760 catchsql {SELECT ROWID,b,c FROM t2}
1761} {1 {illegal return value (999) from the authorization function - should be SQLITE_OK, SQLITE_IGNORE, or SQLITE_DENY}}
drhdcd997e2003-01-31 17:21:49 +00001762do_test auth-2.9.2 {
1763 db errorcode
1764} {21}
drh2c3831c2003-01-14 13:48:20 +00001765do_test auth-2.10 {
drhe22a3342003-04-22 20:30:37 +00001766 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001767 if {$code=="SQLITE_SELECT"} {
1768 return bogus
1769 }
1770 return SQLITE_OK
1771 }
1772 catchsql {SELECT ROWID,b,c FROM t2}
1773} {1 {illegal return value (1) from the authorization function - should be SQLITE_OK, SQLITE_IGNORE, or SQLITE_DENY}}
drh6f8c91c2003-12-07 00:24:35 +00001774do_test auth-2.11.1 {
drhe22a3342003-04-22 20:30:37 +00001775 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001776 if {$code=="SQLITE_READ" && $arg2=="a"} {
1777 return SQLITE_IGNORE
1778 }
1779 return SQLITE_OK
1780 }
1781 catchsql {SELECT * FROM t2, t3}
1782} {0 {{} 2 33 44 55 66 {} 8 9 44 55 66}}
drh6f8c91c2003-12-07 00:24:35 +00001783do_test auth-2.11.2 {
drhe22a3342003-04-22 20:30:37 +00001784 proc auth {code arg1 arg2 arg3 arg4} {
drh2c3831c2003-01-14 13:48:20 +00001785 if {$code=="SQLITE_READ" && $arg2=="x"} {
1786 return SQLITE_IGNORE
1787 }
1788 return SQLITE_OK
1789 }
1790 catchsql {SELECT * FROM t2, t3}
1791} {0 {11 2 33 {} 55 66 7 8 9 {} 55 66}}
drhe5f9c642003-01-13 23:27:31 +00001792
drh027850b2003-04-16 20:24:52 +00001793# Make sure the OLD and NEW pseudo-tables of a trigger get authorized.
1794#
1795do_test auth-3.1 {
drhe22a3342003-04-22 20:30:37 +00001796 proc auth {code arg1 arg2 arg3 arg4} {
drh027850b2003-04-16 20:24:52 +00001797 return SQLITE_OK
1798 }
1799 execsql {
1800 CREATE TABLE tx(a1,a2,b1,b2,c1,c2);
1801 CREATE TRIGGER r1 AFTER UPDATE ON t2 FOR EACH ROW BEGIN
1802 INSERT INTO tx VALUES(OLD.a,NEW.a,OLD.b,NEW.b,OLD.c,NEW.c);
1803 END;
1804 UPDATE t2 SET a=a+1;
1805 SELECT * FROM tx;
1806 }
1807} {11 12 2 2 33 33 7 8 8 8 9 9}
1808do_test auth-3.2 {
drhe22a3342003-04-22 20:30:37 +00001809 proc auth {code arg1 arg2 arg3 arg4} {
drh027850b2003-04-16 20:24:52 +00001810 if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="c"} {
1811 return SQLITE_IGNORE
1812 }
1813 return SQLITE_OK
1814 }
1815 execsql {
1816 DELETE FROM tx;
1817 UPDATE t2 SET a=a+100;
1818 SELECT * FROM tx;
1819 }
1820} {12 112 2 2 {} {} 8 108 8 8 {} {}}
1821
drh85e20962003-04-25 17:52:11 +00001822# Make sure the names of views and triggers are passed on on arg4.
1823#
1824do_test auth-4.1 {
1825 proc auth {code arg1 arg2 arg3 arg4} {
1826 lappend ::authargs $code $arg1 $arg2 $arg3 $arg4
1827 return SQLITE_OK
1828 }
1829 set authargs {}
1830 execsql {
1831 UPDATE t2 SET a=a+1;
1832 }
1833 set authargs
1834} [list \
1835 SQLITE_READ t2 a main {} \
1836 SQLITE_UPDATE t2 a main {} \
1837 SQLITE_INSERT tx {} main r1 \
1838 SQLITE_READ t2 a main r1 \
1839 SQLITE_READ t2 a main r1 \
1840 SQLITE_READ t2 b main r1 \
1841 SQLITE_READ t2 b main r1 \
1842 SQLITE_READ t2 c main r1 \
1843 SQLITE_READ t2 c main r1]
1844do_test auth-4.2 {
1845 execsql {
1846 CREATE VIEW v1 AS SELECT a+b AS x FROM t2;
1847 CREATE TABLE v1chng(x1,x2);
1848 CREATE TRIGGER r2 INSTEAD OF UPDATE ON v1 BEGIN
1849 INSERT INTO v1chng VALUES(OLD.x,NEW.x);
1850 END;
1851 SELECT * FROM v1;
1852 }
1853} {115 117}
1854do_test auth-4.3 {
1855 set authargs {}
1856 execsql {
1857 UPDATE v1 SET x=1 WHERE x=117
1858 }
1859 set authargs
1860} [list \
1861 SQLITE_UPDATE v1 x main {} \
1862 SQLITE_READ v1 x main {} \
1863 SQLITE_SELECT {} {} {} v1 \
1864 SQLITE_READ t2 a main v1 \
1865 SQLITE_READ t2 b main v1 \
1866 SQLITE_INSERT v1chng {} main r2 \
1867 SQLITE_READ v1 x main r2 \
1868 SQLITE_READ v1 x main r2]
1869do_test auth-4.4 {
1870 execsql {
1871 CREATE TRIGGER r3 INSTEAD OF DELETE ON v1 BEGIN
1872 INSERT INTO v1chng VALUES(OLD.x,NULL);
1873 END;
1874 SELECT * FROM v1;
1875 }
1876} {115 117}
1877do_test auth-4.5 {
1878 set authargs {}
1879 execsql {
1880 DELETE FROM v1 WHERE x=117
1881 }
1882 set authargs
1883} [list \
1884 SQLITE_DELETE v1 {} main {} \
1885 SQLITE_READ v1 x main {} \
1886 SQLITE_SELECT {} {} {} v1 \
1887 SQLITE_READ t2 a main v1 \
1888 SQLITE_READ t2 b main v1 \
1889 SQLITE_INSERT v1chng {} main r3 \
1890 SQLITE_READ v1 x main r3]
drh1962bda2003-01-12 19:33:52 +00001891
1892finish_test