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

Artifact 5caf9c6d8ed7b2a5a760b418f5f479bf20f07c9d8be29efa977130816c587089:


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 73 71 6c 69  testing the sqli
01d0: 74 65 33 5f 73 65 74 5f 61 75 74 68 6f 72 69 7a  te3_set_authoriz
01e0: 65 72 28 29 20 41 50 49 0a 23 20 61 6e 64 20 72  er() API.# and r
01f0: 65 6c 61 74 65 64 20 66 75 6e 63 74 69 6f 6e 61  elated functiona
0200: 6c 69 74 79 2e 0a 23 0a 23 20 24 49 64 3a 20 61  lity..#.# $Id: a
0210: 75 74 68 2e 74 65 73 74 2c 76 20 31 2e 34 36 20  uth.test,v 1.46 
0220: 32 30 30 39 2f 30 37 2f 30 32 20 31 38 3a 34 30  2009/07/02 18:40
0230: 3a 33 35 20 64 61 6e 69 65 6c 6b 31 39 37 37 20  :35 danielk1977 
0240: 45 78 70 20 24 0a 23 0a 0a 73 65 74 20 74 65 73  Exp $.#..set tes
0250: 74 64 69 72 20 5b 66 69 6c 65 20 64 69 72 6e 61  tdir [file dirna
0260: 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f 75 72 63  me $argv0].sourc
0270: 65 20 24 74 65 73 74 64 69 72 2f 74 65 73 74 65  e $testdir/teste
0280: 72 2e 74 63 6c 0a 0a 23 20 64 69 73 61 62 6c 65  r.tcl..# disable
0290: 20 74 68 69 73 20 74 65 73 74 20 69 66 20 74 68   this test if th
02a0: 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  e SQLITE_OMIT_AU
02b0: 54 48 4f 52 49 5a 41 54 49 4f 4e 20 6d 61 63 72  THORIZATION macr
02c0: 6f 20 69 73 0a 23 20 64 65 66 69 6e 65 64 20 64  o is.# defined d
02d0: 75 72 69 6e 67 20 63 6f 6d 70 69 6c 61 74 69 6f  uring compilatio
02e0: 6e 2e 0a 69 66 20 7b 5b 63 61 74 63 68 20 7b 64  n..if {[catch {d
02f0: 62 20 61 75 74 68 20 7b 7d 7d 20 6d 73 67 5d 7d  b auth {}} msg]}
0300: 20 7b 0a 20 20 66 69 6e 69 73 68 5f 74 65 73 74   {.  finish_test
0310: 0a 20 20 72 65 74 75 72 6e 0a 7d 0a 0a 72 65 6e  .  return.}..ren
0320: 61 6d 65 20 70 72 6f 63 20 70 72 6f 63 5f 72 65  ame proc proc_re
0330: 61 6c 0a 70 72 6f 63 5f 72 65 61 6c 20 70 72 6f  al.proc_real pro
0340: 63 20 7b 6e 61 6d 65 20 61 72 67 75 6d 65 6e 74  c {name argument
0350: 73 20 73 63 72 69 70 74 7d 20 7b 0a 20 20 70 72  s script} {.  pr
0360: 6f 63 5f 72 65 61 6c 20 24 6e 61 6d 65 20 24 61  oc_real $name $a
0370: 72 67 75 6d 65 6e 74 73 20 24 73 63 72 69 70 74  rguments $script
0380: 0a 20 20 69 66 20 7b 24 6e 61 6d 65 3d 3d 22 61  .  if {$name=="a
0390: 75 74 68 22 7d 20 7b 0a 20 20 20 20 64 62 20 61  uth"} {.    db a
03a0: 75 74 68 6f 72 69 7a 65 72 20 3a 3a 61 75 74 68  uthorizer ::auth
03b0: 0a 20 20 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20  .  }.}..do_test 
03c0: 61 75 74 68 2d 31 2e 31 2e 31 20 7b 0a 20 20 64  auth-1.1.1 {.  d
03d0: 62 20 63 6c 6f 73 65 0a 20 20 73 65 74 20 3a 3a  b close.  set ::
03e0: 44 42 20 5b 73 71 6c 69 74 65 33 20 64 62 20 74  DB [sqlite3 db t
03f0: 65 73 74 2e 64 62 5d 0a 20 20 70 72 6f 63 20 61  est.db].  proc a
0400: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
0410: 72 67 32 20 61 72 67 33 20 61 72 67 34 20 61 72  rg2 arg3 arg4 ar
0420: 67 73 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  gs} {.    if {$c
0430: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 49 4e 53  ode=="SQLITE_INS
0440: 45 52 54 22 20 26 26 20 24 61 72 67 31 3d 3d 22  ERT" && $arg1=="
0450: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 7d 20  sqlite_master"} 
0460: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  {.      return S
0470: 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d  QLITE_DENY.    }
0480: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
0490: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 64 62 20 61  TE_OK.  }.  db a
04a0: 75 74 68 6f 72 69 7a 65 72 20 3a 3a 61 75 74 68  uthorizer ::auth
04b0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45  .  catchsql {CRE
04c0: 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c 62  ATE TABLE t1(a,b
04d0: 2c 63 29 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61  ,c)}.} {1 {not a
04e0: 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74  uthorized}}.do_t
04f0: 65 73 74 20 61 75 74 68 2d 31 2e 31 2e 32 20 7b  est auth-1.1.2 {
0500: 0a 20 20 64 62 20 65 72 72 6f 72 63 6f 64 65 0a  .  db errorcode.
0510: 7d 20 7b 32 33 7d 0a 64 6f 5f 74 65 73 74 20 61  } {23}.do_test a
0520: 75 74 68 2d 31 2e 31 2e 33 20 7b 0a 20 20 64 62  uth-1.1.3 {.  db
0530: 20 61 75 74 68 6f 72 69 7a 65 72 0a 7d 20 7b 3a   authorizer.} {:
0540: 3a 61 75 74 68 7d 0a 64 6f 5f 74 65 73 74 20 61  :auth}.do_test a
0550: 75 74 68 2d 31 2e 31 2e 34 20 7b 0a 20 20 23 20  uth-1.1.4 {.  # 
0560: 54 69 63 6b 65 74 20 23 38 39 36 2e 0a 20 20 63  Ticket #896..  c
0570: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 53 45  atchsql {.    SE
0580: 4c 45 43 54 20 78 3b 0a 20 20 7d 0a 7d 20 7b 31  LECT x;.  }.} {1
0590: 20 7b 6e 6f 20 73 75 63 68 20 63 6f 6c 75 6d 6e   {no such column
05a0: 3a 20 78 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  : x}}.do_test au
05b0: 74 68 2d 31 2e 32 20 7b 0a 20 20 65 78 65 63 73  th-1.2 {.  execs
05c0: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
05d0: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
05e0: 65 72 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74  er}.} {}.do_test
05f0: 20 61 75 74 68 2d 31 2e 33 2e 31 20 7b 0a 20 20   auth-1.3.1 {.  
0600: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
0610: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
0620: 72 67 34 20 61 72 67 73 7d 20 7b 0a 20 20 20 20  rg4 args} {.    
0630: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
0640: 54 45 5f 43 52 45 41 54 45 5f 54 41 42 4c 45 22  TE_CREATE_TABLE"
0650: 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a  } {.      set ::
0660: 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24  authargs [list $
0670: 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33  arg1 $arg2 $arg3
0680: 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65   $arg4].      re
0690: 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59  turn SQLITE_DENY
06a0: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
06b0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
06c0: 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41    catchsql {CREA
06d0: 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c 62 2c  TE TABLE t1(a,b,
06e0: 63 29 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75  c)}.} {1 {not au
06f0: 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65  thorized}}.do_te
0700: 73 74 20 61 75 74 68 2d 31 2e 33 2e 32 20 7b 0a  st auth-1.3.2 {.
0710: 20 20 64 62 20 65 72 72 6f 72 63 6f 64 65 0a 7d    db errorcode.}
0720: 20 7b 32 33 7d 0a 64 6f 5f 74 65 73 74 20 61 75   {23}.do_test au
0730: 74 68 2d 31 2e 33 2e 33 20 7b 0a 20 20 73 65 74  th-1.3.3 {.  set
0740: 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 74   ::authargs.} {t
0750: 31 20 7b 7d 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f  1 {} main {}}.do
0760: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 34 20 7b  _test auth-1.4 {
0770: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
0780: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
0790: 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 7d  ite_master}.} {}
07a0: 0a 0a 69 66 63 61 70 61 62 6c 65 20 74 65 6d 70  ..ifcapable temp
07b0: 64 62 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 61  db {.  do_test a
07c0: 75 74 68 2d 31 2e 35 20 7b 0a 20 20 20 20 70 72  uth-1.5 {.    pr
07d0: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
07e0: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
07f0: 34 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 20 20  4 args} {.      
0800: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
0810: 54 45 5f 49 4e 53 45 52 54 22 20 26 26 20 24 61  TE_INSERT" && $a
0820: 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 74 65 6d  rg1=="sqlite_tem
0830: 70 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20  p_master"} {.   
0840: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
0850: 54 45 5f 44 45 4e 59 0a 20 20 20 20 20 20 7d 0a  TE_DENY.      }.
0860: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
0870: 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20  ITE_OK.    }.   
0880: 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54   catchsql {CREAT
0890: 45 20 54 45 4d 50 20 54 41 42 4c 45 20 74 31 28  E TEMP TABLE t1(
08a0: 61 2c 62 2c 63 29 7d 0a 20 20 7d 20 7b 31 20 7b  a,b,c)}.  } {1 {
08b0: 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d  not authorized}}
08c0: 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  .  do_test auth-
08d0: 31 2e 36 20 7b 0a 20 20 20 20 65 78 65 63 73 71  1.6 {.    execsq
08e0: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
08f0: 52 4f 4d 20 74 65 6d 70 2e 73 71 6c 69 74 65 5f  ROM temp.sqlite_
0900: 6d 61 73 74 65 72 7d 0a 20 20 7d 20 7b 7d 0a 20  master}.  } {}. 
0910: 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e   do_test auth-1.
0920: 37 2e 31 20 7b 0a 20 20 20 20 70 72 6f 63 20 61  7.1 {.    proc a
0930: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
0940: 72 67 32 20 61 72 67 33 20 61 72 67 34 20 61 72  rg2 arg3 arg4 ar
0950: 67 73 7d 20 7b 0a 20 20 20 20 20 20 69 66 20 7b  gs} {.      if {
0960: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43  $code=="SQLITE_C
0970: 52 45 41 54 45 5f 54 45 4d 50 5f 54 41 42 4c 45  REATE_TEMP_TABLE
0980: 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74  "} {.        set
0990: 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73   ::authargs [lis
09a0: 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61  t $arg1 $arg2 $a
09b0: 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20  rg3 $arg4].     
09c0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
09d0: 5f 44 45 4e 59 0a 20 20 20 20 20 20 7d 0a 20 20  _DENY.      }.  
09e0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
09f0: 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63  E_OK.    }.    c
0a00: 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45 20  atchsql {CREATE 
0a10: 54 45 4d 50 20 54 41 42 4c 45 20 74 31 28 61 2c  TEMP TABLE t1(a,
0a20: 62 2c 63 29 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f  b,c)}.  } {1 {no
0a30: 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 20  t authorized}}. 
0a40: 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e   do_test auth-1.
0a50: 37 2e 32 20 7b 0a 20 20 20 20 20 73 65 74 20 3a  7.2 {.     set :
0a60: 3a 61 75 74 68 61 72 67 73 0a 20 20 7d 20 7b 74  :authargs.  } {t
0a70: 31 20 7b 7d 20 74 65 6d 70 20 7b 7d 7d 0a 20 20  1 {} temp {}}.  
0a80: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 38  do_test auth-1.8
0a90: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
0aa0: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
0ab0: 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73   sqlite_temp_mas
0ac0: 74 65 72 7d 0a 20 20 7d 20 7b 7d 0a 7d 0a 0a 64  ter}.  } {}.}..d
0ad0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 39 20  o_test auth-1.9 
0ae0: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
0af0: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
0b00: 67 33 20 61 72 67 34 20 61 72 67 73 7d 20 7b 0a  g3 arg4 args} {.
0b10: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
0b20: 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 22 20 26  SQLITE_INSERT" &
0b30: 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65  & $arg1=="sqlite
0b40: 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20  _master"} {.    
0b50: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
0b60: 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20  IGNORE.    }.   
0b70: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
0b80: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
0b90: 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 74   {CREATE TABLE t
0ba0: 31 28 61 2c 62 2c 63 29 7d 0a 7d 20 7b 30 20 7b  1(a,b,c)}.} {0 {
0bb0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
0bc0: 31 2e 31 30 20 7b 0a 20 20 65 78 65 63 73 71 6c  1.10 {.  execsql
0bd0: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
0be0: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
0bf0: 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 61  }.} {}.do_test a
0c00: 75 74 68 2d 31 2e 31 31 20 7b 0a 20 20 70 72 6f  uth-1.11 {.  pro
0c10: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
0c20: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
0c30: 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 69 66 20   args} {.    if 
0c40: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
0c50: 43 52 45 41 54 45 5f 54 41 42 4c 45 22 7d 20 7b  CREATE_TABLE"} {
0c60: 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74  .      set ::aut
0c70: 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67  hargs [list $arg
0c80: 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61  1 $arg2 $arg3 $a
0c90: 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72  rg4].      retur
0ca0: 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a  n SQLITE_IGNORE.
0cb0: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
0cc0: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
0cd0: 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54   catchsql {CREAT
0ce0: 45 20 54 41 42 4c 45 20 74 31 28 61 2c 62 2c 63  E TABLE t1(a,b,c
0cf0: 29 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74  )}.} {0 {}}.do_t
0d00: 65 73 74 20 61 75 74 68 2d 31 2e 31 32 20 7b 0a  est auth-1.12 {.
0d10: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
0d20: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
0d30: 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 7d 0a  te_master}.} {}.
0d40: 0a 69 66 63 61 70 61 62 6c 65 20 74 65 6d 70 64  .ifcapable tempd
0d50: 62 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 61 75  b {.  do_test au
0d60: 74 68 2d 31 2e 31 33 20 7b 0a 20 20 20 20 70 72  th-1.13 {.    pr
0d70: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
0d80: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
0d90: 34 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 20 20  4 args} {.      
0da0: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
0db0: 54 45 5f 49 4e 53 45 52 54 22 20 26 26 20 24 61  TE_INSERT" && $a
0dc0: 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 74 65 6d  rg1=="sqlite_tem
0dd0: 70 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20  p_master"} {.   
0de0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
0df0: 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 20 20  TE_IGNORE.      
0e00: 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  }.      return S
0e10: 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20  QLITE_OK.    }. 
0e20: 20 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45     catchsql {CRE
0e30: 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 74  ATE TEMP TABLE t
0e40: 31 28 61 2c 62 2c 63 29 7d 0a 20 20 7d 20 7b 30  1(a,b,c)}.  } {0
0e50: 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61   {}}.  do_test a
0e60: 75 74 68 2d 31 2e 31 34 20 7b 0a 20 20 20 20 65  uth-1.14 {.    e
0e70: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
0e80: 61 6d 65 20 46 52 4f 4d 20 74 65 6d 70 2e 73 71  ame FROM temp.sq
0e90: 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 20 20 7d  lite_master}.  }
0ea0: 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75   {}.  do_test au
0eb0: 74 68 2d 31 2e 31 35 20 7b 0a 20 20 20 20 70 72  th-1.15 {.    pr
0ec0: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
0ed0: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
0ee0: 34 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 20 20  4 args} {.      
0ef0: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
0f00: 54 45 5f 43 52 45 41 54 45 5f 54 45 4d 50 5f 54  TE_CREATE_TEMP_T
0f10: 41 42 4c 45 22 7d 20 7b 0a 20 20 20 20 20 20 20  ABLE"} {.       
0f20: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
0f30: 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67  [list $arg1 $arg
0f40: 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20  2 $arg3 $arg4]. 
0f50: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
0f60: 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20  LITE_IGNORE.    
0f70: 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e    }.      return
0f80: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d   SQLITE_OK.    }
0f90: 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 43  .    catchsql {C
0fa0: 52 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45  REATE TEMP TABLE
0fb0: 20 74 31 28 61 2c 62 2c 63 29 7d 0a 20 20 7d 20   t1(a,b,c)}.  } 
0fc0: 7b 30 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74  {0 {}}.  do_test
0fd0: 20 61 75 74 68 2d 31 2e 31 36 20 7b 0a 20 20 20   auth-1.16 {.   
0fe0: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
0ff0: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
1000: 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 20  e_temp_master}. 
1010: 20 7d 20 7b 7d 0a 20 20 0a 20 20 64 6f 5f 74 65   } {}.  .  do_te
1020: 73 74 20 61 75 74 68 2d 31 2e 31 37 20 7b 0a 20  st auth-1.17 {. 
1030: 20 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f     proc auth {co
1040: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
1050: 33 20 61 72 67 34 20 61 72 67 73 7d 20 7b 0a 20  3 arg4 args} {. 
1060: 20 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d       if {$code==
1070: 22 53 51 4c 49 54 45 5f 43 52 45 41 54 45 5f 54  "SQLITE_CREATE_T
1080: 41 42 4c 45 22 7d 20 7b 0a 20 20 20 20 20 20 20  ABLE"} {.       
1090: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
10a0: 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67  [list $arg1 $arg
10b0: 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20  2 $arg3 $arg4]. 
10c0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
10d0: 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 20 20  LITE_DENY.      
10e0: 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  }.      return S
10f0: 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20  QLITE_OK.    }. 
1100: 20 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45     catchsql {CRE
1110: 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 74  ATE TEMP TABLE t
1120: 31 28 61 2c 62 2c 63 29 7d 0a 20 20 7d 20 7b 30  1(a,b,c)}.  } {0
1130: 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61   {}}.  do_test a
1140: 75 74 68 2d 31 2e 31 38 20 7b 0a 20 20 20 20 65  uth-1.18 {.    e
1150: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
1160: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
1170: 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 20 20 7d  temp_master}.  }
1180: 20 7b 74 31 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74   {t1}.}..do_test
1190: 20 61 75 74 68 2d 31 2e 31 39 2e 31 20 7b 0a 20   auth-1.19.1 {. 
11a0: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
11b0: 7b 7d 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b  {}.  proc auth {
11c0: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
11d0: 72 67 33 20 61 72 67 34 20 61 72 67 73 7d 20 7b  rg3 arg4 args} {
11e0: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
11f0: 22 53 51 4c 49 54 45 5f 43 52 45 41 54 45 5f 54  "SQLITE_CREATE_T
1200: 45 4d 50 5f 54 41 42 4c 45 22 7d 20 7b 0a 20 20  EMP_TABLE"} {.  
1210: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
1220: 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24  gs [list $arg1 $
1230: 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34  arg2 $arg3 $arg4
1240: 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  ].      return S
1250: 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d  QLITE_DENY.    }
1260: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
1270: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
1280: 68 73 71 6c 20 7b 43 52 45 41 54 45 20 54 41 42  hsql {CREATE TAB
1290: 4c 45 20 74 32 28 61 2c 62 2c 63 29 7d 0a 7d 20  LE t2(a,b,c)}.} 
12a0: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  {0 {}}.do_test a
12b0: 75 74 68 2d 31 2e 31 39 2e 32 20 7b 0a 20 20 73  uth-1.19.2 {.  s
12c0: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20  et ::authargs.} 
12d0: 7b 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  {}.do_test auth-
12e0: 31 2e 32 30 20 7b 0a 20 20 65 78 65 63 73 71 6c  1.20 {.  execsql
12f0: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
1300: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
1310: 7d 0a 7d 20 7b 74 32 7d 0a 0a 64 6f 5f 74 65 73  }.} {t2}..do_tes
1320: 74 20 61 75 74 68 2d 31 2e 32 31 2e 31 20 7b 0a  t auth-1.21.1 {.
1330: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
1340: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
1350: 20 61 72 67 34 20 61 72 67 73 7d 20 7b 0a 20 20   arg4 args} {.  
1360: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
1370: 4c 49 54 45 5f 44 52 4f 50 5f 54 41 42 4c 45 22  LITE_DROP_TABLE"
1380: 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a  } {.      set ::
1390: 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24  authargs [list $
13a0: 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33  arg1 $arg2 $arg3
13b0: 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65   $arg4].      re
13c0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59  turn SQLITE_DENY
13d0: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
13e0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
13f0: 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50    catchsql {DROP
1400: 20 54 41 42 4c 45 20 74 32 7d 0a 7d 20 7b 31 20   TABLE t2}.} {1 
1410: 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d  {not authorized}
1420: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
1430: 2e 32 31 2e 32 20 7b 0a 20 20 73 65 74 20 3a 3a  .21.2 {.  set ::
1440: 61 75 74 68 61 72 67 73 0a 7d 20 7b 74 32 20 7b  authargs.} {t2 {
1450: 7d 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65  } main {}}.do_te
1460: 73 74 20 61 75 74 68 2d 31 2e 32 32 20 7b 0a 20  st auth-1.22 {. 
1470: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
1480: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
1490: 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 7d  e_master}.} {t2}
14a0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
14b0: 32 33 2e 31 20 7b 0a 20 20 70 72 6f 63 20 61 75  23.1 {.  proc au
14c0: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
14d0: 67 32 20 61 72 67 33 20 61 72 67 34 20 61 72 67  g2 arg3 arg4 arg
14e0: 73 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f  s} {.    if {$co
14f0: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f 50  de=="SQLITE_DROP
1500: 5f 54 41 42 4c 45 22 7d 20 7b 0a 20 20 20 20 20  _TABLE"} {.     
1510: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
1520: 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67  [list $arg1 $arg
1530: 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20  2 $arg3 $arg4]. 
1540: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
1550: 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a  TE_IGNORE.    }.
1560: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
1570: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
1580: 73 71 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45 20  sql {DROP TABLE 
1590: 74 32 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f  t2}.} {0 {}}.do_
15a0: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 33 2e 32  test auth-1.23.2
15b0: 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61   {.  set ::autha
15c0: 72 67 73 0a 7d 20 7b 74 32 20 7b 7d 20 6d 61 69  rgs.} {t2 {} mai
15d0: 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  n {}}.do_test au
15e0: 74 68 2d 31 2e 32 34 20 7b 0a 20 20 65 78 65 63  th-1.24 {.  exec
15f0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
1600: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
1610: 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a 0a 69 66 63  ter}.} {t2}..ifc
1620: 61 70 61 62 6c 65 20 74 65 6d 70 64 62 20 7b 0a  apable tempdb {.
1630: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31    do_test auth-1
1640: 2e 32 35 20 7b 0a 20 20 20 20 70 72 6f 63 20 61  .25 {.    proc a
1650: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
1660: 72 67 32 20 61 72 67 33 20 61 72 67 34 20 61 72  rg2 arg3 arg4 ar
1670: 67 73 7d 20 7b 0a 20 20 20 20 20 20 69 66 20 7b  gs} {.      if {
1680: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44  $code=="SQLITE_D
1690: 52 4f 50 5f 54 45 4d 50 5f 54 41 42 4c 45 22 7d  ROP_TEMP_TABLE"}
16a0: 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 3a   {.        set :
16b0: 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20  :authargs [list 
16c0: 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67  $arg1 $arg2 $arg
16d0: 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 20  3 $arg4].       
16e0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44   return SQLITE_D
16f0: 45 4e 59 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ENY.      }.    
1700: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
1710: 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 74  OK.    }.    cat
1720: 63 68 73 71 6c 20 7b 44 52 4f 50 20 54 41 42 4c  chsql {DROP TABL
1730: 45 20 74 31 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f  E t1}.  } {1 {no
1740: 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 20  t authorized}}. 
1750: 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e   do_test auth-1.
1760: 32 36 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  26 {.    execsql
1770: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
1780: 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  OM sqlite_temp_m
1790: 61 73 74 65 72 7d 0a 20 20 7d 20 7b 74 31 7d 0a  aster}.  } {t1}.
17a0: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31    do_test auth-1
17b0: 2e 32 37 20 7b 0a 20 20 20 20 70 72 6f 63 20 61  .27 {.    proc a
17c0: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
17d0: 72 67 32 20 61 72 67 33 20 61 72 67 34 20 61 72  rg2 arg3 arg4 ar
17e0: 67 73 7d 20 7b 0a 20 20 20 20 20 20 69 66 20 7b  gs} {.      if {
17f0: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44  $code=="SQLITE_D
1800: 52 4f 50 5f 54 45 4d 50 5f 54 41 42 4c 45 22 7d  ROP_TEMP_TABLE"}
1810: 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 3a   {.        set :
1820: 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20  :authargs [list 
1830: 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67  $arg1 $arg2 $arg
1840: 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 20  3 $arg4].       
1850: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49   return SQLITE_I
1860: 47 4e 4f 52 45 0a 20 20 20 20 20 20 7d 0a 20 20  GNORE.      }.  
1870: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
1880: 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63  E_OK.    }.    c
1890: 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54 41  atchsql {DROP TA
18a0: 42 4c 45 20 74 31 7d 0a 20 20 7d 20 7b 30 20 7b  BLE t1}.  } {0 {
18b0: 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74  }}.  do_test aut
18c0: 68 2d 31 2e 32 38 20 7b 0a 20 20 20 20 65 78 65  h-1.28 {.    exe
18d0: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d  csql {SELECT nam
18e0: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65  e FROM sqlite_te
18f0: 6d 70 5f 6d 61 73 74 65 72 7d 0a 20 20 7d 20 7b  mp_master}.  } {
1900: 74 31 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20 61  t1}.}..do_test a
1910: 75 74 68 2d 31 2e 32 39 20 7b 0a 20 20 70 72 6f  uth-1.29 {.  pro
1920: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
1930: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
1940: 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 69 66 20   args} {.    if 
1950: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
1960: 49 4e 53 45 52 54 22 20 26 26 20 24 61 72 67 31  INSERT" && $arg1
1970: 3d 3d 22 74 32 22 7d 20 7b 0a 20 20 20 20 20 20  =="t2"} {.      
1980: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45  return SQLITE_DE
1990: 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  NY.    }.    ret
19a0: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
19b0: 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 49 4e  }.  catchsql {IN
19c0: 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c  SERT INTO t2 VAL
19d0: 55 45 53 28 31 2c 32 2c 33 29 7d 0a 7d 20 7b 31  UES(1,2,3)}.} {1
19e0: 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64   {not authorized
19f0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
1a00: 31 2e 33 30 20 7b 0a 20 20 65 78 65 63 73 71 6c  1.30 {.  execsql
1a10: 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   {SELECT * FROM 
1a20: 74 32 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74  t2}.} {}.do_test
1a30: 20 61 75 74 68 2d 31 2e 33 31 20 7b 0a 20 20 70   auth-1.31 {.  p
1a40: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
1a50: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
1a60: 67 34 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 69  g4 args} {.    i
1a70: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
1a80: 45 5f 49 4e 53 45 52 54 22 20 26 26 20 24 61 72  E_INSERT" && $ar
1a90: 67 31 3d 3d 22 74 32 22 7d 20 7b 0a 20 20 20 20  g1=="t2"} {.    
1aa0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
1ab0: 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20  IGNORE.    }.   
1ac0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
1ad0: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
1ae0: 20 7b 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32   {INSERT INTO t2
1af0: 20 56 41 4c 55 45 53 28 31 2c 32 2c 33 29 7d 0a   VALUES(1,2,3)}.
1b00: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
1b10: 20 61 75 74 68 2d 31 2e 33 32 20 7b 0a 20 20 65   auth-1.32 {.  e
1b20: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a  xecsql {SELECT *
1b30: 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 7d 0a 64   FROM t2}.} {}.d
1b40: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 33 33  o_test auth-1.33
1b50: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
1b60: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
1b70: 72 67 33 20 61 72 67 34 20 61 72 67 73 7d 20 7b  rg3 arg4 args} {
1b80: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
1b90: 22 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 22 20  "SQLITE_INSERT" 
1ba0: 26 26 20 24 61 72 67 31 3d 3d 22 74 31 22 7d 20  && $arg1=="t1"} 
1bb0: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  {.      return S
1bc0: 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20  QLITE_IGNORE.   
1bd0: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
1be0: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
1bf0: 74 63 68 73 71 6c 20 7b 49 4e 53 45 52 54 20 49  tchsql {INSERT I
1c00: 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 31 2c  NTO t2 VALUES(1,
1c10: 32 2c 33 29 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  2,3)}.} {0 {}}.d
1c20: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 33 34  o_test auth-1.34
1c30: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
1c40: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d 0a  LECT * FROM t2}.
1c50: 7d 20 7b 31 20 32 20 33 7d 0a 0a 64 6f 5f 74 65  } {1 2 3}..do_te
1c60: 73 74 20 61 75 74 68 2d 31 2e 33 35 2e 31 20 7b  st auth-1.35.1 {
1c70: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
1c80: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
1c90: 33 20 61 72 67 34 20 61 72 67 73 7d 20 7b 0a 20  3 arg4 args} {. 
1ca0: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
1cb0: 51 4c 49 54 45 5f 52 45 41 44 22 20 26 26 20 24  QLITE_READ" && $
1cc0: 61 72 67 31 3d 3d 22 74 32 22 20 26 26 20 24 61  arg1=="t2" && $a
1cd0: 72 67 32 3d 3d 22 62 22 7d 20 7b 0a 20 20 20 20  rg2=="b"} {.    
1ce0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
1cf0: 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72  DENY.    }.    r
1d00: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
1d10: 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b    }.  catchsql {
1d20: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32  SELECT * FROM t2
1d30: 7d 0a 7d 20 7b 31 20 7b 61 63 63 65 73 73 20 74  }.} {1 {access t
1d40: 6f 20 74 32 2e 62 20 69 73 20 70 72 6f 68 69 62  o t2.b is prohib
1d50: 69 74 65 64 7d 7d 0a 69 66 63 61 70 61 62 6c 65  ited}}.ifcapable
1d60: 20 61 74 74 61 63 68 20 7b 0a 20 20 64 6f 5f 74   attach {.  do_t
1d70: 65 73 74 20 61 75 74 68 2d 31 2e 33 35 2e 32 20  est auth-1.35.2 
1d80: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 41  {.    execsql {A
1d90: 54 54 41 43 48 20 44 41 54 41 42 41 53 45 20 27  TTACH DATABASE '
1da0: 74 65 73 74 2e 64 62 27 20 41 53 20 74 77 6f 7d  test.db' AS two}
1db0: 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 53  .    catchsql {S
1dc0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 77 6f  ELECT * FROM two
1dd0: 2e 74 32 7d 0a 20 20 7d 20 7b 31 20 7b 61 63 63  .t2}.  } {1 {acc
1de0: 65 73 73 20 74 6f 20 74 77 6f 2e 74 32 2e 62 20  ess to two.t2.b 
1df0: 69 73 20 70 72 6f 68 69 62 69 74 65 64 7d 7d 0a  is prohibited}}.
1e00: 20 20 65 78 65 63 73 71 6c 20 7b 44 45 54 41 43    execsql {DETAC
1e10: 48 20 44 41 54 41 42 41 53 45 20 74 77 6f 7d 0a  H DATABASE two}.
1e20: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
1e30: 2e 33 36 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  .36 {.  proc aut
1e40: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
1e50: 32 20 61 72 67 33 20 61 72 67 34 20 61 72 67 73  2 arg3 arg4 args
1e60: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
1e70: 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45 41 44 22  e=="SQLITE_READ"
1e80: 20 26 26 20 24 61 72 67 31 3d 3d 22 74 32 22 20   && $arg1=="t2" 
1e90: 26 26 20 24 61 72 67 32 3d 3d 22 62 22 7d 20 7b  && $arg2=="b"} {
1ea0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
1eb0: 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20  LITE_IGNORE.    
1ec0: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
1ed0: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
1ee0: 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20  chsql {SELECT * 
1ef0: 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 30 20 7b 31  FROM t2}.} {0 {1
1f00: 20 7b 7d 20 33 7d 7d 0a 64 6f 5f 74 65 73 74 20   {} 3}}.do_test 
1f10: 61 75 74 68 2d 31 2e 33 37 20 7b 0a 20 20 70 72  auth-1.37 {.  pr
1f20: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
1f30: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
1f40: 34 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 69 66  4 args} {.    if
1f50: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
1f60: 5f 52 45 41 44 22 20 26 26 20 24 61 72 67 31 3d  _READ" && $arg1=
1f70: 3d 22 74 32 22 20 26 26 20 24 61 72 67 32 3d 3d  ="t2" && $arg2==
1f80: 22 62 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74  "b"} {.      ret
1f90: 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52  urn SQLITE_IGNOR
1fa0: 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  E.    }.    retu
1fb0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
1fc0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 53 45 4c  .  catchsql {SEL
1fd0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 20 57 48  ECT * FROM t2 WH
1fe0: 45 52 45 20 62 3d 32 7d 0a 7d 20 7b 30 20 7b 7d  ERE b=2}.} {0 {}
1ff0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
2000: 2e 33 38 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  .38 {.  proc aut
2010: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
2020: 32 20 61 72 67 33 20 61 72 67 34 20 61 72 67 73  2 arg3 arg4 args
2030: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
2040: 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45 41 44 22  e=="SQLITE_READ"
2050: 20 26 26 20 24 61 72 67 31 3d 3d 22 74 32 22 20   && $arg1=="t2" 
2060: 26 26 20 24 61 72 67 32 3d 3d 22 61 22 7d 20 7b  && $arg2=="a"} {
2070: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
2080: 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20  LITE_IGNORE.    
2090: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
20a0: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
20b0: 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20  chsql {SELECT * 
20c0: 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20 62 3d  FROM t2 WHERE b=
20d0: 32 7d 0a 7d 20 7b 30 20 7b 7b 7d 20 32 20 33 7d  2}.} {0 {{} 2 3}
20e0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
20f0: 2e 33 39 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  .39 {.  proc aut
2100: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
2110: 32 20 61 72 67 33 20 61 72 67 34 20 61 72 67 73  2 arg3 arg4 args
2120: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
2130: 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45 41 44 22  e=="SQLITE_READ"
2140: 20 26 26 20 24 61 72 67 31 3d 3d 22 74 32 22 20   && $arg1=="t2" 
2150: 26 26 20 24 61 72 67 32 3d 3d 22 62 22 7d 20 7b  && $arg2=="b"} {
2160: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
2170: 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20  LITE_IGNORE.    
2180: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
2190: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
21a0: 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20  chsql {SELECT * 
21b0: 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20 62 20  FROM t2 WHERE b 
21c0: 49 53 20 4e 55 4c 4c 7d 0a 7d 20 7b 30 20 7b 31  IS NULL}.} {0 {1
21d0: 20 7b 7d 20 33 7d 7d 0a 64 6f 5f 74 65 73 74 20   {} 3}}.do_test 
21e0: 61 75 74 68 2d 31 2e 34 30 20 7b 0a 20 20 70 72  auth-1.40 {.  pr
21f0: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
2200: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
2210: 34 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 69 66  4 args} {.    if
2220: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
2230: 5f 52 45 41 44 22 20 26 26 20 24 61 72 67 31 3d  _READ" && $arg1=
2240: 3d 22 74 32 22 20 26 26 20 24 61 72 67 32 3d 3d  ="t2" && $arg2==
2250: 22 62 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74  "b"} {.      ret
2260: 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a  urn SQLITE_DENY.
2270: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
2280: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
2290: 20 63 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43   catchsql {SELEC
22a0: 54 20 61 2c 63 20 46 52 4f 4d 20 74 32 20 57 48  T a,c FROM t2 WH
22b0: 45 52 45 20 62 20 49 53 20 4e 55 4c 4c 7d 0a 7d  ERE b IS NULL}.}
22c0: 20 7b 31 20 7b 61 63 63 65 73 73 20 74 6f 20 74   {1 {access to t
22d0: 32 2e 62 20 69 73 20 70 72 6f 68 69 62 69 74 65  2.b is prohibite
22e0: 64 7d 7d 0a 20 20 0a 64 6f 5f 74 65 73 74 20 61  d}}.  .do_test a
22f0: 75 74 68 2d 31 2e 34 31 20 7b 0a 20 20 70 72 6f  uth-1.41 {.  pro
2300: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
2310: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
2320: 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 69 66 20   args} {.    if 
2330: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
2340: 55 50 44 41 54 45 22 20 26 26 20 24 61 72 67 31  UPDATE" && $arg1
2350: 3d 3d 22 74 32 22 20 26 26 20 24 61 72 67 32 3d  =="t2" && $arg2=
2360: 3d 22 62 22 7d 20 7b 0a 20 20 20 20 20 20 72 65  ="b"} {.      re
2370: 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59  turn SQLITE_DENY
2380: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
2390: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
23a0: 20 20 63 61 74 63 68 73 71 6c 20 7b 55 50 44 41    catchsql {UPDA
23b0: 54 45 20 74 32 20 53 45 54 20 61 3d 31 31 7d 0a  TE t2 SET a=11}.
23c0: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
23d0: 20 61 75 74 68 2d 31 2e 34 32 20 7b 0a 20 20 65   auth-1.42 {.  e
23e0: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a  xecsql {SELECT *
23f0: 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31 31 20   FROM t2}.} {11 
2400: 32 20 33 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  2 3}.do_test aut
2410: 68 2d 31 2e 34 33 20 7b 0a 20 20 70 72 6f 63 20  h-1.43 {.  proc 
2420: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
2430: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 20 61  arg2 arg3 arg4 a
2440: 72 67 73 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rgs} {.    if {$
2450: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 55 50  code=="SQLITE_UP
2460: 44 41 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d  DATE" && $arg1==
2470: 22 74 32 22 20 26 26 20 24 61 72 67 32 3d 3d 22  "t2" && $arg2=="
2480: 62 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75  b"} {.      retu
2490: 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20  rn SQLITE_DENY. 
24a0: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
24b0: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
24c0: 63 61 74 63 68 73 71 6c 20 7b 55 50 44 41 54 45  catchsql {UPDATE
24d0: 20 74 32 20 53 45 54 20 62 3d 32 32 2c 20 63 3d   t2 SET b=22, c=
24e0: 33 33 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75  33}.} {1 {not au
24f0: 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65  thorized}}.do_te
2500: 73 74 20 61 75 74 68 2d 31 2e 34 34 20 7b 0a 20  st auth-1.44 {. 
2510: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
2520: 20 2a 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31   * FROM t2}.} {1
2530: 31 20 32 20 33 7d 0a 64 6f 5f 74 65 73 74 20 61  1 2 3}.do_test a
2540: 75 74 68 2d 31 2e 34 35 20 7b 0a 20 20 70 72 6f  uth-1.45 {.  pro
2550: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
2560: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
2570: 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 69 66 20   args} {.    if 
2580: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
2590: 55 50 44 41 54 45 22 20 26 26 20 24 61 72 67 31  UPDATE" && $arg1
25a0: 3d 3d 22 74 32 22 20 26 26 20 24 61 72 67 32 3d  =="t2" && $arg2=
25b0: 3d 22 62 22 7d 20 7b 0a 20 20 20 20 20 20 72 65  ="b"} {.      re
25c0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f  turn SQLITE_IGNO
25d0: 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  RE.    }.    ret
25e0: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
25f0: 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 55 50  }.  catchsql {UP
2600: 44 41 54 45 20 74 32 20 53 45 54 20 62 3d 32 32  DATE t2 SET b=22
2610: 2c 20 63 3d 33 33 7d 0a 7d 20 7b 30 20 7b 7d 7d  , c=33}.} {0 {}}
2620: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
2630: 34 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  46 {.  execsql {
2640: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32  SELECT * FROM t2
2650: 7d 0a 7d 20 7b 31 31 20 32 20 33 33 7d 0a 0a 64  }.} {11 2 33}..d
2660: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 34 37  o_test auth-1.47
2670: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
2680: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
2690: 72 67 33 20 61 72 67 34 20 61 72 67 73 7d 20 7b  rg3 arg4 args} {
26a0: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
26b0: 22 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 22 20  "SQLITE_DELETE" 
26c0: 26 26 20 24 61 72 67 31 3d 3d 22 74 32 22 7d 20  && $arg1=="t2"} 
26d0: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  {.      return S
26e0: 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d  QLITE_DENY.    }
26f0: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
2700: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
2710: 68 73 71 6c 20 7b 44 45 4c 45 54 45 20 46 52 4f  hsql {DELETE FRO
2720: 4d 20 74 32 20 57 48 45 52 45 20 61 3d 31 31 7d  M t2 WHERE a=11}
2730: 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f  .} {1 {not autho
2740: 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20  rized}}.do_test 
2750: 61 75 74 68 2d 31 2e 34 38 20 7b 0a 20 20 65 78  auth-1.48 {.  ex
2760: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20  ecsql {SELECT * 
2770: 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31 31 20 32  FROM t2}.} {11 2
2780: 20 33 33 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   33}.do_test aut
2790: 68 2d 31 2e 34 39 20 7b 0a 20 20 70 72 6f 63 20  h-1.49 {.  proc 
27a0: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
27b0: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 20 61  arg2 arg3 arg4 a
27c0: 72 67 73 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rgs} {.    if {$
27d0: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45  code=="SQLITE_DE
27e0: 4c 45 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d  LETE" && $arg1==
27f0: 22 74 32 22 7d 20 7b 0a 20 20 20 20 20 20 72 65  "t2"} {.      re
2800: 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f  turn SQLITE_IGNO
2810: 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  RE.    }.    ret
2820: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
2830: 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44 45  }.  catchsql {DE
2840: 4c 45 54 45 20 46 52 4f 4d 20 74 32 20 57 48 45  LETE FROM t2 WHE
2850: 52 45 20 61 3d 31 31 7d 0a 7d 20 7b 30 20 7b 7d  RE a=11}.} {0 {}
2860: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
2870: 2e 35 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .50 {.  execsql 
2880: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
2890: 32 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20  2}.} {}.do_test 
28a0: 61 75 74 68 2d 31 2e 35 30 2e 32 20 7b 0a 20 20  auth-1.50.2 {.  
28b0: 65 78 65 63 73 71 6c 20 7b 49 4e 53 45 52 54 20  execsql {INSERT 
28c0: 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 31  INTO t2 VALUES(1
28d0: 31 2c 20 32 2c 20 33 33 29 7d 0a 7d 20 7b 7d 0a  1, 2, 33)}.} {}.
28e0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
28f0: 35 31 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  51 {.  proc auth
2900: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
2910: 20 61 72 67 33 20 61 72 67 34 20 61 72 67 73 7d   arg3 arg4 args}
2920: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
2930: 3d 3d 22 53 51 4c 49 54 45 5f 53 45 4c 45 43 54  =="SQLITE_SELECT
2940: 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72  "} {.      retur
2950: 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20  n SQLITE_DENY.  
2960: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
2970: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
2980: 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20  atchsql {SELECT 
2990: 2a 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31 20  * FROM t2}.} {1 
29a0: 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d  {not authorized}
29b0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
29c0: 2e 35 32 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  .52 {.  proc aut
29d0: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
29e0: 32 20 61 72 67 33 20 61 72 67 34 20 61 72 67 73  2 arg3 arg4 args
29f0: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
2a00: 65 3d 3d 22 53 51 4c 49 54 45 5f 53 45 4c 45 43  e=="SQLITE_SELEC
2a10: 54 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75  T"} {.      retu
2a20: 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45  rn SQLITE_IGNORE
2a30: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
2a40: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
2a50: 20 20 63 61 74 63 68 73 71 6c 20 7b 53 45 4c 45    catchsql {SELE
2a60: 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d 0a 7d 20  CT * FROM t2}.} 
2a70: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  {0 {}}.do_test a
2a80: 75 74 68 2d 31 2e 35 33 20 7b 0a 20 20 70 72 6f  uth-1.53 {.  pro
2a90: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
2aa0: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
2ab0: 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 69 66 20   args} {.    if 
2ac0: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
2ad0: 53 45 4c 45 43 54 22 7d 20 7b 0a 20 20 20 20 20  SELECT"} {.     
2ae0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
2af0: 4b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  K.    }.    retu
2b00: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
2b10: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 53 45 4c  .  catchsql {SEL
2b20: 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d 0a 7d  ECT * FROM t2}.}
2b30: 20 7b 30 20 7b 31 31 20 32 20 33 33 7d 7d 0a 0a   {0 {11 2 33}}..
2b40: 23 20 55 70 64 61 74 65 20 66 6f 72 20 76 65 72  # Update for ver
2b50: 73 69 6f 6e 20 33 3a 20 54 68 65 72 65 20 75 73  sion 3: There us
2b60: 65 64 20 74 6f 20 62 65 20 61 20 68 61 6e 64 66  ed to be a handf
2b70: 75 6c 20 6f 66 20 74 65 73 74 20 68 65 72 65 20  ul of test here 
2b80: 74 68 61 74 0a 23 20 74 65 73 74 65 64 20 74 68  that.# tested th
2b90: 65 20 61 75 74 68 6f 72 69 73 61 74 69 6f 6e 20  e authorisation 
2ba0: 63 61 6c 6c 62 61 63 6b 20 77 69 74 68 20 74 68  callback with th
2bb0: 65 20 43 4f 50 59 20 63 6f 6d 6d 61 6e 64 2e 20  e COPY command. 
2bc0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 23 20  The following.# 
2bd0: 74 65 73 74 20 6d 61 6b 65 73 20 74 68 65 20 73  test makes the s
2be0: 61 6d 65 20 64 61 74 61 62 61 73 65 20 6d 6f 64  ame database mod
2bf0: 69 66 69 63 61 74 69 6f 6e 73 20 61 73 20 74 68  ifications as th
2c00: 65 79 20 75 73 65 64 20 74 6f 2e 0a 64 6f 5f 74  ey used to..do_t
2c10: 65 73 74 20 61 75 74 68 2d 31 2e 35 34 20 7b 0a  est auth-1.54 {.
2c20: 20 20 65 78 65 63 73 71 6c 20 7b 49 4e 53 45 52    execsql {INSER
2c30: 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53  T INTO t2 VALUES
2c40: 28 37 2c 20 38 2c 20 39 29 3b 7d 0a 7d 20 7b 7d  (7, 8, 9);}.} {}
2c50: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
2c60: 35 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  55 {.  execsql {
2c70: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32  SELECT * FROM t2
2c80: 7d 0a 7d 20 7b 31 31 20 32 20 33 33 20 37 20 38  }.} {11 2 33 7 8
2c90: 20 39 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 75 74   9}..do_test aut
2ca0: 68 2d 31 2e 36 33 20 7b 0a 20 20 70 72 6f 63 20  h-1.63 {.  proc 
2cb0: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
2cc0: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 20 61  arg2 arg3 arg4 a
2cd0: 72 67 73 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rgs} {.    if {$
2ce0: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45  code=="SQLITE_DE
2cf0: 4c 45 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d  LETE" && $arg1==
2d00: 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 7d  "sqlite_master"}
2d10: 20 7b 0a 20 20 20 20 20 20 20 72 65 74 75 72 6e   {.       return
2d20: 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20   SQLITE_DENY.   
2d30: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
2d40: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
2d50: 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54 41 42  tchsql {DROP TAB
2d60: 4c 45 20 74 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74  LE t2}.} {1 {not
2d70: 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f   authorized}}.do
2d80: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 36 34 20  _test auth-1.64 
2d90: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
2da0: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
2db0: 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b  lite_master}.} {
2dc0: 74 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  t2}.do_test auth
2dd0: 2d 31 2e 36 35 20 7b 0a 20 20 70 72 6f 63 20 61  -1.65 {.  proc a
2de0: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
2df0: 72 67 32 20 61 72 67 33 20 61 72 67 34 20 61 72  rg2 arg3 arg4 ar
2e00: 67 73 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  gs} {.    if {$c
2e10: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c  ode=="SQLITE_DEL
2e20: 45 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d 22  ETE" && $arg1=="
2e30: 74 32 22 7d 20 7b 0a 20 20 20 20 20 20 20 72 65  t2"} {.       re
2e40: 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59  turn SQLITE_DENY
2e50: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
2e60: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
2e70: 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50    catchsql {DROP
2e80: 20 54 41 42 4c 45 20 74 32 7d 0a 7d 20 7b 31 20   TABLE t2}.} {1 
2e90: 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d  {not authorized}
2ea0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
2eb0: 2e 36 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .66 {.  execsql 
2ec0: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
2ed0: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d  M sqlite_master}
2ee0: 0a 7d 20 7b 74 32 7d 0a 0a 69 66 63 61 70 61 62  .} {t2}..ifcapab
2ef0: 6c 65 20 74 65 6d 70 64 62 20 7b 0a 20 20 64 6f  le tempdb {.  do
2f00: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 36 37 20  _test auth-1.67 
2f10: 7b 0a 20 20 20 20 70 72 6f 63 20 61 75 74 68 20  {.    proc auth 
2f20: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
2f30: 61 72 67 33 20 61 72 67 34 20 61 72 67 73 7d 20  arg3 arg4 args} 
2f40: 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64  {.      if {$cod
2f50: 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45 54  e=="SQLITE_DELET
2f60: 45 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71  E" && $arg1=="sq
2f70: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
2f80: 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 72 65  "} {.         re
2f90: 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59  turn SQLITE_DENY
2fa0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72  .      }.      r
2fb0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
2fc0: 20 20 20 20 7d 0a 20 20 20 20 63 61 74 63 68 73      }.    catchs
2fd0: 71 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45 20 74  ql {DROP TABLE t
2fe0: 31 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f 74 20 61  1}.  } {1 {not a
2ff0: 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 20 20 64 6f  uthorized}}.  do
3000: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 36 38 20  _test auth-1.68 
3010: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53  {.    execsql {S
3020: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
3030: 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
3040: 65 72 7d 0a 20 20 7d 20 7b 74 31 7d 0a 20 20 64  er}.  } {t1}.  d
3050: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 36 39  o_test auth-1.69
3060: 20 7b 0a 20 20 20 20 70 72 6f 63 20 61 75 74 68   {.    proc auth
3070: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
3080: 20 61 72 67 33 20 61 72 67 34 20 61 72 67 73 7d   arg3 arg4 args}
3090: 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f   {.      if {$co
30a0: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45  de=="SQLITE_DELE
30b0: 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d 22 74  TE" && $arg1=="t
30c0: 31 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 72  1"} {.         r
30d0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e  eturn SQLITE_DEN
30e0: 59 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  Y.      }.      
30f0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
3100: 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 74 63 68  .    }.    catch
3110: 73 71 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45 20  sql {DROP TABLE 
3120: 74 31 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f 74 20  t1}.  } {1 {not 
3130: 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 20 20 64  authorized}}.  d
3140: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 37 30  o_test auth-1.70
3150: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
3160: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
3170: 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73   sqlite_temp_mas
3180: 74 65 72 7d 0a 20 20 7d 20 7b 74 31 7d 0a 7d 0a  ter}.  } {t1}.}.
3190: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
31a0: 37 31 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  71 {.  proc auth
31b0: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
31c0: 20 61 72 67 33 20 61 72 67 34 20 61 72 67 73 7d   arg3 arg4 args}
31d0: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
31e0: 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45 54 45  =="SQLITE_DELETE
31f0: 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71 6c  " && $arg1=="sql
3200: 69 74 65 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20  ite_master"} {. 
3210: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
3220: 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d  ITE_IGNORE.    }
3230: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
3240: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
3250: 68 73 71 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45  hsql {DROP TABLE
3260: 20 74 32 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f   t2}.} {0 {}}.do
3270: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 37 32 20  _test auth-1.72 
3280: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
3290: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
32a0: 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b  lite_master}.} {
32b0: 74 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  t2}.do_test auth
32c0: 2d 31 2e 37 33 20 7b 0a 20 20 70 72 6f 63 20 61  -1.73 {.  proc a
32d0: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
32e0: 72 67 32 20 61 72 67 33 20 61 72 67 34 20 61 72  rg2 arg3 arg4 ar
32f0: 67 73 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  gs} {.    if {$c
3300: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c  ode=="SQLITE_DEL
3310: 45 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d 22  ETE" && $arg1=="
3320: 74 32 22 7d 20 7b 0a 20 20 20 20 20 20 20 72 65  t2"} {.       re
3330: 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f  turn SQLITE_IGNO
3340: 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  RE.    }.    ret
3350: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
3360: 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52  }.  catchsql {DR
3370: 4f 50 20 54 41 42 4c 45 20 74 32 7d 0a 7d 20 7b  OP TABLE t2}.} {
3380: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  0 {}}.do_test au
3390: 74 68 2d 31 2e 37 34 20 7b 0a 20 20 65 78 65 63  th-1.74 {.  exec
33a0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
33b0: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
33c0: 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a 0a 69 66 63  ter}.} {t2}..ifc
33d0: 61 70 61 62 6c 65 20 74 65 6d 70 64 62 20 7b 0a  apable tempdb {.
33e0: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31    do_test auth-1
33f0: 2e 37 35 20 7b 0a 20 20 20 20 70 72 6f 63 20 61  .75 {.    proc a
3400: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
3410: 72 67 32 20 61 72 67 33 20 61 72 67 34 20 61 72  rg2 arg3 arg4 ar
3420: 67 73 7d 20 7b 0a 20 20 20 20 20 20 69 66 20 7b  gs} {.      if {
3430: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44  $code=="SQLITE_D
3440: 45 4c 45 54 45 22 20 26 26 20 24 61 72 67 31 3d  ELETE" && $arg1=
3450: 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  ="sqlite_temp_ma
3460: 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 20  ster"} {.       
3470: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
3480: 49 47 4e 4f 52 45 0a 20 20 20 20 20 20 7d 0a 20  IGNORE.      }. 
3490: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
34a0: 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20  TE_OK.    }.    
34b0: 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54  catchsql {DROP T
34c0: 41 42 4c 45 20 74 31 7d 0a 20 20 7d 20 7b 30 20  ABLE t1}.  } {0 
34d0: 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75  {}}.  do_test au
34e0: 74 68 2d 31 2e 37 36 20 7b 0a 20 20 20 20 65 78  th-1.76 {.    ex
34f0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61  ecsql {SELECT na
3500: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74  me FROM sqlite_t
3510: 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 20 20 7d 20  emp_master}.  } 
3520: 7b 74 31 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61  {t1}.  do_test a
3530: 75 74 68 2d 31 2e 37 37 20 7b 0a 20 20 20 20 70  uth-1.77 {.    p
3540: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
3550: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
3560: 67 34 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 20  g4 args} {.     
3570: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
3580: 49 54 45 5f 44 45 4c 45 54 45 22 20 26 26 20 24  ITE_DELETE" && $
3590: 61 72 67 31 3d 3d 22 74 31 22 7d 20 7b 0a 20 20  arg1=="t1"} {.  
35a0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
35b0: 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20  LITE_IGNORE.    
35c0: 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e    }.      return
35d0: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d   SQLITE_OK.    }
35e0: 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 44  .    catchsql {D
35f0: 52 4f 50 20 54 41 42 4c 45 20 74 31 7d 0a 20 20  ROP TABLE t1}.  
3600: 7d 20 7b 30 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65  } {0 {}}.  do_te
3610: 73 74 20 61 75 74 68 2d 31 2e 37 38 20 7b 0a 20  st auth-1.78 {. 
3620: 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45     execsql {SELE
3630: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 74 65 6d  CT name FROM tem
3640: 70 2e 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d  p.sqlite_master}
3650: 0a 20 20 7d 20 7b 74 31 7d 0a 7d 0a 0a 23 20 54  .  } {t1}.}..# T
3660: 65 73 74 20 63 61 73 65 73 20 61 75 74 68 2d 31  est cases auth-1
3670: 2e 37 39 20 74 6f 20 61 75 74 68 2d 31 2e 31 32  .79 to auth-1.12
3680: 34 20 74 65 73 74 20 63 72 65 61 74 69 6e 67 20  4 test creating 
3690: 61 6e 64 20 64 72 6f 70 70 69 6e 67 20 76 69 65  and dropping vie
36a0: 77 73 2e 0a 23 20 4f 6d 69 74 20 74 68 65 73 65  ws..# Omit these
36b0: 20 69 66 20 74 68 65 20 6c 69 62 72 61 72 79 20   if the library 
36c0: 77 61 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74  was compiled wit
36d0: 68 20 76 69 65 77 73 20 6f 6d 69 74 74 65 64 2e  h views omitted.
36e0: 0a 69 66 63 61 70 61 62 6c 65 20 76 69 65 77 20  .ifcapable view 
36f0: 7b 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  {.do_test auth-1
3700: 2e 37 39 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  .79 {.  proc aut
3710: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
3720: 32 20 61 72 67 33 20 61 72 67 34 20 61 72 67 73  2 arg3 arg4 args
3730: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
3740: 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52 45 41 54  e=="SQLITE_CREAT
3750: 45 5f 56 49 45 57 22 7d 20 7b 0a 20 20 20 20 20  E_VIEW"} {.     
3760: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
3770: 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67  [list $arg1 $arg
3780: 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 20 0a  2 $arg3 $arg4] .
3790: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
37a0: 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20  ITE_DENY.    }. 
37b0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
37c0: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
37d0: 71 6c 20 7b 43 52 45 41 54 45 20 56 49 45 57 20  ql {CREATE VIEW 
37e0: 76 31 20 41 53 20 53 45 4c 45 43 54 20 61 2b 31  v1 AS SELECT a+1
37f0: 2c 62 2b 31 20 46 52 4f 4d 20 74 32 7d 0a 7d 20  ,b+1 FROM t2}.} 
3800: 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a  {1 {not authoriz
3810: 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  ed}}.do_test aut
3820: 68 2d 31 2e 38 30 20 7b 0a 20 20 73 65 74 20 3a  h-1.80 {.  set :
3830: 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 76 31 20  :authargs.} {v1 
3840: 7b 7d 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74  {} main {}}.do_t
3850: 65 73 74 20 61 75 74 68 2d 31 2e 38 31 20 7b 0a  est auth-1.81 {.
3860: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
3870: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
3880: 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32  te_master}.} {t2
3890: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
38a0: 2e 38 32 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  .82 {.  proc aut
38b0: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
38c0: 32 20 61 72 67 33 20 61 72 67 34 20 61 72 67 73  2 arg3 arg4 args
38d0: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
38e0: 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52 45 41 54  e=="SQLITE_CREAT
38f0: 45 5f 56 49 45 57 22 7d 20 7b 0a 20 20 20 20 20  E_VIEW"} {.     
3900: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
3910: 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67  [list $arg1 $arg
3920: 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 20 0a  2 $arg3 $arg4] .
3930: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
3940: 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d  ITE_IGNORE.    }
3950: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
3960: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
3970: 68 73 71 6c 20 7b 43 52 45 41 54 45 20 56 49 45  hsql {CREATE VIE
3980: 57 20 76 31 20 41 53 20 53 45 4c 45 43 54 20 61  W v1 AS SELECT a
3990: 2b 31 2c 62 2b 31 20 46 52 4f 4d 20 74 32 7d 0a  +1,b+1 FROM t2}.
39a0: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
39b0: 20 61 75 74 68 2d 31 2e 38 33 20 7b 0a 20 20 73   auth-1.83 {.  s
39c0: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20  et ::authargs.} 
39d0: 7b 76 31 20 7b 7d 20 6d 61 69 6e 20 7b 7d 7d 0a  {v1 {} main {}}.
39e0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 38  do_test auth-1.8
39f0: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  4 {.  execsql {S
3a00: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
3a10: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d  sqlite_master}.}
3a20: 20 7b 74 32 7d 0a 0a 69 66 63 61 70 61 62 6c 65   {t2}..ifcapable
3a30: 20 74 65 6d 70 64 62 20 7b 0a 20 20 64 6f 5f 74   tempdb {.  do_t
3a40: 65 73 74 20 61 75 74 68 2d 31 2e 38 35 20 7b 0a  est auth-1.85 {.
3a50: 20 20 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63      proc auth {c
3a60: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
3a70: 67 33 20 61 72 67 34 20 61 72 67 73 7d 20 7b 0a  g3 arg4 args} {.
3a80: 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d        if {$code=
3a90: 3d 22 53 51 4c 49 54 45 5f 43 52 45 41 54 45 5f  ="SQLITE_CREATE_
3aa0: 54 45 4d 50 5f 56 49 45 57 22 7d 20 7b 0a 20 20  TEMP_VIEW"} {.  
3ab0: 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68        set ::auth
3ac0: 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31  args [list $arg1
3ad0: 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72   $arg2 $arg3 $ar
3ae0: 67 34 5d 20 0a 20 20 20 20 20 20 20 20 72 65 74  g4] .        ret
3af0: 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a  urn SQLITE_DENY.
3b00: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65        }.      re
3b10: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
3b20: 20 20 20 7d 0a 20 20 20 20 63 61 74 63 68 73 71     }.    catchsq
3b30: 6c 20 7b 43 52 45 41 54 45 20 54 45 4d 50 4f 52  l {CREATE TEMPOR
3b40: 41 52 59 20 56 49 45 57 20 76 31 20 41 53 20 53  ARY VIEW v1 AS S
3b50: 45 4c 45 43 54 20 61 2b 31 2c 62 2b 31 20 46 52  ELECT a+1,b+1 FR
3b60: 4f 4d 20 74 32 7d 0a 20 20 7d 20 7b 31 20 7b 6e  OM t2}.  } {1 {n
3b70: 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a  ot authorized}}.
3b80: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31    do_test auth-1
3b90: 2e 38 36 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a  .86 {.    set ::
3ba0: 61 75 74 68 61 72 67 73 0a 20 20 7d 20 7b 76 31  authargs.  } {v1
3bb0: 20 7b 7d 20 74 65 6d 70 20 7b 7d 7d 0a 20 20 64   {} temp {}}.  d
3bc0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 38 37  o_test auth-1.87
3bd0: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
3be0: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
3bf0: 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73   sqlite_temp_mas
3c00: 74 65 72 7d 0a 20 20 7d 20 7b 74 31 7d 0a 20 20  ter}.  } {t1}.  
3c10: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 38  do_test auth-1.8
3c20: 38 20 7b 0a 20 20 20 20 70 72 6f 63 20 61 75 74  8 {.    proc aut
3c30: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
3c40: 32 20 61 72 67 33 20 61 72 67 34 20 61 72 67 73  2 arg3 arg4 args
3c50: 7d 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 63  } {.      if {$c
3c60: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52 45  ode=="SQLITE_CRE
3c70: 41 54 45 5f 54 45 4d 50 5f 56 49 45 57 22 7d 20  ATE_TEMP_VIEW"} 
3c80: 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a  {.        set ::
3c90: 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24  authargs [list $
3ca0: 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33  arg1 $arg2 $arg3
3cb0: 20 24 61 72 67 34 5d 20 0a 20 20 20 20 20 20 20   $arg4] .       
3cc0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49   return SQLITE_I
3cd0: 47 4e 4f 52 45 0a 20 20 20 20 20 20 7d 0a 20 20  GNORE.      }.  
3ce0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
3cf0: 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63  E_OK.    }.    c
3d00: 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45 20  atchsql {CREATE 
3d10: 54 45 4d 50 4f 52 41 52 59 20 56 49 45 57 20 76  TEMPORARY VIEW v
3d20: 31 20 41 53 20 53 45 4c 45 43 54 20 61 2b 31 2c  1 AS SELECT a+1,
3d30: 62 2b 31 20 46 52 4f 4d 20 74 32 7d 0a 20 20 7d  b+1 FROM t2}.  }
3d40: 20 7b 30 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73   {0 {}}.  do_tes
3d50: 74 20 61 75 74 68 2d 31 2e 38 39 20 7b 0a 20 20  t auth-1.89 {.  
3d60: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
3d70: 0a 20 20 7d 20 7b 76 31 20 7b 7d 20 74 65 6d 70  .  } {v1 {} temp
3d80: 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61   {}}.  do_test a
3d90: 75 74 68 2d 31 2e 39 30 20 7b 0a 20 20 20 20 65  uth-1.90 {.    e
3da0: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
3db0: 61 6d 65 20 46 52 4f 4d 20 74 65 6d 70 2e 73 71  ame FROM temp.sq
3dc0: 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 20 20 7d  lite_master}.  }
3dd0: 20 7b 74 31 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74   {t1}.}..do_test
3de0: 20 61 75 74 68 2d 31 2e 39 31 20 7b 0a 20 20 70   auth-1.91 {.  p
3df0: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
3e00: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
3e10: 67 34 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 69  g4 args} {.    i
3e20: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
3e30: 45 5f 49 4e 53 45 52 54 22 20 26 26 20 24 61 72  E_INSERT" && $ar
3e40: 67 31 3d 3d 22 73 71 6c 69 74 65 5f 6d 61 73 74  g1=="sqlite_mast
3e50: 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74  er"} {.      ret
3e60: 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a  urn SQLITE_DENY.
3e70: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
3e80: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
3e90: 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54   catchsql {CREAT
3ea0: 45 20 56 49 45 57 20 76 31 20 41 53 20 53 45 4c  E VIEW v1 AS SEL
3eb0: 45 43 54 20 61 2b 31 2c 62 2b 31 20 46 52 4f 4d  ECT a+1,b+1 FROM
3ec0: 20 74 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61   t2}.} {1 {not a
3ed0: 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74  uthorized}}.do_t
3ee0: 65 73 74 20 61 75 74 68 2d 31 2e 39 32 20 7b 0a  est auth-1.92 {.
3ef0: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
3f00: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
3f10: 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32  te_master}.} {t2
3f20: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
3f30: 2e 39 33 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  .93 {.  proc aut
3f40: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
3f50: 32 20 61 72 67 33 20 61 72 67 34 20 61 72 67 73  2 arg3 arg4 args
3f60: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
3f70: 65 3d 3d 22 53 51 4c 49 54 45 5f 49 4e 53 45 52  e=="SQLITE_INSER
3f80: 54 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71  T" && $arg1=="sq
3f90: 6c 69 74 65 5f 6d 61 73 74 65 72 22 7d 20 7b 0a  lite_master"} {.
3fa0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
3fb0: 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d  ITE_IGNORE.    }
3fc0: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
3fd0: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
3fe0: 68 73 71 6c 20 7b 43 52 45 41 54 45 20 56 49 45  hsql {CREATE VIE
3ff0: 57 20 76 31 20 41 53 20 53 45 4c 45 43 54 20 61  W v1 AS SELECT a
4000: 2b 31 2c 62 2b 31 20 46 52 4f 4d 20 74 32 7d 0a  +1,b+1 FROM t2}.
4010: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
4020: 20 61 75 74 68 2d 31 2e 39 34 20 7b 0a 20 20 65   auth-1.94 {.  e
4030: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
4040: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
4050: 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a 0a  master}.} {t2}..
4060: 69 66 63 61 70 61 62 6c 65 20 74 65 6d 70 64 62  ifcapable tempdb
4070: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74   {.  do_test aut
4080: 68 2d 31 2e 39 35 20 7b 0a 20 20 20 20 70 72 6f  h-1.95 {.    pro
4090: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
40a0: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
40b0: 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 20 20 69   args} {.      i
40c0: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
40d0: 45 5f 49 4e 53 45 52 54 22 20 26 26 20 24 61 72  E_INSERT" && $ar
40e0: 67 31 3d 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70  g1=="sqlite_temp
40f0: 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20  _master"} {.    
4100: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
4110: 45 5f 44 45 4e 59 0a 20 20 20 20 20 20 7d 0a 20  E_DENY.      }. 
4120: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
4130: 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20  TE_OK.    }.    
4140: 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45  catchsql {CREATE
4150: 20 54 45 4d 50 4f 52 41 52 59 20 56 49 45 57 20   TEMPORARY VIEW 
4160: 76 31 20 41 53 20 53 45 4c 45 43 54 20 61 2b 31  v1 AS SELECT a+1
4170: 2c 62 2b 31 20 46 52 4f 4d 20 74 32 7d 0a 20 20  ,b+1 FROM t2}.  
4180: 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72  } {1 {not author
4190: 69 7a 65 64 7d 7d 0a 20 20 64 6f 5f 74 65 73 74  ized}}.  do_test
41a0: 20 61 75 74 68 2d 31 2e 39 36 20 7b 0a 20 20 20   auth-1.96 {.   
41b0: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
41c0: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
41d0: 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 20  e_temp_master}. 
41e0: 20 7d 20 7b 74 31 7d 0a 20 20 64 6f 5f 74 65 73   } {t1}.  do_tes
41f0: 74 20 61 75 74 68 2d 31 2e 39 37 20 7b 0a 20 20  t auth-1.97 {.  
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 20 61 72 67 73 7d 20 7b 0a 20 20   arg4 args} {.  
4230: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
4240: 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 22 20 26  SQLITE_INSERT" &
4250: 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65  & $arg1=="sqlite
4260: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 7d 20 7b  _temp_master"} {
4270: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
4280: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20  SQLITE_IGNORE.  
4290: 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75      }.      retu
42a0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20  rn SQLITE_OK.   
42b0: 20 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20   }.    catchsql 
42c0: 7b 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52  {CREATE TEMPORAR
42d0: 59 20 56 49 45 57 20 76 31 20 41 53 20 53 45 4c  Y VIEW v1 AS SEL
42e0: 45 43 54 20 61 2b 31 2c 62 2b 31 20 46 52 4f 4d  ECT a+1,b+1 FROM
42f0: 20 74 32 7d 0a 20 20 7d 20 7b 30 20 7b 7d 7d 0a   t2}.  } {0 {}}.
4300: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31    do_test auth-1
4310: 2e 39 38 20 7b 0a 20 20 20 20 65 78 65 63 73 71  .98 {.    execsq
4320: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
4330: 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f  ROM sqlite_temp_
4340: 6d 61 73 74 65 72 7d 0a 20 20 7d 20 7b 74 31 7d  master}.  } {t1}
4350: 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  .}..do_test auth
4360: 2d 31 2e 39 39 20 7b 0a 20 20 70 72 6f 63 20 61  -1.99 {.  proc a
4370: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
4380: 72 67 32 20 61 72 67 33 20 61 72 67 34 20 61 72  rg2 arg3 arg4 ar
4390: 67 73 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  gs} {.    if {$c
43a0: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c  ode=="SQLITE_DEL
43b0: 45 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d 22  ETE" && $arg1=="
43c0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 7d 20  sqlite_master"} 
43d0: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  {.      return S
43e0: 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d  QLITE_DENY.    }
43f0: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
4400: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
4410: 68 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  hsql {.    CREAT
4420: 45 20 56 49 45 57 20 76 32 20 41 53 20 53 45 4c  E VIEW v2 AS SEL
4430: 45 43 54 20 61 2b 31 2c 62 2b 31 20 46 52 4f 4d  ECT a+1,b+1 FROM
4440: 20 74 32 3b 0a 20 20 20 20 44 52 4f 50 20 56 49   t2;.    DROP VI
4450: 45 57 20 76 32 0a 20 20 7d 0a 7d 20 7b 31 20 7b  EW v2.  }.} {1 {
4460: 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d  not authorized}}
4470: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
4480: 31 30 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  100 {.  execsql 
4490: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
44a0: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d  M sqlite_master}
44b0: 0a 7d 20 7b 74 32 20 76 32 7d 0a 64 6f 5f 74 65  .} {t2 v2}.do_te
44c0: 73 74 20 61 75 74 68 2d 31 2e 31 30 31 20 7b 0a  st auth-1.101 {.
44d0: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
44e0: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
44f0: 20 61 72 67 34 20 61 72 67 73 7d 20 7b 0a 20 20   arg4 args} {.  
4500: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
4510: 4c 49 54 45 5f 44 52 4f 50 5f 56 49 45 57 22 7d  LITE_DROP_VIEW"}
4520: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61   {.      set ::a
4530: 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61  uthargs [list $a
4540: 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20  rg1 $arg2 $arg3 
4550: 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74  $arg4].      ret
4560: 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a  urn SQLITE_DENY.
4570: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
4580: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
4590: 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20   catchsql {DROP 
45a0: 56 49 45 57 20 76 32 7d 0a 7d 20 7b 31 20 7b 6e  VIEW v2}.} {1 {n
45b0: 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a  ot authorized}}.
45c0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
45d0: 30 32 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74  02 {.  set ::aut
45e0: 68 61 72 67 73 0a 7d 20 7b 76 32 20 7b 7d 20 6d  hargs.} {v2 {} m
45f0: 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20  ain {}}.do_test 
4600: 61 75 74 68 2d 31 2e 31 30 33 20 7b 0a 20 20 65  auth-1.103 {.  e
4610: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
4620: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
4630: 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 20 76 32  master}.} {t2 v2
4640: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
4650: 2e 31 30 34 20 7b 0a 20 20 70 72 6f 63 20 61 75  .104 {.  proc au
4660: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
4670: 67 32 20 61 72 67 33 20 61 72 67 34 20 61 72 67  g2 arg3 arg4 arg
4680: 73 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f  s} {.    if {$co
4690: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45  de=="SQLITE_DELE
46a0: 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73  TE" && $arg1=="s
46b0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 7d 20 7b  qlite_master"} {
46c0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
46d0: 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20  LITE_IGNORE.    
46e0: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
46f0: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
4700: 63 68 73 71 6c 20 7b 44 52 4f 50 20 56 49 45 57  chsql {DROP VIEW
4710: 20 76 32 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f   v2}.} {0 {}}.do
4720: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 30 35  _test auth-1.105
4730: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
4740: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73  LECT name FROM s
4750: 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20  qlite_master}.} 
4760: 7b 74 32 20 76 32 7d 0a 64 6f 5f 74 65 73 74 20  {t2 v2}.do_test 
4770: 61 75 74 68 2d 31 2e 31 30 36 20 7b 0a 20 20 70  auth-1.106 {.  p
4780: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
4790: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
47a0: 67 34 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 69  g4 args} {.    i
47b0: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
47c0: 45 5f 44 52 4f 50 5f 56 49 45 57 22 7d 20 7b 0a  E_DROP_VIEW"} {.
47d0: 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68        set ::auth
47e0: 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31  args [list $arg1
47f0: 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72   $arg2 $arg3 $ar
4800: 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  g4].      return
4810: 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20   SQLITE_IGNORE. 
4820: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
4830: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
4840: 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 56  catchsql {DROP V
4850: 49 45 57 20 76 32 7d 0a 7d 20 7b 30 20 7b 7d 7d  IEW v2}.} {0 {}}
4860: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
4870: 31 30 37 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75  107 {.  set ::au
4880: 74 68 61 72 67 73 0a 7d 20 7b 76 32 20 7b 7d 20  thargs.} {v2 {} 
4890: 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  main {}}.do_test
48a0: 20 61 75 74 68 2d 31 2e 31 30 38 20 7b 0a 20 20   auth-1.108 {.  
48b0: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
48c0: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
48d0: 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 20 76  _master}.} {t2 v
48e0: 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  2}.do_test auth-
48f0: 31 2e 31 30 39 20 7b 0a 20 20 70 72 6f 63 20 61  1.109 {.  proc a
4900: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
4910: 72 67 32 20 61 72 67 33 20 61 72 67 34 20 61 72  rg2 arg3 arg4 ar
4920: 67 73 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  gs} {.    if {$c
4930: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f  ode=="SQLITE_DRO
4940: 50 5f 56 49 45 57 22 7d 20 7b 0a 20 20 20 20 20  P_VIEW"} {.     
4950: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
4960: 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67  [list $arg1 $arg
4970: 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20  2 $arg3 $arg4]. 
4980: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
4990: 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20  TE_OK.    }.    
49a0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
49b0: 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20  .  }.  catchsql 
49c0: 7b 44 52 4f 50 20 56 49 45 57 20 76 32 7d 0a 7d  {DROP VIEW v2}.}
49d0: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
49e0: 61 75 74 68 2d 31 2e 31 31 30 20 7b 0a 20 20 73  auth-1.110 {.  s
49f0: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20  et ::authargs.} 
4a00: 7b 76 32 20 7b 7d 20 6d 61 69 6e 20 7b 7d 7d 0a  {v2 {} main {}}.
4a10: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
4a20: 31 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  11 {.  execsql {
4a30: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
4a40: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a   sqlite_master}.
4a50: 7d 20 7b 74 32 7d 0a 0a 0a 69 66 63 61 70 61 62  } {t2}...ifcapab
4a60: 6c 65 20 74 65 6d 70 64 62 20 7b 0a 20 20 64 6f  le tempdb {.  do
4a70: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 31 32  _test auth-1.112
4a80: 20 7b 0a 20 20 20 20 70 72 6f 63 20 61 75 74 68   {.    proc auth
4a90: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
4aa0: 20 61 72 67 33 20 61 72 67 34 20 61 72 67 73 7d   arg3 arg4 args}
4ab0: 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f   {.      if {$co
4ac0: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45  de=="SQLITE_DELE
4ad0: 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73  TE" && $arg1=="s
4ae0: 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
4af0: 72 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 72 65  r"} {.        re
4b00: 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59  turn SQLITE_DENY
4b10: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72  .      }.      r
4b20: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
4b30: 20 20 20 20 7d 0a 20 20 20 20 63 61 74 63 68 73      }.    catchs
4b40: 71 6c 20 7b 0a 20 20 20 20 20 20 43 52 45 41 54  ql {.      CREAT
4b50: 45 20 54 45 4d 50 20 56 49 45 57 20 76 31 20 41  E TEMP VIEW v1 A
4b60: 53 20 53 45 4c 45 43 54 20 61 2b 31 2c 62 2b 31  S SELECT a+1,b+1
4b70: 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20 20 20   FROM t1;.      
4b80: 44 52 4f 50 20 56 49 45 57 20 76 31 0a 20 20 20  DROP VIEW v1.   
4b90: 20 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f 74 20 61   }.  } {1 {not a
4ba0: 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 20 20 64 6f  uthorized}}.  do
4bb0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 31 33  _test auth-1.113
4bc0: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
4bd0: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
4be0: 20 74 65 6d 70 2e 73 71 6c 69 74 65 5f 6d 61 73   temp.sqlite_mas
4bf0: 74 65 72 7d 0a 20 20 7d 20 7b 74 31 20 76 31 7d  ter}.  } {t1 v1}
4c00: 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  .  do_test auth-
4c10: 31 2e 31 31 34 20 7b 0a 20 20 20 20 70 72 6f 63  1.114 {.    proc
4c20: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
4c30: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 20   arg2 arg3 arg4 
4c40: 61 72 67 73 7d 20 7b 0a 20 20 20 20 20 20 69 66  args} {.      if
4c50: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
4c60: 5f 44 52 4f 50 5f 54 45 4d 50 5f 56 49 45 57 22  _DROP_TEMP_VIEW"
4c70: 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20  } {.        set 
4c80: 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74  ::authargs [list
4c90: 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72   $arg1 $arg2 $ar
4ca0: 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20  g3 $arg4].      
4cb0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
4cc0: 44 45 4e 59 0a 20 20 20 20 20 20 7d 0a 20 20 20  DENY.      }.   
4cd0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
4ce0: 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61  _OK.    }.    ca
4cf0: 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 56 49 45  tchsql {DROP VIE
4d00: 57 20 76 31 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f  W v1}.  } {1 {no
4d10: 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 20  t authorized}}. 
4d20: 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e   do_test auth-1.
4d30: 31 31 35 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a  115 {.    set ::
4d40: 61 75 74 68 61 72 67 73 0a 20 20 7d 20 7b 76 31  authargs.  } {v1
4d50: 20 7b 7d 20 74 65 6d 70 20 7b 7d 7d 0a 20 20 64   {} temp {}}.  d
4d60: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 31  o_test auth-1.11
4d70: 36 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  6 {.    execsql 
4d80: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
4d90: 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  M sqlite_temp_ma
4da0: 73 74 65 72 7d 0a 20 20 7d 20 7b 74 31 20 76 31  ster}.  } {t1 v1
4db0: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68  }.  do_test auth
4dc0: 2d 31 2e 31 31 37 20 7b 0a 20 20 20 20 70 72 6f  -1.117 {.    pro
4dd0: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
4de0: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
4df0: 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 20 20 69   args} {.      i
4e00: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
4e10: 45 5f 44 45 4c 45 54 45 22 20 26 26 20 24 61 72  E_DELETE" && $ar
4e20: 67 31 3d 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70  g1=="sqlite_temp
4e30: 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20  _master"} {.    
4e40: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
4e50: 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 20 20 7d  E_IGNORE.      }
4e60: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
4e70: 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20  LITE_OK.    }.  
4e80: 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50    catchsql {DROP
4e90: 20 56 49 45 57 20 76 31 7d 0a 20 20 7d 20 7b 30   VIEW v1}.  } {0
4ea0: 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61   {}}.  do_test a
4eb0: 75 74 68 2d 31 2e 31 31 38 20 7b 0a 20 20 20 20  uth-1.118 {.    
4ec0: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
4ed0: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
4ee0: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 20 20  _temp_master}.  
4ef0: 7d 20 7b 74 31 20 76 31 7d 0a 20 20 64 6f 5f 74  } {t1 v1}.  do_t
4f00: 65 73 74 20 61 75 74 68 2d 31 2e 31 31 39 20 7b  est auth-1.119 {
4f10: 0a 20 20 20 20 70 72 6f 63 20 61 75 74 68 20 7b  .    proc auth {
4f20: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
4f30: 72 67 33 20 61 72 67 34 20 61 72 67 73 7d 20 7b  rg3 arg4 args} {
4f40: 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64 65  .      if {$code
4f50: 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f 50 5f 54  =="SQLITE_DROP_T
4f60: 45 4d 50 5f 56 49 45 57 22 7d 20 7b 0a 20 20 20  EMP_VIEW"} {.   
4f70: 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61       set ::autha
4f80: 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20  rgs [list $arg1 
4f90: 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67  $arg2 $arg3 $arg
4fa0: 34 5d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  4].        retur
4fb0: 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a  n SQLITE_IGNORE.
4fc0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65        }.      re
4fd0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
4fe0: 20 20 20 7d 0a 20 20 20 20 63 61 74 63 68 73 71     }.    catchsq
4ff0: 6c 20 7b 44 52 4f 50 20 56 49 45 57 20 76 31 7d  l {DROP VIEW v1}
5000: 0a 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20 20 64 6f  .  } {0 {}}.  do
5010: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 32 30  _test auth-1.120
5020: 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a 61 75 74   {.    set ::aut
5030: 68 61 72 67 73 0a 20 20 7d 20 7b 76 31 20 7b 7d  hargs.  } {v1 {}
5040: 20 74 65 6d 70 20 7b 7d 7d 0a 20 20 64 6f 5f 74   temp {}}.  do_t
5050: 65 73 74 20 61 75 74 68 2d 31 2e 31 32 31 20 7b  est auth-1.121 {
5060: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45  .    execsql {SE
5070: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 74  LECT name FROM t
5080: 65 6d 70 2e 73 71 6c 69 74 65 5f 6d 61 73 74 65  emp.sqlite_maste
5090: 72 7d 0a 20 20 7d 20 7b 74 31 20 76 31 7d 0a 20  r}.  } {t1 v1}. 
50a0: 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e   do_test auth-1.
50b0: 31 32 32 20 7b 0a 20 20 20 20 70 72 6f 63 20 61  122 {.    proc a
50c0: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
50d0: 72 67 32 20 61 72 67 33 20 61 72 67 34 20 61 72  rg2 arg3 arg4 ar
50e0: 67 73 7d 20 7b 0a 20 20 20 20 20 20 69 66 20 7b  gs} {.      if {
50f0: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44  $code=="SQLITE_D
5100: 52 4f 50 5f 54 45 4d 50 5f 56 49 45 57 22 7d 20  ROP_TEMP_VIEW"} 
5110: 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a  {.        set ::
5120: 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24  authargs [list $
5130: 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33  arg1 $arg2 $arg3
5140: 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 20 20   $arg4].        
5150: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
5160: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72  .      }.      r
5170: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
5180: 20 20 20 20 7d 0a 20 20 20 20 63 61 74 63 68 73      }.    catchs
5190: 71 6c 20 7b 44 52 4f 50 20 56 49 45 57 20 76 31  ql {DROP VIEW v1
51a0: 7d 0a 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20 20 64  }.  } {0 {}}.  d
51b0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 32  o_test auth-1.12
51c0: 33 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a 61 75  3 {.    set ::au
51d0: 74 68 61 72 67 73 0a 20 20 7d 20 7b 76 31 20 7b  thargs.  } {v1 {
51e0: 7d 20 74 65 6d 70 20 7b 7d 7d 0a 20 20 64 6f 5f  } temp {}}.  do_
51f0: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 32 34 20  test auth-1.124 
5200: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53  {.    execsql {S
5210: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
5220: 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
5230: 65 72 7d 0a 20 20 7d 20 7b 74 31 7d 0a 7d 0a 7d  er}.  } {t1}.}.}
5240: 20 3b 23 20 69 66 63 61 70 61 62 6c 65 20 76 69   ;# ifcapable vi
5250: 65 77 0a 0a 23 20 54 65 73 74 20 63 61 73 65 73  ew..# Test cases
5260: 20 61 75 74 68 2d 31 2e 31 32 35 20 74 6f 20 61   auth-1.125 to a
5270: 75 74 68 2d 31 2e 31 37 36 20 74 65 73 74 20 63  uth-1.176 test c
5280: 72 65 61 74 69 6e 67 20 61 6e 64 20 64 72 6f 70  reating and drop
5290: 70 69 6e 67 20 74 72 69 67 67 65 72 73 2e 0a 23  ping triggers..#
52a0: 20 4f 6d 69 74 20 74 68 65 73 65 20 69 66 20 74   Omit these if t
52b0: 68 65 20 6c 69 62 72 61 72 79 20 77 61 73 20 63  he library was c
52c0: 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 74 72 69  ompiled with tri
52d0: 67 67 65 72 73 20 6f 6d 69 74 74 65 64 2e 0a 23  ggers omitted..#
52e0: 0a 69 66 63 61 70 61 62 6c 65 20 74 72 69 67 67  .ifcapable trigg
52f0: 65 72 26 26 74 65 6d 70 64 62 20 7b 0a 64 6f 5f  er&&tempdb {.do_
5300: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 32 35 20  test auth-1.125 
5310: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
5320: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
5330: 67 33 20 61 72 67 34 20 61 72 67 73 7d 20 7b 0a  g3 arg4 args} {.
5340: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
5350: 53 51 4c 49 54 45 5f 43 52 45 41 54 45 5f 54 52  SQLITE_CREATE_TR
5360: 49 47 47 45 52 22 7d 20 7b 0a 20 20 20 20 20 20  IGGER"} {.      
5370: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b  set ::authargs [
5380: 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67 32  list $arg1 $arg2
5390: 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20   $arg3 $arg4].  
53a0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
53b0: 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20  E_DENY.    }.   
53c0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
53d0: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
53e0: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 52   {.    CREATE TR
53f0: 49 47 47 45 52 20 72 32 20 44 45 4c 45 54 45 20  IGGER r2 DELETE 
5400: 6f 6e 20 74 32 20 42 45 47 49 4e 0a 20 20 20 20  on t2 BEGIN.    
5410: 20 20 20 20 53 45 4c 45 43 54 20 4e 55 4c 4c 3b      SELECT NULL;
5420: 0a 20 20 20 20 45 4e 44 3b 0a 20 20 7d 0a 7d 20  .    END;.  }.} 
5430: 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a  {1 {not authoriz
5440: 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  ed}}.do_test aut
5450: 68 2d 31 2e 31 32 36 20 7b 0a 20 20 73 65 74 20  h-1.126 {.  set 
5460: 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 72 32  ::authargs.} {r2
5470: 20 74 32 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f   t2 main {}}.do_
5480: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 32 37 20  test auth-1.127 
5490: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
54a0: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
54b0: 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b  lite_master}.} {
54c0: 74 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  t2}.do_test auth
54d0: 2d 31 2e 31 32 38 20 7b 0a 20 20 70 72 6f 63 20  -1.128 {.  proc 
54e0: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
54f0: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 20 61  arg2 arg3 arg4 a
5500: 72 67 73 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rgs} {.    if {$
5510: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 49 4e  code=="SQLITE_IN
5520: 53 45 52 54 22 20 26 26 20 24 61 72 67 31 3d 3d  SERT" && $arg1==
5530: 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 7d  "sqlite_master"}
5540: 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   {.      return 
5550: 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20  SQLITE_DENY.    
5560: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
5570: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
5580: 63 68 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41  chsql {.    CREA
5590: 54 45 20 54 52 49 47 47 45 52 20 72 32 20 44 45  TE TRIGGER r2 DE
55a0: 4c 45 54 45 20 6f 6e 20 74 32 20 42 45 47 49 4e  LETE on t2 BEGIN
55b0: 0a 20 20 20 20 20 20 20 20 53 45 4c 45 43 54 20  .        SELECT 
55c0: 4e 55 4c 4c 3b 0a 20 20 20 20 45 4e 44 3b 0a 20  NULL;.    END;. 
55d0: 20 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74   }.} {1 {not aut
55e0: 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73  horized}}.do_tes
55f0: 74 20 61 75 74 68 2d 31 2e 31 32 39 20 7b 0a 20  t auth-1.129 {. 
5600: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
5610: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
5620: 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 7d  e_master}.} {t2}
5630: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
5640: 31 33 30 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  130 {.  proc aut
5650: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
5660: 32 20 61 72 67 33 20 61 72 67 34 20 61 72 67 73  2 arg3 arg4 args
5670: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
5680: 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52 45 41 54  e=="SQLITE_CREAT
5690: 45 5f 54 52 49 47 47 45 52 22 7d 20 7b 0a 20 20  E_TRIGGER"} {.  
56a0: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
56b0: 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24  gs [list $arg1 $
56c0: 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34  arg2 $arg3 $arg4
56d0: 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  ].      return S
56e0: 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20  QLITE_IGNORE.   
56f0: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
5700: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
5710: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 43 52 45  tchsql {.    CRE
5720: 41 54 45 20 54 52 49 47 47 45 52 20 72 32 20 44  ATE TRIGGER r2 D
5730: 45 4c 45 54 45 20 6f 6e 20 74 32 20 42 45 47 49  ELETE on t2 BEGI
5740: 4e 0a 20 20 20 20 20 20 20 20 53 45 4c 45 43 54  N.        SELECT
5750: 20 4e 55 4c 4c 3b 0a 20 20 20 20 45 4e 44 3b 0a   NULL;.    END;.
5760: 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f    }.} {0 {}}.do_
5770: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 33 31 20  test auth-1.131 
5780: 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72  {.  set ::authar
5790: 67 73 0a 7d 20 7b 72 32 20 74 32 20 6d 61 69 6e  gs.} {r2 t2 main
57a0: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
57b0: 68 2d 31 2e 31 33 32 20 7b 0a 20 20 65 78 65 63  h-1.132 {.  exec
57c0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
57d0: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
57e0: 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a 64 6f 5f 74  ter}.} {t2}.do_t
57f0: 65 73 74 20 61 75 74 68 2d 31 2e 31 33 33 20 7b  est auth-1.133 {
5800: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
5810: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
5820: 33 20 61 72 67 34 20 61 72 67 73 7d 20 7b 0a 20  3 arg4 args} {. 
5830: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
5840: 51 4c 49 54 45 5f 49 4e 53 45 52 54 22 20 26 26  QLITE_INSERT" &&
5850: 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f   $arg1=="sqlite_
5860: 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20  master"} {.     
5870: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49   return SQLITE_I
5880: 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20  GNORE.    }.    
5890: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
58a0: 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20  .  }.  catchsql 
58b0: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 52 49  {.    CREATE TRI
58c0: 47 47 45 52 20 72 32 20 44 45 4c 45 54 45 20 6f  GGER r2 DELETE o
58d0: 6e 20 74 32 20 42 45 47 49 4e 0a 20 20 20 20 20  n t2 BEGIN.     
58e0: 20 20 20 53 45 4c 45 43 54 20 4e 55 4c 4c 3b 0a     SELECT NULL;.
58f0: 20 20 20 20 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b      END;.  }.} {
5900: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  0 {}}.do_test au
5910: 74 68 2d 31 2e 31 33 34 20 7b 0a 20 20 65 78 65  th-1.134 {.  exe
5920: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d  csql {SELECT nam
5930: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  e FROM sqlite_ma
5940: 73 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a 64 6f 5f  ster}.} {t2}.do_
5950: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 33 35 20  test auth-1.135 
5960: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
5970: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
5980: 67 33 20 61 72 67 34 20 61 72 67 73 7d 20 7b 0a  g3 arg4 args} {.
5990: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
59a0: 53 51 4c 49 54 45 5f 43 52 45 41 54 45 5f 54 52  SQLITE_CREATE_TR
59b0: 49 47 47 45 52 22 7d 20 7b 0a 20 20 20 20 20 20  IGGER"} {.      
59c0: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b  set ::authargs [
59d0: 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67 32  list $arg1 $arg2
59e0: 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20   $arg3 $arg4].  
59f0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
5a00: 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 72  E_OK.    }.    r
5a10: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
5a20: 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b    }.  catchsql {
5a30: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
5a40: 45 20 74 78 28 69 64 29 3b 0a 20 20 20 20 43 52  E tx(id);.    CR
5a50: 45 41 54 45 20 54 52 49 47 47 45 52 20 72 32 20  EATE TRIGGER r2 
5a60: 41 46 54 45 52 20 49 4e 53 45 52 54 20 4f 4e 20  AFTER INSERT ON 
5a70: 74 32 20 42 45 47 49 4e 0a 20 20 20 20 20 20 20  t2 BEGIN.       
5a80: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 78 20 56  INSERT INTO tx V
5a90: 41 4c 55 45 53 28 4e 45 57 2e 72 6f 77 69 64 29  ALUES(NEW.rowid)
5aa0: 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 7d 0a 7d  ;.    END;.  }.}
5ab0: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
5ac0: 61 75 74 68 2d 31 2e 31 33 36 2e 31 20 7b 0a 20  auth-1.136.1 {. 
5ad0: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a   set ::authargs.
5ae0: 7d 20 7b 72 32 20 74 32 20 6d 61 69 6e 20 7b 7d  } {r2 t2 main {}
5af0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
5b00: 2e 31 33 36 2e 32 20 7b 0a 20 20 65 78 65 63 73  .136.2 {.  execs
5b10: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
5b20: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
5b30: 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20 74 79  _master WHERE ty
5b40: 70 65 3d 27 74 72 69 67 67 65 72 27 0a 20 20 7d  pe='trigger'.  }
5b50: 0a 7d 20 7b 72 32 7d 0a 64 6f 5f 74 65 73 74 20  .} {r2}.do_test 
5b60: 61 75 74 68 2d 31 2e 31 33 36 2e 33 20 7b 0a 20  auth-1.136.3 {. 
5b70: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
5b80: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
5b90: 61 72 67 34 20 61 72 67 73 7d 20 7b 0a 20 20 20  arg4 args} {.   
5ba0: 20 6c 61 70 70 65 6e 64 20 3a 3a 61 75 74 68 61   lappend ::autha
5bb0: 72 67 73 20 24 63 6f 64 65 20 24 61 72 67 31 20  rgs $code $arg1 
5bc0: 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67  $arg2 $arg3 $arg
5bd0: 34 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  4.    return SQL
5be0: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 73 65 74  ITE_OK.  }.  set
5bf0: 20 3a 3a 61 75 74 68 61 72 67 73 20 7b 7d 0a 20   ::authargs {}. 
5c00: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 49   execsql {.    I
5c10: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41  NSERT INTO t2 VA
5c20: 4c 55 45 53 28 31 2c 32 2c 33 29 3b 0a 20 20 7d  LUES(1,2,3);.  }
5c30: 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67  .  set ::autharg
5c40: 73 20 0a 7d 20 7b 53 51 4c 49 54 45 5f 49 4e 53  s .} {SQLITE_INS
5c50: 45 52 54 20 74 32 20 7b 7d 20 6d 61 69 6e 20 7b  ERT t2 {} main {
5c60: 7d 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 20  } SQLITE_INSERT 
5c70: 74 78 20 7b 7d 20 6d 61 69 6e 20 72 32 20 53 51  tx {} main r2 SQ
5c80: 4c 49 54 45 5f 52 45 41 44 20 74 32 20 52 4f 57  LITE_READ t2 ROW
5c90: 49 44 20 6d 61 69 6e 20 72 32 7d 0a 64 6f 5f 74  ID main r2}.do_t
5ca0: 65 73 74 20 61 75 74 68 2d 31 2e 31 33 36 2e 34  est auth-1.136.4
5cb0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
5cc0: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
5cd0: 20 74 78 3b 0a 20 20 7d 0a 7d 20 7b 33 7d 0a 64   tx;.  }.} {3}.d
5ce0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 33  o_test auth-1.13
5cf0: 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  7 {.  execsql {S
5d00: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
5d10: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d  sqlite_master}.}
5d20: 20 7b 74 32 20 74 78 20 72 32 7d 0a 64 6f 5f 74   {t2 tx r2}.do_t
5d30: 65 73 74 20 61 75 74 68 2d 31 2e 31 33 38 20 7b  est auth-1.138 {
5d40: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
5d50: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
5d60: 33 20 61 72 67 34 20 61 72 67 73 7d 20 7b 0a 20  3 arg4 args} {. 
5d70: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
5d80: 51 4c 49 54 45 5f 43 52 45 41 54 45 5f 54 45 4d  QLITE_CREATE_TEM
5d90: 50 5f 54 52 49 47 47 45 52 22 7d 20 7b 0a 20 20  P_TRIGGER"} {.  
5da0: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
5db0: 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24  gs [list $arg1 $
5dc0: 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34  arg2 $arg3 $arg4
5dd0: 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  ].      return S
5de0: 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d  QLITE_DENY.    }
5df0: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
5e00: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
5e10: 68 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  hsql {.    CREAT
5e20: 45 20 54 52 49 47 47 45 52 20 72 31 20 44 45 4c  E TRIGGER r1 DEL
5e30: 45 54 45 20 6f 6e 20 74 31 20 42 45 47 49 4e 0a  ETE on t1 BEGIN.
5e40: 20 20 20 20 20 20 20 20 53 45 4c 45 43 54 20 4e          SELECT N
5e50: 55 4c 4c 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20  ULL;.    END;.  
5e60: 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68  }.} {1 {not auth
5e70: 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74  orized}}.do_test
5e80: 20 61 75 74 68 2d 31 2e 31 33 39 20 7b 0a 20 20   auth-1.139 {.  
5e90: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d  set ::authargs.}
5ea0: 20 7b 72 31 20 74 31 20 74 65 6d 70 20 7b 7d 7d   {r1 t1 temp {}}
5eb0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
5ec0: 31 34 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  140 {.  execsql 
5ed0: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
5ee0: 4d 20 74 65 6d 70 2e 73 71 6c 69 74 65 5f 6d 61  M temp.sqlite_ma
5ef0: 73 74 65 72 7d 0a 7d 20 7b 74 31 7d 0a 64 6f 5f  ster}.} {t1}.do_
5f00: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 34 31 20  test auth-1.141 
5f10: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
5f20: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
5f30: 67 33 20 61 72 67 34 20 61 72 67 73 7d 20 7b 0a  g3 arg4 args} {.
5f40: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
5f50: 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 22 20 26  SQLITE_INSERT" &
5f60: 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65  & $arg1=="sqlite
5f70: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 7d 20 7b  _temp_master"} {
5f80: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
5f90: 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a  LITE_DENY.    }.
5fa0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
5fb0: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
5fc0: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
5fd0: 20 54 52 49 47 47 45 52 20 72 31 20 44 45 4c 45   TRIGGER r1 DELE
5fe0: 54 45 20 6f 6e 20 74 31 20 42 45 47 49 4e 0a 20  TE on t1 BEGIN. 
5ff0: 20 20 20 20 20 20 20 53 45 4c 45 43 54 20 4e 55         SELECT NU
6000: 4c 4c 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 7d  LL;.    END;.  }
6010: 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f  .} {1 {not autho
6020: 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20  rized}}.do_test 
6030: 61 75 74 68 2d 31 2e 31 34 32 20 7b 0a 20 20 65  auth-1.142 {.  e
6040: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
6050: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
6060: 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b  temp_master}.} {
6070: 74 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  t1}.do_test auth
6080: 2d 31 2e 31 34 33 20 7b 0a 20 20 70 72 6f 63 20  -1.143 {.  proc 
6090: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
60a0: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 20 61  arg2 arg3 arg4 a
60b0: 72 67 73 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rgs} {.    if {$
60c0: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52  code=="SQLITE_CR
60d0: 45 41 54 45 5f 54 45 4d 50 5f 54 52 49 47 47 45  EATE_TEMP_TRIGGE
60e0: 52 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20  R"} {.      set 
60f0: 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74  ::authargs [list
6100: 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72   $arg1 $arg2 $ar
6110: 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20  g3 $arg4].      
6120: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47  return SQLITE_IG
6130: 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72  NORE.    }.    r
6140: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
6150: 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b    }.  catchsql {
6160: 0a 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47  .    CREATE TRIG
6170: 47 45 52 20 72 31 20 44 45 4c 45 54 45 20 6f 6e  GER r1 DELETE on
6180: 20 74 31 20 42 45 47 49 4e 0a 20 20 20 20 20 20   t1 BEGIN.      
6190: 20 20 53 45 4c 45 43 54 20 4e 55 4c 4c 3b 0a 20    SELECT NULL;. 
61a0: 20 20 20 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 30     END;.  }.} {0
61b0: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
61c0: 68 2d 31 2e 31 34 34 20 7b 0a 20 20 73 65 74 20  h-1.144 {.  set 
61d0: 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 72 31  ::authargs.} {r1
61e0: 20 74 31 20 74 65 6d 70 20 7b 7d 7d 0a 64 6f 5f   t1 temp {}}.do_
61f0: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 34 35 20  test auth-1.145 
6200: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
6210: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 74 65  ECT name FROM te
6220: 6d 70 2e 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  mp.sqlite_master
6230: 7d 0a 7d 20 7b 74 31 7d 0a 64 6f 5f 74 65 73 74  }.} {t1}.do_test
6240: 20 61 75 74 68 2d 31 2e 31 34 36 20 7b 0a 20 20   auth-1.146 {.  
6250: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
6260: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
6270: 72 67 34 20 61 72 67 73 7d 20 7b 0a 20 20 20 20  rg4 args} {.    
6280: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
6290: 54 45 5f 49 4e 53 45 52 54 22 20 26 26 20 24 61  TE_INSERT" && $a
62a0: 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 74 65 6d  rg1=="sqlite_tem
62b0: 70 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20  p_master"} {.   
62c0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
62d0: 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20  _IGNORE.    }.  
62e0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
62f0: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
6300: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
6310: 52 49 47 47 45 52 20 72 31 20 44 45 4c 45 54 45  RIGGER r1 DELETE
6320: 20 6f 6e 20 74 31 20 42 45 47 49 4e 0a 20 20 20   on t1 BEGIN.   
6330: 20 20 20 20 20 53 45 4c 45 43 54 20 4e 55 4c 4c       SELECT NULL
6340: 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 7d 0a 7d  ;.    END;.  }.}
6350: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
6360: 61 75 74 68 2d 31 2e 31 34 37 20 7b 0a 20 20 65  auth-1.147 {.  e
6370: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
6380: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
6390: 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b  temp_master}.} {
63a0: 74 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  t1}.do_test auth
63b0: 2d 31 2e 31 34 38 20 7b 0a 20 20 70 72 6f 63 20  -1.148 {.  proc 
63c0: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
63d0: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 20 61  arg2 arg3 arg4 a
63e0: 72 67 73 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rgs} {.    if {$
63f0: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52  code=="SQLITE_CR
6400: 45 41 54 45 5f 54 45 4d 50 5f 54 52 49 47 47 45  EATE_TEMP_TRIGGE
6410: 52 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20  R"} {.      set 
6420: 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74  ::authargs [list
6430: 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72   $arg1 $arg2 $ar
6440: 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20  g3 $arg4].      
6450: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
6460: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
6470: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
6480: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
6490: 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20   CREATE TRIGGER 
64a0: 72 31 20 44 45 4c 45 54 45 20 6f 6e 20 74 31 20  r1 DELETE on t1 
64b0: 42 45 47 49 4e 0a 20 20 20 20 20 20 20 20 53 45  BEGIN.        SE
64c0: 4c 45 43 54 20 4e 55 4c 4c 3b 0a 20 20 20 20 45  LECT NULL;.    E
64d0: 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d  ND;.  }.} {0 {}}
64e0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
64f0: 31 34 39 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75  149 {.  set ::au
6500: 74 68 61 72 67 73 0a 7d 20 7b 72 31 20 74 31 20  thargs.} {r1 t1 
6510: 74 65 6d 70 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  temp {}}.do_test
6520: 20 61 75 74 68 2d 31 2e 31 35 30 20 7b 0a 20 20   auth-1.150 {.  
6530: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
6540: 6e 61 6d 65 20 46 52 4f 4d 20 74 65 6d 70 2e 73  name FROM temp.s
6550: 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20  qlite_master}.} 
6560: 7b 74 31 20 72 31 7d 0a 0a 64 6f 5f 74 65 73 74  {t1 r1}..do_test
6570: 20 61 75 74 68 2d 31 2e 31 35 31 20 7b 0a 20 20   auth-1.151 {.  
6580: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
6590: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
65a0: 72 67 34 20 61 72 67 73 7d 20 7b 0a 20 20 20 20  rg4 args} {.    
65b0: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
65c0: 54 45 5f 44 45 4c 45 54 45 22 20 26 26 20 24 61  TE_DELETE" && $a
65d0: 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 6d 61 73  rg1=="sqlite_mas
65e0: 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 72 65  ter"} {.      re
65f0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59  turn SQLITE_DENY
6600: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
6610: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
6620: 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50    catchsql {DROP
6630: 20 54 52 49 47 47 45 52 20 72 32 7d 0a 7d 20 7b   TRIGGER r2}.} {
6640: 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65  1 {not authorize
6650: 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  d}}.do_test auth
6660: 2d 31 2e 31 35 32 20 7b 0a 20 20 65 78 65 63 73  -1.152 {.  execs
6670: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
6680: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
6690: 65 72 7d 0a 7d 20 7b 74 32 20 74 78 20 72 32 7d  er}.} {t2 tx r2}
66a0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
66b0: 31 35 33 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  153 {.  proc aut
66c0: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
66d0: 32 20 61 72 67 33 20 61 72 67 34 20 61 72 67 73  2 arg3 arg4 args
66e0: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
66f0: 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f 50 5f  e=="SQLITE_DROP_
6700: 54 52 49 47 47 45 52 22 7d 20 7b 0a 20 20 20 20  TRIGGER"} {.    
6710: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
6720: 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72   [list $arg1 $ar
6730: 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a  g2 $arg3 $arg4].
6740: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
6750: 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20  ITE_DENY.    }. 
6760: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
6770: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
6780: 71 6c 20 7b 44 52 4f 50 20 54 52 49 47 47 45 52  ql {DROP TRIGGER
6790: 20 72 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61   r2}.} {1 {not a
67a0: 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74  uthorized}}.do_t
67b0: 65 73 74 20 61 75 74 68 2d 31 2e 31 35 34 20 7b  est auth-1.154 {
67c0: 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67  .  set ::autharg
67d0: 73 0a 7d 20 7b 72 32 20 74 32 20 6d 61 69 6e 20  s.} {r2 t2 main 
67e0: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
67f0: 2d 31 2e 31 35 35 20 7b 0a 20 20 65 78 65 63 73  -1.155 {.  execs
6800: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
6810: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
6820: 65 72 7d 0a 7d 20 7b 74 32 20 74 78 20 72 32 7d  er}.} {t2 tx r2}
6830: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
6840: 31 35 36 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  156 {.  proc aut
6850: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
6860: 32 20 61 72 67 33 20 61 72 67 34 20 61 72 67 73  2 arg3 arg4 args
6870: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
6880: 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45 54  e=="SQLITE_DELET
6890: 45 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71  E" && $arg1=="sq
68a0: 6c 69 74 65 5f 6d 61 73 74 65 72 22 7d 20 7b 0a  lite_master"} {.
68b0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
68c0: 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d  ITE_IGNORE.    }
68d0: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
68e0: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
68f0: 68 73 71 6c 20 7b 44 52 4f 50 20 54 52 49 47 47  hsql {DROP TRIGG
6900: 45 52 20 72 32 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a  ER r2}.} {0 {}}.
6910: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
6920: 35 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  57 {.  execsql {
6930: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
6940: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a   sqlite_master}.
6950: 7d 20 7b 74 32 20 74 78 20 72 32 7d 0a 64 6f 5f  } {t2 tx r2}.do_
6960: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 35 38 20  test auth-1.158 
6970: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
6980: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
6990: 67 33 20 61 72 67 34 20 61 72 67 73 7d 20 7b 0a  g3 arg4 args} {.
69a0: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
69b0: 53 51 4c 49 54 45 5f 44 52 4f 50 5f 54 52 49 47  SQLITE_DROP_TRIG
69c0: 47 45 52 22 7d 20 7b 0a 20 20 20 20 20 20 73 65  GER"} {.      se
69d0: 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69  t ::authargs [li
69e0: 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24  st $arg1 $arg2 $
69f0: 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20  arg3 $arg4].    
6a00: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
6a10: 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20  IGNORE.    }.   
6a20: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
6a30: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
6a40: 20 7b 44 52 4f 50 20 54 52 49 47 47 45 52 20 72   {DROP TRIGGER r
6a50: 32 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74  2}.} {0 {}}.do_t
6a60: 65 73 74 20 61 75 74 68 2d 31 2e 31 35 39 20 7b  est auth-1.159 {
6a70: 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67  .  set ::autharg
6a80: 73 0a 7d 20 7b 72 32 20 74 32 20 6d 61 69 6e 20  s.} {r2 t2 main 
6a90: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
6aa0: 2d 31 2e 31 36 30 20 7b 0a 20 20 65 78 65 63 73  -1.160 {.  execs
6ab0: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
6ac0: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
6ad0: 65 72 7d 0a 7d 20 7b 74 32 20 74 78 20 72 32 7d  er}.} {t2 tx r2}
6ae0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
6af0: 31 36 31 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  161 {.  proc aut
6b00: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
6b10: 32 20 61 72 67 33 20 61 72 67 34 20 61 72 67 73  2 arg3 arg4 args
6b20: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
6b30: 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f 50 5f  e=="SQLITE_DROP_
6b40: 54 52 49 47 47 45 52 22 7d 20 7b 0a 20 20 20 20  TRIGGER"} {.    
6b50: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
6b60: 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72   [list $arg1 $ar
6b70: 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a  g2 $arg3 $arg4].
6b80: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
6b90: 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20  ITE_OK.    }.   
6ba0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
6bb0: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
6bc0: 20 7b 44 52 4f 50 20 54 52 49 47 47 45 52 20 72   {DROP TRIGGER r
6bd0: 32 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74  2}.} {0 {}}.do_t
6be0: 65 73 74 20 61 75 74 68 2d 31 2e 31 36 32 20 7b  est auth-1.162 {
6bf0: 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67  .  set ::autharg
6c00: 73 0a 7d 20 7b 72 32 20 74 32 20 6d 61 69 6e 20  s.} {r2 t2 main 
6c10: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
6c20: 2d 31 2e 31 36 33 20 7b 0a 20 20 65 78 65 63 73  -1.163 {.  execs
6c30: 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20 54 41  ql {.    DROP TA
6c40: 42 4c 45 20 74 78 3b 0a 20 20 20 20 44 45 4c 45  BLE tx;.    DELE
6c50: 54 45 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45  TE FROM t2 WHERE
6c60: 20 61 3d 31 20 41 4e 44 20 62 3d 32 20 41 4e 44   a=1 AND b=2 AND
6c70: 20 63 3d 33 3b 0a 20 20 20 20 53 45 4c 45 43 54   c=3;.    SELECT
6c80: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
6c90: 65 5f 6d 61 73 74 65 72 3b 0a 20 20 7d 0a 7d 20  e_master;.  }.} 
6ca0: 7b 74 32 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 75  {t2}..do_test au
6cb0: 74 68 2d 31 2e 31 36 34 20 7b 0a 20 20 70 72 6f  th-1.164 {.  pro
6cc0: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
6cd0: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
6ce0: 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 69 66 20   args} {.    if 
6cf0: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
6d00: 44 45 4c 45 54 45 22 20 26 26 20 24 61 72 67 31  DELETE" && $arg1
6d10: 3d 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  =="sqlite_temp_m
6d20: 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20  aster"} {.      
6d30: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45  return SQLITE_DE
6d40: 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  NY.    }.    ret
6d50: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
6d60: 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52  }.  catchsql {DR
6d70: 4f 50 20 54 52 49 47 47 45 52 20 72 31 7d 0a 7d  OP TRIGGER r1}.}
6d80: 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69   {1 {not authori
6d90: 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  zed}}.do_test au
6da0: 74 68 2d 31 2e 31 36 35 20 7b 0a 20 20 65 78 65  th-1.165 {.  exe
6db0: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d  csql {SELECT nam
6dc0: 65 20 46 52 4f 4d 20 74 65 6d 70 2e 73 71 6c 69  e FROM temp.sqli
6dd0: 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31  te_master}.} {t1
6de0: 20 72 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   r1}.do_test aut
6df0: 68 2d 31 2e 31 36 36 20 7b 0a 20 20 70 72 6f 63  h-1.166 {.  proc
6e00: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
6e10: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 20   arg2 arg3 arg4 
6e20: 61 72 67 73 7d 20 7b 0a 20 20 20 20 69 66 20 7b  args} {.    if {
6e30: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44  $code=="SQLITE_D
6e40: 52 4f 50 5f 54 45 4d 50 5f 54 52 49 47 47 45 52  ROP_TEMP_TRIGGER
6e50: 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a  "} {.      set :
6e60: 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20  :authargs [list 
6e70: 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67  $arg1 $arg2 $arg
6e80: 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72  3 $arg4].      r
6e90: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e  eturn SQLITE_DEN
6ea0: 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  Y.    }.    retu
6eb0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
6ec0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f  .  catchsql {DRO
6ed0: 50 20 54 52 49 47 47 45 52 20 72 31 7d 0a 7d 20  P TRIGGER r1}.} 
6ee0: 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a  {1 {not authoriz
6ef0: 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  ed}}.do_test aut
6f00: 68 2d 31 2e 31 36 37 20 7b 0a 20 20 73 65 74 20  h-1.167 {.  set 
6f10: 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 72 31  ::authargs.} {r1
6f20: 20 74 31 20 74 65 6d 70 20 7b 7d 7d 0a 64 6f 5f   t1 temp {}}.do_
6f30: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 36 38 20  test auth-1.168 
6f40: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
6f50: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
6f60: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
6f70: 7d 0a 7d 20 7b 74 31 20 72 31 7d 0a 64 6f 5f 74  }.} {t1 r1}.do_t
6f80: 65 73 74 20 61 75 74 68 2d 31 2e 31 36 39 20 7b  est auth-1.169 {
6f90: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
6fa0: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
6fb0: 33 20 61 72 67 34 20 61 72 67 73 7d 20 7b 0a 20  3 arg4 args} {. 
6fc0: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
6fd0: 51 4c 49 54 45 5f 44 45 4c 45 54 45 22 20 26 26  QLITE_DELETE" &&
6fe0: 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f   $arg1=="sqlite_
6ff0: 74 65 6d 70 5f 6d 61 73 74 65 72 22 7d 20 7b 0a  temp_master"} {.
7000: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
7010: 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d  ITE_IGNORE.    }
7020: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
7030: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
7040: 68 73 71 6c 20 7b 44 52 4f 50 20 54 52 49 47 47  hsql {DROP TRIGG
7050: 45 52 20 72 31 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a  ER r1}.} {0 {}}.
7060: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
7070: 37 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  70 {.  execsql {
7080: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
7090: 20 74 65 6d 70 2e 73 71 6c 69 74 65 5f 6d 61 73   temp.sqlite_mas
70a0: 74 65 72 7d 0a 7d 20 7b 74 31 20 72 31 7d 0a 64  ter}.} {t1 r1}.d
70b0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 37  o_test auth-1.17
70c0: 31 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  1 {.  proc auth 
70d0: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
70e0: 61 72 67 33 20 61 72 67 34 20 61 72 67 73 7d 20  arg3 arg4 args} 
70f0: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
7100: 3d 22 53 51 4c 49 54 45 5f 44 52 4f 50 5f 54 45  ="SQLITE_DROP_TE
7110: 4d 50 5f 54 52 49 47 47 45 52 22 7d 20 7b 0a 20  MP_TRIGGER"} {. 
7120: 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61       set ::autha
7130: 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20  rgs [list $arg1 
7140: 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67  $arg2 $arg3 $arg
7150: 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  4].      return 
7160: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20  SQLITE_IGNORE.  
7170: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
7180: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
7190: 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54 52  atchsql {DROP TR
71a0: 49 47 47 45 52 20 72 31 7d 0a 7d 20 7b 30 20 7b  IGGER r1}.} {0 {
71b0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
71c0: 31 2e 31 37 32 20 7b 0a 20 20 73 65 74 20 3a 3a  1.172 {.  set ::
71d0: 61 75 74 68 61 72 67 73 0a 7d 20 7b 72 31 20 74  authargs.} {r1 t
71e0: 31 20 74 65 6d 70 20 7b 7d 7d 0a 64 6f 5f 74 65  1 temp {}}.do_te
71f0: 73 74 20 61 75 74 68 2d 31 2e 31 37 33 20 7b 0a  st auth-1.173 {.
7200: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
7210: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
7220: 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a  te_temp_master}.
7230: 7d 20 7b 74 31 20 72 31 7d 0a 64 6f 5f 74 65 73  } {t1 r1}.do_tes
7240: 74 20 61 75 74 68 2d 31 2e 31 37 34 20 7b 0a 20  t auth-1.174 {. 
7250: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
7260: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
7270: 61 72 67 34 20 61 72 67 73 7d 20 7b 0a 20 20 20  arg4 args} {.   
7280: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
7290: 49 54 45 5f 44 52 4f 50 5f 54 45 4d 50 5f 54 52  ITE_DROP_TEMP_TR
72a0: 49 47 47 45 52 22 7d 20 7b 0a 20 20 20 20 20 20  IGGER"} {.      
72b0: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b  set ::authargs [
72c0: 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67 32  list $arg1 $arg2
72d0: 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20   $arg3 $arg4].  
72e0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
72f0: 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 72  E_OK.    }.    r
7300: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
7310: 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b    }.  catchsql {
7320: 44 52 4f 50 20 54 52 49 47 47 45 52 20 72 31 7d  DROP TRIGGER r1}
7330: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
7340: 74 20 61 75 74 68 2d 31 2e 31 37 35 20 7b 0a 20  t auth-1.175 {. 
7350: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a   set ::authargs.
7360: 7d 20 7b 72 31 20 74 31 20 74 65 6d 70 20 7b 7d  } {r1 t1 temp {}
7370: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
7380: 2e 31 37 36 20 7b 0a 20 20 65 78 65 63 73 71 6c  .176 {.  execsql
7390: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
73a0: 4f 4d 20 74 65 6d 70 2e 73 71 6c 69 74 65 5f 6d  OM temp.sqlite_m
73b0: 61 73 74 65 72 7d 0a 7d 20 7b 74 31 7d 0a 7d 20  aster}.} {t1}.} 
73c0: 3b 23 20 69 66 63 61 70 61 62 6c 65 20 74 72 69  ;# ifcapable tri
73d0: 67 67 65 72 0a 0a 64 6f 5f 74 65 73 74 20 61 75  gger..do_test au
73e0: 74 68 2d 31 2e 31 37 37 20 7b 0a 20 20 70 72 6f  th-1.177 {.  pro
73f0: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
7400: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
7410: 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 69 66 20   args} {.    if 
7420: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
7430: 43 52 45 41 54 45 5f 49 4e 44 45 58 22 7d 20 7b  CREATE_INDEX"} {
7440: 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74  .      set ::aut
7450: 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67  hargs [list $arg
7460: 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61  1 $arg2 $arg3 $a
7470: 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72  rg4].      retur
7480: 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20  n SQLITE_DENY.  
7490: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
74a0: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
74b0: 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45 20  atchsql {CREATE 
74c0: 49 4e 44 45 58 20 69 32 20 4f 4e 20 74 32 28 61  INDEX i2 ON t2(a
74d0: 29 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74  )}.} {1 {not aut
74e0: 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73  horized}}.do_tes
74f0: 74 20 61 75 74 68 2d 31 2e 31 37 38 20 7b 0a 20  t auth-1.178 {. 
7500: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a   set ::authargs.
7510: 7d 20 7b 69 32 20 74 32 20 6d 61 69 6e 20 7b 7d  } {i2 t2 main {}
7520: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
7530: 2e 31 37 39 20 7b 0a 20 20 65 78 65 63 73 71 6c  .179 {.  execsql
7540: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
7550: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
7560: 7d 0a 7d 20 7b 74 32 7d 0a 64 6f 5f 74 65 73 74  }.} {t2}.do_test
7570: 20 61 75 74 68 2d 31 2e 31 38 30 20 7b 0a 20 20   auth-1.180 {.  
7580: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
7590: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
75a0: 72 67 34 20 61 72 67 73 7d 20 7b 0a 20 20 20 20  rg4 args} {.    
75b0: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
75c0: 54 45 5f 49 4e 53 45 52 54 22 20 26 26 20 24 61  TE_INSERT" && $a
75d0: 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 6d 61 73  rg1=="sqlite_mas
75e0: 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 72 65  ter"} {.      re
75f0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59  turn SQLITE_DENY
7600: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
7610: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
7620: 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41    catchsql {CREA
7630: 54 45 20 49 4e 44 45 58 20 69 32 20 4f 4e 20 74  TE INDEX i2 ON t
7640: 32 28 61 29 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20  2(a)}.} {1 {not 
7650: 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f  authorized}}.do_
7660: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 38 31 20  test auth-1.181 
7670: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
7680: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
7690: 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b  lite_master}.} {
76a0: 74 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  t2}.do_test auth
76b0: 2d 31 2e 31 38 32 20 7b 0a 20 20 70 72 6f 63 20  -1.182 {.  proc 
76c0: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
76d0: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 20 61  arg2 arg3 arg4 a
76e0: 72 67 73 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rgs} {.    if {$
76f0: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52  code=="SQLITE_CR
7700: 45 41 54 45 5f 49 4e 44 45 58 22 7d 20 7b 0a 20  EATE_INDEX"} {. 
7710: 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61       set ::autha
7720: 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20  rgs [list $arg1 
7730: 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67  $arg2 $arg3 $arg
7740: 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  4].      return 
7750: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20  SQLITE_IGNORE.  
7760: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
7770: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
7780: 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45 20  atchsql {CREATE 
7790: 49 4e 44 45 58 20 69 32 20 4f 4e 20 74 32 28 62  INDEX i2 ON t2(b
77a0: 29 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74  )}.} {0 {}}.do_t
77b0: 65 73 74 20 61 75 74 68 2d 31 2e 31 38 33 20 7b  est auth-1.183 {
77c0: 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67  .  set ::autharg
77d0: 73 0a 7d 20 7b 69 32 20 74 32 20 6d 61 69 6e 20  s.} {i2 t2 main 
77e0: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
77f0: 2d 31 2e 31 38 34 20 7b 0a 20 20 65 78 65 63 73  -1.184 {.  execs
7800: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
7810: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
7820: 65 72 7d 0a 7d 20 7b 74 32 7d 0a 64 6f 5f 74 65  er}.} {t2}.do_te
7830: 73 74 20 61 75 74 68 2d 31 2e 31 38 35 20 7b 0a  st auth-1.185 {.
7840: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
7850: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
7860: 20 61 72 67 34 20 61 72 67 73 7d 20 7b 0a 20 20   arg4 args} {.  
7870: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
7880: 4c 49 54 45 5f 49 4e 53 45 52 54 22 20 26 26 20  LITE_INSERT" && 
7890: 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 6d  $arg1=="sqlite_m
78a0: 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20  aster"} {.      
78b0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47  return SQLITE_IG
78c0: 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72  NORE.    }.    r
78d0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
78e0: 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b    }.  catchsql {
78f0: 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 32 20  CREATE INDEX i2 
7900: 4f 4e 20 74 32 28 62 29 7d 0a 7d 20 7b 30 20 7b  ON t2(b)}.} {0 {
7910: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
7920: 31 2e 31 38 36 20 7b 0a 20 20 65 78 65 63 73 71  1.186 {.  execsq
7930: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
7940: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
7950: 72 7d 0a 7d 20 7b 74 32 7d 0a 64 6f 5f 74 65 73  r}.} {t2}.do_tes
7960: 74 20 61 75 74 68 2d 31 2e 31 38 37 20 7b 0a 20  t auth-1.187 {. 
7970: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
7980: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
7990: 61 72 67 34 20 61 72 67 73 7d 20 7b 0a 20 20 20  arg4 args} {.   
79a0: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
79b0: 49 54 45 5f 43 52 45 41 54 45 5f 49 4e 44 45 58  ITE_CREATE_INDEX
79c0: 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a  "} {.      set :
79d0: 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20  :authargs [list 
79e0: 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67  $arg1 $arg2 $arg
79f0: 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72  3 $arg4].      r
7a00: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
7a10: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
7a20: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
7a30: 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54   catchsql {CREAT
7a40: 45 20 49 4e 44 45 58 20 69 32 20 4f 4e 20 74 32  E INDEX i2 ON t2
7a50: 28 61 29 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f  (a)}.} {0 {}}.do
7a60: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 38 38  _test auth-1.188
7a70: 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61   {.  set ::autha
7a80: 72 67 73 0a 7d 20 7b 69 32 20 74 32 20 6d 61 69  rgs.} {i2 t2 mai
7a90: 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  n {}}.do_test au
7aa0: 74 68 2d 31 2e 31 38 39 20 7b 0a 20 20 65 78 65  th-1.189 {.  exe
7ab0: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d  csql {SELECT nam
7ac0: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  e FROM sqlite_ma
7ad0: 73 74 65 72 7d 0a 7d 20 7b 74 32 20 69 32 7d 0a  ster}.} {t2 i2}.
7ae0: 0a 69 66 63 61 70 61 62 6c 65 20 74 65 6d 70 64  .ifcapable tempd
7af0: 62 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 61 75  b {.  do_test au
7b00: 74 68 2d 31 2e 31 39 30 20 7b 0a 20 20 20 20 70  th-1.190 {.    p
7b10: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
7b20: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
7b30: 67 34 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 20  g4 args} {.     
7b40: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
7b50: 49 54 45 5f 43 52 45 41 54 45 5f 54 45 4d 50 5f  ITE_CREATE_TEMP_
7b60: 49 4e 44 45 58 22 7d 20 7b 0a 20 20 20 20 20 20  INDEX"} {.      
7b70: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
7b80: 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72   [list $arg1 $ar
7b90: 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a  g2 $arg3 $arg4].
7ba0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
7bb0: 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 20  QLITE_DENY.     
7bc0: 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   }.      return 
7bd0: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a  SQLITE_OK.    }.
7be0: 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52      catchsql {CR
7bf0: 45 41 54 45 20 49 4e 44 45 58 20 69 31 20 4f 4e  EATE INDEX i1 ON
7c00: 20 74 31 28 61 29 7d 0a 20 20 7d 20 7b 31 20 7b   t1(a)}.  } {1 {
7c10: 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d  not authorized}}
7c20: 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  .  do_test auth-
7c30: 31 2e 31 39 31 20 7b 0a 20 20 20 20 73 65 74 20  1.191 {.    set 
7c40: 3a 3a 61 75 74 68 61 72 67 73 0a 20 20 7d 20 7b  ::authargs.  } {
7c50: 69 31 20 74 31 20 74 65 6d 70 20 7b 7d 7d 0a 20  i1 t1 temp {}}. 
7c60: 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e   do_test auth-1.
7c70: 31 39 32 20 7b 0a 20 20 20 20 65 78 65 63 73 71  192 {.    execsq
7c80: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
7c90: 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f  ROM sqlite_temp_
7ca0: 6d 61 73 74 65 72 7d 0a 20 20 7d 20 7b 74 31 7d  master}.  } {t1}
7cb0: 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  .  do_test auth-
7cc0: 31 2e 31 39 33 20 7b 0a 20 20 20 20 70 72 6f 63  1.193 {.    proc
7cd0: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
7ce0: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 20   arg2 arg3 arg4 
7cf0: 61 72 67 73 7d 20 7b 0a 20 20 20 20 20 20 69 66  args} {.      if
7d00: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
7d10: 5f 49 4e 53 45 52 54 22 20 26 26 20 24 61 72 67  _INSERT" && $arg
7d20: 31 3d 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f  1=="sqlite_temp_
7d30: 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20  master"} {.     
7d40: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
7d50: 5f 44 45 4e 59 0a 20 20 20 20 20 20 7d 0a 20 20  _DENY.      }.  
7d60: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
7d70: 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63  E_OK.    }.    c
7d80: 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45 20  atchsql {CREATE 
7d90: 49 4e 44 45 58 20 69 31 20 4f 4e 20 74 31 28 62  INDEX i1 ON t1(b
7da0: 29 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f 74 20 61  )}.  } {1 {not a
7db0: 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 20 20 64 6f  uthorized}}.  do
7dc0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 39 34  _test auth-1.194
7dd0: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
7de0: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
7df0: 20 74 65 6d 70 2e 73 71 6c 69 74 65 5f 6d 61 73   temp.sqlite_mas
7e00: 74 65 72 7d 0a 20 20 7d 20 7b 74 31 7d 0a 20 20  ter}.  } {t1}.  
7e10: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
7e20: 39 35 20 7b 0a 20 20 20 20 70 72 6f 63 20 61 75  95 {.    proc au
7e30: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
7e40: 67 32 20 61 72 67 33 20 61 72 67 34 20 61 72 67  g2 arg3 arg4 arg
7e50: 73 7d 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24  s} {.      if {$
7e60: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52  code=="SQLITE_CR
7e70: 45 41 54 45 5f 54 45 4d 50 5f 49 4e 44 45 58 22  EATE_TEMP_INDEX"
7e80: 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20  } {.        set 
7e90: 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74  ::authargs [list
7ea0: 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72   $arg1 $arg2 $ar
7eb0: 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20  g3 $arg4].      
7ec0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
7ed0: 49 47 4e 4f 52 45 0a 20 20 20 20 20 20 7d 0a 20  IGNORE.      }. 
7ee0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
7ef0: 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20  TE_OK.    }.    
7f00: 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45  catchsql {CREATE
7f10: 20 49 4e 44 45 58 20 69 31 20 4f 4e 20 74 31 28   INDEX i1 ON t1(
7f20: 62 29 7d 0a 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20  b)}.  } {0 {}}. 
7f30: 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e   do_test auth-1.
7f40: 31 39 36 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a  196 {.    set ::
7f50: 61 75 74 68 61 72 67 73 0a 20 20 7d 20 7b 69 31  authargs.  } {i1
7f60: 20 74 31 20 74 65 6d 70 20 7b 7d 7d 0a 20 20 64   t1 temp {}}.  d
7f70: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 39  o_test auth-1.19
7f80: 37 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  7 {.    execsql 
7f90: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
7fa0: 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  M sqlite_temp_ma
7fb0: 73 74 65 72 7d 0a 20 20 7d 20 7b 74 31 7d 0a 20  ster}.  } {t1}. 
7fc0: 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e   do_test auth-1.
7fd0: 31 39 38 20 7b 0a 20 20 20 20 70 72 6f 63 20 61  198 {.    proc a
7fe0: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
7ff0: 72 67 32 20 61 72 67 33 20 61 72 67 34 20 61 72  rg2 arg3 arg4 ar
8000: 67 73 7d 20 7b 0a 20 20 20 20 20 20 69 66 20 7b  gs} {.      if {
8010: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 49  $code=="SQLITE_I
8020: 4e 53 45 52 54 22 20 26 26 20 24 61 72 67 31 3d  NSERT" && $arg1=
8030: 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  ="sqlite_temp_ma
8040: 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 20  ster"} {.       
8050: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49   return SQLITE_I
8060: 47 4e 4f 52 45 0a 20 20 20 20 20 20 7d 0a 20 20  GNORE.      }.  
8070: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
8080: 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63  E_OK.    }.    c
8090: 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45 20  atchsql {CREATE 
80a0: 49 4e 44 45 58 20 69 31 20 4f 4e 20 74 31 28 63  INDEX i1 ON t1(c
80b0: 29 7d 0a 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20 20  )}.  } {0 {}}.  
80c0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
80d0: 39 39 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  99 {.    execsql
80e0: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
80f0: 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  OM sqlite_temp_m
8100: 61 73 74 65 72 7d 0a 20 20 7d 20 7b 74 31 7d 0a  aster}.  } {t1}.
8110: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31    do_test auth-1
8120: 2e 32 30 30 20 7b 0a 20 20 20 20 70 72 6f 63 20  .200 {.    proc 
8130: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
8140: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 20 61  arg2 arg3 arg4 a
8150: 72 67 73 7d 20 7b 0a 20 20 20 20 20 20 69 66 20  rgs} {.      if 
8160: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
8170: 43 52 45 41 54 45 5f 54 45 4d 50 5f 49 4e 44 45  CREATE_TEMP_INDE
8180: 58 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65  X"} {.        se
8190: 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69  t ::authargs [li
81a0: 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24  st $arg1 $arg2 $
81b0: 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20  arg3 $arg4].    
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 20 20 20 20 7d 0a 20 20 20  E_OK.      }.   
81e0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
81f0: 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61  _OK.    }.    ca
8200: 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45 20 49  tchsql {CREATE I
8210: 4e 44 45 58 20 69 31 20 4f 4e 20 74 31 28 61 29  NDEX i1 ON t1(a)
8220: 7d 0a 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20 20 64  }.  } {0 {}}.  d
8230: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 30  o_test auth-1.20
8240: 31 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a 61 75  1 {.    set ::au
8250: 74 68 61 72 67 73 0a 20 20 7d 20 7b 69 31 20 74  thargs.  } {i1 t
8260: 31 20 74 65 6d 70 20 7b 7d 7d 0a 20 20 64 6f 5f  1 temp {}}.  do_
8270: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 30 32 20  test auth-1.202 
8280: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53  {.    execsql {S
8290: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
82a0: 74 65 6d 70 2e 73 71 6c 69 74 65 5f 6d 61 73 74  temp.sqlite_mast
82b0: 65 72 7d 0a 20 20 7d 20 7b 74 31 20 69 31 7d 0a  er}.  } {t1 i1}.
82c0: 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }..do_test auth-
82d0: 31 2e 32 30 33 20 7b 0a 20 20 70 72 6f 63 20 61  1.203 {.  proc a
82e0: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
82f0: 72 67 32 20 61 72 67 33 20 61 72 67 34 20 61 72  rg2 arg3 arg4 ar
8300: 67 73 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  gs} {.    if {$c
8310: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c  ode=="SQLITE_DEL
8320: 45 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d 22  ETE" && $arg1=="
8330: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 7d 20  sqlite_master"} 
8340: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  {.      return S
8350: 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d  QLITE_DENY.    }
8360: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
8370: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
8380: 68 73 71 6c 20 7b 44 52 4f 50 20 49 4e 44 45 58  hsql {DROP INDEX
8390: 20 69 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61   i2}.} {1 {not a
83a0: 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74  uthorized}}.do_t
83b0: 65 73 74 20 61 75 74 68 2d 31 2e 32 30 34 20 7b  est auth-1.204 {
83c0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
83d0: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
83e0: 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74  ite_master}.} {t
83f0: 32 20 69 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75  2 i2}.do_test au
8400: 74 68 2d 31 2e 32 30 35 20 7b 0a 20 20 70 72 6f  th-1.205 {.  pro
8410: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
8420: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
8430: 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 69 66 20   args} {.    if 
8440: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
8450: 44 52 4f 50 5f 49 4e 44 45 58 22 7d 20 7b 0a 20  DROP_INDEX"} {. 
8460: 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61       set ::autha
8470: 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20  rgs [list $arg1 
8480: 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67  $arg2 $arg3 $arg
8490: 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  4].      return 
84a0: 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20  SQLITE_DENY.    
84b0: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
84c0: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
84d0: 63 68 73 71 6c 20 7b 44 52 4f 50 20 49 4e 44 45  chsql {DROP INDE
84e0: 58 20 69 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20  X i2}.} {1 {not 
84f0: 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f  authorized}}.do_
8500: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 30 36 20  test auth-1.206 
8510: 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72  {.  set ::authar
8520: 67 73 0a 7d 20 7b 69 32 20 74 32 20 6d 61 69 6e  gs.} {i2 t2 main
8530: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
8540: 68 2d 31 2e 32 30 37 20 7b 0a 20 20 65 78 65 63  h-1.207 {.  exec
8550: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
8560: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
8570: 74 65 72 7d 0a 7d 20 7b 74 32 20 69 32 7d 0a 64  ter}.} {t2 i2}.d
8580: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 30  o_test auth-1.20
8590: 38 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  8 {.  proc auth 
85a0: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
85b0: 61 72 67 33 20 61 72 67 34 20 61 72 67 73 7d 20  arg3 arg4 args} 
85c0: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
85d0: 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 22  ="SQLITE_DELETE"
85e0: 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69   && $arg1=="sqli
85f0: 74 65 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20  te_master"} {.  
8600: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
8610: 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20  E_IGNORE.    }. 
8620: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
8630: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
8640: 71 6c 20 7b 44 52 4f 50 20 49 4e 44 45 58 20 69  ql {DROP INDEX i
8650: 32 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74  2}.} {0 {}}.do_t
8660: 65 73 74 20 61 75 74 68 2d 31 2e 32 30 39 20 7b  est auth-1.209 {
8670: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
8680: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
8690: 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74  ite_master}.} {t
86a0: 32 20 69 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75  2 i2}.do_test au
86b0: 74 68 2d 31 2e 32 31 30 20 7b 0a 20 20 70 72 6f  th-1.210 {.  pro
86c0: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
86d0: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
86e0: 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 69 66 20   args} {.    if 
86f0: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
8700: 44 52 4f 50 5f 49 4e 44 45 58 22 7d 20 7b 0a 20  DROP_INDEX"} {. 
8710: 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61       set ::autha
8720: 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20  rgs [list $arg1 
8730: 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67  $arg2 $arg3 $arg
8740: 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  4].      return 
8750: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20  SQLITE_IGNORE.  
8760: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
8770: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
8780: 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 49 4e  atchsql {DROP IN
8790: 44 45 58 20 69 32 7d 0a 7d 20 7b 30 20 7b 7d 7d  DEX i2}.} {0 {}}
87a0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
87b0: 32 31 31 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75  211 {.  set ::au
87c0: 74 68 61 72 67 73 0a 7d 20 7b 69 32 20 74 32 20  thargs.} {i2 t2 
87d0: 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  main {}}.do_test
87e0: 20 61 75 74 68 2d 31 2e 32 31 32 20 7b 0a 20 20   auth-1.212 {.  
87f0: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
8800: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
8810: 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 20 69  _master}.} {t2 i
8820: 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  2}.do_test auth-
8830: 31 2e 32 31 33 20 7b 0a 20 20 70 72 6f 63 20 61  1.213 {.  proc a
8840: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
8850: 72 67 32 20 61 72 67 33 20 61 72 67 34 20 61 72  rg2 arg3 arg4 ar
8860: 67 73 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  gs} {.    if {$c
8870: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f  ode=="SQLITE_DRO
8880: 50 5f 49 4e 44 45 58 22 7d 20 7b 0a 20 20 20 20  P_INDEX"} {.    
8890: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
88a0: 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72   [list $arg1 $ar
88b0: 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a  g2 $arg3 $arg4].
88c0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
88d0: 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20  ITE_OK.    }.   
88e0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
88f0: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
8900: 20 7b 44 52 4f 50 20 49 4e 44 45 58 20 69 32 7d   {DROP INDEX i2}
8910: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
8920: 74 20 61 75 74 68 2d 31 2e 32 31 34 20 7b 0a 20  t auth-1.214 {. 
8930: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a   set ::authargs.
8940: 7d 20 7b 69 32 20 74 32 20 6d 61 69 6e 20 7b 7d  } {i2 t2 main {}
8950: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
8960: 2e 32 31 35 20 7b 0a 20 20 65 78 65 63 73 71 6c  .215 {.  execsql
8970: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
8980: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
8990: 7d 0a 7d 20 7b 74 32 7d 0a 0a 69 66 63 61 70 61  }.} {t2}..ifcapa
89a0: 62 6c 65 20 74 65 6d 70 64 62 20 7b 0a 20 20 64  ble tempdb {.  d
89b0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 31  o_test auth-1.21
89c0: 36 20 7b 0a 20 20 20 20 70 72 6f 63 20 61 75 74  6 {.    proc aut
89d0: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
89e0: 32 20 61 72 67 33 20 61 72 67 34 20 61 72 67 73  2 arg3 arg4 args
89f0: 7d 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 63  } {.      if {$c
8a00: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c  ode=="SQLITE_DEL
8a10: 45 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d 22  ETE" && $arg1=="
8a20: 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
8a30: 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 72  er"} {.        r
8a40: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e  eturn SQLITE_DEN
8a50: 59 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  Y.      }.      
8a60: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
8a70: 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 74 63 68  .    }.    catch
8a80: 73 71 6c 20 7b 44 52 4f 50 20 49 4e 44 45 58 20  sql {DROP INDEX 
8a90: 69 31 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f 74 20  i1}.  } {1 {not 
8aa0: 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 20 20 64  authorized}}.  d
8ab0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 31  o_test auth-1.21
8ac0: 37 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  7 {.    execsql 
8ad0: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
8ae0: 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  M sqlite_temp_ma
8af0: 73 74 65 72 7d 0a 20 20 7d 20 7b 74 31 20 69 31  ster}.  } {t1 i1
8b00: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68  }.  do_test auth
8b10: 2d 31 2e 32 31 38 20 7b 0a 20 20 20 20 70 72 6f  -1.218 {.    pro
8b20: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
8b30: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
8b40: 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 20 20 69   args} {.      i
8b50: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
8b60: 45 5f 44 52 4f 50 5f 54 45 4d 50 5f 49 4e 44 45  E_DROP_TEMP_INDE
8b70: 58 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65  X"} {.        se
8b80: 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69  t ::authargs [li
8b90: 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24  st $arg1 $arg2 $
8ba0: 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20  arg3 $arg4].    
8bb0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
8bc0: 45 5f 44 45 4e 59 0a 20 20 20 20 20 20 7d 0a 20  E_DENY.      }. 
8bd0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
8be0: 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20  TE_OK.    }.    
8bf0: 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 49  catchsql {DROP I
8c00: 4e 44 45 58 20 69 31 7d 0a 20 20 7d 20 7b 31 20  NDEX i1}.  } {1 
8c10: 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d  {not authorized}
8c20: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68  }.  do_test auth
8c30: 2d 31 2e 32 31 39 20 7b 0a 20 20 20 20 73 65 74  -1.219 {.    set
8c40: 20 3a 3a 61 75 74 68 61 72 67 73 0a 20 20 7d 20   ::authargs.  } 
8c50: 7b 69 31 20 74 31 20 74 65 6d 70 20 7b 7d 7d 0a  {i1 t1 temp {}}.
8c60: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31    do_test auth-1
8c70: 2e 32 32 30 20 7b 0a 20 20 20 20 65 78 65 63 73  .220 {.    execs
8c80: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
8c90: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70  FROM sqlite_temp
8ca0: 5f 6d 61 73 74 65 72 7d 0a 20 20 7d 20 7b 74 31  _master}.  } {t1
8cb0: 20 69 31 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61   i1}.  do_test a
8cc0: 75 74 68 2d 31 2e 32 32 31 20 7b 0a 20 20 20 20  uth-1.221 {.    
8cd0: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
8ce0: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
8cf0: 72 67 34 20 61 72 67 73 7d 20 7b 0a 20 20 20 20  rg4 args} {.    
8d00: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
8d10: 4c 49 54 45 5f 44 45 4c 45 54 45 22 20 26 26 20  LITE_DELETE" && 
8d20: 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 74  $arg1=="sqlite_t
8d30: 65 6d 70 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20  emp_master"} {. 
8d40: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
8d50: 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20  LITE_IGNORE.    
8d60: 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e    }.      return
8d70: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d   SQLITE_OK.    }
8d80: 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 44  .    catchsql {D
8d90: 52 4f 50 20 49 4e 44 45 58 20 69 31 7d 0a 20 20  ROP INDEX i1}.  
8da0: 7d 20 7b 30 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65  } {0 {}}.  do_te
8db0: 73 74 20 61 75 74 68 2d 31 2e 32 32 32 20 7b 0a  st auth-1.222 {.
8dc0: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c      execsql {SEL
8dd0: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 74 65  ECT name FROM te
8de0: 6d 70 2e 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  mp.sqlite_master
8df0: 7d 0a 20 20 7d 20 7b 74 31 20 69 31 7d 0a 20 20  }.  } {t1 i1}.  
8e00: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
8e10: 32 33 20 7b 0a 20 20 20 20 70 72 6f 63 20 61 75  23 {.    proc au
8e20: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
8e30: 67 32 20 61 72 67 33 20 61 72 67 34 20 61 72 67  g2 arg3 arg4 arg
8e40: 73 7d 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24  s} {.      if {$
8e50: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52  code=="SQLITE_DR
8e60: 4f 50 5f 54 45 4d 50 5f 49 4e 44 45 58 22 7d 20  OP_TEMP_INDEX"} 
8e70: 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a  {.        set ::
8e80: 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24  authargs [list $
8e90: 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33  arg1 $arg2 $arg3
8ea0: 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 20 20   $arg4].        
8eb0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47  return SQLITE_IG
8ec0: 4e 4f 52 45 0a 20 20 20 20 20 20 7d 0a 20 20 20  NORE.      }.   
8ed0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
8ee0: 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61  _OK.    }.    ca
8ef0: 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 49 4e 44  tchsql {DROP IND
8f00: 45 58 20 69 31 7d 0a 20 20 7d 20 7b 30 20 7b 7d  EX i1}.  } {0 {}
8f10: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68  }.  do_test auth
8f20: 2d 31 2e 32 32 34 20 7b 0a 20 20 20 20 73 65 74  -1.224 {.    set
8f30: 20 3a 3a 61 75 74 68 61 72 67 73 0a 20 20 7d 20   ::authargs.  } 
8f40: 7b 69 31 20 74 31 20 74 65 6d 70 20 7b 7d 7d 0a  {i1 t1 temp {}}.
8f50: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31    do_test auth-1
8f60: 2e 32 32 35 20 7b 0a 20 20 20 20 65 78 65 63 73  .225 {.    execs
8f70: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
8f80: 46 52 4f 4d 20 74 65 6d 70 2e 73 71 6c 69 74 65  FROM temp.sqlite
8f90: 5f 6d 61 73 74 65 72 7d 0a 20 20 7d 20 7b 74 31  _master}.  } {t1
8fa0: 20 69 31 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61   i1}.  do_test a
8fb0: 75 74 68 2d 31 2e 32 32 36 20 7b 0a 20 20 20 20  uth-1.226 {.    
8fc0: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
8fd0: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
8fe0: 72 67 34 20 61 72 67 73 7d 20 7b 0a 20 20 20 20  rg4 args} {.    
8ff0: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
9000: 4c 49 54 45 5f 44 52 4f 50 5f 54 45 4d 50 5f 49  LITE_DROP_TEMP_I
9010: 4e 44 45 58 22 7d 20 7b 0a 20 20 20 20 20 20 20  NDEX"} {.       
9020: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
9030: 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67  [list $arg1 $arg
9040: 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20  2 $arg3 $arg4]. 
9050: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
9060: 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 20 20 7d 0a  LITE_OK.      }.
9070: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
9080: 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20  ITE_OK.    }.   
9090: 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20   catchsql {DROP 
90a0: 49 4e 44 45 58 20 69 31 7d 0a 20 20 7d 20 7b 30  INDEX i1}.  } {0
90b0: 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61   {}}.  do_test a
90c0: 75 74 68 2d 31 2e 32 32 37 20 7b 0a 20 20 20 20  uth-1.227 {.    
90d0: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 20  set ::authargs. 
90e0: 20 7d 20 7b 69 31 20 74 31 20 74 65 6d 70 20 7b   } {i1 t1 temp {
90f0: 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74  }}.  do_test aut
9100: 68 2d 31 2e 32 32 38 20 7b 0a 20 20 20 20 65 78  h-1.228 {.    ex
9110: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61  ecsql {SELECT na
9120: 6d 65 20 46 52 4f 4d 20 74 65 6d 70 2e 73 71 6c  me FROM temp.sql
9130: 69 74 65 5f 6d 61 73 74 65 72 7d 0a 20 20 7d 20  ite_master}.  } 
9140: 7b 74 31 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20  {t1}.}..do_test 
9150: 61 75 74 68 2d 31 2e 32 32 39 20 7b 0a 20 20 70  auth-1.229 {.  p
9160: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
9170: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
9180: 67 34 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 69  g4 args} {.    i
9190: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
91a0: 45 5f 50 52 41 47 4d 41 22 7d 20 7b 0a 20 20 20  E_PRAGMA"} {.   
91b0: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
91c0: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
91d0: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
91e0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
91f0: 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a  LITE_DENY.    }.
9200: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
9210: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
9220: 73 71 6c 20 7b 50 52 41 47 4d 41 20 66 75 6c 6c  sql {PRAGMA full
9230: 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 3d 6f 6e  _column_names=on
9240: 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68  }.} {1 {not auth
9250: 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74  orized}}.do_test
9260: 20 61 75 74 68 2d 31 2e 32 33 30 20 7b 0a 20 20   auth-1.230 {.  
9270: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d  set ::authargs.}
9280: 20 7b 66 75 6c 6c 5f 63 6f 6c 75 6d 6e 5f 6e 61   {full_column_na
9290: 6d 65 73 20 6f 6e 20 7b 7d 20 7b 7d 7d 0a 64 6f  mes on {} {}}.do
92a0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 33 31  _test auth-1.231
92b0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 53   {.  execsql2 {S
92c0: 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 32 7d  ELECT a FROM t2}
92d0: 0a 7d 20 7b 61 20 31 31 20 61 20 37 7d 0a 64 6f  .} {a 11 a 7}.do
92e0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 33 32  _test auth-1.232
92f0: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
9300: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
9310: 72 67 33 20 61 72 67 34 20 61 72 67 73 7d 20 7b  rg3 arg4 args} {
9320: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
9330: 22 53 51 4c 49 54 45 5f 50 52 41 47 4d 41 22 7d  "SQLITE_PRAGMA"}
9340: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61   {.      set ::a
9350: 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61  uthargs [list $a
9360: 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20  rg1 $arg2 $arg3 
9370: 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74  $arg4].      ret
9380: 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52  urn SQLITE_IGNOR
9390: 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  E.    }.    retu
93a0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
93b0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 50 52 41  .  catchsql {PRA
93c0: 47 4d 41 20 66 75 6c 6c 5f 63 6f 6c 75 6d 6e 5f  GMA full_column_
93d0: 6e 61 6d 65 73 3d 6f 6e 7d 0a 7d 20 7b 30 20 7b  names=on}.} {0 {
93e0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
93f0: 31 2e 32 33 33 20 7b 0a 20 20 73 65 74 20 3a 3a  1.233 {.  set ::
9400: 61 75 74 68 61 72 67 73 0a 7d 20 7b 66 75 6c 6c  authargs.} {full
9410: 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 20 6f 6e  _column_names on
9420: 20 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {} {}}.do_test 
9430: 61 75 74 68 2d 31 2e 32 33 34 20 7b 0a 20 20 65  auth-1.234 {.  e
9440: 78 65 63 73 71 6c 32 20 7b 53 45 4c 45 43 54 20  xecsql2 {SELECT 
9450: 61 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 61 20  a FROM t2}.} {a 
9460: 31 31 20 61 20 37 7d 0a 64 6f 5f 74 65 73 74 20  11 a 7}.do_test 
9470: 61 75 74 68 2d 31 2e 32 33 35 20 7b 0a 20 20 70  auth-1.235 {.  p
9480: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
9490: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
94a0: 67 34 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 69  g4 args} {.    i
94b0: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
94c0: 45 5f 50 52 41 47 4d 41 22 7d 20 7b 0a 20 20 20  E_PRAGMA"} {.   
94d0: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
94e0: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
94f0: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
9500: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
9510: 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20  LITE_OK.    }.  
9520: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
9530: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
9540: 6c 20 7b 50 52 41 47 4d 41 20 66 75 6c 6c 5f 63  l {PRAGMA full_c
9550: 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 3d 6f 6e 7d 0a  olumn_names=on}.
9560: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
9570: 20 61 75 74 68 2d 31 2e 32 33 36 20 7b 0a 20 20   auth-1.236 {.  
9580: 65 78 65 63 73 71 6c 32 20 7b 53 45 4c 45 43 54  execsql2 {SELECT
9590: 20 61 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 74   a FROM t2}.} {t
95a0: 32 2e 61 20 31 31 20 74 32 2e 61 20 37 7d 0a 64  2.a 11 t2.a 7}.d
95b0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 33  o_test auth-1.23
95c0: 37 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  7 {.  proc auth 
95d0: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
95e0: 61 72 67 33 20 61 72 67 34 20 61 72 67 73 7d 20  arg3 arg4 args} 
95f0: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
9600: 3d 22 53 51 4c 49 54 45 5f 50 52 41 47 4d 41 22  ="SQLITE_PRAGMA"
9610: 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a  } {.      set ::
9620: 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24  authargs [list $
9630: 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33  arg1 $arg2 $arg3
9640: 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65   $arg4].      re
9650: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
9660: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
9670: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
9680: 63 61 74 63 68 73 71 6c 20 7b 50 52 41 47 4d 41  catchsql {PRAGMA
9690: 20 66 75 6c 6c 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d   full_column_nam
96a0: 65 73 3d 4f 46 46 7d 0a 7d 20 7b 30 20 7b 7d 7d  es=OFF}.} {0 {}}
96b0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
96c0: 32 33 38 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75  238 {.  set ::au
96d0: 74 68 61 72 67 73 0a 7d 20 7b 66 75 6c 6c 5f 63  thargs.} {full_c
96e0: 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 20 4f 46 46 20  olumn_names OFF 
96f0: 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  {} {}}.do_test a
9700: 75 74 68 2d 31 2e 32 33 39 20 7b 0a 20 20 65 78  uth-1.239 {.  ex
9710: 65 63 73 71 6c 32 20 7b 53 45 4c 45 43 54 20 61  ecsql2 {SELECT a
9720: 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 61 20 31   FROM t2}.} {a 1
9730: 31 20 61 20 37 7d 0a 0a 64 6f 5f 74 65 73 74 20  1 a 7}..do_test 
9740: 61 75 74 68 2d 31 2e 32 34 30 20 7b 0a 20 20 70  auth-1.240 {.  p
9750: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
9760: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
9770: 67 34 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 69  g4 args} {.    i
9780: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
9790: 45 5f 54 52 41 4e 53 41 43 54 49 4f 4e 22 7d 20  E_TRANSACTION"} 
97a0: 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75  {.      set ::au
97b0: 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72  thargs [list $ar
97c0: 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24  g1 $arg2 $arg3 $
97d0: 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75  arg4].      retu
97e0: 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20  rn SQLITE_DENY. 
97f0: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
9800: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
9810: 63 61 74 63 68 73 71 6c 20 7b 42 45 47 49 4e 7d  catchsql {BEGIN}
9820: 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f  .} {1 {not autho
9830: 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20  rized}}.do_test 
9840: 61 75 74 68 2d 31 2e 32 34 31 20 7b 0a 20 20 73  auth-1.241 {.  s
9850: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20  et ::authargs.} 
9860: 7b 42 45 47 49 4e 20 7b 7d 20 7b 7d 20 7b 7d 7d  {BEGIN {} {} {}}
9870: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
9880: 32 34 32 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  242 {.  proc aut
9890: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
98a0: 32 20 61 72 67 33 20 61 72 67 34 20 61 72 67 73  2 arg3 arg4 args
98b0: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
98c0: 65 3d 3d 22 53 51 4c 49 54 45 5f 54 52 41 4e 53  e=="SQLITE_TRANS
98d0: 41 43 54 49 4f 4e 22 20 26 26 20 24 61 72 67 31  ACTION" && $arg1
98e0: 21 3d 22 42 45 47 49 4e 22 7d 20 7b 0a 20 20 20  !="BEGIN"} {.   
98f0: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
9900: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
9910: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
9920: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
9930: 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a  LITE_DENY.    }.
9940: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
9950: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
9960: 73 71 6c 20 7b 42 45 47 49 4e 3b 20 49 4e 53 45  sql {BEGIN; INSE
9970: 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45  RT INTO t2 VALUE
9980: 53 28 34 34 2c 35 35 2c 36 36 29 3b 20 43 4f 4d  S(44,55,66); COM
9990: 4d 49 54 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61  MIT}.} {1 {not a
99a0: 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74  uthorized}}.do_t
99b0: 65 73 74 20 61 75 74 68 2d 31 2e 32 34 33 20 7b  est auth-1.243 {
99c0: 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67  .  set ::autharg
99d0: 73 0a 7d 20 7b 43 4f 4d 4d 49 54 20 7b 7d 20 7b  s.} {COMMIT {} {
99e0: 7d 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  } {}}.do_test au
99f0: 74 68 2d 31 2e 32 34 34 20 7b 0a 20 20 65 78 65  th-1.244 {.  exe
9a00: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46  csql {SELECT * F
9a10: 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31 31 20 32 20  ROM t2}.} {11 2 
9a20: 33 33 20 37 20 38 20 39 20 34 34 20 35 35 20 36  33 7 8 9 44 55 6
9a30: 36 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  6}.do_test auth-
9a40: 31 2e 32 34 35 20 7b 0a 20 20 63 61 74 63 68 73  1.245 {.  catchs
9a50: 71 6c 20 7b 52 4f 4c 4c 42 41 43 4b 7d 0a 7d 20  ql {ROLLBACK}.} 
9a60: 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a  {1 {not authoriz
9a70: 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  ed}}.do_test aut
9a80: 68 2d 31 2e 32 34 36 20 7b 0a 20 20 73 65 74 20  h-1.246 {.  set 
9a90: 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 52 4f  ::authargs.} {RO
9aa0: 4c 4c 42 41 43 4b 20 7b 7d 20 7b 7d 20 7b 7d 7d  LLBACK {} {} {}}
9ab0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
9ac0: 32 34 37 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  247 {.  catchsql
9ad0: 20 7b 45 4e 44 20 54 52 41 4e 53 41 43 54 49 4f   {END TRANSACTIO
9ae0: 4e 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74  N}.} {1 {not aut
9af0: 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73  horized}}.do_tes
9b00: 74 20 61 75 74 68 2d 31 2e 32 34 38 20 7b 0a 20  t auth-1.248 {. 
9b10: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a   set ::authargs.
9b20: 7d 20 7b 43 4f 4d 4d 49 54 20 7b 7d 20 7b 7d 20  } {COMMIT {} {} 
9b30: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
9b40: 2d 31 2e 32 34 39 20 7b 0a 20 20 64 62 20 61 75  -1.249 {.  db au
9b50: 74 68 6f 72 69 7a 65 72 20 7b 7d 0a 20 20 63 61  thorizer {}.  ca
9b60: 74 63 68 73 71 6c 20 7b 52 4f 4c 4c 42 41 43 4b  tchsql {ROLLBACK
9b70: 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  }.} {0 {}}.do_te
9b80: 73 74 20 61 75 74 68 2d 31 2e 32 35 30 20 7b 0a  st auth-1.250 {.
9b90: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
9ba0: 54 20 2a 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b  T * FROM t2}.} {
9bb0: 31 31 20 32 20 33 33 20 37 20 38 20 39 7d 0a 0a  11 2 33 7 8 9}..
9bc0: 23 20 74 69 63 6b 65 74 20 23 33 34 30 20 2d 20  # ticket #340 - 
9bd0: 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 66 6f  authorization fo
9be0: 72 20 41 54 54 41 43 48 20 61 6e 64 20 44 45 54  r ATTACH and DET
9bf0: 41 43 48 2e 0a 23 0a 69 66 63 61 70 61 62 6c 65  ACH..#.ifcapable
9c00: 20 61 74 74 61 63 68 20 7b 0a 20 20 64 6f 5f 74   attach {.  do_t
9c10: 65 73 74 20 61 75 74 68 2d 31 2e 32 35 31 20 7b  est auth-1.251 {
9c20: 0a 20 20 20 20 64 62 20 61 75 74 68 6f 72 69 7a  .    db authoriz
9c30: 65 72 20 3a 3a 61 75 74 68 0a 20 20 20 20 70 72  er ::auth.    pr
9c40: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
9c50: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
9c60: 34 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 20 20  4 args} {.      
9c70: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
9c80: 54 45 5f 41 54 54 41 43 48 22 7d 20 7b 0a 20 20  TE_ATTACH"} {.  
9c90: 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68        set ::auth
9ca0: 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31  args [list $arg1
9cb0: 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72   $arg2 $arg3 $ar
9cc0: 67 34 5d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  g4].      }.    
9cd0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
9ce0: 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 74  OK.    }.    cat
9cf0: 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20 41 54  chsql {.      AT
9d00: 54 41 43 48 20 44 41 54 41 42 41 53 45 20 27 3a  TACH DATABASE ':
9d10: 6d 65 6d 6f 72 79 3a 27 20 41 53 20 74 65 73 74  memory:' AS test
9d20: 31 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 30 20 7b  1.    }.  } {0 {
9d30: 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74  }}.  do_test aut
9d40: 68 2d 31 2e 32 35 32 61 20 7b 0a 20 20 20 20 73  h-1.252a {.    s
9d50: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 20 20  et ::authargs.  
9d60: 7d 20 7b 3a 6d 65 6d 6f 72 79 3a 20 7b 7d 20 7b  } {:memory: {} {
9d70: 7d 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20  } {}}.  do_test 
9d80: 61 75 74 68 2d 31 2e 32 35 32 62 20 7b 0a 20 20  auth-1.252b {.  
9d90: 20 20 64 62 20 65 76 61 6c 20 7b 44 45 54 41 43    db eval {DETAC
9da0: 48 20 74 65 73 74 31 7d 0a 20 20 20 20 73 65 74  H test1}.    set
9db0: 20 3a 3a 61 74 74 61 63 68 66 69 6c 65 6e 61 6d   ::attachfilenam
9dc0: 65 20 3a 6d 65 6d 6f 72 79 3a 0a 20 20 20 20 64  e :memory:.    d
9dd0: 62 20 65 76 61 6c 20 7b 41 54 54 41 43 48 20 24  b eval {ATTACH $
9de0: 3a 3a 61 74 74 61 63 68 66 69 6c 65 6e 61 6d 65  ::attachfilename
9df0: 20 41 53 20 74 65 73 74 31 7d 0a 20 20 20 20 73   AS test1}.    s
9e00: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 20 20  et ::authargs.  
9e10: 7d 20 7b 7b 7d 20 7b 7d 20 7b 7d 20 7b 7d 7d 0a  } {{} {} {} {}}.
9e20: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31    do_test auth-1
9e30: 2e 32 35 32 63 20 7b 0a 20 20 20 20 64 62 20 65  .252c {.    db e
9e40: 76 61 6c 20 7b 44 45 54 41 43 48 20 74 65 73 74  val {DETACH test
9e50: 31 7d 0a 20 20 20 20 64 62 20 65 76 61 6c 20 7b  1}.    db eval {
9e60: 41 54 54 41 43 48 20 27 3a 6d 65 6d 27 20 7c 7c  ATTACH ':mem' ||
9e70: 20 27 6f 72 79 3a 27 20 41 53 20 74 65 73 74 31   'ory:' AS test1
9e80: 7d 0a 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68  }.    set ::auth
9e90: 61 72 67 73 0a 20 20 7d 20 7b 7b 7d 20 7b 7d 20  args.  } {{} {} 
9ea0: 7b 7d 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74  {} {}}.  do_test
9eb0: 20 61 75 74 68 2d 31 2e 32 35 33 20 7b 0a 20 20   auth-1.253 {.  
9ec0: 20 20 63 61 74 63 68 73 71 6c 20 7b 44 45 54 41    catchsql {DETA
9ed0: 43 48 20 44 41 54 41 42 41 53 45 20 74 65 73 74  CH DATABASE test
9ee0: 31 7d 0a 20 20 20 20 70 72 6f 63 20 61 75 74 68  1}.    proc auth
9ef0: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
9f00: 20 61 72 67 33 20 61 72 67 34 20 61 72 67 73 7d   arg3 arg4 args}
9f10: 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f   {.      if {$co
9f20: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 41 54 54 41  de=="SQLITE_ATTA
9f30: 43 48 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 73  CH"} {.        s
9f40: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c  et ::authargs [l
9f50: 69 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20  ist $arg1 $arg2 
9f60: 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20  $arg3 $arg4].   
9f70: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
9f80: 54 45 5f 44 45 4e 59 0a 20 20 20 20 20 20 7d 0a  TE_DENY.      }.
9f90: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
9fa0: 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20  ITE_OK.    }.   
9fb0: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
9fc0: 20 20 41 54 54 41 43 48 20 44 41 54 41 42 41 53    ATTACH DATABAS
9fd0: 45 20 27 3a 6d 65 6d 6f 72 79 3a 27 20 41 53 20  E ':memory:' AS 
9fe0: 74 65 73 74 31 3b 0a 20 20 20 20 7d 0a 20 20 7d  test1;.    }.  }
9ff0: 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69   {1 {not authori
a000: 7a 65 64 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20  zed}}.  do_test 
a010: 61 75 74 68 2d 31 2e 32 35 34 20 7b 0a 20 20 20  auth-1.254 {.   
a020: 20 6c 69 6e 64 65 78 20 5b 65 78 65 63 73 71 6c   lindex [execsql
a030: 20 7b 50 52 41 47 4d 41 20 64 61 74 61 62 61 73   {PRAGMA databas
a040: 65 5f 6c 69 73 74 7d 5d 20 37 0a 20 20 7d 20 7b  e_list}] 7.  } {
a050: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68  }.  do_test auth
a060: 2d 31 2e 32 35 35 20 7b 0a 20 20 20 20 63 61 74  -1.255 {.    cat
a070: 63 68 73 71 6c 20 7b 44 45 54 41 43 48 20 44 41  chsql {DETACH DA
a080: 54 41 42 41 53 45 20 74 65 73 74 31 7d 0a 20 20  TABASE test1}.  
a090: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
a0a0: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
a0b0: 20 61 72 67 34 20 61 72 67 73 7d 20 7b 0a 20 20   arg4 args} {.  
a0c0: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
a0d0: 53 51 4c 49 54 45 5f 41 54 54 41 43 48 22 7d 20  SQLITE_ATTACH"} 
a0e0: 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a  {.        set ::
a0f0: 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24  authargs [list $
a100: 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33  arg1 $arg2 $arg3
a110: 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 20 20   $arg4].        
a120: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47  return SQLITE_IG
a130: 4e 4f 52 45 0a 20 20 20 20 20 20 7d 0a 20 20 20  NORE.      }.   
a140: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
a150: 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61  _OK.    }.    ca
a160: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20 41  tchsql {.      A
a170: 54 54 41 43 48 20 44 41 54 41 42 41 53 45 20 27  TTACH DATABASE '
a180: 3a 6d 65 6d 6f 72 79 3a 27 20 41 53 20 74 65 73  :memory:' AS tes
a190: 74 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 30  t1;.    }.  } {0
a1a0: 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61   {}}.  do_test a
a1b0: 75 74 68 2d 31 2e 32 35 36 20 7b 0a 20 20 20 20  uth-1.256 {.    
a1c0: 6c 69 6e 64 65 78 20 5b 65 78 65 63 73 71 6c 20  lindex [execsql 
a1d0: 7b 50 52 41 47 4d 41 20 64 61 74 61 62 61 73 65  {PRAGMA database
a1e0: 5f 6c 69 73 74 7d 5d 20 37 0a 20 20 7d 20 7b 7d  _list}] 7.  } {}
a1f0: 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  .  do_test auth-
a200: 31 2e 32 35 37 20 7b 0a 20 20 20 20 70 72 6f 63  1.257 {.    proc
a210: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
a220: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 20   arg2 arg3 arg4 
a230: 61 72 67 73 7d 20 7b 0a 20 20 20 20 20 20 69 66  args} {.      if
a240: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
a250: 5f 44 45 54 41 43 48 22 7d 20 7b 0a 20 20 20 20  _DETACH"} {.    
a260: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
a270: 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24  gs [list $arg1 $
a280: 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34  arg2 $arg3 $arg4
a290: 5d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ].        return
a2a0: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 20   SQLITE_OK.     
a2b0: 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   }.      return 
a2c0: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a  SQLITE_OK.    }.
a2d0: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 41 54 54      execsql {ATT
a2e0: 41 43 48 20 44 41 54 41 42 41 53 45 20 27 3a 6d  ACH DATABASE ':m
a2f0: 65 6d 6f 72 79 3a 27 20 41 53 20 74 65 73 74 31  emory:' AS test1
a300: 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b  }.    catchsql {
a310: 0a 20 20 20 20 20 20 44 45 54 41 43 48 20 44 41  .      DETACH DA
a320: 54 41 42 41 53 45 20 74 65 73 74 31 3b 0a 20 20  TABASE test1;.  
a330: 20 20 7d 0a 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20    }.  } {0 {}}. 
a340: 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e   do_test auth-1.
a350: 32 35 38 20 7b 0a 20 20 20 20 6c 69 6e 64 65 78  258 {.    lindex
a360: 20 5b 65 78 65 63 73 71 6c 20 7b 50 52 41 47 4d   [execsql {PRAGM
a370: 41 20 64 61 74 61 62 61 73 65 5f 6c 69 73 74 7d  A database_list}
a380: 5d 20 37 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f  ] 7.  } {}.  do_
a390: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 35 39 20  test auth-1.259 
a3a0: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 41  {.    execsql {A
a3b0: 54 54 41 43 48 20 44 41 54 41 42 41 53 45 20 27  TTACH DATABASE '
a3c0: 3a 6d 65 6d 6f 72 79 3a 27 20 41 53 20 74 65 73  :memory:' AS tes
a3d0: 74 31 7d 0a 20 20 20 20 70 72 6f 63 20 61 75 74  t1}.    proc aut
a3e0: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
a3f0: 32 20 61 72 67 33 20 61 72 67 34 20 61 72 67 73  2 arg3 arg4 args
a400: 7d 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 63  } {.      if {$c
a410: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 54  ode=="SQLITE_DET
a420: 41 43 48 22 7d 20 7b 0a 20 20 20 20 20 20 20 20  ACH"} {.        
a430: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b  set ::authargs [
a440: 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67 32  list $arg1 $arg2
a450: 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20   $arg3 $arg4].  
a460: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
a470: 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 20  ITE_IGNORE.     
a480: 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   }.      return 
a490: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a  SQLITE_OK.    }.
a4a0: 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20      catchsql {. 
a4b0: 20 20 20 20 20 44 45 54 41 43 48 20 44 41 54 41       DETACH DATA
a4c0: 42 41 53 45 20 74 65 73 74 31 3b 0a 20 20 20 20  BASE test1;.    
a4d0: 7d 0a 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20 20 69  }.  } {0 {}}.  i
a4e0: 66 63 61 70 61 62 6c 65 20 74 65 6d 70 64 62 20  fcapable tempdb 
a4f0: 7b 0a 20 20 20 20 69 66 63 61 70 61 62 6c 65 20  {.    ifcapable 
a500: 73 63 68 65 6d 61 5f 70 72 61 67 6d 61 73 20 7b  schema_pragmas {
a510: 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 61 75 74  .    do_test aut
a520: 68 2d 31 2e 32 36 30 20 7b 0a 20 20 20 20 20 20  h-1.260 {.      
a530: 6c 69 6e 64 65 78 20 5b 65 78 65 63 73 71 6c 20  lindex [execsql 
a540: 7b 50 52 41 47 4d 41 20 64 61 74 61 62 61 73 65  {PRAGMA database
a550: 5f 6c 69 73 74 7d 5d 20 37 0a 20 20 20 20 7d 20  _list}] 7.    } 
a560: 7b 74 65 73 74 31 7d 0a 20 20 20 20 7d 20 3b 23  {test1}.    } ;#
a570: 20 69 66 63 61 70 61 62 6c 65 20 73 63 68 65 6d   ifcapable schem
a580: 61 5f 70 72 61 67 6d 61 73 0a 20 20 20 20 64 6f  a_pragmas.    do
a590: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 36 31  _test auth-1.261
a5a0: 20 7b 0a 20 20 20 20 20 20 70 72 6f 63 20 61 75   {.      proc au
a5b0: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
a5c0: 67 32 20 61 72 67 33 20 61 72 67 34 20 61 72 67  g2 arg3 arg4 arg
a5d0: 73 7d 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20  s} {.        if 
a5e0: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
a5f0: 44 45 54 41 43 48 22 7d 20 7b 0a 20 20 20 20 20  DETACH"} {.     
a600: 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61       set ::autha
a610: 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20  rgs [list $arg1 
a620: 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67  $arg2 $arg3 $arg
a630: 34 5d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  4].          ret
a640: 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a  urn SQLITE_DENY.
a650: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
a660: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
a670: 4f 4b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  OK.      }.     
a680: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
a690: 20 20 20 20 44 45 54 41 43 48 20 44 41 54 41 42      DETACH DATAB
a6a0: 41 53 45 20 74 65 73 74 31 3b 0a 20 20 20 20 20  ASE test1;.     
a6b0: 20 7d 0a 20 20 20 20 7d 20 7b 31 20 7b 6e 6f 74   }.    } {1 {not
a6c0: 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 20 20   authorized}}.  
a6d0: 20 20 69 66 63 61 70 61 62 6c 65 20 73 63 68 65    ifcapable sche
a6e0: 6d 61 5f 70 72 61 67 6d 61 73 20 7b 0a 20 20 20  ma_pragmas {.   
a6f0: 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e   do_test auth-1.
a700: 32 36 32 20 7b 0a 20 20 20 20 20 20 6c 69 6e 64  262 {.      lind
a710: 65 78 20 5b 65 78 65 63 73 71 6c 20 7b 50 52 41  ex [execsql {PRA
a720: 47 4d 41 20 64 61 74 61 62 61 73 65 5f 6c 69 73  GMA database_lis
a730: 74 7d 5d 20 37 0a 20 20 20 20 7d 20 7b 74 65 73  t}] 7.    } {tes
a740: 74 31 7d 0a 20 20 20 20 7d 20 3b 23 20 69 66 63  t1}.    } ;# ifc
a750: 61 70 61 62 6c 65 20 73 63 68 65 6d 61 5f 70 72  apable schema_pr
a760: 61 67 6d 61 73 0a 20 20 20 20 64 62 20 61 75 74  agmas.    db aut
a770: 68 6f 72 69 7a 65 72 20 7b 7d 0a 20 20 20 20 65  horizer {}.    e
a780: 78 65 63 73 71 6c 20 7b 44 45 54 41 43 48 20 44  xecsql {DETACH D
a790: 41 54 41 42 41 53 45 20 74 65 73 74 31 7d 0a 20  ATABASE test1}. 
a7a0: 20 20 20 64 62 20 61 75 74 68 6f 72 69 7a 65 72     db authorizer
a7b0: 20 3a 3a 61 75 74 68 0a 20 20 20 20 0a 20 20 20   ::auth.    .   
a7c0: 20 23 20 41 75 74 68 6f 72 69 7a 61 74 69 6f 6e   # Authorization
a7d0: 20 66 6f 72 20 41 4c 54 45 52 20 54 41 42 4c 45   for ALTER TABLE
a7e0: 2e 20 54 68 65 73 65 20 74 65 73 74 73 20 61 72  . These tests ar
a7f0: 65 20 6f 6d 69 74 74 65 64 20 69 66 20 74 68 65  e omitted if the
a800: 20 6c 69 62 72 61 72 79 0a 20 20 20 20 23 20 77   library.    # w
a810: 61 73 20 62 75 69 6c 74 20 77 69 74 68 6f 75 74  as built without
a820: 20 41 4c 54 45 52 20 54 41 42 4c 45 20 73 75 70   ALTER TABLE sup
a830: 70 6f 72 74 2e 0a 20 20 20 20 69 66 63 61 70 61  port..    ifcapa
a840: 62 6c 65 20 61 6c 74 65 72 74 61 62 6c 65 20 7b  ble altertable {
a850: 0a 20 20 20 20 0a 20 20 20 20 20 20 64 6f 5f 74  .    .      do_t
a860: 65 73 74 20 61 75 74 68 2d 31 2e 32 36 33 20 7b  est auth-1.263 {
a870: 0a 20 20 20 20 20 20 20 20 70 72 6f 63 20 61 75  .        proc au
a880: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
a890: 67 32 20 61 72 67 33 20 61 72 67 34 20 61 72 67  g2 arg3 arg4 arg
a8a0: 73 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 69  s} {.          i
a8b0: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
a8c0: 45 5f 41 4c 54 45 52 5f 54 41 42 4c 45 22 7d 20  E_ALTER_TABLE"} 
a8d0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65  {.            se
a8e0: 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69  t ::authargs [li
a8f0: 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24  st $arg1 $arg2 $
a900: 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20  arg3 $arg4].    
a910: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
a920: 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 20 20 20  QLITE_OK.       
a930: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 72     }.          r
a940: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
a950: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
a960: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
a970: 20 20 20 20 20 20 20 41 4c 54 45 52 20 54 41 42         ALTER TAB
a980: 4c 45 20 74 31 20 52 45 4e 41 4d 45 20 54 4f 20  LE t1 RENAME TO 
a990: 74 31 78 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  t1x.        }.  
a9a0: 20 20 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20 20 20      } {0 {}}.   
a9b0: 20 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d     do_test auth-
a9c0: 31 2e 32 36 34 20 7b 0a 20 20 20 20 20 20 20 20  1.264 {.        
a9d0: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
a9e0: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
a9f0: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 20 57 48 45  _temp_master WHE
aa00: 52 45 20 74 79 70 65 3d 27 74 61 62 6c 65 27 7d  RE type='table'}
aa10: 0a 20 20 20 20 20 20 7d 20 7b 74 31 78 7d 0a 20  .      } {t1x}. 
aa20: 20 20 20 20 20 64 6f 5f 74 65 73 74 20 61 75 74       do_test aut
aa30: 68 2d 31 2e 32 36 35 20 7b 0a 20 20 20 20 20 20  h-1.265 {.      
aa40: 20 20 73 65 74 20 61 75 74 68 61 72 67 73 0a 20    set authargs. 
aa50: 20 20 20 20 20 7d 20 7b 74 65 6d 70 20 74 31 20       } {temp t1 
aa60: 7b 7d 20 7b 7d 7d 0a 20 20 20 20 20 20 64 6f 5f  {} {}}.      do_
aa70: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 36 36 20  test auth-1.266 
aa80: 7b 0a 20 20 20 20 20 20 20 20 70 72 6f 63 20 61  {.        proc a
aa90: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
aaa0: 72 67 32 20 61 72 67 33 20 61 72 67 34 20 61 72  rg2 arg3 arg4 ar
aab0: 67 73 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20  gs} {.          
aac0: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
aad0: 54 45 5f 41 4c 54 45 52 5f 54 41 42 4c 45 22 7d  TE_ALTER_TABLE"}
aae0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73   {.            s
aaf0: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c  et ::authargs [l
ab00: 69 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20  ist $arg1 $arg2 
ab10: 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20  $arg3 $arg4].   
ab20: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
ab30: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20  SQLITE_IGNORE.  
ab40: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
ab50: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
ab60: 45 5f 4f 4b 0a 20 20 20 20 20 20 20 20 7d 0a 20  E_OK.        }. 
ab70: 20 20 20 20 20 20 20 63 61 74 63 68 73 71 6c 20         catchsql 
ab80: 7b 0a 20 20 20 20 20 20 20 20 20 20 41 4c 54 45  {.          ALTE
ab90: 52 20 54 41 42 4c 45 20 74 31 78 20 52 45 4e 41  R TABLE t1x RENA
aba0: 4d 45 20 54 4f 20 74 31 0a 20 20 20 20 20 20 20  ME TO t1.       
abb0: 20 7d 0a 20 20 20 20 20 20 7d 20 7b 30 20 7b 7d   }.      } {0 {}
abc0: 7d 0a 20 20 20 20 20 20 64 6f 5f 74 65 73 74 20  }.      do_test 
abd0: 61 75 74 68 2d 31 2e 32 36 37 20 7b 0a 20 20 20  auth-1.267 {.   
abe0: 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45       execsql {SE
abf0: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 74  LECT name FROM t
ac00: 65 6d 70 2e 73 71 6c 69 74 65 5f 6d 61 73 74 65  emp.sqlite_maste
ac10: 72 20 57 48 45 52 45 20 74 79 70 65 3d 27 74 61  r WHERE type='ta
ac20: 62 6c 65 27 7d 0a 20 20 20 20 20 20 7d 20 7b 74  ble'}.      } {t
ac30: 31 78 7d 0a 20 20 20 20 20 20 64 6f 5f 74 65 73  1x}.      do_tes
ac40: 74 20 61 75 74 68 2d 31 2e 32 36 38 20 7b 0a 20  t auth-1.268 {. 
ac50: 20 20 20 20 20 20 20 73 65 74 20 61 75 74 68 61         set autha
ac60: 72 67 73 0a 20 20 20 20 20 20 7d 20 7b 74 65 6d  rgs.      } {tem
ac70: 70 20 74 31 78 20 7b 7d 20 7b 7d 7d 0a 20 20 20  p t1x {} {}}.   
ac80: 20 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d     do_test auth-
ac90: 31 2e 32 36 39 20 7b 0a 20 20 20 20 20 20 20 20  1.269 {.        
aca0: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
acb0: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
acc0: 72 67 34 20 61 72 67 73 7d 20 7b 0a 20 20 20 20  rg4 args} {.    
acd0: 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d        if {$code=
ace0: 3d 22 53 51 4c 49 54 45 5f 41 4c 54 45 52 5f 54  ="SQLITE_ALTER_T
acf0: 41 42 4c 45 22 7d 20 7b 0a 20 20 20 20 20 20 20  ABLE"} {.       
ad00: 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61       set ::autha
ad10: 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20  rgs [list $arg1 
ad20: 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67  $arg2 $arg3 $arg
ad30: 34 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  4].            r
ad40: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e  eturn SQLITE_DEN
ad50: 59 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  Y.          }.  
ad60: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
ad70: 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 20 20 20  QLITE_OK.       
ad80: 20 7d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68   }.        catch
ad90: 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 20 20  sql {.          
ada0: 41 4c 54 45 52 20 54 41 42 4c 45 20 74 31 78 20  ALTER TABLE t1x 
adb0: 52 45 4e 41 4d 45 20 54 4f 20 74 31 0a 20 20 20  RENAME TO t1.   
adc0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 20 7b       }.      } {
add0: 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65  1 {not authorize
ade0: 64 7d 7d 0a 20 20 20 20 20 20 64 6f 5f 74 65 73  d}}.      do_tes
adf0: 74 20 61 75 74 68 2d 31 2e 32 37 30 20 7b 0a 20  t auth-1.270 {. 
ae00: 20 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b         execsql {
ae10: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
ae20: 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73   sqlite_temp_mas
ae30: 74 65 72 20 57 48 45 52 45 20 74 79 70 65 3d 27  ter WHERE type='
ae40: 74 61 62 6c 65 27 7d 0a 20 20 20 20 20 20 7d 20  table'}.      } 
ae50: 7b 74 31 78 7d 0a 20 20 0a 20 20 20 20 20 20 64  {t1x}.  .      d
ae60: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 37  o_test auth-1.27
ae70: 31 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20  1 {.        set 
ae80: 61 75 74 68 61 72 67 73 0a 20 20 20 20 20 20 7d  authargs.      }
ae90: 20 7b 74 65 6d 70 20 74 31 78 20 7b 7d 20 7b 7d   {temp t1x {} {}
aea0: 7d 0a 20 20 20 20 7d 20 3b 23 20 69 66 63 61 70  }.    } ;# ifcap
aeb0: 61 62 6c 65 20 61 6c 74 65 72 74 61 62 6c 65 0a  able altertable.
aec0: 20 20 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20    .  } else {.  
aed0: 20 20 64 62 20 61 75 74 68 6f 72 69 7a 65 72 20    db authorizer 
aee0: 7b 7d 0a 20 20 20 20 64 62 20 65 76 61 6c 20 7b  {}.    db eval {
aef0: 0a 20 20 20 20 20 20 44 45 54 41 43 48 20 44 41  .      DETACH DA
af00: 54 41 42 41 53 45 20 74 65 73 74 31 3b 0a 20 20  TABASE test1;.  
af10: 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 69 66 63 61 70    }.  }.}..ifcap
af20: 61 62 6c 65 20 20 61 6c 74 65 72 74 61 62 6c 65  able  altertable
af30: 20 7b 0a 64 62 20 61 75 74 68 6f 72 69 7a 65 72   {.db authorizer
af40: 20 7b 7d 0a 63 61 74 63 68 73 71 6c 20 7b 41 4c   {}.catchsql {AL
af50: 54 45 52 20 54 41 42 4c 45 20 74 31 78 20 52 45  TER TABLE t1x RE
af60: 4e 41 4d 45 20 54 4f 20 74 31 7d 0a 64 62 20 61  NAME TO t1}.db a
af70: 75 74 68 6f 72 69 7a 65 72 20 3a 3a 61 75 74 68  uthorizer ::auth
af80: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
af90: 32 37 32 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  272 {.  proc aut
afa0: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
afb0: 32 20 61 72 67 33 20 61 72 67 34 20 61 72 67 73  2 arg3 arg4 args
afc0: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
afd0: 65 3d 3d 22 53 51 4c 49 54 45 5f 41 4c 54 45 52  e=="SQLITE_ALTER
afe0: 5f 54 41 42 4c 45 22 7d 20 7b 0a 20 20 20 20 20  _TABLE"} {.     
aff0: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
b000: 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67  [list $arg1 $arg
b010: 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20  2 $arg3 $arg4]. 
b020: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
b030: 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20  TE_OK.    }.    
b040: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
b050: 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20  .  }.  catchsql 
b060: 7b 0a 20 20 20 20 41 4c 54 45 52 20 54 41 42 4c  {.    ALTER TABL
b070: 45 20 74 32 20 52 45 4e 41 4d 45 20 54 4f 20 74  E t2 RENAME TO t
b080: 32 78 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a  2x.  }.} {0 {}}.
b090: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
b0a0: 37 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  73 {.  execsql {
b0b0: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
b0c0: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57   sqlite_master W
b0d0: 48 45 52 45 20 74 79 70 65 3d 27 74 61 62 6c 65  HERE type='table
b0e0: 27 7d 0a 7d 20 7b 74 32 78 7d 0a 64 6f 5f 74 65  '}.} {t2x}.do_te
b0f0: 73 74 20 61 75 74 68 2d 31 2e 32 37 34 20 7b 0a  st auth-1.274 {.
b100: 20 20 73 65 74 20 61 75 74 68 61 72 67 73 0a 7d    set authargs.}
b110: 20 7b 6d 61 69 6e 20 74 32 20 7b 7d 20 7b 7d 7d   {main t2 {} {}}
b120: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
b130: 32 37 35 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  275 {.  proc aut
b140: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
b150: 32 20 61 72 67 33 20 61 72 67 34 20 61 72 67 73  2 arg3 arg4 args
b160: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
b170: 65 3d 3d 22 53 51 4c 49 54 45 5f 41 4c 54 45 52  e=="SQLITE_ALTER
b180: 5f 54 41 42 4c 45 22 7d 20 7b 0a 20 20 20 20 20  _TABLE"} {.     
b190: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
b1a0: 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67  [list $arg1 $arg
b1b0: 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20  2 $arg3 $arg4]. 
b1c0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
b1d0: 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a  TE_IGNORE.    }.
b1e0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
b1f0: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
b200: 73 71 6c 20 7b 0a 20 20 20 20 41 4c 54 45 52 20  sql {.    ALTER 
b210: 54 41 42 4c 45 20 74 32 78 20 52 45 4e 41 4d 45  TABLE t2x RENAME
b220: 20 54 4f 20 74 32 0a 20 20 7d 0a 7d 20 7b 30 20   TO t2.  }.} {0 
b230: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
b240: 2d 31 2e 32 37 36 20 7b 0a 20 20 65 78 65 63 73  -1.276 {.  execs
b250: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
b260: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
b270: 65 72 20 57 48 45 52 45 20 74 79 70 65 3d 27 74  er WHERE type='t
b280: 61 62 6c 65 27 7d 0a 7d 20 7b 74 32 78 7d 0a 64  able'}.} {t2x}.d
b290: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 37  o_test auth-1.27
b2a0: 37 20 7b 0a 20 20 73 65 74 20 61 75 74 68 61 72  7 {.  set authar
b2b0: 67 73 0a 7d 20 7b 6d 61 69 6e 20 74 32 78 20 7b  gs.} {main t2x {
b2c0: 7d 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  } {}}.do_test au
b2d0: 74 68 2d 31 2e 32 37 38 20 7b 0a 20 20 70 72 6f  th-1.278 {.  pro
b2e0: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
b2f0: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
b300: 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 69 66 20   args} {.    if 
b310: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
b320: 41 4c 54 45 52 5f 54 41 42 4c 45 22 7d 20 7b 0a  ALTER_TABLE"} {.
b330: 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68        set ::auth
b340: 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31  args [list $arg1
b350: 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72   $arg2 $arg3 $ar
b360: 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  g4].      return
b370: 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20   SQLITE_DENY.   
b380: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
b390: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
b3a0: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 41 4c 54  tchsql {.    ALT
b3b0: 45 52 20 54 41 42 4c 45 20 74 32 78 20 52 45 4e  ER TABLE t2x REN
b3c0: 41 4d 45 20 54 4f 20 74 32 0a 20 20 7d 0a 7d 20  AME TO t2.  }.} 
b3d0: 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a  {1 {not authoriz
b3e0: 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  ed}}.do_test aut
b3f0: 68 2d 31 2e 32 37 39 20 7b 0a 20 20 65 78 65 63  h-1.279 {.  exec
b400: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
b410: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
b420: 74 65 72 20 57 48 45 52 45 20 74 79 70 65 3d 27  ter WHERE type='
b430: 74 61 62 6c 65 27 7d 0a 7d 20 7b 74 32 78 7d 0a  table'}.} {t2x}.
b440: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
b450: 38 30 20 7b 0a 20 20 73 65 74 20 61 75 74 68 61  80 {.  set autha
b460: 72 67 73 0a 7d 20 7b 6d 61 69 6e 20 74 32 78 20  rgs.} {main t2x 
b470: 7b 7d 20 7b 7d 7d 0a 64 62 20 61 75 74 68 6f 72  {} {}}.db author
b480: 69 7a 65 72 20 7b 7d 0a 63 61 74 63 68 73 71 6c  izer {}.catchsql
b490: 20 7b 41 4c 54 45 52 20 54 41 42 4c 45 20 74 32   {ALTER TABLE t2
b4a0: 78 20 52 45 4e 41 4d 45 20 54 4f 20 74 32 7d 0a  x RENAME TO t2}.
b4b0: 0a 7d 20 3b 23 20 69 66 63 61 70 61 62 6c 65 20  .} ;# ifcapable 
b4c0: 61 6c 74 65 72 74 61 62 6c 65 0a 0a 23 20 54 65  altertable..# Te
b4d0: 73 74 20 74 68 65 20 61 75 74 68 6f 72 69 7a 61  st the authoriza
b4e0: 74 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 73 20 66  tion callbacks f
b4f0: 6f 72 20 74 68 65 20 52 45 49 4e 44 45 58 20 63  or the REINDEX c
b500: 6f 6d 6d 61 6e 64 2e 0a 69 66 63 61 70 61 62 6c  ommand..ifcapabl
b510: 65 20 72 65 69 6e 64 65 78 20 7b 0a 0a 70 72 6f  e reindex {..pro
b520: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
b530: 73 7d 20 7b 0a 20 20 69 66 20 7b 24 63 6f 64 65  s} {.  if {$code
b540: 3d 3d 22 53 51 4c 49 54 45 5f 52 45 49 4e 44 45  =="SQLITE_REINDE
b550: 58 22 7d 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a  X"} {.    set ::
b560: 61 75 74 68 61 72 67 73 20 5b 63 6f 6e 63 61 74  authargs [concat
b570: 20 24 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 72   $::authargs [lr
b580: 61 6e 67 65 20 24 61 72 67 73 20 30 20 33 5d 5d  ange $args 0 3]]
b590: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 53 51  .  }.  return SQ
b5a0: 4c 49 54 45 5f 4f 4b 0a 7d 0a 64 62 20 61 75 74  LITE_OK.}.db aut
b5b0: 68 6f 72 69 7a 65 72 20 61 75 74 68 0a 64 6f 5f  horizer auth.do_
b5c0: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 38 31 20  test auth-1.281 
b5d0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
b5e0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
b5f0: 33 28 61 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  3(a PRIMARY KEY,
b600: 20 62 2c 20 63 29 3b 0a 20 20 20 20 43 52 45 41   b, c);.    CREA
b610: 54 45 20 49 4e 44 45 58 20 74 33 5f 69 64 78 31  TE INDEX t3_idx1
b620: 20 4f 4e 20 74 33 28 63 20 43 4f 4c 4c 41 54 45   ON t3(c COLLATE
b630: 20 42 49 4e 41 52 59 29 3b 0a 20 20 20 20 43 52   BINARY);.    CR
b640: 45 41 54 45 20 49 4e 44 45 58 20 74 33 5f 69 64  EATE INDEX t3_id
b650: 78 32 20 4f 4e 20 74 33 28 62 20 43 4f 4c 4c 41  x2 ON t3(b COLLA
b660: 54 45 20 4e 4f 43 41 53 45 29 3b 0a 20 20 7d 0a  TE NOCASE);.  }.
b670: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  } {}.do_test aut
b680: 68 2d 31 2e 32 38 32 20 7b 0a 20 20 73 65 74 20  h-1.282 {.  set 
b690: 3a 3a 61 75 74 68 61 72 67 73 20 7b 7d 0a 20 20  ::authargs {}.  
b6a0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 52 45  execsql {.    RE
b6b0: 49 4e 44 45 58 20 74 33 5f 69 64 78 31 3b 0a 20  INDEX t3_idx1;. 
b6c0: 20 7d 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61   }.  set ::autha
b6d0: 72 67 73 0a 7d 20 7b 74 33 5f 69 64 78 31 20 7b  rgs.} {t3_idx1 {
b6e0: 7d 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65  } main {}}.do_te
b6f0: 73 74 20 61 75 74 68 2d 31 2e 32 38 33 20 7b 0a  st auth-1.283 {.
b700: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
b710: 20 7b 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a   {}.  execsql {.
b720: 20 20 20 20 52 45 49 4e 44 45 58 20 42 49 4e 41      REINDEX BINA
b730: 52 59 3b 0a 20 20 7d 0a 20 20 73 65 74 20 3a 3a  RY;.  }.  set ::
b740: 61 75 74 68 61 72 67 73 0a 7d 20 7b 74 33 5f 69  authargs.} {t3_i
b750: 64 78 31 20 7b 7d 20 6d 61 69 6e 20 7b 7d 20 73  dx1 {} main {} s
b760: 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f  qlite_autoindex_
b770: 74 33 5f 31 20 7b 7d 20 6d 61 69 6e 20 7b 7d 7d  t3_1 {} main {}}
b780: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
b790: 32 38 34 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75  284 {.  set ::au
b7a0: 74 68 61 72 67 73 20 7b 7d 0a 20 20 65 78 65 63  thargs {}.  exec
b7b0: 73 71 6c 20 7b 0a 20 20 20 20 52 45 49 4e 44 45  sql {.    REINDE
b7c0: 58 20 4e 4f 43 41 53 45 3b 0a 20 20 7d 0a 20 20  X NOCASE;.  }.  
b7d0: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d  set ::authargs.}
b7e0: 20 7b 74 33 5f 69 64 78 32 20 7b 7d 20 6d 61 69   {t3_idx2 {} mai
b7f0: 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  n {}}.do_test au
b800: 74 68 2d 31 2e 32 38 35 20 7b 0a 20 20 73 65 74  th-1.285 {.  set
b810: 20 3a 3a 61 75 74 68 61 72 67 73 20 7b 7d 0a 20   ::authargs {}. 
b820: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 52   execsql {.    R
b830: 45 49 4e 44 45 58 20 74 33 3b 0a 20 20 7d 0a 20  EINDEX t3;.  }. 
b840: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a   set ::authargs.
b850: 7d 20 7b 74 33 5f 69 64 78 32 20 7b 7d 20 6d 61  } {t3_idx2 {} ma
b860: 69 6e 20 7b 7d 20 74 33 5f 69 64 78 31 20 7b 7d  in {} t3_idx1 {}
b870: 20 6d 61 69 6e 20 7b 7d 20 73 71 6c 69 74 65 5f   main {} sqlite_
b880: 61 75 74 6f 69 6e 64 65 78 5f 74 33 5f 31 20 7b  autoindex_t3_1 {
b890: 7d 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65  } main {}}.do_te
b8a0: 73 74 20 61 75 74 68 2d 31 2e 32 38 36 20 7b 0a  st auth-1.286 {.
b8b0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
b8c0: 44 52 4f 50 20 54 41 42 4c 45 20 74 33 3b 0a 20  DROP TABLE t3;. 
b8d0: 20 7d 0a 7d 20 7b 7d 0a 69 66 63 61 70 61 62 6c   }.} {}.ifcapabl
b8e0: 65 20 74 65 6d 70 64 62 20 7b 0a 20 20 64 6f 5f  e tempdb {.  do_
b8f0: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 38 37 20  test auth-1.287 
b900: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
b910: 20 20 20 20 20 20 43 52 45 41 54 45 20 54 45 4d        CREATE TEM
b920: 50 20 54 41 42 4c 45 20 74 33 28 61 20 50 52 49  P TABLE t3(a PRI
b930: 4d 41 52 59 20 4b 45 59 2c 20 62 2c 20 63 29 3b  MARY KEY, b, c);
b940: 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 49 4e  .      CREATE IN
b950: 44 45 58 20 74 33 5f 69 64 78 31 20 4f 4e 20 74  DEX t3_idx1 ON t
b960: 33 28 63 20 43 4f 4c 4c 41 54 45 20 42 49 4e 41  3(c COLLATE BINA
b970: 52 59 29 3b 0a 20 20 20 20 20 20 43 52 45 41 54  RY);.      CREAT
b980: 45 20 49 4e 44 45 58 20 74 33 5f 69 64 78 32 20  E INDEX t3_idx2 
b990: 4f 4e 20 74 33 28 62 20 43 4f 4c 4c 41 54 45 20  ON t3(b COLLATE 
b9a0: 4e 4f 43 41 53 45 29 3b 0a 20 20 20 20 7d 0a 20  NOCASE);.    }. 
b9b0: 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20   } {}.  do_test 
b9c0: 61 75 74 68 2d 31 2e 32 38 38 20 7b 0a 20 20 20  auth-1.288 {.   
b9d0: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
b9e0: 7b 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b  {}.    execsql {
b9f0: 0a 20 20 20 20 20 20 52 45 49 4e 44 45 58 20 74  .      REINDEX t
ba00: 65 6d 70 2e 74 33 5f 69 64 78 31 3b 0a 20 20 20  emp.t3_idx1;.   
ba10: 20 7d 0a 20 20 20 20 73 65 74 20 3a 3a 61 75 74   }.    set ::aut
ba20: 68 61 72 67 73 0a 20 20 7d 20 7b 74 33 5f 69 64  hargs.  } {t3_id
ba30: 78 31 20 7b 7d 20 74 65 6d 70 20 7b 7d 7d 0a 20  x1 {} temp {}}. 
ba40: 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e   do_test auth-1.
ba50: 32 38 39 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a  289 {.    set ::
ba60: 61 75 74 68 61 72 67 73 20 7b 7d 0a 20 20 20 20  authargs {}.    
ba70: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
ba80: 52 45 49 4e 44 45 58 20 42 49 4e 41 52 59 3b 0a  REINDEX BINARY;.
ba90: 20 20 20 20 7d 0a 20 20 20 20 73 65 74 20 3a 3a      }.    set ::
baa0: 61 75 74 68 61 72 67 73 0a 20 20 7d 20 7b 74 33  authargs.  } {t3
bab0: 5f 69 64 78 31 20 7b 7d 20 74 65 6d 70 20 7b 7d  _idx1 {} temp {}
bac0: 20 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65   sqlite_autoinde
bad0: 78 5f 74 33 5f 31 20 7b 7d 20 74 65 6d 70 20 7b  x_t3_1 {} temp {
bae0: 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74  }}.  do_test aut
baf0: 68 2d 31 2e 32 39 30 20 7b 0a 20 20 20 20 73 65  h-1.290 {.    se
bb00: 74 20 3a 3a 61 75 74 68 61 72 67 73 20 7b 7d 0a  t ::authargs {}.
bb10: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
bb20: 20 20 20 20 52 45 49 4e 44 45 58 20 4e 4f 43 41      REINDEX NOCA
bb30: 53 45 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 65  SE;.    }.    se
bb40: 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 20 20 7d  t ::authargs.  }
bb50: 20 7b 74 33 5f 69 64 78 32 20 7b 7d 20 74 65 6d   {t3_idx2 {} tem
bb60: 70 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20  p {}}.  do_test 
bb70: 61 75 74 68 2d 31 2e 32 39 31 20 7b 0a 20 20 20  auth-1.291 {.   
bb80: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
bb90: 7b 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b  {}.    execsql {
bba0: 0a 20 20 20 20 20 20 52 45 49 4e 44 45 58 20 74  .      REINDEX t
bbb0: 65 6d 70 2e 74 33 3b 0a 20 20 20 20 7d 0a 20 20  emp.t3;.    }.  
bbc0: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
bbd0: 0a 20 20 7d 20 7b 74 33 5f 69 64 78 32 20 7b 7d  .  } {t3_idx2 {}
bbe0: 20 74 65 6d 70 20 7b 7d 20 74 33 5f 69 64 78 31   temp {} t3_idx1
bbf0: 20 7b 7d 20 74 65 6d 70 20 7b 7d 20 73 71 6c 69   {} temp {} sqli
bc00: 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 74 33 5f  te_autoindex_t3_
bc10: 31 20 7b 7d 20 74 65 6d 70 20 7b 7d 7d 0a 20 20  1 {} temp {}}.  
bc20: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
bc30: 61 72 67 73 7d 20 7b 0a 20 20 20 20 69 66 20 7b  args} {.    if {
bc40: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 52  $code=="SQLITE_R
bc50: 45 49 4e 44 45 58 22 7d 20 7b 0a 20 20 20 20 20  EINDEX"} {.     
bc60: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
bc70: 5b 63 6f 6e 63 61 74 20 24 3a 3a 61 75 74 68 61  [concat $::autha
bc80: 72 67 73 20 5b 6c 72 61 6e 67 65 20 24 61 72 67  rgs [lrange $arg
bc90: 73 20 30 20 33 5d 5d 0a 20 20 20 20 20 20 72 65  s 0 3]].      re
bca0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59  turn SQLITE_DENY
bcb0: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
bcc0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
bcd0: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31    do_test auth-1
bce0: 2e 32 39 32 20 7b 0a 20 20 20 20 73 65 74 20 3a  .292 {.    set :
bcf0: 3a 61 75 74 68 61 72 67 73 20 7b 7d 0a 20 20 20  :authargs {}.   
bd00: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
bd10: 20 20 52 45 49 4e 44 45 58 20 74 65 6d 70 2e 74    REINDEX temp.t
bd20: 33 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 20  3;.    }.  } {1 
bd30: 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d  {not authorized}
bd40: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68  }.  do_test auth
bd50: 2d 31 2e 32 39 33 20 7b 0a 20 20 20 20 65 78 65  -1.293 {.    exe
bd60: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 44 52 4f  csql {.      DRO
bd70: 50 20 54 41 42 4c 45 20 74 33 3b 0a 20 20 20 20  P TABLE t3;.    
bd80: 7d 0a 20 20 7d 20 7b 7d 0a 7d 0a 0a 7d 20 3b 23  }.  } {}.}..} ;#
bd90: 20 69 66 63 61 70 61 62 6c 65 20 72 65 69 6e 64   ifcapable reind
bda0: 65 78 20 0a 0a 69 66 63 61 70 61 62 6c 65 20 61  ex ..ifcapable a
bdb0: 6e 61 6c 79 7a 65 20 7b 0a 20 20 70 72 6f 63 20  nalyze {.  proc 
bdc0: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 73 7d  auth {code args}
bdd0: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
bde0: 3d 3d 22 53 51 4c 49 54 45 5f 41 4e 41 4c 59 5a  =="SQLITE_ANALYZ
bdf0: 45 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20  E"} {.      set 
be00: 3a 3a 61 75 74 68 61 72 67 73 20 5b 63 6f 6e 63  ::authargs [conc
be10: 61 74 20 24 3a 3a 61 75 74 68 61 72 67 73 20 5b  at $::authargs [
be20: 6c 72 61 6e 67 65 20 24 61 72 67 73 20 30 20 33  lrange $args 0 3
be30: 5d 5d 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  ]].    }.    ret
be40: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
be50: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68  }.  do_test auth
be60: 2d 31 2e 32 39 34 20 7b 0a 20 20 20 20 73 65 74  -1.294 {.    set
be70: 20 3a 3a 61 75 74 68 61 72 67 73 20 7b 7d 0a 20   ::authargs {}. 
be80: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
be90: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
bea0: 74 34 28 61 2c 62 2c 63 29 3b 0a 20 20 20 20 20  t4(a,b,c);.     
beb0: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 74 34   CREATE INDEX t4
bec0: 69 31 20 4f 4e 20 74 34 28 61 29 3b 0a 20 20 20  i1 ON t4(a);.   
bed0: 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20     CREATE INDEX 
bee0: 74 34 69 32 20 4f 4e 20 74 34 28 62 2c 61 2c 63  t4i2 ON t4(b,a,c
bef0: 29 3b 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20  );.      INSERT 
bf00: 49 4e 54 4f 20 74 34 20 56 41 4c 55 45 53 28 31  INTO t4 VALUES(1
bf10: 2c 32 2c 33 29 3b 0a 20 20 20 20 20 20 41 4e 41  ,2,3);.      ANA
bf20: 4c 59 5a 45 3b 0a 20 20 20 20 7d 0a 20 20 20 20  LYZE;.    }.    
bf30: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 20  set ::authargs. 
bf40: 20 7d 20 7b 74 34 20 7b 7d 20 6d 61 69 6e 20 7b   } {t4 {} main {
bf50: 7d 20 74 32 20 7b 7d 20 6d 61 69 6e 20 7b 7d 7d  } t2 {} main {}}
bf60: 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  .  do_test auth-
bf70: 31 2e 32 39 35 20 7b 0a 20 20 20 20 65 78 65 63  1.295 {.    exec
bf80: 73 71 6c 20 7b 0a 20 20 20 20 20 20 53 45 4c 45  sql {.      SELE
bf90: 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d  CT count(*) FROM
bfa0: 20 73 71 6c 69 74 65 5f 73 74 61 74 31 3b 0a 20   sqlite_stat1;. 
bfb0: 20 20 20 7d 0a 20 20 7d 20 33 0a 20 20 70 72 6f     }.  } 3.  pro
bfc0: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
bfd0: 73 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f  s} {.    if {$co
bfe0: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 41 4e 41 4c  de=="SQLITE_ANAL
bff0: 59 5a 45 22 7d 20 7b 0a 20 20 20 20 20 20 73 65  YZE"} {.      se
c000: 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 63 6f  t ::authargs [co
c010: 6e 63 61 74 20 24 3a 3a 61 75 74 68 61 72 67 73  ncat $::authargs
c020: 20 24 61 72 67 73 5d 0a 20 20 20 20 20 20 72 65   $args].      re
c030: 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59  turn SQLITE_DENY
c040: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
c050: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
c060: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31    do_test auth-1
c070: 2e 32 39 36 20 7b 0a 20 20 20 20 73 65 74 20 3a  .296 {.    set :
c080: 3a 61 75 74 68 61 72 67 73 20 7b 7d 0a 20 20 20  :authargs {}.   
c090: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
c0a0: 20 20 41 4e 41 4c 59 5a 45 3b 0a 20 20 20 20 7d    ANALYZE;.    }
c0b0: 0a 20 20 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74  .  } {1 {not aut
c0c0: 68 6f 72 69 7a 65 64 7d 7d 0a 20 20 64 6f 5f 74  horized}}.  do_t
c0d0: 65 73 74 20 61 75 74 68 2d 31 2e 32 39 37 20 7b  est auth-1.297 {
c0e0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
c0f0: 20 20 20 20 20 53 45 4c 45 43 54 20 63 6f 75 6e       SELECT coun
c100: 74 28 2a 29 20 46 52 4f 4d 20 73 71 6c 69 74 65  t(*) FROM sqlite
c110: 5f 73 74 61 74 31 3b 0a 20 20 20 20 7d 0a 20 20  _stat1;.    }.  
c120: 7d 20 33 0a 7d 20 3b 23 20 69 66 63 61 70 61 62  } 3.} ;# ifcapab
c130: 6c 65 20 61 6e 61 6c 79 7a 65 0a 0a 0a 23 20 41  le analyze...# A
c140: 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 66 6f 72  uthorization for
c150: 20 41 4c 54 45 52 20 54 41 42 4c 45 20 41 44 44   ALTER TABLE ADD
c160: 20 43 4f 4c 55 4d 4e 2e 0a 23 20 54 68 65 73 65   COLUMN..# These
c170: 20 74 65 73 74 73 20 61 72 65 20 6f 6d 69 74 74   tests are omitt
c180: 65 64 20 69 66 20 74 68 65 20 6c 69 62 72 61 72  ed if the librar
c190: 79 0a 23 20 77 61 73 20 62 75 69 6c 74 20 77 69  y.# was built wi
c1a0: 74 68 6f 75 74 20 41 4c 54 45 52 20 54 41 42 4c  thout ALTER TABL
c1b0: 45 20 73 75 70 70 6f 72 74 2e 0a 69 66 63 61 70  E support..ifcap
c1c0: 61 62 6c 65 20 7b 61 6c 74 65 72 74 61 62 6c 65  able {altertable
c1d0: 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 61 75  } {.  do_test au
c1e0: 74 68 2d 31 2e 33 30 30 20 7b 0a 20 20 20 20 65  th-1.300 {.    e
c1f0: 78 65 63 73 71 6c 20 7b 43 52 45 41 54 45 20 54  xecsql {CREATE T
c200: 41 42 4c 45 20 74 35 28 78 29 7d 0a 20 20 20 20  ABLE t5(x)}.    
c210: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
c220: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
c230: 72 67 34 20 61 72 67 73 7d 20 7b 0a 20 20 20 20  rg4 args} {.    
c240: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
c250: 4c 49 54 45 5f 41 4c 54 45 52 5f 54 41 42 4c 45  LITE_ALTER_TABLE
c260: 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74  "} {.        set
c270: 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73   ::authargs [lis
c280: 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61  t $arg1 $arg2 $a
c290: 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20  rg3 $arg4].     
c2a0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
c2b0: 5f 4f 4b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  _OK.      }.    
c2c0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
c2d0: 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 74  OK.    }.    cat
c2e0: 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20 41 4c  chsql {.      AL
c2f0: 54 45 52 20 54 41 42 4c 45 20 74 35 20 41 44 44  TER TABLE t5 ADD
c300: 20 43 4f 4c 55 4d 4e 20 6e 65 77 5f 63 6f 6c 5f   COLUMN new_col_
c310: 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 30 20  1;.    }.  } {0 
c320: 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75  {}}.  do_test au
c330: 74 68 2d 31 2e 33 30 31 20 7b 0a 20 20 20 20 73  th-1.301 {.    s
c340: 65 74 20 78 20 5b 65 78 65 63 73 71 6c 20 7b 53  et x [execsql {S
c350: 45 4c 45 43 54 20 73 71 6c 20 46 52 4f 4d 20 73  ELECT sql FROM s
c360: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45  qlite_master WHE
c370: 52 45 20 6e 61 6d 65 3d 27 74 35 27 7d 5d 0a 20  RE name='t5'}]. 
c380: 20 20 20 72 65 67 65 78 70 20 6e 65 77 5f 63 6f     regexp new_co
c390: 6c 5f 31 20 24 78 0a 20 20 7d 20 7b 31 7d 0a 20  l_1 $x.  } {1}. 
c3a0: 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e   do_test auth-1.
c3b0: 33 30 32 20 7b 0a 20 20 20 20 73 65 74 20 61 75  302 {.    set au
c3c0: 74 68 61 72 67 73 0a 20 20 7d 20 7b 6d 61 69 6e  thargs.  } {main
c3d0: 20 74 35 20 7b 7d 20 7b 7d 7d 0a 20 20 64 6f 5f   t5 {} {}}.  do_
c3e0: 74 65 73 74 20 61 75 74 68 2d 31 2e 33 30 33 20  test auth-1.303 
c3f0: 7b 0a 20 20 20 20 70 72 6f 63 20 61 75 74 68 20  {.    proc auth 
c400: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
c410: 61 72 67 33 20 61 72 67 34 20 61 72 67 73 7d 20  arg3 arg4 args} 
c420: 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64  {.      if {$cod
c430: 65 3d 3d 22 53 51 4c 49 54 45 5f 41 4c 54 45 52  e=="SQLITE_ALTER
c440: 5f 54 41 42 4c 45 22 7d 20 7b 0a 20 20 20 20 20  _TABLE"} {.     
c450: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
c460: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
c470: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
c480: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
c490: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20  SQLITE_IGNORE.  
c4a0: 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75      }.      retu
c4b0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20  rn SQLITE_OK.   
c4c0: 20 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20   }.    catchsql 
c4d0: 7b 0a 20 20 20 20 20 20 41 4c 54 45 52 20 54 41  {.      ALTER TA
c4e0: 42 4c 45 20 74 35 20 41 44 44 20 43 4f 4c 55 4d  BLE t5 ADD COLUM
c4f0: 4e 20 6e 65 77 5f 63 6f 6c 5f 32 3b 0a 20 20 20  N new_col_2;.   
c500: 20 7d 0a 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20 20   }.  } {0 {}}.  
c510: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 33  do_test auth-1.3
c520: 30 34 20 7b 0a 20 20 20 20 73 65 74 20 78 20 5b  04 {.    set x [
c530: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
c540: 73 71 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  sql FROM sqlite_
c550: 6d 61 73 74 65 72 20 57 48 45 52 45 20 6e 61 6d  master WHERE nam
c560: 65 3d 27 74 35 27 7d 5d 0a 20 20 20 20 72 65 67  e='t5'}].    reg
c570: 65 78 70 20 6e 65 77 5f 63 6f 6c 5f 32 20 24 78  exp new_col_2 $x
c580: 0a 20 20 7d 20 7b 30 7d 0a 20 20 64 6f 5f 74 65  .  } {0}.  do_te
c590: 73 74 20 61 75 74 68 2d 31 2e 33 30 35 20 7b 0a  st auth-1.305 {.
c5a0: 20 20 20 20 73 65 74 20 61 75 74 68 61 72 67 73      set authargs
c5b0: 0a 20 20 7d 20 7b 6d 61 69 6e 20 74 35 20 7b 7d  .  } {main t5 {}
c5c0: 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61   {}}.  do_test a
c5d0: 75 74 68 2d 31 2e 33 30 36 20 7b 0a 20 20 20 20  uth-1.306 {.    
c5e0: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
c5f0: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
c600: 72 67 34 20 61 72 67 73 7d 20 7b 0a 20 20 20 20  rg4 args} {.    
c610: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
c620: 4c 49 54 45 5f 41 4c 54 45 52 5f 54 41 42 4c 45  LITE_ALTER_TABLE
c630: 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74  "} {.        set
c640: 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73   ::authargs [lis
c650: 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61  t $arg1 $arg2 $a
c660: 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20  rg3 $arg4].     
c670: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
c680: 5f 44 45 4e 59 0a 20 20 20 20 20 20 7d 0a 20 20  _DENY.      }.  
c690: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
c6a0: 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63  E_OK.    }.    c
c6b0: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20  atchsql {.      
c6c0: 41 4c 54 45 52 20 54 41 42 4c 45 20 74 35 20 41  ALTER TABLE t5 A
c6d0: 44 44 20 43 4f 4c 55 4d 4e 20 6e 65 77 5f 63 6f  DD COLUMN new_co
c6e0: 6c 5f 33 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31  l_3.    }.  } {1
c6f0: 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64   {not authorized
c700: 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74  }}.  do_test aut
c710: 68 2d 31 2e 33 30 37 20 7b 0a 20 20 20 20 73 65  h-1.307 {.    se
c720: 74 20 78 20 5b 65 78 65 63 73 71 6c 20 7b 53 45  t x [execsql {SE
c730: 4c 45 43 54 20 73 71 6c 20 46 52 4f 4d 20 74 65  LECT sql FROM te
c740: 6d 70 2e 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  mp.sqlite_master
c750: 20 57 48 45 52 45 20 74 79 70 65 3d 27 74 35 27   WHERE type='t5'
c760: 7d 5d 0a 20 20 20 20 72 65 67 65 78 70 20 6e 65  }].    regexp ne
c770: 77 5f 63 6f 6c 5f 33 20 24 78 0a 20 20 7d 20 7b  w_col_3 $x.  } {
c780: 30 7d 0a 0a 20 20 64 6f 5f 74 65 73 74 20 61 75  0}..  do_test au
c790: 74 68 2d 31 2e 33 30 38 20 7b 0a 20 20 20 20 73  th-1.308 {.    s
c7a0: 65 74 20 61 75 74 68 61 72 67 73 0a 20 20 7d 20  et authargs.  } 
c7b0: 7b 6d 61 69 6e 20 74 35 20 7b 7d 20 7b 7d 7d 0a  {main t5 {} {}}.
c7c0: 20 20 65 78 65 63 73 71 6c 20 7b 44 52 4f 50 20    execsql {DROP 
c7d0: 54 41 42 4c 45 20 74 35 7d 0a 7d 20 3b 23 20 69  TABLE t5}.} ;# i
c7e0: 66 63 61 70 61 62 6c 65 20 61 6c 74 65 72 74 61  fcapable alterta
c7f0: 62 6c 65 0a 0a 69 66 63 61 70 61 62 6c 65 20 7b  ble..ifcapable {
c800: 63 74 65 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74  cte} {.  do_test
c810: 20 61 75 74 68 2d 31 2e 33 31 30 20 7b 0a 20 20   auth-1.310 {.  
c820: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
c830: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
c840: 20 61 72 67 34 20 61 72 67 73 7d 20 7b 0a 20 20   arg4 args} {.  
c850: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
c860: 53 51 4c 49 54 45 5f 52 45 43 55 52 53 49 56 45  SQLITE_RECURSIVE
c870: 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 72 65 74  "} {.        ret
c880: 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a  urn SQLITE_DENY.
c890: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65        }.      re
c8a0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
c8b0: 20 20 20 7d 0a 20 20 20 20 64 62 20 65 76 61 6c     }.    db eval
c8c0: 20 7b 0a 20 20 20 20 20 20 20 44 52 4f 50 20 54   {.       DROP T
c8d0: 41 42 4c 45 20 49 46 20 45 58 49 53 54 53 20 74  ABLE IF EXISTS t
c8e0: 31 3b 0a 20 20 20 20 20 20 20 43 52 45 41 54 45  1;.       CREATE
c8f0: 20 54 41 42 4c 45 20 74 31 28 61 2c 62 29 3b 0a   TABLE t1(a,b);.
c900: 20 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e         INSERT IN
c910: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31 2c 32  TO t1 VALUES(1,2
c920: 29 2c 28 33 2c 34 29 2c 28 35 2c 36 29 3b 0a 20  ),(3,4),(5,6);. 
c930: 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f     }.  } {}.  do
c940: 5f 63 61 74 63 68 73 71 6c 5f 74 65 73 74 20 61  _catchsql_test a
c950: 75 74 68 2d 31 2e 33 31 31 20 7b 0a 20 20 20 20  uth-1.311 {.    
c960: 57 49 54 48 0a 20 20 20 20 20 20 20 61 75 74 68  WITH.       auth
c970: 31 33 31 31 28 78 2c 79 29 20 41 53 20 28 53 45  1311(x,y) AS (SE
c980: 4c 45 43 54 20 61 2b 62 2c 20 62 2d 61 20 46 52  LECT a+b, b-a FR
c990: 4f 4d 20 74 31 29 0a 20 20 20 20 53 45 4c 45 43  OM t1).    SELEC
c9a0: 54 20 2a 20 46 52 4f 4d 20 61 75 74 68 31 33 31  T * FROM auth131
c9b0: 31 20 4f 52 44 45 52 20 42 59 20 78 3b 0a 20 20  1 ORDER BY x;.  
c9c0: 7d 20 7b 30 20 7b 33 20 31 20 37 20 31 20 31 31  } {0 {3 1 7 1 11
c9d0: 20 31 7d 7d 0a 20 20 64 6f 5f 63 61 74 63 68 73   1}}.  do_catchs
c9e0: 71 6c 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 33  ql_test auth-1.3
c9f0: 31 32 20 7b 0a 20 20 20 20 57 49 54 48 20 52 45  12 {.    WITH RE
ca00: 43 55 52 53 49 56 45 0a 20 20 20 20 20 20 20 61  CURSIVE.       a
ca10: 75 74 68 31 33 31 32 28 78 2c 79 29 20 41 53 20  uth1312(x,y) AS 
ca20: 28 53 45 4c 45 43 54 20 61 2b 62 2c 20 62 2d 61  (SELECT a+b, b-a
ca30: 20 46 52 4f 4d 20 74 31 29 0a 20 20 20 20 53 45   FROM t1).    SE
ca40: 4c 45 43 54 20 78 2c 20 79 20 46 52 4f 4d 20 61  LECT x, y FROM a
ca50: 75 74 68 31 33 31 32 20 4f 52 44 45 52 20 42 59  uth1312 ORDER BY
ca60: 20 78 3b 0a 20 20 7d 20 7b 30 20 7b 33 20 31 20   x;.  } {0 {3 1 
ca70: 37 20 31 20 31 31 20 31 7d 7d 0a 20 20 64 6f 5f  7 1 11 1}}.  do_
ca80: 63 61 74 63 68 73 71 6c 5f 74 65 73 74 20 61 75  catchsql_test au
ca90: 74 68 2d 31 2e 33 31 33 20 7b 0a 20 20 20 20 57  th-1.313 {.    W
caa0: 49 54 48 20 52 45 43 55 52 53 49 56 45 0a 20 20  ITH RECURSIVE.  
cab0: 20 20 20 20 20 61 75 74 68 31 33 31 33 28 78 29       auth1313(x)
cac0: 20 41 53 20 28 56 41 4c 55 45 53 28 31 29 20 55   AS (VALUES(1) U
cad0: 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43 54 20  NION ALL SELECT 
cae0: 78 2b 31 20 46 52 4f 4d 20 61 75 74 68 31 33 31  x+1 FROM auth131
caf0: 33 20 57 48 45 52 45 20 78 3c 35 29 0a 20 20 20  3 WHERE x<5).   
cb00: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
cb10: 31 3b 0a 20 20 7d 20 7b 30 20 7b 31 20 32 20 33  1;.  } {0 {1 2 3
cb20: 20 34 20 35 20 36 7d 7d 0a 20 20 64 6f 5f 63 61   4 5 6}}.  do_ca
cb30: 74 63 68 73 71 6c 5f 74 65 73 74 20 61 75 74 68  tchsql_test auth
cb40: 2d 31 2e 33 31 34 20 7b 0a 20 20 20 20 57 49 54  -1.314 {.    WIT
cb50: 48 20 52 45 43 55 52 53 49 56 45 0a 20 20 20 20  H RECURSIVE.    
cb60: 20 20 20 61 75 74 68 31 33 31 34 28 78 29 20 41     auth1314(x) A
cb70: 53 20 28 56 41 4c 55 45 53 28 31 29 20 55 4e 49  S (VALUES(1) UNI
cb80: 4f 4e 20 41 4c 4c 20 53 45 4c 45 43 54 20 78 2b  ON ALL SELECT x+
cb90: 31 20 46 52 4f 4d 20 61 75 74 68 31 33 31 34 20  1 FROM auth1314 
cba0: 57 48 45 52 45 20 78 3c 35 29 0a 20 20 20 20 53  WHERE x<5).    S
cbb0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20  ELECT * FROM t1 
cbc0: 4c 45 46 54 20 4a 4f 49 4e 20 61 75 74 68 31 33  LEFT JOIN auth13
cbd0: 31 34 3b 0a 20 20 7d 20 7b 31 20 7b 6e 6f 74 20  14;.  } {1 {not 
cbe0: 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 7d 20 3b  authorized}}.} ;
cbf0: 23 20 69 66 63 61 70 61 62 6c 65 20 63 74 65 0a  # ifcapable cte.
cc00: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 32 2e  .do_test auth-2.
cc10: 31 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  1 {.  proc auth 
cc20: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
cc30: 61 72 67 33 20 61 72 67 34 20 61 72 67 73 7d 20  arg3 arg4 args} 
cc40: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
cc50: 3d 22 53 51 4c 49 54 45 5f 52 45 41 44 22 20 26  ="SQLITE_READ" &
cc60: 26 20 24 61 72 67 31 3d 3d 22 74 33 22 20 26 26  & $arg1=="t3" &&
cc70: 20 24 61 72 67 32 3d 3d 22 78 22 7d 20 7b 0a 20   $arg2=="x"} {. 
cc80: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
cc90: 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20  TE_DENY.    }.  
cca0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
ccb0: 4f 4b 0a 20 20 7d 0a 20 20 64 62 20 61 75 74 68  OK.  }.  db auth
ccc0: 6f 72 69 7a 65 72 20 3a 3a 61 75 74 68 0a 20 20  orizer ::auth.  
ccd0: 65 78 65 63 73 71 6c 20 7b 43 52 45 41 54 45 20  execsql {CREATE 
cce0: 54 41 42 4c 45 20 74 33 28 78 20 49 4e 54 45 47  TABLE t3(x INTEG
ccf0: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20  ER PRIMARY KEY, 
cd00: 79 2c 20 7a 29 7d 0a 20 20 63 61 74 63 68 73 71  y, z)}.  catchsq
cd10: 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  l {SELECT * FROM
cd20: 20 74 33 7d 0a 7d 20 7b 31 20 7b 61 63 63 65 73   t3}.} {1 {acces
cd30: 73 20 74 6f 20 74 33 2e 78 20 69 73 20 70 72 6f  s to t3.x is pro
cd40: 68 69 62 69 74 65 64 7d 7d 0a 64 6f 5f 74 65 73  hibited}}.do_tes
cd50: 74 20 61 75 74 68 2d 32 2e 31 20 7b 0a 20 20 63  t auth-2.1 {.  c
cd60: 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20  atchsql {SELECT 
cd70: 79 2c 7a 20 46 52 4f 4d 20 74 33 7d 0a 7d 20 7b  y,z FROM t3}.} {
cd80: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  0 {}}.do_test au
cd90: 74 68 2d 32 2e 32 20 7b 0a 20 20 63 61 74 63 68  th-2.2 {.  catch
cda0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 52 4f 57 49  sql {SELECT ROWI
cdb0: 44 2c 79 2c 7a 20 46 52 4f 4d 20 74 33 7d 0a 7d  D,y,z FROM t3}.}
cdc0: 20 7b 31 20 7b 61 63 63 65 73 73 20 74 6f 20 74   {1 {access to t
cdd0: 33 2e 78 20 69 73 20 70 72 6f 68 69 62 69 74 65  3.x is prohibite
cde0: 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  d}}.do_test auth
cdf0: 2d 32 2e 33 20 7b 0a 20 20 63 61 74 63 68 73 71  -2.3 {.  catchsq
ce00: 6c 20 7b 53 45 4c 45 43 54 20 4f 49 44 2c 79 2c  l {SELECT OID,y,
ce10: 7a 20 46 52 4f 4d 20 74 33 7d 0a 7d 20 7b 31 20  z FROM t3}.} {1 
ce20: 7b 61 63 63 65 73 73 20 74 6f 20 74 33 2e 78 20  {access to t3.x 
ce30: 69 73 20 70 72 6f 68 69 62 69 74 65 64 7d 7d 0a  is prohibited}}.
ce40: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 32 2e 34  do_test auth-2.4
ce50: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
ce60: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
ce70: 72 67 33 20 61 72 67 34 20 61 72 67 73 7d 20 7b  rg3 arg4 args} {
ce80: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
ce90: 22 53 51 4c 49 54 45 5f 52 45 41 44 22 20 26 26  "SQLITE_READ" &&
cea0: 20 24 61 72 67 31 3d 3d 22 74 33 22 20 26 26 20   $arg1=="t3" && 
ceb0: 24 61 72 67 32 3d 3d 22 78 22 7d 20 7b 0a 20 20  $arg2=="x"} {.  
cec0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
ced0: 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20  E_IGNORE.    }. 
cee0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
cef0: 5f 4f 4b 0a 20 20 7d 0a 20 20 65 78 65 63 73 71  _OK.  }.  execsq
cf00: 6c 20 7b 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  l {INSERT INTO t
cf10: 33 20 56 41 4c 55 45 53 28 34 34 2c 35 35 2c 36  3 VALUES(44,55,6
cf20: 36 29 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  6)}.  catchsql {
cf30: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33  SELECT * FROM t3
cf40: 7d 0a 7d 20 7b 30 20 7b 7b 7d 20 35 35 20 36 36  }.} {0 {{} 55 66
cf50: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
cf60: 32 2e 35 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  2.5 {.  catchsql
cf70: 20 7b 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 79   {SELECT rowid,y
cf80: 2c 7a 20 46 52 4f 4d 20 74 33 7d 0a 7d 20 7b 30  ,z FROM t3}.} {0
cf90: 20 7b 7b 7d 20 35 35 20 36 36 7d 7d 0a 64 6f 5f   {{} 55 66}}.do_
cfa0: 74 65 73 74 20 61 75 74 68 2d 32 2e 36 20 7b 0a  test auth-2.6 {.
cfb0: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
cfc0: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
cfd0: 20 61 72 67 34 20 61 72 67 73 7d 20 7b 0a 20 20   arg4 args} {.  
cfe0: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
cff0: 4c 49 54 45 5f 52 45 41 44 22 20 26 26 20 24 61  LITE_READ" && $a
d000: 72 67 31 3d 3d 22 74 33 22 20 26 26 20 24 61 72  rg1=="t3" && $ar
d010: 67 32 3d 3d 22 52 4f 57 49 44 22 7d 20 7b 0a 20  g2=="ROWID"} {. 
d020: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
d030: 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a  TE_IGNORE.    }.
d040: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
d050: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
d060: 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52  sql {SELECT * FR
d070: 4f 4d 20 74 33 7d 0a 7d 20 7b 30 20 7b 34 34 20  OM t3}.} {0 {44 
d080: 35 35 20 36 36 7d 7d 0a 64 6f 5f 74 65 73 74 20  55 66}}.do_test 
d090: 61 75 74 68 2d 32 2e 37 20 7b 0a 20 20 63 61 74  auth-2.7 {.  cat
d0a0: 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 52 4f  chsql {SELECT RO
d0b0: 57 49 44 2c 79 2c 7a 20 46 52 4f 4d 20 74 33 7d  WID,y,z FROM t3}
d0c0: 0a 7d 20 7b 30 20 7b 34 34 20 35 35 20 36 36 7d  .} {0 {44 55 66}
d0d0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 32  }.do_test auth-2
d0e0: 2e 38 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  .8 {.  proc auth
d0f0: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
d100: 20 61 72 67 33 20 61 72 67 34 20 61 72 67 73 7d   arg3 arg4 args}
d110: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
d120: 3d 3d 22 53 51 4c 49 54 45 5f 52 45 41 44 22 20  =="SQLITE_READ" 
d130: 26 26 20 24 61 72 67 31 3d 3d 22 74 32 22 20 26  && $arg1=="t2" &
d140: 26 20 24 61 72 67 32 3d 3d 22 52 4f 57 49 44 22  & $arg2=="ROWID"
d150: 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  } {.      return
d160: 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20   SQLITE_IGNORE. 
d170: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
d180: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
d190: 63 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54  catchsql {SELECT
d1a0: 20 52 4f 57 49 44 2c 62 2c 63 20 46 52 4f 4d 20   ROWID,b,c FROM 
d1b0: 74 32 7d 0a 7d 20 7b 30 20 7b 7b 7d 20 32 20 33  t2}.} {0 {{} 2 3
d1c0: 33 20 7b 7d 20 38 20 39 7d 7d 0a 64 6f 5f 74 65  3 {} 8 9}}.do_te
d1d0: 73 74 20 61 75 74 68 2d 32 2e 39 2e 31 20 7b 0a  st auth-2.9.1 {.
d1e0: 20 20 23 20 57 65 20 68 61 76 65 20 74 6f 20 66    # We have to f
d1f0: 6c 75 73 68 20 74 68 65 20 63 61 63 68 65 20 68  lush the cache h
d200: 65 72 65 20 69 6e 20 63 61 73 65 20 74 68 65 20  ere in case the 
d210: 54 63 6c 20 69 6e 74 65 72 66 61 63 65 20 74 72  Tcl interface tr
d220: 69 65 73 20 74 6f 0a 20 20 23 20 72 65 75 73 65  ies to.  # reuse
d230: 20 61 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d   a statement com
d240: 70 69 6c 65 64 20 77 69 74 68 20 73 71 6c 69 74  piled with sqlit
d250: 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 29 2e  e3_prepare_v2().
d260: 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 0a 20   In this case,. 
d270: 20 23 20 74 68 65 20 66 69 72 73 74 20 65 72 72   # the first err
d280: 6f 72 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 69  or encountered i
d290: 73 20 61 6e 20 53 51 4c 49 54 45 5f 53 43 48 45  s an SQLITE_SCHE
d2a0: 4d 41 20 65 72 72 6f 72 2e 20 54 68 65 6e 2c 20  MA error. Then, 
d2b0: 77 68 65 6e 0a 20 20 23 20 74 72 79 69 6e 67 20  when.  # trying 
d2c0: 74 6f 20 72 65 63 6f 6d 70 69 6c 65 20 74 68 65  to recompile the
d2d0: 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 20   statement, the 
d2e0: 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 65 72  authorization er
d2f0: 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74 65 72  ror is encounter
d300: 65 64 2e 0a 20 20 23 20 49 66 20 77 65 20 64 6f  ed..  # If we do
d310: 20 6e 6f 74 20 66 6c 75 73 68 20 74 68 65 20 63   not flush the c
d320: 61 63 68 65 2c 20 74 68 65 20 63 6f 72 72 65 63  ache, the correc
d330: 74 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  t error message 
d340: 69 73 20 72 65 74 75 72 6e 65 64 2c 20 62 75 74  is returned, but
d350: 0a 20 20 23 20 74 68 65 20 65 72 72 6f 72 20 63  .  # the error c
d360: 6f 64 65 20 69 73 20 53 51 4c 49 54 45 5f 53 43  ode is SQLITE_SC
d370: 48 45 4d 41 2c 20 6e 6f 74 20 53 51 4c 49 54 45  HEMA, not SQLITE
d380: 5f 45 52 52 4f 52 20 61 73 20 72 65 71 75 69 72  _ERROR as requir
d390: 65 64 20 62 79 20 74 68 65 20 74 65 73 74 0a 20  ed by the test. 
d3a0: 20 23 20 63 61 73 65 20 61 66 74 65 72 20 74 68   # case after th
d3b0: 69 73 20 6f 6e 65 2e 0a 20 20 23 0a 20 20 64 62  is one..  #.  db
d3c0: 20 63 61 63 68 65 20 66 6c 75 73 68 0a 0a 20 20   cache flush..  
d3d0: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
d3e0: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
d3f0: 72 67 34 20 61 72 67 73 7d 20 7b 0a 20 20 20 20  rg4 args} {.    
d400: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
d410: 54 45 5f 52 45 41 44 22 20 26 26 20 24 61 72 67  TE_READ" && $arg
d420: 31 3d 3d 22 74 32 22 20 26 26 20 24 61 72 67 32  1=="t2" && $arg2
d430: 3d 3d 22 52 4f 57 49 44 22 7d 20 7b 0a 20 20 20  =="ROWID"} {.   
d440: 20 20 20 72 65 74 75 72 6e 20 62 6f 67 75 73 0a     return bogus.
d450: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
d460: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
d470: 20 63 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43   catchsql {SELEC
d480: 54 20 52 4f 57 49 44 2c 62 2c 63 20 46 52 4f 4d  T ROWID,b,c FROM
d490: 20 74 32 7d 0a 7d 20 7b 31 20 7b 61 75 74 68 6f   t2}.} {1 {autho
d4a0: 72 69 7a 65 72 20 6d 61 6c 66 75 6e 63 74 69 6f  rizer malfunctio
d4b0: 6e 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  n}}.do_test auth
d4c0: 2d 32 2e 39 2e 32 20 7b 0a 20 20 64 62 20 65 72  -2.9.2 {.  db er
d4d0: 72 6f 72 63 6f 64 65 0a 7d 20 7b 31 7d 0a 64 6f  rorcode.} {1}.do
d4e0: 5f 74 65 73 74 20 61 75 74 68 2d 32 2e 31 30 20  _test auth-2.10 
d4f0: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
d500: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
d510: 67 33 20 61 72 67 34 20 61 72 67 73 7d 20 7b 0a  g3 arg4 args} {.
d520: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
d530: 53 51 4c 49 54 45 5f 53 45 4c 45 43 54 22 7d 20  SQLITE_SELECT"} 
d540: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 62  {.      return b
d550: 6f 67 75 73 0a 20 20 20 20 7d 0a 20 20 20 20 72  ogus.    }.    r
d560: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
d570: 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b    }.  catchsql {
d580: 53 45 4c 45 43 54 20 52 4f 57 49 44 2c 62 2c 63  SELECT ROWID,b,c
d590: 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31 20 7b   FROM t2}.} {1 {
d5a0: 61 75 74 68 6f 72 69 7a 65 72 20 6d 61 6c 66 75  authorizer malfu
d5b0: 6e 63 74 69 6f 6e 7d 7d 0a 64 6f 5f 74 65 73 74  nction}}.do_test
d5c0: 20 61 75 74 68 2d 32 2e 31 31 2e 31 20 7b 0a 20   auth-2.11.1 {. 
d5d0: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
d5e0: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
d5f0: 61 72 67 34 20 61 72 67 73 7d 20 7b 0a 20 20 20  arg4 args} {.   
d600: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
d610: 49 54 45 5f 52 45 41 44 22 20 26 26 20 24 61 72  ITE_READ" && $ar
d620: 67 32 3d 3d 22 61 22 7d 20 7b 0a 20 20 20 20 20  g2=="a"} {.     
d630: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49   return SQLITE_I
d640: 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20  GNORE.    }.    
d650: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
d660: 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20  .  }.  catchsql 
d670: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
d680: 32 2c 20 74 33 7d 0a 7d 20 7b 30 20 7b 7b 7d 20  2, t3}.} {0 {{} 
d690: 32 20 33 33 20 34 34 20 35 35 20 36 36 20 7b 7d  2 33 44 55 66 {}
d6a0: 20 38 20 39 20 34 34 20 35 35 20 36 36 7d 7d 0a   8 9 44 55 66}}.
d6b0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 32 2e 31  do_test auth-2.1
d6c0: 31 2e 32 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  1.2 {.  proc aut
d6d0: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
d6e0: 32 20 61 72 67 33 20 61 72 67 34 20 61 72 67 73  2 arg3 arg4 args
d6f0: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
d700: 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45 41 44 22  e=="SQLITE_READ"
d710: 20 26 26 20 24 61 72 67 32 3d 3d 22 78 22 7d 20   && $arg2=="x"} 
d720: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  {.      return S
d730: 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20  QLITE_IGNORE.   
d740: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
d750: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
d760: 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a  tchsql {SELECT *
d770: 20 46 52 4f 4d 20 74 32 2c 20 74 33 7d 0a 7d 20   FROM t2, t3}.} 
d780: 7b 30 20 7b 31 31 20 32 20 33 33 20 7b 7d 20 35  {0 {11 2 33 {} 5
d790: 35 20 36 36 20 37 20 38 20 39 20 7b 7d 20 35 35  5 66 7 8 9 {} 55
d7a0: 20 36 36 7d 7d 0a 0a 23 20 4d 61 6b 65 20 73 75   66}}..# Make su
d7b0: 72 65 20 74 68 65 20 4f 4c 44 20 61 6e 64 20 4e  re the OLD and N
d7c0: 45 57 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 73  EW pseudo-tables
d7d0: 20 6f 66 20 61 20 74 72 69 67 67 65 72 20 67 65   of a trigger ge
d7e0: 74 20 61 75 74 68 6f 72 69 7a 65 64 2e 0a 23 0a  t authorized..#.
d7f0: 69 66 63 61 70 61 62 6c 65 20 74 72 69 67 67 65  ifcapable trigge
d800: 72 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 61 75  r {.  do_test au
d810: 74 68 2d 33 2e 31 20 7b 0a 20 20 20 20 70 72 6f  th-3.1 {.    pro
d820: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
d830: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
d840: 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 20 20 72   args} {.      r
d850: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
d860: 20 20 20 20 7d 0a 20 20 20 20 65 78 65 63 73 71      }.    execsq
d870: 6c 20 7b 0a 20 20 20 20 20 20 43 52 45 41 54 45  l {.      CREATE
d880: 20 54 41 42 4c 45 20 74 78 28 61 31 2c 61 32 2c   TABLE tx(a1,a2,
d890: 62 31 2c 62 32 2c 63 31 2c 63 32 29 3b 0a 20 20  b1,b2,c1,c2);.  
d8a0: 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47      CREATE TRIGG
d8b0: 45 52 20 72 31 20 41 46 54 45 52 20 55 50 44 41  ER r1 AFTER UPDA
d8c0: 54 45 20 4f 4e 20 74 32 20 46 4f 52 20 45 41 43  TE ON t2 FOR EAC
d8d0: 48 20 52 4f 57 20 42 45 47 49 4e 0a 20 20 20 20  H ROW BEGIN.    
d8e0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
d8f0: 74 78 20 56 41 4c 55 45 53 28 4f 4c 44 2e 61 2c  tx VALUES(OLD.a,
d900: 4e 45 57 2e 61 2c 4f 4c 44 2e 62 2c 4e 45 57 2e  NEW.a,OLD.b,NEW.
d910: 62 2c 4f 4c 44 2e 63 2c 4e 45 57 2e 63 29 3b 0a  b,OLD.c,NEW.c);.
d920: 20 20 20 20 20 20 45 4e 44 3b 0a 20 20 20 20 20        END;.     
d930: 20 55 50 44 41 54 45 20 74 32 20 53 45 54 20 61   UPDATE t2 SET a
d940: 3d 61 2b 31 3b 0a 20 20 20 20 20 20 53 45 4c 45  =a+1;.      SELE
d950: 43 54 20 2a 20 46 52 4f 4d 20 74 78 3b 0a 20 20  CT * FROM tx;.  
d960: 20 20 7d 0a 20 20 7d 20 7b 31 31 20 31 32 20 32    }.  } {11 12 2
d970: 20 32 20 33 33 20 33 33 20 37 20 38 20 38 20 38   2 33 33 7 8 8 8
d980: 20 39 20 39 7d 0a 20 20 64 6f 5f 74 65 73 74 20   9 9}.  do_test 
d990: 61 75 74 68 2d 33 2e 32 20 7b 0a 20 20 20 20 70  auth-3.2 {.    p
d9a0: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
d9b0: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
d9c0: 67 34 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 20  g4 args} {.     
d9d0: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
d9e0: 49 54 45 5f 52 45 41 44 22 20 26 26 20 24 61 72  ITE_READ" && $ar
d9f0: 67 31 3d 3d 22 74 32 22 20 26 26 20 24 61 72 67  g1=="t2" && $arg
da00: 32 3d 3d 22 63 22 7d 20 7b 0a 20 20 20 20 20 20  2=="c"} {.      
da10: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
da20: 49 47 4e 4f 52 45 0a 20 20 20 20 20 20 7d 0a 20  IGNORE.      }. 
da30: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
da40: 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20  TE_OK.    }.    
da50: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
da60: 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 78 3b 0a  DELETE FROM tx;.
da70: 20 20 20 20 20 20 55 50 44 41 54 45 20 74 32 20        UPDATE t2 
da80: 53 45 54 20 61 3d 61 2b 31 30 30 3b 0a 20 20 20  SET a=a+100;.   
da90: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
daa0: 20 74 78 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b   tx;.    }.  } {
dab0: 31 32 20 31 31 32 20 32 20 32 20 7b 7d 20 7b 7d  12 112 2 2 {} {}
dac0: 20 38 20 31 30 38 20 38 20 38 20 7b 7d 20 7b 7d   8 108 8 8 {} {}
dad0: 7d 0a 7d 20 3b 23 20 69 66 63 61 70 61 62 6c 65  }.} ;# ifcapable
dae0: 20 74 72 69 67 67 65 72 0a 0a 23 20 4d 61 6b 65   trigger..# Make
daf0: 20 73 75 72 65 20 74 68 65 20 6e 61 6d 65 73 20   sure the names 
db00: 6f 66 20 76 69 65 77 73 20 61 6e 64 20 74 72 69  of views and tri
db10: 67 67 65 72 73 20 61 72 65 20 70 61 73 73 65 64  ggers are passed
db20: 20 6f 6e 20 6f 6e 20 61 72 67 34 2e 0a 23 0a 69   on on arg4..#.i
db30: 66 63 61 70 61 62 6c 65 20 74 72 69 67 67 65 72  fcapable trigger
db40: 20 7b 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d   {.do_test auth-
db50: 34 2e 31 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  4.1 {.  proc aut
db60: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
db70: 32 20 61 72 67 33 20 61 72 67 34 20 61 72 67 73  2 arg3 arg4 args
db80: 7d 20 7b 0a 20 20 20 20 6c 61 70 70 65 6e 64 20  } {.    lappend 
db90: 3a 3a 61 75 74 68 61 72 67 73 20 24 63 6f 64 65  ::authargs $code
dba0: 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72   $arg1 $arg2 $ar
dbb0: 67 33 20 24 61 72 67 34 0a 20 20 20 20 72 65 74  g3 $arg4.    ret
dbc0: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
dbd0: 7d 0a 20 20 73 65 74 20 61 75 74 68 61 72 67 73  }.  set authargs
dbe0: 20 7b 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a   {}.  execsql {.
dbf0: 20 20 20 20 55 50 44 41 54 45 20 74 32 20 53 45      UPDATE t2 SE
dc00: 54 20 61 3d 61 2b 31 3b 0a 20 20 7d 0a 20 20 73  T a=a+1;.  }.  s
dc10: 65 74 20 61 75 74 68 61 72 67 73 0a 7d 20 5b 6c  et authargs.} [l
dc20: 69 73 74 20 5c 0a 20 20 53 51 4c 49 54 45 5f 52  ist \.  SQLITE_R
dc30: 45 41 44 20 20 20 74 32 20 61 20 20 6d 61 69 6e  EAD   t2 a  main
dc40: 20 7b 7d 20 5c 0a 20 20 53 51 4c 49 54 45 5f 55   {} \.  SQLITE_U
dc50: 50 44 41 54 45 20 74 32 20 61 20 20 6d 61 69 6e  PDATE t2 a  main
dc60: 20 7b 7d 20 5c 0a 20 20 53 51 4c 49 54 45 5f 49   {} \.  SQLITE_I
dc70: 4e 53 45 52 54 20 74 78 20 7b 7d 20 6d 61 69 6e  NSERT tx {} main
dc80: 20 72 31 20 5c 0a 20 20 53 51 4c 49 54 45 5f 52   r1 \.  SQLITE_R
dc90: 45 41 44 20 20 20 74 32 20 61 20 20 6d 61 69 6e  EAD   t2 a  main
dca0: 20 72 31 20 5c 0a 20 20 53 51 4c 49 54 45 5f 52   r1 \.  SQLITE_R
dcb0: 45 41 44 20 20 20 74 32 20 61 20 20 6d 61 69 6e  EAD   t2 a  main
dcc0: 20 72 31 20 5c 0a 20 20 53 51 4c 49 54 45 5f 52   r1 \.  SQLITE_R
dcd0: 45 41 44 20 20 20 74 32 20 62 20 20 6d 61 69 6e  EAD   t2 b  main
dce0: 20 72 31 20 5c 0a 20 20 53 51 4c 49 54 45 5f 52   r1 \.  SQLITE_R
dcf0: 45 41 44 20 20 20 74 32 20 62 20 20 6d 61 69 6e  EAD   t2 b  main
dd00: 20 72 31 20 5c 0a 20 20 53 51 4c 49 54 45 5f 52   r1 \.  SQLITE_R
dd10: 45 41 44 20 20 20 74 32 20 63 20 20 6d 61 69 6e  EAD   t2 c  main
dd20: 20 72 31 20 5c 0a 20 20 53 51 4c 49 54 45 5f 52   r1 \.  SQLITE_R
dd30: 45 41 44 20 20 20 74 32 20 63 20 20 6d 61 69 6e  EAD   t2 c  main
dd40: 20 72 31 5d 0a 7d 0a 0a 69 66 63 61 70 61 62 6c   r1].}..ifcapabl
dd50: 65 20 7b 76 69 65 77 20 26 26 20 74 72 69 67 67  e {view && trigg
dd60: 65 72 7d 20 7b 0a 64 6f 5f 74 65 73 74 20 61 75  er} {.do_test au
dd70: 74 68 2d 34 2e 32 20 7b 0a 20 20 65 78 65 63 73  th-4.2 {.  execs
dd80: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
dd90: 56 49 45 57 20 76 31 20 41 53 20 53 45 4c 45 43  VIEW v1 AS SELEC
dda0: 54 20 61 2b 62 20 41 53 20 78 20 46 52 4f 4d 20  T a+b AS x FROM 
ddb0: 74 32 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54  t2;.    CREATE T
ddc0: 41 42 4c 45 20 76 31 63 68 6e 67 28 78 31 2c 78  ABLE v1chng(x1,x
ddd0: 32 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54  2);.    CREATE T
dde0: 52 49 47 47 45 52 20 72 32 20 49 4e 53 54 45 41  RIGGER r2 INSTEA
ddf0: 44 20 4f 46 20 55 50 44 41 54 45 20 4f 4e 20 76  D OF UPDATE ON v
de00: 31 20 42 45 47 49 4e 0a 20 20 20 20 20 20 49 4e  1 BEGIN.      IN
de10: 53 45 52 54 20 49 4e 54 4f 20 76 31 63 68 6e 67  SERT INTO v1chng
de20: 20 56 41 4c 55 45 53 28 4f 4c 44 2e 78 2c 4e 45   VALUES(OLD.x,NE
de30: 57 2e 78 29 3b 0a 20 20 20 20 45 4e 44 3b 0a 20  W.x);.    END;. 
de40: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
de50: 20 76 31 3b 0a 20 20 7d 0a 7d 20 7b 31 31 35 20   v1;.  }.} {115 
de60: 31 31 37 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  117}.do_test aut
de70: 68 2d 34 2e 33 20 7b 0a 20 20 73 65 74 20 61 75  h-4.3 {.  set au
de80: 74 68 61 72 67 73 20 7b 7d 0a 20 20 65 78 65 63  thargs {}.  exec
de90: 73 71 6c 20 7b 0a 20 20 20 20 55 50 44 41 54 45  sql {.    UPDATE
dea0: 20 76 31 20 53 45 54 20 78 3d 31 20 57 48 45 52   v1 SET x=1 WHER
deb0: 45 20 78 3d 31 31 37 0a 20 20 7d 0a 20 20 73 65  E x=117.  }.  se
dec0: 74 20 61 75 74 68 61 72 67 73 0a 7d 20 5b 6c 69  t authargs.} [li
ded0: 73 74 20 5c 0a 20 20 53 51 4c 49 54 45 5f 55 50  st \.  SQLITE_UP
dee0: 44 41 54 45 20 76 31 20 20 20 20 20 78 20 20 6d  DATE v1     x  m
def0: 61 69 6e 20 7b 7d 20 5c 0a 20 20 53 51 4c 49 54  ain {} \.  SQLIT
df00: 45 5f 53 45 4c 45 43 54 20 7b 7d 20 20 20 20 20  E_SELECT {}     
df10: 7b 7d 20 7b 7d 20 20 20 76 31 20 5c 0a 20 20 53  {} {}   v1 \.  S
df20: 51 4c 49 54 45 5f 52 45 41 44 20 20 20 74 32 20  QLITE_READ   t2 
df30: 20 20 20 20 61 20 20 6d 61 69 6e 20 76 31 20 5c      a  main v1 \
df40: 0a 20 20 53 51 4c 49 54 45 5f 52 45 41 44 20 20  .  SQLITE_READ  
df50: 20 74 32 20 20 20 20 20 62 20 20 6d 61 69 6e 20   t2     b  main 
df60: 76 31 20 5c 0a 20 20 53 51 4c 49 54 45 5f 52 45  v1 \.  SQLITE_RE
df70: 41 44 20 20 20 76 31 20 20 20 20 20 78 20 20 6d  AD   v1     x  m
df80: 61 69 6e 20 76 31 20 5c 0a 20 20 53 51 4c 49 54  ain v1 \.  SQLIT
df90: 45 5f 52 45 41 44 20 20 20 76 31 20 20 20 20 20  E_READ   v1     
dfa0: 78 20 20 6d 61 69 6e 20 76 31 20 5c 0a 20 20 53  x  main v1 \.  S
dfb0: 51 4c 49 54 45 5f 53 45 4c 45 43 54 20 7b 7d 20  QLITE_SELECT {} 
dfc0: 20 20 20 20 7b 7d 20 7b 7d 20 76 31 20 20 20 5c      {} {} v1   \
dfd0: 0a 20 20 53 51 4c 49 54 45 5f 52 45 41 44 20 20  .  SQLITE_READ  
dfe0: 20 76 31 20 20 20 20 20 78 20 20 6d 61 69 6e 20   v1     x  main 
dff0: 76 31 20 5c 0a 20 20 53 51 4c 49 54 45 5f 49 4e  v1 \.  SQLITE_IN
e000: 53 45 52 54 20 76 31 63 68 6e 67 20 7b 7d 20 6d  SERT v1chng {} m
e010: 61 69 6e 20 72 32 20 5c 0a 20 20 53 51 4c 49 54  ain r2 \.  SQLIT
e020: 45 5f 52 45 41 44 20 20 20 76 31 20 20 20 20 20  E_READ   v1     
e030: 78 20 20 6d 61 69 6e 20 72 32 20 5c 0a 20 20 53  x  main r2 \.  S
e040: 51 4c 49 54 45 5f 52 45 41 44 20 20 20 76 31 20  QLITE_READ   v1 
e050: 20 20 20 20 78 20 20 6d 61 69 6e 20 72 32 20 5c      x  main r2 \
e060: 0a 5d 0a 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  .]..do_test auth
e070: 2d 34 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c  -4.4 {.  execsql
e080: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 52   {.    CREATE TR
e090: 49 47 47 45 52 20 72 33 20 49 4e 53 54 45 41 44  IGGER r3 INSTEAD
e0a0: 20 4f 46 20 44 45 4c 45 54 45 20 4f 4e 20 76 31   OF DELETE ON v1
e0b0: 20 42 45 47 49 4e 0a 20 20 20 20 20 20 49 4e 53   BEGIN.      INS
e0c0: 45 52 54 20 49 4e 54 4f 20 76 31 63 68 6e 67 20  ERT INTO v1chng 
e0d0: 56 41 4c 55 45 53 28 4f 4c 44 2e 78 2c 4e 55 4c  VALUES(OLD.x,NUL
e0e0: 4c 29 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 20  L);.    END;.   
e0f0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 76   SELECT * FROM v
e100: 31 3b 0a 20 20 7d 0a 7d 20 7b 31 31 35 20 31 31  1;.  }.} {115 11
e110: 37 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  7}.do_test auth-
e120: 34 2e 35 20 7b 0a 20 20 73 65 74 20 61 75 74 68  4.5 {.  set auth
e130: 61 72 67 73 20 7b 7d 0a 20 20 65 78 65 63 73 71  args {}.  execsq
e140: 6c 20 7b 0a 20 20 20 20 44 45 4c 45 54 45 20 46  l {.    DELETE F
e150: 52 4f 4d 20 76 31 20 57 48 45 52 45 20 78 3d 31  ROM v1 WHERE x=1
e160: 31 37 0a 20 20 7d 0a 20 20 73 65 74 20 61 75 74  17.  }.  set aut
e170: 68 61 72 67 73 0a 7d 20 5b 6c 69 73 74 20 5c 0a  hargs.} [list \.
e180: 20 20 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 20    SQLITE_DELETE 
e190: 76 31 20 20 20 20 20 7b 7d 20 6d 61 69 6e 20 7b  v1     {} main {
e1a0: 7d 20 5c 0a 20 20 53 51 4c 49 54 45 5f 53 45 4c  } \.  SQLITE_SEL
e1b0: 45 43 54 20 7b 7d 20 20 20 20 20 7b 7d 20 7b 7d  ECT {}     {} {}
e1c0: 20 20 20 76 31 20 5c 0a 20 20 53 51 4c 49 54 45     v1 \.  SQLITE
e1d0: 5f 52 45 41 44 20 20 20 74 32 20 20 20 20 20 61  _READ   t2     a
e1e0: 20 20 6d 61 69 6e 20 76 31 20 5c 0a 20 20 53 51    main v1 \.  SQ
e1f0: 4c 49 54 45 5f 52 45 41 44 20 20 20 74 32 20 20  LITE_READ   t2  
e200: 20 20 20 62 20 20 6d 61 69 6e 20 76 31 20 5c 0a     b  main v1 \.
e210: 20 20 53 51 4c 49 54 45 5f 52 45 41 44 20 20 20    SQLITE_READ   
e220: 76 31 20 20 20 20 20 78 20 20 6d 61 69 6e 20 76  v1     x  main v
e230: 31 20 5c 0a 20 20 53 51 4c 49 54 45 5f 52 45 41  1 \.  SQLITE_REA
e240: 44 20 20 20 76 31 20 20 20 20 20 78 20 20 6d 61  D   v1     x  ma
e250: 69 6e 20 76 31 20 5c 0a 20 20 53 51 4c 49 54 45  in v1 \.  SQLITE
e260: 5f 53 45 4c 45 43 54 20 7b 7d 20 20 20 20 20 7b  _SELECT {}     {
e270: 7d 20 7b 7d 20 76 31 20 20 20 5c 0a 20 20 53 51  } {} v1   \.  SQ
e280: 4c 49 54 45 5f 52 45 41 44 20 20 20 76 31 20 20  LITE_READ   v1  
e290: 20 20 20 78 20 20 6d 61 69 6e 20 76 31 20 5c 0a     x  main v1 \.
e2a0: 20 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 20    SQLITE_INSERT 
e2b0: 76 31 63 68 6e 67 20 7b 7d 20 6d 61 69 6e 20 72  v1chng {} main r
e2c0: 33 20 5c 0a 20 20 53 51 4c 49 54 45 5f 52 45 41  3 \.  SQLITE_REA
e2d0: 44 20 20 20 76 31 20 20 20 20 20 78 20 20 6d 61  D   v1     x  ma
e2e0: 69 6e 20 72 33 20 5c 0a 5d 0a 0a 7d 20 3b 23 20  in r3 \.]..} ;# 
e2f0: 69 66 63 61 70 61 62 6c 65 20 76 69 65 77 20 26  ifcapable view &
e300: 26 20 74 72 69 67 67 65 72 0a 0a 23 20 54 69 63  & trigger..# Tic
e310: 6b 65 74 20 23 31 33 33 38 3a 20 20 4d 61 6b 65  ket #1338:  Make
e320: 20 73 75 72 65 20 61 75 74 68 65 6e 74 69 63 61   sure authentica
e330: 74 69 6f 6e 20 77 6f 72 6b 73 20 69 6e 20 74 68  tion works in th
e340: 65 20 70 72 65 73 65 6e 63 65 20 6f 66 20 61 6e  e presence of an
e350: 20 41 53 0a 23 20 63 6c 61 75 73 65 2e 0a 23 0a   AS.# clause..#.
e360: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 35 2e 31  do_test auth-5.1
e370: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
e380: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
e390: 72 67 33 20 61 72 67 34 20 61 72 67 73 7d 20 7b  rg3 arg4 args} {
e3a0: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
e3b0: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 65 78 65 63  TE_OK.  }.  exec
e3c0: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
e3d0: 20 63 6f 75 6e 74 28 61 29 20 41 53 20 63 6e 74   count(a) AS cnt
e3e0: 20 46 52 4f 4d 20 74 34 20 4f 52 44 45 52 20 42   FROM t4 ORDER B
e3f0: 59 20 63 6e 74 0a 20 20 7d 0a 7d 20 7b 31 7d 0a  Y cnt.  }.} {1}.
e400: 0a 23 20 54 69 63 6b 65 74 20 23 31 36 30 37 0a  .# Ticket #1607.
e410: 23 0a 69 66 63 61 70 61 62 6c 65 20 63 6f 6d 70  #.ifcapable comp
e420: 6f 75 6e 64 26 26 73 75 62 71 75 65 72 79 20 7b  ound&&subquery {
e430: 0a 20 20 69 66 63 61 70 61 62 6c 65 20 74 72 69  .  ifcapable tri
e440: 67 67 65 72 20 7b 0a 20 20 20 20 65 78 65 63 73  gger {.    execs
e450: 71 6c 20 7b 0a 20 20 20 20 20 20 44 52 4f 50 20  ql {.      DROP 
e460: 54 41 42 4c 45 20 74 78 3b 0a 20 20 20 20 7d 0a  TABLE tx;.    }.
e470: 20 20 20 20 69 66 63 61 70 61 62 6c 65 20 76 69      ifcapable vi
e480: 65 77 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73  ew {.      execs
e490: 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 44 52 4f  ql {.        DRO
e4a0: 50 20 54 41 42 4c 45 20 76 31 63 68 6e 67 3b 0a  P TABLE v1chng;.
e4b0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
e4c0: 7d 0a 20 20 69 66 63 61 70 61 62 6c 65 20 73 74  }.  ifcapable st
e4d0: 61 74 34 20 7b 0a 20 20 20 20 73 65 74 20 73 74  at4 {.    set st
e4e0: 61 74 34 20 22 73 71 6c 69 74 65 5f 73 74 61 74  at4 "sqlite_stat
e4f0: 34 20 22 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20  4 ".  } else {. 
e500: 20 20 20 69 66 63 61 70 61 62 6c 65 20 73 74 61     ifcapable sta
e510: 74 33 20 7b 0a 20 20 20 20 20 20 73 65 74 20 73  t3 {.      set s
e520: 74 61 74 34 20 22 73 71 6c 69 74 65 5f 73 74 61  tat4 "sqlite_sta
e530: 74 33 20 22 0a 20 20 20 20 7d 20 65 6c 73 65 20  t3 ".    } else 
e540: 7b 0a 20 20 20 20 20 20 73 65 74 20 73 74 61 74  {.      set stat
e550: 34 20 22 22 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  4 "".    }.  }. 
e560: 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 35 2e   do_test auth-5.
e570: 32 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  2 {.    execsql 
e580: 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 6e  {.      SELECT n
e590: 61 6d 65 20 46 52 4f 4d 20 28 0a 20 20 20 20 20  ame FROM (.     
e5a0: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
e5b0: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 55   sqlite_master U
e5c0: 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43 54 20  NION ALL SELECT 
e5d0: 2a 20 46 52 4f 4d 20 74 65 6d 70 2e 73 71 6c 69  * FROM temp.sqli
e5e0: 74 65 5f 6d 61 73 74 65 72 29 0a 20 20 20 20 20  te_master).     
e5f0: 20 57 48 45 52 45 20 74 79 70 65 3d 27 74 61 62   WHERE type='tab
e600: 6c 65 27 0a 20 20 20 20 20 20 4f 52 44 45 52 20  le'.      ORDER 
e610: 42 59 20 6e 61 6d 65 0a 20 20 20 20 7d 0a 20 20  BY name.    }.  
e620: 7d 20 22 73 71 6c 69 74 65 5f 73 74 61 74 31 20  } "sqlite_stat1 
e630: 24 7b 73 74 61 74 34 7d 74 31 20 74 32 20 74 33  ${stat4}t1 t2 t3
e640: 20 74 34 22 0a 7d 0a 0a 23 20 54 69 63 6b 65 74   t4".}..# Ticket
e650: 20 23 33 39 34 34 0a 23 0a 69 66 63 61 70 61 62   #3944.#.ifcapab
e660: 6c 65 20 74 72 69 67 67 65 72 20 7b 0a 20 20 64  le trigger {.  d
e670: 6f 5f 74 65 73 74 20 61 75 74 68 2d 35 2e 33 2e  o_test auth-5.3.
e680: 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  1 {.    execsql 
e690: 7b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54  {.      CREATE T
e6a0: 41 42 4c 45 20 74 35 20 28 20 78 20 29 3b 0a 20  ABLE t5 ( x );. 
e6b0: 20 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47       CREATE TRIG
e6c0: 47 45 52 20 74 35 5f 74 72 31 20 41 46 54 45 52  GER t5_tr1 AFTER
e6d0: 20 49 4e 53 45 52 54 20 4f 4e 20 74 35 20 42 45   INSERT ON t5 BE
e6e0: 47 49 4e 20 0a 20 20 20 20 20 20 20 20 55 50 44  GIN .        UPD
e6f0: 41 54 45 20 74 35 20 53 45 54 20 78 20 3d 20 31  ATE t5 SET x = 1
e700: 20 57 48 45 52 45 20 4e 45 57 2e 78 20 3d 20 30   WHERE NEW.x = 0
e710: 3b 0a 20 20 20 20 20 20 45 4e 44 3b 0a 20 20 20  ;.      END;.   
e720: 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 73 65 74 20   }.  } {}.  set 
e730: 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74  ::authargs [list
e740: 5d 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 61  ].  proc auth {a
e750: 72 67 73 7d 20 7b 0a 20 20 20 20 65 76 61 6c 20  rgs} {.    eval 
e760: 6c 61 70 70 65 6e 64 20 3a 3a 61 75 74 68 61 72  lappend ::authar
e770: 67 73 20 5b 6c 72 61 6e 67 65 20 24 61 72 67 73  gs [lrange $args
e780: 20 30 20 34 5d 0a 20 20 20 20 72 65 74 75 72 6e   0 4].    return
e790: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
e7a0: 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 35 2e   do_test auth-5.
e7b0: 33 2e 32 20 7b 0a 20 20 20 20 65 78 65 63 73 71  3.2 {.    execsq
e7c0: 6c 20 7b 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  l { INSERT INTO 
e7d0: 74 35 20 28 78 29 20 76 61 6c 75 65 73 28 30 29  t5 (x) values(0)
e7e0: 20 7d 0a 20 20 20 20 73 65 74 20 3a 3a 61 75 74   }.    set ::aut
e7f0: 68 61 72 67 73 0a 20 20 7d 20 5b 6c 69 73 74 20  hargs.  } [list 
e800: 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 20 74 35  SQLITE_INSERT t5
e810: 20 7b 7d 20 6d 61 69 6e 20 7b 7d 20 20 20 20 5c   {} main {}    \
e820: 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54  .          SQLIT
e830: 45 5f 55 50 44 41 54 45 20 74 35 20 78 20 6d 61  E_UPDATE t5 x ma
e840: 69 6e 20 74 35 5f 74 72 31 20 5c 0a 20 20 20 20  in t5_tr1 \.    
e850: 20 20 20 20 20 20 53 51 4c 49 54 45 5f 52 45 41        SQLITE_REA
e860: 44 20 74 35 20 78 20 6d 61 69 6e 20 74 35 5f 74  D t5 x main t5_t
e870: 72 31 20 20 20 5c 0a 20 20 20 20 5d 0a 20 20 64  r1   \.    ].  d
e880: 6f 5f 74 65 73 74 20 61 75 74 68 2d 35 2e 33 2e  o_test auth-5.3.
e890: 32 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  2 {.    execsql 
e8a0: 7b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  { SELECT * FROM 
e8b0: 74 35 20 7d 0a 20 20 7d 20 7b 31 7d 0a 7d 0a 0a  t5 }.  } {1}.}..
e8c0: 23 20 54 69 63 6b 65 74 20 5b 30 65 62 37 30 64  # Ticket [0eb70d
e8d0: 37 37 63 62 30 35 62 62 32 32 37 32 30 5d 3a 20  77cb05bb22720]: 
e8e0: 20 49 6e 76 61 6c 69 64 20 70 6f 69 6e 74 65 72   Invalid pointer
e8f0: 20 70 61 73 73 73 65 64 20 74 6f 20 74 68 65 20   passsed to the 
e900: 61 75 74 68 6f 72 69 7a 65 72 0a 23 20 63 61 6c  authorizer.# cal
e910: 6c 62 61 63 6b 20 77 68 65 6e 20 75 70 64 61 74  lback when updat
e920: 69 6e 67 20 61 20 52 4f 57 49 44 2e 0a 23 0a 64  ing a ROWID..#.d
e930: 6f 5f 74 65 73 74 20 61 75 74 68 2d 36 2e 31 20  o_test auth-6.1 
e940: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
e950: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
e960: 36 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 2c 67 2c  6(a,b,c,d,e,f,g,
e970: 68 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  h);.    INSERT I
e980: 4e 54 4f 20 74 36 20 56 41 4c 55 45 53 28 31 2c  NTO t6 VALUES(1,
e990: 32 2c 33 2c 34 2c 35 2c 36 2c 37 2c 38 29 3b 0a  2,3,4,5,6,7,8);.
e9a0: 20 20 7d 0a 7d 20 7b 7d 0a 73 65 74 20 3a 3a 61    }.} {}.set ::a
e9b0: 75 74 68 61 72 67 73 20 5b 6c 69 73 74 5d 0a 70  uthargs [list].p
e9c0: 72 6f 63 20 61 75 74 68 20 7b 61 72 67 73 7d 20  roc auth {args} 
e9d0: 7b 0a 20 20 65 76 61 6c 20 6c 61 70 70 65 6e 64  {.  eval lappend
e9e0: 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 72 61   ::authargs [lra
e9f0: 6e 67 65 20 24 61 72 67 73 20 30 20 34 5d 0a 20  nge $args 0 4]. 
ea00: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
ea10: 4b 0a 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  K.}.do_test auth
ea20: 2d 36 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  -6.2 {.  execsql
ea30: 20 7b 55 50 44 41 54 45 20 74 36 20 53 45 54 20   {UPDATE t6 SET 
ea40: 72 6f 77 49 44 3d 72 6f 77 49 44 2b 31 30 30 7d  rowID=rowID+100}
ea50: 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67  .  set ::autharg
ea60: 73 0a 7d 20 5b 6c 69 73 74 20 53 51 4c 49 54 45  s.} [list SQLITE
ea70: 5f 52 45 41 44 20 20 20 74 36 20 52 4f 57 49 44  _READ   t6 ROWID
ea80: 20 6d 61 69 6e 20 7b 7d 20 5c 0a 20 20 20 20 20   main {} \.     
ea90: 20 20 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45     SQLITE_UPDATE
eaa0: 20 74 36 20 52 4f 57 49 44 20 6d 61 69 6e 20 7b   t6 ROWID main {
eab0: 7d 20 5c 0a 5d 0a 64 6f 5f 74 65 73 74 20 61 75  } \.].do_test au
eac0: 74 68 2d 36 2e 33 20 7b 0a 20 20 65 78 65 63 73  th-6.3 {.  execs
ead0: 71 6c 20 7b 53 45 4c 45 43 54 20 72 6f 77 69 64  ql {SELECT rowid
eae0: 2c 20 2a 20 46 52 4f 4d 20 74 36 7d 0a 7d 20 7b  , * FROM t6}.} {
eaf0: 31 30 31 20 31 20 32 20 33 20 34 20 35 20 36 20  101 1 2 3 4 5 6 
eb00: 37 20 38 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d  7 8}..#---------
eb10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
eb20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
eb30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
eb40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
eb50: 0a 23 20 54 65 73 74 20 74 68 61 74 20 76 69 65  .# Test that vie
eb60: 77 20 6e 61 6d 65 73 20 61 72 65 20 69 6e 63 6c  w names are incl
eb70: 75 64 65 64 20 61 73 20 7a 41 72 67 34 2e 0a 23  uded as zArg4..#
eb80: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
eb90: 20 61 75 74 68 2d 37 2e 31 20 7b 0a 20 20 43 52   auth-7.1 {.  CR
eba0: 45 41 54 45 20 54 41 42 4c 45 20 74 37 28 61 2c  EATE TABLE t7(a,
ebb0: 20 62 2c 20 63 29 3b 0a 20 20 43 52 45 41 54 45   b, c);.  CREATE
ebc0: 20 56 49 45 57 20 76 37 20 41 53 20 53 45 4c 45   VIEW v7 AS SELE
ebd0: 43 54 20 2a 20 46 52 4f 4d 20 74 37 3b 0a 7d 20  CT * FROM t7;.} 
ebe0: 7b 7d 0a 73 65 74 20 3a 3a 61 75 74 68 61 72 67  {}.set ::autharg
ebf0: 73 20 5b 6c 69 73 74 5d 0a 70 72 6f 63 20 61 75  s [list].proc au
ec00: 74 68 20 7b 61 72 67 73 7d 20 7b 0a 20 20 65 76  th {args} {.  ev
ec10: 61 6c 20 6c 61 70 70 65 6e 64 20 3a 3a 61 75 74  al lappend ::aut
ec20: 68 61 72 67 73 20 5b 6c 72 61 6e 67 65 20 24 61  hargs [lrange $a
ec30: 72 67 73 20 30 20 34 5d 0a 20 20 72 65 74 75 72  rgs 0 4].  retur
ec40: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 7d 0a 0a 64  n SQLITE_OK.}..d
ec50: 6f 5f 74 65 73 74 20 61 75 74 68 2d 37 2e 32 20  o_test auth-7.2 
ec60: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
ec70: 45 43 54 20 61 2c 20 63 20 46 52 4f 4d 20 76 37  ECT a, c FROM v7
ec80: 7d 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72  }.  set ::authar
ec90: 67 73 0a 7d 20 5b 6c 69 73 74 20 20 20 20 20 20  gs.} [list      
eca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ecb0: 20 20 20 20 5c 0a 20 20 53 51 4c 49 54 45 5f 53      \.  SQLITE_S
ecc0: 45 4c 45 43 54 20 7b 7d 20 7b 7d 20 7b 7d 20 7b  ELECT {} {} {} {
ecd0: 7d 20 20 20 20 20 20 5c 0a 20 20 53 51 4c 49 54  }      \.  SQLIT
ece0: 45 5f 52 45 41 44 20 74 37 20 61 20 6d 61 69 6e  E_READ t7 a main
ecf0: 20 76 37 20 20 20 20 20 20 20 5c 0a 20 20 53 51   v7       \.  SQ
ed00: 4c 49 54 45 5f 52 45 41 44 20 74 37 20 62 20 6d  LITE_READ t7 b m
ed10: 61 69 6e 20 76 37 20 20 20 20 20 20 20 5c 0a 20  ain v7       \. 
ed20: 20 53 51 4c 49 54 45 5f 52 45 41 44 20 74 37 20   SQLITE_READ t7 
ed30: 63 20 6d 61 69 6e 20 76 37 20 20 20 20 20 20 20  c main v7       
ed40: 5c 0a 20 20 53 51 4c 49 54 45 5f 52 45 41 44 20  \.  SQLITE_READ 
ed50: 76 37 20 61 20 6d 61 69 6e 20 7b 7d 20 20 20 20  v7 a main {}    
ed60: 20 20 20 5c 0a 20 20 53 51 4c 49 54 45 5f 52 45     \.  SQLITE_RE
ed70: 41 44 20 76 37 20 63 20 6d 61 69 6e 20 7b 7d 20  AD v7 c main {} 
ed80: 20 20 20 20 20 20 5c 0a 20 20 53 51 4c 49 54 45        \.  SQLITE
ed90: 5f 53 45 4c 45 43 54 20 7b 7d 20 7b 7d 20 7b 7d  _SELECT {} {} {}
eda0: 20 76 37 20 20 20 20 20 20 5c 0a 5d 0a 0a 73 65   v7      \.]..se
edb0: 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69  t ::authargs [li
edc0: 73 74 5d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  st].do_test auth
edd0: 2d 37 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c  -7.3 {.  execsql
ede0: 20 7b 53 45 4c 45 43 54 20 61 2c 20 63 20 46 52   {SELECT a, c FR
edf0: 4f 4d 20 74 37 7d 0a 20 20 73 65 74 20 3a 3a 61  OM t7}.  set ::a
ee00: 75 74 68 61 72 67 73 0a 7d 20 5b 6c 69 73 74 20  uthargs.} [list 
ee10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ee20: 20 20 20 20 20 20 20 20 20 5c 0a 20 20 53 51 4c           \.  SQL
ee30: 49 54 45 5f 53 45 4c 45 43 54 20 7b 7d 20 7b 7d  ITE_SELECT {} {}
ee40: 20 7b 7d 20 7b 7d 20 20 20 20 20 20 5c 0a 20 20   {} {}      \.  
ee50: 53 51 4c 49 54 45 5f 52 45 41 44 20 74 37 20 61  SQLITE_READ t7 a
ee60: 20 6d 61 69 6e 20 7b 7d 20 20 20 20 20 20 20 5c   main {}       \
ee70: 0a 20 20 53 51 4c 49 54 45 5f 52 45 41 44 20 74  .  SQLITE_READ t
ee80: 37 20 63 20 6d 61 69 6e 20 7b 7d 20 20 20 20 20  7 c main {}     
ee90: 20 20 5c 0a 5d 0a 0a 73 65 74 20 3a 3a 61 75 74    \.]..set ::aut
eea0: 68 61 72 67 73 20 5b 6c 69 73 74 5d 0a 64 6f 5f  hargs [list].do_
eeb0: 74 65 73 74 20 61 75 74 68 2d 37 2e 34 20 7b 0a  test auth-7.4 {.
eec0: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
eed0: 54 20 61 2c 20 63 20 46 52 4f 4d 20 74 37 20 41  T a, c FROM t7 A
eee0: 53 20 76 37 7d 0a 20 20 73 65 74 20 3a 3a 61 75  S v7}.  set ::au
eef0: 74 68 61 72 67 73 0a 7d 20 5b 6c 69 73 74 20 20  thargs.} [list  
ef00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef10: 20 20 20 20 20 20 20 20 5c 0a 20 20 53 51 4c 49          \.  SQLI
ef20: 54 45 5f 53 45 4c 45 43 54 20 7b 7d 20 7b 7d 20  TE_SELECT {} {} 
ef30: 7b 7d 20 7b 7d 20 20 20 20 20 20 5c 0a 20 20 53  {} {}      \.  S
ef40: 51 4c 49 54 45 5f 52 45 41 44 20 74 37 20 61 20  QLITE_READ t7 a 
ef50: 6d 61 69 6e 20 7b 7d 20 20 20 20 20 20 20 5c 0a  main {}       \.
ef60: 20 20 53 51 4c 49 54 45 5f 52 45 41 44 20 74 37    SQLITE_READ t7
ef70: 20 63 20 6d 61 69 6e 20 7b 7d 20 20 20 20 20 20   c main {}      
ef80: 20 5c 0a 5d 0a 0a 23 20 49 66 20 61 20 74 61 62   \.]..# If a tab
ef90: 6c 65 20 69 73 20 72 65 66 65 72 65 6e 63 65 64  le is referenced
efa0: 20 62 75 74 20 6e 6f 20 63 6f 6c 75 6d 6e 73 20   but no columns 
efb0: 61 72 65 20 72 65 61 64 20 66 72 6f 6d 20 74 68  are read from th
efc0: 65 20 74 61 62 6c 65 2c 0a 23 20 74 68 61 74 20  e table,.# that 
efd0: 63 61 75 73 65 73 20 61 20 73 69 6e 67 6c 65 20  causes a single 
efe0: 53 51 4c 49 54 45 5f 52 45 41 44 20 61 75 74 68  SQLITE_READ auth
eff0: 6f 72 69 7a 61 74 69 6f 6e 20 77 69 74 68 20 61  orization with a
f000: 20 4e 55 4c 4c 20 63 6f 6c 75 6d 6e 0a 23 20 6e   NULL column.# n
f010: 61 6d 65 2e 0a 23 0a 73 65 74 20 3a 3a 61 75 74  ame..#.set ::aut
f020: 68 61 72 67 73 20 5b 6c 69 73 74 5d 0a 64 6f 5f  hargs [list].do_
f030: 74 65 73 74 20 61 75 74 68 2d 38 2e 31 20 7b 0a  test auth-8.1 {.
f040: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
f050: 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20  T count(*) FROM 
f060: 74 37 7d 0a 20 20 73 65 74 20 3a 3a 61 75 74 68  t7}.  set ::auth
f070: 61 72 67 73 0a 7d 20 5b 6c 69 73 74 20 5c 0a 20  args.} [list \. 
f080: 20 53 51 4c 49 54 45 5f 53 45 4c 45 43 54 20 7b   SQLITE_SELECT {
f090: 7d 20 7b 7d 20 7b 7d 20 7b 7d 20 20 20 20 20 20  } {} {} {}      
f0a0: 20 20 20 20 5c 0a 20 20 53 51 4c 49 54 45 5f 46      \.  SQLITE_F
f0b0: 55 4e 43 54 49 4f 4e 20 7b 7d 20 63 6f 75 6e 74  UNCTION {} count
f0c0: 20 7b 7d 20 7b 7d 20 20 20 20 20 5c 0a 20 20 53   {} {}     \.  S
f0d0: 51 4c 49 54 45 5f 52 45 41 44 20 74 37 20 7b 7d  QLITE_READ t7 {}
f0e0: 20 7b 7d 20 7b 7d 20 20 20 20 20 20 20 20 20 20   {} {}          
f0f0: 20 20 5c 0a 20 20 5d 0a 73 65 74 20 3a 3a 61 75    \.  ].set ::au
f100: 74 68 61 72 67 73 20 5b 6c 69 73 74 5d 0a 0a 64  thargs [list]..d
f110: 6f 5f 74 65 73 74 20 61 75 74 68 2d 38 2e 32 20  o_test auth-8.2 
f120: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
f130: 45 43 54 20 74 36 2e 61 20 46 52 4f 4d 20 74 36  ECT t6.a FROM t6
f140: 2c 20 74 37 7d 0a 20 20 73 65 74 20 3a 3a 61 75  , t7}.  set ::au
f150: 74 68 61 72 67 73 0a 7d 20 5b 6c 69 73 74 20 5c  thargs.} [list \
f160: 0a 20 20 53 51 4c 49 54 45 5f 53 45 4c 45 43 54  .  SQLITE_SELECT
f170: 20 7b 7d 20 7b 7d 20 7b 7d 20 7b 7d 20 20 20 20   {} {} {} {}    
f180: 20 20 20 20 20 20 5c 0a 20 20 53 51 4c 49 54 45        \.  SQLITE
f190: 5f 52 45 41 44 20 74 36 20 61 20 6d 61 69 6e 20  _READ t6 a main 
f1a0: 7b 7d 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20  {}           \. 
f1b0: 20 53 51 4c 49 54 45 5f 52 45 41 44 20 74 37 20   SQLITE_READ t7 
f1c0: 7b 7d 20 7b 7d 20 7b 7d 20 20 20 20 20 20 20 20  {} {} {}        
f1d0: 20 20 20 20 5c 0a 20 20 5d 0a 0a 72 65 6e 61 6d      \.  ]..renam
f1e0: 65 20 70 72 6f 63 20 7b 7d 0a 72 65 6e 61 6d 65  e proc {}.rename
f1f0: 20 70 72 6f 63 5f 72 65 61 6c 20 70 72 6f 63 0a   proc_real proc.
f200: 66 69 6e 69 73 68 5f 74 65 73 74 0a              finish_test.