/ Hex Artifact Content
Login

Artifact f0c1a8fc7f07d94e3e26ba7f77eb4a5cedda67b10d9a49275b154ab03749b6c0:


0000: 23 20 32 30 30 33 20 41 70 72 69 6c 20 34 0a 23  # 2003 April 4.#
0010: 0a 23 20 54 68 65 20 61 75 74 68 6f 72 20 64 69  .# The author di
0020: 73 63 6c 61 69 6d 73 20 63 6f 70 79 72 69 67 68  sclaims copyrigh
0030: 74 20 74 6f 20 74 68 69 73 20 73 6f 75 72 63 65  t to this source
0040: 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63 65   code.  In place
0050: 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e 6f   of.# a legal no
0060: 74 69 63 65 2c 20 68 65 72 65 20 69 73 20 61 20  tice, here is a 
0070: 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20 20  blessing:.#.#   
0080: 20 4d 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64   May you do good
0090: 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 23   and not evil..#
00a0: 20 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64      May you find
00b0: 20 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72   forgiveness for
00c0: 20 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f   yourself and fo
00d0: 72 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 23 20  rgive others..# 
00e0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
00f0: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0100: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0110: 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23 2a 2a 2a  you give..#.#***
0120: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 0a 23 20 54 68 69 73 20 66 69 6c 65  ****.# This file
0170: 20 69 6d 70 6c 65 6d 65 6e 74 73 20 72 65 67 72   implements regr
0180: 65 73 73 69 6f 6e 20 74 65 73 74 73 20 66 6f 72  ession tests for
0190: 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e   SQLite library.
01a0: 20 20 54 68 65 0a 23 20 66 6f 63 75 73 20 6f 66    The.# focus of
01b0: 20 74 68 69 73 20 73 63 72 69 70 74 20 69 73 20   this script is 
01c0: 74 65 73 74 69 6e 67 20 74 68 65 20 73 71 6c 69  testing the sqli
01d0: 74 65 33 5f 73 65 74 5f 61 75 74 68 6f 72 69 7a  te3_set_authoriz
01e0: 65 72 28 29 20 41 50 49 0a 23 20 61 6e 64 20 72  er() API.# and r
01f0: 65 6c 61 74 65 64 20 66 75 6e 63 74 69 6f 6e 61  elated functiona
0200: 6c 69 74 79 2e 0a 23 0a 23 20 24 49 64 3a 20 61  lity..#.# $Id: a
0210: 75 74 68 2e 74 65 73 74 2c 76 20 31 2e 34 36 20  uth.test,v 1.46 
0220: 32 30 30 39 2f 30 37 2f 30 32 20 31 38 3a 34 30  2009/07/02 18:40
0230: 3a 33 35 20 64 61 6e 69 65 6c 6b 31 39 37 37 20  :35 danielk1977 
0240: 45 78 70 20 24 0a 23 0a 0a 73 65 74 20 74 65 73  Exp $.#..set tes
0250: 74 64 69 72 20 5b 66 69 6c 65 20 64 69 72 6e 61  tdir [file dirna
0260: 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f 75 72 63  me $argv0].sourc
0270: 65 20 24 74 65 73 74 64 69 72 2f 74 65 73 74 65  e $testdir/teste
0280: 72 2e 74 63 6c 0a 0a 23 20 64 69 73 61 62 6c 65  r.tcl..# disable
0290: 20 74 68 69 73 20 74 65 73 74 20 69 66 20 74 68   this test if th
02a0: 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  e SQLITE_OMIT_AU
02b0: 54 48 4f 52 49 5a 41 54 49 4f 4e 20 6d 61 63 72  THORIZATION macr
02c0: 6f 20 69 73 0a 23 20 64 65 66 69 6e 65 64 20 64  o is.# defined d
02d0: 75 72 69 6e 67 20 63 6f 6d 70 69 6c 61 74 69 6f  uring compilatio
02e0: 6e 2e 0a 69 66 20 7b 5b 63 61 74 63 68 20 7b 64  n..if {[catch {d
02f0: 62 20 61 75 74 68 20 7b 7d 7d 20 6d 73 67 5d 7d  b auth {}} msg]}
0300: 20 7b 0a 20 20 66 69 6e 69 73 68 5f 74 65 73 74   {.  finish_test
0310: 0a 20 20 72 65 74 75 72 6e 0a 7d 0a 0a 72 65 6e  .  return.}..ren
0320: 61 6d 65 20 70 72 6f 63 20 70 72 6f 63 5f 72 65  ame proc proc_re
0330: 61 6c 0a 70 72 6f 63 5f 72 65 61 6c 20 70 72 6f  al.proc_real pro
0340: 63 20 7b 6e 61 6d 65 20 61 72 67 75 6d 65 6e 74  c {name argument
0350: 73 20 73 63 72 69 70 74 7d 20 7b 0a 20 20 70 72  s script} {.  pr
0360: 6f 63 5f 72 65 61 6c 20 24 6e 61 6d 65 20 24 61  oc_real $name $a
0370: 72 67 75 6d 65 6e 74 73 20 24 73 63 72 69 70 74  rguments $script
0380: 0a 20 20 69 66 20 7b 24 6e 61 6d 65 3d 3d 22 61  .  if {$name=="a
0390: 75 74 68 22 7d 20 7b 0a 20 20 20 20 64 62 20 61  uth"} {.    db a
03a0: 75 74 68 6f 72 69 7a 65 72 20 3a 3a 61 75 74 68  uthorizer ::auth
03b0: 0a 20 20 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20  .  }.}..do_test 
03c0: 61 75 74 68 2d 31 2e 31 2e 31 20 7b 0a 20 20 64  auth-1.1.1 {.  d
03d0: 62 20 63 6c 6f 73 65 0a 20 20 73 65 74 20 3a 3a  b close.  set ::
03e0: 44 42 20 5b 73 71 6c 69 74 65 33 20 64 62 20 74  DB [sqlite3 db t
03f0: 65 73 74 2e 64 62 5d 0a 20 20 70 72 6f 63 20 61  est.db].  proc a
0400: 75 74 68 78 20 7b 63 6f 64 65 20 61 72 67 31 20  uthx {code arg1 
0410: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 20 61  arg2 arg3 arg4 a
0420: 72 67 73 7d 20 7b 72 65 74 75 72 6e 20 53 51 4c  rgs} {return SQL
0430: 49 54 45 5f 44 45 4e 59 7d 0a 20 20 70 72 6f 63  ITE_DENY}.  proc
0440: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
0450: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 20   arg2 arg3 arg4 
0460: 61 72 67 73 7d 20 7b 0a 20 20 20 20 69 66 20 7b  args} {.    if {
0470: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 49  $code=="SQLITE_I
0480: 4e 53 45 52 54 22 20 26 26 20 24 61 72 67 31 3d  NSERT" && $arg1=
0490: 3d 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22  ="sqlite_master"
04a0: 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  } {.      return
04b0: 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20   SQLITE_DENY.   
04c0: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
04d0: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 64 62  LITE_OK.  }.  db
04e0: 20 61 75 74 68 6f 72 69 7a 65 72 20 3a 3a 61 75   authorizer ::au
04f0: 74 68 78 0a 20 20 23 20 45 56 49 44 45 4e 43 45  thx.  # EVIDENCE
0500: 2d 4f 46 3a 20 52 2d 30 33 39 39 33 2d 32 34 32  -OF: R-03993-242
0510: 38 35 20 4f 6e 6c 79 20 61 20 73 69 6e 67 6c 65  85 Only a single
0520: 20 61 75 74 68 6f 72 69 7a 65 72 20 63 61 6e 20   authorizer can 
0530: 62 65 20 69 6e 20 70 6c 61 63 65 20 6f 6e 0a 20  be in place on. 
0540: 20 23 20 61 20 64 61 74 61 62 61 73 65 20 63 6f   # a database co
0550: 6e 6e 65 63 74 69 6f 6e 20 61 74 20 61 20 74 69  nnection at a ti
0560: 6d 65 2e 20 45 61 63 68 20 63 61 6c 6c 20 74 6f  me. Each call to
0570: 20 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75 74   sqlite3_set_aut
0580: 68 6f 72 69 7a 65 72 0a 20 20 23 20 6f 76 65 72  horizer.  # over
0590: 72 69 64 65 73 20 74 68 65 20 70 72 65 76 69 6f  rides the previo
05a0: 75 73 20 63 61 6c 6c 2e 0a 20 20 23 0a 20 20 23  us call..  #.  #
05b0: 20 54 68 65 20 61 75 74 68 78 20 61 75 74 68 6f   The authx autho
05c0: 72 69 7a 65 72 20 61 62 6f 76 65 20 69 73 20 6f  rizer above is o
05d0: 76 65 72 72 69 64 64 65 6e 20 62 79 20 74 68 65  verridden by the
05e0: 20 61 75 74 68 20 61 75 74 68 6f 72 69 7a 65 72   auth authorizer
05f0: 20 62 65 6c 6f 77 0a 20 20 23 20 61 75 74 68 78   below.  # authx
0600: 20 69 73 20 6e 65 76 65 72 20 69 6e 76 6f 6b 65   is never invoke
0610: 64 2e 0a 20 20 64 62 20 61 75 74 68 6f 72 69 7a  d..  db authoriz
0620: 65 72 20 3a 3a 61 75 74 68 0a 20 20 63 61 74 63  er ::auth.  catc
0630: 68 73 71 6c 20 7b 43 52 45 41 54 45 20 54 41 42  hsql {CREATE TAB
0640: 4c 45 20 74 31 28 61 2c 62 2c 63 29 7d 0a 7d 20  LE t1(a,b,c)}.} 
0650: 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a  {1 {not authoriz
0660: 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  ed}}.do_test aut
0670: 68 2d 31 2e 31 2e 32 20 7b 0a 20 20 64 62 20 65  h-1.1.2 {.  db e
0680: 72 72 6f 72 63 6f 64 65 0a 7d 20 7b 32 33 7d 0a  rrorcode.} {23}.
0690: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
06a0: 2e 33 20 7b 0a 20 20 64 62 20 61 75 74 68 6f 72  .3 {.  db author
06b0: 69 7a 65 72 0a 7d 20 7b 3a 3a 61 75 74 68 7d 0a  izer.} {::auth}.
06c0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
06d0: 2e 34 20 7b 0a 20 20 23 20 54 69 63 6b 65 74 20  .4 {.  # Ticket 
06e0: 23 38 39 36 2e 0a 20 20 63 61 74 63 68 73 71 6c  #896..  catchsql
06f0: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 78 3b   {.    SELECT x;
0700: 0a 20 20 7d 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75  .  }.} {1 {no su
0710: 63 68 20 63 6f 6c 75 6d 6e 3a 20 78 7d 7d 0a 64  ch column: x}}.d
0720: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 20  o_test auth-1.2 
0730: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
0740: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
0750: 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b  lite_master}.} {
0760: 7d 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a  }.# EVIDENCE-OF:
0770: 20 52 2d 30 34 34 35 32 2d 34 39 33 34 39 20 57   R-04452-49349 W
0780: 68 65 6e 20 74 68 65 20 63 61 6c 6c 62 61 63 6b  hen the callback
0790: 20 72 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f   returns SQLITE_
07a0: 44 45 4e 59 2c 20 74 68 65 0a 23 20 73 71 6c 69  DENY, the.# sqli
07b0: 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 29  te3_prepare_v2()
07c0: 20 6f 72 20 65 71 75 69 76 61 6c 65 6e 74 20 63   or equivalent c
07d0: 61 6c 6c 20 74 68 61 74 20 74 72 69 67 67 65 72  all that trigger
07e0: 65 64 20 74 68 65 20 61 75 74 68 6f 72 69 7a 65  ed the authorize
07f0: 72 0a 23 20 77 69 6c 6c 20 66 61 69 6c 20 77 69  r.# will fail wi
0800: 74 68 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73  th an error mess
0810: 61 67 65 20 65 78 70 6c 61 69 6e 69 6e 67 20 74  age explaining t
0820: 68 61 74 20 61 63 63 65 73 73 20 69 73 20 64 65  hat access is de
0830: 6e 69 65 64 2e 0a 64 6f 5f 74 65 73 74 20 61 75  nied..do_test au
0840: 74 68 2d 31 2e 33 2e 31 20 7b 0a 20 20 70 72 6f  th-1.3.1 {.  pro
0850: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
0860: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
0870: 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 69 66 20   args} {.    if 
0880: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
0890: 43 52 45 41 54 45 5f 54 41 42 4c 45 22 7d 20 7b  CREATE_TABLE"} {
08a0: 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74  .      set ::aut
08b0: 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67  hargs [list $arg
08c0: 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61  1 $arg2 $arg3 $a
08d0: 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72  rg4].      retur
08e0: 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20  n SQLITE_DENY.  
08f0: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
0900: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
0910: 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45 20  atchsql {CREATE 
0920: 54 41 42 4c 45 20 74 31 28 61 2c 62 2c 63 29 7d  TABLE t1(a,b,c)}
0930: 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f  .} {1 {not autho
0940: 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20  rized}}.do_test 
0950: 61 75 74 68 2d 31 2e 33 2e 32 20 7b 0a 20 20 64  auth-1.3.2 {.  d
0960: 62 20 65 72 72 6f 72 63 6f 64 65 0a 7d 20 7b 32  b errorcode.} {2
0970: 33 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  3}.do_test auth-
0980: 31 2e 33 2e 33 20 7b 0a 20 20 73 65 74 20 3a 3a  1.3.3 {.  set ::
0990: 61 75 74 68 61 72 67 73 0a 7d 20 7b 74 31 20 7b  authargs.} {t1 {
09a0: 7d 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65  } main {}}.do_te
09b0: 73 74 20 61 75 74 68 2d 31 2e 34 20 7b 0a 20 20  st auth-1.4 {.  
09c0: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
09d0: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
09e0: 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 7d 0a 0a 69  _master}.} {}..i
09f0: 66 63 61 70 61 62 6c 65 20 74 65 6d 70 64 62 20  fcapable tempdb 
0a00: 7b 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68  {.  do_test auth
0a10: 2d 31 2e 35 20 7b 0a 20 20 20 20 70 72 6f 63 20  -1.5 {.    proc 
0a20: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
0a30: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 20 61  arg2 arg3 arg4 a
0a40: 72 67 73 7d 20 7b 0a 20 20 20 20 20 20 69 66 20  rgs} {.      if 
0a50: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
0a60: 49 4e 53 45 52 54 22 20 26 26 20 24 61 72 67 31  INSERT" && $arg1
0a70: 3d 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  =="sqlite_temp_m
0a80: 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20  aster"} {.      
0a90: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
0aa0: 44 45 4e 59 0a 20 20 20 20 20 20 7d 0a 20 20 20  DENY.      }.   
0ab0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
0ac0: 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61  _OK.    }.    ca
0ad0: 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45 20 54  tchsql {CREATE T
0ae0: 45 4d 50 20 54 41 42 4c 45 20 74 31 28 61 2c 62  EMP TABLE t1(a,b
0af0: 2c 63 29 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f 74  ,c)}.  } {1 {not
0b00: 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 20 20   authorized}}.  
0b10: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 36  do_test auth-1.6
0b20: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
0b30: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
0b40: 20 74 65 6d 70 2e 73 71 6c 69 74 65 5f 6d 61 73   temp.sqlite_mas
0b50: 74 65 72 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f  ter}.  } {}.  do
0b60: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 37 2e 31  _test auth-1.7.1
0b70: 20 7b 0a 20 20 20 20 70 72 6f 63 20 61 75 74 68   {.    proc auth
0b80: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
0b90: 20 61 72 67 33 20 61 72 67 34 20 61 72 67 73 7d   arg3 arg4 args}
0ba0: 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f   {.      if {$co
0bb0: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52 45 41  de=="SQLITE_CREA
0bc0: 54 45 5f 54 45 4d 50 5f 54 41 42 4c 45 22 7d 20  TE_TEMP_TABLE"} 
0bd0: 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a  {.        set ::
0be0: 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24  authargs [list $
0bf0: 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33  arg1 $arg2 $arg3
0c00: 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 20 20   $arg4].        
0c10: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45  return SQLITE_DE
0c20: 4e 59 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  NY.      }.     
0c30: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
0c40: 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 74 63  K.    }.    catc
0c50: 68 73 71 6c 20 7b 43 52 45 41 54 45 20 54 45 4d  hsql {CREATE TEM
0c60: 50 20 54 41 42 4c 45 20 74 31 28 61 2c 62 2c 63  P TABLE t1(a,b,c
0c70: 29 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f 74 20 61  )}.  } {1 {not a
0c80: 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 20 20 64 6f  uthorized}}.  do
0c90: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 37 2e 32  _test auth-1.7.2
0ca0: 20 7b 0a 20 20 20 20 20 73 65 74 20 3a 3a 61 75   {.     set ::au
0cb0: 74 68 61 72 67 73 0a 20 20 7d 20 7b 74 31 20 7b  thargs.  } {t1 {
0cc0: 7d 20 74 65 6d 70 20 7b 7d 7d 0a 20 20 64 6f 5f  } temp {}}.  do_
0cd0: 74 65 73 74 20 61 75 74 68 2d 31 2e 38 20 7b 0a  test auth-1.8 {.
0ce0: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c      execsql {SEL
0cf0: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
0d00: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
0d10: 7d 0a 20 20 7d 20 7b 7d 0a 7d 0a 0a 64 6f 5f 74  }.  } {}.}..do_t
0d20: 65 73 74 20 61 75 74 68 2d 31 2e 39 20 7b 0a 20  est auth-1.9 {. 
0d30: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
0d40: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
0d50: 61 72 67 34 20 61 72 67 73 7d 20 7b 0a 20 20 20  arg4 args} {.   
0d60: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
0d70: 49 54 45 5f 49 4e 53 45 52 54 22 20 26 26 20 24  ITE_INSERT" && $
0d80: 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 6d 61  arg1=="sqlite_ma
0d90: 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 72  ster"} {.      r
0da0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e  eturn SQLITE_IGN
0db0: 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  ORE.    }.    re
0dc0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
0dd0: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 43   }.  catchsql {C
0de0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61  REATE TABLE t1(a
0df0: 2c 62 2c 63 29 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a  ,b,c)}.} {0 {}}.
0e00: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
0e10: 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  0 {.  execsql {S
0e20: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
0e30: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d  sqlite_master}.}
0e40: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68   {}.do_test auth
0e50: 2d 31 2e 31 31 20 7b 0a 20 20 70 72 6f 63 20 61  -1.11 {.  proc a
0e60: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
0e70: 72 67 32 20 61 72 67 33 20 61 72 67 34 20 61 72  rg2 arg3 arg4 ar
0e80: 67 73 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  gs} {.    if {$c
0e90: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52 45  ode=="SQLITE_CRE
0ea0: 41 54 45 5f 54 41 42 4c 45 22 7d 20 7b 0a 20 20  ATE_TABLE"} {.  
0eb0: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
0ec0: 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24  gs [list $arg1 $
0ed0: 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34  arg2 $arg3 $arg4
0ee0: 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  ].      return S
0ef0: 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20  QLITE_IGNORE.   
0f00: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
0f10: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
0f20: 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45 20 54  tchsql {CREATE T
0f30: 41 42 4c 45 20 74 31 28 61 2c 62 2c 63 29 7d 0a  ABLE t1(a,b,c)}.
0f40: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
0f50: 20 61 75 74 68 2d 31 2e 31 32 20 7b 0a 20 20 65   auth-1.12 {.  e
0f60: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
0f70: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
0f80: 6d 61 73 74 65 72 7d 0a 7d 20 7b 7d 0a 0a 69 66  master}.} {}..if
0f90: 63 61 70 61 62 6c 65 20 74 65 6d 70 64 62 20 7b  capable tempdb {
0fa0: 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  .  do_test auth-
0fb0: 31 2e 31 33 20 7b 0a 20 20 20 20 70 72 6f 63 20  1.13 {.    proc 
0fc0: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
0fd0: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 20 61  arg2 arg3 arg4 a
0fe0: 72 67 73 7d 20 7b 0a 20 20 20 20 20 20 69 66 20  rgs} {.      if 
0ff0: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
1000: 49 4e 53 45 52 54 22 20 26 26 20 24 61 72 67 31  INSERT" && $arg1
1010: 3d 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  =="sqlite_temp_m
1020: 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20  aster"} {.      
1030: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
1040: 49 47 4e 4f 52 45 0a 20 20 20 20 20 20 7d 0a 20  IGNORE.      }. 
1050: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
1060: 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20  TE_OK.    }.    
1070: 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45  catchsql {CREATE
1080: 20 54 45 4d 50 20 54 41 42 4c 45 20 74 31 28 61   TEMP TABLE t1(a
1090: 2c 62 2c 63 29 7d 0a 20 20 7d 20 7b 30 20 7b 7d  ,b,c)}.  } {0 {}
10a0: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68  }.  do_test auth
10b0: 2d 31 2e 31 34 20 7b 0a 20 20 20 20 65 78 65 63  -1.14 {.    exec
10c0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
10d0: 20 46 52 4f 4d 20 74 65 6d 70 2e 73 71 6c 69 74   FROM temp.sqlit
10e0: 65 5f 6d 61 73 74 65 72 7d 0a 20 20 7d 20 7b 7d  e_master}.  } {}
10f0: 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  .  do_test auth-
1100: 31 2e 31 35 20 7b 0a 20 20 20 20 70 72 6f 63 20  1.15 {.    proc 
1110: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
1120: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 20 61  arg2 arg3 arg4 a
1130: 72 67 73 7d 20 7b 0a 20 20 20 20 20 20 69 66 20  rgs} {.      if 
1140: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
1150: 43 52 45 41 54 45 5f 54 45 4d 50 5f 54 41 42 4c  CREATE_TEMP_TABL
1160: 45 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65  E"} {.        se
1170: 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69  t ::authargs [li
1180: 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24  st $arg1 $arg2 $
1190: 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20  arg3 $arg4].    
11a0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
11b0: 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 20 20 7d  E_IGNORE.      }
11c0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
11d0: 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20  LITE_OK.    }.  
11e0: 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41    catchsql {CREA
11f0: 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 74 31  TE TEMP TABLE t1
1200: 28 61 2c 62 2c 63 29 7d 0a 20 20 7d 20 7b 30 20  (a,b,c)}.  } {0 
1210: 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75  {}}.  do_test au
1220: 74 68 2d 31 2e 31 36 20 7b 0a 20 20 20 20 65 78  th-1.16 {.    ex
1230: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61  ecsql {SELECT na
1240: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74  me FROM sqlite_t
1250: 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 20 20 7d 20  emp_master}.  } 
1260: 7b 7d 0a 20 20 0a 20 20 64 6f 5f 74 65 73 74 20  {}.  .  do_test 
1270: 61 75 74 68 2d 31 2e 31 37 20 7b 0a 20 20 20 20  auth-1.17 {.    
1280: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
1290: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
12a0: 72 67 34 20 61 72 67 73 7d 20 7b 0a 20 20 20 20  rg4 args} {.    
12b0: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
12c0: 4c 49 54 45 5f 43 52 45 41 54 45 5f 54 41 42 4c  LITE_CREATE_TABL
12d0: 45 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65  E"} {.        se
12e0: 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69  t ::authargs [li
12f0: 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24  st $arg1 $arg2 $
1300: 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20  arg3 $arg4].    
1310: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
1320: 45 5f 44 45 4e 59 0a 20 20 20 20 20 20 7d 0a 20  E_DENY.      }. 
1330: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
1340: 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20  TE_OK.    }.    
1350: 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45  catchsql {CREATE
1360: 20 54 45 4d 50 20 54 41 42 4c 45 20 74 31 28 61   TEMP TABLE t1(a
1370: 2c 62 2c 63 29 7d 0a 20 20 7d 20 7b 30 20 7b 7d  ,b,c)}.  } {0 {}
1380: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68  }.  do_test auth
1390: 2d 31 2e 31 38 20 7b 0a 20 20 20 20 65 78 65 63  -1.18 {.    exec
13a0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
13b0: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d   FROM sqlite_tem
13c0: 70 5f 6d 61 73 74 65 72 7d 0a 20 20 7d 20 7b 74  p_master}.  } {t
13d0: 31 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 75  1}.}..do_test au
13e0: 74 68 2d 31 2e 31 39 2e 31 20 7b 0a 20 20 73 65  th-1.19.1 {.  se
13f0: 74 20 3a 3a 61 75 74 68 61 72 67 73 20 7b 7d 0a  t ::authargs {}.
1400: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
1410: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
1420: 20 61 72 67 34 20 61 72 67 73 7d 20 7b 0a 20 20   arg4 args} {.  
1430: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
1440: 4c 49 54 45 5f 43 52 45 41 54 45 5f 54 45 4d 50  LITE_CREATE_TEMP
1450: 5f 54 41 42 4c 45 22 7d 20 7b 0a 20 20 20 20 20  _TABLE"} {.     
1460: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
1470: 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67  [list $arg1 $arg
1480: 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20  2 $arg3 $arg4]. 
1490: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
14a0: 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20  TE_DENY.    }.  
14b0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
14c0: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
14d0: 6c 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20  l {CREATE TABLE 
14e0: 74 32 28 61 2c 62 2c 63 29 7d 0a 7d 20 7b 30 20  t2(a,b,c)}.} {0 
14f0: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
1500: 2d 31 2e 31 39 2e 32 20 7b 0a 20 20 73 65 74 20  -1.19.2 {.  set 
1510: 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 7d 0a  ::authargs.} {}.
1520: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
1530: 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  0 {.  execsql {S
1540: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
1550: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d  sqlite_master}.}
1560: 20 7b 74 32 7d 0a 0a 64 6f 5f 74 65 73 74 20 61   {t2}..do_test a
1570: 75 74 68 2d 31 2e 32 31 2e 31 20 7b 0a 20 20 70  uth-1.21.1 {.  p
1580: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
1590: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
15a0: 67 34 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 69  g4 args} {.    i
15b0: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
15c0: 45 5f 44 52 4f 50 5f 54 41 42 4c 45 22 7d 20 7b  E_DROP_TABLE"} {
15d0: 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74  .      set ::aut
15e0: 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67  hargs [list $arg
15f0: 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61  1 $arg2 $arg3 $a
1600: 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72  rg4].      retur
1610: 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20  n SQLITE_DENY.  
1620: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
1630: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
1640: 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54 41  atchsql {DROP TA
1650: 42 4c 45 20 74 32 7d 0a 7d 20 7b 31 20 7b 6e 6f  BLE t2}.} {1 {no
1660: 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64  t authorized}}.d
1670: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 31  o_test auth-1.21
1680: 2e 32 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74  .2 {.  set ::aut
1690: 68 61 72 67 73 0a 7d 20 7b 74 32 20 7b 7d 20 6d  hargs.} {t2 {} m
16a0: 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20  ain {}}.do_test 
16b0: 61 75 74 68 2d 31 2e 32 32 20 7b 0a 20 20 65 78  auth-1.22 {.  ex
16c0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61  ecsql {SELECT na
16d0: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  me FROM sqlite_m
16e0: 61 73 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a 64 6f  aster}.} {t2}.do
16f0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 33 2e  _test auth-1.23.
1700: 31 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  1 {.  proc auth 
1710: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
1720: 61 72 67 33 20 61 72 67 34 20 61 72 67 73 7d 20  arg3 arg4 args} 
1730: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
1740: 3d 22 53 51 4c 49 54 45 5f 44 52 4f 50 5f 54 41  ="SQLITE_DROP_TA
1750: 42 4c 45 22 7d 20 7b 0a 20 20 20 20 20 20 73 65  BLE"} {.      se
1760: 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69  t ::authargs [li
1770: 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24  st $arg1 $arg2 $
1780: 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20  arg3 $arg4].    
1790: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
17a0: 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20  IGNORE.    }.   
17b0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
17c0: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
17d0: 20 7b 44 52 4f 50 20 54 41 42 4c 45 20 74 32 7d   {DROP TABLE t2}
17e0: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
17f0: 74 20 61 75 74 68 2d 31 2e 32 33 2e 32 20 7b 0a  t auth-1.23.2 {.
1800: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
1810: 0a 7d 20 7b 74 32 20 7b 7d 20 6d 61 69 6e 20 7b  .} {t2 {} main {
1820: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
1830: 31 2e 32 34 20 7b 0a 20 20 65 78 65 63 73 71 6c  1.24 {.  execsql
1840: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
1850: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
1860: 7d 0a 7d 20 7b 74 32 7d 0a 0a 69 66 63 61 70 61  }.} {t2}..ifcapa
1870: 62 6c 65 20 74 65 6d 70 64 62 20 7b 0a 20 20 64  ble tempdb {.  d
1880: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 35  o_test auth-1.25
1890: 20 7b 0a 20 20 20 20 70 72 6f 63 20 61 75 74 68   {.    proc auth
18a0: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
18b0: 20 61 72 67 33 20 61 72 67 34 20 61 72 67 73 7d   arg3 arg4 args}
18c0: 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f   {.      if {$co
18d0: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f 50  de=="SQLITE_DROP
18e0: 5f 54 45 4d 50 5f 54 41 42 4c 45 22 7d 20 7b 0a  _TEMP_TABLE"} {.
18f0: 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75          set ::au
1900: 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72  thargs [list $ar
1910: 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24  g1 $arg2 $arg3 $
1920: 61 72 67 34 5d 0a 20 20 20 20 20 20 20 20 72 65  arg4].        re
1930: 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59  turn SQLITE_DENY
1940: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72  .      }.      r
1950: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
1960: 20 20 20 20 7d 0a 20 20 20 20 63 61 74 63 68 73      }.    catchs
1970: 71 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45 20 74  ql {DROP TABLE t
1980: 31 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f 74 20 61  1}.  } {1 {not a
1990: 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 20 20 64 6f  uthorized}}.  do
19a0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 36 20  _test auth-1.26 
19b0: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53  {.    execsql {S
19c0: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
19d0: 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
19e0: 65 72 7d 0a 20 20 7d 20 7b 74 31 7d 0a 20 20 64  er}.  } {t1}.  d
19f0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 37  o_test auth-1.27
1a00: 20 7b 0a 20 20 20 20 70 72 6f 63 20 61 75 74 68   {.    proc auth
1a10: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
1a20: 20 61 72 67 33 20 61 72 67 34 20 61 72 67 73 7d   arg3 arg4 args}
1a30: 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f   {.      if {$co
1a40: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f 50  de=="SQLITE_DROP
1a50: 5f 54 45 4d 50 5f 54 41 42 4c 45 22 7d 20 7b 0a  _TEMP_TABLE"} {.
1a60: 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75          set ::au
1a70: 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72  thargs [list $ar
1a80: 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24  g1 $arg2 $arg3 $
1a90: 61 72 67 34 5d 0a 20 20 20 20 20 20 20 20 72 65  arg4].        re
1aa0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f  turn SQLITE_IGNO
1ab0: 52 45 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  RE.      }.     
1ac0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
1ad0: 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 74 63  K.    }.    catc
1ae0: 68 73 71 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45  hsql {DROP TABLE
1af0: 20 74 31 7d 0a 20 20 7d 20 7b 30 20 7b 7d 7d 0a   t1}.  } {0 {}}.
1b00: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31    do_test auth-1
1b10: 2e 32 38 20 7b 0a 20 20 20 20 65 78 65 63 73 71  .28 {.    execsq
1b20: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
1b30: 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f  ROM sqlite_temp_
1b40: 6d 61 73 74 65 72 7d 0a 20 20 7d 20 7b 74 31 7d  master}.  } {t1}
1b50: 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  .}..do_test auth
1b60: 2d 31 2e 32 39 20 7b 0a 20 20 70 72 6f 63 20 61  -1.29 {.  proc a
1b70: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
1b80: 72 67 32 20 61 72 67 33 20 61 72 67 34 20 61 72  rg2 arg3 arg4 ar
1b90: 67 73 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  gs} {.    if {$c
1ba0: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 49 4e 53  ode=="SQLITE_INS
1bb0: 45 52 54 22 20 26 26 20 24 61 72 67 31 3d 3d 22  ERT" && $arg1=="
1bc0: 74 32 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74  t2"} {.      ret
1bd0: 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a  urn SQLITE_DENY.
1be0: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
1bf0: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
1c00: 20 63 61 74 63 68 73 71 6c 20 7b 49 4e 53 45 52   catchsql {INSER
1c10: 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53  T INTO t2 VALUES
1c20: 28 31 2c 32 2c 33 29 7d 0a 7d 20 7b 31 20 7b 6e  (1,2,3)}.} {1 {n
1c30: 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a  ot authorized}}.
1c40: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 33  do_test auth-1.3
1c50: 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  0 {.  execsql {S
1c60: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d  ELECT * FROM t2}
1c70: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 61 75  .} {}.do_test au
1c80: 74 68 2d 31 2e 33 31 20 7b 0a 20 20 70 72 6f 63  th-1.31 {.  proc
1c90: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
1ca0: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 20   arg2 arg3 arg4 
1cb0: 61 72 67 73 7d 20 7b 0a 20 20 20 20 69 66 20 7b  args} {.    if {
1cc0: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 49  $code=="SQLITE_I
1cd0: 4e 53 45 52 54 22 20 26 26 20 24 61 72 67 31 3d  NSERT" && $arg1=
1ce0: 3d 22 74 32 22 7d 20 7b 0a 20 20 20 20 20 20 72  ="t2"} {.      r
1cf0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e  eturn SQLITE_IGN
1d00: 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  ORE.    }.    re
1d10: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
1d20: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 49   }.  catchsql {I
1d30: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41  NSERT INTO t2 VA
1d40: 4c 55 45 53 28 31 2c 32 2c 33 29 7d 0a 7d 20 7b  LUES(1,2,3)}.} {
1d50: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  0 {}}.do_test au
1d60: 74 68 2d 31 2e 33 32 20 7b 0a 20 20 65 78 65 63  th-1.32 {.  exec
1d70: 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52  sql {SELECT * FR
1d80: 4f 4d 20 74 32 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74  OM t2}.} {}.do_t
1d90: 65 73 74 20 61 75 74 68 2d 31 2e 33 33 20 7b 0a  est auth-1.33 {.
1da0: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
1db0: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
1dc0: 20 61 72 67 34 20 61 72 67 73 7d 20 7b 0a 20 20   arg4 args} {.  
1dd0: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
1de0: 4c 49 54 45 5f 49 4e 53 45 52 54 22 20 26 26 20  LITE_INSERT" && 
1df0: 24 61 72 67 31 3d 3d 22 74 31 22 7d 20 7b 0a 20  $arg1=="t1"} {. 
1e00: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
1e10: 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a  TE_IGNORE.    }.
1e20: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
1e30: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
1e40: 73 71 6c 20 7b 49 4e 53 45 52 54 20 49 4e 54 4f  sql {INSERT INTO
1e50: 20 74 32 20 56 41 4c 55 45 53 28 31 2c 32 2c 33   t2 VALUES(1,2,3
1e60: 29 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74  )}.} {0 {}}.do_t
1e70: 65 73 74 20 61 75 74 68 2d 31 2e 33 34 20 7b 0a  est auth-1.34 {.
1e80: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
1e90: 54 20 2a 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b  T * FROM t2}.} {
1ea0: 31 20 32 20 33 7d 0a 0a 64 6f 5f 74 65 73 74 20  1 2 3}..do_test 
1eb0: 61 75 74 68 2d 31 2e 33 35 2e 31 20 7b 0a 20 20  auth-1.35.1 {.  
1ec0: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
1ed0: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
1ee0: 72 67 34 20 61 72 67 73 7d 20 7b 0a 20 20 20 20  rg4 args} {.    
1ef0: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
1f00: 54 45 5f 52 45 41 44 22 20 26 26 20 24 61 72 67  TE_READ" && $arg
1f10: 31 3d 3d 22 74 32 22 20 26 26 20 24 61 72 67 32  1=="t2" && $arg2
1f20: 3d 3d 22 62 22 7d 20 7b 0a 20 20 20 20 20 20 72  =="b"} {.      r
1f30: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e  eturn SQLITE_DEN
1f40: 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  Y.    }.    retu
1f50: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
1f60: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 53 45 4c  .  catchsql {SEL
1f70: 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d 0a 7d  ECT * FROM t2}.}
1f80: 20 7b 31 20 7b 61 63 63 65 73 73 20 74 6f 20 74   {1 {access to t
1f90: 32 2e 62 20 69 73 20 70 72 6f 68 69 62 69 74 65  2.b is prohibite
1fa0: 64 7d 7d 0a 69 66 63 61 70 61 62 6c 65 20 61 74  d}}.ifcapable at
1fb0: 74 61 63 68 20 7b 0a 20 20 64 6f 5f 74 65 73 74  tach {.  do_test
1fc0: 20 61 75 74 68 2d 31 2e 33 35 2e 32 20 7b 0a 20   auth-1.35.2 {. 
1fd0: 20 20 20 65 78 65 63 73 71 6c 20 7b 41 54 54 41     execsql {ATTA
1fe0: 43 48 20 44 41 54 41 42 41 53 45 20 27 74 65 73  CH DATABASE 'tes
1ff0: 74 2e 64 62 27 20 41 53 20 74 77 6f 7d 0a 20 20  t.db' AS two}.  
2000: 20 20 63 61 74 63 68 73 71 6c 20 7b 53 45 4c 45    catchsql {SELE
2010: 43 54 20 2a 20 46 52 4f 4d 20 74 77 6f 2e 74 32  CT * FROM two.t2
2020: 7d 0a 20 20 7d 20 7b 31 20 7b 61 63 63 65 73 73  }.  } {1 {access
2030: 20 74 6f 20 74 77 6f 2e 74 32 2e 62 20 69 73 20   to two.t2.b is 
2040: 70 72 6f 68 69 62 69 74 65 64 7d 7d 0a 20 20 65  prohibited}}.  e
2050: 78 65 63 73 71 6c 20 7b 44 45 54 41 43 48 20 44  xecsql {DETACH D
2060: 41 54 41 42 41 53 45 20 74 77 6f 7d 0a 7d 0a 23  ATABASE two}.}.#
2070: 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
2080: 33 38 33 39 32 2d 34 39 39 37 30 20 49 66 20 74  38392-49970 If t
2090: 68 65 20 61 63 74 69 6f 6e 20 63 6f 64 65 20 69  he action code i
20a0: 73 20 53 51 4c 49 54 45 5f 52 45 41 44 20 61 6e  s SQLITE_READ an
20b0: 64 20 74 68 65 0a 23 20 63 61 6c 6c 62 61 63 6b  d the.# callback
20c0: 20 72 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f   returns SQLITE_
20d0: 49 47 4e 4f 52 45 20 74 68 65 6e 20 74 68 65 20  IGNORE then the 
20e0: 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
20f0: 6e 74 20 73 74 61 74 65 6d 65 6e 74 0a 23 20 69  nt statement.# i
2100: 73 20 63 6f 6e 73 74 72 75 63 74 65 64 20 74 6f  s constructed to
2110: 20 73 75 62 73 74 69 74 75 74 65 20 61 20 4e 55   substitute a NU
2120: 4c 4c 20 76 61 6c 75 65 20 69 6e 20 70 6c 61 63  LL value in plac
2130: 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 63  e of the table c
2140: 6f 6c 75 6d 6e 0a 23 20 74 68 61 74 20 77 6f 75  olumn.# that wou
2150: 6c 64 20 68 61 76 65 20 62 65 65 6e 20 72 65 61  ld have been rea
2160: 64 20 69 66 20 53 51 4c 49 54 45 5f 4f 4b 20 68  d if SQLITE_OK h
2170: 61 64 20 62 65 65 6e 20 72 65 74 75 72 6e 65 64  ad been returned
2180: 2e 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  ..do_test auth-1
2190: 2e 33 36 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  .36 {.  proc aut
21a0: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
21b0: 32 20 61 72 67 33 20 61 72 67 34 20 61 72 67 73  2 arg3 arg4 args
21c0: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
21d0: 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45 41 44 22  e=="SQLITE_READ"
21e0: 20 26 26 20 24 61 72 67 31 3d 3d 22 74 32 22 20   && $arg1=="t2" 
21f0: 26 26 20 24 61 72 67 32 3d 3d 22 62 22 7d 20 7b  && $arg2=="b"} {
2200: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
2210: 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20  LITE_IGNORE.    
2220: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
2230: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
2240: 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20  chsql {SELECT * 
2250: 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 30 20 7b 31  FROM t2}.} {0 {1
2260: 20 7b 7d 20 33 7d 7d 0a 64 6f 5f 74 65 73 74 20   {} 3}}.do_test 
2270: 61 75 74 68 2d 31 2e 33 37 20 7b 0a 20 20 70 72  auth-1.37 {.  pr
2280: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
2290: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
22a0: 34 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 69 66  4 args} {.    if
22b0: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
22c0: 5f 52 45 41 44 22 20 26 26 20 24 61 72 67 31 3d  _READ" && $arg1=
22d0: 3d 22 74 32 22 20 26 26 20 24 61 72 67 32 3d 3d  ="t2" && $arg2==
22e0: 22 62 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74  "b"} {.      ret
22f0: 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52  urn SQLITE_IGNOR
2300: 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  E.    }.    retu
2310: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
2320: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 53 45 4c  .  catchsql {SEL
2330: 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 20 57 48  ECT * FROM t2 WH
2340: 45 52 45 20 62 3d 32 7d 0a 7d 20 7b 30 20 7b 7d  ERE b=2}.} {0 {}
2350: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
2360: 2e 33 38 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  .38 {.  proc aut
2370: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
2380: 32 20 61 72 67 33 20 61 72 67 34 20 61 72 67 73  2 arg3 arg4 args
2390: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
23a0: 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45 41 44 22  e=="SQLITE_READ"
23b0: 20 26 26 20 24 61 72 67 31 3d 3d 22 74 32 22 20   && $arg1=="t2" 
23c0: 26 26 20 24 61 72 67 32 3d 3d 22 61 22 7d 20 7b  && $arg2=="a"} {
23d0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
23e0: 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20  LITE_IGNORE.    
23f0: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
2400: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
2410: 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20  chsql {SELECT * 
2420: 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20 62 3d  FROM t2 WHERE b=
2430: 32 7d 0a 7d 20 7b 30 20 7b 7b 7d 20 32 20 33 7d  2}.} {0 {{} 2 3}
2440: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
2450: 2e 33 39 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  .39 {.  proc aut
2460: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
2470: 32 20 61 72 67 33 20 61 72 67 34 20 61 72 67 73  2 arg3 arg4 args
2480: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
2490: 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45 41 44 22  e=="SQLITE_READ"
24a0: 20 26 26 20 24 61 72 67 31 3d 3d 22 74 32 22 20   && $arg1=="t2" 
24b0: 26 26 20 24 61 72 67 32 3d 3d 22 62 22 7d 20 7b  && $arg2=="b"} {
24c0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
24d0: 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20  LITE_IGNORE.    
24e0: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
24f0: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
2500: 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20  chsql {SELECT * 
2510: 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20 62 20  FROM t2 WHERE b 
2520: 49 53 20 4e 55 4c 4c 7d 0a 7d 20 7b 30 20 7b 31  IS NULL}.} {0 {1
2530: 20 7b 7d 20 33 7d 7d 0a 64 6f 5f 74 65 73 74 20   {} 3}}.do_test 
2540: 61 75 74 68 2d 31 2e 34 30 20 7b 0a 20 20 70 72  auth-1.40 {.  pr
2550: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
2560: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
2570: 34 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 69 66  4 args} {.    if
2580: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
2590: 5f 52 45 41 44 22 20 26 26 20 24 61 72 67 31 3d  _READ" && $arg1=
25a0: 3d 22 74 32 22 20 26 26 20 24 61 72 67 32 3d 3d  ="t2" && $arg2==
25b0: 22 62 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74  "b"} {.      ret
25c0: 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a  urn SQLITE_DENY.
25d0: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
25e0: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
25f0: 20 63 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43   catchsql {SELEC
2600: 54 20 61 2c 63 20 46 52 4f 4d 20 74 32 20 57 48  T a,c FROM t2 WH
2610: 45 52 45 20 62 20 49 53 20 4e 55 4c 4c 7d 0a 7d  ERE b IS NULL}.}
2620: 20 7b 31 20 7b 61 63 63 65 73 73 20 74 6f 20 74   {1 {access to t
2630: 32 2e 62 20 69 73 20 70 72 6f 68 69 62 69 74 65  2.b is prohibite
2640: 64 7d 7d 0a 20 20 0a 64 6f 5f 74 65 73 74 20 61  d}}.  .do_test a
2650: 75 74 68 2d 31 2e 34 31 20 7b 0a 20 20 70 72 6f  uth-1.41 {.  pro
2660: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
2670: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
2680: 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 69 66 20   args} {.    if 
2690: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
26a0: 55 50 44 41 54 45 22 20 26 26 20 24 61 72 67 31  UPDATE" && $arg1
26b0: 3d 3d 22 74 32 22 20 26 26 20 24 61 72 67 32 3d  =="t2" && $arg2=
26c0: 3d 22 62 22 7d 20 7b 0a 20 20 20 20 20 20 72 65  ="b"} {.      re
26d0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59  turn SQLITE_DENY
26e0: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
26f0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
2700: 20 20 63 61 74 63 68 73 71 6c 20 7b 55 50 44 41    catchsql {UPDA
2710: 54 45 20 74 32 20 53 45 54 20 61 3d 31 31 7d 0a  TE t2 SET a=11}.
2720: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
2730: 20 61 75 74 68 2d 31 2e 34 32 20 7b 0a 20 20 65   auth-1.42 {.  e
2740: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a  xecsql {SELECT *
2750: 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31 31 20   FROM t2}.} {11 
2760: 32 20 33 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  2 3}.do_test aut
2770: 68 2d 31 2e 34 33 20 7b 0a 20 20 70 72 6f 63 20  h-1.43 {.  proc 
2780: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
2790: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 20 61  arg2 arg3 arg4 a
27a0: 72 67 73 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rgs} {.    if {$
27b0: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 55 50  code=="SQLITE_UP
27c0: 44 41 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d  DATE" && $arg1==
27d0: 22 74 32 22 20 26 26 20 24 61 72 67 32 3d 3d 22  "t2" && $arg2=="
27e0: 62 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75  b"} {.      retu
27f0: 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20  rn SQLITE_DENY. 
2800: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
2810: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
2820: 63 61 74 63 68 73 71 6c 20 7b 55 50 44 41 54 45  catchsql {UPDATE
2830: 20 74 32 20 53 45 54 20 62 3d 32 32 2c 20 63 3d   t2 SET b=22, c=
2840: 33 33 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75  33}.} {1 {not au
2850: 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65  thorized}}.do_te
2860: 73 74 20 61 75 74 68 2d 31 2e 34 34 20 7b 0a 20  st auth-1.44 {. 
2870: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
2880: 20 2a 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31   * FROM t2}.} {1
2890: 31 20 32 20 33 7d 0a 64 6f 5f 74 65 73 74 20 61  1 2 3}.do_test a
28a0: 75 74 68 2d 31 2e 34 35 20 7b 0a 20 20 70 72 6f  uth-1.45 {.  pro
28b0: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
28c0: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
28d0: 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 69 66 20   args} {.    if 
28e0: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
28f0: 55 50 44 41 54 45 22 20 26 26 20 24 61 72 67 31  UPDATE" && $arg1
2900: 3d 3d 22 74 32 22 20 26 26 20 24 61 72 67 32 3d  =="t2" && $arg2=
2910: 3d 22 62 22 7d 20 7b 0a 20 20 20 20 20 20 72 65  ="b"} {.      re
2920: 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f  turn SQLITE_IGNO
2930: 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  RE.    }.    ret
2940: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
2950: 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 55 50  }.  catchsql {UP
2960: 44 41 54 45 20 74 32 20 53 45 54 20 62 3d 32 32  DATE t2 SET b=22
2970: 2c 20 63 3d 33 33 7d 0a 7d 20 7b 30 20 7b 7d 7d  , c=33}.} {0 {}}
2980: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
2990: 34 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  46 {.  execsql {
29a0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32  SELECT * FROM t2
29b0: 7d 0a 7d 20 7b 31 31 20 32 20 33 33 7d 0a 0a 64  }.} {11 2 33}..d
29c0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 34 37  o_test auth-1.47
29d0: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
29e0: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
29f0: 72 67 33 20 61 72 67 34 20 61 72 67 73 7d 20 7b  rg3 arg4 args} {
2a00: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
2a10: 22 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 22 20  "SQLITE_DELETE" 
2a20: 26 26 20 24 61 72 67 31 3d 3d 22 74 32 22 7d 20  && $arg1=="t2"} 
2a30: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  {.      return S
2a40: 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d  QLITE_DENY.    }
2a50: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
2a60: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
2a70: 68 73 71 6c 20 7b 44 45 4c 45 54 45 20 46 52 4f  hsql {DELETE FRO
2a80: 4d 20 74 32 20 57 48 45 52 45 20 61 3d 31 31 7d  M t2 WHERE a=11}
2a90: 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f  .} {1 {not autho
2aa0: 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20  rized}}.do_test 
2ab0: 61 75 74 68 2d 31 2e 34 38 20 7b 0a 20 20 65 78  auth-1.48 {.  ex
2ac0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20  ecsql {SELECT * 
2ad0: 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31 31 20 32  FROM t2}.} {11 2
2ae0: 20 33 33 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   33}.do_test aut
2af0: 68 2d 31 2e 34 39 20 7b 0a 20 20 70 72 6f 63 20  h-1.49 {.  proc 
2b00: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
2b10: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 20 61  arg2 arg3 arg4 a
2b20: 72 67 73 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rgs} {.    if {$
2b30: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45  code=="SQLITE_DE
2b40: 4c 45 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d  LETE" && $arg1==
2b50: 22 74 32 22 7d 20 7b 0a 20 20 20 20 20 20 72 65  "t2"} {.      re
2b60: 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f  turn SQLITE_IGNO
2b70: 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  RE.    }.    ret
2b80: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
2b90: 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44 45  }.  catchsql {DE
2ba0: 4c 45 54 45 20 46 52 4f 4d 20 74 32 20 57 48 45  LETE FROM t2 WHE
2bb0: 52 45 20 61 3d 31 31 7d 0a 7d 20 7b 30 20 7b 7d  RE a=11}.} {0 {}
2bc0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
2bd0: 2e 35 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .50 {.  execsql 
2be0: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
2bf0: 32 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20  2}.} {}.do_test 
2c00: 61 75 74 68 2d 31 2e 35 30 2e 32 20 7b 0a 20 20  auth-1.50.2 {.  
2c10: 65 78 65 63 73 71 6c 20 7b 49 4e 53 45 52 54 20  execsql {INSERT 
2c20: 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 31  INTO t2 VALUES(1
2c30: 31 2c 20 32 2c 20 33 33 29 7d 0a 7d 20 7b 7d 0a  1, 2, 33)}.} {}.
2c40: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
2c50: 35 31 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  51 {.  proc auth
2c60: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
2c70: 20 61 72 67 33 20 61 72 67 34 20 61 72 67 73 7d   arg3 arg4 args}
2c80: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
2c90: 3d 3d 22 53 51 4c 49 54 45 5f 53 45 4c 45 43 54  =="SQLITE_SELECT
2ca0: 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72  "} {.      retur
2cb0: 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20  n SQLITE_DENY.  
2cc0: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
2cd0: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
2ce0: 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20  atchsql {SELECT 
2cf0: 2a 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31 20  * FROM t2}.} {1 
2d00: 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d  {not authorized}
2d10: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
2d20: 2e 35 32 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  .52 {.  proc aut
2d30: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
2d40: 32 20 61 72 67 33 20 61 72 67 34 20 61 72 67 73  2 arg3 arg4 args
2d50: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
2d60: 65 3d 3d 22 53 51 4c 49 54 45 5f 53 45 4c 45 43  e=="SQLITE_SELEC
2d70: 54 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75  T"} {.      retu
2d80: 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45  rn SQLITE_IGNORE
2d90: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
2da0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
2db0: 20 20 63 61 74 63 68 73 71 6c 20 7b 53 45 4c 45    catchsql {SELE
2dc0: 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d 0a 7d 20  CT * FROM t2}.} 
2dd0: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  {0 {}}.do_test a
2de0: 75 74 68 2d 31 2e 35 33 20 7b 0a 20 20 70 72 6f  uth-1.53 {.  pro
2df0: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
2e00: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
2e10: 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 69 66 20   args} {.    if 
2e20: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
2e30: 53 45 4c 45 43 54 22 7d 20 7b 0a 20 20 20 20 20  SELECT"} {.     
2e40: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
2e50: 4b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  K.    }.    retu
2e60: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
2e70: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 53 45 4c  .  catchsql {SEL
2e80: 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d 0a 7d  ECT * FROM t2}.}
2e90: 20 7b 30 20 7b 31 31 20 32 20 33 33 7d 7d 0a 0a   {0 {11 2 33}}..
2ea0: 23 20 55 70 64 61 74 65 20 66 6f 72 20 76 65 72  # Update for ver
2eb0: 73 69 6f 6e 20 33 3a 20 54 68 65 72 65 20 75 73  sion 3: There us
2ec0: 65 64 20 74 6f 20 62 65 20 61 20 68 61 6e 64 66  ed to be a handf
2ed0: 75 6c 20 6f 66 20 74 65 73 74 20 68 65 72 65 20  ul of test here 
2ee0: 74 68 61 74 0a 23 20 74 65 73 74 65 64 20 74 68  that.# tested th
2ef0: 65 20 61 75 74 68 6f 72 69 73 61 74 69 6f 6e 20  e authorisation 
2f00: 63 61 6c 6c 62 61 63 6b 20 77 69 74 68 20 74 68  callback with th
2f10: 65 20 43 4f 50 59 20 63 6f 6d 6d 61 6e 64 2e 20  e COPY command. 
2f20: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 23 20  The following.# 
2f30: 74 65 73 74 20 6d 61 6b 65 73 20 74 68 65 20 73  test makes the s
2f40: 61 6d 65 20 64 61 74 61 62 61 73 65 20 6d 6f 64  ame database mod
2f50: 69 66 69 63 61 74 69 6f 6e 73 20 61 73 20 74 68  ifications as th
2f60: 65 79 20 75 73 65 64 20 74 6f 2e 0a 64 6f 5f 74  ey used to..do_t
2f70: 65 73 74 20 61 75 74 68 2d 31 2e 35 34 20 7b 0a  est auth-1.54 {.
2f80: 20 20 65 78 65 63 73 71 6c 20 7b 49 4e 53 45 52    execsql {INSER
2f90: 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53  T INTO t2 VALUES
2fa0: 28 37 2c 20 38 2c 20 39 29 3b 7d 0a 7d 20 7b 7d  (7, 8, 9);}.} {}
2fb0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
2fc0: 35 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  55 {.  execsql {
2fd0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32  SELECT * FROM t2
2fe0: 7d 0a 7d 20 7b 31 31 20 32 20 33 33 20 37 20 38  }.} {11 2 33 7 8
2ff0: 20 39 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 75 74   9}..do_test aut
3000: 68 2d 31 2e 36 33 20 7b 0a 20 20 70 72 6f 63 20  h-1.63 {.  proc 
3010: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
3020: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 20 61  arg2 arg3 arg4 a
3030: 72 67 73 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rgs} {.    if {$
3040: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45  code=="SQLITE_DE
3050: 4c 45 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d  LETE" && $arg1==
3060: 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 7d  "sqlite_master"}
3070: 20 7b 0a 20 20 20 20 20 20 20 72 65 74 75 72 6e   {.       return
3080: 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20   SQLITE_DENY.   
3090: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
30a0: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
30b0: 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54 41 42  tchsql {DROP TAB
30c0: 4c 45 20 74 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74  LE t2}.} {1 {not
30d0: 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f   authorized}}.do
30e0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 36 34 20  _test auth-1.64 
30f0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
3100: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
3110: 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b  lite_master}.} {
3120: 74 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  t2}.do_test auth
3130: 2d 31 2e 36 35 20 7b 0a 20 20 70 72 6f 63 20 61  -1.65 {.  proc a
3140: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
3150: 72 67 32 20 61 72 67 33 20 61 72 67 34 20 61 72  rg2 arg3 arg4 ar
3160: 67 73 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  gs} {.    if {$c
3170: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c  ode=="SQLITE_DEL
3180: 45 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d 22  ETE" && $arg1=="
3190: 74 32 22 7d 20 7b 0a 20 20 20 20 20 20 20 72 65  t2"} {.       re
31a0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59  turn SQLITE_DENY
31b0: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
31c0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
31d0: 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50    catchsql {DROP
31e0: 20 54 41 42 4c 45 20 74 32 7d 0a 7d 20 7b 31 20   TABLE t2}.} {1 
31f0: 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d  {not authorized}
3200: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
3210: 2e 36 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .66 {.  execsql 
3220: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
3230: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d  M sqlite_master}
3240: 0a 7d 20 7b 74 32 7d 0a 0a 69 66 63 61 70 61 62  .} {t2}..ifcapab
3250: 6c 65 20 74 65 6d 70 64 62 20 7b 0a 20 20 64 6f  le tempdb {.  do
3260: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 36 37 20  _test auth-1.67 
3270: 7b 0a 20 20 20 20 70 72 6f 63 20 61 75 74 68 20  {.    proc auth 
3280: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
3290: 61 72 67 33 20 61 72 67 34 20 61 72 67 73 7d 20  arg3 arg4 args} 
32a0: 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64  {.      if {$cod
32b0: 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45 54  e=="SQLITE_DELET
32c0: 45 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71  E" && $arg1=="sq
32d0: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
32e0: 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 72 65  "} {.         re
32f0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59  turn SQLITE_DENY
3300: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72  .      }.      r
3310: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
3320: 20 20 20 20 7d 0a 20 20 20 20 63 61 74 63 68 73      }.    catchs
3330: 71 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45 20 74  ql {DROP TABLE t
3340: 31 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f 74 20 61  1}.  } {1 {not a
3350: 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 20 20 64 6f  uthorized}}.  do
3360: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 36 38 20  _test auth-1.68 
3370: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53  {.    execsql {S
3380: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
3390: 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
33a0: 65 72 7d 0a 20 20 7d 20 7b 74 31 7d 0a 20 20 64  er}.  } {t1}.  d
33b0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 36 39  o_test auth-1.69
33c0: 20 7b 0a 20 20 20 20 70 72 6f 63 20 61 75 74 68   {.    proc auth
33d0: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
33e0: 20 61 72 67 33 20 61 72 67 34 20 61 72 67 73 7d   arg3 arg4 args}
33f0: 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f   {.      if {$co
3400: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45  de=="SQLITE_DELE
3410: 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d 22 74  TE" && $arg1=="t
3420: 31 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 72  1"} {.         r
3430: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e  eturn SQLITE_DEN
3440: 59 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  Y.      }.      
3450: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
3460: 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 74 63 68  .    }.    catch
3470: 73 71 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45 20  sql {DROP TABLE 
3480: 74 31 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f 74 20  t1}.  } {1 {not 
3490: 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 20 20 64  authorized}}.  d
34a0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 37 30  o_test auth-1.70
34b0: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
34c0: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
34d0: 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73   sqlite_temp_mas
34e0: 74 65 72 7d 0a 20 20 7d 20 7b 74 31 7d 0a 7d 0a  ter}.  } {t1}.}.
34f0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
3500: 37 31 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  71 {.  proc auth
3510: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
3520: 20 61 72 67 33 20 61 72 67 34 20 61 72 67 73 7d   arg3 arg4 args}
3530: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
3540: 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45 54 45  =="SQLITE_DELETE
3550: 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71 6c  " && $arg1=="sql
3560: 69 74 65 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20  ite_master"} {. 
3570: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
3580: 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d  ITE_IGNORE.    }
3590: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
35a0: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
35b0: 68 73 71 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45  hsql {DROP TABLE
35c0: 20 74 32 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f   t2}.} {0 {}}.do
35d0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 37 32 20  _test auth-1.72 
35e0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
35f0: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
3600: 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b  lite_master}.} {
3610: 74 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  t2}.do_test auth
3620: 2d 31 2e 37 33 20 7b 0a 20 20 70 72 6f 63 20 61  -1.73 {.  proc a
3630: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
3640: 72 67 32 20 61 72 67 33 20 61 72 67 34 20 61 72  rg2 arg3 arg4 ar
3650: 67 73 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  gs} {.    if {$c
3660: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c  ode=="SQLITE_DEL
3670: 45 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d 22  ETE" && $arg1=="
3680: 74 32 22 7d 20 7b 0a 20 20 20 20 20 20 20 72 65  t2"} {.       re
3690: 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f  turn SQLITE_IGNO
36a0: 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  RE.    }.    ret
36b0: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
36c0: 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52  }.  catchsql {DR
36d0: 4f 50 20 54 41 42 4c 45 20 74 32 7d 0a 7d 20 7b  OP TABLE t2}.} {
36e0: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  0 {}}.do_test au
36f0: 74 68 2d 31 2e 37 34 20 7b 0a 20 20 65 78 65 63  th-1.74 {.  exec
3700: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
3710: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
3720: 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a 0a 69 66 63  ter}.} {t2}..ifc
3730: 61 70 61 62 6c 65 20 74 65 6d 70 64 62 20 7b 0a  apable tempdb {.
3740: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31    do_test auth-1
3750: 2e 37 35 20 7b 0a 20 20 20 20 70 72 6f 63 20 61  .75 {.    proc a
3760: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
3770: 72 67 32 20 61 72 67 33 20 61 72 67 34 20 61 72  rg2 arg3 arg4 ar
3780: 67 73 7d 20 7b 0a 20 20 20 20 20 20 69 66 20 7b  gs} {.      if {
3790: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44  $code=="SQLITE_D
37a0: 45 4c 45 54 45 22 20 26 26 20 24 61 72 67 31 3d  ELETE" && $arg1=
37b0: 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  ="sqlite_temp_ma
37c0: 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 20  ster"} {.       
37d0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
37e0: 49 47 4e 4f 52 45 0a 20 20 20 20 20 20 7d 0a 20  IGNORE.      }. 
37f0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
3800: 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20  TE_OK.    }.    
3810: 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54  catchsql {DROP T
3820: 41 42 4c 45 20 74 31 7d 0a 20 20 7d 20 7b 30 20  ABLE t1}.  } {0 
3830: 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75  {}}.  do_test au
3840: 74 68 2d 31 2e 37 36 20 7b 0a 20 20 20 20 65 78  th-1.76 {.    ex
3850: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61  ecsql {SELECT na
3860: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74  me FROM sqlite_t
3870: 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 20 20 7d 20  emp_master}.  } 
3880: 7b 74 31 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61  {t1}.  do_test a
3890: 75 74 68 2d 31 2e 37 37 20 7b 0a 20 20 20 20 70  uth-1.77 {.    p
38a0: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
38b0: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
38c0: 67 34 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 20  g4 args} {.     
38d0: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
38e0: 49 54 45 5f 44 45 4c 45 54 45 22 20 26 26 20 24  ITE_DELETE" && $
38f0: 61 72 67 31 3d 3d 22 74 31 22 7d 20 7b 0a 20 20  arg1=="t1"} {.  
3900: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
3910: 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20  LITE_IGNORE.    
3920: 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e    }.      return
3930: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d   SQLITE_OK.    }
3940: 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 44  .    catchsql {D
3950: 52 4f 50 20 54 41 42 4c 45 20 74 31 7d 0a 20 20  ROP TABLE t1}.  
3960: 7d 20 7b 30 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65  } {0 {}}.  do_te
3970: 73 74 20 61 75 74 68 2d 31 2e 37 38 20 7b 0a 20  st auth-1.78 {. 
3980: 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45     execsql {SELE
3990: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 74 65 6d  CT name FROM tem
39a0: 70 2e 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d  p.sqlite_master}
39b0: 0a 20 20 7d 20 7b 74 31 7d 0a 7d 0a 0a 23 20 54  .  } {t1}.}..# T
39c0: 65 73 74 20 63 61 73 65 73 20 61 75 74 68 2d 31  est cases auth-1
39d0: 2e 37 39 20 74 6f 20 61 75 74 68 2d 31 2e 31 32  .79 to auth-1.12
39e0: 34 20 74 65 73 74 20 63 72 65 61 74 69 6e 67 20  4 test creating 
39f0: 61 6e 64 20 64 72 6f 70 70 69 6e 67 20 76 69 65  and dropping vie
3a00: 77 73 2e 0a 23 20 4f 6d 69 74 20 74 68 65 73 65  ws..# Omit these
3a10: 20 69 66 20 74 68 65 20 6c 69 62 72 61 72 79 20   if the library 
3a20: 77 61 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74  was compiled wit
3a30: 68 20 76 69 65 77 73 20 6f 6d 69 74 74 65 64 2e  h views omitted.
3a40: 0a 69 66 63 61 70 61 62 6c 65 20 76 69 65 77 20  .ifcapable view 
3a50: 7b 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  {.do_test auth-1
3a60: 2e 37 39 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  .79 {.  proc aut
3a70: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
3a80: 32 20 61 72 67 33 20 61 72 67 34 20 61 72 67 73  2 arg3 arg4 args
3a90: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
3aa0: 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52 45 41 54  e=="SQLITE_CREAT
3ab0: 45 5f 56 49 45 57 22 7d 20 7b 0a 20 20 20 20 20  E_VIEW"} {.     
3ac0: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
3ad0: 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67  [list $arg1 $arg
3ae0: 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 20 0a  2 $arg3 $arg4] .
3af0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
3b00: 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20  ITE_DENY.    }. 
3b10: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
3b20: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
3b30: 71 6c 20 7b 43 52 45 41 54 45 20 56 49 45 57 20  ql {CREATE VIEW 
3b40: 76 31 20 41 53 20 53 45 4c 45 43 54 20 61 2b 31  v1 AS SELECT a+1
3b50: 2c 62 2b 31 20 46 52 4f 4d 20 74 32 7d 0a 7d 20  ,b+1 FROM t2}.} 
3b60: 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a  {1 {not authoriz
3b70: 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  ed}}.do_test aut
3b80: 68 2d 31 2e 38 30 20 7b 0a 20 20 73 65 74 20 3a  h-1.80 {.  set :
3b90: 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 76 31 20  :authargs.} {v1 
3ba0: 7b 7d 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74  {} main {}}.do_t
3bb0: 65 73 74 20 61 75 74 68 2d 31 2e 38 31 20 7b 0a  est auth-1.81 {.
3bc0: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
3bd0: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
3be0: 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32  te_master}.} {t2
3bf0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
3c00: 2e 38 32 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  .82 {.  proc aut
3c10: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
3c20: 32 20 61 72 67 33 20 61 72 67 34 20 61 72 67 73  2 arg3 arg4 args
3c30: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
3c40: 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52 45 41 54  e=="SQLITE_CREAT
3c50: 45 5f 56 49 45 57 22 7d 20 7b 0a 20 20 20 20 20  E_VIEW"} {.     
3c60: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
3c70: 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67  [list $arg1 $arg
3c80: 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 20 0a  2 $arg3 $arg4] .
3c90: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
3ca0: 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d  ITE_IGNORE.    }
3cb0: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
3cc0: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
3cd0: 68 73 71 6c 20 7b 43 52 45 41 54 45 20 56 49 45  hsql {CREATE VIE
3ce0: 57 20 76 31 20 41 53 20 53 45 4c 45 43 54 20 61  W v1 AS SELECT a
3cf0: 2b 31 2c 62 2b 31 20 46 52 4f 4d 20 74 32 7d 0a  +1,b+1 FROM t2}.
3d00: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
3d10: 20 61 75 74 68 2d 31 2e 38 33 20 7b 0a 20 20 73   auth-1.83 {.  s
3d20: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20  et ::authargs.} 
3d30: 7b 76 31 20 7b 7d 20 6d 61 69 6e 20 7b 7d 7d 0a  {v1 {} main {}}.
3d40: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 38  do_test auth-1.8
3d50: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  4 {.  execsql {S
3d60: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
3d70: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d  sqlite_master}.}
3d80: 20 7b 74 32 7d 0a 0a 69 66 63 61 70 61 62 6c 65   {t2}..ifcapable
3d90: 20 74 65 6d 70 64 62 20 7b 0a 20 20 64 6f 5f 74   tempdb {.  do_t
3da0: 65 73 74 20 61 75 74 68 2d 31 2e 38 35 20 7b 0a  est auth-1.85 {.
3db0: 20 20 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63      proc auth {c
3dc0: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
3dd0: 67 33 20 61 72 67 34 20 61 72 67 73 7d 20 7b 0a  g3 arg4 args} {.
3de0: 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d        if {$code=
3df0: 3d 22 53 51 4c 49 54 45 5f 43 52 45 41 54 45 5f  ="SQLITE_CREATE_
3e00: 54 45 4d 50 5f 56 49 45 57 22 7d 20 7b 0a 20 20  TEMP_VIEW"} {.  
3e10: 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68        set ::auth
3e20: 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31  args [list $arg1
3e30: 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72   $arg2 $arg3 $ar
3e40: 67 34 5d 20 0a 20 20 20 20 20 20 20 20 72 65 74  g4] .        ret
3e50: 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a  urn SQLITE_DENY.
3e60: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65        }.      re
3e70: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
3e80: 20 20 20 7d 0a 20 20 20 20 63 61 74 63 68 73 71     }.    catchsq
3e90: 6c 20 7b 43 52 45 41 54 45 20 54 45 4d 50 4f 52  l {CREATE TEMPOR
3ea0: 41 52 59 20 56 49 45 57 20 76 31 20 41 53 20 53  ARY VIEW v1 AS S
3eb0: 45 4c 45 43 54 20 61 2b 31 2c 62 2b 31 20 46 52  ELECT a+1,b+1 FR
3ec0: 4f 4d 20 74 32 7d 0a 20 20 7d 20 7b 31 20 7b 6e  OM t2}.  } {1 {n
3ed0: 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a  ot authorized}}.
3ee0: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31    do_test auth-1
3ef0: 2e 38 36 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a  .86 {.    set ::
3f00: 61 75 74 68 61 72 67 73 0a 20 20 7d 20 7b 76 31  authargs.  } {v1
3f10: 20 7b 7d 20 74 65 6d 70 20 7b 7d 7d 0a 20 20 64   {} temp {}}.  d
3f20: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 38 37  o_test auth-1.87
3f30: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
3f40: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
3f50: 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73   sqlite_temp_mas
3f60: 74 65 72 7d 0a 20 20 7d 20 7b 74 31 7d 0a 20 20  ter}.  } {t1}.  
3f70: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 38  do_test auth-1.8
3f80: 38 20 7b 0a 20 20 20 20 70 72 6f 63 20 61 75 74  8 {.    proc aut
3f90: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
3fa0: 32 20 61 72 67 33 20 61 72 67 34 20 61 72 67 73  2 arg3 arg4 args
3fb0: 7d 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 63  } {.      if {$c
3fc0: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52 45  ode=="SQLITE_CRE
3fd0: 41 54 45 5f 54 45 4d 50 5f 56 49 45 57 22 7d 20  ATE_TEMP_VIEW"} 
3fe0: 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a  {.        set ::
3ff0: 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24  authargs [list $
4000: 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33  arg1 $arg2 $arg3
4010: 20 24 61 72 67 34 5d 20 0a 20 20 20 20 20 20 20   $arg4] .       
4020: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49   return SQLITE_I
4030: 47 4e 4f 52 45 0a 20 20 20 20 20 20 7d 0a 20 20  GNORE.      }.  
4040: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
4050: 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63  E_OK.    }.    c
4060: 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45 20  atchsql {CREATE 
4070: 54 45 4d 50 4f 52 41 52 59 20 56 49 45 57 20 76  TEMPORARY VIEW v
4080: 31 20 41 53 20 53 45 4c 45 43 54 20 61 2b 31 2c  1 AS SELECT a+1,
4090: 62 2b 31 20 46 52 4f 4d 20 74 32 7d 0a 20 20 7d  b+1 FROM t2}.  }
40a0: 20 7b 30 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73   {0 {}}.  do_tes
40b0: 74 20 61 75 74 68 2d 31 2e 38 39 20 7b 0a 20 20  t auth-1.89 {.  
40c0: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
40d0: 0a 20 20 7d 20 7b 76 31 20 7b 7d 20 74 65 6d 70  .  } {v1 {} temp
40e0: 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61   {}}.  do_test a
40f0: 75 74 68 2d 31 2e 39 30 20 7b 0a 20 20 20 20 65  uth-1.90 {.    e
4100: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
4110: 61 6d 65 20 46 52 4f 4d 20 74 65 6d 70 2e 73 71  ame FROM temp.sq
4120: 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 20 20 7d  lite_master}.  }
4130: 20 7b 74 31 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74   {t1}.}..do_test
4140: 20 61 75 74 68 2d 31 2e 39 31 20 7b 0a 20 20 70   auth-1.91 {.  p
4150: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
4160: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
4170: 67 34 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 69  g4 args} {.    i
4180: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
4190: 45 5f 49 4e 53 45 52 54 22 20 26 26 20 24 61 72  E_INSERT" && $ar
41a0: 67 31 3d 3d 22 73 71 6c 69 74 65 5f 6d 61 73 74  g1=="sqlite_mast
41b0: 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74  er"} {.      ret
41c0: 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a  urn SQLITE_DENY.
41d0: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
41e0: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
41f0: 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54   catchsql {CREAT
4200: 45 20 56 49 45 57 20 76 31 20 41 53 20 53 45 4c  E VIEW v1 AS SEL
4210: 45 43 54 20 61 2b 31 2c 62 2b 31 20 46 52 4f 4d  ECT a+1,b+1 FROM
4220: 20 74 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61   t2}.} {1 {not a
4230: 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74  uthorized}}.do_t
4240: 65 73 74 20 61 75 74 68 2d 31 2e 39 32 20 7b 0a  est auth-1.92 {.
4250: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
4260: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
4270: 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32  te_master}.} {t2
4280: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
4290: 2e 39 33 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  .93 {.  proc aut
42a0: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
42b0: 32 20 61 72 67 33 20 61 72 67 34 20 61 72 67 73  2 arg3 arg4 args
42c0: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
42d0: 65 3d 3d 22 53 51 4c 49 54 45 5f 49 4e 53 45 52  e=="SQLITE_INSER
42e0: 54 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71  T" && $arg1=="sq
42f0: 6c 69 74 65 5f 6d 61 73 74 65 72 22 7d 20 7b 0a  lite_master"} {.
4300: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
4310: 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d  ITE_IGNORE.    }
4320: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
4330: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
4340: 68 73 71 6c 20 7b 43 52 45 41 54 45 20 56 49 45  hsql {CREATE VIE
4350: 57 20 76 31 20 41 53 20 53 45 4c 45 43 54 20 61  W v1 AS SELECT a
4360: 2b 31 2c 62 2b 31 20 46 52 4f 4d 20 74 32 7d 0a  +1,b+1 FROM t2}.
4370: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
4380: 20 61 75 74 68 2d 31 2e 39 34 20 7b 0a 20 20 65   auth-1.94 {.  e
4390: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
43a0: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
43b0: 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a 0a  master}.} {t2}..
43c0: 69 66 63 61 70 61 62 6c 65 20 74 65 6d 70 64 62  ifcapable tempdb
43d0: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74   {.  do_test aut
43e0: 68 2d 31 2e 39 35 20 7b 0a 20 20 20 20 70 72 6f  h-1.95 {.    pro
43f0: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
4400: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
4410: 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 20 20 69   args} {.      i
4420: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
4430: 45 5f 49 4e 53 45 52 54 22 20 26 26 20 24 61 72  E_INSERT" && $ar
4440: 67 31 3d 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70  g1=="sqlite_temp
4450: 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20  _master"} {.    
4460: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
4470: 45 5f 44 45 4e 59 0a 20 20 20 20 20 20 7d 0a 20  E_DENY.      }. 
4480: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
4490: 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20  TE_OK.    }.    
44a0: 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45  catchsql {CREATE
44b0: 20 54 45 4d 50 4f 52 41 52 59 20 56 49 45 57 20   TEMPORARY VIEW 
44c0: 76 31 20 41 53 20 53 45 4c 45 43 54 20 61 2b 31  v1 AS SELECT a+1
44d0: 2c 62 2b 31 20 46 52 4f 4d 20 74 32 7d 0a 20 20  ,b+1 FROM t2}.  
44e0: 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72  } {1 {not author
44f0: 69 7a 65 64 7d 7d 0a 20 20 64 6f 5f 74 65 73 74  ized}}.  do_test
4500: 20 61 75 74 68 2d 31 2e 39 36 20 7b 0a 20 20 20   auth-1.96 {.   
4510: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
4520: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
4530: 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 20  e_temp_master}. 
4540: 20 7d 20 7b 74 31 7d 0a 20 20 64 6f 5f 74 65 73   } {t1}.  do_tes
4550: 74 20 61 75 74 68 2d 31 2e 39 37 20 7b 0a 20 20  t auth-1.97 {.  
4560: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
4570: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
4580: 20 61 72 67 34 20 61 72 67 73 7d 20 7b 0a 20 20   arg4 args} {.  
4590: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
45a0: 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 22 20 26  SQLITE_INSERT" &
45b0: 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65  & $arg1=="sqlite
45c0: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 7d 20 7b  _temp_master"} {
45d0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
45e0: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20  SQLITE_IGNORE.  
45f0: 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75      }.      retu
4600: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20  rn SQLITE_OK.   
4610: 20 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20   }.    catchsql 
4620: 7b 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52  {CREATE TEMPORAR
4630: 59 20 56 49 45 57 20 76 31 20 41 53 20 53 45 4c  Y VIEW v1 AS SEL
4640: 45 43 54 20 61 2b 31 2c 62 2b 31 20 46 52 4f 4d  ECT a+1,b+1 FROM
4650: 20 74 32 7d 0a 20 20 7d 20 7b 30 20 7b 7d 7d 0a   t2}.  } {0 {}}.
4660: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31    do_test auth-1
4670: 2e 39 38 20 7b 0a 20 20 20 20 65 78 65 63 73 71  .98 {.    execsq
4680: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
4690: 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f  ROM sqlite_temp_
46a0: 6d 61 73 74 65 72 7d 0a 20 20 7d 20 7b 74 31 7d  master}.  } {t1}
46b0: 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  .}..do_test auth
46c0: 2d 31 2e 39 39 20 7b 0a 20 20 70 72 6f 63 20 61  -1.99 {.  proc a
46d0: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
46e0: 72 67 32 20 61 72 67 33 20 61 72 67 34 20 61 72  rg2 arg3 arg4 ar
46f0: 67 73 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  gs} {.    if {$c
4700: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c  ode=="SQLITE_DEL
4710: 45 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d 22  ETE" && $arg1=="
4720: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 7d 20  sqlite_master"} 
4730: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  {.      return S
4740: 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d  QLITE_DENY.    }
4750: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
4760: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
4770: 68 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  hsql {.    CREAT
4780: 45 20 56 49 45 57 20 76 32 20 41 53 20 53 45 4c  E VIEW v2 AS SEL
4790: 45 43 54 20 61 2b 31 2c 62 2b 31 20 46 52 4f 4d  ECT a+1,b+1 FROM
47a0: 20 74 32 3b 0a 20 20 20 20 44 52 4f 50 20 56 49   t2;.    DROP VI
47b0: 45 57 20 76 32 0a 20 20 7d 0a 7d 20 7b 31 20 7b  EW v2.  }.} {1 {
47c0: 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d  not authorized}}
47d0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
47e0: 31 30 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  100 {.  execsql 
47f0: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
4800: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d  M sqlite_master}
4810: 0a 7d 20 7b 74 32 20 76 32 7d 0a 64 6f 5f 74 65  .} {t2 v2}.do_te
4820: 73 74 20 61 75 74 68 2d 31 2e 31 30 31 20 7b 0a  st auth-1.101 {.
4830: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
4840: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
4850: 20 61 72 67 34 20 61 72 67 73 7d 20 7b 0a 20 20   arg4 args} {.  
4860: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
4870: 4c 49 54 45 5f 44 52 4f 50 5f 56 49 45 57 22 7d  LITE_DROP_VIEW"}
4880: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61   {.      set ::a
4890: 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61  uthargs [list $a
48a0: 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20  rg1 $arg2 $arg3 
48b0: 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74  $arg4].      ret
48c0: 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a  urn SQLITE_DENY.
48d0: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
48e0: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
48f0: 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20   catchsql {DROP 
4900: 56 49 45 57 20 76 32 7d 0a 7d 20 7b 31 20 7b 6e  VIEW v2}.} {1 {n
4910: 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a  ot authorized}}.
4920: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
4930: 30 32 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74  02 {.  set ::aut
4940: 68 61 72 67 73 0a 7d 20 7b 76 32 20 7b 7d 20 6d  hargs.} {v2 {} m
4950: 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20  ain {}}.do_test 
4960: 61 75 74 68 2d 31 2e 31 30 33 20 7b 0a 20 20 65  auth-1.103 {.  e
4970: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
4980: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
4990: 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 20 76 32  master}.} {t2 v2
49a0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
49b0: 2e 31 30 34 20 7b 0a 20 20 70 72 6f 63 20 61 75  .104 {.  proc au
49c0: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
49d0: 67 32 20 61 72 67 33 20 61 72 67 34 20 61 72 67  g2 arg3 arg4 arg
49e0: 73 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f  s} {.    if {$co
49f0: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45  de=="SQLITE_DELE
4a00: 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73  TE" && $arg1=="s
4a10: 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 7d 20 7b  qlite_master"} {
4a20: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
4a30: 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20  LITE_IGNORE.    
4a40: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
4a50: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
4a60: 63 68 73 71 6c 20 7b 44 52 4f 50 20 56 49 45 57  chsql {DROP VIEW
4a70: 20 76 32 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f   v2}.} {0 {}}.do
4a80: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 30 35  _test auth-1.105
4a90: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
4aa0: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73  LECT name FROM s
4ab0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20  qlite_master}.} 
4ac0: 7b 74 32 20 76 32 7d 0a 64 6f 5f 74 65 73 74 20  {t2 v2}.do_test 
4ad0: 61 75 74 68 2d 31 2e 31 30 36 20 7b 0a 20 20 70  auth-1.106 {.  p
4ae0: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
4af0: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
4b00: 67 34 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 69  g4 args} {.    i
4b10: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
4b20: 45 5f 44 52 4f 50 5f 56 49 45 57 22 7d 20 7b 0a  E_DROP_VIEW"} {.
4b30: 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68        set ::auth
4b40: 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31  args [list $arg1
4b50: 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72   $arg2 $arg3 $ar
4b60: 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  g4].      return
4b70: 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20   SQLITE_IGNORE. 
4b80: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
4b90: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
4ba0: 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 56  catchsql {DROP V
4bb0: 49 45 57 20 76 32 7d 0a 7d 20 7b 30 20 7b 7d 7d  IEW v2}.} {0 {}}
4bc0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
4bd0: 31 30 37 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75  107 {.  set ::au
4be0: 74 68 61 72 67 73 0a 7d 20 7b 76 32 20 7b 7d 20  thargs.} {v2 {} 
4bf0: 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  main {}}.do_test
4c00: 20 61 75 74 68 2d 31 2e 31 30 38 20 7b 0a 20 20   auth-1.108 {.  
4c10: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
4c20: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
4c30: 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 20 76  _master}.} {t2 v
4c40: 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  2}.do_test auth-
4c50: 31 2e 31 30 39 20 7b 0a 20 20 70 72 6f 63 20 61  1.109 {.  proc a
4c60: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
4c70: 72 67 32 20 61 72 67 33 20 61 72 67 34 20 61 72  rg2 arg3 arg4 ar
4c80: 67 73 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  gs} {.    if {$c
4c90: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f  ode=="SQLITE_DRO
4ca0: 50 5f 56 49 45 57 22 7d 20 7b 0a 20 20 20 20 20  P_VIEW"} {.     
4cb0: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
4cc0: 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67  [list $arg1 $arg
4cd0: 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20  2 $arg3 $arg4]. 
4ce0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
4cf0: 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20  TE_OK.    }.    
4d00: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
4d10: 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20  .  }.  catchsql 
4d20: 7b 44 52 4f 50 20 56 49 45 57 20 76 32 7d 0a 7d  {DROP VIEW v2}.}
4d30: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
4d40: 61 75 74 68 2d 31 2e 31 31 30 20 7b 0a 20 20 73  auth-1.110 {.  s
4d50: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20  et ::authargs.} 
4d60: 7b 76 32 20 7b 7d 20 6d 61 69 6e 20 7b 7d 7d 0a  {v2 {} main {}}.
4d70: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
4d80: 31 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  11 {.  execsql {
4d90: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
4da0: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a   sqlite_master}.
4db0: 7d 20 7b 74 32 7d 0a 0a 0a 69 66 63 61 70 61 62  } {t2}...ifcapab
4dc0: 6c 65 20 74 65 6d 70 64 62 20 7b 0a 20 20 64 6f  le tempdb {.  do
4dd0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 31 32  _test auth-1.112
4de0: 20 7b 0a 20 20 20 20 70 72 6f 63 20 61 75 74 68   {.    proc auth
4df0: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
4e00: 20 61 72 67 33 20 61 72 67 34 20 61 72 67 73 7d   arg3 arg4 args}
4e10: 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f   {.      if {$co
4e20: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45  de=="SQLITE_DELE
4e30: 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73  TE" && $arg1=="s
4e40: 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
4e50: 72 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 72 65  r"} {.        re
4e60: 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59  turn SQLITE_DENY
4e70: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72  .      }.      r
4e80: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
4e90: 20 20 20 20 7d 0a 20 20 20 20 63 61 74 63 68 73      }.    catchs
4ea0: 71 6c 20 7b 0a 20 20 20 20 20 20 43 52 45 41 54  ql {.      CREAT
4eb0: 45 20 54 45 4d 50 20 56 49 45 57 20 76 31 20 41  E TEMP VIEW v1 A
4ec0: 53 20 53 45 4c 45 43 54 20 61 2b 31 2c 62 2b 31  S SELECT a+1,b+1
4ed0: 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20 20 20   FROM t1;.      
4ee0: 44 52 4f 50 20 56 49 45 57 20 76 31 0a 20 20 20  DROP VIEW v1.   
4ef0: 20 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f 74 20 61   }.  } {1 {not a
4f00: 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 20 20 64 6f  uthorized}}.  do
4f10: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 31 33  _test auth-1.113
4f20: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
4f30: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
4f40: 20 74 65 6d 70 2e 73 71 6c 69 74 65 5f 6d 61 73   temp.sqlite_mas
4f50: 74 65 72 7d 0a 20 20 7d 20 7b 74 31 20 76 31 7d  ter}.  } {t1 v1}
4f60: 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  .  do_test auth-
4f70: 31 2e 31 31 34 20 7b 0a 20 20 20 20 70 72 6f 63  1.114 {.    proc
4f80: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
4f90: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 20   arg2 arg3 arg4 
4fa0: 61 72 67 73 7d 20 7b 0a 20 20 20 20 20 20 69 66  args} {.      if
4fb0: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
4fc0: 5f 44 52 4f 50 5f 54 45 4d 50 5f 56 49 45 57 22  _DROP_TEMP_VIEW"
4fd0: 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20  } {.        set 
4fe0: 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74  ::authargs [list
4ff0: 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72   $arg1 $arg2 $ar
5000: 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20  g3 $arg4].      
5010: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
5020: 44 45 4e 59 0a 20 20 20 20 20 20 7d 0a 20 20 20  DENY.      }.   
5030: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
5040: 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61  _OK.    }.    ca
5050: 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 56 49 45  tchsql {DROP VIE
5060: 57 20 76 31 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f  W v1}.  } {1 {no
5070: 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 20  t authorized}}. 
5080: 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e   do_test auth-1.
5090: 31 31 35 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a  115 {.    set ::
50a0: 61 75 74 68 61 72 67 73 0a 20 20 7d 20 7b 76 31  authargs.  } {v1
50b0: 20 7b 7d 20 74 65 6d 70 20 7b 7d 7d 0a 20 20 64   {} temp {}}.  d
50c0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 31  o_test auth-1.11
50d0: 36 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  6 {.    execsql 
50e0: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
50f0: 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  M sqlite_temp_ma
5100: 73 74 65 72 7d 0a 20 20 7d 20 7b 74 31 20 76 31  ster}.  } {t1 v1
5110: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68  }.  do_test auth
5120: 2d 31 2e 31 31 37 20 7b 0a 20 20 20 20 70 72 6f  -1.117 {.    pro
5130: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
5140: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
5150: 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 20 20 69   args} {.      i
5160: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
5170: 45 5f 44 45 4c 45 54 45 22 20 26 26 20 24 61 72  E_DELETE" && $ar
5180: 67 31 3d 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70  g1=="sqlite_temp
5190: 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20  _master"} {.    
51a0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
51b0: 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 20 20 7d  E_IGNORE.      }
51c0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
51d0: 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20  LITE_OK.    }.  
51e0: 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50    catchsql {DROP
51f0: 20 56 49 45 57 20 76 31 7d 0a 20 20 7d 20 7b 30   VIEW v1}.  } {0
5200: 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61   {}}.  do_test a
5210: 75 74 68 2d 31 2e 31 31 38 20 7b 0a 20 20 20 20  uth-1.118 {.    
5220: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
5230: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
5240: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 20 20  _temp_master}.  
5250: 7d 20 7b 74 31 20 76 31 7d 0a 20 20 64 6f 5f 74  } {t1 v1}.  do_t
5260: 65 73 74 20 61 75 74 68 2d 31 2e 31 31 39 20 7b  est auth-1.119 {
5270: 0a 20 20 20 20 70 72 6f 63 20 61 75 74 68 20 7b  .    proc auth {
5280: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
5290: 72 67 33 20 61 72 67 34 20 61 72 67 73 7d 20 7b  rg3 arg4 args} {
52a0: 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64 65  .      if {$code
52b0: 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f 50 5f 54  =="SQLITE_DROP_T
52c0: 45 4d 50 5f 56 49 45 57 22 7d 20 7b 0a 20 20 20  EMP_VIEW"} {.   
52d0: 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61       set ::autha
52e0: 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20  rgs [list $arg1 
52f0: 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67  $arg2 $arg3 $arg
5300: 34 5d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  4].        retur
5310: 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a  n SQLITE_IGNORE.
5320: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65        }.      re
5330: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
5340: 20 20 20 7d 0a 20 20 20 20 63 61 74 63 68 73 71     }.    catchsq
5350: 6c 20 7b 44 52 4f 50 20 56 49 45 57 20 76 31 7d  l {DROP VIEW v1}
5360: 0a 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20 20 64 6f  .  } {0 {}}.  do
5370: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 32 30  _test auth-1.120
5380: 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a 61 75 74   {.    set ::aut
5390: 68 61 72 67 73 0a 20 20 7d 20 7b 76 31 20 7b 7d  hargs.  } {v1 {}
53a0: 20 74 65 6d 70 20 7b 7d 7d 0a 20 20 64 6f 5f 74   temp {}}.  do_t
53b0: 65 73 74 20 61 75 74 68 2d 31 2e 31 32 31 20 7b  est auth-1.121 {
53c0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45  .    execsql {SE
53d0: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 74  LECT name FROM t
53e0: 65 6d 70 2e 73 71 6c 69 74 65 5f 6d 61 73 74 65  emp.sqlite_maste
53f0: 72 7d 0a 20 20 7d 20 7b 74 31 20 76 31 7d 0a 20  r}.  } {t1 v1}. 
5400: 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e   do_test auth-1.
5410: 31 32 32 20 7b 0a 20 20 20 20 70 72 6f 63 20 61  122 {.    proc a
5420: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
5430: 72 67 32 20 61 72 67 33 20 61 72 67 34 20 61 72  rg2 arg3 arg4 ar
5440: 67 73 7d 20 7b 0a 20 20 20 20 20 20 69 66 20 7b  gs} {.      if {
5450: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44  $code=="SQLITE_D
5460: 52 4f 50 5f 54 45 4d 50 5f 56 49 45 57 22 7d 20  ROP_TEMP_VIEW"} 
5470: 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a  {.        set ::
5480: 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24  authargs [list $
5490: 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33  arg1 $arg2 $arg3
54a0: 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 20 20   $arg4].        
54b0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
54c0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72  .      }.      r
54d0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
54e0: 20 20 20 20 7d 0a 20 20 20 20 63 61 74 63 68 73      }.    catchs
54f0: 71 6c 20 7b 44 52 4f 50 20 56 49 45 57 20 76 31  ql {DROP VIEW v1
5500: 7d 0a 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20 20 64  }.  } {0 {}}.  d
5510: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 32  o_test auth-1.12
5520: 33 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a 61 75  3 {.    set ::au
5530: 74 68 61 72 67 73 0a 20 20 7d 20 7b 76 31 20 7b  thargs.  } {v1 {
5540: 7d 20 74 65 6d 70 20 7b 7d 7d 0a 20 20 64 6f 5f  } temp {}}.  do_
5550: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 32 34 20  test auth-1.124 
5560: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53  {.    execsql {S
5570: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
5580: 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
5590: 65 72 7d 0a 20 20 7d 20 7b 74 31 7d 0a 7d 0a 7d  er}.  } {t1}.}.}
55a0: 20 3b 23 20 69 66 63 61 70 61 62 6c 65 20 76 69   ;# ifcapable vi
55b0: 65 77 0a 0a 23 20 54 65 73 74 20 63 61 73 65 73  ew..# Test cases
55c0: 20 61 75 74 68 2d 31 2e 31 32 35 20 74 6f 20 61   auth-1.125 to a
55d0: 75 74 68 2d 31 2e 31 37 36 20 74 65 73 74 20 63  uth-1.176 test c
55e0: 72 65 61 74 69 6e 67 20 61 6e 64 20 64 72 6f 70  reating and drop
55f0: 70 69 6e 67 20 74 72 69 67 67 65 72 73 2e 0a 23  ping triggers..#
5600: 20 4f 6d 69 74 20 74 68 65 73 65 20 69 66 20 74   Omit these if t
5610: 68 65 20 6c 69 62 72 61 72 79 20 77 61 73 20 63  he library was c
5620: 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 74 72 69  ompiled with tri
5630: 67 67 65 72 73 20 6f 6d 69 74 74 65 64 2e 0a 23  ggers omitted..#
5640: 0a 69 66 63 61 70 61 62 6c 65 20 74 72 69 67 67  .ifcapable trigg
5650: 65 72 26 26 74 65 6d 70 64 62 20 7b 0a 64 6f 5f  er&&tempdb {.do_
5660: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 32 35 20  test auth-1.125 
5670: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
5680: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
5690: 67 33 20 61 72 67 34 20 61 72 67 73 7d 20 7b 0a  g3 arg4 args} {.
56a0: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
56b0: 53 51 4c 49 54 45 5f 43 52 45 41 54 45 5f 54 52  SQLITE_CREATE_TR
56c0: 49 47 47 45 52 22 7d 20 7b 0a 20 20 20 20 20 20  IGGER"} {.      
56d0: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b  set ::authargs [
56e0: 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67 32  list $arg1 $arg2
56f0: 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20   $arg3 $arg4].  
5700: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
5710: 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20  E_DENY.    }.   
5720: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
5730: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
5740: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 52   {.    CREATE TR
5750: 49 47 47 45 52 20 72 32 20 44 45 4c 45 54 45 20  IGGER r2 DELETE 
5760: 6f 6e 20 74 32 20 42 45 47 49 4e 0a 20 20 20 20  on t2 BEGIN.    
5770: 20 20 20 20 53 45 4c 45 43 54 20 4e 55 4c 4c 3b      SELECT NULL;
5780: 0a 20 20 20 20 45 4e 44 3b 0a 20 20 7d 0a 7d 20  .    END;.  }.} 
5790: 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a  {1 {not authoriz
57a0: 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  ed}}.do_test aut
57b0: 68 2d 31 2e 31 32 36 20 7b 0a 20 20 73 65 74 20  h-1.126 {.  set 
57c0: 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 72 32  ::authargs.} {r2
57d0: 20 74 32 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f   t2 main {}}.do_
57e0: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 32 37 20  test auth-1.127 
57f0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
5800: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
5810: 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b  lite_master}.} {
5820: 74 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  t2}.do_test auth
5830: 2d 31 2e 31 32 38 20 7b 0a 20 20 70 72 6f 63 20  -1.128 {.  proc 
5840: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
5850: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 20 61  arg2 arg3 arg4 a
5860: 72 67 73 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rgs} {.    if {$
5870: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 49 4e  code=="SQLITE_IN
5880: 53 45 52 54 22 20 26 26 20 24 61 72 67 31 3d 3d  SERT" && $arg1==
5890: 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 7d  "sqlite_master"}
58a0: 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   {.      return 
58b0: 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20  SQLITE_DENY.    
58c0: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
58d0: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
58e0: 63 68 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41  chsql {.    CREA
58f0: 54 45 20 54 52 49 47 47 45 52 20 72 32 20 44 45  TE TRIGGER r2 DE
5900: 4c 45 54 45 20 6f 6e 20 74 32 20 42 45 47 49 4e  LETE on t2 BEGIN
5910: 0a 20 20 20 20 20 20 20 20 53 45 4c 45 43 54 20  .        SELECT 
5920: 4e 55 4c 4c 3b 0a 20 20 20 20 45 4e 44 3b 0a 20  NULL;.    END;. 
5930: 20 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74   }.} {1 {not aut
5940: 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73  horized}}.do_tes
5950: 74 20 61 75 74 68 2d 31 2e 31 32 39 20 7b 0a 20  t auth-1.129 {. 
5960: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
5970: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
5980: 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 7d  e_master}.} {t2}
5990: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
59a0: 31 33 30 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  130 {.  proc aut
59b0: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
59c0: 32 20 61 72 67 33 20 61 72 67 34 20 61 72 67 73  2 arg3 arg4 args
59d0: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
59e0: 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52 45 41 54  e=="SQLITE_CREAT
59f0: 45 5f 54 52 49 47 47 45 52 22 7d 20 7b 0a 20 20  E_TRIGGER"} {.  
5a00: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
5a10: 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24  gs [list $arg1 $
5a20: 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34  arg2 $arg3 $arg4
5a30: 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  ].      return S
5a40: 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20  QLITE_IGNORE.   
5a50: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
5a60: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
5a70: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 43 52 45  tchsql {.    CRE
5a80: 41 54 45 20 54 52 49 47 47 45 52 20 72 32 20 44  ATE TRIGGER r2 D
5a90: 45 4c 45 54 45 20 6f 6e 20 74 32 20 42 45 47 49  ELETE on t2 BEGI
5aa0: 4e 0a 20 20 20 20 20 20 20 20 53 45 4c 45 43 54  N.        SELECT
5ab0: 20 4e 55 4c 4c 3b 0a 20 20 20 20 45 4e 44 3b 0a   NULL;.    END;.
5ac0: 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f    }.} {0 {}}.do_
5ad0: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 33 31 20  test auth-1.131 
5ae0: 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72  {.  set ::authar
5af0: 67 73 0a 7d 20 7b 72 32 20 74 32 20 6d 61 69 6e  gs.} {r2 t2 main
5b00: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
5b10: 68 2d 31 2e 31 33 32 20 7b 0a 20 20 65 78 65 63  h-1.132 {.  exec
5b20: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
5b30: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
5b40: 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a 64 6f 5f 74  ter}.} {t2}.do_t
5b50: 65 73 74 20 61 75 74 68 2d 31 2e 31 33 33 20 7b  est auth-1.133 {
5b60: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
5b70: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
5b80: 33 20 61 72 67 34 20 61 72 67 73 7d 20 7b 0a 20  3 arg4 args} {. 
5b90: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
5ba0: 51 4c 49 54 45 5f 49 4e 53 45 52 54 22 20 26 26  QLITE_INSERT" &&
5bb0: 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f   $arg1=="sqlite_
5bc0: 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20  master"} {.     
5bd0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49   return SQLITE_I
5be0: 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20  GNORE.    }.    
5bf0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
5c00: 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20  .  }.  catchsql 
5c10: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 52 49  {.    CREATE TRI
5c20: 47 47 45 52 20 72 32 20 44 45 4c 45 54 45 20 6f  GGER r2 DELETE o
5c30: 6e 20 74 32 20 42 45 47 49 4e 0a 20 20 20 20 20  n t2 BEGIN.     
5c40: 20 20 20 53 45 4c 45 43 54 20 4e 55 4c 4c 3b 0a     SELECT NULL;.
5c50: 20 20 20 20 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b      END;.  }.} {
5c60: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  0 {}}.do_test au
5c70: 74 68 2d 31 2e 31 33 34 20 7b 0a 20 20 65 78 65  th-1.134 {.  exe
5c80: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d  csql {SELECT nam
5c90: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  e FROM sqlite_ma
5ca0: 73 74 65 72 7d 0a 7d 20 7b 74 32 7d 0a 64 6f 5f  ster}.} {t2}.do_
5cb0: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 33 35 20  test auth-1.135 
5cc0: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
5cd0: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
5ce0: 67 33 20 61 72 67 34 20 61 72 67 73 7d 20 7b 0a  g3 arg4 args} {.
5cf0: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
5d00: 53 51 4c 49 54 45 5f 43 52 45 41 54 45 5f 54 52  SQLITE_CREATE_TR
5d10: 49 47 47 45 52 22 7d 20 7b 0a 20 20 20 20 20 20  IGGER"} {.      
5d20: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b  set ::authargs [
5d30: 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67 32  list $arg1 $arg2
5d40: 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20   $arg3 $arg4].  
5d50: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
5d60: 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 72  E_OK.    }.    r
5d70: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
5d80: 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b    }.  catchsql {
5d90: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
5da0: 45 20 74 78 28 69 64 29 3b 0a 20 20 20 20 43 52  E tx(id);.    CR
5db0: 45 41 54 45 20 54 52 49 47 47 45 52 20 72 32 20  EATE TRIGGER r2 
5dc0: 41 46 54 45 52 20 49 4e 53 45 52 54 20 4f 4e 20  AFTER INSERT ON 
5dd0: 74 32 20 42 45 47 49 4e 0a 20 20 20 20 20 20 20  t2 BEGIN.       
5de0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 78 20 56  INSERT INTO tx V
5df0: 41 4c 55 45 53 28 4e 45 57 2e 72 6f 77 69 64 29  ALUES(NEW.rowid)
5e00: 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 7d 0a 7d  ;.    END;.  }.}
5e10: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
5e20: 61 75 74 68 2d 31 2e 31 33 36 2e 31 20 7b 0a 20  auth-1.136.1 {. 
5e30: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a   set ::authargs.
5e40: 7d 20 7b 72 32 20 74 32 20 6d 61 69 6e 20 7b 7d  } {r2 t2 main {}
5e50: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
5e60: 2e 31 33 36 2e 32 20 7b 0a 20 20 65 78 65 63 73  .136.2 {.  execs
5e70: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
5e80: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
5e90: 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20 74 79  _master WHERE ty
5ea0: 70 65 3d 27 74 72 69 67 67 65 72 27 0a 20 20 7d  pe='trigger'.  }
5eb0: 0a 7d 20 7b 72 32 7d 0a 64 6f 5f 74 65 73 74 20  .} {r2}.do_test 
5ec0: 61 75 74 68 2d 31 2e 31 33 36 2e 33 20 7b 0a 20  auth-1.136.3 {. 
5ed0: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
5ee0: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
5ef0: 61 72 67 34 20 61 72 67 73 7d 20 7b 0a 20 20 20  arg4 args} {.   
5f00: 20 6c 61 70 70 65 6e 64 20 3a 3a 61 75 74 68 61   lappend ::autha
5f10: 72 67 73 20 24 63 6f 64 65 20 24 61 72 67 31 20  rgs $code $arg1 
5f20: 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67  $arg2 $arg3 $arg
5f30: 34 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  4.    return SQL
5f40: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 73 65 74  ITE_OK.  }.  set
5f50: 20 3a 3a 61 75 74 68 61 72 67 73 20 7b 7d 0a 20   ::authargs {}. 
5f60: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 49   execsql {.    I
5f70: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41  NSERT INTO t2 VA
5f80: 4c 55 45 53 28 31 2c 32 2c 33 29 3b 0a 20 20 7d  LUES(1,2,3);.  }
5f90: 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67  .  set ::autharg
5fa0: 73 20 0a 7d 20 7b 53 51 4c 49 54 45 5f 49 4e 53  s .} {SQLITE_INS
5fb0: 45 52 54 20 74 32 20 7b 7d 20 6d 61 69 6e 20 7b  ERT t2 {} main {
5fc0: 7d 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 20  } SQLITE_INSERT 
5fd0: 74 78 20 7b 7d 20 6d 61 69 6e 20 72 32 20 53 51  tx {} main r2 SQ
5fe0: 4c 49 54 45 5f 52 45 41 44 20 74 32 20 52 4f 57  LITE_READ t2 ROW
5ff0: 49 44 20 6d 61 69 6e 20 72 32 7d 0a 64 6f 5f 74  ID main r2}.do_t
6000: 65 73 74 20 61 75 74 68 2d 31 2e 31 33 36 2e 34  est auth-1.136.4
6010: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
6020: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
6030: 20 74 78 3b 0a 20 20 7d 0a 7d 20 7b 33 7d 0a 64   tx;.  }.} {3}.d
6040: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 33  o_test auth-1.13
6050: 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  7 {.  execsql {S
6060: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
6070: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d  sqlite_master}.}
6080: 20 7b 74 32 20 74 78 20 72 32 7d 0a 64 6f 5f 74   {t2 tx r2}.do_t
6090: 65 73 74 20 61 75 74 68 2d 31 2e 31 33 38 20 7b  est auth-1.138 {
60a0: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
60b0: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
60c0: 33 20 61 72 67 34 20 61 72 67 73 7d 20 7b 0a 20  3 arg4 args} {. 
60d0: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
60e0: 51 4c 49 54 45 5f 43 52 45 41 54 45 5f 54 45 4d  QLITE_CREATE_TEM
60f0: 50 5f 54 52 49 47 47 45 52 22 7d 20 7b 0a 20 20  P_TRIGGER"} {.  
6100: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
6110: 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24  gs [list $arg1 $
6120: 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34  arg2 $arg3 $arg4
6130: 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  ].      return S
6140: 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d  QLITE_DENY.    }
6150: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
6160: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
6170: 68 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  hsql {.    CREAT
6180: 45 20 54 52 49 47 47 45 52 20 72 31 20 44 45 4c  E TRIGGER r1 DEL
6190: 45 54 45 20 6f 6e 20 74 31 20 42 45 47 49 4e 0a  ETE on t1 BEGIN.
61a0: 20 20 20 20 20 20 20 20 53 45 4c 45 43 54 20 4e          SELECT N
61b0: 55 4c 4c 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20  ULL;.    END;.  
61c0: 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68  }.} {1 {not auth
61d0: 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74  orized}}.do_test
61e0: 20 61 75 74 68 2d 31 2e 31 33 39 20 7b 0a 20 20   auth-1.139 {.  
61f0: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d  set ::authargs.}
6200: 20 7b 72 31 20 74 31 20 74 65 6d 70 20 7b 7d 7d   {r1 t1 temp {}}
6210: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
6220: 31 34 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  140 {.  execsql 
6230: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
6240: 4d 20 74 65 6d 70 2e 73 71 6c 69 74 65 5f 6d 61  M temp.sqlite_ma
6250: 73 74 65 72 7d 0a 7d 20 7b 74 31 7d 0a 64 6f 5f  ster}.} {t1}.do_
6260: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 34 31 20  test auth-1.141 
6270: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
6280: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
6290: 67 33 20 61 72 67 34 20 61 72 67 73 7d 20 7b 0a  g3 arg4 args} {.
62a0: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
62b0: 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 22 20 26  SQLITE_INSERT" &
62c0: 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65  & $arg1=="sqlite
62d0: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 7d 20 7b  _temp_master"} {
62e0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
62f0: 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a  LITE_DENY.    }.
6300: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
6310: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
6320: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
6330: 20 54 52 49 47 47 45 52 20 72 31 20 44 45 4c 45   TRIGGER r1 DELE
6340: 54 45 20 6f 6e 20 74 31 20 42 45 47 49 4e 0a 20  TE on t1 BEGIN. 
6350: 20 20 20 20 20 20 20 53 45 4c 45 43 54 20 4e 55         SELECT NU
6360: 4c 4c 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 7d  LL;.    END;.  }
6370: 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f  .} {1 {not autho
6380: 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20  rized}}.do_test 
6390: 61 75 74 68 2d 31 2e 31 34 32 20 7b 0a 20 20 65  auth-1.142 {.  e
63a0: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
63b0: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
63c0: 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b  temp_master}.} {
63d0: 74 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  t1}.do_test auth
63e0: 2d 31 2e 31 34 33 20 7b 0a 20 20 70 72 6f 63 20  -1.143 {.  proc 
63f0: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
6400: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 20 61  arg2 arg3 arg4 a
6410: 72 67 73 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rgs} {.    if {$
6420: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52  code=="SQLITE_CR
6430: 45 41 54 45 5f 54 45 4d 50 5f 54 52 49 47 47 45  EATE_TEMP_TRIGGE
6440: 52 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20  R"} {.      set 
6450: 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74  ::authargs [list
6460: 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72   $arg1 $arg2 $ar
6470: 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20  g3 $arg4].      
6480: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47  return SQLITE_IG
6490: 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72  NORE.    }.    r
64a0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
64b0: 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b    }.  catchsql {
64c0: 0a 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47  .    CREATE TRIG
64d0: 47 45 52 20 72 31 20 44 45 4c 45 54 45 20 6f 6e  GER r1 DELETE on
64e0: 20 74 31 20 42 45 47 49 4e 0a 20 20 20 20 20 20   t1 BEGIN.      
64f0: 20 20 53 45 4c 45 43 54 20 4e 55 4c 4c 3b 0a 20    SELECT NULL;. 
6500: 20 20 20 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 30     END;.  }.} {0
6510: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
6520: 68 2d 31 2e 31 34 34 20 7b 0a 20 20 73 65 74 20  h-1.144 {.  set 
6530: 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 72 31  ::authargs.} {r1
6540: 20 74 31 20 74 65 6d 70 20 7b 7d 7d 0a 64 6f 5f   t1 temp {}}.do_
6550: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 34 35 20  test auth-1.145 
6560: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
6570: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 74 65  ECT name FROM te
6580: 6d 70 2e 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  mp.sqlite_master
6590: 7d 0a 7d 20 7b 74 31 7d 0a 64 6f 5f 74 65 73 74  }.} {t1}.do_test
65a0: 20 61 75 74 68 2d 31 2e 31 34 36 20 7b 0a 20 20   auth-1.146 {.  
65b0: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
65c0: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
65d0: 72 67 34 20 61 72 67 73 7d 20 7b 0a 20 20 20 20  rg4 args} {.    
65e0: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
65f0: 54 45 5f 49 4e 53 45 52 54 22 20 26 26 20 24 61  TE_INSERT" && $a
6600: 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 74 65 6d  rg1=="sqlite_tem
6610: 70 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20  p_master"} {.   
6620: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
6630: 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20  _IGNORE.    }.  
6640: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
6650: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
6660: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
6670: 52 49 47 47 45 52 20 72 31 20 44 45 4c 45 54 45  RIGGER r1 DELETE
6680: 20 6f 6e 20 74 31 20 42 45 47 49 4e 0a 20 20 20   on t1 BEGIN.   
6690: 20 20 20 20 20 53 45 4c 45 43 54 20 4e 55 4c 4c       SELECT NULL
66a0: 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 7d 0a 7d  ;.    END;.  }.}
66b0: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
66c0: 61 75 74 68 2d 31 2e 31 34 37 20 7b 0a 20 20 65  auth-1.147 {.  e
66d0: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
66e0: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
66f0: 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b  temp_master}.} {
6700: 74 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  t1}.do_test auth
6710: 2d 31 2e 31 34 38 20 7b 0a 20 20 70 72 6f 63 20  -1.148 {.  proc 
6720: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
6730: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 20 61  arg2 arg3 arg4 a
6740: 72 67 73 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rgs} {.    if {$
6750: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52  code=="SQLITE_CR
6760: 45 41 54 45 5f 54 45 4d 50 5f 54 52 49 47 47 45  EATE_TEMP_TRIGGE
6770: 52 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20  R"} {.      set 
6780: 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74  ::authargs [list
6790: 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72   $arg1 $arg2 $ar
67a0: 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20  g3 $arg4].      
67b0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
67c0: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
67d0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
67e0: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
67f0: 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20   CREATE TRIGGER 
6800: 72 31 20 44 45 4c 45 54 45 20 6f 6e 20 74 31 20  r1 DELETE on t1 
6810: 42 45 47 49 4e 0a 20 20 20 20 20 20 20 20 53 45  BEGIN.        SE
6820: 4c 45 43 54 20 4e 55 4c 4c 3b 0a 20 20 20 20 45  LECT NULL;.    E
6830: 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d  ND;.  }.} {0 {}}
6840: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
6850: 31 34 39 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75  149 {.  set ::au
6860: 74 68 61 72 67 73 0a 7d 20 7b 72 31 20 74 31 20  thargs.} {r1 t1 
6870: 74 65 6d 70 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  temp {}}.do_test
6880: 20 61 75 74 68 2d 31 2e 31 35 30 20 7b 0a 20 20   auth-1.150 {.  
6890: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
68a0: 6e 61 6d 65 20 46 52 4f 4d 20 74 65 6d 70 2e 73  name FROM temp.s
68b0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20  qlite_master}.} 
68c0: 7b 74 31 20 72 31 7d 0a 0a 64 6f 5f 74 65 73 74  {t1 r1}..do_test
68d0: 20 61 75 74 68 2d 31 2e 31 35 31 20 7b 0a 20 20   auth-1.151 {.  
68e0: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
68f0: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
6900: 72 67 34 20 61 72 67 73 7d 20 7b 0a 20 20 20 20  rg4 args} {.    
6910: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
6920: 54 45 5f 44 45 4c 45 54 45 22 20 26 26 20 24 61  TE_DELETE" && $a
6930: 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 6d 61 73  rg1=="sqlite_mas
6940: 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 72 65  ter"} {.      re
6950: 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59  turn SQLITE_DENY
6960: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
6970: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
6980: 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50    catchsql {DROP
6990: 20 54 52 49 47 47 45 52 20 72 32 7d 0a 7d 20 7b   TRIGGER r2}.} {
69a0: 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65  1 {not authorize
69b0: 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  d}}.do_test auth
69c0: 2d 31 2e 31 35 32 20 7b 0a 20 20 65 78 65 63 73  -1.152 {.  execs
69d0: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
69e0: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
69f0: 65 72 7d 0a 7d 20 7b 74 32 20 74 78 20 72 32 7d  er}.} {t2 tx r2}
6a00: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
6a10: 31 35 33 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  153 {.  proc aut
6a20: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
6a30: 32 20 61 72 67 33 20 61 72 67 34 20 61 72 67 73  2 arg3 arg4 args
6a40: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
6a50: 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f 50 5f  e=="SQLITE_DROP_
6a60: 54 52 49 47 47 45 52 22 7d 20 7b 0a 20 20 20 20  TRIGGER"} {.    
6a70: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
6a80: 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72   [list $arg1 $ar
6a90: 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a  g2 $arg3 $arg4].
6aa0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
6ab0: 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20  ITE_DENY.    }. 
6ac0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
6ad0: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
6ae0: 71 6c 20 7b 44 52 4f 50 20 54 52 49 47 47 45 52  ql {DROP TRIGGER
6af0: 20 72 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61   r2}.} {1 {not a
6b00: 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74  uthorized}}.do_t
6b10: 65 73 74 20 61 75 74 68 2d 31 2e 31 35 34 20 7b  est auth-1.154 {
6b20: 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67  .  set ::autharg
6b30: 73 0a 7d 20 7b 72 32 20 74 32 20 6d 61 69 6e 20  s.} {r2 t2 main 
6b40: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
6b50: 2d 31 2e 31 35 35 20 7b 0a 20 20 65 78 65 63 73  -1.155 {.  execs
6b60: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
6b70: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
6b80: 65 72 7d 0a 7d 20 7b 74 32 20 74 78 20 72 32 7d  er}.} {t2 tx r2}
6b90: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
6ba0: 31 35 36 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  156 {.  proc aut
6bb0: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
6bc0: 32 20 61 72 67 33 20 61 72 67 34 20 61 72 67 73  2 arg3 arg4 args
6bd0: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
6be0: 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45 54  e=="SQLITE_DELET
6bf0: 45 22 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71  E" && $arg1=="sq
6c00: 6c 69 74 65 5f 6d 61 73 74 65 72 22 7d 20 7b 0a  lite_master"} {.
6c10: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
6c20: 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d  ITE_IGNORE.    }
6c30: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
6c40: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
6c50: 68 73 71 6c 20 7b 44 52 4f 50 20 54 52 49 47 47  hsql {DROP TRIGG
6c60: 45 52 20 72 32 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a  ER r2}.} {0 {}}.
6c70: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
6c80: 35 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  57 {.  execsql {
6c90: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
6ca0: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a   sqlite_master}.
6cb0: 7d 20 7b 74 32 20 74 78 20 72 32 7d 0a 64 6f 5f  } {t2 tx r2}.do_
6cc0: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 35 38 20  test auth-1.158 
6cd0: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
6ce0: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
6cf0: 67 33 20 61 72 67 34 20 61 72 67 73 7d 20 7b 0a  g3 arg4 args} {.
6d00: 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22      if {$code=="
6d10: 53 51 4c 49 54 45 5f 44 52 4f 50 5f 54 52 49 47  SQLITE_DROP_TRIG
6d20: 47 45 52 22 7d 20 7b 0a 20 20 20 20 20 20 73 65  GER"} {.      se
6d30: 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69  t ::authargs [li
6d40: 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24  st $arg1 $arg2 $
6d50: 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20  arg3 $arg4].    
6d60: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
6d70: 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20  IGNORE.    }.   
6d80: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
6d90: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
6da0: 20 7b 44 52 4f 50 20 54 52 49 47 47 45 52 20 72   {DROP TRIGGER r
6db0: 32 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74  2}.} {0 {}}.do_t
6dc0: 65 73 74 20 61 75 74 68 2d 31 2e 31 35 39 20 7b  est auth-1.159 {
6dd0: 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67  .  set ::autharg
6de0: 73 0a 7d 20 7b 72 32 20 74 32 20 6d 61 69 6e 20  s.} {r2 t2 main 
6df0: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
6e00: 2d 31 2e 31 36 30 20 7b 0a 20 20 65 78 65 63 73  -1.160 {.  execs
6e10: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
6e20: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
6e30: 65 72 7d 0a 7d 20 7b 74 32 20 74 78 20 72 32 7d  er}.} {t2 tx r2}
6e40: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
6e50: 31 36 31 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  161 {.  proc aut
6e60: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
6e70: 32 20 61 72 67 33 20 61 72 67 34 20 61 72 67 73  2 arg3 arg4 args
6e80: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
6e90: 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f 50 5f  e=="SQLITE_DROP_
6ea0: 54 52 49 47 47 45 52 22 7d 20 7b 0a 20 20 20 20  TRIGGER"} {.    
6eb0: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
6ec0: 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72   [list $arg1 $ar
6ed0: 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a  g2 $arg3 $arg4].
6ee0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
6ef0: 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20  ITE_OK.    }.   
6f00: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
6f10: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
6f20: 20 7b 44 52 4f 50 20 54 52 49 47 47 45 52 20 72   {DROP TRIGGER r
6f30: 32 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74  2}.} {0 {}}.do_t
6f40: 65 73 74 20 61 75 74 68 2d 31 2e 31 36 32 20 7b  est auth-1.162 {
6f50: 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67  .  set ::autharg
6f60: 73 0a 7d 20 7b 72 32 20 74 32 20 6d 61 69 6e 20  s.} {r2 t2 main 
6f70: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
6f80: 2d 31 2e 31 36 33 20 7b 0a 20 20 65 78 65 63 73  -1.163 {.  execs
6f90: 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20 54 41  ql {.    DROP TA
6fa0: 42 4c 45 20 74 78 3b 0a 20 20 20 20 44 45 4c 45  BLE tx;.    DELE
6fb0: 54 45 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45  TE FROM t2 WHERE
6fc0: 20 61 3d 31 20 41 4e 44 20 62 3d 32 20 41 4e 44   a=1 AND b=2 AND
6fd0: 20 63 3d 33 3b 0a 20 20 20 20 53 45 4c 45 43 54   c=3;.    SELECT
6fe0: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
6ff0: 65 5f 6d 61 73 74 65 72 3b 0a 20 20 7d 0a 7d 20  e_master;.  }.} 
7000: 7b 74 32 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 75  {t2}..do_test au
7010: 74 68 2d 31 2e 31 36 34 20 7b 0a 20 20 70 72 6f  th-1.164 {.  pro
7020: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
7030: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
7040: 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 69 66 20   args} {.    if 
7050: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
7060: 44 45 4c 45 54 45 22 20 26 26 20 24 61 72 67 31  DELETE" && $arg1
7070: 3d 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  =="sqlite_temp_m
7080: 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20  aster"} {.      
7090: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45  return SQLITE_DE
70a0: 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  NY.    }.    ret
70b0: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
70c0: 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52  }.  catchsql {DR
70d0: 4f 50 20 54 52 49 47 47 45 52 20 72 31 7d 0a 7d  OP TRIGGER r1}.}
70e0: 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69   {1 {not authori
70f0: 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  zed}}.do_test au
7100: 74 68 2d 31 2e 31 36 35 20 7b 0a 20 20 65 78 65  th-1.165 {.  exe
7110: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d  csql {SELECT nam
7120: 65 20 46 52 4f 4d 20 74 65 6d 70 2e 73 71 6c 69  e FROM temp.sqli
7130: 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31  te_master}.} {t1
7140: 20 72 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   r1}.do_test aut
7150: 68 2d 31 2e 31 36 36 20 7b 0a 20 20 70 72 6f 63  h-1.166 {.  proc
7160: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
7170: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 20   arg2 arg3 arg4 
7180: 61 72 67 73 7d 20 7b 0a 20 20 20 20 69 66 20 7b  args} {.    if {
7190: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44  $code=="SQLITE_D
71a0: 52 4f 50 5f 54 45 4d 50 5f 54 52 49 47 47 45 52  ROP_TEMP_TRIGGER
71b0: 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a  "} {.      set :
71c0: 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20  :authargs [list 
71d0: 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67  $arg1 $arg2 $arg
71e0: 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72  3 $arg4].      r
71f0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e  eturn SQLITE_DEN
7200: 59 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  Y.    }.    retu
7210: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
7220: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f  .  catchsql {DRO
7230: 50 20 54 52 49 47 47 45 52 20 72 31 7d 0a 7d 20  P TRIGGER r1}.} 
7240: 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a  {1 {not authoriz
7250: 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  ed}}.do_test aut
7260: 68 2d 31 2e 31 36 37 20 7b 0a 20 20 73 65 74 20  h-1.167 {.  set 
7270: 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 72 31  ::authargs.} {r1
7280: 20 74 31 20 74 65 6d 70 20 7b 7d 7d 0a 64 6f 5f   t1 temp {}}.do_
7290: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 36 38 20  test auth-1.168 
72a0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
72b0: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
72c0: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
72d0: 7d 0a 7d 20 7b 74 31 20 72 31 7d 0a 64 6f 5f 74  }.} {t1 r1}.do_t
72e0: 65 73 74 20 61 75 74 68 2d 31 2e 31 36 39 20 7b  est auth-1.169 {
72f0: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
7300: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
7310: 33 20 61 72 67 34 20 61 72 67 73 7d 20 7b 0a 20  3 arg4 args} {. 
7320: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
7330: 51 4c 49 54 45 5f 44 45 4c 45 54 45 22 20 26 26  QLITE_DELETE" &&
7340: 20 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f   $arg1=="sqlite_
7350: 74 65 6d 70 5f 6d 61 73 74 65 72 22 7d 20 7b 0a  temp_master"} {.
7360: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
7370: 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d  ITE_IGNORE.    }
7380: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
7390: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
73a0: 68 73 71 6c 20 7b 44 52 4f 50 20 54 52 49 47 47  hsql {DROP TRIGG
73b0: 45 52 20 72 31 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a  ER r1}.} {0 {}}.
73c0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
73d0: 37 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  70 {.  execsql {
73e0: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
73f0: 20 74 65 6d 70 2e 73 71 6c 69 74 65 5f 6d 61 73   temp.sqlite_mas
7400: 74 65 72 7d 0a 7d 20 7b 74 31 20 72 31 7d 0a 64  ter}.} {t1 r1}.d
7410: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 37  o_test auth-1.17
7420: 31 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  1 {.  proc auth 
7430: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
7440: 61 72 67 33 20 61 72 67 34 20 61 72 67 73 7d 20  arg3 arg4 args} 
7450: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
7460: 3d 22 53 51 4c 49 54 45 5f 44 52 4f 50 5f 54 45  ="SQLITE_DROP_TE
7470: 4d 50 5f 54 52 49 47 47 45 52 22 7d 20 7b 0a 20  MP_TRIGGER"} {. 
7480: 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61       set ::autha
7490: 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20  rgs [list $arg1 
74a0: 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67  $arg2 $arg3 $arg
74b0: 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  4].      return 
74c0: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20  SQLITE_IGNORE.  
74d0: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
74e0: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
74f0: 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54 52  atchsql {DROP TR
7500: 49 47 47 45 52 20 72 31 7d 0a 7d 20 7b 30 20 7b  IGGER r1}.} {0 {
7510: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
7520: 31 2e 31 37 32 20 7b 0a 20 20 73 65 74 20 3a 3a  1.172 {.  set ::
7530: 61 75 74 68 61 72 67 73 0a 7d 20 7b 72 31 20 74  authargs.} {r1 t
7540: 31 20 74 65 6d 70 20 7b 7d 7d 0a 64 6f 5f 74 65  1 temp {}}.do_te
7550: 73 74 20 61 75 74 68 2d 31 2e 31 37 33 20 7b 0a  st auth-1.173 {.
7560: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
7570: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
7580: 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a  te_temp_master}.
7590: 7d 20 7b 74 31 20 72 31 7d 0a 64 6f 5f 74 65 73  } {t1 r1}.do_tes
75a0: 74 20 61 75 74 68 2d 31 2e 31 37 34 20 7b 0a 20  t auth-1.174 {. 
75b0: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
75c0: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
75d0: 61 72 67 34 20 61 72 67 73 7d 20 7b 0a 20 20 20  arg4 args} {.   
75e0: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
75f0: 49 54 45 5f 44 52 4f 50 5f 54 45 4d 50 5f 54 52  ITE_DROP_TEMP_TR
7600: 49 47 47 45 52 22 7d 20 7b 0a 20 20 20 20 20 20  IGGER"} {.      
7610: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b  set ::authargs [
7620: 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67 32  list $arg1 $arg2
7630: 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20   $arg3 $arg4].  
7640: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
7650: 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 72  E_OK.    }.    r
7660: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
7670: 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b    }.  catchsql {
7680: 44 52 4f 50 20 54 52 49 47 47 45 52 20 72 31 7d  DROP TRIGGER r1}
7690: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
76a0: 74 20 61 75 74 68 2d 31 2e 31 37 35 20 7b 0a 20  t auth-1.175 {. 
76b0: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a   set ::authargs.
76c0: 7d 20 7b 72 31 20 74 31 20 74 65 6d 70 20 7b 7d  } {r1 t1 temp {}
76d0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
76e0: 2e 31 37 36 20 7b 0a 20 20 65 78 65 63 73 71 6c  .176 {.  execsql
76f0: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
7700: 4f 4d 20 74 65 6d 70 2e 73 71 6c 69 74 65 5f 6d  OM temp.sqlite_m
7710: 61 73 74 65 72 7d 0a 7d 20 7b 74 31 7d 0a 7d 20  aster}.} {t1}.} 
7720: 3b 23 20 69 66 63 61 70 61 62 6c 65 20 74 72 69  ;# ifcapable tri
7730: 67 67 65 72 0a 0a 64 6f 5f 74 65 73 74 20 61 75  gger..do_test au
7740: 74 68 2d 31 2e 31 37 37 20 7b 0a 20 20 70 72 6f  th-1.177 {.  pro
7750: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
7760: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
7770: 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 69 66 20   args} {.    if 
7780: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
7790: 43 52 45 41 54 45 5f 49 4e 44 45 58 22 7d 20 7b  CREATE_INDEX"} {
77a0: 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74  .      set ::aut
77b0: 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67  hargs [list $arg
77c0: 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61  1 $arg2 $arg3 $a
77d0: 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72  rg4].      retur
77e0: 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20  n SQLITE_DENY.  
77f0: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
7800: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
7810: 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45 20  atchsql {CREATE 
7820: 49 4e 44 45 58 20 69 32 20 4f 4e 20 74 32 28 61  INDEX i2 ON t2(a
7830: 29 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74  )}.} {1 {not aut
7840: 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73  horized}}.do_tes
7850: 74 20 61 75 74 68 2d 31 2e 31 37 38 20 7b 0a 20  t auth-1.178 {. 
7860: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a   set ::authargs.
7870: 7d 20 7b 69 32 20 74 32 20 6d 61 69 6e 20 7b 7d  } {i2 t2 main {}
7880: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
7890: 2e 31 37 39 20 7b 0a 20 20 65 78 65 63 73 71 6c  .179 {.  execsql
78a0: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
78b0: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
78c0: 7d 0a 7d 20 7b 74 32 7d 0a 64 6f 5f 74 65 73 74  }.} {t2}.do_test
78d0: 20 61 75 74 68 2d 31 2e 31 38 30 20 7b 0a 20 20   auth-1.180 {.  
78e0: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
78f0: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
7900: 72 67 34 20 61 72 67 73 7d 20 7b 0a 20 20 20 20  rg4 args} {.    
7910: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
7920: 54 45 5f 49 4e 53 45 52 54 22 20 26 26 20 24 61  TE_INSERT" && $a
7930: 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 6d 61 73  rg1=="sqlite_mas
7940: 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 72 65  ter"} {.      re
7950: 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59  turn SQLITE_DENY
7960: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
7970: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
7980: 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41    catchsql {CREA
7990: 54 45 20 49 4e 44 45 58 20 69 32 20 4f 4e 20 74  TE INDEX i2 ON t
79a0: 32 28 61 29 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20  2(a)}.} {1 {not 
79b0: 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f  authorized}}.do_
79c0: 74 65 73 74 20 61 75 74 68 2d 31 2e 31 38 31 20  test auth-1.181 
79d0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
79e0: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
79f0: 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b  lite_master}.} {
7a00: 74 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  t2}.do_test auth
7a10: 2d 31 2e 31 38 32 20 7b 0a 20 20 70 72 6f 63 20  -1.182 {.  proc 
7a20: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
7a30: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 20 61  arg2 arg3 arg4 a
7a40: 72 67 73 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rgs} {.    if {$
7a50: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52  code=="SQLITE_CR
7a60: 45 41 54 45 5f 49 4e 44 45 58 22 7d 20 7b 0a 20  EATE_INDEX"} {. 
7a70: 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61       set ::autha
7a80: 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20  rgs [list $arg1 
7a90: 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67  $arg2 $arg3 $arg
7aa0: 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  4].      return 
7ab0: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20  SQLITE_IGNORE.  
7ac0: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
7ad0: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
7ae0: 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45 20  atchsql {CREATE 
7af0: 49 4e 44 45 58 20 69 32 20 4f 4e 20 74 32 28 62  INDEX i2 ON t2(b
7b00: 29 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74  )}.} {0 {}}.do_t
7b10: 65 73 74 20 61 75 74 68 2d 31 2e 31 38 33 20 7b  est auth-1.183 {
7b20: 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67  .  set ::autharg
7b30: 73 0a 7d 20 7b 69 32 20 74 32 20 6d 61 69 6e 20  s.} {i2 t2 main 
7b40: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
7b50: 2d 31 2e 31 38 34 20 7b 0a 20 20 65 78 65 63 73  -1.184 {.  execs
7b60: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
7b70: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
7b80: 65 72 7d 0a 7d 20 7b 74 32 7d 0a 64 6f 5f 74 65  er}.} {t2}.do_te
7b90: 73 74 20 61 75 74 68 2d 31 2e 31 38 35 20 7b 0a  st auth-1.185 {.
7ba0: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
7bb0: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
7bc0: 20 61 72 67 34 20 61 72 67 73 7d 20 7b 0a 20 20   arg4 args} {.  
7bd0: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
7be0: 4c 49 54 45 5f 49 4e 53 45 52 54 22 20 26 26 20  LITE_INSERT" && 
7bf0: 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 6d  $arg1=="sqlite_m
7c00: 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20  aster"} {.      
7c10: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47  return SQLITE_IG
7c20: 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72  NORE.    }.    r
7c30: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
7c40: 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b    }.  catchsql {
7c50: 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 32 20  CREATE INDEX i2 
7c60: 4f 4e 20 74 32 28 62 29 7d 0a 7d 20 7b 30 20 7b  ON t2(b)}.} {0 {
7c70: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
7c80: 31 2e 31 38 36 20 7b 0a 20 20 65 78 65 63 73 71  1.186 {.  execsq
7c90: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
7ca0: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
7cb0: 72 7d 0a 7d 20 7b 74 32 7d 0a 64 6f 5f 74 65 73  r}.} {t2}.do_tes
7cc0: 74 20 61 75 74 68 2d 31 2e 31 38 37 20 7b 0a 20  t auth-1.187 {. 
7cd0: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
7ce0: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
7cf0: 61 72 67 34 20 61 72 67 73 7d 20 7b 0a 20 20 20  arg4 args} {.   
7d00: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
7d10: 49 54 45 5f 43 52 45 41 54 45 5f 49 4e 44 45 58  ITE_CREATE_INDEX
7d20: 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a  "} {.      set :
7d30: 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20  :authargs [list 
7d40: 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67  $arg1 $arg2 $arg
7d50: 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72  3 $arg4].      r
7d60: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
7d70: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
7d80: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
7d90: 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54   catchsql {CREAT
7da0: 45 20 49 4e 44 45 58 20 69 32 20 4f 4e 20 74 32  E INDEX i2 ON t2
7db0: 28 61 29 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f  (a)}.} {0 {}}.do
7dc0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 38 38  _test auth-1.188
7dd0: 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61   {.  set ::autha
7de0: 72 67 73 0a 7d 20 7b 69 32 20 74 32 20 6d 61 69  rgs.} {i2 t2 mai
7df0: 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  n {}}.do_test au
7e00: 74 68 2d 31 2e 31 38 39 20 7b 0a 20 20 65 78 65  th-1.189 {.  exe
7e10: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d  csql {SELECT nam
7e20: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  e FROM sqlite_ma
7e30: 73 74 65 72 7d 0a 7d 20 7b 74 32 20 69 32 7d 0a  ster}.} {t2 i2}.
7e40: 0a 69 66 63 61 70 61 62 6c 65 20 74 65 6d 70 64  .ifcapable tempd
7e50: 62 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 61 75  b {.  do_test au
7e60: 74 68 2d 31 2e 31 39 30 20 7b 0a 20 20 20 20 70  th-1.190 {.    p
7e70: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
7e80: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
7e90: 67 34 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 20  g4 args} {.     
7ea0: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
7eb0: 49 54 45 5f 43 52 45 41 54 45 5f 54 45 4d 50 5f  ITE_CREATE_TEMP_
7ec0: 49 4e 44 45 58 22 7d 20 7b 0a 20 20 20 20 20 20  INDEX"} {.      
7ed0: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
7ee0: 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72   [list $arg1 $ar
7ef0: 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a  g2 $arg3 $arg4].
7f00: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
7f10: 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 20  QLITE_DENY.     
7f20: 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   }.      return 
7f30: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a  SQLITE_OK.    }.
7f40: 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52      catchsql {CR
7f50: 45 41 54 45 20 49 4e 44 45 58 20 69 31 20 4f 4e  EATE INDEX i1 ON
7f60: 20 74 31 28 61 29 7d 0a 20 20 7d 20 7b 31 20 7b   t1(a)}.  } {1 {
7f70: 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d  not authorized}}
7f80: 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  .  do_test auth-
7f90: 31 2e 31 39 31 20 7b 0a 20 20 20 20 73 65 74 20  1.191 {.    set 
7fa0: 3a 3a 61 75 74 68 61 72 67 73 0a 20 20 7d 20 7b  ::authargs.  } {
7fb0: 69 31 20 74 31 20 74 65 6d 70 20 7b 7d 7d 0a 20  i1 t1 temp {}}. 
7fc0: 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e   do_test auth-1.
7fd0: 31 39 32 20 7b 0a 20 20 20 20 65 78 65 63 73 71  192 {.    execsq
7fe0: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
7ff0: 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f  ROM sqlite_temp_
8000: 6d 61 73 74 65 72 7d 0a 20 20 7d 20 7b 74 31 7d  master}.  } {t1}
8010: 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  .  do_test auth-
8020: 31 2e 31 39 33 20 7b 0a 20 20 20 20 70 72 6f 63  1.193 {.    proc
8030: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
8040: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 20   arg2 arg3 arg4 
8050: 61 72 67 73 7d 20 7b 0a 20 20 20 20 20 20 69 66  args} {.      if
8060: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
8070: 5f 49 4e 53 45 52 54 22 20 26 26 20 24 61 72 67  _INSERT" && $arg
8080: 31 3d 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f  1=="sqlite_temp_
8090: 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20  master"} {.     
80a0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
80b0: 5f 44 45 4e 59 0a 20 20 20 20 20 20 7d 0a 20 20  _DENY.      }.  
80c0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
80d0: 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63  E_OK.    }.    c
80e0: 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45 20  atchsql {CREATE 
80f0: 49 4e 44 45 58 20 69 31 20 4f 4e 20 74 31 28 62  INDEX i1 ON t1(b
8100: 29 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f 74 20 61  )}.  } {1 {not a
8110: 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 20 20 64 6f  uthorized}}.  do
8120: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 39 34  _test auth-1.194
8130: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
8140: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
8150: 20 74 65 6d 70 2e 73 71 6c 69 74 65 5f 6d 61 73   temp.sqlite_mas
8160: 74 65 72 7d 0a 20 20 7d 20 7b 74 31 7d 0a 20 20  ter}.  } {t1}.  
8170: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
8180: 39 35 20 7b 0a 20 20 20 20 70 72 6f 63 20 61 75  95 {.    proc au
8190: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
81a0: 67 32 20 61 72 67 33 20 61 72 67 34 20 61 72 67  g2 arg3 arg4 arg
81b0: 73 7d 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24  s} {.      if {$
81c0: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 43 52  code=="SQLITE_CR
81d0: 45 41 54 45 5f 54 45 4d 50 5f 49 4e 44 45 58 22  EATE_TEMP_INDEX"
81e0: 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20  } {.        set 
81f0: 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74  ::authargs [list
8200: 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72   $arg1 $arg2 $ar
8210: 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20  g3 $arg4].      
8220: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
8230: 49 47 4e 4f 52 45 0a 20 20 20 20 20 20 7d 0a 20  IGNORE.      }. 
8240: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
8250: 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20  TE_OK.    }.    
8260: 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45  catchsql {CREATE
8270: 20 49 4e 44 45 58 20 69 31 20 4f 4e 20 74 31 28   INDEX i1 ON t1(
8280: 62 29 7d 0a 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20  b)}.  } {0 {}}. 
8290: 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e   do_test auth-1.
82a0: 31 39 36 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a  196 {.    set ::
82b0: 61 75 74 68 61 72 67 73 0a 20 20 7d 20 7b 69 31  authargs.  } {i1
82c0: 20 74 31 20 74 65 6d 70 20 7b 7d 7d 0a 20 20 64   t1 temp {}}.  d
82d0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31 39  o_test auth-1.19
82e0: 37 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  7 {.    execsql 
82f0: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
8300: 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  M sqlite_temp_ma
8310: 73 74 65 72 7d 0a 20 20 7d 20 7b 74 31 7d 0a 20  ster}.  } {t1}. 
8320: 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e   do_test auth-1.
8330: 31 39 38 20 7b 0a 20 20 20 20 70 72 6f 63 20 61  198 {.    proc a
8340: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
8350: 72 67 32 20 61 72 67 33 20 61 72 67 34 20 61 72  rg2 arg3 arg4 ar
8360: 67 73 7d 20 7b 0a 20 20 20 20 20 20 69 66 20 7b  gs} {.      if {
8370: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 49  $code=="SQLITE_I
8380: 4e 53 45 52 54 22 20 26 26 20 24 61 72 67 31 3d  NSERT" && $arg1=
8390: 3d 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  ="sqlite_temp_ma
83a0: 73 74 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 20  ster"} {.       
83b0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49   return SQLITE_I
83c0: 47 4e 4f 52 45 0a 20 20 20 20 20 20 7d 0a 20 20  GNORE.      }.  
83d0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
83e0: 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63  E_OK.    }.    c
83f0: 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45 20  atchsql {CREATE 
8400: 49 4e 44 45 58 20 69 31 20 4f 4e 20 74 31 28 63  INDEX i1 ON t1(c
8410: 29 7d 0a 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20 20  )}.  } {0 {}}.  
8420: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 31  do_test auth-1.1
8430: 39 39 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  99 {.    execsql
8440: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
8450: 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  OM sqlite_temp_m
8460: 61 73 74 65 72 7d 0a 20 20 7d 20 7b 74 31 7d 0a  aster}.  } {t1}.
8470: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31    do_test auth-1
8480: 2e 32 30 30 20 7b 0a 20 20 20 20 70 72 6f 63 20  .200 {.    proc 
8490: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
84a0: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 20 61  arg2 arg3 arg4 a
84b0: 72 67 73 7d 20 7b 0a 20 20 20 20 20 20 69 66 20  rgs} {.      if 
84c0: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
84d0: 43 52 45 41 54 45 5f 54 45 4d 50 5f 49 4e 44 45  CREATE_TEMP_INDE
84e0: 58 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65  X"} {.        se
84f0: 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69  t ::authargs [li
8500: 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24  st $arg1 $arg2 $
8510: 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20  arg3 $arg4].    
8520: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
8530: 45 5f 4f 4b 0a 20 20 20 20 20 20 7d 0a 20 20 20  E_OK.      }.   
8540: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
8550: 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61  _OK.    }.    ca
8560: 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45 20 49  tchsql {CREATE I
8570: 4e 44 45 58 20 69 31 20 4f 4e 20 74 31 28 61 29  NDEX i1 ON t1(a)
8580: 7d 0a 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20 20 64  }.  } {0 {}}.  d
8590: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 30  o_test auth-1.20
85a0: 31 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a 61 75  1 {.    set ::au
85b0: 74 68 61 72 67 73 0a 20 20 7d 20 7b 69 31 20 74  thargs.  } {i1 t
85c0: 31 20 74 65 6d 70 20 7b 7d 7d 0a 20 20 64 6f 5f  1 temp {}}.  do_
85d0: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 30 32 20  test auth-1.202 
85e0: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53  {.    execsql {S
85f0: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
8600: 74 65 6d 70 2e 73 71 6c 69 74 65 5f 6d 61 73 74  temp.sqlite_mast
8610: 65 72 7d 0a 20 20 7d 20 7b 74 31 20 69 31 7d 0a  er}.  } {t1 i1}.
8620: 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }..do_test auth-
8630: 31 2e 32 30 33 20 7b 0a 20 20 70 72 6f 63 20 61  1.203 {.  proc a
8640: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
8650: 72 67 32 20 61 72 67 33 20 61 72 67 34 20 61 72  rg2 arg3 arg4 ar
8660: 67 73 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  gs} {.    if {$c
8670: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c  ode=="SQLITE_DEL
8680: 45 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d 22  ETE" && $arg1=="
8690: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 7d 20  sqlite_master"} 
86a0: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  {.      return S
86b0: 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d  QLITE_DENY.    }
86c0: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
86d0: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
86e0: 68 73 71 6c 20 7b 44 52 4f 50 20 49 4e 44 45 58  hsql {DROP INDEX
86f0: 20 69 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61   i2}.} {1 {not a
8700: 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74  uthorized}}.do_t
8710: 65 73 74 20 61 75 74 68 2d 31 2e 32 30 34 20 7b  est auth-1.204 {
8720: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
8730: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
8740: 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74  ite_master}.} {t
8750: 32 20 69 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75  2 i2}.do_test au
8760: 74 68 2d 31 2e 32 30 35 20 7b 0a 20 20 70 72 6f  th-1.205 {.  pro
8770: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
8780: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
8790: 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 69 66 20   args} {.    if 
87a0: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
87b0: 44 52 4f 50 5f 49 4e 44 45 58 22 7d 20 7b 0a 20  DROP_INDEX"} {. 
87c0: 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61       set ::autha
87d0: 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20  rgs [list $arg1 
87e0: 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67  $arg2 $arg3 $arg
87f0: 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  4].      return 
8800: 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20  SQLITE_DENY.    
8810: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
8820: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
8830: 63 68 73 71 6c 20 7b 44 52 4f 50 20 49 4e 44 45  chsql {DROP INDE
8840: 58 20 69 32 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20  X i2}.} {1 {not 
8850: 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f  authorized}}.do_
8860: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 30 36 20  test auth-1.206 
8870: 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72  {.  set ::authar
8880: 67 73 0a 7d 20 7b 69 32 20 74 32 20 6d 61 69 6e  gs.} {i2 t2 main
8890: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {}}.do_test aut
88a0: 68 2d 31 2e 32 30 37 20 7b 0a 20 20 65 78 65 63  h-1.207 {.  exec
88b0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
88c0: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
88d0: 74 65 72 7d 0a 7d 20 7b 74 32 20 69 32 7d 0a 64  ter}.} {t2 i2}.d
88e0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 30  o_test auth-1.20
88f0: 38 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  8 {.  proc auth 
8900: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
8910: 61 72 67 33 20 61 72 67 34 20 61 72 67 73 7d 20  arg3 arg4 args} 
8920: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
8930: 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 22  ="SQLITE_DELETE"
8940: 20 26 26 20 24 61 72 67 31 3d 3d 22 73 71 6c 69   && $arg1=="sqli
8950: 74 65 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20 20  te_master"} {.  
8960: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
8970: 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20  E_IGNORE.    }. 
8980: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
8990: 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73  _OK.  }.  catchs
89a0: 71 6c 20 7b 44 52 4f 50 20 49 4e 44 45 58 20 69  ql {DROP INDEX i
89b0: 32 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74  2}.} {0 {}}.do_t
89c0: 65 73 74 20 61 75 74 68 2d 31 2e 32 30 39 20 7b  est auth-1.209 {
89d0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
89e0: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
89f0: 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74  ite_master}.} {t
8a00: 32 20 69 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75  2 i2}.do_test au
8a10: 74 68 2d 31 2e 32 31 30 20 7b 0a 20 20 70 72 6f  th-1.210 {.  pro
8a20: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
8a30: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
8a40: 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 69 66 20   args} {.    if 
8a50: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
8a60: 44 52 4f 50 5f 49 4e 44 45 58 22 7d 20 7b 0a 20  DROP_INDEX"} {. 
8a70: 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61       set ::autha
8a80: 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20  rgs [list $arg1 
8a90: 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67  $arg2 $arg3 $arg
8aa0: 34 5d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  4].      return 
8ab0: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20  SQLITE_IGNORE.  
8ac0: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
8ad0: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
8ae0: 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 49 4e  atchsql {DROP IN
8af0: 44 45 58 20 69 32 7d 0a 7d 20 7b 30 20 7b 7d 7d  DEX i2}.} {0 {}}
8b00: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
8b10: 32 31 31 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75  211 {.  set ::au
8b20: 74 68 61 72 67 73 0a 7d 20 7b 69 32 20 74 32 20  thargs.} {i2 t2 
8b30: 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  main {}}.do_test
8b40: 20 61 75 74 68 2d 31 2e 32 31 32 20 7b 0a 20 20   auth-1.212 {.  
8b50: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
8b60: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
8b70: 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 32 20 69  _master}.} {t2 i
8b80: 32 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  2}.do_test auth-
8b90: 31 2e 32 31 33 20 7b 0a 20 20 70 72 6f 63 20 61  1.213 {.  proc a
8ba0: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
8bb0: 72 67 32 20 61 72 67 33 20 61 72 67 34 20 61 72  rg2 arg3 arg4 ar
8bc0: 67 73 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  gs} {.    if {$c
8bd0: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52 4f  ode=="SQLITE_DRO
8be0: 50 5f 49 4e 44 45 58 22 7d 20 7b 0a 20 20 20 20  P_INDEX"} {.    
8bf0: 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73    set ::authargs
8c00: 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72   [list $arg1 $ar
8c10: 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a  g2 $arg3 $arg4].
8c20: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
8c30: 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20  ITE_OK.    }.   
8c40: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
8c50: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
8c60: 20 7b 44 52 4f 50 20 49 4e 44 45 58 20 69 32 7d   {DROP INDEX i2}
8c70: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
8c80: 74 20 61 75 74 68 2d 31 2e 32 31 34 20 7b 0a 20  t auth-1.214 {. 
8c90: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a   set ::authargs.
8ca0: 7d 20 7b 69 32 20 74 32 20 6d 61 69 6e 20 7b 7d  } {i2 t2 main {}
8cb0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31  }.do_test auth-1
8cc0: 2e 32 31 35 20 7b 0a 20 20 65 78 65 63 73 71 6c  .215 {.  execsql
8cd0: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
8ce0: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
8cf0: 7d 0a 7d 20 7b 74 32 7d 0a 0a 69 66 63 61 70 61  }.} {t2}..ifcapa
8d00: 62 6c 65 20 74 65 6d 70 64 62 20 7b 0a 20 20 64  ble tempdb {.  d
8d10: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 31  o_test auth-1.21
8d20: 36 20 7b 0a 20 20 20 20 70 72 6f 63 20 61 75 74  6 {.    proc aut
8d30: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
8d40: 32 20 61 72 67 33 20 61 72 67 34 20 61 72 67 73  2 arg3 arg4 args
8d50: 7d 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 63  } {.      if {$c
8d60: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c  ode=="SQLITE_DEL
8d70: 45 54 45 22 20 26 26 20 24 61 72 67 31 3d 3d 22  ETE" && $arg1=="
8d80: 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
8d90: 65 72 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 72  er"} {.        r
8da0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e  eturn SQLITE_DEN
8db0: 59 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  Y.      }.      
8dc0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
8dd0: 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 74 63 68  .    }.    catch
8de0: 73 71 6c 20 7b 44 52 4f 50 20 49 4e 44 45 58 20  sql {DROP INDEX 
8df0: 69 31 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f 74 20  i1}.  } {1 {not 
8e00: 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 20 20 64  authorized}}.  d
8e10: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 31  o_test auth-1.21
8e20: 37 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  7 {.    execsql 
8e30: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
8e40: 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  M sqlite_temp_ma
8e50: 73 74 65 72 7d 0a 20 20 7d 20 7b 74 31 20 69 31  ster}.  } {t1 i1
8e60: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68  }.  do_test auth
8e70: 2d 31 2e 32 31 38 20 7b 0a 20 20 20 20 70 72 6f  -1.218 {.    pro
8e80: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
8e90: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
8ea0: 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 20 20 69   args} {.      i
8eb0: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
8ec0: 45 5f 44 52 4f 50 5f 54 45 4d 50 5f 49 4e 44 45  E_DROP_TEMP_INDE
8ed0: 58 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65  X"} {.        se
8ee0: 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69  t ::authargs [li
8ef0: 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24  st $arg1 $arg2 $
8f00: 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20  arg3 $arg4].    
8f10: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
8f20: 45 5f 44 45 4e 59 0a 20 20 20 20 20 20 7d 0a 20  E_DENY.      }. 
8f30: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
8f40: 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20  TE_OK.    }.    
8f50: 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 49  catchsql {DROP I
8f60: 4e 44 45 58 20 69 31 7d 0a 20 20 7d 20 7b 31 20  NDEX i1}.  } {1 
8f70: 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d  {not authorized}
8f80: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68  }.  do_test auth
8f90: 2d 31 2e 32 31 39 20 7b 0a 20 20 20 20 73 65 74  -1.219 {.    set
8fa0: 20 3a 3a 61 75 74 68 61 72 67 73 0a 20 20 7d 20   ::authargs.  } 
8fb0: 7b 69 31 20 74 31 20 74 65 6d 70 20 7b 7d 7d 0a  {i1 t1 temp {}}.
8fc0: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31    do_test auth-1
8fd0: 2e 32 32 30 20 7b 0a 20 20 20 20 65 78 65 63 73  .220 {.    execs
8fe0: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
8ff0: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70  FROM sqlite_temp
9000: 5f 6d 61 73 74 65 72 7d 0a 20 20 7d 20 7b 74 31  _master}.  } {t1
9010: 20 69 31 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61   i1}.  do_test a
9020: 75 74 68 2d 31 2e 32 32 31 20 7b 0a 20 20 20 20  uth-1.221 {.    
9030: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
9040: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
9050: 72 67 34 20 61 72 67 73 7d 20 7b 0a 20 20 20 20  rg4 args} {.    
9060: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
9070: 4c 49 54 45 5f 44 45 4c 45 54 45 22 20 26 26 20  LITE_DELETE" && 
9080: 24 61 72 67 31 3d 3d 22 73 71 6c 69 74 65 5f 74  $arg1=="sqlite_t
9090: 65 6d 70 5f 6d 61 73 74 65 72 22 7d 20 7b 0a 20  emp_master"} {. 
90a0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
90b0: 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20  LITE_IGNORE.    
90c0: 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e    }.      return
90d0: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d   SQLITE_OK.    }
90e0: 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 44  .    catchsql {D
90f0: 52 4f 50 20 49 4e 44 45 58 20 69 31 7d 0a 20 20  ROP INDEX i1}.  
9100: 7d 20 7b 30 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65  } {0 {}}.  do_te
9110: 73 74 20 61 75 74 68 2d 31 2e 32 32 32 20 7b 0a  st auth-1.222 {.
9120: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c      execsql {SEL
9130: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 74 65  ECT name FROM te
9140: 6d 70 2e 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  mp.sqlite_master
9150: 7d 0a 20 20 7d 20 7b 74 31 20 69 31 7d 0a 20 20  }.  } {t1 i1}.  
9160: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
9170: 32 33 20 7b 0a 20 20 20 20 70 72 6f 63 20 61 75  23 {.    proc au
9180: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
9190: 67 32 20 61 72 67 33 20 61 72 67 34 20 61 72 67  g2 arg3 arg4 arg
91a0: 73 7d 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24  s} {.      if {$
91b0: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 44 52  code=="SQLITE_DR
91c0: 4f 50 5f 54 45 4d 50 5f 49 4e 44 45 58 22 7d 20  OP_TEMP_INDEX"} 
91d0: 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a  {.        set ::
91e0: 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24  authargs [list $
91f0: 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33  arg1 $arg2 $arg3
9200: 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 20 20   $arg4].        
9210: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47  return SQLITE_IG
9220: 4e 4f 52 45 0a 20 20 20 20 20 20 7d 0a 20 20 20  NORE.      }.   
9230: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
9240: 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61  _OK.    }.    ca
9250: 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 49 4e 44  tchsql {DROP IND
9260: 45 58 20 69 31 7d 0a 20 20 7d 20 7b 30 20 7b 7d  EX i1}.  } {0 {}
9270: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68  }.  do_test auth
9280: 2d 31 2e 32 32 34 20 7b 0a 20 20 20 20 73 65 74  -1.224 {.    set
9290: 20 3a 3a 61 75 74 68 61 72 67 73 0a 20 20 7d 20   ::authargs.  } 
92a0: 7b 69 31 20 74 31 20 74 65 6d 70 20 7b 7d 7d 0a  {i1 t1 temp {}}.
92b0: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31    do_test auth-1
92c0: 2e 32 32 35 20 7b 0a 20 20 20 20 65 78 65 63 73  .225 {.    execs
92d0: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
92e0: 46 52 4f 4d 20 74 65 6d 70 2e 73 71 6c 69 74 65  FROM temp.sqlite
92f0: 5f 6d 61 73 74 65 72 7d 0a 20 20 7d 20 7b 74 31  _master}.  } {t1
9300: 20 69 31 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61   i1}.  do_test a
9310: 75 74 68 2d 31 2e 32 32 36 20 7b 0a 20 20 20 20  uth-1.226 {.    
9320: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
9330: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
9340: 72 67 34 20 61 72 67 73 7d 20 7b 0a 20 20 20 20  rg4 args} {.    
9350: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
9360: 4c 49 54 45 5f 44 52 4f 50 5f 54 45 4d 50 5f 49  LITE_DROP_TEMP_I
9370: 4e 44 45 58 22 7d 20 7b 0a 20 20 20 20 20 20 20  NDEX"} {.       
9380: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
9390: 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67  [list $arg1 $arg
93a0: 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20  2 $arg3 $arg4]. 
93b0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
93c0: 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 20 20 7d 0a  LITE_OK.      }.
93d0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
93e0: 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20  ITE_OK.    }.   
93f0: 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20   catchsql {DROP 
9400: 49 4e 44 45 58 20 69 31 7d 0a 20 20 7d 20 7b 30  INDEX i1}.  } {0
9410: 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61   {}}.  do_test a
9420: 75 74 68 2d 31 2e 32 32 37 20 7b 0a 20 20 20 20  uth-1.227 {.    
9430: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 20  set ::authargs. 
9440: 20 7d 20 7b 69 31 20 74 31 20 74 65 6d 70 20 7b   } {i1 t1 temp {
9450: 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74  }}.  do_test aut
9460: 68 2d 31 2e 32 32 38 20 7b 0a 20 20 20 20 65 78  h-1.228 {.    ex
9470: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61  ecsql {SELECT na
9480: 6d 65 20 46 52 4f 4d 20 74 65 6d 70 2e 73 71 6c  me FROM temp.sql
9490: 69 74 65 5f 6d 61 73 74 65 72 7d 0a 20 20 7d 20  ite_master}.  } 
94a0: 7b 74 31 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20  {t1}.}..do_test 
94b0: 61 75 74 68 2d 31 2e 32 32 39 20 7b 0a 20 20 70  auth-1.229 {.  p
94c0: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
94d0: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
94e0: 67 34 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 69  g4 args} {.    i
94f0: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
9500: 45 5f 50 52 41 47 4d 41 22 7d 20 7b 0a 20 20 20  E_PRAGMA"} {.   
9510: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
9520: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
9530: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
9540: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
9550: 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a  LITE_DENY.    }.
9560: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
9570: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
9580: 73 71 6c 20 7b 50 52 41 47 4d 41 20 66 75 6c 6c  sql {PRAGMA full
9590: 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 3d 6f 6e  _column_names=on
95a0: 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68  }.} {1 {not auth
95b0: 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74  orized}}.do_test
95c0: 20 61 75 74 68 2d 31 2e 32 33 30 20 7b 0a 20 20   auth-1.230 {.  
95d0: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d  set ::authargs.}
95e0: 20 7b 66 75 6c 6c 5f 63 6f 6c 75 6d 6e 5f 6e 61   {full_column_na
95f0: 6d 65 73 20 6f 6e 20 7b 7d 20 7b 7d 7d 0a 64 6f  mes on {} {}}.do
9600: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 33 31  _test auth-1.231
9610: 20 7b 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 53   {.  execsql2 {S
9620: 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 32 7d  ELECT a FROM t2}
9630: 0a 7d 20 7b 61 20 31 31 20 61 20 37 7d 0a 64 6f  .} {a 11 a 7}.do
9640: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 33 32  _test auth-1.232
9650: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
9660: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
9670: 72 67 33 20 61 72 67 34 20 61 72 67 73 7d 20 7b  rg3 arg4 args} {
9680: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
9690: 22 53 51 4c 49 54 45 5f 50 52 41 47 4d 41 22 7d  "SQLITE_PRAGMA"}
96a0: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61   {.      set ::a
96b0: 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61  uthargs [list $a
96c0: 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20  rg1 $arg2 $arg3 
96d0: 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74  $arg4].      ret
96e0: 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52  urn SQLITE_IGNOR
96f0: 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  E.    }.    retu
9700: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
9710: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 50 52 41  .  catchsql {PRA
9720: 47 4d 41 20 66 75 6c 6c 5f 63 6f 6c 75 6d 6e 5f  GMA full_column_
9730: 6e 61 6d 65 73 3d 6f 6e 7d 0a 7d 20 7b 30 20 7b  names=on}.} {0 {
9740: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
9750: 31 2e 32 33 33 20 7b 0a 20 20 73 65 74 20 3a 3a  1.233 {.  set ::
9760: 61 75 74 68 61 72 67 73 0a 7d 20 7b 66 75 6c 6c  authargs.} {full
9770: 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 20 6f 6e  _column_names on
9780: 20 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {} {}}.do_test 
9790: 61 75 74 68 2d 31 2e 32 33 34 20 7b 0a 20 20 65  auth-1.234 {.  e
97a0: 78 65 63 73 71 6c 32 20 7b 53 45 4c 45 43 54 20  xecsql2 {SELECT 
97b0: 61 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 61 20  a FROM t2}.} {a 
97c0: 31 31 20 61 20 37 7d 0a 64 6f 5f 74 65 73 74 20  11 a 7}.do_test 
97d0: 61 75 74 68 2d 31 2e 32 33 35 20 7b 0a 20 20 70  auth-1.235 {.  p
97e0: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
97f0: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
9800: 67 34 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 69  g4 args} {.    i
9810: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
9820: 45 5f 50 52 41 47 4d 41 22 7d 20 7b 0a 20 20 20  E_PRAGMA"} {.   
9830: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
9840: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
9850: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
9860: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
9870: 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20  LITE_OK.    }.  
9880: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
9890: 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  OK.  }.  catchsq
98a0: 6c 20 7b 50 52 41 47 4d 41 20 66 75 6c 6c 5f 63  l {PRAGMA full_c
98b0: 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 3d 6f 6e 7d 0a  olumn_names=on}.
98c0: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
98d0: 20 61 75 74 68 2d 31 2e 32 33 36 20 7b 0a 20 20   auth-1.236 {.  
98e0: 65 78 65 63 73 71 6c 32 20 7b 53 45 4c 45 43 54  execsql2 {SELECT
98f0: 20 61 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 74   a FROM t2}.} {t
9900: 32 2e 61 20 31 31 20 74 32 2e 61 20 37 7d 0a 64  2.a 11 t2.a 7}.d
9910: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 33  o_test auth-1.23
9920: 37 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  7 {.  proc auth 
9930: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
9940: 61 72 67 33 20 61 72 67 34 20 61 72 67 73 7d 20  arg3 arg4 args} 
9950: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
9960: 3d 22 53 51 4c 49 54 45 5f 50 52 41 47 4d 41 22  ="SQLITE_PRAGMA"
9970: 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a  } {.      set ::
9980: 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24  authargs [list $
9990: 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33  arg1 $arg2 $arg3
99a0: 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65   $arg4].      re
99b0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
99c0: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
99d0: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
99e0: 63 61 74 63 68 73 71 6c 20 7b 50 52 41 47 4d 41  catchsql {PRAGMA
99f0: 20 66 75 6c 6c 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d   full_column_nam
9a00: 65 73 3d 4f 46 46 7d 0a 7d 20 7b 30 20 7b 7d 7d  es=OFF}.} {0 {}}
9a10: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
9a20: 32 33 38 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75  238 {.  set ::au
9a30: 74 68 61 72 67 73 0a 7d 20 7b 66 75 6c 6c 5f 63  thargs.} {full_c
9a40: 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 20 4f 46 46 20  olumn_names OFF 
9a50: 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  {} {}}.do_test a
9a60: 75 74 68 2d 31 2e 32 33 39 20 7b 0a 20 20 65 78  uth-1.239 {.  ex
9a70: 65 63 73 71 6c 32 20 7b 53 45 4c 45 43 54 20 61  ecsql2 {SELECT a
9a80: 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 61 20 31   FROM t2}.} {a 1
9a90: 31 20 61 20 37 7d 0a 0a 64 6f 5f 74 65 73 74 20  1 a 7}..do_test 
9aa0: 61 75 74 68 2d 31 2e 32 34 30 20 7b 0a 20 20 70  auth-1.240 {.  p
9ab0: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
9ac0: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
9ad0: 67 34 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 69  g4 args} {.    i
9ae0: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
9af0: 45 5f 54 52 41 4e 53 41 43 54 49 4f 4e 22 7d 20  E_TRANSACTION"} 
9b00: 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75  {.      set ::au
9b10: 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72  thargs [list $ar
9b20: 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24  g1 $arg2 $arg3 $
9b30: 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65 74 75  arg4].      retu
9b40: 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20  rn SQLITE_DENY. 
9b50: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
9b60: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
9b70: 63 61 74 63 68 73 71 6c 20 7b 42 45 47 49 4e 7d  catchsql {BEGIN}
9b80: 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f  .} {1 {not autho
9b90: 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20  rized}}.do_test 
9ba0: 61 75 74 68 2d 31 2e 32 34 31 20 7b 0a 20 20 73  auth-1.241 {.  s
9bb0: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20  et ::authargs.} 
9bc0: 7b 42 45 47 49 4e 20 7b 7d 20 7b 7d 20 7b 7d 7d  {BEGIN {} {} {}}
9bd0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
9be0: 32 34 32 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  242 {.  proc aut
9bf0: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
9c00: 32 20 61 72 67 33 20 61 72 67 34 20 61 72 67 73  2 arg3 arg4 args
9c10: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
9c20: 65 3d 3d 22 53 51 4c 49 54 45 5f 54 52 41 4e 53  e=="SQLITE_TRANS
9c30: 41 43 54 49 4f 4e 22 20 26 26 20 24 61 72 67 31  ACTION" && $arg1
9c40: 21 3d 22 42 45 47 49 4e 22 7d 20 7b 0a 20 20 20  !="BEGIN"} {.   
9c50: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
9c60: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
9c70: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
9c80: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
9c90: 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a  LITE_DENY.    }.
9ca0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
9cb0: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68  E_OK.  }.  catch
9cc0: 73 71 6c 20 7b 42 45 47 49 4e 3b 20 49 4e 53 45  sql {BEGIN; INSE
9cd0: 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45  RT INTO t2 VALUE
9ce0: 53 28 34 34 2c 35 35 2c 36 36 29 3b 20 43 4f 4d  S(44,55,66); COM
9cf0: 4d 49 54 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61  MIT}.} {1 {not a
9d00: 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74  uthorized}}.do_t
9d10: 65 73 74 20 61 75 74 68 2d 31 2e 32 34 33 20 7b  est auth-1.243 {
9d20: 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67  .  set ::autharg
9d30: 73 0a 7d 20 7b 43 4f 4d 4d 49 54 20 7b 7d 20 7b  s.} {COMMIT {} {
9d40: 7d 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75  } {}}.do_test au
9d50: 74 68 2d 31 2e 32 34 34 20 7b 0a 20 20 65 78 65  th-1.244 {.  exe
9d60: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46  csql {SELECT * F
9d70: 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31 31 20 32 20  ROM t2}.} {11 2 
9d80: 33 33 20 37 20 38 20 39 20 34 34 20 35 35 20 36  33 7 8 9 44 55 6
9d90: 36 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  6}.do_test auth-
9da0: 31 2e 32 34 35 20 7b 0a 20 20 63 61 74 63 68 73  1.245 {.  catchs
9db0: 71 6c 20 7b 52 4f 4c 4c 42 41 43 4b 7d 0a 7d 20  ql {ROLLBACK}.} 
9dc0: 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a  {1 {not authoriz
9dd0: 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  ed}}.do_test aut
9de0: 68 2d 31 2e 32 34 36 20 7b 0a 20 20 73 65 74 20  h-1.246 {.  set 
9df0: 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b 52 4f  ::authargs.} {RO
9e00: 4c 4c 42 41 43 4b 20 7b 7d 20 7b 7d 20 7b 7d 7d  LLBACK {} {} {}}
9e10: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e  .do_test auth-1.
9e20: 32 34 37 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  247 {.  catchsql
9e30: 20 7b 45 4e 44 20 54 52 41 4e 53 41 43 54 49 4f   {END TRANSACTIO
9e40: 4e 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74  N}.} {1 {not aut
9e50: 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73  horized}}.do_tes
9e60: 74 20 61 75 74 68 2d 31 2e 32 34 38 20 7b 0a 20  t auth-1.248 {. 
9e70: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a   set ::authargs.
9e80: 7d 20 7b 43 4f 4d 4d 49 54 20 7b 7d 20 7b 7d 20  } {COMMIT {} {} 
9e90: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
9ea0: 2d 31 2e 32 34 39 20 7b 0a 20 20 23 20 45 56 49  -1.249 {.  # EVI
9eb0: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 35 32 31 31  DENCE-OF: R-5211
9ec0: 32 2d 34 34 31 36 37 20 44 69 73 61 62 6c 65 20  2-44167 Disable 
9ed0: 74 68 65 20 61 75 74 68 6f 72 69 7a 65 72 20 62  the authorizer b
9ee0: 79 20 69 6e 73 74 61 6c 6c 69 6e 67 20 61 20 4e  y installing a N
9ef0: 55 4c 4c 0a 20 20 23 20 63 61 6c 6c 62 61 63 6b  ULL.  # callback
9f00: 2e 0a 20 20 64 62 20 61 75 74 68 6f 72 69 7a 65  ..  db authorize
9f10: 72 20 7b 7d 0a 20 20 63 61 74 63 68 73 71 6c 20  r {}.  catchsql 
9f20: 7b 52 4f 4c 4c 42 41 43 4b 7d 0a 7d 20 7b 30 20  {ROLLBACK}.} {0 
9f30: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
9f40: 2d 31 2e 32 35 30 20 7b 0a 20 20 65 78 65 63 73  -1.250 {.  execs
9f50: 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f  ql {SELECT * FRO
9f60: 4d 20 74 32 7d 0a 7d 20 7b 31 31 20 32 20 33 33  M t2}.} {11 2 33
9f70: 20 37 20 38 20 39 7d 0a 0a 23 20 74 69 63 6b 65   7 8 9}..# ticke
9f80: 74 20 23 33 34 30 20 2d 20 61 75 74 68 6f 72 69  t #340 - authori
9f90: 7a 61 74 69 6f 6e 20 66 6f 72 20 41 54 54 41 43  zation for ATTAC
9fa0: 48 20 61 6e 64 20 44 45 54 41 43 48 2e 0a 23 0a  H and DETACH..#.
9fb0: 69 66 63 61 70 61 62 6c 65 20 61 74 74 61 63 68  ifcapable attach
9fc0: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74   {.  do_test aut
9fd0: 68 2d 31 2e 32 35 31 20 7b 0a 20 20 20 20 64 62  h-1.251 {.    db
9fe0: 20 61 75 74 68 6f 72 69 7a 65 72 20 3a 3a 61 75   authorizer ::au
9ff0: 74 68 0a 20 20 20 20 70 72 6f 63 20 61 75 74 68  th.    proc auth
a000: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
a010: 20 61 72 67 33 20 61 72 67 34 20 61 72 67 73 7d   arg3 arg4 args}
a020: 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f   {.      if {$co
a030: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 41 54 54 41  de=="SQLITE_ATTA
a040: 43 48 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 73  CH"} {.        s
a050: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c  et ::authargs [l
a060: 69 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20  ist $arg1 $arg2 
a070: 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20  $arg3 $arg4].   
a080: 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72     }.      retur
a090: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20  n SQLITE_OK.    
a0a0: 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b  }.    catchsql {
a0b0: 0a 20 20 20 20 20 20 41 54 54 41 43 48 20 44 41  .      ATTACH DA
a0c0: 54 41 42 41 53 45 20 27 3a 6d 65 6d 6f 72 79 3a  TABASE ':memory:
a0d0: 27 20 41 53 20 74 65 73 74 31 0a 20 20 20 20 7d  ' AS test1.    }
a0e0: 0a 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20 20 64 6f  .  } {0 {}}.  do
a0f0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 35 32  _test auth-1.252
a100: 61 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a 61 75  a {.    set ::au
a110: 74 68 61 72 67 73 0a 20 20 7d 20 7b 3a 6d 65 6d  thargs.  } {:mem
a120: 6f 72 79 3a 20 7b 7d 20 7b 7d 20 7b 7d 7d 0a 20  ory: {} {} {}}. 
a130: 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e   do_test auth-1.
a140: 32 35 32 62 20 7b 0a 20 20 20 20 64 62 20 65 76  252b {.    db ev
a150: 61 6c 20 7b 44 45 54 41 43 48 20 74 65 73 74 31  al {DETACH test1
a160: 7d 0a 20 20 20 20 73 65 74 20 3a 3a 61 74 74 61  }.    set ::atta
a170: 63 68 66 69 6c 65 6e 61 6d 65 20 3a 6d 65 6d 6f  chfilename :memo
a180: 72 79 3a 0a 20 20 20 20 64 62 20 65 76 61 6c 20  ry:.    db eval 
a190: 7b 41 54 54 41 43 48 20 24 3a 3a 61 74 74 61 63  {ATTACH $::attac
a1a0: 68 66 69 6c 65 6e 61 6d 65 20 41 53 20 74 65 73  hfilename AS tes
a1b0: 74 31 7d 0a 20 20 20 20 73 65 74 20 3a 3a 61 75  t1}.    set ::au
a1c0: 74 68 61 72 67 73 0a 20 20 7d 20 7b 7b 7d 20 7b  thargs.  } {{} {
a1d0: 7d 20 7b 7d 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65  } {} {}}.  do_te
a1e0: 73 74 20 61 75 74 68 2d 31 2e 32 35 32 63 20 7b  st auth-1.252c {
a1f0: 0a 20 20 20 20 64 62 20 65 76 61 6c 20 7b 44 45  .    db eval {DE
a200: 54 41 43 48 20 74 65 73 74 31 7d 0a 20 20 20 20  TACH test1}.    
a210: 64 62 20 65 76 61 6c 20 7b 41 54 54 41 43 48 20  db eval {ATTACH 
a220: 27 3a 6d 65 6d 27 20 7c 7c 20 27 6f 72 79 3a 27  ':mem' || 'ory:'
a230: 20 41 53 20 74 65 73 74 31 7d 0a 20 20 20 20 73   AS test1}.    s
a240: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 20 20  et ::authargs.  
a250: 7d 20 7b 7b 7d 20 7b 7d 20 7b 7d 20 7b 7d 7d 0a  } {{} {} {} {}}.
a260: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31    do_test auth-1
a270: 2e 32 35 33 20 7b 0a 20 20 20 20 63 61 74 63 68  .253 {.    catch
a280: 73 71 6c 20 7b 44 45 54 41 43 48 20 44 41 54 41  sql {DETACH DATA
a290: 42 41 53 45 20 74 65 73 74 31 7d 0a 20 20 20 20  BASE test1}.    
a2a0: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
a2b0: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
a2c0: 72 67 34 20 61 72 67 73 7d 20 7b 0a 20 20 20 20  rg4 args} {.    
a2d0: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
a2e0: 4c 49 54 45 5f 41 54 54 41 43 48 22 7d 20 7b 0a  LITE_ATTACH"} {.
a2f0: 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75          set ::au
a300: 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72  thargs [list $ar
a310: 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24  g1 $arg2 $arg3 $
a320: 61 72 67 34 5d 0a 20 20 20 20 20 20 20 20 72 65  arg4].        re
a330: 74 75 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59  turn SQLITE_DENY
a340: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72  .      }.      r
a350: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a  eturn SQLITE_OK.
a360: 20 20 20 20 7d 0a 20 20 20 20 63 61 74 63 68 73      }.    catchs
a370: 71 6c 20 7b 0a 20 20 20 20 20 20 41 54 54 41 43  ql {.      ATTAC
a380: 48 20 44 41 54 41 42 41 53 45 20 27 3a 6d 65 6d  H DATABASE ':mem
a390: 6f 72 79 3a 27 20 41 53 20 74 65 73 74 31 3b 0a  ory:' AS test1;.
a3a0: 20 20 20 20 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f      }.  } {1 {no
a3b0: 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 20  t authorized}}. 
a3c0: 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e   do_test auth-1.
a3d0: 32 35 34 20 7b 0a 20 20 20 20 6c 69 6e 64 65 78  254 {.    lindex
a3e0: 20 5b 65 78 65 63 73 71 6c 20 7b 50 52 41 47 4d   [execsql {PRAGM
a3f0: 41 20 64 61 74 61 62 61 73 65 5f 6c 69 73 74 7d  A database_list}
a400: 5d 20 37 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f  ] 7.  } {}.  do_
a410: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 35 35 20  test auth-1.255 
a420: 7b 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b  {.    catchsql {
a430: 44 45 54 41 43 48 20 44 41 54 41 42 41 53 45 20  DETACH DATABASE 
a440: 74 65 73 74 31 7d 0a 20 20 20 20 70 72 6f 63 20  test1}.    proc 
a450: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
a460: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 20 61  arg2 arg3 arg4 a
a470: 72 67 73 7d 20 7b 0a 20 20 20 20 20 20 69 66 20  rgs} {.      if 
a480: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
a490: 41 54 54 41 43 48 22 7d 20 7b 0a 20 20 20 20 20  ATTACH"} {.     
a4a0: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
a4b0: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
a4c0: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
a4d0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
a4e0: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20  SQLITE_IGNORE.  
a4f0: 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75      }.      retu
a500: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20  rn SQLITE_OK.   
a510: 20 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20   }.    catchsql 
a520: 7b 0a 20 20 20 20 20 20 41 54 54 41 43 48 20 44  {.      ATTACH D
a530: 41 54 41 42 41 53 45 20 27 3a 6d 65 6d 6f 72 79  ATABASE ':memory
a540: 3a 27 20 41 53 20 74 65 73 74 31 3b 0a 20 20 20  :' AS test1;.   
a550: 20 7d 0a 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20 20   }.  } {0 {}}.  
a560: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32  do_test auth-1.2
a570: 35 36 20 7b 0a 20 20 20 20 6c 69 6e 64 65 78 20  56 {.    lindex 
a580: 5b 65 78 65 63 73 71 6c 20 7b 50 52 41 47 4d 41  [execsql {PRAGMA
a590: 20 64 61 74 61 62 61 73 65 5f 6c 69 73 74 7d 5d   database_list}]
a5a0: 20 37 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74   7.  } {}.  do_t
a5b0: 65 73 74 20 61 75 74 68 2d 31 2e 32 35 37 20 7b  est auth-1.257 {
a5c0: 0a 20 20 20 20 70 72 6f 63 20 61 75 74 68 20 7b  .    proc auth {
a5d0: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
a5e0: 72 67 33 20 61 72 67 34 20 61 72 67 73 7d 20 7b  rg3 arg4 args} {
a5f0: 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64 65  .      if {$code
a600: 3d 3d 22 53 51 4c 49 54 45 5f 44 45 54 41 43 48  =="SQLITE_DETACH
a610: 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74  "} {.        set
a620: 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73   ::authargs [lis
a630: 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61  t $arg1 $arg2 $a
a640: 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20  rg3 $arg4].     
a650: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
a660: 5f 4f 4b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  _OK.      }.    
a670: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
a680: 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 65 78 65  OK.    }.    exe
a690: 63 73 71 6c 20 7b 41 54 54 41 43 48 20 44 41 54  csql {ATTACH DAT
a6a0: 41 42 41 53 45 20 27 3a 6d 65 6d 6f 72 79 3a 27  ABASE ':memory:'
a6b0: 20 41 53 20 74 65 73 74 31 7d 0a 20 20 20 20 63   AS test1}.    c
a6c0: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20  atchsql {.      
a6d0: 44 45 54 41 43 48 20 44 41 54 41 42 41 53 45 20  DETACH DATABASE 
a6e0: 74 65 73 74 31 3b 0a 20 20 20 20 7d 0a 20 20 7d  test1;.    }.  }
a6f0: 20 7b 30 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73   {0 {}}.  do_tes
a700: 74 20 61 75 74 68 2d 31 2e 32 35 38 20 7b 0a 20  t auth-1.258 {. 
a710: 20 20 20 6c 69 6e 64 65 78 20 5b 65 78 65 63 73     lindex [execs
a720: 71 6c 20 7b 50 52 41 47 4d 41 20 64 61 74 61 62  ql {PRAGMA datab
a730: 61 73 65 5f 6c 69 73 74 7d 5d 20 37 0a 20 20 7d  ase_list}] 7.  }
a740: 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75   {}.  do_test au
a750: 74 68 2d 31 2e 32 35 39 20 7b 0a 20 20 20 20 65  th-1.259 {.    e
a760: 78 65 63 73 71 6c 20 7b 41 54 54 41 43 48 20 44  xecsql {ATTACH D
a770: 41 54 41 42 41 53 45 20 27 3a 6d 65 6d 6f 72 79  ATABASE ':memory
a780: 3a 27 20 41 53 20 74 65 73 74 31 7d 0a 20 20 20  :' AS test1}.   
a790: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
a7a0: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
a7b0: 61 72 67 34 20 61 72 67 73 7d 20 7b 0a 20 20 20  arg4 args} {.   
a7c0: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
a7d0: 51 4c 49 54 45 5f 44 45 54 41 43 48 22 7d 20 7b  QLITE_DETACH"} {
a7e0: 0a 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a 61  .        set ::a
a7f0: 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61  uthargs [list $a
a800: 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20  rg1 $arg2 $arg3 
a810: 24 61 72 67 34 5d 0a 20 20 20 20 20 20 20 20 72  $arg4].        r
a820: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e  eturn SQLITE_IGN
a830: 4f 52 45 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ORE.      }.    
a840: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
a850: 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 74  OK.    }.    cat
a860: 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20 44 45  chsql {.      DE
a870: 54 41 43 48 20 44 41 54 41 42 41 53 45 20 74 65  TACH DATABASE te
a880: 73 74 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  st1;.    }.  } {
a890: 30 20 7b 7d 7d 0a 20 20 69 66 63 61 70 61 62 6c  0 {}}.  ifcapabl
a8a0: 65 20 74 65 6d 70 64 62 20 7b 0a 20 20 20 20 69  e tempdb {.    i
a8b0: 66 63 61 70 61 62 6c 65 20 73 63 68 65 6d 61 5f  fcapable schema_
a8c0: 70 72 61 67 6d 61 73 20 7b 0a 20 20 20 20 64 6f  pragmas {.    do
a8d0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 36 30  _test auth-1.260
a8e0: 20 7b 0a 20 20 20 20 20 20 6c 69 6e 64 65 78 20   {.      lindex 
a8f0: 5b 65 78 65 63 73 71 6c 20 7b 50 52 41 47 4d 41  [execsql {PRAGMA
a900: 20 64 61 74 61 62 61 73 65 5f 6c 69 73 74 7d 5d   database_list}]
a910: 20 37 0a 20 20 20 20 7d 20 7b 74 65 73 74 31 7d   7.    } {test1}
a920: 0a 20 20 20 20 7d 20 3b 23 20 69 66 63 61 70 61  .    } ;# ifcapa
a930: 62 6c 65 20 73 63 68 65 6d 61 5f 70 72 61 67 6d  ble schema_pragm
a940: 61 73 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 61  as.    do_test a
a950: 75 74 68 2d 31 2e 32 36 31 20 7b 0a 20 20 20 20  uth-1.261 {.    
a960: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
a970: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
a980: 20 61 72 67 34 20 61 72 67 73 7d 20 7b 0a 20 20   arg4 args} {.  
a990: 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d        if {$code=
a9a0: 3d 22 53 51 4c 49 54 45 5f 44 45 54 41 43 48 22  ="SQLITE_DETACH"
a9b0: 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 73 65  } {.          se
a9c0: 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69  t ::authargs [li
a9d0: 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24  st $arg1 $arg2 $
a9e0: 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20  arg3 $arg4].    
a9f0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
aa00: 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 20 20 20  ITE_DENY.       
aa10: 20 7d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72   }.        retur
aa20: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20  n SQLITE_OK.    
aa30: 20 20 7d 0a 20 20 20 20 20 20 63 61 74 63 68 73    }.      catchs
aa40: 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 44 45 54  ql {.        DET
aa50: 41 43 48 20 44 41 54 41 42 41 53 45 20 74 65 73  ACH DATABASE tes
aa60: 74 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  t1;.      }.    
aa70: 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72  } {1 {not author
aa80: 69 7a 65 64 7d 7d 0a 20 20 20 20 69 66 63 61 70  ized}}.    ifcap
aa90: 61 62 6c 65 20 73 63 68 65 6d 61 5f 70 72 61 67  able schema_prag
aaa0: 6d 61 73 20 7b 0a 20 20 20 20 64 6f 5f 74 65 73  mas {.    do_tes
aab0: 74 20 61 75 74 68 2d 31 2e 32 36 32 20 7b 0a 20  t auth-1.262 {. 
aac0: 20 20 20 20 20 6c 69 6e 64 65 78 20 5b 65 78 65       lindex [exe
aad0: 63 73 71 6c 20 7b 50 52 41 47 4d 41 20 64 61 74  csql {PRAGMA dat
aae0: 61 62 61 73 65 5f 6c 69 73 74 7d 5d 20 37 0a 20  abase_list}] 7. 
aaf0: 20 20 20 7d 20 7b 74 65 73 74 31 7d 0a 20 20 20     } {test1}.   
ab00: 20 7d 20 3b 23 20 69 66 63 61 70 61 62 6c 65 20   } ;# ifcapable 
ab10: 73 63 68 65 6d 61 5f 70 72 61 67 6d 61 73 0a 20  schema_pragmas. 
ab20: 20 20 20 64 62 20 61 75 74 68 6f 72 69 7a 65 72     db authorizer
ab30: 20 7b 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20   {}.    execsql 
ab40: 7b 44 45 54 41 43 48 20 44 41 54 41 42 41 53 45  {DETACH DATABASE
ab50: 20 74 65 73 74 31 7d 0a 20 20 20 20 64 62 20 61   test1}.    db a
ab60: 75 74 68 6f 72 69 7a 65 72 20 3a 3a 61 75 74 68  uthorizer ::auth
ab70: 0a 20 20 20 20 0a 20 20 20 20 23 20 41 75 74 68  .    .    # Auth
ab80: 6f 72 69 7a 61 74 69 6f 6e 20 66 6f 72 20 41 4c  orization for AL
ab90: 54 45 52 20 54 41 42 4c 45 2e 20 54 68 65 73 65  TER TABLE. These
aba0: 20 74 65 73 74 73 20 61 72 65 20 6f 6d 69 74 74   tests are omitt
abb0: 65 64 20 69 66 20 74 68 65 20 6c 69 62 72 61 72  ed if the librar
abc0: 79 0a 20 20 20 20 23 20 77 61 73 20 62 75 69 6c  y.    # was buil
abd0: 74 20 77 69 74 68 6f 75 74 20 41 4c 54 45 52 20  t without ALTER 
abe0: 54 41 42 4c 45 20 73 75 70 70 6f 72 74 2e 0a 20  TABLE support.. 
abf0: 20 20 20 69 66 63 61 70 61 62 6c 65 20 61 6c 74     ifcapable alt
ac00: 65 72 74 61 62 6c 65 20 7b 0a 20 20 20 20 0a 20  ertable {.    . 
ac10: 20 20 20 20 20 64 6f 5f 74 65 73 74 20 61 75 74       do_test aut
ac20: 68 2d 31 2e 32 36 33 20 7b 0a 20 20 20 20 20 20  h-1.263 {.      
ac30: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
ac40: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
ac50: 20 61 72 67 34 20 61 72 67 73 7d 20 7b 0a 20 20   arg4 args} {.  
ac60: 20 20 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64          if {$cod
ac70: 65 3d 3d 22 53 51 4c 49 54 45 5f 41 4c 54 45 52  e=="SQLITE_ALTER
ac80: 5f 54 41 42 4c 45 22 7d 20 7b 0a 20 20 20 20 20  _TABLE"} {.     
ac90: 20 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74         set ::aut
aca0: 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67  hargs [list $arg
acb0: 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61  1 $arg2 $arg3 $a
acc0: 72 67 34 5d 0a 20 20 20 20 20 20 20 20 20 20 20  rg4].           
acd0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
ace0: 4b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  K.          }.  
acf0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
ad00: 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 20 20 20  QLITE_OK.       
ad10: 20 7d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68   }.        catch
ad20: 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 20 20  sql {.          
ad30: 41 4c 54 45 52 20 54 41 42 4c 45 20 74 31 20 52  ALTER TABLE t1 R
ad40: 45 4e 41 4d 45 20 54 4f 20 74 31 78 0a 20 20 20  ENAME TO t1x.   
ad50: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 20 7b       }.      } {
ad60: 30 20 7b 7d 7d 0a 20 20 20 20 20 20 64 6f 5f 74  0 {}}.      do_t
ad70: 65 73 74 20 61 75 74 68 2d 31 2e 32 36 34 20 7b  est auth-1.264 {
ad80: 0a 20 20 20 20 20 20 20 20 65 78 65 63 73 71 6c  .        execsql
ad90: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
ada0: 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  OM sqlite_temp_m
adb0: 61 73 74 65 72 20 57 48 45 52 45 20 74 79 70 65  aster WHERE type
adc0: 3d 27 74 61 62 6c 65 27 7d 0a 20 20 20 20 20 20  ='table'}.      
add0: 7d 20 7b 74 31 78 7d 0a 20 20 20 20 20 20 64 6f  } {t1x}.      do
ade0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 36 35  _test auth-1.265
adf0: 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 61   {.        set a
ae00: 75 74 68 61 72 67 73 0a 20 20 20 20 20 20 7d 20  uthargs.      } 
ae10: 7b 74 65 6d 70 20 74 31 20 7b 7d 20 7b 7d 7d 0a  {temp t1 {} {}}.
ae20: 20 20 20 20 20 20 64 6f 5f 74 65 73 74 20 61 75        do_test au
ae30: 74 68 2d 31 2e 32 36 36 20 7b 0a 20 20 20 20 20  th-1.266 {.     
ae40: 20 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f     proc auth {co
ae50: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
ae60: 33 20 61 72 67 34 20 61 72 67 73 7d 20 7b 0a 20  3 arg4 args} {. 
ae70: 20 20 20 20 20 20 20 20 20 69 66 20 7b 24 63 6f           if {$co
ae80: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 41 4c 54 45  de=="SQLITE_ALTE
ae90: 52 5f 54 41 42 4c 45 22 7d 20 7b 0a 20 20 20 20  R_TABLE"} {.    
aea0: 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75          set ::au
aeb0: 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72  thargs [list $ar
aec0: 67 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24  g1 $arg2 $arg3 $
aed0: 61 72 67 34 5d 0a 20 20 20 20 20 20 20 20 20 20  arg4].          
aee0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
aef0: 49 47 4e 4f 52 45 0a 20 20 20 20 20 20 20 20 20  IGNORE.         
af00: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74   }.          ret
af10: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
af20: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
af30: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20  catchsql {.     
af40: 20 20 20 20 20 41 4c 54 45 52 20 54 41 42 4c 45       ALTER TABLE
af50: 20 74 31 78 20 52 45 4e 41 4d 45 20 54 4f 20 74   t1x RENAME TO t
af60: 31 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  1.        }.    
af70: 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20 20 20 20 20    } {0 {}}.     
af80: 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e   do_test auth-1.
af90: 32 36 37 20 7b 0a 20 20 20 20 20 20 20 20 65 78  267 {.        ex
afa0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61  ecsql {SELECT na
afb0: 6d 65 20 46 52 4f 4d 20 74 65 6d 70 2e 73 71 6c  me FROM temp.sql
afc0: 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45  ite_master WHERE
afd0: 20 74 79 70 65 3d 27 74 61 62 6c 65 27 7d 0a 20   type='table'}. 
afe0: 20 20 20 20 20 7d 20 7b 74 31 78 7d 0a 20 20 20       } {t1x}.   
aff0: 20 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d     do_test auth-
b000: 31 2e 32 36 38 20 7b 0a 20 20 20 20 20 20 20 20  1.268 {.        
b010: 73 65 74 20 61 75 74 68 61 72 67 73 0a 20 20 20  set authargs.   
b020: 20 20 20 7d 20 7b 74 65 6d 70 20 74 31 78 20 7b     } {temp t1x {
b030: 7d 20 7b 7d 7d 0a 20 20 20 20 20 20 64 6f 5f 74  } {}}.      do_t
b040: 65 73 74 20 61 75 74 68 2d 31 2e 32 36 39 20 7b  est auth-1.269 {
b050: 0a 20 20 20 20 20 20 20 20 70 72 6f 63 20 61 75  .        proc au
b060: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
b070: 67 32 20 61 72 67 33 20 61 72 67 34 20 61 72 67  g2 arg3 arg4 arg
b080: 73 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 69  s} {.          i
b090: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
b0a0: 45 5f 41 4c 54 45 52 5f 54 41 42 4c 45 22 7d 20  E_ALTER_TABLE"} 
b0b0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65  {.            se
b0c0: 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69  t ::authargs [li
b0d0: 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24  st $arg1 $arg2 $
b0e0: 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20  arg3 $arg4].    
b0f0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
b100: 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 20  QLITE_DENY.     
b110: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
b120: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
b130: 4b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  K.        }.    
b140: 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20      catchsql {. 
b150: 20 20 20 20 20 20 20 20 20 41 4c 54 45 52 20 54           ALTER T
b160: 41 42 4c 45 20 74 31 78 20 52 45 4e 41 4d 45 20  ABLE t1x RENAME 
b170: 54 4f 20 74 31 0a 20 20 20 20 20 20 20 20 7d 0a  TO t1.        }.
b180: 20 20 20 20 20 20 7d 20 7b 31 20 7b 6e 6f 74 20        } {1 {not 
b190: 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 20 20 20  authorized}}.   
b1a0: 20 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d     do_test auth-
b1b0: 31 2e 32 37 30 20 7b 0a 20 20 20 20 20 20 20 20  1.270 {.        
b1c0: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
b1d0: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
b1e0: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 20 57 48 45  _temp_master WHE
b1f0: 52 45 20 74 79 70 65 3d 27 74 61 62 6c 65 27 7d  RE type='table'}
b200: 0a 20 20 20 20 20 20 7d 20 7b 74 31 78 7d 0a 20  .      } {t1x}. 
b210: 20 0a 20 20 20 20 20 20 64 6f 5f 74 65 73 74 20   .      do_test 
b220: 61 75 74 68 2d 31 2e 32 37 31 20 7b 0a 20 20 20  auth-1.271 {.   
b230: 20 20 20 20 20 73 65 74 20 61 75 74 68 61 72 67       set autharg
b240: 73 0a 20 20 20 20 20 20 7d 20 7b 74 65 6d 70 20  s.      } {temp 
b250: 74 31 78 20 7b 7d 20 7b 7d 7d 0a 20 20 20 20 7d  t1x {} {}}.    }
b260: 20 3b 23 20 69 66 63 61 70 61 62 6c 65 20 61 6c   ;# ifcapable al
b270: 74 65 72 74 61 62 6c 65 0a 20 20 0a 20 20 7d 20  tertable.  .  } 
b280: 65 6c 73 65 20 7b 0a 20 20 20 20 64 62 20 61 75  else {.    db au
b290: 74 68 6f 72 69 7a 65 72 20 7b 7d 0a 20 20 20 20  thorizer {}.    
b2a0: 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 20 20  db eval {.      
b2b0: 44 45 54 41 43 48 20 44 41 54 41 42 41 53 45 20  DETACH DATABASE 
b2c0: 74 65 73 74 31 3b 0a 20 20 20 20 7d 0a 20 20 7d  test1;.    }.  }
b2d0: 0a 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20 20 61  .}..ifcapable  a
b2e0: 6c 74 65 72 74 61 62 6c 65 20 7b 0a 64 62 20 61  ltertable {.db a
b2f0: 75 74 68 6f 72 69 7a 65 72 20 7b 7d 0a 63 61 74  uthorizer {}.cat
b300: 63 68 73 71 6c 20 7b 41 4c 54 45 52 20 54 41 42  chsql {ALTER TAB
b310: 4c 45 20 74 31 78 20 52 45 4e 41 4d 45 20 54 4f  LE t1x RENAME TO
b320: 20 74 31 7d 0a 64 62 20 61 75 74 68 6f 72 69 7a   t1}.db authoriz
b330: 65 72 20 3a 3a 61 75 74 68 0a 64 6f 5f 74 65 73  er ::auth.do_tes
b340: 74 20 61 75 74 68 2d 31 2e 32 37 32 20 7b 0a 20  t auth-1.272 {. 
b350: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
b360: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
b370: 61 72 67 34 20 61 72 67 73 7d 20 7b 0a 20 20 20  arg4 args} {.   
b380: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
b390: 49 54 45 5f 41 4c 54 45 52 5f 54 41 42 4c 45 22  ITE_ALTER_TABLE"
b3a0: 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a  } {.      set ::
b3b0: 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24  authargs [list $
b3c0: 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33  arg1 $arg2 $arg3
b3d0: 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65   $arg4].      re
b3e0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
b3f0: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
b400: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
b410: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 41  catchsql {.    A
b420: 4c 54 45 52 20 54 41 42 4c 45 20 74 32 20 52 45  LTER TABLE t2 RE
b430: 4e 41 4d 45 20 54 4f 20 74 32 78 0a 20 20 7d 0a  NAME TO t2x.  }.
b440: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
b450: 20 61 75 74 68 2d 31 2e 32 37 33 20 7b 0a 20 20   auth-1.273 {.  
b460: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
b470: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
b480: 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20 74 79  _master WHERE ty
b490: 70 65 3d 27 74 61 62 6c 65 27 7d 0a 7d 20 7b 74  pe='table'}.} {t
b4a0: 32 78 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  2x}.do_test auth
b4b0: 2d 31 2e 32 37 34 20 7b 0a 20 20 73 65 74 20 61  -1.274 {.  set a
b4c0: 75 74 68 61 72 67 73 0a 7d 20 7b 6d 61 69 6e 20  uthargs.} {main 
b4d0: 74 32 20 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74 65 73  t2 {} {}}.do_tes
b4e0: 74 20 61 75 74 68 2d 31 2e 32 37 35 20 7b 0a 20  t auth-1.275 {. 
b4f0: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
b500: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
b510: 61 72 67 34 20 61 72 67 73 7d 20 7b 0a 20 20 20  arg4 args} {.   
b520: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
b530: 49 54 45 5f 41 4c 54 45 52 5f 54 41 42 4c 45 22  ITE_ALTER_TABLE"
b540: 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a  } {.      set ::
b550: 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20 24  authargs [list $
b560: 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67 33  arg1 $arg2 $arg3
b570: 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 72 65   $arg4].      re
b580: 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f  turn SQLITE_IGNO
b590: 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  RE.    }.    ret
b5a0: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
b5b0: 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  }.  catchsql {. 
b5c0: 20 20 20 41 4c 54 45 52 20 54 41 42 4c 45 20 74     ALTER TABLE t
b5d0: 32 78 20 52 45 4e 41 4d 45 20 54 4f 20 74 32 0a  2x RENAME TO t2.
b5e0: 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f    }.} {0 {}}.do_
b5f0: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 37 36 20  test auth-1.276 
b600: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
b610: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
b620: 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52  lite_master WHER
b630: 45 20 74 79 70 65 3d 27 74 61 62 6c 65 27 7d 0a  E type='table'}.
b640: 7d 20 7b 74 32 78 7d 0a 64 6f 5f 74 65 73 74 20  } {t2x}.do_test 
b650: 61 75 74 68 2d 31 2e 32 37 37 20 7b 0a 20 20 73  auth-1.277 {.  s
b660: 65 74 20 61 75 74 68 61 72 67 73 0a 7d 20 7b 6d  et authargs.} {m
b670: 61 69 6e 20 74 32 78 20 7b 7d 20 7b 7d 7d 0a 64  ain t2x {} {}}.d
b680: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 37  o_test auth-1.27
b690: 38 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  8 {.  proc auth 
b6a0: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
b6b0: 61 72 67 33 20 61 72 67 34 20 61 72 67 73 7d 20  arg3 arg4 args} 
b6c0: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
b6d0: 3d 22 53 51 4c 49 54 45 5f 41 4c 54 45 52 5f 54  ="SQLITE_ALTER_T
b6e0: 41 42 4c 45 22 7d 20 7b 0a 20 20 20 20 20 20 73  ABLE"} {.      s
b6f0: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c  et ::authargs [l
b700: 69 73 74 20 24 61 72 67 31 20 24 61 72 67 32 20  ist $arg1 $arg2 
b710: 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20  $arg3 $arg4].   
b720: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
b730: 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20 20 20 20  _DENY.    }.    
b740: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
b750: 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20  .  }.  catchsql 
b760: 7b 0a 20 20 20 20 41 4c 54 45 52 20 54 41 42 4c  {.    ALTER TABL
b770: 45 20 74 32 78 20 52 45 4e 41 4d 45 20 54 4f 20  E t2x RENAME TO 
b780: 74 32 0a 20 20 7d 0a 7d 20 7b 31 20 7b 6e 6f 74  t2.  }.} {1 {not
b790: 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f   authorized}}.do
b7a0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 37 39  _test auth-1.279
b7b0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
b7c0: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73  LECT name FROM s
b7d0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45  qlite_master WHE
b7e0: 52 45 20 74 79 70 65 3d 27 74 61 62 6c 65 27 7d  RE type='table'}
b7f0: 0a 7d 20 7b 74 32 78 7d 0a 64 6f 5f 74 65 73 74  .} {t2x}.do_test
b800: 20 61 75 74 68 2d 31 2e 32 38 30 20 7b 0a 20 20   auth-1.280 {.  
b810: 73 65 74 20 61 75 74 68 61 72 67 73 0a 7d 20 7b  set authargs.} {
b820: 6d 61 69 6e 20 74 32 78 20 7b 7d 20 7b 7d 7d 0a  main t2x {} {}}.
b830: 64 62 20 61 75 74 68 6f 72 69 7a 65 72 20 7b 7d  db authorizer {}
b840: 0a 63 61 74 63 68 73 71 6c 20 7b 41 4c 54 45 52  .catchsql {ALTER
b850: 20 54 41 42 4c 45 20 74 32 78 20 52 45 4e 41 4d   TABLE t2x RENAM
b860: 45 20 54 4f 20 74 32 7d 0a 0a 7d 20 3b 23 20 69  E TO t2}..} ;# i
b870: 66 63 61 70 61 62 6c 65 20 61 6c 74 65 72 74 61  fcapable alterta
b880: 62 6c 65 0a 0a 23 20 54 65 73 74 20 74 68 65 20  ble..# Test the 
b890: 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 63 61  authorization ca
b8a0: 6c 6c 62 61 63 6b 73 20 66 6f 72 20 74 68 65 20  llbacks for the 
b8b0: 52 45 49 4e 44 45 58 20 63 6f 6d 6d 61 6e 64 2e  REINDEX command.
b8c0: 0a 69 66 63 61 70 61 62 6c 65 20 72 65 69 6e 64  .ifcapable reind
b8d0: 65 78 20 7b 0a 0a 70 72 6f 63 20 61 75 74 68 20  ex {..proc auth 
b8e0: 7b 63 6f 64 65 20 61 72 67 73 7d 20 7b 0a 20 20  {code args} {.  
b8f0: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
b900: 54 45 5f 52 45 49 4e 44 45 58 22 7d 20 7b 0a 20  TE_REINDEX"} {. 
b910: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
b920: 73 20 5b 63 6f 6e 63 61 74 20 24 3a 3a 61 75 74  s [concat $::aut
b930: 68 61 72 67 73 20 5b 6c 72 61 6e 67 65 20 24 61  hargs [lrange $a
b940: 72 67 73 20 30 20 33 5d 5d 0a 20 20 7d 0a 20 20  rgs 0 3]].  }.  
b950: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
b960: 0a 7d 0a 64 62 20 61 75 74 68 6f 72 69 7a 65 72  .}.db authorizer
b970: 20 61 75 74 68 0a 64 6f 5f 74 65 73 74 20 61 75   auth.do_test au
b980: 74 68 2d 31 2e 32 38 31 20 7b 0a 20 20 65 78 65  th-1.281 {.  exe
b990: 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  csql {.    CREAT
b9a0: 45 20 54 41 42 4c 45 20 74 33 28 61 20 50 52 49  E TABLE t3(a PRI
b9b0: 4d 41 52 59 20 4b 45 59 2c 20 62 2c 20 63 29 3b  MARY KEY, b, c);
b9c0: 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45  .    CREATE INDE
b9d0: 58 20 74 33 5f 69 64 78 31 20 4f 4e 20 74 33 28  X t3_idx1 ON t3(
b9e0: 63 20 43 4f 4c 4c 41 54 45 20 42 49 4e 41 52 59  c COLLATE BINARY
b9f0: 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e  );.    CREATE IN
ba00: 44 45 58 20 74 33 5f 69 64 78 32 20 4f 4e 20 74  DEX t3_idx2 ON t
ba10: 33 28 62 20 43 4f 4c 4c 41 54 45 20 4e 4f 43 41  3(b COLLATE NOCA
ba20: 53 45 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f  SE);.  }.} {}.do
ba30: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 38 32  _test auth-1.282
ba40: 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61   {.  set ::autha
ba50: 72 67 73 20 7b 7d 0a 20 20 65 78 65 63 73 71 6c  rgs {}.  execsql
ba60: 20 7b 0a 20 20 20 20 52 45 49 4e 44 45 58 20 74   {.    REINDEX t
ba70: 33 5f 69 64 78 31 3b 0a 20 20 7d 0a 20 20 73 65  3_idx1;.  }.  se
ba80: 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 7b  t ::authargs.} {
ba90: 74 33 5f 69 64 78 31 20 7b 7d 20 6d 61 69 6e 20  t3_idx1 {} main 
baa0: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
bab0: 2d 31 2e 32 38 33 20 7b 0a 20 20 73 65 74 20 3a  -1.283 {.  set :
bac0: 3a 61 75 74 68 61 72 67 73 20 7b 7d 0a 20 20 65  :authargs {}.  e
bad0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 52 45 49  xecsql {.    REI
bae0: 4e 44 45 58 20 42 49 4e 41 52 59 3b 0a 20 20 7d  NDEX BINARY;.  }
baf0: 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67  .  set ::autharg
bb00: 73 0a 7d 20 7b 74 33 5f 69 64 78 31 20 7b 7d 20  s.} {t3_idx1 {} 
bb10: 6d 61 69 6e 20 7b 7d 20 73 71 6c 69 74 65 5f 61  main {} sqlite_a
bb20: 75 74 6f 69 6e 64 65 78 5f 74 33 5f 31 20 7b 7d  utoindex_t3_1 {}
bb30: 20 6d 61 69 6e 20 7b 7d 7d 0a 64 6f 5f 74 65 73   main {}}.do_tes
bb40: 74 20 61 75 74 68 2d 31 2e 32 38 34 20 7b 0a 20  t auth-1.284 {. 
bb50: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
bb60: 7b 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  {}.  execsql {. 
bb70: 20 20 20 52 45 49 4e 44 45 58 20 4e 4f 43 41 53     REINDEX NOCAS
bb80: 45 3b 0a 20 20 7d 0a 20 20 73 65 74 20 3a 3a 61  E;.  }.  set ::a
bb90: 75 74 68 61 72 67 73 0a 7d 20 7b 74 33 5f 69 64  uthargs.} {t3_id
bba0: 78 32 20 7b 7d 20 6d 61 69 6e 20 7b 7d 7d 0a 64  x2 {} main {}}.d
bbb0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 38  o_test auth-1.28
bbc0: 35 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68  5 {.  set ::auth
bbd0: 61 72 67 73 20 7b 7d 0a 20 20 65 78 65 63 73 71  args {}.  execsq
bbe0: 6c 20 7b 0a 20 20 20 20 52 45 49 4e 44 45 58 20  l {.    REINDEX 
bbf0: 74 33 3b 0a 20 20 7d 0a 20 20 73 65 74 20 3a 3a  t3;.  }.  set ::
bc00: 61 75 74 68 61 72 67 73 0a 7d 20 7b 74 33 5f 69  authargs.} {t3_i
bc10: 64 78 32 20 7b 7d 20 6d 61 69 6e 20 7b 7d 20 74  dx2 {} main {} t
bc20: 33 5f 69 64 78 31 20 7b 7d 20 6d 61 69 6e 20 7b  3_idx1 {} main {
bc30: 7d 20 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64  } sqlite_autoind
bc40: 65 78 5f 74 33 5f 31 20 7b 7d 20 6d 61 69 6e 20  ex_t3_1 {} main 
bc50: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  {}}.do_test auth
bc60: 2d 31 2e 32 38 36 20 7b 0a 20 20 65 78 65 63 73  -1.286 {.  execs
bc70: 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20 54 41  ql {.    DROP TA
bc80: 42 4c 45 20 74 33 3b 0a 20 20 7d 0a 7d 20 7b 7d  BLE t3;.  }.} {}
bc90: 0a 69 66 63 61 70 61 62 6c 65 20 74 65 6d 70 64  .ifcapable tempd
bca0: 62 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 61 75  b {.  do_test au
bcb0: 74 68 2d 31 2e 32 38 37 20 7b 0a 20 20 20 20 65  th-1.287 {.    e
bcc0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 43  xecsql {.      C
bcd0: 52 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45  REATE TEMP TABLE
bce0: 20 74 33 28 61 20 50 52 49 4d 41 52 59 20 4b 45   t3(a PRIMARY KE
bcf0: 59 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20 20 20  Y, b, c);.      
bd00: 43 52 45 41 54 45 20 49 4e 44 45 58 20 74 33 5f  CREATE INDEX t3_
bd10: 69 64 78 31 20 4f 4e 20 74 33 28 63 20 43 4f 4c  idx1 ON t3(c COL
bd20: 4c 41 54 45 20 42 49 4e 41 52 59 29 3b 0a 20 20  LATE BINARY);.  
bd30: 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58      CREATE INDEX
bd40: 20 74 33 5f 69 64 78 32 20 4f 4e 20 74 33 28 62   t3_idx2 ON t3(b
bd50: 20 43 4f 4c 4c 41 54 45 20 4e 4f 43 41 53 45 29   COLLATE NOCASE)
bd60: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20  ;.    }.  } {}. 
bd70: 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e   do_test auth-1.
bd80: 32 38 38 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a  288 {.    set ::
bd90: 61 75 74 68 61 72 67 73 20 7b 7d 0a 20 20 20 20  authargs {}.    
bda0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
bdb0: 52 45 49 4e 44 45 58 20 74 65 6d 70 2e 74 33 5f  REINDEX temp.t3_
bdc0: 69 64 78 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20  idx1;.    }.    
bdd0: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 20  set ::authargs. 
bde0: 20 7d 20 7b 74 33 5f 69 64 78 31 20 7b 7d 20 74   } {t3_idx1 {} t
bdf0: 65 6d 70 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73  emp {}}.  do_tes
be00: 74 20 61 75 74 68 2d 31 2e 32 38 39 20 7b 0a 20  t auth-1.289 {. 
be10: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
be20: 73 20 7b 7d 0a 20 20 20 20 65 78 65 63 73 71 6c  s {}.    execsql
be30: 20 7b 0a 20 20 20 20 20 20 52 45 49 4e 44 45 58   {.      REINDEX
be40: 20 42 49 4e 41 52 59 3b 0a 20 20 20 20 7d 0a 20   BINARY;.    }. 
be50: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
be60: 73 0a 20 20 7d 20 7b 74 33 5f 69 64 78 31 20 7b  s.  } {t3_idx1 {
be70: 7d 20 74 65 6d 70 20 7b 7d 20 73 71 6c 69 74 65  } temp {} sqlite
be80: 5f 61 75 74 6f 69 6e 64 65 78 5f 74 33 5f 31 20  _autoindex_t3_1 
be90: 7b 7d 20 74 65 6d 70 20 7b 7d 7d 0a 20 20 64 6f  {} temp {}}.  do
bea0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 32 39 30  _test auth-1.290
beb0: 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a 61 75 74   {.    set ::aut
bec0: 68 61 72 67 73 20 7b 7d 0a 20 20 20 20 65 78 65  hargs {}.    exe
bed0: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 52 45 49  csql {.      REI
bee0: 4e 44 45 58 20 4e 4f 43 41 53 45 3b 0a 20 20 20  NDEX NOCASE;.   
bef0: 20 7d 0a 20 20 20 20 73 65 74 20 3a 3a 61 75 74   }.    set ::aut
bf00: 68 61 72 67 73 0a 20 20 7d 20 7b 74 33 5f 69 64  hargs.  } {t3_id
bf10: 78 32 20 7b 7d 20 74 65 6d 70 20 7b 7d 7d 0a 20  x2 {} temp {}}. 
bf20: 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e   do_test auth-1.
bf30: 32 39 31 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a  291 {.    set ::
bf40: 61 75 74 68 61 72 67 73 20 7b 7d 0a 20 20 20 20  authargs {}.    
bf50: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
bf60: 52 45 49 4e 44 45 58 20 74 65 6d 70 2e 74 33 3b  REINDEX temp.t3;
bf70: 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 74 20 3a  .    }.    set :
bf80: 3a 61 75 74 68 61 72 67 73 0a 20 20 7d 20 7b 74  :authargs.  } {t
bf90: 33 5f 69 64 78 32 20 7b 7d 20 74 65 6d 70 20 7b  3_idx2 {} temp {
bfa0: 7d 20 74 33 5f 69 64 78 31 20 7b 7d 20 74 65 6d  } t3_idx1 {} tem
bfb0: 70 20 7b 7d 20 73 71 6c 69 74 65 5f 61 75 74 6f  p {} sqlite_auto
bfc0: 69 6e 64 65 78 5f 74 33 5f 31 20 7b 7d 20 74 65  index_t3_1 {} te
bfd0: 6d 70 20 7b 7d 7d 0a 20 20 70 72 6f 63 20 61 75  mp {}}.  proc au
bfe0: 74 68 20 7b 63 6f 64 65 20 61 72 67 73 7d 20 7b  th {code args} {
bff0: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
c000: 22 53 51 4c 49 54 45 5f 52 45 49 4e 44 45 58 22  "SQLITE_REINDEX"
c010: 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a  } {.      set ::
c020: 61 75 74 68 61 72 67 73 20 5b 63 6f 6e 63 61 74  authargs [concat
c030: 20 24 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 72   $::authargs [lr
c040: 61 6e 67 65 20 24 61 72 67 73 20 30 20 33 5d 5d  ange $args 0 3]]
c050: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
c060: 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a  LITE_DENY.    }.
c070: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
c080: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 64 6f 5f 74 65  E_OK.  }.  do_te
c090: 73 74 20 61 75 74 68 2d 31 2e 32 39 32 20 7b 0a  st auth-1.292 {.
c0a0: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
c0b0: 67 73 20 7b 7d 0a 20 20 20 20 63 61 74 63 68 73  gs {}.    catchs
c0c0: 71 6c 20 7b 0a 20 20 20 20 20 20 52 45 49 4e 44  ql {.      REIND
c0d0: 45 58 20 74 65 6d 70 2e 74 33 3b 0a 20 20 20 20  EX temp.t3;.    
c0e0: 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f 74 20 61 75  }.  } {1 {not au
c0f0: 74 68 6f 72 69 7a 65 64 7d 7d 0a 20 20 64 6f 5f  thorized}}.  do_
c100: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 39 33 20  test auth-1.293 
c110: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
c120: 20 20 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45        DROP TABLE
c130: 20 74 33 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b   t3;.    }.  } {
c140: 7d 0a 7d 0a 0a 7d 20 3b 23 20 69 66 63 61 70 61  }.}..} ;# ifcapa
c150: 62 6c 65 20 72 65 69 6e 64 65 78 20 0a 0a 69 66  ble reindex ..if
c160: 63 61 70 61 62 6c 65 20 61 6e 61 6c 79 7a 65 20  capable analyze 
c170: 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63  {.  proc auth {c
c180: 6f 64 65 20 61 72 67 73 7d 20 7b 0a 20 20 20 20  ode args} {.    
c190: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
c1a0: 54 45 5f 41 4e 41 4c 59 5a 45 22 7d 20 7b 0a 20  TE_ANALYZE"} {. 
c1b0: 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61       set ::autha
c1c0: 72 67 73 20 5b 63 6f 6e 63 61 74 20 24 3a 3a 61  rgs [concat $::a
c1d0: 75 74 68 61 72 67 73 20 5b 6c 72 61 6e 67 65 20  uthargs [lrange 
c1e0: 24 61 72 67 73 20 30 20 33 5d 5d 0a 20 20 20 20  $args 0 3]].    
c1f0: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
c200: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 64 6f 5f  ITE_OK.  }.  do_
c210: 74 65 73 74 20 61 75 74 68 2d 31 2e 32 39 34 20  test auth-1.294 
c220: 7b 0a 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68  {.    set ::auth
c230: 61 72 67 73 20 7b 7d 0a 20 20 20 20 65 78 65 63  args {}.    exec
c240: 73 71 6c 20 7b 0a 20 20 20 20 20 20 43 52 45 41  sql {.      CREA
c250: 54 45 20 54 41 42 4c 45 20 74 34 28 61 2c 62 2c  TE TABLE t4(a,b,
c260: 63 29 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45  c);.      CREATE
c270: 20 49 4e 44 45 58 20 74 34 69 31 20 4f 4e 20 74   INDEX t4i1 ON t
c280: 34 28 61 29 3b 0a 20 20 20 20 20 20 43 52 45 41  4(a);.      CREA
c290: 54 45 20 49 4e 44 45 58 20 74 34 69 32 20 4f 4e  TE INDEX t4i2 ON
c2a0: 20 74 34 28 62 2c 61 2c 63 29 3b 0a 20 20 20 20   t4(b,a,c);.    
c2b0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34    INSERT INTO t4
c2c0: 20 56 41 4c 55 45 53 28 31 2c 32 2c 33 29 3b 0a   VALUES(1,2,3);.
c2d0: 20 20 20 20 20 20 41 4e 41 4c 59 5a 45 3b 0a 20        ANALYZE;. 
c2e0: 20 20 20 7d 0a 20 20 20 20 73 65 74 20 3a 3a 61     }.    set ::a
c2f0: 75 74 68 61 72 67 73 0a 20 20 7d 20 7b 74 34 20  uthargs.  } {t4 
c300: 7b 7d 20 6d 61 69 6e 20 7b 7d 20 74 32 20 7b 7d  {} main {} t2 {}
c310: 20 6d 61 69 6e 20 7b 7d 7d 0a 20 20 64 6f 5f 74   main {}}.  do_t
c320: 65 73 74 20 61 75 74 68 2d 31 2e 32 39 35 20 7b  est auth-1.295 {
c330: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
c340: 20 20 20 20 20 53 45 4c 45 43 54 20 63 6f 75 6e       SELECT coun
c350: 74 28 2a 29 20 46 52 4f 4d 20 73 71 6c 69 74 65  t(*) FROM sqlite
c360: 5f 73 74 61 74 31 3b 0a 20 20 20 20 7d 0a 20 20  _stat1;.    }.  
c370: 7d 20 33 0a 20 20 70 72 6f 63 20 61 75 74 68 20  } 3.  proc auth 
c380: 7b 63 6f 64 65 20 61 72 67 73 7d 20 7b 0a 20 20  {code args} {.  
c390: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
c3a0: 4c 49 54 45 5f 41 4e 41 4c 59 5a 45 22 7d 20 7b  LITE_ANALYZE"} {
c3b0: 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74  .      set ::aut
c3c0: 68 61 72 67 73 20 5b 63 6f 6e 63 61 74 20 24 3a  hargs [concat $:
c3d0: 3a 61 75 74 68 61 72 67 73 20 24 61 72 67 73 5d  :authargs $args]
c3e0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
c3f0: 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a  LITE_DENY.    }.
c400: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
c410: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 64 6f 5f 74 65  E_OK.  }.  do_te
c420: 73 74 20 61 75 74 68 2d 31 2e 32 39 36 20 7b 0a  st auth-1.296 {.
c430: 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72      set ::authar
c440: 67 73 20 7b 7d 0a 20 20 20 20 63 61 74 63 68 73  gs {}.    catchs
c450: 71 6c 20 7b 0a 20 20 20 20 20 20 41 4e 41 4c 59  ql {.      ANALY
c460: 5a 45 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31  ZE;.    }.  } {1
c470: 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64   {not authorized
c480: 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74  }}.  do_test aut
c490: 68 2d 31 2e 32 39 37 20 7b 0a 20 20 20 20 65 78  h-1.297 {.    ex
c4a0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 53 45  ecsql {.      SE
c4b0: 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52  LECT count(*) FR
c4c0: 4f 4d 20 73 71 6c 69 74 65 5f 73 74 61 74 31 3b  OM sqlite_stat1;
c4d0: 0a 20 20 20 20 7d 0a 20 20 7d 20 33 0a 7d 20 3b  .    }.  } 3.} ;
c4e0: 23 20 69 66 63 61 70 61 62 6c 65 20 61 6e 61 6c  # ifcapable anal
c4f0: 79 7a 65 0a 0a 0a 23 20 41 75 74 68 6f 72 69 7a  yze...# Authoriz
c500: 61 74 69 6f 6e 20 66 6f 72 20 41 4c 54 45 52 20  ation for ALTER 
c510: 54 41 42 4c 45 20 41 44 44 20 43 4f 4c 55 4d 4e  TABLE ADD COLUMN
c520: 2e 0a 23 20 54 68 65 73 65 20 74 65 73 74 73 20  ..# These tests 
c530: 61 72 65 20 6f 6d 69 74 74 65 64 20 69 66 20 74  are omitted if t
c540: 68 65 20 6c 69 62 72 61 72 79 0a 23 20 77 61 73  he library.# was
c550: 20 62 75 69 6c 74 20 77 69 74 68 6f 75 74 20 41   built without A
c560: 4c 54 45 52 20 54 41 42 4c 45 20 73 75 70 70 6f  LTER TABLE suppo
c570: 72 74 2e 0a 69 66 63 61 70 61 62 6c 65 20 7b 61  rt..ifcapable {a
c580: 6c 74 65 72 74 61 62 6c 65 7d 20 7b 0a 20 20 64  ltertable} {.  d
c590: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 33 30  o_test auth-1.30
c5a0: 30 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  0 {.    execsql 
c5b0: 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 35  {CREATE TABLE t5
c5c0: 28 78 29 7d 0a 20 20 20 20 70 72 6f 63 20 61 75  (x)}.    proc au
c5d0: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
c5e0: 67 32 20 61 72 67 33 20 61 72 67 34 20 61 72 67  g2 arg3 arg4 arg
c5f0: 73 7d 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24  s} {.      if {$
c600: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 41 4c  code=="SQLITE_AL
c610: 54 45 52 5f 54 41 42 4c 45 22 7d 20 7b 0a 20 20  TER_TABLE"} {.  
c620: 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68        set ::auth
c630: 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31  args [list $arg1
c640: 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72   $arg2 $arg3 $ar
c650: 67 34 5d 0a 20 20 20 20 20 20 20 20 72 65 74 75  g4].        retu
c660: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20  rn SQLITE_OK.   
c670: 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72     }.      retur
c680: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20  n SQLITE_OK.    
c690: 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b  }.    catchsql {
c6a0: 0a 20 20 20 20 20 20 41 4c 54 45 52 20 54 41 42  .      ALTER TAB
c6b0: 4c 45 20 74 35 20 41 44 44 20 43 4f 4c 55 4d 4e  LE t5 ADD COLUMN
c6c0: 20 6e 65 77 5f 63 6f 6c 5f 31 3b 0a 20 20 20 20   new_col_1;.    
c6d0: 7d 0a 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20 20 64  }.  } {0 {}}.  d
c6e0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 33 30  o_test auth-1.30
c6f0: 31 20 7b 0a 20 20 20 20 73 65 74 20 78 20 5b 65  1 {.    set x [e
c700: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 73  xecsql {SELECT s
c710: 71 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  ql FROM sqlite_m
c720: 61 73 74 65 72 20 57 48 45 52 45 20 6e 61 6d 65  aster WHERE name
c730: 3d 27 74 35 27 7d 5d 0a 20 20 20 20 72 65 67 65  ='t5'}].    rege
c740: 78 70 20 6e 65 77 5f 63 6f 6c 5f 31 20 24 78 0a  xp new_col_1 $x.
c750: 20 20 7d 20 7b 31 7d 0a 20 20 64 6f 5f 74 65 73    } {1}.  do_tes
c760: 74 20 61 75 74 68 2d 31 2e 33 30 32 20 7b 0a 20  t auth-1.302 {. 
c770: 20 20 20 73 65 74 20 61 75 74 68 61 72 67 73 0a     set authargs.
c780: 20 20 7d 20 7b 6d 61 69 6e 20 74 35 20 7b 7d 20    } {main t5 {} 
c790: 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75  {}}.  do_test au
c7a0: 74 68 2d 31 2e 33 30 33 20 7b 0a 20 20 20 20 70  th-1.303 {.    p
c7b0: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
c7c0: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
c7d0: 67 34 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 20  g4 args} {.     
c7e0: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
c7f0: 49 54 45 5f 41 4c 54 45 52 5f 54 41 42 4c 45 22  ITE_ALTER_TABLE"
c800: 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20  } {.        set 
c810: 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74  ::authargs [list
c820: 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72   $arg1 $arg2 $ar
c830: 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20  g3 $arg4].      
c840: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
c850: 49 47 4e 4f 52 45 0a 20 20 20 20 20 20 7d 0a 20  IGNORE.      }. 
c860: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
c870: 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20  TE_OK.    }.    
c880: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20  catchsql {.     
c890: 20 41 4c 54 45 52 20 54 41 42 4c 45 20 74 35 20   ALTER TABLE t5 
c8a0: 41 44 44 20 43 4f 4c 55 4d 4e 20 6e 65 77 5f 63  ADD COLUMN new_c
c8b0: 6f 6c 5f 32 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  ol_2;.    }.  } 
c8c0: 7b 30 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74  {0 {}}.  do_test
c8d0: 20 61 75 74 68 2d 31 2e 33 30 34 20 7b 0a 20 20   auth-1.304 {.  
c8e0: 20 20 73 65 74 20 78 20 5b 65 78 65 63 73 71 6c    set x [execsql
c8f0: 20 7b 53 45 4c 45 43 54 20 73 71 6c 20 46 52 4f   {SELECT sql FRO
c900: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  M sqlite_master 
c910: 57 48 45 52 45 20 6e 61 6d 65 3d 27 74 35 27 7d  WHERE name='t5'}
c920: 5d 0a 20 20 20 20 72 65 67 65 78 70 20 6e 65 77  ].    regexp new
c930: 5f 63 6f 6c 5f 32 20 24 78 0a 20 20 7d 20 7b 30  _col_2 $x.  } {0
c940: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68  }.  do_test auth
c950: 2d 31 2e 33 30 35 20 7b 0a 20 20 20 20 73 65 74  -1.305 {.    set
c960: 20 61 75 74 68 61 72 67 73 0a 20 20 7d 20 7b 6d   authargs.  } {m
c970: 61 69 6e 20 74 35 20 7b 7d 20 7b 7d 7d 0a 20 20  ain t5 {} {}}.  
c980: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 33  do_test auth-1.3
c990: 30 36 20 7b 0a 20 20 20 20 70 72 6f 63 20 61 75  06 {.    proc au
c9a0: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
c9b0: 67 32 20 61 72 67 33 20 61 72 67 34 20 61 72 67  g2 arg3 arg4 arg
c9c0: 73 7d 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24  s} {.      if {$
c9d0: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 41 4c  code=="SQLITE_AL
c9e0: 54 45 52 5f 54 41 42 4c 45 22 7d 20 7b 0a 20 20  TER_TABLE"} {.  
c9f0: 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68        set ::auth
ca00: 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31  args [list $arg1
ca10: 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72   $arg2 $arg3 $ar
ca20: 67 34 5d 0a 20 20 20 20 20 20 20 20 72 65 74 75  g4].        retu
ca30: 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20  rn SQLITE_DENY. 
ca40: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74       }.      ret
ca50: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
ca60: 20 20 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c    }.    catchsql
ca70: 20 7b 0a 20 20 20 20 20 20 41 4c 54 45 52 20 54   {.      ALTER T
ca80: 41 42 4c 45 20 74 35 20 41 44 44 20 43 4f 4c 55  ABLE t5 ADD COLU
ca90: 4d 4e 20 6e 65 77 5f 63 6f 6c 5f 33 0a 20 20 20  MN new_col_3.   
caa0: 20 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f 74 20 61   }.  } {1 {not a
cab0: 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 20 20 64 6f  uthorized}}.  do
cac0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 33 30 37  _test auth-1.307
cad0: 20 7b 0a 20 20 20 20 73 65 74 20 78 20 5b 65 78   {.    set x [ex
cae0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 73 71  ecsql {SELECT sq
caf0: 6c 20 46 52 4f 4d 20 74 65 6d 70 2e 73 71 6c 69  l FROM temp.sqli
cb00: 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20  te_master WHERE 
cb10: 74 79 70 65 3d 27 74 35 27 7d 5d 0a 20 20 20 20  type='t5'}].    
cb20: 72 65 67 65 78 70 20 6e 65 77 5f 63 6f 6c 5f 33  regexp new_col_3
cb30: 20 24 78 0a 20 20 7d 20 7b 30 7d 0a 0a 20 20 64   $x.  } {0}..  d
cb40: 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 33 30  o_test auth-1.30
cb50: 38 20 7b 0a 20 20 20 20 73 65 74 20 61 75 74 68  8 {.    set auth
cb60: 61 72 67 73 0a 20 20 7d 20 7b 6d 61 69 6e 20 74  args.  } {main t
cb70: 35 20 7b 7d 20 7b 7d 7d 0a 20 20 65 78 65 63 73  5 {} {}}.  execs
cb80: 71 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45 20 74  ql {DROP TABLE t
cb90: 35 7d 0a 7d 20 3b 23 20 69 66 63 61 70 61 62 6c  5}.} ;# ifcapabl
cba0: 65 20 61 6c 74 65 72 74 61 62 6c 65 0a 0a 69 66  e altertable..if
cbb0: 63 61 70 61 62 6c 65 20 7b 63 74 65 7d 20 7b 0a  capable {cte} {.
cbc0: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31    do_test auth-1
cbd0: 2e 33 31 30 20 7b 0a 20 20 20 20 70 72 6f 63 20  .310 {.    proc 
cbe0: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
cbf0: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 20 61  arg2 arg3 arg4 a
cc00: 72 67 73 7d 20 7b 0a 20 20 20 20 20 20 69 66 20  rgs} {.      if 
cc10: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
cc20: 52 45 43 55 52 53 49 56 45 22 7d 20 7b 0a 20 20  RECURSIVE"} {.  
cc30: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
cc40: 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 20 20 7d  ITE_DENY.      }
cc50: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
cc60: 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20  LITE_OK.    }.  
cc70: 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20    db eval {.    
cc80: 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 49 46     DROP TABLE IF
cc90: 20 45 58 49 53 54 53 20 74 31 3b 0a 20 20 20 20   EXISTS t1;.    
cca0: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
ccb0: 74 31 28 61 2c 62 29 3b 0a 20 20 20 20 20 20 20  t1(a,b);.       
ccc0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
ccd0: 41 4c 55 45 53 28 31 2c 32 29 2c 28 33 2c 34 29  ALUES(1,2),(3,4)
cce0: 2c 28 35 2c 36 29 3b 0a 20 20 20 20 7d 0a 20 20  ,(5,6);.    }.  
ccf0: 7d 20 7b 7d 0a 20 20 64 6f 5f 63 61 74 63 68 73  } {}.  do_catchs
cd00: 71 6c 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 33  ql_test auth-1.3
cd10: 31 31 20 7b 0a 20 20 20 20 57 49 54 48 0a 20 20  11 {.    WITH.  
cd20: 20 20 20 20 20 61 75 74 68 31 33 31 31 28 78 2c       auth1311(x,
cd30: 79 29 20 41 53 20 28 53 45 4c 45 43 54 20 61 2b  y) AS (SELECT a+
cd40: 62 2c 20 62 2d 61 20 46 52 4f 4d 20 74 31 29 0a  b, b-a FROM t1).
cd50: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
cd60: 4d 20 61 75 74 68 31 33 31 31 20 4f 52 44 45 52  M auth1311 ORDER
cd70: 20 42 59 20 78 3b 0a 20 20 7d 20 7b 30 20 7b 33   BY x;.  } {0 {3
cd80: 20 31 20 37 20 31 20 31 31 20 31 7d 7d 0a 20 20   1 7 1 11 1}}.  
cd90: 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65 73 74  do_catchsql_test
cda0: 20 61 75 74 68 2d 31 2e 33 31 32 20 7b 0a 20 20   auth-1.312 {.  
cdb0: 20 20 57 49 54 48 20 52 45 43 55 52 53 49 56 45    WITH RECURSIVE
cdc0: 0a 20 20 20 20 20 20 20 61 75 74 68 31 33 31 32  .       auth1312
cdd0: 28 78 2c 79 29 20 41 53 20 28 53 45 4c 45 43 54  (x,y) AS (SELECT
cde0: 20 61 2b 62 2c 20 62 2d 61 20 46 52 4f 4d 20 74   a+b, b-a FROM t
cdf0: 31 29 0a 20 20 20 20 53 45 4c 45 43 54 20 78 2c  1).    SELECT x,
ce00: 20 79 20 46 52 4f 4d 20 61 75 74 68 31 33 31 32   y FROM auth1312
ce10: 20 4f 52 44 45 52 20 42 59 20 78 3b 0a 20 20 7d   ORDER BY x;.  }
ce20: 20 7b 30 20 7b 33 20 31 20 37 20 31 20 31 31 20   {0 {3 1 7 1 11 
ce30: 31 7d 7d 0a 20 20 64 6f 5f 63 61 74 63 68 73 71  1}}.  do_catchsq
ce40: 6c 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 33 31  l_test auth-1.31
ce50: 33 20 7b 0a 20 20 20 20 57 49 54 48 20 52 45 43  3 {.    WITH REC
ce60: 55 52 53 49 56 45 0a 20 20 20 20 20 20 20 61 75  URSIVE.       au
ce70: 74 68 31 33 31 33 28 78 29 20 41 53 20 28 56 41  th1313(x) AS (VA
ce80: 4c 55 45 53 28 31 29 20 55 4e 49 4f 4e 20 41 4c  LUES(1) UNION AL
ce90: 4c 20 53 45 4c 45 43 54 20 78 2b 31 20 46 52 4f  L SELECT x+1 FRO
cea0: 4d 20 61 75 74 68 31 33 31 33 20 57 48 45 52 45  M auth1313 WHERE
ceb0: 20 78 3c 35 29 0a 20 20 20 20 53 45 4c 45 43 54   x<5).    SELECT
cec0: 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 20   * FROM t1;.  } 
ced0: 7b 30 20 7b 31 20 32 20 33 20 34 20 35 20 36 7d  {0 {1 2 3 4 5 6}
cee0: 7d 0a 20 20 64 6f 5f 63 61 74 63 68 73 71 6c 5f  }.  do_catchsql_
cef0: 74 65 73 74 20 61 75 74 68 2d 31 2e 33 31 34 20  test auth-1.314 
cf00: 7b 0a 20 20 20 20 57 49 54 48 20 52 45 43 55 52  {.    WITH RECUR
cf10: 53 49 56 45 0a 20 20 20 20 20 20 20 61 75 74 68  SIVE.       auth
cf20: 31 33 31 34 28 78 29 20 41 53 20 28 56 41 4c 55  1314(x) AS (VALU
cf30: 45 53 28 31 29 20 55 4e 49 4f 4e 20 41 4c 4c 20  ES(1) UNION ALL 
cf40: 53 45 4c 45 43 54 20 78 2b 31 20 46 52 4f 4d 20  SELECT x+1 FROM 
cf50: 61 75 74 68 31 33 31 34 20 57 48 45 52 45 20 78  auth1314 WHERE x
cf60: 3c 35 29 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  <5).    SELECT *
cf70: 20 46 52 4f 4d 20 74 31 20 4c 45 46 54 20 4a 4f   FROM t1 LEFT JO
cf80: 49 4e 20 61 75 74 68 31 33 31 34 3b 0a 20 20 7d  IN auth1314;.  }
cf90: 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69   {1 {not authori
cfa0: 7a 65 64 7d 7d 0a 7d 20 3b 23 20 69 66 63 61 70  zed}}.} ;# ifcap
cfb0: 61 62 6c 65 20 63 74 65 0a 0a 23 0a 23 20 64 62  able cte..#.# db
cfc0: 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 73 71   eval {SELECT sq
cfd0: 6c 20 46 52 4f 4d 20 74 65 6d 70 2e 73 71 6c 69  l FROM temp.sqli
cfe0: 74 65 5f 6d 61 73 74 65 72 7d 20 7b 70 75 74 73  te_master} {puts
cff0: 20 22 54 45 4d 50 3a 20 24 73 71 6c 3b 22 7d 0a   "TEMP: $sql;"}.
d000: 23 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43  # db eval {SELEC
d010: 54 20 73 71 6c 20 46 52 4f 4d 20 6d 61 69 6e 2e  T sql FROM main.
d020: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 20 7b  sqlite_master} {
d030: 70 75 74 73 20 22 4d 41 49 4e 3a 20 24 73 71 6c  puts "MAIN: $sql
d040: 3b 22 7d 0a 23 0a 23 20 20 20 20 4d 41 49 4e 3a  ;"}.#.#    MAIN:
d050: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 22 74   CREATE TABLE "t
d060: 32 22 28 61 2c 62 2c 63 29 3b 0a 23 20 20 20 20  2"(a,b,c);.#    
d070: 4d 41 49 4e 3a 20 43 52 45 41 54 45 20 54 41 42  MAIN: CREATE TAB
d080: 4c 45 20 74 34 28 61 2c 62 2c 63 29 3b 0a 23 20  LE t4(a,b,c);.# 
d090: 20 20 20 4d 41 49 4e 3a 20 43 52 45 41 54 45 20     MAIN: CREATE 
d0a0: 49 4e 44 45 58 20 74 34 69 31 20 4f 4e 20 74 34  INDEX t4i1 ON t4
d0b0: 28 61 29 3b 0a 23 20 20 20 20 4d 41 49 4e 3a 20  (a);.#    MAIN: 
d0c0: 43 52 45 41 54 45 20 49 4e 44 45 58 20 74 34 69  CREATE INDEX t4i
d0d0: 32 20 4f 4e 20 74 34 28 62 2c 61 2c 63 29 3b 0a  2 ON t4(b,a,c);.
d0e0: 23 20 20 20 20 4d 41 49 4e 3a 20 43 52 45 41 54  #    MAIN: CREAT
d0f0: 45 20 54 41 42 4c 45 20 73 71 6c 69 74 65 5f 73  E TABLE sqlite_s
d100: 74 61 74 31 28 74 62 6c 2c 69 64 78 2c 73 74 61  tat1(tbl,idx,sta
d110: 74 29 3b 0a 23 20 20 20 20 4d 41 49 4e 3a 20 43  t);.#    MAIN: C
d120: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61  REATE TABLE t1(a
d130: 2c 62 29 3b 0a 23 0a 69 66 63 61 70 61 62 6c 65  ,b);.#.ifcapable
d140: 20 61 6c 74 65 72 74 61 62 6c 65 26 26 76 74 61   altertable&&vta
d150: 62 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 31 2e  b {.  do_test 1.
d160: 33 35 30 20 7b 0a 20 20 20 20 70 72 6f 63 20 61  350 {.    proc a
d170: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
d180: 72 67 32 20 61 72 67 33 20 61 72 67 34 20 61 72  rg2 arg3 arg4 ar
d190: 67 73 7d 20 7b 0a 20 20 20 20 20 20 69 66 20 7b  gs} {.      if {
d1a0: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 41  $code=="SQLITE_A
d1b0: 4c 54 45 52 5f 54 41 42 4c 45 22 7d 20 7b 0a 20  LTER_TABLE"} {. 
d1c0: 20 20 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74         set ::aut
d1d0: 68 61 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67  hargs [list $arg
d1e0: 31 20 24 61 72 67 32 20 24 61 72 67 33 20 24 61  1 $arg2 $arg3 $a
d1f0: 72 67 34 5d 0a 20 20 20 20 20 20 20 20 72 65 74  rg4].        ret
d200: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
d210: 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75      }.      retu
d220: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20  rn SQLITE_OK.   
d230: 20 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20   }.    catchsql 
d240: 7b 0a 20 20 20 20 20 20 41 4c 54 45 52 20 54 41  {.      ALTER TA
d250: 42 4c 45 20 74 31 20 52 45 4e 41 4d 45 20 43 4f  BLE t1 RENAME CO
d260: 4c 55 4d 4e 20 62 20 54 4f 20 62 63 64 65 66 67  LUMN b TO bcdefg
d270: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 30 20 7b  ;.    }.  } {0 {
d280: 7d 7d 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f  }}.  do_execsql_
d290: 74 65 73 74 20 61 75 74 68 2d 31 2e 33 35 31 20  test auth-1.351 
d2a0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 6e 61 6d  {.    SELECT nam
d2b0: 65 20 46 52 4f 4d 20 70 72 61 67 6d 61 5f 74 61  e FROM pragma_ta
d2c0: 62 6c 65 5f 69 6e 66 6f 28 27 74 31 27 29 20 4f  ble_info('t1') O
d2d0: 52 44 45 52 20 42 59 20 63 69 64 3b 0a 20 20 7d  RDER BY cid;.  }
d2e0: 20 7b 61 20 62 63 64 65 66 67 7d 0a 20 20 64 6f   {a bcdefg}.  do
d2f0: 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 33 35 32  _test auth-1.352
d300: 20 7b 0a 20 20 20 20 73 65 74 20 61 75 74 68 61   {.    set autha
d310: 72 67 73 0a 20 20 7d 20 7b 6d 61 69 6e 20 74 31  rgs.  } {main t1
d320: 20 7b 7d 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73   {} {}}.  do_tes
d330: 74 20 31 2e 33 35 33 20 7b 0a 20 20 20 20 70 72  t 1.353 {.    pr
d340: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
d350: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
d360: 34 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 20 20  4 args} {.      
d370: 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49  if {$code=="SQLI
d380: 54 45 5f 41 4c 54 45 52 5f 54 41 42 4c 45 22 7d  TE_ALTER_TABLE"}
d390: 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 3a   {.        set :
d3a0: 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 20  :authargs [list 
d3b0: 24 61 72 67 31 20 24 61 72 67 32 20 24 61 72 67  $arg1 $arg2 $arg
d3c0: 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20 20 20  3 $arg4].       
d3d0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49   return SQLITE_I
d3e0: 47 4e 4f 52 45 0a 20 20 20 20 20 20 7d 0a 20 20  GNORE.      }.  
d3f0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
d400: 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63  E_OK.    }.    c
d410: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20  atchsql {.      
d420: 41 4c 54 45 52 20 54 41 42 4c 45 20 74 31 20 52  ALTER TABLE t1 R
d430: 45 4e 41 4d 45 20 43 4f 4c 55 4d 4e 20 62 63 64  ENAME COLUMN bcd
d440: 65 66 67 20 54 4f 20 62 3b 0a 20 20 20 20 7d 0a  efg TO b;.    }.
d450: 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20 20 64 6f 5f    } {0 {}}.  do_
d460: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 61 75 74  execsql_test aut
d470: 68 2d 31 2e 33 35 34 20 7b 0a 20 20 20 20 53 45  h-1.354 {.    SE
d480: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 70  LECT name FROM p
d490: 72 61 67 6d 61 5f 74 61 62 6c 65 5f 69 6e 66 6f  ragma_table_info
d4a0: 28 27 74 31 27 29 20 4f 52 44 45 52 20 42 59 20  ('t1') ORDER BY 
d4b0: 63 69 64 3b 0a 20 20 7d 20 7b 61 20 62 63 64 65  cid;.  } {a bcde
d4c0: 66 67 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75  fg}.  do_test au
d4d0: 74 68 2d 31 2e 33 35 35 20 7b 0a 20 20 20 20 73  th-1.355 {.    s
d4e0: 65 74 20 61 75 74 68 61 72 67 73 0a 20 20 7d 20  et authargs.  } 
d4f0: 7b 6d 61 69 6e 20 74 31 20 7b 7d 20 7b 7d 7d 0a  {main t1 {} {}}.
d500: 20 20 64 6f 5f 74 65 73 74 20 31 2e 33 35 36 20    do_test 1.356 
d510: 7b 0a 20 20 20 20 70 72 6f 63 20 61 75 74 68 20  {.    proc auth 
d520: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
d530: 61 72 67 33 20 61 72 67 34 20 61 72 67 73 7d 20  arg3 arg4 args} 
d540: 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64  {.      if {$cod
d550: 65 3d 3d 22 53 51 4c 49 54 45 5f 41 4c 54 45 52  e=="SQLITE_ALTER
d560: 5f 54 41 42 4c 45 22 7d 20 7b 0a 20 20 20 20 20  _TABLE"} {.     
d570: 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67     set ::autharg
d580: 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61  s [list $arg1 $a
d590: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 5d  rg2 $arg3 $arg4]
d5a0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
d5b0: 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 20 20  SQLITE_DENY.    
d5c0: 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e    }.      return
d5d0: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 7d   SQLITE_OK.    }
d5e0: 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a  .    catchsql {.
d5f0: 20 20 20 20 20 20 41 4c 54 45 52 20 54 41 42 4c        ALTER TABL
d600: 45 20 74 31 20 52 45 4e 41 4d 45 20 43 4f 4c 55  E t1 RENAME COLU
d610: 4d 4e 20 62 63 64 65 66 67 20 54 4f 20 62 3b 0a  MN bcdefg TO b;.
d620: 20 20 20 20 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f      }.  } {1 {no
d630: 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 20  t authorized}}. 
d640: 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74   do_execsql_test
d650: 20 61 75 74 68 2d 31 2e 33 35 36 20 7b 0a 20 20   auth-1.356 {.  
d660: 20 20 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52    SELECT name FR
d670: 4f 4d 20 70 72 61 67 6d 61 5f 74 61 62 6c 65 5f  OM pragma_table_
d680: 69 6e 66 6f 28 27 74 31 27 29 20 4f 52 44 45 52  info('t1') ORDER
d690: 20 42 59 20 63 69 64 3b 0a 20 20 7d 20 7b 61 20   BY cid;.  } {a 
d6a0: 62 63 64 65 66 67 7d 0a 20 20 64 6f 5f 74 65 73  bcdefg}.  do_tes
d6b0: 74 20 61 75 74 68 2d 31 2e 33 35 37 20 7b 0a 20  t auth-1.357 {. 
d6c0: 20 20 20 73 65 74 20 61 75 74 68 61 72 67 73 0a     set authargs.
d6d0: 20 20 7d 20 7b 6d 61 69 6e 20 74 31 20 7b 7d 20    } {main t1 {} 
d6e0: 7b 7d 7d 0a 7d 0a 0a 0a 64 6f 5f 74 65 73 74 20  {}}.}...do_test 
d6f0: 61 75 74 68 2d 32 2e 31 20 7b 0a 20 20 70 72 6f  auth-2.1 {.  pro
d700: 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67  c auth {code arg
d710: 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34  1 arg2 arg3 arg4
d720: 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 69 66 20   args} {.    if 
d730: 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f  {$code=="SQLITE_
d740: 52 45 41 44 22 20 26 26 20 24 61 72 67 31 3d 3d  READ" && $arg1==
d750: 22 74 33 22 20 26 26 20 24 61 72 67 32 3d 3d 22  "t3" && $arg2=="
d760: 78 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75  x"} {.      retu
d770: 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20  rn SQLITE_DENY. 
d780: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20     }.    return 
d790: 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20  SQLITE_OK.  }.  
d7a0: 64 62 20 61 75 74 68 6f 72 69 7a 65 72 20 3a 3a  db authorizer ::
d7b0: 61 75 74 68 0a 20 20 65 78 65 63 73 71 6c 20 7b  auth.  execsql {
d7c0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 33 28  CREATE TABLE t3(
d7d0: 78 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  x INTEGER PRIMAR
d7e0: 59 20 4b 45 59 2c 20 79 2c 20 7a 29 7d 0a 20 20  Y KEY, y, z)}.  
d7f0: 63 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54  catchsql {SELECT
d800: 20 2a 20 46 52 4f 4d 20 74 33 7d 0a 7d 20 7b 31   * FROM t3}.} {1
d810: 20 7b 61 63 63 65 73 73 20 74 6f 20 74 33 2e 78   {access to t3.x
d820: 20 69 73 20 70 72 6f 68 69 62 69 74 65 64 7d 7d   is prohibited}}
d830: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 32 2e  .do_test auth-2.
d840: 31 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  1 {.  catchsql {
d850: 53 45 4c 45 43 54 20 79 2c 7a 20 46 52 4f 4d 20  SELECT y,z FROM 
d860: 74 33 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f  t3}.} {0 {}}.do_
d870: 74 65 73 74 20 61 75 74 68 2d 32 2e 32 20 7b 0a  test auth-2.2 {.
d880: 20 20 63 61 74 63 68 73 71 6c 20 7b 53 45 4c 45    catchsql {SELE
d890: 43 54 20 52 4f 57 49 44 2c 79 2c 7a 20 46 52 4f  CT ROWID,y,z FRO
d8a0: 4d 20 74 33 7d 0a 7d 20 7b 31 20 7b 61 63 63 65  M t3}.} {1 {acce
d8b0: 73 73 20 74 6f 20 74 33 2e 78 20 69 73 20 70 72  ss to t3.x is pr
d8c0: 6f 68 69 62 69 74 65 64 7d 7d 0a 64 6f 5f 74 65  ohibited}}.do_te
d8d0: 73 74 20 61 75 74 68 2d 32 2e 33 20 7b 0a 20 20  st auth-2.3 {.  
d8e0: 63 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54  catchsql {SELECT
d8f0: 20 4f 49 44 2c 79 2c 7a 20 46 52 4f 4d 20 74 33   OID,y,z FROM t3
d900: 7d 0a 7d 20 7b 31 20 7b 61 63 63 65 73 73 20 74  }.} {1 {access t
d910: 6f 20 74 33 2e 78 20 69 73 20 70 72 6f 68 69 62  o t3.x is prohib
d920: 69 74 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  ited}}.do_test a
d930: 75 74 68 2d 32 2e 34 20 7b 0a 20 20 70 72 6f 63  uth-2.4 {.  proc
d940: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
d950: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 20   arg2 arg3 arg4 
d960: 61 72 67 73 7d 20 7b 0a 20 20 20 20 69 66 20 7b  args} {.    if {
d970: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 52  $code=="SQLITE_R
d980: 45 41 44 22 20 26 26 20 24 61 72 67 31 3d 3d 22  EAD" && $arg1=="
d990: 74 33 22 20 26 26 20 24 61 72 67 32 3d 3d 22 78  t3" && $arg2=="x
d9a0: 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72  "} {.      retur
d9b0: 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a  n SQLITE_IGNORE.
d9c0: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
d9d0: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
d9e0: 20 65 78 65 63 73 71 6c 20 7b 49 4e 53 45 52 54   execsql {INSERT
d9f0: 20 49 4e 54 4f 20 74 33 20 56 41 4c 55 45 53 28   INTO t3 VALUES(
da00: 34 34 2c 35 35 2c 36 36 29 7d 0a 20 20 63 61 74  44,55,66)}.  cat
da10: 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20  chsql {SELECT * 
da20: 46 52 4f 4d 20 74 33 7d 0a 7d 20 7b 30 20 7b 7b  FROM t3}.} {0 {{
da30: 7d 20 35 35 20 36 36 7d 7d 0a 64 6f 5f 74 65 73  } 55 66}}.do_tes
da40: 74 20 61 75 74 68 2d 32 2e 35 20 7b 0a 20 20 63  t auth-2.5 {.  c
da50: 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20  atchsql {SELECT 
da60: 72 6f 77 69 64 2c 79 2c 7a 20 46 52 4f 4d 20 74  rowid,y,z FROM t
da70: 33 7d 0a 7d 20 7b 30 20 7b 7b 7d 20 35 35 20 36  3}.} {0 {{} 55 6
da80: 36 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  6}}.do_test auth
da90: 2d 32 2e 36 20 7b 0a 20 20 70 72 6f 63 20 61 75  -2.6 {.  proc au
daa0: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
dab0: 67 32 20 61 72 67 33 20 61 72 67 34 20 61 72 67  g2 arg3 arg4 arg
dac0: 73 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f  s} {.    if {$co
dad0: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45 41 44  de=="SQLITE_READ
dae0: 22 20 26 26 20 24 61 72 67 31 3d 3d 22 74 33 22  " && $arg1=="t3"
daf0: 20 26 26 20 24 61 72 67 32 3d 3d 22 52 4f 57 49   && $arg2=="ROWI
db00: 44 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75  D"} {.      retu
db10: 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45  rn SQLITE_IGNORE
db20: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
db30: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
db40: 20 20 63 61 74 63 68 73 71 6c 20 7b 53 45 4c 45    catchsql {SELE
db50: 43 54 20 2a 20 46 52 4f 4d 20 74 33 7d 0a 7d 20  CT * FROM t3}.} 
db60: 7b 30 20 7b 34 34 20 35 35 20 36 36 7d 7d 0a 64  {0 {44 55 66}}.d
db70: 6f 5f 74 65 73 74 20 61 75 74 68 2d 32 2e 37 20  o_test auth-2.7 
db80: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 53 45  {.  catchsql {SE
db90: 4c 45 43 54 20 52 4f 57 49 44 2c 79 2c 7a 20 46  LECT ROWID,y,z F
dba0: 52 4f 4d 20 74 33 7d 0a 7d 20 7b 30 20 7b 34 34  ROM t3}.} {0 {44
dbb0: 20 35 35 20 36 36 7d 7d 0a 64 6f 5f 74 65 73 74   55 66}}.do_test
dbc0: 20 61 75 74 68 2d 32 2e 38 20 7b 0a 20 20 70 72   auth-2.8 {.  pr
dbd0: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
dbe0: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
dbf0: 34 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 69 66  4 args} {.    if
dc00: 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45   {$code=="SQLITE
dc10: 5f 52 45 41 44 22 20 26 26 20 24 61 72 67 31 3d  _READ" && $arg1=
dc20: 3d 22 74 32 22 20 26 26 20 24 61 72 67 32 3d 3d  ="t2" && $arg2==
dc30: 22 52 4f 57 49 44 22 7d 20 7b 0a 20 20 20 20 20  "ROWID"} {.     
dc40: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49   return SQLITE_I
dc50: 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20  GNORE.    }.    
dc60: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
dc70: 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20  .  }.  catchsql 
dc80: 7b 53 45 4c 45 43 54 20 52 4f 57 49 44 2c 62 2c  {SELECT ROWID,b,
dc90: 63 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 30 20  c FROM t2}.} {0 
dca0: 7b 7b 7d 20 32 20 33 33 20 7b 7d 20 38 20 39 7d  {{} 2 33 {} 8 9}
dcb0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 32  }.do_test auth-2
dcc0: 2e 39 2e 31 20 7b 0a 20 20 23 20 57 65 20 68 61  .9.1 {.  # We ha
dcd0: 76 65 20 74 6f 20 66 6c 75 73 68 20 74 68 65 20  ve to flush the 
dce0: 63 61 63 68 65 20 68 65 72 65 20 69 6e 20 63 61  cache here in ca
dcf0: 73 65 20 74 68 65 20 54 63 6c 20 69 6e 74 65 72  se the Tcl inter
dd00: 66 61 63 65 20 74 72 69 65 73 20 74 6f 0a 20 20  face tries to.  
dd10: 23 20 72 65 75 73 65 20 61 20 73 74 61 74 65 6d  # reuse a statem
dd20: 65 6e 74 20 63 6f 6d 70 69 6c 65 64 20 77 69 74  ent compiled wit
dd30: 68 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  h sqlite3_prepar
dd40: 65 5f 76 32 28 29 2e 20 49 6e 20 74 68 69 73 20  e_v2(). In this 
dd50: 63 61 73 65 2c 0a 20 20 23 20 74 68 65 20 66 69  case,.  # the fi
dd60: 72 73 74 20 65 72 72 6f 72 20 65 6e 63 6f 75 6e  rst error encoun
dd70: 74 65 72 65 64 20 69 73 20 61 6e 20 53 51 4c 49  tered is an SQLI
dd80: 54 45 5f 53 43 48 45 4d 41 20 65 72 72 6f 72 2e  TE_SCHEMA error.
dd90: 20 54 68 65 6e 2c 20 77 68 65 6e 0a 20 20 23 20   Then, when.  # 
dda0: 74 72 79 69 6e 67 20 74 6f 20 72 65 63 6f 6d 70  trying to recomp
ddb0: 69 6c 65 20 74 68 65 20 73 74 61 74 65 6d 65 6e  ile the statemen
ddc0: 74 2c 20 74 68 65 20 61 75 74 68 6f 72 69 7a 61  t, the authoriza
ddd0: 74 69 6f 6e 20 65 72 72 6f 72 20 69 73 20 65 6e  tion error is en
dde0: 63 6f 75 6e 74 65 72 65 64 2e 0a 20 20 23 20 49  countered..  # I
ddf0: 66 20 77 65 20 64 6f 20 6e 6f 74 20 66 6c 75 73  f we do not flus
de00: 68 20 74 68 65 20 63 61 63 68 65 2c 20 74 68 65  h the cache, the
de10: 20 63 6f 72 72 65 63 74 20 65 72 72 6f 72 20 6d   correct error m
de20: 65 73 73 61 67 65 20 69 73 20 72 65 74 75 72 6e  essage is return
de30: 65 64 2c 20 62 75 74 0a 20 20 23 20 74 68 65 20  ed, but.  # the 
de40: 65 72 72 6f 72 20 63 6f 64 65 20 69 73 20 53 51  error code is SQ
de50: 4c 49 54 45 5f 53 43 48 45 4d 41 2c 20 6e 6f 74  LITE_SCHEMA, not
de60: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 61 73   SQLITE_ERROR as
de70: 20 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65   required by the
de80: 20 74 65 73 74 0a 20 20 23 20 63 61 73 65 20 61   test.  # case a
de90: 66 74 65 72 20 74 68 69 73 20 6f 6e 65 2e 0a 20  fter this one.. 
dea0: 20 23 0a 20 20 64 62 20 63 61 63 68 65 20 66 6c   #.  db cache fl
deb0: 75 73 68 0a 0a 20 20 70 72 6f 63 20 61 75 74 68  ush..  proc auth
dec0: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
ded0: 20 61 72 67 33 20 61 72 67 34 20 61 72 67 73 7d   arg3 arg4 args}
dee0: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
def0: 3d 3d 22 53 51 4c 49 54 45 5f 52 45 41 44 22 20  =="SQLITE_READ" 
df00: 26 26 20 24 61 72 67 31 3d 3d 22 74 32 22 20 26  && $arg1=="t2" &
df10: 26 20 24 61 72 67 32 3d 3d 22 52 4f 57 49 44 22  & $arg2=="ROWID"
df20: 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  } {.      return
df30: 20 62 6f 67 75 73 0a 20 20 20 20 7d 0a 20 20 20   bogus.    }.   
df40: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
df50: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
df60: 20 7b 53 45 4c 45 43 54 20 52 4f 57 49 44 2c 62   {SELECT ROWID,b
df70: 2c 63 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31  ,c FROM t2}.} {1
df80: 20 7b 61 75 74 68 6f 72 69 7a 65 72 20 6d 61 6c   {authorizer mal
df90: 66 75 6e 63 74 69 6f 6e 7d 7d 0a 64 6f 5f 74 65  function}}.do_te
dfa0: 73 74 20 61 75 74 68 2d 32 2e 39 2e 32 20 7b 0a  st auth-2.9.2 {.
dfb0: 20 20 64 62 20 65 72 72 6f 72 63 6f 64 65 0a 7d    db errorcode.}
dfc0: 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74   {1}.do_test aut
dfd0: 68 2d 32 2e 31 30 20 7b 0a 20 20 70 72 6f 63 20  h-2.10 {.  proc 
dfe0: 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20  auth {code arg1 
dff0: 61 72 67 32 20 61 72 67 33 20 61 72 67 34 20 61  arg2 arg3 arg4 a
e000: 72 67 73 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  rgs} {.    if {$
e010: 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 53 45  code=="SQLITE_SE
e020: 4c 45 43 54 22 7d 20 7b 0a 20 20 20 20 20 20 72  LECT"} {.      r
e030: 65 74 75 72 6e 20 62 6f 67 75 73 0a 20 20 20 20  eturn bogus.    
e040: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
e050: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74  ITE_OK.  }.  cat
e060: 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 52 4f  chsql {SELECT RO
e070: 57 49 44 2c 62 2c 63 20 46 52 4f 4d 20 74 32 7d  WID,b,c FROM t2}
e080: 0a 7d 20 7b 31 20 7b 61 75 74 68 6f 72 69 7a 65  .} {1 {authorize
e090: 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 7d 7d 0a  r malfunction}}.
e0a0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 32 2e 31  do_test auth-2.1
e0b0: 31 2e 31 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  1.1 {.  proc aut
e0c0: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
e0d0: 32 20 61 72 67 33 20 61 72 67 34 20 61 72 67 73  2 arg3 arg4 args
e0e0: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
e0f0: 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45 41 44 22  e=="SQLITE_READ"
e100: 20 26 26 20 24 61 72 67 32 3d 3d 22 61 22 7d 20   && $arg2=="a"} 
e110: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  {.      return S
e120: 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20  QLITE_IGNORE.   
e130: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51   }.    return SQ
e140: 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61  LITE_OK.  }.  ca
e150: 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a  tchsql {SELECT *
e160: 20 46 52 4f 4d 20 74 32 2c 20 74 33 7d 0a 7d 20   FROM t2, t3}.} 
e170: 7b 30 20 7b 7b 7d 20 32 20 33 33 20 34 34 20 35  {0 {{} 2 33 44 5
e180: 35 20 36 36 20 7b 7d 20 38 20 39 20 34 34 20 35  5 66 {} 8 9 44 5
e190: 35 20 36 36 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  5 66}}.do_test a
e1a0: 75 74 68 2d 32 2e 31 31 2e 32 20 7b 0a 20 20 70  uth-2.11.2 {.  p
e1b0: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
e1c0: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
e1d0: 67 34 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 69  g4 args} {.    i
e1e0: 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54  f {$code=="SQLIT
e1f0: 45 5f 52 45 41 44 22 20 26 26 20 24 61 72 67 32  E_READ" && $arg2
e200: 3d 3d 22 78 22 7d 20 7b 0a 20 20 20 20 20 20 72  =="x"} {.      r
e210: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 49 47 4e  eturn SQLITE_IGN
e220: 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  ORE.    }.    re
e230: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
e240: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 53   }.  catchsql {S
e250: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 2c  ELECT * FROM t2,
e260: 20 74 33 7d 0a 7d 20 7b 30 20 7b 31 31 20 32 20   t3}.} {0 {11 2 
e270: 33 33 20 7b 7d 20 35 35 20 36 36 20 37 20 38 20  33 {} 55 66 7 8 
e280: 39 20 7b 7d 20 35 35 20 36 36 7d 7d 0a 0a 23 20  9 {} 55 66}}..# 
e290: 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 4f 4c  Make sure the OL
e2a0: 44 20 61 6e 64 20 4e 45 57 20 70 73 65 75 64 6f  D and NEW pseudo
e2b0: 2d 74 61 62 6c 65 73 20 6f 66 20 61 20 74 72 69  -tables of a tri
e2c0: 67 67 65 72 20 67 65 74 20 61 75 74 68 6f 72 69  gger get authori
e2d0: 7a 65 64 2e 0a 23 0a 69 66 63 61 70 61 62 6c 65  zed..#.ifcapable
e2e0: 20 74 72 69 67 67 65 72 20 7b 0a 20 20 64 6f 5f   trigger {.  do_
e2f0: 74 65 73 74 20 61 75 74 68 2d 33 2e 31 20 7b 0a  test auth-3.1 {.
e300: 20 20 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63      proc auth {c
e310: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
e320: 67 33 20 61 72 67 34 20 61 72 67 73 7d 20 7b 0a  g3 arg4 args} {.
e330: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
e340: 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20  ITE_OK.    }.   
e350: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
e360: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 78   CREATE TABLE tx
e370: 28 61 31 2c 61 32 2c 62 31 2c 62 32 2c 63 31 2c  (a1,a2,b1,b2,c1,
e380: 63 32 29 3b 0a 20 20 20 20 20 20 43 52 45 41 54  c2);.      CREAT
e390: 45 20 54 52 49 47 47 45 52 20 72 31 20 41 46 54  E TRIGGER r1 AFT
e3a0: 45 52 20 55 50 44 41 54 45 20 4f 4e 20 74 32 20  ER UPDATE ON t2 
e3b0: 46 4f 52 20 45 41 43 48 20 52 4f 57 20 42 45 47  FOR EACH ROW BEG
e3c0: 49 4e 0a 20 20 20 20 20 20 20 20 49 4e 53 45 52  IN.        INSER
e3d0: 54 20 49 4e 54 4f 20 74 78 20 56 41 4c 55 45 53  T INTO tx VALUES
e3e0: 28 4f 4c 44 2e 61 2c 4e 45 57 2e 61 2c 4f 4c 44  (OLD.a,NEW.a,OLD
e3f0: 2e 62 2c 4e 45 57 2e 62 2c 4f 4c 44 2e 63 2c 4e  .b,NEW.b,OLD.c,N
e400: 45 57 2e 63 29 3b 0a 20 20 20 20 20 20 45 4e 44  EW.c);.      END
e410: 3b 0a 20 20 20 20 20 20 55 50 44 41 54 45 20 74  ;.      UPDATE t
e420: 32 20 53 45 54 20 61 3d 61 2b 31 3b 0a 20 20 20  2 SET a=a+1;.   
e430: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
e440: 20 74 78 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b   tx;.    }.  } {
e450: 31 31 20 31 32 20 32 20 32 20 33 33 20 33 33 20  11 12 2 2 33 33 
e460: 37 20 38 20 38 20 38 20 39 20 39 7d 0a 20 20 64  7 8 8 8 9 9}.  d
e470: 6f 5f 74 65 73 74 20 61 75 74 68 2d 33 2e 32 20  o_test auth-3.2 
e480: 7b 0a 20 20 20 20 70 72 6f 63 20 61 75 74 68 20  {.    proc auth 
e490: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
e4a0: 61 72 67 33 20 61 72 67 34 20 61 72 67 73 7d 20  arg3 arg4 args} 
e4b0: 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64  {.      if {$cod
e4c0: 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45 41 44 22  e=="SQLITE_READ"
e4d0: 20 26 26 20 24 61 72 67 31 3d 3d 22 74 32 22 20   && $arg1=="t2" 
e4e0: 26 26 20 24 61 72 67 32 3d 3d 22 63 22 7d 20 7b  && $arg2=="c"} {
e4f0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
e500: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20  SQLITE_IGNORE.  
e510: 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75      }.      retu
e520: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20  rn SQLITE_OK.   
e530: 20 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   }.    execsql {
e540: 0a 20 20 20 20 20 20 44 45 4c 45 54 45 20 46 52  .      DELETE FR
e550: 4f 4d 20 74 78 3b 0a 20 20 20 20 20 20 55 50 44  OM tx;.      UPD
e560: 41 54 45 20 74 32 20 53 45 54 20 61 3d 61 2b 31  ATE t2 SET a=a+1
e570: 30 30 3b 0a 20 20 20 20 20 20 53 45 4c 45 43 54  00;.      SELECT
e580: 20 2a 20 46 52 4f 4d 20 74 78 3b 0a 20 20 20 20   * FROM tx;.    
e590: 7d 0a 20 20 7d 20 7b 31 32 20 31 31 32 20 32 20  }.  } {12 112 2 
e5a0: 32 20 7b 7d 20 7b 7d 20 38 20 31 30 38 20 38 20  2 {} {} 8 108 8 
e5b0: 38 20 7b 7d 20 7b 7d 7d 0a 7d 20 3b 23 20 69 66  8 {} {}}.} ;# if
e5c0: 63 61 70 61 62 6c 65 20 74 72 69 67 67 65 72 0a  capable trigger.
e5d0: 0a 23 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65  .# Make sure the
e5e0: 20 6e 61 6d 65 73 20 6f 66 20 76 69 65 77 73 20   names of views 
e5f0: 61 6e 64 20 74 72 69 67 67 65 72 73 20 61 72 65  and triggers are
e600: 20 70 61 73 73 65 64 20 6f 6e 20 6f 6e 20 61 72   passed on on ar
e610: 67 34 2e 0a 23 0a 69 66 63 61 70 61 62 6c 65 20  g4..#.ifcapable 
e620: 74 72 69 67 67 65 72 20 7b 0a 64 6f 5f 74 65 73  trigger {.do_tes
e630: 74 20 61 75 74 68 2d 34 2e 31 20 7b 0a 20 20 70  t auth-4.1 {.  p
e640: 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61  roc auth {code a
e650: 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72  rg1 arg2 arg3 ar
e660: 67 34 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 6c  g4 args} {.    l
e670: 61 70 70 65 6e 64 20 3a 3a 61 75 74 68 61 72 67  append ::autharg
e680: 73 20 24 63 6f 64 65 20 24 61 72 67 31 20 24 61  s $code $arg1 $a
e690: 72 67 32 20 24 61 72 67 33 20 24 61 72 67 34 0a  rg2 $arg3 $arg4.
e6a0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
e6b0: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 73 65 74 20 61  E_OK.  }.  set a
e6c0: 75 74 68 61 72 67 73 20 7b 7d 0a 20 20 65 78 65  uthargs {}.  exe
e6d0: 63 73 71 6c 20 7b 0a 20 20 20 20 55 50 44 41 54  csql {.    UPDAT
e6e0: 45 20 74 32 20 53 45 54 20 61 3d 61 2b 31 3b 0a  E t2 SET a=a+1;.
e6f0: 20 20 7d 0a 20 20 73 65 74 20 61 75 74 68 61 72    }.  set authar
e700: 67 73 0a 7d 20 5b 6c 69 73 74 20 5c 0a 20 20 53  gs.} [list \.  S
e710: 51 4c 49 54 45 5f 52 45 41 44 20 20 20 74 32 20  QLITE_READ   t2 
e720: 61 20 20 6d 61 69 6e 20 7b 7d 20 5c 0a 20 20 53  a  main {} \.  S
e730: 51 4c 49 54 45 5f 55 50 44 41 54 45 20 74 32 20  QLITE_UPDATE t2 
e740: 61 20 20 6d 61 69 6e 20 7b 7d 20 5c 0a 20 20 53  a  main {} \.  S
e750: 51 4c 49 54 45 5f 49 4e 53 45 52 54 20 74 78 20  QLITE_INSERT tx 
e760: 7b 7d 20 6d 61 69 6e 20 72 31 20 5c 0a 20 20 53  {} main r1 \.  S
e770: 51 4c 49 54 45 5f 52 45 41 44 20 20 20 74 32 20  QLITE_READ   t2 
e780: 61 20 20 6d 61 69 6e 20 72 31 20 5c 0a 20 20 53  a  main r1 \.  S
e790: 51 4c 49 54 45 5f 52 45 41 44 20 20 20 74 32 20  QLITE_READ   t2 
e7a0: 61 20 20 6d 61 69 6e 20 72 31 20 5c 0a 20 20 53  a  main r1 \.  S
e7b0: 51 4c 49 54 45 5f 52 45 41 44 20 20 20 74 32 20  QLITE_READ   t2 
e7c0: 62 20 20 6d 61 69 6e 20 72 31 20 5c 0a 20 20 53  b  main r1 \.  S
e7d0: 51 4c 49 54 45 5f 52 45 41 44 20 20 20 74 32 20  QLITE_READ   t2 
e7e0: 62 20 20 6d 61 69 6e 20 72 31 20 5c 0a 20 20 53  b  main r1 \.  S
e7f0: 51 4c 49 54 45 5f 52 45 41 44 20 20 20 74 32 20  QLITE_READ   t2 
e800: 63 20 20 6d 61 69 6e 20 72 31 20 5c 0a 20 20 53  c  main r1 \.  S
e810: 51 4c 49 54 45 5f 52 45 41 44 20 20 20 74 32 20  QLITE_READ   t2 
e820: 63 20 20 6d 61 69 6e 20 72 31 5d 0a 7d 0a 0a 69  c  main r1].}..i
e830: 66 63 61 70 61 62 6c 65 20 7b 76 69 65 77 20 26  fcapable {view &
e840: 26 20 74 72 69 67 67 65 72 7d 20 7b 0a 64 6f 5f  & trigger} {.do_
e850: 74 65 73 74 20 61 75 74 68 2d 34 2e 32 20 7b 0a  test auth-4.2 {.
e860: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
e870: 43 52 45 41 54 45 20 56 49 45 57 20 76 31 20 41  CREATE VIEW v1 A
e880: 53 20 53 45 4c 45 43 54 20 61 2b 62 20 41 53 20  S SELECT a+b AS 
e890: 78 20 46 52 4f 4d 20 74 32 3b 0a 20 20 20 20 43  x FROM t2;.    C
e8a0: 52 45 41 54 45 20 54 41 42 4c 45 20 76 31 63 68  REATE TABLE v1ch
e8b0: 6e 67 28 78 31 2c 78 32 29 3b 0a 20 20 20 20 43  ng(x1,x2);.    C
e8c0: 52 45 41 54 45 20 54 52 49 47 47 45 52 20 72 32  REATE TRIGGER r2
e8d0: 20 49 4e 53 54 45 41 44 20 4f 46 20 55 50 44 41   INSTEAD OF UPDA
e8e0: 54 45 20 4f 4e 20 76 31 20 42 45 47 49 4e 0a 20  TE ON v1 BEGIN. 
e8f0: 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
e900: 20 76 31 63 68 6e 67 20 56 41 4c 55 45 53 28 4f   v1chng VALUES(O
e910: 4c 44 2e 78 2c 4e 45 57 2e 78 29 3b 0a 20 20 20  LD.x,NEW.x);.   
e920: 20 45 4e 44 3b 0a 20 20 20 20 53 45 4c 45 43 54   END;.    SELECT
e930: 20 2a 20 46 52 4f 4d 20 76 31 3b 0a 20 20 7d 0a   * FROM v1;.  }.
e940: 7d 20 7b 31 31 35 20 31 31 37 7d 0a 64 6f 5f 74  } {115 117}.do_t
e950: 65 73 74 20 61 75 74 68 2d 34 2e 33 20 7b 0a 20  est auth-4.3 {. 
e960: 20 73 65 74 20 61 75 74 68 61 72 67 73 20 7b 7d   set authargs {}
e970: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
e980: 20 55 50 44 41 54 45 20 76 31 20 53 45 54 20 78   UPDATE v1 SET x
e990: 3d 31 20 57 48 45 52 45 20 78 3d 31 31 37 0a 20  =1 WHERE x=117. 
e9a0: 20 7d 0a 20 20 73 65 74 20 61 75 74 68 61 72 67   }.  set autharg
e9b0: 73 0a 7d 20 5b 6c 69 73 74 20 5c 0a 20 20 53 51  s.} [list \.  SQ
e9c0: 4c 49 54 45 5f 55 50 44 41 54 45 20 76 31 20 20  LITE_UPDATE v1  
e9d0: 20 20 20 78 20 20 6d 61 69 6e 20 7b 7d 20 5c 0a     x  main {} \.
e9e0: 20 20 53 51 4c 49 54 45 5f 53 45 4c 45 43 54 20    SQLITE_SELECT 
e9f0: 7b 7d 20 20 20 20 20 7b 7d 20 7b 7d 20 20 20 76  {}     {} {}   v
ea00: 31 20 5c 0a 20 20 53 51 4c 49 54 45 5f 52 45 41  1 \.  SQLITE_REA
ea10: 44 20 20 20 74 32 20 20 20 20 20 61 20 20 6d 61  D   t2     a  ma
ea20: 69 6e 20 76 31 20 5c 0a 20 20 53 51 4c 49 54 45  in v1 \.  SQLITE
ea30: 5f 52 45 41 44 20 20 20 74 32 20 20 20 20 20 62  _READ   t2     b
ea40: 20 20 6d 61 69 6e 20 76 31 20 5c 0a 20 20 53 51    main v1 \.  SQ
ea50: 4c 49 54 45 5f 52 45 41 44 20 20 20 76 31 20 20  LITE_READ   v1  
ea60: 20 20 20 78 20 20 6d 61 69 6e 20 76 31 20 5c 0a     x  main v1 \.
ea70: 20 20 53 51 4c 49 54 45 5f 52 45 41 44 20 20 20    SQLITE_READ   
ea80: 76 31 20 20 20 20 20 78 20 20 6d 61 69 6e 20 76  v1     x  main v
ea90: 31 20 5c 0a 20 20 53 51 4c 49 54 45 5f 53 45 4c  1 \.  SQLITE_SEL
eaa0: 45 43 54 20 7b 7d 20 20 20 20 20 7b 7d 20 7b 7d  ECT {}     {} {}
eab0: 20 76 31 20 20 20 5c 0a 20 20 53 51 4c 49 54 45   v1   \.  SQLITE
eac0: 5f 52 45 41 44 20 20 20 76 31 20 20 20 20 20 78  _READ   v1     x
ead0: 20 20 6d 61 69 6e 20 76 31 20 5c 0a 20 20 53 51    main v1 \.  SQ
eae0: 4c 49 54 45 5f 49 4e 53 45 52 54 20 76 31 63 68  LITE_INSERT v1ch
eaf0: 6e 67 20 7b 7d 20 6d 61 69 6e 20 72 32 20 5c 0a  ng {} main r2 \.
eb00: 20 20 53 51 4c 49 54 45 5f 52 45 41 44 20 20 20    SQLITE_READ   
eb10: 76 31 20 20 20 20 20 78 20 20 6d 61 69 6e 20 72  v1     x  main r
eb20: 32 20 5c 0a 20 20 53 51 4c 49 54 45 5f 52 45 41  2 \.  SQLITE_REA
eb30: 44 20 20 20 76 31 20 20 20 20 20 78 20 20 6d 61  D   v1     x  ma
eb40: 69 6e 20 72 32 20 5c 0a 5d 0a 0a 64 6f 5f 74 65  in r2 \.]..do_te
eb50: 73 74 20 61 75 74 68 2d 34 2e 34 20 7b 0a 20 20  st auth-4.4 {.  
eb60: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52  execsql {.    CR
eb70: 45 41 54 45 20 54 52 49 47 47 45 52 20 72 33 20  EATE TRIGGER r3 
eb80: 49 4e 53 54 45 41 44 20 4f 46 20 44 45 4c 45 54  INSTEAD OF DELET
eb90: 45 20 4f 4e 20 76 31 20 42 45 47 49 4e 0a 20 20  E ON v1 BEGIN.  
eba0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
ebb0: 76 31 63 68 6e 67 20 56 41 4c 55 45 53 28 4f 4c  v1chng VALUES(OL
ebc0: 44 2e 78 2c 4e 55 4c 4c 29 3b 0a 20 20 20 20 45  D.x,NULL);.    E
ebd0: 4e 44 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  ND;.    SELECT *
ebe0: 20 46 52 4f 4d 20 76 31 3b 0a 20 20 7d 0a 7d 20   FROM v1;.  }.} 
ebf0: 7b 31 31 35 20 31 31 37 7d 0a 64 6f 5f 74 65 73  {115 117}.do_tes
ec00: 74 20 61 75 74 68 2d 34 2e 35 20 7b 0a 20 20 73  t auth-4.5 {.  s
ec10: 65 74 20 61 75 74 68 61 72 67 73 20 7b 7d 0a 20  et authargs {}. 
ec20: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44   execsql {.    D
ec30: 45 4c 45 54 45 20 46 52 4f 4d 20 76 31 20 57 48  ELETE FROM v1 WH
ec40: 45 52 45 20 78 3d 31 31 37 0a 20 20 7d 0a 20 20  ERE x=117.  }.  
ec50: 73 65 74 20 61 75 74 68 61 72 67 73 0a 7d 20 5b  set authargs.} [
ec60: 6c 69 73 74 20 5c 0a 20 20 53 51 4c 49 54 45 5f  list \.  SQLITE_
ec70: 44 45 4c 45 54 45 20 76 31 20 20 20 20 20 7b 7d  DELETE v1     {}
ec80: 20 6d 61 69 6e 20 7b 7d 20 5c 0a 20 20 53 51 4c   main {} \.  SQL
ec90: 49 54 45 5f 53 45 4c 45 43 54 20 7b 7d 20 20 20  ITE_SELECT {}   
eca0: 20 20 7b 7d 20 7b 7d 20 20 20 76 31 20 5c 0a 20    {} {}   v1 \. 
ecb0: 20 53 51 4c 49 54 45 5f 52 45 41 44 20 20 20 74   SQLITE_READ   t
ecc0: 32 20 20 20 20 20 61 20 20 6d 61 69 6e 20 76 31  2     a  main v1
ecd0: 20 5c 0a 20 20 53 51 4c 49 54 45 5f 52 45 41 44   \.  SQLITE_READ
ece0: 20 20 20 74 32 20 20 20 20 20 62 20 20 6d 61 69     t2     b  mai
ecf0: 6e 20 76 31 20 5c 0a 20 20 53 51 4c 49 54 45 5f  n v1 \.  SQLITE_
ed00: 52 45 41 44 20 20 20 76 31 20 20 20 20 20 78 20  READ   v1     x 
ed10: 20 6d 61 69 6e 20 76 31 20 5c 0a 20 20 53 51 4c   main v1 \.  SQL
ed20: 49 54 45 5f 52 45 41 44 20 20 20 76 31 20 20 20  ITE_READ   v1   
ed30: 20 20 78 20 20 6d 61 69 6e 20 76 31 20 5c 0a 20    x  main v1 \. 
ed40: 20 53 51 4c 49 54 45 5f 53 45 4c 45 43 54 20 7b   SQLITE_SELECT {
ed50: 7d 20 20 20 20 20 7b 7d 20 7b 7d 20 76 31 20 20  }     {} {} v1  
ed60: 20 5c 0a 20 20 53 51 4c 49 54 45 5f 52 45 41 44   \.  SQLITE_READ
ed70: 20 20 20 76 31 20 20 20 20 20 78 20 20 6d 61 69     v1     x  mai
ed80: 6e 20 76 31 20 5c 0a 20 20 53 51 4c 49 54 45 5f  n v1 \.  SQLITE_
ed90: 49 4e 53 45 52 54 20 76 31 63 68 6e 67 20 7b 7d  INSERT v1chng {}
eda0: 20 6d 61 69 6e 20 72 33 20 5c 0a 20 20 53 51 4c   main r3 \.  SQL
edb0: 49 54 45 5f 52 45 41 44 20 20 20 76 31 20 20 20  ITE_READ   v1   
edc0: 20 20 78 20 20 6d 61 69 6e 20 72 33 20 5c 0a 5d    x  main r3 \.]
edd0: 0a 0a 7d 20 3b 23 20 69 66 63 61 70 61 62 6c 65  ..} ;# ifcapable
ede0: 20 76 69 65 77 20 26 26 20 74 72 69 67 67 65 72   view && trigger
edf0: 0a 0a 23 20 54 69 63 6b 65 74 20 23 31 33 33 38  ..# Ticket #1338
ee00: 3a 20 20 4d 61 6b 65 20 73 75 72 65 20 61 75 74  :  Make sure aut
ee10: 68 65 6e 74 69 63 61 74 69 6f 6e 20 77 6f 72 6b  hentication work
ee20: 73 20 69 6e 20 74 68 65 20 70 72 65 73 65 6e 63  s in the presenc
ee30: 65 20 6f 66 20 61 6e 20 41 53 0a 23 20 63 6c 61  e of an AS.# cla
ee40: 75 73 65 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 61  use..#.do_test a
ee50: 75 74 68 2d 35 2e 31 20 7b 0a 20 20 70 72 6f 63  uth-5.1 {.  proc
ee60: 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31   auth {code arg1
ee70: 20 61 72 67 32 20 61 72 67 33 20 61 72 67 34 20   arg2 arg3 arg4 
ee80: 61 72 67 73 7d 20 7b 0a 20 20 20 20 72 65 74 75  args} {.    retu
ee90: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d  rn SQLITE_OK.  }
eea0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
eeb0: 20 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 61 29   SELECT count(a)
eec0: 20 41 53 20 63 6e 74 20 46 52 4f 4d 20 74 34 20   AS cnt FROM t4 
eed0: 4f 52 44 45 52 20 42 59 20 63 6e 74 0a 20 20 7d  ORDER BY cnt.  }
eee0: 0a 7d 20 7b 31 7d 0a 0a 23 20 54 69 63 6b 65 74  .} {1}..# Ticket
eef0: 20 23 31 36 30 37 0a 23 0a 69 66 63 61 70 61 62   #1607.#.ifcapab
ef00: 6c 65 20 63 6f 6d 70 6f 75 6e 64 26 26 73 75 62  le compound&&sub
ef10: 71 75 65 72 79 20 7b 0a 20 20 69 66 63 61 70 61  query {.  ifcapa
ef20: 62 6c 65 20 74 72 69 67 67 65 72 20 7b 0a 20 20  ble trigger {.  
ef30: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
ef40: 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74 78 3b    DROP TABLE tx;
ef50: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 63 61 70  .    }.    ifcap
ef60: 61 62 6c 65 20 76 69 65 77 20 7b 0a 20 20 20 20  able view {.    
ef70: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
ef80: 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 76      DROP TABLE v
ef90: 31 63 68 6e 67 3b 0a 20 20 20 20 20 20 7d 0a 20  1chng;.      }. 
efa0: 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 63 61 70     }.  }.  ifcap
efb0: 61 62 6c 65 20 73 74 61 74 34 20 7b 0a 20 20 20  able stat4 {.   
efc0: 20 73 65 74 20 73 74 61 74 34 20 22 73 71 6c 69   set stat4 "sqli
efd0: 74 65 5f 73 74 61 74 34 20 22 0a 20 20 7d 20 65  te_stat4 ".  } e
efe0: 6c 73 65 20 7b 0a 20 20 20 20 69 66 63 61 70 61  lse {.    ifcapa
eff0: 62 6c 65 20 73 74 61 74 33 20 7b 0a 20 20 20 20  ble stat3 {.    
f000: 20 20 73 65 74 20 73 74 61 74 34 20 22 73 71 6c    set stat4 "sql
f010: 69 74 65 5f 73 74 61 74 33 20 22 0a 20 20 20 20  ite_stat3 ".    
f020: 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 73  } else {.      s
f030: 65 74 20 73 74 61 74 34 20 22 22 0a 20 20 20 20  et stat4 "".    
f040: 7d 0a 20 20 7d 0a 20 20 64 6f 5f 74 65 73 74 20  }.  }.  do_test 
f050: 61 75 74 68 2d 35 2e 32 20 7b 0a 20 20 20 20 65  auth-5.2 {.    e
f060: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 53  xecsql {.      S
f070: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
f080: 28 0a 20 20 20 20 20 20 20 20 53 45 4c 45 43 54  (.        SELECT
f090: 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d   * FROM sqlite_m
f0a0: 61 73 74 65 72 20 55 4e 49 4f 4e 20 41 4c 4c 20  aster UNION ALL 
f0b0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65  SELECT * FROM te
f0c0: 6d 70 2e 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  mp.sqlite_master
f0d0: 29 0a 20 20 20 20 20 20 57 48 45 52 45 20 74 79  ).      WHERE ty
f0e0: 70 65 3d 27 74 61 62 6c 65 27 0a 20 20 20 20 20  pe='table'.     
f0f0: 20 4f 52 44 45 52 20 42 59 20 6e 61 6d 65 0a 20   ORDER BY name. 
f100: 20 20 20 7d 0a 20 20 7d 20 22 73 71 6c 69 74 65     }.  } "sqlite
f110: 5f 73 74 61 74 31 20 24 7b 73 74 61 74 34 7d 74  _stat1 ${stat4}t
f120: 31 20 74 32 20 74 33 20 74 34 22 0a 7d 0a 0a 23  1 t2 t3 t4".}..#
f130: 20 54 69 63 6b 65 74 20 23 33 39 34 34 0a 23 0a   Ticket #3944.#.
f140: 69 66 63 61 70 61 62 6c 65 20 74 72 69 67 67 65  ifcapable trigge
f150: 72 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 61 75  r {.  do_test au
f160: 74 68 2d 35 2e 33 2e 31 20 7b 0a 20 20 20 20 65  th-5.3.1 {.    e
f170: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 43  xecsql {.      C
f180: 52 45 41 54 45 20 54 41 42 4c 45 20 74 35 20 28  REATE TABLE t5 (
f190: 20 78 20 29 3b 0a 20 20 20 20 20 20 43 52 45 41   x );.      CREA
f1a0: 54 45 20 54 52 49 47 47 45 52 20 74 35 5f 74 72  TE TRIGGER t5_tr
f1b0: 31 20 41 46 54 45 52 20 49 4e 53 45 52 54 20 4f  1 AFTER INSERT O
f1c0: 4e 20 74 35 20 42 45 47 49 4e 20 0a 20 20 20 20  N t5 BEGIN .    
f1d0: 20 20 20 20 55 50 44 41 54 45 20 74 35 20 53 45      UPDATE t5 SE
f1e0: 54 20 78 20 3d 20 31 20 57 48 45 52 45 20 4e 45  T x = 1 WHERE NE
f1f0: 57 2e 78 20 3d 20 30 3b 0a 20 20 20 20 20 20 45  W.x = 0;.      E
f200: 4e 44 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d  ND;.    }.  } {}
f210: 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67  .  set ::autharg
f220: 73 20 5b 6c 69 73 74 5d 0a 20 20 70 72 6f 63 20  s [list].  proc 
f230: 61 75 74 68 20 7b 61 72 67 73 7d 20 7b 0a 20 20  auth {args} {.  
f240: 20 20 65 76 61 6c 20 6c 61 70 70 65 6e 64 20 3a    eval lappend :
f250: 3a 61 75 74 68 61 72 67 73 20 5b 6c 72 61 6e 67  :authargs [lrang
f260: 65 20 24 61 72 67 73 20 30 20 34 5d 0a 20 20 20  e $args 0 4].   
f270: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
f280: 4b 0a 20 20 7d 0a 20 20 64 6f 5f 74 65 73 74 20  K.  }.  do_test 
f290: 61 75 74 68 2d 35 2e 33 2e 32 20 7b 0a 20 20 20  auth-5.3.2 {.   
f2a0: 20 65 78 65 63 73 71 6c 20 7b 20 49 4e 53 45 52   execsql { INSER
f2b0: 54 20 49 4e 54 4f 20 74 35 20 28 78 29 20 76 61  T INTO t5 (x) va
f2c0: 6c 75 65 73 28 30 29 20 7d 0a 20 20 20 20 73 65  lues(0) }.    se
f2d0: 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 20 20 7d  t ::authargs.  }
f2e0: 20 5b 6c 69 73 74 20 53 51 4c 49 54 45 5f 49 4e   [list SQLITE_IN
f2f0: 53 45 52 54 20 74 35 20 7b 7d 20 6d 61 69 6e 20  SERT t5 {} main 
f300: 7b 7d 20 20 20 20 5c 0a 20 20 20 20 20 20 20 20  {}    \.        
f310: 20 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20    SQLITE_UPDATE 
f320: 74 35 20 78 20 6d 61 69 6e 20 74 35 5f 74 72 31  t5 x main t5_tr1
f330: 20 5c 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c   \.          SQL
f340: 49 54 45 5f 52 45 41 44 20 74 35 20 78 20 6d 61  ITE_READ t5 x ma
f350: 69 6e 20 74 35 5f 74 72 31 20 20 20 5c 0a 20 20  in t5_tr1   \.  
f360: 20 20 5d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75    ].  do_test au
f370: 74 68 2d 35 2e 33 2e 32 20 7b 0a 20 20 20 20 65  th-5.3.2 {.    e
f380: 78 65 63 73 71 6c 20 7b 20 53 45 4c 45 43 54 20  xecsql { SELECT 
f390: 2a 20 46 52 4f 4d 20 74 35 20 7d 0a 20 20 7d 20  * FROM t5 }.  } 
f3a0: 7b 31 7d 0a 7d 0a 0a 23 20 54 69 63 6b 65 74 20  {1}.}..# Ticket 
f3b0: 5b 30 65 62 37 30 64 37 37 63 62 30 35 62 62 32  [0eb70d77cb05bb2
f3c0: 32 37 32 30 5d 3a 20 20 49 6e 76 61 6c 69 64 20  2720]:  Invalid 
f3d0: 70 6f 69 6e 74 65 72 20 70 61 73 73 73 65 64 20  pointer passsed 
f3e0: 74 6f 20 74 68 65 20 61 75 74 68 6f 72 69 7a 65  to the authorize
f3f0: 72 0a 23 20 63 61 6c 6c 62 61 63 6b 20 77 68 65  r.# callback whe
f400: 6e 20 75 70 64 61 74 69 6e 67 20 61 20 52 4f 57  n updating a ROW
f410: 49 44 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 61 75  ID..#.do_test au
f420: 74 68 2d 36 2e 31 20 7b 0a 20 20 65 78 65 63 73  th-6.1 {.  execs
f430: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
f440: 54 41 42 4c 45 20 74 36 28 61 2c 62 2c 63 2c 64  TABLE t6(a,b,c,d
f450: 2c 65 2c 66 2c 67 2c 68 29 3b 0a 20 20 20 20 49  ,e,f,g,h);.    I
f460: 4e 53 45 52 54 20 49 4e 54 4f 20 74 36 20 56 41  NSERT INTO t6 VA
f470: 4c 55 45 53 28 31 2c 32 2c 33 2c 34 2c 35 2c 36  LUES(1,2,3,4,5,6
f480: 2c 37 2c 38 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a  ,7,8);.  }.} {}.
f490: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b  set ::authargs [
f4a0: 6c 69 73 74 5d 0a 70 72 6f 63 20 61 75 74 68 20  list].proc auth 
f4b0: 7b 61 72 67 73 7d 20 7b 0a 20 20 65 76 61 6c 20  {args} {.  eval 
f4c0: 6c 61 70 70 65 6e 64 20 3a 3a 61 75 74 68 61 72  lappend ::authar
f4d0: 67 73 20 5b 6c 72 61 6e 67 65 20 24 61 72 67 73  gs [lrange $args
f4e0: 20 30 20 34 5d 0a 20 20 72 65 74 75 72 6e 20 53   0 4].  return S
f4f0: 51 4c 49 54 45 5f 4f 4b 0a 7d 0a 64 6f 5f 74 65  QLITE_OK.}.do_te
f500: 73 74 20 61 75 74 68 2d 36 2e 32 20 7b 0a 20 20  st auth-6.2 {.  
f510: 65 78 65 63 73 71 6c 20 7b 55 50 44 41 54 45 20  execsql {UPDATE 
f520: 74 36 20 53 45 54 20 72 6f 77 49 44 3d 72 6f 77  t6 SET rowID=row
f530: 49 44 2b 31 30 30 7d 0a 20 20 73 65 74 20 3a 3a  ID+100}.  set ::
f540: 61 75 74 68 61 72 67 73 0a 7d 20 5b 6c 69 73 74  authargs.} [list
f550: 20 53 51 4c 49 54 45 5f 52 45 41 44 20 20 20 74   SQLITE_READ   t
f560: 36 20 52 4f 57 49 44 20 6d 61 69 6e 20 7b 7d 20  6 ROWID main {} 
f570: 5c 0a 20 20 20 20 20 20 20 20 53 51 4c 49 54 45  \.        SQLITE
f580: 5f 55 50 44 41 54 45 20 74 36 20 52 4f 57 49 44  _UPDATE t6 ROWID
f590: 20 6d 61 69 6e 20 7b 7d 20 5c 0a 5d 0a 64 6f 5f   main {} \.].do_
f5a0: 74 65 73 74 20 61 75 74 68 2d 36 2e 33 20 7b 0a  test auth-6.3 {.
f5b0: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
f5c0: 54 20 72 6f 77 69 64 2c 20 2a 20 46 52 4f 4d 20  T rowid, * FROM 
f5d0: 74 36 7d 0a 7d 20 7b 31 30 31 20 31 20 32 20 33  t6}.} {101 1 2 3
f5e0: 20 34 20 35 20 36 20 37 20 38 7d 0a 0a 23 2d 2d   4 5 6 7 8}..#--
f5f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
f600: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
f610: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
f620: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
f630: 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73 74 20 74  -------.# Test t
f640: 68 61 74 20 76 69 65 77 20 6e 61 6d 65 73 20 61  hat view names a
f650: 72 65 20 69 6e 63 6c 75 64 65 64 20 61 73 20 7a  re included as z
f660: 41 72 67 34 2e 0a 23 0a 64 6f 5f 65 78 65 63 73  Arg4..#.do_execs
f670: 71 6c 5f 74 65 73 74 20 61 75 74 68 2d 37 2e 31  ql_test auth-7.1
f680: 20 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c   {.  CREATE TABL
f690: 45 20 74 37 28 61 2c 20 62 2c 20 63 29 3b 0a 20  E t7(a, b, c);. 
f6a0: 20 43 52 45 41 54 45 20 56 49 45 57 20 76 37 20   CREATE VIEW v7 
f6b0: 41 53 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  AS SELECT * FROM
f6c0: 20 74 37 3b 0a 7d 20 7b 7d 0a 73 65 74 20 3a 3a   t7;.} {}.set ::
f6d0: 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 5d 0a  authargs [list].
f6e0: 70 72 6f 63 20 61 75 74 68 20 7b 61 72 67 73 7d  proc auth {args}
f6f0: 20 7b 0a 20 20 65 76 61 6c 20 6c 61 70 70 65 6e   {.  eval lappen
f700: 64 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 72  d ::authargs [lr
f710: 61 6e 67 65 20 24 61 72 67 73 20 30 20 34 5d 0a  ange $args 0 4].
f720: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
f730: 4f 4b 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 75  OK.}..do_test au
f740: 74 68 2d 37 2e 32 20 7b 0a 20 20 65 78 65 63 73  th-7.2 {.  execs
f750: 71 6c 20 7b 53 45 4c 45 43 54 20 61 2c 20 63 20  ql {SELECT a, c 
f760: 46 52 4f 4d 20 76 37 7d 0a 20 20 73 65 74 20 3a  FROM v7}.  set :
f770: 3a 61 75 74 68 61 72 67 73 0a 7d 20 5b 6c 69 73  :authargs.} [lis
f780: 74 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t               
f790: 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 53             \.  S
f7a0: 51 4c 49 54 45 5f 53 45 4c 45 43 54 20 7b 7d 20  QLITE_SELECT {} 
f7b0: 7b 7d 20 7b 7d 20 7b 7d 20 20 20 20 20 20 5c 0a  {} {} {}      \.
f7c0: 20 20 53 51 4c 49 54 45 5f 52 45 41 44 20 74 37    SQLITE_READ t7
f7d0: 20 61 20 6d 61 69 6e 20 76 37 20 20 20 20 20 20   a main v7      
f7e0: 20 5c 0a 20 20 53 51 4c 49 54 45 5f 52 45 41 44   \.  SQLITE_READ
f7f0: 20 74 37 20 62 20 6d 61 69 6e 20 76 37 20 20 20   t7 b main v7   
f800: 20 20 20 20 5c 0a 20 20 53 51 4c 49 54 45 5f 52      \.  SQLITE_R
f810: 45 41 44 20 74 37 20 63 20 6d 61 69 6e 20 76 37  EAD t7 c main v7
f820: 20 20 20 20 20 20 20 5c 0a 20 20 53 51 4c 49 54         \.  SQLIT
f830: 45 5f 52 45 41 44 20 76 37 20 61 20 6d 61 69 6e  E_READ v7 a main
f840: 20 7b 7d 20 20 20 20 20 20 20 5c 0a 20 20 53 51   {}       \.  SQ
f850: 4c 49 54 45 5f 52 45 41 44 20 76 37 20 63 20 6d  LITE_READ v7 c m
f860: 61 69 6e 20 7b 7d 20 20 20 20 20 20 20 5c 0a 20  ain {}       \. 
f870: 20 53 51 4c 49 54 45 5f 53 45 4c 45 43 54 20 7b   SQLITE_SELECT {
f880: 7d 20 7b 7d 20 7b 7d 20 76 37 20 20 20 20 20 20  } {} {} v7      
f890: 5c 0a 5d 0a 0a 73 65 74 20 3a 3a 61 75 74 68 61  \.]..set ::autha
f8a0: 72 67 73 20 5b 6c 69 73 74 5d 0a 64 6f 5f 74 65  rgs [list].do_te
f8b0: 73 74 20 61 75 74 68 2d 37 2e 33 20 7b 0a 20 20  st auth-7.3 {.  
f8c0: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
f8d0: 61 2c 20 63 20 46 52 4f 4d 20 74 37 7d 0a 20 20  a, c FROM t7}.  
f8e0: 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d  set ::authargs.}
f8f0: 20 5b 6c 69 73 74 20 20 20 20 20 20 20 20 20 20   [list          
f900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f910: 5c 0a 20 20 53 51 4c 49 54 45 5f 53 45 4c 45 43  \.  SQLITE_SELEC
f920: 54 20 7b 7d 20 7b 7d 20 7b 7d 20 7b 7d 20 20 20  T {} {} {} {}   
f930: 20 20 20 5c 0a 20 20 53 51 4c 49 54 45 5f 52 45     \.  SQLITE_RE
f940: 41 44 20 74 37 20 61 20 6d 61 69 6e 20 7b 7d 20  AD t7 a main {} 
f950: 20 20 20 20 20 20 5c 0a 20 20 53 51 4c 49 54 45        \.  SQLITE
f960: 5f 52 45 41 44 20 74 37 20 63 20 6d 61 69 6e 20  _READ t7 c main 
f970: 7b 7d 20 20 20 20 20 20 20 5c 0a 5d 0a 0a 73 65  {}       \.]..se
f980: 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69  t ::authargs [li
f990: 73 74 5d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  st].do_test auth
f9a0: 2d 37 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c  -7.4 {.  execsql
f9b0: 20 7b 53 45 4c 45 43 54 20 61 2c 20 63 20 46 52   {SELECT a, c FR
f9c0: 4f 4d 20 74 37 20 41 53 20 76 37 7d 0a 20 20 73  OM t7 AS v7}.  s
f9d0: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20  et ::authargs.} 
f9e0: 5b 6c 69 73 74 20 20 20 20 20 20 20 20 20 20 20  [list           
f9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c                 \
fa00: 0a 20 20 53 51 4c 49 54 45 5f 53 45 4c 45 43 54  .  SQLITE_SELECT
fa10: 20 7b 7d 20 7b 7d 20 7b 7d 20 7b 7d 20 20 20 20   {} {} {} {}    
fa20: 20 20 5c 0a 20 20 53 51 4c 49 54 45 5f 52 45 41    \.  SQLITE_REA
fa30: 44 20 74 37 20 61 20 6d 61 69 6e 20 7b 7d 20 20  D t7 a main {}  
fa40: 20 20 20 20 20 5c 0a 20 20 53 51 4c 49 54 45 5f       \.  SQLITE_
fa50: 52 45 41 44 20 74 37 20 63 20 6d 61 69 6e 20 7b  READ t7 c main {
fa60: 7d 20 20 20 20 20 20 20 5c 0a 5d 0a 0a 23 20 49  }       \.]..# I
fa70: 66 20 61 20 74 61 62 6c 65 20 69 73 20 72 65 66  f a table is ref
fa80: 65 72 65 6e 63 65 64 20 62 75 74 20 6e 6f 20 63  erenced but no c
fa90: 6f 6c 75 6d 6e 73 20 61 72 65 20 72 65 61 64 20  olumns are read 
faa0: 66 72 6f 6d 20 74 68 65 20 74 61 62 6c 65 2c 0a  from the table,.
fab0: 23 20 74 68 61 74 20 63 61 75 73 65 73 20 61 20  # that causes a 
fac0: 73 69 6e 67 6c 65 20 53 51 4c 49 54 45 5f 52 45  single SQLITE_RE
fad0: 41 44 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e  AD authorization
fae0: 20 77 69 74 68 20 61 20 4e 55 4c 4c 20 63 6f 6c   with a NULL col
faf0: 75 6d 6e 0a 23 20 6e 61 6d 65 2e 0a 23 0a 23 20  umn.# name..#.# 
fb00: 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 33  EVIDENCE-OF: R-3
fb10: 31 35 32 30 2d 31 36 33 30 32 20 57 68 65 6e 20  1520-16302 When 
fb20: 61 20 74 61 62 6c 65 20 69 73 20 72 65 66 65 72  a table is refer
fb30: 65 6e 63 65 64 20 62 79 20 61 20 53 45 4c 45 43  enced by a SELEC
fb40: 54 20 62 75 74 0a 23 20 6e 6f 20 63 6f 6c 75 6d  T but.# no colum
fb50: 6e 20 76 61 6c 75 65 73 20 61 72 65 20 65 78 74  n values are ext
fb60: 72 61 63 74 65 64 20 66 72 6f 6d 20 74 68 61 74  racted from that
fb70: 20 74 61 62 6c 65 20 28 66 6f 72 20 65 78 61 6d   table (for exam
fb80: 70 6c 65 20 69 6e 20 61 20 71 75 65 72 79 0a 23  ple in a query.#
fb90: 20 6c 69 6b 65 20 22 53 45 4c 45 43 54 20 63 6f   like "SELECT co
fba0: 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74 61 62 22  unt(*) FROM tab"
fbb0: 29 20 74 68 65 6e 20 74 68 65 20 53 51 4c 49 54  ) then the SQLIT
fbc0: 45 5f 52 45 41 44 20 61 75 74 68 6f 72 69 7a 65  E_READ authorize
fbd0: 72 0a 23 20 63 61 6c 6c 62 61 63 6b 20 69 73 20  r.# callback is 
fbe0: 69 6e 76 6f 6b 65 64 20 6f 6e 63 65 20 66 6f 72  invoked once for
fbf0: 20 74 68 61 74 20 74 61 62 6c 65 20 77 69 74 68   that table with
fc00: 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 74   a column name t
fc10: 68 61 74 20 69 73 20 61 6e 0a 23 20 65 6d 70 74  hat is an.# empt
fc20: 79 20 73 74 72 69 6e 67 2e 0a 23 0a 73 65 74 20  y string..#.set 
fc30: 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74  ::authargs [list
fc40: 5d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 38  ].do_test auth-8
fc50: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
fc60: 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20  SELECT count(*) 
fc70: 46 52 4f 4d 20 74 37 7d 0a 20 20 73 65 74 20 3a  FROM t7}.  set :
fc80: 3a 61 75 74 68 61 72 67 73 0a 7d 20 5b 6c 69 73  :authargs.} [lis
fc90: 74 20 5c 0a 20 20 53 51 4c 49 54 45 5f 53 45 4c  t \.  SQLITE_SEL
fca0: 45 43 54 20 7b 7d 20 7b 7d 20 7b 7d 20 7b 7d 20  ECT {} {} {} {} 
fcb0: 20 20 20 20 20 20 20 20 20 5c 0a 20 20 53 51 4c           \.  SQL
fcc0: 49 54 45 5f 46 55 4e 43 54 49 4f 4e 20 7b 7d 20  ITE_FUNCTION {} 
fcd0: 63 6f 75 6e 74 20 7b 7d 20 7b 7d 20 20 20 20 20  count {} {}     
fce0: 5c 0a 20 20 53 51 4c 49 54 45 5f 52 45 41 44 20  \.  SQLITE_READ 
fcf0: 74 37 20 7b 7d 20 7b 7d 20 7b 7d 20 20 20 20 20  t7 {} {} {}     
fd00: 20 20 20 20 20 20 20 5c 0a 20 20 5d 0a 73 65 74         \.  ].set
fd10: 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73   ::authargs [lis
fd20: 74 5d 0a 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  t]..do_test auth
fd30: 2d 38 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  -8.2 {.  execsql
fd40: 20 7b 53 45 4c 45 43 54 20 74 36 2e 61 20 46 52   {SELECT t6.a FR
fd50: 4f 4d 20 74 36 2c 20 74 37 7d 0a 20 20 73 65 74  OM t6, t7}.  set
fd60: 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20 5b 6c   ::authargs.} [l
fd70: 69 73 74 20 5c 0a 20 20 53 51 4c 49 54 45 5f 53  ist \.  SQLITE_S
fd80: 45 4c 45 43 54 20 7b 7d 20 7b 7d 20 7b 7d 20 7b  ELECT {} {} {} {
fd90: 7d 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 53  }          \.  S
fda0: 51 4c 49 54 45 5f 52 45 41 44 20 74 36 20 61 20  QLITE_READ t6 a 
fdb0: 6d 61 69 6e 20 7b 7d 20 20 20 20 20 20 20 20 20  main {}         
fdc0: 20 20 5c 0a 20 20 53 51 4c 49 54 45 5f 52 45 41    \.  SQLITE_REA
fdd0: 44 20 74 37 20 7b 7d 20 7b 7d 20 7b 7d 20 20 20  D t7 {} {} {}   
fde0: 20 20 20 20 20 20 20 20 20 5c 0a 20 20 5d 0a 0a           \.  ]..
fdf0: 23 20 54 65 73 74 20 61 6c 73 6f 20 74 68 61 74  # Test also that
fe00: 20 69 66 20 53 51 4c 49 54 45 5f 44 45 4e 59 20   if SQLITE_DENY 
fe10: 69 73 20 72 65 74 75 72 6e 65 64 20 66 72 6f 6d  is returned from
fe20: 20 61 6e 20 53 51 4c 49 54 45 5f 52 45 41 44 20   an SQLITE_READ 
fe30: 61 75 74 68 6f 72 69 7a 65 72 20 0a 23 20 69 6e  authorizer .# in
fe40: 76 6f 63 61 74 69 6f 6e 20 77 69 74 68 20 6e 6f  vocation with no
fe50: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 73 70 65   column name spe
fe60: 63 69 66 69 65 64 2c 20 63 6f 6d 70 69 6c 61 74  cified, compilat
fe70: 69 6f 6e 20 66 61 69 6c 73 2e 0a 23 0a 73 65 74  ion fails..#.set
fe80: 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73   ::authargs [lis
fe90: 74 5d 0a 70 72 6f 63 20 61 75 74 68 20 7b 6f 70  t].proc auth {op
fea0: 20 61 20 62 20 63 20 64 7d 20 7b 0a 20 20 6c 61   a b c d} {.  la
feb0: 70 70 65 6e 64 20 3a 3a 61 75 74 68 61 72 67 73  ppend ::authargs
fec0: 20 24 6f 70 20 24 61 20 24 62 20 24 63 20 24 64   $op $a $b $c $d
fed0: 0a 20 20 69 66 20 7b 24 6f 70 20 3d 3d 20 22 53  .  if {$op == "S
fee0: 51 4c 49 54 45 5f 52 45 41 44 22 7d 20 7b 20 72  QLITE_READ"} { r
fef0: 65 74 75 72 6e 20 22 53 51 4c 49 54 45 5f 44 45  eturn "SQLITE_DE
ff00: 4e 59 22 20 7d 0a 20 20 72 65 74 75 72 6e 20 22  NY" }.  return "
ff10: 53 51 4c 49 54 45 5f 4f 4b 22 0a 7d 0a 73 65 74  SQLITE_OK".}.set
ff20: 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73   ::authargs [lis
ff30: 74 5d 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74  t].do_catchsql_t
ff40: 65 73 74 20 61 75 74 68 2d 38 2e 33 20 7b 0a 20  est auth-8.3 {. 
ff50: 20 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29   SELECT count(*)
ff60: 20 46 52 4f 4d 20 74 37 0a 7d 20 7b 31 20 7b 6e   FROM t7.} {1 {n
ff70: 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a  ot authorized}}.
ff80: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 38 2e 34  do_test auth-8.4
ff90: 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61   {.  set ::autha
ffa0: 72 67 73 0a 7d 20 5b 6c 69 73 74 20 5c 0a 20 20  rgs.} [list \.  
ffb0: 53 51 4c 49 54 45 5f 53 45 4c 45 43 54 20 7b 7d  SQLITE_SELECT {}
ffc0: 20 7b 7d 20 7b 7d 20 7b 7d 20 20 20 20 20 20 20   {} {} {}       
ffd0: 20 20 20 5c 0a 20 20 53 51 4c 49 54 45 5f 46 55     \.  SQLITE_FU
ffe0: 4e 43 54 49 4f 4e 20 7b 7d 20 63 6f 75 6e 74 20  NCTION {} count 
fff0: 7b 7d 20 7b 7d 20 20 20 20 20 5c 0a 20 20 53 51  {} {}     \.  SQ
10000 4c 49 54 45 5f 52 45 41 44 20 74 37 20 7b 7d 20  LITE_READ t7 {} 
10010 7b 7d 20 7b 7d 20 20 20 20 20 20 20 20 20 20 20  {} {}           
10020 20 5c 0a 5d 0a 0a 0a 72 65 6e 61 6d 65 20 70 72   \.]...rename pr
10030 6f 63 20 7b 7d 0a 72 65 6e 61 6d 65 20 70 72 6f  oc {}.rename pro
10040 63 5f 72 65 61 6c 20 70 72 6f 63 0a 66 69 6e 69  c_real proc.fini
10050 73 68 5f 74 65 73 74 0a                          sh_test.