/ Hex Artifact Content
Login

Artifact dee78be1f4f920bd6b15c4c947ce4d01bfe2826d:


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 39 20 32 30 30  h.test,v 1.9 200
0220: 33 2f 30 34 2f 32 35 20 31 37 3a 35 32 3a 31 31  3/04/25 17:52:11
0230: 20 64 72 68 20 45 78 70 20 24 0a 23 0a 0a 73 65   drh Exp $.#..se
0240: 74 20 74 65 73 74 64 69 72 20 5b 66 69 6c 65 20  t testdir [file 
0250: 64 69 72 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a  dirname $argv0].
0260: 73 6f 75 72 63 65 20 24 74 65 73 74 64 69 72 2f  source $testdir/
0270: 74 65 73 74 65 72 2e 74 63 6c 0a 0a 23 20 64 69  tester.tcl..# di
0280: 73 61 62 6c 65 20 74 68 69 73 20 74 65 73 74 20  sable this test 
0290: 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4f 4d  if the SQLITE_OM
02a0: 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e  IT_AUTHORIZATION
02b0: 20 6d 61 63 72 6f 20 69 73 0a 23 20 64 65 66 69   macro is.# defi
02c0: 6e 65 64 20 64 75 72 69 6e 67 20 63 6f 6d 70 69  ned during compi
02d0: 6c 61 74 69 6f 6e 2e 0a 0a 64 6f 5f 74 65 73 74  lation...do_test
02e0: 20 61 75 74 68 2d 31 2e 31 2e 31 20 7b 0a 20 20   auth-1.1.1 {.  
02f0: 64 62 20 63 6c 6f 73 65 0a 20 20 73 65 74 20 3a  db close.  set :
0300: 3a 44 42 20 5b 73 71 6c 69 74 65 20 64 62 20 74  :DB [sqlite db t
0310: 65 73 74 2e 64 62 5d 0a 20 20 70 72 6f 63 20 61  est.db].  proc a
0320: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
0330: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
0340: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
0350: 22 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 22 20  "SQLITE_INSERT" 
0360: 26 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74  && $arg1=="sqlit
0370: 65 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20  e_master"} {.   
0380: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
0390: 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20  _DENY.    }.    
03a0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
03b0: 0a 20 20 7d 0a 20 20 64 62 20 61 75 74 68 6f 72  .  }.  db author
03c0: 69 7a 65 72 20 3a 3a 61 75 74 68 0a 20 20 63 61  izer ::auth.  ca
03d0: 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45 20 54  tchsql {CREATE T
03e0: 41 42 4c 45 20 74 31 28 61 2c 62 2c 63 29 7d 0a  ABLE t1(a,b,c)}.
03f0: 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72  } {1 {not author
0400: 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  ized}}.do_test a
0410: 75 74 68 2d 31 2e 31 2e 32 20 7b 0a 20 20 64 62  uth-1.1.2 {.  db
0420: 20 65 72 72 6f 72 63 6f 64 65 0a 7d 20 7b 32 33   errorcode.} {23
0430: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
0440: 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .2 {.  execsql {
0450: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
0460: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a   sqlite_master}.
0470: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  } {}.do_test aut
0480: 68 2d 31 2e 33 2e 31 20 7b 0a 20 20 70 72 6f 63  h-1.3.1 {.  proc
0490: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
04a0: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
04b0: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
04c0: 3d 3d 22 53 51 4c 49 54 45 5f 43 52 45 41 54 45  =="SQLITE_CREATE
04d0: 5f 54 41 42 4c 45 22 7d 20 7b 0a 20 20 20 20 20  _TABLE"} {.     
04e0: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
04f0: 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67  [list $arg1 $arg
0500: 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20  2 $arg3 $arg4]. 
0510: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
0520: 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20  TE_DENY.    }.  
0530: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
0540: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
0550: 6c 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20  l {CREATE TABLE 
0560: 74 31 28 61 2c 62 2c 63 29 7d 0a 7d 20 7b 31 20  t1(a,b,c)}.} {1 
0570: 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d  {not authorized}
0580: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
0590: 2e 33 2e 32 20 7b 0a 20 20 64 62 20 65 72 72 6f  .3.2 {.  db erro
05a0: 72 63 6f 64 65 0a 7d 20 7b 32 33 7d 0a 64 6f 5f  rcode.} {23}.do_
05b0: 74 65 73 74 20 61 75 74 68 2d 31 2e 33 2e 33 20  test auth-1.3.3 
05c0: 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72  {.  set ::authar
05d0: 67 73 0a 7d 20 7b 74 31 20 7b 7d 20 6d 61 69 6e  gs.} {t1 {} main
05e0: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
05f0: 68 2d 31 2e 34 20 7b 0a 20 20 65 78 65 63 73 71  h-1.4 {.  execsq
0600: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
0610: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
0620: 72 7d 0a 7d 20 7b 7d 0a 0a 64 6f 5f 74 65 73 74  r}.} {}..do_test
0630: 20 61 75 74 68 2d 31 2e 35 20 7b 0a 20 20 70 72   auth-1.5 {.  pr
0640: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
0650: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
0660: 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f  4} {.    if {$co
0670: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 49 4e 53 45  de=="SQLITE_INSE
0680: 52 54 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73  RT" && $arg1=="s
0690: 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
06a0: 72 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75  r"} {.      retu
06b0: 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20  rn SQLITE_DENY. 
06c0: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
06d0: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
06e0: 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45  catchsql {CREATE
06f0: 20 54 45 4d 50 20 54 41 42 4c 45 20 74 31 28 61   TEMP TABLE t1(a
0700: 2c 62 2c 63 29 7d 0a 7d 20 7b 31 20 7b 6e 6f 74  ,b,c)}.} {1 {not
0710: 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f   authorized}}.do
0720: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 36 20 7b  _test auth-1.6 {
0730: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
0740: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
0750: 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d  ite_temp_master}
0760: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 61 75  .} {}.do_test au
0770: 74 68 2d 31 2e 37 2e 31 20 7b 0a 20 20 70 72 6f  th-1.7.1 {.  pro
0780: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
0790: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
07a0: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
07b0: 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52 45 41 54  e=="SQLITE_CREAT
07c0: 45 5f 54 45 4d 50 5f 54 41 42 4c 45 22 7d 20 7b  E_TEMP_TABLE"} {
07d0: 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74  .      set ::aut
07e0: 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67  hargs [list $arg
07f0: 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61  1 $arg2 $arg3 $a
0800: 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72  rg4].      retur
0810: 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20  n SQLITE_DENY.  
0820: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
0830: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
0840: 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45 20  atchsql {CREATE 
0850: 54 45 4d 50 20 54 41 42 4c 45 20 74 31 28 61 2c  TEMP TABLE t1(a,
0860: 62 2c 63 29 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20  b,c)}.} {1 {not 
0870: 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f  authorized}}.do_
0880: 74 65 73 74 20 61 75 74 68 2d 31 2e 37 2e 32 20  test auth-1.7.2 
0890: 7b 0a 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61  {.   set ::autha
08a0: 72 67 73 0a 7d 20 7b 74 31 20 7b 7d 20 74 65 6d  rgs.} {t1 {} tem
08b0: 70 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  p {}}.do_test au
08c0: 74 68 2d 31 2e 38 20 7b 0a 20 20 65 78 65 63 73  th-1.8 {.  execs
08d0: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
08e0: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70  FROM sqlite_temp
08f0: 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 7d 0a 0a 64  _master}.} {}..d
0900: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 39 20  o_test auth-1.9 
0910: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
0920: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
0930: 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69  g3 arg4} {.    i
0940: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
0950: 45 5f 49 4e 53 45 52 54 22 20 26 26 20 24 61 72  E_INSERT" && $ar
0960: 67 31 3d 3d 22 73 71 6c 69 74 65 5f 6d 61 73 74  g1=="sqlite_mast
0970: 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74  er"} {.      ret
0980: 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52  urn SQLITE_IGNOR
0990: 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  E.    }.    retu
09a0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
09b0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45  .  catchsql {CRE
09c0: 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c 62  ATE TABLE t1(a,b
09d0: 2c 63 29 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f  ,c)}.} {0 {}}.do
09e0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 30 20  _test auth-1.10 
09f0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
0a00: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
0a10: 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b  lite_master}.} {
0a20: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
0a30: 2e 31 31 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  .11 {.  proc aut
0a40: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
0a50: 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20  2 arg3 arg4} {. 
0a60: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
0a70: 51 4c 49 54 45 5f 43 52 45 41 54 45 5f 54 41 42  QLITE_CREATE_TAB
0a80: 4c 45 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74  LE"} {.      set
0a90: 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73   ::authargs [lis
0aa0: 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61  t $arg1 $arg2 $a
0ab0: 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20  rg3 $arg4].     
0ac0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49   return SQLITE_I
0ad0: 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20  GNORE.    }.    
0ae0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
0af0: 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20  .  }.  catchsql 
0b00: 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31  {CREATE TABLE t1
0b10: 28 61 2c 62 2c 63 29 7d 0a 7d 20 7b 30 20 7b 7d  (a,b,c)}.} {0 {}
0b20: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
0b30: 2e 31 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .12 {.  execsql 
0b40: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
0b50: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d  M sqlite_master}
0b60: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 61 75  .} {}.do_test au
0b70: 74 68 2d 31 2e 31 33 20 7b 0a 20 20 70 72 6f 63  th-1.13 {.  proc
0b80: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
0b90: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
0ba0: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
0bb0: 3d 3d 22 53 51 4c 49 54 45 5f 49 4e 53 45 52 54  =="SQLITE_INSERT
0bc0: 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71 6c  " && $arg1=="sql
0bd0: 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22  ite_temp_master"
0be0: 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  } {.      return
0bf0: 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20   SQLITE_IGNORE. 
0c00: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
0c10: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
0c20: 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45  catchsql {CREATE
0c30: 20 54 45 4d 50 20 54 41 42 4c 45 20 74 31 28 61   TEMP TABLE t1(a
0c40: 2c 62 2c 63 29 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a  ,b,c)}.} {0 {}}.
0c50: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
0c60: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  4 {.  execsql {S
0c70: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
0c80: 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
0c90: 65 72 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74  er}.} {}.do_test
0ca0: 20 61 75 74 68 2d 31 2e 31 35 20 7b 0a 20 20 70   auth-1.15 {.  p
0cb0: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
0cc0: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
0cd0: 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g4} {.    if {$c
0ce0: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52 45  ode=="SQLITE_CRE
0cf0: 41 54 45 5f 54 45 4d 50 5f 54 41 42 4c 45 22 7d  ATE_TEMP_TABLE"}
0d00: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61   {.      set ::a
0d10: 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61  uthargs [list $a
0d20: 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20  rg1 $arg2 $arg3 
0d30: 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74  $arg4].      ret
0d40: 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52  urn SQLITE_IGNOR
0d50: 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  E.    }.    retu
0d60: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
0d70: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45  .  catchsql {CRE
0d80: 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 74  ATE TEMP TABLE t
0d90: 31 28 61 2c 62 2c 63 29 7d 0a 7d 20 7b 30 20 7b  1(a,b,c)}.} {0 {
0da0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
0db0: 31 2e 31 36 20 7b 0a 20 20 65 78 65 63 73 71 6c  1.16 {.  execsql
0dc0: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
0dd0: 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  OM sqlite_temp_m
0de0: 61 73 74 65 72 7d 0a 7d 20 7b 7d 0a 0a 64 6f 5f  aster}.} {}..do_
0df0: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 37 20 7b  test auth-1.17 {
0e00: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
0e10: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
0e20: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66  3 arg4} {.    if
0e30: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
0e40: 5f 43 52 45 41 54 45 5f 54 41 42 4c 45 22 7d 20  _CREATE_TABLE"} 
0e50: 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75  {.      set ::au
0e60: 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72  thargs [list $ar
0e70: 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24  g1 $arg2 $arg3 $
0e80: 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75  arg4].      retu
0e90: 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20  rn SQLITE_DENY. 
0ea0: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
0eb0: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
0ec0: 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45  catchsql {CREATE
0ed0: 20 54 45 4d 50 20 54 41 42 4c 45 20 74 31 28 61   TEMP TABLE t1(a
0ee0: 2c 62 2c 63 29 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a  ,b,c)}.} {0 {}}.
0ef0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
0f00: 38 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  8 {.  execsql {S
0f10: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
0f20: 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
0f30: 65 72 7d 0a 7d 20 7b 74 31 7d 0a 64 6f 5f 74 65  er}.} {t1}.do_te
0f40: 73 74 20 61 75 74 68 2d 31 2e 31 39 2e 31 20 7b  st auth-1.19.1 {
0f50: 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67  .  set ::autharg
0f60: 73 20 7b 7d 0a 20 20 70 72 6f 63 20 61 75 74 68  s {}.  proc auth
0f70: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
0f80: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
0f90: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
0fa0: 4c 49 54 45 5f 43 52 45 41 54 45 5f 54 45 4d 50  LITE_CREATE_TEMP
0fb0: 5f 54 41 42 4c 45 22 7d 20 7b 0a 20 20 20 20 20  _TABLE"} {.     
0fc0: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
0fd0: 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67  [list $arg1 $arg
0fe0: 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20  2 $arg3 $arg4]. 
0ff0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
1000: 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20  TE_DENY.    }.  
1010: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
1020: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
1030: 6c 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20  l {CREATE TABLE 
1040: 74 32 28 61 2c 62 2c 63 29 7d 0a 7d 20 7b 30 20  t2(a,b,c)}.} {0 
1050: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
1060: 2d 31 2e 31 39 2e 32 20 7b 0a 20 20 73 65 74 20  -1.19.2 {.  set 
1070: 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 7d 0a  ::authargs.} {}.
1080: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
1090: 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  0 {.  execsql {S
10a0: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
10b0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d  sqlite_master}.}
10c0: 20 7b 74 32 7d 0a 0a 64 6f 5f 74 65 73 74 20 61   {t2}..do_test a
10d0: 75 74 68 2d 31 2e 32 31 2e 31 20 7b 0a 20 20 70  uth-1.21.1 {.  p
10e0: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
10f0: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
1100: 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g4} {.    if {$c
1110: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f  ode=="SQLITE_DRO
1120: 50 5f 54 41 42 4c 45 22 7d 20 7b 0a 20 20 20 20  P_TABLE"} {.    
1130: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
1140: 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72   [list $arg1 $ar
1150: 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a  g2 $arg3 $arg4].
1160: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
1170: 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20  ITE_DENY.    }. 
1180: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
1190: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
11a0: 71 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45 20 74  ql {DROP TABLE t
11b0: 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74  2}.} {1 {not aut
11c0: 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73  horized}}.do_tes
11d0: 74 20 61 75 74 68 2d 31 2e 32 31 2e 32 20 7b 0a  t auth-1.21.2 {.
11e0: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
11f0: 0a 7d 20 7b 74 32 20 7b 7d 20 6d 61 69 6e 20 7b  .} {t2 {} main {
1200: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
1210: 31 2e 32 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  1.22 {.  execsql
1220: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
1230: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
1240: 7d 0a 7d 20 7b 74 32 7d 0a 64 6f 5f 74 65 73 74  }.} {t2}.do_test
1250: 20 61 75 74 68 2d 31 2e 32 33 2e 31 20 7b 0a 20   auth-1.23.1 {. 
1260: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
1270: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
1280: 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg4} {.    if {
1290: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44  $code=="SQLITE_D
12a0: 52 4f 50 5f 54 41 42 4c 45 22 7d 20 7b 0a 20 20  ROP_TABLE"} {.  
12b0: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
12c0: 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24  gs [list $arg1 $
12d0: 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34  arg2 $arg3 $arg4
12e0: 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  ].      return S
12f0: 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20  QLITE_IGNORE.   
1300: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
1310: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
1320: 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54 41 42  tchsql {DROP TAB
1330: 4c 45 20 74 32 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a  LE t2}.} {0 {}}.
1340: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
1350: 33 2e 32 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75  3.2 {.  set ::au
1360: 74 68 61 72 67 73 0a 7d 20 7b 74 32 20 7b 7d 20  thargs.} {t2 {} 
1370: 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  main {}}.do_test
1380: 20 61 75 74 68 2d 31 2e 32 34 20 7b 0a 20 20 65   auth-1.24 {.  e
1390: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
13a0: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
13b0: 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a 0a  master}.} {t2}..
13c0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
13d0: 35 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  5 {.  proc auth 
13e0: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
13f0: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
1400: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
1410: 49 54 45 5f 44 52 4f 50 5f 54 45 4d 50 5f 54 41  ITE_DROP_TEMP_TA
1420: 42 4c 45 22 7d 20 7b 0a 20 20 20 20 20 20 73 65  BLE"} {.      se
1430: 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69  t ::authargs [li
1440: 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24  st $arg1 $arg2 $
1450: 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20  arg3 $arg4].    
1460: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
1470: 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72  DENY.    }.    r
1480: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
1490: 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b    }.  catchsql {
14a0: 44 52 4f 50 20 54 41 42 4c 45 20 74 31 7d 0a 7d  DROP TABLE t1}.}
14b0: 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69   {1 {not authori
14c0: 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  zed}}.do_test au
14d0: 74 68 2d 31 2e 32 36 20 7b 0a 20 20 65 78 65 63  th-1.26 {.  exec
14e0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
14f0: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d   FROM sqlite_tem
1500: 70 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31 7d  p_master}.} {t1}
1510: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
1520: 32 37 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  27 {.  proc auth
1530: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
1540: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
1550: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
1560: 4c 49 54 45 5f 44 52 4f 50 5f 54 45 4d 50 5f 54  LITE_DROP_TEMP_T
1570: 41 42 4c 45 22 7d 20 7b 0a 20 20 20 20 20 20 73  ABLE"} {.      s
1580: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c  et ::authargs [l
1590: 69 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20  ist $arg1 $arg2 
15a0: 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20  $arg3 $arg4].   
15b0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
15c0: 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20  _IGNORE.    }.  
15d0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
15e0: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
15f0: 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45 20 74 31  l {DROP TABLE t1
1600: 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  }.} {0 {}}.do_te
1610: 73 74 20 61 75 74 68 2d 31 2e 32 38 20 7b 0a 20  st auth-1.28 {. 
1620: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
1630: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
1640: 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d  e_temp_master}.}
1650: 20 7b 74 31 7d 0a 0a 64 6f 5f 74 65 73 74 20 61   {t1}..do_test a
1660: 75 74 68 2d 31 2e 32 39 20 7b 0a 20 20 70 72 6f  uth-1.29 {.  pro
1670: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
1680: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
1690: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
16a0: 65 3d 3d 22 53 51 4c 49 54 45 5f 49 4e 53 45 52  e=="SQLITE_INSER
16b0: 54 22 20 26 26 20 24 61 72 67 31 3d 3d 22 74 32  T" && $arg1=="t2
16c0: 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72  "} {.      retur
16d0: 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20  n SQLITE_DENY.  
16e0: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
16f0: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
1700: 61 74 63 68 73 71 6c 20 7b 49 4e 53 45 52 54 20  atchsql {INSERT 
1710: 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 31  INTO t2 VALUES(1
1720: 2c 32 2c 33 29 7d 0a 7d 20 7b 31 20 7b 6e 6f 74  ,2,3)}.} {1 {not
1730: 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f   authorized}}.do
1740: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 33 30 20  _test auth-1.30 
1750: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
1760: 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d 0a 7d  ECT * FROM t2}.}
1770: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68   {}.do_test auth
1780: 2d 31 2e 33 31 20 7b 0a 20 20 70 72 6f 63 20 61  -1.31 {.  proc a
1790: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
17a0: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
17b0: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
17c0: 22 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 22 20  "SQLITE_INSERT" 
17d0: 26 26 20 24 61 72 67 31 3d 3d 22 74 32 22 7d 20  && $arg1=="t2"} 
17e0: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  {.      return S
17f0: 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20  QLITE_IGNORE.   
1800: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
1810: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
1820: 74 63 68 73 71 6c 20 7b 49 4e 53 45 52 54 20 49  tchsql {INSERT I
1830: 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 31 2c  NTO t2 VALUES(1,
1840: 32 2c 33 29 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  2,3)}.} {0 {}}.d
1850: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 33 32  o_test auth-1.32
1860: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
1870: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d 0a  LECT * FROM t2}.
1880: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  } {}.do_test aut
1890: 68 2d 31 2e 33 33 20 7b 0a 20 20 70 72 6f 63 20  h-1.33 {.  proc 
18a0: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
18b0: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
18c0: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
18d0: 3d 22 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 22  ="SQLITE_INSERT"
18e0: 20 26 26 20 24 61 72 67 31 3d 3d 22 74 31 22 7d   && $arg1=="t1"}
18f0: 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   {.      return 
1900: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20  SQLITE_IGNORE.  
1910: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
1920: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
1930: 61 74 63 68 73 71 6c 20 7b 49 4e 53 45 52 54 20  atchsql {INSERT 
1940: 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 31  INTO t2 VALUES(1
1950: 2c 32 2c 33 29 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a  ,2,3)}.} {0 {}}.
1960: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 33  do_test auth-1.3
1970: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  4 {.  execsql {S
1980: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d  ELECT * FROM t2}
1990: 0a 7d 20 7b 31 20 32 20 33 7d 0a 0a 64 6f 5f 74  .} {1 2 3}..do_t
19a0: 65 73 74 20 61 75 74 68 2d 31 2e 33 35 20 7b 0a  est auth-1.35 {.
19b0: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
19c0: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
19d0: 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20   arg4} {.    if 
19e0: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
19f0: 52 45 41 44 22 20 26 26 20 24 61 72 67 31 3d 3d  READ" && $arg1==
1a00: 22 74 32 22 20 26 26 20 24 61 72 67 32 3d 3d 22  "t2" && $arg2=="
1a10: 62 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75  b"} {.      retu
1a20: 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20  rn SQLITE_DENY. 
1a30: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
1a40: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
1a50: 63 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54  catchsql {SELECT
1a60: 20 2a 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31   * FROM t2}.} {1
1a70: 20 7b 61 63 63 65 73 73 20 74 6f 20 74 32 2e 62   {access to t2.b
1a80: 20 69 73 20 70 72 6f 68 69 62 69 74 65 64 7d 7d   is prohibited}}
1a90: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
1aa0: 33 36 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  36 {.  proc auth
1ab0: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
1ac0: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
1ad0: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
1ae0: 4c 49 54 45 5f 52 45 41 44 22 20 26 26 20 24 61  LITE_READ" && $a
1af0: 72 67 31 3d 3d 22 74 32 22 20 26 26 20 24 61 72  rg1=="t2" && $ar
1b00: 67 32 3d 3d 22 62 22 7d 20 7b 0a 20 20 20 20 20  g2=="b"} {.     
1b10: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49   return SQLITE_I
1b20: 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20  GNORE.    }.    
1b30: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
1b40: 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20  .  }.  catchsql 
1b50: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
1b60: 32 7d 0a 7d 20 7b 30 20 7b 31 20 7b 7d 20 33 7d  2}.} {0 {1 {} 3}
1b70: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
1b80: 2e 33 37 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  .37 {.  proc aut
1b90: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
1ba0: 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20  2 arg3 arg4} {. 
1bb0: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
1bc0: 51 4c 49 54 45 5f 52 45 41 44 22 20 26 26 20 24  QLITE_READ" && $
1bd0: 61 72 67 31 3d 3d 22 74 32 22 20 26 26 20 24 61  arg1=="t2" && $a
1be0: 72 67 32 3d 3d 22 62 22 7d 20 7b 0a 20 20 20 20  rg2=="b"} {.    
1bf0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
1c00: 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20  IGNORE.    }.   
1c10: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
1c20: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
1c30: 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   {SELECT * FROM 
1c40: 74 32 20 57 48 45 52 45 20 62 3d 32 7d 0a 7d 20  t2 WHERE b=2}.} 
1c50: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  {0 {}}.do_test a
1c60: 75 74 68 2d 31 2e 33 38 20 7b 0a 20 20 70 72 6f  uth-1.38 {.  pro
1c70: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
1c80: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
1c90: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
1ca0: 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45 41 44 22  e=="SQLITE_READ"
1cb0: 20 26 26 20 24 61 72 67 31 3d 3d 22 74 32 22 20   && $arg1=="t2" 
1cc0: 26 26 20 24 61 72 67 32 3d 3d 22 61 22 7d 20 7b  && $arg2=="a"} {
1cd0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
1ce0: 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20  LITE_IGNORE.    
1cf0: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
1d00: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
1d10: 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20  chsql {SELECT * 
1d20: 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20 62 3d  FROM t2 WHERE b=
1d30: 32 7d 0a 7d 20 7b 30 20 7b 7b 7d 20 32 20 33 7d  2}.} {0 {{} 2 3}
1d40: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
1d50: 2e 33 39 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  .39 {.  proc aut
1d60: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
1d70: 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20  2 arg3 arg4} {. 
1d80: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
1d90: 51 4c 49 54 45 5f 52 45 41 44 22 20 26 26 20 24  QLITE_READ" && $
1da0: 61 72 67 31 3d 3d 22 74 32 22 20 26 26 20 24 61  arg1=="t2" && $a
1db0: 72 67 32 3d 3d 22 62 22 7d 20 7b 0a 20 20 20 20  rg2=="b"} {.    
1dc0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
1dd0: 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20  IGNORE.    }.   
1de0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
1df0: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
1e00: 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   {SELECT * FROM 
1e10: 74 32 20 57 48 45 52 45 20 62 20 49 53 20 4e 55  t2 WHERE b IS NU
1e20: 4c 4c 7d 0a 7d 20 7b 30 20 7b 31 20 7b 7d 20 33  LL}.} {0 {1 {} 3
1e30: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
1e40: 31 2e 34 30 20 7b 0a 20 20 70 72 6f 63 20 61 75  1.40 {.  proc au
1e50: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
1e60: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
1e70: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
1e80: 53 51 4c 49 54 45 5f 52 45 41 44 22 20 26 26 20  SQLITE_READ" && 
1e90: 24 61 72 67 31 3d 3d 22 74 32 22 20 26 26 20 24  $arg1=="t2" && $
1ea0: 61 72 67 32 3d 3d 22 62 22 7d 20 7b 0a 20 20 20  arg2=="b"} {.   
1eb0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
1ec0: 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20  _DENY.    }.    
1ed0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
1ee0: 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20  .  }.  catchsql 
1ef0: 7b 53 45 4c 45 43 54 20 61 2c 63 20 46 52 4f 4d  {SELECT a,c FROM
1f00: 20 74 32 20 57 48 45 52 45 20 62 20 49 53 20 4e   t2 WHERE b IS N
1f10: 55 4c 4c 7d 0a 7d 20 7b 31 20 7b 61 63 63 65 73  ULL}.} {1 {acces
1f20: 73 20 74 6f 20 74 32 2e 62 20 69 73 20 70 72 6f  s to t2.b is pro
1f30: 68 69 62 69 74 65 64 7d 7d 0a 20 20 0a 64 6f 5f  hibited}}.  .do_
1f40: 74 65 73 74 20 61 75 74 68 2d 31 2e 34 31 20 7b  test auth-1.41 {
1f50: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
1f60: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
1f70: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66  3 arg4} {.    if
1f80: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
1f90: 5f 55 50 44 41 54 45 22 20 26 26 20 24 61 72 67  _UPDATE" && $arg
1fa0: 31 3d 3d 22 74 32 22 20 26 26 20 24 61 72 67 32  1=="t2" && $arg2
1fb0: 3d 3d 22 62 22 7d 20 7b 0a 20 20 20 20 20 20 72  =="b"} {.      r
1fc0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e  eturn SQLITE_DEN
1fd0: 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  Y.    }.    retu
1fe0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
1ff0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 55 50 44  .  catchsql {UPD
2000: 41 54 45 20 74 32 20 53 45 54 20 61 3d 31 31 7d  ATE t2 SET a=11}
2010: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
2020: 74 20 61 75 74 68 2d 31 2e 34 32 20 7b 0a 20 20  t auth-1.42 {.  
2030: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
2040: 2a 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31 31  * FROM t2}.} {11
2050: 20 32 20 33 7d 0a 64 6f 5f 74 65 73 74 20 61 75   2 3}.do_test au
2060: 74 68 2d 31 2e 34 33 20 7b 0a 20 20 70 72 6f 63  th-1.43 {.  proc
2070: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
2080: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
2090: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
20a0: 3d 3d 22 53 51 4c 49 54 45 5f 55 50 44 41 54 45  =="SQLITE_UPDATE
20b0: 22 20 26 26 20 24 61 72 67 31 3d 3d 22 74 32 22  " && $arg1=="t2"
20c0: 20 26 26 20 24 61 72 67 32 3d 3d 22 62 22 7d 20   && $arg2=="b"} 
20d0: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  {.      return S
20e0: 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d  QLITE_DENY.    }
20f0: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
2100: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
2110: 68 73 71 6c 20 7b 55 50 44 41 54 45 20 74 32 20  hsql {UPDATE t2 
2120: 53 45 54 20 62 3d 32 32 2c 20 63 3d 33 33 7d 0a  SET b=22, c=33}.
2130: 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72  } {1 {not author
2140: 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  ized}}.do_test a
2150: 75 74 68 2d 31 2e 34 34 20 7b 0a 20 20 65 78 65  uth-1.44 {.  exe
2160: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46  csql {SELECT * F
2170: 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31 31 20 32 20  ROM t2}.} {11 2 
2180: 33 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  3}.do_test auth-
2190: 31 2e 34 35 20 7b 0a 20 20 70 72 6f 63 20 61 75  1.45 {.  proc au
21a0: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
21b0: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
21c0: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
21d0: 53 51 4c 49 54 45 5f 55 50 44 41 54 45 22 20 26  SQLITE_UPDATE" &
21e0: 26 20 24 61 72 67 31 3d 3d 22 74 32 22 20 26 26  & $arg1=="t2" &&
21f0: 20 24 61 72 67 32 3d 3d 22 62 22 7d 20 7b 0a 20   $arg2=="b"} {. 
2200: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
2210: 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a  TE_IGNORE.    }.
2220: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
2230: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
2240: 73 71 6c 20 7b 55 50 44 41 54 45 20 74 32 20 53  sql {UPDATE t2 S
2250: 45 54 20 62 3d 32 32 2c 20 63 3d 33 33 7d 0a 7d  ET b=22, c=33}.}
2260: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
2270: 61 75 74 68 2d 31 2e 34 36 20 7b 0a 20 20 65 78  auth-1.46 {.  ex
2280: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20  ecsql {SELECT * 
2290: 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31 31 20 32  FROM t2}.} {11 2
22a0: 20 33 33 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 75   33}..do_test au
22b0: 74 68 2d 31 2e 34 37 20 7b 0a 20 20 70 72 6f 63  th-1.47 {.  proc
22c0: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
22d0: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
22e0: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
22f0: 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45 54 45  =="SQLITE_DELETE
2300: 22 20 26 26 20 24 61 72 67 31 3d 3d 22 74 32 22  " && $arg1=="t2"
2310: 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  } {.      return
2320: 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20   SQLITE_DENY.   
2330: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
2340: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
2350: 74 63 68 73 71 6c 20 7b 44 45 4c 45 54 45 20 46  tchsql {DELETE F
2360: 52 4f 4d 20 74 32 20 57 48 45 52 45 20 61 3d 31  ROM t2 WHERE a=1
2370: 31 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74  1}.} {1 {not aut
2380: 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73  horized}}.do_tes
2390: 74 20 61 75 74 68 2d 31 2e 34 38 20 7b 0a 20 20  t auth-1.48 {.  
23a0: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
23b0: 2a 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31 31  * FROM t2}.} {11
23c0: 20 32 20 33 33 7d 0a 64 6f 5f 74 65 73 74 20 61   2 33}.do_test a
23d0: 75 74 68 2d 31 2e 34 39 20 7b 0a 20 20 70 72 6f  uth-1.49 {.  pro
23e0: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
23f0: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
2400: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
2410: 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45 54  e=="SQLITE_DELET
2420: 45 22 20 26 26 20 24 61 72 67 31 3d 3d 22 74 32  E" && $arg1=="t2
2430: 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72  "} {.      retur
2440: 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a  n SQLITE_IGNORE.
2450: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
2460: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
2470: 20 63 61 74 63 68 73 71 6c 20 7b 44 45 4c 45 54   catchsql {DELET
2480: 45 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20  E FROM t2 WHERE 
2490: 61 3d 31 31 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  a=11}.} {0 {}}.d
24a0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 35 30  o_test auth-1.50
24b0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
24c0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d 0a  LECT * FROM t2}.
24d0: 7d 20 7b 31 31 20 32 20 33 33 7d 0a 0a 64 6f 5f  } {11 2 33}..do_
24e0: 74 65 73 74 20 61 75 74 68 2d 31 2e 35 31 20 7b  test auth-1.51 {
24f0: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
2500: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
2510: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66  3 arg4} {.    if
2520: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
2530: 5f 53 45 4c 45 43 54 22 7d 20 7b 0a 20 20 20 20  _SELECT"} {.    
2540: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
2550: 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72  DENY.    }.    r
2560: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
2570: 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b    }.  catchsql {
2580: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32  SELECT * FROM t2
2590: 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68  }.} {1 {not auth
25a0: 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74  orized}}.do_test
25b0: 20 61 75 74 68 2d 31 2e 35 32 20 7b 0a 20 20 70   auth-1.52 {.  p
25c0: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
25d0: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
25e0: 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g4} {.    if {$c
25f0: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 53 45 4c  ode=="SQLITE_SEL
2600: 45 43 54 22 7d 20 7b 0a 20 20 20 20 20 20 72 65  ECT"} {.      re
2610: 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f  turn SQLITE_IGNO
2620: 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  RE.    }.    ret
2630: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
2640: 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 53 45  }.  catchsql {SE
2650: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d 0a  LECT * FROM t2}.
2660: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
2670: 20 61 75 74 68 2d 31 2e 35 33 20 7b 0a 20 20 70   auth-1.53 {.  p
2680: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
2690: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
26a0: 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g4} {.    if {$c
26b0: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 53 45 4c  ode=="SQLITE_SEL
26c0: 45 43 54 22 7d 20 7b 0a 20 20 20 20 20 20 72 65  ECT"} {.      re
26d0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
26e0: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
26f0: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
2700: 63 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54  catchsql {SELECT
2710: 20 2a 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 30   * FROM t2}.} {0
2720: 20 7b 31 31 20 32 20 33 33 7d 7d 0a 0a 73 65 74   {11 2 33}}..set
2730: 20 66 20 5b 6f 70 65 6e 20 64 61 74 61 31 2e 74   f [open data1.t
2740: 78 74 20 77 5d 0a 70 75 74 73 20 24 66 20 22 37  xt w].puts $f "7
2750: 3a 38 3a 39 22 0a 63 6c 6f 73 65 20 24 66 0a 64  :8:9".close $f.d
2760: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 35 34  o_test auth-1.54
2770: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
2780: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
2790: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
27a0: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
27b0: 54 45 5f 43 4f 50 59 22 7d 20 7b 0a 20 20 20 20  TE_COPY"} {.    
27c0: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
27d0: 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72   [list $arg1 $ar
27e0: 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a  g2 $arg3 $arg4].
27f0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
2800: 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20  ITE_DENY.    }. 
2810: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
2820: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
2830: 71 6c 20 7b 43 4f 50 59 20 74 32 20 46 52 4f 4d  ql {COPY t2 FROM
2840: 20 27 64 61 74 61 31 2e 74 78 74 27 20 55 53 49   'data1.txt' USI
2850: 4e 47 20 44 45 4c 49 4d 49 54 45 52 53 20 27 3a  NG DELIMITERS ':
2860: 27 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74  '}.} {1 {not aut
2870: 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73  horized}}.do_tes
2880: 74 20 61 75 74 68 2d 31 2e 35 35 20 7b 0a 20 20  t auth-1.55 {.  
2890: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d  set ::authargs.}
28a0: 20 7b 74 32 20 64 61 74 61 31 2e 74 78 74 20 6d   {t2 data1.txt m
28b0: 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20  ain {}}.do_test 
28c0: 61 75 74 68 2d 31 2e 35 36 20 7b 0a 20 20 65 78  auth-1.56 {.  ex
28d0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20  ecsql {SELECT * 
28e0: 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31 31 20 32  FROM t2}.} {11 2
28f0: 20 33 33 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   33}.do_test aut
2900: 68 2d 31 2e 35 37 20 7b 0a 20 20 70 72 6f 63 20  h-1.57 {.  proc 
2910: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
2920: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
2930: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
2940: 3d 22 53 51 4c 49 54 45 5f 43 4f 50 59 22 7d 20  ="SQLITE_COPY"} 
2950: 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75  {.      set ::au
2960: 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72  thargs [list $ar
2970: 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24  g1 $arg2 $arg3 $
2980: 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75  arg4].      retu
2990: 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45  rn SQLITE_IGNORE
29a0: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
29b0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
29c0: 20 20 63 61 74 63 68 73 71 6c 20 7b 43 4f 50 59    catchsql {COPY
29d0: 20 74 32 20 46 52 4f 4d 20 27 64 61 74 61 31 2e   t2 FROM 'data1.
29e0: 74 78 74 27 20 55 53 49 4e 47 20 44 45 4c 49 4d  txt' USING DELIM
29f0: 49 54 45 52 53 20 27 3a 27 7d 0a 7d 20 7b 30 20  ITERS ':'}.} {0 
2a00: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
2a10: 2d 31 2e 35 38 20 7b 0a 20 20 73 65 74 20 3a 3a  -1.58 {.  set ::
2a20: 61 75 74 68 61 72 67 73 0a 7d 20 7b 74 32 20 64  authargs.} {t2 d
2a30: 61 74 61 31 2e 74 78 74 20 6d 61 69 6e 20 7b 7d  ata1.txt main {}
2a40: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
2a50: 2e 35 39 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .59 {.  execsql 
2a60: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
2a70: 32 7d 0a 7d 20 7b 31 31 20 32 20 33 33 7d 0a 64  2}.} {11 2 33}.d
2a80: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 36 30  o_test auth-1.60
2a90: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
2aa0: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
2ab0: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
2ac0: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
2ad0: 54 45 5f 43 4f 50 59 22 7d 20 7b 0a 20 20 20 20  TE_COPY"} {.    
2ae0: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
2af0: 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72   [list $arg1 $ar
2b00: 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a  g2 $arg3 $arg4].
2b10: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
2b20: 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20  ITE_OK.    }.   
2b30: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
2b40: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
2b50: 20 7b 43 4f 50 59 20 74 32 20 46 52 4f 4d 20 27   {COPY t2 FROM '
2b60: 64 61 74 61 31 2e 74 78 74 27 20 55 53 49 4e 47  data1.txt' USING
2b70: 20 44 45 4c 49 4d 49 54 45 52 53 20 27 3a 27 7d   DELIMITERS ':'}
2b80: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
2b90: 74 20 61 75 74 68 2d 31 2e 36 31 20 7b 0a 20 20  t auth-1.61 {.  
2ba0: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d  set ::authargs.}
2bb0: 20 7b 74 32 20 64 61 74 61 31 2e 74 78 74 20 6d   {t2 data1.txt m
2bc0: 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20  ain {}}.do_test 
2bd0: 61 75 74 68 2d 31 2e 36 32 20 7b 0a 20 20 65 78  auth-1.62 {.  ex
2be0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20  ecsql {SELECT * 
2bf0: 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31 31 20 32  FROM t2}.} {11 2
2c00: 20 33 33 20 37 20 38 20 39 7d 0a 0a 64 6f 5f 74   33 7 8 9}..do_t
2c10: 65 73 74 20 61 75 74 68 2d 31 2e 36 33 20 7b 0a  est auth-1.63 {.
2c20: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
2c30: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
2c40: 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20   arg4} {.    if 
2c50: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
2c60: 44 45 4c 45 54 45 22 20 26 26 20 24 61 72 67 31  DELETE" && $arg1
2c70: 3d 3d 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  =="sqlite_master
2c80: 22 7d 20 7b 0a 20 20 20 20 20 20 20 72 65 74 75  "} {.       retu
2c90: 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20  rn SQLITE_DENY. 
2ca0: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
2cb0: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
2cc0: 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54  catchsql {DROP T
2cd0: 41 42 4c 45 20 74 32 7d 0a 7d 20 7b 31 20 7b 6e  ABLE t2}.} {1 {n
2ce0: 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a  ot authorized}}.
2cf0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 36  do_test auth-1.6
2d00: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  4 {.  execsql {S
2d10: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
2d20: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d  sqlite_master}.}
2d30: 20 7b 74 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75   {t2}.do_test au
2d40: 74 68 2d 31 2e 36 35 20 7b 0a 20 20 70 72 6f 63  th-1.65 {.  proc
2d50: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
2d60: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
2d70: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
2d80: 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45 54 45  =="SQLITE_DELETE
2d90: 22 20 26 26 20 24 61 72 67 31 3d 3d 22 74 32 22  " && $arg1=="t2"
2da0: 7d 20 7b 0a 20 20 20 20 20 20 20 72 65 74 75 72  } {.       retur
2db0: 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20  n SQLITE_DENY.  
2dc0: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
2dd0: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
2de0: 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54 41  atchsql {DROP TA
2df0: 42 4c 45 20 74 32 7d 0a 7d 20 7b 31 20 7b 6e 6f  BLE t2}.} {1 {no
2e00: 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64  t authorized}}.d
2e10: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 36 36  o_test auth-1.66
2e20: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
2e30: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73  LECT name FROM s
2e40: 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20  qlite_master}.} 
2e50: 7b 74 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  {t2}.do_test aut
2e60: 68 2d 31 2e 36 37 20 7b 0a 20 20 70 72 6f 63 20  h-1.67 {.  proc 
2e70: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
2e80: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
2e90: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
2ea0: 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 22  ="SQLITE_DELETE"
2eb0: 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69   && $arg1=="sqli
2ec0: 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 7d  te_temp_master"}
2ed0: 20 7b 0a 20 20 20 20 20 20 20 72 65 74 75 72 6e   {.       return
2ee0: 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20   SQLITE_DENY.   
2ef0: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
2f00: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
2f10: 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54 41 42  tchsql {DROP TAB
2f20: 4c 45 20 74 31 7d 0a 7d 20 7b 31 20 7b 6e 6f 74  LE t1}.} {1 {not
2f30: 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f   authorized}}.do
2f40: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 36 38 20  _test auth-1.68 
2f50: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
2f60: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
2f70: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
2f80: 7d 0a 7d 20 7b 74 31 7d 0a 64 6f 5f 74 65 73 74  }.} {t1}.do_test
2f90: 20 61 75 74 68 2d 31 2e 36 39 20 7b 0a 20 20 70   auth-1.69 {.  p
2fa0: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
2fb0: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
2fc0: 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g4} {.    if {$c
2fd0: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c  ode=="SQLITE_DEL
2fe0: 45 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d 22  ETE" && $arg1=="
2ff0: 74 31 22 7d 20 7b 0a 20 20 20 20 20 20 20 72 65  t1"} {.       re
3000: 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59  turn SQLITE_DENY
3010: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
3020: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
3030: 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50    catchsql {DROP
3040: 20 54 41 42 4c 45 20 74 31 7d 0a 7d 20 7b 31 20   TABLE t1}.} {1 
3050: 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d  {not authorized}
3060: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
3070: 2e 37 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .70 {.  execsql 
3080: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
3090: 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  M sqlite_temp_ma
30a0: 73 74 65 72 7d 0a 7d 20 7b 74 31 7d 0a 0a 64 6f  ster}.} {t1}..do
30b0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 37 31 20  _test auth-1.71 
30c0: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
30d0: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
30e0: 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69  g3 arg4} {.    i
30f0: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
3100: 45 5f 44 45 4c 45 54 45 22 20 26 26 20 24 61 72  E_DELETE" && $ar
3110: 67 31 3d 3d 22 73 71 6c 69 74 65 5f 6d 61 73 74  g1=="sqlite_mast
3120: 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 20 72 65  er"} {.       re
3130: 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f  turn SQLITE_IGNO
3140: 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  RE.    }.    ret
3150: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
3160: 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52  }.  catchsql {DR
3170: 4f 50 20 54 41 42 4c 45 20 74 32 7d 0a 7d 20 7b  OP TABLE t2}.} {
3180: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  0 {}}.do_test au
3190: 74 68 2d 31 2e 37 32 20 7b 0a 20 20 65 78 65 63  th-1.72 {.  exec
31a0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
31b0: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
31c0: 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a 64 6f 5f 74  ter}.} {t2}.do_t
31d0: 65 73 74 20 61 75 74 68 2d 31 2e 37 33 20 7b 0a  est auth-1.73 {.
31e0: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
31f0: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
3200: 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20   arg4} {.    if 
3210: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
3220: 44 45 4c 45 54 45 22 20 26 26 20 24 61 72 67 31  DELETE" && $arg1
3230: 3d 3d 22 74 32 22 7d 20 7b 0a 20 20 20 20 20 20  =="t2"} {.      
3240: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49   return SQLITE_I
3250: 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20  GNORE.    }.    
3260: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
3270: 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20  .  }.  catchsql 
3280: 7b 44 52 4f 50 20 54 41 42 4c 45 20 74 32 7d 0a  {DROP TABLE t2}.
3290: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
32a0: 20 61 75 74 68 2d 31 2e 37 34 20 7b 0a 20 20 65   auth-1.74 {.  e
32b0: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
32c0: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
32d0: 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a 64  master}.} {t2}.d
32e0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 37 35  o_test auth-1.75
32f0: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
3300: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
3310: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
3320: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
3330: 54 45 5f 44 45 4c 45 54 45 22 20 26 26 20 24 61  TE_DELETE" && $a
3340: 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 74 65 6d  rg1=="sqlite_tem
3350: 70 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20  p_master"} {.   
3360: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
3370: 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20  E_IGNORE.    }. 
3380: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
3390: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
33a0: 71 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45 20 74  ql {DROP TABLE t
33b0: 31 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74  1}.} {0 {}}.do_t
33c0: 65 73 74 20 61 75 74 68 2d 31 2e 37 36 20 7b 0a  est auth-1.76 {.
33d0: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
33e0: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
33f0: 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a  te_temp_master}.
3400: 7d 20 7b 74 31 7d 0a 64 6f 5f 74 65 73 74 20 61  } {t1}.do_test a
3410: 75 74 68 2d 31 2e 37 37 20 7b 0a 20 20 70 72 6f  uth-1.77 {.  pro
3420: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
3430: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
3440: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
3450: 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45 54  e=="SQLITE_DELET
3460: 45 22 20 26 26 20 24 61 72 67 31 3d 3d 22 74 31  E" && $arg1=="t1
3470: 22 7d 20 7b 0a 20 20 20 20 20 20 20 72 65 74 75  "} {.       retu
3480: 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45  rn SQLITE_IGNORE
3490: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
34a0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
34b0: 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50    catchsql {DROP
34c0: 20 54 41 42 4c 45 20 74 31 7d 0a 7d 20 7b 30 20   TABLE t1}.} {0 
34d0: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
34e0: 2d 31 2e 37 38 20 7b 0a 20 20 65 78 65 63 73 71  -1.78 {.  execsq
34f0: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
3500: 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f  ROM sqlite_temp_
3510: 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31 7d 0a 0a  master}.} {t1}..
3520: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 37  do_test auth-1.7
3530: 39 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  9 {.  proc auth 
3540: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
3550: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
3560: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
3570: 49 54 45 5f 43 52 45 41 54 45 5f 56 49 45 57 22  ITE_CREATE_VIEW"
3580: 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a  } {.      set ::
3590: 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24  authargs [list $
35a0: 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33  arg1 $arg2 $arg3
35b0: 20 24 61 72 67 34 5d 20 0a 20 20 20 20 20 20 72   $arg4] .      r
35c0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e  eturn SQLITE_DEN
35d0: 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  Y.    }.    retu
35e0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
35f0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45  .  catchsql {CRE
3600: 41 54 45 20 56 49 45 57 20 76 31 20 41 53 20 53  ATE VIEW v1 AS S
3610: 45 4c 45 43 54 20 61 2b 31 2c 62 2b 31 20 46 52  ELECT a+1,b+1 FR
3620: 4f 4d 20 74 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74  OM t2}.} {1 {not
3630: 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f   authorized}}.do
3640: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 38 30 20  _test auth-1.80 
3650: 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72  {.  set ::authar
3660: 67 73 0a 7d 20 7b 76 31 20 7b 7d 20 6d 61 69 6e  gs.} {v1 {} main
3670: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
3680: 68 2d 31 2e 38 31 20 7b 0a 20 20 65 78 65 63 73  h-1.81 {.  execs
3690: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
36a0: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
36b0: 65 72 7d 0a 7d 20 7b 74 32 7d 0a 64 6f 5f 74 65  er}.} {t2}.do_te
36c0: 73 74 20 61 75 74 68 2d 31 2e 38 32 20 7b 0a 20  st auth-1.82 {. 
36d0: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
36e0: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
36f0: 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg4} {.    if {
3700: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43  $code=="SQLITE_C
3710: 52 45 41 54 45 5f 56 49 45 57 22 7d 20 7b 0a 20  REATE_VIEW"} {. 
3720: 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61       set ::autha
3730: 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20  rgs [list $arg1 
3740: 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67  $arg2 $arg3 $arg
3750: 34 5d 20 0a 20 20 20 20 20 20 72 65 74 75 72 6e  4] .      return
3760: 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20   SQLITE_IGNORE. 
3770: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
3780: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
3790: 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45  catchsql {CREATE
37a0: 20 56 49 45 57 20 76 31 20 41 53 20 53 45 4c 45   VIEW v1 AS SELE
37b0: 43 54 20 61 2b 31 2c 62 2b 31 20 46 52 4f 4d 20  CT a+1,b+1 FROM 
37c0: 74 32 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f  t2}.} {0 {}}.do_
37d0: 74 65 73 74 20 61 75 74 68 2d 31 2e 38 33 20 7b  test auth-1.83 {
37e0: 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67  .  set ::autharg
37f0: 73 0a 7d 20 7b 76 31 20 7b 7d 20 6d 61 69 6e 20  s.} {v1 {} main 
3800: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
3810: 2d 31 2e 38 34 20 7b 0a 20 20 65 78 65 63 73 71  -1.84 {.  execsq
3820: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
3830: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
3840: 72 7d 0a 7d 20 7b 74 32 7d 0a 0a 64 6f 5f 74 65  r}.} {t2}..do_te
3850: 73 74 20 61 75 74 68 2d 31 2e 38 35 20 7b 0a 20  st auth-1.85 {. 
3860: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
3870: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
3880: 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg4} {.    if {
3890: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43  $code=="SQLITE_C
38a0: 52 45 41 54 45 5f 54 45 4d 50 5f 56 49 45 57 22  REATE_TEMP_VIEW"
38b0: 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a  } {.      set ::
38c0: 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24  authargs [list $
38d0: 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33  arg1 $arg2 $arg3
38e0: 20 24 61 72 67 34 5d 20 0a 20 20 20 20 20 20 72   $arg4] .      r
38f0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e  eturn SQLITE_DEN
3900: 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  Y.    }.    retu
3910: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
3920: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45  .  catchsql {CRE
3930: 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20 56 49  ATE TEMPORARY VI
3940: 45 57 20 76 31 20 41 53 20 53 45 4c 45 43 54 20  EW v1 AS SELECT 
3950: 61 2b 31 2c 62 2b 31 20 46 52 4f 4d 20 74 32 7d  a+1,b+1 FROM t2}
3960: 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f  .} {1 {not autho
3970: 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20  rized}}.do_test 
3980: 61 75 74 68 2d 31 2e 38 36 20 7b 0a 20 20 73 65  auth-1.86 {.  se
3990: 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b  t ::authargs.} {
39a0: 76 31 20 7b 7d 20 74 65 6d 70 20 7b 7d 7d 0a 64  v1 {} temp {}}.d
39b0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 38 37  o_test auth-1.87
39c0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
39d0: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73  LECT name FROM s
39e0: 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
39f0: 72 7d 0a 7d 20 7b 74 31 7d 0a 64 6f 5f 74 65 73  r}.} {t1}.do_tes
3a00: 74 20 61 75 74 68 2d 31 2e 38 38 20 7b 0a 20 20  t auth-1.88 {.  
3a10: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
3a20: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
3a30: 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg4} {.    if {$
3a40: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52  code=="SQLITE_CR
3a50: 45 41 54 45 5f 54 45 4d 50 5f 56 49 45 57 22 7d  EATE_TEMP_VIEW"}
3a60: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61   {.      set ::a
3a70: 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61  uthargs [list $a
3a80: 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20  rg1 $arg2 $arg3 
3a90: 24 61 72 67 34 5d 20 0a 20 20 20 20 20 20 72 65  $arg4] .      re
3aa0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f  turn SQLITE_IGNO
3ab0: 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  RE.    }.    ret
3ac0: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
3ad0: 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52  }.  catchsql {CR
3ae0: 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20 56  EATE TEMPORARY V
3af0: 49 45 57 20 76 31 20 41 53 20 53 45 4c 45 43 54  IEW v1 AS SELECT
3b00: 20 61 2b 31 2c 62 2b 31 20 46 52 4f 4d 20 74 32   a+1,b+1 FROM t2
3b10: 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  }.} {0 {}}.do_te
3b20: 73 74 20 61 75 74 68 2d 31 2e 38 39 20 7b 0a 20  st auth-1.89 {. 
3b30: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a   set ::authargs.
3b40: 7d 20 7b 76 31 20 7b 7d 20 74 65 6d 70 20 7b 7d  } {v1 {} temp {}
3b50: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
3b60: 2e 39 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .90 {.  execsql 
3b70: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
3b80: 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  M sqlite_temp_ma
3b90: 73 74 65 72 7d 0a 7d 20 7b 74 31 7d 0a 0a 64 6f  ster}.} {t1}..do
3ba0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 39 31 20  _test auth-1.91 
3bb0: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
3bc0: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
3bd0: 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69  g3 arg4} {.    i
3be0: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
3bf0: 45 5f 49 4e 53 45 52 54 22 20 26 26 20 24 61 72  E_INSERT" && $ar
3c00: 67 31 3d 3d 22 73 71 6c 69 74 65 5f 6d 61 73 74  g1=="sqlite_mast
3c10: 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74  er"} {.      ret
3c20: 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a  urn SQLITE_DENY.
3c30: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
3c40: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
3c50: 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54   catchsql {CREAT
3c60: 45 20 56 49 45 57 20 76 31 20 41 53 20 53 45 4c  E VIEW v1 AS SEL
3c70: 45 43 54 20 61 2b 31 2c 62 2b 31 20 46 52 4f 4d  ECT a+1,b+1 FROM
3c80: 20 74 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61   t2}.} {1 {not a
3c90: 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74  uthorized}}.do_t
3ca0: 65 73 74 20 61 75 74 68 2d 31 2e 39 32 20 7b 0a  est auth-1.92 {.
3cb0: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
3cc0: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
3cd0: 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32  te_master}.} {t2
3ce0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
3cf0: 2e 39 33 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  .93 {.  proc aut
3d00: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
3d10: 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20  2 arg3 arg4} {. 
3d20: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
3d30: 51 4c 49 54 45 5f 49 4e 53 45 52 54 22 20 26 26  QLITE_INSERT" &&
3d40: 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f   $arg1=="sqlite_
3d50: 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20  master"} {.     
3d60: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49   return SQLITE_I
3d70: 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20  GNORE.    }.    
3d80: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
3d90: 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20  .  }.  catchsql 
3da0: 7b 43 52 45 41 54 45 20 56 49 45 57 20 76 31 20  {CREATE VIEW v1 
3db0: 41 53 20 53 45 4c 45 43 54 20 61 2b 31 2c 62 2b  AS SELECT a+1,b+
3dc0: 31 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 30 20  1 FROM t2}.} {0 
3dd0: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
3de0: 2d 31 2e 39 34 20 7b 0a 20 20 65 78 65 63 73 71  -1.94 {.  execsq
3df0: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
3e00: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
3e10: 72 7d 0a 7d 20 7b 74 32 7d 0a 0a 64 6f 5f 74 65  r}.} {t2}..do_te
3e20: 73 74 20 61 75 74 68 2d 31 2e 39 35 20 7b 0a 20  st auth-1.95 {. 
3e30: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
3e40: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
3e50: 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg4} {.    if {
3e60: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 49  $code=="SQLITE_I
3e70: 4e 53 45 52 54 22 20 26 26 20 24 61 72 67 31 3d  NSERT" && $arg1=
3e80: 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  ="sqlite_temp_ma
3e90: 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 72  ster"} {.      r
3ea0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e  eturn SQLITE_DEN
3eb0: 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  Y.    }.    retu
3ec0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
3ed0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45  .  catchsql {CRE
3ee0: 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20 56 49  ATE TEMPORARY VI
3ef0: 45 57 20 76 31 20 41 53 20 53 45 4c 45 43 54 20  EW v1 AS SELECT 
3f00: 61 2b 31 2c 62 2b 31 20 46 52 4f 4d 20 74 32 7d  a+1,b+1 FROM t2}
3f10: 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f  .} {1 {not autho
3f20: 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20  rized}}.do_test 
3f30: 61 75 74 68 2d 31 2e 39 36 20 7b 0a 20 20 65 78  auth-1.96 {.  ex
3f40: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61  ecsql {SELECT na
3f50: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74  me FROM sqlite_t
3f60: 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74  emp_master}.} {t
3f70: 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  1}.do_test auth-
3f80: 31 2e 39 37 20 7b 0a 20 20 70 72 6f 63 20 61 75  1.97 {.  proc au
3f90: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
3fa0: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
3fb0: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
3fc0: 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 22 20 26  SQLITE_INSERT" &
3fd0: 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65  & $arg1=="sqlite
3fe0: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 7d 20 7b  _temp_master"} {
3ff0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
4000: 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20  LITE_IGNORE.    
4010: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
4020: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
4030: 63 68 73 71 6c 20 7b 43 52 45 41 54 45 20 54 45  chsql {CREATE TE
4040: 4d 50 4f 52 41 52 59 20 56 49 45 57 20 76 31 20  MPORARY VIEW v1 
4050: 41 53 20 53 45 4c 45 43 54 20 61 2b 31 2c 62 2b  AS SELECT a+1,b+
4060: 31 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 30 20  1 FROM t2}.} {0 
4070: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
4080: 2d 31 2e 39 38 20 7b 0a 20 20 65 78 65 63 73 71  -1.98 {.  execsq
4090: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
40a0: 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f  ROM sqlite_temp_
40b0: 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31 7d 0a 0a  master}.} {t1}..
40c0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 39  do_test auth-1.9
40d0: 39 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  9 {.  proc auth 
40e0: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
40f0: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
4100: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
4110: 49 54 45 5f 44 45 4c 45 54 45 22 20 26 26 20 24  ITE_DELETE" && $
4120: 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 6d 61  arg1=="sqlite_ma
4130: 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 72  ster"} {.      r
4140: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e  eturn SQLITE_DEN
4150: 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  Y.    }.    retu
4160: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
4170: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
4180: 20 20 43 52 45 41 54 45 20 56 49 45 57 20 76 32    CREATE VIEW v2
4190: 20 41 53 20 53 45 4c 45 43 54 20 61 2b 31 2c 62   AS SELECT a+1,b
41a0: 2b 31 20 46 52 4f 4d 20 74 32 3b 0a 20 20 20 20  +1 FROM t2;.    
41b0: 44 52 4f 50 20 56 49 45 57 20 76 32 0a 20 20 7d  DROP VIEW v2.  }
41c0: 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f  .} {1 {not autho
41d0: 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20  rized}}.do_test 
41e0: 61 75 74 68 2d 31 2e 31 30 30 20 7b 0a 20 20 65  auth-1.100 {.  e
41f0: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
4200: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
4210: 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 20 76 32  master}.} {t2 v2
4220: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
4230: 2e 31 30 31 20 7b 0a 20 20 70 72 6f 63 20 61 75  .101 {.  proc au
4240: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
4250: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
4260: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
4270: 53 51 4c 49 54 45 5f 44 52 4f 50 5f 56 49 45 57  SQLITE_DROP_VIEW
4280: 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a  "} {.      set :
4290: 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20  :authargs [list 
42a0: 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67  $arg1 $arg2 $arg
42b0: 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72  3 $arg4].      r
42c0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e  eturn SQLITE_DEN
42d0: 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  Y.    }.    retu
42e0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
42f0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f  .  catchsql {DRO
4300: 50 20 56 49 45 57 20 76 32 7d 0a 7d 20 7b 31 20  P VIEW v2}.} {1 
4310: 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d  {not authorized}
4320: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
4330: 2e 31 30 32 20 7b 0a 20 20 73 65 74 20 3a 3a 61  .102 {.  set ::a
4340: 75 74 68 61 72 67 73 0a 7d 20 7b 76 32 20 7b 7d  uthargs.} {v2 {}
4350: 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73   main {}}.do_tes
4360: 74 20 61 75 74 68 2d 31 2e 31 30 33 20 7b 0a 20  t auth-1.103 {. 
4370: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
4380: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
4390: 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 20  e_master}.} {t2 
43a0: 76 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  v2}.do_test auth
43b0: 2d 31 2e 31 30 34 20 7b 0a 20 20 70 72 6f 63 20  -1.104 {.  proc 
43c0: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
43d0: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
43e0: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
43f0: 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 22  ="SQLITE_DELETE"
4400: 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69   && $arg1=="sqli
4410: 74 65 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20  te_master"} {.  
4420: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
4430: 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20  E_IGNORE.    }. 
4440: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
4450: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
4460: 71 6c 20 7b 44 52 4f 50 20 56 49 45 57 20 76 32  ql {DROP VIEW v2
4470: 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  }.} {0 {}}.do_te
4480: 73 74 20 61 75 74 68 2d 31 2e 31 30 35 20 7b 0a  st auth-1.105 {.
4490: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
44a0: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
44b0: 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32  te_master}.} {t2
44c0: 20 76 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   v2}.do_test aut
44d0: 68 2d 31 2e 31 30 36 20 7b 0a 20 20 70 72 6f 63  h-1.106 {.  proc
44e0: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
44f0: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
4500: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
4510: 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f 50 5f 56  =="SQLITE_DROP_V
4520: 49 45 57 22 7d 20 7b 0a 20 20 20 20 20 20 73 65  IEW"} {.      se
4530: 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69  t ::authargs [li
4540: 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24  st $arg1 $arg2 $
4550: 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20  arg3 $arg4].    
4560: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
4570: 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20  IGNORE.    }.   
4580: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
4590: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
45a0: 20 7b 44 52 4f 50 20 56 49 45 57 20 76 32 7d 0a   {DROP VIEW v2}.
45b0: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
45c0: 20 61 75 74 68 2d 31 2e 31 30 37 20 7b 0a 20 20   auth-1.107 {.  
45d0: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d  set ::authargs.}
45e0: 20 7b 76 32 20 7b 7d 20 6d 61 69 6e 20 7b 7d 7d   {v2 {} main {}}
45f0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
4600: 31 30 38 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  108 {.  execsql 
4610: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
4620: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d  M sqlite_master}
4630: 0a 7d 20 7b 74 32 20 76 32 7d 0a 64 6f 5f 74 65  .} {t2 v2}.do_te
4640: 73 74 20 61 75 74 68 2d 31 2e 31 30 39 20 7b 0a  st auth-1.109 {.
4650: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
4660: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
4670: 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20   arg4} {.    if 
4680: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
4690: 44 52 4f 50 5f 56 49 45 57 22 7d 20 7b 0a 20 20  DROP_VIEW"} {.  
46a0: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
46b0: 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24  gs [list $arg1 $
46c0: 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34  arg2 $arg3 $arg4
46d0: 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  ].      return S
46e0: 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20  QLITE_OK.    }. 
46f0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
4700: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
4710: 71 6c 20 7b 44 52 4f 50 20 56 49 45 57 20 76 32  ql {DROP VIEW v2
4720: 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  }.} {0 {}}.do_te
4730: 73 74 20 61 75 74 68 2d 31 2e 31 31 30 20 7b 0a  st auth-1.110 {.
4740: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
4750: 0a 7d 20 7b 76 32 20 7b 7d 20 6d 61 69 6e 20 7b  .} {v2 {} main {
4760: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
4770: 31 2e 31 31 31 20 7b 0a 20 20 65 78 65 63 73 71  1.111 {.  execsq
4780: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
4790: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
47a0: 72 7d 0a 7d 20 7b 74 32 7d 0a 0a 0a 64 6f 5f 74  r}.} {t2}...do_t
47b0: 65 73 74 20 61 75 74 68 2d 31 2e 31 31 32 20 7b  est auth-1.112 {
47c0: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
47d0: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
47e0: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66  3 arg4} {.    if
47f0: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
4800: 5f 44 45 4c 45 54 45 22 20 26 26 20 24 61 72 67  _DELETE" && $arg
4810: 31 3d 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f  1=="sqlite_temp_
4820: 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20  master"} {.     
4830: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44   return SQLITE_D
4840: 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  ENY.    }.    re
4850: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
4860: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a   }.  catchsql {.
4870: 20 20 20 20 43 52 45 41 54 45 20 54 45 4d 50 20      CREATE TEMP 
4880: 56 49 45 57 20 76 31 20 41 53 20 53 45 4c 45 43  VIEW v1 AS SELEC
4890: 54 20 61 2b 31 2c 62 2b 31 20 46 52 4f 4d 20 74  T a+1,b+1 FROM t
48a0: 31 3b 0a 20 20 20 20 44 52 4f 50 20 56 49 45 57  1;.    DROP VIEW
48b0: 20 76 31 0a 20 20 7d 0a 7d 20 7b 31 20 7b 6e 6f   v1.  }.} {1 {no
48c0: 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64  t authorized}}.d
48d0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 31  o_test auth-1.11
48e0: 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  3 {.  execsql {S
48f0: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
4900: 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
4910: 65 72 7d 0a 7d 20 7b 74 31 20 76 31 7d 0a 64 6f  er}.} {t1 v1}.do
4920: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 31 34  _test auth-1.114
4930: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
4940: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
4950: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
4960: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
4970: 54 45 5f 44 52 4f 50 5f 54 45 4d 50 5f 56 49 45  TE_DROP_TEMP_VIE
4980: 57 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20  W"} {.      set 
4990: 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74  ::authargs [list
49a0: 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72   $arg1 $arg2 $ar
49b0: 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20  g3 $arg4].      
49c0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45  return SQLITE_DE
49d0: 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  NY.    }.    ret
49e0: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
49f0: 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52  }.  catchsql {DR
4a00: 4f 50 20 56 49 45 57 20 76 31 7d 0a 7d 20 7b 31  OP VIEW v1}.} {1
4a10: 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64   {not authorized
4a20: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
4a30: 31 2e 31 31 35 20 7b 0a 20 20 73 65 74 20 3a 3a  1.115 {.  set ::
4a40: 61 75 74 68 61 72 67 73 0a 7d 20 7b 76 31 20 7b  authargs.} {v1 {
4a50: 7d 20 74 65 6d 70 20 7b 7d 7d 0a 64 6f 5f 74 65  } temp {}}.do_te
4a60: 73 74 20 61 75 74 68 2d 31 2e 31 31 36 20 7b 0a  st auth-1.116 {.
4a70: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
4a80: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
4a90: 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a  te_temp_master}.
4aa0: 7d 20 7b 74 31 20 76 31 7d 0a 64 6f 5f 74 65 73  } {t1 v1}.do_tes
4ab0: 74 20 61 75 74 68 2d 31 2e 31 31 37 20 7b 0a 20  t auth-1.117 {. 
4ac0: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
4ad0: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
4ae0: 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg4} {.    if {
4af0: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44  $code=="SQLITE_D
4b00: 45 4c 45 54 45 22 20 26 26 20 24 61 72 67 31 3d  ELETE" && $arg1=
4b10: 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  ="sqlite_temp_ma
4b20: 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 72  ster"} {.      r
4b30: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e  eturn SQLITE_IGN
4b40: 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  ORE.    }.    re
4b50: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
4b60: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44   }.  catchsql {D
4b70: 52 4f 50 20 56 49 45 57 20 76 31 7d 0a 7d 20 7b  ROP VIEW v1}.} {
4b80: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  0 {}}.do_test au
4b90: 74 68 2d 31 2e 31 31 38 20 7b 0a 20 20 65 78 65  th-1.118 {.  exe
4ba0: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d  csql {SELECT nam
4bb0: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65  e FROM sqlite_te
4bc0: 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31  mp_master}.} {t1
4bd0: 20 76 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   v1}.do_test aut
4be0: 68 2d 31 2e 31 31 39 20 7b 0a 20 20 70 72 6f 63  h-1.119 {.  proc
4bf0: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
4c00: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
4c10: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
4c20: 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f 50 5f 54  =="SQLITE_DROP_T
4c30: 45 4d 50 5f 56 49 45 57 22 7d 20 7b 0a 20 20 20  EMP_VIEW"} {.   
4c40: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
4c50: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
4c60: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
4c70: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
4c80: 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20  LITE_IGNORE.    
4c90: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
4ca0: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
4cb0: 63 68 73 71 6c 20 7b 44 52 4f 50 20 56 49 45 57  chsql {DROP VIEW
4cc0: 20 76 31 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f   v1}.} {0 {}}.do
4cd0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 32 30  _test auth-1.120
4ce0: 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61   {.  set ::autha
4cf0: 72 67 73 0a 7d 20 7b 76 31 20 7b 7d 20 74 65 6d  rgs.} {v1 {} tem
4d00: 70 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  p {}}.do_test au
4d10: 74 68 2d 31 2e 31 32 31 20 7b 0a 20 20 65 78 65  th-1.121 {.  exe
4d20: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d  csql {SELECT nam
4d30: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65  e FROM sqlite_te
4d40: 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31  mp_master}.} {t1
4d50: 20 76 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   v1}.do_test aut
4d60: 68 2d 31 2e 31 32 32 20 7b 0a 20 20 70 72 6f 63  h-1.122 {.  proc
4d70: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
4d80: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
4d90: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
4da0: 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f 50 5f 54  =="SQLITE_DROP_T
4db0: 45 4d 50 5f 56 49 45 57 22 7d 20 7b 0a 20 20 20  EMP_VIEW"} {.   
4dc0: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
4dd0: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
4de0: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
4df0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
4e00: 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20  LITE_OK.    }.  
4e10: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
4e20: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
4e30: 6c 20 7b 44 52 4f 50 20 56 49 45 57 20 76 31 7d  l {DROP VIEW v1}
4e40: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
4e50: 74 20 61 75 74 68 2d 31 2e 31 32 33 20 7b 0a 20  t auth-1.123 {. 
4e60: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a   set ::authargs.
4e70: 7d 20 7b 76 31 20 7b 7d 20 74 65 6d 70 20 7b 7d  } {v1 {} temp {}
4e80: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
4e90: 2e 31 32 34 20 7b 0a 20 20 65 78 65 63 73 71 6c  .124 {.  execsql
4ea0: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
4eb0: 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  OM sqlite_temp_m
4ec0: 61 73 74 65 72 7d 0a 7d 20 7b 74 31 7d 0a 0a 64  aster}.} {t1}..d
4ed0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 32  o_test auth-1.12
4ee0: 35 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  5 {.  proc auth 
4ef0: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
4f00: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
4f10: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
4f20: 49 54 45 5f 43 52 45 41 54 45 5f 54 52 49 47 47  ITE_CREATE_TRIGG
4f30: 45 52 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74  ER"} {.      set
4f40: 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73   ::authargs [lis
4f50: 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61  t $arg1 $arg2 $a
4f60: 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20  rg3 $arg4].     
4f70: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44   return SQLITE_D
4f80: 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  ENY.    }.    re
4f90: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
4fa0: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a   }.  catchsql {.
4fb0: 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47      CREATE TRIGG
4fc0: 45 52 20 72 32 20 44 45 4c 45 54 45 20 6f 6e 20  ER r2 DELETE on 
4fd0: 74 32 20 42 45 47 49 4e 0a 20 20 20 20 20 20 20  t2 BEGIN.       
4fe0: 20 53 45 4c 45 43 54 20 4e 55 4c 4c 3b 0a 20 20   SELECT NULL;.  
4ff0: 20 20 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 31 20    END;.  }.} {1 
5000: 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d  {not authorized}
5010: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
5020: 2e 31 32 36 20 7b 0a 20 20 73 65 74 20 3a 3a 61  .126 {.  set ::a
5030: 75 74 68 61 72 67 73 0a 7d 20 7b 72 32 20 74 32  uthargs.} {r2 t2
5040: 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73   main {}}.do_tes
5050: 74 20 61 75 74 68 2d 31 2e 31 32 37 20 7b 0a 20  t auth-1.127 {. 
5060: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
5070: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
5080: 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 7d  e_master}.} {t2}
5090: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
50a0: 31 32 38 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  128 {.  proc aut
50b0: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
50c0: 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20  2 arg3 arg4} {. 
50d0: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
50e0: 51 4c 49 54 45 5f 49 4e 53 45 52 54 22 20 26 26  QLITE_INSERT" &&
50f0: 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f   $arg1=="sqlite_
5100: 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20  master"} {.     
5110: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44   return SQLITE_D
5120: 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  ENY.    }.    re
5130: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
5140: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a   }.  catchsql {.
5150: 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47      CREATE TRIGG
5160: 45 52 20 72 32 20 44 45 4c 45 54 45 20 6f 6e 20  ER r2 DELETE on 
5170: 74 32 20 42 45 47 49 4e 0a 20 20 20 20 20 20 20  t2 BEGIN.       
5180: 20 53 45 4c 45 43 54 20 4e 55 4c 4c 3b 0a 20 20   SELECT NULL;.  
5190: 20 20 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 31 20    END;.  }.} {1 
51a0: 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d  {not authorized}
51b0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
51c0: 2e 31 32 39 20 7b 0a 20 20 65 78 65 63 73 71 6c  .129 {.  execsql
51d0: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
51e0: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
51f0: 7d 0a 7d 20 7b 74 32 7d 0a 64 6f 5f 74 65 73 74  }.} {t2}.do_test
5200: 20 61 75 74 68 2d 31 2e 31 33 30 20 7b 0a 20 20   auth-1.130 {.  
5210: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
5220: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
5230: 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg4} {.    if {$
5240: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52  code=="SQLITE_CR
5250: 45 41 54 45 5f 54 52 49 47 47 45 52 22 7d 20 7b  EATE_TRIGGER"} {
5260: 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74  .      set ::aut
5270: 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67  hargs [list $arg
5280: 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61  1 $arg2 $arg3 $a
5290: 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72  rg4].      retur
52a0: 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a  n SQLITE_IGNORE.
52b0: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
52c0: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
52d0: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
52e0: 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 72  CREATE TRIGGER r
52f0: 32 20 44 45 4c 45 54 45 20 6f 6e 20 74 32 20 42  2 DELETE on t2 B
5300: 45 47 49 4e 0a 20 20 20 20 20 20 20 20 53 45 4c  EGIN.        SEL
5310: 45 43 54 20 4e 55 4c 4c 3b 0a 20 20 20 20 45 4e  ECT NULL;.    EN
5320: 44 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a  D;.  }.} {0 {}}.
5330: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
5340: 33 31 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74  31 {.  set ::aut
5350: 68 61 72 67 73 0a 7d 20 7b 72 32 20 74 32 20 6d  hargs.} {r2 t2 m
5360: 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20  ain {}}.do_test 
5370: 61 75 74 68 2d 31 2e 31 33 32 20 7b 0a 20 20 65  auth-1.132 {.  e
5380: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
5390: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
53a0: 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a 64  master}.} {t2}.d
53b0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 33  o_test auth-1.13
53c0: 33 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  3 {.  proc auth 
53d0: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
53e0: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
53f0: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
5400: 49 54 45 5f 49 4e 53 45 52 54 22 20 26 26 20 24  ITE_INSERT" && $
5410: 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 6d 61  arg1=="sqlite_ma
5420: 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 72  ster"} {.      r
5430: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e  eturn SQLITE_IGN
5440: 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  ORE.    }.    re
5450: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
5460: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a   }.  catchsql {.
5470: 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47      CREATE TRIGG
5480: 45 52 20 72 32 20 44 45 4c 45 54 45 20 6f 6e 20  ER r2 DELETE on 
5490: 74 32 20 42 45 47 49 4e 0a 20 20 20 20 20 20 20  t2 BEGIN.       
54a0: 20 53 45 4c 45 43 54 20 4e 55 4c 4c 3b 0a 20 20   SELECT NULL;.  
54b0: 20 20 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 30 20    END;.  }.} {0 
54c0: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
54d0: 2d 31 2e 31 33 34 20 7b 0a 20 20 65 78 65 63 73  -1.134 {.  execs
54e0: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
54f0: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
5500: 65 72 7d 0a 7d 20 7b 74 32 7d 0a 64 6f 5f 74 65  er}.} {t2}.do_te
5510: 73 74 20 61 75 74 68 2d 31 2e 31 33 35 20 7b 0a  st auth-1.135 {.
5520: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
5530: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
5540: 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20   arg4} {.    if 
5550: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
5560: 43 52 45 41 54 45 5f 54 52 49 47 47 45 52 22 7d  CREATE_TRIGGER"}
5570: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61   {.      set ::a
5580: 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61  uthargs [list $a
5590: 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20  rg1 $arg2 $arg3 
55a0: 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74  $arg4].      ret
55b0: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
55c0: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
55d0: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
55e0: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 43 52  atchsql {.    CR
55f0: 45 41 54 45 20 54 41 42 4c 45 20 74 78 28 69 64  EATE TABLE tx(id
5600: 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 52  );.    CREATE TR
5610: 49 47 47 45 52 20 72 32 20 41 46 54 45 52 20 49  IGGER r2 AFTER I
5620: 4e 53 45 52 54 20 4f 4e 20 74 32 20 42 45 47 49  NSERT ON t2 BEGI
5630: 4e 0a 20 20 20 20 20 20 20 49 4e 53 45 52 54 20  N.       INSERT 
5640: 49 4e 54 4f 20 74 78 20 56 41 4c 55 45 53 28 4e  INTO tx VALUES(N
5650: 45 57 2e 72 6f 77 69 64 29 3b 0a 20 20 20 20 45  EW.rowid);.    E
5660: 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d  ND;.  }.} {0 {}}
5670: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
5680: 31 33 36 2e 31 20 7b 0a 20 20 73 65 74 20 3a 3a  136.1 {.  set ::
5690: 61 75 74 68 61 72 67 73 0a 7d 20 7b 72 32 20 74  authargs.} {r2 t
56a0: 32 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65  2 main {}}.do_te
56b0: 73 74 20 61 75 74 68 2d 31 2e 31 33 36 2e 32 20  st auth-1.136.2 
56c0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
56d0: 20 20 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52    SELECT name FR
56e0: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
56f0: 20 57 48 45 52 45 20 74 79 70 65 3d 27 74 72 69   WHERE type='tri
5700: 67 67 65 72 27 0a 20 20 7d 0a 7d 20 7b 72 32 7d  gger'.  }.} {r2}
5710: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
5720: 31 33 36 2e 33 20 7b 0a 20 20 70 72 6f 63 20 61  136.3 {.  proc a
5730: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
5740: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
5750: 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 3a 3a 61  .    lappend ::a
5760: 75 74 68 61 72 67 73 20 24 63 6f 64 65 20 24 61  uthargs $code $a
5770: 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20  rg1 $arg2 $arg3 
5780: 24 61 72 67 34 0a 20 20 20 20 72 65 74 75 72 6e  $arg4.    return
5790: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
57a0: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
57b0: 7b 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  {}.  execsql {. 
57c0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
57d0: 32 20 56 41 4c 55 45 53 28 31 2c 32 2c 33 29 3b  2 VALUES(1,2,3);
57e0: 0a 20 20 7d 0a 20 20 73 65 74 20 3a 3a 61 75 74  .  }.  set ::aut
57f0: 68 61 72 67 73 20 0a 7d 20 7b 53 51 4c 49 54 45  hargs .} {SQLITE
5800: 5f 49 4e 53 45 52 54 20 74 32 20 7b 7d 20 6d 61  _INSERT t2 {} ma
5810: 69 6e 20 7b 7d 20 53 51 4c 49 54 45 5f 49 4e 53  in {} SQLITE_INS
5820: 45 52 54 20 74 78 20 7b 7d 20 6d 61 69 6e 20 72  ERT tx {} main r
5830: 32 20 53 51 4c 49 54 45 5f 52 45 41 44 20 74 32  2 SQLITE_READ t2
5840: 20 52 4f 57 49 44 20 6d 61 69 6e 20 72 32 7d 0a   ROWID main r2}.
5850: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
5860: 33 36 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c  36.4 {.  execsql
5870: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20   {.    SELECT * 
5880: 46 52 4f 4d 20 74 78 3b 0a 20 20 7d 0a 7d 20 7b  FROM tx;.  }.} {
5890: 33 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  3}.do_test auth-
58a0: 31 2e 31 33 37 20 7b 0a 20 20 65 78 65 63 73 71  1.137 {.  execsq
58b0: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
58c0: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
58d0: 72 7d 0a 7d 20 7b 74 32 20 74 78 20 72 32 7d 0a  r}.} {t2 tx r2}.
58e0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
58f0: 33 38 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  38 {.  proc auth
5900: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
5910: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
5920: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
5930: 4c 49 54 45 5f 43 52 45 41 54 45 5f 54 45 4d 50  LITE_CREATE_TEMP
5940: 5f 54 52 49 47 47 45 52 22 7d 20 7b 0a 20 20 20  _TRIGGER"} {.   
5950: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
5960: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
5970: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
5980: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
5990: 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a  LITE_DENY.    }.
59a0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
59b0: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
59c0: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
59d0: 20 54 52 49 47 47 45 52 20 72 31 20 44 45 4c 45   TRIGGER r1 DELE
59e0: 54 45 20 6f 6e 20 74 31 20 42 45 47 49 4e 0a 20  TE on t1 BEGIN. 
59f0: 20 20 20 20 20 20 20 53 45 4c 45 43 54 20 4e 55         SELECT NU
5a00: 4c 4c 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 7d  LL;.    END;.  }
5a10: 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f  .} {1 {not autho
5a20: 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20  rized}}.do_test 
5a30: 61 75 74 68 2d 31 2e 31 33 39 20 7b 0a 20 20 73  auth-1.139 {.  s
5a40: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20  et ::authargs.} 
5a50: 7b 72 31 20 74 31 20 74 65 6d 70 20 7b 7d 7d 0a  {r1 t1 temp {}}.
5a60: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
5a70: 34 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  40 {.  execsql {
5a80: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
5a90: 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73   sqlite_temp_mas
5aa0: 74 65 72 7d 0a 7d 20 7b 74 31 7d 0a 64 6f 5f 74  ter}.} {t1}.do_t
5ab0: 65 73 74 20 61 75 74 68 2d 31 2e 31 34 31 20 7b  est auth-1.141 {
5ac0: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
5ad0: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
5ae0: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66  3 arg4} {.    if
5af0: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
5b00: 5f 49 4e 53 45 52 54 22 20 26 26 20 24 61 72 67  _INSERT" && $arg
5b10: 31 3d 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f  1=="sqlite_temp_
5b20: 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20  master"} {.     
5b30: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44   return SQLITE_D
5b40: 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  ENY.    }.    re
5b50: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
5b60: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a   }.  catchsql {.
5b70: 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47      CREATE TRIGG
5b80: 45 52 20 72 31 20 44 45 4c 45 54 45 20 6f 6e 20  ER r1 DELETE on 
5b90: 74 31 20 42 45 47 49 4e 0a 20 20 20 20 20 20 20  t1 BEGIN.       
5ba0: 20 53 45 4c 45 43 54 20 4e 55 4c 4c 3b 0a 20 20   SELECT NULL;.  
5bb0: 20 20 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 31 20    END;.  }.} {1 
5bc0: 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d  {not authorized}
5bd0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
5be0: 2e 31 34 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  .142 {.  execsql
5bf0: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
5c00: 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  OM sqlite_temp_m
5c10: 61 73 74 65 72 7d 0a 7d 20 7b 74 31 7d 0a 64 6f  aster}.} {t1}.do
5c20: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 34 33  _test auth-1.143
5c30: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
5c40: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
5c50: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
5c60: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
5c70: 54 45 5f 43 52 45 41 54 45 5f 54 45 4d 50 5f 54  TE_CREATE_TEMP_T
5c80: 52 49 47 47 45 52 22 7d 20 7b 0a 20 20 20 20 20  RIGGER"} {.     
5c90: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
5ca0: 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67  [list $arg1 $arg
5cb0: 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20  2 $arg3 $arg4]. 
5cc0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
5cd0: 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a  TE_IGNORE.    }.
5ce0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
5cf0: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
5d00: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
5d10: 20 54 52 49 47 47 45 52 20 72 31 20 44 45 4c 45   TRIGGER r1 DELE
5d20: 54 45 20 6f 6e 20 74 31 20 42 45 47 49 4e 0a 20  TE on t1 BEGIN. 
5d30: 20 20 20 20 20 20 20 53 45 4c 45 43 54 20 4e 55         SELECT NU
5d40: 4c 4c 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 7d  LL;.    END;.  }
5d50: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
5d60: 74 20 61 75 74 68 2d 31 2e 31 34 34 20 7b 0a 20  t auth-1.144 {. 
5d70: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a   set ::authargs.
5d80: 7d 20 7b 72 31 20 74 31 20 74 65 6d 70 20 7b 7d  } {r1 t1 temp {}
5d90: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
5da0: 2e 31 34 35 20 7b 0a 20 20 65 78 65 63 73 71 6c  .145 {.  execsql
5db0: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
5dc0: 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  OM sqlite_temp_m
5dd0: 61 73 74 65 72 7d 0a 7d 20 7b 74 31 7d 0a 64 6f  aster}.} {t1}.do
5de0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 34 36  _test auth-1.146
5df0: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
5e00: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
5e10: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
5e20: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
5e30: 54 45 5f 49 4e 53 45 52 54 22 20 26 26 20 24 61  TE_INSERT" && $a
5e40: 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 74 65 6d  rg1=="sqlite_tem
5e50: 70 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20  p_master"} {.   
5e60: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
5e70: 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20  _IGNORE.    }.  
5e80: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
5e90: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
5ea0: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
5eb0: 52 49 47 47 45 52 20 72 31 20 44 45 4c 45 54 45  RIGGER r1 DELETE
5ec0: 20 6f 6e 20 74 31 20 42 45 47 49 4e 0a 20 20 20   on t1 BEGIN.   
5ed0: 20 20 20 20 20 53 45 4c 45 43 54 20 4e 55 4c 4c       SELECT NULL
5ee0: 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 7d 0a 7d  ;.    END;.  }.}
5ef0: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
5f00: 61 75 74 68 2d 31 2e 31 34 37 20 7b 0a 20 20 65  auth-1.147 {.  e
5f10: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
5f20: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
5f30: 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b  temp_master}.} {
5f40: 74 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  t1}.do_test auth
5f50: 2d 31 2e 31 34 38 20 7b 0a 20 20 70 72 6f 63 20  -1.148 {.  proc 
5f60: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
5f70: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
5f80: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
5f90: 3d 22 53 51 4c 49 54 45 5f 43 52 45 41 54 45 5f  ="SQLITE_CREATE_
5fa0: 54 45 4d 50 5f 54 52 49 47 47 45 52 22 7d 20 7b  TEMP_TRIGGER"} {
5fb0: 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74  .      set ::aut
5fc0: 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67  hargs [list $arg
5fd0: 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61  1 $arg2 $arg3 $a
5fe0: 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72  rg4].      retur
5ff0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20  n SQLITE_OK.    
6000: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
6010: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
6020: 63 68 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41  chsql {.    CREA
6030: 54 45 20 54 52 49 47 47 45 52 20 72 31 20 44 45  TE TRIGGER r1 DE
6040: 4c 45 54 45 20 6f 6e 20 74 31 20 42 45 47 49 4e  LETE on t1 BEGIN
6050: 0a 20 20 20 20 20 20 20 20 53 45 4c 45 43 54 20  .        SELECT 
6060: 4e 55 4c 4c 3b 0a 20 20 20 20 45 4e 44 3b 0a 20  NULL;.    END;. 
6070: 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74   }.} {0 {}}.do_t
6080: 65 73 74 20 61 75 74 68 2d 31 2e 31 34 39 20 7b  est auth-1.149 {
6090: 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67  .  set ::autharg
60a0: 73 0a 7d 20 7b 72 31 20 74 31 20 74 65 6d 70 20  s.} {r1 t1 temp 
60b0: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
60c0: 2d 31 2e 31 35 30 20 7b 0a 20 20 65 78 65 63 73  -1.150 {.  execs
60d0: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
60e0: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70  FROM sqlite_temp
60f0: 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31 20 72  _master}.} {t1 r
6100: 31 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  1}..do_test auth
6110: 2d 31 2e 31 35 31 20 7b 0a 20 20 70 72 6f 63 20  -1.151 {.  proc 
6120: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
6130: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
6140: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
6150: 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 22  ="SQLITE_DELETE"
6160: 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69   && $arg1=="sqli
6170: 74 65 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20  te_master"} {.  
6180: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
6190: 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20  E_DENY.    }.   
61a0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
61b0: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
61c0: 20 7b 44 52 4f 50 20 54 52 49 47 47 45 52 20 72   {DROP TRIGGER r
61d0: 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74  2}.} {1 {not aut
61e0: 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73  horized}}.do_tes
61f0: 74 20 61 75 74 68 2d 31 2e 31 35 32 20 7b 0a 20  t auth-1.152 {. 
6200: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
6210: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
6220: 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 20  e_master}.} {t2 
6230: 74 78 20 72 32 7d 0a 64 6f 5f 74 65 73 74 20 61  tx r2}.do_test a
6240: 75 74 68 2d 31 2e 31 35 33 20 7b 0a 20 20 70 72  uth-1.153 {.  pr
6250: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
6260: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
6270: 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f  4} {.    if {$co
6280: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f 50  de=="SQLITE_DROP
6290: 5f 54 52 49 47 47 45 52 22 7d 20 7b 0a 20 20 20  _TRIGGER"} {.   
62a0: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
62b0: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
62c0: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
62d0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
62e0: 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a  LITE_DENY.    }.
62f0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
6300: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
6310: 73 71 6c 20 7b 44 52 4f 50 20 54 52 49 47 47 45  sql {DROP TRIGGE
6320: 52 20 72 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20  R r2}.} {1 {not 
6330: 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f  authorized}}.do_
6340: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 35 34 20  test auth-1.154 
6350: 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72  {.  set ::authar
6360: 67 73 0a 7d 20 7b 72 32 20 74 32 20 6d 61 69 6e  gs.} {r2 t2 main
6370: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
6380: 68 2d 31 2e 31 35 35 20 7b 0a 20 20 65 78 65 63  h-1.155 {.  exec
6390: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
63a0: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
63b0: 74 65 72 7d 0a 7d 20 7b 74 32 20 74 78 20 72 32  ter}.} {t2 tx r2
63c0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
63d0: 2e 31 35 36 20 7b 0a 20 20 70 72 6f 63 20 61 75  .156 {.  proc au
63e0: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
63f0: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
6400: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
6410: 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 22 20 26  SQLITE_DELETE" &
6420: 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65  & $arg1=="sqlite
6430: 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20  _master"} {.    
6440: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
6450: 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20  IGNORE.    }.   
6460: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
6470: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
6480: 20 7b 44 52 4f 50 20 54 52 49 47 47 45 52 20 72   {DROP TRIGGER r
6490: 32 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74  2}.} {0 {}}.do_t
64a0: 65 73 74 20 61 75 74 68 2d 31 2e 31 35 37 20 7b  est auth-1.157 {
64b0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
64c0: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
64d0: 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74  ite_master}.} {t
64e0: 32 20 74 78 20 72 32 7d 0a 64 6f 5f 74 65 73 74  2 tx r2}.do_test
64f0: 20 61 75 74 68 2d 31 2e 31 35 38 20 7b 0a 20 20   auth-1.158 {.  
6500: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
6510: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
6520: 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg4} {.    if {$
6530: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52  code=="SQLITE_DR
6540: 4f 50 5f 54 52 49 47 47 45 52 22 7d 20 7b 0a 20  OP_TRIGGER"} {. 
6550: 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61       set ::autha
6560: 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20  rgs [list $arg1 
6570: 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67  $arg2 $arg3 $arg
6580: 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  4].      return 
6590: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20  SQLITE_IGNORE.  
65a0: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
65b0: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
65c0: 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54 52  atchsql {DROP TR
65d0: 49 47 47 45 52 20 72 32 7d 0a 7d 20 7b 30 20 7b  IGGER r2}.} {0 {
65e0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
65f0: 31 2e 31 35 39 20 7b 0a 20 20 73 65 74 20 3a 3a  1.159 {.  set ::
6600: 61 75 74 68 61 72 67 73 0a 7d 20 7b 72 32 20 74  authargs.} {r2 t
6610: 32 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65  2 main {}}.do_te
6620: 73 74 20 61 75 74 68 2d 31 2e 31 36 30 20 7b 0a  st auth-1.160 {.
6630: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
6640: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
6650: 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32  te_master}.} {t2
6660: 20 74 78 20 72 32 7d 0a 64 6f 5f 74 65 73 74 20   tx r2}.do_test 
6670: 61 75 74 68 2d 31 2e 31 36 31 20 7b 0a 20 20 70  auth-1.161 {.  p
6680: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
6690: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
66a0: 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g4} {.    if {$c
66b0: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f  ode=="SQLITE_DRO
66c0: 50 5f 54 52 49 47 47 45 52 22 7d 20 7b 0a 20 20  P_TRIGGER"} {.  
66d0: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
66e0: 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24  gs [list $arg1 $
66f0: 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34  arg2 $arg3 $arg4
6700: 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  ].      return S
6710: 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20  QLITE_OK.    }. 
6720: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
6730: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
6740: 71 6c 20 7b 44 52 4f 50 20 54 52 49 47 47 45 52  ql {DROP TRIGGER
6750: 20 72 32 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f   r2}.} {0 {}}.do
6760: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 36 32  _test auth-1.162
6770: 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61   {.  set ::autha
6780: 72 67 73 0a 7d 20 7b 72 32 20 74 32 20 6d 61 69  rgs.} {r2 t2 mai
6790: 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  n {}}.do_test au
67a0: 74 68 2d 31 2e 31 36 33 20 7b 0a 20 20 65 78 65  th-1.163 {.  exe
67b0: 63 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20  csql {.    DROP 
67c0: 54 41 42 4c 45 20 74 78 3b 0a 20 20 20 20 44 45  TABLE tx;.    DE
67d0: 4c 45 54 45 20 46 52 4f 4d 20 74 32 20 57 48 45  LETE FROM t2 WHE
67e0: 52 45 20 61 3d 31 20 41 4e 44 20 62 3d 32 20 41  RE a=1 AND b=2 A
67f0: 4e 44 20 63 3d 33 3b 0a 20 20 20 20 53 45 4c 45  ND c=3;.    SELE
6800: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
6810: 69 74 65 5f 6d 61 73 74 65 72 3b 0a 20 20 7d 0a  ite_master;.  }.
6820: 7d 20 7b 74 32 7d 0a 0a 64 6f 5f 74 65 73 74 20  } {t2}..do_test 
6830: 61 75 74 68 2d 31 2e 31 36 34 20 7b 0a 20 20 70  auth-1.164 {.  p
6840: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
6850: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
6860: 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g4} {.    if {$c
6870: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c  ode=="SQLITE_DEL
6880: 45 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d 22  ETE" && $arg1=="
6890: 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
68a0: 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74  er"} {.      ret
68b0: 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a  urn SQLITE_DENY.
68c0: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
68d0: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
68e0: 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20   catchsql {DROP 
68f0: 54 52 49 47 47 45 52 20 72 31 7d 0a 7d 20 7b 31  TRIGGER r1}.} {1
6900: 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64   {not authorized
6910: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
6920: 31 2e 31 36 35 20 7b 0a 20 20 65 78 65 63 73 71  1.165 {.  execsq
6930: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
6940: 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f  ROM sqlite_temp_
6950: 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31 20 72 31  master}.} {t1 r1
6960: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
6970: 2e 31 36 36 20 7b 0a 20 20 70 72 6f 63 20 61 75  .166 {.  proc au
6980: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
6990: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
69a0: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
69b0: 53 51 4c 49 54 45 5f 44 52 4f 50 5f 54 45 4d 50  SQLITE_DROP_TEMP
69c0: 5f 54 52 49 47 47 45 52 22 7d 20 7b 0a 20 20 20  _TRIGGER"} {.   
69d0: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
69e0: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
69f0: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
6a00: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
6a10: 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a  LITE_DENY.    }.
6a20: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
6a30: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
6a40: 73 71 6c 20 7b 44 52 4f 50 20 54 52 49 47 47 45  sql {DROP TRIGGE
6a50: 52 20 72 31 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20  R r1}.} {1 {not 
6a60: 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f  authorized}}.do_
6a70: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 36 37 20  test auth-1.167 
6a80: 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72  {.  set ::authar
6a90: 67 73 0a 7d 20 7b 72 31 20 74 31 20 74 65 6d 70  gs.} {r1 t1 temp
6aa0: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
6ab0: 68 2d 31 2e 31 36 38 20 7b 0a 20 20 65 78 65 63  h-1.168 {.  exec
6ac0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
6ad0: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d   FROM sqlite_tem
6ae0: 70 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31 20  p_master}.} {t1 
6af0: 72 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  r1}.do_test auth
6b00: 2d 31 2e 31 36 39 20 7b 0a 20 20 70 72 6f 63 20  -1.169 {.  proc 
6b10: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
6b20: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
6b30: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
6b40: 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 22  ="SQLITE_DELETE"
6b50: 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69   && $arg1=="sqli
6b60: 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 7d  te_temp_master"}
6b70: 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   {.      return 
6b80: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20  SQLITE_IGNORE.  
6b90: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
6ba0: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
6bb0: 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54 52  atchsql {DROP TR
6bc0: 49 47 47 45 52 20 72 31 7d 0a 7d 20 7b 30 20 7b  IGGER r1}.} {0 {
6bd0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
6be0: 31 2e 31 37 30 20 7b 0a 20 20 65 78 65 63 73 71  1.170 {.  execsq
6bf0: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
6c00: 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f  ROM sqlite_temp_
6c10: 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31 20 72 31  master}.} {t1 r1
6c20: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
6c30: 2e 31 37 31 20 7b 0a 20 20 70 72 6f 63 20 61 75  .171 {.  proc au
6c40: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
6c50: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
6c60: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
6c70: 53 51 4c 49 54 45 5f 44 52 4f 50 5f 54 45 4d 50  SQLITE_DROP_TEMP
6c80: 5f 54 52 49 47 47 45 52 22 7d 20 7b 0a 20 20 20  _TRIGGER"} {.   
6c90: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
6ca0: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
6cb0: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
6cc0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
6cd0: 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20  LITE_IGNORE.    
6ce0: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
6cf0: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
6d00: 63 68 73 71 6c 20 7b 44 52 4f 50 20 54 52 49 47  chsql {DROP TRIG
6d10: 47 45 52 20 72 31 7d 0a 7d 20 7b 30 20 7b 7d 7d  GER r1}.} {0 {}}
6d20: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
6d30: 31 37 32 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75  172 {.  set ::au
6d40: 74 68 61 72 67 73 0a 7d 20 7b 72 31 20 74 31 20  thargs.} {r1 t1 
6d50: 74 65 6d 70 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  temp {}}.do_test
6d60: 20 61 75 74 68 2d 31 2e 31 37 33 20 7b 0a 20 20   auth-1.173 {.  
6d70: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
6d80: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
6d90: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d 20  _temp_master}.} 
6da0: 7b 74 31 20 72 31 7d 0a 64 6f 5f 74 65 73 74 20  {t1 r1}.do_test 
6db0: 61 75 74 68 2d 31 2e 31 37 34 20 7b 0a 20 20 70  auth-1.174 {.  p
6dc0: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
6dd0: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
6de0: 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g4} {.    if {$c
6df0: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f  ode=="SQLITE_DRO
6e00: 50 5f 54 45 4d 50 5f 54 52 49 47 47 45 52 22 7d  P_TEMP_TRIGGER"}
6e10: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61   {.      set ::a
6e20: 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61  uthargs [list $a
6e30: 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20  rg1 $arg2 $arg3 
6e40: 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74  $arg4].      ret
6e50: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
6e60: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
6e70: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
6e80: 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54 52  atchsql {DROP TR
6e90: 49 47 47 45 52 20 72 31 7d 0a 7d 20 7b 30 20 7b  IGGER r1}.} {0 {
6ea0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
6eb0: 31 2e 31 37 35 20 7b 0a 20 20 73 65 74 20 3a 3a  1.175 {.  set ::
6ec0: 61 75 74 68 61 72 67 73 0a 7d 20 7b 72 31 20 74  authargs.} {r1 t
6ed0: 31 20 74 65 6d 70 20 7b 7d 7d 0a 64 6f 5f 74 65  1 temp {}}.do_te
6ee0: 73 74 20 61 75 74 68 2d 31 2e 31 37 36 20 7b 0a  st auth-1.176 {.
6ef0: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
6f00: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
6f10: 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a  te_temp_master}.
6f20: 7d 20 7b 74 31 7d 0a 0a 64 6f 5f 74 65 73 74 20  } {t1}..do_test 
6f30: 61 75 74 68 2d 31 2e 31 37 37 20 7b 0a 20 20 70  auth-1.177 {.  p
6f40: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
6f50: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
6f60: 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g4} {.    if {$c
6f70: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52 45  ode=="SQLITE_CRE
6f80: 41 54 45 5f 49 4e 44 45 58 22 7d 20 7b 0a 20 20  ATE_INDEX"} {.  
6f90: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
6fa0: 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24  gs [list $arg1 $
6fb0: 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34  arg2 $arg3 $arg4
6fc0: 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  ].      return S
6fd0: 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d  QLITE_DENY.    }
6fe0: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
6ff0: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
7000: 68 73 71 6c 20 7b 43 52 45 41 54 45 20 49 4e 44  hsql {CREATE IND
7010: 45 58 20 69 32 20 4f 4e 20 74 32 28 61 29 7d 0a  EX i2 ON t2(a)}.
7020: 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72  } {1 {not author
7030: 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  ized}}.do_test a
7040: 75 74 68 2d 31 2e 31 37 38 20 7b 0a 20 20 73 65  uth-1.178 {.  se
7050: 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b  t ::authargs.} {
7060: 69 32 20 74 32 20 6d 61 69 6e 20 7b 7d 7d 0a 64  i2 t2 main {}}.d
7070: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 37  o_test auth-1.17
7080: 39 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  9 {.  execsql {S
7090: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
70a0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d  sqlite_master}.}
70b0: 20 7b 74 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75   {t2}.do_test au
70c0: 74 68 2d 31 2e 31 38 30 20 7b 0a 20 20 70 72 6f  th-1.180 {.  pro
70d0: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
70e0: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
70f0: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
7100: 65 3d 3d 22 53 51 4c 49 54 45 5f 49 4e 53 45 52  e=="SQLITE_INSER
7110: 54 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71  T" && $arg1=="sq
7120: 6c 69 74 65 5f 6d 61 73 74 65 72 22 7d 20 7b 0a  lite_master"} {.
7130: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
7140: 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20  ITE_DENY.    }. 
7150: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
7160: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
7170: 71 6c 20 7b 43 52 45 41 54 45 20 49 4e 44 45 58  ql {CREATE INDEX
7180: 20 69 32 20 4f 4e 20 74 32 28 61 29 7d 0a 7d 20   i2 ON t2(a)}.} 
7190: 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a  {1 {not authoriz
71a0: 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  ed}}.do_test aut
71b0: 68 2d 31 2e 31 38 31 20 7b 0a 20 20 65 78 65 63  h-1.181 {.  exec
71c0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
71d0: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
71e0: 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a 64 6f 5f 74  ter}.} {t2}.do_t
71f0: 65 73 74 20 61 75 74 68 2d 31 2e 31 38 32 20 7b  est auth-1.182 {
7200: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
7210: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
7220: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66  3 arg4} {.    if
7230: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
7240: 5f 43 52 45 41 54 45 5f 49 4e 44 45 58 22 7d 20  _CREATE_INDEX"} 
7250: 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75  {.      set ::au
7260: 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72  thargs [list $ar
7270: 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24  g1 $arg2 $arg3 $
7280: 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75  arg4].      retu
7290: 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45  rn SQLITE_IGNORE
72a0: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
72b0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
72c0: 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41    catchsql {CREA
72d0: 54 45 20 49 4e 44 45 58 20 69 32 20 4f 4e 20 74  TE INDEX i2 ON t
72e0: 32 28 62 29 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  2(b)}.} {0 {}}.d
72f0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 38  o_test auth-1.18
7300: 33 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68  3 {.  set ::auth
7310: 61 72 67 73 0a 7d 20 7b 69 32 20 74 32 20 6d 61  args.} {i2 t2 ma
7320: 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  in {}}.do_test a
7330: 75 74 68 2d 31 2e 31 38 34 20 7b 0a 20 20 65 78  uth-1.184 {.  ex
7340: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61  ecsql {SELECT na
7350: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  me FROM sqlite_m
7360: 61 73 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a 64 6f  aster}.} {t2}.do
7370: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 38 35  _test auth-1.185
7380: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
7390: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
73a0: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
73b0: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
73c0: 54 45 5f 49 4e 53 45 52 54 22 20 26 26 20 24 61  TE_INSERT" && $a
73d0: 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 6d 61 73  rg1=="sqlite_mas
73e0: 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 72 65  ter"} {.      re
73f0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f  turn SQLITE_IGNO
7400: 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  RE.    }.    ret
7410: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
7420: 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52  }.  catchsql {CR
7430: 45 41 54 45 20 49 4e 44 45 58 20 69 32 20 4f 4e  EATE INDEX i2 ON
7440: 20 74 32 28 62 29 7d 0a 7d 20 7b 30 20 7b 7d 7d   t2(b)}.} {0 {}}
7450: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
7460: 31 38 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  186 {.  execsql 
7470: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
7480: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d  M sqlite_master}
7490: 0a 7d 20 7b 74 32 7d 0a 64 6f 5f 74 65 73 74 20  .} {t2}.do_test 
74a0: 61 75 74 68 2d 31 2e 31 38 37 20 7b 0a 20 20 70  auth-1.187 {.  p
74b0: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
74c0: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
74d0: 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g4} {.    if {$c
74e0: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52 45  ode=="SQLITE_CRE
74f0: 41 54 45 5f 49 4e 44 45 58 22 7d 20 7b 0a 20 20  ATE_INDEX"} {.  
7500: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
7510: 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24  gs [list $arg1 $
7520: 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34  arg2 $arg3 $arg4
7530: 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  ].      return S
7540: 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20  QLITE_OK.    }. 
7550: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
7560: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
7570: 71 6c 20 7b 43 52 45 41 54 45 20 49 4e 44 45 58  ql {CREATE INDEX
7580: 20 69 32 20 4f 4e 20 74 32 28 61 29 7d 0a 7d 20   i2 ON t2(a)}.} 
7590: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  {0 {}}.do_test a
75a0: 75 74 68 2d 31 2e 31 38 38 20 7b 0a 20 20 73 65  uth-1.188 {.  se
75b0: 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b  t ::authargs.} {
75c0: 69 32 20 74 32 20 6d 61 69 6e 20 7b 7d 7d 0a 64  i2 t2 main {}}.d
75d0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 38  o_test auth-1.18
75e0: 39 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  9 {.  execsql {S
75f0: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
7600: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d  sqlite_master}.}
7610: 20 7b 74 32 20 69 32 7d 0a 0a 64 6f 5f 74 65 73   {t2 i2}..do_tes
7620: 74 20 61 75 74 68 2d 31 2e 31 39 30 20 7b 0a 20  t auth-1.190 {. 
7630: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
7640: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
7650: 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg4} {.    if {
7660: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43  $code=="SQLITE_C
7670: 52 45 41 54 45 5f 54 45 4d 50 5f 49 4e 44 45 58  REATE_TEMP_INDEX
7680: 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a  "} {.      set :
7690: 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20  :authargs [list 
76a0: 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67  $arg1 $arg2 $arg
76b0: 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72  3 $arg4].      r
76c0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e  eturn SQLITE_DEN
76d0: 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  Y.    }.    retu
76e0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
76f0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45  .  catchsql {CRE
7700: 41 54 45 20 49 4e 44 45 58 20 69 31 20 4f 4e 20  ATE INDEX i1 ON 
7710: 74 31 28 61 29 7d 0a 7d 20 7b 31 20 7b 6e 6f 74  t1(a)}.} {1 {not
7720: 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f   authorized}}.do
7730: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 39 31  _test auth-1.191
7740: 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61   {.  set ::autha
7750: 72 67 73 0a 7d 20 7b 69 31 20 74 31 20 74 65 6d  rgs.} {i1 t1 tem
7760: 70 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  p {}}.do_test au
7770: 74 68 2d 31 2e 31 39 32 20 7b 0a 20 20 65 78 65  th-1.192 {.  exe
7780: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d  csql {SELECT nam
7790: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65  e FROM sqlite_te
77a0: 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31  mp_master}.} {t1
77b0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
77c0: 2e 31 39 33 20 7b 0a 20 20 70 72 6f 63 20 61 75  .193 {.  proc au
77d0: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
77e0: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
77f0: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
7800: 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 22 20 26  SQLITE_INSERT" &
7810: 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65  & $arg1=="sqlite
7820: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 7d 20 7b  _temp_master"} {
7830: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
7840: 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a  LITE_DENY.    }.
7850: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
7860: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
7870: 73 71 6c 20 7b 43 52 45 41 54 45 20 49 4e 44 45  sql {CREATE INDE
7880: 58 20 69 31 20 4f 4e 20 74 31 28 62 29 7d 0a 7d  X i1 ON t1(b)}.}
7890: 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69   {1 {not authori
78a0: 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  zed}}.do_test au
78b0: 74 68 2d 31 2e 31 39 34 20 7b 0a 20 20 65 78 65  th-1.194 {.  exe
78c0: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d  csql {SELECT nam
78d0: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65  e FROM sqlite_te
78e0: 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31  mp_master}.} {t1
78f0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
7900: 2e 31 39 35 20 7b 0a 20 20 70 72 6f 63 20 61 75  .195 {.  proc au
7910: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
7920: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
7930: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
7940: 53 51 4c 49 54 45 5f 43 52 45 41 54 45 5f 54 45  SQLITE_CREATE_TE
7950: 4d 50 5f 49 4e 44 45 58 22 7d 20 7b 0a 20 20 20  MP_INDEX"} {.   
7960: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
7970: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
7980: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
7990: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
79a0: 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20  LITE_IGNORE.    
79b0: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
79c0: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
79d0: 63 68 73 71 6c 20 7b 43 52 45 41 54 45 20 49 4e  chsql {CREATE IN
79e0: 44 45 58 20 69 31 20 4f 4e 20 74 31 28 62 29 7d  DEX i1 ON t1(b)}
79f0: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
7a00: 74 20 61 75 74 68 2d 31 2e 31 39 36 20 7b 0a 20  t auth-1.196 {. 
7a10: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a   set ::authargs.
7a20: 7d 20 7b 69 31 20 74 31 20 74 65 6d 70 20 7b 7d  } {i1 t1 temp {}
7a30: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
7a40: 2e 31 39 37 20 7b 0a 20 20 65 78 65 63 73 71 6c  .197 {.  execsql
7a50: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
7a60: 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  OM sqlite_temp_m
7a70: 61 73 74 65 72 7d 0a 7d 20 7b 74 31 7d 0a 64 6f  aster}.} {t1}.do
7a80: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 39 38  _test auth-1.198
7a90: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
7aa0: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
7ab0: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
7ac0: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
7ad0: 54 45 5f 49 4e 53 45 52 54 22 20 26 26 20 24 61  TE_INSERT" && $a
7ae0: 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 74 65 6d  rg1=="sqlite_tem
7af0: 70 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20  p_master"} {.   
7b00: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
7b10: 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20  _IGNORE.    }.  
7b20: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
7b30: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
7b40: 6c 20 7b 43 52 45 41 54 45 20 49 4e 44 45 58 20  l {CREATE INDEX 
7b50: 69 31 20 4f 4e 20 74 31 28 63 29 7d 0a 7d 20 7b  i1 ON t1(c)}.} {
7b60: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  0 {}}.do_test au
7b70: 74 68 2d 31 2e 31 39 39 20 7b 0a 20 20 65 78 65  th-1.199 {.  exe
7b80: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d  csql {SELECT nam
7b90: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65  e FROM sqlite_te
7ba0: 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31  mp_master}.} {t1
7bb0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
7bc0: 2e 32 30 30 20 7b 0a 20 20 70 72 6f 63 20 61 75  .200 {.  proc au
7bd0: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
7be0: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
7bf0: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
7c00: 53 51 4c 49 54 45 5f 43 52 45 41 54 45 5f 54 45  SQLITE_CREATE_TE
7c10: 4d 50 5f 49 4e 44 45 58 22 7d 20 7b 0a 20 20 20  MP_INDEX"} {.   
7c20: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
7c30: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
7c40: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
7c50: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
7c60: 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20  LITE_OK.    }.  
7c70: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
7c80: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
7c90: 6c 20 7b 43 52 45 41 54 45 20 49 4e 44 45 58 20  l {CREATE INDEX 
7ca0: 69 31 20 4f 4e 20 74 31 28 61 29 7d 0a 7d 20 7b  i1 ON t1(a)}.} {
7cb0: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  0 {}}.do_test au
7cc0: 74 68 2d 31 2e 32 30 31 20 7b 0a 20 20 73 65 74  th-1.201 {.  set
7cd0: 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 69   ::authargs.} {i
7ce0: 31 20 74 31 20 74 65 6d 70 20 7b 7d 7d 0a 64 6f  1 t1 temp {}}.do
7cf0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 30 32  _test auth-1.202
7d00: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
7d10: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73  LECT name FROM s
7d20: 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
7d30: 72 7d 0a 7d 20 7b 74 31 20 69 31 7d 0a 0a 64 6f  r}.} {t1 i1}..do
7d40: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 30 33  _test auth-1.203
7d50: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
7d60: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
7d70: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
7d80: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
7d90: 54 45 5f 44 45 4c 45 54 45 22 20 26 26 20 24 61  TE_DELETE" && $a
7da0: 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 6d 61 73  rg1=="sqlite_mas
7db0: 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 72 65  ter"} {.      re
7dc0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59  turn SQLITE_DENY
7dd0: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
7de0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
7df0: 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50    catchsql {DROP
7e00: 20 49 4e 44 45 58 20 69 32 7d 0a 7d 20 7b 31 20   INDEX i2}.} {1 
7e10: 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d  {not authorized}
7e20: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
7e30: 2e 32 30 34 20 7b 0a 20 20 65 78 65 63 73 71 6c  .204 {.  execsql
7e40: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
7e50: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
7e60: 7d 0a 7d 20 7b 74 32 20 69 32 7d 0a 64 6f 5f 74  }.} {t2 i2}.do_t
7e70: 65 73 74 20 61 75 74 68 2d 31 2e 32 30 35 20 7b  est auth-1.205 {
7e80: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
7e90: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
7ea0: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66  3 arg4} {.    if
7eb0: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
7ec0: 5f 44 52 4f 50 5f 49 4e 44 45 58 22 7d 20 7b 0a  _DROP_INDEX"} {.
7ed0: 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68        set ::auth
7ee0: 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31  args [list $arg1
7ef0: 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72   $arg2 $arg3 $ar
7f00: 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  g4].      return
7f10: 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20   SQLITE_DENY.   
7f20: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
7f30: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
7f40: 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 49 4e 44  tchsql {DROP IND
7f50: 45 58 20 69 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74  EX i2}.} {1 {not
7f60: 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f   authorized}}.do
7f70: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 30 36  _test auth-1.206
7f80: 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61   {.  set ::autha
7f90: 72 67 73 0a 7d 20 7b 69 32 20 74 32 20 6d 61 69  rgs.} {i2 t2 mai
7fa0: 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  n {}}.do_test au
7fb0: 74 68 2d 31 2e 32 30 37 20 7b 0a 20 20 65 78 65  th-1.207 {.  exe
7fc0: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d  csql {SELECT nam
7fd0: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  e FROM sqlite_ma
7fe0: 73 74 65 72 7d 0a 7d 20 7b 74 32 20 69 32 7d 0a  ster}.} {t2 i2}.
7ff0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
8000: 30 38 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  08 {.  proc auth
8010: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
8020: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
8030: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
8040: 4c 49 54 45 5f 44 45 4c 45 54 45 22 20 26 26 20  LITE_DELETE" && 
8050: 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 6d  $arg1=="sqlite_m
8060: 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20  aster"} {.      
8070: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47  return SQLITE_IG
8080: 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72  NORE.    }.    r
8090: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
80a0: 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b    }.  catchsql {
80b0: 44 52 4f 50 20 49 4e 44 45 58 20 69 32 7d 0a 7d  DROP INDEX i2}.}
80c0: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
80d0: 61 75 74 68 2d 31 2e 32 30 39 20 7b 0a 20 20 65  auth-1.209 {.  e
80e0: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
80f0: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
8100: 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 20 69 32  master}.} {t2 i2
8110: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
8120: 2e 32 31 30 20 7b 0a 20 20 70 72 6f 63 20 61 75  .210 {.  proc au
8130: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
8140: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
8150: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
8160: 53 51 4c 49 54 45 5f 44 52 4f 50 5f 49 4e 44 45  SQLITE_DROP_INDE
8170: 58 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20  X"} {.      set 
8180: 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74  ::authargs [list
8190: 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72   $arg1 $arg2 $ar
81a0: 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20  g3 $arg4].      
81b0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47  return SQLITE_IG
81c0: 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72  NORE.    }.    r
81d0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
81e0: 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b    }.  catchsql {
81f0: 44 52 4f 50 20 49 4e 44 45 58 20 69 32 7d 0a 7d  DROP INDEX i2}.}
8200: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
8210: 61 75 74 68 2d 31 2e 32 31 31 20 7b 0a 20 20 73  auth-1.211 {.  s
8220: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20  et ::authargs.} 
8230: 7b 69 32 20 74 32 20 6d 61 69 6e 20 7b 7d 7d 0a  {i2 t2 main {}}.
8240: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
8250: 31 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  12 {.  execsql {
8260: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
8270: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a   sqlite_master}.
8280: 7d 20 7b 74 32 20 69 32 7d 0a 64 6f 5f 74 65 73  } {t2 i2}.do_tes
8290: 74 20 61 75 74 68 2d 31 2e 32 31 33 20 7b 0a 20  t auth-1.213 {. 
82a0: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
82b0: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
82c0: 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg4} {.    if {
82d0: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44  $code=="SQLITE_D
82e0: 52 4f 50 5f 49 4e 44 45 58 22 7d 20 7b 0a 20 20  ROP_INDEX"} {.  
82f0: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
8300: 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24  gs [list $arg1 $
8310: 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34  arg2 $arg3 $arg4
8320: 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  ].      return S
8330: 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20  QLITE_OK.    }. 
8340: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
8350: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
8360: 71 6c 20 7b 44 52 4f 50 20 49 4e 44 45 58 20 69  ql {DROP INDEX i
8370: 32 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74  2}.} {0 {}}.do_t
8380: 65 73 74 20 61 75 74 68 2d 31 2e 32 31 34 20 7b  est auth-1.214 {
8390: 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67  .  set ::autharg
83a0: 73 0a 7d 20 7b 69 32 20 74 32 20 6d 61 69 6e 20  s.} {i2 t2 main 
83b0: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
83c0: 2d 31 2e 32 31 35 20 7b 0a 20 20 65 78 65 63 73  -1.215 {.  execs
83d0: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
83e0: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
83f0: 65 72 7d 0a 7d 20 7b 74 32 7d 0a 0a 64 6f 5f 74  er}.} {t2}..do_t
8400: 65 73 74 20 61 75 74 68 2d 31 2e 32 31 36 20 7b  est auth-1.216 {
8410: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
8420: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
8430: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66  3 arg4} {.    if
8440: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
8450: 5f 44 45 4c 45 54 45 22 20 26 26 20 24 61 72 67  _DELETE" && $arg
8460: 31 3d 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f  1=="sqlite_temp_
8470: 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20  master"} {.     
8480: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44   return SQLITE_D
8490: 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  ENY.    }.    re
84a0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
84b0: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44   }.  catchsql {D
84c0: 52 4f 50 20 49 4e 44 45 58 20 69 31 7d 0a 7d 20  ROP INDEX i1}.} 
84d0: 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a  {1 {not authoriz
84e0: 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  ed}}.do_test aut
84f0: 68 2d 31 2e 32 31 37 20 7b 0a 20 20 65 78 65 63  h-1.217 {.  exec
8500: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
8510: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d   FROM sqlite_tem
8520: 70 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31 20  p_master}.} {t1 
8530: 69 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  i1}.do_test auth
8540: 2d 31 2e 32 31 38 20 7b 0a 20 20 70 72 6f 63 20  -1.218 {.  proc 
8550: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
8560: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
8570: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
8580: 3d 22 53 51 4c 49 54 45 5f 44 52 4f 50 5f 54 45  ="SQLITE_DROP_TE
8590: 4d 50 5f 49 4e 44 45 58 22 7d 20 7b 0a 20 20 20  MP_INDEX"} {.   
85a0: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
85b0: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
85c0: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
85d0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
85e0: 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a  LITE_DENY.    }.
85f0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
8600: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
8610: 73 71 6c 20 7b 44 52 4f 50 20 49 4e 44 45 58 20  sql {DROP INDEX 
8620: 69 31 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75  i1}.} {1 {not au
8630: 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65  thorized}}.do_te
8640: 73 74 20 61 75 74 68 2d 31 2e 32 31 39 20 7b 0a  st auth-1.219 {.
8650: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
8660: 0a 7d 20 7b 69 31 20 74 31 20 74 65 6d 70 20 7b  .} {i1 t1 temp {
8670: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
8680: 31 2e 32 32 30 20 7b 0a 20 20 65 78 65 63 73 71  1.220 {.  execsq
8690: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
86a0: 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f  ROM sqlite_temp_
86b0: 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31 20 69 31  master}.} {t1 i1
86c0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
86d0: 2e 32 32 31 20 7b 0a 20 20 70 72 6f 63 20 61 75  .221 {.  proc au
86e0: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
86f0: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
8700: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
8710: 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 22 20 26  SQLITE_DELETE" &
8720: 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65  & $arg1=="sqlite
8730: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 7d 20 7b  _temp_master"} {
8740: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
8750: 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20  LITE_IGNORE.    
8760: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
8770: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
8780: 63 68 73 71 6c 20 7b 44 52 4f 50 20 49 4e 44 45  chsql {DROP INDE
8790: 58 20 69 31 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  X i1}.} {0 {}}.d
87a0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 32  o_test auth-1.22
87b0: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  2 {.  execsql {S
87c0: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
87d0: 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
87e0: 65 72 7d 0a 7d 20 7b 74 31 20 69 31 7d 0a 64 6f  er}.} {t1 i1}.do
87f0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 32 33  _test auth-1.223
8800: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
8810: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
8820: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
8830: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
8840: 54 45 5f 44 52 4f 50 5f 54 45 4d 50 5f 49 4e 44  TE_DROP_TEMP_IND
8850: 45 58 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74  EX"} {.      set
8860: 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73   ::authargs [lis
8870: 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61  t $arg1 $arg2 $a
8880: 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20  rg3 $arg4].     
8890: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49   return SQLITE_I
88a0: 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20  GNORE.    }.    
88b0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
88c0: 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20  .  }.  catchsql 
88d0: 7b 44 52 4f 50 20 49 4e 44 45 58 20 69 31 7d 0a  {DROP INDEX i1}.
88e0: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
88f0: 20 61 75 74 68 2d 31 2e 32 32 34 20 7b 0a 20 20   auth-1.224 {.  
8900: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d  set ::authargs.}
8910: 20 7b 69 31 20 74 31 20 74 65 6d 70 20 7b 7d 7d   {i1 t1 temp {}}
8920: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
8930: 32 32 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  225 {.  execsql 
8940: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
8950: 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  M sqlite_temp_ma
8960: 73 74 65 72 7d 0a 7d 20 7b 74 31 20 69 31 7d 0a  ster}.} {t1 i1}.
8970: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
8980: 32 36 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  26 {.  proc auth
8990: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
89a0: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
89b0: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
89c0: 4c 49 54 45 5f 44 52 4f 50 5f 54 45 4d 50 5f 49  LITE_DROP_TEMP_I
89d0: 4e 44 45 58 22 7d 20 7b 0a 20 20 20 20 20 20 73  NDEX"} {.      s
89e0: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c  et ::authargs [l
89f0: 69 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20  ist $arg1 $arg2 
8a00: 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20  $arg3 $arg4].   
8a10: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
8a20: 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  _OK.    }.    re
8a30: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
8a40: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44   }.  catchsql {D
8a50: 52 4f 50 20 49 4e 44 45 58 20 69 31 7d 0a 7d 20  ROP INDEX i1}.} 
8a60: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  {0 {}}.do_test a
8a70: 75 74 68 2d 31 2e 32 32 37 20 7b 0a 20 20 73 65  uth-1.227 {.  se
8a80: 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b  t ::authargs.} {
8a90: 69 31 20 74 31 20 74 65 6d 70 20 7b 7d 7d 0a 64  i1 t1 temp {}}.d
8aa0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 32  o_test auth-1.22
8ab0: 38 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  8 {.  execsql {S
8ac0: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
8ad0: 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
8ae0: 65 72 7d 0a 7d 20 7b 74 31 7d 0a 0a 64 6f 5f 74  er}.} {t1}..do_t
8af0: 65 73 74 20 61 75 74 68 2d 31 2e 32 32 39 20 7b  est auth-1.229 {
8b00: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
8b10: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
8b20: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66  3 arg4} {.    if
8b30: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
8b40: 5f 50 52 41 47 4d 41 22 7d 20 7b 0a 20 20 20 20  _PRAGMA"} {.    
8b50: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
8b60: 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72   [list $arg1 $ar
8b70: 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a  g2 $arg3 $arg4].
8b80: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
8b90: 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20  ITE_DENY.    }. 
8ba0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
8bb0: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
8bc0: 71 6c 20 7b 50 52 41 47 4d 41 20 66 75 6c 6c 5f  ql {PRAGMA full_
8bd0: 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 3d 6f 6e 7d  column_names=on}
8be0: 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f  .} {1 {not autho
8bf0: 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20  rized}}.do_test 
8c00: 61 75 74 68 2d 31 2e 32 33 30 20 7b 0a 20 20 73  auth-1.230 {.  s
8c10: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20  et ::authargs.} 
8c20: 7b 66 75 6c 6c 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d  {full_column_nam
8c30: 65 73 20 6f 6e 20 7b 7d 20 7b 7d 7d 0a 64 6f 5f  es on {} {}}.do_
8c40: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 33 31 20  test auth-1.231 
8c50: 7b 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 53 45  {.  execsql2 {SE
8c60: 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 32 7d 0a  LECT a FROM t2}.
8c70: 7d 20 7b 61 20 31 31 20 61 20 37 7d 0a 64 6f 5f  } {a 11 a 7}.do_
8c80: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 33 32 20  test auth-1.232 
8c90: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
8ca0: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
8cb0: 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69  g3 arg4} {.    i
8cc0: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
8cd0: 45 5f 50 52 41 47 4d 41 22 7d 20 7b 0a 20 20 20  E_PRAGMA"} {.   
8ce0: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
8cf0: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
8d00: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
8d10: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
8d20: 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20  LITE_IGNORE.    
8d30: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
8d40: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
8d50: 63 68 73 71 6c 20 7b 50 52 41 47 4d 41 20 66 75  chsql {PRAGMA fu
8d60: 6c 6c 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 3d  ll_column_names=
8d70: 6f 6e 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f  on}.} {0 {}}.do_
8d80: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 33 33 20  test auth-1.233 
8d90: 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72  {.  set ::authar
8da0: 67 73 0a 7d 20 7b 66 75 6c 6c 5f 63 6f 6c 75 6d  gs.} {full_colum
8db0: 6e 5f 6e 61 6d 65 73 20 6f 6e 20 7b 7d 20 7b 7d  n_names on {} {}
8dc0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
8dd0: 2e 32 33 34 20 7b 0a 20 20 65 78 65 63 73 71 6c  .234 {.  execsql
8de0: 32 20 7b 53 45 4c 45 43 54 20 61 20 46 52 4f 4d  2 {SELECT a FROM
8df0: 20 74 32 7d 0a 7d 20 7b 61 20 31 31 20 61 20 37   t2}.} {a 11 a 7
8e00: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
8e10: 2e 32 33 35 20 7b 0a 20 20 70 72 6f 63 20 61 75  .235 {.  proc au
8e20: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
8e30: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
8e40: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
8e50: 53 51 4c 49 54 45 5f 50 52 41 47 4d 41 22 7d 20  SQLITE_PRAGMA"} 
8e60: 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75  {.      set ::au
8e70: 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72  thargs [list $ar
8e80: 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24  g1 $arg2 $arg3 $
8e90: 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75  arg4].      retu
8ea0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20  rn SQLITE_OK.   
8eb0: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
8ec0: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
8ed0: 74 63 68 73 71 6c 20 7b 50 52 41 47 4d 41 20 66  tchsql {PRAGMA f
8ee0: 75 6c 6c 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73  ull_column_names
8ef0: 3d 6f 6e 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f  =on}.} {0 {}}.do
8f00: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 33 36  _test auth-1.236
8f10: 20 7b 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 53   {.  execsql2 {S
8f20: 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 32 7d  ELECT a FROM t2}
8f30: 0a 7d 20 7b 74 32 2e 61 20 31 31 20 74 32 2e 61  .} {t2.a 11 t2.a
8f40: 20 37 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68   7}.do_test auth
8f50: 2d 31 2e 32 33 37 20 7b 0a 20 20 70 72 6f 63 20  -1.237 {.  proc 
8f60: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
8f70: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
8f80: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
8f90: 3d 22 53 51 4c 49 54 45 5f 50 52 41 47 4d 41 22  ="SQLITE_PRAGMA"
8fa0: 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a  } {.      set ::
8fb0: 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24  authargs [list $
8fc0: 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33  arg1 $arg2 $arg3
8fd0: 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65   $arg4].      re
8fe0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
8ff0: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
9000: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
9010: 63 61 74 63 68 73 71 6c 20 7b 50 52 41 47 4d 41  catchsql {PRAGMA
9020: 20 66 75 6c 6c 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d   full_column_nam
9030: 65 73 3d 4f 46 46 7d 0a 7d 20 7b 30 20 7b 7d 7d  es=OFF}.} {0 {}}
9040: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
9050: 32 33 38 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75  238 {.  set ::au
9060: 74 68 61 72 67 73 0a 7d 20 7b 66 75 6c 6c 5f 63  thargs.} {full_c
9070: 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 20 4f 46 46 20  olumn_names OFF 
9080: 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  {} {}}.do_test a
9090: 75 74 68 2d 31 2e 32 33 39 20 7b 0a 20 20 65 78  uth-1.239 {.  ex
90a0: 65 63 73 71 6c 32 20 7b 53 45 4c 45 43 54 20 61  ecsql2 {SELECT a
90b0: 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 61 20 31   FROM t2}.} {a 1
90c0: 31 20 61 20 37 7d 0a 0a 64 6f 5f 74 65 73 74 20  1 a 7}..do_test 
90d0: 61 75 74 68 2d 31 2e 32 34 30 20 7b 0a 20 20 70  auth-1.240 {.  p
90e0: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
90f0: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
9100: 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g4} {.    if {$c
9110: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 54 52 41  ode=="SQLITE_TRA
9120: 4e 53 41 43 54 49 4f 4e 22 7d 20 7b 0a 20 20 20  NSACTION"} {.   
9130: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
9140: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
9150: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
9160: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
9170: 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a  LITE_DENY.    }.
9180: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
9190: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
91a0: 73 71 6c 20 7b 42 45 47 49 4e 7d 0a 7d 20 7b 31  sql {BEGIN}.} {1
91b0: 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64   {not authorized
91c0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
91d0: 31 2e 32 34 31 20 7b 0a 20 20 73 65 74 20 3a 3a  1.241 {.  set ::
91e0: 61 75 74 68 61 72 67 73 0a 7d 20 7b 42 45 47 49  authargs.} {BEGI
91f0: 4e 20 7b 7d 20 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74  N {} {} {}}.do_t
9200: 65 73 74 20 61 75 74 68 2d 31 2e 32 34 32 20 7b  est auth-1.242 {
9210: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
9220: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
9230: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66  3 arg4} {.    if
9240: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
9250: 5f 54 52 41 4e 53 41 43 54 49 4f 4e 22 20 26 26  _TRANSACTION" &&
9260: 20 24 61 72 67 31 21 3d 22 42 45 47 49 4e 22 7d   $arg1!="BEGIN"}
9270: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61   {.      set ::a
9280: 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61  uthargs [list $a
9290: 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20  rg1 $arg2 $arg3 
92a0: 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74  $arg4].      ret
92b0: 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a  urn SQLITE_DENY.
92c0: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
92d0: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
92e0: 20 63 61 74 63 68 73 71 6c 20 7b 42 45 47 49 4e   catchsql {BEGIN
92f0: 3b 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32  ; INSERT INTO t2
9300: 20 56 41 4c 55 45 53 28 34 34 2c 35 35 2c 36 36   VALUES(44,55,66
9310: 29 3b 20 43 4f 4d 4d 49 54 7d 0a 7d 20 7b 31 20  ); COMMIT}.} {1 
9320: 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d  {not authorized}
9330: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
9340: 2e 32 34 33 20 7b 0a 20 20 73 65 74 20 3a 3a 61  .243 {.  set ::a
9350: 75 74 68 61 72 67 73 0a 7d 20 7b 43 4f 4d 4d 49  uthargs.} {COMMI
9360: 54 20 7b 7d 20 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74  T {} {} {}}.do_t
9370: 65 73 74 20 61 75 74 68 2d 31 2e 32 34 34 20 7b  est auth-1.244 {
9380: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
9390: 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d 0a 7d 20  CT * FROM t2}.} 
93a0: 7b 31 31 20 32 20 33 33 20 37 20 38 20 39 20 34  {11 2 33 7 8 9 4
93b0: 34 20 35 35 20 36 36 7d 0a 64 6f 5f 74 65 73 74  4 55 66}.do_test
93c0: 20 61 75 74 68 2d 31 2e 32 34 35 20 7b 0a 20 20   auth-1.245 {.  
93d0: 63 61 74 63 68 73 71 6c 20 7b 52 4f 4c 4c 42 41  catchsql {ROLLBA
93e0: 43 4b 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75  CK}.} {1 {not au
93f0: 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65  thorized}}.do_te
9400: 73 74 20 61 75 74 68 2d 31 2e 32 34 36 20 7b 0a  st auth-1.246 {.
9410: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
9420: 0a 7d 20 7b 52 4f 4c 4c 42 41 43 4b 20 7b 7d 20  .} {ROLLBACK {} 
9430: 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  {} {}}.do_test a
9440: 75 74 68 2d 31 2e 32 34 37 20 7b 0a 20 20 63 61  uth-1.247 {.  ca
9450: 74 63 68 73 71 6c 20 7b 45 4e 44 20 54 52 41 4e  tchsql {END TRAN
9460: 53 41 43 54 49 4f 4e 7d 0a 7d 20 7b 31 20 7b 6e  SACTION}.} {1 {n
9470: 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a  ot authorized}}.
9480: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
9490: 34 38 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74  48 {.  set ::aut
94a0: 68 61 72 67 73 0a 7d 20 7b 43 4f 4d 4d 49 54 20  hargs.} {COMMIT 
94b0: 7b 7d 20 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74 65 73  {} {} {}}.do_tes
94c0: 74 20 61 75 74 68 2d 31 2e 32 34 39 20 7b 0a 20  t auth-1.249 {. 
94d0: 20 64 62 20 61 75 74 68 6f 72 69 7a 65 72 20 7b   db authorizer {
94e0: 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 52 4f  }.  catchsql {RO
94f0: 4c 4c 42 41 43 4b 7d 0a 7d 20 7b 30 20 7b 7d 7d  LLBACK}.} {0 {}}
9500: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
9510: 32 35 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  250 {.  execsql 
9520: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
9530: 32 7d 0a 7d 20 7b 31 31 20 32 20 33 33 20 37 20  2}.} {11 2 33 7 
9540: 38 20 39 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 75  8 9}..do_test au
9550: 74 68 2d 32 2e 31 20 7b 0a 20 20 70 72 6f 63 20  th-2.1 {.  proc 
9560: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
9570: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
9580: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
9590: 3d 22 53 51 4c 49 54 45 5f 52 45 41 44 22 20 26  ="SQLITE_READ" &
95a0: 26 20 24 61 72 67 31 3d 3d 22 74 33 22 20 26 26  & $arg1=="t3" &&
95b0: 20 24 61 72 67 32 3d 3d 22 78 22 7d 20 7b 0a 20   $arg2=="x"} {. 
95c0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
95d0: 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20  TE_DENY.    }.  
95e0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
95f0: 4f 4b 0a 20 20 7d 0a 20 20 64 62 20 61 75 74 68  OK.  }.  db auth
9600: 6f 72 69 7a 65 72 20 3a 3a 61 75 74 68 0a 20 20  orizer ::auth.  
9610: 65 78 65 63 73 71 6c 20 7b 43 52 45 41 54 45 20  execsql {CREATE 
9620: 54 41 42 4c 45 20 74 33 28 78 20 49 4e 54 45 47  TABLE t3(x INTEG
9630: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20  ER PRIMARY KEY, 
9640: 79 2c 20 7a 29 7d 0a 20 20 63 61 74 63 68 73 71  y, z)}.  catchsq
9650: 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  l {SELECT * FROM
9660: 20 74 33 7d 0a 7d 20 7b 31 20 7b 61 63 63 65 73   t3}.} {1 {acces
9670: 73 20 74 6f 20 74 33 2e 78 20 69 73 20 70 72 6f  s to t3.x is pro
9680: 68 69 62 69 74 65 64 7d 7d 0a 64 6f 5f 74 65 73  hibited}}.do_tes
9690: 74 20 61 75 74 68 2d 32 2e 31 20 7b 0a 20 20 63  t auth-2.1 {.  c
96a0: 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20  atchsql {SELECT 
96b0: 79 2c 7a 20 46 52 4f 4d 20 74 33 7d 0a 7d 20 7b  y,z FROM t3}.} {
96c0: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  0 {}}.do_test au
96d0: 74 68 2d 32 2e 32 20 7b 0a 20 20 63 61 74 63 68  th-2.2 {.  catch
96e0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 52 4f 57 49  sql {SELECT ROWI
96f0: 44 2c 79 2c 7a 20 46 52 4f 4d 20 74 33 7d 0a 7d  D,y,z FROM t3}.}
9700: 20 7b 31 20 7b 61 63 63 65 73 73 20 74 6f 20 74   {1 {access to t
9710: 33 2e 78 20 69 73 20 70 72 6f 68 69 62 69 74 65  3.x is prohibite
9720: 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  d}}.do_test auth
9730: 2d 32 2e 33 20 7b 0a 20 20 63 61 74 63 68 73 71  -2.3 {.  catchsq
9740: 6c 20 7b 53 45 4c 45 43 54 20 4f 49 44 2c 79 2c  l {SELECT OID,y,
9750: 7a 20 46 52 4f 4d 20 74 33 7d 0a 7d 20 7b 31 20  z FROM t3}.} {1 
9760: 7b 61 63 63 65 73 73 20 74 6f 20 74 33 2e 78 20  {access to t3.x 
9770: 69 73 20 70 72 6f 68 69 62 69 74 65 64 7d 7d 0a  is prohibited}}.
9780: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 32 2e 34  do_test auth-2.4
9790: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
97a0: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
97b0: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
97c0: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
97d0: 54 45 5f 52 45 41 44 22 20 26 26 20 24 61 72 67  TE_READ" && $arg
97e0: 31 3d 3d 22 74 33 22 20 26 26 20 24 61 72 67 32  1=="t3" && $arg2
97f0: 3d 3d 22 78 22 7d 20 7b 0a 20 20 20 20 20 20 72  =="x"} {.      r
9800: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e  eturn SQLITE_IGN
9810: 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  ORE.    }.    re
9820: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
9830: 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 49 4e   }.  execsql {IN
9840: 53 45 52 54 20 49 4e 54 4f 20 74 33 20 56 41 4c  SERT INTO t3 VAL
9850: 55 45 53 28 34 34 2c 35 35 2c 36 36 29 7d 0a 20  UES(44,55,66)}. 
9860: 20 63 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43   catchsql {SELEC
9870: 54 20 2a 20 46 52 4f 4d 20 74 33 7d 0a 7d 20 7b  T * FROM t3}.} {
9880: 30 20 7b 7b 7d 20 35 35 20 36 36 7d 7d 0a 64 6f  0 {{} 55 66}}.do
9890: 5f 74 65 73 74 20 61 75 74 68 2d 32 2e 35 20 7b  _test auth-2.5 {
98a0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 53 45 4c  .  catchsql {SEL
98b0: 45 43 54 20 72 6f 77 69 64 2c 79 2c 7a 20 46 52  ECT rowid,y,z FR
98c0: 4f 4d 20 74 33 7d 0a 7d 20 7b 30 20 7b 7b 7d 20  OM t3}.} {0 {{} 
98d0: 35 35 20 36 36 7d 7d 0a 64 6f 5f 74 65 73 74 20  55 66}}.do_test 
98e0: 61 75 74 68 2d 32 2e 36 20 7b 0a 20 20 70 72 6f  auth-2.6 {.  pro
98f0: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
9900: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
9910: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
9920: 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45 41 44 22  e=="SQLITE_READ"
9930: 20 26 26 20 24 61 72 67 31 3d 3d 22 74 33 22 20   && $arg1=="t3" 
9940: 26 26 20 24 61 72 67 32 3d 3d 22 52 4f 57 49 44  && $arg2=="ROWID
9950: 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72  "} {.      retur
9960: 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a  n SQLITE_IGNORE.
9970: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
9980: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
9990: 20 63 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43   catchsql {SELEC
99a0: 54 20 2a 20 46 52 4f 4d 20 74 33 7d 0a 7d 20 7b  T * FROM t3}.} {
99b0: 30 20 7b 34 34 20 35 35 20 36 36 7d 7d 0a 64 6f  0 {44 55 66}}.do
99c0: 5f 74 65 73 74 20 61 75 74 68 2d 32 2e 37 20 7b  _test auth-2.7 {
99d0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 53 45 4c  .  catchsql {SEL
99e0: 45 43 54 20 52 4f 57 49 44 2c 79 2c 7a 20 46 52  ECT ROWID,y,z FR
99f0: 4f 4d 20 74 33 7d 0a 7d 20 7b 30 20 7b 34 34 20  OM t3}.} {0 {44 
9a00: 35 35 20 36 36 7d 7d 0a 64 6f 5f 74 65 73 74 20  55 66}}.do_test 
9a10: 61 75 74 68 2d 32 2e 38 20 7b 0a 20 20 70 72 6f  auth-2.8 {.  pro
9a20: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
9a30: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
9a40: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
9a50: 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45 41 44 22  e=="SQLITE_READ"
9a60: 20 26 26 20 24 61 72 67 31 3d 3d 22 74 32 22 20   && $arg1=="t2" 
9a70: 26 26 20 24 61 72 67 32 3d 3d 22 52 4f 57 49 44  && $arg2=="ROWID
9a80: 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72  "} {.      retur
9a90: 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a  n SQLITE_IGNORE.
9aa0: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
9ab0: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
9ac0: 20 63 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43   catchsql {SELEC
9ad0: 54 20 52 4f 57 49 44 2c 62 2c 63 20 46 52 4f 4d  T ROWID,b,c FROM
9ae0: 20 74 32 7d 0a 7d 20 7b 30 20 7b 7b 7d 20 32 20   t2}.} {0 {{} 2 
9af0: 33 33 20 7b 7d 20 38 20 39 7d 7d 0a 64 6f 5f 74  33 {} 8 9}}.do_t
9b00: 65 73 74 20 61 75 74 68 2d 32 2e 39 2e 31 20 7b  est auth-2.9.1 {
9b10: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
9b20: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
9b30: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66  3 arg4} {.    if
9b40: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
9b50: 5f 52 45 41 44 22 20 26 26 20 24 61 72 67 31 3d  _READ" && $arg1=
9b60: 3d 22 74 32 22 20 26 26 20 24 61 72 67 32 3d 3d  ="t2" && $arg2==
9b70: 22 52 4f 57 49 44 22 7d 20 7b 0a 20 20 20 20 20  "ROWID"} {.     
9b80: 20 72 65 74 75 72 6e 20 62 6f 67 75 73 0a 20 20   return bogus.  
9b90: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
9ba0: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
9bb0: 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20  atchsql {SELECT 
9bc0: 52 4f 57 49 44 2c 62 2c 63 20 46 52 4f 4d 20 74  ROWID,b,c FROM t
9bd0: 32 7d 0a 7d 20 7b 31 20 7b 69 6c 6c 65 67 61 6c  2}.} {1 {illegal
9be0: 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20 28 39   return value (9
9bf0: 39 39 29 20 66 72 6f 6d 20 74 68 65 20 61 75 74  99) from the aut
9c00: 68 6f 72 69 7a 61 74 69 6f 6e 20 66 75 6e 63 74  horization funct
9c10: 69 6f 6e 20 2d 20 73 68 6f 75 6c 64 20 62 65 20  ion - should be 
9c20: 53 51 4c 49 54 45 5f 4f 4b 2c 20 53 51 4c 49 54  SQLITE_OK, SQLIT
9c30: 45 5f 49 47 4e 4f 52 45 2c 20 6f 72 20 53 51 4c  E_IGNORE, or SQL
9c40: 49 54 45 5f 44 45 4e 59 7d 7d 0a 64 6f 5f 74 65  ITE_DENY}}.do_te
9c50: 73 74 20 61 75 74 68 2d 32 2e 39 2e 32 20 7b 0a  st auth-2.9.2 {.
9c60: 20 20 64 62 20 65 72 72 6f 72 63 6f 64 65 0a 7d    db errorcode.}
9c70: 20 7b 32 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75   {21}.do_test au
9c80: 74 68 2d 32 2e 31 30 20 7b 0a 20 20 70 72 6f 63  th-2.10 {.  proc
9c90: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
9ca0: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
9cb0: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
9cc0: 3d 3d 22 53 51 4c 49 54 45 5f 53 45 4c 45 43 54  =="SQLITE_SELECT
9cd0: 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72  "} {.      retur
9ce0: 6e 20 62 6f 67 75 73 0a 20 20 20 20 7d 0a 20 20  n bogus.    }.  
9cf0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
9d00: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
9d10: 6c 20 7b 53 45 4c 45 43 54 20 52 4f 57 49 44 2c  l {SELECT ROWID,
9d20: 62 2c 63 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b  b,c FROM t2}.} {
9d30: 31 20 7b 69 6c 6c 65 67 61 6c 20 72 65 74 75 72  1 {illegal retur
9d40: 6e 20 76 61 6c 75 65 20 28 31 29 20 66 72 6f 6d  n value (1) from
9d50: 20 74 68 65 20 61 75 74 68 6f 72 69 7a 61 74 69   the authorizati
9d60: 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 2d 20 73 68  on function - sh
9d70: 6f 75 6c 64 20 62 65 20 53 51 4c 49 54 45 5f 4f  ould be SQLITE_O
9d80: 4b 2c 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45  K, SQLITE_IGNORE
9d90: 2c 20 6f 72 20 53 51 4c 49 54 45 5f 44 45 4e 59  , or SQLITE_DENY
9da0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
9db0: 32 2e 31 31 20 7b 0a 20 20 70 72 6f 63 20 61 75  2.11 {.  proc au
9dc0: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
9dd0: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
9de0: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
9df0: 53 51 4c 49 54 45 5f 52 45 41 44 22 20 26 26 20  SQLITE_READ" && 
9e00: 24 61 72 67 32 3d 3d 22 61 22 7d 20 7b 0a 20 20  $arg2=="a"} {.  
9e10: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
9e20: 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20  E_IGNORE.    }. 
9e30: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
9e40: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
9e50: 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f  ql {SELECT * FRO
9e60: 4d 20 74 32 2c 20 74 33 7d 0a 7d 20 7b 30 20 7b  M t2, t3}.} {0 {
9e70: 7b 7d 20 32 20 33 33 20 34 34 20 35 35 20 36 36  {} 2 33 44 55 66
9e80: 20 7b 7d 20 38 20 39 20 34 34 20 35 35 20 36 36   {} 8 9 44 55 66
9e90: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
9ea0: 32 2e 31 31 20 7b 0a 20 20 70 72 6f 63 20 61 75  2.11 {.  proc au
9eb0: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
9ec0: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
9ed0: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
9ee0: 53 51 4c 49 54 45 5f 52 45 41 44 22 20 26 26 20  SQLITE_READ" && 
9ef0: 24 61 72 67 32 3d 3d 22 78 22 7d 20 7b 0a 20 20  $arg2=="x"} {.  
9f00: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
9f10: 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20  E_IGNORE.    }. 
9f20: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
9f30: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
9f40: 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f  ql {SELECT * FRO
9f50: 4d 20 74 32 2c 20 74 33 7d 0a 7d 20 7b 30 20 7b  M t2, t3}.} {0 {
9f60: 31 31 20 32 20 33 33 20 7b 7d 20 35 35 20 36 36  11 2 33 {} 55 66
9f70: 20 37 20 38 20 39 20 7b 7d 20 35 35 20 36 36 7d   7 8 9 {} 55 66}
9f80: 7d 0a 0a 23 20 4d 61 6b 65 20 73 75 72 65 20 74  }..# Make sure t
9f90: 68 65 20 4f 4c 44 20 61 6e 64 20 4e 45 57 20 70  he OLD and NEW p
9fa0: 73 65 75 64 6f 2d 74 61 62 6c 65 73 20 6f 66 20  seudo-tables of 
9fb0: 61 20 74 72 69 67 67 65 72 20 67 65 74 20 61 75  a trigger get au
9fc0: 74 68 6f 72 69 7a 65 64 2e 0a 23 0a 64 6f 5f 74  thorized..#.do_t
9fd0: 65 73 74 20 61 75 74 68 2d 33 2e 31 20 7b 0a 20  est auth-3.1 {. 
9fe0: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
9ff0: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
a000: 61 72 67 34 7d 20 7b 0a 20 20 20 20 72 65 74 75  arg4} {.    retu
a010: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
a020: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
a030: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 78   CREATE TABLE tx
a040: 28 61 31 2c 61 32 2c 62 31 2c 62 32 2c 63 31 2c  (a1,a2,b1,b2,c1,
a050: 63 32 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20  c2);.    CREATE 
a060: 54 52 49 47 47 45 52 20 72 31 20 41 46 54 45 52  TRIGGER r1 AFTER
a070: 20 55 50 44 41 54 45 20 4f 4e 20 74 32 20 46 4f   UPDATE ON t2 FO
a080: 52 20 45 41 43 48 20 52 4f 57 20 42 45 47 49 4e  R EACH ROW BEGIN
a090: 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e  .      INSERT IN
a0a0: 54 4f 20 74 78 20 56 41 4c 55 45 53 28 4f 4c 44  TO tx VALUES(OLD
a0b0: 2e 61 2c 4e 45 57 2e 61 2c 4f 4c 44 2e 62 2c 4e  .a,NEW.a,OLD.b,N
a0c0: 45 57 2e 62 2c 4f 4c 44 2e 63 2c 4e 45 57 2e 63  EW.b,OLD.c,NEW.c
a0d0: 29 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 20 20  );.    END;.    
a0e0: 55 50 44 41 54 45 20 74 32 20 53 45 54 20 61 3d  UPDATE t2 SET a=
a0f0: 61 2b 31 3b 0a 20 20 20 20 53 45 4c 45 43 54 20  a+1;.    SELECT 
a100: 2a 20 46 52 4f 4d 20 74 78 3b 0a 20 20 7d 0a 7d  * FROM tx;.  }.}
a110: 20 7b 31 31 20 31 32 20 32 20 32 20 33 33 20 33   {11 12 2 2 33 3
a120: 33 20 37 20 38 20 38 20 38 20 39 20 39 7d 0a 64  3 7 8 8 8 9 9}.d
a130: 6f 5f 74 65 73 74 20 61 75 74 68 2d 33 2e 32 20  o_test auth-3.2 
a140: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
a150: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
a160: 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69  g3 arg4} {.    i
a170: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
a180: 45 5f 52 45 41 44 22 20 26 26 20 24 61 72 67 31  E_READ" && $arg1
a190: 3d 3d 22 74 32 22 20 26 26 20 24 61 72 67 32 3d  =="t2" && $arg2=
a1a0: 3d 22 63 22 7d 20 7b 0a 20 20 20 20 20 20 72 65  ="c"} {.      re
a1b0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f  turn SQLITE_IGNO
a1c0: 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  RE.    }.    ret
a1d0: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
a1e0: 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  }.  execsql {.  
a1f0: 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 78    DELETE FROM tx
a200: 3b 0a 20 20 20 20 55 50 44 41 54 45 20 74 32 20  ;.    UPDATE t2 
a210: 53 45 54 20 61 3d 61 2b 31 30 30 3b 0a 20 20 20  SET a=a+100;.   
a220: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
a230: 78 3b 0a 20 20 7d 0a 7d 20 7b 31 32 20 31 31 32  x;.  }.} {12 112
a240: 20 32 20 32 20 7b 7d 20 7b 7d 20 38 20 31 30 38   2 2 {} {} 8 108
a250: 20 38 20 38 20 7b 7d 20 7b 7d 7d 0a 0a 23 20 4d   8 8 {} {}}..# M
a260: 61 6b 65 20 73 75 72 65 20 74 68 65 20 6e 61 6d  ake sure the nam
a270: 65 73 20 6f 66 20 76 69 65 77 73 20 61 6e 64 20  es of views and 
a280: 74 72 69 67 67 65 72 73 20 61 72 65 20 70 61 73  triggers are pas
a290: 73 65 64 20 6f 6e 20 6f 6e 20 61 72 67 34 2e 0a  sed on on arg4..
a2a0: 23 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 34  #.do_test auth-4
a2b0: 2e 31 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  .1 {.  proc auth
a2c0: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
a2d0: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
a2e0: 20 20 6c 61 70 70 65 6e 64 20 3a 3a 61 75 74 68    lappend ::auth
a2f0: 61 72 67 73 20 24 63 6f 64 65 20 24 61 72 67 31  args $code $arg1
a300: 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72   $arg2 $arg3 $ar
a310: 67 34 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51  g4.    return SQ
a320: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 73 65  LITE_OK.  }.  se
a330: 74 20 61 75 74 68 61 72 67 73 20 7b 7d 0a 20 20  t authargs {}.  
a340: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 55 50  execsql {.    UP
a350: 44 41 54 45 20 74 32 20 53 45 54 20 61 3d 61 2b  DATE t2 SET a=a+
a360: 31 3b 0a 20 20 7d 0a 20 20 73 65 74 20 61 75 74  1;.  }.  set aut
a370: 68 61 72 67 73 0a 7d 20 5b 6c 69 73 74 20 5c 0a  hargs.} [list \.
a380: 20 20 53 51 4c 49 54 45 5f 52 45 41 44 20 20 20    SQLITE_READ   
a390: 74 32 20 61 20 20 6d 61 69 6e 20 7b 7d 20 5c 0a  t2 a  main {} \.
a3a0: 20 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20    SQLITE_UPDATE 
a3b0: 74 32 20 61 20 20 6d 61 69 6e 20 7b 7d 20 5c 0a  t2 a  main {} \.
a3c0: 20 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 20    SQLITE_INSERT 
a3d0: 74 78 20 7b 7d 20 6d 61 69 6e 20 72 31 20 5c 0a  tx {} main r1 \.
a3e0: 20 20 53 51 4c 49 54 45 5f 52 45 41 44 20 20 20    SQLITE_READ   
a3f0: 74 32 20 61 20 20 6d 61 69 6e 20 72 31 20 5c 0a  t2 a  main r1 \.
a400: 20 20 53 51 4c 49 54 45 5f 52 45 41 44 20 20 20    SQLITE_READ   
a410: 74 32 20 61 20 20 6d 61 69 6e 20 72 31 20 5c 0a  t2 a  main r1 \.
a420: 20 20 53 51 4c 49 54 45 5f 52 45 41 44 20 20 20    SQLITE_READ   
a430: 74 32 20 62 20 20 6d 61 69 6e 20 72 31 20 5c 0a  t2 b  main r1 \.
a440: 20 20 53 51 4c 49 54 45 5f 52 45 41 44 20 20 20    SQLITE_READ   
a450: 74 32 20 62 20 20 6d 61 69 6e 20 72 31 20 5c 0a  t2 b  main r1 \.
a460: 20 20 53 51 4c 49 54 45 5f 52 45 41 44 20 20 20    SQLITE_READ   
a470: 74 32 20 63 20 20 6d 61 69 6e 20 72 31 20 5c 0a  t2 c  main r1 \.
a480: 20 20 53 51 4c 49 54 45 5f 52 45 41 44 20 20 20    SQLITE_READ   
a490: 74 32 20 63 20 20 6d 61 69 6e 20 72 31 5d 0a 64  t2 c  main r1].d
a4a0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 34 2e 32 20  o_test auth-4.2 
a4b0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
a4c0: 20 20 43 52 45 41 54 45 20 56 49 45 57 20 76 31    CREATE VIEW v1
a4d0: 20 41 53 20 53 45 4c 45 43 54 20 61 2b 62 20 41   AS SELECT a+b A
a4e0: 53 20 78 20 46 52 4f 4d 20 74 32 3b 0a 20 20 20  S x FROM t2;.   
a4f0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 76 31   CREATE TABLE v1
a500: 63 68 6e 67 28 78 31 2c 78 32 29 3b 0a 20 20 20  chng(x1,x2);.   
a510: 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20   CREATE TRIGGER 
a520: 72 32 20 49 4e 53 54 45 41 44 20 4f 46 20 55 50  r2 INSTEAD OF UP
a530: 44 41 54 45 20 4f 4e 20 76 31 20 42 45 47 49 4e  DATE ON v1 BEGIN
a540: 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e  .      INSERT IN
a550: 54 4f 20 76 31 63 68 6e 67 20 56 41 4c 55 45 53  TO v1chng VALUES
a560: 28 4f 4c 44 2e 78 2c 4e 45 57 2e 78 29 3b 0a 20  (OLD.x,NEW.x);. 
a570: 20 20 20 45 4e 44 3b 0a 20 20 20 20 53 45 4c 45     END;.    SELE
a580: 43 54 20 2a 20 46 52 4f 4d 20 76 31 3b 0a 20 20  CT * FROM v1;.  
a590: 7d 0a 7d 20 7b 31 31 35 20 31 31 37 7d 0a 64 6f  }.} {115 117}.do
a5a0: 5f 74 65 73 74 20 61 75 74 68 2d 34 2e 33 20 7b  _test auth-4.3 {
a5b0: 0a 20 20 73 65 74 20 61 75 74 68 61 72 67 73 20  .  set authargs 
a5c0: 7b 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  {}.  execsql {. 
a5d0: 20 20 20 55 50 44 41 54 45 20 76 31 20 53 45 54     UPDATE v1 SET
a5e0: 20 78 3d 31 20 57 48 45 52 45 20 78 3d 31 31 37   x=1 WHERE x=117
a5f0: 0a 20 20 7d 0a 20 20 73 65 74 20 61 75 74 68 61  .  }.  set autha
a600: 72 67 73 0a 7d 20 5b 6c 69 73 74 20 5c 0a 20 20  rgs.} [list \.  
a610: 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20 76 31  SQLITE_UPDATE v1
a620: 20 20 20 20 20 78 20 20 6d 61 69 6e 20 7b 7d 20       x  main {} 
a630: 5c 0a 20 20 53 51 4c 49 54 45 5f 52 45 41 44 20  \.  SQLITE_READ 
a640: 20 20 76 31 20 20 20 20 20 78 20 20 6d 61 69 6e    v1     x  main
a650: 20 7b 7d 20 5c 0a 20 20 53 51 4c 49 54 45 5f 53   {} \.  SQLITE_S
a660: 45 4c 45 43 54 20 7b 7d 20 20 20 20 20 7b 7d 20  ELECT {}     {} 
a670: 7b 7d 20 20 20 76 31 20 5c 0a 20 20 53 51 4c 49  {}   v1 \.  SQLI
a680: 54 45 5f 52 45 41 44 20 20 20 74 32 20 20 20 20  TE_READ   t2    
a690: 20 61 20 20 6d 61 69 6e 20 76 31 20 5c 0a 20 20   a  main v1 \.  
a6a0: 53 51 4c 49 54 45 5f 52 45 41 44 20 20 20 74 32  SQLITE_READ   t2
a6b0: 20 20 20 20 20 62 20 20 6d 61 69 6e 20 76 31 20       b  main v1 
a6c0: 5c 0a 20 20 53 51 4c 49 54 45 5f 49 4e 53 45 52  \.  SQLITE_INSER
a6d0: 54 20 76 31 63 68 6e 67 20 7b 7d 20 6d 61 69 6e  T v1chng {} main
a6e0: 20 72 32 20 5c 0a 20 20 53 51 4c 49 54 45 5f 52   r2 \.  SQLITE_R
a6f0: 45 41 44 20 20 20 76 31 20 20 20 20 20 78 20 20  EAD   v1     x  
a700: 6d 61 69 6e 20 72 32 20 5c 0a 20 20 53 51 4c 49  main r2 \.  SQLI
a710: 54 45 5f 52 45 41 44 20 20 20 76 31 20 20 20 20  TE_READ   v1    
a720: 20 78 20 20 6d 61 69 6e 20 72 32 5d 0a 64 6f 5f   x  main r2].do_
a730: 74 65 73 74 20 61 75 74 68 2d 34 2e 34 20 7b 0a  test auth-4.4 {.
a740: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
a750: 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 72  CREATE TRIGGER r
a760: 33 20 49 4e 53 54 45 41 44 20 4f 46 20 44 45 4c  3 INSTEAD OF DEL
a770: 45 54 45 20 4f 4e 20 76 31 20 42 45 47 49 4e 0a  ETE ON v1 BEGIN.
a780: 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54        INSERT INT
a790: 4f 20 76 31 63 68 6e 67 20 56 41 4c 55 45 53 28  O v1chng VALUES(
a7a0: 4f 4c 44 2e 78 2c 4e 55 4c 4c 29 3b 0a 20 20 20  OLD.x,NULL);.   
a7b0: 20 45 4e 44 3b 0a 20 20 20 20 53 45 4c 45 43 54   END;.    SELECT
a7c0: 20 2a 20 46 52 4f 4d 20 76 31 3b 0a 20 20 7d 0a   * FROM v1;.  }.
a7d0: 7d 20 7b 31 31 35 20 31 31 37 7d 0a 64 6f 5f 74  } {115 117}.do_t
a7e0: 65 73 74 20 61 75 74 68 2d 34 2e 35 20 7b 0a 20  est auth-4.5 {. 
a7f0: 20 73 65 74 20 61 75 74 68 61 72 67 73 20 7b 7d   set authargs {}
a800: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
a810: 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 76 31 20   DELETE FROM v1 
a820: 57 48 45 52 45 20 78 3d 31 31 37 0a 20 20 7d 0a  WHERE x=117.  }.
a830: 20 20 73 65 74 20 61 75 74 68 61 72 67 73 0a 7d    set authargs.}
a840: 20 5b 6c 69 73 74 20 5c 0a 20 20 53 51 4c 49 54   [list \.  SQLIT
a850: 45 5f 44 45 4c 45 54 45 20 76 31 20 20 20 20 20  E_DELETE v1     
a860: 7b 7d 20 6d 61 69 6e 20 7b 7d 20 5c 0a 20 20 53  {} main {} \.  S
a870: 51 4c 49 54 45 5f 52 45 41 44 20 20 20 76 31 20  QLITE_READ   v1 
a880: 20 20 20 20 78 20 20 6d 61 69 6e 20 7b 7d 20 5c      x  main {} \
a890: 0a 20 20 53 51 4c 49 54 45 5f 53 45 4c 45 43 54  .  SQLITE_SELECT
a8a0: 20 7b 7d 20 20 20 20 20 7b 7d 20 7b 7d 20 20 20   {}     {} {}   
a8b0: 76 31 20 5c 0a 20 20 53 51 4c 49 54 45 5f 52 45  v1 \.  SQLITE_RE
a8c0: 41 44 20 20 20 74 32 20 20 20 20 20 61 20 20 6d  AD   t2     a  m
a8d0: 61 69 6e 20 76 31 20 5c 0a 20 20 53 51 4c 49 54  ain v1 \.  SQLIT
a8e0: 45 5f 52 45 41 44 20 20 20 74 32 20 20 20 20 20  E_READ   t2     
a8f0: 62 20 20 6d 61 69 6e 20 76 31 20 5c 0a 20 20 53  b  main v1 \.  S
a900: 51 4c 49 54 45 5f 49 4e 53 45 52 54 20 76 31 63  QLITE_INSERT v1c
a910: 68 6e 67 20 7b 7d 20 6d 61 69 6e 20 72 33 20 5c  hng {} main r3 \
a920: 0a 20 20 53 51 4c 49 54 45 5f 52 45 41 44 20 20  .  SQLITE_READ  
a930: 20 76 31 20 20 20 20 20 78 20 20 6d 61 69 6e 20   v1     x  main 
a940: 72 33 5d 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74  r3]..finish_test
a950: 0a                                               .