/ Hex Artifact Content
Login

Artifact 9776ab43de94801f0fa6787b3f3e803686ffa0ff:


0000: 23 20 32 30 30 33 20 41 70 72 69 6c 20 34 0a 23  # 2003 April 4.#
0010: 0a 23 20 54 68 65 20 61 75 74 68 6f 72 20 64 69  .# The author di
0020: 73 63 6c 61 69 6d 73 20 63 6f 70 79 72 69 67 68  sclaims copyrigh
0030: 74 20 74 6f 20 74 68 69 73 20 73 6f 75 72 63 65  t to this source
0040: 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63 65   code.  In place
0050: 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e 6f   of.# a legal no
0060: 74 69 63 65 2c 20 68 65 72 65 20 69 73 20 61 20  tice, here is a 
0070: 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20 20  blessing:.#.#   
0080: 20 4d 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64   May you do good
0090: 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 23   and not evil..#
00a0: 20 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64      May you find
00b0: 20 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72   forgiveness for
00c0: 20 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f   yourself and fo
00d0: 72 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 23 20  rgive others..# 
00e0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
00f0: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0100: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0110: 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23 2a 2a 2a  you give..#.#***
0120: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 0a 23 20 54 68 69 73 20 66 69 6c 65  ****.# This file
0170: 20 69 6d 70 6c 65 6d 65 6e 74 73 20 72 65 67 72   implements regr
0180: 65 73 73 69 6f 6e 20 74 65 73 74 73 20 66 6f 72  ession tests for
0190: 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e   SQLite library.
01a0: 20 20 54 68 65 0a 23 20 66 6f 63 75 73 20 6f 66    The.# focus of
01b0: 20 74 68 69 73 20 73 63 72 69 70 74 20 69 73 20   this script is 
01c0: 74 65 73 74 69 6e 67 20 74 68 65 20 41 54 54 41  testing the ATTA
01d0: 43 48 20 61 6e 64 20 44 45 54 41 43 48 20 63 6f  CH and DETACH co
01e0: 6d 6d 61 6e 64 73 0a 23 20 61 6e 64 20 72 65 6c  mmands.# and rel
01f0: 61 74 65 64 20 66 75 6e 63 74 69 6f 6e 61 6c 69  ated functionali
0200: 74 79 2e 0a 23 0a 23 20 24 49 64 3a 20 61 75 74  ty..#.# $Id: aut
0210: 68 2e 74 65 73 74 2c 76 20 31 2e 33 34 20 32 30  h.test,v 1.34 20
0220: 30 36 2f 30 31 2f 33 31 20 31 34 3a 32 38 3a 34  06/01/31 14:28:4
0230: 36 20 64 72 68 20 45 78 70 20 24 0a 23 0a 0a 73  6 drh Exp $.#..s
0240: 65 74 20 74 65 73 74 64 69 72 20 5b 66 69 6c 65  et testdir [file
0250: 20 64 69 72 6e 61 6d 65 20 24 61 72 67 76 30 5d   dirname $argv0]
0260: 0a 73 6f 75 72 63 65 20 24 74 65 73 74 64 69 72  .source $testdir
0270: 2f 74 65 73 74 65 72 2e 74 63 6c 0a 0a 23 20 64  /tester.tcl..# d
0280: 69 73 61 62 6c 65 20 74 68 69 73 20 74 65 73 74  isable this test
0290: 20 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4f   if the SQLITE_O
02a0: 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f  MIT_AUTHORIZATIO
02b0: 4e 20 6d 61 63 72 6f 20 69 73 0a 23 20 64 65 66  N macro is.# def
02c0: 69 6e 65 64 20 64 75 72 69 6e 67 20 63 6f 6d 70  ined during comp
02d0: 69 6c 61 74 69 6f 6e 2e 0a 69 66 20 7b 5b 63 61  ilation..if {[ca
02e0: 74 63 68 20 7b 64 62 20 61 75 74 68 20 7b 7d 7d  tch {db auth {}}
02f0: 20 6d 73 67 5d 7d 20 7b 0a 20 20 66 69 6e 69 73   msg]} {.  finis
0300: 68 5f 74 65 73 74 0a 20 20 72 65 74 75 72 6e 0a  h_test.  return.
0310: 7d 0a 0a 72 65 6e 61 6d 65 20 70 72 6f 63 20 70  }..rename proc p
0320: 72 6f 63 5f 72 65 61 6c 0a 70 72 6f 63 5f 72 65  roc_real.proc_re
0330: 61 6c 20 70 72 6f 63 20 7b 6e 61 6d 65 20 61 72  al proc {name ar
0340: 67 75 6d 65 6e 74 73 20 73 63 72 69 70 74 7d 20  guments script} 
0350: 7b 0a 20 20 70 72 6f 63 5f 72 65 61 6c 20 24 6e  {.  proc_real $n
0360: 61 6d 65 20 24 61 72 67 75 6d 65 6e 74 73 20 24  ame $arguments $
0370: 73 63 72 69 70 74 0a 20 20 69 66 20 7b 24 6e 61  script.  if {$na
0380: 6d 65 3d 3d 22 61 75 74 68 22 7d 20 7b 0a 20 20  me=="auth"} {.  
0390: 20 20 64 62 20 61 75 74 68 6f 72 69 7a 65 72 20    db authorizer 
03a0: 3a 3a 61 75 74 68 0a 20 20 7d 0a 7d 0a 0a 64 6f  ::auth.  }.}..do
03b0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 2e 31  _test auth-1.1.1
03c0: 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20   {.  db close.  
03d0: 73 65 74 20 3a 3a 44 42 20 5b 73 71 6c 69 74 65  set ::DB [sqlite
03e0: 33 20 64 62 20 74 65 73 74 2e 64 62 5d 0a 20 20  3 db test.db].  
03f0: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
0400: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
0410: 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg4} {.    if {$
0420: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 49 4e  code=="SQLITE_IN
0430: 53 45 52 54 22 20 26 26 20 24 61 72 67 31 3d 3d  SERT" && $arg1==
0440: 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 7d  "sqlite_master"}
0450: 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   {.      return 
0460: 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20  SQLITE_DENY.    
0470: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
0480: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 64 62 20  ITE_OK.  }.  db 
0490: 61 75 74 68 6f 72 69 7a 65 72 20 3a 3a 61 75 74  authorizer ::aut
04a0: 68 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52  h.  catchsql {CR
04b0: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c  EATE TABLE t1(a,
04c0: 62 2c 63 29 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20  b,c)}.} {1 {not 
04d0: 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f  authorized}}.do_
04e0: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 2e 32 20  test auth-1.1.2 
04f0: 7b 0a 20 20 64 62 20 65 72 72 6f 72 63 6f 64 65  {.  db errorcode
0500: 0a 7d 20 7b 32 33 7d 0a 64 6f 5f 74 65 73 74 20  .} {23}.do_test 
0510: 61 75 74 68 2d 31 2e 31 2e 33 20 7b 0a 20 20 64  auth-1.1.3 {.  d
0520: 62 20 61 75 74 68 6f 72 69 7a 65 72 0a 7d 20 7b  b authorizer.} {
0530: 3a 3a 61 75 74 68 7d 0a 64 6f 5f 74 65 73 74 20  ::auth}.do_test 
0540: 61 75 74 68 2d 31 2e 31 2e 34 20 7b 0a 20 20 23  auth-1.1.4 {.  #
0550: 20 54 69 63 6b 65 74 20 23 38 39 36 2e 0a 20 20   Ticket #896..  
0560: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 53  catchsql {.    S
0570: 45 4c 45 43 54 20 78 3b 0a 20 20 7d 0a 7d 20 7b  ELECT x;.  }.} {
0580: 31 20 7b 6e 6f 20 73 75 63 68 20 63 6f 6c 75 6d  1 {no such colum
0590: 6e 3a 20 78 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  n: x}}.do_test a
05a0: 75 74 68 2d 31 2e 32 20 7b 0a 20 20 65 78 65 63  uth-1.2 {.  exec
05b0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
05c0: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
05d0: 74 65 72 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  ter}.} {}.do_tes
05e0: 74 20 61 75 74 68 2d 31 2e 33 2e 31 20 7b 0a 20  t auth-1.3.1 {. 
05f0: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
0600: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
0610: 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg4} {.    if {
0620: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43  $code=="SQLITE_C
0630: 52 45 41 54 45 5f 54 41 42 4c 45 22 7d 20 7b 0a  REATE_TABLE"} {.
0640: 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68        set ::auth
0650: 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31  args [list $arg1
0660: 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72   $arg2 $arg3 $ar
0670: 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  g4].      return
0680: 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20   SQLITE_DENY.   
0690: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
06a0: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
06b0: 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45 20 54  tchsql {CREATE T
06c0: 41 42 4c 45 20 74 31 28 61 2c 62 2c 63 29 7d 0a  ABLE t1(a,b,c)}.
06d0: 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72  } {1 {not author
06e0: 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  ized}}.do_test a
06f0: 75 74 68 2d 31 2e 33 2e 32 20 7b 0a 20 20 64 62  uth-1.3.2 {.  db
0700: 20 65 72 72 6f 72 63 6f 64 65 0a 7d 20 7b 32 33   errorcode.} {23
0710: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
0720: 2e 33 2e 33 20 7b 0a 20 20 73 65 74 20 3a 3a 61  .3.3 {.  set ::a
0730: 75 74 68 61 72 67 73 0a 7d 20 7b 74 31 20 7b 7d  uthargs.} {t1 {}
0740: 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73   main {}}.do_tes
0750: 74 20 61 75 74 68 2d 31 2e 34 20 7b 0a 20 20 65  t auth-1.4 {.  e
0760: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
0770: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
0780: 6d 61 73 74 65 72 7d 0a 7d 20 7b 7d 0a 0a 69 66  master}.} {}..if
0790: 63 61 70 61 62 6c 65 20 74 65 6d 70 64 62 20 7b  capable tempdb {
07a0: 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  .  do_test auth-
07b0: 31 2e 35 20 7b 0a 20 20 20 20 70 72 6f 63 20 61  1.5 {.    proc a
07c0: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
07d0: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
07e0: 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64 65  .      if {$code
07f0: 3d 3d 22 53 51 4c 49 54 45 5f 49 4e 53 45 52 54  =="SQLITE_INSERT
0800: 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71 6c  " && $arg1=="sql
0810: 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22  ite_temp_master"
0820: 7d 20 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75  } {.        retu
0830: 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20  rn SQLITE_DENY. 
0840: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74       }.      ret
0850: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
0860: 20 20 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c    }.    catchsql
0870: 20 7b 43 52 45 41 54 45 20 54 45 4d 50 20 54 41   {CREATE TEMP TA
0880: 42 4c 45 20 74 31 28 61 2c 62 2c 63 29 7d 0a 20  BLE t1(a,b,c)}. 
0890: 20 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f   } {1 {not autho
08a0: 72 69 7a 65 64 7d 7d 0a 20 20 64 6f 5f 74 65 73  rized}}.  do_tes
08b0: 74 20 61 75 74 68 2d 31 2e 36 20 7b 0a 20 20 20  t auth-1.6 {.   
08c0: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
08d0: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
08e0: 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 20  e_temp_master}. 
08f0: 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20   } {}.  do_test 
0900: 61 75 74 68 2d 31 2e 37 2e 31 20 7b 0a 20 20 20  auth-1.7.1 {.   
0910: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
0920: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
0930: 61 72 67 34 7d 20 7b 0a 20 20 20 20 20 20 69 66  arg4} {.      if
0940: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
0950: 5f 43 52 45 41 54 45 5f 54 45 4d 50 5f 54 41 42  _CREATE_TEMP_TAB
0960: 4c 45 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 73  LE"} {.        s
0970: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c  et ::authargs [l
0980: 69 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20  ist $arg1 $arg2 
0990: 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20  $arg3 $arg4].   
09a0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
09b0: 54 45 5f 44 45 4e 59 0a 20 20 20 20 20 20 7d 0a  TE_DENY.      }.
09c0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
09d0: 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20  ITE_OK.    }.   
09e0: 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54   catchsql {CREAT
09f0: 45 20 54 45 4d 50 20 54 41 42 4c 45 20 74 31 28  E TEMP TABLE t1(
0a00: 61 2c 62 2c 63 29 7d 0a 20 20 7d 20 7b 31 20 7b  a,b,c)}.  } {1 {
0a10: 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d  not authorized}}
0a20: 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  .  do_test auth-
0a30: 31 2e 37 2e 32 20 7b 0a 20 20 20 20 20 73 65 74  1.7.2 {.     set
0a40: 20 3a 3a 61 75 74 68 61 72 67 73 0a 20 20 7d 20   ::authargs.  } 
0a50: 7b 74 31 20 7b 7d 20 74 65 6d 70 20 7b 7d 7d 0a  {t1 {} temp {}}.
0a60: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31    do_test auth-1
0a70: 2e 38 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .8 {.    execsql
0a80: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
0a90: 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  OM sqlite_temp_m
0aa0: 61 73 74 65 72 7d 0a 20 20 7d 20 7b 7d 0a 7d 0a  aster}.  } {}.}.
0ab0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
0ac0: 39 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  9 {.  proc auth 
0ad0: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
0ae0: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
0af0: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
0b00: 49 54 45 5f 49 4e 53 45 52 54 22 20 26 26 20 24  ITE_INSERT" && $
0b10: 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 6d 61  arg1=="sqlite_ma
0b20: 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 72  ster"} {.      r
0b30: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e  eturn SQLITE_IGN
0b40: 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  ORE.    }.    re
0b50: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
0b60: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 43   }.  catchsql {C
0b70: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61  REATE TABLE t1(a
0b80: 2c 62 2c 63 29 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a  ,b,c)}.} {0 {}}.
0b90: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
0ba0: 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  0 {.  execsql {S
0bb0: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
0bc0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d  sqlite_master}.}
0bd0: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68   {}.do_test auth
0be0: 2d 31 2e 31 31 20 7b 0a 20 20 70 72 6f 63 20 61  -1.11 {.  proc a
0bf0: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
0c00: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
0c10: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
0c20: 22 53 51 4c 49 54 45 5f 43 52 45 41 54 45 5f 54  "SQLITE_CREATE_T
0c30: 41 42 4c 45 22 7d 20 7b 0a 20 20 20 20 20 20 73  ABLE"} {.      s
0c40: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c  et ::authargs [l
0c50: 69 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20  ist $arg1 $arg2 
0c60: 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20  $arg3 $arg4].   
0c70: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
0c80: 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20  _IGNORE.    }.  
0c90: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
0ca0: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
0cb0: 6c 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20  l {CREATE TABLE 
0cc0: 74 31 28 61 2c 62 2c 63 29 7d 0a 7d 20 7b 30 20  t1(a,b,c)}.} {0 
0cd0: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
0ce0: 2d 31 2e 31 32 20 7b 0a 20 20 65 78 65 63 73 71  -1.12 {.  execsq
0cf0: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
0d00: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
0d10: 72 7d 0a 7d 20 7b 7d 0a 0a 69 66 63 61 70 61 62  r}.} {}..ifcapab
0d20: 6c 65 20 74 65 6d 70 64 62 20 7b 0a 20 20 64 6f  le tempdb {.  do
0d30: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 33 20  _test auth-1.13 
0d40: 7b 0a 20 20 20 20 70 72 6f 63 20 61 75 74 68 20  {.    proc auth 
0d50: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
0d60: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
0d70: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
0d80: 51 4c 49 54 45 5f 49 4e 53 45 52 54 22 20 26 26  QLITE_INSERT" &&
0d90: 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f   $arg1=="sqlite_
0da0: 74 65 6d 70 5f 6d 61 73 74 65 72 22 7d 20 7b 0a  temp_master"} {.
0db0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
0dc0: 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20  QLITE_IGNORE.   
0dd0: 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72     }.      retur
0de0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20  n SQLITE_OK.    
0df0: 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b  }.    catchsql {
0e00: 43 52 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c  CREATE TEMP TABL
0e10: 45 20 74 31 28 61 2c 62 2c 63 29 7d 0a 20 20 7d  E t1(a,b,c)}.  }
0e20: 20 7b 30 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73   {0 {}}.  do_tes
0e30: 74 20 61 75 74 68 2d 31 2e 31 34 20 7b 0a 20 20  t auth-1.14 {.  
0e40: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
0e50: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
0e60: 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a  te_temp_master}.
0e70: 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74    } {}.  do_test
0e80: 20 61 75 74 68 2d 31 2e 31 35 20 7b 0a 20 20 20   auth-1.15 {.   
0e90: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
0ea0: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
0eb0: 61 72 67 34 7d 20 7b 0a 20 20 20 20 20 20 69 66  arg4} {.      if
0ec0: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
0ed0: 5f 43 52 45 41 54 45 5f 54 45 4d 50 5f 54 41 42  _CREATE_TEMP_TAB
0ee0: 4c 45 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 73  LE"} {.        s
0ef0: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c  et ::authargs [l
0f00: 69 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20  ist $arg1 $arg2 
0f10: 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20  $arg3 $arg4].   
0f20: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
0f30: 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 20 20  TE_IGNORE.      
0f40: 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  }.      return S
0f50: 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20  QLITE_OK.    }. 
0f60: 20 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45     catchsql {CRE
0f70: 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 74  ATE TEMP TABLE t
0f80: 31 28 61 2c 62 2c 63 29 7d 0a 20 20 7d 20 7b 30  1(a,b,c)}.  } {0
0f90: 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61   {}}.  do_test a
0fa0: 75 74 68 2d 31 2e 31 36 20 7b 0a 20 20 20 20 65  uth-1.16 {.    e
0fb0: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
0fc0: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
0fd0: 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 20 20 7d  temp_master}.  }
0fe0: 20 7b 7d 0a 20 20 0a 20 20 64 6f 5f 74 65 73 74   {}.  .  do_test
0ff0: 20 61 75 74 68 2d 31 2e 31 37 20 7b 0a 20 20 20   auth-1.17 {.   
1000: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
1010: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
1020: 61 72 67 34 7d 20 7b 0a 20 20 20 20 20 20 69 66  arg4} {.      if
1030: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
1040: 5f 43 52 45 41 54 45 5f 54 41 42 4c 45 22 7d 20  _CREATE_TABLE"} 
1050: 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a  {.        set ::
1060: 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24  authargs [list $
1070: 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33  arg1 $arg2 $arg3
1080: 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 20 20   $arg4].        
1090: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45  return SQLITE_DE
10a0: 4e 59 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  NY.      }.     
10b0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
10c0: 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 74 63  K.    }.    catc
10d0: 68 73 71 6c 20 7b 43 52 45 41 54 45 20 54 45 4d  hsql {CREATE TEM
10e0: 50 20 54 41 42 4c 45 20 74 31 28 61 2c 62 2c 63  P TABLE t1(a,b,c
10f0: 29 7d 0a 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20 20  )}.  } {0 {}}.  
1100: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
1110: 38 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  8 {.    execsql 
1120: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
1130: 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  M sqlite_temp_ma
1140: 73 74 65 72 7d 0a 20 20 7d 20 7b 74 31 7d 0a 7d  ster}.  } {t1}.}
1150: 0a 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  ..do_test auth-1
1160: 2e 31 39 2e 31 20 7b 0a 20 20 73 65 74 20 3a 3a  .19.1 {.  set ::
1170: 61 75 74 68 61 72 67 73 20 7b 7d 0a 20 20 70 72  authargs {}.  pr
1180: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
1190: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
11a0: 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f  4} {.    if {$co
11b0: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52 45 41  de=="SQLITE_CREA
11c0: 54 45 5f 54 45 4d 50 5f 54 41 42 4c 45 22 7d 20  TE_TEMP_TABLE"} 
11d0: 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75  {.      set ::au
11e0: 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72  thargs [list $ar
11f0: 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24  g1 $arg2 $arg3 $
1200: 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75  arg4].      retu
1210: 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20  rn SQLITE_DENY. 
1220: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
1230: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
1240: 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45  catchsql {CREATE
1250: 20 54 41 42 4c 45 20 74 32 28 61 2c 62 2c 63 29   TABLE t2(a,b,c)
1260: 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  }.} {0 {}}.do_te
1270: 73 74 20 61 75 74 68 2d 31 2e 31 39 2e 32 20 7b  st auth-1.19.2 {
1280: 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67  .  set ::autharg
1290: 73 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 61  s.} {}.do_test a
12a0: 75 74 68 2d 31 2e 32 30 20 7b 0a 20 20 65 78 65  uth-1.20 {.  exe
12b0: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d  csql {SELECT nam
12c0: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  e FROM sqlite_ma
12d0: 73 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a 0a 64 6f  ster}.} {t2}..do
12e0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 31 2e  _test auth-1.21.
12f0: 31 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  1 {.  proc auth 
1300: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
1310: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
1320: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
1330: 49 54 45 5f 44 52 4f 50 5f 54 41 42 4c 45 22 7d  ITE_DROP_TABLE"}
1340: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61   {.      set ::a
1350: 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61  uthargs [list $a
1360: 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20  rg1 $arg2 $arg3 
1370: 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74  $arg4].      ret
1380: 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a  urn SQLITE_DENY.
1390: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
13a0: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
13b0: 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20   catchsql {DROP 
13c0: 54 41 42 4c 45 20 74 32 7d 0a 7d 20 7b 31 20 7b  TABLE t2}.} {1 {
13d0: 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d  not authorized}}
13e0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
13f0: 32 31 2e 32 20 7b 0a 20 20 73 65 74 20 3a 3a 61  21.2 {.  set ::a
1400: 75 74 68 61 72 67 73 0a 7d 20 7b 74 32 20 7b 7d  uthargs.} {t2 {}
1410: 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73   main {}}.do_tes
1420: 74 20 61 75 74 68 2d 31 2e 32 32 20 7b 0a 20 20  t auth-1.22 {.  
1430: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
1440: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
1450: 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a  _master}.} {t2}.
1460: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
1470: 33 2e 31 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  3.1 {.  proc aut
1480: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
1490: 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20  2 arg3 arg4} {. 
14a0: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
14b0: 51 4c 49 54 45 5f 44 52 4f 50 5f 54 41 42 4c 45  QLITE_DROP_TABLE
14c0: 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a  "} {.      set :
14d0: 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20  :authargs [list 
14e0: 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67  $arg1 $arg2 $arg
14f0: 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72  3 $arg4].      r
1500: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e  eturn SQLITE_IGN
1510: 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  ORE.    }.    re
1520: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
1530: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44   }.  catchsql {D
1540: 52 4f 50 20 54 41 42 4c 45 20 74 32 7d 0a 7d 20  ROP TABLE t2}.} 
1550: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  {0 {}}.do_test a
1560: 75 74 68 2d 31 2e 32 33 2e 32 20 7b 0a 20 20 73  uth-1.23.2 {.  s
1570: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20  et ::authargs.} 
1580: 7b 74 32 20 7b 7d 20 6d 61 69 6e 20 7b 7d 7d 0a  {t2 {} main {}}.
1590: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
15a0: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  4 {.  execsql {S
15b0: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
15c0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d  sqlite_master}.}
15d0: 20 7b 74 32 7d 0a 0a 69 66 63 61 70 61 62 6c 65   {t2}..ifcapable
15e0: 20 74 65 6d 70 64 62 20 7b 0a 20 20 64 6f 5f 74   tempdb {.  do_t
15f0: 65 73 74 20 61 75 74 68 2d 31 2e 32 35 20 7b 0a  est auth-1.25 {.
1600: 20 20 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63      proc auth {c
1610: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
1620: 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 20  g3 arg4} {.     
1630: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
1640: 49 54 45 5f 44 52 4f 50 5f 54 45 4d 50 5f 54 41  ITE_DROP_TEMP_TA
1650: 42 4c 45 22 7d 20 7b 0a 20 20 20 20 20 20 20 20  BLE"} {.        
1660: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b  set ::authargs [
1670: 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67 32  list $arg1 $arg2
1680: 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20   $arg3 $arg4].  
1690: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
16a0: 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 20 20 7d  ITE_DENY.      }
16b0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
16c0: 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20  LITE_OK.    }.  
16d0: 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50    catchsql {DROP
16e0: 20 54 41 42 4c 45 20 74 31 7d 0a 20 20 7d 20 7b   TABLE t1}.  } {
16f0: 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65  1 {not authorize
1700: 64 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75  d}}.  do_test au
1710: 74 68 2d 31 2e 32 36 20 7b 0a 20 20 20 20 65 78  th-1.26 {.    ex
1720: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61  ecsql {SELECT na
1730: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74  me FROM sqlite_t
1740: 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 20 20 7d 20  emp_master}.  } 
1750: 7b 74 31 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61  {t1}.  do_test a
1760: 75 74 68 2d 31 2e 32 37 20 7b 0a 20 20 20 20 70  uth-1.27 {.    p
1770: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
1780: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
1790: 67 34 7d 20 7b 0a 20 20 20 20 20 20 69 66 20 7b  g4} {.      if {
17a0: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44  $code=="SQLITE_D
17b0: 52 4f 50 5f 54 45 4d 50 5f 54 41 42 4c 45 22 7d  ROP_TEMP_TABLE"}
17c0: 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 3a   {.        set :
17d0: 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20  :authargs [list 
17e0: 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67  $arg1 $arg2 $arg
17f0: 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 20  3 $arg4].       
1800: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49   return SQLITE_I
1810: 47 4e 4f 52 45 0a 20 20 20 20 20 20 7d 0a 20 20  GNORE.      }.  
1820: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
1830: 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63  E_OK.    }.    c
1840: 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54 41  atchsql {DROP TA
1850: 42 4c 45 20 74 31 7d 0a 20 20 7d 20 7b 30 20 7b  BLE t1}.  } {0 {
1860: 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74  }}.  do_test aut
1870: 68 2d 31 2e 32 38 20 7b 0a 20 20 20 20 65 78 65  h-1.28 {.    exe
1880: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d  csql {SELECT nam
1890: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65  e FROM sqlite_te
18a0: 6d 70 5f 6d 61 73 74 65 72 7d 0a 20 20 7d 20 7b  mp_master}.  } {
18b0: 74 31 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20 61  t1}.}..do_test a
18c0: 75 74 68 2d 31 2e 32 39 20 7b 0a 20 20 70 72 6f  uth-1.29 {.  pro
18d0: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
18e0: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
18f0: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
1900: 65 3d 3d 22 53 51 4c 49 54 45 5f 49 4e 53 45 52  e=="SQLITE_INSER
1910: 54 22 20 26 26 20 24 61 72 67 31 3d 3d 22 74 32  T" && $arg1=="t2
1920: 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72  "} {.      retur
1930: 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20  n SQLITE_DENY.  
1940: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
1950: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
1960: 61 74 63 68 73 71 6c 20 7b 49 4e 53 45 52 54 20  atchsql {INSERT 
1970: 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 31  INTO t2 VALUES(1
1980: 2c 32 2c 33 29 7d 0a 7d 20 7b 31 20 7b 6e 6f 74  ,2,3)}.} {1 {not
1990: 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f   authorized}}.do
19a0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 33 30 20  _test auth-1.30 
19b0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
19c0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d 0a 7d  ECT * FROM t2}.}
19d0: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68   {}.do_test auth
19e0: 2d 31 2e 33 31 20 7b 0a 20 20 70 72 6f 63 20 61  -1.31 {.  proc a
19f0: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
1a00: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
1a10: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
1a20: 22 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 22 20  "SQLITE_INSERT" 
1a30: 26 26 20 24 61 72 67 31 3d 3d 22 74 32 22 7d 20  && $arg1=="t2"} 
1a40: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  {.      return S
1a50: 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20  QLITE_IGNORE.   
1a60: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
1a70: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
1a80: 74 63 68 73 71 6c 20 7b 49 4e 53 45 52 54 20 49  tchsql {INSERT I
1a90: 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 31 2c  NTO t2 VALUES(1,
1aa0: 32 2c 33 29 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  2,3)}.} {0 {}}.d
1ab0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 33 32  o_test auth-1.32
1ac0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
1ad0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d 0a  LECT * FROM t2}.
1ae0: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  } {}.do_test aut
1af0: 68 2d 31 2e 33 33 20 7b 0a 20 20 70 72 6f 63 20  h-1.33 {.  proc 
1b00: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
1b10: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
1b20: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
1b30: 3d 22 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 22  ="SQLITE_INSERT"
1b40: 20 26 26 20 24 61 72 67 31 3d 3d 22 74 31 22 7d   && $arg1=="t1"}
1b50: 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   {.      return 
1b60: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20  SQLITE_IGNORE.  
1b70: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
1b80: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
1b90: 61 74 63 68 73 71 6c 20 7b 49 4e 53 45 52 54 20  atchsql {INSERT 
1ba0: 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 31  INTO t2 VALUES(1
1bb0: 2c 32 2c 33 29 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a  ,2,3)}.} {0 {}}.
1bc0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 33  do_test auth-1.3
1bd0: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  4 {.  execsql {S
1be0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d  ELECT * FROM t2}
1bf0: 0a 7d 20 7b 31 20 32 20 33 7d 0a 0a 64 6f 5f 74  .} {1 2 3}..do_t
1c00: 65 73 74 20 61 75 74 68 2d 31 2e 33 35 2e 31 20  est auth-1.35.1 
1c10: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
1c20: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
1c30: 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69  g3 arg4} {.    i
1c40: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
1c50: 45 5f 52 45 41 44 22 20 26 26 20 24 61 72 67 31  E_READ" && $arg1
1c60: 3d 3d 22 74 32 22 20 26 26 20 24 61 72 67 32 3d  =="t2" && $arg2=
1c70: 3d 22 62 22 7d 20 7b 0a 20 20 20 20 20 20 72 65  ="b"} {.      re
1c80: 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59  turn SQLITE_DENY
1c90: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
1ca0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
1cb0: 20 20 63 61 74 63 68 73 71 6c 20 7b 53 45 4c 45    catchsql {SELE
1cc0: 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d 0a 7d 20  CT * FROM t2}.} 
1cd0: 7b 31 20 7b 61 63 63 65 73 73 20 74 6f 20 74 32  {1 {access to t2
1ce0: 2e 62 20 69 73 20 70 72 6f 68 69 62 69 74 65 64  .b is prohibited
1cf0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
1d00: 31 2e 33 35 2e 32 20 7b 0a 20 20 65 78 65 63 73  1.35.2 {.  execs
1d10: 71 6c 20 7b 41 54 54 41 43 48 20 44 41 54 41 42  ql {ATTACH DATAB
1d20: 41 53 45 20 27 74 65 73 74 2e 64 62 27 20 41 53  ASE 'test.db' AS
1d30: 20 74 77 6f 7d 0a 20 20 63 61 74 63 68 73 71 6c   two}.  catchsql
1d40: 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   {SELECT * FROM 
1d50: 74 77 6f 2e 74 32 7d 0a 7d 20 7b 31 20 7b 61 63  two.t2}.} {1 {ac
1d60: 63 65 73 73 20 74 6f 20 74 77 6f 2e 74 32 2e 62  cess to two.t2.b
1d70: 20 69 73 20 70 72 6f 68 69 62 69 74 65 64 7d 7d   is prohibited}}
1d80: 0a 65 78 65 63 73 71 6c 20 7b 44 45 54 41 43 48  .execsql {DETACH
1d90: 20 44 41 54 41 42 41 53 45 20 74 77 6f 7d 0a 64   DATABASE two}.d
1da0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 33 36  o_test auth-1.36
1db0: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
1dc0: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
1dd0: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
1de0: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
1df0: 54 45 5f 52 45 41 44 22 20 26 26 20 24 61 72 67  TE_READ" && $arg
1e00: 31 3d 3d 22 74 32 22 20 26 26 20 24 61 72 67 32  1=="t2" && $arg2
1e10: 3d 3d 22 62 22 7d 20 7b 0a 20 20 20 20 20 20 72  =="b"} {.      r
1e20: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e  eturn SQLITE_IGN
1e30: 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  ORE.    }.    re
1e40: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
1e50: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 53   }.  catchsql {S
1e60: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d  ELECT * FROM t2}
1e70: 0a 7d 20 7b 30 20 7b 31 20 7b 7d 20 33 7d 7d 0a  .} {0 {1 {} 3}}.
1e80: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 33  do_test auth-1.3
1e90: 37 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  7 {.  proc auth 
1ea0: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
1eb0: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
1ec0: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
1ed0: 49 54 45 5f 52 45 41 44 22 20 26 26 20 24 61 72  ITE_READ" && $ar
1ee0: 67 31 3d 3d 22 74 32 22 20 26 26 20 24 61 72 67  g1=="t2" && $arg
1ef0: 32 3d 3d 22 62 22 7d 20 7b 0a 20 20 20 20 20 20  2=="b"} {.      
1f00: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47  return SQLITE_IG
1f10: 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72  NORE.    }.    r
1f20: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
1f30: 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b    }.  catchsql {
1f40: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32  SELECT * FROM t2
1f50: 20 57 48 45 52 45 20 62 3d 32 7d 0a 7d 20 7b 30   WHERE b=2}.} {0
1f60: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
1f70: 68 2d 31 2e 33 38 20 7b 0a 20 20 70 72 6f 63 20  h-1.38 {.  proc 
1f80: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
1f90: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
1fa0: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
1fb0: 3d 22 53 51 4c 49 54 45 5f 52 45 41 44 22 20 26  ="SQLITE_READ" &
1fc0: 26 20 24 61 72 67 31 3d 3d 22 74 32 22 20 26 26  & $arg1=="t2" &&
1fd0: 20 24 61 72 67 32 3d 3d 22 61 22 7d 20 7b 0a 20   $arg2=="a"} {. 
1fe0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
1ff0: 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a  TE_IGNORE.    }.
2000: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
2010: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
2020: 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52  sql {SELECT * FR
2030: 4f 4d 20 74 32 20 57 48 45 52 45 20 62 3d 32 7d  OM t2 WHERE b=2}
2040: 0a 7d 20 7b 30 20 7b 7b 7d 20 32 20 33 7d 7d 0a  .} {0 {{} 2 3}}.
2050: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 33  do_test auth-1.3
2060: 39 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  9 {.  proc auth 
2070: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
2080: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
2090: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
20a0: 49 54 45 5f 52 45 41 44 22 20 26 26 20 24 61 72  ITE_READ" && $ar
20b0: 67 31 3d 3d 22 74 32 22 20 26 26 20 24 61 72 67  g1=="t2" && $arg
20c0: 32 3d 3d 22 62 22 7d 20 7b 0a 20 20 20 20 20 20  2=="b"} {.      
20d0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47  return SQLITE_IG
20e0: 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72  NORE.    }.    r
20f0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
2100: 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b    }.  catchsql {
2110: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32  SELECT * FROM t2
2120: 20 57 48 45 52 45 20 62 20 49 53 20 4e 55 4c 4c   WHERE b IS NULL
2130: 7d 0a 7d 20 7b 30 20 7b 31 20 7b 7d 20 33 7d 7d  }.} {0 {1 {} 3}}
2140: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
2150: 34 30 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  40 {.  proc auth
2160: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
2170: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
2180: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
2190: 4c 49 54 45 5f 52 45 41 44 22 20 26 26 20 24 61  LITE_READ" && $a
21a0: 72 67 31 3d 3d 22 74 32 22 20 26 26 20 24 61 72  rg1=="t2" && $ar
21b0: 67 32 3d 3d 22 62 22 7d 20 7b 0a 20 20 20 20 20  g2=="b"} {.     
21c0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44   return SQLITE_D
21d0: 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  ENY.    }.    re
21e0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
21f0: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 53   }.  catchsql {S
2200: 45 4c 45 43 54 20 61 2c 63 20 46 52 4f 4d 20 74  ELECT a,c FROM t
2210: 32 20 57 48 45 52 45 20 62 20 49 53 20 4e 55 4c  2 WHERE b IS NUL
2220: 4c 7d 0a 7d 20 7b 31 20 7b 61 63 63 65 73 73 20  L}.} {1 {access 
2230: 74 6f 20 74 32 2e 62 20 69 73 20 70 72 6f 68 69  to t2.b is prohi
2240: 62 69 74 65 64 7d 7d 0a 20 20 0a 64 6f 5f 74 65  bited}}.  .do_te
2250: 73 74 20 61 75 74 68 2d 31 2e 34 31 20 7b 0a 20  st auth-1.41 {. 
2260: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
2270: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
2280: 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg4} {.    if {
2290: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 55  $code=="SQLITE_U
22a0: 50 44 41 54 45 22 20 26 26 20 24 61 72 67 31 3d  PDATE" && $arg1=
22b0: 3d 22 74 32 22 20 26 26 20 24 61 72 67 32 3d 3d  ="t2" && $arg2==
22c0: 22 62 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74  "b"} {.      ret
22d0: 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a  urn SQLITE_DENY.
22e0: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
22f0: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
2300: 20 63 61 74 63 68 73 71 6c 20 7b 55 50 44 41 54   catchsql {UPDAT
2310: 45 20 74 32 20 53 45 54 20 61 3d 31 31 7d 0a 7d  E t2 SET a=11}.}
2320: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
2330: 61 75 74 68 2d 31 2e 34 32 20 7b 0a 20 20 65 78  auth-1.42 {.  ex
2340: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20  ecsql {SELECT * 
2350: 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31 31 20 32  FROM t2}.} {11 2
2360: 20 33 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68   3}.do_test auth
2370: 2d 31 2e 34 33 20 7b 0a 20 20 70 72 6f 63 20 61  -1.43 {.  proc a
2380: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
2390: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
23a0: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
23b0: 22 53 51 4c 49 54 45 5f 55 50 44 41 54 45 22 20  "SQLITE_UPDATE" 
23c0: 26 26 20 24 61 72 67 31 3d 3d 22 74 32 22 20 26  && $arg1=="t2" &
23d0: 26 20 24 61 72 67 32 3d 3d 22 62 22 7d 20 7b 0a  & $arg2=="b"} {.
23e0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
23f0: 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20  ITE_DENY.    }. 
2400: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
2410: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
2420: 71 6c 20 7b 55 50 44 41 54 45 20 74 32 20 53 45  ql {UPDATE t2 SE
2430: 54 20 62 3d 32 32 2c 20 63 3d 33 33 7d 0a 7d 20  T b=22, c=33}.} 
2440: 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a  {1 {not authoriz
2450: 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  ed}}.do_test aut
2460: 68 2d 31 2e 34 34 20 7b 0a 20 20 65 78 65 63 73  h-1.44 {.  execs
2470: 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f  ql {SELECT * FRO
2480: 4d 20 74 32 7d 0a 7d 20 7b 31 31 20 32 20 33 7d  M t2}.} {11 2 3}
2490: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
24a0: 34 35 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  45 {.  proc auth
24b0: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
24c0: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
24d0: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
24e0: 4c 49 54 45 5f 55 50 44 41 54 45 22 20 26 26 20  LITE_UPDATE" && 
24f0: 24 61 72 67 31 3d 3d 22 74 32 22 20 26 26 20 24  $arg1=="t2" && $
2500: 61 72 67 32 3d 3d 22 62 22 7d 20 7b 0a 20 20 20  arg2=="b"} {.   
2510: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
2520: 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20  _IGNORE.    }.  
2530: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
2540: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
2550: 6c 20 7b 55 50 44 41 54 45 20 74 32 20 53 45 54  l {UPDATE t2 SET
2560: 20 62 3d 32 32 2c 20 63 3d 33 33 7d 0a 7d 20 7b   b=22, c=33}.} {
2570: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  0 {}}.do_test au
2580: 74 68 2d 31 2e 34 36 20 7b 0a 20 20 65 78 65 63  th-1.46 {.  exec
2590: 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52  sql {SELECT * FR
25a0: 4f 4d 20 74 32 7d 0a 7d 20 7b 31 31 20 32 20 33  OM t2}.} {11 2 3
25b0: 33 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  3}..do_test auth
25c0: 2d 31 2e 34 37 20 7b 0a 20 20 70 72 6f 63 20 61  -1.47 {.  proc a
25d0: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
25e0: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
25f0: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
2600: 22 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 22 20  "SQLITE_DELETE" 
2610: 26 26 20 24 61 72 67 31 3d 3d 22 74 32 22 7d 20  && $arg1=="t2"} 
2620: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  {.      return S
2630: 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d  QLITE_DENY.    }
2640: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
2650: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
2660: 68 73 71 6c 20 7b 44 45 4c 45 54 45 20 46 52 4f  hsql {DELETE FRO
2670: 4d 20 74 32 20 57 48 45 52 45 20 61 3d 31 31 7d  M t2 WHERE a=11}
2680: 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f  .} {1 {not autho
2690: 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20  rized}}.do_test 
26a0: 61 75 74 68 2d 31 2e 34 38 20 7b 0a 20 20 65 78  auth-1.48 {.  ex
26b0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20  ecsql {SELECT * 
26c0: 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31 31 20 32  FROM t2}.} {11 2
26d0: 20 33 33 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   33}.do_test aut
26e0: 68 2d 31 2e 34 39 20 7b 0a 20 20 70 72 6f 63 20  h-1.49 {.  proc 
26f0: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
2700: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
2710: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
2720: 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 22  ="SQLITE_DELETE"
2730: 20 26 26 20 24 61 72 67 31 3d 3d 22 74 32 22 7d   && $arg1=="t2"}
2740: 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   {.      return 
2750: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20  SQLITE_IGNORE.  
2760: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
2770: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
2780: 61 74 63 68 73 71 6c 20 7b 44 45 4c 45 54 45 20  atchsql {DELETE 
2790: 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20 61 3d  FROM t2 WHERE a=
27a0: 31 31 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f  11}.} {0 {}}.do_
27b0: 74 65 73 74 20 61 75 74 68 2d 31 2e 35 30 20 7b  test auth-1.50 {
27c0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
27d0: 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d 0a 7d 20  CT * FROM t2}.} 
27e0: 7b 31 31 20 32 20 33 33 7d 0a 0a 64 6f 5f 74 65  {11 2 33}..do_te
27f0: 73 74 20 61 75 74 68 2d 31 2e 35 31 20 7b 0a 20  st auth-1.51 {. 
2800: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
2810: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
2820: 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg4} {.    if {
2830: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 53  $code=="SQLITE_S
2840: 45 4c 45 43 54 22 7d 20 7b 0a 20 20 20 20 20 20  ELECT"} {.      
2850: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45  return SQLITE_DE
2860: 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  NY.    }.    ret
2870: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
2880: 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 53 45  }.  catchsql {SE
2890: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d 0a  LECT * FROM t2}.
28a0: 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72  } {1 {not author
28b0: 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  ized}}.do_test a
28c0: 75 74 68 2d 31 2e 35 32 20 7b 0a 20 20 70 72 6f  uth-1.52 {.  pro
28d0: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
28e0: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
28f0: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
2900: 65 3d 3d 22 53 51 4c 49 54 45 5f 53 45 4c 45 43  e=="SQLITE_SELEC
2910: 54 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75  T"} {.      retu
2920: 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45  rn SQLITE_IGNORE
2930: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
2940: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
2950: 20 20 63 61 74 63 68 73 71 6c 20 7b 53 45 4c 45    catchsql {SELE
2960: 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d 0a 7d 20  CT * FROM t2}.} 
2970: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  {0 {}}.do_test a
2980: 75 74 68 2d 31 2e 35 33 20 7b 0a 20 20 70 72 6f  uth-1.53 {.  pro
2990: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
29a0: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
29b0: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
29c0: 65 3d 3d 22 53 51 4c 49 54 45 5f 53 45 4c 45 43  e=="SQLITE_SELEC
29d0: 54 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75  T"} {.      retu
29e0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20  rn SQLITE_OK.   
29f0: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
2a00: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
2a10: 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a  tchsql {SELECT *
2a20: 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 30 20 7b   FROM t2}.} {0 {
2a30: 31 31 20 32 20 33 33 7d 7d 0a 0a 23 20 55 70 64  11 2 33}}..# Upd
2a40: 61 74 65 20 66 6f 72 20 76 65 72 73 69 6f 6e 20  ate for version 
2a50: 33 3a 20 54 68 65 72 65 20 75 73 65 64 20 74 6f  3: There used to
2a60: 20 62 65 20 61 20 68 61 6e 64 66 75 6c 20 6f 66   be a handful of
2a70: 20 74 65 73 74 20 68 65 72 65 20 74 68 61 74 0a   test here that.
2a80: 23 20 74 65 73 74 65 64 20 74 68 65 20 61 75 74  # tested the aut
2a90: 68 6f 72 69 73 61 74 69 6f 6e 20 63 61 6c 6c 62  horisation callb
2aa0: 61 63 6b 20 77 69 74 68 20 74 68 65 20 43 4f 50  ack with the COP
2ab0: 59 20 63 6f 6d 6d 61 6e 64 2e 20 54 68 65 20 66  Y command. The f
2ac0: 6f 6c 6c 6f 77 69 6e 67 0a 23 20 74 65 73 74 20  ollowing.# test 
2ad0: 6d 61 6b 65 73 20 74 68 65 20 73 61 6d 65 20 64  makes the same d
2ae0: 61 74 61 62 61 73 65 20 6d 6f 64 69 66 69 63 61  atabase modifica
2af0: 74 69 6f 6e 73 20 61 73 20 74 68 65 79 20 75 73  tions as they us
2b00: 65 64 20 74 6f 2e 0a 64 6f 5f 74 65 73 74 20 61  ed to..do_test a
2b10: 75 74 68 2d 31 2e 35 34 20 7b 0a 20 20 65 78 65  uth-1.54 {.  exe
2b20: 63 73 71 6c 20 7b 49 4e 53 45 52 54 20 49 4e 54  csql {INSERT INT
2b30: 4f 20 74 32 20 56 41 4c 55 45 53 28 37 2c 20 38  O t2 VALUES(7, 8
2b40: 2c 20 39 29 3b 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74  , 9);}.} {}.do_t
2b50: 65 73 74 20 61 75 74 68 2d 31 2e 35 35 20 7b 0a  est auth-1.55 {.
2b60: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
2b70: 54 20 2a 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b  T * FROM t2}.} {
2b80: 31 31 20 32 20 33 33 20 37 20 38 20 39 7d 0a 0a  11 2 33 7 8 9}..
2b90: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 36  do_test auth-1.6
2ba0: 33 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  3 {.  proc auth 
2bb0: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
2bc0: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
2bd0: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
2be0: 49 54 45 5f 44 45 4c 45 54 45 22 20 26 26 20 24  ITE_DELETE" && $
2bf0: 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 6d 61  arg1=="sqlite_ma
2c00: 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 20  ster"} {.       
2c10: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45  return SQLITE_DE
2c20: 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  NY.    }.    ret
2c30: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
2c40: 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52  }.  catchsql {DR
2c50: 4f 50 20 54 41 42 4c 45 20 74 32 7d 0a 7d 20 7b  OP TABLE t2}.} {
2c60: 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65  1 {not authorize
2c70: 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  d}}.do_test auth
2c80: 2d 31 2e 36 34 20 7b 0a 20 20 65 78 65 63 73 71  -1.64 {.  execsq
2c90: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
2ca0: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
2cb0: 72 7d 0a 7d 20 7b 74 32 7d 0a 64 6f 5f 74 65 73  r}.} {t2}.do_tes
2cc0: 74 20 61 75 74 68 2d 31 2e 36 35 20 7b 0a 20 20  t auth-1.65 {.  
2cd0: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
2ce0: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
2cf0: 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg4} {.    if {$
2d00: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45  code=="SQLITE_DE
2d10: 4c 45 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d  LETE" && $arg1==
2d20: 22 74 32 22 7d 20 7b 0a 20 20 20 20 20 20 20 72  "t2"} {.       r
2d30: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e  eturn SQLITE_DEN
2d40: 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  Y.    }.    retu
2d50: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
2d60: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f  .  catchsql {DRO
2d70: 50 20 54 41 42 4c 45 20 74 32 7d 0a 7d 20 7b 31  P TABLE t2}.} {1
2d80: 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64   {not authorized
2d90: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
2da0: 31 2e 36 36 20 7b 0a 20 20 65 78 65 63 73 71 6c  1.66 {.  execsql
2db0: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
2dc0: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
2dd0: 7d 0a 7d 20 7b 74 32 7d 0a 0a 69 66 63 61 70 61  }.} {t2}..ifcapa
2de0: 62 6c 65 20 74 65 6d 70 64 62 20 7b 0a 20 20 64  ble tempdb {.  d
2df0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 36 37  o_test auth-1.67
2e00: 20 7b 0a 20 20 20 20 70 72 6f 63 20 61 75 74 68   {.    proc auth
2e10: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
2e20: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
2e30: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
2e40: 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 22 20 26  SQLITE_DELETE" &
2e50: 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65  & $arg1=="sqlite
2e60: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 7d 20 7b  _temp_master"} {
2e70: 0a 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  .         return
2e80: 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20   SQLITE_DENY.   
2e90: 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72     }.      retur
2ea0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20  n SQLITE_OK.    
2eb0: 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b  }.    catchsql {
2ec0: 44 52 4f 50 20 54 41 42 4c 45 20 74 31 7d 0a 20  DROP TABLE t1}. 
2ed0: 20 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f   } {1 {not autho
2ee0: 72 69 7a 65 64 7d 7d 0a 20 20 64 6f 5f 74 65 73  rized}}.  do_tes
2ef0: 74 20 61 75 74 68 2d 31 2e 36 38 20 7b 0a 20 20  t auth-1.68 {.  
2f00: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
2f10: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
2f20: 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a  te_temp_master}.
2f30: 20 20 7d 20 7b 74 31 7d 0a 20 20 64 6f 5f 74 65    } {t1}.  do_te
2f40: 73 74 20 61 75 74 68 2d 31 2e 36 39 20 7b 0a 20  st auth-1.69 {. 
2f50: 20 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f     proc auth {co
2f60: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
2f70: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 20 20  3 arg4} {.      
2f80: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
2f90: 54 45 5f 44 45 4c 45 54 45 22 20 26 26 20 24 61  TE_DELETE" && $a
2fa0: 72 67 31 3d 3d 22 74 31 22 7d 20 7b 0a 20 20 20  rg1=="t1"} {.   
2fb0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
2fc0: 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 20 20 7d  ITE_DENY.      }
2fd0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
2fe0: 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20  LITE_OK.    }.  
2ff0: 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50    catchsql {DROP
3000: 20 54 41 42 4c 45 20 74 31 7d 0a 20 20 7d 20 7b   TABLE t1}.  } {
3010: 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65  1 {not authorize
3020: 64 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75  d}}.  do_test au
3030: 74 68 2d 31 2e 37 30 20 7b 0a 20 20 20 20 65 78  th-1.70 {.    ex
3040: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61  ecsql {SELECT na
3050: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74  me FROM sqlite_t
3060: 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 20 20 7d 20  emp_master}.  } 
3070: 7b 74 31 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20  {t1}.}..do_test 
3080: 61 75 74 68 2d 31 2e 37 31 20 7b 0a 20 20 70 72  auth-1.71 {.  pr
3090: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
30a0: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
30b0: 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f  4} {.    if {$co
30c0: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45  de=="SQLITE_DELE
30d0: 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73  TE" && $arg1=="s
30e0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 7d 20 7b  qlite_master"} {
30f0: 0a 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  .       return S
3100: 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20  QLITE_IGNORE.   
3110: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
3120: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
3130: 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54 41 42  tchsql {DROP TAB
3140: 4c 45 20 74 32 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a  LE t2}.} {0 {}}.
3150: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 37  do_test auth-1.7
3160: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  2 {.  execsql {S
3170: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
3180: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d  sqlite_master}.}
3190: 20 7b 74 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75   {t2}.do_test au
31a0: 74 68 2d 31 2e 37 33 20 7b 0a 20 20 70 72 6f 63  th-1.73 {.  proc
31b0: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
31c0: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
31d0: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
31e0: 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45 54 45  =="SQLITE_DELETE
31f0: 22 20 26 26 20 24 61 72 67 31 3d 3d 22 74 32 22  " && $arg1=="t2"
3200: 7d 20 7b 0a 20 20 20 20 20 20 20 72 65 74 75 72  } {.       retur
3210: 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a  n SQLITE_IGNORE.
3220: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
3230: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
3240: 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20   catchsql {DROP 
3250: 54 41 42 4c 45 20 74 32 7d 0a 7d 20 7b 30 20 7b  TABLE t2}.} {0 {
3260: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
3270: 31 2e 37 34 20 7b 0a 20 20 65 78 65 63 73 71 6c  1.74 {.  execsql
3280: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
3290: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
32a0: 7d 0a 7d 20 7b 74 32 7d 0a 0a 69 66 63 61 70 61  }.} {t2}..ifcapa
32b0: 62 6c 65 20 74 65 6d 70 64 62 20 7b 0a 20 20 64  ble tempdb {.  d
32c0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 37 35  o_test auth-1.75
32d0: 20 7b 0a 20 20 20 20 70 72 6f 63 20 61 75 74 68   {.    proc auth
32e0: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
32f0: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
3300: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
3310: 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 22 20 26  SQLITE_DELETE" &
3320: 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65  & $arg1=="sqlite
3330: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 7d 20 7b  _temp_master"} {
3340: 0a 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  .         return
3350: 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20   SQLITE_IGNORE. 
3360: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74       }.      ret
3370: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
3380: 20 20 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c    }.    catchsql
3390: 20 7b 44 52 4f 50 20 54 41 42 4c 45 20 74 31 7d   {DROP TABLE t1}
33a0: 0a 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20 20 64 6f  .  } {0 {}}.  do
33b0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 37 36 20  _test auth-1.76 
33c0: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53  {.    execsql {S
33d0: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
33e0: 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
33f0: 65 72 7d 0a 20 20 7d 20 7b 74 31 7d 0a 20 20 64  er}.  } {t1}.  d
3400: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 37 37  o_test auth-1.77
3410: 20 7b 0a 20 20 20 20 70 72 6f 63 20 61 75 74 68   {.    proc auth
3420: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
3430: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
3440: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
3450: 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 22 20 26  SQLITE_DELETE" &
3460: 26 20 24 61 72 67 31 3d 3d 22 74 31 22 7d 20 7b  & $arg1=="t1"} {
3470: 0a 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  .         return
3480: 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20   SQLITE_IGNORE. 
3490: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74       }.      ret
34a0: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
34b0: 20 20 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c    }.    catchsql
34c0: 20 7b 44 52 4f 50 20 54 41 42 4c 45 20 74 31 7d   {DROP TABLE t1}
34d0: 0a 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20 20 64 6f  .  } {0 {}}.  do
34e0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 37 38 20  _test auth-1.78 
34f0: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53  {.    execsql {S
3500: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
3510: 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
3520: 65 72 7d 0a 20 20 7d 20 7b 74 31 7d 0a 7d 0a 0a  er}.  } {t1}.}..
3530: 23 20 54 65 73 74 20 63 61 73 65 73 20 61 75 74  # Test cases aut
3540: 68 2d 31 2e 37 39 20 74 6f 20 61 75 74 68 2d 31  h-1.79 to auth-1
3550: 2e 31 32 34 20 74 65 73 74 20 63 72 65 61 74 69  .124 test creati
3560: 6e 67 20 61 6e 64 20 64 72 6f 70 70 69 6e 67 20  ng and dropping 
3570: 76 69 65 77 73 2e 0a 23 20 4f 6d 69 74 20 74 68  views..# Omit th
3580: 65 73 65 20 69 66 20 74 68 65 20 6c 69 62 72 61  ese if the libra
3590: 72 79 20 77 61 73 20 63 6f 6d 70 69 6c 65 64 20  ry was compiled 
35a0: 77 69 74 68 20 76 69 65 77 73 20 6f 6d 69 74 74  with views omitt
35b0: 65 64 2e 0a 69 66 63 61 70 61 62 6c 65 20 76 69  ed..ifcapable vi
35c0: 65 77 20 7b 0a 64 6f 5f 74 65 73 74 20 61 75 74  ew {.do_test aut
35d0: 68 2d 31 2e 37 39 20 7b 0a 20 20 70 72 6f 63 20  h-1.79 {.  proc 
35e0: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
35f0: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
3600: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
3610: 3d 22 53 51 4c 49 54 45 5f 43 52 45 41 54 45 5f  ="SQLITE_CREATE_
3620: 56 49 45 57 22 7d 20 7b 0a 20 20 20 20 20 20 73  VIEW"} {.      s
3630: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c  et ::authargs [l
3640: 69 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20  ist $arg1 $arg2 
3650: 24 61 72 67 33 20 24 61 72 67 34 5d 20 0a 20 20  $arg3 $arg4] .  
3660: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
3670: 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20  E_DENY.    }.   
3680: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
3690: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
36a0: 20 7b 43 52 45 41 54 45 20 56 49 45 57 20 76 31   {CREATE VIEW v1
36b0: 20 41 53 20 53 45 4c 45 43 54 20 61 2b 31 2c 62   AS SELECT a+1,b
36c0: 2b 31 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31  +1 FROM t2}.} {1
36d0: 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64   {not authorized
36e0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
36f0: 31 2e 38 30 20 7b 0a 20 20 73 65 74 20 3a 3a 61  1.80 {.  set ::a
3700: 75 74 68 61 72 67 73 0a 7d 20 7b 76 31 20 7b 7d  uthargs.} {v1 {}
3710: 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73   main {}}.do_tes
3720: 74 20 61 75 74 68 2d 31 2e 38 31 20 7b 0a 20 20  t auth-1.81 {.  
3730: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
3740: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
3750: 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a  _master}.} {t2}.
3760: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 38  do_test auth-1.8
3770: 32 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  2 {.  proc auth 
3780: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
3790: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
37a0: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
37b0: 49 54 45 5f 43 52 45 41 54 45 5f 56 49 45 57 22  ITE_CREATE_VIEW"
37c0: 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a  } {.      set ::
37d0: 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24  authargs [list $
37e0: 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33  arg1 $arg2 $arg3
37f0: 20 24 61 72 67 34 5d 20 0a 20 20 20 20 20 20 72   $arg4] .      r
3800: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e  eturn SQLITE_IGN
3810: 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  ORE.    }.    re
3820: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
3830: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 43   }.  catchsql {C
3840: 52 45 41 54 45 20 56 49 45 57 20 76 31 20 41 53  REATE VIEW v1 AS
3850: 20 53 45 4c 45 43 54 20 61 2b 31 2c 62 2b 31 20   SELECT a+1,b+1 
3860: 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 30 20 7b 7d  FROM t2}.} {0 {}
3870: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
3880: 2e 38 33 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75  .83 {.  set ::au
3890: 74 68 61 72 67 73 0a 7d 20 7b 76 31 20 7b 7d 20  thargs.} {v1 {} 
38a0: 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  main {}}.do_test
38b0: 20 61 75 74 68 2d 31 2e 38 34 20 7b 0a 20 20 65   auth-1.84 {.  e
38c0: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
38d0: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
38e0: 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a 0a  master}.} {t2}..
38f0: 69 66 63 61 70 61 62 6c 65 20 74 65 6d 70 64 62  ifcapable tempdb
3900: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74   {.  do_test aut
3910: 68 2d 31 2e 38 35 20 7b 0a 20 20 20 20 70 72 6f  h-1.85 {.    pro
3920: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
3930: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
3940: 7d 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 63  } {.      if {$c
3950: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52 45  ode=="SQLITE_CRE
3960: 41 54 45 5f 54 45 4d 50 5f 56 49 45 57 22 7d 20  ATE_TEMP_VIEW"} 
3970: 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a  {.        set ::
3980: 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24  authargs [list $
3990: 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33  arg1 $arg2 $arg3
39a0: 20 24 61 72 67 34 5d 20 0a 20 20 20 20 20 20 20   $arg4] .       
39b0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44   return SQLITE_D
39c0: 45 4e 59 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ENY.      }.    
39d0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
39e0: 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 74  OK.    }.    cat
39f0: 63 68 73 71 6c 20 7b 43 52 45 41 54 45 20 54 45  chsql {CREATE TE
3a00: 4d 50 4f 52 41 52 59 20 56 49 45 57 20 76 31 20  MPORARY VIEW v1 
3a10: 41 53 20 53 45 4c 45 43 54 20 61 2b 31 2c 62 2b  AS SELECT a+1,b+
3a20: 31 20 46 52 4f 4d 20 74 32 7d 0a 20 20 7d 20 7b  1 FROM t2}.  } {
3a30: 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65  1 {not authorize
3a40: 64 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75  d}}.  do_test au
3a50: 74 68 2d 31 2e 38 36 20 7b 0a 20 20 20 20 73 65  th-1.86 {.    se
3a60: 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 20 20 7d  t ::authargs.  }
3a70: 20 7b 76 31 20 7b 7d 20 74 65 6d 70 20 7b 7d 7d   {v1 {} temp {}}
3a80: 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  .  do_test auth-
3a90: 31 2e 38 37 20 7b 0a 20 20 20 20 65 78 65 63 73  1.87 {.    execs
3aa0: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
3ab0: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70  FROM sqlite_temp
3ac0: 5f 6d 61 73 74 65 72 7d 0a 20 20 7d 20 7b 74 31  _master}.  } {t1
3ad0: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68  }.  do_test auth
3ae0: 2d 31 2e 38 38 20 7b 0a 20 20 20 20 70 72 6f 63  -1.88 {.    proc
3af0: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
3b00: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
3b10: 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f   {.      if {$co
3b20: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52 45 41  de=="SQLITE_CREA
3b30: 54 45 5f 54 45 4d 50 5f 56 49 45 57 22 7d 20 7b  TE_TEMP_VIEW"} {
3b40: 0a 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a 61  .        set ::a
3b50: 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61  uthargs [list $a
3b60: 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20  rg1 $arg2 $arg3 
3b70: 24 61 72 67 34 5d 20 0a 20 20 20 20 20 20 20 20  $arg4] .        
3b80: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47  return SQLITE_IG
3b90: 4e 4f 52 45 0a 20 20 20 20 20 20 7d 0a 20 20 20  NORE.      }.   
3ba0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
3bb0: 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61  _OK.    }.    ca
3bc0: 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45 20 54  tchsql {CREATE T
3bd0: 45 4d 50 4f 52 41 52 59 20 56 49 45 57 20 76 31  EMPORARY VIEW v1
3be0: 20 41 53 20 53 45 4c 45 43 54 20 61 2b 31 2c 62   AS SELECT a+1,b
3bf0: 2b 31 20 46 52 4f 4d 20 74 32 7d 0a 20 20 7d 20  +1 FROM t2}.  } 
3c00: 7b 30 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74  {0 {}}.  do_test
3c10: 20 61 75 74 68 2d 31 2e 38 39 20 7b 0a 20 20 20   auth-1.89 {.   
3c20: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a   set ::authargs.
3c30: 20 20 7d 20 7b 76 31 20 7b 7d 20 74 65 6d 70 20    } {v1 {} temp 
3c40: 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75  {}}.  do_test au
3c50: 74 68 2d 31 2e 39 30 20 7b 0a 20 20 20 20 65 78  th-1.90 {.    ex
3c60: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61  ecsql {SELECT na
3c70: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74  me FROM sqlite_t
3c80: 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 20 20 7d 20  emp_master}.  } 
3c90: 7b 74 31 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20  {t1}.}..do_test 
3ca0: 61 75 74 68 2d 31 2e 39 31 20 7b 0a 20 20 70 72  auth-1.91 {.  pr
3cb0: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
3cc0: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
3cd0: 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f  4} {.    if {$co
3ce0: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 49 4e 53 45  de=="SQLITE_INSE
3cf0: 52 54 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73  RT" && $arg1=="s
3d00: 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 7d 20 7b  qlite_master"} {
3d10: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
3d20: 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a  LITE_DENY.    }.
3d30: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
3d40: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
3d50: 73 71 6c 20 7b 43 52 45 41 54 45 20 56 49 45 57  sql {CREATE VIEW
3d60: 20 76 31 20 41 53 20 53 45 4c 45 43 54 20 61 2b   v1 AS SELECT a+
3d70: 31 2c 62 2b 31 20 46 52 4f 4d 20 74 32 7d 0a 7d  1,b+1 FROM t2}.}
3d80: 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69   {1 {not authori
3d90: 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  zed}}.do_test au
3da0: 74 68 2d 31 2e 39 32 20 7b 0a 20 20 65 78 65 63  th-1.92 {.  exec
3db0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
3dc0: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
3dd0: 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a 64 6f 5f 74  ter}.} {t2}.do_t
3de0: 65 73 74 20 61 75 74 68 2d 31 2e 39 33 20 7b 0a  est auth-1.93 {.
3df0: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
3e00: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
3e10: 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20   arg4} {.    if 
3e20: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
3e30: 49 4e 53 45 52 54 22 20 26 26 20 24 61 72 67 31  INSERT" && $arg1
3e40: 3d 3d 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  =="sqlite_master
3e50: 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72  "} {.      retur
3e60: 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a  n SQLITE_IGNORE.
3e70: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
3e80: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
3e90: 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54   catchsql {CREAT
3ea0: 45 20 56 49 45 57 20 76 31 20 41 53 20 53 45 4c  E VIEW v1 AS SEL
3eb0: 45 43 54 20 61 2b 31 2c 62 2b 31 20 46 52 4f 4d  ECT a+1,b+1 FROM
3ec0: 20 74 32 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f   t2}.} {0 {}}.do
3ed0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 39 34 20  _test auth-1.94 
3ee0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
3ef0: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
3f00: 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b  lite_master}.} {
3f10: 74 32 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20 74  t2}..ifcapable t
3f20: 65 6d 70 64 62 20 7b 0a 20 20 64 6f 5f 74 65 73  empdb {.  do_tes
3f30: 74 20 61 75 74 68 2d 31 2e 39 35 20 7b 0a 20 20  t auth-1.95 {.  
3f40: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
3f50: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
3f60: 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 20 20 69   arg4} {.      i
3f70: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
3f80: 45 5f 49 4e 53 45 52 54 22 20 26 26 20 24 61 72  E_INSERT" && $ar
3f90: 67 31 3d 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70  g1=="sqlite_temp
3fa0: 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20  _master"} {.    
3fb0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
3fc0: 45 5f 44 45 4e 59 0a 20 20 20 20 20 20 7d 0a 20  E_DENY.      }. 
3fd0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
3fe0: 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20  TE_OK.    }.    
3ff0: 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45  catchsql {CREATE
4000: 20 54 45 4d 50 4f 52 41 52 59 20 56 49 45 57 20   TEMPORARY VIEW 
4010: 76 31 20 41 53 20 53 45 4c 45 43 54 20 61 2b 31  v1 AS SELECT a+1
4020: 2c 62 2b 31 20 46 52 4f 4d 20 74 32 7d 0a 20 20  ,b+1 FROM t2}.  
4030: 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72  } {1 {not author
4040: 69 7a 65 64 7d 7d 0a 20 20 64 6f 5f 74 65 73 74  ized}}.  do_test
4050: 20 61 75 74 68 2d 31 2e 39 36 20 7b 0a 20 20 20   auth-1.96 {.   
4060: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
4070: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
4080: 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 20  e_temp_master}. 
4090: 20 7d 20 7b 74 31 7d 0a 20 20 64 6f 5f 74 65 73   } {t1}.  do_tes
40a0: 74 20 61 75 74 68 2d 31 2e 39 37 20 7b 0a 20 20  t auth-1.97 {.  
40b0: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
40c0: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
40d0: 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 20 20 69   arg4} {.      i
40e0: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
40f0: 45 5f 49 4e 53 45 52 54 22 20 26 26 20 24 61 72  E_INSERT" && $ar
4100: 67 31 3d 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70  g1=="sqlite_temp
4110: 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20  _master"} {.    
4120: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
4130: 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 20 20 7d  E_IGNORE.      }
4140: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
4150: 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20  LITE_OK.    }.  
4160: 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41    catchsql {CREA
4170: 54 45 20 54 45 4d 50 4f 52 41 52 59 20 56 49 45  TE TEMPORARY VIE
4180: 57 20 76 31 20 41 53 20 53 45 4c 45 43 54 20 61  W v1 AS SELECT a
4190: 2b 31 2c 62 2b 31 20 46 52 4f 4d 20 74 32 7d 0a  +1,b+1 FROM t2}.
41a0: 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20 20 64 6f 5f    } {0 {}}.  do_
41b0: 74 65 73 74 20 61 75 74 68 2d 31 2e 39 38 20 7b  test auth-1.98 {
41c0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45  .    execsql {SE
41d0: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73  LECT name FROM s
41e0: 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
41f0: 72 7d 0a 20 20 7d 20 7b 74 31 7d 0a 7d 0a 0a 64  r}.  } {t1}.}..d
4200: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 39 39  o_test auth-1.99
4210: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
4220: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
4230: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
4240: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
4250: 54 45 5f 44 45 4c 45 54 45 22 20 26 26 20 24 61  TE_DELETE" && $a
4260: 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 6d 61 73  rg1=="sqlite_mas
4270: 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 72 65  ter"} {.      re
4280: 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59  turn SQLITE_DENY
4290: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
42a0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
42b0: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
42c0: 20 43 52 45 41 54 45 20 56 49 45 57 20 76 32 20   CREATE VIEW v2 
42d0: 41 53 20 53 45 4c 45 43 54 20 61 2b 31 2c 62 2b  AS SELECT a+1,b+
42e0: 31 20 46 52 4f 4d 20 74 32 3b 0a 20 20 20 20 44  1 FROM t2;.    D
42f0: 52 4f 50 20 56 49 45 57 20 76 32 0a 20 20 7d 0a  ROP VIEW v2.  }.
4300: 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72  } {1 {not author
4310: 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  ized}}.do_test a
4320: 75 74 68 2d 31 2e 31 30 30 20 7b 0a 20 20 65 78  uth-1.100 {.  ex
4330: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61  ecsql {SELECT na
4340: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  me FROM sqlite_m
4350: 61 73 74 65 72 7d 0a 7d 20 7b 74 32 20 76 32 7d  aster}.} {t2 v2}
4360: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
4370: 31 30 31 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  101 {.  proc aut
4380: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
4390: 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20  2 arg3 arg4} {. 
43a0: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
43b0: 51 4c 49 54 45 5f 44 52 4f 50 5f 56 49 45 57 22  QLITE_DROP_VIEW"
43c0: 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a  } {.      set ::
43d0: 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24  authargs [list $
43e0: 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33  arg1 $arg2 $arg3
43f0: 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65   $arg4].      re
4400: 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59  turn SQLITE_DENY
4410: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
4420: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
4430: 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50    catchsql {DROP
4440: 20 56 49 45 57 20 76 32 7d 0a 7d 20 7b 31 20 7b   VIEW v2}.} {1 {
4450: 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d  not authorized}}
4460: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
4470: 31 30 32 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75  102 {.  set ::au
4480: 74 68 61 72 67 73 0a 7d 20 7b 76 32 20 7b 7d 20  thargs.} {v2 {} 
4490: 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  main {}}.do_test
44a0: 20 61 75 74 68 2d 31 2e 31 30 33 20 7b 0a 20 20   auth-1.103 {.  
44b0: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
44c0: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
44d0: 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 20 76  _master}.} {t2 v
44e0: 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  2}.do_test auth-
44f0: 31 2e 31 30 34 20 7b 0a 20 20 70 72 6f 63 20 61  1.104 {.  proc a
4500: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
4510: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
4520: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
4530: 22 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 22 20  "SQLITE_DELETE" 
4540: 26 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74  && $arg1=="sqlit
4550: 65 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20  e_master"} {.   
4560: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
4570: 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20  _IGNORE.    }.  
4580: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
4590: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
45a0: 6c 20 7b 44 52 4f 50 20 56 49 45 57 20 76 32 7d  l {DROP VIEW v2}
45b0: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
45c0: 74 20 61 75 74 68 2d 31 2e 31 30 35 20 7b 0a 20  t auth-1.105 {. 
45d0: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
45e0: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
45f0: 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 20  e_master}.} {t2 
4600: 76 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  v2}.do_test auth
4610: 2d 31 2e 31 30 36 20 7b 0a 20 20 70 72 6f 63 20  -1.106 {.  proc 
4620: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
4630: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
4640: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
4650: 3d 22 53 51 4c 49 54 45 5f 44 52 4f 50 5f 56 49  ="SQLITE_DROP_VI
4660: 45 57 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74  EW"} {.      set
4670: 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73   ::authargs [lis
4680: 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61  t $arg1 $arg2 $a
4690: 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20  rg3 $arg4].     
46a0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49   return SQLITE_I
46b0: 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20  GNORE.    }.    
46c0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
46d0: 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20  .  }.  catchsql 
46e0: 7b 44 52 4f 50 20 56 49 45 57 20 76 32 7d 0a 7d  {DROP VIEW v2}.}
46f0: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
4700: 61 75 74 68 2d 31 2e 31 30 37 20 7b 0a 20 20 73  auth-1.107 {.  s
4710: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20  et ::authargs.} 
4720: 7b 76 32 20 7b 7d 20 6d 61 69 6e 20 7b 7d 7d 0a  {v2 {} main {}}.
4730: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
4740: 30 38 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  08 {.  execsql {
4750: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
4760: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a   sqlite_master}.
4770: 7d 20 7b 74 32 20 76 32 7d 0a 64 6f 5f 74 65 73  } {t2 v2}.do_tes
4780: 74 20 61 75 74 68 2d 31 2e 31 30 39 20 7b 0a 20  t auth-1.109 {. 
4790: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
47a0: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
47b0: 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg4} {.    if {
47c0: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44  $code=="SQLITE_D
47d0: 52 4f 50 5f 56 49 45 57 22 7d 20 7b 0a 20 20 20  ROP_VIEW"} {.   
47e0: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
47f0: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
4800: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
4810: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
4820: 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20  LITE_OK.    }.  
4830: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
4840: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
4850: 6c 20 7b 44 52 4f 50 20 56 49 45 57 20 76 32 7d  l {DROP VIEW v2}
4860: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
4870: 74 20 61 75 74 68 2d 31 2e 31 31 30 20 7b 0a 20  t auth-1.110 {. 
4880: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a   set ::authargs.
4890: 7d 20 7b 76 32 20 7b 7d 20 6d 61 69 6e 20 7b 7d  } {v2 {} main {}
48a0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
48b0: 2e 31 31 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  .111 {.  execsql
48c0: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
48d0: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
48e0: 7d 0a 7d 20 7b 74 32 7d 0a 0a 0a 69 66 63 61 70  }.} {t2}...ifcap
48f0: 61 62 6c 65 20 74 65 6d 70 64 62 20 7b 0a 20 20  able tempdb {.  
4900: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
4910: 31 32 20 7b 0a 20 20 20 20 70 72 6f 63 20 61 75  12 {.    proc au
4920: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
4930: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
4940: 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d        if {$code=
4950: 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 22  ="SQLITE_DELETE"
4960: 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69   && $arg1=="sqli
4970: 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 7d  te_temp_master"}
4980: 20 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72   {.        retur
4990: 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20  n SQLITE_DENY.  
49a0: 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75      }.      retu
49b0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20  rn SQLITE_OK.   
49c0: 20 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20   }.    catchsql 
49d0: 7b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54  {.      CREATE T
49e0: 45 4d 50 20 56 49 45 57 20 76 31 20 41 53 20 53  EMP VIEW v1 AS S
49f0: 45 4c 45 43 54 20 61 2b 31 2c 62 2b 31 20 46 52  ELECT a+1,b+1 FR
4a00: 4f 4d 20 74 31 3b 0a 20 20 20 20 20 20 44 52 4f  OM t1;.      DRO
4a10: 50 20 56 49 45 57 20 76 31 0a 20 20 20 20 7d 0a  P VIEW v1.    }.
4a20: 20 20 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68    } {1 {not auth
4a30: 6f 72 69 7a 65 64 7d 7d 0a 20 20 64 6f 5f 74 65  orized}}.  do_te
4a40: 73 74 20 61 75 74 68 2d 31 2e 31 31 33 20 7b 0a  st auth-1.113 {.
4a50: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c      execsql {SEL
4a60: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
4a70: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
4a80: 7d 0a 20 20 7d 20 7b 74 31 20 76 31 7d 0a 20 20  }.  } {t1 v1}.  
4a90: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
4aa0: 31 34 20 7b 0a 20 20 20 20 70 72 6f 63 20 61 75  14 {.    proc au
4ab0: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
4ac0: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
4ad0: 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d        if {$code=
4ae0: 3d 22 53 51 4c 49 54 45 5f 44 52 4f 50 5f 54 45  ="SQLITE_DROP_TE
4af0: 4d 50 5f 56 49 45 57 22 7d 20 7b 0a 20 20 20 20  MP_VIEW"} {.    
4b00: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
4b10: 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24  gs [list $arg1 $
4b20: 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34  arg2 $arg3 $arg4
4b30: 5d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ].        return
4b40: 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20   SQLITE_DENY.   
4b50: 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72     }.      retur
4b60: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20  n SQLITE_OK.    
4b70: 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b  }.    catchsql {
4b80: 44 52 4f 50 20 56 49 45 57 20 76 31 7d 0a 20 20  DROP VIEW v1}.  
4b90: 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72  } {1 {not author
4ba0: 69 7a 65 64 7d 7d 0a 20 20 64 6f 5f 74 65 73 74  ized}}.  do_test
4bb0: 20 61 75 74 68 2d 31 2e 31 31 35 20 7b 0a 20 20   auth-1.115 {.  
4bc0: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
4bd0: 0a 20 20 7d 20 7b 76 31 20 7b 7d 20 74 65 6d 70  .  } {v1 {} temp
4be0: 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61   {}}.  do_test a
4bf0: 75 74 68 2d 31 2e 31 31 36 20 7b 0a 20 20 20 20  uth-1.116 {.    
4c00: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
4c10: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
4c20: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 20 20  _temp_master}.  
4c30: 7d 20 7b 74 31 20 76 31 7d 0a 20 20 64 6f 5f 74  } {t1 v1}.  do_t
4c40: 65 73 74 20 61 75 74 68 2d 31 2e 31 31 37 20 7b  est auth-1.117 {
4c50: 0a 20 20 20 20 70 72 6f 63 20 61 75 74 68 20 7b  .    proc auth {
4c60: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
4c70: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
4c80: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
4c90: 4c 49 54 45 5f 44 45 4c 45 54 45 22 20 26 26 20  LITE_DELETE" && 
4ca0: 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 74  $arg1=="sqlite_t
4cb0: 65 6d 70 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20  emp_master"} {. 
4cc0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
4cd0: 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20  LITE_IGNORE.    
4ce0: 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e    }.      return
4cf0: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d   SQLITE_OK.    }
4d00: 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 44  .    catchsql {D
4d10: 52 4f 50 20 56 49 45 57 20 76 31 7d 0a 20 20 7d  ROP VIEW v1}.  }
4d20: 20 7b 30 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73   {0 {}}.  do_tes
4d30: 74 20 61 75 74 68 2d 31 2e 31 31 38 20 7b 0a 20  t auth-1.118 {. 
4d40: 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45     execsql {SELE
4d50: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
4d60: 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d  ite_temp_master}
4d70: 0a 20 20 7d 20 7b 74 31 20 76 31 7d 0a 20 20 64  .  } {t1 v1}.  d
4d80: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 31  o_test auth-1.11
4d90: 39 20 7b 0a 20 20 20 20 70 72 6f 63 20 61 75 74  9 {.    proc aut
4da0: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
4db0: 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20  2 arg3 arg4} {. 
4dc0: 20 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d       if {$code==
4dd0: 22 53 51 4c 49 54 45 5f 44 52 4f 50 5f 54 45 4d  "SQLITE_DROP_TEM
4de0: 50 5f 56 49 45 57 22 7d 20 7b 0a 20 20 20 20 20  P_VIEW"} {.     
4df0: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
4e00: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
4e10: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
4e20: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
4e30: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20  SQLITE_IGNORE.  
4e40: 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75      }.      retu
4e50: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20  rn SQLITE_OK.   
4e60: 20 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20   }.    catchsql 
4e70: 7b 44 52 4f 50 20 56 49 45 57 20 76 31 7d 0a 20  {DROP VIEW v1}. 
4e80: 20 7d 20 7b 30 20 7b 7d 7d 0a 20 20 64 6f 5f 74   } {0 {}}.  do_t
4e90: 65 73 74 20 61 75 74 68 2d 31 2e 31 32 30 20 7b  est auth-1.120 {
4ea0: 0a 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61  .    set ::autha
4eb0: 72 67 73 0a 20 20 7d 20 7b 76 31 20 7b 7d 20 74  rgs.  } {v1 {} t
4ec0: 65 6d 70 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73  emp {}}.  do_tes
4ed0: 74 20 61 75 74 68 2d 31 2e 31 32 31 20 7b 0a 20  t auth-1.121 {. 
4ee0: 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45     execsql {SELE
4ef0: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
4f00: 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d  ite_temp_master}
4f10: 0a 20 20 7d 20 7b 74 31 20 76 31 7d 0a 20 20 64  .  } {t1 v1}.  d
4f20: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 32  o_test auth-1.12
4f30: 32 20 7b 0a 20 20 20 20 70 72 6f 63 20 61 75 74  2 {.    proc aut
4f40: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
4f50: 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20  2 arg3 arg4} {. 
4f60: 20 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d       if {$code==
4f70: 22 53 51 4c 49 54 45 5f 44 52 4f 50 5f 54 45 4d  "SQLITE_DROP_TEM
4f80: 50 5f 56 49 45 57 22 7d 20 7b 0a 20 20 20 20 20  P_VIEW"} {.     
4f90: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
4fa0: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
4fb0: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
4fc0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
4fd0: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 20 20  SQLITE_OK.      
4fe0: 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  }.      return S
4ff0: 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20  QLITE_OK.    }. 
5000: 20 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f     catchsql {DRO
5010: 50 20 56 49 45 57 20 76 31 7d 0a 20 20 7d 20 7b  P VIEW v1}.  } {
5020: 30 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20  0 {}}.  do_test 
5030: 61 75 74 68 2d 31 2e 31 32 33 20 7b 0a 20 20 20  auth-1.123 {.   
5040: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a   set ::authargs.
5050: 20 20 7d 20 7b 76 31 20 7b 7d 20 74 65 6d 70 20    } {v1 {} temp 
5060: 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75  {}}.  do_test au
5070: 74 68 2d 31 2e 31 32 34 20 7b 0a 20 20 20 20 65  th-1.124 {.    e
5080: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
5090: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
50a0: 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 20 20 7d  temp_master}.  }
50b0: 20 7b 74 31 7d 0a 7d 0a 7d 20 3b 23 20 69 66 63   {t1}.}.} ;# ifc
50c0: 61 70 61 62 6c 65 20 76 69 65 77 0a 0a 23 20 54  apable view..# T
50d0: 65 73 74 20 63 61 73 65 73 20 61 75 74 68 2d 31  est cases auth-1
50e0: 2e 31 32 35 20 74 6f 20 61 75 74 68 2d 31 2e 31  .125 to auth-1.1
50f0: 37 36 20 74 65 73 74 20 63 72 65 61 74 69 6e 67  76 test creating
5100: 20 61 6e 64 20 64 72 6f 70 70 69 6e 67 20 74 72   and dropping tr
5110: 69 67 67 65 72 73 2e 0a 23 20 4f 6d 69 74 20 74  iggers..# Omit t
5120: 68 65 73 65 20 69 66 20 74 68 65 20 6c 69 62 72  hese if the libr
5130: 61 72 79 20 77 61 73 20 63 6f 6d 70 69 6c 65 64  ary was compiled
5140: 20 77 69 74 68 20 74 72 69 67 67 65 72 73 20 6f   with triggers o
5150: 6d 69 74 74 65 64 2e 0a 23 0a 69 66 63 61 70 61  mitted..#.ifcapa
5160: 62 6c 65 20 74 72 69 67 67 65 72 26 26 74 65 6d  ble trigger&&tem
5170: 70 64 62 20 7b 0a 64 6f 5f 74 65 73 74 20 61 75  pdb {.do_test au
5180: 74 68 2d 31 2e 31 32 35 20 7b 0a 20 20 70 72 6f  th-1.125 {.  pro
5190: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
51a0: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
51b0: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
51c0: 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52 45 41 54  e=="SQLITE_CREAT
51d0: 45 5f 54 52 49 47 47 45 52 22 7d 20 7b 0a 20 20  E_TRIGGER"} {.  
51e0: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
51f0: 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24  gs [list $arg1 $
5200: 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34  arg2 $arg3 $arg4
5210: 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  ].      return S
5220: 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d  QLITE_DENY.    }
5230: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
5240: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
5250: 68 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  hsql {.    CREAT
5260: 45 20 54 52 49 47 47 45 52 20 72 32 20 44 45 4c  E TRIGGER r2 DEL
5270: 45 54 45 20 6f 6e 20 74 32 20 42 45 47 49 4e 0a  ETE on t2 BEGIN.
5280: 20 20 20 20 20 20 20 20 53 45 4c 45 43 54 20 4e          SELECT N
5290: 55 4c 4c 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20  ULL;.    END;.  
52a0: 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68  }.} {1 {not auth
52b0: 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74  orized}}.do_test
52c0: 20 61 75 74 68 2d 31 2e 31 32 36 20 7b 0a 20 20   auth-1.126 {.  
52d0: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d  set ::authargs.}
52e0: 20 7b 72 32 20 74 32 20 6d 61 69 6e 20 7b 7d 7d   {r2 t2 main {}}
52f0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
5300: 31 32 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  127 {.  execsql 
5310: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
5320: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d  M sqlite_master}
5330: 0a 7d 20 7b 74 32 7d 0a 64 6f 5f 74 65 73 74 20  .} {t2}.do_test 
5340: 61 75 74 68 2d 31 2e 31 32 38 20 7b 0a 20 20 70  auth-1.128 {.  p
5350: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
5360: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
5370: 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g4} {.    if {$c
5380: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 49 4e 53  ode=="SQLITE_INS
5390: 45 52 54 22 20 26 26 20 24 61 72 67 31 3d 3d 22  ERT" && $arg1=="
53a0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 7d 20  sqlite_master"} 
53b0: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  {.      return S
53c0: 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d  QLITE_DENY.    }
53d0: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
53e0: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
53f0: 68 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  hsql {.    CREAT
5400: 45 20 54 52 49 47 47 45 52 20 72 32 20 44 45 4c  E TRIGGER r2 DEL
5410: 45 54 45 20 6f 6e 20 74 32 20 42 45 47 49 4e 0a  ETE on t2 BEGIN.
5420: 20 20 20 20 20 20 20 20 53 45 4c 45 43 54 20 4e          SELECT N
5430: 55 4c 4c 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20  ULL;.    END;.  
5440: 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68  }.} {1 {not auth
5450: 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74  orized}}.do_test
5460: 20 61 75 74 68 2d 31 2e 31 32 39 20 7b 0a 20 20   auth-1.129 {.  
5470: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
5480: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
5490: 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a  _master}.} {t2}.
54a0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
54b0: 33 30 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  30 {.  proc auth
54c0: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
54d0: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
54e0: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
54f0: 4c 49 54 45 5f 43 52 45 41 54 45 5f 54 52 49 47  LITE_CREATE_TRIG
5500: 47 45 52 22 7d 20 7b 0a 20 20 20 20 20 20 73 65  GER"} {.      se
5510: 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69  t ::authargs [li
5520: 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24  st $arg1 $arg2 $
5530: 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20  arg3 $arg4].    
5540: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
5550: 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20  IGNORE.    }.   
5560: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
5570: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
5580: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 52   {.    CREATE TR
5590: 49 47 47 45 52 20 72 32 20 44 45 4c 45 54 45 20  IGGER r2 DELETE 
55a0: 6f 6e 20 74 32 20 42 45 47 49 4e 0a 20 20 20 20  on t2 BEGIN.    
55b0: 20 20 20 20 53 45 4c 45 43 54 20 4e 55 4c 4c 3b      SELECT NULL;
55c0: 0a 20 20 20 20 45 4e 44 3b 0a 20 20 7d 0a 7d 20  .    END;.  }.} 
55d0: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  {0 {}}.do_test a
55e0: 75 74 68 2d 31 2e 31 33 31 20 7b 0a 20 20 73 65  uth-1.131 {.  se
55f0: 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b  t ::authargs.} {
5600: 72 32 20 74 32 20 6d 61 69 6e 20 7b 7d 7d 0a 64  r2 t2 main {}}.d
5610: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 33  o_test auth-1.13
5620: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  2 {.  execsql {S
5630: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
5640: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d  sqlite_master}.}
5650: 20 7b 74 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75   {t2}.do_test au
5660: 74 68 2d 31 2e 31 33 33 20 7b 0a 20 20 70 72 6f  th-1.133 {.  pro
5670: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
5680: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
5690: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
56a0: 65 3d 3d 22 53 51 4c 49 54 45 5f 49 4e 53 45 52  e=="SQLITE_INSER
56b0: 54 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71  T" && $arg1=="sq
56c0: 6c 69 74 65 5f 6d 61 73 74 65 72 22 7d 20 7b 0a  lite_master"} {.
56d0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
56e0: 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d  ITE_IGNORE.    }
56f0: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
5700: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
5710: 68 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  hsql {.    CREAT
5720: 45 20 54 52 49 47 47 45 52 20 72 32 20 44 45 4c  E TRIGGER r2 DEL
5730: 45 54 45 20 6f 6e 20 74 32 20 42 45 47 49 4e 0a  ETE on t2 BEGIN.
5740: 20 20 20 20 20 20 20 20 53 45 4c 45 43 54 20 4e          SELECT N
5750: 55 4c 4c 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20  ULL;.    END;.  
5760: 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  }.} {0 {}}.do_te
5770: 73 74 20 61 75 74 68 2d 31 2e 31 33 34 20 7b 0a  st auth-1.134 {.
5780: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
5790: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
57a0: 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32  te_master}.} {t2
57b0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
57c0: 2e 31 33 35 20 7b 0a 20 20 70 72 6f 63 20 61 75  .135 {.  proc au
57d0: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
57e0: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
57f0: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
5800: 53 51 4c 49 54 45 5f 43 52 45 41 54 45 5f 54 52  SQLITE_CREATE_TR
5810: 49 47 47 45 52 22 7d 20 7b 0a 20 20 20 20 20 20  IGGER"} {.      
5820: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b  set ::authargs [
5830: 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67 32  list $arg1 $arg2
5840: 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20   $arg3 $arg4].  
5850: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
5860: 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 72  E_OK.    }.    r
5870: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
5880: 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b    }.  catchsql {
5890: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
58a0: 45 20 74 78 28 69 64 29 3b 0a 20 20 20 20 43 52  E tx(id);.    CR
58b0: 45 41 54 45 20 54 52 49 47 47 45 52 20 72 32 20  EATE TRIGGER r2 
58c0: 41 46 54 45 52 20 49 4e 53 45 52 54 20 4f 4e 20  AFTER INSERT ON 
58d0: 74 32 20 42 45 47 49 4e 0a 20 20 20 20 20 20 20  t2 BEGIN.       
58e0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 78 20 56  INSERT INTO tx V
58f0: 41 4c 55 45 53 28 4e 45 57 2e 72 6f 77 69 64 29  ALUES(NEW.rowid)
5900: 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 7d 0a 7d  ;.    END;.  }.}
5910: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
5920: 61 75 74 68 2d 31 2e 31 33 36 2e 31 20 7b 0a 20  auth-1.136.1 {. 
5930: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a   set ::authargs.
5940: 7d 20 7b 72 32 20 74 32 20 6d 61 69 6e 20 7b 7d  } {r2 t2 main {}
5950: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
5960: 2e 31 33 36 2e 32 20 7b 0a 20 20 65 78 65 63 73  .136.2 {.  execs
5970: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
5980: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
5990: 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20 74 79  _master WHERE ty
59a0: 70 65 3d 27 74 72 69 67 67 65 72 27 0a 20 20 7d  pe='trigger'.  }
59b0: 0a 7d 20 7b 72 32 7d 0a 64 6f 5f 74 65 73 74 20  .} {r2}.do_test 
59c0: 61 75 74 68 2d 31 2e 31 33 36 2e 33 20 7b 0a 20  auth-1.136.3 {. 
59d0: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
59e0: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
59f0: 61 72 67 34 7d 20 7b 0a 20 20 20 20 6c 61 70 70  arg4} {.    lapp
5a00: 65 6e 64 20 3a 3a 61 75 74 68 61 72 67 73 20 24  end ::authargs $
5a10: 63 6f 64 65 20 24 61 72 67 31 20 24 61 72 67 32  code $arg1 $arg2
5a20: 20 24 61 72 67 33 20 24 61 72 67 34 0a 20 20 20   $arg3 $arg4.   
5a30: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
5a40: 4b 0a 20 20 7d 0a 20 20 73 65 74 20 3a 3a 61 75  K.  }.  set ::au
5a50: 74 68 61 72 67 73 20 7b 7d 0a 20 20 65 78 65 63  thargs {}.  exec
5a60: 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52 54  sql {.    INSERT
5a70: 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28   INTO t2 VALUES(
5a80: 31 2c 32 2c 33 29 3b 0a 20 20 7d 0a 20 20 73 65  1,2,3);.  }.  se
5a90: 74 20 3a 3a 61 75 74 68 61 72 67 73 20 0a 7d 20  t ::authargs .} 
5aa0: 7b 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 20 74  {SQLITE_INSERT t
5ab0: 32 20 7b 7d 20 6d 61 69 6e 20 7b 7d 20 53 51 4c  2 {} main {} SQL
5ac0: 49 54 45 5f 49 4e 53 45 52 54 20 74 78 20 7b 7d  ITE_INSERT tx {}
5ad0: 20 6d 61 69 6e 20 72 32 20 53 51 4c 49 54 45 5f   main r2 SQLITE_
5ae0: 52 45 41 44 20 74 32 20 52 4f 57 49 44 20 6d 61  READ t2 ROWID ma
5af0: 69 6e 20 72 32 7d 0a 64 6f 5f 74 65 73 74 20 61  in r2}.do_test a
5b00: 75 74 68 2d 31 2e 31 33 36 2e 34 20 7b 0a 20 20  uth-1.136.4 {.  
5b10: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
5b20: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 78 3b 0a  LECT * FROM tx;.
5b30: 20 20 7d 0a 7d 20 7b 33 7d 0a 64 6f 5f 74 65 73    }.} {3}.do_tes
5b40: 74 20 61 75 74 68 2d 31 2e 31 33 37 20 7b 0a 20  t auth-1.137 {. 
5b50: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
5b60: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
5b70: 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 20  e_master}.} {t2 
5b80: 74 78 20 72 32 7d 0a 64 6f 5f 74 65 73 74 20 61  tx r2}.do_test a
5b90: 75 74 68 2d 31 2e 31 33 38 20 7b 0a 20 20 70 72  uth-1.138 {.  pr
5ba0: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
5bb0: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
5bc0: 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f  4} {.    if {$co
5bd0: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52 45 41  de=="SQLITE_CREA
5be0: 54 45 5f 54 45 4d 50 5f 54 52 49 47 47 45 52 22  TE_TEMP_TRIGGER"
5bf0: 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a  } {.      set ::
5c00: 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24  authargs [list $
5c10: 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33  arg1 $arg2 $arg3
5c20: 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65   $arg4].      re
5c30: 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59  turn SQLITE_DENY
5c40: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
5c50: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
5c60: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
5c70: 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20   CREATE TRIGGER 
5c80: 72 31 20 44 45 4c 45 54 45 20 6f 6e 20 74 31 20  r1 DELETE on t1 
5c90: 42 45 47 49 4e 0a 20 20 20 20 20 20 20 20 53 45  BEGIN.        SE
5ca0: 4c 45 43 54 20 4e 55 4c 4c 3b 0a 20 20 20 20 45  LECT NULL;.    E
5cb0: 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 6e 6f  ND;.  }.} {1 {no
5cc0: 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64  t authorized}}.d
5cd0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 33  o_test auth-1.13
5ce0: 39 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68  9 {.  set ::auth
5cf0: 61 72 67 73 0a 7d 20 7b 72 31 20 74 31 20 74 65  args.} {r1 t1 te
5d00: 6d 70 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  mp {}}.do_test a
5d10: 75 74 68 2d 31 2e 31 34 30 20 7b 0a 20 20 65 78  uth-1.140 {.  ex
5d20: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61  ecsql {SELECT na
5d30: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74  me FROM sqlite_t
5d40: 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74  emp_master}.} {t
5d50: 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  1}.do_test auth-
5d60: 31 2e 31 34 31 20 7b 0a 20 20 70 72 6f 63 20 61  1.141 {.  proc a
5d70: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
5d80: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
5d90: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
5da0: 22 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 22 20  "SQLITE_INSERT" 
5db0: 26 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74  && $arg1=="sqlit
5dc0: 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 7d 20  e_temp_master"} 
5dd0: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  {.      return S
5de0: 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d  QLITE_DENY.    }
5df0: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
5e00: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
5e10: 68 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  hsql {.    CREAT
5e20: 45 20 54 52 49 47 47 45 52 20 72 31 20 44 45 4c  E TRIGGER r1 DEL
5e30: 45 54 45 20 6f 6e 20 74 31 20 42 45 47 49 4e 0a  ETE on t1 BEGIN.
5e40: 20 20 20 20 20 20 20 20 53 45 4c 45 43 54 20 4e          SELECT N
5e50: 55 4c 4c 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20  ULL;.    END;.  
5e60: 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68  }.} {1 {not auth
5e70: 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74  orized}}.do_test
5e80: 20 61 75 74 68 2d 31 2e 31 34 32 20 7b 0a 20 20   auth-1.142 {.  
5e90: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
5ea0: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
5eb0: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d 20  _temp_master}.} 
5ec0: 7b 74 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  {t1}.do_test aut
5ed0: 68 2d 31 2e 31 34 33 20 7b 0a 20 20 70 72 6f 63  h-1.143 {.  proc
5ee0: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
5ef0: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
5f00: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
5f10: 3d 3d 22 53 51 4c 49 54 45 5f 43 52 45 41 54 45  =="SQLITE_CREATE
5f20: 5f 54 45 4d 50 5f 54 52 49 47 47 45 52 22 7d 20  _TEMP_TRIGGER"} 
5f30: 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75  {.      set ::au
5f40: 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72  thargs [list $ar
5f50: 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24  g1 $arg2 $arg3 $
5f60: 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75  arg4].      retu
5f70: 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45  rn SQLITE_IGNORE
5f80: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
5f90: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
5fa0: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
5fb0: 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20   CREATE TRIGGER 
5fc0: 72 31 20 44 45 4c 45 54 45 20 6f 6e 20 74 31 20  r1 DELETE on t1 
5fd0: 42 45 47 49 4e 0a 20 20 20 20 20 20 20 20 53 45  BEGIN.        SE
5fe0: 4c 45 43 54 20 4e 55 4c 4c 3b 0a 20 20 20 20 45  LECT NULL;.    E
5ff0: 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d  ND;.  }.} {0 {}}
6000: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
6010: 31 34 34 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75  144 {.  set ::au
6020: 74 68 61 72 67 73 0a 7d 20 7b 72 31 20 74 31 20  thargs.} {r1 t1 
6030: 74 65 6d 70 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  temp {}}.do_test
6040: 20 61 75 74 68 2d 31 2e 31 34 35 20 7b 0a 20 20   auth-1.145 {.  
6050: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
6060: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
6070: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d 20  _temp_master}.} 
6080: 7b 74 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  {t1}.do_test aut
6090: 68 2d 31 2e 31 34 36 20 7b 0a 20 20 70 72 6f 63  h-1.146 {.  proc
60a0: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
60b0: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
60c0: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
60d0: 3d 3d 22 53 51 4c 49 54 45 5f 49 4e 53 45 52 54  =="SQLITE_INSERT
60e0: 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71 6c  " && $arg1=="sql
60f0: 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22  ite_temp_master"
6100: 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  } {.      return
6110: 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20   SQLITE_IGNORE. 
6120: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
6130: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
6140: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 43  catchsql {.    C
6150: 52 45 41 54 45 20 54 52 49 47 47 45 52 20 72 31  REATE TRIGGER r1
6160: 20 44 45 4c 45 54 45 20 6f 6e 20 74 31 20 42 45   DELETE on t1 BE
6170: 47 49 4e 0a 20 20 20 20 20 20 20 20 53 45 4c 45  GIN.        SELE
6180: 43 54 20 4e 55 4c 4c 3b 0a 20 20 20 20 45 4e 44  CT NULL;.    END
6190: 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  ;.  }.} {0 {}}.d
61a0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 34  o_test auth-1.14
61b0: 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  7 {.  execsql {S
61c0: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
61d0: 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
61e0: 65 72 7d 0a 7d 20 7b 74 31 7d 0a 64 6f 5f 74 65  er}.} {t1}.do_te
61f0: 73 74 20 61 75 74 68 2d 31 2e 31 34 38 20 7b 0a  st auth-1.148 {.
6200: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
6210: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
6220: 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20   arg4} {.    if 
6230: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
6240: 43 52 45 41 54 45 5f 54 45 4d 50 5f 54 52 49 47  CREATE_TEMP_TRIG
6250: 47 45 52 22 7d 20 7b 0a 20 20 20 20 20 20 73 65  GER"} {.      se
6260: 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69  t ::authargs [li
6270: 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24  st $arg1 $arg2 $
6280: 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20  arg3 $arg4].    
6290: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
62a0: 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  OK.    }.    ret
62b0: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
62c0: 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  }.  catchsql {. 
62d0: 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45     CREATE TRIGGE
62e0: 52 20 72 31 20 44 45 4c 45 54 45 20 6f 6e 20 74  R r1 DELETE on t
62f0: 31 20 42 45 47 49 4e 0a 20 20 20 20 20 20 20 20  1 BEGIN.        
6300: 53 45 4c 45 43 54 20 4e 55 4c 4c 3b 0a 20 20 20  SELECT NULL;.   
6310: 20 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b   END;.  }.} {0 {
6320: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
6330: 31 2e 31 34 39 20 7b 0a 20 20 73 65 74 20 3a 3a  1.149 {.  set ::
6340: 61 75 74 68 61 72 67 73 0a 7d 20 7b 72 31 20 74  authargs.} {r1 t
6350: 31 20 74 65 6d 70 20 7b 7d 7d 0a 64 6f 5f 74 65  1 temp {}}.do_te
6360: 73 74 20 61 75 74 68 2d 31 2e 31 35 30 20 7b 0a  st auth-1.150 {.
6370: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
6380: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
6390: 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a  te_temp_master}.
63a0: 7d 20 7b 74 31 20 72 31 7d 0a 0a 64 6f 5f 74 65  } {t1 r1}..do_te
63b0: 73 74 20 61 75 74 68 2d 31 2e 31 35 31 20 7b 0a  st auth-1.151 {.
63c0: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
63d0: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
63e0: 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20   arg4} {.    if 
63f0: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
6400: 44 45 4c 45 54 45 22 20 26 26 20 24 61 72 67 31  DELETE" && $arg1
6410: 3d 3d 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  =="sqlite_master
6420: 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72  "} {.      retur
6430: 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20  n SQLITE_DENY.  
6440: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
6450: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
6460: 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54 52  atchsql {DROP TR
6470: 49 47 47 45 52 20 72 32 7d 0a 7d 20 7b 31 20 7b  IGGER r2}.} {1 {
6480: 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d  not authorized}}
6490: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
64a0: 31 35 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  152 {.  execsql 
64b0: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
64c0: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d  M sqlite_master}
64d0: 0a 7d 20 7b 74 32 20 74 78 20 72 32 7d 0a 64 6f  .} {t2 tx r2}.do
64e0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 35 33  _test auth-1.153
64f0: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
6500: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
6510: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
6520: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
6530: 54 45 5f 44 52 4f 50 5f 54 52 49 47 47 45 52 22  TE_DROP_TRIGGER"
6540: 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a  } {.      set ::
6550: 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24  authargs [list $
6560: 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33  arg1 $arg2 $arg3
6570: 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65   $arg4].      re
6580: 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59  turn SQLITE_DENY
6590: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
65a0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
65b0: 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50    catchsql {DROP
65c0: 20 54 52 49 47 47 45 52 20 72 32 7d 0a 7d 20 7b   TRIGGER r2}.} {
65d0: 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65  1 {not authorize
65e0: 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  d}}.do_test auth
65f0: 2d 31 2e 31 35 34 20 7b 0a 20 20 73 65 74 20 3a  -1.154 {.  set :
6600: 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 72 32 20  :authargs.} {r2 
6610: 74 32 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74  t2 main {}}.do_t
6620: 65 73 74 20 61 75 74 68 2d 31 2e 31 35 35 20 7b  est auth-1.155 {
6630: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
6640: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
6650: 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74  ite_master}.} {t
6660: 32 20 74 78 20 72 32 7d 0a 64 6f 5f 74 65 73 74  2 tx r2}.do_test
6670: 20 61 75 74 68 2d 31 2e 31 35 36 20 7b 0a 20 20   auth-1.156 {.  
6680: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
6690: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
66a0: 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg4} {.    if {$
66b0: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45  code=="SQLITE_DE
66c0: 4c 45 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d  LETE" && $arg1==
66d0: 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 7d  "sqlite_master"}
66e0: 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   {.      return 
66f0: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20  SQLITE_IGNORE.  
6700: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
6710: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
6720: 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54 52  atchsql {DROP TR
6730: 49 47 47 45 52 20 72 32 7d 0a 7d 20 7b 30 20 7b  IGGER r2}.} {0 {
6740: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
6750: 31 2e 31 35 37 20 7b 0a 20 20 65 78 65 63 73 71  1.157 {.  execsq
6760: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
6770: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
6780: 72 7d 0a 7d 20 7b 74 32 20 74 78 20 72 32 7d 0a  r}.} {t2 tx r2}.
6790: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
67a0: 35 38 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  58 {.  proc auth
67b0: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
67c0: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
67d0: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
67e0: 4c 49 54 45 5f 44 52 4f 50 5f 54 52 49 47 47 45  LITE_DROP_TRIGGE
67f0: 52 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20  R"} {.      set 
6800: 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74  ::authargs [list
6810: 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72   $arg1 $arg2 $ar
6820: 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20  g3 $arg4].      
6830: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47  return SQLITE_IG
6840: 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72  NORE.    }.    r
6850: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
6860: 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b    }.  catchsql {
6870: 44 52 4f 50 20 54 52 49 47 47 45 52 20 72 32 7d  DROP TRIGGER r2}
6880: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
6890: 74 20 61 75 74 68 2d 31 2e 31 35 39 20 7b 0a 20  t auth-1.159 {. 
68a0: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a   set ::authargs.
68b0: 7d 20 7b 72 32 20 74 32 20 6d 61 69 6e 20 7b 7d  } {r2 t2 main {}
68c0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
68d0: 2e 31 36 30 20 7b 0a 20 20 65 78 65 63 73 71 6c  .160 {.  execsql
68e0: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
68f0: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
6900: 7d 0a 7d 20 7b 74 32 20 74 78 20 72 32 7d 0a 64  }.} {t2 tx r2}.d
6910: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 36  o_test auth-1.16
6920: 31 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  1 {.  proc auth 
6930: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
6940: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
6950: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
6960: 49 54 45 5f 44 52 4f 50 5f 54 52 49 47 47 45 52  ITE_DROP_TRIGGER
6970: 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a  "} {.      set :
6980: 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20  :authargs [list 
6990: 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67  $arg1 $arg2 $arg
69a0: 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72  3 $arg4].      r
69b0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
69c0: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
69d0: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
69e0: 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20   catchsql {DROP 
69f0: 54 52 49 47 47 45 52 20 72 32 7d 0a 7d 20 7b 30  TRIGGER r2}.} {0
6a00: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
6a10: 68 2d 31 2e 31 36 32 20 7b 0a 20 20 73 65 74 20  h-1.162 {.  set 
6a20: 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 72 32  ::authargs.} {r2
6a30: 20 74 32 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f   t2 main {}}.do_
6a40: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 36 33 20  test auth-1.163 
6a50: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
6a60: 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74 78 3b    DROP TABLE tx;
6a70: 0a 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d  .    DELETE FROM
6a80: 20 74 32 20 57 48 45 52 45 20 61 3d 31 20 41 4e   t2 WHERE a=1 AN
6a90: 44 20 62 3d 32 20 41 4e 44 20 63 3d 33 3b 0a 20  D b=2 AND c=3;. 
6aa0: 20 20 20 53 45 4c 45 43 54 20 6e 61 6d 65 20 46     SELECT name F
6ab0: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
6ac0: 72 3b 0a 20 20 7d 0a 7d 20 7b 74 32 7d 0a 0a 64  r;.  }.} {t2}..d
6ad0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 36  o_test auth-1.16
6ae0: 34 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  4 {.  proc auth 
6af0: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
6b00: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
6b10: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
6b20: 49 54 45 5f 44 45 4c 45 54 45 22 20 26 26 20 24  ITE_DELETE" && $
6b30: 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 74 65  arg1=="sqlite_te
6b40: 6d 70 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20  mp_master"} {.  
6b50: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
6b60: 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20  E_DENY.    }.   
6b70: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
6b80: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
6b90: 20 7b 44 52 4f 50 20 54 52 49 47 47 45 52 20 72   {DROP TRIGGER r
6ba0: 31 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74  1}.} {1 {not aut
6bb0: 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73  horized}}.do_tes
6bc0: 74 20 61 75 74 68 2d 31 2e 31 36 35 20 7b 0a 20  t auth-1.165 {. 
6bd0: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
6be0: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
6bf0: 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d  e_temp_master}.}
6c00: 20 7b 74 31 20 72 31 7d 0a 64 6f 5f 74 65 73 74   {t1 r1}.do_test
6c10: 20 61 75 74 68 2d 31 2e 31 36 36 20 7b 0a 20 20   auth-1.166 {.  
6c20: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
6c30: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
6c40: 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg4} {.    if {$
6c50: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52  code=="SQLITE_DR
6c60: 4f 50 5f 54 45 4d 50 5f 54 52 49 47 47 45 52 22  OP_TEMP_TRIGGER"
6c70: 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a  } {.      set ::
6c80: 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24  authargs [list $
6c90: 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33  arg1 $arg2 $arg3
6ca0: 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65   $arg4].      re
6cb0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59  turn SQLITE_DENY
6cc0: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
6cd0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
6ce0: 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50    catchsql {DROP
6cf0: 20 54 52 49 47 47 45 52 20 72 31 7d 0a 7d 20 7b   TRIGGER r1}.} {
6d00: 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65  1 {not authorize
6d10: 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  d}}.do_test auth
6d20: 2d 31 2e 31 36 37 20 7b 0a 20 20 73 65 74 20 3a  -1.167 {.  set :
6d30: 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 72 31 20  :authargs.} {r1 
6d40: 74 31 20 74 65 6d 70 20 7b 7d 7d 0a 64 6f 5f 74  t1 temp {}}.do_t
6d50: 65 73 74 20 61 75 74 68 2d 31 2e 31 36 38 20 7b  est auth-1.168 {
6d60: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
6d70: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
6d80: 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d  ite_temp_master}
6d90: 0a 7d 20 7b 74 31 20 72 31 7d 0a 64 6f 5f 74 65  .} {t1 r1}.do_te
6da0: 73 74 20 61 75 74 68 2d 31 2e 31 36 39 20 7b 0a  st auth-1.169 {.
6db0: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
6dc0: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
6dd0: 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20   arg4} {.    if 
6de0: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
6df0: 44 45 4c 45 54 45 22 20 26 26 20 24 61 72 67 31  DELETE" && $arg1
6e00: 3d 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  =="sqlite_temp_m
6e10: 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20  aster"} {.      
6e20: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47  return SQLITE_IG
6e30: 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72  NORE.    }.    r
6e40: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
6e50: 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b    }.  catchsql {
6e60: 44 52 4f 50 20 54 52 49 47 47 45 52 20 72 31 7d  DROP TRIGGER r1}
6e70: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
6e80: 74 20 61 75 74 68 2d 31 2e 31 37 30 20 7b 0a 20  t auth-1.170 {. 
6e90: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
6ea0: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
6eb0: 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d  e_temp_master}.}
6ec0: 20 7b 74 31 20 72 31 7d 0a 64 6f 5f 74 65 73 74   {t1 r1}.do_test
6ed0: 20 61 75 74 68 2d 31 2e 31 37 31 20 7b 0a 20 20   auth-1.171 {.  
6ee0: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
6ef0: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
6f00: 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg4} {.    if {$
6f10: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52  code=="SQLITE_DR
6f20: 4f 50 5f 54 45 4d 50 5f 54 52 49 47 47 45 52 22  OP_TEMP_TRIGGER"
6f30: 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a  } {.      set ::
6f40: 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24  authargs [list $
6f50: 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33  arg1 $arg2 $arg3
6f60: 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65   $arg4].      re
6f70: 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f  turn SQLITE_IGNO
6f80: 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  RE.    }.    ret
6f90: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
6fa0: 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52  }.  catchsql {DR
6fb0: 4f 50 20 54 52 49 47 47 45 52 20 72 31 7d 0a 7d  OP TRIGGER r1}.}
6fc0: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
6fd0: 61 75 74 68 2d 31 2e 31 37 32 20 7b 0a 20 20 73  auth-1.172 {.  s
6fe0: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20  et ::authargs.} 
6ff0: 7b 72 31 20 74 31 20 74 65 6d 70 20 7b 7d 7d 0a  {r1 t1 temp {}}.
7000: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
7010: 37 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  73 {.  execsql {
7020: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
7030: 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73   sqlite_temp_mas
7040: 74 65 72 7d 0a 7d 20 7b 74 31 20 72 31 7d 0a 64  ter}.} {t1 r1}.d
7050: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 37  o_test auth-1.17
7060: 34 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  4 {.  proc auth 
7070: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
7080: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
7090: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
70a0: 49 54 45 5f 44 52 4f 50 5f 54 45 4d 50 5f 54 52  ITE_DROP_TEMP_TR
70b0: 49 47 47 45 52 22 7d 20 7b 0a 20 20 20 20 20 20  IGGER"} {.      
70c0: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b  set ::authargs [
70d0: 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67 32  list $arg1 $arg2
70e0: 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20   $arg3 $arg4].  
70f0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
7100: 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 72  E_OK.    }.    r
7110: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
7120: 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b    }.  catchsql {
7130: 44 52 4f 50 20 54 52 49 47 47 45 52 20 72 31 7d  DROP TRIGGER r1}
7140: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
7150: 74 20 61 75 74 68 2d 31 2e 31 37 35 20 7b 0a 20  t auth-1.175 {. 
7160: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a   set ::authargs.
7170: 7d 20 7b 72 31 20 74 31 20 74 65 6d 70 20 7b 7d  } {r1 t1 temp {}
7180: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
7190: 2e 31 37 36 20 7b 0a 20 20 65 78 65 63 73 71 6c  .176 {.  execsql
71a0: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
71b0: 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  OM sqlite_temp_m
71c0: 61 73 74 65 72 7d 0a 7d 20 7b 74 31 7d 0a 7d 20  aster}.} {t1}.} 
71d0: 3b 23 20 69 66 63 61 70 61 62 6c 65 20 74 72 69  ;# ifcapable tri
71e0: 67 67 65 72 0a 0a 64 6f 5f 74 65 73 74 20 61 75  gger..do_test au
71f0: 74 68 2d 31 2e 31 37 37 20 7b 0a 20 20 70 72 6f  th-1.177 {.  pro
7200: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
7210: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
7220: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
7230: 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52 45 41 54  e=="SQLITE_CREAT
7240: 45 5f 49 4e 44 45 58 22 7d 20 7b 0a 20 20 20 20  E_INDEX"} {.    
7250: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
7260: 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72   [list $arg1 $ar
7270: 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a  g2 $arg3 $arg4].
7280: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
7290: 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20  ITE_DENY.    }. 
72a0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
72b0: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
72c0: 71 6c 20 7b 43 52 45 41 54 45 20 49 4e 44 45 58  ql {CREATE INDEX
72d0: 20 69 32 20 4f 4e 20 74 32 28 61 29 7d 0a 7d 20   i2 ON t2(a)}.} 
72e0: 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a  {1 {not authoriz
72f0: 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  ed}}.do_test aut
7300: 68 2d 31 2e 31 37 38 20 7b 0a 20 20 73 65 74 20  h-1.178 {.  set 
7310: 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 69 32  ::authargs.} {i2
7320: 20 74 32 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f   t2 main {}}.do_
7330: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 37 39 20  test auth-1.179 
7340: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
7350: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
7360: 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b  lite_master}.} {
7370: 74 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  t2}.do_test auth
7380: 2d 31 2e 31 38 30 20 7b 0a 20 20 70 72 6f 63 20  -1.180 {.  proc 
7390: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
73a0: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
73b0: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
73c0: 3d 22 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 22  ="SQLITE_INSERT"
73d0: 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69   && $arg1=="sqli
73e0: 74 65 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20  te_master"} {.  
73f0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
7400: 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20  E_DENY.    }.   
7410: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
7420: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
7430: 20 7b 43 52 45 41 54 45 20 49 4e 44 45 58 20 69   {CREATE INDEX i
7440: 32 20 4f 4e 20 74 32 28 61 29 7d 0a 7d 20 7b 31  2 ON t2(a)}.} {1
7450: 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64   {not authorized
7460: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
7470: 31 2e 31 38 31 20 7b 0a 20 20 65 78 65 63 73 71  1.181 {.  execsq
7480: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
7490: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
74a0: 72 7d 0a 7d 20 7b 74 32 7d 0a 64 6f 5f 74 65 73  r}.} {t2}.do_tes
74b0: 74 20 61 75 74 68 2d 31 2e 31 38 32 20 7b 0a 20  t auth-1.182 {. 
74c0: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
74d0: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
74e0: 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg4} {.    if {
74f0: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43  $code=="SQLITE_C
7500: 52 45 41 54 45 5f 49 4e 44 45 58 22 7d 20 7b 0a  REATE_INDEX"} {.
7510: 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68        set ::auth
7520: 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31  args [list $arg1
7530: 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72   $arg2 $arg3 $ar
7540: 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  g4].      return
7550: 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20   SQLITE_IGNORE. 
7560: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
7570: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
7580: 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45  catchsql {CREATE
7590: 20 49 4e 44 45 58 20 69 32 20 4f 4e 20 74 32 28   INDEX i2 ON t2(
75a0: 62 29 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f  b)}.} {0 {}}.do_
75b0: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 38 33 20  test auth-1.183 
75c0: 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72  {.  set ::authar
75d0: 67 73 0a 7d 20 7b 69 32 20 74 32 20 6d 61 69 6e  gs.} {i2 t2 main
75e0: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
75f0: 68 2d 31 2e 31 38 34 20 7b 0a 20 20 65 78 65 63  h-1.184 {.  exec
7600: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
7610: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
7620: 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a 64 6f 5f 74  ter}.} {t2}.do_t
7630: 65 73 74 20 61 75 74 68 2d 31 2e 31 38 35 20 7b  est auth-1.185 {
7640: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
7650: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
7660: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66  3 arg4} {.    if
7670: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
7680: 5f 49 4e 53 45 52 54 22 20 26 26 20 24 61 72 67  _INSERT" && $arg
7690: 31 3d 3d 22 73 71 6c 69 74 65 5f 6d 61 73 74 65  1=="sqlite_maste
76a0: 72 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75  r"} {.      retu
76b0: 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45  rn SQLITE_IGNORE
76c0: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
76d0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
76e0: 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41    catchsql {CREA
76f0: 54 45 20 49 4e 44 45 58 20 69 32 20 4f 4e 20 74  TE INDEX i2 ON t
7700: 32 28 62 29 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  2(b)}.} {0 {}}.d
7710: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 38  o_test auth-1.18
7720: 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  6 {.  execsql {S
7730: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
7740: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d  sqlite_master}.}
7750: 20 7b 74 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75   {t2}.do_test au
7760: 74 68 2d 31 2e 31 38 37 20 7b 0a 20 20 70 72 6f  th-1.187 {.  pro
7770: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
7780: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
7790: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
77a0: 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52 45 41 54  e=="SQLITE_CREAT
77b0: 45 5f 49 4e 44 45 58 22 7d 20 7b 0a 20 20 20 20  E_INDEX"} {.    
77c0: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
77d0: 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72   [list $arg1 $ar
77e0: 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a  g2 $arg3 $arg4].
77f0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
7800: 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20  ITE_OK.    }.   
7810: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
7820: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
7830: 20 7b 43 52 45 41 54 45 20 49 4e 44 45 58 20 69   {CREATE INDEX i
7840: 32 20 4f 4e 20 74 32 28 61 29 7d 0a 7d 20 7b 30  2 ON t2(a)}.} {0
7850: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
7860: 68 2d 31 2e 31 38 38 20 7b 0a 20 20 73 65 74 20  h-1.188 {.  set 
7870: 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 69 32  ::authargs.} {i2
7880: 20 74 32 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f   t2 main {}}.do_
7890: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 38 39 20  test auth-1.189 
78a0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
78b0: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
78c0: 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b  lite_master}.} {
78d0: 74 32 20 69 32 7d 0a 0a 69 66 63 61 70 61 62 6c  t2 i2}..ifcapabl
78e0: 65 20 74 65 6d 70 64 62 20 7b 0a 20 20 64 6f 5f  e tempdb {.  do_
78f0: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 39 30 20  test auth-1.190 
7900: 7b 0a 20 20 20 20 70 72 6f 63 20 61 75 74 68 20  {.    proc auth 
7910: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
7920: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
7930: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
7940: 51 4c 49 54 45 5f 43 52 45 41 54 45 5f 54 45 4d  QLITE_CREATE_TEM
7950: 50 5f 49 4e 44 45 58 22 7d 20 7b 0a 20 20 20 20  P_INDEX"} {.    
7960: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
7970: 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24  gs [list $arg1 $
7980: 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34  arg2 $arg3 $arg4
7990: 5d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ].        return
79a0: 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20   SQLITE_DENY.   
79b0: 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72     }.      retur
79c0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20  n SQLITE_OK.    
79d0: 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b  }.    catchsql {
79e0: 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 31 20  CREATE INDEX i1 
79f0: 4f 4e 20 74 31 28 61 29 7d 0a 20 20 7d 20 7b 31  ON t1(a)}.  } {1
7a00: 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64   {not authorized
7a10: 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74  }}.  do_test aut
7a20: 68 2d 31 2e 31 39 31 20 7b 0a 20 20 20 20 73 65  h-1.191 {.    se
7a30: 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 20 20 7d  t ::authargs.  }
7a40: 20 7b 69 31 20 74 31 20 74 65 6d 70 20 7b 7d 7d   {i1 t1 temp {}}
7a50: 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  .  do_test auth-
7a60: 31 2e 31 39 32 20 7b 0a 20 20 20 20 65 78 65 63  1.192 {.    exec
7a70: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
7a80: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d   FROM sqlite_tem
7a90: 70 5f 6d 61 73 74 65 72 7d 0a 20 20 7d 20 7b 74  p_master}.  } {t
7aa0: 31 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74  1}.  do_test aut
7ab0: 68 2d 31 2e 31 39 33 20 7b 0a 20 20 20 20 70 72  h-1.193 {.    pr
7ac0: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
7ad0: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
7ae0: 34 7d 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24  4} {.      if {$
7af0: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 49 4e  code=="SQLITE_IN
7b00: 53 45 52 54 22 20 26 26 20 24 61 72 67 31 3d 3d  SERT" && $arg1==
7b10: 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73  "sqlite_temp_mas
7b20: 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 20 20  ter"} {.        
7b30: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45  return SQLITE_DE
7b40: 4e 59 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  NY.      }.     
7b50: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
7b60: 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 74 63  K.    }.    catc
7b70: 68 73 71 6c 20 7b 43 52 45 41 54 45 20 49 4e 44  hsql {CREATE IND
7b80: 45 58 20 69 31 20 4f 4e 20 74 31 28 62 29 7d 0a  EX i1 ON t1(b)}.
7b90: 20 20 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68    } {1 {not auth
7ba0: 6f 72 69 7a 65 64 7d 7d 0a 20 20 64 6f 5f 74 65  orized}}.  do_te
7bb0: 73 74 20 61 75 74 68 2d 31 2e 31 39 34 20 7b 0a  st auth-1.194 {.
7bc0: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c      execsql {SEL
7bd0: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
7be0: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
7bf0: 7d 0a 20 20 7d 20 7b 74 31 7d 0a 20 20 64 6f 5f  }.  } {t1}.  do_
7c00: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 39 35 20  test auth-1.195 
7c10: 7b 0a 20 20 20 20 70 72 6f 63 20 61 75 74 68 20  {.    proc auth 
7c20: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
7c30: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
7c40: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
7c50: 51 4c 49 54 45 5f 43 52 45 41 54 45 5f 54 45 4d  QLITE_CREATE_TEM
7c60: 50 5f 49 4e 44 45 58 22 7d 20 7b 0a 20 20 20 20  P_INDEX"} {.    
7c70: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
7c80: 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24  gs [list $arg1 $
7c90: 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34  arg2 $arg3 $arg4
7ca0: 5d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ].        return
7cb0: 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20   SQLITE_IGNORE. 
7cc0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74       }.      ret
7cd0: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
7ce0: 20 20 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c    }.    catchsql
7cf0: 20 7b 43 52 45 41 54 45 20 49 4e 44 45 58 20 69   {CREATE INDEX i
7d00: 31 20 4f 4e 20 74 31 28 62 29 7d 0a 20 20 7d 20  1 ON t1(b)}.  } 
7d10: 7b 30 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74  {0 {}}.  do_test
7d20: 20 61 75 74 68 2d 31 2e 31 39 36 20 7b 0a 20 20   auth-1.196 {.  
7d30: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
7d40: 0a 20 20 7d 20 7b 69 31 20 74 31 20 74 65 6d 70  .  } {i1 t1 temp
7d50: 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61   {}}.  do_test a
7d60: 75 74 68 2d 31 2e 31 39 37 20 7b 0a 20 20 20 20  uth-1.197 {.    
7d70: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
7d80: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
7d90: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 20 20  _temp_master}.  
7da0: 7d 20 7b 74 31 7d 0a 20 20 64 6f 5f 74 65 73 74  } {t1}.  do_test
7db0: 20 61 75 74 68 2d 31 2e 31 39 38 20 7b 0a 20 20   auth-1.198 {.  
7dc0: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
7dd0: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
7de0: 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 20 20 69   arg4} {.      i
7df0: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
7e00: 45 5f 49 4e 53 45 52 54 22 20 26 26 20 24 61 72  E_INSERT" && $ar
7e10: 67 31 3d 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70  g1=="sqlite_temp
7e20: 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20  _master"} {.    
7e30: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
7e40: 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 20 20 7d  E_IGNORE.      }
7e50: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
7e60: 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20  LITE_OK.    }.  
7e70: 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41    catchsql {CREA
7e80: 54 45 20 49 4e 44 45 58 20 69 31 20 4f 4e 20 74  TE INDEX i1 ON t
7e90: 31 28 63 29 7d 0a 20 20 7d 20 7b 30 20 7b 7d 7d  1(c)}.  } {0 {}}
7ea0: 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  .  do_test auth-
7eb0: 31 2e 31 39 39 20 7b 0a 20 20 20 20 65 78 65 63  1.199 {.    exec
7ec0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
7ed0: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d   FROM sqlite_tem
7ee0: 70 5f 6d 61 73 74 65 72 7d 0a 20 20 7d 20 7b 74  p_master}.  } {t
7ef0: 31 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74  1}.  do_test aut
7f00: 68 2d 31 2e 32 30 30 20 7b 0a 20 20 20 20 70 72  h-1.200 {.    pr
7f10: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
7f20: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
7f30: 34 7d 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24  4} {.      if {$
7f40: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52  code=="SQLITE_CR
7f50: 45 41 54 45 5f 54 45 4d 50 5f 49 4e 44 45 58 22  EATE_TEMP_INDEX"
7f60: 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20  } {.        set 
7f70: 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74  ::authargs [list
7f80: 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72   $arg1 $arg2 $ar
7f90: 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20  g3 $arg4].      
7fa0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
7fb0: 4f 4b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  OK.      }.     
7fc0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
7fd0: 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 74 63  K.    }.    catc
7fe0: 68 73 71 6c 20 7b 43 52 45 41 54 45 20 49 4e 44  hsql {CREATE IND
7ff0: 45 58 20 69 31 20 4f 4e 20 74 31 28 61 29 7d 0a  EX i1 ON t1(a)}.
8000: 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20 20 64 6f 5f    } {0 {}}.  do_
8010: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 30 31 20  test auth-1.201 
8020: 7b 0a 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68  {.    set ::auth
8030: 61 72 67 73 0a 20 20 7d 20 7b 69 31 20 74 31 20  args.  } {i1 t1 
8040: 74 65 6d 70 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65  temp {}}.  do_te
8050: 73 74 20 61 75 74 68 2d 31 2e 32 30 32 20 7b 0a  st auth-1.202 {.
8060: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c      execsql {SEL
8070: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
8080: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
8090: 7d 0a 20 20 7d 20 7b 74 31 20 69 31 7d 0a 7d 0a  }.  } {t1 i1}.}.
80a0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
80b0: 32 30 33 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  203 {.  proc aut
80c0: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
80d0: 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20  2 arg3 arg4} {. 
80e0: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
80f0: 51 4c 49 54 45 5f 44 45 4c 45 54 45 22 20 26 26  QLITE_DELETE" &&
8100: 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f   $arg1=="sqlite_
8110: 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20  master"} {.     
8120: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44   return SQLITE_D
8130: 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  ENY.    }.    re
8140: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
8150: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44   }.  catchsql {D
8160: 52 4f 50 20 49 4e 44 45 58 20 69 32 7d 0a 7d 20  ROP INDEX i2}.} 
8170: 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a  {1 {not authoriz
8180: 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  ed}}.do_test aut
8190: 68 2d 31 2e 32 30 34 20 7b 0a 20 20 65 78 65 63  h-1.204 {.  exec
81a0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
81b0: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
81c0: 74 65 72 7d 0a 7d 20 7b 74 32 20 69 32 7d 0a 64  ter}.} {t2 i2}.d
81d0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 30  o_test auth-1.20
81e0: 35 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  5 {.  proc auth 
81f0: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
8200: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
8210: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
8220: 49 54 45 5f 44 52 4f 50 5f 49 4e 44 45 58 22 7d  ITE_DROP_INDEX"}
8230: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61   {.      set ::a
8240: 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61  uthargs [list $a
8250: 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20  rg1 $arg2 $arg3 
8260: 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74  $arg4].      ret
8270: 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a  urn SQLITE_DENY.
8280: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
8290: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
82a0: 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20   catchsql {DROP 
82b0: 49 4e 44 45 58 20 69 32 7d 0a 7d 20 7b 31 20 7b  INDEX i2}.} {1 {
82c0: 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d  not authorized}}
82d0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
82e0: 32 30 36 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75  206 {.  set ::au
82f0: 74 68 61 72 67 73 0a 7d 20 7b 69 32 20 74 32 20  thargs.} {i2 t2 
8300: 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  main {}}.do_test
8310: 20 61 75 74 68 2d 31 2e 32 30 37 20 7b 0a 20 20   auth-1.207 {.  
8320: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
8330: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
8340: 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 20 69  _master}.} {t2 i
8350: 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  2}.do_test auth-
8360: 31 2e 32 30 38 20 7b 0a 20 20 70 72 6f 63 20 61  1.208 {.  proc a
8370: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
8380: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
8390: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
83a0: 22 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 22 20  "SQLITE_DELETE" 
83b0: 26 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74  && $arg1=="sqlit
83c0: 65 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20  e_master"} {.   
83d0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
83e0: 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20  _IGNORE.    }.  
83f0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
8400: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
8410: 6c 20 7b 44 52 4f 50 20 49 4e 44 45 58 20 69 32  l {DROP INDEX i2
8420: 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  }.} {0 {}}.do_te
8430: 73 74 20 61 75 74 68 2d 31 2e 32 30 39 20 7b 0a  st auth-1.209 {.
8440: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
8450: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
8460: 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32  te_master}.} {t2
8470: 20 69 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   i2}.do_test aut
8480: 68 2d 31 2e 32 31 30 20 7b 0a 20 20 70 72 6f 63  h-1.210 {.  proc
8490: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
84a0: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
84b0: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
84c0: 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f 50 5f 49  =="SQLITE_DROP_I
84d0: 4e 44 45 58 22 7d 20 7b 0a 20 20 20 20 20 20 73  NDEX"} {.      s
84e0: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c  et ::authargs [l
84f0: 69 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20  ist $arg1 $arg2 
8500: 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20  $arg3 $arg4].   
8510: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
8520: 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20  _IGNORE.    }.  
8530: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
8540: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
8550: 6c 20 7b 44 52 4f 50 20 49 4e 44 45 58 20 69 32  l {DROP INDEX i2
8560: 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  }.} {0 {}}.do_te
8570: 73 74 20 61 75 74 68 2d 31 2e 32 31 31 20 7b 0a  st auth-1.211 {.
8580: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
8590: 0a 7d 20 7b 69 32 20 74 32 20 6d 61 69 6e 20 7b  .} {i2 t2 main {
85a0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
85b0: 31 2e 32 31 32 20 7b 0a 20 20 65 78 65 63 73 71  1.212 {.  execsq
85c0: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
85d0: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
85e0: 72 7d 0a 7d 20 7b 74 32 20 69 32 7d 0a 64 6f 5f  r}.} {t2 i2}.do_
85f0: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 31 33 20  test auth-1.213 
8600: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
8610: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
8620: 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69  g3 arg4} {.    i
8630: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
8640: 45 5f 44 52 4f 50 5f 49 4e 44 45 58 22 7d 20 7b  E_DROP_INDEX"} {
8650: 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74  .      set ::aut
8660: 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67  hargs [list $arg
8670: 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61  1 $arg2 $arg3 $a
8680: 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72  rg4].      retur
8690: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20  n SQLITE_OK.    
86a0: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
86b0: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
86c0: 63 68 73 71 6c 20 7b 44 52 4f 50 20 49 4e 44 45  chsql {DROP INDE
86d0: 58 20 69 32 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  X i2}.} {0 {}}.d
86e0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 31  o_test auth-1.21
86f0: 34 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68  4 {.  set ::auth
8700: 61 72 67 73 0a 7d 20 7b 69 32 20 74 32 20 6d 61  args.} {i2 t2 ma
8710: 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  in {}}.do_test a
8720: 75 74 68 2d 31 2e 32 31 35 20 7b 0a 20 20 65 78  uth-1.215 {.  ex
8730: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61  ecsql {SELECT na
8740: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  me FROM sqlite_m
8750: 61 73 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a 0a 69  aster}.} {t2}..i
8760: 66 63 61 70 61 62 6c 65 20 74 65 6d 70 64 62 20  fcapable tempdb 
8770: 7b 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68  {.  do_test auth
8780: 2d 31 2e 32 31 36 20 7b 0a 20 20 20 20 70 72 6f  -1.216 {.    pro
8790: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
87a0: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
87b0: 7d 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 63  } {.      if {$c
87c0: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c  ode=="SQLITE_DEL
87d0: 45 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d 22  ETE" && $arg1=="
87e0: 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
87f0: 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 72  er"} {.        r
8800: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e  eturn SQLITE_DEN
8810: 59 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  Y.      }.      
8820: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
8830: 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 74 63 68  .    }.    catch
8840: 73 71 6c 20 7b 44 52 4f 50 20 49 4e 44 45 58 20  sql {DROP INDEX 
8850: 69 31 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f 74 20  i1}.  } {1 {not 
8860: 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 20 20 64  authorized}}.  d
8870: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 31  o_test auth-1.21
8880: 37 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  7 {.    execsql 
8890: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
88a0: 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  M sqlite_temp_ma
88b0: 73 74 65 72 7d 0a 20 20 7d 20 7b 74 31 20 69 31  ster}.  } {t1 i1
88c0: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68  }.  do_test auth
88d0: 2d 31 2e 32 31 38 20 7b 0a 20 20 20 20 70 72 6f  -1.218 {.    pro
88e0: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
88f0: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
8900: 7d 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 63  } {.      if {$c
8910: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f  ode=="SQLITE_DRO
8920: 50 5f 54 45 4d 50 5f 49 4e 44 45 58 22 7d 20 7b  P_TEMP_INDEX"} {
8930: 0a 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a 61  .        set ::a
8940: 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61  uthargs [list $a
8950: 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20  rg1 $arg2 $arg3 
8960: 24 61 72 67 34 5d 0a 20 20 20 20 20 20 20 20 72  $arg4].        r
8970: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e  eturn SQLITE_DEN
8980: 59 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  Y.      }.      
8990: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
89a0: 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 74 63 68  .    }.    catch
89b0: 73 71 6c 20 7b 44 52 4f 50 20 49 4e 44 45 58 20  sql {DROP INDEX 
89c0: 69 31 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f 74 20  i1}.  } {1 {not 
89d0: 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 20 20 64  authorized}}.  d
89e0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 31  o_test auth-1.21
89f0: 39 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a 61 75  9 {.    set ::au
8a00: 74 68 61 72 67 73 0a 20 20 7d 20 7b 69 31 20 74  thargs.  } {i1 t
8a10: 31 20 74 65 6d 70 20 7b 7d 7d 0a 20 20 64 6f 5f  1 temp {}}.  do_
8a20: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 32 30 20  test auth-1.220 
8a30: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53  {.    execsql {S
8a40: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
8a50: 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
8a60: 65 72 7d 0a 20 20 7d 20 7b 74 31 20 69 31 7d 0a  er}.  } {t1 i1}.
8a70: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31    do_test auth-1
8a80: 2e 32 32 31 20 7b 0a 20 20 20 20 70 72 6f 63 20  .221 {.    proc 
8a90: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
8aa0: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
8ab0: 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64  {.      if {$cod
8ac0: 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45 54  e=="SQLITE_DELET
8ad0: 45 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71  E" && $arg1=="sq
8ae0: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
8af0: 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 72 65 74  "} {.        ret
8b00: 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52  urn SQLITE_IGNOR
8b10: 45 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  E.      }.      
8b20: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
8b30: 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 74 63 68  .    }.    catch
8b40: 73 71 6c 20 7b 44 52 4f 50 20 49 4e 44 45 58 20  sql {DROP INDEX 
8b50: 69 31 7d 0a 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20  i1}.  } {0 {}}. 
8b60: 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e   do_test auth-1.
8b70: 32 32 32 20 7b 0a 20 20 20 20 65 78 65 63 73 71  222 {.    execsq
8b80: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
8b90: 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f  ROM sqlite_temp_
8ba0: 6d 61 73 74 65 72 7d 0a 20 20 7d 20 7b 74 31 20  master}.  } {t1 
8bb0: 69 31 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75  i1}.  do_test au
8bc0: 74 68 2d 31 2e 32 32 33 20 7b 0a 20 20 20 20 70  th-1.223 {.    p
8bd0: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
8be0: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
8bf0: 67 34 7d 20 7b 0a 20 20 20 20 20 20 69 66 20 7b  g4} {.      if {
8c00: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44  $code=="SQLITE_D
8c10: 52 4f 50 5f 54 45 4d 50 5f 49 4e 44 45 58 22 7d  ROP_TEMP_INDEX"}
8c20: 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 3a   {.        set :
8c30: 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20  :authargs [list 
8c40: 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67  $arg1 $arg2 $arg
8c50: 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 20  3 $arg4].       
8c60: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49   return SQLITE_I
8c70: 47 4e 4f 52 45 0a 20 20 20 20 20 20 7d 0a 20 20  GNORE.      }.  
8c80: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
8c90: 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63  E_OK.    }.    c
8ca0: 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 49 4e  atchsql {DROP IN
8cb0: 44 45 58 20 69 31 7d 0a 20 20 7d 20 7b 30 20 7b  DEX i1}.  } {0 {
8cc0: 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74  }}.  do_test aut
8cd0: 68 2d 31 2e 32 32 34 20 7b 0a 20 20 20 20 73 65  h-1.224 {.    se
8ce0: 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 20 20 7d  t ::authargs.  }
8cf0: 20 7b 69 31 20 74 31 20 74 65 6d 70 20 7b 7d 7d   {i1 t1 temp {}}
8d00: 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  .  do_test auth-
8d10: 31 2e 32 32 35 20 7b 0a 20 20 20 20 65 78 65 63  1.225 {.    exec
8d20: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
8d30: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d   FROM sqlite_tem
8d40: 70 5f 6d 61 73 74 65 72 7d 0a 20 20 7d 20 7b 74  p_master}.  } {t
8d50: 31 20 69 31 7d 0a 20 20 64 6f 5f 74 65 73 74 20  1 i1}.  do_test 
8d60: 61 75 74 68 2d 31 2e 32 32 36 20 7b 0a 20 20 20  auth-1.226 {.   
8d70: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
8d80: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
8d90: 61 72 67 34 7d 20 7b 0a 20 20 20 20 20 20 69 66  arg4} {.      if
8da0: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
8db0: 5f 44 52 4f 50 5f 54 45 4d 50 5f 49 4e 44 45 58  _DROP_TEMP_INDEX
8dc0: 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74  "} {.        set
8dd0: 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73   ::authargs [lis
8de0: 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61  t $arg1 $arg2 $a
8df0: 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20  rg3 $arg4].     
8e00: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
8e10: 5f 4f 4b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  _OK.      }.    
8e20: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
8e30: 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 74  OK.    }.    cat
8e40: 63 68 73 71 6c 20 7b 44 52 4f 50 20 49 4e 44 45  chsql {DROP INDE
8e50: 58 20 69 31 7d 0a 20 20 7d 20 7b 30 20 7b 7d 7d  X i1}.  } {0 {}}
8e60: 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  .  do_test auth-
8e70: 31 2e 32 32 37 20 7b 0a 20 20 20 20 73 65 74 20  1.227 {.    set 
8e80: 3a 3a 61 75 74 68 61 72 67 73 0a 20 20 7d 20 7b  ::authargs.  } {
8e90: 69 31 20 74 31 20 74 65 6d 70 20 7b 7d 7d 0a 20  i1 t1 temp {}}. 
8ea0: 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e   do_test auth-1.
8eb0: 32 32 38 20 7b 0a 20 20 20 20 65 78 65 63 73 71  228 {.    execsq
8ec0: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
8ed0: 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f  ROM sqlite_temp_
8ee0: 6d 61 73 74 65 72 7d 0a 20 20 7d 20 7b 74 31 7d  master}.  } {t1}
8ef0: 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  .}..do_test auth
8f00: 2d 31 2e 32 32 39 20 7b 0a 20 20 70 72 6f 63 20  -1.229 {.  proc 
8f10: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
8f20: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
8f30: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
8f40: 3d 22 53 51 4c 49 54 45 5f 50 52 41 47 4d 41 22  ="SQLITE_PRAGMA"
8f50: 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a  } {.      set ::
8f60: 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24  authargs [list $
8f70: 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33  arg1 $arg2 $arg3
8f80: 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65   $arg4].      re
8f90: 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59  turn SQLITE_DENY
8fa0: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
8fb0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
8fc0: 20 20 63 61 74 63 68 73 71 6c 20 7b 50 52 41 47    catchsql {PRAG
8fd0: 4d 41 20 66 75 6c 6c 5f 63 6f 6c 75 6d 6e 5f 6e  MA full_column_n
8fe0: 61 6d 65 73 3d 6f 6e 7d 0a 7d 20 7b 31 20 7b 6e  ames=on}.} {1 {n
8ff0: 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a  ot authorized}}.
9000: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
9010: 33 30 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74  30 {.  set ::aut
9020: 68 61 72 67 73 0a 7d 20 7b 66 75 6c 6c 5f 63 6f  hargs.} {full_co
9030: 6c 75 6d 6e 5f 6e 61 6d 65 73 20 6f 6e 20 7b 7d  lumn_names on {}
9040: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
9050: 68 2d 31 2e 32 33 31 20 7b 0a 20 20 65 78 65 63  h-1.231 {.  exec
9060: 73 71 6c 32 20 7b 53 45 4c 45 43 54 20 61 20 46  sql2 {SELECT a F
9070: 52 4f 4d 20 74 32 7d 0a 7d 20 7b 61 20 31 31 20  ROM t2}.} {a 11 
9080: 61 20 37 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  a 7}.do_test aut
9090: 68 2d 31 2e 32 33 32 20 7b 0a 20 20 70 72 6f 63  h-1.232 {.  proc
90a0: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
90b0: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
90c0: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
90d0: 3d 3d 22 53 51 4c 49 54 45 5f 50 52 41 47 4d 41  =="SQLITE_PRAGMA
90e0: 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a  "} {.      set :
90f0: 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20  :authargs [list 
9100: 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67  $arg1 $arg2 $arg
9110: 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72  3 $arg4].      r
9120: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e  eturn SQLITE_IGN
9130: 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  ORE.    }.    re
9140: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
9150: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 50   }.  catchsql {P
9160: 52 41 47 4d 41 20 66 75 6c 6c 5f 63 6f 6c 75 6d  RAGMA full_colum
9170: 6e 5f 6e 61 6d 65 73 3d 6f 6e 7d 0a 7d 20 7b 30  n_names=on}.} {0
9180: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
9190: 68 2d 31 2e 32 33 33 20 7b 0a 20 20 73 65 74 20  h-1.233 {.  set 
91a0: 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 66 75  ::authargs.} {fu
91b0: 6c 6c 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 20  ll_column_names 
91c0: 6f 6e 20 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74 65 73  on {} {}}.do_tes
91d0: 74 20 61 75 74 68 2d 31 2e 32 33 34 20 7b 0a 20  t auth-1.234 {. 
91e0: 20 65 78 65 63 73 71 6c 32 20 7b 53 45 4c 45 43   execsql2 {SELEC
91f0: 54 20 61 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b  T a FROM t2}.} {
9200: 61 20 31 31 20 61 20 37 7d 0a 64 6f 5f 74 65 73  a 11 a 7}.do_tes
9210: 74 20 61 75 74 68 2d 31 2e 32 33 35 20 7b 0a 20  t auth-1.235 {. 
9220: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
9230: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
9240: 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg4} {.    if {
9250: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 50  $code=="SQLITE_P
9260: 52 41 47 4d 41 22 7d 20 7b 0a 20 20 20 20 20 20  RAGMA"} {.      
9270: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b  set ::authargs [
9280: 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67 32  list $arg1 $arg2
9290: 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20   $arg3 $arg4].  
92a0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
92b0: 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 72  E_OK.    }.    r
92c0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
92d0: 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b    }.  catchsql {
92e0: 50 52 41 47 4d 41 20 66 75 6c 6c 5f 63 6f 6c 75  PRAGMA full_colu
92f0: 6d 6e 5f 6e 61 6d 65 73 3d 6f 6e 7d 0a 7d 20 7b  mn_names=on}.} {
9300: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  0 {}}.do_test au
9310: 74 68 2d 31 2e 32 33 36 20 7b 0a 20 20 65 78 65  th-1.236 {.  exe
9320: 63 73 71 6c 32 20 7b 53 45 4c 45 43 54 20 61 20  csql2 {SELECT a 
9330: 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 74 32 2e 61  FROM t2}.} {t2.a
9340: 20 31 31 20 74 32 2e 61 20 37 7d 0a 64 6f 5f 74   11 t2.a 7}.do_t
9350: 65 73 74 20 61 75 74 68 2d 31 2e 32 33 37 20 7b  est auth-1.237 {
9360: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
9370: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
9380: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66  3 arg4} {.    if
9390: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
93a0: 5f 50 52 41 47 4d 41 22 7d 20 7b 0a 20 20 20 20  _PRAGMA"} {.    
93b0: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
93c0: 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72   [list $arg1 $ar
93d0: 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a  g2 $arg3 $arg4].
93e0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
93f0: 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20  ITE_OK.    }.   
9400: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
9410: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
9420: 20 7b 50 52 41 47 4d 41 20 66 75 6c 6c 5f 63 6f   {PRAGMA full_co
9430: 6c 75 6d 6e 5f 6e 61 6d 65 73 3d 4f 46 46 7d 0a  lumn_names=OFF}.
9440: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
9450: 20 61 75 74 68 2d 31 2e 32 33 38 20 7b 0a 20 20   auth-1.238 {.  
9460: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d  set ::authargs.}
9470: 20 7b 66 75 6c 6c 5f 63 6f 6c 75 6d 6e 5f 6e 61   {full_column_na
9480: 6d 65 73 20 4f 46 46 20 7b 7d 20 7b 7d 7d 0a 64  mes OFF {} {}}.d
9490: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 33  o_test auth-1.23
94a0: 39 20 7b 0a 20 20 65 78 65 63 73 71 6c 32 20 7b  9 {.  execsql2 {
94b0: 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 32  SELECT a FROM t2
94c0: 7d 0a 7d 20 7b 61 20 31 31 20 61 20 37 7d 0a 0a  }.} {a 11 a 7}..
94d0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
94e0: 34 30 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  40 {.  proc auth
94f0: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
9500: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
9510: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
9520: 4c 49 54 45 5f 54 52 41 4e 53 41 43 54 49 4f 4e  LITE_TRANSACTION
9530: 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a  "} {.      set :
9540: 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20  :authargs [list 
9550: 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67  $arg1 $arg2 $arg
9560: 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72  3 $arg4].      r
9570: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e  eturn SQLITE_DEN
9580: 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  Y.    }.    retu
9590: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
95a0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 42 45 47  .  catchsql {BEG
95b0: 49 4e 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75  IN}.} {1 {not au
95c0: 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65  thorized}}.do_te
95d0: 73 74 20 61 75 74 68 2d 31 2e 32 34 31 20 7b 0a  st auth-1.241 {.
95e0: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
95f0: 0a 7d 20 7b 42 45 47 49 4e 20 7b 7d 20 7b 7d 20  .} {BEGIN {} {} 
9600: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
9610: 2d 31 2e 32 34 32 20 7b 0a 20 20 70 72 6f 63 20  -1.242 {.  proc 
9620: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
9630: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
9640: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
9650: 3d 22 53 51 4c 49 54 45 5f 54 52 41 4e 53 41 43  ="SQLITE_TRANSAC
9660: 54 49 4f 4e 22 20 26 26 20 24 61 72 67 31 21 3d  TION" && $arg1!=
9670: 22 42 45 47 49 4e 22 7d 20 7b 0a 20 20 20 20 20  "BEGIN"} {.     
9680: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
9690: 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67  [list $arg1 $arg
96a0: 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20  2 $arg3 $arg4]. 
96b0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
96c0: 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20  TE_DENY.    }.  
96d0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
96e0: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
96f0: 6c 20 7b 42 45 47 49 4e 3b 20 49 4e 53 45 52 54  l {BEGIN; INSERT
9700: 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28   INTO t2 VALUES(
9710: 34 34 2c 35 35 2c 36 36 29 3b 20 43 4f 4d 4d 49  44,55,66); COMMI
9720: 54 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74  T}.} {1 {not aut
9730: 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73  horized}}.do_tes
9740: 74 20 61 75 74 68 2d 31 2e 32 34 33 20 7b 0a 20  t auth-1.243 {. 
9750: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a   set ::authargs.
9760: 7d 20 7b 43 4f 4d 4d 49 54 20 7b 7d 20 7b 7d 20  } {COMMIT {} {} 
9770: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
9780: 2d 31 2e 32 34 34 20 7b 0a 20 20 65 78 65 63 73  -1.244 {.  execs
9790: 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f  ql {SELECT * FRO
97a0: 4d 20 74 32 7d 0a 7d 20 7b 31 31 20 32 20 33 33  M t2}.} {11 2 33
97b0: 20 37 20 38 20 39 20 34 34 20 35 35 20 36 36 7d   7 8 9 44 55 66}
97c0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
97d0: 32 34 35 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  245 {.  catchsql
97e0: 20 7b 52 4f 4c 4c 42 41 43 4b 7d 0a 7d 20 7b 31   {ROLLBACK}.} {1
97f0: 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64   {not authorized
9800: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
9810: 31 2e 32 34 36 20 7b 0a 20 20 73 65 74 20 3a 3a  1.246 {.  set ::
9820: 61 75 74 68 61 72 67 73 0a 7d 20 7b 52 4f 4c 4c  authargs.} {ROLL
9830: 42 41 43 4b 20 7b 7d 20 7b 7d 20 7b 7d 7d 0a 64  BACK {} {} {}}.d
9840: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 34  o_test auth-1.24
9850: 37 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  7 {.  catchsql {
9860: 45 4e 44 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d  END TRANSACTION}
9870: 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f  .} {1 {not autho
9880: 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20  rized}}.do_test 
9890: 61 75 74 68 2d 31 2e 32 34 38 20 7b 0a 20 20 73  auth-1.248 {.  s
98a0: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20  et ::authargs.} 
98b0: 7b 43 4f 4d 4d 49 54 20 7b 7d 20 7b 7d 20 7b 7d  {COMMIT {} {} {}
98c0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
98d0: 2e 32 34 39 20 7b 0a 20 20 64 62 20 61 75 74 68  .249 {.  db auth
98e0: 6f 72 69 7a 65 72 20 7b 7d 0a 20 20 63 61 74 63  orizer {}.  catc
98f0: 68 73 71 6c 20 7b 52 4f 4c 4c 42 41 43 4b 7d 0a  hsql {ROLLBACK}.
9900: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
9910: 20 61 75 74 68 2d 31 2e 32 35 30 20 7b 0a 20 20   auth-1.250 {.  
9920: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
9930: 2a 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31 31  * FROM t2}.} {11
9940: 20 32 20 33 33 20 37 20 38 20 39 7d 0a 0a 23 20   2 33 7 8 9}..# 
9950: 74 69 63 6b 65 74 20 23 33 34 30 20 2d 20 61 75  ticket #340 - au
9960: 74 68 6f 72 69 7a 61 74 69 6f 6e 20 66 6f 72 20  thorization for 
9970: 41 54 54 41 43 48 20 61 6e 64 20 44 45 54 41 43  ATTACH and DETAC
9980: 48 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 61 75 74  H..#.do_test aut
9990: 68 2d 31 2e 32 35 31 20 7b 0a 20 20 64 62 20 61  h-1.251 {.  db a
99a0: 75 74 68 6f 72 69 7a 65 72 20 3a 3a 61 75 74 68  uthorizer ::auth
99b0: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
99c0: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
99d0: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66  3 arg4} {.    if
99e0: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
99f0: 5f 41 54 54 41 43 48 22 7d 20 7b 0a 20 20 20 20  _ATTACH"} {.    
9a00: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
9a10: 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72   [list $arg1 $ar
9a20: 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a  g2 $arg3 $arg4].
9a30: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
9a40: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
9a50: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
9a60: 41 54 54 41 43 48 20 44 41 54 41 42 41 53 45 20  ATTACH DATABASE 
9a70: 27 3a 6d 65 6d 6f 72 79 3a 27 20 41 53 20 74 65  ':memory:' AS te
9a80: 73 74 31 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d  st1.  }.} {0 {}}
9a90: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
9aa0: 32 35 32 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75  252 {.  set ::au
9ab0: 74 68 61 72 67 73 0a 7d 20 7b 3a 6d 65 6d 6f 72  thargs.} {:memor
9ac0: 79 3a 20 7b 7d 20 7b 7d 20 7b 7d 7d 0a 64 6f 5f  y: {} {} {}}.do_
9ad0: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 35 33 20  test auth-1.253 
9ae0: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44 45  {.  catchsql {DE
9af0: 54 41 43 48 20 44 41 54 41 42 41 53 45 20 74 65  TACH DATABASE te
9b00: 73 74 31 7d 0a 20 20 70 72 6f 63 20 61 75 74 68  st1}.  proc auth
9b10: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
9b20: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
9b30: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
9b40: 4c 49 54 45 5f 41 54 54 41 43 48 22 7d 20 7b 0a  LITE_ATTACH"} {.
9b50: 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68        set ::auth
9b60: 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31  args [list $arg1
9b70: 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72   $arg2 $arg3 $ar
9b80: 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  g4].      return
9b90: 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20   SQLITE_DENY.   
9ba0: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
9bb0: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
9bc0: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 41 54 54  tchsql {.    ATT
9bd0: 41 43 48 20 44 41 54 41 42 41 53 45 20 27 3a 6d  ACH DATABASE ':m
9be0: 65 6d 6f 72 79 3a 27 20 41 53 20 74 65 73 74 31  emory:' AS test1
9bf0: 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20  ;.  }.} {1 {not 
9c00: 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f  authorized}}.do_
9c10: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 35 34 20  test auth-1.254 
9c20: 7b 0a 20 20 6c 69 6e 64 65 78 20 5b 65 78 65 63  {.  lindex [exec
9c30: 73 71 6c 20 7b 50 52 41 47 4d 41 20 64 61 74 61  sql {PRAGMA data
9c40: 62 61 73 65 5f 6c 69 73 74 7d 5d 20 37 0a 7d 20  base_list}] 7.} 
9c50: 7b 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  {}.do_test auth-
9c60: 31 2e 32 35 35 20 7b 0a 20 20 63 61 74 63 68 73  1.255 {.  catchs
9c70: 71 6c 20 7b 44 45 54 41 43 48 20 44 41 54 41 42  ql {DETACH DATAB
9c80: 41 53 45 20 74 65 73 74 31 7d 0a 20 20 70 72 6f  ASE test1}.  pro
9c90: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
9ca0: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
9cb0: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
9cc0: 65 3d 3d 22 53 51 4c 49 54 45 5f 41 54 54 41 43  e=="SQLITE_ATTAC
9cd0: 48 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20  H"} {.      set 
9ce0: 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74  ::authargs [list
9cf0: 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72   $arg1 $arg2 $ar
9d00: 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20  g3 $arg4].      
9d10: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47  return SQLITE_IG
9d20: 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72  NORE.    }.    r
9d30: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
9d40: 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b    }.  catchsql {
9d50: 0a 20 20 20 20 41 54 54 41 43 48 20 44 41 54 41  .    ATTACH DATA
9d60: 42 41 53 45 20 27 3a 6d 65 6d 6f 72 79 3a 27 20  BASE ':memory:' 
9d70: 41 53 20 74 65 73 74 31 3b 0a 20 20 7d 0a 7d 20  AS test1;.  }.} 
9d80: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  {0 {}}.do_test a
9d90: 75 74 68 2d 31 2e 32 35 36 20 7b 0a 20 20 6c 69  uth-1.256 {.  li
9da0: 6e 64 65 78 20 5b 65 78 65 63 73 71 6c 20 7b 50  ndex [execsql {P
9db0: 52 41 47 4d 41 20 64 61 74 61 62 61 73 65 5f 6c  RAGMA database_l
9dc0: 69 73 74 7d 5d 20 37 0a 7d 20 7b 7d 0a 64 6f 5f  ist}] 7.} {}.do_
9dd0: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 35 37 20  test auth-1.257 
9de0: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
9df0: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
9e00: 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69  g3 arg4} {.    i
9e10: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
9e20: 45 5f 44 45 54 41 43 48 22 7d 20 7b 0a 20 20 20  E_DETACH"} {.   
9e30: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
9e40: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
9e50: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
9e60: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
9e70: 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20  LITE_OK.    }.  
9e80: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
9e90: 4f 4b 0a 20 20 7d 0a 20 20 65 78 65 63 73 71 6c  OK.  }.  execsql
9ea0: 20 7b 41 54 54 41 43 48 20 44 41 54 41 42 41 53   {ATTACH DATABAS
9eb0: 45 20 27 3a 6d 65 6d 6f 72 79 3a 27 20 41 53 20  E ':memory:' AS 
9ec0: 74 65 73 74 31 7d 0a 20 20 63 61 74 63 68 73 71  test1}.  catchsq
9ed0: 6c 20 7b 0a 20 20 20 20 44 45 54 41 43 48 20 44  l {.    DETACH D
9ee0: 41 54 41 42 41 53 45 20 74 65 73 74 31 3b 0a 20  ATABASE test1;. 
9ef0: 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74   }.} {0 {}}.do_t
9f00: 65 73 74 20 61 75 74 68 2d 31 2e 32 35 38 20 7b  est auth-1.258 {
9f10: 0a 20 20 6c 69 6e 64 65 78 20 5b 65 78 65 63 73  .  lindex [execs
9f20: 71 6c 20 7b 50 52 41 47 4d 41 20 64 61 74 61 62  ql {PRAGMA datab
9f30: 61 73 65 5f 6c 69 73 74 7d 5d 20 37 0a 7d 20 7b  ase_list}] 7.} {
9f40: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
9f50: 2e 32 35 39 20 7b 0a 20 20 65 78 65 63 73 71 6c  .259 {.  execsql
9f60: 20 7b 41 54 54 41 43 48 20 44 41 54 41 42 41 53   {ATTACH DATABAS
9f70: 45 20 27 3a 6d 65 6d 6f 72 79 3a 27 20 41 53 20  E ':memory:' AS 
9f80: 74 65 73 74 31 7d 0a 20 20 70 72 6f 63 20 61 75  test1}.  proc au
9f90: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
9fa0: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
9fb0: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
9fc0: 53 51 4c 49 54 45 5f 44 45 54 41 43 48 22 7d 20  SQLITE_DETACH"} 
9fd0: 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75  {.      set ::au
9fe0: 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72  thargs [list $ar
9ff0: 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24  g1 $arg2 $arg3 $
a000: 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75  arg4].      retu
a010: 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45  rn SQLITE_IGNORE
a020: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
a030: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
a040: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
a050: 20 44 45 54 41 43 48 20 44 41 54 41 42 41 53 45   DETACH DATABASE
a060: 20 74 65 73 74 31 3b 0a 20 20 7d 0a 7d 20 7b 30   test1;.  }.} {0
a070: 20 7b 7d 7d 0a 69 66 63 61 70 61 62 6c 65 20 74   {}}.ifcapable t
a080: 65 6d 70 64 62 20 7b 0a 20 20 69 66 63 61 70 61  empdb {.  ifcapa
a090: 62 6c 65 20 73 63 68 65 6d 61 5f 70 72 61 67 6d  ble schema_pragm
a0a0: 61 73 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 61  as {.  do_test a
a0b0: 75 74 68 2d 31 2e 32 36 30 20 7b 0a 20 20 20 20  uth-1.260 {.    
a0c0: 6c 69 6e 64 65 78 20 5b 65 78 65 63 73 71 6c 20  lindex [execsql 
a0d0: 7b 50 52 41 47 4d 41 20 64 61 74 61 62 61 73 65  {PRAGMA database
a0e0: 5f 6c 69 73 74 7d 5d 20 37 0a 20 20 7d 20 7b 74  _list}] 7.  } {t
a0f0: 65 73 74 31 7d 0a 20 20 7d 20 3b 23 20 69 66 63  est1}.  } ;# ifc
a100: 61 70 61 62 6c 65 20 73 63 68 65 6d 61 5f 70 72  apable schema_pr
a110: 61 67 6d 61 73 0a 20 20 64 6f 5f 74 65 73 74 20  agmas.  do_test 
a120: 61 75 74 68 2d 31 2e 32 36 31 20 7b 0a 20 20 20  auth-1.261 {.   
a130: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
a140: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
a150: 61 72 67 34 7d 20 7b 0a 20 20 20 20 20 20 69 66  arg4} {.      if
a160: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
a170: 5f 44 45 54 41 43 48 22 7d 20 7b 0a 20 20 20 20  _DETACH"} {.    
a180: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
a190: 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24  gs [list $arg1 $
a1a0: 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34  arg2 $arg3 $arg4
a1b0: 5d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ].        return
a1c0: 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20   SQLITE_DENY.   
a1d0: 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72     }.      retur
a1e0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20  n SQLITE_OK.    
a1f0: 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b  }.    catchsql {
a200: 0a 20 20 20 20 20 20 44 45 54 41 43 48 20 44 41  .      DETACH DA
a210: 54 41 42 41 53 45 20 74 65 73 74 31 3b 0a 20 20  TABASE test1;.  
a220: 20 20 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f 74 20    }.  } {1 {not 
a230: 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 20 20 69  authorized}}.  i
a240: 66 63 61 70 61 62 6c 65 20 73 63 68 65 6d 61 5f  fcapable schema_
a250: 70 72 61 67 6d 61 73 20 7b 0a 20 20 64 6f 5f 74  pragmas {.  do_t
a260: 65 73 74 20 61 75 74 68 2d 31 2e 32 36 32 20 7b  est auth-1.262 {
a270: 0a 20 20 20 20 6c 69 6e 64 65 78 20 5b 65 78 65  .    lindex [exe
a280: 63 73 71 6c 20 7b 50 52 41 47 4d 41 20 64 61 74  csql {PRAGMA dat
a290: 61 62 61 73 65 5f 6c 69 73 74 7d 5d 20 37 0a 20  abase_list}] 7. 
a2a0: 20 7d 20 7b 74 65 73 74 31 7d 0a 20 20 7d 20 3b   } {test1}.  } ;
a2b0: 23 20 69 66 63 61 70 61 62 6c 65 20 73 63 68 65  # ifcapable sche
a2c0: 6d 61 5f 70 72 61 67 6d 61 73 0a 20 20 64 62 20  ma_pragmas.  db 
a2d0: 61 75 74 68 6f 72 69 7a 65 72 20 7b 7d 0a 20 20  authorizer {}.  
a2e0: 65 78 65 63 73 71 6c 20 7b 44 45 54 41 43 48 20  execsql {DETACH 
a2f0: 44 41 54 41 42 41 53 45 20 74 65 73 74 31 7d 0a  DATABASE test1}.
a300: 20 20 64 62 20 61 75 74 68 6f 72 69 7a 65 72 20    db authorizer 
a310: 3a 3a 61 75 74 68 0a 20 20 0a 20 20 23 20 41 75  ::auth.  .  # Au
a320: 74 68 6f 72 69 7a 61 74 69 6f 6e 20 66 6f 72 20  thorization for 
a330: 41 4c 54 45 52 20 54 41 42 4c 45 2e 20 54 68 65  ALTER TABLE. The
a340: 73 65 20 74 65 73 74 73 20 61 72 65 20 6f 6d 69  se tests are omi
a350: 74 74 65 64 20 69 66 20 74 68 65 20 6c 69 62 72  tted if the libr
a360: 61 72 79 0a 20 20 23 20 77 61 73 20 62 75 69 6c  ary.  # was buil
a370: 74 20 77 69 74 68 6f 75 74 20 41 4c 54 45 52 20  t without ALTER 
a380: 54 41 42 4c 45 20 73 75 70 70 6f 72 74 2e 0a 20  TABLE support.. 
a390: 20 69 66 63 61 70 61 62 6c 65 20 61 6c 74 65 72   ifcapable alter
a3a0: 74 61 62 6c 65 20 7b 0a 20 20 0a 20 20 20 20 64  table {.  .    d
a3b0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 36  o_test auth-1.26
a3c0: 33 20 7b 0a 20 20 20 20 20 20 70 72 6f 63 20 61  3 {.      proc a
a3d0: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
a3e0: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
a3f0: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 63 6f  .        if {$co
a400: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 41 4c 54 45  de=="SQLITE_ALTE
a410: 52 5f 54 41 42 4c 45 22 7d 20 7b 0a 20 20 20 20  R_TABLE"} {.    
a420: 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68        set ::auth
a430: 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31  args [list $arg1
a440: 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72   $arg2 $arg3 $ar
a450: 67 34 5d 0a 20 20 20 20 20 20 20 20 20 20 72 65  g4].          re
a460: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
a470: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
a480: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
a490: 4b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  K.      }.      
a4a0: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20  catchsql {.     
a4b0: 20 20 20 41 4c 54 45 52 20 54 41 42 4c 45 20 74     ALTER TABLE t
a4c0: 31 20 52 45 4e 41 4d 45 20 54 4f 20 74 31 78 0a  1 RENAME TO t1x.
a4d0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 7b 30        }.    } {0
a4e0: 20 7b 7d 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74   {}}.    do_test
a4f0: 20 61 75 74 68 2d 31 2e 32 36 34 20 7b 0a 20 20   auth-1.264 {.  
a500: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c      execsql {SEL
a510: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
a520: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
a530: 20 57 48 45 52 45 20 74 79 70 65 3d 27 74 61 62   WHERE type='tab
a540: 6c 65 27 7d 0a 20 20 20 20 7d 20 7b 74 31 78 7d  le'}.    } {t1x}
a550: 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 61 75 74  .    do_test aut
a560: 68 2d 31 2e 32 36 35 20 7b 0a 20 20 20 20 20 20  h-1.265 {.      
a570: 73 65 74 20 61 75 74 68 61 72 67 73 0a 20 20 20  set authargs.   
a580: 20 7d 20 7b 74 65 6d 70 20 74 31 20 7b 7d 20 7b   } {temp t1 {} {
a590: 7d 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 61  }}.    do_test a
a5a0: 75 74 68 2d 31 2e 32 36 36 20 7b 0a 20 20 20 20  uth-1.266 {.    
a5b0: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
a5c0: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
a5d0: 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 20 20 20   arg4} {.       
a5e0: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
a5f0: 49 54 45 5f 41 4c 54 45 52 5f 54 41 42 4c 45 22  ITE_ALTER_TABLE"
a600: 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 73 65  } {.          se
a610: 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69  t ::authargs [li
a620: 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24  st $arg1 $arg2 $
a630: 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20  arg3 $arg4].    
a640: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
a650: 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 20  ITE_IGNORE.     
a660: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72 65 74     }.        ret
a670: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
a680: 20 20 20 20 7d 0a 20 20 20 20 20 20 63 61 74 63      }.      catc
a690: 68 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 41  hsql {.        A
a6a0: 4c 54 45 52 20 54 41 42 4c 45 20 74 31 78 20 52  LTER TABLE t1x R
a6b0: 45 4e 41 4d 45 20 54 4f 20 74 31 0a 20 20 20 20  ENAME TO t1.    
a6c0: 20 20 7d 0a 20 20 20 20 7d 20 7b 30 20 7b 7d 7d    }.    } {0 {}}
a6d0: 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 61 75 74  .    do_test aut
a6e0: 68 2d 31 2e 32 36 37 20 7b 0a 20 20 20 20 20 20  h-1.267 {.      
a6f0: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
a700: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
a710: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 20 57 48 45  _temp_master WHE
a720: 52 45 20 74 79 70 65 3d 27 74 61 62 6c 65 27 7d  RE type='table'}
a730: 0a 20 20 20 20 7d 20 7b 74 31 78 7d 0a 20 20 20  .    } {t1x}.   
a740: 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e   do_test auth-1.
a750: 32 36 38 20 7b 0a 20 20 20 20 20 20 73 65 74 20  268 {.      set 
a760: 61 75 74 68 61 72 67 73 0a 20 20 20 20 7d 20 7b  authargs.    } {
a770: 74 65 6d 70 20 74 31 78 20 7b 7d 20 7b 7d 7d 0a  temp t1x {} {}}.
a780: 20 20 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68      do_test auth
a790: 2d 31 2e 32 36 39 20 7b 0a 20 20 20 20 20 20 70  -1.269 {.      p
a7a0: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
a7b0: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
a7c0: 67 34 7d 20 7b 0a 20 20 20 20 20 20 20 20 69 66  g4} {.        if
a7d0: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
a7e0: 5f 41 4c 54 45 52 5f 54 41 42 4c 45 22 7d 20 7b  _ALTER_TABLE"} {
a7f0: 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 3a  .          set :
a800: 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20  :authargs [list 
a810: 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67  $arg1 $arg2 $arg
a820: 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 20  3 $arg4].       
a830: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
a840: 5f 44 45 4e 59 0a 20 20 20 20 20 20 20 20 7d 0a  _DENY.        }.
a850: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
a860: 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 20 20 7d  QLITE_OK.      }
a870: 0a 20 20 20 20 20 20 63 61 74 63 68 73 71 6c 20  .      catchsql 
a880: 7b 0a 20 20 20 20 20 20 20 20 41 4c 54 45 52 20  {.        ALTER 
a890: 54 41 42 4c 45 20 74 31 78 20 52 45 4e 41 4d 45  TABLE t1x RENAME
a8a0: 20 54 4f 20 74 31 0a 20 20 20 20 20 20 7d 0a 20   TO t1.      }. 
a8b0: 20 20 20 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74     } {1 {not aut
a8c0: 68 6f 72 69 7a 65 64 7d 7d 0a 20 20 20 20 64 6f  horized}}.    do
a8d0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 37 30  _test auth-1.270
a8e0: 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c   {.      execsql
a8f0: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
a900: 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  OM sqlite_temp_m
a910: 61 73 74 65 72 20 57 48 45 52 45 20 74 79 70 65  aster WHERE type
a920: 3d 27 74 61 62 6c 65 27 7d 0a 20 20 20 20 7d 20  ='table'}.    } 
a930: 7b 74 31 78 7d 0a 0a 20 20 20 20 64 6f 5f 74 65  {t1x}..    do_te
a940: 73 74 20 61 75 74 68 2d 31 2e 32 37 31 20 7b 0a  st auth-1.271 {.
a950: 20 20 20 20 20 20 73 65 74 20 61 75 74 68 61 72        set authar
a960: 67 73 0a 20 20 20 20 7d 20 7b 74 65 6d 70 20 74  gs.    } {temp t
a970: 31 78 20 7b 7d 20 7b 7d 7d 0a 20 20 7d 20 3b 23  1x {} {}}.  } ;#
a980: 20 69 66 63 61 70 61 62 6c 65 20 61 6c 74 65 72   ifcapable alter
a990: 74 61 62 6c 65 0a 0a 7d 20 65 6c 73 65 20 7b 0a  table..} else {.
a9a0: 20 20 64 62 20 61 75 74 68 6f 72 69 7a 65 72 20    db authorizer 
a9b0: 7b 7d 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20  {}.  db eval {. 
a9c0: 20 20 20 44 45 54 41 43 48 20 44 41 54 41 42 41     DETACH DATABA
a9d0: 53 45 20 74 65 73 74 31 3b 0a 20 20 7d 0a 7d 0a  SE test1;.  }.}.
a9e0: 0a 69 66 63 61 70 61 62 6c 65 20 20 61 6c 74 65  .ifcapable  alte
a9f0: 72 74 61 62 6c 65 20 7b 0a 64 62 20 61 75 74 68  rtable {.db auth
aa00: 6f 72 69 7a 65 72 20 7b 7d 0a 63 61 74 63 68 73  orizer {}.catchs
aa10: 71 6c 20 7b 41 4c 54 45 52 20 54 41 42 4c 45 20  ql {ALTER TABLE 
aa20: 74 31 78 20 52 45 4e 41 4d 45 20 54 4f 20 74 31  t1x RENAME TO t1
aa30: 7d 0a 64 62 20 61 75 74 68 6f 72 69 7a 65 72 20  }.db authorizer 
aa40: 3a 3a 61 75 74 68 0a 64 6f 5f 74 65 73 74 20 61  ::auth.do_test a
aa50: 75 74 68 2d 31 2e 32 37 32 20 7b 0a 20 20 70 72  uth-1.272 {.  pr
aa60: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
aa70: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
aa80: 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f  4} {.    if {$co
aa90: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 41 4c 54 45  de=="SQLITE_ALTE
aaa0: 52 5f 54 41 42 4c 45 22 7d 20 7b 0a 20 20 20 20  R_TABLE"} {.    
aab0: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
aac0: 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72   [list $arg1 $ar
aad0: 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a  g2 $arg3 $arg4].
aae0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
aaf0: 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20  ITE_OK.    }.   
ab00: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
ab10: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
ab20: 20 7b 0a 20 20 20 20 41 4c 54 45 52 20 54 41 42   {.    ALTER TAB
ab30: 4c 45 20 74 32 20 52 45 4e 41 4d 45 20 54 4f 20  LE t2 RENAME TO 
ab40: 74 32 78 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d  t2x.  }.} {0 {}}
ab50: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
ab60: 32 37 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  273 {.  execsql 
ab70: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
ab80: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  M sqlite_master 
ab90: 57 48 45 52 45 20 74 79 70 65 3d 27 74 61 62 6c  WHERE type='tabl
aba0: 65 27 7d 0a 7d 20 7b 74 32 78 7d 0a 64 6f 5f 74  e'}.} {t2x}.do_t
abb0: 65 73 74 20 61 75 74 68 2d 31 2e 32 37 34 20 7b  est auth-1.274 {
abc0: 0a 20 20 73 65 74 20 61 75 74 68 61 72 67 73 0a  .  set authargs.
abd0: 7d 20 7b 6d 61 69 6e 20 74 32 20 7b 7d 20 7b 7d  } {main t2 {} {}
abe0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
abf0: 2e 32 37 35 20 7b 0a 20 20 70 72 6f 63 20 61 75  .275 {.  proc au
ac00: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
ac10: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
ac20: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
ac30: 53 51 4c 49 54 45 5f 41 4c 54 45 52 5f 54 41 42  SQLITE_ALTER_TAB
ac40: 4c 45 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74  LE"} {.      set
ac50: 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73   ::authargs [lis
ac60: 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61  t $arg1 $arg2 $a
ac70: 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20  rg3 $arg4].     
ac80: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49   return SQLITE_I
ac90: 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20  GNORE.    }.    
aca0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
acb0: 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20  .  }.  catchsql 
acc0: 7b 0a 20 20 20 20 41 4c 54 45 52 20 54 41 42 4c  {.    ALTER TABL
acd0: 45 20 74 32 78 20 52 45 4e 41 4d 45 20 54 4f 20  E t2x RENAME TO 
ace0: 74 32 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a  t2.  }.} {0 {}}.
acf0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
ad00: 37 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  76 {.  execsql {
ad10: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
ad20: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57   sqlite_master W
ad30: 48 45 52 45 20 74 79 70 65 3d 27 74 61 62 6c 65  HERE type='table
ad40: 27 7d 0a 7d 20 7b 74 32 78 7d 0a 64 6f 5f 74 65  '}.} {t2x}.do_te
ad50: 73 74 20 61 75 74 68 2d 31 2e 32 37 37 20 7b 0a  st auth-1.277 {.
ad60: 20 20 73 65 74 20 61 75 74 68 61 72 67 73 0a 7d    set authargs.}
ad70: 20 7b 6d 61 69 6e 20 74 32 78 20 7b 7d 20 7b 7d   {main t2x {} {}
ad80: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
ad90: 2e 32 37 38 20 7b 0a 20 20 70 72 6f 63 20 61 75  .278 {.  proc au
ada0: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
adb0: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
adc0: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
add0: 53 51 4c 49 54 45 5f 41 4c 54 45 52 5f 54 41 42  SQLITE_ALTER_TAB
ade0: 4c 45 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74  LE"} {.      set
adf0: 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73   ::authargs [lis
ae00: 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61  t $arg1 $arg2 $a
ae10: 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20  rg3 $arg4].     
ae20: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44   return SQLITE_D
ae30: 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  ENY.    }.    re
ae40: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
ae50: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a   }.  catchsql {.
ae60: 20 20 20 20 41 4c 54 45 52 20 54 41 42 4c 45 20      ALTER TABLE 
ae70: 74 32 78 20 52 45 4e 41 4d 45 20 54 4f 20 74 32  t2x RENAME TO t2
ae80: 0a 20 20 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61  .  }.} {1 {not a
ae90: 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74  uthorized}}.do_t
aea0: 65 73 74 20 61 75 74 68 2d 31 2e 32 37 39 20 7b  est auth-1.279 {
aeb0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
aec0: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
aed0: 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45  ite_master WHERE
aee0: 20 74 79 70 65 3d 27 74 61 62 6c 65 27 7d 0a 7d   type='table'}.}
aef0: 20 7b 74 32 78 7d 0a 64 6f 5f 74 65 73 74 20 61   {t2x}.do_test a
af00: 75 74 68 2d 31 2e 32 38 30 20 7b 0a 20 20 73 65  uth-1.280 {.  se
af10: 74 20 61 75 74 68 61 72 67 73 0a 7d 20 7b 6d 61  t authargs.} {ma
af20: 69 6e 20 74 32 78 20 7b 7d 20 7b 7d 7d 0a 64 62  in t2x {} {}}.db
af30: 20 61 75 74 68 6f 72 69 7a 65 72 20 7b 7d 0a 63   authorizer {}.c
af40: 61 74 63 68 73 71 6c 20 7b 41 4c 54 45 52 20 54  atchsql {ALTER T
af50: 41 42 4c 45 20 74 32 78 20 52 45 4e 41 4d 45 20  ABLE t2x RENAME 
af60: 54 4f 20 74 32 7d 0a 0a 7d 20 3b 23 20 69 66 63  TO t2}..} ;# ifc
af70: 61 70 61 62 6c 65 20 61 6c 74 65 72 74 61 62 6c  apable altertabl
af80: 65 0a 0a 23 20 54 65 73 74 20 74 68 65 20 61 75  e..# Test the au
af90: 74 68 6f 72 69 7a 61 74 69 6f 6e 20 63 61 6c 6c  thorization call
afa0: 62 61 63 6b 73 20 66 6f 72 20 74 68 65 20 52 45  backs for the RE
afb0: 49 4e 44 45 58 20 63 6f 6d 6d 61 6e 64 2e 0a 69  INDEX command..i
afc0: 66 63 61 70 61 62 6c 65 20 72 65 69 6e 64 65 78  fcapable reindex
afd0: 20 7b 0a 0a 70 72 6f 63 20 61 75 74 68 20 7b 63   {..proc auth {c
afe0: 6f 64 65 20 61 72 67 73 7d 20 7b 0a 20 20 69 66  ode args} {.  if
aff0: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
b000: 5f 52 45 49 4e 44 45 58 22 7d 20 7b 0a 20 20 20  _REINDEX"} {.   
b010: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
b020: 5b 63 6f 6e 63 61 74 20 24 3a 3a 61 75 74 68 61  [concat $::autha
b030: 72 67 73 20 24 61 72 67 73 5d 0a 20 20 7d 0a 20  rgs $args].  }. 
b040: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
b050: 4b 0a 7d 0a 64 62 20 61 75 74 68 6f 72 69 7a 65  K.}.db authorize
b060: 72 20 61 75 74 68 0a 64 6f 5f 74 65 73 74 20 61  r auth.do_test a
b070: 75 74 68 2d 31 2e 32 38 31 20 7b 0a 20 20 65 78  uth-1.281 {.  ex
b080: 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41  ecsql {.    CREA
b090: 54 45 20 54 41 42 4c 45 20 74 33 28 61 20 50 52  TE TABLE t3(a PR
b0a0: 49 4d 41 52 59 20 4b 45 59 2c 20 62 2c 20 63 29  IMARY KEY, b, c)
b0b0: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e 44  ;.    CREATE IND
b0c0: 45 58 20 74 33 5f 69 64 78 31 20 4f 4e 20 74 33  EX t3_idx1 ON t3
b0d0: 28 63 20 43 4f 4c 4c 41 54 45 20 42 49 4e 41 52  (c COLLATE BINAR
b0e0: 59 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 49  Y);.    CREATE I
b0f0: 4e 44 45 58 20 74 33 5f 69 64 78 32 20 4f 4e 20  NDEX t3_idx2 ON 
b100: 74 33 28 62 20 43 4f 4c 4c 41 54 45 20 4e 4f 43  t3(b COLLATE NOC
b110: 41 53 45 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64  ASE);.  }.} {}.d
b120: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 38  o_test auth-1.28
b130: 32 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68  2 {.  set ::auth
b140: 61 72 67 73 20 7b 7d 0a 20 20 65 78 65 63 73 71  args {}.  execsq
b150: 6c 20 7b 0a 20 20 20 20 52 45 49 4e 44 45 58 20  l {.    REINDEX 
b160: 74 33 5f 69 64 78 31 3b 0a 20 20 7d 0a 20 20 73  t3_idx1;.  }.  s
b170: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20  et ::authargs.} 
b180: 7b 74 33 5f 69 64 78 31 20 7b 7d 20 6d 61 69 6e  {t3_idx1 {} main
b190: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
b1a0: 68 2d 31 2e 32 38 33 20 7b 0a 20 20 73 65 74 20  h-1.283 {.  set 
b1b0: 3a 3a 61 75 74 68 61 72 67 73 20 7b 7d 0a 20 20  ::authargs {}.  
b1c0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 52 45  execsql {.    RE
b1d0: 49 4e 44 45 58 20 42 49 4e 41 52 59 3b 0a 20 20  INDEX BINARY;.  
b1e0: 7d 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72  }.  set ::authar
b1f0: 67 73 0a 7d 20 7b 74 33 5f 69 64 78 31 20 7b 7d  gs.} {t3_idx1 {}
b200: 20 6d 61 69 6e 20 7b 7d 20 73 71 6c 69 74 65 5f   main {} sqlite_
b210: 61 75 74 6f 69 6e 64 65 78 5f 74 33 5f 31 20 7b  autoindex_t3_1 {
b220: 7d 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65  } main {}}.do_te
b230: 73 74 20 61 75 74 68 2d 31 2e 32 38 34 20 7b 0a  st auth-1.284 {.
b240: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
b250: 20 7b 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a   {}.  execsql {.
b260: 20 20 20 20 52 45 49 4e 44 45 58 20 4e 4f 43 41      REINDEX NOCA
b270: 53 45 3b 0a 20 20 7d 0a 20 20 73 65 74 20 3a 3a  SE;.  }.  set ::
b280: 61 75 74 68 61 72 67 73 0a 7d 20 7b 74 33 5f 69  authargs.} {t3_i
b290: 64 78 32 20 7b 7d 20 6d 61 69 6e 20 7b 7d 7d 0a  dx2 {} main {}}.
b2a0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
b2b0: 38 35 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74  85 {.  set ::aut
b2c0: 68 61 72 67 73 20 7b 7d 0a 20 20 65 78 65 63 73  hargs {}.  execs
b2d0: 71 6c 20 7b 0a 20 20 20 20 52 45 49 4e 44 45 58  ql {.    REINDEX
b2e0: 20 74 33 3b 0a 20 20 7d 0a 20 20 73 65 74 20 3a   t3;.  }.  set :
b2f0: 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 74 33 5f  :authargs.} {t3_
b300: 69 64 78 32 20 7b 7d 20 6d 61 69 6e 20 7b 7d 20  idx2 {} main {} 
b310: 74 33 5f 69 64 78 31 20 7b 7d 20 6d 61 69 6e 20  t3_idx1 {} main 
b320: 7b 7d 20 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e  {} sqlite_autoin
b330: 64 65 78 5f 74 33 5f 31 20 7b 7d 20 6d 61 69 6e  dex_t3_1 {} main
b340: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
b350: 68 2d 31 2e 32 38 36 20 7b 0a 20 20 65 78 65 63  h-1.286 {.  exec
b360: 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20 54  sql {.    DROP T
b370: 41 42 4c 45 20 74 33 3b 0a 20 20 7d 0a 7d 20 7b  ABLE t3;.  }.} {
b380: 7d 0a 69 66 63 61 70 61 62 6c 65 20 74 65 6d 70  }.ifcapable temp
b390: 64 62 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 61  db {.  do_test a
b3a0: 75 74 68 2d 31 2e 32 38 37 20 7b 0a 20 20 20 20  uth-1.287 {.    
b3b0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
b3c0: 43 52 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c  CREATE TEMP TABL
b3d0: 45 20 74 33 28 61 20 50 52 49 4d 41 52 59 20 4b  E t3(a PRIMARY K
b3e0: 45 59 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20 20  EY, b, c);.     
b3f0: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 74 33   CREATE INDEX t3
b400: 5f 69 64 78 31 20 4f 4e 20 74 33 28 63 20 43 4f  _idx1 ON t3(c CO
b410: 4c 4c 41 54 45 20 42 49 4e 41 52 59 29 3b 0a 20  LLATE BINARY);. 
b420: 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45       CREATE INDE
b430: 58 20 74 33 5f 69 64 78 32 20 4f 4e 20 74 33 28  X t3_idx2 ON t3(
b440: 62 20 43 4f 4c 4c 41 54 45 20 4e 4f 43 41 53 45  b COLLATE NOCASE
b450: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a  );.    }.  } {}.
b460: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31    do_test auth-1
b470: 2e 32 38 38 20 7b 0a 20 20 20 20 73 65 74 20 3a  .288 {.    set :
b480: 3a 61 75 74 68 61 72 67 73 20 7b 7d 0a 20 20 20  :authargs {}.   
b490: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
b4a0: 20 52 45 49 4e 44 45 58 20 74 65 6d 70 2e 74 33   REINDEX temp.t3
b4b0: 5f 69 64 78 31 3b 0a 20 20 20 20 7d 0a 20 20 20  _idx1;.    }.   
b4c0: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a   set ::authargs.
b4d0: 20 20 7d 20 7b 74 33 5f 69 64 78 31 20 7b 7d 20    } {t3_idx1 {} 
b4e0: 74 65 6d 70 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65  temp {}}.  do_te
b4f0: 73 74 20 61 75 74 68 2d 31 2e 32 38 39 20 7b 0a  st auth-1.289 {.
b500: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
b510: 67 73 20 7b 7d 0a 20 20 20 20 65 78 65 63 73 71  gs {}.    execsq
b520: 6c 20 7b 0a 20 20 20 20 20 20 52 45 49 4e 44 45  l {.      REINDE
b530: 58 20 42 49 4e 41 52 59 3b 0a 20 20 20 20 7d 0a  X BINARY;.    }.
b540: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
b550: 67 73 0a 20 20 7d 20 7b 74 33 5f 69 64 78 31 20  gs.  } {t3_idx1 
b560: 7b 7d 20 74 65 6d 70 20 7b 7d 20 73 71 6c 69 74  {} temp {} sqlit
b570: 65 5f 61 75 74 6f 69 6e 64 65 78 5f 74 33 5f 31  e_autoindex_t3_1
b580: 20 7b 7d 20 74 65 6d 70 20 7b 7d 7d 0a 20 20 64   {} temp {}}.  d
b590: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 39  o_test auth-1.29
b5a0: 30 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a 61 75  0 {.    set ::au
b5b0: 74 68 61 72 67 73 20 7b 7d 0a 20 20 20 20 65 78  thargs {}.    ex
b5c0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 52 45  ecsql {.      RE
b5d0: 49 4e 44 45 58 20 4e 4f 43 41 53 45 3b 0a 20 20  INDEX NOCASE;.  
b5e0: 20 20 7d 0a 20 20 20 20 73 65 74 20 3a 3a 61 75    }.    set ::au
b5f0: 74 68 61 72 67 73 0a 20 20 7d 20 7b 74 33 5f 69  thargs.  } {t3_i
b600: 64 78 32 20 7b 7d 20 74 65 6d 70 20 7b 7d 7d 0a  dx2 {} temp {}}.
b610: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31    do_test auth-1
b620: 2e 32 39 31 20 7b 0a 20 20 20 20 73 65 74 20 3a  .291 {.    set :
b630: 3a 61 75 74 68 61 72 67 73 20 7b 7d 0a 20 20 20  :authargs {}.   
b640: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
b650: 20 52 45 49 4e 44 45 58 20 74 65 6d 70 2e 74 33   REINDEX temp.t3
b660: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 74 20  ;.    }.    set 
b670: 3a 3a 61 75 74 68 61 72 67 73 0a 20 20 7d 20 7b  ::authargs.  } {
b680: 74 33 5f 69 64 78 32 20 7b 7d 20 74 65 6d 70 20  t3_idx2 {} temp 
b690: 7b 7d 20 74 33 5f 69 64 78 31 20 7b 7d 20 74 65  {} t3_idx1 {} te
b6a0: 6d 70 20 7b 7d 20 73 71 6c 69 74 65 5f 61 75 74  mp {} sqlite_aut
b6b0: 6f 69 6e 64 65 78 5f 74 33 5f 31 20 7b 7d 20 74  oindex_t3_1 {} t
b6c0: 65 6d 70 20 7b 7d 7d 0a 20 20 70 72 6f 63 20 61  emp {}}.  proc a
b6d0: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 73 7d 20  uth {code args} 
b6e0: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
b6f0: 3d 22 53 51 4c 49 54 45 5f 52 45 49 4e 44 45 58  ="SQLITE_REINDEX
b700: 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a  "} {.      set :
b710: 3a 61 75 74 68 61 72 67 73 20 5b 63 6f 6e 63 61  :authargs [conca
b720: 74 20 24 3a 3a 61 75 74 68 61 72 67 73 20 24 61  t $::authargs $a
b730: 72 67 73 5d 0a 20 20 20 20 20 20 72 65 74 75 72  rgs].      retur
b740: 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20  n SQLITE_DENY.  
b750: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
b760: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 64  QLITE_OK.  }.  d
b770: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 39  o_test auth-1.29
b780: 32 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a 61 75  2 {.    set ::au
b790: 74 68 61 72 67 73 20 7b 7d 0a 20 20 20 20 63 61  thargs {}.    ca
b7a0: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20 52  tchsql {.      R
b7b0: 45 49 4e 44 45 58 20 74 65 6d 70 2e 74 33 3b 0a  EINDEX temp.t3;.
b7c0: 20 20 20 20 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f      }.  } {1 {no
b7d0: 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 20  t authorized}}. 
b7e0: 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e   do_test auth-1.
b7f0: 32 39 33 20 7b 0a 20 20 20 20 65 78 65 63 73 71  293 {.    execsq
b800: 6c 20 7b 0a 20 20 20 20 20 20 44 52 4f 50 20 54  l {.      DROP T
b810: 41 42 4c 45 20 74 33 3b 0a 20 20 20 20 7d 0a 20  ABLE t3;.    }. 
b820: 20 7d 20 7b 7d 0a 7d 0a 0a 7d 20 3b 23 20 69 66   } {}.}..} ;# if
b830: 63 61 70 61 62 6c 65 20 72 65 69 6e 64 65 78 20  capable reindex 
b840: 0a 0a 69 66 63 61 70 61 62 6c 65 20 61 6e 61 6c  ..ifcapable anal
b850: 79 7a 65 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  yze {.  proc aut
b860: 68 20 7b 63 6f 64 65 20 61 72 67 73 7d 20 7b 0a  h {code args} {.
b870: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
b880: 53 51 4c 49 54 45 5f 41 4e 41 4c 59 5a 45 22 7d  SQLITE_ANALYZE"}
b890: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61   {.      set ::a
b8a0: 75 74 68 61 72 67 73 20 5b 63 6f 6e 63 61 74 20  uthargs [concat 
b8b0: 24 3a 3a 61 75 74 68 61 72 67 73 20 24 61 72 67  $::authargs $arg
b8c0: 73 5d 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  s].    }.    ret
b8d0: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
b8e0: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68  }.  do_test auth
b8f0: 2d 31 2e 32 39 34 20 7b 0a 20 20 20 20 73 65 74  -1.294 {.    set
b900: 20 3a 3a 61 75 74 68 61 72 67 73 20 7b 7d 0a 20   ::authargs {}. 
b910: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
b920: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
b930: 74 34 28 61 2c 62 2c 63 29 3b 0a 20 20 20 20 20  t4(a,b,c);.     
b940: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 74 34   CREATE INDEX t4
b950: 69 31 20 4f 4e 20 74 34 28 61 29 3b 0a 20 20 20  i1 ON t4(a);.   
b960: 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20     CREATE INDEX 
b970: 74 34 69 32 20 4f 4e 20 74 34 28 62 2c 61 2c 63  t4i2 ON t4(b,a,c
b980: 29 3b 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20  );.      INSERT 
b990: 49 4e 54 4f 20 74 34 20 56 41 4c 55 45 53 28 31  INTO t4 VALUES(1
b9a0: 2c 32 2c 33 29 3b 0a 20 20 20 20 20 20 41 4e 41  ,2,3);.      ANA
b9b0: 4c 59 5a 45 3b 0a 20 20 20 20 7d 0a 20 20 20 20  LYZE;.    }.    
b9c0: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 20  set ::authargs. 
b9d0: 20 7d 20 7b 74 34 20 7b 7d 20 6d 61 69 6e 20 7b   } {t4 {} main {
b9e0: 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74  }}.  do_test aut
b9f0: 68 2d 31 2e 32 39 35 20 7b 0a 20 20 20 20 65 78  h-1.295 {.    ex
ba00: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 53 45  ecsql {.      SE
ba10: 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52  LECT count(*) FR
ba20: 4f 4d 20 73 71 6c 69 74 65 5f 73 74 61 74 31 3b  OM sqlite_stat1;
ba30: 0a 20 20 20 20 7d 0a 20 20 7d 20 32 0a 20 20 70  .    }.  } 2.  p
ba40: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
ba50: 72 67 73 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rgs} {.    if {$
ba60: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 41 4e  code=="SQLITE_AN
ba70: 41 4c 59 5a 45 22 7d 20 7b 0a 20 20 20 20 20 20  ALYZE"} {.      
ba80: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b  set ::authargs [
ba90: 63 6f 6e 63 61 74 20 24 3a 3a 61 75 74 68 61 72  concat $::authar
baa0: 67 73 20 24 61 72 67 73 5d 0a 20 20 20 20 20 20  gs $args].      
bab0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45  return SQLITE_DE
bac0: 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  NY.    }.    ret
bad0: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
bae0: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68  }.  do_test auth
baf0: 2d 31 2e 32 39 36 20 7b 0a 20 20 20 20 73 65 74  -1.296 {.    set
bb00: 20 3a 3a 61 75 74 68 61 72 67 73 20 7b 7d 0a 20   ::authargs {}. 
bb10: 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20     catchsql {.  
bb20: 20 20 20 20 41 4e 41 4c 59 5a 45 3b 0a 20 20 20      ANALYZE;.   
bb30: 20 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f 74 20 61   }.  } {1 {not a
bb40: 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 20 20 64 6f  uthorized}}.  do
bb50: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 39 37  _test auth-1.297
bb60: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
bb70: 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 63 6f  .      SELECT co
bb80: 75 6e 74 28 2a 29 20 46 52 4f 4d 20 73 71 6c 69  unt(*) FROM sqli
bb90: 74 65 5f 73 74 61 74 31 3b 0a 20 20 20 20 7d 0a  te_stat1;.    }.
bba0: 20 20 7d 20 32 0a 7d 20 3b 23 20 69 66 63 61 70    } 2.} ;# ifcap
bbb0: 61 62 6c 65 20 61 6e 61 6c 79 7a 65 0a 0a 0a 23  able analyze...#
bbc0: 20 41 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 66   Authorization f
bbd0: 6f 72 20 41 4c 54 45 52 20 54 41 42 4c 45 20 41  or ALTER TABLE A
bbe0: 44 44 20 43 4f 4c 55 4d 4e 2e 0a 23 20 54 68 65  DD COLUMN..# The
bbf0: 73 65 20 74 65 73 74 73 20 61 72 65 20 6f 6d 69  se tests are omi
bc00: 74 74 65 64 20 69 66 20 74 68 65 20 6c 69 62 72  tted if the libr
bc10: 61 72 79 0a 23 20 77 61 73 20 62 75 69 6c 74 20  ary.# was built 
bc20: 77 69 74 68 6f 75 74 20 41 4c 54 45 52 20 54 41  without ALTER TA
bc30: 42 4c 45 20 73 75 70 70 6f 72 74 2e 0a 69 66 63  BLE support..ifc
bc40: 61 70 61 62 6c 65 20 7b 61 6c 74 65 72 74 61 62  apable {altertab
bc50: 6c 65 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  le} {.  do_test 
bc60: 61 75 74 68 2d 31 2e 33 30 30 20 7b 0a 20 20 20  auth-1.300 {.   
bc70: 20 65 78 65 63 73 71 6c 20 7b 43 52 45 41 54 45   execsql {CREATE
bc80: 20 54 41 42 4c 45 20 74 35 28 78 29 7d 0a 20 20   TABLE t5(x)}.  
bc90: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
bca0: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
bcb0: 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 20 20 69   arg4} {.      i
bcc0: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
bcd0: 45 5f 41 4c 54 45 52 5f 54 41 42 4c 45 22 7d 20  E_ALTER_TABLE"} 
bce0: 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a  {.        set ::
bcf0: 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24  authargs [list $
bd00: 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33  arg1 $arg2 $arg3
bd10: 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 20 20   $arg4].        
bd20: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
bd30: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72  .      }.      r
bd40: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
bd50: 20 20 20 20 7d 0a 20 20 20 20 63 61 74 63 68 73      }.    catchs
bd60: 71 6c 20 7b 0a 20 20 20 20 20 20 41 4c 54 45 52  ql {.      ALTER
bd70: 20 54 41 42 4c 45 20 74 35 20 41 44 44 20 43 4f   TABLE t5 ADD CO
bd80: 4c 55 4d 4e 20 6e 65 77 5f 63 6f 6c 5f 31 3b 0a  LUMN new_col_1;.
bd90: 20 20 20 20 7d 0a 20 20 7d 20 7b 30 20 7b 7d 7d      }.  } {0 {}}
bda0: 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  .  do_test auth-
bdb0: 31 2e 33 30 31 20 7b 0a 20 20 20 20 73 65 74 20  1.301 {.    set 
bdc0: 78 20 5b 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  x [execsql {SELE
bdd0: 43 54 20 73 71 6c 20 46 52 4f 4d 20 73 71 6c 69  CT sql FROM sqli
bde0: 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20  te_master WHERE 
bdf0: 6e 61 6d 65 3d 27 74 35 27 7d 5d 0a 20 20 20 20  name='t5'}].    
be00: 72 65 67 65 78 70 20 6e 65 77 5f 63 6f 6c 5f 31  regexp new_col_1
be10: 20 24 78 0a 20 20 7d 20 7b 31 7d 0a 20 20 64 6f   $x.  } {1}.  do
be20: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 33 30 32  _test auth-1.302
be30: 20 7b 0a 20 20 20 20 73 65 74 20 61 75 74 68 61   {.    set autha
be40: 72 67 73 0a 20 20 7d 20 7b 6d 61 69 6e 20 74 35  rgs.  } {main t5
be50: 20 7b 7d 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73   {} {}}.  do_tes
be60: 74 20 61 75 74 68 2d 31 2e 33 30 33 20 7b 0a 20  t auth-1.303 {. 
be70: 20 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f     proc auth {co
be80: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
be90: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 20 20  3 arg4} {.      
bea0: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
beb0: 54 45 5f 41 4c 54 45 52 5f 54 41 42 4c 45 22 7d  TE_ALTER_TABLE"}
bec0: 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 3a   {.        set :
bed0: 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20  :authargs [list 
bee0: 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67  $arg1 $arg2 $arg
bef0: 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 20  3 $arg4].       
bf00: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49   return SQLITE_I
bf10: 47 4e 4f 52 45 0a 20 20 20 20 20 20 7d 0a 20 20  GNORE.      }.  
bf20: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
bf30: 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63  E_OK.    }.    c
bf40: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20  atchsql {.      
bf50: 41 4c 54 45 52 20 54 41 42 4c 45 20 74 35 20 41  ALTER TABLE t5 A
bf60: 44 44 20 43 4f 4c 55 4d 4e 20 6e 65 77 5f 63 6f  DD COLUMN new_co
bf70: 6c 5f 32 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  l_2;.    }.  } {
bf80: 30 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20  0 {}}.  do_test 
bf90: 61 75 74 68 2d 31 2e 33 30 34 20 7b 0a 20 20 20  auth-1.304 {.   
bfa0: 20 73 65 74 20 78 20 5b 65 78 65 63 73 71 6c 20   set x [execsql 
bfb0: 7b 53 45 4c 45 43 54 20 73 71 6c 20 46 52 4f 4d  {SELECT sql FROM
bfc0: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57   sqlite_master W
bfd0: 48 45 52 45 20 6e 61 6d 65 3d 27 74 35 27 7d 5d  HERE name='t5'}]
bfe0: 0a 20 20 20 20 72 65 67 65 78 70 20 6e 65 77 5f  .    regexp new_
bff0: 63 6f 6c 5f 32 20 24 78 0a 20 20 7d 20 7b 30 7d  col_2 $x.  } {0}
c000: 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  .  do_test auth-
c010: 31 2e 33 30 35 20 7b 0a 20 20 20 20 73 65 74 20  1.305 {.    set 
c020: 61 75 74 68 61 72 67 73 0a 20 20 7d 20 7b 6d 61  authargs.  } {ma
c030: 69 6e 20 74 35 20 7b 7d 20 7b 7d 7d 0a 20 20 64  in t5 {} {}}.  d
c040: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 33 30  o_test auth-1.30
c050: 36 20 7b 0a 20 20 20 20 70 72 6f 63 20 61 75 74  6 {.    proc aut
c060: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
c070: 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20  2 arg3 arg4} {. 
c080: 20 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d       if {$code==
c090: 22 53 51 4c 49 54 45 5f 41 4c 54 45 52 5f 54 41  "SQLITE_ALTER_TA
c0a0: 42 4c 45 22 7d 20 7b 0a 20 20 20 20 20 20 20 20  BLE"} {.        
c0b0: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b  set ::authargs [
c0c0: 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67 32  list $arg1 $arg2
c0d0: 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20   $arg3 $arg4].  
c0e0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
c0f0: 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 20 20 7d  ITE_DENY.      }
c100: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
c110: 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20  LITE_OK.    }.  
c120: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
c130: 20 20 20 41 4c 54 45 52 20 54 41 42 4c 45 20 74     ALTER TABLE t
c140: 35 20 41 44 44 20 43 4f 4c 55 4d 4e 20 6e 65 77  5 ADD COLUMN new
c150: 5f 63 6f 6c 5f 33 0a 20 20 20 20 7d 0a 20 20 7d  _col_3.    }.  }
c160: 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69   {1 {not authori
c170: 7a 65 64 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20  zed}}.  do_test 
c180: 61 75 74 68 2d 31 2e 33 30 37 20 7b 0a 20 20 20  auth-1.307 {.   
c190: 20 73 65 74 20 78 20 5b 65 78 65 63 73 71 6c 20   set x [execsql 
c1a0: 7b 53 45 4c 45 43 54 20 73 71 6c 20 46 52 4f 4d  {SELECT sql FROM
c1b0: 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73   sqlite_temp_mas
c1c0: 74 65 72 20 57 48 45 52 45 20 74 79 70 65 3d 27  ter WHERE type='
c1d0: 74 35 27 7d 5d 0a 20 20 20 20 72 65 67 65 78 70  t5'}].    regexp
c1e0: 20 6e 65 77 5f 63 6f 6c 5f 33 20 24 78 0a 20 20   new_col_3 $x.  
c1f0: 7d 20 7b 30 7d 0a 0a 20 20 64 6f 5f 74 65 73 74  } {0}..  do_test
c200: 20 61 75 74 68 2d 31 2e 33 30 38 20 7b 0a 20 20   auth-1.308 {.  
c210: 20 20 73 65 74 20 61 75 74 68 61 72 67 73 0a 20    set authargs. 
c220: 20 7d 20 7b 6d 61 69 6e 20 74 35 20 7b 7d 20 7b   } {main t5 {} {
c230: 7d 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 44 52  }}.  execsql {DR
c240: 4f 50 20 54 41 42 4c 45 20 74 35 7d 0a 7d 20 3b  OP TABLE t5}.} ;
c250: 23 20 69 66 63 61 70 61 62 6c 65 20 61 6c 74 65  # ifcapable alte
c260: 72 74 61 62 6c 65 0a 0a 64 6f 5f 74 65 73 74 20  rtable..do_test 
c270: 61 75 74 68 2d 32 2e 31 20 7b 0a 20 20 70 72 6f  auth-2.1 {.  pro
c280: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
c290: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
c2a0: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
c2b0: 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45 41 44 22  e=="SQLITE_READ"
c2c0: 20 26 26 20 24 61 72 67 31 3d 3d 22 74 33 22 20   && $arg1=="t3" 
c2d0: 26 26 20 24 61 72 67 32 3d 3d 22 78 22 7d 20 7b  && $arg2=="x"} {
c2e0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
c2f0: 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a  LITE_DENY.    }.
c300: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
c310: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 64 62 20 61 75  E_OK.  }.  db au
c320: 74 68 6f 72 69 7a 65 72 20 3a 3a 61 75 74 68 0a  thorizer ::auth.
c330: 20 20 65 78 65 63 73 71 6c 20 7b 43 52 45 41 54    execsql {CREAT
c340: 45 20 54 41 42 4c 45 20 74 33 28 78 20 49 4e 54  E TABLE t3(x INT
c350: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
c360: 2c 20 79 2c 20 7a 29 7d 0a 20 20 63 61 74 63 68  , y, z)}.  catch
c370: 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52  sql {SELECT * FR
c380: 4f 4d 20 74 33 7d 0a 7d 20 7b 31 20 7b 61 63 63  OM t3}.} {1 {acc
c390: 65 73 73 20 74 6f 20 74 33 2e 78 20 69 73 20 70  ess to t3.x is p
c3a0: 72 6f 68 69 62 69 74 65 64 7d 7d 0a 64 6f 5f 74  rohibited}}.do_t
c3b0: 65 73 74 20 61 75 74 68 2d 32 2e 31 20 7b 0a 20  est auth-2.1 {. 
c3c0: 20 63 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43   catchsql {SELEC
c3d0: 54 20 79 2c 7a 20 46 52 4f 4d 20 74 33 7d 0a 7d  T y,z FROM t3}.}
c3e0: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
c3f0: 61 75 74 68 2d 32 2e 32 20 7b 0a 20 20 63 61 74  auth-2.2 {.  cat
c400: 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 52 4f  chsql {SELECT RO
c410: 57 49 44 2c 79 2c 7a 20 46 52 4f 4d 20 74 33 7d  WID,y,z FROM t3}
c420: 0a 7d 20 7b 31 20 7b 61 63 63 65 73 73 20 74 6f  .} {1 {access to
c430: 20 74 33 2e 78 20 69 73 20 70 72 6f 68 69 62 69   t3.x is prohibi
c440: 74 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  ted}}.do_test au
c450: 74 68 2d 32 2e 33 20 7b 0a 20 20 63 61 74 63 68  th-2.3 {.  catch
c460: 73 71 6c 20 7b 53 45 4c 45 43 54 20 4f 49 44 2c  sql {SELECT OID,
c470: 79 2c 7a 20 46 52 4f 4d 20 74 33 7d 0a 7d 20 7b  y,z FROM t3}.} {
c480: 31 20 7b 61 63 63 65 73 73 20 74 6f 20 74 33 2e  1 {access to t3.
c490: 78 20 69 73 20 70 72 6f 68 69 62 69 74 65 64 7d  x is prohibited}
c4a0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 32  }.do_test auth-2
c4b0: 2e 34 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  .4 {.  proc auth
c4c0: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
c4d0: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
c4e0: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
c4f0: 4c 49 54 45 5f 52 45 41 44 22 20 26 26 20 24 61  LITE_READ" && $a
c500: 72 67 31 3d 3d 22 74 33 22 20 26 26 20 24 61 72  rg1=="t3" && $ar
c510: 67 32 3d 3d 22 78 22 7d 20 7b 0a 20 20 20 20 20  g2=="x"} {.     
c520: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49   return SQLITE_I
c530: 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20  GNORE.    }.    
c540: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
c550: 0a 20 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b  .  }.  execsql {
c560: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20 56  INSERT INTO t3 V
c570: 41 4c 55 45 53 28 34 34 2c 35 35 2c 36 36 29 7d  ALUES(44,55,66)}
c580: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 53 45 4c  .  catchsql {SEL
c590: 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 7d 0a 7d  ECT * FROM t3}.}
c5a0: 20 7b 30 20 7b 7b 7d 20 35 35 20 36 36 7d 7d 0a   {0 {{} 55 66}}.
c5b0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 32 2e 35  do_test auth-2.5
c5c0: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 53   {.  catchsql {S
c5d0: 45 4c 45 43 54 20 72 6f 77 69 64 2c 79 2c 7a 20  ELECT rowid,y,z 
c5e0: 46 52 4f 4d 20 74 33 7d 0a 7d 20 7b 30 20 7b 7b  FROM t3}.} {0 {{
c5f0: 7d 20 35 35 20 36 36 7d 7d 0a 64 6f 5f 74 65 73  } 55 66}}.do_tes
c600: 74 20 61 75 74 68 2d 32 2e 36 20 7b 0a 20 20 70  t auth-2.6 {.  p
c610: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
c620: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
c630: 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g4} {.    if {$c
c640: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45 41  ode=="SQLITE_REA
c650: 44 22 20 26 26 20 24 61 72 67 31 3d 3d 22 74 33  D" && $arg1=="t3
c660: 22 20 26 26 20 24 61 72 67 32 3d 3d 22 52 4f 57  " && $arg2=="ROW
c670: 49 44 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74  ID"} {.      ret
c680: 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52  urn SQLITE_IGNOR
c690: 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  E.    }.    retu
c6a0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
c6b0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 53 45 4c  .  catchsql {SEL
c6c0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 7d 0a 7d  ECT * FROM t3}.}
c6d0: 20 7b 30 20 7b 34 34 20 35 35 20 36 36 7d 7d 0a   {0 {44 55 66}}.
c6e0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 32 2e 37  do_test auth-2.7
c6f0: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 53   {.  catchsql {S
c700: 45 4c 45 43 54 20 52 4f 57 49 44 2c 79 2c 7a 20  ELECT ROWID,y,z 
c710: 46 52 4f 4d 20 74 33 7d 0a 7d 20 7b 30 20 7b 34  FROM t3}.} {0 {4
c720: 34 20 35 35 20 36 36 7d 7d 0a 64 6f 5f 74 65 73  4 55 66}}.do_tes
c730: 74 20 61 75 74 68 2d 32 2e 38 20 7b 0a 20 20 70  t auth-2.8 {.  p
c740: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
c750: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
c760: 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g4} {.    if {$c
c770: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45 41  ode=="SQLITE_REA
c780: 44 22 20 26 26 20 24 61 72 67 31 3d 3d 22 74 32  D" && $arg1=="t2
c790: 22 20 26 26 20 24 61 72 67 32 3d 3d 22 52 4f 57  " && $arg2=="ROW
c7a0: 49 44 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74  ID"} {.      ret
c7b0: 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52  urn SQLITE_IGNOR
c7c0: 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  E.    }.    retu
c7d0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
c7e0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 53 45 4c  .  catchsql {SEL
c7f0: 45 43 54 20 52 4f 57 49 44 2c 62 2c 63 20 46 52  ECT ROWID,b,c FR
c800: 4f 4d 20 74 32 7d 0a 7d 20 7b 30 20 7b 7b 7d 20  OM t2}.} {0 {{} 
c810: 32 20 33 33 20 7b 7d 20 38 20 39 7d 7d 0a 64 6f  2 33 {} 8 9}}.do
c820: 5f 74 65 73 74 20 61 75 74 68 2d 32 2e 39 2e 31  _test auth-2.9.1
c830: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
c840: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
c850: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
c860: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
c870: 54 45 5f 52 45 41 44 22 20 26 26 20 24 61 72 67  TE_READ" && $arg
c880: 31 3d 3d 22 74 32 22 20 26 26 20 24 61 72 67 32  1=="t2" && $arg2
c890: 3d 3d 22 52 4f 57 49 44 22 7d 20 7b 0a 20 20 20  =="ROWID"} {.   
c8a0: 20 20 20 72 65 74 75 72 6e 20 62 6f 67 75 73 0a     return bogus.
c8b0: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
c8c0: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
c8d0: 20 63 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43   catchsql {SELEC
c8e0: 54 20 52 4f 57 49 44 2c 62 2c 63 20 46 52 4f 4d  T ROWID,b,c FROM
c8f0: 20 74 32 7d 0a 7d 20 7b 31 20 7b 69 6c 6c 65 67   t2}.} {1 {illeg
c900: 61 6c 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20  al return value 
c910: 28 39 39 39 29 20 66 72 6f 6d 20 74 68 65 20 61  (999) from the a
c920: 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 66 75 6e  uthorization fun
c930: 63 74 69 6f 6e 20 2d 20 73 68 6f 75 6c 64 20 62  ction - should b
c940: 65 20 53 51 4c 49 54 45 5f 4f 4b 2c 20 53 51 4c  e SQLITE_OK, SQL
c950: 49 54 45 5f 49 47 4e 4f 52 45 2c 20 6f 72 20 53  ITE_IGNORE, or S
c960: 51 4c 49 54 45 5f 44 45 4e 59 7d 7d 0a 64 6f 5f  QLITE_DENY}}.do_
c970: 74 65 73 74 20 61 75 74 68 2d 32 2e 39 2e 32 20  test auth-2.9.2 
c980: 7b 0a 20 20 64 62 20 65 72 72 6f 72 63 6f 64 65  {.  db errorcode
c990: 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 61  .} {1}.do_test a
c9a0: 75 74 68 2d 32 2e 31 30 20 7b 0a 20 20 70 72 6f  uth-2.10 {.  pro
c9b0: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
c9c0: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
c9d0: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
c9e0: 65 3d 3d 22 53 51 4c 49 54 45 5f 53 45 4c 45 43  e=="SQLITE_SELEC
c9f0: 54 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75  T"} {.      retu
ca00: 72 6e 20 62 6f 67 75 73 0a 20 20 20 20 7d 0a 20  rn bogus.    }. 
ca10: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
ca20: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
ca30: 71 6c 20 7b 53 45 4c 45 43 54 20 52 4f 57 49 44  ql {SELECT ROWID
ca40: 2c 62 2c 63 20 46 52 4f 4d 20 74 32 7d 0a 7d 20  ,b,c FROM t2}.} 
ca50: 7b 31 20 7b 69 6c 6c 65 67 61 6c 20 72 65 74 75  {1 {illegal retu
ca60: 72 6e 20 76 61 6c 75 65 20 28 31 29 20 66 72 6f  rn value (1) fro
ca70: 6d 20 74 68 65 20 61 75 74 68 6f 72 69 7a 61 74  m the authorizat
ca80: 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 2d 20 73  ion function - s
ca90: 68 6f 75 6c 64 20 62 65 20 53 51 4c 49 54 45 5f  hould be SQLITE_
caa0: 4f 4b 2c 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52  OK, SQLITE_IGNOR
cab0: 45 2c 20 6f 72 20 53 51 4c 49 54 45 5f 44 45 4e  E, or SQLITE_DEN
cac0: 59 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  Y}}.do_test auth
cad0: 2d 32 2e 31 31 2e 31 20 7b 0a 20 20 70 72 6f 63  -2.11.1 {.  proc
cae0: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
caf0: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
cb00: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
cb10: 3d 3d 22 53 51 4c 49 54 45 5f 52 45 41 44 22 20  =="SQLITE_READ" 
cb20: 26 26 20 24 61 72 67 32 3d 3d 22 61 22 7d 20 7b  && $arg2=="a"} {
cb30: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
cb40: 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20  LITE_IGNORE.    
cb50: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
cb60: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
cb70: 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20  chsql {SELECT * 
cb80: 46 52 4f 4d 20 74 32 2c 20 74 33 7d 0a 7d 20 7b  FROM t2, t3}.} {
cb90: 30 20 7b 7b 7d 20 32 20 33 33 20 34 34 20 35 35  0 {{} 2 33 44 55
cba0: 20 36 36 20 7b 7d 20 38 20 39 20 34 34 20 35 35   66 {} 8 9 44 55
cbb0: 20 36 36 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75   66}}.do_test au
cbc0: 74 68 2d 32 2e 31 31 2e 32 20 7b 0a 20 20 70 72  th-2.11.2 {.  pr
cbd0: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
cbe0: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
cbf0: 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f  4} {.    if {$co
cc00: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45 41 44  de=="SQLITE_READ
cc10: 22 20 26 26 20 24 61 72 67 32 3d 3d 22 78 22 7d  " && $arg2=="x"}
cc20: 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   {.      return 
cc30: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20  SQLITE_IGNORE.  
cc40: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
cc50: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
cc60: 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20  atchsql {SELECT 
cc70: 2a 20 46 52 4f 4d 20 74 32 2c 20 74 33 7d 0a 7d  * FROM t2, t3}.}
cc80: 20 7b 30 20 7b 31 31 20 32 20 33 33 20 7b 7d 20   {0 {11 2 33 {} 
cc90: 35 35 20 36 36 20 37 20 38 20 39 20 7b 7d 20 35  55 66 7 8 9 {} 5
cca0: 35 20 36 36 7d 7d 0a 0a 23 20 4d 61 6b 65 20 73  5 66}}..# Make s
ccb0: 75 72 65 20 74 68 65 20 4f 4c 44 20 61 6e 64 20  ure the OLD and 
ccc0: 4e 45 57 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  NEW pseudo-table
ccd0: 73 20 6f 66 20 61 20 74 72 69 67 67 65 72 20 67  s of a trigger g
cce0: 65 74 20 61 75 74 68 6f 72 69 7a 65 64 2e 0a 23  et authorized..#
ccf0: 0a 69 66 63 61 70 61 62 6c 65 20 74 72 69 67 67  .ifcapable trigg
cd00: 65 72 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 61  er {.  do_test a
cd10: 75 74 68 2d 33 2e 31 20 7b 0a 20 20 20 20 70 72  uth-3.1 {.    pr
cd20: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
cd30: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
cd40: 34 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72  4} {.      retur
cd50: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20  n SQLITE_OK.    
cd60: 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  }.    execsql {.
cd70: 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42        CREATE TAB
cd80: 4c 45 20 74 78 28 61 31 2c 61 32 2c 62 31 2c 62  LE tx(a1,a2,b1,b
cd90: 32 2c 63 31 2c 63 32 29 3b 0a 20 20 20 20 20 20  2,c1,c2);.      
cda0: 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 72  CREATE TRIGGER r
cdb0: 31 20 41 46 54 45 52 20 55 50 44 41 54 45 20 4f  1 AFTER UPDATE O
cdc0: 4e 20 74 32 20 46 4f 52 20 45 41 43 48 20 52 4f  N t2 FOR EACH RO
cdd0: 57 20 42 45 47 49 4e 0a 20 20 20 20 20 20 20 20  W BEGIN.        
cde0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 78 20 56  INSERT INTO tx V
cdf0: 41 4c 55 45 53 28 4f 4c 44 2e 61 2c 4e 45 57 2e  ALUES(OLD.a,NEW.
ce00: 61 2c 4f 4c 44 2e 62 2c 4e 45 57 2e 62 2c 4f 4c  a,OLD.b,NEW.b,OL
ce10: 44 2e 63 2c 4e 45 57 2e 63 29 3b 0a 20 20 20 20  D.c,NEW.c);.    
ce20: 20 20 45 4e 44 3b 0a 20 20 20 20 20 20 55 50 44    END;.      UPD
ce30: 41 54 45 20 74 32 20 53 45 54 20 61 3d 61 2b 31  ATE t2 SET a=a+1
ce40: 3b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 2a  ;.      SELECT *
ce50: 20 46 52 4f 4d 20 74 78 3b 0a 20 20 20 20 7d 0a   FROM tx;.    }.
ce60: 20 20 7d 20 7b 31 31 20 31 32 20 32 20 32 20 33    } {11 12 2 2 3
ce70: 33 20 33 33 20 37 20 38 20 38 20 38 20 39 20 39  3 33 7 8 8 8 9 9
ce80: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68  }.  do_test auth
ce90: 2d 33 2e 32 20 7b 0a 20 20 20 20 70 72 6f 63 20  -3.2 {.    proc 
cea0: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
ceb0: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
cec0: 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64  {.      if {$cod
ced0: 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45 41 44 22  e=="SQLITE_READ"
cee0: 20 26 26 20 24 61 72 67 31 3d 3d 22 74 32 22 20   && $arg1=="t2" 
cef0: 26 26 20 24 61 72 67 32 3d 3d 22 63 22 7d 20 7b  && $arg2=="c"} {
cf00: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
cf10: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20  SQLITE_IGNORE.  
cf20: 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75      }.      retu
cf30: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20  rn SQLITE_OK.   
cf40: 20 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   }.    execsql {
cf50: 0a 20 20 20 20 20 20 44 45 4c 45 54 45 20 46 52  .      DELETE FR
cf60: 4f 4d 20 74 78 3b 0a 20 20 20 20 20 20 55 50 44  OM tx;.      UPD
cf70: 41 54 45 20 74 32 20 53 45 54 20 61 3d 61 2b 31  ATE t2 SET a=a+1
cf80: 30 30 3b 0a 20 20 20 20 20 20 53 45 4c 45 43 54  00;.      SELECT
cf90: 20 2a 20 46 52 4f 4d 20 74 78 3b 0a 20 20 20 20   * FROM tx;.    
cfa0: 7d 0a 20 20 7d 20 7b 31 32 20 31 31 32 20 32 20  }.  } {12 112 2 
cfb0: 32 20 7b 7d 20 7b 7d 20 38 20 31 30 38 20 38 20  2 {} {} 8 108 8 
cfc0: 38 20 7b 7d 20 7b 7d 7d 0a 7d 20 3b 23 20 69 66  8 {} {}}.} ;# if
cfd0: 63 61 70 61 62 6c 65 20 74 72 69 67 67 65 72 0a  capable trigger.
cfe0: 0a 23 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65  .# Make sure the
cff0: 20 6e 61 6d 65 73 20 6f 66 20 76 69 65 77 73 20   names of views 
d000: 61 6e 64 20 74 72 69 67 67 65 72 73 20 61 72 65  and triggers are
d010: 20 70 61 73 73 65 64 20 6f 6e 20 6f 6e 20 61 72   passed on on ar
d020: 67 34 2e 0a 23 0a 69 66 63 61 70 61 62 6c 65 20  g4..#.ifcapable 
d030: 74 72 69 67 67 65 72 20 7b 0a 64 6f 5f 74 65 73  trigger {.do_tes
d040: 74 20 61 75 74 68 2d 34 2e 31 20 7b 0a 20 20 70  t auth-4.1 {.  p
d050: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
d060: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
d070: 67 34 7d 20 7b 0a 20 20 20 20 6c 61 70 70 65 6e  g4} {.    lappen
d080: 64 20 3a 3a 61 75 74 68 61 72 67 73 20 24 63 6f  d ::authargs $co
d090: 64 65 20 24 61 72 67 31 20 24 61 72 67 32 20 24  de $arg1 $arg2 $
d0a0: 61 72 67 33 20 24 61 72 67 34 0a 20 20 20 20 72  arg3 $arg4.    r
d0b0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
d0c0: 20 20 7d 0a 20 20 73 65 74 20 61 75 74 68 61 72    }.  set authar
d0d0: 67 73 20 7b 7d 0a 20 20 65 78 65 63 73 71 6c 20  gs {}.  execsql 
d0e0: 7b 0a 20 20 20 20 55 50 44 41 54 45 20 74 32 20  {.    UPDATE t2 
d0f0: 53 45 54 20 61 3d 61 2b 31 3b 0a 20 20 7d 0a 20  SET a=a+1;.  }. 
d100: 20 73 65 74 20 61 75 74 68 61 72 67 73 0a 7d 20   set authargs.} 
d110: 5b 6c 69 73 74 20 5c 0a 20 20 53 51 4c 49 54 45  [list \.  SQLITE
d120: 5f 52 45 41 44 20 20 20 74 32 20 61 20 20 6d 61  _READ   t2 a  ma
d130: 69 6e 20 7b 7d 20 5c 0a 20 20 53 51 4c 49 54 45  in {} \.  SQLITE
d140: 5f 55 50 44 41 54 45 20 74 32 20 61 20 20 6d 61  _UPDATE t2 a  ma
d150: 69 6e 20 7b 7d 20 5c 0a 20 20 53 51 4c 49 54 45  in {} \.  SQLITE
d160: 5f 49 4e 53 45 52 54 20 74 78 20 7b 7d 20 6d 61  _INSERT tx {} ma
d170: 69 6e 20 72 31 20 5c 0a 20 20 53 51 4c 49 54 45  in r1 \.  SQLITE
d180: 5f 52 45 41 44 20 20 20 74 32 20 61 20 20 6d 61  _READ   t2 a  ma
d190: 69 6e 20 72 31 20 5c 0a 20 20 53 51 4c 49 54 45  in r1 \.  SQLITE
d1a0: 5f 52 45 41 44 20 20 20 74 32 20 61 20 20 6d 61  _READ   t2 a  ma
d1b0: 69 6e 20 72 31 20 5c 0a 20 20 53 51 4c 49 54 45  in r1 \.  SQLITE
d1c0: 5f 52 45 41 44 20 20 20 74 32 20 62 20 20 6d 61  _READ   t2 b  ma
d1d0: 69 6e 20 72 31 20 5c 0a 20 20 53 51 4c 49 54 45  in r1 \.  SQLITE
d1e0: 5f 52 45 41 44 20 20 20 74 32 20 62 20 20 6d 61  _READ   t2 b  ma
d1f0: 69 6e 20 72 31 20 5c 0a 20 20 53 51 4c 49 54 45  in r1 \.  SQLITE
d200: 5f 52 45 41 44 20 20 20 74 32 20 63 20 20 6d 61  _READ   t2 c  ma
d210: 69 6e 20 72 31 20 5c 0a 20 20 53 51 4c 49 54 45  in r1 \.  SQLITE
d220: 5f 52 45 41 44 20 20 20 74 32 20 63 20 20 6d 61  _READ   t2 c  ma
d230: 69 6e 20 72 31 5d 0a 7d 0a 0a 69 66 63 61 70 61  in r1].}..ifcapa
d240: 62 6c 65 20 7b 76 69 65 77 20 26 26 20 74 72 69  ble {view && tri
d250: 67 67 65 72 7d 20 7b 0a 64 6f 5f 74 65 73 74 20  gger} {.do_test 
d260: 61 75 74 68 2d 34 2e 32 20 7b 0a 20 20 65 78 65  auth-4.2 {.  exe
d270: 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  csql {.    CREAT
d280: 45 20 56 49 45 57 20 76 31 20 41 53 20 53 45 4c  E VIEW v1 AS SEL
d290: 45 43 54 20 61 2b 62 20 41 53 20 78 20 46 52 4f  ECT a+b AS x FRO
d2a0: 4d 20 74 32 3b 0a 20 20 20 20 43 52 45 41 54 45  M t2;.    CREATE
d2b0: 20 54 41 42 4c 45 20 76 31 63 68 6e 67 28 78 31   TABLE v1chng(x1
d2c0: 2c 78 32 29 3b 0a 20 20 20 20 43 52 45 41 54 45  ,x2);.    CREATE
d2d0: 20 54 52 49 47 47 45 52 20 72 32 20 49 4e 53 54   TRIGGER r2 INST
d2e0: 45 41 44 20 4f 46 20 55 50 44 41 54 45 20 4f 4e  EAD OF UPDATE ON
d2f0: 20 76 31 20 42 45 47 49 4e 0a 20 20 20 20 20 20   v1 BEGIN.      
d300: 49 4e 53 45 52 54 20 49 4e 54 4f 20 76 31 63 68  INSERT INTO v1ch
d310: 6e 67 20 56 41 4c 55 45 53 28 4f 4c 44 2e 78 2c  ng VALUES(OLD.x,
d320: 4e 45 57 2e 78 29 3b 0a 20 20 20 20 45 4e 44 3b  NEW.x);.    END;
d330: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
d340: 4f 4d 20 76 31 3b 0a 20 20 7d 0a 7d 20 7b 31 31  OM v1;.  }.} {11
d350: 35 20 31 31 37 7d 0a 64 6f 5f 74 65 73 74 20 61  5 117}.do_test a
d360: 75 74 68 2d 34 2e 33 20 7b 0a 20 20 73 65 74 20  uth-4.3 {.  set 
d370: 61 75 74 68 61 72 67 73 20 7b 7d 0a 20 20 65 78  authargs {}.  ex
d380: 65 63 73 71 6c 20 7b 0a 20 20 20 20 55 50 44 41  ecsql {.    UPDA
d390: 54 45 20 76 31 20 53 45 54 20 78 3d 31 20 57 48  TE v1 SET x=1 WH
d3a0: 45 52 45 20 78 3d 31 31 37 0a 20 20 7d 0a 20 20  ERE x=117.  }.  
d3b0: 73 65 74 20 61 75 74 68 61 72 67 73 0a 7d 20 5b  set authargs.} [
d3c0: 6c 69 73 74 20 5c 0a 20 20 53 51 4c 49 54 45 5f  list \.  SQLITE_
d3d0: 55 50 44 41 54 45 20 76 31 20 20 20 20 20 78 20  UPDATE v1     x 
d3e0: 20 6d 61 69 6e 20 7b 7d 20 5c 0a 20 20 53 51 4c   main {} \.  SQL
d3f0: 49 54 45 5f 52 45 41 44 20 20 20 76 31 20 20 20  ITE_READ   v1   
d400: 20 20 78 20 20 6d 61 69 6e 20 7b 7d 20 5c 0a 20    x  main {} \. 
d410: 20 53 51 4c 49 54 45 5f 53 45 4c 45 43 54 20 7b   SQLITE_SELECT {
d420: 7d 20 20 20 20 20 7b 7d 20 7b 7d 20 20 20 76 31  }     {} {}   v1
d430: 20 5c 0a 20 20 53 51 4c 49 54 45 5f 52 45 41 44   \.  SQLITE_READ
d440: 20 20 20 74 32 20 20 20 20 20 61 20 20 6d 61 69     t2     a  mai
d450: 6e 20 76 31 20 5c 0a 20 20 53 51 4c 49 54 45 5f  n v1 \.  SQLITE_
d460: 52 45 41 44 20 20 20 74 32 20 20 20 20 20 62 20  READ   t2     b 
d470: 20 6d 61 69 6e 20 76 31 20 5c 0a 20 20 53 51 4c   main v1 \.  SQL
d480: 49 54 45 5f 49 4e 53 45 52 54 20 76 31 63 68 6e  ITE_INSERT v1chn
d490: 67 20 7b 7d 20 6d 61 69 6e 20 72 32 20 5c 0a 20  g {} main r2 \. 
d4a0: 20 53 51 4c 49 54 45 5f 52 45 41 44 20 20 20 76   SQLITE_READ   v
d4b0: 31 20 20 20 20 20 78 20 20 6d 61 69 6e 20 72 32  1     x  main r2
d4c0: 20 5c 0a 20 20 53 51 4c 49 54 45 5f 52 45 41 44   \.  SQLITE_READ
d4d0: 20 20 20 76 31 20 20 20 20 20 78 20 20 6d 61 69     v1     x  mai
d4e0: 6e 20 72 32 5d 0a 64 6f 5f 74 65 73 74 20 61 75  n r2].do_test au
d4f0: 74 68 2d 34 2e 34 20 7b 0a 20 20 65 78 65 63 73  th-4.4 {.  execs
d500: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
d510: 54 52 49 47 47 45 52 20 72 33 20 49 4e 53 54 45  TRIGGER r3 INSTE
d520: 41 44 20 4f 46 20 44 45 4c 45 54 45 20 4f 4e 20  AD OF DELETE ON 
d530: 76 31 20 42 45 47 49 4e 0a 20 20 20 20 20 20 49  v1 BEGIN.      I
d540: 4e 53 45 52 54 20 49 4e 54 4f 20 76 31 63 68 6e  NSERT INTO v1chn
d550: 67 20 56 41 4c 55 45 53 28 4f 4c 44 2e 78 2c 4e  g VALUES(OLD.x,N
d560: 55 4c 4c 29 3b 0a 20 20 20 20 45 4e 44 3b 0a 20  ULL);.    END;. 
d570: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
d580: 20 76 31 3b 0a 20 20 7d 0a 7d 20 7b 31 31 35 20   v1;.  }.} {115 
d590: 31 31 37 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  117}.do_test aut
d5a0: 68 2d 34 2e 35 20 7b 0a 20 20 73 65 74 20 61 75  h-4.5 {.  set au
d5b0: 74 68 61 72 67 73 20 7b 7d 0a 20 20 65 78 65 63  thargs {}.  exec
d5c0: 73 71 6c 20 7b 0a 20 20 20 20 44 45 4c 45 54 45  sql {.    DELETE
d5d0: 20 46 52 4f 4d 20 76 31 20 57 48 45 52 45 20 78   FROM v1 WHERE x
d5e0: 3d 31 31 37 0a 20 20 7d 0a 20 20 73 65 74 20 61  =117.  }.  set a
d5f0: 75 74 68 61 72 67 73 0a 7d 20 5b 6c 69 73 74 20  uthargs.} [list 
d600: 5c 0a 20 20 53 51 4c 49 54 45 5f 44 45 4c 45 54  \.  SQLITE_DELET
d610: 45 20 76 31 20 20 20 20 20 7b 7d 20 6d 61 69 6e  E v1     {} main
d620: 20 7b 7d 20 5c 0a 20 20 53 51 4c 49 54 45 5f 52   {} \.  SQLITE_R
d630: 45 41 44 20 20 20 76 31 20 20 20 20 20 78 20 20  EAD   v1     x  
d640: 6d 61 69 6e 20 7b 7d 20 5c 0a 20 20 53 51 4c 49  main {} \.  SQLI
d650: 54 45 5f 53 45 4c 45 43 54 20 7b 7d 20 20 20 20  TE_SELECT {}    
d660: 20 7b 7d 20 7b 7d 20 20 20 76 31 20 5c 0a 20 20   {} {}   v1 \.  
d670: 53 51 4c 49 54 45 5f 52 45 41 44 20 20 20 74 32  SQLITE_READ   t2
d680: 20 20 20 20 20 61 20 20 6d 61 69 6e 20 76 31 20       a  main v1 
d690: 5c 0a 20 20 53 51 4c 49 54 45 5f 52 45 41 44 20  \.  SQLITE_READ 
d6a0: 20 20 74 32 20 20 20 20 20 62 20 20 6d 61 69 6e    t2     b  main
d6b0: 20 76 31 20 5c 0a 20 20 53 51 4c 49 54 45 5f 49   v1 \.  SQLITE_I
d6c0: 4e 53 45 52 54 20 76 31 63 68 6e 67 20 7b 7d 20  NSERT v1chng {} 
d6d0: 6d 61 69 6e 20 72 33 20 5c 0a 20 20 53 51 4c 49  main r3 \.  SQLI
d6e0: 54 45 5f 52 45 41 44 20 20 20 76 31 20 20 20 20  TE_READ   v1    
d6f0: 20 78 20 20 6d 61 69 6e 20 72 33 5d 0a 0a 7d 20   x  main r3]..} 
d700: 3b 23 20 69 66 63 61 70 61 62 6c 65 20 76 69 65  ;# ifcapable vie
d710: 77 20 26 26 20 74 72 69 67 67 65 72 0a 0a 23 20  w && trigger..# 
d720: 54 69 63 6b 65 74 20 23 31 33 33 38 3a 20 20 4d  Ticket #1338:  M
d730: 61 6b 65 20 73 75 72 65 20 61 75 74 68 65 6e 74  ake sure authent
d740: 69 63 61 74 69 6f 6e 20 77 6f 72 6b 73 20 69 6e  ication works in
d750: 20 74 68 65 20 70 72 65 73 65 6e 63 65 20 6f 66   the presence of
d760: 20 61 6e 20 41 53 0a 23 20 63 6c 61 75 73 65 2e   an AS.# clause.
d770: 0a 23 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  .#.do_test auth-
d780: 35 2e 31 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  5.1 {.  proc aut
d790: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
d7a0: 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20  2 arg3 arg4} {. 
d7b0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
d7c0: 5f 4f 4b 0a 20 20 7d 0a 20 20 65 78 65 63 73 71  _OK.  }.  execsq
d7d0: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 63  l {.    SELECT c
d7e0: 6f 75 6e 74 28 61 29 20 41 53 20 63 6e 74 20 46  ount(a) AS cnt F
d7f0: 52 4f 4d 20 74 34 20 4f 52 44 45 52 20 42 59 20  ROM t4 ORDER BY 
d800: 63 6e 74 0a 20 20 7d 0a 7d 20 7b 31 7d 0a 0a 23  cnt.  }.} {1}..#
d810: 20 54 69 63 6b 65 74 20 23 31 36 30 37 0a 23 0a   Ticket #1607.#.
d820: 69 66 63 61 70 61 62 6c 65 20 63 6f 6d 70 6f 75  ifcapable compou
d830: 6e 64 26 26 73 75 62 71 75 65 72 79 20 7b 0a 20  nd&&subquery {. 
d840: 20 69 66 63 61 70 61 62 6c 65 20 74 72 69 67 67   ifcapable trigg
d850: 65 72 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  er {.    execsql
d860: 20 7b 0a 20 20 20 20 20 20 44 52 4f 50 20 54 41   {.      DROP TA
d870: 42 4c 45 20 74 78 3b 0a 20 20 20 20 7d 0a 20 20  BLE tx;.    }.  
d880: 20 20 69 66 63 61 70 61 62 6c 65 20 76 69 65 77    ifcapable view
d890: 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c   {.      execsql
d8a0: 20 7b 0a 20 20 20 20 20 20 20 20 44 52 4f 50 20   {.        DROP 
d8b0: 54 41 42 4c 45 20 76 31 63 68 6e 67 3b 0a 20 20  TABLE v1chng;.  
d8c0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
d8d0: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 35    do_test auth-5
d8e0: 2e 32 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .2 {.    execsql
d8f0: 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20   {.      SELECT 
d900: 6e 61 6d 65 20 46 52 4f 4d 20 28 0a 20 20 20 20  name FROM (.    
d910: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
d920: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  M sqlite_master 
d930: 55 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43 54  UNION ALL SELECT
d940: 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74   * FROM sqlite_t
d950: 65 6d 70 5f 6d 61 73 74 65 72 29 0a 20 20 20 20  emp_master).    
d960: 20 20 57 48 45 52 45 20 74 79 70 65 3d 27 74 61    WHERE type='ta
d970: 62 6c 65 27 0a 20 20 20 20 20 20 4f 52 44 45 52  ble'.      ORDER
d980: 20 42 59 20 6e 61 6d 65 0a 20 20 20 20 7d 0a 20   BY name.    }. 
d990: 20 7d 20 7b 73 71 6c 69 74 65 5f 73 74 61 74 31   } {sqlite_stat1
d9a0: 20 74 31 20 74 32 20 74 33 20 74 34 7d 0a 7d 0a   t1 t2 t3 t4}.}.
d9b0: 0a 0a 72 65 6e 61 6d 65 20 70 72 6f 63 20 7b 7d  ..rename proc {}
d9c0: 0a 72 65 6e 61 6d 65 20 70 72 6f 63 5f 72 65 61  .rename proc_rea
d9d0: 6c 20 70 72 6f 63 0a 0a 0a 66 69 6e 69 73 68 5f  l proc...finish_
d9e0: 74 65 73 74 0a                                   test.