/ Hex Artifact Content
Login

Artifact 63a16e3ad19adf073cfbcdf7624c92ac5236522c:


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: 31 34 20 32 30 30 34 2f 30 36 2f 31 39 20 30 30  14 2004/06/19 00
0210: 3a 31 36 3a 33 31 20 64 72 68 20 45 78 70 20 24  :16:31 drh Exp $
0220: 0a 0a 73 65 74 20 74 65 73 74 64 69 72 20 5b 66  ..set testdir [f
0230: 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 61 72 67  ile dirname $arg
0240: 76 30 5d 0a 73 6f 75 72 63 65 20 24 74 65 73 74  v0].source $test
0250: 64 69 72 2f 74 65 73 74 65 72 2e 74 63 6c 0a 0a  dir/tester.tcl..
0260: 23 20 43 72 65 61 74 65 20 61 6e 20 61 6c 74 65  # Create an alte
0270: 72 6e 61 74 69 76 65 20 63 6f 6e 6e 65 63 74 69  rnative connecti
0280: 6f 6e 20 74 6f 20 74 68 65 20 64 61 74 61 62 61  on to the databa
0290: 73 65 0a 23 0a 64 6f 5f 74 65 73 74 20 74 65 6d  se.#.do_test tem
02a0: 70 74 61 62 6c 65 2d 31 2e 30 20 7b 0a 20 20 73  ptable-1.0 {.  s
02b0: 71 6c 69 74 65 33 20 64 62 32 20 2e 2f 74 65 73  qlite3 db2 ./tes
02c0: 74 2e 64 62 0a 20 20 73 65 74 20 64 75 6d 6d 79  t.db.  set dummy
02d0: 20 7b 7d 0a 7d 20 7b 7d 0a 0a 23 20 43 72 65 61   {}.} {}..# Crea
02e0: 74 65 20 61 20 70 65 72 6d 61 6e 65 6e 74 20 74  te a permanent t
02f0: 61 62 6c 65 2e 0a 23 0a 64 6f 5f 74 65 73 74 20  able..#.do_test 
0300: 74 65 6d 70 74 61 62 6c 65 2d 31 2e 31 20 7b 0a  temptable-1.1 {.
0310: 20 20 65 78 65 63 73 71 6c 20 7b 43 52 45 41 54    execsql {CREAT
0320: 45 20 54 41 42 4c 45 20 74 31 28 61 2c 62 2c 63  E TABLE t1(a,b,c
0330: 29 3b 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 49  );}.  execsql {I
0340: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
0350: 4c 55 45 53 28 31 2c 32 2c 33 29 3b 7d 0a 20 20  LUES(1,2,3);}.  
0360: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
0370: 2a 20 46 52 4f 4d 20 74 31 7d 0a 7d 20 7b 31 20  * FROM t1}.} {1 
0380: 32 20 33 7d 0a 64 6f 5f 74 65 73 74 20 74 65 6d  2 3}.do_test tem
0390: 70 74 61 62 6c 65 2d 31 2e 32 20 7b 0a 20 20 63  ptable-1.2 {.  c
03a0: 61 74 63 68 20 7b 64 62 32 20 65 76 61 6c 20 7b  atch {db2 eval {
03b0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71  SELECT * FROM sq
03c0: 6c 69 74 65 5f 6d 61 73 74 65 72 7d 7d 0a 20 20  lite_master}}.  
03d0: 64 62 32 20 65 76 61 6c 20 7b 53 45 4c 45 43 54  db2 eval {SELECT
03e0: 20 2a 20 46 52 4f 4d 20 74 31 7d 0a 7d 20 7b 31   * FROM t1}.} {1
03f0: 20 32 20 33 7d 0a 64 6f 5f 74 65 73 74 20 74 65   2 3}.do_test te
0400: 6d 70 74 61 62 6c 65 2d 31 2e 33 20 7b 0a 20 20  mptable-1.3 {.  
0410: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
0420: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
0430: 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31 7d 0a  _master}.} {t1}.
0440: 64 6f 5f 74 65 73 74 20 74 65 6d 70 74 61 62 6c  do_test temptabl
0450: 65 2d 31 2e 34 20 7b 0a 20 20 64 62 32 20 65 76  e-1.4 {.  db2 ev
0460: 61 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  al {SELECT name 
0470: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
0480: 65 72 7d 0a 7d 20 7b 74 31 7d 0a 0a 23 20 43 72  er}.} {t1}..# Cr
0490: 65 61 74 65 20 61 20 74 65 6d 70 6f 72 61 72 79  eate a temporary
04a0: 20 74 61 62 6c 65 2e 20 20 56 65 72 69 66 79 20   table.  Verify 
04b0: 74 68 61 74 20 6f 6e 6c 79 20 6f 6e 65 20 6f 66  that only one of
04c0: 20 74 68 65 20 74 77 6f 0a 23 20 70 72 6f 63 65   the two.# proce
04d0: 73 73 65 73 20 63 61 6e 20 73 65 65 20 69 74 2e  sses can see it.
04e0: 0a 23 0a 64 6f 5f 74 65 73 74 20 74 65 6d 70 74  .#.do_test tempt
04f0: 61 62 6c 65 2d 31 2e 35 20 7b 0a 20 20 64 62 32  able-1.5 {.  db2
0500: 20 65 76 61 6c 20 7b 0a 20 20 20 20 43 52 45 41   eval {.    CREA
0510: 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 74 32  TE TEMP TABLE t2
0520: 28 78 2c 79 2c 7a 29 3b 0a 20 20 20 20 49 4e 53  (x,y,z);.    INS
0530: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
0540: 45 53 28 34 2c 35 2c 36 29 3b 0a 20 20 7d 0a 20  ES(4,5,6);.  }. 
0550: 20 64 62 32 20 65 76 61 6c 20 7b 53 45 4c 45 43   db2 eval {SELEC
0560: 54 20 2a 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b  T * FROM t2}.} {
0570: 34 20 35 20 36 7d 0a 64 6f 5f 74 65 73 74 20 74  4 5 6}.do_test t
0580: 65 6d 70 74 61 62 6c 65 2d 31 2e 36 20 7b 0a 20  emptable-1.6 {. 
0590: 20 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c 20   catch {execsql 
05a0: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73  {SELECT * FROM s
05b0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 7d 0a 20  qlite_master}}. 
05c0: 20 63 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43   catchsql {SELEC
05d0: 54 20 2a 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b  T * FROM t2}.} {
05e0: 31 20 7b 6e 6f 20 73 75 63 68 20 74 61 62 6c 65  1 {no such table
05f0: 3a 20 74 32 7d 7d 0a 64 6f 5f 74 65 73 74 20 74  : t2}}.do_test t
0600: 65 6d 70 74 61 62 6c 65 2d 31 2e 37 20 7b 0a 20  emptable-1.7 {. 
0610: 20 63 61 74 63 68 73 71 6c 20 7b 49 4e 53 45 52   catchsql {INSER
0620: 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53  T INTO t2 VALUES
0630: 28 38 2c 39 2c 30 29 3b 7d 0a 7d 20 7b 31 20 7b  (8,9,0);}.} {1 {
0640: 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20 74  no such table: t
0650: 32 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 65 6d 70  2}}.do_test temp
0660: 74 61 62 6c 65 2d 31 2e 38 20 7b 0a 20 20 64 62  table-1.8 {.  db
0670: 32 20 65 76 61 6c 20 7b 49 4e 53 45 52 54 20 49  2 eval {INSERT I
0680: 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 38 2c  NTO t2 VALUES(8,
0690: 39 2c 30 29 3b 7d 0a 20 20 64 62 32 20 65 76 61  9,0);}.  db2 eva
06a0: 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  l {SELECT * FROM
06b0: 20 74 32 20 4f 52 44 45 52 20 42 59 20 78 7d 0a   t2 ORDER BY x}.
06c0: 7d 20 7b 34 20 35 20 36 20 38 20 39 20 30 7d 0a  } {4 5 6 8 9 0}.
06d0: 64 6f 5f 74 65 73 74 20 74 65 6d 70 74 61 62 6c  do_test temptabl
06e0: 65 2d 31 2e 39 20 7b 0a 20 20 64 62 32 20 65 76  e-1.9 {.  db2 ev
06f0: 61 6c 20 7b 44 45 4c 45 54 45 20 46 52 4f 4d 20  al {DELETE FROM 
0700: 74 32 20 57 48 45 52 45 20 78 3d 3d 38 7d 0a 20  t2 WHERE x==8}. 
0710: 20 64 62 32 20 65 76 61 6c 20 7b 53 45 4c 45 43   db2 eval {SELEC
0720: 54 20 2a 20 46 52 4f 4d 20 74 32 20 4f 52 44 45  T * FROM t2 ORDE
0730: 52 20 42 59 20 78 7d 0a 7d 20 7b 34 20 35 20 36  R BY x}.} {4 5 6
0740: 7d 0a 64 6f 5f 74 65 73 74 20 74 65 6d 70 74 61  }.do_test tempta
0750: 62 6c 65 2d 31 2e 31 30 20 7b 0a 20 20 64 62 32  ble-1.10 {.  db2
0760: 20 65 76 61 6c 20 7b 44 45 4c 45 54 45 20 46 52   eval {DELETE FR
0770: 4f 4d 20 74 32 7d 0a 20 20 64 62 32 20 65 76 61  OM t2}.  db2 eva
0780: 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  l {SELECT * FROM
0790: 20 74 32 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73   t2}.} {}.do_tes
07a0: 74 20 74 65 6d 70 74 61 62 6c 65 2d 31 2e 31 31  t temptable-1.11
07b0: 20 7b 0a 20 20 64 62 32 20 65 76 61 6c 20 7b 0a   {.  db2 eval {.
07c0: 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
07d0: 20 74 32 20 56 41 4c 55 45 53 28 37 2c 36 2c 35   t2 VALUES(7,6,5
07e0: 29 3b 0a 20 20 20 20 20 49 4e 53 45 52 54 20 49  );.     INSERT I
07f0: 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 34 2c  NTO t2 VALUES(4,
0800: 33 2c 32 29 3b 0a 20 20 20 20 20 53 45 4c 45 43  3,2);.     SELEC
0810: 54 20 2a 20 46 52 4f 4d 20 74 32 20 4f 52 44 45  T * FROM t2 ORDE
0820: 52 20 42 59 20 78 3b 0a 20 20 7d 0a 7d 20 7b 34  R BY x;.  }.} {4
0830: 20 33 20 32 20 37 20 36 20 35 7d 0a 64 6f 5f 74   3 2 7 6 5}.do_t
0840: 65 73 74 20 74 65 6d 70 74 61 62 6c 65 2d 31 2e  est temptable-1.
0850: 31 32 20 7b 0a 20 20 64 62 32 20 65 76 61 6c 20  12 {.  db2 eval 
0860: 7b 44 52 4f 50 20 54 41 42 4c 45 20 74 32 3b 7d  {DROP TABLE t2;}
0870: 0a 20 20 73 65 74 20 72 20 5b 63 61 74 63 68 20  .  set r [catch 
0880: 7b 64 62 32 20 65 76 61 6c 20 7b 53 45 4c 45 43  {db2 eval {SELEC
0890: 54 20 2a 20 46 52 4f 4d 20 74 32 7d 7d 20 6d 73  T * FROM t2}} ms
08a0: 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 72 20 24  g].  lappend r $
08b0: 6d 73 67 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75 63  msg.} {1 {no suc
08c0: 68 20 74 61 62 6c 65 3a 20 74 32 7d 7d 0a 0a 23  h table: t2}}..#
08d0: 20 4d 61 6b 65 20 73 75 72 65 20 74 65 6d 70 6f   Make sure tempo
08e0: 72 61 72 79 20 74 61 62 6c 65 73 20 77 6f 72 6b  rary tables work
08f0: 20 77 69 74 68 20 74 72 61 6e 73 61 63 74 69 6f   with transactio
0900: 6e 73 0a 23 0a 64 6f 5f 74 65 73 74 20 74 65 6d  ns.#.do_test tem
0910: 70 74 61 62 6c 65 2d 32 2e 31 20 7b 0a 20 20 65  ptable-2.1 {.  e
0920: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 42 45 47  xecsql {.    BEG
0930: 49 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e 3b 0a  IN TRANSACTION;.
0940: 20 20 20 20 43 52 45 41 54 45 20 54 45 4d 50 4f      CREATE TEMPO
0950: 52 41 52 59 20 54 41 42 4c 45 20 74 32 28 78 2c  RARY TABLE t2(x,
0960: 79 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  y);.    INSERT I
0970: 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 31 2c  NTO t2 VALUES(1,
0980: 32 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  2);.    SELECT *
0990: 20 46 52 4f 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20   FROM t2;.  }.} 
09a0: 7b 31 20 32 7d 0a 64 6f 5f 74 65 73 74 20 74 65  {1 2}.do_test te
09b0: 6d 70 74 61 62 6c 65 2d 32 2e 32 20 7b 0a 20 20  mptable-2.2 {.  
09c0: 65 78 65 63 73 71 6c 20 7b 52 4f 4c 4c 42 41 43  execsql {ROLLBAC
09d0: 4b 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 53  K}.  catchsql {S
09e0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d  ELECT * FROM t2}
09f0: 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20 74  .} {1 {no such t
0a00: 61 62 6c 65 3a 20 74 32 7d 7d 0a 64 6f 5f 74 65  able: t2}}.do_te
0a10: 73 74 20 74 65 6d 70 74 61 62 6c 65 2d 32 2e 33  st temptable-2.3
0a20: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
0a30: 20 20 20 42 45 47 49 4e 20 54 52 41 4e 53 41 43     BEGIN TRANSAC
0a40: 54 49 4f 4e 3b 0a 20 20 20 20 43 52 45 41 54 45  TION;.    CREATE
0a50: 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45   TEMPORARY TABLE
0a60: 20 74 32 28 78 2c 79 29 3b 0a 20 20 20 20 49 4e   t2(x,y);.    IN
0a70: 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c  SERT INTO t2 VAL
0a80: 55 45 53 28 31 2c 32 29 3b 0a 20 20 20 20 53 45  UES(1,2);.    SE
0a90: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 3b 0a  LECT * FROM t2;.
0aa0: 20 20 7d 0a 7d 20 7b 31 20 32 7d 0a 64 6f 5f 74    }.} {1 2}.do_t
0ab0: 65 73 74 20 74 65 6d 70 74 61 62 6c 65 2d 32 2e  est temptable-2.
0ac0: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 43  4 {.  execsql {C
0ad0: 4f 4d 4d 49 54 7d 0a 20 20 63 61 74 63 68 73 71  OMMIT}.  catchsq
0ae0: 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  l {SELECT * FROM
0af0: 20 74 32 7d 0a 7d 20 7b 30 20 7b 31 20 32 7d 7d   t2}.} {0 {1 2}}
0b00: 0a 64 6f 5f 74 65 73 74 20 74 65 6d 70 74 61 62  .do_test temptab
0b10: 6c 65 2d 32 2e 35 20 7b 0a 20 20 73 65 74 20 72  le-2.5 {.  set r
0b20: 20 5b 63 61 74 63 68 20 7b 64 62 32 20 65 76 61   [catch {db2 eva
0b30: 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  l {SELECT * FROM
0b40: 20 74 32 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70   t2}} msg].  lap
0b50: 70 65 6e 64 20 72 20 24 6d 73 67 0a 7d 20 7b 31  pend r $msg.} {1
0b60: 20 7b 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a   {no such table:
0b70: 20 74 32 7d 7d 0a 0a 23 20 4d 61 6b 65 20 73 75   t2}}..# Make su
0b80: 72 65 20 69 6e 64 69 63 65 73 20 6f 6e 20 74 65  re indices on te
0b90: 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 20 61  mporary tables a
0ba0: 72 65 20 61 6c 73 6f 20 74 65 6d 70 6f 72 61 72  re also temporar
0bb0: 79 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 74 65 6d  y..#.do_test tem
0bc0: 70 74 61 62 6c 65 2d 33 2e 31 20 7b 0a 20 20 65  ptable-3.1 {.  e
0bd0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45  xecsql {.    CRE
0be0: 41 54 45 20 49 4e 44 45 58 20 69 32 20 4f 4e 20  ATE INDEX i2 ON 
0bf0: 74 32 28 78 29 3b 0a 20 20 20 20 53 45 4c 45 43  t2(x);.    SELEC
0c00: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
0c10: 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20  te_master WHERE 
0c20: 74 79 70 65 3d 27 69 6e 64 65 78 27 3b 0a 20 20  type='index';.  
0c30: 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 74  }.} {}.do_test t
0c40: 65 6d 70 74 61 62 6c 65 2d 33 2e 32 20 7b 0a 20  emptable-3.2 {. 
0c50: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
0c60: 45 4c 45 43 54 20 79 20 46 52 4f 4d 20 74 32 20  ELECT y FROM t2 
0c70: 57 48 45 52 45 20 78 3d 31 3b 0a 20 20 7d 0a 7d  WHERE x=1;.  }.}
0c80: 20 7b 32 7d 0a 64 6f 5f 74 65 73 74 20 74 65 6d   {2}.do_test tem
0c90: 70 74 61 62 6c 65 2d 33 2e 33 20 7b 0a 20 20 65  ptable-3.3 {.  e
0ca0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f  xecsql {.    DRO
0cb0: 50 20 49 4e 44 45 58 20 69 32 3b 0a 20 20 20 20  P INDEX i2;.    
0cc0: 53 45 4c 45 43 54 20 79 20 46 52 4f 4d 20 74 32  SELECT y FROM t2
0cd0: 20 57 48 45 52 45 20 78 3d 31 3b 0a 20 20 7d 0a   WHERE x=1;.  }.
0ce0: 7d 20 7b 32 7d 0a 64 6f 5f 74 65 73 74 20 74 65  } {2}.do_test te
0cf0: 6d 70 74 61 62 6c 65 2d 33 2e 34 20 7b 0a 20 20  mptable-3.4 {.  
0d00: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52  execsql {.    CR
0d10: 45 41 54 45 20 49 4e 44 45 58 20 69 32 20 4f 4e  EATE INDEX i2 ON
0d20: 20 74 32 28 78 29 3b 0a 20 20 20 20 44 52 4f 50   t2(x);.    DROP
0d30: 20 54 41 42 4c 45 20 74 32 3b 0a 20 20 7d 0a 20   TABLE t2;.  }. 
0d40: 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20   catchsql {DROP 
0d50: 49 4e 44 45 58 20 69 32 7d 0a 7d 20 7b 31 20 7b  INDEX i2}.} {1 {
0d60: 6e 6f 20 73 75 63 68 20 69 6e 64 65 78 3a 20 69  no such index: i
0d70: 32 7d 7d 0a 0a 23 20 43 68 65 63 6b 20 66 6f 72  2}}..# Check for
0d80: 20 63 6f 72 72 65 63 74 20 6e 61 6d 65 20 63 6f   correct name co
0d90: 6c 6c 69 73 69 6f 6e 20 70 72 6f 63 65 73 73 69  llision processi
0da0: 6e 67 2e 20 41 20 6e 61 6d 65 20 63 6f 6c 6c 69  ng. A name colli
0db0: 73 69 6f 6e 20 63 61 6e 0a 23 20 6f 63 63 75 72  sion can.# occur
0dc0: 20 77 68 65 6e 20 70 72 6f 63 65 73 73 20 41 20   when process A 
0dd0: 63 72 65 61 74 65 73 20 61 20 74 65 6d 70 6f 72  creates a tempor
0de0: 61 72 79 20 74 61 62 6c 65 20 54 20 74 68 65 6e  ary table T then
0df0: 20 70 72 6f 63 65 73 73 20 42 0a 23 20 63 72 65   process B.# cre
0e00: 61 74 65 73 20 61 20 70 65 72 6d 61 6e 65 6e 74  ates a permanent
0e10: 20 74 61 62 6c 65 20 61 6c 73 6f 20 6e 61 6d 65   table also name
0e20: 64 20 54 2e 20 20 54 68 65 20 74 65 6d 70 20 74  d T.  The temp t
0e30: 61 62 6c 65 20 69 6e 20 70 72 6f 63 65 73 73 20  able in process 
0e40: 41 0a 23 20 68 69 64 65 73 20 74 68 65 20 65 78  A.# hides the ex
0e50: 69 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 70  istance of the p
0e60: 65 72 6d 61 6e 65 6e 74 20 74 61 62 6c 65 2e 0a  ermanent table..
0e70: 23 0a 64 6f 5f 74 65 73 74 20 74 65 6d 70 74 61  #.do_test tempta
0e80: 62 6c 65 2d 34 2e 31 20 7b 0a 20 20 65 78 65 63  ble-4.1 {.  exec
0e90: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
0ea0: 20 54 45 4d 50 20 54 41 42 4c 45 20 74 32 28 78   TEMP TABLE t2(x
0eb0: 2c 79 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  ,y);.    INSERT 
0ec0: 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 31  INTO t2 VALUES(1
0ed0: 30 2c 32 30 29 3b 0a 20 20 20 20 53 45 4c 45 43  0,20);.    SELEC
0ee0: 54 20 2a 20 46 52 4f 4d 20 74 32 3b 0a 20 20 7d  T * FROM t2;.  }
0ef0: 20 64 62 32 0a 7d 20 7b 31 30 20 32 30 7d 0a 64   db2.} {10 20}.d
0f00: 6f 5f 74 65 73 74 20 74 65 6d 70 74 61 62 6c 65  o_test temptable
0f10: 2d 34 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  -4.2 {.  execsql
0f20: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41   {.    CREATE TA
0f30: 42 4c 45 20 74 32 28 78 2c 79 2c 7a 29 3b 0a 20  BLE t2(x,y,z);. 
0f40: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
0f50: 32 20 56 41 4c 55 45 53 28 39 2c 38 2c 37 29 3b  2 VALUES(9,8,7);
0f60: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
0f70: 4f 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b 39 20  OM t2;.  }.} {9 
0f80: 38 20 37 7d 0a 64 6f 5f 74 65 73 74 20 74 65 6d  8 7}.do_test tem
0f90: 70 74 61 62 6c 65 2d 34 2e 33 20 7b 0a 20 20 63  ptable-4.3 {.  c
0fa0: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 53 45  atchsql {.    SE
0fb0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 3b 0a  LECT * FROM t2;.
0fc0: 20 20 7d 20 64 62 32 0a 7d 20 7b 30 20 7b 31 30    } db2.} {0 {10
0fd0: 20 32 30 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 65   20}}.do_test te
0fe0: 6d 70 74 61 62 6c 65 2d 34 2e 34 2e 31 20 7b 0a  mptable-4.4.1 {.
0ff0: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
1000: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
1010: 65 6d 70 2e 74 32 3b 0a 20 20 7d 20 64 62 32 0a  emp.t2;.  } db2.
1020: 7d 20 7b 30 20 7b 31 30 20 32 30 7d 7d 0a 64 6f  } {0 {10 20}}.do
1030: 5f 74 65 73 74 20 74 65 6d 70 74 61 62 6c 65 2d  _test temptable-
1040: 34 2e 34 2e 32 20 7b 0a 20 20 63 61 74 63 68 73  4.4.2 {.  catchs
1050: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
1060: 2a 20 46 52 4f 4d 20 6d 61 69 6e 2e 74 32 3b 0a  * FROM main.t2;.
1070: 20 20 7d 20 64 62 32 0a 7d 20 7b 31 20 7b 6e 6f    } db2.} {1 {no
1080: 20 73 75 63 68 20 74 61 62 6c 65 3a 20 6d 61 69   such table: mai
1090: 6e 2e 74 32 7d 7d 0a 23 64 6f 5f 74 65 73 74 20  n.t2}}.#do_test 
10a0: 74 65 6d 70 74 61 62 6c 65 2d 34 2e 34 2e 33 20  temptable-4.4.3 
10b0: 7b 0a 23 20 20 63 61 74 63 68 73 71 6c 20 7b 0a  {.#  catchsql {.
10c0: 23 20 20 20 20 53 45 4c 45 43 54 20 6e 61 6d 65  #    SELECT name
10d0: 20 46 52 4f 4d 20 6d 61 69 6e 2e 73 71 6c 69 74   FROM main.sqlit
10e0: 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20 74  e_master WHERE t
10f0: 79 70 65 3d 27 74 61 62 6c 65 27 3b 0a 23 20 20  ype='table';.#  
1100: 7d 20 64 62 32 0a 23 7d 20 7b 31 20 7b 64 61 74  } db2.#} {1 {dat
1110: 61 62 61 73 65 20 73 63 68 65 6d 61 20 68 61 73  abase schema has
1120: 20 63 68 61 6e 67 65 64 7d 7d 0a 64 6f 5f 74 65   changed}}.do_te
1130: 73 74 20 74 65 6d 70 74 61 62 6c 65 2d 34 2e 34  st temptable-4.4
1140: 2e 34 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  .4 {.  catchsql 
1150: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 6e 61 6d  {.    SELECT nam
1160: 65 20 46 52 4f 4d 20 6d 61 69 6e 2e 73 71 6c 69  e FROM main.sqli
1170: 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20  te_master WHERE 
1180: 74 79 70 65 3d 27 74 61 62 6c 65 27 3b 0a 20 20  type='table';.  
1190: 7d 20 64 62 32 0a 7d 20 7b 30 20 7b 74 31 20 74  } db2.} {0 {t1 t
11a0: 32 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 65 6d 70  2}}.do_test temp
11b0: 74 61 62 6c 65 2d 34 2e 34 2e 35 20 7b 0a 20 20  table-4.4.5 {.  
11c0: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 53  catchsql {.    S
11d0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 6d 61 69  ELECT * FROM mai
11e0: 6e 2e 74 32 3b 0a 20 20 7d 20 64 62 32 0a 7d 20  n.t2;.  } db2.} 
11f0: 7b 30 20 7b 39 20 38 20 37 7d 7d 0a 64 6f 5f 74  {0 {9 8 7}}.do_t
1200: 65 73 74 20 74 65 6d 70 74 61 62 6c 65 2d 34 2e  est temptable-4.
1210: 34 2e 36 20 7b 0a 20 20 23 20 54 45 4d 50 20 74  4.6 {.  # TEMP t
1220: 61 6b 65 73 20 70 72 65 63 65 64 65 6e 63 65 20  akes precedence 
1230: 6f 76 65 72 20 4d 41 49 4e 0a 20 20 63 61 74 63  over MAIN.  catc
1240: 68 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  hsql {.    SELEC
1250: 54 20 2a 20 46 52 4f 4d 20 74 32 3b 0a 20 20 7d  T * FROM t2;.  }
1260: 20 64 62 32 0a 7d 20 7b 30 20 7b 31 30 20 32 30   db2.} {0 {10 20
1270: 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 65 6d 70 74  }}.do_test tempt
1280: 61 62 6c 65 2d 34 2e 35 20 7b 0a 20 20 63 61 74  able-4.5 {.  cat
1290: 63 68 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50  chsql {.    DROP
12a0: 20 54 41 42 4c 45 20 74 32 3b 20 20 20 20 20 2d   TABLE t2;     -
12b0: 2d 20 73 68 6f 75 6c 64 20 64 72 6f 70 20 54 45  - should drop TE
12c0: 4d 50 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20  MP.    SELECT * 
12d0: 46 52 4f 4d 20 74 32 3b 20 20 2d 2d 20 64 61 74  FROM t2;  -- dat
12e0: 61 20 73 68 6f 75 6c 64 20 62 65 20 66 72 6f 6d  a should be from
12f0: 20 4d 41 49 4e 0a 20 20 7d 20 64 62 32 0a 7d 20   MAIN.  } db2.} 
1300: 7b 30 20 7b 39 20 38 20 37 7d 7d 0a 64 6f 5f 74  {0 {9 8 7}}.do_t
1310: 65 73 74 20 74 65 6d 70 74 61 62 6c 65 2d 34 2e  est temptable-4.
1320: 36 20 7b 0a 20 20 64 62 32 20 63 6c 6f 73 65 0a  6 {.  db2 close.
1330: 20 20 73 71 6c 69 74 65 33 20 64 62 32 20 2e 2f    sqlite3 db2 ./
1340: 74 65 73 74 2e 64 62 0a 20 20 63 61 74 63 68 73  test.db.  catchs
1350: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
1360: 2a 20 46 52 4f 4d 20 74 32 3b 0a 20 20 7d 20 64  * FROM t2;.  } d
1370: 62 32 0a 7d 20 7b 30 20 7b 39 20 38 20 37 7d 7d  b2.} {0 {9 8 7}}
1380: 0a 64 6f 5f 74 65 73 74 20 74 65 6d 70 74 61 62  .do_test temptab
1390: 6c 65 2d 34 2e 37 20 7b 0a 20 20 63 61 74 63 68  le-4.7 {.  catch
13a0: 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20 54  sql {.    DROP T
13b0: 41 42 4c 45 20 74 32 3b 0a 20 20 20 20 53 45 4c  ABLE t2;.    SEL
13c0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 3b 0a 20  ECT * FROM t2;. 
13d0: 20 7d 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75 63 68   }.} {1 {no such
13e0: 20 74 61 62 6c 65 3a 20 74 32 7d 7d 0a 64 6f 5f   table: t2}}.do_
13f0: 74 65 73 74 20 74 65 6d 70 74 61 62 6c 65 2d 34  test temptable-4
1400: 2e 38 20 7b 0a 20 20 64 62 32 20 63 6c 6f 73 65  .8 {.  db2 close
1410: 0a 20 20 73 71 6c 69 74 65 33 20 64 62 32 20 2e  .  sqlite3 db2 .
1420: 2f 74 65 73 74 2e 64 62 0a 20 20 65 78 65 63 73  /test.db.  execs
1430: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
1440: 54 45 4d 50 20 54 41 42 4c 45 20 74 32 28 78 20  TEMP TABLE t2(x 
1450: 75 6e 69 71 75 65 2c 79 29 3b 0a 20 20 20 20 49  unique,y);.    I
1460: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41  NSERT INTO t2 VA
1470: 4c 55 45 53 28 31 2c 32 29 3b 0a 20 20 20 20 53  LUES(1,2);.    S
1480: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 3b  ELECT * FROM t2;
1490: 0a 20 20 7d 20 64 62 32 0a 7d 20 7b 31 20 32 7d  .  } db2.} {1 2}
14a0: 0a 64 6f 5f 74 65 73 74 20 74 65 6d 70 74 61 62  .do_test temptab
14b0: 6c 65 2d 34 2e 39 20 7b 0a 20 20 65 78 65 63 73  le-4.9 {.  execs
14c0: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
14d0: 54 41 42 4c 45 20 74 32 28 78 20 75 6e 69 71 75  TABLE t2(x uniqu
14e0: 65 2c 20 79 29 3b 0a 20 20 20 20 49 4e 53 45 52  e, y);.    INSER
14f0: 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53  T INTO t2 VALUES
1500: 28 33 2c 34 29 3b 0a 20 20 20 20 53 45 4c 45 43  (3,4);.    SELEC
1510: 54 20 2a 20 46 52 4f 4d 20 74 32 3b 0a 20 20 7d  T * FROM t2;.  }
1520: 0a 7d 20 7b 33 20 34 7d 0a 64 6f 5f 74 65 73 74  .} {3 4}.do_test
1530: 20 74 65 6d 70 74 61 62 6c 65 2d 34 2e 31 30 2e   temptable-4.10.
1540: 31 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  1 {.  catchsql {
1550: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
1560: 4f 4d 20 74 32 3b 0a 20 20 7d 20 64 62 32 0a 7d  OM t2;.  } db2.}
1570: 20 7b 30 20 7b 31 20 32 7d 7d 0a 23 20 55 70 64   {0 {1 2}}.# Upd
1580: 61 74 65 3a 20 54 68 65 20 73 63 68 65 6d 61 20  ate: The schema 
1590: 69 73 20 72 65 6c 6f 61 64 65 64 20 69 6e 20 74  is reloaded in t
15a0: 65 73 74 20 74 65 6d 70 74 61 62 6c 65 2d 34 2e  est temptable-4.
15b0: 31 30 2e 31 2e 20 41 6e 64 20 74 63 6c 73 71 6c  10.1. And tclsql
15c0: 69 74 65 2e 63 0a 23 20 20 20 20 20 20 20 20 20  ite.c.#         
15d0: 68 61 6e 64 6c 65 73 20 69 74 20 61 6e 64 20 72  handles it and r
15e0: 65 74 72 69 65 73 20 74 68 65 20 71 75 65 72 79  etries the query
15f0: 20 61 6e 79 77 61 79 2e 0a 23 20 64 6f 5f 74 65   anyway..# do_te
1600: 73 74 20 74 65 6d 70 74 61 62 6c 65 2d 34 2e 31  st temptable-4.1
1610: 30 2e 32 20 7b 0a 23 20 20 20 63 61 74 63 68 73  0.2 {.#   catchs
1620: 71 6c 20 7b 0a 23 20 20 20 20 20 53 45 4c 45 43  ql {.#     SELEC
1630: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
1640: 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20  te_master WHERE 
1650: 74 79 70 65 3d 27 74 61 62 6c 65 27 0a 23 20 20  type='table'.#  
1660: 20 7d 20 64 62 32 0a 23 20 7d 20 7b 31 20 7b 64   } db2.# } {1 {d
1670: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 68  atabase schema h
1680: 61 73 20 63 68 61 6e 67 65 64 7d 7d 0a 64 6f 5f  as changed}}.do_
1690: 74 65 73 74 20 74 65 6d 70 74 61 62 6c 65 2d 34  test temptable-4
16a0: 2e 31 30 2e 33 20 7b 0a 20 20 63 61 74 63 68 73  .10.3 {.  catchs
16b0: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
16c0: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
16d0: 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20 74 79  _master WHERE ty
16e0: 70 65 3d 27 74 61 62 6c 65 27 0a 20 20 7d 20 64  pe='table'.  } d
16f0: 62 32 0a 7d 20 7b 30 20 7b 74 31 20 74 32 7d 7d  b2.} {0 {t1 t2}}
1700: 0a 64 6f 5f 74 65 73 74 20 74 65 6d 70 74 61 62  .do_test temptab
1710: 6c 65 2d 34 2e 31 31 20 7b 0a 20 20 65 78 65 63  le-4.11 {.  exec
1720: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
1730: 20 2a 20 46 52 4f 4d 20 74 32 3b 0a 20 20 7d 20   * FROM t2;.  } 
1740: 64 62 32 0a 7d 20 7b 31 20 32 7d 0a 64 6f 5f 74  db2.} {1 2}.do_t
1750: 65 73 74 20 74 65 6d 70 74 61 62 6c 65 2d 34 2e  est temptable-4.
1760: 31 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  12 {.  execsql {
1770: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
1780: 4f 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b 33 20  OM t2;.  }.} {3 
1790: 34 7d 0a 64 6f 5f 74 65 73 74 20 74 65 6d 70 74  4}.do_test tempt
17a0: 61 62 6c 65 2d 34 2e 31 33 20 7b 0a 20 20 63 61  able-4.13 {.  ca
17b0: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f  tchsql {.    DRO
17c0: 50 20 54 41 42 4c 45 20 74 32 3b 20 20 20 20 20  P TABLE t2;     
17d0: 2d 2d 20 64 72 6f 70 73 20 54 45 4d 50 2e 54 32  -- drops TEMP.T2
17e0: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
17f0: 4f 4d 20 74 32 3b 20 20 2d 2d 20 75 73 65 73 20  OM t2;  -- uses 
1800: 4d 41 49 4e 2e 54 32 0a 20 20 7d 20 64 62 32 0a  MAIN.T2.  } db2.
1810: 7d 20 7b 30 20 7b 33 20 34 7d 7d 0a 64 6f 5f 74  } {0 {3 4}}.do_t
1820: 65 73 74 20 74 65 6d 70 74 61 62 6c 65 2d 34 2e  est temptable-4.
1830: 31 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  14 {.  execsql {
1840: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
1850: 4f 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b 33 20  OM t2;.  }.} {3 
1860: 34 7d 0a 64 6f 5f 74 65 73 74 20 74 65 6d 70 74  4}.do_test tempt
1870: 61 62 6c 65 2d 34 2e 31 35 20 7b 0a 20 20 64 62  able-4.15 {.  db
1880: 32 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65  2 close.  sqlite
1890: 33 20 64 62 32 20 2e 2f 74 65 73 74 2e 64 62 0a  3 db2 ./test.db.
18a0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
18b0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32  SELECT * FROM t2
18c0: 3b 0a 20 20 7d 20 64 62 32 0a 7d 20 7b 33 20 34  ;.  } db2.} {3 4
18d0: 7d 0a 0a 23 20 4e 6f 77 20 63 72 65 61 74 65 20  }..# Now create 
18e0: 61 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  a temporary tabl
18f0: 65 20 69 6e 20 64 62 32 20 61 6e 64 20 61 20 70  e in db2 and a p
1900: 65 72 6d 61 6e 65 6e 74 20 69 6e 64 65 78 20 69  ermanent index i
1910: 6e 20 64 62 2e 20 20 54 68 65 0a 23 20 74 65 6d  n db.  The.# tem
1920: 70 6f 72 61 72 79 20 74 61 62 6c 65 20 69 6e 20  porary table in 
1930: 64 62 32 20 73 68 6f 75 6c 64 20 6d 61 73 6b 20  db2 should mask 
1940: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
1950: 70 65 72 6d 61 6e 65 6e 74 20 69 6e 64 65 78 2c  permanent index,
1960: 0a 23 20 62 75 74 20 74 68 65 20 70 65 72 6d 61  .# but the perma
1970: 6e 65 6e 74 20 69 6e 64 65 78 20 73 68 6f 75 6c  nent index shoul
1980: 64 20 73 74 69 6c 6c 20 62 65 20 61 63 63 65 73  d still be acces
1990: 73 69 62 6c 65 20 61 6e 64 20 73 68 6f 75 6c 64  sible and should
19a0: 20 73 74 69 6c 6c 0a 23 20 62 65 20 75 70 64 61   still.# be upda
19b0: 74 65 64 20 77 68 65 6e 20 69 74 73 20 63 6f 72  ted when its cor
19c0: 72 65 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c 65  responding table
19d0: 20 63 68 61 6e 67 65 73 2e 0a 23 0a 64 6f 5f 74   changes..#.do_t
19e0: 65 73 74 20 74 65 6d 70 74 61 62 6c 65 2d 35 2e  est temptable-5.
19f0: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  1 {.  execsql {.
1a00: 20 20 20 20 43 52 45 41 54 45 20 54 45 4d 50 20      CREATE TEMP 
1a10: 54 41 42 4c 45 20 6d 61 73 6b 28 61 2c 62 2c 63  TABLE mask(a,b,c
1a20: 29 0a 20 20 7d 20 64 62 32 0a 20 20 65 78 65 63  ).  } db2.  exec
1a30: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
1a40: 20 49 4e 44 45 58 20 6d 61 73 6b 20 4f 4e 20 74   INDEX mask ON t
1a50: 32 28 78 29 3b 0a 20 20 20 20 53 45 4c 45 43 54  2(x);.    SELECT
1a60: 20 2a 20 46 52 4f 4d 20 74 32 3b 0a 20 20 7d 0a   * FROM t2;.  }.
1a70: 7d 20 7b 33 20 34 7d 0a 23 64 6f 5f 74 65 73 74  } {3 4}.#do_test
1a80: 20 74 65 6d 70 74 61 62 6c 65 2d 35 2e 32 20 7b   temptable-5.2 {
1a90: 0a 23 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 23  .#  catchsql {.#
1aa0: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
1ab0: 4d 20 74 32 3b 0a 23 20 20 7d 20 64 62 32 0a 23  M t2;.#  } db2.#
1ac0: 7d 20 7b 31 20 7b 64 61 74 61 62 61 73 65 20 73  } {1 {database s
1ad0: 63 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65  chema has change
1ae0: 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 65 6d 70  d}}.do_test temp
1af0: 74 61 62 6c 65 2d 35 2e 33 20 7b 0a 20 20 63 61  table-5.3 {.  ca
1b00: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  tchsql {.    SEL
1b10: 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 3b 0a 20  ECT * FROM t2;. 
1b20: 20 7d 20 64 62 32 0a 7d 20 7b 30 20 7b 33 20 34   } db2.} {0 {3 4
1b30: 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 65 6d 70 74  }}.do_test tempt
1b40: 61 62 6c 65 2d 35 2e 34 20 7b 0a 20 20 65 78 65  able-5.4 {.  exe
1b50: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
1b60: 54 20 79 20 46 52 4f 4d 20 74 32 20 57 48 45 52  T y FROM t2 WHER
1b70: 45 20 78 3d 33 0a 20 20 7d 0a 7d 20 7b 34 7d 0a  E x=3.  }.} {4}.
1b80: 64 6f 5f 74 65 73 74 20 74 65 6d 70 74 61 62 6c  do_test temptabl
1b90: 65 2d 35 2e 35 20 7b 0a 20 20 65 78 65 63 73 71  e-5.5 {.  execsq
1ba0: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 79  l {.    SELECT y
1bb0: 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20 78   FROM t2 WHERE x
1bc0: 3d 33 0a 20 20 7d 20 64 62 32 0a 7d 20 7b 34 7d  =3.  } db2.} {4}
1bd0: 0a 64 6f 5f 74 65 73 74 20 74 65 6d 70 74 61 62  .do_test temptab
1be0: 6c 65 2d 35 2e 36 20 7b 0a 20 20 65 78 65 63 73  le-5.6 {.  execs
1bf0: 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20  ql {.    INSERT 
1c00: 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 31  INTO t2 VALUES(1
1c10: 2c 32 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20  ,2);.    SELECT 
1c20: 79 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20  y FROM t2 WHERE 
1c30: 78 3d 31 3b 0a 20 20 7d 20 64 62 32 0a 7d 20 7b  x=1;.  } db2.} {
1c40: 32 7d 0a 64 6f 5f 74 65 73 74 20 74 65 6d 70 74  2}.do_test tempt
1c50: 61 62 6c 65 2d 35 2e 37 20 7b 0a 20 20 65 78 65  able-5.7 {.  exe
1c60: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
1c70: 54 20 79 20 46 52 4f 4d 20 74 32 20 57 48 45 52  T y FROM t2 WHER
1c80: 45 20 78 3d 33 0a 20 20 7d 20 64 62 32 0a 7d 20  E x=3.  } db2.} 
1c90: 7b 34 7d 0a 64 6f 5f 74 65 73 74 20 74 65 6d 70  {4}.do_test temp
1ca0: 74 61 62 6c 65 2d 35 2e 38 20 7b 0a 20 20 65 78  table-5.8 {.  ex
1cb0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
1cc0: 43 54 20 79 20 46 52 4f 4d 20 74 32 20 57 48 45  CT y FROM t2 WHE
1cd0: 52 45 20 78 3d 31 3b 0a 20 20 7d 0a 7d 20 7b 32  RE x=1;.  }.} {2
1ce0: 7d 0a 64 6f 5f 74 65 73 74 20 74 65 6d 70 74 61  }.do_test tempta
1cf0: 62 6c 65 2d 35 2e 39 20 7b 0a 20 20 65 78 65 63  ble-5.9 {.  exec
1d00: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
1d10: 20 79 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45   y FROM t2 WHERE
1d20: 20 78 3d 33 0a 20 20 7d 0a 7d 20 7b 34 7d 0a 0a   x=3.  }.} {4}..
1d30: 64 62 32 20 63 6c 6f 73 65 0a 0a 23 20 54 65 73  db2 close..# Tes
1d40: 74 20 66 6f 72 20 63 6f 72 72 65 63 74 20 6f 70  t for correct op
1d50: 65 72 61 74 69 6f 6e 20 6f 66 20 72 65 61 64 2d  eration of read-
1d60: 6f 6e 6c 79 20 64 61 74 61 62 61 73 65 73 0a 23  only databases.#
1d70: 0a 64 6f 5f 74 65 73 74 20 74 65 6d 70 74 61 62  .do_test temptab
1d80: 6c 65 2d 36 2e 31 20 7b 0a 20 20 65 78 65 63 73  le-6.1 {.  execs
1d90: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
1da0: 54 41 42 4c 45 20 74 38 28 78 29 3b 0a 20 20 20  TABLE t8(x);.   
1db0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 38 20   INSERT INTO t8 
1dc0: 56 41 4c 55 45 53 28 27 78 79 7a 7a 79 27 29 3b  VALUES('xyzzy');
1dd0: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
1de0: 4f 4d 20 74 38 3b 0a 20 20 7d 0a 7d 20 7b 78 79  OM t8;.  }.} {xy
1df0: 7a 7a 79 7d 0a 64 6f 5f 74 65 73 74 20 74 65 6d  zzy}.do_test tem
1e00: 70 74 61 62 6c 65 2d 36 2e 32 20 7b 0a 20 20 64  ptable-6.2 {.  d
1e10: 62 20 63 6c 6f 73 65 0a 20 20 63 61 74 63 68 20  b close.  catch 
1e20: 7b 66 69 6c 65 20 61 74 74 72 69 62 75 74 65 73  {file attributes
1e30: 20 74 65 73 74 2e 64 62 20 2d 70 65 72 6d 69 73   test.db -permis
1e40: 73 69 6f 6e 73 20 30 34 34 34 7d 0a 20 20 63 61  sions 0444}.  ca
1e50: 74 63 68 20 7b 66 69 6c 65 20 61 74 74 72 69 62  tch {file attrib
1e60: 75 74 65 73 20 74 65 73 74 2e 64 62 20 2d 72 65  utes test.db -re
1e70: 61 64 6f 6e 6c 79 20 31 7d 0a 20 20 73 71 6c 69  adonly 1}.  sqli
1e80: 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20  te3 db test.db. 
1e90: 20 69 66 20 7b 5b 66 69 6c 65 20 77 72 69 74 61   if {[file writa
1ea0: 62 6c 65 20 74 65 73 74 2e 64 62 5d 7d 20 7b 0a  ble test.db]} {.
1eb0: 20 20 20 20 65 72 72 6f 72 20 22 55 6e 61 62 6c      error "Unabl
1ec0: 65 20 74 6f 20 6d 61 6b 65 20 74 68 65 20 64 61  e to make the da
1ed0: 74 61 62 61 73 65 20 66 69 6c 65 20 74 65 73 74  tabase file test
1ee0: 2e 64 62 20 72 65 61 64 6f 6e 6c 79 20 2d 20 72  .db readonly - r
1ef0: 65 72 75 6e 20 74 68 69 73 20 74 65 73 74 20 61  erun this test a
1f00: 73 20 61 6e 20 75 6e 70 72 69 76 69 6c 65 67 65  s an unprivilege
1f10: 64 20 75 73 65 72 22 0a 20 20 7d 0a 20 20 65 78  d user".  }.  ex
1f20: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
1f30: 43 54 20 2a 20 46 52 4f 4d 20 74 38 3b 0a 20 20  CT * FROM t8;.  
1f40: 7d 0a 7d 20 7b 78 79 7a 7a 79 7d 0a 64 6f 5f 74  }.} {xyzzy}.do_t
1f50: 65 73 74 20 74 65 6d 70 74 61 62 6c 65 2d 36 2e  est temptable-6.
1f60: 33 20 7b 0a 20 20 69 66 20 7b 5b 66 69 6c 65 20  3 {.  if {[file 
1f70: 77 72 69 74 61 62 6c 65 20 74 65 73 74 2e 64 62  writable test.db
1f80: 5d 7d 20 7b 0a 20 20 20 20 65 72 72 6f 72 20 22  ]} {.    error "
1f90: 55 6e 61 62 6c 65 20 74 6f 20 6d 61 6b 65 20 74  Unable to make t
1fa0: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
1fb0: 20 74 65 73 74 2e 64 62 20 72 65 61 64 6f 6e 6c   test.db readonl
1fc0: 79 20 2d 20 72 65 72 75 6e 20 74 68 69 73 20 74  y - rerun this t
1fd0: 65 73 74 20 61 73 20 61 6e 20 75 6e 70 72 69 76  est as an unpriv
1fe0: 69 6c 65 67 65 64 20 75 73 65 72 22 0a 20 20 7d  ileged user".  }
1ff0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
2000: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
2010: 39 28 78 2c 79 29 3b 0a 20 20 7d 0a 7d 20 7b 31  9(x,y);.  }.} {1
2020: 20 7b 61 74 74 65 6d 70 74 20 74 6f 20 77 72 69   {attempt to wri
2030: 74 65 20 61 20 72 65 61 64 6f 6e 6c 79 20 64 61  te a readonly da
2040: 74 61 62 61 73 65 7d 7d 0a 64 6f 5f 74 65 73 74  tabase}}.do_test
2050: 20 74 65 6d 70 74 61 62 6c 65 2d 36 2e 34 20 7b   temptable-6.4 {
2060: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
2070: 20 20 43 52 45 41 54 45 20 54 45 4d 50 20 54 41    CREATE TEMP TA
2080: 42 4c 45 20 74 39 28 78 2c 79 29 3b 0a 20 20 7d  BLE t9(x,y);.  }
2090: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
20a0: 74 20 74 65 6d 70 74 61 62 6c 65 2d 36 2e 35 20  t temptable-6.5 
20b0: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  {.  catchsql {. 
20c0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
20d0: 39 20 56 41 4c 55 45 53 28 31 2c 32 29 3b 0a 20  9 VALUES(1,2);. 
20e0: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
20f0: 20 74 39 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 31   t9;.  }.} {0 {1
2100: 20 32 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 65 6d   2}}.do_test tem
2110: 70 74 61 62 6c 65 2d 36 2e 36 20 7b 0a 20 20 69  ptable-6.6 {.  i
2120: 66 20 7b 5b 66 69 6c 65 20 77 72 69 74 61 62 6c  f {[file writabl
2130: 65 20 74 65 73 74 2e 64 62 5d 7d 20 7b 0a 20 20  e test.db]} {.  
2140: 20 20 65 72 72 6f 72 20 22 55 6e 61 62 6c 65 20    error "Unable 
2150: 74 6f 20 6d 61 6b 65 20 74 68 65 20 64 61 74 61  to make the data
2160: 62 61 73 65 20 66 69 6c 65 20 74 65 73 74 2e 64  base file test.d
2170: 62 20 72 65 61 64 6f 6e 6c 79 20 2d 20 72 65 72  b readonly - rer
2180: 75 6e 20 74 68 69 73 20 74 65 73 74 20 61 73 20  un this test as 
2190: 61 6e 20 75 6e 70 72 69 76 69 6c 65 67 65 64 20  an unprivileged 
21a0: 75 73 65 72 22 0a 20 20 7d 0a 20 20 63 61 74 63  user".  }.  catc
21b0: 68 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52  hsql {.    INSER
21c0: 54 20 49 4e 54 4f 20 74 38 20 56 41 4c 55 45 53  T INTO t8 VALUES
21d0: 28 27 68 65 6c 6c 6f 27 29 3b 0a 20 20 20 20 53  ('hello');.    S
21e0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 38 3b  ELECT * FROM t8;
21f0: 0a 20 20 7d 0a 7d 20 7b 31 20 7b 61 74 74 65 6d  .  }.} {1 {attem
2200: 70 74 20 74 6f 20 77 72 69 74 65 20 61 20 72 65  pt to write a re
2210: 61 64 6f 6e 6c 79 20 64 61 74 61 62 61 73 65 7d  adonly database}
2220: 7d 0a 64 6f 5f 74 65 73 74 20 74 65 6d 70 74 61  }.do_test tempta
2230: 62 6c 65 2d 36 2e 37 20 7b 0a 20 20 63 61 74 63  ble-6.7 {.  catc
2240: 68 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  hsql {.    SELEC
2250: 54 20 2a 20 46 52 4f 4d 20 74 38 2c 74 39 3b 0a  T * FROM t8,t9;.
2260: 20 20 7d 0a 7d 20 7b 30 20 7b 78 79 7a 7a 79 20    }.} {0 {xyzzy 
2270: 31 20 32 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 65  1 2}}.do_test te
2280: 6d 70 74 61 62 6c 65 2d 36 2e 38 20 7b 0a 20 20  mptable-6.8 {.  
2290: 64 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74  db close.  sqlit
22a0: 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20  e3 db test.db.  
22b0: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 53  catchsql {.    S
22c0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 38 2c  ELECT * FROM t8,
22d0: 74 39 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 6e 6f  t9;.  }.} {1 {no
22e0: 20 73 75 63 68 20 74 61 62 6c 65 3a 20 74 39 7d   such table: t9}
22f0: 7d 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a     }..finish_test.