/ Hex Artifact Content
Login

Artifact ecc43fc5605ec562ef73874aa803d18c12d20fa6:


0000: 23 20 32 30 30 33 20 41 70 72 69 6c 20 34 0a 23  # 2003 April 4.#
0010: 0a 23 20 54 68 65 20 61 75 74 68 6f 72 20 64 69  .# The author di
0020: 73 63 6c 61 69 6d 73 20 63 6f 70 79 72 69 67 68  sclaims copyrigh
0030: 74 20 74 6f 20 74 68 69 73 20 73 6f 75 72 63 65  t to this source
0040: 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63 65   code.  In place
0050: 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e 6f   of.# a legal no
0060: 74 69 63 65 2c 20 68 65 72 65 20 69 73 20 61 20  tice, here is a 
0070: 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20 20  blessing:.#.#   
0080: 20 4d 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64   May you do good
0090: 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 23   and not evil..#
00a0: 20 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64      May you find
00b0: 20 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72   forgiveness for
00c0: 20 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f   yourself and fo
00d0: 72 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 23 20  rgive others..# 
00e0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
00f0: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0100: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0110: 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23 2a 2a 2a  you give..#.#***
0120: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 0a 23 20 54 68 69 73 20 66 69 6c 65  ****.# This file
0170: 20 69 6d 70 6c 65 6d 65 6e 74 73 20 72 65 67 72   implements regr
0180: 65 73 73 69 6f 6e 20 74 65 73 74 73 20 66 6f 72  ession tests for
0190: 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e   SQLite library.
01a0: 20 20 54 68 65 0a 23 20 66 6f 63 75 73 20 6f 66    The.# focus of
01b0: 20 74 68 69 73 20 73 63 72 69 70 74 20 69 73 20   this script is 
01c0: 74 65 73 74 69 6e 67 20 74 68 65 20 41 54 54 41  testing the ATTA
01d0: 43 48 20 61 6e 64 20 44 45 54 41 43 48 20 63 6f  CH and DETACH co
01e0: 6d 6d 61 6e 64 73 0a 23 20 61 6e 64 20 72 65 6c  mmands.# and rel
01f0: 61 74 65 64 20 66 75 6e 63 74 69 6f 6e 61 6c 69  ated functionali
0200: 74 79 2e 0a 23 0a 23 20 24 49 64 3a 20 61 75 74  ty..#.# $Id: aut
0210: 68 2e 74 65 73 74 2c 76 20 31 2e 32 34 20 32 30  h.test,v 1.24 20
0220: 30 34 2f 31 31 2f 32 33 20 31 30 3a 31 33 3a 30  04/11/23 10:13:0
0230: 33 20 64 61 6e 69 65 6c 6b 31 39 37 37 20 45 78  3 danielk1977 Ex
0240: 70 20 24 0a 23 0a 0a 73 65 74 20 74 65 73 74 64  p $.#..set testd
0250: 69 72 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65  ir [file dirname
0260: 20 24 61 72 67 76 30 5d 0a 73 6f 75 72 63 65 20   $argv0].source 
0270: 24 74 65 73 74 64 69 72 2f 74 65 73 74 65 72 2e  $testdir/tester.
0280: 74 63 6c 0a 0a 23 20 64 69 73 61 62 6c 65 20 74  tcl..# disable t
0290: 68 69 73 20 74 65 73 74 20 69 66 20 74 68 65 20  his test if the 
02a0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48  SQLITE_OMIT_AUTH
02b0: 4f 52 49 5a 41 54 49 4f 4e 20 6d 61 63 72 6f 20  ORIZATION macro 
02c0: 69 73 0a 23 20 64 65 66 69 6e 65 64 20 64 75 72  is.# defined dur
02d0: 69 6e 67 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 2e  ing compilation.
02e0: 0a 69 66 20 7b 5b 63 61 74 63 68 20 7b 64 62 20  .if {[catch {db 
02f0: 61 75 74 68 20 7b 7d 7d 20 6d 73 67 5d 7d 20 7b  auth {}} msg]} {
0300: 0a 20 20 66 69 6e 69 73 68 5f 74 65 73 74 0a 20  .  finish_test. 
0310: 20 72 65 74 75 72 6e 0a 7d 0a 0a 64 6f 5f 74 65   return.}..do_te
0320: 73 74 20 61 75 74 68 2d 31 2e 31 2e 31 20 7b 0a  st auth-1.1.1 {.
0330: 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 73 65 74    db close.  set
0340: 20 3a 3a 44 42 20 5b 73 71 6c 69 74 65 33 20 64   ::DB [sqlite3 d
0350: 62 20 74 65 73 74 2e 64 62 5d 0a 20 20 70 72 6f  b test.db].  pro
0360: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
0370: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
0380: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
0390: 65 3d 3d 22 53 51 4c 49 54 45 5f 49 4e 53 45 52  e=="SQLITE_INSER
03a0: 54 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71  T" && $arg1=="sq
03b0: 6c 69 74 65 5f 6d 61 73 74 65 72 22 7d 20 7b 0a  lite_master"} {.
03c0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
03d0: 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20  ITE_DENY.    }. 
03e0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
03f0: 5f 4f 4b 0a 20 20 7d 0a 20 20 64 62 20 61 75 74  _OK.  }.  db aut
0400: 68 6f 72 69 7a 65 72 20 3a 3a 61 75 74 68 0a 20  horizer ::auth. 
0410: 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54   catchsql {CREAT
0420: 45 20 54 41 42 4c 45 20 74 31 28 61 2c 62 2c 63  E TABLE t1(a,b,c
0430: 29 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74  )}.} {1 {not aut
0440: 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73  horized}}.do_tes
0450: 74 20 61 75 74 68 2d 31 2e 31 2e 32 20 7b 0a 20  t auth-1.1.2 {. 
0460: 20 64 62 20 65 72 72 6f 72 63 6f 64 65 0a 7d 20   db errorcode.} 
0470: 7b 32 33 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  {23}.do_test aut
0480: 68 2d 31 2e 31 2e 33 20 7b 0a 20 20 64 62 20 61  h-1.1.3 {.  db a
0490: 75 74 68 6f 72 69 7a 65 72 0a 7d 20 7b 3a 3a 61  uthorizer.} {::a
04a0: 75 74 68 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  uth}.do_test aut
04b0: 68 2d 31 2e 31 2e 34 20 7b 0a 20 20 23 20 54 69  h-1.1.4 {.  # Ti
04c0: 63 6b 65 74 20 23 38 39 36 2e 0a 20 20 63 61 74  cket #896..  cat
04d0: 63 68 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  chsql {.    SELE
04e0: 43 54 20 78 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b  CT x;.  }.} {1 {
04f0: 6e 6f 20 73 75 63 68 20 63 6f 6c 75 6d 6e 3a 20  no such column: 
0500: 78 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  x}}.do_test auth
0510: 2d 31 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  -1.2 {.  execsql
0520: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
0530: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
0540: 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 61  }.} {}.do_test a
0550: 75 74 68 2d 31 2e 33 2e 31 20 7b 0a 20 20 70 72  uth-1.3.1 {.  pr
0560: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
0570: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
0580: 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f  4} {.    if {$co
0590: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52 45 41  de=="SQLITE_CREA
05a0: 54 45 5f 54 41 42 4c 45 22 7d 20 7b 0a 20 20 20  TE_TABLE"} {.   
05b0: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
05c0: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
05d0: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
05e0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
05f0: 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a  LITE_DENY.    }.
0600: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
0610: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
0620: 73 71 6c 20 7b 43 52 45 41 54 45 20 54 41 42 4c  sql {CREATE TABL
0630: 45 20 74 31 28 61 2c 62 2c 63 29 7d 0a 7d 20 7b  E t1(a,b,c)}.} {
0640: 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65  1 {not authorize
0650: 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  d}}.do_test auth
0660: 2d 31 2e 33 2e 32 20 7b 0a 20 20 64 62 20 65 72  -1.3.2 {.  db er
0670: 72 6f 72 63 6f 64 65 0a 7d 20 7b 32 33 7d 0a 64  rorcode.} {23}.d
0680: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 33 2e  o_test auth-1.3.
0690: 33 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68  3 {.  set ::auth
06a0: 61 72 67 73 0a 7d 20 7b 74 31 20 7b 7d 20 6d 61  args.} {t1 {} ma
06b0: 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  in {}}.do_test a
06c0: 75 74 68 2d 31 2e 34 20 7b 0a 20 20 65 78 65 63  uth-1.4 {.  exec
06d0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
06e0: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
06f0: 74 65 72 7d 0a 7d 20 7b 7d 0a 0a 64 6f 5f 74 65  ter}.} {}..do_te
0700: 73 74 20 61 75 74 68 2d 31 2e 35 20 7b 0a 20 20  st auth-1.5 {.  
0710: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
0720: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
0730: 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg4} {.    if {$
0740: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 49 4e  code=="SQLITE_IN
0750: 53 45 52 54 22 20 26 26 20 24 61 72 67 31 3d 3d  SERT" && $arg1==
0760: 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73  "sqlite_temp_mas
0770: 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 72 65  ter"} {.      re
0780: 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59  turn SQLITE_DENY
0790: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
07a0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
07b0: 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41    catchsql {CREA
07c0: 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 74 31  TE TEMP TABLE t1
07d0: 28 61 2c 62 2c 63 29 7d 0a 7d 20 7b 31 20 7b 6e  (a,b,c)}.} {1 {n
07e0: 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a  ot authorized}}.
07f0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 36  do_test auth-1.6
0800: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
0810: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73  LECT name FROM s
0820: 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
0830: 72 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20  r}.} {}.do_test 
0840: 61 75 74 68 2d 31 2e 37 2e 31 20 7b 0a 20 20 70  auth-1.7.1 {.  p
0850: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
0860: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
0870: 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g4} {.    if {$c
0880: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52 45  ode=="SQLITE_CRE
0890: 41 54 45 5f 54 45 4d 50 5f 54 41 42 4c 45 22 7d  ATE_TEMP_TABLE"}
08a0: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61   {.      set ::a
08b0: 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61  uthargs [list $a
08c0: 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20  rg1 $arg2 $arg3 
08d0: 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74  $arg4].      ret
08e0: 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a  urn SQLITE_DENY.
08f0: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
0900: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
0910: 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54   catchsql {CREAT
0920: 45 20 54 45 4d 50 20 54 41 42 4c 45 20 74 31 28  E TEMP TABLE t1(
0930: 61 2c 62 2c 63 29 7d 0a 7d 20 7b 31 20 7b 6e 6f  a,b,c)}.} {1 {no
0940: 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64  t authorized}}.d
0950: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 37 2e  o_test auth-1.7.
0960: 32 20 7b 0a 20 20 20 73 65 74 20 3a 3a 61 75 74  2 {.   set ::aut
0970: 68 61 72 67 73 0a 7d 20 7b 74 31 20 7b 7d 20 74  hargs.} {t1 {} t
0980: 65 6d 70 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20  emp {}}.do_test 
0990: 61 75 74 68 2d 31 2e 38 20 7b 0a 20 20 65 78 65  auth-1.8 {.  exe
09a0: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d  csql {SELECT nam
09b0: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65  e FROM sqlite_te
09c0: 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 7d 0a  mp_master}.} {}.
09d0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
09e0: 39 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  9 {.  proc auth 
09f0: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
0a00: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
0a10: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
0a20: 49 54 45 5f 49 4e 53 45 52 54 22 20 26 26 20 24  ITE_INSERT" && $
0a30: 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 6d 61  arg1=="sqlite_ma
0a40: 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 72  ster"} {.      r
0a50: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e  eturn SQLITE_IGN
0a60: 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  ORE.    }.    re
0a70: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
0a80: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 43   }.  catchsql {C
0a90: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61  REATE TABLE t1(a
0aa0: 2c 62 2c 63 29 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a  ,b,c)}.} {0 {}}.
0ab0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
0ac0: 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  0 {.  execsql {S
0ad0: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
0ae0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d  sqlite_master}.}
0af0: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68   {}.do_test auth
0b00: 2d 31 2e 31 31 20 7b 0a 20 20 70 72 6f 63 20 61  -1.11 {.  proc a
0b10: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
0b20: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
0b30: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
0b40: 22 53 51 4c 49 54 45 5f 43 52 45 41 54 45 5f 54  "SQLITE_CREATE_T
0b50: 41 42 4c 45 22 7d 20 7b 0a 20 20 20 20 20 20 73  ABLE"} {.      s
0b60: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c  et ::authargs [l
0b70: 69 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20  ist $arg1 $arg2 
0b80: 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20  $arg3 $arg4].   
0b90: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
0ba0: 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20  _IGNORE.    }.  
0bb0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
0bc0: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
0bd0: 6c 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20  l {CREATE TABLE 
0be0: 74 31 28 61 2c 62 2c 63 29 7d 0a 7d 20 7b 30 20  t1(a,b,c)}.} {0 
0bf0: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
0c00: 2d 31 2e 31 32 20 7b 0a 20 20 65 78 65 63 73 71  -1.12 {.  execsq
0c10: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
0c20: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
0c30: 72 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20  r}.} {}.do_test 
0c40: 61 75 74 68 2d 31 2e 31 33 20 7b 0a 20 20 70 72  auth-1.13 {.  pr
0c50: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
0c60: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
0c70: 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f  4} {.    if {$co
0c80: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 49 4e 53 45  de=="SQLITE_INSE
0c90: 52 54 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73  RT" && $arg1=="s
0ca0: 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
0cb0: 72 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75  r"} {.      retu
0cc0: 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45  rn SQLITE_IGNORE
0cd0: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
0ce0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
0cf0: 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41    catchsql {CREA
0d00: 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 74 31  TE TEMP TABLE t1
0d10: 28 61 2c 62 2c 63 29 7d 0a 7d 20 7b 30 20 7b 7d  (a,b,c)}.} {0 {}
0d20: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
0d30: 2e 31 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .14 {.  execsql 
0d40: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
0d50: 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  M sqlite_temp_ma
0d60: 73 74 65 72 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65  ster}.} {}.do_te
0d70: 73 74 20 61 75 74 68 2d 31 2e 31 35 20 7b 0a 20  st auth-1.15 {. 
0d80: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
0d90: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
0da0: 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg4} {.    if {
0db0: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43  $code=="SQLITE_C
0dc0: 52 45 41 54 45 5f 54 45 4d 50 5f 54 41 42 4c 45  REATE_TEMP_TABLE
0dd0: 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a  "} {.      set :
0de0: 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20  :authargs [list 
0df0: 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67  $arg1 $arg2 $arg
0e00: 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72  3 $arg4].      r
0e10: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e  eturn SQLITE_IGN
0e20: 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  ORE.    }.    re
0e30: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
0e40: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 43   }.  catchsql {C
0e50: 52 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45  REATE TEMP TABLE
0e60: 20 74 31 28 61 2c 62 2c 63 29 7d 0a 7d 20 7b 30   t1(a,b,c)}.} {0
0e70: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
0e80: 68 2d 31 2e 31 36 20 7b 0a 20 20 65 78 65 63 73  h-1.16 {.  execs
0e90: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
0ea0: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70  FROM sqlite_temp
0eb0: 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 7d 0a 0a 64  _master}.} {}..d
0ec0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 37  o_test auth-1.17
0ed0: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
0ee0: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
0ef0: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
0f00: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
0f10: 54 45 5f 43 52 45 41 54 45 5f 54 41 42 4c 45 22  TE_CREATE_TABLE"
0f20: 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a  } {.      set ::
0f30: 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24  authargs [list $
0f40: 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33  arg1 $arg2 $arg3
0f50: 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65   $arg4].      re
0f60: 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59  turn SQLITE_DENY
0f70: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
0f80: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
0f90: 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41    catchsql {CREA
0fa0: 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 74 31  TE TEMP TABLE t1
0fb0: 28 61 2c 62 2c 63 29 7d 0a 7d 20 7b 30 20 7b 7d  (a,b,c)}.} {0 {}
0fc0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
0fd0: 2e 31 38 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .18 {.  execsql 
0fe0: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
0ff0: 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  M sqlite_temp_ma
1000: 73 74 65 72 7d 0a 7d 20 7b 74 31 7d 0a 64 6f 5f  ster}.} {t1}.do_
1010: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 39 2e 31  test auth-1.19.1
1020: 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61   {.  set ::autha
1030: 72 67 73 20 7b 7d 0a 20 20 70 72 6f 63 20 61 75  rgs {}.  proc au
1040: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
1050: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
1060: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
1070: 53 51 4c 49 54 45 5f 43 52 45 41 54 45 5f 54 45  SQLITE_CREATE_TE
1080: 4d 50 5f 54 41 42 4c 45 22 7d 20 7b 0a 20 20 20  MP_TABLE"} {.   
1090: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
10a0: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
10b0: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
10c0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
10d0: 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a  LITE_DENY.    }.
10e0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
10f0: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
1100: 73 71 6c 20 7b 43 52 45 41 54 45 20 54 41 42 4c  sql {CREATE TABL
1110: 45 20 74 32 28 61 2c 62 2c 63 29 7d 0a 7d 20 7b  E t2(a,b,c)}.} {
1120: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  0 {}}.do_test au
1130: 74 68 2d 31 2e 31 39 2e 32 20 7b 0a 20 20 73 65  th-1.19.2 {.  se
1140: 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b  t ::authargs.} {
1150: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
1160: 2e 32 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .20 {.  execsql 
1170: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
1180: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d  M sqlite_master}
1190: 0a 7d 20 7b 74 32 7d 0a 0a 64 6f 5f 74 65 73 74  .} {t2}..do_test
11a0: 20 61 75 74 68 2d 31 2e 32 31 2e 31 20 7b 0a 20   auth-1.21.1 {. 
11b0: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
11c0: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
11d0: 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg4} {.    if {
11e0: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44  $code=="SQLITE_D
11f0: 52 4f 50 5f 54 41 42 4c 45 22 7d 20 7b 0a 20 20  ROP_TABLE"} {.  
1200: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
1210: 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24  gs [list $arg1 $
1220: 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34  arg2 $arg3 $arg4
1230: 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  ].      return S
1240: 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d  QLITE_DENY.    }
1250: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
1260: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
1270: 68 73 71 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45  hsql {DROP TABLE
1280: 20 74 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61   t2}.} {1 {not a
1290: 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74  uthorized}}.do_t
12a0: 65 73 74 20 61 75 74 68 2d 31 2e 32 31 2e 32 20  est auth-1.21.2 
12b0: 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72  {.  set ::authar
12c0: 67 73 0a 7d 20 7b 74 32 20 7b 7d 20 6d 61 69 6e  gs.} {t2 {} main
12d0: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
12e0: 68 2d 31 2e 32 32 20 7b 0a 20 20 65 78 65 63 73  h-1.22 {.  execs
12f0: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
1300: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
1310: 65 72 7d 0a 7d 20 7b 74 32 7d 0a 64 6f 5f 74 65  er}.} {t2}.do_te
1320: 73 74 20 61 75 74 68 2d 31 2e 32 33 2e 31 20 7b  st auth-1.23.1 {
1330: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
1340: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
1350: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66  3 arg4} {.    if
1360: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
1370: 5f 44 52 4f 50 5f 54 41 42 4c 45 22 7d 20 7b 0a  _DROP_TABLE"} {.
1380: 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68        set ::auth
1390: 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31  args [list $arg1
13a0: 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72   $arg2 $arg3 $ar
13b0: 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  g4].      return
13c0: 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20   SQLITE_IGNORE. 
13d0: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
13e0: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
13f0: 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54  catchsql {DROP T
1400: 41 42 4c 45 20 74 32 7d 0a 7d 20 7b 30 20 7b 7d  ABLE t2}.} {0 {}
1410: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
1420: 2e 32 33 2e 32 20 7b 0a 20 20 73 65 74 20 3a 3a  .23.2 {.  set ::
1430: 61 75 74 68 61 72 67 73 0a 7d 20 7b 74 32 20 7b  authargs.} {t2 {
1440: 7d 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65  } main {}}.do_te
1450: 73 74 20 61 75 74 68 2d 31 2e 32 34 20 7b 0a 20  st auth-1.24 {. 
1460: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
1470: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
1480: 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 7d  e_master}.} {t2}
1490: 0a 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  ..do_test auth-1
14a0: 2e 32 35 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  .25 {.  proc aut
14b0: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
14c0: 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20  2 arg3 arg4} {. 
14d0: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
14e0: 51 4c 49 54 45 5f 44 52 4f 50 5f 54 45 4d 50 5f  QLITE_DROP_TEMP_
14f0: 54 41 42 4c 45 22 7d 20 7b 0a 20 20 20 20 20 20  TABLE"} {.      
1500: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b  set ::authargs [
1510: 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67 32  list $arg1 $arg2
1520: 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20   $arg3 $arg4].  
1530: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
1540: 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20  E_DENY.    }.   
1550: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
1560: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
1570: 20 7b 44 52 4f 50 20 54 41 42 4c 45 20 74 31 7d   {DROP TABLE t1}
1580: 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f  .} {1 {not autho
1590: 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20  rized}}.do_test 
15a0: 61 75 74 68 2d 31 2e 32 36 20 7b 0a 20 20 65 78  auth-1.26 {.  ex
15b0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61  ecsql {SELECT na
15c0: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74  me FROM sqlite_t
15d0: 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74  emp_master}.} {t
15e0: 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  1}.do_test auth-
15f0: 31 2e 32 37 20 7b 0a 20 20 70 72 6f 63 20 61 75  1.27 {.  proc au
1600: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
1610: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
1620: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
1630: 53 51 4c 49 54 45 5f 44 52 4f 50 5f 54 45 4d 50  SQLITE_DROP_TEMP
1640: 5f 54 41 42 4c 45 22 7d 20 7b 0a 20 20 20 20 20  _TABLE"} {.     
1650: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
1660: 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67  [list $arg1 $arg
1670: 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20  2 $arg3 $arg4]. 
1680: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
1690: 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a  TE_IGNORE.    }.
16a0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
16b0: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
16c0: 73 71 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45 20  sql {DROP TABLE 
16d0: 74 31 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f  t1}.} {0 {}}.do_
16e0: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 38 20 7b  test auth-1.28 {
16f0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
1700: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
1710: 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d  ite_temp_master}
1720: 0a 7d 20 7b 74 31 7d 0a 0a 64 6f 5f 74 65 73 74  .} {t1}..do_test
1730: 20 61 75 74 68 2d 31 2e 32 39 20 7b 0a 20 20 70   auth-1.29 {.  p
1740: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
1750: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
1760: 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g4} {.    if {$c
1770: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 49 4e 53  ode=="SQLITE_INS
1780: 45 52 54 22 20 26 26 20 24 61 72 67 31 3d 3d 22  ERT" && $arg1=="
1790: 74 32 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74  t2"} {.      ret
17a0: 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a  urn SQLITE_DENY.
17b0: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
17c0: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
17d0: 20 63 61 74 63 68 73 71 6c 20 7b 49 4e 53 45 52   catchsql {INSER
17e0: 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53  T INTO t2 VALUES
17f0: 28 31 2c 32 2c 33 29 7d 0a 7d 20 7b 31 20 7b 6e  (1,2,3)}.} {1 {n
1800: 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a  ot authorized}}.
1810: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 33  do_test auth-1.3
1820: 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  0 {.  execsql {S
1830: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d  ELECT * FROM t2}
1840: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 61 75  .} {}.do_test au
1850: 74 68 2d 31 2e 33 31 20 7b 0a 20 20 70 72 6f 63  th-1.31 {.  proc
1860: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
1870: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
1880: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
1890: 3d 3d 22 53 51 4c 49 54 45 5f 49 4e 53 45 52 54  =="SQLITE_INSERT
18a0: 22 20 26 26 20 24 61 72 67 31 3d 3d 22 74 32 22  " && $arg1=="t2"
18b0: 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  } {.      return
18c0: 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20   SQLITE_IGNORE. 
18d0: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
18e0: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
18f0: 63 61 74 63 68 73 71 6c 20 7b 49 4e 53 45 52 54  catchsql {INSERT
1900: 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28   INTO t2 VALUES(
1910: 31 2c 32 2c 33 29 7d 0a 7d 20 7b 30 20 7b 7d 7d  1,2,3)}.} {0 {}}
1920: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
1930: 33 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  32 {.  execsql {
1940: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32  SELECT * FROM t2
1950: 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 61  }.} {}.do_test a
1960: 75 74 68 2d 31 2e 33 33 20 7b 0a 20 20 70 72 6f  uth-1.33 {.  pro
1970: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
1980: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
1990: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
19a0: 65 3d 3d 22 53 51 4c 49 54 45 5f 49 4e 53 45 52  e=="SQLITE_INSER
19b0: 54 22 20 26 26 20 24 61 72 67 31 3d 3d 22 74 31  T" && $arg1=="t1
19c0: 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72  "} {.      retur
19d0: 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a  n SQLITE_IGNORE.
19e0: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
19f0: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
1a00: 20 63 61 74 63 68 73 71 6c 20 7b 49 4e 53 45 52   catchsql {INSER
1a10: 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53  T INTO t2 VALUES
1a20: 28 31 2c 32 2c 33 29 7d 0a 7d 20 7b 30 20 7b 7d  (1,2,3)}.} {0 {}
1a30: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
1a40: 2e 33 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .34 {.  execsql 
1a50: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
1a60: 32 7d 0a 7d 20 7b 31 20 32 20 33 7d 0a 0a 64 6f  2}.} {1 2 3}..do
1a70: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 33 35 2e  _test auth-1.35.
1a80: 31 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  1 {.  proc auth 
1a90: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
1aa0: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
1ab0: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
1ac0: 49 54 45 5f 52 45 41 44 22 20 26 26 20 24 61 72  ITE_READ" && $ar
1ad0: 67 31 3d 3d 22 74 32 22 20 26 26 20 24 61 72 67  g1=="t2" && $arg
1ae0: 32 3d 3d 22 62 22 7d 20 7b 0a 20 20 20 20 20 20  2=="b"} {.      
1af0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45  return SQLITE_DE
1b00: 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  NY.    }.    ret
1b10: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
1b20: 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 53 45  }.  catchsql {SE
1b30: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d 0a  LECT * FROM t2}.
1b40: 7d 20 7b 31 20 7b 61 63 63 65 73 73 20 74 6f 20  } {1 {access to 
1b50: 74 32 2e 62 20 69 73 20 70 72 6f 68 69 62 69 74  t2.b is prohibit
1b60: 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  ed}}.do_test aut
1b70: 68 2d 31 2e 33 35 2e 32 20 7b 0a 20 20 65 78 65  h-1.35.2 {.  exe
1b80: 63 73 71 6c 20 7b 41 54 54 41 43 48 20 44 41 54  csql {ATTACH DAT
1b90: 41 42 41 53 45 20 27 74 65 73 74 2e 64 62 27 20  ABASE 'test.db' 
1ba0: 41 53 20 74 77 6f 7d 0a 20 20 63 61 74 63 68 73  AS two}.  catchs
1bb0: 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f  ql {SELECT * FRO
1bc0: 4d 20 74 77 6f 2e 74 32 7d 0a 7d 20 7b 31 20 7b  M two.t2}.} {1 {
1bd0: 61 63 63 65 73 73 20 74 6f 20 74 77 6f 2e 74 32  access to two.t2
1be0: 2e 62 20 69 73 20 70 72 6f 68 69 62 69 74 65 64  .b is prohibited
1bf0: 7d 7d 0a 65 78 65 63 73 71 6c 20 7b 44 45 54 41  }}.execsql {DETA
1c00: 43 48 20 44 41 54 41 42 41 53 45 20 74 77 6f 7d  CH DATABASE two}
1c10: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
1c20: 33 36 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  36 {.  proc auth
1c30: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
1c40: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
1c50: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
1c60: 4c 49 54 45 5f 52 45 41 44 22 20 26 26 20 24 61  LITE_READ" && $a
1c70: 72 67 31 3d 3d 22 74 32 22 20 26 26 20 24 61 72  rg1=="t2" && $ar
1c80: 67 32 3d 3d 22 62 22 7d 20 7b 0a 20 20 20 20 20  g2=="b"} {.     
1c90: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49   return SQLITE_I
1ca0: 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20  GNORE.    }.    
1cb0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
1cc0: 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20  .  }.  catchsql 
1cd0: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
1ce0: 32 7d 0a 7d 20 7b 30 20 7b 31 20 7b 7d 20 33 7d  2}.} {0 {1 {} 3}
1cf0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
1d00: 2e 33 37 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  .37 {.  proc aut
1d10: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
1d20: 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20  2 arg3 arg4} {. 
1d30: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
1d40: 51 4c 49 54 45 5f 52 45 41 44 22 20 26 26 20 24  QLITE_READ" && $
1d50: 61 72 67 31 3d 3d 22 74 32 22 20 26 26 20 24 61  arg1=="t2" && $a
1d60: 72 67 32 3d 3d 22 62 22 7d 20 7b 0a 20 20 20 20  rg2=="b"} {.    
1d70: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
1d80: 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20  IGNORE.    }.   
1d90: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
1da0: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
1db0: 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   {SELECT * FROM 
1dc0: 74 32 20 57 48 45 52 45 20 62 3d 32 7d 0a 7d 20  t2 WHERE b=2}.} 
1dd0: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  {0 {}}.do_test a
1de0: 75 74 68 2d 31 2e 33 38 20 7b 0a 20 20 70 72 6f  uth-1.38 {.  pro
1df0: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
1e00: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
1e10: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
1e20: 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45 41 44 22  e=="SQLITE_READ"
1e30: 20 26 26 20 24 61 72 67 31 3d 3d 22 74 32 22 20   && $arg1=="t2" 
1e40: 26 26 20 24 61 72 67 32 3d 3d 22 61 22 7d 20 7b  && $arg2=="a"} {
1e50: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
1e60: 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20  LITE_IGNORE.    
1e70: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
1e80: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
1e90: 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20  chsql {SELECT * 
1ea0: 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20 62 3d  FROM t2 WHERE b=
1eb0: 32 7d 0a 7d 20 7b 30 20 7b 7b 7d 20 32 20 33 7d  2}.} {0 {{} 2 3}
1ec0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
1ed0: 2e 33 39 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  .39 {.  proc aut
1ee0: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
1ef0: 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20  2 arg3 arg4} {. 
1f00: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
1f10: 51 4c 49 54 45 5f 52 45 41 44 22 20 26 26 20 24  QLITE_READ" && $
1f20: 61 72 67 31 3d 3d 22 74 32 22 20 26 26 20 24 61  arg1=="t2" && $a
1f30: 72 67 32 3d 3d 22 62 22 7d 20 7b 0a 20 20 20 20  rg2=="b"} {.    
1f40: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
1f50: 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20  IGNORE.    }.   
1f60: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
1f70: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
1f80: 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   {SELECT * FROM 
1f90: 74 32 20 57 48 45 52 45 20 62 20 49 53 20 4e 55  t2 WHERE b IS NU
1fa0: 4c 4c 7d 0a 7d 20 7b 30 20 7b 31 20 7b 7d 20 33  LL}.} {0 {1 {} 3
1fb0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
1fc0: 31 2e 34 30 20 7b 0a 20 20 70 72 6f 63 20 61 75  1.40 {.  proc au
1fd0: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
1fe0: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
1ff0: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
2000: 53 51 4c 49 54 45 5f 52 45 41 44 22 20 26 26 20  SQLITE_READ" && 
2010: 24 61 72 67 31 3d 3d 22 74 32 22 20 26 26 20 24  $arg1=="t2" && $
2020: 61 72 67 32 3d 3d 22 62 22 7d 20 7b 0a 20 20 20  arg2=="b"} {.   
2030: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
2040: 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20  _DENY.    }.    
2050: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
2060: 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20  .  }.  catchsql 
2070: 7b 53 45 4c 45 43 54 20 61 2c 63 20 46 52 4f 4d  {SELECT a,c FROM
2080: 20 74 32 20 57 48 45 52 45 20 62 20 49 53 20 4e   t2 WHERE b IS N
2090: 55 4c 4c 7d 0a 7d 20 7b 31 20 7b 61 63 63 65 73  ULL}.} {1 {acces
20a0: 73 20 74 6f 20 74 32 2e 62 20 69 73 20 70 72 6f  s to t2.b is pro
20b0: 68 69 62 69 74 65 64 7d 7d 0a 20 20 0a 64 6f 5f  hibited}}.  .do_
20c0: 74 65 73 74 20 61 75 74 68 2d 31 2e 34 31 20 7b  test auth-1.41 {
20d0: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
20e0: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
20f0: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66  3 arg4} {.    if
2100: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
2110: 5f 55 50 44 41 54 45 22 20 26 26 20 24 61 72 67  _UPDATE" && $arg
2120: 31 3d 3d 22 74 32 22 20 26 26 20 24 61 72 67 32  1=="t2" && $arg2
2130: 3d 3d 22 62 22 7d 20 7b 0a 20 20 20 20 20 20 72  =="b"} {.      r
2140: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e  eturn SQLITE_DEN
2150: 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  Y.    }.    retu
2160: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
2170: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 55 50 44  .  catchsql {UPD
2180: 41 54 45 20 74 32 20 53 45 54 20 61 3d 31 31 7d  ATE t2 SET a=11}
2190: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
21a0: 74 20 61 75 74 68 2d 31 2e 34 32 20 7b 0a 20 20  t auth-1.42 {.  
21b0: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
21c0: 2a 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31 31  * FROM t2}.} {11
21d0: 20 32 20 33 7d 0a 64 6f 5f 74 65 73 74 20 61 75   2 3}.do_test au
21e0: 74 68 2d 31 2e 34 33 20 7b 0a 20 20 70 72 6f 63  th-1.43 {.  proc
21f0: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
2200: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
2210: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
2220: 3d 3d 22 53 51 4c 49 54 45 5f 55 50 44 41 54 45  =="SQLITE_UPDATE
2230: 22 20 26 26 20 24 61 72 67 31 3d 3d 22 74 32 22  " && $arg1=="t2"
2240: 20 26 26 20 24 61 72 67 32 3d 3d 22 62 22 7d 20   && $arg2=="b"} 
2250: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  {.      return S
2260: 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d  QLITE_DENY.    }
2270: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
2280: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
2290: 68 73 71 6c 20 7b 55 50 44 41 54 45 20 74 32 20  hsql {UPDATE t2 
22a0: 53 45 54 20 62 3d 32 32 2c 20 63 3d 33 33 7d 0a  SET b=22, c=33}.
22b0: 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72  } {1 {not author
22c0: 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  ized}}.do_test a
22d0: 75 74 68 2d 31 2e 34 34 20 7b 0a 20 20 65 78 65  uth-1.44 {.  exe
22e0: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46  csql {SELECT * F
22f0: 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31 31 20 32 20  ROM t2}.} {11 2 
2300: 33 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  3}.do_test auth-
2310: 31 2e 34 35 20 7b 0a 20 20 70 72 6f 63 20 61 75  1.45 {.  proc au
2320: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
2330: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
2340: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
2350: 53 51 4c 49 54 45 5f 55 50 44 41 54 45 22 20 26  SQLITE_UPDATE" &
2360: 26 20 24 61 72 67 31 3d 3d 22 74 32 22 20 26 26  & $arg1=="t2" &&
2370: 20 24 61 72 67 32 3d 3d 22 62 22 7d 20 7b 0a 20   $arg2=="b"} {. 
2380: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
2390: 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a  TE_IGNORE.    }.
23a0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
23b0: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
23c0: 73 71 6c 20 7b 55 50 44 41 54 45 20 74 32 20 53  sql {UPDATE t2 S
23d0: 45 54 20 62 3d 32 32 2c 20 63 3d 33 33 7d 0a 7d  ET b=22, c=33}.}
23e0: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
23f0: 61 75 74 68 2d 31 2e 34 36 20 7b 0a 20 20 65 78  auth-1.46 {.  ex
2400: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20  ecsql {SELECT * 
2410: 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31 31 20 32  FROM t2}.} {11 2
2420: 20 33 33 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 75   33}..do_test au
2430: 74 68 2d 31 2e 34 37 20 7b 0a 20 20 70 72 6f 63  th-1.47 {.  proc
2440: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
2450: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
2460: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
2470: 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45 54 45  =="SQLITE_DELETE
2480: 22 20 26 26 20 24 61 72 67 31 3d 3d 22 74 32 22  " && $arg1=="t2"
2490: 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  } {.      return
24a0: 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20   SQLITE_DENY.   
24b0: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
24c0: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
24d0: 74 63 68 73 71 6c 20 7b 44 45 4c 45 54 45 20 46  tchsql {DELETE F
24e0: 52 4f 4d 20 74 32 20 57 48 45 52 45 20 61 3d 31  ROM t2 WHERE a=1
24f0: 31 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74  1}.} {1 {not aut
2500: 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73  horized}}.do_tes
2510: 74 20 61 75 74 68 2d 31 2e 34 38 20 7b 0a 20 20  t auth-1.48 {.  
2520: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
2530: 2a 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31 31  * FROM t2}.} {11
2540: 20 32 20 33 33 7d 0a 64 6f 5f 74 65 73 74 20 61   2 33}.do_test a
2550: 75 74 68 2d 31 2e 34 39 20 7b 0a 20 20 70 72 6f  uth-1.49 {.  pro
2560: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
2570: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
2580: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
2590: 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45 54  e=="SQLITE_DELET
25a0: 45 22 20 26 26 20 24 61 72 67 31 3d 3d 22 74 32  E" && $arg1=="t2
25b0: 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72  "} {.      retur
25c0: 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a  n SQLITE_IGNORE.
25d0: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
25e0: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
25f0: 20 63 61 74 63 68 73 71 6c 20 7b 44 45 4c 45 54   catchsql {DELET
2600: 45 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20  E FROM t2 WHERE 
2610: 61 3d 31 31 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  a=11}.} {0 {}}.d
2620: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 35 30  o_test auth-1.50
2630: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
2640: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d 0a  LECT * FROM t2}.
2650: 7d 20 7b 31 31 20 32 20 33 33 7d 0a 0a 64 6f 5f  } {11 2 33}..do_
2660: 74 65 73 74 20 61 75 74 68 2d 31 2e 35 31 20 7b  test auth-1.51 {
2670: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
2680: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
2690: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66  3 arg4} {.    if
26a0: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
26b0: 5f 53 45 4c 45 43 54 22 7d 20 7b 0a 20 20 20 20  _SELECT"} {.    
26c0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
26d0: 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72  DENY.    }.    r
26e0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
26f0: 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b    }.  catchsql {
2700: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32  SELECT * FROM t2
2710: 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68  }.} {1 {not auth
2720: 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74  orized}}.do_test
2730: 20 61 75 74 68 2d 31 2e 35 32 20 7b 0a 20 20 70   auth-1.52 {.  p
2740: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
2750: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
2760: 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g4} {.    if {$c
2770: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 53 45 4c  ode=="SQLITE_SEL
2780: 45 43 54 22 7d 20 7b 0a 20 20 20 20 20 20 72 65  ECT"} {.      re
2790: 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f  turn SQLITE_IGNO
27a0: 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  RE.    }.    ret
27b0: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
27c0: 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 53 45  }.  catchsql {SE
27d0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d 0a  LECT * FROM t2}.
27e0: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
27f0: 20 61 75 74 68 2d 31 2e 35 33 20 7b 0a 20 20 70   auth-1.53 {.  p
2800: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
2810: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
2820: 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g4} {.    if {$c
2830: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 53 45 4c  ode=="SQLITE_SEL
2840: 45 43 54 22 7d 20 7b 0a 20 20 20 20 20 20 72 65  ECT"} {.      re
2850: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
2860: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
2870: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
2880: 63 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54  catchsql {SELECT
2890: 20 2a 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 30   * FROM t2}.} {0
28a0: 20 7b 31 31 20 32 20 33 33 7d 7d 0a 0a 23 20 55   {11 2 33}}..# U
28b0: 70 64 61 74 65 20 66 6f 72 20 76 65 72 73 69 6f  pdate for versio
28c0: 6e 20 33 3a 20 54 68 65 72 65 20 75 73 65 64 20  n 3: There used 
28d0: 74 6f 20 62 65 20 61 20 68 61 6e 64 66 75 6c 20  to be a handful 
28e0: 6f 66 20 74 65 73 74 20 68 65 72 65 20 74 68 61  of test here tha
28f0: 74 0a 23 20 74 65 73 74 65 64 20 74 68 65 20 61  t.# tested the a
2900: 75 74 68 6f 72 69 73 61 74 69 6f 6e 20 63 61 6c  uthorisation cal
2910: 6c 62 61 63 6b 20 77 69 74 68 20 74 68 65 20 43  lback with the C
2920: 4f 50 59 20 63 6f 6d 6d 61 6e 64 2e 20 54 68 65  OPY command. The
2930: 20 66 6f 6c 6c 6f 77 69 6e 67 0a 23 20 74 65 73   following.# tes
2940: 74 20 6d 61 6b 65 73 20 74 68 65 20 73 61 6d 65  t makes the same
2950: 20 64 61 74 61 62 61 73 65 20 6d 6f 64 69 66 69   database modifi
2960: 63 61 74 69 6f 6e 73 20 61 73 20 74 68 65 79 20  cations as they 
2970: 75 73 65 64 20 74 6f 2e 0a 64 6f 5f 74 65 73 74  used to..do_test
2980: 20 61 75 74 68 2d 31 2e 35 34 20 7b 0a 20 20 65   auth-1.54 {.  e
2990: 78 65 63 73 71 6c 20 7b 49 4e 53 45 52 54 20 49  xecsql {INSERT I
29a0: 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 37 2c  NTO t2 VALUES(7,
29b0: 20 38 2c 20 39 29 3b 7d 0a 7d 20 7b 7d 0a 64 6f   8, 9);}.} {}.do
29c0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 35 35 20  _test auth-1.55 
29d0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
29e0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d 0a 7d  ECT * FROM t2}.}
29f0: 20 7b 31 31 20 32 20 33 33 20 37 20 38 20 39 7d   {11 2 33 7 8 9}
2a00: 0a 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  ..do_test auth-1
2a10: 2e 36 33 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  .63 {.  proc aut
2a20: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
2a30: 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20  2 arg3 arg4} {. 
2a40: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
2a50: 51 4c 49 54 45 5f 44 45 4c 45 54 45 22 20 26 26  QLITE_DELETE" &&
2a60: 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f   $arg1=="sqlite_
2a70: 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20  master"} {.     
2a80: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
2a90: 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72  DENY.    }.    r
2aa0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
2ab0: 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b    }.  catchsql {
2ac0: 44 52 4f 50 20 54 41 42 4c 45 20 74 32 7d 0a 7d  DROP TABLE t2}.}
2ad0: 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69   {1 {not authori
2ae0: 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  zed}}.do_test au
2af0: 74 68 2d 31 2e 36 34 20 7b 0a 20 20 65 78 65 63  th-1.64 {.  exec
2b00: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
2b10: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
2b20: 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a 64 6f 5f 74  ter}.} {t2}.do_t
2b30: 65 73 74 20 61 75 74 68 2d 31 2e 36 35 20 7b 0a  est auth-1.65 {.
2b40: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
2b50: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
2b60: 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20   arg4} {.    if 
2b70: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
2b80: 44 45 4c 45 54 45 22 20 26 26 20 24 61 72 67 31  DELETE" && $arg1
2b90: 3d 3d 22 74 32 22 7d 20 7b 0a 20 20 20 20 20 20  =="t2"} {.      
2ba0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44   return SQLITE_D
2bb0: 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  ENY.    }.    re
2bc0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
2bd0: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44   }.  catchsql {D
2be0: 52 4f 50 20 54 41 42 4c 45 20 74 32 7d 0a 7d 20  ROP TABLE t2}.} 
2bf0: 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a  {1 {not authoriz
2c00: 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  ed}}.do_test aut
2c10: 68 2d 31 2e 36 36 20 7b 0a 20 20 65 78 65 63 73  h-1.66 {.  execs
2c20: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
2c30: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
2c40: 65 72 7d 0a 7d 20 7b 74 32 7d 0a 64 6f 5f 74 65  er}.} {t2}.do_te
2c50: 73 74 20 61 75 74 68 2d 31 2e 36 37 20 7b 0a 20  st auth-1.67 {. 
2c60: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
2c70: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
2c80: 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg4} {.    if {
2c90: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44  $code=="SQLITE_D
2ca0: 45 4c 45 54 45 22 20 26 26 20 24 61 72 67 31 3d  ELETE" && $arg1=
2cb0: 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  ="sqlite_temp_ma
2cc0: 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 20  ster"} {.       
2cd0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45  return SQLITE_DE
2ce0: 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  NY.    }.    ret
2cf0: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
2d00: 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52  }.  catchsql {DR
2d10: 4f 50 20 54 41 42 4c 45 20 74 31 7d 0a 7d 20 7b  OP TABLE t1}.} {
2d20: 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65  1 {not authorize
2d30: 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  d}}.do_test auth
2d40: 2d 31 2e 36 38 20 7b 0a 20 20 65 78 65 63 73 71  -1.68 {.  execsq
2d50: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
2d60: 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f  ROM sqlite_temp_
2d70: 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31 7d 0a 64  master}.} {t1}.d
2d80: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 36 39  o_test auth-1.69
2d90: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
2da0: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
2db0: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
2dc0: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
2dd0: 54 45 5f 44 45 4c 45 54 45 22 20 26 26 20 24 61  TE_DELETE" && $a
2de0: 72 67 31 3d 3d 22 74 31 22 7d 20 7b 0a 20 20 20  rg1=="t1"} {.   
2df0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
2e00: 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20  E_DENY.    }.   
2e10: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
2e20: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
2e30: 20 7b 44 52 4f 50 20 54 41 42 4c 45 20 74 31 7d   {DROP TABLE t1}
2e40: 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f  .} {1 {not autho
2e50: 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20  rized}}.do_test 
2e60: 61 75 74 68 2d 31 2e 37 30 20 7b 0a 20 20 65 78  auth-1.70 {.  ex
2e70: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61  ecsql {SELECT na
2e80: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74  me FROM sqlite_t
2e90: 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74  emp_master}.} {t
2ea0: 31 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  1}..do_test auth
2eb0: 2d 31 2e 37 31 20 7b 0a 20 20 70 72 6f 63 20 61  -1.71 {.  proc a
2ec0: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
2ed0: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
2ee0: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
2ef0: 22 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 22 20  "SQLITE_DELETE" 
2f00: 26 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74  && $arg1=="sqlit
2f10: 65 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20  e_master"} {.   
2f20: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
2f30: 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20  E_IGNORE.    }. 
2f40: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
2f50: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
2f60: 71 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45 20 74  ql {DROP TABLE t
2f70: 32 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74  2}.} {0 {}}.do_t
2f80: 65 73 74 20 61 75 74 68 2d 31 2e 37 32 20 7b 0a  est auth-1.72 {.
2f90: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
2fa0: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
2fb0: 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32  te_master}.} {t2
2fc0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
2fd0: 2e 37 33 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  .73 {.  proc aut
2fe0: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
2ff0: 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20  2 arg3 arg4} {. 
3000: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
3010: 51 4c 49 54 45 5f 44 45 4c 45 54 45 22 20 26 26  QLITE_DELETE" &&
3020: 20 24 61 72 67 31 3d 3d 22 74 32 22 7d 20 7b 0a   $arg1=="t2"} {.
3030: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
3040: 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20  LITE_IGNORE.    
3050: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
3060: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
3070: 63 68 73 71 6c 20 7b 44 52 4f 50 20 54 41 42 4c  chsql {DROP TABL
3080: 45 20 74 32 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  E t2}.} {0 {}}.d
3090: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 37 34  o_test auth-1.74
30a0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
30b0: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73  LECT name FROM s
30c0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20  qlite_master}.} 
30d0: 7b 74 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  {t2}.do_test aut
30e0: 68 2d 31 2e 37 35 20 7b 0a 20 20 70 72 6f 63 20  h-1.75 {.  proc 
30f0: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
3100: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
3110: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
3120: 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 22  ="SQLITE_DELETE"
3130: 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69   && $arg1=="sqli
3140: 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 7d  te_temp_master"}
3150: 20 7b 0a 20 20 20 20 20 20 20 72 65 74 75 72 6e   {.       return
3160: 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20   SQLITE_IGNORE. 
3170: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
3180: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
3190: 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54  catchsql {DROP T
31a0: 41 42 4c 45 20 74 31 7d 0a 7d 20 7b 30 20 7b 7d  ABLE t1}.} {0 {}
31b0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
31c0: 2e 37 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .76 {.  execsql 
31d0: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
31e0: 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  M sqlite_temp_ma
31f0: 73 74 65 72 7d 0a 7d 20 7b 74 31 7d 0a 64 6f 5f  ster}.} {t1}.do_
3200: 74 65 73 74 20 61 75 74 68 2d 31 2e 37 37 20 7b  test auth-1.77 {
3210: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
3220: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
3230: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66  3 arg4} {.    if
3240: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
3250: 5f 44 45 4c 45 54 45 22 20 26 26 20 24 61 72 67  _DELETE" && $arg
3260: 31 3d 3d 22 74 31 22 7d 20 7b 0a 20 20 20 20 20  1=="t1"} {.     
3270: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
3280: 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20  IGNORE.    }.   
3290: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
32a0: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
32b0: 20 7b 44 52 4f 50 20 54 41 42 4c 45 20 74 31 7d   {DROP TABLE t1}
32c0: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
32d0: 74 20 61 75 74 68 2d 31 2e 37 38 20 7b 0a 20 20  t auth-1.78 {.  
32e0: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
32f0: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
3300: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d 20  _temp_master}.} 
3310: 7b 74 31 7d 0a 0a 23 20 54 65 73 74 20 63 61 73  {t1}..# Test cas
3320: 65 73 20 61 75 74 68 2d 31 2e 37 39 20 74 6f 20  es auth-1.79 to 
3330: 61 75 74 68 2d 31 2e 31 32 34 20 74 65 73 74 20  auth-1.124 test 
3340: 63 72 65 61 74 69 6e 67 20 61 6e 64 20 64 72 6f  creating and dro
3350: 70 70 69 6e 67 20 76 69 65 77 73 2e 0a 23 20 4f  pping views..# O
3360: 6d 69 74 20 74 68 65 73 65 20 69 66 20 74 68 65  mit these if the
3370: 20 6c 69 62 72 61 72 79 20 77 61 73 20 63 6f 6d   library was com
3380: 70 69 6c 65 64 20 77 69 74 68 20 76 69 65 77 73  piled with views
3390: 20 6f 6d 69 74 74 65 64 2e 0a 69 66 63 61 70 61   omitted..ifcapa
33a0: 62 6c 65 20 76 69 65 77 20 7b 0a 64 6f 5f 74 65  ble view {.do_te
33b0: 73 74 20 61 75 74 68 2d 31 2e 37 39 20 7b 0a 20  st auth-1.79 {. 
33c0: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
33d0: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
33e0: 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg4} {.    if {
33f0: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43  $code=="SQLITE_C
3400: 52 45 41 54 45 5f 56 49 45 57 22 7d 20 7b 0a 20  REATE_VIEW"} {. 
3410: 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61       set ::autha
3420: 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20  rgs [list $arg1 
3430: 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67  $arg2 $arg3 $arg
3440: 34 5d 20 0a 20 20 20 20 20 20 72 65 74 75 72 6e  4] .      return
3450: 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20   SQLITE_DENY.   
3460: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
3470: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
3480: 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45 20 56  tchsql {CREATE V
3490: 49 45 57 20 76 31 20 41 53 20 53 45 4c 45 43 54  IEW v1 AS SELECT
34a0: 20 61 2b 31 2c 62 2b 31 20 46 52 4f 4d 20 74 32   a+1,b+1 FROM t2
34b0: 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68  }.} {1 {not auth
34c0: 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74  orized}}.do_test
34d0: 20 61 75 74 68 2d 31 2e 38 30 20 7b 0a 20 20 73   auth-1.80 {.  s
34e0: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20  et ::authargs.} 
34f0: 7b 76 31 20 7b 7d 20 6d 61 69 6e 20 7b 7d 7d 0a  {v1 {} main {}}.
3500: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 38  do_test auth-1.8
3510: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  1 {.  execsql {S
3520: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
3530: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d  sqlite_master}.}
3540: 20 7b 74 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75   {t2}.do_test au
3550: 74 68 2d 31 2e 38 32 20 7b 0a 20 20 70 72 6f 63  th-1.82 {.  proc
3560: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
3570: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
3580: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
3590: 3d 3d 22 53 51 4c 49 54 45 5f 43 52 45 41 54 45  =="SQLITE_CREATE
35a0: 5f 56 49 45 57 22 7d 20 7b 0a 20 20 20 20 20 20  _VIEW"} {.      
35b0: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b  set ::authargs [
35c0: 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67 32  list $arg1 $arg2
35d0: 20 24 61 72 67 33 20 24 61 72 67 34 5d 20 0a 20   $arg3 $arg4] . 
35e0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
35f0: 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a  TE_IGNORE.    }.
3600: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
3610: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
3620: 73 71 6c 20 7b 43 52 45 41 54 45 20 56 49 45 57  sql {CREATE VIEW
3630: 20 76 31 20 41 53 20 53 45 4c 45 43 54 20 61 2b   v1 AS SELECT a+
3640: 31 2c 62 2b 31 20 46 52 4f 4d 20 74 32 7d 0a 7d  1,b+1 FROM t2}.}
3650: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
3660: 61 75 74 68 2d 31 2e 38 33 20 7b 0a 20 20 73 65  auth-1.83 {.  se
3670: 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b  t ::authargs.} {
3680: 76 31 20 7b 7d 20 6d 61 69 6e 20 7b 7d 7d 0a 64  v1 {} main {}}.d
3690: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 38 34  o_test auth-1.84
36a0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
36b0: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73  LECT name FROM s
36c0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20  qlite_master}.} 
36d0: 7b 74 32 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 75  {t2}..do_test au
36e0: 74 68 2d 31 2e 38 35 20 7b 0a 20 20 70 72 6f 63  th-1.85 {.  proc
36f0: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
3700: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
3710: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
3720: 3d 3d 22 53 51 4c 49 54 45 5f 43 52 45 41 54 45  =="SQLITE_CREATE
3730: 5f 54 45 4d 50 5f 56 49 45 57 22 7d 20 7b 0a 20  _TEMP_VIEW"} {. 
3740: 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61       set ::autha
3750: 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20  rgs [list $arg1 
3760: 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67  $arg2 $arg3 $arg
3770: 34 5d 20 0a 20 20 20 20 20 20 72 65 74 75 72 6e  4] .      return
3780: 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20   SQLITE_DENY.   
3790: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
37a0: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
37b0: 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45 20 54  tchsql {CREATE T
37c0: 45 4d 50 4f 52 41 52 59 20 56 49 45 57 20 76 31  EMPORARY VIEW v1
37d0: 20 41 53 20 53 45 4c 45 43 54 20 61 2b 31 2c 62   AS SELECT a+1,b
37e0: 2b 31 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31  +1 FROM t2}.} {1
37f0: 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64   {not authorized
3800: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
3810: 31 2e 38 36 20 7b 0a 20 20 73 65 74 20 3a 3a 61  1.86 {.  set ::a
3820: 75 74 68 61 72 67 73 0a 7d 20 7b 76 31 20 7b 7d  uthargs.} {v1 {}
3830: 20 74 65 6d 70 20 7b 7d 7d 0a 64 6f 5f 74 65 73   temp {}}.do_tes
3840: 74 20 61 75 74 68 2d 31 2e 38 37 20 7b 0a 20 20  t auth-1.87 {.  
3850: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
3860: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
3870: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d 20  _temp_master}.} 
3880: 7b 74 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  {t1}.do_test aut
3890: 68 2d 31 2e 38 38 20 7b 0a 20 20 70 72 6f 63 20  h-1.88 {.  proc 
38a0: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
38b0: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
38c0: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
38d0: 3d 22 53 51 4c 49 54 45 5f 43 52 45 41 54 45 5f  ="SQLITE_CREATE_
38e0: 54 45 4d 50 5f 56 49 45 57 22 7d 20 7b 0a 20 20  TEMP_VIEW"} {.  
38f0: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
3900: 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24  gs [list $arg1 $
3910: 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34  arg2 $arg3 $arg4
3920: 5d 20 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ] .      return 
3930: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20  SQLITE_IGNORE.  
3940: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
3950: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
3960: 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45 20  atchsql {CREATE 
3970: 54 45 4d 50 4f 52 41 52 59 20 56 49 45 57 20 76  TEMPORARY VIEW v
3980: 31 20 41 53 20 53 45 4c 45 43 54 20 61 2b 31 2c  1 AS SELECT a+1,
3990: 62 2b 31 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b  b+1 FROM t2}.} {
39a0: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  0 {}}.do_test au
39b0: 74 68 2d 31 2e 38 39 20 7b 0a 20 20 73 65 74 20  th-1.89 {.  set 
39c0: 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 76 31  ::authargs.} {v1
39d0: 20 7b 7d 20 74 65 6d 70 20 7b 7d 7d 0a 64 6f 5f   {} temp {}}.do_
39e0: 74 65 73 74 20 61 75 74 68 2d 31 2e 39 30 20 7b  test auth-1.90 {
39f0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
3a00: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
3a10: 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d  ite_temp_master}
3a20: 0a 7d 20 7b 74 31 7d 0a 0a 64 6f 5f 74 65 73 74  .} {t1}..do_test
3a30: 20 61 75 74 68 2d 31 2e 39 31 20 7b 0a 20 20 70   auth-1.91 {.  p
3a40: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
3a50: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
3a60: 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g4} {.    if {$c
3a70: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 49 4e 53  ode=="SQLITE_INS
3a80: 45 52 54 22 20 26 26 20 24 61 72 67 31 3d 3d 22  ERT" && $arg1=="
3a90: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 7d 20  sqlite_master"} 
3aa0: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  {.      return S
3ab0: 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d  QLITE_DENY.    }
3ac0: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
3ad0: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
3ae0: 68 73 71 6c 20 7b 43 52 45 41 54 45 20 56 49 45  hsql {CREATE VIE
3af0: 57 20 76 31 20 41 53 20 53 45 4c 45 43 54 20 61  W v1 AS SELECT a
3b00: 2b 31 2c 62 2b 31 20 46 52 4f 4d 20 74 32 7d 0a  +1,b+1 FROM t2}.
3b10: 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72  } {1 {not author
3b20: 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  ized}}.do_test a
3b30: 75 74 68 2d 31 2e 39 32 20 7b 0a 20 20 65 78 65  uth-1.92 {.  exe
3b40: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d  csql {SELECT nam
3b50: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  e FROM sqlite_ma
3b60: 73 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a 64 6f 5f  ster}.} {t2}.do_
3b70: 74 65 73 74 20 61 75 74 68 2d 31 2e 39 33 20 7b  test auth-1.93 {
3b80: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
3b90: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
3ba0: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66  3 arg4} {.    if
3bb0: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
3bc0: 5f 49 4e 53 45 52 54 22 20 26 26 20 24 61 72 67  _INSERT" && $arg
3bd0: 31 3d 3d 22 73 71 6c 69 74 65 5f 6d 61 73 74 65  1=="sqlite_maste
3be0: 72 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75  r"} {.      retu
3bf0: 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45  rn SQLITE_IGNORE
3c00: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
3c10: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
3c20: 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41    catchsql {CREA
3c30: 54 45 20 56 49 45 57 20 76 31 20 41 53 20 53 45  TE VIEW v1 AS SE
3c40: 4c 45 43 54 20 61 2b 31 2c 62 2b 31 20 46 52 4f  LECT a+1,b+1 FRO
3c50: 4d 20 74 32 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  M t2}.} {0 {}}.d
3c60: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 39 34  o_test auth-1.94
3c70: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
3c80: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73  LECT name FROM s
3c90: 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20  qlite_master}.} 
3ca0: 7b 74 32 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 75  {t2}..do_test au
3cb0: 74 68 2d 31 2e 39 35 20 7b 0a 20 20 70 72 6f 63  th-1.95 {.  proc
3cc0: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
3cd0: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
3ce0: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
3cf0: 3d 3d 22 53 51 4c 49 54 45 5f 49 4e 53 45 52 54  =="SQLITE_INSERT
3d00: 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71 6c  " && $arg1=="sql
3d10: 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22  ite_temp_master"
3d20: 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  } {.      return
3d30: 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20   SQLITE_DENY.   
3d40: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
3d50: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
3d60: 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45 20 54  tchsql {CREATE T
3d70: 45 4d 50 4f 52 41 52 59 20 56 49 45 57 20 76 31  EMPORARY VIEW v1
3d80: 20 41 53 20 53 45 4c 45 43 54 20 61 2b 31 2c 62   AS SELECT a+1,b
3d90: 2b 31 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31  +1 FROM t2}.} {1
3da0: 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64   {not authorized
3db0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
3dc0: 31 2e 39 36 20 7b 0a 20 20 65 78 65 63 73 71 6c  1.96 {.  execsql
3dd0: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
3de0: 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  OM sqlite_temp_m
3df0: 61 73 74 65 72 7d 0a 7d 20 7b 74 31 7d 0a 64 6f  aster}.} {t1}.do
3e00: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 39 37 20  _test auth-1.97 
3e10: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
3e20: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
3e30: 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69  g3 arg4} {.    i
3e40: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
3e50: 45 5f 49 4e 53 45 52 54 22 20 26 26 20 24 61 72  E_INSERT" && $ar
3e60: 67 31 3d 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70  g1=="sqlite_temp
3e70: 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20  _master"} {.    
3e80: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
3e90: 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20  IGNORE.    }.   
3ea0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
3eb0: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
3ec0: 20 7b 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41   {CREATE TEMPORA
3ed0: 52 59 20 56 49 45 57 20 76 31 20 41 53 20 53 45  RY VIEW v1 AS SE
3ee0: 4c 45 43 54 20 61 2b 31 2c 62 2b 31 20 46 52 4f  LECT a+1,b+1 FRO
3ef0: 4d 20 74 32 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  M t2}.} {0 {}}.d
3f00: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 39 38  o_test auth-1.98
3f10: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
3f20: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73  LECT name FROM s
3f30: 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
3f40: 72 7d 0a 7d 20 7b 74 31 7d 0a 0a 64 6f 5f 74 65  r}.} {t1}..do_te
3f50: 73 74 20 61 75 74 68 2d 31 2e 39 39 20 7b 0a 20  st auth-1.99 {. 
3f60: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
3f70: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
3f80: 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg4} {.    if {
3f90: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44  $code=="SQLITE_D
3fa0: 45 4c 45 54 45 22 20 26 26 20 24 61 72 67 31 3d  ELETE" && $arg1=
3fb0: 3d 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22  ="sqlite_master"
3fc0: 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  } {.      return
3fd0: 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20   SQLITE_DENY.   
3fe0: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
3ff0: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
4000: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 43 52 45  tchsql {.    CRE
4010: 41 54 45 20 56 49 45 57 20 76 32 20 41 53 20 53  ATE VIEW v2 AS S
4020: 45 4c 45 43 54 20 61 2b 31 2c 62 2b 31 20 46 52  ELECT a+1,b+1 FR
4030: 4f 4d 20 74 32 3b 0a 20 20 20 20 44 52 4f 50 20  OM t2;.    DROP 
4040: 56 49 45 57 20 76 32 0a 20 20 7d 0a 7d 20 7b 31  VIEW v2.  }.} {1
4050: 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64   {not authorized
4060: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
4070: 31 2e 31 30 30 20 7b 0a 20 20 65 78 65 63 73 71  1.100 {.  execsq
4080: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
4090: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
40a0: 72 7d 0a 7d 20 7b 74 32 20 76 32 7d 0a 64 6f 5f  r}.} {t2 v2}.do_
40b0: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 30 31 20  test auth-1.101 
40c0: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
40d0: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
40e0: 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69  g3 arg4} {.    i
40f0: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
4100: 45 5f 44 52 4f 50 5f 56 49 45 57 22 7d 20 7b 0a  E_DROP_VIEW"} {.
4110: 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68        set ::auth
4120: 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31  args [list $arg1
4130: 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72   $arg2 $arg3 $ar
4140: 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  g4].      return
4150: 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20   SQLITE_DENY.   
4160: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
4170: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
4180: 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 56 49 45  tchsql {DROP VIE
4190: 57 20 76 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20  W v2}.} {1 {not 
41a0: 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f  authorized}}.do_
41b0: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 30 32 20  test auth-1.102 
41c0: 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72  {.  set ::authar
41d0: 67 73 0a 7d 20 7b 76 32 20 7b 7d 20 6d 61 69 6e  gs.} {v2 {} main
41e0: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
41f0: 68 2d 31 2e 31 30 33 20 7b 0a 20 20 65 78 65 63  h-1.103 {.  exec
4200: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
4210: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
4220: 74 65 72 7d 0a 7d 20 7b 74 32 20 76 32 7d 0a 64  ter}.} {t2 v2}.d
4230: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 30  o_test auth-1.10
4240: 34 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  4 {.  proc auth 
4250: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
4260: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
4270: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
4280: 49 54 45 5f 44 45 4c 45 54 45 22 20 26 26 20 24  ITE_DELETE" && $
4290: 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 6d 61  arg1=="sqlite_ma
42a0: 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 72  ster"} {.      r
42b0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e  eturn SQLITE_IGN
42c0: 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  ORE.    }.    re
42d0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
42e0: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44   }.  catchsql {D
42f0: 52 4f 50 20 56 49 45 57 20 76 32 7d 0a 7d 20 7b  ROP VIEW v2}.} {
4300: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  0 {}}.do_test au
4310: 74 68 2d 31 2e 31 30 35 20 7b 0a 20 20 65 78 65  th-1.105 {.  exe
4320: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d  csql {SELECT nam
4330: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  e FROM sqlite_ma
4340: 73 74 65 72 7d 0a 7d 20 7b 74 32 20 76 32 7d 0a  ster}.} {t2 v2}.
4350: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
4360: 30 36 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  06 {.  proc auth
4370: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
4380: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
4390: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
43a0: 4c 49 54 45 5f 44 52 4f 50 5f 56 49 45 57 22 7d  LITE_DROP_VIEW"}
43b0: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61   {.      set ::a
43c0: 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61  uthargs [list $a
43d0: 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20  rg1 $arg2 $arg3 
43e0: 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74  $arg4].      ret
43f0: 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52  urn SQLITE_IGNOR
4400: 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  E.    }.    retu
4410: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
4420: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f  .  catchsql {DRO
4430: 50 20 56 49 45 57 20 76 32 7d 0a 7d 20 7b 30 20  P VIEW v2}.} {0 
4440: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
4450: 2d 31 2e 31 30 37 20 7b 0a 20 20 73 65 74 20 3a  -1.107 {.  set :
4460: 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 76 32 20  :authargs.} {v2 
4470: 7b 7d 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74  {} main {}}.do_t
4480: 65 73 74 20 61 75 74 68 2d 31 2e 31 30 38 20 7b  est auth-1.108 {
4490: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
44a0: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
44b0: 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74  ite_master}.} {t
44c0: 32 20 76 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75  2 v2}.do_test au
44d0: 74 68 2d 31 2e 31 30 39 20 7b 0a 20 20 70 72 6f  th-1.109 {.  pro
44e0: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
44f0: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
4500: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
4510: 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f 50 5f  e=="SQLITE_DROP_
4520: 56 49 45 57 22 7d 20 7b 0a 20 20 20 20 20 20 73  VIEW"} {.      s
4530: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c  et ::authargs [l
4540: 69 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20  ist $arg1 $arg2 
4550: 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20  $arg3 $arg4].   
4560: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
4570: 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  _OK.    }.    re
4580: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
4590: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44   }.  catchsql {D
45a0: 52 4f 50 20 56 49 45 57 20 76 32 7d 0a 7d 20 7b  ROP VIEW v2}.} {
45b0: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  0 {}}.do_test au
45c0: 74 68 2d 31 2e 31 31 30 20 7b 0a 20 20 73 65 74  th-1.110 {.  set
45d0: 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 76   ::authargs.} {v
45e0: 32 20 7b 7d 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f  2 {} main {}}.do
45f0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 31 31  _test auth-1.111
4600: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
4610: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73  LECT name FROM s
4620: 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20  qlite_master}.} 
4630: 7b 74 32 7d 0a 0a 0a 64 6f 5f 74 65 73 74 20 61  {t2}...do_test a
4640: 75 74 68 2d 31 2e 31 31 32 20 7b 0a 20 20 70 72  uth-1.112 {.  pr
4650: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
4660: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
4670: 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f  4} {.    if {$co
4680: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45  de=="SQLITE_DELE
4690: 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73  TE" && $arg1=="s
46a0: 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
46b0: 72 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75  r"} {.      retu
46c0: 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20  rn SQLITE_DENY. 
46d0: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
46e0: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
46f0: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 43  catchsql {.    C
4700: 52 45 41 54 45 20 54 45 4d 50 20 56 49 45 57 20  REATE TEMP VIEW 
4710: 76 31 20 41 53 20 53 45 4c 45 43 54 20 61 2b 31  v1 AS SELECT a+1
4720: 2c 62 2b 31 20 46 52 4f 4d 20 74 31 3b 0a 20 20  ,b+1 FROM t1;.  
4730: 20 20 44 52 4f 50 20 56 49 45 57 20 76 31 0a 20    DROP VIEW v1. 
4740: 20 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74   }.} {1 {not aut
4750: 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73  horized}}.do_tes
4760: 74 20 61 75 74 68 2d 31 2e 31 31 33 20 7b 0a 20  t auth-1.113 {. 
4770: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
4780: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
4790: 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d  e_temp_master}.}
47a0: 20 7b 74 31 20 76 31 7d 0a 64 6f 5f 74 65 73 74   {t1 v1}.do_test
47b0: 20 61 75 74 68 2d 31 2e 31 31 34 20 7b 0a 20 20   auth-1.114 {.  
47c0: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
47d0: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
47e0: 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg4} {.    if {$
47f0: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52  code=="SQLITE_DR
4800: 4f 50 5f 54 45 4d 50 5f 56 49 45 57 22 7d 20 7b  OP_TEMP_VIEW"} {
4810: 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74  .      set ::aut
4820: 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67  hargs [list $arg
4830: 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61  1 $arg2 $arg3 $a
4840: 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72  rg4].      retur
4850: 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20  n SQLITE_DENY.  
4860: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
4870: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
4880: 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 56 49  atchsql {DROP VI
4890: 45 57 20 76 31 7d 0a 7d 20 7b 31 20 7b 6e 6f 74  EW v1}.} {1 {not
48a0: 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f   authorized}}.do
48b0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 31 35  _test auth-1.115
48c0: 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61   {.  set ::autha
48d0: 72 67 73 0a 7d 20 7b 76 31 20 7b 7d 20 74 65 6d  rgs.} {v1 {} tem
48e0: 70 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  p {}}.do_test au
48f0: 74 68 2d 31 2e 31 31 36 20 7b 0a 20 20 65 78 65  th-1.116 {.  exe
4900: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d  csql {SELECT nam
4910: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65  e FROM sqlite_te
4920: 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31  mp_master}.} {t1
4930: 20 76 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   v1}.do_test aut
4940: 68 2d 31 2e 31 31 37 20 7b 0a 20 20 70 72 6f 63  h-1.117 {.  proc
4950: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
4960: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
4970: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
4980: 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45 54 45  =="SQLITE_DELETE
4990: 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71 6c  " && $arg1=="sql
49a0: 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22  ite_temp_master"
49b0: 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  } {.      return
49c0: 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20   SQLITE_IGNORE. 
49d0: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
49e0: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
49f0: 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 56  catchsql {DROP V
4a00: 49 45 57 20 76 31 7d 0a 7d 20 7b 30 20 7b 7d 7d  IEW v1}.} {0 {}}
4a10: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
4a20: 31 31 38 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  118 {.  execsql 
4a30: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
4a40: 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  M sqlite_temp_ma
4a50: 73 74 65 72 7d 0a 7d 20 7b 74 31 20 76 31 7d 0a  ster}.} {t1 v1}.
4a60: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
4a70: 31 39 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  19 {.  proc auth
4a80: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
4a90: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
4aa0: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
4ab0: 4c 49 54 45 5f 44 52 4f 50 5f 54 45 4d 50 5f 56  LITE_DROP_TEMP_V
4ac0: 49 45 57 22 7d 20 7b 0a 20 20 20 20 20 20 73 65  IEW"} {.      se
4ad0: 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69  t ::authargs [li
4ae0: 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24  st $arg1 $arg2 $
4af0: 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20  arg3 $arg4].    
4b00: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
4b10: 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20  IGNORE.    }.   
4b20: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
4b30: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
4b40: 20 7b 44 52 4f 50 20 56 49 45 57 20 76 31 7d 0a   {DROP VIEW v1}.
4b50: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
4b60: 20 61 75 74 68 2d 31 2e 31 32 30 20 7b 0a 20 20   auth-1.120 {.  
4b70: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d  set ::authargs.}
4b80: 20 7b 76 31 20 7b 7d 20 74 65 6d 70 20 7b 7d 7d   {v1 {} temp {}}
4b90: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
4ba0: 31 32 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  121 {.  execsql 
4bb0: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
4bc0: 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  M sqlite_temp_ma
4bd0: 73 74 65 72 7d 0a 7d 20 7b 74 31 20 76 31 7d 0a  ster}.} {t1 v1}.
4be0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
4bf0: 32 32 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  22 {.  proc auth
4c00: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
4c10: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
4c20: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
4c30: 4c 49 54 45 5f 44 52 4f 50 5f 54 45 4d 50 5f 56  LITE_DROP_TEMP_V
4c40: 49 45 57 22 7d 20 7b 0a 20 20 20 20 20 20 73 65  IEW"} {.      se
4c50: 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69  t ::authargs [li
4c60: 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24  st $arg1 $arg2 $
4c70: 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20  arg3 $arg4].    
4c80: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
4c90: 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  OK.    }.    ret
4ca0: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
4cb0: 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52  }.  catchsql {DR
4cc0: 4f 50 20 56 49 45 57 20 76 31 7d 0a 7d 20 7b 30  OP VIEW v1}.} {0
4cd0: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
4ce0: 68 2d 31 2e 31 32 33 20 7b 0a 20 20 73 65 74 20  h-1.123 {.  set 
4cf0: 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 76 31  ::authargs.} {v1
4d00: 20 7b 7d 20 74 65 6d 70 20 7b 7d 7d 0a 64 6f 5f   {} temp {}}.do_
4d10: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 32 34 20  test auth-1.124 
4d20: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
4d30: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
4d40: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
4d50: 7d 0a 7d 20 7b 74 31 7d 0a 7d 20 3b 23 20 69 66  }.} {t1}.} ;# if
4d60: 63 61 70 61 62 6c 65 20 76 69 65 77 0a 0a 23 20  capable view..# 
4d70: 54 65 73 74 20 63 61 73 65 73 20 61 75 74 68 2d  Test cases auth-
4d80: 31 2e 31 32 35 20 74 6f 20 61 75 74 68 2d 31 2e  1.125 to auth-1.
4d90: 31 37 36 20 74 65 73 74 20 63 72 65 61 74 69 6e  176 test creatin
4da0: 67 20 61 6e 64 20 64 72 6f 70 70 69 6e 67 20 74  g and dropping t
4db0: 72 69 67 67 65 72 73 2e 0a 23 20 4f 6d 69 74 20  riggers..# Omit 
4dc0: 74 68 65 73 65 20 69 66 20 74 68 65 20 6c 69 62  these if the lib
4dd0: 72 61 72 79 20 77 61 73 20 63 6f 6d 70 69 6c 65  rary was compile
4de0: 64 20 77 69 74 68 20 74 72 69 67 67 65 72 73 20  d with triggers 
4df0: 6f 6d 69 74 74 65 64 2e 0a 23 0a 69 66 63 61 70  omitted..#.ifcap
4e00: 61 62 6c 65 20 74 72 69 67 67 65 72 20 7b 0a 64  able trigger {.d
4e10: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 32  o_test auth-1.12
4e20: 35 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  5 {.  proc auth 
4e30: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
4e40: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
4e50: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
4e60: 49 54 45 5f 43 52 45 41 54 45 5f 54 52 49 47 47  ITE_CREATE_TRIGG
4e70: 45 52 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74  ER"} {.      set
4e80: 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73   ::authargs [lis
4e90: 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61  t $arg1 $arg2 $a
4ea0: 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20  rg3 $arg4].     
4eb0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44   return SQLITE_D
4ec0: 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  ENY.    }.    re
4ed0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
4ee0: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a   }.  catchsql {.
4ef0: 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47      CREATE TRIGG
4f00: 45 52 20 72 32 20 44 45 4c 45 54 45 20 6f 6e 20  ER r2 DELETE on 
4f10: 74 32 20 42 45 47 49 4e 0a 20 20 20 20 20 20 20  t2 BEGIN.       
4f20: 20 53 45 4c 45 43 54 20 4e 55 4c 4c 3b 0a 20 20   SELECT NULL;.  
4f30: 20 20 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 31 20    END;.  }.} {1 
4f40: 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d  {not authorized}
4f50: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
4f60: 2e 31 32 36 20 7b 0a 20 20 73 65 74 20 3a 3a 61  .126 {.  set ::a
4f70: 75 74 68 61 72 67 73 0a 7d 20 7b 72 32 20 74 32  uthargs.} {r2 t2
4f80: 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73   main {}}.do_tes
4f90: 74 20 61 75 74 68 2d 31 2e 31 32 37 20 7b 0a 20  t auth-1.127 {. 
4fa0: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
4fb0: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
4fc0: 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 7d  e_master}.} {t2}
4fd0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
4fe0: 31 32 38 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  128 {.  proc aut
4ff0: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
5000: 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20  2 arg3 arg4} {. 
5010: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
5020: 51 4c 49 54 45 5f 49 4e 53 45 52 54 22 20 26 26  QLITE_INSERT" &&
5030: 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f   $arg1=="sqlite_
5040: 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20  master"} {.     
5050: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44   return SQLITE_D
5060: 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  ENY.    }.    re
5070: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
5080: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a   }.  catchsql {.
5090: 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47      CREATE TRIGG
50a0: 45 52 20 72 32 20 44 45 4c 45 54 45 20 6f 6e 20  ER r2 DELETE on 
50b0: 74 32 20 42 45 47 49 4e 0a 20 20 20 20 20 20 20  t2 BEGIN.       
50c0: 20 53 45 4c 45 43 54 20 4e 55 4c 4c 3b 0a 20 20   SELECT NULL;.  
50d0: 20 20 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 31 20    END;.  }.} {1 
50e0: 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d  {not authorized}
50f0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
5100: 2e 31 32 39 20 7b 0a 20 20 65 78 65 63 73 71 6c  .129 {.  execsql
5110: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
5120: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
5130: 7d 0a 7d 20 7b 74 32 7d 0a 64 6f 5f 74 65 73 74  }.} {t2}.do_test
5140: 20 61 75 74 68 2d 31 2e 31 33 30 20 7b 0a 20 20   auth-1.130 {.  
5150: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
5160: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
5170: 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg4} {.    if {$
5180: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52  code=="SQLITE_CR
5190: 45 41 54 45 5f 54 52 49 47 47 45 52 22 7d 20 7b  EATE_TRIGGER"} {
51a0: 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74  .      set ::aut
51b0: 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67  hargs [list $arg
51c0: 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61  1 $arg2 $arg3 $a
51d0: 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72  rg4].      retur
51e0: 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a  n SQLITE_IGNORE.
51f0: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
5200: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
5210: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
5220: 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 72  CREATE TRIGGER r
5230: 32 20 44 45 4c 45 54 45 20 6f 6e 20 74 32 20 42  2 DELETE on t2 B
5240: 45 47 49 4e 0a 20 20 20 20 20 20 20 20 53 45 4c  EGIN.        SEL
5250: 45 43 54 20 4e 55 4c 4c 3b 0a 20 20 20 20 45 4e  ECT NULL;.    EN
5260: 44 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a  D;.  }.} {0 {}}.
5270: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
5280: 33 31 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74  31 {.  set ::aut
5290: 68 61 72 67 73 0a 7d 20 7b 72 32 20 74 32 20 6d  hargs.} {r2 t2 m
52a0: 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20  ain {}}.do_test 
52b0: 61 75 74 68 2d 31 2e 31 33 32 20 7b 0a 20 20 65  auth-1.132 {.  e
52c0: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
52d0: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
52e0: 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a 64  master}.} {t2}.d
52f0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 33  o_test auth-1.13
5300: 33 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  3 {.  proc auth 
5310: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
5320: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
5330: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
5340: 49 54 45 5f 49 4e 53 45 52 54 22 20 26 26 20 24  ITE_INSERT" && $
5350: 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 6d 61  arg1=="sqlite_ma
5360: 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 72  ster"} {.      r
5370: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e  eturn SQLITE_IGN
5380: 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  ORE.    }.    re
5390: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
53a0: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a   }.  catchsql {.
53b0: 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47      CREATE TRIGG
53c0: 45 52 20 72 32 20 44 45 4c 45 54 45 20 6f 6e 20  ER r2 DELETE on 
53d0: 74 32 20 42 45 47 49 4e 0a 20 20 20 20 20 20 20  t2 BEGIN.       
53e0: 20 53 45 4c 45 43 54 20 4e 55 4c 4c 3b 0a 20 20   SELECT NULL;.  
53f0: 20 20 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 30 20    END;.  }.} {0 
5400: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
5410: 2d 31 2e 31 33 34 20 7b 0a 20 20 65 78 65 63 73  -1.134 {.  execs
5420: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
5430: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
5440: 65 72 7d 0a 7d 20 7b 74 32 7d 0a 64 6f 5f 74 65  er}.} {t2}.do_te
5450: 73 74 20 61 75 74 68 2d 31 2e 31 33 35 20 7b 0a  st auth-1.135 {.
5460: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
5470: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
5480: 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20   arg4} {.    if 
5490: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
54a0: 43 52 45 41 54 45 5f 54 52 49 47 47 45 52 22 7d  CREATE_TRIGGER"}
54b0: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61   {.      set ::a
54c0: 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61  uthargs [list $a
54d0: 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20  rg1 $arg2 $arg3 
54e0: 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74  $arg4].      ret
54f0: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
5500: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
5510: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
5520: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 43 52  atchsql {.    CR
5530: 45 41 54 45 20 54 41 42 4c 45 20 74 78 28 69 64  EATE TABLE tx(id
5540: 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 52  );.    CREATE TR
5550: 49 47 47 45 52 20 72 32 20 41 46 54 45 52 20 49  IGGER r2 AFTER I
5560: 4e 53 45 52 54 20 4f 4e 20 74 32 20 42 45 47 49  NSERT ON t2 BEGI
5570: 4e 0a 20 20 20 20 20 20 20 49 4e 53 45 52 54 20  N.       INSERT 
5580: 49 4e 54 4f 20 74 78 20 56 41 4c 55 45 53 28 4e  INTO tx VALUES(N
5590: 45 57 2e 72 6f 77 69 64 29 3b 0a 20 20 20 20 45  EW.rowid);.    E
55a0: 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d  ND;.  }.} {0 {}}
55b0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
55c0: 31 33 36 2e 31 20 7b 0a 20 20 73 65 74 20 3a 3a  136.1 {.  set ::
55d0: 61 75 74 68 61 72 67 73 0a 7d 20 7b 72 32 20 74  authargs.} {r2 t
55e0: 32 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65  2 main {}}.do_te
55f0: 73 74 20 61 75 74 68 2d 31 2e 31 33 36 2e 32 20  st auth-1.136.2 
5600: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
5610: 20 20 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52    SELECT name FR
5620: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
5630: 20 57 48 45 52 45 20 74 79 70 65 3d 27 74 72 69   WHERE type='tri
5640: 67 67 65 72 27 0a 20 20 7d 0a 7d 20 7b 72 32 7d  gger'.  }.} {r2}
5650: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
5660: 31 33 36 2e 33 20 7b 0a 20 20 70 72 6f 63 20 61  136.3 {.  proc a
5670: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
5680: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
5690: 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 3a 3a 61  .    lappend ::a
56a0: 75 74 68 61 72 67 73 20 24 63 6f 64 65 20 24 61  uthargs $code $a
56b0: 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20  rg1 $arg2 $arg3 
56c0: 24 61 72 67 34 0a 20 20 20 20 72 65 74 75 72 6e  $arg4.    return
56d0: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
56e0: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
56f0: 7b 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  {}.  execsql {. 
5700: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
5710: 32 20 56 41 4c 55 45 53 28 31 2c 32 2c 33 29 3b  2 VALUES(1,2,3);
5720: 0a 20 20 7d 0a 20 20 73 65 74 20 3a 3a 61 75 74  .  }.  set ::aut
5730: 68 61 72 67 73 20 0a 7d 20 7b 53 51 4c 49 54 45  hargs .} {SQLITE
5740: 5f 49 4e 53 45 52 54 20 74 32 20 7b 7d 20 6d 61  _INSERT t2 {} ma
5750: 69 6e 20 7b 7d 20 53 51 4c 49 54 45 5f 49 4e 53  in {} SQLITE_INS
5760: 45 52 54 20 74 78 20 7b 7d 20 6d 61 69 6e 20 72  ERT tx {} main r
5770: 32 20 53 51 4c 49 54 45 5f 52 45 41 44 20 74 32  2 SQLITE_READ t2
5780: 20 52 4f 57 49 44 20 6d 61 69 6e 20 72 32 7d 0a   ROWID main r2}.
5790: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
57a0: 33 36 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c  36.4 {.  execsql
57b0: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20   {.    SELECT * 
57c0: 46 52 4f 4d 20 74 78 3b 0a 20 20 7d 0a 7d 20 7b  FROM tx;.  }.} {
57d0: 33 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  3}.do_test auth-
57e0: 31 2e 31 33 37 20 7b 0a 20 20 65 78 65 63 73 71  1.137 {.  execsq
57f0: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
5800: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
5810: 72 7d 0a 7d 20 7b 74 32 20 74 78 20 72 32 7d 0a  r}.} {t2 tx r2}.
5820: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
5830: 33 38 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  38 {.  proc auth
5840: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
5850: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
5860: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
5870: 4c 49 54 45 5f 43 52 45 41 54 45 5f 54 45 4d 50  LITE_CREATE_TEMP
5880: 5f 54 52 49 47 47 45 52 22 7d 20 7b 0a 20 20 20  _TRIGGER"} {.   
5890: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
58a0: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
58b0: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
58c0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
58d0: 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a  LITE_DENY.    }.
58e0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
58f0: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
5900: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
5910: 20 54 52 49 47 47 45 52 20 72 31 20 44 45 4c 45   TRIGGER r1 DELE
5920: 54 45 20 6f 6e 20 74 31 20 42 45 47 49 4e 0a 20  TE on t1 BEGIN. 
5930: 20 20 20 20 20 20 20 53 45 4c 45 43 54 20 4e 55         SELECT NU
5940: 4c 4c 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 7d  LL;.    END;.  }
5950: 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f  .} {1 {not autho
5960: 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20  rized}}.do_test 
5970: 61 75 74 68 2d 31 2e 31 33 39 20 7b 0a 20 20 73  auth-1.139 {.  s
5980: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20  et ::authargs.} 
5990: 7b 72 31 20 74 31 20 74 65 6d 70 20 7b 7d 7d 0a  {r1 t1 temp {}}.
59a0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
59b0: 34 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  40 {.  execsql {
59c0: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
59d0: 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73   sqlite_temp_mas
59e0: 74 65 72 7d 0a 7d 20 7b 74 31 7d 0a 64 6f 5f 74  ter}.} {t1}.do_t
59f0: 65 73 74 20 61 75 74 68 2d 31 2e 31 34 31 20 7b  est auth-1.141 {
5a00: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
5a10: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
5a20: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66  3 arg4} {.    if
5a30: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
5a40: 5f 49 4e 53 45 52 54 22 20 26 26 20 24 61 72 67  _INSERT" && $arg
5a50: 31 3d 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f  1=="sqlite_temp_
5a60: 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20  master"} {.     
5a70: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44   return SQLITE_D
5a80: 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  ENY.    }.    re
5a90: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
5aa0: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a   }.  catchsql {.
5ab0: 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47      CREATE TRIGG
5ac0: 45 52 20 72 31 20 44 45 4c 45 54 45 20 6f 6e 20  ER r1 DELETE on 
5ad0: 74 31 20 42 45 47 49 4e 0a 20 20 20 20 20 20 20  t1 BEGIN.       
5ae0: 20 53 45 4c 45 43 54 20 4e 55 4c 4c 3b 0a 20 20   SELECT NULL;.  
5af0: 20 20 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 31 20    END;.  }.} {1 
5b00: 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d  {not authorized}
5b10: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
5b20: 2e 31 34 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  .142 {.  execsql
5b30: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
5b40: 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  OM sqlite_temp_m
5b50: 61 73 74 65 72 7d 0a 7d 20 7b 74 31 7d 0a 64 6f  aster}.} {t1}.do
5b60: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 34 33  _test auth-1.143
5b70: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
5b80: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
5b90: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
5ba0: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
5bb0: 54 45 5f 43 52 45 41 54 45 5f 54 45 4d 50 5f 54  TE_CREATE_TEMP_T
5bc0: 52 49 47 47 45 52 22 7d 20 7b 0a 20 20 20 20 20  RIGGER"} {.     
5bd0: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
5be0: 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67  [list $arg1 $arg
5bf0: 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20  2 $arg3 $arg4]. 
5c00: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
5c10: 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a  TE_IGNORE.    }.
5c20: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
5c30: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
5c40: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
5c50: 20 54 52 49 47 47 45 52 20 72 31 20 44 45 4c 45   TRIGGER r1 DELE
5c60: 54 45 20 6f 6e 20 74 31 20 42 45 47 49 4e 0a 20  TE on t1 BEGIN. 
5c70: 20 20 20 20 20 20 20 53 45 4c 45 43 54 20 4e 55         SELECT NU
5c80: 4c 4c 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 7d  LL;.    END;.  }
5c90: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
5ca0: 74 20 61 75 74 68 2d 31 2e 31 34 34 20 7b 0a 20  t auth-1.144 {. 
5cb0: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a   set ::authargs.
5cc0: 7d 20 7b 72 31 20 74 31 20 74 65 6d 70 20 7b 7d  } {r1 t1 temp {}
5cd0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
5ce0: 2e 31 34 35 20 7b 0a 20 20 65 78 65 63 73 71 6c  .145 {.  execsql
5cf0: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
5d00: 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  OM sqlite_temp_m
5d10: 61 73 74 65 72 7d 0a 7d 20 7b 74 31 7d 0a 64 6f  aster}.} {t1}.do
5d20: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 34 36  _test auth-1.146
5d30: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
5d40: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
5d50: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
5d60: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
5d70: 54 45 5f 49 4e 53 45 52 54 22 20 26 26 20 24 61  TE_INSERT" && $a
5d80: 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 74 65 6d  rg1=="sqlite_tem
5d90: 70 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20  p_master"} {.   
5da0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
5db0: 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20  _IGNORE.    }.  
5dc0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
5dd0: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
5de0: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
5df0: 52 49 47 47 45 52 20 72 31 20 44 45 4c 45 54 45  RIGGER r1 DELETE
5e00: 20 6f 6e 20 74 31 20 42 45 47 49 4e 0a 20 20 20   on t1 BEGIN.   
5e10: 20 20 20 20 20 53 45 4c 45 43 54 20 4e 55 4c 4c       SELECT NULL
5e20: 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 7d 0a 7d  ;.    END;.  }.}
5e30: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
5e40: 61 75 74 68 2d 31 2e 31 34 37 20 7b 0a 20 20 65  auth-1.147 {.  e
5e50: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
5e60: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
5e70: 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b  temp_master}.} {
5e80: 74 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  t1}.do_test auth
5e90: 2d 31 2e 31 34 38 20 7b 0a 20 20 70 72 6f 63 20  -1.148 {.  proc 
5ea0: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
5eb0: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
5ec0: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
5ed0: 3d 22 53 51 4c 49 54 45 5f 43 52 45 41 54 45 5f  ="SQLITE_CREATE_
5ee0: 54 45 4d 50 5f 54 52 49 47 47 45 52 22 7d 20 7b  TEMP_TRIGGER"} {
5ef0: 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74  .      set ::aut
5f00: 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67  hargs [list $arg
5f10: 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61  1 $arg2 $arg3 $a
5f20: 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72  rg4].      retur
5f30: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20  n SQLITE_OK.    
5f40: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
5f50: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
5f60: 63 68 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41  chsql {.    CREA
5f70: 54 45 20 54 52 49 47 47 45 52 20 72 31 20 44 45  TE TRIGGER r1 DE
5f80: 4c 45 54 45 20 6f 6e 20 74 31 20 42 45 47 49 4e  LETE on t1 BEGIN
5f90: 0a 20 20 20 20 20 20 20 20 53 45 4c 45 43 54 20  .        SELECT 
5fa0: 4e 55 4c 4c 3b 0a 20 20 20 20 45 4e 44 3b 0a 20  NULL;.    END;. 
5fb0: 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74   }.} {0 {}}.do_t
5fc0: 65 73 74 20 61 75 74 68 2d 31 2e 31 34 39 20 7b  est auth-1.149 {
5fd0: 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67  .  set ::autharg
5fe0: 73 0a 7d 20 7b 72 31 20 74 31 20 74 65 6d 70 20  s.} {r1 t1 temp 
5ff0: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
6000: 2d 31 2e 31 35 30 20 7b 0a 20 20 65 78 65 63 73  -1.150 {.  execs
6010: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
6020: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70  FROM sqlite_temp
6030: 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31 20 72  _master}.} {t1 r
6040: 31 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  1}..do_test auth
6050: 2d 31 2e 31 35 31 20 7b 0a 20 20 70 72 6f 63 20  -1.151 {.  proc 
6060: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
6070: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
6080: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
6090: 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 22  ="SQLITE_DELETE"
60a0: 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69   && $arg1=="sqli
60b0: 74 65 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20  te_master"} {.  
60c0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
60d0: 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20  E_DENY.    }.   
60e0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
60f0: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
6100: 20 7b 44 52 4f 50 20 54 52 49 47 47 45 52 20 72   {DROP TRIGGER r
6110: 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74  2}.} {1 {not aut
6120: 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73  horized}}.do_tes
6130: 74 20 61 75 74 68 2d 31 2e 31 35 32 20 7b 0a 20  t auth-1.152 {. 
6140: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
6150: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
6160: 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 20  e_master}.} {t2 
6170: 74 78 20 72 32 7d 0a 64 6f 5f 74 65 73 74 20 61  tx r2}.do_test a
6180: 75 74 68 2d 31 2e 31 35 33 20 7b 0a 20 20 70 72  uth-1.153 {.  pr
6190: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
61a0: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
61b0: 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f  4} {.    if {$co
61c0: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f 50  de=="SQLITE_DROP
61d0: 5f 54 52 49 47 47 45 52 22 7d 20 7b 0a 20 20 20  _TRIGGER"} {.   
61e0: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
61f0: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
6200: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
6210: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
6220: 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a  LITE_DENY.    }.
6230: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
6240: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
6250: 73 71 6c 20 7b 44 52 4f 50 20 54 52 49 47 47 45  sql {DROP TRIGGE
6260: 52 20 72 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20  R r2}.} {1 {not 
6270: 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f  authorized}}.do_
6280: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 35 34 20  test auth-1.154 
6290: 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72  {.  set ::authar
62a0: 67 73 0a 7d 20 7b 72 32 20 74 32 20 6d 61 69 6e  gs.} {r2 t2 main
62b0: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
62c0: 68 2d 31 2e 31 35 35 20 7b 0a 20 20 65 78 65 63  h-1.155 {.  exec
62d0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
62e0: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
62f0: 74 65 72 7d 0a 7d 20 7b 74 32 20 74 78 20 72 32  ter}.} {t2 tx r2
6300: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
6310: 2e 31 35 36 20 7b 0a 20 20 70 72 6f 63 20 61 75  .156 {.  proc au
6320: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
6330: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
6340: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
6350: 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 22 20 26  SQLITE_DELETE" &
6360: 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65  & $arg1=="sqlite
6370: 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20  _master"} {.    
6380: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
6390: 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20  IGNORE.    }.   
63a0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
63b0: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
63c0: 20 7b 44 52 4f 50 20 54 52 49 47 47 45 52 20 72   {DROP TRIGGER r
63d0: 32 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74  2}.} {0 {}}.do_t
63e0: 65 73 74 20 61 75 74 68 2d 31 2e 31 35 37 20 7b  est auth-1.157 {
63f0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
6400: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
6410: 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74  ite_master}.} {t
6420: 32 20 74 78 20 72 32 7d 0a 64 6f 5f 74 65 73 74  2 tx r2}.do_test
6430: 20 61 75 74 68 2d 31 2e 31 35 38 20 7b 0a 20 20   auth-1.158 {.  
6440: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
6450: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
6460: 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg4} {.    if {$
6470: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52  code=="SQLITE_DR
6480: 4f 50 5f 54 52 49 47 47 45 52 22 7d 20 7b 0a 20  OP_TRIGGER"} {. 
6490: 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61       set ::autha
64a0: 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20  rgs [list $arg1 
64b0: 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67  $arg2 $arg3 $arg
64c0: 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  4].      return 
64d0: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20  SQLITE_IGNORE.  
64e0: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
64f0: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
6500: 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54 52  atchsql {DROP TR
6510: 49 47 47 45 52 20 72 32 7d 0a 7d 20 7b 30 20 7b  IGGER r2}.} {0 {
6520: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
6530: 31 2e 31 35 39 20 7b 0a 20 20 73 65 74 20 3a 3a  1.159 {.  set ::
6540: 61 75 74 68 61 72 67 73 0a 7d 20 7b 72 32 20 74  authargs.} {r2 t
6550: 32 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65  2 main {}}.do_te
6560: 73 74 20 61 75 74 68 2d 31 2e 31 36 30 20 7b 0a  st auth-1.160 {.
6570: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
6580: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
6590: 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32  te_master}.} {t2
65a0: 20 74 78 20 72 32 7d 0a 64 6f 5f 74 65 73 74 20   tx r2}.do_test 
65b0: 61 75 74 68 2d 31 2e 31 36 31 20 7b 0a 20 20 70  auth-1.161 {.  p
65c0: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
65d0: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
65e0: 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g4} {.    if {$c
65f0: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f  ode=="SQLITE_DRO
6600: 50 5f 54 52 49 47 47 45 52 22 7d 20 7b 0a 20 20  P_TRIGGER"} {.  
6610: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
6620: 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24  gs [list $arg1 $
6630: 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34  arg2 $arg3 $arg4
6640: 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  ].      return S
6650: 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20  QLITE_OK.    }. 
6660: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
6670: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
6680: 71 6c 20 7b 44 52 4f 50 20 54 52 49 47 47 45 52  ql {DROP TRIGGER
6690: 20 72 32 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f   r2}.} {0 {}}.do
66a0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 36 32  _test auth-1.162
66b0: 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61   {.  set ::autha
66c0: 72 67 73 0a 7d 20 7b 72 32 20 74 32 20 6d 61 69  rgs.} {r2 t2 mai
66d0: 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  n {}}.do_test au
66e0: 74 68 2d 31 2e 31 36 33 20 7b 0a 20 20 65 78 65  th-1.163 {.  exe
66f0: 63 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20  csql {.    DROP 
6700: 54 41 42 4c 45 20 74 78 3b 0a 20 20 20 20 44 45  TABLE tx;.    DE
6710: 4c 45 54 45 20 46 52 4f 4d 20 74 32 20 57 48 45  LETE FROM t2 WHE
6720: 52 45 20 61 3d 31 20 41 4e 44 20 62 3d 32 20 41  RE a=1 AND b=2 A
6730: 4e 44 20 63 3d 33 3b 0a 20 20 20 20 53 45 4c 45  ND c=3;.    SELE
6740: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
6750: 69 74 65 5f 6d 61 73 74 65 72 3b 0a 20 20 7d 0a  ite_master;.  }.
6760: 7d 20 7b 74 32 7d 0a 0a 64 6f 5f 74 65 73 74 20  } {t2}..do_test 
6770: 61 75 74 68 2d 31 2e 31 36 34 20 7b 0a 20 20 70  auth-1.164 {.  p
6780: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
6790: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
67a0: 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g4} {.    if {$c
67b0: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c  ode=="SQLITE_DEL
67c0: 45 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d 22  ETE" && $arg1=="
67d0: 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
67e0: 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74  er"} {.      ret
67f0: 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a  urn SQLITE_DENY.
6800: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
6810: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
6820: 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20   catchsql {DROP 
6830: 54 52 49 47 47 45 52 20 72 31 7d 0a 7d 20 7b 31  TRIGGER r1}.} {1
6840: 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64   {not authorized
6850: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
6860: 31 2e 31 36 35 20 7b 0a 20 20 65 78 65 63 73 71  1.165 {.  execsq
6870: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
6880: 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f  ROM sqlite_temp_
6890: 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31 20 72 31  master}.} {t1 r1
68a0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
68b0: 2e 31 36 36 20 7b 0a 20 20 70 72 6f 63 20 61 75  .166 {.  proc au
68c0: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
68d0: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
68e0: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
68f0: 53 51 4c 49 54 45 5f 44 52 4f 50 5f 54 45 4d 50  SQLITE_DROP_TEMP
6900: 5f 54 52 49 47 47 45 52 22 7d 20 7b 0a 20 20 20  _TRIGGER"} {.   
6910: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
6920: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
6930: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
6940: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
6950: 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a  LITE_DENY.    }.
6960: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
6970: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
6980: 73 71 6c 20 7b 44 52 4f 50 20 54 52 49 47 47 45  sql {DROP TRIGGE
6990: 52 20 72 31 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20  R r1}.} {1 {not 
69a0: 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f  authorized}}.do_
69b0: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 36 37 20  test auth-1.167 
69c0: 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72  {.  set ::authar
69d0: 67 73 0a 7d 20 7b 72 31 20 74 31 20 74 65 6d 70  gs.} {r1 t1 temp
69e0: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
69f0: 68 2d 31 2e 31 36 38 20 7b 0a 20 20 65 78 65 63  h-1.168 {.  exec
6a00: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
6a10: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d   FROM sqlite_tem
6a20: 70 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31 20  p_master}.} {t1 
6a30: 72 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  r1}.do_test auth
6a40: 2d 31 2e 31 36 39 20 7b 0a 20 20 70 72 6f 63 20  -1.169 {.  proc 
6a50: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
6a60: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
6a70: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
6a80: 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 22  ="SQLITE_DELETE"
6a90: 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69   && $arg1=="sqli
6aa0: 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 7d  te_temp_master"}
6ab0: 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   {.      return 
6ac0: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20  SQLITE_IGNORE.  
6ad0: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
6ae0: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
6af0: 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54 52  atchsql {DROP TR
6b00: 49 47 47 45 52 20 72 31 7d 0a 7d 20 7b 30 20 7b  IGGER r1}.} {0 {
6b10: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
6b20: 31 2e 31 37 30 20 7b 0a 20 20 65 78 65 63 73 71  1.170 {.  execsq
6b30: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
6b40: 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f  ROM sqlite_temp_
6b50: 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31 20 72 31  master}.} {t1 r1
6b60: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
6b70: 2e 31 37 31 20 7b 0a 20 20 70 72 6f 63 20 61 75  .171 {.  proc au
6b80: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
6b90: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
6ba0: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
6bb0: 53 51 4c 49 54 45 5f 44 52 4f 50 5f 54 45 4d 50  SQLITE_DROP_TEMP
6bc0: 5f 54 52 49 47 47 45 52 22 7d 20 7b 0a 20 20 20  _TRIGGER"} {.   
6bd0: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
6be0: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
6bf0: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
6c00: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
6c10: 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20  LITE_IGNORE.    
6c20: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
6c30: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
6c40: 63 68 73 71 6c 20 7b 44 52 4f 50 20 54 52 49 47  chsql {DROP TRIG
6c50: 47 45 52 20 72 31 7d 0a 7d 20 7b 30 20 7b 7d 7d  GER r1}.} {0 {}}
6c60: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
6c70: 31 37 32 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75  172 {.  set ::au
6c80: 74 68 61 72 67 73 0a 7d 20 7b 72 31 20 74 31 20  thargs.} {r1 t1 
6c90: 74 65 6d 70 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  temp {}}.do_test
6ca0: 20 61 75 74 68 2d 31 2e 31 37 33 20 7b 0a 20 20   auth-1.173 {.  
6cb0: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
6cc0: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
6cd0: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d 20  _temp_master}.} 
6ce0: 7b 74 31 20 72 31 7d 0a 64 6f 5f 74 65 73 74 20  {t1 r1}.do_test 
6cf0: 61 75 74 68 2d 31 2e 31 37 34 20 7b 0a 20 20 70  auth-1.174 {.  p
6d00: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
6d10: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
6d20: 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g4} {.    if {$c
6d30: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f  ode=="SQLITE_DRO
6d40: 50 5f 54 45 4d 50 5f 54 52 49 47 47 45 52 22 7d  P_TEMP_TRIGGER"}
6d50: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61   {.      set ::a
6d60: 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61  uthargs [list $a
6d70: 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20  rg1 $arg2 $arg3 
6d80: 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74  $arg4].      ret
6d90: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
6da0: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
6db0: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
6dc0: 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54 52  atchsql {DROP TR
6dd0: 49 47 47 45 52 20 72 31 7d 0a 7d 20 7b 30 20 7b  IGGER r1}.} {0 {
6de0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
6df0: 31 2e 31 37 35 20 7b 0a 20 20 73 65 74 20 3a 3a  1.175 {.  set ::
6e00: 61 75 74 68 61 72 67 73 0a 7d 20 7b 72 31 20 74  authargs.} {r1 t
6e10: 31 20 74 65 6d 70 20 7b 7d 7d 0a 64 6f 5f 74 65  1 temp {}}.do_te
6e20: 73 74 20 61 75 74 68 2d 31 2e 31 37 36 20 7b 0a  st auth-1.176 {.
6e30: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
6e40: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
6e50: 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a  te_temp_master}.
6e60: 7d 20 7b 74 31 7d 0a 7d 20 3b 23 20 69 66 63 61  } {t1}.} ;# ifca
6e70: 70 61 62 6c 65 20 74 72 69 67 67 65 72 0a 0a 64  pable trigger..d
6e80: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 37  o_test auth-1.17
6e90: 37 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  7 {.  proc auth 
6ea0: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
6eb0: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
6ec0: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
6ed0: 49 54 45 5f 43 52 45 41 54 45 5f 49 4e 44 45 58  ITE_CREATE_INDEX
6ee0: 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a  "} {.      set :
6ef0: 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20  :authargs [list 
6f00: 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67  $arg1 $arg2 $arg
6f10: 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72  3 $arg4].      r
6f20: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e  eturn SQLITE_DEN
6f30: 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  Y.    }.    retu
6f40: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
6f50: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45  .  catchsql {CRE
6f60: 41 54 45 20 49 4e 44 45 58 20 69 32 20 4f 4e 20  ATE INDEX i2 ON 
6f70: 74 32 28 61 29 7d 0a 7d 20 7b 31 20 7b 6e 6f 74  t2(a)}.} {1 {not
6f80: 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f   authorized}}.do
6f90: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 37 38  _test auth-1.178
6fa0: 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61   {.  set ::autha
6fb0: 72 67 73 0a 7d 20 7b 69 32 20 74 32 20 6d 61 69  rgs.} {i2 t2 mai
6fc0: 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  n {}}.do_test au
6fd0: 74 68 2d 31 2e 31 37 39 20 7b 0a 20 20 65 78 65  th-1.179 {.  exe
6fe0: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d  csql {SELECT nam
6ff0: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  e FROM sqlite_ma
7000: 73 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a 64 6f 5f  ster}.} {t2}.do_
7010: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 38 30 20  test auth-1.180 
7020: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
7030: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
7040: 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69  g3 arg4} {.    i
7050: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
7060: 45 5f 49 4e 53 45 52 54 22 20 26 26 20 24 61 72  E_INSERT" && $ar
7070: 67 31 3d 3d 22 73 71 6c 69 74 65 5f 6d 61 73 74  g1=="sqlite_mast
7080: 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74  er"} {.      ret
7090: 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a  urn SQLITE_DENY.
70a0: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
70b0: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
70c0: 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54   catchsql {CREAT
70d0: 45 20 49 4e 44 45 58 20 69 32 20 4f 4e 20 74 32  E INDEX i2 ON t2
70e0: 28 61 29 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61  (a)}.} {1 {not a
70f0: 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74  uthorized}}.do_t
7100: 65 73 74 20 61 75 74 68 2d 31 2e 31 38 31 20 7b  est auth-1.181 {
7110: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
7120: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
7130: 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74  ite_master}.} {t
7140: 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  2}.do_test auth-
7150: 31 2e 31 38 32 20 7b 0a 20 20 70 72 6f 63 20 61  1.182 {.  proc a
7160: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
7170: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
7180: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
7190: 22 53 51 4c 49 54 45 5f 43 52 45 41 54 45 5f 49  "SQLITE_CREATE_I
71a0: 4e 44 45 58 22 7d 20 7b 0a 20 20 20 20 20 20 73  NDEX"} {.      s
71b0: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c  et ::authargs [l
71c0: 69 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20  ist $arg1 $arg2 
71d0: 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20  $arg3 $arg4].   
71e0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
71f0: 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20  _IGNORE.    }.  
7200: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
7210: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
7220: 6c 20 7b 43 52 45 41 54 45 20 49 4e 44 45 58 20  l {CREATE INDEX 
7230: 69 32 20 4f 4e 20 74 32 28 62 29 7d 0a 7d 20 7b  i2 ON t2(b)}.} {
7240: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  0 {}}.do_test au
7250: 74 68 2d 31 2e 31 38 33 20 7b 0a 20 20 73 65 74  th-1.183 {.  set
7260: 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 69   ::authargs.} {i
7270: 32 20 74 32 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f  2 t2 main {}}.do
7280: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 38 34  _test auth-1.184
7290: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
72a0: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73  LECT name FROM s
72b0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20  qlite_master}.} 
72c0: 7b 74 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  {t2}.do_test aut
72d0: 68 2d 31 2e 31 38 35 20 7b 0a 20 20 70 72 6f 63  h-1.185 {.  proc
72e0: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
72f0: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
7300: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
7310: 3d 3d 22 53 51 4c 49 54 45 5f 49 4e 53 45 52 54  =="SQLITE_INSERT
7320: 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71 6c  " && $arg1=="sql
7330: 69 74 65 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20  ite_master"} {. 
7340: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
7350: 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a  TE_IGNORE.    }.
7360: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
7370: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
7380: 73 71 6c 20 7b 43 52 45 41 54 45 20 49 4e 44 45  sql {CREATE INDE
7390: 58 20 69 32 20 4f 4e 20 74 32 28 62 29 7d 0a 7d  X i2 ON t2(b)}.}
73a0: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
73b0: 61 75 74 68 2d 31 2e 31 38 36 20 7b 0a 20 20 65  auth-1.186 {.  e
73c0: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
73d0: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
73e0: 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a 64  master}.} {t2}.d
73f0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 38  o_test auth-1.18
7400: 37 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  7 {.  proc auth 
7410: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
7420: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
7430: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
7440: 49 54 45 5f 43 52 45 41 54 45 5f 49 4e 44 45 58  ITE_CREATE_INDEX
7450: 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a  "} {.      set :
7460: 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20  :authargs [list 
7470: 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67  $arg1 $arg2 $arg
7480: 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72  3 $arg4].      r
7490: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
74a0: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
74b0: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
74c0: 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54   catchsql {CREAT
74d0: 45 20 49 4e 44 45 58 20 69 32 20 4f 4e 20 74 32  E INDEX i2 ON t2
74e0: 28 61 29 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f  (a)}.} {0 {}}.do
74f0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 38 38  _test auth-1.188
7500: 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61   {.  set ::autha
7510: 72 67 73 0a 7d 20 7b 69 32 20 74 32 20 6d 61 69  rgs.} {i2 t2 mai
7520: 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  n {}}.do_test au
7530: 74 68 2d 31 2e 31 38 39 20 7b 0a 20 20 65 78 65  th-1.189 {.  exe
7540: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d  csql {SELECT nam
7550: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  e FROM sqlite_ma
7560: 73 74 65 72 7d 0a 7d 20 7b 74 32 20 69 32 7d 0a  ster}.} {t2 i2}.
7570: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
7580: 31 39 30 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  190 {.  proc aut
7590: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
75a0: 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20  2 arg3 arg4} {. 
75b0: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
75c0: 51 4c 49 54 45 5f 43 52 45 41 54 45 5f 54 45 4d  QLITE_CREATE_TEM
75d0: 50 5f 49 4e 44 45 58 22 7d 20 7b 0a 20 20 20 20  P_INDEX"} {.    
75e0: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
75f0: 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72   [list $arg1 $ar
7600: 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a  g2 $arg3 $arg4].
7610: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
7620: 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20  ITE_DENY.    }. 
7630: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
7640: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
7650: 71 6c 20 7b 43 52 45 41 54 45 20 49 4e 44 45 58  ql {CREATE INDEX
7660: 20 69 31 20 4f 4e 20 74 31 28 61 29 7d 0a 7d 20   i1 ON t1(a)}.} 
7670: 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a  {1 {not authoriz
7680: 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  ed}}.do_test aut
7690: 68 2d 31 2e 31 39 31 20 7b 0a 20 20 73 65 74 20  h-1.191 {.  set 
76a0: 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 69 31  ::authargs.} {i1
76b0: 20 74 31 20 74 65 6d 70 20 7b 7d 7d 0a 64 6f 5f   t1 temp {}}.do_
76c0: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 39 32 20  test auth-1.192 
76d0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
76e0: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
76f0: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
7700: 7d 0a 7d 20 7b 74 31 7d 0a 64 6f 5f 74 65 73 74  }.} {t1}.do_test
7710: 20 61 75 74 68 2d 31 2e 31 39 33 20 7b 0a 20 20   auth-1.193 {.  
7720: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
7730: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
7740: 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg4} {.    if {$
7750: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 49 4e  code=="SQLITE_IN
7760: 53 45 52 54 22 20 26 26 20 24 61 72 67 31 3d 3d  SERT" && $arg1==
7770: 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73  "sqlite_temp_mas
7780: 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 72 65  ter"} {.      re
7790: 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59  turn SQLITE_DENY
77a0: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
77b0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
77c0: 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41    catchsql {CREA
77d0: 54 45 20 49 4e 44 45 58 20 69 31 20 4f 4e 20 74  TE INDEX i1 ON t
77e0: 31 28 62 29 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20  1(b)}.} {1 {not 
77f0: 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f  authorized}}.do_
7800: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 39 34 20  test auth-1.194 
7810: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
7820: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
7830: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
7840: 7d 0a 7d 20 7b 74 31 7d 0a 64 6f 5f 74 65 73 74  }.} {t1}.do_test
7850: 20 61 75 74 68 2d 31 2e 31 39 35 20 7b 0a 20 20   auth-1.195 {.  
7860: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
7870: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
7880: 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg4} {.    if {$
7890: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52  code=="SQLITE_CR
78a0: 45 41 54 45 5f 54 45 4d 50 5f 49 4e 44 45 58 22  EATE_TEMP_INDEX"
78b0: 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a  } {.      set ::
78c0: 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24  authargs [list $
78d0: 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33  arg1 $arg2 $arg3
78e0: 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65   $arg4].      re
78f0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f  turn SQLITE_IGNO
7900: 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  RE.    }.    ret
7910: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
7920: 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52  }.  catchsql {CR
7930: 45 41 54 45 20 49 4e 44 45 58 20 69 31 20 4f 4e  EATE INDEX i1 ON
7940: 20 74 31 28 62 29 7d 0a 7d 20 7b 30 20 7b 7d 7d   t1(b)}.} {0 {}}
7950: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
7960: 31 39 36 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75  196 {.  set ::au
7970: 74 68 61 72 67 73 0a 7d 20 7b 69 31 20 74 31 20  thargs.} {i1 t1 
7980: 74 65 6d 70 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  temp {}}.do_test
7990: 20 61 75 74 68 2d 31 2e 31 39 37 20 7b 0a 20 20   auth-1.197 {.  
79a0: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
79b0: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
79c0: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d 20  _temp_master}.} 
79d0: 7b 74 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  {t1}.do_test aut
79e0: 68 2d 31 2e 31 39 38 20 7b 0a 20 20 70 72 6f 63  h-1.198 {.  proc
79f0: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
7a00: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
7a10: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
7a20: 3d 3d 22 53 51 4c 49 54 45 5f 49 4e 53 45 52 54  =="SQLITE_INSERT
7a30: 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71 6c  " && $arg1=="sql
7a40: 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22  ite_temp_master"
7a50: 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  } {.      return
7a60: 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20   SQLITE_IGNORE. 
7a70: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
7a80: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
7a90: 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45  catchsql {CREATE
7aa0: 20 49 4e 44 45 58 20 69 31 20 4f 4e 20 74 31 28   INDEX i1 ON t1(
7ab0: 63 29 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f  c)}.} {0 {}}.do_
7ac0: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 39 39 20  test auth-1.199 
7ad0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
7ae0: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
7af0: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
7b00: 7d 0a 7d 20 7b 74 31 7d 0a 64 6f 5f 74 65 73 74  }.} {t1}.do_test
7b10: 20 61 75 74 68 2d 31 2e 32 30 30 20 7b 0a 20 20   auth-1.200 {.  
7b20: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
7b30: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
7b40: 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg4} {.    if {$
7b50: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52  code=="SQLITE_CR
7b60: 45 41 54 45 5f 54 45 4d 50 5f 49 4e 44 45 58 22  EATE_TEMP_INDEX"
7b70: 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a  } {.      set ::
7b80: 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24  authargs [list $
7b90: 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33  arg1 $arg2 $arg3
7ba0: 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65   $arg4].      re
7bb0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
7bc0: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
7bd0: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
7be0: 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45  catchsql {CREATE
7bf0: 20 49 4e 44 45 58 20 69 31 20 4f 4e 20 74 31 28   INDEX i1 ON t1(
7c00: 61 29 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f  a)}.} {0 {}}.do_
7c10: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 30 31 20  test auth-1.201 
7c20: 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72  {.  set ::authar
7c30: 67 73 0a 7d 20 7b 69 31 20 74 31 20 74 65 6d 70  gs.} {i1 t1 temp
7c40: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
7c50: 68 2d 31 2e 32 30 32 20 7b 0a 20 20 65 78 65 63  h-1.202 {.  exec
7c60: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
7c70: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d   FROM sqlite_tem
7c80: 70 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31 20  p_master}.} {t1 
7c90: 69 31 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 75 74  i1}..do_test aut
7ca0: 68 2d 31 2e 32 30 33 20 7b 0a 20 20 70 72 6f 63  h-1.203 {.  proc
7cb0: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
7cc0: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
7cd0: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
7ce0: 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45 54 45  =="SQLITE_DELETE
7cf0: 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71 6c  " && $arg1=="sql
7d00: 69 74 65 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20  ite_master"} {. 
7d10: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
7d20: 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20  TE_DENY.    }.  
7d30: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
7d40: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
7d50: 6c 20 7b 44 52 4f 50 20 49 4e 44 45 58 20 69 32  l {DROP INDEX i2
7d60: 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68  }.} {1 {not auth
7d70: 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74  orized}}.do_test
7d80: 20 61 75 74 68 2d 31 2e 32 30 34 20 7b 0a 20 20   auth-1.204 {.  
7d90: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
7da0: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
7db0: 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 20 69  _master}.} {t2 i
7dc0: 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  2}.do_test auth-
7dd0: 31 2e 32 30 35 20 7b 0a 20 20 70 72 6f 63 20 61  1.205 {.  proc a
7de0: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
7df0: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
7e00: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
7e10: 22 53 51 4c 49 54 45 5f 44 52 4f 50 5f 49 4e 44  "SQLITE_DROP_IND
7e20: 45 58 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74  EX"} {.      set
7e30: 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73   ::authargs [lis
7e40: 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61  t $arg1 $arg2 $a
7e50: 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20  rg3 $arg4].     
7e60: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44   return SQLITE_D
7e70: 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  ENY.    }.    re
7e80: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
7e90: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44   }.  catchsql {D
7ea0: 52 4f 50 20 49 4e 44 45 58 20 69 32 7d 0a 7d 20  ROP INDEX i2}.} 
7eb0: 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a  {1 {not authoriz
7ec0: 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  ed}}.do_test aut
7ed0: 68 2d 31 2e 32 30 36 20 7b 0a 20 20 73 65 74 20  h-1.206 {.  set 
7ee0: 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 69 32  ::authargs.} {i2
7ef0: 20 74 32 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f   t2 main {}}.do_
7f00: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 30 37 20  test auth-1.207 
7f10: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
7f20: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
7f30: 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b  lite_master}.} {
7f40: 74 32 20 69 32 7d 0a 64 6f 5f 74 65 73 74 20 61  t2 i2}.do_test a
7f50: 75 74 68 2d 31 2e 32 30 38 20 7b 0a 20 20 70 72  uth-1.208 {.  pr
7f60: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
7f70: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
7f80: 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f  4} {.    if {$co
7f90: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45  de=="SQLITE_DELE
7fa0: 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73  TE" && $arg1=="s
7fb0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 7d 20 7b  qlite_master"} {
7fc0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
7fd0: 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20  LITE_IGNORE.    
7fe0: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
7ff0: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
8000: 63 68 73 71 6c 20 7b 44 52 4f 50 20 49 4e 44 45  chsql {DROP INDE
8010: 58 20 69 32 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  X i2}.} {0 {}}.d
8020: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 30  o_test auth-1.20
8030: 39 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  9 {.  execsql {S
8040: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
8050: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d  sqlite_master}.}
8060: 20 7b 74 32 20 69 32 7d 0a 64 6f 5f 74 65 73 74   {t2 i2}.do_test
8070: 20 61 75 74 68 2d 31 2e 32 31 30 20 7b 0a 20 20   auth-1.210 {.  
8080: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
8090: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
80a0: 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg4} {.    if {$
80b0: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52  code=="SQLITE_DR
80c0: 4f 50 5f 49 4e 44 45 58 22 7d 20 7b 0a 20 20 20  OP_INDEX"} {.   
80d0: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
80e0: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
80f0: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
8100: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
8110: 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20  LITE_IGNORE.    
8120: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
8130: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
8140: 63 68 73 71 6c 20 7b 44 52 4f 50 20 49 4e 44 45  chsql {DROP INDE
8150: 58 20 69 32 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  X i2}.} {0 {}}.d
8160: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 31  o_test auth-1.21
8170: 31 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68  1 {.  set ::auth
8180: 61 72 67 73 0a 7d 20 7b 69 32 20 74 32 20 6d 61  args.} {i2 t2 ma
8190: 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  in {}}.do_test a
81a0: 75 74 68 2d 31 2e 32 31 32 20 7b 0a 20 20 65 78  uth-1.212 {.  ex
81b0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61  ecsql {SELECT na
81c0: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  me FROM sqlite_m
81d0: 61 73 74 65 72 7d 0a 7d 20 7b 74 32 20 69 32 7d  aster}.} {t2 i2}
81e0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
81f0: 32 31 33 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  213 {.  proc aut
8200: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
8210: 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20  2 arg3 arg4} {. 
8220: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
8230: 51 4c 49 54 45 5f 44 52 4f 50 5f 49 4e 44 45 58  QLITE_DROP_INDEX
8240: 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a  "} {.      set :
8250: 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20  :authargs [list 
8260: 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67  $arg1 $arg2 $arg
8270: 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72  3 $arg4].      r
8280: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
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 44 52 4f 50 20   catchsql {DROP 
82c0: 49 4e 44 45 58 20 69 32 7d 0a 7d 20 7b 30 20 7b  INDEX i2}.} {0 {
82d0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
82e0: 31 2e 32 31 34 20 7b 0a 20 20 73 65 74 20 3a 3a  1.214 {.  set ::
82f0: 61 75 74 68 61 72 67 73 0a 7d 20 7b 69 32 20 74  authargs.} {i2 t
8300: 32 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65  2 main {}}.do_te
8310: 73 74 20 61 75 74 68 2d 31 2e 32 31 35 20 7b 0a  st auth-1.215 {.
8320: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
8330: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
8340: 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32  te_master}.} {t2
8350: 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }..do_test auth-
8360: 31 2e 32 31 36 20 7b 0a 20 20 70 72 6f 63 20 61  1.216 {.  proc a
8370: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
8380: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
8390: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
83a0: 22 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 22 20  "SQLITE_DELETE" 
83b0: 26 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74  && $arg1=="sqlit
83c0: 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 7d 20  e_temp_master"} 
83d0: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  {.      return S
83e0: 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d  QLITE_DENY.    }
83f0: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
8400: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
8410: 68 73 71 6c 20 7b 44 52 4f 50 20 49 4e 44 45 58  hsql {DROP INDEX
8420: 20 69 31 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61   i1}.} {1 {not a
8430: 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74  uthorized}}.do_t
8440: 65 73 74 20 61 75 74 68 2d 31 2e 32 31 37 20 7b  est auth-1.217 {
8450: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
8460: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
8470: 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d  ite_temp_master}
8480: 0a 7d 20 7b 74 31 20 69 31 7d 0a 64 6f 5f 74 65  .} {t1 i1}.do_te
8490: 73 74 20 61 75 74 68 2d 31 2e 32 31 38 20 7b 0a  st auth-1.218 {.
84a0: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
84b0: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
84c0: 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20   arg4} {.    if 
84d0: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
84e0: 44 52 4f 50 5f 54 45 4d 50 5f 49 4e 44 45 58 22  DROP_TEMP_INDEX"
84f0: 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a  } {.      set ::
8500: 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24  authargs [list $
8510: 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33  arg1 $arg2 $arg3
8520: 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65   $arg4].      re
8530: 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59  turn SQLITE_DENY
8540: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
8550: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
8560: 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50    catchsql {DROP
8570: 20 49 4e 44 45 58 20 69 31 7d 0a 7d 20 7b 31 20   INDEX i1}.} {1 
8580: 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d  {not authorized}
8590: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
85a0: 2e 32 31 39 20 7b 0a 20 20 73 65 74 20 3a 3a 61  .219 {.  set ::a
85b0: 75 74 68 61 72 67 73 0a 7d 20 7b 69 31 20 74 31  uthargs.} {i1 t1
85c0: 20 74 65 6d 70 20 7b 7d 7d 0a 64 6f 5f 74 65 73   temp {}}.do_tes
85d0: 74 20 61 75 74 68 2d 31 2e 32 32 30 20 7b 0a 20  t auth-1.220 {. 
85e0: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
85f0: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
8600: 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d  e_temp_master}.}
8610: 20 7b 74 31 20 69 31 7d 0a 64 6f 5f 74 65 73 74   {t1 i1}.do_test
8620: 20 61 75 74 68 2d 31 2e 32 32 31 20 7b 0a 20 20   auth-1.221 {.  
8630: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
8640: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
8650: 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg4} {.    if {$
8660: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45  code=="SQLITE_DE
8670: 4c 45 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d  LETE" && $arg1==
8680: 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73  "sqlite_temp_mas
8690: 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 72 65  ter"} {.      re
86a0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f  turn SQLITE_IGNO
86b0: 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  RE.    }.    ret
86c0: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
86d0: 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52  }.  catchsql {DR
86e0: 4f 50 20 49 4e 44 45 58 20 69 31 7d 0a 7d 20 7b  OP INDEX i1}.} {
86f0: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  0 {}}.do_test au
8700: 74 68 2d 31 2e 32 32 32 20 7b 0a 20 20 65 78 65  th-1.222 {.  exe
8710: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d  csql {SELECT nam
8720: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65  e FROM sqlite_te
8730: 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31  mp_master}.} {t1
8740: 20 69 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   i1}.do_test aut
8750: 68 2d 31 2e 32 32 33 20 7b 0a 20 20 70 72 6f 63  h-1.223 {.  proc
8760: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
8770: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
8780: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
8790: 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f 50 5f 54  =="SQLITE_DROP_T
87a0: 45 4d 50 5f 49 4e 44 45 58 22 7d 20 7b 0a 20 20  EMP_INDEX"} {.  
87b0: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
87c0: 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24  gs [list $arg1 $
87d0: 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34  arg2 $arg3 $arg4
87e0: 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  ].      return S
87f0: 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20  QLITE_IGNORE.   
8800: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
8810: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
8820: 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 49 4e 44  tchsql {DROP IND
8830: 45 58 20 69 31 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a  EX i1}.} {0 {}}.
8840: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
8850: 32 34 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74  24 {.  set ::aut
8860: 68 61 72 67 73 0a 7d 20 7b 69 31 20 74 31 20 74  hargs.} {i1 t1 t
8870: 65 6d 70 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20  emp {}}.do_test 
8880: 61 75 74 68 2d 31 2e 32 32 35 20 7b 0a 20 20 65  auth-1.225 {.  e
8890: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
88a0: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
88b0: 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b  temp_master}.} {
88c0: 74 31 20 69 31 7d 0a 64 6f 5f 74 65 73 74 20 61  t1 i1}.do_test a
88d0: 75 74 68 2d 31 2e 32 32 36 20 7b 0a 20 20 70 72  uth-1.226 {.  pr
88e0: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
88f0: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
8900: 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f  4} {.    if {$co
8910: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f 50  de=="SQLITE_DROP
8920: 5f 54 45 4d 50 5f 49 4e 44 45 58 22 7d 20 7b 0a  _TEMP_INDEX"} {.
8930: 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68        set ::auth
8940: 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31  args [list $arg1
8950: 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72   $arg2 $arg3 $ar
8960: 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  g4].      return
8970: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d   SQLITE_OK.    }
8980: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
8990: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
89a0: 68 73 71 6c 20 7b 44 52 4f 50 20 49 4e 44 45 58  hsql {DROP INDEX
89b0: 20 69 31 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f   i1}.} {0 {}}.do
89c0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 32 37  _test auth-1.227
89d0: 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61   {.  set ::autha
89e0: 72 67 73 0a 7d 20 7b 69 31 20 74 31 20 74 65 6d  rgs.} {i1 t1 tem
89f0: 70 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  p {}}.do_test au
8a00: 74 68 2d 31 2e 32 32 38 20 7b 0a 20 20 65 78 65  th-1.228 {.  exe
8a10: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d  csql {SELECT nam
8a20: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65  e FROM sqlite_te
8a30: 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31  mp_master}.} {t1
8a40: 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }..do_test auth-
8a50: 31 2e 32 32 39 20 7b 0a 20 20 70 72 6f 63 20 61  1.229 {.  proc a
8a60: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
8a70: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
8a80: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
8a90: 22 53 51 4c 49 54 45 5f 50 52 41 47 4d 41 22 7d  "SQLITE_PRAGMA"}
8aa0: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61   {.      set ::a
8ab0: 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61  uthargs [list $a
8ac0: 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20  rg1 $arg2 $arg3 
8ad0: 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74  $arg4].      ret
8ae0: 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a  urn SQLITE_DENY.
8af0: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
8b00: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
8b10: 20 63 61 74 63 68 73 71 6c 20 7b 50 52 41 47 4d   catchsql {PRAGM
8b20: 41 20 66 75 6c 6c 5f 63 6f 6c 75 6d 6e 5f 6e 61  A full_column_na
8b30: 6d 65 73 3d 6f 6e 7d 0a 7d 20 7b 31 20 7b 6e 6f  mes=on}.} {1 {no
8b40: 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64  t authorized}}.d
8b50: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 33  o_test auth-1.23
8b60: 30 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68  0 {.  set ::auth
8b70: 61 72 67 73 0a 7d 20 7b 66 75 6c 6c 5f 63 6f 6c  args.} {full_col
8b80: 75 6d 6e 5f 6e 61 6d 65 73 20 6f 6e 20 7b 7d 20  umn_names on {} 
8b90: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
8ba0: 2d 31 2e 32 33 31 20 7b 0a 20 20 65 78 65 63 73  -1.231 {.  execs
8bb0: 71 6c 32 20 7b 53 45 4c 45 43 54 20 61 20 46 52  ql2 {SELECT a FR
8bc0: 4f 4d 20 74 32 7d 0a 7d 20 7b 61 20 31 31 20 61  OM t2}.} {a 11 a
8bd0: 20 37 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68   7}.do_test auth
8be0: 2d 31 2e 32 33 32 20 7b 0a 20 20 70 72 6f 63 20  -1.232 {.  proc 
8bf0: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
8c00: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
8c10: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
8c20: 3d 22 53 51 4c 49 54 45 5f 50 52 41 47 4d 41 22  ="SQLITE_PRAGMA"
8c30: 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a  } {.      set ::
8c40: 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24  authargs [list $
8c50: 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33  arg1 $arg2 $arg3
8c60: 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65   $arg4].      re
8c70: 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f  turn SQLITE_IGNO
8c80: 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  RE.    }.    ret
8c90: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
8ca0: 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 50 52  }.  catchsql {PR
8cb0: 41 47 4d 41 20 66 75 6c 6c 5f 63 6f 6c 75 6d 6e  AGMA full_column
8cc0: 5f 6e 61 6d 65 73 3d 6f 6e 7d 0a 7d 20 7b 30 20  _names=on}.} {0 
8cd0: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
8ce0: 2d 31 2e 32 33 33 20 7b 0a 20 20 73 65 74 20 3a  -1.233 {.  set :
8cf0: 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 66 75 6c  :authargs.} {ful
8d00: 6c 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 20 6f  l_column_names o
8d10: 6e 20 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  n {} {}}.do_test
8d20: 20 61 75 74 68 2d 31 2e 32 33 34 20 7b 0a 20 20   auth-1.234 {.  
8d30: 65 78 65 63 73 71 6c 32 20 7b 53 45 4c 45 43 54  execsql2 {SELECT
8d40: 20 61 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 61   a FROM t2}.} {a
8d50: 20 31 31 20 61 20 37 7d 0a 64 6f 5f 74 65 73 74   11 a 7}.do_test
8d60: 20 61 75 74 68 2d 31 2e 32 33 35 20 7b 0a 20 20   auth-1.235 {.  
8d70: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
8d80: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
8d90: 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg4} {.    if {$
8da0: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 50 52  code=="SQLITE_PR
8db0: 41 47 4d 41 22 7d 20 7b 0a 20 20 20 20 20 20 73  AGMA"} {.      s
8dc0: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c  et ::authargs [l
8dd0: 69 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20  ist $arg1 $arg2 
8de0: 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20  $arg3 $arg4].   
8df0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
8e00: 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  _OK.    }.    re
8e10: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
8e20: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 50   }.  catchsql {P
8e30: 52 41 47 4d 41 20 66 75 6c 6c 5f 63 6f 6c 75 6d  RAGMA full_colum
8e40: 6e 5f 6e 61 6d 65 73 3d 6f 6e 7d 0a 7d 20 7b 30  n_names=on}.} {0
8e50: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
8e60: 68 2d 31 2e 32 33 36 20 7b 0a 20 20 65 78 65 63  h-1.236 {.  exec
8e70: 73 71 6c 32 20 7b 53 45 4c 45 43 54 20 61 20 46  sql2 {SELECT a F
8e80: 52 4f 4d 20 74 32 7d 0a 7d 20 7b 74 32 2e 61 20  ROM t2}.} {t2.a 
8e90: 31 31 20 74 32 2e 61 20 37 7d 0a 64 6f 5f 74 65  11 t2.a 7}.do_te
8ea0: 73 74 20 61 75 74 68 2d 31 2e 32 33 37 20 7b 0a  st auth-1.237 {.
8eb0: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
8ec0: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
8ed0: 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20   arg4} {.    if 
8ee0: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
8ef0: 50 52 41 47 4d 41 22 7d 20 7b 0a 20 20 20 20 20  PRAGMA"} {.     
8f00: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
8f10: 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67  [list $arg1 $arg
8f20: 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20  2 $arg3 $arg4]. 
8f30: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
8f40: 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20  TE_OK.    }.    
8f50: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
8f60: 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20  .  }.  catchsql 
8f70: 7b 50 52 41 47 4d 41 20 66 75 6c 6c 5f 63 6f 6c  {PRAGMA full_col
8f80: 75 6d 6e 5f 6e 61 6d 65 73 3d 4f 46 46 7d 0a 7d  umn_names=OFF}.}
8f90: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
8fa0: 61 75 74 68 2d 31 2e 32 33 38 20 7b 0a 20 20 73  auth-1.238 {.  s
8fb0: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20  et ::authargs.} 
8fc0: 7b 66 75 6c 6c 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d  {full_column_nam
8fd0: 65 73 20 4f 46 46 20 7b 7d 20 7b 7d 7d 0a 64 6f  es OFF {} {}}.do
8fe0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 33 39  _test auth-1.239
8ff0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 53   {.  execsql2 {S
9000: 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 32 7d  ELECT a FROM t2}
9010: 0a 7d 20 7b 61 20 31 31 20 61 20 37 7d 0a 0a 64  .} {a 11 a 7}..d
9020: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 34  o_test auth-1.24
9030: 30 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  0 {.  proc auth 
9040: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
9050: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
9060: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
9070: 49 54 45 5f 54 52 41 4e 53 41 43 54 49 4f 4e 22  ITE_TRANSACTION"
9080: 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a  } {.      set ::
9090: 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24  authargs [list $
90a0: 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33  arg1 $arg2 $arg3
90b0: 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65   $arg4].      re
90c0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59  turn SQLITE_DENY
90d0: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
90e0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
90f0: 20 20 63 61 74 63 68 73 71 6c 20 7b 42 45 47 49    catchsql {BEGI
9100: 4e 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74  N}.} {1 {not aut
9110: 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73  horized}}.do_tes
9120: 74 20 61 75 74 68 2d 31 2e 32 34 31 20 7b 0a 20  t auth-1.241 {. 
9130: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a   set ::authargs.
9140: 7d 20 7b 42 45 47 49 4e 20 7b 7d 20 7b 7d 20 7b  } {BEGIN {} {} {
9150: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
9160: 31 2e 32 34 32 20 7b 0a 20 20 70 72 6f 63 20 61  1.242 {.  proc a
9170: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
9180: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
9190: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
91a0: 22 53 51 4c 49 54 45 5f 54 52 41 4e 53 41 43 54  "SQLITE_TRANSACT
91b0: 49 4f 4e 22 20 26 26 20 24 61 72 67 31 21 3d 22  ION" && $arg1!="
91c0: 42 45 47 49 4e 22 7d 20 7b 0a 20 20 20 20 20 20  BEGIN"} {.      
91d0: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b  set ::authargs [
91e0: 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67 32  list $arg1 $arg2
91f0: 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20   $arg3 $arg4].  
9200: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
9210: 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20  E_DENY.    }.   
9220: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
9230: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
9240: 20 7b 42 45 47 49 4e 3b 20 49 4e 53 45 52 54 20   {BEGIN; INSERT 
9250: 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 34  INTO t2 VALUES(4
9260: 34 2c 35 35 2c 36 36 29 3b 20 43 4f 4d 4d 49 54  4,55,66); COMMIT
9270: 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68  }.} {1 {not auth
9280: 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74  orized}}.do_test
9290: 20 61 75 74 68 2d 31 2e 32 34 33 20 7b 0a 20 20   auth-1.243 {.  
92a0: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d  set ::authargs.}
92b0: 20 7b 43 4f 4d 4d 49 54 20 7b 7d 20 7b 7d 20 7b   {COMMIT {} {} {
92c0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
92d0: 31 2e 32 34 34 20 7b 0a 20 20 65 78 65 63 73 71  1.244 {.  execsq
92e0: 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  l {SELECT * FROM
92f0: 20 74 32 7d 0a 7d 20 7b 31 31 20 32 20 33 33 20   t2}.} {11 2 33 
9300: 37 20 38 20 39 20 34 34 20 35 35 20 36 36 7d 0a  7 8 9 44 55 66}.
9310: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
9320: 34 35 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  45 {.  catchsql 
9330: 7b 52 4f 4c 4c 42 41 43 4b 7d 0a 7d 20 7b 31 20  {ROLLBACK}.} {1 
9340: 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d  {not authorized}
9350: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
9360: 2e 32 34 36 20 7b 0a 20 20 73 65 74 20 3a 3a 61  .246 {.  set ::a
9370: 75 74 68 61 72 67 73 0a 7d 20 7b 52 4f 4c 4c 42  uthargs.} {ROLLB
9380: 41 43 4b 20 7b 7d 20 7b 7d 20 7b 7d 7d 0a 64 6f  ACK {} {} {}}.do
9390: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 34 37  _test auth-1.247
93a0: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 45   {.  catchsql {E
93b0: 4e 44 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d 0a  ND TRANSACTION}.
93c0: 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72  } {1 {not author
93d0: 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  ized}}.do_test a
93e0: 75 74 68 2d 31 2e 32 34 38 20 7b 0a 20 20 73 65  uth-1.248 {.  se
93f0: 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b  t ::authargs.} {
9400: 43 4f 4d 4d 49 54 20 7b 7d 20 7b 7d 20 7b 7d 7d  COMMIT {} {} {}}
9410: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
9420: 32 34 39 20 7b 0a 20 20 64 62 20 61 75 74 68 6f  249 {.  db autho
9430: 72 69 7a 65 72 20 7b 7d 0a 20 20 63 61 74 63 68  rizer {}.  catch
9440: 73 71 6c 20 7b 52 4f 4c 4c 42 41 43 4b 7d 0a 7d  sql {ROLLBACK}.}
9450: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
9460: 61 75 74 68 2d 31 2e 32 35 30 20 7b 0a 20 20 65  auth-1.250 {.  e
9470: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a  xecsql {SELECT *
9480: 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31 31 20   FROM t2}.} {11 
9490: 32 20 33 33 20 37 20 38 20 39 7d 0a 0a 23 20 74  2 33 7 8 9}..# t
94a0: 69 63 6b 65 74 20 23 33 34 30 20 2d 20 61 75 74  icket #340 - aut
94b0: 68 6f 72 69 7a 61 74 69 6f 6e 20 66 6f 72 20 41  horization for A
94c0: 54 54 41 43 48 20 61 6e 64 20 44 45 54 41 43 48  TTACH and DETACH
94d0: 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  ..#.do_test auth
94e0: 2d 31 2e 32 35 31 20 7b 0a 20 20 64 62 20 61 75  -1.251 {.  db au
94f0: 74 68 6f 72 69 7a 65 72 20 3a 3a 61 75 74 68 0a  thorizer ::auth.
9500: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
9510: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
9520: 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20   arg4} {.    if 
9530: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
9540: 41 54 54 41 43 48 22 7d 20 7b 0a 20 20 20 20 20  ATTACH"} {.     
9550: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
9560: 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67  [list $arg1 $arg
9570: 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20  2 $arg3 $arg4]. 
9580: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
9590: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
95a0: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 41  catchsql {.    A
95b0: 54 54 41 43 48 20 44 41 54 41 42 41 53 45 20 27  TTACH DATABASE '
95c0: 3a 6d 65 6d 6f 72 79 3a 27 20 41 53 20 74 65 73  :memory:' AS tes
95d0: 74 31 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a  t1.  }.} {0 {}}.
95e0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
95f0: 35 32 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74  52 {.  set ::aut
9600: 68 61 72 67 73 0a 7d 20 7b 3a 6d 65 6d 6f 72 79  hargs.} {:memory
9610: 3a 20 7b 7d 20 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74  : {} {} {}}.do_t
9620: 65 73 74 20 61 75 74 68 2d 31 2e 32 35 33 20 7b  est auth-1.253 {
9630: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44 45 54  .  catchsql {DET
9640: 41 43 48 20 44 41 54 41 42 41 53 45 20 74 65 73  ACH DATABASE tes
9650: 74 31 7d 0a 20 20 70 72 6f 63 20 61 75 74 68 20  t1}.  proc auth 
9660: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
9670: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
9680: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
9690: 49 54 45 5f 41 54 54 41 43 48 22 7d 20 7b 0a 20  ITE_ATTACH"} {. 
96a0: 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61       set ::autha
96b0: 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20  rgs [list $arg1 
96c0: 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67  $arg2 $arg3 $arg
96d0: 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  4].      return 
96e0: 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20  SQLITE_DENY.    
96f0: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
9700: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
9710: 63 68 73 71 6c 20 7b 0a 20 20 20 20 41 54 54 41  chsql {.    ATTA
9720: 43 48 20 44 41 54 41 42 41 53 45 20 27 3a 6d 65  CH DATABASE ':me
9730: 6d 6f 72 79 3a 27 20 41 53 20 74 65 73 74 31 3b  mory:' AS test1;
9740: 0a 20 20 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61  .  }.} {1 {not a
9750: 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74  uthorized}}.do_t
9760: 65 73 74 20 61 75 74 68 2d 31 2e 32 35 34 20 7b  est auth-1.254 {
9770: 0a 20 20 6c 69 6e 64 65 78 20 5b 65 78 65 63 73  .  lindex [execs
9780: 71 6c 20 7b 50 52 41 47 4d 41 20 64 61 74 61 62  ql {PRAGMA datab
9790: 61 73 65 5f 6c 69 73 74 7d 5d 20 37 0a 7d 20 7b  ase_list}] 7.} {
97a0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
97b0: 2e 32 35 35 20 7b 0a 20 20 63 61 74 63 68 73 71  .255 {.  catchsq
97c0: 6c 20 7b 44 45 54 41 43 48 20 44 41 54 41 42 41  l {DETACH DATABA
97d0: 53 45 20 74 65 73 74 31 7d 0a 20 20 70 72 6f 63  SE test1}.  proc
97e0: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
97f0: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
9800: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
9810: 3d 3d 22 53 51 4c 49 54 45 5f 41 54 54 41 43 48  =="SQLITE_ATTACH
9820: 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a  "} {.      set :
9830: 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20  :authargs [list 
9840: 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67  $arg1 $arg2 $arg
9850: 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72  3 $arg4].      r
9860: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e  eturn SQLITE_IGN
9870: 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  ORE.    }.    re
9880: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
9890: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a   }.  catchsql {.
98a0: 20 20 20 20 41 54 54 41 43 48 20 44 41 54 41 42      ATTACH DATAB
98b0: 41 53 45 20 27 3a 6d 65 6d 6f 72 79 3a 27 20 41  ASE ':memory:' A
98c0: 53 20 74 65 73 74 31 3b 0a 20 20 7d 0a 7d 20 7b  S test1;.  }.} {
98d0: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  0 {}}.do_test au
98e0: 74 68 2d 31 2e 32 35 36 20 7b 0a 20 20 6c 69 6e  th-1.256 {.  lin
98f0: 64 65 78 20 5b 65 78 65 63 73 71 6c 20 7b 50 52  dex [execsql {PR
9900: 41 47 4d 41 20 64 61 74 61 62 61 73 65 5f 6c 69  AGMA database_li
9910: 73 74 7d 5d 20 37 0a 7d 20 7b 7d 0a 64 6f 5f 74  st}] 7.} {}.do_t
9920: 65 73 74 20 61 75 74 68 2d 31 2e 32 35 37 20 7b  est auth-1.257 {
9930: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
9940: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
9950: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66  3 arg4} {.    if
9960: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
9970: 5f 44 45 54 41 43 48 22 7d 20 7b 0a 20 20 20 20  _DETACH"} {.    
9980: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
9990: 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72   [list $arg1 $ar
99a0: 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a  g2 $arg3 $arg4].
99b0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
99c0: 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20  ITE_OK.    }.   
99d0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
99e0: 4b 0a 20 20 7d 0a 20 20 65 78 65 63 73 71 6c 20  K.  }.  execsql 
99f0: 7b 41 54 54 41 43 48 20 44 41 54 41 42 41 53 45  {ATTACH DATABASE
9a00: 20 27 3a 6d 65 6d 6f 72 79 3a 27 20 41 53 20 74   ':memory:' AS t
9a10: 65 73 74 31 7d 0a 20 20 63 61 74 63 68 73 71 6c  est1}.  catchsql
9a20: 20 7b 0a 20 20 20 20 44 45 54 41 43 48 20 44 41   {.    DETACH DA
9a30: 54 41 42 41 53 45 20 74 65 73 74 31 3b 0a 20 20  TABASE test1;.  
9a40: 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  }.} {0 {}}.do_te
9a50: 73 74 20 61 75 74 68 2d 31 2e 32 35 38 20 7b 0a  st auth-1.258 {.
9a60: 20 20 6c 69 6e 64 65 78 20 5b 65 78 65 63 73 71    lindex [execsq
9a70: 6c 20 7b 50 52 41 47 4d 41 20 64 61 74 61 62 61  l {PRAGMA databa
9a80: 73 65 5f 6c 69 73 74 7d 5d 20 37 0a 7d 20 7b 7d  se_list}] 7.} {}
9a90: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
9aa0: 32 35 39 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  259 {.  execsql 
9ab0: 7b 41 54 54 41 43 48 20 44 41 54 41 42 41 53 45  {ATTACH DATABASE
9ac0: 20 27 3a 6d 65 6d 6f 72 79 3a 27 20 41 53 20 74   ':memory:' AS t
9ad0: 65 73 74 31 7d 0a 20 20 70 72 6f 63 20 61 75 74  est1}.  proc aut
9ae0: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
9af0: 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20  2 arg3 arg4} {. 
9b00: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
9b10: 51 4c 49 54 45 5f 44 45 54 41 43 48 22 7d 20 7b  QLITE_DETACH"} {
9b20: 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74  .      set ::aut
9b30: 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67  hargs [list $arg
9b40: 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61  1 $arg2 $arg3 $a
9b50: 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72  rg4].      retur
9b60: 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a  n SQLITE_IGNORE.
9b70: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
9b80: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
9b90: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
9ba0: 44 45 54 41 43 48 20 44 41 54 41 42 41 53 45 20  DETACH DATABASE 
9bb0: 74 65 73 74 31 3b 0a 20 20 7d 0a 7d 20 7b 30 20  test1;.  }.} {0 
9bc0: 7b 7d 7d 0a 69 66 63 61 70 61 62 6c 65 20 73 63  {}}.ifcapable sc
9bd0: 68 65 6d 61 5f 70 72 61 67 6d 61 73 20 7b 0a 64  hema_pragmas {.d
9be0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 36  o_test auth-1.26
9bf0: 30 20 7b 0a 20 20 6c 69 6e 64 65 78 20 5b 65 78  0 {.  lindex [ex
9c00: 65 63 73 71 6c 20 7b 50 52 41 47 4d 41 20 64 61  ecsql {PRAGMA da
9c10: 74 61 62 61 73 65 5f 6c 69 73 74 7d 5d 20 37 0a  tabase_list}] 7.
9c20: 7d 20 7b 74 65 73 74 31 7d 0a 7d 20 3b 23 20 69  } {test1}.} ;# i
9c30: 66 63 61 70 61 62 6c 65 20 73 63 68 65 6d 61 5f  fcapable schema_
9c40: 70 72 61 67 6d 61 73 0a 64 6f 5f 74 65 73 74 20  pragmas.do_test 
9c50: 61 75 74 68 2d 31 2e 32 36 31 20 7b 0a 20 20 70  auth-1.261 {.  p
9c60: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
9c70: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
9c80: 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g4} {.    if {$c
9c90: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 54  ode=="SQLITE_DET
9ca0: 41 43 48 22 7d 20 7b 0a 20 20 20 20 20 20 73 65  ACH"} {.      se
9cb0: 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69  t ::authargs [li
9cc0: 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24  st $arg1 $arg2 $
9cd0: 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20  arg3 $arg4].    
9ce0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
9cf0: 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72  DENY.    }.    r
9d00: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
9d10: 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b    }.  catchsql {
9d20: 0a 20 20 20 20 44 45 54 41 43 48 20 44 41 54 41  .    DETACH DATA
9d30: 42 41 53 45 20 74 65 73 74 31 3b 0a 20 20 7d 0a  BASE test1;.  }.
9d40: 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72  } {1 {not author
9d50: 69 7a 65 64 7d 7d 0a 69 66 63 61 70 61 62 6c 65  ized}}.ifcapable
9d60: 20 73 63 68 65 6d 61 5f 70 72 61 67 6d 61 73 20   schema_pragmas 
9d70: 7b 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  {.do_test auth-1
9d80: 2e 32 36 32 20 7b 0a 20 20 6c 69 6e 64 65 78 20  .262 {.  lindex 
9d90: 5b 65 78 65 63 73 71 6c 20 7b 50 52 41 47 4d 41  [execsql {PRAGMA
9da0: 20 64 61 74 61 62 61 73 65 5f 6c 69 73 74 7d 5d   database_list}]
9db0: 20 37 0a 7d 20 7b 74 65 73 74 31 7d 0a 7d 20 3b   7.} {test1}.} ;
9dc0: 23 20 69 66 63 61 70 61 62 6c 65 20 73 63 68 65  # ifcapable sche
9dd0: 6d 61 5f 70 72 61 67 6d 61 73 0a 64 62 20 61 75  ma_pragmas.db au
9de0: 74 68 6f 72 69 7a 65 72 20 7b 7d 0a 65 78 65 63  thorizer {}.exec
9df0: 73 71 6c 20 7b 44 45 54 41 43 48 20 44 41 54 41  sql {DETACH DATA
9e00: 42 41 53 45 20 74 65 73 74 31 7d 0a 64 62 20 61  BASE test1}.db a
9e10: 75 74 68 6f 72 69 7a 65 72 20 3a 3a 61 75 74 68  uthorizer ::auth
9e20: 0a 0a 23 20 41 75 74 68 6f 72 69 7a 61 74 69 6f  ..# Authorizatio
9e30: 6e 20 66 6f 72 20 41 4c 54 45 52 20 54 41 42 4c  n for ALTER TABL
9e40: 45 2e 20 54 68 65 73 65 20 74 65 73 74 73 20 61  E. These tests a
9e50: 72 65 20 6f 6d 69 74 74 65 64 20 69 66 20 74 68  re omitted if th
9e60: 65 20 6c 69 62 72 61 72 79 0a 23 20 77 61 73 20  e library.# was 
9e70: 62 75 69 6c 74 20 77 69 74 68 6f 75 74 20 41 4c  built without AL
9e80: 54 45 52 20 54 41 42 4c 45 20 73 75 70 70 6f 72  TER TABLE suppor
9e90: 74 2e 0a 69 66 63 61 70 61 62 6c 65 20 61 6c 74  t..ifcapable alt
9ea0: 65 72 74 61 62 6c 65 20 7b 0a 0a 64 6f 5f 74 65  ertable {..do_te
9eb0: 73 74 20 61 75 74 68 2d 31 2e 32 36 33 20 7b 0a  st auth-1.263 {.
9ec0: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
9ed0: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
9ee0: 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20   arg4} {.    if 
9ef0: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
9f00: 41 4c 54 45 52 5f 54 41 42 4c 45 22 7d 20 7b 0a  ALTER_TABLE"} {.
9f10: 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68        set ::auth
9f20: 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31  args [list $arg1
9f30: 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72   $arg2 $arg3 $ar
9f40: 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  g4].      return
9f50: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d   SQLITE_OK.    }
9f60: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
9f70: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
9f80: 68 73 71 6c 20 7b 0a 20 20 20 20 41 4c 54 45 52  hsql {.    ALTER
9f90: 20 54 41 42 4c 45 20 74 31 20 52 45 4e 41 4d 45   TABLE t1 RENAME
9fa0: 20 54 4f 20 74 31 78 0a 20 20 7d 0a 7d 20 7b 30   TO t1x.  }.} {0
9fb0: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
9fc0: 68 2d 31 2e 32 36 34 20 7b 0a 20 20 65 78 65 63  h-1.264 {.  exec
9fd0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
9fe0: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d   FROM sqlite_tem
9ff0: 70 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20 74  p_master WHERE t
a000: 79 70 65 3d 27 74 61 62 6c 65 27 7d 0a 7d 20 7b  ype='table'}.} {
a010: 74 31 78 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  t1x}.do_test aut
a020: 68 2d 31 2e 32 36 35 20 7b 0a 20 20 73 65 74 20  h-1.265 {.  set 
a030: 61 75 74 68 61 72 67 73 0a 7d 20 7b 74 65 6d 70  authargs.} {temp
a040: 20 74 31 20 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74 65   t1 {} {}}.do_te
a050: 73 74 20 61 75 74 68 2d 31 2e 32 36 36 20 7b 0a  st auth-1.266 {.
a060: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
a070: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
a080: 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20   arg4} {.    if 
a090: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
a0a0: 41 4c 54 45 52 5f 54 41 42 4c 45 22 7d 20 7b 0a  ALTER_TABLE"} {.
a0b0: 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68        set ::auth
a0c0: 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31  args [list $arg1
a0d0: 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72   $arg2 $arg3 $ar
a0e0: 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  g4].      return
a0f0: 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20   SQLITE_IGNORE. 
a100: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
a110: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
a120: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 41  catchsql {.    A
a130: 4c 54 45 52 20 54 41 42 4c 45 20 74 31 78 20 52  LTER TABLE t1x R
a140: 45 4e 41 4d 45 20 54 4f 20 74 31 0a 20 20 7d 0a  ENAME TO t1.  }.
a150: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
a160: 20 61 75 74 68 2d 31 2e 32 36 37 20 7b 0a 20 20   auth-1.267 {.  
a170: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
a180: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
a190: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 20 57 48 45  _temp_master WHE
a1a0: 52 45 20 74 79 70 65 3d 27 74 61 62 6c 65 27 7d  RE type='table'}
a1b0: 0a 7d 20 7b 74 31 78 7d 0a 64 6f 5f 74 65 73 74  .} {t1x}.do_test
a1c0: 20 61 75 74 68 2d 31 2e 32 36 38 20 7b 0a 20 20   auth-1.268 {.  
a1d0: 73 65 74 20 61 75 74 68 61 72 67 73 0a 7d 20 7b  set authargs.} {
a1e0: 74 65 6d 70 20 74 31 78 20 7b 7d 20 7b 7d 7d 0a  temp t1x {} {}}.
a1f0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
a200: 36 39 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  69 {.  proc auth
a210: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
a220: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
a230: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
a240: 4c 49 54 45 5f 41 4c 54 45 52 5f 54 41 42 4c 45  LITE_ALTER_TABLE
a250: 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a  "} {.      set :
a260: 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20  :authargs [list 
a270: 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67  $arg1 $arg2 $arg
a280: 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72  3 $arg4].      r
a290: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e  eturn SQLITE_DEN
a2a0: 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  Y.    }.    retu
a2b0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
a2c0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
a2d0: 20 20 41 4c 54 45 52 20 54 41 42 4c 45 20 74 31    ALTER TABLE t1
a2e0: 78 20 52 45 4e 41 4d 45 20 54 4f 20 74 31 0a 20  x RENAME TO t1. 
a2f0: 20 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74   }.} {1 {not aut
a300: 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73  horized}}.do_tes
a310: 74 20 61 75 74 68 2d 31 2e 32 37 30 20 7b 0a 20  t auth-1.270 {. 
a320: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
a330: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
a340: 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 20 57 48  e_temp_master WH
a350: 45 52 45 20 74 79 70 65 3d 27 74 61 62 6c 65 27  ERE type='table'
a360: 7d 0a 7d 20 7b 74 31 78 7d 0a 64 6f 5f 74 65 73  }.} {t1x}.do_tes
a370: 74 20 61 75 74 68 2d 31 2e 32 37 31 20 7b 0a 20  t auth-1.271 {. 
a380: 20 73 65 74 20 61 75 74 68 61 72 67 73 0a 7d 20   set authargs.} 
a390: 7b 74 65 6d 70 20 74 31 78 20 7b 7d 20 7b 7d 7d  {temp t1x {} {}}
a3a0: 0a 64 62 20 61 75 74 68 6f 72 69 7a 65 72 20 7b  .db authorizer {
a3b0: 7d 0a 63 61 74 63 68 73 71 6c 20 7b 41 4c 54 45  }.catchsql {ALTE
a3c0: 52 20 54 41 42 4c 45 20 74 31 78 20 52 45 4e 41  R TABLE t1x RENA
a3d0: 4d 45 20 54 4f 20 74 31 7d 0a 64 62 20 61 75 74  ME TO t1}.db aut
a3e0: 68 6f 72 69 7a 65 72 20 3a 3a 61 75 74 68 0a 64  horizer ::auth.d
a3f0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 37  o_test auth-1.27
a400: 32 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  2 {.  proc auth 
a410: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
a420: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
a430: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
a440: 49 54 45 5f 41 4c 54 45 52 5f 54 41 42 4c 45 22  ITE_ALTER_TABLE"
a450: 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a  } {.      set ::
a460: 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24  authargs [list $
a470: 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33  arg1 $arg2 $arg3
a480: 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65   $arg4].      re
a490: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
a4a0: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
a4b0: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
a4c0: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 41  catchsql {.    A
a4d0: 4c 54 45 52 20 54 41 42 4c 45 20 74 32 20 52 45  LTER TABLE t2 RE
a4e0: 4e 41 4d 45 20 54 4f 20 74 32 78 0a 20 20 7d 0a  NAME TO t2x.  }.
a4f0: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
a500: 20 61 75 74 68 2d 31 2e 32 37 33 20 7b 0a 20 20   auth-1.273 {.  
a510: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
a520: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
a530: 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20 74 79  _master WHERE ty
a540: 70 65 3d 27 74 61 62 6c 65 27 7d 0a 7d 20 7b 74  pe='table'}.} {t
a550: 32 78 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  2x}.do_test auth
a560: 2d 31 2e 32 37 34 20 7b 0a 20 20 73 65 74 20 61  -1.274 {.  set a
a570: 75 74 68 61 72 67 73 0a 7d 20 7b 6d 61 69 6e 20  uthargs.} {main 
a580: 74 32 20 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74 65 73  t2 {} {}}.do_tes
a590: 74 20 61 75 74 68 2d 31 2e 32 37 35 20 7b 0a 20  t auth-1.275 {. 
a5a0: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
a5b0: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
a5c0: 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg4} {.    if {
a5d0: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 41  $code=="SQLITE_A
a5e0: 4c 54 45 52 5f 54 41 42 4c 45 22 7d 20 7b 0a 20  LTER_TABLE"} {. 
a5f0: 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61       set ::autha
a600: 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20  rgs [list $arg1 
a610: 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67  $arg2 $arg3 $arg
a620: 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  4].      return 
a630: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20  SQLITE_IGNORE.  
a640: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
a650: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
a660: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 41 4c  atchsql {.    AL
a670: 54 45 52 20 54 41 42 4c 45 20 74 32 78 20 52 45  TER TABLE t2x RE
a680: 4e 41 4d 45 20 54 4f 20 74 32 0a 20 20 7d 0a 7d  NAME TO t2.  }.}
a690: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
a6a0: 61 75 74 68 2d 31 2e 32 37 36 20 7b 0a 20 20 65  auth-1.276 {.  e
a6b0: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
a6c0: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
a6d0: 6d 61 73 74 65 72 20 57 48 45 52 45 20 74 79 70  master WHERE typ
a6e0: 65 3d 27 74 61 62 6c 65 27 7d 0a 7d 20 7b 74 32  e='table'}.} {t2
a6f0: 78 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  x}.do_test auth-
a700: 31 2e 32 37 37 20 7b 0a 20 20 73 65 74 20 61 75  1.277 {.  set au
a710: 74 68 61 72 67 73 0a 7d 20 7b 6d 61 69 6e 20 74  thargs.} {main t
a720: 32 78 20 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74 65 73  2x {} {}}.do_tes
a730: 74 20 61 75 74 68 2d 31 2e 32 37 38 20 7b 0a 20  t auth-1.278 {. 
a740: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
a750: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
a760: 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg4} {.    if {
a770: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 41  $code=="SQLITE_A
a780: 4c 54 45 52 5f 54 41 42 4c 45 22 7d 20 7b 0a 20  LTER_TABLE"} {. 
a790: 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61       set ::autha
a7a0: 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20  rgs [list $arg1 
a7b0: 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67  $arg2 $arg3 $arg
a7c0: 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  4].      return 
a7d0: 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20  SQLITE_DENY.    
a7e0: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
a7f0: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
a800: 63 68 73 71 6c 20 7b 0a 20 20 20 20 41 4c 54 45  chsql {.    ALTE
a810: 52 20 54 41 42 4c 45 20 74 32 78 20 52 45 4e 41  R TABLE t2x RENA
a820: 4d 45 20 54 4f 20 74 32 0a 20 20 7d 0a 7d 20 7b  ME TO t2.  }.} {
a830: 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65  1 {not authorize
a840: 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  d}}.do_test auth
a850: 2d 31 2e 32 37 39 20 7b 0a 20 20 65 78 65 63 73  -1.279 {.  execs
a860: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
a870: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
a880: 65 72 20 57 48 45 52 45 20 74 79 70 65 3d 27 74  er WHERE type='t
a890: 61 62 6c 65 27 7d 0a 7d 20 7b 74 32 78 7d 0a 64  able'}.} {t2x}.d
a8a0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 38  o_test auth-1.28
a8b0: 30 20 7b 0a 20 20 73 65 74 20 61 75 74 68 61 72  0 {.  set authar
a8c0: 67 73 0a 7d 20 7b 6d 61 69 6e 20 74 32 78 20 7b  gs.} {main t2x {
a8d0: 7d 20 7b 7d 7d 0a 64 62 20 61 75 74 68 6f 72 69  } {}}.db authori
a8e0: 7a 65 72 20 7b 7d 0a 63 61 74 63 68 73 71 6c 20  zer {}.catchsql 
a8f0: 7b 41 4c 54 45 52 20 54 41 42 4c 45 20 74 32 78  {ALTER TABLE t2x
a900: 20 52 45 4e 41 4d 45 20 54 4f 20 74 32 7d 0a 0a   RENAME TO t2}..
a910: 7d 20 3b 23 20 69 66 63 61 70 61 62 6c 65 20 61  } ;# ifcapable a
a920: 6c 74 65 72 74 61 62 6c 65 0a 0a 0a 64 6f 5f 74  ltertable...do_t
a930: 65 73 74 20 61 75 74 68 2d 32 2e 31 20 7b 0a 20  est auth-2.1 {. 
a940: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
a950: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
a960: 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg4} {.    if {
a970: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 52  $code=="SQLITE_R
a980: 45 41 44 22 20 26 26 20 24 61 72 67 31 3d 3d 22  EAD" && $arg1=="
a990: 74 33 22 20 26 26 20 24 61 72 67 32 3d 3d 22 78  t3" && $arg2=="x
a9a0: 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72  "} {.      retur
a9b0: 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20  n SQLITE_DENY.  
a9c0: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
a9d0: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 64  QLITE_OK.  }.  d
a9e0: 62 20 61 75 74 68 6f 72 69 7a 65 72 20 3a 3a 61  b authorizer ::a
a9f0: 75 74 68 0a 20 20 65 78 65 63 73 71 6c 20 7b 43  uth.  execsql {C
aa00: 52 45 41 54 45 20 54 41 42 4c 45 20 74 33 28 78  REATE TABLE t3(x
aa10: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
aa20: 20 4b 45 59 2c 20 79 2c 20 7a 29 7d 0a 20 20 63   KEY, y, z)}.  c
aa30: 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20  atchsql {SELECT 
aa40: 2a 20 46 52 4f 4d 20 74 33 7d 0a 7d 20 7b 31 20  * FROM t3}.} {1 
aa50: 7b 61 63 63 65 73 73 20 74 6f 20 74 33 2e 78 20  {access to t3.x 
aa60: 69 73 20 70 72 6f 68 69 62 69 74 65 64 7d 7d 0a  is prohibited}}.
aa70: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 32 2e 31  do_test auth-2.1
aa80: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 53   {.  catchsql {S
aa90: 45 4c 45 43 54 20 79 2c 7a 20 46 52 4f 4d 20 74  ELECT y,z FROM t
aaa0: 33 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74  3}.} {0 {}}.do_t
aab0: 65 73 74 20 61 75 74 68 2d 32 2e 32 20 7b 0a 20  est auth-2.2 {. 
aac0: 20 63 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43   catchsql {SELEC
aad0: 54 20 52 4f 57 49 44 2c 79 2c 7a 20 46 52 4f 4d  T ROWID,y,z FROM
aae0: 20 74 33 7d 0a 7d 20 7b 31 20 7b 61 63 63 65 73   t3}.} {1 {acces
aaf0: 73 20 74 6f 20 74 33 2e 78 20 69 73 20 70 72 6f  s to t3.x is pro
ab00: 68 69 62 69 74 65 64 7d 7d 0a 64 6f 5f 74 65 73  hibited}}.do_tes
ab10: 74 20 61 75 74 68 2d 32 2e 33 20 7b 0a 20 20 63  t auth-2.3 {.  c
ab20: 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20  atchsql {SELECT 
ab30: 4f 49 44 2c 79 2c 7a 20 46 52 4f 4d 20 74 33 7d  OID,y,z FROM t3}
ab40: 0a 7d 20 7b 31 20 7b 61 63 63 65 73 73 20 74 6f  .} {1 {access to
ab50: 20 74 33 2e 78 20 69 73 20 70 72 6f 68 69 62 69   t3.x is prohibi
ab60: 74 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  ted}}.do_test au
ab70: 74 68 2d 32 2e 34 20 7b 0a 20 20 70 72 6f 63 20  th-2.4 {.  proc 
ab80: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
ab90: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
aba0: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
abb0: 3d 22 53 51 4c 49 54 45 5f 52 45 41 44 22 20 26  ="SQLITE_READ" &
abc0: 26 20 24 61 72 67 31 3d 3d 22 74 33 22 20 26 26  & $arg1=="t3" &&
abd0: 20 24 61 72 67 32 3d 3d 22 78 22 7d 20 7b 0a 20   $arg2=="x"} {. 
abe0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
abf0: 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a  TE_IGNORE.    }.
ac00: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
ac10: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 65 78 65 63 73  E_OK.  }.  execs
ac20: 71 6c 20 7b 49 4e 53 45 52 54 20 49 4e 54 4f 20  ql {INSERT INTO 
ac30: 74 33 20 56 41 4c 55 45 53 28 34 34 2c 35 35 2c  t3 VALUES(44,55,
ac40: 36 36 29 7d 0a 20 20 63 61 74 63 68 73 71 6c 20  66)}.  catchsql 
ac50: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
ac60: 33 7d 0a 7d 20 7b 30 20 7b 7b 7d 20 35 35 20 36  3}.} {0 {{} 55 6
ac70: 36 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  6}}.do_test auth
ac80: 2d 32 2e 35 20 7b 0a 20 20 63 61 74 63 68 73 71  -2.5 {.  catchsq
ac90: 6c 20 7b 53 45 4c 45 43 54 20 72 6f 77 69 64 2c  l {SELECT rowid,
aca0: 79 2c 7a 20 46 52 4f 4d 20 74 33 7d 0a 7d 20 7b  y,z FROM t3}.} {
acb0: 30 20 7b 7b 7d 20 35 35 20 36 36 7d 7d 0a 64 6f  0 {{} 55 66}}.do
acc0: 5f 74 65 73 74 20 61 75 74 68 2d 32 2e 36 20 7b  _test auth-2.6 {
acd0: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
ace0: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
acf0: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66  3 arg4} {.    if
ad00: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
ad10: 5f 52 45 41 44 22 20 26 26 20 24 61 72 67 31 3d  _READ" && $arg1=
ad20: 3d 22 74 33 22 20 26 26 20 24 61 72 67 32 3d 3d  ="t3" && $arg2==
ad30: 22 52 4f 57 49 44 22 7d 20 7b 0a 20 20 20 20 20  "ROWID"} {.     
ad40: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49   return SQLITE_I
ad50: 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20  GNORE.    }.    
ad60: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
ad70: 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20  .  }.  catchsql 
ad80: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
ad90: 33 7d 0a 7d 20 7b 30 20 7b 34 34 20 35 35 20 36  3}.} {0 {44 55 6
ada0: 36 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  6}}.do_test auth
adb0: 2d 32 2e 37 20 7b 0a 20 20 63 61 74 63 68 73 71  -2.7 {.  catchsq
adc0: 6c 20 7b 53 45 4c 45 43 54 20 52 4f 57 49 44 2c  l {SELECT ROWID,
add0: 79 2c 7a 20 46 52 4f 4d 20 74 33 7d 0a 7d 20 7b  y,z FROM t3}.} {
ade0: 30 20 7b 34 34 20 35 35 20 36 36 7d 7d 0a 64 6f  0 {44 55 66}}.do
adf0: 5f 74 65 73 74 20 61 75 74 68 2d 32 2e 38 20 7b  _test auth-2.8 {
ae00: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
ae10: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
ae20: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66  3 arg4} {.    if
ae30: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
ae40: 5f 52 45 41 44 22 20 26 26 20 24 61 72 67 31 3d  _READ" && $arg1=
ae50: 3d 22 74 32 22 20 26 26 20 24 61 72 67 32 3d 3d  ="t2" && $arg2==
ae60: 22 52 4f 57 49 44 22 7d 20 7b 0a 20 20 20 20 20  "ROWID"} {.     
ae70: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49   return SQLITE_I
ae80: 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20  GNORE.    }.    
ae90: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
aea0: 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20  .  }.  catchsql 
aeb0: 7b 53 45 4c 45 43 54 20 52 4f 57 49 44 2c 62 2c  {SELECT ROWID,b,
aec0: 63 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 30 20  c FROM t2}.} {0 
aed0: 7b 7b 7d 20 32 20 33 33 20 7b 7d 20 38 20 39 7d  {{} 2 33 {} 8 9}
aee0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 32  }.do_test auth-2
aef0: 2e 39 2e 31 20 7b 0a 20 20 70 72 6f 63 20 61 75  .9.1 {.  proc au
af00: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
af10: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
af20: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
af30: 53 51 4c 49 54 45 5f 52 45 41 44 22 20 26 26 20  SQLITE_READ" && 
af40: 24 61 72 67 31 3d 3d 22 74 32 22 20 26 26 20 24  $arg1=="t2" && $
af50: 61 72 67 32 3d 3d 22 52 4f 57 49 44 22 7d 20 7b  arg2=="ROWID"} {
af60: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 62 6f  .      return bo
af70: 67 75 73 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  gus.    }.    re
af80: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
af90: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 53   }.  catchsql {S
afa0: 45 4c 45 43 54 20 52 4f 57 49 44 2c 62 2c 63 20  ELECT ROWID,b,c 
afb0: 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31 20 7b 69  FROM t2}.} {1 {i
afc0: 6c 6c 65 67 61 6c 20 72 65 74 75 72 6e 20 76 61  llegal return va
afd0: 6c 75 65 20 28 39 39 39 29 20 66 72 6f 6d 20 74  lue (999) from t
afe0: 68 65 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e  he authorization
aff0: 20 66 75 6e 63 74 69 6f 6e 20 2d 20 73 68 6f 75   function - shou
b000: 6c 64 20 62 65 20 53 51 4c 49 54 45 5f 4f 4b 2c  ld be SQLITE_OK,
b010: 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 2c 20   SQLITE_IGNORE, 
b020: 6f 72 20 53 51 4c 49 54 45 5f 44 45 4e 59 7d 7d  or SQLITE_DENY}}
b030: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 32 2e  .do_test auth-2.
b040: 39 2e 32 20 7b 0a 20 20 64 62 20 65 72 72 6f 72  9.2 {.  db error
b050: 63 6f 64 65 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65  code.} {1}.do_te
b060: 73 74 20 61 75 74 68 2d 32 2e 31 30 20 7b 0a 20  st auth-2.10 {. 
b070: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
b080: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
b090: 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg4} {.    if {
b0a0: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 53  $code=="SQLITE_S
b0b0: 45 4c 45 43 54 22 7d 20 7b 0a 20 20 20 20 20 20  ELECT"} {.      
b0c0: 72 65 74 75 72 6e 20 62 6f 67 75 73 0a 20 20 20  return bogus.   
b0d0: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
b0e0: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
b0f0: 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 52  tchsql {SELECT R
b100: 4f 57 49 44 2c 62 2c 63 20 46 52 4f 4d 20 74 32  OWID,b,c FROM t2
b110: 7d 0a 7d 20 7b 31 20 7b 69 6c 6c 65 67 61 6c 20  }.} {1 {illegal 
b120: 72 65 74 75 72 6e 20 76 61 6c 75 65 20 28 31 29  return value (1)
b130: 20 66 72 6f 6d 20 74 68 65 20 61 75 74 68 6f 72   from the author
b140: 69 7a 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e  ization function
b150: 20 2d 20 73 68 6f 75 6c 64 20 62 65 20 53 51 4c   - should be SQL
b160: 49 54 45 5f 4f 4b 2c 20 53 51 4c 49 54 45 5f 49  ITE_OK, SQLITE_I
b170: 47 4e 4f 52 45 2c 20 6f 72 20 53 51 4c 49 54 45  GNORE, or SQLITE
b180: 5f 44 45 4e 59 7d 7d 0a 64 6f 5f 74 65 73 74 20  _DENY}}.do_test 
b190: 61 75 74 68 2d 32 2e 31 31 2e 31 20 7b 0a 20 20  auth-2.11.1 {.  
b1a0: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
b1b0: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
b1c0: 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg4} {.    if {$
b1d0: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45  code=="SQLITE_RE
b1e0: 41 44 22 20 26 26 20 24 61 72 67 32 3d 3d 22 61  AD" && $arg2=="a
b1f0: 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72  "} {.      retur
b200: 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a  n SQLITE_IGNORE.
b210: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
b220: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
b230: 20 63 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43   catchsql {SELEC
b240: 54 20 2a 20 46 52 4f 4d 20 74 32 2c 20 74 33 7d  T * FROM t2, t3}
b250: 0a 7d 20 7b 30 20 7b 7b 7d 20 32 20 33 33 20 34  .} {0 {{} 2 33 4
b260: 34 20 35 35 20 36 36 20 7b 7d 20 38 20 39 20 34  4 55 66 {} 8 9 4
b270: 34 20 35 35 20 36 36 7d 7d 0a 64 6f 5f 74 65 73  4 55 66}}.do_tes
b280: 74 20 61 75 74 68 2d 32 2e 31 31 2e 32 20 7b 0a  t auth-2.11.2 {.
b290: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
b2a0: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
b2b0: 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20   arg4} {.    if 
b2c0: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
b2d0: 52 45 41 44 22 20 26 26 20 24 61 72 67 32 3d 3d  READ" && $arg2==
b2e0: 22 78 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74  "x"} {.      ret
b2f0: 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52  urn SQLITE_IGNOR
b300: 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  E.    }.    retu
b310: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
b320: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 53 45 4c  .  catchsql {SEL
b330: 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 2c 20 74  ECT * FROM t2, t
b340: 33 7d 0a 7d 20 7b 30 20 7b 31 31 20 32 20 33 33  3}.} {0 {11 2 33
b350: 20 7b 7d 20 35 35 20 36 36 20 37 20 38 20 39 20   {} 55 66 7 8 9 
b360: 7b 7d 20 35 35 20 36 36 7d 7d 0a 0a 23 20 4d 61  {} 55 66}}..# Ma
b370: 6b 65 20 73 75 72 65 20 74 68 65 20 4f 4c 44 20  ke sure the OLD 
b380: 61 6e 64 20 4e 45 57 20 70 73 65 75 64 6f 2d 74  and NEW pseudo-t
b390: 61 62 6c 65 73 20 6f 66 20 61 20 74 72 69 67 67  ables of a trigg
b3a0: 65 72 20 67 65 74 20 61 75 74 68 6f 72 69 7a 65  er get authorize
b3b0: 64 2e 0a 23 0a 69 66 63 61 70 61 62 6c 65 20 74  d..#.ifcapable t
b3c0: 72 69 67 67 65 72 20 7b 0a 64 6f 5f 74 65 73 74  rigger {.do_test
b3d0: 20 61 75 74 68 2d 33 2e 31 20 7b 0a 20 20 70 72   auth-3.1 {.  pr
b3e0: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
b3f0: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
b400: 34 7d 20 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  4} {.    return 
b410: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
b420: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52  execsql {.    CR
b430: 45 41 54 45 20 54 41 42 4c 45 20 74 78 28 61 31  EATE TABLE tx(a1
b440: 2c 61 32 2c 62 31 2c 62 32 2c 63 31 2c 63 32 29  ,a2,b1,b2,c1,c2)
b450: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 52 49  ;.    CREATE TRI
b460: 47 47 45 52 20 72 31 20 41 46 54 45 52 20 55 50  GGER r1 AFTER UP
b470: 44 41 54 45 20 4f 4e 20 74 32 20 46 4f 52 20 45  DATE ON t2 FOR E
b480: 41 43 48 20 52 4f 57 20 42 45 47 49 4e 0a 20 20  ACH ROW BEGIN.  
b490: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
b4a0: 74 78 20 56 41 4c 55 45 53 28 4f 4c 44 2e 61 2c  tx VALUES(OLD.a,
b4b0: 4e 45 57 2e 61 2c 4f 4c 44 2e 62 2c 4e 45 57 2e  NEW.a,OLD.b,NEW.
b4c0: 62 2c 4f 4c 44 2e 63 2c 4e 45 57 2e 63 29 3b 0a  b,OLD.c,NEW.c);.
b4d0: 20 20 20 20 45 4e 44 3b 0a 20 20 20 20 55 50 44      END;.    UPD
b4e0: 41 54 45 20 74 32 20 53 45 54 20 61 3d 61 2b 31  ATE t2 SET a=a+1
b4f0: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ;.    SELECT * F
b500: 52 4f 4d 20 74 78 3b 0a 20 20 7d 0a 7d 20 7b 31  ROM tx;.  }.} {1
b510: 31 20 31 32 20 32 20 32 20 33 33 20 33 33 20 37  1 12 2 2 33 33 7
b520: 20 38 20 38 20 38 20 39 20 39 7d 0a 64 6f 5f 74   8 8 8 9 9}.do_t
b530: 65 73 74 20 61 75 74 68 2d 33 2e 32 20 7b 0a 20  est auth-3.2 {. 
b540: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
b550: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
b560: 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg4} {.    if {
b570: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 52  $code=="SQLITE_R
b580: 45 41 44 22 20 26 26 20 24 61 72 67 31 3d 3d 22  EAD" && $arg1=="
b590: 74 32 22 20 26 26 20 24 61 72 67 32 3d 3d 22 63  t2" && $arg2=="c
b5a0: 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72  "} {.      retur
b5b0: 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a  n SQLITE_IGNORE.
b5c0: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
b5d0: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
b5e0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44   execsql {.    D
b5f0: 45 4c 45 54 45 20 46 52 4f 4d 20 74 78 3b 0a 20  ELETE FROM tx;. 
b600: 20 20 20 55 50 44 41 54 45 20 74 32 20 53 45 54     UPDATE t2 SET
b610: 20 61 3d 61 2b 31 30 30 3b 0a 20 20 20 20 53 45   a=a+100;.    SE
b620: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 78 3b 0a  LECT * FROM tx;.
b630: 20 20 7d 0a 7d 20 7b 31 32 20 31 31 32 20 32 20    }.} {12 112 2 
b640: 32 20 7b 7d 20 7b 7d 20 38 20 31 30 38 20 38 20  2 {} {} 8 108 8 
b650: 38 20 7b 7d 20 7b 7d 7d 0a 7d 20 3b 23 20 69 66  8 {} {}}.} ;# if
b660: 63 61 70 61 62 6c 65 20 74 72 69 67 67 65 72 0a  capable trigger.
b670: 0a 23 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65  .# Make sure the
b680: 20 6e 61 6d 65 73 20 6f 66 20 76 69 65 77 73 20   names of views 
b690: 61 6e 64 20 74 72 69 67 67 65 72 73 20 61 72 65  and triggers are
b6a0: 20 70 61 73 73 65 64 20 6f 6e 20 6f 6e 20 61 72   passed on on ar
b6b0: 67 34 2e 0a 23 0a 69 66 63 61 70 61 62 6c 65 20  g4..#.ifcapable 
b6c0: 74 72 69 67 67 65 72 20 7b 0a 64 6f 5f 74 65 73  trigger {.do_tes
b6d0: 74 20 61 75 74 68 2d 34 2e 31 20 7b 0a 20 20 70  t auth-4.1 {.  p
b6e0: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
b6f0: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
b700: 67 34 7d 20 7b 0a 20 20 20 20 6c 61 70 70 65 6e  g4} {.    lappen
b710: 64 20 3a 3a 61 75 74 68 61 72 67 73 20 24 63 6f  d ::authargs $co
b720: 64 65 20 24 61 72 67 31 20 24 61 72 67 32 20 24  de $arg1 $arg2 $
b730: 61 72 67 33 20 24 61 72 67 34 0a 20 20 20 20 72  arg3 $arg4.    r
b740: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
b750: 20 20 7d 0a 20 20 73 65 74 20 61 75 74 68 61 72    }.  set authar
b760: 67 73 20 7b 7d 0a 20 20 65 78 65 63 73 71 6c 20  gs {}.  execsql 
b770: 7b 0a 20 20 20 20 55 50 44 41 54 45 20 74 32 20  {.    UPDATE t2 
b780: 53 45 54 20 61 3d 61 2b 31 3b 0a 20 20 7d 0a 20  SET a=a+1;.  }. 
b790: 20 73 65 74 20 61 75 74 68 61 72 67 73 0a 7d 20   set authargs.} 
b7a0: 5b 6c 69 73 74 20 5c 0a 20 20 53 51 4c 49 54 45  [list \.  SQLITE
b7b0: 5f 52 45 41 44 20 20 20 74 32 20 61 20 20 6d 61  _READ   t2 a  ma
b7c0: 69 6e 20 7b 7d 20 5c 0a 20 20 53 51 4c 49 54 45  in {} \.  SQLITE
b7d0: 5f 55 50 44 41 54 45 20 74 32 20 61 20 20 6d 61  _UPDATE t2 a  ma
b7e0: 69 6e 20 7b 7d 20 5c 0a 20 20 53 51 4c 49 54 45  in {} \.  SQLITE
b7f0: 5f 49 4e 53 45 52 54 20 74 78 20 7b 7d 20 6d 61  _INSERT tx {} ma
b800: 69 6e 20 72 31 20 5c 0a 20 20 53 51 4c 49 54 45  in r1 \.  SQLITE
b810: 5f 52 45 41 44 20 20 20 74 32 20 61 20 20 6d 61  _READ   t2 a  ma
b820: 69 6e 20 72 31 20 5c 0a 20 20 53 51 4c 49 54 45  in r1 \.  SQLITE
b830: 5f 52 45 41 44 20 20 20 74 32 20 61 20 20 6d 61  _READ   t2 a  ma
b840: 69 6e 20 72 31 20 5c 0a 20 20 53 51 4c 49 54 45  in r1 \.  SQLITE
b850: 5f 52 45 41 44 20 20 20 74 32 20 62 20 20 6d 61  _READ   t2 b  ma
b860: 69 6e 20 72 31 20 5c 0a 20 20 53 51 4c 49 54 45  in r1 \.  SQLITE
b870: 5f 52 45 41 44 20 20 20 74 32 20 62 20 20 6d 61  _READ   t2 b  ma
b880: 69 6e 20 72 31 20 5c 0a 20 20 53 51 4c 49 54 45  in r1 \.  SQLITE
b890: 5f 52 45 41 44 20 20 20 74 32 20 63 20 20 6d 61  _READ   t2 c  ma
b8a0: 69 6e 20 72 31 20 5c 0a 20 20 53 51 4c 49 54 45  in r1 \.  SQLITE
b8b0: 5f 52 45 41 44 20 20 20 74 32 20 63 20 20 6d 61  _READ   t2 c  ma
b8c0: 69 6e 20 72 31 5d 0a 7d 0a 0a 69 66 63 61 70 61  in r1].}..ifcapa
b8d0: 62 6c 65 20 7b 76 69 65 77 20 26 26 20 74 72 69  ble {view && tri
b8e0: 67 67 65 72 7d 20 7b 0a 64 6f 5f 74 65 73 74 20  gger} {.do_test 
b8f0: 61 75 74 68 2d 34 2e 32 20 7b 0a 20 20 65 78 65  auth-4.2 {.  exe
b900: 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  csql {.    CREAT
b910: 45 20 56 49 45 57 20 76 31 20 41 53 20 53 45 4c  E VIEW v1 AS SEL
b920: 45 43 54 20 61 2b 62 20 41 53 20 78 20 46 52 4f  ECT a+b AS x FRO
b930: 4d 20 74 32 3b 0a 20 20 20 20 43 52 45 41 54 45  M t2;.    CREATE
b940: 20 54 41 42 4c 45 20 76 31 63 68 6e 67 28 78 31   TABLE v1chng(x1
b950: 2c 78 32 29 3b 0a 20 20 20 20 43 52 45 41 54 45  ,x2);.    CREATE
b960: 20 54 52 49 47 47 45 52 20 72 32 20 49 4e 53 54   TRIGGER r2 INST
b970: 45 41 44 20 4f 46 20 55 50 44 41 54 45 20 4f 4e  EAD OF UPDATE ON
b980: 20 76 31 20 42 45 47 49 4e 0a 20 20 20 20 20 20   v1 BEGIN.      
b990: 49 4e 53 45 52 54 20 49 4e 54 4f 20 76 31 63 68  INSERT INTO v1ch
b9a0: 6e 67 20 56 41 4c 55 45 53 28 4f 4c 44 2e 78 2c  ng VALUES(OLD.x,
b9b0: 4e 45 57 2e 78 29 3b 0a 20 20 20 20 45 4e 44 3b  NEW.x);.    END;
b9c0: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
b9d0: 4f 4d 20 76 31 3b 0a 20 20 7d 0a 7d 20 7b 31 31  OM v1;.  }.} {11
b9e0: 35 20 31 31 37 7d 0a 64 6f 5f 74 65 73 74 20 61  5 117}.do_test a
b9f0: 75 74 68 2d 34 2e 33 20 7b 0a 20 20 73 65 74 20  uth-4.3 {.  set 
ba00: 61 75 74 68 61 72 67 73 20 7b 7d 0a 20 20 65 78  authargs {}.  ex
ba10: 65 63 73 71 6c 20 7b 0a 20 20 20 20 55 50 44 41  ecsql {.    UPDA
ba20: 54 45 20 76 31 20 53 45 54 20 78 3d 31 20 57 48  TE v1 SET x=1 WH
ba30: 45 52 45 20 78 3d 31 31 37 0a 20 20 7d 0a 20 20  ERE x=117.  }.  
ba40: 73 65 74 20 61 75 74 68 61 72 67 73 0a 7d 20 5b  set authargs.} [
ba50: 6c 69 73 74 20 5c 0a 20 20 53 51 4c 49 54 45 5f  list \.  SQLITE_
ba60: 55 50 44 41 54 45 20 76 31 20 20 20 20 20 78 20  UPDATE v1     x 
ba70: 20 6d 61 69 6e 20 7b 7d 20 5c 0a 20 20 53 51 4c   main {} \.  SQL
ba80: 49 54 45 5f 52 45 41 44 20 20 20 76 31 20 20 20  ITE_READ   v1   
ba90: 20 20 78 20 20 6d 61 69 6e 20 7b 7d 20 5c 0a 20    x  main {} \. 
baa0: 20 53 51 4c 49 54 45 5f 53 45 4c 45 43 54 20 7b   SQLITE_SELECT {
bab0: 7d 20 20 20 20 20 7b 7d 20 7b 7d 20 20 20 76 31  }     {} {}   v1
bac0: 20 5c 0a 20 20 53 51 4c 49 54 45 5f 52 45 41 44   \.  SQLITE_READ
bad0: 20 20 20 74 32 20 20 20 20 20 61 20 20 6d 61 69     t2     a  mai
bae0: 6e 20 76 31 20 5c 0a 20 20 53 51 4c 49 54 45 5f  n v1 \.  SQLITE_
baf0: 52 45 41 44 20 20 20 74 32 20 20 20 20 20 62 20  READ   t2     b 
bb00: 20 6d 61 69 6e 20 76 31 20 5c 0a 20 20 53 51 4c   main v1 \.  SQL
bb10: 49 54 45 5f 49 4e 53 45 52 54 20 76 31 63 68 6e  ITE_INSERT v1chn
bb20: 67 20 7b 7d 20 6d 61 69 6e 20 72 32 20 5c 0a 20  g {} main r2 \. 
bb30: 20 53 51 4c 49 54 45 5f 52 45 41 44 20 20 20 76   SQLITE_READ   v
bb40: 31 20 20 20 20 20 78 20 20 6d 61 69 6e 20 72 32  1     x  main r2
bb50: 20 5c 0a 20 20 53 51 4c 49 54 45 5f 52 45 41 44   \.  SQLITE_READ
bb60: 20 20 20 76 31 20 20 20 20 20 78 20 20 6d 61 69     v1     x  mai
bb70: 6e 20 72 32 5d 0a 64 6f 5f 74 65 73 74 20 61 75  n r2].do_test au
bb80: 74 68 2d 34 2e 34 20 7b 0a 20 20 65 78 65 63 73  th-4.4 {.  execs
bb90: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
bba0: 54 52 49 47 47 45 52 20 72 33 20 49 4e 53 54 45  TRIGGER r3 INSTE
bbb0: 41 44 20 4f 46 20 44 45 4c 45 54 45 20 4f 4e 20  AD OF DELETE ON 
bbc0: 76 31 20 42 45 47 49 4e 0a 20 20 20 20 20 20 49  v1 BEGIN.      I
bbd0: 4e 53 45 52 54 20 49 4e 54 4f 20 76 31 63 68 6e  NSERT INTO v1chn
bbe0: 67 20 56 41 4c 55 45 53 28 4f 4c 44 2e 78 2c 4e  g VALUES(OLD.x,N
bbf0: 55 4c 4c 29 3b 0a 20 20 20 20 45 4e 44 3b 0a 20  ULL);.    END;. 
bc00: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
bc10: 20 76 31 3b 0a 20 20 7d 0a 7d 20 7b 31 31 35 20   v1;.  }.} {115 
bc20: 31 31 37 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  117}.do_test aut
bc30: 68 2d 34 2e 35 20 7b 0a 20 20 73 65 74 20 61 75  h-4.5 {.  set au
bc40: 74 68 61 72 67 73 20 7b 7d 0a 20 20 65 78 65 63  thargs {}.  exec
bc50: 73 71 6c 20 7b 0a 20 20 20 20 44 45 4c 45 54 45  sql {.    DELETE
bc60: 20 46 52 4f 4d 20 76 31 20 57 48 45 52 45 20 78   FROM v1 WHERE x
bc70: 3d 31 31 37 0a 20 20 7d 0a 20 20 73 65 74 20 61  =117.  }.  set a
bc80: 75 74 68 61 72 67 73 0a 7d 20 5b 6c 69 73 74 20  uthargs.} [list 
bc90: 5c 0a 20 20 53 51 4c 49 54 45 5f 44 45 4c 45 54  \.  SQLITE_DELET
bca0: 45 20 76 31 20 20 20 20 20 7b 7d 20 6d 61 69 6e  E v1     {} main
bcb0: 20 7b 7d 20 5c 0a 20 20 53 51 4c 49 54 45 5f 52   {} \.  SQLITE_R
bcc0: 45 41 44 20 20 20 76 31 20 20 20 20 20 78 20 20  EAD   v1     x  
bcd0: 6d 61 69 6e 20 7b 7d 20 5c 0a 20 20 53 51 4c 49  main {} \.  SQLI
bce0: 54 45 5f 53 45 4c 45 43 54 20 7b 7d 20 20 20 20  TE_SELECT {}    
bcf0: 20 7b 7d 20 7b 7d 20 20 20 76 31 20 5c 0a 20 20   {} {}   v1 \.  
bd00: 53 51 4c 49 54 45 5f 52 45 41 44 20 20 20 74 32  SQLITE_READ   t2
bd10: 20 20 20 20 20 61 20 20 6d 61 69 6e 20 76 31 20       a  main v1 
bd20: 5c 0a 20 20 53 51 4c 49 54 45 5f 52 45 41 44 20  \.  SQLITE_READ 
bd30: 20 20 74 32 20 20 20 20 20 62 20 20 6d 61 69 6e    t2     b  main
bd40: 20 76 31 20 5c 0a 20 20 53 51 4c 49 54 45 5f 49   v1 \.  SQLITE_I
bd50: 4e 53 45 52 54 20 76 31 63 68 6e 67 20 7b 7d 20  NSERT v1chng {} 
bd60: 6d 61 69 6e 20 72 33 20 5c 0a 20 20 53 51 4c 49  main r3 \.  SQLI
bd70: 54 45 5f 52 45 41 44 20 20 20 76 31 20 20 20 20  TE_READ   v1    
bd80: 20 78 20 20 6d 61 69 6e 20 72 33 5d 0a 0a 7d 20   x  main r3]..} 
bd90: 3b 23 20 69 66 63 61 70 61 62 6c 65 20 76 69 65  ;# ifcapable vie
bda0: 77 20 26 26 20 74 72 69 67 67 65 72 0a 0a 66 69  w && trigger..fi
bdb0: 6e 69 73 68 5f 74 65 73 74 0a                    nish_test.