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

Artifact b047105c32da7db70b842fd24056723125ecc2ff:


0000: 23 20 32 30 30 33 20 41 70 72 69 6c 20 34 0a 23  # 2003 April 4.#
0010: 0a 23 20 54 68 65 20 61 75 74 68 6f 72 20 64 69  .# The author di
0020: 73 63 6c 61 69 6d 73 20 63 6f 70 79 72 69 67 68  sclaims copyrigh
0030: 74 20 74 6f 20 74 68 69 73 20 73 6f 75 72 63 65  t to this source
0040: 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63 65   code.  In place
0050: 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e 6f   of.# a legal no
0060: 74 69 63 65 2c 20 68 65 72 65 20 69 73 20 61 20  tice, here is a 
0070: 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20 20  blessing:.#.#   
0080: 20 4d 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64   May you do good
0090: 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 23   and not evil..#
00a0: 20 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64      May you find
00b0: 20 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72   forgiveness for
00c0: 20 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f   yourself and fo
00d0: 72 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 23 20  rgive others..# 
00e0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
00f0: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0100: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0110: 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23 2a 2a 2a  you give..#.#***
0120: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 0a 23 20 54 68 69 73 20 66 69 6c 65  ****.# This file
0170: 20 69 6d 70 6c 65 6d 65 6e 74 73 20 72 65 67 72   implements regr
0180: 65 73 73 69 6f 6e 20 74 65 73 74 73 20 66 6f 72  ession tests for
0190: 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e   SQLite library.
01a0: 20 20 54 68 65 0a 23 20 66 6f 63 75 73 20 6f 66    The.# focus of
01b0: 20 74 68 69 73 20 73 63 72 69 70 74 20 69 73 20   this script is 
01c0: 74 65 73 74 69 6e 67 20 74 68 65 20 73 71 6c 69  testing the sqli
01d0: 74 65 33 5f 73 65 74 5f 61 75 74 68 6f 72 69 7a  te3_set_authoriz
01e0: 65 72 28 29 20 41 50 49 0a 23 20 61 6e 64 20 72  er() API.# and r
01f0: 65 6c 61 74 65 64 20 66 75 6e 63 74 69 6f 6e 61  elated functiona
0200: 6c 69 74 79 2e 0a 23 0a 23 20 24 49 64 3a 20 61  lity..#.# $Id: a
0210: 75 74 68 2e 74 65 73 74 2c 76 20 31 2e 34 36 20  uth.test,v 1.46 
0220: 32 30 30 39 2f 30 37 2f 30 32 20 31 38 3a 34 30  2009/07/02 18:40
0230: 3a 33 35 20 64 61 6e 69 65 6c 6b 31 39 37 37 20  :35 danielk1977 
0240: 45 78 70 20 24 0a 23 0a 0a 73 65 74 20 74 65 73  Exp $.#..set tes
0250: 74 64 69 72 20 5b 66 69 6c 65 20 64 69 72 6e 61  tdir [file dirna
0260: 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f 75 72 63  me $argv0].sourc
0270: 65 20 24 74 65 73 74 64 69 72 2f 74 65 73 74 65  e $testdir/teste
0280: 72 2e 74 63 6c 0a 0a 23 20 64 69 73 61 62 6c 65  r.tcl..# disable
0290: 20 74 68 69 73 20 74 65 73 74 20 69 66 20 74 68   this test if th
02a0: 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  e SQLITE_OMIT_AU
02b0: 54 48 4f 52 49 5a 41 54 49 4f 4e 20 6d 61 63 72  THORIZATION macr
02c0: 6f 20 69 73 0a 23 20 64 65 66 69 6e 65 64 20 64  o is.# defined d
02d0: 75 72 69 6e 67 20 63 6f 6d 70 69 6c 61 74 69 6f  uring compilatio
02e0: 6e 2e 0a 69 66 20 7b 5b 63 61 74 63 68 20 7b 64  n..if {[catch {d
02f0: 62 20 61 75 74 68 20 7b 7d 7d 20 6d 73 67 5d 7d  b auth {}} msg]}
0300: 20 7b 0a 20 20 66 69 6e 69 73 68 5f 74 65 73 74   {.  finish_test
0310: 0a 20 20 72 65 74 75 72 6e 0a 7d 0a 0a 72 65 6e  .  return.}..ren
0320: 61 6d 65 20 70 72 6f 63 20 70 72 6f 63 5f 72 65  ame proc proc_re
0330: 61 6c 0a 70 72 6f 63 5f 72 65 61 6c 20 70 72 6f  al.proc_real pro
0340: 63 20 7b 6e 61 6d 65 20 61 72 67 75 6d 65 6e 74  c {name argument
0350: 73 20 73 63 72 69 70 74 7d 20 7b 0a 20 20 70 72  s script} {.  pr
0360: 6f 63 5f 72 65 61 6c 20 24 6e 61 6d 65 20 24 61  oc_real $name $a
0370: 72 67 75 6d 65 6e 74 73 20 24 73 63 72 69 70 74  rguments $script
0380: 0a 20 20 69 66 20 7b 24 6e 61 6d 65 3d 3d 22 61  .  if {$name=="a
0390: 75 74 68 22 7d 20 7b 0a 20 20 20 20 64 62 20 61  uth"} {.    db a
03a0: 75 74 68 6f 72 69 7a 65 72 20 3a 3a 61 75 74 68  uthorizer ::auth
03b0: 0a 20 20 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20  .  }.}..do_test 
03c0: 61 75 74 68 2d 31 2e 31 2e 31 20 7b 0a 20 20 64  auth-1.1.1 {.  d
03d0: 62 20 63 6c 6f 73 65 0a 20 20 73 65 74 20 3a 3a  b close.  set ::
03e0: 44 42 20 5b 73 71 6c 69 74 65 33 20 64 62 20 74  DB [sqlite3 db t
03f0: 65 73 74 2e 64 62 5d 0a 20 20 70 72 6f 63 20 61  est.db].  proc a
0400: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
0410: 72 67 32 20 61 72 67 33 20 61 72 67 34 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 7d 0a 64 6f 5f 74  OM t2}.} {}.do_t
2810: 65 73 74 20 61 75 74 68 2d 31 2e 35 30 2e 32 20  est auth-1.50.2 
2820: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 49 4e 53  {.  execsql {INS
2830: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
2840: 45 53 28 31 31 2c 20 32 2c 20 33 33 29 7d 0a 7d  ES(11, 2, 33)}.}
2850: 20 7b 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}..do_test aut
2860: 68 2d 31 2e 35 31 20 7b 0a 20 20 70 72 6f 63 20  h-1.51 {.  proc 
2870: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
2880: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
2890: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
28a0: 3d 22 53 51 4c 49 54 45 5f 53 45 4c 45 43 54 22  ="SQLITE_SELECT"
28b0: 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  } {.      return
28c0: 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20   SQLITE_DENY.   
28d0: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
28e0: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
28f0: 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a  tchsql {SELECT *
2900: 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31 20 7b   FROM t2}.} {1 {
2910: 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d  not authorized}}
2920: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
2930: 35 32 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  52 {.  proc auth
2940: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
2950: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
2960: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
2970: 4c 49 54 45 5f 53 45 4c 45 43 54 22 7d 20 7b 0a  LITE_SELECT"} {.
2980: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
2990: 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d  ITE_IGNORE.    }
29a0: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
29b0: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
29c0: 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46  hsql {SELECT * F
29d0: 52 4f 4d 20 74 32 7d 0a 7d 20 7b 30 20 7b 7d 7d  ROM t2}.} {0 {}}
29e0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
29f0: 35 33 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  53 {.  proc auth
2a00: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
2a10: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
2a20: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
2a30: 4c 49 54 45 5f 53 45 4c 45 43 54 22 7d 20 7b 0a  LITE_SELECT"} {.
2a40: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
2a50: 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20  ITE_OK.    }.   
2a60: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
2a70: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
2a80: 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   {SELECT * FROM 
2a90: 74 32 7d 0a 7d 20 7b 30 20 7b 31 31 20 32 20 33  t2}.} {0 {11 2 3
2aa0: 33 7d 7d 0a 0a 23 20 55 70 64 61 74 65 20 66 6f  3}}..# Update fo
2ab0: 72 20 76 65 72 73 69 6f 6e 20 33 3a 20 54 68 65  r version 3: The
2ac0: 72 65 20 75 73 65 64 20 74 6f 20 62 65 20 61 20  re used to be a 
2ad0: 68 61 6e 64 66 75 6c 20 6f 66 20 74 65 73 74 20  handful of test 
2ae0: 68 65 72 65 20 74 68 61 74 0a 23 20 74 65 73 74  here that.# test
2af0: 65 64 20 74 68 65 20 61 75 74 68 6f 72 69 73 61  ed the authorisa
2b00: 74 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 77 69  tion callback wi
2b10: 74 68 20 74 68 65 20 43 4f 50 59 20 63 6f 6d 6d  th the COPY comm
2b20: 61 6e 64 2e 20 54 68 65 20 66 6f 6c 6c 6f 77 69  and. The followi
2b30: 6e 67 0a 23 20 74 65 73 74 20 6d 61 6b 65 73 20  ng.# test makes 
2b40: 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73  the same databas
2b50: 65 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e 73 20  e modifications 
2b60: 61 73 20 74 68 65 79 20 75 73 65 64 20 74 6f 2e  as they used to.
2b70: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
2b80: 35 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  54 {.  execsql {
2b90: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56  INSERT INTO t2 V
2ba0: 41 4c 55 45 53 28 37 2c 20 38 2c 20 39 29 3b 7d  ALUES(7, 8, 9);}
2bb0: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 61 75  .} {}.do_test au
2bc0: 74 68 2d 31 2e 35 35 20 7b 0a 20 20 65 78 65 63  th-1.55 {.  exec
2bd0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52  sql {SELECT * FR
2be0: 4f 4d 20 74 32 7d 0a 7d 20 7b 31 31 20 32 20 33  OM t2}.} {11 2 3
2bf0: 33 20 37 20 38 20 39 7d 0a 0a 64 6f 5f 74 65 73  3 7 8 9}..do_tes
2c00: 74 20 61 75 74 68 2d 31 2e 36 33 20 7b 0a 20 20  t auth-1.63 {.  
2c10: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
2c20: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
2c30: 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg4} {.    if {$
2c40: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45  code=="SQLITE_DE
2c50: 4c 45 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d  LETE" && $arg1==
2c60: 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 7d  "sqlite_master"}
2c70: 20 7b 0a 20 20 20 20 20 20 20 72 65 74 75 72 6e   {.       return
2c80: 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20   SQLITE_DENY.   
2c90: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
2ca0: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
2cb0: 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54 41 42  tchsql {DROP TAB
2cc0: 4c 45 20 74 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74  LE t2}.} {1 {not
2cd0: 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f   authorized}}.do
2ce0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 36 34 20  _test auth-1.64 
2cf0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
2d00: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
2d10: 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b  lite_master}.} {
2d20: 74 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  t2}.do_test auth
2d30: 2d 31 2e 36 35 20 7b 0a 20 20 70 72 6f 63 20 61  -1.65 {.  proc a
2d40: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
2d50: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
2d60: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
2d70: 22 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 22 20  "SQLITE_DELETE" 
2d80: 26 26 20 24 61 72 67 31 3d 3d 22 74 32 22 7d 20  && $arg1=="t2"} 
2d90: 7b 0a 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  {.       return 
2da0: 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20  SQLITE_DENY.    
2db0: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
2dc0: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
2dd0: 63 68 73 71 6c 20 7b 44 52 4f 50 20 54 41 42 4c  chsql {DROP TABL
2de0: 45 20 74 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20  E t2}.} {1 {not 
2df0: 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f  authorized}}.do_
2e00: 74 65 73 74 20 61 75 74 68 2d 31 2e 36 36 20 7b  test auth-1.66 {
2e10: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
2e20: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
2e30: 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74  ite_master}.} {t
2e40: 32 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20 74 65  2}..ifcapable te
2e50: 6d 70 64 62 20 7b 0a 20 20 64 6f 5f 74 65 73 74  mpdb {.  do_test
2e60: 20 61 75 74 68 2d 31 2e 36 37 20 7b 0a 20 20 20   auth-1.67 {.   
2e70: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
2e80: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
2e90: 61 72 67 34 7d 20 7b 0a 20 20 20 20 20 20 69 66  arg4} {.      if
2ea0: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
2eb0: 5f 44 45 4c 45 54 45 22 20 26 26 20 24 61 72 67  _DELETE" && $arg
2ec0: 31 3d 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f  1=="sqlite_temp_
2ed0: 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20  master"} {.     
2ee0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
2ef0: 45 5f 44 45 4e 59 0a 20 20 20 20 20 20 7d 0a 20  E_DENY.      }. 
2f00: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
2f10: 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20  TE_OK.    }.    
2f20: 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54  catchsql {DROP T
2f30: 41 42 4c 45 20 74 31 7d 0a 20 20 7d 20 7b 31 20  ABLE t1}.  } {1 
2f40: 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d  {not authorized}
2f50: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68  }.  do_test auth
2f60: 2d 31 2e 36 38 20 7b 0a 20 20 20 20 65 78 65 63  -1.68 {.    exec
2f70: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
2f80: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d   FROM sqlite_tem
2f90: 70 5f 6d 61 73 74 65 72 7d 0a 20 20 7d 20 7b 74  p_master}.  } {t
2fa0: 31 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74  1}.  do_test aut
2fb0: 68 2d 31 2e 36 39 20 7b 0a 20 20 20 20 70 72 6f  h-1.69 {.    pro
2fc0: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
2fd0: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
2fe0: 7d 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 63  } {.      if {$c
2ff0: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c  ode=="SQLITE_DEL
3000: 45 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d 22  ETE" && $arg1=="
3010: 74 31 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 20  t1"} {.         
3020: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45  return SQLITE_DE
3030: 4e 59 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  NY.      }.     
3040: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
3050: 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 74 63  K.    }.    catc
3060: 68 73 71 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45  hsql {DROP TABLE
3070: 20 74 31 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f 74   t1}.  } {1 {not
3080: 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 20 20   authorized}}.  
3090: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 37  do_test auth-1.7
30a0: 30 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  0 {.    execsql 
30b0: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
30c0: 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  M sqlite_temp_ma
30d0: 73 74 65 72 7d 0a 20 20 7d 20 7b 74 31 7d 0a 7d  ster}.  } {t1}.}
30e0: 0a 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  ..do_test auth-1
30f0: 2e 37 31 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  .71 {.  proc aut
3100: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
3110: 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20  2 arg3 arg4} {. 
3120: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
3130: 51 4c 49 54 45 5f 44 45 4c 45 54 45 22 20 26 26  QLITE_DELETE" &&
3140: 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f   $arg1=="sqlite_
3150: 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20  master"} {.     
3160: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
3170: 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20  IGNORE.    }.   
3180: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
3190: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
31a0: 20 7b 44 52 4f 50 20 54 41 42 4c 45 20 74 32 7d   {DROP TABLE t2}
31b0: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
31c0: 74 20 61 75 74 68 2d 31 2e 37 32 20 7b 0a 20 20  t auth-1.72 {.  
31d0: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
31e0: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
31f0: 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a  _master}.} {t2}.
3200: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 37  do_test auth-1.7
3210: 33 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  3 {.  proc auth 
3220: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
3230: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
3240: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
3250: 49 54 45 5f 44 45 4c 45 54 45 22 20 26 26 20 24  ITE_DELETE" && $
3260: 61 72 67 31 3d 3d 22 74 32 22 7d 20 7b 0a 20 20  arg1=="t2"} {.  
3270: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
3280: 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a  TE_IGNORE.    }.
3290: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
32a0: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
32b0: 73 71 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45 20  sql {DROP TABLE 
32c0: 74 32 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f  t2}.} {0 {}}.do_
32d0: 74 65 73 74 20 61 75 74 68 2d 31 2e 37 34 20 7b  test auth-1.74 {
32e0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
32f0: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
3300: 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74  ite_master}.} {t
3310: 32 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20 74 65  2}..ifcapable te
3320: 6d 70 64 62 20 7b 0a 20 20 64 6f 5f 74 65 73 74  mpdb {.  do_test
3330: 20 61 75 74 68 2d 31 2e 37 35 20 7b 0a 20 20 20   auth-1.75 {.   
3340: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
3350: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
3360: 61 72 67 34 7d 20 7b 0a 20 20 20 20 20 20 69 66  arg4} {.      if
3370: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
3380: 5f 44 45 4c 45 54 45 22 20 26 26 20 24 61 72 67  _DELETE" && $arg
3390: 31 3d 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f  1=="sqlite_temp_
33a0: 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20  master"} {.     
33b0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
33c0: 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 20 20 7d  E_IGNORE.      }
33d0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
33e0: 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20  LITE_OK.    }.  
33f0: 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50    catchsql {DROP
3400: 20 54 41 42 4c 45 20 74 31 7d 0a 20 20 7d 20 7b   TABLE t1}.  } {
3410: 30 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20  0 {}}.  do_test 
3420: 61 75 74 68 2d 31 2e 37 36 20 7b 0a 20 20 20 20  auth-1.76 {.    
3430: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
3440: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
3450: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 20 20  _temp_master}.  
3460: 7d 20 7b 74 31 7d 0a 20 20 64 6f 5f 74 65 73 74  } {t1}.  do_test
3470: 20 61 75 74 68 2d 31 2e 37 37 20 7b 0a 20 20 20   auth-1.77 {.   
3480: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
3490: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
34a0: 61 72 67 34 7d 20 7b 0a 20 20 20 20 20 20 69 66  arg4} {.      if
34b0: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
34c0: 5f 44 45 4c 45 54 45 22 20 26 26 20 24 61 72 67  _DELETE" && $arg
34d0: 31 3d 3d 22 74 31 22 7d 20 7b 0a 20 20 20 20 20  1=="t1"} {.     
34e0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
34f0: 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 20 20 7d  E_IGNORE.      }
3500: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
3510: 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20  LITE_OK.    }.  
3520: 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50    catchsql {DROP
3530: 20 54 41 42 4c 45 20 74 31 7d 0a 20 20 7d 20 7b   TABLE t1}.  } {
3540: 30 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20  0 {}}.  do_test 
3550: 61 75 74 68 2d 31 2e 37 38 20 7b 0a 20 20 20 20  auth-1.78 {.    
3560: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
3570: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
3580: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 20 20  _temp_master}.  
3590: 7d 20 7b 74 31 7d 0a 7d 0a 0a 23 20 54 65 73 74  } {t1}.}..# Test
35a0: 20 63 61 73 65 73 20 61 75 74 68 2d 31 2e 37 39   cases auth-1.79
35b0: 20 74 6f 20 61 75 74 68 2d 31 2e 31 32 34 20 74   to auth-1.124 t
35c0: 65 73 74 20 63 72 65 61 74 69 6e 67 20 61 6e 64  est creating and
35d0: 20 64 72 6f 70 70 69 6e 67 20 76 69 65 77 73 2e   dropping views.
35e0: 0a 23 20 4f 6d 69 74 20 74 68 65 73 65 20 69 66  .# Omit these if
35f0: 20 74 68 65 20 6c 69 62 72 61 72 79 20 77 61 73   the library was
3600: 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 76   compiled with v
3610: 69 65 77 73 20 6f 6d 69 74 74 65 64 2e 0a 69 66  iews omitted..if
3620: 63 61 70 61 62 6c 65 20 76 69 65 77 20 7b 0a 64  capable view {.d
3630: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 37 39  o_test auth-1.79
3640: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
3650: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
3660: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
3670: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
3680: 54 45 5f 43 52 45 41 54 45 5f 56 49 45 57 22 7d  TE_CREATE_VIEW"}
3690: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61   {.      set ::a
36a0: 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61  uthargs [list $a
36b0: 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20  rg1 $arg2 $arg3 
36c0: 24 61 72 67 34 5d 20 0a 20 20 20 20 20 20 72 65  $arg4] .      re
36d0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59  turn SQLITE_DENY
36e0: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
36f0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
3700: 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41    catchsql {CREA
3710: 54 45 20 56 49 45 57 20 76 31 20 41 53 20 53 45  TE VIEW v1 AS SE
3720: 4c 45 43 54 20 61 2b 31 2c 62 2b 31 20 46 52 4f  LECT a+1,b+1 FRO
3730: 4d 20 74 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20  M t2}.} {1 {not 
3740: 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f  authorized}}.do_
3750: 74 65 73 74 20 61 75 74 68 2d 31 2e 38 30 20 7b  test auth-1.80 {
3760: 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67  .  set ::autharg
3770: 73 0a 7d 20 7b 76 31 20 7b 7d 20 6d 61 69 6e 20  s.} {v1 {} main 
3780: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
3790: 2d 31 2e 38 31 20 7b 0a 20 20 65 78 65 63 73 71  -1.81 {.  execsq
37a0: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
37b0: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
37c0: 72 7d 0a 7d 20 7b 74 32 7d 0a 64 6f 5f 74 65 73  r}.} {t2}.do_tes
37d0: 74 20 61 75 74 68 2d 31 2e 38 32 20 7b 0a 20 20  t auth-1.82 {.  
37e0: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
37f0: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
3800: 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg4} {.    if {$
3810: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52  code=="SQLITE_CR
3820: 45 41 54 45 5f 56 49 45 57 22 7d 20 7b 0a 20 20  EATE_VIEW"} {.  
3830: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
3840: 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24  gs [list $arg1 $
3850: 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34  arg2 $arg3 $arg4
3860: 5d 20 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ] .      return 
3870: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20  SQLITE_IGNORE.  
3880: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
3890: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
38a0: 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45 20  atchsql {CREATE 
38b0: 56 49 45 57 20 76 31 20 41 53 20 53 45 4c 45 43  VIEW v1 AS SELEC
38c0: 54 20 61 2b 31 2c 62 2b 31 20 46 52 4f 4d 20 74  T a+1,b+1 FROM t
38d0: 32 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74  2}.} {0 {}}.do_t
38e0: 65 73 74 20 61 75 74 68 2d 31 2e 38 33 20 7b 0a  est auth-1.83 {.
38f0: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
3900: 0a 7d 20 7b 76 31 20 7b 7d 20 6d 61 69 6e 20 7b  .} {v1 {} main {
3910: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
3920: 31 2e 38 34 20 7b 0a 20 20 65 78 65 63 73 71 6c  1.84 {.  execsql
3930: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
3940: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
3950: 7d 0a 7d 20 7b 74 32 7d 0a 0a 69 66 63 61 70 61  }.} {t2}..ifcapa
3960: 62 6c 65 20 74 65 6d 70 64 62 20 7b 0a 20 20 64  ble tempdb {.  d
3970: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 38 35  o_test auth-1.85
3980: 20 7b 0a 20 20 20 20 70 72 6f 63 20 61 75 74 68   {.    proc auth
3990: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
39a0: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
39b0: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
39c0: 53 51 4c 49 54 45 5f 43 52 45 41 54 45 5f 54 45  SQLITE_CREATE_TE
39d0: 4d 50 5f 56 49 45 57 22 7d 20 7b 0a 20 20 20 20  MP_VIEW"} {.    
39e0: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
39f0: 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24  gs [list $arg1 $
3a00: 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34  arg2 $arg3 $arg4
3a10: 5d 20 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ] .        retur
3a20: 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20  n SQLITE_DENY.  
3a30: 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75      }.      retu
3a40: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20  rn SQLITE_OK.   
3a50: 20 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20   }.    catchsql 
3a60: 7b 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52  {CREATE TEMPORAR
3a70: 59 20 56 49 45 57 20 76 31 20 41 53 20 53 45 4c  Y VIEW v1 AS SEL
3a80: 45 43 54 20 61 2b 31 2c 62 2b 31 20 46 52 4f 4d  ECT a+1,b+1 FROM
3a90: 20 74 32 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f 74   t2}.  } {1 {not
3aa0: 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 20 20   authorized}}.  
3ab0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 38  do_test auth-1.8
3ac0: 36 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a 61 75  6 {.    set ::au
3ad0: 74 68 61 72 67 73 0a 20 20 7d 20 7b 76 31 20 7b  thargs.  } {v1 {
3ae0: 7d 20 74 65 6d 70 20 7b 7d 7d 0a 20 20 64 6f 5f  } temp {}}.  do_
3af0: 74 65 73 74 20 61 75 74 68 2d 31 2e 38 37 20 7b  test auth-1.87 {
3b00: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45  .    execsql {SE
3b10: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73  LECT name FROM s
3b20: 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
3b30: 72 7d 0a 20 20 7d 20 7b 74 31 7d 0a 20 20 64 6f  r}.  } {t1}.  do
3b40: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 38 38 20  _test auth-1.88 
3b50: 7b 0a 20 20 20 20 70 72 6f 63 20 61 75 74 68 20  {.    proc auth 
3b60: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
3b70: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
3b80: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
3b90: 51 4c 49 54 45 5f 43 52 45 41 54 45 5f 54 45 4d  QLITE_CREATE_TEM
3ba0: 50 5f 56 49 45 57 22 7d 20 7b 0a 20 20 20 20 20  P_VIEW"} {.     
3bb0: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
3bc0: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
3bd0: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
3be0: 20 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e   .        return
3bf0: 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20   SQLITE_IGNORE. 
3c00: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74       }.      ret
3c10: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
3c20: 20 20 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c    }.    catchsql
3c30: 20 7b 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41   {CREATE TEMPORA
3c40: 52 59 20 56 49 45 57 20 76 31 20 41 53 20 53 45  RY VIEW v1 AS SE
3c50: 4c 45 43 54 20 61 2b 31 2c 62 2b 31 20 46 52 4f  LECT a+1,b+1 FRO
3c60: 4d 20 74 32 7d 0a 20 20 7d 20 7b 30 20 7b 7d 7d  M t2}.  } {0 {}}
3c70: 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  .  do_test auth-
3c80: 31 2e 38 39 20 7b 0a 20 20 20 20 73 65 74 20 3a  1.89 {.    set :
3c90: 3a 61 75 74 68 61 72 67 73 0a 20 20 7d 20 7b 76  :authargs.  } {v
3ca0: 31 20 7b 7d 20 74 65 6d 70 20 7b 7d 7d 0a 20 20  1 {} temp {}}.  
3cb0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 39  do_test auth-1.9
3cc0: 30 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  0 {.    execsql 
3cd0: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
3ce0: 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  M sqlite_temp_ma
3cf0: 73 74 65 72 7d 0a 20 20 7d 20 7b 74 31 7d 0a 7d  ster}.  } {t1}.}
3d00: 0a 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  ..do_test auth-1
3d10: 2e 39 31 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  .91 {.  proc aut
3d20: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
3d30: 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20  2 arg3 arg4} {. 
3d40: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
3d50: 51 4c 49 54 45 5f 49 4e 53 45 52 54 22 20 26 26  QLITE_INSERT" &&
3d60: 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f   $arg1=="sqlite_
3d70: 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20  master"} {.     
3d80: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44   return SQLITE_D
3d90: 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  ENY.    }.    re
3da0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
3db0: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 43   }.  catchsql {C
3dc0: 52 45 41 54 45 20 56 49 45 57 20 76 31 20 41 53  REATE VIEW v1 AS
3dd0: 20 53 45 4c 45 43 54 20 61 2b 31 2c 62 2b 31 20   SELECT a+1,b+1 
3de0: 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31 20 7b 6e  FROM t2}.} {1 {n
3df0: 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a  ot authorized}}.
3e00: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 39  do_test auth-1.9
3e10: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  2 {.  execsql {S
3e20: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
3e30: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d  sqlite_master}.}
3e40: 20 7b 74 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75   {t2}.do_test au
3e50: 74 68 2d 31 2e 39 33 20 7b 0a 20 20 70 72 6f 63  th-1.93 {.  proc
3e60: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
3e70: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
3e80: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
3e90: 3d 3d 22 53 51 4c 49 54 45 5f 49 4e 53 45 52 54  =="SQLITE_INSERT
3ea0: 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71 6c  " && $arg1=="sql
3eb0: 69 74 65 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20  ite_master"} {. 
3ec0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
3ed0: 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a  TE_IGNORE.    }.
3ee0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
3ef0: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
3f00: 73 71 6c 20 7b 43 52 45 41 54 45 20 56 49 45 57  sql {CREATE VIEW
3f10: 20 76 31 20 41 53 20 53 45 4c 45 43 54 20 61 2b   v1 AS SELECT a+
3f20: 31 2c 62 2b 31 20 46 52 4f 4d 20 74 32 7d 0a 7d  1,b+1 FROM t2}.}
3f30: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
3f40: 61 75 74 68 2d 31 2e 39 34 20 7b 0a 20 20 65 78  auth-1.94 {.  ex
3f50: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61  ecsql {SELECT na
3f60: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  me FROM sqlite_m
3f70: 61 73 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a 0a 69  aster}.} {t2}..i
3f80: 66 63 61 70 61 62 6c 65 20 74 65 6d 70 64 62 20  fcapable tempdb 
3f90: 7b 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68  {.  do_test auth
3fa0: 2d 31 2e 39 35 20 7b 0a 20 20 20 20 70 72 6f 63  -1.95 {.    proc
3fb0: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
3fc0: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
3fd0: 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f   {.      if {$co
3fe0: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 49 4e 53 45  de=="SQLITE_INSE
3ff0: 52 54 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73  RT" && $arg1=="s
4000: 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
4010: 72 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 72 65  r"} {.        re
4020: 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59  turn SQLITE_DENY
4030: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72  .      }.      r
4040: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
4050: 20 20 20 20 7d 0a 20 20 20 20 63 61 74 63 68 73      }.    catchs
4060: 71 6c 20 7b 43 52 45 41 54 45 20 54 45 4d 50 4f  ql {CREATE TEMPO
4070: 52 41 52 59 20 56 49 45 57 20 76 31 20 41 53 20  RARY VIEW v1 AS 
4080: 53 45 4c 45 43 54 20 61 2b 31 2c 62 2b 31 20 46  SELECT a+1,b+1 F
4090: 52 4f 4d 20 74 32 7d 0a 20 20 7d 20 7b 31 20 7b  ROM t2}.  } {1 {
40a0: 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d  not authorized}}
40b0: 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  .  do_test auth-
40c0: 31 2e 39 36 20 7b 0a 20 20 20 20 65 78 65 63 73  1.96 {.    execs
40d0: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
40e0: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70  FROM sqlite_temp
40f0: 5f 6d 61 73 74 65 72 7d 0a 20 20 7d 20 7b 74 31  _master}.  } {t1
4100: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68  }.  do_test auth
4110: 2d 31 2e 39 37 20 7b 0a 20 20 20 20 70 72 6f 63  -1.97 {.    proc
4120: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
4130: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
4140: 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f   {.      if {$co
4150: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 49 4e 53 45  de=="SQLITE_INSE
4160: 52 54 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73  RT" && $arg1=="s
4170: 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
4180: 72 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 72 65  r"} {.        re
4190: 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f  turn SQLITE_IGNO
41a0: 52 45 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  RE.      }.     
41b0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
41c0: 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 74 63  K.    }.    catc
41d0: 68 73 71 6c 20 7b 43 52 45 41 54 45 20 54 45 4d  hsql {CREATE TEM
41e0: 50 4f 52 41 52 59 20 56 49 45 57 20 76 31 20 41  PORARY VIEW v1 A
41f0: 53 20 53 45 4c 45 43 54 20 61 2b 31 2c 62 2b 31  S SELECT a+1,b+1
4200: 20 46 52 4f 4d 20 74 32 7d 0a 20 20 7d 20 7b 30   FROM t2}.  } {0
4210: 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61   {}}.  do_test a
4220: 75 74 68 2d 31 2e 39 38 20 7b 0a 20 20 20 20 65  uth-1.98 {.    e
4230: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
4240: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
4250: 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 20 20 7d  temp_master}.  }
4260: 20 7b 74 31 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74   {t1}.}..do_test
4270: 20 61 75 74 68 2d 31 2e 39 39 20 7b 0a 20 20 70   auth-1.99 {.  p
4280: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
4290: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
42a0: 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g4} {.    if {$c
42b0: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c  ode=="SQLITE_DEL
42c0: 45 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d 22  ETE" && $arg1=="
42d0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 7d 20  sqlite_master"} 
42e0: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  {.      return S
42f0: 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d  QLITE_DENY.    }
4300: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
4310: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
4320: 68 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  hsql {.    CREAT
4330: 45 20 56 49 45 57 20 76 32 20 41 53 20 53 45 4c  E VIEW v2 AS SEL
4340: 45 43 54 20 61 2b 31 2c 62 2b 31 20 46 52 4f 4d  ECT a+1,b+1 FROM
4350: 20 74 32 3b 0a 20 20 20 20 44 52 4f 50 20 56 49   t2;.    DROP VI
4360: 45 57 20 76 32 0a 20 20 7d 0a 7d 20 7b 31 20 7b  EW v2.  }.} {1 {
4370: 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d  not authorized}}
4380: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
4390: 31 30 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  100 {.  execsql 
43a0: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
43b0: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d  M sqlite_master}
43c0: 0a 7d 20 7b 74 32 20 76 32 7d 0a 64 6f 5f 74 65  .} {t2 v2}.do_te
43d0: 73 74 20 61 75 74 68 2d 31 2e 31 30 31 20 7b 0a  st auth-1.101 {.
43e0: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
43f0: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
4400: 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20   arg4} {.    if 
4410: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
4420: 44 52 4f 50 5f 56 49 45 57 22 7d 20 7b 0a 20 20  DROP_VIEW"} {.  
4430: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
4440: 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24  gs [list $arg1 $
4450: 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34  arg2 $arg3 $arg4
4460: 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  ].      return S
4470: 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d  QLITE_DENY.    }
4480: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
4490: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
44a0: 68 73 71 6c 20 7b 44 52 4f 50 20 56 49 45 57 20  hsql {DROP VIEW 
44b0: 76 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75  v2}.} {1 {not au
44c0: 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65  thorized}}.do_te
44d0: 73 74 20 61 75 74 68 2d 31 2e 31 30 32 20 7b 0a  st auth-1.102 {.
44e0: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
44f0: 0a 7d 20 7b 76 32 20 7b 7d 20 6d 61 69 6e 20 7b  .} {v2 {} main {
4500: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
4510: 31 2e 31 30 33 20 7b 0a 20 20 65 78 65 63 73 71  1.103 {.  execsq
4520: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
4530: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
4540: 72 7d 0a 7d 20 7b 74 32 20 76 32 7d 0a 64 6f 5f  r}.} {t2 v2}.do_
4550: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 30 34 20  test auth-1.104 
4560: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
4570: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
4580: 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69  g3 arg4} {.    i
4590: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
45a0: 45 5f 44 45 4c 45 54 45 22 20 26 26 20 24 61 72  E_DELETE" && $ar
45b0: 67 31 3d 3d 22 73 71 6c 69 74 65 5f 6d 61 73 74  g1=="sqlite_mast
45c0: 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74  er"} {.      ret
45d0: 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52  urn SQLITE_IGNOR
45e0: 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  E.    }.    retu
45f0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
4600: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f  .  catchsql {DRO
4610: 50 20 56 49 45 57 20 76 32 7d 0a 7d 20 7b 30 20  P VIEW v2}.} {0 
4620: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
4630: 2d 31 2e 31 30 35 20 7b 0a 20 20 65 78 65 63 73  -1.105 {.  execs
4640: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
4650: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
4660: 65 72 7d 0a 7d 20 7b 74 32 20 76 32 7d 0a 64 6f  er}.} {t2 v2}.do
4670: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 30 36  _test auth-1.106
4680: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
4690: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
46a0: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
46b0: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
46c0: 54 45 5f 44 52 4f 50 5f 56 49 45 57 22 7d 20 7b  TE_DROP_VIEW"} {
46d0: 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74  .      set ::aut
46e0: 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67  hargs [list $arg
46f0: 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61  1 $arg2 $arg3 $a
4700: 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72  rg4].      retur
4710: 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a  n SQLITE_IGNORE.
4720: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
4730: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
4740: 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20   catchsql {DROP 
4750: 56 49 45 57 20 76 32 7d 0a 7d 20 7b 30 20 7b 7d  VIEW v2}.} {0 {}
4760: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
4770: 2e 31 30 37 20 7b 0a 20 20 73 65 74 20 3a 3a 61  .107 {.  set ::a
4780: 75 74 68 61 72 67 73 0a 7d 20 7b 76 32 20 7b 7d  uthargs.} {v2 {}
4790: 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73   main {}}.do_tes
47a0: 74 20 61 75 74 68 2d 31 2e 31 30 38 20 7b 0a 20  t auth-1.108 {. 
47b0: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
47c0: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
47d0: 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 20  e_master}.} {t2 
47e0: 76 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  v2}.do_test auth
47f0: 2d 31 2e 31 30 39 20 7b 0a 20 20 70 72 6f 63 20  -1.109 {.  proc 
4800: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
4810: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
4820: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
4830: 3d 22 53 51 4c 49 54 45 5f 44 52 4f 50 5f 56 49  ="SQLITE_DROP_VI
4840: 45 57 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74  EW"} {.      set
4850: 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73   ::authargs [lis
4860: 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61  t $arg1 $arg2 $a
4870: 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20  rg3 $arg4].     
4880: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
4890: 4b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  K.    }.    retu
48a0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
48b0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f  .  catchsql {DRO
48c0: 50 20 56 49 45 57 20 76 32 7d 0a 7d 20 7b 30 20  P VIEW v2}.} {0 
48d0: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
48e0: 2d 31 2e 31 31 30 20 7b 0a 20 20 73 65 74 20 3a  -1.110 {.  set :
48f0: 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 76 32 20  :authargs.} {v2 
4900: 7b 7d 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74  {} main {}}.do_t
4910: 65 73 74 20 61 75 74 68 2d 31 2e 31 31 31 20 7b  est auth-1.111 {
4920: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
4930: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
4940: 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74  ite_master}.} {t
4950: 32 7d 0a 0a 0a 69 66 63 61 70 61 62 6c 65 20 74  2}...ifcapable t
4960: 65 6d 70 64 62 20 7b 0a 20 20 64 6f 5f 74 65 73  empdb {.  do_tes
4970: 74 20 61 75 74 68 2d 31 2e 31 31 32 20 7b 0a 20  t auth-1.112 {. 
4980: 20 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f     proc auth {co
4990: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
49a0: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 20 20  3 arg4} {.      
49b0: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
49c0: 54 45 5f 44 45 4c 45 54 45 22 20 26 26 20 24 61  TE_DELETE" && $a
49d0: 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 74 65 6d  rg1=="sqlite_tem
49e0: 70 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20  p_master"} {.   
49f0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
4a00: 54 45 5f 44 45 4e 59 0a 20 20 20 20 20 20 7d 0a  TE_DENY.      }.
4a10: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
4a20: 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20  ITE_OK.    }.   
4a30: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
4a40: 20 20 43 52 45 41 54 45 20 54 45 4d 50 20 56 49    CREATE TEMP VI
4a50: 45 57 20 76 31 20 41 53 20 53 45 4c 45 43 54 20  EW v1 AS SELECT 
4a60: 61 2b 31 2c 62 2b 31 20 46 52 4f 4d 20 74 31 3b  a+1,b+1 FROM t1;
4a70: 0a 20 20 20 20 20 20 44 52 4f 50 20 56 49 45 57  .      DROP VIEW
4a80: 20 76 31 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31   v1.    }.  } {1
4a90: 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64   {not authorized
4aa0: 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74  }}.  do_test aut
4ab0: 68 2d 31 2e 31 31 33 20 7b 0a 20 20 20 20 65 78  h-1.113 {.    ex
4ac0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61  ecsql {SELECT na
4ad0: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74  me FROM sqlite_t
4ae0: 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 20 20 7d 20  emp_master}.  } 
4af0: 7b 74 31 20 76 31 7d 0a 20 20 64 6f 5f 74 65 73  {t1 v1}.  do_tes
4b00: 74 20 61 75 74 68 2d 31 2e 31 31 34 20 7b 0a 20  t auth-1.114 {. 
4b10: 20 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f     proc auth {co
4b20: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
4b30: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 20 20  3 arg4} {.      
4b40: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
4b50: 54 45 5f 44 52 4f 50 5f 54 45 4d 50 5f 56 49 45  TE_DROP_TEMP_VIE
4b60: 57 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65  W"} {.        se
4b70: 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69  t ::authargs [li
4b80: 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24  st $arg1 $arg2 $
4b90: 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20  arg3 $arg4].    
4ba0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
4bb0: 45 5f 44 45 4e 59 0a 20 20 20 20 20 20 7d 0a 20  E_DENY.      }. 
4bc0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
4bd0: 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20  TE_OK.    }.    
4be0: 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 56  catchsql {DROP V
4bf0: 49 45 57 20 76 31 7d 0a 20 20 7d 20 7b 31 20 7b  IEW v1}.  } {1 {
4c00: 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d  not authorized}}
4c10: 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  .  do_test auth-
4c20: 31 2e 31 31 35 20 7b 0a 20 20 20 20 73 65 74 20  1.115 {.    set 
4c30: 3a 3a 61 75 74 68 61 72 67 73 0a 20 20 7d 20 7b  ::authargs.  } {
4c40: 76 31 20 7b 7d 20 74 65 6d 70 20 7b 7d 7d 0a 20  v1 {} temp {}}. 
4c50: 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e   do_test auth-1.
4c60: 31 31 36 20 7b 0a 20 20 20 20 65 78 65 63 73 71  116 {.    execsq
4c70: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
4c80: 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f  ROM sqlite_temp_
4c90: 6d 61 73 74 65 72 7d 0a 20 20 7d 20 7b 74 31 20  master}.  } {t1 
4ca0: 76 31 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75  v1}.  do_test au
4cb0: 74 68 2d 31 2e 31 31 37 20 7b 0a 20 20 20 20 70  th-1.117 {.    p
4cc0: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
4cd0: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
4ce0: 67 34 7d 20 7b 0a 20 20 20 20 20 20 69 66 20 7b  g4} {.      if {
4cf0: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44  $code=="SQLITE_D
4d00: 45 4c 45 54 45 22 20 26 26 20 24 61 72 67 31 3d  ELETE" && $arg1=
4d10: 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  ="sqlite_temp_ma
4d20: 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 20  ster"} {.       
4d30: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49   return SQLITE_I
4d40: 47 4e 4f 52 45 0a 20 20 20 20 20 20 7d 0a 20 20  GNORE.      }.  
4d50: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
4d60: 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63  E_OK.    }.    c
4d70: 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 56 49  atchsql {DROP VI
4d80: 45 57 20 76 31 7d 0a 20 20 7d 20 7b 30 20 7b 7d  EW v1}.  } {0 {}
4d90: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68  }.  do_test auth
4da0: 2d 31 2e 31 31 38 20 7b 0a 20 20 20 20 65 78 65  -1.118 {.    exe
4db0: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d  csql {SELECT nam
4dc0: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65  e FROM sqlite_te
4dd0: 6d 70 5f 6d 61 73 74 65 72 7d 0a 20 20 7d 20 7b  mp_master}.  } {
4de0: 74 31 20 76 31 7d 0a 20 20 64 6f 5f 74 65 73 74  t1 v1}.  do_test
4df0: 20 61 75 74 68 2d 31 2e 31 31 39 20 7b 0a 20 20   auth-1.119 {.  
4e00: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
4e10: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
4e20: 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 20 20 69   arg4} {.      i
4e30: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
4e40: 45 5f 44 52 4f 50 5f 54 45 4d 50 5f 56 49 45 57  E_DROP_TEMP_VIEW
4e50: 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74  "} {.        set
4e60: 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73   ::authargs [lis
4e70: 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61  t $arg1 $arg2 $a
4e80: 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20  rg3 $arg4].     
4e90: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
4ea0: 5f 49 47 4e 4f 52 45 0a 20 20 20 20 20 20 7d 0a  _IGNORE.      }.
4eb0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
4ec0: 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20  ITE_OK.    }.   
4ed0: 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20   catchsql {DROP 
4ee0: 56 49 45 57 20 76 31 7d 0a 20 20 7d 20 7b 30 20  VIEW v1}.  } {0 
4ef0: 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75  {}}.  do_test au
4f00: 74 68 2d 31 2e 31 32 30 20 7b 0a 20 20 20 20 73  th-1.120 {.    s
4f10: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 20 20  et ::authargs.  
4f20: 7d 20 7b 76 31 20 7b 7d 20 74 65 6d 70 20 7b 7d  } {v1 {} temp {}
4f30: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68  }.  do_test auth
4f40: 2d 31 2e 31 32 31 20 7b 0a 20 20 20 20 65 78 65  -1.121 {.    exe
4f50: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d  csql {SELECT nam
4f60: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65  e FROM sqlite_te
4f70: 6d 70 5f 6d 61 73 74 65 72 7d 0a 20 20 7d 20 7b  mp_master}.  } {
4f80: 74 31 20 76 31 7d 0a 20 20 64 6f 5f 74 65 73 74  t1 v1}.  do_test
4f90: 20 61 75 74 68 2d 31 2e 31 32 32 20 7b 0a 20 20   auth-1.122 {.  
4fa0: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
4fb0: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
4fc0: 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 20 20 69   arg4} {.      i
4fd0: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
4fe0: 45 5f 44 52 4f 50 5f 54 45 4d 50 5f 56 49 45 57  E_DROP_TEMP_VIEW
4ff0: 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74  "} {.        set
5000: 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73   ::authargs [lis
5010: 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61  t $arg1 $arg2 $a
5020: 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20  rg3 $arg4].     
5030: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
5040: 5f 4f 4b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  _OK.      }.    
5050: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
5060: 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 74  OK.    }.    cat
5070: 63 68 73 71 6c 20 7b 44 52 4f 50 20 56 49 45 57  chsql {DROP VIEW
5080: 20 76 31 7d 0a 20 20 7d 20 7b 30 20 7b 7d 7d 0a   v1}.  } {0 {}}.
5090: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31    do_test auth-1
50a0: 2e 31 32 33 20 7b 0a 20 20 20 20 73 65 74 20 3a  .123 {.    set :
50b0: 3a 61 75 74 68 61 72 67 73 0a 20 20 7d 20 7b 76  :authargs.  } {v
50c0: 31 20 7b 7d 20 74 65 6d 70 20 7b 7d 7d 0a 20 20  1 {} temp {}}.  
50d0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
50e0: 32 34 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  24 {.    execsql
50f0: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
5100: 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  OM sqlite_temp_m
5110: 61 73 74 65 72 7d 0a 20 20 7d 20 7b 74 31 7d 0a  aster}.  } {t1}.
5120: 7d 0a 7d 20 3b 23 20 69 66 63 61 70 61 62 6c 65  }.} ;# ifcapable
5130: 20 76 69 65 77 0a 0a 23 20 54 65 73 74 20 63 61   view..# Test ca
5140: 73 65 73 20 61 75 74 68 2d 31 2e 31 32 35 20 74  ses auth-1.125 t
5150: 6f 20 61 75 74 68 2d 31 2e 31 37 36 20 74 65 73  o auth-1.176 tes
5160: 74 20 63 72 65 61 74 69 6e 67 20 61 6e 64 20 64  t creating and d
5170: 72 6f 70 70 69 6e 67 20 74 72 69 67 67 65 72 73  ropping triggers
5180: 2e 0a 23 20 4f 6d 69 74 20 74 68 65 73 65 20 69  ..# Omit these i
5190: 66 20 74 68 65 20 6c 69 62 72 61 72 79 20 77 61  f the library wa
51a0: 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20  s compiled with 
51b0: 74 72 69 67 67 65 72 73 20 6f 6d 69 74 74 65 64  triggers omitted
51c0: 2e 0a 23 0a 69 66 63 61 70 61 62 6c 65 20 74 72  ..#.ifcapable tr
51d0: 69 67 67 65 72 26 26 74 65 6d 70 64 62 20 7b 0a  igger&&tempdb {.
51e0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
51f0: 32 35 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  25 {.  proc auth
5200: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
5210: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
5220: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
5230: 4c 49 54 45 5f 43 52 45 41 54 45 5f 54 52 49 47  LITE_CREATE_TRIG
5240: 47 45 52 22 7d 20 7b 0a 20 20 20 20 20 20 73 65  GER"} {.      se
5250: 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69  t ::authargs [li
5260: 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24  st $arg1 $arg2 $
5270: 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20  arg3 $arg4].    
5280: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
5290: 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72  DENY.    }.    r
52a0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
52b0: 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b    }.  catchsql {
52c0: 0a 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47  .    CREATE TRIG
52d0: 47 45 52 20 72 32 20 44 45 4c 45 54 45 20 6f 6e  GER r2 DELETE on
52e0: 20 74 32 20 42 45 47 49 4e 0a 20 20 20 20 20 20   t2 BEGIN.      
52f0: 20 20 53 45 4c 45 43 54 20 4e 55 4c 4c 3b 0a 20    SELECT NULL;. 
5300: 20 20 20 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 31     END;.  }.} {1
5310: 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64   {not authorized
5320: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
5330: 31 2e 31 32 36 20 7b 0a 20 20 73 65 74 20 3a 3a  1.126 {.  set ::
5340: 61 75 74 68 61 72 67 73 0a 7d 20 7b 72 32 20 74  authargs.} {r2 t
5350: 32 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65  2 main {}}.do_te
5360: 73 74 20 61 75 74 68 2d 31 2e 31 32 37 20 7b 0a  st auth-1.127 {.
5370: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
5380: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
5390: 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32  te_master}.} {t2
53a0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
53b0: 2e 31 32 38 20 7b 0a 20 20 70 72 6f 63 20 61 75  .128 {.  proc au
53c0: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
53d0: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
53e0: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
53f0: 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 22 20 26  SQLITE_INSERT" &
5400: 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65  & $arg1=="sqlite
5410: 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20  _master"} {.    
5420: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
5430: 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72  DENY.    }.    r
5440: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
5450: 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b    }.  catchsql {
5460: 0a 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47  .    CREATE TRIG
5470: 47 45 52 20 72 32 20 44 45 4c 45 54 45 20 6f 6e  GER r2 DELETE on
5480: 20 74 32 20 42 45 47 49 4e 0a 20 20 20 20 20 20   t2 BEGIN.      
5490: 20 20 53 45 4c 45 43 54 20 4e 55 4c 4c 3b 0a 20    SELECT NULL;. 
54a0: 20 20 20 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 31     END;.  }.} {1
54b0: 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64   {not authorized
54c0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
54d0: 31 2e 31 32 39 20 7b 0a 20 20 65 78 65 63 73 71  1.129 {.  execsq
54e0: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
54f0: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
5500: 72 7d 0a 7d 20 7b 74 32 7d 0a 64 6f 5f 74 65 73  r}.} {t2}.do_tes
5510: 74 20 61 75 74 68 2d 31 2e 31 33 30 20 7b 0a 20  t auth-1.130 {. 
5520: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
5530: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
5540: 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg4} {.    if {
5550: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43  $code=="SQLITE_C
5560: 52 45 41 54 45 5f 54 52 49 47 47 45 52 22 7d 20  REATE_TRIGGER"} 
5570: 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75  {.      set ::au
5580: 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72  thargs [list $ar
5590: 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24  g1 $arg2 $arg3 $
55a0: 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75  arg4].      retu
55b0: 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45  rn SQLITE_IGNORE
55c0: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
55d0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
55e0: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
55f0: 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20   CREATE TRIGGER 
5600: 72 32 20 44 45 4c 45 54 45 20 6f 6e 20 74 32 20  r2 DELETE on t2 
5610: 42 45 47 49 4e 0a 20 20 20 20 20 20 20 20 53 45  BEGIN.        SE
5620: 4c 45 43 54 20 4e 55 4c 4c 3b 0a 20 20 20 20 45  LECT NULL;.    E
5630: 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d  ND;.  }.} {0 {}}
5640: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
5650: 31 33 31 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75  131 {.  set ::au
5660: 74 68 61 72 67 73 0a 7d 20 7b 72 32 20 74 32 20  thargs.} {r2 t2 
5670: 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  main {}}.do_test
5680: 20 61 75 74 68 2d 31 2e 31 33 32 20 7b 0a 20 20   auth-1.132 {.  
5690: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
56a0: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
56b0: 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a  _master}.} {t2}.
56c0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
56d0: 33 33 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  33 {.  proc auth
56e0: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
56f0: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
5700: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
5710: 4c 49 54 45 5f 49 4e 53 45 52 54 22 20 26 26 20  LITE_INSERT" && 
5720: 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 6d  $arg1=="sqlite_m
5730: 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20  aster"} {.      
5740: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47  return SQLITE_IG
5750: 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72  NORE.    }.    r
5760: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
5770: 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b    }.  catchsql {
5780: 0a 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47  .    CREATE TRIG
5790: 47 45 52 20 72 32 20 44 45 4c 45 54 45 20 6f 6e  GER r2 DELETE on
57a0: 20 74 32 20 42 45 47 49 4e 0a 20 20 20 20 20 20   t2 BEGIN.      
57b0: 20 20 53 45 4c 45 43 54 20 4e 55 4c 4c 3b 0a 20    SELECT NULL;. 
57c0: 20 20 20 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 30     END;.  }.} {0
57d0: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
57e0: 68 2d 31 2e 31 33 34 20 7b 0a 20 20 65 78 65 63  h-1.134 {.  exec
57f0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
5800: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
5810: 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a 64 6f 5f 74  ter}.} {t2}.do_t
5820: 65 73 74 20 61 75 74 68 2d 31 2e 31 33 35 20 7b  est auth-1.135 {
5830: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
5840: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
5850: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66  3 arg4} {.    if
5860: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
5870: 5f 43 52 45 41 54 45 5f 54 52 49 47 47 45 52 22  _CREATE_TRIGGER"
5880: 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a  } {.      set ::
5890: 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24  authargs [list $
58a0: 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33  arg1 $arg2 $arg3
58b0: 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65   $arg4].      re
58c0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
58d0: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
58e0: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
58f0: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 43  catchsql {.    C
5900: 52 45 41 54 45 20 54 41 42 4c 45 20 74 78 28 69  REATE TABLE tx(i
5910: 64 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54  d);.    CREATE T
5920: 52 49 47 47 45 52 20 72 32 20 41 46 54 45 52 20  RIGGER r2 AFTER 
5930: 49 4e 53 45 52 54 20 4f 4e 20 74 32 20 42 45 47  INSERT ON t2 BEG
5940: 49 4e 0a 20 20 20 20 20 20 20 49 4e 53 45 52 54  IN.       INSERT
5950: 20 49 4e 54 4f 20 74 78 20 56 41 4c 55 45 53 28   INTO tx VALUES(
5960: 4e 45 57 2e 72 6f 77 69 64 29 3b 0a 20 20 20 20  NEW.rowid);.    
5970: 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d  END;.  }.} {0 {}
5980: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
5990: 2e 31 33 36 2e 31 20 7b 0a 20 20 73 65 74 20 3a  .136.1 {.  set :
59a0: 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 72 32 20  :authargs.} {r2 
59b0: 74 32 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74  t2 main {}}.do_t
59c0: 65 73 74 20 61 75 74 68 2d 31 2e 31 33 36 2e 32  est auth-1.136.2
59d0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
59e0: 20 20 20 53 45 4c 45 43 54 20 6e 61 6d 65 20 46     SELECT name F
59f0: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
5a00: 72 20 57 48 45 52 45 20 74 79 70 65 3d 27 74 72  r WHERE type='tr
5a10: 69 67 67 65 72 27 0a 20 20 7d 0a 7d 20 7b 72 32  igger'.  }.} {r2
5a20: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
5a30: 2e 31 33 36 2e 33 20 7b 0a 20 20 70 72 6f 63 20  .136.3 {.  proc 
5a40: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
5a50: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
5a60: 7b 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 3a 3a  {.    lappend ::
5a70: 61 75 74 68 61 72 67 73 20 24 63 6f 64 65 20 24  authargs $code $
5a80: 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33  arg1 $arg2 $arg3
5a90: 20 24 61 72 67 34 0a 20 20 20 20 72 65 74 75 72   $arg4.    retur
5aa0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
5ab0: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
5ac0: 20 7b 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a   {}.  execsql {.
5ad0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
5ae0: 74 32 20 56 41 4c 55 45 53 28 31 2c 32 2c 33 29  t2 VALUES(1,2,3)
5af0: 3b 0a 20 20 7d 0a 20 20 73 65 74 20 3a 3a 61 75  ;.  }.  set ::au
5b00: 74 68 61 72 67 73 20 0a 7d 20 7b 53 51 4c 49 54  thargs .} {SQLIT
5b10: 45 5f 49 4e 53 45 52 54 20 74 32 20 7b 7d 20 6d  E_INSERT t2 {} m
5b20: 61 69 6e 20 7b 7d 20 53 51 4c 49 54 45 5f 49 4e  ain {} SQLITE_IN
5b30: 53 45 52 54 20 74 78 20 7b 7d 20 6d 61 69 6e 20  SERT tx {} main 
5b40: 72 32 20 53 51 4c 49 54 45 5f 52 45 41 44 20 74  r2 SQLITE_READ t
5b50: 32 20 52 4f 57 49 44 20 6d 61 69 6e 20 72 32 7d  2 ROWID main r2}
5b60: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
5b70: 31 33 36 2e 34 20 7b 0a 20 20 65 78 65 63 73 71  136.4 {.  execsq
5b80: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  l {.    SELECT *
5b90: 20 46 52 4f 4d 20 74 78 3b 0a 20 20 7d 0a 7d 20   FROM tx;.  }.} 
5ba0: 7b 33 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {3}.do_test auth
5bb0: 2d 31 2e 31 33 37 20 7b 0a 20 20 65 78 65 63 73  -1.137 {.  execs
5bc0: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
5bd0: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
5be0: 65 72 7d 0a 7d 20 7b 74 32 20 74 78 20 72 32 7d  er}.} {t2 tx r2}
5bf0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
5c00: 31 33 38 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  138 {.  proc aut
5c10: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
5c20: 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20  2 arg3 arg4} {. 
5c30: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
5c40: 51 4c 49 54 45 5f 43 52 45 41 54 45 5f 54 45 4d  QLITE_CREATE_TEM
5c50: 50 5f 54 52 49 47 47 45 52 22 7d 20 7b 0a 20 20  P_TRIGGER"} {.  
5c60: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
5c70: 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24  gs [list $arg1 $
5c80: 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34  arg2 $arg3 $arg4
5c90: 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  ].      return S
5ca0: 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d  QLITE_DENY.    }
5cb0: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
5cc0: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
5cd0: 68 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  hsql {.    CREAT
5ce0: 45 20 54 52 49 47 47 45 52 20 72 31 20 44 45 4c  E TRIGGER r1 DEL
5cf0: 45 54 45 20 6f 6e 20 74 31 20 42 45 47 49 4e 0a  ETE on t1 BEGIN.
5d00: 20 20 20 20 20 20 20 20 53 45 4c 45 43 54 20 4e          SELECT N
5d10: 55 4c 4c 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20  ULL;.    END;.  
5d20: 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68  }.} {1 {not auth
5d30: 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74  orized}}.do_test
5d40: 20 61 75 74 68 2d 31 2e 31 33 39 20 7b 0a 20 20   auth-1.139 {.  
5d50: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d  set ::authargs.}
5d60: 20 7b 72 31 20 74 31 20 74 65 6d 70 20 7b 7d 7d   {r1 t1 temp {}}
5d70: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
5d80: 31 34 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  140 {.  execsql 
5d90: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
5da0: 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  M sqlite_temp_ma
5db0: 73 74 65 72 7d 0a 7d 20 7b 74 31 7d 0a 64 6f 5f  ster}.} {t1}.do_
5dc0: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 34 31 20  test auth-1.141 
5dd0: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
5de0: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
5df0: 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69  g3 arg4} {.    i
5e00: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
5e10: 45 5f 49 4e 53 45 52 54 22 20 26 26 20 24 61 72  E_INSERT" && $ar
5e20: 67 31 3d 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70  g1=="sqlite_temp
5e30: 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20  _master"} {.    
5e40: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
5e50: 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72  DENY.    }.    r
5e60: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
5e70: 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b    }.  catchsql {
5e80: 0a 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47  .    CREATE TRIG
5e90: 47 45 52 20 72 31 20 44 45 4c 45 54 45 20 6f 6e  GER r1 DELETE on
5ea0: 20 74 31 20 42 45 47 49 4e 0a 20 20 20 20 20 20   t1 BEGIN.      
5eb0: 20 20 53 45 4c 45 43 54 20 4e 55 4c 4c 3b 0a 20    SELECT NULL;. 
5ec0: 20 20 20 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 31     END;.  }.} {1
5ed0: 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64   {not authorized
5ee0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
5ef0: 31 2e 31 34 32 20 7b 0a 20 20 65 78 65 63 73 71  1.142 {.  execsq
5f00: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
5f10: 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f  ROM sqlite_temp_
5f20: 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31 7d 0a 64  master}.} {t1}.d
5f30: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 34  o_test auth-1.14
5f40: 33 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  3 {.  proc auth 
5f50: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
5f60: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
5f70: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
5f80: 49 54 45 5f 43 52 45 41 54 45 5f 54 45 4d 50 5f  ITE_CREATE_TEMP_
5f90: 54 52 49 47 47 45 52 22 7d 20 7b 0a 20 20 20 20  TRIGGER"} {.    
5fa0: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
5fb0: 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72   [list $arg1 $ar
5fc0: 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a  g2 $arg3 $arg4].
5fd0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
5fe0: 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d  ITE_IGNORE.    }
5ff0: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
6000: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
6010: 68 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  hsql {.    CREAT
6020: 45 20 54 52 49 47 47 45 52 20 72 31 20 44 45 4c  E TRIGGER r1 DEL
6030: 45 54 45 20 6f 6e 20 74 31 20 42 45 47 49 4e 0a  ETE on t1 BEGIN.
6040: 20 20 20 20 20 20 20 20 53 45 4c 45 43 54 20 4e          SELECT N
6050: 55 4c 4c 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20  ULL;.    END;.  
6060: 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  }.} {0 {}}.do_te
6070: 73 74 20 61 75 74 68 2d 31 2e 31 34 34 20 7b 0a  st auth-1.144 {.
6080: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
6090: 0a 7d 20 7b 72 31 20 74 31 20 74 65 6d 70 20 7b  .} {r1 t1 temp {
60a0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
60b0: 31 2e 31 34 35 20 7b 0a 20 20 65 78 65 63 73 71  1.145 {.  execsq
60c0: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
60d0: 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f  ROM sqlite_temp_
60e0: 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31 7d 0a 64  master}.} {t1}.d
60f0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 34  o_test auth-1.14
6100: 36 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  6 {.  proc auth 
6110: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
6120: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
6130: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
6140: 49 54 45 5f 49 4e 53 45 52 54 22 20 26 26 20 24  ITE_INSERT" && $
6150: 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 74 65  arg1=="sqlite_te
6160: 6d 70 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20  mp_master"} {.  
6170: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
6180: 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20  E_IGNORE.    }. 
6190: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
61a0: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
61b0: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
61c0: 54 52 49 47 47 45 52 20 72 31 20 44 45 4c 45 54  TRIGGER r1 DELET
61d0: 45 20 6f 6e 20 74 31 20 42 45 47 49 4e 0a 20 20  E on t1 BEGIN.  
61e0: 20 20 20 20 20 20 53 45 4c 45 43 54 20 4e 55 4c        SELECT NUL
61f0: 4c 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 7d 0a  L;.    END;.  }.
6200: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
6210: 20 61 75 74 68 2d 31 2e 31 34 37 20 7b 0a 20 20   auth-1.147 {.  
6220: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
6230: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
6240: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d 20  _temp_master}.} 
6250: 7b 74 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  {t1}.do_test aut
6260: 68 2d 31 2e 31 34 38 20 7b 0a 20 20 70 72 6f 63  h-1.148 {.  proc
6270: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
6280: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
6290: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
62a0: 3d 3d 22 53 51 4c 49 54 45 5f 43 52 45 41 54 45  =="SQLITE_CREATE
62b0: 5f 54 45 4d 50 5f 54 52 49 47 47 45 52 22 7d 20  _TEMP_TRIGGER"} 
62c0: 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75  {.      set ::au
62d0: 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72  thargs [list $ar
62e0: 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24  g1 $arg2 $arg3 $
62f0: 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75  arg4].      retu
6300: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20  rn SQLITE_OK.   
6310: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
6320: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
6330: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 43 52 45  tchsql {.    CRE
6340: 41 54 45 20 54 52 49 47 47 45 52 20 72 31 20 44  ATE TRIGGER r1 D
6350: 45 4c 45 54 45 20 6f 6e 20 74 31 20 42 45 47 49  ELETE on t1 BEGI
6360: 4e 0a 20 20 20 20 20 20 20 20 53 45 4c 45 43 54  N.        SELECT
6370: 20 4e 55 4c 4c 3b 0a 20 20 20 20 45 4e 44 3b 0a   NULL;.    END;.
6380: 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f    }.} {0 {}}.do_
6390: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 34 39 20  test auth-1.149 
63a0: 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72  {.  set ::authar
63b0: 67 73 0a 7d 20 7b 72 31 20 74 31 20 74 65 6d 70  gs.} {r1 t1 temp
63c0: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
63d0: 68 2d 31 2e 31 35 30 20 7b 0a 20 20 65 78 65 63  h-1.150 {.  exec
63e0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
63f0: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d   FROM sqlite_tem
6400: 70 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31 20  p_master}.} {t1 
6410: 72 31 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 75 74  r1}..do_test aut
6420: 68 2d 31 2e 31 35 31 20 7b 0a 20 20 70 72 6f 63  h-1.151 {.  proc
6430: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
6440: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
6450: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
6460: 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45 54 45  =="SQLITE_DELETE
6470: 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71 6c  " && $arg1=="sql
6480: 69 74 65 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20  ite_master"} {. 
6490: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
64a0: 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20  TE_DENY.    }.  
64b0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
64c0: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
64d0: 6c 20 7b 44 52 4f 50 20 54 52 49 47 47 45 52 20  l {DROP TRIGGER 
64e0: 72 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75  r2}.} {1 {not au
64f0: 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65  thorized}}.do_te
6500: 73 74 20 61 75 74 68 2d 31 2e 31 35 32 20 7b 0a  st auth-1.152 {.
6510: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
6520: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
6530: 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32  te_master}.} {t2
6540: 20 74 78 20 72 32 7d 0a 64 6f 5f 74 65 73 74 20   tx r2}.do_test 
6550: 61 75 74 68 2d 31 2e 31 35 33 20 7b 0a 20 20 70  auth-1.153 {.  p
6560: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
6570: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
6580: 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g4} {.    if {$c
6590: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f  ode=="SQLITE_DRO
65a0: 50 5f 54 52 49 47 47 45 52 22 7d 20 7b 0a 20 20  P_TRIGGER"} {.  
65b0: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
65c0: 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24  gs [list $arg1 $
65d0: 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34  arg2 $arg3 $arg4
65e0: 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  ].      return S
65f0: 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d  QLITE_DENY.    }
6600: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
6610: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
6620: 68 73 71 6c 20 7b 44 52 4f 50 20 54 52 49 47 47  hsql {DROP TRIGG
6630: 45 52 20 72 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74  ER r2}.} {1 {not
6640: 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f   authorized}}.do
6650: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 35 34  _test auth-1.154
6660: 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61   {.  set ::autha
6670: 72 67 73 0a 7d 20 7b 72 32 20 74 32 20 6d 61 69  rgs.} {r2 t2 mai
6680: 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  n {}}.do_test au
6690: 74 68 2d 31 2e 31 35 35 20 7b 0a 20 20 65 78 65  th-1.155 {.  exe
66a0: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d  csql {SELECT nam
66b0: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  e FROM sqlite_ma
66c0: 73 74 65 72 7d 0a 7d 20 7b 74 32 20 74 78 20 72  ster}.} {t2 tx r
66d0: 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  2}.do_test auth-
66e0: 31 2e 31 35 36 20 7b 0a 20 20 70 72 6f 63 20 61  1.156 {.  proc a
66f0: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
6700: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
6710: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
6720: 22 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 22 20  "SQLITE_DELETE" 
6730: 26 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74  && $arg1=="sqlit
6740: 65 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20  e_master"} {.   
6750: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
6760: 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20  _IGNORE.    }.  
6770: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
6780: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
6790: 6c 20 7b 44 52 4f 50 20 54 52 49 47 47 45 52 20  l {DROP TRIGGER 
67a0: 72 32 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f  r2}.} {0 {}}.do_
67b0: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 35 37 20  test auth-1.157 
67c0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
67d0: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
67e0: 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b  lite_master}.} {
67f0: 74 32 20 74 78 20 72 32 7d 0a 64 6f 5f 74 65 73  t2 tx r2}.do_tes
6800: 74 20 61 75 74 68 2d 31 2e 31 35 38 20 7b 0a 20  t auth-1.158 {. 
6810: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
6820: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
6830: 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg4} {.    if {
6840: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44  $code=="SQLITE_D
6850: 52 4f 50 5f 54 52 49 47 47 45 52 22 7d 20 7b 0a  ROP_TRIGGER"} {.
6860: 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68        set ::auth
6870: 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31  args [list $arg1
6880: 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72   $arg2 $arg3 $ar
6890: 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  g4].      return
68a0: 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20   SQLITE_IGNORE. 
68b0: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
68c0: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
68d0: 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54  catchsql {DROP T
68e0: 52 49 47 47 45 52 20 72 32 7d 0a 7d 20 7b 30 20  RIGGER r2}.} {0 
68f0: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
6900: 2d 31 2e 31 35 39 20 7b 0a 20 20 73 65 74 20 3a  -1.159 {.  set :
6910: 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 72 32 20  :authargs.} {r2 
6920: 74 32 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74  t2 main {}}.do_t
6930: 65 73 74 20 61 75 74 68 2d 31 2e 31 36 30 20 7b  est auth-1.160 {
6940: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
6950: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
6960: 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74  ite_master}.} {t
6970: 32 20 74 78 20 72 32 7d 0a 64 6f 5f 74 65 73 74  2 tx r2}.do_test
6980: 20 61 75 74 68 2d 31 2e 31 36 31 20 7b 0a 20 20   auth-1.161 {.  
6990: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
69a0: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
69b0: 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg4} {.    if {$
69c0: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52  code=="SQLITE_DR
69d0: 4f 50 5f 54 52 49 47 47 45 52 22 7d 20 7b 0a 20  OP_TRIGGER"} {. 
69e0: 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61       set ::autha
69f0: 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20  rgs [list $arg1 
6a00: 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67  $arg2 $arg3 $arg
6a10: 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  4].      return 
6a20: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a  SQLITE_OK.    }.
6a30: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
6a40: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
6a50: 73 71 6c 20 7b 44 52 4f 50 20 54 52 49 47 47 45  sql {DROP TRIGGE
6a60: 52 20 72 32 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  R r2}.} {0 {}}.d
6a70: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 36  o_test auth-1.16
6a80: 32 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68  2 {.  set ::auth
6a90: 61 72 67 73 0a 7d 20 7b 72 32 20 74 32 20 6d 61  args.} {r2 t2 ma
6aa0: 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  in {}}.do_test a
6ab0: 75 74 68 2d 31 2e 31 36 33 20 7b 0a 20 20 65 78  uth-1.163 {.  ex
6ac0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50  ecsql {.    DROP
6ad0: 20 54 41 42 4c 45 20 74 78 3b 0a 20 20 20 20 44   TABLE tx;.    D
6ae0: 45 4c 45 54 45 20 46 52 4f 4d 20 74 32 20 57 48  ELETE FROM t2 WH
6af0: 45 52 45 20 61 3d 31 20 41 4e 44 20 62 3d 32 20  ERE a=1 AND b=2 
6b00: 41 4e 44 20 63 3d 33 3b 0a 20 20 20 20 53 45 4c  AND c=3;.    SEL
6b10: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
6b20: 6c 69 74 65 5f 6d 61 73 74 65 72 3b 0a 20 20 7d  lite_master;.  }
6b30: 0a 7d 20 7b 74 32 7d 0a 0a 64 6f 5f 74 65 73 74  .} {t2}..do_test
6b40: 20 61 75 74 68 2d 31 2e 31 36 34 20 7b 0a 20 20   auth-1.164 {.  
6b50: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
6b60: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
6b70: 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg4} {.    if {$
6b80: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45  code=="SQLITE_DE
6b90: 4c 45 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d  LETE" && $arg1==
6ba0: 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73  "sqlite_temp_mas
6bb0: 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 72 65  ter"} {.      re
6bc0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59  turn SQLITE_DENY
6bd0: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
6be0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
6bf0: 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50    catchsql {DROP
6c00: 20 54 52 49 47 47 45 52 20 72 31 7d 0a 7d 20 7b   TRIGGER r1}.} {
6c10: 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65  1 {not authorize
6c20: 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  d}}.do_test auth
6c30: 2d 31 2e 31 36 35 20 7b 0a 20 20 65 78 65 63 73  -1.165 {.  execs
6c40: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
6c50: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70  FROM sqlite_temp
6c60: 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31 20 72  _master}.} {t1 r
6c70: 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  1}.do_test auth-
6c80: 31 2e 31 36 36 20 7b 0a 20 20 70 72 6f 63 20 61  1.166 {.  proc a
6c90: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
6ca0: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
6cb0: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
6cc0: 22 53 51 4c 49 54 45 5f 44 52 4f 50 5f 54 45 4d  "SQLITE_DROP_TEM
6cd0: 50 5f 54 52 49 47 47 45 52 22 7d 20 7b 0a 20 20  P_TRIGGER"} {.  
6ce0: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
6cf0: 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24  gs [list $arg1 $
6d00: 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34  arg2 $arg3 $arg4
6d10: 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  ].      return S
6d20: 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d  QLITE_DENY.    }
6d30: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
6d40: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
6d50: 68 73 71 6c 20 7b 44 52 4f 50 20 54 52 49 47 47  hsql {DROP TRIGG
6d60: 45 52 20 72 31 7d 0a 7d 20 7b 31 20 7b 6e 6f 74  ER r1}.} {1 {not
6d70: 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f   authorized}}.do
6d80: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 36 37  _test auth-1.167
6d90: 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61   {.  set ::autha
6da0: 72 67 73 0a 7d 20 7b 72 31 20 74 31 20 74 65 6d  rgs.} {r1 t1 tem
6db0: 70 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  p {}}.do_test au
6dc0: 74 68 2d 31 2e 31 36 38 20 7b 0a 20 20 65 78 65  th-1.168 {.  exe
6dd0: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d  csql {SELECT nam
6de0: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65  e FROM sqlite_te
6df0: 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31  mp_master}.} {t1
6e00: 20 72 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   r1}.do_test aut
6e10: 68 2d 31 2e 31 36 39 20 7b 0a 20 20 70 72 6f 63  h-1.169 {.  proc
6e20: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
6e30: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
6e40: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
6e50: 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45 54 45  =="SQLITE_DELETE
6e60: 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71 6c  " && $arg1=="sql
6e70: 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22  ite_temp_master"
6e80: 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  } {.      return
6e90: 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20   SQLITE_IGNORE. 
6ea0: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
6eb0: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
6ec0: 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54  catchsql {DROP T
6ed0: 52 49 47 47 45 52 20 72 31 7d 0a 7d 20 7b 30 20  RIGGER r1}.} {0 
6ee0: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
6ef0: 2d 31 2e 31 37 30 20 7b 0a 20 20 65 78 65 63 73  -1.170 {.  execs
6f00: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
6f10: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70  FROM sqlite_temp
6f20: 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31 20 72  _master}.} {t1 r
6f30: 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  1}.do_test auth-
6f40: 31 2e 31 37 31 20 7b 0a 20 20 70 72 6f 63 20 61  1.171 {.  proc a
6f50: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
6f60: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
6f70: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
6f80: 22 53 51 4c 49 54 45 5f 44 52 4f 50 5f 54 45 4d  "SQLITE_DROP_TEM
6f90: 50 5f 54 52 49 47 47 45 52 22 7d 20 7b 0a 20 20  P_TRIGGER"} {.  
6fa0: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
6fb0: 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24  gs [list $arg1 $
6fc0: 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34  arg2 $arg3 $arg4
6fd0: 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  ].      return S
6fe0: 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20  QLITE_IGNORE.   
6ff0: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
7000: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
7010: 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54 52 49  tchsql {DROP TRI
7020: 47 47 45 52 20 72 31 7d 0a 7d 20 7b 30 20 7b 7d  GGER r1}.} {0 {}
7030: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
7040: 2e 31 37 32 20 7b 0a 20 20 73 65 74 20 3a 3a 61  .172 {.  set ::a
7050: 75 74 68 61 72 67 73 0a 7d 20 7b 72 31 20 74 31  uthargs.} {r1 t1
7060: 20 74 65 6d 70 20 7b 7d 7d 0a 64 6f 5f 74 65 73   temp {}}.do_tes
7070: 74 20 61 75 74 68 2d 31 2e 31 37 33 20 7b 0a 20  t auth-1.173 {. 
7080: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
7090: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
70a0: 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d  e_temp_master}.}
70b0: 20 7b 74 31 20 72 31 7d 0a 64 6f 5f 74 65 73 74   {t1 r1}.do_test
70c0: 20 61 75 74 68 2d 31 2e 31 37 34 20 7b 0a 20 20   auth-1.174 {.  
70d0: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
70e0: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
70f0: 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg4} {.    if {$
7100: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52  code=="SQLITE_DR
7110: 4f 50 5f 54 45 4d 50 5f 54 52 49 47 47 45 52 22  OP_TEMP_TRIGGER"
7120: 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a  } {.      set ::
7130: 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24  authargs [list $
7140: 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33  arg1 $arg2 $arg3
7150: 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65   $arg4].      re
7160: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
7170: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
7180: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
7190: 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54  catchsql {DROP T
71a0: 52 49 47 47 45 52 20 72 31 7d 0a 7d 20 7b 30 20  RIGGER r1}.} {0 
71b0: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
71c0: 2d 31 2e 31 37 35 20 7b 0a 20 20 73 65 74 20 3a  -1.175 {.  set :
71d0: 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 72 31 20  :authargs.} {r1 
71e0: 74 31 20 74 65 6d 70 20 7b 7d 7d 0a 64 6f 5f 74  t1 temp {}}.do_t
71f0: 65 73 74 20 61 75 74 68 2d 31 2e 31 37 36 20 7b  est auth-1.176 {
7200: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
7210: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
7220: 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d  ite_temp_master}
7230: 0a 7d 20 7b 74 31 7d 0a 7d 20 3b 23 20 69 66 63  .} {t1}.} ;# ifc
7240: 61 70 61 62 6c 65 20 74 72 69 67 67 65 72 0a 0a  apable trigger..
7250: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
7260: 37 37 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  77 {.  proc auth
7270: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
7280: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
7290: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
72a0: 4c 49 54 45 5f 43 52 45 41 54 45 5f 49 4e 44 45  LITE_CREATE_INDE
72b0: 58 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20  X"} {.      set 
72c0: 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74  ::authargs [list
72d0: 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72   $arg1 $arg2 $ar
72e0: 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20  g3 $arg4].      
72f0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45  return SQLITE_DE
7300: 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  NY.    }.    ret
7310: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
7320: 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52  }.  catchsql {CR
7330: 45 41 54 45 20 49 4e 44 45 58 20 69 32 20 4f 4e  EATE INDEX i2 ON
7340: 20 74 32 28 61 29 7d 0a 7d 20 7b 31 20 7b 6e 6f   t2(a)}.} {1 {no
7350: 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64  t authorized}}.d
7360: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 37  o_test auth-1.17
7370: 38 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68  8 {.  set ::auth
7380: 61 72 67 73 0a 7d 20 7b 69 32 20 74 32 20 6d 61  args.} {i2 t2 ma
7390: 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  in {}}.do_test a
73a0: 75 74 68 2d 31 2e 31 37 39 20 7b 0a 20 20 65 78  uth-1.179 {.  ex
73b0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61  ecsql {SELECT na
73c0: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  me FROM sqlite_m
73d0: 61 73 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a 64 6f  aster}.} {t2}.do
73e0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 38 30  _test auth-1.180
73f0: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
7400: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
7410: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
7420: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
7430: 54 45 5f 49 4e 53 45 52 54 22 20 26 26 20 24 61  TE_INSERT" && $a
7440: 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 6d 61 73  rg1=="sqlite_mas
7450: 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 72 65  ter"} {.      re
7460: 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59  turn SQLITE_DENY
7470: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
7480: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
7490: 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41    catchsql {CREA
74a0: 54 45 20 49 4e 44 45 58 20 69 32 20 4f 4e 20 74  TE INDEX i2 ON t
74b0: 32 28 61 29 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20  2(a)}.} {1 {not 
74c0: 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f  authorized}}.do_
74d0: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 38 31 20  test auth-1.181 
74e0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
74f0: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
7500: 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b  lite_master}.} {
7510: 74 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  t2}.do_test auth
7520: 2d 31 2e 31 38 32 20 7b 0a 20 20 70 72 6f 63 20  -1.182 {.  proc 
7530: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
7540: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
7550: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
7560: 3d 22 53 51 4c 49 54 45 5f 43 52 45 41 54 45 5f  ="SQLITE_CREATE_
7570: 49 4e 44 45 58 22 7d 20 7b 0a 20 20 20 20 20 20  INDEX"} {.      
7580: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b  set ::authargs [
7590: 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67 32  list $arg1 $arg2
75a0: 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20   $arg3 $arg4].  
75b0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
75c0: 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20  E_IGNORE.    }. 
75d0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
75e0: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
75f0: 71 6c 20 7b 43 52 45 41 54 45 20 49 4e 44 45 58  ql {CREATE INDEX
7600: 20 69 32 20 4f 4e 20 74 32 28 62 29 7d 0a 7d 20   i2 ON t2(b)}.} 
7610: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  {0 {}}.do_test a
7620: 75 74 68 2d 31 2e 31 38 33 20 7b 0a 20 20 73 65  uth-1.183 {.  se
7630: 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b  t ::authargs.} {
7640: 69 32 20 74 32 20 6d 61 69 6e 20 7b 7d 7d 0a 64  i2 t2 main {}}.d
7650: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 38  o_test auth-1.18
7660: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  4 {.  execsql {S
7670: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
7680: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d  sqlite_master}.}
7690: 20 7b 74 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75   {t2}.do_test au
76a0: 74 68 2d 31 2e 31 38 35 20 7b 0a 20 20 70 72 6f  th-1.185 {.  pro
76b0: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
76c0: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
76d0: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
76e0: 65 3d 3d 22 53 51 4c 49 54 45 5f 49 4e 53 45 52  e=="SQLITE_INSER
76f0: 54 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71  T" && $arg1=="sq
7700: 6c 69 74 65 5f 6d 61 73 74 65 72 22 7d 20 7b 0a  lite_master"} {.
7710: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
7720: 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d  ITE_IGNORE.    }
7730: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
7740: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
7750: 68 73 71 6c 20 7b 43 52 45 41 54 45 20 49 4e 44  hsql {CREATE IND
7760: 45 58 20 69 32 20 4f 4e 20 74 32 28 62 29 7d 0a  EX i2 ON t2(b)}.
7770: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
7780: 20 61 75 74 68 2d 31 2e 31 38 36 20 7b 0a 20 20   auth-1.186 {.  
7790: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
77a0: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
77b0: 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a  _master}.} {t2}.
77c0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
77d0: 38 37 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  87 {.  proc auth
77e0: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
77f0: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
7800: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
7810: 4c 49 54 45 5f 43 52 45 41 54 45 5f 49 4e 44 45  LITE_CREATE_INDE
7820: 58 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20  X"} {.      set 
7830: 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74  ::authargs [list
7840: 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72   $arg1 $arg2 $ar
7850: 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20  g3 $arg4].      
7860: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
7870: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
7880: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
7890: 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41    catchsql {CREA
78a0: 54 45 20 49 4e 44 45 58 20 69 32 20 4f 4e 20 74  TE INDEX i2 ON t
78b0: 32 28 61 29 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  2(a)}.} {0 {}}.d
78c0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 38  o_test auth-1.18
78d0: 38 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68  8 {.  set ::auth
78e0: 61 72 67 73 0a 7d 20 7b 69 32 20 74 32 20 6d 61  args.} {i2 t2 ma
78f0: 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  in {}}.do_test a
7900: 75 74 68 2d 31 2e 31 38 39 20 7b 0a 20 20 65 78  uth-1.189 {.  ex
7910: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61  ecsql {SELECT na
7920: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  me FROM sqlite_m
7930: 61 73 74 65 72 7d 0a 7d 20 7b 74 32 20 69 32 7d  aster}.} {t2 i2}
7940: 0a 0a 69 66 63 61 70 61 62 6c 65 20 74 65 6d 70  ..ifcapable temp
7950: 64 62 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 61  db {.  do_test a
7960: 75 74 68 2d 31 2e 31 39 30 20 7b 0a 20 20 20 20  uth-1.190 {.    
7970: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
7980: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
7990: 72 67 34 7d 20 7b 0a 20 20 20 20 20 20 69 66 20  rg4} {.      if 
79a0: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
79b0: 43 52 45 41 54 45 5f 54 45 4d 50 5f 49 4e 44 45  CREATE_TEMP_INDE
79c0: 58 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65  X"} {.        se
79d0: 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69  t ::authargs [li
79e0: 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24  st $arg1 $arg2 $
79f0: 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20  arg3 $arg4].    
7a00: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
7a10: 45 5f 44 45 4e 59 0a 20 20 20 20 20 20 7d 0a 20  E_DENY.      }. 
7a20: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
7a30: 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20  TE_OK.    }.    
7a40: 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45  catchsql {CREATE
7a50: 20 49 4e 44 45 58 20 69 31 20 4f 4e 20 74 31 28   INDEX i1 ON t1(
7a60: 61 29 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f 74 20  a)}.  } {1 {not 
7a70: 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 20 20 64  authorized}}.  d
7a80: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 39  o_test auth-1.19
7a90: 31 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a 61 75  1 {.    set ::au
7aa0: 74 68 61 72 67 73 0a 20 20 7d 20 7b 69 31 20 74  thargs.  } {i1 t
7ab0: 31 20 74 65 6d 70 20 7b 7d 7d 0a 20 20 64 6f 5f  1 temp {}}.  do_
7ac0: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 39 32 20  test auth-1.192 
7ad0: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53  {.    execsql {S
7ae0: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
7af0: 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
7b00: 65 72 7d 0a 20 20 7d 20 7b 74 31 7d 0a 20 20 64  er}.  } {t1}.  d
7b10: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 39  o_test auth-1.19
7b20: 33 20 7b 0a 20 20 20 20 70 72 6f 63 20 61 75 74  3 {.    proc aut
7b30: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
7b40: 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20  2 arg3 arg4} {. 
7b50: 20 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d       if {$code==
7b60: 22 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 22 20  "SQLITE_INSERT" 
7b70: 26 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74  && $arg1=="sqlit
7b80: 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 7d 20  e_temp_master"} 
7b90: 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  {.        return
7ba0: 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20   SQLITE_DENY.   
7bb0: 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72     }.      retur
7bc0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20  n SQLITE_OK.    
7bd0: 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b  }.    catchsql {
7be0: 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 31 20  CREATE INDEX i1 
7bf0: 4f 4e 20 74 31 28 62 29 7d 0a 20 20 7d 20 7b 31  ON t1(b)}.  } {1
7c00: 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64   {not authorized
7c10: 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74  }}.  do_test aut
7c20: 68 2d 31 2e 31 39 34 20 7b 0a 20 20 20 20 65 78  h-1.194 {.    ex
7c30: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61  ecsql {SELECT na
7c40: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74  me FROM sqlite_t
7c50: 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 20 20 7d 20  emp_master}.  } 
7c60: 7b 74 31 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61  {t1}.  do_test a
7c70: 75 74 68 2d 31 2e 31 39 35 20 7b 0a 20 20 20 20  uth-1.195 {.    
7c80: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
7c90: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
7ca0: 72 67 34 7d 20 7b 0a 20 20 20 20 20 20 69 66 20  rg4} {.      if 
7cb0: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
7cc0: 43 52 45 41 54 45 5f 54 45 4d 50 5f 49 4e 44 45  CREATE_TEMP_INDE
7cd0: 58 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65  X"} {.        se
7ce0: 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69  t ::authargs [li
7cf0: 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24  st $arg1 $arg2 $
7d00: 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20  arg3 $arg4].    
7d10: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
7d20: 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 20 20 7d  E_IGNORE.      }
7d30: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
7d40: 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20  LITE_OK.    }.  
7d50: 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41    catchsql {CREA
7d60: 54 45 20 49 4e 44 45 58 20 69 31 20 4f 4e 20 74  TE INDEX i1 ON t
7d70: 31 28 62 29 7d 0a 20 20 7d 20 7b 30 20 7b 7d 7d  1(b)}.  } {0 {}}
7d80: 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  .  do_test auth-
7d90: 31 2e 31 39 36 20 7b 0a 20 20 20 20 73 65 74 20  1.196 {.    set 
7da0: 3a 3a 61 75 74 68 61 72 67 73 0a 20 20 7d 20 7b  ::authargs.  } {
7db0: 69 31 20 74 31 20 74 65 6d 70 20 7b 7d 7d 0a 20  i1 t1 temp {}}. 
7dc0: 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e   do_test auth-1.
7dd0: 31 39 37 20 7b 0a 20 20 20 20 65 78 65 63 73 71  197 {.    execsq
7de0: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
7df0: 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f  ROM sqlite_temp_
7e00: 6d 61 73 74 65 72 7d 0a 20 20 7d 20 7b 74 31 7d  master}.  } {t1}
7e10: 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  .  do_test auth-
7e20: 31 2e 31 39 38 20 7b 0a 20 20 20 20 70 72 6f 63  1.198 {.    proc
7e30: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
7e40: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
7e50: 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f   {.      if {$co
7e60: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 49 4e 53 45  de=="SQLITE_INSE
7e70: 52 54 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73  RT" && $arg1=="s
7e80: 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
7e90: 72 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 72 65  r"} {.        re
7ea0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f  turn SQLITE_IGNO
7eb0: 52 45 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  RE.      }.     
7ec0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
7ed0: 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 74 63  K.    }.    catc
7ee0: 68 73 71 6c 20 7b 43 52 45 41 54 45 20 49 4e 44  hsql {CREATE IND
7ef0: 45 58 20 69 31 20 4f 4e 20 74 31 28 63 29 7d 0a  EX i1 ON t1(c)}.
7f00: 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20 20 64 6f 5f    } {0 {}}.  do_
7f10: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 39 39 20  test auth-1.199 
7f20: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53  {.    execsql {S
7f30: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
7f40: 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
7f50: 65 72 7d 0a 20 20 7d 20 7b 74 31 7d 0a 20 20 64  er}.  } {t1}.  d
7f60: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 30  o_test auth-1.20
7f70: 30 20 7b 0a 20 20 20 20 70 72 6f 63 20 61 75 74  0 {.    proc aut
7f80: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
7f90: 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20  2 arg3 arg4} {. 
7fa0: 20 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d       if {$code==
7fb0: 22 53 51 4c 49 54 45 5f 43 52 45 41 54 45 5f 54  "SQLITE_CREATE_T
7fc0: 45 4d 50 5f 49 4e 44 45 58 22 7d 20 7b 0a 20 20  EMP_INDEX"} {.  
7fd0: 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68        set ::auth
7fe0: 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31  args [list $arg1
7ff0: 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72   $arg2 $arg3 $ar
8000: 67 34 5d 0a 20 20 20 20 20 20 20 20 72 65 74 75  g4].        retu
8010: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20  rn SQLITE_OK.   
8020: 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72     }.      retur
8030: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20  n SQLITE_OK.    
8040: 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b  }.    catchsql {
8050: 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 31 20  CREATE INDEX i1 
8060: 4f 4e 20 74 31 28 61 29 7d 0a 20 20 7d 20 7b 30  ON t1(a)}.  } {0
8070: 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61   {}}.  do_test a
8080: 75 74 68 2d 31 2e 32 30 31 20 7b 0a 20 20 20 20  uth-1.201 {.    
8090: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 20  set ::authargs. 
80a0: 20 7d 20 7b 69 31 20 74 31 20 74 65 6d 70 20 7b   } {i1 t1 temp {
80b0: 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74  }}.  do_test aut
80c0: 68 2d 31 2e 32 30 32 20 7b 0a 20 20 20 20 65 78  h-1.202 {.    ex
80d0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61  ecsql {SELECT na
80e0: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74  me FROM sqlite_t
80f0: 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 20 20 7d 20  emp_master}.  } 
8100: 7b 74 31 20 69 31 7d 0a 7d 0a 0a 64 6f 5f 74 65  {t1 i1}.}..do_te
8110: 73 74 20 61 75 74 68 2d 31 2e 32 30 33 20 7b 0a  st auth-1.203 {.
8120: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
8130: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
8140: 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20   arg4} {.    if 
8150: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
8160: 44 45 4c 45 54 45 22 20 26 26 20 24 61 72 67 31  DELETE" && $arg1
8170: 3d 3d 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  =="sqlite_master
8180: 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72  "} {.      retur
8190: 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20  n SQLITE_DENY.  
81a0: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
81b0: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
81c0: 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 49 4e  atchsql {DROP IN
81d0: 44 45 58 20 69 32 7d 0a 7d 20 7b 31 20 7b 6e 6f  DEX i2}.} {1 {no
81e0: 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64  t authorized}}.d
81f0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 30  o_test auth-1.20
8200: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  4 {.  execsql {S
8210: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
8220: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d  sqlite_master}.}
8230: 20 7b 74 32 20 69 32 7d 0a 64 6f 5f 74 65 73 74   {t2 i2}.do_test
8240: 20 61 75 74 68 2d 31 2e 32 30 35 20 7b 0a 20 20   auth-1.205 {.  
8250: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
8260: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
8270: 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg4} {.    if {$
8280: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52  code=="SQLITE_DR
8290: 4f 50 5f 49 4e 44 45 58 22 7d 20 7b 0a 20 20 20  OP_INDEX"} {.   
82a0: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
82b0: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
82c0: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
82d0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
82e0: 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a  LITE_DENY.    }.
82f0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
8300: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
8310: 73 71 6c 20 7b 44 52 4f 50 20 49 4e 44 45 58 20  sql {DROP INDEX 
8320: 69 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75  i2}.} {1 {not au
8330: 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65  thorized}}.do_te
8340: 73 74 20 61 75 74 68 2d 31 2e 32 30 36 20 7b 0a  st auth-1.206 {.
8350: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
8360: 0a 7d 20 7b 69 32 20 74 32 20 6d 61 69 6e 20 7b  .} {i2 t2 main {
8370: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
8380: 31 2e 32 30 37 20 7b 0a 20 20 65 78 65 63 73 71  1.207 {.  execsq
8390: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
83a0: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
83b0: 72 7d 0a 7d 20 7b 74 32 20 69 32 7d 0a 64 6f 5f  r}.} {t2 i2}.do_
83c0: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 30 38 20  test auth-1.208 
83d0: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
83e0: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
83f0: 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69  g3 arg4} {.    i
8400: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
8410: 45 5f 44 45 4c 45 54 45 22 20 26 26 20 24 61 72  E_DELETE" && $ar
8420: 67 31 3d 3d 22 73 71 6c 69 74 65 5f 6d 61 73 74  g1=="sqlite_mast
8430: 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74  er"} {.      ret
8440: 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52  urn SQLITE_IGNOR
8450: 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  E.    }.    retu
8460: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
8470: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f  .  catchsql {DRO
8480: 50 20 49 4e 44 45 58 20 69 32 7d 0a 7d 20 7b 30  P INDEX i2}.} {0
8490: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
84a0: 68 2d 31 2e 32 30 39 20 7b 0a 20 20 65 78 65 63  h-1.209 {.  exec
84b0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
84c0: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
84d0: 74 65 72 7d 0a 7d 20 7b 74 32 20 69 32 7d 0a 64  ter}.} {t2 i2}.d
84e0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 31  o_test auth-1.21
84f0: 30 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  0 {.  proc auth 
8500: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
8510: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
8520: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
8530: 49 54 45 5f 44 52 4f 50 5f 49 4e 44 45 58 22 7d  ITE_DROP_INDEX"}
8540: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61   {.      set ::a
8550: 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61  uthargs [list $a
8560: 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20  rg1 $arg2 $arg3 
8570: 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74  $arg4].      ret
8580: 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52  urn SQLITE_IGNOR
8590: 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  E.    }.    retu
85a0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
85b0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f  .  catchsql {DRO
85c0: 50 20 49 4e 44 45 58 20 69 32 7d 0a 7d 20 7b 30  P INDEX i2}.} {0
85d0: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
85e0: 68 2d 31 2e 32 31 31 20 7b 0a 20 20 73 65 74 20  h-1.211 {.  set 
85f0: 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 69 32  ::authargs.} {i2
8600: 20 74 32 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f   t2 main {}}.do_
8610: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 31 32 20  test auth-1.212 
8620: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
8630: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
8640: 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b  lite_master}.} {
8650: 74 32 20 69 32 7d 0a 64 6f 5f 74 65 73 74 20 61  t2 i2}.do_test a
8660: 75 74 68 2d 31 2e 32 31 33 20 7b 0a 20 20 70 72  uth-1.213 {.  pr
8670: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
8680: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
8690: 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f  4} {.    if {$co
86a0: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f 50  de=="SQLITE_DROP
86b0: 5f 49 4e 44 45 58 22 7d 20 7b 0a 20 20 20 20 20  _INDEX"} {.     
86c0: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
86d0: 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67  [list $arg1 $arg
86e0: 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20  2 $arg3 $arg4]. 
86f0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
8700: 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20  TE_OK.    }.    
8710: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
8720: 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20  .  }.  catchsql 
8730: 7b 44 52 4f 50 20 49 4e 44 45 58 20 69 32 7d 0a  {DROP INDEX i2}.
8740: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
8750: 20 61 75 74 68 2d 31 2e 32 31 34 20 7b 0a 20 20   auth-1.214 {.  
8760: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d  set ::authargs.}
8770: 20 7b 69 32 20 74 32 20 6d 61 69 6e 20 7b 7d 7d   {i2 t2 main {}}
8780: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
8790: 32 31 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  215 {.  execsql 
87a0: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
87b0: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d  M sqlite_master}
87c0: 0a 7d 20 7b 74 32 7d 0a 0a 69 66 63 61 70 61 62  .} {t2}..ifcapab
87d0: 6c 65 20 74 65 6d 70 64 62 20 7b 0a 20 20 64 6f  le tempdb {.  do
87e0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 31 36  _test auth-1.216
87f0: 20 7b 0a 20 20 20 20 70 72 6f 63 20 61 75 74 68   {.    proc auth
8800: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
8810: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
8820: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
8830: 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 22 20 26  SQLITE_DELETE" &
8840: 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65  & $arg1=="sqlite
8850: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 7d 20 7b  _temp_master"} {
8860: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
8870: 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20  SQLITE_DENY.    
8880: 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e    }.      return
8890: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d   SQLITE_OK.    }
88a0: 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 44  .    catchsql {D
88b0: 52 4f 50 20 49 4e 44 45 58 20 69 31 7d 0a 20 20  ROP INDEX i1}.  
88c0: 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72  } {1 {not author
88d0: 69 7a 65 64 7d 7d 0a 20 20 64 6f 5f 74 65 73 74  ized}}.  do_test
88e0: 20 61 75 74 68 2d 31 2e 32 31 37 20 7b 0a 20 20   auth-1.217 {.  
88f0: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
8900: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
8910: 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a  te_temp_master}.
8920: 20 20 7d 20 7b 74 31 20 69 31 7d 0a 20 20 64 6f    } {t1 i1}.  do
8930: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 31 38  _test auth-1.218
8940: 20 7b 0a 20 20 20 20 70 72 6f 63 20 61 75 74 68   {.    proc auth
8950: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
8960: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
8970: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
8980: 53 51 4c 49 54 45 5f 44 52 4f 50 5f 54 45 4d 50  SQLITE_DROP_TEMP
8990: 5f 49 4e 44 45 58 22 7d 20 7b 0a 20 20 20 20 20  _INDEX"} {.     
89a0: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
89b0: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
89c0: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
89d0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
89e0: 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20  SQLITE_DENY.    
89f0: 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e    }.      return
8a00: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d   SQLITE_OK.    }
8a10: 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 44  .    catchsql {D
8a20: 52 4f 50 20 49 4e 44 45 58 20 69 31 7d 0a 20 20  ROP INDEX i1}.  
8a30: 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72  } {1 {not author
8a40: 69 7a 65 64 7d 7d 0a 20 20 64 6f 5f 74 65 73 74  ized}}.  do_test
8a50: 20 61 75 74 68 2d 31 2e 32 31 39 20 7b 0a 20 20   auth-1.219 {.  
8a60: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
8a70: 0a 20 20 7d 20 7b 69 31 20 74 31 20 74 65 6d 70  .  } {i1 t1 temp
8a80: 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61   {}}.  do_test a
8a90: 75 74 68 2d 31 2e 32 32 30 20 7b 0a 20 20 20 20  uth-1.220 {.    
8aa0: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
8ab0: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
8ac0: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 20 20  _temp_master}.  
8ad0: 7d 20 7b 74 31 20 69 31 7d 0a 20 20 64 6f 5f 74  } {t1 i1}.  do_t
8ae0: 65 73 74 20 61 75 74 68 2d 31 2e 32 32 31 20 7b  est auth-1.221 {
8af0: 0a 20 20 20 20 70 72 6f 63 20 61 75 74 68 20 7b  .    proc auth {
8b00: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
8b10: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
8b20: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
8b30: 4c 49 54 45 5f 44 45 4c 45 54 45 22 20 26 26 20  LITE_DELETE" && 
8b40: 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 74  $arg1=="sqlite_t
8b50: 65 6d 70 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20  emp_master"} {. 
8b60: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
8b70: 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20  LITE_IGNORE.    
8b80: 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e    }.      return
8b90: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d   SQLITE_OK.    }
8ba0: 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 44  .    catchsql {D
8bb0: 52 4f 50 20 49 4e 44 45 58 20 69 31 7d 0a 20 20  ROP INDEX i1}.  
8bc0: 7d 20 7b 30 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65  } {0 {}}.  do_te
8bd0: 73 74 20 61 75 74 68 2d 31 2e 32 32 32 20 7b 0a  st auth-1.222 {.
8be0: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c      execsql {SEL
8bf0: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
8c00: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
8c10: 7d 0a 20 20 7d 20 7b 74 31 20 69 31 7d 0a 20 20  }.  } {t1 i1}.  
8c20: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
8c30: 32 33 20 7b 0a 20 20 20 20 70 72 6f 63 20 61 75  23 {.    proc au
8c40: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
8c50: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
8c60: 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d        if {$code=
8c70: 3d 22 53 51 4c 49 54 45 5f 44 52 4f 50 5f 54 45  ="SQLITE_DROP_TE
8c80: 4d 50 5f 49 4e 44 45 58 22 7d 20 7b 0a 20 20 20  MP_INDEX"} {.   
8c90: 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61       set ::autha
8ca0: 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20  rgs [list $arg1 
8cb0: 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67  $arg2 $arg3 $arg
8cc0: 34 5d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  4].        retur
8cd0: 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a  n SQLITE_IGNORE.
8ce0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65        }.      re
8cf0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
8d00: 20 20 20 7d 0a 20 20 20 20 63 61 74 63 68 73 71     }.    catchsq
8d10: 6c 20 7b 44 52 4f 50 20 49 4e 44 45 58 20 69 31  l {DROP INDEX i1
8d20: 7d 0a 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20 20 64  }.  } {0 {}}.  d
8d30: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 32  o_test auth-1.22
8d40: 34 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a 61 75  4 {.    set ::au
8d50: 74 68 61 72 67 73 0a 20 20 7d 20 7b 69 31 20 74  thargs.  } {i1 t
8d60: 31 20 74 65 6d 70 20 7b 7d 7d 0a 20 20 64 6f 5f  1 temp {}}.  do_
8d70: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 32 35 20  test auth-1.225 
8d80: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53  {.    execsql {S
8d90: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
8da0: 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
8db0: 65 72 7d 0a 20 20 7d 20 7b 74 31 20 69 31 7d 0a  er}.  } {t1 i1}.
8dc0: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31    do_test auth-1
8dd0: 2e 32 32 36 20 7b 0a 20 20 20 20 70 72 6f 63 20  .226 {.    proc 
8de0: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
8df0: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
8e00: 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64  {.      if {$cod
8e10: 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f 50 5f  e=="SQLITE_DROP_
8e20: 54 45 4d 50 5f 49 4e 44 45 58 22 7d 20 7b 0a 20  TEMP_INDEX"} {. 
8e30: 20 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74         set ::aut
8e40: 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67  hargs [list $arg
8e50: 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61  1 $arg2 $arg3 $a
8e60: 72 67 34 5d 0a 20 20 20 20 20 20 20 20 72 65 74  rg4].        ret
8e70: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
8e80: 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75      }.      retu
8e90: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20  rn SQLITE_OK.   
8ea0: 20 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20   }.    catchsql 
8eb0: 7b 44 52 4f 50 20 49 4e 44 45 58 20 69 31 7d 0a  {DROP INDEX i1}.
8ec0: 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20 20 64 6f 5f    } {0 {}}.  do_
8ed0: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 32 37 20  test auth-1.227 
8ee0: 7b 0a 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68  {.    set ::auth
8ef0: 61 72 67 73 0a 20 20 7d 20 7b 69 31 20 74 31 20  args.  } {i1 t1 
8f00: 74 65 6d 70 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65  temp {}}.  do_te
8f10: 73 74 20 61 75 74 68 2d 31 2e 32 32 38 20 7b 0a  st auth-1.228 {.
8f20: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c      execsql {SEL
8f30: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
8f40: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
8f50: 7d 0a 20 20 7d 20 7b 74 31 7d 0a 7d 0a 0a 64 6f  }.  } {t1}.}..do
8f60: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 32 39  _test auth-1.229
8f70: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
8f80: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
8f90: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
8fa0: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
8fb0: 54 45 5f 50 52 41 47 4d 41 22 7d 20 7b 0a 20 20  TE_PRAGMA"} {.  
8fc0: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
8fd0: 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24  gs [list $arg1 $
8fe0: 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34  arg2 $arg3 $arg4
8ff0: 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  ].      return S
9000: 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d  QLITE_DENY.    }
9010: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
9020: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
9030: 68 73 71 6c 20 7b 50 52 41 47 4d 41 20 66 75 6c  hsql {PRAGMA ful
9040: 6c 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 3d 6f  l_column_names=o
9050: 6e 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74  n}.} {1 {not aut
9060: 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73  horized}}.do_tes
9070: 74 20 61 75 74 68 2d 31 2e 32 33 30 20 7b 0a 20  t auth-1.230 {. 
9080: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a   set ::authargs.
9090: 7d 20 7b 66 75 6c 6c 5f 63 6f 6c 75 6d 6e 5f 6e  } {full_column_n
90a0: 61 6d 65 73 20 6f 6e 20 7b 7d 20 7b 7d 7d 0a 64  ames on {} {}}.d
90b0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 33  o_test auth-1.23
90c0: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 32 20 7b  1 {.  execsql2 {
90d0: 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 32  SELECT a FROM t2
90e0: 7d 0a 7d 20 7b 61 20 31 31 20 61 20 37 7d 0a 64  }.} {a 11 a 7}.d
90f0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 33  o_test auth-1.23
9100: 32 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  2 {.  proc auth 
9110: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
9120: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
9130: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
9140: 49 54 45 5f 50 52 41 47 4d 41 22 7d 20 7b 0a 20  ITE_PRAGMA"} {. 
9150: 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61       set ::autha
9160: 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20  rgs [list $arg1 
9170: 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67  $arg2 $arg3 $arg
9180: 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  4].      return 
9190: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20  SQLITE_IGNORE.  
91a0: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
91b0: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
91c0: 61 74 63 68 73 71 6c 20 7b 50 52 41 47 4d 41 20  atchsql {PRAGMA 
91d0: 66 75 6c 6c 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65  full_column_name
91e0: 73 3d 6f 6e 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  s=on}.} {0 {}}.d
91f0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 33  o_test auth-1.23
9200: 33 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68  3 {.  set ::auth
9210: 61 72 67 73 0a 7d 20 7b 66 75 6c 6c 5f 63 6f 6c  args.} {full_col
9220: 75 6d 6e 5f 6e 61 6d 65 73 20 6f 6e 20 7b 7d 20  umn_names on {} 
9230: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
9240: 2d 31 2e 32 33 34 20 7b 0a 20 20 65 78 65 63 73  -1.234 {.  execs
9250: 71 6c 32 20 7b 53 45 4c 45 43 54 20 61 20 46 52  ql2 {SELECT a FR
9260: 4f 4d 20 74 32 7d 0a 7d 20 7b 61 20 31 31 20 61  OM t2}.} {a 11 a
9270: 20 37 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68   7}.do_test auth
9280: 2d 31 2e 32 33 35 20 7b 0a 20 20 70 72 6f 63 20  -1.235 {.  proc 
9290: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
92a0: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
92b0: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
92c0: 3d 22 53 51 4c 49 54 45 5f 50 52 41 47 4d 41 22  ="SQLITE_PRAGMA"
92d0: 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a  } {.      set ::
92e0: 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24  authargs [list $
92f0: 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33  arg1 $arg2 $arg3
9300: 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65   $arg4].      re
9310: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
9320: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
9330: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
9340: 63 61 74 63 68 73 71 6c 20 7b 50 52 41 47 4d 41  catchsql {PRAGMA
9350: 20 66 75 6c 6c 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d   full_column_nam
9360: 65 73 3d 6f 6e 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a  es=on}.} {0 {}}.
9370: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
9380: 33 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 32 20  36 {.  execsql2 
9390: 7b 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74  {SELECT a FROM t
93a0: 32 7d 0a 7d 20 7b 74 32 2e 61 20 31 31 20 74 32  2}.} {t2.a 11 t2
93b0: 2e 61 20 37 7d 0a 64 6f 5f 74 65 73 74 20 61 75  .a 7}.do_test au
93c0: 74 68 2d 31 2e 32 33 37 20 7b 0a 20 20 70 72 6f  th-1.237 {.  pro
93d0: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
93e0: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
93f0: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
9400: 65 3d 3d 22 53 51 4c 49 54 45 5f 50 52 41 47 4d  e=="SQLITE_PRAGM
9410: 41 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20  A"} {.      set 
9420: 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74  ::authargs [list
9430: 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72   $arg1 $arg2 $ar
9440: 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20  g3 $arg4].      
9450: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
9460: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
9470: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
9480: 20 20 63 61 74 63 68 73 71 6c 20 7b 50 52 41 47    catchsql {PRAG
9490: 4d 41 20 66 75 6c 6c 5f 63 6f 6c 75 6d 6e 5f 6e  MA full_column_n
94a0: 61 6d 65 73 3d 4f 46 46 7d 0a 7d 20 7b 30 20 7b  ames=OFF}.} {0 {
94b0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
94c0: 31 2e 32 33 38 20 7b 0a 20 20 73 65 74 20 3a 3a  1.238 {.  set ::
94d0: 61 75 74 68 61 72 67 73 0a 7d 20 7b 66 75 6c 6c  authargs.} {full
94e0: 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 20 4f 46  _column_names OF
94f0: 46 20 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  F {} {}}.do_test
9500: 20 61 75 74 68 2d 31 2e 32 33 39 20 7b 0a 20 20   auth-1.239 {.  
9510: 65 78 65 63 73 71 6c 32 20 7b 53 45 4c 45 43 54  execsql2 {SELECT
9520: 20 61 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 61   a FROM t2}.} {a
9530: 20 31 31 20 61 20 37 7d 0a 0a 64 6f 5f 74 65 73   11 a 7}..do_tes
9540: 74 20 61 75 74 68 2d 31 2e 32 34 30 20 7b 0a 20  t auth-1.240 {. 
9550: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
9560: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
9570: 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg4} {.    if {
9580: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 54  $code=="SQLITE_T
9590: 52 41 4e 53 41 43 54 49 4f 4e 22 7d 20 7b 0a 20  RANSACTION"} {. 
95a0: 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61       set ::autha
95b0: 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20  rgs [list $arg1 
95c0: 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67  $arg2 $arg3 $arg
95d0: 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  4].      return 
95e0: 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20  SQLITE_DENY.    
95f0: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
9600: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
9610: 63 68 73 71 6c 20 7b 42 45 47 49 4e 7d 0a 7d 20  chsql {BEGIN}.} 
9620: 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a  {1 {not authoriz
9630: 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  ed}}.do_test aut
9640: 68 2d 31 2e 32 34 31 20 7b 0a 20 20 73 65 74 20  h-1.241 {.  set 
9650: 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 42 45  ::authargs.} {BE
9660: 47 49 4e 20 7b 7d 20 7b 7d 20 7b 7d 7d 0a 64 6f  GIN {} {} {}}.do
9670: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 34 32  _test auth-1.242
9680: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
9690: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
96a0: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
96b0: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
96c0: 54 45 5f 54 52 41 4e 53 41 43 54 49 4f 4e 22 20  TE_TRANSACTION" 
96d0: 26 26 20 24 61 72 67 31 21 3d 22 42 45 47 49 4e  && $arg1!="BEGIN
96e0: 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a  "} {.      set :
96f0: 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20  :authargs [list 
9700: 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67  $arg1 $arg2 $arg
9710: 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72  3 $arg4].      r
9720: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e  eturn SQLITE_DEN
9730: 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  Y.    }.    retu
9740: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
9750: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 42 45 47  .  catchsql {BEG
9760: 49 4e 3b 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  IN; INSERT INTO 
9770: 74 32 20 56 41 4c 55 45 53 28 34 34 2c 35 35 2c  t2 VALUES(44,55,
9780: 36 36 29 3b 20 43 4f 4d 4d 49 54 7d 0a 7d 20 7b  66); COMMIT}.} {
9790: 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65  1 {not authorize
97a0: 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  d}}.do_test auth
97b0: 2d 31 2e 32 34 33 20 7b 0a 20 20 73 65 74 20 3a  -1.243 {.  set :
97c0: 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 43 4f 4d  :authargs.} {COM
97d0: 4d 49 54 20 7b 7d 20 7b 7d 20 7b 7d 7d 0a 64 6f  MIT {} {} {}}.do
97e0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 34 34  _test auth-1.244
97f0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
9800: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d 0a  LECT * FROM t2}.
9810: 7d 20 7b 31 31 20 32 20 33 33 20 37 20 38 20 39  } {11 2 33 7 8 9
9820: 20 34 34 20 35 35 20 36 36 7d 0a 64 6f 5f 74 65   44 55 66}.do_te
9830: 73 74 20 61 75 74 68 2d 31 2e 32 34 35 20 7b 0a  st auth-1.245 {.
9840: 20 20 63 61 74 63 68 73 71 6c 20 7b 52 4f 4c 4c    catchsql {ROLL
9850: 42 41 43 4b 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20  BACK}.} {1 {not 
9860: 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f  authorized}}.do_
9870: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 34 36 20  test auth-1.246 
9880: 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72  {.  set ::authar
9890: 67 73 0a 7d 20 7b 52 4f 4c 4c 42 41 43 4b 20 7b  gs.} {ROLLBACK {
98a0: 7d 20 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {} {}}.do_test
98b0: 20 61 75 74 68 2d 31 2e 32 34 37 20 7b 0a 20 20   auth-1.247 {.  
98c0: 63 61 74 63 68 73 71 6c 20 7b 45 4e 44 20 54 52  catchsql {END TR
98d0: 41 4e 53 41 43 54 49 4f 4e 7d 0a 7d 20 7b 31 20  ANSACTION}.} {1 
98e0: 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d  {not authorized}
98f0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
9900: 2e 32 34 38 20 7b 0a 20 20 73 65 74 20 3a 3a 61  .248 {.  set ::a
9910: 75 74 68 61 72 67 73 0a 7d 20 7b 43 4f 4d 4d 49  uthargs.} {COMMI
9920: 54 20 7b 7d 20 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74  T {} {} {}}.do_t
9930: 65 73 74 20 61 75 74 68 2d 31 2e 32 34 39 20 7b  est auth-1.249 {
9940: 0a 20 20 64 62 20 61 75 74 68 6f 72 69 7a 65 72  .  db authorizer
9950: 20 7b 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b   {}.  catchsql {
9960: 52 4f 4c 4c 42 41 43 4b 7d 0a 7d 20 7b 30 20 7b  ROLLBACK}.} {0 {
9970: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
9980: 31 2e 32 35 30 20 7b 0a 20 20 65 78 65 63 73 71  1.250 {.  execsq
9990: 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  l {SELECT * FROM
99a0: 20 74 32 7d 0a 7d 20 7b 31 31 20 32 20 33 33 20   t2}.} {11 2 33 
99b0: 37 20 38 20 39 7d 0a 0a 23 20 74 69 63 6b 65 74  7 8 9}..# ticket
99c0: 20 23 33 34 30 20 2d 20 61 75 74 68 6f 72 69 7a   #340 - authoriz
99d0: 61 74 69 6f 6e 20 66 6f 72 20 41 54 54 41 43 48  ation for ATTACH
99e0: 20 61 6e 64 20 44 45 54 41 43 48 2e 0a 23 0a 69   and DETACH..#.i
99f0: 66 63 61 70 61 62 6c 65 20 61 74 74 61 63 68 20  fcapable attach 
9a00: 7b 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68  {.  do_test auth
9a10: 2d 31 2e 32 35 31 20 7b 0a 20 20 20 20 64 62 20  -1.251 {.    db 
9a20: 61 75 74 68 6f 72 69 7a 65 72 20 3a 3a 61 75 74  authorizer ::aut
9a30: 68 0a 20 20 20 20 70 72 6f 63 20 61 75 74 68 20  h.    proc auth 
9a40: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
9a50: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
9a60: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
9a70: 51 4c 49 54 45 5f 41 54 54 41 43 48 22 7d 20 7b  QLITE_ATTACH"} {
9a80: 0a 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a 61  .        set ::a
9a90: 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61  uthargs [list $a
9aa0: 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20  rg1 $arg2 $arg3 
9ab0: 24 61 72 67 34 5d 0a 20 20 20 20 20 20 7d 0a 20  $arg4].      }. 
9ac0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
9ad0: 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20  TE_OK.    }.    
9ae0: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20  catchsql {.     
9af0: 20 41 54 54 41 43 48 20 44 41 54 41 42 41 53 45   ATTACH DATABASE
9b00: 20 27 3a 6d 65 6d 6f 72 79 3a 27 20 41 53 20 74   ':memory:' AS t
9b10: 65 73 74 31 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  est1.    }.  } {
9b20: 30 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20  0 {}}.  do_test 
9b30: 61 75 74 68 2d 31 2e 32 35 32 61 20 7b 0a 20 20  auth-1.252a {.  
9b40: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
9b50: 0a 20 20 7d 20 7b 3a 6d 65 6d 6f 72 79 3a 20 7b  .  } {:memory: {
9b60: 7d 20 7b 7d 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65  } {} {}}.  do_te
9b70: 73 74 20 61 75 74 68 2d 31 2e 32 35 32 62 20 7b  st auth-1.252b {
9b80: 0a 20 20 20 20 64 62 20 65 76 61 6c 20 7b 44 45  .    db eval {DE
9b90: 54 41 43 48 20 74 65 73 74 31 7d 0a 20 20 20 20  TACH test1}.    
9ba0: 73 65 74 20 3a 3a 61 74 74 61 63 68 66 69 6c 65  set ::attachfile
9bb0: 6e 61 6d 65 20 3a 6d 65 6d 6f 72 79 3a 0a 20 20  name :memory:.  
9bc0: 20 20 64 62 20 65 76 61 6c 20 7b 41 54 54 41 43    db eval {ATTAC
9bd0: 48 20 24 3a 3a 61 74 74 61 63 68 66 69 6c 65 6e  H $::attachfilen
9be0: 61 6d 65 20 41 53 20 74 65 73 74 31 7d 0a 20 20  ame AS test1}.  
9bf0: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
9c00: 0a 20 20 7d 20 7b 7b 7d 20 7b 7d 20 7b 7d 20 7b  .  } {{} {} {} {
9c10: 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74  }}.  do_test aut
9c20: 68 2d 31 2e 32 35 32 63 20 7b 0a 20 20 20 20 64  h-1.252c {.    d
9c30: 62 20 65 76 61 6c 20 7b 44 45 54 41 43 48 20 74  b eval {DETACH t
9c40: 65 73 74 31 7d 0a 20 20 20 20 64 62 20 65 76 61  est1}.    db eva
9c50: 6c 20 7b 41 54 54 41 43 48 20 27 3a 6d 65 6d 27  l {ATTACH ':mem'
9c60: 20 7c 7c 20 27 6f 72 79 3a 27 20 41 53 20 74 65   || 'ory:' AS te
9c70: 73 74 31 7d 0a 20 20 20 20 73 65 74 20 3a 3a 61  st1}.    set ::a
9c80: 75 74 68 61 72 67 73 0a 20 20 7d 20 7b 7b 7d 20  uthargs.  } {{} 
9c90: 7b 7d 20 7b 7d 20 7b 7d 7d 0a 20 20 64 6f 5f 74  {} {} {}}.  do_t
9ca0: 65 73 74 20 61 75 74 68 2d 31 2e 32 35 33 20 7b  est auth-1.253 {
9cb0: 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 44  .    catchsql {D
9cc0: 45 54 41 43 48 20 44 41 54 41 42 41 53 45 20 74  ETACH DATABASE t
9cd0: 65 73 74 31 7d 0a 20 20 20 20 70 72 6f 63 20 61  est1}.    proc a
9ce0: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
9cf0: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
9d00: 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64 65  .      if {$code
9d10: 3d 3d 22 53 51 4c 49 54 45 5f 41 54 54 41 43 48  =="SQLITE_ATTACH
9d20: 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74  "} {.        set
9d30: 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73   ::authargs [lis
9d40: 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61  t $arg1 $arg2 $a
9d50: 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20  rg3 $arg4].     
9d60: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
9d70: 5f 44 45 4e 59 0a 20 20 20 20 20 20 7d 0a 20 20  _DENY.      }.  
9d80: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
9d90: 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63  E_OK.    }.    c
9da0: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20  atchsql {.      
9db0: 41 54 54 41 43 48 20 44 41 54 41 42 41 53 45 20  ATTACH DATABASE 
9dc0: 27 3a 6d 65 6d 6f 72 79 3a 27 20 41 53 20 74 65  ':memory:' AS te
9dd0: 73 74 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  st1;.    }.  } {
9de0: 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65  1 {not authorize
9df0: 64 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75  d}}.  do_test au
9e00: 74 68 2d 31 2e 32 35 34 20 7b 0a 20 20 20 20 6c  th-1.254 {.    l
9e10: 69 6e 64 65 78 20 5b 65 78 65 63 73 71 6c 20 7b  index [execsql {
9e20: 50 52 41 47 4d 41 20 64 61 74 61 62 61 73 65 5f  PRAGMA database_
9e30: 6c 69 73 74 7d 5d 20 37 0a 20 20 7d 20 7b 7d 0a  list}] 7.  } {}.
9e40: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31    do_test auth-1
9e50: 2e 32 35 35 20 7b 0a 20 20 20 20 63 61 74 63 68  .255 {.    catch
9e60: 73 71 6c 20 7b 44 45 54 41 43 48 20 44 41 54 41  sql {DETACH DATA
9e70: 42 41 53 45 20 74 65 73 74 31 7d 0a 20 20 20 20  BASE test1}.    
9e80: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
9e90: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
9ea0: 72 67 34 7d 20 7b 0a 20 20 20 20 20 20 69 66 20  rg4} {.      if 
9eb0: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
9ec0: 41 54 54 41 43 48 22 7d 20 7b 0a 20 20 20 20 20  ATTACH"} {.     
9ed0: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
9ee0: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
9ef0: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
9f00: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
9f10: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20  SQLITE_IGNORE.  
9f20: 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75      }.      retu
9f30: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20  rn SQLITE_OK.   
9f40: 20 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20   }.    catchsql 
9f50: 7b 0a 20 20 20 20 20 20 41 54 54 41 43 48 20 44  {.      ATTACH D
9f60: 41 54 41 42 41 53 45 20 27 3a 6d 65 6d 6f 72 79  ATABASE ':memory
9f70: 3a 27 20 41 53 20 74 65 73 74 31 3b 0a 20 20 20  :' AS test1;.   
9f80: 20 7d 0a 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20 20   }.  } {0 {}}.  
9f90: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
9fa0: 35 36 20 7b 0a 20 20 20 20 6c 69 6e 64 65 78 20  56 {.    lindex 
9fb0: 5b 65 78 65 63 73 71 6c 20 7b 50 52 41 47 4d 41  [execsql {PRAGMA
9fc0: 20 64 61 74 61 62 61 73 65 5f 6c 69 73 74 7d 5d   database_list}]
9fd0: 20 37 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74   7.  } {}.  do_t
9fe0: 65 73 74 20 61 75 74 68 2d 31 2e 32 35 37 20 7b  est auth-1.257 {
9ff0: 0a 20 20 20 20 70 72 6f 63 20 61 75 74 68 20 7b  .    proc auth {
a000: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
a010: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
a020: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
a030: 4c 49 54 45 5f 44 45 54 41 43 48 22 7d 20 7b 0a  LITE_DETACH"} {.
a040: 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75          set ::au
a050: 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72  thargs [list $ar
a060: 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24  g1 $arg2 $arg3 $
a070: 61 72 67 34 5d 0a 20 20 20 20 20 20 20 20 72 65  arg4].        re
a080: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
a090: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74       }.      ret
a0a0: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
a0b0: 20 20 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20    }.    execsql 
a0c0: 7b 41 54 54 41 43 48 20 44 41 54 41 42 41 53 45  {ATTACH DATABASE
a0d0: 20 27 3a 6d 65 6d 6f 72 79 3a 27 20 41 53 20 74   ':memory:' AS t
a0e0: 65 73 74 31 7d 0a 20 20 20 20 63 61 74 63 68 73  est1}.    catchs
a0f0: 71 6c 20 7b 0a 20 20 20 20 20 20 44 45 54 41 43  ql {.      DETAC
a100: 48 20 44 41 54 41 42 41 53 45 20 74 65 73 74 31  H DATABASE test1
a110: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 30 20 7b  ;.    }.  } {0 {
a120: 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74  }}.  do_test aut
a130: 68 2d 31 2e 32 35 38 20 7b 0a 20 20 20 20 6c 69  h-1.258 {.    li
a140: 6e 64 65 78 20 5b 65 78 65 63 73 71 6c 20 7b 50  ndex [execsql {P
a150: 52 41 47 4d 41 20 64 61 74 61 62 61 73 65 5f 6c  RAGMA database_l
a160: 69 73 74 7d 5d 20 37 0a 20 20 7d 20 7b 7d 0a 20  ist}] 7.  } {}. 
a170: 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e   do_test auth-1.
a180: 32 35 39 20 7b 0a 20 20 20 20 65 78 65 63 73 71  259 {.    execsq
a190: 6c 20 7b 41 54 54 41 43 48 20 44 41 54 41 42 41  l {ATTACH DATABA
a1a0: 53 45 20 27 3a 6d 65 6d 6f 72 79 3a 27 20 41 53  SE ':memory:' AS
a1b0: 20 74 65 73 74 31 7d 0a 20 20 20 20 70 72 6f 63   test1}.    proc
a1c0: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
a1d0: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
a1e0: 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f   {.      if {$co
a1f0: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 54 41  de=="SQLITE_DETA
a200: 43 48 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 73  CH"} {.        s
a210: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c  et ::authargs [l
a220: 69 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20  ist $arg1 $arg2 
a230: 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20  $arg3 $arg4].   
a240: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
a250: 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 20 20  TE_IGNORE.      
a260: 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  }.      return S
a270: 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20  QLITE_OK.    }. 
a280: 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20     catchsql {.  
a290: 20 20 20 20 44 45 54 41 43 48 20 44 41 54 41 42      DETACH DATAB
a2a0: 41 53 45 20 74 65 73 74 31 3b 0a 20 20 20 20 7d  ASE test1;.    }
a2b0: 0a 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20 20 69 66  .  } {0 {}}.  if
a2c0: 63 61 70 61 62 6c 65 20 74 65 6d 70 64 62 20 7b  capable tempdb {
a2d0: 0a 20 20 20 20 69 66 63 61 70 61 62 6c 65 20 73  .    ifcapable s
a2e0: 63 68 65 6d 61 5f 70 72 61 67 6d 61 73 20 7b 0a  chema_pragmas {.
a2f0: 20 20 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68      do_test auth
a300: 2d 31 2e 32 36 30 20 7b 0a 20 20 20 20 20 20 6c  -1.260 {.      l
a310: 69 6e 64 65 78 20 5b 65 78 65 63 73 71 6c 20 7b  index [execsql {
a320: 50 52 41 47 4d 41 20 64 61 74 61 62 61 73 65 5f  PRAGMA database_
a330: 6c 69 73 74 7d 5d 20 37 0a 20 20 20 20 7d 20 7b  list}] 7.    } {
a340: 74 65 73 74 31 7d 0a 20 20 20 20 7d 20 3b 23 20  test1}.    } ;# 
a350: 69 66 63 61 70 61 62 6c 65 20 73 63 68 65 6d 61  ifcapable schema
a360: 5f 70 72 61 67 6d 61 73 0a 20 20 20 20 64 6f 5f  _pragmas.    do_
a370: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 36 31 20  test auth-1.261 
a380: 7b 0a 20 20 20 20 20 20 70 72 6f 63 20 61 75 74  {.      proc aut
a390: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
a3a0: 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20  2 arg3 arg4} {. 
a3b0: 20 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64 65         if {$code
a3c0: 3d 3d 22 53 51 4c 49 54 45 5f 44 45 54 41 43 48  =="SQLITE_DETACH
a3d0: 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 73  "} {.          s
a3e0: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c  et ::authargs [l
a3f0: 69 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20  ist $arg1 $arg2 
a400: 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20  $arg3 $arg4].   
a410: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
a420: 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 20 20  LITE_DENY.      
a430: 20 20 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75    }.        retu
a440: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20  rn SQLITE_OK.   
a450: 20 20 20 7d 0a 20 20 20 20 20 20 63 61 74 63 68     }.      catch
a460: 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 44 45  sql {.        DE
a470: 54 41 43 48 20 44 41 54 41 42 41 53 45 20 74 65  TACH DATABASE te
a480: 73 74 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  st1;.      }.   
a490: 20 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f   } {1 {not autho
a4a0: 72 69 7a 65 64 7d 7d 0a 20 20 20 20 69 66 63 61  rized}}.    ifca
a4b0: 70 61 62 6c 65 20 73 63 68 65 6d 61 5f 70 72 61  pable schema_pra
a4c0: 67 6d 61 73 20 7b 0a 20 20 20 20 64 6f 5f 74 65  gmas {.    do_te
a4d0: 73 74 20 61 75 74 68 2d 31 2e 32 36 32 20 7b 0a  st auth-1.262 {.
a4e0: 20 20 20 20 20 20 6c 69 6e 64 65 78 20 5b 65 78        lindex [ex
a4f0: 65 63 73 71 6c 20 7b 50 52 41 47 4d 41 20 64 61  ecsql {PRAGMA da
a500: 74 61 62 61 73 65 5f 6c 69 73 74 7d 5d 20 37 0a  tabase_list}] 7.
a510: 20 20 20 20 7d 20 7b 74 65 73 74 31 7d 0a 20 20      } {test1}.  
a520: 20 20 7d 20 3b 23 20 69 66 63 61 70 61 62 6c 65    } ;# ifcapable
a530: 20 73 63 68 65 6d 61 5f 70 72 61 67 6d 61 73 0a   schema_pragmas.
a540: 20 20 20 20 64 62 20 61 75 74 68 6f 72 69 7a 65      db authorize
a550: 72 20 7b 7d 0a 20 20 20 20 65 78 65 63 73 71 6c  r {}.    execsql
a560: 20 7b 44 45 54 41 43 48 20 44 41 54 41 42 41 53   {DETACH DATABAS
a570: 45 20 74 65 73 74 31 7d 0a 20 20 20 20 64 62 20  E test1}.    db 
a580: 61 75 74 68 6f 72 69 7a 65 72 20 3a 3a 61 75 74  authorizer ::aut
a590: 68 0a 20 20 20 20 0a 20 20 20 20 23 20 41 75 74  h.    .    # Aut
a5a0: 68 6f 72 69 7a 61 74 69 6f 6e 20 66 6f 72 20 41  horization for A
a5b0: 4c 54 45 52 20 54 41 42 4c 45 2e 20 54 68 65 73  LTER TABLE. Thes
a5c0: 65 20 74 65 73 74 73 20 61 72 65 20 6f 6d 69 74  e tests are omit
a5d0: 74 65 64 20 69 66 20 74 68 65 20 6c 69 62 72 61  ted if the libra
a5e0: 72 79 0a 20 20 20 20 23 20 77 61 73 20 62 75 69  ry.    # was bui
a5f0: 6c 74 20 77 69 74 68 6f 75 74 20 41 4c 54 45 52  lt without ALTER
a600: 20 54 41 42 4c 45 20 73 75 70 70 6f 72 74 2e 0a   TABLE support..
a610: 20 20 20 20 69 66 63 61 70 61 62 6c 65 20 61 6c      ifcapable al
a620: 74 65 72 74 61 62 6c 65 20 7b 0a 20 20 20 20 0a  tertable {.    .
a630: 20 20 20 20 20 20 64 6f 5f 74 65 73 74 20 61 75        do_test au
a640: 74 68 2d 31 2e 32 36 33 20 7b 0a 20 20 20 20 20  th-1.263 {.     
a650: 20 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f     proc auth {co
a660: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
a670: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 20 20  3 arg4} {.      
a680: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
a690: 53 51 4c 49 54 45 5f 41 4c 54 45 52 5f 54 41 42  SQLITE_ALTER_TAB
a6a0: 4c 45 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 20  LE"} {.         
a6b0: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
a6c0: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
a6d0: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
a6e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
a6f0: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
a700: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
a710: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
a720: 45 5f 4f 4b 0a 20 20 20 20 20 20 20 20 7d 0a 20  E_OK.        }. 
a730: 20 20 20 20 20 20 20 63 61 74 63 68 73 71 6c 20         catchsql 
a740: 7b 0a 20 20 20 20 20 20 20 20 20 20 41 4c 54 45  {.          ALTE
a750: 52 20 54 41 42 4c 45 20 74 31 20 52 45 4e 41 4d  R TABLE t1 RENAM
a760: 45 20 54 4f 20 74 31 78 0a 20 20 20 20 20 20 20  E TO t1x.       
a770: 20 7d 0a 20 20 20 20 20 20 7d 20 7b 30 20 7b 7d   }.      } {0 {}
a780: 7d 0a 20 20 20 20 20 20 64 6f 5f 74 65 73 74 20  }.      do_test 
a790: 61 75 74 68 2d 31 2e 32 36 34 20 7b 0a 20 20 20  auth-1.264 {.   
a7a0: 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45       execsql {SE
a7b0: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73  LECT name FROM s
a7c0: 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
a7d0: 72 20 57 48 45 52 45 20 74 79 70 65 3d 27 74 61  r WHERE type='ta
a7e0: 62 6c 65 27 7d 0a 20 20 20 20 20 20 7d 20 7b 74  ble'}.      } {t
a7f0: 31 78 7d 0a 20 20 20 20 20 20 64 6f 5f 74 65 73  1x}.      do_tes
a800: 74 20 61 75 74 68 2d 31 2e 32 36 35 20 7b 0a 20  t auth-1.265 {. 
a810: 20 20 20 20 20 20 20 73 65 74 20 61 75 74 68 61         set autha
a820: 72 67 73 0a 20 20 20 20 20 20 7d 20 7b 74 65 6d  rgs.      } {tem
a830: 70 20 74 31 20 7b 7d 20 7b 7d 7d 0a 20 20 20 20  p t1 {} {}}.    
a840: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31    do_test auth-1
a850: 2e 32 36 36 20 7b 0a 20 20 20 20 20 20 20 20 70  .266 {.        p
a860: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
a870: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
a880: 67 34 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20  g4} {.          
a890: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
a8a0: 54 45 5f 41 4c 54 45 52 5f 54 41 42 4c 45 22 7d  TE_ALTER_TABLE"}
a8b0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73   {.            s
a8c0: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c  et ::authargs [l
a8d0: 69 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20  ist $arg1 $arg2 
a8e0: 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20  $arg3 $arg4].   
a8f0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
a900: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20  SQLITE_IGNORE.  
a910: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
a920: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
a930: 45 5f 4f 4b 0a 20 20 20 20 20 20 20 20 7d 0a 20  E_OK.        }. 
a940: 20 20 20 20 20 20 20 63 61 74 63 68 73 71 6c 20         catchsql 
a950: 7b 0a 20 20 20 20 20 20 20 20 20 20 41 4c 54 45  {.          ALTE
a960: 52 20 54 41 42 4c 45 20 74 31 78 20 52 45 4e 41  R TABLE t1x RENA
a970: 4d 45 20 54 4f 20 74 31 0a 20 20 20 20 20 20 20  ME TO t1.       
a980: 20 7d 0a 20 20 20 20 20 20 7d 20 7b 30 20 7b 7d   }.      } {0 {}
a990: 7d 0a 20 20 20 20 20 20 64 6f 5f 74 65 73 74 20  }.      do_test 
a9a0: 61 75 74 68 2d 31 2e 32 36 37 20 7b 0a 20 20 20  auth-1.267 {.   
a9b0: 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45       execsql {SE
a9c0: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73  LECT name FROM s
a9d0: 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
a9e0: 72 20 57 48 45 52 45 20 74 79 70 65 3d 27 74 61  r WHERE type='ta
a9f0: 62 6c 65 27 7d 0a 20 20 20 20 20 20 7d 20 7b 74  ble'}.      } {t
aa00: 31 78 7d 0a 20 20 20 20 20 20 64 6f 5f 74 65 73  1x}.      do_tes
aa10: 74 20 61 75 74 68 2d 31 2e 32 36 38 20 7b 0a 20  t auth-1.268 {. 
aa20: 20 20 20 20 20 20 20 73 65 74 20 61 75 74 68 61         set autha
aa30: 72 67 73 0a 20 20 20 20 20 20 7d 20 7b 74 65 6d  rgs.      } {tem
aa40: 70 20 74 31 78 20 7b 7d 20 7b 7d 7d 0a 20 20 20  p t1x {} {}}.   
aa50: 20 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d     do_test auth-
aa60: 31 2e 32 36 39 20 7b 0a 20 20 20 20 20 20 20 20  1.269 {.        
aa70: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
aa80: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
aa90: 72 67 34 7d 20 7b 0a 20 20 20 20 20 20 20 20 20  rg4} {.         
aaa0: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
aab0: 49 54 45 5f 41 4c 54 45 52 5f 54 41 42 4c 45 22  ITE_ALTER_TABLE"
aac0: 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  } {.            
aad0: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b  set ::authargs [
aae0: 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67 32  list $arg1 $arg2
aaf0: 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20   $arg3 $arg4].  
ab00: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
ab10: 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20   SQLITE_DENY.   
ab20: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
ab30: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
ab40: 5f 4f 4b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  _OK.        }.  
ab50: 20 20 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b        catchsql {
ab60: 0a 20 20 20 20 20 20 20 20 20 20 41 4c 54 45 52  .          ALTER
ab70: 20 54 41 42 4c 45 20 74 31 78 20 52 45 4e 41 4d   TABLE t1x RENAM
ab80: 45 20 54 4f 20 74 31 0a 20 20 20 20 20 20 20 20  E TO t1.        
ab90: 7d 0a 20 20 20 20 20 20 7d 20 7b 31 20 7b 6e 6f  }.      } {1 {no
aba0: 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 20  t authorized}}. 
abb0: 20 20 20 20 20 64 6f 5f 74 65 73 74 20 61 75 74       do_test aut
abc0: 68 2d 31 2e 32 37 30 20 7b 0a 20 20 20 20 20 20  h-1.270 {.      
abd0: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
abe0: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
abf0: 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 20 57  te_temp_master W
ac00: 48 45 52 45 20 74 79 70 65 3d 27 74 61 62 6c 65  HERE type='table
ac10: 27 7d 0a 20 20 20 20 20 20 7d 20 7b 74 31 78 7d  '}.      } {t1x}
ac20: 0a 20 20 0a 20 20 20 20 20 20 64 6f 5f 74 65 73  .  .      do_tes
ac30: 74 20 61 75 74 68 2d 31 2e 32 37 31 20 7b 0a 20  t auth-1.271 {. 
ac40: 20 20 20 20 20 20 20 73 65 74 20 61 75 74 68 61         set autha
ac50: 72 67 73 0a 20 20 20 20 20 20 7d 20 7b 74 65 6d  rgs.      } {tem
ac60: 70 20 74 31 78 20 7b 7d 20 7b 7d 7d 0a 20 20 20  p t1x {} {}}.   
ac70: 20 7d 20 3b 23 20 69 66 63 61 70 61 62 6c 65 20   } ;# ifcapable 
ac80: 61 6c 74 65 72 74 61 62 6c 65 0a 20 20 0a 20 20  altertable.  .  
ac90: 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 64 62 20  } else {.    db 
aca0: 61 75 74 68 6f 72 69 7a 65 72 20 7b 7d 0a 20 20  authorizer {}.  
acb0: 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20    db eval {.    
acc0: 20 20 44 45 54 41 43 48 20 44 41 54 41 42 41 53    DETACH DATABAS
acd0: 45 20 74 65 73 74 31 3b 0a 20 20 20 20 7d 0a 20  E test1;.    }. 
ace0: 20 7d 0a 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20   }.}..ifcapable 
acf0: 20 61 6c 74 65 72 74 61 62 6c 65 20 7b 0a 64 62   altertable {.db
ad00: 20 61 75 74 68 6f 72 69 7a 65 72 20 7b 7d 0a 63   authorizer {}.c
ad10: 61 74 63 68 73 71 6c 20 7b 41 4c 54 45 52 20 54  atchsql {ALTER T
ad20: 41 42 4c 45 20 74 31 78 20 52 45 4e 41 4d 45 20  ABLE t1x RENAME 
ad30: 54 4f 20 74 31 7d 0a 64 62 20 61 75 74 68 6f 72  TO t1}.db author
ad40: 69 7a 65 72 20 3a 3a 61 75 74 68 0a 64 6f 5f 74  izer ::auth.do_t
ad50: 65 73 74 20 61 75 74 68 2d 31 2e 32 37 32 20 7b  est auth-1.272 {
ad60: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
ad70: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
ad80: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66  3 arg4} {.    if
ad90: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
ada0: 5f 41 4c 54 45 52 5f 54 41 42 4c 45 22 7d 20 7b  _ALTER_TABLE"} {
adb0: 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74  .      set ::aut
adc0: 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67  hargs [list $arg
add0: 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61  1 $arg2 $arg3 $a
ade0: 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72  rg4].      retur
adf0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20  n SQLITE_OK.    
ae00: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
ae10: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
ae20: 63 68 73 71 6c 20 7b 0a 20 20 20 20 41 4c 54 45  chsql {.    ALTE
ae30: 52 20 54 41 42 4c 45 20 74 32 20 52 45 4e 41 4d  R TABLE t2 RENAM
ae40: 45 20 54 4f 20 74 32 78 0a 20 20 7d 0a 7d 20 7b  E TO t2x.  }.} {
ae50: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  0 {}}.do_test au
ae60: 74 68 2d 31 2e 32 37 33 20 7b 0a 20 20 65 78 65  th-1.273 {.  exe
ae70: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d  csql {SELECT nam
ae80: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  e FROM sqlite_ma
ae90: 73 74 65 72 20 57 48 45 52 45 20 74 79 70 65 3d  ster WHERE type=
aea0: 27 74 61 62 6c 65 27 7d 0a 7d 20 7b 74 32 78 7d  'table'}.} {t2x}
aeb0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
aec0: 32 37 34 20 7b 0a 20 20 73 65 74 20 61 75 74 68  274 {.  set auth
aed0: 61 72 67 73 0a 7d 20 7b 6d 61 69 6e 20 74 32 20  args.} {main t2 
aee0: 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  {} {}}.do_test a
aef0: 75 74 68 2d 31 2e 32 37 35 20 7b 0a 20 20 70 72  uth-1.275 {.  pr
af00: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
af10: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
af20: 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f  4} {.    if {$co
af30: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 41 4c 54 45  de=="SQLITE_ALTE
af40: 52 5f 54 41 42 4c 45 22 7d 20 7b 0a 20 20 20 20  R_TABLE"} {.    
af50: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
af60: 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72   [list $arg1 $ar
af70: 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a  g2 $arg3 $arg4].
af80: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
af90: 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d  ITE_IGNORE.    }
afa0: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
afb0: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
afc0: 68 73 71 6c 20 7b 0a 20 20 20 20 41 4c 54 45 52  hsql {.    ALTER
afd0: 20 54 41 42 4c 45 20 74 32 78 20 52 45 4e 41 4d   TABLE t2x RENAM
afe0: 45 20 54 4f 20 74 32 0a 20 20 7d 0a 7d 20 7b 30  E TO t2.  }.} {0
aff0: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
b000: 68 2d 31 2e 32 37 36 20 7b 0a 20 20 65 78 65 63  h-1.276 {.  exec
b010: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
b020: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
b030: 74 65 72 20 57 48 45 52 45 20 74 79 70 65 3d 27  ter WHERE type='
b040: 74 61 62 6c 65 27 7d 0a 7d 20 7b 74 32 78 7d 0a  table'}.} {t2x}.
b050: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
b060: 37 37 20 7b 0a 20 20 73 65 74 20 61 75 74 68 61  77 {.  set autha
b070: 72 67 73 0a 7d 20 7b 6d 61 69 6e 20 74 32 78 20  rgs.} {main t2x 
b080: 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  {} {}}.do_test a
b090: 75 74 68 2d 31 2e 32 37 38 20 7b 0a 20 20 70 72  uth-1.278 {.  pr
b0a0: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
b0b0: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
b0c0: 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f  4} {.    if {$co
b0d0: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 41 4c 54 45  de=="SQLITE_ALTE
b0e0: 52 5f 54 41 42 4c 45 22 7d 20 7b 0a 20 20 20 20  R_TABLE"} {.    
b0f0: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
b100: 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72   [list $arg1 $ar
b110: 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a  g2 $arg3 $arg4].
b120: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
b130: 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20  ITE_DENY.    }. 
b140: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
b150: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
b160: 71 6c 20 7b 0a 20 20 20 20 41 4c 54 45 52 20 54  ql {.    ALTER T
b170: 41 42 4c 45 20 74 32 78 20 52 45 4e 41 4d 45 20  ABLE t2x RENAME 
b180: 54 4f 20 74 32 0a 20 20 7d 0a 7d 20 7b 31 20 7b  TO t2.  }.} {1 {
b190: 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d  not authorized}}
b1a0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
b1b0: 32 37 39 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  279 {.  execsql 
b1c0: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
b1d0: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  M sqlite_master 
b1e0: 57 48 45 52 45 20 74 79 70 65 3d 27 74 61 62 6c  WHERE type='tabl
b1f0: 65 27 7d 0a 7d 20 7b 74 32 78 7d 0a 64 6f 5f 74  e'}.} {t2x}.do_t
b200: 65 73 74 20 61 75 74 68 2d 31 2e 32 38 30 20 7b  est auth-1.280 {
b210: 0a 20 20 73 65 74 20 61 75 74 68 61 72 67 73 0a  .  set authargs.
b220: 7d 20 7b 6d 61 69 6e 20 74 32 78 20 7b 7d 20 7b  } {main t2x {} {
b230: 7d 7d 0a 64 62 20 61 75 74 68 6f 72 69 7a 65 72  }}.db authorizer
b240: 20 7b 7d 0a 63 61 74 63 68 73 71 6c 20 7b 41 4c   {}.catchsql {AL
b250: 54 45 52 20 54 41 42 4c 45 20 74 32 78 20 52 45  TER TABLE t2x RE
b260: 4e 41 4d 45 20 54 4f 20 74 32 7d 0a 0a 7d 20 3b  NAME TO t2}..} ;
b270: 23 20 69 66 63 61 70 61 62 6c 65 20 61 6c 74 65  # ifcapable alte
b280: 72 74 61 62 6c 65 0a 0a 23 20 54 65 73 74 20 74  rtable..# Test t
b290: 68 65 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e  he authorization
b2a0: 20 63 61 6c 6c 62 61 63 6b 73 20 66 6f 72 20 74   callbacks for t
b2b0: 68 65 20 52 45 49 4e 44 45 58 20 63 6f 6d 6d 61  he REINDEX comma
b2c0: 6e 64 2e 0a 69 66 63 61 70 61 62 6c 65 20 72 65  nd..ifcapable re
b2d0: 69 6e 64 65 78 20 7b 0a 0a 70 72 6f 63 20 61 75  index {..proc au
b2e0: 74 68 20 7b 63 6f 64 65 20 61 72 67 73 7d 20 7b  th {code args} {
b2f0: 0a 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53  .  if {$code=="S
b300: 51 4c 49 54 45 5f 52 45 49 4e 44 45 58 22 7d 20  QLITE_REINDEX"} 
b310: 7b 0a 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68  {.    set ::auth
b320: 61 72 67 73 20 5b 63 6f 6e 63 61 74 20 24 3a 3a  args [concat $::
b330: 61 75 74 68 61 72 67 73 20 24 61 72 67 73 5d 0a  authargs $args].
b340: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 53 51 4c    }.  return SQL
b350: 49 54 45 5f 4f 4b 0a 7d 0a 64 62 20 61 75 74 68  ITE_OK.}.db auth
b360: 6f 72 69 7a 65 72 20 61 75 74 68 0a 64 6f 5f 74  orizer auth.do_t
b370: 65 73 74 20 61 75 74 68 2d 31 2e 32 38 31 20 7b  est auth-1.281 {
b380: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
b390: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 33   CREATE TABLE t3
b3a0: 28 61 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20  (a PRIMARY KEY, 
b3b0: 62 2c 20 63 29 3b 0a 20 20 20 20 43 52 45 41 54  b, c);.    CREAT
b3c0: 45 20 49 4e 44 45 58 20 74 33 5f 69 64 78 31 20  E INDEX t3_idx1 
b3d0: 4f 4e 20 74 33 28 63 20 43 4f 4c 4c 41 54 45 20  ON t3(c COLLATE 
b3e0: 42 49 4e 41 52 59 29 3b 0a 20 20 20 20 43 52 45  BINARY);.    CRE
b3f0: 41 54 45 20 49 4e 44 45 58 20 74 33 5f 69 64 78  ATE INDEX t3_idx
b400: 32 20 4f 4e 20 74 33 28 62 20 43 4f 4c 4c 41 54  2 ON t3(b COLLAT
b410: 45 20 4e 4f 43 41 53 45 29 3b 0a 20 20 7d 0a 7d  E NOCASE);.  }.}
b420: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68   {}.do_test auth
b430: 2d 31 2e 32 38 32 20 7b 0a 20 20 73 65 74 20 3a  -1.282 {.  set :
b440: 3a 61 75 74 68 61 72 67 73 20 7b 7d 0a 20 20 65  :authargs {}.  e
b450: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 52 45 49  xecsql {.    REI
b460: 4e 44 45 58 20 74 33 5f 69 64 78 31 3b 0a 20 20  NDEX t3_idx1;.  
b470: 7d 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72  }.  set ::authar
b480: 67 73 0a 7d 20 7b 74 33 5f 69 64 78 31 20 7b 7d  gs.} {t3_idx1 {}
b490: 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73   main {}}.do_tes
b4a0: 74 20 61 75 74 68 2d 31 2e 32 38 33 20 7b 0a 20  t auth-1.283 {. 
b4b0: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
b4c0: 7b 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  {}.  execsql {. 
b4d0: 20 20 20 52 45 49 4e 44 45 58 20 42 49 4e 41 52     REINDEX BINAR
b4e0: 59 3b 0a 20 20 7d 0a 20 20 73 65 74 20 3a 3a 61  Y;.  }.  set ::a
b4f0: 75 74 68 61 72 67 73 0a 7d 20 7b 74 33 5f 69 64  uthargs.} {t3_id
b500: 78 31 20 7b 7d 20 6d 61 69 6e 20 7b 7d 20 73 71  x1 {} main {} sq
b510: 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 74  lite_autoindex_t
b520: 33 5f 31 20 7b 7d 20 6d 61 69 6e 20 7b 7d 7d 0a  3_1 {} main {}}.
b530: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
b540: 38 34 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74  84 {.  set ::aut
b550: 68 61 72 67 73 20 7b 7d 0a 20 20 65 78 65 63 73  hargs {}.  execs
b560: 71 6c 20 7b 0a 20 20 20 20 52 45 49 4e 44 45 58  ql {.    REINDEX
b570: 20 4e 4f 43 41 53 45 3b 0a 20 20 7d 0a 20 20 73   NOCASE;.  }.  s
b580: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20  et ::authargs.} 
b590: 7b 74 33 5f 69 64 78 32 20 7b 7d 20 6d 61 69 6e  {t3_idx2 {} main
b5a0: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
b5b0: 68 2d 31 2e 32 38 35 20 7b 0a 20 20 73 65 74 20  h-1.285 {.  set 
b5c0: 3a 3a 61 75 74 68 61 72 67 73 20 7b 7d 0a 20 20  ::authargs {}.  
b5d0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 52 45  execsql {.    RE
b5e0: 49 4e 44 45 58 20 74 33 3b 0a 20 20 7d 0a 20 20  INDEX t3;.  }.  
b5f0: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d  set ::authargs.}
b600: 20 7b 74 33 5f 69 64 78 32 20 7b 7d 20 6d 61 69   {t3_idx2 {} mai
b610: 6e 20 7b 7d 20 74 33 5f 69 64 78 31 20 7b 7d 20  n {} t3_idx1 {} 
b620: 6d 61 69 6e 20 7b 7d 20 73 71 6c 69 74 65 5f 61  main {} sqlite_a
b630: 75 74 6f 69 6e 64 65 78 5f 74 33 5f 31 20 7b 7d  utoindex_t3_1 {}
b640: 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73   main {}}.do_tes
b650: 74 20 61 75 74 68 2d 31 2e 32 38 36 20 7b 0a 20  t auth-1.286 {. 
b660: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44   execsql {.    D
b670: 52 4f 50 20 54 41 42 4c 45 20 74 33 3b 0a 20 20  ROP TABLE t3;.  
b680: 7d 0a 7d 20 7b 7d 0a 69 66 63 61 70 61 62 6c 65  }.} {}.ifcapable
b690: 20 74 65 6d 70 64 62 20 7b 0a 20 20 64 6f 5f 74   tempdb {.  do_t
b6a0: 65 73 74 20 61 75 74 68 2d 31 2e 32 38 37 20 7b  est auth-1.287 {
b6b0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
b6c0: 20 20 20 20 20 43 52 45 41 54 45 20 54 45 4d 50       CREATE TEMP
b6d0: 20 54 41 42 4c 45 20 74 33 28 61 20 50 52 49 4d   TABLE t3(a PRIM
b6e0: 41 52 59 20 4b 45 59 2c 20 62 2c 20 63 29 3b 0a  ARY KEY, b, c);.
b6f0: 20 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44        CREATE IND
b700: 45 58 20 74 33 5f 69 64 78 31 20 4f 4e 20 74 33  EX t3_idx1 ON t3
b710: 28 63 20 43 4f 4c 4c 41 54 45 20 42 49 4e 41 52  (c COLLATE BINAR
b720: 59 29 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45  Y);.      CREATE
b730: 20 49 4e 44 45 58 20 74 33 5f 69 64 78 32 20 4f   INDEX t3_idx2 O
b740: 4e 20 74 33 28 62 20 43 4f 4c 4c 41 54 45 20 4e  N t3(b COLLATE N
b750: 4f 43 41 53 45 29 3b 0a 20 20 20 20 7d 0a 20 20  OCASE);.    }.  
b760: 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61  } {}.  do_test a
b770: 75 74 68 2d 31 2e 32 38 38 20 7b 0a 20 20 20 20  uth-1.288 {.    
b780: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 7b  set ::authargs {
b790: 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  }.    execsql {.
b7a0: 20 20 20 20 20 20 52 45 49 4e 44 45 58 20 74 65        REINDEX te
b7b0: 6d 70 2e 74 33 5f 69 64 78 31 3b 0a 20 20 20 20  mp.t3_idx1;.    
b7c0: 7d 0a 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68  }.    set ::auth
b7d0: 61 72 67 73 0a 20 20 7d 20 7b 74 33 5f 69 64 78  args.  } {t3_idx
b7e0: 31 20 7b 7d 20 74 65 6d 70 20 7b 7d 7d 0a 20 20  1 {} temp {}}.  
b7f0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
b800: 38 39 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a 61  89 {.    set ::a
b810: 75 74 68 61 72 67 73 20 7b 7d 0a 20 20 20 20 65  uthargs {}.    e
b820: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 52  xecsql {.      R
b830: 45 49 4e 44 45 58 20 42 49 4e 41 52 59 3b 0a 20  EINDEX BINARY;. 
b840: 20 20 20 7d 0a 20 20 20 20 73 65 74 20 3a 3a 61     }.    set ::a
b850: 75 74 68 61 72 67 73 0a 20 20 7d 20 7b 74 33 5f  uthargs.  } {t3_
b860: 69 64 78 31 20 7b 7d 20 74 65 6d 70 20 7b 7d 20  idx1 {} temp {} 
b870: 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65 78  sqlite_autoindex
b880: 5f 74 33 5f 31 20 7b 7d 20 74 65 6d 70 20 7b 7d  _t3_1 {} temp {}
b890: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68  }.  do_test auth
b8a0: 2d 31 2e 32 39 30 20 7b 0a 20 20 20 20 73 65 74  -1.290 {.    set
b8b0: 20 3a 3a 61 75 74 68 61 72 67 73 20 7b 7d 0a 20   ::authargs {}. 
b8c0: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
b8d0: 20 20 20 52 45 49 4e 44 45 58 20 4e 4f 43 41 53     REINDEX NOCAS
b8e0: 45 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 74  E;.    }.    set
b8f0: 20 3a 3a 61 75 74 68 61 72 67 73 0a 20 20 7d 20   ::authargs.  } 
b900: 7b 74 33 5f 69 64 78 32 20 7b 7d 20 74 65 6d 70  {t3_idx2 {} temp
b910: 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61   {}}.  do_test a
b920: 75 74 68 2d 31 2e 32 39 31 20 7b 0a 20 20 20 20  uth-1.291 {.    
b930: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 7b  set ::authargs {
b940: 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  }.    execsql {.
b950: 20 20 20 20 20 20 52 45 49 4e 44 45 58 20 74 65        REINDEX te
b960: 6d 70 2e 74 33 3b 0a 20 20 20 20 7d 0a 20 20 20  mp.t3;.    }.   
b970: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a   set ::authargs.
b980: 20 20 7d 20 7b 74 33 5f 69 64 78 32 20 7b 7d 20    } {t3_idx2 {} 
b990: 74 65 6d 70 20 7b 7d 20 74 33 5f 69 64 78 31 20  temp {} t3_idx1 
b9a0: 7b 7d 20 74 65 6d 70 20 7b 7d 20 73 71 6c 69 74  {} temp {} sqlit
b9b0: 65 5f 61 75 74 6f 69 6e 64 65 78 5f 74 33 5f 31  e_autoindex_t3_1
b9c0: 20 7b 7d 20 74 65 6d 70 20 7b 7d 7d 0a 20 20 70   {} temp {}}.  p
b9d0: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
b9e0: 72 67 73 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rgs} {.    if {$
b9f0: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45  code=="SQLITE_RE
ba00: 49 4e 44 45 58 22 7d 20 7b 0a 20 20 20 20 20 20  INDEX"} {.      
ba10: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b  set ::authargs [
ba20: 63 6f 6e 63 61 74 20 24 3a 3a 61 75 74 68 61 72  concat $::authar
ba30: 67 73 20 24 61 72 67 73 5d 0a 20 20 20 20 20 20  gs $args].      
ba40: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45  return SQLITE_DE
ba50: 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  NY.    }.    ret
ba60: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
ba70: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68  }.  do_test auth
ba80: 2d 31 2e 32 39 32 20 7b 0a 20 20 20 20 73 65 74  -1.292 {.    set
ba90: 20 3a 3a 61 75 74 68 61 72 67 73 20 7b 7d 0a 20   ::authargs {}. 
baa0: 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20     catchsql {.  
bab0: 20 20 20 20 52 45 49 4e 44 45 58 20 74 65 6d 70      REINDEX temp
bac0: 2e 74 33 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  .t3;.    }.  } {
bad0: 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65  1 {not authorize
bae0: 64 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75  d}}.  do_test au
baf0: 74 68 2d 31 2e 32 39 33 20 7b 0a 20 20 20 20 65  th-1.293 {.    e
bb00: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 44  xecsql {.      D
bb10: 52 4f 50 20 54 41 42 4c 45 20 74 33 3b 0a 20 20  ROP TABLE t3;.  
bb20: 20 20 7d 0a 20 20 7d 20 7b 7d 0a 7d 0a 0a 7d 20    }.  } {}.}..} 
bb30: 3b 23 20 69 66 63 61 70 61 62 6c 65 20 72 65 69  ;# ifcapable rei
bb40: 6e 64 65 78 20 0a 0a 69 66 63 61 70 61 62 6c 65  ndex ..ifcapable
bb50: 20 61 6e 61 6c 79 7a 65 20 7b 0a 20 20 70 72 6f   analyze {.  pro
bb60: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
bb70: 73 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f  s} {.    if {$co
bb80: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 41 4e 41 4c  de=="SQLITE_ANAL
bb90: 59 5a 45 22 7d 20 7b 0a 20 20 20 20 20 20 73 65  YZE"} {.      se
bba0: 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 63 6f  t ::authargs [co
bbb0: 6e 63 61 74 20 24 3a 3a 61 75 74 68 61 72 67 73  ncat $::authargs
bbc0: 20 24 61 72 67 73 5d 0a 20 20 20 20 7d 0a 20 20   $args].    }.  
bbd0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
bbe0: 4f 4b 0a 20 20 7d 0a 20 20 64 6f 5f 74 65 73 74  OK.  }.  do_test
bbf0: 20 61 75 74 68 2d 31 2e 32 39 34 20 7b 0a 20 20   auth-1.294 {.  
bc00: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
bc10: 20 7b 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20   {}.    execsql 
bc20: 7b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54  {.      CREATE T
bc30: 41 42 4c 45 20 74 34 28 61 2c 62 2c 63 29 3b 0a  ABLE t4(a,b,c);.
bc40: 20 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44        CREATE IND
bc50: 45 58 20 74 34 69 31 20 4f 4e 20 74 34 28 61 29  EX t4i1 ON t4(a)
bc60: 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 49  ;.      CREATE I
bc70: 4e 44 45 58 20 74 34 69 32 20 4f 4e 20 74 34 28  NDEX t4i2 ON t4(
bc80: 62 2c 61 2c 63 29 3b 0a 20 20 20 20 20 20 49 4e  b,a,c);.      IN
bc90: 53 45 52 54 20 49 4e 54 4f 20 74 34 20 56 41 4c  SERT INTO t4 VAL
bca0: 55 45 53 28 31 2c 32 2c 33 29 3b 0a 20 20 20 20  UES(1,2,3);.    
bcb0: 20 20 41 4e 41 4c 59 5a 45 3b 0a 20 20 20 20 7d    ANALYZE;.    }
bcc0: 0a 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61  .    set ::autha
bcd0: 72 67 73 0a 20 20 7d 20 7b 74 34 20 7b 7d 20 6d  rgs.  } {t4 {} m
bce0: 61 69 6e 20 7b 7d 20 74 32 20 7b 7d 20 6d 61 69  ain {} t2 {} mai
bcf0: 6e 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20  n {}}.  do_test 
bd00: 61 75 74 68 2d 31 2e 32 39 35 20 7b 0a 20 20 20  auth-1.295 {.   
bd10: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
bd20: 20 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29   SELECT count(*)
bd30: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 73 74 61   FROM sqlite_sta
bd40: 74 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 33 0a  t1;.    }.  } 3.
bd50: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
bd60: 65 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 69 66  e args} {.    if
bd70: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
bd80: 5f 41 4e 41 4c 59 5a 45 22 7d 20 7b 0a 20 20 20  _ANALYZE"} {.   
bd90: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
bda0: 73 20 5b 63 6f 6e 63 61 74 20 24 3a 3a 61 75 74  s [concat $::aut
bdb0: 68 61 72 67 73 20 24 61 72 67 73 5d 0a 20 20 20  hargs $args].   
bdc0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
bdd0: 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20  _DENY.    }.    
bde0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
bdf0: 0a 20 20 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61  .  }.  do_test a
be00: 75 74 68 2d 31 2e 32 39 36 20 7b 0a 20 20 20 20  uth-1.296 {.    
be10: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 7b  set ::authargs {
be20: 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b  }.    catchsql {
be30: 0a 20 20 20 20 20 20 41 4e 41 4c 59 5a 45 3b 0a  .      ANALYZE;.
be40: 20 20 20 20 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f      }.  } {1 {no
be50: 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 20  t authorized}}. 
be60: 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e   do_test auth-1.
be70: 32 39 37 20 7b 0a 20 20 20 20 65 78 65 63 73 71  297 {.    execsq
be80: 6c 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54  l {.      SELECT
be90: 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 73   count(*) FROM s
bea0: 71 6c 69 74 65 5f 73 74 61 74 31 3b 0a 20 20 20  qlite_stat1;.   
beb0: 20 7d 0a 20 20 7d 20 33 0a 7d 20 3b 23 20 69 66   }.  } 3.} ;# if
bec0: 63 61 70 61 62 6c 65 20 61 6e 61 6c 79 7a 65 0a  capable analyze.
bed0: 0a 0a 23 20 41 75 74 68 6f 72 69 7a 61 74 69 6f  ..# Authorizatio
bee0: 6e 20 66 6f 72 20 41 4c 54 45 52 20 54 41 42 4c  n for ALTER TABL
bef0: 45 20 41 44 44 20 43 4f 4c 55 4d 4e 2e 0a 23 20  E ADD COLUMN..# 
bf00: 54 68 65 73 65 20 74 65 73 74 73 20 61 72 65 20  These tests are 
bf10: 6f 6d 69 74 74 65 64 20 69 66 20 74 68 65 20 6c  omitted if the l
bf20: 69 62 72 61 72 79 0a 23 20 77 61 73 20 62 75 69  ibrary.# was bui
bf30: 6c 74 20 77 69 74 68 6f 75 74 20 41 4c 54 45 52  lt without ALTER
bf40: 20 54 41 42 4c 45 20 73 75 70 70 6f 72 74 2e 0a   TABLE support..
bf50: 69 66 63 61 70 61 62 6c 65 20 7b 61 6c 74 65 72  ifcapable {alter
bf60: 74 61 62 6c 65 7d 20 7b 0a 20 20 64 6f 5f 74 65  table} {.  do_te
bf70: 73 74 20 61 75 74 68 2d 31 2e 33 30 30 20 7b 0a  st auth-1.300 {.
bf80: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 43 52 45      execsql {CRE
bf90: 41 54 45 20 54 41 42 4c 45 20 74 35 28 78 29 7d  ATE TABLE t5(x)}
bfa0: 0a 20 20 20 20 70 72 6f 63 20 61 75 74 68 20 7b  .    proc auth {
bfb0: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
bfc0: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
bfd0: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
bfe0: 4c 49 54 45 5f 41 4c 54 45 52 5f 54 41 42 4c 45  LITE_ALTER_TABLE
bff0: 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74  "} {.        set
c000: 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73   ::authargs [lis
c010: 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61  t $arg1 $arg2 $a
c020: 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20  rg3 $arg4].     
c030: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
c040: 5f 4f 4b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  _OK.      }.    
c050: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
c060: 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 74  OK.    }.    cat
c070: 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20 41 4c  chsql {.      AL
c080: 54 45 52 20 54 41 42 4c 45 20 74 35 20 41 44 44  TER TABLE t5 ADD
c090: 20 43 4f 4c 55 4d 4e 20 6e 65 77 5f 63 6f 6c 5f   COLUMN new_col_
c0a0: 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 30 20  1;.    }.  } {0 
c0b0: 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75  {}}.  do_test au
c0c0: 74 68 2d 31 2e 33 30 31 20 7b 0a 20 20 20 20 73  th-1.301 {.    s
c0d0: 65 74 20 78 20 5b 65 78 65 63 73 71 6c 20 7b 53  et x [execsql {S
c0e0: 45 4c 45 43 54 20 73 71 6c 20 46 52 4f 4d 20 73  ELECT sql FROM s
c0f0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45  qlite_master WHE
c100: 52 45 20 6e 61 6d 65 3d 27 74 35 27 7d 5d 0a 20  RE name='t5'}]. 
c110: 20 20 20 72 65 67 65 78 70 20 6e 65 77 5f 63 6f     regexp new_co
c120: 6c 5f 31 20 24 78 0a 20 20 7d 20 7b 31 7d 0a 20  l_1 $x.  } {1}. 
c130: 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e   do_test auth-1.
c140: 33 30 32 20 7b 0a 20 20 20 20 73 65 74 20 61 75  302 {.    set au
c150: 74 68 61 72 67 73 0a 20 20 7d 20 7b 6d 61 69 6e  thargs.  } {main
c160: 20 74 35 20 7b 7d 20 7b 7d 7d 0a 20 20 64 6f 5f   t5 {} {}}.  do_
c170: 74 65 73 74 20 61 75 74 68 2d 31 2e 33 30 33 20  test auth-1.303 
c180: 7b 0a 20 20 20 20 70 72 6f 63 20 61 75 74 68 20  {.    proc auth 
c190: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
c1a0: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
c1b0: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
c1c0: 51 4c 49 54 45 5f 41 4c 54 45 52 5f 54 41 42 4c  QLITE_ALTER_TABL
c1d0: 45 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65  E"} {.        se
c1e0: 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69  t ::authargs [li
c1f0: 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24  st $arg1 $arg2 $
c200: 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20  arg3 $arg4].    
c210: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
c220: 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 20 20 7d  E_IGNORE.      }
c230: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
c240: 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20  LITE_OK.    }.  
c250: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
c260: 20 20 20 41 4c 54 45 52 20 54 41 42 4c 45 20 74     ALTER TABLE t
c270: 35 20 41 44 44 20 43 4f 4c 55 4d 4e 20 6e 65 77  5 ADD COLUMN new
c280: 5f 63 6f 6c 5f 32 3b 0a 20 20 20 20 7d 0a 20 20  _col_2;.    }.  
c290: 7d 20 7b 30 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65  } {0 {}}.  do_te
c2a0: 73 74 20 61 75 74 68 2d 31 2e 33 30 34 20 7b 0a  st auth-1.304 {.
c2b0: 20 20 20 20 73 65 74 20 78 20 5b 65 78 65 63 73      set x [execs
c2c0: 71 6c 20 7b 53 45 4c 45 43 54 20 73 71 6c 20 46  ql {SELECT sql F
c2d0: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
c2e0: 72 20 57 48 45 52 45 20 6e 61 6d 65 3d 27 74 35  r WHERE name='t5
c2f0: 27 7d 5d 0a 20 20 20 20 72 65 67 65 78 70 20 6e  '}].    regexp n
c300: 65 77 5f 63 6f 6c 5f 32 20 24 78 0a 20 20 7d 20  ew_col_2 $x.  } 
c310: 7b 30 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75  {0}.  do_test au
c320: 74 68 2d 31 2e 33 30 35 20 7b 0a 20 20 20 20 73  th-1.305 {.    s
c330: 65 74 20 61 75 74 68 61 72 67 73 0a 20 20 7d 20  et authargs.  } 
c340: 7b 6d 61 69 6e 20 74 35 20 7b 7d 20 7b 7d 7d 0a  {main t5 {} {}}.
c350: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31    do_test auth-1
c360: 2e 33 30 36 20 7b 0a 20 20 20 20 70 72 6f 63 20  .306 {.    proc 
c370: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
c380: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
c390: 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64  {.      if {$cod
c3a0: 65 3d 3d 22 53 51 4c 49 54 45 5f 41 4c 54 45 52  e=="SQLITE_ALTER
c3b0: 5f 54 41 42 4c 45 22 7d 20 7b 0a 20 20 20 20 20  _TABLE"} {.     
c3c0: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
c3d0: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
c3e0: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
c3f0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
c400: 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20  SQLITE_DENY.    
c410: 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e    }.      return
c420: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d   SQLITE_OK.    }
c430: 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a  .    catchsql {.
c440: 20 20 20 20 20 20 41 4c 54 45 52 20 54 41 42 4c        ALTER TABL
c450: 45 20 74 35 20 41 44 44 20 43 4f 4c 55 4d 4e 20  E t5 ADD COLUMN 
c460: 6e 65 77 5f 63 6f 6c 5f 33 0a 20 20 20 20 7d 0a  new_col_3.    }.
c470: 20 20 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68    } {1 {not auth
c480: 6f 72 69 7a 65 64 7d 7d 0a 20 20 64 6f 5f 74 65  orized}}.  do_te
c490: 73 74 20 61 75 74 68 2d 31 2e 33 30 37 20 7b 0a  st auth-1.307 {.
c4a0: 20 20 20 20 73 65 74 20 78 20 5b 65 78 65 63 73      set x [execs
c4b0: 71 6c 20 7b 53 45 4c 45 43 54 20 73 71 6c 20 46  ql {SELECT sql F
c4c0: 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f  ROM sqlite_temp_
c4d0: 6d 61 73 74 65 72 20 57 48 45 52 45 20 74 79 70  master WHERE typ
c4e0: 65 3d 27 74 35 27 7d 5d 0a 20 20 20 20 72 65 67  e='t5'}].    reg
c4f0: 65 78 70 20 6e 65 77 5f 63 6f 6c 5f 33 20 24 78  exp new_col_3 $x
c500: 0a 20 20 7d 20 7b 30 7d 0a 0a 20 20 64 6f 5f 74  .  } {0}..  do_t
c510: 65 73 74 20 61 75 74 68 2d 31 2e 33 30 38 20 7b  est auth-1.308 {
c520: 0a 20 20 20 20 73 65 74 20 61 75 74 68 61 72 67  .    set autharg
c530: 73 0a 20 20 7d 20 7b 6d 61 69 6e 20 74 35 20 7b  s.  } {main t5 {
c540: 7d 20 7b 7d 7d 0a 20 20 65 78 65 63 73 71 6c 20  } {}}.  execsql 
c550: 7b 44 52 4f 50 20 54 41 42 4c 45 20 74 35 7d 0a  {DROP TABLE t5}.
c560: 7d 20 3b 23 20 69 66 63 61 70 61 62 6c 65 20 61  } ;# ifcapable a
c570: 6c 74 65 72 74 61 62 6c 65 0a 0a 64 6f 5f 74 65  ltertable..do_te
c580: 73 74 20 61 75 74 68 2d 32 2e 31 20 7b 0a 20 20  st auth-2.1 {.  
c590: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
c5a0: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
c5b0: 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg4} {.    if {$
c5c0: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45  code=="SQLITE_RE
c5d0: 41 44 22 20 26 26 20 24 61 72 67 31 3d 3d 22 74  AD" && $arg1=="t
c5e0: 33 22 20 26 26 20 24 61 72 67 32 3d 3d 22 78 22  3" && $arg2=="x"
c5f0: 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  } {.      return
c600: 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20   SQLITE_DENY.   
c610: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
c620: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 64 62  LITE_OK.  }.  db
c630: 20 61 75 74 68 6f 72 69 7a 65 72 20 3a 3a 61 75   authorizer ::au
c640: 74 68 0a 20 20 65 78 65 63 73 71 6c 20 7b 43 52  th.  execsql {CR
c650: 45 41 54 45 20 54 41 42 4c 45 20 74 33 28 78 20  EATE TABLE t3(x 
c660: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
c670: 4b 45 59 2c 20 79 2c 20 7a 29 7d 0a 20 20 63 61  KEY, y, z)}.  ca
c680: 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a  tchsql {SELECT *
c690: 20 46 52 4f 4d 20 74 33 7d 0a 7d 20 7b 31 20 7b   FROM t3}.} {1 {
c6a0: 61 63 63 65 73 73 20 74 6f 20 74 33 2e 78 20 69  access to t3.x i
c6b0: 73 20 70 72 6f 68 69 62 69 74 65 64 7d 7d 0a 64  s prohibited}}.d
c6c0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 32 2e 31 20  o_test auth-2.1 
c6d0: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 53 45  {.  catchsql {SE
c6e0: 4c 45 43 54 20 79 2c 7a 20 46 52 4f 4d 20 74 33  LECT y,z FROM t3
c6f0: 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  }.} {0 {}}.do_te
c700: 73 74 20 61 75 74 68 2d 32 2e 32 20 7b 0a 20 20  st auth-2.2 {.  
c710: 63 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54  catchsql {SELECT
c720: 20 52 4f 57 49 44 2c 79 2c 7a 20 46 52 4f 4d 20   ROWID,y,z FROM 
c730: 74 33 7d 0a 7d 20 7b 31 20 7b 61 63 63 65 73 73  t3}.} {1 {access
c740: 20 74 6f 20 74 33 2e 78 20 69 73 20 70 72 6f 68   to t3.x is proh
c750: 69 62 69 74 65 64 7d 7d 0a 64 6f 5f 74 65 73 74  ibited}}.do_test
c760: 20 61 75 74 68 2d 32 2e 33 20 7b 0a 20 20 63 61   auth-2.3 {.  ca
c770: 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 4f  tchsql {SELECT O
c780: 49 44 2c 79 2c 7a 20 46 52 4f 4d 20 74 33 7d 0a  ID,y,z FROM t3}.
c790: 7d 20 7b 31 20 7b 61 63 63 65 73 73 20 74 6f 20  } {1 {access to 
c7a0: 74 33 2e 78 20 69 73 20 70 72 6f 68 69 62 69 74  t3.x is prohibit
c7b0: 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  ed}}.do_test aut
c7c0: 68 2d 32 2e 34 20 7b 0a 20 20 70 72 6f 63 20 61  h-2.4 {.  proc a
c7d0: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
c7e0: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
c7f0: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
c800: 22 53 51 4c 49 54 45 5f 52 45 41 44 22 20 26 26  "SQLITE_READ" &&
c810: 20 24 61 72 67 31 3d 3d 22 74 33 22 20 26 26 20   $arg1=="t3" && 
c820: 24 61 72 67 32 3d 3d 22 78 22 7d 20 7b 0a 20 20  $arg2=="x"} {.  
c830: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
c840: 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20  E_IGNORE.    }. 
c850: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
c860: 5f 4f 4b 0a 20 20 7d 0a 20 20 65 78 65 63 73 71  _OK.  }.  execsq
c870: 6c 20 7b 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  l {INSERT INTO t
c880: 33 20 56 41 4c 55 45 53 28 34 34 2c 35 35 2c 36  3 VALUES(44,55,6
c890: 36 29 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  6)}.  catchsql {
c8a0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33  SELECT * FROM t3
c8b0: 7d 0a 7d 20 7b 30 20 7b 7b 7d 20 35 35 20 36 36  }.} {0 {{} 55 66
c8c0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
c8d0: 32 2e 35 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  2.5 {.  catchsql
c8e0: 20 7b 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 79   {SELECT rowid,y
c8f0: 2c 7a 20 46 52 4f 4d 20 74 33 7d 0a 7d 20 7b 30  ,z FROM t3}.} {0
c900: 20 7b 7b 7d 20 35 35 20 36 36 7d 7d 0a 64 6f 5f   {{} 55 66}}.do_
c910: 74 65 73 74 20 61 75 74 68 2d 32 2e 36 20 7b 0a  test auth-2.6 {.
c920: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
c930: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
c940: 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20   arg4} {.    if 
c950: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
c960: 52 45 41 44 22 20 26 26 20 24 61 72 67 31 3d 3d  READ" && $arg1==
c970: 22 74 33 22 20 26 26 20 24 61 72 67 32 3d 3d 22  "t3" && $arg2=="
c980: 52 4f 57 49 44 22 7d 20 7b 0a 20 20 20 20 20 20  ROWID"} {.      
c990: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47  return SQLITE_IG
c9a0: 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72  NORE.    }.    r
c9b0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
c9c0: 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b    }.  catchsql {
c9d0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33  SELECT * FROM t3
c9e0: 7d 0a 7d 20 7b 30 20 7b 34 34 20 35 35 20 36 36  }.} {0 {44 55 66
c9f0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
ca00: 32 2e 37 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  2.7 {.  catchsql
ca10: 20 7b 53 45 4c 45 43 54 20 52 4f 57 49 44 2c 79   {SELECT ROWID,y
ca20: 2c 7a 20 46 52 4f 4d 20 74 33 7d 0a 7d 20 7b 30  ,z FROM t3}.} {0
ca30: 20 7b 34 34 20 35 35 20 36 36 7d 7d 0a 64 6f 5f   {44 55 66}}.do_
ca40: 74 65 73 74 20 61 75 74 68 2d 32 2e 38 20 7b 0a  test auth-2.8 {.
ca50: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
ca60: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
ca70: 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20   arg4} {.    if 
ca80: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
ca90: 52 45 41 44 22 20 26 26 20 24 61 72 67 31 3d 3d  READ" && $arg1==
caa0: 22 74 32 22 20 26 26 20 24 61 72 67 32 3d 3d 22  "t2" && $arg2=="
cab0: 52 4f 57 49 44 22 7d 20 7b 0a 20 20 20 20 20 20  ROWID"} {.      
cac0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47  return SQLITE_IG
cad0: 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72  NORE.    }.    r
cae0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
caf0: 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b    }.  catchsql {
cb00: 53 45 4c 45 43 54 20 52 4f 57 49 44 2c 62 2c 63  SELECT ROWID,b,c
cb10: 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 30 20 7b   FROM t2}.} {0 {
cb20: 7b 7d 20 32 20 33 33 20 7b 7d 20 38 20 39 7d 7d  {} 2 33 {} 8 9}}
cb30: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 32 2e  .do_test auth-2.
cb40: 39 2e 31 20 7b 0a 20 20 23 20 57 65 20 68 61 76  9.1 {.  # We hav
cb50: 65 20 74 6f 20 66 6c 75 73 68 20 74 68 65 20 63  e to flush the c
cb60: 61 63 68 65 20 68 65 72 65 20 69 6e 20 63 61 73  ache here in cas
cb70: 65 20 74 68 65 20 54 63 6c 20 69 6e 74 65 72 66  e the Tcl interf
cb80: 61 63 65 20 74 72 69 65 73 20 74 6f 0a 20 20 23  ace tries to.  #
cb90: 20 72 65 75 73 65 20 61 20 73 74 61 74 65 6d 65   reuse a stateme
cba0: 6e 74 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68  nt compiled with
cbb0: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
cbc0: 5f 76 32 28 29 2e 20 49 6e 20 74 68 69 73 20 63  _v2(). In this c
cbd0: 61 73 65 2c 0a 20 20 23 20 74 68 65 20 66 69 72  ase,.  # the fir
cbe0: 73 74 20 65 72 72 6f 72 20 65 6e 63 6f 75 6e 74  st error encount
cbf0: 65 72 65 64 20 69 73 20 61 6e 20 53 51 4c 49 54  ered is an SQLIT
cc00: 45 5f 53 43 48 45 4d 41 20 65 72 72 6f 72 2e 20  E_SCHEMA error. 
cc10: 54 68 65 6e 2c 20 77 68 65 6e 0a 20 20 23 20 74  Then, when.  # t
cc20: 72 79 69 6e 67 20 74 6f 20 72 65 63 6f 6d 70 69  rying to recompi
cc30: 6c 65 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  le the statement
cc40: 2c 20 74 68 65 20 61 75 74 68 6f 72 69 7a 61 74  , the authorizat
cc50: 69 6f 6e 20 65 72 72 6f 72 20 69 73 20 65 6e 63  ion error is enc
cc60: 6f 75 6e 74 65 72 65 64 2e 0a 20 20 23 20 49 66  ountered..  # If
cc70: 20 77 65 20 64 6f 20 6e 6f 74 20 66 6c 75 73 68   we do not flush
cc80: 20 74 68 65 20 63 61 63 68 65 2c 20 74 68 65 20   the cache, the 
cc90: 63 6f 72 72 65 63 74 20 65 72 72 6f 72 20 6d 65  correct error me
cca0: 73 73 61 67 65 20 69 73 20 72 65 74 75 72 6e 65  ssage is returne
ccb0: 64 2c 20 62 75 74 0a 20 20 23 20 74 68 65 20 65  d, but.  # the e
ccc0: 72 72 6f 72 20 63 6f 64 65 20 69 73 20 53 51 4c  rror code is SQL
ccd0: 49 54 45 5f 53 43 48 45 4d 41 2c 20 6e 6f 74 20  ITE_SCHEMA, not 
cce0: 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 61 73 20  SQLITE_ERROR as 
ccf0: 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20  required by the 
cd00: 74 65 73 74 0a 20 20 23 20 63 61 73 65 20 61 66  test.  # case af
cd10: 74 65 72 20 74 68 69 73 20 6f 6e 65 2e 0a 20 20  ter this one..  
cd20: 23 0a 20 20 64 62 20 63 61 63 68 65 20 66 6c 75  #.  db cache flu
cd30: 73 68 0a 0a 20 20 70 72 6f 63 20 61 75 74 68 20  sh..  proc auth 
cd40: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
cd50: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
cd60: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
cd70: 49 54 45 5f 52 45 41 44 22 20 26 26 20 24 61 72  ITE_READ" && $ar
cd80: 67 31 3d 3d 22 74 32 22 20 26 26 20 24 61 72 67  g1=="t2" && $arg
cd90: 32 3d 3d 22 52 4f 57 49 44 22 7d 20 7b 0a 20 20  2=="ROWID"} {.  
cda0: 20 20 20 20 72 65 74 75 72 6e 20 62 6f 67 75 73      return bogus
cdb0: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
cdc0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
cdd0: 20 20 63 61 74 63 68 73 71 6c 20 7b 53 45 4c 45    catchsql {SELE
cde0: 43 54 20 52 4f 57 49 44 2c 62 2c 63 20 46 52 4f  CT ROWID,b,c FRO
cdf0: 4d 20 74 32 7d 0a 7d 20 7b 31 20 7b 61 75 74 68  M t2}.} {1 {auth
ce00: 6f 72 69 7a 65 72 20 6d 61 6c 66 75 6e 63 74 69  orizer malfuncti
ce10: 6f 6e 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  on}}.do_test aut
ce20: 68 2d 32 2e 39 2e 32 20 7b 0a 20 20 64 62 20 65  h-2.9.2 {.  db e
ce30: 72 72 6f 72 63 6f 64 65 0a 7d 20 7b 31 7d 0a 64  rrorcode.} {1}.d
ce40: 6f 5f 74 65 73 74 20 61 75 74 68 2d 32 2e 31 30  o_test auth-2.10
ce50: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
ce60: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
ce70: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
ce80: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
ce90: 54 45 5f 53 45 4c 45 43 54 22 7d 20 7b 0a 20 20  TE_SELECT"} {.  
cea0: 20 20 20 20 72 65 74 75 72 6e 20 62 6f 67 75 73      return bogus
ceb0: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
cec0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
ced0: 20 20 63 61 74 63 68 73 71 6c 20 7b 53 45 4c 45    catchsql {SELE
cee0: 43 54 20 52 4f 57 49 44 2c 62 2c 63 20 46 52 4f  CT ROWID,b,c FRO
cef0: 4d 20 74 32 7d 0a 7d 20 7b 31 20 7b 61 75 74 68  M t2}.} {1 {auth
cf00: 6f 72 69 7a 65 72 20 6d 61 6c 66 75 6e 63 74 69  orizer malfuncti
cf10: 6f 6e 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  on}}.do_test aut
cf20: 68 2d 32 2e 31 31 2e 31 20 7b 0a 20 20 70 72 6f  h-2.11.1 {.  pro
cf30: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
cf40: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
cf50: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
cf60: 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45 41 44 22  e=="SQLITE_READ"
cf70: 20 26 26 20 24 61 72 67 32 3d 3d 22 61 22 7d 20   && $arg2=="a"} 
cf80: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  {.      return S
cf90: 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20  QLITE_IGNORE.   
cfa0: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
cfb0: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
cfc0: 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a  tchsql {SELECT *
cfd0: 20 46 52 4f 4d 20 74 32 2c 20 74 33 7d 0a 7d 20   FROM t2, t3}.} 
cfe0: 7b 30 20 7b 7b 7d 20 32 20 33 33 20 34 34 20 35  {0 {{} 2 33 44 5
cff0: 35 20 36 36 20 7b 7d 20 38 20 39 20 34 34 20 35  5 66 {} 8 9 44 5
d000: 35 20 36 36 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  5 66}}.do_test a
d010: 75 74 68 2d 32 2e 31 31 2e 32 20 7b 0a 20 20 70  uth-2.11.2 {.  p
d020: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
d030: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
d040: 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g4} {.    if {$c
d050: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45 41  ode=="SQLITE_REA
d060: 44 22 20 26 26 20 24 61 72 67 32 3d 3d 22 78 22  D" && $arg2=="x"
d070: 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  } {.      return
d080: 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20   SQLITE_IGNORE. 
d090: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
d0a0: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
d0b0: 63 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54  catchsql {SELECT
d0c0: 20 2a 20 46 52 4f 4d 20 74 32 2c 20 74 33 7d 0a   * FROM t2, t3}.
d0d0: 7d 20 7b 30 20 7b 31 31 20 32 20 33 33 20 7b 7d  } {0 {11 2 33 {}
d0e0: 20 35 35 20 36 36 20 37 20 38 20 39 20 7b 7d 20   55 66 7 8 9 {} 
d0f0: 35 35 20 36 36 7d 7d 0a 0a 23 20 4d 61 6b 65 20  55 66}}..# Make 
d100: 73 75 72 65 20 74 68 65 20 4f 4c 44 20 61 6e 64  sure the OLD and
d110: 20 4e 45 57 20 70 73 65 75 64 6f 2d 74 61 62 6c   NEW pseudo-tabl
d120: 65 73 20 6f 66 20 61 20 74 72 69 67 67 65 72 20  es of a trigger 
d130: 67 65 74 20 61 75 74 68 6f 72 69 7a 65 64 2e 0a  get authorized..
d140: 23 0a 69 66 63 61 70 61 62 6c 65 20 74 72 69 67  #.ifcapable trig
d150: 67 65 72 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  ger {.  do_test 
d160: 61 75 74 68 2d 33 2e 31 20 7b 0a 20 20 20 20 70  auth-3.1 {.    p
d170: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
d180: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
d190: 67 34 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75  g4} {.      retu
d1a0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20  rn SQLITE_OK.   
d1b0: 20 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   }.    execsql {
d1c0: 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41  .      CREATE TA
d1d0: 42 4c 45 20 74 78 28 61 31 2c 61 32 2c 62 31 2c  BLE tx(a1,a2,b1,
d1e0: 62 32 2c 63 31 2c 63 32 29 3b 0a 20 20 20 20 20  b2,c1,c2);.     
d1f0: 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20   CREATE TRIGGER 
d200: 72 31 20 41 46 54 45 52 20 55 50 44 41 54 45 20  r1 AFTER UPDATE 
d210: 4f 4e 20 74 32 20 46 4f 52 20 45 41 43 48 20 52  ON t2 FOR EACH R
d220: 4f 57 20 42 45 47 49 4e 0a 20 20 20 20 20 20 20  OW BEGIN.       
d230: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 78 20   INSERT INTO tx 
d240: 56 41 4c 55 45 53 28 4f 4c 44 2e 61 2c 4e 45 57  VALUES(OLD.a,NEW
d250: 2e 61 2c 4f 4c 44 2e 62 2c 4e 45 57 2e 62 2c 4f  .a,OLD.b,NEW.b,O
d260: 4c 44 2e 63 2c 4e 45 57 2e 63 29 3b 0a 20 20 20  LD.c,NEW.c);.   
d270: 20 20 20 45 4e 44 3b 0a 20 20 20 20 20 20 55 50     END;.      UP
d280: 44 41 54 45 20 74 32 20 53 45 54 20 61 3d 61 2b  DATE t2 SET a=a+
d290: 31 3b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20  1;.      SELECT 
d2a0: 2a 20 46 52 4f 4d 20 74 78 3b 0a 20 20 20 20 7d  * FROM tx;.    }
d2b0: 0a 20 20 7d 20 7b 31 31 20 31 32 20 32 20 32 20  .  } {11 12 2 2 
d2c0: 33 33 20 33 33 20 37 20 38 20 38 20 38 20 39 20  33 33 7 8 8 8 9 
d2d0: 39 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74  9}.  do_test aut
d2e0: 68 2d 33 2e 32 20 7b 0a 20 20 20 20 70 72 6f 63  h-3.2 {.    proc
d2f0: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
d300: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
d310: 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f   {.      if {$co
d320: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45 41 44  de=="SQLITE_READ
d330: 22 20 26 26 20 24 61 72 67 31 3d 3d 22 74 32 22  " && $arg1=="t2"
d340: 20 26 26 20 24 61 72 67 32 3d 3d 22 63 22 7d 20   && $arg2=="c"} 
d350: 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  {.        return
d360: 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20   SQLITE_IGNORE. 
d370: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74       }.      ret
d380: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
d390: 20 20 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20    }.    execsql 
d3a0: 7b 0a 20 20 20 20 20 20 44 45 4c 45 54 45 20 46  {.      DELETE F
d3b0: 52 4f 4d 20 74 78 3b 0a 20 20 20 20 20 20 55 50  ROM tx;.      UP
d3c0: 44 41 54 45 20 74 32 20 53 45 54 20 61 3d 61 2b  DATE t2 SET a=a+
d3d0: 31 30 30 3b 0a 20 20 20 20 20 20 53 45 4c 45 43  100;.      SELEC
d3e0: 54 20 2a 20 46 52 4f 4d 20 74 78 3b 0a 20 20 20  T * FROM tx;.   
d3f0: 20 7d 0a 20 20 7d 20 7b 31 32 20 31 31 32 20 32   }.  } {12 112 2
d400: 20 32 20 7b 7d 20 7b 7d 20 38 20 31 30 38 20 38   2 {} {} 8 108 8
d410: 20 38 20 7b 7d 20 7b 7d 7d 0a 7d 20 3b 23 20 69   8 {} {}}.} ;# i
d420: 66 63 61 70 61 62 6c 65 20 74 72 69 67 67 65 72  fcapable trigger
d430: 0a 0a 23 20 4d 61 6b 65 20 73 75 72 65 20 74 68  ..# Make sure th
d440: 65 20 6e 61 6d 65 73 20 6f 66 20 76 69 65 77 73  e names of views
d450: 20 61 6e 64 20 74 72 69 67 67 65 72 73 20 61 72   and triggers ar
d460: 65 20 70 61 73 73 65 64 20 6f 6e 20 6f 6e 20 61  e passed on on a
d470: 72 67 34 2e 0a 23 0a 69 66 63 61 70 61 62 6c 65  rg4..#.ifcapable
d480: 20 74 72 69 67 67 65 72 20 7b 0a 64 6f 5f 74 65   trigger {.do_te
d490: 73 74 20 61 75 74 68 2d 34 2e 31 20 7b 0a 20 20  st auth-4.1 {.  
d4a0: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
d4b0: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
d4c0: 72 67 34 7d 20 7b 0a 20 20 20 20 6c 61 70 70 65  rg4} {.    lappe
d4d0: 6e 64 20 3a 3a 61 75 74 68 61 72 67 73 20 24 63  nd ::authargs $c
d4e0: 6f 64 65 20 24 61 72 67 31 20 24 61 72 67 32 20  ode $arg1 $arg2 
d4f0: 24 61 72 67 33 20 24 61 72 67 34 0a 20 20 20 20  $arg3 $arg4.    
d500: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
d510: 0a 20 20 7d 0a 20 20 73 65 74 20 61 75 74 68 61  .  }.  set autha
d520: 72 67 73 20 7b 7d 0a 20 20 65 78 65 63 73 71 6c  rgs {}.  execsql
d530: 20 7b 0a 20 20 20 20 55 50 44 41 54 45 20 74 32   {.    UPDATE t2
d540: 20 53 45 54 20 61 3d 61 2b 31 3b 0a 20 20 7d 0a   SET a=a+1;.  }.
d550: 20 20 73 65 74 20 61 75 74 68 61 72 67 73 0a 7d    set authargs.}
d560: 20 5b 6c 69 73 74 20 5c 0a 20 20 53 51 4c 49 54   [list \.  SQLIT
d570: 45 5f 52 45 41 44 20 20 20 74 32 20 61 20 20 6d  E_READ   t2 a  m
d580: 61 69 6e 20 7b 7d 20 5c 0a 20 20 53 51 4c 49 54  ain {} \.  SQLIT
d590: 45 5f 55 50 44 41 54 45 20 74 32 20 61 20 20 6d  E_UPDATE t2 a  m
d5a0: 61 69 6e 20 7b 7d 20 5c 0a 20 20 53 51 4c 49 54  ain {} \.  SQLIT
d5b0: 45 5f 49 4e 53 45 52 54 20 74 78 20 7b 7d 20 6d  E_INSERT tx {} m
d5c0: 61 69 6e 20 72 31 20 5c 0a 20 20 53 51 4c 49 54  ain r1 \.  SQLIT
d5d0: 45 5f 52 45 41 44 20 20 20 74 32 20 61 20 20 6d  E_READ   t2 a  m
d5e0: 61 69 6e 20 72 31 20 5c 0a 20 20 53 51 4c 49 54  ain r1 \.  SQLIT
d5f0: 45 5f 52 45 41 44 20 20 20 74 32 20 61 20 20 6d  E_READ   t2 a  m
d600: 61 69 6e 20 72 31 20 5c 0a 20 20 53 51 4c 49 54  ain r1 \.  SQLIT
d610: 45 5f 52 45 41 44 20 20 20 74 32 20 62 20 20 6d  E_READ   t2 b  m
d620: 61 69 6e 20 72 31 20 5c 0a 20 20 53 51 4c 49 54  ain r1 \.  SQLIT
d630: 45 5f 52 45 41 44 20 20 20 74 32 20 62 20 20 6d  E_READ   t2 b  m
d640: 61 69 6e 20 72 31 20 5c 0a 20 20 53 51 4c 49 54  ain r1 \.  SQLIT
d650: 45 5f 52 45 41 44 20 20 20 74 32 20 63 20 20 6d  E_READ   t2 c  m
d660: 61 69 6e 20 72 31 20 5c 0a 20 20 53 51 4c 49 54  ain r1 \.  SQLIT
d670: 45 5f 52 45 41 44 20 20 20 74 32 20 63 20 20 6d  E_READ   t2 c  m
d680: 61 69 6e 20 72 31 5d 0a 7d 0a 0a 69 66 63 61 70  ain r1].}..ifcap
d690: 61 62 6c 65 20 7b 76 69 65 77 20 26 26 20 74 72  able {view && tr
d6a0: 69 67 67 65 72 7d 20 7b 0a 64 6f 5f 74 65 73 74  igger} {.do_test
d6b0: 20 61 75 74 68 2d 34 2e 32 20 7b 0a 20 20 65 78   auth-4.2 {.  ex
d6c0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41  ecsql {.    CREA
d6d0: 54 45 20 56 49 45 57 20 76 31 20 41 53 20 53 45  TE VIEW v1 AS SE
d6e0: 4c 45 43 54 20 61 2b 62 20 41 53 20 78 20 46 52  LECT a+b AS x FR
d6f0: 4f 4d 20 74 32 3b 0a 20 20 20 20 43 52 45 41 54  OM t2;.    CREAT
d700: 45 20 54 41 42 4c 45 20 76 31 63 68 6e 67 28 78  E TABLE v1chng(x
d710: 31 2c 78 32 29 3b 0a 20 20 20 20 43 52 45 41 54  1,x2);.    CREAT
d720: 45 20 54 52 49 47 47 45 52 20 72 32 20 49 4e 53  E TRIGGER r2 INS
d730: 54 45 41 44 20 4f 46 20 55 50 44 41 54 45 20 4f  TEAD OF UPDATE O
d740: 4e 20 76 31 20 42 45 47 49 4e 0a 20 20 20 20 20  N v1 BEGIN.     
d750: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 76 31 63   INSERT INTO v1c
d760: 68 6e 67 20 56 41 4c 55 45 53 28 4f 4c 44 2e 78  hng VALUES(OLD.x
d770: 2c 4e 45 57 2e 78 29 3b 0a 20 20 20 20 45 4e 44  ,NEW.x);.    END
d780: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ;.    SELECT * F
d790: 52 4f 4d 20 76 31 3b 0a 20 20 7d 0a 7d 20 7b 31  ROM v1;.  }.} {1
d7a0: 31 35 20 31 31 37 7d 0a 64 6f 5f 74 65 73 74 20  15 117}.do_test 
d7b0: 61 75 74 68 2d 34 2e 33 20 7b 0a 20 20 73 65 74  auth-4.3 {.  set
d7c0: 20 61 75 74 68 61 72 67 73 20 7b 7d 0a 20 20 65   authargs {}.  e
d7d0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 55 50 44  xecsql {.    UPD
d7e0: 41 54 45 20 76 31 20 53 45 54 20 78 3d 31 20 57  ATE v1 SET x=1 W
d7f0: 48 45 52 45 20 78 3d 31 31 37 0a 20 20 7d 0a 20  HERE x=117.  }. 
d800: 20 73 65 74 20 61 75 74 68 61 72 67 73 0a 7d 20   set authargs.} 
d810: 5b 6c 69 73 74 20 5c 0a 20 20 53 51 4c 49 54 45  [list \.  SQLITE
d820: 5f 55 50 44 41 54 45 20 76 31 20 20 20 20 20 78  _UPDATE v1     x
d830: 20 20 6d 61 69 6e 20 7b 7d 20 5c 0a 20 20 53 51    main {} \.  SQ
d840: 4c 49 54 45 5f 53 45 4c 45 43 54 20 7b 7d 20 20  LITE_SELECT {}  
d850: 20 20 20 7b 7d 20 7b 7d 20 20 20 76 31 20 5c 0a     {} {}   v1 \.
d860: 20 20 53 51 4c 49 54 45 5f 52 45 41 44 20 20 20    SQLITE_READ   
d870: 74 32 20 20 20 20 20 61 20 20 6d 61 69 6e 20 76  t2     a  main v
d880: 31 20 5c 0a 20 20 53 51 4c 49 54 45 5f 52 45 41  1 \.  SQLITE_REA
d890: 44 20 20 20 74 32 20 20 20 20 20 62 20 20 6d 61  D   t2     b  ma
d8a0: 69 6e 20 76 31 20 5c 0a 20 20 53 51 4c 49 54 45  in v1 \.  SQLITE
d8b0: 5f 53 45 4c 45 43 54 20 7b 7d 20 20 20 20 20 7b  _SELECT {}     {
d8c0: 7d 20 7b 7d 20 20 20 7b 7d 20 5c 0a 20 20 53 51  } {}   {} \.  SQ
d8d0: 4c 49 54 45 5f 52 45 41 44 20 20 20 76 31 20 20  LITE_READ   v1  
d8e0: 20 20 20 78 20 20 6d 61 69 6e 20 76 31 20 5c 0a     x  main v1 \.
d8f0: 20 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 20    SQLITE_INSERT 
d900: 76 31 63 68 6e 67 20 7b 7d 20 6d 61 69 6e 20 72  v1chng {} main r
d910: 32 20 5c 0a 20 20 53 51 4c 49 54 45 5f 52 45 41  2 \.  SQLITE_REA
d920: 44 20 20 20 76 31 20 20 20 20 20 78 20 20 6d 61  D   v1     x  ma
d930: 69 6e 20 72 32 20 5c 0a 20 20 53 51 4c 49 54 45  in r2 \.  SQLITE
d940: 5f 52 45 41 44 20 20 20 76 31 20 20 20 20 20 78  _READ   v1     x
d950: 20 20 6d 61 69 6e 20 72 32 20 5c 0a 5d 0a 0a 64    main r2 \.]..d
d960: 6f 5f 74 65 73 74 20 61 75 74 68 2d 34 2e 34 20  o_test auth-4.4 
d970: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
d980: 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52    CREATE TRIGGER
d990: 20 72 33 20 49 4e 53 54 45 41 44 20 4f 46 20 44   r3 INSTEAD OF D
d9a0: 45 4c 45 54 45 20 4f 4e 20 76 31 20 42 45 47 49  ELETE ON v1 BEGI
d9b0: 4e 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49  N.      INSERT I
d9c0: 4e 54 4f 20 76 31 63 68 6e 67 20 56 41 4c 55 45  NTO v1chng VALUE
d9d0: 53 28 4f 4c 44 2e 78 2c 4e 55 4c 4c 29 3b 0a 20  S(OLD.x,NULL);. 
d9e0: 20 20 20 45 4e 44 3b 0a 20 20 20 20 53 45 4c 45     END;.    SELE
d9f0: 43 54 20 2a 20 46 52 4f 4d 20 76 31 3b 0a 20 20  CT * FROM v1;.  
da00: 7d 0a 7d 20 7b 31 31 35 20 31 31 37 7d 0a 64 6f  }.} {115 117}.do
da10: 5f 74 65 73 74 20 61 75 74 68 2d 34 2e 35 20 7b  _test auth-4.5 {
da20: 0a 20 20 73 65 74 20 61 75 74 68 61 72 67 73 20  .  set authargs 
da30: 7b 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  {}.  execsql {. 
da40: 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 76     DELETE FROM v
da50: 31 20 57 48 45 52 45 20 78 3d 31 31 37 0a 20 20  1 WHERE x=117.  
da60: 7d 0a 20 20 73 65 74 20 61 75 74 68 61 72 67 73  }.  set authargs
da70: 0a 7d 20 5b 6c 69 73 74 20 5c 0a 20 20 53 51 4c  .} [list \.  SQL
da80: 49 54 45 5f 44 45 4c 45 54 45 20 76 31 20 20 20  ITE_DELETE v1   
da90: 20 20 7b 7d 20 6d 61 69 6e 20 7b 7d 20 5c 0a 20    {} main {} \. 
daa0: 20 53 51 4c 49 54 45 5f 53 45 4c 45 43 54 20 7b   SQLITE_SELECT {
dab0: 7d 20 20 20 20 20 7b 7d 20 7b 7d 20 20 20 76 31  }     {} {}   v1
dac0: 20 5c 0a 20 20 53 51 4c 49 54 45 5f 52 45 41 44   \.  SQLITE_READ
dad0: 20 20 20 74 32 20 20 20 20 20 61 20 20 6d 61 69     t2     a  mai
dae0: 6e 20 76 31 20 5c 0a 20 20 53 51 4c 49 54 45 5f  n v1 \.  SQLITE_
daf0: 52 45 41 44 20 20 20 74 32 20 20 20 20 20 62 20  READ   t2     b 
db00: 20 6d 61 69 6e 20 76 31 20 5c 0a 20 20 53 51 4c   main v1 \.  SQL
db10: 49 54 45 5f 53 45 4c 45 43 54 20 7b 7d 20 20 20  ITE_SELECT {}   
db20: 20 20 7b 7d 20 7b 7d 20 20 20 7b 7d 20 5c 0a 20    {} {}   {} \. 
db30: 20 53 51 4c 49 54 45 5f 52 45 41 44 20 20 20 76   SQLITE_READ   v
db40: 31 20 20 20 20 20 78 20 20 6d 61 69 6e 20 76 31  1     x  main v1
db50: 20 5c 0a 20 20 53 51 4c 49 54 45 5f 49 4e 53 45   \.  SQLITE_INSE
db60: 52 54 20 76 31 63 68 6e 67 20 7b 7d 20 6d 61 69  RT v1chng {} mai
db70: 6e 20 72 33 20 5c 0a 20 20 53 51 4c 49 54 45 5f  n r3 \.  SQLITE_
db80: 52 45 41 44 20 20 20 76 31 20 20 20 20 20 78 20  READ   v1     x 
db90: 20 6d 61 69 6e 20 72 33 20 5c 0a 5d 0a 0a 7d 20   main r3 \.]..} 
dba0: 3b 23 20 69 66 63 61 70 61 62 6c 65 20 76 69 65  ;# ifcapable vie
dbb0: 77 20 26 26 20 74 72 69 67 67 65 72 0a 0a 23 20  w && trigger..# 
dbc0: 54 69 63 6b 65 74 20 23 31 33 33 38 3a 20 20 4d  Ticket #1338:  M
dbd0: 61 6b 65 20 73 75 72 65 20 61 75 74 68 65 6e 74  ake sure authent
dbe0: 69 63 61 74 69 6f 6e 20 77 6f 72 6b 73 20 69 6e  ication works in
dbf0: 20 74 68 65 20 70 72 65 73 65 6e 63 65 20 6f 66   the presence of
dc00: 20 61 6e 20 41 53 0a 23 20 63 6c 61 75 73 65 2e   an AS.# clause.
dc10: 0a 23 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  .#.do_test auth-
dc20: 35 2e 31 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  5.1 {.  proc aut
dc30: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
dc40: 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20  2 arg3 arg4} {. 
dc50: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
dc60: 5f 4f 4b 0a 20 20 7d 0a 20 20 65 78 65 63 73 71  _OK.  }.  execsq
dc70: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 63  l {.    SELECT c
dc80: 6f 75 6e 74 28 61 29 20 41 53 20 63 6e 74 20 46  ount(a) AS cnt F
dc90: 52 4f 4d 20 74 34 20 4f 52 44 45 52 20 42 59 20  ROM t4 ORDER BY 
dca0: 63 6e 74 0a 20 20 7d 0a 7d 20 7b 31 7d 0a 0a 23  cnt.  }.} {1}..#
dcb0: 20 54 69 63 6b 65 74 20 23 31 36 30 37 0a 23 0a   Ticket #1607.#.
dcc0: 69 66 63 61 70 61 62 6c 65 20 63 6f 6d 70 6f 75  ifcapable compou
dcd0: 6e 64 26 26 73 75 62 71 75 65 72 79 20 7b 0a 20  nd&&subquery {. 
dce0: 20 69 66 63 61 70 61 62 6c 65 20 74 72 69 67 67   ifcapable trigg
dcf0: 65 72 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  er {.    execsql
dd00: 20 7b 0a 20 20 20 20 20 20 44 52 4f 50 20 54 41   {.      DROP TA
dd10: 42 4c 45 20 74 78 3b 0a 20 20 20 20 7d 0a 20 20  BLE tx;.    }.  
dd20: 20 20 69 66 63 61 70 61 62 6c 65 20 76 69 65 77    ifcapable view
dd30: 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c   {.      execsql
dd40: 20 7b 0a 20 20 20 20 20 20 20 20 44 52 4f 50 20   {.        DROP 
dd50: 54 41 42 4c 45 20 76 31 63 68 6e 67 3b 0a 20 20  TABLE v1chng;.  
dd60: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
dd70: 20 20 69 66 63 61 70 61 62 6c 65 20 73 74 61 74    ifcapable stat
dd80: 32 20 7b 0a 20 20 20 20 73 65 74 20 73 74 61 74  2 {.    set stat
dd90: 32 20 22 73 71 6c 69 74 65 5f 73 74 61 74 32 20  2 "sqlite_stat2 
dda0: 22 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20  ".  } else {.   
ddb0: 20 73 65 74 20 73 74 61 74 32 20 22 22 0a 20 20   set stat2 "".  
ddc0: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68  }.  do_test auth
ddd0: 2d 35 2e 32 20 7b 0a 20 20 20 20 65 78 65 63 73  -5.2 {.    execs
dde0: 71 6c 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43  ql {.      SELEC
ddf0: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 28 0a 20 20  T name FROM (.  
de00: 20 20 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46        SELECT * F
de10: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
de20: 72 20 55 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c 45  r UNION ALL SELE
de30: 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65  CT * FROM sqlite
de40: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 29 0a 20 20  _temp_master).  
de50: 20 20 20 20 57 48 45 52 45 20 74 79 70 65 3d 27      WHERE type='
de60: 74 61 62 6c 65 27 0a 20 20 20 20 20 20 4f 52 44  table'.      ORD
de70: 45 52 20 42 59 20 6e 61 6d 65 0a 20 20 20 20 7d  ER BY name.    }
de80: 0a 20 20 7d 20 22 73 71 6c 69 74 65 5f 73 74 61  .  } "sqlite_sta
de90: 74 31 20 24 7b 73 74 61 74 32 7d 74 31 20 74 32  t1 ${stat2}t1 t2
dea0: 20 74 33 20 74 34 22 0a 7d 0a 0a 23 20 54 69 63   t3 t4".}..# Tic
deb0: 6b 65 74 20 23 33 39 34 34 0a 23 0a 69 66 63 61  ket #3944.#.ifca
dec0: 70 61 62 6c 65 20 74 72 69 67 67 65 72 20 7b 0a  pable trigger {.
ded0: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 35    do_test auth-5
dee0: 2e 33 2e 31 20 7b 0a 20 20 20 20 65 78 65 63 73  .3.1 {.    execs
def0: 71 6c 20 7b 0a 20 20 20 20 20 20 43 52 45 41 54  ql {.      CREAT
df00: 45 20 54 41 42 4c 45 20 74 35 20 28 20 78 20 29  E TABLE t5 ( x )
df10: 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54  ;.      CREATE T
df20: 52 49 47 47 45 52 20 74 35 5f 74 72 31 20 41 46  RIGGER t5_tr1 AF
df30: 54 45 52 20 49 4e 53 45 52 54 20 4f 4e 20 74 35  TER INSERT ON t5
df40: 20 42 45 47 49 4e 20 0a 20 20 20 20 20 20 20 20   BEGIN .        
df50: 55 50 44 41 54 45 20 74 35 20 53 45 54 20 78 20  UPDATE t5 SET x 
df60: 3d 20 31 20 57 48 45 52 45 20 4e 45 57 2e 78 20  = 1 WHERE NEW.x 
df70: 3d 20 30 3b 0a 20 20 20 20 20 20 45 4e 44 3b 0a  = 0;.      END;.
df80: 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 73      }.  } {}.  s
df90: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c  et ::authargs [l
dfa0: 69 73 74 5d 0a 20 20 70 72 6f 63 20 61 75 74 68  ist].  proc auth
dfb0: 20 7b 61 72 67 73 7d 20 7b 0a 20 20 20 20 65 76   {args} {.    ev
dfc0: 61 6c 20 6c 61 70 70 65 6e 64 20 3a 3a 61 75 74  al lappend ::aut
dfd0: 68 61 72 67 73 20 24 61 72 67 73 0a 20 20 20 20  hargs $args.    
dfe0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
dff0: 0a 20 20 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61  .  }.  do_test a
e000: 75 74 68 2d 35 2e 33 2e 32 20 7b 0a 20 20 20 20  uth-5.3.2 {.    
e010: 65 78 65 63 73 71 6c 20 7b 20 49 4e 53 45 52 54  execsql { INSERT
e020: 20 49 4e 54 4f 20 74 35 20 28 78 29 20 76 61 6c   INTO t5 (x) val
e030: 75 65 73 28 30 29 20 7d 0a 20 20 20 20 73 65 74  ues(0) }.    set
e040: 20 3a 3a 61 75 74 68 61 72 67 73 0a 20 20 7d 20   ::authargs.  } 
e050: 5b 6c 69 73 74 20 53 51 4c 49 54 45 5f 49 4e 53  [list SQLITE_INS
e060: 45 52 54 20 74 35 20 7b 7d 20 6d 61 69 6e 20 7b  ERT t5 {} main {
e070: 7d 20 20 20 20 5c 0a 20 20 20 20 20 20 20 20 20  }    \.         
e080: 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20 74   SQLITE_UPDATE t
e090: 35 20 78 20 6d 61 69 6e 20 74 35 5f 74 72 31 20  5 x main t5_tr1 
e0a0: 5c 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c 49  \.          SQLI
e0b0: 54 45 5f 52 45 41 44 20 74 35 20 78 20 6d 61 69  TE_READ t5 x mai
e0c0: 6e 20 74 35 5f 74 72 31 20 20 20 5c 0a 20 20 20  n t5_tr1   \.   
e0d0: 20 5d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74   ].  do_test aut
e0e0: 68 2d 35 2e 33 2e 32 20 7b 0a 20 20 20 20 65 78  h-5.3.2 {.    ex
e0f0: 65 63 73 71 6c 20 7b 20 53 45 4c 45 43 54 20 2a  ecsql { SELECT *
e100: 20 46 52 4f 4d 20 74 35 20 7d 0a 20 20 7d 20 7b   FROM t5 }.  } {
e110: 31 7d 0a 7d 0a 0a 0a 72 65 6e 61 6d 65 20 70 72  1}.}...rename pr
e120: 6f 63 20 7b 7d 0a 72 65 6e 61 6d 65 20 70 72 6f  oc {}.rename pro
e130: 63 5f 72 65 61 6c 20 70 72 6f 63 0a 0a 0a 66 69  c_real proc...fi
e140: 6e 69 73 68 5f 74 65 73 74 0a                    nish_test.