/ Hex Artifact Content
Login
SQLite training in Houston TX on 2019-11-05 (details)
Part of the 2019 Tcl Conference

Artifact 8f21c160a4562f54f27618e85bac869efcecbcaf:


0000: 23 20 32 30 30 33 20 41 70 72 69 6c 20 34 0a 23  # 2003 April 4.#
0010: 0a 23 20 54 68 65 20 61 75 74 68 6f 72 20 64 69  .# The author di
0020: 73 63 6c 61 69 6d 73 20 63 6f 70 79 72 69 67 68  sclaims copyrigh
0030: 74 20 74 6f 20 74 68 69 73 20 73 6f 75 72 63 65  t to this source
0040: 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63 65   code.  In place
0050: 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e 6f   of.# a legal no
0060: 74 69 63 65 2c 20 68 65 72 65 20 69 73 20 61 20  tice, here is a 
0070: 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20 20  blessing:.#.#   
0080: 20 4d 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64   May you do good
0090: 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 23   and not evil..#
00a0: 20 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64      May you find
00b0: 20 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72   forgiveness for
00c0: 20 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f   yourself and fo
00d0: 72 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 23 20  rgive others..# 
00e0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
00f0: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0100: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0110: 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23 2a 2a 2a  you give..#.#***
0120: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 0a 23 20 54 68 69 73 20 66 69 6c 65  ****.# This file
0170: 20 69 6d 70 6c 65 6d 65 6e 74 73 20 72 65 67 72   implements regr
0180: 65 73 73 69 6f 6e 20 74 65 73 74 73 20 66 6f 72  ession tests for
0190: 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e   SQLite library.
01a0: 20 20 54 68 65 0a 23 20 66 6f 63 75 73 20 6f 66    The.# focus of
01b0: 20 74 68 69 73 20 73 63 72 69 70 74 20 69 73 20   this script is 
01c0: 74 65 73 74 69 6e 67 20 74 68 65 20 73 71 6c 69  testing the sqli
01d0: 74 65 33 5f 73 65 74 5f 61 75 74 68 6f 72 69 7a  te3_set_authoriz
01e0: 65 72 28 29 20 41 50 49 0a 23 20 61 6e 64 20 72  er() API.# and r
01f0: 65 6c 61 74 65 64 20 66 75 6e 63 74 69 6f 6e 61  elated functiona
0200: 6c 69 74 79 2e 0a 23 0a 23 20 24 49 64 3a 20 61  lity..#.# $Id: a
0210: 75 74 68 2e 74 65 73 74 2c 76 20 31 2e 34 36 20  uth.test,v 1.46 
0220: 32 30 30 39 2f 30 37 2f 30 32 20 31 38 3a 34 30  2009/07/02 18:40
0230: 3a 33 35 20 64 61 6e 69 65 6c 6b 31 39 37 37 20  :35 danielk1977 
0240: 45 78 70 20 24 0a 23 0a 0a 73 65 74 20 74 65 73  Exp $.#..set tes
0250: 74 64 69 72 20 5b 66 69 6c 65 20 64 69 72 6e 61  tdir [file dirna
0260: 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f 75 72 63  me $argv0].sourc
0270: 65 20 24 74 65 73 74 64 69 72 2f 74 65 73 74 65  e $testdir/teste
0280: 72 2e 74 63 6c 0a 0a 23 20 64 69 73 61 62 6c 65  r.tcl..# disable
0290: 20 74 68 69 73 20 74 65 73 74 20 69 66 20 74 68   this test if th
02a0: 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  e SQLITE_OMIT_AU
02b0: 54 48 4f 52 49 5a 41 54 49 4f 4e 20 6d 61 63 72  THORIZATION macr
02c0: 6f 20 69 73 0a 23 20 64 65 66 69 6e 65 64 20 64  o is.# defined d
02d0: 75 72 69 6e 67 20 63 6f 6d 70 69 6c 61 74 69 6f  uring compilatio
02e0: 6e 2e 0a 69 66 20 7b 5b 63 61 74 63 68 20 7b 64  n..if {[catch {d
02f0: 62 20 61 75 74 68 20 7b 7d 7d 20 6d 73 67 5d 7d  b auth {}} msg]}
0300: 20 7b 0a 20 20 66 69 6e 69 73 68 5f 74 65 73 74   {.  finish_test
0310: 0a 20 20 72 65 74 75 72 6e 0a 7d 0a 0a 72 65 6e  .  return.}..ren
0320: 61 6d 65 20 70 72 6f 63 20 70 72 6f 63 5f 72 65  ame proc proc_re
0330: 61 6c 0a 70 72 6f 63 5f 72 65 61 6c 20 70 72 6f  al.proc_real pro
0340: 63 20 7b 6e 61 6d 65 20 61 72 67 75 6d 65 6e 74  c {name argument
0350: 73 20 73 63 72 69 70 74 7d 20 7b 0a 20 20 70 72  s script} {.  pr
0360: 6f 63 5f 72 65 61 6c 20 24 6e 61 6d 65 20 24 61  oc_real $name $a
0370: 72 67 75 6d 65 6e 74 73 20 24 73 63 72 69 70 74  rguments $script
0380: 0a 20 20 69 66 20 7b 24 6e 61 6d 65 3d 3d 22 61  .  if {$name=="a
0390: 75 74 68 22 7d 20 7b 0a 20 20 20 20 64 62 20 61  uth"} {.    db a
03a0: 75 74 68 6f 72 69 7a 65 72 20 3a 3a 61 75 74 68  uthorizer ::auth
03b0: 0a 20 20 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20  .  }.}..do_test 
03c0: 61 75 74 68 2d 31 2e 31 2e 31 20 7b 0a 20 20 64  auth-1.1.1 {.  d
03d0: 62 20 63 6c 6f 73 65 0a 20 20 73 65 74 20 3a 3a  b close.  set ::
03e0: 44 42 20 5b 73 71 6c 69 74 65 33 20 64 62 20 74  DB [sqlite3 db t
03f0: 65 73 74 2e 64 62 5d 0a 20 20 70 72 6f 63 20 61  est.db].  proc a
0400: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
0410: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
0420: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
0430: 22 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 22 20  "SQLITE_INSERT" 
0440: 26 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74  && $arg1=="sqlit
0450: 65 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20  e_master"} {.   
0460: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
0470: 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20  _DENY.    }.    
0480: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
0490: 0a 20 20 7d 0a 20 20 64 62 20 61 75 74 68 6f 72  .  }.  db author
04a0: 69 7a 65 72 20 3a 3a 61 75 74 68 0a 20 20 63 61  izer ::auth.  ca
04b0: 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45 20 54  tchsql {CREATE T
04c0: 41 42 4c 45 20 74 31 28 61 2c 62 2c 63 29 7d 0a  ABLE t1(a,b,c)}.
04d0: 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72  } {1 {not author
04e0: 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  ized}}.do_test a
04f0: 75 74 68 2d 31 2e 31 2e 32 20 7b 0a 20 20 64 62  uth-1.1.2 {.  db
0500: 20 65 72 72 6f 72 63 6f 64 65 0a 7d 20 7b 32 33   errorcode.} {23
0510: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
0520: 2e 31 2e 33 20 7b 0a 20 20 64 62 20 61 75 74 68  .1.3 {.  db auth
0530: 6f 72 69 7a 65 72 0a 7d 20 7b 3a 3a 61 75 74 68  orizer.} {::auth
0540: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
0550: 2e 31 2e 34 20 7b 0a 20 20 23 20 54 69 63 6b 65  .1.4 {.  # Ticke
0560: 74 20 23 38 39 36 2e 0a 20 20 63 61 74 63 68 73  t #896..  catchs
0570: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
0580: 78 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 6e 6f 20  x;.  }.} {1 {no 
0590: 73 75 63 68 20 63 6f 6c 75 6d 6e 3a 20 78 7d 7d  such column: x}}
05a0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
05b0: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  2 {.  execsql {S
05c0: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
05d0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d  sqlite_master}.}
05e0: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68   {}.do_test auth
05f0: 2d 31 2e 33 2e 31 20 7b 0a 20 20 70 72 6f 63 20  -1.3.1 {.  proc 
0600: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
0610: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
0620: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
0630: 3d 22 53 51 4c 49 54 45 5f 43 52 45 41 54 45 5f  ="SQLITE_CREATE_
0640: 54 41 42 4c 45 22 7d 20 7b 0a 20 20 20 20 20 20  TABLE"} {.      
0650: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b  set ::authargs [
0660: 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67 32  list $arg1 $arg2
0670: 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20   $arg3 $arg4].  
0680: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
0690: 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20  E_DENY.    }.   
06a0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
06b0: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
06c0: 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 74   {CREATE TABLE t
06d0: 31 28 61 2c 62 2c 63 29 7d 0a 7d 20 7b 31 20 7b  1(a,b,c)}.} {1 {
06e0: 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d  not authorized}}
06f0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
0700: 33 2e 32 20 7b 0a 20 20 64 62 20 65 72 72 6f 72  3.2 {.  db error
0710: 63 6f 64 65 0a 7d 20 7b 32 33 7d 0a 64 6f 5f 74  code.} {23}.do_t
0720: 65 73 74 20 61 75 74 68 2d 31 2e 33 2e 33 20 7b  est auth-1.3.3 {
0730: 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67  .  set ::autharg
0740: 73 0a 7d 20 7b 74 31 20 7b 7d 20 6d 61 69 6e 20  s.} {t1 {} main 
0750: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
0760: 2d 31 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c  -1.4 {.  execsql
0770: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
0780: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
0790: 7d 0a 7d 20 7b 7d 0a 0a 69 66 63 61 70 61 62 6c  }.} {}..ifcapabl
07a0: 65 20 74 65 6d 70 64 62 20 7b 0a 20 20 64 6f 5f  e tempdb {.  do_
07b0: 74 65 73 74 20 61 75 74 68 2d 31 2e 35 20 7b 0a  test auth-1.5 {.
07c0: 20 20 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63      proc auth {c
07d0: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
07e0: 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 20  g3 arg4} {.     
07f0: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
0800: 49 54 45 5f 49 4e 53 45 52 54 22 20 26 26 20 24  ITE_INSERT" && $
0810: 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 74 65  arg1=="sqlite_te
0820: 6d 70 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20  mp_master"} {.  
0830: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
0840: 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 20 20 7d  ITE_DENY.      }
0850: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
0860: 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20  LITE_OK.    }.  
0870: 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41    catchsql {CREA
0880: 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 74 31  TE TEMP TABLE t1
0890: 28 61 2c 62 2c 63 29 7d 0a 20 20 7d 20 7b 31 20  (a,b,c)}.  } {1 
08a0: 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d  {not authorized}
08b0: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68  }.  do_test auth
08c0: 2d 31 2e 36 20 7b 0a 20 20 20 20 65 78 65 63 73  -1.6 {.    execs
08d0: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
08e0: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70  FROM sqlite_temp
08f0: 5f 6d 61 73 74 65 72 7d 0a 20 20 7d 20 7b 7d 0a  _master}.  } {}.
0900: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31    do_test auth-1
0910: 2e 37 2e 31 20 7b 0a 20 20 20 20 70 72 6f 63 20  .7.1 {.    proc 
0920: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
0930: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
0940: 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64  {.      if {$cod
0950: 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52 45 41 54  e=="SQLITE_CREAT
0960: 45 5f 54 45 4d 50 5f 54 41 42 4c 45 22 7d 20 7b  E_TEMP_TABLE"} {
0970: 0a 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a 61  .        set ::a
0980: 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61  uthargs [list $a
0990: 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20  rg1 $arg2 $arg3 
09a0: 24 61 72 67 34 5d 0a 20 20 20 20 20 20 20 20 72  $arg4].        r
09b0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e  eturn SQLITE_DEN
09c0: 59 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  Y.      }.      
09d0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
09e0: 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 74 63 68  .    }.    catch
09f0: 73 71 6c 20 7b 43 52 45 41 54 45 20 54 45 4d 50  sql {CREATE TEMP
0a00: 20 54 41 42 4c 45 20 74 31 28 61 2c 62 2c 63 29   TABLE t1(a,b,c)
0a10: 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f 74 20 61 75  }.  } {1 {not au
0a20: 74 68 6f 72 69 7a 65 64 7d 7d 0a 20 20 64 6f 5f  thorized}}.  do_
0a30: 74 65 73 74 20 61 75 74 68 2d 31 2e 37 2e 32 20  test auth-1.7.2 
0a40: 7b 0a 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74  {.     set ::aut
0a50: 68 61 72 67 73 0a 20 20 7d 20 7b 74 31 20 7b 7d  hargs.  } {t1 {}
0a60: 20 74 65 6d 70 20 7b 7d 7d 0a 20 20 64 6f 5f 74   temp {}}.  do_t
0a70: 65 73 74 20 61 75 74 68 2d 31 2e 38 20 7b 0a 20  est auth-1.8 {. 
0a80: 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45     execsql {SELE
0a90: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
0aa0: 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d  ite_temp_master}
0ab0: 0a 20 20 7d 20 7b 7d 0a 7d 0a 0a 64 6f 5f 74 65  .  } {}.}..do_te
0ac0: 73 74 20 61 75 74 68 2d 31 2e 39 20 7b 0a 20 20  st auth-1.9 {.  
0ad0: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
0ae0: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
0af0: 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg4} {.    if {$
0b00: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 49 4e  code=="SQLITE_IN
0b10: 53 45 52 54 22 20 26 26 20 24 61 72 67 31 3d 3d  SERT" && $arg1==
0b20: 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 7d  "sqlite_master"}
0b30: 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   {.      return 
0b40: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20  SQLITE_IGNORE.  
0b50: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
0b60: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
0b70: 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45 20  atchsql {CREATE 
0b80: 54 41 42 4c 45 20 74 31 28 61 2c 62 2c 63 29 7d  TABLE t1(a,b,c)}
0b90: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
0ba0: 74 20 61 75 74 68 2d 31 2e 31 30 20 7b 0a 20 20  t auth-1.10 {.  
0bb0: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
0bc0: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
0bd0: 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 7d 0a 64 6f  _master}.} {}.do
0be0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 31 20  _test auth-1.11 
0bf0: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
0c00: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
0c10: 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69  g3 arg4} {.    i
0c20: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
0c30: 45 5f 43 52 45 41 54 45 5f 54 41 42 4c 45 22 7d  E_CREATE_TABLE"}
0c40: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61   {.      set ::a
0c50: 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61  uthargs [list $a
0c60: 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20  rg1 $arg2 $arg3 
0c70: 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74  $arg4].      ret
0c80: 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52  urn SQLITE_IGNOR
0c90: 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  E.    }.    retu
0ca0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
0cb0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45  .  catchsql {CRE
0cc0: 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c 62  ATE TABLE t1(a,b
0cd0: 2c 63 29 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f  ,c)}.} {0 {}}.do
0ce0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 32 20  _test auth-1.12 
0cf0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
0d00: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
0d10: 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b  lite_master}.} {
0d20: 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20 74 65 6d  }..ifcapable tem
0d30: 70 64 62 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  pdb {.  do_test 
0d40: 61 75 74 68 2d 31 2e 31 33 20 7b 0a 20 20 20 20  auth-1.13 {.    
0d50: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
0d60: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
0d70: 72 67 34 7d 20 7b 0a 20 20 20 20 20 20 69 66 20  rg4} {.      if 
0d80: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
0d90: 49 4e 53 45 52 54 22 20 26 26 20 24 61 72 67 31  INSERT" && $arg1
0da0: 3d 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  =="sqlite_temp_m
0db0: 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20  aster"} {.      
0dc0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
0dd0: 49 47 4e 4f 52 45 0a 20 20 20 20 20 20 7d 0a 20  IGNORE.      }. 
0de0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
0df0: 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20  TE_OK.    }.    
0e00: 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45  catchsql {CREATE
0e10: 20 54 45 4d 50 20 54 41 42 4c 45 20 74 31 28 61   TEMP TABLE t1(a
0e20: 2c 62 2c 63 29 7d 0a 20 20 7d 20 7b 30 20 7b 7d  ,b,c)}.  } {0 {}
0e30: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68  }.  do_test auth
0e40: 2d 31 2e 31 34 20 7b 0a 20 20 20 20 65 78 65 63  -1.14 {.    exec
0e50: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
0e60: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d   FROM sqlite_tem
0e70: 70 5f 6d 61 73 74 65 72 7d 0a 20 20 7d 20 7b 7d  p_master}.  } {}
0e80: 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  .  do_test auth-
0e90: 31 2e 31 35 20 7b 0a 20 20 20 20 70 72 6f 63 20  1.15 {.    proc 
0ea0: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
0eb0: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
0ec0: 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64  {.      if {$cod
0ed0: 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52 45 41 54  e=="SQLITE_CREAT
0ee0: 45 5f 54 45 4d 50 5f 54 41 42 4c 45 22 7d 20 7b  E_TEMP_TABLE"} {
0ef0: 0a 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a 61  .        set ::a
0f00: 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61  uthargs [list $a
0f10: 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20  rg1 $arg2 $arg3 
0f20: 24 61 72 67 34 5d 0a 20 20 20 20 20 20 20 20 72  $arg4].        r
0f30: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e  eturn SQLITE_IGN
0f40: 4f 52 45 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ORE.      }.    
0f50: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
0f60: 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 74  OK.    }.    cat
0f70: 63 68 73 71 6c 20 7b 43 52 45 41 54 45 20 54 45  chsql {CREATE TE
0f80: 4d 50 20 54 41 42 4c 45 20 74 31 28 61 2c 62 2c  MP TABLE t1(a,b,
0f90: 63 29 7d 0a 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20  c)}.  } {0 {}}. 
0fa0: 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e   do_test auth-1.
0fb0: 31 36 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  16 {.    execsql
0fc0: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
0fd0: 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  OM sqlite_temp_m
0fe0: 61 73 74 65 72 7d 0a 20 20 7d 20 7b 7d 0a 20 20  aster}.  } {}.  
0ff0: 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  .  do_test auth-
1000: 31 2e 31 37 20 7b 0a 20 20 20 20 70 72 6f 63 20  1.17 {.    proc 
1010: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
1020: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
1030: 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64  {.      if {$cod
1040: 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52 45 41 54  e=="SQLITE_CREAT
1050: 45 5f 54 41 42 4c 45 22 7d 20 7b 0a 20 20 20 20  E_TABLE"} {.    
1060: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
1070: 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24  gs [list $arg1 $
1080: 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34  arg2 $arg3 $arg4
1090: 5d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ].        return
10a0: 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20   SQLITE_DENY.   
10b0: 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72     }.      retur
10c0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20  n SQLITE_OK.    
10d0: 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b  }.    catchsql {
10e0: 43 52 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c  CREATE TEMP TABL
10f0: 45 20 74 31 28 61 2c 62 2c 63 29 7d 0a 20 20 7d  E t1(a,b,c)}.  }
1100: 20 7b 30 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73   {0 {}}.  do_tes
1110: 74 20 61 75 74 68 2d 31 2e 31 38 20 7b 0a 20 20  t auth-1.18 {.  
1120: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
1130: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
1140: 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a  te_temp_master}.
1150: 20 20 7d 20 7b 74 31 7d 0a 7d 0a 0a 64 6f 5f 74    } {t1}.}..do_t
1160: 65 73 74 20 61 75 74 68 2d 31 2e 31 39 2e 31 20  est auth-1.19.1 
1170: 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72  {.  set ::authar
1180: 67 73 20 7b 7d 0a 20 20 70 72 6f 63 20 61 75 74  gs {}.  proc aut
1190: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
11a0: 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20  2 arg3 arg4} {. 
11b0: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
11c0: 51 4c 49 54 45 5f 43 52 45 41 54 45 5f 54 45 4d  QLITE_CREATE_TEM
11d0: 50 5f 54 41 42 4c 45 22 7d 20 7b 0a 20 20 20 20  P_TABLE"} {.    
11e0: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
11f0: 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72   [list $arg1 $ar
1200: 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a  g2 $arg3 $arg4].
1210: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
1220: 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20  ITE_DENY.    }. 
1230: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
1240: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
1250: 71 6c 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45  ql {CREATE TABLE
1260: 20 74 32 28 61 2c 62 2c 63 29 7d 0a 7d 20 7b 30   t2(a,b,c)}.} {0
1270: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
1280: 68 2d 31 2e 31 39 2e 32 20 7b 0a 20 20 73 65 74  h-1.19.2 {.  set
1290: 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 7d   ::authargs.} {}
12a0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
12b0: 32 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  20 {.  execsql {
12c0: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
12d0: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a   sqlite_master}.
12e0: 7d 20 7b 74 32 7d 0a 0a 64 6f 5f 74 65 73 74 20  } {t2}..do_test 
12f0: 61 75 74 68 2d 31 2e 32 31 2e 31 20 7b 0a 20 20  auth-1.21.1 {.  
1300: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
1310: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
1320: 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg4} {.    if {$
1330: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52  code=="SQLITE_DR
1340: 4f 50 5f 54 41 42 4c 45 22 7d 20 7b 0a 20 20 20  OP_TABLE"} {.   
1350: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
1360: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
1370: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
1380: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
1390: 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a  LITE_DENY.    }.
13a0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
13b0: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
13c0: 73 71 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45 20  sql {DROP TABLE 
13d0: 74 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75  t2}.} {1 {not au
13e0: 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65  thorized}}.do_te
13f0: 73 74 20 61 75 74 68 2d 31 2e 32 31 2e 32 20 7b  st auth-1.21.2 {
1400: 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67  .  set ::autharg
1410: 73 0a 7d 20 7b 74 32 20 7b 7d 20 6d 61 69 6e 20  s.} {t2 {} main 
1420: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
1430: 2d 31 2e 32 32 20 7b 0a 20 20 65 78 65 63 73 71  -1.22 {.  execsq
1440: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
1450: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
1460: 72 7d 0a 7d 20 7b 74 32 7d 0a 64 6f 5f 74 65 73  r}.} {t2}.do_tes
1470: 74 20 61 75 74 68 2d 31 2e 32 33 2e 31 20 7b 0a  t auth-1.23.1 {.
1480: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
1490: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
14a0: 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20   arg4} {.    if 
14b0: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
14c0: 44 52 4f 50 5f 54 41 42 4c 45 22 7d 20 7b 0a 20  DROP_TABLE"} {. 
14d0: 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61       set ::autha
14e0: 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20  rgs [list $arg1 
14f0: 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67  $arg2 $arg3 $arg
1500: 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  4].      return 
1510: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20  SQLITE_IGNORE.  
1520: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
1530: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
1540: 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54 41  atchsql {DROP TA
1550: 42 4c 45 20 74 32 7d 0a 7d 20 7b 30 20 7b 7d 7d  BLE t2}.} {0 {}}
1560: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
1570: 32 33 2e 32 20 7b 0a 20 20 73 65 74 20 3a 3a 61  23.2 {.  set ::a
1580: 75 74 68 61 72 67 73 0a 7d 20 7b 74 32 20 7b 7d  uthargs.} {t2 {}
1590: 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73   main {}}.do_tes
15a0: 74 20 61 75 74 68 2d 31 2e 32 34 20 7b 0a 20 20  t auth-1.24 {.  
15b0: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
15c0: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
15d0: 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a  _master}.} {t2}.
15e0: 0a 69 66 63 61 70 61 62 6c 65 20 74 65 6d 70 64  .ifcapable tempd
15f0: 62 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 61 75  b {.  do_test au
1600: 74 68 2d 31 2e 32 35 20 7b 0a 20 20 20 20 70 72  th-1.25 {.    pr
1610: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
1620: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
1630: 34 7d 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24  4} {.      if {$
1640: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52  code=="SQLITE_DR
1650: 4f 50 5f 54 45 4d 50 5f 54 41 42 4c 45 22 7d 20  OP_TEMP_TABLE"} 
1660: 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a  {.        set ::
1670: 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24  authargs [list $
1680: 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33  arg1 $arg2 $arg3
1690: 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 20 20   $arg4].        
16a0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45  return SQLITE_DE
16b0: 4e 59 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  NY.      }.     
16c0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
16d0: 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 74 63  K.    }.    catc
16e0: 68 73 71 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45  hsql {DROP TABLE
16f0: 20 74 31 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f 74   t1}.  } {1 {not
1700: 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 20 20   authorized}}.  
1710: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
1720: 36 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  6 {.    execsql 
1730: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
1740: 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  M sqlite_temp_ma
1750: 73 74 65 72 7d 0a 20 20 7d 20 7b 74 31 7d 0a 20  ster}.  } {t1}. 
1760: 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e   do_test auth-1.
1770: 32 37 20 7b 0a 20 20 20 20 70 72 6f 63 20 61 75  27 {.    proc au
1780: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
1790: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
17a0: 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d        if {$code=
17b0: 3d 22 53 51 4c 49 54 45 5f 44 52 4f 50 5f 54 45  ="SQLITE_DROP_TE
17c0: 4d 50 5f 54 41 42 4c 45 22 7d 20 7b 0a 20 20 20  MP_TABLE"} {.   
17d0: 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61       set ::autha
17e0: 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20  rgs [list $arg1 
17f0: 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67  $arg2 $arg3 $arg
1800: 34 5d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  4].        retur
1810: 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a  n SQLITE_IGNORE.
1820: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65        }.      re
1830: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
1840: 20 20 20 7d 0a 20 20 20 20 63 61 74 63 68 73 71     }.    catchsq
1850: 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45 20 74 31  l {DROP TABLE t1
1860: 7d 0a 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20 20 64  }.  } {0 {}}.  d
1870: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 38  o_test auth-1.28
1880: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
1890: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
18a0: 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73   sqlite_temp_mas
18b0: 74 65 72 7d 0a 20 20 7d 20 7b 74 31 7d 0a 7d 0a  ter}.  } {t1}.}.
18c0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
18d0: 32 39 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  29 {.  proc auth
18e0: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
18f0: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
1900: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
1910: 4c 49 54 45 5f 49 4e 53 45 52 54 22 20 26 26 20  LITE_INSERT" && 
1920: 24 61 72 67 31 3d 3d 22 74 32 22 7d 20 7b 0a 20  $arg1=="t2"} {. 
1930: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
1940: 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20  TE_DENY.    }.  
1950: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
1960: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
1970: 6c 20 7b 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  l {INSERT INTO t
1980: 32 20 56 41 4c 55 45 53 28 31 2c 32 2c 33 29 7d  2 VALUES(1,2,3)}
1990: 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f  .} {1 {not autho
19a0: 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20  rized}}.do_test 
19b0: 61 75 74 68 2d 31 2e 33 30 20 7b 0a 20 20 65 78  auth-1.30 {.  ex
19c0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20  ecsql {SELECT * 
19d0: 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 7d 0a 64 6f  FROM t2}.} {}.do
19e0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 33 31 20  _test auth-1.31 
19f0: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
1a00: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
1a10: 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69  g3 arg4} {.    i
1a20: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
1a30: 45 5f 49 4e 53 45 52 54 22 20 26 26 20 24 61 72  E_INSERT" && $ar
1a40: 67 31 3d 3d 22 74 32 22 7d 20 7b 0a 20 20 20 20  g1=="t2"} {.    
1a50: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
1a60: 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20  IGNORE.    }.   
1a70: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
1a80: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
1a90: 20 7b 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32   {INSERT INTO t2
1aa0: 20 56 41 4c 55 45 53 28 31 2c 32 2c 33 29 7d 0a   VALUES(1,2,3)}.
1ab0: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
1ac0: 20 61 75 74 68 2d 31 2e 33 32 20 7b 0a 20 20 65   auth-1.32 {.  e
1ad0: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a  xecsql {SELECT *
1ae0: 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 7d 0a 64   FROM t2}.} {}.d
1af0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 33 33  o_test auth-1.33
1b00: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
1b10: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
1b20: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
1b30: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
1b40: 54 45 5f 49 4e 53 45 52 54 22 20 26 26 20 24 61  TE_INSERT" && $a
1b50: 72 67 31 3d 3d 22 74 31 22 7d 20 7b 0a 20 20 20  rg1=="t1"} {.   
1b60: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
1b70: 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20  _IGNORE.    }.  
1b80: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
1b90: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
1ba0: 6c 20 7b 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  l {INSERT INTO t
1bb0: 32 20 56 41 4c 55 45 53 28 31 2c 32 2c 33 29 7d  2 VALUES(1,2,3)}
1bc0: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
1bd0: 74 20 61 75 74 68 2d 31 2e 33 34 20 7b 0a 20 20  t auth-1.34 {.  
1be0: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
1bf0: 2a 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31 20  * FROM t2}.} {1 
1c00: 32 20 33 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 75  2 3}..do_test au
1c10: 74 68 2d 31 2e 33 35 2e 31 20 7b 0a 20 20 70 72  th-1.35.1 {.  pr
1c20: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
1c30: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
1c40: 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f  4} {.    if {$co
1c50: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45 41 44  de=="SQLITE_READ
1c60: 22 20 26 26 20 24 61 72 67 31 3d 3d 22 74 32 22  " && $arg1=="t2"
1c70: 20 26 26 20 24 61 72 67 32 3d 3d 22 62 22 7d 20   && $arg2=="b"} 
1c80: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  {.      return S
1c90: 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d  QLITE_DENY.    }
1ca0: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
1cb0: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
1cc0: 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46  hsql {SELECT * F
1cd0: 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31 20 7b 61 63  ROM t2}.} {1 {ac
1ce0: 63 65 73 73 20 74 6f 20 74 32 2e 62 20 69 73 20  cess to t2.b is 
1cf0: 70 72 6f 68 69 62 69 74 65 64 7d 7d 0a 69 66 63  prohibited}}.ifc
1d00: 61 70 61 62 6c 65 20 61 74 74 61 63 68 20 7b 0a  apable attach {.
1d10: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31    do_test auth-1
1d20: 2e 33 35 2e 32 20 7b 0a 20 20 20 20 65 78 65 63  .35.2 {.    exec
1d30: 73 71 6c 20 7b 41 54 54 41 43 48 20 44 41 54 41  sql {ATTACH DATA
1d40: 42 41 53 45 20 27 74 65 73 74 2e 64 62 27 20 41  BASE 'test.db' A
1d50: 53 20 74 77 6f 7d 0a 20 20 20 20 63 61 74 63 68  S two}.    catch
1d60: 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52  sql {SELECT * FR
1d70: 4f 4d 20 74 77 6f 2e 74 32 7d 0a 20 20 7d 20 7b  OM two.t2}.  } {
1d80: 31 20 7b 61 63 63 65 73 73 20 74 6f 20 74 77 6f  1 {access to two
1d90: 2e 74 32 2e 62 20 69 73 20 70 72 6f 68 69 62 69  .t2.b is prohibi
1da0: 74 65 64 7d 7d 0a 20 20 65 78 65 63 73 71 6c 20  ted}}.  execsql 
1db0: 7b 44 45 54 41 43 48 20 44 41 54 41 42 41 53 45  {DETACH DATABASE
1dc0: 20 74 77 6f 7d 0a 7d 0a 64 6f 5f 74 65 73 74 20   two}.}.do_test 
1dd0: 61 75 74 68 2d 31 2e 33 36 20 7b 0a 20 20 70 72  auth-1.36 {.  pr
1de0: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
1df0: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
1e00: 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f  4} {.    if {$co
1e10: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45 41 44  de=="SQLITE_READ
1e20: 22 20 26 26 20 24 61 72 67 31 3d 3d 22 74 32 22  " && $arg1=="t2"
1e30: 20 26 26 20 24 61 72 67 32 3d 3d 22 62 22 7d 20   && $arg2=="b"} 
1e40: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  {.      return S
1e50: 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20  QLITE_IGNORE.   
1e60: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
1e70: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
1e80: 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a  tchsql {SELECT *
1e90: 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 30 20 7b   FROM t2}.} {0 {
1ea0: 31 20 7b 7d 20 33 7d 7d 0a 64 6f 5f 74 65 73 74  1 {} 3}}.do_test
1eb0: 20 61 75 74 68 2d 31 2e 33 37 20 7b 0a 20 20 70   auth-1.37 {.  p
1ec0: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
1ed0: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
1ee0: 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g4} {.    if {$c
1ef0: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45 41  ode=="SQLITE_REA
1f00: 44 22 20 26 26 20 24 61 72 67 31 3d 3d 22 74 32  D" && $arg1=="t2
1f10: 22 20 26 26 20 24 61 72 67 32 3d 3d 22 62 22 7d  " && $arg2=="b"}
1f20: 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   {.      return 
1f30: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20  SQLITE_IGNORE.  
1f40: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
1f50: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
1f60: 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20  atchsql {SELECT 
1f70: 2a 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20  * FROM t2 WHERE 
1f80: 62 3d 32 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f  b=2}.} {0 {}}.do
1f90: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 33 38 20  _test auth-1.38 
1fa0: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
1fb0: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
1fc0: 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69  g3 arg4} {.    i
1fd0: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
1fe0: 45 5f 52 45 41 44 22 20 26 26 20 24 61 72 67 31  E_READ" && $arg1
1ff0: 3d 3d 22 74 32 22 20 26 26 20 24 61 72 67 32 3d  =="t2" && $arg2=
2000: 3d 22 61 22 7d 20 7b 0a 20 20 20 20 20 20 72 65  ="a"} {.      re
2010: 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f  turn SQLITE_IGNO
2020: 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  RE.    }.    ret
2030: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
2040: 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 53 45  }.  catchsql {SE
2050: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 20 57  LECT * FROM t2 W
2060: 48 45 52 45 20 62 3d 32 7d 0a 7d 20 7b 30 20 7b  HERE b=2}.} {0 {
2070: 7b 7d 20 32 20 33 7d 7d 0a 64 6f 5f 74 65 73 74  {} 2 3}}.do_test
2080: 20 61 75 74 68 2d 31 2e 33 39 20 7b 0a 20 20 70   auth-1.39 {.  p
2090: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
20a0: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
20b0: 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g4} {.    if {$c
20c0: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45 41  ode=="SQLITE_REA
20d0: 44 22 20 26 26 20 24 61 72 67 31 3d 3d 22 74 32  D" && $arg1=="t2
20e0: 22 20 26 26 20 24 61 72 67 32 3d 3d 22 62 22 7d  " && $arg2=="b"}
20f0: 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   {.      return 
2100: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20  SQLITE_IGNORE.  
2110: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
2120: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
2130: 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20  atchsql {SELECT 
2140: 2a 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20  * FROM t2 WHERE 
2150: 62 20 49 53 20 4e 55 4c 4c 7d 0a 7d 20 7b 30 20  b IS NULL}.} {0 
2160: 7b 31 20 7b 7d 20 33 7d 7d 0a 64 6f 5f 74 65 73  {1 {} 3}}.do_tes
2170: 74 20 61 75 74 68 2d 31 2e 34 30 20 7b 0a 20 20  t auth-1.40 {.  
2180: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
2190: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
21a0: 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg4} {.    if {$
21b0: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45  code=="SQLITE_RE
21c0: 41 44 22 20 26 26 20 24 61 72 67 31 3d 3d 22 74  AD" && $arg1=="t
21d0: 32 22 20 26 26 20 24 61 72 67 32 3d 3d 22 62 22  2" && $arg2=="b"
21e0: 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  } {.      return
21f0: 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20   SQLITE_DENY.   
2200: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
2210: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
2220: 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 61  tchsql {SELECT a
2230: 2c 63 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45  ,c FROM t2 WHERE
2240: 20 62 20 49 53 20 4e 55 4c 4c 7d 0a 7d 20 7b 31   b IS NULL}.} {1
2250: 20 7b 61 63 63 65 73 73 20 74 6f 20 74 32 2e 62   {access to t2.b
2260: 20 69 73 20 70 72 6f 68 69 62 69 74 65 64 7d 7d   is prohibited}}
2270: 0a 20 20 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  .  .do_test auth
2280: 2d 31 2e 34 31 20 7b 0a 20 20 70 72 6f 63 20 61  -1.41 {.  proc a
2290: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
22a0: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
22b0: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
22c0: 22 53 51 4c 49 54 45 5f 55 50 44 41 54 45 22 20  "SQLITE_UPDATE" 
22d0: 26 26 20 24 61 72 67 31 3d 3d 22 74 32 22 20 26  && $arg1=="t2" &
22e0: 26 20 24 61 72 67 32 3d 3d 22 62 22 7d 20 7b 0a  & $arg2=="b"} {.
22f0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
2300: 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20  ITE_DENY.    }. 
2310: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
2320: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
2330: 71 6c 20 7b 55 50 44 41 54 45 20 74 32 20 53 45  ql {UPDATE t2 SE
2340: 54 20 61 3d 31 31 7d 0a 7d 20 7b 30 20 7b 7d 7d  T a=11}.} {0 {}}
2350: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
2360: 34 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  42 {.  execsql {
2370: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32  SELECT * FROM t2
2380: 7d 0a 7d 20 7b 31 31 20 32 20 33 7d 0a 64 6f 5f  }.} {11 2 3}.do_
2390: 74 65 73 74 20 61 75 74 68 2d 31 2e 34 33 20 7b  test auth-1.43 {
23a0: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
23b0: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
23c0: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66  3 arg4} {.    if
23d0: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
23e0: 5f 55 50 44 41 54 45 22 20 26 26 20 24 61 72 67  _UPDATE" && $arg
23f0: 31 3d 3d 22 74 32 22 20 26 26 20 24 61 72 67 32  1=="t2" && $arg2
2400: 3d 3d 22 62 22 7d 20 7b 0a 20 20 20 20 20 20 72  =="b"} {.      r
2410: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e  eturn SQLITE_DEN
2420: 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  Y.    }.    retu
2430: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
2440: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 55 50 44  .  catchsql {UPD
2450: 41 54 45 20 74 32 20 53 45 54 20 62 3d 32 32 2c  ATE t2 SET b=22,
2460: 20 63 3d 33 33 7d 0a 7d 20 7b 31 20 7b 6e 6f 74   c=33}.} {1 {not
2470: 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f   authorized}}.do
2480: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 34 34 20  _test auth-1.44 
2490: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
24a0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d 0a 7d  ECT * FROM t2}.}
24b0: 20 7b 31 31 20 32 20 33 7d 0a 64 6f 5f 74 65 73   {11 2 3}.do_tes
24c0: 74 20 61 75 74 68 2d 31 2e 34 35 20 7b 0a 20 20  t auth-1.45 {.  
24d0: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
24e0: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
24f0: 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg4} {.    if {$
2500: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 55 50  code=="SQLITE_UP
2510: 44 41 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d  DATE" && $arg1==
2520: 22 74 32 22 20 26 26 20 24 61 72 67 32 3d 3d 22  "t2" && $arg2=="
2530: 62 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75  b"} {.      retu
2540: 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45  rn SQLITE_IGNORE
2550: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
2560: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
2570: 20 20 63 61 74 63 68 73 71 6c 20 7b 55 50 44 41    catchsql {UPDA
2580: 54 45 20 74 32 20 53 45 54 20 62 3d 32 32 2c 20  TE t2 SET b=22, 
2590: 63 3d 33 33 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  c=33}.} {0 {}}.d
25a0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 34 36  o_test auth-1.46
25b0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
25c0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d 0a  LECT * FROM t2}.
25d0: 7d 20 7b 31 31 20 32 20 33 33 7d 0a 0a 64 6f 5f  } {11 2 33}..do_
25e0: 74 65 73 74 20 61 75 74 68 2d 31 2e 34 37 20 7b  test auth-1.47 {
25f0: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
2600: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
2610: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66  3 arg4} {.    if
2620: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
2630: 5f 44 45 4c 45 54 45 22 20 26 26 20 24 61 72 67  _DELETE" && $arg
2640: 31 3d 3d 22 74 32 22 7d 20 7b 0a 20 20 20 20 20  1=="t2"} {.     
2650: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44   return SQLITE_D
2660: 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  ENY.    }.    re
2670: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
2680: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44   }.  catchsql {D
2690: 45 4c 45 54 45 20 46 52 4f 4d 20 74 32 20 57 48  ELETE FROM t2 WH
26a0: 45 52 45 20 61 3d 31 31 7d 0a 7d 20 7b 31 20 7b  ERE a=11}.} {1 {
26b0: 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d  not authorized}}
26c0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
26d0: 34 38 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  48 {.  execsql {
26e0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32  SELECT * FROM t2
26f0: 7d 0a 7d 20 7b 31 31 20 32 20 33 33 7d 0a 64 6f  }.} {11 2 33}.do
2700: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 34 39 20  _test auth-1.49 
2710: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
2720: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
2730: 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69  g3 arg4} {.    i
2740: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
2750: 45 5f 44 45 4c 45 54 45 22 20 26 26 20 24 61 72  E_DELETE" && $ar
2760: 67 31 3d 3d 22 74 32 22 7d 20 7b 0a 20 20 20 20  g1=="t2"} {.    
2770: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
2780: 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20  IGNORE.    }.   
2790: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
27a0: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
27b0: 20 7b 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 32   {DELETE FROM t2
27c0: 20 57 48 45 52 45 20 61 3d 31 31 7d 0a 7d 20 7b   WHERE a=11}.} {
27d0: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  0 {}}.do_test au
27e0: 74 68 2d 31 2e 35 30 20 7b 0a 20 20 65 78 65 63  th-1.50 {.  exec
27f0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52  sql {SELECT * FR
2800: 4f 4d 20 74 32 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74  OM t2}.} {}.do_t
2810: 65 73 74 20 61 75 74 68 2d 31 2e 35 30 2e 32 20  est auth-1.50.2 
2820: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 49 4e 53  {.  execsql {INS
2830: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
2840: 45 53 28 31 31 2c 20 32 2c 20 33 33 29 7d 0a 7d  ES(11, 2, 33)}.}
2850: 20 7b 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}..do_test aut
2860: 68 2d 31 2e 35 31 20 7b 0a 20 20 70 72 6f 63 20  h-1.51 {.  proc 
2870: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
2880: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
2890: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
28a0: 3d 22 53 51 4c 49 54 45 5f 53 45 4c 45 43 54 22  ="SQLITE_SELECT"
28b0: 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  } {.      return
28c0: 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20   SQLITE_DENY.   
28d0: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
28e0: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
28f0: 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a  tchsql {SELECT *
2900: 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31 20 7b   FROM t2}.} {1 {
2910: 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d  not authorized}}
2920: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
2930: 35 32 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  52 {.  proc auth
2940: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
2950: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
2960: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
2970: 4c 49 54 45 5f 53 45 4c 45 43 54 22 7d 20 7b 0a  LITE_SELECT"} {.
2980: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
2990: 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d  ITE_IGNORE.    }
29a0: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
29b0: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
29c0: 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46  hsql {SELECT * F
29d0: 52 4f 4d 20 74 32 7d 0a 7d 20 7b 30 20 7b 7d 7d  ROM t2}.} {0 {}}
29e0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
29f0: 35 33 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  53 {.  proc auth
2a00: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
2a10: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
2a20: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
2a30: 4c 49 54 45 5f 53 45 4c 45 43 54 22 7d 20 7b 0a  LITE_SELECT"} {.
2a40: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
2a50: 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20  ITE_OK.    }.   
2a60: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
2a70: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
2a80: 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   {SELECT * FROM 
2a90: 74 32 7d 0a 7d 20 7b 30 20 7b 31 31 20 32 20 33  t2}.} {0 {11 2 3
2aa0: 33 7d 7d 0a 0a 23 20 55 70 64 61 74 65 20 66 6f  3}}..# Update fo
2ab0: 72 20 76 65 72 73 69 6f 6e 20 33 3a 20 54 68 65  r version 3: The
2ac0: 72 65 20 75 73 65 64 20 74 6f 20 62 65 20 61 20  re used to be a 
2ad0: 68 61 6e 64 66 75 6c 20 6f 66 20 74 65 73 74 20  handful of test 
2ae0: 68 65 72 65 20 74 68 61 74 0a 23 20 74 65 73 74  here that.# test
2af0: 65 64 20 74 68 65 20 61 75 74 68 6f 72 69 73 61  ed the authorisa
2b00: 74 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 77 69  tion callback wi
2b10: 74 68 20 74 68 65 20 43 4f 50 59 20 63 6f 6d 6d  th the COPY comm
2b20: 61 6e 64 2e 20 54 68 65 20 66 6f 6c 6c 6f 77 69  and. The followi
2b30: 6e 67 0a 23 20 74 65 73 74 20 6d 61 6b 65 73 20  ng.# test makes 
2b40: 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73  the same databas
2b50: 65 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e 73 20  e modifications 
2b60: 61 73 20 74 68 65 79 20 75 73 65 64 20 74 6f 2e  as they used to.
2b70: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
2b80: 35 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  54 {.  execsql {
2b90: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56  INSERT INTO t2 V
2ba0: 41 4c 55 45 53 28 37 2c 20 38 2c 20 39 29 3b 7d  ALUES(7, 8, 9);}
2bb0: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 61 75  .} {}.do_test au
2bc0: 74 68 2d 31 2e 35 35 20 7b 0a 20 20 65 78 65 63  th-1.55 {.  exec
2bd0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52  sql {SELECT * FR
2be0: 4f 4d 20 74 32 7d 0a 7d 20 7b 31 31 20 32 20 33  OM t2}.} {11 2 3
2bf0: 33 20 37 20 38 20 39 7d 0a 0a 64 6f 5f 74 65 73  3 7 8 9}..do_tes
2c00: 74 20 61 75 74 68 2d 31 2e 36 33 20 7b 0a 20 20  t auth-1.63 {.  
2c10: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
2c20: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
2c30: 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg4} {.    if {$
2c40: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45  code=="SQLITE_DE
2c50: 4c 45 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d  LETE" && $arg1==
2c60: 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 7d  "sqlite_master"}
2c70: 20 7b 0a 20 20 20 20 20 20 20 72 65 74 75 72 6e   {.       return
2c80: 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20   SQLITE_DENY.   
2c90: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
2ca0: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
2cb0: 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54 41 42  tchsql {DROP TAB
2cc0: 4c 45 20 74 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74  LE t2}.} {1 {not
2cd0: 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f   authorized}}.do
2ce0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 36 34 20  _test auth-1.64 
2cf0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
2d00: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
2d10: 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b  lite_master}.} {
2d20: 74 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  t2}.do_test auth
2d30: 2d 31 2e 36 35 20 7b 0a 20 20 70 72 6f 63 20 61  -1.65 {.  proc a
2d40: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
2d50: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
2d60: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
2d70: 22 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 22 20  "SQLITE_DELETE" 
2d80: 26 26 20 24 61 72 67 31 3d 3d 22 74 32 22 7d 20  && $arg1=="t2"} 
2d90: 7b 0a 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  {.       return 
2da0: 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20  SQLITE_DENY.    
2db0: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
2dc0: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
2dd0: 63 68 73 71 6c 20 7b 44 52 4f 50 20 54 41 42 4c  chsql {DROP TABL
2de0: 45 20 74 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20  E t2}.} {1 {not 
2df0: 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f  authorized}}.do_
2e00: 74 65 73 74 20 61 75 74 68 2d 31 2e 36 36 20 7b  test auth-1.66 {
2e10: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
2e20: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
2e30: 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74  ite_master}.} {t
2e40: 32 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20 74 65  2}..ifcapable te
2e50: 6d 70 64 62 20 7b 0a 20 20 64 6f 5f 74 65 73 74  mpdb {.  do_test
2e60: 20 61 75 74 68 2d 31 2e 36 37 20 7b 0a 20 20 20   auth-1.67 {.   
2e70: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
2e80: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
2e90: 61 72 67 34 7d 20 7b 0a 20 20 20 20 20 20 69 66  arg4} {.      if
2ea0: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
2eb0: 5f 44 45 4c 45 54 45 22 20 26 26 20 24 61 72 67  _DELETE" && $arg
2ec0: 31 3d 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f  1=="sqlite_temp_
2ed0: 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20  master"} {.     
2ee0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
2ef0: 45 5f 44 45 4e 59 0a 20 20 20 20 20 20 7d 0a 20  E_DENY.      }. 
2f00: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
2f10: 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20  TE_OK.    }.    
2f20: 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54  catchsql {DROP T
2f30: 41 42 4c 45 20 74 31 7d 0a 20 20 7d 20 7b 31 20  ABLE t1}.  } {1 
2f40: 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d  {not authorized}
2f50: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68  }.  do_test auth
2f60: 2d 31 2e 36 38 20 7b 0a 20 20 20 20 65 78 65 63  -1.68 {.    exec
2f70: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
2f80: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d   FROM sqlite_tem
2f90: 70 5f 6d 61 73 74 65 72 7d 0a 20 20 7d 20 7b 74  p_master}.  } {t
2fa0: 31 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74  1}.  do_test aut
2fb0: 68 2d 31 2e 36 39 20 7b 0a 20 20 20 20 70 72 6f  h-1.69 {.    pro
2fc0: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
2fd0: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
2fe0: 7d 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 63  } {.      if {$c
2ff0: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c  ode=="SQLITE_DEL
3000: 45 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d 22  ETE" && $arg1=="
3010: 74 31 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 20  t1"} {.         
3020: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45  return SQLITE_DE
3030: 4e 59 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  NY.      }.     
3040: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
3050: 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 74 63  K.    }.    catc
3060: 68 73 71 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45  hsql {DROP TABLE
3070: 20 74 31 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f 74   t1}.  } {1 {not
3080: 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 20 20   authorized}}.  
3090: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 37  do_test auth-1.7
30a0: 30 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  0 {.    execsql 
30b0: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
30c0: 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  M sqlite_temp_ma
30d0: 73 74 65 72 7d 0a 20 20 7d 20 7b 74 31 7d 0a 7d  ster}.  } {t1}.}
30e0: 0a 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  ..do_test auth-1
30f0: 2e 37 31 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  .71 {.  proc aut
3100: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
3110: 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20  2 arg3 arg4} {. 
3120: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
3130: 51 4c 49 54 45 5f 44 45 4c 45 54 45 22 20 26 26  QLITE_DELETE" &&
3140: 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f   $arg1=="sqlite_
3150: 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20  master"} {.     
3160: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
3170: 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20  IGNORE.    }.   
3180: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
3190: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
31a0: 20 7b 44 52 4f 50 20 54 41 42 4c 45 20 74 32 7d   {DROP TABLE t2}
31b0: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
31c0: 74 20 61 75 74 68 2d 31 2e 37 32 20 7b 0a 20 20  t auth-1.72 {.  
31d0: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
31e0: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
31f0: 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a  _master}.} {t2}.
3200: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 37  do_test auth-1.7
3210: 33 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  3 {.  proc auth 
3220: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
3230: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
3240: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
3250: 49 54 45 5f 44 45 4c 45 54 45 22 20 26 26 20 24  ITE_DELETE" && $
3260: 61 72 67 31 3d 3d 22 74 32 22 7d 20 7b 0a 20 20  arg1=="t2"} {.  
3270: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
3280: 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a  TE_IGNORE.    }.
3290: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
32a0: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
32b0: 73 71 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45 20  sql {DROP TABLE 
32c0: 74 32 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f  t2}.} {0 {}}.do_
32d0: 74 65 73 74 20 61 75 74 68 2d 31 2e 37 34 20 7b  test auth-1.74 {
32e0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
32f0: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
3300: 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74  ite_master}.} {t
3310: 32 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20 74 65  2}..ifcapable te
3320: 6d 70 64 62 20 7b 0a 20 20 64 6f 5f 74 65 73 74  mpdb {.  do_test
3330: 20 61 75 74 68 2d 31 2e 37 35 20 7b 0a 20 20 20   auth-1.75 {.   
3340: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
3350: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
3360: 61 72 67 34 7d 20 7b 0a 20 20 20 20 20 20 69 66  arg4} {.      if
3370: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
3380: 5f 44 45 4c 45 54 45 22 20 26 26 20 24 61 72 67  _DELETE" && $arg
3390: 31 3d 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f  1=="sqlite_temp_
33a0: 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20  master"} {.     
33b0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
33c0: 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 20 20 7d  E_IGNORE.      }
33d0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
33e0: 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20  LITE_OK.    }.  
33f0: 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50    catchsql {DROP
3400: 20 54 41 42 4c 45 20 74 31 7d 0a 20 20 7d 20 7b   TABLE t1}.  } {
3410: 30 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20  0 {}}.  do_test 
3420: 61 75 74 68 2d 31 2e 37 36 20 7b 0a 20 20 20 20  auth-1.76 {.    
3430: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
3440: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
3450: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 20 20  _temp_master}.  
3460: 7d 20 7b 74 31 7d 0a 20 20 64 6f 5f 74 65 73 74  } {t1}.  do_test
3470: 20 61 75 74 68 2d 31 2e 37 37 20 7b 0a 20 20 20   auth-1.77 {.   
3480: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
3490: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
34a0: 61 72 67 34 7d 20 7b 0a 20 20 20 20 20 20 69 66  arg4} {.      if
34b0: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
34c0: 5f 44 45 4c 45 54 45 22 20 26 26 20 24 61 72 67  _DELETE" && $arg
34d0: 31 3d 3d 22 74 31 22 7d 20 7b 0a 20 20 20 20 20  1=="t1"} {.     
34e0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
34f0: 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 20 20 7d  E_IGNORE.      }
3500: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
3510: 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20  LITE_OK.    }.  
3520: 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50    catchsql {DROP
3530: 20 54 41 42 4c 45 20 74 31 7d 0a 20 20 7d 20 7b   TABLE t1}.  } {
3540: 30 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20  0 {}}.  do_test 
3550: 61 75 74 68 2d 31 2e 37 38 20 7b 0a 20 20 20 20  auth-1.78 {.    
3560: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
3570: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
3580: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 20 20  _temp_master}.  
3590: 7d 20 7b 74 31 7d 0a 7d 0a 0a 23 20 54 65 73 74  } {t1}.}..# Test
35a0: 20 63 61 73 65 73 20 61 75 74 68 2d 31 2e 37 39   cases auth-1.79
35b0: 20 74 6f 20 61 75 74 68 2d 31 2e 31 32 34 20 74   to auth-1.124 t
35c0: 65 73 74 20 63 72 65 61 74 69 6e 67 20 61 6e 64  est creating and
35d0: 20 64 72 6f 70 70 69 6e 67 20 76 69 65 77 73 2e   dropping views.
35e0: 0a 23 20 4f 6d 69 74 20 74 68 65 73 65 20 69 66  .# Omit these if
35f0: 20 74 68 65 20 6c 69 62 72 61 72 79 20 77 61 73   the library was
3600: 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 76   compiled with v
3610: 69 65 77 73 20 6f 6d 69 74 74 65 64 2e 0a 69 66  iews omitted..if
3620: 63 61 70 61 62 6c 65 20 76 69 65 77 20 7b 0a 64  capable view {.d
3630: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 37 39  o_test auth-1.79
3640: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
3650: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
3660: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
3670: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
3680: 54 45 5f 43 52 45 41 54 45 5f 56 49 45 57 22 7d  TE_CREATE_VIEW"}
3690: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61   {.      set ::a
36a0: 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61  uthargs [list $a
36b0: 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20  rg1 $arg2 $arg3 
36c0: 24 61 72 67 34 5d 20 0a 20 20 20 20 20 20 72 65  $arg4] .      re
36d0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59  turn SQLITE_DENY
36e0: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
36f0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
3700: 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41    catchsql {CREA
3710: 54 45 20 56 49 45 57 20 76 31 20 41 53 20 53 45  TE VIEW v1 AS SE
3720: 4c 45 43 54 20 61 2b 31 2c 62 2b 31 20 46 52 4f  LECT a+1,b+1 FRO
3730: 4d 20 74 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20  M t2}.} {1 {not 
3740: 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f  authorized}}.do_
3750: 74 65 73 74 20 61 75 74 68 2d 31 2e 38 30 20 7b  test auth-1.80 {
3760: 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67  .  set ::autharg
3770: 73 0a 7d 20 7b 76 31 20 7b 7d 20 6d 61 69 6e 20  s.} {v1 {} main 
3780: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
3790: 2d 31 2e 38 31 20 7b 0a 20 20 65 78 65 63 73 71  -1.81 {.  execsq
37a0: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
37b0: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
37c0: 72 7d 0a 7d 20 7b 74 32 7d 0a 64 6f 5f 74 65 73  r}.} {t2}.do_tes
37d0: 74 20 61 75 74 68 2d 31 2e 38 32 20 7b 0a 20 20  t auth-1.82 {.  
37e0: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
37f0: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
3800: 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg4} {.    if {$
3810: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52  code=="SQLITE_CR
3820: 45 41 54 45 5f 56 49 45 57 22 7d 20 7b 0a 20 20  EATE_VIEW"} {.  
3830: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
3840: 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24  gs [list $arg1 $
3850: 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34  arg2 $arg3 $arg4
3860: 5d 20 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ] .      return 
3870: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20  SQLITE_IGNORE.  
3880: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
3890: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
38a0: 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45 20  atchsql {CREATE 
38b0: 56 49 45 57 20 76 31 20 41 53 20 53 45 4c 45 43  VIEW v1 AS SELEC
38c0: 54 20 61 2b 31 2c 62 2b 31 20 46 52 4f 4d 20 74  T a+1,b+1 FROM t
38d0: 32 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74  2}.} {0 {}}.do_t
38e0: 65 73 74 20 61 75 74 68 2d 31 2e 38 33 20 7b 0a  est auth-1.83 {.
38f0: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
3900: 0a 7d 20 7b 76 31 20 7b 7d 20 6d 61 69 6e 20 7b  .} {v1 {} main {
3910: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
3920: 31 2e 38 34 20 7b 0a 20 20 65 78 65 63 73 71 6c  1.84 {.  execsql
3930: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
3940: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
3950: 7d 0a 7d 20 7b 74 32 7d 0a 0a 69 66 63 61 70 61  }.} {t2}..ifcapa
3960: 62 6c 65 20 74 65 6d 70 64 62 20 7b 0a 20 20 64  ble tempdb {.  d
3970: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 38 35  o_test auth-1.85
3980: 20 7b 0a 20 20 20 20 70 72 6f 63 20 61 75 74 68   {.    proc auth
3990: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
39a0: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
39b0: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
39c0: 53 51 4c 49 54 45 5f 43 52 45 41 54 45 5f 54 45  SQLITE_CREATE_TE
39d0: 4d 50 5f 56 49 45 57 22 7d 20 7b 0a 20 20 20 20  MP_VIEW"} {.    
39e0: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
39f0: 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24  gs [list $arg1 $
3a00: 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34  arg2 $arg3 $arg4
3a10: 5d 20 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ] .        retur
3a20: 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20  n SQLITE_DENY.  
3a30: 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75      }.      retu
3a40: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20  rn SQLITE_OK.   
3a50: 20 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20   }.    catchsql 
3a60: 7b 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52  {CREATE TEMPORAR
3a70: 59 20 56 49 45 57 20 76 31 20 41 53 20 53 45 4c  Y VIEW v1 AS SEL
3a80: 45 43 54 20 61 2b 31 2c 62 2b 31 20 46 52 4f 4d  ECT a+1,b+1 FROM
3a90: 20 74 32 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f 74   t2}.  } {1 {not
3aa0: 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 20 20   authorized}}.  
3ab0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 38  do_test auth-1.8
3ac0: 36 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a 61 75  6 {.    set ::au
3ad0: 74 68 61 72 67 73 0a 20 20 7d 20 7b 76 31 20 7b  thargs.  } {v1 {
3ae0: 7d 20 74 65 6d 70 20 7b 7d 7d 0a 20 20 64 6f 5f  } temp {}}.  do_
3af0: 74 65 73 74 20 61 75 74 68 2d 31 2e 38 37 20 7b  test auth-1.87 {
3b00: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45  .    execsql {SE
3b10: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73  LECT name FROM s
3b20: 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
3b30: 72 7d 0a 20 20 7d 20 7b 74 31 7d 0a 20 20 64 6f  r}.  } {t1}.  do
3b40: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 38 38 20  _test auth-1.88 
3b50: 7b 0a 20 20 20 20 70 72 6f 63 20 61 75 74 68 20  {.    proc auth 
3b60: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
3b70: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
3b80: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
3b90: 51 4c 49 54 45 5f 43 52 45 41 54 45 5f 54 45 4d  QLITE_CREATE_TEM
3ba0: 50 5f 56 49 45 57 22 7d 20 7b 0a 20 20 20 20 20  P_VIEW"} {.     
3bb0: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
3bc0: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
3bd0: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
3be0: 20 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e   .        return
3bf0: 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20   SQLITE_IGNORE. 
3c00: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74       }.      ret
3c10: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
3c20: 20 20 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c    }.    catchsql
3c30: 20 7b 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41   {CREATE TEMPORA
3c40: 52 59 20 56 49 45 57 20 76 31 20 41 53 20 53 45  RY VIEW v1 AS SE
3c50: 4c 45 43 54 20 61 2b 31 2c 62 2b 31 20 46 52 4f  LECT a+1,b+1 FRO
3c60: 4d 20 74 32 7d 0a 20 20 7d 20 7b 30 20 7b 7d 7d  M t2}.  } {0 {}}
3c70: 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  .  do_test auth-
3c80: 31 2e 38 39 20 7b 0a 20 20 20 20 73 65 74 20 3a  1.89 {.    set :
3c90: 3a 61 75 74 68 61 72 67 73 0a 20 20 7d 20 7b 76  :authargs.  } {v
3ca0: 31 20 7b 7d 20 74 65 6d 70 20 7b 7d 7d 0a 20 20  1 {} temp {}}.  
3cb0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 39  do_test auth-1.9
3cc0: 30 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  0 {.    execsql 
3cd0: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
3ce0: 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  M sqlite_temp_ma
3cf0: 73 74 65 72 7d 0a 20 20 7d 20 7b 74 31 7d 0a 7d  ster}.  } {t1}.}
3d00: 0a 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  ..do_test auth-1
3d10: 2e 39 31 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  .91 {.  proc aut
3d20: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
3d30: 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20  2 arg3 arg4} {. 
3d40: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
3d50: 51 4c 49 54 45 5f 49 4e 53 45 52 54 22 20 26 26  QLITE_INSERT" &&
3d60: 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f   $arg1=="sqlite_
3d70: 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20  master"} {.     
3d80: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44   return SQLITE_D
3d90: 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  ENY.    }.    re
3da0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
3db0: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 43   }.  catchsql {C
3dc0: 52 45 41 54 45 20 56 49 45 57 20 76 31 20 41 53  REATE VIEW v1 AS
3dd0: 20 53 45 4c 45 43 54 20 61 2b 31 2c 62 2b 31 20   SELECT a+1,b+1 
3de0: 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31 20 7b 6e  FROM t2}.} {1 {n
3df0: 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a  ot authorized}}.
3e00: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 39  do_test auth-1.9
3e10: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  2 {.  execsql {S
3e20: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
3e30: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d  sqlite_master}.}
3e40: 20 7b 74 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75   {t2}.do_test au
3e50: 74 68 2d 31 2e 39 33 20 7b 0a 20 20 70 72 6f 63  th-1.93 {.  proc
3e60: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
3e70: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
3e80: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
3e90: 3d 3d 22 53 51 4c 49 54 45 5f 49 4e 53 45 52 54  =="SQLITE_INSERT
3ea0: 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71 6c  " && $arg1=="sql
3eb0: 69 74 65 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20  ite_master"} {. 
3ec0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
3ed0: 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a  TE_IGNORE.    }.
3ee0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
3ef0: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
3f00: 73 71 6c 20 7b 43 52 45 41 54 45 20 56 49 45 57  sql {CREATE VIEW
3f10: 20 76 31 20 41 53 20 53 45 4c 45 43 54 20 61 2b   v1 AS SELECT a+
3f20: 31 2c 62 2b 31 20 46 52 4f 4d 20 74 32 7d 0a 7d  1,b+1 FROM t2}.}
3f30: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
3f40: 61 75 74 68 2d 31 2e 39 34 20 7b 0a 20 20 65 78  auth-1.94 {.  ex
3f50: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61  ecsql {SELECT na
3f60: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  me FROM sqlite_m
3f70: 61 73 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a 0a 69  aster}.} {t2}..i
3f80: 66 63 61 70 61 62 6c 65 20 74 65 6d 70 64 62 20  fcapable tempdb 
3f90: 7b 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68  {.  do_test auth
3fa0: 2d 31 2e 39 35 20 7b 0a 20 20 20 20 70 72 6f 63  -1.95 {.    proc
3fb0: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
3fc0: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
3fd0: 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f   {.      if {$co
3fe0: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 49 4e 53 45  de=="SQLITE_INSE
3ff0: 52 54 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73  RT" && $arg1=="s
4000: 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
4010: 72 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 72 65  r"} {.        re
4020: 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59  turn SQLITE_DENY
4030: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72  .      }.      r
4040: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
4050: 20 20 20 20 7d 0a 20 20 20 20 63 61 74 63 68 73      }.    catchs
4060: 71 6c 20 7b 43 52 45 41 54 45 20 54 45 4d 50 4f  ql {CREATE TEMPO
4070: 52 41 52 59 20 56 49 45 57 20 76 31 20 41 53 20  RARY VIEW v1 AS 
4080: 53 45 4c 45 43 54 20 61 2b 31 2c 62 2b 31 20 46  SELECT a+1,b+1 F
4090: 52 4f 4d 20 74 32 7d 0a 20 20 7d 20 7b 31 20 7b  ROM t2}.  } {1 {
40a0: 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d  not authorized}}
40b0: 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  .  do_test auth-
40c0: 31 2e 39 36 20 7b 0a 20 20 20 20 65 78 65 63 73  1.96 {.    execs
40d0: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
40e0: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70  FROM sqlite_temp
40f0: 5f 6d 61 73 74 65 72 7d 0a 20 20 7d 20 7b 74 31  _master}.  } {t1
4100: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68  }.  do_test auth
4110: 2d 31 2e 39 37 20 7b 0a 20 20 20 20 70 72 6f 63  -1.97 {.    proc
4120: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
4130: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
4140: 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f   {.      if {$co
4150: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 49 4e 53 45  de=="SQLITE_INSE
4160: 52 54 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73  RT" && $arg1=="s
4170: 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
4180: 72 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 72 65  r"} {.        re
4190: 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f  turn SQLITE_IGNO
41a0: 52 45 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  RE.      }.     
41b0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
41c0: 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 74 63  K.    }.    catc
41d0: 68 73 71 6c 20 7b 43 52 45 41 54 45 20 54 45 4d  hsql {CREATE TEM
41e0: 50 4f 52 41 52 59 20 56 49 45 57 20 76 31 20 41  PORARY VIEW v1 A
41f0: 53 20 53 45 4c 45 43 54 20 61 2b 31 2c 62 2b 31  S SELECT a+1,b+1
4200: 20 46 52 4f 4d 20 74 32 7d 0a 20 20 7d 20 7b 30   FROM t2}.  } {0
4210: 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61   {}}.  do_test a
4220: 75 74 68 2d 31 2e 39 38 20 7b 0a 20 20 20 20 65  uth-1.98 {.    e
4230: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
4240: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
4250: 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 20 20 7d  temp_master}.  }
4260: 20 7b 74 31 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74   {t1}.}..do_test
4270: 20 61 75 74 68 2d 31 2e 39 39 20 7b 0a 20 20 70   auth-1.99 {.  p
4280: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
4290: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
42a0: 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g4} {.    if {$c
42b0: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c  ode=="SQLITE_DEL
42c0: 45 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d 22  ETE" && $arg1=="
42d0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 7d 20  sqlite_master"} 
42e0: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  {.      return S
42f0: 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d  QLITE_DENY.    }
4300: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
4310: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
4320: 68 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  hsql {.    CREAT
4330: 45 20 56 49 45 57 20 76 32 20 41 53 20 53 45 4c  E VIEW v2 AS SEL
4340: 45 43 54 20 61 2b 31 2c 62 2b 31 20 46 52 4f 4d  ECT a+1,b+1 FROM
4350: 20 74 32 3b 0a 20 20 20 20 44 52 4f 50 20 56 49   t2;.    DROP VI
4360: 45 57 20 76 32 0a 20 20 7d 0a 7d 20 7b 31 20 7b  EW v2.  }.} {1 {
4370: 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d  not authorized}}
4380: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
4390: 31 30 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  100 {.  execsql 
43a0: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
43b0: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d  M sqlite_master}
43c0: 0a 7d 20 7b 74 32 20 76 32 7d 0a 64 6f 5f 74 65  .} {t2 v2}.do_te
43d0: 73 74 20 61 75 74 68 2d 31 2e 31 30 31 20 7b 0a  st auth-1.101 {.
43e0: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
43f0: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
4400: 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20   arg4} {.    if 
4410: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
4420: 44 52 4f 50 5f 56 49 45 57 22 7d 20 7b 0a 20 20  DROP_VIEW"} {.  
4430: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
4440: 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24  gs [list $arg1 $
4450: 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34  arg2 $arg3 $arg4
4460: 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  ].      return S
4470: 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d  QLITE_DENY.    }
4480: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
4490: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
44a0: 68 73 71 6c 20 7b 44 52 4f 50 20 56 49 45 57 20  hsql {DROP VIEW 
44b0: 76 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75  v2}.} {1 {not au
44c0: 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65  thorized}}.do_te
44d0: 73 74 20 61 75 74 68 2d 31 2e 31 30 32 20 7b 0a  st auth-1.102 {.
44e0: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
44f0: 0a 7d 20 7b 76 32 20 7b 7d 20 6d 61 69 6e 20 7b  .} {v2 {} main {
4500: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
4510: 31 2e 31 30 33 20 7b 0a 20 20 65 78 65 63 73 71  1.103 {.  execsq
4520: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
4530: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
4540: 72 7d 0a 7d 20 7b 74 32 20 76 32 7d 0a 64 6f 5f  r}.} {t2 v2}.do_
4550: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 30 34 20  test auth-1.104 
4560: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
4570: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
4580: 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69  g3 arg4} {.    i
4590: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
45a0: 45 5f 44 45 4c 45 54 45 22 20 26 26 20 24 61 72  E_DELETE" && $ar
45b0: 67 31 3d 3d 22 73 71 6c 69 74 65 5f 6d 61 73 74  g1=="sqlite_mast
45c0: 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74  er"} {.      ret
45d0: 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52  urn SQLITE_IGNOR
45e0: 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  E.    }.    retu
45f0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
4600: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f  .  catchsql {DRO
4610: 50 20 56 49 45 57 20 76 32 7d 0a 7d 20 7b 30 20  P VIEW v2}.} {0 
4620: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
4630: 2d 31 2e 31 30 35 20 7b 0a 20 20 65 78 65 63 73  -1.105 {.  execs
4640: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
4650: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
4660: 65 72 7d 0a 7d 20 7b 74 32 20 76 32 7d 0a 64 6f  er}.} {t2 v2}.do
4670: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 30 36  _test auth-1.106
4680: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
4690: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
46a0: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
46b0: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
46c0: 54 45 5f 44 52 4f 50 5f 56 49 45 57 22 7d 20 7b  TE_DROP_VIEW"} {
46d0: 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74  .      set ::aut
46e0: 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67  hargs [list $arg
46f0: 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61  1 $arg2 $arg3 $a
4700: 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72  rg4].      retur
4710: 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a  n SQLITE_IGNORE.
4720: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
4730: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
4740: 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20   catchsql {DROP 
4750: 56 49 45 57 20 76 32 7d 0a 7d 20 7b 30 20 7b 7d  VIEW v2}.} {0 {}
4760: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
4770: 2e 31 30 37 20 7b 0a 20 20 73 65 74 20 3a 3a 61  .107 {.  set ::a
4780: 75 74 68 61 72 67 73 0a 7d 20 7b 76 32 20 7b 7d  uthargs.} {v2 {}
4790: 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73   main {}}.do_tes
47a0: 74 20 61 75 74 68 2d 31 2e 31 30 38 20 7b 0a 20  t auth-1.108 {. 
47b0: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
47c0: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
47d0: 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 20  e_master}.} {t2 
47e0: 76 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  v2}.do_test auth
47f0: 2d 31 2e 31 30 39 20 7b 0a 20 20 70 72 6f 63 20  -1.109 {.  proc 
4800: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
4810: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
4820: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
4830: 3d 22 53 51 4c 49 54 45 5f 44 52 4f 50 5f 56 49  ="SQLITE_DROP_VI
4840: 45 57 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74  EW"} {.      set
4850: 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73   ::authargs [lis
4860: 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61  t $arg1 $arg2 $a
4870: 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20  rg3 $arg4].     
4880: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
4890: 4b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  K.    }.    retu
48a0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
48b0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f  .  catchsql {DRO
48c0: 50 20 56 49 45 57 20 76 32 7d 0a 7d 20 7b 30 20  P VIEW v2}.} {0 
48d0: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
48e0: 2d 31 2e 31 31 30 20 7b 0a 20 20 73 65 74 20 3a  -1.110 {.  set :
48f0: 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 76 32 20  :authargs.} {v2 
4900: 7b 7d 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74  {} main {}}.do_t
4910: 65 73 74 20 61 75 74 68 2d 31 2e 31 31 31 20 7b  est auth-1.111 {
4920: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
4930: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
4940: 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74  ite_master}.} {t
4950: 32 7d 0a 0a 0a 69 66 63 61 70 61 62 6c 65 20 74  2}...ifcapable t
4960: 65 6d 70 64 62 20 7b 0a 20 20 64 6f 5f 74 65 73  empdb {.  do_tes
4970: 74 20 61 75 74 68 2d 31 2e 31 31 32 20 7b 0a 20  t auth-1.112 {. 
4980: 20 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f     proc auth {co
4990: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
49a0: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 20 20  3 arg4} {.      
49b0: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
49c0: 54 45 5f 44 45 4c 45 54 45 22 20 26 26 20 24 61  TE_DELETE" && $a
49d0: 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 74 65 6d  rg1=="sqlite_tem
49e0: 70 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20  p_master"} {.   
49f0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
4a00: 54 45 5f 44 45 4e 59 0a 20 20 20 20 20 20 7d 0a  TE_DENY.      }.
4a10: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
4a20: 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20  ITE_OK.    }.   
4a30: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
4a40: 20 20 43 52 45 41 54 45 20 54 45 4d 50 20 56 49    CREATE TEMP VI
4a50: 45 57 20 76 31 20 41 53 20 53 45 4c 45 43 54 20  EW v1 AS SELECT 
4a60: 61 2b 31 2c 62 2b 31 20 46 52 4f 4d 20 74 31 3b  a+1,b+1 FROM t1;
4a70: 0a 20 20 20 20 20 20 44 52 4f 50 20 56 49 45 57  .      DROP VIEW
4a80: 20 76 31 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31   v1.    }.  } {1
4a90: 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64   {not authorized
4aa0: 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74  }}.  do_test aut
4ab0: 68 2d 31 2e 31 31 33 20 7b 0a 20 20 20 20 65 78  h-1.113 {.    ex
4ac0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61  ecsql {SELECT na
4ad0: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74  me FROM sqlite_t
4ae0: 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 20 20 7d 20  emp_master}.  } 
4af0: 7b 74 31 20 76 31 7d 0a 20 20 64 6f 5f 74 65 73  {t1 v1}.  do_tes
4b00: 74 20 61 75 74 68 2d 31 2e 31 31 34 20 7b 0a 20  t auth-1.114 {. 
4b10: 20 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f     proc auth {co
4b20: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
4b30: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 20 20  3 arg4} {.      
4b40: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
4b50: 54 45 5f 44 52 4f 50 5f 54 45 4d 50 5f 56 49 45  TE_DROP_TEMP_VIE
4b60: 57 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65  W"} {.        se
4b70: 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69  t ::authargs [li
4b80: 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24  st $arg1 $arg2 $
4b90: 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20  arg3 $arg4].    
4ba0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
4bb0: 45 5f 44 45 4e 59 0a 20 20 20 20 20 20 7d 0a 20  E_DENY.      }. 
4bc0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
4bd0: 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20  TE_OK.    }.    
4be0: 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 56  catchsql {DROP V
4bf0: 49 45 57 20 76 31 7d 0a 20 20 7d 20 7b 31 20 7b  IEW v1}.  } {1 {
4c00: 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d  not authorized}}
4c10: 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  .  do_test auth-
4c20: 31 2e 31 31 35 20 7b 0a 20 20 20 20 73 65 74 20  1.115 {.    set 
4c30: 3a 3a 61 75 74 68 61 72 67 73 0a 20 20 7d 20 7b  ::authargs.  } {
4c40: 76 31 20 7b 7d 20 74 65 6d 70 20 7b 7d 7d 0a 20  v1 {} temp {}}. 
4c50: 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e   do_test auth-1.
4c60: 31 31 36 20 7b 0a 20 20 20 20 65 78 65 63 73 71  116 {.    execsq
4c70: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
4c80: 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f  ROM sqlite_temp_
4c90: 6d 61 73 74 65 72 7d 0a 20 20 7d 20 7b 74 31 20  master}.  } {t1 
4ca0: 76 31 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75  v1}.  do_test au
4cb0: 74 68 2d 31 2e 31 31 37 20 7b 0a 20 20 20 20 70  th-1.117 {.    p
4cc0: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
4cd0: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
4ce0: 67 34 7d 20 7b 0a 20 20 20 20 20 20 69 66 20 7b  g4} {.      if {
4cf0: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44  $code=="SQLITE_D
4d00: 45 4c 45 54 45 22 20 26 26 20 24 61 72 67 31 3d  ELETE" && $arg1=
4d10: 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  ="sqlite_temp_ma
4d20: 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 20  ster"} {.       
4d30: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49   return SQLITE_I
4d40: 47 4e 4f 52 45 0a 20 20 20 20 20 20 7d 0a 20 20  GNORE.      }.  
4d50: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
4d60: 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63  E_OK.    }.    c
4d70: 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 56 49  atchsql {DROP VI
4d80: 45 57 20 76 31 7d 0a 20 20 7d 20 7b 30 20 7b 7d  EW v1}.  } {0 {}
4d90: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68  }.  do_test auth
4da0: 2d 31 2e 31 31 38 20 7b 0a 20 20 20 20 65 78 65  -1.118 {.    exe
4db0: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d  csql {SELECT nam
4dc0: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65  e FROM sqlite_te
4dd0: 6d 70 5f 6d 61 73 74 65 72 7d 0a 20 20 7d 20 7b  mp_master}.  } {
4de0: 74 31 20 76 31 7d 0a 20 20 64 6f 5f 74 65 73 74  t1 v1}.  do_test
4df0: 20 61 75 74 68 2d 31 2e 31 31 39 20 7b 0a 20 20   auth-1.119 {.  
4e00: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
4e10: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
4e20: 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 20 20 69   arg4} {.      i
4e30: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
4e40: 45 5f 44 52 4f 50 5f 54 45 4d 50 5f 56 49 45 57  E_DROP_TEMP_VIEW
4e50: 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74  "} {.        set
4e60: 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73   ::authargs [lis
4e70: 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61  t $arg1 $arg2 $a
4e80: 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20  rg3 $arg4].     
4e90: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
4ea0: 5f 49 47 4e 4f 52 45 0a 20 20 20 20 20 20 7d 0a  _IGNORE.      }.
4eb0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
4ec0: 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20  ITE_OK.    }.   
4ed0: 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20   catchsql {DROP 
4ee0: 56 49 45 57 20 76 31 7d 0a 20 20 7d 20 7b 30 20  VIEW v1}.  } {0 
4ef0: 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75  {}}.  do_test au
4f00: 74 68 2d 31 2e 31 32 30 20 7b 0a 20 20 20 20 73  th-1.120 {.    s
4f10: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 20 20  et ::authargs.  
4f20: 7d 20 7b 76 31 20 7b 7d 20 74 65 6d 70 20 7b 7d  } {v1 {} temp {}
4f30: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68  }.  do_test auth
4f40: 2d 31 2e 31 32 31 20 7b 0a 20 20 20 20 65 78 65  -1.121 {.    exe
4f50: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d  csql {SELECT nam
4f60: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65  e FROM sqlite_te
4f70: 6d 70 5f 6d 61 73 74 65 72 7d 0a 20 20 7d 20 7b  mp_master}.  } {
4f80: 74 31 20 76 31 7d 0a 20 20 64 6f 5f 74 65 73 74  t1 v1}.  do_test
4f90: 20 61 75 74 68 2d 31 2e 31 32 32 20 7b 0a 20 20   auth-1.122 {.  
4fa0: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
4fb0: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
4fc0: 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 20 20 69   arg4} {.      i
4fd0: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
4fe0: 45 5f 44 52 4f 50 5f 54 45 4d 50 5f 56 49 45 57  E_DROP_TEMP_VIEW
4ff0: 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74  "} {.        set
5000: 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73   ::authargs [lis
5010: 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61  t $arg1 $arg2 $a
5020: 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20  rg3 $arg4].     
5030: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
5040: 5f 4f 4b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  _OK.      }.    
5050: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
5060: 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 74  OK.    }.    cat
5070: 63 68 73 71 6c 20 7b 44 52 4f 50 20 56 49 45 57  chsql {DROP VIEW
5080: 20 76 31 7d 0a 20 20 7d 20 7b 30 20 7b 7d 7d 0a   v1}.  } {0 {}}.
5090: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31    do_test auth-1
50a0: 2e 31 32 33 20 7b 0a 20 20 20 20 73 65 74 20 3a  .123 {.    set :
50b0: 3a 61 75 74 68 61 72 67 73 0a 20 20 7d 20 7b 76  :authargs.  } {v
50c0: 31 20 7b 7d 20 74 65 6d 70 20 7b 7d 7d 0a 20 20  1 {} temp {}}.  
50d0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
50e0: 32 34 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  24 {.    execsql
50f0: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
5100: 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  OM sqlite_temp_m
5110: 61 73 74 65 72 7d 0a 20 20 7d 20 7b 74 31 7d 0a  aster}.  } {t1}.
5120: 7d 0a 7d 20 3b 23 20 69 66 63 61 70 61 62 6c 65  }.} ;# ifcapable
5130: 20 76 69 65 77 0a 0a 23 20 54 65 73 74 20 63 61   view..# Test ca
5140: 73 65 73 20 61 75 74 68 2d 31 2e 31 32 35 20 74  ses auth-1.125 t
5150: 6f 20 61 75 74 68 2d 31 2e 31 37 36 20 74 65 73  o auth-1.176 tes
5160: 74 20 63 72 65 61 74 69 6e 67 20 61 6e 64 20 64  t creating and d
5170: 72 6f 70 70 69 6e 67 20 74 72 69 67 67 65 72 73  ropping triggers
5180: 2e 0a 23 20 4f 6d 69 74 20 74 68 65 73 65 20 69  ..# Omit these i
5190: 66 20 74 68 65 20 6c 69 62 72 61 72 79 20 77 61  f the library wa
51a0: 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20  s compiled with 
51b0: 74 72 69 67 67 65 72 73 20 6f 6d 69 74 74 65 64  triggers omitted
51c0: 2e 0a 23 0a 69 66 63 61 70 61 62 6c 65 20 74 72  ..#.ifcapable tr
51d0: 69 67 67 65 72 26 26 74 65 6d 70 64 62 20 7b 0a  igger&&tempdb {.
51e0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
51f0: 32 35 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  25 {.  proc auth
5200: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
5210: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
5220: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
5230: 4c 49 54 45 5f 43 52 45 41 54 45 5f 54 52 49 47  LITE_CREATE_TRIG
5240: 47 45 52 22 7d 20 7b 0a 20 20 20 20 20 20 73 65  GER"} {.      se
5250: 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69  t ::authargs [li
5260: 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24  st $arg1 $arg2 $
5270: 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20  arg3 $arg4].    
5280: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
5290: 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72  DENY.    }.    r
52a0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
52b0: 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b    }.  catchsql {
52c0: 0a 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47  .    CREATE TRIG
52d0: 47 45 52 20 72 32 20 44 45 4c 45 54 45 20 6f 6e  GER r2 DELETE on
52e0: 20 74 32 20 42 45 47 49 4e 0a 20 20 20 20 20 20   t2 BEGIN.      
52f0: 20 20 53 45 4c 45 43 54 20 4e 55 4c 4c 3b 0a 20    SELECT NULL;. 
5300: 20 20 20 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 31     END;.  }.} {1
5310: 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64   {not authorized
5320: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
5330: 31 2e 31 32 36 20 7b 0a 20 20 73 65 74 20 3a 3a  1.126 {.  set ::
5340: 61 75 74 68 61 72 67 73 0a 7d 20 7b 72 32 20 74  authargs.} {r2 t
5350: 32 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65  2 main {}}.do_te
5360: 73 74 20 61 75 74 68 2d 31 2e 31 32 37 20 7b 0a  st auth-1.127 {.
5370: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
5380: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
5390: 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32  te_master}.} {t2
53a0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
53b0: 2e 31 32 38 20 7b 0a 20 20 70 72 6f 63 20 61 75  .128 {.  proc au
53c0: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
53d0: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
53e0: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
53f0: 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 22 20 26  SQLITE_INSERT" &
5400: 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65  & $arg1=="sqlite
5410: 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20  _master"} {.    
5420: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
5430: 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72  DENY.    }.    r
5440: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
5450: 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b    }.  catchsql {
5460: 0a 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47  .    CREATE TRIG
5470: 47 45 52 20 72 32 20 44 45 4c 45 54 45 20 6f 6e  GER r2 DELETE on
5480: 20 74 32 20 42 45 47 49 4e 0a 20 20 20 20 20 20   t2 BEGIN.      
5490: 20 20 53 45 4c 45 43 54 20 4e 55 4c 4c 3b 0a 20    SELECT NULL;. 
54a0: 20 20 20 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 31     END;.  }.} {1
54b0: 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64   {not authorized
54c0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
54d0: 31 2e 31 32 39 20 7b 0a 20 20 65 78 65 63 73 71  1.129 {.  execsq
54e0: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
54f0: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
5500: 72 7d 0a 7d 20 7b 74 32 7d 0a 64 6f 5f 74 65 73  r}.} {t2}.do_tes
5510: 74 20 61 75 74 68 2d 31 2e 31 33 30 20 7b 0a 20  t auth-1.130 {. 
5520: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
5530: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
5540: 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg4} {.    if {
5550: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43  $code=="SQLITE_C
5560: 52 45 41 54 45 5f 54 52 49 47 47 45 52 22 7d 20  REATE_TRIGGER"} 
5570: 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75  {.      set ::au
5580: 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72  thargs [list $ar
5590: 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24  g1 $arg2 $arg3 $
55a0: 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75  arg4].      retu
55b0: 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45  rn SQLITE_IGNORE
55c0: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
55d0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
55e0: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
55f0: 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20   CREATE TRIGGER 
5600: 72 32 20 44 45 4c 45 54 45 20 6f 6e 20 74 32 20  r2 DELETE on t2 
5610: 42 45 47 49 4e 0a 20 20 20 20 20 20 20 20 53 45  BEGIN.        SE
5620: 4c 45 43 54 20 4e 55 4c 4c 3b 0a 20 20 20 20 45  LECT NULL;.    E
5630: 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d  ND;.  }.} {0 {}}
5640: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
5650: 31 33 31 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75  131 {.  set ::au
5660: 74 68 61 72 67 73 0a 7d 20 7b 72 32 20 74 32 20  thargs.} {r2 t2 
5670: 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  main {}}.do_test
5680: 20 61 75 74 68 2d 31 2e 31 33 32 20 7b 0a 20 20   auth-1.132 {.  
5690: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
56a0: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
56b0: 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a  _master}.} {t2}.
56c0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
56d0: 33 33 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  33 {.  proc auth
56e0: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
56f0: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
5700: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
5710: 4c 49 54 45 5f 49 4e 53 45 52 54 22 20 26 26 20  LITE_INSERT" && 
5720: 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 6d  $arg1=="sqlite_m
5730: 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20  aster"} {.      
5740: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47  return SQLITE_IG
5750: 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72  NORE.    }.    r
5760: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
5770: 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b    }.  catchsql {
5780: 0a 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47  .    CREATE TRIG
5790: 47 45 52 20 72 32 20 44 45 4c 45 54 45 20 6f 6e  GER r2 DELETE on
57a0: 20 74 32 20 42 45 47 49 4e 0a 20 20 20 20 20 20   t2 BEGIN.      
57b0: 20 20 53 45 4c 45 43 54 20 4e 55 4c 4c 3b 0a 20    SELECT NULL;. 
57c0: 20 20 20 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 30     END;.  }.} {0
57d0: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
57e0: 68 2d 31 2e 31 33 34 20 7b 0a 20 20 65 78 65 63  h-1.134 {.  exec
57f0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
5800: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
5810: 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a 64 6f 5f 74  ter}.} {t2}.do_t
5820: 65 73 74 20 61 75 74 68 2d 31 2e 31 33 35 20 7b  est auth-1.135 {
5830: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
5840: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
5850: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66  3 arg4} {.    if
5860: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
5870: 5f 43 52 45 41 54 45 5f 54 52 49 47 47 45 52 22  _CREATE_TRIGGER"
5880: 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a  } {.      set ::
5890: 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24  authargs [list $
58a0: 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33  arg1 $arg2 $arg3
58b0: 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65   $arg4].      re
58c0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
58d0: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
58e0: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
58f0: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 43  catchsql {.    C
5900: 52 45 41 54 45 20 54 41 42 4c 45 20 74 78 28 69  REATE TABLE tx(i
5910: 64 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54  d);.    CREATE T
5920: 52 49 47 47 45 52 20 72 32 20 41 46 54 45 52 20  RIGGER r2 AFTER 
5930: 49 4e 53 45 52 54 20 4f 4e 20 74 32 20 42 45 47  INSERT ON t2 BEG
5940: 49 4e 0a 20 20 20 20 20 20 20 49 4e 53 45 52 54  IN.       INSERT
5950: 20 49 4e 54 4f 20 74 78 20 56 41 4c 55 45 53 28   INTO tx VALUES(
5960: 4e 45 57 2e 72 6f 77 69 64 29 3b 0a 20 20 20 20  NEW.rowid);.    
5970: 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d  END;.  }.} {0 {}
5980: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
5990: 2e 31 33 36 2e 31 20 7b 0a 20 20 73 65 74 20 3a  .136.1 {.  set :
59a0: 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 72 32 20  :authargs.} {r2 
59b0: 74 32 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74  t2 main {}}.do_t
59c0: 65 73 74 20 61 75 74 68 2d 31 2e 31 33 36 2e 32  est auth-1.136.2
59d0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
59e0: 20 20 20 53 45 4c 45 43 54 20 6e 61 6d 65 20 46     SELECT name F
59f0: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
5a00: 72 20 57 48 45 52 45 20 74 79 70 65 3d 27 74 72  r WHERE type='tr
5a10: 69 67 67 65 72 27 0a 20 20 7d 0a 7d 20 7b 72 32  igger'.  }.} {r2
5a20: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
5a30: 2e 31 33 36 2e 33 20 7b 0a 20 20 70 72 6f 63 20  .136.3 {.  proc 
5a40: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
5a50: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
5a60: 7b 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 3a 3a  {.    lappend ::
5a70: 61 75 74 68 61 72 67 73 20 24 63 6f 64 65 20 24  authargs $code $
5a80: 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33  arg1 $arg2 $arg3
5a90: 20 24 61 72 67 34 0a 20 20 20 20 72 65 74 75 72   $arg4.    retur
5aa0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
5ab0: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
5ac0: 20 7b 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a   {}.  execsql {.
5ad0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
5ae0: 74 32 20 56 41 4c 55 45 53 28 31 2c 32 2c 33 29  t2 VALUES(1,2,3)
5af0: 3b 0a 20 20 7d 0a 20 20 73 65 74 20 3a 3a 61 75  ;.  }.  set ::au
5b00: 74 68 61 72 67 73 20 0a 7d 20 7b 53 51 4c 49 54  thargs .} {SQLIT
5b10: 45 5f 49 4e 53 45 52 54 20 74 32 20 7b 7d 20 6d  E_INSERT t2 {} m
5b20: 61 69 6e 20 7b 7d 20 53 51 4c 49 54 45 5f 49 4e  ain {} SQLITE_IN
5b30: 53 45 52 54 20 74 78 20 7b 7d 20 6d 61 69 6e 20  SERT tx {} main 
5b40: 72 32 20 53 51 4c 49 54 45 5f 52 45 41 44 20 74  r2 SQLITE_READ t
5b50: 32 20 52 4f 57 49 44 20 6d 61 69 6e 20 72 32 7d  2 ROWID main r2}
5b60: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
5b70: 31 33 36 2e 34 20 7b 0a 20 20 65 78 65 63 73 71  136.4 {.  execsq
5b80: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  l {.    SELECT *
5b90: 20 46 52 4f 4d 20 74 78 3b 0a 20 20 7d 0a 7d 20   FROM tx;.  }.} 
5ba0: 7b 33 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {3}.do_test auth
5bb0: 2d 31 2e 31 33 37 20 7b 0a 20 20 65 78 65 63 73  -1.137 {.  execs
5bc0: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
5bd0: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
5be0: 65 72 7d 0a 7d 20 7b 74 32 20 74 78 20 72 32 7d  er}.} {t2 tx r2}
5bf0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
5c00: 31 33 38 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  138 {.  proc aut
5c10: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
5c20: 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20  2 arg3 arg4} {. 
5c30: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
5c40: 51 4c 49 54 45 5f 43 52 45 41 54 45 5f 54 45 4d  QLITE_CREATE_TEM
5c50: 50 5f 54 52 49 47 47 45 52 22 7d 20 7b 0a 20 20  P_TRIGGER"} {.  
5c60: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
5c70: 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24  gs [list $arg1 $
5c80: 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34  arg2 $arg3 $arg4
5c90: 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  ].      return S
5ca0: 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d  QLITE_DENY.    }
5cb0: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
5cc0: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
5cd0: 68 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  hsql {.    CREAT
5ce0: 45 20 54 52 49 47 47 45 52 20 72 31 20 44 45 4c  E TRIGGER r1 DEL
5cf0: 45 54 45 20 6f 6e 20 74 31 20 42 45 47 49 4e 0a  ETE on t1 BEGIN.
5d00: 20 20 20 20 20 20 20 20 53 45 4c 45 43 54 20 4e          SELECT N
5d10: 55 4c 4c 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20  ULL;.    END;.  
5d20: 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68  }.} {1 {not auth
5d30: 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74  orized}}.do_test
5d40: 20 61 75 74 68 2d 31 2e 31 33 39 20 7b 0a 20 20   auth-1.139 {.  
5d50: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d  set ::authargs.}
5d60: 20 7b 72 31 20 74 31 20 74 65 6d 70 20 7b 7d 7d   {r1 t1 temp {}}
5d70: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
5d80: 31 34 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  140 {.  execsql 
5d90: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
5da0: 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  M sqlite_temp_ma
5db0: 73 74 65 72 7d 0a 7d 20 7b 74 31 7d 0a 64 6f 5f  ster}.} {t1}.do_
5dc0: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 34 31 20  test auth-1.141 
5dd0: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
5de0: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
5df0: 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69  g3 arg4} {.    i
5e00: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
5e10: 45 5f 49 4e 53 45 52 54 22 20 26 26 20 24 61 72  E_INSERT" && $ar
5e20: 67 31 3d 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70  g1=="sqlite_temp
5e30: 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20  _master"} {.    
5e40: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
5e50: 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72  DENY.    }.    r
5e60: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
5e70: 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b    }.  catchsql {
5e80: 0a 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47  .    CREATE TRIG
5e90: 47 45 52 20 72 31 20 44 45 4c 45 54 45 20 6f 6e  GER r1 DELETE on
5ea0: 20 74 31 20 42 45 47 49 4e 0a 20 20 20 20 20 20   t1 BEGIN.      
5eb0: 20 20 53 45 4c 45 43 54 20 4e 55 4c 4c 3b 0a 20    SELECT NULL;. 
5ec0: 20 20 20 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 31     END;.  }.} {1
5ed0: 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64   {not authorized
5ee0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
5ef0: 31 2e 31 34 32 20 7b 0a 20 20 65 78 65 63 73 71  1.142 {.  execsq
5f00: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
5f10: 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f  ROM sqlite_temp_
5f20: 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31 7d 0a 64  master}.} {t1}.d
5f30: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 34  o_test auth-1.14
5f40: 33 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  3 {.  proc auth 
5f50: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
5f60: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
5f70: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
5f80: 49 54 45 5f 43 52 45 41 54 45 5f 54 45 4d 50 5f  ITE_CREATE_TEMP_
5f90: 54 52 49 47 47 45 52 22 7d 20 7b 0a 20 20 20 20  TRIGGER"} {.    
5fa0: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
5fb0: 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72   [list $arg1 $ar
5fc0: 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a  g2 $arg3 $arg4].
5fd0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
5fe0: 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d  ITE_IGNORE.    }
5ff0: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
6000: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
6010: 68 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  hsql {.    CREAT
6020: 45 20 54 52 49 47 47 45 52 20 72 31 20 44 45 4c  E TRIGGER r1 DEL
6030: 45 54 45 20 6f 6e 20 74 31 20 42 45 47 49 4e 0a  ETE on t1 BEGIN.
6040: 20 20 20 20 20 20 20 20 53 45 4c 45 43 54 20 4e          SELECT N
6050: 55 4c 4c 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20  ULL;.    END;.  
6060: 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  }.} {0 {}}.do_te
6070: 73 74 20 61 75 74 68 2d 31 2e 31 34 34 20 7b 0a  st auth-1.144 {.
6080: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
6090: 0a 7d 20 7b 72 31 20 74 31 20 74 65 6d 70 20 7b  .} {r1 t1 temp {
60a0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
60b0: 31 2e 31 34 35 20 7b 0a 20 20 65 78 65 63 73 71  1.145 {.  execsq
60c0: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
60d0: 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f  ROM sqlite_temp_
60e0: 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31 7d 0a 64  master}.} {t1}.d
60f0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 34  o_test auth-1.14
6100: 36 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  6 {.  proc auth 
6110: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
6120: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
6130: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
6140: 49 54 45 5f 49 4e 53 45 52 54 22 20 26 26 20 24  ITE_INSERT" && $
6150: 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 74 65  arg1=="sqlite_te
6160: 6d 70 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20  mp_master"} {.  
6170: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
6180: 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20  E_IGNORE.    }. 
6190: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
61a0: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
61b0: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
61c0: 54 52 49 47 47 45 52 20 72 31 20 44 45 4c 45 54  TRIGGER r1 DELET
61d0: 45 20 6f 6e 20 74 31 20 42 45 47 49 4e 0a 20 20  E on t1 BEGIN.  
61e0: 20 20 20 20 20 20 53 45 4c 45 43 54 20 4e 55 4c        SELECT NUL
61f0: 4c 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 7d 0a  L;.    END;.  }.
6200: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
6210: 20 61 75 74 68 2d 31 2e 31 34 37 20 7b 0a 20 20   auth-1.147 {.  
6220: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
6230: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
6240: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d 20  _temp_master}.} 
6250: 7b 74 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  {t1}.do_test aut
6260: 68 2d 31 2e 31 34 38 20 7b 0a 20 20 70 72 6f 63  h-1.148 {.  proc
6270: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
6280: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
6290: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
62a0: 3d 3d 22 53 51 4c 49 54 45 5f 43 52 45 41 54 45  =="SQLITE_CREATE
62b0: 5f 54 45 4d 50 5f 54 52 49 47 47 45 52 22 7d 20  _TEMP_TRIGGER"} 
62c0: 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75  {.      set ::au
62d0: 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72  thargs [list $ar
62e0: 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24  g1 $arg2 $arg3 $
62f0: 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75  arg4].      retu
6300: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20  rn SQLITE_OK.   
6310: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
6320: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
6330: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 43 52 45  tchsql {.    CRE
6340: 41 54 45 20 54 52 49 47 47 45 52 20 72 31 20 44  ATE TRIGGER r1 D
6350: 45 4c 45 54 45 20 6f 6e 20 74 31 20 42 45 47 49  ELETE on t1 BEGI
6360: 4e 0a 20 20 20 20 20 20 20 20 53 45 4c 45 43 54  N.        SELECT
6370: 20 4e 55 4c 4c 3b 0a 20 20 20 20 45 4e 44 3b 0a   NULL;.    END;.
6380: 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f    }.} {0 {}}.do_
6390: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 34 39 20  test auth-1.149 
63a0: 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72  {.  set ::authar
63b0: 67 73 0a 7d 20 7b 72 31 20 74 31 20 74 65 6d 70  gs.} {r1 t1 temp
63c0: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
63d0: 68 2d 31 2e 31 35 30 20 7b 0a 20 20 65 78 65 63  h-1.150 {.  exec
63e0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
63f0: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d   FROM sqlite_tem
6400: 70 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31 20  p_master}.} {t1 
6410: 72 31 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 75 74  r1}..do_test aut
6420: 68 2d 31 2e 31 35 31 20 7b 0a 20 20 70 72 6f 63  h-1.151 {.  proc
6430: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
6440: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
6450: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
6460: 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45 54 45  =="SQLITE_DELETE
6470: 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71 6c  " && $arg1=="sql
6480: 69 74 65 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20  ite_master"} {. 
6490: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
64a0: 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20  TE_DENY.    }.  
64b0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
64c0: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
64d0: 6c 20 7b 44 52 4f 50 20 54 52 49 47 47 45 52 20  l {DROP TRIGGER 
64e0: 72 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75  r2}.} {1 {not au
64f0: 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65  thorized}}.do_te
6500: 73 74 20 61 75 74 68 2d 31 2e 31 35 32 20 7b 0a  st auth-1.152 {.
6510: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
6520: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
6530: 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32  te_master}.} {t2
6540: 20 74 78 20 72 32 7d 0a 64 6f 5f 74 65 73 74 20   tx r2}.do_test 
6550: 61 75 74 68 2d 31 2e 31 35 33 20 7b 0a 20 20 70  auth-1.153 {.  p
6560: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
6570: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
6580: 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g4} {.    if {$c
6590: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f  ode=="SQLITE_DRO
65a0: 50 5f 54 52 49 47 47 45 52 22 7d 20 7b 0a 20 20  P_TRIGGER"} {.  
65b0: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
65c0: 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24  gs [list $arg1 $
65d0: 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34  arg2 $arg3 $arg4
65e0: 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  ].      return S
65f0: 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d  QLITE_DENY.    }
6600: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
6610: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
6620: 68 73 71 6c 20 7b 44 52 4f 50 20 54 52 49 47 47  hsql {DROP TRIGG
6630: 45 52 20 72 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74  ER r2}.} {1 {not
6640: 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f   authorized}}.do
6650: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 35 34  _test auth-1.154
6660: 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61   {.  set ::autha
6670: 72 67 73 0a 7d 20 7b 72 32 20 74 32 20 6d 61 69  rgs.} {r2 t2 mai
6680: 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  n {}}.do_test au
6690: 74 68 2d 31 2e 31 35 35 20 7b 0a 20 20 65 78 65  th-1.155 {.  exe
66a0: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d  csql {SELECT nam
66b0: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  e FROM sqlite_ma
66c0: 73 74 65 72 7d 0a 7d 20 7b 74 32 20 74 78 20 72  ster}.} {t2 tx r
66d0: 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  2}.do_test auth-
66e0: 31 2e 31 35 36 20 7b 0a 20 20 70 72 6f 63 20 61  1.156 {.  proc a
66f0: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
6700: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
6710: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
6720: 22 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 22 20  "SQLITE_DELETE" 
6730: 26 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74  && $arg1=="sqlit
6740: 65 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20  e_master"} {.   
6750: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
6760: 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20  _IGNORE.    }.  
6770: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
6780: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
6790: 6c 20 7b 44 52 4f 50 20 54 52 49 47 47 45 52 20  l {DROP TRIGGER 
67a0: 72 32 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f  r2}.} {0 {}}.do_
67b0: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 35 37 20  test auth-1.157 
67c0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
67d0: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
67e0: 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b  lite_master}.} {
67f0: 74 32 20 74 78 20 72 32 7d 0a 64 6f 5f 74 65 73  t2 tx r2}.do_tes
6800: 74 20 61 75 74 68 2d 31 2e 31 35 38 20 7b 0a 20  t auth-1.158 {. 
6810: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
6820: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
6830: 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg4} {.    if {
6840: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44  $code=="SQLITE_D
6850: 52 4f 50 5f 54 52 49 47 47 45 52 22 7d 20 7b 0a  ROP_TRIGGER"} {.
6860: 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68        set ::auth
6870: 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31  args [list $arg1
6880: 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72   $arg2 $arg3 $ar
6890: 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  g4].      return
68a0: 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20   SQLITE_IGNORE. 
68b0: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
68c0: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
68d0: 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54  catchsql {DROP T
68e0: 52 49 47 47 45 52 20 72 32 7d 0a 7d 20 7b 30 20  RIGGER r2}.} {0 
68f0: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
6900: 2d 31 2e 31 35 39 20 7b 0a 20 20 73 65 74 20 3a  -1.159 {.  set :
6910: 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 72 32 20  :authargs.} {r2 
6920: 74 32 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74  t2 main {}}.do_t
6930: 65 73 74 20 61 75 74 68 2d 31 2e 31 36 30 20 7b  est auth-1.160 {
6940: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
6950: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
6960: 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74  ite_master}.} {t
6970: 32 20 74 78 20 72 32 7d 0a 64 6f 5f 74 65 73 74  2 tx r2}.do_test
6980: 20 61 75 74 68 2d 31 2e 31 36 31 20 7b 0a 20 20   auth-1.161 {.  
6990: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
69a0: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
69b0: 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg4} {.    if {$
69c0: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52  code=="SQLITE_DR
69d0: 4f 50 5f 54 52 49 47 47 45 52 22 7d 20 7b 0a 20  OP_TRIGGER"} {. 
69e0: 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61       set ::autha
69f0: 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20  rgs [list $arg1 
6a00: 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67  $arg2 $arg3 $arg
6a10: 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  4].      return 
6a20: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a  SQLITE_OK.    }.
6a30: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
6a40: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
6a50: 73 71 6c 20 7b 44 52 4f 50 20 54 52 49 47 47 45  sql {DROP TRIGGE
6a60: 52 20 72 32 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  R r2}.} {0 {}}.d
6a70: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 36  o_test auth-1.16
6a80: 32 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68  2 {.  set ::auth
6a90: 61 72 67 73 0a 7d 20 7b 72 32 20 74 32 20 6d 61  args.} {r2 t2 ma
6aa0: 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  in {}}.do_test a
6ab0: 75 74 68 2d 31 2e 31 36 33 20 7b 0a 20 20 65 78  uth-1.163 {.  ex
6ac0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50  ecsql {.    DROP
6ad0: 20 54 41 42 4c 45 20 74 78 3b 0a 20 20 20 20 44   TABLE tx;.    D
6ae0: 45 4c 45 54 45 20 46 52 4f 4d 20 74 32 20 57 48  ELETE FROM t2 WH
6af0: 45 52 45 20 61 3d 31 20 41 4e 44 20 62 3d 32 20  ERE a=1 AND b=2 
6b00: 41 4e 44 20 63 3d 33 3b 0a 20 20 20 20 53 45 4c  AND c=3;.    SEL
6b10: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
6b20: 6c 69 74 65 5f 6d 61 73 74 65 72 3b 0a 20 20 7d  lite_master;.  }
6b30: 0a 7d 20 7b 74 32 7d 0a 0a 64 6f 5f 74 65 73 74  .} {t2}..do_test
6b40: 20 61 75 74 68 2d 31 2e 31 36 34 20 7b 0a 20 20   auth-1.164 {.  
6b50: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
6b60: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
6b70: 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg4} {.    if {$
6b80: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45  code=="SQLITE_DE
6b90: 4c 45 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d  LETE" && $arg1==
6ba0: 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73  "sqlite_temp_mas
6bb0: 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 72 65  ter"} {.      re
6bc0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59  turn SQLITE_DENY
6bd0: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
6be0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
6bf0: 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50    catchsql {DROP
6c00: 20 54 52 49 47 47 45 52 20 72 31 7d 0a 7d 20 7b   TRIGGER r1}.} {
6c10: 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65  1 {not authorize
6c20: 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  d}}.do_test auth
6c30: 2d 31 2e 31 36 35 20 7b 0a 20 20 65 78 65 63 73  -1.165 {.  execs
6c40: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
6c50: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70  FROM sqlite_temp
6c60: 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31 20 72  _master}.} {t1 r
6c70: 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  1}.do_test auth-
6c80: 31 2e 31 36 36 20 7b 0a 20 20 70 72 6f 63 20 61  1.166 {.  proc a
6c90: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
6ca0: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
6cb0: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
6cc0: 22 53 51 4c 49 54 45 5f 44 52 4f 50 5f 54 45 4d  "SQLITE_DROP_TEM
6cd0: 50 5f 54 52 49 47 47 45 52 22 7d 20 7b 0a 20 20  P_TRIGGER"} {.  
6ce0: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
6cf0: 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24  gs [list $arg1 $
6d00: 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34  arg2 $arg3 $arg4
6d10: 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  ].      return S
6d20: 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d  QLITE_DENY.    }
6d30: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
6d40: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
6d50: 68 73 71 6c 20 7b 44 52 4f 50 20 54 52 49 47 47  hsql {DROP TRIGG
6d60: 45 52 20 72 31 7d 0a 7d 20 7b 31 20 7b 6e 6f 74  ER r1}.} {1 {not
6d70: 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f   authorized}}.do
6d80: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 36 37  _test auth-1.167
6d90: 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61   {.  set ::autha
6da0: 72 67 73 0a 7d 20 7b 72 31 20 74 31 20 74 65 6d  rgs.} {r1 t1 tem
6db0: 70 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  p {}}.do_test au
6dc0: 74 68 2d 31 2e 31 36 38 20 7b 0a 20 20 65 78 65  th-1.168 {.  exe
6dd0: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d  csql {SELECT nam
6de0: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65  e FROM sqlite_te
6df0: 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31  mp_master}.} {t1
6e00: 20 72 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   r1}.do_test aut
6e10: 68 2d 31 2e 31 36 39 20 7b 0a 20 20 70 72 6f 63  h-1.169 {.  proc
6e20: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
6e30: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
6e40: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
6e50: 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45 54 45  =="SQLITE_DELETE
6e60: 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71 6c  " && $arg1=="sql
6e70: 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22  ite_temp_master"
6e80: 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  } {.      return
6e90: 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20   SQLITE_IGNORE. 
6ea0: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
6eb0: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
6ec0: 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54  catchsql {DROP T
6ed0: 52 49 47 47 45 52 20 72 31 7d 0a 7d 20 7b 30 20  RIGGER r1}.} {0 
6ee0: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
6ef0: 2d 31 2e 31 37 30 20 7b 0a 20 20 65 78 65 63 73  -1.170 {.  execs
6f00: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
6f10: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70  FROM sqlite_temp
6f20: 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31 20 72  _master}.} {t1 r
6f30: 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  1}.do_test auth-
6f40: 31 2e 31 37 31 20 7b 0a 20 20 70 72 6f 63 20 61  1.171 {.  proc a
6f50: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
6f60: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
6f70: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
6f80: 22 53 51 4c 49 54 45 5f 44 52 4f 50 5f 54 45 4d  "SQLITE_DROP_TEM
6f90: 50 5f 54 52 49 47 47 45 52 22 7d 20 7b 0a 20 20  P_TRIGGER"} {.  
6fa0: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
6fb0: 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24  gs [list $arg1 $
6fc0: 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34  arg2 $arg3 $arg4
6fd0: 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  ].      return S
6fe0: 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20  QLITE_IGNORE.   
6ff0: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
7000: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
7010: 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54 52 49  tchsql {DROP TRI
7020: 47 47 45 52 20 72 31 7d 0a 7d 20 7b 30 20 7b 7d  GGER r1}.} {0 {}
7030: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
7040: 2e 31 37 32 20 7b 0a 20 20 73 65 74 20 3a 3a 61  .172 {.  set ::a
7050: 75 74 68 61 72 67 73 0a 7d 20 7b 72 31 20 74 31  uthargs.} {r1 t1
7060: 20 74 65 6d 70 20 7b 7d 7d 0a 64 6f 5f 74 65 73   temp {}}.do_tes
7070: 74 20 61 75 74 68 2d 31 2e 31 37 33 20 7b 0a 20  t auth-1.173 {. 
7080: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
7090: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
70a0: 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d  e_temp_master}.}
70b0: 20 7b 74 31 20 72 31 7d 0a 64 6f 5f 74 65 73 74   {t1 r1}.do_test
70c0: 20 61 75 74 68 2d 31 2e 31 37 34 20 7b 0a 20 20   auth-1.174 {.  
70d0: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
70e0: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
70f0: 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg4} {.    if {$
7100: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52  code=="SQLITE_DR
7110: 4f 50 5f 54 45 4d 50 5f 54 52 49 47 47 45 52 22  OP_TEMP_TRIGGER"
7120: 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a  } {.      set ::
7130: 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24  authargs [list $
7140: 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33  arg1 $arg2 $arg3
7150: 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65   $arg4].      re
7160: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
7170: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
7180: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
7190: 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54  catchsql {DROP T
71a0: 52 49 47 47 45 52 20 72 31 7d 0a 7d 20 7b 30 20  RIGGER r1}.} {0 
71b0: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
71c0: 2d 31 2e 31 37 35 20 7b 0a 20 20 73 65 74 20 3a  -1.175 {.  set :
71d0: 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 72 31 20  :authargs.} {r1 
71e0: 74 31 20 74 65 6d 70 20 7b 7d 7d 0a 64 6f 5f 74  t1 temp {}}.do_t
71f0: 65 73 74 20 61 75 74 68 2d 31 2e 31 37 36 20 7b  est auth-1.176 {
7200: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
7210: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
7220: 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d  ite_temp_master}
7230: 0a 7d 20 7b 74 31 7d 0a 7d 20 3b 23 20 69 66 63  .} {t1}.} ;# ifc
7240: 61 70 61 62 6c 65 20 74 72 69 67 67 65 72 0a 0a  apable trigger..
7250: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
7260: 37 37 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  77 {.  proc auth
7270: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
7280: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
7290: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
72a0: 4c 49 54 45 5f 43 52 45 41 54 45 5f 49 4e 44 45  LITE_CREATE_INDE
72b0: 58 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20  X"} {.      set 
72c0: 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74  ::authargs [list
72d0: 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72   $arg1 $arg2 $ar
72e0: 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20  g3 $arg4].      
72f0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45  return SQLITE_DE
7300: 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  NY.    }.    ret
7310: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
7320: 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52  }.  catchsql {CR
7330: 45 41 54 45 20 49 4e 44 45 58 20 69 32 20 4f 4e  EATE INDEX i2 ON
7340: 20 74 32 28 61 29 7d 0a 7d 20 7b 31 20 7b 6e 6f   t2(a)}.} {1 {no
7350: 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64  t authorized}}.d
7360: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 37  o_test auth-1.17
7370: 38 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68  8 {.  set ::auth
7380: 61 72 67 73 0a 7d 20 7b 69 32 20 74 32 20 6d 61  args.} {i2 t2 ma
7390: 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  in {}}.do_test a
73a0: 75 74 68 2d 31 2e 31 37 39 20 7b 0a 20 20 65 78  uth-1.179 {.  ex
73b0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61  ecsql {SELECT na
73c0: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  me FROM sqlite_m
73d0: 61 73 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a 64 6f  aster}.} {t2}.do
73e0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 38 30  _test auth-1.180
73f0: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
7400: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
7410: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
7420: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
7430: 54 45 5f 49 4e 53 45 52 54 22 20 26 26 20 24 61  TE_INSERT" && $a
7440: 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 6d 61 73  rg1=="sqlite_mas
7450: 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 72 65  ter"} {.      re
7460: 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59  turn SQLITE_DENY
7470: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
7480: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
7490: 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41    catchsql {CREA
74a0: 54 45 20 49 4e 44 45 58 20 69 32 20 4f 4e 20 74  TE INDEX i2 ON t
74b0: 32 28 61 29 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20  2(a)}.} {1 {not 
74c0: 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f  authorized}}.do_
74d0: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 38 31 20  test auth-1.181 
74e0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
74f0: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
7500: 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b  lite_master}.} {
7510: 74 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  t2}.do_test auth
7520: 2d 31 2e 31 38 32 20 7b 0a 20 20 70 72 6f 63 20  -1.182 {.  proc 
7530: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
7540: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
7550: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
7560: 3d 22 53 51 4c 49 54 45 5f 43 52 45 41 54 45 5f  ="SQLITE_CREATE_
7570: 49 4e 44 45 58 22 7d 20 7b 0a 20 20 20 20 20 20  INDEX"} {.      
7580: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b  set ::authargs [
7590: 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67 32  list $arg1 $arg2
75a0: 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20   $arg3 $arg4].  
75b0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
75c0: 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20  E_IGNORE.    }. 
75d0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
75e0: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
75f0: 71 6c 20 7b 43 52 45 41 54 45 20 49 4e 44 45 58  ql {CREATE INDEX
7600: 20 69 32 20 4f 4e 20 74 32 28 62 29 7d 0a 7d 20   i2 ON t2(b)}.} 
7610: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  {0 {}}.do_test a
7620: 75 74 68 2d 31 2e 31 38 33 20 7b 0a 20 20 73 65  uth-1.183 {.  se
7630: 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b  t ::authargs.} {
7640: 69 32 20 74 32 20 6d 61 69 6e 20 7b 7d 7d 0a 64  i2 t2 main {}}.d
7650: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 38  o_test auth-1.18
7660: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  4 {.  execsql {S
7670: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
7680: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d  sqlite_master}.}
7690: 20 7b 74 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75   {t2}.do_test au
76a0: 74 68 2d 31 2e 31 38 35 20 7b 0a 20 20 70 72 6f  th-1.185 {.  pro
76b0: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
76c0: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
76d0: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
76e0: 65 3d 3d 22 53 51 4c 49 54 45 5f 49 4e 53 45 52  e=="SQLITE_INSER
76f0: 54 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71  T" && $arg1=="sq
7700: 6c 69 74 65 5f 6d 61 73 74 65 72 22 7d 20 7b 0a  lite_master"} {.
7710: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
7720: 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d  ITE_IGNORE.    }
7730: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
7740: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
7750: 68 73 71 6c 20 7b 43 52 45 41 54 45 20 49 4e 44  hsql {CREATE IND
7760: 45 58 20 69 32 20 4f 4e 20 74 32 28 62 29 7d 0a  EX i2 ON t2(b)}.
7770: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
7780: 20 61 75 74 68 2d 31 2e 31 38 36 20 7b 0a 20 20   auth-1.186 {.  
7790: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
77a0: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
77b0: 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a  _master}.} {t2}.
77c0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
77d0: 38 37 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  87 {.  proc auth
77e0: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
77f0: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
7800: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
7810: 4c 49 54 45 5f 43 52 45 41 54 45 5f 49 4e 44 45  LITE_CREATE_INDE
7820: 58 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20  X"} {.      set 
7830: 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74  ::authargs [list
7840: 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72   $arg1 $arg2 $ar
7850: 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20  g3 $arg4].      
7860: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
7870: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
7880: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
7890: 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41    catchsql {CREA
78a0: 54 45 20 49 4e 44 45 58 20 69 32 20 4f 4e 20 74  TE INDEX i2 ON t
78b0: 32 28 61 29 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  2(a)}.} {0 {}}.d
78c0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 38  o_test auth-1.18
78d0: 38 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68  8 {.  set ::auth
78e0: 61 72 67 73 0a 7d 20 7b 69 32 20 74 32 20 6d 61  args.} {i2 t2 ma
78f0: 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  in {}}.do_test a
7900: 75 74 68 2d 31 2e 31 38 39 20 7b 0a 20 20 65 78  uth-1.189 {.  ex
7910: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61  ecsql {SELECT na
7920: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  me FROM sqlite_m
7930: 61 73 74 65 72 7d 0a 7d 20 7b 74 32 20 69 32 7d  aster}.} {t2 i2}
7940: 0a 0a 69 66 63 61 70 61 62 6c 65 20 74 65 6d 70  ..ifcapable temp
7950: 64 62 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 61  db {.  do_test a
7960: 75 74 68 2d 31 2e 31 39 30 20 7b 0a 20 20 20 20  uth-1.190 {.    
7970: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
7980: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
7990: 72 67 34 7d 20 7b 0a 20 20 20 20 20 20 69 66 20  rg4} {.      if 
79a0: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
79b0: 43 52 45 41 54 45 5f 54 45 4d 50 5f 49 4e 44 45  CREATE_TEMP_INDE
79c0: 58 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65  X"} {.        se
79d0: 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69  t ::authargs [li
79e0: 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24  st $arg1 $arg2 $
79f0: 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20  arg3 $arg4].    
7a00: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
7a10: 45 5f 44 45 4e 59 0a 20 20 20 20 20 20 7d 0a 20  E_DENY.      }. 
7a20: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
7a30: 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20  TE_OK.    }.    
7a40: 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45  catchsql {CREATE
7a50: 20 49 4e 44 45 58 20 69 31 20 4f 4e 20 74 31 28   INDEX i1 ON t1(
7a60: 61 29 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f 74 20  a)}.  } {1 {not 
7a70: 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 20 20 64  authorized}}.  d
7a80: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 39  o_test auth-1.19
7a90: 31 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a 61 75  1 {.    set ::au
7aa0: 74 68 61 72 67 73 0a 20 20 7d 20 7b 69 31 20 74  thargs.  } {i1 t
7ab0: 31 20 74 65 6d 70 20 7b 7d 7d 0a 20 20 64 6f 5f  1 temp {}}.  do_
7ac0: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 39 32 20  test auth-1.192 
7ad0: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53  {.    execsql {S
7ae0: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
7af0: 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
7b00: 65 72 7d 0a 20 20 7d 20 7b 74 31 7d 0a 20 20 64  er}.  } {t1}.  d
7b10: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 39  o_test auth-1.19
7b20: 33 20 7b 0a 20 20 20 20 70 72 6f 63 20 61 75 74  3 {.    proc aut
7b30: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
7b40: 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20  2 arg3 arg4} {. 
7b50: 20 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d       if {$code==
7b60: 22 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 22 20  "SQLITE_INSERT" 
7b70: 26 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74  && $arg1=="sqlit
7b80: 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 7d 20  e_temp_master"} 
7b90: 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  {.        return
7ba0: 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20   SQLITE_DENY.   
7bb0: 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72     }.      retur
7bc0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20  n SQLITE_OK.    
7bd0: 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b  }.    catchsql {
7be0: 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 31 20  CREATE INDEX i1 
7bf0: 4f 4e 20 74 31 28 62 29 7d 0a 20 20 7d 20 7b 31  ON t1(b)}.  } {1
7c00: 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64   {not authorized
7c10: 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74  }}.  do_test aut
7c20: 68 2d 31 2e 31 39 34 20 7b 0a 20 20 20 20 65 78  h-1.194 {.    ex
7c30: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61  ecsql {SELECT na
7c40: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74  me FROM sqlite_t
7c50: 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 20 20 7d 20  emp_master}.  } 
7c60: 7b 74 31 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61  {t1}.  do_test a
7c70: 75 74 68 2d 31 2e 31 39 35 20 7b 0a 20 20 20 20  uth-1.195 {.    
7c80: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
7c90: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
7ca0: 72 67 34 7d 20 7b 0a 20 20 20 20 20 20 69 66 20  rg4} {.      if 
7cb0: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
7cc0: 43 52 45 41 54 45 5f 54 45 4d 50 5f 49 4e 44 45  CREATE_TEMP_INDE
7cd0: 58 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65  X"} {.        se
7ce0: 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69  t ::authargs [li
7cf0: 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24  st $arg1 $arg2 $
7d00: 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20  arg3 $arg4].    
7d10: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
7d20: 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 20 20 7d  E_IGNORE.      }
7d30: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
7d40: 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20  LITE_OK.    }.  
7d50: 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41    catchsql {CREA
7d60: 54 45 20 49 4e 44 45 58 20 69 31 20 4f 4e 20 74  TE INDEX i1 ON t
7d70: 31 28 62 29 7d 0a 20 20 7d 20 7b 30 20 7b 7d 7d  1(b)}.  } {0 {}}
7d80: 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  .  do_test auth-
7d90: 31 2e 31 39 36 20 7b 0a 20 20 20 20 73 65 74 20  1.196 {.    set 
7da0: 3a 3a 61 75 74 68 61 72 67 73 0a 20 20 7d 20 7b  ::authargs.  } {
7db0: 69 31 20 74 31 20 74 65 6d 70 20 7b 7d 7d 0a 20  i1 t1 temp {}}. 
7dc0: 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e   do_test auth-1.
7dd0: 31 39 37 20 7b 0a 20 20 20 20 65 78 65 63 73 71  197 {.    execsq
7de0: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
7df0: 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f  ROM sqlite_temp_
7e00: 6d 61 73 74 65 72 7d 0a 20 20 7d 20 7b 74 31 7d  master}.  } {t1}
7e10: 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  .  do_test auth-
7e20: 31 2e 31 39 38 20 7b 0a 20 20 20 20 70 72 6f 63  1.198 {.    proc
7e30: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
7e40: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
7e50: 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f   {.      if {$co
7e60: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 49 4e 53 45  de=="SQLITE_INSE
7e70: 52 54 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73  RT" && $arg1=="s
7e80: 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
7e90: 72 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 72 65  r"} {.        re
7ea0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f  turn SQLITE_IGNO
7eb0: 52 45 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  RE.      }.     
7ec0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
7ed0: 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 74 63  K.    }.    catc
7ee0: 68 73 71 6c 20 7b 43 52 45 41 54 45 20 49 4e 44  hsql {CREATE IND
7ef0: 45 58 20 69 31 20 4f 4e 20 74 31 28 63 29 7d 0a  EX i1 ON t1(c)}.
7f00: 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20 20 64 6f 5f    } {0 {}}.  do_
7f10: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 39 39 20  test auth-1.199 
7f20: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53  {.    execsql {S
7f30: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
7f40: 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
7f50: 65 72 7d 0a 20 20 7d 20 7b 74 31 7d 0a 20 20 64  er}.  } {t1}.  d
7f60: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 30  o_test auth-1.20
7f70: 30 20 7b 0a 20 20 20 20 70 72 6f 63 20 61 75 74  0 {.    proc aut
7f80: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
7f90: 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20  2 arg3 arg4} {. 
7fa0: 20 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d       if {$code==
7fb0: 22 53 51 4c 49 54 45 5f 43 52 45 41 54 45 5f 54  "SQLITE_CREATE_T
7fc0: 45 4d 50 5f 49 4e 44 45 58 22 7d 20 7b 0a 20 20  EMP_INDEX"} {.  
7fd0: 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68        set ::auth
7fe0: 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31  args [list $arg1
7ff0: 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72   $arg2 $arg3 $ar
8000: 67 34 5d 0a 20 20 20 20 20 20 20 20 72 65 74 75  g4].        retu
8010: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20  rn SQLITE_OK.   
8020: 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72     }.      retur
8030: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20  n SQLITE_OK.    
8040: 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b  }.    catchsql {
8050: 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 31 20  CREATE INDEX i1 
8060: 4f 4e 20 74 31 28 61 29 7d 0a 20 20 7d 20 7b 30  ON t1(a)}.  } {0
8070: 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61   {}}.  do_test a
8080: 75 74 68 2d 31 2e 32 30 31 20 7b 0a 20 20 20 20  uth-1.201 {.    
8090: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 20  set ::authargs. 
80a0: 20 7d 20 7b 69 31 20 74 31 20 74 65 6d 70 20 7b   } {i1 t1 temp {
80b0: 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74  }}.  do_test aut
80c0: 68 2d 31 2e 32 30 32 20 7b 0a 20 20 20 20 65 78  h-1.202 {.    ex
80d0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61  ecsql {SELECT na
80e0: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74  me FROM sqlite_t
80f0: 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 20 20 7d 20  emp_master}.  } 
8100: 7b 74 31 20 69 31 7d 0a 7d 0a 0a 64 6f 5f 74 65  {t1 i1}.}..do_te
8110: 73 74 20 61 75 74 68 2d 31 2e 32 30 33 20 7b 0a  st auth-1.203 {.
8120: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
8130: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
8140: 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20   arg4} {.    if 
8150: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
8160: 44 45 4c 45 54 45 22 20 26 26 20 24 61 72 67 31  DELETE" && $arg1
8170: 3d 3d 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  =="sqlite_master
8180: 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72  "} {.      retur
8190: 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20  n SQLITE_DENY.  
81a0: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
81b0: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
81c0: 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 49 4e  atchsql {DROP IN
81d0: 44 45 58 20 69 32 7d 0a 7d 20 7b 31 20 7b 6e 6f  DEX i2}.} {1 {no
81e0: 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64  t authorized}}.d
81f0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 30  o_test auth-1.20
8200: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  4 {.  execsql {S
8210: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
8220: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d  sqlite_master}.}
8230: 20 7b 74 32 20 69 32 7d 0a 64 6f 5f 74 65 73 74   {t2 i2}.do_test
8240: 20 61 75 74 68 2d 31 2e 32 30 35 20 7b 0a 20 20   auth-1.205 {.  
8250: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
8260: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
8270: 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg4} {.    if {$
8280: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52  code=="SQLITE_DR
8290: 4f 50 5f 49 4e 44 45 58 22 7d 20 7b 0a 20 20 20  OP_INDEX"} {.   
82a0: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
82b0: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
82c0: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
82d0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
82e0: 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a  LITE_DENY.    }.
82f0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
8300: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
8310: 73 71 6c 20 7b 44 52 4f 50 20 49 4e 44 45 58 20  sql {DROP INDEX 
8320: 69 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75  i2}.} {1 {not au
8330: 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65  thorized}}.do_te
8340: 73 74 20 61 75 74 68 2d 31 2e 32 30 36 20 7b 0a  st auth-1.206 {.
8350: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
8360: 0a 7d 20 7b 69 32 20 74 32 20 6d 61 69 6e 20 7b  .} {i2 t2 main {
8370: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
8380: 31 2e 32 30 37 20 7b 0a 20 20 65 78 65 63 73 71  1.207 {.  execsq
8390: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
83a0: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
83b0: 72 7d 0a 7d 20 7b 74 32 20 69 32 7d 0a 64 6f 5f  r}.} {t2 i2}.do_
83c0: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 30 38 20  test auth-1.208 
83d0: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
83e0: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
83f0: 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69  g3 arg4} {.    i
8400: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
8410: 45 5f 44 45 4c 45 54 45 22 20 26 26 20 24 61 72  E_DELETE" && $ar
8420: 67 31 3d 3d 22 73 71 6c 69 74 65 5f 6d 61 73 74  g1=="sqlite_mast
8430: 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74  er"} {.      ret
8440: 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52  urn SQLITE_IGNOR
8450: 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  E.    }.    retu
8460: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
8470: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f  .  catchsql {DRO
8480: 50 20 49 4e 44 45 58 20 69 32 7d 0a 7d 20 7b 30  P INDEX i2}.} {0
8490: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
84a0: 68 2d 31 2e 32 30 39 20 7b 0a 20 20 65 78 65 63  h-1.209 {.  exec
84b0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
84c0: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
84d0: 74 65 72 7d 0a 7d 20 7b 74 32 20 69 32 7d 0a 64  ter}.} {t2 i2}.d
84e0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 31  o_test auth-1.21
84f0: 30 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  0 {.  proc auth 
8500: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
8510: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
8520: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
8530: 49 54 45 5f 44 52 4f 50 5f 49 4e 44 45 58 22 7d  ITE_DROP_INDEX"}
8540: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61   {.      set ::a
8550: 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61  uthargs [list $a
8560: 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20  rg1 $arg2 $arg3 
8570: 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74  $arg4].      ret
8580: 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52  urn SQLITE_IGNOR
8590: 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  E.    }.    retu
85a0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
85b0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f  .  catchsql {DRO
85c0: 50 20 49 4e 44 45 58 20 69 32 7d 0a 7d 20 7b 30  P INDEX i2}.} {0
85d0: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
85e0: 68 2d 31 2e 32 31 31 20 7b 0a 20 20 73 65 74 20  h-1.211 {.  set 
85f0: 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 69 32  ::authargs.} {i2
8600: 20 74 32 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f   t2 main {}}.do_
8610: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 31 32 20  test auth-1.212 
8620: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
8630: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
8640: 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b  lite_master}.} {
8650: 74 32 20 69 32 7d 0a 64 6f 5f 74 65 73 74 20 61  t2 i2}.do_test a
8660: 75 74 68 2d 31 2e 32 31 33 20 7b 0a 20 20 70 72  uth-1.213 {.  pr
8670: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
8680: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
8690: 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f  4} {.    if {$co
86a0: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f 50  de=="SQLITE_DROP
86b0: 5f 49 4e 44 45 58 22 7d 20 7b 0a 20 20 20 20 20  _INDEX"} {.     
86c0: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
86d0: 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67  [list $arg1 $arg
86e0: 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20  2 $arg3 $arg4]. 
86f0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
8700: 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20  TE_OK.    }.    
8710: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
8720: 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20  .  }.  catchsql 
8730: 7b 44 52 4f 50 20 49 4e 44 45 58 20 69 32 7d 0a  {DROP INDEX i2}.
8740: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
8750: 20 61 75 74 68 2d 31 2e 32 31 34 20 7b 0a 20 20   auth-1.214 {.  
8760: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d  set ::authargs.}
8770: 20 7b 69 32 20 74 32 20 6d 61 69 6e 20 7b 7d 7d   {i2 t2 main {}}
8780: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
8790: 32 31 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  215 {.  execsql 
87a0: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
87b0: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d  M sqlite_master}
87c0: 0a 7d 20 7b 74 32 7d 0a 0a 69 66 63 61 70 61 62  .} {t2}..ifcapab
87d0: 6c 65 20 74 65 6d 70 64 62 20 7b 0a 20 20 64 6f  le tempdb {.  do
87e0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 31 36  _test auth-1.216
87f0: 20 7b 0a 20 20 20 20 70 72 6f 63 20 61 75 74 68   {.    proc auth
8800: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
8810: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
8820: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
8830: 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 22 20 26  SQLITE_DELETE" &
8840: 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65  & $arg1=="sqlite
8850: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 7d 20 7b  _temp_master"} {
8860: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
8870: 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20  SQLITE_DENY.    
8880: 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e    }.      return
8890: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d   SQLITE_OK.    }
88a0: 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 44  .    catchsql {D
88b0: 52 4f 50 20 49 4e 44 45 58 20 69 31 7d 0a 20 20  ROP INDEX i1}.  
88c0: 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72  } {1 {not author
88d0: 69 7a 65 64 7d 7d 0a 20 20 64 6f 5f 74 65 73 74  ized}}.  do_test
88e0: 20 61 75 74 68 2d 31 2e 32 31 37 20 7b 0a 20 20   auth-1.217 {.  
88f0: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
8900: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
8910: 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a  te_temp_master}.
8920: 20 20 7d 20 7b 74 31 20 69 31 7d 0a 20 20 64 6f    } {t1 i1}.  do
8930: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 31 38  _test auth-1.218
8940: 20 7b 0a 20 20 20 20 70 72 6f 63 20 61 75 74 68   {.    proc auth
8950: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
8960: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
8970: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
8980: 53 51 4c 49 54 45 5f 44 52 4f 50 5f 54 45 4d 50  SQLITE_DROP_TEMP
8990: 5f 49 4e 44 45 58 22 7d 20 7b 0a 20 20 20 20 20  _INDEX"} {.     
89a0: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
89b0: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
89c0: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
89d0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
89e0: 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20  SQLITE_DENY.    
89f0: 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e    }.      return
8a00: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d   SQLITE_OK.    }
8a10: 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 44  .    catchsql {D
8a20: 52 4f 50 20 49 4e 44 45 58 20 69 31 7d 0a 20 20  ROP INDEX i1}.  
8a30: 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72  } {1 {not author
8a40: 69 7a 65 64 7d 7d 0a 20 20 64 6f 5f 74 65 73 74  ized}}.  do_test
8a50: 20 61 75 74 68 2d 31 2e 32 31 39 20 7b 0a 20 20   auth-1.219 {.  
8a60: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
8a70: 0a 20 20 7d 20 7b 69 31 20 74 31 20 74 65 6d 70  .  } {i1 t1 temp
8a80: 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61   {}}.  do_test a
8a90: 75 74 68 2d 31 2e 32 32 30 20 7b 0a 20 20 20 20  uth-1.220 {.    
8aa0: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
8ab0: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
8ac0: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 20 20  _temp_master}.  
8ad0: 7d 20 7b 74 31 20 69 31 7d 0a 20 20 64 6f 5f 74  } {t1 i1}.  do_t
8ae0: 65 73 74 20 61 75 74 68 2d 31 2e 32 32 31 20 7b  est auth-1.221 {
8af0: 0a 20 20 20 20 70 72 6f 63 20 61 75 74 68 20 7b  .    proc auth {
8b00: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
8b10: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
8b20: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
8b30: 4c 49 54 45 5f 44 45 4c 45 54 45 22 20 26 26 20  LITE_DELETE" && 
8b40: 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 74  $arg1=="sqlite_t
8b50: 65 6d 70 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20  emp_master"} {. 
8b60: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
8b70: 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20  LITE_IGNORE.    
8b80: 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e    }.      return
8b90: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d   SQLITE_OK.    }
8ba0: 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 44  .    catchsql {D
8bb0: 52 4f 50 20 49 4e 44 45 58 20 69 31 7d 0a 20 20  ROP INDEX i1}.  
8bc0: 7d 20 7b 30 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65  } {0 {}}.  do_te
8bd0: 73 74 20 61 75 74 68 2d 31 2e 32 32 32 20 7b 0a  st auth-1.222 {.
8be0: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c      execsql {SEL
8bf0: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
8c00: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
8c10: 7d 0a 20 20 7d 20 7b 74 31 20 69 31 7d 0a 20 20  }.  } {t1 i1}.  
8c20: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
8c30: 32 33 20 7b 0a 20 20 20 20 70 72 6f 63 20 61 75  23 {.    proc au
8c40: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
8c50: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
8c60: 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d        if {$code=
8c70: 3d 22 53 51 4c 49 54 45 5f 44 52 4f 50 5f 54 45  ="SQLITE_DROP_TE
8c80: 4d 50 5f 49 4e 44 45 58 22 7d 20 7b 0a 20 20 20  MP_INDEX"} {.   
8c90: 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61       set ::autha
8ca0: 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20  rgs [list $arg1 
8cb0: 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67  $arg2 $arg3 $arg
8cc0: 34 5d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  4].        retur
8cd0: 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a  n SQLITE_IGNORE.
8ce0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65        }.      re
8cf0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
8d00: 20 20 20 7d 0a 20 20 20 20 63 61 74 63 68 73 71     }.    catchsq
8d10: 6c 20 7b 44 52 4f 50 20 49 4e 44 45 58 20 69 31  l {DROP INDEX i1
8d20: 7d 0a 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20 20 64  }.  } {0 {}}.  d
8d30: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 32  o_test auth-1.22
8d40: 34 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a 61 75  4 {.    set ::au
8d50: 74 68 61 72 67 73 0a 20 20 7d 20 7b 69 31 20 74  thargs.  } {i1 t
8d60: 31 20 74 65 6d 70 20 7b 7d 7d 0a 20 20 64 6f 5f  1 temp {}}.  do_
8d70: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 32 35 20  test auth-1.225 
8d80: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53  {.    execsql {S
8d90: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
8da0: 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
8db0: 65 72 7d 0a 20 20 7d 20 7b 74 31 20 69 31 7d 0a  er}.  } {t1 i1}.
8dc0: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31    do_test auth-1
8dd0: 2e 32 32 36 20 7b 0a 20 20 20 20 70 72 6f 63 20  .226 {.    proc 
8de0: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
8df0: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
8e00: 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64  {.      if {$cod
8e10: 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f 50 5f  e=="SQLITE_DROP_
8e20: 54 45 4d 50 5f 49 4e 44 45 58 22 7d 20 7b 0a 20  TEMP_INDEX"} {. 
8e30: 20 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74         set ::aut
8e40: 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67  hargs [list $arg
8e50: 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61  1 $arg2 $arg3 $a
8e60: 72 67 34 5d 0a 20 20 20 20 20 20 20 20 72 65 74  rg4].        ret
8e70: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
8e80: 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75      }.      retu
8e90: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20  rn SQLITE_OK.   
8ea0: 20 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20   }.    catchsql 
8eb0: 7b 44 52 4f 50 20 49 4e 44 45 58 20 69 31 7d 0a  {DROP INDEX i1}.
8ec0: 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20 20 64 6f 5f    } {0 {}}.  do_
8ed0: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 32 37 20  test auth-1.227 
8ee0: 7b 0a 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68  {.    set ::auth
8ef0: 61 72 67 73 0a 20 20 7d 20 7b 69 31 20 74 31 20  args.  } {i1 t1 
8f00: 74 65 6d 70 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65  temp {}}.  do_te
8f10: 73 74 20 61 75 74 68 2d 31 2e 32 32 38 20 7b 0a  st auth-1.228 {.
8f20: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c      execsql {SEL
8f30: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
8f40: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
8f50: 7d 0a 20 20 7d 20 7b 74 31 7d 0a 7d 0a 0a 64 6f  }.  } {t1}.}..do
8f60: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 32 39  _test auth-1.229
8f70: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
8f80: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
8f90: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
8fa0: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
8fb0: 54 45 5f 50 52 41 47 4d 41 22 7d 20 7b 0a 20 20  TE_PRAGMA"} {.  
8fc0: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
8fd0: 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24  gs [list $arg1 $
8fe0: 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34  arg2 $arg3 $arg4
8ff0: 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  ].      return S
9000: 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d  QLITE_DENY.    }
9010: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
9020: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
9030: 68 73 71 6c 20 7b 50 52 41 47 4d 41 20 66 75 6c  hsql {PRAGMA ful
9040: 6c 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 3d 6f  l_column_names=o
9050: 6e 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74  n}.} {1 {not aut
9060: 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73  horized}}.do_tes
9070: 74 20 61 75 74 68 2d 31 2e 32 33 30 20 7b 0a 20  t auth-1.230 {. 
9080: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a   set ::authargs.
9090: 7d 20 7b 66 75 6c 6c 5f 63 6f 6c 75 6d 6e 5f 6e  } {full_column_n
90a0: 61 6d 65 73 20 6f 6e 20 7b 7d 20 7b 7d 7d 0a 64  ames on {} {}}.d
90b0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 33  o_test auth-1.23
90c0: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 32 20 7b  1 {.  execsql2 {
90d0: 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 32  SELECT a FROM t2
90e0: 7d 0a 7d 20 7b 61 20 31 31 20 61 20 37 7d 0a 64  }.} {a 11 a 7}.d
90f0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 33  o_test auth-1.23
9100: 32 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  2 {.  proc auth 
9110: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
9120: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
9130: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
9140: 49 54 45 5f 50 52 41 47 4d 41 22 7d 20 7b 0a 20  ITE_PRAGMA"} {. 
9150: 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61       set ::autha
9160: 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20  rgs [list $arg1 
9170: 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67  $arg2 $arg3 $arg
9180: 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  4].      return 
9190: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20  SQLITE_IGNORE.  
91a0: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
91b0: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
91c0: 61 74 63 68 73 71 6c 20 7b 50 52 41 47 4d 41 20  atchsql {PRAGMA 
91d0: 66 75 6c 6c 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65  full_column_name
91e0: 73 3d 6f 6e 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  s=on}.} {0 {}}.d
91f0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 33  o_test auth-1.23
9200: 33 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68  3 {.  set ::auth
9210: 61 72 67 73 0a 7d 20 7b 66 75 6c 6c 5f 63 6f 6c  args.} {full_col
9220: 75 6d 6e 5f 6e 61 6d 65 73 20 6f 6e 20 7b 7d 20  umn_names on {} 
9230: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
9240: 2d 31 2e 32 33 34 20 7b 0a 20 20 65 78 65 63 73  -1.234 {.  execs
9250: 71 6c 32 20 7b 53 45 4c 45 43 54 20 61 20 46 52  ql2 {SELECT a FR
9260: 4f 4d 20 74 32 7d 0a 7d 20 7b 61 20 31 31 20 61  OM t2}.} {a 11 a
9270: 20 37 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68   7}.do_test auth
9280: 2d 31 2e 32 33 35 20 7b 0a 20 20 70 72 6f 63 20  -1.235 {.  proc 
9290: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
92a0: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
92b0: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
92c0: 3d 22 53 51 4c 49 54 45 5f 50 52 41 47 4d 41 22  ="SQLITE_PRAGMA"
92d0: 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a  } {.      set ::
92e0: 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24  authargs [list $
92f0: 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33  arg1 $arg2 $arg3
9300: 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65   $arg4].      re
9310: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
9320: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
9330: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
9340: 63 61 74 63 68 73 71 6c 20 7b 50 52 41 47 4d 41  catchsql {PRAGMA
9350: 20 66 75 6c 6c 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d   full_column_nam
9360: 65 73 3d 6f 6e 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a  es=on}.} {0 {}}.
9370: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
9380: 33 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 32 20  36 {.  execsql2 
9390: 7b 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74  {SELECT a FROM t
93a0: 32 7d 0a 7d 20 7b 74 32 2e 61 20 31 31 20 74 32  2}.} {t2.a 11 t2
93b0: 2e 61 20 37 7d 0a 64 6f 5f 74 65 73 74 20 61 75  .a 7}.do_test au
93c0: 74 68 2d 31 2e 32 33 37 20 7b 0a 20 20 70 72 6f  th-1.237 {.  pro
93d0: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
93e0: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
93f0: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
9400: 65 3d 3d 22 53 51 4c 49 54 45 5f 50 52 41 47 4d  e=="SQLITE_PRAGM
9410: 41 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20  A"} {.      set 
9420: 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74  ::authargs [list
9430: 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72   $arg1 $arg2 $ar
9440: 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20  g3 $arg4].      
9450: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
9460: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
9470: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
9480: 20 20 63 61 74 63 68 73 71 6c 20 7b 50 52 41 47    catchsql {PRAG
9490: 4d 41 20 66 75 6c 6c 5f 63 6f 6c 75 6d 6e 5f 6e  MA full_column_n
94a0: 61 6d 65 73 3d 4f 46 46 7d 0a 7d 20 7b 30 20 7b  ames=OFF}.} {0 {
94b0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
94c0: 31 2e 32 33 38 20 7b 0a 20 20 73 65 74 20 3a 3a  1.238 {.  set ::
94d0: 61 75 74 68 61 72 67 73 0a 7d 20 7b 66 75 6c 6c  authargs.} {full
94e0: 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 20 4f 46  _column_names OF
94f0: 46 20 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  F {} {}}.do_test
9500: 20 61 75 74 68 2d 31 2e 32 33 39 20 7b 0a 20 20   auth-1.239 {.  
9510: 65 78 65 63 73 71 6c 32 20 7b 53 45 4c 45 43 54  execsql2 {SELECT
9520: 20 61 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 61   a FROM t2}.} {a
9530: 20 31 31 20 61 20 37 7d 0a 0a 64 6f 5f 74 65 73   11 a 7}..do_tes
9540: 74 20 61 75 74 68 2d 31 2e 32 34 30 20 7b 0a 20  t auth-1.240 {. 
9550: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
9560: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
9570: 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg4} {.    if {
9580: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 54  $code=="SQLITE_T
9590: 52 41 4e 53 41 43 54 49 4f 4e 22 7d 20 7b 0a 20  RANSACTION"} {. 
95a0: 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61       set ::autha
95b0: 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20  rgs [list $arg1 
95c0: 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67  $arg2 $arg3 $arg
95d0: 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  4].      return 
95e0: 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20  SQLITE_DENY.    
95f0: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
9600: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
9610: 63 68 73 71 6c 20 7b 42 45 47 49 4e 7d 0a 7d 20  chsql {BEGIN}.} 
9620: 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a  {1 {not authoriz
9630: 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  ed}}.do_test aut
9640: 68 2d 31 2e 32 34 31 20 7b 0a 20 20 73 65 74 20  h-1.241 {.  set 
9650: 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 42 45  ::authargs.} {BE
9660: 47 49 4e 20 7b 7d 20 7b 7d 20 7b 7d 7d 0a 64 6f  GIN {} {} {}}.do
9670: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 34 32  _test auth-1.242
9680: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
9690: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
96a0: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
96b0: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
96c0: 54 45 5f 54 52 41 4e 53 41 43 54 49 4f 4e 22 20  TE_TRANSACTION" 
96d0: 26 26 20 24 61 72 67 31 21 3d 22 42 45 47 49 4e  && $arg1!="BEGIN
96e0: 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a  "} {.      set :
96f0: 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20  :authargs [list 
9700: 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67  $arg1 $arg2 $arg
9710: 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72  3 $arg4].      r
9720: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e  eturn SQLITE_DEN
9730: 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  Y.    }.    retu
9740: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
9750: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 42 45 47  .  catchsql {BEG
9760: 49 4e 3b 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  IN; INSERT INTO 
9770: 74 32 20 56 41 4c 55 45 53 28 34 34 2c 35 35 2c  t2 VALUES(44,55,
9780: 36 36 29 3b 20 43 4f 4d 4d 49 54 7d 0a 7d 20 7b  66); COMMIT}.} {
9790: 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65  1 {not authorize
97a0: 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  d}}.do_test auth
97b0: 2d 31 2e 32 34 33 20 7b 0a 20 20 73 65 74 20 3a  -1.243 {.  set :
97c0: 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 43 4f 4d  :authargs.} {COM
97d0: 4d 49 54 20 7b 7d 20 7b 7d 20 7b 7d 7d 0a 64 6f  MIT {} {} {}}.do
97e0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 34 34  _test auth-1.244
97f0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
9800: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d 0a  LECT * FROM t2}.
9810: 7d 20 7b 31 31 20 32 20 33 33 20 37 20 38 20 39  } {11 2 33 7 8 9
9820: 20 34 34 20 35 35 20 36 36 7d 0a 64 6f 5f 74 65   44 55 66}.do_te
9830: 73 74 20 61 75 74 68 2d 31 2e 32 34 35 20 7b 0a  st auth-1.245 {.
9840: 20 20 63 61 74 63 68 73 71 6c 20 7b 52 4f 4c 4c    catchsql {ROLL
9850: 42 41 43 4b 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20  BACK}.} {1 {not 
9860: 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f  authorized}}.do_
9870: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 34 36 20  test auth-1.246 
9880: 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72  {.  set ::authar
9890: 67 73 0a 7d 20 7b 52 4f 4c 4c 42 41 43 4b 20 7b  gs.} {ROLLBACK {
98a0: 7d 20 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {} {}}.do_test
98b0: 20 61 75 74 68 2d 31 2e 32 34 37 20 7b 0a 20 20   auth-1.247 {.  
98c0: 63 61 74 63 68 73 71 6c 20 7b 45 4e 44 20 54 52  catchsql {END TR
98d0: 41 4e 53 41 43 54 49 4f 4e 7d 0a 7d 20 7b 31 20  ANSACTION}.} {1 
98e0: 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d  {not authorized}
98f0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
9900: 2e 32 34 38 20 7b 0a 20 20 73 65 74 20 3a 3a 61  .248 {.  set ::a
9910: 75 74 68 61 72 67 73 0a 7d 20 7b 43 4f 4d 4d 49  uthargs.} {COMMI
9920: 54 20 7b 7d 20 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74  T {} {} {}}.do_t
9930: 65 73 74 20 61 75 74 68 2d 31 2e 32 34 39 20 7b  est auth-1.249 {
9940: 0a 20 20 64 62 20 61 75 74 68 6f 72 69 7a 65 72  .  db authorizer
9950: 20 7b 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b   {}.  catchsql {
9960: 52 4f 4c 4c 42 41 43 4b 7d 0a 7d 20 7b 30 20 7b  ROLLBACK}.} {0 {
9970: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
9980: 31 2e 32 35 30 20 7b 0a 20 20 65 78 65 63 73 71  1.250 {.  execsq
9990: 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  l {SELECT * FROM
99a0: 20 74 32 7d 0a 7d 20 7b 31 31 20 32 20 33 33 20   t2}.} {11 2 33 
99b0: 37 20 38 20 39 7d 0a 0a 23 20 74 69 63 6b 65 74  7 8 9}..# ticket
99c0: 20 23 33 34 30 20 2d 20 61 75 74 68 6f 72 69 7a   #340 - authoriz
99d0: 61 74 69 6f 6e 20 66 6f 72 20 41 54 54 41 43 48  ation for ATTACH
99e0: 20 61 6e 64 20 44 45 54 41 43 48 2e 0a 23 0a 69   and DETACH..#.i
99f0: 66 63 61 70 61 62 6c 65 20 61 74 74 61 63 68 20  fcapable attach 
9a00: 7b 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68  {.  do_test auth
9a10: 2d 31 2e 32 35 31 20 7b 0a 20 20 20 20 64 62 20  -1.251 {.    db 
9a20: 61 75 74 68 6f 72 69 7a 65 72 20 3a 3a 61 75 74  authorizer ::aut
9a30: 68 0a 20 20 20 20 70 72 6f 63 20 61 75 74 68 20  h.    proc auth 
9a40: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
9a50: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
9a60: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
9a70: 51 4c 49 54 45 5f 41 54 54 41 43 48 22 7d 20 7b  QLITE_ATTACH"} {
9a80: 0a 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a 61  .        set ::a
9a90: 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61  uthargs [list $a
9aa0: 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20  rg1 $arg2 $arg3 
9ab0: 24 61 72 67 34 5d 0a 20 20 20 20 20 20 7d 0a 20  $arg4].      }. 
9ac0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
9ad0: 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20  TE_OK.    }.    
9ae0: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20  catchsql {.     
9af0: 20 41 54 54 41 43 48 20 44 41 54 41 42 41 53 45   ATTACH DATABASE
9b00: 20 27 3a 6d 65 6d 6f 72 79 3a 27 20 41 53 20 74   ':memory:' AS t
9b10: 65 73 74 31 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  est1.    }.  } {
9b20: 30 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20  0 {}}.  do_test 
9b30: 61 75 74 68 2d 31 2e 32 35 32 20 7b 0a 20 20 20  auth-1.252 {.   
9b40: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a   set ::authargs.
9b50: 20 20 7d 20 7b 3a 6d 65 6d 6f 72 79 3a 20 7b 7d    } {:memory: {}
9b60: 20 7b 7d 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73   {} {}}.  do_tes
9b70: 74 20 61 75 74 68 2d 31 2e 32 35 33 20 7b 0a 20  t auth-1.253 {. 
9b80: 20 20 20 63 61 74 63 68 73 71 6c 20 7b 44 45 54     catchsql {DET
9b90: 41 43 48 20 44 41 54 41 42 41 53 45 20 74 65 73  ACH DATABASE tes
9ba0: 74 31 7d 0a 20 20 20 20 70 72 6f 63 20 61 75 74  t1}.    proc aut
9bb0: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
9bc0: 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20  2 arg3 arg4} {. 
9bd0: 20 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d       if {$code==
9be0: 22 53 51 4c 49 54 45 5f 41 54 54 41 43 48 22 7d  "SQLITE_ATTACH"}
9bf0: 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 3a   {.        set :
9c00: 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20  :authargs [list 
9c10: 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67  $arg1 $arg2 $arg
9c20: 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 20  3 $arg4].       
9c30: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44   return SQLITE_D
9c40: 45 4e 59 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ENY.      }.    
9c50: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
9c60: 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 74  OK.    }.    cat
9c70: 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20 41 54  chsql {.      AT
9c80: 54 41 43 48 20 44 41 54 41 42 41 53 45 20 27 3a  TACH DATABASE ':
9c90: 6d 65 6d 6f 72 79 3a 27 20 41 53 20 74 65 73 74  memory:' AS test
9ca0: 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 20  1;.    }.  } {1 
9cb0: 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d  {not authorized}
9cc0: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68  }.  do_test auth
9cd0: 2d 31 2e 32 35 34 20 7b 0a 20 20 20 20 6c 69 6e  -1.254 {.    lin
9ce0: 64 65 78 20 5b 65 78 65 63 73 71 6c 20 7b 50 52  dex [execsql {PR
9cf0: 41 47 4d 41 20 64 61 74 61 62 61 73 65 5f 6c 69  AGMA database_li
9d00: 73 74 7d 5d 20 37 0a 20 20 7d 20 7b 7d 0a 20 20  st}] 7.  } {}.  
9d10: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
9d20: 35 35 20 7b 0a 20 20 20 20 63 61 74 63 68 73 71  55 {.    catchsq
9d30: 6c 20 7b 44 45 54 41 43 48 20 44 41 54 41 42 41  l {DETACH DATABA
9d40: 53 45 20 74 65 73 74 31 7d 0a 20 20 20 20 70 72  SE test1}.    pr
9d50: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
9d60: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
9d70: 34 7d 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24  4} {.      if {$
9d80: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 41 54  code=="SQLITE_AT
9d90: 54 41 43 48 22 7d 20 7b 0a 20 20 20 20 20 20 20  TACH"} {.       
9da0: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
9db0: 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67  [list $arg1 $arg
9dc0: 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20  2 $arg3 $arg4]. 
9dd0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
9de0: 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20  LITE_IGNORE.    
9df0: 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e    }.      return
9e00: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d   SQLITE_OK.    }
9e10: 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a  .    catchsql {.
9e20: 20 20 20 20 20 20 41 54 54 41 43 48 20 44 41 54        ATTACH DAT
9e30: 41 42 41 53 45 20 27 3a 6d 65 6d 6f 72 79 3a 27  ABASE ':memory:'
9e40: 20 41 53 20 74 65 73 74 31 3b 0a 20 20 20 20 7d   AS test1;.    }
9e50: 0a 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20 20 64 6f  .  } {0 {}}.  do
9e60: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 35 36  _test auth-1.256
9e70: 20 7b 0a 20 20 20 20 6c 69 6e 64 65 78 20 5b 65   {.    lindex [e
9e80: 78 65 63 73 71 6c 20 7b 50 52 41 47 4d 41 20 64  xecsql {PRAGMA d
9e90: 61 74 61 62 61 73 65 5f 6c 69 73 74 7d 5d 20 37  atabase_list}] 7
9ea0: 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73  .  } {}.  do_tes
9eb0: 74 20 61 75 74 68 2d 31 2e 32 35 37 20 7b 0a 20  t auth-1.257 {. 
9ec0: 20 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f     proc auth {co
9ed0: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
9ee0: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 20 20  3 arg4} {.      
9ef0: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
9f00: 54 45 5f 44 45 54 41 43 48 22 7d 20 7b 0a 20 20  TE_DETACH"} {.  
9f10: 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68        set ::auth
9f20: 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31  args [list $arg1
9f30: 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72   $arg2 $arg3 $ar
9f40: 67 34 5d 0a 20 20 20 20 20 20 20 20 72 65 74 75  g4].        retu
9f50: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20  rn SQLITE_OK.   
9f60: 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72     }.      retur
9f70: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20  n SQLITE_OK.    
9f80: 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 41  }.    execsql {A
9f90: 54 54 41 43 48 20 44 41 54 41 42 41 53 45 20 27  TTACH DATABASE '
9fa0: 3a 6d 65 6d 6f 72 79 3a 27 20 41 53 20 74 65 73  :memory:' AS tes
9fb0: 74 31 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c  t1}.    catchsql
9fc0: 20 7b 0a 20 20 20 20 20 20 44 45 54 41 43 48 20   {.      DETACH 
9fd0: 44 41 54 41 42 41 53 45 20 74 65 73 74 31 3b 0a  DATABASE test1;.
9fe0: 20 20 20 20 7d 0a 20 20 7d 20 7b 30 20 7b 7d 7d      }.  } {0 {}}
9ff0: 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  .  do_test auth-
a000: 31 2e 32 35 38 20 7b 0a 20 20 20 20 6c 69 6e 64  1.258 {.    lind
a010: 65 78 20 5b 65 78 65 63 73 71 6c 20 7b 50 52 41  ex [execsql {PRA
a020: 47 4d 41 20 64 61 74 61 62 61 73 65 5f 6c 69 73  GMA database_lis
a030: 74 7d 5d 20 37 0a 20 20 7d 20 7b 7d 0a 20 20 64  t}] 7.  } {}.  d
a040: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 35  o_test auth-1.25
a050: 39 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  9 {.    execsql 
a060: 7b 41 54 54 41 43 48 20 44 41 54 41 42 41 53 45  {ATTACH DATABASE
a070: 20 27 3a 6d 65 6d 6f 72 79 3a 27 20 41 53 20 74   ':memory:' AS t
a080: 65 73 74 31 7d 0a 20 20 20 20 70 72 6f 63 20 61  est1}.    proc a
a090: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
a0a0: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
a0b0: 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64 65  .      if {$code
a0c0: 3d 3d 22 53 51 4c 49 54 45 5f 44 45 54 41 43 48  =="SQLITE_DETACH
a0d0: 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74  "} {.        set
a0e0: 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73   ::authargs [lis
a0f0: 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61  t $arg1 $arg2 $a
a100: 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20  rg3 $arg4].     
a110: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
a120: 5f 49 47 4e 4f 52 45 0a 20 20 20 20 20 20 7d 0a  _IGNORE.      }.
a130: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
a140: 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20  ITE_OK.    }.   
a150: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
a160: 20 20 44 45 54 41 43 48 20 44 41 54 41 42 41 53    DETACH DATABAS
a170: 45 20 74 65 73 74 31 3b 0a 20 20 20 20 7d 0a 20  E test1;.    }. 
a180: 20 7d 20 7b 30 20 7b 7d 7d 0a 20 20 69 66 63 61   } {0 {}}.  ifca
a190: 70 61 62 6c 65 20 74 65 6d 70 64 62 20 7b 0a 20  pable tempdb {. 
a1a0: 20 20 20 69 66 63 61 70 61 62 6c 65 20 73 63 68     ifcapable sch
a1b0: 65 6d 61 5f 70 72 61 67 6d 61 73 20 7b 0a 20 20  ema_pragmas {.  
a1c0: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31    do_test auth-1
a1d0: 2e 32 36 30 20 7b 0a 20 20 20 20 20 20 6c 69 6e  .260 {.      lin
a1e0: 64 65 78 20 5b 65 78 65 63 73 71 6c 20 7b 50 52  dex [execsql {PR
a1f0: 41 47 4d 41 20 64 61 74 61 62 61 73 65 5f 6c 69  AGMA database_li
a200: 73 74 7d 5d 20 37 0a 20 20 20 20 7d 20 7b 74 65  st}] 7.    } {te
a210: 73 74 31 7d 0a 20 20 20 20 7d 20 3b 23 20 69 66  st1}.    } ;# if
a220: 63 61 70 61 62 6c 65 20 73 63 68 65 6d 61 5f 70  capable schema_p
a230: 72 61 67 6d 61 73 0a 20 20 20 20 64 6f 5f 74 65  ragmas.    do_te
a240: 73 74 20 61 75 74 68 2d 31 2e 32 36 31 20 7b 0a  st auth-1.261 {.
a250: 20 20 20 20 20 20 70 72 6f 63 20 61 75 74 68 20        proc auth 
a260: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
a270: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
a280: 20 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d       if {$code==
a290: 22 53 51 4c 49 54 45 5f 44 45 54 41 43 48 22 7d  "SQLITE_DETACH"}
a2a0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 73 65 74   {.          set
a2b0: 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73   ::authargs [lis
a2c0: 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61  t $arg1 $arg2 $a
a2d0: 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20  rg3 $arg4].     
a2e0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
a2f0: 54 45 5f 44 45 4e 59 0a 20 20 20 20 20 20 20 20  TE_DENY.        
a300: 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  }.        return
a310: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 20   SQLITE_OK.     
a320: 20 7d 0a 20 20 20 20 20 20 63 61 74 63 68 73 71   }.      catchsq
a330: 6c 20 7b 0a 20 20 20 20 20 20 20 20 44 45 54 41  l {.        DETA
a340: 43 48 20 44 41 54 41 42 41 53 45 20 74 65 73 74  CH DATABASE test
a350: 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  1;.      }.    }
a360: 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69   {1 {not authori
a370: 7a 65 64 7d 7d 0a 20 20 20 20 69 66 63 61 70 61  zed}}.    ifcapa
a380: 62 6c 65 20 73 63 68 65 6d 61 5f 70 72 61 67 6d  ble schema_pragm
a390: 61 73 20 7b 0a 20 20 20 20 64 6f 5f 74 65 73 74  as {.    do_test
a3a0: 20 61 75 74 68 2d 31 2e 32 36 32 20 7b 0a 20 20   auth-1.262 {.  
a3b0: 20 20 20 20 6c 69 6e 64 65 78 20 5b 65 78 65 63      lindex [exec
a3c0: 73 71 6c 20 7b 50 52 41 47 4d 41 20 64 61 74 61  sql {PRAGMA data
a3d0: 62 61 73 65 5f 6c 69 73 74 7d 5d 20 37 0a 20 20  base_list}] 7.  
a3e0: 20 20 7d 20 7b 74 65 73 74 31 7d 0a 20 20 20 20    } {test1}.    
a3f0: 7d 20 3b 23 20 69 66 63 61 70 61 62 6c 65 20 73  } ;# ifcapable s
a400: 63 68 65 6d 61 5f 70 72 61 67 6d 61 73 0a 20 20  chema_pragmas.  
a410: 20 20 64 62 20 61 75 74 68 6f 72 69 7a 65 72 20    db authorizer 
a420: 7b 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b  {}.    execsql {
a430: 44 45 54 41 43 48 20 44 41 54 41 42 41 53 45 20  DETACH DATABASE 
a440: 74 65 73 74 31 7d 0a 20 20 20 20 64 62 20 61 75  test1}.    db au
a450: 74 68 6f 72 69 7a 65 72 20 3a 3a 61 75 74 68 0a  thorizer ::auth.
a460: 20 20 20 20 0a 20 20 20 20 23 20 41 75 74 68 6f      .    # Autho
a470: 72 69 7a 61 74 69 6f 6e 20 66 6f 72 20 41 4c 54  rization for ALT
a480: 45 52 20 54 41 42 4c 45 2e 20 54 68 65 73 65 20  ER TABLE. These 
a490: 74 65 73 74 73 20 61 72 65 20 6f 6d 69 74 74 65  tests are omitte
a4a0: 64 20 69 66 20 74 68 65 20 6c 69 62 72 61 72 79  d if the library
a4b0: 0a 20 20 20 20 23 20 77 61 73 20 62 75 69 6c 74  .    # was built
a4c0: 20 77 69 74 68 6f 75 74 20 41 4c 54 45 52 20 54   without ALTER T
a4d0: 41 42 4c 45 20 73 75 70 70 6f 72 74 2e 0a 20 20  ABLE support..  
a4e0: 20 20 69 66 63 61 70 61 62 6c 65 20 61 6c 74 65    ifcapable alte
a4f0: 72 74 61 62 6c 65 20 7b 0a 20 20 20 20 0a 20 20  rtable {.    .  
a500: 20 20 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68      do_test auth
a510: 2d 31 2e 32 36 33 20 7b 0a 20 20 20 20 20 20 20  -1.263 {.       
a520: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
a530: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
a540: 61 72 67 34 7d 20 7b 0a 20 20 20 20 20 20 20 20  arg4} {.        
a550: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
a560: 4c 49 54 45 5f 41 4c 54 45 52 5f 54 41 42 4c 45  LITE_ALTER_TABLE
a570: 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  "} {.           
a580: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
a590: 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67  [list $arg1 $arg
a5a0: 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20  2 $arg3 $arg4]. 
a5b0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
a5c0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20  n SQLITE_OK.    
a5d0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
a5e0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
a5f0: 4f 4b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  OK.        }.   
a600: 20 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a       catchsql {.
a610: 20 20 20 20 20 20 20 20 20 20 41 4c 54 45 52 20            ALTER 
a620: 54 41 42 4c 45 20 74 31 20 52 45 4e 41 4d 45 20  TABLE t1 RENAME 
a630: 54 4f 20 74 31 78 0a 20 20 20 20 20 20 20 20 7d  TO t1x.        }
a640: 0a 20 20 20 20 20 20 7d 20 7b 30 20 7b 7d 7d 0a  .      } {0 {}}.
a650: 20 20 20 20 20 20 64 6f 5f 74 65 73 74 20 61 75        do_test au
a660: 74 68 2d 31 2e 32 36 34 20 7b 0a 20 20 20 20 20  th-1.264 {.     
a670: 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45     execsql {SELE
a680: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
a690: 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 20  ite_temp_master 
a6a0: 57 48 45 52 45 20 74 79 70 65 3d 27 74 61 62 6c  WHERE type='tabl
a6b0: 65 27 7d 0a 20 20 20 20 20 20 7d 20 7b 74 31 78  e'}.      } {t1x
a6c0: 7d 0a 20 20 20 20 20 20 64 6f 5f 74 65 73 74 20  }.      do_test 
a6d0: 61 75 74 68 2d 31 2e 32 36 35 20 7b 0a 20 20 20  auth-1.265 {.   
a6e0: 20 20 20 20 20 73 65 74 20 61 75 74 68 61 72 67       set autharg
a6f0: 73 0a 20 20 20 20 20 20 7d 20 7b 74 65 6d 70 20  s.      } {temp 
a700: 74 31 20 7b 7d 20 7b 7d 7d 0a 20 20 20 20 20 20  t1 {} {}}.      
a710: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
a720: 36 36 20 7b 0a 20 20 20 20 20 20 20 20 70 72 6f  66 {.        pro
a730: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
a740: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
a750: 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66  } {.          if
a760: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
a770: 5f 41 4c 54 45 52 5f 54 41 42 4c 45 22 7d 20 7b  _ALTER_TABLE"} {
a780: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74  .            set
a790: 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73   ::authargs [lis
a7a0: 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61  t $arg1 $arg2 $a
a7b0: 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20  rg3 $arg4].     
a7c0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
a7d0: 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20  LITE_IGNORE.    
a7e0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
a7f0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
a800: 4f 4b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  OK.        }.   
a810: 20 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a       catchsql {.
a820: 20 20 20 20 20 20 20 20 20 20 41 4c 54 45 52 20            ALTER 
a830: 54 41 42 4c 45 20 74 31 78 20 52 45 4e 41 4d 45  TABLE t1x RENAME
a840: 20 54 4f 20 74 31 0a 20 20 20 20 20 20 20 20 7d   TO t1.        }
a850: 0a 20 20 20 20 20 20 7d 20 7b 30 20 7b 7d 7d 0a  .      } {0 {}}.
a860: 20 20 20 20 20 20 64 6f 5f 74 65 73 74 20 61 75        do_test au
a870: 74 68 2d 31 2e 32 36 37 20 7b 0a 20 20 20 20 20  th-1.267 {.     
a880: 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45     execsql {SELE
a890: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
a8a0: 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 20  ite_temp_master 
a8b0: 57 48 45 52 45 20 74 79 70 65 3d 27 74 61 62 6c  WHERE type='tabl
a8c0: 65 27 7d 0a 20 20 20 20 20 20 7d 20 7b 74 31 78  e'}.      } {t1x
a8d0: 7d 0a 20 20 20 20 20 20 64 6f 5f 74 65 73 74 20  }.      do_test 
a8e0: 61 75 74 68 2d 31 2e 32 36 38 20 7b 0a 20 20 20  auth-1.268 {.   
a8f0: 20 20 20 20 20 73 65 74 20 61 75 74 68 61 72 67       set autharg
a900: 73 0a 20 20 20 20 20 20 7d 20 7b 74 65 6d 70 20  s.      } {temp 
a910: 74 31 78 20 7b 7d 20 7b 7d 7d 0a 20 20 20 20 20  t1x {} {}}.     
a920: 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e   do_test auth-1.
a930: 32 36 39 20 7b 0a 20 20 20 20 20 20 20 20 70 72  269 {.        pr
a940: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
a950: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
a960: 34 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 69  4} {.          i
a970: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
a980: 45 5f 41 4c 54 45 52 5f 54 41 42 4c 45 22 7d 20  E_ALTER_TABLE"} 
a990: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65  {.            se
a9a0: 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69  t ::authargs [li
a9b0: 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24  st $arg1 $arg2 $
a9c0: 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20  arg3 $arg4].    
a9d0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
a9e0: 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 20  QLITE_DENY.     
a9f0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
aa00: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
aa10: 4b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  K.        }.    
aa20: 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20      catchsql {. 
aa30: 20 20 20 20 20 20 20 20 20 41 4c 54 45 52 20 54           ALTER T
aa40: 41 42 4c 45 20 74 31 78 20 52 45 4e 41 4d 45 20  ABLE t1x RENAME 
aa50: 54 4f 20 74 31 0a 20 20 20 20 20 20 20 20 7d 0a  TO t1.        }.
aa60: 20 20 20 20 20 20 7d 20 7b 31 20 7b 6e 6f 74 20        } {1 {not 
aa70: 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 20 20 20  authorized}}.   
aa80: 20 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d     do_test auth-
aa90: 31 2e 32 37 30 20 7b 0a 20 20 20 20 20 20 20 20  1.270 {.        
aaa0: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
aab0: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
aac0: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 20 57 48 45  _temp_master WHE
aad0: 52 45 20 74 79 70 65 3d 27 74 61 62 6c 65 27 7d  RE type='table'}
aae0: 0a 20 20 20 20 20 20 7d 20 7b 74 31 78 7d 0a 20  .      } {t1x}. 
aaf0: 20 0a 20 20 20 20 20 20 64 6f 5f 74 65 73 74 20   .      do_test 
ab00: 61 75 74 68 2d 31 2e 32 37 31 20 7b 0a 20 20 20  auth-1.271 {.   
ab10: 20 20 20 20 20 73 65 74 20 61 75 74 68 61 72 67       set autharg
ab20: 73 0a 20 20 20 20 20 20 7d 20 7b 74 65 6d 70 20  s.      } {temp 
ab30: 74 31 78 20 7b 7d 20 7b 7d 7d 0a 20 20 20 20 7d  t1x {} {}}.    }
ab40: 20 3b 23 20 69 66 63 61 70 61 62 6c 65 20 61 6c   ;# ifcapable al
ab50: 74 65 72 74 61 62 6c 65 0a 20 20 0a 20 20 7d 20  tertable.  .  } 
ab60: 65 6c 73 65 20 7b 0a 20 20 20 20 64 62 20 61 75  else {.    db au
ab70: 74 68 6f 72 69 7a 65 72 20 7b 7d 0a 20 20 20 20  thorizer {}.    
ab80: 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 20 20  db eval {.      
ab90: 44 45 54 41 43 48 20 44 41 54 41 42 41 53 45 20  DETACH DATABASE 
aba0: 74 65 73 74 31 3b 0a 20 20 20 20 7d 0a 20 20 7d  test1;.    }.  }
abb0: 0a 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20 20 61  .}..ifcapable  a
abc0: 6c 74 65 72 74 61 62 6c 65 20 7b 0a 64 62 20 61  ltertable {.db a
abd0: 75 74 68 6f 72 69 7a 65 72 20 7b 7d 0a 63 61 74  uthorizer {}.cat
abe0: 63 68 73 71 6c 20 7b 41 4c 54 45 52 20 54 41 42  chsql {ALTER TAB
abf0: 4c 45 20 74 31 78 20 52 45 4e 41 4d 45 20 54 4f  LE t1x RENAME TO
ac00: 20 74 31 7d 0a 64 62 20 61 75 74 68 6f 72 69 7a   t1}.db authoriz
ac10: 65 72 20 3a 3a 61 75 74 68 0a 64 6f 5f 74 65 73  er ::auth.do_tes
ac20: 74 20 61 75 74 68 2d 31 2e 32 37 32 20 7b 0a 20  t auth-1.272 {. 
ac30: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
ac40: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
ac50: 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg4} {.    if {
ac60: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 41  $code=="SQLITE_A
ac70: 4c 54 45 52 5f 54 41 42 4c 45 22 7d 20 7b 0a 20  LTER_TABLE"} {. 
ac80: 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61       set ::autha
ac90: 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20  rgs [list $arg1 
aca0: 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67  $arg2 $arg3 $arg
acb0: 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  4].      return 
acc0: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a  SQLITE_OK.    }.
acd0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
ace0: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
acf0: 73 71 6c 20 7b 0a 20 20 20 20 41 4c 54 45 52 20  sql {.    ALTER 
ad00: 54 41 42 4c 45 20 74 32 20 52 45 4e 41 4d 45 20  TABLE t2 RENAME 
ad10: 54 4f 20 74 32 78 0a 20 20 7d 0a 7d 20 7b 30 20  TO t2x.  }.} {0 
ad20: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
ad30: 2d 31 2e 32 37 33 20 7b 0a 20 20 65 78 65 63 73  -1.273 {.  execs
ad40: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
ad50: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
ad60: 65 72 20 57 48 45 52 45 20 74 79 70 65 3d 27 74  er WHERE type='t
ad70: 61 62 6c 65 27 7d 0a 7d 20 7b 74 32 78 7d 0a 64  able'}.} {t2x}.d
ad80: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 37  o_test auth-1.27
ad90: 34 20 7b 0a 20 20 73 65 74 20 61 75 74 68 61 72  4 {.  set authar
ada0: 67 73 0a 7d 20 7b 6d 61 69 6e 20 74 32 20 7b 7d  gs.} {main t2 {}
adb0: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
adc0: 68 2d 31 2e 32 37 35 20 7b 0a 20 20 70 72 6f 63  h-1.275 {.  proc
add0: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
ade0: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
adf0: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
ae00: 3d 3d 22 53 51 4c 49 54 45 5f 41 4c 54 45 52 5f  =="SQLITE_ALTER_
ae10: 54 41 42 4c 45 22 7d 20 7b 0a 20 20 20 20 20 20  TABLE"} {.      
ae20: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b  set ::authargs [
ae30: 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67 32  list $arg1 $arg2
ae40: 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20   $arg3 $arg4].  
ae50: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
ae60: 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20  E_IGNORE.    }. 
ae70: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
ae80: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
ae90: 71 6c 20 7b 0a 20 20 20 20 41 4c 54 45 52 20 54  ql {.    ALTER T
aea0: 41 42 4c 45 20 74 32 78 20 52 45 4e 41 4d 45 20  ABLE t2x RENAME 
aeb0: 54 4f 20 74 32 0a 20 20 7d 0a 7d 20 7b 30 20 7b  TO t2.  }.} {0 {
aec0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
aed0: 31 2e 32 37 36 20 7b 0a 20 20 65 78 65 63 73 71  1.276 {.  execsq
aee0: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
aef0: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
af00: 72 20 57 48 45 52 45 20 74 79 70 65 3d 27 74 61  r WHERE type='ta
af10: 62 6c 65 27 7d 0a 7d 20 7b 74 32 78 7d 0a 64 6f  ble'}.} {t2x}.do
af20: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 37 37  _test auth-1.277
af30: 20 7b 0a 20 20 73 65 74 20 61 75 74 68 61 72 67   {.  set autharg
af40: 73 0a 7d 20 7b 6d 61 69 6e 20 74 32 78 20 7b 7d  s.} {main t2x {}
af50: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
af60: 68 2d 31 2e 32 37 38 20 7b 0a 20 20 70 72 6f 63  h-1.278 {.  proc
af70: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
af80: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
af90: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
afa0: 3d 3d 22 53 51 4c 49 54 45 5f 41 4c 54 45 52 5f  =="SQLITE_ALTER_
afb0: 54 41 42 4c 45 22 7d 20 7b 0a 20 20 20 20 20 20  TABLE"} {.      
afc0: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b  set ::authargs [
afd0: 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67 32  list $arg1 $arg2
afe0: 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20   $arg3 $arg4].  
aff0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
b000: 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20  E_DENY.    }.   
b010: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
b020: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
b030: 20 7b 0a 20 20 20 20 41 4c 54 45 52 20 54 41 42   {.    ALTER TAB
b040: 4c 45 20 74 32 78 20 52 45 4e 41 4d 45 20 54 4f  LE t2x RENAME TO
b050: 20 74 32 0a 20 20 7d 0a 7d 20 7b 31 20 7b 6e 6f   t2.  }.} {1 {no
b060: 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64  t authorized}}.d
b070: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 37  o_test auth-1.27
b080: 39 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  9 {.  execsql {S
b090: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
b0a0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48  sqlite_master WH
b0b0: 45 52 45 20 74 79 70 65 3d 27 74 61 62 6c 65 27  ERE type='table'
b0c0: 7d 0a 7d 20 7b 74 32 78 7d 0a 64 6f 5f 74 65 73  }.} {t2x}.do_tes
b0d0: 74 20 61 75 74 68 2d 31 2e 32 38 30 20 7b 0a 20  t auth-1.280 {. 
b0e0: 20 73 65 74 20 61 75 74 68 61 72 67 73 0a 7d 20   set authargs.} 
b0f0: 7b 6d 61 69 6e 20 74 32 78 20 7b 7d 20 7b 7d 7d  {main t2x {} {}}
b100: 0a 64 62 20 61 75 74 68 6f 72 69 7a 65 72 20 7b  .db authorizer {
b110: 7d 0a 63 61 74 63 68 73 71 6c 20 7b 41 4c 54 45  }.catchsql {ALTE
b120: 52 20 54 41 42 4c 45 20 74 32 78 20 52 45 4e 41  R TABLE t2x RENA
b130: 4d 45 20 54 4f 20 74 32 7d 0a 0a 7d 20 3b 23 20  ME TO t2}..} ;# 
b140: 69 66 63 61 70 61 62 6c 65 20 61 6c 74 65 72 74  ifcapable altert
b150: 61 62 6c 65 0a 0a 23 20 54 65 73 74 20 74 68 65  able..# Test the
b160: 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 63   authorization c
b170: 61 6c 6c 62 61 63 6b 73 20 66 6f 72 20 74 68 65  allbacks for the
b180: 20 52 45 49 4e 44 45 58 20 63 6f 6d 6d 61 6e 64   REINDEX command
b190: 2e 0a 69 66 63 61 70 61 62 6c 65 20 72 65 69 6e  ..ifcapable rein
b1a0: 64 65 78 20 7b 0a 0a 70 72 6f 63 20 61 75 74 68  dex {..proc auth
b1b0: 20 7b 63 6f 64 65 20 61 72 67 73 7d 20 7b 0a 20   {code args} {. 
b1c0: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
b1d0: 49 54 45 5f 52 45 49 4e 44 45 58 22 7d 20 7b 0a  ITE_REINDEX"} {.
b1e0: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
b1f0: 67 73 20 5b 63 6f 6e 63 61 74 20 24 3a 3a 61 75  gs [concat $::au
b200: 74 68 61 72 67 73 20 24 61 72 67 73 5d 0a 20 20  thargs $args].  
b210: 7d 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54  }.  return SQLIT
b220: 45 5f 4f 4b 0a 7d 0a 64 62 20 61 75 74 68 6f 72  E_OK.}.db author
b230: 69 7a 65 72 20 61 75 74 68 0a 64 6f 5f 74 65 73  izer auth.do_tes
b240: 74 20 61 75 74 68 2d 31 2e 32 38 31 20 7b 0a 20  t auth-1.281 {. 
b250: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43   execsql {.    C
b260: 52 45 41 54 45 20 54 41 42 4c 45 20 74 33 28 61  REATE TABLE t3(a
b270: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 2c   PRIMARY KEY, b,
b280: 20 63 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20   c);.    CREATE 
b290: 49 4e 44 45 58 20 74 33 5f 69 64 78 31 20 4f 4e  INDEX t3_idx1 ON
b2a0: 20 74 33 28 63 20 43 4f 4c 4c 41 54 45 20 42 49   t3(c COLLATE BI
b2b0: 4e 41 52 59 29 3b 0a 20 20 20 20 43 52 45 41 54  NARY);.    CREAT
b2c0: 45 20 49 4e 44 45 58 20 74 33 5f 69 64 78 32 20  E INDEX t3_idx2 
b2d0: 4f 4e 20 74 33 28 62 20 43 4f 4c 4c 41 54 45 20  ON t3(b COLLATE 
b2e0: 4e 4f 43 41 53 45 29 3b 0a 20 20 7d 0a 7d 20 7b  NOCASE);.  }.} {
b2f0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
b300: 2e 32 38 32 20 7b 0a 20 20 73 65 74 20 3a 3a 61  .282 {.  set ::a
b310: 75 74 68 61 72 67 73 20 7b 7d 0a 20 20 65 78 65  uthargs {}.  exe
b320: 63 73 71 6c 20 7b 0a 20 20 20 20 52 45 49 4e 44  csql {.    REIND
b330: 45 58 20 74 33 5f 69 64 78 31 3b 0a 20 20 7d 0a  EX t3_idx1;.  }.
b340: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
b350: 0a 7d 20 7b 74 33 5f 69 64 78 31 20 7b 7d 20 6d  .} {t3_idx1 {} m
b360: 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20  ain {}}.do_test 
b370: 61 75 74 68 2d 31 2e 32 38 33 20 7b 0a 20 20 73  auth-1.283 {.  s
b380: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 7b 7d  et ::authargs {}
b390: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
b3a0: 20 52 45 49 4e 44 45 58 20 42 49 4e 41 52 59 3b   REINDEX BINARY;
b3b0: 0a 20 20 7d 0a 20 20 73 65 74 20 3a 3a 61 75 74  .  }.  set ::aut
b3c0: 68 61 72 67 73 0a 7d 20 7b 74 33 5f 69 64 78 31  hargs.} {t3_idx1
b3d0: 20 7b 7d 20 6d 61 69 6e 20 7b 7d 20 73 71 6c 69   {} main {} sqli
b3e0: 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 74 33 5f  te_autoindex_t3_
b3f0: 31 20 7b 7d 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f  1 {} main {}}.do
b400: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 38 34  _test auth-1.284
b410: 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61   {.  set ::autha
b420: 72 67 73 20 7b 7d 0a 20 20 65 78 65 63 73 71 6c  rgs {}.  execsql
b430: 20 7b 0a 20 20 20 20 52 45 49 4e 44 45 58 20 4e   {.    REINDEX N
b440: 4f 43 41 53 45 3b 0a 20 20 7d 0a 20 20 73 65 74  OCASE;.  }.  set
b450: 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 74   ::authargs.} {t
b460: 33 5f 69 64 78 32 20 7b 7d 20 6d 61 69 6e 20 7b  3_idx2 {} main {
b470: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
b480: 31 2e 32 38 35 20 7b 0a 20 20 73 65 74 20 3a 3a  1.285 {.  set ::
b490: 61 75 74 68 61 72 67 73 20 7b 7d 0a 20 20 65 78  authargs {}.  ex
b4a0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 52 45 49 4e  ecsql {.    REIN
b4b0: 44 45 58 20 74 33 3b 0a 20 20 7d 0a 20 20 73 65  DEX t3;.  }.  se
b4c0: 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b  t ::authargs.} {
b4d0: 74 33 5f 69 64 78 32 20 7b 7d 20 6d 61 69 6e 20  t3_idx2 {} main 
b4e0: 7b 7d 20 74 33 5f 69 64 78 31 20 7b 7d 20 6d 61  {} t3_idx1 {} ma
b4f0: 69 6e 20 7b 7d 20 73 71 6c 69 74 65 5f 61 75 74  in {} sqlite_aut
b500: 6f 69 6e 64 65 78 5f 74 33 5f 31 20 7b 7d 20 6d  oindex_t3_1 {} m
b510: 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20  ain {}}.do_test 
b520: 61 75 74 68 2d 31 2e 32 38 36 20 7b 0a 20 20 65  auth-1.286 {.  e
b530: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f  xecsql {.    DRO
b540: 50 20 54 41 42 4c 45 20 74 33 3b 0a 20 20 7d 0a  P TABLE t3;.  }.
b550: 7d 20 7b 7d 0a 69 66 63 61 70 61 62 6c 65 20 74  } {}.ifcapable t
b560: 65 6d 70 64 62 20 7b 0a 20 20 64 6f 5f 74 65 73  empdb {.  do_tes
b570: 74 20 61 75 74 68 2d 31 2e 32 38 37 20 7b 0a 20  t auth-1.287 {. 
b580: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
b590: 20 20 20 43 52 45 41 54 45 20 54 45 4d 50 20 54     CREATE TEMP T
b5a0: 41 42 4c 45 20 74 33 28 61 20 50 52 49 4d 41 52  ABLE t3(a PRIMAR
b5b0: 59 20 4b 45 59 2c 20 62 2c 20 63 29 3b 0a 20 20  Y KEY, b, c);.  
b5c0: 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58      CREATE INDEX
b5d0: 20 74 33 5f 69 64 78 31 20 4f 4e 20 74 33 28 63   t3_idx1 ON t3(c
b5e0: 20 43 4f 4c 4c 41 54 45 20 42 49 4e 41 52 59 29   COLLATE BINARY)
b5f0: 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 49  ;.      CREATE I
b600: 4e 44 45 58 20 74 33 5f 69 64 78 32 20 4f 4e 20  NDEX t3_idx2 ON 
b610: 74 33 28 62 20 43 4f 4c 4c 41 54 45 20 4e 4f 43  t3(b COLLATE NOC
b620: 41 53 45 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  ASE);.    }.  } 
b630: 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74  {}.  do_test aut
b640: 68 2d 31 2e 32 38 38 20 7b 0a 20 20 20 20 73 65  h-1.288 {.    se
b650: 74 20 3a 3a 61 75 74 68 61 72 67 73 20 7b 7d 0a  t ::authargs {}.
b660: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
b670: 20 20 20 20 52 45 49 4e 44 45 58 20 74 65 6d 70      REINDEX temp
b680: 2e 74 33 5f 69 64 78 31 3b 0a 20 20 20 20 7d 0a  .t3_idx1;.    }.
b690: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
b6a0: 67 73 0a 20 20 7d 20 7b 74 33 5f 69 64 78 31 20  gs.  } {t3_idx1 
b6b0: 7b 7d 20 74 65 6d 70 20 7b 7d 7d 0a 20 20 64 6f  {} temp {}}.  do
b6c0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 38 39  _test auth-1.289
b6d0: 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a 61 75 74   {.    set ::aut
b6e0: 68 61 72 67 73 20 7b 7d 0a 20 20 20 20 65 78 65  hargs {}.    exe
b6f0: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 52 45 49  csql {.      REI
b700: 4e 44 45 58 20 42 49 4e 41 52 59 3b 0a 20 20 20  NDEX BINARY;.   
b710: 20 7d 0a 20 20 20 20 73 65 74 20 3a 3a 61 75 74   }.    set ::aut
b720: 68 61 72 67 73 0a 20 20 7d 20 7b 74 33 5f 69 64  hargs.  } {t3_id
b730: 78 31 20 7b 7d 20 74 65 6d 70 20 7b 7d 20 73 71  x1 {} temp {} sq
b740: 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 74  lite_autoindex_t
b750: 33 5f 31 20 7b 7d 20 74 65 6d 70 20 7b 7d 7d 0a  3_1 {} temp {}}.
b760: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31    do_test auth-1
b770: 2e 32 39 30 20 7b 0a 20 20 20 20 73 65 74 20 3a  .290 {.    set :
b780: 3a 61 75 74 68 61 72 67 73 20 7b 7d 0a 20 20 20  :authargs {}.   
b790: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
b7a0: 20 52 45 49 4e 44 45 58 20 4e 4f 43 41 53 45 3b   REINDEX NOCASE;
b7b0: 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 74 20 3a  .    }.    set :
b7c0: 3a 61 75 74 68 61 72 67 73 0a 20 20 7d 20 7b 74  :authargs.  } {t
b7d0: 33 5f 69 64 78 32 20 7b 7d 20 74 65 6d 70 20 7b  3_idx2 {} temp {
b7e0: 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74  }}.  do_test aut
b7f0: 68 2d 31 2e 32 39 31 20 7b 0a 20 20 20 20 73 65  h-1.291 {.    se
b800: 74 20 3a 3a 61 75 74 68 61 72 67 73 20 7b 7d 0a  t ::authargs {}.
b810: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
b820: 20 20 20 20 52 45 49 4e 44 45 58 20 74 65 6d 70      REINDEX temp
b830: 2e 74 33 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73  .t3;.    }.    s
b840: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 20 20  et ::authargs.  
b850: 7d 20 7b 74 33 5f 69 64 78 32 20 7b 7d 20 74 65  } {t3_idx2 {} te
b860: 6d 70 20 7b 7d 20 74 33 5f 69 64 78 31 20 7b 7d  mp {} t3_idx1 {}
b870: 20 74 65 6d 70 20 7b 7d 20 73 71 6c 69 74 65 5f   temp {} sqlite_
b880: 61 75 74 6f 69 6e 64 65 78 5f 74 33 5f 31 20 7b  autoindex_t3_1 {
b890: 7d 20 74 65 6d 70 20 7b 7d 7d 0a 20 20 70 72 6f  } temp {}}.  pro
b8a0: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
b8b0: 73 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f  s} {.    if {$co
b8c0: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45 49 4e  de=="SQLITE_REIN
b8d0: 44 45 58 22 7d 20 7b 0a 20 20 20 20 20 20 73 65  DEX"} {.      se
b8e0: 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 63 6f  t ::authargs [co
b8f0: 6e 63 61 74 20 24 3a 3a 61 75 74 68 61 72 67 73  ncat $::authargs
b900: 20 24 61 72 67 73 5d 0a 20 20 20 20 20 20 72 65   $args].      re
b910: 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59  turn SQLITE_DENY
b920: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
b930: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
b940: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31    do_test auth-1
b950: 2e 32 39 32 20 7b 0a 20 20 20 20 73 65 74 20 3a  .292 {.    set :
b960: 3a 61 75 74 68 61 72 67 73 20 7b 7d 0a 20 20 20  :authargs {}.   
b970: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
b980: 20 20 52 45 49 4e 44 45 58 20 74 65 6d 70 2e 74    REINDEX temp.t
b990: 33 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 20  3;.    }.  } {1 
b9a0: 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d  {not authorized}
b9b0: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68  }.  do_test auth
b9c0: 2d 31 2e 32 39 33 20 7b 0a 20 20 20 20 65 78 65  -1.293 {.    exe
b9d0: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 44 52 4f  csql {.      DRO
b9e0: 50 20 54 41 42 4c 45 20 74 33 3b 0a 20 20 20 20  P TABLE t3;.    
b9f0: 7d 0a 20 20 7d 20 7b 7d 0a 7d 0a 0a 7d 20 3b 23  }.  } {}.}..} ;#
ba00: 20 69 66 63 61 70 61 62 6c 65 20 72 65 69 6e 64   ifcapable reind
ba10: 65 78 20 0a 0a 69 66 63 61 70 61 62 6c 65 20 61  ex ..ifcapable a
ba20: 6e 61 6c 79 7a 65 20 7b 0a 20 20 70 72 6f 63 20  nalyze {.  proc 
ba30: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 73 7d  auth {code args}
ba40: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
ba50: 3d 3d 22 53 51 4c 49 54 45 5f 41 4e 41 4c 59 5a  =="SQLITE_ANALYZ
ba60: 45 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20  E"} {.      set 
ba70: 3a 3a 61 75 74 68 61 72 67 73 20 5b 63 6f 6e 63  ::authargs [conc
ba80: 61 74 20 24 3a 3a 61 75 74 68 61 72 67 73 20 24  at $::authargs $
ba90: 61 72 67 73 5d 0a 20 20 20 20 7d 0a 20 20 20 20  args].    }.    
baa0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
bab0: 0a 20 20 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61  .  }.  do_test a
bac0: 75 74 68 2d 31 2e 32 39 34 20 7b 0a 20 20 20 20  uth-1.294 {.    
bad0: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 7b  set ::authargs {
bae0: 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  }.    execsql {.
baf0: 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42        CREATE TAB
bb00: 4c 45 20 74 34 28 61 2c 62 2c 63 29 3b 0a 20 20  LE t4(a,b,c);.  
bb10: 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58      CREATE INDEX
bb20: 20 74 34 69 31 20 4f 4e 20 74 34 28 61 29 3b 0a   t4i1 ON t4(a);.
bb30: 20 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44        CREATE IND
bb40: 45 58 20 74 34 69 32 20 4f 4e 20 74 34 28 62 2c  EX t4i2 ON t4(b,
bb50: 61 2c 63 29 3b 0a 20 20 20 20 20 20 49 4e 53 45  a,c);.      INSE
bb60: 52 54 20 49 4e 54 4f 20 74 34 20 56 41 4c 55 45  RT INTO t4 VALUE
bb70: 53 28 31 2c 32 2c 33 29 3b 0a 20 20 20 20 20 20  S(1,2,3);.      
bb80: 41 4e 41 4c 59 5a 45 3b 0a 20 20 20 20 7d 0a 20  ANALYZE;.    }. 
bb90: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
bba0: 73 0a 20 20 7d 20 7b 74 34 20 7b 7d 20 6d 61 69  s.  } {t4 {} mai
bbb0: 6e 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20  n {}}.  do_test 
bbc0: 61 75 74 68 2d 31 2e 32 39 35 20 7b 0a 20 20 20  auth-1.295 {.   
bbd0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
bbe0: 20 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29   SELECT count(*)
bbf0: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 73 74 61   FROM sqlite_sta
bc00: 74 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 32 0a  t1;.    }.  } 2.
bc10: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
bc20: 65 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 69 66  e args} {.    if
bc30: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
bc40: 5f 41 4e 41 4c 59 5a 45 22 7d 20 7b 0a 20 20 20  _ANALYZE"} {.   
bc50: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
bc60: 73 20 5b 63 6f 6e 63 61 74 20 24 3a 3a 61 75 74  s [concat $::aut
bc70: 68 61 72 67 73 20 24 61 72 67 73 5d 0a 20 20 20  hargs $args].   
bc80: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
bc90: 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20  _DENY.    }.    
bca0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
bcb0: 0a 20 20 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61  .  }.  do_test a
bcc0: 75 74 68 2d 31 2e 32 39 36 20 7b 0a 20 20 20 20  uth-1.296 {.    
bcd0: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 7b  set ::authargs {
bce0: 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b  }.    catchsql {
bcf0: 0a 20 20 20 20 20 20 41 4e 41 4c 59 5a 45 3b 0a  .      ANALYZE;.
bd00: 20 20 20 20 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f      }.  } {1 {no
bd10: 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 20  t authorized}}. 
bd20: 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e   do_test auth-1.
bd30: 32 39 37 20 7b 0a 20 20 20 20 65 78 65 63 73 71  297 {.    execsq
bd40: 6c 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54  l {.      SELECT
bd50: 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 73   count(*) FROM s
bd60: 71 6c 69 74 65 5f 73 74 61 74 31 3b 0a 20 20 20  qlite_stat1;.   
bd70: 20 7d 0a 20 20 7d 20 32 0a 7d 20 3b 23 20 69 66   }.  } 2.} ;# if
bd80: 63 61 70 61 62 6c 65 20 61 6e 61 6c 79 7a 65 0a  capable analyze.
bd90: 0a 0a 23 20 41 75 74 68 6f 72 69 7a 61 74 69 6f  ..# Authorizatio
bda0: 6e 20 66 6f 72 20 41 4c 54 45 52 20 54 41 42 4c  n for ALTER TABL
bdb0: 45 20 41 44 44 20 43 4f 4c 55 4d 4e 2e 0a 23 20  E ADD COLUMN..# 
bdc0: 54 68 65 73 65 20 74 65 73 74 73 20 61 72 65 20  These tests are 
bdd0: 6f 6d 69 74 74 65 64 20 69 66 20 74 68 65 20 6c  omitted if the l
bde0: 69 62 72 61 72 79 0a 23 20 77 61 73 20 62 75 69  ibrary.# was bui
bdf0: 6c 74 20 77 69 74 68 6f 75 74 20 41 4c 54 45 52  lt without ALTER
be00: 20 54 41 42 4c 45 20 73 75 70 70 6f 72 74 2e 0a   TABLE support..
be10: 69 66 63 61 70 61 62 6c 65 20 7b 61 6c 74 65 72  ifcapable {alter
be20: 74 61 62 6c 65 7d 20 7b 0a 20 20 64 6f 5f 74 65  table} {.  do_te
be30: 73 74 20 61 75 74 68 2d 31 2e 33 30 30 20 7b 0a  st auth-1.300 {.
be40: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 43 52 45      execsql {CRE
be50: 41 54 45 20 54 41 42 4c 45 20 74 35 28 78 29 7d  ATE TABLE t5(x)}
be60: 0a 20 20 20 20 70 72 6f 63 20 61 75 74 68 20 7b  .    proc auth {
be70: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
be80: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
be90: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
bea0: 4c 49 54 45 5f 41 4c 54 45 52 5f 54 41 42 4c 45  LITE_ALTER_TABLE
beb0: 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74  "} {.        set
bec0: 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73   ::authargs [lis
bed0: 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61  t $arg1 $arg2 $a
bee0: 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20  rg3 $arg4].     
bef0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
bf00: 5f 4f 4b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  _OK.      }.    
bf10: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
bf20: 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 74  OK.    }.    cat
bf30: 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20 41 4c  chsql {.      AL
bf40: 54 45 52 20 54 41 42 4c 45 20 74 35 20 41 44 44  TER TABLE t5 ADD
bf50: 20 43 4f 4c 55 4d 4e 20 6e 65 77 5f 63 6f 6c 5f   COLUMN new_col_
bf60: 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 30 20  1;.    }.  } {0 
bf70: 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75  {}}.  do_test au
bf80: 74 68 2d 31 2e 33 30 31 20 7b 0a 20 20 20 20 73  th-1.301 {.    s
bf90: 65 74 20 78 20 5b 65 78 65 63 73 71 6c 20 7b 53  et x [execsql {S
bfa0: 45 4c 45 43 54 20 73 71 6c 20 46 52 4f 4d 20 73  ELECT sql FROM s
bfb0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45  qlite_master WHE
bfc0: 52 45 20 6e 61 6d 65 3d 27 74 35 27 7d 5d 0a 20  RE name='t5'}]. 
bfd0: 20 20 20 72 65 67 65 78 70 20 6e 65 77 5f 63 6f     regexp new_co
bfe0: 6c 5f 31 20 24 78 0a 20 20 7d 20 7b 31 7d 0a 20  l_1 $x.  } {1}. 
bff0: 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e   do_test auth-1.
c000: 33 30 32 20 7b 0a 20 20 20 20 73 65 74 20 61 75  302 {.    set au
c010: 74 68 61 72 67 73 0a 20 20 7d 20 7b 6d 61 69 6e  thargs.  } {main
c020: 20 74 35 20 7b 7d 20 7b 7d 7d 0a 20 20 64 6f 5f   t5 {} {}}.  do_
c030: 74 65 73 74 20 61 75 74 68 2d 31 2e 33 30 33 20  test auth-1.303 
c040: 7b 0a 20 20 20 20 70 72 6f 63 20 61 75 74 68 20  {.    proc auth 
c050: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
c060: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
c070: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
c080: 51 4c 49 54 45 5f 41 4c 54 45 52 5f 54 41 42 4c  QLITE_ALTER_TABL
c090: 45 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65  E"} {.        se
c0a0: 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69  t ::authargs [li
c0b0: 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24  st $arg1 $arg2 $
c0c0: 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20  arg3 $arg4].    
c0d0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
c0e0: 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 20 20 7d  E_IGNORE.      }
c0f0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
c100: 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20  LITE_OK.    }.  
c110: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
c120: 20 20 20 41 4c 54 45 52 20 54 41 42 4c 45 20 74     ALTER TABLE t
c130: 35 20 41 44 44 20 43 4f 4c 55 4d 4e 20 6e 65 77  5 ADD COLUMN new
c140: 5f 63 6f 6c 5f 32 3b 0a 20 20 20 20 7d 0a 20 20  _col_2;.    }.  
c150: 7d 20 7b 30 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65  } {0 {}}.  do_te
c160: 73 74 20 61 75 74 68 2d 31 2e 33 30 34 20 7b 0a  st auth-1.304 {.
c170: 20 20 20 20 73 65 74 20 78 20 5b 65 78 65 63 73      set x [execs
c180: 71 6c 20 7b 53 45 4c 45 43 54 20 73 71 6c 20 46  ql {SELECT sql F
c190: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
c1a0: 72 20 57 48 45 52 45 20 6e 61 6d 65 3d 27 74 35  r WHERE name='t5
c1b0: 27 7d 5d 0a 20 20 20 20 72 65 67 65 78 70 20 6e  '}].    regexp n
c1c0: 65 77 5f 63 6f 6c 5f 32 20 24 78 0a 20 20 7d 20  ew_col_2 $x.  } 
c1d0: 7b 30 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75  {0}.  do_test au
c1e0: 74 68 2d 31 2e 33 30 35 20 7b 0a 20 20 20 20 73  th-1.305 {.    s
c1f0: 65 74 20 61 75 74 68 61 72 67 73 0a 20 20 7d 20  et authargs.  } 
c200: 7b 6d 61 69 6e 20 74 35 20 7b 7d 20 7b 7d 7d 0a  {main t5 {} {}}.
c210: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31    do_test auth-1
c220: 2e 33 30 36 20 7b 0a 20 20 20 20 70 72 6f 63 20  .306 {.    proc 
c230: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
c240: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
c250: 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64  {.      if {$cod
c260: 65 3d 3d 22 53 51 4c 49 54 45 5f 41 4c 54 45 52  e=="SQLITE_ALTER
c270: 5f 54 41 42 4c 45 22 7d 20 7b 0a 20 20 20 20 20  _TABLE"} {.     
c280: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
c290: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
c2a0: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
c2b0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
c2c0: 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20  SQLITE_DENY.    
c2d0: 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e    }.      return
c2e0: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d   SQLITE_OK.    }
c2f0: 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a  .    catchsql {.
c300: 20 20 20 20 20 20 41 4c 54 45 52 20 54 41 42 4c        ALTER TABL
c310: 45 20 74 35 20 41 44 44 20 43 4f 4c 55 4d 4e 20  E t5 ADD COLUMN 
c320: 6e 65 77 5f 63 6f 6c 5f 33 0a 20 20 20 20 7d 0a  new_col_3.    }.
c330: 20 20 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68    } {1 {not auth
c340: 6f 72 69 7a 65 64 7d 7d 0a 20 20 64 6f 5f 74 65  orized}}.  do_te
c350: 73 74 20 61 75 74 68 2d 31 2e 33 30 37 20 7b 0a  st auth-1.307 {.
c360: 20 20 20 20 73 65 74 20 78 20 5b 65 78 65 63 73      set x [execs
c370: 71 6c 20 7b 53 45 4c 45 43 54 20 73 71 6c 20 46  ql {SELECT sql F
c380: 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f  ROM sqlite_temp_
c390: 6d 61 73 74 65 72 20 57 48 45 52 45 20 74 79 70  master WHERE typ
c3a0: 65 3d 27 74 35 27 7d 5d 0a 20 20 20 20 72 65 67  e='t5'}].    reg
c3b0: 65 78 70 20 6e 65 77 5f 63 6f 6c 5f 33 20 24 78  exp new_col_3 $x
c3c0: 0a 20 20 7d 20 7b 30 7d 0a 0a 20 20 64 6f 5f 74  .  } {0}..  do_t
c3d0: 65 73 74 20 61 75 74 68 2d 31 2e 33 30 38 20 7b  est auth-1.308 {
c3e0: 0a 20 20 20 20 73 65 74 20 61 75 74 68 61 72 67  .    set autharg
c3f0: 73 0a 20 20 7d 20 7b 6d 61 69 6e 20 74 35 20 7b  s.  } {main t5 {
c400: 7d 20 7b 7d 7d 0a 20 20 65 78 65 63 73 71 6c 20  } {}}.  execsql 
c410: 7b 44 52 4f 50 20 54 41 42 4c 45 20 74 35 7d 0a  {DROP TABLE t5}.
c420: 7d 20 3b 23 20 69 66 63 61 70 61 62 6c 65 20 61  } ;# ifcapable a
c430: 6c 74 65 72 74 61 62 6c 65 0a 0a 64 6f 5f 74 65  ltertable..do_te
c440: 73 74 20 61 75 74 68 2d 32 2e 31 20 7b 0a 20 20  st auth-2.1 {.  
c450: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
c460: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
c470: 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg4} {.    if {$
c480: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45  code=="SQLITE_RE
c490: 41 44 22 20 26 26 20 24 61 72 67 31 3d 3d 22 74  AD" && $arg1=="t
c4a0: 33 22 20 26 26 20 24 61 72 67 32 3d 3d 22 78 22  3" && $arg2=="x"
c4b0: 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  } {.      return
c4c0: 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20   SQLITE_DENY.   
c4d0: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
c4e0: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 64 62  LITE_OK.  }.  db
c4f0: 20 61 75 74 68 6f 72 69 7a 65 72 20 3a 3a 61 75   authorizer ::au
c500: 74 68 0a 20 20 65 78 65 63 73 71 6c 20 7b 43 52  th.  execsql {CR
c510: 45 41 54 45 20 54 41 42 4c 45 20 74 33 28 78 20  EATE TABLE t3(x 
c520: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
c530: 4b 45 59 2c 20 79 2c 20 7a 29 7d 0a 20 20 63 61  KEY, y, z)}.  ca
c540: 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a  tchsql {SELECT *
c550: 20 46 52 4f 4d 20 74 33 7d 0a 7d 20 7b 31 20 7b   FROM t3}.} {1 {
c560: 61 63 63 65 73 73 20 74 6f 20 74 33 2e 78 20 69  access to t3.x i
c570: 73 20 70 72 6f 68 69 62 69 74 65 64 7d 7d 0a 64  s prohibited}}.d
c580: 6f 5f 74 65 73 74 20 61 75 74 68 2d 32 2e 31 20  o_test auth-2.1 
c590: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 53 45  {.  catchsql {SE
c5a0: 4c 45 43 54 20 79 2c 7a 20 46 52 4f 4d 20 74 33  LECT y,z FROM t3
c5b0: 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  }.} {0 {}}.do_te
c5c0: 73 74 20 61 75 74 68 2d 32 2e 32 20 7b 0a 20 20  st auth-2.2 {.  
c5d0: 63 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54  catchsql {SELECT
c5e0: 20 52 4f 57 49 44 2c 79 2c 7a 20 46 52 4f 4d 20   ROWID,y,z FROM 
c5f0: 74 33 7d 0a 7d 20 7b 31 20 7b 61 63 63 65 73 73  t3}.} {1 {access
c600: 20 74 6f 20 74 33 2e 78 20 69 73 20 70 72 6f 68   to t3.x is proh
c610: 69 62 69 74 65 64 7d 7d 0a 64 6f 5f 74 65 73 74  ibited}}.do_test
c620: 20 61 75 74 68 2d 32 2e 33 20 7b 0a 20 20 63 61   auth-2.3 {.  ca
c630: 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 4f  tchsql {SELECT O
c640: 49 44 2c 79 2c 7a 20 46 52 4f 4d 20 74 33 7d 0a  ID,y,z FROM t3}.
c650: 7d 20 7b 31 20 7b 61 63 63 65 73 73 20 74 6f 20  } {1 {access to 
c660: 74 33 2e 78 20 69 73 20 70 72 6f 68 69 62 69 74  t3.x is prohibit
c670: 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  ed}}.do_test aut
c680: 68 2d 32 2e 34 20 7b 0a 20 20 70 72 6f 63 20 61  h-2.4 {.  proc a
c690: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
c6a0: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
c6b0: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
c6c0: 22 53 51 4c 49 54 45 5f 52 45 41 44 22 20 26 26  "SQLITE_READ" &&
c6d0: 20 24 61 72 67 31 3d 3d 22 74 33 22 20 26 26 20   $arg1=="t3" && 
c6e0: 24 61 72 67 32 3d 3d 22 78 22 7d 20 7b 0a 20 20  $arg2=="x"} {.  
c6f0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
c700: 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20  E_IGNORE.    }. 
c710: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
c720: 5f 4f 4b 0a 20 20 7d 0a 20 20 65 78 65 63 73 71  _OK.  }.  execsq
c730: 6c 20 7b 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  l {INSERT INTO t
c740: 33 20 56 41 4c 55 45 53 28 34 34 2c 35 35 2c 36  3 VALUES(44,55,6
c750: 36 29 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  6)}.  catchsql {
c760: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33  SELECT * FROM t3
c770: 7d 0a 7d 20 7b 30 20 7b 7b 7d 20 35 35 20 36 36  }.} {0 {{} 55 66
c780: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
c790: 32 2e 35 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  2.5 {.  catchsql
c7a0: 20 7b 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 79   {SELECT rowid,y
c7b0: 2c 7a 20 46 52 4f 4d 20 74 33 7d 0a 7d 20 7b 30  ,z FROM t3}.} {0
c7c0: 20 7b 7b 7d 20 35 35 20 36 36 7d 7d 0a 64 6f 5f   {{} 55 66}}.do_
c7d0: 74 65 73 74 20 61 75 74 68 2d 32 2e 36 20 7b 0a  test auth-2.6 {.
c7e0: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
c7f0: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
c800: 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20   arg4} {.    if 
c810: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
c820: 52 45 41 44 22 20 26 26 20 24 61 72 67 31 3d 3d  READ" && $arg1==
c830: 22 74 33 22 20 26 26 20 24 61 72 67 32 3d 3d 22  "t3" && $arg2=="
c840: 52 4f 57 49 44 22 7d 20 7b 0a 20 20 20 20 20 20  ROWID"} {.      
c850: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47  return SQLITE_IG
c860: 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72  NORE.    }.    r
c870: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
c880: 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b    }.  catchsql {
c890: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33  SELECT * FROM t3
c8a0: 7d 0a 7d 20 7b 30 20 7b 34 34 20 35 35 20 36 36  }.} {0 {44 55 66
c8b0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
c8c0: 32 2e 37 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  2.7 {.  catchsql
c8d0: 20 7b 53 45 4c 45 43 54 20 52 4f 57 49 44 2c 79   {SELECT ROWID,y
c8e0: 2c 7a 20 46 52 4f 4d 20 74 33 7d 0a 7d 20 7b 30  ,z FROM t3}.} {0
c8f0: 20 7b 34 34 20 35 35 20 36 36 7d 7d 0a 64 6f 5f   {44 55 66}}.do_
c900: 74 65 73 74 20 61 75 74 68 2d 32 2e 38 20 7b 0a  test auth-2.8 {.
c910: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
c920: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
c930: 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20   arg4} {.    if 
c940: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
c950: 52 45 41 44 22 20 26 26 20 24 61 72 67 31 3d 3d  READ" && $arg1==
c960: 22 74 32 22 20 26 26 20 24 61 72 67 32 3d 3d 22  "t2" && $arg2=="
c970: 52 4f 57 49 44 22 7d 20 7b 0a 20 20 20 20 20 20  ROWID"} {.      
c980: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47  return SQLITE_IG
c990: 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72  NORE.    }.    r
c9a0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
c9b0: 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b    }.  catchsql {
c9c0: 53 45 4c 45 43 54 20 52 4f 57 49 44 2c 62 2c 63  SELECT ROWID,b,c
c9d0: 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 30 20 7b   FROM t2}.} {0 {
c9e0: 7b 7d 20 32 20 33 33 20 7b 7d 20 38 20 39 7d 7d  {} 2 33 {} 8 9}}
c9f0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 32 2e  .do_test auth-2.
ca00: 39 2e 31 20 7b 0a 20 20 23 20 57 65 20 68 61 76  9.1 {.  # We hav
ca10: 65 20 74 6f 20 66 6c 75 73 68 20 74 68 65 20 63  e to flush the c
ca20: 61 63 68 65 20 68 65 72 65 20 69 6e 20 63 61 73  ache here in cas
ca30: 65 20 74 68 65 20 54 63 6c 20 69 6e 74 65 72 66  e the Tcl interf
ca40: 61 63 65 20 74 72 69 65 73 20 74 6f 0a 20 20 23  ace tries to.  #
ca50: 20 72 65 75 73 65 20 61 20 73 74 61 74 65 6d 65   reuse a stateme
ca60: 6e 74 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68  nt compiled with
ca70: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
ca80: 5f 76 32 28 29 2e 20 49 6e 20 74 68 69 73 20 63  _v2(). In this c
ca90: 61 73 65 2c 0a 20 20 23 20 74 68 65 20 66 69 72  ase,.  # the fir
caa0: 73 74 20 65 72 72 6f 72 20 65 6e 63 6f 75 6e 74  st error encount
cab0: 65 72 65 64 20 69 73 20 61 6e 20 53 51 4c 49 54  ered is an SQLIT
cac0: 45 5f 53 43 48 45 4d 41 20 65 72 72 6f 72 2e 20  E_SCHEMA error. 
cad0: 54 68 65 6e 2c 20 77 68 65 6e 0a 20 20 23 20 74  Then, when.  # t
cae0: 72 79 69 6e 67 20 74 6f 20 72 65 63 6f 6d 70 69  rying to recompi
caf0: 6c 65 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  le the statement
cb00: 2c 20 74 68 65 20 61 75 74 68 6f 72 69 7a 61 74  , the authorizat
cb10: 69 6f 6e 20 65 72 72 6f 72 20 69 73 20 65 6e 63  ion error is enc
cb20: 6f 75 6e 74 65 72 65 64 2e 0a 20 20 23 20 49 66  ountered..  # If
cb30: 20 77 65 20 64 6f 20 6e 6f 74 20 66 6c 75 73 68   we do not flush
cb40: 20 74 68 65 20 63 61 63 68 65 2c 20 74 68 65 20   the cache, the 
cb50: 63 6f 72 72 65 63 74 20 65 72 72 6f 72 20 6d 65  correct error me
cb60: 73 73 61 67 65 20 69 73 20 72 65 74 75 72 6e 65  ssage is returne
cb70: 64 2c 20 62 75 74 0a 20 20 23 20 74 68 65 20 65  d, but.  # the e
cb80: 72 72 6f 72 20 63 6f 64 65 20 69 73 20 53 51 4c  rror code is SQL
cb90: 49 54 45 5f 53 43 48 45 4d 41 2c 20 6e 6f 74 20  ITE_SCHEMA, not 
cba0: 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 61 73 20  SQLITE_ERROR as 
cbb0: 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20  required by the 
cbc0: 74 65 73 74 0a 20 20 23 20 63 61 73 65 20 61 66  test.  # case af
cbd0: 74 65 72 20 74 68 69 73 20 6f 6e 65 2e 0a 20 20  ter this one..  
cbe0: 23 0a 20 20 64 62 20 63 61 63 68 65 20 66 6c 75  #.  db cache flu
cbf0: 73 68 0a 0a 20 20 70 72 6f 63 20 61 75 74 68 20  sh..  proc auth 
cc00: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
cc10: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
cc20: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
cc30: 49 54 45 5f 52 45 41 44 22 20 26 26 20 24 61 72  ITE_READ" && $ar
cc40: 67 31 3d 3d 22 74 32 22 20 26 26 20 24 61 72 67  g1=="t2" && $arg
cc50: 32 3d 3d 22 52 4f 57 49 44 22 7d 20 7b 0a 20 20  2=="ROWID"} {.  
cc60: 20 20 20 20 72 65 74 75 72 6e 20 62 6f 67 75 73      return bogus
cc70: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
cc80: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
cc90: 20 20 63 61 74 63 68 73 71 6c 20 7b 53 45 4c 45    catchsql {SELE
cca0: 43 54 20 52 4f 57 49 44 2c 62 2c 63 20 46 52 4f  CT ROWID,b,c FRO
ccb0: 4d 20 74 32 7d 0a 7d 20 7b 31 20 7b 61 75 74 68  M t2}.} {1 {auth
ccc0: 6f 72 69 7a 65 72 20 6d 61 6c 66 75 6e 63 74 69  orizer malfuncti
ccd0: 6f 6e 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  on}}.do_test aut
cce0: 68 2d 32 2e 39 2e 32 20 7b 0a 20 20 64 62 20 65  h-2.9.2 {.  db e
ccf0: 72 72 6f 72 63 6f 64 65 0a 7d 20 7b 31 7d 0a 64  rrorcode.} {1}.d
cd00: 6f 5f 74 65 73 74 20 61 75 74 68 2d 32 2e 31 30  o_test auth-2.10
cd10: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
cd20: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
cd30: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
cd40: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
cd50: 54 45 5f 53 45 4c 45 43 54 22 7d 20 7b 0a 20 20  TE_SELECT"} {.  
cd60: 20 20 20 20 72 65 74 75 72 6e 20 62 6f 67 75 73      return bogus
cd70: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
cd80: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
cd90: 20 20 63 61 74 63 68 73 71 6c 20 7b 53 45 4c 45    catchsql {SELE
cda0: 43 54 20 52 4f 57 49 44 2c 62 2c 63 20 46 52 4f  CT ROWID,b,c FRO
cdb0: 4d 20 74 32 7d 0a 7d 20 7b 31 20 7b 61 75 74 68  M t2}.} {1 {auth
cdc0: 6f 72 69 7a 65 72 20 6d 61 6c 66 75 6e 63 74 69  orizer malfuncti
cdd0: 6f 6e 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  on}}.do_test aut
cde0: 68 2d 32 2e 31 31 2e 31 20 7b 0a 20 20 70 72 6f  h-2.11.1 {.  pro
cdf0: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
ce00: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
ce10: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
ce20: 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45 41 44 22  e=="SQLITE_READ"
ce30: 20 26 26 20 24 61 72 67 32 3d 3d 22 61 22 7d 20   && $arg2=="a"} 
ce40: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  {.      return S
ce50: 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20  QLITE_IGNORE.   
ce60: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
ce70: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
ce80: 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a  tchsql {SELECT *
ce90: 20 46 52 4f 4d 20 74 32 2c 20 74 33 7d 0a 7d 20   FROM t2, t3}.} 
cea0: 7b 30 20 7b 7b 7d 20 32 20 33 33 20 34 34 20 35  {0 {{} 2 33 44 5
ceb0: 35 20 36 36 20 7b 7d 20 38 20 39 20 34 34 20 35  5 66 {} 8 9 44 5
cec0: 35 20 36 36 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  5 66}}.do_test a
ced0: 75 74 68 2d 32 2e 31 31 2e 32 20 7b 0a 20 20 70  uth-2.11.2 {.  p
cee0: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
cef0: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
cf00: 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g4} {.    if {$c
cf10: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45 41  ode=="SQLITE_REA
cf20: 44 22 20 26 26 20 24 61 72 67 32 3d 3d 22 78 22  D" && $arg2=="x"
cf30: 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  } {.      return
cf40: 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20   SQLITE_IGNORE. 
cf50: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
cf60: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
cf70: 63 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54  catchsql {SELECT
cf80: 20 2a 20 46 52 4f 4d 20 74 32 2c 20 74 33 7d 0a   * FROM t2, t3}.
cf90: 7d 20 7b 30 20 7b 31 31 20 32 20 33 33 20 7b 7d  } {0 {11 2 33 {}
cfa0: 20 35 35 20 36 36 20 37 20 38 20 39 20 7b 7d 20   55 66 7 8 9 {} 
cfb0: 35 35 20 36 36 7d 7d 0a 0a 23 20 4d 61 6b 65 20  55 66}}..# Make 
cfc0: 73 75 72 65 20 74 68 65 20 4f 4c 44 20 61 6e 64  sure the OLD and
cfd0: 20 4e 45 57 20 70 73 65 75 64 6f 2d 74 61 62 6c   NEW pseudo-tabl
cfe0: 65 73 20 6f 66 20 61 20 74 72 69 67 67 65 72 20  es of a trigger 
cff0: 67 65 74 20 61 75 74 68 6f 72 69 7a 65 64 2e 0a  get authorized..
d000: 23 0a 69 66 63 61 70 61 62 6c 65 20 74 72 69 67  #.ifcapable trig
d010: 67 65 72 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  ger {.  do_test 
d020: 61 75 74 68 2d 33 2e 31 20 7b 0a 20 20 20 20 70  auth-3.1 {.    p
d030: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
d040: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
d050: 67 34 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75  g4} {.      retu
d060: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20  rn SQLITE_OK.   
d070: 20 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   }.    execsql {
d080: 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41  .      CREATE TA
d090: 42 4c 45 20 74 78 28 61 31 2c 61 32 2c 62 31 2c  BLE tx(a1,a2,b1,
d0a0: 62 32 2c 63 31 2c 63 32 29 3b 0a 20 20 20 20 20  b2,c1,c2);.     
d0b0: 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20   CREATE TRIGGER 
d0c0: 72 31 20 41 46 54 45 52 20 55 50 44 41 54 45 20  r1 AFTER UPDATE 
d0d0: 4f 4e 20 74 32 20 46 4f 52 20 45 41 43 48 20 52  ON t2 FOR EACH R
d0e0: 4f 57 20 42 45 47 49 4e 0a 20 20 20 20 20 20 20  OW BEGIN.       
d0f0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 78 20   INSERT INTO tx 
d100: 56 41 4c 55 45 53 28 4f 4c 44 2e 61 2c 4e 45 57  VALUES(OLD.a,NEW
d110: 2e 61 2c 4f 4c 44 2e 62 2c 4e 45 57 2e 62 2c 4f  .a,OLD.b,NEW.b,O
d120: 4c 44 2e 63 2c 4e 45 57 2e 63 29 3b 0a 20 20 20  LD.c,NEW.c);.   
d130: 20 20 20 45 4e 44 3b 0a 20 20 20 20 20 20 55 50     END;.      UP
d140: 44 41 54 45 20 74 32 20 53 45 54 20 61 3d 61 2b  DATE t2 SET a=a+
d150: 31 3b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20  1;.      SELECT 
d160: 2a 20 46 52 4f 4d 20 74 78 3b 0a 20 20 20 20 7d  * FROM tx;.    }
d170: 0a 20 20 7d 20 7b 31 31 20 31 32 20 32 20 32 20  .  } {11 12 2 2 
d180: 33 33 20 33 33 20 37 20 38 20 38 20 38 20 39 20  33 33 7 8 8 8 9 
d190: 39 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74  9}.  do_test aut
d1a0: 68 2d 33 2e 32 20 7b 0a 20 20 20 20 70 72 6f 63  h-3.2 {.    proc
d1b0: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
d1c0: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
d1d0: 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f   {.      if {$co
d1e0: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45 41 44  de=="SQLITE_READ
d1f0: 22 20 26 26 20 24 61 72 67 31 3d 3d 22 74 32 22  " && $arg1=="t2"
d200: 20 26 26 20 24 61 72 67 32 3d 3d 22 63 22 7d 20   && $arg2=="c"} 
d210: 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  {.        return
d220: 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20   SQLITE_IGNORE. 
d230: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74       }.      ret
d240: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
d250: 20 20 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20    }.    execsql 
d260: 7b 0a 20 20 20 20 20 20 44 45 4c 45 54 45 20 46  {.      DELETE F
d270: 52 4f 4d 20 74 78 3b 0a 20 20 20 20 20 20 55 50  ROM tx;.      UP
d280: 44 41 54 45 20 74 32 20 53 45 54 20 61 3d 61 2b  DATE t2 SET a=a+
d290: 31 30 30 3b 0a 20 20 20 20 20 20 53 45 4c 45 43  100;.      SELEC
d2a0: 54 20 2a 20 46 52 4f 4d 20 74 78 3b 0a 20 20 20  T * FROM tx;.   
d2b0: 20 7d 0a 20 20 7d 20 7b 31 32 20 31 31 32 20 32   }.  } {12 112 2
d2c0: 20 32 20 7b 7d 20 7b 7d 20 38 20 31 30 38 20 38   2 {} {} 8 108 8
d2d0: 20 38 20 7b 7d 20 7b 7d 7d 0a 7d 20 3b 23 20 69   8 {} {}}.} ;# i
d2e0: 66 63 61 70 61 62 6c 65 20 74 72 69 67 67 65 72  fcapable trigger
d2f0: 0a 0a 23 20 4d 61 6b 65 20 73 75 72 65 20 74 68  ..# Make sure th
d300: 65 20 6e 61 6d 65 73 20 6f 66 20 76 69 65 77 73  e names of views
d310: 20 61 6e 64 20 74 72 69 67 67 65 72 73 20 61 72   and triggers ar
d320: 65 20 70 61 73 73 65 64 20 6f 6e 20 6f 6e 20 61  e passed on on a
d330: 72 67 34 2e 0a 23 0a 69 66 63 61 70 61 62 6c 65  rg4..#.ifcapable
d340: 20 74 72 69 67 67 65 72 20 7b 0a 64 6f 5f 74 65   trigger {.do_te
d350: 73 74 20 61 75 74 68 2d 34 2e 31 20 7b 0a 20 20  st auth-4.1 {.  
d360: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
d370: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
d380: 72 67 34 7d 20 7b 0a 20 20 20 20 6c 61 70 70 65  rg4} {.    lappe
d390: 6e 64 20 3a 3a 61 75 74 68 61 72 67 73 20 24 63  nd ::authargs $c
d3a0: 6f 64 65 20 24 61 72 67 31 20 24 61 72 67 32 20  ode $arg1 $arg2 
d3b0: 24 61 72 67 33 20 24 61 72 67 34 0a 20 20 20 20  $arg3 $arg4.    
d3c0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
d3d0: 0a 20 20 7d 0a 20 20 73 65 74 20 61 75 74 68 61  .  }.  set autha
d3e0: 72 67 73 20 7b 7d 0a 20 20 65 78 65 63 73 71 6c  rgs {}.  execsql
d3f0: 20 7b 0a 20 20 20 20 55 50 44 41 54 45 20 74 32   {.    UPDATE t2
d400: 20 53 45 54 20 61 3d 61 2b 31 3b 0a 20 20 7d 0a   SET a=a+1;.  }.
d410: 20 20 73 65 74 20 61 75 74 68 61 72 67 73 0a 7d    set authargs.}
d420: 20 5b 6c 69 73 74 20 5c 0a 20 20 53 51 4c 49 54   [list \.  SQLIT
d430: 45 5f 52 45 41 44 20 20 20 74 32 20 61 20 20 6d  E_READ   t2 a  m
d440: 61 69 6e 20 7b 7d 20 5c 0a 20 20 53 51 4c 49 54  ain {} \.  SQLIT
d450: 45 5f 55 50 44 41 54 45 20 74 32 20 61 20 20 6d  E_UPDATE t2 a  m
d460: 61 69 6e 20 7b 7d 20 5c 0a 20 20 53 51 4c 49 54  ain {} \.  SQLIT
d470: 45 5f 49 4e 53 45 52 54 20 74 78 20 7b 7d 20 6d  E_INSERT tx {} m
d480: 61 69 6e 20 72 31 20 5c 0a 20 20 53 51 4c 49 54  ain r1 \.  SQLIT
d490: 45 5f 52 45 41 44 20 20 20 74 32 20 61 20 20 6d  E_READ   t2 a  m
d4a0: 61 69 6e 20 72 31 20 5c 0a 20 20 53 51 4c 49 54  ain r1 \.  SQLIT
d4b0: 45 5f 52 45 41 44 20 20 20 74 32 20 61 20 20 6d  E_READ   t2 a  m
d4c0: 61 69 6e 20 72 31 20 5c 0a 20 20 53 51 4c 49 54  ain r1 \.  SQLIT
d4d0: 45 5f 52 45 41 44 20 20 20 74 32 20 62 20 20 6d  E_READ   t2 b  m
d4e0: 61 69 6e 20 72 31 20 5c 0a 20 20 53 51 4c 49 54  ain r1 \.  SQLIT
d4f0: 45 5f 52 45 41 44 20 20 20 74 32 20 62 20 20 6d  E_READ   t2 b  m
d500: 61 69 6e 20 72 31 20 5c 0a 20 20 53 51 4c 49 54  ain r1 \.  SQLIT
d510: 45 5f 52 45 41 44 20 20 20 74 32 20 63 20 20 6d  E_READ   t2 c  m
d520: 61 69 6e 20 72 31 20 5c 0a 20 20 53 51 4c 49 54  ain r1 \.  SQLIT
d530: 45 5f 52 45 41 44 20 20 20 74 32 20 63 20 20 6d  E_READ   t2 c  m
d540: 61 69 6e 20 72 31 5d 0a 7d 0a 0a 69 66 63 61 70  ain r1].}..ifcap
d550: 61 62 6c 65 20 7b 76 69 65 77 20 26 26 20 74 72  able {view && tr
d560: 69 67 67 65 72 7d 20 7b 0a 64 6f 5f 74 65 73 74  igger} {.do_test
d570: 20 61 75 74 68 2d 34 2e 32 20 7b 0a 20 20 65 78   auth-4.2 {.  ex
d580: 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41  ecsql {.    CREA
d590: 54 45 20 56 49 45 57 20 76 31 20 41 53 20 53 45  TE VIEW v1 AS SE
d5a0: 4c 45 43 54 20 61 2b 62 20 41 53 20 78 20 46 52  LECT a+b AS x FR
d5b0: 4f 4d 20 74 32 3b 0a 20 20 20 20 43 52 45 41 54  OM t2;.    CREAT
d5c0: 45 20 54 41 42 4c 45 20 76 31 63 68 6e 67 28 78  E TABLE v1chng(x
d5d0: 31 2c 78 32 29 3b 0a 20 20 20 20 43 52 45 41 54  1,x2);.    CREAT
d5e0: 45 20 54 52 49 47 47 45 52 20 72 32 20 49 4e 53  E TRIGGER r2 INS
d5f0: 54 45 41 44 20 4f 46 20 55 50 44 41 54 45 20 4f  TEAD OF UPDATE O
d600: 4e 20 76 31 20 42 45 47 49 4e 0a 20 20 20 20 20  N v1 BEGIN.     
d610: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 76 31 63   INSERT INTO v1c
d620: 68 6e 67 20 56 41 4c 55 45 53 28 4f 4c 44 2e 78  hng VALUES(OLD.x
d630: 2c 4e 45 57 2e 78 29 3b 0a 20 20 20 20 45 4e 44  ,NEW.x);.    END
d640: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ;.    SELECT * F
d650: 52 4f 4d 20 76 31 3b 0a 20 20 7d 0a 7d 20 7b 31  ROM v1;.  }.} {1
d660: 31 35 20 31 31 37 7d 0a 64 6f 5f 74 65 73 74 20  15 117}.do_test 
d670: 61 75 74 68 2d 34 2e 33 20 7b 0a 20 20 73 65 74  auth-4.3 {.  set
d680: 20 61 75 74 68 61 72 67 73 20 7b 7d 0a 20 20 65   authargs {}.  e
d690: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 55 50 44  xecsql {.    UPD
d6a0: 41 54 45 20 76 31 20 53 45 54 20 78 3d 31 20 57  ATE v1 SET x=1 W
d6b0: 48 45 52 45 20 78 3d 31 31 37 0a 20 20 7d 0a 20  HERE x=117.  }. 
d6c0: 20 73 65 74 20 61 75 74 68 61 72 67 73 0a 7d 20   set authargs.} 
d6d0: 5b 6c 69 73 74 20 5c 0a 20 20 53 51 4c 49 54 45  [list \.  SQLITE
d6e0: 5f 55 50 44 41 54 45 20 76 31 20 20 20 20 20 78  _UPDATE v1     x
d6f0: 20 20 6d 61 69 6e 20 7b 7d 20 5c 0a 20 20 53 51    main {} \.  SQ
d700: 4c 49 54 45 5f 53 45 4c 45 43 54 20 7b 7d 20 20  LITE_SELECT {}  
d710: 20 20 20 7b 7d 20 7b 7d 20 20 20 76 31 20 5c 0a     {} {}   v1 \.
d720: 20 20 53 51 4c 49 54 45 5f 52 45 41 44 20 20 20    SQLITE_READ   
d730: 74 32 20 20 20 20 20 61 20 20 6d 61 69 6e 20 76  t2     a  main v
d740: 31 20 5c 0a 20 20 53 51 4c 49 54 45 5f 52 45 41  1 \.  SQLITE_REA
d750: 44 20 20 20 74 32 20 20 20 20 20 62 20 20 6d 61  D   t2     b  ma
d760: 69 6e 20 76 31 20 5c 0a 20 20 53 51 4c 49 54 45  in v1 \.  SQLITE
d770: 5f 53 45 4c 45 43 54 20 7b 7d 20 20 20 20 20 7b  _SELECT {}     {
d780: 7d 20 7b 7d 20 20 20 7b 7d 20 5c 0a 20 20 53 51  } {}   {} \.  SQ
d790: 4c 49 54 45 5f 52 45 41 44 20 20 20 76 31 20 20  LITE_READ   v1  
d7a0: 20 20 20 78 20 20 6d 61 69 6e 20 76 31 20 5c 0a     x  main v1 \.
d7b0: 20 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 20    SQLITE_INSERT 
d7c0: 76 31 63 68 6e 67 20 7b 7d 20 6d 61 69 6e 20 72  v1chng {} main r
d7d0: 32 20 5c 0a 20 20 53 51 4c 49 54 45 5f 52 45 41  2 \.  SQLITE_REA
d7e0: 44 20 20 20 76 31 20 20 20 20 20 78 20 20 6d 61  D   v1     x  ma
d7f0: 69 6e 20 72 32 20 5c 0a 20 20 53 51 4c 49 54 45  in r2 \.  SQLITE
d800: 5f 52 45 41 44 20 20 20 76 31 20 20 20 20 20 78  _READ   v1     x
d810: 20 20 6d 61 69 6e 20 72 32 20 5c 0a 5d 0a 0a 64    main r2 \.]..d
d820: 6f 5f 74 65 73 74 20 61 75 74 68 2d 34 2e 34 20  o_test auth-4.4 
d830: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
d840: 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52    CREATE TRIGGER
d850: 20 72 33 20 49 4e 53 54 45 41 44 20 4f 46 20 44   r3 INSTEAD OF D
d860: 45 4c 45 54 45 20 4f 4e 20 76 31 20 42 45 47 49  ELETE ON v1 BEGI
d870: 4e 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49  N.      INSERT I
d880: 4e 54 4f 20 76 31 63 68 6e 67 20 56 41 4c 55 45  NTO v1chng VALUE
d890: 53 28 4f 4c 44 2e 78 2c 4e 55 4c 4c 29 3b 0a 20  S(OLD.x,NULL);. 
d8a0: 20 20 20 45 4e 44 3b 0a 20 20 20 20 53 45 4c 45     END;.    SELE
d8b0: 43 54 20 2a 20 46 52 4f 4d 20 76 31 3b 0a 20 20  CT * FROM v1;.  
d8c0: 7d 0a 7d 20 7b 31 31 35 20 31 31 37 7d 0a 64 6f  }.} {115 117}.do
d8d0: 5f 74 65 73 74 20 61 75 74 68 2d 34 2e 35 20 7b  _test auth-4.5 {
d8e0: 0a 20 20 73 65 74 20 61 75 74 68 61 72 67 73 20  .  set authargs 
d8f0: 7b 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  {}.  execsql {. 
d900: 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 76     DELETE FROM v
d910: 31 20 57 48 45 52 45 20 78 3d 31 31 37 0a 20 20  1 WHERE x=117.  
d920: 7d 0a 20 20 73 65 74 20 61 75 74 68 61 72 67 73  }.  set authargs
d930: 0a 7d 20 5b 6c 69 73 74 20 5c 0a 20 20 53 51 4c  .} [list \.  SQL
d940: 49 54 45 5f 44 45 4c 45 54 45 20 76 31 20 20 20  ITE_DELETE v1   
d950: 20 20 7b 7d 20 6d 61 69 6e 20 7b 7d 20 5c 0a 20    {} main {} \. 
d960: 20 53 51 4c 49 54 45 5f 53 45 4c 45 43 54 20 7b   SQLITE_SELECT {
d970: 7d 20 20 20 20 20 7b 7d 20 7b 7d 20 20 20 76 31  }     {} {}   v1
d980: 20 5c 0a 20 20 53 51 4c 49 54 45 5f 52 45 41 44   \.  SQLITE_READ
d990: 20 20 20 74 32 20 20 20 20 20 61 20 20 6d 61 69     t2     a  mai
d9a0: 6e 20 76 31 20 5c 0a 20 20 53 51 4c 49 54 45 5f  n v1 \.  SQLITE_
d9b0: 52 45 41 44 20 20 20 74 32 20 20 20 20 20 62 20  READ   t2     b 
d9c0: 20 6d 61 69 6e 20 76 31 20 5c 0a 20 20 53 51 4c   main v1 \.  SQL
d9d0: 49 54 45 5f 53 45 4c 45 43 54 20 7b 7d 20 20 20  ITE_SELECT {}   
d9e0: 20 20 7b 7d 20 7b 7d 20 20 20 7b 7d 20 5c 0a 20    {} {}   {} \. 
d9f0: 20 53 51 4c 49 54 45 5f 52 45 41 44 20 20 20 76   SQLITE_READ   v
da00: 31 20 20 20 20 20 78 20 20 6d 61 69 6e 20 76 31  1     x  main v1
da10: 20 5c 0a 20 20 53 51 4c 49 54 45 5f 49 4e 53 45   \.  SQLITE_INSE
da20: 52 54 20 76 31 63 68 6e 67 20 7b 7d 20 6d 61 69  RT v1chng {} mai
da30: 6e 20 72 33 20 5c 0a 20 20 53 51 4c 49 54 45 5f  n r3 \.  SQLITE_
da40: 52 45 41 44 20 20 20 76 31 20 20 20 20 20 78 20  READ   v1     x 
da50: 20 6d 61 69 6e 20 72 33 20 5c 0a 5d 0a 0a 7d 20   main r3 \.]..} 
da60: 3b 23 20 69 66 63 61 70 61 62 6c 65 20 76 69 65  ;# ifcapable vie
da70: 77 20 26 26 20 74 72 69 67 67 65 72 0a 0a 23 20  w && trigger..# 
da80: 54 69 63 6b 65 74 20 23 31 33 33 38 3a 20 20 4d  Ticket #1338:  M
da90: 61 6b 65 20 73 75 72 65 20 61 75 74 68 65 6e 74  ake sure authent
daa0: 69 63 61 74 69 6f 6e 20 77 6f 72 6b 73 20 69 6e  ication works in
dab0: 20 74 68 65 20 70 72 65 73 65 6e 63 65 20 6f 66   the presence of
dac0: 20 61 6e 20 41 53 0a 23 20 63 6c 61 75 73 65 2e   an AS.# clause.
dad0: 0a 23 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  .#.do_test auth-
dae0: 35 2e 31 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  5.1 {.  proc aut
daf0: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
db00: 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20  2 arg3 arg4} {. 
db10: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
db20: 5f 4f 4b 0a 20 20 7d 0a 20 20 65 78 65 63 73 71  _OK.  }.  execsq
db30: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 63  l {.    SELECT c
db40: 6f 75 6e 74 28 61 29 20 41 53 20 63 6e 74 20 46  ount(a) AS cnt F
db50: 52 4f 4d 20 74 34 20 4f 52 44 45 52 20 42 59 20  ROM t4 ORDER BY 
db60: 63 6e 74 0a 20 20 7d 0a 7d 20 7b 31 7d 0a 0a 23  cnt.  }.} {1}..#
db70: 20 54 69 63 6b 65 74 20 23 31 36 30 37 0a 23 0a   Ticket #1607.#.
db80: 69 66 63 61 70 61 62 6c 65 20 63 6f 6d 70 6f 75  ifcapable compou
db90: 6e 64 26 26 73 75 62 71 75 65 72 79 20 7b 0a 20  nd&&subquery {. 
dba0: 20 69 66 63 61 70 61 62 6c 65 20 74 72 69 67 67   ifcapable trigg
dbb0: 65 72 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  er {.    execsql
dbc0: 20 7b 0a 20 20 20 20 20 20 44 52 4f 50 20 54 41   {.      DROP TA
dbd0: 42 4c 45 20 74 78 3b 0a 20 20 20 20 7d 0a 20 20  BLE tx;.    }.  
dbe0: 20 20 69 66 63 61 70 61 62 6c 65 20 76 69 65 77    ifcapable view
dbf0: 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c   {.      execsql
dc00: 20 7b 0a 20 20 20 20 20 20 20 20 44 52 4f 50 20   {.        DROP 
dc10: 54 41 42 4c 45 20 76 31 63 68 6e 67 3b 0a 20 20  TABLE v1chng;.  
dc20: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
dc30: 20 20 69 66 63 61 70 61 62 6c 65 20 73 74 61 74    ifcapable stat
dc40: 32 20 7b 0a 20 20 20 20 73 65 74 20 73 74 61 74  2 {.    set stat
dc50: 32 20 22 73 71 6c 69 74 65 5f 73 74 61 74 32 20  2 "sqlite_stat2 
dc60: 22 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20  ".  } else {.   
dc70: 20 73 65 74 20 73 74 61 74 32 20 22 22 0a 20 20   set stat2 "".  
dc80: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68  }.  do_test auth
dc90: 2d 35 2e 32 20 7b 0a 20 20 20 20 65 78 65 63 73  -5.2 {.    execs
dca0: 71 6c 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43  ql {.      SELEC
dcb0: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 28 0a 20 20  T name FROM (.  
dcc0: 20 20 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46        SELECT * F
dcd0: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
dce0: 72 20 55 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c 45  r UNION ALL SELE
dcf0: 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65  CT * FROM sqlite
dd00: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 29 0a 20 20  _temp_master).  
dd10: 20 20 20 20 57 48 45 52 45 20 74 79 70 65 3d 27      WHERE type='
dd20: 74 61 62 6c 65 27 0a 20 20 20 20 20 20 4f 52 44  table'.      ORD
dd30: 45 52 20 42 59 20 6e 61 6d 65 0a 20 20 20 20 7d  ER BY name.    }
dd40: 0a 20 20 7d 20 22 73 71 6c 69 74 65 5f 73 74 61  .  } "sqlite_sta
dd50: 74 31 20 24 7b 73 74 61 74 32 7d 74 31 20 74 32  t1 ${stat2}t1 t2
dd60: 20 74 33 20 74 34 22 0a 7d 0a 0a 23 20 54 69 63   t3 t4".}..# Tic
dd70: 6b 65 74 20 23 33 39 34 34 0a 23 0a 69 66 63 61  ket #3944.#.ifca
dd80: 70 61 62 6c 65 20 74 72 69 67 67 65 72 20 7b 0a  pable trigger {.
dd90: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 35    do_test auth-5
dda0: 2e 33 2e 31 20 7b 0a 20 20 20 20 65 78 65 63 73  .3.1 {.    execs
ddb0: 71 6c 20 7b 0a 20 20 20 20 20 20 43 52 45 41 54  ql {.      CREAT
ddc0: 45 20 54 41 42 4c 45 20 74 35 20 28 20 78 20 29  E TABLE t5 ( x )
ddd0: 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54  ;.      CREATE T
dde0: 52 49 47 47 45 52 20 74 35 5f 74 72 31 20 41 46  RIGGER t5_tr1 AF
ddf0: 54 45 52 20 49 4e 53 45 52 54 20 4f 4e 20 74 35  TER INSERT ON t5
de00: 20 42 45 47 49 4e 20 0a 20 20 20 20 20 20 20 20   BEGIN .        
de10: 55 50 44 41 54 45 20 74 35 20 53 45 54 20 78 20  UPDATE t5 SET x 
de20: 3d 20 31 20 57 48 45 52 45 20 4e 45 57 2e 78 20  = 1 WHERE NEW.x 
de30: 3d 20 30 3b 0a 20 20 20 20 20 20 45 4e 44 3b 0a  = 0;.      END;.
de40: 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 73      }.  } {}.  s
de50: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c  et ::authargs [l
de60: 69 73 74 5d 0a 20 20 70 72 6f 63 20 61 75 74 68  ist].  proc auth
de70: 20 7b 61 72 67 73 7d 20 7b 0a 20 20 20 20 65 76   {args} {.    ev
de80: 61 6c 20 6c 61 70 70 65 6e 64 20 3a 3a 61 75 74  al lappend ::aut
de90: 68 61 72 67 73 20 24 61 72 67 73 0a 20 20 20 20  hargs $args.    
dea0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
deb0: 0a 20 20 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61  .  }.  do_test a
dec0: 75 74 68 2d 35 2e 33 2e 32 20 7b 0a 20 20 20 20  uth-5.3.2 {.    
ded0: 65 78 65 63 73 71 6c 20 7b 20 49 4e 53 45 52 54  execsql { INSERT
dee0: 20 49 4e 54 4f 20 74 35 20 28 78 29 20 76 61 6c   INTO t5 (x) val
def0: 75 65 73 28 30 29 20 7d 0a 20 20 20 20 73 65 74  ues(0) }.    set
df00: 20 3a 3a 61 75 74 68 61 72 67 73 0a 20 20 7d 20   ::authargs.  } 
df10: 5b 6c 69 73 74 20 53 51 4c 49 54 45 5f 49 4e 53  [list SQLITE_INS
df20: 45 52 54 20 74 35 20 7b 7d 20 6d 61 69 6e 20 7b  ERT t5 {} main {
df30: 7d 20 20 20 20 5c 0a 20 20 20 20 20 20 20 20 20  }    \.         
df40: 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20 74   SQLITE_UPDATE t
df50: 35 20 78 20 6d 61 69 6e 20 74 35 5f 74 72 31 20  5 x main t5_tr1 
df60: 5c 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c 49  \.          SQLI
df70: 54 45 5f 52 45 41 44 20 74 35 20 78 20 6d 61 69  TE_READ t5 x mai
df80: 6e 20 74 35 5f 74 72 31 20 20 20 5c 0a 20 20 20  n t5_tr1   \.   
df90: 20 5d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74   ].  do_test aut
dfa0: 68 2d 35 2e 33 2e 32 20 7b 0a 20 20 20 20 65 78  h-5.3.2 {.    ex
dfb0: 65 63 73 71 6c 20 7b 20 53 45 4c 45 43 54 20 2a  ecsql { SELECT *
dfc0: 20 46 52 4f 4d 20 74 35 20 7d 0a 20 20 7d 20 7b   FROM t5 }.  } {
dfd0: 31 7d 0a 7d 0a 0a 0a 72 65 6e 61 6d 65 20 70 72  1}.}...rename pr
dfe0: 6f 63 20 7b 7d 0a 72 65 6e 61 6d 65 20 70 72 6f  oc {}.rename pro
dff0: 63 5f 72 65 61 6c 20 70 72 6f 63 0a 0a 0a 66 69  c_real proc...fi
e000: 6e 69 73 68 5f 74 65 73 74 0a                    nish_test.