/ Hex Artifact Content
Login

Artifact 9ed7ec0288f887e132de66d90c428ad109105f67:


0000: 23 20 32 30 30 31 20 4f 63 74 6f 62 65 72 20 37  # 2001 October 7
0010: 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f 72 20  .#.# The author 
0020: 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79 72 69  disclaims copyri
0030: 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f 75 72  ght to this sour
0040: 63 65 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c 61  ce code.  In pla
0050: 63 65 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c 20  ce of.# a legal 
0060: 6e 6f 74 69 63 65 2c 20 68 65 72 65 20 69 73 20  notice, here is 
0070: 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23 20  a blessing:.#.# 
0080: 20 20 20 4d 61 79 20 79 6f 75 20 64 6f 20 67 6f     May you do go
0090: 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c 2e  od and not evil.
00a0: 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 66 69  .#    May you fi
00b0: 6e 64 20 66 6f 72 67 69 76 65 6e 65 73 73 20 66  nd forgiveness f
00c0: 6f 72 20 79 6f 75 72 73 65 6c 66 20 61 6e 64 20  or yourself and 
00d0: 66 6f 72 67 69 76 65 20 6f 74 68 65 72 73 2e 0a  forgive others..
00e0: 23 20 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61  #    May you sha
00f0: 72 65 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72  re freely, never
0100: 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61   taking more tha
0110: 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23 2a  n 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 0a 23 20 54 68 69 73 20 66 69  ******.# This fi
0170: 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 72 65  le implements re
0180: 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73 20 66  gression tests f
0190: 6f 72 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72  or SQLite librar
01a0: 79 2e 0a 23 0a 23 20 54 68 69 73 20 66 69 6c 65  y..#.# This file
01b0: 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 65 73 74   implements test
01c0: 73 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20  s for temporary 
01d0: 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63  tables and indic
01e0: 65 73 2e 0a 23 0a 23 20 24 49 64 3a 20 74 65 6d  es..#.# $Id: tem
01f0: 70 74 61 62 6c 65 2e 74 65 73 74 2c 76 20 31 2e  ptable.test,v 1.
0200: 37 20 32 30 30 32 2f 30 36 2f 32 35 20 30 31 3a  7 2002/06/25 01:
0210: 30 39 3a 31 32 20 64 72 68 20 45 78 70 20 24 0a  09:12 drh Exp $.
0220: 0a 73 65 74 20 74 65 73 74 64 69 72 20 5b 66 69  .set testdir [fi
0230: 6c 65 20 64 69 72 6e 61 6d 65 20 24 61 72 67 76  le dirname $argv
0240: 30 5d 0a 73 6f 75 72 63 65 20 24 74 65 73 74 64  0].source $testd
0250: 69 72 2f 74 65 73 74 65 72 2e 74 63 6c 0a 0a 23  ir/tester.tcl..#
0260: 20 43 72 65 61 74 65 20 61 6e 20 61 6c 74 65 72   Create an alter
0270: 6e 61 74 69 76 65 20 63 6f 6e 6e 65 63 74 69 6f  native connectio
0280: 6e 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  n to the databas
0290: 65 0a 23 0a 64 6f 5f 74 65 73 74 20 74 65 6d 70  e.#.do_test temp
02a0: 74 61 62 6c 65 2d 31 2e 30 20 7b 0a 20 20 73 71  table-1.0 {.  sq
02b0: 6c 69 74 65 20 64 62 32 20 2e 2f 74 65 73 74 2e  lite db2 ./test.
02c0: 64 62 0a 20 20 73 65 74 20 64 75 6d 6d 79 20 7b  db.  set dummy {
02d0: 7d 0a 7d 20 7b 7d 0a 0a 23 20 43 72 65 61 74 65  }.} {}..# Create
02e0: 20 61 20 70 65 72 6d 61 6e 65 6e 74 20 74 61 62   a permanent tab
02f0: 6c 65 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 74 65  le..#.do_test te
0300: 6d 70 74 61 62 6c 65 2d 31 2e 31 20 7b 0a 20 20  mptable-1.1 {.  
0310: 65 78 65 63 73 71 6c 20 7b 43 52 45 41 54 45 20  execsql {CREATE 
0320: 54 41 42 4c 45 20 74 31 28 61 2c 62 2c 63 29 3b  TABLE t1(a,b,c);
0330: 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 49 4e 53  }.  execsql {INS
0340: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
0350: 45 53 28 31 2c 32 2c 33 29 3b 7d 0a 20 20 65 78  ES(1,2,3);}.  ex
0360: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20  ecsql {SELECT * 
0370: 46 52 4f 4d 20 74 31 7d 0a 7d 20 7b 31 20 32 20  FROM t1}.} {1 2 
0380: 33 7d 0a 64 6f 5f 74 65 73 74 20 74 65 6d 70 74  3}.do_test tempt
0390: 61 62 6c 65 2d 31 2e 32 20 7b 0a 20 20 63 61 74  able-1.2 {.  cat
03a0: 63 68 20 7b 64 62 32 20 65 76 61 6c 20 7b 53 45  ch {db2 eval {SE
03b0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69  LECT * FROM sqli
03c0: 74 65 5f 6d 61 73 74 65 72 7d 7d 0a 20 20 64 62  te_master}}.  db
03d0: 32 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 2a  2 eval {SELECT *
03e0: 20 46 52 4f 4d 20 74 31 7d 0a 7d 20 7b 31 20 32   FROM t1}.} {1 2
03f0: 20 33 7d 0a 64 6f 5f 74 65 73 74 20 74 65 6d 70   3}.do_test temp
0400: 74 61 62 6c 65 2d 31 2e 33 20 7b 0a 20 20 65 78  table-1.3 {.  ex
0410: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61  ecsql {SELECT na
0420: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  me FROM sqlite_m
0430: 61 73 74 65 72 7d 0a 7d 20 7b 74 31 7d 0a 64 6f  aster}.} {t1}.do
0440: 5f 74 65 73 74 20 74 65 6d 70 74 61 62 6c 65 2d  _test temptable-
0450: 31 2e 34 20 7b 0a 20 20 64 62 32 20 65 76 61 6c  1.4 {.  db2 eval
0460: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
0470: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
0480: 7d 0a 7d 20 7b 74 31 7d 0a 0a 23 20 43 72 65 61  }.} {t1}..# Crea
0490: 74 65 20 61 20 74 65 6d 70 6f 72 61 72 79 20 74  te a temporary t
04a0: 61 62 6c 65 2e 20 20 56 65 72 69 66 79 20 74 68  able.  Verify th
04b0: 61 74 20 6f 6e 6c 79 20 6f 6e 65 20 6f 66 20 74  at only one of t
04c0: 68 65 20 74 77 6f 0a 23 20 70 72 6f 63 65 73 73  he two.# process
04d0: 65 73 20 63 61 6e 20 73 65 65 20 69 74 2e 0a 23  es can see it..#
04e0: 0a 64 6f 5f 74 65 73 74 20 74 65 6d 70 74 61 62  .do_test temptab
04f0: 6c 65 2d 31 2e 35 20 7b 0a 20 20 64 62 32 20 65  le-1.5 {.  db2 e
0500: 76 61 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  val {.    CREATE
0510: 20 54 45 4d 50 20 54 41 42 4c 45 20 74 32 28 78   TEMP TABLE t2(x
0520: 2c 79 2c 7a 29 3b 0a 20 20 20 20 49 4e 53 45 52  ,y,z);.    INSER
0530: 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53  T INTO t2 VALUES
0540: 28 34 2c 35 2c 36 29 3b 0a 20 20 7d 0a 20 20 64  (4,5,6);.  }.  d
0550: 62 32 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20  b2 eval {SELECT 
0560: 2a 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 34 20  * FROM t2}.} {4 
0570: 35 20 36 7d 0a 64 6f 5f 74 65 73 74 20 74 65 6d  5 6}.do_test tem
0580: 70 74 61 62 6c 65 2d 31 2e 36 20 7b 0a 20 20 63  ptable-1.6 {.  c
0590: 61 74 63 68 20 7b 65 78 65 63 73 71 6c 20 7b 53  atch {execsql {S
05a0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c  ELECT * FROM sql
05b0: 69 74 65 5f 6d 61 73 74 65 72 7d 7d 0a 20 20 63  ite_master}}.  c
05c0: 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20  atchsql {SELECT 
05d0: 2a 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 31 20  * FROM t2}.} {1 
05e0: 7b 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20  {no such table: 
05f0: 74 32 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 65 6d  t2}}.do_test tem
0600: 70 74 61 62 6c 65 2d 31 2e 37 20 7b 0a 20 20 63  ptable-1.7 {.  c
0610: 61 74 63 68 73 71 6c 20 7b 49 4e 53 45 52 54 20  atchsql {INSERT 
0620: 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 38  INTO t2 VALUES(8
0630: 2c 39 2c 30 29 3b 7d 0a 7d 20 7b 31 20 7b 6e 6f  ,9,0);}.} {1 {no
0640: 20 73 75 63 68 20 74 61 62 6c 65 3a 20 74 32 7d   such table: t2}
0650: 7d 0a 64 6f 5f 74 65 73 74 20 74 65 6d 70 74 61  }.do_test tempta
0660: 62 6c 65 2d 31 2e 38 20 7b 0a 20 20 64 62 32 20  ble-1.8 {.  db2 
0670: 65 76 61 6c 20 7b 49 4e 53 45 52 54 20 49 4e 54  eval {INSERT INT
0680: 4f 20 74 32 20 56 41 4c 55 45 53 28 38 2c 39 2c  O t2 VALUES(8,9,
0690: 30 29 3b 7d 0a 20 20 64 62 32 20 65 76 61 6c 20  0);}.  db2 eval 
06a0: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
06b0: 32 20 4f 52 44 45 52 20 42 59 20 78 7d 0a 7d 20  2 ORDER BY x}.} 
06c0: 7b 34 20 35 20 36 20 38 20 39 20 30 7d 0a 64 6f  {4 5 6 8 9 0}.do
06d0: 5f 74 65 73 74 20 74 65 6d 70 74 61 62 6c 65 2d  _test temptable-
06e0: 31 2e 39 20 7b 0a 20 20 64 62 32 20 65 76 61 6c  1.9 {.  db2 eval
06f0: 20 7b 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 32   {DELETE FROM t2
0700: 20 57 48 45 52 45 20 78 3d 3d 38 7d 0a 20 20 64   WHERE x==8}.  d
0710: 62 32 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20  b2 eval {SELECT 
0720: 2a 20 46 52 4f 4d 20 74 32 20 4f 52 44 45 52 20  * FROM t2 ORDER 
0730: 42 59 20 78 7d 0a 7d 20 7b 34 20 35 20 36 7d 0a  BY x}.} {4 5 6}.
0740: 64 6f 5f 74 65 73 74 20 74 65 6d 70 74 61 62 6c  do_test temptabl
0750: 65 2d 31 2e 31 30 20 7b 0a 20 20 64 62 32 20 65  e-1.10 {.  db2 e
0760: 76 61 6c 20 7b 44 45 4c 45 54 45 20 46 52 4f 4d  val {DELETE FROM
0770: 20 74 32 7d 0a 20 20 64 62 32 20 65 76 61 6c 20   t2}.  db2 eval 
0780: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
0790: 32 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20  2}.} {}.do_test 
07a0: 74 65 6d 70 74 61 62 6c 65 2d 31 2e 31 31 20 7b  temptable-1.11 {
07b0: 0a 20 20 64 62 32 20 65 76 61 6c 20 7b 0a 20 20  .  db2 eval {.  
07c0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
07d0: 32 20 56 41 4c 55 45 53 28 37 2c 36 2c 35 29 3b  2 VALUES(7,6,5);
07e0: 0a 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  .     INSERT INT
07f0: 4f 20 74 32 20 56 41 4c 55 45 53 28 34 2c 33 2c  O t2 VALUES(4,3,
0800: 32 29 3b 0a 20 20 20 20 20 53 45 4c 45 43 54 20  2);.     SELECT 
0810: 2a 20 46 52 4f 4d 20 74 32 20 4f 52 44 45 52 20  * FROM t2 ORDER 
0820: 42 59 20 78 3b 0a 20 20 7d 0a 7d 20 7b 34 20 33  BY x;.  }.} {4 3
0830: 20 32 20 37 20 36 20 35 7d 0a 64 6f 5f 74 65 73   2 7 6 5}.do_tes
0840: 74 20 74 65 6d 70 74 61 62 6c 65 2d 31 2e 31 32  t temptable-1.12
0850: 20 7b 0a 20 20 64 62 32 20 65 76 61 6c 20 7b 44   {.  db2 eval {D
0860: 52 4f 50 20 54 41 42 4c 45 20 74 32 3b 7d 0a 20  ROP TABLE t2;}. 
0870: 20 73 65 74 20 72 20 5b 63 61 74 63 68 20 7b 64   set r [catch {d
0880: 62 32 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20  b2 eval {SELECT 
0890: 2a 20 46 52 4f 4d 20 74 32 7d 7d 20 6d 73 67 5d  * FROM t2}} msg]
08a0: 0a 20 20 6c 61 70 70 65 6e 64 20 72 20 24 6d 73  .  lappend r $ms
08b0: 67 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20  g.} {1 {no such 
08c0: 74 61 62 6c 65 3a 20 74 32 7d 7d 0a 0a 23 20 4d  table: t2}}..# M
08d0: 61 6b 65 20 73 75 72 65 20 74 65 6d 70 6f 72 61  ake sure tempora
08e0: 72 79 20 74 61 62 6c 65 73 20 77 6f 72 6b 20 77  ry tables work w
08f0: 69 74 68 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  ith transactions
0900: 0a 23 0a 64 6f 5f 74 65 73 74 20 74 65 6d 70 74  .#.do_test tempt
0910: 61 62 6c 65 2d 32 2e 31 20 7b 0a 20 20 65 78 65  able-2.1 {.  exe
0920: 63 73 71 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e  csql {.    BEGIN
0930: 20 54 52 41 4e 53 41 43 54 49 4f 4e 3b 0a 20 20   TRANSACTION;.  
0940: 20 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41    CREATE TEMPORA
0950: 52 59 20 54 41 42 4c 45 20 74 32 28 78 2c 79 29  RY TABLE t2(x,y)
0960: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
0970: 4f 20 74 32 20 56 41 4c 55 45 53 28 31 2c 32 29  O t2 VALUES(1,2)
0980: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ;.    SELECT * F
0990: 52 4f 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b 31  ROM t2;.  }.} {1
09a0: 20 32 7d 0a 64 6f 5f 74 65 73 74 20 74 65 6d 70   2}.do_test temp
09b0: 74 61 62 6c 65 2d 32 2e 32 20 7b 0a 20 20 65 78  table-2.2 {.  ex
09c0: 65 63 73 71 6c 20 7b 52 4f 4c 4c 42 41 43 4b 7d  ecsql {ROLLBACK}
09d0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 53 45 4c  .  catchsql {SEL
09e0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d 0a 7d  ECT * FROM t2}.}
09f0: 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20 74 61 62   {1 {no such tab
0a00: 6c 65 3a 20 74 32 7d 7d 0a 64 6f 5f 74 65 73 74  le: t2}}.do_test
0a10: 20 74 65 6d 70 74 61 62 6c 65 2d 32 2e 33 20 7b   temptable-2.3 {
0a20: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
0a30: 20 42 45 47 49 4e 20 54 52 41 4e 53 41 43 54 49   BEGIN TRANSACTI
0a40: 4f 4e 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54  ON;.    CREATE T
0a50: 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 20 74  EMPORARY TABLE t
0a60: 32 28 78 2c 79 29 3b 0a 20 20 20 20 49 4e 53 45  2(x,y);.    INSE
0a70: 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45  RT INTO t2 VALUE
0a80: 53 28 31 2c 32 29 3b 0a 20 20 20 20 53 45 4c 45  S(1,2);.    SELE
0a90: 43 54 20 2a 20 46 52 4f 4d 20 74 32 3b 0a 20 20  CT * FROM t2;.  
0aa0: 7d 0a 7d 20 7b 31 20 32 7d 0a 64 6f 5f 74 65 73  }.} {1 2}.do_tes
0ab0: 74 20 74 65 6d 70 74 61 62 6c 65 2d 32 2e 34 20  t temptable-2.4 
0ac0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 43 4f 4d  {.  execsql {COM
0ad0: 4d 49 54 7d 0a 20 20 63 61 74 63 68 73 71 6c 20  MIT}.  catchsql 
0ae0: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
0af0: 32 7d 0a 7d 20 7b 30 20 7b 31 20 32 7d 7d 0a 64  2}.} {0 {1 2}}.d
0b00: 6f 5f 74 65 73 74 20 74 65 6d 70 74 61 62 6c 65  o_test temptable
0b10: 2d 32 2e 35 20 7b 0a 20 20 73 65 74 20 72 20 5b  -2.5 {.  set r [
0b20: 63 61 74 63 68 20 7b 64 62 32 20 65 76 61 6c 20  catch {db2 eval 
0b30: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
0b40: 32 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65  2}} msg].  lappe
0b50: 6e 64 20 72 20 24 6d 73 67 0a 7d 20 7b 31 20 7b  nd r $msg.} {1 {
0b60: 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20 74  no such table: t
0b70: 32 7d 7d 0a 0a 23 20 4d 61 6b 65 20 73 75 72 65  2}}..# Make sure
0b80: 20 69 6e 64 69 63 65 73 20 6f 6e 20 74 65 6d 70   indices on temp
0b90: 6f 72 61 72 79 20 74 61 62 6c 65 73 20 61 72 65  orary tables are
0ba0: 20 61 6c 73 6f 20 74 65 6d 70 6f 72 61 72 79 2e   also temporary.
0bb0: 0a 23 0a 64 6f 5f 74 65 73 74 20 74 65 6d 70 74  .#.do_test tempt
0bc0: 61 62 6c 65 2d 33 2e 31 20 7b 0a 20 20 65 78 65  able-3.1 {.  exe
0bd0: 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  csql {.    CREAT
0be0: 45 20 49 4e 44 45 58 20 69 32 20 4f 4e 20 74 32  E INDEX i2 ON t2
0bf0: 28 78 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20  (x);.    SELECT 
0c00: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
0c10: 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20 74 79  _master WHERE ty
0c20: 70 65 3d 27 69 6e 64 65 78 27 3b 0a 20 20 7d 0a  pe='index';.  }.
0c30: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 74 65 6d  } {}.do_test tem
0c40: 70 74 61 62 6c 65 2d 33 2e 32 20 7b 0a 20 20 65  ptable-3.2 {.  e
0c50: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
0c60: 45 43 54 20 79 20 46 52 4f 4d 20 74 32 20 57 48  ECT y FROM t2 WH
0c70: 45 52 45 20 78 3d 31 3b 0a 20 20 7d 0a 7d 20 7b  ERE x=1;.  }.} {
0c80: 32 7d 0a 64 6f 5f 74 65 73 74 20 74 65 6d 70 74  2}.do_test tempt
0c90: 61 62 6c 65 2d 33 2e 33 20 7b 0a 20 20 65 78 65  able-3.3 {.  exe
0ca0: 63 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20  csql {.    DROP 
0cb0: 49 4e 44 45 58 20 69 32 3b 0a 20 20 20 20 53 45  INDEX i2;.    SE
0cc0: 4c 45 43 54 20 79 20 46 52 4f 4d 20 74 32 20 57  LECT y FROM t2 W
0cd0: 48 45 52 45 20 78 3d 31 3b 0a 20 20 7d 0a 7d 20  HERE x=1;.  }.} 
0ce0: 7b 32 7d 0a 64 6f 5f 74 65 73 74 20 74 65 6d 70  {2}.do_test temp
0cf0: 74 61 62 6c 65 2d 33 2e 34 20 7b 0a 20 20 65 78  table-3.4 {.  ex
0d00: 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41  ecsql {.    CREA
0d10: 54 45 20 49 4e 44 45 58 20 69 32 20 4f 4e 20 74  TE INDEX i2 ON t
0d20: 32 28 78 29 3b 0a 20 20 20 20 44 52 4f 50 20 54  2(x);.    DROP T
0d30: 41 42 4c 45 20 74 32 3b 0a 20 20 7d 0a 20 20 63  ABLE t2;.  }.  c
0d40: 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 49 4e  atchsql {DROP IN
0d50: 44 45 58 20 69 32 7d 0a 7d 20 7b 31 20 7b 6e 6f  DEX i2}.} {1 {no
0d60: 20 73 75 63 68 20 69 6e 64 65 78 3a 20 69 32 7d   such index: i2}
0d70: 7d 0a 0a 23 20 43 68 65 63 6b 20 66 6f 72 20 63  }..# Check for c
0d80: 6f 72 72 65 63 74 20 6e 61 6d 65 20 63 6f 6c 6c  orrect name coll
0d90: 69 73 69 6f 6e 20 70 72 6f 63 65 73 73 69 6e 67  ision processing
0da0: 2e 20 41 20 6e 61 6d 65 20 63 6f 6c 6c 69 73 69  . A name collisi
0db0: 6f 6e 20 63 61 6e 0a 23 20 6f 63 63 75 72 20 77  on can.# occur w
0dc0: 68 65 6e 20 70 72 6f 63 65 73 73 20 41 20 63 72  hen process A cr
0dd0: 65 61 74 65 73 20 61 20 74 65 6d 70 6f 72 61 72  eates a temporar
0de0: 79 20 74 61 62 6c 65 20 54 20 74 68 65 6e 20 70  y table T then p
0df0: 72 6f 63 65 73 73 20 42 0a 23 20 63 72 65 61 74  rocess B.# creat
0e00: 65 73 20 61 20 70 65 72 6d 61 6e 65 6e 74 20 74  es a permanent t
0e10: 61 62 6c 65 20 61 6c 73 6f 20 6e 61 6d 65 64 20  able also named 
0e20: 54 2e 20 20 54 68 65 20 74 65 6d 70 20 74 61 62  T.  The temp tab
0e30: 6c 65 20 69 6e 20 70 72 6f 63 65 73 73 20 41 0a  le in process A.
0e40: 23 20 68 69 64 65 73 20 74 68 65 20 65 78 69 73  # hides the exis
0e50: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 70 65 72  tance of the per
0e60: 6d 61 6e 65 6e 74 20 74 61 62 6c 65 2e 0a 23 0a  manent table..#.
0e70: 64 6f 5f 74 65 73 74 20 74 65 6d 70 74 61 62 6c  do_test temptabl
0e80: 65 2d 34 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  e-4.1 {.  execsq
0e90: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
0ea0: 45 4d 50 20 54 41 42 4c 45 20 74 32 28 78 2c 79  EMP TABLE t2(x,y
0eb0: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
0ec0: 54 4f 20 74 32 20 56 41 4c 55 45 53 28 31 30 2c  TO t2 VALUES(10,
0ed0: 32 30 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20  20);.    SELECT 
0ee0: 2a 20 46 52 4f 4d 20 74 32 3b 0a 20 20 7d 20 64  * FROM t2;.  } d
0ef0: 62 32 0a 7d 20 7b 31 30 20 32 30 7d 0a 64 6f 5f  b2.} {10 20}.do_
0f00: 74 65 73 74 20 74 65 6d 70 74 61 62 6c 65 2d 34  test temptable-4
0f10: 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .2 {.  execsql {
0f20: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
0f30: 45 20 74 32 28 78 2c 79 2c 7a 29 3b 0a 20 20 20  E t2(x,y,z);.   
0f40: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20   INSERT INTO t2 
0f50: 56 41 4c 55 45 53 28 39 2c 38 2c 37 29 3b 0a 20  VALUES(9,8,7);. 
0f60: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
0f70: 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b 39 20 38 20   t2;.  }.} {9 8 
0f80: 37 7d 0a 64 6f 5f 74 65 73 74 20 74 65 6d 70 74  7}.do_test tempt
0f90: 61 62 6c 65 2d 34 2e 33 20 7b 0a 20 20 63 61 74  able-4.3 {.  cat
0fa0: 63 68 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  chsql {.    SELE
0fb0: 43 54 20 2a 20 46 52 4f 4d 20 74 32 3b 0a 20 20  CT * FROM t2;.  
0fc0: 7d 20 64 62 32 0a 7d 20 7b 31 20 7b 64 61 74 61  } db2.} {1 {data
0fd0: 62 61 73 65 20 73 63 68 65 6d 61 20 68 61 73 20  base schema has 
0fe0: 63 68 61 6e 67 65 64 7d 7d 0a 64 6f 5f 74 65 73  changed}}.do_tes
0ff0: 74 20 74 65 6d 70 74 61 62 6c 65 2d 34 2e 34 20  t temptable-4.4 
1000: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  {.  catchsql {. 
1010: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
1020: 20 74 32 3b 0a 20 20 7d 20 64 62 32 0a 7d 20 7b   t2;.  } db2.} {
1030: 30 20 7b 31 30 20 32 30 7d 7d 0a 64 6f 5f 74 65  0 {10 20}}.do_te
1040: 73 74 20 74 65 6d 70 74 61 62 6c 65 2d 34 2e 35  st temptable-4.5
1050: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a   {.  catchsql {.
1060: 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74      DROP TABLE t
1070: 32 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20  2;.    SELECT * 
1080: 46 52 4f 4d 20 74 32 3b 0a 20 20 7d 20 64 62 32  FROM t2;.  } db2
1090: 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20 74  .} {1 {no such t
10a0: 61 62 6c 65 3a 20 74 32 7d 7d 0a 64 6f 5f 74 65  able: t2}}.do_te
10b0: 73 74 20 74 65 6d 70 74 61 62 6c 65 2d 34 2e 36  st temptable-4.6
10c0: 20 7b 0a 20 20 64 62 32 20 63 6c 6f 73 65 0a 20   {.  db2 close. 
10d0: 20 73 71 6c 69 74 65 20 64 62 32 20 2e 2f 74 65   sqlite db2 ./te
10e0: 73 74 2e 64 62 0a 20 20 63 61 74 63 68 73 71 6c  st.db.  catchsql
10f0: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20   {.    SELECT * 
1100: 46 52 4f 4d 20 74 32 3b 0a 20 20 7d 20 64 62 32  FROM t2;.  } db2
1110: 0a 7d 20 7b 30 20 7b 39 20 38 20 37 7d 7d 0a 64  .} {0 {9 8 7}}.d
1120: 6f 5f 74 65 73 74 20 74 65 6d 70 74 61 62 6c 65  o_test temptable
1130: 2d 34 2e 37 20 7b 0a 20 20 63 61 74 63 68 73 71  -4.7 {.  catchsq
1140: 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20 54 41 42  l {.    DROP TAB
1150: 4c 45 20 74 32 3b 0a 20 20 20 20 53 45 4c 45 43  LE t2;.    SELEC
1160: 54 20 2a 20 46 52 4f 4d 20 74 32 3b 0a 20 20 7d  T * FROM t2;.  }
1170: 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20 74  .} {1 {no such t
1180: 61 62 6c 65 3a 20 74 32 7d 7d 0a 64 6f 5f 74 65  able: t2}}.do_te
1190: 73 74 20 74 65 6d 70 74 61 62 6c 65 2d 34 2e 38  st temptable-4.8
11a0: 20 7b 0a 20 20 64 62 32 20 63 6c 6f 73 65 0a 20   {.  db2 close. 
11b0: 20 73 71 6c 69 74 65 20 64 62 32 20 2e 2f 74 65   sqlite db2 ./te
11c0: 73 74 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20  st.db.  execsql 
11d0: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 45 4d  {.    CREATE TEM
11e0: 50 20 54 41 42 4c 45 20 74 32 28 78 20 75 6e 69  P TABLE t2(x uni
11f0: 71 75 65 2c 79 29 3b 0a 20 20 20 20 49 4e 53 45  que,y);.    INSE
1200: 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45  RT INTO t2 VALUE
1210: 53 28 31 2c 32 29 3b 0a 20 20 20 20 53 45 4c 45  S(1,2);.    SELE
1220: 43 54 20 2a 20 46 52 4f 4d 20 74 32 3b 0a 20 20  CT * FROM t2;.  
1230: 7d 20 64 62 32 0a 7d 20 7b 31 20 32 7d 0a 64 6f  } db2.} {1 2}.do
1240: 5f 74 65 73 74 20 74 65 6d 70 74 61 62 6c 65 2d  _test temptable-
1250: 34 2e 39 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  4.9 {.  execsql 
1260: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  {.    CREATE TAB
1270: 4c 45 20 74 32 28 78 20 75 6e 69 71 75 65 2c 20  LE t2(x unique, 
1280: 79 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  y);.    INSERT I
1290: 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 33 2c  NTO t2 VALUES(3,
12a0: 34 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  4);.    SELECT *
12b0: 20 46 52 4f 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20   FROM t2;.  }.} 
12c0: 7b 33 20 34 7d 0a 64 6f 5f 74 65 73 74 20 74 65  {3 4}.do_test te
12d0: 6d 70 74 61 62 6c 65 2d 34 2e 31 30 20 7b 0a 20  mptable-4.10 {. 
12e0: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
12f0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32  SELECT * FROM t2
1300: 3b 0a 20 20 7d 20 64 62 32 0a 7d 20 7b 31 20 7b  ;.  } db2.} {1 {
1310: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
1320: 68 61 73 20 63 68 61 6e 67 65 64 7d 7d 0a 64 6f  has changed}}.do
1330: 5f 74 65 73 74 20 74 65 6d 70 74 61 62 6c 65 2d  _test temptable-
1340: 34 2e 31 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  4.11 {.  execsql
1350: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20   {.    SELECT * 
1360: 46 52 4f 4d 20 74 32 3b 0a 20 20 7d 20 64 62 32  FROM t2;.  } db2
1370: 0a 7d 20 7b 31 20 32 7d 0a 64 6f 5f 74 65 73 74  .} {1 2}.do_test
1380: 20 74 65 6d 70 74 61 62 6c 65 2d 34 2e 31 32 20   temptable-4.12 
1390: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
13a0: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
13b0: 74 32 3b 0a 20 20 7d 0a 7d 20 7b 33 20 34 7d 0a  t2;.  }.} {3 4}.
13c0: 64 6f 5f 74 65 73 74 20 74 65 6d 70 74 61 62 6c  do_test temptabl
13d0: 65 2d 34 2e 31 33 20 7b 0a 20 20 63 61 74 63 68  e-4.13 {.  catch
13e0: 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20 54  sql {.    DROP T
13f0: 41 42 4c 45 20 74 32 3b 0a 20 20 20 20 53 45 4c  ABLE t2;.    SEL
1400: 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 3b 0a 20  ECT * FROM t2;. 
1410: 20 7d 20 64 62 32 0a 7d 20 7b 31 20 7b 6e 6f 20   } db2.} {1 {no 
1420: 73 75 63 68 20 74 61 62 6c 65 3a 20 74 32 7d 7d  such table: t2}}
1430: 0a 64 6f 5f 74 65 73 74 20 74 65 6d 70 74 61 62  .do_test temptab
1440: 6c 65 2d 34 2e 31 34 20 7b 0a 20 20 65 78 65 63  le-4.14 {.  exec
1450: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
1460: 20 2a 20 46 52 4f 4d 20 74 32 3b 0a 20 20 7d 0a   * FROM t2;.  }.
1470: 7d 20 7b 33 20 34 7d 0a 64 6f 5f 74 65 73 74 20  } {3 4}.do_test 
1480: 74 65 6d 70 74 61 62 6c 65 2d 34 2e 31 35 20 7b  temptable-4.15 {
1490: 0a 20 20 64 62 32 20 63 6c 6f 73 65 0a 20 20 73  .  db2 close.  s
14a0: 71 6c 69 74 65 20 64 62 32 20 2e 2f 74 65 73 74  qlite db2 ./test
14b0: 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  .db.  execsql {.
14c0: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
14d0: 4d 20 74 32 3b 0a 20 20 7d 20 64 62 32 0a 7d 20  M t2;.  } db2.} 
14e0: 7b 33 20 34 7d 0a 0a 23 20 4e 6f 77 20 63 72 65  {3 4}..# Now cre
14f0: 61 74 65 20 61 20 74 65 6d 70 6f 72 61 72 79 20  ate a temporary 
1500: 74 61 62 6c 65 20 69 6e 20 64 62 32 20 61 6e 64  table in db2 and
1510: 20 61 20 70 65 72 6d 61 6e 65 6e 74 20 69 6e 64   a permanent ind
1520: 65 78 20 69 6e 20 64 62 2e 20 20 54 68 65 0a 23  ex in db.  The.#
1530: 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
1540: 20 69 6e 20 64 62 32 20 73 68 6f 75 6c 64 20 6d   in db2 should m
1550: 61 73 6b 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  ask the name of 
1560: 74 68 65 20 70 65 72 6d 61 6e 65 6e 74 20 69 6e  the permanent in
1570: 64 65 78 2c 0a 23 20 62 75 74 20 74 68 65 20 70  dex,.# but the p
1580: 65 72 6d 61 6e 65 6e 74 20 69 6e 64 65 78 20 73  ermanent index s
1590: 68 6f 75 6c 64 20 73 74 69 6c 6c 20 62 65 20 61  hould still be a
15a0: 63 63 65 73 73 69 62 6c 65 20 61 6e 64 20 73 68  ccessible and sh
15b0: 6f 75 6c 64 20 73 74 69 6c 6c 0a 23 20 62 65 20  ould still.# be 
15c0: 75 70 64 61 74 65 64 20 77 68 65 6e 20 69 74 73  updated when its
15d0: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
15e0: 61 62 6c 65 20 63 68 61 6e 67 65 73 2e 0a 23 0a  able changes..#.
15f0: 64 6f 5f 74 65 73 74 20 74 65 6d 70 74 61 62 6c  do_test temptabl
1600: 65 2d 35 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  e-5.1 {.  execsq
1610: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
1620: 45 4d 50 20 54 41 42 4c 45 20 6d 61 73 6b 28 61  EMP TABLE mask(a
1630: 2c 62 2c 63 29 0a 20 20 7d 20 64 62 32 0a 20 20  ,b,c).  } db2.  
1640: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52  execsql {.    CR
1650: 45 41 54 45 20 49 4e 44 45 58 20 6d 61 73 6b 20  EATE INDEX mask 
1660: 4f 4e 20 74 32 28 78 29 3b 0a 20 20 20 20 53 45  ON t2(x);.    SE
1670: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 3b 0a  LECT * FROM t2;.
1680: 20 20 7d 0a 7d 20 7b 33 20 34 7d 0a 64 6f 5f 74    }.} {3 4}.do_t
1690: 65 73 74 20 74 65 6d 70 74 61 62 6c 65 2d 35 2e  est temptable-5.
16a0: 32 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  2 {.  catchsql {
16b0: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
16c0: 4f 4d 20 74 32 3b 0a 20 20 7d 20 64 62 32 0a 7d  OM t2;.  } db2.}
16d0: 20 7b 31 20 7b 64 61 74 61 62 61 73 65 20 73 63   {1 {database sc
16e0: 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64  hema has changed
16f0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 65 6d 70 74  }}.do_test tempt
1700: 61 62 6c 65 2d 35 2e 33 20 7b 0a 20 20 63 61 74  able-5.3 {.  cat
1710: 63 68 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  chsql {.    SELE
1720: 43 54 20 2a 20 46 52 4f 4d 20 74 32 3b 0a 20 20  CT * FROM t2;.  
1730: 7d 20 64 62 32 0a 7d 20 7b 30 20 7b 33 20 34 7d  } db2.} {0 {3 4}
1740: 7d 0a 64 6f 5f 74 65 73 74 20 74 65 6d 70 74 61  }.do_test tempta
1750: 62 6c 65 2d 35 2e 34 20 7b 0a 20 20 65 78 65 63  ble-5.4 {.  exec
1760: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
1770: 20 79 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45   y FROM t2 WHERE
1780: 20 78 3d 33 0a 20 20 7d 0a 7d 20 7b 34 7d 0a 64   x=3.  }.} {4}.d
1790: 6f 5f 74 65 73 74 20 74 65 6d 70 74 61 62 6c 65  o_test temptable
17a0: 2d 35 2e 35 20 7b 0a 20 20 65 78 65 63 73 71 6c  -5.5 {.  execsql
17b0: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 79 20   {.    SELECT y 
17c0: 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20 78 3d  FROM t2 WHERE x=
17d0: 33 0a 20 20 7d 20 64 62 32 0a 7d 20 7b 34 7d 0a  3.  } db2.} {4}.
17e0: 64 6f 5f 74 65 73 74 20 74 65 6d 70 74 61 62 6c  do_test temptabl
17f0: 65 2d 35 2e 36 20 7b 0a 20 20 65 78 65 63 73 71  e-5.6 {.  execsq
1800: 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  l {.    INSERT I
1810: 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 31 2c  NTO t2 VALUES(1,
1820: 32 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 79  2);.    SELECT y
1830: 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20 78   FROM t2 WHERE x
1840: 3d 31 3b 0a 20 20 7d 20 64 62 32 0a 7d 20 7b 32  =1;.  } db2.} {2
1850: 7d 0a 64 6f 5f 74 65 73 74 20 74 65 6d 70 74 61  }.do_test tempta
1860: 62 6c 65 2d 35 2e 37 20 7b 0a 20 20 65 78 65 63  ble-5.7 {.  exec
1870: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
1880: 20 79 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45   y FROM t2 WHERE
1890: 20 78 3d 33 0a 20 20 7d 20 64 62 32 0a 7d 20 7b   x=3.  } db2.} {
18a0: 34 7d 0a 64 6f 5f 74 65 73 74 20 74 65 6d 70 74  4}.do_test tempt
18b0: 61 62 6c 65 2d 35 2e 38 20 7b 0a 20 20 65 78 65  able-5.8 {.  exe
18c0: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
18d0: 54 20 79 20 46 52 4f 4d 20 74 32 20 57 48 45 52  T y FROM t2 WHER
18e0: 45 20 78 3d 31 3b 0a 20 20 7d 0a 7d 20 7b 32 7d  E x=1;.  }.} {2}
18f0: 0a 64 6f 5f 74 65 73 74 20 74 65 6d 70 74 61 62  .do_test temptab
1900: 6c 65 2d 35 2e 39 20 7b 0a 20 20 65 78 65 63 73  le-5.9 {.  execs
1910: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
1920: 79 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20  y FROM t2 WHERE 
1930: 78 3d 33 0a 20 20 7d 0a 7d 20 7b 34 7d 0a 0a 64  x=3.  }.} {4}..d
1940: 62 32 20 63 6c 6f 73 65 0a 0a 23 20 54 65 73 74  b2 close..# Test
1950: 20 66 6f 72 20 63 6f 72 72 65 63 74 20 6f 70 65   for correct ope
1960: 72 61 74 69 6f 6e 20 6f 66 20 72 65 61 64 2d 6f  ration of read-o
1970: 6e 6c 79 20 64 61 74 61 62 61 73 65 73 0a 23 0a  nly databases.#.
1980: 64 6f 5f 74 65 73 74 20 74 65 6d 70 74 61 62 6c  do_test temptabl
1990: 65 2d 36 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  e-6.1 {.  execsq
19a0: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
19b0: 41 42 4c 45 20 74 38 28 78 29 3b 0a 20 20 20 20  ABLE t8(x);.    
19c0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 38 20 56  INSERT INTO t8 V
19d0: 41 4c 55 45 53 28 27 78 79 7a 7a 79 27 29 3b 0a  ALUES('xyzzy');.
19e0: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
19f0: 4d 20 74 38 3b 0a 20 20 7d 0a 7d 20 7b 78 79 7a  M t8;.  }.} {xyz
1a00: 7a 79 7d 0a 64 6f 5f 74 65 73 74 20 74 65 6d 70  zy}.do_test temp
1a10: 74 61 62 6c 65 2d 36 2e 32 20 7b 0a 20 20 64 62  table-6.2 {.  db
1a20: 20 63 6c 6f 73 65 0a 20 20 63 61 74 63 68 20 7b   close.  catch {
1a30: 66 69 6c 65 20 61 74 74 72 69 62 75 74 65 73 20  file attributes 
1a40: 74 65 73 74 2e 64 62 20 2d 70 65 72 6d 69 73 73  test.db -permiss
1a50: 69 6f 6e 73 20 30 34 34 34 7d 0a 20 20 63 61 74  ions 0444}.  cat
1a60: 63 68 20 7b 66 69 6c 65 20 61 74 74 72 69 62 75  ch {file attribu
1a70: 74 65 73 20 74 65 73 74 2e 64 62 20 2d 72 65 61  tes test.db -rea
1a80: 64 6f 6e 6c 79 20 31 7d 0a 20 20 73 71 6c 69 74  donly 1}.  sqlit
1a90: 65 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65  e db test.db.  e
1aa0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
1ab0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 38 3b 0a 20  ECT * FROM t8;. 
1ac0: 20 7d 0a 7d 20 7b 78 79 7a 7a 79 7d 0a 64 6f 5f   }.} {xyzzy}.do_
1ad0: 74 65 73 74 20 74 65 6d 70 74 61 62 6c 65 2d 36  test temptable-6
1ae0: 2e 33 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  .3 {.  catchsql 
1af0: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  {.    CREATE TAB
1b00: 4c 45 20 74 39 28 78 2c 79 29 3b 0a 20 20 7d 0a  LE t9(x,y);.  }.
1b10: 7d 20 7b 31 20 7b 61 74 74 65 6d 70 74 20 74 6f  } {1 {attempt to
1b20: 20 77 72 69 74 65 20 61 20 72 65 61 64 6f 6e 6c   write a readonl
1b30: 79 20 64 61 74 61 62 61 73 65 7d 7d 0a 64 6f 5f  y database}}.do_
1b40: 74 65 73 74 20 74 65 6d 70 74 61 62 6c 65 2d 36  test temptable-6
1b50: 2e 34 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  .4 {.  catchsql 
1b60: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 45 4d  {.    CREATE TEM
1b70: 50 20 54 41 42 4c 45 20 74 39 28 78 2c 79 29 3b  P TABLE t9(x,y);
1b80: 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f  .  }.} {0 {}}.do
1b90: 5f 74 65 73 74 20 74 65 6d 70 74 61 62 6c 65 2d  _test temptable-
1ba0: 36 2e 35 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  6.5 {.  catchsql
1bb0: 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e   {.    INSERT IN
1bc0: 54 4f 20 74 39 20 56 41 4c 55 45 53 28 31 2c 32  TO t9 VALUES(1,2
1bd0: 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20  );.    SELECT * 
1be0: 46 52 4f 4d 20 74 39 3b 0a 20 20 7d 0a 7d 20 7b  FROM t9;.  }.} {
1bf0: 30 20 7b 31 20 32 7d 7d 0a 64 6f 5f 74 65 73 74  0 {1 2}}.do_test
1c00: 20 74 65 6d 70 74 61 62 6c 65 2d 36 2e 36 20 7b   temptable-6.6 {
1c10: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
1c20: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 38    INSERT INTO t8
1c30: 20 56 41 4c 55 45 53 28 27 68 65 6c 6c 6f 27 29   VALUES('hello')
1c40: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ;.    SELECT * F
1c50: 52 4f 4d 20 74 38 3b 0a 20 20 7d 0a 7d 20 7b 31  ROM t8;.  }.} {1
1c60: 20 7b 61 74 74 65 6d 70 74 20 74 6f 20 77 72 69   {attempt to wri
1c70: 74 65 20 61 20 72 65 61 64 6f 6e 6c 79 20 64 61  te a readonly da
1c80: 74 61 62 61 73 65 7d 7d 0a 64 6f 5f 74 65 73 74  tabase}}.do_test
1c90: 20 74 65 6d 70 74 61 62 6c 65 2d 36 2e 37 20 7b   temptable-6.7 {
1ca0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
1cb0: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
1cc0: 74 38 2c 74 39 3b 0a 20 20 7d 0a 7d 20 7b 30 20  t8,t9;.  }.} {0 
1cd0: 7b 78 79 7a 7a 79 20 31 20 32 7d 7d 0a 64 6f 5f  {xyzzy 1 2}}.do_
1ce0: 74 65 73 74 20 74 65 6d 70 74 61 62 6c 65 2d 36  test temptable-6
1cf0: 2e 38 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a  .8 {.  db close.
1d00: 20 20 73 71 6c 69 74 65 20 64 62 20 74 65 73 74    sqlite db test
1d10: 2e 64 62 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  .db.  catchsql {
1d20: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
1d30: 4f 4d 20 74 38 2c 74 39 3b 0a 20 20 7d 0a 7d 20  OM t8,t9;.  }.} 
1d40: 7b 31 20 7b 6e 6f 20 73 75 63 68 20 74 61 62 6c  {1 {no such tabl
1d50: 65 3a 20 74 39 7d 7d 0a 0a 66 69 6e 69 73 68 5f  e: t9}}..finish_
1d60: 74 65 73 74 0a                                   test.