/ Hex Artifact Content
Login

Artifact a211eab0542ec024b578d771b09242dd9bb1aba3:


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