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

Artifact 1cc252d9e7b3bdc1314199cbf3a0d3c5ed026c21:


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 31 39 20 32 30  h.test,v 1.19 20
0220: 30 34 2f 30 39 2f 33 30 20 31 33 3a 34 33 3a 31  04/09/30 13:43:1
0230: 34 20 64 72 68 20 45 78 70 20 24 0a 23 0a 0a 73  4 drh Exp $.#..s
0240: 65 74 20 74 65 73 74 64 69 72 20 5b 66 69 6c 65  et testdir [file
0250: 20 64 69 72 6e 61 6d 65 20 24 61 72 67 76 30 5d   dirname $argv0]
0260: 0a 73 6f 75 72 63 65 20 24 74 65 73 74 64 69 72  .source $testdir
0270: 2f 74 65 73 74 65 72 2e 74 63 6c 0a 0a 23 20 64  /tester.tcl..# d
0280: 69 73 61 62 6c 65 20 74 68 69 73 20 74 65 73 74  isable this test
0290: 20 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4f   if the SQLITE_O
02a0: 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f  MIT_AUTHORIZATIO
02b0: 4e 20 6d 61 63 72 6f 20 69 73 0a 23 20 64 65 66  N macro is.# def
02c0: 69 6e 65 64 20 64 75 72 69 6e 67 20 63 6f 6d 70  ined during comp
02d0: 69 6c 61 74 69 6f 6e 2e 0a 69 66 20 7b 5b 63 61  ilation..if {[ca
02e0: 74 63 68 20 7b 64 62 20 61 75 74 68 20 7b 7d 7d  tch {db auth {}}
02f0: 20 6d 73 67 5d 7d 20 7b 0a 20 20 66 69 6e 69 73   msg]} {.  finis
0300: 68 5f 74 65 73 74 0a 20 20 72 65 74 75 72 6e 0a  h_test.  return.
0310: 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }..do_test auth-
0320: 31 2e 31 2e 31 20 7b 0a 20 20 64 62 20 63 6c 6f  1.1.1 {.  db clo
0330: 73 65 0a 20 20 73 65 74 20 3a 3a 44 42 20 5b 73  se.  set ::DB [s
0340: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
0350: 62 5d 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b  b].  proc auth {
0360: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
0370: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
0380: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
0390: 54 45 5f 49 4e 53 45 52 54 22 20 26 26 20 24 61  TE_INSERT" && $a
03a0: 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 6d 61 73  rg1=="sqlite_mas
03b0: 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 72 65  ter"} {.      re
03c0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59  turn SQLITE_DENY
03d0: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
03e0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
03f0: 20 20 64 62 20 61 75 74 68 6f 72 69 7a 65 72 20    db authorizer 
0400: 3a 3a 61 75 74 68 0a 20 20 63 61 74 63 68 73 71  ::auth.  catchsq
0410: 6c 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20  l {CREATE TABLE 
0420: 74 31 28 61 2c 62 2c 63 29 7d 0a 7d 20 7b 31 20  t1(a,b,c)}.} {1 
0430: 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d  {not authorized}
0440: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
0450: 2e 31 2e 32 20 7b 0a 20 20 64 62 20 65 72 72 6f  .1.2 {.  db erro
0460: 72 63 6f 64 65 0a 7d 20 7b 32 33 7d 0a 64 6f 5f  rcode.} {23}.do_
0470: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 2e 33 20  test auth-1.1.3 
0480: 7b 0a 20 20 64 62 20 61 75 74 68 6f 72 69 7a 65  {.  db authorize
0490: 72 0a 7d 20 7b 3a 3a 61 75 74 68 7d 0a 64 6f 5f  r.} {::auth}.do_
04a0: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 2e 34 20  test auth-1.1.4 
04b0: 7b 0a 20 20 23 20 54 69 63 6b 65 74 20 23 38 39  {.  # Ticket #89
04c0: 36 2e 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a  6..  catchsql {.
04d0: 20 20 20 20 53 45 4c 45 43 54 20 78 3b 0a 20 20      SELECT x;.  
04e0: 7d 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20  }.} {1 {no such 
04f0: 63 6f 6c 75 6d 6e 3a 20 78 7d 7d 0a 64 6f 5f 74  column: x}}.do_t
0500: 65 73 74 20 61 75 74 68 2d 31 2e 32 20 7b 0a 20  est auth-1.2 {. 
0510: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
0520: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
0530: 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 7d 0a 64  e_master}.} {}.d
0540: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 33 2e  o_test auth-1.3.
0550: 31 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  1 {.  proc auth 
0560: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
0570: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
0580: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
0590: 49 54 45 5f 43 52 45 41 54 45 5f 54 41 42 4c 45  ITE_CREATE_TABLE
05a0: 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a  "} {.      set :
05b0: 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20  :authargs [list 
05c0: 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67  $arg1 $arg2 $arg
05d0: 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72  3 $arg4].      r
05e0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e  eturn SQLITE_DEN
05f0: 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  Y.    }.    retu
0600: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
0610: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45  .  catchsql {CRE
0620: 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c 62  ATE TABLE t1(a,b
0630: 2c 63 29 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61  ,c)}.} {1 {not a
0640: 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74  uthorized}}.do_t
0650: 65 73 74 20 61 75 74 68 2d 31 2e 33 2e 32 20 7b  est auth-1.3.2 {
0660: 0a 20 20 64 62 20 65 72 72 6f 72 63 6f 64 65 0a  .  db errorcode.
0670: 7d 20 7b 32 33 7d 0a 64 6f 5f 74 65 73 74 20 61  } {23}.do_test a
0680: 75 74 68 2d 31 2e 33 2e 33 20 7b 0a 20 20 73 65  uth-1.3.3 {.  se
0690: 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b  t ::authargs.} {
06a0: 74 31 20 7b 7d 20 6d 61 69 6e 20 7b 7d 7d 0a 64  t1 {} main {}}.d
06b0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 34 20  o_test auth-1.4 
06c0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
06d0: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
06e0: 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b  lite_master}.} {
06f0: 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }..do_test auth-
0700: 31 2e 35 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  1.5 {.  proc aut
0710: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
0720: 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20  2 arg3 arg4} {. 
0730: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
0740: 51 4c 49 54 45 5f 49 4e 53 45 52 54 22 20 26 26  QLITE_INSERT" &&
0750: 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f   $arg1=="sqlite_
0760: 74 65 6d 70 5f 6d 61 73 74 65 72 22 7d 20 7b 0a  temp_master"} {.
0770: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
0780: 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20  ITE_DENY.    }. 
0790: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
07a0: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
07b0: 71 6c 20 7b 43 52 45 41 54 45 20 54 45 4d 50 20  ql {CREATE TEMP 
07c0: 54 41 42 4c 45 20 74 31 28 61 2c 62 2c 63 29 7d  TABLE t1(a,b,c)}
07d0: 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f  .} {1 {not autho
07e0: 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20  rized}}.do_test 
07f0: 61 75 74 68 2d 31 2e 36 20 7b 0a 20 20 65 78 65  auth-1.6 {.  exe
0800: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d  csql {SELECT nam
0810: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65  e FROM sqlite_te
0820: 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 7d 0a  mp_master}.} {}.
0830: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 37  do_test auth-1.7
0840: 2e 31 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  .1 {.  proc auth
0850: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
0860: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
0870: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
0880: 4c 49 54 45 5f 43 52 45 41 54 45 5f 54 45 4d 50  LITE_CREATE_TEMP
0890: 5f 54 41 42 4c 45 22 7d 20 7b 0a 20 20 20 20 20  _TABLE"} {.     
08a0: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
08b0: 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67  [list $arg1 $arg
08c0: 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20  2 $arg3 $arg4]. 
08d0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
08e0: 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20  TE_DENY.    }.  
08f0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
0900: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
0910: 6c 20 7b 43 52 45 41 54 45 20 54 45 4d 50 20 54  l {CREATE TEMP T
0920: 41 42 4c 45 20 74 31 28 61 2c 62 2c 63 29 7d 0a  ABLE t1(a,b,c)}.
0930: 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72  } {1 {not author
0940: 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  ized}}.do_test a
0950: 75 74 68 2d 31 2e 37 2e 32 20 7b 0a 20 20 20 73  uth-1.7.2 {.   s
0960: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20  et ::authargs.} 
0970: 7b 74 31 20 7b 7d 20 74 65 6d 70 20 7b 7d 7d 0a  {t1 {} temp {}}.
0980: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 38  do_test auth-1.8
0990: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
09a0: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73  LECT name FROM s
09b0: 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
09c0: 72 7d 0a 7d 20 7b 7d 0a 0a 64 6f 5f 74 65 73 74  r}.} {}..do_test
09d0: 20 61 75 74 68 2d 31 2e 39 20 7b 0a 20 20 70 72   auth-1.9 {.  pr
09e0: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
09f0: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
0a00: 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f  4} {.    if {$co
0a10: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 49 4e 53 45  de=="SQLITE_INSE
0a20: 52 54 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73  RT" && $arg1=="s
0a30: 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 7d 20 7b  qlite_master"} {
0a40: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
0a50: 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20  LITE_IGNORE.    
0a60: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
0a70: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
0a80: 63 68 73 71 6c 20 7b 43 52 45 41 54 45 20 54 41  chsql {CREATE TA
0a90: 42 4c 45 20 74 31 28 61 2c 62 2c 63 29 7d 0a 7d  BLE t1(a,b,c)}.}
0aa0: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
0ab0: 61 75 74 68 2d 31 2e 31 30 20 7b 0a 20 20 65 78  auth-1.10 {.  ex
0ac0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61  ecsql {SELECT na
0ad0: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  me FROM sqlite_m
0ae0: 61 73 74 65 72 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74  aster}.} {}.do_t
0af0: 65 73 74 20 61 75 74 68 2d 31 2e 31 31 20 7b 0a  est auth-1.11 {.
0b00: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
0b10: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
0b20: 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20   arg4} {.    if 
0b30: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
0b40: 43 52 45 41 54 45 5f 54 41 42 4c 45 22 7d 20 7b  CREATE_TABLE"} {
0b50: 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74  .      set ::aut
0b60: 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67  hargs [list $arg
0b70: 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61  1 $arg2 $arg3 $a
0b80: 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72  rg4].      retur
0b90: 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a  n SQLITE_IGNORE.
0ba0: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
0bb0: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
0bc0: 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54   catchsql {CREAT
0bd0: 45 20 54 41 42 4c 45 20 74 31 28 61 2c 62 2c 63  E TABLE t1(a,b,c
0be0: 29 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74  )}.} {0 {}}.do_t
0bf0: 65 73 74 20 61 75 74 68 2d 31 2e 31 32 20 7b 0a  est auth-1.12 {.
0c00: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
0c10: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
0c20: 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 7d 0a  te_master}.} {}.
0c30: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
0c40: 33 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  3 {.  proc auth 
0c50: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
0c60: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
0c70: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
0c80: 49 54 45 5f 49 4e 53 45 52 54 22 20 26 26 20 24  ITE_INSERT" && $
0c90: 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 74 65  arg1=="sqlite_te
0ca0: 6d 70 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20  mp_master"} {.  
0cb0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
0cc0: 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20  E_IGNORE.    }. 
0cd0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
0ce0: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
0cf0: 71 6c 20 7b 43 52 45 41 54 45 20 54 45 4d 50 20  ql {CREATE TEMP 
0d00: 54 41 42 4c 45 20 74 31 28 61 2c 62 2c 63 29 7d  TABLE t1(a,b,c)}
0d10: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
0d20: 74 20 61 75 74 68 2d 31 2e 31 34 20 7b 0a 20 20  t auth-1.14 {.  
0d30: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
0d40: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
0d50: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d 20  _temp_master}.} 
0d60: 7b 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  {}.do_test auth-
0d70: 31 2e 31 35 20 7b 0a 20 20 70 72 6f 63 20 61 75  1.15 {.  proc au
0d80: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
0d90: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
0da0: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
0db0: 53 51 4c 49 54 45 5f 43 52 45 41 54 45 5f 54 45  SQLITE_CREATE_TE
0dc0: 4d 50 5f 54 41 42 4c 45 22 7d 20 7b 0a 20 20 20  MP_TABLE"} {.   
0dd0: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
0de0: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
0df0: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
0e00: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
0e10: 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20  LITE_IGNORE.    
0e20: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
0e30: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
0e40: 63 68 73 71 6c 20 7b 43 52 45 41 54 45 20 54 45  chsql {CREATE TE
0e50: 4d 50 20 54 41 42 4c 45 20 74 31 28 61 2c 62 2c  MP TABLE t1(a,b,
0e60: 63 29 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f  c)}.} {0 {}}.do_
0e70: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 36 20 7b  test auth-1.16 {
0e80: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
0e90: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
0ea0: 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d  ite_temp_master}
0eb0: 0a 7d 20 7b 7d 0a 0a 64 6f 5f 74 65 73 74 20 61  .} {}..do_test a
0ec0: 75 74 68 2d 31 2e 31 37 20 7b 0a 20 20 70 72 6f  uth-1.17 {.  pro
0ed0: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
0ee0: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
0ef0: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
0f00: 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52 45 41 54  e=="SQLITE_CREAT
0f10: 45 5f 54 41 42 4c 45 22 7d 20 7b 0a 20 20 20 20  E_TABLE"} {.    
0f20: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
0f30: 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72   [list $arg1 $ar
0f40: 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a  g2 $arg3 $arg4].
0f50: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
0f60: 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20  ITE_DENY.    }. 
0f70: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
0f80: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
0f90: 71 6c 20 7b 43 52 45 41 54 45 20 54 45 4d 50 20  ql {CREATE TEMP 
0fa0: 54 41 42 4c 45 20 74 31 28 61 2c 62 2c 63 29 7d  TABLE t1(a,b,c)}
0fb0: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
0fc0: 74 20 61 75 74 68 2d 31 2e 31 38 20 7b 0a 20 20  t auth-1.18 {.  
0fd0: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
0fe0: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
0ff0: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d 20  _temp_master}.} 
1000: 7b 74 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  {t1}.do_test aut
1010: 68 2d 31 2e 31 39 2e 31 20 7b 0a 20 20 73 65 74  h-1.19.1 {.  set
1020: 20 3a 3a 61 75 74 68 61 72 67 73 20 7b 7d 0a 20   ::authargs {}. 
1030: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
1040: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
1050: 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg4} {.    if {
1060: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43  $code=="SQLITE_C
1070: 52 45 41 54 45 5f 54 45 4d 50 5f 54 41 42 4c 45  REATE_TEMP_TABLE
1080: 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a  "} {.      set :
1090: 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20  :authargs [list 
10a0: 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67  $arg1 $arg2 $arg
10b0: 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72  3 $arg4].      r
10c0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e  eturn SQLITE_DEN
10d0: 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  Y.    }.    retu
10e0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
10f0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45  .  catchsql {CRE
1100: 41 54 45 20 54 41 42 4c 45 20 74 32 28 61 2c 62  ATE TABLE t2(a,b
1110: 2c 63 29 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f  ,c)}.} {0 {}}.do
1120: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 39 2e  _test auth-1.19.
1130: 32 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68  2 {.  set ::auth
1140: 61 72 67 73 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  args.} {}.do_tes
1150: 74 20 61 75 74 68 2d 31 2e 32 30 20 7b 0a 20 20  t auth-1.20 {.  
1160: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
1170: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
1180: 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a  _master}.} {t2}.
1190: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
11a0: 32 31 2e 31 20 7b 0a 20 20 70 72 6f 63 20 61 75  21.1 {.  proc au
11b0: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
11c0: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
11d0: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
11e0: 53 51 4c 49 54 45 5f 44 52 4f 50 5f 54 41 42 4c  SQLITE_DROP_TABL
11f0: 45 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20  E"} {.      set 
1200: 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74  ::authargs [list
1210: 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72   $arg1 $arg2 $ar
1220: 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20  g3 $arg4].      
1230: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45  return SQLITE_DE
1240: 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  NY.    }.    ret
1250: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
1260: 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52  }.  catchsql {DR
1270: 4f 50 20 54 41 42 4c 45 20 74 32 7d 0a 7d 20 7b  OP TABLE t2}.} {
1280: 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65  1 {not authorize
1290: 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  d}}.do_test auth
12a0: 2d 31 2e 32 31 2e 32 20 7b 0a 20 20 73 65 74 20  -1.21.2 {.  set 
12b0: 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 74 32  ::authargs.} {t2
12c0: 20 7b 7d 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f   {} main {}}.do_
12d0: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 32 20 7b  test auth-1.22 {
12e0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
12f0: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
1300: 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74  ite_master}.} {t
1310: 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  2}.do_test auth-
1320: 31 2e 32 33 2e 31 20 7b 0a 20 20 70 72 6f 63 20  1.23.1 {.  proc 
1330: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
1340: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
1350: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
1360: 3d 22 53 51 4c 49 54 45 5f 44 52 4f 50 5f 54 41  ="SQLITE_DROP_TA
1370: 42 4c 45 22 7d 20 7b 0a 20 20 20 20 20 20 73 65  BLE"} {.      se
1380: 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69  t ::authargs [li
1390: 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24  st $arg1 $arg2 $
13a0: 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20  arg3 $arg4].    
13b0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
13c0: 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20  IGNORE.    }.   
13d0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
13e0: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
13f0: 20 7b 44 52 4f 50 20 54 41 42 4c 45 20 74 32 7d   {DROP TABLE t2}
1400: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
1410: 74 20 61 75 74 68 2d 31 2e 32 33 2e 32 20 7b 0a  t auth-1.23.2 {.
1420: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
1430: 0a 7d 20 7b 74 32 20 7b 7d 20 6d 61 69 6e 20 7b  .} {t2 {} main {
1440: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
1450: 31 2e 32 34 20 7b 0a 20 20 65 78 65 63 73 71 6c  1.24 {.  execsql
1460: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
1470: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
1480: 7d 0a 7d 20 7b 74 32 7d 0a 0a 64 6f 5f 74 65 73  }.} {t2}..do_tes
1490: 74 20 61 75 74 68 2d 31 2e 32 35 20 7b 0a 20 20  t auth-1.25 {.  
14a0: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
14b0: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
14c0: 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg4} {.    if {$
14d0: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52  code=="SQLITE_DR
14e0: 4f 50 5f 54 45 4d 50 5f 54 41 42 4c 45 22 7d 20  OP_TEMP_TABLE"} 
14f0: 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75  {.      set ::au
1500: 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72  thargs [list $ar
1510: 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24  g1 $arg2 $arg3 $
1520: 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75  arg4].      retu
1530: 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20  rn SQLITE_DENY. 
1540: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
1550: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
1560: 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54  catchsql {DROP T
1570: 41 42 4c 45 20 74 31 7d 0a 7d 20 7b 31 20 7b 6e  ABLE t1}.} {1 {n
1580: 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a  ot authorized}}.
1590: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
15a0: 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  6 {.  execsql {S
15b0: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
15c0: 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
15d0: 65 72 7d 0a 7d 20 7b 74 31 7d 0a 64 6f 5f 74 65  er}.} {t1}.do_te
15e0: 73 74 20 61 75 74 68 2d 31 2e 32 37 20 7b 0a 20  st auth-1.27 {. 
15f0: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
1600: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
1610: 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg4} {.    if {
1620: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44  $code=="SQLITE_D
1630: 52 4f 50 5f 54 45 4d 50 5f 54 41 42 4c 45 22 7d  ROP_TEMP_TABLE"}
1640: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61   {.      set ::a
1650: 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61  uthargs [list $a
1660: 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20  rg1 $arg2 $arg3 
1670: 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74  $arg4].      ret
1680: 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52  urn SQLITE_IGNOR
1690: 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  E.    }.    retu
16a0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
16b0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f  .  catchsql {DRO
16c0: 50 20 54 41 42 4c 45 20 74 31 7d 0a 7d 20 7b 30  P TABLE t1}.} {0
16d0: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
16e0: 68 2d 31 2e 32 38 20 7b 0a 20 20 65 78 65 63 73  h-1.28 {.  execs
16f0: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
1700: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70  FROM sqlite_temp
1710: 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31 7d 0a  _master}.} {t1}.
1720: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
1730: 32 39 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  29 {.  proc auth
1740: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
1750: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
1760: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
1770: 4c 49 54 45 5f 49 4e 53 45 52 54 22 20 26 26 20  LITE_INSERT" && 
1780: 24 61 72 67 31 3d 3d 22 74 32 22 7d 20 7b 0a 20  $arg1=="t2"} {. 
1790: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
17a0: 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20  TE_DENY.    }.  
17b0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
17c0: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
17d0: 6c 20 7b 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  l {INSERT INTO t
17e0: 32 20 56 41 4c 55 45 53 28 31 2c 32 2c 33 29 7d  2 VALUES(1,2,3)}
17f0: 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f  .} {1 {not autho
1800: 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20  rized}}.do_test 
1810: 61 75 74 68 2d 31 2e 33 30 20 7b 0a 20 20 65 78  auth-1.30 {.  ex
1820: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20  ecsql {SELECT * 
1830: 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 7d 0a 64 6f  FROM t2}.} {}.do
1840: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 33 31 20  _test auth-1.31 
1850: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
1860: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
1870: 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69  g3 arg4} {.    i
1880: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
1890: 45 5f 49 4e 53 45 52 54 22 20 26 26 20 24 61 72  E_INSERT" && $ar
18a0: 67 31 3d 3d 22 74 32 22 7d 20 7b 0a 20 20 20 20  g1=="t2"} {.    
18b0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
18c0: 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20  IGNORE.    }.   
18d0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
18e0: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
18f0: 20 7b 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32   {INSERT INTO t2
1900: 20 56 41 4c 55 45 53 28 31 2c 32 2c 33 29 7d 0a   VALUES(1,2,3)}.
1910: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
1920: 20 61 75 74 68 2d 31 2e 33 32 20 7b 0a 20 20 65   auth-1.32 {.  e
1930: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a  xecsql {SELECT *
1940: 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 7d 0a 64   FROM t2}.} {}.d
1950: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 33 33  o_test auth-1.33
1960: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
1970: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
1980: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
1990: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
19a0: 54 45 5f 49 4e 53 45 52 54 22 20 26 26 20 24 61  TE_INSERT" && $a
19b0: 72 67 31 3d 3d 22 74 31 22 7d 20 7b 0a 20 20 20  rg1=="t1"} {.   
19c0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
19d0: 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20  _IGNORE.    }.  
19e0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
19f0: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
1a00: 6c 20 7b 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  l {INSERT INTO t
1a10: 32 20 56 41 4c 55 45 53 28 31 2c 32 2c 33 29 7d  2 VALUES(1,2,3)}
1a20: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
1a30: 74 20 61 75 74 68 2d 31 2e 33 34 20 7b 0a 20 20  t auth-1.34 {.  
1a40: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
1a50: 2a 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31 20  * FROM t2}.} {1 
1a60: 32 20 33 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 75  2 3}..do_test au
1a70: 74 68 2d 31 2e 33 35 2e 31 20 7b 0a 20 20 70 72  th-1.35.1 {.  pr
1a80: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
1a90: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
1aa0: 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f  4} {.    if {$co
1ab0: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45 41 44  de=="SQLITE_READ
1ac0: 22 20 26 26 20 24 61 72 67 31 3d 3d 22 74 32 22  " && $arg1=="t2"
1ad0: 20 26 26 20 24 61 72 67 32 3d 3d 22 62 22 7d 20   && $arg2=="b"} 
1ae0: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  {.      return S
1af0: 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d  QLITE_DENY.    }
1b00: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
1b10: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
1b20: 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46  hsql {SELECT * F
1b30: 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31 20 7b 61 63  ROM t2}.} {1 {ac
1b40: 63 65 73 73 20 74 6f 20 74 32 2e 62 20 69 73 20  cess to t2.b is 
1b50: 70 72 6f 68 69 62 69 74 65 64 7d 7d 0a 64 6f 5f  prohibited}}.do_
1b60: 74 65 73 74 20 61 75 74 68 2d 31 2e 33 35 2e 32  test auth-1.35.2
1b70: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 41 54   {.  execsql {AT
1b80: 54 41 43 48 20 44 41 54 41 42 41 53 45 20 27 74  TACH DATABASE 't
1b90: 65 73 74 2e 64 62 27 20 41 53 20 74 77 6f 7d 0a  est.db' AS two}.
1ba0: 20 20 63 61 74 63 68 73 71 6c 20 7b 53 45 4c 45    catchsql {SELE
1bb0: 43 54 20 2a 20 46 52 4f 4d 20 74 77 6f 2e 74 32  CT * FROM two.t2
1bc0: 7d 0a 7d 20 7b 31 20 7b 61 63 63 65 73 73 20 74  }.} {1 {access t
1bd0: 6f 20 74 77 6f 2e 74 32 2e 62 20 69 73 20 70 72  o two.t2.b is pr
1be0: 6f 68 69 62 69 74 65 64 7d 7d 0a 65 78 65 63 73  ohibited}}.execs
1bf0: 71 6c 20 7b 44 45 54 41 43 48 20 44 41 54 41 42  ql {DETACH DATAB
1c00: 41 53 45 20 74 77 6f 7d 0a 64 6f 5f 74 65 73 74  ASE two}.do_test
1c10: 20 61 75 74 68 2d 31 2e 33 36 20 7b 0a 20 20 70   auth-1.36 {.  p
1c20: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
1c30: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
1c40: 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g4} {.    if {$c
1c50: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45 41  ode=="SQLITE_REA
1c60: 44 22 20 26 26 20 24 61 72 67 31 3d 3d 22 74 32  D" && $arg1=="t2
1c70: 22 20 26 26 20 24 61 72 67 32 3d 3d 22 62 22 7d  " && $arg2=="b"}
1c80: 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   {.      return 
1c90: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20  SQLITE_IGNORE.  
1ca0: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
1cb0: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
1cc0: 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20  atchsql {SELECT 
1cd0: 2a 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 30 20  * FROM t2}.} {0 
1ce0: 7b 31 20 7b 7d 20 33 7d 7d 0a 64 6f 5f 74 65 73  {1 {} 3}}.do_tes
1cf0: 74 20 61 75 74 68 2d 31 2e 33 37 20 7b 0a 20 20  t auth-1.37 {.  
1d00: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
1d10: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
1d20: 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg4} {.    if {$
1d30: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45  code=="SQLITE_RE
1d40: 41 44 22 20 26 26 20 24 61 72 67 31 3d 3d 22 74  AD" && $arg1=="t
1d50: 32 22 20 26 26 20 24 61 72 67 32 3d 3d 22 62 22  2" && $arg2=="b"
1d60: 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  } {.      return
1d70: 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20   SQLITE_IGNORE. 
1d80: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
1d90: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
1da0: 63 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54  catchsql {SELECT
1db0: 20 2a 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45   * FROM t2 WHERE
1dc0: 20 62 3d 32 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64   b=2}.} {0 {}}.d
1dd0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 33 38  o_test auth-1.38
1de0: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
1df0: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
1e00: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
1e10: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
1e20: 54 45 5f 52 45 41 44 22 20 26 26 20 24 61 72 67  TE_READ" && $arg
1e30: 31 3d 3d 22 74 32 22 20 26 26 20 24 61 72 67 32  1=="t2" && $arg2
1e40: 3d 3d 22 61 22 7d 20 7b 0a 20 20 20 20 20 20 72  =="a"} {.      r
1e50: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e  eturn SQLITE_IGN
1e60: 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  ORE.    }.    re
1e70: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
1e80: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 53   }.  catchsql {S
1e90: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 20  ELECT * FROM t2 
1ea0: 57 48 45 52 45 20 62 3d 32 7d 0a 7d 20 7b 30 20  WHERE b=2}.} {0 
1eb0: 7b 7b 7d 20 32 20 33 7d 7d 0a 64 6f 5f 74 65 73  {{} 2 3}}.do_tes
1ec0: 74 20 61 75 74 68 2d 31 2e 33 39 20 7b 0a 20 20  t auth-1.39 {.  
1ed0: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
1ee0: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
1ef0: 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg4} {.    if {$
1f00: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45  code=="SQLITE_RE
1f10: 41 44 22 20 26 26 20 24 61 72 67 31 3d 3d 22 74  AD" && $arg1=="t
1f20: 32 22 20 26 26 20 24 61 72 67 32 3d 3d 22 62 22  2" && $arg2=="b"
1f30: 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  } {.      return
1f40: 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20   SQLITE_IGNORE. 
1f50: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
1f60: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
1f70: 63 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54  catchsql {SELECT
1f80: 20 2a 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45   * FROM t2 WHERE
1f90: 20 62 20 49 53 20 4e 55 4c 4c 7d 0a 7d 20 7b 30   b IS NULL}.} {0
1fa0: 20 7b 31 20 7b 7d 20 33 7d 7d 0a 64 6f 5f 74 65   {1 {} 3}}.do_te
1fb0: 73 74 20 61 75 74 68 2d 31 2e 34 30 20 7b 0a 20  st auth-1.40 {. 
1fc0: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
1fd0: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
1fe0: 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg4} {.    if {
1ff0: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 52  $code=="SQLITE_R
2000: 45 41 44 22 20 26 26 20 24 61 72 67 31 3d 3d 22  EAD" && $arg1=="
2010: 74 32 22 20 26 26 20 24 61 72 67 32 3d 3d 22 62  t2" && $arg2=="b
2020: 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72  "} {.      retur
2030: 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20  n SQLITE_DENY.  
2040: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
2050: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
2060: 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20  atchsql {SELECT 
2070: 61 2c 63 20 46 52 4f 4d 20 74 32 20 57 48 45 52  a,c FROM t2 WHER
2080: 45 20 62 20 49 53 20 4e 55 4c 4c 7d 0a 7d 20 7b  E b IS NULL}.} {
2090: 31 20 7b 61 63 63 65 73 73 20 74 6f 20 74 32 2e  1 {access to t2.
20a0: 62 20 69 73 20 70 72 6f 68 69 62 69 74 65 64 7d  b is prohibited}
20b0: 7d 0a 20 20 0a 64 6f 5f 74 65 73 74 20 61 75 74  }.  .do_test aut
20c0: 68 2d 31 2e 34 31 20 7b 0a 20 20 70 72 6f 63 20  h-1.41 {.  proc 
20d0: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
20e0: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
20f0: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
2100: 3d 22 53 51 4c 49 54 45 5f 55 50 44 41 54 45 22  ="SQLITE_UPDATE"
2110: 20 26 26 20 24 61 72 67 31 3d 3d 22 74 32 22 20   && $arg1=="t2" 
2120: 26 26 20 24 61 72 67 32 3d 3d 22 62 22 7d 20 7b  && $arg2=="b"} {
2130: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
2140: 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a  LITE_DENY.    }.
2150: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
2160: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
2170: 73 71 6c 20 7b 55 50 44 41 54 45 20 74 32 20 53  sql {UPDATE t2 S
2180: 45 54 20 61 3d 31 31 7d 0a 7d 20 7b 30 20 7b 7d  ET a=11}.} {0 {}
2190: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
21a0: 2e 34 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .42 {.  execsql 
21b0: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
21c0: 32 7d 0a 7d 20 7b 31 31 20 32 20 33 7d 0a 64 6f  2}.} {11 2 3}.do
21d0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 34 33 20  _test auth-1.43 
21e0: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
21f0: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
2200: 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69  g3 arg4} {.    i
2210: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
2220: 45 5f 55 50 44 41 54 45 22 20 26 26 20 24 61 72  E_UPDATE" && $ar
2230: 67 31 3d 3d 22 74 32 22 20 26 26 20 24 61 72 67  g1=="t2" && $arg
2240: 32 3d 3d 22 62 22 7d 20 7b 0a 20 20 20 20 20 20  2=="b"} {.      
2250: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45  return SQLITE_DE
2260: 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  NY.    }.    ret
2270: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
2280: 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 55 50  }.  catchsql {UP
2290: 44 41 54 45 20 74 32 20 53 45 54 20 62 3d 32 32  DATE t2 SET b=22
22a0: 2c 20 63 3d 33 33 7d 0a 7d 20 7b 31 20 7b 6e 6f  , c=33}.} {1 {no
22b0: 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64  t authorized}}.d
22c0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 34 34  o_test auth-1.44
22d0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
22e0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d 0a  LECT * FROM t2}.
22f0: 7d 20 7b 31 31 20 32 20 33 7d 0a 64 6f 5f 74 65  } {11 2 3}.do_te
2300: 73 74 20 61 75 74 68 2d 31 2e 34 35 20 7b 0a 20  st auth-1.45 {. 
2310: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
2320: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
2330: 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg4} {.    if {
2340: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 55  $code=="SQLITE_U
2350: 50 44 41 54 45 22 20 26 26 20 24 61 72 67 31 3d  PDATE" && $arg1=
2360: 3d 22 74 32 22 20 26 26 20 24 61 72 67 32 3d 3d  ="t2" && $arg2==
2370: 22 62 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74  "b"} {.      ret
2380: 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52  urn SQLITE_IGNOR
2390: 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  E.    }.    retu
23a0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
23b0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 55 50 44  .  catchsql {UPD
23c0: 41 54 45 20 74 32 20 53 45 54 20 62 3d 32 32 2c  ATE t2 SET b=22,
23d0: 20 63 3d 33 33 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a   c=33}.} {0 {}}.
23e0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 34  do_test auth-1.4
23f0: 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  6 {.  execsql {S
2400: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d  ELECT * FROM t2}
2410: 0a 7d 20 7b 31 31 20 32 20 33 33 7d 0a 0a 64 6f  .} {11 2 33}..do
2420: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 34 37 20  _test auth-1.47 
2430: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
2440: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
2450: 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69  g3 arg4} {.    i
2460: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
2470: 45 5f 44 45 4c 45 54 45 22 20 26 26 20 24 61 72  E_DELETE" && $ar
2480: 67 31 3d 3d 22 74 32 22 7d 20 7b 0a 20 20 20 20  g1=="t2"} {.    
2490: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
24a0: 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72  DENY.    }.    r
24b0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
24c0: 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b    }.  catchsql {
24d0: 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 32 20 57  DELETE FROM t2 W
24e0: 48 45 52 45 20 61 3d 31 31 7d 0a 7d 20 7b 31 20  HERE a=11}.} {1 
24f0: 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d  {not authorized}
2500: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
2510: 2e 34 38 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .48 {.  execsql 
2520: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
2530: 32 7d 0a 7d 20 7b 31 31 20 32 20 33 33 7d 0a 64  2}.} {11 2 33}.d
2540: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 34 39  o_test auth-1.49
2550: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
2560: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
2570: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
2580: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
2590: 54 45 5f 44 45 4c 45 54 45 22 20 26 26 20 24 61  TE_DELETE" && $a
25a0: 72 67 31 3d 3d 22 74 32 22 7d 20 7b 0a 20 20 20  rg1=="t2"} {.   
25b0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
25c0: 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20  _IGNORE.    }.  
25d0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
25e0: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
25f0: 6c 20 7b 44 45 4c 45 54 45 20 46 52 4f 4d 20 74  l {DELETE FROM t
2600: 32 20 57 48 45 52 45 20 61 3d 31 31 7d 0a 7d 20  2 WHERE a=11}.} 
2610: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  {0 {}}.do_test a
2620: 75 74 68 2d 31 2e 35 30 20 7b 0a 20 20 65 78 65  uth-1.50 {.  exe
2630: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46  csql {SELECT * F
2640: 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31 31 20 32 20  ROM t2}.} {11 2 
2650: 33 33 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 75 74  33}..do_test aut
2660: 68 2d 31 2e 35 31 20 7b 0a 20 20 70 72 6f 63 20  h-1.51 {.  proc 
2670: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
2680: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
2690: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
26a0: 3d 22 53 51 4c 49 54 45 5f 53 45 4c 45 43 54 22  ="SQLITE_SELECT"
26b0: 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  } {.      return
26c0: 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20   SQLITE_DENY.   
26d0: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
26e0: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
26f0: 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a  tchsql {SELECT *
2700: 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31 20 7b   FROM t2}.} {1 {
2710: 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d  not authorized}}
2720: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
2730: 35 32 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  52 {.  proc auth
2740: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
2750: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
2760: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
2770: 4c 49 54 45 5f 53 45 4c 45 43 54 22 7d 20 7b 0a  LITE_SELECT"} {.
2780: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
2790: 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d  ITE_IGNORE.    }
27a0: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
27b0: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
27c0: 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46  hsql {SELECT * F
27d0: 52 4f 4d 20 74 32 7d 0a 7d 20 7b 30 20 7b 7d 7d  ROM t2}.} {0 {}}
27e0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
27f0: 35 33 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  53 {.  proc auth
2800: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
2810: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
2820: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
2830: 4c 49 54 45 5f 53 45 4c 45 43 54 22 7d 20 7b 0a  LITE_SELECT"} {.
2840: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
2850: 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20  ITE_OK.    }.   
2860: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
2870: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
2880: 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   {SELECT * FROM 
2890: 74 32 7d 0a 7d 20 7b 30 20 7b 31 31 20 32 20 33  t2}.} {0 {11 2 3
28a0: 33 7d 7d 0a 0a 23 20 55 70 64 61 74 65 20 66 6f  3}}..# Update fo
28b0: 72 20 76 65 72 73 69 6f 6e 20 33 3a 20 54 68 65  r version 3: The
28c0: 72 65 20 75 73 65 64 20 74 6f 20 62 65 20 61 20  re used to be a 
28d0: 68 61 6e 64 66 75 6c 20 6f 66 20 74 65 73 74 20  handful of test 
28e0: 68 65 72 65 20 74 68 61 74 0a 23 20 74 65 73 74  here that.# test
28f0: 65 64 20 74 68 65 20 61 75 74 68 6f 72 69 73 61  ed the authorisa
2900: 74 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 77 69  tion callback wi
2910: 74 68 20 74 68 65 20 43 4f 50 59 20 63 6f 6d 6d  th the COPY comm
2920: 61 6e 64 2e 20 54 68 65 20 66 6f 6c 6c 6f 77 69  and. The followi
2930: 6e 67 0a 23 20 74 65 73 74 20 6d 61 6b 65 73 20  ng.# test makes 
2940: 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73  the same databas
2950: 65 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e 73 20  e modifications 
2960: 61 73 20 74 68 65 79 20 75 73 65 64 20 74 6f 2e  as they used to.
2970: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
2980: 35 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  54 {.  execsql {
2990: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56  INSERT INTO t2 V
29a0: 41 4c 55 45 53 28 37 2c 20 38 2c 20 39 29 3b 7d  ALUES(7, 8, 9);}
29b0: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 61 75  .} {}.do_test au
29c0: 74 68 2d 31 2e 35 35 20 7b 0a 20 20 65 78 65 63  th-1.55 {.  exec
29d0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52  sql {SELECT * FR
29e0: 4f 4d 20 74 32 7d 0a 7d 20 7b 31 31 20 32 20 33  OM t2}.} {11 2 3
29f0: 33 20 37 20 38 20 39 7d 0a 0a 64 6f 5f 74 65 73  3 7 8 9}..do_tes
2a00: 74 20 61 75 74 68 2d 31 2e 36 33 20 7b 0a 20 20  t auth-1.63 {.  
2a10: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
2a20: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
2a30: 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg4} {.    if {$
2a40: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45  code=="SQLITE_DE
2a50: 4c 45 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d  LETE" && $arg1==
2a60: 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 7d  "sqlite_master"}
2a70: 20 7b 0a 20 20 20 20 20 20 20 72 65 74 75 72 6e   {.       return
2a80: 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20   SQLITE_DENY.   
2a90: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
2aa0: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
2ab0: 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54 41 42  tchsql {DROP TAB
2ac0: 4c 45 20 74 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74  LE t2}.} {1 {not
2ad0: 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f   authorized}}.do
2ae0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 36 34 20  _test auth-1.64 
2af0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
2b00: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
2b10: 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b  lite_master}.} {
2b20: 74 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  t2}.do_test auth
2b30: 2d 31 2e 36 35 20 7b 0a 20 20 70 72 6f 63 20 61  -1.65 {.  proc a
2b40: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
2b50: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
2b60: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
2b70: 22 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 22 20  "SQLITE_DELETE" 
2b80: 26 26 20 24 61 72 67 31 3d 3d 22 74 32 22 7d 20  && $arg1=="t2"} 
2b90: 7b 0a 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  {.       return 
2ba0: 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20  SQLITE_DENY.    
2bb0: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
2bc0: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
2bd0: 63 68 73 71 6c 20 7b 44 52 4f 50 20 54 41 42 4c  chsql {DROP TABL
2be0: 45 20 74 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20  E t2}.} {1 {not 
2bf0: 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f  authorized}}.do_
2c00: 74 65 73 74 20 61 75 74 68 2d 31 2e 36 36 20 7b  test auth-1.66 {
2c10: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
2c20: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
2c30: 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74  ite_master}.} {t
2c40: 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  2}.do_test auth-
2c50: 31 2e 36 37 20 7b 0a 20 20 70 72 6f 63 20 61 75  1.67 {.  proc au
2c60: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
2c70: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
2c80: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
2c90: 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 22 20 26  SQLITE_DELETE" &
2ca0: 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65  & $arg1=="sqlite
2cb0: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 7d 20 7b  _temp_master"} {
2cc0: 0a 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  .       return S
2cd0: 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d  QLITE_DENY.    }
2ce0: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
2cf0: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
2d00: 68 73 71 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45  hsql {DROP TABLE
2d10: 20 74 31 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61   t1}.} {1 {not a
2d20: 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74  uthorized}}.do_t
2d30: 65 73 74 20 61 75 74 68 2d 31 2e 36 38 20 7b 0a  est auth-1.68 {.
2d40: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
2d50: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
2d60: 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a  te_temp_master}.
2d70: 7d 20 7b 74 31 7d 0a 64 6f 5f 74 65 73 74 20 61  } {t1}.do_test a
2d80: 75 74 68 2d 31 2e 36 39 20 7b 0a 20 20 70 72 6f  uth-1.69 {.  pro
2d90: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
2da0: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
2db0: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
2dc0: 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45 54  e=="SQLITE_DELET
2dd0: 45 22 20 26 26 20 24 61 72 67 31 3d 3d 22 74 31  E" && $arg1=="t1
2de0: 22 7d 20 7b 0a 20 20 20 20 20 20 20 72 65 74 75  "} {.       retu
2df0: 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20  rn SQLITE_DENY. 
2e00: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
2e10: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
2e20: 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54  catchsql {DROP T
2e30: 41 42 4c 45 20 74 31 7d 0a 7d 20 7b 31 20 7b 6e  ABLE t1}.} {1 {n
2e40: 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a  ot authorized}}.
2e50: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 37  do_test auth-1.7
2e60: 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  0 {.  execsql {S
2e70: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
2e80: 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
2e90: 65 72 7d 0a 7d 20 7b 74 31 7d 0a 0a 64 6f 5f 74  er}.} {t1}..do_t
2ea0: 65 73 74 20 61 75 74 68 2d 31 2e 37 31 20 7b 0a  est auth-1.71 {.
2eb0: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
2ec0: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
2ed0: 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20   arg4} {.    if 
2ee0: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
2ef0: 44 45 4c 45 54 45 22 20 26 26 20 24 61 72 67 31  DELETE" && $arg1
2f00: 3d 3d 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  =="sqlite_master
2f10: 22 7d 20 7b 0a 20 20 20 20 20 20 20 72 65 74 75  "} {.       retu
2f20: 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45  rn SQLITE_IGNORE
2f30: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
2f40: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
2f50: 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50    catchsql {DROP
2f60: 20 54 41 42 4c 45 20 74 32 7d 0a 7d 20 7b 30 20   TABLE t2}.} {0 
2f70: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
2f80: 2d 31 2e 37 32 20 7b 0a 20 20 65 78 65 63 73 71  -1.72 {.  execsq
2f90: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
2fa0: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
2fb0: 72 7d 0a 7d 20 7b 74 32 7d 0a 64 6f 5f 74 65 73  r}.} {t2}.do_tes
2fc0: 74 20 61 75 74 68 2d 31 2e 37 33 20 7b 0a 20 20  t auth-1.73 {.  
2fd0: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
2fe0: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
2ff0: 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg4} {.    if {$
3000: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45  code=="SQLITE_DE
3010: 4c 45 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d  LETE" && $arg1==
3020: 22 74 32 22 7d 20 7b 0a 20 20 20 20 20 20 20 72  "t2"} {.       r
3030: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e  eturn SQLITE_IGN
3040: 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  ORE.    }.    re
3050: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
3060: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44   }.  catchsql {D
3070: 52 4f 50 20 54 41 42 4c 45 20 74 32 7d 0a 7d 20  ROP TABLE t2}.} 
3080: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  {0 {}}.do_test a
3090: 75 74 68 2d 31 2e 37 34 20 7b 0a 20 20 65 78 65  uth-1.74 {.  exe
30a0: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d  csql {SELECT nam
30b0: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  e FROM sqlite_ma
30c0: 73 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a 64 6f 5f  ster}.} {t2}.do_
30d0: 74 65 73 74 20 61 75 74 68 2d 31 2e 37 35 20 7b  test auth-1.75 {
30e0: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
30f0: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
3100: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66  3 arg4} {.    if
3110: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
3120: 5f 44 45 4c 45 54 45 22 20 26 26 20 24 61 72 67  _DELETE" && $arg
3130: 31 3d 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f  1=="sqlite_temp_
3140: 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20  master"} {.     
3150: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
3160: 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20  IGNORE.    }.   
3170: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
3180: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
3190: 20 7b 44 52 4f 50 20 54 41 42 4c 45 20 74 31 7d   {DROP TABLE t1}
31a0: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
31b0: 74 20 61 75 74 68 2d 31 2e 37 36 20 7b 0a 20 20  t auth-1.76 {.  
31c0: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
31d0: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
31e0: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d 20  _temp_master}.} 
31f0: 7b 74 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  {t1}.do_test aut
3200: 68 2d 31 2e 37 37 20 7b 0a 20 20 70 72 6f 63 20  h-1.77 {.  proc 
3210: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
3220: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
3230: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
3240: 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 22  ="SQLITE_DELETE"
3250: 20 26 26 20 24 61 72 67 31 3d 3d 22 74 31 22 7d   && $arg1=="t1"}
3260: 20 7b 0a 20 20 20 20 20 20 20 72 65 74 75 72 6e   {.       return
3270: 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20   SQLITE_IGNORE. 
3280: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
3290: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
32a0: 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54  catchsql {DROP T
32b0: 41 42 4c 45 20 74 31 7d 0a 7d 20 7b 30 20 7b 7d  ABLE t1}.} {0 {}
32c0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
32d0: 2e 37 38 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .78 {.  execsql 
32e0: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
32f0: 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  M sqlite_temp_ma
3300: 73 74 65 72 7d 0a 7d 20 7b 74 31 7d 0a 0a 64 6f  ster}.} {t1}..do
3310: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 37 39 20  _test auth-1.79 
3320: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
3330: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
3340: 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69  g3 arg4} {.    i
3350: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
3360: 45 5f 43 52 45 41 54 45 5f 56 49 45 57 22 7d 20  E_CREATE_VIEW"} 
3370: 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75  {.      set ::au
3380: 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72  thargs [list $ar
3390: 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24  g1 $arg2 $arg3 $
33a0: 61 72 67 34 5d 20 0a 20 20 20 20 20 20 72 65 74  arg4] .      ret
33b0: 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a  urn SQLITE_DENY.
33c0: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
33d0: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
33e0: 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54   catchsql {CREAT
33f0: 45 20 56 49 45 57 20 76 31 20 41 53 20 53 45 4c  E VIEW v1 AS SEL
3400: 45 43 54 20 61 2b 31 2c 62 2b 31 20 46 52 4f 4d  ECT a+1,b+1 FROM
3410: 20 74 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61   t2}.} {1 {not a
3420: 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74  uthorized}}.do_t
3430: 65 73 74 20 61 75 74 68 2d 31 2e 38 30 20 7b 0a  est auth-1.80 {.
3440: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
3450: 0a 7d 20 7b 76 31 20 7b 7d 20 6d 61 69 6e 20 7b  .} {v1 {} main {
3460: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
3470: 31 2e 38 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  1.81 {.  execsql
3480: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
3490: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
34a0: 7d 0a 7d 20 7b 74 32 7d 0a 64 6f 5f 74 65 73 74  }.} {t2}.do_test
34b0: 20 61 75 74 68 2d 31 2e 38 32 20 7b 0a 20 20 70   auth-1.82 {.  p
34c0: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
34d0: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
34e0: 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g4} {.    if {$c
34f0: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52 45  ode=="SQLITE_CRE
3500: 41 54 45 5f 56 49 45 57 22 7d 20 7b 0a 20 20 20  ATE_VIEW"} {.   
3510: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
3520: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
3530: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
3540: 20 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53   .      return S
3550: 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20  QLITE_IGNORE.   
3560: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
3570: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
3580: 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45 20 56  tchsql {CREATE V
3590: 49 45 57 20 76 31 20 41 53 20 53 45 4c 45 43 54  IEW v1 AS SELECT
35a0: 20 61 2b 31 2c 62 2b 31 20 46 52 4f 4d 20 74 32   a+1,b+1 FROM t2
35b0: 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  }.} {0 {}}.do_te
35c0: 73 74 20 61 75 74 68 2d 31 2e 38 33 20 7b 0a 20  st auth-1.83 {. 
35d0: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a   set ::authargs.
35e0: 7d 20 7b 76 31 20 7b 7d 20 6d 61 69 6e 20 7b 7d  } {v1 {} main {}
35f0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
3600: 2e 38 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .84 {.  execsql 
3610: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
3620: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d  M sqlite_master}
3630: 0a 7d 20 7b 74 32 7d 0a 0a 64 6f 5f 74 65 73 74  .} {t2}..do_test
3640: 20 61 75 74 68 2d 31 2e 38 35 20 7b 0a 20 20 70   auth-1.85 {.  p
3650: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
3660: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
3670: 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g4} {.    if {$c
3680: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52 45  ode=="SQLITE_CRE
3690: 41 54 45 5f 54 45 4d 50 5f 56 49 45 57 22 7d 20  ATE_TEMP_VIEW"} 
36a0: 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75  {.      set ::au
36b0: 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72  thargs [list $ar
36c0: 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24  g1 $arg2 $arg3 $
36d0: 61 72 67 34 5d 20 0a 20 20 20 20 20 20 72 65 74  arg4] .      ret
36e0: 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a  urn SQLITE_DENY.
36f0: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
3700: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
3710: 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54   catchsql {CREAT
3720: 45 20 54 45 4d 50 4f 52 41 52 59 20 56 49 45 57  E TEMPORARY VIEW
3730: 20 76 31 20 41 53 20 53 45 4c 45 43 54 20 61 2b   v1 AS SELECT a+
3740: 31 2c 62 2b 31 20 46 52 4f 4d 20 74 32 7d 0a 7d  1,b+1 FROM t2}.}
3750: 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69   {1 {not authori
3760: 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  zed}}.do_test au
3770: 74 68 2d 31 2e 38 36 20 7b 0a 20 20 73 65 74 20  th-1.86 {.  set 
3780: 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 76 31  ::authargs.} {v1
3790: 20 7b 7d 20 74 65 6d 70 20 7b 7d 7d 0a 64 6f 5f   {} temp {}}.do_
37a0: 74 65 73 74 20 61 75 74 68 2d 31 2e 38 37 20 7b  test auth-1.87 {
37b0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
37c0: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
37d0: 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d  ite_temp_master}
37e0: 0a 7d 20 7b 74 31 7d 0a 64 6f 5f 74 65 73 74 20  .} {t1}.do_test 
37f0: 61 75 74 68 2d 31 2e 38 38 20 7b 0a 20 20 70 72  auth-1.88 {.  pr
3800: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
3810: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
3820: 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f  4} {.    if {$co
3830: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52 45 41  de=="SQLITE_CREA
3840: 54 45 5f 54 45 4d 50 5f 56 49 45 57 22 7d 20 7b  TE_TEMP_VIEW"} {
3850: 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74  .      set ::aut
3860: 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67  hargs [list $arg
3870: 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61  1 $arg2 $arg3 $a
3880: 72 67 34 5d 20 0a 20 20 20 20 20 20 72 65 74 75  rg4] .      retu
3890: 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45  rn SQLITE_IGNORE
38a0: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
38b0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
38c0: 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41    catchsql {CREA
38d0: 54 45 20 54 45 4d 50 4f 52 41 52 59 20 56 49 45  TE TEMPORARY VIE
38e0: 57 20 76 31 20 41 53 20 53 45 4c 45 43 54 20 61  W v1 AS SELECT a
38f0: 2b 31 2c 62 2b 31 20 46 52 4f 4d 20 74 32 7d 0a  +1,b+1 FROM t2}.
3900: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
3910: 20 61 75 74 68 2d 31 2e 38 39 20 7b 0a 20 20 73   auth-1.89 {.  s
3920: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20  et ::authargs.} 
3930: 7b 76 31 20 7b 7d 20 74 65 6d 70 20 7b 7d 7d 0a  {v1 {} temp {}}.
3940: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 39  do_test auth-1.9
3950: 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  0 {.  execsql {S
3960: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
3970: 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
3980: 65 72 7d 0a 7d 20 7b 74 31 7d 0a 0a 64 6f 5f 74  er}.} {t1}..do_t
3990: 65 73 74 20 61 75 74 68 2d 31 2e 39 31 20 7b 0a  est auth-1.91 {.
39a0: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
39b0: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
39c0: 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20   arg4} {.    if 
39d0: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
39e0: 49 4e 53 45 52 54 22 20 26 26 20 24 61 72 67 31  INSERT" && $arg1
39f0: 3d 3d 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  =="sqlite_master
3a00: 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72  "} {.      retur
3a10: 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20  n SQLITE_DENY.  
3a20: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
3a30: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
3a40: 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45 20  atchsql {CREATE 
3a50: 56 49 45 57 20 76 31 20 41 53 20 53 45 4c 45 43  VIEW v1 AS SELEC
3a60: 54 20 61 2b 31 2c 62 2b 31 20 46 52 4f 4d 20 74  T a+1,b+1 FROM t
3a70: 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74  2}.} {1 {not aut
3a80: 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73  horized}}.do_tes
3a90: 74 20 61 75 74 68 2d 31 2e 39 32 20 7b 0a 20 20  t auth-1.92 {.  
3aa0: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
3ab0: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
3ac0: 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a  _master}.} {t2}.
3ad0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 39  do_test auth-1.9
3ae0: 33 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  3 {.  proc auth 
3af0: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
3b00: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
3b10: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
3b20: 49 54 45 5f 49 4e 53 45 52 54 22 20 26 26 20 24  ITE_INSERT" && $
3b30: 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 6d 61  arg1=="sqlite_ma
3b40: 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 72  ster"} {.      r
3b50: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e  eturn SQLITE_IGN
3b60: 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  ORE.    }.    re
3b70: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
3b80: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 43   }.  catchsql {C
3b90: 52 45 41 54 45 20 56 49 45 57 20 76 31 20 41 53  REATE VIEW v1 AS
3ba0: 20 53 45 4c 45 43 54 20 61 2b 31 2c 62 2b 31 20   SELECT a+1,b+1 
3bb0: 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 30 20 7b 7d  FROM t2}.} {0 {}
3bc0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
3bd0: 2e 39 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .94 {.  execsql 
3be0: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
3bf0: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d  M sqlite_master}
3c00: 0a 7d 20 7b 74 32 7d 0a 0a 64 6f 5f 74 65 73 74  .} {t2}..do_test
3c10: 20 61 75 74 68 2d 31 2e 39 35 20 7b 0a 20 20 70   auth-1.95 {.  p
3c20: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
3c30: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
3c40: 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g4} {.    if {$c
3c50: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 49 4e 53  ode=="SQLITE_INS
3c60: 45 52 54 22 20 26 26 20 24 61 72 67 31 3d 3d 22  ERT" && $arg1=="
3c70: 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
3c80: 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74  er"} {.      ret
3c90: 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a  urn SQLITE_DENY.
3ca0: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
3cb0: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
3cc0: 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54   catchsql {CREAT
3cd0: 45 20 54 45 4d 50 4f 52 41 52 59 20 56 49 45 57  E TEMPORARY VIEW
3ce0: 20 76 31 20 41 53 20 53 45 4c 45 43 54 20 61 2b   v1 AS SELECT a+
3cf0: 31 2c 62 2b 31 20 46 52 4f 4d 20 74 32 7d 0a 7d  1,b+1 FROM t2}.}
3d00: 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69   {1 {not authori
3d10: 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  zed}}.do_test au
3d20: 74 68 2d 31 2e 39 36 20 7b 0a 20 20 65 78 65 63  th-1.96 {.  exec
3d30: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
3d40: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d   FROM sqlite_tem
3d50: 70 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31 7d  p_master}.} {t1}
3d60: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
3d70: 39 37 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  97 {.  proc auth
3d80: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
3d90: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
3da0: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
3db0: 4c 49 54 45 5f 49 4e 53 45 52 54 22 20 26 26 20  LITE_INSERT" && 
3dc0: 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 74  $arg1=="sqlite_t
3dd0: 65 6d 70 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20  emp_master"} {. 
3de0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
3df0: 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a  TE_IGNORE.    }.
3e00: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
3e10: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
3e20: 73 71 6c 20 7b 43 52 45 41 54 45 20 54 45 4d 50  sql {CREATE TEMP
3e30: 4f 52 41 52 59 20 56 49 45 57 20 76 31 20 41 53  ORARY VIEW v1 AS
3e40: 20 53 45 4c 45 43 54 20 61 2b 31 2c 62 2b 31 20   SELECT a+1,b+1 
3e50: 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 30 20 7b 7d  FROM t2}.} {0 {}
3e60: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
3e70: 2e 39 38 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .98 {.  execsql 
3e80: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
3e90: 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  M sqlite_temp_ma
3ea0: 73 74 65 72 7d 0a 7d 20 7b 74 31 7d 0a 0a 64 6f  ster}.} {t1}..do
3eb0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 39 39 20  _test auth-1.99 
3ec0: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
3ed0: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
3ee0: 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69  g3 arg4} {.    i
3ef0: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
3f00: 45 5f 44 45 4c 45 54 45 22 20 26 26 20 24 61 72  E_DELETE" && $ar
3f10: 67 31 3d 3d 22 73 71 6c 69 74 65 5f 6d 61 73 74  g1=="sqlite_mast
3f20: 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74  er"} {.      ret
3f30: 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a  urn SQLITE_DENY.
3f40: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
3f50: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
3f60: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
3f70: 43 52 45 41 54 45 20 56 49 45 57 20 76 32 20 41  CREATE VIEW v2 A
3f80: 53 20 53 45 4c 45 43 54 20 61 2b 31 2c 62 2b 31  S SELECT a+1,b+1
3f90: 20 46 52 4f 4d 20 74 32 3b 0a 20 20 20 20 44 52   FROM t2;.    DR
3fa0: 4f 50 20 56 49 45 57 20 76 32 0a 20 20 7d 0a 7d  OP VIEW v2.  }.}
3fb0: 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69   {1 {not authori
3fc0: 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  zed}}.do_test au
3fd0: 74 68 2d 31 2e 31 30 30 20 7b 0a 20 20 65 78 65  th-1.100 {.  exe
3fe0: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d  csql {SELECT nam
3ff0: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  e FROM sqlite_ma
4000: 73 74 65 72 7d 0a 7d 20 7b 74 32 20 76 32 7d 0a  ster}.} {t2 v2}.
4010: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
4020: 30 31 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  01 {.  proc auth
4030: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
4040: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
4050: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
4060: 4c 49 54 45 5f 44 52 4f 50 5f 56 49 45 57 22 7d  LITE_DROP_VIEW"}
4070: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61   {.      set ::a
4080: 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61  uthargs [list $a
4090: 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20  rg1 $arg2 $arg3 
40a0: 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74  $arg4].      ret
40b0: 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a  urn SQLITE_DENY.
40c0: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
40d0: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
40e0: 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20   catchsql {DROP 
40f0: 56 49 45 57 20 76 32 7d 0a 7d 20 7b 31 20 7b 6e  VIEW v2}.} {1 {n
4100: 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a  ot authorized}}.
4110: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
4120: 30 32 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74  02 {.  set ::aut
4130: 68 61 72 67 73 0a 7d 20 7b 76 32 20 7b 7d 20 6d  hargs.} {v2 {} m
4140: 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20  ain {}}.do_test 
4150: 61 75 74 68 2d 31 2e 31 30 33 20 7b 0a 20 20 65  auth-1.103 {.  e
4160: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
4170: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
4180: 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 20 76 32  master}.} {t2 v2
4190: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
41a0: 2e 31 30 34 20 7b 0a 20 20 70 72 6f 63 20 61 75  .104 {.  proc au
41b0: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
41c0: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
41d0: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
41e0: 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 22 20 26  SQLITE_DELETE" &
41f0: 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65  & $arg1=="sqlite
4200: 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20  _master"} {.    
4210: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
4220: 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20  IGNORE.    }.   
4230: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
4240: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
4250: 20 7b 44 52 4f 50 20 56 49 45 57 20 76 32 7d 0a   {DROP VIEW v2}.
4260: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
4270: 20 61 75 74 68 2d 31 2e 31 30 35 20 7b 0a 20 20   auth-1.105 {.  
4280: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
4290: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
42a0: 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 20 76  _master}.} {t2 v
42b0: 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  2}.do_test auth-
42c0: 31 2e 31 30 36 20 7b 0a 20 20 70 72 6f 63 20 61  1.106 {.  proc a
42d0: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
42e0: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
42f0: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
4300: 22 53 51 4c 49 54 45 5f 44 52 4f 50 5f 56 49 45  "SQLITE_DROP_VIE
4310: 57 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20  W"} {.      set 
4320: 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74  ::authargs [list
4330: 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72   $arg1 $arg2 $ar
4340: 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20  g3 $arg4].      
4350: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47  return SQLITE_IG
4360: 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72  NORE.    }.    r
4370: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
4380: 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b    }.  catchsql {
4390: 44 52 4f 50 20 56 49 45 57 20 76 32 7d 0a 7d 20  DROP VIEW v2}.} 
43a0: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  {0 {}}.do_test a
43b0: 75 74 68 2d 31 2e 31 30 37 20 7b 0a 20 20 73 65  uth-1.107 {.  se
43c0: 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b  t ::authargs.} {
43d0: 76 32 20 7b 7d 20 6d 61 69 6e 20 7b 7d 7d 0a 64  v2 {} main {}}.d
43e0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 30  o_test auth-1.10
43f0: 38 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  8 {.  execsql {S
4400: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
4410: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d  sqlite_master}.}
4420: 20 7b 74 32 20 76 32 7d 0a 64 6f 5f 74 65 73 74   {t2 v2}.do_test
4430: 20 61 75 74 68 2d 31 2e 31 30 39 20 7b 0a 20 20   auth-1.109 {.  
4440: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
4450: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
4460: 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg4} {.    if {$
4470: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52  code=="SQLITE_DR
4480: 4f 50 5f 56 49 45 57 22 7d 20 7b 0a 20 20 20 20  OP_VIEW"} {.    
4490: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
44a0: 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72   [list $arg1 $ar
44b0: 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a  g2 $arg3 $arg4].
44c0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
44d0: 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20  ITE_OK.    }.   
44e0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
44f0: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
4500: 20 7b 44 52 4f 50 20 56 49 45 57 20 76 32 7d 0a   {DROP VIEW v2}.
4510: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
4520: 20 61 75 74 68 2d 31 2e 31 31 30 20 7b 0a 20 20   auth-1.110 {.  
4530: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d  set ::authargs.}
4540: 20 7b 76 32 20 7b 7d 20 6d 61 69 6e 20 7b 7d 7d   {v2 {} main {}}
4550: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
4560: 31 31 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  111 {.  execsql 
4570: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
4580: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d  M sqlite_master}
4590: 0a 7d 20 7b 74 32 7d 0a 0a 0a 64 6f 5f 74 65 73  .} {t2}...do_tes
45a0: 74 20 61 75 74 68 2d 31 2e 31 31 32 20 7b 0a 20  t auth-1.112 {. 
45b0: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
45c0: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
45d0: 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg4} {.    if {
45e0: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44  $code=="SQLITE_D
45f0: 45 4c 45 54 45 22 20 26 26 20 24 61 72 67 31 3d  ELETE" && $arg1=
4600: 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  ="sqlite_temp_ma
4610: 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 72  ster"} {.      r
4620: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e  eturn SQLITE_DEN
4630: 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  Y.    }.    retu
4640: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
4650: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
4660: 20 20 43 52 45 41 54 45 20 54 45 4d 50 20 56 49    CREATE TEMP VI
4670: 45 57 20 76 31 20 41 53 20 53 45 4c 45 43 54 20  EW v1 AS SELECT 
4680: 61 2b 31 2c 62 2b 31 20 46 52 4f 4d 20 74 31 3b  a+1,b+1 FROM t1;
4690: 0a 20 20 20 20 44 52 4f 50 20 56 49 45 57 20 76  .    DROP VIEW v
46a0: 31 0a 20 20 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20  1.  }.} {1 {not 
46b0: 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f  authorized}}.do_
46c0: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 31 33 20  test auth-1.113 
46d0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
46e0: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
46f0: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
4700: 7d 0a 7d 20 7b 74 31 20 76 31 7d 0a 64 6f 5f 74  }.} {t1 v1}.do_t
4710: 65 73 74 20 61 75 74 68 2d 31 2e 31 31 34 20 7b  est auth-1.114 {
4720: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
4730: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
4740: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66  3 arg4} {.    if
4750: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
4760: 5f 44 52 4f 50 5f 54 45 4d 50 5f 56 49 45 57 22  _DROP_TEMP_VIEW"
4770: 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a  } {.      set ::
4780: 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24  authargs [list $
4790: 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33  arg1 $arg2 $arg3
47a0: 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65   $arg4].      re
47b0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59  turn SQLITE_DENY
47c0: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
47d0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
47e0: 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50    catchsql {DROP
47f0: 20 56 49 45 57 20 76 31 7d 0a 7d 20 7b 31 20 7b   VIEW v1}.} {1 {
4800: 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d  not authorized}}
4810: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
4820: 31 31 35 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75  115 {.  set ::au
4830: 74 68 61 72 67 73 0a 7d 20 7b 76 31 20 7b 7d 20  thargs.} {v1 {} 
4840: 74 65 6d 70 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  temp {}}.do_test
4850: 20 61 75 74 68 2d 31 2e 31 31 36 20 7b 0a 20 20   auth-1.116 {.  
4860: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
4870: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
4880: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d 20  _temp_master}.} 
4890: 7b 74 31 20 76 31 7d 0a 64 6f 5f 74 65 73 74 20  {t1 v1}.do_test 
48a0: 61 75 74 68 2d 31 2e 31 31 37 20 7b 0a 20 20 70  auth-1.117 {.  p
48b0: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
48c0: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
48d0: 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g4} {.    if {$c
48e0: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c  ode=="SQLITE_DEL
48f0: 45 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d 22  ETE" && $arg1=="
4900: 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
4910: 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74  er"} {.      ret
4920: 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52  urn SQLITE_IGNOR
4930: 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  E.    }.    retu
4940: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
4950: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f  .  catchsql {DRO
4960: 50 20 56 49 45 57 20 76 31 7d 0a 7d 20 7b 30 20  P VIEW v1}.} {0 
4970: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
4980: 2d 31 2e 31 31 38 20 7b 0a 20 20 65 78 65 63 73  -1.118 {.  execs
4990: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
49a0: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70  FROM sqlite_temp
49b0: 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31 20 76  _master}.} {t1 v
49c0: 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  1}.do_test auth-
49d0: 31 2e 31 31 39 20 7b 0a 20 20 70 72 6f 63 20 61  1.119 {.  proc a
49e0: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
49f0: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
4a00: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
4a10: 22 53 51 4c 49 54 45 5f 44 52 4f 50 5f 54 45 4d  "SQLITE_DROP_TEM
4a20: 50 5f 56 49 45 57 22 7d 20 7b 0a 20 20 20 20 20  P_VIEW"} {.     
4a30: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
4a40: 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67  [list $arg1 $arg
4a50: 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20  2 $arg3 $arg4]. 
4a60: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
4a70: 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a  TE_IGNORE.    }.
4a80: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
4a90: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
4aa0: 73 71 6c 20 7b 44 52 4f 50 20 56 49 45 57 20 76  sql {DROP VIEW v
4ab0: 31 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74  1}.} {0 {}}.do_t
4ac0: 65 73 74 20 61 75 74 68 2d 31 2e 31 32 30 20 7b  est auth-1.120 {
4ad0: 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67  .  set ::autharg
4ae0: 73 0a 7d 20 7b 76 31 20 7b 7d 20 74 65 6d 70 20  s.} {v1 {} temp 
4af0: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
4b00: 2d 31 2e 31 32 31 20 7b 0a 20 20 65 78 65 63 73  -1.121 {.  execs
4b10: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
4b20: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70  FROM sqlite_temp
4b30: 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31 20 76  _master}.} {t1 v
4b40: 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  1}.do_test auth-
4b50: 31 2e 31 32 32 20 7b 0a 20 20 70 72 6f 63 20 61  1.122 {.  proc a
4b60: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
4b70: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
4b80: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
4b90: 22 53 51 4c 49 54 45 5f 44 52 4f 50 5f 54 45 4d  "SQLITE_DROP_TEM
4ba0: 50 5f 56 49 45 57 22 7d 20 7b 0a 20 20 20 20 20  P_VIEW"} {.     
4bb0: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
4bc0: 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67  [list $arg1 $arg
4bd0: 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20  2 $arg3 $arg4]. 
4be0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
4bf0: 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20  TE_OK.    }.    
4c00: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
4c10: 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20  .  }.  catchsql 
4c20: 7b 44 52 4f 50 20 56 49 45 57 20 76 31 7d 0a 7d  {DROP VIEW v1}.}
4c30: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
4c40: 61 75 74 68 2d 31 2e 31 32 33 20 7b 0a 20 20 73  auth-1.123 {.  s
4c50: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20  et ::authargs.} 
4c60: 7b 76 31 20 7b 7d 20 74 65 6d 70 20 7b 7d 7d 0a  {v1 {} temp {}}.
4c70: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
4c80: 32 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  24 {.  execsql {
4c90: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
4ca0: 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73   sqlite_temp_mas
4cb0: 74 65 72 7d 0a 7d 20 7b 74 31 7d 0a 0a 64 6f 5f  ter}.} {t1}..do_
4cc0: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 32 35 20  test auth-1.125 
4cd0: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
4ce0: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
4cf0: 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69  g3 arg4} {.    i
4d00: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
4d10: 45 5f 43 52 45 41 54 45 5f 54 52 49 47 47 45 52  E_CREATE_TRIGGER
4d20: 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a  "} {.      set :
4d30: 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20  :authargs [list 
4d40: 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67  $arg1 $arg2 $arg
4d50: 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72  3 $arg4].      r
4d60: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e  eturn SQLITE_DEN
4d70: 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  Y.    }.    retu
4d80: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
4d90: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
4da0: 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52    CREATE TRIGGER
4db0: 20 72 32 20 44 45 4c 45 54 45 20 6f 6e 20 74 32   r2 DELETE on t2
4dc0: 20 42 45 47 49 4e 0a 20 20 20 20 20 20 20 20 53   BEGIN.        S
4dd0: 45 4c 45 43 54 20 4e 55 4c 4c 3b 0a 20 20 20 20  ELECT NULL;.    
4de0: 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 6e  END;.  }.} {1 {n
4df0: 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a  ot authorized}}.
4e00: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
4e10: 32 36 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74  26 {.  set ::aut
4e20: 68 61 72 67 73 0a 7d 20 7b 72 32 20 74 32 20 6d  hargs.} {r2 t2 m
4e30: 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20  ain {}}.do_test 
4e40: 61 75 74 68 2d 31 2e 31 32 37 20 7b 0a 20 20 65  auth-1.127 {.  e
4e50: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
4e60: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
4e70: 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a 64  master}.} {t2}.d
4e80: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 32  o_test auth-1.12
4e90: 38 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  8 {.  proc auth 
4ea0: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
4eb0: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
4ec0: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
4ed0: 49 54 45 5f 49 4e 53 45 52 54 22 20 26 26 20 24  ITE_INSERT" && $
4ee0: 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 6d 61  arg1=="sqlite_ma
4ef0: 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 72  ster"} {.      r
4f00: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e  eturn SQLITE_DEN
4f10: 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  Y.    }.    retu
4f20: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
4f30: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
4f40: 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52    CREATE TRIGGER
4f50: 20 72 32 20 44 45 4c 45 54 45 20 6f 6e 20 74 32   r2 DELETE on t2
4f60: 20 42 45 47 49 4e 0a 20 20 20 20 20 20 20 20 53   BEGIN.        S
4f70: 45 4c 45 43 54 20 4e 55 4c 4c 3b 0a 20 20 20 20  ELECT NULL;.    
4f80: 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 6e  END;.  }.} {1 {n
4f90: 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a  ot authorized}}.
4fa0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
4fb0: 32 39 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  29 {.  execsql {
4fc0: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
4fd0: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a   sqlite_master}.
4fe0: 7d 20 7b 74 32 7d 0a 64 6f 5f 74 65 73 74 20 61  } {t2}.do_test a
4ff0: 75 74 68 2d 31 2e 31 33 30 20 7b 0a 20 20 70 72  uth-1.130 {.  pr
5000: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
5010: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
5020: 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f  4} {.    if {$co
5030: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52 45 41  de=="SQLITE_CREA
5040: 54 45 5f 54 52 49 47 47 45 52 22 7d 20 7b 0a 20  TE_TRIGGER"} {. 
5050: 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61       set ::autha
5060: 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20  rgs [list $arg1 
5070: 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67  $arg2 $arg3 $arg
5080: 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  4].      return 
5090: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20  SQLITE_IGNORE.  
50a0: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
50b0: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
50c0: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 43 52  atchsql {.    CR
50d0: 45 41 54 45 20 54 52 49 47 47 45 52 20 72 32 20  EATE TRIGGER r2 
50e0: 44 45 4c 45 54 45 20 6f 6e 20 74 32 20 42 45 47  DELETE on t2 BEG
50f0: 49 4e 0a 20 20 20 20 20 20 20 20 53 45 4c 45 43  IN.        SELEC
5100: 54 20 4e 55 4c 4c 3b 0a 20 20 20 20 45 4e 44 3b  T NULL;.    END;
5110: 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f  .  }.} {0 {}}.do
5120: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 33 31  _test auth-1.131
5130: 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61   {.  set ::autha
5140: 72 67 73 0a 7d 20 7b 72 32 20 74 32 20 6d 61 69  rgs.} {r2 t2 mai
5150: 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  n {}}.do_test au
5160: 74 68 2d 31 2e 31 33 32 20 7b 0a 20 20 65 78 65  th-1.132 {.  exe
5170: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d  csql {SELECT nam
5180: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  e FROM sqlite_ma
5190: 73 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a 64 6f 5f  ster}.} {t2}.do_
51a0: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 33 33 20  test auth-1.133 
51b0: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
51c0: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
51d0: 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69  g3 arg4} {.    i
51e0: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
51f0: 45 5f 49 4e 53 45 52 54 22 20 26 26 20 24 61 72  E_INSERT" && $ar
5200: 67 31 3d 3d 22 73 71 6c 69 74 65 5f 6d 61 73 74  g1=="sqlite_mast
5210: 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74  er"} {.      ret
5220: 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52  urn SQLITE_IGNOR
5230: 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  E.    }.    retu
5240: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
5250: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
5260: 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52    CREATE TRIGGER
5270: 20 72 32 20 44 45 4c 45 54 45 20 6f 6e 20 74 32   r2 DELETE on t2
5280: 20 42 45 47 49 4e 0a 20 20 20 20 20 20 20 20 53   BEGIN.        S
5290: 45 4c 45 43 54 20 4e 55 4c 4c 3b 0a 20 20 20 20  ELECT NULL;.    
52a0: 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d  END;.  }.} {0 {}
52b0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
52c0: 2e 31 33 34 20 7b 0a 20 20 65 78 65 63 73 71 6c  .134 {.  execsql
52d0: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
52e0: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
52f0: 7d 0a 7d 20 7b 74 32 7d 0a 64 6f 5f 74 65 73 74  }.} {t2}.do_test
5300: 20 61 75 74 68 2d 31 2e 31 33 35 20 7b 0a 20 20   auth-1.135 {.  
5310: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
5320: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
5330: 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg4} {.    if {$
5340: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52  code=="SQLITE_CR
5350: 45 41 54 45 5f 54 52 49 47 47 45 52 22 7d 20 7b  EATE_TRIGGER"} {
5360: 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74  .      set ::aut
5370: 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67  hargs [list $arg
5380: 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61  1 $arg2 $arg3 $a
5390: 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72  rg4].      retur
53a0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20  n SQLITE_OK.    
53b0: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
53c0: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
53d0: 63 68 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41  chsql {.    CREA
53e0: 54 45 20 54 41 42 4c 45 20 74 78 28 69 64 29 3b  TE TABLE tx(id);
53f0: 0a 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47  .    CREATE TRIG
5400: 47 45 52 20 72 32 20 41 46 54 45 52 20 49 4e 53  GER r2 AFTER INS
5410: 45 52 54 20 4f 4e 20 74 32 20 42 45 47 49 4e 0a  ERT ON t2 BEGIN.
5420: 20 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e         INSERT IN
5430: 54 4f 20 74 78 20 56 41 4c 55 45 53 28 4e 45 57  TO tx VALUES(NEW
5440: 2e 72 6f 77 69 64 29 3b 0a 20 20 20 20 45 4e 44  .rowid);.    END
5450: 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  ;.  }.} {0 {}}.d
5460: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 33  o_test auth-1.13
5470: 36 2e 31 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75  6.1 {.  set ::au
5480: 74 68 61 72 67 73 0a 7d 20 7b 72 32 20 74 32 20  thargs.} {r2 t2 
5490: 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  main {}}.do_test
54a0: 20 61 75 74 68 2d 31 2e 31 33 36 2e 32 20 7b 0a   auth-1.136.2 {.
54b0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
54c0: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
54d0: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57   sqlite_master W
54e0: 48 45 52 45 20 74 79 70 65 3d 27 74 72 69 67 67  HERE type='trigg
54f0: 65 72 27 0a 20 20 7d 0a 7d 20 7b 72 32 7d 0a 64  er'.  }.} {r2}.d
5500: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 33  o_test auth-1.13
5510: 36 2e 33 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  6.3 {.  proc aut
5520: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
5530: 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20  2 arg3 arg4} {. 
5540: 20 20 20 6c 61 70 70 65 6e 64 20 3a 3a 61 75 74     lappend ::aut
5550: 68 61 72 67 73 20 24 63 6f 64 65 20 24 61 72 67  hargs $code $arg
5560: 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61  1 $arg2 $arg3 $a
5570: 72 67 34 0a 20 20 20 20 72 65 74 75 72 6e 20 53  rg4.    return S
5580: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 73  QLITE_OK.  }.  s
5590: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 7b 7d  et ::authargs {}
55a0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
55b0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20   INSERT INTO t2 
55c0: 56 41 4c 55 45 53 28 31 2c 32 2c 33 29 3b 0a 20  VALUES(1,2,3);. 
55d0: 20 7d 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61   }.  set ::autha
55e0: 72 67 73 20 0a 7d 20 7b 53 51 4c 49 54 45 5f 49  rgs .} {SQLITE_I
55f0: 4e 53 45 52 54 20 74 32 20 7b 7d 20 6d 61 69 6e  NSERT t2 {} main
5600: 20 7b 7d 20 53 51 4c 49 54 45 5f 49 4e 53 45 52   {} SQLITE_INSER
5610: 54 20 74 78 20 7b 7d 20 6d 61 69 6e 20 72 32 20  T tx {} main r2 
5620: 53 51 4c 49 54 45 5f 52 45 41 44 20 74 32 20 52  SQLITE_READ t2 R
5630: 4f 57 49 44 20 6d 61 69 6e 20 72 32 7d 0a 64 6f  OWID main r2}.do
5640: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 33 36  _test auth-1.136
5650: 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .4 {.  execsql {
5660: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
5670: 4f 4d 20 74 78 3b 0a 20 20 7d 0a 7d 20 7b 33 7d  OM tx;.  }.} {3}
5680: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
5690: 31 33 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  137 {.  execsql 
56a0: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
56b0: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d  M sqlite_master}
56c0: 0a 7d 20 7b 74 32 20 74 78 20 72 32 7d 0a 64 6f  .} {t2 tx r2}.do
56d0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 33 38  _test auth-1.138
56e0: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
56f0: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
5700: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
5710: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
5720: 54 45 5f 43 52 45 41 54 45 5f 54 45 4d 50 5f 54  TE_CREATE_TEMP_T
5730: 52 49 47 47 45 52 22 7d 20 7b 0a 20 20 20 20 20  RIGGER"} {.     
5740: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
5750: 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67  [list $arg1 $arg
5760: 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20  2 $arg3 $arg4]. 
5770: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
5780: 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20  TE_DENY.    }.  
5790: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
57a0: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
57b0: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
57c0: 52 49 47 47 45 52 20 72 31 20 44 45 4c 45 54 45  RIGGER r1 DELETE
57d0: 20 6f 6e 20 74 31 20 42 45 47 49 4e 0a 20 20 20   on t1 BEGIN.   
57e0: 20 20 20 20 20 53 45 4c 45 43 54 20 4e 55 4c 4c       SELECT NULL
57f0: 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 7d 0a 7d  ;.    END;.  }.}
5800: 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69   {1 {not authori
5810: 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  zed}}.do_test au
5820: 74 68 2d 31 2e 31 33 39 20 7b 0a 20 20 73 65 74  th-1.139 {.  set
5830: 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 72   ::authargs.} {r
5840: 31 20 74 31 20 74 65 6d 70 20 7b 7d 7d 0a 64 6f  1 t1 temp {}}.do
5850: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 34 30  _test auth-1.140
5860: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
5870: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73  LECT name FROM s
5880: 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
5890: 72 7d 0a 7d 20 7b 74 31 7d 0a 64 6f 5f 74 65 73  r}.} {t1}.do_tes
58a0: 74 20 61 75 74 68 2d 31 2e 31 34 31 20 7b 0a 20  t auth-1.141 {. 
58b0: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
58c0: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
58d0: 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg4} {.    if {
58e0: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 49  $code=="SQLITE_I
58f0: 4e 53 45 52 54 22 20 26 26 20 24 61 72 67 31 3d  NSERT" && $arg1=
5900: 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  ="sqlite_temp_ma
5910: 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 72  ster"} {.      r
5920: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e  eturn SQLITE_DEN
5930: 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  Y.    }.    retu
5940: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
5950: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
5960: 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52    CREATE TRIGGER
5970: 20 72 31 20 44 45 4c 45 54 45 20 6f 6e 20 74 31   r1 DELETE on t1
5980: 20 42 45 47 49 4e 0a 20 20 20 20 20 20 20 20 53   BEGIN.        S
5990: 45 4c 45 43 54 20 4e 55 4c 4c 3b 0a 20 20 20 20  ELECT NULL;.    
59a0: 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 6e  END;.  }.} {1 {n
59b0: 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a  ot authorized}}.
59c0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
59d0: 34 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  42 {.  execsql {
59e0: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
59f0: 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73   sqlite_temp_mas
5a00: 74 65 72 7d 0a 7d 20 7b 74 31 7d 0a 64 6f 5f 74  ter}.} {t1}.do_t
5a10: 65 73 74 20 61 75 74 68 2d 31 2e 31 34 33 20 7b  est auth-1.143 {
5a20: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
5a30: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
5a40: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66  3 arg4} {.    if
5a50: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
5a60: 5f 43 52 45 41 54 45 5f 54 45 4d 50 5f 54 52 49  _CREATE_TEMP_TRI
5a70: 47 47 45 52 22 7d 20 7b 0a 20 20 20 20 20 20 73  GGER"} {.      s
5a80: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c  et ::authargs [l
5a90: 69 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20  ist $arg1 $arg2 
5aa0: 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20  $arg3 $arg4].   
5ab0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
5ac0: 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20  _IGNORE.    }.  
5ad0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
5ae0: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
5af0: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
5b00: 52 49 47 47 45 52 20 72 31 20 44 45 4c 45 54 45  RIGGER r1 DELETE
5b10: 20 6f 6e 20 74 31 20 42 45 47 49 4e 0a 20 20 20   on t1 BEGIN.   
5b20: 20 20 20 20 20 53 45 4c 45 43 54 20 4e 55 4c 4c       SELECT NULL
5b30: 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 7d 0a 7d  ;.    END;.  }.}
5b40: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
5b50: 61 75 74 68 2d 31 2e 31 34 34 20 7b 0a 20 20 73  auth-1.144 {.  s
5b60: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20  et ::authargs.} 
5b70: 7b 72 31 20 74 31 20 74 65 6d 70 20 7b 7d 7d 0a  {r1 t1 temp {}}.
5b80: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
5b90: 34 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  45 {.  execsql {
5ba0: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
5bb0: 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73   sqlite_temp_mas
5bc0: 74 65 72 7d 0a 7d 20 7b 74 31 7d 0a 64 6f 5f 74  ter}.} {t1}.do_t
5bd0: 65 73 74 20 61 75 74 68 2d 31 2e 31 34 36 20 7b  est auth-1.146 {
5be0: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
5bf0: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
5c00: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66  3 arg4} {.    if
5c10: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
5c20: 5f 49 4e 53 45 52 54 22 20 26 26 20 24 61 72 67  _INSERT" && $arg
5c30: 31 3d 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f  1=="sqlite_temp_
5c40: 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20  master"} {.     
5c50: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49   return SQLITE_I
5c60: 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20  GNORE.    }.    
5c70: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
5c80: 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20  .  }.  catchsql 
5c90: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 52 49  {.    CREATE TRI
5ca0: 47 47 45 52 20 72 31 20 44 45 4c 45 54 45 20 6f  GGER r1 DELETE o
5cb0: 6e 20 74 31 20 42 45 47 49 4e 0a 20 20 20 20 20  n t1 BEGIN.     
5cc0: 20 20 20 53 45 4c 45 43 54 20 4e 55 4c 4c 3b 0a     SELECT NULL;.
5cd0: 20 20 20 20 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b      END;.  }.} {
5ce0: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  0 {}}.do_test au
5cf0: 74 68 2d 31 2e 31 34 37 20 7b 0a 20 20 65 78 65  th-1.147 {.  exe
5d00: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d  csql {SELECT nam
5d10: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65  e FROM sqlite_te
5d20: 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31  mp_master}.} {t1
5d30: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
5d40: 2e 31 34 38 20 7b 0a 20 20 70 72 6f 63 20 61 75  .148 {.  proc au
5d50: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
5d60: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
5d70: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
5d80: 53 51 4c 49 54 45 5f 43 52 45 41 54 45 5f 54 45  SQLITE_CREATE_TE
5d90: 4d 50 5f 54 52 49 47 47 45 52 22 7d 20 7b 0a 20  MP_TRIGGER"} {. 
5da0: 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61       set ::autha
5db0: 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20  rgs [list $arg1 
5dc0: 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67  $arg2 $arg3 $arg
5dd0: 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  4].      return 
5de0: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a  SQLITE_OK.    }.
5df0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
5e00: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
5e10: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
5e20: 20 54 52 49 47 47 45 52 20 72 31 20 44 45 4c 45   TRIGGER r1 DELE
5e30: 54 45 20 6f 6e 20 74 31 20 42 45 47 49 4e 0a 20  TE on t1 BEGIN. 
5e40: 20 20 20 20 20 20 20 53 45 4c 45 43 54 20 4e 55         SELECT NU
5e50: 4c 4c 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 7d  LL;.    END;.  }
5e60: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
5e70: 74 20 61 75 74 68 2d 31 2e 31 34 39 20 7b 0a 20  t auth-1.149 {. 
5e80: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a   set ::authargs.
5e90: 7d 20 7b 72 31 20 74 31 20 74 65 6d 70 20 7b 7d  } {r1 t1 temp {}
5ea0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
5eb0: 2e 31 35 30 20 7b 0a 20 20 65 78 65 63 73 71 6c  .150 {.  execsql
5ec0: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
5ed0: 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  OM sqlite_temp_m
5ee0: 61 73 74 65 72 7d 0a 7d 20 7b 74 31 20 72 31 7d  aster}.} {t1 r1}
5ef0: 0a 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  ..do_test auth-1
5f00: 2e 31 35 31 20 7b 0a 20 20 70 72 6f 63 20 61 75  .151 {.  proc au
5f10: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
5f20: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
5f30: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
5f40: 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 22 20 26  SQLITE_DELETE" &
5f50: 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65  & $arg1=="sqlite
5f60: 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20  _master"} {.    
5f70: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
5f80: 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72  DENY.    }.    r
5f90: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
5fa0: 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b    }.  catchsql {
5fb0: 44 52 4f 50 20 54 52 49 47 47 45 52 20 72 32 7d  DROP TRIGGER r2}
5fc0: 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f  .} {1 {not autho
5fd0: 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20  rized}}.do_test 
5fe0: 61 75 74 68 2d 31 2e 31 35 32 20 7b 0a 20 20 65  auth-1.152 {.  e
5ff0: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
6000: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
6010: 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 20 74 78  master}.} {t2 tx
6020: 20 72 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   r2}.do_test aut
6030: 68 2d 31 2e 31 35 33 20 7b 0a 20 20 70 72 6f 63  h-1.153 {.  proc
6040: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
6050: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
6060: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
6070: 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f 50 5f 54  =="SQLITE_DROP_T
6080: 52 49 47 47 45 52 22 7d 20 7b 0a 20 20 20 20 20  RIGGER"} {.     
6090: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
60a0: 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67  [list $arg1 $arg
60b0: 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20  2 $arg3 $arg4]. 
60c0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
60d0: 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20  TE_DENY.    }.  
60e0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
60f0: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
6100: 6c 20 7b 44 52 4f 50 20 54 52 49 47 47 45 52 20  l {DROP TRIGGER 
6110: 72 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75  r2}.} {1 {not au
6120: 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65  thorized}}.do_te
6130: 73 74 20 61 75 74 68 2d 31 2e 31 35 34 20 7b 0a  st auth-1.154 {.
6140: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
6150: 0a 7d 20 7b 72 32 20 74 32 20 6d 61 69 6e 20 7b  .} {r2 t2 main {
6160: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
6170: 31 2e 31 35 35 20 7b 0a 20 20 65 78 65 63 73 71  1.155 {.  execsq
6180: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
6190: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
61a0: 72 7d 0a 7d 20 7b 74 32 20 74 78 20 72 32 7d 0a  r}.} {t2 tx r2}.
61b0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
61c0: 35 36 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  56 {.  proc auth
61d0: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
61e0: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
61f0: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
6200: 4c 49 54 45 5f 44 45 4c 45 54 45 22 20 26 26 20  LITE_DELETE" && 
6210: 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 6d  $arg1=="sqlite_m
6220: 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20  aster"} {.      
6230: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47  return SQLITE_IG
6240: 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72  NORE.    }.    r
6250: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
6260: 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b    }.  catchsql {
6270: 44 52 4f 50 20 54 52 49 47 47 45 52 20 72 32 7d  DROP TRIGGER r2}
6280: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
6290: 74 20 61 75 74 68 2d 31 2e 31 35 37 20 7b 0a 20  t auth-1.157 {. 
62a0: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
62b0: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
62c0: 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 20  e_master}.} {t2 
62d0: 74 78 20 72 32 7d 0a 64 6f 5f 74 65 73 74 20 61  tx r2}.do_test a
62e0: 75 74 68 2d 31 2e 31 35 38 20 7b 0a 20 20 70 72  uth-1.158 {.  pr
62f0: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
6300: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
6310: 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f  4} {.    if {$co
6320: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f 50  de=="SQLITE_DROP
6330: 5f 54 52 49 47 47 45 52 22 7d 20 7b 0a 20 20 20  _TRIGGER"} {.   
6340: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
6350: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
6360: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
6370: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
6380: 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20  LITE_IGNORE.    
6390: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
63a0: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
63b0: 63 68 73 71 6c 20 7b 44 52 4f 50 20 54 52 49 47  chsql {DROP TRIG
63c0: 47 45 52 20 72 32 7d 0a 7d 20 7b 30 20 7b 7d 7d  GER r2}.} {0 {}}
63d0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
63e0: 31 35 39 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75  159 {.  set ::au
63f0: 74 68 61 72 67 73 0a 7d 20 7b 72 32 20 74 32 20  thargs.} {r2 t2 
6400: 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  main {}}.do_test
6410: 20 61 75 74 68 2d 31 2e 31 36 30 20 7b 0a 20 20   auth-1.160 {.  
6420: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
6430: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
6440: 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 20 74  _master}.} {t2 t
6450: 78 20 72 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75  x r2}.do_test au
6460: 74 68 2d 31 2e 31 36 31 20 7b 0a 20 20 70 72 6f  th-1.161 {.  pro
6470: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
6480: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
6490: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
64a0: 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f 50 5f  e=="SQLITE_DROP_
64b0: 54 52 49 47 47 45 52 22 7d 20 7b 0a 20 20 20 20  TRIGGER"} {.    
64c0: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
64d0: 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72   [list $arg1 $ar
64e0: 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a  g2 $arg3 $arg4].
64f0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
6500: 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20  ITE_OK.    }.   
6510: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
6520: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
6530: 20 7b 44 52 4f 50 20 54 52 49 47 47 45 52 20 72   {DROP TRIGGER r
6540: 32 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74  2}.} {0 {}}.do_t
6550: 65 73 74 20 61 75 74 68 2d 31 2e 31 36 32 20 7b  est auth-1.162 {
6560: 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67  .  set ::autharg
6570: 73 0a 7d 20 7b 72 32 20 74 32 20 6d 61 69 6e 20  s.} {r2 t2 main 
6580: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
6590: 2d 31 2e 31 36 33 20 7b 0a 20 20 65 78 65 63 73  -1.163 {.  execs
65a0: 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20 54 41  ql {.    DROP TA
65b0: 42 4c 45 20 74 78 3b 0a 20 20 20 20 44 45 4c 45  BLE tx;.    DELE
65c0: 54 45 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45  TE FROM t2 WHERE
65d0: 20 61 3d 31 20 41 4e 44 20 62 3d 32 20 41 4e 44   a=1 AND b=2 AND
65e0: 20 63 3d 33 3b 0a 20 20 20 20 53 45 4c 45 43 54   c=3;.    SELECT
65f0: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
6600: 65 5f 6d 61 73 74 65 72 3b 0a 20 20 7d 0a 7d 20  e_master;.  }.} 
6610: 7b 74 32 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 75  {t2}..do_test au
6620: 74 68 2d 31 2e 31 36 34 20 7b 0a 20 20 70 72 6f  th-1.164 {.  pro
6630: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
6640: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
6650: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
6660: 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45 54  e=="SQLITE_DELET
6670: 45 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71  E" && $arg1=="sq
6680: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
6690: 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72  "} {.      retur
66a0: 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20  n SQLITE_DENY.  
66b0: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
66c0: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
66d0: 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54 52  atchsql {DROP TR
66e0: 49 47 47 45 52 20 72 31 7d 0a 7d 20 7b 31 20 7b  IGGER r1}.} {1 {
66f0: 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d  not authorized}}
6700: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
6710: 31 36 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  165 {.  execsql 
6720: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
6730: 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  M sqlite_temp_ma
6740: 73 74 65 72 7d 0a 7d 20 7b 74 31 20 72 31 7d 0a  ster}.} {t1 r1}.
6750: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
6760: 36 36 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  66 {.  proc auth
6770: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
6780: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
6790: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
67a0: 4c 49 54 45 5f 44 52 4f 50 5f 54 45 4d 50 5f 54  LITE_DROP_TEMP_T
67b0: 52 49 47 47 45 52 22 7d 20 7b 0a 20 20 20 20 20  RIGGER"} {.     
67c0: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
67d0: 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67  [list $arg1 $arg
67e0: 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20  2 $arg3 $arg4]. 
67f0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
6800: 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20  TE_DENY.    }.  
6810: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
6820: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
6830: 6c 20 7b 44 52 4f 50 20 54 52 49 47 47 45 52 20  l {DROP TRIGGER 
6840: 72 31 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75  r1}.} {1 {not au
6850: 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65  thorized}}.do_te
6860: 73 74 20 61 75 74 68 2d 31 2e 31 36 37 20 7b 0a  st auth-1.167 {.
6870: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
6880: 0a 7d 20 7b 72 31 20 74 31 20 74 65 6d 70 20 7b  .} {r1 t1 temp {
6890: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
68a0: 31 2e 31 36 38 20 7b 0a 20 20 65 78 65 63 73 71  1.168 {.  execsq
68b0: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
68c0: 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f  ROM sqlite_temp_
68d0: 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31 20 72 31  master}.} {t1 r1
68e0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
68f0: 2e 31 36 39 20 7b 0a 20 20 70 72 6f 63 20 61 75  .169 {.  proc au
6900: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
6910: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
6920: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
6930: 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 22 20 26  SQLITE_DELETE" &
6940: 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65  & $arg1=="sqlite
6950: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 7d 20 7b  _temp_master"} {
6960: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
6970: 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20  LITE_IGNORE.    
6980: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
6990: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
69a0: 63 68 73 71 6c 20 7b 44 52 4f 50 20 54 52 49 47  chsql {DROP TRIG
69b0: 47 45 52 20 72 31 7d 0a 7d 20 7b 30 20 7b 7d 7d  GER r1}.} {0 {}}
69c0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
69d0: 31 37 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  170 {.  execsql 
69e0: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
69f0: 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  M sqlite_temp_ma
6a00: 73 74 65 72 7d 0a 7d 20 7b 74 31 20 72 31 7d 0a  ster}.} {t1 r1}.
6a10: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
6a20: 37 31 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  71 {.  proc auth
6a30: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
6a40: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
6a50: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
6a60: 4c 49 54 45 5f 44 52 4f 50 5f 54 45 4d 50 5f 54  LITE_DROP_TEMP_T
6a70: 52 49 47 47 45 52 22 7d 20 7b 0a 20 20 20 20 20  RIGGER"} {.     
6a80: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
6a90: 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67  [list $arg1 $arg
6aa0: 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20  2 $arg3 $arg4]. 
6ab0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
6ac0: 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a  TE_IGNORE.    }.
6ad0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
6ae0: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
6af0: 73 71 6c 20 7b 44 52 4f 50 20 54 52 49 47 47 45  sql {DROP TRIGGE
6b00: 52 20 72 31 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  R r1}.} {0 {}}.d
6b10: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 37  o_test auth-1.17
6b20: 32 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68  2 {.  set ::auth
6b30: 61 72 67 73 0a 7d 20 7b 72 31 20 74 31 20 74 65  args.} {r1 t1 te
6b40: 6d 70 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  mp {}}.do_test a
6b50: 75 74 68 2d 31 2e 31 37 33 20 7b 0a 20 20 65 78  uth-1.173 {.  ex
6b60: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61  ecsql {SELECT na
6b70: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74  me FROM sqlite_t
6b80: 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74  emp_master}.} {t
6b90: 31 20 72 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75  1 r1}.do_test au
6ba0: 74 68 2d 31 2e 31 37 34 20 7b 0a 20 20 70 72 6f  th-1.174 {.  pro
6bb0: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
6bc0: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
6bd0: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
6be0: 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f 50 5f  e=="SQLITE_DROP_
6bf0: 54 45 4d 50 5f 54 52 49 47 47 45 52 22 7d 20 7b  TEMP_TRIGGER"} {
6c00: 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74  .      set ::aut
6c10: 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67  hargs [list $arg
6c20: 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61  1 $arg2 $arg3 $a
6c30: 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72  rg4].      retur
6c40: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20  n SQLITE_OK.    
6c50: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
6c60: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
6c70: 63 68 73 71 6c 20 7b 44 52 4f 50 20 54 52 49 47  chsql {DROP TRIG
6c80: 47 45 52 20 72 31 7d 0a 7d 20 7b 30 20 7b 7d 7d  GER r1}.} {0 {}}
6c90: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
6ca0: 31 37 35 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75  175 {.  set ::au
6cb0: 74 68 61 72 67 73 0a 7d 20 7b 72 31 20 74 31 20  thargs.} {r1 t1 
6cc0: 74 65 6d 70 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  temp {}}.do_test
6cd0: 20 61 75 74 68 2d 31 2e 31 37 36 20 7b 0a 20 20   auth-1.176 {.  
6ce0: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
6cf0: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
6d00: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d 20  _temp_master}.} 
6d10: 7b 74 31 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 75  {t1}..do_test au
6d20: 74 68 2d 31 2e 31 37 37 20 7b 0a 20 20 70 72 6f  th-1.177 {.  pro
6d30: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
6d40: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
6d50: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
6d60: 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52 45 41 54  e=="SQLITE_CREAT
6d70: 45 5f 49 4e 44 45 58 22 7d 20 7b 0a 20 20 20 20  E_INDEX"} {.    
6d80: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
6d90: 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72   [list $arg1 $ar
6da0: 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a  g2 $arg3 $arg4].
6db0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
6dc0: 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20  ITE_DENY.    }. 
6dd0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
6de0: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
6df0: 71 6c 20 7b 43 52 45 41 54 45 20 49 4e 44 45 58  ql {CREATE INDEX
6e00: 20 69 32 20 4f 4e 20 74 32 28 61 29 7d 0a 7d 20   i2 ON t2(a)}.} 
6e10: 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a  {1 {not authoriz
6e20: 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  ed}}.do_test aut
6e30: 68 2d 31 2e 31 37 38 20 7b 0a 20 20 73 65 74 20  h-1.178 {.  set 
6e40: 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 69 32  ::authargs.} {i2
6e50: 20 74 32 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f   t2 main {}}.do_
6e60: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 37 39 20  test auth-1.179 
6e70: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
6e80: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
6e90: 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b  lite_master}.} {
6ea0: 74 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  t2}.do_test auth
6eb0: 2d 31 2e 31 38 30 20 7b 0a 20 20 70 72 6f 63 20  -1.180 {.  proc 
6ec0: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
6ed0: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
6ee0: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
6ef0: 3d 22 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 22  ="SQLITE_INSERT"
6f00: 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69   && $arg1=="sqli
6f10: 74 65 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20  te_master"} {.  
6f20: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
6f30: 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20  E_DENY.    }.   
6f40: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
6f50: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
6f60: 20 7b 43 52 45 41 54 45 20 49 4e 44 45 58 20 69   {CREATE INDEX i
6f70: 32 20 4f 4e 20 74 32 28 61 29 7d 0a 7d 20 7b 31  2 ON t2(a)}.} {1
6f80: 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64   {not authorized
6f90: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
6fa0: 31 2e 31 38 31 20 7b 0a 20 20 65 78 65 63 73 71  1.181 {.  execsq
6fb0: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
6fc0: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
6fd0: 72 7d 0a 7d 20 7b 74 32 7d 0a 64 6f 5f 74 65 73  r}.} {t2}.do_tes
6fe0: 74 20 61 75 74 68 2d 31 2e 31 38 32 20 7b 0a 20  t auth-1.182 {. 
6ff0: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
7000: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
7010: 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg4} {.    if {
7020: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43  $code=="SQLITE_C
7030: 52 45 41 54 45 5f 49 4e 44 45 58 22 7d 20 7b 0a  REATE_INDEX"} {.
7040: 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68        set ::auth
7050: 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31  args [list $arg1
7060: 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72   $arg2 $arg3 $ar
7070: 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  g4].      return
7080: 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20   SQLITE_IGNORE. 
7090: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
70a0: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
70b0: 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45  catchsql {CREATE
70c0: 20 49 4e 44 45 58 20 69 32 20 4f 4e 20 74 32 28   INDEX i2 ON t2(
70d0: 62 29 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f  b)}.} {0 {}}.do_
70e0: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 38 33 20  test auth-1.183 
70f0: 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72  {.  set ::authar
7100: 67 73 0a 7d 20 7b 69 32 20 74 32 20 6d 61 69 6e  gs.} {i2 t2 main
7110: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
7120: 68 2d 31 2e 31 38 34 20 7b 0a 20 20 65 78 65 63  h-1.184 {.  exec
7130: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
7140: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
7150: 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a 64 6f 5f 74  ter}.} {t2}.do_t
7160: 65 73 74 20 61 75 74 68 2d 31 2e 31 38 35 20 7b  est auth-1.185 {
7170: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
7180: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
7190: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66  3 arg4} {.    if
71a0: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
71b0: 5f 49 4e 53 45 52 54 22 20 26 26 20 24 61 72 67  _INSERT" && $arg
71c0: 31 3d 3d 22 73 71 6c 69 74 65 5f 6d 61 73 74 65  1=="sqlite_maste
71d0: 72 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75  r"} {.      retu
71e0: 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45  rn SQLITE_IGNORE
71f0: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
7200: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
7210: 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41    catchsql {CREA
7220: 54 45 20 49 4e 44 45 58 20 69 32 20 4f 4e 20 74  TE INDEX i2 ON t
7230: 32 28 62 29 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  2(b)}.} {0 {}}.d
7240: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 38  o_test auth-1.18
7250: 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  6 {.  execsql {S
7260: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
7270: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d  sqlite_master}.}
7280: 20 7b 74 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75   {t2}.do_test au
7290: 74 68 2d 31 2e 31 38 37 20 7b 0a 20 20 70 72 6f  th-1.187 {.  pro
72a0: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
72b0: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
72c0: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
72d0: 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52 45 41 54  e=="SQLITE_CREAT
72e0: 45 5f 49 4e 44 45 58 22 7d 20 7b 0a 20 20 20 20  E_INDEX"} {.    
72f0: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
7300: 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72   [list $arg1 $ar
7310: 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a  g2 $arg3 $arg4].
7320: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
7330: 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20  ITE_OK.    }.   
7340: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
7350: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
7360: 20 7b 43 52 45 41 54 45 20 49 4e 44 45 58 20 69   {CREATE INDEX i
7370: 32 20 4f 4e 20 74 32 28 61 29 7d 0a 7d 20 7b 30  2 ON t2(a)}.} {0
7380: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
7390: 68 2d 31 2e 31 38 38 20 7b 0a 20 20 73 65 74 20  h-1.188 {.  set 
73a0: 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 69 32  ::authargs.} {i2
73b0: 20 74 32 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f   t2 main {}}.do_
73c0: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 38 39 20  test auth-1.189 
73d0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
73e0: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
73f0: 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b  lite_master}.} {
7400: 74 32 20 69 32 7d 0a 0a 64 6f 5f 74 65 73 74 20  t2 i2}..do_test 
7410: 61 75 74 68 2d 31 2e 31 39 30 20 7b 0a 20 20 70  auth-1.190 {.  p
7420: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
7430: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
7440: 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g4} {.    if {$c
7450: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52 45  ode=="SQLITE_CRE
7460: 41 54 45 5f 54 45 4d 50 5f 49 4e 44 45 58 22 7d  ATE_TEMP_INDEX"}
7470: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61   {.      set ::a
7480: 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61  uthargs [list $a
7490: 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20  rg1 $arg2 $arg3 
74a0: 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74  $arg4].      ret
74b0: 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a  urn SQLITE_DENY.
74c0: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
74d0: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
74e0: 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54   catchsql {CREAT
74f0: 45 20 49 4e 44 45 58 20 69 31 20 4f 4e 20 74 31  E INDEX i1 ON t1
7500: 28 61 29 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61  (a)}.} {1 {not a
7510: 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74  uthorized}}.do_t
7520: 65 73 74 20 61 75 74 68 2d 31 2e 31 39 31 20 7b  est auth-1.191 {
7530: 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67  .  set ::autharg
7540: 73 0a 7d 20 7b 69 31 20 74 31 20 74 65 6d 70 20  s.} {i1 t1 temp 
7550: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
7560: 2d 31 2e 31 39 32 20 7b 0a 20 20 65 78 65 63 73  -1.192 {.  execs
7570: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
7580: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70  FROM sqlite_temp
7590: 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31 7d 0a  _master}.} {t1}.
75a0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
75b0: 39 33 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  93 {.  proc auth
75c0: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
75d0: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
75e0: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
75f0: 4c 49 54 45 5f 49 4e 53 45 52 54 22 20 26 26 20  LITE_INSERT" && 
7600: 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 74  $arg1=="sqlite_t
7610: 65 6d 70 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20  emp_master"} {. 
7620: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
7630: 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20  TE_DENY.    }.  
7640: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
7650: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
7660: 6c 20 7b 43 52 45 41 54 45 20 49 4e 44 45 58 20  l {CREATE INDEX 
7670: 69 31 20 4f 4e 20 74 31 28 62 29 7d 0a 7d 20 7b  i1 ON t1(b)}.} {
7680: 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65  1 {not authorize
7690: 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  d}}.do_test auth
76a0: 2d 31 2e 31 39 34 20 7b 0a 20 20 65 78 65 63 73  -1.194 {.  execs
76b0: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
76c0: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70  FROM sqlite_temp
76d0: 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31 7d 0a  _master}.} {t1}.
76e0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
76f0: 39 35 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  95 {.  proc auth
7700: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
7710: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
7720: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
7730: 4c 49 54 45 5f 43 52 45 41 54 45 5f 54 45 4d 50  LITE_CREATE_TEMP
7740: 5f 49 4e 44 45 58 22 7d 20 7b 0a 20 20 20 20 20  _INDEX"} {.     
7750: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
7760: 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67  [list $arg1 $arg
7770: 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20  2 $arg3 $arg4]. 
7780: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
7790: 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a  TE_IGNORE.    }.
77a0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
77b0: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
77c0: 73 71 6c 20 7b 43 52 45 41 54 45 20 49 4e 44 45  sql {CREATE INDE
77d0: 58 20 69 31 20 4f 4e 20 74 31 28 62 29 7d 0a 7d  X i1 ON t1(b)}.}
77e0: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
77f0: 61 75 74 68 2d 31 2e 31 39 36 20 7b 0a 20 20 73  auth-1.196 {.  s
7800: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20  et ::authargs.} 
7810: 7b 69 31 20 74 31 20 74 65 6d 70 20 7b 7d 7d 0a  {i1 t1 temp {}}.
7820: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
7830: 39 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  97 {.  execsql {
7840: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
7850: 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73   sqlite_temp_mas
7860: 74 65 72 7d 0a 7d 20 7b 74 31 7d 0a 64 6f 5f 74  ter}.} {t1}.do_t
7870: 65 73 74 20 61 75 74 68 2d 31 2e 31 39 38 20 7b  est auth-1.198 {
7880: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
7890: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
78a0: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66  3 arg4} {.    if
78b0: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
78c0: 5f 49 4e 53 45 52 54 22 20 26 26 20 24 61 72 67  _INSERT" && $arg
78d0: 31 3d 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f  1=="sqlite_temp_
78e0: 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20  master"} {.     
78f0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49   return SQLITE_I
7900: 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20  GNORE.    }.    
7910: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
7920: 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20  .  }.  catchsql 
7930: 7b 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 31  {CREATE INDEX i1
7940: 20 4f 4e 20 74 31 28 63 29 7d 0a 7d 20 7b 30 20   ON t1(c)}.} {0 
7950: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
7960: 2d 31 2e 31 39 39 20 7b 0a 20 20 65 78 65 63 73  -1.199 {.  execs
7970: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
7980: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70  FROM sqlite_temp
7990: 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31 7d 0a  _master}.} {t1}.
79a0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
79b0: 30 30 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  00 {.  proc auth
79c0: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
79d0: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
79e0: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
79f0: 4c 49 54 45 5f 43 52 45 41 54 45 5f 54 45 4d 50  LITE_CREATE_TEMP
7a00: 5f 49 4e 44 45 58 22 7d 20 7b 0a 20 20 20 20 20  _INDEX"} {.     
7a10: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
7a20: 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67  [list $arg1 $arg
7a30: 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20  2 $arg3 $arg4]. 
7a40: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
7a50: 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20  TE_OK.    }.    
7a60: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
7a70: 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20  .  }.  catchsql 
7a80: 7b 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 31  {CREATE INDEX i1
7a90: 20 4f 4e 20 74 31 28 61 29 7d 0a 7d 20 7b 30 20   ON t1(a)}.} {0 
7aa0: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
7ab0: 2d 31 2e 32 30 31 20 7b 0a 20 20 73 65 74 20 3a  -1.201 {.  set :
7ac0: 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 69 31 20  :authargs.} {i1 
7ad0: 74 31 20 74 65 6d 70 20 7b 7d 7d 0a 64 6f 5f 74  t1 temp {}}.do_t
7ae0: 65 73 74 20 61 75 74 68 2d 31 2e 32 30 32 20 7b  est auth-1.202 {
7af0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
7b00: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
7b10: 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d  ite_temp_master}
7b20: 0a 7d 20 7b 74 31 20 69 31 7d 0a 0a 64 6f 5f 74  .} {t1 i1}..do_t
7b30: 65 73 74 20 61 75 74 68 2d 31 2e 32 30 33 20 7b  est auth-1.203 {
7b40: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
7b50: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
7b60: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66  3 arg4} {.    if
7b70: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
7b80: 5f 44 45 4c 45 54 45 22 20 26 26 20 24 61 72 67  _DELETE" && $arg
7b90: 31 3d 3d 22 73 71 6c 69 74 65 5f 6d 61 73 74 65  1=="sqlite_maste
7ba0: 72 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75  r"} {.      retu
7bb0: 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20  rn SQLITE_DENY. 
7bc0: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
7bd0: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
7be0: 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 49  catchsql {DROP I
7bf0: 4e 44 45 58 20 69 32 7d 0a 7d 20 7b 31 20 7b 6e  NDEX i2}.} {1 {n
7c00: 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a  ot authorized}}.
7c10: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
7c20: 30 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  04 {.  execsql {
7c30: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
7c40: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a   sqlite_master}.
7c50: 7d 20 7b 74 32 20 69 32 7d 0a 64 6f 5f 74 65 73  } {t2 i2}.do_tes
7c60: 74 20 61 75 74 68 2d 31 2e 32 30 35 20 7b 0a 20  t auth-1.205 {. 
7c70: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
7c80: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
7c90: 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg4} {.    if {
7ca0: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44  $code=="SQLITE_D
7cb0: 52 4f 50 5f 49 4e 44 45 58 22 7d 20 7b 0a 20 20  ROP_INDEX"} {.  
7cc0: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
7cd0: 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24  gs [list $arg1 $
7ce0: 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34  arg2 $arg3 $arg4
7cf0: 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  ].      return S
7d00: 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d  QLITE_DENY.    }
7d10: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
7d20: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
7d30: 68 73 71 6c 20 7b 44 52 4f 50 20 49 4e 44 45 58  hsql {DROP INDEX
7d40: 20 69 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61   i2}.} {1 {not a
7d50: 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74  uthorized}}.do_t
7d60: 65 73 74 20 61 75 74 68 2d 31 2e 32 30 36 20 7b  est auth-1.206 {
7d70: 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67  .  set ::autharg
7d80: 73 0a 7d 20 7b 69 32 20 74 32 20 6d 61 69 6e 20  s.} {i2 t2 main 
7d90: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
7da0: 2d 31 2e 32 30 37 20 7b 0a 20 20 65 78 65 63 73  -1.207 {.  execs
7db0: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
7dc0: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
7dd0: 65 72 7d 0a 7d 20 7b 74 32 20 69 32 7d 0a 64 6f  er}.} {t2 i2}.do
7de0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 30 38  _test auth-1.208
7df0: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
7e00: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
7e10: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
7e20: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
7e30: 54 45 5f 44 45 4c 45 54 45 22 20 26 26 20 24 61  TE_DELETE" && $a
7e40: 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 6d 61 73  rg1=="sqlite_mas
7e50: 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 72 65  ter"} {.      re
7e60: 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f  turn SQLITE_IGNO
7e70: 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  RE.    }.    ret
7e80: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
7e90: 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52  }.  catchsql {DR
7ea0: 4f 50 20 49 4e 44 45 58 20 69 32 7d 0a 7d 20 7b  OP INDEX i2}.} {
7eb0: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  0 {}}.do_test au
7ec0: 74 68 2d 31 2e 32 30 39 20 7b 0a 20 20 65 78 65  th-1.209 {.  exe
7ed0: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d  csql {SELECT nam
7ee0: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  e FROM sqlite_ma
7ef0: 73 74 65 72 7d 0a 7d 20 7b 74 32 20 69 32 7d 0a  ster}.} {t2 i2}.
7f00: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
7f10: 31 30 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  10 {.  proc auth
7f20: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
7f30: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
7f40: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
7f50: 4c 49 54 45 5f 44 52 4f 50 5f 49 4e 44 45 58 22  LITE_DROP_INDEX"
7f60: 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a  } {.      set ::
7f70: 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24  authargs [list $
7f80: 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33  arg1 $arg2 $arg3
7f90: 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65   $arg4].      re
7fa0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f  turn SQLITE_IGNO
7fb0: 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  RE.    }.    ret
7fc0: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
7fd0: 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52  }.  catchsql {DR
7fe0: 4f 50 20 49 4e 44 45 58 20 69 32 7d 0a 7d 20 7b  OP INDEX i2}.} {
7ff0: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  0 {}}.do_test au
8000: 74 68 2d 31 2e 32 31 31 20 7b 0a 20 20 73 65 74  th-1.211 {.  set
8010: 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 69   ::authargs.} {i
8020: 32 20 74 32 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f  2 t2 main {}}.do
8030: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 31 32  _test auth-1.212
8040: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
8050: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73  LECT name FROM s
8060: 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20  qlite_master}.} 
8070: 7b 74 32 20 69 32 7d 0a 64 6f 5f 74 65 73 74 20  {t2 i2}.do_test 
8080: 61 75 74 68 2d 31 2e 32 31 33 20 7b 0a 20 20 70  auth-1.213 {.  p
8090: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
80a0: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
80b0: 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g4} {.    if {$c
80c0: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f  ode=="SQLITE_DRO
80d0: 50 5f 49 4e 44 45 58 22 7d 20 7b 0a 20 20 20 20  P_INDEX"} {.    
80e0: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
80f0: 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72   [list $arg1 $ar
8100: 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a  g2 $arg3 $arg4].
8110: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
8120: 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20  ITE_OK.    }.   
8130: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
8140: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
8150: 20 7b 44 52 4f 50 20 49 4e 44 45 58 20 69 32 7d   {DROP INDEX i2}
8160: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
8170: 74 20 61 75 74 68 2d 31 2e 32 31 34 20 7b 0a 20  t auth-1.214 {. 
8180: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a   set ::authargs.
8190: 7d 20 7b 69 32 20 74 32 20 6d 61 69 6e 20 7b 7d  } {i2 t2 main {}
81a0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
81b0: 2e 32 31 35 20 7b 0a 20 20 65 78 65 63 73 71 6c  .215 {.  execsql
81c0: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
81d0: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
81e0: 7d 0a 7d 20 7b 74 32 7d 0a 0a 64 6f 5f 74 65 73  }.} {t2}..do_tes
81f0: 74 20 61 75 74 68 2d 31 2e 32 31 36 20 7b 0a 20  t auth-1.216 {. 
8200: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
8210: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
8220: 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg4} {.    if {
8230: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44  $code=="SQLITE_D
8240: 45 4c 45 54 45 22 20 26 26 20 24 61 72 67 31 3d  ELETE" && $arg1=
8250: 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  ="sqlite_temp_ma
8260: 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 72  ster"} {.      r
8270: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e  eturn SQLITE_DEN
8280: 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  Y.    }.    retu
8290: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
82a0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f  .  catchsql {DRO
82b0: 50 20 49 4e 44 45 58 20 69 31 7d 0a 7d 20 7b 31  P INDEX i1}.} {1
82c0: 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64   {not authorized
82d0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
82e0: 31 2e 32 31 37 20 7b 0a 20 20 65 78 65 63 73 71  1.217 {.  execsq
82f0: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
8300: 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f  ROM sqlite_temp_
8310: 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31 20 69 31  master}.} {t1 i1
8320: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
8330: 2e 32 31 38 20 7b 0a 20 20 70 72 6f 63 20 61 75  .218 {.  proc au
8340: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
8350: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
8360: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
8370: 53 51 4c 49 54 45 5f 44 52 4f 50 5f 54 45 4d 50  SQLITE_DROP_TEMP
8380: 5f 49 4e 44 45 58 22 7d 20 7b 0a 20 20 20 20 20  _INDEX"} {.     
8390: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
83a0: 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67  [list $arg1 $arg
83b0: 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20  2 $arg3 $arg4]. 
83c0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
83d0: 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20  TE_DENY.    }.  
83e0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
83f0: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
8400: 6c 20 7b 44 52 4f 50 20 49 4e 44 45 58 20 69 31  l {DROP INDEX i1
8410: 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68  }.} {1 {not auth
8420: 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74  orized}}.do_test
8430: 20 61 75 74 68 2d 31 2e 32 31 39 20 7b 0a 20 20   auth-1.219 {.  
8440: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d  set ::authargs.}
8450: 20 7b 69 31 20 74 31 20 74 65 6d 70 20 7b 7d 7d   {i1 t1 temp {}}
8460: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
8470: 32 32 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  220 {.  execsql 
8480: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
8490: 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  M sqlite_temp_ma
84a0: 73 74 65 72 7d 0a 7d 20 7b 74 31 20 69 31 7d 0a  ster}.} {t1 i1}.
84b0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
84c0: 32 31 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  21 {.  proc auth
84d0: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
84e0: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
84f0: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
8500: 4c 49 54 45 5f 44 45 4c 45 54 45 22 20 26 26 20  LITE_DELETE" && 
8510: 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 74  $arg1=="sqlite_t
8520: 65 6d 70 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20  emp_master"} {. 
8530: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
8540: 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a  TE_IGNORE.    }.
8550: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
8560: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
8570: 73 71 6c 20 7b 44 52 4f 50 20 49 4e 44 45 58 20  sql {DROP INDEX 
8580: 69 31 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f  i1}.} {0 {}}.do_
8590: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 32 32 20  test auth-1.222 
85a0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
85b0: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
85c0: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
85d0: 7d 0a 7d 20 7b 74 31 20 69 31 7d 0a 64 6f 5f 74  }.} {t1 i1}.do_t
85e0: 65 73 74 20 61 75 74 68 2d 31 2e 32 32 33 20 7b  est auth-1.223 {
85f0: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
8600: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
8610: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66  3 arg4} {.    if
8620: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
8630: 5f 44 52 4f 50 5f 54 45 4d 50 5f 49 4e 44 45 58  _DROP_TEMP_INDEX
8640: 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a  "} {.      set :
8650: 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20  :authargs [list 
8660: 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67  $arg1 $arg2 $arg
8670: 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72  3 $arg4].      r
8680: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e  eturn SQLITE_IGN
8690: 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  ORE.    }.    re
86a0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
86b0: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44   }.  catchsql {D
86c0: 52 4f 50 20 49 4e 44 45 58 20 69 31 7d 0a 7d 20  ROP INDEX i1}.} 
86d0: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  {0 {}}.do_test a
86e0: 75 74 68 2d 31 2e 32 32 34 20 7b 0a 20 20 73 65  uth-1.224 {.  se
86f0: 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b  t ::authargs.} {
8700: 69 31 20 74 31 20 74 65 6d 70 20 7b 7d 7d 0a 64  i1 t1 temp {}}.d
8710: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 32  o_test auth-1.22
8720: 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  5 {.  execsql {S
8730: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
8740: 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
8750: 65 72 7d 0a 7d 20 7b 74 31 20 69 31 7d 0a 64 6f  er}.} {t1 i1}.do
8760: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 32 36  _test auth-1.226
8770: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
8780: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
8790: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
87a0: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
87b0: 54 45 5f 44 52 4f 50 5f 54 45 4d 50 5f 49 4e 44  TE_DROP_TEMP_IND
87c0: 45 58 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74  EX"} {.      set
87d0: 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73   ::authargs [lis
87e0: 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61  t $arg1 $arg2 $a
87f0: 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20  rg3 $arg4].     
8800: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
8810: 4b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  K.    }.    retu
8820: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
8830: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f  .  catchsql {DRO
8840: 50 20 49 4e 44 45 58 20 69 31 7d 0a 7d 20 7b 30  P INDEX i1}.} {0
8850: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
8860: 68 2d 31 2e 32 32 37 20 7b 0a 20 20 73 65 74 20  h-1.227 {.  set 
8870: 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 69 31  ::authargs.} {i1
8880: 20 74 31 20 74 65 6d 70 20 7b 7d 7d 0a 64 6f 5f   t1 temp {}}.do_
8890: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 32 38 20  test auth-1.228 
88a0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
88b0: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
88c0: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
88d0: 7d 0a 7d 20 7b 74 31 7d 0a 0a 64 6f 5f 74 65 73  }.} {t1}..do_tes
88e0: 74 20 61 75 74 68 2d 31 2e 32 32 39 20 7b 0a 20  t auth-1.229 {. 
88f0: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
8900: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
8910: 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg4} {.    if {
8920: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 50  $code=="SQLITE_P
8930: 52 41 47 4d 41 22 7d 20 7b 0a 20 20 20 20 20 20  RAGMA"} {.      
8940: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b  set ::authargs [
8950: 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67 32  list $arg1 $arg2
8960: 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20   $arg3 $arg4].  
8970: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
8980: 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20  E_DENY.    }.   
8990: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
89a0: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
89b0: 20 7b 50 52 41 47 4d 41 20 66 75 6c 6c 5f 63 6f   {PRAGMA full_co
89c0: 6c 75 6d 6e 5f 6e 61 6d 65 73 3d 6f 6e 7d 0a 7d  lumn_names=on}.}
89d0: 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69   {1 {not authori
89e0: 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  zed}}.do_test au
89f0: 74 68 2d 31 2e 32 33 30 20 7b 0a 20 20 73 65 74  th-1.230 {.  set
8a00: 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 66   ::authargs.} {f
8a10: 75 6c 6c 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73  ull_column_names
8a20: 20 6f 6e 20 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74 65   on {} {}}.do_te
8a30: 73 74 20 61 75 74 68 2d 31 2e 32 33 31 20 7b 0a  st auth-1.231 {.
8a40: 20 20 65 78 65 63 73 71 6c 32 20 7b 53 45 4c 45    execsql2 {SELE
8a50: 43 54 20 61 20 46 52 4f 4d 20 74 32 7d 0a 7d 20  CT a FROM t2}.} 
8a60: 7b 61 20 31 31 20 61 20 37 7d 0a 64 6f 5f 74 65  {a 11 a 7}.do_te
8a70: 73 74 20 61 75 74 68 2d 31 2e 32 33 32 20 7b 0a  st auth-1.232 {.
8a80: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
8a90: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
8aa0: 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20   arg4} {.    if 
8ab0: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
8ac0: 50 52 41 47 4d 41 22 7d 20 7b 0a 20 20 20 20 20  PRAGMA"} {.     
8ad0: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
8ae0: 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67  [list $arg1 $arg
8af0: 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20  2 $arg3 $arg4]. 
8b00: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
8b10: 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a  TE_IGNORE.    }.
8b20: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
8b30: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
8b40: 73 71 6c 20 7b 50 52 41 47 4d 41 20 66 75 6c 6c  sql {PRAGMA full
8b50: 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 3d 6f 6e  _column_names=on
8b60: 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  }.} {0 {}}.do_te
8b70: 73 74 20 61 75 74 68 2d 31 2e 32 33 33 20 7b 0a  st auth-1.233 {.
8b80: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
8b90: 0a 7d 20 7b 66 75 6c 6c 5f 63 6f 6c 75 6d 6e 5f  .} {full_column_
8ba0: 6e 61 6d 65 73 20 6f 6e 20 7b 7d 20 7b 7d 7d 0a  names on {} {}}.
8bb0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
8bc0: 33 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 32 20  34 {.  execsql2 
8bd0: 7b 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74  {SELECT a FROM t
8be0: 32 7d 0a 7d 20 7b 61 20 31 31 20 61 20 37 7d 0a  2}.} {a 11 a 7}.
8bf0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
8c00: 33 35 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  35 {.  proc auth
8c10: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
8c20: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
8c30: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
8c40: 4c 49 54 45 5f 50 52 41 47 4d 41 22 7d 20 7b 0a  LITE_PRAGMA"} {.
8c50: 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68        set ::auth
8c60: 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31  args [list $arg1
8c70: 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72   $arg2 $arg3 $ar
8c80: 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  g4].      return
8c90: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d   SQLITE_OK.    }
8ca0: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
8cb0: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
8cc0: 68 73 71 6c 20 7b 50 52 41 47 4d 41 20 66 75 6c  hsql {PRAGMA ful
8cd0: 6c 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 3d 6f  l_column_names=o
8ce0: 6e 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74  n}.} {0 {}}.do_t
8cf0: 65 73 74 20 61 75 74 68 2d 31 2e 32 33 36 20 7b  est auth-1.236 {
8d00: 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 53 45 4c  .  execsql2 {SEL
8d10: 45 43 54 20 61 20 46 52 4f 4d 20 74 32 7d 0a 7d  ECT a FROM t2}.}
8d20: 20 7b 74 32 2e 61 20 31 31 20 74 32 2e 61 20 37   {t2.a 11 t2.a 7
8d30: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
8d40: 2e 32 33 37 20 7b 0a 20 20 70 72 6f 63 20 61 75  .237 {.  proc au
8d50: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
8d60: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
8d70: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
8d80: 53 51 4c 49 54 45 5f 50 52 41 47 4d 41 22 7d 20  SQLITE_PRAGMA"} 
8d90: 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75  {.      set ::au
8da0: 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72  thargs [list $ar
8db0: 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24  g1 $arg2 $arg3 $
8dc0: 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75  arg4].      retu
8dd0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20  rn SQLITE_OK.   
8de0: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
8df0: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
8e00: 74 63 68 73 71 6c 20 7b 50 52 41 47 4d 41 20 66  tchsql {PRAGMA f
8e10: 75 6c 6c 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73  ull_column_names
8e20: 3d 4f 46 46 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  =OFF}.} {0 {}}.d
8e30: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 33  o_test auth-1.23
8e40: 38 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68  8 {.  set ::auth
8e50: 61 72 67 73 0a 7d 20 7b 66 75 6c 6c 5f 63 6f 6c  args.} {full_col
8e60: 75 6d 6e 5f 6e 61 6d 65 73 20 4f 46 46 20 7b 7d  umn_names OFF {}
8e70: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
8e80: 68 2d 31 2e 32 33 39 20 7b 0a 20 20 65 78 65 63  h-1.239 {.  exec
8e90: 73 71 6c 32 20 7b 53 45 4c 45 43 54 20 61 20 46  sql2 {SELECT a F
8ea0: 52 4f 4d 20 74 32 7d 0a 7d 20 7b 61 20 31 31 20  ROM t2}.} {a 11 
8eb0: 61 20 37 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 75  a 7}..do_test au
8ec0: 74 68 2d 31 2e 32 34 30 20 7b 0a 20 20 70 72 6f  th-1.240 {.  pro
8ed0: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
8ee0: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
8ef0: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
8f00: 65 3d 3d 22 53 51 4c 49 54 45 5f 54 52 41 4e 53  e=="SQLITE_TRANS
8f10: 41 43 54 49 4f 4e 22 7d 20 7b 0a 20 20 20 20 20  ACTION"} {.     
8f20: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
8f30: 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67  [list $arg1 $arg
8f40: 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20  2 $arg3 $arg4]. 
8f50: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
8f60: 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20  TE_DENY.    }.  
8f70: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
8f80: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
8f90: 6c 20 7b 42 45 47 49 4e 7d 0a 7d 20 7b 31 20 7b  l {BEGIN}.} {1 {
8fa0: 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d  not authorized}}
8fb0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
8fc0: 32 34 31 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75  241 {.  set ::au
8fd0: 74 68 61 72 67 73 0a 7d 20 7b 42 45 47 49 4e 20  thargs.} {BEGIN 
8fe0: 7b 7d 20 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74 65 73  {} {} {}}.do_tes
8ff0: 74 20 61 75 74 68 2d 31 2e 32 34 32 20 7b 0a 20  t auth-1.242 {. 
9000: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
9010: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
9020: 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg4} {.    if {
9030: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 54  $code=="SQLITE_T
9040: 52 41 4e 53 41 43 54 49 4f 4e 22 20 26 26 20 24  RANSACTION" && $
9050: 61 72 67 31 21 3d 22 42 45 47 49 4e 22 7d 20 7b  arg1!="BEGIN"} {
9060: 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74  .      set ::aut
9070: 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67  hargs [list $arg
9080: 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61  1 $arg2 $arg3 $a
9090: 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72  rg4].      retur
90a0: 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20  n SQLITE_DENY.  
90b0: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
90c0: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
90d0: 61 74 63 68 73 71 6c 20 7b 42 45 47 49 4e 3b 20  atchsql {BEGIN; 
90e0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56  INSERT INTO t2 V
90f0: 41 4c 55 45 53 28 34 34 2c 35 35 2c 36 36 29 3b  ALUES(44,55,66);
9100: 20 43 4f 4d 4d 49 54 7d 0a 7d 20 7b 31 20 7b 6e   COMMIT}.} {1 {n
9110: 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a  ot authorized}}.
9120: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
9130: 34 33 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74  43 {.  set ::aut
9140: 68 61 72 67 73 0a 7d 20 7b 43 4f 4d 4d 49 54 20  hargs.} {COMMIT 
9150: 7b 7d 20 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74 65 73  {} {} {}}.do_tes
9160: 74 20 61 75 74 68 2d 31 2e 32 34 34 20 7b 0a 20  t auth-1.244 {. 
9170: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
9180: 20 2a 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31   * FROM t2}.} {1
9190: 31 20 32 20 33 33 20 37 20 38 20 39 20 34 34 20  1 2 33 7 8 9 44 
91a0: 35 35 20 36 36 7d 0a 64 6f 5f 74 65 73 74 20 61  55 66}.do_test a
91b0: 75 74 68 2d 31 2e 32 34 35 20 7b 0a 20 20 63 61  uth-1.245 {.  ca
91c0: 74 63 68 73 71 6c 20 7b 52 4f 4c 4c 42 41 43 4b  tchsql {ROLLBACK
91d0: 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68  }.} {1 {not auth
91e0: 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74  orized}}.do_test
91f0: 20 61 75 74 68 2d 31 2e 32 34 36 20 7b 0a 20 20   auth-1.246 {.  
9200: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d  set ::authargs.}
9210: 20 7b 52 4f 4c 4c 42 41 43 4b 20 7b 7d 20 7b 7d   {ROLLBACK {} {}
9220: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
9230: 68 2d 31 2e 32 34 37 20 7b 0a 20 20 63 61 74 63  h-1.247 {.  catc
9240: 68 73 71 6c 20 7b 45 4e 44 20 54 52 41 4e 53 41  hsql {END TRANSA
9250: 43 54 49 4f 4e 7d 0a 7d 20 7b 31 20 7b 6e 6f 74  CTION}.} {1 {not
9260: 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f   authorized}}.do
9270: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 34 38  _test auth-1.248
9280: 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61   {.  set ::autha
9290: 72 67 73 0a 7d 20 7b 43 4f 4d 4d 49 54 20 7b 7d  rgs.} {COMMIT {}
92a0: 20 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {} {}}.do_test 
92b0: 61 75 74 68 2d 31 2e 32 34 39 20 7b 0a 20 20 64  auth-1.249 {.  d
92c0: 62 20 61 75 74 68 6f 72 69 7a 65 72 20 7b 7d 0a  b authorizer {}.
92d0: 20 20 63 61 74 63 68 73 71 6c 20 7b 52 4f 4c 4c    catchsql {ROLL
92e0: 42 41 43 4b 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  BACK}.} {0 {}}.d
92f0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 35  o_test auth-1.25
9300: 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  0 {.  execsql {S
9310: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d  ELECT * FROM t2}
9320: 0a 7d 20 7b 31 31 20 32 20 33 33 20 37 20 38 20  .} {11 2 33 7 8 
9330: 39 7d 0a 0a 23 20 74 69 63 6b 65 74 20 23 33 34  9}..# ticket #34
9340: 30 20 2d 20 61 75 74 68 6f 72 69 7a 61 74 69 6f  0 - authorizatio
9350: 6e 20 66 6f 72 20 41 54 54 41 43 48 20 61 6e 64  n for ATTACH and
9360: 20 44 45 54 41 43 48 2e 0a 23 0a 64 6f 5f 74 65   DETACH..#.do_te
9370: 73 74 20 61 75 74 68 2d 31 2e 32 35 31 20 7b 0a  st auth-1.251 {.
9380: 20 20 64 62 20 61 75 74 68 6f 72 69 7a 65 72 20    db authorizer 
9390: 3a 3a 61 75 74 68 0a 20 20 70 72 6f 63 20 61 75  ::auth.  proc au
93a0: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
93b0: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
93c0: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
93d0: 53 51 4c 49 54 45 5f 41 54 54 41 43 48 22 7d 20  SQLITE_ATTACH"} 
93e0: 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75  {.      set ::au
93f0: 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72  thargs [list $ar
9400: 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24  g1 $arg2 $arg3 $
9410: 61 72 67 34 5d 0a 20 20 20 20 7d 0a 20 20 20 20  arg4].    }.    
9420: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
9430: 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20  .  }.  catchsql 
9440: 7b 0a 20 20 20 20 41 54 54 41 43 48 20 44 41 54  {.    ATTACH DAT
9450: 41 42 41 53 45 20 27 3a 6d 65 6d 6f 72 79 3a 27  ABASE ':memory:'
9460: 20 41 53 20 74 65 73 74 31 0a 20 20 7d 0a 7d 20   AS test1.  }.} 
9470: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  {0 {}}.do_test a
9480: 75 74 68 2d 31 2e 32 35 32 20 7b 0a 20 20 73 65  uth-1.252 {.  se
9490: 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b  t ::authargs.} {
94a0: 3a 6d 65 6d 6f 72 79 3a 20 7b 7d 20 7b 7d 20 7b  :memory: {} {} {
94b0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
94c0: 31 2e 32 35 33 20 7b 0a 20 20 63 61 74 63 68 73  1.253 {.  catchs
94d0: 71 6c 20 7b 44 45 54 41 43 48 20 44 41 54 41 42  ql {DETACH DATAB
94e0: 41 53 45 20 74 65 73 74 31 7d 0a 20 20 70 72 6f  ASE test1}.  pro
94f0: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
9500: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
9510: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
9520: 65 3d 3d 22 53 51 4c 49 54 45 5f 41 54 54 41 43  e=="SQLITE_ATTAC
9530: 48 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20  H"} {.      set 
9540: 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74  ::authargs [list
9550: 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72   $arg1 $arg2 $ar
9560: 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20  g3 $arg4].      
9570: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45  return SQLITE_DE
9580: 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  NY.    }.    ret
9590: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
95a0: 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  }.  catchsql {. 
95b0: 20 20 20 41 54 54 41 43 48 20 44 41 54 41 42 41     ATTACH DATABA
95c0: 53 45 20 27 3a 6d 65 6d 6f 72 79 3a 27 20 41 53  SE ':memory:' AS
95d0: 20 74 65 73 74 31 3b 0a 20 20 7d 0a 7d 20 7b 31   test1;.  }.} {1
95e0: 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64   {not authorized
95f0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
9600: 31 2e 32 35 34 20 7b 0a 20 20 6c 69 6e 64 65 78  1.254 {.  lindex
9610: 20 5b 65 78 65 63 73 71 6c 20 7b 50 52 41 47 4d   [execsql {PRAGM
9620: 41 20 64 61 74 61 62 61 73 65 5f 6c 69 73 74 7d  A database_list}
9630: 5d 20 37 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74  ] 7.} {}.do_test
9640: 20 61 75 74 68 2d 31 2e 32 35 35 20 7b 0a 20 20   auth-1.255 {.  
9650: 63 61 74 63 68 73 71 6c 20 7b 44 45 54 41 43 48  catchsql {DETACH
9660: 20 44 41 54 41 42 41 53 45 20 74 65 73 74 31 7d   DATABASE test1}
9670: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
9680: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
9690: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66  3 arg4} {.    if
96a0: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
96b0: 5f 41 54 54 41 43 48 22 7d 20 7b 0a 20 20 20 20  _ATTACH"} {.    
96c0: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
96d0: 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72   [list $arg1 $ar
96e0: 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a  g2 $arg3 $arg4].
96f0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
9700: 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d  ITE_IGNORE.    }
9710: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
9720: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
9730: 68 73 71 6c 20 7b 0a 20 20 20 20 41 54 54 41 43  hsql {.    ATTAC
9740: 48 20 44 41 54 41 42 41 53 45 20 27 3a 6d 65 6d  H DATABASE ':mem
9750: 6f 72 79 3a 27 20 41 53 20 74 65 73 74 31 3b 0a  ory:' AS test1;.
9760: 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f    }.} {0 {}}.do_
9770: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 35 36 20  test auth-1.256 
9780: 7b 0a 20 20 6c 69 6e 64 65 78 20 5b 65 78 65 63  {.  lindex [exec
9790: 73 71 6c 20 7b 50 52 41 47 4d 41 20 64 61 74 61  sql {PRAGMA data
97a0: 62 61 73 65 5f 6c 69 73 74 7d 5d 20 37 0a 7d 20  base_list}] 7.} 
97b0: 7b 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  {}.do_test auth-
97c0: 31 2e 32 35 37 20 7b 0a 20 20 70 72 6f 63 20 61  1.257 {.  proc a
97d0: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
97e0: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
97f0: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
9800: 22 53 51 4c 49 54 45 5f 44 45 54 41 43 48 22 7d  "SQLITE_DETACH"}
9810: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61   {.      set ::a
9820: 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61  uthargs [list $a
9830: 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20  rg1 $arg2 $arg3 
9840: 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74  $arg4].      ret
9850: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
9860: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
9870: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 65  QLITE_OK.  }.  e
9880: 78 65 63 73 71 6c 20 7b 41 54 54 41 43 48 20 44  xecsql {ATTACH D
9890: 41 54 41 42 41 53 45 20 27 3a 6d 65 6d 6f 72 79  ATABASE ':memory
98a0: 3a 27 20 41 53 20 74 65 73 74 31 7d 0a 20 20 63  :' AS test1}.  c
98b0: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 44 45  atchsql {.    DE
98c0: 54 41 43 48 20 44 41 54 41 42 41 53 45 20 74 65  TACH DATABASE te
98d0: 73 74 31 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d  st1;.  }.} {0 {}
98e0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
98f0: 2e 32 35 38 20 7b 0a 20 20 6c 69 6e 64 65 78 20  .258 {.  lindex 
9900: 5b 65 78 65 63 73 71 6c 20 7b 50 52 41 47 4d 41  [execsql {PRAGMA
9910: 20 64 61 74 61 62 61 73 65 5f 6c 69 73 74 7d 5d   database_list}]
9920: 20 37 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20   7.} {}.do_test 
9930: 61 75 74 68 2d 31 2e 32 35 39 20 7b 0a 20 20 65  auth-1.259 {.  e
9940: 78 65 63 73 71 6c 20 7b 41 54 54 41 43 48 20 44  xecsql {ATTACH D
9950: 41 54 41 42 41 53 45 20 27 3a 6d 65 6d 6f 72 79  ATABASE ':memory
9960: 3a 27 20 41 53 20 74 65 73 74 31 7d 0a 20 20 70  :' AS test1}.  p
9970: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
9980: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
9990: 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g4} {.    if {$c
99a0: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 54  ode=="SQLITE_DET
99b0: 41 43 48 22 7d 20 7b 0a 20 20 20 20 20 20 73 65  ACH"} {.      se
99c0: 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69  t ::authargs [li
99d0: 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24  st $arg1 $arg2 $
99e0: 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20  arg3 $arg4].    
99f0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
9a00: 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20  IGNORE.    }.   
9a10: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
9a20: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
9a30: 20 7b 0a 20 20 20 20 44 45 54 41 43 48 20 44 41   {.    DETACH DA
9a40: 54 41 42 41 53 45 20 74 65 73 74 31 3b 0a 20 20  TABASE test1;.  
9a50: 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  }.} {0 {}}.do_te
9a60: 73 74 20 61 75 74 68 2d 31 2e 32 36 30 20 7b 0a  st auth-1.260 {.
9a70: 20 20 6c 69 6e 64 65 78 20 5b 65 78 65 63 73 71    lindex [execsq
9a80: 6c 20 7b 50 52 41 47 4d 41 20 64 61 74 61 62 61  l {PRAGMA databa
9a90: 73 65 5f 6c 69 73 74 7d 5d 20 37 0a 7d 20 7b 74  se_list}] 7.} {t
9aa0: 65 73 74 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75  est1}.do_test au
9ab0: 74 68 2d 31 2e 32 36 31 20 7b 0a 20 20 70 72 6f  th-1.261 {.  pro
9ac0: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
9ad0: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
9ae0: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
9af0: 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 54 41 43  e=="SQLITE_DETAC
9b00: 48 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20  H"} {.      set 
9b10: 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74  ::authargs [list
9b20: 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72   $arg1 $arg2 $ar
9b30: 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20  g3 $arg4].      
9b40: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45  return SQLITE_DE
9b50: 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  NY.    }.    ret
9b60: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
9b70: 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  }.  catchsql {. 
9b80: 20 20 20 44 45 54 41 43 48 20 44 41 54 41 42 41     DETACH DATABA
9b90: 53 45 20 74 65 73 74 31 3b 0a 20 20 7d 0a 7d 20  SE test1;.  }.} 
9ba0: 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a  {1 {not authoriz
9bb0: 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  ed}}.do_test aut
9bc0: 68 2d 31 2e 32 36 32 20 7b 0a 20 20 6c 69 6e 64  h-1.262 {.  lind
9bd0: 65 78 20 5b 65 78 65 63 73 71 6c 20 7b 50 52 41  ex [execsql {PRA
9be0: 47 4d 41 20 64 61 74 61 62 61 73 65 5f 6c 69 73  GMA database_lis
9bf0: 74 7d 5d 20 37 0a 7d 20 7b 74 65 73 74 31 7d 0a  t}] 7.} {test1}.
9c00: 64 62 20 61 75 74 68 6f 72 69 7a 65 72 20 7b 7d  db authorizer {}
9c10: 0a 65 78 65 63 73 71 6c 20 7b 44 45 54 41 43 48  .execsql {DETACH
9c20: 20 44 41 54 41 42 41 53 45 20 74 65 73 74 31 7d   DATABASE test1}
9c30: 0a 0a 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  ...do_test auth-
9c40: 32 2e 31 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  2.1 {.  proc aut
9c50: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
9c60: 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20  2 arg3 arg4} {. 
9c70: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
9c80: 51 4c 49 54 45 5f 52 45 41 44 22 20 26 26 20 24  QLITE_READ" && $
9c90: 61 72 67 31 3d 3d 22 74 33 22 20 26 26 20 24 61  arg1=="t3" && $a
9ca0: 72 67 32 3d 3d 22 78 22 7d 20 7b 0a 20 20 20 20  rg2=="x"} {.    
9cb0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
9cc0: 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72  DENY.    }.    r
9cd0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
9ce0: 20 20 7d 0a 20 20 64 62 20 61 75 74 68 6f 72 69    }.  db authori
9cf0: 7a 65 72 20 3a 3a 61 75 74 68 0a 20 20 65 78 65  zer ::auth.  exe
9d00: 63 73 71 6c 20 7b 43 52 45 41 54 45 20 54 41 42  csql {CREATE TAB
9d10: 4c 45 20 74 33 28 78 20 49 4e 54 45 47 45 52 20  LE t3(x INTEGER 
9d20: 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 79 2c 20  PRIMARY KEY, y, 
9d30: 7a 29 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  z)}.  catchsql {
9d40: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33  SELECT * FROM t3
9d50: 7d 0a 7d 20 7b 31 20 7b 61 63 63 65 73 73 20 74  }.} {1 {access t
9d60: 6f 20 74 33 2e 78 20 69 73 20 70 72 6f 68 69 62  o t3.x is prohib
9d70: 69 74 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  ited}}.do_test a
9d80: 75 74 68 2d 32 2e 31 20 7b 0a 20 20 63 61 74 63  uth-2.1 {.  catc
9d90: 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 79 2c 7a  hsql {SELECT y,z
9da0: 20 46 52 4f 4d 20 74 33 7d 0a 7d 20 7b 30 20 7b   FROM t3}.} {0 {
9db0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
9dc0: 32 2e 32 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  2.2 {.  catchsql
9dd0: 20 7b 53 45 4c 45 43 54 20 52 4f 57 49 44 2c 79   {SELECT ROWID,y
9de0: 2c 7a 20 46 52 4f 4d 20 74 33 7d 0a 7d 20 7b 31  ,z FROM t3}.} {1
9df0: 20 7b 61 63 63 65 73 73 20 74 6f 20 74 33 2e 78   {access to t3.x
9e00: 20 69 73 20 70 72 6f 68 69 62 69 74 65 64 7d 7d   is prohibited}}
9e10: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 32 2e  .do_test auth-2.
9e20: 33 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  3 {.  catchsql {
9e30: 53 45 4c 45 43 54 20 4f 49 44 2c 79 2c 7a 20 46  SELECT OID,y,z F
9e40: 52 4f 4d 20 74 33 7d 0a 7d 20 7b 31 20 7b 61 63  ROM t3}.} {1 {ac
9e50: 63 65 73 73 20 74 6f 20 74 33 2e 78 20 69 73 20  cess to t3.x is 
9e60: 70 72 6f 68 69 62 69 74 65 64 7d 7d 0a 64 6f 5f  prohibited}}.do_
9e70: 74 65 73 74 20 61 75 74 68 2d 32 2e 34 20 7b 0a  test auth-2.4 {.
9e80: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
9e90: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
9ea0: 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20   arg4} {.    if 
9eb0: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
9ec0: 52 45 41 44 22 20 26 26 20 24 61 72 67 31 3d 3d  READ" && $arg1==
9ed0: 22 74 33 22 20 26 26 20 24 61 72 67 32 3d 3d 22  "t3" && $arg2=="
9ee0: 78 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75  x"} {.      retu
9ef0: 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45  rn SQLITE_IGNORE
9f00: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
9f10: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
9f20: 20 20 65 78 65 63 73 71 6c 20 7b 49 4e 53 45 52    execsql {INSER
9f30: 54 20 49 4e 54 4f 20 74 33 20 56 41 4c 55 45 53  T INTO t3 VALUES
9f40: 28 34 34 2c 35 35 2c 36 36 29 7d 0a 20 20 63 61  (44,55,66)}.  ca
9f50: 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a  tchsql {SELECT *
9f60: 20 46 52 4f 4d 20 74 33 7d 0a 7d 20 7b 30 20 7b   FROM t3}.} {0 {
9f70: 7b 7d 20 35 35 20 36 36 7d 7d 0a 64 6f 5f 74 65  {} 55 66}}.do_te
9f80: 73 74 20 61 75 74 68 2d 32 2e 35 20 7b 0a 20 20  st auth-2.5 {.  
9f90: 63 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54  catchsql {SELECT
9fa0: 20 72 6f 77 69 64 2c 79 2c 7a 20 46 52 4f 4d 20   rowid,y,z FROM 
9fb0: 74 33 7d 0a 7d 20 7b 30 20 7b 7b 7d 20 35 35 20  t3}.} {0 {{} 55 
9fc0: 36 36 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  66}}.do_test aut
9fd0: 68 2d 32 2e 36 20 7b 0a 20 20 70 72 6f 63 20 61  h-2.6 {.  proc a
9fe0: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
9ff0: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
a000: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
a010: 22 53 51 4c 49 54 45 5f 52 45 41 44 22 20 26 26  "SQLITE_READ" &&
a020: 20 24 61 72 67 31 3d 3d 22 74 33 22 20 26 26 20   $arg1=="t3" && 
a030: 24 61 72 67 32 3d 3d 22 52 4f 57 49 44 22 7d 20  $arg2=="ROWID"} 
a040: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  {.      return S
a050: 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20  QLITE_IGNORE.   
a060: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
a070: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
a080: 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a  tchsql {SELECT *
a090: 20 46 52 4f 4d 20 74 33 7d 0a 7d 20 7b 30 20 7b   FROM t3}.} {0 {
a0a0: 34 34 20 35 35 20 36 36 7d 7d 0a 64 6f 5f 74 65  44 55 66}}.do_te
a0b0: 73 74 20 61 75 74 68 2d 32 2e 37 20 7b 0a 20 20  st auth-2.7 {.  
a0c0: 63 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54  catchsql {SELECT
a0d0: 20 52 4f 57 49 44 2c 79 2c 7a 20 46 52 4f 4d 20   ROWID,y,z FROM 
a0e0: 74 33 7d 0a 7d 20 7b 30 20 7b 34 34 20 35 35 20  t3}.} {0 {44 55 
a0f0: 36 36 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  66}}.do_test aut
a100: 68 2d 32 2e 38 20 7b 0a 20 20 70 72 6f 63 20 61  h-2.8 {.  proc a
a110: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
a120: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
a130: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
a140: 22 53 51 4c 49 54 45 5f 52 45 41 44 22 20 26 26  "SQLITE_READ" &&
a150: 20 24 61 72 67 31 3d 3d 22 74 32 22 20 26 26 20   $arg1=="t2" && 
a160: 24 61 72 67 32 3d 3d 22 52 4f 57 49 44 22 7d 20  $arg2=="ROWID"} 
a170: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  {.      return S
a180: 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20  QLITE_IGNORE.   
a190: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
a1a0: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
a1b0: 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 52  tchsql {SELECT R
a1c0: 4f 57 49 44 2c 62 2c 63 20 46 52 4f 4d 20 74 32  OWID,b,c FROM t2
a1d0: 7d 0a 7d 20 7b 30 20 7b 7b 7d 20 32 20 33 33 20  }.} {0 {{} 2 33 
a1e0: 7b 7d 20 38 20 39 7d 7d 0a 64 6f 5f 74 65 73 74  {} 8 9}}.do_test
a1f0: 20 61 75 74 68 2d 32 2e 39 2e 31 20 7b 0a 20 20   auth-2.9.1 {.  
a200: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
a210: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
a220: 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg4} {.    if {$
a230: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45  code=="SQLITE_RE
a240: 41 44 22 20 26 26 20 24 61 72 67 31 3d 3d 22 74  AD" && $arg1=="t
a250: 32 22 20 26 26 20 24 61 72 67 32 3d 3d 22 52 4f  2" && $arg2=="RO
a260: 57 49 44 22 7d 20 7b 0a 20 20 20 20 20 20 72 65  WID"} {.      re
a270: 74 75 72 6e 20 62 6f 67 75 73 0a 20 20 20 20 7d  turn bogus.    }
a280: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
a290: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
a2a0: 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 52 4f 57  hsql {SELECT ROW
a2b0: 49 44 2c 62 2c 63 20 46 52 4f 4d 20 74 32 7d 0a  ID,b,c FROM t2}.
a2c0: 7d 20 7b 31 20 7b 69 6c 6c 65 67 61 6c 20 72 65  } {1 {illegal re
a2d0: 74 75 72 6e 20 76 61 6c 75 65 20 28 39 39 39 29  turn value (999)
a2e0: 20 66 72 6f 6d 20 74 68 65 20 61 75 74 68 6f 72   from the author
a2f0: 69 7a 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e  ization function
a300: 20 2d 20 73 68 6f 75 6c 64 20 62 65 20 53 51 4c   - should be SQL
a310: 49 54 45 5f 4f 4b 2c 20 53 51 4c 49 54 45 5f 49  ITE_OK, SQLITE_I
a320: 47 4e 4f 52 45 2c 20 6f 72 20 53 51 4c 49 54 45  GNORE, or SQLITE
a330: 5f 44 45 4e 59 7d 7d 0a 64 6f 5f 74 65 73 74 20  _DENY}}.do_test 
a340: 61 75 74 68 2d 32 2e 39 2e 32 20 7b 0a 20 20 64  auth-2.9.2 {.  d
a350: 62 20 65 72 72 6f 72 63 6f 64 65 0a 7d 20 7b 31  b errorcode.} {1
a360: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 32  }.do_test auth-2
a370: 2e 31 30 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  .10 {.  proc aut
a380: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
a390: 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20  2 arg3 arg4} {. 
a3a0: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
a3b0: 51 4c 49 54 45 5f 53 45 4c 45 43 54 22 7d 20 7b  QLITE_SELECT"} {
a3c0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 62 6f  .      return bo
a3d0: 67 75 73 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  gus.    }.    re
a3e0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
a3f0: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 53   }.  catchsql {S
a400: 45 4c 45 43 54 20 52 4f 57 49 44 2c 62 2c 63 20  ELECT ROWID,b,c 
a410: 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31 20 7b 69  FROM t2}.} {1 {i
a420: 6c 6c 65 67 61 6c 20 72 65 74 75 72 6e 20 76 61  llegal return va
a430: 6c 75 65 20 28 31 29 20 66 72 6f 6d 20 74 68 65  lue (1) from the
a440: 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 66   authorization f
a450: 75 6e 63 74 69 6f 6e 20 2d 20 73 68 6f 75 6c 64  unction - should
a460: 20 62 65 20 53 51 4c 49 54 45 5f 4f 4b 2c 20 53   be SQLITE_OK, S
a470: 51 4c 49 54 45 5f 49 47 4e 4f 52 45 2c 20 6f 72  QLITE_IGNORE, or
a480: 20 53 51 4c 49 54 45 5f 44 45 4e 59 7d 7d 0a 64   SQLITE_DENY}}.d
a490: 6f 5f 74 65 73 74 20 61 75 74 68 2d 32 2e 31 31  o_test auth-2.11
a4a0: 2e 31 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  .1 {.  proc auth
a4b0: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
a4c0: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
a4d0: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
a4e0: 4c 49 54 45 5f 52 45 41 44 22 20 26 26 20 24 61  LITE_READ" && $a
a4f0: 72 67 32 3d 3d 22 61 22 7d 20 7b 0a 20 20 20 20  rg2=="a"} {.    
a500: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
a510: 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20  IGNORE.    }.   
a520: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
a530: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
a540: 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   {SELECT * FROM 
a550: 74 32 2c 20 74 33 7d 0a 7d 20 7b 30 20 7b 7b 7d  t2, t3}.} {0 {{}
a560: 20 32 20 33 33 20 34 34 20 35 35 20 36 36 20 7b   2 33 44 55 66 {
a570: 7d 20 38 20 39 20 34 34 20 35 35 20 36 36 7d 7d  } 8 9 44 55 66}}
a580: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 32 2e  .do_test auth-2.
a590: 31 31 2e 32 20 7b 0a 20 20 70 72 6f 63 20 61 75  11.2 {.  proc au
a5a0: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
a5b0: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
a5c0: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
a5d0: 53 51 4c 49 54 45 5f 52 45 41 44 22 20 26 26 20  SQLITE_READ" && 
a5e0: 24 61 72 67 32 3d 3d 22 78 22 7d 20 7b 0a 20 20  $arg2=="x"} {.  
a5f0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
a600: 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20  E_IGNORE.    }. 
a610: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
a620: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
a630: 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f  ql {SELECT * FRO
a640: 4d 20 74 32 2c 20 74 33 7d 0a 7d 20 7b 30 20 7b  M t2, t3}.} {0 {
a650: 31 31 20 32 20 33 33 20 7b 7d 20 35 35 20 36 36  11 2 33 {} 55 66
a660: 20 37 20 38 20 39 20 7b 7d 20 35 35 20 36 36 7d   7 8 9 {} 55 66}
a670: 7d 0a 0a 23 20 4d 61 6b 65 20 73 75 72 65 20 74  }..# Make sure t
a680: 68 65 20 4f 4c 44 20 61 6e 64 20 4e 45 57 20 70  he OLD and NEW p
a690: 73 65 75 64 6f 2d 74 61 62 6c 65 73 20 6f 66 20  seudo-tables of 
a6a0: 61 20 74 72 69 67 67 65 72 20 67 65 74 20 61 75  a trigger get au
a6b0: 74 68 6f 72 69 7a 65 64 2e 0a 23 0a 64 6f 5f 74  thorized..#.do_t
a6c0: 65 73 74 20 61 75 74 68 2d 33 2e 31 20 7b 0a 20  est auth-3.1 {. 
a6d0: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
a6e0: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
a6f0: 61 72 67 34 7d 20 7b 0a 20 20 20 20 72 65 74 75  arg4} {.    retu
a700: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
a710: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
a720: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 78   CREATE TABLE tx
a730: 28 61 31 2c 61 32 2c 62 31 2c 62 32 2c 63 31 2c  (a1,a2,b1,b2,c1,
a740: 63 32 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20  c2);.    CREATE 
a750: 54 52 49 47 47 45 52 20 72 31 20 41 46 54 45 52  TRIGGER r1 AFTER
a760: 20 55 50 44 41 54 45 20 4f 4e 20 74 32 20 46 4f   UPDATE ON t2 FO
a770: 52 20 45 41 43 48 20 52 4f 57 20 42 45 47 49 4e  R EACH ROW BEGIN
a780: 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e  .      INSERT IN
a790: 54 4f 20 74 78 20 56 41 4c 55 45 53 28 4f 4c 44  TO tx VALUES(OLD
a7a0: 2e 61 2c 4e 45 57 2e 61 2c 4f 4c 44 2e 62 2c 4e  .a,NEW.a,OLD.b,N
a7b0: 45 57 2e 62 2c 4f 4c 44 2e 63 2c 4e 45 57 2e 63  EW.b,OLD.c,NEW.c
a7c0: 29 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 20 20  );.    END;.    
a7d0: 55 50 44 41 54 45 20 74 32 20 53 45 54 20 61 3d  UPDATE t2 SET a=
a7e0: 61 2b 31 3b 0a 20 20 20 20 53 45 4c 45 43 54 20  a+1;.    SELECT 
a7f0: 2a 20 46 52 4f 4d 20 74 78 3b 0a 20 20 7d 0a 7d  * FROM tx;.  }.}
a800: 20 7b 31 31 20 31 32 20 32 20 32 20 33 33 20 33   {11 12 2 2 33 3
a810: 33 20 37 20 38 20 38 20 38 20 39 20 39 7d 0a 64  3 7 8 8 8 9 9}.d
a820: 6f 5f 74 65 73 74 20 61 75 74 68 2d 33 2e 32 20  o_test auth-3.2 
a830: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
a840: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
a850: 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69  g3 arg4} {.    i
a860: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
a870: 45 5f 52 45 41 44 22 20 26 26 20 24 61 72 67 31  E_READ" && $arg1
a880: 3d 3d 22 74 32 22 20 26 26 20 24 61 72 67 32 3d  =="t2" && $arg2=
a890: 3d 22 63 22 7d 20 7b 0a 20 20 20 20 20 20 72 65  ="c"} {.      re
a8a0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f  turn SQLITE_IGNO
a8b0: 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  RE.    }.    ret
a8c0: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
a8d0: 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  }.  execsql {.  
a8e0: 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 78    DELETE FROM tx
a8f0: 3b 0a 20 20 20 20 55 50 44 41 54 45 20 74 32 20  ;.    UPDATE t2 
a900: 53 45 54 20 61 3d 61 2b 31 30 30 3b 0a 20 20 20  SET a=a+100;.   
a910: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
a920: 78 3b 0a 20 20 7d 0a 7d 20 7b 31 32 20 31 31 32  x;.  }.} {12 112
a930: 20 32 20 32 20 7b 7d 20 7b 7d 20 38 20 31 30 38   2 2 {} {} 8 108
a940: 20 38 20 38 20 7b 7d 20 7b 7d 7d 0a 0a 23 20 4d   8 8 {} {}}..# M
a950: 61 6b 65 20 73 75 72 65 20 74 68 65 20 6e 61 6d  ake sure the nam
a960: 65 73 20 6f 66 20 76 69 65 77 73 20 61 6e 64 20  es of views and 
a970: 74 72 69 67 67 65 72 73 20 61 72 65 20 70 61 73  triggers are pas
a980: 73 65 64 20 6f 6e 20 6f 6e 20 61 72 67 34 2e 0a  sed on on arg4..
a990: 23 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 34  #.do_test auth-4
a9a0: 2e 31 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  .1 {.  proc auth
a9b0: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
a9c0: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
a9d0: 20 20 6c 61 70 70 65 6e 64 20 3a 3a 61 75 74 68    lappend ::auth
a9e0: 61 72 67 73 20 24 63 6f 64 65 20 24 61 72 67 31  args $code $arg1
a9f0: 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72   $arg2 $arg3 $ar
aa00: 67 34 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51  g4.    return SQ
aa10: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 73 65  LITE_OK.  }.  se
aa20: 74 20 61 75 74 68 61 72 67 73 20 7b 7d 0a 20 20  t authargs {}.  
aa30: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 55 50  execsql {.    UP
aa40: 44 41 54 45 20 74 32 20 53 45 54 20 61 3d 61 2b  DATE t2 SET a=a+
aa50: 31 3b 0a 20 20 7d 0a 20 20 73 65 74 20 61 75 74  1;.  }.  set aut
aa60: 68 61 72 67 73 0a 7d 20 5b 6c 69 73 74 20 5c 0a  hargs.} [list \.
aa70: 20 20 53 51 4c 49 54 45 5f 52 45 41 44 20 20 20    SQLITE_READ   
aa80: 74 32 20 61 20 20 6d 61 69 6e 20 7b 7d 20 5c 0a  t2 a  main {} \.
aa90: 20 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20    SQLITE_UPDATE 
aaa0: 74 32 20 61 20 20 6d 61 69 6e 20 7b 7d 20 5c 0a  t2 a  main {} \.
aab0: 20 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 20    SQLITE_INSERT 
aac0: 74 78 20 7b 7d 20 6d 61 69 6e 20 72 31 20 5c 0a  tx {} main r1 \.
aad0: 20 20 53 51 4c 49 54 45 5f 52 45 41 44 20 20 20    SQLITE_READ   
aae0: 74 32 20 61 20 20 6d 61 69 6e 20 72 31 20 5c 0a  t2 a  main r1 \.
aaf0: 20 20 53 51 4c 49 54 45 5f 52 45 41 44 20 20 20    SQLITE_READ   
ab00: 74 32 20 61 20 20 6d 61 69 6e 20 72 31 20 5c 0a  t2 a  main r1 \.
ab10: 20 20 53 51 4c 49 54 45 5f 52 45 41 44 20 20 20    SQLITE_READ   
ab20: 74 32 20 62 20 20 6d 61 69 6e 20 72 31 20 5c 0a  t2 b  main r1 \.
ab30: 20 20 53 51 4c 49 54 45 5f 52 45 41 44 20 20 20    SQLITE_READ   
ab40: 74 32 20 62 20 20 6d 61 69 6e 20 72 31 20 5c 0a  t2 b  main r1 \.
ab50: 20 20 53 51 4c 49 54 45 5f 52 45 41 44 20 20 20    SQLITE_READ   
ab60: 74 32 20 63 20 20 6d 61 69 6e 20 72 31 20 5c 0a  t2 c  main r1 \.
ab70: 20 20 53 51 4c 49 54 45 5f 52 45 41 44 20 20 20    SQLITE_READ   
ab80: 74 32 20 63 20 20 6d 61 69 6e 20 72 31 5d 0a 64  t2 c  main r1].d
ab90: 6f 5f 74 65 73 74 20 61 75 74 68 2d 34 2e 32 20  o_test auth-4.2 
aba0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
abb0: 20 20 43 52 45 41 54 45 20 56 49 45 57 20 76 31    CREATE VIEW v1
abc0: 20 41 53 20 53 45 4c 45 43 54 20 61 2b 62 20 41   AS SELECT a+b A
abd0: 53 20 78 20 46 52 4f 4d 20 74 32 3b 0a 20 20 20  S x FROM t2;.   
abe0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 76 31   CREATE TABLE v1
abf0: 63 68 6e 67 28 78 31 2c 78 32 29 3b 0a 20 20 20  chng(x1,x2);.   
ac00: 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20   CREATE TRIGGER 
ac10: 72 32 20 49 4e 53 54 45 41 44 20 4f 46 20 55 50  r2 INSTEAD OF UP
ac20: 44 41 54 45 20 4f 4e 20 76 31 20 42 45 47 49 4e  DATE ON v1 BEGIN
ac30: 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e  .      INSERT IN
ac40: 54 4f 20 76 31 63 68 6e 67 20 56 41 4c 55 45 53  TO v1chng VALUES
ac50: 28 4f 4c 44 2e 78 2c 4e 45 57 2e 78 29 3b 0a 20  (OLD.x,NEW.x);. 
ac60: 20 20 20 45 4e 44 3b 0a 20 20 20 20 53 45 4c 45     END;.    SELE
ac70: 43 54 20 2a 20 46 52 4f 4d 20 76 31 3b 0a 20 20  CT * FROM v1;.  
ac80: 7d 0a 7d 20 7b 31 31 35 20 31 31 37 7d 0a 64 6f  }.} {115 117}.do
ac90: 5f 74 65 73 74 20 61 75 74 68 2d 34 2e 33 20 7b  _test auth-4.3 {
aca0: 0a 20 20 73 65 74 20 61 75 74 68 61 72 67 73 20  .  set authargs 
acb0: 7b 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  {}.  execsql {. 
acc0: 20 20 20 55 50 44 41 54 45 20 76 31 20 53 45 54     UPDATE v1 SET
acd0: 20 78 3d 31 20 57 48 45 52 45 20 78 3d 31 31 37   x=1 WHERE x=117
ace0: 0a 20 20 7d 0a 20 20 73 65 74 20 61 75 74 68 61  .  }.  set autha
acf0: 72 67 73 0a 7d 20 5b 6c 69 73 74 20 5c 0a 20 20  rgs.} [list \.  
ad00: 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20 76 31  SQLITE_UPDATE v1
ad10: 20 20 20 20 20 78 20 20 6d 61 69 6e 20 7b 7d 20       x  main {} 
ad20: 5c 0a 20 20 53 51 4c 49 54 45 5f 52 45 41 44 20  \.  SQLITE_READ 
ad30: 20 20 76 31 20 20 20 20 20 78 20 20 6d 61 69 6e    v1     x  main
ad40: 20 7b 7d 20 5c 0a 20 20 53 51 4c 49 54 45 5f 53   {} \.  SQLITE_S
ad50: 45 4c 45 43 54 20 7b 7d 20 20 20 20 20 7b 7d 20  ELECT {}     {} 
ad60: 7b 7d 20 20 20 76 31 20 5c 0a 20 20 53 51 4c 49  {}   v1 \.  SQLI
ad70: 54 45 5f 52 45 41 44 20 20 20 74 32 20 20 20 20  TE_READ   t2    
ad80: 20 61 20 20 6d 61 69 6e 20 76 31 20 5c 0a 20 20   a  main v1 \.  
ad90: 53 51 4c 49 54 45 5f 52 45 41 44 20 20 20 74 32  SQLITE_READ   t2
ada0: 20 20 20 20 20 62 20 20 6d 61 69 6e 20 76 31 20       b  main v1 
adb0: 5c 0a 20 20 53 51 4c 49 54 45 5f 49 4e 53 45 52  \.  SQLITE_INSER
adc0: 54 20 76 31 63 68 6e 67 20 7b 7d 20 6d 61 69 6e  T v1chng {} main
add0: 20 72 32 20 5c 0a 20 20 53 51 4c 49 54 45 5f 52   r2 \.  SQLITE_R
ade0: 45 41 44 20 20 20 76 31 20 20 20 20 20 78 20 20  EAD   v1     x  
adf0: 6d 61 69 6e 20 72 32 20 5c 0a 20 20 53 51 4c 49  main r2 \.  SQLI
ae00: 54 45 5f 52 45 41 44 20 20 20 76 31 20 20 20 20  TE_READ   v1    
ae10: 20 78 20 20 6d 61 69 6e 20 72 32 5d 0a 64 6f 5f   x  main r2].do_
ae20: 74 65 73 74 20 61 75 74 68 2d 34 2e 34 20 7b 0a  test auth-4.4 {.
ae30: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
ae40: 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 72  CREATE TRIGGER r
ae50: 33 20 49 4e 53 54 45 41 44 20 4f 46 20 44 45 4c  3 INSTEAD OF DEL
ae60: 45 54 45 20 4f 4e 20 76 31 20 42 45 47 49 4e 0a  ETE ON v1 BEGIN.
ae70: 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54        INSERT INT
ae80: 4f 20 76 31 63 68 6e 67 20 56 41 4c 55 45 53 28  O v1chng VALUES(
ae90: 4f 4c 44 2e 78 2c 4e 55 4c 4c 29 3b 0a 20 20 20  OLD.x,NULL);.   
aea0: 20 45 4e 44 3b 0a 20 20 20 20 53 45 4c 45 43 54   END;.    SELECT
aeb0: 20 2a 20 46 52 4f 4d 20 76 31 3b 0a 20 20 7d 0a   * FROM v1;.  }.
aec0: 7d 20 7b 31 31 35 20 31 31 37 7d 0a 64 6f 5f 74  } {115 117}.do_t
aed0: 65 73 74 20 61 75 74 68 2d 34 2e 35 20 7b 0a 20  est auth-4.5 {. 
aee0: 20 73 65 74 20 61 75 74 68 61 72 67 73 20 7b 7d   set authargs {}
aef0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
af00: 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 76 31 20   DELETE FROM v1 
af10: 57 48 45 52 45 20 78 3d 31 31 37 0a 20 20 7d 0a  WHERE x=117.  }.
af20: 20 20 73 65 74 20 61 75 74 68 61 72 67 73 0a 7d    set authargs.}
af30: 20 5b 6c 69 73 74 20 5c 0a 20 20 53 51 4c 49 54   [list \.  SQLIT
af40: 45 5f 44 45 4c 45 54 45 20 76 31 20 20 20 20 20  E_DELETE v1     
af50: 7b 7d 20 6d 61 69 6e 20 7b 7d 20 5c 0a 20 20 53  {} main {} \.  S
af60: 51 4c 49 54 45 5f 52 45 41 44 20 20 20 76 31 20  QLITE_READ   v1 
af70: 20 20 20 20 78 20 20 6d 61 69 6e 20 7b 7d 20 5c      x  main {} \
af80: 0a 20 20 53 51 4c 49 54 45 5f 53 45 4c 45 43 54  .  SQLITE_SELECT
af90: 20 7b 7d 20 20 20 20 20 7b 7d 20 7b 7d 20 20 20   {}     {} {}   
afa0: 76 31 20 5c 0a 20 20 53 51 4c 49 54 45 5f 52 45  v1 \.  SQLITE_RE
afb0: 41 44 20 20 20 74 32 20 20 20 20 20 61 20 20 6d  AD   t2     a  m
afc0: 61 69 6e 20 76 31 20 5c 0a 20 20 53 51 4c 49 54  ain v1 \.  SQLIT
afd0: 45 5f 52 45 41 44 20 20 20 74 32 20 20 20 20 20  E_READ   t2     
afe0: 62 20 20 6d 61 69 6e 20 76 31 20 5c 0a 20 20 53  b  main v1 \.  S
aff0: 51 4c 49 54 45 5f 49 4e 53 45 52 54 20 76 31 63  QLITE_INSERT v1c
b000: 68 6e 67 20 7b 7d 20 6d 61 69 6e 20 72 33 20 5c  hng {} main r3 \
b010: 0a 20 20 53 51 4c 49 54 45 5f 52 45 41 44 20 20  .  SQLITE_READ  
b020: 20 76 31 20 20 20 20 20 78 20 20 6d 61 69 6e 20   v1     x  main 
b030: 72 33 5d 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74  r3]..finish_test
b040: 0a                                               .