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

Artifact 4dd570df24d175f6c3a8988358e9ce884d86434edf8af0b396af97c97147ac57:


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 20 7b 0a 20 20   altertable {.  
d150: 64 6f 5f 74 65 73 74 20 31 2e 33 35 30 20 7b 0a  do_test 1.350 {.
d160: 20 20 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63      proc auth {c
d170: 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72  ode arg1 arg2 ar
d180: 67 33 20 61 72 67 34 20 61 72 67 73 7d 20 7b 0a  g3 arg4 args} {.
d190: 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d        if {$code=
d1a0: 3d 22 53 51 4c 49 54 45 5f 41 4c 54 45 52 5f 54  ="SQLITE_ALTER_T
d1b0: 41 42 4c 45 22 7d 20 7b 0a 20 20 20 20 20 20 20  ABLE"} {.       
d1c0: 20 73 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20   set ::authargs 
d1d0: 5b 6c 69 73 74 20 24 61 72 67 31 20 24 61 72 67  [list $arg1 $arg
d1e0: 32 20 24 61 72 67 33 20 24 61 72 67 34 5d 0a 20  2 $arg3 $arg4]. 
d1f0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
d200: 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 20 20 7d 0a  LITE_OK.      }.
d210: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
d220: 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20  ITE_OK.    }.   
d230: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
d240: 20 20 41 4c 54 45 52 20 54 41 42 4c 45 20 74 31    ALTER TABLE t1
d250: 20 52 45 4e 41 4d 45 20 43 4f 4c 55 4d 4e 20 62   RENAME COLUMN b
d260: 20 54 4f 20 62 63 64 65 66 67 3b 0a 20 20 20 20   TO bcdefg;.    
d270: 7d 0a 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20 20 64  }.  } {0 {}}.  d
d280: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 61  o_execsql_test a
d290: 75 74 68 2d 31 2e 33 35 31 20 7b 0a 20 20 20 20  uth-1.351 {.    
d2a0: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
d2b0: 20 70 72 61 67 6d 61 5f 74 61 62 6c 65 5f 69 6e   pragma_table_in
d2c0: 66 6f 28 27 74 31 27 29 20 4f 52 44 45 52 20 42  fo('t1') ORDER B
d2d0: 59 20 63 69 64 3b 0a 20 20 7d 20 7b 61 20 62 63  Y cid;.  } {a bc
d2e0: 64 65 66 67 7d 0a 20 20 64 6f 5f 74 65 73 74 20  defg}.  do_test 
d2f0: 61 75 74 68 2d 31 2e 33 35 32 20 7b 0a 20 20 20  auth-1.352 {.   
d300: 20 73 65 74 20 61 75 74 68 61 72 67 73 0a 20 20   set authargs.  
d310: 7d 20 7b 6d 61 69 6e 20 74 31 20 7b 7d 20 7b 7d  } {main t1 {} {}
d320: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 31 2e 33 35  }.  do_test 1.35
d330: 33 20 7b 0a 20 20 20 20 70 72 6f 63 20 61 75 74  3 {.    proc aut
d340: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
d350: 32 20 61 72 67 33 20 61 72 67 34 20 61 72 67 73  2 arg3 arg4 args
d360: 7d 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 63  } {.      if {$c
d370: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 41 4c 54  ode=="SQLITE_ALT
d380: 45 52 5f 54 41 42 4c 45 22 7d 20 7b 0a 20 20 20  ER_TABLE"} {.   
d390: 20 20 20 20 20 73 65 74 20 3a 3a 61 75 74 68 61       set ::autha
d3a0: 72 67 73 20 5b 6c 69 73 74 20 24 61 72 67 31 20  rgs [list $arg1 
d3b0: 24 61 72 67 32 20 24 61 72 67 33 20 24 61 72 67  $arg2 $arg3 $arg
d3c0: 34 5d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  4].        retur
d3d0: 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a  n SQLITE_IGNORE.
d3e0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65        }.      re
d3f0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
d400: 20 20 20 7d 0a 20 20 20 20 63 61 74 63 68 73 71     }.    catchsq
d410: 6c 20 7b 0a 20 20 20 20 20 20 41 4c 54 45 52 20  l {.      ALTER 
d420: 54 41 42 4c 45 20 74 31 20 52 45 4e 41 4d 45 20  TABLE t1 RENAME 
d430: 43 4f 4c 55 4d 4e 20 62 63 64 65 66 67 20 54 4f  COLUMN bcdefg TO
d440: 20 62 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 30   b;.    }.  } {0
d450: 20 7b 7d 7d 0a 20 20 64 6f 5f 65 78 65 63 73 71   {}}.  do_execsq
d460: 6c 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 33 35  l_test auth-1.35
d470: 34 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 6e  4 {.    SELECT n
d480: 61 6d 65 20 46 52 4f 4d 20 70 72 61 67 6d 61 5f  ame FROM pragma_
d490: 74 61 62 6c 65 5f 69 6e 66 6f 28 27 74 31 27 29  table_info('t1')
d4a0: 20 4f 52 44 45 52 20 42 59 20 63 69 64 3b 0a 20   ORDER BY cid;. 
d4b0: 20 7d 20 7b 61 20 62 63 64 65 66 67 7d 0a 20 20   } {a bcdefg}.  
d4c0: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 31 2e 33  do_test auth-1.3
d4d0: 35 35 20 7b 0a 20 20 20 20 73 65 74 20 61 75 74  55 {.    set aut
d4e0: 68 61 72 67 73 0a 20 20 7d 20 7b 6d 61 69 6e 20  hargs.  } {main 
d4f0: 74 31 20 7b 7d 20 7b 7d 7d 0a 20 20 64 6f 5f 74  t1 {} {}}.  do_t
d500: 65 73 74 20 31 2e 33 35 36 20 7b 0a 20 20 20 20  est 1.356 {.    
d510: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
d520: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
d530: 72 67 34 20 61 72 67 73 7d 20 7b 0a 20 20 20 20  rg4 args} {.    
d540: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
d550: 4c 49 54 45 5f 41 4c 54 45 52 5f 54 41 42 4c 45  LITE_ALTER_TABLE
d560: 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74  "} {.        set
d570: 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73   ::authargs [lis
d580: 74 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61  t $arg1 $arg2 $a
d590: 72 67 33 20 24 61 72 67 34 5d 0a 20 20 20 20 20  rg3 $arg4].     
d5a0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
d5b0: 5f 44 45 4e 59 0a 20 20 20 20 20 20 7d 0a 20 20  _DENY.      }.  
d5c0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
d5d0: 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20 20 63  E_OK.    }.    c
d5e0: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20  atchsql {.      
d5f0: 41 4c 54 45 52 20 54 41 42 4c 45 20 74 31 20 52  ALTER TABLE t1 R
d600: 45 4e 41 4d 45 20 43 4f 4c 55 4d 4e 20 62 63 64  ENAME COLUMN bcd
d610: 65 66 67 20 54 4f 20 62 3b 0a 20 20 20 20 7d 0a  efg TO b;.    }.
d620: 20 20 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68    } {1 {not auth
d630: 6f 72 69 7a 65 64 7d 7d 0a 20 20 64 6f 5f 65 78  orized}}.  do_ex
d640: 65 63 73 71 6c 5f 74 65 73 74 20 61 75 74 68 2d  ecsql_test auth-
d650: 31 2e 33 35 36 20 7b 0a 20 20 20 20 53 45 4c 45  1.356 {.    SELE
d660: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 70 72 61  CT name FROM pra
d670: 67 6d 61 5f 74 61 62 6c 65 5f 69 6e 66 6f 28 27  gma_table_info('
d680: 74 31 27 29 20 4f 52 44 45 52 20 42 59 20 63 69  t1') ORDER BY ci
d690: 64 3b 0a 20 20 7d 20 7b 61 20 62 63 64 65 66 67  d;.  } {a bcdefg
d6a0: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68  }.  do_test auth
d6b0: 2d 31 2e 33 35 37 20 7b 0a 20 20 20 20 73 65 74  -1.357 {.    set
d6c0: 20 61 75 74 68 61 72 67 73 0a 20 20 7d 20 7b 6d   authargs.  } {m
d6d0: 61 69 6e 20 74 31 20 7b 7d 20 7b 7d 7d 0a 7d 0a  ain t1 {} {}}.}.
d6e0: 0a 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 32  ..do_test auth-2
d6f0: 2e 31 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68  .1 {.  proc auth
d700: 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32   {code arg1 arg2
d710: 20 61 72 67 33 20 61 72 67 34 20 61 72 67 73 7d   arg3 arg4 args}
d720: 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65   {.    if {$code
d730: 3d 3d 22 53 51 4c 49 54 45 5f 52 45 41 44 22 20  =="SQLITE_READ" 
d740: 26 26 20 24 61 72 67 31 3d 3d 22 74 33 22 20 26  && $arg1=="t3" &
d750: 26 20 24 61 72 67 32 3d 3d 22 78 22 7d 20 7b 0a  & $arg2=="x"} {.
d760: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
d770: 49 54 45 5f 44 45 4e 59 0a 20 20 20 20 7d 0a 20  ITE_DENY.    }. 
d780: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
d790: 5f 4f 4b 0a 20 20 7d 0a 20 20 64 62 20 61 75 74  _OK.  }.  db aut
d7a0: 68 6f 72 69 7a 65 72 20 3a 3a 61 75 74 68 0a 20  horizer ::auth. 
d7b0: 20 65 78 65 63 73 71 6c 20 7b 43 52 45 41 54 45   execsql {CREATE
d7c0: 20 54 41 42 4c 45 20 74 33 28 78 20 49 4e 54 45   TABLE t3(x INTE
d7d0: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  GER PRIMARY KEY,
d7e0: 20 79 2c 20 7a 29 7d 0a 20 20 63 61 74 63 68 73   y, z)}.  catchs
d7f0: 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f  ql {SELECT * FRO
d800: 4d 20 74 33 7d 0a 7d 20 7b 31 20 7b 61 63 63 65  M t3}.} {1 {acce
d810: 73 73 20 74 6f 20 74 33 2e 78 20 69 73 20 70 72  ss to t3.x is pr
d820: 6f 68 69 62 69 74 65 64 7d 7d 0a 64 6f 5f 74 65  ohibited}}.do_te
d830: 73 74 20 61 75 74 68 2d 32 2e 31 20 7b 0a 20 20  st auth-2.1 {.  
d840: 63 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54  catchsql {SELECT
d850: 20 79 2c 7a 20 46 52 4f 4d 20 74 33 7d 0a 7d 20   y,z FROM t3}.} 
d860: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  {0 {}}.do_test a
d870: 75 74 68 2d 32 2e 32 20 7b 0a 20 20 63 61 74 63  uth-2.2 {.  catc
d880: 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 52 4f 57  hsql {SELECT ROW
d890: 49 44 2c 79 2c 7a 20 46 52 4f 4d 20 74 33 7d 0a  ID,y,z FROM t3}.
d8a0: 7d 20 7b 31 20 7b 61 63 63 65 73 73 20 74 6f 20  } {1 {access to 
d8b0: 74 33 2e 78 20 69 73 20 70 72 6f 68 69 62 69 74  t3.x is prohibit
d8c0: 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  ed}}.do_test aut
d8d0: 68 2d 32 2e 33 20 7b 0a 20 20 63 61 74 63 68 73  h-2.3 {.  catchs
d8e0: 71 6c 20 7b 53 45 4c 45 43 54 20 4f 49 44 2c 79  ql {SELECT OID,y
d8f0: 2c 7a 20 46 52 4f 4d 20 74 33 7d 0a 7d 20 7b 31  ,z FROM t3}.} {1
d900: 20 7b 61 63 63 65 73 73 20 74 6f 20 74 33 2e 78   {access to t3.x
d910: 20 69 73 20 70 72 6f 68 69 62 69 74 65 64 7d 7d   is prohibited}}
d920: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 32 2e  .do_test auth-2.
d930: 34 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  4 {.  proc auth 
d940: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
d950: 61 72 67 33 20 61 72 67 34 20 61 72 67 73 7d 20  arg3 arg4 args} 
d960: 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d  {.    if {$code=
d970: 3d 22 53 51 4c 49 54 45 5f 52 45 41 44 22 20 26  ="SQLITE_READ" &
d980: 26 20 24 61 72 67 31 3d 3d 22 74 33 22 20 26 26  & $arg1=="t3" &&
d990: 20 24 61 72 67 32 3d 3d 22 78 22 7d 20 7b 0a 20   $arg2=="x"} {. 
d9a0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
d9b0: 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a  TE_IGNORE.    }.
d9c0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
d9d0: 45 5f 4f 4b 0a 20 20 7d 0a 20 20 65 78 65 63 73  E_OK.  }.  execs
d9e0: 71 6c 20 7b 49 4e 53 45 52 54 20 49 4e 54 4f 20  ql {INSERT INTO 
d9f0: 74 33 20 56 41 4c 55 45 53 28 34 34 2c 35 35 2c  t3 VALUES(44,55,
da00: 36 36 29 7d 0a 20 20 63 61 74 63 68 73 71 6c 20  66)}.  catchsql 
da10: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
da20: 33 7d 0a 7d 20 7b 30 20 7b 7b 7d 20 35 35 20 36  3}.} {0 {{} 55 6
da30: 36 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  6}}.do_test auth
da40: 2d 32 2e 35 20 7b 0a 20 20 63 61 74 63 68 73 71  -2.5 {.  catchsq
da50: 6c 20 7b 53 45 4c 45 43 54 20 72 6f 77 69 64 2c  l {SELECT rowid,
da60: 79 2c 7a 20 46 52 4f 4d 20 74 33 7d 0a 7d 20 7b  y,z FROM t3}.} {
da70: 30 20 7b 7b 7d 20 35 35 20 36 36 7d 7d 0a 64 6f  0 {{} 55 66}}.do
da80: 5f 74 65 73 74 20 61 75 74 68 2d 32 2e 36 20 7b  _test auth-2.6 {
da90: 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f  .  proc auth {co
daa0: 64 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67  de arg1 arg2 arg
dab0: 33 20 61 72 67 34 20 61 72 67 73 7d 20 7b 0a 20  3 arg4 args} {. 
dac0: 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53     if {$code=="S
dad0: 51 4c 49 54 45 5f 52 45 41 44 22 20 26 26 20 24  QLITE_READ" && $
dae0: 61 72 67 31 3d 3d 22 74 33 22 20 26 26 20 24 61  arg1=="t3" && $a
daf0: 72 67 32 3d 3d 22 52 4f 57 49 44 22 7d 20 7b 0a  rg2=="ROWID"} {.
db00: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
db10: 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20 20 20 7d  ITE_IGNORE.    }
db20: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
db30: 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63 61 74 63  TE_OK.  }.  catc
db40: 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46  hsql {SELECT * F
db50: 52 4f 4d 20 74 33 7d 0a 7d 20 7b 30 20 7b 34 34  ROM t3}.} {0 {44
db60: 20 35 35 20 36 36 7d 7d 0a 64 6f 5f 74 65 73 74   55 66}}.do_test
db70: 20 61 75 74 68 2d 32 2e 37 20 7b 0a 20 20 63 61   auth-2.7 {.  ca
db80: 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 52  tchsql {SELECT R
db90: 4f 57 49 44 2c 79 2c 7a 20 46 52 4f 4d 20 74 33  OWID,y,z FROM t3
dba0: 7d 0a 7d 20 7b 30 20 7b 34 34 20 35 35 20 36 36  }.} {0 {44 55 66
dbb0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d  }}.do_test auth-
dbc0: 32 2e 38 20 7b 0a 20 20 70 72 6f 63 20 61 75 74  2.8 {.  proc aut
dbd0: 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67  h {code arg1 arg
dbe0: 32 20 61 72 67 33 20 61 72 67 34 20 61 72 67 73  2 arg3 arg4 args
dbf0: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f 64  } {.    if {$cod
dc00: 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45 41 44 22  e=="SQLITE_READ"
dc10: 20 26 26 20 24 61 72 67 31 3d 3d 22 74 32 22 20   && $arg1=="t2" 
dc20: 26 26 20 24 61 72 67 32 3d 3d 22 52 4f 57 49 44  && $arg2=="ROWID
dc30: 22 7d 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72  "} {.      retur
dc40: 6e 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a  n SQLITE_IGNORE.
dc50: 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
dc60: 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20   SQLITE_OK.  }. 
dc70: 20 63 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43   catchsql {SELEC
dc80: 54 20 52 4f 57 49 44 2c 62 2c 63 20 46 52 4f 4d  T ROWID,b,c FROM
dc90: 20 74 32 7d 0a 7d 20 7b 30 20 7b 7b 7d 20 32 20   t2}.} {0 {{} 2 
dca0: 33 33 20 7b 7d 20 38 20 39 7d 7d 0a 64 6f 5f 74  33 {} 8 9}}.do_t
dcb0: 65 73 74 20 61 75 74 68 2d 32 2e 39 2e 31 20 7b  est auth-2.9.1 {
dcc0: 0a 20 20 23 20 57 65 20 68 61 76 65 20 74 6f 20  .  # We have to 
dcd0: 66 6c 75 73 68 20 74 68 65 20 63 61 63 68 65 20  flush the cache 
dce0: 68 65 72 65 20 69 6e 20 63 61 73 65 20 74 68 65  here in case the
dcf0: 20 54 63 6c 20 69 6e 74 65 72 66 61 63 65 20 74   Tcl interface t
dd00: 72 69 65 73 20 74 6f 0a 20 20 23 20 72 65 75 73  ries to.  # reus
dd10: 65 20 61 20 73 74 61 74 65 6d 65 6e 74 20 63 6f  e a statement co
dd20: 6d 70 69 6c 65 64 20 77 69 74 68 20 73 71 6c 69  mpiled with sqli
dd30: 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 29  te3_prepare_v2()
dd40: 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 0a  . In this case,.
dd50: 20 20 23 20 74 68 65 20 66 69 72 73 74 20 65 72    # the first er
dd60: 72 6f 72 20 65 6e 63 6f 75 6e 74 65 72 65 64 20  ror encountered 
dd70: 69 73 20 61 6e 20 53 51 4c 49 54 45 5f 53 43 48  is an SQLITE_SCH
dd80: 45 4d 41 20 65 72 72 6f 72 2e 20 54 68 65 6e 2c  EMA error. Then,
dd90: 20 77 68 65 6e 0a 20 20 23 20 74 72 79 69 6e 67   when.  # trying
dda0: 20 74 6f 20 72 65 63 6f 6d 70 69 6c 65 20 74 68   to recompile th
ddb0: 65 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65  e statement, the
ddc0: 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 65   authorization e
ddd0: 72 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74 65  rror is encounte
dde0: 72 65 64 2e 0a 20 20 23 20 49 66 20 77 65 20 64  red..  # If we d
ddf0: 6f 20 6e 6f 74 20 66 6c 75 73 68 20 74 68 65 20  o not flush the 
de00: 63 61 63 68 65 2c 20 74 68 65 20 63 6f 72 72 65  cache, the corre
de10: 63 74 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  ct error message
de20: 20 69 73 20 72 65 74 75 72 6e 65 64 2c 20 62 75   is returned, bu
de30: 74 0a 20 20 23 20 74 68 65 20 65 72 72 6f 72 20  t.  # the error 
de40: 63 6f 64 65 20 69 73 20 53 51 4c 49 54 45 5f 53  code is SQLITE_S
de50: 43 48 45 4d 41 2c 20 6e 6f 74 20 53 51 4c 49 54  CHEMA, not SQLIT
de60: 45 5f 45 52 52 4f 52 20 61 73 20 72 65 71 75 69  E_ERROR as requi
de70: 72 65 64 20 62 79 20 74 68 65 20 74 65 73 74 0a  red by the test.
de80: 20 20 23 20 63 61 73 65 20 61 66 74 65 72 20 74    # case after t
de90: 68 69 73 20 6f 6e 65 2e 0a 20 20 23 0a 20 20 64  his one..  #.  d
dea0: 62 20 63 61 63 68 65 20 66 6c 75 73 68 0a 0a 20  b cache flush.. 
deb0: 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65   proc auth {code
dec0: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20   arg1 arg2 arg3 
ded0: 61 72 67 34 20 61 72 67 73 7d 20 7b 0a 20 20 20  arg4 args} {.   
dee0: 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51 4c   if {$code=="SQL
def0: 49 54 45 5f 52 45 41 44 22 20 26 26 20 24 61 72  ITE_READ" && $ar
df00: 67 31 3d 3d 22 74 32 22 20 26 26 20 24 61 72 67  g1=="t2" && $arg
df10: 32 3d 3d 22 52 4f 57 49 44 22 7d 20 7b 0a 20 20  2=="ROWID"} {.  
df20: 20 20 20 20 72 65 74 75 72 6e 20 62 6f 67 75 73      return bogus
df30: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
df40: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
df50: 20 20 63 61 74 63 68 73 71 6c 20 7b 53 45 4c 45    catchsql {SELE
df60: 43 54 20 52 4f 57 49 44 2c 62 2c 63 20 46 52 4f  CT ROWID,b,c FRO
df70: 4d 20 74 32 7d 0a 7d 20 7b 31 20 7b 61 75 74 68  M t2}.} {1 {auth
df80: 6f 72 69 7a 65 72 20 6d 61 6c 66 75 6e 63 74 69  orizer malfuncti
df90: 6f 6e 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  on}}.do_test aut
dfa0: 68 2d 32 2e 39 2e 32 20 7b 0a 20 20 64 62 20 65  h-2.9.2 {.  db e
dfb0: 72 72 6f 72 63 6f 64 65 0a 7d 20 7b 31 7d 0a 64  rrorcode.} {1}.d
dfc0: 6f 5f 74 65 73 74 20 61 75 74 68 2d 32 2e 31 30  o_test auth-2.10
dfd0: 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b   {.  proc auth {
dfe0: 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20 61  code arg1 arg2 a
dff0: 72 67 33 20 61 72 67 34 20 61 72 67 73 7d 20 7b  rg3 arg4 args} {
e000: 0a 20 20 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d  .    if {$code==
e010: 22 53 51 4c 49 54 45 5f 53 45 4c 45 43 54 22 7d  "SQLITE_SELECT"}
e020: 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   {.      return 
e030: 62 6f 67 75 73 0a 20 20 20 20 7d 0a 20 20 20 20  bogus.    }.    
e040: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
e050: 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20  .  }.  catchsql 
e060: 7b 53 45 4c 45 43 54 20 52 4f 57 49 44 2c 62 2c  {SELECT ROWID,b,
e070: 63 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31 20  c FROM t2}.} {1 
e080: 7b 61 75 74 68 6f 72 69 7a 65 72 20 6d 61 6c 66  {authorizer malf
e090: 75 6e 63 74 69 6f 6e 7d 7d 0a 64 6f 5f 74 65 73  unction}}.do_tes
e0a0: 74 20 61 75 74 68 2d 32 2e 31 31 2e 31 20 7b 0a  t auth-2.11.1 {.
e0b0: 20 20 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64    proc auth {cod
e0c0: 65 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33  e arg1 arg2 arg3
e0d0: 20 61 72 67 34 20 61 72 67 73 7d 20 7b 0a 20 20   arg4 args} {.  
e0e0: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
e0f0: 4c 49 54 45 5f 52 45 41 44 22 20 26 26 20 24 61  LITE_READ" && $a
e100: 72 67 32 3d 3d 22 61 22 7d 20 7b 0a 20 20 20 20  rg2=="a"} {.    
e110: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
e120: 49 47 4e 4f 52 45 0a 20 20 20 20 7d 0a 20 20 20  IGNORE.    }.   
e130: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
e140: 4b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  K.  }.  catchsql
e150: 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   {SELECT * FROM 
e160: 74 32 2c 20 74 33 7d 0a 7d 20 7b 30 20 7b 7b 7d  t2, t3}.} {0 {{}
e170: 20 32 20 33 33 20 34 34 20 35 35 20 36 36 20 7b   2 33 44 55 66 {
e180: 7d 20 38 20 39 20 34 34 20 35 35 20 36 36 7d 7d  } 8 9 44 55 66}}
e190: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 32 2e  .do_test auth-2.
e1a0: 31 31 2e 32 20 7b 0a 20 20 70 72 6f 63 20 61 75  11.2 {.  proc au
e1b0: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
e1c0: 67 32 20 61 72 67 33 20 61 72 67 34 20 61 72 67  g2 arg3 arg4 arg
e1d0: 73 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63 6f  s} {.    if {$co
e1e0: 64 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45 41 44  de=="SQLITE_READ
e1f0: 22 20 26 26 20 24 61 72 67 32 3d 3d 22 78 22 7d  " && $arg2=="x"}
e200: 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   {.      return 
e210: 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a 20 20  SQLITE_IGNORE.  
e220: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53    }.    return S
e230: 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 63  QLITE_OK.  }.  c
e240: 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20  atchsql {SELECT 
e250: 2a 20 46 52 4f 4d 20 74 32 2c 20 74 33 7d 0a 7d  * FROM t2, t3}.}
e260: 20 7b 30 20 7b 31 31 20 32 20 33 33 20 7b 7d 20   {0 {11 2 33 {} 
e270: 35 35 20 36 36 20 37 20 38 20 39 20 7b 7d 20 35  55 66 7 8 9 {} 5
e280: 35 20 36 36 7d 7d 0a 0a 23 20 4d 61 6b 65 20 73  5 66}}..# Make s
e290: 75 72 65 20 74 68 65 20 4f 4c 44 20 61 6e 64 20  ure the OLD and 
e2a0: 4e 45 57 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  NEW pseudo-table
e2b0: 73 20 6f 66 20 61 20 74 72 69 67 67 65 72 20 67  s of a trigger g
e2c0: 65 74 20 61 75 74 68 6f 72 69 7a 65 64 2e 0a 23  et authorized..#
e2d0: 0a 69 66 63 61 70 61 62 6c 65 20 74 72 69 67 67  .ifcapable trigg
e2e0: 65 72 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 61  er {.  do_test a
e2f0: 75 74 68 2d 33 2e 31 20 7b 0a 20 20 20 20 70 72  uth-3.1 {.    pr
e300: 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20 61 72  oc auth {code ar
e310: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
e320: 34 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 20 20  4 args} {.      
e330: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
e340: 0a 20 20 20 20 7d 0a 20 20 20 20 65 78 65 63 73  .    }.    execs
e350: 71 6c 20 7b 0a 20 20 20 20 20 20 43 52 45 41 54  ql {.      CREAT
e360: 45 20 54 41 42 4c 45 20 74 78 28 61 31 2c 61 32  E TABLE tx(a1,a2
e370: 2c 62 31 2c 62 32 2c 63 31 2c 63 32 29 3b 0a 20  ,b1,b2,c1,c2);. 
e380: 20 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47       CREATE TRIG
e390: 47 45 52 20 72 31 20 41 46 54 45 52 20 55 50 44  GER r1 AFTER UPD
e3a0: 41 54 45 20 4f 4e 20 74 32 20 46 4f 52 20 45 41  ATE ON t2 FOR EA
e3b0: 43 48 20 52 4f 57 20 42 45 47 49 4e 0a 20 20 20  CH ROW BEGIN.   
e3c0: 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
e3d0: 20 74 78 20 56 41 4c 55 45 53 28 4f 4c 44 2e 61   tx VALUES(OLD.a
e3e0: 2c 4e 45 57 2e 61 2c 4f 4c 44 2e 62 2c 4e 45 57  ,NEW.a,OLD.b,NEW
e3f0: 2e 62 2c 4f 4c 44 2e 63 2c 4e 45 57 2e 63 29 3b  .b,OLD.c,NEW.c);
e400: 0a 20 20 20 20 20 20 45 4e 44 3b 0a 20 20 20 20  .      END;.    
e410: 20 20 55 50 44 41 54 45 20 74 32 20 53 45 54 20    UPDATE t2 SET 
e420: 61 3d 61 2b 31 3b 0a 20 20 20 20 20 20 53 45 4c  a=a+1;.      SEL
e430: 45 43 54 20 2a 20 46 52 4f 4d 20 74 78 3b 0a 20  ECT * FROM tx;. 
e440: 20 20 20 7d 0a 20 20 7d 20 7b 31 31 20 31 32 20     }.  } {11 12 
e450: 32 20 32 20 33 33 20 33 33 20 37 20 38 20 38 20  2 2 33 33 7 8 8 
e460: 38 20 39 20 39 7d 0a 20 20 64 6f 5f 74 65 73 74  8 9 9}.  do_test
e470: 20 61 75 74 68 2d 33 2e 32 20 7b 0a 20 20 20 20   auth-3.2 {.    
e480: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
e490: 61 72 67 31 20 61 72 67 32 20 61 72 67 33 20 61  arg1 arg2 arg3 a
e4a0: 72 67 34 20 61 72 67 73 7d 20 7b 0a 20 20 20 20  rg4 args} {.    
e4b0: 20 20 69 66 20 7b 24 63 6f 64 65 3d 3d 22 53 51    if {$code=="SQ
e4c0: 4c 49 54 45 5f 52 45 41 44 22 20 26 26 20 24 61  LITE_READ" && $a
e4d0: 72 67 31 3d 3d 22 74 32 22 20 26 26 20 24 61 72  rg1=="t2" && $ar
e4e0: 67 32 3d 3d 22 63 22 7d 20 7b 0a 20 20 20 20 20  g2=="c"} {.     
e4f0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
e500: 5f 49 47 4e 4f 52 45 0a 20 20 20 20 20 20 7d 0a  _IGNORE.      }.
e510: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
e520: 49 54 45 5f 4f 4b 0a 20 20 20 20 7d 0a 20 20 20  ITE_OK.    }.   
e530: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
e540: 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 78 3b   DELETE FROM tx;
e550: 0a 20 20 20 20 20 20 55 50 44 41 54 45 20 74 32  .      UPDATE t2
e560: 20 53 45 54 20 61 3d 61 2b 31 30 30 3b 0a 20 20   SET a=a+100;.  
e570: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
e580: 4d 20 74 78 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  M tx;.    }.  } 
e590: 7b 31 32 20 31 31 32 20 32 20 32 20 7b 7d 20 7b  {12 112 2 2 {} {
e5a0: 7d 20 38 20 31 30 38 20 38 20 38 20 7b 7d 20 7b  } 8 108 8 8 {} {
e5b0: 7d 7d 0a 7d 20 3b 23 20 69 66 63 61 70 61 62 6c  }}.} ;# ifcapabl
e5c0: 65 20 74 72 69 67 67 65 72 0a 0a 23 20 4d 61 6b  e trigger..# Mak
e5d0: 65 20 73 75 72 65 20 74 68 65 20 6e 61 6d 65 73  e sure the names
e5e0: 20 6f 66 20 76 69 65 77 73 20 61 6e 64 20 74 72   of views and tr
e5f0: 69 67 67 65 72 73 20 61 72 65 20 70 61 73 73 65  iggers are passe
e600: 64 20 6f 6e 20 6f 6e 20 61 72 67 34 2e 0a 23 0a  d on on arg4..#.
e610: 69 66 63 61 70 61 62 6c 65 20 74 72 69 67 67 65  ifcapable trigge
e620: 72 20 7b 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  r {.do_test auth
e630: 2d 34 2e 31 20 7b 0a 20 20 70 72 6f 63 20 61 75  -4.1 {.  proc au
e640: 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61 72  th {code arg1 ar
e650: 67 32 20 61 72 67 33 20 61 72 67 34 20 61 72 67  g2 arg3 arg4 arg
e660: 73 7d 20 7b 0a 20 20 20 20 6c 61 70 70 65 6e 64  s} {.    lappend
e670: 20 3a 3a 61 75 74 68 61 72 67 73 20 24 63 6f 64   ::authargs $cod
e680: 65 20 24 61 72 67 31 20 24 61 72 67 32 20 24 61  e $arg1 $arg2 $a
e690: 72 67 33 20 24 61 72 67 34 0a 20 20 20 20 72 65  rg3 $arg4.    re
e6a0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20  turn SQLITE_OK. 
e6b0: 20 7d 0a 20 20 73 65 74 20 61 75 74 68 61 72 67   }.  set autharg
e6c0: 73 20 7b 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b  s {}.  execsql {
e6d0: 0a 20 20 20 20 55 50 44 41 54 45 20 74 32 20 53  .    UPDATE t2 S
e6e0: 45 54 20 61 3d 61 2b 31 3b 0a 20 20 7d 0a 20 20  ET a=a+1;.  }.  
e6f0: 73 65 74 20 61 75 74 68 61 72 67 73 0a 7d 20 5b  set authargs.} [
e700: 6c 69 73 74 20 5c 0a 20 20 53 51 4c 49 54 45 5f  list \.  SQLITE_
e710: 52 45 41 44 20 20 20 74 32 20 61 20 20 6d 61 69  READ   t2 a  mai
e720: 6e 20 7b 7d 20 5c 0a 20 20 53 51 4c 49 54 45 5f  n {} \.  SQLITE_
e730: 55 50 44 41 54 45 20 74 32 20 61 20 20 6d 61 69  UPDATE t2 a  mai
e740: 6e 20 7b 7d 20 5c 0a 20 20 53 51 4c 49 54 45 5f  n {} \.  SQLITE_
e750: 49 4e 53 45 52 54 20 74 78 20 7b 7d 20 6d 61 69  INSERT tx {} mai
e760: 6e 20 72 31 20 5c 0a 20 20 53 51 4c 49 54 45 5f  n r1 \.  SQLITE_
e770: 52 45 41 44 20 20 20 74 32 20 61 20 20 6d 61 69  READ   t2 a  mai
e780: 6e 20 72 31 20 5c 0a 20 20 53 51 4c 49 54 45 5f  n r1 \.  SQLITE_
e790: 52 45 41 44 20 20 20 74 32 20 61 20 20 6d 61 69  READ   t2 a  mai
e7a0: 6e 20 72 31 20 5c 0a 20 20 53 51 4c 49 54 45 5f  n r1 \.  SQLITE_
e7b0: 52 45 41 44 20 20 20 74 32 20 62 20 20 6d 61 69  READ   t2 b  mai
e7c0: 6e 20 72 31 20 5c 0a 20 20 53 51 4c 49 54 45 5f  n r1 \.  SQLITE_
e7d0: 52 45 41 44 20 20 20 74 32 20 62 20 20 6d 61 69  READ   t2 b  mai
e7e0: 6e 20 72 31 20 5c 0a 20 20 53 51 4c 49 54 45 5f  n r1 \.  SQLITE_
e7f0: 52 45 41 44 20 20 20 74 32 20 63 20 20 6d 61 69  READ   t2 c  mai
e800: 6e 20 72 31 20 5c 0a 20 20 53 51 4c 49 54 45 5f  n r1 \.  SQLITE_
e810: 52 45 41 44 20 20 20 74 32 20 63 20 20 6d 61 69  READ   t2 c  mai
e820: 6e 20 72 31 5d 0a 7d 0a 0a 69 66 63 61 70 61 62  n r1].}..ifcapab
e830: 6c 65 20 7b 76 69 65 77 20 26 26 20 74 72 69 67  le {view && trig
e840: 67 65 72 7d 20 7b 0a 64 6f 5f 74 65 73 74 20 61  ger} {.do_test a
e850: 75 74 68 2d 34 2e 32 20 7b 0a 20 20 65 78 65 63  uth-4.2 {.  exec
e860: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
e870: 20 56 49 45 57 20 76 31 20 41 53 20 53 45 4c 45   VIEW v1 AS SELE
e880: 43 54 20 61 2b 62 20 41 53 20 78 20 46 52 4f 4d  CT a+b AS x FROM
e890: 20 74 32 3b 0a 20 20 20 20 43 52 45 41 54 45 20   t2;.    CREATE 
e8a0: 54 41 42 4c 45 20 76 31 63 68 6e 67 28 78 31 2c  TABLE v1chng(x1,
e8b0: 78 32 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20  x2);.    CREATE 
e8c0: 54 52 49 47 47 45 52 20 72 32 20 49 4e 53 54 45  TRIGGER r2 INSTE
e8d0: 41 44 20 4f 46 20 55 50 44 41 54 45 20 4f 4e 20  AD OF UPDATE ON 
e8e0: 76 31 20 42 45 47 49 4e 0a 20 20 20 20 20 20 49  v1 BEGIN.      I
e8f0: 4e 53 45 52 54 20 49 4e 54 4f 20 76 31 63 68 6e  NSERT INTO v1chn
e900: 67 20 56 41 4c 55 45 53 28 4f 4c 44 2e 78 2c 4e  g VALUES(OLD.x,N
e910: 45 57 2e 78 29 3b 0a 20 20 20 20 45 4e 44 3b 0a  EW.x);.    END;.
e920: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
e930: 4d 20 76 31 3b 0a 20 20 7d 0a 7d 20 7b 31 31 35  M v1;.  }.} {115
e940: 20 31 31 37 7d 0a 64 6f 5f 74 65 73 74 20 61 75   117}.do_test au
e950: 74 68 2d 34 2e 33 20 7b 0a 20 20 73 65 74 20 61  th-4.3 {.  set a
e960: 75 74 68 61 72 67 73 20 7b 7d 0a 20 20 65 78 65  uthargs {}.  exe
e970: 63 73 71 6c 20 7b 0a 20 20 20 20 55 50 44 41 54  csql {.    UPDAT
e980: 45 20 76 31 20 53 45 54 20 78 3d 31 20 57 48 45  E v1 SET x=1 WHE
e990: 52 45 20 78 3d 31 31 37 0a 20 20 7d 0a 20 20 73  RE x=117.  }.  s
e9a0: 65 74 20 61 75 74 68 61 72 67 73 0a 7d 20 5b 6c  et authargs.} [l
e9b0: 69 73 74 20 5c 0a 20 20 53 51 4c 49 54 45 5f 55  ist \.  SQLITE_U
e9c0: 50 44 41 54 45 20 76 31 20 20 20 20 20 78 20 20  PDATE v1     x  
e9d0: 6d 61 69 6e 20 7b 7d 20 5c 0a 20 20 53 51 4c 49  main {} \.  SQLI
e9e0: 54 45 5f 53 45 4c 45 43 54 20 7b 7d 20 20 20 20  TE_SELECT {}    
e9f0: 20 7b 7d 20 7b 7d 20 20 20 76 31 20 5c 0a 20 20   {} {}   v1 \.  
ea00: 53 51 4c 49 54 45 5f 52 45 41 44 20 20 20 74 32  SQLITE_READ   t2
ea10: 20 20 20 20 20 61 20 20 6d 61 69 6e 20 76 31 20       a  main v1 
ea20: 5c 0a 20 20 53 51 4c 49 54 45 5f 52 45 41 44 20  \.  SQLITE_READ 
ea30: 20 20 74 32 20 20 20 20 20 62 20 20 6d 61 69 6e    t2     b  main
ea40: 20 76 31 20 5c 0a 20 20 53 51 4c 49 54 45 5f 52   v1 \.  SQLITE_R
ea50: 45 41 44 20 20 20 76 31 20 20 20 20 20 78 20 20  EAD   v1     x  
ea60: 6d 61 69 6e 20 76 31 20 5c 0a 20 20 53 51 4c 49  main v1 \.  SQLI
ea70: 54 45 5f 52 45 41 44 20 20 20 76 31 20 20 20 20  TE_READ   v1    
ea80: 20 78 20 20 6d 61 69 6e 20 76 31 20 5c 0a 20 20   x  main v1 \.  
ea90: 53 51 4c 49 54 45 5f 53 45 4c 45 43 54 20 7b 7d  SQLITE_SELECT {}
eaa0: 20 20 20 20 20 7b 7d 20 7b 7d 20 76 31 20 20 20       {} {} v1   
eab0: 5c 0a 20 20 53 51 4c 49 54 45 5f 52 45 41 44 20  \.  SQLITE_READ 
eac0: 20 20 76 31 20 20 20 20 20 78 20 20 6d 61 69 6e    v1     x  main
ead0: 20 76 31 20 5c 0a 20 20 53 51 4c 49 54 45 5f 49   v1 \.  SQLITE_I
eae0: 4e 53 45 52 54 20 76 31 63 68 6e 67 20 7b 7d 20  NSERT v1chng {} 
eaf0: 6d 61 69 6e 20 72 32 20 5c 0a 20 20 53 51 4c 49  main r2 \.  SQLI
eb00: 54 45 5f 52 45 41 44 20 20 20 76 31 20 20 20 20  TE_READ   v1    
eb10: 20 78 20 20 6d 61 69 6e 20 72 32 20 5c 0a 20 20   x  main r2 \.  
eb20: 53 51 4c 49 54 45 5f 52 45 41 44 20 20 20 76 31  SQLITE_READ   v1
eb30: 20 20 20 20 20 78 20 20 6d 61 69 6e 20 72 32 20       x  main r2 
eb40: 5c 0a 5d 0a 0a 64 6f 5f 74 65 73 74 20 61 75 74  \.]..do_test aut
eb50: 68 2d 34 2e 34 20 7b 0a 20 20 65 78 65 63 73 71  h-4.4 {.  execsq
eb60: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
eb70: 52 49 47 47 45 52 20 72 33 20 49 4e 53 54 45 41  RIGGER r3 INSTEA
eb80: 44 20 4f 46 20 44 45 4c 45 54 45 20 4f 4e 20 76  D OF DELETE ON v
eb90: 31 20 42 45 47 49 4e 0a 20 20 20 20 20 20 49 4e  1 BEGIN.      IN
eba0: 53 45 52 54 20 49 4e 54 4f 20 76 31 63 68 6e 67  SERT INTO v1chng
ebb0: 20 56 41 4c 55 45 53 28 4f 4c 44 2e 78 2c 4e 55   VALUES(OLD.x,NU
ebc0: 4c 4c 29 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20  LL);.    END;.  
ebd0: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
ebe0: 76 31 3b 0a 20 20 7d 0a 7d 20 7b 31 31 35 20 31  v1;.  }.} {115 1
ebf0: 31 37 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 68  17}.do_test auth
ec00: 2d 34 2e 35 20 7b 0a 20 20 73 65 74 20 61 75 74  -4.5 {.  set aut
ec10: 68 61 72 67 73 20 7b 7d 0a 20 20 65 78 65 63 73  hargs {}.  execs
ec20: 71 6c 20 7b 0a 20 20 20 20 44 45 4c 45 54 45 20  ql {.    DELETE 
ec30: 46 52 4f 4d 20 76 31 20 57 48 45 52 45 20 78 3d  FROM v1 WHERE x=
ec40: 31 31 37 0a 20 20 7d 0a 20 20 73 65 74 20 61 75  117.  }.  set au
ec50: 74 68 61 72 67 73 0a 7d 20 5b 6c 69 73 74 20 5c  thargs.} [list \
ec60: 0a 20 20 53 51 4c 49 54 45 5f 44 45 4c 45 54 45  .  SQLITE_DELETE
ec70: 20 76 31 20 20 20 20 20 7b 7d 20 6d 61 69 6e 20   v1     {} main 
ec80: 7b 7d 20 5c 0a 20 20 53 51 4c 49 54 45 5f 53 45  {} \.  SQLITE_SE
ec90: 4c 45 43 54 20 7b 7d 20 20 20 20 20 7b 7d 20 7b  LECT {}     {} {
eca0: 7d 20 20 20 76 31 20 5c 0a 20 20 53 51 4c 49 54  }   v1 \.  SQLIT
ecb0: 45 5f 52 45 41 44 20 20 20 74 32 20 20 20 20 20  E_READ   t2     
ecc0: 61 20 20 6d 61 69 6e 20 76 31 20 5c 0a 20 20 53  a  main v1 \.  S
ecd0: 51 4c 49 54 45 5f 52 45 41 44 20 20 20 74 32 20  QLITE_READ   t2 
ece0: 20 20 20 20 62 20 20 6d 61 69 6e 20 76 31 20 5c      b  main v1 \
ecf0: 0a 20 20 53 51 4c 49 54 45 5f 52 45 41 44 20 20  .  SQLITE_READ  
ed00: 20 76 31 20 20 20 20 20 78 20 20 6d 61 69 6e 20   v1     x  main 
ed10: 76 31 20 5c 0a 20 20 53 51 4c 49 54 45 5f 52 45  v1 \.  SQLITE_RE
ed20: 41 44 20 20 20 76 31 20 20 20 20 20 78 20 20 6d  AD   v1     x  m
ed30: 61 69 6e 20 76 31 20 5c 0a 20 20 53 51 4c 49 54  ain v1 \.  SQLIT
ed40: 45 5f 53 45 4c 45 43 54 20 7b 7d 20 20 20 20 20  E_SELECT {}     
ed50: 7b 7d 20 7b 7d 20 76 31 20 20 20 5c 0a 20 20 53  {} {} v1   \.  S
ed60: 51 4c 49 54 45 5f 52 45 41 44 20 20 20 76 31 20  QLITE_READ   v1 
ed70: 20 20 20 20 78 20 20 6d 61 69 6e 20 76 31 20 5c      x  main v1 \
ed80: 0a 20 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54  .  SQLITE_INSERT
ed90: 20 76 31 63 68 6e 67 20 7b 7d 20 6d 61 69 6e 20   v1chng {} main 
eda0: 72 33 20 5c 0a 20 20 53 51 4c 49 54 45 5f 52 45  r3 \.  SQLITE_RE
edb0: 41 44 20 20 20 76 31 20 20 20 20 20 78 20 20 6d  AD   v1     x  m
edc0: 61 69 6e 20 72 33 20 5c 0a 5d 0a 0a 7d 20 3b 23  ain r3 \.]..} ;#
edd0: 20 69 66 63 61 70 61 62 6c 65 20 76 69 65 77 20   ifcapable view 
ede0: 26 26 20 74 72 69 67 67 65 72 0a 0a 23 20 54 69  && trigger..# Ti
edf0: 63 6b 65 74 20 23 31 33 33 38 3a 20 20 4d 61 6b  cket #1338:  Mak
ee00: 65 20 73 75 72 65 20 61 75 74 68 65 6e 74 69 63  e sure authentic
ee10: 61 74 69 6f 6e 20 77 6f 72 6b 73 20 69 6e 20 74  ation works in t
ee20: 68 65 20 70 72 65 73 65 6e 63 65 20 6f 66 20 61  he presence of a
ee30: 6e 20 41 53 0a 23 20 63 6c 61 75 73 65 2e 0a 23  n AS.# clause..#
ee40: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 35 2e  .do_test auth-5.
ee50: 31 20 7b 0a 20 20 70 72 6f 63 20 61 75 74 68 20  1 {.  proc auth 
ee60: 7b 63 6f 64 65 20 61 72 67 31 20 61 72 67 32 20  {code arg1 arg2 
ee70: 61 72 67 33 20 61 72 67 34 20 61 72 67 73 7d 20  arg3 arg4 args} 
ee80: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  {.    return SQL
ee90: 49 54 45 5f 4f 4b 0a 20 20 7d 0a 20 20 65 78 65  ITE_OK.  }.  exe
eea0: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
eeb0: 54 20 63 6f 75 6e 74 28 61 29 20 41 53 20 63 6e  T count(a) AS cn
eec0: 74 20 46 52 4f 4d 20 74 34 20 4f 52 44 45 52 20  t FROM t4 ORDER 
eed0: 42 59 20 63 6e 74 0a 20 20 7d 0a 7d 20 7b 31 7d  BY cnt.  }.} {1}
eee0: 0a 0a 23 20 54 69 63 6b 65 74 20 23 31 36 30 37  ..# Ticket #1607
eef0: 0a 23 0a 69 66 63 61 70 61 62 6c 65 20 63 6f 6d  .#.ifcapable com
ef00: 70 6f 75 6e 64 26 26 73 75 62 71 75 65 72 79 20  pound&&subquery 
ef10: 7b 0a 20 20 69 66 63 61 70 61 62 6c 65 20 74 72  {.  ifcapable tr
ef20: 69 67 67 65 72 20 7b 0a 20 20 20 20 65 78 65 63  igger {.    exec
ef30: 73 71 6c 20 7b 0a 20 20 20 20 20 20 44 52 4f 50  sql {.      DROP
ef40: 20 54 41 42 4c 45 20 74 78 3b 0a 20 20 20 20 7d   TABLE tx;.    }
ef50: 0a 20 20 20 20 69 66 63 61 70 61 62 6c 65 20 76  .    ifcapable v
ef60: 69 65 77 20 7b 0a 20 20 20 20 20 20 65 78 65 63  iew {.      exec
ef70: 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 44 52  sql {.        DR
ef80: 4f 50 20 54 41 42 4c 45 20 76 31 63 68 6e 67 3b  OP TABLE v1chng;
ef90: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
efa0: 20 7d 0a 20 20 69 66 63 61 70 61 62 6c 65 20 73   }.  ifcapable s
efb0: 74 61 74 34 20 7b 0a 20 20 20 20 73 65 74 20 73  tat4 {.    set s
efc0: 74 61 74 34 20 22 73 71 6c 69 74 65 5f 73 74 61  tat4 "sqlite_sta
efd0: 74 34 20 22 0a 20 20 7d 20 65 6c 73 65 20 7b 0a  t4 ".  } else {.
efe0: 20 20 20 20 69 66 63 61 70 61 62 6c 65 20 73 74      ifcapable st
eff0: 61 74 33 20 7b 0a 20 20 20 20 20 20 73 65 74 20  at3 {.      set 
f000: 73 74 61 74 34 20 22 73 71 6c 69 74 65 5f 73 74  stat4 "sqlite_st
f010: 61 74 33 20 22 0a 20 20 20 20 7d 20 65 6c 73 65  at3 ".    } else
f020: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 73 74 61   {.      set sta
f030: 74 34 20 22 22 0a 20 20 20 20 7d 0a 20 20 7d 0a  t4 "".    }.  }.
f040: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 35    do_test auth-5
f050: 2e 32 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .2 {.    execsql
f060: 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20   {.      SELECT 
f070: 6e 61 6d 65 20 46 52 4f 4d 20 28 0a 20 20 20 20  name FROM (.    
f080: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
f090: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  M sqlite_master 
f0a0: 55 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43 54  UNION ALL SELECT
f0b0: 20 2a 20 46 52 4f 4d 20 74 65 6d 70 2e 73 71 6c   * FROM temp.sql
f0c0: 69 74 65 5f 6d 61 73 74 65 72 29 0a 20 20 20 20  ite_master).    
f0d0: 20 20 57 48 45 52 45 20 74 79 70 65 3d 27 74 61    WHERE type='ta
f0e0: 62 6c 65 27 0a 20 20 20 20 20 20 4f 52 44 45 52  ble'.      ORDER
f0f0: 20 42 59 20 6e 61 6d 65 0a 20 20 20 20 7d 0a 20   BY name.    }. 
f100: 20 7d 20 22 73 71 6c 69 74 65 5f 73 74 61 74 31   } "sqlite_stat1
f110: 20 24 7b 73 74 61 74 34 7d 74 31 20 74 32 20 74   ${stat4}t1 t2 t
f120: 33 20 74 34 22 0a 7d 0a 0a 23 20 54 69 63 6b 65  3 t4".}..# Ticke
f130: 74 20 23 33 39 34 34 0a 23 0a 69 66 63 61 70 61  t #3944.#.ifcapa
f140: 62 6c 65 20 74 72 69 67 67 65 72 20 7b 0a 20 20  ble trigger {.  
f150: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 35 2e 33  do_test auth-5.3
f160: 2e 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .1 {.    execsql
f170: 20 7b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20   {.      CREATE 
f180: 54 41 42 4c 45 20 74 35 20 28 20 78 20 29 3b 0a  TABLE t5 ( x );.
f190: 20 20 20 20 20 20 43 52 45 41 54 45 20 54 52 49        CREATE TRI
f1a0: 47 47 45 52 20 74 35 5f 74 72 31 20 41 46 54 45  GGER t5_tr1 AFTE
f1b0: 52 20 49 4e 53 45 52 54 20 4f 4e 20 74 35 20 42  R INSERT ON t5 B
f1c0: 45 47 49 4e 20 0a 20 20 20 20 20 20 20 20 55 50  EGIN .        UP
f1d0: 44 41 54 45 20 74 35 20 53 45 54 20 78 20 3d 20  DATE t5 SET x = 
f1e0: 31 20 57 48 45 52 45 20 4e 45 57 2e 78 20 3d 20  1 WHERE NEW.x = 
f1f0: 30 3b 0a 20 20 20 20 20 20 45 4e 44 3b 0a 20 20  0;.      END;.  
f200: 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 73 65 74    }.  } {}.  set
f210: 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 69 73   ::authargs [lis
f220: 74 5d 0a 20 20 70 72 6f 63 20 61 75 74 68 20 7b  t].  proc auth {
f230: 61 72 67 73 7d 20 7b 0a 20 20 20 20 65 76 61 6c  args} {.    eval
f240: 20 6c 61 70 70 65 6e 64 20 3a 3a 61 75 74 68 61   lappend ::autha
f250: 72 67 73 20 5b 6c 72 61 6e 67 65 20 24 61 72 67  rgs [lrange $arg
f260: 73 20 30 20 34 5d 0a 20 20 20 20 72 65 74 75 72  s 0 4].    retur
f270: 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 7d 0a  n SQLITE_OK.  }.
f280: 20 20 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 35    do_test auth-5
f290: 2e 33 2e 32 20 7b 0a 20 20 20 20 65 78 65 63 73  .3.2 {.    execs
f2a0: 71 6c 20 7b 20 49 4e 53 45 52 54 20 49 4e 54 4f  ql { INSERT INTO
f2b0: 20 74 35 20 28 78 29 20 76 61 6c 75 65 73 28 30   t5 (x) values(0
f2c0: 29 20 7d 0a 20 20 20 20 73 65 74 20 3a 3a 61 75  ) }.    set ::au
f2d0: 74 68 61 72 67 73 0a 20 20 7d 20 5b 6c 69 73 74  thargs.  } [list
f2e0: 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 20 74   SQLITE_INSERT t
f2f0: 35 20 7b 7d 20 6d 61 69 6e 20 7b 7d 20 20 20 20  5 {} main {}    
f300: 5c 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c 49  \.          SQLI
f310: 54 45 5f 55 50 44 41 54 45 20 74 35 20 78 20 6d  TE_UPDATE t5 x m
f320: 61 69 6e 20 74 35 5f 74 72 31 20 5c 0a 20 20 20  ain t5_tr1 \.   
f330: 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 52 45         SQLITE_RE
f340: 41 44 20 74 35 20 78 20 6d 61 69 6e 20 74 35 5f  AD t5 x main t5_
f350: 74 72 31 20 20 20 5c 0a 20 20 20 20 5d 0a 20 20  tr1   \.    ].  
f360: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 35 2e 33  do_test auth-5.3
f370: 2e 32 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .2 {.    execsql
f380: 20 7b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d   { SELECT * FROM
f390: 20 74 35 20 7d 0a 20 20 7d 20 7b 31 7d 0a 7d 0a   t5 }.  } {1}.}.
f3a0: 0a 23 20 54 69 63 6b 65 74 20 5b 30 65 62 37 30  .# Ticket [0eb70
f3b0: 64 37 37 63 62 30 35 62 62 32 32 37 32 30 5d 3a  d77cb05bb22720]:
f3c0: 20 20 49 6e 76 61 6c 69 64 20 70 6f 69 6e 74 65    Invalid pointe
f3d0: 72 20 70 61 73 73 73 65 64 20 74 6f 20 74 68 65  r passsed to the
f3e0: 20 61 75 74 68 6f 72 69 7a 65 72 0a 23 20 63 61   authorizer.# ca
f3f0: 6c 6c 62 61 63 6b 20 77 68 65 6e 20 75 70 64 61  llback when upda
f400: 74 69 6e 67 20 61 20 52 4f 57 49 44 2e 0a 23 0a  ting a ROWID..#.
f410: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 36 2e 31  do_test auth-6.1
f420: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
f430: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
f440: 74 36 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 2c 67  t6(a,b,c,d,e,f,g
f450: 2c 68 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  ,h);.    INSERT 
f460: 49 4e 54 4f 20 74 36 20 56 41 4c 55 45 53 28 31  INTO t6 VALUES(1
f470: 2c 32 2c 33 2c 34 2c 35 2c 36 2c 37 2c 38 29 3b  ,2,3,4,5,6,7,8);
f480: 0a 20 20 7d 0a 7d 20 7b 7d 0a 73 65 74 20 3a 3a  .  }.} {}.set ::
f490: 61 75 74 68 61 72 67 73 20 5b 6c 69 73 74 5d 0a  authargs [list].
f4a0: 70 72 6f 63 20 61 75 74 68 20 7b 61 72 67 73 7d  proc auth {args}
f4b0: 20 7b 0a 20 20 65 76 61 6c 20 6c 61 70 70 65 6e   {.  eval lappen
f4c0: 64 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c 72  d ::authargs [lr
f4d0: 61 6e 67 65 20 24 61 72 67 73 20 30 20 34 5d 0a  ange $args 0 4].
f4e0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
f4f0: 4f 4b 0a 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  OK.}.do_test aut
f500: 68 2d 36 2e 32 20 7b 0a 20 20 65 78 65 63 73 71  h-6.2 {.  execsq
f510: 6c 20 7b 55 50 44 41 54 45 20 74 36 20 53 45 54  l {UPDATE t6 SET
f520: 20 72 6f 77 49 44 3d 72 6f 77 49 44 2b 31 30 30   rowID=rowID+100
f530: 7d 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61 72  }.  set ::authar
f540: 67 73 0a 7d 20 5b 6c 69 73 74 20 53 51 4c 49 54  gs.} [list SQLIT
f550: 45 5f 52 45 41 44 20 20 20 74 36 20 52 4f 57 49  E_READ   t6 ROWI
f560: 44 20 6d 61 69 6e 20 7b 7d 20 5c 0a 20 20 20 20  D main {} \.    
f570: 20 20 20 20 53 51 4c 49 54 45 5f 55 50 44 41 54      SQLITE_UPDAT
f580: 45 20 74 36 20 52 4f 57 49 44 20 6d 61 69 6e 20  E t6 ROWID main 
f590: 7b 7d 20 5c 0a 5d 0a 64 6f 5f 74 65 73 74 20 61  {} \.].do_test a
f5a0: 75 74 68 2d 36 2e 33 20 7b 0a 20 20 65 78 65 63  uth-6.3 {.  exec
f5b0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 72 6f 77 69  sql {SELECT rowi
f5c0: 64 2c 20 2a 20 46 52 4f 4d 20 74 36 7d 0a 7d 20  d, * FROM t6}.} 
f5d0: 7b 31 30 31 20 31 20 32 20 33 20 34 20 35 20 36  {101 1 2 3 4 5 6
f5e0: 20 37 20 38 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d   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 0a 23 20 54 65 73 74 20 74 68 61 74 20 76 69  -.# Test that vi
f640: 65 77 20 6e 61 6d 65 73 20 61 72 65 20 69 6e 63  ew names are inc
f650: 6c 75 64 65 64 20 61 73 20 7a 41 72 67 34 2e 0a  luded as zArg4..
f660: 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  #.do_execsql_tes
f670: 74 20 61 75 74 68 2d 37 2e 31 20 7b 0a 20 20 43  t auth-7.1 {.  C
f680: 52 45 41 54 45 20 54 41 42 4c 45 20 74 37 28 61  REATE TABLE t7(a
f690: 2c 20 62 2c 20 63 29 3b 0a 20 20 43 52 45 41 54  , b, c);.  CREAT
f6a0: 45 20 56 49 45 57 20 76 37 20 41 53 20 53 45 4c  E VIEW v7 AS SEL
f6b0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 37 3b 0a 7d  ECT * FROM t7;.}
f6c0: 20 7b 7d 0a 73 65 74 20 3a 3a 61 75 74 68 61 72   {}.set ::authar
f6d0: 67 73 20 5b 6c 69 73 74 5d 0a 70 72 6f 63 20 61  gs [list].proc a
f6e0: 75 74 68 20 7b 61 72 67 73 7d 20 7b 0a 20 20 65  uth {args} {.  e
f6f0: 76 61 6c 20 6c 61 70 70 65 6e 64 20 3a 3a 61 75  val lappend ::au
f700: 74 68 61 72 67 73 20 5b 6c 72 61 6e 67 65 20 24  thargs [lrange $
f710: 61 72 67 73 20 30 20 34 5d 0a 20 20 72 65 74 75  args 0 4].  retu
f720: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 7d 0a 0a  rn SQLITE_OK.}..
f730: 64 6f 5f 74 65 73 74 20 61 75 74 68 2d 37 2e 32  do_test auth-7.2
f740: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
f750: 4c 45 43 54 20 61 2c 20 63 20 46 52 4f 4d 20 76  LECT a, c FROM v
f760: 37 7d 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61  7}.  set ::autha
f770: 72 67 73 0a 7d 20 5b 6c 69 73 74 20 20 20 20 20  rgs.} [list     
f780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f790: 20 20 20 20 20 5c 0a 20 20 53 51 4c 49 54 45 5f       \.  SQLITE_
f7a0: 53 45 4c 45 43 54 20 7b 7d 20 7b 7d 20 7b 7d 20  SELECT {} {} {} 
f7b0: 7b 7d 20 20 20 20 20 20 5c 0a 20 20 53 51 4c 49  {}      \.  SQLI
f7c0: 54 45 5f 52 45 41 44 20 74 37 20 61 20 6d 61 69  TE_READ t7 a mai
f7d0: 6e 20 76 37 20 20 20 20 20 20 20 5c 0a 20 20 53  n v7       \.  S
f7e0: 51 4c 49 54 45 5f 52 45 41 44 20 74 37 20 62 20  QLITE_READ t7 b 
f7f0: 6d 61 69 6e 20 76 37 20 20 20 20 20 20 20 5c 0a  main v7       \.
f800: 20 20 53 51 4c 49 54 45 5f 52 45 41 44 20 74 37    SQLITE_READ t7
f810: 20 63 20 6d 61 69 6e 20 76 37 20 20 20 20 20 20   c main v7      
f820: 20 5c 0a 20 20 53 51 4c 49 54 45 5f 52 45 41 44   \.  SQLITE_READ
f830: 20 76 37 20 61 20 6d 61 69 6e 20 7b 7d 20 20 20   v7 a main {}   
f840: 20 20 20 20 5c 0a 20 20 53 51 4c 49 54 45 5f 52      \.  SQLITE_R
f850: 45 41 44 20 76 37 20 63 20 6d 61 69 6e 20 7b 7d  EAD v7 c main {}
f860: 20 20 20 20 20 20 20 5c 0a 20 20 53 51 4c 49 54         \.  SQLIT
f870: 45 5f 53 45 4c 45 43 54 20 7b 7d 20 7b 7d 20 7b  E_SELECT {} {} {
f880: 7d 20 76 37 20 20 20 20 20 20 5c 0a 5d 0a 0a 73  } v7      \.]..s
f890: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 20 5b 6c  et ::authargs [l
f8a0: 69 73 74 5d 0a 64 6f 5f 74 65 73 74 20 61 75 74  ist].do_test aut
f8b0: 68 2d 37 2e 33 20 7b 0a 20 20 65 78 65 63 73 71  h-7.3 {.  execsq
f8c0: 6c 20 7b 53 45 4c 45 43 54 20 61 2c 20 63 20 46  l {SELECT a, c F
f8d0: 52 4f 4d 20 74 37 7d 0a 20 20 73 65 74 20 3a 3a  ROM t7}.  set ::
f8e0: 61 75 74 68 61 72 67 73 0a 7d 20 5b 6c 69 73 74  authargs.} [list
f8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f900: 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 53 51            \.  SQ
f910: 4c 49 54 45 5f 53 45 4c 45 43 54 20 7b 7d 20 7b  LITE_SELECT {} {
f920: 7d 20 7b 7d 20 7b 7d 20 20 20 20 20 20 5c 0a 20  } {} {}      \. 
f930: 20 53 51 4c 49 54 45 5f 52 45 41 44 20 74 37 20   SQLITE_READ t7 
f940: 61 20 6d 61 69 6e 20 7b 7d 20 20 20 20 20 20 20  a main {}       
f950: 5c 0a 20 20 53 51 4c 49 54 45 5f 52 45 41 44 20  \.  SQLITE_READ 
f960: 74 37 20 63 20 6d 61 69 6e 20 7b 7d 20 20 20 20  t7 c main {}    
f970: 20 20 20 5c 0a 5d 0a 0a 73 65 74 20 3a 3a 61 75     \.]..set ::au
f980: 74 68 61 72 67 73 20 5b 6c 69 73 74 5d 0a 64 6f  thargs [list].do
f990: 5f 74 65 73 74 20 61 75 74 68 2d 37 2e 34 20 7b  _test auth-7.4 {
f9a0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
f9b0: 43 54 20 61 2c 20 63 20 46 52 4f 4d 20 74 37 20  CT a, c FROM t7 
f9c0: 41 53 20 76 37 7d 0a 20 20 73 65 74 20 3a 3a 61  AS v7}.  set ::a
f9d0: 75 74 68 61 72 67 73 0a 7d 20 5b 6c 69 73 74 20  uthargs.} [list 
f9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f9f0: 20 20 20 20 20 20 20 20 20 5c 0a 20 20 53 51 4c           \.  SQL
fa00: 49 54 45 5f 53 45 4c 45 43 54 20 7b 7d 20 7b 7d  ITE_SELECT {} {}
fa10: 20 7b 7d 20 7b 7d 20 20 20 20 20 20 5c 0a 20 20   {} {}      \.  
fa20: 53 51 4c 49 54 45 5f 52 45 41 44 20 74 37 20 61  SQLITE_READ t7 a
fa30: 20 6d 61 69 6e 20 7b 7d 20 20 20 20 20 20 20 5c   main {}       \
fa40: 0a 20 20 53 51 4c 49 54 45 5f 52 45 41 44 20 74  .  SQLITE_READ t
fa50: 37 20 63 20 6d 61 69 6e 20 7b 7d 20 20 20 20 20  7 c main {}     
fa60: 20 20 5c 0a 5d 0a 0a 23 20 49 66 20 61 20 74 61    \.]..# If a ta
fa70: 62 6c 65 20 69 73 20 72 65 66 65 72 65 6e 63 65  ble is reference
fa80: 64 20 62 75 74 20 6e 6f 20 63 6f 6c 75 6d 6e 73  d but no columns
fa90: 20 61 72 65 20 72 65 61 64 20 66 72 6f 6d 20 74   are read from t
faa0: 68 65 20 74 61 62 6c 65 2c 0a 23 20 74 68 61 74  he table,.# that
fab0: 20 63 61 75 73 65 73 20 61 20 73 69 6e 67 6c 65   causes a single
fac0: 20 53 51 4c 49 54 45 5f 52 45 41 44 20 61 75 74   SQLITE_READ aut
fad0: 68 6f 72 69 7a 61 74 69 6f 6e 20 77 69 74 68 20  horization with 
fae0: 61 20 4e 55 4c 4c 20 63 6f 6c 75 6d 6e 0a 23 20  a NULL column.# 
faf0: 6e 61 6d 65 2e 0a 23 0a 23 20 45 56 49 44 45 4e  name..#.# EVIDEN
fb00: 43 45 2d 4f 46 3a 20 52 2d 33 31 35 32 30 2d 31  CE-OF: R-31520-1
fb10: 36 33 30 32 20 57 68 65 6e 20 61 20 74 61 62 6c  6302 When a tabl
fb20: 65 20 69 73 20 72 65 66 65 72 65 6e 63 65 64 20  e is referenced 
fb30: 62 79 20 61 20 53 45 4c 45 43 54 20 62 75 74 0a  by a SELECT but.
fb40: 23 20 6e 6f 20 63 6f 6c 75 6d 6e 20 76 61 6c 75  # no column valu
fb50: 65 73 20 61 72 65 20 65 78 74 72 61 63 74 65 64  es are extracted
fb60: 20 66 72 6f 6d 20 74 68 61 74 20 74 61 62 6c 65   from that table
fb70: 20 28 66 6f 72 20 65 78 61 6d 70 6c 65 20 69 6e   (for example in
fb80: 20 61 20 71 75 65 72 79 0a 23 20 6c 69 6b 65 20   a query.# like 
fb90: 22 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29  "SELECT count(*)
fba0: 20 46 52 4f 4d 20 74 61 62 22 29 20 74 68 65 6e   FROM tab") then
fbb0: 20 74 68 65 20 53 51 4c 49 54 45 5f 52 45 41 44   the SQLITE_READ
fbc0: 20 61 75 74 68 6f 72 69 7a 65 72 0a 23 20 63 61   authorizer.# ca
fbd0: 6c 6c 62 61 63 6b 20 69 73 20 69 6e 76 6f 6b 65  llback is invoke
fbe0: 64 20 6f 6e 63 65 20 66 6f 72 20 74 68 61 74 20  d once for that 
fbf0: 74 61 62 6c 65 20 77 69 74 68 20 61 20 63 6f 6c  table with a col
fc00: 75 6d 6e 20 6e 61 6d 65 20 74 68 61 74 20 69 73  umn name that is
fc10: 20 61 6e 0a 23 20 65 6d 70 74 79 20 73 74 72 69   an.# empty stri
fc20: 6e 67 2e 0a 23 0a 73 65 74 20 3a 3a 61 75 74 68  ng..#.set ::auth
fc30: 61 72 67 73 20 5b 6c 69 73 74 5d 0a 64 6f 5f 74  args [list].do_t
fc40: 65 73 74 20 61 75 74 68 2d 38 2e 31 20 7b 0a 20  est auth-8.1 {. 
fc50: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
fc60: 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74   count(*) FROM t
fc70: 37 7d 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 61  7}.  set ::autha
fc80: 72 67 73 0a 7d 20 5b 6c 69 73 74 20 5c 0a 20 20  rgs.} [list \.  
fc90: 53 51 4c 49 54 45 5f 53 45 4c 45 43 54 20 7b 7d  SQLITE_SELECT {}
fca0: 20 7b 7d 20 7b 7d 20 7b 7d 20 20 20 20 20 20 20   {} {} {}       
fcb0: 20 20 20 5c 0a 20 20 53 51 4c 49 54 45 5f 46 55     \.  SQLITE_FU
fcc0: 4e 43 54 49 4f 4e 20 7b 7d 20 63 6f 75 6e 74 20  NCTION {} count 
fcd0: 7b 7d 20 7b 7d 20 20 20 20 20 5c 0a 20 20 53 51  {} {}     \.  SQ
fce0: 4c 49 54 45 5f 52 45 41 44 20 74 37 20 7b 7d 20  LITE_READ t7 {} 
fcf0: 7b 7d 20 7b 7d 20 20 20 20 20 20 20 20 20 20 20  {} {}           
fd00: 20 5c 0a 20 20 5d 0a 73 65 74 20 3a 3a 61 75 74   \.  ].set ::aut
fd10: 68 61 72 67 73 20 5b 6c 69 73 74 5d 0a 0a 64 6f  hargs [list]..do
fd20: 5f 74 65 73 74 20 61 75 74 68 2d 38 2e 32 20 7b  _test auth-8.2 {
fd30: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
fd40: 43 54 20 74 36 2e 61 20 46 52 4f 4d 20 74 36 2c  CT t6.a FROM t6,
fd50: 20 74 37 7d 0a 20 20 73 65 74 20 3a 3a 61 75 74   t7}.  set ::aut
fd60: 68 61 72 67 73 0a 7d 20 5b 6c 69 73 74 20 5c 0a  hargs.} [list \.
fd70: 20 20 53 51 4c 49 54 45 5f 53 45 4c 45 43 54 20    SQLITE_SELECT 
fd80: 7b 7d 20 7b 7d 20 7b 7d 20 7b 7d 20 20 20 20 20  {} {} {} {}     
fd90: 20 20 20 20 20 5c 0a 20 20 53 51 4c 49 54 45 5f       \.  SQLITE_
fda0: 52 45 41 44 20 74 36 20 61 20 6d 61 69 6e 20 7b  READ t6 a main {
fdb0: 7d 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20  }           \.  
fdc0: 53 51 4c 49 54 45 5f 52 45 41 44 20 74 37 20 7b  SQLITE_READ t7 {
fdd0: 7d 20 7b 7d 20 7b 7d 20 20 20 20 20 20 20 20 20  } {} {}         
fde0: 20 20 20 5c 0a 20 20 5d 0a 0a 23 20 54 65 73 74     \.  ]..# Test
fdf0: 20 61 6c 73 6f 20 74 68 61 74 20 69 66 20 53 51   also that if SQ
fe00: 4c 49 54 45 5f 44 45 4e 59 20 69 73 20 72 65 74  LITE_DENY is ret
fe10: 75 72 6e 65 64 20 66 72 6f 6d 20 61 6e 20 53 51  urned from an SQ
fe20: 4c 49 54 45 5f 52 45 41 44 20 61 75 74 68 6f 72  LITE_READ author
fe30: 69 7a 65 72 20 0a 23 20 69 6e 76 6f 63 61 74 69  izer .# invocati
fe40: 6f 6e 20 77 69 74 68 20 6e 6f 20 63 6f 6c 75 6d  on with no colum
fe50: 6e 20 6e 61 6d 65 20 73 70 65 63 69 66 69 65 64  n name specified
fe60: 2c 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 66 61  , compilation fa
fe70: 69 6c 73 2e 0a 23 0a 73 65 74 20 3a 3a 61 75 74  ils..#.set ::aut
fe80: 68 61 72 67 73 20 5b 6c 69 73 74 5d 0a 70 72 6f  hargs [list].pro
fe90: 63 20 61 75 74 68 20 7b 6f 70 20 61 20 62 20 63  c auth {op a b c
fea0: 20 64 7d 20 7b 0a 20 20 6c 61 70 70 65 6e 64 20   d} {.  lappend 
feb0: 3a 3a 61 75 74 68 61 72 67 73 20 24 6f 70 20 24  ::authargs $op $
fec0: 61 20 24 62 20 24 63 20 24 64 0a 20 20 69 66 20  a $b $c $d.  if 
fed0: 7b 24 6f 70 20 3d 3d 20 22 53 51 4c 49 54 45 5f  {$op == "SQLITE_
fee0: 52 45 41 44 22 7d 20 7b 20 72 65 74 75 72 6e 20  READ"} { return 
fef0: 22 53 51 4c 49 54 45 5f 44 45 4e 59 22 20 7d 0a  "SQLITE_DENY" }.
ff00: 20 20 72 65 74 75 72 6e 20 22 53 51 4c 49 54 45    return "SQLITE
ff10: 5f 4f 4b 22 0a 7d 0a 73 65 74 20 3a 3a 61 75 74  _OK".}.set ::aut
ff20: 68 61 72 67 73 20 5b 6c 69 73 74 5d 0a 64 6f 5f  hargs [list].do_
ff30: 63 61 74 63 68 73 71 6c 5f 74 65 73 74 20 61 75  catchsql_test au
ff40: 74 68 2d 38 2e 33 20 7b 0a 20 20 53 45 4c 45 43  th-8.3 {.  SELEC
ff50: 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20  T count(*) FROM 
ff60: 74 37 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74  t7.} {1 {not aut
ff70: 68 6f 72 69 7a 65 64 7d 7d 0a 64 6f 5f 74 65 73  horized}}.do_tes
ff80: 74 20 61 75 74 68 2d 38 2e 34 20 7b 0a 20 20 73  t auth-8.4 {.  s
ff90: 65 74 20 3a 3a 61 75 74 68 61 72 67 73 0a 7d 20  et ::authargs.} 
ffa0: 5b 6c 69 73 74 20 5c 0a 20 20 53 51 4c 49 54 45  [list \.  SQLITE
ffb0: 5f 53 45 4c 45 43 54 20 7b 7d 20 7b 7d 20 7b 7d  _SELECT {} {} {}
ffc0: 20 7b 7d 20 20 20 20 20 20 20 20 20 20 5c 0a 20   {}          \. 
ffd0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 54 49 4f 4e   SQLITE_FUNCTION
ffe0: 20 7b 7d 20 63 6f 75 6e 74 20 7b 7d 20 7b 7d 20   {} count {} {} 
fff0: 20 20 20 20 5c 0a 20 20 53 51 4c 49 54 45 5f 52      \.  SQLITE_R
10000 45 41 44 20 74 37 20 7b 7d 20 7b 7d 20 7b 7d 20  EAD t7 {} {} {} 
10010 20 20 20 20 20 20 20 20 20 20 20 5c 0a 5d 0a 0a             \.]..
10020 0a 72 65 6e 61 6d 65 20 70 72 6f 63 20 7b 7d 0a  .rename proc {}.
10030 72 65 6e 61 6d 65 20 70 72 6f 63 5f 72 65 61 6c  rename proc_real
10040 20 70 72 6f 63 0a 66 69 6e 69 73 68 5f 74 65 73   proc.finish_tes
10050 74 0a                                            t.