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

Artifact 9eb4b6b99eee54c95711c74c4b9694acf4d850ed:


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 33 20  uth.test,v 1.43 
0220: 32 30 30 38 2f 30 37 2f 30 32 20 31 33 3a 31 33  2008/07/02 13:13
0230: 3a 35 32 20 64 61 6e 69 65 6c 6b 31 39 37 37 20  :52 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 7d 20 7b  rg2 arg3 arg4} {
0420: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
0430: 22 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 22 20  "SQLITE_INSERT" 
0440: 26 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74  && $arg1=="sqlit
0450: 65 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20  e_master"} {.   
0460: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
0470: 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20  _DENY.    }.    
0480: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
0490: 0a 20 20 7d 0a 20 20 64 62 20 61 75 74 68 6f 72  .  }.  db author
04a0: 69 7a 65 72 20 3a 3a 61 75 74 68 0a 20 20 63 61  izer ::auth.  ca
04b0: 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45 20 54  tchsql {CREATE T
04c0: 41 42 4c 45 20 74 31 28 61 2c 62 2c 63 29 7d 0a  ABLE t1(a,b,c)}.
04d0: 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72  } {1 {not author
04e0: 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  ized}}.do_test a
04f0: 75 74 68 2d 31 2e 31 2e 32 20 7b 0a 20 20 64 62  uth-1.1.2 {.  db
0500: 20 65 72 72 6f 72 63 6f 64 65 0a 7d 20 7b 32 33   errorcode.} {23
0510: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
0520: 2e 31 2e 33 20 7b 0a 20 20 64 62 20 61 75 74 68  .1.3 {.  db auth
0530: 6f 72 69 7a 65 72 0a 7d 20 7b 3a 3a 61 75 74 68  orizer.} {::auth
0540: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
0550: 2e 31 2e 34 20 7b 0a 20 20 23 20 54 69 63 6b 65  .1.4 {.  # Ticke
0560: 74 20 23 38 39 36 2e 0a 20 20 63 61 74 63 68 73  t #896..  catchs
0570: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
0580: 78 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 6e 6f 20  x;.  }.} {1 {no 
0590: 73 75 63 68 20 63 6f 6c 75 6d 6e 3a 20 78 7d 7d  such column: x}}
05a0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
05b0: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  2 {.  execsql {S
05c0: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
05d0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d  sqlite_master}.}
05e0: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68   {}.do_test auth
05f0: 2d 31 2e 33 2e 31 20 7b 0a 20 20 70 72 6f 63 20  -1.3.1 {.  proc 
0600: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
0610: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
0620: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
0630: 3d 22 53 51 4c 49 54 45 5f 43 52 45 41 54 45 5f  ="SQLITE_CREATE_
0640: 54 41 42 4c 45 22 7d 20 7b 0a 20 20 20 20 20 20  TABLE"} {.      
0650: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b  set ::authargs [
0660: 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67 32  list $arg1 $arg2
0670: 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20   $arg3 $arg4].  
0680: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
0690: 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20  E_DENY.    }.   
06a0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
06b0: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
06c0: 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 74   {CREATE TABLE t
06d0: 31 28 61 2c 62 2c 63 29 7d 0a 7d 20 7b 31 20 7b  1(a,b,c)}.} {1 {
06e0: 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d  not authorized}}
06f0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
0700: 33 2e 32 20 7b 0a 20 20 64 62 20 65 72 72 6f 72  3.2 {.  db error
0710: 63 6f 64 65 0a 7d 20 7b 32 33 7d 0a 64 6f 5f 74  code.} {23}.do_t
0720: 65 73 74 20 61 75 74 68 2d 31 2e 33 2e 33 20 7b  est auth-1.3.3 {
0730: 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67  .  set ::autharg
0740: 73 0a 7d 20 7b 74 31 20 7b 7d 20 6d 61 69 6e 20  s.} {t1 {} main 
0750: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
0760: 2d 31 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c  -1.4 {.  execsql
0770: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
0780: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
0790: 7d 0a 7d 20 7b 7d 0a 0a 69 66 63 61 70 61 62 6c  }.} {}..ifcapabl
07a0: 65 20 74 65 6d 70 64 62 20 7b 0a 20 20 64 6f 5f  e tempdb {.  do_
07b0: 74 65 73 74 20 61 75 74 68 2d 31 2e 35 20 7b 0a  test auth-1.5 {.
07c0: 20 20 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63      proc auth {c
07d0: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
07e0: 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 20  g3 arg4} {.     
07f0: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
0800: 49 54 45 5f 49 4e 53 45 52 54 22 20 26 26 20 24  ITE_INSERT" && $
0810: 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 74 65  arg1=="sqlite_te
0820: 6d 70 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20  mp_master"} {.  
0830: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
0840: 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 20 20 7d  ITE_DENY.      }
0850: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
0860: 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20  LITE_OK.    }.  
0870: 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41    catchsql {CREA
0880: 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 74 31  TE TEMP TABLE t1
0890: 28 61 2c 62 2c 63 29 7d 0a 20 20 7d 20 7b 31 20  (a,b,c)}.  } {1 
08a0: 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d  {not authorized}
08b0: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68  }.  do_test auth
08c0: 2d 31 2e 36 20 7b 0a 20 20 20 20 65 78 65 63 73  -1.6 {.    execs
08d0: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
08e0: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70  FROM sqlite_temp
08f0: 5f 6d 61 73 74 65 72 7d 0a 20 20 7d 20 7b 7d 0a  _master}.  } {}.
0900: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31    do_test auth-1
0910: 2e 37 2e 31 20 7b 0a 20 20 20 20 70 72 6f 63 20  .7.1 {.    proc 
0920: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
0930: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
0940: 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64  {.      if {$cod
0950: 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52 45 41 54  e=="SQLITE_CREAT
0960: 45 5f 54 45 4d 50 5f 54 41 42 4c 45 22 7d 20 7b  E_TEMP_TABLE"} {
0970: 0a 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a 61  .        set ::a
0980: 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61  uthargs [list $a
0990: 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20  rg1 $arg2 $arg3 
09a0: 24 61 72 67 34 5d 0a 20 20 20 20 20 20 20 20 72  $arg4].        r
09b0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e  eturn SQLITE_DEN
09c0: 59 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  Y.      }.      
09d0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
09e0: 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 74 63 68  .    }.    catch
09f0: 73 71 6c 20 7b 43 52 45 41 54 45 20 54 45 4d 50  sql {CREATE TEMP
0a00: 20 54 41 42 4c 45 20 74 31 28 61 2c 62 2c 63 29   TABLE t1(a,b,c)
0a10: 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f 74 20 61 75  }.  } {1 {not au
0a20: 74 68 6f 72 69 7a 65 64 7d 7d 0a 20 20 64 6f 5f  thorized}}.  do_
0a30: 74 65 73 74 20 61 75 74 68 2d 31 2e 37 2e 32 20  test auth-1.7.2 
0a40: 7b 0a 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74  {.     set ::aut
0a50: 68 61 72 67 73 0a 20 20 7d 20 7b 74 31 20 7b 7d  hargs.  } {t1 {}
0a60: 20 74 65 6d 70 20 7b 7d 7d 0a 20 20 64 6f 5f 74   temp {}}.  do_t
0a70: 65 73 74 20 61 75 74 68 2d 31 2e 38 20 7b 0a 20  est auth-1.8 {. 
0a80: 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45     execsql {SELE
0a90: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
0aa0: 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d  ite_temp_master}
0ab0: 0a 20 20 7d 20 7b 7d 0a 7d 0a 0a 64 6f 5f 74 65  .  } {}.}..do_te
0ac0: 73 74 20 61 75 74 68 2d 31 2e 39 20 7b 0a 20 20  st auth-1.9 {.  
0ad0: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
0ae0: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
0af0: 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg4} {.    if {$
0b00: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 49 4e  code=="SQLITE_IN
0b10: 53 45 52 54 22 20 26 26 20 24 61 72 67 31 3d 3d  SERT" && $arg1==
0b20: 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 7d  "sqlite_master"}
0b30: 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   {.      return 
0b40: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20  SQLITE_IGNORE.  
0b50: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
0b60: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
0b70: 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45 20  atchsql {CREATE 
0b80: 54 41 42 4c 45 20 74 31 28 61 2c 62 2c 63 29 7d  TABLE t1(a,b,c)}
0b90: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
0ba0: 74 20 61 75 74 68 2d 31 2e 31 30 20 7b 0a 20 20  t auth-1.10 {.  
0bb0: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
0bc0: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
0bd0: 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 7d 0a 64 6f  _master}.} {}.do
0be0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 31 20  _test auth-1.11 
0bf0: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
0c00: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
0c10: 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69  g3 arg4} {.    i
0c20: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
0c30: 45 5f 43 52 45 41 54 45 5f 54 41 42 4c 45 22 7d  E_CREATE_TABLE"}
0c40: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61   {.      set ::a
0c50: 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61  uthargs [list $a
0c60: 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20  rg1 $arg2 $arg3 
0c70: 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74  $arg4].      ret
0c80: 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52  urn SQLITE_IGNOR
0c90: 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  E.    }.    retu
0ca0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
0cb0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45  .  catchsql {CRE
0cc0: 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c 62  ATE TABLE t1(a,b
0cd0: 2c 63 29 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f  ,c)}.} {0 {}}.do
0ce0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 32 20  _test auth-1.12 
0cf0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
0d00: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
0d10: 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b  lite_master}.} {
0d20: 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20 74 65 6d  }..ifcapable tem
0d30: 70 64 62 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  pdb {.  do_test 
0d40: 61 75 74 68 2d 31 2e 31 33 20 7b 0a 20 20 20 20  auth-1.13 {.    
0d50: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
0d60: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
0d70: 72 67 34 7d 20 7b 0a 20 20 20 20 20 20 69 66 20  rg4} {.      if 
0d80: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
0d90: 49 4e 53 45 52 54 22 20 26 26 20 24 61 72 67 31  INSERT" && $arg1
0da0: 3d 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  =="sqlite_temp_m
0db0: 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20  aster"} {.      
0dc0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
0dd0: 49 47 4e 4f 52 45 0a 20 20 20 20 20 20 7d 0a 20  IGNORE.      }. 
0de0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
0df0: 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20  TE_OK.    }.    
0e00: 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45  catchsql {CREATE
0e10: 20 54 45 4d 50 20 54 41 42 4c 45 20 74 31 28 61   TEMP TABLE t1(a
0e20: 2c 62 2c 63 29 7d 0a 20 20 7d 20 7b 30 20 7b 7d  ,b,c)}.  } {0 {}
0e30: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68  }.  do_test auth
0e40: 2d 31 2e 31 34 20 7b 0a 20 20 20 20 65 78 65 63  -1.14 {.    exec
0e50: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
0e60: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d   FROM sqlite_tem
0e70: 70 5f 6d 61 73 74 65 72 7d 0a 20 20 7d 20 7b 7d  p_master}.  } {}
0e80: 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  .  do_test auth-
0e90: 31 2e 31 35 20 7b 0a 20 20 20 20 70 72 6f 63 20  1.15 {.    proc 
0ea0: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
0eb0: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
0ec0: 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64  {.      if {$cod
0ed0: 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52 45 41 54  e=="SQLITE_CREAT
0ee0: 45 5f 54 45 4d 50 5f 54 41 42 4c 45 22 7d 20 7b  E_TEMP_TABLE"} {
0ef0: 0a 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a 61  .        set ::a
0f00: 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61  uthargs [list $a
0f10: 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20  rg1 $arg2 $arg3 
0f20: 24 61 72 67 34 5d 0a 20 20 20 20 20 20 20 20 72  $arg4].        r
0f30: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e  eturn SQLITE_IGN
0f40: 4f 52 45 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ORE.      }.    
0f50: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
0f60: 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 74  OK.    }.    cat
0f70: 63 68 73 71 6c 20 7b 43 52 45 41 54 45 20 54 45  chsql {CREATE TE
0f80: 4d 50 20 54 41 42 4c 45 20 74 31 28 61 2c 62 2c  MP TABLE t1(a,b,
0f90: 63 29 7d 0a 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20  c)}.  } {0 {}}. 
0fa0: 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e   do_test auth-1.
0fb0: 31 36 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  16 {.    execsql
0fc0: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
0fd0: 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  OM sqlite_temp_m
0fe0: 61 73 74 65 72 7d 0a 20 20 7d 20 7b 7d 0a 20 20  aster}.  } {}.  
0ff0: 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  .  do_test auth-
1000: 31 2e 31 37 20 7b 0a 20 20 20 20 70 72 6f 63 20  1.17 {.    proc 
1010: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
1020: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
1030: 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64  {.      if {$cod
1040: 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52 45 41 54  e=="SQLITE_CREAT
1050: 45 5f 54 41 42 4c 45 22 7d 20 7b 0a 20 20 20 20  E_TABLE"} {.    
1060: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
1070: 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24  gs [list $arg1 $
1080: 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34  arg2 $arg3 $arg4
1090: 5d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ].        return
10a0: 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20   SQLITE_DENY.   
10b0: 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72     }.      retur
10c0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20  n SQLITE_OK.    
10d0: 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b  }.    catchsql {
10e0: 43 52 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c  CREATE TEMP TABL
10f0: 45 20 74 31 28 61 2c 62 2c 63 29 7d 0a 20 20 7d  E t1(a,b,c)}.  }
1100: 20 7b 30 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73   {0 {}}.  do_tes
1110: 74 20 61 75 74 68 2d 31 2e 31 38 20 7b 0a 20 20  t auth-1.18 {.  
1120: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
1130: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
1140: 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a  te_temp_master}.
1150: 20 20 7d 20 7b 74 31 7d 0a 7d 0a 0a 64 6f 5f 74    } {t1}.}..do_t
1160: 65 73 74 20 61 75 74 68 2d 31 2e 31 39 2e 31 20  est auth-1.19.1 
1170: 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72  {.  set ::authar
1180: 67 73 20 7b 7d 0a 20 20 70 72 6f 63 20 61 75 74  gs {}.  proc aut
1190: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
11a0: 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20  2 arg3 arg4} {. 
11b0: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
11c0: 51 4c 49 54 45 5f 43 52 45 41 54 45 5f 54 45 4d  QLITE_CREATE_TEM
11d0: 50 5f 54 41 42 4c 45 22 7d 20 7b 0a 20 20 20 20  P_TABLE"} {.    
11e0: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
11f0: 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72   [list $arg1 $ar
1200: 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a  g2 $arg3 $arg4].
1210: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
1220: 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20  ITE_DENY.    }. 
1230: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
1240: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
1250: 71 6c 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45  ql {CREATE TABLE
1260: 20 74 32 28 61 2c 62 2c 63 29 7d 0a 7d 20 7b 30   t2(a,b,c)}.} {0
1270: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
1280: 68 2d 31 2e 31 39 2e 32 20 7b 0a 20 20 73 65 74  h-1.19.2 {.  set
1290: 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 7d   ::authargs.} {}
12a0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
12b0: 32 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  20 {.  execsql {
12c0: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
12d0: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a   sqlite_master}.
12e0: 7d 20 7b 74 32 7d 0a 0a 64 6f 5f 74 65 73 74 20  } {t2}..do_test 
12f0: 61 75 74 68 2d 31 2e 32 31 2e 31 20 7b 0a 20 20  auth-1.21.1 {.  
1300: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
1310: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
1320: 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg4} {.    if {$
1330: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52  code=="SQLITE_DR
1340: 4f 50 5f 54 41 42 4c 45 22 7d 20 7b 0a 20 20 20  OP_TABLE"} {.   
1350: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
1360: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
1370: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
1380: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
1390: 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a  LITE_DENY.    }.
13a0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
13b0: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
13c0: 73 71 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45 20  sql {DROP TABLE 
13d0: 74 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75  t2}.} {1 {not au
13e0: 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65  thorized}}.do_te
13f0: 73 74 20 61 75 74 68 2d 31 2e 32 31 2e 32 20 7b  st auth-1.21.2 {
1400: 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67  .  set ::autharg
1410: 73 0a 7d 20 7b 74 32 20 7b 7d 20 6d 61 69 6e 20  s.} {t2 {} main 
1420: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
1430: 2d 31 2e 32 32 20 7b 0a 20 20 65 78 65 63 73 71  -1.22 {.  execsq
1440: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
1450: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
1460: 72 7d 0a 7d 20 7b 74 32 7d 0a 64 6f 5f 74 65 73  r}.} {t2}.do_tes
1470: 74 20 61 75 74 68 2d 31 2e 32 33 2e 31 20 7b 0a  t auth-1.23.1 {.
1480: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
1490: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
14a0: 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20   arg4} {.    if 
14b0: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
14c0: 44 52 4f 50 5f 54 41 42 4c 45 22 7d 20 7b 0a 20  DROP_TABLE"} {. 
14d0: 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61       set ::autha
14e0: 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20  rgs [list $arg1 
14f0: 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67  $arg2 $arg3 $arg
1500: 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  4].      return 
1510: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20  SQLITE_IGNORE.  
1520: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
1530: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
1540: 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54 41  atchsql {DROP TA
1550: 42 4c 45 20 74 32 7d 0a 7d 20 7b 30 20 7b 7d 7d  BLE t2}.} {0 {}}
1560: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
1570: 32 33 2e 32 20 7b 0a 20 20 73 65 74 20 3a 3a 61  23.2 {.  set ::a
1580: 75 74 68 61 72 67 73 0a 7d 20 7b 74 32 20 7b 7d  uthargs.} {t2 {}
1590: 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73   main {}}.do_tes
15a0: 74 20 61 75 74 68 2d 31 2e 32 34 20 7b 0a 20 20  t auth-1.24 {.  
15b0: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
15c0: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
15d0: 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a  _master}.} {t2}.
15e0: 0a 69 66 63 61 70 61 62 6c 65 20 74 65 6d 70 64  .ifcapable tempd
15f0: 62 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 61 75  b {.  do_test au
1600: 74 68 2d 31 2e 32 35 20 7b 0a 20 20 20 20 70 72  th-1.25 {.    pr
1610: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
1620: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
1630: 34 7d 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24  4} {.      if {$
1640: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52  code=="SQLITE_DR
1650: 4f 50 5f 54 45 4d 50 5f 54 41 42 4c 45 22 7d 20  OP_TEMP_TABLE"} 
1660: 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a  {.        set ::
1670: 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24  authargs [list $
1680: 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33  arg1 $arg2 $arg3
1690: 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 20 20   $arg4].        
16a0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45  return SQLITE_DE
16b0: 4e 59 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  NY.      }.     
16c0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
16d0: 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 74 63  K.    }.    catc
16e0: 68 73 71 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45  hsql {DROP TABLE
16f0: 20 74 31 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f 74   t1}.  } {1 {not
1700: 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 20 20   authorized}}.  
1710: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
1720: 36 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  6 {.    execsql 
1730: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
1740: 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  M sqlite_temp_ma
1750: 73 74 65 72 7d 0a 20 20 7d 20 7b 74 31 7d 0a 20  ster}.  } {t1}. 
1760: 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e   do_test auth-1.
1770: 32 37 20 7b 0a 20 20 20 20 70 72 6f 63 20 61 75  27 {.    proc au
1780: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
1790: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
17a0: 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d        if {$code=
17b0: 3d 22 53 51 4c 49 54 45 5f 44 52 4f 50 5f 54 45  ="SQLITE_DROP_TE
17c0: 4d 50 5f 54 41 42 4c 45 22 7d 20 7b 0a 20 20 20  MP_TABLE"} {.   
17d0: 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61       set ::autha
17e0: 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20  rgs [list $arg1 
17f0: 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67  $arg2 $arg3 $arg
1800: 34 5d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  4].        retur
1810: 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a  n SQLITE_IGNORE.
1820: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65        }.      re
1830: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
1840: 20 20 20 7d 0a 20 20 20 20 63 61 74 63 68 73 71     }.    catchsq
1850: 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45 20 74 31  l {DROP TABLE t1
1860: 7d 0a 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20 20 64  }.  } {0 {}}.  d
1870: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 38  o_test auth-1.28
1880: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
1890: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
18a0: 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73   sqlite_temp_mas
18b0: 74 65 72 7d 0a 20 20 7d 20 7b 74 31 7d 0a 7d 0a  ter}.  } {t1}.}.
18c0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
18d0: 32 39 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  29 {.  proc auth
18e0: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
18f0: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
1900: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
1910: 4c 49 54 45 5f 49 4e 53 45 52 54 22 20 26 26 20  LITE_INSERT" && 
1920: 24 61 72 67 31 3d 3d 22 74 32 22 7d 20 7b 0a 20  $arg1=="t2"} {. 
1930: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
1940: 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20  TE_DENY.    }.  
1950: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
1960: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
1970: 6c 20 7b 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  l {INSERT INTO t
1980: 32 20 56 41 4c 55 45 53 28 31 2c 32 2c 33 29 7d  2 VALUES(1,2,3)}
1990: 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f  .} {1 {not autho
19a0: 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20  rized}}.do_test 
19b0: 61 75 74 68 2d 31 2e 33 30 20 7b 0a 20 20 65 78  auth-1.30 {.  ex
19c0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20  ecsql {SELECT * 
19d0: 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 7d 0a 64 6f  FROM t2}.} {}.do
19e0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 33 31 20  _test auth-1.31 
19f0: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
1a00: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
1a10: 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69  g3 arg4} {.    i
1a20: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
1a30: 45 5f 49 4e 53 45 52 54 22 20 26 26 20 24 61 72  E_INSERT" && $ar
1a40: 67 31 3d 3d 22 74 32 22 7d 20 7b 0a 20 20 20 20  g1=="t2"} {.    
1a50: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
1a60: 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20  IGNORE.    }.   
1a70: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
1a80: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
1a90: 20 7b 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32   {INSERT INTO t2
1aa0: 20 56 41 4c 55 45 53 28 31 2c 32 2c 33 29 7d 0a   VALUES(1,2,3)}.
1ab0: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
1ac0: 20 61 75 74 68 2d 31 2e 33 32 20 7b 0a 20 20 65   auth-1.32 {.  e
1ad0: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a  xecsql {SELECT *
1ae0: 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 7d 0a 64   FROM t2}.} {}.d
1af0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 33 33  o_test auth-1.33
1b00: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
1b10: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
1b20: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
1b30: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
1b40: 54 45 5f 49 4e 53 45 52 54 22 20 26 26 20 24 61  TE_INSERT" && $a
1b50: 72 67 31 3d 3d 22 74 31 22 7d 20 7b 0a 20 20 20  rg1=="t1"} {.   
1b60: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
1b70: 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20  _IGNORE.    }.  
1b80: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
1b90: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
1ba0: 6c 20 7b 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  l {INSERT INTO t
1bb0: 32 20 56 41 4c 55 45 53 28 31 2c 32 2c 33 29 7d  2 VALUES(1,2,3)}
1bc0: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
1bd0: 74 20 61 75 74 68 2d 31 2e 33 34 20 7b 0a 20 20  t auth-1.34 {.  
1be0: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
1bf0: 2a 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31 20  * FROM t2}.} {1 
1c00: 32 20 33 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 75  2 3}..do_test au
1c10: 74 68 2d 31 2e 33 35 2e 31 20 7b 0a 20 20 70 72  th-1.35.1 {.  pr
1c20: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
1c30: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
1c40: 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f  4} {.    if {$co
1c50: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45 41 44  de=="SQLITE_READ
1c60: 22 20 26 26 20 24 61 72 67 31 3d 3d 22 74 32 22  " && $arg1=="t2"
1c70: 20 26 26 20 24 61 72 67 32 3d 3d 22 62 22 7d 20   && $arg2=="b"} 
1c80: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  {.      return S
1c90: 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d  QLITE_DENY.    }
1ca0: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
1cb0: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
1cc0: 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46  hsql {SELECT * F
1cd0: 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31 20 7b 61 63  ROM t2}.} {1 {ac
1ce0: 63 65 73 73 20 74 6f 20 74 32 2e 62 20 69 73 20  cess to t2.b is 
1cf0: 70 72 6f 68 69 62 69 74 65 64 7d 7d 0a 69 66 63  prohibited}}.ifc
1d00: 61 70 61 62 6c 65 20 61 74 74 61 63 68 20 7b 0a  apable attach {.
1d10: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31    do_test auth-1
1d20: 2e 33 35 2e 32 20 7b 0a 20 20 20 20 65 78 65 63  .35.2 {.    exec
1d30: 73 71 6c 20 7b 41 54 54 41 43 48 20 44 41 54 41  sql {ATTACH DATA
1d40: 42 41 53 45 20 27 74 65 73 74 2e 64 62 27 20 41  BASE 'test.db' A
1d50: 53 20 74 77 6f 7d 0a 20 20 20 20 63 61 74 63 68  S two}.    catch
1d60: 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52  sql {SELECT * FR
1d70: 4f 4d 20 74 77 6f 2e 74 32 7d 0a 20 20 7d 20 7b  OM two.t2}.  } {
1d80: 31 20 7b 61 63 63 65 73 73 20 74 6f 20 74 77 6f  1 {access to two
1d90: 2e 74 32 2e 62 20 69 73 20 70 72 6f 68 69 62 69  .t2.b is prohibi
1da0: 74 65 64 7d 7d 0a 20 20 65 78 65 63 73 71 6c 20  ted}}.  execsql 
1db0: 7b 44 45 54 41 43 48 20 44 41 54 41 42 41 53 45  {DETACH DATABASE
1dc0: 20 74 77 6f 7d 0a 7d 0a 64 6f 5f 74 65 73 74 20   two}.}.do_test 
1dd0: 61 75 74 68 2d 31 2e 33 36 20 7b 0a 20 20 70 72  auth-1.36 {.  pr
1de0: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
1df0: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
1e00: 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f  4} {.    if {$co
1e10: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45 41 44  de=="SQLITE_READ
1e20: 22 20 26 26 20 24 61 72 67 31 3d 3d 22 74 32 22  " && $arg1=="t2"
1e30: 20 26 26 20 24 61 72 67 32 3d 3d 22 62 22 7d 20   && $arg2=="b"} 
1e40: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  {.      return S
1e50: 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20  QLITE_IGNORE.   
1e60: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
1e70: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
1e80: 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a  tchsql {SELECT *
1e90: 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 30 20 7b   FROM t2}.} {0 {
1ea0: 31 20 7b 7d 20 33 7d 7d 0a 64 6f 5f 74 65 73 74  1 {} 3}}.do_test
1eb0: 20 61 75 74 68 2d 31 2e 33 37 20 7b 0a 20 20 70   auth-1.37 {.  p
1ec0: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
1ed0: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
1ee0: 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g4} {.    if {$c
1ef0: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45 41  ode=="SQLITE_REA
1f00: 44 22 20 26 26 20 24 61 72 67 31 3d 3d 22 74 32  D" && $arg1=="t2
1f10: 22 20 26 26 20 24 61 72 67 32 3d 3d 22 62 22 7d  " && $arg2=="b"}
1f20: 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   {.      return 
1f30: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20  SQLITE_IGNORE.  
1f40: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
1f50: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
1f60: 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20  atchsql {SELECT 
1f70: 2a 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20  * FROM t2 WHERE 
1f80: 62 3d 32 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f  b=2}.} {0 {}}.do
1f90: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 33 38 20  _test auth-1.38 
1fa0: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
1fb0: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
1fc0: 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69  g3 arg4} {.    i
1fd0: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
1fe0: 45 5f 52 45 41 44 22 20 26 26 20 24 61 72 67 31  E_READ" && $arg1
1ff0: 3d 3d 22 74 32 22 20 26 26 20 24 61 72 67 32 3d  =="t2" && $arg2=
2000: 3d 22 61 22 7d 20 7b 0a 20 20 20 20 20 20 72 65  ="a"} {.      re
2010: 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f  turn SQLITE_IGNO
2020: 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  RE.    }.    ret
2030: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
2040: 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 53 45  }.  catchsql {SE
2050: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 20 57  LECT * FROM t2 W
2060: 48 45 52 45 20 62 3d 32 7d 0a 7d 20 7b 30 20 7b  HERE b=2}.} {0 {
2070: 7b 7d 20 32 20 33 7d 7d 0a 64 6f 5f 74 65 73 74  {} 2 3}}.do_test
2080: 20 61 75 74 68 2d 31 2e 33 39 20 7b 0a 20 20 70   auth-1.39 {.  p
2090: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
20a0: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
20b0: 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g4} {.    if {$c
20c0: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45 41  ode=="SQLITE_REA
20d0: 44 22 20 26 26 20 24 61 72 67 31 3d 3d 22 74 32  D" && $arg1=="t2
20e0: 22 20 26 26 20 24 61 72 67 32 3d 3d 22 62 22 7d  " && $arg2=="b"}
20f0: 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   {.      return 
2100: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20  SQLITE_IGNORE.  
2110: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
2120: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
2130: 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20  atchsql {SELECT 
2140: 2a 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20  * FROM t2 WHERE 
2150: 62 20 49 53 20 4e 55 4c 4c 7d 0a 7d 20 7b 30 20  b IS NULL}.} {0 
2160: 7b 31 20 7b 7d 20 33 7d 7d 0a 64 6f 5f 74 65 73  {1 {} 3}}.do_tes
2170: 74 20 61 75 74 68 2d 31 2e 34 30 20 7b 0a 20 20  t auth-1.40 {.  
2180: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
2190: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
21a0: 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg4} {.    if {$
21b0: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45  code=="SQLITE_RE
21c0: 41 44 22 20 26 26 20 24 61 72 67 31 3d 3d 22 74  AD" && $arg1=="t
21d0: 32 22 20 26 26 20 24 61 72 67 32 3d 3d 22 62 22  2" && $arg2=="b"
21e0: 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  } {.      return
21f0: 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20   SQLITE_DENY.   
2200: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
2210: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
2220: 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 61  tchsql {SELECT a
2230: 2c 63 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45  ,c FROM t2 WHERE
2240: 20 62 20 49 53 20 4e 55 4c 4c 7d 0a 7d 20 7b 31   b IS NULL}.} {1
2250: 20 7b 61 63 63 65 73 73 20 74 6f 20 74 32 2e 62   {access to t2.b
2260: 20 69 73 20 70 72 6f 68 69 62 69 74 65 64 7d 7d   is prohibited}}
2270: 0a 20 20 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  .  .do_test auth
2280: 2d 31 2e 34 31 20 7b 0a 20 20 70 72 6f 63 20 61  -1.41 {.  proc a
2290: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
22a0: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
22b0: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
22c0: 22 53 51 4c 49 54 45 5f 55 50 44 41 54 45 22 20  "SQLITE_UPDATE" 
22d0: 26 26 20 24 61 72 67 31 3d 3d 22 74 32 22 20 26  && $arg1=="t2" &
22e0: 26 20 24 61 72 67 32 3d 3d 22 62 22 7d 20 7b 0a  & $arg2=="b"} {.
22f0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
2300: 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20  ITE_DENY.    }. 
2310: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
2320: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
2330: 71 6c 20 7b 55 50 44 41 54 45 20 74 32 20 53 45  ql {UPDATE t2 SE
2340: 54 20 61 3d 31 31 7d 0a 7d 20 7b 30 20 7b 7d 7d  T a=11}.} {0 {}}
2350: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
2360: 34 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  42 {.  execsql {
2370: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32  SELECT * FROM t2
2380: 7d 0a 7d 20 7b 31 31 20 32 20 33 7d 0a 64 6f 5f  }.} {11 2 3}.do_
2390: 74 65 73 74 20 61 75 74 68 2d 31 2e 34 33 20 7b  test auth-1.43 {
23a0: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
23b0: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
23c0: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66  3 arg4} {.    if
23d0: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
23e0: 5f 55 50 44 41 54 45 22 20 26 26 20 24 61 72 67  _UPDATE" && $arg
23f0: 31 3d 3d 22 74 32 22 20 26 26 20 24 61 72 67 32  1=="t2" && $arg2
2400: 3d 3d 22 62 22 7d 20 7b 0a 20 20 20 20 20 20 72  =="b"} {.      r
2410: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e  eturn SQLITE_DEN
2420: 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  Y.    }.    retu
2430: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
2440: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 55 50 44  .  catchsql {UPD
2450: 41 54 45 20 74 32 20 53 45 54 20 62 3d 32 32 2c  ATE t2 SET b=22,
2460: 20 63 3d 33 33 7d 0a 7d 20 7b 31 20 7b 6e 6f 74   c=33}.} {1 {not
2470: 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f   authorized}}.do
2480: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 34 34 20  _test auth-1.44 
2490: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
24a0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d 0a 7d  ECT * FROM t2}.}
24b0: 20 7b 31 31 20 32 20 33 7d 0a 64 6f 5f 74 65 73   {11 2 3}.do_tes
24c0: 74 20 61 75 74 68 2d 31 2e 34 35 20 7b 0a 20 20  t auth-1.45 {.  
24d0: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
24e0: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
24f0: 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg4} {.    if {$
2500: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 55 50  code=="SQLITE_UP
2510: 44 41 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d  DATE" && $arg1==
2520: 22 74 32 22 20 26 26 20 24 61 72 67 32 3d 3d 22  "t2" && $arg2=="
2530: 62 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75  b"} {.      retu
2540: 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45  rn SQLITE_IGNORE
2550: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
2560: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
2570: 20 20 63 61 74 63 68 73 71 6c 20 7b 55 50 44 41    catchsql {UPDA
2580: 54 45 20 74 32 20 53 45 54 20 62 3d 32 32 2c 20  TE t2 SET b=22, 
2590: 63 3d 33 33 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  c=33}.} {0 {}}.d
25a0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 34 36  o_test auth-1.46
25b0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
25c0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d 0a  LECT * FROM t2}.
25d0: 7d 20 7b 31 31 20 32 20 33 33 7d 0a 0a 64 6f 5f  } {11 2 33}..do_
25e0: 74 65 73 74 20 61 75 74 68 2d 31 2e 34 37 20 7b  test auth-1.47 {
25f0: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
2600: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
2610: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66  3 arg4} {.    if
2620: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
2630: 5f 44 45 4c 45 54 45 22 20 26 26 20 24 61 72 67  _DELETE" && $arg
2640: 31 3d 3d 22 74 32 22 7d 20 7b 0a 20 20 20 20 20  1=="t2"} {.     
2650: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44   return SQLITE_D
2660: 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  ENY.    }.    re
2670: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
2680: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44   }.  catchsql {D
2690: 45 4c 45 54 45 20 46 52 4f 4d 20 74 32 20 57 48  ELETE FROM t2 WH
26a0: 45 52 45 20 61 3d 31 31 7d 0a 7d 20 7b 31 20 7b  ERE a=11}.} {1 {
26b0: 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d  not authorized}}
26c0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
26d0: 34 38 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  48 {.  execsql {
26e0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32  SELECT * FROM t2
26f0: 7d 0a 7d 20 7b 31 31 20 32 20 33 33 7d 0a 64 6f  }.} {11 2 33}.do
2700: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 34 39 20  _test auth-1.49 
2710: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
2720: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
2730: 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69  g3 arg4} {.    i
2740: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
2750: 45 5f 44 45 4c 45 54 45 22 20 26 26 20 24 61 72  E_DELETE" && $ar
2760: 67 31 3d 3d 22 74 32 22 7d 20 7b 0a 20 20 20 20  g1=="t2"} {.    
2770: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
2780: 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20  IGNORE.    }.   
2790: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
27a0: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
27b0: 20 7b 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 32   {DELETE FROM t2
27c0: 20 57 48 45 52 45 20 61 3d 31 31 7d 0a 7d 20 7b   WHERE a=11}.} {
27d0: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  0 {}}.do_test au
27e0: 74 68 2d 31 2e 35 30 20 7b 0a 20 20 65 78 65 63  th-1.50 {.  exec
27f0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52  sql {SELECT * FR
2800: 4f 4d 20 74 32 7d 0a 7d 20 7b 31 31 20 32 20 33  OM t2}.} {11 2 3
2810: 33 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  3}..do_test auth
2820: 2d 31 2e 35 31 20 7b 0a 20 20 70 72 6f 63 20 61  -1.51 {.  proc a
2830: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
2840: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
2850: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
2860: 22 53 51 4c 49 54 45 5f 53 45 4c 45 43 54 22 7d  "SQLITE_SELECT"}
2870: 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   {.      return 
2880: 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20  SQLITE_DENY.    
2890: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
28a0: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
28b0: 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20  chsql {SELECT * 
28c0: 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31 20 7b 6e  FROM t2}.} {1 {n
28d0: 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a  ot authorized}}.
28e0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 35  do_test auth-1.5
28f0: 32 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  2 {.  proc auth 
2900: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
2910: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
2920: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
2930: 49 54 45 5f 53 45 4c 45 43 54 22 7d 20 7b 0a 20  ITE_SELECT"} {. 
2940: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
2950: 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a  TE_IGNORE.    }.
2960: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
2970: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
2980: 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52  sql {SELECT * FR
2990: 4f 4d 20 74 32 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a  OM t2}.} {0 {}}.
29a0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 35  do_test auth-1.5
29b0: 33 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  3 {.  proc auth 
29c0: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
29d0: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
29e0: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
29f0: 49 54 45 5f 53 45 4c 45 43 54 22 7d 20 7b 0a 20  ITE_SELECT"} {. 
2a00: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
2a10: 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20  TE_OK.    }.    
2a20: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
2a30: 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20  .  }.  catchsql 
2a40: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
2a50: 32 7d 0a 7d 20 7b 30 20 7b 31 31 20 32 20 33 33  2}.} {0 {11 2 33
2a60: 7d 7d 0a 0a 23 20 55 70 64 61 74 65 20 66 6f 72  }}..# Update for
2a70: 20 76 65 72 73 69 6f 6e 20 33 3a 20 54 68 65 72   version 3: Ther
2a80: 65 20 75 73 65 64 20 74 6f 20 62 65 20 61 20 68  e used to be a h
2a90: 61 6e 64 66 75 6c 20 6f 66 20 74 65 73 74 20 68  andful of test h
2aa0: 65 72 65 20 74 68 61 74 0a 23 20 74 65 73 74 65  ere that.# teste
2ab0: 64 20 74 68 65 20 61 75 74 68 6f 72 69 73 61 74  d the authorisat
2ac0: 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 77 69 74  ion callback wit
2ad0: 68 20 74 68 65 20 43 4f 50 59 20 63 6f 6d 6d 61  h the COPY comma
2ae0: 6e 64 2e 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  nd. The followin
2af0: 67 0a 23 20 74 65 73 74 20 6d 61 6b 65 73 20 74  g.# test makes t
2b00: 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65  he same database
2b10: 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e 73 20 61   modifications a
2b20: 73 20 74 68 65 79 20 75 73 65 64 20 74 6f 2e 0a  s they used to..
2b30: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 35  do_test auth-1.5
2b40: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 49  4 {.  execsql {I
2b50: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41  NSERT INTO t2 VA
2b60: 4c 55 45 53 28 37 2c 20 38 2c 20 39 29 3b 7d 0a  LUES(7, 8, 9);}.
2b70: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  } {}.do_test aut
2b80: 68 2d 31 2e 35 35 20 7b 0a 20 20 65 78 65 63 73  h-1.55 {.  execs
2b90: 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f  ql {SELECT * FRO
2ba0: 4d 20 74 32 7d 0a 7d 20 7b 31 31 20 32 20 33 33  M t2}.} {11 2 33
2bb0: 20 37 20 38 20 39 7d 0a 0a 64 6f 5f 74 65 73 74   7 8 9}..do_test
2bc0: 20 61 75 74 68 2d 31 2e 36 33 20 7b 0a 20 20 70   auth-1.63 {.  p
2bd0: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
2be0: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
2bf0: 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g4} {.    if {$c
2c00: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c  ode=="SQLITE_DEL
2c10: 45 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d 22  ETE" && $arg1=="
2c20: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 7d 20  sqlite_master"} 
2c30: 7b 0a 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  {.       return 
2c40: 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20  SQLITE_DENY.    
2c50: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
2c60: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
2c70: 63 68 73 71 6c 20 7b 44 52 4f 50 20 54 41 42 4c  chsql {DROP TABL
2c80: 45 20 74 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20  E t2}.} {1 {not 
2c90: 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f  authorized}}.do_
2ca0: 74 65 73 74 20 61 75 74 68 2d 31 2e 36 34 20 7b  test auth-1.64 {
2cb0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
2cc0: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
2cd0: 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74  ite_master}.} {t
2ce0: 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  2}.do_test auth-
2cf0: 31 2e 36 35 20 7b 0a 20 20 70 72 6f 63 20 61 75  1.65 {.  proc au
2d00: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
2d10: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
2d20: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
2d30: 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 22 20 26  SQLITE_DELETE" &
2d40: 26 20 24 61 72 67 31 3d 3d 22 74 32 22 7d 20 7b  & $arg1=="t2"} {
2d50: 0a 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  .       return S
2d60: 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d  QLITE_DENY.    }
2d70: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
2d80: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
2d90: 68 73 71 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45  hsql {DROP TABLE
2da0: 20 74 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61   t2}.} {1 {not a
2db0: 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74  uthorized}}.do_t
2dc0: 65 73 74 20 61 75 74 68 2d 31 2e 36 36 20 7b 0a  est auth-1.66 {.
2dd0: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
2de0: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
2df0: 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32  te_master}.} {t2
2e00: 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20 74 65 6d  }..ifcapable tem
2e10: 70 64 62 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  pdb {.  do_test 
2e20: 61 75 74 68 2d 31 2e 36 37 20 7b 0a 20 20 20 20  auth-1.67 {.    
2e30: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
2e40: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
2e50: 72 67 34 7d 20 7b 0a 20 20 20 20 20 20 69 66 20  rg4} {.      if 
2e60: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
2e70: 44 45 4c 45 54 45 22 20 26 26 20 24 61 72 67 31  DELETE" && $arg1
2e80: 3d 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  =="sqlite_temp_m
2e90: 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20  aster"} {.      
2ea0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
2eb0: 5f 44 45 4e 59 0a 20 20 20 20 20 20 7d 0a 20 20  _DENY.      }.  
2ec0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
2ed0: 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63  E_OK.    }.    c
2ee0: 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54 41  atchsql {DROP TA
2ef0: 42 4c 45 20 74 31 7d 0a 20 20 7d 20 7b 31 20 7b  BLE t1}.  } {1 {
2f00: 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d  not authorized}}
2f10: 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  .  do_test auth-
2f20: 31 2e 36 38 20 7b 0a 20 20 20 20 65 78 65 63 73  1.68 {.    execs
2f30: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
2f40: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70  FROM sqlite_temp
2f50: 5f 6d 61 73 74 65 72 7d 0a 20 20 7d 20 7b 74 31  _master}.  } {t1
2f60: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68  }.  do_test auth
2f70: 2d 31 2e 36 39 20 7b 0a 20 20 20 20 70 72 6f 63  -1.69 {.    proc
2f80: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
2f90: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
2fa0: 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f   {.      if {$co
2fb0: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45  de=="SQLITE_DELE
2fc0: 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d 22 74  TE" && $arg1=="t
2fd0: 31 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 72  1"} {.         r
2fe0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e  eturn SQLITE_DEN
2ff0: 59 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  Y.      }.      
3000: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
3010: 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 74 63 68  .    }.    catch
3020: 73 71 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45 20  sql {DROP TABLE 
3030: 74 31 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f 74 20  t1}.  } {1 {not 
3040: 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 20 20 64  authorized}}.  d
3050: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 37 30  o_test auth-1.70
3060: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
3070: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
3080: 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73   sqlite_temp_mas
3090: 74 65 72 7d 0a 20 20 7d 20 7b 74 31 7d 0a 7d 0a  ter}.  } {t1}.}.
30a0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
30b0: 37 31 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  71 {.  proc auth
30c0: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
30d0: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
30e0: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
30f0: 4c 49 54 45 5f 44 45 4c 45 54 45 22 20 26 26 20  LITE_DELETE" && 
3100: 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 6d  $arg1=="sqlite_m
3110: 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20  aster"} {.      
3120: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49   return SQLITE_I
3130: 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20  GNORE.    }.    
3140: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
3150: 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20  .  }.  catchsql 
3160: 7b 44 52 4f 50 20 54 41 42 4c 45 20 74 32 7d 0a  {DROP TABLE t2}.
3170: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
3180: 20 61 75 74 68 2d 31 2e 37 32 20 7b 0a 20 20 65   auth-1.72 {.  e
3190: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
31a0: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
31b0: 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a 64  master}.} {t2}.d
31c0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 37 33  o_test auth-1.73
31d0: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
31e0: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
31f0: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
3200: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
3210: 54 45 5f 44 45 4c 45 54 45 22 20 26 26 20 24 61  TE_DELETE" && $a
3220: 72 67 31 3d 3d 22 74 32 22 7d 20 7b 0a 20 20 20  rg1=="t2"} {.   
3230: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
3240: 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20  E_IGNORE.    }. 
3250: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
3260: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
3270: 71 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45 20 74  ql {DROP TABLE t
3280: 32 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74  2}.} {0 {}}.do_t
3290: 65 73 74 20 61 75 74 68 2d 31 2e 37 34 20 7b 0a  est auth-1.74 {.
32a0: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
32b0: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
32c0: 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32  te_master}.} {t2
32d0: 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20 74 65 6d  }..ifcapable tem
32e0: 70 64 62 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  pdb {.  do_test 
32f0: 61 75 74 68 2d 31 2e 37 35 20 7b 0a 20 20 20 20  auth-1.75 {.    
3300: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
3310: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
3320: 72 67 34 7d 20 7b 0a 20 20 20 20 20 20 69 66 20  rg4} {.      if 
3330: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
3340: 44 45 4c 45 54 45 22 20 26 26 20 24 61 72 67 31  DELETE" && $arg1
3350: 3d 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  =="sqlite_temp_m
3360: 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20  aster"} {.      
3370: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
3380: 5f 49 47 4e 4f 52 45 0a 20 20 20 20 20 20 7d 0a  _IGNORE.      }.
3390: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
33a0: 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20  ITE_OK.    }.   
33b0: 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20   catchsql {DROP 
33c0: 54 41 42 4c 45 20 74 31 7d 0a 20 20 7d 20 7b 30  TABLE t1}.  } {0
33d0: 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61   {}}.  do_test a
33e0: 75 74 68 2d 31 2e 37 36 20 7b 0a 20 20 20 20 65  uth-1.76 {.    e
33f0: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
3400: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
3410: 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 20 20 7d  temp_master}.  }
3420: 20 7b 74 31 7d 0a 20 20 64 6f 5f 74 65 73 74 20   {t1}.  do_test 
3430: 61 75 74 68 2d 31 2e 37 37 20 7b 0a 20 20 20 20  auth-1.77 {.    
3440: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
3450: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
3460: 72 67 34 7d 20 7b 0a 20 20 20 20 20 20 69 66 20  rg4} {.      if 
3470: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
3480: 44 45 4c 45 54 45 22 20 26 26 20 24 61 72 67 31  DELETE" && $arg1
3490: 3d 3d 22 74 31 22 7d 20 7b 0a 20 20 20 20 20 20  =="t1"} {.      
34a0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
34b0: 5f 49 47 4e 4f 52 45 0a 20 20 20 20 20 20 7d 0a  _IGNORE.      }.
34c0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
34d0: 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20  ITE_OK.    }.   
34e0: 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20   catchsql {DROP 
34f0: 54 41 42 4c 45 20 74 31 7d 0a 20 20 7d 20 7b 30  TABLE t1}.  } {0
3500: 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61   {}}.  do_test a
3510: 75 74 68 2d 31 2e 37 38 20 7b 0a 20 20 20 20 65  uth-1.78 {.    e
3520: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
3530: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
3540: 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 20 20 7d  temp_master}.  }
3550: 20 7b 74 31 7d 0a 7d 0a 0a 23 20 54 65 73 74 20   {t1}.}..# Test 
3560: 63 61 73 65 73 20 61 75 74 68 2d 31 2e 37 39 20  cases auth-1.79 
3570: 74 6f 20 61 75 74 68 2d 31 2e 31 32 34 20 74 65  to auth-1.124 te
3580: 73 74 20 63 72 65 61 74 69 6e 67 20 61 6e 64 20  st creating and 
3590: 64 72 6f 70 70 69 6e 67 20 76 69 65 77 73 2e 0a  dropping views..
35a0: 23 20 4f 6d 69 74 20 74 68 65 73 65 20 69 66 20  # Omit these if 
35b0: 74 68 65 20 6c 69 62 72 61 72 79 20 77 61 73 20  the library was 
35c0: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 76 69  compiled with vi
35d0: 65 77 73 20 6f 6d 69 74 74 65 64 2e 0a 69 66 63  ews omitted..ifc
35e0: 61 70 61 62 6c 65 20 76 69 65 77 20 7b 0a 64 6f  apable view {.do
35f0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 37 39 20  _test auth-1.79 
3600: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
3610: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
3620: 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69  g3 arg4} {.    i
3630: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
3640: 45 5f 43 52 45 41 54 45 5f 56 49 45 57 22 7d 20  E_CREATE_VIEW"} 
3650: 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75  {.      set ::au
3660: 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72  thargs [list $ar
3670: 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24  g1 $arg2 $arg3 $
3680: 61 72 67 34 5d 20 0a 20 20 20 20 20 20 72 65 74  arg4] .      ret
3690: 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a  urn SQLITE_DENY.
36a0: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
36b0: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
36c0: 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54   catchsql {CREAT
36d0: 45 20 56 49 45 57 20 76 31 20 41 53 20 53 45 4c  E VIEW v1 AS SEL
36e0: 45 43 54 20 61 2b 31 2c 62 2b 31 20 46 52 4f 4d  ECT a+1,b+1 FROM
36f0: 20 74 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61   t2}.} {1 {not a
3700: 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74  uthorized}}.do_t
3710: 65 73 74 20 61 75 74 68 2d 31 2e 38 30 20 7b 0a  est auth-1.80 {.
3720: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
3730: 0a 7d 20 7b 76 31 20 7b 7d 20 6d 61 69 6e 20 7b  .} {v1 {} main {
3740: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
3750: 31 2e 38 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  1.81 {.  execsql
3760: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
3770: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
3780: 7d 0a 7d 20 7b 74 32 7d 0a 64 6f 5f 74 65 73 74  }.} {t2}.do_test
3790: 20 61 75 74 68 2d 31 2e 38 32 20 7b 0a 20 20 70   auth-1.82 {.  p
37a0: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
37b0: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
37c0: 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g4} {.    if {$c
37d0: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52 45  ode=="SQLITE_CRE
37e0: 41 54 45 5f 56 49 45 57 22 7d 20 7b 0a 20 20 20  ATE_VIEW"} {.   
37f0: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
3800: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
3810: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
3820: 20 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53   .      return S
3830: 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20  QLITE_IGNORE.   
3840: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
3850: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
3860: 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45 20 56  tchsql {CREATE V
3870: 49 45 57 20 76 31 20 41 53 20 53 45 4c 45 43 54  IEW v1 AS SELECT
3880: 20 61 2b 31 2c 62 2b 31 20 46 52 4f 4d 20 74 32   a+1,b+1 FROM t2
3890: 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  }.} {0 {}}.do_te
38a0: 73 74 20 61 75 74 68 2d 31 2e 38 33 20 7b 0a 20  st auth-1.83 {. 
38b0: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a   set ::authargs.
38c0: 7d 20 7b 76 31 20 7b 7d 20 6d 61 69 6e 20 7b 7d  } {v1 {} main {}
38d0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
38e0: 2e 38 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .84 {.  execsql 
38f0: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
3900: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d  M sqlite_master}
3910: 0a 7d 20 7b 74 32 7d 0a 0a 69 66 63 61 70 61 62  .} {t2}..ifcapab
3920: 6c 65 20 74 65 6d 70 64 62 20 7b 0a 20 20 64 6f  le tempdb {.  do
3930: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 38 35 20  _test auth-1.85 
3940: 7b 0a 20 20 20 20 70 72 6f 63 20 61 75 74 68 20  {.    proc auth 
3950: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
3960: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
3970: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
3980: 51 4c 49 54 45 5f 43 52 45 41 54 45 5f 54 45 4d  QLITE_CREATE_TEM
3990: 50 5f 56 49 45 57 22 7d 20 7b 0a 20 20 20 20 20  P_VIEW"} {.     
39a0: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
39b0: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
39c0: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
39d0: 20 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e   .        return
39e0: 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20   SQLITE_DENY.   
39f0: 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72     }.      retur
3a00: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20  n SQLITE_OK.    
3a10: 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b  }.    catchsql {
3a20: 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59  CREATE TEMPORARY
3a30: 20 56 49 45 57 20 76 31 20 41 53 20 53 45 4c 45   VIEW v1 AS SELE
3a40: 43 54 20 61 2b 31 2c 62 2b 31 20 46 52 4f 4d 20  CT a+1,b+1 FROM 
3a50: 74 32 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f 74 20  t2}.  } {1 {not 
3a60: 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 20 20 64  authorized}}.  d
3a70: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 38 36  o_test auth-1.86
3a80: 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a 61 75 74   {.    set ::aut
3a90: 68 61 72 67 73 0a 20 20 7d 20 7b 76 31 20 7b 7d  hargs.  } {v1 {}
3aa0: 20 74 65 6d 70 20 7b 7d 7d 0a 20 20 64 6f 5f 74   temp {}}.  do_t
3ab0: 65 73 74 20 61 75 74 68 2d 31 2e 38 37 20 7b 0a  est auth-1.87 {.
3ac0: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c      execsql {SEL
3ad0: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
3ae0: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
3af0: 7d 0a 20 20 7d 20 7b 74 31 7d 0a 20 20 64 6f 5f  }.  } {t1}.  do_
3b00: 74 65 73 74 20 61 75 74 68 2d 31 2e 38 38 20 7b  test auth-1.88 {
3b10: 0a 20 20 20 20 70 72 6f 63 20 61 75 74 68 20 7b  .    proc auth {
3b20: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
3b30: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
3b40: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
3b50: 4c 49 54 45 5f 43 52 45 41 54 45 5f 54 45 4d 50  LITE_CREATE_TEMP
3b60: 5f 56 49 45 57 22 7d 20 7b 0a 20 20 20 20 20 20  _VIEW"} {.      
3b70: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
3b80: 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72   [list $arg1 $ar
3b90: 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 20  g2 $arg3 $arg4] 
3ba0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
3bb0: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20  SQLITE_IGNORE.  
3bc0: 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75      }.      retu
3bd0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20  rn SQLITE_OK.   
3be0: 20 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20   }.    catchsql 
3bf0: 7b 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52  {CREATE TEMPORAR
3c00: 59 20 56 49 45 57 20 76 31 20 41 53 20 53 45 4c  Y VIEW v1 AS SEL
3c10: 45 43 54 20 61 2b 31 2c 62 2b 31 20 46 52 4f 4d  ECT a+1,b+1 FROM
3c20: 20 74 32 7d 0a 20 20 7d 20 7b 30 20 7b 7d 7d 0a   t2}.  } {0 {}}.
3c30: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31    do_test auth-1
3c40: 2e 38 39 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a  .89 {.    set ::
3c50: 61 75 74 68 61 72 67 73 0a 20 20 7d 20 7b 76 31  authargs.  } {v1
3c60: 20 7b 7d 20 74 65 6d 70 20 7b 7d 7d 0a 20 20 64   {} temp {}}.  d
3c70: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 39 30  o_test auth-1.90
3c80: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
3c90: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
3ca0: 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73   sqlite_temp_mas
3cb0: 74 65 72 7d 0a 20 20 7d 20 7b 74 31 7d 0a 7d 0a  ter}.  } {t1}.}.
3cc0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
3cd0: 39 31 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  91 {.  proc auth
3ce0: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
3cf0: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
3d00: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
3d10: 4c 49 54 45 5f 49 4e 53 45 52 54 22 20 26 26 20  LITE_INSERT" && 
3d20: 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 6d  $arg1=="sqlite_m
3d30: 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20  aster"} {.      
3d40: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45  return SQLITE_DE
3d50: 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  NY.    }.    ret
3d60: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
3d70: 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52  }.  catchsql {CR
3d80: 45 41 54 45 20 56 49 45 57 20 76 31 20 41 53 20  EATE VIEW v1 AS 
3d90: 53 45 4c 45 43 54 20 61 2b 31 2c 62 2b 31 20 46  SELECT a+1,b+1 F
3da0: 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31 20 7b 6e 6f  ROM t2}.} {1 {no
3db0: 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64  t authorized}}.d
3dc0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 39 32  o_test auth-1.92
3dd0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
3de0: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73  LECT name FROM s
3df0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20  qlite_master}.} 
3e00: 7b 74 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  {t2}.do_test aut
3e10: 68 2d 31 2e 39 33 20 7b 0a 20 20 70 72 6f 63 20  h-1.93 {.  proc 
3e20: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
3e30: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
3e40: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
3e50: 3d 22 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 22  ="SQLITE_INSERT"
3e60: 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69   && $arg1=="sqli
3e70: 74 65 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20  te_master"} {.  
3e80: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
3e90: 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20  E_IGNORE.    }. 
3ea0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
3eb0: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
3ec0: 71 6c 20 7b 43 52 45 41 54 45 20 56 49 45 57 20  ql {CREATE VIEW 
3ed0: 76 31 20 41 53 20 53 45 4c 45 43 54 20 61 2b 31  v1 AS SELECT a+1
3ee0: 2c 62 2b 31 20 46 52 4f 4d 20 74 32 7d 0a 7d 20  ,b+1 FROM t2}.} 
3ef0: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  {0 {}}.do_test a
3f00: 75 74 68 2d 31 2e 39 34 20 7b 0a 20 20 65 78 65  uth-1.94 {.  exe
3f10: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d  csql {SELECT nam
3f20: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  e FROM sqlite_ma
3f30: 73 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a 0a 69 66  ster}.} {t2}..if
3f40: 63 61 70 61 62 6c 65 20 74 65 6d 70 64 62 20 7b  capable tempdb {
3f50: 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  .  do_test auth-
3f60: 31 2e 39 35 20 7b 0a 20 20 20 20 70 72 6f 63 20  1.95 {.    proc 
3f70: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
3f80: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
3f90: 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64  {.      if {$cod
3fa0: 65 3d 3d 22 53 51 4c 49 54 45 5f 49 4e 53 45 52  e=="SQLITE_INSER
3fb0: 54 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71  T" && $arg1=="sq
3fc0: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
3fd0: 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 72 65 74  "} {.        ret
3fe0: 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a  urn SQLITE_DENY.
3ff0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65        }.      re
4000: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
4010: 20 20 20 7d 0a 20 20 20 20 63 61 74 63 68 73 71     }.    catchsq
4020: 6c 20 7b 43 52 45 41 54 45 20 54 45 4d 50 4f 52  l {CREATE TEMPOR
4030: 41 52 59 20 56 49 45 57 20 76 31 20 41 53 20 53  ARY VIEW v1 AS S
4040: 45 4c 45 43 54 20 61 2b 31 2c 62 2b 31 20 46 52  ELECT a+1,b+1 FR
4050: 4f 4d 20 74 32 7d 0a 20 20 7d 20 7b 31 20 7b 6e  OM t2}.  } {1 {n
4060: 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a  ot authorized}}.
4070: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31    do_test auth-1
4080: 2e 39 36 20 7b 0a 20 20 20 20 65 78 65 63 73 71  .96 {.    execsq
4090: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
40a0: 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f  ROM sqlite_temp_
40b0: 6d 61 73 74 65 72 7d 0a 20 20 7d 20 7b 74 31 7d  master}.  } {t1}
40c0: 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  .  do_test auth-
40d0: 31 2e 39 37 20 7b 0a 20 20 20 20 70 72 6f 63 20  1.97 {.    proc 
40e0: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
40f0: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
4100: 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64  {.      if {$cod
4110: 65 3d 3d 22 53 51 4c 49 54 45 5f 49 4e 53 45 52  e=="SQLITE_INSER
4120: 54 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71  T" && $arg1=="sq
4130: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
4140: 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 72 65 74  "} {.        ret
4150: 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52  urn SQLITE_IGNOR
4160: 45 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  E.      }.      
4170: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
4180: 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 74 63 68  .    }.    catch
4190: 73 71 6c 20 7b 43 52 45 41 54 45 20 54 45 4d 50  sql {CREATE TEMP
41a0: 4f 52 41 52 59 20 56 49 45 57 20 76 31 20 41 53  ORARY VIEW v1 AS
41b0: 20 53 45 4c 45 43 54 20 61 2b 31 2c 62 2b 31 20   SELECT a+1,b+1 
41c0: 46 52 4f 4d 20 74 32 7d 0a 20 20 7d 20 7b 30 20  FROM t2}.  } {0 
41d0: 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75  {}}.  do_test au
41e0: 74 68 2d 31 2e 39 38 20 7b 0a 20 20 20 20 65 78  th-1.98 {.    ex
41f0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61  ecsql {SELECT na
4200: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74  me FROM sqlite_t
4210: 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 20 20 7d 20  emp_master}.  } 
4220: 7b 74 31 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20  {t1}.}..do_test 
4230: 61 75 74 68 2d 31 2e 39 39 20 7b 0a 20 20 70 72  auth-1.99 {.  pr
4240: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
4250: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
4260: 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f  4} {.    if {$co
4270: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45  de=="SQLITE_DELE
4280: 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73  TE" && $arg1=="s
4290: 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 7d 20 7b  qlite_master"} {
42a0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
42b0: 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a  LITE_DENY.    }.
42c0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
42d0: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
42e0: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
42f0: 20 56 49 45 57 20 76 32 20 41 53 20 53 45 4c 45   VIEW v2 AS SELE
4300: 43 54 20 61 2b 31 2c 62 2b 31 20 46 52 4f 4d 20  CT a+1,b+1 FROM 
4310: 74 32 3b 0a 20 20 20 20 44 52 4f 50 20 56 49 45  t2;.    DROP VIE
4320: 57 20 76 32 0a 20 20 7d 0a 7d 20 7b 31 20 7b 6e  W v2.  }.} {1 {n
4330: 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a  ot authorized}}.
4340: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
4350: 30 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  00 {.  execsql {
4360: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
4370: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a   sqlite_master}.
4380: 7d 20 7b 74 32 20 76 32 7d 0a 64 6f 5f 74 65 73  } {t2 v2}.do_tes
4390: 74 20 61 75 74 68 2d 31 2e 31 30 31 20 7b 0a 20  t auth-1.101 {. 
43a0: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
43b0: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
43c0: 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg4} {.    if {
43d0: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44  $code=="SQLITE_D
43e0: 52 4f 50 5f 56 49 45 57 22 7d 20 7b 0a 20 20 20  ROP_VIEW"} {.   
43f0: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
4400: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
4410: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
4420: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
4430: 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a  LITE_DENY.    }.
4440: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
4450: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
4460: 73 71 6c 20 7b 44 52 4f 50 20 56 49 45 57 20 76  sql {DROP VIEW v
4470: 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74  2}.} {1 {not aut
4480: 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73  horized}}.do_tes
4490: 74 20 61 75 74 68 2d 31 2e 31 30 32 20 7b 0a 20  t auth-1.102 {. 
44a0: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a   set ::authargs.
44b0: 7d 20 7b 76 32 20 7b 7d 20 6d 61 69 6e 20 7b 7d  } {v2 {} main {}
44c0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
44d0: 2e 31 30 33 20 7b 0a 20 20 65 78 65 63 73 71 6c  .103 {.  execsql
44e0: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
44f0: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
4500: 7d 0a 7d 20 7b 74 32 20 76 32 7d 0a 64 6f 5f 74  }.} {t2 v2}.do_t
4510: 65 73 74 20 61 75 74 68 2d 31 2e 31 30 34 20 7b  est auth-1.104 {
4520: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
4530: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
4540: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66  3 arg4} {.    if
4550: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
4560: 5f 44 45 4c 45 54 45 22 20 26 26 20 24 61 72 67  _DELETE" && $arg
4570: 31 3d 3d 22 73 71 6c 69 74 65 5f 6d 61 73 74 65  1=="sqlite_maste
4580: 72 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75  r"} {.      retu
4590: 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45  rn SQLITE_IGNORE
45a0: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
45b0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
45c0: 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50    catchsql {DROP
45d0: 20 56 49 45 57 20 76 32 7d 0a 7d 20 7b 30 20 7b   VIEW v2}.} {0 {
45e0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
45f0: 31 2e 31 30 35 20 7b 0a 20 20 65 78 65 63 73 71  1.105 {.  execsq
4600: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
4610: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
4620: 72 7d 0a 7d 20 7b 74 32 20 76 32 7d 0a 64 6f 5f  r}.} {t2 v2}.do_
4630: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 30 36 20  test auth-1.106 
4640: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
4650: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
4660: 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69  g3 arg4} {.    i
4670: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
4680: 45 5f 44 52 4f 50 5f 56 49 45 57 22 7d 20 7b 0a  E_DROP_VIEW"} {.
4690: 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68        set ::auth
46a0: 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31  args [list $arg1
46b0: 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72   $arg2 $arg3 $ar
46c0: 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  g4].      return
46d0: 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20   SQLITE_IGNORE. 
46e0: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
46f0: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
4700: 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 56  catchsql {DROP V
4710: 49 45 57 20 76 32 7d 0a 7d 20 7b 30 20 7b 7d 7d  IEW v2}.} {0 {}}
4720: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
4730: 31 30 37 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75  107 {.  set ::au
4740: 74 68 61 72 67 73 0a 7d 20 7b 76 32 20 7b 7d 20  thargs.} {v2 {} 
4750: 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  main {}}.do_test
4760: 20 61 75 74 68 2d 31 2e 31 30 38 20 7b 0a 20 20   auth-1.108 {.  
4770: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
4780: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
4790: 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 20 76  _master}.} {t2 v
47a0: 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  2}.do_test auth-
47b0: 31 2e 31 30 39 20 7b 0a 20 20 70 72 6f 63 20 61  1.109 {.  proc a
47c0: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
47d0: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
47e0: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
47f0: 22 53 51 4c 49 54 45 5f 44 52 4f 50 5f 56 49 45  "SQLITE_DROP_VIE
4800: 57 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20  W"} {.      set 
4810: 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74  ::authargs [list
4820: 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72   $arg1 $arg2 $ar
4830: 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20  g3 $arg4].      
4840: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
4850: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
4860: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
4870: 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50    catchsql {DROP
4880: 20 56 49 45 57 20 76 32 7d 0a 7d 20 7b 30 20 7b   VIEW v2}.} {0 {
4890: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
48a0: 31 2e 31 31 30 20 7b 0a 20 20 73 65 74 20 3a 3a  1.110 {.  set ::
48b0: 61 75 74 68 61 72 67 73 0a 7d 20 7b 76 32 20 7b  authargs.} {v2 {
48c0: 7d 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65  } main {}}.do_te
48d0: 73 74 20 61 75 74 68 2d 31 2e 31 31 31 20 7b 0a  st auth-1.111 {.
48e0: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
48f0: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
4900: 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32  te_master}.} {t2
4910: 7d 0a 0a 0a 69 66 63 61 70 61 62 6c 65 20 74 65  }...ifcapable te
4920: 6d 70 64 62 20 7b 0a 20 20 64 6f 5f 74 65 73 74  mpdb {.  do_test
4930: 20 61 75 74 68 2d 31 2e 31 31 32 20 7b 0a 20 20   auth-1.112 {.  
4940: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
4950: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
4960: 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 20 20 69   arg4} {.      i
4970: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
4980: 45 5f 44 45 4c 45 54 45 22 20 26 26 20 24 61 72  E_DELETE" && $ar
4990: 67 31 3d 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70  g1=="sqlite_temp
49a0: 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20  _master"} {.    
49b0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
49c0: 45 5f 44 45 4e 59 0a 20 20 20 20 20 20 7d 0a 20  E_DENY.      }. 
49d0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
49e0: 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20  TE_OK.    }.    
49f0: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20  catchsql {.     
4a00: 20 43 52 45 41 54 45 20 54 45 4d 50 20 56 49 45   CREATE TEMP VIE
4a10: 57 20 76 31 20 41 53 20 53 45 4c 45 43 54 20 61  W v1 AS SELECT a
4a20: 2b 31 2c 62 2b 31 20 46 52 4f 4d 20 74 31 3b 0a  +1,b+1 FROM t1;.
4a30: 20 20 20 20 20 20 44 52 4f 50 20 56 49 45 57 20        DROP VIEW 
4a40: 76 31 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 20  v1.    }.  } {1 
4a50: 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d  {not authorized}
4a60: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68  }.  do_test auth
4a70: 2d 31 2e 31 31 33 20 7b 0a 20 20 20 20 65 78 65  -1.113 {.    exe
4a80: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d  csql {SELECT nam
4a90: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65  e FROM sqlite_te
4aa0: 6d 70 5f 6d 61 73 74 65 72 7d 0a 20 20 7d 20 7b  mp_master}.  } {
4ab0: 74 31 20 76 31 7d 0a 20 20 64 6f 5f 74 65 73 74  t1 v1}.  do_test
4ac0: 20 61 75 74 68 2d 31 2e 31 31 34 20 7b 0a 20 20   auth-1.114 {.  
4ad0: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
4ae0: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
4af0: 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 20 20 69   arg4} {.      i
4b00: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
4b10: 45 5f 44 52 4f 50 5f 54 45 4d 50 5f 56 49 45 57  E_DROP_TEMP_VIEW
4b20: 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74  "} {.        set
4b30: 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73   ::authargs [lis
4b40: 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61  t $arg1 $arg2 $a
4b50: 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20  rg3 $arg4].     
4b60: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
4b70: 5f 44 45 4e 59 0a 20 20 20 20 20 20 7d 0a 20 20  _DENY.      }.  
4b80: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
4b90: 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63  E_OK.    }.    c
4ba0: 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 56 49  atchsql {DROP VI
4bb0: 45 57 20 76 31 7d 0a 20 20 7d 20 7b 31 20 7b 6e  EW v1}.  } {1 {n
4bc0: 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a  ot authorized}}.
4bd0: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31    do_test auth-1
4be0: 2e 31 31 35 20 7b 0a 20 20 20 20 73 65 74 20 3a  .115 {.    set :
4bf0: 3a 61 75 74 68 61 72 67 73 0a 20 20 7d 20 7b 76  :authargs.  } {v
4c00: 31 20 7b 7d 20 74 65 6d 70 20 7b 7d 7d 0a 20 20  1 {} temp {}}.  
4c10: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
4c20: 31 36 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  16 {.    execsql
4c30: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
4c40: 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  OM sqlite_temp_m
4c50: 61 73 74 65 72 7d 0a 20 20 7d 20 7b 74 31 20 76  aster}.  } {t1 v
4c60: 31 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74  1}.  do_test aut
4c70: 68 2d 31 2e 31 31 37 20 7b 0a 20 20 20 20 70 72  h-1.117 {.    pr
4c80: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
4c90: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
4ca0: 34 7d 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24  4} {.      if {$
4cb0: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45  code=="SQLITE_DE
4cc0: 4c 45 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d  LETE" && $arg1==
4cd0: 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73  "sqlite_temp_mas
4ce0: 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 20 20  ter"} {.        
4cf0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47  return SQLITE_IG
4d00: 4e 4f 52 45 0a 20 20 20 20 20 20 7d 0a 20 20 20  NORE.      }.   
4d10: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
4d20: 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61  _OK.    }.    ca
4d30: 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 56 49 45  tchsql {DROP VIE
4d40: 57 20 76 31 7d 0a 20 20 7d 20 7b 30 20 7b 7d 7d  W v1}.  } {0 {}}
4d50: 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  .  do_test auth-
4d60: 31 2e 31 31 38 20 7b 0a 20 20 20 20 65 78 65 63  1.118 {.    exec
4d70: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
4d80: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d   FROM sqlite_tem
4d90: 70 5f 6d 61 73 74 65 72 7d 0a 20 20 7d 20 7b 74  p_master}.  } {t
4da0: 31 20 76 31 7d 0a 20 20 64 6f 5f 74 65 73 74 20  1 v1}.  do_test 
4db0: 61 75 74 68 2d 31 2e 31 31 39 20 7b 0a 20 20 20  auth-1.119 {.   
4dc0: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
4dd0: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
4de0: 61 72 67 34 7d 20 7b 0a 20 20 20 20 20 20 69 66  arg4} {.      if
4df0: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
4e00: 5f 44 52 4f 50 5f 54 45 4d 50 5f 56 49 45 57 22  _DROP_TEMP_VIEW"
4e10: 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20  } {.        set 
4e20: 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74  ::authargs [list
4e30: 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72   $arg1 $arg2 $ar
4e40: 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20  g3 $arg4].      
4e50: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
4e60: 49 47 4e 4f 52 45 0a 20 20 20 20 20 20 7d 0a 20  IGNORE.      }. 
4e70: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
4e80: 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20  TE_OK.    }.    
4e90: 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 56  catchsql {DROP V
4ea0: 49 45 57 20 76 31 7d 0a 20 20 7d 20 7b 30 20 7b  IEW v1}.  } {0 {
4eb0: 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74  }}.  do_test aut
4ec0: 68 2d 31 2e 31 32 30 20 7b 0a 20 20 20 20 73 65  h-1.120 {.    se
4ed0: 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 20 20 7d  t ::authargs.  }
4ee0: 20 7b 76 31 20 7b 7d 20 74 65 6d 70 20 7b 7d 7d   {v1 {} temp {}}
4ef0: 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  .  do_test auth-
4f00: 31 2e 31 32 31 20 7b 0a 20 20 20 20 65 78 65 63  1.121 {.    exec
4f10: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
4f20: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d   FROM sqlite_tem
4f30: 70 5f 6d 61 73 74 65 72 7d 0a 20 20 7d 20 7b 74  p_master}.  } {t
4f40: 31 20 76 31 7d 0a 20 20 64 6f 5f 74 65 73 74 20  1 v1}.  do_test 
4f50: 61 75 74 68 2d 31 2e 31 32 32 20 7b 0a 20 20 20  auth-1.122 {.   
4f60: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
4f70: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
4f80: 61 72 67 34 7d 20 7b 0a 20 20 20 20 20 20 69 66  arg4} {.      if
4f90: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
4fa0: 5f 44 52 4f 50 5f 54 45 4d 50 5f 56 49 45 57 22  _DROP_TEMP_VIEW"
4fb0: 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20  } {.        set 
4fc0: 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74  ::authargs [list
4fd0: 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72   $arg1 $arg2 $ar
4fe0: 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20  g3 $arg4].      
4ff0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
5000: 4f 4b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  OK.      }.     
5010: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
5020: 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 74 63  K.    }.    catc
5030: 68 73 71 6c 20 7b 44 52 4f 50 20 56 49 45 57 20  hsql {DROP VIEW 
5040: 76 31 7d 0a 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20  v1}.  } {0 {}}. 
5050: 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e   do_test auth-1.
5060: 31 32 33 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a  123 {.    set ::
5070: 61 75 74 68 61 72 67 73 0a 20 20 7d 20 7b 76 31  authargs.  } {v1
5080: 20 7b 7d 20 74 65 6d 70 20 7b 7d 7d 0a 20 20 64   {} temp {}}.  d
5090: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 32  o_test auth-1.12
50a0: 34 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  4 {.    execsql 
50b0: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
50c0: 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  M sqlite_temp_ma
50d0: 73 74 65 72 7d 0a 20 20 7d 20 7b 74 31 7d 0a 7d  ster}.  } {t1}.}
50e0: 0a 7d 20 3b 23 20 69 66 63 61 70 61 62 6c 65 20  .} ;# ifcapable 
50f0: 76 69 65 77 0a 0a 23 20 54 65 73 74 20 63 61 73  view..# Test cas
5100: 65 73 20 61 75 74 68 2d 31 2e 31 32 35 20 74 6f  es auth-1.125 to
5110: 20 61 75 74 68 2d 31 2e 31 37 36 20 74 65 73 74   auth-1.176 test
5120: 20 63 72 65 61 74 69 6e 67 20 61 6e 64 20 64 72   creating and dr
5130: 6f 70 70 69 6e 67 20 74 72 69 67 67 65 72 73 2e  opping triggers.
5140: 0a 23 20 4f 6d 69 74 20 74 68 65 73 65 20 69 66  .# Omit these if
5150: 20 74 68 65 20 6c 69 62 72 61 72 79 20 77 61 73   the library was
5160: 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 74   compiled with t
5170: 72 69 67 67 65 72 73 20 6f 6d 69 74 74 65 64 2e  riggers omitted.
5180: 0a 23 0a 69 66 63 61 70 61 62 6c 65 20 74 72 69  .#.ifcapable tri
5190: 67 67 65 72 26 26 74 65 6d 70 64 62 20 7b 0a 64  gger&&tempdb {.d
51a0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 32  o_test auth-1.12
51b0: 35 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  5 {.  proc auth 
51c0: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
51d0: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
51e0: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
51f0: 49 54 45 5f 43 52 45 41 54 45 5f 54 52 49 47 47  ITE_CREATE_TRIGG
5200: 45 52 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74  ER"} {.      set
5210: 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73   ::authargs [lis
5220: 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61  t $arg1 $arg2 $a
5230: 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20  rg3 $arg4].     
5240: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44   return SQLITE_D
5250: 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  ENY.    }.    re
5260: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
5270: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a   }.  catchsql {.
5280: 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47      CREATE TRIGG
5290: 45 52 20 72 32 20 44 45 4c 45 54 45 20 6f 6e 20  ER r2 DELETE on 
52a0: 74 32 20 42 45 47 49 4e 0a 20 20 20 20 20 20 20  t2 BEGIN.       
52b0: 20 53 45 4c 45 43 54 20 4e 55 4c 4c 3b 0a 20 20   SELECT NULL;.  
52c0: 20 20 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 31 20    END;.  }.} {1 
52d0: 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d  {not authorized}
52e0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
52f0: 2e 31 32 36 20 7b 0a 20 20 73 65 74 20 3a 3a 61  .126 {.  set ::a
5300: 75 74 68 61 72 67 73 0a 7d 20 7b 72 32 20 74 32  uthargs.} {r2 t2
5310: 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73   main {}}.do_tes
5320: 74 20 61 75 74 68 2d 31 2e 31 32 37 20 7b 0a 20  t auth-1.127 {. 
5330: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
5340: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
5350: 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 7d  e_master}.} {t2}
5360: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
5370: 31 32 38 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  128 {.  proc aut
5380: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
5390: 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20  2 arg3 arg4} {. 
53a0: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
53b0: 51 4c 49 54 45 5f 49 4e 53 45 52 54 22 20 26 26  QLITE_INSERT" &&
53c0: 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f   $arg1=="sqlite_
53d0: 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20  master"} {.     
53e0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44   return SQLITE_D
53f0: 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  ENY.    }.    re
5400: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
5410: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a   }.  catchsql {.
5420: 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47      CREATE TRIGG
5430: 45 52 20 72 32 20 44 45 4c 45 54 45 20 6f 6e 20  ER r2 DELETE on 
5440: 74 32 20 42 45 47 49 4e 0a 20 20 20 20 20 20 20  t2 BEGIN.       
5450: 20 53 45 4c 45 43 54 20 4e 55 4c 4c 3b 0a 20 20   SELECT NULL;.  
5460: 20 20 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 31 20    END;.  }.} {1 
5470: 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d  {not authorized}
5480: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
5490: 2e 31 32 39 20 7b 0a 20 20 65 78 65 63 73 71 6c  .129 {.  execsql
54a0: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
54b0: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
54c0: 7d 0a 7d 20 7b 74 32 7d 0a 64 6f 5f 74 65 73 74  }.} {t2}.do_test
54d0: 20 61 75 74 68 2d 31 2e 31 33 30 20 7b 0a 20 20   auth-1.130 {.  
54e0: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
54f0: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
5500: 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg4} {.    if {$
5510: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52  code=="SQLITE_CR
5520: 45 41 54 45 5f 54 52 49 47 47 45 52 22 7d 20 7b  EATE_TRIGGER"} {
5530: 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74  .      set ::aut
5540: 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67  hargs [list $arg
5550: 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61  1 $arg2 $arg3 $a
5560: 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72  rg4].      retur
5570: 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a  n SQLITE_IGNORE.
5580: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
5590: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
55a0: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
55b0: 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 72  CREATE TRIGGER r
55c0: 32 20 44 45 4c 45 54 45 20 6f 6e 20 74 32 20 42  2 DELETE on t2 B
55d0: 45 47 49 4e 0a 20 20 20 20 20 20 20 20 53 45 4c  EGIN.        SEL
55e0: 45 43 54 20 4e 55 4c 4c 3b 0a 20 20 20 20 45 4e  ECT NULL;.    EN
55f0: 44 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a  D;.  }.} {0 {}}.
5600: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
5610: 33 31 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74  31 {.  set ::aut
5620: 68 61 72 67 73 0a 7d 20 7b 72 32 20 74 32 20 6d  hargs.} {r2 t2 m
5630: 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20  ain {}}.do_test 
5640: 61 75 74 68 2d 31 2e 31 33 32 20 7b 0a 20 20 65  auth-1.132 {.  e
5650: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
5660: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
5670: 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a 64  master}.} {t2}.d
5680: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 33  o_test auth-1.13
5690: 33 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  3 {.  proc auth 
56a0: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
56b0: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
56c0: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
56d0: 49 54 45 5f 49 4e 53 45 52 54 22 20 26 26 20 24  ITE_INSERT" && $
56e0: 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 6d 61  arg1=="sqlite_ma
56f0: 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 72  ster"} {.      r
5700: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e  eturn SQLITE_IGN
5710: 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  ORE.    }.    re
5720: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
5730: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a   }.  catchsql {.
5740: 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47      CREATE TRIGG
5750: 45 52 20 72 32 20 44 45 4c 45 54 45 20 6f 6e 20  ER r2 DELETE on 
5760: 74 32 20 42 45 47 49 4e 0a 20 20 20 20 20 20 20  t2 BEGIN.       
5770: 20 53 45 4c 45 43 54 20 4e 55 4c 4c 3b 0a 20 20   SELECT NULL;.  
5780: 20 20 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 30 20    END;.  }.} {0 
5790: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
57a0: 2d 31 2e 31 33 34 20 7b 0a 20 20 65 78 65 63 73  -1.134 {.  execs
57b0: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
57c0: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
57d0: 65 72 7d 0a 7d 20 7b 74 32 7d 0a 64 6f 5f 74 65  er}.} {t2}.do_te
57e0: 73 74 20 61 75 74 68 2d 31 2e 31 33 35 20 7b 0a  st auth-1.135 {.
57f0: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
5800: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
5810: 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20   arg4} {.    if 
5820: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
5830: 43 52 45 41 54 45 5f 54 52 49 47 47 45 52 22 7d  CREATE_TRIGGER"}
5840: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61   {.      set ::a
5850: 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61  uthargs [list $a
5860: 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20  rg1 $arg2 $arg3 
5870: 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74  $arg4].      ret
5880: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
5890: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
58a0: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
58b0: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 43 52  atchsql {.    CR
58c0: 45 41 54 45 20 54 41 42 4c 45 20 74 78 28 69 64  EATE TABLE tx(id
58d0: 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 52  );.    CREATE TR
58e0: 49 47 47 45 52 20 72 32 20 41 46 54 45 52 20 49  IGGER r2 AFTER I
58f0: 4e 53 45 52 54 20 4f 4e 20 74 32 20 42 45 47 49  NSERT ON t2 BEGI
5900: 4e 0a 20 20 20 20 20 20 20 49 4e 53 45 52 54 20  N.       INSERT 
5910: 49 4e 54 4f 20 74 78 20 56 41 4c 55 45 53 28 4e  INTO tx VALUES(N
5920: 45 57 2e 72 6f 77 69 64 29 3b 0a 20 20 20 20 45  EW.rowid);.    E
5930: 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d  ND;.  }.} {0 {}}
5940: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
5950: 31 33 36 2e 31 20 7b 0a 20 20 73 65 74 20 3a 3a  136.1 {.  set ::
5960: 61 75 74 68 61 72 67 73 0a 7d 20 7b 72 32 20 74  authargs.} {r2 t
5970: 32 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65  2 main {}}.do_te
5980: 73 74 20 61 75 74 68 2d 31 2e 31 33 36 2e 32 20  st auth-1.136.2 
5990: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
59a0: 20 20 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52    SELECT name FR
59b0: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
59c0: 20 57 48 45 52 45 20 74 79 70 65 3d 27 74 72 69   WHERE type='tri
59d0: 67 67 65 72 27 0a 20 20 7d 0a 7d 20 7b 72 32 7d  gger'.  }.} {r2}
59e0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
59f0: 31 33 36 2e 33 20 7b 0a 20 20 70 72 6f 63 20 61  136.3 {.  proc a
5a00: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
5a10: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
5a20: 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 3a 3a 61  .    lappend ::a
5a30: 75 74 68 61 72 67 73 20 24 63 6f 64 65 20 24 61  uthargs $code $a
5a40: 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20  rg1 $arg2 $arg3 
5a50: 24 61 72 67 34 0a 20 20 20 20 72 65 74 75 72 6e  $arg4.    return
5a60: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
5a70: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
5a80: 7b 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  {}.  execsql {. 
5a90: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
5aa0: 32 20 56 41 4c 55 45 53 28 31 2c 32 2c 33 29 3b  2 VALUES(1,2,3);
5ab0: 0a 20 20 7d 0a 20 20 73 65 74 20 3a 3a 61 75 74  .  }.  set ::aut
5ac0: 68 61 72 67 73 20 0a 7d 20 7b 53 51 4c 49 54 45  hargs .} {SQLITE
5ad0: 5f 49 4e 53 45 52 54 20 74 32 20 7b 7d 20 6d 61  _INSERT t2 {} ma
5ae0: 69 6e 20 7b 7d 20 53 51 4c 49 54 45 5f 49 4e 53  in {} SQLITE_INS
5af0: 45 52 54 20 74 78 20 7b 7d 20 6d 61 69 6e 20 72  ERT tx {} main r
5b00: 32 20 53 51 4c 49 54 45 5f 52 45 41 44 20 74 32  2 SQLITE_READ t2
5b10: 20 52 4f 57 49 44 20 6d 61 69 6e 20 72 32 7d 0a   ROWID main r2}.
5b20: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
5b30: 33 36 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c  36.4 {.  execsql
5b40: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20   {.    SELECT * 
5b50: 46 52 4f 4d 20 74 78 3b 0a 20 20 7d 0a 7d 20 7b  FROM tx;.  }.} {
5b60: 33 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  3}.do_test auth-
5b70: 31 2e 31 33 37 20 7b 0a 20 20 65 78 65 63 73 71  1.137 {.  execsq
5b80: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
5b90: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
5ba0: 72 7d 0a 7d 20 7b 74 32 20 74 78 20 72 32 7d 0a  r}.} {t2 tx r2}.
5bb0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
5bc0: 33 38 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  38 {.  proc auth
5bd0: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
5be0: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
5bf0: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
5c00: 4c 49 54 45 5f 43 52 45 41 54 45 5f 54 45 4d 50  LITE_CREATE_TEMP
5c10: 5f 54 52 49 47 47 45 52 22 7d 20 7b 0a 20 20 20  _TRIGGER"} {.   
5c20: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
5c30: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
5c40: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
5c50: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
5c60: 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a  LITE_DENY.    }.
5c70: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
5c80: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
5c90: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
5ca0: 20 54 52 49 47 47 45 52 20 72 31 20 44 45 4c 45   TRIGGER r1 DELE
5cb0: 54 45 20 6f 6e 20 74 31 20 42 45 47 49 4e 0a 20  TE on t1 BEGIN. 
5cc0: 20 20 20 20 20 20 20 53 45 4c 45 43 54 20 4e 55         SELECT NU
5cd0: 4c 4c 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 7d  LL;.    END;.  }
5ce0: 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f  .} {1 {not autho
5cf0: 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20  rized}}.do_test 
5d00: 61 75 74 68 2d 31 2e 31 33 39 20 7b 0a 20 20 73  auth-1.139 {.  s
5d10: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20  et ::authargs.} 
5d20: 7b 72 31 20 74 31 20 74 65 6d 70 20 7b 7d 7d 0a  {r1 t1 temp {}}.
5d30: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
5d40: 34 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  40 {.  execsql {
5d50: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
5d60: 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73   sqlite_temp_mas
5d70: 74 65 72 7d 0a 7d 20 7b 74 31 7d 0a 64 6f 5f 74  ter}.} {t1}.do_t
5d80: 65 73 74 20 61 75 74 68 2d 31 2e 31 34 31 20 7b  est auth-1.141 {
5d90: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
5da0: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
5db0: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66  3 arg4} {.    if
5dc0: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
5dd0: 5f 49 4e 53 45 52 54 22 20 26 26 20 24 61 72 67  _INSERT" && $arg
5de0: 31 3d 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f  1=="sqlite_temp_
5df0: 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20  master"} {.     
5e00: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44   return SQLITE_D
5e10: 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  ENY.    }.    re
5e20: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
5e30: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a   }.  catchsql {.
5e40: 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47      CREATE TRIGG
5e50: 45 52 20 72 31 20 44 45 4c 45 54 45 20 6f 6e 20  ER r1 DELETE on 
5e60: 74 31 20 42 45 47 49 4e 0a 20 20 20 20 20 20 20  t1 BEGIN.       
5e70: 20 53 45 4c 45 43 54 20 4e 55 4c 4c 3b 0a 20 20   SELECT NULL;.  
5e80: 20 20 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 31 20    END;.  }.} {1 
5e90: 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d  {not authorized}
5ea0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
5eb0: 2e 31 34 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  .142 {.  execsql
5ec0: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
5ed0: 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  OM sqlite_temp_m
5ee0: 61 73 74 65 72 7d 0a 7d 20 7b 74 31 7d 0a 64 6f  aster}.} {t1}.do
5ef0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 34 33  _test auth-1.143
5f00: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
5f10: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
5f20: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
5f30: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
5f40: 54 45 5f 43 52 45 41 54 45 5f 54 45 4d 50 5f 54  TE_CREATE_TEMP_T
5f50: 52 49 47 47 45 52 22 7d 20 7b 0a 20 20 20 20 20  RIGGER"} {.     
5f60: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
5f70: 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67  [list $arg1 $arg
5f80: 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20  2 $arg3 $arg4]. 
5f90: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
5fa0: 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a  TE_IGNORE.    }.
5fb0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
5fc0: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
5fd0: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
5fe0: 20 54 52 49 47 47 45 52 20 72 31 20 44 45 4c 45   TRIGGER r1 DELE
5ff0: 54 45 20 6f 6e 20 74 31 20 42 45 47 49 4e 0a 20  TE on t1 BEGIN. 
6000: 20 20 20 20 20 20 20 53 45 4c 45 43 54 20 4e 55         SELECT NU
6010: 4c 4c 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 7d  LL;.    END;.  }
6020: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
6030: 74 20 61 75 74 68 2d 31 2e 31 34 34 20 7b 0a 20  t auth-1.144 {. 
6040: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a   set ::authargs.
6050: 7d 20 7b 72 31 20 74 31 20 74 65 6d 70 20 7b 7d  } {r1 t1 temp {}
6060: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
6070: 2e 31 34 35 20 7b 0a 20 20 65 78 65 63 73 71 6c  .145 {.  execsql
6080: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
6090: 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  OM sqlite_temp_m
60a0: 61 73 74 65 72 7d 0a 7d 20 7b 74 31 7d 0a 64 6f  aster}.} {t1}.do
60b0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 34 36  _test auth-1.146
60c0: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
60d0: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
60e0: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
60f0: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
6100: 54 45 5f 49 4e 53 45 52 54 22 20 26 26 20 24 61  TE_INSERT" && $a
6110: 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 74 65 6d  rg1=="sqlite_tem
6120: 70 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20  p_master"} {.   
6130: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
6140: 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20  _IGNORE.    }.  
6150: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
6160: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
6170: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
6180: 52 49 47 47 45 52 20 72 31 20 44 45 4c 45 54 45  RIGGER r1 DELETE
6190: 20 6f 6e 20 74 31 20 42 45 47 49 4e 0a 20 20 20   on t1 BEGIN.   
61a0: 20 20 20 20 20 53 45 4c 45 43 54 20 4e 55 4c 4c       SELECT NULL
61b0: 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 7d 0a 7d  ;.    END;.  }.}
61c0: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
61d0: 61 75 74 68 2d 31 2e 31 34 37 20 7b 0a 20 20 65  auth-1.147 {.  e
61e0: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
61f0: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
6200: 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b  temp_master}.} {
6210: 74 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  t1}.do_test auth
6220: 2d 31 2e 31 34 38 20 7b 0a 20 20 70 72 6f 63 20  -1.148 {.  proc 
6230: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
6240: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
6250: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
6260: 3d 22 53 51 4c 49 54 45 5f 43 52 45 41 54 45 5f  ="SQLITE_CREATE_
6270: 54 45 4d 50 5f 54 52 49 47 47 45 52 22 7d 20 7b  TEMP_TRIGGER"} {
6280: 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74  .      set ::aut
6290: 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67  hargs [list $arg
62a0: 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61  1 $arg2 $arg3 $a
62b0: 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72  rg4].      retur
62c0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20  n SQLITE_OK.    
62d0: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
62e0: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
62f0: 63 68 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41  chsql {.    CREA
6300: 54 45 20 54 52 49 47 47 45 52 20 72 31 20 44 45  TE TRIGGER r1 DE
6310: 4c 45 54 45 20 6f 6e 20 74 31 20 42 45 47 49 4e  LETE on t1 BEGIN
6320: 0a 20 20 20 20 20 20 20 20 53 45 4c 45 43 54 20  .        SELECT 
6330: 4e 55 4c 4c 3b 0a 20 20 20 20 45 4e 44 3b 0a 20  NULL;.    END;. 
6340: 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74   }.} {0 {}}.do_t
6350: 65 73 74 20 61 75 74 68 2d 31 2e 31 34 39 20 7b  est auth-1.149 {
6360: 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67  .  set ::autharg
6370: 73 0a 7d 20 7b 72 31 20 74 31 20 74 65 6d 70 20  s.} {r1 t1 temp 
6380: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
6390: 2d 31 2e 31 35 30 20 7b 0a 20 20 65 78 65 63 73  -1.150 {.  execs
63a0: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
63b0: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70  FROM sqlite_temp
63c0: 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31 20 72  _master}.} {t1 r
63d0: 31 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  1}..do_test auth
63e0: 2d 31 2e 31 35 31 20 7b 0a 20 20 70 72 6f 63 20  -1.151 {.  proc 
63f0: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
6400: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
6410: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
6420: 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 22  ="SQLITE_DELETE"
6430: 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69   && $arg1=="sqli
6440: 74 65 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20  te_master"} {.  
6450: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
6460: 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20  E_DENY.    }.   
6470: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
6480: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
6490: 20 7b 44 52 4f 50 20 54 52 49 47 47 45 52 20 72   {DROP TRIGGER r
64a0: 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74  2}.} {1 {not aut
64b0: 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73  horized}}.do_tes
64c0: 74 20 61 75 74 68 2d 31 2e 31 35 32 20 7b 0a 20  t auth-1.152 {. 
64d0: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
64e0: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
64f0: 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 20  e_master}.} {t2 
6500: 74 78 20 72 32 7d 0a 64 6f 5f 74 65 73 74 20 61  tx r2}.do_test a
6510: 75 74 68 2d 31 2e 31 35 33 20 7b 0a 20 20 70 72  uth-1.153 {.  pr
6520: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
6530: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
6540: 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f  4} {.    if {$co
6550: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f 50  de=="SQLITE_DROP
6560: 5f 54 52 49 47 47 45 52 22 7d 20 7b 0a 20 20 20  _TRIGGER"} {.   
6570: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
6580: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
6590: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
65a0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
65b0: 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a  LITE_DENY.    }.
65c0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
65d0: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
65e0: 73 71 6c 20 7b 44 52 4f 50 20 54 52 49 47 47 45  sql {DROP TRIGGE
65f0: 52 20 72 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20  R r2}.} {1 {not 
6600: 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f  authorized}}.do_
6610: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 35 34 20  test auth-1.154 
6620: 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72  {.  set ::authar
6630: 67 73 0a 7d 20 7b 72 32 20 74 32 20 6d 61 69 6e  gs.} {r2 t2 main
6640: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
6650: 68 2d 31 2e 31 35 35 20 7b 0a 20 20 65 78 65 63  h-1.155 {.  exec
6660: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
6670: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
6680: 74 65 72 7d 0a 7d 20 7b 74 32 20 74 78 20 72 32  ter}.} {t2 tx r2
6690: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
66a0: 2e 31 35 36 20 7b 0a 20 20 70 72 6f 63 20 61 75  .156 {.  proc au
66b0: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
66c0: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
66d0: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
66e0: 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 22 20 26  SQLITE_DELETE" &
66f0: 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65  & $arg1=="sqlite
6700: 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20  _master"} {.    
6710: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
6720: 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20  IGNORE.    }.   
6730: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
6740: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
6750: 20 7b 44 52 4f 50 20 54 52 49 47 47 45 52 20 72   {DROP TRIGGER r
6760: 32 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74  2}.} {0 {}}.do_t
6770: 65 73 74 20 61 75 74 68 2d 31 2e 31 35 37 20 7b  est auth-1.157 {
6780: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
6790: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
67a0: 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74  ite_master}.} {t
67b0: 32 20 74 78 20 72 32 7d 0a 64 6f 5f 74 65 73 74  2 tx r2}.do_test
67c0: 20 61 75 74 68 2d 31 2e 31 35 38 20 7b 0a 20 20   auth-1.158 {.  
67d0: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
67e0: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
67f0: 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg4} {.    if {$
6800: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52  code=="SQLITE_DR
6810: 4f 50 5f 54 52 49 47 47 45 52 22 7d 20 7b 0a 20  OP_TRIGGER"} {. 
6820: 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61       set ::autha
6830: 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20  rgs [list $arg1 
6840: 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67  $arg2 $arg3 $arg
6850: 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  4].      return 
6860: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20  SQLITE_IGNORE.  
6870: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
6880: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
6890: 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54 52  atchsql {DROP TR
68a0: 49 47 47 45 52 20 72 32 7d 0a 7d 20 7b 30 20 7b  IGGER r2}.} {0 {
68b0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
68c0: 31 2e 31 35 39 20 7b 0a 20 20 73 65 74 20 3a 3a  1.159 {.  set ::
68d0: 61 75 74 68 61 72 67 73 0a 7d 20 7b 72 32 20 74  authargs.} {r2 t
68e0: 32 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65  2 main {}}.do_te
68f0: 73 74 20 61 75 74 68 2d 31 2e 31 36 30 20 7b 0a  st auth-1.160 {.
6900: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
6910: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
6920: 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32  te_master}.} {t2
6930: 20 74 78 20 72 32 7d 0a 64 6f 5f 74 65 73 74 20   tx r2}.do_test 
6940: 61 75 74 68 2d 31 2e 31 36 31 20 7b 0a 20 20 70  auth-1.161 {.  p
6950: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
6960: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
6970: 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g4} {.    if {$c
6980: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f  ode=="SQLITE_DRO
6990: 50 5f 54 52 49 47 47 45 52 22 7d 20 7b 0a 20 20  P_TRIGGER"} {.  
69a0: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
69b0: 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24  gs [list $arg1 $
69c0: 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34  arg2 $arg3 $arg4
69d0: 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  ].      return S
69e0: 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20  QLITE_OK.    }. 
69f0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
6a00: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
6a10: 71 6c 20 7b 44 52 4f 50 20 54 52 49 47 47 45 52  ql {DROP TRIGGER
6a20: 20 72 32 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f   r2}.} {0 {}}.do
6a30: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 36 32  _test auth-1.162
6a40: 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61   {.  set ::autha
6a50: 72 67 73 0a 7d 20 7b 72 32 20 74 32 20 6d 61 69  rgs.} {r2 t2 mai
6a60: 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  n {}}.do_test au
6a70: 74 68 2d 31 2e 31 36 33 20 7b 0a 20 20 65 78 65  th-1.163 {.  exe
6a80: 63 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20  csql {.    DROP 
6a90: 54 41 42 4c 45 20 74 78 3b 0a 20 20 20 20 44 45  TABLE tx;.    DE
6aa0: 4c 45 54 45 20 46 52 4f 4d 20 74 32 20 57 48 45  LETE FROM t2 WHE
6ab0: 52 45 20 61 3d 31 20 41 4e 44 20 62 3d 32 20 41  RE a=1 AND b=2 A
6ac0: 4e 44 20 63 3d 33 3b 0a 20 20 20 20 53 45 4c 45  ND c=3;.    SELE
6ad0: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
6ae0: 69 74 65 5f 6d 61 73 74 65 72 3b 0a 20 20 7d 0a  ite_master;.  }.
6af0: 7d 20 7b 74 32 7d 0a 0a 64 6f 5f 74 65 73 74 20  } {t2}..do_test 
6b00: 61 75 74 68 2d 31 2e 31 36 34 20 7b 0a 20 20 70  auth-1.164 {.  p
6b10: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
6b20: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
6b30: 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g4} {.    if {$c
6b40: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c  ode=="SQLITE_DEL
6b50: 45 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d 22  ETE" && $arg1=="
6b60: 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
6b70: 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74  er"} {.      ret
6b80: 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a  urn SQLITE_DENY.
6b90: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
6ba0: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
6bb0: 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20   catchsql {DROP 
6bc0: 54 52 49 47 47 45 52 20 72 31 7d 0a 7d 20 7b 31  TRIGGER r1}.} {1
6bd0: 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64   {not authorized
6be0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
6bf0: 31 2e 31 36 35 20 7b 0a 20 20 65 78 65 63 73 71  1.165 {.  execsq
6c00: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
6c10: 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f  ROM sqlite_temp_
6c20: 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31 20 72 31  master}.} {t1 r1
6c30: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
6c40: 2e 31 36 36 20 7b 0a 20 20 70 72 6f 63 20 61 75  .166 {.  proc au
6c50: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
6c60: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
6c70: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
6c80: 53 51 4c 49 54 45 5f 44 52 4f 50 5f 54 45 4d 50  SQLITE_DROP_TEMP
6c90: 5f 54 52 49 47 47 45 52 22 7d 20 7b 0a 20 20 20  _TRIGGER"} {.   
6ca0: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
6cb0: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
6cc0: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
6cd0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
6ce0: 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a  LITE_DENY.    }.
6cf0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
6d00: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
6d10: 73 71 6c 20 7b 44 52 4f 50 20 54 52 49 47 47 45  sql {DROP TRIGGE
6d20: 52 20 72 31 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20  R r1}.} {1 {not 
6d30: 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f  authorized}}.do_
6d40: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 36 37 20  test auth-1.167 
6d50: 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72  {.  set ::authar
6d60: 67 73 0a 7d 20 7b 72 31 20 74 31 20 74 65 6d 70  gs.} {r1 t1 temp
6d70: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
6d80: 68 2d 31 2e 31 36 38 20 7b 0a 20 20 65 78 65 63  h-1.168 {.  exec
6d90: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
6da0: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d   FROM sqlite_tem
6db0: 70 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31 20  p_master}.} {t1 
6dc0: 72 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  r1}.do_test auth
6dd0: 2d 31 2e 31 36 39 20 7b 0a 20 20 70 72 6f 63 20  -1.169 {.  proc 
6de0: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
6df0: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
6e00: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
6e10: 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 22  ="SQLITE_DELETE"
6e20: 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69   && $arg1=="sqli
6e30: 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 7d  te_temp_master"}
6e40: 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   {.      return 
6e50: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20  SQLITE_IGNORE.  
6e60: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
6e70: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
6e80: 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54 52  atchsql {DROP TR
6e90: 49 47 47 45 52 20 72 31 7d 0a 7d 20 7b 30 20 7b  IGGER r1}.} {0 {
6ea0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
6eb0: 31 2e 31 37 30 20 7b 0a 20 20 65 78 65 63 73 71  1.170 {.  execsq
6ec0: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
6ed0: 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f  ROM sqlite_temp_
6ee0: 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31 20 72 31  master}.} {t1 r1
6ef0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
6f00: 2e 31 37 31 20 7b 0a 20 20 70 72 6f 63 20 61 75  .171 {.  proc au
6f10: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
6f20: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
6f30: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
6f40: 53 51 4c 49 54 45 5f 44 52 4f 50 5f 54 45 4d 50  SQLITE_DROP_TEMP
6f50: 5f 54 52 49 47 47 45 52 22 7d 20 7b 0a 20 20 20  _TRIGGER"} {.   
6f60: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
6f70: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
6f80: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
6f90: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
6fa0: 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20  LITE_IGNORE.    
6fb0: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
6fc0: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
6fd0: 63 68 73 71 6c 20 7b 44 52 4f 50 20 54 52 49 47  chsql {DROP TRIG
6fe0: 47 45 52 20 72 31 7d 0a 7d 20 7b 30 20 7b 7d 7d  GER r1}.} {0 {}}
6ff0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
7000: 31 37 32 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75  172 {.  set ::au
7010: 74 68 61 72 67 73 0a 7d 20 7b 72 31 20 74 31 20  thargs.} {r1 t1 
7020: 74 65 6d 70 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  temp {}}.do_test
7030: 20 61 75 74 68 2d 31 2e 31 37 33 20 7b 0a 20 20   auth-1.173 {.  
7040: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
7050: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
7060: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d 20  _temp_master}.} 
7070: 7b 74 31 20 72 31 7d 0a 64 6f 5f 74 65 73 74 20  {t1 r1}.do_test 
7080: 61 75 74 68 2d 31 2e 31 37 34 20 7b 0a 20 20 70  auth-1.174 {.  p
7090: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
70a0: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
70b0: 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g4} {.    if {$c
70c0: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f  ode=="SQLITE_DRO
70d0: 50 5f 54 45 4d 50 5f 54 52 49 47 47 45 52 22 7d  P_TEMP_TRIGGER"}
70e0: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61   {.      set ::a
70f0: 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61  uthargs [list $a
7100: 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20  rg1 $arg2 $arg3 
7110: 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74  $arg4].      ret
7120: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
7130: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
7140: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
7150: 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54 52  atchsql {DROP TR
7160: 49 47 47 45 52 20 72 31 7d 0a 7d 20 7b 30 20 7b  IGGER r1}.} {0 {
7170: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
7180: 31 2e 31 37 35 20 7b 0a 20 20 73 65 74 20 3a 3a  1.175 {.  set ::
7190: 61 75 74 68 61 72 67 73 0a 7d 20 7b 72 31 20 74  authargs.} {r1 t
71a0: 31 20 74 65 6d 70 20 7b 7d 7d 0a 64 6f 5f 74 65  1 temp {}}.do_te
71b0: 73 74 20 61 75 74 68 2d 31 2e 31 37 36 20 7b 0a  st auth-1.176 {.
71c0: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
71d0: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
71e0: 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a  te_temp_master}.
71f0: 7d 20 7b 74 31 7d 0a 7d 20 3b 23 20 69 66 63 61  } {t1}.} ;# ifca
7200: 70 61 62 6c 65 20 74 72 69 67 67 65 72 0a 0a 64  pable trigger..d
7210: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 37  o_test auth-1.17
7220: 37 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  7 {.  proc auth 
7230: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
7240: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
7250: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
7260: 49 54 45 5f 43 52 45 41 54 45 5f 49 4e 44 45 58  ITE_CREATE_INDEX
7270: 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a  "} {.      set :
7280: 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20  :authargs [list 
7290: 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67  $arg1 $arg2 $arg
72a0: 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72  3 $arg4].      r
72b0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e  eturn SQLITE_DEN
72c0: 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  Y.    }.    retu
72d0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
72e0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45  .  catchsql {CRE
72f0: 41 54 45 20 49 4e 44 45 58 20 69 32 20 4f 4e 20  ATE INDEX i2 ON 
7300: 74 32 28 61 29 7d 0a 7d 20 7b 31 20 7b 6e 6f 74  t2(a)}.} {1 {not
7310: 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f   authorized}}.do
7320: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 37 38  _test auth-1.178
7330: 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61   {.  set ::autha
7340: 72 67 73 0a 7d 20 7b 69 32 20 74 32 20 6d 61 69  rgs.} {i2 t2 mai
7350: 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  n {}}.do_test au
7360: 74 68 2d 31 2e 31 37 39 20 7b 0a 20 20 65 78 65  th-1.179 {.  exe
7370: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d  csql {SELECT nam
7380: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  e FROM sqlite_ma
7390: 73 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a 64 6f 5f  ster}.} {t2}.do_
73a0: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 38 30 20  test auth-1.180 
73b0: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
73c0: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
73d0: 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69  g3 arg4} {.    i
73e0: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
73f0: 45 5f 49 4e 53 45 52 54 22 20 26 26 20 24 61 72  E_INSERT" && $ar
7400: 67 31 3d 3d 22 73 71 6c 69 74 65 5f 6d 61 73 74  g1=="sqlite_mast
7410: 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74  er"} {.      ret
7420: 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a  urn SQLITE_DENY.
7430: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
7440: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
7450: 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54   catchsql {CREAT
7460: 45 20 49 4e 44 45 58 20 69 32 20 4f 4e 20 74 32  E INDEX i2 ON t2
7470: 28 61 29 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61  (a)}.} {1 {not a
7480: 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74  uthorized}}.do_t
7490: 65 73 74 20 61 75 74 68 2d 31 2e 31 38 31 20 7b  est auth-1.181 {
74a0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
74b0: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
74c0: 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74  ite_master}.} {t
74d0: 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  2}.do_test auth-
74e0: 31 2e 31 38 32 20 7b 0a 20 20 70 72 6f 63 20 61  1.182 {.  proc a
74f0: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
7500: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
7510: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
7520: 22 53 51 4c 49 54 45 5f 43 52 45 41 54 45 5f 49  "SQLITE_CREATE_I
7530: 4e 44 45 58 22 7d 20 7b 0a 20 20 20 20 20 20 73  NDEX"} {.      s
7540: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c  et ::authargs [l
7550: 69 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20  ist $arg1 $arg2 
7560: 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20  $arg3 $arg4].   
7570: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
7580: 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20  _IGNORE.    }.  
7590: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
75a0: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
75b0: 6c 20 7b 43 52 45 41 54 45 20 49 4e 44 45 58 20  l {CREATE INDEX 
75c0: 69 32 20 4f 4e 20 74 32 28 62 29 7d 0a 7d 20 7b  i2 ON t2(b)}.} {
75d0: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  0 {}}.do_test au
75e0: 74 68 2d 31 2e 31 38 33 20 7b 0a 20 20 73 65 74  th-1.183 {.  set
75f0: 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 69   ::authargs.} {i
7600: 32 20 74 32 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f  2 t2 main {}}.do
7610: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 38 34  _test auth-1.184
7620: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
7630: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73  LECT name FROM s
7640: 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20  qlite_master}.} 
7650: 7b 74 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  {t2}.do_test aut
7660: 68 2d 31 2e 31 38 35 20 7b 0a 20 20 70 72 6f 63  h-1.185 {.  proc
7670: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
7680: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
7690: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
76a0: 3d 3d 22 53 51 4c 49 54 45 5f 49 4e 53 45 52 54  =="SQLITE_INSERT
76b0: 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71 6c  " && $arg1=="sql
76c0: 69 74 65 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20  ite_master"} {. 
76d0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
76e0: 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a  TE_IGNORE.    }.
76f0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
7700: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
7710: 73 71 6c 20 7b 43 52 45 41 54 45 20 49 4e 44 45  sql {CREATE INDE
7720: 58 20 69 32 20 4f 4e 20 74 32 28 62 29 7d 0a 7d  X i2 ON t2(b)}.}
7730: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
7740: 61 75 74 68 2d 31 2e 31 38 36 20 7b 0a 20 20 65  auth-1.186 {.  e
7750: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
7760: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
7770: 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a 64  master}.} {t2}.d
7780: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 38  o_test auth-1.18
7790: 37 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  7 {.  proc auth 
77a0: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
77b0: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
77c0: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
77d0: 49 54 45 5f 43 52 45 41 54 45 5f 49 4e 44 45 58  ITE_CREATE_INDEX
77e0: 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a  "} {.      set :
77f0: 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20  :authargs [list 
7800: 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67  $arg1 $arg2 $arg
7810: 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72  3 $arg4].      r
7820: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
7830: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
7840: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
7850: 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54   catchsql {CREAT
7860: 45 20 49 4e 44 45 58 20 69 32 20 4f 4e 20 74 32  E INDEX i2 ON t2
7870: 28 61 29 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f  (a)}.} {0 {}}.do
7880: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 38 38  _test auth-1.188
7890: 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61   {.  set ::autha
78a0: 72 67 73 0a 7d 20 7b 69 32 20 74 32 20 6d 61 69  rgs.} {i2 t2 mai
78b0: 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  n {}}.do_test au
78c0: 74 68 2d 31 2e 31 38 39 20 7b 0a 20 20 65 78 65  th-1.189 {.  exe
78d0: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d  csql {SELECT nam
78e0: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  e FROM sqlite_ma
78f0: 73 74 65 72 7d 0a 7d 20 7b 74 32 20 69 32 7d 0a  ster}.} {t2 i2}.
7900: 0a 69 66 63 61 70 61 62 6c 65 20 74 65 6d 70 64  .ifcapable tempd
7910: 62 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 61 75  b {.  do_test au
7920: 74 68 2d 31 2e 31 39 30 20 7b 0a 20 20 20 20 70  th-1.190 {.    p
7930: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
7940: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
7950: 67 34 7d 20 7b 0a 20 20 20 20 20 20 69 66 20 7b  g4} {.      if {
7960: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43  $code=="SQLITE_C
7970: 52 45 41 54 45 5f 54 45 4d 50 5f 49 4e 44 45 58  REATE_TEMP_INDEX
7980: 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74  "} {.        set
7990: 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73   ::authargs [lis
79a0: 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61  t $arg1 $arg2 $a
79b0: 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20  rg3 $arg4].     
79c0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
79d0: 5f 44 45 4e 59 0a 20 20 20 20 20 20 7d 0a 20 20  _DENY.      }.  
79e0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
79f0: 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63  E_OK.    }.    c
7a00: 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45 20  atchsql {CREATE 
7a10: 49 4e 44 45 58 20 69 31 20 4f 4e 20 74 31 28 61  INDEX i1 ON t1(a
7a20: 29 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f 74 20 61  )}.  } {1 {not a
7a30: 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 20 20 64 6f  uthorized}}.  do
7a40: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 39 31  _test auth-1.191
7a50: 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a 61 75 74   {.    set ::aut
7a60: 68 61 72 67 73 0a 20 20 7d 20 7b 69 31 20 74 31  hargs.  } {i1 t1
7a70: 20 74 65 6d 70 20 7b 7d 7d 0a 20 20 64 6f 5f 74   temp {}}.  do_t
7a80: 65 73 74 20 61 75 74 68 2d 31 2e 31 39 32 20 7b  est auth-1.192 {
7a90: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45  .    execsql {SE
7aa0: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73  LECT name FROM s
7ab0: 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
7ac0: 72 7d 0a 20 20 7d 20 7b 74 31 7d 0a 20 20 64 6f  r}.  } {t1}.  do
7ad0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 39 33  _test auth-1.193
7ae0: 20 7b 0a 20 20 20 20 70 72 6f 63 20 61 75 74 68   {.    proc auth
7af0: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
7b00: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
7b10: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
7b20: 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 22 20 26  SQLITE_INSERT" &
7b30: 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65  & $arg1=="sqlite
7b40: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 7d 20 7b  _temp_master"} {
7b50: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
7b60: 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20  SQLITE_DENY.    
7b70: 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e    }.      return
7b80: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d   SQLITE_OK.    }
7b90: 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 43  .    catchsql {C
7ba0: 52 45 41 54 45 20 49 4e 44 45 58 20 69 31 20 4f  REATE INDEX i1 O
7bb0: 4e 20 74 31 28 62 29 7d 0a 20 20 7d 20 7b 31 20  N t1(b)}.  } {1 
7bc0: 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d  {not authorized}
7bd0: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68  }.  do_test auth
7be0: 2d 31 2e 31 39 34 20 7b 0a 20 20 20 20 65 78 65  -1.194 {.    exe
7bf0: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d  csql {SELECT nam
7c00: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65  e FROM sqlite_te
7c10: 6d 70 5f 6d 61 73 74 65 72 7d 0a 20 20 7d 20 7b  mp_master}.  } {
7c20: 74 31 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75  t1}.  do_test au
7c30: 74 68 2d 31 2e 31 39 35 20 7b 0a 20 20 20 20 70  th-1.195 {.    p
7c40: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
7c50: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
7c60: 67 34 7d 20 7b 0a 20 20 20 20 20 20 69 66 20 7b  g4} {.      if {
7c70: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43  $code=="SQLITE_C
7c80: 52 45 41 54 45 5f 54 45 4d 50 5f 49 4e 44 45 58  REATE_TEMP_INDEX
7c90: 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74  "} {.        set
7ca0: 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73   ::authargs [lis
7cb0: 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61  t $arg1 $arg2 $a
7cc0: 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20  rg3 $arg4].     
7cd0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
7ce0: 5f 49 47 4e 4f 52 45 0a 20 20 20 20 20 20 7d 0a  _IGNORE.      }.
7cf0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
7d00: 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20  ITE_OK.    }.   
7d10: 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54   catchsql {CREAT
7d20: 45 20 49 4e 44 45 58 20 69 31 20 4f 4e 20 74 31  E INDEX i1 ON t1
7d30: 28 62 29 7d 0a 20 20 7d 20 7b 30 20 7b 7d 7d 0a  (b)}.  } {0 {}}.
7d40: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31    do_test auth-1
7d50: 2e 31 39 36 20 7b 0a 20 20 20 20 73 65 74 20 3a  .196 {.    set :
7d60: 3a 61 75 74 68 61 72 67 73 0a 20 20 7d 20 7b 69  :authargs.  } {i
7d70: 31 20 74 31 20 74 65 6d 70 20 7b 7d 7d 0a 20 20  1 t1 temp {}}.  
7d80: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
7d90: 39 37 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  97 {.    execsql
7da0: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
7db0: 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  OM sqlite_temp_m
7dc0: 61 73 74 65 72 7d 0a 20 20 7d 20 7b 74 31 7d 0a  aster}.  } {t1}.
7dd0: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31    do_test auth-1
7de0: 2e 31 39 38 20 7b 0a 20 20 20 20 70 72 6f 63 20  .198 {.    proc 
7df0: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
7e00: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
7e10: 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64  {.      if {$cod
7e20: 65 3d 3d 22 53 51 4c 49 54 45 5f 49 4e 53 45 52  e=="SQLITE_INSER
7e30: 54 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71  T" && $arg1=="sq
7e40: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
7e50: 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 72 65 74  "} {.        ret
7e60: 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52  urn SQLITE_IGNOR
7e70: 45 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  E.      }.      
7e80: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
7e90: 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 74 63 68  .    }.    catch
7ea0: 73 71 6c 20 7b 43 52 45 41 54 45 20 49 4e 44 45  sql {CREATE INDE
7eb0: 58 20 69 31 20 4f 4e 20 74 31 28 63 29 7d 0a 20  X i1 ON t1(c)}. 
7ec0: 20 7d 20 7b 30 20 7b 7d 7d 0a 20 20 64 6f 5f 74   } {0 {}}.  do_t
7ed0: 65 73 74 20 61 75 74 68 2d 31 2e 31 39 39 20 7b  est auth-1.199 {
7ee0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45  .    execsql {SE
7ef0: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73  LECT name FROM s
7f00: 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
7f10: 72 7d 0a 20 20 7d 20 7b 74 31 7d 0a 20 20 64 6f  r}.  } {t1}.  do
7f20: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 30 30  _test auth-1.200
7f30: 20 7b 0a 20 20 20 20 70 72 6f 63 20 61 75 74 68   {.    proc auth
7f40: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
7f50: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
7f60: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
7f70: 53 51 4c 49 54 45 5f 43 52 45 41 54 45 5f 54 45  SQLITE_CREATE_TE
7f80: 4d 50 5f 49 4e 44 45 58 22 7d 20 7b 0a 20 20 20  MP_INDEX"} {.   
7f90: 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61       set ::autha
7fa0: 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20  rgs [list $arg1 
7fb0: 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67  $arg2 $arg3 $arg
7fc0: 34 5d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  4].        retur
7fd0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20  n SQLITE_OK.    
7fe0: 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e    }.      return
7ff0: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d   SQLITE_OK.    }
8000: 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 43  .    catchsql {C
8010: 52 45 41 54 45 20 49 4e 44 45 58 20 69 31 20 4f  REATE INDEX i1 O
8020: 4e 20 74 31 28 61 29 7d 0a 20 20 7d 20 7b 30 20  N t1(a)}.  } {0 
8030: 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75  {}}.  do_test au
8040: 74 68 2d 31 2e 32 30 31 20 7b 0a 20 20 20 20 73  th-1.201 {.    s
8050: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 20 20  et ::authargs.  
8060: 7d 20 7b 69 31 20 74 31 20 74 65 6d 70 20 7b 7d  } {i1 t1 temp {}
8070: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68  }.  do_test auth
8080: 2d 31 2e 32 30 32 20 7b 0a 20 20 20 20 65 78 65  -1.202 {.    exe
8090: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d  csql {SELECT nam
80a0: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65  e FROM sqlite_te
80b0: 6d 70 5f 6d 61 73 74 65 72 7d 0a 20 20 7d 20 7b  mp_master}.  } {
80c0: 74 31 20 69 31 7d 0a 7d 0a 0a 64 6f 5f 74 65 73  t1 i1}.}..do_tes
80d0: 74 20 61 75 74 68 2d 31 2e 32 30 33 20 7b 0a 20  t auth-1.203 {. 
80e0: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
80f0: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
8100: 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg4} {.    if {
8110: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44  $code=="SQLITE_D
8120: 45 4c 45 54 45 22 20 26 26 20 24 61 72 67 31 3d  ELETE" && $arg1=
8130: 3d 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22  ="sqlite_master"
8140: 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  } {.      return
8150: 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20   SQLITE_DENY.   
8160: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
8170: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
8180: 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 49 4e 44  tchsql {DROP IND
8190: 45 58 20 69 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74  EX i2}.} {1 {not
81a0: 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f   authorized}}.do
81b0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 30 34  _test auth-1.204
81c0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
81d0: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73  LECT name FROM s
81e0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20  qlite_master}.} 
81f0: 7b 74 32 20 69 32 7d 0a 64 6f 5f 74 65 73 74 20  {t2 i2}.do_test 
8200: 61 75 74 68 2d 31 2e 32 30 35 20 7b 0a 20 20 70  auth-1.205 {.  p
8210: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
8220: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
8230: 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g4} {.    if {$c
8240: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f  ode=="SQLITE_DRO
8250: 50 5f 49 4e 44 45 58 22 7d 20 7b 0a 20 20 20 20  P_INDEX"} {.    
8260: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
8270: 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72   [list $arg1 $ar
8280: 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a  g2 $arg3 $arg4].
8290: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
82a0: 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20  ITE_DENY.    }. 
82b0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
82c0: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
82d0: 71 6c 20 7b 44 52 4f 50 20 49 4e 44 45 58 20 69  ql {DROP INDEX i
82e0: 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74  2}.} {1 {not aut
82f0: 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73  horized}}.do_tes
8300: 74 20 61 75 74 68 2d 31 2e 32 30 36 20 7b 0a 20  t auth-1.206 {. 
8310: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a   set ::authargs.
8320: 7d 20 7b 69 32 20 74 32 20 6d 61 69 6e 20 7b 7d  } {i2 t2 main {}
8330: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
8340: 2e 32 30 37 20 7b 0a 20 20 65 78 65 63 73 71 6c  .207 {.  execsql
8350: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
8360: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
8370: 7d 0a 7d 20 7b 74 32 20 69 32 7d 0a 64 6f 5f 74  }.} {t2 i2}.do_t
8380: 65 73 74 20 61 75 74 68 2d 31 2e 32 30 38 20 7b  est auth-1.208 {
8390: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
83a0: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
83b0: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66  3 arg4} {.    if
83c0: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
83d0: 5f 44 45 4c 45 54 45 22 20 26 26 20 24 61 72 67  _DELETE" && $arg
83e0: 31 3d 3d 22 73 71 6c 69 74 65 5f 6d 61 73 74 65  1=="sqlite_maste
83f0: 72 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75  r"} {.      retu
8400: 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45  rn SQLITE_IGNORE
8410: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
8420: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
8430: 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50    catchsql {DROP
8440: 20 49 4e 44 45 58 20 69 32 7d 0a 7d 20 7b 30 20   INDEX i2}.} {0 
8450: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
8460: 2d 31 2e 32 30 39 20 7b 0a 20 20 65 78 65 63 73  -1.209 {.  execs
8470: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
8480: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
8490: 65 72 7d 0a 7d 20 7b 74 32 20 69 32 7d 0a 64 6f  er}.} {t2 i2}.do
84a0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 31 30  _test auth-1.210
84b0: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
84c0: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
84d0: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
84e0: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
84f0: 54 45 5f 44 52 4f 50 5f 49 4e 44 45 58 22 7d 20  TE_DROP_INDEX"} 
8500: 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75  {.      set ::au
8510: 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72  thargs [list $ar
8520: 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24  g1 $arg2 $arg3 $
8530: 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75  arg4].      retu
8540: 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45  rn SQLITE_IGNORE
8550: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
8560: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
8570: 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50    catchsql {DROP
8580: 20 49 4e 44 45 58 20 69 32 7d 0a 7d 20 7b 30 20   INDEX i2}.} {0 
8590: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
85a0: 2d 31 2e 32 31 31 20 7b 0a 20 20 73 65 74 20 3a  -1.211 {.  set :
85b0: 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 69 32 20  :authargs.} {i2 
85c0: 74 32 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74  t2 main {}}.do_t
85d0: 65 73 74 20 61 75 74 68 2d 31 2e 32 31 32 20 7b  est auth-1.212 {
85e0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
85f0: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
8600: 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74  ite_master}.} {t
8610: 32 20 69 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75  2 i2}.do_test au
8620: 74 68 2d 31 2e 32 31 33 20 7b 0a 20 20 70 72 6f  th-1.213 {.  pro
8630: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
8640: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
8650: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
8660: 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f 50 5f  e=="SQLITE_DROP_
8670: 49 4e 44 45 58 22 7d 20 7b 0a 20 20 20 20 20 20  INDEX"} {.      
8680: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b  set ::authargs [
8690: 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67 32  list $arg1 $arg2
86a0: 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20   $arg3 $arg4].  
86b0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
86c0: 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 72  E_OK.    }.    r
86d0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
86e0: 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b    }.  catchsql {
86f0: 44 52 4f 50 20 49 4e 44 45 58 20 69 32 7d 0a 7d  DROP INDEX i2}.}
8700: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
8710: 61 75 74 68 2d 31 2e 32 31 34 20 7b 0a 20 20 73  auth-1.214 {.  s
8720: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20  et ::authargs.} 
8730: 7b 69 32 20 74 32 20 6d 61 69 6e 20 7b 7d 7d 0a  {i2 t2 main {}}.
8740: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
8750: 31 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  15 {.  execsql {
8760: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
8770: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a   sqlite_master}.
8780: 7d 20 7b 74 32 7d 0a 0a 69 66 63 61 70 61 62 6c  } {t2}..ifcapabl
8790: 65 20 74 65 6d 70 64 62 20 7b 0a 20 20 64 6f 5f  e tempdb {.  do_
87a0: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 31 36 20  test auth-1.216 
87b0: 7b 0a 20 20 20 20 70 72 6f 63 20 61 75 74 68 20  {.    proc auth 
87c0: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
87d0: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
87e0: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
87f0: 51 4c 49 54 45 5f 44 45 4c 45 54 45 22 20 26 26  QLITE_DELETE" &&
8800: 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f   $arg1=="sqlite_
8810: 74 65 6d 70 5f 6d 61 73 74 65 72 22 7d 20 7b 0a  temp_master"} {.
8820: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
8830: 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 20  QLITE_DENY.     
8840: 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   }.      return 
8850: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a  SQLITE_OK.    }.
8860: 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52      catchsql {DR
8870: 4f 50 20 49 4e 44 45 58 20 69 31 7d 0a 20 20 7d  OP INDEX i1}.  }
8880: 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69   {1 {not authori
8890: 7a 65 64 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20  zed}}.  do_test 
88a0: 61 75 74 68 2d 31 2e 32 31 37 20 7b 0a 20 20 20  auth-1.217 {.   
88b0: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
88c0: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
88d0: 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 20  e_temp_master}. 
88e0: 20 7d 20 7b 74 31 20 69 31 7d 0a 20 20 64 6f 5f   } {t1 i1}.  do_
88f0: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 31 38 20  test auth-1.218 
8900: 7b 0a 20 20 20 20 70 72 6f 63 20 61 75 74 68 20  {.    proc auth 
8910: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
8920: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
8930: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
8940: 51 4c 49 54 45 5f 44 52 4f 50 5f 54 45 4d 50 5f  QLITE_DROP_TEMP_
8950: 49 4e 44 45 58 22 7d 20 7b 0a 20 20 20 20 20 20  INDEX"} {.      
8960: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
8970: 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72   [list $arg1 $ar
8980: 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a  g2 $arg3 $arg4].
8990: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
89a0: 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 20  QLITE_DENY.     
89b0: 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   }.      return 
89c0: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a  SQLITE_OK.    }.
89d0: 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52      catchsql {DR
89e0: 4f 50 20 49 4e 44 45 58 20 69 31 7d 0a 20 20 7d  OP INDEX i1}.  }
89f0: 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69   {1 {not authori
8a00: 7a 65 64 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20  zed}}.  do_test 
8a10: 61 75 74 68 2d 31 2e 32 31 39 20 7b 0a 20 20 20  auth-1.219 {.   
8a20: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a   set ::authargs.
8a30: 20 20 7d 20 7b 69 31 20 74 31 20 74 65 6d 70 20    } {i1 t1 temp 
8a40: 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75  {}}.  do_test au
8a50: 74 68 2d 31 2e 32 32 30 20 7b 0a 20 20 20 20 65  th-1.220 {.    e
8a60: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
8a70: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
8a80: 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 20 20 7d  temp_master}.  }
8a90: 20 7b 74 31 20 69 31 7d 0a 20 20 64 6f 5f 74 65   {t1 i1}.  do_te
8aa0: 73 74 20 61 75 74 68 2d 31 2e 32 32 31 20 7b 0a  st auth-1.221 {.
8ab0: 20 20 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63      proc auth {c
8ac0: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
8ad0: 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 20  g3 arg4} {.     
8ae0: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
8af0: 49 54 45 5f 44 45 4c 45 54 45 22 20 26 26 20 24  ITE_DELETE" && $
8b00: 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 74 65  arg1=="sqlite_te
8b10: 6d 70 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20  mp_master"} {.  
8b20: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
8b30: 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 20  ITE_IGNORE.     
8b40: 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   }.      return 
8b50: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a  SQLITE_OK.    }.
8b60: 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52      catchsql {DR
8b70: 4f 50 20 49 4e 44 45 58 20 69 31 7d 0a 20 20 7d  OP INDEX i1}.  }
8b80: 20 7b 30 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73   {0 {}}.  do_tes
8b90: 74 20 61 75 74 68 2d 31 2e 32 32 32 20 7b 0a 20  t auth-1.222 {. 
8ba0: 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45     execsql {SELE
8bb0: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
8bc0: 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d  ite_temp_master}
8bd0: 0a 20 20 7d 20 7b 74 31 20 69 31 7d 0a 20 20 64  .  } {t1 i1}.  d
8be0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 32  o_test auth-1.22
8bf0: 33 20 7b 0a 20 20 20 20 70 72 6f 63 20 61 75 74  3 {.    proc aut
8c00: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
8c10: 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20  2 arg3 arg4} {. 
8c20: 20 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d       if {$code==
8c30: 22 53 51 4c 49 54 45 5f 44 52 4f 50 5f 54 45 4d  "SQLITE_DROP_TEM
8c40: 50 5f 49 4e 44 45 58 22 7d 20 7b 0a 20 20 20 20  P_INDEX"} {.    
8c50: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
8c60: 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24  gs [list $arg1 $
8c70: 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34  arg2 $arg3 $arg4
8c80: 5d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ].        return
8c90: 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20   SQLITE_IGNORE. 
8ca0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74       }.      ret
8cb0: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
8cc0: 20 20 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c    }.    catchsql
8cd0: 20 7b 44 52 4f 50 20 49 4e 44 45 58 20 69 31 7d   {DROP INDEX i1}
8ce0: 0a 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20 20 64 6f  .  } {0 {}}.  do
8cf0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 32 34  _test auth-1.224
8d00: 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a 61 75 74   {.    set ::aut
8d10: 68 61 72 67 73 0a 20 20 7d 20 7b 69 31 20 74 31  hargs.  } {i1 t1
8d20: 20 74 65 6d 70 20 7b 7d 7d 0a 20 20 64 6f 5f 74   temp {}}.  do_t
8d30: 65 73 74 20 61 75 74 68 2d 31 2e 32 32 35 20 7b  est auth-1.225 {
8d40: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45  .    execsql {SE
8d50: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73  LECT name FROM s
8d60: 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
8d70: 72 7d 0a 20 20 7d 20 7b 74 31 20 69 31 7d 0a 20  r}.  } {t1 i1}. 
8d80: 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e   do_test auth-1.
8d90: 32 32 36 20 7b 0a 20 20 20 20 70 72 6f 63 20 61  226 {.    proc a
8da0: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
8db0: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
8dc0: 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64 65  .      if {$code
8dd0: 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f 50 5f 54  =="SQLITE_DROP_T
8de0: 45 4d 50 5f 49 4e 44 45 58 22 7d 20 7b 0a 20 20  EMP_INDEX"} {.  
8df0: 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68        set ::auth
8e00: 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31  args [list $arg1
8e10: 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72   $arg2 $arg3 $ar
8e20: 67 34 5d 0a 20 20 20 20 20 20 20 20 72 65 74 75  g4].        retu
8e30: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20  rn SQLITE_OK.   
8e40: 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72     }.      retur
8e50: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20  n SQLITE_OK.    
8e60: 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b  }.    catchsql {
8e70: 44 52 4f 50 20 49 4e 44 45 58 20 69 31 7d 0a 20  DROP INDEX i1}. 
8e80: 20 7d 20 7b 30 20 7b 7d 7d 0a 20 20 64 6f 5f 74   } {0 {}}.  do_t
8e90: 65 73 74 20 61 75 74 68 2d 31 2e 32 32 37 20 7b  est auth-1.227 {
8ea0: 0a 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61  .    set ::autha
8eb0: 72 67 73 0a 20 20 7d 20 7b 69 31 20 74 31 20 74  rgs.  } {i1 t1 t
8ec0: 65 6d 70 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73  emp {}}.  do_tes
8ed0: 74 20 61 75 74 68 2d 31 2e 32 32 38 20 7b 0a 20  t auth-1.228 {. 
8ee0: 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45     execsql {SELE
8ef0: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
8f00: 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d  ite_temp_master}
8f10: 0a 20 20 7d 20 7b 74 31 7d 0a 7d 0a 0a 64 6f 5f  .  } {t1}.}..do_
8f20: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 32 39 20  test auth-1.229 
8f30: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
8f40: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
8f50: 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69  g3 arg4} {.    i
8f60: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
8f70: 45 5f 50 52 41 47 4d 41 22 7d 20 7b 0a 20 20 20  E_PRAGMA"} {.   
8f80: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
8f90: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
8fa0: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
8fb0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
8fc0: 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a  LITE_DENY.    }.
8fd0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
8fe0: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
8ff0: 73 71 6c 20 7b 50 52 41 47 4d 41 20 66 75 6c 6c  sql {PRAGMA full
9000: 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 3d 6f 6e  _column_names=on
9010: 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68  }.} {1 {not auth
9020: 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74  orized}}.do_test
9030: 20 61 75 74 68 2d 31 2e 32 33 30 20 7b 0a 20 20   auth-1.230 {.  
9040: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d  set ::authargs.}
9050: 20 7b 66 75 6c 6c 5f 63 6f 6c 75 6d 6e 5f 6e 61   {full_column_na
9060: 6d 65 73 20 6f 6e 20 7b 7d 20 7b 7d 7d 0a 64 6f  mes on {} {}}.do
9070: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 33 31  _test auth-1.231
9080: 20 7b 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 53   {.  execsql2 {S
9090: 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 32 7d  ELECT a FROM t2}
90a0: 0a 7d 20 7b 61 20 31 31 20 61 20 37 7d 0a 64 6f  .} {a 11 a 7}.do
90b0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 33 32  _test auth-1.232
90c0: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
90d0: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
90e0: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
90f0: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
9100: 54 45 5f 50 52 41 47 4d 41 22 7d 20 7b 0a 20 20  TE_PRAGMA"} {.  
9110: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
9120: 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24  gs [list $arg1 $
9130: 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34  arg2 $arg3 $arg4
9140: 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  ].      return S
9150: 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20  QLITE_IGNORE.   
9160: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
9170: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
9180: 74 63 68 73 71 6c 20 7b 50 52 41 47 4d 41 20 66  tchsql {PRAGMA f
9190: 75 6c 6c 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73  ull_column_names
91a0: 3d 6f 6e 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f  =on}.} {0 {}}.do
91b0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 33 33  _test auth-1.233
91c0: 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61   {.  set ::autha
91d0: 72 67 73 0a 7d 20 7b 66 75 6c 6c 5f 63 6f 6c 75  rgs.} {full_colu
91e0: 6d 6e 5f 6e 61 6d 65 73 20 6f 6e 20 7b 7d 20 7b  mn_names on {} {
91f0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
9200: 31 2e 32 33 34 20 7b 0a 20 20 65 78 65 63 73 71  1.234 {.  execsq
9210: 6c 32 20 7b 53 45 4c 45 43 54 20 61 20 46 52 4f  l2 {SELECT a FRO
9220: 4d 20 74 32 7d 0a 7d 20 7b 61 20 31 31 20 61 20  M t2}.} {a 11 a 
9230: 37 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  7}.do_test auth-
9240: 31 2e 32 33 35 20 7b 0a 20 20 70 72 6f 63 20 61  1.235 {.  proc a
9250: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
9260: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
9270: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
9280: 22 53 51 4c 49 54 45 5f 50 52 41 47 4d 41 22 7d  "SQLITE_PRAGMA"}
9290: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61   {.      set ::a
92a0: 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61  uthargs [list $a
92b0: 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20  rg1 $arg2 $arg3 
92c0: 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74  $arg4].      ret
92d0: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
92e0: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
92f0: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
9300: 61 74 63 68 73 71 6c 20 7b 50 52 41 47 4d 41 20  atchsql {PRAGMA 
9310: 66 75 6c 6c 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65  full_column_name
9320: 73 3d 6f 6e 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  s=on}.} {0 {}}.d
9330: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 33  o_test auth-1.23
9340: 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 32 20 7b  6 {.  execsql2 {
9350: 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 32  SELECT a FROM t2
9360: 7d 0a 7d 20 7b 74 32 2e 61 20 31 31 20 74 32 2e  }.} {t2.a 11 t2.
9370: 61 20 37 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  a 7}.do_test aut
9380: 68 2d 31 2e 32 33 37 20 7b 0a 20 20 70 72 6f 63  h-1.237 {.  proc
9390: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
93a0: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
93b0: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
93c0: 3d 3d 22 53 51 4c 49 54 45 5f 50 52 41 47 4d 41  =="SQLITE_PRAGMA
93d0: 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a  "} {.      set :
93e0: 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20  :authargs [list 
93f0: 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67  $arg1 $arg2 $arg
9400: 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72  3 $arg4].      r
9410: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
9420: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
9430: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
9440: 20 63 61 74 63 68 73 71 6c 20 7b 50 52 41 47 4d   catchsql {PRAGM
9450: 41 20 66 75 6c 6c 5f 63 6f 6c 75 6d 6e 5f 6e 61  A full_column_na
9460: 6d 65 73 3d 4f 46 46 7d 0a 7d 20 7b 30 20 7b 7d  mes=OFF}.} {0 {}
9470: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
9480: 2e 32 33 38 20 7b 0a 20 20 73 65 74 20 3a 3a 61  .238 {.  set ::a
9490: 75 74 68 61 72 67 73 0a 7d 20 7b 66 75 6c 6c 5f  uthargs.} {full_
94a0: 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 20 4f 46 46  column_names OFF
94b0: 20 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {} {}}.do_test 
94c0: 61 75 74 68 2d 31 2e 32 33 39 20 7b 0a 20 20 65  auth-1.239 {.  e
94d0: 78 65 63 73 71 6c 32 20 7b 53 45 4c 45 43 54 20  xecsql2 {SELECT 
94e0: 61 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 61 20  a FROM t2}.} {a 
94f0: 31 31 20 61 20 37 7d 0a 0a 64 6f 5f 74 65 73 74  11 a 7}..do_test
9500: 20 61 75 74 68 2d 31 2e 32 34 30 20 7b 0a 20 20   auth-1.240 {.  
9510: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
9520: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
9530: 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg4} {.    if {$
9540: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 54 52  code=="SQLITE_TR
9550: 41 4e 53 41 43 54 49 4f 4e 22 7d 20 7b 0a 20 20  ANSACTION"} {.  
9560: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
9570: 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24  gs [list $arg1 $
9580: 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34  arg2 $arg3 $arg4
9590: 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  ].      return S
95a0: 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d  QLITE_DENY.    }
95b0: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
95c0: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
95d0: 68 73 71 6c 20 7b 42 45 47 49 4e 7d 0a 7d 20 7b  hsql {BEGIN}.} {
95e0: 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65  1 {not authorize
95f0: 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  d}}.do_test auth
9600: 2d 31 2e 32 34 31 20 7b 0a 20 20 73 65 74 20 3a  -1.241 {.  set :
9610: 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 42 45 47  :authargs.} {BEG
9620: 49 4e 20 7b 7d 20 7b 7d 20 7b 7d 7d 0a 64 6f 5f  IN {} {} {}}.do_
9630: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 34 32 20  test auth-1.242 
9640: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
9650: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
9660: 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69  g3 arg4} {.    i
9670: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
9680: 45 5f 54 52 41 4e 53 41 43 54 49 4f 4e 22 20 26  E_TRANSACTION" &
9690: 26 20 24 61 72 67 31 21 3d 22 42 45 47 49 4e 22  & $arg1!="BEGIN"
96a0: 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a  } {.      set ::
96b0: 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24  authargs [list $
96c0: 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33  arg1 $arg2 $arg3
96d0: 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65   $arg4].      re
96e0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59  turn SQLITE_DENY
96f0: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
9700: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
9710: 20 20 63 61 74 63 68 73 71 6c 20 7b 42 45 47 49    catchsql {BEGI
9720: 4e 3b 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  N; INSERT INTO t
9730: 32 20 56 41 4c 55 45 53 28 34 34 2c 35 35 2c 36  2 VALUES(44,55,6
9740: 36 29 3b 20 43 4f 4d 4d 49 54 7d 0a 7d 20 7b 31  6); COMMIT}.} {1
9750: 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64   {not authorized
9760: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
9770: 31 2e 32 34 33 20 7b 0a 20 20 73 65 74 20 3a 3a  1.243 {.  set ::
9780: 61 75 74 68 61 72 67 73 0a 7d 20 7b 43 4f 4d 4d  authargs.} {COMM
9790: 49 54 20 7b 7d 20 7b 7d 20 7b 7d 7d 0a 64 6f 5f  IT {} {} {}}.do_
97a0: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 34 34 20  test auth-1.244 
97b0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
97c0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d 0a 7d  ECT * FROM t2}.}
97d0: 20 7b 31 31 20 32 20 33 33 20 37 20 38 20 39 20   {11 2 33 7 8 9 
97e0: 34 34 20 35 35 20 36 36 7d 0a 64 6f 5f 74 65 73  44 55 66}.do_tes
97f0: 74 20 61 75 74 68 2d 31 2e 32 34 35 20 7b 0a 20  t auth-1.245 {. 
9800: 20 63 61 74 63 68 73 71 6c 20 7b 52 4f 4c 4c 42   catchsql {ROLLB
9810: 41 43 4b 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61  ACK}.} {1 {not a
9820: 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74  uthorized}}.do_t
9830: 65 73 74 20 61 75 74 68 2d 31 2e 32 34 36 20 7b  est auth-1.246 {
9840: 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67  .  set ::autharg
9850: 73 0a 7d 20 7b 52 4f 4c 4c 42 41 43 4b 20 7b 7d  s.} {ROLLBACK {}
9860: 20 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {} {}}.do_test 
9870: 61 75 74 68 2d 31 2e 32 34 37 20 7b 0a 20 20 63  auth-1.247 {.  c
9880: 61 74 63 68 73 71 6c 20 7b 45 4e 44 20 54 52 41  atchsql {END TRA
9890: 4e 53 41 43 54 49 4f 4e 7d 0a 7d 20 7b 31 20 7b  NSACTION}.} {1 {
98a0: 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d  not authorized}}
98b0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
98c0: 32 34 38 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75  248 {.  set ::au
98d0: 74 68 61 72 67 73 0a 7d 20 7b 43 4f 4d 4d 49 54  thargs.} {COMMIT
98e0: 20 7b 7d 20 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74 65   {} {} {}}.do_te
98f0: 73 74 20 61 75 74 68 2d 31 2e 32 34 39 20 7b 0a  st auth-1.249 {.
9900: 20 20 64 62 20 61 75 74 68 6f 72 69 7a 65 72 20    db authorizer 
9910: 7b 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 52  {}.  catchsql {R
9920: 4f 4c 4c 42 41 43 4b 7d 0a 7d 20 7b 30 20 7b 7d  OLLBACK}.} {0 {}
9930: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
9940: 2e 32 35 30 20 7b 0a 20 20 65 78 65 63 73 71 6c  .250 {.  execsql
9950: 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   {SELECT * FROM 
9960: 74 32 7d 0a 7d 20 7b 31 31 20 32 20 33 33 20 37  t2}.} {11 2 33 7
9970: 20 38 20 39 7d 0a 0a 23 20 74 69 63 6b 65 74 20   8 9}..# ticket 
9980: 23 33 34 30 20 2d 20 61 75 74 68 6f 72 69 7a 61  #340 - authoriza
9990: 74 69 6f 6e 20 66 6f 72 20 41 54 54 41 43 48 20  tion for ATTACH 
99a0: 61 6e 64 20 44 45 54 41 43 48 2e 0a 23 0a 69 66  and DETACH..#.if
99b0: 63 61 70 61 62 6c 65 20 61 74 74 61 63 68 20 7b  capable attach {
99c0: 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  .  do_test auth-
99d0: 31 2e 32 35 31 20 7b 0a 20 20 20 20 64 62 20 61  1.251 {.    db a
99e0: 75 74 68 6f 72 69 7a 65 72 20 3a 3a 61 75 74 68  uthorizer ::auth
99f0: 0a 20 20 20 20 70 72 6f 63 20 61 75 74 68 20 7b  .    proc auth {
9a00: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
9a10: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
9a20: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
9a30: 4c 49 54 45 5f 41 54 54 41 43 48 22 7d 20 7b 0a  LITE_ATTACH"} {.
9a40: 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75          set ::au
9a50: 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72  thargs [list $ar
9a60: 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24  g1 $arg2 $arg3 $
9a70: 61 72 67 34 5d 0a 20 20 20 20 20 20 7d 0a 20 20  arg4].      }.  
9a80: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
9a90: 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63  E_OK.    }.    c
9aa0: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20  atchsql {.      
9ab0: 41 54 54 41 43 48 20 44 41 54 41 42 41 53 45 20  ATTACH DATABASE 
9ac0: 27 3a 6d 65 6d 6f 72 79 3a 27 20 41 53 20 74 65  ':memory:' AS te
9ad0: 73 74 31 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 30  st1.    }.  } {0
9ae0: 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61   {}}.  do_test a
9af0: 75 74 68 2d 31 2e 32 35 32 20 7b 0a 20 20 20 20  uth-1.252 {.    
9b00: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 20  set ::authargs. 
9b10: 20 7d 20 7b 3a 6d 65 6d 6f 72 79 3a 20 7b 7d 20   } {:memory: {} 
9b20: 7b 7d 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74  {} {}}.  do_test
9b30: 20 61 75 74 68 2d 31 2e 32 35 33 20 7b 0a 20 20   auth-1.253 {.  
9b40: 20 20 63 61 74 63 68 73 71 6c 20 7b 44 45 54 41    catchsql {DETA
9b50: 43 48 20 44 41 54 41 42 41 53 45 20 74 65 73 74  CH DATABASE test
9b60: 31 7d 0a 20 20 20 20 70 72 6f 63 20 61 75 74 68  1}.    proc auth
9b70: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
9b80: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
9b90: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
9ba0: 53 51 4c 49 54 45 5f 41 54 54 41 43 48 22 7d 20  SQLITE_ATTACH"} 
9bb0: 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a  {.        set ::
9bc0: 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24  authargs [list $
9bd0: 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33  arg1 $arg2 $arg3
9be0: 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 20 20   $arg4].        
9bf0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45  return SQLITE_DE
9c00: 4e 59 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  NY.      }.     
9c10: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
9c20: 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 74 63  K.    }.    catc
9c30: 68 73 71 6c 20 7b 0a 20 20 20 20 20 20 41 54 54  hsql {.      ATT
9c40: 41 43 48 20 44 41 54 41 42 41 53 45 20 27 3a 6d  ACH DATABASE ':m
9c50: 65 6d 6f 72 79 3a 27 20 41 53 20 74 65 73 74 31  emory:' AS test1
9c60: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 20 7b  ;.    }.  } {1 {
9c70: 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d  not authorized}}
9c80: 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  .  do_test auth-
9c90: 31 2e 32 35 34 20 7b 0a 20 20 20 20 6c 69 6e 64  1.254 {.    lind
9ca0: 65 78 20 5b 65 78 65 63 73 71 6c 20 7b 50 52 41  ex [execsql {PRA
9cb0: 47 4d 41 20 64 61 74 61 62 61 73 65 5f 6c 69 73  GMA database_lis
9cc0: 74 7d 5d 20 37 0a 20 20 7d 20 7b 7d 0a 20 20 64  t}] 7.  } {}.  d
9cd0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 35  o_test auth-1.25
9ce0: 35 20 7b 0a 20 20 20 20 63 61 74 63 68 73 71 6c  5 {.    catchsql
9cf0: 20 7b 44 45 54 41 43 48 20 44 41 54 41 42 41 53   {DETACH DATABAS
9d00: 45 20 74 65 73 74 31 7d 0a 20 20 20 20 70 72 6f  E test1}.    pro
9d10: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
9d20: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
9d30: 7d 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 63  } {.      if {$c
9d40: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 41 54 54  ode=="SQLITE_ATT
9d50: 41 43 48 22 7d 20 7b 0a 20 20 20 20 20 20 20 20  ACH"} {.        
9d60: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b  set ::authargs [
9d70: 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67 32  list $arg1 $arg2
9d80: 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20   $arg3 $arg4].  
9d90: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
9da0: 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 20  ITE_IGNORE.     
9db0: 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   }.      return 
9dc0: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a  SQLITE_OK.    }.
9dd0: 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20      catchsql {. 
9de0: 20 20 20 20 20 41 54 54 41 43 48 20 44 41 54 41       ATTACH DATA
9df0: 42 41 53 45 20 27 3a 6d 65 6d 6f 72 79 3a 27 20  BASE ':memory:' 
9e00: 41 53 20 74 65 73 74 31 3b 0a 20 20 20 20 7d 0a  AS test1;.    }.
9e10: 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20 20 64 6f 5f    } {0 {}}.  do_
9e20: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 35 36 20  test auth-1.256 
9e30: 7b 0a 20 20 20 20 6c 69 6e 64 65 78 20 5b 65 78  {.    lindex [ex
9e40: 65 63 73 71 6c 20 7b 50 52 41 47 4d 41 20 64 61  ecsql {PRAGMA da
9e50: 74 61 62 61 73 65 5f 6c 69 73 74 7d 5d 20 37 0a  tabase_list}] 7.
9e60: 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74    } {}.  do_test
9e70: 20 61 75 74 68 2d 31 2e 32 35 37 20 7b 0a 20 20   auth-1.257 {.  
9e80: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
9e90: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
9ea0: 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 20 20 69   arg4} {.      i
9eb0: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
9ec0: 45 5f 44 45 54 41 43 48 22 7d 20 7b 0a 20 20 20  E_DETACH"} {.   
9ed0: 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61       set ::autha
9ee0: 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20  rgs [list $arg1 
9ef0: 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67  $arg2 $arg3 $arg
9f00: 34 5d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  4].        retur
9f10: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20  n SQLITE_OK.    
9f20: 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e    }.      return
9f30: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d   SQLITE_OK.    }
9f40: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 41 54  .    execsql {AT
9f50: 54 41 43 48 20 44 41 54 41 42 41 53 45 20 27 3a  TACH DATABASE ':
9f60: 6d 65 6d 6f 72 79 3a 27 20 41 53 20 74 65 73 74  memory:' AS test
9f70: 31 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20  1}.    catchsql 
9f80: 7b 0a 20 20 20 20 20 20 44 45 54 41 43 48 20 44  {.      DETACH D
9f90: 41 54 41 42 41 53 45 20 74 65 73 74 31 3b 0a 20  ATABASE test1;. 
9fa0: 20 20 20 7d 0a 20 20 7d 20 7b 30 20 7b 7d 7d 0a     }.  } {0 {}}.
9fb0: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31    do_test auth-1
9fc0: 2e 32 35 38 20 7b 0a 20 20 20 20 6c 69 6e 64 65  .258 {.    linde
9fd0: 78 20 5b 65 78 65 63 73 71 6c 20 7b 50 52 41 47  x [execsql {PRAG
9fe0: 4d 41 20 64 61 74 61 62 61 73 65 5f 6c 69 73 74  MA database_list
9ff0: 7d 5d 20 37 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f  }] 7.  } {}.  do
a000: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 35 39  _test auth-1.259
a010: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
a020: 41 54 54 41 43 48 20 44 41 54 41 42 41 53 45 20  ATTACH DATABASE 
a030: 27 3a 6d 65 6d 6f 72 79 3a 27 20 41 53 20 74 65  ':memory:' AS te
a040: 73 74 31 7d 0a 20 20 20 20 70 72 6f 63 20 61 75  st1}.    proc au
a050: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
a060: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
a070: 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d        if {$code=
a080: 3d 22 53 51 4c 49 54 45 5f 44 45 54 41 43 48 22  ="SQLITE_DETACH"
a090: 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20  } {.        set 
a0a0: 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74  ::authargs [list
a0b0: 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72   $arg1 $arg2 $ar
a0c0: 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20  g3 $arg4].      
a0d0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
a0e0: 49 47 4e 4f 52 45 0a 20 20 20 20 20 20 7d 0a 20  IGNORE.      }. 
a0f0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
a100: 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20  TE_OK.    }.    
a110: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20  catchsql {.     
a120: 20 44 45 54 41 43 48 20 44 41 54 41 42 41 53 45   DETACH DATABASE
a130: 20 74 65 73 74 31 3b 0a 20 20 20 20 7d 0a 20 20   test1;.    }.  
a140: 7d 20 7b 30 20 7b 7d 7d 0a 20 20 69 66 63 61 70  } {0 {}}.  ifcap
a150: 61 62 6c 65 20 74 65 6d 70 64 62 20 7b 0a 20 20  able tempdb {.  
a160: 20 20 69 66 63 61 70 61 62 6c 65 20 73 63 68 65    ifcapable sche
a170: 6d 61 5f 70 72 61 67 6d 61 73 20 7b 0a 20 20 20  ma_pragmas {.   
a180: 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e   do_test auth-1.
a190: 32 36 30 20 7b 0a 20 20 20 20 20 20 6c 69 6e 64  260 {.      lind
a1a0: 65 78 20 5b 65 78 65 63 73 71 6c 20 7b 50 52 41  ex [execsql {PRA
a1b0: 47 4d 41 20 64 61 74 61 62 61 73 65 5f 6c 69 73  GMA database_lis
a1c0: 74 7d 5d 20 37 0a 20 20 20 20 7d 20 7b 74 65 73  t}] 7.    } {tes
a1d0: 74 31 7d 0a 20 20 20 20 7d 20 3b 23 20 69 66 63  t1}.    } ;# ifc
a1e0: 61 70 61 62 6c 65 20 73 63 68 65 6d 61 5f 70 72  apable schema_pr
a1f0: 61 67 6d 61 73 0a 20 20 20 20 64 6f 5f 74 65 73  agmas.    do_tes
a200: 74 20 61 75 74 68 2d 31 2e 32 36 31 20 7b 0a 20  t auth-1.261 {. 
a210: 20 20 20 20 20 70 72 6f 63 20 61 75 74 68 20 7b       proc auth {
a220: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
a230: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
a240: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
a250: 53 51 4c 49 54 45 5f 44 45 54 41 43 48 22 7d 20  SQLITE_DETACH"} 
a260: 7b 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  {.          set 
a270: 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74  ::authargs [list
a280: 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72   $arg1 $arg2 $ar
a290: 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20  g3 $arg4].      
a2a0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
a2b0: 45 5f 44 45 4e 59 0a 20 20 20 20 20 20 20 20 7d  E_DENY.        }
a2c0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
a2d0: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 20 20  SQLITE_OK.      
a2e0: 7d 0a 20 20 20 20 20 20 63 61 74 63 68 73 71 6c  }.      catchsql
a2f0: 20 7b 0a 20 20 20 20 20 20 20 20 44 45 54 41 43   {.        DETAC
a300: 48 20 44 41 54 41 42 41 53 45 20 74 65 73 74 31  H DATABASE test1
a310: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20  ;.      }.    } 
a320: 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a  {1 {not authoriz
a330: 65 64 7d 7d 0a 20 20 20 20 69 66 63 61 70 61 62  ed}}.    ifcapab
a340: 6c 65 20 73 63 68 65 6d 61 5f 70 72 61 67 6d 61  le schema_pragma
a350: 73 20 7b 0a 20 20 20 20 64 6f 5f 74 65 73 74 20  s {.    do_test 
a360: 61 75 74 68 2d 31 2e 32 36 32 20 7b 0a 20 20 20  auth-1.262 {.   
a370: 20 20 20 6c 69 6e 64 65 78 20 5b 65 78 65 63 73     lindex [execs
a380: 71 6c 20 7b 50 52 41 47 4d 41 20 64 61 74 61 62  ql {PRAGMA datab
a390: 61 73 65 5f 6c 69 73 74 7d 5d 20 37 0a 20 20 20  ase_list}] 7.   
a3a0: 20 7d 20 7b 74 65 73 74 31 7d 0a 20 20 20 20 7d   } {test1}.    }
a3b0: 20 3b 23 20 69 66 63 61 70 61 62 6c 65 20 73 63   ;# ifcapable sc
a3c0: 68 65 6d 61 5f 70 72 61 67 6d 61 73 0a 20 20 20  hema_pragmas.   
a3d0: 20 64 62 20 61 75 74 68 6f 72 69 7a 65 72 20 7b   db authorizer {
a3e0: 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 44  }.    execsql {D
a3f0: 45 54 41 43 48 20 44 41 54 41 42 41 53 45 20 74  ETACH DATABASE t
a400: 65 73 74 31 7d 0a 20 20 20 20 64 62 20 61 75 74  est1}.    db aut
a410: 68 6f 72 69 7a 65 72 20 3a 3a 61 75 74 68 0a 20  horizer ::auth. 
a420: 20 20 20 0a 20 20 20 20 23 20 41 75 74 68 6f 72     .    # Author
a430: 69 7a 61 74 69 6f 6e 20 66 6f 72 20 41 4c 54 45  ization for ALTE
a440: 52 20 54 41 42 4c 45 2e 20 54 68 65 73 65 20 74  R TABLE. These t
a450: 65 73 74 73 20 61 72 65 20 6f 6d 69 74 74 65 64  ests are omitted
a460: 20 69 66 20 74 68 65 20 6c 69 62 72 61 72 79 0a   if the library.
a470: 20 20 20 20 23 20 77 61 73 20 62 75 69 6c 74 20      # was built 
a480: 77 69 74 68 6f 75 74 20 41 4c 54 45 52 20 54 41  without ALTER TA
a490: 42 4c 45 20 73 75 70 70 6f 72 74 2e 0a 20 20 20  BLE support..   
a4a0: 20 69 66 63 61 70 61 62 6c 65 20 61 6c 74 65 72   ifcapable alter
a4b0: 74 61 62 6c 65 20 7b 0a 20 20 20 20 0a 20 20 20  table {.    .   
a4c0: 20 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d     do_test auth-
a4d0: 31 2e 32 36 33 20 7b 0a 20 20 20 20 20 20 20 20  1.263 {.        
a4e0: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
a4f0: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
a500: 72 67 34 7d 20 7b 0a 20 20 20 20 20 20 20 20 20  rg4} {.         
a510: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
a520: 49 54 45 5f 41 4c 54 45 52 5f 54 41 42 4c 45 22  ITE_ALTER_TABLE"
a530: 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  } {.            
a540: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b  set ::authargs [
a550: 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67 32  list $arg1 $arg2
a560: 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20   $arg3 $arg4].  
a570: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
a580: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 20   SQLITE_OK.     
a590: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
a5a0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
a5b0: 4b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  K.        }.    
a5c0: 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20      catchsql {. 
a5d0: 20 20 20 20 20 20 20 20 20 41 4c 54 45 52 20 54           ALTER T
a5e0: 41 42 4c 45 20 74 31 20 52 45 4e 41 4d 45 20 54  ABLE t1 RENAME T
a5f0: 4f 20 74 31 78 0a 20 20 20 20 20 20 20 20 7d 0a  O t1x.        }.
a600: 20 20 20 20 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20        } {0 {}}. 
a610: 20 20 20 20 20 64 6f 5f 74 65 73 74 20 61 75 74       do_test aut
a620: 68 2d 31 2e 32 36 34 20 7b 0a 20 20 20 20 20 20  h-1.264 {.      
a630: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
a640: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
a650: 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 20 57  te_temp_master W
a660: 48 45 52 45 20 74 79 70 65 3d 27 74 61 62 6c 65  HERE type='table
a670: 27 7d 0a 20 20 20 20 20 20 7d 20 7b 74 31 78 7d  '}.      } {t1x}
a680: 0a 20 20 20 20 20 20 64 6f 5f 74 65 73 74 20 61  .      do_test a
a690: 75 74 68 2d 31 2e 32 36 35 20 7b 0a 20 20 20 20  uth-1.265 {.    
a6a0: 20 20 20 20 73 65 74 20 61 75 74 68 61 72 67 73      set authargs
a6b0: 0a 20 20 20 20 20 20 7d 20 7b 74 65 6d 70 20 74  .      } {temp t
a6c0: 31 20 7b 7d 20 7b 7d 7d 0a 20 20 20 20 20 20 64  1 {} {}}.      d
a6d0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 36  o_test auth-1.26
a6e0: 36 20 7b 0a 20 20 20 20 20 20 20 20 70 72 6f 63  6 {.        proc
a6f0: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
a700: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
a710: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 20   {.          if 
a720: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
a730: 41 4c 54 45 52 5f 54 41 42 4c 45 22 7d 20 7b 0a  ALTER_TABLE"} {.
a740: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
a750: 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74  ::authargs [list
a760: 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72   $arg1 $arg2 $ar
a770: 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20  g3 $arg4].      
a780: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
a790: 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 20  ITE_IGNORE.     
a7a0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
a7b0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
a7c0: 4b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  K.        }.    
a7d0: 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20      catchsql {. 
a7e0: 20 20 20 20 20 20 20 20 20 41 4c 54 45 52 20 54           ALTER T
a7f0: 41 42 4c 45 20 74 31 78 20 52 45 4e 41 4d 45 20  ABLE t1x RENAME 
a800: 54 4f 20 74 31 0a 20 20 20 20 20 20 20 20 7d 0a  TO t1.        }.
a810: 20 20 20 20 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20        } {0 {}}. 
a820: 20 20 20 20 20 64 6f 5f 74 65 73 74 20 61 75 74       do_test aut
a830: 68 2d 31 2e 32 36 37 20 7b 0a 20 20 20 20 20 20  h-1.267 {.      
a840: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
a850: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
a860: 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 20 57  te_temp_master W
a870: 48 45 52 45 20 74 79 70 65 3d 27 74 61 62 6c 65  HERE type='table
a880: 27 7d 0a 20 20 20 20 20 20 7d 20 7b 74 31 78 7d  '}.      } {t1x}
a890: 0a 20 20 20 20 20 20 64 6f 5f 74 65 73 74 20 61  .      do_test a
a8a0: 75 74 68 2d 31 2e 32 36 38 20 7b 0a 20 20 20 20  uth-1.268 {.    
a8b0: 20 20 20 20 73 65 74 20 61 75 74 68 61 72 67 73      set authargs
a8c0: 0a 20 20 20 20 20 20 7d 20 7b 74 65 6d 70 20 74  .      } {temp t
a8d0: 31 78 20 7b 7d 20 7b 7d 7d 0a 20 20 20 20 20 20  1x {} {}}.      
a8e0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
a8f0: 36 39 20 7b 0a 20 20 20 20 20 20 20 20 70 72 6f  69 {.        pro
a900: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
a910: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
a920: 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66  } {.          if
a930: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
a940: 5f 41 4c 54 45 52 5f 54 41 42 4c 45 22 7d 20 7b  _ALTER_TABLE"} {
a950: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74  .            set
a960: 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73   ::authargs [lis
a970: 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61  t $arg1 $arg2 $a
a980: 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20  rg3 $arg4].     
a990: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
a9a0: 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 20 20  LITE_DENY.      
a9b0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
a9c0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
a9d0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
a9e0: 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20     catchsql {.  
a9f0: 20 20 20 20 20 20 20 20 41 4c 54 45 52 20 54 41          ALTER TA
aa00: 42 4c 45 20 74 31 78 20 52 45 4e 41 4d 45 20 54  BLE t1x RENAME T
aa10: 4f 20 74 31 0a 20 20 20 20 20 20 20 20 7d 0a 20  O t1.        }. 
aa20: 20 20 20 20 20 7d 20 7b 31 20 7b 6e 6f 74 20 61       } {1 {not a
aa30: 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 20 20 20 20  uthorized}}.    
aa40: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31    do_test auth-1
aa50: 2e 32 37 30 20 7b 0a 20 20 20 20 20 20 20 20 65  .270 {.        e
aa60: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
aa70: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
aa80: 74 65 6d 70 5f 6d 61 73 74 65 72 20 57 48 45 52  temp_master WHER
aa90: 45 20 74 79 70 65 3d 27 74 61 62 6c 65 27 7d 0a  E type='table'}.
aaa0: 20 20 20 20 20 20 7d 20 7b 74 31 78 7d 0a 20 20        } {t1x}.  
aab0: 0a 20 20 20 20 20 20 64 6f 5f 74 65 73 74 20 61  .      do_test a
aac0: 75 74 68 2d 31 2e 32 37 31 20 7b 0a 20 20 20 20  uth-1.271 {.    
aad0: 20 20 20 20 73 65 74 20 61 75 74 68 61 72 67 73      set authargs
aae0: 0a 20 20 20 20 20 20 7d 20 7b 74 65 6d 70 20 74  .      } {temp t
aaf0: 31 78 20 7b 7d 20 7b 7d 7d 0a 20 20 20 20 7d 20  1x {} {}}.    } 
ab00: 3b 23 20 69 66 63 61 70 61 62 6c 65 20 61 6c 74  ;# ifcapable alt
ab10: 65 72 74 61 62 6c 65 0a 20 20 0a 20 20 7d 20 65  ertable.  .  } e
ab20: 6c 73 65 20 7b 0a 20 20 20 20 64 62 20 61 75 74  lse {.    db aut
ab30: 68 6f 72 69 7a 65 72 20 7b 7d 0a 20 20 20 20 64  horizer {}.    d
ab40: 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 20 20 44  b eval {.      D
ab50: 45 54 41 43 48 20 44 41 54 41 42 41 53 45 20 74  ETACH DATABASE t
ab60: 65 73 74 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  est1;.    }.  }.
ab70: 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20 20 61 6c  }..ifcapable  al
ab80: 74 65 72 74 61 62 6c 65 20 7b 0a 64 62 20 61 75  tertable {.db au
ab90: 74 68 6f 72 69 7a 65 72 20 7b 7d 0a 63 61 74 63  thorizer {}.catc
aba0: 68 73 71 6c 20 7b 41 4c 54 45 52 20 54 41 42 4c  hsql {ALTER TABL
abb0: 45 20 74 31 78 20 52 45 4e 41 4d 45 20 54 4f 20  E t1x RENAME TO 
abc0: 74 31 7d 0a 64 62 20 61 75 74 68 6f 72 69 7a 65  t1}.db authorize
abd0: 72 20 3a 3a 61 75 74 68 0a 64 6f 5f 74 65 73 74  r ::auth.do_test
abe0: 20 61 75 74 68 2d 31 2e 32 37 32 20 7b 0a 20 20   auth-1.272 {.  
abf0: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
ac00: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
ac10: 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg4} {.    if {$
ac20: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 41 4c  code=="SQLITE_AL
ac30: 54 45 52 5f 54 41 42 4c 45 22 7d 20 7b 0a 20 20  TER_TABLE"} {.  
ac40: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
ac50: 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24  gs [list $arg1 $
ac60: 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34  arg2 $arg3 $arg4
ac70: 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  ].      return S
ac80: 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20  QLITE_OK.    }. 
ac90: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
aca0: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
acb0: 71 6c 20 7b 0a 20 20 20 20 41 4c 54 45 52 20 54  ql {.    ALTER T
acc0: 41 42 4c 45 20 74 32 20 52 45 4e 41 4d 45 20 54  ABLE t2 RENAME T
acd0: 4f 20 74 32 78 0a 20 20 7d 0a 7d 20 7b 30 20 7b  O t2x.  }.} {0 {
ace0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
acf0: 31 2e 32 37 33 20 7b 0a 20 20 65 78 65 63 73 71  1.273 {.  execsq
ad00: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
ad10: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
ad20: 72 20 57 48 45 52 45 20 74 79 70 65 3d 27 74 61  r WHERE type='ta
ad30: 62 6c 65 27 7d 0a 7d 20 7b 74 32 78 7d 0a 64 6f  ble'}.} {t2x}.do
ad40: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 37 34  _test auth-1.274
ad50: 20 7b 0a 20 20 73 65 74 20 61 75 74 68 61 72 67   {.  set autharg
ad60: 73 0a 7d 20 7b 6d 61 69 6e 20 74 32 20 7b 7d 20  s.} {main t2 {} 
ad70: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
ad80: 2d 31 2e 32 37 35 20 7b 0a 20 20 70 72 6f 63 20  -1.275 {.  proc 
ad90: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
ada0: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
adb0: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
adc0: 3d 22 53 51 4c 49 54 45 5f 41 4c 54 45 52 5f 54  ="SQLITE_ALTER_T
add0: 41 42 4c 45 22 7d 20 7b 0a 20 20 20 20 20 20 73  ABLE"} {.      s
ade0: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c  et ::authargs [l
adf0: 69 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20  ist $arg1 $arg2 
ae00: 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20  $arg3 $arg4].   
ae10: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
ae20: 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20  _IGNORE.    }.  
ae30: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
ae40: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
ae50: 6c 20 7b 0a 20 20 20 20 41 4c 54 45 52 20 54 41  l {.    ALTER TA
ae60: 42 4c 45 20 74 32 78 20 52 45 4e 41 4d 45 20 54  BLE t2x RENAME T
ae70: 4f 20 74 32 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d  O t2.  }.} {0 {}
ae80: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
ae90: 2e 32 37 36 20 7b 0a 20 20 65 78 65 63 73 71 6c  .276 {.  execsql
aea0: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
aeb0: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
aec0: 20 57 48 45 52 45 20 74 79 70 65 3d 27 74 61 62   WHERE type='tab
aed0: 6c 65 27 7d 0a 7d 20 7b 74 32 78 7d 0a 64 6f 5f  le'}.} {t2x}.do_
aee0: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 37 37 20  test auth-1.277 
aef0: 7b 0a 20 20 73 65 74 20 61 75 74 68 61 72 67 73  {.  set authargs
af00: 0a 7d 20 7b 6d 61 69 6e 20 74 32 78 20 7b 7d 20  .} {main t2x {} 
af10: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
af20: 2d 31 2e 32 37 38 20 7b 0a 20 20 70 72 6f 63 20  -1.278 {.  proc 
af30: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
af40: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
af50: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
af60: 3d 22 53 51 4c 49 54 45 5f 41 4c 54 45 52 5f 54  ="SQLITE_ALTER_T
af70: 41 42 4c 45 22 7d 20 7b 0a 20 20 20 20 20 20 73  ABLE"} {.      s
af80: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c  et ::authargs [l
af90: 69 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20  ist $arg1 $arg2 
afa0: 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20  $arg3 $arg4].   
afb0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
afc0: 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20  _DENY.    }.    
afd0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
afe0: 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20  .  }.  catchsql 
aff0: 7b 0a 20 20 20 20 41 4c 54 45 52 20 54 41 42 4c  {.    ALTER TABL
b000: 45 20 74 32 78 20 52 45 4e 41 4d 45 20 54 4f 20  E t2x RENAME TO 
b010: 74 32 0a 20 20 7d 0a 7d 20 7b 31 20 7b 6e 6f 74  t2.  }.} {1 {not
b020: 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f   authorized}}.do
b030: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 37 39  _test auth-1.279
b040: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
b050: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73  LECT name FROM s
b060: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45  qlite_master WHE
b070: 52 45 20 74 79 70 65 3d 27 74 61 62 6c 65 27 7d  RE type='table'}
b080: 0a 7d 20 7b 74 32 78 7d 0a 64 6f 5f 74 65 73 74  .} {t2x}.do_test
b090: 20 61 75 74 68 2d 31 2e 32 38 30 20 7b 0a 20 20   auth-1.280 {.  
b0a0: 73 65 74 20 61 75 74 68 61 72 67 73 0a 7d 20 7b  set authargs.} {
b0b0: 6d 61 69 6e 20 74 32 78 20 7b 7d 20 7b 7d 7d 0a  main t2x {} {}}.
b0c0: 64 62 20 61 75 74 68 6f 72 69 7a 65 72 20 7b 7d  db authorizer {}
b0d0: 0a 63 61 74 63 68 73 71 6c 20 7b 41 4c 54 45 52  .catchsql {ALTER
b0e0: 20 54 41 42 4c 45 20 74 32 78 20 52 45 4e 41 4d   TABLE t2x RENAM
b0f0: 45 20 54 4f 20 74 32 7d 0a 0a 7d 20 3b 23 20 69  E TO t2}..} ;# i
b100: 66 63 61 70 61 62 6c 65 20 61 6c 74 65 72 74 61  fcapable alterta
b110: 62 6c 65 0a 0a 23 20 54 65 73 74 20 74 68 65 20  ble..# Test the 
b120: 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 63 61  authorization ca
b130: 6c 6c 62 61 63 6b 73 20 66 6f 72 20 74 68 65 20  llbacks for the 
b140: 52 45 49 4e 44 45 58 20 63 6f 6d 6d 61 6e 64 2e  REINDEX command.
b150: 0a 69 66 63 61 70 61 62 6c 65 20 72 65 69 6e 64  .ifcapable reind
b160: 65 78 20 7b 0a 0a 70 72 6f 63 20 61 75 74 68 20  ex {..proc auth 
b170: 7b 63 6f 64 65 20 61 72 67 73 7d 20 7b 0a 20 20  {code args} {.  
b180: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
b190: 54 45 5f 52 45 49 4e 44 45 58 22 7d 20 7b 0a 20  TE_REINDEX"} {. 
b1a0: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
b1b0: 73 20 5b 63 6f 6e 63 61 74 20 24 3a 3a 61 75 74  s [concat $::aut
b1c0: 68 61 72 67 73 20 24 61 72 67 73 5d 0a 20 20 7d  hargs $args].  }
b1d0: 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  .  return SQLITE
b1e0: 5f 4f 4b 0a 7d 0a 64 62 20 61 75 74 68 6f 72 69  _OK.}.db authori
b1f0: 7a 65 72 20 61 75 74 68 0a 64 6f 5f 74 65 73 74  zer auth.do_test
b200: 20 61 75 74 68 2d 31 2e 32 38 31 20 7b 0a 20 20   auth-1.281 {.  
b210: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52  execsql {.    CR
b220: 45 41 54 45 20 54 41 42 4c 45 20 74 33 28 61 20  EATE TABLE t3(a 
b230: 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 2c 20  PRIMARY KEY, b, 
b240: 63 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 49  c);.    CREATE I
b250: 4e 44 45 58 20 74 33 5f 69 64 78 31 20 4f 4e 20  NDEX t3_idx1 ON 
b260: 74 33 28 63 20 43 4f 4c 4c 41 54 45 20 42 49 4e  t3(c COLLATE BIN
b270: 41 52 59 29 3b 0a 20 20 20 20 43 52 45 41 54 45  ARY);.    CREATE
b280: 20 49 4e 44 45 58 20 74 33 5f 69 64 78 32 20 4f   INDEX t3_idx2 O
b290: 4e 20 74 33 28 62 20 43 4f 4c 4c 41 54 45 20 4e  N t3(b COLLATE N
b2a0: 4f 43 41 53 45 29 3b 0a 20 20 7d 0a 7d 20 7b 7d  OCASE);.  }.} {}
b2b0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
b2c0: 32 38 32 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75  282 {.  set ::au
b2d0: 74 68 61 72 67 73 20 7b 7d 0a 20 20 65 78 65 63  thargs {}.  exec
b2e0: 73 71 6c 20 7b 0a 20 20 20 20 52 45 49 4e 44 45  sql {.    REINDE
b2f0: 58 20 74 33 5f 69 64 78 31 3b 0a 20 20 7d 0a 20  X t3_idx1;.  }. 
b300: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a   set ::authargs.
b310: 7d 20 7b 74 33 5f 69 64 78 31 20 7b 7d 20 6d 61  } {t3_idx1 {} ma
b320: 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  in {}}.do_test a
b330: 75 74 68 2d 31 2e 32 38 33 20 7b 0a 20 20 73 65  uth-1.283 {.  se
b340: 74 20 3a 3a 61 75 74 68 61 72 67 73 20 7b 7d 0a  t ::authargs {}.
b350: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
b360: 52 45 49 4e 44 45 58 20 42 49 4e 41 52 59 3b 0a  REINDEX BINARY;.
b370: 20 20 7d 0a 20 20 73 65 74 20 3a 3a 61 75 74 68    }.  set ::auth
b380: 61 72 67 73 0a 7d 20 7b 74 33 5f 69 64 78 31 20  args.} {t3_idx1 
b390: 7b 7d 20 6d 61 69 6e 20 7b 7d 20 73 71 6c 69 74  {} main {} sqlit
b3a0: 65 5f 61 75 74 6f 69 6e 64 65 78 5f 74 33 5f 31  e_autoindex_t3_1
b3b0: 20 7b 7d 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f   {} main {}}.do_
b3c0: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 38 34 20  test auth-1.284 
b3d0: 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72  {.  set ::authar
b3e0: 67 73 20 7b 7d 0a 20 20 65 78 65 63 73 71 6c 20  gs {}.  execsql 
b3f0: 7b 0a 20 20 20 20 52 45 49 4e 44 45 58 20 4e 4f  {.    REINDEX NO
b400: 43 41 53 45 3b 0a 20 20 7d 0a 20 20 73 65 74 20  CASE;.  }.  set 
b410: 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 74 33  ::authargs.} {t3
b420: 5f 69 64 78 32 20 7b 7d 20 6d 61 69 6e 20 7b 7d  _idx2 {} main {}
b430: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
b440: 2e 32 38 35 20 7b 0a 20 20 73 65 74 20 3a 3a 61  .285 {.  set ::a
b450: 75 74 68 61 72 67 73 20 7b 7d 0a 20 20 65 78 65  uthargs {}.  exe
b460: 63 73 71 6c 20 7b 0a 20 20 20 20 52 45 49 4e 44  csql {.    REIND
b470: 45 58 20 74 33 3b 0a 20 20 7d 0a 20 20 73 65 74  EX t3;.  }.  set
b480: 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 74   ::authargs.} {t
b490: 33 5f 69 64 78 32 20 7b 7d 20 6d 61 69 6e 20 7b  3_idx2 {} main {
b4a0: 7d 20 74 33 5f 69 64 78 31 20 7b 7d 20 6d 61 69  } t3_idx1 {} mai
b4b0: 6e 20 7b 7d 20 73 71 6c 69 74 65 5f 61 75 74 6f  n {} sqlite_auto
b4c0: 69 6e 64 65 78 5f 74 33 5f 31 20 7b 7d 20 6d 61  index_t3_1 {} ma
b4d0: 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  in {}}.do_test a
b4e0: 75 74 68 2d 31 2e 32 38 36 20 7b 0a 20 20 65 78  uth-1.286 {.  ex
b4f0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50  ecsql {.    DROP
b500: 20 54 41 42 4c 45 20 74 33 3b 0a 20 20 7d 0a 7d   TABLE t3;.  }.}
b510: 20 7b 7d 0a 69 66 63 61 70 61 62 6c 65 20 74 65   {}.ifcapable te
b520: 6d 70 64 62 20 7b 0a 20 20 64 6f 5f 74 65 73 74  mpdb {.  do_test
b530: 20 61 75 74 68 2d 31 2e 32 38 37 20 7b 0a 20 20   auth-1.287 {.  
b540: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
b550: 20 20 43 52 45 41 54 45 20 54 45 4d 50 20 54 41    CREATE TEMP TA
b560: 42 4c 45 20 74 33 28 61 20 50 52 49 4d 41 52 59  BLE t3(a PRIMARY
b570: 20 4b 45 59 2c 20 62 2c 20 63 29 3b 0a 20 20 20   KEY, b, c);.   
b580: 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20     CREATE INDEX 
b590: 74 33 5f 69 64 78 31 20 4f 4e 20 74 33 28 63 20  t3_idx1 ON t3(c 
b5a0: 43 4f 4c 4c 41 54 45 20 42 49 4e 41 52 59 29 3b  COLLATE BINARY);
b5b0: 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 49 4e  .      CREATE IN
b5c0: 44 45 58 20 74 33 5f 69 64 78 32 20 4f 4e 20 74  DEX t3_idx2 ON t
b5d0: 33 28 62 20 43 4f 4c 4c 41 54 45 20 4e 4f 43 41  3(b COLLATE NOCA
b5e0: 53 45 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  SE);.    }.  } {
b5f0: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68  }.  do_test auth
b600: 2d 31 2e 32 38 38 20 7b 0a 20 20 20 20 73 65 74  -1.288 {.    set
b610: 20 3a 3a 61 75 74 68 61 72 67 73 20 7b 7d 0a 20   ::authargs {}. 
b620: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
b630: 20 20 20 52 45 49 4e 44 45 58 20 74 65 6d 70 2e     REINDEX temp.
b640: 74 33 5f 69 64 78 31 3b 0a 20 20 20 20 7d 0a 20  t3_idx1;.    }. 
b650: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
b660: 73 0a 20 20 7d 20 7b 74 33 5f 69 64 78 31 20 7b  s.  } {t3_idx1 {
b670: 7d 20 74 65 6d 70 20 7b 7d 7d 0a 20 20 64 6f 5f  } temp {}}.  do_
b680: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 38 39 20  test auth-1.289 
b690: 7b 0a 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68  {.    set ::auth
b6a0: 61 72 67 73 20 7b 7d 0a 20 20 20 20 65 78 65 63  args {}.    exec
b6b0: 73 71 6c 20 7b 0a 20 20 20 20 20 20 52 45 49 4e  sql {.      REIN
b6c0: 44 45 58 20 42 49 4e 41 52 59 3b 0a 20 20 20 20  DEX BINARY;.    
b6d0: 7d 0a 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68  }.    set ::auth
b6e0: 61 72 67 73 0a 20 20 7d 20 7b 74 33 5f 69 64 78  args.  } {t3_idx
b6f0: 31 20 7b 7d 20 74 65 6d 70 20 7b 7d 20 73 71 6c  1 {} temp {} sql
b700: 69 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 74 33  ite_autoindex_t3
b710: 5f 31 20 7b 7d 20 74 65 6d 70 20 7b 7d 7d 0a 20  _1 {} temp {}}. 
b720: 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e   do_test auth-1.
b730: 32 39 30 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a  290 {.    set ::
b740: 61 75 74 68 61 72 67 73 20 7b 7d 0a 20 20 20 20  authargs {}.    
b750: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
b760: 52 45 49 4e 44 45 58 20 4e 4f 43 41 53 45 3b 0a  REINDEX NOCASE;.
b770: 20 20 20 20 7d 0a 20 20 20 20 73 65 74 20 3a 3a      }.    set ::
b780: 61 75 74 68 61 72 67 73 0a 20 20 7d 20 7b 74 33  authargs.  } {t3
b790: 5f 69 64 78 32 20 7b 7d 20 74 65 6d 70 20 7b 7d  _idx2 {} temp {}
b7a0: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68  }.  do_test auth
b7b0: 2d 31 2e 32 39 31 20 7b 0a 20 20 20 20 73 65 74  -1.291 {.    set
b7c0: 20 3a 3a 61 75 74 68 61 72 67 73 20 7b 7d 0a 20   ::authargs {}. 
b7d0: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
b7e0: 20 20 20 52 45 49 4e 44 45 58 20 74 65 6d 70 2e     REINDEX temp.
b7f0: 74 33 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 65  t3;.    }.    se
b800: 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 20 20 7d  t ::authargs.  }
b810: 20 7b 74 33 5f 69 64 78 32 20 7b 7d 20 74 65 6d   {t3_idx2 {} tem
b820: 70 20 7b 7d 20 74 33 5f 69 64 78 31 20 7b 7d 20  p {} t3_idx1 {} 
b830: 74 65 6d 70 20 7b 7d 20 73 71 6c 69 74 65 5f 61  temp {} sqlite_a
b840: 75 74 6f 69 6e 64 65 78 5f 74 33 5f 31 20 7b 7d  utoindex_t3_1 {}
b850: 20 74 65 6d 70 20 7b 7d 7d 0a 20 20 70 72 6f 63   temp {}}.  proc
b860: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 73   auth {code args
b870: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
b880: 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45 49 4e 44  e=="SQLITE_REIND
b890: 45 58 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74  EX"} {.      set
b8a0: 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 63 6f 6e   ::authargs [con
b8b0: 63 61 74 20 24 3a 3a 61 75 74 68 61 72 67 73 20  cat $::authargs 
b8c0: 24 61 72 67 73 5d 0a 20 20 20 20 20 20 72 65 74  $args].      ret
b8d0: 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a  urn SQLITE_DENY.
b8e0: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
b8f0: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
b900: 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e   do_test auth-1.
b910: 32 39 32 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a  292 {.    set ::
b920: 61 75 74 68 61 72 67 73 20 7b 7d 0a 20 20 20 20  authargs {}.    
b930: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20  catchsql {.     
b940: 20 52 45 49 4e 44 45 58 20 74 65 6d 70 2e 74 33   REINDEX temp.t3
b950: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 20 7b  ;.    }.  } {1 {
b960: 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d  not authorized}}
b970: 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  .  do_test auth-
b980: 31 2e 32 39 33 20 7b 0a 20 20 20 20 65 78 65 63  1.293 {.    exec
b990: 73 71 6c 20 7b 0a 20 20 20 20 20 20 44 52 4f 50  sql {.      DROP
b9a0: 20 54 41 42 4c 45 20 74 33 3b 0a 20 20 20 20 7d   TABLE t3;.    }
b9b0: 0a 20 20 7d 20 7b 7d 0a 7d 0a 0a 7d 20 3b 23 20  .  } {}.}..} ;# 
b9c0: 69 66 63 61 70 61 62 6c 65 20 72 65 69 6e 64 65  ifcapable reinde
b9d0: 78 20 0a 0a 69 66 63 61 70 61 62 6c 65 20 61 6e  x ..ifcapable an
b9e0: 61 6c 79 7a 65 20 7b 0a 20 20 70 72 6f 63 20 61  alyze {.  proc a
b9f0: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 73 7d 20  uth {code args} 
ba00: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
ba10: 3d 22 53 51 4c 49 54 45 5f 41 4e 41 4c 59 5a 45  ="SQLITE_ANALYZE
ba20: 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a  "} {.      set :
ba30: 3a 61 75 74 68 61 72 67 73 20 5b 63 6f 6e 63 61  :authargs [conca
ba40: 74 20 24 3a 3a 61 75 74 68 61 72 67 73 20 24 61  t $::authargs $a
ba50: 72 67 73 5d 0a 20 20 20 20 7d 0a 20 20 20 20 72  rgs].    }.    r
ba60: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
ba70: 20 20 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75    }.  do_test au
ba80: 74 68 2d 31 2e 32 39 34 20 7b 0a 20 20 20 20 73  th-1.294 {.    s
ba90: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 7b 7d  et ::authargs {}
baa0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
bab0: 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c       CREATE TABL
bac0: 45 20 74 34 28 61 2c 62 2c 63 29 3b 0a 20 20 20  E t4(a,b,c);.   
bad0: 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20     CREATE INDEX 
bae0: 74 34 69 31 20 4f 4e 20 74 34 28 61 29 3b 0a 20  t4i1 ON t4(a);. 
baf0: 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45       CREATE INDE
bb00: 58 20 74 34 69 32 20 4f 4e 20 74 34 28 62 2c 61  X t4i2 ON t4(b,a
bb10: 2c 63 29 3b 0a 20 20 20 20 20 20 49 4e 53 45 52  ,c);.      INSER
bb20: 54 20 49 4e 54 4f 20 74 34 20 56 41 4c 55 45 53  T INTO t4 VALUES
bb30: 28 31 2c 32 2c 33 29 3b 0a 20 20 20 20 20 20 41  (1,2,3);.      A
bb40: 4e 41 4c 59 5a 45 3b 0a 20 20 20 20 7d 0a 20 20  NALYZE;.    }.  
bb50: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
bb60: 0a 20 20 7d 20 7b 74 34 20 7b 7d 20 6d 61 69 6e  .  } {t4 {} main
bb70: 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61   {}}.  do_test a
bb80: 75 74 68 2d 31 2e 32 39 35 20 7b 0a 20 20 20 20  uth-1.295 {.    
bb90: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
bba0: 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20  SELECT count(*) 
bbb0: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 73 74 61 74  FROM sqlite_stat
bbc0: 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 32 0a 20  1;.    }.  } 2. 
bbd0: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
bbe0: 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 69 66 20   args} {.    if 
bbf0: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
bc00: 41 4e 41 4c 59 5a 45 22 7d 20 7b 0a 20 20 20 20  ANALYZE"} {.    
bc10: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
bc20: 20 5b 63 6f 6e 63 61 74 20 24 3a 3a 61 75 74 68   [concat $::auth
bc30: 61 72 67 73 20 24 61 72 67 73 5d 0a 20 20 20 20  args $args].    
bc40: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
bc50: 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72  DENY.    }.    r
bc60: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
bc70: 20 20 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75    }.  do_test au
bc80: 74 68 2d 31 2e 32 39 36 20 7b 0a 20 20 20 20 73  th-1.296 {.    s
bc90: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 7b 7d  et ::authargs {}
bca0: 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a  .    catchsql {.
bcb0: 20 20 20 20 20 20 41 4e 41 4c 59 5a 45 3b 0a 20        ANALYZE;. 
bcc0: 20 20 20 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f 74     }.  } {1 {not
bcd0: 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 20 20   authorized}}.  
bce0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
bcf0: 39 37 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  97 {.    execsql
bd00: 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20   {.      SELECT 
bd10: 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 73 71  count(*) FROM sq
bd20: 6c 69 74 65 5f 73 74 61 74 31 3b 0a 20 20 20 20  lite_stat1;.    
bd30: 7d 0a 20 20 7d 20 32 0a 7d 20 3b 23 20 69 66 63  }.  } 2.} ;# ifc
bd40: 61 70 61 62 6c 65 20 61 6e 61 6c 79 7a 65 0a 0a  apable analyze..
bd50: 0a 23 20 41 75 74 68 6f 72 69 7a 61 74 69 6f 6e  .# Authorization
bd60: 20 66 6f 72 20 41 4c 54 45 52 20 54 41 42 4c 45   for ALTER TABLE
bd70: 20 41 44 44 20 43 4f 4c 55 4d 4e 2e 0a 23 20 54   ADD COLUMN..# T
bd80: 68 65 73 65 20 74 65 73 74 73 20 61 72 65 20 6f  hese tests are o
bd90: 6d 69 74 74 65 64 20 69 66 20 74 68 65 20 6c 69  mitted if the li
bda0: 62 72 61 72 79 0a 23 20 77 61 73 20 62 75 69 6c  brary.# was buil
bdb0: 74 20 77 69 74 68 6f 75 74 20 41 4c 54 45 52 20  t without ALTER 
bdc0: 54 41 42 4c 45 20 73 75 70 70 6f 72 74 2e 0a 69  TABLE support..i
bdd0: 66 63 61 70 61 62 6c 65 20 7b 61 6c 74 65 72 74  fcapable {altert
bde0: 61 62 6c 65 7d 20 7b 0a 20 20 64 6f 5f 74 65 73  able} {.  do_tes
bdf0: 74 20 61 75 74 68 2d 31 2e 33 30 30 20 7b 0a 20  t auth-1.300 {. 
be00: 20 20 20 65 78 65 63 73 71 6c 20 7b 43 52 45 41     execsql {CREA
be10: 54 45 20 54 41 42 4c 45 20 74 35 28 78 29 7d 0a  TE TABLE t5(x)}.
be20: 20 20 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63      proc auth {c
be30: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
be40: 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 20  g3 arg4} {.     
be50: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
be60: 49 54 45 5f 41 4c 54 45 52 5f 54 41 42 4c 45 22  ITE_ALTER_TABLE"
be70: 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20  } {.        set 
be80: 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74  ::authargs [list
be90: 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72   $arg1 $arg2 $ar
bea0: 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20  g3 $arg4].      
beb0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
bec0: 4f 4b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  OK.      }.     
bed0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
bee0: 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 74 63  K.    }.    catc
bef0: 68 73 71 6c 20 7b 0a 20 20 20 20 20 20 41 4c 54  hsql {.      ALT
bf00: 45 52 20 54 41 42 4c 45 20 74 35 20 41 44 44 20  ER TABLE t5 ADD 
bf10: 43 4f 4c 55 4d 4e 20 6e 65 77 5f 63 6f 6c 5f 31  COLUMN new_col_1
bf20: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 30 20 7b  ;.    }.  } {0 {
bf30: 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74  }}.  do_test aut
bf40: 68 2d 31 2e 33 30 31 20 7b 0a 20 20 20 20 73 65  h-1.301 {.    se
bf50: 74 20 78 20 5b 65 78 65 63 73 71 6c 20 7b 53 45  t x [execsql {SE
bf60: 4c 45 43 54 20 73 71 6c 20 46 52 4f 4d 20 73 71  LECT sql FROM sq
bf70: 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52  lite_master WHER
bf80: 45 20 6e 61 6d 65 3d 27 74 35 27 7d 5d 0a 20 20  E name='t5'}].  
bf90: 20 20 72 65 67 65 78 70 20 6e 65 77 5f 63 6f 6c    regexp new_col
bfa0: 5f 31 20 24 78 0a 20 20 7d 20 7b 31 7d 0a 20 20  _1 $x.  } {1}.  
bfb0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 33  do_test auth-1.3
bfc0: 30 32 20 7b 0a 20 20 20 20 73 65 74 20 61 75 74  02 {.    set aut
bfd0: 68 61 72 67 73 0a 20 20 7d 20 7b 6d 61 69 6e 20  hargs.  } {main 
bfe0: 74 35 20 7b 7d 20 7b 7d 7d 0a 20 20 64 6f 5f 74  t5 {} {}}.  do_t
bff0: 65 73 74 20 61 75 74 68 2d 31 2e 33 30 33 20 7b  est auth-1.303 {
c000: 0a 20 20 20 20 70 72 6f 63 20 61 75 74 68 20 7b  .    proc auth {
c010: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
c020: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
c030: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
c040: 4c 49 54 45 5f 41 4c 54 45 52 5f 54 41 42 4c 45  LITE_ALTER_TABLE
c050: 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74  "} {.        set
c060: 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73   ::authargs [lis
c070: 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61  t $arg1 $arg2 $a
c080: 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20  rg3 $arg4].     
c090: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
c0a0: 5f 49 47 4e 4f 52 45 0a 20 20 20 20 20 20 7d 0a  _IGNORE.      }.
c0b0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
c0c0: 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20  ITE_OK.    }.   
c0d0: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
c0e0: 20 20 41 4c 54 45 52 20 54 41 42 4c 45 20 74 35    ALTER TABLE t5
c0f0: 20 41 44 44 20 43 4f 4c 55 4d 4e 20 6e 65 77 5f   ADD COLUMN new_
c100: 63 6f 6c 5f 32 3b 0a 20 20 20 20 7d 0a 20 20 7d  col_2;.    }.  }
c110: 20 7b 30 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73   {0 {}}.  do_tes
c120: 74 20 61 75 74 68 2d 31 2e 33 30 34 20 7b 0a 20  t auth-1.304 {. 
c130: 20 20 20 73 65 74 20 78 20 5b 65 78 65 63 73 71     set x [execsq
c140: 6c 20 7b 53 45 4c 45 43 54 20 73 71 6c 20 46 52  l {SELECT sql FR
c150: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
c160: 20 57 48 45 52 45 20 6e 61 6d 65 3d 27 74 35 27   WHERE name='t5'
c170: 7d 5d 0a 20 20 20 20 72 65 67 65 78 70 20 6e 65  }].    regexp ne
c180: 77 5f 63 6f 6c 5f 32 20 24 78 0a 20 20 7d 20 7b  w_col_2 $x.  } {
c190: 30 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74  0}.  do_test aut
c1a0: 68 2d 31 2e 33 30 35 20 7b 0a 20 20 20 20 73 65  h-1.305 {.    se
c1b0: 74 20 61 75 74 68 61 72 67 73 0a 20 20 7d 20 7b  t authargs.  } {
c1c0: 6d 61 69 6e 20 74 35 20 7b 7d 20 7b 7d 7d 0a 20  main t5 {} {}}. 
c1d0: 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e   do_test auth-1.
c1e0: 33 30 36 20 7b 0a 20 20 20 20 70 72 6f 63 20 61  306 {.    proc a
c1f0: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
c200: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
c210: 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64 65  .      if {$code
c220: 3d 3d 22 53 51 4c 49 54 45 5f 41 4c 54 45 52 5f  =="SQLITE_ALTER_
c230: 54 41 42 4c 45 22 7d 20 7b 0a 20 20 20 20 20 20  TABLE"} {.      
c240: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
c250: 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72   [list $arg1 $ar
c260: 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a  g2 $arg3 $arg4].
c270: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
c280: 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 20  QLITE_DENY.     
c290: 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   }.      return 
c2a0: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a  SQLITE_OK.    }.
c2b0: 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20      catchsql {. 
c2c0: 20 20 20 20 20 41 4c 54 45 52 20 54 41 42 4c 45       ALTER TABLE
c2d0: 20 74 35 20 41 44 44 20 43 4f 4c 55 4d 4e 20 6e   t5 ADD COLUMN n
c2e0: 65 77 5f 63 6f 6c 5f 33 0a 20 20 20 20 7d 0a 20  ew_col_3.    }. 
c2f0: 20 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f   } {1 {not autho
c300: 72 69 7a 65 64 7d 7d 0a 20 20 64 6f 5f 74 65 73  rized}}.  do_tes
c310: 74 20 61 75 74 68 2d 31 2e 33 30 37 20 7b 0a 20  t auth-1.307 {. 
c320: 20 20 20 73 65 74 20 78 20 5b 65 78 65 63 73 71     set x [execsq
c330: 6c 20 7b 53 45 4c 45 43 54 20 73 71 6c 20 46 52  l {SELECT sql FR
c340: 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  OM sqlite_temp_m
c350: 61 73 74 65 72 20 57 48 45 52 45 20 74 79 70 65  aster WHERE type
c360: 3d 27 74 35 27 7d 5d 0a 20 20 20 20 72 65 67 65  ='t5'}].    rege
c370: 78 70 20 6e 65 77 5f 63 6f 6c 5f 33 20 24 78 0a  xp new_col_3 $x.
c380: 20 20 7d 20 7b 30 7d 0a 0a 20 20 64 6f 5f 74 65    } {0}..  do_te
c390: 73 74 20 61 75 74 68 2d 31 2e 33 30 38 20 7b 0a  st auth-1.308 {.
c3a0: 20 20 20 20 73 65 74 20 61 75 74 68 61 72 67 73      set authargs
c3b0: 0a 20 20 7d 20 7b 6d 61 69 6e 20 74 35 20 7b 7d  .  } {main t5 {}
c3c0: 20 7b 7d 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b   {}}.  execsql {
c3d0: 44 52 4f 50 20 54 41 42 4c 45 20 74 35 7d 0a 7d  DROP TABLE t5}.}
c3e0: 20 3b 23 20 69 66 63 61 70 61 62 6c 65 20 61 6c   ;# ifcapable al
c3f0: 74 65 72 74 61 62 6c 65 0a 0a 64 6f 5f 74 65 73  tertable..do_tes
c400: 74 20 61 75 74 68 2d 32 2e 31 20 7b 0a 20 20 70  t auth-2.1 {.  p
c410: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
c420: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
c430: 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g4} {.    if {$c
c440: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45 41  ode=="SQLITE_REA
c450: 44 22 20 26 26 20 24 61 72 67 31 3d 3d 22 74 33  D" && $arg1=="t3
c460: 22 20 26 26 20 24 61 72 67 32 3d 3d 22 78 22 7d  " && $arg2=="x"}
c470: 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   {.      return 
c480: 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20  SQLITE_DENY.    
c490: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
c4a0: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 64 62 20  ITE_OK.  }.  db 
c4b0: 61 75 74 68 6f 72 69 7a 65 72 20 3a 3a 61 75 74  authorizer ::aut
c4c0: 68 0a 20 20 65 78 65 63 73 71 6c 20 7b 43 52 45  h.  execsql {CRE
c4d0: 41 54 45 20 54 41 42 4c 45 20 74 33 28 78 20 49  ATE TABLE t3(x I
c4e0: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
c4f0: 45 59 2c 20 79 2c 20 7a 29 7d 0a 20 20 63 61 74  EY, y, z)}.  cat
c500: 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20  chsql {SELECT * 
c510: 46 52 4f 4d 20 74 33 7d 0a 7d 20 7b 31 20 7b 61  FROM t3}.} {1 {a
c520: 63 63 65 73 73 20 74 6f 20 74 33 2e 78 20 69 73  ccess to t3.x is
c530: 20 70 72 6f 68 69 62 69 74 65 64 7d 7d 0a 64 6f   prohibited}}.do
c540: 5f 74 65 73 74 20 61 75 74 68 2d 32 2e 31 20 7b  _test auth-2.1 {
c550: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 53 45 4c  .  catchsql {SEL
c560: 45 43 54 20 79 2c 7a 20 46 52 4f 4d 20 74 33 7d  ECT y,z FROM t3}
c570: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
c580: 74 20 61 75 74 68 2d 32 2e 32 20 7b 0a 20 20 63  t auth-2.2 {.  c
c590: 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20  atchsql {SELECT 
c5a0: 52 4f 57 49 44 2c 79 2c 7a 20 46 52 4f 4d 20 74  ROWID,y,z FROM t
c5b0: 33 7d 0a 7d 20 7b 31 20 7b 61 63 63 65 73 73 20  3}.} {1 {access 
c5c0: 74 6f 20 74 33 2e 78 20 69 73 20 70 72 6f 68 69  to t3.x is prohi
c5d0: 62 69 74 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20  bited}}.do_test 
c5e0: 61 75 74 68 2d 32 2e 33 20 7b 0a 20 20 63 61 74  auth-2.3 {.  cat
c5f0: 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 4f 49  chsql {SELECT OI
c600: 44 2c 79 2c 7a 20 46 52 4f 4d 20 74 33 7d 0a 7d  D,y,z FROM t3}.}
c610: 20 7b 31 20 7b 61 63 63 65 73 73 20 74 6f 20 74   {1 {access to t
c620: 33 2e 78 20 69 73 20 70 72 6f 68 69 62 69 74 65  3.x is prohibite
c630: 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  d}}.do_test auth
c640: 2d 32 2e 34 20 7b 0a 20 20 70 72 6f 63 20 61 75  -2.4 {.  proc au
c650: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
c660: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
c670: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
c680: 53 51 4c 49 54 45 5f 52 45 41 44 22 20 26 26 20  SQLITE_READ" && 
c690: 24 61 72 67 31 3d 3d 22 74 33 22 20 26 26 20 24  $arg1=="t3" && $
c6a0: 61 72 67 32 3d 3d 22 78 22 7d 20 7b 0a 20 20 20  arg2=="x"} {.   
c6b0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
c6c0: 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20  _IGNORE.    }.  
c6d0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
c6e0: 4f 4b 0a 20 20 7d 0a 20 20 65 78 65 63 73 71 6c  OK.  }.  execsql
c6f0: 20 7b 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33   {INSERT INTO t3
c700: 20 56 41 4c 55 45 53 28 34 34 2c 35 35 2c 36 36   VALUES(44,55,66
c710: 29 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 53  )}.  catchsql {S
c720: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 7d  ELECT * FROM t3}
c730: 0a 7d 20 7b 30 20 7b 7b 7d 20 35 35 20 36 36 7d  .} {0 {{} 55 66}
c740: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 32  }.do_test auth-2
c750: 2e 35 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  .5 {.  catchsql 
c760: 7b 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 79 2c  {SELECT rowid,y,
c770: 7a 20 46 52 4f 4d 20 74 33 7d 0a 7d 20 7b 30 20  z FROM t3}.} {0 
c780: 7b 7b 7d 20 35 35 20 36 36 7d 7d 0a 64 6f 5f 74  {{} 55 66}}.do_t
c790: 65 73 74 20 61 75 74 68 2d 32 2e 36 20 7b 0a 20  est auth-2.6 {. 
c7a0: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
c7b0: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
c7c0: 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg4} {.    if {
c7d0: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 52  $code=="SQLITE_R
c7e0: 45 41 44 22 20 26 26 20 24 61 72 67 31 3d 3d 22  EAD" && $arg1=="
c7f0: 74 33 22 20 26 26 20 24 61 72 67 32 3d 3d 22 52  t3" && $arg2=="R
c800: 4f 57 49 44 22 7d 20 7b 0a 20 20 20 20 20 20 72  OWID"} {.      r
c810: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e  eturn SQLITE_IGN
c820: 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  ORE.    }.    re
c830: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
c840: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 53   }.  catchsql {S
c850: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 7d  ELECT * FROM t3}
c860: 0a 7d 20 7b 30 20 7b 34 34 20 35 35 20 36 36 7d  .} {0 {44 55 66}
c870: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 32  }.do_test auth-2
c880: 2e 37 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  .7 {.  catchsql 
c890: 7b 53 45 4c 45 43 54 20 52 4f 57 49 44 2c 79 2c  {SELECT ROWID,y,
c8a0: 7a 20 46 52 4f 4d 20 74 33 7d 0a 7d 20 7b 30 20  z FROM t3}.} {0 
c8b0: 7b 34 34 20 35 35 20 36 36 7d 7d 0a 64 6f 5f 74  {44 55 66}}.do_t
c8c0: 65 73 74 20 61 75 74 68 2d 32 2e 38 20 7b 0a 20  est auth-2.8 {. 
c8d0: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
c8e0: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
c8f0: 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg4} {.    if {
c900: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 52  $code=="SQLITE_R
c910: 45 41 44 22 20 26 26 20 24 61 72 67 31 3d 3d 22  EAD" && $arg1=="
c920: 74 32 22 20 26 26 20 24 61 72 67 32 3d 3d 22 52  t2" && $arg2=="R
c930: 4f 57 49 44 22 7d 20 7b 0a 20 20 20 20 20 20 72  OWID"} {.      r
c940: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e  eturn SQLITE_IGN
c950: 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  ORE.    }.    re
c960: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
c970: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 53   }.  catchsql {S
c980: 45 4c 45 43 54 20 52 4f 57 49 44 2c 62 2c 63 20  ELECT ROWID,b,c 
c990: 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 30 20 7b 7b  FROM t2}.} {0 {{
c9a0: 7d 20 32 20 33 33 20 7b 7d 20 38 20 39 7d 7d 0a  } 2 33 {} 8 9}}.
c9b0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 32 2e 39  do_test auth-2.9
c9c0: 2e 31 20 7b 0a 20 20 23 20 57 65 20 68 61 76 65  .1 {.  # We have
c9d0: 20 74 6f 20 66 6c 75 73 68 20 74 68 65 20 63 61   to flush the ca
c9e0: 63 68 65 20 68 65 72 65 20 69 6e 20 63 61 73 65  che here in case
c9f0: 20 74 68 65 20 54 63 6c 20 69 6e 74 65 72 66 61   the Tcl interfa
ca00: 63 65 20 74 72 69 65 73 20 74 6f 0a 20 20 23 20  ce tries to.  # 
ca10: 72 65 75 73 65 20 61 20 73 74 61 74 65 6d 65 6e  reuse a statemen
ca20: 74 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20  t compiled with 
ca30: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
ca40: 76 32 28 29 2e 20 49 6e 20 74 68 69 73 20 63 61  v2(). In this ca
ca50: 73 65 2c 0a 20 20 23 20 74 68 65 20 66 69 72 73  se,.  # the firs
ca60: 74 20 65 72 72 6f 72 20 65 6e 63 6f 75 6e 74 65  t error encounte
ca70: 72 65 64 20 69 73 20 61 6e 20 53 51 4c 49 54 45  red is an SQLITE
ca80: 5f 53 43 48 45 4d 41 20 65 72 72 6f 72 2e 20 54  _SCHEMA error. T
ca90: 68 65 6e 2c 20 77 68 65 6e 0a 20 20 23 20 74 72  hen, when.  # tr
caa0: 79 69 6e 67 20 74 6f 20 72 65 63 6f 6d 70 69 6c  ying to recompil
cab0: 65 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 2c  e the statement,
cac0: 20 74 68 65 20 61 75 74 68 6f 72 69 7a 61 74 69   the authorizati
cad0: 6f 6e 20 65 72 72 6f 72 20 69 73 20 65 6e 63 6f  on error is enco
cae0: 75 6e 74 65 72 65 64 2e 0a 20 20 23 20 49 66 20  untered..  # If 
caf0: 77 65 20 64 6f 20 6e 6f 74 20 66 6c 75 73 68 20  we do not flush 
cb00: 74 68 65 20 63 61 63 68 65 2c 20 74 68 65 20 63  the cache, the c
cb10: 6f 72 72 65 63 74 20 65 72 72 6f 72 20 6d 65 73  orrect error mes
cb20: 73 61 67 65 20 69 73 20 72 65 74 75 72 6e 65 64  sage is returned
cb30: 2c 20 62 75 74 0a 20 20 23 20 74 68 65 20 65 72  , but.  # the er
cb40: 72 6f 72 20 63 6f 64 65 20 69 73 20 53 51 4c 49  ror code is SQLI
cb50: 54 45 5f 53 43 48 45 4d 41 2c 20 6e 6f 74 20 53  TE_SCHEMA, not S
cb60: 51 4c 49 54 45 5f 45 52 52 4f 52 20 61 73 20 72  QLITE_ERROR as r
cb70: 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20 74  equired by the t
cb80: 65 73 74 0a 20 20 23 20 63 61 73 65 20 61 66 74  est.  # case aft
cb90: 65 72 20 74 68 69 73 20 6f 6e 65 2e 0a 20 20 23  er this one..  #
cba0: 0a 20 20 64 62 20 63 61 63 68 65 20 66 6c 75 73  .  db cache flus
cbb0: 68 0a 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b  h..  proc auth {
cbc0: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
cbd0: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
cbe0: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
cbf0: 54 45 5f 52 45 41 44 22 20 26 26 20 24 61 72 67  TE_READ" && $arg
cc00: 31 3d 3d 22 74 32 22 20 26 26 20 24 61 72 67 32  1=="t2" && $arg2
cc10: 3d 3d 22 52 4f 57 49 44 22 7d 20 7b 0a 20 20 20  =="ROWID"} {.   
cc20: 20 20 20 72 65 74 75 72 6e 20 62 6f 67 75 73 0a     return bogus.
cc30: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
cc40: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
cc50: 20 63 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43   catchsql {SELEC
cc60: 54 20 52 4f 57 49 44 2c 62 2c 63 20 46 52 4f 4d  T ROWID,b,c FROM
cc70: 20 74 32 7d 0a 7d 20 7b 31 20 7b 69 6c 6c 65 67   t2}.} {1 {illeg
cc80: 61 6c 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20  al return value 
cc90: 28 39 39 39 29 20 66 72 6f 6d 20 74 68 65 20 61  (999) from the a
cca0: 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 66 75 6e  uthorization fun
ccb0: 63 74 69 6f 6e 20 2d 20 73 68 6f 75 6c 64 20 62  ction - should b
ccc0: 65 20 53 51 4c 49 54 45 5f 4f 4b 2c 20 53 51 4c  e SQLITE_OK, SQL
ccd0: 49 54 45 5f 49 47 4e 4f 52 45 2c 20 6f 72 20 53  ITE_IGNORE, or S
cce0: 51 4c 49 54 45 5f 44 45 4e 59 7d 7d 0a 64 6f 5f  QLITE_DENY}}.do_
ccf0: 74 65 73 74 20 61 75 74 68 2d 32 2e 39 2e 32 20  test auth-2.9.2 
cd00: 7b 0a 20 20 64 62 20 65 72 72 6f 72 63 6f 64 65  {.  db errorcode
cd10: 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 61  .} {1}.do_test a
cd20: 75 74 68 2d 32 2e 31 30 20 7b 0a 20 20 70 72 6f  uth-2.10 {.  pro
cd30: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
cd40: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
cd50: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
cd60: 65 3d 3d 22 53 51 4c 49 54 45 5f 53 45 4c 45 43  e=="SQLITE_SELEC
cd70: 54 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75  T"} {.      retu
cd80: 72 6e 20 62 6f 67 75 73 0a 20 20 20 20 7d 0a 20  rn bogus.    }. 
cd90: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
cda0: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
cdb0: 71 6c 20 7b 53 45 4c 45 43 54 20 52 4f 57 49 44  ql {SELECT ROWID
cdc0: 2c 62 2c 63 20 46 52 4f 4d 20 74 32 7d 0a 7d 20  ,b,c FROM t2}.} 
cdd0: 7b 31 20 7b 69 6c 6c 65 67 61 6c 20 72 65 74 75  {1 {illegal retu
cde0: 72 6e 20 76 61 6c 75 65 20 28 31 29 20 66 72 6f  rn value (1) fro
cdf0: 6d 20 74 68 65 20 61 75 74 68 6f 72 69 7a 61 74  m the authorizat
ce00: 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 2d 20 73  ion function - s
ce10: 68 6f 75 6c 64 20 62 65 20 53 51 4c 49 54 45 5f  hould be SQLITE_
ce20: 4f 4b 2c 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52  OK, SQLITE_IGNOR
ce30: 45 2c 20 6f 72 20 53 51 4c 49 54 45 5f 44 45 4e  E, or SQLITE_DEN
ce40: 59 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  Y}}.do_test auth
ce50: 2d 32 2e 31 31 2e 31 20 7b 0a 20 20 70 72 6f 63  -2.11.1 {.  proc
ce60: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
ce70: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
ce80: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
ce90: 3d 3d 22 53 51 4c 49 54 45 5f 52 45 41 44 22 20  =="SQLITE_READ" 
cea0: 26 26 20 24 61 72 67 32 3d 3d 22 61 22 7d 20 7b  && $arg2=="a"} {
ceb0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
cec0: 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20  LITE_IGNORE.    
ced0: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
cee0: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
cef0: 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20  chsql {SELECT * 
cf00: 46 52 4f 4d 20 74 32 2c 20 74 33 7d 0a 7d 20 7b  FROM t2, t3}.} {
cf10: 30 20 7b 7b 7d 20 32 20 33 33 20 34 34 20 35 35  0 {{} 2 33 44 55
cf20: 20 36 36 20 7b 7d 20 38 20 39 20 34 34 20 35 35   66 {} 8 9 44 55
cf30: 20 36 36 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75   66}}.do_test au
cf40: 74 68 2d 32 2e 31 31 2e 32 20 7b 0a 20 20 70 72  th-2.11.2 {.  pr
cf50: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
cf60: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
cf70: 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f  4} {.    if {$co
cf80: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45 41 44  de=="SQLITE_READ
cf90: 22 20 26 26 20 24 61 72 67 32 3d 3d 22 78 22 7d  " && $arg2=="x"}
cfa0: 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   {.      return 
cfb0: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20  SQLITE_IGNORE.  
cfc0: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
cfd0: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
cfe0: 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20  atchsql {SELECT 
cff0: 2a 20 46 52 4f 4d 20 74 32 2c 20 74 33 7d 0a 7d  * FROM t2, t3}.}
d000: 20 7b 30 20 7b 31 31 20 32 20 33 33 20 7b 7d 20   {0 {11 2 33 {} 
d010: 35 35 20 36 36 20 37 20 38 20 39 20 7b 7d 20 35  55 66 7 8 9 {} 5
d020: 35 20 36 36 7d 7d 0a 0a 23 20 4d 61 6b 65 20 73  5 66}}..# Make s
d030: 75 72 65 20 74 68 65 20 4f 4c 44 20 61 6e 64 20  ure the OLD and 
d040: 4e 45 57 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  NEW pseudo-table
d050: 73 20 6f 66 20 61 20 74 72 69 67 67 65 72 20 67  s of a trigger g
d060: 65 74 20 61 75 74 68 6f 72 69 7a 65 64 2e 0a 23  et authorized..#
d070: 0a 69 66 63 61 70 61 62 6c 65 20 74 72 69 67 67  .ifcapable trigg
d080: 65 72 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 61  er {.  do_test a
d090: 75 74 68 2d 33 2e 31 20 7b 0a 20 20 20 20 70 72  uth-3.1 {.    pr
d0a0: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
d0b0: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
d0c0: 34 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72  4} {.      retur
d0d0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20  n SQLITE_OK.    
d0e0: 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  }.    execsql {.
d0f0: 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42        CREATE TAB
d100: 4c 45 20 74 78 28 61 31 2c 61 32 2c 62 31 2c 62  LE tx(a1,a2,b1,b
d110: 32 2c 63 31 2c 63 32 29 3b 0a 20 20 20 20 20 20  2,c1,c2);.      
d120: 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 72  CREATE TRIGGER r
d130: 31 20 41 46 54 45 52 20 55 50 44 41 54 45 20 4f  1 AFTER UPDATE O
d140: 4e 20 74 32 20 46 4f 52 20 45 41 43 48 20 52 4f  N t2 FOR EACH RO
d150: 57 20 42 45 47 49 4e 0a 20 20 20 20 20 20 20 20  W BEGIN.        
d160: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 78 20 56  INSERT INTO tx V
d170: 41 4c 55 45 53 28 4f 4c 44 2e 61 2c 4e 45 57 2e  ALUES(OLD.a,NEW.
d180: 61 2c 4f 4c 44 2e 62 2c 4e 45 57 2e 62 2c 4f 4c  a,OLD.b,NEW.b,OL
d190: 44 2e 63 2c 4e 45 57 2e 63 29 3b 0a 20 20 20 20  D.c,NEW.c);.    
d1a0: 20 20 45 4e 44 3b 0a 20 20 20 20 20 20 55 50 44    END;.      UPD
d1b0: 41 54 45 20 74 32 20 53 45 54 20 61 3d 61 2b 31  ATE t2 SET a=a+1
d1c0: 3b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 2a  ;.      SELECT *
d1d0: 20 46 52 4f 4d 20 74 78 3b 0a 20 20 20 20 7d 0a   FROM tx;.    }.
d1e0: 20 20 7d 20 7b 31 31 20 31 32 20 32 20 32 20 33    } {11 12 2 2 3
d1f0: 33 20 33 33 20 37 20 38 20 38 20 38 20 39 20 39  3 33 7 8 8 8 9 9
d200: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68  }.  do_test auth
d210: 2d 33 2e 32 20 7b 0a 20 20 20 20 70 72 6f 63 20  -3.2 {.    proc 
d220: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
d230: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
d240: 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64  {.      if {$cod
d250: 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45 41 44 22  e=="SQLITE_READ"
d260: 20 26 26 20 24 61 72 67 31 3d 3d 22 74 32 22 20   && $arg1=="t2" 
d270: 26 26 20 24 61 72 67 32 3d 3d 22 63 22 7d 20 7b  && $arg2=="c"} {
d280: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
d290: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20  SQLITE_IGNORE.  
d2a0: 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75      }.      retu
d2b0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20  rn SQLITE_OK.   
d2c0: 20 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   }.    execsql {
d2d0: 0a 20 20 20 20 20 20 44 45 4c 45 54 45 20 46 52  .      DELETE FR
d2e0: 4f 4d 20 74 78 3b 0a 20 20 20 20 20 20 55 50 44  OM tx;.      UPD
d2f0: 41 54 45 20 74 32 20 53 45 54 20 61 3d 61 2b 31  ATE t2 SET a=a+1
d300: 30 30 3b 0a 20 20 20 20 20 20 53 45 4c 45 43 54  00;.      SELECT
d310: 20 2a 20 46 52 4f 4d 20 74 78 3b 0a 20 20 20 20   * FROM tx;.    
d320: 7d 0a 20 20 7d 20 7b 31 32 20 31 31 32 20 32 20  }.  } {12 112 2 
d330: 32 20 7b 7d 20 7b 7d 20 38 20 31 30 38 20 38 20  2 {} {} 8 108 8 
d340: 38 20 7b 7d 20 7b 7d 7d 0a 7d 20 3b 23 20 69 66  8 {} {}}.} ;# if
d350: 63 61 70 61 62 6c 65 20 74 72 69 67 67 65 72 0a  capable trigger.
d360: 0a 23 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65  .# Make sure the
d370: 20 6e 61 6d 65 73 20 6f 66 20 76 69 65 77 73 20   names of views 
d380: 61 6e 64 20 74 72 69 67 67 65 72 73 20 61 72 65  and triggers are
d390: 20 70 61 73 73 65 64 20 6f 6e 20 6f 6e 20 61 72   passed on on ar
d3a0: 67 34 2e 0a 23 0a 69 66 63 61 70 61 62 6c 65 20  g4..#.ifcapable 
d3b0: 74 72 69 67 67 65 72 20 7b 0a 64 6f 5f 74 65 73  trigger {.do_tes
d3c0: 74 20 61 75 74 68 2d 34 2e 31 20 7b 0a 20 20 70  t auth-4.1 {.  p
d3d0: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
d3e0: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
d3f0: 67 34 7d 20 7b 0a 20 20 20 20 6c 61 70 70 65 6e  g4} {.    lappen
d400: 64 20 3a 3a 61 75 74 68 61 72 67 73 20 24 63 6f  d ::authargs $co
d410: 64 65 20 24 61 72 67 31 20 24 61 72 67 32 20 24  de $arg1 $arg2 $
d420: 61 72 67 33 20 24 61 72 67 34 0a 20 20 20 20 72  arg3 $arg4.    r
d430: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
d440: 20 20 7d 0a 20 20 73 65 74 20 61 75 74 68 61 72    }.  set authar
d450: 67 73 20 7b 7d 0a 20 20 65 78 65 63 73 71 6c 20  gs {}.  execsql 
d460: 7b 0a 20 20 20 20 55 50 44 41 54 45 20 74 32 20  {.    UPDATE t2 
d470: 53 45 54 20 61 3d 61 2b 31 3b 0a 20 20 7d 0a 20  SET a=a+1;.  }. 
d480: 20 73 65 74 20 61 75 74 68 61 72 67 73 0a 7d 20   set authargs.} 
d490: 5b 6c 69 73 74 20 5c 0a 20 20 53 51 4c 49 54 45  [list \.  SQLITE
d4a0: 5f 52 45 41 44 20 20 20 74 32 20 61 20 20 6d 61  _READ   t2 a  ma
d4b0: 69 6e 20 7b 7d 20 5c 0a 20 20 53 51 4c 49 54 45  in {} \.  SQLITE
d4c0: 5f 55 50 44 41 54 45 20 74 32 20 61 20 20 6d 61  _UPDATE t2 a  ma
d4d0: 69 6e 20 7b 7d 20 5c 0a 20 20 53 51 4c 49 54 45  in {} \.  SQLITE
d4e0: 5f 49 4e 53 45 52 54 20 74 78 20 7b 7d 20 6d 61  _INSERT tx {} ma
d4f0: 69 6e 20 72 31 20 5c 0a 20 20 53 51 4c 49 54 45  in r1 \.  SQLITE
d500: 5f 52 45 41 44 20 20 20 74 32 20 61 20 20 6d 61  _READ   t2 a  ma
d510: 69 6e 20 72 31 20 5c 0a 20 20 53 51 4c 49 54 45  in r1 \.  SQLITE
d520: 5f 52 45 41 44 20 20 20 74 32 20 61 20 20 6d 61  _READ   t2 a  ma
d530: 69 6e 20 72 31 20 5c 0a 20 20 53 51 4c 49 54 45  in r1 \.  SQLITE
d540: 5f 52 45 41 44 20 20 20 74 32 20 62 20 20 6d 61  _READ   t2 b  ma
d550: 69 6e 20 72 31 20 5c 0a 20 20 53 51 4c 49 54 45  in r1 \.  SQLITE
d560: 5f 52 45 41 44 20 20 20 74 32 20 62 20 20 6d 61  _READ   t2 b  ma
d570: 69 6e 20 72 31 20 5c 0a 20 20 53 51 4c 49 54 45  in r1 \.  SQLITE
d580: 5f 52 45 41 44 20 20 20 74 32 20 63 20 20 6d 61  _READ   t2 c  ma
d590: 69 6e 20 72 31 20 5c 0a 20 20 53 51 4c 49 54 45  in r1 \.  SQLITE
d5a0: 5f 52 45 41 44 20 20 20 74 32 20 63 20 20 6d 61  _READ   t2 c  ma
d5b0: 69 6e 20 72 31 5d 0a 7d 0a 0a 69 66 63 61 70 61  in r1].}..ifcapa
d5c0: 62 6c 65 20 7b 76 69 65 77 20 26 26 20 74 72 69  ble {view && tri
d5d0: 67 67 65 72 7d 20 7b 0a 64 6f 5f 74 65 73 74 20  gger} {.do_test 
d5e0: 61 75 74 68 2d 34 2e 32 20 7b 0a 20 20 65 78 65  auth-4.2 {.  exe
d5f0: 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  csql {.    CREAT
d600: 45 20 56 49 45 57 20 76 31 20 41 53 20 53 45 4c  E VIEW v1 AS SEL
d610: 45 43 54 20 61 2b 62 20 41 53 20 78 20 46 52 4f  ECT a+b AS x FRO
d620: 4d 20 74 32 3b 0a 20 20 20 20 43 52 45 41 54 45  M t2;.    CREATE
d630: 20 54 41 42 4c 45 20 76 31 63 68 6e 67 28 78 31   TABLE v1chng(x1
d640: 2c 78 32 29 3b 0a 20 20 20 20 43 52 45 41 54 45  ,x2);.    CREATE
d650: 20 54 52 49 47 47 45 52 20 72 32 20 49 4e 53 54   TRIGGER r2 INST
d660: 45 41 44 20 4f 46 20 55 50 44 41 54 45 20 4f 4e  EAD OF UPDATE ON
d670: 20 76 31 20 42 45 47 49 4e 0a 20 20 20 20 20 20   v1 BEGIN.      
d680: 49 4e 53 45 52 54 20 49 4e 54 4f 20 76 31 63 68  INSERT INTO v1ch
d690: 6e 67 20 56 41 4c 55 45 53 28 4f 4c 44 2e 78 2c  ng VALUES(OLD.x,
d6a0: 4e 45 57 2e 78 29 3b 0a 20 20 20 20 45 4e 44 3b  NEW.x);.    END;
d6b0: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
d6c0: 4f 4d 20 76 31 3b 0a 20 20 7d 0a 7d 20 7b 31 31  OM v1;.  }.} {11
d6d0: 35 20 31 31 37 7d 0a 64 6f 5f 74 65 73 74 20 61  5 117}.do_test a
d6e0: 75 74 68 2d 34 2e 33 20 7b 0a 20 20 73 65 74 20  uth-4.3 {.  set 
d6f0: 61 75 74 68 61 72 67 73 20 7b 7d 0a 20 20 65 78  authargs {}.  ex
d700: 65 63 73 71 6c 20 7b 0a 20 20 20 20 55 50 44 41  ecsql {.    UPDA
d710: 54 45 20 76 31 20 53 45 54 20 78 3d 31 20 57 48  TE v1 SET x=1 WH
d720: 45 52 45 20 78 3d 31 31 37 0a 20 20 7d 0a 20 20  ERE x=117.  }.  
d730: 73 65 74 20 61 75 74 68 61 72 67 73 0a 7d 20 5b  set authargs.} [
d740: 6c 69 73 74 20 5c 0a 20 20 53 51 4c 49 54 45 5f  list \.  SQLITE_
d750: 55 50 44 41 54 45 20 76 31 20 20 20 20 20 78 20  UPDATE v1     x 
d760: 20 6d 61 69 6e 20 7b 7d 20 5c 0a 20 20 53 51 4c   main {} \.  SQL
d770: 49 54 45 5f 49 4e 53 45 52 54 20 76 31 63 68 6e  ITE_INSERT v1chn
d780: 67 20 7b 7d 20 6d 61 69 6e 20 72 32 20 5c 0a 20  g {} main r2 \. 
d790: 20 53 51 4c 49 54 45 5f 52 45 41 44 20 20 20 76   SQLITE_READ   v
d7a0: 31 20 20 20 20 20 78 20 20 6d 61 69 6e 20 72 32  1     x  main r2
d7b0: 20 5c 0a 20 20 53 51 4c 49 54 45 5f 52 45 41 44   \.  SQLITE_READ
d7c0: 20 20 20 76 31 20 20 20 20 20 78 20 20 6d 61 69     v1     x  mai
d7d0: 6e 20 72 32 20 5c 0a 20 20 53 51 4c 49 54 45 5f  n r2 \.  SQLITE_
d7e0: 53 45 4c 45 43 54 20 7b 7d 20 20 20 20 20 7b 7d  SELECT {}     {}
d7f0: 20 7b 7d 20 20 20 76 31 20 5c 0a 20 20 53 51 4c   {}   v1 \.  SQL
d800: 49 54 45 5f 52 45 41 44 20 20 20 74 32 20 20 20  ITE_READ   t2   
d810: 20 20 61 20 20 6d 61 69 6e 20 76 31 20 5c 0a 20    a  main v1 \. 
d820: 20 53 51 4c 49 54 45 5f 52 45 41 44 20 20 20 74   SQLITE_READ   t
d830: 32 20 20 20 20 20 62 20 20 6d 61 69 6e 20 76 31  2     b  main v1
d840: 20 5c 0a 20 20 53 51 4c 49 54 45 5f 53 45 4c 45   \.  SQLITE_SELE
d850: 43 54 20 7b 7d 20 20 20 20 20 7b 7d 20 7b 7d 20  CT {}     {} {} 
d860: 20 20 7b 7d 20 5c 0a 20 20 53 51 4c 49 54 45 5f    {} \.  SQLITE_
d870: 52 45 41 44 20 20 20 76 31 20 20 20 20 20 78 20  READ   v1     x 
d880: 20 6d 61 69 6e 20 76 31 20 5c 0a 5d 0a 64 6f 5f   main v1 \.].do_
d890: 74 65 73 74 20 61 75 74 68 2d 34 2e 34 20 7b 0a  test auth-4.4 {.
d8a0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
d8b0: 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 72  CREATE TRIGGER r
d8c0: 33 20 49 4e 53 54 45 41 44 20 4f 46 20 44 45 4c  3 INSTEAD OF DEL
d8d0: 45 54 45 20 4f 4e 20 76 31 20 42 45 47 49 4e 0a  ETE ON v1 BEGIN.
d8e0: 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54        INSERT INT
d8f0: 4f 20 76 31 63 68 6e 67 20 56 41 4c 55 45 53 28  O v1chng VALUES(
d900: 4f 4c 44 2e 78 2c 4e 55 4c 4c 29 3b 0a 20 20 20  OLD.x,NULL);.   
d910: 20 45 4e 44 3b 0a 20 20 20 20 53 45 4c 45 43 54   END;.    SELECT
d920: 20 2a 20 46 52 4f 4d 20 76 31 3b 0a 20 20 7d 0a   * FROM v1;.  }.
d930: 7d 20 7b 31 31 35 20 31 31 37 7d 0a 64 6f 5f 74  } {115 117}.do_t
d940: 65 73 74 20 61 75 74 68 2d 34 2e 35 20 7b 0a 20  est auth-4.5 {. 
d950: 20 73 65 74 20 61 75 74 68 61 72 67 73 20 7b 7d   set authargs {}
d960: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
d970: 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 76 31 20   DELETE FROM v1 
d980: 57 48 45 52 45 20 78 3d 31 31 37 0a 20 20 7d 0a  WHERE x=117.  }.
d990: 20 20 73 65 74 20 61 75 74 68 61 72 67 73 0a 7d    set authargs.}
d9a0: 20 5b 6c 69 73 74 20 5c 0a 20 20 53 51 4c 49 54   [list \.  SQLIT
d9b0: 45 5f 44 45 4c 45 54 45 20 76 31 20 20 20 20 20  E_DELETE v1     
d9c0: 7b 7d 20 6d 61 69 6e 20 7b 7d 20 5c 0a 20 20 53  {} main {} \.  S
d9d0: 51 4c 49 54 45 5f 49 4e 53 45 52 54 20 76 31 63  QLITE_INSERT v1c
d9e0: 68 6e 67 20 7b 7d 20 6d 61 69 6e 20 72 33 20 5c  hng {} main r3 \
d9f0: 0a 20 20 53 51 4c 49 54 45 5f 52 45 41 44 20 20  .  SQLITE_READ  
da00: 20 76 31 20 20 20 20 20 78 20 20 6d 61 69 6e 20   v1     x  main 
da10: 72 33 20 5c 0a 20 20 53 51 4c 49 54 45 5f 53 45  r3 \.  SQLITE_SE
da20: 4c 45 43 54 20 7b 7d 20 20 20 20 20 7b 7d 20 7b  LECT {}     {} {
da30: 7d 20 20 20 76 31 20 5c 0a 20 20 53 51 4c 49 54  }   v1 \.  SQLIT
da40: 45 5f 52 45 41 44 20 20 20 74 32 20 20 20 20 20  E_READ   t2     
da50: 61 20 20 6d 61 69 6e 20 76 31 20 5c 0a 20 20 53  a  main v1 \.  S
da60: 51 4c 49 54 45 5f 52 45 41 44 20 20 20 74 32 20  QLITE_READ   t2 
da70: 20 20 20 20 62 20 20 6d 61 69 6e 20 76 31 20 5c      b  main v1 \
da80: 0a 20 20 53 51 4c 49 54 45 5f 53 45 4c 45 43 54  .  SQLITE_SELECT
da90: 20 7b 7d 20 20 20 20 20 7b 7d 20 7b 7d 20 20 20   {}     {} {}   
daa0: 7b 7d 20 5c 0a 20 20 53 51 4c 49 54 45 5f 52 45  {} \.  SQLITE_RE
dab0: 41 44 20 20 20 76 31 20 20 20 20 20 78 20 20 6d  AD   v1     x  m
dac0: 61 69 6e 20 76 31 20 5c 0a 5d 0a 0a 7d 20 3b 23  ain v1 \.]..} ;#
dad0: 20 69 66 63 61 70 61 62 6c 65 20 76 69 65 77 20   ifcapable view 
dae0: 26 26 20 74 72 69 67 67 65 72 0a 0a 23 20 54 69  && trigger..# Ti
daf0: 63 6b 65 74 20 23 31 33 33 38 3a 20 20 4d 61 6b  cket #1338:  Mak
db00: 65 20 73 75 72 65 20 61 75 74 68 65 6e 74 69 63  e sure authentic
db10: 61 74 69 6f 6e 20 77 6f 72 6b 73 20 69 6e 20 74  ation works in t
db20: 68 65 20 70 72 65 73 65 6e 63 65 20 6f 66 20 61  he presence of a
db30: 6e 20 41 53 0a 23 20 63 6c 61 75 73 65 2e 0a 23  n AS.# clause..#
db40: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 35 2e  .do_test auth-5.
db50: 31 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  1 {.  proc auth 
db60: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
db70: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
db80: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
db90: 4b 0a 20 20 7d 0a 20 20 65 78 65 63 73 71 6c 20  K.  }.  execsql 
dba0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 63 6f 75  {.    SELECT cou
dbb0: 6e 74 28 61 29 20 41 53 20 63 6e 74 20 46 52 4f  nt(a) AS cnt FRO
dbc0: 4d 20 74 34 20 4f 52 44 45 52 20 42 59 20 63 6e  M t4 ORDER BY cn
dbd0: 74 0a 20 20 7d 0a 7d 20 7b 31 7d 0a 0a 23 20 54  t.  }.} {1}..# T
dbe0: 69 63 6b 65 74 20 23 31 36 30 37 0a 23 0a 69 66  icket #1607.#.if
dbf0: 63 61 70 61 62 6c 65 20 63 6f 6d 70 6f 75 6e 64  capable compound
dc00: 26 26 73 75 62 71 75 65 72 79 20 7b 0a 20 20 69  &&subquery {.  i
dc10: 66 63 61 70 61 62 6c 65 20 74 72 69 67 67 65 72  fcapable trigger
dc20: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
dc30: 0a 20 20 20 20 20 20 44 52 4f 50 20 54 41 42 4c  .      DROP TABL
dc40: 45 20 74 78 3b 0a 20 20 20 20 7d 0a 20 20 20 20  E tx;.    }.    
dc50: 69 66 63 61 70 61 62 6c 65 20 76 69 65 77 20 7b  ifcapable view {
dc60: 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b  .      execsql {
dc70: 0a 20 20 20 20 20 20 20 20 44 52 4f 50 20 54 41  .        DROP TA
dc80: 42 4c 45 20 76 31 63 68 6e 67 3b 0a 20 20 20 20  BLE v1chng;.    
dc90: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20    }.    }.  }.  
dca0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 35 2e 32  do_test auth-5.2
dcb0: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
dcc0: 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 6e 61  .      SELECT na
dcd0: 6d 65 20 46 52 4f 4d 20 28 0a 20 20 20 20 20 20  me FROM (.      
dce0: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
dcf0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 55 4e  sqlite_master UN
dd00: 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43 54 20 2a  ION ALL SELECT *
dd10: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d   FROM sqlite_tem
dd20: 70 5f 6d 61 73 74 65 72 29 0a 20 20 20 20 20 20  p_master).      
dd30: 57 48 45 52 45 20 74 79 70 65 3d 27 74 61 62 6c  WHERE type='tabl
dd40: 65 27 0a 20 20 20 20 20 20 4f 52 44 45 52 20 42  e'.      ORDER B
dd50: 59 20 6e 61 6d 65 0a 20 20 20 20 7d 0a 20 20 7d  Y name.    }.  }
dd60: 20 7b 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74   {sqlite_stat1 t
dd70: 31 20 74 32 20 74 33 20 74 34 7d 0a 7d 0a 0a 0a  1 t2 t3 t4}.}...
dd80: 72 65 6e 61 6d 65 20 70 72 6f 63 20 7b 7d 0a 72  rename proc {}.r
dd90: 65 6e 61 6d 65 20 70 72 6f 63 5f 72 65 61 6c 20  ename proc_real 
dda0: 70 72 6f 63 0a 0a 0a 66 69 6e 69 73 68 5f 74 65  proc...finish_te
ddb0: 73 74 0a                                         st.