/ Hex Artifact Content
Login

Artifact db21405b95257c24d29273b6b31d0efc59e1d337e3d5804ba2d1fd4897b1ae49:


0000: 23 20 32 30 30 38 20 4f 63 74 6f 62 65 72 20 32  # 2008 October 2
0010: 37 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f 72  7.#.# The author
0020: 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79 72   disclaims copyr
0030: 69 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f 75  ight to this sou
0040: 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c  rce code.  In pl
0050: 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c  ace of.# a legal
0060: 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20 69 73   notice, here is
0070: 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23   a blessing:.#.#
0080: 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f 20 67      May you do g
0090: 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c  ood and not evil
00a0: 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 66  ..#    May you f
00b0: 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73 73 20  ind forgiveness 
00c0: 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61 6e 64  for yourself and
00d0: 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72 73 2e   forgive others.
00e0: 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 73 68  .#    May you sh
00f0: 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65 76 65  are freely, neve
0100: 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68  r taking more th
0110: 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23  an 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 2a 2a 2a 0a 23 0a 23 20 54 65 73 74  *******.#.# Test
0170: 20 74 68 61 74 20 74 68 65 20 74 72 75 6e 63 61   that the trunca
0180: 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20  te optimization 
0190: 69 73 20 64 69 73 61 62 6c 65 64 20 69 66 20 74  is disabled if t
01a0: 68 65 20 53 51 4c 49 54 45 5f 44 45 4c 45 54 45  he SQLITE_DELETE
01b0: 0a 23 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e  .# authorization
01c0: 20 63 61 6c 6c 62 61 63 6b 20 72 65 74 75 72 6e   callback return
01d0: 73 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 2e  s SQLITE_IGNORE.
01e0: 0a 23 0a 23 20 54 65 73 74 20 74 68 61 74 20 61  .#.# Test that a
01f0: 75 74 68 6f 72 69 7a 65 72 20 69 73 20 64 69 73  uthorizer is dis
0200: 61 62 6c 65 64 20 64 75 72 69 6e 67 20 73 63 68  abled during sch
0210: 65 6d 61 20 70 61 72 73 69 6e 67 2e 0a 0a 73 65  ema parsing...se
0220: 74 20 74 65 73 74 64 69 72 20 5b 66 69 6c 65 20  t testdir [file 
0230: 64 69 72 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a  dirname $argv0].
0240: 73 6f 75 72 63 65 20 24 74 65 73 74 64 69 72 2f  source $testdir/
0250: 74 65 73 74 65 72 2e 74 63 6c 0a 0a 23 20 64 69  tester.tcl..# di
0260: 73 61 62 6c 65 20 74 68 69 73 20 74 65 73 74 20  sable this test 
0270: 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4f 4d  if the SQLITE_OM
0280: 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e  IT_AUTHORIZATION
0290: 20 6d 61 63 72 6f 20 69 73 0a 23 20 64 65 66 69   macro is.# defi
02a0: 6e 65 64 20 64 75 72 69 6e 67 20 63 6f 6d 70 69  ned during compi
02b0: 6c 61 74 69 6f 6e 2e 0a 69 66 20 7b 5b 63 61 74  lation..if {[cat
02c0: 63 68 20 7b 64 62 20 61 75 74 68 20 7b 7d 7d 20  ch {db auth {}} 
02d0: 6d 73 67 5d 7d 20 7b 0a 20 20 66 69 6e 69 73 68  msg]} {.  finish
02e0: 5f 74 65 73 74 0a 20 20 72 65 74 75 72 6e 0a 7d  _test.  return.}
02f0: 0a 0a 23 20 44 69 73 61 62 6c 65 20 74 68 65 20  ..# Disable the 
0300: 73 74 61 74 65 6d 65 6e 74 20 63 61 63 68 65 20  statement cache 
0310: 66 6f 72 20 74 68 65 73 65 20 74 65 73 74 73 2e  for these tests.
0320: 0a 23 20 0a 64 62 20 63 61 63 68 65 20 73 69 7a  .# .db cache siz
0330: 65 20 30 0a 0a 64 62 20 61 75 74 68 6f 72 69 7a  e 0..db authoriz
0340: 65 72 20 3a 3a 61 75 74 68 0a 70 72 6f 63 20 61  er ::auth.proc a
0350: 75 74 68 20 7b 63 6f 64 65 20 61 72 67 31 20 61  uth {code arg1 a
0360: 72 67 32 20 61 72 67 33 20 61 72 67 34 20 61 72  rg2 arg3 arg4 ar
0370: 67 73 7d 20 7b 0a 20 20 69 66 20 7b 24 63 6f 64  gs} {.  if {$cod
0380: 65 3d 3d 22 53 51 4c 49 54 45 5f 44 45 4c 45 54  e=="SQLITE_DELET
0390: 45 22 7d 20 7b 0a 20 20 20 20 72 65 74 75 72 6e  E"} {.    return
03a0: 20 24 3a 3a 61 75 74 68 63 6f 64 65 0a 20 20 7d   $::authcode.  }
03b0: 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  .  return SQLITE
03c0: 5f 4f 4b 0a 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d  _OK.}..#--------
03d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
03e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
03f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0400: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0410: 2d 2d 0a 23 20 54 68 65 20 66 6f 6c 6c 6f 77 69  --.# The followi
0420: 6e 67 20 74 65 73 74 73 20 2d 20 61 75 74 68 33  ng tests - auth3
0430: 2d 31 2e 2a 20 2d 20 74 65 73 74 20 74 68 61 74  -1.* - test that
0440: 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20 6f   return values o
0450: 66 20 53 51 4c 49 54 45 5f 44 45 4e 59 2c 0a 23  f SQLITE_DENY,.#
0460: 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 2c 20   SQLITE_IGNORE, 
0470: 53 51 4c 49 54 45 5f 4f 4b 20 61 6e 64 20 3c 69  SQLITE_OK and <i
0480: 6e 76 61 6c 69 64 3e 20 61 72 65 20 63 6f 72 72  nvalid> are corr
0490: 65 63 74 6c 79 20 68 61 6e 64 6c 65 64 20 77 68  ectly handled wh
04a0: 65 6e 20 72 65 74 75 72 6e 65 64 0a 23 20 62 79  en returned.# by
04b0: 20 61 6e 20 53 51 4c 49 54 45 5f 44 45 4c 45 54   an SQLITE_DELET
04c0: 45 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20  E authorization 
04d0: 63 61 6c 6c 62 61 63 6b 20 74 72 69 67 67 65 72  callback trigger
04e0: 65 64 20 62 79 20 61 20 0a 23 20 22 44 45 4c 45  ed by a .# "DELE
04f0: 54 45 20 46 52 4f 4d 20 3c 74 61 62 6c 65 2d 6e  TE FROM <table-n
0500: 61 6d 65 3e 22 20 73 74 61 74 65 6d 65 6e 74 2e  ame>" statement.
0510: 0a 23 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 33  .#.do_test auth3
0520: 2d 31 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  -1.1 {.  execsql
0530: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41   {.    CREATE TA
0540: 42 4c 45 20 74 31 28 61 2c 62 2c 63 29 3b 0a 20  BLE t1(a,b,c);. 
0550: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
0560: 31 20 56 41 4c 55 45 53 28 31 2c 20 32 2c 20 33  1 VALUES(1, 2, 3
0570: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
0580: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 34 2c 20  TO t1 VALUES(4, 
0590: 35 2c 20 36 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a  5, 6);.  }.} {}.
05a0: 64 6f 5f 74 65 73 74 20 61 75 74 68 33 2e 31 2e  do_test auth3.1.
05b0: 32 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68  2 {.  set ::auth
05c0: 63 6f 64 65 20 53 51 4c 49 54 45 5f 44 45 4e 59  code SQLITE_DENY
05d0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 20 44 45  .  catchsql { DE
05e0: 4c 45 54 45 20 46 52 4f 4d 20 74 31 20 7d 0a 7d  LETE FROM t1 }.}
05f0: 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68 6f 72 69   {1 {not authori
0600: 7a 65 64 7d 7d 0a 23 20 45 56 49 44 45 4e 43 45  zed}}.# EVIDENCE
0610: 2d 4f 46 3a 20 52 2d 36 34 39 36 32 2d 35 38 36  -OF: R-64962-586
0620: 31 31 20 49 66 20 74 68 65 20 61 75 74 68 6f 72  11 If the author
0630: 69 7a 65 72 20 63 61 6c 6c 62 61 63 6b 20 72 65  izer callback re
0640: 74 75 72 6e 73 20 61 6e 79 0a 23 20 76 61 6c 75  turns any.# valu
0650: 65 20 6f 74 68 65 72 20 74 68 61 6e 20 53 51 4c  e other than SQL
0660: 49 54 45 5f 49 47 4e 4f 52 45 2c 20 53 51 4c 49  ITE_IGNORE, SQLI
0670: 54 45 5f 4f 4b 2c 20 6f 72 20 53 51 4c 49 54 45  TE_OK, or SQLITE
0680: 5f 44 45 4e 59 20 74 68 65 6e 20 74 68 65 0a 23  _DENY then the.#
0690: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
06a0: 5f 76 32 28 29 20 6f 72 20 65 71 75 69 76 61 6c  _v2() or equival
06b0: 65 6e 74 20 63 61 6c 6c 20 74 68 61 74 20 74 72  ent call that tr
06c0: 69 67 67 65 72 65 64 20 74 68 65 20 61 75 74 68  iggered the auth
06d0: 6f 72 69 7a 65 72 0a 23 20 77 69 6c 6c 20 66 61  orizer.# will fa
06e0: 69 6c 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72  il with an error
06f0: 20 6d 65 73 73 61 67 65 2e 0a 64 6f 5f 74 65 73   message..do_tes
0700: 74 20 61 75 74 68 33 2e 31 2e 33 20 7b 0a 20 20  t auth3.1.3 {.  
0710: 73 65 74 20 3a 3a 61 75 74 68 63 6f 64 65 20 53  set ::authcode S
0720: 51 4c 49 54 45 5f 49 4e 56 41 4c 49 44 0a 20 20  QLITE_INVALID.  
0730: 63 61 74 63 68 73 71 6c 20 7b 20 44 45 4c 45 54  catchsql { DELET
0740: 45 20 46 52 4f 4d 20 74 31 20 7d 0a 7d 20 7b 31  E FROM t1 }.} {1
0750: 20 7b 61 75 74 68 6f 72 69 7a 65 72 20 6d 61 6c   {authorizer mal
0760: 66 75 6e 63 74 69 6f 6e 7d 7d 0a 64 6f 5f 74 65  function}}.do_te
0770: 73 74 20 61 75 74 68 33 2e 31 2e 34 20 7b 0a 20  st auth3.1.4 {. 
0780: 20 65 78 65 63 73 71 6c 20 7b 20 53 45 4c 45 43   execsql { SELEC
0790: 54 20 2a 20 46 52 4f 4d 20 74 31 20 7d 0a 7d 20  T * FROM t1 }.} 
07a0: 7b 31 20 32 20 33 20 34 20 35 20 36 7d 0a 64 6f  {1 2 3 4 5 6}.do
07b0: 5f 74 65 73 74 20 61 75 74 68 33 2d 31 2e 35 20  _test auth3-1.5 
07c0: 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 63 6f  {.  set ::authco
07d0: 64 65 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45  de SQLITE_IGNORE
07e0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 0a 20 20  .  execsql { .  
07f0: 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31    DELETE FROM t1
0800: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ;.    SELECT * F
0810: 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 7d  ROM t1;.  }.} {}
0820: 0a 64 6f 5f 74 65 73 74 20 61 75 74 68 33 2d 31  .do_test auth3-1
0830: 2e 36 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74  .6 {.  set ::aut
0840: 68 63 6f 64 65 20 53 51 4c 49 54 45 5f 4f 4b 0a  hcode SQLITE_OK.
0850: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
0860: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
0870: 41 4c 55 45 53 28 31 2c 20 32 2c 20 33 29 3b 0a  ALUES(1, 2, 3);.
0880: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
0890: 74 31 20 56 41 4c 55 45 53 28 34 2c 20 35 2c 20  t1 VALUES(4, 5, 
08a0: 36 29 3b 0a 20 20 20 20 44 45 4c 45 54 45 20 46  6);.    DELETE F
08b0: 52 4f 4d 20 74 31 3b 0a 20 20 20 20 53 45 4c 45  ROM t1;.    SELE
08c0: 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20  CT * FROM t1;.  
08d0: 7d 0a 7d 20 7b 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d  }.} {}..#-------
08e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
08f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0900: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0910: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0920: 2d 2d 2d 0a 23 20 54 68 65 73 65 20 74 65 73 74  ---.# These test
0930: 73 20 2d 20 61 75 74 68 33 2d 32 2e 2a 20 2d 20  s - auth3-2.* - 
0940: 74 65 73 74 20 74 68 61 74 20 72 65 74 75 72 6e  test that return
0950: 69 6e 67 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52  ing SQLITE_IGNOR
0960: 45 20 72 65 61 6c 6c 79 20 64 6f 65 73 0a 23 20  E really does.# 
0970: 64 69 73 61 62 6c 65 20 74 68 65 20 74 72 75 6e  disable the trun
0980: 63 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f  cate optimizatio
0990: 6e 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 61 75 74  n..#.do_test aut
09a0: 68 33 2d 32 2e 31 20 7b 0a 20 20 73 65 74 20 3a  h3-2.1 {.  set :
09b0: 3a 61 75 74 68 63 6f 64 65 20 53 51 4c 49 54 45  :authcode SQLITE
09c0: 5f 4f 4b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  _OK.  execsql {.
09d0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
09e0: 74 31 20 56 41 4c 55 45 53 28 31 2c 20 32 2c 20  t1 VALUES(1, 2, 
09f0: 33 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  3);.    INSERT I
0a00: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 34 2c  NTO t1 VALUES(4,
0a10: 20 35 2c 20 36 29 3b 0a 20 20 7d 0a 20 20 73 65   5, 6);.  }.  se
0a20: 74 20 73 71 6c 69 74 65 5f 73 65 61 72 63 68 5f  t sqlite_search_
0a30: 63 6f 75 6e 74 20 30 0a 20 20 65 78 65 63 73 71  count 0.  execsq
0a40: 6c 20 7b 0a 20 20 20 20 44 45 4c 45 54 45 20 46  l {.    DELETE F
0a50: 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 20 20 73 65  ROM t1;.  }.  se
0a60: 74 20 73 71 6c 69 74 65 5f 73 65 61 72 63 68 5f  t sqlite_search_
0a70: 63 6f 75 6e 74 0a 7d 20 7b 30 7d 0a 0a 64 6f 5f  count.} {0}..do_
0a80: 74 65 73 74 20 61 75 74 68 33 2d 32 2e 32 20 7b  test auth3-2.2 {
0a90: 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 63 6f 64  .  set ::authcod
0aa0: 65 20 53 51 4c 49 54 45 5f 49 47 4e 4f 52 45 0a  e SQLITE_IGNORE.
0ab0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
0ac0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
0ad0: 41 4c 55 45 53 28 31 2c 20 32 2c 20 33 29 3b 0a  ALUES(1, 2, 3);.
0ae0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
0af0: 74 31 20 56 41 4c 55 45 53 28 34 2c 20 35 2c 20  t1 VALUES(4, 5, 
0b00: 36 29 3b 0a 20 20 7d 0a 20 20 73 65 74 20 73 71  6);.  }.  set sq
0b10: 6c 69 74 65 5f 73 65 61 72 63 68 5f 63 6f 75 6e  lite_search_coun
0b20: 74 20 30 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  t 0.  execsql {.
0b30: 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20      DELETE FROM 
0b40: 74 31 3b 0a 20 20 7d 0a 20 20 73 65 74 20 73 71  t1;.  }.  set sq
0b50: 6c 69 74 65 5f 73 65 61 72 63 68 5f 63 6f 75 6e  lite_search_coun
0b60: 74 0a 7d 20 7b 31 7d 0a 0a 23 20 32 30 31 36 2d  t.} {1}..# 2016-
0b70: 30 37 2d 32 38 2e 20 20 41 20 70 72 6f 62 6c 65  07-28.  A proble
0b80: 6d 20 72 65 70 6f 72 74 20 66 72 6f 6d 20 61 20  m report from a 
0b90: 70 72 69 76 61 74 65 20 63 6c 69 65 6e 74 20 63  private client c
0ba0: 6f 6d 70 6c 61 69 6e 69 6e 67 20 61 62 6f 75 74  omplaining about
0bb0: 0a 23 20 61 6e 20 61 75 74 68 6f 72 69 7a 65 72  .# an authorizer
0bc0: 20 66 61 69 6c 75 72 65 20 64 75 72 69 6e 67 20   failure during 
0bd0: 61 6e 20 41 4c 54 45 52 20 54 41 42 4c 45 2e 20  an ALTER TABLE. 
0be0: 20 54 68 65 20 73 6f 6c 75 74 69 6f 6e 20 28 49   The solution (I
0bf0: 20 74 68 69 6e 6b 29 20 69 73 0a 23 20 74 6f 20   think) is.# to 
0c00: 64 69 73 61 62 6c 65 20 74 68 65 20 61 75 74 68  disable the auth
0c10: 6f 72 69 7a 65 72 20 64 75 72 69 6e 67 20 73 63  orizer during sc
0c20: 68 65 6d 61 20 70 61 72 73 69 6e 67 2e 0a 23 0a  hema parsing..#.
0c30: 70 72 6f 63 20 61 75 74 68 20 7b 63 6f 64 65 20  proc auth {code 
0c40: 61 72 67 73 7d 20 7b 0a 20 20 69 66 20 7b 24 63  args} {.  if {$c
0c50: 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 52 45 41  ode=="SQLITE_REA
0c60: 44 22 20 26 26 20 5b 72 65 67 65 78 70 20 7b 44  D" && [regexp {D
0c70: 6f 4e 6f 74 52 65 61 64 7d 20 24 61 72 67 73 5d  oNotRead} $args]
0c80: 7d 20 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53  } {.    return S
0c90: 51 4c 49 54 45 5f 44 45 4e 59 0a 20 20 7d 0a 20  QLITE_DENY.  }. 
0ca0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
0cb0: 4b 0a 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  K.}.do_execsql_t
0cc0: 65 73 74 20 61 75 74 68 33 2d 33 2e 30 20 7b 0a  est auth3-3.0 {.
0cd0: 20 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41    CREATE TEMPORA
0ce0: 52 59 20 54 41 42 4c 45 20 54 65 6d 70 54 61 62  RY TABLE TempTab
0cf0: 6c 65 20 28 0a 20 20 20 20 20 20 6b 65 79 20 54  le (.      key T
0d00: 45 58 54 20 4e 4f 54 20 4e 55 4c 4c 20 4f 4e 20  EXT NOT NULL ON 
0d10: 43 4f 4e 46 4c 49 43 54 20 46 41 49 4c 20 55 4e  CONFLICT FAIL UN
0d20: 49 51 55 45 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  IQUE ON CONFLICT
0d30: 20 52 45 50 4c 41 43 45 2c 0a 20 20 20 20 20 20   REPLACE,.      
0d40: 76 61 6c 75 65 20 54 45 58 54 20 4e 4f 54 20 4e  value TEXT NOT N
0d50: 55 4c 4c 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  ULL ON CONFLICT 
0d60: 46 41 49 4c 29 3b 0a 20 20 41 4c 54 45 52 20 54  FAIL);.  ALTER T
0d70: 41 42 4c 45 20 54 65 6d 70 54 61 62 6c 65 20 52  ABLE TempTable R
0d80: 45 4e 41 4d 45 20 54 4f 20 44 6f 4e 6f 74 52 65  ENAME TO DoNotRe
0d90: 61 64 3b 0a 20 20 53 45 4c 45 43 54 20 6e 61 6d  ad;.  SELECT nam
0da0: 65 20 46 52 4f 4d 20 74 65 6d 70 2e 73 71 6c 69  e FROM temp.sqli
0db0: 74 65 5f 6d 61 73 74 65 72 3b 0a 7d 20 7b 44 6f  te_master;.} {Do
0dc0: 4e 6f 74 52 65 61 64 20 73 71 6c 69 74 65 5f 61  NotRead sqlite_a
0dd0: 75 74 6f 69 6e 64 65 78 5f 44 6f 4e 6f 74 52 65  utoindex_DoNotRe
0de0: 61 64 5f 31 7d 0a 0a 66 69 6e 69 73 68 5f 74 65  ad_1}..finish_te
0df0: 73 74 0a                                         st.