/ Hex Artifact Content
Login

Artifact 639288b5dace7db3e1fce85d38893fc30bbfe50b:


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 32 20 32 30  h.test,v 1.32 20
0220: 30 36 2f 30 31 2f 31 36 20 31 36 3a 32 34 3a 32  06/01/16 16:24:2
0230: 35 20 64 61 6e 69 65 6c 6b 31 39 37 37 20 45 78  5 danielk1977 Ex
0240: 70 20 24 0a 23 0a 0a 73 65 74 20 74 65 73 74 64  p $.#..set testd
0250: 69 72 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65  ir [file dirname
0260: 20 24 61 72 67 76 30 5d 0a 73 6f 75 72 63 65 20   $argv0].source 
0270: 24 74 65 73 74 64 69 72 2f 74 65 73 74 65 72 2e  $testdir/tester.
0280: 74 63 6c 0a 0a 23 20 64 69 73 61 62 6c 65 20 74  tcl..# disable t
0290: 68 69 73 20 74 65 73 74 20 69 66 20 74 68 65 20  his test if the 
02a0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48  SQLITE_OMIT_AUTH
02b0: 4f 52 49 5a 41 54 49 4f 4e 20 6d 61 63 72 6f 20  ORIZATION macro 
02c0: 69 73 0a 23 20 64 65 66 69 6e 65 64 20 64 75 72  is.# defined dur
02d0: 69 6e 67 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 2e  ing compilation.
02e0: 0a 69 66 20 7b 5b 63 61 74 63 68 20 7b 64 62 20  .if {[catch {db 
02f0: 61 75 74 68 20 7b 7d 7d 20 6d 73 67 5d 7d 20 7b  auth {}} msg]} {
0300: 0a 20 20 66 69 6e 69 73 68 5f 74 65 73 74 0a 20  .  finish_test. 
0310: 20 72 65 74 75 72 6e 0a 7d 0a 0a 72 65 6e 61 6d   return.}..renam
0320: 65 20 70 72 6f 63 20 70 72 6f 63 5f 72 65 61 6c  e proc proc_real
0330: 0a 70 72 6f 63 5f 72 65 61 6c 20 70 72 6f 63 20  .proc_real proc 
0340: 7b 6e 61 6d 65 20 61 72 67 75 6d 65 6e 74 73 20  {name arguments 
0350: 73 63 72 69 70 74 7d 20 7b 0a 20 20 70 72 6f 63  script} {.  proc
0360: 5f 72 65 61 6c 20 24 6e 61 6d 65 20 24 61 72 67  _real $name $arg
0370: 75 6d 65 6e 74 73 20 24 73 63 72 69 70 74 0a 20  uments $script. 
0380: 20 69 66 20 7b 24 6e 61 6d 65 3d 3d 22 61 75 74   if {$name=="aut
0390: 68 22 7d 20 7b 0a 20 20 20 20 64 62 20 61 75 74  h"} {.    db aut
03a0: 68 6f 72 69 7a 65 72 20 3a 3a 61 75 74 68 0a 20  horizer ::auth. 
03b0: 20 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 75   }.}..do_test au
03c0: 74 68 2d 31 2e 31 2e 31 20 7b 0a 20 20 64 62 20  th-1.1.1 {.  db 
03d0: 63 6c 6f 73 65 0a 20 20 73 65 74 20 3a 3a 44 42  close.  set ::DB
03e0: 20 5b 73 71 6c 69 74 65 33 20 64 62 20 74 65 73   [sqlite3 db tes
03f0: 74 2e 64 62 5d 0a 20 20 70 72 6f 63 20 61 75 74  t.db].  proc aut
0400: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
0410: 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20  2 arg3 arg4} {. 
0420: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
0430: 51 4c 49 54 45 5f 49 4e 53 45 52 54 22 20 26 26  QLITE_INSERT" &&
0440: 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f   $arg1=="sqlite_
0450: 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20  master"} {.     
0460: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44   return SQLITE_D
0470: 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  ENY.    }.    re
0480: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
0490: 20 7d 0a 20 20 64 62 20 61 75 74 68 6f 72 69 7a   }.  db authoriz
04a0: 65 72 20 3a 3a 61 75 74 68 0a 20 20 63 61 74 63  er ::auth.  catc
04b0: 68 73 71 6c 20 7b 43 52 45 41 54 45 20 54 41 42  hsql {CREATE TAB
04c0: 4c 45 20 74 31 28 61 2c 62 2c 63 29 7d 0a 7d 20  LE t1(a,b,c)}.} 
04d0: 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a  {1 {not authoriz
04e0: 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  ed}}.do_test aut
04f0: 68 2d 31 2e 31 2e 32 20 7b 0a 20 20 64 62 20 65  h-1.1.2 {.  db e
0500: 72 72 6f 72 63 6f 64 65 0a 7d 20 7b 32 33 7d 0a  rrorcode.} {23}.
0510: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
0520: 2e 33 20 7b 0a 20 20 64 62 20 61 75 74 68 6f 72  .3 {.  db author
0530: 69 7a 65 72 0a 7d 20 7b 3a 3a 61 75 74 68 7d 0a  izer.} {::auth}.
0540: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
0550: 2e 34 20 7b 0a 20 20 23 20 54 69 63 6b 65 74 20  .4 {.  # Ticket 
0560: 23 38 39 36 2e 0a 20 20 63 61 74 63 68 73 71 6c  #896..  catchsql
0570: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 78 3b   {.    SELECT x;
0580: 0a 20 20 7d 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75  .  }.} {1 {no su
0590: 63 68 20 63 6f 6c 75 6d 6e 3a 20 78 7d 7d 0a 64  ch column: x}}.d
05a0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 20  o_test auth-1.2 
05b0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
05c0: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
05d0: 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b  lite_master}.} {
05e0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
05f0: 2e 33 2e 31 20 7b 0a 20 20 70 72 6f 63 20 61 75  .3.1 {.  proc au
0600: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
0610: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
0620: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
0630: 53 51 4c 49 54 45 5f 43 52 45 41 54 45 5f 54 41  SQLITE_CREATE_TA
0640: 42 4c 45 22 7d 20 7b 0a 20 20 20 20 20 20 73 65  BLE"} {.      se
0650: 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69  t ::authargs [li
0660: 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24  st $arg1 $arg2 $
0670: 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20  arg3 $arg4].    
0680: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
0690: 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72  DENY.    }.    r
06a0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
06b0: 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b    }.  catchsql {
06c0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
06d0: 61 2c 62 2c 63 29 7d 0a 7d 20 7b 31 20 7b 6e 6f  a,b,c)}.} {1 {no
06e0: 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64  t authorized}}.d
06f0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 33 2e  o_test auth-1.3.
0700: 32 20 7b 0a 20 20 64 62 20 65 72 72 6f 72 63 6f  2 {.  db errorco
0710: 64 65 0a 7d 20 7b 32 33 7d 0a 64 6f 5f 74 65 73  de.} {23}.do_tes
0720: 74 20 61 75 74 68 2d 31 2e 33 2e 33 20 7b 0a 20  t auth-1.3.3 {. 
0730: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a   set ::authargs.
0740: 7d 20 7b 74 31 20 7b 7d 20 6d 61 69 6e 20 7b 7d  } {t1 {} main {}
0750: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
0760: 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .4 {.  execsql {
0770: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
0780: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a   sqlite_master}.
0790: 7d 20 7b 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20  } {}..ifcapable 
07a0: 74 65 6d 70 64 62 20 7b 0a 20 20 64 6f 5f 74 65  tempdb {.  do_te
07b0: 73 74 20 61 75 74 68 2d 31 2e 35 20 7b 0a 20 20  st auth-1.5 {.  
07c0: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
07d0: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
07e0: 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 20 20 69   arg4} {.      i
07f0: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
0800: 45 5f 49 4e 53 45 52 54 22 20 26 26 20 24 61 72  E_INSERT" && $ar
0810: 67 31 3d 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70  g1=="sqlite_temp
0820: 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20  _master"} {.    
0830: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
0840: 45 5f 44 45 4e 59 0a 20 20 20 20 20 20 7d 0a 20  E_DENY.      }. 
0850: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
0860: 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20  TE_OK.    }.    
0870: 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45  catchsql {CREATE
0880: 20 54 45 4d 50 20 54 41 42 4c 45 20 74 31 28 61   TEMP TABLE t1(a
0890: 2c 62 2c 63 29 7d 0a 20 20 7d 20 7b 31 20 7b 6e  ,b,c)}.  } {1 {n
08a0: 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a  ot authorized}}.
08b0: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31    do_test auth-1
08c0: 2e 36 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .6 {.    execsql
08d0: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
08e0: 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  OM sqlite_temp_m
08f0: 61 73 74 65 72 7d 0a 20 20 7d 20 7b 7d 0a 20 20  aster}.  } {}.  
0900: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 37  do_test auth-1.7
0910: 2e 31 20 7b 0a 20 20 20 20 70 72 6f 63 20 61 75  .1 {.    proc au
0920: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
0930: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
0940: 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d        if {$code=
0950: 3d 22 53 51 4c 49 54 45 5f 43 52 45 41 54 45 5f  ="SQLITE_CREATE_
0960: 54 45 4d 50 5f 54 41 42 4c 45 22 7d 20 7b 0a 20  TEMP_TABLE"} {. 
0970: 20 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74         set ::aut
0980: 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67  hargs [list $arg
0990: 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61  1 $arg2 $arg3 $a
09a0: 72 67 34 5d 0a 20 20 20 20 20 20 20 20 72 65 74  rg4].        ret
09b0: 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a  urn SQLITE_DENY.
09c0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65        }.      re
09d0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
09e0: 20 20 20 7d 0a 20 20 20 20 63 61 74 63 68 73 71     }.    catchsq
09f0: 6c 20 7b 43 52 45 41 54 45 20 54 45 4d 50 20 54  l {CREATE TEMP T
0a00: 41 42 4c 45 20 74 31 28 61 2c 62 2c 63 29 7d 0a  ABLE t1(a,b,c)}.
0a10: 20 20 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68    } {1 {not auth
0a20: 6f 72 69 7a 65 64 7d 7d 0a 20 20 64 6f 5f 74 65  orized}}.  do_te
0a30: 73 74 20 61 75 74 68 2d 31 2e 37 2e 32 20 7b 0a  st auth-1.7.2 {.
0a40: 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61       set ::autha
0a50: 72 67 73 0a 20 20 7d 20 7b 74 31 20 7b 7d 20 74  rgs.  } {t1 {} t
0a60: 65 6d 70 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73  emp {}}.  do_tes
0a70: 74 20 61 75 74 68 2d 31 2e 38 20 7b 0a 20 20 20  t auth-1.8 {.   
0a80: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
0a90: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
0aa0: 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 20  e_temp_master}. 
0ab0: 20 7d 20 7b 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74   } {}.}..do_test
0ac0: 20 61 75 74 68 2d 31 2e 39 20 7b 0a 20 20 70 72   auth-1.9 {.  pr
0ad0: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
0ae0: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
0af0: 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f  4} {.    if {$co
0b00: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 49 4e 53 45  de=="SQLITE_INSE
0b10: 52 54 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73  RT" && $arg1=="s
0b20: 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 7d 20 7b  qlite_master"} {
0b30: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
0b40: 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20  LITE_IGNORE.    
0b50: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
0b60: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
0b70: 63 68 73 71 6c 20 7b 43 52 45 41 54 45 20 54 41  chsql {CREATE TA
0b80: 42 4c 45 20 74 31 28 61 2c 62 2c 63 29 7d 0a 7d  BLE t1(a,b,c)}.}
0b90: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
0ba0: 61 75 74 68 2d 31 2e 31 30 20 7b 0a 20 20 65 78  auth-1.10 {.  ex
0bb0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61  ecsql {SELECT na
0bc0: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  me FROM sqlite_m
0bd0: 61 73 74 65 72 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74  aster}.} {}.do_t
0be0: 65 73 74 20 61 75 74 68 2d 31 2e 31 31 20 7b 0a  est auth-1.11 {.
0bf0: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
0c00: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
0c10: 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20   arg4} {.    if 
0c20: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
0c30: 43 52 45 41 54 45 5f 54 41 42 4c 45 22 7d 20 7b  CREATE_TABLE"} {
0c40: 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74  .      set ::aut
0c50: 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67  hargs [list $arg
0c60: 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61  1 $arg2 $arg3 $a
0c70: 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72  rg4].      retur
0c80: 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a  n SQLITE_IGNORE.
0c90: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
0ca0: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
0cb0: 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54   catchsql {CREAT
0cc0: 45 20 54 41 42 4c 45 20 74 31 28 61 2c 62 2c 63  E TABLE t1(a,b,c
0cd0: 29 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74  )}.} {0 {}}.do_t
0ce0: 65 73 74 20 61 75 74 68 2d 31 2e 31 32 20 7b 0a  est auth-1.12 {.
0cf0: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
0d00: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
0d10: 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 7d 0a  te_master}.} {}.
0d20: 0a 69 66 63 61 70 61 62 6c 65 20 74 65 6d 70 64  .ifcapable tempd
0d30: 62 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 61 75  b {.  do_test au
0d40: 74 68 2d 31 2e 31 33 20 7b 0a 20 20 20 20 70 72  th-1.13 {.    pr
0d50: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
0d60: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
0d70: 34 7d 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24  4} {.      if {$
0d80: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 49 4e  code=="SQLITE_IN
0d90: 53 45 52 54 22 20 26 26 20 24 61 72 67 31 3d 3d  SERT" && $arg1==
0da0: 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73  "sqlite_temp_mas
0db0: 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 20 20  ter"} {.        
0dc0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47  return SQLITE_IG
0dd0: 4e 4f 52 45 0a 20 20 20 20 20 20 7d 0a 20 20 20  NORE.      }.   
0de0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
0df0: 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61  _OK.    }.    ca
0e00: 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45 20 54  tchsql {CREATE T
0e10: 45 4d 50 20 54 41 42 4c 45 20 74 31 28 61 2c 62  EMP TABLE t1(a,b
0e20: 2c 63 29 7d 0a 20 20 7d 20 7b 30 20 7b 7d 7d 0a  ,c)}.  } {0 {}}.
0e30: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31    do_test auth-1
0e40: 2e 31 34 20 7b 0a 20 20 20 20 65 78 65 63 73 71  .14 {.    execsq
0e50: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
0e60: 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f  ROM sqlite_temp_
0e70: 6d 61 73 74 65 72 7d 0a 20 20 7d 20 7b 7d 0a 20  master}.  } {}. 
0e80: 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e   do_test auth-1.
0e90: 31 35 20 7b 0a 20 20 20 20 70 72 6f 63 20 61 75  15 {.    proc au
0ea0: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
0eb0: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
0ec0: 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d        if {$code=
0ed0: 3d 22 53 51 4c 49 54 45 5f 43 52 45 41 54 45 5f  ="SQLITE_CREATE_
0ee0: 54 45 4d 50 5f 54 41 42 4c 45 22 7d 20 7b 0a 20  TEMP_TABLE"} {. 
0ef0: 20 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74         set ::aut
0f00: 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67  hargs [list $arg
0f10: 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61  1 $arg2 $arg3 $a
0f20: 72 67 34 5d 0a 20 20 20 20 20 20 20 20 72 65 74  rg4].        ret
0f30: 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52  urn SQLITE_IGNOR
0f40: 45 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  E.      }.      
0f50: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
0f60: 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 74 63 68  .    }.    catch
0f70: 73 71 6c 20 7b 43 52 45 41 54 45 20 54 45 4d 50  sql {CREATE TEMP
0f80: 20 54 41 42 4c 45 20 74 31 28 61 2c 62 2c 63 29   TABLE t1(a,b,c)
0f90: 7d 0a 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20 20 64  }.  } {0 {}}.  d
0fa0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 36  o_test auth-1.16
0fb0: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
0fc0: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
0fd0: 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73   sqlite_temp_mas
0fe0: 74 65 72 7d 0a 20 20 7d 20 7b 7d 0a 20 20 0a 20  ter}.  } {}.  . 
0ff0: 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e   do_test auth-1.
1000: 31 37 20 7b 0a 20 20 20 20 70 72 6f 63 20 61 75  17 {.    proc au
1010: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
1020: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
1030: 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d        if {$code=
1040: 3d 22 53 51 4c 49 54 45 5f 43 52 45 41 54 45 5f  ="SQLITE_CREATE_
1050: 54 41 42 4c 45 22 7d 20 7b 0a 20 20 20 20 20 20  TABLE"} {.      
1060: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
1070: 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72   [list $arg1 $ar
1080: 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a  g2 $arg3 $arg4].
1090: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
10a0: 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 20  QLITE_DENY.     
10b0: 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   }.      return 
10c0: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a  SQLITE_OK.    }.
10d0: 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52      catchsql {CR
10e0: 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20  EATE TEMP TABLE 
10f0: 74 31 28 61 2c 62 2c 63 29 7d 0a 20 20 7d 20 7b  t1(a,b,c)}.  } {
1100: 30 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20  0 {}}.  do_test 
1110: 61 75 74 68 2d 31 2e 31 38 20 7b 0a 20 20 20 20  auth-1.18 {.    
1120: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
1130: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
1140: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 20 20  _temp_master}.  
1150: 7d 20 7b 74 31 7d 0a 7d 0a 0a 64 6f 5f 74 65 73  } {t1}.}..do_tes
1160: 74 20 61 75 74 68 2d 31 2e 31 39 2e 31 20 7b 0a  t auth-1.19.1 {.
1170: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
1180: 20 7b 7d 0a 20 20 70 72 6f 63 20 61 75 74 68 20   {}.  proc auth 
1190: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
11a0: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
11b0: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
11c0: 49 54 45 5f 43 52 45 41 54 45 5f 54 45 4d 50 5f  ITE_CREATE_TEMP_
11d0: 54 41 42 4c 45 22 7d 20 7b 0a 20 20 20 20 20 20  TABLE"} {.      
11e0: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b  set ::authargs [
11f0: 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67 32  list $arg1 $arg2
1200: 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20   $arg3 $arg4].  
1210: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
1220: 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20  E_DENY.    }.   
1230: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
1240: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
1250: 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 74   {CREATE TABLE t
1260: 32 28 61 2c 62 2c 63 29 7d 0a 7d 20 7b 30 20 7b  2(a,b,c)}.} {0 {
1270: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
1280: 31 2e 31 39 2e 32 20 7b 0a 20 20 73 65 74 20 3a  1.19.2 {.  set :
1290: 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 7d 0a 64  :authargs.} {}.d
12a0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 30  o_test auth-1.20
12b0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
12c0: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73  LECT name FROM s
12d0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20  qlite_master}.} 
12e0: 7b 74 32 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 75  {t2}..do_test au
12f0: 74 68 2d 31 2e 32 31 2e 31 20 7b 0a 20 20 70 72  th-1.21.1 {.  pr
1300: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
1310: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
1320: 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f  4} {.    if {$co
1330: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f 50  de=="SQLITE_DROP
1340: 5f 54 41 42 4c 45 22 7d 20 7b 0a 20 20 20 20 20  _TABLE"} {.     
1350: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
1360: 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67  [list $arg1 $arg
1370: 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20  2 $arg3 $arg4]. 
1380: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
1390: 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20  TE_DENY.    }.  
13a0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
13b0: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
13c0: 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45 20 74 32  l {DROP TABLE t2
13d0: 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68  }.} {1 {not auth
13e0: 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74  orized}}.do_test
13f0: 20 61 75 74 68 2d 31 2e 32 31 2e 32 20 7b 0a 20   auth-1.21.2 {. 
1400: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a   set ::authargs.
1410: 7d 20 7b 74 32 20 7b 7d 20 6d 61 69 6e 20 7b 7d  } {t2 {} main {}
1420: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
1430: 2e 32 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .22 {.  execsql 
1440: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
1450: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d  M sqlite_master}
1460: 0a 7d 20 7b 74 32 7d 0a 64 6f 5f 74 65 73 74 20  .} {t2}.do_test 
1470: 61 75 74 68 2d 31 2e 32 33 2e 31 20 7b 0a 20 20  auth-1.23.1 {.  
1480: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
1490: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
14a0: 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg4} {.    if {$
14b0: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52  code=="SQLITE_DR
14c0: 4f 50 5f 54 41 42 4c 45 22 7d 20 7b 0a 20 20 20  OP_TABLE"} {.   
14d0: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
14e0: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
14f0: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
1500: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
1510: 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20  LITE_IGNORE.    
1520: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
1530: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
1540: 63 68 73 71 6c 20 7b 44 52 4f 50 20 54 41 42 4c  chsql {DROP TABL
1550: 45 20 74 32 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  E t2}.} {0 {}}.d
1560: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 33  o_test auth-1.23
1570: 2e 32 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74  .2 {.  set ::aut
1580: 68 61 72 67 73 0a 7d 20 7b 74 32 20 7b 7d 20 6d  hargs.} {t2 {} m
1590: 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20  ain {}}.do_test 
15a0: 61 75 74 68 2d 31 2e 32 34 20 7b 0a 20 20 65 78  auth-1.24 {.  ex
15b0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61  ecsql {SELECT na
15c0: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  me FROM sqlite_m
15d0: 61 73 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a 0a 69  aster}.} {t2}..i
15e0: 66 63 61 70 61 62 6c 65 20 74 65 6d 70 64 62 20  fcapable tempdb 
15f0: 7b 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68  {.  do_test auth
1600: 2d 31 2e 32 35 20 7b 0a 20 20 20 20 70 72 6f 63  -1.25 {.    proc
1610: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
1620: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
1630: 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f   {.      if {$co
1640: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f 50  de=="SQLITE_DROP
1650: 5f 54 45 4d 50 5f 54 41 42 4c 45 22 7d 20 7b 0a  _TEMP_TABLE"} {.
1660: 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75          set ::au
1670: 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72  thargs [list $ar
1680: 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24  g1 $arg2 $arg3 $
1690: 61 72 67 34 5d 0a 20 20 20 20 20 20 20 20 72 65  arg4].        re
16a0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59  turn SQLITE_DENY
16b0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72  .      }.      r
16c0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
16d0: 20 20 20 20 7d 0a 20 20 20 20 63 61 74 63 68 73      }.    catchs
16e0: 71 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45 20 74  ql {DROP TABLE t
16f0: 31 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f 74 20 61  1}.  } {1 {not a
1700: 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 20 20 64 6f  uthorized}}.  do
1710: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 36 20  _test auth-1.26 
1720: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53  {.    execsql {S
1730: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
1740: 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
1750: 65 72 7d 0a 20 20 7d 20 7b 74 31 7d 0a 20 20 64  er}.  } {t1}.  d
1760: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 37  o_test auth-1.27
1770: 20 7b 0a 20 20 20 20 70 72 6f 63 20 61 75 74 68   {.    proc auth
1780: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
1790: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
17a0: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
17b0: 53 51 4c 49 54 45 5f 44 52 4f 50 5f 54 45 4d 50  SQLITE_DROP_TEMP
17c0: 5f 54 41 42 4c 45 22 7d 20 7b 0a 20 20 20 20 20  _TABLE"} {.     
17d0: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
17e0: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
17f0: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
1800: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
1810: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20  SQLITE_IGNORE.  
1820: 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75      }.      retu
1830: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20  rn SQLITE_OK.   
1840: 20 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20   }.    catchsql 
1850: 7b 44 52 4f 50 20 54 41 42 4c 45 20 74 31 7d 0a  {DROP TABLE t1}.
1860: 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20 20 64 6f 5f    } {0 {}}.  do_
1870: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 38 20 7b  test auth-1.28 {
1880: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45  .    execsql {SE
1890: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73  LECT name FROM s
18a0: 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
18b0: 72 7d 0a 20 20 7d 20 7b 74 31 7d 0a 7d 0a 0a 64  r}.  } {t1}.}..d
18c0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 39  o_test auth-1.29
18d0: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
18e0: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
18f0: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
1900: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
1910: 54 45 5f 49 4e 53 45 52 54 22 20 26 26 20 24 61  TE_INSERT" && $a
1920: 72 67 31 3d 3d 22 74 32 22 7d 20 7b 0a 20 20 20  rg1=="t2"} {.   
1930: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
1940: 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20  _DENY.    }.    
1950: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
1960: 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20  .  }.  catchsql 
1970: 7b 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20  {INSERT INTO t2 
1980: 56 41 4c 55 45 53 28 31 2c 32 2c 33 29 7d 0a 7d  VALUES(1,2,3)}.}
1990: 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69   {1 {not authori
19a0: 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  zed}}.do_test au
19b0: 74 68 2d 31 2e 33 30 20 7b 0a 20 20 65 78 65 63  th-1.30 {.  exec
19c0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52  sql {SELECT * FR
19d0: 4f 4d 20 74 32 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74  OM t2}.} {}.do_t
19e0: 65 73 74 20 61 75 74 68 2d 31 2e 33 31 20 7b 0a  est auth-1.31 {.
19f0: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
1a00: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
1a10: 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20   arg4} {.    if 
1a20: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
1a30: 49 4e 53 45 52 54 22 20 26 26 20 24 61 72 67 31  INSERT" && $arg1
1a40: 3d 3d 22 74 32 22 7d 20 7b 0a 20 20 20 20 20 20  =="t2"} {.      
1a50: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47  return SQLITE_IG
1a60: 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72  NORE.    }.    r
1a70: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
1a80: 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b    }.  catchsql {
1a90: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56  INSERT INTO t2 V
1aa0: 41 4c 55 45 53 28 31 2c 32 2c 33 29 7d 0a 7d 20  ALUES(1,2,3)}.} 
1ab0: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  {0 {}}.do_test a
1ac0: 75 74 68 2d 31 2e 33 32 20 7b 0a 20 20 65 78 65  uth-1.32 {.  exe
1ad0: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46  csql {SELECT * F
1ae0: 52 4f 4d 20 74 32 7d 0a 7d 20 7b 7d 0a 64 6f 5f  ROM t2}.} {}.do_
1af0: 74 65 73 74 20 61 75 74 68 2d 31 2e 33 33 20 7b  test auth-1.33 {
1b00: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
1b10: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
1b20: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66  3 arg4} {.    if
1b30: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
1b40: 5f 49 4e 53 45 52 54 22 20 26 26 20 24 61 72 67  _INSERT" && $arg
1b50: 31 3d 3d 22 74 31 22 7d 20 7b 0a 20 20 20 20 20  1=="t1"} {.     
1b60: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49   return SQLITE_I
1b70: 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20  GNORE.    }.    
1b80: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
1b90: 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20  .  }.  catchsql 
1ba0: 7b 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20  {INSERT INTO t2 
1bb0: 56 41 4c 55 45 53 28 31 2c 32 2c 33 29 7d 0a 7d  VALUES(1,2,3)}.}
1bc0: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
1bd0: 61 75 74 68 2d 31 2e 33 34 20 7b 0a 20 20 65 78  auth-1.34 {.  ex
1be0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20  ecsql {SELECT * 
1bf0: 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31 20 32 20  FROM t2}.} {1 2 
1c00: 33 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  3}..do_test auth
1c10: 2d 31 2e 33 35 2e 31 20 7b 0a 20 20 70 72 6f 63  -1.35.1 {.  proc
1c20: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
1c30: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
1c40: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
1c50: 3d 3d 22 53 51 4c 49 54 45 5f 52 45 41 44 22 20  =="SQLITE_READ" 
1c60: 26 26 20 24 61 72 67 31 3d 3d 22 74 32 22 20 26  && $arg1=="t2" &
1c70: 26 20 24 61 72 67 32 3d 3d 22 62 22 7d 20 7b 0a  & $arg2=="b"} {.
1c80: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
1c90: 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20  ITE_DENY.    }. 
1ca0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
1cb0: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
1cc0: 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f  ql {SELECT * FRO
1cd0: 4d 20 74 32 7d 0a 7d 20 7b 31 20 7b 61 63 63 65  M t2}.} {1 {acce
1ce0: 73 73 20 74 6f 20 74 32 2e 62 20 69 73 20 70 72  ss to t2.b is pr
1cf0: 6f 68 69 62 69 74 65 64 7d 7d 0a 64 6f 5f 74 65  ohibited}}.do_te
1d00: 73 74 20 61 75 74 68 2d 31 2e 33 35 2e 32 20 7b  st auth-1.35.2 {
1d10: 0a 20 20 65 78 65 63 73 71 6c 20 7b 41 54 54 41  .  execsql {ATTA
1d20: 43 48 20 44 41 54 41 42 41 53 45 20 27 74 65 73  CH DATABASE 'tes
1d30: 74 2e 64 62 27 20 41 53 20 74 77 6f 7d 0a 20 20  t.db' AS two}.  
1d40: 63 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54  catchsql {SELECT
1d50: 20 2a 20 46 52 4f 4d 20 74 77 6f 2e 74 32 7d 0a   * FROM two.t2}.
1d60: 7d 20 7b 31 20 7b 61 63 63 65 73 73 20 74 6f 20  } {1 {access to 
1d70: 74 77 6f 2e 74 32 2e 62 20 69 73 20 70 72 6f 68  two.t2.b is proh
1d80: 69 62 69 74 65 64 7d 7d 0a 65 78 65 63 73 71 6c  ibited}}.execsql
1d90: 20 7b 44 45 54 41 43 48 20 44 41 54 41 42 41 53   {DETACH DATABAS
1da0: 45 20 74 77 6f 7d 0a 64 6f 5f 74 65 73 74 20 61  E two}.do_test a
1db0: 75 74 68 2d 31 2e 33 36 20 7b 0a 20 20 70 72 6f  uth-1.36 {.  pro
1dc0: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
1dd0: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
1de0: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
1df0: 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45 41 44 22  e=="SQLITE_READ"
1e00: 20 26 26 20 24 61 72 67 31 3d 3d 22 74 32 22 20   && $arg1=="t2" 
1e10: 26 26 20 24 61 72 67 32 3d 3d 22 62 22 7d 20 7b  && $arg2=="b"} {
1e20: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
1e30: 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20  LITE_IGNORE.    
1e40: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
1e50: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
1e60: 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20  chsql {SELECT * 
1e70: 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 30 20 7b 31  FROM t2}.} {0 {1
1e80: 20 7b 7d 20 33 7d 7d 0a 64 6f 5f 74 65 73 74 20   {} 3}}.do_test 
1e90: 61 75 74 68 2d 31 2e 33 37 20 7b 0a 20 20 70 72  auth-1.37 {.  pr
1ea0: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
1eb0: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
1ec0: 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f  4} {.    if {$co
1ed0: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45 41 44  de=="SQLITE_READ
1ee0: 22 20 26 26 20 24 61 72 67 31 3d 3d 22 74 32 22  " && $arg1=="t2"
1ef0: 20 26 26 20 24 61 72 67 32 3d 3d 22 62 22 7d 20   && $arg2=="b"} 
1f00: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  {.      return S
1f10: 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20  QLITE_IGNORE.   
1f20: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
1f30: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
1f40: 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a  tchsql {SELECT *
1f50: 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20 62   FROM t2 WHERE b
1f60: 3d 32 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f  =2}.} {0 {}}.do_
1f70: 74 65 73 74 20 61 75 74 68 2d 31 2e 33 38 20 7b  test auth-1.38 {
1f80: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
1f90: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
1fa0: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66  3 arg4} {.    if
1fb0: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
1fc0: 5f 52 45 41 44 22 20 26 26 20 24 61 72 67 31 3d  _READ" && $arg1=
1fd0: 3d 22 74 32 22 20 26 26 20 24 61 72 67 32 3d 3d  ="t2" && $arg2==
1fe0: 22 61 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74  "a"} {.      ret
1ff0: 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52  urn SQLITE_IGNOR
2000: 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  E.    }.    retu
2010: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
2020: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 53 45 4c  .  catchsql {SEL
2030: 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 20 57 48  ECT * FROM t2 WH
2040: 45 52 45 20 62 3d 32 7d 0a 7d 20 7b 30 20 7b 7b  ERE b=2}.} {0 {{
2050: 7d 20 32 20 33 7d 7d 0a 64 6f 5f 74 65 73 74 20  } 2 3}}.do_test 
2060: 61 75 74 68 2d 31 2e 33 39 20 7b 0a 20 20 70 72  auth-1.39 {.  pr
2070: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
2080: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
2090: 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f  4} {.    if {$co
20a0: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45 41 44  de=="SQLITE_READ
20b0: 22 20 26 26 20 24 61 72 67 31 3d 3d 22 74 32 22  " && $arg1=="t2"
20c0: 20 26 26 20 24 61 72 67 32 3d 3d 22 62 22 7d 20   && $arg2=="b"} 
20d0: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  {.      return S
20e0: 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20  QLITE_IGNORE.   
20f0: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
2100: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
2110: 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a  tchsql {SELECT *
2120: 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20 62   FROM t2 WHERE b
2130: 20 49 53 20 4e 55 4c 4c 7d 0a 7d 20 7b 30 20 7b   IS NULL}.} {0 {
2140: 31 20 7b 7d 20 33 7d 7d 0a 64 6f 5f 74 65 73 74  1 {} 3}}.do_test
2150: 20 61 75 74 68 2d 31 2e 34 30 20 7b 0a 20 20 70   auth-1.40 {.  p
2160: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
2170: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
2180: 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g4} {.    if {$c
2190: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45 41  ode=="SQLITE_REA
21a0: 44 22 20 26 26 20 24 61 72 67 31 3d 3d 22 74 32  D" && $arg1=="t2
21b0: 22 20 26 26 20 24 61 72 67 32 3d 3d 22 62 22 7d  " && $arg2=="b"}
21c0: 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   {.      return 
21d0: 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20  SQLITE_DENY.    
21e0: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
21f0: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
2200: 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 61 2c  chsql {SELECT a,
2210: 63 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20  c FROM t2 WHERE 
2220: 62 20 49 53 20 4e 55 4c 4c 7d 0a 7d 20 7b 31 20  b IS NULL}.} {1 
2230: 7b 61 63 63 65 73 73 20 74 6f 20 74 32 2e 62 20  {access to t2.b 
2240: 69 73 20 70 72 6f 68 69 62 69 74 65 64 7d 7d 0a  is prohibited}}.
2250: 20 20 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d    .do_test auth-
2260: 31 2e 34 31 20 7b 0a 20 20 70 72 6f 63 20 61 75  1.41 {.  proc au
2270: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
2280: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
2290: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
22a0: 53 51 4c 49 54 45 5f 55 50 44 41 54 45 22 20 26  SQLITE_UPDATE" &
22b0: 26 20 24 61 72 67 31 3d 3d 22 74 32 22 20 26 26  & $arg1=="t2" &&
22c0: 20 24 61 72 67 32 3d 3d 22 62 22 7d 20 7b 0a 20   $arg2=="b"} {. 
22d0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
22e0: 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20  TE_DENY.    }.  
22f0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
2300: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
2310: 6c 20 7b 55 50 44 41 54 45 20 74 32 20 53 45 54  l {UPDATE t2 SET
2320: 20 61 3d 31 31 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a   a=11}.} {0 {}}.
2330: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 34  do_test auth-1.4
2340: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  2 {.  execsql {S
2350: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d  ELECT * FROM t2}
2360: 0a 7d 20 7b 31 31 20 32 20 33 7d 0a 64 6f 5f 74  .} {11 2 3}.do_t
2370: 65 73 74 20 61 75 74 68 2d 31 2e 34 33 20 7b 0a  est auth-1.43 {.
2380: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
2390: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
23a0: 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20   arg4} {.    if 
23b0: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
23c0: 55 50 44 41 54 45 22 20 26 26 20 24 61 72 67 31  UPDATE" && $arg1
23d0: 3d 3d 22 74 32 22 20 26 26 20 24 61 72 67 32 3d  =="t2" && $arg2=
23e0: 3d 22 62 22 7d 20 7b 0a 20 20 20 20 20 20 72 65  ="b"} {.      re
23f0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59  turn SQLITE_DENY
2400: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
2410: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
2420: 20 20 63 61 74 63 68 73 71 6c 20 7b 55 50 44 41    catchsql {UPDA
2430: 54 45 20 74 32 20 53 45 54 20 62 3d 32 32 2c 20  TE t2 SET b=22, 
2440: 63 3d 33 33 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20  c=33}.} {1 {not 
2450: 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f  authorized}}.do_
2460: 74 65 73 74 20 61 75 74 68 2d 31 2e 34 34 20 7b  test auth-1.44 {
2470: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
2480: 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d 0a 7d 20  CT * FROM t2}.} 
2490: 7b 31 31 20 32 20 33 7d 0a 64 6f 5f 74 65 73 74  {11 2 3}.do_test
24a0: 20 61 75 74 68 2d 31 2e 34 35 20 7b 0a 20 20 70   auth-1.45 {.  p
24b0: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
24c0: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
24d0: 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g4} {.    if {$c
24e0: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 55 50 44  ode=="SQLITE_UPD
24f0: 41 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d 22  ATE" && $arg1=="
2500: 74 32 22 20 26 26 20 24 61 72 67 32 3d 3d 22 62  t2" && $arg2=="b
2510: 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72  "} {.      retur
2520: 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a  n SQLITE_IGNORE.
2530: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
2540: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
2550: 20 63 61 74 63 68 73 71 6c 20 7b 55 50 44 41 54   catchsql {UPDAT
2560: 45 20 74 32 20 53 45 54 20 62 3d 32 32 2c 20 63  E t2 SET b=22, c
2570: 3d 33 33 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f  =33}.} {0 {}}.do
2580: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 34 36 20  _test auth-1.46 
2590: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
25a0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d 0a 7d  ECT * FROM t2}.}
25b0: 20 7b 31 31 20 32 20 33 33 7d 0a 0a 64 6f 5f 74   {11 2 33}..do_t
25c0: 65 73 74 20 61 75 74 68 2d 31 2e 34 37 20 7b 0a  est auth-1.47 {.
25d0: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
25e0: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
25f0: 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20   arg4} {.    if 
2600: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
2610: 44 45 4c 45 54 45 22 20 26 26 20 24 61 72 67 31  DELETE" && $arg1
2620: 3d 3d 22 74 32 22 7d 20 7b 0a 20 20 20 20 20 20  =="t2"} {.      
2630: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45  return SQLITE_DE
2640: 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  NY.    }.    ret
2650: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
2660: 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44 45  }.  catchsql {DE
2670: 4c 45 54 45 20 46 52 4f 4d 20 74 32 20 57 48 45  LETE FROM t2 WHE
2680: 52 45 20 61 3d 31 31 7d 0a 7d 20 7b 31 20 7b 6e  RE a=11}.} {1 {n
2690: 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a  ot authorized}}.
26a0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 34  do_test auth-1.4
26b0: 38 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  8 {.  execsql {S
26c0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d  ELECT * FROM t2}
26d0: 0a 7d 20 7b 31 31 20 32 20 33 33 7d 0a 64 6f 5f  .} {11 2 33}.do_
26e0: 74 65 73 74 20 61 75 74 68 2d 31 2e 34 39 20 7b  test auth-1.49 {
26f0: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
2700: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
2710: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66  3 arg4} {.    if
2720: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
2730: 5f 44 45 4c 45 54 45 22 20 26 26 20 24 61 72 67  _DELETE" && $arg
2740: 31 3d 3d 22 74 32 22 7d 20 7b 0a 20 20 20 20 20  1=="t2"} {.     
2750: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49   return SQLITE_I
2760: 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20  GNORE.    }.    
2770: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
2780: 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20  .  }.  catchsql 
2790: 7b 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 32 20  {DELETE FROM t2 
27a0: 57 48 45 52 45 20 61 3d 31 31 7d 0a 7d 20 7b 30  WHERE a=11}.} {0
27b0: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
27c0: 68 2d 31 2e 35 30 20 7b 0a 20 20 65 78 65 63 73  h-1.50 {.  execs
27d0: 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f  ql {SELECT * FRO
27e0: 4d 20 74 32 7d 0a 7d 20 7b 31 31 20 32 20 33 33  M t2}.} {11 2 33
27f0: 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }..do_test auth-
2800: 31 2e 35 31 20 7b 0a 20 20 70 72 6f 63 20 61 75  1.51 {.  proc au
2810: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
2820: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
2830: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
2840: 53 51 4c 49 54 45 5f 53 45 4c 45 43 54 22 7d 20  SQLITE_SELECT"} 
2850: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  {.      return S
2860: 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d  QLITE_DENY.    }
2870: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
2880: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
2890: 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46  hsql {SELECT * F
28a0: 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31 20 7b 6e 6f  ROM t2}.} {1 {no
28b0: 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64  t authorized}}.d
28c0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 35 32  o_test auth-1.52
28d0: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
28e0: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
28f0: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
2900: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
2910: 54 45 5f 53 45 4c 45 43 54 22 7d 20 7b 0a 20 20  TE_SELECT"} {.  
2920: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
2930: 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20  E_IGNORE.    }. 
2940: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
2950: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
2960: 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f  ql {SELECT * FRO
2970: 4d 20 74 32 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  M t2}.} {0 {}}.d
2980: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 35 33  o_test auth-1.53
2990: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
29a0: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
29b0: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
29c0: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
29d0: 54 45 5f 53 45 4c 45 43 54 22 7d 20 7b 0a 20 20  TE_SELECT"} {.  
29e0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
29f0: 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 72  E_OK.    }.    r
2a00: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
2a10: 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b    }.  catchsql {
2a20: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32  SELECT * FROM t2
2a30: 7d 0a 7d 20 7b 30 20 7b 31 31 20 32 20 33 33 7d  }.} {0 {11 2 33}
2a40: 7d 0a 0a 23 20 55 70 64 61 74 65 20 66 6f 72 20  }..# Update for 
2a50: 76 65 72 73 69 6f 6e 20 33 3a 20 54 68 65 72 65  version 3: There
2a60: 20 75 73 65 64 20 74 6f 20 62 65 20 61 20 68 61   used to be a ha
2a70: 6e 64 66 75 6c 20 6f 66 20 74 65 73 74 20 68 65  ndful of test he
2a80: 72 65 20 74 68 61 74 0a 23 20 74 65 73 74 65 64  re that.# tested
2a90: 20 74 68 65 20 61 75 74 68 6f 72 69 73 61 74 69   the authorisati
2aa0: 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 77 69 74 68  on callback with
2ab0: 20 74 68 65 20 43 4f 50 59 20 63 6f 6d 6d 61 6e   the COPY comman
2ac0: 64 2e 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  d. The following
2ad0: 0a 23 20 74 65 73 74 20 6d 61 6b 65 73 20 74 68  .# test makes th
2ae0: 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20  e same database 
2af0: 6d 6f 64 69 66 69 63 61 74 69 6f 6e 73 20 61 73  modifications as
2b00: 20 74 68 65 79 20 75 73 65 64 20 74 6f 2e 0a 64   they used to..d
2b10: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 35 34  o_test auth-1.54
2b20: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 49 4e   {.  execsql {IN
2b30: 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c  SERT INTO t2 VAL
2b40: 55 45 53 28 37 2c 20 38 2c 20 39 29 3b 7d 0a 7d  UES(7, 8, 9);}.}
2b50: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68   {}.do_test auth
2b60: 2d 31 2e 35 35 20 7b 0a 20 20 65 78 65 63 73 71  -1.55 {.  execsq
2b70: 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  l {SELECT * FROM
2b80: 20 74 32 7d 0a 7d 20 7b 31 31 20 32 20 33 33 20   t2}.} {11 2 33 
2b90: 37 20 38 20 39 7d 0a 0a 64 6f 5f 74 65 73 74 20  7 8 9}..do_test 
2ba0: 61 75 74 68 2d 31 2e 36 33 20 7b 0a 20 20 70 72  auth-1.63 {.  pr
2bb0: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
2bc0: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
2bd0: 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f  4} {.    if {$co
2be0: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45  de=="SQLITE_DELE
2bf0: 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73  TE" && $arg1=="s
2c00: 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 7d 20 7b  qlite_master"} {
2c10: 0a 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  .       return S
2c20: 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d  QLITE_DENY.    }
2c30: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
2c40: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
2c50: 68 73 71 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45  hsql {DROP TABLE
2c60: 20 74 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61   t2}.} {1 {not a
2c70: 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74  uthorized}}.do_t
2c80: 65 73 74 20 61 75 74 68 2d 31 2e 36 34 20 7b 0a  est auth-1.64 {.
2c90: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
2ca0: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
2cb0: 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32  te_master}.} {t2
2cc0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
2cd0: 2e 36 35 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  .65 {.  proc aut
2ce0: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
2cf0: 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20  2 arg3 arg4} {. 
2d00: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
2d10: 51 4c 49 54 45 5f 44 45 4c 45 54 45 22 20 26 26  QLITE_DELETE" &&
2d20: 20 24 61 72 67 31 3d 3d 22 74 32 22 7d 20 7b 0a   $arg1=="t2"} {.
2d30: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
2d40: 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a  LITE_DENY.    }.
2d50: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
2d60: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
2d70: 73 71 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45 20  sql {DROP TABLE 
2d80: 74 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75  t2}.} {1 {not au
2d90: 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65  thorized}}.do_te
2da0: 73 74 20 61 75 74 68 2d 31 2e 36 36 20 7b 0a 20  st auth-1.66 {. 
2db0: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
2dc0: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
2dd0: 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 7d  e_master}.} {t2}
2de0: 0a 0a 69 66 63 61 70 61 62 6c 65 20 74 65 6d 70  ..ifcapable temp
2df0: 64 62 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 61  db {.  do_test a
2e00: 75 74 68 2d 31 2e 36 37 20 7b 0a 20 20 20 20 70  uth-1.67 {.    p
2e10: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
2e20: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
2e30: 67 34 7d 20 7b 0a 20 20 20 20 20 20 69 66 20 7b  g4} {.      if {
2e40: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44  $code=="SQLITE_D
2e50: 45 4c 45 54 45 22 20 26 26 20 24 61 72 67 31 3d  ELETE" && $arg1=
2e60: 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  ="sqlite_temp_ma
2e70: 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 20  ster"} {.       
2e80: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
2e90: 44 45 4e 59 0a 20 20 20 20 20 20 7d 0a 20 20 20  DENY.      }.   
2ea0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
2eb0: 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61  _OK.    }.    ca
2ec0: 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54 41 42  tchsql {DROP TAB
2ed0: 4c 45 20 74 31 7d 0a 20 20 7d 20 7b 31 20 7b 6e  LE t1}.  } {1 {n
2ee0: 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a  ot authorized}}.
2ef0: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31    do_test auth-1
2f00: 2e 36 38 20 7b 0a 20 20 20 20 65 78 65 63 73 71  .68 {.    execsq
2f10: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
2f20: 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f  ROM sqlite_temp_
2f30: 6d 61 73 74 65 72 7d 0a 20 20 7d 20 7b 74 31 7d  master}.  } {t1}
2f40: 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  .  do_test auth-
2f50: 31 2e 36 39 20 7b 0a 20 20 20 20 70 72 6f 63 20  1.69 {.    proc 
2f60: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
2f70: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
2f80: 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64  {.      if {$cod
2f90: 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45 54  e=="SQLITE_DELET
2fa0: 45 22 20 26 26 20 24 61 72 67 31 3d 3d 22 74 31  E" && $arg1=="t1
2fb0: 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 72 65  "} {.         re
2fc0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59  turn SQLITE_DENY
2fd0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72  .      }.      r
2fe0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
2ff0: 20 20 20 20 7d 0a 20 20 20 20 63 61 74 63 68 73      }.    catchs
3000: 71 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45 20 74  ql {DROP TABLE t
3010: 31 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f 74 20 61  1}.  } {1 {not a
3020: 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 20 20 64 6f  uthorized}}.  do
3030: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 37 30 20  _test auth-1.70 
3040: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53  {.    execsql {S
3050: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
3060: 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
3070: 65 72 7d 0a 20 20 7d 20 7b 74 31 7d 0a 7d 0a 0a  er}.  } {t1}.}..
3080: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 37  do_test auth-1.7
3090: 31 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  1 {.  proc auth 
30a0: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
30b0: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
30c0: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
30d0: 49 54 45 5f 44 45 4c 45 54 45 22 20 26 26 20 24  ITE_DELETE" && $
30e0: 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 6d 61  arg1=="sqlite_ma
30f0: 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 20  ster"} {.       
3100: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47  return SQLITE_IG
3110: 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72  NORE.    }.    r
3120: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
3130: 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b    }.  catchsql {
3140: 44 52 4f 50 20 54 41 42 4c 45 20 74 32 7d 0a 7d  DROP TABLE t2}.}
3150: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
3160: 61 75 74 68 2d 31 2e 37 32 20 7b 0a 20 20 65 78  auth-1.72 {.  ex
3170: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61  ecsql {SELECT na
3180: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  me FROM sqlite_m
3190: 61 73 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a 64 6f  aster}.} {t2}.do
31a0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 37 33 20  _test auth-1.73 
31b0: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
31c0: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
31d0: 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69  g3 arg4} {.    i
31e0: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
31f0: 45 5f 44 45 4c 45 54 45 22 20 26 26 20 24 61 72  E_DELETE" && $ar
3200: 67 31 3d 3d 22 74 32 22 7d 20 7b 0a 20 20 20 20  g1=="t2"} {.    
3210: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
3220: 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20  _IGNORE.    }.  
3230: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
3240: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
3250: 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45 20 74 32  l {DROP TABLE t2
3260: 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  }.} {0 {}}.do_te
3270: 73 74 20 61 75 74 68 2d 31 2e 37 34 20 7b 0a 20  st auth-1.74 {. 
3280: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
3290: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
32a0: 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 7d  e_master}.} {t2}
32b0: 0a 0a 69 66 63 61 70 61 62 6c 65 20 74 65 6d 70  ..ifcapable temp
32c0: 64 62 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 61  db {.  do_test a
32d0: 75 74 68 2d 31 2e 37 35 20 7b 0a 20 20 20 20 70  uth-1.75 {.    p
32e0: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
32f0: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
3300: 67 34 7d 20 7b 0a 20 20 20 20 20 20 69 66 20 7b  g4} {.      if {
3310: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44  $code=="SQLITE_D
3320: 45 4c 45 54 45 22 20 26 26 20 24 61 72 67 31 3d  ELETE" && $arg1=
3330: 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  ="sqlite_temp_ma
3340: 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 20  ster"} {.       
3350: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
3360: 49 47 4e 4f 52 45 0a 20 20 20 20 20 20 7d 0a 20  IGNORE.      }. 
3370: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
3380: 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20  TE_OK.    }.    
3390: 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54  catchsql {DROP T
33a0: 41 42 4c 45 20 74 31 7d 0a 20 20 7d 20 7b 30 20  ABLE t1}.  } {0 
33b0: 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75  {}}.  do_test au
33c0: 74 68 2d 31 2e 37 36 20 7b 0a 20 20 20 20 65 78  th-1.76 {.    ex
33d0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61  ecsql {SELECT na
33e0: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74  me FROM sqlite_t
33f0: 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 20 20 7d 20  emp_master}.  } 
3400: 7b 74 31 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61  {t1}.  do_test a
3410: 75 74 68 2d 31 2e 37 37 20 7b 0a 20 20 20 20 70  uth-1.77 {.    p
3420: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
3430: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
3440: 67 34 7d 20 7b 0a 20 20 20 20 20 20 69 66 20 7b  g4} {.      if {
3450: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44  $code=="SQLITE_D
3460: 45 4c 45 54 45 22 20 26 26 20 24 61 72 67 31 3d  ELETE" && $arg1=
3470: 3d 22 74 31 22 7d 20 7b 0a 20 20 20 20 20 20 20  ="t1"} {.       
3480: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
3490: 49 47 4e 4f 52 45 0a 20 20 20 20 20 20 7d 0a 20  IGNORE.      }. 
34a0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
34b0: 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20  TE_OK.    }.    
34c0: 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54  catchsql {DROP T
34d0: 41 42 4c 45 20 74 31 7d 0a 20 20 7d 20 7b 30 20  ABLE t1}.  } {0 
34e0: 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75  {}}.  do_test au
34f0: 74 68 2d 31 2e 37 38 20 7b 0a 20 20 20 20 65 78  th-1.78 {.    ex
3500: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61  ecsql {SELECT na
3510: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74  me FROM sqlite_t
3520: 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 20 20 7d 20  emp_master}.  } 
3530: 7b 74 31 7d 0a 7d 0a 0a 23 20 54 65 73 74 20 63  {t1}.}..# Test c
3540: 61 73 65 73 20 61 75 74 68 2d 31 2e 37 39 20 74  ases auth-1.79 t
3550: 6f 20 61 75 74 68 2d 31 2e 31 32 34 20 74 65 73  o auth-1.124 tes
3560: 74 20 63 72 65 61 74 69 6e 67 20 61 6e 64 20 64  t creating and d
3570: 72 6f 70 70 69 6e 67 20 76 69 65 77 73 2e 0a 23  ropping views..#
3580: 20 4f 6d 69 74 20 74 68 65 73 65 20 69 66 20 74   Omit these if t
3590: 68 65 20 6c 69 62 72 61 72 79 20 77 61 73 20 63  he library was c
35a0: 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 76 69 65  ompiled with vie
35b0: 77 73 20 6f 6d 69 74 74 65 64 2e 0a 69 66 63 61  ws omitted..ifca
35c0: 70 61 62 6c 65 20 76 69 65 77 20 7b 0a 64 6f 5f  pable view {.do_
35d0: 74 65 73 74 20 61 75 74 68 2d 31 2e 37 39 20 7b  test auth-1.79 {
35e0: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
35f0: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
3600: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66  3 arg4} {.    if
3610: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
3620: 5f 43 52 45 41 54 45 5f 56 49 45 57 22 7d 20 7b  _CREATE_VIEW"} {
3630: 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74  .      set ::aut
3640: 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67  hargs [list $arg
3650: 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61  1 $arg2 $arg3 $a
3660: 72 67 34 5d 20 0a 20 20 20 20 20 20 72 65 74 75  rg4] .      retu
3670: 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20  rn SQLITE_DENY. 
3680: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
3690: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
36a0: 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45  catchsql {CREATE
36b0: 20 56 49 45 57 20 76 31 20 41 53 20 53 45 4c 45   VIEW v1 AS SELE
36c0: 43 54 20 61 2b 31 2c 62 2b 31 20 46 52 4f 4d 20  CT a+1,b+1 FROM 
36d0: 74 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75  t2}.} {1 {not au
36e0: 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65  thorized}}.do_te
36f0: 73 74 20 61 75 74 68 2d 31 2e 38 30 20 7b 0a 20  st auth-1.80 {. 
3700: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a   set ::authargs.
3710: 7d 20 7b 76 31 20 7b 7d 20 6d 61 69 6e 20 7b 7d  } {v1 {} main {}
3720: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
3730: 2e 38 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .81 {.  execsql 
3740: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
3750: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d  M sqlite_master}
3760: 0a 7d 20 7b 74 32 7d 0a 64 6f 5f 74 65 73 74 20  .} {t2}.do_test 
3770: 61 75 74 68 2d 31 2e 38 32 20 7b 0a 20 20 70 72  auth-1.82 {.  pr
3780: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
3790: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
37a0: 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f  4} {.    if {$co
37b0: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52 45 41  de=="SQLITE_CREA
37c0: 54 45 5f 56 49 45 57 22 7d 20 7b 0a 20 20 20 20  TE_VIEW"} {.    
37d0: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
37e0: 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72   [list $arg1 $ar
37f0: 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 20  g2 $arg3 $arg4] 
3800: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
3810: 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20  LITE_IGNORE.    
3820: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
3830: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
3840: 63 68 73 71 6c 20 7b 43 52 45 41 54 45 20 56 49  chsql {CREATE VI
3850: 45 57 20 76 31 20 41 53 20 53 45 4c 45 43 54 20  EW v1 AS SELECT 
3860: 61 2b 31 2c 62 2b 31 20 46 52 4f 4d 20 74 32 7d  a+1,b+1 FROM t2}
3870: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
3880: 74 20 61 75 74 68 2d 31 2e 38 33 20 7b 0a 20 20  t auth-1.83 {.  
3890: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d  set ::authargs.}
38a0: 20 7b 76 31 20 7b 7d 20 6d 61 69 6e 20 7b 7d 7d   {v1 {} main {}}
38b0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
38c0: 38 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  84 {.  execsql {
38d0: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
38e0: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a   sqlite_master}.
38f0: 7d 20 7b 74 32 7d 0a 0a 69 66 63 61 70 61 62 6c  } {t2}..ifcapabl
3900: 65 20 74 65 6d 70 64 62 20 7b 0a 20 20 64 6f 5f  e tempdb {.  do_
3910: 74 65 73 74 20 61 75 74 68 2d 31 2e 38 35 20 7b  test auth-1.85 {
3920: 0a 20 20 20 20 70 72 6f 63 20 61 75 74 68 20 7b  .    proc auth {
3930: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
3940: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
3950: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
3960: 4c 49 54 45 5f 43 52 45 41 54 45 5f 54 45 4d 50  LITE_CREATE_TEMP
3970: 5f 56 49 45 57 22 7d 20 7b 0a 20 20 20 20 20 20  _VIEW"} {.      
3980: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
3990: 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72   [list $arg1 $ar
39a0: 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 20  g2 $arg3 $arg4] 
39b0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
39c0: 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20  SQLITE_DENY.    
39d0: 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e    }.      return
39e0: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d   SQLITE_OK.    }
39f0: 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 43  .    catchsql {C
3a00: 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20  REATE TEMPORARY 
3a10: 56 49 45 57 20 76 31 20 41 53 20 53 45 4c 45 43  VIEW v1 AS SELEC
3a20: 54 20 61 2b 31 2c 62 2b 31 20 46 52 4f 4d 20 74  T a+1,b+1 FROM t
3a30: 32 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f 74 20 61  2}.  } {1 {not a
3a40: 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 20 20 64 6f  uthorized}}.  do
3a50: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 38 36 20  _test auth-1.86 
3a60: 7b 0a 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68  {.    set ::auth
3a70: 61 72 67 73 0a 20 20 7d 20 7b 76 31 20 7b 7d 20  args.  } {v1 {} 
3a80: 74 65 6d 70 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65  temp {}}.  do_te
3a90: 73 74 20 61 75 74 68 2d 31 2e 38 37 20 7b 0a 20  st auth-1.87 {. 
3aa0: 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45     execsql {SELE
3ab0: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
3ac0: 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d  ite_temp_master}
3ad0: 0a 20 20 7d 20 7b 74 31 7d 0a 20 20 64 6f 5f 74  .  } {t1}.  do_t
3ae0: 65 73 74 20 61 75 74 68 2d 31 2e 38 38 20 7b 0a  est auth-1.88 {.
3af0: 20 20 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63      proc auth {c
3b00: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
3b10: 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 20  g3 arg4} {.     
3b20: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
3b30: 49 54 45 5f 43 52 45 41 54 45 5f 54 45 4d 50 5f  ITE_CREATE_TEMP_
3b40: 56 49 45 57 22 7d 20 7b 0a 20 20 20 20 20 20 20  VIEW"} {.       
3b50: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
3b60: 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67  [list $arg1 $arg
3b70: 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 20 0a  2 $arg3 $arg4] .
3b80: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
3b90: 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20  QLITE_IGNORE.   
3ba0: 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72     }.      retur
3bb0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20  n SQLITE_OK.    
3bc0: 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b  }.    catchsql {
3bd0: 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59  CREATE TEMPORARY
3be0: 20 56 49 45 57 20 76 31 20 41 53 20 53 45 4c 45   VIEW v1 AS SELE
3bf0: 43 54 20 61 2b 31 2c 62 2b 31 20 46 52 4f 4d 20  CT a+1,b+1 FROM 
3c00: 74 32 7d 0a 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20  t2}.  } {0 {}}. 
3c10: 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e   do_test auth-1.
3c20: 38 39 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a 61  89 {.    set ::a
3c30: 75 74 68 61 72 67 73 0a 20 20 7d 20 7b 76 31 20  uthargs.  } {v1 
3c40: 7b 7d 20 74 65 6d 70 20 7b 7d 7d 0a 20 20 64 6f  {} temp {}}.  do
3c50: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 39 30 20  _test auth-1.90 
3c60: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53  {.    execsql {S
3c70: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
3c80: 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
3c90: 65 72 7d 0a 20 20 7d 20 7b 74 31 7d 0a 7d 0a 0a  er}.  } {t1}.}..
3ca0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 39  do_test auth-1.9
3cb0: 31 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  1 {.  proc auth 
3cc0: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
3cd0: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
3ce0: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
3cf0: 49 54 45 5f 49 4e 53 45 52 54 22 20 26 26 20 24  ITE_INSERT" && $
3d00: 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 6d 61  arg1=="sqlite_ma
3d10: 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 72  ster"} {.      r
3d20: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e  eturn SQLITE_DEN
3d30: 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  Y.    }.    retu
3d40: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
3d50: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45  .  catchsql {CRE
3d60: 41 54 45 20 56 49 45 57 20 76 31 20 41 53 20 53  ATE VIEW v1 AS S
3d70: 45 4c 45 43 54 20 61 2b 31 2c 62 2b 31 20 46 52  ELECT a+1,b+1 FR
3d80: 4f 4d 20 74 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74  OM t2}.} {1 {not
3d90: 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f   authorized}}.do
3da0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 39 32 20  _test auth-1.92 
3db0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
3dc0: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
3dd0: 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b  lite_master}.} {
3de0: 74 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  t2}.do_test auth
3df0: 2d 31 2e 39 33 20 7b 0a 20 20 70 72 6f 63 20 61  -1.93 {.  proc a
3e00: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
3e10: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
3e20: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
3e30: 22 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 22 20  "SQLITE_INSERT" 
3e40: 26 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74  && $arg1=="sqlit
3e50: 65 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20  e_master"} {.   
3e60: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
3e70: 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20  _IGNORE.    }.  
3e80: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
3e90: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
3ea0: 6c 20 7b 43 52 45 41 54 45 20 56 49 45 57 20 76  l {CREATE VIEW v
3eb0: 31 20 41 53 20 53 45 4c 45 43 54 20 61 2b 31 2c  1 AS SELECT a+1,
3ec0: 62 2b 31 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b  b+1 FROM t2}.} {
3ed0: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  0 {}}.do_test au
3ee0: 74 68 2d 31 2e 39 34 20 7b 0a 20 20 65 78 65 63  th-1.94 {.  exec
3ef0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
3f00: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
3f10: 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a 0a 69 66 63  ter}.} {t2}..ifc
3f20: 61 70 61 62 6c 65 20 74 65 6d 70 64 62 20 7b 0a  apable tempdb {.
3f30: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31    do_test auth-1
3f40: 2e 39 35 20 7b 0a 20 20 20 20 70 72 6f 63 20 61  .95 {.    proc a
3f50: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
3f60: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
3f70: 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64 65  .      if {$code
3f80: 3d 3d 22 53 51 4c 49 54 45 5f 49 4e 53 45 52 54  =="SQLITE_INSERT
3f90: 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71 6c  " && $arg1=="sql
3fa0: 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22  ite_temp_master"
3fb0: 7d 20 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75  } {.        retu
3fc0: 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20  rn SQLITE_DENY. 
3fd0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74       }.      ret
3fe0: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
3ff0: 20 20 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c    }.    catchsql
4000: 20 7b 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41   {CREATE TEMPORA
4010: 52 59 20 56 49 45 57 20 76 31 20 41 53 20 53 45  RY VIEW v1 AS SE
4020: 4c 45 43 54 20 61 2b 31 2c 62 2b 31 20 46 52 4f  LECT a+1,b+1 FRO
4030: 4d 20 74 32 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f  M t2}.  } {1 {no
4040: 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 20  t authorized}}. 
4050: 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e   do_test auth-1.
4060: 39 36 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  96 {.    execsql
4070: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
4080: 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  OM sqlite_temp_m
4090: 61 73 74 65 72 7d 0a 20 20 7d 20 7b 74 31 7d 0a  aster}.  } {t1}.
40a0: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31    do_test auth-1
40b0: 2e 39 37 20 7b 0a 20 20 20 20 70 72 6f 63 20 61  .97 {.    proc a
40c0: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
40d0: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
40e0: 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64 65  .      if {$code
40f0: 3d 3d 22 53 51 4c 49 54 45 5f 49 4e 53 45 52 54  =="SQLITE_INSERT
4100: 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71 6c  " && $arg1=="sql
4110: 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22  ite_temp_master"
4120: 7d 20 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75  } {.        retu
4130: 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45  rn SQLITE_IGNORE
4140: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72  .      }.      r
4150: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
4160: 20 20 20 20 7d 0a 20 20 20 20 63 61 74 63 68 73      }.    catchs
4170: 71 6c 20 7b 43 52 45 41 54 45 20 54 45 4d 50 4f  ql {CREATE TEMPO
4180: 52 41 52 59 20 56 49 45 57 20 76 31 20 41 53 20  RARY VIEW v1 AS 
4190: 53 45 4c 45 43 54 20 61 2b 31 2c 62 2b 31 20 46  SELECT a+1,b+1 F
41a0: 52 4f 4d 20 74 32 7d 0a 20 20 7d 20 7b 30 20 7b  ROM t2}.  } {0 {
41b0: 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74  }}.  do_test aut
41c0: 68 2d 31 2e 39 38 20 7b 0a 20 20 20 20 65 78 65  h-1.98 {.    exe
41d0: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d  csql {SELECT nam
41e0: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65  e FROM sqlite_te
41f0: 6d 70 5f 6d 61 73 74 65 72 7d 0a 20 20 7d 20 7b  mp_master}.  } {
4200: 74 31 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20 61  t1}.}..do_test a
4210: 75 74 68 2d 31 2e 39 39 20 7b 0a 20 20 70 72 6f  uth-1.99 {.  pro
4220: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
4230: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
4240: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
4250: 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45 54  e=="SQLITE_DELET
4260: 45 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71  E" && $arg1=="sq
4270: 6c 69 74 65 5f 6d 61 73 74 65 72 22 7d 20 7b 0a  lite_master"} {.
4280: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
4290: 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20  ITE_DENY.    }. 
42a0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
42b0: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
42c0: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
42d0: 56 49 45 57 20 76 32 20 41 53 20 53 45 4c 45 43  VIEW v2 AS SELEC
42e0: 54 20 61 2b 31 2c 62 2b 31 20 46 52 4f 4d 20 74  T a+1,b+1 FROM t
42f0: 32 3b 0a 20 20 20 20 44 52 4f 50 20 56 49 45 57  2;.    DROP VIEW
4300: 20 76 32 0a 20 20 7d 0a 7d 20 7b 31 20 7b 6e 6f   v2.  }.} {1 {no
4310: 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64  t authorized}}.d
4320: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 30  o_test auth-1.10
4330: 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  0 {.  execsql {S
4340: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
4350: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d  sqlite_master}.}
4360: 20 7b 74 32 20 76 32 7d 0a 64 6f 5f 74 65 73 74   {t2 v2}.do_test
4370: 20 61 75 74 68 2d 31 2e 31 30 31 20 7b 0a 20 20   auth-1.101 {.  
4380: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
4390: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
43a0: 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg4} {.    if {$
43b0: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52  code=="SQLITE_DR
43c0: 4f 50 5f 56 49 45 57 22 7d 20 7b 0a 20 20 20 20  OP_VIEW"} {.    
43d0: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
43e0: 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72   [list $arg1 $ar
43f0: 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a  g2 $arg3 $arg4].
4400: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
4410: 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20  ITE_DENY.    }. 
4420: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
4430: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
4440: 71 6c 20 7b 44 52 4f 50 20 56 49 45 57 20 76 32  ql {DROP VIEW v2
4450: 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68  }.} {1 {not auth
4460: 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74  orized}}.do_test
4470: 20 61 75 74 68 2d 31 2e 31 30 32 20 7b 0a 20 20   auth-1.102 {.  
4480: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d  set ::authargs.}
4490: 20 7b 76 32 20 7b 7d 20 6d 61 69 6e 20 7b 7d 7d   {v2 {} main {}}
44a0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
44b0: 31 30 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  103 {.  execsql 
44c0: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
44d0: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d  M sqlite_master}
44e0: 0a 7d 20 7b 74 32 20 76 32 7d 0a 64 6f 5f 74 65  .} {t2 v2}.do_te
44f0: 73 74 20 61 75 74 68 2d 31 2e 31 30 34 20 7b 0a  st auth-1.104 {.
4500: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
4510: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
4520: 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20   arg4} {.    if 
4530: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
4540: 44 45 4c 45 54 45 22 20 26 26 20 24 61 72 67 31  DELETE" && $arg1
4550: 3d 3d 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  =="sqlite_master
4560: 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72  "} {.      retur
4570: 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a  n SQLITE_IGNORE.
4580: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
4590: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
45a0: 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20   catchsql {DROP 
45b0: 56 49 45 57 20 76 32 7d 0a 7d 20 7b 30 20 7b 7d  VIEW v2}.} {0 {}
45c0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
45d0: 2e 31 30 35 20 7b 0a 20 20 65 78 65 63 73 71 6c  .105 {.  execsql
45e0: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
45f0: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
4600: 7d 0a 7d 20 7b 74 32 20 76 32 7d 0a 64 6f 5f 74  }.} {t2 v2}.do_t
4610: 65 73 74 20 61 75 74 68 2d 31 2e 31 30 36 20 7b  est auth-1.106 {
4620: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
4630: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
4640: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66  3 arg4} {.    if
4650: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
4660: 5f 44 52 4f 50 5f 56 49 45 57 22 7d 20 7b 0a 20  _DROP_VIEW"} {. 
4670: 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61       set ::autha
4680: 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20  rgs [list $arg1 
4690: 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67  $arg2 $arg3 $arg
46a0: 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  4].      return 
46b0: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20  SQLITE_IGNORE.  
46c0: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
46d0: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
46e0: 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 56 49  atchsql {DROP VI
46f0: 45 57 20 76 32 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a  EW v2}.} {0 {}}.
4700: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
4710: 30 37 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74  07 {.  set ::aut
4720: 68 61 72 67 73 0a 7d 20 7b 76 32 20 7b 7d 20 6d  hargs.} {v2 {} m
4730: 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20  ain {}}.do_test 
4740: 61 75 74 68 2d 31 2e 31 30 38 20 7b 0a 20 20 65  auth-1.108 {.  e
4750: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
4760: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
4770: 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 20 76 32  master}.} {t2 v2
4780: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
4790: 2e 31 30 39 20 7b 0a 20 20 70 72 6f 63 20 61 75  .109 {.  proc au
47a0: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
47b0: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
47c0: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
47d0: 53 51 4c 49 54 45 5f 44 52 4f 50 5f 56 49 45 57  SQLITE_DROP_VIEW
47e0: 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a  "} {.      set :
47f0: 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20  :authargs [list 
4800: 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67  $arg1 $arg2 $arg
4810: 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72  3 $arg4].      r
4820: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
4830: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
4840: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
4850: 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20   catchsql {DROP 
4860: 56 49 45 57 20 76 32 7d 0a 7d 20 7b 30 20 7b 7d  VIEW v2}.} {0 {}
4870: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
4880: 2e 31 31 30 20 7b 0a 20 20 73 65 74 20 3a 3a 61  .110 {.  set ::a
4890: 75 74 68 61 72 67 73 0a 7d 20 7b 76 32 20 7b 7d  uthargs.} {v2 {}
48a0: 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73   main {}}.do_tes
48b0: 74 20 61 75 74 68 2d 31 2e 31 31 31 20 7b 0a 20  t auth-1.111 {. 
48c0: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
48d0: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
48e0: 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 7d  e_master}.} {t2}
48f0: 0a 0a 0a 69 66 63 61 70 61 62 6c 65 20 74 65 6d  ...ifcapable tem
4900: 70 64 62 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  pdb {.  do_test 
4910: 61 75 74 68 2d 31 2e 31 31 32 20 7b 0a 20 20 20  auth-1.112 {.   
4920: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
4930: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
4940: 61 72 67 34 7d 20 7b 0a 20 20 20 20 20 20 69 66  arg4} {.      if
4950: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
4960: 5f 44 45 4c 45 54 45 22 20 26 26 20 24 61 72 67  _DELETE" && $arg
4970: 31 3d 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f  1=="sqlite_temp_
4980: 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20  master"} {.     
4990: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
49a0: 5f 44 45 4e 59 0a 20 20 20 20 20 20 7d 0a 20 20  _DENY.      }.  
49b0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
49c0: 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63  E_OK.    }.    c
49d0: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20  atchsql {.      
49e0: 43 52 45 41 54 45 20 54 45 4d 50 20 56 49 45 57  CREATE TEMP VIEW
49f0: 20 76 31 20 41 53 20 53 45 4c 45 43 54 20 61 2b   v1 AS SELECT a+
4a00: 31 2c 62 2b 31 20 46 52 4f 4d 20 74 31 3b 0a 20  1,b+1 FROM t1;. 
4a10: 20 20 20 20 20 44 52 4f 50 20 56 49 45 57 20 76       DROP VIEW v
4a20: 31 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 20 7b  1.    }.  } {1 {
4a30: 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d  not authorized}}
4a40: 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  .  do_test auth-
4a50: 31 2e 31 31 33 20 7b 0a 20 20 20 20 65 78 65 63  1.113 {.    exec
4a60: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
4a70: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d   FROM sqlite_tem
4a80: 70 5f 6d 61 73 74 65 72 7d 0a 20 20 7d 20 7b 74  p_master}.  } {t
4a90: 31 20 76 31 7d 0a 20 20 64 6f 5f 74 65 73 74 20  1 v1}.  do_test 
4aa0: 61 75 74 68 2d 31 2e 31 31 34 20 7b 0a 20 20 20  auth-1.114 {.   
4ab0: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
4ac0: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
4ad0: 61 72 67 34 7d 20 7b 0a 20 20 20 20 20 20 69 66  arg4} {.      if
4ae0: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
4af0: 5f 44 52 4f 50 5f 54 45 4d 50 5f 56 49 45 57 22  _DROP_TEMP_VIEW"
4b00: 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20  } {.        set 
4b10: 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74  ::authargs [list
4b20: 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72   $arg1 $arg2 $ar
4b30: 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20  g3 $arg4].      
4b40: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
4b50: 44 45 4e 59 0a 20 20 20 20 20 20 7d 0a 20 20 20  DENY.      }.   
4b60: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
4b70: 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61  _OK.    }.    ca
4b80: 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 56 49 45  tchsql {DROP VIE
4b90: 57 20 76 31 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f  W v1}.  } {1 {no
4ba0: 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 20  t authorized}}. 
4bb0: 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e   do_test auth-1.
4bc0: 31 31 35 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a  115 {.    set ::
4bd0: 61 75 74 68 61 72 67 73 0a 20 20 7d 20 7b 76 31  authargs.  } {v1
4be0: 20 7b 7d 20 74 65 6d 70 20 7b 7d 7d 0a 20 20 64   {} temp {}}.  d
4bf0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 31  o_test auth-1.11
4c00: 36 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  6 {.    execsql 
4c10: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
4c20: 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  M sqlite_temp_ma
4c30: 73 74 65 72 7d 0a 20 20 7d 20 7b 74 31 20 76 31  ster}.  } {t1 v1
4c40: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68  }.  do_test auth
4c50: 2d 31 2e 31 31 37 20 7b 0a 20 20 20 20 70 72 6f  -1.117 {.    pro
4c60: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
4c70: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
4c80: 7d 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 63  } {.      if {$c
4c90: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c  ode=="SQLITE_DEL
4ca0: 45 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d 22  ETE" && $arg1=="
4cb0: 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
4cc0: 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 72  er"} {.        r
4cd0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e  eturn SQLITE_IGN
4ce0: 4f 52 45 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ORE.      }.    
4cf0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
4d00: 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 74  OK.    }.    cat
4d10: 63 68 73 71 6c 20 7b 44 52 4f 50 20 56 49 45 57  chsql {DROP VIEW
4d20: 20 76 31 7d 0a 20 20 7d 20 7b 30 20 7b 7d 7d 0a   v1}.  } {0 {}}.
4d30: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31    do_test auth-1
4d40: 2e 31 31 38 20 7b 0a 20 20 20 20 65 78 65 63 73  .118 {.    execs
4d50: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
4d60: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70  FROM sqlite_temp
4d70: 5f 6d 61 73 74 65 72 7d 0a 20 20 7d 20 7b 74 31  _master}.  } {t1
4d80: 20 76 31 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61   v1}.  do_test a
4d90: 75 74 68 2d 31 2e 31 31 39 20 7b 0a 20 20 20 20  uth-1.119 {.    
4da0: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
4db0: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
4dc0: 72 67 34 7d 20 7b 0a 20 20 20 20 20 20 69 66 20  rg4} {.      if 
4dd0: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
4de0: 44 52 4f 50 5f 54 45 4d 50 5f 56 49 45 57 22 7d  DROP_TEMP_VIEW"}
4df0: 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 3a   {.        set :
4e00: 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20  :authargs [list 
4e10: 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67  $arg1 $arg2 $arg
4e20: 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 20  3 $arg4].       
4e30: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49   return SQLITE_I
4e40: 47 4e 4f 52 45 0a 20 20 20 20 20 20 7d 0a 20 20  GNORE.      }.  
4e50: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
4e60: 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63  E_OK.    }.    c
4e70: 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 56 49  atchsql {DROP VI
4e80: 45 57 20 76 31 7d 0a 20 20 7d 20 7b 30 20 7b 7d  EW v1}.  } {0 {}
4e90: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68  }.  do_test auth
4ea0: 2d 31 2e 31 32 30 20 7b 0a 20 20 20 20 73 65 74  -1.120 {.    set
4eb0: 20 3a 3a 61 75 74 68 61 72 67 73 0a 20 20 7d 20   ::authargs.  } 
4ec0: 7b 76 31 20 7b 7d 20 74 65 6d 70 20 7b 7d 7d 0a  {v1 {} temp {}}.
4ed0: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31    do_test auth-1
4ee0: 2e 31 32 31 20 7b 0a 20 20 20 20 65 78 65 63 73  .121 {.    execs
4ef0: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
4f00: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70  FROM sqlite_temp
4f10: 5f 6d 61 73 74 65 72 7d 0a 20 20 7d 20 7b 74 31  _master}.  } {t1
4f20: 20 76 31 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61   v1}.  do_test a
4f30: 75 74 68 2d 31 2e 31 32 32 20 7b 0a 20 20 20 20  uth-1.122 {.    
4f40: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
4f50: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
4f60: 72 67 34 7d 20 7b 0a 20 20 20 20 20 20 69 66 20  rg4} {.      if 
4f70: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
4f80: 44 52 4f 50 5f 54 45 4d 50 5f 56 49 45 57 22 7d  DROP_TEMP_VIEW"}
4f90: 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 3a   {.        set :
4fa0: 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20  :authargs [list 
4fb0: 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67  $arg1 $arg2 $arg
4fc0: 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 20  3 $arg4].       
4fd0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
4fe0: 4b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  K.      }.      
4ff0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
5000: 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 74 63 68  .    }.    catch
5010: 73 71 6c 20 7b 44 52 4f 50 20 56 49 45 57 20 76  sql {DROP VIEW v
5020: 31 7d 0a 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20 20  1}.  } {0 {}}.  
5030: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
5040: 32 33 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a 61  23 {.    set ::a
5050: 75 74 68 61 72 67 73 0a 20 20 7d 20 7b 76 31 20  uthargs.  } {v1 
5060: 7b 7d 20 74 65 6d 70 20 7b 7d 7d 0a 20 20 64 6f  {} temp {}}.  do
5070: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 32 34  _test auth-1.124
5080: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
5090: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
50a0: 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73   sqlite_temp_mas
50b0: 74 65 72 7d 0a 20 20 7d 20 7b 74 31 7d 0a 7d 0a  ter}.  } {t1}.}.
50c0: 7d 20 3b 23 20 69 66 63 61 70 61 62 6c 65 20 76  } ;# ifcapable v
50d0: 69 65 77 0a 0a 23 20 54 65 73 74 20 63 61 73 65  iew..# Test case
50e0: 73 20 61 75 74 68 2d 31 2e 31 32 35 20 74 6f 20  s auth-1.125 to 
50f0: 61 75 74 68 2d 31 2e 31 37 36 20 74 65 73 74 20  auth-1.176 test 
5100: 63 72 65 61 74 69 6e 67 20 61 6e 64 20 64 72 6f  creating and dro
5110: 70 70 69 6e 67 20 74 72 69 67 67 65 72 73 2e 0a  pping triggers..
5120: 23 20 4f 6d 69 74 20 74 68 65 73 65 20 69 66 20  # Omit these if 
5130: 74 68 65 20 6c 69 62 72 61 72 79 20 77 61 73 20  the library was 
5140: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 74 72  compiled with tr
5150: 69 67 67 65 72 73 20 6f 6d 69 74 74 65 64 2e 0a  iggers omitted..
5160: 23 0a 69 66 63 61 70 61 62 6c 65 20 74 72 69 67  #.ifcapable trig
5170: 67 65 72 26 26 74 65 6d 70 64 62 20 7b 0a 64 6f  ger&&tempdb {.do
5180: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 32 35  _test auth-1.125
5190: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
51a0: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
51b0: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
51c0: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
51d0: 54 45 5f 43 52 45 41 54 45 5f 54 52 49 47 47 45  TE_CREATE_TRIGGE
51e0: 52 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20  R"} {.      set 
51f0: 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74  ::authargs [list
5200: 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72   $arg1 $arg2 $ar
5210: 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20  g3 $arg4].      
5220: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45  return SQLITE_DE
5230: 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  NY.    }.    ret
5240: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
5250: 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  }.  catchsql {. 
5260: 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45     CREATE TRIGGE
5270: 52 20 72 32 20 44 45 4c 45 54 45 20 6f 6e 20 74  R r2 DELETE on t
5280: 32 20 42 45 47 49 4e 0a 20 20 20 20 20 20 20 20  2 BEGIN.        
5290: 53 45 4c 45 43 54 20 4e 55 4c 4c 3b 0a 20 20 20  SELECT NULL;.   
52a0: 20 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b   END;.  }.} {1 {
52b0: 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d  not authorized}}
52c0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
52d0: 31 32 36 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75  126 {.  set ::au
52e0: 74 68 61 72 67 73 0a 7d 20 7b 72 32 20 74 32 20  thargs.} {r2 t2 
52f0: 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  main {}}.do_test
5300: 20 61 75 74 68 2d 31 2e 31 32 37 20 7b 0a 20 20   auth-1.127 {.  
5310: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
5320: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
5330: 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a  _master}.} {t2}.
5340: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
5350: 32 38 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  28 {.  proc auth
5360: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
5370: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
5380: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
5390: 4c 49 54 45 5f 49 4e 53 45 52 54 22 20 26 26 20  LITE_INSERT" && 
53a0: 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 6d  $arg1=="sqlite_m
53b0: 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20  aster"} {.      
53c0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45  return SQLITE_DE
53d0: 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  NY.    }.    ret
53e0: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
53f0: 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  }.  catchsql {. 
5400: 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45     CREATE TRIGGE
5410: 52 20 72 32 20 44 45 4c 45 54 45 20 6f 6e 20 74  R r2 DELETE on t
5420: 32 20 42 45 47 49 4e 0a 20 20 20 20 20 20 20 20  2 BEGIN.        
5430: 53 45 4c 45 43 54 20 4e 55 4c 4c 3b 0a 20 20 20  SELECT NULL;.   
5440: 20 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b   END;.  }.} {1 {
5450: 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d  not authorized}}
5460: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
5470: 31 32 39 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  129 {.  execsql 
5480: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
5490: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d  M sqlite_master}
54a0: 0a 7d 20 7b 74 32 7d 0a 64 6f 5f 74 65 73 74 20  .} {t2}.do_test 
54b0: 61 75 74 68 2d 31 2e 31 33 30 20 7b 0a 20 20 70  auth-1.130 {.  p
54c0: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
54d0: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
54e0: 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g4} {.    if {$c
54f0: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52 45  ode=="SQLITE_CRE
5500: 41 54 45 5f 54 52 49 47 47 45 52 22 7d 20 7b 0a  ATE_TRIGGER"} {.
5510: 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68        set ::auth
5520: 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31  args [list $arg1
5530: 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72   $arg2 $arg3 $ar
5540: 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  g4].      return
5550: 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20   SQLITE_IGNORE. 
5560: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
5570: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
5580: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 43  catchsql {.    C
5590: 52 45 41 54 45 20 54 52 49 47 47 45 52 20 72 32  REATE TRIGGER r2
55a0: 20 44 45 4c 45 54 45 20 6f 6e 20 74 32 20 42 45   DELETE on t2 BE
55b0: 47 49 4e 0a 20 20 20 20 20 20 20 20 53 45 4c 45  GIN.        SELE
55c0: 43 54 20 4e 55 4c 4c 3b 0a 20 20 20 20 45 4e 44  CT NULL;.    END
55d0: 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  ;.  }.} {0 {}}.d
55e0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 33  o_test auth-1.13
55f0: 31 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68  1 {.  set ::auth
5600: 61 72 67 73 0a 7d 20 7b 72 32 20 74 32 20 6d 61  args.} {r2 t2 ma
5610: 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  in {}}.do_test a
5620: 75 74 68 2d 31 2e 31 33 32 20 7b 0a 20 20 65 78  uth-1.132 {.  ex
5630: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61  ecsql {SELECT na
5640: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  me FROM sqlite_m
5650: 61 73 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a 64 6f  aster}.} {t2}.do
5660: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 33 33  _test auth-1.133
5670: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
5680: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
5690: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
56a0: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
56b0: 54 45 5f 49 4e 53 45 52 54 22 20 26 26 20 24 61  TE_INSERT" && $a
56c0: 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 6d 61 73  rg1=="sqlite_mas
56d0: 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 72 65  ter"} {.      re
56e0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f  turn SQLITE_IGNO
56f0: 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  RE.    }.    ret
5700: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
5710: 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  }.  catchsql {. 
5720: 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45     CREATE TRIGGE
5730: 52 20 72 32 20 44 45 4c 45 54 45 20 6f 6e 20 74  R r2 DELETE on t
5740: 32 20 42 45 47 49 4e 0a 20 20 20 20 20 20 20 20  2 BEGIN.        
5750: 53 45 4c 45 43 54 20 4e 55 4c 4c 3b 0a 20 20 20  SELECT NULL;.   
5760: 20 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b   END;.  }.} {0 {
5770: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
5780: 31 2e 31 33 34 20 7b 0a 20 20 65 78 65 63 73 71  1.134 {.  execsq
5790: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
57a0: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
57b0: 72 7d 0a 7d 20 7b 74 32 7d 0a 64 6f 5f 74 65 73  r}.} {t2}.do_tes
57c0: 74 20 61 75 74 68 2d 31 2e 31 33 35 20 7b 0a 20  t auth-1.135 {. 
57d0: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
57e0: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
57f0: 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg4} {.    if {
5800: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43  $code=="SQLITE_C
5810: 52 45 41 54 45 5f 54 52 49 47 47 45 52 22 7d 20  REATE_TRIGGER"} 
5820: 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75  {.      set ::au
5830: 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72  thargs [list $ar
5840: 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24  g1 $arg2 $arg3 $
5850: 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75  arg4].      retu
5860: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20  rn SQLITE_OK.   
5870: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
5880: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
5890: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 43 52 45  tchsql {.    CRE
58a0: 41 54 45 20 54 41 42 4c 45 20 74 78 28 69 64 29  ATE TABLE tx(id)
58b0: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 52 49  ;.    CREATE TRI
58c0: 47 47 45 52 20 72 32 20 41 46 54 45 52 20 49 4e  GGER r2 AFTER IN
58d0: 53 45 52 54 20 4f 4e 20 74 32 20 42 45 47 49 4e  SERT ON t2 BEGIN
58e0: 0a 20 20 20 20 20 20 20 49 4e 53 45 52 54 20 49  .       INSERT I
58f0: 4e 54 4f 20 74 78 20 56 41 4c 55 45 53 28 4e 45  NTO tx VALUES(NE
5900: 57 2e 72 6f 77 69 64 29 3b 0a 20 20 20 20 45 4e  W.rowid);.    EN
5910: 44 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a  D;.  }.} {0 {}}.
5920: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
5930: 33 36 2e 31 20 7b 0a 20 20 73 65 74 20 3a 3a 61  36.1 {.  set ::a
5940: 75 74 68 61 72 67 73 0a 7d 20 7b 72 32 20 74 32  uthargs.} {r2 t2
5950: 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73   main {}}.do_tes
5960: 74 20 61 75 74 68 2d 31 2e 31 33 36 2e 32 20 7b  t auth-1.136.2 {
5970: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
5980: 20 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f   SELECT name FRO
5990: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  M sqlite_master 
59a0: 57 48 45 52 45 20 74 79 70 65 3d 27 74 72 69 67  WHERE type='trig
59b0: 67 65 72 27 0a 20 20 7d 0a 7d 20 7b 72 32 7d 0a  ger'.  }.} {r2}.
59c0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
59d0: 33 36 2e 33 20 7b 0a 20 20 70 72 6f 63 20 61 75  36.3 {.  proc au
59e0: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
59f0: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
5a00: 20 20 20 20 6c 61 70 70 65 6e 64 20 3a 3a 61 75      lappend ::au
5a10: 74 68 61 72 67 73 20 24 63 6f 64 65 20 24 61 72  thargs $code $ar
5a20: 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24  g1 $arg2 $arg3 $
5a30: 61 72 67 34 0a 20 20 20 20 72 65 74 75 72 6e 20  arg4.    return 
5a40: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
5a50: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 7b  set ::authargs {
5a60: 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  }.  execsql {.  
5a70: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32    INSERT INTO t2
5a80: 20 56 41 4c 55 45 53 28 31 2c 32 2c 33 29 3b 0a   VALUES(1,2,3);.
5a90: 20 20 7d 0a 20 20 73 65 74 20 3a 3a 61 75 74 68    }.  set ::auth
5aa0: 61 72 67 73 20 0a 7d 20 7b 53 51 4c 49 54 45 5f  args .} {SQLITE_
5ab0: 49 4e 53 45 52 54 20 74 32 20 7b 7d 20 6d 61 69  INSERT t2 {} mai
5ac0: 6e 20 7b 7d 20 53 51 4c 49 54 45 5f 49 4e 53 45  n {} SQLITE_INSE
5ad0: 52 54 20 74 78 20 7b 7d 20 6d 61 69 6e 20 72 32  RT tx {} main r2
5ae0: 20 53 51 4c 49 54 45 5f 52 45 41 44 20 74 32 20   SQLITE_READ t2 
5af0: 52 4f 57 49 44 20 6d 61 69 6e 20 72 32 7d 0a 64  ROWID main r2}.d
5b00: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 33  o_test auth-1.13
5b10: 36 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  6.4 {.  execsql 
5b20: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  {.    SELECT * F
5b30: 52 4f 4d 20 74 78 3b 0a 20 20 7d 0a 7d 20 7b 33  ROM tx;.  }.} {3
5b40: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
5b50: 2e 31 33 37 20 7b 0a 20 20 65 78 65 63 73 71 6c  .137 {.  execsql
5b60: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
5b70: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
5b80: 7d 0a 7d 20 7b 74 32 20 74 78 20 72 32 7d 0a 64  }.} {t2 tx r2}.d
5b90: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 33  o_test auth-1.13
5ba0: 38 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  8 {.  proc auth 
5bb0: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
5bc0: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
5bd0: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
5be0: 49 54 45 5f 43 52 45 41 54 45 5f 54 45 4d 50 5f  ITE_CREATE_TEMP_
5bf0: 54 52 49 47 47 45 52 22 7d 20 7b 0a 20 20 20 20  TRIGGER"} {.    
5c00: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
5c10: 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72   [list $arg1 $ar
5c20: 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a  g2 $arg3 $arg4].
5c30: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
5c40: 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20  ITE_DENY.    }. 
5c50: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
5c60: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
5c70: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
5c80: 54 52 49 47 47 45 52 20 72 31 20 44 45 4c 45 54  TRIGGER r1 DELET
5c90: 45 20 6f 6e 20 74 31 20 42 45 47 49 4e 0a 20 20  E on t1 BEGIN.  
5ca0: 20 20 20 20 20 20 53 45 4c 45 43 54 20 4e 55 4c        SELECT NUL
5cb0: 4c 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 7d 0a  L;.    END;.  }.
5cc0: 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72  } {1 {not author
5cd0: 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  ized}}.do_test a
5ce0: 75 74 68 2d 31 2e 31 33 39 20 7b 0a 20 20 73 65  uth-1.139 {.  se
5cf0: 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b  t ::authargs.} {
5d00: 72 31 20 74 31 20 74 65 6d 70 20 7b 7d 7d 0a 64  r1 t1 temp {}}.d
5d10: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 34  o_test auth-1.14
5d20: 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  0 {.  execsql {S
5d30: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
5d40: 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
5d50: 65 72 7d 0a 7d 20 7b 74 31 7d 0a 64 6f 5f 74 65  er}.} {t1}.do_te
5d60: 73 74 20 61 75 74 68 2d 31 2e 31 34 31 20 7b 0a  st auth-1.141 {.
5d70: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
5d80: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
5d90: 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20   arg4} {.    if 
5da0: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
5db0: 49 4e 53 45 52 54 22 20 26 26 20 24 61 72 67 31  INSERT" && $arg1
5dc0: 3d 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  =="sqlite_temp_m
5dd0: 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20  aster"} {.      
5de0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45  return SQLITE_DE
5df0: 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  NY.    }.    ret
5e00: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
5e10: 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  }.  catchsql {. 
5e20: 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45     CREATE TRIGGE
5e30: 52 20 72 31 20 44 45 4c 45 54 45 20 6f 6e 20 74  R r1 DELETE on t
5e40: 31 20 42 45 47 49 4e 0a 20 20 20 20 20 20 20 20  1 BEGIN.        
5e50: 53 45 4c 45 43 54 20 4e 55 4c 4c 3b 0a 20 20 20  SELECT NULL;.   
5e60: 20 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b   END;.  }.} {1 {
5e70: 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d  not authorized}}
5e80: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
5e90: 31 34 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  142 {.  execsql 
5ea0: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
5eb0: 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  M sqlite_temp_ma
5ec0: 73 74 65 72 7d 0a 7d 20 7b 74 31 7d 0a 64 6f 5f  ster}.} {t1}.do_
5ed0: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 34 33 20  test auth-1.143 
5ee0: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
5ef0: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
5f00: 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69  g3 arg4} {.    i
5f10: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
5f20: 45 5f 43 52 45 41 54 45 5f 54 45 4d 50 5f 54 52  E_CREATE_TEMP_TR
5f30: 49 47 47 45 52 22 7d 20 7b 0a 20 20 20 20 20 20  IGGER"} {.      
5f40: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b  set ::authargs [
5f50: 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67 32  list $arg1 $arg2
5f60: 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20   $arg3 $arg4].  
5f70: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
5f80: 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20  E_IGNORE.    }. 
5f90: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
5fa0: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
5fb0: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
5fc0: 54 52 49 47 47 45 52 20 72 31 20 44 45 4c 45 54  TRIGGER r1 DELET
5fd0: 45 20 6f 6e 20 74 31 20 42 45 47 49 4e 0a 20 20  E on t1 BEGIN.  
5fe0: 20 20 20 20 20 20 53 45 4c 45 43 54 20 4e 55 4c        SELECT NUL
5ff0: 4c 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 7d 0a  L;.    END;.  }.
6000: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
6010: 20 61 75 74 68 2d 31 2e 31 34 34 20 7b 0a 20 20   auth-1.144 {.  
6020: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d  set ::authargs.}
6030: 20 7b 72 31 20 74 31 20 74 65 6d 70 20 7b 7d 7d   {r1 t1 temp {}}
6040: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
6050: 31 34 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  145 {.  execsql 
6060: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
6070: 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  M sqlite_temp_ma
6080: 73 74 65 72 7d 0a 7d 20 7b 74 31 7d 0a 64 6f 5f  ster}.} {t1}.do_
6090: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 34 36 20  test auth-1.146 
60a0: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
60b0: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
60c0: 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69  g3 arg4} {.    i
60d0: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
60e0: 45 5f 49 4e 53 45 52 54 22 20 26 26 20 24 61 72  E_INSERT" && $ar
60f0: 67 31 3d 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70  g1=="sqlite_temp
6100: 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20  _master"} {.    
6110: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
6120: 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20  IGNORE.    }.   
6130: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
6140: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
6150: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 52   {.    CREATE TR
6160: 49 47 47 45 52 20 72 31 20 44 45 4c 45 54 45 20  IGGER r1 DELETE 
6170: 6f 6e 20 74 31 20 42 45 47 49 4e 0a 20 20 20 20  on t1 BEGIN.    
6180: 20 20 20 20 53 45 4c 45 43 54 20 4e 55 4c 4c 3b      SELECT NULL;
6190: 0a 20 20 20 20 45 4e 44 3b 0a 20 20 7d 0a 7d 20  .    END;.  }.} 
61a0: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  {0 {}}.do_test a
61b0: 75 74 68 2d 31 2e 31 34 37 20 7b 0a 20 20 65 78  uth-1.147 {.  ex
61c0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61  ecsql {SELECT na
61d0: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74  me FROM sqlite_t
61e0: 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74  emp_master}.} {t
61f0: 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  1}.do_test auth-
6200: 31 2e 31 34 38 20 7b 0a 20 20 70 72 6f 63 20 61  1.148 {.  proc a
6210: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
6220: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
6230: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
6240: 22 53 51 4c 49 54 45 5f 43 52 45 41 54 45 5f 54  "SQLITE_CREATE_T
6250: 45 4d 50 5f 54 52 49 47 47 45 52 22 7d 20 7b 0a  EMP_TRIGGER"} {.
6260: 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68        set ::auth
6270: 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31  args [list $arg1
6280: 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72   $arg2 $arg3 $ar
6290: 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  g4].      return
62a0: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d   SQLITE_OK.    }
62b0: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
62c0: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
62d0: 68 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  hsql {.    CREAT
62e0: 45 20 54 52 49 47 47 45 52 20 72 31 20 44 45 4c  E TRIGGER r1 DEL
62f0: 45 54 45 20 6f 6e 20 74 31 20 42 45 47 49 4e 0a  ETE on t1 BEGIN.
6300: 20 20 20 20 20 20 20 20 53 45 4c 45 43 54 20 4e          SELECT N
6310: 55 4c 4c 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20  ULL;.    END;.  
6320: 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  }.} {0 {}}.do_te
6330: 73 74 20 61 75 74 68 2d 31 2e 31 34 39 20 7b 0a  st auth-1.149 {.
6340: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
6350: 0a 7d 20 7b 72 31 20 74 31 20 74 65 6d 70 20 7b  .} {r1 t1 temp {
6360: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
6370: 31 2e 31 35 30 20 7b 0a 20 20 65 78 65 63 73 71  1.150 {.  execsq
6380: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
6390: 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f  ROM sqlite_temp_
63a0: 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31 20 72 31  master}.} {t1 r1
63b0: 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }..do_test auth-
63c0: 31 2e 31 35 31 20 7b 0a 20 20 70 72 6f 63 20 61  1.151 {.  proc a
63d0: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
63e0: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
63f0: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
6400: 22 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 22 20  "SQLITE_DELETE" 
6410: 26 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74  && $arg1=="sqlit
6420: 65 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20  e_master"} {.   
6430: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
6440: 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20  _DENY.    }.    
6450: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
6460: 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20  .  }.  catchsql 
6470: 7b 44 52 4f 50 20 54 52 49 47 47 45 52 20 72 32  {DROP TRIGGER r2
6480: 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68  }.} {1 {not auth
6490: 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74  orized}}.do_test
64a0: 20 61 75 74 68 2d 31 2e 31 35 32 20 7b 0a 20 20   auth-1.152 {.  
64b0: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
64c0: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
64d0: 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 20 74  _master}.} {t2 t
64e0: 78 20 72 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75  x r2}.do_test au
64f0: 74 68 2d 31 2e 31 35 33 20 7b 0a 20 20 70 72 6f  th-1.153 {.  pro
6500: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
6510: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
6520: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
6530: 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f 50 5f  e=="SQLITE_DROP_
6540: 54 52 49 47 47 45 52 22 7d 20 7b 0a 20 20 20 20  TRIGGER"} {.    
6550: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
6560: 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72   [list $arg1 $ar
6570: 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a  g2 $arg3 $arg4].
6580: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
6590: 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20  ITE_DENY.    }. 
65a0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
65b0: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
65c0: 71 6c 20 7b 44 52 4f 50 20 54 52 49 47 47 45 52  ql {DROP TRIGGER
65d0: 20 72 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61   r2}.} {1 {not a
65e0: 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74  uthorized}}.do_t
65f0: 65 73 74 20 61 75 74 68 2d 31 2e 31 35 34 20 7b  est auth-1.154 {
6600: 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67  .  set ::autharg
6610: 73 0a 7d 20 7b 72 32 20 74 32 20 6d 61 69 6e 20  s.} {r2 t2 main 
6620: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
6630: 2d 31 2e 31 35 35 20 7b 0a 20 20 65 78 65 63 73  -1.155 {.  execs
6640: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
6650: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
6660: 65 72 7d 0a 7d 20 7b 74 32 20 74 78 20 72 32 7d  er}.} {t2 tx r2}
6670: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
6680: 31 35 36 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  156 {.  proc aut
6690: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
66a0: 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20  2 arg3 arg4} {. 
66b0: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
66c0: 51 4c 49 54 45 5f 44 45 4c 45 54 45 22 20 26 26  QLITE_DELETE" &&
66d0: 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f   $arg1=="sqlite_
66e0: 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20  master"} {.     
66f0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49   return SQLITE_I
6700: 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20  GNORE.    }.    
6710: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
6720: 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20  .  }.  catchsql 
6730: 7b 44 52 4f 50 20 54 52 49 47 47 45 52 20 72 32  {DROP TRIGGER r2
6740: 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  }.} {0 {}}.do_te
6750: 73 74 20 61 75 74 68 2d 31 2e 31 35 37 20 7b 0a  st auth-1.157 {.
6760: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
6770: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
6780: 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32  te_master}.} {t2
6790: 20 74 78 20 72 32 7d 0a 64 6f 5f 74 65 73 74 20   tx r2}.do_test 
67a0: 61 75 74 68 2d 31 2e 31 35 38 20 7b 0a 20 20 70  auth-1.158 {.  p
67b0: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
67c0: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
67d0: 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g4} {.    if {$c
67e0: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f  ode=="SQLITE_DRO
67f0: 50 5f 54 52 49 47 47 45 52 22 7d 20 7b 0a 20 20  P_TRIGGER"} {.  
6800: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
6810: 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24  gs [list $arg1 $
6820: 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34  arg2 $arg3 $arg4
6830: 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  ].      return S
6840: 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20  QLITE_IGNORE.   
6850: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
6860: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
6870: 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54 52 49  tchsql {DROP TRI
6880: 47 47 45 52 20 72 32 7d 0a 7d 20 7b 30 20 7b 7d  GGER r2}.} {0 {}
6890: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
68a0: 2e 31 35 39 20 7b 0a 20 20 73 65 74 20 3a 3a 61  .159 {.  set ::a
68b0: 75 74 68 61 72 67 73 0a 7d 20 7b 72 32 20 74 32  uthargs.} {r2 t2
68c0: 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73   main {}}.do_tes
68d0: 74 20 61 75 74 68 2d 31 2e 31 36 30 20 7b 0a 20  t auth-1.160 {. 
68e0: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
68f0: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
6900: 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 20  e_master}.} {t2 
6910: 74 78 20 72 32 7d 0a 64 6f 5f 74 65 73 74 20 61  tx r2}.do_test a
6920: 75 74 68 2d 31 2e 31 36 31 20 7b 0a 20 20 70 72  uth-1.161 {.  pr
6930: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
6940: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
6950: 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f  4} {.    if {$co
6960: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f 50  de=="SQLITE_DROP
6970: 5f 54 52 49 47 47 45 52 22 7d 20 7b 0a 20 20 20  _TRIGGER"} {.   
6980: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
6990: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
69a0: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
69b0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
69c0: 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20  LITE_OK.    }.  
69d0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
69e0: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
69f0: 6c 20 7b 44 52 4f 50 20 54 52 49 47 47 45 52 20  l {DROP TRIGGER 
6a00: 72 32 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f  r2}.} {0 {}}.do_
6a10: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 36 32 20  test auth-1.162 
6a20: 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72  {.  set ::authar
6a30: 67 73 0a 7d 20 7b 72 32 20 74 32 20 6d 61 69 6e  gs.} {r2 t2 main
6a40: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
6a50: 68 2d 31 2e 31 36 33 20 7b 0a 20 20 65 78 65 63  h-1.163 {.  exec
6a60: 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20 54  sql {.    DROP T
6a70: 41 42 4c 45 20 74 78 3b 0a 20 20 20 20 44 45 4c  ABLE tx;.    DEL
6a80: 45 54 45 20 46 52 4f 4d 20 74 32 20 57 48 45 52  ETE FROM t2 WHER
6a90: 45 20 61 3d 31 20 41 4e 44 20 62 3d 32 20 41 4e  E a=1 AND b=2 AN
6aa0: 44 20 63 3d 33 3b 0a 20 20 20 20 53 45 4c 45 43  D c=3;.    SELEC
6ab0: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
6ac0: 74 65 5f 6d 61 73 74 65 72 3b 0a 20 20 7d 0a 7d  te_master;.  }.}
6ad0: 20 7b 74 32 7d 0a 0a 64 6f 5f 74 65 73 74 20 61   {t2}..do_test a
6ae0: 75 74 68 2d 31 2e 31 36 34 20 7b 0a 20 20 70 72  uth-1.164 {.  pr
6af0: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
6b00: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
6b10: 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f  4} {.    if {$co
6b20: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45  de=="SQLITE_DELE
6b30: 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73  TE" && $arg1=="s
6b40: 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
6b50: 72 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75  r"} {.      retu
6b60: 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20  rn SQLITE_DENY. 
6b70: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
6b80: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
6b90: 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54  catchsql {DROP T
6ba0: 52 49 47 47 45 52 20 72 31 7d 0a 7d 20 7b 31 20  RIGGER r1}.} {1 
6bb0: 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d  {not authorized}
6bc0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
6bd0: 2e 31 36 35 20 7b 0a 20 20 65 78 65 63 73 71 6c  .165 {.  execsql
6be0: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
6bf0: 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  OM sqlite_temp_m
6c00: 61 73 74 65 72 7d 0a 7d 20 7b 74 31 20 72 31 7d  aster}.} {t1 r1}
6c10: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
6c20: 31 36 36 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  166 {.  proc aut
6c30: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
6c40: 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20  2 arg3 arg4} {. 
6c50: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
6c60: 51 4c 49 54 45 5f 44 52 4f 50 5f 54 45 4d 50 5f  QLITE_DROP_TEMP_
6c70: 54 52 49 47 47 45 52 22 7d 20 7b 0a 20 20 20 20  TRIGGER"} {.    
6c80: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
6c90: 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72   [list $arg1 $ar
6ca0: 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a  g2 $arg3 $arg4].
6cb0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
6cc0: 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20  ITE_DENY.    }. 
6cd0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
6ce0: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
6cf0: 71 6c 20 7b 44 52 4f 50 20 54 52 49 47 47 45 52  ql {DROP TRIGGER
6d00: 20 72 31 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61   r1}.} {1 {not a
6d10: 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74  uthorized}}.do_t
6d20: 65 73 74 20 61 75 74 68 2d 31 2e 31 36 37 20 7b  est auth-1.167 {
6d30: 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67  .  set ::autharg
6d40: 73 0a 7d 20 7b 72 31 20 74 31 20 74 65 6d 70 20  s.} {r1 t1 temp 
6d50: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
6d60: 2d 31 2e 31 36 38 20 7b 0a 20 20 65 78 65 63 73  -1.168 {.  execs
6d70: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
6d80: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70  FROM sqlite_temp
6d90: 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31 20 72  _master}.} {t1 r
6da0: 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  1}.do_test auth-
6db0: 31 2e 31 36 39 20 7b 0a 20 20 70 72 6f 63 20 61  1.169 {.  proc a
6dc0: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
6dd0: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
6de0: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
6df0: 22 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 22 20  "SQLITE_DELETE" 
6e00: 26 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74  && $arg1=="sqlit
6e10: 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 7d 20  e_temp_master"} 
6e20: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  {.      return S
6e30: 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20  QLITE_IGNORE.   
6e40: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
6e50: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
6e60: 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54 52 49  tchsql {DROP TRI
6e70: 47 47 45 52 20 72 31 7d 0a 7d 20 7b 30 20 7b 7d  GGER r1}.} {0 {}
6e80: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
6e90: 2e 31 37 30 20 7b 0a 20 20 65 78 65 63 73 71 6c  .170 {.  execsql
6ea0: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
6eb0: 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  OM sqlite_temp_m
6ec0: 61 73 74 65 72 7d 0a 7d 20 7b 74 31 20 72 31 7d  aster}.} {t1 r1}
6ed0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
6ee0: 31 37 31 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  171 {.  proc aut
6ef0: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
6f00: 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20  2 arg3 arg4} {. 
6f10: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
6f20: 51 4c 49 54 45 5f 44 52 4f 50 5f 54 45 4d 50 5f  QLITE_DROP_TEMP_
6f30: 54 52 49 47 47 45 52 22 7d 20 7b 0a 20 20 20 20  TRIGGER"} {.    
6f40: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
6f50: 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72   [list $arg1 $ar
6f60: 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a  g2 $arg3 $arg4].
6f70: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
6f80: 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d  ITE_IGNORE.    }
6f90: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
6fa0: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
6fb0: 68 73 71 6c 20 7b 44 52 4f 50 20 54 52 49 47 47  hsql {DROP TRIGG
6fc0: 45 52 20 72 31 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a  ER r1}.} {0 {}}.
6fd0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
6fe0: 37 32 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74  72 {.  set ::aut
6ff0: 68 61 72 67 73 0a 7d 20 7b 72 31 20 74 31 20 74  hargs.} {r1 t1 t
7000: 65 6d 70 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20  emp {}}.do_test 
7010: 61 75 74 68 2d 31 2e 31 37 33 20 7b 0a 20 20 65  auth-1.173 {.  e
7020: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
7030: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
7040: 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b  temp_master}.} {
7050: 74 31 20 72 31 7d 0a 64 6f 5f 74 65 73 74 20 61  t1 r1}.do_test a
7060: 75 74 68 2d 31 2e 31 37 34 20 7b 0a 20 20 70 72  uth-1.174 {.  pr
7070: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
7080: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
7090: 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f  4} {.    if {$co
70a0: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f 50  de=="SQLITE_DROP
70b0: 5f 54 45 4d 50 5f 54 52 49 47 47 45 52 22 7d 20  _TEMP_TRIGGER"} 
70c0: 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75  {.      set ::au
70d0: 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72  thargs [list $ar
70e0: 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24  g1 $arg2 $arg3 $
70f0: 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75  arg4].      retu
7100: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20  rn SQLITE_OK.   
7110: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
7120: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
7130: 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54 52 49  tchsql {DROP TRI
7140: 47 47 45 52 20 72 31 7d 0a 7d 20 7b 30 20 7b 7d  GGER r1}.} {0 {}
7150: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
7160: 2e 31 37 35 20 7b 0a 20 20 73 65 74 20 3a 3a 61  .175 {.  set ::a
7170: 75 74 68 61 72 67 73 0a 7d 20 7b 72 31 20 74 31  uthargs.} {r1 t1
7180: 20 74 65 6d 70 20 7b 7d 7d 0a 64 6f 5f 74 65 73   temp {}}.do_tes
7190: 74 20 61 75 74 68 2d 31 2e 31 37 36 20 7b 0a 20  t auth-1.176 {. 
71a0: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
71b0: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
71c0: 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d  e_temp_master}.}
71d0: 20 7b 74 31 7d 0a 7d 20 3b 23 20 69 66 63 61 70   {t1}.} ;# ifcap
71e0: 61 62 6c 65 20 74 72 69 67 67 65 72 0a 0a 64 6f  able trigger..do
71f0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 37 37  _test auth-1.177
7200: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
7210: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
7220: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
7230: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
7240: 54 45 5f 43 52 45 41 54 45 5f 49 4e 44 45 58 22  TE_CREATE_INDEX"
7250: 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a  } {.      set ::
7260: 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24  authargs [list $
7270: 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33  arg1 $arg2 $arg3
7280: 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65   $arg4].      re
7290: 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59  turn SQLITE_DENY
72a0: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
72b0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
72c0: 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41    catchsql {CREA
72d0: 54 45 20 49 4e 44 45 58 20 69 32 20 4f 4e 20 74  TE INDEX i2 ON t
72e0: 32 28 61 29 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20  2(a)}.} {1 {not 
72f0: 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f  authorized}}.do_
7300: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 37 38 20  test auth-1.178 
7310: 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72  {.  set ::authar
7320: 67 73 0a 7d 20 7b 69 32 20 74 32 20 6d 61 69 6e  gs.} {i2 t2 main
7330: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
7340: 68 2d 31 2e 31 37 39 20 7b 0a 20 20 65 78 65 63  h-1.179 {.  exec
7350: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
7360: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
7370: 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a 64 6f 5f 74  ter}.} {t2}.do_t
7380: 65 73 74 20 61 75 74 68 2d 31 2e 31 38 30 20 7b  est auth-1.180 {
7390: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
73a0: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
73b0: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66  3 arg4} {.    if
73c0: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
73d0: 5f 49 4e 53 45 52 54 22 20 26 26 20 24 61 72 67  _INSERT" && $arg
73e0: 31 3d 3d 22 73 71 6c 69 74 65 5f 6d 61 73 74 65  1=="sqlite_maste
73f0: 72 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75  r"} {.      retu
7400: 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20  rn SQLITE_DENY. 
7410: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
7420: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
7430: 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45  catchsql {CREATE
7440: 20 49 4e 44 45 58 20 69 32 20 4f 4e 20 74 32 28   INDEX i2 ON t2(
7450: 61 29 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75  a)}.} {1 {not au
7460: 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65  thorized}}.do_te
7470: 73 74 20 61 75 74 68 2d 31 2e 31 38 31 20 7b 0a  st auth-1.181 {.
7480: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
7490: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
74a0: 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32  te_master}.} {t2
74b0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
74c0: 2e 31 38 32 20 7b 0a 20 20 70 72 6f 63 20 61 75  .182 {.  proc au
74d0: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
74e0: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
74f0: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
7500: 53 51 4c 49 54 45 5f 43 52 45 41 54 45 5f 49 4e  SQLITE_CREATE_IN
7510: 44 45 58 22 7d 20 7b 0a 20 20 20 20 20 20 73 65  DEX"} {.      se
7520: 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69  t ::authargs [li
7530: 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24  st $arg1 $arg2 $
7540: 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20  arg3 $arg4].    
7550: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
7560: 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20  IGNORE.    }.   
7570: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
7580: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
7590: 20 7b 43 52 45 41 54 45 20 49 4e 44 45 58 20 69   {CREATE INDEX i
75a0: 32 20 4f 4e 20 74 32 28 62 29 7d 0a 7d 20 7b 30  2 ON t2(b)}.} {0
75b0: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
75c0: 68 2d 31 2e 31 38 33 20 7b 0a 20 20 73 65 74 20  h-1.183 {.  set 
75d0: 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 69 32  ::authargs.} {i2
75e0: 20 74 32 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f   t2 main {}}.do_
75f0: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 38 34 20  test auth-1.184 
7600: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
7610: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
7620: 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b  lite_master}.} {
7630: 74 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  t2}.do_test auth
7640: 2d 31 2e 31 38 35 20 7b 0a 20 20 70 72 6f 63 20  -1.185 {.  proc 
7650: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
7660: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
7670: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
7680: 3d 22 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 22  ="SQLITE_INSERT"
7690: 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69   && $arg1=="sqli
76a0: 74 65 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20  te_master"} {.  
76b0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
76c0: 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20  E_IGNORE.    }. 
76d0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
76e0: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
76f0: 71 6c 20 7b 43 52 45 41 54 45 20 49 4e 44 45 58  ql {CREATE INDEX
7700: 20 69 32 20 4f 4e 20 74 32 28 62 29 7d 0a 7d 20   i2 ON t2(b)}.} 
7710: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  {0 {}}.do_test a
7720: 75 74 68 2d 31 2e 31 38 36 20 7b 0a 20 20 65 78  uth-1.186 {.  ex
7730: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61  ecsql {SELECT na
7740: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  me FROM sqlite_m
7750: 61 73 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a 64 6f  aster}.} {t2}.do
7760: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 38 37  _test auth-1.187
7770: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
7780: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
7790: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
77a0: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
77b0: 54 45 5f 43 52 45 41 54 45 5f 49 4e 44 45 58 22  TE_CREATE_INDEX"
77c0: 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a  } {.      set ::
77d0: 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24  authargs [list $
77e0: 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33  arg1 $arg2 $arg3
77f0: 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65   $arg4].      re
7800: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
7810: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
7820: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
7830: 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45  catchsql {CREATE
7840: 20 49 4e 44 45 58 20 69 32 20 4f 4e 20 74 32 28   INDEX i2 ON t2(
7850: 61 29 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f  a)}.} {0 {}}.do_
7860: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 38 38 20  test auth-1.188 
7870: 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72  {.  set ::authar
7880: 67 73 0a 7d 20 7b 69 32 20 74 32 20 6d 61 69 6e  gs.} {i2 t2 main
7890: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
78a0: 68 2d 31 2e 31 38 39 20 7b 0a 20 20 65 78 65 63  h-1.189 {.  exec
78b0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
78c0: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
78d0: 74 65 72 7d 0a 7d 20 7b 74 32 20 69 32 7d 0a 0a  ter}.} {t2 i2}..
78e0: 69 66 63 61 70 61 62 6c 65 20 74 65 6d 70 64 62  ifcapable tempdb
78f0: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74   {.  do_test aut
7900: 68 2d 31 2e 31 39 30 20 7b 0a 20 20 20 20 70 72  h-1.190 {.    pr
7910: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
7920: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
7930: 34 7d 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24  4} {.      if {$
7940: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52  code=="SQLITE_CR
7950: 45 41 54 45 5f 54 45 4d 50 5f 49 4e 44 45 58 22  EATE_TEMP_INDEX"
7960: 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20  } {.        set 
7970: 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74  ::authargs [list
7980: 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72   $arg1 $arg2 $ar
7990: 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20  g3 $arg4].      
79a0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
79b0: 44 45 4e 59 0a 20 20 20 20 20 20 7d 0a 20 20 20  DENY.      }.   
79c0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
79d0: 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61  _OK.    }.    ca
79e0: 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45 20 49  tchsql {CREATE I
79f0: 4e 44 45 58 20 69 31 20 4f 4e 20 74 31 28 61 29  NDEX i1 ON t1(a)
7a00: 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f 74 20 61 75  }.  } {1 {not au
7a10: 74 68 6f 72 69 7a 65 64 7d 7d 0a 20 20 64 6f 5f  thorized}}.  do_
7a20: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 39 31 20  test auth-1.191 
7a30: 7b 0a 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68  {.    set ::auth
7a40: 61 72 67 73 0a 20 20 7d 20 7b 69 31 20 74 31 20  args.  } {i1 t1 
7a50: 74 65 6d 70 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65  temp {}}.  do_te
7a60: 73 74 20 61 75 74 68 2d 31 2e 31 39 32 20 7b 0a  st auth-1.192 {.
7a70: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c      execsql {SEL
7a80: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
7a90: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
7aa0: 7d 0a 20 20 7d 20 7b 74 31 7d 0a 20 20 64 6f 5f  }.  } {t1}.  do_
7ab0: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 39 33 20  test auth-1.193 
7ac0: 7b 0a 20 20 20 20 70 72 6f 63 20 61 75 74 68 20  {.    proc auth 
7ad0: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
7ae0: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
7af0: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
7b00: 51 4c 49 54 45 5f 49 4e 53 45 52 54 22 20 26 26  QLITE_INSERT" &&
7b10: 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f   $arg1=="sqlite_
7b20: 74 65 6d 70 5f 6d 61 73 74 65 72 22 7d 20 7b 0a  temp_master"} {.
7b30: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
7b40: 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 20  QLITE_DENY.     
7b50: 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   }.      return 
7b60: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a  SQLITE_OK.    }.
7b70: 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52      catchsql {CR
7b80: 45 41 54 45 20 49 4e 44 45 58 20 69 31 20 4f 4e  EATE INDEX i1 ON
7b90: 20 74 31 28 62 29 7d 0a 20 20 7d 20 7b 31 20 7b   t1(b)}.  } {1 {
7ba0: 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d  not authorized}}
7bb0: 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  .  do_test auth-
7bc0: 31 2e 31 39 34 20 7b 0a 20 20 20 20 65 78 65 63  1.194 {.    exec
7bd0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
7be0: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d   FROM sqlite_tem
7bf0: 70 5f 6d 61 73 74 65 72 7d 0a 20 20 7d 20 7b 74  p_master}.  } {t
7c00: 31 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74  1}.  do_test aut
7c10: 68 2d 31 2e 31 39 35 20 7b 0a 20 20 20 20 70 72  h-1.195 {.    pr
7c20: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
7c30: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
7c40: 34 7d 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24  4} {.      if {$
7c50: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52  code=="SQLITE_CR
7c60: 45 41 54 45 5f 54 45 4d 50 5f 49 4e 44 45 58 22  EATE_TEMP_INDEX"
7c70: 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20  } {.        set 
7c80: 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74  ::authargs [list
7c90: 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72   $arg1 $arg2 $ar
7ca0: 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20  g3 $arg4].      
7cb0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
7cc0: 49 47 4e 4f 52 45 0a 20 20 20 20 20 20 7d 0a 20  IGNORE.      }. 
7cd0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
7ce0: 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20  TE_OK.    }.    
7cf0: 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45  catchsql {CREATE
7d00: 20 49 4e 44 45 58 20 69 31 20 4f 4e 20 74 31 28   INDEX i1 ON t1(
7d10: 62 29 7d 0a 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20  b)}.  } {0 {}}. 
7d20: 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e   do_test auth-1.
7d30: 31 39 36 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a  196 {.    set ::
7d40: 61 75 74 68 61 72 67 73 0a 20 20 7d 20 7b 69 31  authargs.  } {i1
7d50: 20 74 31 20 74 65 6d 70 20 7b 7d 7d 0a 20 20 64   t1 temp {}}.  d
7d60: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 39  o_test auth-1.19
7d70: 37 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  7 {.    execsql 
7d80: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
7d90: 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  M sqlite_temp_ma
7da0: 73 74 65 72 7d 0a 20 20 7d 20 7b 74 31 7d 0a 20  ster}.  } {t1}. 
7db0: 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e   do_test auth-1.
7dc0: 31 39 38 20 7b 0a 20 20 20 20 70 72 6f 63 20 61  198 {.    proc a
7dd0: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
7de0: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
7df0: 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64 65  .      if {$code
7e00: 3d 3d 22 53 51 4c 49 54 45 5f 49 4e 53 45 52 54  =="SQLITE_INSERT
7e10: 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71 6c  " && $arg1=="sql
7e20: 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22  ite_temp_master"
7e30: 7d 20 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75  } {.        retu
7e40: 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45  rn SQLITE_IGNORE
7e50: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72  .      }.      r
7e60: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
7e70: 20 20 20 20 7d 0a 20 20 20 20 63 61 74 63 68 73      }.    catchs
7e80: 71 6c 20 7b 43 52 45 41 54 45 20 49 4e 44 45 58  ql {CREATE INDEX
7e90: 20 69 31 20 4f 4e 20 74 31 28 63 29 7d 0a 20 20   i1 ON t1(c)}.  
7ea0: 7d 20 7b 30 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65  } {0 {}}.  do_te
7eb0: 73 74 20 61 75 74 68 2d 31 2e 31 39 39 20 7b 0a  st auth-1.199 {.
7ec0: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c      execsql {SEL
7ed0: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
7ee0: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
7ef0: 7d 0a 20 20 7d 20 7b 74 31 7d 0a 20 20 64 6f 5f  }.  } {t1}.  do_
7f00: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 30 30 20  test auth-1.200 
7f10: 7b 0a 20 20 20 20 70 72 6f 63 20 61 75 74 68 20  {.    proc auth 
7f20: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
7f30: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
7f40: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
7f50: 51 4c 49 54 45 5f 43 52 45 41 54 45 5f 54 45 4d  QLITE_CREATE_TEM
7f60: 50 5f 49 4e 44 45 58 22 7d 20 7b 0a 20 20 20 20  P_INDEX"} {.    
7f70: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
7f80: 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24  gs [list $arg1 $
7f90: 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34  arg2 $arg3 $arg4
7fa0: 5d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ].        return
7fb0: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 20   SQLITE_OK.     
7fc0: 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   }.      return 
7fd0: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a  SQLITE_OK.    }.
7fe0: 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52      catchsql {CR
7ff0: 45 41 54 45 20 49 4e 44 45 58 20 69 31 20 4f 4e  EATE INDEX i1 ON
8000: 20 74 31 28 61 29 7d 0a 20 20 7d 20 7b 30 20 7b   t1(a)}.  } {0 {
8010: 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74  }}.  do_test aut
8020: 68 2d 31 2e 32 30 31 20 7b 0a 20 20 20 20 73 65  h-1.201 {.    se
8030: 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 20 20 7d  t ::authargs.  }
8040: 20 7b 69 31 20 74 31 20 74 65 6d 70 20 7b 7d 7d   {i1 t1 temp {}}
8050: 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  .  do_test auth-
8060: 31 2e 32 30 32 20 7b 0a 20 20 20 20 65 78 65 63  1.202 {.    exec
8070: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
8080: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d   FROM sqlite_tem
8090: 70 5f 6d 61 73 74 65 72 7d 0a 20 20 7d 20 7b 74  p_master}.  } {t
80a0: 31 20 69 31 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74  1 i1}.}..do_test
80b0: 20 61 75 74 68 2d 31 2e 32 30 33 20 7b 0a 20 20   auth-1.203 {.  
80c0: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
80d0: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
80e0: 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rg4} {.    if {$
80f0: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45  code=="SQLITE_DE
8100: 4c 45 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d  LETE" && $arg1==
8110: 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 7d  "sqlite_master"}
8120: 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   {.      return 
8130: 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20  SQLITE_DENY.    
8140: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
8150: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
8160: 63 68 73 71 6c 20 7b 44 52 4f 50 20 49 4e 44 45  chsql {DROP INDE
8170: 58 20 69 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20  X i2}.} {1 {not 
8180: 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f  authorized}}.do_
8190: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 30 34 20  test auth-1.204 
81a0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
81b0: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
81c0: 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b  lite_master}.} {
81d0: 74 32 20 69 32 7d 0a 64 6f 5f 74 65 73 74 20 61  t2 i2}.do_test a
81e0: 75 74 68 2d 31 2e 32 30 35 20 7b 0a 20 20 70 72  uth-1.205 {.  pr
81f0: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
8200: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
8210: 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f  4} {.    if {$co
8220: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f 50  de=="SQLITE_DROP
8230: 5f 49 4e 44 45 58 22 7d 20 7b 0a 20 20 20 20 20  _INDEX"} {.     
8240: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
8250: 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67  [list $arg1 $arg
8260: 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20  2 $arg3 $arg4]. 
8270: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
8280: 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20  TE_DENY.    }.  
8290: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
82a0: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
82b0: 6c 20 7b 44 52 4f 50 20 49 4e 44 45 58 20 69 32  l {DROP INDEX i2
82c0: 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68  }.} {1 {not auth
82d0: 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74  orized}}.do_test
82e0: 20 61 75 74 68 2d 31 2e 32 30 36 20 7b 0a 20 20   auth-1.206 {.  
82f0: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d  set ::authargs.}
8300: 20 7b 69 32 20 74 32 20 6d 61 69 6e 20 7b 7d 7d   {i2 t2 main {}}
8310: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
8320: 32 30 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  207 {.  execsql 
8330: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
8340: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d  M sqlite_master}
8350: 0a 7d 20 7b 74 32 20 69 32 7d 0a 64 6f 5f 74 65  .} {t2 i2}.do_te
8360: 73 74 20 61 75 74 68 2d 31 2e 32 30 38 20 7b 0a  st auth-1.208 {.
8370: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
8380: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
8390: 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20   arg4} {.    if 
83a0: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
83b0: 44 45 4c 45 54 45 22 20 26 26 20 24 61 72 67 31  DELETE" && $arg1
83c0: 3d 3d 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  =="sqlite_master
83d0: 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72  "} {.      retur
83e0: 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a  n SQLITE_IGNORE.
83f0: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
8400: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
8410: 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20   catchsql {DROP 
8420: 49 4e 44 45 58 20 69 32 7d 0a 7d 20 7b 30 20 7b  INDEX i2}.} {0 {
8430: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
8440: 31 2e 32 30 39 20 7b 0a 20 20 65 78 65 63 73 71  1.209 {.  execsq
8450: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
8460: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
8470: 72 7d 0a 7d 20 7b 74 32 20 69 32 7d 0a 64 6f 5f  r}.} {t2 i2}.do_
8480: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 31 30 20  test auth-1.210 
8490: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
84a0: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
84b0: 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69  g3 arg4} {.    i
84c0: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
84d0: 45 5f 44 52 4f 50 5f 49 4e 44 45 58 22 7d 20 7b  E_DROP_INDEX"} {
84e0: 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74  .      set ::aut
84f0: 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67  hargs [list $arg
8500: 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61  1 $arg2 $arg3 $a
8510: 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72  rg4].      retur
8520: 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a  n SQLITE_IGNORE.
8530: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
8540: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
8550: 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20   catchsql {DROP 
8560: 49 4e 44 45 58 20 69 32 7d 0a 7d 20 7b 30 20 7b  INDEX i2}.} {0 {
8570: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
8580: 31 2e 32 31 31 20 7b 0a 20 20 73 65 74 20 3a 3a  1.211 {.  set ::
8590: 61 75 74 68 61 72 67 73 0a 7d 20 7b 69 32 20 74  authargs.} {i2 t
85a0: 32 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65  2 main {}}.do_te
85b0: 73 74 20 61 75 74 68 2d 31 2e 32 31 32 20 7b 0a  st auth-1.212 {.
85c0: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
85d0: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
85e0: 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32  te_master}.} {t2
85f0: 20 69 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   i2}.do_test aut
8600: 68 2d 31 2e 32 31 33 20 7b 0a 20 20 70 72 6f 63  h-1.213 {.  proc
8610: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
8620: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
8630: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
8640: 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f 50 5f 49  =="SQLITE_DROP_I
8650: 4e 44 45 58 22 7d 20 7b 0a 20 20 20 20 20 20 73  NDEX"} {.      s
8660: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c  et ::authargs [l
8670: 69 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20  ist $arg1 $arg2 
8680: 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20  $arg3 $arg4].   
8690: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
86a0: 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  _OK.    }.    re
86b0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
86c0: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44   }.  catchsql {D
86d0: 52 4f 50 20 49 4e 44 45 58 20 69 32 7d 0a 7d 20  ROP INDEX i2}.} 
86e0: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  {0 {}}.do_test a
86f0: 75 74 68 2d 31 2e 32 31 34 20 7b 0a 20 20 73 65  uth-1.214 {.  se
8700: 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b  t ::authargs.} {
8710: 69 32 20 74 32 20 6d 61 69 6e 20 7b 7d 7d 0a 64  i2 t2 main {}}.d
8720: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 31  o_test auth-1.21
8730: 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  5 {.  execsql {S
8740: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
8750: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d  sqlite_master}.}
8760: 20 7b 74 32 7d 0a 0a 69 66 63 61 70 61 62 6c 65   {t2}..ifcapable
8770: 20 74 65 6d 70 64 62 20 7b 0a 20 20 64 6f 5f 74   tempdb {.  do_t
8780: 65 73 74 20 61 75 74 68 2d 31 2e 32 31 36 20 7b  est auth-1.216 {
8790: 0a 20 20 20 20 70 72 6f 63 20 61 75 74 68 20 7b  .    proc auth {
87a0: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
87b0: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
87c0: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
87d0: 4c 49 54 45 5f 44 45 4c 45 54 45 22 20 26 26 20  LITE_DELETE" && 
87e0: 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 74  $arg1=="sqlite_t
87f0: 65 6d 70 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20  emp_master"} {. 
8800: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
8810: 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 20 20  LITE_DENY.      
8820: 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  }.      return S
8830: 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20  QLITE_OK.    }. 
8840: 20 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f     catchsql {DRO
8850: 50 20 49 4e 44 45 58 20 69 31 7d 0a 20 20 7d 20  P INDEX i1}.  } 
8860: 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a  {1 {not authoriz
8870: 65 64 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61  ed}}.  do_test a
8880: 75 74 68 2d 31 2e 32 31 37 20 7b 0a 20 20 20 20  uth-1.217 {.    
8890: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
88a0: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
88b0: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 20 20  _temp_master}.  
88c0: 7d 20 7b 74 31 20 69 31 7d 0a 20 20 64 6f 5f 74  } {t1 i1}.  do_t
88d0: 65 73 74 20 61 75 74 68 2d 31 2e 32 31 38 20 7b  est auth-1.218 {
88e0: 0a 20 20 20 20 70 72 6f 63 20 61 75 74 68 20 7b  .    proc auth {
88f0: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
8900: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
8910: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
8920: 4c 49 54 45 5f 44 52 4f 50 5f 54 45 4d 50 5f 49  LITE_DROP_TEMP_I
8930: 4e 44 45 58 22 7d 20 7b 0a 20 20 20 20 20 20 20  NDEX"} {.       
8940: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
8950: 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67  [list $arg1 $arg
8960: 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20  2 $arg3 $arg4]. 
8970: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
8980: 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 20 20  LITE_DENY.      
8990: 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  }.      return S
89a0: 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20  QLITE_OK.    }. 
89b0: 20 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f     catchsql {DRO
89c0: 50 20 49 4e 44 45 58 20 69 31 7d 0a 20 20 7d 20  P INDEX i1}.  } 
89d0: 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a  {1 {not authoriz
89e0: 65 64 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61  ed}}.  do_test a
89f0: 75 74 68 2d 31 2e 32 31 39 20 7b 0a 20 20 20 20  uth-1.219 {.    
8a00: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 20  set ::authargs. 
8a10: 20 7d 20 7b 69 31 20 74 31 20 74 65 6d 70 20 7b   } {i1 t1 temp {
8a20: 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74  }}.  do_test aut
8a30: 68 2d 31 2e 32 32 30 20 7b 0a 20 20 20 20 65 78  h-1.220 {.    ex
8a40: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61  ecsql {SELECT na
8a50: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74  me FROM sqlite_t
8a60: 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 20 20 7d 20  emp_master}.  } 
8a70: 7b 74 31 20 69 31 7d 0a 20 20 64 6f 5f 74 65 73  {t1 i1}.  do_tes
8a80: 74 20 61 75 74 68 2d 31 2e 32 32 31 20 7b 0a 20  t auth-1.221 {. 
8a90: 20 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f     proc auth {co
8aa0: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
8ab0: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 20 20  3 arg4} {.      
8ac0: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
8ad0: 54 45 5f 44 45 4c 45 54 45 22 20 26 26 20 24 61  TE_DELETE" && $a
8ae0: 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 74 65 6d  rg1=="sqlite_tem
8af0: 70 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20  p_master"} {.   
8b00: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
8b10: 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 20 20  TE_IGNORE.      
8b20: 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  }.      return S
8b30: 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20  QLITE_OK.    }. 
8b40: 20 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f     catchsql {DRO
8b50: 50 20 49 4e 44 45 58 20 69 31 7d 0a 20 20 7d 20  P INDEX i1}.  } 
8b60: 7b 30 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74  {0 {}}.  do_test
8b70: 20 61 75 74 68 2d 31 2e 32 32 32 20 7b 0a 20 20   auth-1.222 {.  
8b80: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
8b90: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
8ba0: 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a  te_temp_master}.
8bb0: 20 20 7d 20 7b 74 31 20 69 31 7d 0a 20 20 64 6f    } {t1 i1}.  do
8bc0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 32 33  _test auth-1.223
8bd0: 20 7b 0a 20 20 20 20 70 72 6f 63 20 61 75 74 68   {.    proc auth
8be0: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
8bf0: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
8c00: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
8c10: 53 51 4c 49 54 45 5f 44 52 4f 50 5f 54 45 4d 50  SQLITE_DROP_TEMP
8c20: 5f 49 4e 44 45 58 22 7d 20 7b 0a 20 20 20 20 20  _INDEX"} {.     
8c30: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
8c40: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
8c50: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
8c60: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
8c70: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20  SQLITE_IGNORE.  
8c80: 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75      }.      retu
8c90: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20  rn SQLITE_OK.   
8ca0: 20 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20   }.    catchsql 
8cb0: 7b 44 52 4f 50 20 49 4e 44 45 58 20 69 31 7d 0a  {DROP INDEX i1}.
8cc0: 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20 20 64 6f 5f    } {0 {}}.  do_
8cd0: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 32 34 20  test auth-1.224 
8ce0: 7b 0a 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68  {.    set ::auth
8cf0: 61 72 67 73 0a 20 20 7d 20 7b 69 31 20 74 31 20  args.  } {i1 t1 
8d00: 74 65 6d 70 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65  temp {}}.  do_te
8d10: 73 74 20 61 75 74 68 2d 31 2e 32 32 35 20 7b 0a  st auth-1.225 {.
8d20: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c      execsql {SEL
8d30: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
8d40: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
8d50: 7d 0a 20 20 7d 20 7b 74 31 20 69 31 7d 0a 20 20  }.  } {t1 i1}.  
8d60: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
8d70: 32 36 20 7b 0a 20 20 20 20 70 72 6f 63 20 61 75  26 {.    proc au
8d80: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
8d90: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
8da0: 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d        if {$code=
8db0: 3d 22 53 51 4c 49 54 45 5f 44 52 4f 50 5f 54 45  ="SQLITE_DROP_TE
8dc0: 4d 50 5f 49 4e 44 45 58 22 7d 20 7b 0a 20 20 20  MP_INDEX"} {.   
8dd0: 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61       set ::autha
8de0: 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20  rgs [list $arg1 
8df0: 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67  $arg2 $arg3 $arg
8e00: 34 5d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  4].        retur
8e10: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20  n SQLITE_OK.    
8e20: 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e    }.      return
8e30: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d   SQLITE_OK.    }
8e40: 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 44  .    catchsql {D
8e50: 52 4f 50 20 49 4e 44 45 58 20 69 31 7d 0a 20 20  ROP INDEX i1}.  
8e60: 7d 20 7b 30 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65  } {0 {}}.  do_te
8e70: 73 74 20 61 75 74 68 2d 31 2e 32 32 37 20 7b 0a  st auth-1.227 {.
8e80: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
8e90: 67 73 0a 20 20 7d 20 7b 69 31 20 74 31 20 74 65  gs.  } {i1 t1 te
8ea0: 6d 70 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74  mp {}}.  do_test
8eb0: 20 61 75 74 68 2d 31 2e 32 32 38 20 7b 0a 20 20   auth-1.228 {.  
8ec0: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
8ed0: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
8ee0: 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a  te_temp_master}.
8ef0: 20 20 7d 20 7b 74 31 7d 0a 7d 0a 0a 64 6f 5f 74    } {t1}.}..do_t
8f00: 65 73 74 20 61 75 74 68 2d 31 2e 32 32 39 20 7b  est auth-1.229 {
8f10: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
8f20: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
8f30: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66  3 arg4} {.    if
8f40: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
8f50: 5f 50 52 41 47 4d 41 22 7d 20 7b 0a 20 20 20 20  _PRAGMA"} {.    
8f60: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
8f70: 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72   [list $arg1 $ar
8f80: 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a  g2 $arg3 $arg4].
8f90: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
8fa0: 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20  ITE_DENY.    }. 
8fb0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
8fc0: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
8fd0: 71 6c 20 7b 50 52 41 47 4d 41 20 66 75 6c 6c 5f  ql {PRAGMA full_
8fe0: 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 3d 6f 6e 7d  column_names=on}
8ff0: 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f  .} {1 {not autho
9000: 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20  rized}}.do_test 
9010: 61 75 74 68 2d 31 2e 32 33 30 20 7b 0a 20 20 73  auth-1.230 {.  s
9020: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20  et ::authargs.} 
9030: 7b 66 75 6c 6c 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d  {full_column_nam
9040: 65 73 20 6f 6e 20 7b 7d 20 7b 7d 7d 0a 64 6f 5f  es on {} {}}.do_
9050: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 33 31 20  test auth-1.231 
9060: 7b 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 53 45  {.  execsql2 {SE
9070: 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 32 7d 0a  LECT a FROM t2}.
9080: 7d 20 7b 61 20 31 31 20 61 20 37 7d 0a 64 6f 5f  } {a 11 a 7}.do_
9090: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 33 32 20  test auth-1.232 
90a0: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
90b0: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
90c0: 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69  g3 arg4} {.    i
90d0: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
90e0: 45 5f 50 52 41 47 4d 41 22 7d 20 7b 0a 20 20 20  E_PRAGMA"} {.   
90f0: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
9100: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
9110: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
9120: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
9130: 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20  LITE_IGNORE.    
9140: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
9150: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
9160: 63 68 73 71 6c 20 7b 50 52 41 47 4d 41 20 66 75  chsql {PRAGMA fu
9170: 6c 6c 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 3d  ll_column_names=
9180: 6f 6e 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f  on}.} {0 {}}.do_
9190: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 33 33 20  test auth-1.233 
91a0: 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72  {.  set ::authar
91b0: 67 73 0a 7d 20 7b 66 75 6c 6c 5f 63 6f 6c 75 6d  gs.} {full_colum
91c0: 6e 5f 6e 61 6d 65 73 20 6f 6e 20 7b 7d 20 7b 7d  n_names on {} {}
91d0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
91e0: 2e 32 33 34 20 7b 0a 20 20 65 78 65 63 73 71 6c  .234 {.  execsql
91f0: 32 20 7b 53 45 4c 45 43 54 20 61 20 46 52 4f 4d  2 {SELECT a FROM
9200: 20 74 32 7d 0a 7d 20 7b 61 20 31 31 20 61 20 37   t2}.} {a 11 a 7
9210: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
9220: 2e 32 33 35 20 7b 0a 20 20 70 72 6f 63 20 61 75  .235 {.  proc au
9230: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
9240: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
9250: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
9260: 53 51 4c 49 54 45 5f 50 52 41 47 4d 41 22 7d 20  SQLITE_PRAGMA"} 
9270: 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75  {.      set ::au
9280: 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72  thargs [list $ar
9290: 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24  g1 $arg2 $arg3 $
92a0: 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75  arg4].      retu
92b0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20  rn SQLITE_OK.   
92c0: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
92d0: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
92e0: 74 63 68 73 71 6c 20 7b 50 52 41 47 4d 41 20 66  tchsql {PRAGMA f
92f0: 75 6c 6c 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73  ull_column_names
9300: 3d 6f 6e 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f  =on}.} {0 {}}.do
9310: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 33 36  _test auth-1.236
9320: 20 7b 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 53   {.  execsql2 {S
9330: 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 32 7d  ELECT a FROM t2}
9340: 0a 7d 20 7b 74 32 2e 61 20 31 31 20 74 32 2e 61  .} {t2.a 11 t2.a
9350: 20 37 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68   7}.do_test auth
9360: 2d 31 2e 32 33 37 20 7b 0a 20 20 70 72 6f 63 20  -1.237 {.  proc 
9370: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
9380: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
9390: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
93a0: 3d 22 53 51 4c 49 54 45 5f 50 52 41 47 4d 41 22  ="SQLITE_PRAGMA"
93b0: 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a  } {.      set ::
93c0: 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24  authargs [list $
93d0: 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33  arg1 $arg2 $arg3
93e0: 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65   $arg4].      re
93f0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
9400: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
9410: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
9420: 63 61 74 63 68 73 71 6c 20 7b 50 52 41 47 4d 41  catchsql {PRAGMA
9430: 20 66 75 6c 6c 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d   full_column_nam
9440: 65 73 3d 4f 46 46 7d 0a 7d 20 7b 30 20 7b 7d 7d  es=OFF}.} {0 {}}
9450: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
9460: 32 33 38 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75  238 {.  set ::au
9470: 74 68 61 72 67 73 0a 7d 20 7b 66 75 6c 6c 5f 63  thargs.} {full_c
9480: 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 20 4f 46 46 20  olumn_names OFF 
9490: 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  {} {}}.do_test a
94a0: 75 74 68 2d 31 2e 32 33 39 20 7b 0a 20 20 65 78  uth-1.239 {.  ex
94b0: 65 63 73 71 6c 32 20 7b 53 45 4c 45 43 54 20 61  ecsql2 {SELECT a
94c0: 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 61 20 31   FROM t2}.} {a 1
94d0: 31 20 61 20 37 7d 0a 0a 64 6f 5f 74 65 73 74 20  1 a 7}..do_test 
94e0: 61 75 74 68 2d 31 2e 32 34 30 20 7b 0a 20 20 70  auth-1.240 {.  p
94f0: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
9500: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
9510: 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g4} {.    if {$c
9520: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 54 52 41  ode=="SQLITE_TRA
9530: 4e 53 41 43 54 49 4f 4e 22 7d 20 7b 0a 20 20 20  NSACTION"} {.   
9540: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
9550: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
9560: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
9570: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
9580: 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a  LITE_DENY.    }.
9590: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
95a0: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
95b0: 73 71 6c 20 7b 42 45 47 49 4e 7d 0a 7d 20 7b 31  sql {BEGIN}.} {1
95c0: 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64   {not authorized
95d0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
95e0: 31 2e 32 34 31 20 7b 0a 20 20 73 65 74 20 3a 3a  1.241 {.  set ::
95f0: 61 75 74 68 61 72 67 73 0a 7d 20 7b 42 45 47 49  authargs.} {BEGI
9600: 4e 20 7b 7d 20 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74  N {} {} {}}.do_t
9610: 65 73 74 20 61 75 74 68 2d 31 2e 32 34 32 20 7b  est auth-1.242 {
9620: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
9630: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
9640: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66  3 arg4} {.    if
9650: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
9660: 5f 54 52 41 4e 53 41 43 54 49 4f 4e 22 20 26 26  _TRANSACTION" &&
9670: 20 24 61 72 67 31 21 3d 22 42 45 47 49 4e 22 7d   $arg1!="BEGIN"}
9680: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61   {.      set ::a
9690: 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61  uthargs [list $a
96a0: 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20  rg1 $arg2 $arg3 
96b0: 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74  $arg4].      ret
96c0: 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a  urn SQLITE_DENY.
96d0: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
96e0: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
96f0: 20 63 61 74 63 68 73 71 6c 20 7b 42 45 47 49 4e   catchsql {BEGIN
9700: 3b 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32  ; INSERT INTO t2
9710: 20 56 41 4c 55 45 53 28 34 34 2c 35 35 2c 36 36   VALUES(44,55,66
9720: 29 3b 20 43 4f 4d 4d 49 54 7d 0a 7d 20 7b 31 20  ); COMMIT}.} {1 
9730: 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d  {not authorized}
9740: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
9750: 2e 32 34 33 20 7b 0a 20 20 73 65 74 20 3a 3a 61  .243 {.  set ::a
9760: 75 74 68 61 72 67 73 0a 7d 20 7b 43 4f 4d 4d 49  uthargs.} {COMMI
9770: 54 20 7b 7d 20 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74  T {} {} {}}.do_t
9780: 65 73 74 20 61 75 74 68 2d 31 2e 32 34 34 20 7b  est auth-1.244 {
9790: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
97a0: 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d 0a 7d 20  CT * FROM t2}.} 
97b0: 7b 31 31 20 32 20 33 33 20 37 20 38 20 39 20 34  {11 2 33 7 8 9 4
97c0: 34 20 35 35 20 36 36 7d 0a 64 6f 5f 74 65 73 74  4 55 66}.do_test
97d0: 20 61 75 74 68 2d 31 2e 32 34 35 20 7b 0a 20 20   auth-1.245 {.  
97e0: 63 61 74 63 68 73 71 6c 20 7b 52 4f 4c 4c 42 41  catchsql {ROLLBA
97f0: 43 4b 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75  CK}.} {1 {not au
9800: 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65  thorized}}.do_te
9810: 73 74 20 61 75 74 68 2d 31 2e 32 34 36 20 7b 0a  st auth-1.246 {.
9820: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
9830: 0a 7d 20 7b 52 4f 4c 4c 42 41 43 4b 20 7b 7d 20  .} {ROLLBACK {} 
9840: 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  {} {}}.do_test a
9850: 75 74 68 2d 31 2e 32 34 37 20 7b 0a 20 20 63 61  uth-1.247 {.  ca
9860: 74 63 68 73 71 6c 20 7b 45 4e 44 20 54 52 41 4e  tchsql {END TRAN
9870: 53 41 43 54 49 4f 4e 7d 0a 7d 20 7b 31 20 7b 6e  SACTION}.} {1 {n
9880: 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a  ot authorized}}.
9890: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
98a0: 34 38 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74  48 {.  set ::aut
98b0: 68 61 72 67 73 0a 7d 20 7b 43 4f 4d 4d 49 54 20  hargs.} {COMMIT 
98c0: 7b 7d 20 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74 65 73  {} {} {}}.do_tes
98d0: 74 20 61 75 74 68 2d 31 2e 32 34 39 20 7b 0a 20  t auth-1.249 {. 
98e0: 20 64 62 20 61 75 74 68 6f 72 69 7a 65 72 20 7b   db authorizer {
98f0: 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 52 4f  }.  catchsql {RO
9900: 4c 4c 42 41 43 4b 7d 0a 7d 20 7b 30 20 7b 7d 7d  LLBACK}.} {0 {}}
9910: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
9920: 32 35 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  250 {.  execsql 
9930: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
9940: 32 7d 0a 7d 20 7b 31 31 20 32 20 33 33 20 37 20  2}.} {11 2 33 7 
9950: 38 20 39 7d 0a 0a 23 20 74 69 63 6b 65 74 20 23  8 9}..# ticket #
9960: 33 34 30 20 2d 20 61 75 74 68 6f 72 69 7a 61 74  340 - authorizat
9970: 69 6f 6e 20 66 6f 72 20 41 54 54 41 43 48 20 61  ion for ATTACH a
9980: 6e 64 20 44 45 54 41 43 48 2e 0a 23 0a 64 6f 5f  nd DETACH..#.do_
9990: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 35 31 20  test auth-1.251 
99a0: 7b 0a 20 20 64 62 20 61 75 74 68 6f 72 69 7a 65  {.  db authorize
99b0: 72 20 3a 3a 61 75 74 68 0a 20 20 70 72 6f 63 20  r ::auth.  proc 
99c0: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
99d0: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
99e0: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
99f0: 3d 22 53 51 4c 49 54 45 5f 41 54 54 41 43 48 22  ="SQLITE_ATTACH"
9a00: 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a  } {.      set ::
9a10: 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24  authargs [list $
9a20: 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33  arg1 $arg2 $arg3
9a30: 20 24 61 72 67 34 5d 0a 20 20 20 20 7d 0a 20 20   $arg4].    }.  
9a40: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
9a50: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
9a60: 6c 20 7b 0a 20 20 20 20 41 54 54 41 43 48 20 44  l {.    ATTACH D
9a70: 41 54 41 42 41 53 45 20 27 3a 6d 65 6d 6f 72 79  ATABASE ':memory
9a80: 3a 27 20 41 53 20 74 65 73 74 31 0a 20 20 7d 0a  :' AS test1.  }.
9a90: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
9aa0: 20 61 75 74 68 2d 31 2e 32 35 32 20 7b 0a 20 20   auth-1.252 {.  
9ab0: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d  set ::authargs.}
9ac0: 20 7b 3a 6d 65 6d 6f 72 79 3a 20 7b 7d 20 7b 7d   {:memory: {} {}
9ad0: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
9ae0: 68 2d 31 2e 32 35 33 20 7b 0a 20 20 63 61 74 63  h-1.253 {.  catc
9af0: 68 73 71 6c 20 7b 44 45 54 41 43 48 20 44 41 54  hsql {DETACH DAT
9b00: 41 42 41 53 45 20 74 65 73 74 31 7d 0a 20 20 70  ABASE test1}.  p
9b10: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
9b20: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
9b30: 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  g4} {.    if {$c
9b40: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 41 54 54  ode=="SQLITE_ATT
9b50: 41 43 48 22 7d 20 7b 0a 20 20 20 20 20 20 73 65  ACH"} {.      se
9b60: 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69  t ::authargs [li
9b70: 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24  st $arg1 $arg2 $
9b80: 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20  arg3 $arg4].    
9b90: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
9ba0: 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72  DENY.    }.    r
9bb0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
9bc0: 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b    }.  catchsql {
9bd0: 0a 20 20 20 20 41 54 54 41 43 48 20 44 41 54 41  .    ATTACH DATA
9be0: 42 41 53 45 20 27 3a 6d 65 6d 6f 72 79 3a 27 20  BASE ':memory:' 
9bf0: 41 53 20 74 65 73 74 31 3b 0a 20 20 7d 0a 7d 20  AS test1;.  }.} 
9c00: 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a  {1 {not authoriz
9c10: 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  ed}}.do_test aut
9c20: 68 2d 31 2e 32 35 34 20 7b 0a 20 20 6c 69 6e 64  h-1.254 {.  lind
9c30: 65 78 20 5b 65 78 65 63 73 71 6c 20 7b 50 52 41  ex [execsql {PRA
9c40: 47 4d 41 20 64 61 74 61 62 61 73 65 5f 6c 69 73  GMA database_lis
9c50: 74 7d 5d 20 37 0a 7d 20 7b 7d 0a 64 6f 5f 74 65  t}] 7.} {}.do_te
9c60: 73 74 20 61 75 74 68 2d 31 2e 32 35 35 20 7b 0a  st auth-1.255 {.
9c70: 20 20 63 61 74 63 68 73 71 6c 20 7b 44 45 54 41    catchsql {DETA
9c80: 43 48 20 44 41 54 41 42 41 53 45 20 74 65 73 74  CH DATABASE test
9c90: 31 7d 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b  1}.  proc auth {
9ca0: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
9cb0: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
9cc0: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
9cd0: 54 45 5f 41 54 54 41 43 48 22 7d 20 7b 0a 20 20  TE_ATTACH"} {.  
9ce0: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
9cf0: 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24  gs [list $arg1 $
9d00: 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34  arg2 $arg3 $arg4
9d10: 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  ].      return S
9d20: 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20  QLITE_IGNORE.   
9d30: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
9d40: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
9d50: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 41 54 54  tchsql {.    ATT
9d60: 41 43 48 20 44 41 54 41 42 41 53 45 20 27 3a 6d  ACH DATABASE ':m
9d70: 65 6d 6f 72 79 3a 27 20 41 53 20 74 65 73 74 31  emory:' AS test1
9d80: 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  ;.  }.} {0 {}}.d
9d90: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 35  o_test auth-1.25
9da0: 36 20 7b 0a 20 20 6c 69 6e 64 65 78 20 5b 65 78  6 {.  lindex [ex
9db0: 65 63 73 71 6c 20 7b 50 52 41 47 4d 41 20 64 61  ecsql {PRAGMA da
9dc0: 74 61 62 61 73 65 5f 6c 69 73 74 7d 5d 20 37 0a  tabase_list}] 7.
9dd0: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  } {}.do_test aut
9de0: 68 2d 31 2e 32 35 37 20 7b 0a 20 20 70 72 6f 63  h-1.257 {.  proc
9df0: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
9e00: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
9e10: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
9e20: 3d 3d 22 53 51 4c 49 54 45 5f 44 45 54 41 43 48  =="SQLITE_DETACH
9e30: 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a  "} {.      set :
9e40: 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20  :authargs [list 
9e50: 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67  $arg1 $arg2 $arg
9e60: 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72  3 $arg4].      r
9e70: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
9e80: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
9e90: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
9ea0: 20 65 78 65 63 73 71 6c 20 7b 41 54 54 41 43 48   execsql {ATTACH
9eb0: 20 44 41 54 41 42 41 53 45 20 27 3a 6d 65 6d 6f   DATABASE ':memo
9ec0: 72 79 3a 27 20 41 53 20 74 65 73 74 31 7d 0a 20  ry:' AS test1}. 
9ed0: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
9ee0: 44 45 54 41 43 48 20 44 41 54 41 42 41 53 45 20  DETACH DATABASE 
9ef0: 74 65 73 74 31 3b 0a 20 20 7d 0a 7d 20 7b 30 20  test1;.  }.} {0 
9f00: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
9f10: 2d 31 2e 32 35 38 20 7b 0a 20 20 6c 69 6e 64 65  -1.258 {.  linde
9f20: 78 20 5b 65 78 65 63 73 71 6c 20 7b 50 52 41 47  x [execsql {PRAG
9f30: 4d 41 20 64 61 74 61 62 61 73 65 5f 6c 69 73 74  MA database_list
9f40: 7d 5d 20 37 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  }] 7.} {}.do_tes
9f50: 74 20 61 75 74 68 2d 31 2e 32 35 39 20 7b 0a 20  t auth-1.259 {. 
9f60: 20 65 78 65 63 73 71 6c 20 7b 41 54 54 41 43 48   execsql {ATTACH
9f70: 20 44 41 54 41 42 41 53 45 20 27 3a 6d 65 6d 6f   DATABASE ':memo
9f80: 72 79 3a 27 20 41 53 20 74 65 73 74 31 7d 0a 20  ry:' AS test1}. 
9f90: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
9fa0: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
9fb0: 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg4} {.    if {
9fc0: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44  $code=="SQLITE_D
9fd0: 45 54 41 43 48 22 7d 20 7b 0a 20 20 20 20 20 20  ETACH"} {.      
9fe0: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b  set ::authargs [
9ff0: 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67 32  list $arg1 $arg2
a000: 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20   $arg3 $arg4].  
a010: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
a020: 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20  E_IGNORE.    }. 
a030: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
a040: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
a050: 71 6c 20 7b 0a 20 20 20 20 44 45 54 41 43 48 20  ql {.    DETACH 
a060: 44 41 54 41 42 41 53 45 20 74 65 73 74 31 3b 0a  DATABASE test1;.
a070: 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 69 66 63    }.} {0 {}}.ifc
a080: 61 70 61 62 6c 65 20 74 65 6d 70 64 62 20 7b 0a  apable tempdb {.
a090: 20 20 69 66 63 61 70 61 62 6c 65 20 73 63 68 65    ifcapable sche
a0a0: 6d 61 5f 70 72 61 67 6d 61 73 20 7b 0a 20 20 64  ma_pragmas {.  d
a0b0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 36  o_test auth-1.26
a0c0: 30 20 7b 0a 20 20 20 20 6c 69 6e 64 65 78 20 5b  0 {.    lindex [
a0d0: 65 78 65 63 73 71 6c 20 7b 50 52 41 47 4d 41 20  execsql {PRAGMA 
a0e0: 64 61 74 61 62 61 73 65 5f 6c 69 73 74 7d 5d 20  database_list}] 
a0f0: 37 0a 20 20 7d 20 7b 74 65 73 74 31 7d 0a 20 20  7.  } {test1}.  
a100: 7d 20 3b 23 20 69 66 63 61 70 61 62 6c 65 20 73  } ;# ifcapable s
a110: 63 68 65 6d 61 5f 70 72 61 67 6d 61 73 0a 20 20  chema_pragmas.  
a120: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
a130: 36 31 20 7b 0a 20 20 20 20 70 72 6f 63 20 61 75  61 {.    proc au
a140: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
a150: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
a160: 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d        if {$code=
a170: 3d 22 53 51 4c 49 54 45 5f 44 45 54 41 43 48 22  ="SQLITE_DETACH"
a180: 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20  } {.        set 
a190: 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74  ::authargs [list
a1a0: 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72   $arg1 $arg2 $ar
a1b0: 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20  g3 $arg4].      
a1c0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
a1d0: 44 45 4e 59 0a 20 20 20 20 20 20 7d 0a 20 20 20  DENY.      }.   
a1e0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
a1f0: 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61  _OK.    }.    ca
a200: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20 44  tchsql {.      D
a210: 45 54 41 43 48 20 44 41 54 41 42 41 53 45 20 74  ETACH DATABASE t
a220: 65 73 74 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  est1;.    }.  } 
a230: 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a  {1 {not authoriz
a240: 65 64 7d 7d 0a 20 20 69 66 63 61 70 61 62 6c 65  ed}}.  ifcapable
a250: 20 73 63 68 65 6d 61 5f 70 72 61 67 6d 61 73 20   schema_pragmas 
a260: 7b 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68  {.  do_test auth
a270: 2d 31 2e 32 36 32 20 7b 0a 20 20 20 20 6c 69 6e  -1.262 {.    lin
a280: 64 65 78 20 5b 65 78 65 63 73 71 6c 20 7b 50 52  dex [execsql {PR
a290: 41 47 4d 41 20 64 61 74 61 62 61 73 65 5f 6c 69  AGMA database_li
a2a0: 73 74 7d 5d 20 37 0a 20 20 7d 20 7b 74 65 73 74  st}] 7.  } {test
a2b0: 31 7d 0a 20 20 7d 20 3b 23 20 69 66 63 61 70 61  1}.  } ;# ifcapa
a2c0: 62 6c 65 20 73 63 68 65 6d 61 5f 70 72 61 67 6d  ble schema_pragm
a2d0: 61 73 0a 20 20 64 62 20 61 75 74 68 6f 72 69 7a  as.  db authoriz
a2e0: 65 72 20 7b 7d 0a 20 20 65 78 65 63 73 71 6c 20  er {}.  execsql 
a2f0: 7b 44 45 54 41 43 48 20 44 41 54 41 42 41 53 45  {DETACH DATABASE
a300: 20 74 65 73 74 31 7d 0a 20 20 64 62 20 61 75 74   test1}.  db aut
a310: 68 6f 72 69 7a 65 72 20 3a 3a 61 75 74 68 0a 20  horizer ::auth. 
a320: 20 0a 20 20 23 20 41 75 74 68 6f 72 69 7a 61 74   .  # Authorizat
a330: 69 6f 6e 20 66 6f 72 20 41 4c 54 45 52 20 54 41  ion for ALTER TA
a340: 42 4c 45 2e 20 54 68 65 73 65 20 74 65 73 74 73  BLE. These tests
a350: 20 61 72 65 20 6f 6d 69 74 74 65 64 20 69 66 20   are omitted if 
a360: 74 68 65 20 6c 69 62 72 61 72 79 0a 20 20 23 20  the library.  # 
a370: 77 61 73 20 62 75 69 6c 74 20 77 69 74 68 6f 75  was built withou
a380: 74 20 41 4c 54 45 52 20 54 41 42 4c 45 20 73 75  t ALTER TABLE su
a390: 70 70 6f 72 74 2e 0a 20 20 69 66 63 61 70 61 62  pport..  ifcapab
a3a0: 6c 65 20 61 6c 74 65 72 74 61 62 6c 65 20 7b 0a  le altertable {.
a3b0: 20 20 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 61    .    do_test a
a3c0: 75 74 68 2d 31 2e 32 36 33 20 7b 0a 20 20 20 20  uth-1.263 {.    
a3d0: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
a3e0: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
a3f0: 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 20 20 20   arg4} {.       
a400: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
a410: 49 54 45 5f 41 4c 54 45 52 5f 54 41 42 4c 45 22  ITE_ALTER_TABLE"
a420: 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 73 65  } {.          se
a430: 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69  t ::authargs [li
a440: 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24  st $arg1 $arg2 $
a450: 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20  arg3 $arg4].    
a460: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
a470: 49 54 45 5f 4f 4b 0a 20 20 20 20 20 20 20 20 7d  ITE_OK.        }
a480: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
a490: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 20 20  SQLITE_OK.      
a4a0: 7d 0a 20 20 20 20 20 20 63 61 74 63 68 73 71 6c  }.      catchsql
a4b0: 20 7b 0a 20 20 20 20 20 20 20 20 41 4c 54 45 52   {.        ALTER
a4c0: 20 54 41 42 4c 45 20 74 31 20 52 45 4e 41 4d 45   TABLE t1 RENAME
a4d0: 20 54 4f 20 74 31 78 0a 20 20 20 20 20 20 7d 0a   TO t1x.      }.
a4e0: 20 20 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20 20 20      } {0 {}}.   
a4f0: 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e   do_test auth-1.
a500: 32 36 34 20 7b 0a 20 20 20 20 20 20 65 78 65 63  264 {.      exec
a510: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
a520: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d   FROM sqlite_tem
a530: 70 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20 74  p_master WHERE t
a540: 79 70 65 3d 27 74 61 62 6c 65 27 7d 0a 20 20 20  ype='table'}.   
a550: 20 7d 20 7b 74 31 78 7d 0a 20 20 20 20 64 6f 5f   } {t1x}.    do_
a560: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 36 35 20  test auth-1.265 
a570: 7b 0a 20 20 20 20 20 20 73 65 74 20 61 75 74 68  {.      set auth
a580: 61 72 67 73 0a 20 20 20 20 7d 20 7b 74 65 6d 70  args.    } {temp
a590: 20 74 31 20 7b 7d 20 7b 7d 7d 0a 20 20 20 20 64   t1 {} {}}.    d
a5a0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 36  o_test auth-1.26
a5b0: 36 20 7b 0a 20 20 20 20 20 20 70 72 6f 63 20 61  6 {.      proc a
a5c0: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
a5d0: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
a5e0: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 63 6f  .        if {$co
a5f0: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 41 4c 54 45  de=="SQLITE_ALTE
a600: 52 5f 54 41 42 4c 45 22 7d 20 7b 0a 20 20 20 20  R_TABLE"} {.    
a610: 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68        set ::auth
a620: 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31  args [list $arg1
a630: 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72   $arg2 $arg3 $ar
a640: 67 34 5d 0a 20 20 20 20 20 20 20 20 20 20 72 65  g4].          re
a650: 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f  turn SQLITE_IGNO
a660: 52 45 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  RE.        }.   
a670: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
a680: 54 45 5f 4f 4b 0a 20 20 20 20 20 20 7d 0a 20 20  TE_OK.      }.  
a690: 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20      catchsql {. 
a6a0: 20 20 20 20 20 20 20 41 4c 54 45 52 20 54 41 42         ALTER TAB
a6b0: 4c 45 20 74 31 78 20 52 45 4e 41 4d 45 20 54 4f  LE t1x RENAME TO
a6c0: 20 74 31 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   t1.      }.    
a6d0: 7d 20 7b 30 20 7b 7d 7d 0a 20 20 20 20 64 6f 5f  } {0 {}}.    do_
a6e0: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 36 37 20  test auth-1.267 
a6f0: 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20  {.      execsql 
a700: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
a710: 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  M sqlite_temp_ma
a720: 73 74 65 72 20 57 48 45 52 45 20 74 79 70 65 3d  ster WHERE type=
a730: 27 74 61 62 6c 65 27 7d 0a 20 20 20 20 7d 20 7b  'table'}.    } {
a740: 74 31 78 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74  t1x}.    do_test
a750: 20 61 75 74 68 2d 31 2e 32 36 38 20 7b 0a 20 20   auth-1.268 {.  
a760: 20 20 20 20 73 65 74 20 61 75 74 68 61 72 67 73      set authargs
a770: 0a 20 20 20 20 7d 20 7b 74 65 6d 70 20 74 31 78  .    } {temp t1x
a780: 20 7b 7d 20 7b 7d 7d 0a 20 20 20 20 64 6f 5f 74   {} {}}.    do_t
a790: 65 73 74 20 61 75 74 68 2d 31 2e 32 36 39 20 7b  est auth-1.269 {
a7a0: 0a 20 20 20 20 20 20 70 72 6f 63 20 61 75 74 68  .      proc auth
a7b0: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
a7c0: 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20   arg3 arg4} {.  
a7d0: 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d        if {$code=
a7e0: 3d 22 53 51 4c 49 54 45 5f 41 4c 54 45 52 5f 54  ="SQLITE_ALTER_T
a7f0: 41 42 4c 45 22 7d 20 7b 0a 20 20 20 20 20 20 20  ABLE"} {.       
a800: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
a810: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
a820: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
a830: 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
a840: 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20  n SQLITE_DENY.  
a850: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
a860: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
a870: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 63  .      }.      c
a880: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20  atchsql {.      
a890: 20 20 41 4c 54 45 52 20 54 41 42 4c 45 20 74 31    ALTER TABLE t1
a8a0: 78 20 52 45 4e 41 4d 45 20 54 4f 20 74 31 0a 20  x RENAME TO t1. 
a8b0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 7b 31 20       }.    } {1 
a8c0: 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d  {not authorized}
a8d0: 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 61 75  }.    do_test au
a8e0: 74 68 2d 31 2e 32 37 30 20 7b 0a 20 20 20 20 20  th-1.270 {.     
a8f0: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
a900: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
a910: 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 20 57 48  e_temp_master WH
a920: 45 52 45 20 74 79 70 65 3d 27 74 61 62 6c 65 27  ERE type='table'
a930: 7d 0a 20 20 20 20 7d 20 7b 74 31 78 7d 0a 0a 20  }.    } {t1x}.. 
a940: 20 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d     do_test auth-
a950: 31 2e 32 37 31 20 7b 0a 20 20 20 20 20 20 73 65  1.271 {.      se
a960: 74 20 61 75 74 68 61 72 67 73 0a 20 20 20 20 7d  t authargs.    }
a970: 20 7b 74 65 6d 70 20 74 31 78 20 7b 7d 20 7b 7d   {temp t1x {} {}
a980: 7d 0a 20 20 7d 20 3b 23 20 69 66 63 61 70 61 62  }.  } ;# ifcapab
a990: 6c 65 20 61 6c 74 65 72 74 61 62 6c 65 0a 0a 7d  le altertable..}
a9a0: 20 65 6c 73 65 20 7b 0a 20 20 64 62 20 61 75 74   else {.  db aut
a9b0: 68 6f 72 69 7a 65 72 20 7b 7d 0a 20 20 64 62 20  horizer {}.  db 
a9c0: 65 76 61 6c 20 7b 0a 20 20 20 20 44 45 54 41 43  eval {.    DETAC
a9d0: 48 20 44 41 54 41 42 41 53 45 20 74 65 73 74 31  H DATABASE test1
a9e0: 3b 0a 20 20 7d 0a 7d 0a 0a 69 66 63 61 70 61 62  ;.  }.}..ifcapab
a9f0: 6c 65 20 20 61 6c 74 65 72 74 61 62 6c 65 20 7b  le  altertable {
aa00: 0a 64 62 20 61 75 74 68 6f 72 69 7a 65 72 20 7b  .db authorizer {
aa10: 7d 0a 63 61 74 63 68 73 71 6c 20 7b 41 4c 54 45  }.catchsql {ALTE
aa20: 52 20 54 41 42 4c 45 20 74 31 78 20 52 45 4e 41  R TABLE t1x RENA
aa30: 4d 45 20 54 4f 20 74 31 7d 0a 64 62 20 61 75 74  ME TO t1}.db aut
aa40: 68 6f 72 69 7a 65 72 20 3a 3a 61 75 74 68 0a 64  horizer ::auth.d
aa50: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 37  o_test auth-1.27
aa60: 32 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  2 {.  proc auth 
aa70: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
aa80: 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20  arg3 arg4} {.   
aa90: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
aaa0: 49 54 45 5f 41 4c 54 45 52 5f 54 41 42 4c 45 22  ITE_ALTER_TABLE"
aab0: 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a  } {.      set ::
aac0: 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24  authargs [list $
aad0: 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33  arg1 $arg2 $arg3
aae0: 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65   $arg4].      re
aaf0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
ab00: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
ab10: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
ab20: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 41  catchsql {.    A
ab30: 4c 54 45 52 20 54 41 42 4c 45 20 74 32 20 52 45  LTER TABLE t2 RE
ab40: 4e 41 4d 45 20 54 4f 20 74 32 78 0a 20 20 7d 0a  NAME TO t2x.  }.
ab50: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
ab60: 20 61 75 74 68 2d 31 2e 32 37 33 20 7b 0a 20 20   auth-1.273 {.  
ab70: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
ab80: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
ab90: 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20 74 79  _master WHERE ty
aba0: 70 65 3d 27 74 61 62 6c 65 27 7d 0a 7d 20 7b 74  pe='table'}.} {t
abb0: 32 78 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  2x}.do_test auth
abc0: 2d 31 2e 32 37 34 20 7b 0a 20 20 73 65 74 20 61  -1.274 {.  set a
abd0: 75 74 68 61 72 67 73 0a 7d 20 7b 6d 61 69 6e 20  uthargs.} {main 
abe0: 74 32 20 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74 65 73  t2 {} {}}.do_tes
abf0: 74 20 61 75 74 68 2d 31 2e 32 37 35 20 7b 0a 20  t auth-1.275 {. 
ac00: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
ac10: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
ac20: 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg4} {.    if {
ac30: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 41  $code=="SQLITE_A
ac40: 4c 54 45 52 5f 54 41 42 4c 45 22 7d 20 7b 0a 20  LTER_TABLE"} {. 
ac50: 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61       set ::autha
ac60: 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20  rgs [list $arg1 
ac70: 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67  $arg2 $arg3 $arg
ac80: 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  4].      return 
ac90: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20  SQLITE_IGNORE.  
aca0: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
acb0: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
acc0: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 41 4c  atchsql {.    AL
acd0: 54 45 52 20 54 41 42 4c 45 20 74 32 78 20 52 45  TER TABLE t2x RE
ace0: 4e 41 4d 45 20 54 4f 20 74 32 0a 20 20 7d 0a 7d  NAME TO t2.  }.}
acf0: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
ad00: 61 75 74 68 2d 31 2e 32 37 36 20 7b 0a 20 20 65  auth-1.276 {.  e
ad10: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
ad20: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
ad30: 6d 61 73 74 65 72 20 57 48 45 52 45 20 74 79 70  master WHERE typ
ad40: 65 3d 27 74 61 62 6c 65 27 7d 0a 7d 20 7b 74 32  e='table'}.} {t2
ad50: 78 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  x}.do_test auth-
ad60: 31 2e 32 37 37 20 7b 0a 20 20 73 65 74 20 61 75  1.277 {.  set au
ad70: 74 68 61 72 67 73 0a 7d 20 7b 6d 61 69 6e 20 74  thargs.} {main t
ad80: 32 78 20 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74 65 73  2x {} {}}.do_tes
ad90: 74 20 61 75 74 68 2d 31 2e 32 37 38 20 7b 0a 20  t auth-1.278 {. 
ada0: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
adb0: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
adc0: 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66 20 7b  arg4} {.    if {
add0: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 41  $code=="SQLITE_A
ade0: 4c 54 45 52 5f 54 41 42 4c 45 22 7d 20 7b 0a 20  LTER_TABLE"} {. 
adf0: 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61       set ::autha
ae00: 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20  rgs [list $arg1 
ae10: 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67  $arg2 $arg3 $arg
ae20: 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  4].      return 
ae30: 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20  SQLITE_DENY.    
ae40: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
ae50: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
ae60: 63 68 73 71 6c 20 7b 0a 20 20 20 20 41 4c 54 45  chsql {.    ALTE
ae70: 52 20 54 41 42 4c 45 20 74 32 78 20 52 45 4e 41  R TABLE t2x RENA
ae80: 4d 45 20 54 4f 20 74 32 0a 20 20 7d 0a 7d 20 7b  ME TO t2.  }.} {
ae90: 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65  1 {not authorize
aea0: 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  d}}.do_test auth
aeb0: 2d 31 2e 32 37 39 20 7b 0a 20 20 65 78 65 63 73  -1.279 {.  execs
aec0: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
aed0: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
aee0: 65 72 20 57 48 45 52 45 20 74 79 70 65 3d 27 74  er WHERE type='t
aef0: 61 62 6c 65 27 7d 0a 7d 20 7b 74 32 78 7d 0a 64  able'}.} {t2x}.d
af00: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 38  o_test auth-1.28
af10: 30 20 7b 0a 20 20 73 65 74 20 61 75 74 68 61 72  0 {.  set authar
af20: 67 73 0a 7d 20 7b 6d 61 69 6e 20 74 32 78 20 7b  gs.} {main t2x {
af30: 7d 20 7b 7d 7d 0a 64 62 20 61 75 74 68 6f 72 69  } {}}.db authori
af40: 7a 65 72 20 7b 7d 0a 63 61 74 63 68 73 71 6c 20  zer {}.catchsql 
af50: 7b 41 4c 54 45 52 20 54 41 42 4c 45 20 74 32 78  {ALTER TABLE t2x
af60: 20 52 45 4e 41 4d 45 20 54 4f 20 74 32 7d 0a 0a   RENAME TO t2}..
af70: 7d 20 3b 23 20 69 66 63 61 70 61 62 6c 65 20 61  } ;# ifcapable a
af80: 6c 74 65 72 74 61 62 6c 65 0a 0a 23 20 54 65 73  ltertable..# Tes
af90: 74 20 74 68 65 20 61 75 74 68 6f 72 69 7a 61 74  t the authorizat
afa0: 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 73 20 66 6f  ion callbacks fo
afb0: 72 20 74 68 65 20 52 45 49 4e 44 45 58 20 63 6f  r the REINDEX co
afc0: 6d 6d 61 6e 64 2e 0a 69 66 63 61 70 61 62 6c 65  mmand..ifcapable
afd0: 20 72 65 69 6e 64 65 78 20 7b 0a 0a 70 72 6f 63   reindex {..proc
afe0: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 73   auth {code args
aff0: 7d 20 7b 0a 20 20 69 66 20 7b 24 63 6f 64 65 3d  } {.  if {$code=
b000: 3d 22 53 51 4c 49 54 45 5f 52 45 49 4e 44 45 58  ="SQLITE_REINDEX
b010: 22 7d 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a 61  "} {.    set ::a
b020: 75 74 68 61 72 67 73 20 5b 63 6f 6e 63 61 74 20  uthargs [concat 
b030: 24 3a 3a 61 75 74 68 61 72 67 73 20 24 61 72 67  $::authargs $arg
b040: 73 5d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  s].  }.  return 
b050: 53 51 4c 49 54 45 5f 4f 4b 0a 7d 0a 64 62 20 61  SQLITE_OK.}.db a
b060: 75 74 68 6f 72 69 7a 65 72 20 61 75 74 68 0a 64  uthorizer auth.d
b070: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 38  o_test auth-1.28
b080: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  1 {.  execsql {.
b090: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
b0a0: 20 74 33 28 61 20 50 52 49 4d 41 52 59 20 4b 45   t3(a PRIMARY KE
b0b0: 59 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20 43 52  Y, b, c);.    CR
b0c0: 45 41 54 45 20 49 4e 44 45 58 20 74 33 5f 69 64  EATE INDEX t3_id
b0d0: 78 31 20 4f 4e 20 74 33 28 63 20 43 4f 4c 4c 41  x1 ON t3(c COLLA
b0e0: 54 45 20 42 49 4e 41 52 59 29 3b 0a 20 20 20 20  TE BINARY);.    
b0f0: 43 52 45 41 54 45 20 49 4e 44 45 58 20 74 33 5f  CREATE INDEX t3_
b100: 69 64 78 32 20 4f 4e 20 74 33 28 62 20 43 4f 4c  idx2 ON t3(b COL
b110: 4c 41 54 45 20 4e 4f 43 41 53 45 29 3b 0a 20 20  LATE NOCASE);.  
b120: 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 61  }.} {}.do_test a
b130: 75 74 68 2d 31 2e 32 38 32 20 7b 0a 20 20 73 65  uth-1.282 {.  se
b140: 74 20 3a 3a 61 75 74 68 61 72 67 73 20 7b 7d 0a  t ::authargs {}.
b150: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
b160: 52 45 49 4e 44 45 58 20 74 33 5f 69 64 78 31 3b  REINDEX t3_idx1;
b170: 0a 20 20 7d 0a 20 20 73 65 74 20 3a 3a 61 75 74  .  }.  set ::aut
b180: 68 61 72 67 73 0a 7d 20 7b 74 33 5f 69 64 78 31  hargs.} {t3_idx1
b190: 20 7b 7d 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f   {} main {}}.do_
b1a0: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 38 33 20  test auth-1.283 
b1b0: 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72  {.  set ::authar
b1c0: 67 73 20 7b 7d 0a 20 20 65 78 65 63 73 71 6c 20  gs {}.  execsql 
b1d0: 7b 0a 20 20 20 20 52 45 49 4e 44 45 58 20 42 49  {.    REINDEX BI
b1e0: 4e 41 52 59 3b 0a 20 20 7d 0a 20 20 73 65 74 20  NARY;.  }.  set 
b1f0: 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 74 33  ::authargs.} {t3
b200: 5f 69 64 78 31 20 7b 7d 20 6d 61 69 6e 20 7b 7d  _idx1 {} main {}
b210: 20 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65   sqlite_autoinde
b220: 78 5f 74 33 5f 31 20 7b 7d 20 6d 61 69 6e 20 7b  x_t3_1 {} main {
b230: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
b240: 31 2e 32 38 34 20 7b 0a 20 20 73 65 74 20 3a 3a  1.284 {.  set ::
b250: 61 75 74 68 61 72 67 73 20 7b 7d 0a 20 20 65 78  authargs {}.  ex
b260: 65 63 73 71 6c 20 7b 0a 20 20 20 20 52 45 49 4e  ecsql {.    REIN
b270: 44 45 58 20 4e 4f 43 41 53 45 3b 0a 20 20 7d 0a  DEX NOCASE;.  }.
b280: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
b290: 0a 7d 20 7b 74 33 5f 69 64 78 32 20 7b 7d 20 6d  .} {t3_idx2 {} m
b2a0: 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20  ain {}}.do_test 
b2b0: 61 75 74 68 2d 31 2e 32 38 35 20 7b 0a 20 20 73  auth-1.285 {.  s
b2c0: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 7b 7d  et ::authargs {}
b2d0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
b2e0: 20 52 45 49 4e 44 45 58 20 74 33 3b 0a 20 20 7d   REINDEX t3;.  }
b2f0: 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67  .  set ::autharg
b300: 73 0a 7d 20 7b 74 33 5f 69 64 78 32 20 7b 7d 20  s.} {t3_idx2 {} 
b310: 6d 61 69 6e 20 7b 7d 20 74 33 5f 69 64 78 31 20  main {} t3_idx1 
b320: 7b 7d 20 6d 61 69 6e 20 7b 7d 20 73 71 6c 69 74  {} main {} sqlit
b330: 65 5f 61 75 74 6f 69 6e 64 65 78 5f 74 33 5f 31  e_autoindex_t3_1
b340: 20 7b 7d 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f   {} main {}}.do_
b350: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 38 36 20  test auth-1.286 
b360: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
b370: 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74 33 3b    DROP TABLE t3;
b380: 0a 20 20 7d 0a 7d 20 7b 7d 0a 69 66 63 61 70 61  .  }.} {}.ifcapa
b390: 62 6c 65 20 74 65 6d 70 64 62 20 7b 0a 20 20 64  ble tempdb {.  d
b3a0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 38  o_test auth-1.28
b3b0: 37 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  7 {.    execsql 
b3c0: 7b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54  {.      CREATE T
b3d0: 45 4d 50 20 54 41 42 4c 45 20 74 33 28 61 20 50  EMP TABLE t3(a P
b3e0: 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 2c 20 63  RIMARY KEY, b, c
b3f0: 29 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20  );.      CREATE 
b400: 49 4e 44 45 58 20 74 33 5f 69 64 78 31 20 4f 4e  INDEX t3_idx1 ON
b410: 20 74 33 28 63 20 43 4f 4c 4c 41 54 45 20 42 49   t3(c COLLATE BI
b420: 4e 41 52 59 29 3b 0a 20 20 20 20 20 20 43 52 45  NARY);.      CRE
b430: 41 54 45 20 49 4e 44 45 58 20 74 33 5f 69 64 78  ATE INDEX t3_idx
b440: 32 20 4f 4e 20 74 33 28 62 20 43 4f 4c 4c 41 54  2 ON t3(b COLLAT
b450: 45 20 4e 4f 43 41 53 45 29 3b 0a 20 20 20 20 7d  E NOCASE);.    }
b460: 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73  .  } {}.  do_tes
b470: 74 20 61 75 74 68 2d 31 2e 32 38 38 20 7b 0a 20  t auth-1.288 {. 
b480: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
b490: 73 20 7b 7d 0a 20 20 20 20 65 78 65 63 73 71 6c  s {}.    execsql
b4a0: 20 7b 0a 20 20 20 20 20 20 52 45 49 4e 44 45 58   {.      REINDEX
b4b0: 20 74 65 6d 70 2e 74 33 5f 69 64 78 31 3b 0a 20   temp.t3_idx1;. 
b4c0: 20 20 20 7d 0a 20 20 20 20 73 65 74 20 3a 3a 61     }.    set ::a
b4d0: 75 74 68 61 72 67 73 0a 20 20 7d 20 7b 74 33 5f  uthargs.  } {t3_
b4e0: 69 64 78 31 20 7b 7d 20 74 65 6d 70 20 7b 7d 7d  idx1 {} temp {}}
b4f0: 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  .  do_test auth-
b500: 31 2e 32 38 39 20 7b 0a 20 20 20 20 73 65 74 20  1.289 {.    set 
b510: 3a 3a 61 75 74 68 61 72 67 73 20 7b 7d 0a 20 20  ::authargs {}.  
b520: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
b530: 20 20 52 45 49 4e 44 45 58 20 42 49 4e 41 52 59    REINDEX BINARY
b540: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 74 20  ;.    }.    set 
b550: 3a 3a 61 75 74 68 61 72 67 73 0a 20 20 7d 20 7b  ::authargs.  } {
b560: 74 33 5f 69 64 78 31 20 7b 7d 20 74 65 6d 70 20  t3_idx1 {} temp 
b570: 7b 7d 20 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e  {} sqlite_autoin
b580: 64 65 78 5f 74 33 5f 31 20 7b 7d 20 74 65 6d 70  dex_t3_1 {} temp
b590: 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61   {}}.  do_test a
b5a0: 75 74 68 2d 31 2e 32 39 30 20 7b 0a 20 20 20 20  uth-1.290 {.    
b5b0: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 7b  set ::authargs {
b5c0: 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  }.    execsql {.
b5d0: 20 20 20 20 20 20 52 45 49 4e 44 45 58 20 4e 4f        REINDEX NO
b5e0: 43 41 53 45 3b 0a 20 20 20 20 7d 0a 20 20 20 20  CASE;.    }.    
b5f0: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 20  set ::authargs. 
b600: 20 7d 20 7b 74 33 5f 69 64 78 32 20 7b 7d 20 74   } {t3_idx2 {} t
b610: 65 6d 70 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73  emp {}}.  do_tes
b620: 74 20 61 75 74 68 2d 31 2e 32 39 31 20 7b 0a 20  t auth-1.291 {. 
b630: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
b640: 73 20 7b 7d 0a 20 20 20 20 65 78 65 63 73 71 6c  s {}.    execsql
b650: 20 7b 0a 20 20 20 20 20 20 52 45 49 4e 44 45 58   {.      REINDEX
b660: 20 74 65 6d 70 2e 74 33 3b 0a 20 20 20 20 7d 0a   temp.t3;.    }.
b670: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
b680: 67 73 0a 20 20 7d 20 7b 74 33 5f 69 64 78 32 20  gs.  } {t3_idx2 
b690: 7b 7d 20 74 65 6d 70 20 7b 7d 20 74 33 5f 69 64  {} temp {} t3_id
b6a0: 78 31 20 7b 7d 20 74 65 6d 70 20 7b 7d 20 73 71  x1 {} temp {} sq
b6b0: 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 74  lite_autoindex_t
b6c0: 33 5f 31 20 7b 7d 20 74 65 6d 70 20 7b 7d 7d 0a  3_1 {} temp {}}.
b6d0: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
b6e0: 65 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 69 66  e args} {.    if
b6f0: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
b700: 5f 52 45 49 4e 44 45 58 22 7d 20 7b 0a 20 20 20  _REINDEX"} {.   
b710: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
b720: 73 20 5b 63 6f 6e 63 61 74 20 24 3a 3a 61 75 74  s [concat $::aut
b730: 68 61 72 67 73 20 24 61 72 67 73 5d 0a 20 20 20  hargs $args].   
b740: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
b750: 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20  _DENY.    }.    
b760: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
b770: 0a 20 20 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61  .  }.  do_test a
b780: 75 74 68 2d 31 2e 32 39 32 20 7b 0a 20 20 20 20  uth-1.292 {.    
b790: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 7b  set ::authargs {
b7a0: 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b  }.    catchsql {
b7b0: 0a 20 20 20 20 20 20 52 45 49 4e 44 45 58 20 74  .      REINDEX t
b7c0: 65 6d 70 2e 74 33 3b 0a 20 20 20 20 7d 0a 20 20  emp.t3;.    }.  
b7d0: 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72  } {1 {not author
b7e0: 69 7a 65 64 7d 7d 0a 20 20 64 6f 5f 74 65 73 74  ized}}.  do_test
b7f0: 20 61 75 74 68 2d 31 2e 32 39 33 20 7b 0a 20 20   auth-1.293 {.  
b800: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
b810: 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74 33 3b    DROP TABLE t3;
b820: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 7d 0a  .    }.  } {}.}.
b830: 0a 7d 20 3b 23 20 69 66 63 61 70 61 62 6c 65 20  .} ;# ifcapable 
b840: 72 65 69 6e 64 65 78 20 0a 0a 69 66 63 61 70 61  reindex ..ifcapa
b850: 62 6c 65 20 61 6e 61 6c 79 7a 65 20 7b 0a 20 20  ble analyze {.  
b860: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
b870: 61 72 67 73 7d 20 7b 0a 20 20 20 20 69 66 20 7b  args} {.    if {
b880: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 41  $code=="SQLITE_A
b890: 4e 41 4c 59 5a 45 22 7d 20 7b 0a 20 20 20 20 20  NALYZE"} {.     
b8a0: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
b8b0: 5b 63 6f 6e 63 61 74 20 24 3a 3a 61 75 74 68 61  [concat $::autha
b8c0: 72 67 73 20 24 61 72 67 73 5d 0a 20 20 20 20 7d  rgs $args].    }
b8d0: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
b8e0: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 64 6f 5f 74  TE_OK.  }.  do_t
b8f0: 65 73 74 20 61 75 74 68 2d 31 2e 32 39 34 20 7b  est auth-1.294 {
b900: 0a 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61  .    set ::autha
b910: 72 67 73 20 7b 7d 0a 20 20 20 20 65 78 65 63 73  rgs {}.    execs
b920: 71 6c 20 7b 0a 20 20 20 20 20 20 43 52 45 41 54  ql {.      CREAT
b930: 45 20 54 41 42 4c 45 20 74 34 28 61 2c 62 2c 63  E TABLE t4(a,b,c
b940: 29 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20  );.      CREATE 
b950: 49 4e 44 45 58 20 74 34 69 31 20 4f 4e 20 74 34  INDEX t4i1 ON t4
b960: 28 61 29 3b 0a 20 20 20 20 20 20 43 52 45 41 54  (a);.      CREAT
b970: 45 20 49 4e 44 45 58 20 74 34 69 32 20 4f 4e 20  E INDEX t4i2 ON 
b980: 74 34 28 62 2c 61 2c 63 29 3b 0a 20 20 20 20 20  t4(b,a,c);.     
b990: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20   INSERT INTO t4 
b9a0: 56 41 4c 55 45 53 28 31 2c 32 2c 33 29 3b 0a 20  VALUES(1,2,3);. 
b9b0: 20 20 20 20 20 41 4e 41 4c 59 5a 45 3b 0a 20 20       ANALYZE;.  
b9c0: 20 20 7d 0a 20 20 20 20 73 65 74 20 3a 3a 61 75    }.    set ::au
b9d0: 74 68 61 72 67 73 0a 20 20 7d 20 7b 74 34 20 7b  thargs.  } {t4 {
b9e0: 7d 20 6d 61 69 6e 20 7b 7d 7d 0a 20 20 64 6f 5f  } main {}}.  do_
b9f0: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 39 35 20  test auth-1.295 
ba00: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
ba10: 20 20 20 20 20 20 53 45 4c 45 43 54 20 63 6f 75        SELECT cou
ba20: 6e 74 28 2a 29 20 46 52 4f 4d 20 73 71 6c 69 74  nt(*) FROM sqlit
ba30: 65 5f 73 74 61 74 31 3b 0a 20 20 20 20 7d 0a 20  e_stat1;.    }. 
ba40: 20 7d 20 32 0a 20 20 70 72 6f 63 20 61 75 74 68   } 2.  proc auth
ba50: 20 7b 63 6f 64 65 20 61 72 67 73 7d 20 7b 0a 20   {code args} {. 
ba60: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
ba70: 51 4c 49 54 45 5f 41 4e 41 4c 59 5a 45 22 7d 20  QLITE_ANALYZE"} 
ba80: 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75  {.      set ::au
ba90: 74 68 61 72 67 73 20 5b 63 6f 6e 63 61 74 20 24  thargs [concat $
baa0: 3a 3a 61 75 74 68 61 72 67 73 20 24 61 72 67 73  ::authargs $args
bab0: 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  ].      return S
bac0: 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d  QLITE_DENY.    }
bad0: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
bae0: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 64 6f 5f 74  TE_OK.  }.  do_t
baf0: 65 73 74 20 61 75 74 68 2d 31 2e 32 39 36 20 7b  est auth-1.296 {
bb00: 0a 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61  .    set ::autha
bb10: 72 67 73 20 7b 7d 0a 20 20 20 20 63 61 74 63 68  rgs {}.    catch
bb20: 73 71 6c 20 7b 0a 20 20 20 20 20 20 41 4e 41 4c  sql {.      ANAL
bb30: 59 5a 45 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  YZE;.    }.  } {
bb40: 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65  1 {not authorize
bb50: 64 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75  d}}.  do_test au
bb60: 74 68 2d 31 2e 32 39 37 20 7b 0a 20 20 20 20 65  th-1.297 {.    e
bb70: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 53  xecsql {.      S
bb80: 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46  ELECT count(*) F
bb90: 52 4f 4d 20 73 71 6c 69 74 65 5f 73 74 61 74 31  ROM sqlite_stat1
bba0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 32 0a 7d 20  ;.    }.  } 2.} 
bbb0: 3b 23 20 69 66 63 61 70 61 62 6c 65 20 61 6e 61  ;# ifcapable ana
bbc0: 6c 79 7a 65 0a 0a 64 6f 5f 74 65 73 74 20 61 75  lyze..do_test au
bbd0: 74 68 2d 32 2e 31 20 7b 0a 20 20 70 72 6f 63 20  th-2.1 {.  proc 
bbe0: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
bbf0: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
bc00: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
bc10: 3d 22 53 51 4c 49 54 45 5f 52 45 41 44 22 20 26  ="SQLITE_READ" &
bc20: 26 20 24 61 72 67 31 3d 3d 22 74 33 22 20 26 26  & $arg1=="t3" &&
bc30: 20 24 61 72 67 32 3d 3d 22 78 22 7d 20 7b 0a 20   $arg2=="x"} {. 
bc40: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
bc50: 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20  TE_DENY.    }.  
bc60: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
bc70: 4f 4b 0a 20 20 7d 0a 20 20 64 62 20 61 75 74 68  OK.  }.  db auth
bc80: 6f 72 69 7a 65 72 20 3a 3a 61 75 74 68 0a 20 20  orizer ::auth.  
bc90: 65 78 65 63 73 71 6c 20 7b 43 52 45 41 54 45 20  execsql {CREATE 
bca0: 54 41 42 4c 45 20 74 33 28 78 20 49 4e 54 45 47  TABLE t3(x INTEG
bcb0: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20  ER PRIMARY KEY, 
bcc0: 79 2c 20 7a 29 7d 0a 20 20 63 61 74 63 68 73 71  y, z)}.  catchsq
bcd0: 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  l {SELECT * FROM
bce0: 20 74 33 7d 0a 7d 20 7b 31 20 7b 61 63 63 65 73   t3}.} {1 {acces
bcf0: 73 20 74 6f 20 74 33 2e 78 20 69 73 20 70 72 6f  s to t3.x is pro
bd00: 68 69 62 69 74 65 64 7d 7d 0a 64 6f 5f 74 65 73  hibited}}.do_tes
bd10: 74 20 61 75 74 68 2d 32 2e 31 20 7b 0a 20 20 63  t auth-2.1 {.  c
bd20: 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20  atchsql {SELECT 
bd30: 79 2c 7a 20 46 52 4f 4d 20 74 33 7d 0a 7d 20 7b  y,z FROM t3}.} {
bd40: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  0 {}}.do_test au
bd50: 74 68 2d 32 2e 32 20 7b 0a 20 20 63 61 74 63 68  th-2.2 {.  catch
bd60: 73 71 6c 20 7b 53 45 4c 45 43 54 20 52 4f 57 49  sql {SELECT ROWI
bd70: 44 2c 79 2c 7a 20 46 52 4f 4d 20 74 33 7d 0a 7d  D,y,z FROM t3}.}
bd80: 20 7b 31 20 7b 61 63 63 65 73 73 20 74 6f 20 74   {1 {access to t
bd90: 33 2e 78 20 69 73 20 70 72 6f 68 69 62 69 74 65  3.x is prohibite
bda0: 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  d}}.do_test auth
bdb0: 2d 32 2e 33 20 7b 0a 20 20 63 61 74 63 68 73 71  -2.3 {.  catchsq
bdc0: 6c 20 7b 53 45 4c 45 43 54 20 4f 49 44 2c 79 2c  l {SELECT OID,y,
bdd0: 7a 20 46 52 4f 4d 20 74 33 7d 0a 7d 20 7b 31 20  z FROM t3}.} {1 
bde0: 7b 61 63 63 65 73 73 20 74 6f 20 74 33 2e 78 20  {access to t3.x 
bdf0: 69 73 20 70 72 6f 68 69 62 69 74 65 64 7d 7d 0a  is prohibited}}.
be00: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 32 2e 34  do_test auth-2.4
be10: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
be20: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
be30: 72 67 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20  rg3 arg4} {.    
be40: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
be50: 54 45 5f 52 45 41 44 22 20 26 26 20 24 61 72 67  TE_READ" && $arg
be60: 31 3d 3d 22 74 33 22 20 26 26 20 24 61 72 67 32  1=="t3" && $arg2
be70: 3d 3d 22 78 22 7d 20 7b 0a 20 20 20 20 20 20 72  =="x"} {.      r
be80: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e  eturn SQLITE_IGN
be90: 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  ORE.    }.    re
bea0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
beb0: 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 49 4e   }.  execsql {IN
bec0: 53 45 52 54 20 49 4e 54 4f 20 74 33 20 56 41 4c  SERT INTO t3 VAL
bed0: 55 45 53 28 34 34 2c 35 35 2c 36 36 29 7d 0a 20  UES(44,55,66)}. 
bee0: 20 63 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43   catchsql {SELEC
bef0: 54 20 2a 20 46 52 4f 4d 20 74 33 7d 0a 7d 20 7b  T * FROM t3}.} {
bf00: 30 20 7b 7b 7d 20 35 35 20 36 36 7d 7d 0a 64 6f  0 {{} 55 66}}.do
bf10: 5f 74 65 73 74 20 61 75 74 68 2d 32 2e 35 20 7b  _test auth-2.5 {
bf20: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 53 45 4c  .  catchsql {SEL
bf30: 45 43 54 20 72 6f 77 69 64 2c 79 2c 7a 20 46 52  ECT rowid,y,z FR
bf40: 4f 4d 20 74 33 7d 0a 7d 20 7b 30 20 7b 7b 7d 20  OM t3}.} {0 {{} 
bf50: 35 35 20 36 36 7d 7d 0a 64 6f 5f 74 65 73 74 20  55 66}}.do_test 
bf60: 61 75 74 68 2d 32 2e 36 20 7b 0a 20 20 70 72 6f  auth-2.6 {.  pro
bf70: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
bf80: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
bf90: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
bfa0: 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45 41 44 22  e=="SQLITE_READ"
bfb0: 20 26 26 20 24 61 72 67 31 3d 3d 22 74 33 22 20   && $arg1=="t3" 
bfc0: 26 26 20 24 61 72 67 32 3d 3d 22 52 4f 57 49 44  && $arg2=="ROWID
bfd0: 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72  "} {.      retur
bfe0: 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a  n SQLITE_IGNORE.
bff0: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
c000: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
c010: 20 63 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43   catchsql {SELEC
c020: 54 20 2a 20 46 52 4f 4d 20 74 33 7d 0a 7d 20 7b  T * FROM t3}.} {
c030: 30 20 7b 34 34 20 35 35 20 36 36 7d 7d 0a 64 6f  0 {44 55 66}}.do
c040: 5f 74 65 73 74 20 61 75 74 68 2d 32 2e 37 20 7b  _test auth-2.7 {
c050: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 53 45 4c  .  catchsql {SEL
c060: 45 43 54 20 52 4f 57 49 44 2c 79 2c 7a 20 46 52  ECT ROWID,y,z FR
c070: 4f 4d 20 74 33 7d 0a 7d 20 7b 30 20 7b 34 34 20  OM t3}.} {0 {44 
c080: 35 35 20 36 36 7d 7d 0a 64 6f 5f 74 65 73 74 20  55 66}}.do_test 
c090: 61 75 74 68 2d 32 2e 38 20 7b 0a 20 20 70 72 6f  auth-2.8 {.  pro
c0a0: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
c0b0: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
c0c0: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
c0d0: 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45 41 44 22  e=="SQLITE_READ"
c0e0: 20 26 26 20 24 61 72 67 31 3d 3d 22 74 32 22 20   && $arg1=="t2" 
c0f0: 26 26 20 24 61 72 67 32 3d 3d 22 52 4f 57 49 44  && $arg2=="ROWID
c100: 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72  "} {.      retur
c110: 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a  n SQLITE_IGNORE.
c120: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
c130: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
c140: 20 63 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43   catchsql {SELEC
c150: 54 20 52 4f 57 49 44 2c 62 2c 63 20 46 52 4f 4d  T ROWID,b,c FROM
c160: 20 74 32 7d 0a 7d 20 7b 30 20 7b 7b 7d 20 32 20   t2}.} {0 {{} 2 
c170: 33 33 20 7b 7d 20 38 20 39 7d 7d 0a 64 6f 5f 74  33 {} 8 9}}.do_t
c180: 65 73 74 20 61 75 74 68 2d 32 2e 39 2e 31 20 7b  est auth-2.9.1 {
c190: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
c1a0: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
c1b0: 33 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 69 66  3 arg4} {.    if
c1c0: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
c1d0: 5f 52 45 41 44 22 20 26 26 20 24 61 72 67 31 3d  _READ" && $arg1=
c1e0: 3d 22 74 32 22 20 26 26 20 24 61 72 67 32 3d 3d  ="t2" && $arg2==
c1f0: 22 52 4f 57 49 44 22 7d 20 7b 0a 20 20 20 20 20  "ROWID"} {.     
c200: 20 72 65 74 75 72 6e 20 62 6f 67 75 73 0a 20 20   return bogus.  
c210: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
c220: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
c230: 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20  atchsql {SELECT 
c240: 52 4f 57 49 44 2c 62 2c 63 20 46 52 4f 4d 20 74  ROWID,b,c FROM t
c250: 32 7d 0a 7d 20 7b 31 20 7b 69 6c 6c 65 67 61 6c  2}.} {1 {illegal
c260: 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20 28 39   return value (9
c270: 39 39 29 20 66 72 6f 6d 20 74 68 65 20 61 75 74  99) from the aut
c280: 68 6f 72 69 7a 61 74 69 6f 6e 20 66 75 6e 63 74  horization funct
c290: 69 6f 6e 20 2d 20 73 68 6f 75 6c 64 20 62 65 20  ion - should be 
c2a0: 53 51 4c 49 54 45 5f 4f 4b 2c 20 53 51 4c 49 54  SQLITE_OK, SQLIT
c2b0: 45 5f 49 47 4e 4f 52 45 2c 20 6f 72 20 53 51 4c  E_IGNORE, or SQL
c2c0: 49 54 45 5f 44 45 4e 59 7d 7d 0a 64 6f 5f 74 65  ITE_DENY}}.do_te
c2d0: 73 74 20 61 75 74 68 2d 32 2e 39 2e 32 20 7b 0a  st auth-2.9.2 {.
c2e0: 20 20 64 62 20 65 72 72 6f 72 63 6f 64 65 0a 7d    db errorcode.}
c2f0: 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {1}.do_test aut
c300: 68 2d 32 2e 31 30 20 7b 0a 20 20 70 72 6f 63 20  h-2.10 {.  proc 
c310: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
c320: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
c330: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
c340: 3d 22 53 51 4c 49 54 45 5f 53 45 4c 45 43 54 22  ="SQLITE_SELECT"
c350: 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  } {.      return
c360: 20 62 6f 67 75 73 0a 20 20 20 20 7d 0a 20 20 20   bogus.    }.   
c370: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
c380: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
c390: 20 7b 53 45 4c 45 43 54 20 52 4f 57 49 44 2c 62   {SELECT ROWID,b
c3a0: 2c 63 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31  ,c FROM t2}.} {1
c3b0: 20 7b 69 6c 6c 65 67 61 6c 20 72 65 74 75 72 6e   {illegal return
c3c0: 20 76 61 6c 75 65 20 28 31 29 20 66 72 6f 6d 20   value (1) from 
c3d0: 74 68 65 20 61 75 74 68 6f 72 69 7a 61 74 69 6f  the authorizatio
c3e0: 6e 20 66 75 6e 63 74 69 6f 6e 20 2d 20 73 68 6f  n function - sho
c3f0: 75 6c 64 20 62 65 20 53 51 4c 49 54 45 5f 4f 4b  uld be SQLITE_OK
c400: 2c 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 2c  , SQLITE_IGNORE,
c410: 20 6f 72 20 53 51 4c 49 54 45 5f 44 45 4e 59 7d   or SQLITE_DENY}
c420: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 32  }.do_test auth-2
c430: 2e 31 31 2e 31 20 7b 0a 20 20 70 72 6f 63 20 61  .11.1 {.  proc a
c440: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
c450: 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b  rg2 arg3 arg4} {
c460: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
c470: 22 53 51 4c 49 54 45 5f 52 45 41 44 22 20 26 26  "SQLITE_READ" &&
c480: 20 24 61 72 67 32 3d 3d 22 61 22 7d 20 7b 0a 20   $arg2=="a"} {. 
c490: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
c4a0: 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a  TE_IGNORE.    }.
c4b0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
c4c0: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
c4d0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52  sql {SELECT * FR
c4e0: 4f 4d 20 74 32 2c 20 74 33 7d 0a 7d 20 7b 30 20  OM t2, t3}.} {0 
c4f0: 7b 7b 7d 20 32 20 33 33 20 34 34 20 35 35 20 36  {{} 2 33 44 55 6
c500: 36 20 7b 7d 20 38 20 39 20 34 34 20 35 35 20 36  6 {} 8 9 44 55 6
c510: 36 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  6}}.do_test auth
c520: 2d 32 2e 31 31 2e 32 20 7b 0a 20 20 70 72 6f 63  -2.11.2 {.  proc
c530: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
c540: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d   arg2 arg3 arg4}
c550: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
c560: 3d 3d 22 53 51 4c 49 54 45 5f 52 45 41 44 22 20  =="SQLITE_READ" 
c570: 26 26 20 24 61 72 67 32 3d 3d 22 78 22 7d 20 7b  && $arg2=="x"} {
c580: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
c590: 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20  LITE_IGNORE.    
c5a0: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
c5b0: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
c5c0: 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20  chsql {SELECT * 
c5d0: 46 52 4f 4d 20 74 32 2c 20 74 33 7d 0a 7d 20 7b  FROM t2, t3}.} {
c5e0: 30 20 7b 31 31 20 32 20 33 33 20 7b 7d 20 35 35  0 {11 2 33 {} 55
c5f0: 20 36 36 20 37 20 38 20 39 20 7b 7d 20 35 35 20   66 7 8 9 {} 55 
c600: 36 36 7d 7d 0a 0a 23 20 4d 61 6b 65 20 73 75 72  66}}..# Make sur
c610: 65 20 74 68 65 20 4f 4c 44 20 61 6e 64 20 4e 45  e the OLD and NE
c620: 57 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 73 20  W pseudo-tables 
c630: 6f 66 20 61 20 74 72 69 67 67 65 72 20 67 65 74  of a trigger get
c640: 20 61 75 74 68 6f 72 69 7a 65 64 2e 0a 23 0a 69   authorized..#.i
c650: 66 63 61 70 61 62 6c 65 20 74 72 69 67 67 65 72  fcapable trigger
c660: 20 7b 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d   {.do_test auth-
c670: 33 2e 31 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  3.1 {.  proc aut
c680: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
c690: 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a 20  2 arg3 arg4} {. 
c6a0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
c6b0: 5f 4f 4b 0a 20 20 7d 0a 20 20 65 78 65 63 73 71  _OK.  }.  execsq
c6c0: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
c6d0: 41 42 4c 45 20 74 78 28 61 31 2c 61 32 2c 62 31  ABLE tx(a1,a2,b1
c6e0: 2c 62 32 2c 63 31 2c 63 32 29 3b 0a 20 20 20 20  ,b2,c1,c2);.    
c6f0: 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 72  CREATE TRIGGER r
c700: 31 20 41 46 54 45 52 20 55 50 44 41 54 45 20 4f  1 AFTER UPDATE O
c710: 4e 20 74 32 20 46 4f 52 20 45 41 43 48 20 52 4f  N t2 FOR EACH RO
c720: 57 20 42 45 47 49 4e 0a 20 20 20 20 20 20 49 4e  W BEGIN.      IN
c730: 53 45 52 54 20 49 4e 54 4f 20 74 78 20 56 41 4c  SERT INTO tx VAL
c740: 55 45 53 28 4f 4c 44 2e 61 2c 4e 45 57 2e 61 2c  UES(OLD.a,NEW.a,
c750: 4f 4c 44 2e 62 2c 4e 45 57 2e 62 2c 4f 4c 44 2e  OLD.b,NEW.b,OLD.
c760: 63 2c 4e 45 57 2e 63 29 3b 0a 20 20 20 20 45 4e  c,NEW.c);.    EN
c770: 44 3b 0a 20 20 20 20 55 50 44 41 54 45 20 74 32  D;.    UPDATE t2
c780: 20 53 45 54 20 61 3d 61 2b 31 3b 0a 20 20 20 20   SET a=a+1;.    
c790: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 78  SELECT * FROM tx
c7a0: 3b 0a 20 20 7d 0a 7d 20 7b 31 31 20 31 32 20 32  ;.  }.} {11 12 2
c7b0: 20 32 20 33 33 20 33 33 20 37 20 38 20 38 20 38   2 33 33 7 8 8 8
c7c0: 20 39 20 39 7d 0a 64 6f 5f 74 65 73 74 20 61 75   9 9}.do_test au
c7d0: 74 68 2d 33 2e 32 20 7b 0a 20 20 70 72 6f 63 20  th-3.2 {.  proc 
c7e0: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
c7f0: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 7d 20  arg2 arg3 arg4} 
c800: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
c810: 3d 22 53 51 4c 49 54 45 5f 52 45 41 44 22 20 26  ="SQLITE_READ" &
c820: 26 20 24 61 72 67 31 3d 3d 22 74 32 22 20 26 26  & $arg1=="t2" &&
c830: 20 24 61 72 67 32 3d 3d 22 63 22 7d 20 7b 0a 20   $arg2=="c"} {. 
c840: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
c850: 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a  TE_IGNORE.    }.
c860: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
c870: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 65 78 65 63 73  E_OK.  }.  execs
c880: 71 6c 20 7b 0a 20 20 20 20 44 45 4c 45 54 45 20  ql {.    DELETE 
c890: 46 52 4f 4d 20 74 78 3b 0a 20 20 20 20 55 50 44  FROM tx;.    UPD
c8a0: 41 54 45 20 74 32 20 53 45 54 20 61 3d 61 2b 31  ATE t2 SET a=a+1
c8b0: 30 30 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  00;.    SELECT *
c8c0: 20 46 52 4f 4d 20 74 78 3b 0a 20 20 7d 0a 7d 20   FROM tx;.  }.} 
c8d0: 7b 31 32 20 31 31 32 20 32 20 32 20 7b 7d 20 7b  {12 112 2 2 {} {
c8e0: 7d 20 38 20 31 30 38 20 38 20 38 20 7b 7d 20 7b  } 8 108 8 8 {} {
c8f0: 7d 7d 0a 7d 20 3b 23 20 69 66 63 61 70 61 62 6c  }}.} ;# ifcapabl
c900: 65 20 74 72 69 67 67 65 72 0a 0a 23 20 4d 61 6b  e trigger..# Mak
c910: 65 20 73 75 72 65 20 74 68 65 20 6e 61 6d 65 73  e sure the names
c920: 20 6f 66 20 76 69 65 77 73 20 61 6e 64 20 74 72   of views and tr
c930: 69 67 67 65 72 73 20 61 72 65 20 70 61 73 73 65  iggers are passe
c940: 64 20 6f 6e 20 6f 6e 20 61 72 67 34 2e 0a 23 0a  d on on arg4..#.
c950: 69 66 63 61 70 61 62 6c 65 20 74 72 69 67 67 65  ifcapable trigge
c960: 72 20 7b 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  r {.do_test auth
c970: 2d 34 2e 31 20 7b 0a 20 20 70 72 6f 63 20 61 75  -4.1 {.  proc au
c980: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
c990: 67 32 20 61 72 67 33 20 61 72 67 34 7d 20 7b 0a  g2 arg3 arg4} {.
c9a0: 20 20 20 20 6c 61 70 70 65 6e 64 20 3a 3a 61 75      lappend ::au
c9b0: 74 68 61 72 67 73 20 24 63 6f 64 65 20 24 61 72  thargs $code $ar
c9c0: 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24  g1 $arg2 $arg3 $
c9d0: 61 72 67 34 0a 20 20 20 20 72 65 74 75 72 6e 20  arg4.    return 
c9e0: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
c9f0: 73 65 74 20 61 75 74 68 61 72 67 73 20 7b 7d 0a  set authargs {}.
ca00: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
ca10: 55 50 44 41 54 45 20 74 32 20 53 45 54 20 61 3d  UPDATE t2 SET a=
ca20: 61 2b 31 3b 0a 20 20 7d 0a 20 20 73 65 74 20 61  a+1;.  }.  set a
ca30: 75 74 68 61 72 67 73 0a 7d 20 5b 6c 69 73 74 20  uthargs.} [list 
ca40: 5c 0a 20 20 53 51 4c 49 54 45 5f 52 45 41 44 20  \.  SQLITE_READ 
ca50: 20 20 74 32 20 61 20 20 6d 61 69 6e 20 7b 7d 20    t2 a  main {} 
ca60: 5c 0a 20 20 53 51 4c 49 54 45 5f 55 50 44 41 54  \.  SQLITE_UPDAT
ca70: 45 20 74 32 20 61 20 20 6d 61 69 6e 20 7b 7d 20  E t2 a  main {} 
ca80: 5c 0a 20 20 53 51 4c 49 54 45 5f 49 4e 53 45 52  \.  SQLITE_INSER
ca90: 54 20 74 78 20 7b 7d 20 6d 61 69 6e 20 72 31 20  T tx {} main r1 
caa0: 5c 0a 20 20 53 51 4c 49 54 45 5f 52 45 41 44 20  \.  SQLITE_READ 
cab0: 20 20 74 32 20 61 20 20 6d 61 69 6e 20 72 31 20    t2 a  main r1 
cac0: 5c 0a 20 20 53 51 4c 49 54 45 5f 52 45 41 44 20  \.  SQLITE_READ 
cad0: 20 20 74 32 20 61 20 20 6d 61 69 6e 20 72 31 20    t2 a  main r1 
cae0: 5c 0a 20 20 53 51 4c 49 54 45 5f 52 45 41 44 20  \.  SQLITE_READ 
caf0: 20 20 74 32 20 62 20 20 6d 61 69 6e 20 72 31 20    t2 b  main r1 
cb00: 5c 0a 20 20 53 51 4c 49 54 45 5f 52 45 41 44 20  \.  SQLITE_READ 
cb10: 20 20 74 32 20 62 20 20 6d 61 69 6e 20 72 31 20    t2 b  main r1 
cb20: 5c 0a 20 20 53 51 4c 49 54 45 5f 52 45 41 44 20  \.  SQLITE_READ 
cb30: 20 20 74 32 20 63 20 20 6d 61 69 6e 20 72 31 20    t2 c  main r1 
cb40: 5c 0a 20 20 53 51 4c 49 54 45 5f 52 45 41 44 20  \.  SQLITE_READ 
cb50: 20 20 74 32 20 63 20 20 6d 61 69 6e 20 72 31 5d    t2 c  main r1]
cb60: 0a 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20 7b 76  .}..ifcapable {v
cb70: 69 65 77 20 26 26 20 74 72 69 67 67 65 72 7d 20  iew && trigger} 
cb80: 7b 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 34  {.do_test auth-4
cb90: 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .2 {.  execsql {
cba0: 0a 20 20 20 20 43 52 45 41 54 45 20 56 49 45 57  .    CREATE VIEW
cbb0: 20 76 31 20 41 53 20 53 45 4c 45 43 54 20 61 2b   v1 AS SELECT a+
cbc0: 62 20 41 53 20 78 20 46 52 4f 4d 20 74 32 3b 0a  b AS x FROM t2;.
cbd0: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
cbe0: 20 76 31 63 68 6e 67 28 78 31 2c 78 32 29 3b 0a   v1chng(x1,x2);.
cbf0: 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47      CREATE TRIGG
cc00: 45 52 20 72 32 20 49 4e 53 54 45 41 44 20 4f 46  ER r2 INSTEAD OF
cc10: 20 55 50 44 41 54 45 20 4f 4e 20 76 31 20 42 45   UPDATE ON v1 BE
cc20: 47 49 4e 0a 20 20 20 20 20 20 49 4e 53 45 52 54  GIN.      INSERT
cc30: 20 49 4e 54 4f 20 76 31 63 68 6e 67 20 56 41 4c   INTO v1chng VAL
cc40: 55 45 53 28 4f 4c 44 2e 78 2c 4e 45 57 2e 78 29  UES(OLD.x,NEW.x)
cc50: 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 20 20 53  ;.    END;.    S
cc60: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 76 31 3b  ELECT * FROM v1;
cc70: 0a 20 20 7d 0a 7d 20 7b 31 31 35 20 31 31 37 7d  .  }.} {115 117}
cc80: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 34 2e  .do_test auth-4.
cc90: 33 20 7b 0a 20 20 73 65 74 20 61 75 74 68 61 72  3 {.  set authar
cca0: 67 73 20 7b 7d 0a 20 20 65 78 65 63 73 71 6c 20  gs {}.  execsql 
ccb0: 7b 0a 20 20 20 20 55 50 44 41 54 45 20 76 31 20  {.    UPDATE v1 
ccc0: 53 45 54 20 78 3d 31 20 57 48 45 52 45 20 78 3d  SET x=1 WHERE x=
ccd0: 31 31 37 0a 20 20 7d 0a 20 20 73 65 74 20 61 75  117.  }.  set au
cce0: 74 68 61 72 67 73 0a 7d 20 5b 6c 69 73 74 20 5c  thargs.} [list \
ccf0: 0a 20 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45  .  SQLITE_UPDATE
cd00: 20 76 31 20 20 20 20 20 78 20 20 6d 61 69 6e 20   v1     x  main 
cd10: 7b 7d 20 5c 0a 20 20 53 51 4c 49 54 45 5f 52 45  {} \.  SQLITE_RE
cd20: 41 44 20 20 20 76 31 20 20 20 20 20 78 20 20 6d  AD   v1     x  m
cd30: 61 69 6e 20 7b 7d 20 5c 0a 20 20 53 51 4c 49 54  ain {} \.  SQLIT
cd40: 45 5f 53 45 4c 45 43 54 20 7b 7d 20 20 20 20 20  E_SELECT {}     
cd50: 7b 7d 20 7b 7d 20 20 20 76 31 20 5c 0a 20 20 53  {} {}   v1 \.  S
cd60: 51 4c 49 54 45 5f 52 45 41 44 20 20 20 74 32 20  QLITE_READ   t2 
cd70: 20 20 20 20 61 20 20 6d 61 69 6e 20 76 31 20 5c      a  main v1 \
cd80: 0a 20 20 53 51 4c 49 54 45 5f 52 45 41 44 20 20  .  SQLITE_READ  
cd90: 20 74 32 20 20 20 20 20 62 20 20 6d 61 69 6e 20   t2     b  main 
cda0: 76 31 20 5c 0a 20 20 53 51 4c 49 54 45 5f 49 4e  v1 \.  SQLITE_IN
cdb0: 53 45 52 54 20 76 31 63 68 6e 67 20 7b 7d 20 6d  SERT v1chng {} m
cdc0: 61 69 6e 20 72 32 20 5c 0a 20 20 53 51 4c 49 54  ain r2 \.  SQLIT
cdd0: 45 5f 52 45 41 44 20 20 20 76 31 20 20 20 20 20  E_READ   v1     
cde0: 78 20 20 6d 61 69 6e 20 72 32 20 5c 0a 20 20 53  x  main r2 \.  S
cdf0: 51 4c 49 54 45 5f 52 45 41 44 20 20 20 76 31 20  QLITE_READ   v1 
ce00: 20 20 20 20 78 20 20 6d 61 69 6e 20 72 32 5d 0a      x  main r2].
ce10: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 34 2e 34  do_test auth-4.4
ce20: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
ce30: 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45     CREATE TRIGGE
ce40: 52 20 72 33 20 49 4e 53 54 45 41 44 20 4f 46 20  R r3 INSTEAD OF 
ce50: 44 45 4c 45 54 45 20 4f 4e 20 76 31 20 42 45 47  DELETE ON v1 BEG
ce60: 49 4e 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20  IN.      INSERT 
ce70: 49 4e 54 4f 20 76 31 63 68 6e 67 20 56 41 4c 55  INTO v1chng VALU
ce80: 45 53 28 4f 4c 44 2e 78 2c 4e 55 4c 4c 29 3b 0a  ES(OLD.x,NULL);.
ce90: 20 20 20 20 45 4e 44 3b 0a 20 20 20 20 53 45 4c      END;.    SEL
cea0: 45 43 54 20 2a 20 46 52 4f 4d 20 76 31 3b 0a 20  ECT * FROM v1;. 
ceb0: 20 7d 0a 7d 20 7b 31 31 35 20 31 31 37 7d 0a 64   }.} {115 117}.d
cec0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 34 2e 35 20  o_test auth-4.5 
ced0: 7b 0a 20 20 73 65 74 20 61 75 74 68 61 72 67 73  {.  set authargs
cee0: 20 7b 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a   {}.  execsql {.
cef0: 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20      DELETE FROM 
cf00: 76 31 20 57 48 45 52 45 20 78 3d 31 31 37 0a 20  v1 WHERE x=117. 
cf10: 20 7d 0a 20 20 73 65 74 20 61 75 74 68 61 72 67   }.  set autharg
cf20: 73 0a 7d 20 5b 6c 69 73 74 20 5c 0a 20 20 53 51  s.} [list \.  SQ
cf30: 4c 49 54 45 5f 44 45 4c 45 54 45 20 76 31 20 20  LITE_DELETE v1  
cf40: 20 20 20 7b 7d 20 6d 61 69 6e 20 7b 7d 20 5c 0a     {} main {} \.
cf50: 20 20 53 51 4c 49 54 45 5f 52 45 41 44 20 20 20    SQLITE_READ   
cf60: 76 31 20 20 20 20 20 78 20 20 6d 61 69 6e 20 7b  v1     x  main {
cf70: 7d 20 5c 0a 20 20 53 51 4c 49 54 45 5f 53 45 4c  } \.  SQLITE_SEL
cf80: 45 43 54 20 7b 7d 20 20 20 20 20 7b 7d 20 7b 7d  ECT {}     {} {}
cf90: 20 20 20 76 31 20 5c 0a 20 20 53 51 4c 49 54 45     v1 \.  SQLITE
cfa0: 5f 52 45 41 44 20 20 20 74 32 20 20 20 20 20 61  _READ   t2     a
cfb0: 20 20 6d 61 69 6e 20 76 31 20 5c 0a 20 20 53 51    main v1 \.  SQ
cfc0: 4c 49 54 45 5f 52 45 41 44 20 20 20 74 32 20 20  LITE_READ   t2  
cfd0: 20 20 20 62 20 20 6d 61 69 6e 20 76 31 20 5c 0a     b  main v1 \.
cfe0: 20 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 20    SQLITE_INSERT 
cff0: 76 31 63 68 6e 67 20 7b 7d 20 6d 61 69 6e 20 72  v1chng {} main r
d000: 33 20 5c 0a 20 20 53 51 4c 49 54 45 5f 52 45 41  3 \.  SQLITE_REA
d010: 44 20 20 20 76 31 20 20 20 20 20 78 20 20 6d 61  D   v1     x  ma
d020: 69 6e 20 72 33 5d 0a 0a 7d 20 3b 23 20 69 66 63  in r3]..} ;# ifc
d030: 61 70 61 62 6c 65 20 76 69 65 77 20 26 26 20 74  apable view && t
d040: 72 69 67 67 65 72 0a 0a 23 20 54 69 63 6b 65 74  rigger..# Ticket
d050: 20 23 31 33 33 38 3a 20 20 4d 61 6b 65 20 73 75   #1338:  Make su
d060: 72 65 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f  re authenticatio
d070: 6e 20 77 6f 72 6b 73 20 69 6e 20 74 68 65 20 70  n works in the p
d080: 72 65 73 65 6e 63 65 20 6f 66 20 61 6e 20 41 53  resence of an AS
d090: 0a 23 20 63 6c 61 75 73 65 2e 0a 23 0a 64 6f 5f  .# clause..#.do_
d0a0: 74 65 73 74 20 61 75 74 68 2d 35 2e 31 20 7b 0a  test auth-5.1 {.
d0b0: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
d0c0: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
d0d0: 20 61 72 67 34 7d 20 7b 0a 20 20 20 20 72 65 74   arg4} {.    ret
d0e0: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
d0f0: 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  }.  execsql {.  
d100: 20 20 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 61    SELECT count(a
d110: 29 20 41 53 20 63 6e 74 20 46 52 4f 4d 20 74 34  ) AS cnt FROM t4
d120: 20 4f 52 44 45 52 20 42 59 20 63 6e 74 0a 20 20   ORDER BY cnt.  
d130: 7d 0a 7d 20 7b 31 7d 0a 0a 23 20 54 69 63 6b 65  }.} {1}..# Ticke
d140: 74 20 23 31 36 30 37 0a 23 0a 69 66 63 61 70 61  t #1607.#.ifcapa
d150: 62 6c 65 20 63 6f 6d 70 6f 75 6e 64 20 7b 0a 20  ble compound {. 
d160: 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 35 2e   do_test auth-5.
d170: 32 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  2 {.    execsql 
d180: 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 6e  {.      SELECT n
d190: 61 6d 65 20 46 52 4f 4d 20 28 0a 20 20 20 20 20  ame FROM (.     
d1a0: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
d1b0: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 55   sqlite_master U
d1c0: 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43 54 20  NION ALL SELECT 
d1d0: 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65  * FROM sqlite_te
d1e0: 6d 70 5f 6d 61 73 74 65 72 29 0a 20 20 20 20 20  mp_master).     
d1f0: 20 57 48 45 52 45 20 74 79 70 65 3d 27 74 61 62   WHERE type='tab
d200: 6c 65 27 0a 20 20 20 20 20 20 4f 52 44 45 52 20  le'.      ORDER 
d210: 42 59 20 6e 61 6d 65 0a 20 20 20 20 7d 0a 20 20  BY name.    }.  
d220: 7d 20 7b 73 71 6c 69 74 65 5f 73 74 61 74 31 20  } {sqlite_stat1 
d230: 74 31 20 74 32 20 74 33 20 74 34 20 74 78 20 76  t1 t2 t3 t4 tx v
d240: 31 63 68 6e 67 7d 0a 7d 0a 0a 0a 72 65 6e 61 6d  1chng}.}...renam
d250: 65 20 70 72 6f 63 20 7b 7d 0a 72 65 6e 61 6d 65  e proc {}.rename
d260: 20 70 72 6f 63 5f 72 65 61 6c 20 70 72 6f 63 0a   proc_real proc.
d270: 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a        ..finish_test.