/ Hex Artifact Content
Login

Artifact 95809b8f6a9bec18b94d28cafd03fe27d2f8a9e9:


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