/ Hex Artifact Content
Login

Artifact 30149de6b78099ba06429fb7d6cc4dfcc1f4985c:


0000: 23 20 32 30 30 33 20 4a 61 6e 75 61 72 79 20 31  # 2003 January 1
0010: 32 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f 72  2.#.# The author
0020: 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79 72   disclaims copyr
0030: 69 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f 75  ight to this sou
0040: 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c  rce code.  In pl
0050: 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c  ace of.# a legal
0060: 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20 69 73   notice, here is
0070: 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23   a blessing:.#.#
0080: 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f 20 67      May you do g
0090: 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c  ood and not evil
00a0: 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 66  ..#    May you f
00b0: 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73 73 20  ind forgiveness 
00c0: 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61 6e 64  for yourself and
00d0: 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72 73 2e   forgive others.
00e0: 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 73 68  .#    May you sh
00f0: 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65 76 65  are freely, neve
0100: 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68  r taking more th
0110: 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23  an 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 2a 2a 2a 0a 23 20 54 68 69 73 20 66  *******.# This f
0170: 69 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 72  ile implements r
0180: 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73 20  egression tests 
0190: 66 6f 72 20 53 51 4c 69 74 65 20 6c 69 62 72 61  for SQLite libra
01a0: 72 79 2e 20 20 54 68 65 0a 23 20 66 6f 63 75 73  ry.  The.# focus
01b0: 20 6f 66 20 74 68 69 73 20 73 63 72 69 70 74 20   of this script 
01c0: 74 65 73 74 69 6e 67 20 74 68 65 20 73 71 6c 69  testing the sqli
01d0: 74 65 5f 73 65 74 5f 61 75 74 68 6f 72 69 7a 65  te_set_authorize
01e0: 72 28 29 20 41 50 49 2e 0a 23 0a 23 20 24 49 64  r() API..#.# $Id
01f0: 3a 20 61 75 74 68 2e 74 65 73 74 2c 76 20 31 2e  : auth.test,v 1.
0200: 33 20 32 30 30 33 2f 30 31 2f 31 34 20 30 32 3a  3 2003/01/14 02:
0210: 34 39 3a 32 38 20 64 72 68 20 45 78 70 20 24 0a  49:28 drh Exp $.
0220: 23 0a 0a 73 65 74 20 74 65 73 74 64 69 72 20 5b  #..set testdir [
0230: 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 61 72  file dirname $ar
0240: 67 76 30 5d 0a 73 6f 75 72 63 65 20 24 74 65 73  gv0].source $tes
0250: 74 64 69 72 2f 74 65 73 74 65 72 2e 74 63 6c 0a  tdir/tester.tcl.
0260: 0a 69 66 20 7b 5b 69 6e 66 6f 20 63 6f 6d 6d 61  .if {[info comma
0270: 6e 64 20 73 71 6c 69 74 65 5f 73 65 74 5f 61 75  nd sqlite_set_au
0280: 74 68 6f 72 69 7a 65 72 5d 21 3d 22 22 7d 20 7b  thorizer]!=""} {
0290: 0a 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  ..do_test auth-1
02a0: 2e 31 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a  .1 {.  db close.
02b0: 20 20 73 65 74 20 3a 3a 44 42 20 5b 73 71 6c 69    set ::DB [sqli
02c0: 74 65 20 64 62 20 74 65 73 74 2e 64 62 5d 0a 20  te db test.db]. 
02d0: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
02e0: 20 61 72 67 31 20 61 72 67 32 7d 20 7b 0a 20 20   arg1 arg2} {.  
02f0: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
0300: 4c 49 54 45 5f 49 4e 53 45 52 54 22 20 26 26 20  LITE_INSERT" && 
0310: 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 6d  $arg1=="sqlite_m
0320: 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20  aster"} {.      
0330: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45  return SQLITE_DE
0340: 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  NY.    }.    ret
0350: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
0360: 7d 0a 20 20 73 71 6c 69 74 65 5f 73 65 74 5f 61  }.  sqlite_set_a
0370: 75 74 68 6f 72 69 7a 65 72 20 24 3a 3a 44 42 20  uthorizer $::DB 
0380: 3a 3a 61 75 74 68 0a 20 20 63 61 74 63 68 73 71  ::auth.  catchsq
0390: 6c 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20  l {CREATE TABLE 
03a0: 74 31 28 61 2c 62 2c 63 29 7d 0a 7d 20 7b 31 20  t1(a,b,c)}.} {1 
03b0: 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d  {not authorized}
03c0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
03d0: 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .2 {.  execsql {
03e0: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
03f0: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a   sqlite_master}.
0400: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  } {}.do_test aut
0410: 68 2d 31 2e 33 2e 31 20 7b 0a 20 20 70 72 6f 63  h-1.3.1 {.  proc
0420: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
0430: 20 61 72 67 32 7d 20 7b 0a 20 20 20 20 69 66 20   arg2} {.    if 
0440: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
0450: 43 52 45 41 54 45 5f 54 41 42 4c 45 22 7d 20 7b  CREATE_TABLE"} {
0460: 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74  .      set ::aut
0470: 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67  hargs [list $arg
0480: 31 20 24 61 72 67 32 5d 0a 20 20 20 20 20 20 72  1 $arg2].      r
0490: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e  eturn SQLITE_DEN
04a0: 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  Y.    }.    retu
04b0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
04c0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45  .  catchsql {CRE
04d0: 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c 62  ATE TABLE t1(a,b
04e0: 2c 63 29 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61  ,c)}.} {1 {not a
04f0: 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74  uthorized}}.do_t
0500: 65 73 74 20 61 75 74 68 2d 31 2e 33 2e 32 20 7b  est auth-1.3.2 {
0510: 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67  .  set ::autharg
0520: 73 0a 7d 20 7b 74 31 20 7b 7d 7d 0a 64 6f 5f 74  s.} {t1 {}}.do_t
0530: 65 73 74 20 61 75 74 68 2d 31 2e 34 20 7b 0a 20  est auth-1.4 {. 
0540: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
0550: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
0560: 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 7d 0a 0a  e_master}.} {}..
0570: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 35  do_test auth-1.5
0580: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
0590: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 7d 20  code arg1 arg2} 
05a0: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
05b0: 3d 22 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 22  ="SQLITE_INSERT"
05c0: 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69   && $arg1=="sqli
05d0: 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 7d  te_temp_master"}
05e0: 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   {.      return 
05f0: 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20  SQLITE_DENY.    
0600: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
0610: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
0620: 63 68 73 71 6c 20 7b 43 52 45 41 54 45 20 54 45  chsql {CREATE TE
0630: 4d 50 20 54 41 42 4c 45 20 74 31 28 61 2c 62 2c  MP TABLE t1(a,b,
0640: 63 29 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75  c)}.} {1 {not au
0650: 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65  thorized}}.do_te
0660: 73 74 20 61 75 74 68 2d 31 2e 36 20 7b 0a 20 20  st auth-1.6 {.  
0670: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
0680: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
0690: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d 20  _temp_master}.} 
06a0: 7b 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  {}.do_test auth-
06b0: 31 2e 37 2e 31 20 7b 0a 20 20 70 72 6f 63 20 61  1.7.1 {.  proc a
06c0: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
06d0: 72 67 32 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg2} {.    if {$
06e0: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52  code=="SQLITE_CR
06f0: 45 41 54 45 5f 54 45 4d 50 5f 54 41 42 4c 45 22  EATE_TEMP_TABLE"
0700: 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a  } {.      set ::
0710: 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24  authargs [list $
0720: 61 72 67 31 20 24 61 72 67 32 5d 0a 20 20 20 20  arg1 $arg2].    
0730: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
0740: 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72  DENY.    }.    r
0750: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
0760: 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b    }.  catchsql {
0770: 43 52 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c  CREATE TEMP TABL
0780: 45 20 74 31 28 61 2c 62 2c 63 29 7d 0a 7d 20 7b  E t1(a,b,c)}.} {
0790: 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65  1 {not authorize
07a0: 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  d}}.do_test auth
07b0: 2d 31 2e 37 2e 32 20 7b 0a 20 20 20 73 65 74 20  -1.7.2 {.   set 
07c0: 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 74 31  ::authargs.} {t1
07d0: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
07e0: 68 2d 31 2e 38 20 7b 0a 20 20 65 78 65 63 73 71  h-1.8 {.  execsq
07f0: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
0800: 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f  ROM sqlite_temp_
0810: 6d 61 73 74 65 72 7d 0a 7d 20 7b 7d 0a 0a 64 6f  master}.} {}..do
0820: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 39 20 7b  _test auth-1.9 {
0830: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
0840: 64 65 20 61 72 67 31 20 61 72 67 32 7d 20 7b 0a  de arg1 arg2} {.
0850: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
0860: 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 22 20 26  SQLITE_INSERT" &
0870: 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65  & $arg1=="sqlite
0880: 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20  _master"} {.    
0890: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
08a0: 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20  IGNORE.    }.   
08b0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
08c0: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
08d0: 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 74   {CREATE TABLE t
08e0: 31 28 61 2c 62 2c 63 29 7d 0a 7d 20 7b 30 20 7b  1(a,b,c)}.} {0 {
08f0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
0900: 31 2e 31 30 20 7b 0a 20 20 65 78 65 63 73 71 6c  1.10 {.  execsql
0910: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
0920: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
0930: 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 61  }.} {}.do_test a
0940: 75 74 68 2d 31 2e 31 31 20 7b 0a 20 20 70 72 6f  uth-1.11 {.  pro
0950: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
0960: 31 20 61 72 67 32 7d 20 7b 0a 20 20 20 20 69 66  1 arg2} {.    if
0970: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
0980: 5f 43 52 45 41 54 45 5f 54 41 42 4c 45 22 7d 20  _CREATE_TABLE"} 
0990: 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75  {.      set ::au
09a0: 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72  thargs [list $ar
09b0: 67 31 20 24 61 72 67 32 5d 0a 20 20 20 20 20 20  g1 $arg2].      
09c0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47  return SQLITE_IG
09d0: 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72  NORE.    }.    r
09e0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
09f0: 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b    }.  catchsql {
0a00: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
0a10: 61 2c 62 2c 63 29 7d 0a 7d 20 7b 30 20 7b 7d 7d  a,b,c)}.} {0 {}}
0a20: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
0a30: 31 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  12 {.  execsql {
0a40: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
0a50: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a   sqlite_master}.
0a60: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  } {}.do_test aut
0a70: 68 2d 31 2e 31 33 20 7b 0a 20 20 70 72 6f 63 20  h-1.13 {.  proc 
0a80: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
0a90: 61 72 67 32 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg2} {.    if {
0aa0: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 49  $code=="SQLITE_I
0ab0: 4e 53 45 52 54 22 20 26 26 20 24 61 72 67 31 3d  NSERT" && $arg1=
0ac0: 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  ="sqlite_temp_ma
0ad0: 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 72  ster"} {.      r
0ae0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e  eturn SQLITE_IGN
0af0: 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  ORE.    }.    re
0b00: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
0b10: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 43   }.  catchsql {C
0b20: 52 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45  REATE TEMP TABLE
0b30: 20 74 31 28 61 2c 62 2c 63 29 7d 0a 7d 20 7b 30   t1(a,b,c)}.} {0
0b40: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
0b50: 68 2d 31 2e 31 34 20 7b 0a 20 20 65 78 65 63 73  h-1.14 {.  execs
0b60: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
0b70: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70  FROM sqlite_temp
0b80: 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 7d 0a 64 6f  _master}.} {}.do
0b90: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 35 20  _test auth-1.15 
0ba0: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
0bb0: 6f 64 65 20 61 72 67 31 20 61 72 67 32 7d 20 7b  ode arg1 arg2} {
0bc0: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
0bd0: 22 53 51 4c 49 54 45 5f 43 52 45 41 54 45 5f 54  "SQLITE_CREATE_T
0be0: 45 4d 50 5f 54 41 42 4c 45 22 7d 20 7b 0a 20 20  EMP_TABLE"} {.  
0bf0: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
0c00: 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24  gs [list $arg1 $
0c10: 61 72 67 32 5d 0a 20 20 20 20 20 20 72 65 74 75  arg2].      retu
0c20: 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45  rn SQLITE_IGNORE
0c30: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
0c40: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
0c50: 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41    catchsql {CREA
0c60: 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 74 31  TE TEMP TABLE t1
0c70: 28 61 2c 62 2c 63 29 7d 0a 7d 20 7b 30 20 7b 7d  (a,b,c)}.} {0 {}
0c80: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
0c90: 2e 31 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .16 {.  execsql 
0ca0: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
0cb0: 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  M sqlite_temp_ma
0cc0: 73 74 65 72 7d 0a 7d 20 7b 7d 0a 0a 64 6f 5f 74  ster}.} {}..do_t
0cd0: 65 73 74 20 61 75 74 68 2d 31 2e 31 37 20 7b 0a  est auth-1.17 {.
0ce0: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
0cf0: 65 20 61 72 67 31 20 61 72 67 32 7d 20 7b 0a 20  e arg1 arg2} {. 
0d00: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
0d10: 51 4c 49 54 45 5f 43 52 45 41 54 45 5f 54 41 42  QLITE_CREATE_TAB
0d20: 4c 45 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74  LE"} {.      set
0d30: 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73   ::authargs [lis
0d40: 74 20 24 61 72 67 31 20 24 61 72 67 32 5d 0a 20  t $arg1 $arg2]. 
0d50: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
0d60: 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20  TE_DENY.    }.  
0d70: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
0d80: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
0d90: 6c 20 7b 43 52 45 41 54 45 20 54 45 4d 50 20 54  l {CREATE TEMP T
0da0: 41 42 4c 45 20 74 31 28 61 2c 62 2c 63 29 7d 0a  ABLE t1(a,b,c)}.
0db0: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
0dc0: 20 61 75 74 68 2d 31 2e 31 38 20 7b 0a 20 20 65   auth-1.18 {.  e
0dd0: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
0de0: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
0df0: 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b  temp_master}.} {
0e00: 74 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  t1}.do_test auth
0e10: 2d 31 2e 31 39 2e 31 20 7b 0a 20 20 73 65 74 20  -1.19.1 {.  set 
0e20: 3a 3a 61 75 74 68 61 72 67 73 20 7b 7d 0a 20 20  ::authargs {}.  
0e30: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
0e40: 61 72 67 31 20 61 72 67 32 7d 20 7b 0a 20 20 20  arg1 arg2} {.   
0e50: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
0e60: 49 54 45 5f 43 52 45 41 54 45 5f 54 45 4d 50 5f  ITE_CREATE_TEMP_
0e70: 54 41 42 4c 45 22 7d 20 7b 0a 20 20 20 20 20 20  TABLE"} {.      
0e80: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b  set ::authargs [
0e90: 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67 32  list $arg1 $arg2
0ea0: 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  ].      return S
0eb0: 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d  QLITE_DENY.    }
0ec0: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
0ed0: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
0ee0: 68 73 71 6c 20 7b 43 52 45 41 54 45 20 54 41 42  hsql {CREATE TAB
0ef0: 4c 45 20 74 32 28 61 2c 62 2c 63 29 7d 0a 7d 20  LE t2(a,b,c)}.} 
0f00: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  {0 {}}.do_test a
0f10: 75 74 68 2d 31 2e 31 39 2e 32 20 7b 0a 20 20 73  uth-1.19.2 {.  s
0f20: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20  et ::authargs.} 
0f30: 7b 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  {}.do_test auth-
0f40: 31 2e 32 30 20 7b 0a 20 20 65 78 65 63 73 71 6c  1.20 {.  execsql
0f50: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
0f60: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
0f70: 7d 0a 7d 20 7b 74 32 7d 0a 0a 64 6f 5f 74 65 73  }.} {t2}..do_tes
0f80: 74 20 61 75 74 68 2d 31 2e 32 31 2e 31 20 7b 0a  t auth-1.21.1 {.
0f90: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
0fa0: 65 20 61 72 67 31 20 61 72 67 32 7d 20 7b 0a 20  e arg1 arg2} {. 
0fb0: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
0fc0: 51 4c 49 54 45 5f 44 52 4f 50 5f 54 41 42 4c 45  QLITE_DROP_TABLE
0fd0: 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a  "} {.      set :
0fe0: 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20  :authargs [list 
0ff0: 24 61 72 67 31 20 24 61 72 67 32 5d 0a 20 20 20  $arg1 $arg2].   
1000: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
1010: 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20  _DENY.    }.    
1020: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
1030: 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20  .  }.  catchsql 
1040: 7b 44 52 4f 50 20 54 41 42 4c 45 20 74 32 7d 0a  {DROP TABLE t2}.
1050: 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72  } {1 {not author
1060: 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  ized}}.do_test a
1070: 75 74 68 2d 31 2e 32 31 2e 32 20 7b 0a 20 20 73  uth-1.21.2 {.  s
1080: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20  et ::authargs.} 
1090: 7b 74 32 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20  {t2 {}}.do_test 
10a0: 61 75 74 68 2d 31 2e 32 32 20 7b 0a 20 20 65 78  auth-1.22 {.  ex
10b0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61  ecsql {SELECT na
10c0: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  me FROM sqlite_m
10d0: 61 73 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a 64 6f  aster}.} {t2}.do
10e0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 33 2e  _test auth-1.23.
10f0: 31 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  1 {.  proc auth 
1100: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 7d  {code arg1 arg2}
1110: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
1120: 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f 50 5f 54  =="SQLITE_DROP_T
1130: 41 42 4c 45 22 7d 20 7b 0a 20 20 20 20 20 20 73  ABLE"} {.      s
1140: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c  et ::authargs [l
1150: 69 73 74 20 24 61 72 67 31 20 24 61 72 67 32 5d  ist $arg1 $arg2]
1160: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
1170: 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20  LITE_IGNORE.    
1180: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
1190: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
11a0: 63 68 73 71 6c 20 7b 44 52 4f 50 20 54 41 42 4c  chsql {DROP TABL
11b0: 45 20 74 32 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  E t2}.} {0 {}}.d
11c0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 33  o_test auth-1.23
11d0: 2e 32 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74  .2 {.  set ::aut
11e0: 68 61 72 67 73 0a 7d 20 7b 74 32 20 7b 7d 7d 0a  hargs.} {t2 {}}.
11f0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
1200: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  4 {.  execsql {S
1210: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
1220: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d  sqlite_master}.}
1230: 20 7b 74 32 7d 0a 0a 64 6f 5f 74 65 73 74 20 61   {t2}..do_test a
1240: 75 74 68 2d 31 2e 32 35 20 7b 0a 20 20 70 72 6f  uth-1.25 {.  pro
1250: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
1260: 31 20 61 72 67 32 7d 20 7b 0a 20 20 20 20 69 66  1 arg2} {.    if
1270: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
1280: 5f 44 52 4f 50 5f 54 45 4d 50 5f 54 41 42 4c 45  _DROP_TEMP_TABLE
1290: 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a  "} {.      set :
12a0: 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20  :authargs [list 
12b0: 24 61 72 67 31 20 24 61 72 67 32 5d 0a 20 20 20  $arg1 $arg2].   
12c0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
12d0: 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20  _DENY.    }.    
12e0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
12f0: 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20  .  }.  catchsql 
1300: 7b 44 52 4f 50 20 54 41 42 4c 45 20 74 31 7d 0a  {DROP TABLE t1}.
1310: 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72  } {1 {not author
1320: 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  ized}}.do_test a
1330: 75 74 68 2d 31 2e 32 36 20 7b 0a 20 20 65 78 65  uth-1.26 {.  exe
1340: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d  csql {SELECT nam
1350: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65  e FROM sqlite_te
1360: 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31  mp_master}.} {t1
1370: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
1380: 2e 32 37 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  .27 {.  proc aut
1390: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
13a0: 32 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f  2} {.    if {$co
13b0: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f 50  de=="SQLITE_DROP
13c0: 5f 54 45 4d 50 5f 54 41 42 4c 45 22 7d 20 7b 0a  _TEMP_TABLE"} {.
13d0: 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68        set ::auth
13e0: 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31  args [list $arg1
13f0: 20 24 61 72 67 32 5d 0a 20 20 20 20 20 20 72 65   $arg2].      re
1400: 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f  turn SQLITE_IGNO
1410: 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  RE.    }.    ret
1420: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
1430: 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52  }.  catchsql {DR
1440: 4f 50 20 54 41 42 4c 45 20 74 31 7d 0a 7d 20 7b  OP TABLE t1}.} {
1450: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  0 {}}.do_test au
1460: 74 68 2d 31 2e 32 38 20 7b 0a 20 20 65 78 65 63  th-1.28 {.  exec
1470: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
1480: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d   FROM sqlite_tem
1490: 70 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31 7d  p_master}.} {t1}
14a0: 0a 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  ..do_test auth-1
14b0: 2e 32 39 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  .29 {.  proc aut
14c0: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
14d0: 32 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f  2} {.    if {$co
14e0: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 49 4e 53 45  de=="SQLITE_INSE
14f0: 52 54 22 20 26 26 20 24 61 72 67 31 3d 3d 22 74  RT" && $arg1=="t
1500: 32 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75  2"} {.      retu
1510: 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20  rn SQLITE_DENY. 
1520: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
1530: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
1540: 63 61 74 63 68 73 71 6c 20 7b 49 4e 53 45 52 54  catchsql {INSERT
1550: 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28   INTO t2 VALUES(
1560: 31 2c 32 2c 33 29 7d 0a 7d 20 7b 31 20 7b 6e 6f  1,2,3)}.} {1 {no
1570: 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64  t authorized}}.d
1580: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 33 30  o_test auth-1.30
1590: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
15a0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d 0a  LECT * FROM t2}.
15b0: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  } {}.do_test aut
15c0: 68 2d 31 2e 33 31 20 7b 0a 20 20 70 72 6f 63 20  h-1.31 {.  proc 
15d0: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
15e0: 61 72 67 32 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg2} {.    if {
15f0: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 49  $code=="SQLITE_I
1600: 4e 53 45 52 54 22 20 26 26 20 24 61 72 67 31 3d  NSERT" && $arg1=
1610: 3d 22 74 32 22 7d 20 7b 0a 20 20 20 20 20 20 72  ="t2"} {.      r
1620: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e  eturn SQLITE_IGN
1630: 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  ORE.    }.    re
1640: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
1650: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 49   }.  catchsql {I
1660: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41  NSERT INTO t2 VA
1670: 4c 55 45 53 28 31 2c 32 2c 33 29 7d 0a 7d 20 7b  LUES(1,2,3)}.} {
1680: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  0 {}}.do_test au
1690: 74 68 2d 31 2e 33 32 20 7b 0a 20 20 65 78 65 63  th-1.32 {.  exec
16a0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52  sql {SELECT * FR
16b0: 4f 4d 20 74 32 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74  OM t2}.} {}.do_t
16c0: 65 73 74 20 61 75 74 68 2d 31 2e 33 33 20 7b 0a  est auth-1.33 {.
16d0: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
16e0: 65 20 61 72 67 31 20 61 72 67 32 7d 20 7b 0a 20  e arg1 arg2} {. 
16f0: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
1700: 51 4c 49 54 45 5f 49 4e 53 45 52 54 22 20 26 26  QLITE_INSERT" &&
1710: 20 24 61 72 67 31 3d 3d 22 74 31 22 7d 20 7b 0a   $arg1=="t1"} {.
1720: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
1730: 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d  ITE_IGNORE.    }
1740: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
1750: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
1760: 68 73 71 6c 20 7b 49 4e 53 45 52 54 20 49 4e 54  hsql {INSERT INT
1770: 4f 20 74 32 20 56 41 4c 55 45 53 28 31 2c 32 2c  O t2 VALUES(1,2,
1780: 33 29 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f  3)}.} {0 {}}.do_
1790: 74 65 73 74 20 61 75 74 68 2d 31 2e 33 34 20 7b  test auth-1.34 {
17a0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
17b0: 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d 0a 7d 20  CT * FROM t2}.} 
17c0: 7b 31 20 32 20 33 7d 0a 0a 64 6f 5f 74 65 73 74  {1 2 3}..do_test
17d0: 20 61 75 74 68 2d 31 2e 33 35 20 7b 0a 20 20 70   auth-1.35 {.  p
17e0: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
17f0: 72 67 31 20 61 72 67 32 7d 20 7b 0a 20 20 20 20  rg1 arg2} {.    
1800: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
1810: 54 45 5f 52 45 41 44 22 20 26 26 20 24 61 72 67  TE_READ" && $arg
1820: 31 3d 3d 22 74 32 22 20 26 26 20 24 61 72 67 32  1=="t2" && $arg2
1830: 3d 3d 22 62 22 7d 20 7b 0a 20 20 20 20 20 20 72  =="b"} {.      r
1840: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e  eturn SQLITE_DEN
1850: 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  Y.    }.    retu
1860: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
1870: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 53 45 4c  .  catchsql {SEL
1880: 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d 0a 7d  ECT * FROM t2}.}
1890: 20 7b 31 20 7b 61 63 63 65 73 73 20 74 6f 20 74   {1 {access to t
18a0: 32 2e 62 20 69 73 20 70 72 6f 68 69 62 69 74 65  2.b is prohibite
18b0: 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  d}}.do_test auth
18c0: 2d 31 2e 33 36 20 7b 0a 20 20 70 72 6f 63 20 61  -1.36 {.  proc a
18d0: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
18e0: 72 67 32 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg2} {.    if {$
18f0: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45  code=="SQLITE_RE
1900: 41 44 22 20 26 26 20 24 61 72 67 31 3d 3d 22 74  AD" && $arg1=="t
1910: 32 22 20 26 26 20 24 61 72 67 32 3d 3d 22 62 22  2" && $arg2=="b"
1920: 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  } {.      return
1930: 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20   SQLITE_IGNORE. 
1940: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
1950: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
1960: 63 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54  catchsql {SELECT
1970: 20 2a 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 30   * FROM t2}.} {0
1980: 20 7b 31 20 7b 7d 20 33 7d 7d 0a 64 6f 5f 74 65   {1 {} 3}}.do_te
1990: 73 74 20 61 75 74 68 2d 31 2e 33 37 20 7b 0a 20  st auth-1.37 {. 
19a0: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
19b0: 20 61 72 67 31 20 61 72 67 32 7d 20 7b 0a 20 20   arg1 arg2} {.  
19c0: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
19d0: 4c 49 54 45 5f 52 45 41 44 22 20 26 26 20 24 61  LITE_READ" && $a
19e0: 72 67 31 3d 3d 22 74 32 22 20 26 26 20 24 61 72  rg1=="t2" && $ar
19f0: 67 32 3d 3d 22 62 22 7d 20 7b 0a 20 20 20 20 20  g2=="b"} {.     
1a00: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49   return SQLITE_I
1a10: 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20  GNORE.    }.    
1a20: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
1a30: 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20  .  }.  catchsql 
1a40: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
1a50: 32 20 57 48 45 52 45 20 62 3d 32 7d 0a 7d 20 7b  2 WHERE b=2}.} {
1a60: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  0 {}}.do_test au
1a70: 74 68 2d 31 2e 33 38 20 7b 0a 20 20 70 72 6f 63  th-1.38 {.  proc
1a80: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
1a90: 20 61 72 67 32 7d 20 7b 0a 20 20 20 20 69 66 20   arg2} {.    if 
1aa0: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
1ab0: 52 45 41 44 22 20 26 26 20 24 61 72 67 31 3d 3d  READ" && $arg1==
1ac0: 22 74 32 22 20 26 26 20 24 61 72 67 32 3d 3d 22  "t2" && $arg2=="
1ad0: 61 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75  a"} {.      retu
1ae0: 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45  rn SQLITE_IGNORE
1af0: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
1b00: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
1b10: 20 20 63 61 74 63 68 73 71 6c 20 7b 53 45 4c 45    catchsql {SELE
1b20: 43 54 20 2a 20 46 52 4f 4d 20 74 32 20 57 48 45  CT * FROM t2 WHE
1b30: 52 45 20 62 3d 32 7d 0a 7d 20 7b 30 20 7b 7b 7d  RE b=2}.} {0 {{}
1b40: 20 32 20 33 7d 7d 0a 64 6f 5f 74 65 73 74 20 61   2 3}}.do_test a
1b50: 75 74 68 2d 31 2e 33 39 20 7b 0a 20 20 70 72 6f  uth-1.39 {.  pro
1b60: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
1b70: 31 20 61 72 67 32 7d 20 7b 0a 20 20 20 20 69 66  1 arg2} {.    if
1b80: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
1b90: 5f 52 45 41 44 22 20 26 26 20 24 61 72 67 31 3d  _READ" && $arg1=
1ba0: 3d 22 74 32 22 20 26 26 20 24 61 72 67 32 3d 3d  ="t2" && $arg2==
1bb0: 22 62 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74  "b"} {.      ret
1bc0: 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52  urn SQLITE_IGNOR
1bd0: 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  E.    }.    retu
1be0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
1bf0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 53 45 4c  .  catchsql {SEL
1c00: 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 20 57 48  ECT * FROM t2 WH
1c10: 45 52 45 20 62 20 49 53 20 4e 55 4c 4c 7d 0a 7d  ERE b IS NULL}.}
1c20: 20 7b 30 20 7b 31 20 7b 7d 20 33 7d 7d 0a 64 6f   {0 {1 {} 3}}.do
1c30: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 34 30 20  _test auth-1.40 
1c40: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
1c50: 6f 64 65 20 61 72 67 31 20 61 72 67 32 7d 20 7b  ode arg1 arg2} {
1c60: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
1c70: 22 53 51 4c 49 54 45 5f 52 45 41 44 22 20 26 26  "SQLITE_READ" &&
1c80: 20 24 61 72 67 31 3d 3d 22 74 32 22 20 26 26 20   $arg1=="t2" && 
1c90: 24 61 72 67 32 3d 3d 22 62 22 7d 20 7b 0a 20 20  $arg2=="b"} {.  
1ca0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
1cb0: 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20  E_DENY.    }.   
1cc0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
1cd0: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
1ce0: 20 7b 53 45 4c 45 43 54 20 61 2c 63 20 46 52 4f   {SELECT a,c FRO
1cf0: 4d 20 74 32 20 57 48 45 52 45 20 62 20 49 53 20  M t2 WHERE b IS 
1d00: 4e 55 4c 4c 7d 0a 7d 20 7b 31 20 7b 61 63 63 65  NULL}.} {1 {acce
1d10: 73 73 20 74 6f 20 74 32 2e 62 20 69 73 20 70 72  ss to t2.b is pr
1d20: 6f 68 69 62 69 74 65 64 7d 7d 0a 20 20 0a 64 6f  ohibited}}.  .do
1d30: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 34 31 20  _test auth-1.41 
1d40: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
1d50: 6f 64 65 20 61 72 67 31 20 61 72 67 32 7d 20 7b  ode arg1 arg2} {
1d60: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
1d70: 22 53 51 4c 49 54 45 5f 55 50 44 41 54 45 22 20  "SQLITE_UPDATE" 
1d80: 26 26 20 24 61 72 67 31 3d 3d 22 74 32 22 20 26  && $arg1=="t2" &
1d90: 26 20 24 61 72 67 32 3d 3d 22 62 22 7d 20 7b 0a  & $arg2=="b"} {.
1da0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
1db0: 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20  ITE_DENY.    }. 
1dc0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
1dd0: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
1de0: 71 6c 20 7b 55 50 44 41 54 45 20 74 32 20 53 45  ql {UPDATE t2 SE
1df0: 54 20 61 3d 31 31 7d 0a 7d 20 7b 30 20 7b 7d 7d  T a=11}.} {0 {}}
1e00: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
1e10: 34 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  42 {.  execsql {
1e20: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32  SELECT * FROM t2
1e30: 7d 0a 7d 20 7b 31 31 20 32 20 33 7d 0a 64 6f 5f  }.} {11 2 3}.do_
1e40: 74 65 73 74 20 61 75 74 68 2d 31 2e 34 33 20 7b  test auth-1.43 {
1e50: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
1e60: 64 65 20 61 72 67 31 20 61 72 67 32 7d 20 7b 0a  de arg1 arg2} {.
1e70: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
1e80: 53 51 4c 49 54 45 5f 55 50 44 41 54 45 22 20 26  SQLITE_UPDATE" &
1e90: 26 20 24 61 72 67 31 3d 3d 22 74 32 22 20 26 26  & $arg1=="t2" &&
1ea0: 20 24 61 72 67 32 3d 3d 22 62 22 7d 20 7b 0a 20   $arg2=="b"} {. 
1eb0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
1ec0: 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20  TE_DENY.    }.  
1ed0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
1ee0: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
1ef0: 6c 20 7b 55 50 44 41 54 45 20 74 32 20 53 45 54  l {UPDATE t2 SET
1f00: 20 62 3d 32 32 2c 20 63 3d 33 33 7d 0a 7d 20 7b   b=22, c=33}.} {
1f10: 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65  1 {not authorize
1f20: 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  d}}.do_test auth
1f30: 2d 31 2e 34 34 20 7b 0a 20 20 65 78 65 63 73 71  -1.44 {.  execsq
1f40: 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  l {SELECT * FROM
1f50: 20 74 32 7d 0a 7d 20 7b 31 31 20 32 20 33 7d 0a   t2}.} {11 2 3}.
1f60: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 34  do_test auth-1.4
1f70: 35 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  5 {.  proc auth 
1f80: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 7d  {code arg1 arg2}
1f90: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
1fa0: 3d 3d 22 53 51 4c 49 54 45 5f 55 50 44 41 54 45  =="SQLITE_UPDATE
1fb0: 22 20 26 26 20 24 61 72 67 31 3d 3d 22 74 32 22  " && $arg1=="t2"
1fc0: 20 26 26 20 24 61 72 67 32 3d 3d 22 62 22 7d 20   && $arg2=="b"} 
1fd0: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  {.      return S
1fe0: 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20  QLITE_IGNORE.   
1ff0: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
2000: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
2010: 74 63 68 73 71 6c 20 7b 55 50 44 41 54 45 20 74  tchsql {UPDATE t
2020: 32 20 53 45 54 20 62 3d 32 32 2c 20 63 3d 33 33  2 SET b=22, c=33
2030: 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  }.} {0 {}}.do_te
2040: 73 74 20 61 75 74 68 2d 31 2e 34 36 20 7b 0a 20  st auth-1.46 {. 
2050: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
2060: 20 2a 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31   * FROM t2}.} {1
2070: 31 20 32 20 33 33 7d 0a 0a 64 6f 5f 74 65 73 74  1 2 33}..do_test
2080: 20 61 75 74 68 2d 31 2e 34 37 20 7b 0a 20 20 70   auth-1.47 {.  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 7d 20 7b 0a 20 20 20 20  rg1 arg2} {.    
20b0: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
20c0: 54 45 5f 44 45 4c 45 54 45 22 20 26 26 20 24 61  TE_DELETE" && $a
20d0: 72 67 31 3d 3d 22 74 32 22 7d 20 7b 0a 20 20 20  rg1=="t2"} {.   
20e0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
20f0: 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20  _DENY.    }.    
2100: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
2110: 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20  .  }.  catchsql 
2120: 7b 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 32 20  {DELETE FROM t2 
2130: 57 48 45 52 45 20 61 3d 31 31 7d 0a 7d 20 7b 31  WHERE a=11}.} {1
2140: 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64   {not authorized
2150: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
2160: 31 2e 34 38 20 7b 0a 20 20 65 78 65 63 73 71 6c  1.48 {.  execsql
2170: 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   {SELECT * FROM 
2180: 74 32 7d 0a 7d 20 7b 31 31 20 32 20 33 33 7d 0a  t2}.} {11 2 33}.
2190: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 34  do_test auth-1.4
21a0: 39 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  9 {.  proc auth 
21b0: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 7d  {code arg1 arg2}
21c0: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
21d0: 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45 54 45  =="SQLITE_DELETE
21e0: 22 20 26 26 20 24 61 72 67 31 3d 3d 22 74 32 22  " && $arg1=="t2"
21f0: 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  } {.      return
2200: 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20   SQLITE_IGNORE. 
2210: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
2220: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
2230: 63 61 74 63 68 73 71 6c 20 7b 44 45 4c 45 54 45  catchsql {DELETE
2240: 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20 61   FROM t2 WHERE a
2250: 3d 31 31 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f  =11}.} {0 {}}.do
2260: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 35 30 20  _test auth-1.50 
2270: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
2280: 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d 0a 7d  ECT * FROM t2}.}
2290: 20 7b 31 31 20 32 20 33 33 7d 0a 0a 64 6f 5f 74   {11 2 33}..do_t
22a0: 65 73 74 20 61 75 74 68 2d 31 2e 35 31 20 7b 0a  est auth-1.51 {.
22b0: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
22c0: 65 20 61 72 67 31 20 61 72 67 32 7d 20 7b 0a 20  e arg1 arg2} {. 
22d0: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
22e0: 51 4c 49 54 45 5f 53 45 4c 45 43 54 22 7d 20 7b  QLITE_SELECT"} {
22f0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
2300: 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a  LITE_DENY.    }.
2310: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
2320: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
2330: 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52  sql {SELECT * FR
2340: 4f 4d 20 74 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74  OM t2}.} {1 {not
2350: 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f   authorized}}.do
2360: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 35 32 20  _test auth-1.52 
2370: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
2380: 6f 64 65 20 61 72 67 31 20 61 72 67 32 7d 20 7b  ode arg1 arg2} {
2390: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
23a0: 22 53 51 4c 49 54 45 5f 53 45 4c 45 43 54 22 7d  "SQLITE_SELECT"}
23b0: 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   {.      return 
23c0: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20  SQLITE_IGNORE.  
23d0: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
23e0: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
23f0: 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20  atchsql {SELECT 
2400: 2a 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 30 20  * FROM t2}.} {0 
2410: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
2420: 2d 31 2e 35 33 20 7b 0a 20 20 70 72 6f 63 20 61  -1.53 {.  proc a
2430: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
2440: 72 67 32 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg2} {.    if {$
2450: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 53 45  code=="SQLITE_SE
2460: 4c 45 43 54 22 7d 20 7b 0a 20 20 20 20 20 20 72  LECT"} {.      r
2470: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
2480: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
2490: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
24a0: 20 63 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43   catchsql {SELEC
24b0: 54 20 2a 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b  T * FROM t2}.} {
24c0: 30 20 7b 31 31 20 32 20 33 33 7d 7d 0a 0a 73 65  0 {11 2 33}}..se
24d0: 74 20 66 20 5b 6f 70 65 6e 20 64 61 74 61 31 2e  t f [open data1.
24e0: 74 78 74 20 77 5d 0a 70 75 74 73 20 24 66 20 22  txt w].puts $f "
24f0: 37 3a 38 3a 39 22 0a 63 6c 6f 73 65 20 24 66 0a  7:8:9".close $f.
2500: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 35  do_test auth-1.5
2510: 34 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  4 {.  proc auth 
2520: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 7d  {code arg1 arg2}
2530: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
2540: 3d 3d 22 53 51 4c 49 54 45 5f 43 4f 50 59 22 7d  =="SQLITE_COPY"}
2550: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61   {.      set ::a
2560: 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61  uthargs [list $a
2570: 72 67 31 20 24 61 72 67 32 5d 0a 20 20 20 20 20  rg1 $arg2].     
2580: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44   return SQLITE_D
2590: 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  ENY.    }.    re
25a0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
25b0: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 43   }.  catchsql {C
25c0: 4f 50 59 20 74 32 20 46 52 4f 4d 20 27 64 61 74  OPY t2 FROM 'dat
25d0: 61 31 2e 74 78 74 27 20 55 53 49 4e 47 20 44 45  a1.txt' USING DE
25e0: 4c 49 4d 49 54 45 52 53 20 27 3a 27 7d 0a 7d 20  LIMITERS ':'}.} 
25f0: 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a  {1 {not authoriz
2600: 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  ed}}.do_test aut
2610: 68 2d 31 2e 35 35 20 7b 0a 20 20 73 65 74 20 3a  h-1.55 {.  set :
2620: 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 74 32 20  :authargs.} {t2 
2630: 64 61 74 61 31 2e 74 78 74 7d 0a 64 6f 5f 74 65  data1.txt}.do_te
2640: 73 74 20 61 75 74 68 2d 31 2e 35 36 20 7b 0a 20  st auth-1.56 {. 
2650: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
2660: 20 2a 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31   * FROM t2}.} {1
2670: 31 20 32 20 33 33 7d 0a 64 6f 5f 74 65 73 74 20  1 2 33}.do_test 
2680: 61 75 74 68 2d 31 2e 35 37 20 7b 0a 20 20 70 72  auth-1.57 {.  pr
2690: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
26a0: 67 31 20 61 72 67 32 7d 20 7b 0a 20 20 20 20 69  g1 arg2} {.    i
26b0: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
26c0: 45 5f 43 4f 50 59 22 7d 20 7b 0a 20 20 20 20 20  E_COPY"} {.     
26d0: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
26e0: 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67  [list $arg1 $arg
26f0: 32 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  2].      return 
2700: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20  SQLITE_IGNORE.  
2710: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
2720: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
2730: 61 74 63 68 73 71 6c 20 7b 43 4f 50 59 20 74 32  atchsql {COPY t2
2740: 20 46 52 4f 4d 20 27 64 61 74 61 31 2e 74 78 74   FROM 'data1.txt
2750: 27 20 55 53 49 4e 47 20 44 45 4c 49 4d 49 54 45  ' USING DELIMITE
2760: 52 53 20 27 3a 27 7d 0a 7d 20 7b 30 20 7b 7d 7d  RS ':'}.} {0 {}}
2770: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
2780: 35 38 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74  58 {.  set ::aut
2790: 68 61 72 67 73 0a 7d 20 7b 74 32 20 64 61 74 61  hargs.} {t2 data
27a0: 31 2e 74 78 74 7d 0a 64 6f 5f 74 65 73 74 20 61  1.txt}.do_test a
27b0: 75 74 68 2d 31 2e 35 39 20 7b 0a 20 20 65 78 65  uth-1.59 {.  exe
27c0: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46  csql {SELECT * F
27d0: 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31 31 20 32 20  ROM t2}.} {11 2 
27e0: 33 33 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  33}.do_test auth
27f0: 2d 31 2e 36 30 20 7b 0a 20 20 70 72 6f 63 20 61  -1.60 {.  proc a
2800: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
2810: 72 67 32 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg2} {.    if {$
2820: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43 4f  code=="SQLITE_CO
2830: 50 59 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74  PY"} {.      set
2840: 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73   ::authargs [lis
2850: 74 20 24 61 72 67 31 20 24 61 72 67 32 5d 0a 20  t $arg1 $arg2]. 
2860: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
2870: 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20  TE_OK.    }.    
2880: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
2890: 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20  .  }.  catchsql 
28a0: 7b 43 4f 50 59 20 74 32 20 46 52 4f 4d 20 27 64  {COPY t2 FROM 'd
28b0: 61 74 61 31 2e 74 78 74 27 20 55 53 49 4e 47 20  ata1.txt' USING 
28c0: 44 45 4c 49 4d 49 54 45 52 53 20 27 3a 27 7d 0a  DELIMITERS ':'}.
28d0: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
28e0: 20 61 75 74 68 2d 31 2e 36 31 20 7b 0a 20 20 73   auth-1.61 {.  s
28f0: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20  et ::authargs.} 
2900: 7b 74 32 20 64 61 74 61 31 2e 74 78 74 7d 0a 64  {t2 data1.txt}.d
2910: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 36 32  o_test auth-1.62
2920: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
2930: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d 0a  LECT * FROM t2}.
2940: 7d 20 7b 31 31 20 32 20 33 33 20 37 20 38 20 39  } {11 2 33 7 8 9
2950: 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }..do_test auth-
2960: 31 2e 36 33 20 7b 0a 20 20 70 72 6f 63 20 61 75  1.63 {.  proc au
2970: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
2980: 67 32 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g2} {.    if {$c
2990: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c  ode=="SQLITE_DEL
29a0: 45 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d 22  ETE" && $arg1=="
29b0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 7d 20  sqlite_master"} 
29c0: 7b 0a 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  {.       return 
29d0: 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20  SQLITE_DENY.    
29e0: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
29f0: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
2a00: 63 68 73 71 6c 20 7b 44 52 4f 50 20 54 41 42 4c  chsql {DROP TABL
2a10: 45 20 74 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20  E t2}.} {1 {not 
2a20: 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f  authorized}}.do_
2a30: 74 65 73 74 20 61 75 74 68 2d 31 2e 36 34 20 7b  test auth-1.64 {
2a40: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
2a50: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
2a60: 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74  ite_master}.} {t
2a70: 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  2}.do_test auth-
2a80: 31 2e 36 35 20 7b 0a 20 20 70 72 6f 63 20 61 75  1.65 {.  proc au
2a90: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
2aa0: 67 32 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g2} {.    if {$c
2ab0: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c  ode=="SQLITE_DEL
2ac0: 45 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d 22  ETE" && $arg1=="
2ad0: 74 32 22 7d 20 7b 0a 20 20 20 20 20 20 20 72 65  t2"} {.       re
2ae0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59  turn SQLITE_DENY
2af0: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
2b00: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
2b10: 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50    catchsql {DROP
2b20: 20 54 41 42 4c 45 20 74 32 7d 0a 7d 20 7b 31 20   TABLE t2}.} {1 
2b30: 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d  {not authorized}
2b40: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
2b50: 2e 36 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .66 {.  execsql 
2b60: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
2b70: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d  M sqlite_master}
2b80: 0a 7d 20 7b 74 32 7d 0a 64 6f 5f 74 65 73 74 20  .} {t2}.do_test 
2b90: 61 75 74 68 2d 31 2e 36 37 20 7b 0a 20 20 70 72  auth-1.67 {.  pr
2ba0: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
2bb0: 67 31 20 61 72 67 32 7d 20 7b 0a 20 20 20 20 69  g1 arg2} {.    i
2bc0: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
2bd0: 45 5f 44 45 4c 45 54 45 22 20 26 26 20 24 61 72  E_DELETE" && $ar
2be0: 67 31 3d 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70  g1=="sqlite_temp
2bf0: 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20  _master"} {.    
2c00: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
2c10: 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20  _DENY.    }.    
2c20: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
2c30: 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20  .  }.  catchsql 
2c40: 7b 44 52 4f 50 20 54 41 42 4c 45 20 74 31 7d 0a  {DROP TABLE t1}.
2c50: 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72  } {1 {not author
2c60: 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  ized}}.do_test a
2c70: 75 74 68 2d 31 2e 36 38 20 7b 0a 20 20 65 78 65  uth-1.68 {.  exe
2c80: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d  csql {SELECT nam
2c90: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65  e FROM sqlite_te
2ca0: 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31  mp_master}.} {t1
2cb0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
2cc0: 2e 36 39 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  .69 {.  proc aut
2cd0: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
2ce0: 32 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f  2} {.    if {$co
2cf0: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45  de=="SQLITE_DELE
2d00: 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d 22 74  TE" && $arg1=="t
2d10: 31 22 7d 20 7b 0a 20 20 20 20 20 20 20 72 65 74  1"} {.       ret
2d20: 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a  urn SQLITE_DENY.
2d30: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
2d40: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
2d50: 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20   catchsql {DROP 
2d60: 54 41 42 4c 45 20 74 31 7d 0a 7d 20 7b 31 20 7b  TABLE t1}.} {1 {
2d70: 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d  not authorized}}
2d80: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
2d90: 37 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  70 {.  execsql {
2da0: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
2db0: 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73   sqlite_temp_mas
2dc0: 74 65 72 7d 0a 7d 20 7b 74 31 7d 0a 0a 64 6f 5f  ter}.} {t1}..do_
2dd0: 74 65 73 74 20 61 75 74 68 2d 31 2e 37 31 20 7b  test auth-1.71 {
2de0: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
2df0: 64 65 20 61 72 67 31 20 61 72 67 32 7d 20 7b 0a  de arg1 arg2} {.
2e00: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
2e10: 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 22 20 26  SQLITE_DELETE" &
2e20: 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65  & $arg1=="sqlite
2e30: 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20  _master"} {.    
2e40: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
2e50: 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20  _IGNORE.    }.  
2e60: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
2e70: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
2e80: 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45 20 74 32  l {DROP TABLE t2
2e90: 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  }.} {0 {}}.do_te
2ea0: 73 74 20 61 75 74 68 2d 31 2e 37 32 20 7b 0a 20  st auth-1.72 {. 
2eb0: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
2ec0: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
2ed0: 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 7d  e_master}.} {t2}
2ee0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
2ef0: 37 33 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  73 {.  proc auth
2f00: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
2f10: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
2f20: 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45 54  e=="SQLITE_DELET
2f30: 45 22 20 26 26 20 24 61 72 67 31 3d 3d 22 74 32  E" && $arg1=="t2
2f40: 22 7d 20 7b 0a 20 20 20 20 20 20 20 72 65 74 75  "} {.       retu
2f50: 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45  rn SQLITE_IGNORE
2f60: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
2f70: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
2f80: 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50    catchsql {DROP
2f90: 20 54 41 42 4c 45 20 74 32 7d 0a 7d 20 7b 30 20   TABLE t2}.} {0 
2fa0: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
2fb0: 2d 31 2e 37 34 20 7b 0a 20 20 65 78 65 63 73 71  -1.74 {.  execsq
2fc0: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
2fd0: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
2fe0: 72 7d 0a 7d 20 7b 74 32 7d 0a 64 6f 5f 74 65 73  r}.} {t2}.do_tes
2ff0: 74 20 61 75 74 68 2d 31 2e 37 35 20 7b 0a 20 20  t auth-1.75 {.  
3000: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
3010: 61 72 67 31 20 61 72 67 32 7d 20 7b 0a 20 20 20  arg1 arg2} {.   
3020: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
3030: 49 54 45 5f 44 45 4c 45 54 45 22 20 26 26 20 24  ITE_DELETE" && $
3040: 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 74 65  arg1=="sqlite_te
3050: 6d 70 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20  mp_master"} {.  
3060: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
3070: 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a  TE_IGNORE.    }.
3080: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
3090: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
30a0: 73 71 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45 20  sql {DROP TABLE 
30b0: 74 31 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f  t1}.} {0 {}}.do_
30c0: 74 65 73 74 20 61 75 74 68 2d 31 2e 37 36 20 7b  test auth-1.76 {
30d0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
30e0: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
30f0: 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d  ite_temp_master}
3100: 0a 7d 20 7b 74 31 7d 0a 64 6f 5f 74 65 73 74 20  .} {t1}.do_test 
3110: 61 75 74 68 2d 31 2e 37 37 20 7b 0a 20 20 70 72  auth-1.77 {.  pr
3120: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
3130: 67 31 20 61 72 67 32 7d 20 7b 0a 20 20 20 20 69  g1 arg2} {.    i
3140: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
3150: 45 5f 44 45 4c 45 54 45 22 20 26 26 20 24 61 72  E_DELETE" && $ar
3160: 67 31 3d 3d 22 74 31 22 7d 20 7b 0a 20 20 20 20  g1=="t1"} {.    
3170: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
3180: 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20  _IGNORE.    }.  
3190: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
31a0: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
31b0: 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45 20 74 31  l {DROP TABLE t1
31c0: 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  }.} {0 {}}.do_te
31d0: 73 74 20 61 75 74 68 2d 31 2e 37 38 20 7b 0a 20  st auth-1.78 {. 
31e0: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
31f0: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
3200: 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d  e_temp_master}.}
3210: 20 7b 74 31 7d 0a 0a 64 6f 5f 74 65 73 74 20 61   {t1}..do_test a
3220: 75 74 68 2d 31 2e 37 39 20 7b 0a 20 20 70 72 6f  uth-1.79 {.  pro
3230: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
3240: 31 20 61 72 67 32 7d 20 7b 0a 20 20 20 20 69 66  1 arg2} {.    if
3250: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
3260: 5f 43 52 45 41 54 45 5f 56 49 45 57 22 7d 20 7b  _CREATE_VIEW"} {
3270: 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74  .      set ::aut
3280: 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67  hargs [list $arg
3290: 31 20 24 61 72 67 32 5d 20 0a 20 20 20 20 20 20  1 $arg2] .      
32a0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45  return SQLITE_DE
32b0: 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  NY.    }.    ret
32c0: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
32d0: 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52  }.  catchsql {CR
32e0: 45 41 54 45 20 56 49 45 57 20 76 31 20 41 53 20  EATE VIEW v1 AS 
32f0: 53 45 4c 45 43 54 20 61 2b 31 2c 62 2b 31 20 46  SELECT a+1,b+1 F
3300: 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31 20 7b 6e 6f  ROM t2}.} {1 {no
3310: 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64  t authorized}}.d
3320: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 38 30  o_test auth-1.80
3330: 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61   {.  set ::autha
3340: 72 67 73 0a 7d 20 7b 76 31 20 7b 7d 7d 0a 64 6f  rgs.} {v1 {}}.do
3350: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 38 31 20  _test auth-1.81 
3360: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
3370: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
3380: 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b  lite_master}.} {
3390: 74 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  t2}.do_test auth
33a0: 2d 31 2e 38 32 20 7b 0a 20 20 70 72 6f 63 20 61  -1.82 {.  proc a
33b0: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
33c0: 72 67 32 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg2} {.    if {$
33d0: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52  code=="SQLITE_CR
33e0: 45 41 54 45 5f 56 49 45 57 22 7d 20 7b 0a 20 20  EATE_VIEW"} {.  
33f0: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
3400: 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24  gs [list $arg1 $
3410: 61 72 67 32 5d 20 0a 20 20 20 20 20 20 72 65 74  arg2] .      ret
3420: 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52  urn SQLITE_IGNOR
3430: 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  E.    }.    retu
3440: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
3450: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45  .  catchsql {CRE
3460: 41 54 45 20 56 49 45 57 20 76 31 20 41 53 20 53  ATE VIEW v1 AS S
3470: 45 4c 45 43 54 20 61 2b 31 2c 62 2b 31 20 46 52  ELECT a+1,b+1 FR
3480: 4f 4d 20 74 32 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a  OM t2}.} {0 {}}.
3490: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 38  do_test auth-1.8
34a0: 33 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68  3 {.  set ::auth
34b0: 61 72 67 73 0a 7d 20 7b 76 31 20 7b 7d 7d 0a 64  args.} {v1 {}}.d
34c0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 38 34  o_test auth-1.84
34d0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
34e0: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73  LECT name FROM s
34f0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20  qlite_master}.} 
3500: 7b 74 32 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 75  {t2}..do_test au
3510: 74 68 2d 31 2e 38 35 20 7b 0a 20 20 70 72 6f 63  th-1.85 {.  proc
3520: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
3530: 20 61 72 67 32 7d 20 7b 0a 20 20 20 20 69 66 20   arg2} {.    if 
3540: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
3550: 43 52 45 41 54 45 5f 54 45 4d 50 5f 56 49 45 57  CREATE_TEMP_VIEW
3560: 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a  "} {.      set :
3570: 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20  :authargs [list 
3580: 24 61 72 67 31 20 24 61 72 67 32 5d 20 0a 20 20  $arg1 $arg2] .  
3590: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
35a0: 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20  E_DENY.    }.   
35b0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
35c0: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
35d0: 20 7b 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41   {CREATE TEMPORA
35e0: 52 59 20 56 49 45 57 20 76 31 20 41 53 20 53 45  RY VIEW v1 AS SE
35f0: 4c 45 43 54 20 61 2b 31 2c 62 2b 31 20 46 52 4f  LECT a+1,b+1 FRO
3600: 4d 20 74 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20  M t2}.} {1 {not 
3610: 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f  authorized}}.do_
3620: 74 65 73 74 20 61 75 74 68 2d 31 2e 38 36 20 7b  test auth-1.86 {
3630: 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67  .  set ::autharg
3640: 73 0a 7d 20 7b 76 31 20 7b 7d 7d 0a 64 6f 5f 74  s.} {v1 {}}.do_t
3650: 65 73 74 20 61 75 74 68 2d 31 2e 38 37 20 7b 0a  est auth-1.87 {.
3660: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
3670: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
3680: 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a  te_temp_master}.
3690: 7d 20 7b 74 31 7d 0a 64 6f 5f 74 65 73 74 20 61  } {t1}.do_test a
36a0: 75 74 68 2d 31 2e 38 38 20 7b 0a 20 20 70 72 6f  uth-1.88 {.  pro
36b0: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
36c0: 31 20 61 72 67 32 7d 20 7b 0a 20 20 20 20 69 66  1 arg2} {.    if
36d0: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
36e0: 5f 43 52 45 41 54 45 5f 54 45 4d 50 5f 56 49 45  _CREATE_TEMP_VIE
36f0: 57 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20  W"} {.      set 
3700: 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74  ::authargs [list
3710: 20 24 61 72 67 31 20 24 61 72 67 32 5d 20 0a 20   $arg1 $arg2] . 
3720: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
3730: 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a  TE_IGNORE.    }.
3740: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
3750: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
3760: 73 71 6c 20 7b 43 52 45 41 54 45 20 54 45 4d 50  sql {CREATE TEMP
3770: 4f 52 41 52 59 20 56 49 45 57 20 76 31 20 41 53  ORARY VIEW v1 AS
3780: 20 53 45 4c 45 43 54 20 61 2b 31 2c 62 2b 31 20   SELECT a+1,b+1 
3790: 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 30 20 7b 7d  FROM t2}.} {0 {}
37a0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
37b0: 2e 38 39 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75  .89 {.  set ::au
37c0: 74 68 61 72 67 73 0a 7d 20 7b 76 31 20 7b 7d 7d  thargs.} {v1 {}}
37d0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
37e0: 39 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  90 {.  execsql {
37f0: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
3800: 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73   sqlite_temp_mas
3810: 74 65 72 7d 0a 7d 20 7b 74 31 7d 0a 0a 64 6f 5f  ter}.} {t1}..do_
3820: 74 65 73 74 20 61 75 74 68 2d 31 2e 39 31 20 7b  test auth-1.91 {
3830: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
3840: 64 65 20 61 72 67 31 20 61 72 67 32 7d 20 7b 0a  de arg1 arg2} {.
3850: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
3860: 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 22 20 26  SQLITE_INSERT" &
3870: 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65  & $arg1=="sqlite
3880: 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20  _master"} {.    
3890: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
38a0: 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72  DENY.    }.    r
38b0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
38c0: 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b    }.  catchsql {
38d0: 43 52 45 41 54 45 20 56 49 45 57 20 76 31 20 41  CREATE VIEW v1 A
38e0: 53 20 53 45 4c 45 43 54 20 61 2b 31 2c 62 2b 31  S SELECT a+1,b+1
38f0: 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31 20 7b   FROM t2}.} {1 {
3900: 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d  not authorized}}
3910: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
3920: 39 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  92 {.  execsql {
3930: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
3940: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a   sqlite_master}.
3950: 7d 20 7b 74 32 7d 0a 64 6f 5f 74 65 73 74 20 61  } {t2}.do_test a
3960: 75 74 68 2d 31 2e 39 33 20 7b 0a 20 20 70 72 6f  uth-1.93 {.  pro
3970: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
3980: 31 20 61 72 67 32 7d 20 7b 0a 20 20 20 20 69 66  1 arg2} {.    if
3990: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
39a0: 5f 49 4e 53 45 52 54 22 20 26 26 20 24 61 72 67  _INSERT" && $arg
39b0: 31 3d 3d 22 73 71 6c 69 74 65 5f 6d 61 73 74 65  1=="sqlite_maste
39c0: 72 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75  r"} {.      retu
39d0: 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45  rn SQLITE_IGNORE
39e0: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
39f0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
3a00: 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41    catchsql {CREA
3a10: 54 45 20 56 49 45 57 20 76 31 20 41 53 20 53 45  TE VIEW v1 AS SE
3a20: 4c 45 43 54 20 61 2b 31 2c 62 2b 31 20 46 52 4f  LECT a+1,b+1 FRO
3a30: 4d 20 74 32 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  M t2}.} {0 {}}.d
3a40: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 39 34  o_test auth-1.94
3a50: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
3a60: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73  LECT name FROM s
3a70: 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20  qlite_master}.} 
3a80: 7b 74 32 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 75  {t2}..do_test au
3a90: 74 68 2d 31 2e 39 35 20 7b 0a 20 20 70 72 6f 63  th-1.95 {.  proc
3aa0: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
3ab0: 20 61 72 67 32 7d 20 7b 0a 20 20 20 20 69 66 20   arg2} {.    if 
3ac0: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
3ad0: 49 4e 53 45 52 54 22 20 26 26 20 24 61 72 67 31  INSERT" && $arg1
3ae0: 3d 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  =="sqlite_temp_m
3af0: 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20  aster"} {.      
3b00: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45  return SQLITE_DE
3b10: 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  NY.    }.    ret
3b20: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
3b30: 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52  }.  catchsql {CR
3b40: 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20 56  EATE TEMPORARY V
3b50: 49 45 57 20 76 31 20 41 53 20 53 45 4c 45 43 54  IEW v1 AS SELECT
3b60: 20 61 2b 31 2c 62 2b 31 20 46 52 4f 4d 20 74 32   a+1,b+1 FROM t2
3b70: 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68  }.} {1 {not auth
3b80: 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74  orized}}.do_test
3b90: 20 61 75 74 68 2d 31 2e 39 36 20 7b 0a 20 20 65   auth-1.96 {.  e
3ba0: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
3bb0: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
3bc0: 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b  temp_master}.} {
3bd0: 74 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  t1}.do_test auth
3be0: 2d 31 2e 39 37 20 7b 0a 20 20 70 72 6f 63 20 61  -1.97 {.  proc a
3bf0: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
3c00: 72 67 32 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg2} {.    if {$
3c10: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 49 4e  code=="SQLITE_IN
3c20: 53 45 52 54 22 20 26 26 20 24 61 72 67 31 3d 3d  SERT" && $arg1==
3c30: 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73  "sqlite_temp_mas
3c40: 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 72 65  ter"} {.      re
3c50: 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f  turn SQLITE_IGNO
3c60: 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  RE.    }.    ret
3c70: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
3c80: 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52  }.  catchsql {CR
3c90: 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20 56  EATE TEMPORARY V
3ca0: 49 45 57 20 76 31 20 41 53 20 53 45 4c 45 43 54  IEW v1 AS SELECT
3cb0: 20 61 2b 31 2c 62 2b 31 20 46 52 4f 4d 20 74 32   a+1,b+1 FROM t2
3cc0: 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  }.} {0 {}}.do_te
3cd0: 73 74 20 61 75 74 68 2d 31 2e 39 38 20 7b 0a 20  st auth-1.98 {. 
3ce0: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
3cf0: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
3d00: 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d  e_temp_master}.}
3d10: 20 7b 74 31 7d 0a 0a 64 6f 5f 74 65 73 74 20 61   {t1}..do_test a
3d20: 75 74 68 2d 31 2e 39 39 20 7b 0a 20 20 70 72 6f  uth-1.99 {.  pro
3d30: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
3d40: 31 20 61 72 67 32 7d 20 7b 0a 20 20 20 20 69 66  1 arg2} {.    if
3d50: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
3d60: 5f 44 45 4c 45 54 45 22 20 26 26 20 24 61 72 67  _DELETE" && $arg
3d70: 31 3d 3d 22 73 71 6c 69 74 65 5f 6d 61 73 74 65  1=="sqlite_maste
3d80: 72 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75  r"} {.      retu
3d90: 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20  rn SQLITE_DENY. 
3da0: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
3db0: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
3dc0: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 43  catchsql {.    C
3dd0: 52 45 41 54 45 20 56 49 45 57 20 76 32 20 41 53  REATE VIEW v2 AS
3de0: 20 53 45 4c 45 43 54 20 61 2b 31 2c 62 2b 31 20   SELECT a+1,b+1 
3df0: 46 52 4f 4d 20 74 32 3b 0a 20 20 20 20 44 52 4f  FROM t2;.    DRO
3e00: 50 20 56 49 45 57 20 76 32 0a 20 20 7d 0a 7d 20  P VIEW v2.  }.} 
3e10: 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a  {1 {not authoriz
3e20: 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  ed}}.do_test aut
3e30: 68 2d 31 2e 31 30 30 20 7b 0a 20 20 65 78 65 63  h-1.100 {.  exec
3e40: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
3e50: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
3e60: 74 65 72 7d 0a 7d 20 7b 74 32 20 76 32 7d 0a 64  ter}.} {t2 v2}.d
3e70: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 30  o_test auth-1.10
3e80: 31 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  1 {.  proc auth 
3e90: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 7d  {code arg1 arg2}
3ea0: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
3eb0: 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f 50 5f 56  =="SQLITE_DROP_V
3ec0: 49 45 57 22 7d 20 7b 0a 20 20 20 20 20 20 73 65  IEW"} {.      se
3ed0: 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69  t ::authargs [li
3ee0: 73 74 20 24 61 72 67 31 20 24 61 72 67 32 5d 0a  st $arg1 $arg2].
3ef0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
3f00: 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20  ITE_DENY.    }. 
3f10: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
3f20: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
3f30: 71 6c 20 7b 44 52 4f 50 20 56 49 45 57 20 76 32  ql {DROP VIEW v2
3f40: 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68  }.} {1 {not auth
3f50: 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74  orized}}.do_test
3f60: 20 61 75 74 68 2d 31 2e 31 30 32 20 7b 0a 20 20   auth-1.102 {.  
3f70: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d  set ::authargs.}
3f80: 20 7b 76 32 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74   {v2 {}}.do_test
3f90: 20 61 75 74 68 2d 31 2e 31 30 33 20 7b 0a 20 20   auth-1.103 {.  
3fa0: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
3fb0: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
3fc0: 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 20 76  _master}.} {t2 v
3fd0: 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  2}.do_test auth-
3fe0: 31 2e 31 30 34 20 7b 0a 20 20 70 72 6f 63 20 61  1.104 {.  proc a
3ff0: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
4000: 72 67 32 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg2} {.    if {$
4010: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45  code=="SQLITE_DE
4020: 4c 45 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d  LETE" && $arg1==
4030: 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 7d  "sqlite_master"}
4040: 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   {.      return 
4050: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20  SQLITE_IGNORE.  
4060: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
4070: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
4080: 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 56 49  atchsql {DROP VI
4090: 45 57 20 76 32 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a  EW v2}.} {0 {}}.
40a0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
40b0: 30 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  05 {.  execsql {
40c0: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
40d0: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a   sqlite_master}.
40e0: 7d 20 7b 74 32 20 76 32 7d 0a 64 6f 5f 74 65 73  } {t2 v2}.do_tes
40f0: 74 20 61 75 74 68 2d 31 2e 31 30 36 20 7b 0a 20  t auth-1.106 {. 
4100: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
4110: 20 61 72 67 31 20 61 72 67 32 7d 20 7b 0a 20 20   arg1 arg2} {.  
4120: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
4130: 4c 49 54 45 5f 44 52 4f 50 5f 56 49 45 57 22 7d  LITE_DROP_VIEW"}
4140: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61   {.      set ::a
4150: 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61  uthargs [list $a
4160: 72 67 31 20 24 61 72 67 32 5d 0a 20 20 20 20 20  rg1 $arg2].     
4170: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49   return SQLITE_I
4180: 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20  GNORE.    }.    
4190: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
41a0: 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20  .  }.  catchsql 
41b0: 7b 44 52 4f 50 20 56 49 45 57 20 76 32 7d 0a 7d  {DROP VIEW v2}.}
41c0: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
41d0: 61 75 74 68 2d 31 2e 31 30 37 20 7b 0a 20 20 73  auth-1.107 {.  s
41e0: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20  et ::authargs.} 
41f0: 7b 76 32 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20  {v2 {}}.do_test 
4200: 61 75 74 68 2d 31 2e 31 30 38 20 7b 0a 20 20 65  auth-1.108 {.  e
4210: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
4220: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
4230: 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 20 76 32  master}.} {t2 v2
4240: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
4250: 2e 31 30 39 20 7b 0a 20 20 70 72 6f 63 20 61 75  .109 {.  proc au
4260: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
4270: 67 32 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g2} {.    if {$c
4280: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f  ode=="SQLITE_DRO
4290: 50 5f 56 49 45 57 22 7d 20 7b 0a 20 20 20 20 20  P_VIEW"} {.     
42a0: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
42b0: 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67  [list $arg1 $arg
42c0: 32 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  2].      return 
42d0: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a  SQLITE_OK.    }.
42e0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
42f0: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
4300: 73 71 6c 20 7b 44 52 4f 50 20 56 49 45 57 20 76  sql {DROP VIEW v
4310: 32 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74  2}.} {0 {}}.do_t
4320: 65 73 74 20 61 75 74 68 2d 31 2e 31 31 30 20 7b  est auth-1.110 {
4330: 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67  .  set ::autharg
4340: 73 0a 7d 20 7b 76 32 20 7b 7d 7d 0a 64 6f 5f 74  s.} {v2 {}}.do_t
4350: 65 73 74 20 61 75 74 68 2d 31 2e 31 31 31 20 7b  est auth-1.111 {
4360: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
4370: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
4380: 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74  ite_master}.} {t
4390: 32 7d 0a 0a 0a 64 6f 5f 74 65 73 74 20 61 75 74  2}...do_test aut
43a0: 68 2d 31 2e 31 31 32 20 7b 0a 20 20 70 72 6f 63  h-1.112 {.  proc
43b0: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
43c0: 20 61 72 67 32 7d 20 7b 0a 20 20 20 20 69 66 20   arg2} {.    if 
43d0: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
43e0: 44 45 4c 45 54 45 22 20 26 26 20 24 61 72 67 31  DELETE" && $arg1
43f0: 3d 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  =="sqlite_temp_m
4400: 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20  aster"} {.      
4410: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45  return SQLITE_DE
4420: 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  NY.    }.    ret
4430: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
4440: 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  }.  catchsql {. 
4450: 20 20 20 43 52 45 41 54 45 20 54 45 4d 50 20 56     CREATE TEMP V
4460: 49 45 57 20 76 31 20 41 53 20 53 45 4c 45 43 54  IEW v1 AS SELECT
4470: 20 61 2b 31 2c 62 2b 31 20 46 52 4f 4d 20 74 31   a+1,b+1 FROM t1
4480: 3b 0a 20 20 20 20 44 52 4f 50 20 56 49 45 57 20  ;.    DROP VIEW 
4490: 76 31 0a 20 20 7d 0a 7d 20 7b 31 20 7b 6e 6f 74  v1.  }.} {1 {not
44a0: 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f   authorized}}.do
44b0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 31 33  _test auth-1.113
44c0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
44d0: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73  LECT name FROM s
44e0: 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
44f0: 72 7d 0a 7d 20 7b 74 31 20 76 31 7d 0a 64 6f 5f  r}.} {t1 v1}.do_
4500: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 31 34 20  test auth-1.114 
4510: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
4520: 6f 64 65 20 61 72 67 31 20 61 72 67 32 7d 20 7b  ode arg1 arg2} {
4530: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
4540: 22 53 51 4c 49 54 45 5f 44 52 4f 50 5f 54 45 4d  "SQLITE_DROP_TEM
4550: 50 5f 56 49 45 57 22 7d 20 7b 0a 20 20 20 20 20  P_VIEW"} {.     
4560: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
4570: 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67  [list $arg1 $arg
4580: 32 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  2].      return 
4590: 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20  SQLITE_DENY.    
45a0: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
45b0: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
45c0: 63 68 73 71 6c 20 7b 44 52 4f 50 20 56 49 45 57  chsql {DROP VIEW
45d0: 20 76 31 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61   v1}.} {1 {not a
45e0: 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74  uthorized}}.do_t
45f0: 65 73 74 20 61 75 74 68 2d 31 2e 31 31 35 20 7b  est auth-1.115 {
4600: 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67  .  set ::autharg
4610: 73 0a 7d 20 7b 76 31 20 7b 7d 7d 0a 64 6f 5f 74  s.} {v1 {}}.do_t
4620: 65 73 74 20 61 75 74 68 2d 31 2e 31 31 36 20 7b  est auth-1.116 {
4630: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
4640: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
4650: 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d  ite_temp_master}
4660: 0a 7d 20 7b 74 31 20 76 31 7d 0a 64 6f 5f 74 65  .} {t1 v1}.do_te
4670: 73 74 20 61 75 74 68 2d 31 2e 31 31 37 20 7b 0a  st auth-1.117 {.
4680: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
4690: 65 20 61 72 67 31 20 61 72 67 32 7d 20 7b 0a 20  e arg1 arg2} {. 
46a0: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
46b0: 51 4c 49 54 45 5f 44 45 4c 45 54 45 22 20 26 26  QLITE_DELETE" &&
46c0: 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f   $arg1=="sqlite_
46d0: 74 65 6d 70 5f 6d 61 73 74 65 72 22 7d 20 7b 0a  temp_master"} {.
46e0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
46f0: 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d  ITE_IGNORE.    }
4700: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
4710: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
4720: 68 73 71 6c 20 7b 44 52 4f 50 20 56 49 45 57 20  hsql {DROP VIEW 
4730: 76 31 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f  v1}.} {0 {}}.do_
4740: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 31 38 20  test auth-1.118 
4750: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
4760: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
4770: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
4780: 7d 0a 7d 20 7b 74 31 20 76 31 7d 0a 64 6f 5f 74  }.} {t1 v1}.do_t
4790: 65 73 74 20 61 75 74 68 2d 31 2e 31 31 39 20 7b  est auth-1.119 {
47a0: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
47b0: 64 65 20 61 72 67 31 20 61 72 67 32 7d 20 7b 0a  de arg1 arg2} {.
47c0: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
47d0: 53 51 4c 49 54 45 5f 44 52 4f 50 5f 54 45 4d 50  SQLITE_DROP_TEMP
47e0: 5f 56 49 45 57 22 7d 20 7b 0a 20 20 20 20 20 20  _VIEW"} {.      
47f0: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b  set ::authargs [
4800: 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67 32  list $arg1 $arg2
4810: 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  ].      return S
4820: 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20  QLITE_IGNORE.   
4830: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
4840: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
4850: 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 56 49 45  tchsql {DROP VIE
4860: 57 20 76 31 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  W v1}.} {0 {}}.d
4870: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 32  o_test auth-1.12
4880: 30 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68  0 {.  set ::auth
4890: 61 72 67 73 0a 7d 20 7b 76 31 20 7b 7d 7d 0a 64  args.} {v1 {}}.d
48a0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 32  o_test auth-1.12
48b0: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  1 {.  execsql {S
48c0: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
48d0: 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
48e0: 65 72 7d 0a 7d 20 7b 74 31 20 76 31 7d 0a 64 6f  er}.} {t1 v1}.do
48f0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 32 32  _test auth-1.122
4900: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
4910: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 7d 20  code arg1 arg2} 
4920: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
4930: 3d 22 53 51 4c 49 54 45 5f 44 52 4f 50 5f 54 45  ="SQLITE_DROP_TE
4940: 4d 50 5f 56 49 45 57 22 7d 20 7b 0a 20 20 20 20  MP_VIEW"} {.    
4950: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
4960: 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72   [list $arg1 $ar
4970: 67 32 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  g2].      return
4980: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d   SQLITE_OK.    }
4990: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
49a0: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
49b0: 68 73 71 6c 20 7b 44 52 4f 50 20 56 49 45 57 20  hsql {DROP VIEW 
49c0: 76 31 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f  v1}.} {0 {}}.do_
49d0: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 32 33 20  test auth-1.123 
49e0: 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72  {.  set ::authar
49f0: 67 73 0a 7d 20 7b 76 31 20 7b 7d 7d 0a 64 6f 5f  gs.} {v1 {}}.do_
4a00: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 32 34 20  test auth-1.124 
4a10: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
4a20: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
4a30: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
4a40: 7d 0a 7d 20 7b 74 31 7d 0a 0a 64 6f 5f 74 65 73  }.} {t1}..do_tes
4a50: 74 20 61 75 74 68 2d 31 2e 31 32 35 20 7b 0a 20  t auth-1.125 {. 
4a60: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
4a70: 20 61 72 67 31 20 61 72 67 32 7d 20 7b 0a 20 20   arg1 arg2} {.  
4a80: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
4a90: 4c 49 54 45 5f 43 52 45 41 54 45 5f 54 52 49 47  LITE_CREATE_TRIG
4aa0: 47 45 52 22 7d 20 7b 0a 20 20 20 20 20 20 73 65  GER"} {.      se
4ab0: 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69  t ::authargs [li
4ac0: 73 74 20 24 61 72 67 31 20 24 61 72 67 32 5d 0a  st $arg1 $arg2].
4ad0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
4ae0: 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20  ITE_DENY.    }. 
4af0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
4b00: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
4b10: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
4b20: 54 52 49 47 47 45 52 20 72 32 20 44 45 4c 45 54  TRIGGER r2 DELET
4b30: 45 20 6f 6e 20 74 32 20 42 45 47 49 4e 0a 20 20  E on t2 BEGIN.  
4b40: 20 20 20 20 20 20 53 45 4c 45 43 54 20 4e 55 4c        SELECT NUL
4b50: 4c 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 7d 0a  L;.    END;.  }.
4b60: 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72  } {1 {not author
4b70: 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  ized}}.do_test a
4b80: 75 74 68 2d 31 2e 31 32 36 20 7b 0a 20 20 73 65  uth-1.126 {.  se
4b90: 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b  t ::authargs.} {
4ba0: 72 32 20 74 32 7d 0a 64 6f 5f 74 65 73 74 20 61  r2 t2}.do_test a
4bb0: 75 74 68 2d 31 2e 31 32 37 20 7b 0a 20 20 65 78  uth-1.127 {.  ex
4bc0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61  ecsql {SELECT na
4bd0: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  me FROM sqlite_m
4be0: 61 73 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a 64 6f  aster}.} {t2}.do
4bf0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 32 38  _test auth-1.128
4c00: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
4c10: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 7d 20  code arg1 arg2} 
4c20: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
4c30: 3d 22 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 22  ="SQLITE_INSERT"
4c40: 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69   && $arg1=="sqli
4c50: 74 65 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20  te_master"} {.  
4c60: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
4c70: 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20  E_DENY.    }.   
4c80: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
4c90: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
4ca0: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 52   {.    CREATE TR
4cb0: 49 47 47 45 52 20 72 32 20 44 45 4c 45 54 45 20  IGGER r2 DELETE 
4cc0: 6f 6e 20 74 32 20 42 45 47 49 4e 0a 20 20 20 20  on t2 BEGIN.    
4cd0: 20 20 20 20 53 45 4c 45 43 54 20 4e 55 4c 4c 3b      SELECT NULL;
4ce0: 0a 20 20 20 20 45 4e 44 3b 0a 20 20 7d 0a 7d 20  .    END;.  }.} 
4cf0: 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a  {1 {not authoriz
4d00: 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  ed}}.do_test aut
4d10: 68 2d 31 2e 31 32 39 20 7b 0a 20 20 65 78 65 63  h-1.129 {.  exec
4d20: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
4d30: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
4d40: 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a 64 6f 5f 74  ter}.} {t2}.do_t
4d50: 65 73 74 20 61 75 74 68 2d 31 2e 31 33 30 20 7b  est auth-1.130 {
4d60: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
4d70: 64 65 20 61 72 67 31 20 61 72 67 32 7d 20 7b 0a  de arg1 arg2} {.
4d80: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
4d90: 53 51 4c 49 54 45 5f 43 52 45 41 54 45 5f 54 52  SQLITE_CREATE_TR
4da0: 49 47 47 45 52 22 7d 20 7b 0a 20 20 20 20 20 20  IGGER"} {.      
4db0: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b  set ::authargs [
4dc0: 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67 32  list $arg1 $arg2
4dd0: 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  ].      return S
4de0: 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20  QLITE_IGNORE.   
4df0: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
4e00: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
4e10: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 43 52 45  tchsql {.    CRE
4e20: 41 54 45 20 54 52 49 47 47 45 52 20 72 32 20 44  ATE TRIGGER r2 D
4e30: 45 4c 45 54 45 20 6f 6e 20 74 32 20 42 45 47 49  ELETE on t2 BEGI
4e40: 4e 0a 20 20 20 20 20 20 20 20 53 45 4c 45 43 54  N.        SELECT
4e50: 20 4e 55 4c 4c 3b 0a 20 20 20 20 45 4e 44 3b 0a   NULL;.    END;.
4e60: 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f    }.} {0 {}}.do_
4e70: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 33 31 20  test auth-1.131 
4e80: 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72  {.  set ::authar
4e90: 67 73 0a 7d 20 7b 72 32 20 74 32 7d 0a 64 6f 5f  gs.} {r2 t2}.do_
4ea0: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 33 32 20  test auth-1.132 
4eb0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
4ec0: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
4ed0: 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b  lite_master}.} {
4ee0: 74 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  t2}.do_test auth
4ef0: 2d 31 2e 31 33 33 20 7b 0a 20 20 70 72 6f 63 20  -1.133 {.  proc 
4f00: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
4f10: 61 72 67 32 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg2} {.    if {
4f20: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 49  $code=="SQLITE_I
4f30: 4e 53 45 52 54 22 20 26 26 20 24 61 72 67 31 3d  NSERT" && $arg1=
4f40: 3d 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22  ="sqlite_master"
4f50: 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  } {.      return
4f60: 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20   SQLITE_IGNORE. 
4f70: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
4f80: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
4f90: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 43  catchsql {.    C
4fa0: 52 45 41 54 45 20 54 52 49 47 47 45 52 20 72 32  REATE TRIGGER r2
4fb0: 20 44 45 4c 45 54 45 20 6f 6e 20 74 32 20 42 45   DELETE on t2 BE
4fc0: 47 49 4e 0a 20 20 20 20 20 20 20 20 53 45 4c 45  GIN.        SELE
4fd0: 43 54 20 4e 55 4c 4c 3b 0a 20 20 20 20 45 4e 44  CT NULL;.    END
4fe0: 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  ;.  }.} {0 {}}.d
4ff0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 33  o_test auth-1.13
5000: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  4 {.  execsql {S
5010: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
5020: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d  sqlite_master}.}
5030: 20 7b 74 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75   {t2}.do_test au
5040: 74 68 2d 31 2e 31 33 35 20 7b 0a 20 20 70 72 6f  th-1.135 {.  pro
5050: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
5060: 31 20 61 72 67 32 7d 20 7b 0a 20 20 20 20 69 66  1 arg2} {.    if
5070: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
5080: 5f 43 52 45 41 54 45 5f 54 52 49 47 47 45 52 22  _CREATE_TRIGGER"
5090: 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a  } {.      set ::
50a0: 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24  authargs [list $
50b0: 61 72 67 31 20 24 61 72 67 32 5d 0a 20 20 20 20  arg1 $arg2].    
50c0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
50d0: 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  OK.    }.    ret
50e0: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
50f0: 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  }.  catchsql {. 
5100: 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45     CREATE TRIGGE
5110: 52 20 72 32 20 44 45 4c 45 54 45 20 6f 6e 20 74  R r2 DELETE on t
5120: 32 20 42 45 47 49 4e 0a 20 20 20 20 20 20 20 20  2 BEGIN.        
5130: 53 45 4c 45 43 54 20 4e 55 4c 4c 3b 0a 20 20 20  SELECT NULL;.   
5140: 20 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b   END;.  }.} {0 {
5150: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
5160: 31 2e 31 33 36 20 7b 0a 20 20 73 65 74 20 3a 3a  1.136 {.  set ::
5170: 61 75 74 68 61 72 67 73 0a 7d 20 7b 72 32 20 74  authargs.} {r2 t
5180: 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  2}.do_test auth-
5190: 31 2e 31 33 37 20 7b 0a 20 20 65 78 65 63 73 71  1.137 {.  execsq
51a0: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
51b0: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
51c0: 72 7d 0a 7d 20 7b 74 32 20 72 32 7d 0a 0a 64 6f  r}.} {t2 r2}..do
51d0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 33 38  _test auth-1.138
51e0: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
51f0: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 7d 20  code arg1 arg2} 
5200: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
5210: 3d 22 53 51 4c 49 54 45 5f 43 52 45 41 54 45 5f  ="SQLITE_CREATE_
5220: 54 45 4d 50 5f 54 52 49 47 47 45 52 22 7d 20 7b  TEMP_TRIGGER"} {
5230: 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74  .      set ::aut
5240: 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67  hargs [list $arg
5250: 31 20 24 61 72 67 32 5d 0a 20 20 20 20 20 20 72  1 $arg2].      r
5260: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e  eturn SQLITE_DEN
5270: 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  Y.    }.    retu
5280: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
5290: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
52a0: 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52    CREATE TRIGGER
52b0: 20 72 31 20 44 45 4c 45 54 45 20 6f 6e 20 74 31   r1 DELETE on t1
52c0: 20 42 45 47 49 4e 0a 20 20 20 20 20 20 20 20 53   BEGIN.        S
52d0: 45 4c 45 43 54 20 4e 55 4c 4c 3b 0a 20 20 20 20  ELECT NULL;.    
52e0: 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 6e  END;.  }.} {1 {n
52f0: 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a  ot authorized}}.
5300: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
5310: 33 39 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74  39 {.  set ::aut
5320: 68 61 72 67 73 0a 7d 20 7b 72 31 20 74 31 7d 0a  hargs.} {r1 t1}.
5330: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
5340: 34 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  40 {.  execsql {
5350: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
5360: 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73   sqlite_temp_mas
5370: 74 65 72 7d 0a 7d 20 7b 74 31 7d 0a 64 6f 5f 74  ter}.} {t1}.do_t
5380: 65 73 74 20 61 75 74 68 2d 31 2e 31 34 31 20 7b  est auth-1.141 {
5390: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
53a0: 64 65 20 61 72 67 31 20 61 72 67 32 7d 20 7b 0a  de arg1 arg2} {.
53b0: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
53c0: 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 22 20 26  SQLITE_INSERT" &
53d0: 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65  & $arg1=="sqlite
53e0: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 7d 20 7b  _temp_master"} {
53f0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
5400: 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a  LITE_DENY.    }.
5410: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
5420: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
5430: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
5440: 20 54 52 49 47 47 45 52 20 72 31 20 44 45 4c 45   TRIGGER r1 DELE
5450: 54 45 20 6f 6e 20 74 31 20 42 45 47 49 4e 0a 20  TE on t1 BEGIN. 
5460: 20 20 20 20 20 20 20 53 45 4c 45 43 54 20 4e 55         SELECT NU
5470: 4c 4c 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 7d  LL;.    END;.  }
5480: 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f  .} {1 {not autho
5490: 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20  rized}}.do_test 
54a0: 61 75 74 68 2d 31 2e 31 34 32 20 7b 0a 20 20 65  auth-1.142 {.  e
54b0: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
54c0: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
54d0: 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b  temp_master}.} {
54e0: 74 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  t1}.do_test auth
54f0: 2d 31 2e 31 34 33 20 7b 0a 20 20 70 72 6f 63 20  -1.143 {.  proc 
5500: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
5510: 61 72 67 32 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg2} {.    if {
5520: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43  $code=="SQLITE_C
5530: 52 45 41 54 45 5f 54 45 4d 50 5f 54 52 49 47 47  REATE_TEMP_TRIGG
5540: 45 52 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74  ER"} {.      set
5550: 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73   ::authargs [lis
5560: 74 20 24 61 72 67 31 20 24 61 72 67 32 5d 0a 20  t $arg1 $arg2]. 
5570: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
5580: 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a  TE_IGNORE.    }.
5590: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
55a0: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
55b0: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
55c0: 20 54 52 49 47 47 45 52 20 72 31 20 44 45 4c 45   TRIGGER r1 DELE
55d0: 54 45 20 6f 6e 20 74 31 20 42 45 47 49 4e 0a 20  TE on t1 BEGIN. 
55e0: 20 20 20 20 20 20 20 53 45 4c 45 43 54 20 4e 55         SELECT NU
55f0: 4c 4c 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 7d  LL;.    END;.  }
5600: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
5610: 74 20 61 75 74 68 2d 31 2e 31 34 34 20 7b 0a 20  t auth-1.144 {. 
5620: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a   set ::authargs.
5630: 7d 20 7b 72 31 20 74 31 7d 0a 64 6f 5f 74 65 73  } {r1 t1}.do_tes
5640: 74 20 61 75 74 68 2d 31 2e 31 34 35 20 7b 0a 20  t auth-1.145 {. 
5650: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
5660: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
5670: 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d  e_temp_master}.}
5680: 20 7b 74 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75   {t1}.do_test au
5690: 74 68 2d 31 2e 31 34 36 20 7b 0a 20 20 70 72 6f  th-1.146 {.  pro
56a0: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
56b0: 31 20 61 72 67 32 7d 20 7b 0a 20 20 20 20 69 66  1 arg2} {.    if
56c0: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
56d0: 5f 49 4e 53 45 52 54 22 20 26 26 20 24 61 72 67  _INSERT" && $arg
56e0: 31 3d 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f  1=="sqlite_temp_
56f0: 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20  master"} {.     
5700: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49   return SQLITE_I
5710: 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20  GNORE.    }.    
5720: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
5730: 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20  .  }.  catchsql 
5740: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 52 49  {.    CREATE TRI
5750: 47 47 45 52 20 72 31 20 44 45 4c 45 54 45 20 6f  GGER r1 DELETE o
5760: 6e 20 74 31 20 42 45 47 49 4e 0a 20 20 20 20 20  n t1 BEGIN.     
5770: 20 20 20 53 45 4c 45 43 54 20 4e 55 4c 4c 3b 0a     SELECT NULL;.
5780: 20 20 20 20 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b      END;.  }.} {
5790: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  0 {}}.do_test au
57a0: 74 68 2d 31 2e 31 34 37 20 7b 0a 20 20 65 78 65  th-1.147 {.  exe
57b0: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d  csql {SELECT nam
57c0: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65  e FROM sqlite_te
57d0: 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31  mp_master}.} {t1
57e0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
57f0: 2e 31 34 38 20 7b 0a 20 20 70 72 6f 63 20 61 75  .148 {.  proc au
5800: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
5810: 67 32 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g2} {.    if {$c
5820: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52 45  ode=="SQLITE_CRE
5830: 41 54 45 5f 54 45 4d 50 5f 54 52 49 47 47 45 52  ATE_TEMP_TRIGGER
5840: 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a  "} {.      set :
5850: 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20  :authargs [list 
5860: 24 61 72 67 31 20 24 61 72 67 32 5d 0a 20 20 20  $arg1 $arg2].   
5870: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
5880: 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  _OK.    }.    re
5890: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
58a0: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a   }.  catchsql {.
58b0: 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47      CREATE TRIGG
58c0: 45 52 20 72 31 20 44 45 4c 45 54 45 20 6f 6e 20  ER r1 DELETE on 
58d0: 74 31 20 42 45 47 49 4e 0a 20 20 20 20 20 20 20  t1 BEGIN.       
58e0: 20 53 45 4c 45 43 54 20 4e 55 4c 4c 3b 0a 20 20   SELECT NULL;.  
58f0: 20 20 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 30 20    END;.  }.} {0 
5900: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
5910: 2d 31 2e 31 34 39 20 7b 0a 20 20 73 65 74 20 3a  -1.149 {.  set :
5920: 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 72 31 20  :authargs.} {r1 
5930: 74 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  t1}.do_test auth
5940: 2d 31 2e 31 35 30 20 7b 0a 20 20 65 78 65 63 73  -1.150 {.  execs
5950: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
5960: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70  FROM sqlite_temp
5970: 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31 20 72  _master}.} {t1 r
5980: 31 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  1}..do_test auth
5990: 2d 31 2e 31 35 31 20 7b 0a 20 20 70 72 6f 63 20  -1.151 {.  proc 
59a0: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
59b0: 61 72 67 32 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg2} {.    if {
59c0: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44  $code=="SQLITE_D
59d0: 45 4c 45 54 45 22 20 26 26 20 24 61 72 67 31 3d  ELETE" && $arg1=
59e0: 3d 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22  ="sqlite_master"
59f0: 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  } {.      return
5a00: 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20   SQLITE_DENY.   
5a10: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
5a20: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
5a30: 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54 52 49  tchsql {DROP TRI
5a40: 47 47 45 52 20 72 32 7d 0a 7d 20 7b 31 20 7b 6e  GGER r2}.} {1 {n
5a50: 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a  ot authorized}}.
5a60: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
5a70: 35 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  52 {.  execsql {
5a80: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
5a90: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a   sqlite_master}.
5aa0: 7d 20 7b 74 32 20 72 32 7d 0a 64 6f 5f 74 65 73  } {t2 r2}.do_tes
5ab0: 74 20 61 75 74 68 2d 31 2e 31 35 33 20 7b 0a 20  t auth-1.153 {. 
5ac0: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
5ad0: 20 61 72 67 31 20 61 72 67 32 7d 20 7b 0a 20 20   arg1 arg2} {.  
5ae0: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
5af0: 4c 49 54 45 5f 44 52 4f 50 5f 54 52 49 47 47 45  LITE_DROP_TRIGGE
5b00: 52 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20  R"} {.      set 
5b10: 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74  ::authargs [list
5b20: 20 24 61 72 67 31 20 24 61 72 67 32 5d 0a 20 20   $arg1 $arg2].  
5b30: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
5b40: 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20  E_DENY.    }.   
5b50: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
5b60: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
5b70: 20 7b 44 52 4f 50 20 54 52 49 47 47 45 52 20 72   {DROP TRIGGER r
5b80: 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74  2}.} {1 {not aut
5b90: 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73  horized}}.do_tes
5ba0: 74 20 61 75 74 68 2d 31 2e 31 35 34 20 7b 0a 20  t auth-1.154 {. 
5bb0: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a   set ::authargs.
5bc0: 7d 20 7b 72 32 20 74 32 7d 0a 64 6f 5f 74 65 73  } {r2 t2}.do_tes
5bd0: 74 20 61 75 74 68 2d 31 2e 31 35 35 20 7b 0a 20  t auth-1.155 {. 
5be0: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
5bf0: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
5c00: 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 20  e_master}.} {t2 
5c10: 72 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  r2}.do_test auth
5c20: 2d 31 2e 31 35 36 20 7b 0a 20 20 70 72 6f 63 20  -1.156 {.  proc 
5c30: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
5c40: 61 72 67 32 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg2} {.    if {
5c50: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44  $code=="SQLITE_D
5c60: 45 4c 45 54 45 22 20 26 26 20 24 61 72 67 31 3d  ELETE" && $arg1=
5c70: 3d 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22  ="sqlite_master"
5c80: 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  } {.      return
5c90: 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20   SQLITE_IGNORE. 
5ca0: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
5cb0: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
5cc0: 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54  catchsql {DROP T
5cd0: 52 49 47 47 45 52 20 72 32 7d 0a 7d 20 7b 30 20  RIGGER r2}.} {0 
5ce0: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
5cf0: 2d 31 2e 31 35 37 20 7b 0a 20 20 65 78 65 63 73  -1.157 {.  execs
5d00: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
5d10: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
5d20: 65 72 7d 0a 7d 20 7b 74 32 20 72 32 7d 0a 64 6f  er}.} {t2 r2}.do
5d30: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 35 38  _test auth-1.158
5d40: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
5d50: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 7d 20  code arg1 arg2} 
5d60: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
5d70: 3d 22 53 51 4c 49 54 45 5f 44 52 4f 50 5f 54 52  ="SQLITE_DROP_TR
5d80: 49 47 47 45 52 22 7d 20 7b 0a 20 20 20 20 20 20  IGGER"} {.      
5d90: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b  set ::authargs [
5da0: 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67 32  list $arg1 $arg2
5db0: 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  ].      return S
5dc0: 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20  QLITE_IGNORE.   
5dd0: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
5de0: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
5df0: 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54 52 49  tchsql {DROP TRI
5e00: 47 47 45 52 20 72 32 7d 0a 7d 20 7b 30 20 7b 7d  GGER r2}.} {0 {}
5e10: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
5e20: 2e 31 35 39 20 7b 0a 20 20 73 65 74 20 3a 3a 61  .159 {.  set ::a
5e30: 75 74 68 61 72 67 73 0a 7d 20 7b 72 32 20 74 32  uthargs.} {r2 t2
5e40: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
5e50: 2e 31 36 30 20 7b 0a 20 20 65 78 65 63 73 71 6c  .160 {.  execsql
5e60: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
5e70: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
5e80: 7d 0a 7d 20 7b 74 32 20 72 32 7d 0a 64 6f 5f 74  }.} {t2 r2}.do_t
5e90: 65 73 74 20 61 75 74 68 2d 31 2e 31 36 31 20 7b  est auth-1.161 {
5ea0: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
5eb0: 64 65 20 61 72 67 31 20 61 72 67 32 7d 20 7b 0a  de arg1 arg2} {.
5ec0: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
5ed0: 53 51 4c 49 54 45 5f 44 52 4f 50 5f 54 52 49 47  SQLITE_DROP_TRIG
5ee0: 47 45 52 22 7d 20 7b 0a 20 20 20 20 20 20 73 65  GER"} {.      se
5ef0: 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69  t ::authargs [li
5f00: 73 74 20 24 61 72 67 31 20 24 61 72 67 32 5d 0a  st $arg1 $arg2].
5f10: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
5f20: 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20  ITE_OK.    }.   
5f30: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
5f40: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
5f50: 20 7b 44 52 4f 50 20 54 52 49 47 47 45 52 20 72   {DROP TRIGGER r
5f60: 32 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74  2}.} {0 {}}.do_t
5f70: 65 73 74 20 61 75 74 68 2d 31 2e 31 36 32 20 7b  est auth-1.162 {
5f80: 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67  .  set ::autharg
5f90: 73 0a 7d 20 7b 72 32 20 74 32 7d 0a 64 6f 5f 74  s.} {r2 t2}.do_t
5fa0: 65 73 74 20 61 75 74 68 2d 31 2e 31 36 33 20 7b  est auth-1.163 {
5fb0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
5fc0: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
5fd0: 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74  ite_master}.} {t
5fe0: 32 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  2}..do_test auth
5ff0: 2d 31 2e 31 36 34 20 7b 0a 20 20 70 72 6f 63 20  -1.164 {.  proc 
6000: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
6010: 61 72 67 32 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg2} {.    if {
6020: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44  $code=="SQLITE_D
6030: 45 4c 45 54 45 22 20 26 26 20 24 61 72 67 31 3d  ELETE" && $arg1=
6040: 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  ="sqlite_temp_ma
6050: 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 72  ster"} {.      r
6060: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e  eturn SQLITE_DEN
6070: 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  Y.    }.    retu
6080: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
6090: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f  .  catchsql {DRO
60a0: 50 20 54 52 49 47 47 45 52 20 72 31 7d 0a 7d 20  P TRIGGER r1}.} 
60b0: 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a  {1 {not authoriz
60c0: 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  ed}}.do_test aut
60d0: 68 2d 31 2e 31 36 35 20 7b 0a 20 20 65 78 65 63  h-1.165 {.  exec
60e0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
60f0: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d   FROM sqlite_tem
6100: 70 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31 20  p_master}.} {t1 
6110: 72 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  r1}.do_test auth
6120: 2d 31 2e 31 36 36 20 7b 0a 20 20 70 72 6f 63 20  -1.166 {.  proc 
6130: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
6140: 61 72 67 32 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg2} {.    if {
6150: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44  $code=="SQLITE_D
6160: 52 4f 50 5f 54 45 4d 50 5f 54 52 49 47 47 45 52  ROP_TEMP_TRIGGER
6170: 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a  "} {.      set :
6180: 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20  :authargs [list 
6190: 24 61 72 67 31 20 24 61 72 67 32 5d 0a 20 20 20  $arg1 $arg2].   
61a0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
61b0: 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20  _DENY.    }.    
61c0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
61d0: 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20  .  }.  catchsql 
61e0: 7b 44 52 4f 50 20 54 52 49 47 47 45 52 20 72 31  {DROP TRIGGER r1
61f0: 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68  }.} {1 {not auth
6200: 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74  orized}}.do_test
6210: 20 61 75 74 68 2d 31 2e 31 36 37 20 7b 0a 20 20   auth-1.167 {.  
6220: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d  set ::authargs.}
6230: 20 7b 72 31 20 74 31 7d 0a 64 6f 5f 74 65 73 74   {r1 t1}.do_test
6240: 20 61 75 74 68 2d 31 2e 31 36 38 20 7b 0a 20 20   auth-1.168 {.  
6250: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
6260: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
6270: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d 20  _temp_master}.} 
6280: 7b 74 31 20 72 31 7d 0a 64 6f 5f 74 65 73 74 20  {t1 r1}.do_test 
6290: 61 75 74 68 2d 31 2e 31 36 39 20 7b 0a 20 20 70  auth-1.169 {.  p
62a0: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
62b0: 72 67 31 20 61 72 67 32 7d 20 7b 0a 20 20 20 20  rg1 arg2} {.    
62c0: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
62d0: 54 45 5f 44 45 4c 45 54 45 22 20 26 26 20 24 61  TE_DELETE" && $a
62e0: 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 74 65 6d  rg1=="sqlite_tem
62f0: 70 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20  p_master"} {.   
6300: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
6310: 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20  _IGNORE.    }.  
6320: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
6330: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
6340: 6c 20 7b 44 52 4f 50 20 54 52 49 47 47 45 52 20  l {DROP TRIGGER 
6350: 72 31 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f  r1}.} {0 {}}.do_
6360: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 37 30 20  test auth-1.170 
6370: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
6380: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
6390: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
63a0: 7d 0a 7d 20 7b 74 31 20 72 31 7d 0a 64 6f 5f 74  }.} {t1 r1}.do_t
63b0: 65 73 74 20 61 75 74 68 2d 31 2e 31 37 31 20 7b  est auth-1.171 {
63c0: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
63d0: 64 65 20 61 72 67 31 20 61 72 67 32 7d 20 7b 0a  de arg1 arg2} {.
63e0: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
63f0: 53 51 4c 49 54 45 5f 44 52 4f 50 5f 54 45 4d 50  SQLITE_DROP_TEMP
6400: 5f 54 52 49 47 47 45 52 22 7d 20 7b 0a 20 20 20  _TRIGGER"} {.   
6410: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
6420: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
6430: 72 67 32 5d 0a 20 20 20 20 20 20 72 65 74 75 72  rg2].      retur
6440: 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a  n SQLITE_IGNORE.
6450: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
6460: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
6470: 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20   catchsql {DROP 
6480: 54 52 49 47 47 45 52 20 72 31 7d 0a 7d 20 7b 30  TRIGGER r1}.} {0
6490: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
64a0: 68 2d 31 2e 31 37 32 20 7b 0a 20 20 73 65 74 20  h-1.172 {.  set 
64b0: 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 72 31  ::authargs.} {r1
64c0: 20 74 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   t1}.do_test aut
64d0: 68 2d 31 2e 31 37 33 20 7b 0a 20 20 65 78 65 63  h-1.173 {.  exec
64e0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
64f0: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d   FROM sqlite_tem
6500: 70 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31 20  p_master}.} {t1 
6510: 72 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  r1}.do_test auth
6520: 2d 31 2e 31 37 34 20 7b 0a 20 20 70 72 6f 63 20  -1.174 {.  proc 
6530: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
6540: 61 72 67 32 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg2} {.    if {
6550: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44  $code=="SQLITE_D
6560: 52 4f 50 5f 54 45 4d 50 5f 54 52 49 47 47 45 52  ROP_TEMP_TRIGGER
6570: 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a  "} {.      set :
6580: 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20  :authargs [list 
6590: 24 61 72 67 31 20 24 61 72 67 32 5d 0a 20 20 20  $arg1 $arg2].   
65a0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
65b0: 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  _OK.    }.    re
65c0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
65d0: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44   }.  catchsql {D
65e0: 52 4f 50 20 54 52 49 47 47 45 52 20 72 31 7d 0a  ROP TRIGGER r1}.
65f0: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
6600: 20 61 75 74 68 2d 31 2e 31 37 35 20 7b 0a 20 20   auth-1.175 {.  
6610: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d  set ::authargs.}
6620: 20 7b 72 31 20 74 31 7d 0a 64 6f 5f 74 65 73 74   {r1 t1}.do_test
6630: 20 61 75 74 68 2d 31 2e 31 37 36 20 7b 0a 20 20   auth-1.176 {.  
6640: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
6650: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
6660: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d 20  _temp_master}.} 
6670: 7b 74 31 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 75  {t1}..do_test au
6680: 74 68 2d 31 2e 31 37 37 20 7b 0a 20 20 70 72 6f  th-1.177 {.  pro
6690: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
66a0: 31 20 61 72 67 32 7d 20 7b 0a 20 20 20 20 69 66  1 arg2} {.    if
66b0: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
66c0: 5f 43 52 45 41 54 45 5f 49 4e 44 45 58 22 7d 20  _CREATE_INDEX"} 
66d0: 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75  {.      set ::au
66e0: 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72  thargs [list $ar
66f0: 67 31 20 24 61 72 67 32 5d 0a 20 20 20 20 20 20  g1 $arg2].      
6700: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45  return SQLITE_DE
6710: 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  NY.    }.    ret
6720: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
6730: 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52  }.  catchsql {CR
6740: 45 41 54 45 20 49 4e 44 45 58 20 69 32 20 4f 4e  EATE INDEX i2 ON
6750: 20 74 32 28 61 29 7d 0a 7d 20 7b 31 20 7b 6e 6f   t2(a)}.} {1 {no
6760: 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64  t authorized}}.d
6770: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 37  o_test auth-1.17
6780: 38 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68  8 {.  set ::auth
6790: 61 72 67 73 0a 7d 20 7b 69 32 20 74 32 7d 0a 64  args.} {i2 t2}.d
67a0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 37  o_test auth-1.17
67b0: 39 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  9 {.  execsql {S
67c0: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
67d0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d  sqlite_master}.}
67e0: 20 7b 74 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75   {t2}.do_test au
67f0: 74 68 2d 31 2e 31 38 30 20 7b 0a 20 20 70 72 6f  th-1.180 {.  pro
6800: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
6810: 31 20 61 72 67 32 7d 20 7b 0a 20 20 20 20 69 66  1 arg2} {.    if
6820: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
6830: 5f 49 4e 53 45 52 54 22 20 26 26 20 24 61 72 67  _INSERT" && $arg
6840: 31 3d 3d 22 73 71 6c 69 74 65 5f 6d 61 73 74 65  1=="sqlite_maste
6850: 72 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75  r"} {.      retu
6860: 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20  rn SQLITE_DENY. 
6870: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
6880: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
6890: 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45  catchsql {CREATE
68a0: 20 49 4e 44 45 58 20 69 32 20 4f 4e 20 74 32 28   INDEX i2 ON t2(
68b0: 61 29 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75  a)}.} {1 {not au
68c0: 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65  thorized}}.do_te
68d0: 73 74 20 61 75 74 68 2d 31 2e 31 38 31 20 7b 0a  st auth-1.181 {.
68e0: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
68f0: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
6900: 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32  te_master}.} {t2
6910: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
6920: 2e 31 38 32 20 7b 0a 20 20 70 72 6f 63 20 61 75  .182 {.  proc au
6930: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
6940: 67 32 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g2} {.    if {$c
6950: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52 45  ode=="SQLITE_CRE
6960: 41 54 45 5f 49 4e 44 45 58 22 7d 20 7b 0a 20 20  ATE_INDEX"} {.  
6970: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
6980: 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24  gs [list $arg1 $
6990: 61 72 67 32 5d 0a 20 20 20 20 20 20 72 65 74 75  arg2].      retu
69a0: 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45  rn SQLITE_IGNORE
69b0: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
69c0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
69d0: 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41    catchsql {CREA
69e0: 54 45 20 49 4e 44 45 58 20 69 32 20 4f 4e 20 74  TE INDEX i2 ON t
69f0: 32 28 62 29 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  2(b)}.} {0 {}}.d
6a00: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 38  o_test auth-1.18
6a10: 33 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68  3 {.  set ::auth
6a20: 61 72 67 73 0a 7d 20 7b 69 32 20 74 32 7d 0a 64  args.} {i2 t2}.d
6a30: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 38  o_test auth-1.18
6a40: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  4 {.  execsql {S
6a50: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
6a60: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d  sqlite_master}.}
6a70: 20 7b 74 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75   {t2}.do_test au
6a80: 74 68 2d 31 2e 31 38 35 20 7b 0a 20 20 70 72 6f  th-1.185 {.  pro
6a90: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
6aa0: 31 20 61 72 67 32 7d 20 7b 0a 20 20 20 20 69 66  1 arg2} {.    if
6ab0: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
6ac0: 5f 49 4e 53 45 52 54 22 20 26 26 20 24 61 72 67  _INSERT" && $arg
6ad0: 31 3d 3d 22 73 71 6c 69 74 65 5f 6d 61 73 74 65  1=="sqlite_maste
6ae0: 72 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75  r"} {.      retu
6af0: 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45  rn SQLITE_IGNORE
6b00: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
6b10: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
6b20: 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41    catchsql {CREA
6b30: 54 45 20 49 4e 44 45 58 20 69 32 20 4f 4e 20 74  TE INDEX i2 ON t
6b40: 32 28 62 29 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  2(b)}.} {0 {}}.d
6b50: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 38  o_test auth-1.18
6b60: 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  6 {.  execsql {S
6b70: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
6b80: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d  sqlite_master}.}
6b90: 20 7b 74 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75   {t2}.do_test au
6ba0: 74 68 2d 31 2e 31 38 37 20 7b 0a 20 20 70 72 6f  th-1.187 {.  pro
6bb0: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
6bc0: 31 20 61 72 67 32 7d 20 7b 0a 20 20 20 20 69 66  1 arg2} {.    if
6bd0: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
6be0: 5f 43 52 45 41 54 45 5f 49 4e 44 45 58 22 7d 20  _CREATE_INDEX"} 
6bf0: 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75  {.      set ::au
6c00: 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72  thargs [list $ar
6c10: 67 31 20 24 61 72 67 32 5d 0a 20 20 20 20 20 20  g1 $arg2].      
6c20: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
6c30: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
6c40: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
6c50: 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41    catchsql {CREA
6c60: 54 45 20 49 4e 44 45 58 20 69 32 20 4f 4e 20 74  TE INDEX i2 ON t
6c70: 32 28 61 29 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  2(a)}.} {0 {}}.d
6c80: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 38  o_test auth-1.18
6c90: 38 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68  8 {.  set ::auth
6ca0: 61 72 67 73 0a 7d 20 7b 69 32 20 74 32 7d 0a 64  args.} {i2 t2}.d
6cb0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 38  o_test auth-1.18
6cc0: 39 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  9 {.  execsql {S
6cd0: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
6ce0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d  sqlite_master}.}
6cf0: 20 7b 74 32 20 69 32 7d 0a 0a 64 6f 5f 74 65 73   {t2 i2}..do_tes
6d00: 74 20 61 75 74 68 2d 31 2e 31 39 30 20 7b 0a 20  t auth-1.190 {. 
6d10: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
6d20: 20 61 72 67 31 20 61 72 67 32 7d 20 7b 0a 20 20   arg1 arg2} {.  
6d30: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
6d40: 4c 49 54 45 5f 43 52 45 41 54 45 5f 54 45 4d 50  LITE_CREATE_TEMP
6d50: 5f 49 4e 44 45 58 22 7d 20 7b 0a 20 20 20 20 20  _INDEX"} {.     
6d60: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
6d70: 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67  [list $arg1 $arg
6d80: 32 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  2].      return 
6d90: 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20  SQLITE_DENY.    
6da0: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
6db0: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
6dc0: 63 68 73 71 6c 20 7b 43 52 45 41 54 45 20 49 4e  chsql {CREATE IN
6dd0: 44 45 58 20 69 31 20 4f 4e 20 74 31 28 61 29 7d  DEX i1 ON t1(a)}
6de0: 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f  .} {1 {not autho
6df0: 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20  rized}}.do_test 
6e00: 61 75 74 68 2d 31 2e 31 39 31 20 7b 0a 20 20 73  auth-1.191 {.  s
6e10: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20  et ::authargs.} 
6e20: 7b 69 31 20 74 31 7d 0a 64 6f 5f 74 65 73 74 20  {i1 t1}.do_test 
6e30: 61 75 74 68 2d 31 2e 31 39 32 20 7b 0a 20 20 65  auth-1.192 {.  e
6e40: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
6e50: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
6e60: 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b  temp_master}.} {
6e70: 74 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  t1}.do_test auth
6e80: 2d 31 2e 31 39 33 20 7b 0a 20 20 70 72 6f 63 20  -1.193 {.  proc 
6e90: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
6ea0: 61 72 67 32 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg2} {.    if {
6eb0: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 49  $code=="SQLITE_I
6ec0: 4e 53 45 52 54 22 20 26 26 20 24 61 72 67 31 3d  NSERT" && $arg1=
6ed0: 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  ="sqlite_temp_ma
6ee0: 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 72  ster"} {.      r
6ef0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e  eturn SQLITE_DEN
6f00: 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  Y.    }.    retu
6f10: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
6f20: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45  .  catchsql {CRE
6f30: 41 54 45 20 49 4e 44 45 58 20 69 31 20 4f 4e 20  ATE INDEX i1 ON 
6f40: 74 31 28 62 29 7d 0a 7d 20 7b 31 20 7b 6e 6f 74  t1(b)}.} {1 {not
6f50: 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f   authorized}}.do
6f60: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 39 34  _test auth-1.194
6f70: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
6f80: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73  LECT name FROM s
6f90: 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
6fa0: 72 7d 0a 7d 20 7b 74 31 7d 0a 64 6f 5f 74 65 73  r}.} {t1}.do_tes
6fb0: 74 20 61 75 74 68 2d 31 2e 31 39 35 20 7b 0a 20  t auth-1.195 {. 
6fc0: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
6fd0: 20 61 72 67 31 20 61 72 67 32 7d 20 7b 0a 20 20   arg1 arg2} {.  
6fe0: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
6ff0: 4c 49 54 45 5f 43 52 45 41 54 45 5f 54 45 4d 50  LITE_CREATE_TEMP
7000: 5f 49 4e 44 45 58 22 7d 20 7b 0a 20 20 20 20 20  _INDEX"} {.     
7010: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
7020: 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67  [list $arg1 $arg
7030: 32 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  2].      return 
7040: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20  SQLITE_IGNORE.  
7050: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
7060: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
7070: 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45 20  atchsql {CREATE 
7080: 49 4e 44 45 58 20 69 31 20 4f 4e 20 74 31 28 62  INDEX i1 ON t1(b
7090: 29 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74  )}.} {0 {}}.do_t
70a0: 65 73 74 20 61 75 74 68 2d 31 2e 31 39 36 20 7b  est auth-1.196 {
70b0: 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67  .  set ::autharg
70c0: 73 0a 7d 20 7b 69 31 20 74 31 7d 0a 64 6f 5f 74  s.} {i1 t1}.do_t
70d0: 65 73 74 20 61 75 74 68 2d 31 2e 31 39 37 20 7b  est auth-1.197 {
70e0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
70f0: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
7100: 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d  ite_temp_master}
7110: 0a 7d 20 7b 74 31 7d 0a 64 6f 5f 74 65 73 74 20  .} {t1}.do_test 
7120: 61 75 74 68 2d 31 2e 31 39 38 20 7b 0a 20 20 70  auth-1.198 {.  p
7130: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
7140: 72 67 31 20 61 72 67 32 7d 20 7b 0a 20 20 20 20  rg1 arg2} {.    
7150: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
7160: 54 45 5f 49 4e 53 45 52 54 22 20 26 26 20 24 61  TE_INSERT" && $a
7170: 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 74 65 6d  rg1=="sqlite_tem
7180: 70 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20  p_master"} {.   
7190: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
71a0: 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20  _IGNORE.    }.  
71b0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
71c0: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
71d0: 6c 20 7b 43 52 45 41 54 45 20 49 4e 44 45 58 20  l {CREATE INDEX 
71e0: 69 31 20 4f 4e 20 74 31 28 63 29 7d 0a 7d 20 7b  i1 ON t1(c)}.} {
71f0: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  0 {}}.do_test au
7200: 74 68 2d 31 2e 31 39 39 20 7b 0a 20 20 65 78 65  th-1.199 {.  exe
7210: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d  csql {SELECT nam
7220: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65  e FROM sqlite_te
7230: 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31  mp_master}.} {t1
7240: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
7250: 2e 32 30 30 20 7b 0a 20 20 70 72 6f 63 20 61 75  .200 {.  proc au
7260: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
7270: 67 32 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g2} {.    if {$c
7280: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52 45  ode=="SQLITE_CRE
7290: 41 54 45 5f 54 45 4d 50 5f 49 4e 44 45 58 22 7d  ATE_TEMP_INDEX"}
72a0: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61   {.      set ::a
72b0: 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61  uthargs [list $a
72c0: 72 67 31 20 24 61 72 67 32 5d 0a 20 20 20 20 20  rg1 $arg2].     
72d0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
72e0: 4b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  K.    }.    retu
72f0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
7300: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45  .  catchsql {CRE
7310: 41 54 45 20 49 4e 44 45 58 20 69 31 20 4f 4e 20  ATE INDEX i1 ON 
7320: 74 31 28 61 29 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a  t1(a)}.} {0 {}}.
7330: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
7340: 30 31 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74  01 {.  set ::aut
7350: 68 61 72 67 73 0a 7d 20 7b 69 31 20 74 31 7d 0a  hargs.} {i1 t1}.
7360: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
7370: 30 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  02 {.  execsql {
7380: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
7390: 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73   sqlite_temp_mas
73a0: 74 65 72 7d 0a 7d 20 7b 74 31 20 69 31 7d 0a 0a  ter}.} {t1 i1}..
73b0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
73c0: 30 33 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  03 {.  proc auth
73d0: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
73e0: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
73f0: 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45 54  e=="SQLITE_DELET
7400: 45 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71  E" && $arg1=="sq
7410: 6c 69 74 65 5f 6d 61 73 74 65 72 22 7d 20 7b 0a  lite_master"} {.
7420: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
7430: 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20  ITE_DENY.    }. 
7440: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
7450: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
7460: 71 6c 20 7b 44 52 4f 50 20 49 4e 44 45 58 20 69  ql {DROP INDEX i
7470: 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74  2}.} {1 {not aut
7480: 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73  horized}}.do_tes
7490: 74 20 61 75 74 68 2d 31 2e 32 30 34 20 7b 0a 20  t auth-1.204 {. 
74a0: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
74b0: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
74c0: 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 20  e_master}.} {t2 
74d0: 69 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  i2}.do_test auth
74e0: 2d 31 2e 32 30 35 20 7b 0a 20 20 70 72 6f 63 20  -1.205 {.  proc 
74f0: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
7500: 61 72 67 32 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg2} {.    if {
7510: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44  $code=="SQLITE_D
7520: 52 4f 50 5f 49 4e 44 45 58 22 7d 20 7b 0a 20 20  ROP_INDEX"} {.  
7530: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
7540: 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24  gs [list $arg1 $
7550: 61 72 67 32 5d 0a 20 20 20 20 20 20 72 65 74 75  arg2].      retu
7560: 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20  rn SQLITE_DENY. 
7570: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
7580: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
7590: 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 49  catchsql {DROP I
75a0: 4e 44 45 58 20 69 32 7d 0a 7d 20 7b 31 20 7b 6e  NDEX i2}.} {1 {n
75b0: 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a  ot authorized}}.
75c0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
75d0: 30 36 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74  06 {.  set ::aut
75e0: 68 61 72 67 73 0a 7d 20 7b 69 32 20 74 32 7d 0a  hargs.} {i2 t2}.
75f0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
7600: 30 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  07 {.  execsql {
7610: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
7620: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a   sqlite_master}.
7630: 7d 20 7b 74 32 20 69 32 7d 0a 64 6f 5f 74 65 73  } {t2 i2}.do_tes
7640: 74 20 61 75 74 68 2d 31 2e 32 30 38 20 7b 0a 20  t auth-1.208 {. 
7650: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
7660: 20 61 72 67 31 20 61 72 67 32 7d 20 7b 0a 20 20   arg1 arg2} {.  
7670: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
7680: 4c 49 54 45 5f 44 45 4c 45 54 45 22 20 26 26 20  LITE_DELETE" && 
7690: 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 6d  $arg1=="sqlite_m
76a0: 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20  aster"} {.      
76b0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47  return SQLITE_IG
76c0: 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72  NORE.    }.    r
76d0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
76e0: 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b    }.  catchsql {
76f0: 44 52 4f 50 20 49 4e 44 45 58 20 69 32 7d 0a 7d  DROP INDEX i2}.}
7700: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
7710: 61 75 74 68 2d 31 2e 32 30 39 20 7b 0a 20 20 65  auth-1.209 {.  e
7720: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
7730: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
7740: 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 20 69 32  master}.} {t2 i2
7750: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
7760: 2e 32 31 30 20 7b 0a 20 20 70 72 6f 63 20 61 75  .210 {.  proc au
7770: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
7780: 67 32 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g2} {.    if {$c
7790: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f  ode=="SQLITE_DRO
77a0: 50 5f 49 4e 44 45 58 22 7d 20 7b 0a 20 20 20 20  P_INDEX"} {.    
77b0: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
77c0: 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72   [list $arg1 $ar
77d0: 67 32 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  g2].      return
77e0: 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20   SQLITE_IGNORE. 
77f0: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
7800: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
7810: 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 49  catchsql {DROP I
7820: 4e 44 45 58 20 69 32 7d 0a 7d 20 7b 30 20 7b 7d  NDEX i2}.} {0 {}
7830: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
7840: 2e 32 31 31 20 7b 0a 20 20 73 65 74 20 3a 3a 61  .211 {.  set ::a
7850: 75 74 68 61 72 67 73 0a 7d 20 7b 69 32 20 74 32  uthargs.} {i2 t2
7860: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
7870: 2e 32 31 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  .212 {.  execsql
7880: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
7890: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
78a0: 7d 0a 7d 20 7b 74 32 20 69 32 7d 0a 64 6f 5f 74  }.} {t2 i2}.do_t
78b0: 65 73 74 20 61 75 74 68 2d 31 2e 32 31 33 20 7b  est auth-1.213 {
78c0: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
78d0: 64 65 20 61 72 67 31 20 61 72 67 32 7d 20 7b 0a  de arg1 arg2} {.
78e0: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
78f0: 53 51 4c 49 54 45 5f 44 52 4f 50 5f 49 4e 44 45  SQLITE_DROP_INDE
7900: 58 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20  X"} {.      set 
7910: 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74  ::authargs [list
7920: 20 24 61 72 67 31 20 24 61 72 67 32 5d 0a 20 20   $arg1 $arg2].  
7930: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
7940: 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 72  E_OK.    }.    r
7950: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
7960: 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b    }.  catchsql {
7970: 44 52 4f 50 20 49 4e 44 45 58 20 69 32 7d 0a 7d  DROP INDEX i2}.}
7980: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
7990: 61 75 74 68 2d 31 2e 32 31 34 20 7b 0a 20 20 73  auth-1.214 {.  s
79a0: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20  et ::authargs.} 
79b0: 7b 69 32 20 74 32 7d 0a 64 6f 5f 74 65 73 74 20  {i2 t2}.do_test 
79c0: 61 75 74 68 2d 31 2e 32 31 35 20 7b 0a 20 20 65  auth-1.215 {.  e
79d0: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
79e0: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
79f0: 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a 0a  master}.} {t2}..
7a00: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
7a10: 31 36 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  16 {.  proc auth
7a20: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
7a30: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
7a40: 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45 54  e=="SQLITE_DELET
7a50: 45 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71  E" && $arg1=="sq
7a60: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
7a70: 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72  "} {.      retur
7a80: 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20  n SQLITE_DENY.  
7a90: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
7aa0: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
7ab0: 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 49 4e  atchsql {DROP IN
7ac0: 44 45 58 20 69 31 7d 0a 7d 20 7b 31 20 7b 6e 6f  DEX i1}.} {1 {no
7ad0: 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64  t authorized}}.d
7ae0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 31  o_test auth-1.21
7af0: 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  7 {.  execsql {S
7b00: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
7b10: 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
7b20: 65 72 7d 0a 7d 20 7b 74 31 20 69 31 7d 0a 64 6f  er}.} {t1 i1}.do
7b30: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 31 38  _test auth-1.218
7b40: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
7b50: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 7d 20  code arg1 arg2} 
7b60: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
7b70: 3d 22 53 51 4c 49 54 45 5f 44 52 4f 50 5f 54 45  ="SQLITE_DROP_TE
7b80: 4d 50 5f 49 4e 44 45 58 22 7d 20 7b 0a 20 20 20  MP_INDEX"} {.   
7b90: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
7ba0: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
7bb0: 72 67 32 5d 0a 20 20 20 20 20 20 72 65 74 75 72  rg2].      retur
7bc0: 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20  n SQLITE_DENY.  
7bd0: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
7be0: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
7bf0: 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 49 4e  atchsql {DROP IN
7c00: 44 45 58 20 69 31 7d 0a 7d 20 7b 31 20 7b 6e 6f  DEX i1}.} {1 {no
7c10: 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64  t authorized}}.d
7c20: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 31  o_test auth-1.21
7c30: 39 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68  9 {.  set ::auth
7c40: 61 72 67 73 0a 7d 20 7b 69 31 20 74 31 7d 0a 64  args.} {i1 t1}.d
7c50: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 32  o_test auth-1.22
7c60: 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  0 {.  execsql {S
7c70: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
7c80: 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
7c90: 65 72 7d 0a 7d 20 7b 74 31 20 69 31 7d 0a 64 6f  er}.} {t1 i1}.do
7ca0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 32 31  _test auth-1.221
7cb0: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
7cc0: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 7d 20  code arg1 arg2} 
7cd0: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
7ce0: 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 22  ="SQLITE_DELETE"
7cf0: 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69   && $arg1=="sqli
7d00: 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 7d  te_temp_master"}
7d10: 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   {.      return 
7d20: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20  SQLITE_IGNORE.  
7d30: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
7d40: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
7d50: 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 49 4e  atchsql {DROP IN
7d60: 44 45 58 20 69 31 7d 0a 7d 20 7b 30 20 7b 7d 7d  DEX i1}.} {0 {}}
7d70: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
7d80: 32 32 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  222 {.  execsql 
7d90: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
7da0: 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  M sqlite_temp_ma
7db0: 73 74 65 72 7d 0a 7d 20 7b 74 31 20 69 31 7d 0a  ster}.} {t1 i1}.
7dc0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
7dd0: 32 33 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  23 {.  proc auth
7de0: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
7df0: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
7e00: 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f 50 5f  e=="SQLITE_DROP_
7e10: 54 45 4d 50 5f 49 4e 44 45 58 22 7d 20 7b 0a 20  TEMP_INDEX"} {. 
7e20: 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61       set ::autha
7e30: 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20  rgs [list $arg1 
7e40: 24 61 72 67 32 5d 0a 20 20 20 20 20 20 72 65 74  $arg2].      ret
7e50: 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52  urn SQLITE_IGNOR
7e60: 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  E.    }.    retu
7e70: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
7e80: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f  .  catchsql {DRO
7e90: 50 20 49 4e 44 45 58 20 69 31 7d 0a 7d 20 7b 30  P INDEX i1}.} {0
7ea0: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
7eb0: 68 2d 31 2e 32 32 34 20 7b 0a 20 20 73 65 74 20  h-1.224 {.  set 
7ec0: 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 69 31  ::authargs.} {i1
7ed0: 20 74 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   t1}.do_test aut
7ee0: 68 2d 31 2e 32 32 35 20 7b 0a 20 20 65 78 65 63  h-1.225 {.  exec
7ef0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
7f00: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d   FROM sqlite_tem
7f10: 70 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31 20  p_master}.} {t1 
7f20: 69 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  i1}.do_test auth
7f30: 2d 31 2e 32 32 36 20 7b 0a 20 20 70 72 6f 63 20  -1.226 {.  proc 
7f40: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
7f50: 61 72 67 32 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg2} {.    if {
7f60: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44  $code=="SQLITE_D
7f70: 52 4f 50 5f 54 45 4d 50 5f 49 4e 44 45 58 22 7d  ROP_TEMP_INDEX"}
7f80: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61   {.      set ::a
7f90: 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61  uthargs [list $a
7fa0: 72 67 31 20 24 61 72 67 32 5d 0a 20 20 20 20 20  rg1 $arg2].     
7fb0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
7fc0: 4b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  K.    }.    retu
7fd0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
7fe0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f  .  catchsql {DRO
7ff0: 50 20 49 4e 44 45 58 20 69 31 7d 0a 7d 20 7b 30  P INDEX i1}.} {0
8000: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
8010: 68 2d 31 2e 32 32 37 20 7b 0a 20 20 73 65 74 20  h-1.227 {.  set 
8020: 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 69 31  ::authargs.} {i1
8030: 20 74 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   t1}.do_test aut
8040: 68 2d 31 2e 32 32 38 20 7b 0a 20 20 65 78 65 63  h-1.228 {.  exec
8050: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
8060: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d   FROM sqlite_tem
8070: 70 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31 7d  p_master}.} {t1}
8080: 0a 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  ..do_test auth-1
8090: 2e 32 32 39 20 7b 0a 20 20 70 72 6f 63 20 61 75  .229 {.  proc au
80a0: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
80b0: 67 32 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g2} {.    if {$c
80c0: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 50 52 41  ode=="SQLITE_PRA
80d0: 47 4d 41 22 7d 20 7b 0a 20 20 20 20 20 20 73 65  GMA"} {.      se
80e0: 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69  t ::authargs [li
80f0: 73 74 20 24 61 72 67 31 20 24 61 72 67 32 5d 0a  st $arg1 $arg2].
8100: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
8110: 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20  ITE_DENY.    }. 
8120: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
8130: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
8140: 71 6c 20 7b 50 52 41 47 4d 41 20 66 75 6c 6c 5f  ql {PRAGMA full_
8150: 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 3d 6f 6e 7d  column_names=on}
8160: 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f  .} {1 {not autho
8170: 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20  rized}}.do_test 
8180: 61 75 74 68 2d 31 2e 32 33 30 20 7b 0a 20 20 73  auth-1.230 {.  s
8190: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20  et ::authargs.} 
81a0: 7b 66 75 6c 6c 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d  {full_column_nam
81b0: 65 73 20 6f 6e 7d 0a 64 6f 5f 74 65 73 74 20 61  es on}.do_test a
81c0: 75 74 68 2d 31 2e 32 33 31 20 7b 0a 20 20 65 78  uth-1.231 {.  ex
81d0: 65 63 73 71 6c 32 20 7b 53 45 4c 45 43 54 20 61  ecsql2 {SELECT a
81e0: 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 61 20 31   FROM t2}.} {a 1
81f0: 31 20 61 20 37 7d 0a 64 6f 5f 74 65 73 74 20 61  1 a 7}.do_test a
8200: 75 74 68 2d 31 2e 32 33 32 20 7b 0a 20 20 70 72  uth-1.232 {.  pr
8210: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
8220: 67 31 20 61 72 67 32 7d 20 7b 0a 20 20 20 20 69  g1 arg2} {.    i
8230: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
8240: 45 5f 50 52 41 47 4d 41 22 7d 20 7b 0a 20 20 20  E_PRAGMA"} {.   
8250: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
8260: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
8270: 72 67 32 5d 0a 20 20 20 20 20 20 72 65 74 75 72  rg2].      retur
8280: 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a  n SQLITE_IGNORE.
8290: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
82a0: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
82b0: 20 63 61 74 63 68 73 71 6c 20 7b 50 52 41 47 4d   catchsql {PRAGM
82c0: 41 20 66 75 6c 6c 5f 63 6f 6c 75 6d 6e 5f 6e 61  A full_column_na
82d0: 6d 65 73 3d 6f 6e 7d 0a 7d 20 7b 30 20 7b 7d 7d  mes=on}.} {0 {}}
82e0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
82f0: 32 33 33 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75  233 {.  set ::au
8300: 74 68 61 72 67 73 0a 7d 20 7b 66 75 6c 6c 5f 63  thargs.} {full_c
8310: 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 20 6f 6e 7d 0a  olumn_names on}.
8320: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
8330: 33 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 32 20  34 {.  execsql2 
8340: 7b 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74  {SELECT a FROM t
8350: 32 7d 0a 7d 20 7b 61 20 31 31 20 61 20 37 7d 0a  2}.} {a 11 a 7}.
8360: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
8370: 33 35 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  35 {.  proc auth
8380: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
8390: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
83a0: 65 3d 3d 22 53 51 4c 49 54 45 5f 50 52 41 47 4d  e=="SQLITE_PRAGM
83b0: 41 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20  A"} {.      set 
83c0: 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74  ::authargs [list
83d0: 20 24 61 72 67 31 20 24 61 72 67 32 5d 0a 20 20   $arg1 $arg2].  
83e0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
83f0: 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 72  E_OK.    }.    r
8400: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
8410: 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b    }.  catchsql {
8420: 50 52 41 47 4d 41 20 66 75 6c 6c 5f 63 6f 6c 75  PRAGMA full_colu
8430: 6d 6e 5f 6e 61 6d 65 73 3d 6f 6e 7d 0a 7d 20 7b  mn_names=on}.} {
8440: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  0 {}}.do_test au
8450: 74 68 2d 31 2e 32 33 36 20 7b 0a 20 20 65 78 65  th-1.236 {.  exe
8460: 63 73 71 6c 32 20 7b 53 45 4c 45 43 54 20 61 20  csql2 {SELECT a 
8470: 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 74 32 2e 61  FROM t2}.} {t2.a
8480: 20 31 31 20 74 32 2e 61 20 37 7d 0a 64 6f 5f 74   11 t2.a 7}.do_t
8490: 65 73 74 20 61 75 74 68 2d 31 2e 32 33 37 20 7b  est auth-1.237 {
84a0: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
84b0: 64 65 20 61 72 67 31 20 61 72 67 32 7d 20 7b 0a  de arg1 arg2} {.
84c0: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
84d0: 53 51 4c 49 54 45 5f 50 52 41 47 4d 41 22 7d 20  SQLITE_PRAGMA"} 
84e0: 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75  {.      set ::au
84f0: 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72  thargs [list $ar
8500: 67 31 20 24 61 72 67 32 5d 0a 20 20 20 20 20 20  g1 $arg2].      
8510: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
8520: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
8530: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
8540: 20 20 63 61 74 63 68 73 71 6c 20 7b 50 52 41 47    catchsql {PRAG
8550: 4d 41 20 66 75 6c 6c 5f 63 6f 6c 75 6d 6e 5f 6e  MA full_column_n
8560: 61 6d 65 73 3d 4f 46 46 7d 0a 7d 20 7b 30 20 7b  ames=OFF}.} {0 {
8570: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
8580: 31 2e 32 33 38 20 7b 0a 20 20 73 65 74 20 3a 3a  1.238 {.  set ::
8590: 61 75 74 68 61 72 67 73 0a 7d 20 7b 66 75 6c 6c  authargs.} {full
85a0: 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 20 4f 46  _column_names OF
85b0: 46 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  F}.do_test auth-
85c0: 31 2e 32 33 39 20 7b 0a 20 20 65 78 65 63 73 71  1.239 {.  execsq
85d0: 6c 32 20 7b 53 45 4c 45 43 54 20 61 20 46 52 4f  l2 {SELECT a FRO
85e0: 4d 20 74 32 7d 0a 7d 20 7b 61 20 31 31 20 61 20  M t2}.} {a 11 a 
85f0: 37 7d 0a 0a 0a 7d 20 3b 23 20 45 6e 64 20 6f 66  7}...} ;# End of
8600: 20 74 68 65 20 22 69 66 28 20 64 62 20 63 6f 6d   the "if( db com
8610: 6d 61 6e 64 20 65 78 69 73 74 73 20 29 22 0a 0a  mand exists )"..
8620: 66 69 6e 69 73 68 5f 74 65 73 74 0a              finish_test.