/ Hex Artifact Content
Login

Artifact f4ff7d463473e2fe9ea3184867961b15dcce2cc3:


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 41 54 54 41  testing the ATTA
01d0: 43 48 20 61 6e 64 20 44 45 54 41 43 48 20 63 6f  CH and DETACH co
01e0: 6d 6d 61 6e 64 73 0a 23 20 61 6e 64 20 72 65 6c  mmands.# and rel
01f0: 61 74 65 64 20 66 75 6e 63 74 69 6f 6e 61 6c 69  ated functionali
0200: 74 79 2e 0a 23 0a 23 20 24 49 64 3a 20 61 74 74  ty..#.# $Id: att
0210: 61 63 68 2e 74 65 73 74 2c 76 20 31 2e 35 32 20  ach.test,v 1.52 
0220: 32 30 30 39 2f 30 35 2f 32 39 20 31 34 3a 33 39  2009/05/29 14:39
0230: 3a 30 38 20 64 72 68 20 45 78 70 20 24 0a 23 0a  :08 drh Exp $.#.
0240: 0a 73 65 74 20 74 65 73 74 64 69 72 20 5b 66 69  .set testdir [fi
0250: 6c 65 20 64 69 72 6e 61 6d 65 20 24 61 72 67 76  le dirname $argv
0260: 30 5d 0a 73 6f 75 72 63 65 20 24 74 65 73 74 64  0].source $testd
0270: 69 72 2f 74 65 73 74 65 72 2e 74 63 6c 0a 0a 69  ir/tester.tcl..i
0280: 66 63 61 70 61 62 6c 65 20 21 61 74 74 61 63 68  fcapable !attach
0290: 20 7b 0a 20 20 66 69 6e 69 73 68 5f 74 65 73 74   {.  finish_test
02a0: 0a 20 20 72 65 74 75 72 6e 0a 7d 0a 0a 66 6f 72  .  return.}..for
02b0: 20 7b 73 65 74 20 69 20 32 7d 20 7b 24 69 3c 3d   {set i 2} {$i<=
02c0: 31 35 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20  15} {incr i} {. 
02d0: 20 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73   forcedelete tes
02e0: 74 24 69 2e 64 62 0a 20 20 66 6f 72 63 65 64 65  t$i.db.  forcede
02f0: 6c 65 74 65 20 74 65 73 74 24 69 2e 64 62 2d 6a  lete test$i.db-j
0300: 6f 75 72 6e 61 6c 0a 7d 0a 0a 64 6f 5f 74 65 73  ournal.}..do_tes
0310: 74 20 61 74 74 61 63 68 2d 31 2e 31 20 7b 0a 20  t attach-1.1 {. 
0320: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43   execsql {.    C
0330: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61  REATE TABLE t1(a
0340: 2c 62 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  ,b);.    INSERT 
0350: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31  INTO t1 VALUES(1
0360: 2c 32 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  ,2);.    INSERT 
0370: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 33  INTO t1 VALUES(3
0380: 2c 34 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20  ,4);.    SELECT 
0390: 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d  * FROM t1;.  }.}
03a0: 20 7b 31 20 32 20 33 20 34 7d 0a 64 6f 5f 74 65   {1 2 3 4}.do_te
03b0: 73 74 20 61 74 74 61 63 68 2d 31 2e 32 20 7b 0a  st attach-1.2 {.
03c0: 20 20 73 71 6c 69 74 65 33 20 64 62 32 20 74 65    sqlite3 db2 te
03d0: 73 74 32 2e 64 62 0a 20 20 65 78 65 63 73 71 6c  st2.db.  execsql
03e0: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41   {.    CREATE TA
03f0: 42 4c 45 20 74 32 28 78 2c 79 29 3b 0a 20 20 20  BLE t2(x,y);.   
0400: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20   INSERT INTO t2 
0410: 56 41 4c 55 45 53 28 31 2c 27 78 27 29 3b 0a 20  VALUES(1,'x');. 
0420: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
0430: 32 20 56 41 4c 55 45 53 28 32 2c 27 79 27 29 3b  2 VALUES(2,'y');
0440: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
0450: 4f 4d 20 74 32 3b 0a 20 20 7d 20 64 62 32 0a 7d  OM t2;.  } db2.}
0460: 20 7b 31 20 78 20 32 20 79 7d 0a 64 6f 5f 74 65   {1 x 2 y}.do_te
0470: 73 74 20 61 74 74 61 63 68 2d 31 2e 33 20 7b 0a  st attach-1.3 {.
0480: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
0490: 41 54 54 41 43 48 20 44 41 54 41 42 41 53 45 20  ATTACH DATABASE 
04a0: 27 74 65 73 74 32 2e 64 62 27 20 41 53 20 74 77  'test2.db' AS tw
04b0: 6f 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20  o;.    SELECT * 
04c0: 46 52 4f 4d 20 74 77 6f 2e 74 32 3b 0a 20 20 7d  FROM two.t2;.  }
04d0: 0a 7d 20 7b 31 20 78 20 32 20 79 7d 0a 0a 23 20  .} {1 x 2 y}..# 
04e0: 54 65 73 74 73 20 66 6f 72 20 74 68 65 20 73 71  Tests for the sq
04f0: 6c 69 74 65 33 5f 64 62 5f 66 69 6c 65 6e 61 6d  lite3_db_filenam
0500: 65 20 69 6e 74 65 72 66 61 63 65 0a 23 0a 64 6f  e interface.#.do
0510: 5f 74 65 73 74 20 61 74 74 61 63 68 2d 31 2e 33  _test attach-1.3
0520: 2e 31 20 7b 0a 20 20 66 69 6c 65 20 74 61 69 6c  .1 {.  file tail
0530: 20 5b 73 71 6c 69 74 65 33 5f 64 62 5f 66 69 6c   [sqlite3_db_fil
0540: 65 6e 61 6d 65 20 64 62 20 6d 61 69 6e 5d 0a 7d  ename db main].}
0550: 20 7b 74 65 73 74 2e 64 62 7d 0a 64 6f 5f 74 65   {test.db}.do_te
0560: 73 74 20 61 74 74 61 63 68 2d 31 2e 33 2e 32 20  st attach-1.3.2 
0570: 7b 0a 20 20 66 69 6c 65 20 74 61 69 6c 20 5b 73  {.  file tail [s
0580: 71 6c 69 74 65 33 5f 64 62 5f 66 69 6c 65 6e 61  qlite3_db_filena
0590: 6d 65 20 64 62 20 4d 41 49 4e 5d 0a 7d 20 7b 74  me db MAIN].} {t
05a0: 65 73 74 2e 64 62 7d 0a 64 6f 5f 74 65 73 74 20  est.db}.do_test 
05b0: 61 74 74 61 63 68 2d 31 2e 33 2e 33 20 7b 0a 20  attach-1.3.3 {. 
05c0: 20 66 69 6c 65 20 74 61 69 6c 20 5b 73 71 6c 69   file tail [sqli
05d0: 74 65 33 5f 64 62 5f 66 69 6c 65 6e 61 6d 65 20  te3_db_filename 
05e0: 64 62 20 74 65 6d 70 5d 0a 7d 20 7b 7d 0a 64 6f  db temp].} {}.do
05f0: 5f 74 65 73 74 20 61 74 74 61 63 68 2d 31 2e 33  _test attach-1.3
0600: 2e 34 20 7b 0a 20 20 66 69 6c 65 20 74 61 69 6c  .4 {.  file tail
0610: 20 5b 73 71 6c 69 74 65 33 5f 64 62 5f 66 69 6c   [sqlite3_db_fil
0620: 65 6e 61 6d 65 20 64 62 20 74 77 6f 5d 0a 7d 20  ename db two].} 
0630: 7b 74 65 73 74 32 2e 64 62 7d 0a 64 6f 5f 74 65  {test2.db}.do_te
0640: 73 74 20 61 74 74 61 63 68 2d 31 2e 33 2e 35 20  st attach-1.3.5 
0650: 7b 0a 20 20 66 69 6c 65 20 74 61 69 6c 20 5b 73  {.  file tail [s
0660: 71 6c 69 74 65 33 5f 64 62 5f 66 69 6c 65 6e 61  qlite3_db_filena
0670: 6d 65 20 64 62 20 74 68 72 65 65 5d 0a 7d 20 7b  me db three].} {
0680: 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 74 74 61 63  }..do_test attac
0690: 68 2d 31 2e 34 20 7b 0a 20 20 65 78 65 63 73 71  h-1.4 {.  execsq
06a0: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  l {.    SELECT *
06b0: 20 46 52 4f 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20   FROM t2;.  }.} 
06c0: 7b 31 20 78 20 32 20 79 7d 0a 64 6f 5f 74 65 73  {1 x 2 y}.do_tes
06d0: 74 20 61 74 74 61 63 68 2d 31 2e 35 20 7b 0a 20  t attach-1.5 {. 
06e0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44   execsql {.    D
06f0: 45 54 41 43 48 20 44 41 54 41 42 41 53 45 20 74  ETACH DATABASE t
0700: 77 6f 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  wo;.    SELECT *
0710: 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20   FROM t1;.  }.} 
0720: 7b 31 20 32 20 33 20 34 7d 0a 64 6f 5f 74 65 73  {1 2 3 4}.do_tes
0730: 74 20 61 74 74 61 63 68 2d 31 2e 36 20 7b 0a 20  t attach-1.6 {. 
0740: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
0750: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32  SELECT * FROM t2
0760: 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 6e 6f 20 73  ;.  }.} {1 {no s
0770: 75 63 68 20 74 61 62 6c 65 3a 20 74 32 7d 7d 0a  uch table: t2}}.
0780: 64 6f 5f 74 65 73 74 20 61 74 74 61 63 68 2d 31  do_test attach-1
0790: 2e 37 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  .7 {.  catchsql 
07a0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  {.    SELECT * F
07b0: 52 4f 4d 20 74 77 6f 2e 74 32 3b 0a 20 20 7d 0a  ROM two.t2;.  }.
07c0: 7d 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20 74 61  } {1 {no such ta
07d0: 62 6c 65 3a 20 74 77 6f 2e 74 32 7d 7d 0a 64 6f  ble: two.t2}}.do
07e0: 5f 74 65 73 74 20 61 74 74 61 63 68 2d 31 2e 38  _test attach-1.8
07f0: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a   {.  catchsql {.
0800: 20 20 20 20 41 54 54 41 43 48 20 44 41 54 41 42      ATTACH DATAB
0810: 41 53 45 20 27 74 65 73 74 33 2e 64 62 27 20 41  ASE 'test3.db' A
0820: 53 20 74 68 72 65 65 3b 0a 20 20 7d 0a 7d 20 7b  S three;.  }.} {
0830: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 74  0 {}}.do_test at
0840: 74 61 63 68 2d 31 2e 39 20 7b 0a 20 20 63 61 74  tach-1.9 {.  cat
0850: 63 68 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  chsql {.    SELE
0860: 43 54 20 2a 20 46 52 4f 4d 20 74 68 72 65 65 2e  CT * FROM three.
0870: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 0a 20  sqlite_master;. 
0880: 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74   }.} {0 {}}.do_t
0890: 65 73 74 20 61 74 74 61 63 68 2d 31 2e 31 30 20  est attach-1.10 
08a0: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  {.  catchsql {. 
08b0: 20 20 20 44 45 54 41 43 48 20 44 41 54 41 42 41     DETACH DATABA
08c0: 53 45 20 5b 74 68 72 65 65 5d 3b 0a 20 20 7d 0a  SE [three];.  }.
08d0: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
08e0: 20 61 74 74 61 63 68 2d 31 2e 31 31 20 7b 0a 20   attach-1.11 {. 
08f0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 41   execsql {.    A
0900: 54 54 41 43 48 20 27 74 65 73 74 2e 64 62 27 20  TTACH 'test.db' 
0910: 41 53 20 64 62 32 3b 0a 20 20 20 20 41 54 54 41  AS db2;.    ATTA
0920: 43 48 20 27 74 65 73 74 2e 64 62 27 20 41 53 20  CH 'test.db' AS 
0930: 64 62 33 3b 0a 20 20 20 20 41 54 54 41 43 48 20  db3;.    ATTACH 
0940: 27 74 65 73 74 2e 64 62 27 20 41 53 20 64 62 34  'test.db' AS db4
0950: 3b 0a 20 20 20 20 41 54 54 41 43 48 20 27 74 65  ;.    ATTACH 'te
0960: 73 74 2e 64 62 27 20 41 53 20 64 62 35 3b 0a 20  st.db' AS db5;. 
0970: 20 20 20 41 54 54 41 43 48 20 27 74 65 73 74 2e     ATTACH 'test.
0980: 64 62 27 20 41 53 20 64 62 36 3b 0a 20 20 20 20  db' AS db6;.    
0990: 41 54 54 41 43 48 20 27 74 65 73 74 2e 64 62 27  ATTACH 'test.db'
09a0: 20 41 53 20 64 62 37 3b 0a 20 20 20 20 41 54 54   AS db7;.    ATT
09b0: 41 43 48 20 27 74 65 73 74 2e 64 62 27 20 41 53  ACH 'test.db' AS
09c0: 20 64 62 38 3b 0a 20 20 20 20 41 54 54 41 43 48   db8;.    ATTACH
09d0: 20 27 74 65 73 74 2e 64 62 27 20 41 53 20 64 62   'test.db' AS db
09e0: 39 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 70 72 6f 63  9;.  }.} {}.proc
09f0: 20 64 62 5f 6c 69 73 74 20 7b 64 62 7d 20 7b 0a   db_list {db} {.
0a00: 20 20 73 65 74 20 6c 69 73 74 20 7b 7d 0a 20 20    set list {}.  
0a10: 66 6f 72 65 61 63 68 20 7b 69 64 78 20 6e 61 6d  foreach {idx nam
0a20: 65 20 66 69 6c 65 7d 20 5b 65 78 65 63 73 71 6c  e file} [execsql
0a30: 20 7b 50 52 41 47 4d 41 20 64 61 74 61 62 61 73   {PRAGMA databas
0a40: 65 5f 6c 69 73 74 7d 20 24 64 62 5d 20 7b 0a 20  e_list} $db] {. 
0a50: 20 20 20 6c 61 70 70 65 6e 64 20 6c 69 73 74 20     lappend list 
0a60: 24 69 64 78 20 24 6e 61 6d 65 0a 20 20 7d 0a 20  $idx $name.  }. 
0a70: 20 72 65 74 75 72 6e 20 24 6c 69 73 74 0a 7d 0a   return $list.}.
0a80: 69 66 63 61 70 61 62 6c 65 20 73 63 68 65 6d 61  ifcapable schema
0a90: 5f 70 72 61 67 6d 61 73 20 7b 0a 64 6f 5f 74 65  _pragmas {.do_te
0aa0: 73 74 20 61 74 74 61 63 68 2d 31 2e 31 31 62 20  st attach-1.11b 
0ab0: 7b 0a 20 20 64 62 5f 6c 69 73 74 20 64 62 0a 7d  {.  db_list db.}
0ac0: 20 7b 30 20 6d 61 69 6e 20 32 20 64 62 32 20 33   {0 main 2 db2 3
0ad0: 20 64 62 33 20 34 20 64 62 34 20 35 20 64 62 35   db3 4 db4 5 db5
0ae0: 20 36 20 64 62 36 20 37 20 64 62 37 20 38 20 64   6 db6 7 db7 8 d
0af0: 62 38 20 39 20 64 62 39 7d 0a 7d 20 3b 23 20 69  b8 9 db9}.} ;# i
0b00: 66 63 61 70 61 62 6c 65 20 73 63 68 65 6d 61 5f  fcapable schema_
0b10: 70 72 61 67 6d 61 73 20 0a 64 6f 5f 74 65 73 74  pragmas .do_test
0b20: 20 61 74 74 61 63 68 2d 31 2e 31 32 20 7b 0a 20   attach-1.12 {. 
0b30: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
0b40: 41 54 54 41 43 48 20 27 74 65 73 74 2e 64 62 27  ATTACH 'test.db'
0b50: 20 61 73 20 64 62 32 3b 0a 20 20 7d 0a 7d 20 7b   as db2;.  }.} {
0b60: 31 20 7b 64 61 74 61 62 61 73 65 20 64 62 32 20  1 {database db2 
0b70: 69 73 20 61 6c 72 65 61 64 79 20 69 6e 20 75 73  is already in us
0b80: 65 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 74 74 61  e}}.do_test atta
0b90: 63 68 2d 31 2e 31 32 2e 32 20 7b 0a 20 20 64 62  ch-1.12.2 {.  db
0ba0: 20 65 72 72 6f 72 63 6f 64 65 0a 7d 20 7b 31 7d   errorcode.} {1}
0bb0: 0a 64 6f 5f 74 65 73 74 20 61 74 74 61 63 68 2d  .do_test attach-
0bc0: 31 2e 31 33 20 7b 0a 20 20 63 61 74 63 68 73 71  1.13 {.  catchsq
0bd0: 6c 20 7b 0a 20 20 20 20 41 54 54 41 43 48 20 27  l {.    ATTACH '
0be0: 74 65 73 74 2e 64 62 27 20 61 73 20 64 62 35 3b  test.db' as db5;
0bf0: 0a 20 20 7d 0a 7d 20 7b 31 20 7b 64 61 74 61 62  .  }.} {1 {datab
0c00: 61 73 65 20 64 62 35 20 69 73 20 61 6c 72 65 61  ase db5 is alrea
0c10: 64 79 20 69 6e 20 75 73 65 7d 7d 0a 64 6f 5f 74  dy in use}}.do_t
0c20: 65 73 74 20 61 74 74 61 63 68 2d 31 2e 31 34 20  est attach-1.14 
0c30: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  {.  catchsql {. 
0c40: 20 20 20 41 54 54 41 43 48 20 27 74 65 73 74 2e     ATTACH 'test.
0c50: 64 62 27 20 61 73 20 64 62 39 3b 0a 20 20 7d 0a  db' as db9;.  }.
0c60: 7d 20 7b 31 20 7b 64 61 74 61 62 61 73 65 20 64  } {1 {database d
0c70: 62 39 20 69 73 20 61 6c 72 65 61 64 79 20 69 6e  b9 is already in
0c80: 20 75 73 65 7d 7d 0a 64 6f 5f 74 65 73 74 20 61   use}}.do_test a
0c90: 74 74 61 63 68 2d 31 2e 31 35 20 7b 0a 20 20 63  ttach-1.15 {.  c
0ca0: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 41 54  atchsql {.    AT
0cb0: 54 41 43 48 20 27 74 65 73 74 2e 64 62 27 20 61  TACH 'test.db' a
0cc0: 73 20 6d 61 69 6e 3b 0a 20 20 7d 0a 7d 20 7b 31  s main;.  }.} {1
0cd0: 20 7b 64 61 74 61 62 61 73 65 20 6d 61 69 6e 20   {database main 
0ce0: 69 73 20 61 6c 72 65 61 64 79 20 69 6e 20 75 73  is already in us
0cf0: 65 7d 7d 0a 69 66 63 61 70 61 62 6c 65 20 74 65  e}}.ifcapable te
0d00: 6d 70 64 62 20 7b 0a 20 20 64 6f 5f 74 65 73 74  mpdb {.  do_test
0d10: 20 61 74 74 61 63 68 2d 31 2e 31 36 20 7b 0a 20   attach-1.16 {. 
0d20: 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20     catchsql {.  
0d30: 20 20 20 20 41 54 54 41 43 48 20 27 74 65 73 74      ATTACH 'test
0d40: 2e 64 62 27 20 61 73 20 74 65 6d 70 3b 0a 20 20  .db' as temp;.  
0d50: 20 20 7d 0a 20 20 7d 20 7b 31 20 7b 64 61 74 61    }.  } {1 {data
0d60: 62 61 73 65 20 74 65 6d 70 20 69 73 20 61 6c 72  base temp is alr
0d70: 65 61 64 79 20 69 6e 20 75 73 65 7d 7d 0a 7d 0a  eady in use}}.}.
0d80: 64 6f 5f 74 65 73 74 20 61 74 74 61 63 68 2d 31  do_test attach-1
0d90: 2e 31 37 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  .17 {.  catchsql
0da0: 20 7b 0a 20 20 20 20 41 54 54 41 43 48 20 27 74   {.    ATTACH 't
0db0: 65 73 74 2e 64 62 27 20 61 73 20 4d 41 49 4e 3b  est.db' as MAIN;
0dc0: 0a 20 20 7d 0a 7d 20 7b 31 20 7b 64 61 74 61 62  .  }.} {1 {datab
0dd0: 61 73 65 20 4d 41 49 4e 20 69 73 20 61 6c 72 65  ase MAIN is alre
0de0: 61 64 79 20 69 6e 20 75 73 65 7d 7d 0a 64 6f 5f  ady in use}}.do_
0df0: 74 65 73 74 20 61 74 74 61 63 68 2d 31 2e 31 38  test attach-1.18
0e00: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a   {.  catchsql {.
0e10: 20 20 20 20 41 54 54 41 43 48 20 27 74 65 73 74      ATTACH 'test
0e20: 2e 64 62 27 20 61 73 20 64 62 31 30 3b 0a 20 20  .db' as db10;.  
0e30: 20 20 41 54 54 41 43 48 20 27 74 65 73 74 2e 64    ATTACH 'test.d
0e40: 62 27 20 61 73 20 64 62 31 31 3b 0a 20 20 7d 0a  b' as db11;.  }.
0e50: 7d 20 7b 30 20 7b 7d 7d 0a 69 66 20 7b 24 53 51  } {0 {}}.if {$SQ
0e60: 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45  LITE_MAX_ATTACHE
0e70: 44 3d 3d 31 30 7d 20 7b 0a 20 20 64 6f 5f 74 65  D==10} {.  do_te
0e80: 73 74 20 61 74 74 61 63 68 2d 31 2e 31 39 20 7b  st attach-1.19 {
0e90: 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a  .    catchsql {.
0ea0: 20 20 20 20 20 20 41 54 54 41 43 48 20 27 74 65        ATTACH 'te
0eb0: 73 74 2e 64 62 27 20 61 73 20 64 62 31 32 3b 0a  st.db' as db12;.
0ec0: 20 20 20 20 7d 0a 20 20 7d 20 7b 31 20 7b 74 6f      }.  } {1 {to
0ed0: 6f 20 6d 61 6e 79 20 61 74 74 61 63 68 65 64 20  o many attached 
0ee0: 64 61 74 61 62 61 73 65 73 20 2d 20 6d 61 78 20  databases - max 
0ef0: 31 30 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61  10}}.  do_test a
0f00: 74 74 61 63 68 2d 31 2e 31 39 2e 31 20 7b 0a 20  ttach-1.19.1 {. 
0f10: 20 20 20 64 62 20 65 72 72 6f 72 63 6f 64 65 0a     db errorcode.
0f20: 20 20 7d 20 7b 31 7d 0a 7d 0a 64 6f 5f 74 65 73    } {1}.}.do_tes
0f30: 74 20 61 74 74 61 63 68 2d 31 2e 32 30 2e 31 20  t attach-1.20.1 
0f40: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
0f50: 20 20 44 45 54 41 43 48 20 64 62 35 3b 0a 20 20    DETACH db5;.  
0f60: 7d 0a 7d 20 7b 7d 0a 69 66 63 61 70 61 62 6c 65  }.} {}.ifcapable
0f70: 20 73 63 68 65 6d 61 5f 70 72 61 67 6d 61 73 20   schema_pragmas 
0f80: 7b 0a 64 6f 5f 74 65 73 74 20 61 74 74 61 63 68  {.do_test attach
0f90: 2d 31 2e 32 30 2e 32 20 7b 0a 20 20 64 62 5f 6c  -1.20.2 {.  db_l
0fa0: 69 73 74 20 64 62 0a 7d 20 7b 30 20 6d 61 69 6e  ist db.} {0 main
0fb0: 20 32 20 64 62 32 20 33 20 64 62 33 20 34 20 64   2 db2 3 db3 4 d
0fc0: 62 34 20 35 20 64 62 36 20 36 20 64 62 37 20 37  b4 5 db6 6 db7 7
0fd0: 20 64 62 38 20 38 20 64 62 39 20 39 20 64 62 31   db8 8 db9 9 db1
0fe0: 30 20 31 30 20 64 62 31 31 7d 0a 7d 20 3b 23 20  0 10 db11}.} ;# 
0ff0: 69 66 63 61 70 61 62 6c 65 20 73 63 68 65 6d 61  ifcapable schema
1000: 5f 70 72 61 67 6d 61 73 0a 69 6e 74 65 67 72 69  _pragmas.integri
1010: 74 79 5f 63 68 65 63 6b 20 61 74 74 61 63 68 2d  ty_check attach-
1020: 31 2e 32 30 2e 33 0a 69 66 63 61 70 61 62 6c 65  1.20.3.ifcapable
1030: 20 74 65 6d 70 64 62 20 7b 0a 20 20 65 78 65 63   tempdb {.  exec
1040: 73 71 6c 20 7b 73 65 6c 65 63 74 20 2a 20 66 72  sql {select * fr
1050: 6f 6d 20 74 65 6d 70 2e 73 71 6c 69 74 65 5f 6d  om temp.sqlite_m
1060: 61 73 74 65 72 7d 0a 7d 0a 64 6f 5f 74 65 73 74  aster}.}.do_test
1070: 20 61 74 74 61 63 68 2d 31 2e 32 31 20 7b 0a 20   attach-1.21 {. 
1080: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
1090: 41 54 54 41 43 48 20 27 74 65 73 74 2e 64 62 27  ATTACH 'test.db'
10a0: 20 61 73 20 64 62 31 32 3b 0a 20 20 7d 0a 7d 20   as db12;.  }.} 
10b0: 7b 30 20 7b 7d 7d 0a 69 66 20 7b 24 53 51 4c 49  {0 {}}.if {$SQLI
10c0: 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3d  TE_MAX_ATTACHED=
10d0: 3d 31 30 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74  =10} {.  do_test
10e0: 20 61 74 74 61 63 68 2d 31 2e 32 32 20 7b 0a 20   attach-1.22 {. 
10f0: 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20     catchsql {.  
1100: 20 20 20 20 41 54 54 41 43 48 20 27 74 65 73 74      ATTACH 'test
1110: 2e 64 62 27 20 61 73 20 64 62 31 33 3b 0a 20 20  .db' as db13;.  
1120: 20 20 7d 0a 20 20 7d 20 7b 31 20 7b 74 6f 6f 20    }.  } {1 {too 
1130: 6d 61 6e 79 20 61 74 74 61 63 68 65 64 20 64 61  many attached da
1140: 74 61 62 61 73 65 73 20 2d 20 6d 61 78 20 31 30  tabases - max 10
1150: 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 74 74  }}.  do_test att
1160: 61 63 68 2d 31 2e 32 32 2e 31 20 7b 0a 20 20 20  ach-1.22.1 {.   
1170: 20 64 62 20 65 72 72 6f 72 63 6f 64 65 0a 20 20   db errorcode.  
1180: 7d 20 7b 31 7d 0a 7d 0a 64 6f 5f 74 65 73 74 20  } {1}.}.do_test 
1190: 61 74 74 61 63 68 2d 31 2e 32 33 20 7b 0a 20 20  attach-1.23 {.  
11a0: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 44  catchsql {.    D
11b0: 45 54 41 43 48 20 22 64 62 31 34 22 3b 0a 20 20  ETACH "db14";.  
11c0: 7d 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20  }.} {1 {no such 
11d0: 64 61 74 61 62 61 73 65 3a 20 64 62 31 34 7d 7d  database: db14}}
11e0: 0a 64 6f 5f 74 65 73 74 20 61 74 74 61 63 68 2d  .do_test attach-
11f0: 31 2e 32 34 20 7b 0a 20 20 63 61 74 63 68 73 71  1.24 {.  catchsq
1200: 6c 20 7b 0a 20 20 20 20 44 45 54 41 43 48 20 64  l {.    DETACH d
1210: 62 31 32 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d  b12;.  }.} {0 {}
1220: 7d 0a 64 6f 5f 74 65 73 74 20 61 74 74 61 63 68  }.do_test attach
1230: 2d 31 2e 32 35 20 7b 0a 20 20 63 61 74 63 68 73  -1.25 {.  catchs
1240: 71 6c 20 7b 0a 20 20 20 20 44 45 54 41 43 48 20  ql {.    DETACH 
1250: 64 62 31 32 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b  db12;.  }.} {1 {
1260: 6e 6f 20 73 75 63 68 20 64 61 74 61 62 61 73 65  no such database
1270: 3a 20 64 62 31 32 7d 7d 0a 64 6f 5f 74 65 73 74  : db12}}.do_test
1280: 20 61 74 74 61 63 68 2d 31 2e 32 36 20 7b 0a 20   attach-1.26 {. 
1290: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
12a0: 44 45 54 41 43 48 20 6d 61 69 6e 3b 0a 20 20 7d  DETACH main;.  }
12b0: 0a 7d 20 7b 31 20 7b 63 61 6e 6e 6f 74 20 64 65  .} {1 {cannot de
12c0: 74 61 63 68 20 64 61 74 61 62 61 73 65 20 6d 61  tach database ma
12d0: 69 6e 7d 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20  in}}..ifcapable 
12e0: 74 65 6d 70 64 62 20 7b 0a 20 20 64 6f 5f 74 65  tempdb {.  do_te
12f0: 73 74 20 61 74 74 61 63 68 2d 31 2e 32 37 20 7b  st attach-1.27 {
1300: 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a  .    catchsql {.
1310: 20 20 20 20 20 20 44 45 54 41 43 48 20 54 65 6d        DETACH Tem
1320: 70 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 20  p;.    }.  } {1 
1330: 7b 63 61 6e 6e 6f 74 20 64 65 74 61 63 68 20 64  {cannot detach d
1340: 61 74 61 62 61 73 65 20 54 65 6d 70 7d 7d 0a 7d  atabase Temp}}.}
1350: 20 65 6c 73 65 20 7b 0a 20 20 64 6f 5f 74 65 73   else {.  do_tes
1360: 74 20 61 74 74 61 63 68 2d 31 2e 32 37 20 7b 0a  t attach-1.27 {.
1370: 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20      catchsql {. 
1380: 20 20 20 20 20 44 45 54 41 43 48 20 54 65 6d 70       DETACH Temp
1390: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 20 7b  ;.    }.  } {1 {
13a0: 6e 6f 20 73 75 63 68 20 64 61 74 61 62 61 73 65  no such database
13b0: 3a 20 54 65 6d 70 7d 7d 0a 7d 0a 0a 64 6f 5f 74  : Temp}}.}..do_t
13c0: 65 73 74 20 61 74 74 61 63 68 2d 31 2e 32 38 20  est attach-1.28 
13d0: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  {.  catchsql {. 
13e0: 20 20 20 44 45 54 41 43 48 20 64 62 31 31 3b 0a     DETACH db11;.
13f0: 20 20 20 20 44 45 54 41 43 48 20 64 62 31 30 3b      DETACH db10;
1400: 0a 20 20 20 20 44 45 54 41 43 48 20 64 62 39 3b  .    DETACH db9;
1410: 0a 20 20 20 20 44 45 54 41 43 48 20 64 62 38 3b  .    DETACH db8;
1420: 0a 20 20 20 20 44 45 54 41 43 48 20 64 62 37 3b  .    DETACH db7;
1430: 0a 20 20 20 20 44 45 54 41 43 48 20 64 62 36 3b  .    DETACH db6;
1440: 0a 20 20 20 20 44 45 54 41 43 48 20 64 62 34 3b  .    DETACH db4;
1450: 0a 20 20 20 20 44 45 54 41 43 48 20 64 62 33 3b  .    DETACH db3;
1460: 0a 20 20 20 20 44 45 54 41 43 48 20 64 62 32 3b  .    DETACH db2;
1470: 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 69 66  .  }.} {0 {}}.if
1480: 63 61 70 61 62 6c 65 20 73 63 68 65 6d 61 5f 70  capable schema_p
1490: 72 61 67 6d 61 73 20 7b 0a 20 20 69 66 63 61 70  ragmas {.  ifcap
14a0: 61 62 6c 65 20 74 65 6d 70 64 62 20 7b 0a 20 20  able tempdb {.  
14b0: 20 20 64 6f 5f 74 65 73 74 20 61 74 74 61 63 68    do_test attach
14c0: 2d 31 2e 32 39 20 7b 0a 20 20 20 20 20 20 64 62  -1.29 {.      db
14d0: 5f 6c 69 73 74 20 64 62 0a 20 20 20 20 7d 20 7b  _list db.    } {
14e0: 30 20 6d 61 69 6e 20 31 20 74 65 6d 70 7d 0a 20  0 main 1 temp}. 
14f0: 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 64 6f   } else {.    do
1500: 5f 74 65 73 74 20 61 74 74 61 63 68 2d 31 2e 32  _test attach-1.2
1510: 39 20 7b 0a 20 20 20 20 20 20 64 62 5f 6c 69 73  9 {.      db_lis
1520: 74 20 64 62 0a 20 20 20 20 7d 20 7b 30 20 6d 61  t db.    } {0 ma
1530: 69 6e 7d 0a 20 20 7d 0a 7d 20 3b 23 20 69 66 63  in}.  }.} ;# ifc
1540: 61 70 61 62 6c 65 20 73 63 68 65 6d 61 5f 70 72  apable schema_pr
1550: 61 67 6d 61 73 0a 0a 69 66 63 61 70 61 62 6c 65  agmas..ifcapable
1560: 20 7b 74 72 69 67 67 65 72 7d 20 7b 20 20 23 20   {trigger} {  # 
1570: 4f 6e 6c 79 20 64 6f 20 74 68 65 20 66 6f 6c 6c  Only do the foll
1580: 6f 77 69 6e 67 20 74 65 73 74 73 20 69 66 20 74  owing tests if t
1590: 72 69 67 67 65 72 73 20 61 72 65 20 65 6e 61 62  riggers are enab
15a0: 6c 65 64 0a 64 6f 5f 74 65 73 74 20 61 74 74 61  led.do_test atta
15b0: 63 68 2d 32 2e 31 20 7b 0a 20 20 65 78 65 63 73  ch-2.1 {.  execs
15c0: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
15d0: 54 41 42 4c 45 20 74 78 28 78 31 2c 78 32 2c 79  TABLE tx(x1,x2,y
15e0: 31 2c 79 32 29 3b 0a 20 20 20 20 43 52 45 41 54  1,y2);.    CREAT
15f0: 45 20 54 52 49 47 47 45 52 20 72 31 20 41 46 54  E TRIGGER r1 AFT
1600: 45 52 20 55 50 44 41 54 45 20 4f 4e 20 74 32 20  ER UPDATE ON t2 
1610: 46 4f 52 20 45 41 43 48 20 52 4f 57 20 42 45 47  FOR EACH ROW BEG
1620: 49 4e 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20  IN.      INSERT 
1630: 49 4e 54 4f 20 74 78 28 78 31 2c 78 32 2c 79 31  INTO tx(x1,x2,y1
1640: 2c 79 32 29 20 56 41 4c 55 45 53 28 4f 4c 44 2e  ,y2) VALUES(OLD.
1650: 78 2c 4e 45 57 2e 78 2c 4f 4c 44 2e 79 2c 4e 45  x,NEW.x,OLD.y,NE
1660: 57 2e 79 29 3b 0a 20 20 20 20 45 4e 44 3b 0a 20  W.y);.    END;. 
1670: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
1680: 20 74 78 3b 0a 20 20 7d 20 64 62 32 3b 0a 7d 20   tx;.  } db2;.} 
1690: 7b 7d 0a 64 6f 5f 74 65 73 74 20 61 74 74 61 63  {}.do_test attac
16a0: 68 2d 32 2e 32 20 7b 0a 20 20 65 78 65 63 73 71  h-2.2 {.  execsq
16b0: 6c 20 7b 0a 20 20 20 20 55 50 44 41 54 45 20 74  l {.    UPDATE t
16c0: 32 20 53 45 54 20 78 3d 78 2b 31 30 3b 0a 20 20  2 SET x=x+10;.  
16d0: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
16e0: 74 78 3b 0a 20 20 7d 20 64 62 32 3b 0a 7d 20 7b  tx;.  } db2;.} {
16f0: 31 20 31 31 20 78 20 78 20 32 20 31 32 20 79 20  1 11 x x 2 12 y 
1700: 79 7d 0a 64 6f 5f 74 65 73 74 20 61 74 74 61 63  y}.do_test attac
1710: 68 2d 32 2e 33 20 7b 0a 20 20 65 78 65 63 73 71  h-2.3 {.  execsq
1720: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
1730: 41 42 4c 45 20 74 78 28 78 31 2c 78 32 2c 79 31  ABLE tx(x1,x2,y1
1740: 2c 79 32 29 3b 0a 20 20 20 20 53 45 4c 45 43 54  ,y2);.    SELECT
1750: 20 2a 20 46 52 4f 4d 20 74 78 3b 0a 20 20 7d 0a   * FROM tx;.  }.
1760: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 61 74 74  } {}.do_test att
1770: 61 63 68 2d 32 2e 34 20 7b 0a 20 20 65 78 65 63  ach-2.4 {.  exec
1780: 73 71 6c 20 7b 0a 20 20 20 20 41 54 54 41 43 48  sql {.    ATTACH
1790: 20 27 74 65 73 74 32 2e 64 62 27 20 41 53 20 64   'test2.db' AS d
17a0: 62 32 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f  b2;.  }.} {}.do_
17b0: 74 65 73 74 20 61 74 74 61 63 68 2d 32 2e 35 20  test attach-2.5 
17c0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
17d0: 20 20 55 50 44 41 54 45 20 64 62 32 2e 74 32 20    UPDATE db2.t2 
17e0: 53 45 54 20 78 3d 78 2b 31 30 3b 0a 20 20 20 20  SET x=x+10;.    
17f0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 64 62  SELECT * FROM db
1800: 32 2e 74 78 3b 0a 20 20 7d 0a 7d 20 7b 31 20 31  2.tx;.  }.} {1 1
1810: 31 20 78 20 78 20 32 20 31 32 20 79 20 79 20 31  1 x x 2 12 y y 1
1820: 31 20 32 31 20 78 20 78 20 31 32 20 32 32 20 79  1 21 x x 12 22 y
1830: 20 79 7d 0a 64 6f 5f 74 65 73 74 20 61 74 74 61   y}.do_test atta
1840: 63 68 2d 32 2e 36 20 7b 0a 20 20 65 78 65 63 73  ch-2.6 {.  execs
1850: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
1860: 2a 20 46 52 4f 4d 20 6d 61 69 6e 2e 74 78 3b 0a  * FROM main.tx;.
1870: 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74    }.} {}.do_test
1880: 20 61 74 74 61 63 68 2d 32 2e 37 20 7b 0a 20 20   attach-2.7 {.  
1890: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
18a0: 4c 45 43 54 20 74 79 70 65 2c 20 6e 61 6d 65 2c  LECT type, name,
18b0: 20 74 62 6c 5f 6e 61 6d 65 20 46 52 4f 4d 20 64   tbl_name FROM d
18c0: 62 32 2e 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  b2.sqlite_master
18d0: 3b 0a 20 20 7d 0a 7d 20 7b 74 61 62 6c 65 20 74  ;.  }.} {table t
18e0: 32 20 74 32 20 74 61 62 6c 65 20 74 78 20 74 78  2 t2 table tx tx
18f0: 20 74 72 69 67 67 65 72 20 72 31 20 74 32 7d 0a   trigger r1 t2}.
1900: 0a 69 66 63 61 70 61 62 6c 65 20 73 63 68 65 6d  .ifcapable schem
1910: 61 5f 70 72 61 67 6d 61 73 26 26 74 65 6d 70 64  a_pragmas&&tempd
1920: 62 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 61 74  b {.  do_test at
1930: 74 61 63 68 2d 32 2e 38 20 7b 0a 20 20 20 20 64  tach-2.8 {.    d
1940: 62 5f 6c 69 73 74 20 64 62 0a 20 20 7d 20 7b 30  b_list db.  } {0
1950: 20 6d 61 69 6e 20 31 20 74 65 6d 70 20 32 20 64   main 1 temp 2 d
1960: 62 32 7d 0a 7d 20 3b 23 20 69 66 63 61 70 61 62  b2}.} ;# ifcapab
1970: 6c 65 20 73 63 68 65 6d 61 5f 70 72 61 67 6d 61  le schema_pragma
1980: 73 26 26 74 65 6d 70 64 62 0a 69 66 63 61 70 61  s&&tempdb.ifcapa
1990: 62 6c 65 20 73 63 68 65 6d 61 5f 70 72 61 67 6d  ble schema_pragm
19a0: 61 73 26 26 21 74 65 6d 70 64 62 20 7b 0a 20 20  as&&!tempdb {.  
19b0: 64 6f 5f 74 65 73 74 20 61 74 74 61 63 68 2d 32  do_test attach-2
19c0: 2e 38 20 7b 0a 20 20 20 20 64 62 5f 6c 69 73 74  .8 {.    db_list
19d0: 20 64 62 0a 20 20 7d 20 7b 30 20 6d 61 69 6e 20   db.  } {0 main 
19e0: 32 20 64 62 32 7d 0a 7d 20 3b 23 20 69 66 63 61  2 db2}.} ;# ifca
19f0: 70 61 62 6c 65 20 73 63 68 65 6d 61 5f 70 72 61  pable schema_pra
1a00: 67 6d 61 73 26 26 21 74 65 6d 70 64 62 0a 0a 64  gmas&&!tempdb..d
1a10: 6f 5f 74 65 73 74 20 61 74 74 61 63 68 2d 32 2e  o_test attach-2.
1a20: 39 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  9 {.  execsql {.
1a30: 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58      CREATE INDEX
1a40: 20 69 32 20 4f 4e 20 74 32 28 78 29 3b 0a 20 20   i2 ON t2(x);.  
1a50: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
1a60: 74 32 20 57 48 45 52 45 20 78 3e 35 3b 0a 20 20  t2 WHERE x>5;.  
1a70: 7d 20 64 62 32 0a 7d 20 7b 32 31 20 78 20 32 32  } db2.} {21 x 22
1a80: 20 79 7d 0a 64 6f 5f 74 65 73 74 20 61 74 74 61   y}.do_test atta
1a90: 63 68 2d 32 2e 31 30 20 7b 0a 20 20 65 78 65 63  ch-2.10 {.  exec
1aa0: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
1ab0: 20 74 79 70 65 2c 20 6e 61 6d 65 2c 20 74 62 6c   type, name, tbl
1ac0: 5f 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74  _name FROM sqlit
1ad0: 65 5f 6d 61 73 74 65 72 3b 0a 20 20 7d 20 64 62  e_master;.  } db
1ae0: 32 0a 7d 20 7b 74 61 62 6c 65 20 74 32 20 74 32  2.} {table t2 t2
1af0: 20 74 61 62 6c 65 20 74 78 20 74 78 20 74 72 69   table tx tx tri
1b00: 67 67 65 72 20 72 31 20 74 32 20 69 6e 64 65 78  gger r1 t2 index
1b10: 20 69 32 20 74 32 7d 0a 23 64 6f 5f 74 65 73 74   i2 t2}.#do_test
1b20: 20 61 74 74 61 63 68 2d 32 2e 31 31 20 7b 0a 23   attach-2.11 {.#
1b30: 20 20 63 61 74 63 68 73 71 6c 20 7b 20 0a 23 20    catchsql { .# 
1b40: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
1b50: 20 74 32 20 57 48 45 52 45 20 78 3e 35 3b 0a 23   t2 WHERE x>5;.#
1b60: 20 20 7d 0a 23 7d 20 7b 31 20 7b 64 61 74 61 62    }.#} {1 {datab
1b70: 61 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 63  ase schema has c
1b80: 68 61 6e 67 65 64 7d 7d 0a 69 66 63 61 70 61 62  hanged}}.ifcapab
1b90: 6c 65 20 73 63 68 65 6d 61 5f 70 72 61 67 6d 61  le schema_pragma
1ba0: 73 20 7b 0a 20 20 69 66 63 61 70 61 62 6c 65 20  s {.  ifcapable 
1bb0: 74 65 6d 70 64 62 20 7b 0a 20 20 20 20 64 6f 5f  tempdb {.    do_
1bc0: 74 65 73 74 20 61 74 74 61 63 68 2d 32 2e 31 32  test attach-2.12
1bd0: 20 7b 0a 20 20 20 20 20 20 64 62 5f 6c 69 73 74   {.      db_list
1be0: 20 64 62 0a 20 20 20 20 7d 20 7b 30 20 6d 61 69   db.    } {0 mai
1bf0: 6e 20 31 20 74 65 6d 70 20 32 20 64 62 32 7d 0a  n 1 temp 2 db2}.
1c00: 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 64    } else {.    d
1c10: 6f 5f 74 65 73 74 20 61 74 74 61 63 68 2d 32 2e  o_test attach-2.
1c20: 31 32 20 7b 0a 20 20 20 20 20 20 64 62 5f 6c 69  12 {.      db_li
1c30: 73 74 20 64 62 0a 20 20 20 20 7d 20 7b 30 20 6d  st db.    } {0 m
1c40: 61 69 6e 20 32 20 64 62 32 7d 0a 20 20 7d 0a 7d  ain 2 db2}.  }.}
1c50: 20 3b 23 20 69 66 63 61 70 61 62 6c 65 20 73 63   ;# ifcapable sc
1c60: 68 65 6d 61 5f 70 72 61 67 6d 61 73 0a 64 6f 5f  hema_pragmas.do_
1c70: 74 65 73 74 20 61 74 74 61 63 68 2d 32 2e 31 33  test attach-2.13
1c80: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a   {.  catchsql {.
1c90: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
1ca0: 4d 20 74 32 20 57 48 45 52 45 20 78 3e 35 3b 0a  M t2 WHERE x>5;.
1cb0: 20 20 7d 0a 7d 20 7b 30 20 7b 32 31 20 78 20 32    }.} {0 {21 x 2
1cc0: 32 20 79 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 74  2 y}}.do_test at
1cd0: 74 61 63 68 2d 32 2e 31 34 20 7b 0a 20 20 65 78  tach-2.14 {.  ex
1ce0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
1cf0: 43 54 20 74 79 70 65 2c 20 6e 61 6d 65 2c 20 74  CT type, name, t
1d00: 62 6c 5f 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  bl_name FROM sql
1d10: 69 74 65 5f 6d 61 73 74 65 72 3b 0a 20 20 7d 0a  ite_master;.  }.
1d20: 7d 20 7b 74 61 62 6c 65 20 74 31 20 74 31 20 74  } {table t1 t1 t
1d30: 61 62 6c 65 20 74 78 20 74 78 7d 0a 64 6f 5f 74  able tx tx}.do_t
1d40: 65 73 74 20 61 74 74 61 63 68 2d 32 2e 31 35 20  est attach-2.15 
1d50: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
1d60: 20 20 53 45 4c 45 43 54 20 74 79 70 65 2c 20 6e    SELECT type, n
1d70: 61 6d 65 2c 20 74 62 6c 5f 6e 61 6d 65 20 46 52  ame, tbl_name FR
1d80: 4f 4d 20 64 62 32 2e 73 71 6c 69 74 65 5f 6d 61  OM db2.sqlite_ma
1d90: 73 74 65 72 3b 0a 20 20 7d 0a 7d 20 7b 74 61 62  ster;.  }.} {tab
1da0: 6c 65 20 74 32 20 74 32 20 74 61 62 6c 65 20 74  le t2 t2 table t
1db0: 78 20 74 78 20 74 72 69 67 67 65 72 20 72 31 20  x tx trigger r1 
1dc0: 74 32 20 69 6e 64 65 78 20 69 32 20 74 32 7d 0a  t2 index i2 t2}.
1dd0: 64 6f 5f 74 65 73 74 20 61 74 74 61 63 68 2d 32  do_test attach-2
1de0: 2e 31 36 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65  .16 {.  db close
1df0: 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65  .  sqlite3 db te
1e00: 73 74 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20  st.db.  execsql 
1e10: 7b 0a 20 20 20 20 41 54 54 41 43 48 20 27 74 65  {.    ATTACH 'te
1e20: 73 74 32 2e 64 62 27 20 41 53 20 64 62 32 3b 0a  st2.db' AS db2;.
1e30: 20 20 20 20 53 45 4c 45 43 54 20 74 79 70 65 2c      SELECT type,
1e40: 20 6e 61 6d 65 2c 20 74 62 6c 5f 6e 61 6d 65 20   name, tbl_name 
1e50: 46 52 4f 4d 20 64 62 32 2e 73 71 6c 69 74 65 5f  FROM db2.sqlite_
1e60: 6d 61 73 74 65 72 3b 0a 20 20 7d 0a 7d 20 7b 74  master;.  }.} {t
1e70: 61 62 6c 65 20 74 32 20 74 32 20 74 61 62 6c 65  able t2 t2 table
1e80: 20 74 78 20 74 78 20 74 72 69 67 67 65 72 20 72   tx tx trigger r
1e90: 31 20 74 32 20 69 6e 64 65 78 20 69 32 20 74 32  1 t2 index i2 t2
1ea0: 7d 0a 7d 20 3b 23 20 45 6e 64 20 6f 66 20 69 66  }.} ;# End of if
1eb0: 63 61 70 61 62 6c 65 20 7b 74 72 69 67 67 65 72  capable {trigger
1ec0: 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 74 74 61 63  }..do_test attac
1ed0: 68 2d 33 2e 31 20 7b 0a 20 20 64 62 20 63 6c 6f  h-3.1 {.  db clo
1ee0: 73 65 0a 20 20 64 62 32 20 63 6c 6f 73 65 0a 20  se.  db2 close. 
1ef0: 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74   sqlite3 db test
1f00: 2e 64 62 0a 20 20 73 71 6c 69 74 65 33 20 64 62  .db.  sqlite3 db
1f10: 32 20 74 65 73 74 32 2e 64 62 0a 20 20 65 78 65  2 test2.db.  exe
1f20: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
1f30: 54 20 2a 20 46 52 4f 4d 20 74 31 0a 20 20 7d 0a  T * FROM t1.  }.
1f40: 7d 20 7b 31 20 32 20 33 20 34 7d 0a 0a 23 20 49  } {1 2 3 4}..# I
1f50: 66 20 77 65 20 61 72 65 20 74 65 73 74 69 6e 67  f we are testing
1f60: 20 61 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68   a version of th
1f70: 65 20 63 6f 64 65 20 74 68 61 74 20 6c 61 63 6b  e code that lack
1f80: 73 20 74 72 69 67 67 65 72 20 73 75 70 70 6f 72  s trigger suppor
1f90: 74 2c 0a 23 20 61 64 6a 75 73 74 20 74 68 65 20  t,.# adjust the 
1fa0: 64 61 74 61 62 61 73 65 20 63 6f 6e 74 65 6e 74  database content
1fb0: 73 20 73 6f 20 74 68 61 74 20 74 68 65 79 20 61  s so that they a
1fc0: 72 65 20 74 68 65 20 73 61 6d 65 20 69 66 20 74  re the same if t
1fd0: 72 69 67 67 65 72 73 0a 23 20 68 61 64 20 62 65  riggers.# had be
1fe0: 65 6e 20 65 6e 61 62 6c 65 64 2e 0a 69 66 63 61  en enabled..ifca
1ff0: 70 61 62 6c 65 20 7b 21 74 72 69 67 67 65 72 7d  pable {!trigger}
2000: 20 7b 0a 20 20 64 62 32 20 65 76 61 6c 20 7b 0a   {.  db2 eval {.
2010: 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20      DELETE FROM 
2020: 74 32 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  t2;.    INSERT I
2030: 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 32 31  NTO t2 VALUES(21
2040: 2c 20 27 78 27 29 3b 0a 20 20 20 20 49 4e 53 45  , 'x');.    INSE
2050: 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45  RT INTO t2 VALUE
2060: 53 28 32 32 2c 20 27 79 27 29 3b 0a 20 20 20 20  S(22, 'y');.    
2070: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 78 28  CREATE TABLE tx(
2080: 78 31 2c 78 32 2c 79 31 2c 79 32 29 3b 0a 20 20  x1,x2,y1,y2);.  
2090: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 78    INSERT INTO tx
20a0: 20 56 41 4c 55 45 53 28 31 2c 20 31 31 2c 20 27   VALUES(1, 11, '
20b0: 78 27 2c 20 27 78 27 29 3b 0a 20 20 20 20 49 4e  x', 'x');.    IN
20c0: 53 45 52 54 20 49 4e 54 4f 20 74 78 20 56 41 4c  SERT INTO tx VAL
20d0: 55 45 53 28 32 2c 20 31 32 2c 20 27 79 27 2c 20  UES(2, 12, 'y', 
20e0: 27 79 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  'y');.    INSERT
20f0: 20 49 4e 54 4f 20 74 78 20 56 41 4c 55 45 53 28   INTO tx VALUES(
2100: 31 31 2c 20 32 31 2c 20 27 78 27 2c 20 27 78 27  11, 21, 'x', 'x'
2110: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
2120: 54 4f 20 74 78 20 56 41 4c 55 45 53 28 31 32 2c  TO tx VALUES(12,
2130: 20 32 32 2c 20 27 79 27 2c 20 27 79 27 29 3b 0a   22, 'y', 'y');.
2140: 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58      CREATE INDEX
2150: 20 69 32 20 4f 4e 20 74 32 28 78 29 3b 0a 20 20   i2 ON t2(x);.  
2160: 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 74 74  }.}..do_test att
2170: 61 63 68 2d 33 2e 32 20 7b 0a 20 20 63 61 74 63  ach-3.2 {.  catc
2180: 68 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  hsql {.    SELEC
2190: 54 20 2a 20 46 52 4f 4d 20 74 32 0a 20 20 7d 0a  T * FROM t2.  }.
21a0: 7d 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20 74 61  } {1 {no such ta
21b0: 62 6c 65 3a 20 74 32 7d 7d 0a 64 6f 5f 74 65 73  ble: t2}}.do_tes
21c0: 74 20 61 74 74 61 63 68 2d 33 2e 33 20 7b 0a 20  t attach-3.3 {. 
21d0: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
21e0: 41 54 54 41 43 48 20 44 41 54 41 42 41 53 45 20  ATTACH DATABASE 
21f0: 27 74 65 73 74 32 2e 64 62 27 20 41 53 20 64 62  'test2.db' AS db
2200: 32 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20  2;.    SELECT * 
2210: 46 52 4f 4d 20 74 32 0a 20 20 7d 0a 7d 20 7b 30  FROM t2.  }.} {0
2220: 20 7b 32 31 20 78 20 32 32 20 79 7d 7d 0a 0a 23   {21 x 22 y}}..#
2230: 20 45 76 65 6e 20 74 68 6f 75 67 68 20 27 64 62   Even though 'db
2240: 27 20 68 61 73 20 73 74 61 72 74 65 64 20 61 20  ' has started a 
2250: 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 69 74 20  transaction, it 
2260: 73 68 6f 75 6c 64 20 6e 6f 74 20 79 65 74 20 68  should not yet h
2270: 61 76 65 0a 23 20 61 20 6c 6f 63 6b 20 6f 6e 20  ave.# a lock on 
2280: 74 65 73 74 32 2e 64 62 20 73 6f 20 27 64 62 32  test2.db so 'db2
2290: 27 20 73 68 6f 75 6c 64 20 62 65 20 72 65 61 64  ' should be read
22a0: 61 62 6c 65 2e 0a 64 6f 5f 74 65 73 74 20 61 74  able..do_test at
22b0: 74 61 63 68 2d 33 2e 34 20 7b 0a 20 20 65 78 65  tach-3.4 {.  exe
22c0: 63 73 71 6c 20 42 45 47 49 4e 0a 20 20 63 61 74  csql BEGIN.  cat
22d0: 63 68 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  chsql {.    SELE
22e0: 43 54 20 2a 20 46 52 4f 4d 20 74 32 3b 0a 20 20  CT * FROM t2;.  
22f0: 7d 20 64 62 32 3b 0a 7d 20 7b 30 20 7b 32 31 20  } db2;.} {0 {21 
2300: 78 20 32 32 20 79 7d 7d 0a 0a 23 20 52 65 61 64  x 22 y}}..# Read
2310: 69 6e 67 20 66 72 6f 6d 20 74 65 73 74 32 2e 64  ing from test2.d
2320: 62 20 66 72 6f 6d 20 64 62 20 77 69 74 68 69 6e  b from db within
2330: 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73   a transaction s
2340: 68 6f 75 6c 64 20 6e 6f 74 0a 23 20 70 72 65 76  hould not.# prev
2350: 65 6e 74 20 74 65 73 74 32 2e 64 62 20 66 72 6f  ent test2.db fro
2360: 6d 20 62 65 69 6e 67 20 72 65 61 64 20 62 79 20  m being read by 
2370: 64 62 32 2e 0a 64 6f 5f 74 65 73 74 20 61 74 74  db2..do_test att
2380: 61 63 68 2d 33 2e 35 20 7b 0a 20 20 65 78 65 63  ach-3.5 {.  exec
2390: 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52  sql {SELECT * FR
23a0: 4f 4d 20 74 32 7d 0a 20 20 63 61 74 63 68 73 71  OM t2}.  catchsq
23b0: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  l {.    SELECT *
23c0: 20 46 52 4f 4d 20 74 32 3b 0a 20 20 7d 20 64 62   FROM t2;.  } db
23d0: 32 3b 0a 7d 20 7b 30 20 7b 32 31 20 78 20 32 32  2;.} {0 {21 x 22
23e0: 20 79 7d 7d 0a 0a 23 20 4d 61 6b 69 6e 67 20 61   y}}..# Making a
23f0: 20 63 68 61 6e 67 65 20 74 6f 20 74 65 73 74 32   change to test2
2400: 2e 64 62 20 74 68 72 6f 75 67 68 20 64 62 20 20  .db through db  
2410: 63 61 75 73 65 73 20 74 65 73 74 32 2e 64 62 20  causes test2.db 
2420: 74 6f 20 67 65 74 0a 23 20 61 20 72 65 73 65 72  to get.# a reser
2430: 76 65 64 20 6c 6f 63 6b 2e 20 20 49 74 20 73 68  ved lock.  It sh
2440: 6f 75 6c 64 20 73 74 69 6c 6c 20 62 65 20 61 63  ould still be ac
2450: 63 65 73 73 69 62 6c 65 20 74 68 72 6f 75 67 68  cessible through
2460: 20 64 62 32 2e 0a 64 6f 5f 74 65 73 74 20 61 74   db2..do_test at
2470: 74 61 63 68 2d 33 2e 36 20 7b 0a 20 20 65 78 65  tach-3.6 {.  exe
2480: 63 73 71 6c 20 7b 0a 20 20 20 20 55 50 44 41 54  csql {.    UPDAT
2490: 45 20 74 32 20 53 45 54 20 78 3d 78 2b 31 20 57  E t2 SET x=x+1 W
24a0: 48 45 52 45 20 78 3d 35 30 3b 0a 20 20 7d 0a 20  HERE x=50;.  }. 
24b0: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
24c0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32  SELECT * FROM t2
24d0: 3b 0a 20 20 7d 20 64 62 32 3b 0a 7d 20 7b 30 20  ;.  } db2;.} {0 
24e0: 7b 32 31 20 78 20 32 32 20 79 7d 7d 0a 0a 64 6f  {21 x 22 y}}..do
24f0: 5f 74 65 73 74 20 61 74 74 61 63 68 2d 33 2e 37  _test attach-3.7
2500: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 52 4f 4c   {.  execsql ROL
2510: 4c 42 41 43 4b 0a 20 20 65 78 65 63 73 71 6c 20  LBACK.  execsql 
2520: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
2530: 32 7d 20 64 62 32 0a 7d 20 7b 32 31 20 78 20 32  2} db2.} {21 x 2
2540: 32 20 79 7d 0a 0a 23 20 53 74 61 72 74 20 74 72  2 y}..# Start tr
2550: 61 6e 73 61 63 74 69 6f 6e 73 20 6f 6e 20 62 6f  ansactions on bo
2560: 74 68 20 64 62 20 61 6e 64 20 64 62 32 2e 20 20  th db and db2.  
2570: 4f 6e 63 65 20 61 67 61 69 6e 2c 20 6a 75 73 74  Once again, just
2580: 20 62 65 63 61 75 73 65 0a 23 20 77 65 20 6d 61   because.# we ma
2590: 6b 65 20 61 20 63 68 61 6e 67 65 20 74 6f 20 74  ke a change to t
25a0: 65 73 74 32 2e 64 62 20 75 73 69 6e 67 20 64 62  est2.db using db
25b0: 32 2c 20 6f 6e 6c 79 20 61 20 52 45 53 45 52 56  2, only a RESERV
25c0: 45 44 20 6c 6f 63 6b 20 69 73 0a 23 20 6f 62 74  ED lock is.# obt
25d0: 61 69 6e 65 64 2c 20 73 6f 20 74 65 73 74 32 2e  ained, so test2.
25e0: 64 62 20 73 68 6f 75 6c 64 20 73 74 69 6c 6c 20  db should still 
25f0: 62 65 20 72 65 61 64 61 62 6c 65 20 75 73 69 6e  be readable usin
2600: 67 20 64 62 2e 0a 23 0a 64 6f 5f 74 65 73 74 20  g db..#.do_test 
2610: 61 74 74 61 63 68 2d 33 2e 38 20 7b 0a 20 20 65  attach-3.8 {.  e
2620: 78 65 63 73 71 6c 20 42 45 47 49 4e 0a 20 20 65  xecsql BEGIN.  e
2630: 78 65 63 73 71 6c 20 42 45 47 49 4e 20 64 62 32  xecsql BEGIN db2
2640: 0a 20 20 65 78 65 63 73 71 6c 20 7b 55 50 44 41  .  execsql {UPDA
2650: 54 45 20 74 32 20 53 45 54 20 78 3d 30 20 57 48  TE t2 SET x=0 WH
2660: 45 52 45 20 30 7d 20 64 62 32 0a 20 20 63 61 74  ERE 0} db2.  cat
2670: 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20  chsql {SELECT * 
2680: 46 52 4f 4d 20 74 32 7d 0a 7d 20 7b 30 20 7b 32  FROM t2}.} {0 {2
2690: 31 20 78 20 32 32 20 79 7d 7d 0a 0a 23 20 49 74  1 x 22 y}}..# It
26a0: 20 69 73 20 61 6c 73 6f 20 73 74 69 6c 6c 20 61   is also still a
26b0: 63 63 65 73 73 69 62 6c 65 20 66 72 6f 6d 20 64  ccessible from d
26c0: 62 32 2e 0a 64 6f 5f 74 65 73 74 20 61 74 74 61  b2..do_test atta
26d0: 63 68 2d 33 2e 39 20 7b 0a 20 20 63 61 74 63 68  ch-3.9 {.  catch
26e0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52  sql {SELECT * FR
26f0: 4f 4d 20 74 32 7d 20 64 62 32 0a 7d 20 7b 30 20  OM t2} db2.} {0 
2700: 7b 32 31 20 78 20 32 32 20 79 7d 7d 0a 0a 64 6f  {21 x 22 y}}..do
2710: 5f 74 65 73 74 20 61 74 74 61 63 68 2d 33 2e 31  _test attach-3.1
2720: 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  0 {.  execsql {S
2730: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 7d  ELECT * FROM t1}
2740: 0a 7d 20 7b 31 20 32 20 33 20 34 7d 0a 0a 64 6f  .} {1 2 3 4}..do
2750: 5f 74 65 73 74 20 61 74 74 61 63 68 2d 33 2e 31  _test attach-3.1
2760: 31 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  1 {.  catchsql {
2770: 55 50 44 41 54 45 20 74 31 20 53 45 54 20 61 3d  UPDATE t1 SET a=
2780: 61 2b 31 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f  a+1}.} {0 {}}.do
2790: 5f 74 65 73 74 20 61 74 74 61 63 68 2d 33 2e 31  _test attach-3.1
27a0: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  2 {.  execsql {S
27b0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 7d  ELECT * FROM t1}
27c0: 0a 7d 20 7b 32 20 32 20 34 20 34 7d 0a 0a 23 20  .} {2 2 4 4}..# 
27d0: 64 62 32 20 68 61 73 20 61 20 52 45 53 45 52 56  db2 has a RESERV
27e0: 45 44 20 6c 6f 63 6b 20 6f 6e 20 74 65 73 74 32  ED lock on test2
27f0: 2e 64 62 2c 20 73 6f 20 64 62 20 63 61 6e 6e 6f  .db, so db canno
2800: 74 20 77 72 69 74 65 20 74 6f 20 61 6e 79 20 74  t write to any t
2810: 61 62 6c 65 73 0a 23 20 69 6e 20 74 65 73 74 32  ables.# in test2
2820: 2e 64 62 2e 0a 64 6f 5f 74 65 73 74 20 61 74 74  .db..do_test att
2830: 61 63 68 2d 33 2e 31 33 20 7b 0a 20 20 63 61 74  ach-3.13 {.  cat
2840: 63 68 73 71 6c 20 7b 55 50 44 41 54 45 20 74 32  chsql {UPDATE t2
2850: 20 53 45 54 20 78 3d 78 2b 31 20 57 48 45 52 45   SET x=x+1 WHERE
2860: 20 78 3d 35 30 7d 0a 7d 20 7b 31 20 7b 64 61 74   x=50}.} {1 {dat
2870: 61 62 61 73 65 20 69 73 20 6c 6f 63 6b 65 64 7d  abase is locked}
2880: 7d 0a 0a 23 20 43 68 61 6e 67 65 20 66 6f 72 20  }..# Change for 
2890: 76 65 72 73 69 6f 6e 20 33 2e 20 54 72 61 6e 73  version 3. Trans
28a0: 61 63 74 69 6f 6e 20 69 73 20 6e 6f 20 6c 6f 6e  action is no lon
28b0: 67 65 72 20 72 6f 6c 6c 65 64 20 62 61 63 6b 0a  ger rolled back.
28c0: 23 20 66 6f 72 20 61 20 6c 6f 63 6b 65 64 20 64  # for a locked d
28d0: 61 74 61 62 61 73 65 2e 0a 65 78 65 63 73 71 6c  atabase..execsql
28e0: 20 7b 52 4f 4c 4c 42 41 43 4b 7d 0a 0a 23 20 64   {ROLLBACK}..# d
28f0: 62 20 69 73 20 61 62 6c 65 20 74 6f 20 72 65 72  b is able to rer
2900: 65 61 64 20 69 74 73 20 73 63 68 65 6d 61 20 62  ead its schema b
2910: 65 63 61 75 73 65 20 64 62 32 20 73 74 69 6c 6c  ecause db2 still
2920: 20 6f 6e 6c 79 20 68 6f 6c 64 73 20 61 0a 23 20   only holds a.# 
2930: 72 65 73 65 72 76 65 64 20 6c 6f 63 6b 2e 0a 64  reserved lock..d
2940: 6f 5f 74 65 73 74 20 61 74 74 61 63 68 2d 33 2e  o_test attach-3.
2950: 31 34 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  14 {.  catchsql 
2960: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
2970: 31 7d 0a 7d 20 7b 30 20 7b 31 20 32 20 33 20 34  1}.} {0 {1 2 3 4
2980: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 74 74 61 63  }}.do_test attac
2990: 68 2d 33 2e 31 35 20 7b 0a 20 20 65 78 65 63 73  h-3.15 {.  execs
29a0: 71 6c 20 43 4f 4d 4d 49 54 20 64 62 32 0a 20 20  ql COMMIT db2.  
29b0: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
29c0: 2a 20 46 52 4f 4d 20 74 31 7d 0a 7d 20 7b 31 20  * FROM t1}.} {1 
29d0: 32 20 33 20 34 7d 0a 0a 23 20 54 69 63 6b 65 74  2 3 4}..# Ticket
29e0: 20 23 33 32 33 0a 64 6f 5f 74 65 73 74 20 61 74   #323.do_test at
29f0: 74 61 63 68 2d 34 2e 31 20 7b 0a 20 20 65 78 65  tach-4.1 {.  exe
2a00: 63 73 71 6c 20 7b 44 45 54 41 43 48 20 64 62 32  csql {DETACH db2
2a10: 7d 0a 20 20 64 62 32 20 63 6c 6f 73 65 0a 20 20  }.  db2 close.  
2a20: 73 71 6c 69 74 65 33 20 64 62 32 20 74 65 73 74  sqlite3 db2 test
2a30: 32 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b  2.db.  execsql {
2a40: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
2a50: 45 20 74 33 28 78 2c 79 29 3b 0a 20 20 20 20 43  E t3(x,y);.    C
2a60: 52 45 41 54 45 20 55 4e 49 51 55 45 20 49 4e 44  REATE UNIQUE IND
2a70: 45 58 20 74 33 69 31 20 4f 4e 20 74 33 28 78 29  EX t3i1 ON t3(x)
2a80: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
2a90: 4f 20 74 33 20 56 41 4c 55 45 53 28 31 2c 32 29  O t3 VALUES(1,2)
2aa0: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ;.    SELECT * F
2ab0: 52 4f 4d 20 74 33 3b 0a 20 20 7d 20 64 62 32 3b  ROM t3;.  } db2;
2ac0: 0a 7d 20 7b 31 20 32 7d 0a 64 6f 5f 74 65 73 74  .} {1 2}.do_test
2ad0: 20 61 74 74 61 63 68 2d 34 2e 32 20 7b 0a 20 20   attach-4.2 {.  
2ae0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52  execsql {.    CR
2af0: 45 41 54 45 20 54 41 42 4c 45 20 74 33 28 61 2c  EATE TABLE t3(a,
2b00: 62 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 55  b);.    CREATE U
2b10: 4e 49 51 55 45 20 49 4e 44 45 58 20 74 33 69 31  NIQUE INDEX t3i1
2b20: 62 20 4f 4e 20 74 33 28 61 29 3b 0a 20 20 20 20  b ON t3(a);.    
2b30: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20 56  INSERT INTO t3 V
2b40: 41 4c 55 45 53 28 39 2c 31 30 29 3b 0a 20 20 20  ALUES(9,10);.   
2b50: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
2b60: 33 3b 0a 20 20 7d 0a 7d 20 7b 39 20 31 30 7d 0a  3;.  }.} {9 10}.
2b70: 64 6f 5f 74 65 73 74 20 61 74 74 61 63 68 2d 34  do_test attach-4
2b80: 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .3 {.  execsql {
2b90: 0a 20 20 20 20 41 54 54 41 43 48 20 44 41 54 41  .    ATTACH DATA
2ba0: 42 41 53 45 20 27 74 65 73 74 32 2e 64 62 27 20  BASE 'test2.db' 
2bb0: 41 53 20 64 62 32 3b 0a 20 20 20 20 53 45 4c 45  AS db2;.    SELE
2bc0: 43 54 20 2a 20 46 52 4f 4d 20 64 62 32 2e 74 33  CT * FROM db2.t3
2bd0: 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 7d 0a 64 6f  ;.  }.} {1 2}.do
2be0: 5f 74 65 73 74 20 61 74 74 61 63 68 2d 34 2e 34  _test attach-4.4
2bf0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
2c00: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
2c10: 20 6d 61 69 6e 2e 74 33 3b 0a 20 20 7d 0a 7d 20   main.t3;.  }.} 
2c20: 7b 39 20 31 30 7d 0a 64 6f 5f 74 65 73 74 20 61  {9 10}.do_test a
2c30: 74 74 61 63 68 2d 34 2e 35 20 7b 0a 20 20 65 78  ttach-4.5 {.  ex
2c40: 65 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45  ecsql {.    INSE
2c50: 52 54 20 49 4e 54 4f 20 64 62 32 2e 74 33 20 56  RT INTO db2.t3 V
2c60: 41 4c 55 45 53 28 39 2c 31 30 29 3b 0a 20 20 20  ALUES(9,10);.   
2c70: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 64   SELECT * FROM d
2c80: 62 32 2e 74 33 3b 0a 20 20 7d 0a 7d 20 7b 31 20  b2.t3;.  }.} {1 
2c90: 32 20 39 20 31 30 7d 0a 65 78 65 63 73 71 6c 20  2 9 10}.execsql 
2ca0: 7b 0a 20 20 44 45 54 41 43 48 20 64 62 32 3b 0a  {.  DETACH db2;.
2cb0: 7d 0a 69 66 63 61 70 61 62 6c 65 20 7b 74 72 69  }.ifcapable {tri
2cc0: 67 67 65 72 7d 20 7b 0a 20 20 64 6f 5f 74 65 73  gger} {.  do_tes
2cd0: 74 20 61 74 74 61 63 68 2d 34 2e 36 20 7b 0a 20  t attach-4.6 {. 
2ce0: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
2cf0: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
2d00: 74 34 28 78 29 3b 0a 20 20 20 20 20 20 43 52 45  t4(x);.      CRE
2d10: 41 54 45 20 54 52 49 47 47 45 52 20 74 33 72 33  ATE TRIGGER t3r3
2d20: 20 41 46 54 45 52 20 49 4e 53 45 52 54 20 4f 4e   AFTER INSERT ON
2d30: 20 74 33 20 42 45 47 49 4e 0a 20 20 20 20 20 20   t3 BEGIN.      
2d40: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34    INSERT INTO t4
2d50: 20 56 41 4c 55 45 53 28 27 64 62 32 2e 27 20 7c   VALUES('db2.' |
2d60: 7c 20 4e 45 57 2e 78 29 3b 0a 20 20 20 20 20 20  | NEW.x);.      
2d70: 45 4e 44 3b 0a 20 20 20 20 20 20 49 4e 53 45 52  END;.      INSER
2d80: 54 20 49 4e 54 4f 20 74 33 20 56 41 4c 55 45 53  T INTO t3 VALUES
2d90: 28 36 2c 37 29 3b 0a 20 20 20 20 20 20 53 45 4c  (6,7);.      SEL
2da0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 34 3b 0a 20  ECT * FROM t4;. 
2db0: 20 20 20 7d 20 64 62 32 0a 20 20 7d 20 7b 64 62     } db2.  } {db
2dc0: 32 2e 36 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61  2.6}.  do_test a
2dd0: 74 74 61 63 68 2d 34 2e 37 20 7b 0a 20 20 20 20  ttach-4.7 {.    
2de0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
2df0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 34 28  CREATE TABLE t4(
2e00: 79 29 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45  y);.      CREATE
2e10: 20 54 52 49 47 47 45 52 20 74 33 72 33 20 41 46   TRIGGER t3r3 AF
2e20: 54 45 52 20 49 4e 53 45 52 54 20 4f 4e 20 74 33  TER INSERT ON t3
2e30: 20 42 45 47 49 4e 0a 20 20 20 20 20 20 20 20 49   BEGIN.        I
2e40: 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20 56 41  NSERT INTO t4 VA
2e50: 4c 55 45 53 28 27 6d 61 69 6e 2e 27 20 7c 7c 20  LUES('main.' || 
2e60: 4e 45 57 2e 61 29 3b 0a 20 20 20 20 20 20 45 4e  NEW.a);.      EN
2e70: 44 3b 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20  D;.      INSERT 
2e80: 49 4e 54 4f 20 6d 61 69 6e 2e 74 33 20 56 41 4c  INTO main.t3 VAL
2e90: 55 45 53 28 31 31 2c 31 32 29 3b 0a 20 20 20 20  UES(11,12);.    
2ea0: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
2eb0: 6d 61 69 6e 2e 74 34 3b 0a 20 20 20 20 7d 0a 20  main.t4;.    }. 
2ec0: 20 7d 20 7b 6d 61 69 6e 2e 31 31 7d 0a 7d 0a 69   } {main.11}.}.i
2ed0: 66 63 61 70 61 62 6c 65 20 7b 21 74 72 69 67 67  fcapable {!trigg
2ee0: 65 72 7d 20 7b 0a 20 20 23 20 57 68 65 6e 20 77  er} {.  # When w
2ef0: 65 20 64 6f 20 6e 6f 74 20 68 61 76 65 20 74 72  e do not have tr
2f00: 69 67 67 65 72 20 73 75 70 70 6f 72 74 2c 20 73  igger support, s
2f10: 65 74 20 75 70 20 74 68 65 20 74 61 62 6c 65 20  et up the table 
2f20: 6c 69 6b 65 20 74 68 65 79 0a 20 20 23 20 77 6f  like they.  # wo
2f30: 75 6c 64 20 68 61 76 65 20 62 65 65 6e 20 68 61  uld have been ha
2f40: 64 20 74 72 69 67 67 65 72 73 20 62 65 65 6e 20  d triggers been 
2f50: 74 68 65 72 65 2e 20 20 54 68 65 20 74 65 73 74  there.  The test
2f60: 73 20 74 68 61 74 20 66 6f 6c 6c 6f 77 20 6e 65  s that follow ne
2f70: 65 64 0a 20 20 23 20 74 68 69 73 20 73 65 74 75  ed.  # this setu
2f80: 70 2e 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  p..  execsql {. 
2f90: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
2fa0: 74 34 28 78 29 3b 0a 20 20 20 20 49 4e 53 45 52  t4(x);.    INSER
2fb0: 54 20 49 4e 54 4f 20 74 33 20 56 41 4c 55 45 53  T INTO t3 VALUES
2fc0: 28 36 2c 37 29 3b 0a 20 20 20 20 49 4e 53 45 52  (6,7);.    INSER
2fd0: 54 20 49 4e 54 4f 20 74 34 20 56 41 4c 55 45 53  T INTO t4 VALUES
2fe0: 28 27 64 62 32 2e 36 27 29 3b 0a 20 20 20 20 49  ('db2.6');.    I
2ff0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20 56 41  NSERT INTO t4 VA
3000: 4c 55 45 53 28 27 64 62 32 2e 31 33 27 29 3b 0a  LUES('db2.13');.
3010: 20 20 7d 20 64 62 32 0a 20 20 65 78 65 63 73 71    } db2.  execsq
3020: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
3030: 41 42 4c 45 20 74 34 28 79 29 3b 0a 20 20 20 20  ABLE t4(y);.    
3040: 49 4e 53 45 52 54 20 49 4e 54 4f 20 6d 61 69 6e  INSERT INTO main
3050: 2e 74 33 20 56 41 4c 55 45 53 28 31 31 2c 31 32  .t3 VALUES(11,12
3060: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
3070: 54 4f 20 74 34 20 56 41 4c 55 45 53 28 27 6d 61  TO t4 VALUES('ma
3080: 69 6e 2e 31 31 27 29 3b 0a 20 20 7d 0a 7d 0a 0a  in.11');.  }.}..
3090: 0a 23 20 54 68 69 73 20 6f 6e 65 20 69 73 20 74  .# This one is t
30a0: 72 69 63 6b 79 2e 20 20 4f 6e 20 74 68 65 20 55  ricky.  On the U
30b0: 4e 49 4f 4e 20 41 4c 4c 20 73 65 6c 65 63 74 2c  NION ALL select,
30c0: 20 77 65 20 68 61 76 65 20 74 6f 20 6d 61 6b 65   we have to make
30d0: 20 73 75 72 65 0a 23 20 74 68 65 20 73 63 68 65   sure.# the sche
30e0: 6d 61 20 66 6f 72 20 62 6f 74 68 20 6d 61 69 6e  ma for both main
30f0: 20 61 6e 64 20 64 62 32 20 69 73 20 76 61 6c 69   and db2 is vali
3100: 64 20 62 65 66 6f 72 65 20 73 74 61 72 74 69 6e  d before startin
3110: 67 20 74 6f 20 65 78 65 63 75 74 65 0a 23 20 74  g to execute.# t
3120: 68 65 20 66 69 72 73 74 20 71 75 65 72 79 20 6f  he first query o
3130: 66 20 74 68 65 20 55 4e 49 4f 4e 20 41 4c 4c 2e  f the UNION ALL.
3140: 20 20 49 66 20 77 65 20 77 61 69 74 20 74 6f 20    If we wait to 
3150: 74 65 73 74 20 74 68 65 20 76 61 6c 69 64 69 74  test the validit
3160: 79 20 6f 66 0a 23 20 74 68 65 20 73 63 68 65 6d  y of.# the schem
3170: 61 20 66 6f 72 20 6d 61 69 6e 20 75 6e 74 69 6c  a for main until
3180: 20 61 66 74 65 72 20 74 68 65 20 66 69 72 73 74   after the first
3190: 20 71 75 65 72 79 20 68 61 73 20 72 75 6e 2c 20   query has run, 
31a0: 74 68 61 74 20 74 65 73 74 20 77 69 6c 6c 0a 23  that test will.#
31b0: 20 66 61 69 6c 20 61 6e 64 20 74 68 65 20 71 75   fail and the qu
31c0: 65 72 79 20 77 69 6c 6c 20 61 62 6f 72 74 20 62  ery will abort b
31d0: 75 74 20 77 65 20 77 69 6c 6c 20 68 61 76 65 20  ut we will have 
31e0: 61 6c 72 65 61 64 79 20 6f 75 74 70 75 74 20 73  already output s
31f0: 6f 6d 65 0a 23 20 72 65 73 75 6c 74 73 2e 20 20  ome.# results.  
3200: 57 68 65 6e 20 74 68 65 20 71 75 65 72 79 20 69  When the query i
3210: 73 20 72 65 74 72 69 65 64 2c 20 74 68 65 20 72  s retried, the r
3220: 65 73 75 6c 74 73 20 77 69 6c 6c 20 62 65 20 72  esults will be r
3230: 65 70 65 61 74 65 64 2e 0a 23 0a 69 66 63 61 70  epeated..#.ifcap
3240: 61 62 6c 65 20 63 6f 6d 70 6f 75 6e 64 20 7b 0a  able compound {.
3250: 64 6f 5f 74 65 73 74 20 61 74 74 61 63 68 2d 34  do_test attach-4
3260: 2e 38 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .8 {.  execsql {
3270: 0a 20 20 20 20 41 54 54 41 43 48 20 44 41 54 41  .    ATTACH DATA
3280: 42 41 53 45 20 27 74 65 73 74 32 2e 64 62 27 20  BASE 'test2.db' 
3290: 41 53 20 64 62 32 3b 0a 20 20 20 20 49 4e 53 45  AS db2;.    INSE
32a0: 52 54 20 49 4e 54 4f 20 64 62 32 2e 74 33 20 56  RT INTO db2.t3 V
32b0: 41 4c 55 45 53 28 31 33 2c 31 34 29 3b 0a 20 20  ALUES(13,14);.  
32c0: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
32d0: 64 62 32 2e 74 34 20 55 4e 49 4f 4e 20 41 4c 4c  db2.t4 UNION ALL
32e0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 6d   SELECT * FROM m
32f0: 61 69 6e 2e 74 34 3b 0a 20 20 7d 0a 7d 20 7b 64  ain.t4;.  }.} {d
3300: 62 32 2e 36 20 64 62 32 2e 31 33 20 6d 61 69 6e  b2.6 db2.13 main
3310: 2e 31 31 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 74  .11}..do_test at
3320: 74 61 63 68 2d 34 2e 39 20 7b 0a 20 20 69 66 63  tach-4.9 {.  ifc
3330: 61 70 61 62 6c 65 20 7b 21 74 72 69 67 67 65 72  apable {!trigger
3340: 7d 20 7b 65 78 65 63 73 71 6c 20 7b 49 4e 53 45  } {execsql {INSE
3350: 52 54 20 49 4e 54 4f 20 6d 61 69 6e 2e 74 34 20  RT INTO main.t4 
3360: 56 41 4c 55 45 53 28 27 6d 61 69 6e 2e 31 35 27  VALUES('main.15'
3370: 29 7d 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  )}}.  execsql {.
3380: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
3390: 6d 61 69 6e 2e 74 33 20 56 41 4c 55 45 53 28 31  main.t3 VALUES(1
33a0: 35 2c 31 36 29 3b 0a 20 20 20 20 53 45 4c 45 43  5,16);.    SELEC
33b0: 54 20 2a 20 46 52 4f 4d 20 64 62 32 2e 74 34 20  T * FROM db2.t4 
33c0: 55 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43 54  UNION ALL SELECT
33d0: 20 2a 20 46 52 4f 4d 20 6d 61 69 6e 2e 74 34 3b   * FROM main.t4;
33e0: 0a 20 20 7d 0a 7d 20 7b 64 62 32 2e 36 20 64 62  .  }.} {db2.6 db
33f0: 32 2e 31 33 20 6d 61 69 6e 2e 31 31 20 6d 61 69  2.13 main.11 mai
3400: 6e 2e 31 35 7d 0a 7d 20 3b 23 20 69 66 63 61 70  n.15}.} ;# ifcap
3410: 61 62 6c 65 20 63 6f 6d 70 6f 75 6e 64 0a 0a 69  able compound..i
3420: 66 63 61 70 61 62 6c 65 20 21 63 6f 6d 70 6f 75  fcapable !compou
3430: 6e 64 20 7b 0a 20 20 69 66 63 61 70 61 62 6c 65  nd {.  ifcapable
3440: 20 7b 21 74 72 69 67 67 65 72 7d 20 7b 65 78 65   {!trigger} {exe
3450: 63 73 71 6c 20 7b 49 4e 53 45 52 54 20 49 4e 54  csql {INSERT INT
3460: 4f 20 6d 61 69 6e 2e 74 34 20 56 41 4c 55 45 53  O main.t4 VALUES
3470: 28 27 6d 61 69 6e 2e 31 35 27 29 7d 7d 0a 20 20  ('main.15')}}.  
3480: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 41 54  execsql {.    AT
3490: 54 41 43 48 20 44 41 54 41 42 41 53 45 20 27 74  TACH DATABASE 't
34a0: 65 73 74 32 2e 64 62 27 20 41 53 20 64 62 32 3b  est2.db' AS db2;
34b0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
34c0: 20 64 62 32 2e 74 33 20 56 41 4c 55 45 53 28 31   db2.t3 VALUES(1
34d0: 33 2c 31 34 29 3b 0a 20 20 20 20 49 4e 53 45 52  3,14);.    INSER
34e0: 54 20 49 4e 54 4f 20 6d 61 69 6e 2e 74 33 20 56  T INTO main.t3 V
34f0: 41 4c 55 45 53 28 31 35 2c 31 36 29 3b 0a 20 20  ALUES(15,16);.  
3500: 7d 20 0a 7d 20 3b 23 20 69 66 63 61 70 61 62 6c  } .} ;# ifcapabl
3510: 65 20 21 63 6f 6d 70 6f 75 6e 64 0a 0a 69 66 63  e !compound..ifc
3520: 61 70 61 62 6c 65 20 76 69 65 77 20 7b 0a 64 6f  apable view {.do
3530: 5f 74 65 73 74 20 61 74 74 61 63 68 2d 34 2e 31  _test attach-4.1
3540: 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  0 {.  execsql {.
3550: 20 20 20 20 44 45 54 41 43 48 20 44 41 54 41 42      DETACH DATAB
3560: 41 53 45 20 64 62 32 3b 0a 20 20 7d 0a 20 20 65  ASE db2;.  }.  e
3570: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45  xecsql {.    CRE
3580: 41 54 45 20 56 49 45 57 20 76 33 20 41 53 20 53  ATE VIEW v3 AS S
3590: 45 4c 45 43 54 20 78 2a 31 30 30 2b 79 20 46 52  ELECT x*100+y FR
35a0: 4f 4d 20 74 33 3b 0a 20 20 20 20 53 45 4c 45 43  OM t3;.    SELEC
35b0: 54 20 2a 20 46 52 4f 4d 20 76 33 3b 0a 20 20 7d  T * FROM v3;.  }
35c0: 20 64 62 32 0a 7d 20 7b 31 30 32 20 39 31 30 20   db2.} {102 910 
35d0: 36 30 37 20 31 33 31 34 7d 0a 64 6f 5f 74 65 73  607 1314}.do_tes
35e0: 74 20 61 74 74 61 63 68 2d 34 2e 31 31 20 7b 0a  t attach-4.11 {.
35f0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
3600: 43 52 45 41 54 45 20 56 49 45 57 20 76 33 20 41  CREATE VIEW v3 A
3610: 53 20 53 45 4c 45 43 54 20 61 2a 31 30 30 2b 62  S SELECT a*100+b
3620: 20 46 52 4f 4d 20 74 33 3b 0a 20 20 20 20 53 45   FROM t3;.    SE
3630: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 76 33 3b 0a  LECT * FROM v3;.
3640: 20 20 7d 0a 7d 20 7b 39 31 30 20 31 31 31 32 20    }.} {910 1112 
3650: 31 35 31 36 7d 0a 64 6f 5f 74 65 73 74 20 61 74  1516}.do_test at
3660: 74 61 63 68 2d 34 2e 31 32 20 7b 0a 20 20 65 78  tach-4.12 {.  ex
3670: 65 63 73 71 6c 20 7b 0a 20 20 20 20 41 54 54 41  ecsql {.    ATTA
3680: 43 48 20 44 41 54 41 42 41 53 45 20 27 74 65 73  CH DATABASE 'tes
3690: 74 32 2e 64 62 27 20 41 53 20 64 62 32 3b 0a 20  t2.db' AS db2;. 
36a0: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
36b0: 20 64 62 32 2e 76 33 3b 0a 20 20 7d 0a 7d 20 7b   db2.v3;.  }.} {
36c0: 31 30 32 20 39 31 30 20 36 30 37 20 31 33 31 34  102 910 607 1314
36d0: 7d 0a 64 6f 5f 74 65 73 74 20 61 74 74 61 63 68  }.do_test attach
36e0: 2d 34 2e 31 33 20 7b 0a 20 20 65 78 65 63 73 71  -4.13 {.  execsq
36f0: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  l {.    SELECT *
3700: 20 46 52 4f 4d 20 6d 61 69 6e 2e 76 33 3b 0a 20   FROM main.v3;. 
3710: 20 7d 0a 7d 20 7b 39 31 30 20 31 31 31 32 20 31   }.} {910 1112 1
3720: 35 31 36 7d 0a 7d 20 3b 23 20 69 66 63 61 70 61  516}.} ;# ifcapa
3730: 62 6c 65 20 76 69 65 77 0a 0a 23 20 54 65 73 74  ble view..# Test
3740: 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65  s for the sqlite
3750: 46 69 78 2e 2e 2e 28 29 20 72 6f 75 74 69 6e 65  Fix...() routine
3760: 73 20 69 6e 20 61 74 74 61 63 68 2e 63 0a 23 0a  s in attach.c.#.
3770: 69 66 63 61 70 61 62 6c 65 20 7b 74 72 69 67 67  ifcapable {trigg
3780: 65 72 7d 20 7b 0a 64 6f 5f 74 65 73 74 20 61 74  er} {.do_test at
3790: 74 61 63 68 2d 35 2e 31 20 7b 0a 20 20 64 62 20  tach-5.1 {.  db 
37a0: 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 20  close.  sqlite3 
37b0: 64 62 20 74 65 73 74 2e 64 62 0a 20 20 64 62 32  db test.db.  db2
37c0: 20 63 6c 6f 73 65 0a 20 20 66 6f 72 63 65 64 65   close.  forcede
37d0: 6c 65 74 65 20 74 65 73 74 32 2e 64 62 0a 20 20  lete test2.db.  
37e0: 73 71 6c 69 74 65 33 20 64 62 32 20 74 65 73 74  sqlite3 db2 test
37f0: 32 2e 64 62 0a 20 20 63 61 74 63 68 73 71 6c 20  2.db.  catchsql 
3800: 7b 0a 20 20 20 20 41 54 54 41 43 48 20 44 41 54  {.    ATTACH DAT
3810: 41 42 41 53 45 20 27 74 65 73 74 2e 64 62 27 20  ABASE 'test.db' 
3820: 41 53 20 6f 72 69 67 3b 0a 20 20 20 20 43 52 45  AS orig;.    CRE
3830: 41 54 45 20 54 52 49 47 47 45 52 20 72 31 20 41  ATE TRIGGER r1 A
3840: 46 54 45 52 20 49 4e 53 45 52 54 20 4f 4e 20 6f  FTER INSERT ON o
3850: 72 69 67 2e 74 31 20 42 45 47 49 4e 0a 20 20 20  rig.t1 BEGIN.   
3860: 20 20 20 53 45 4c 45 43 54 20 27 6e 6f 2d 6f 70     SELECT 'no-op
3870: 27 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 7d 20  ';.    END;.  } 
3880: 64 62 32 0a 7d 20 7b 31 20 7b 74 72 69 67 67 65  db2.} {1 {trigge
3890: 72 20 72 31 20 63 61 6e 6e 6f 74 20 72 65 66 65  r r1 cannot refe
38a0: 72 65 6e 63 65 20 6f 62 6a 65 63 74 73 20 69 6e  rence objects in
38b0: 20 64 61 74 61 62 61 73 65 20 6f 72 69 67 7d 7d   database orig}}
38c0: 0a 64 6f 5f 74 65 73 74 20 61 74 74 61 63 68 2d  .do_test attach-
38d0: 35 2e 32 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  5.2 {.  catchsql
38e0: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41   {.    CREATE TA
38f0: 42 4c 45 20 74 35 28 78 2c 79 29 3b 0a 20 20 20  BLE t5(x,y);.   
3900: 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20   CREATE TRIGGER 
3910: 72 35 20 41 46 54 45 52 20 49 4e 53 45 52 54 20  r5 AFTER INSERT 
3920: 4f 4e 20 74 35 20 42 45 47 49 4e 0a 20 20 20 20  ON t5 BEGIN.    
3930: 20 20 53 45 4c 45 43 54 20 27 6e 6f 2d 6f 70 27    SELECT 'no-op'
3940: 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 7d 20 64  ;.    END;.  } d
3950: 62 32 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74  b2.} {0 {}}.do_t
3960: 65 73 74 20 61 74 74 61 63 68 2d 35 2e 33 20 7b  est attach-5.3 {
3970: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
3980: 20 20 44 52 4f 50 20 54 52 49 47 47 45 52 20 72    DROP TRIGGER r
3990: 35 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 52  5;.    CREATE TR
39a0: 49 47 47 45 52 20 72 35 20 41 46 54 45 52 20 49  IGGER r5 AFTER I
39b0: 4e 53 45 52 54 20 4f 4e 20 74 35 20 42 45 47 49  NSERT ON t5 BEGI
39c0: 4e 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 27  N.      SELECT '
39d0: 6e 6f 2d 6f 70 27 20 46 52 4f 4d 20 6f 72 69 67  no-op' FROM orig
39e0: 2e 74 31 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20  .t1;.    END;.  
39f0: 7d 20 64 62 32 0a 7d 20 7b 31 20 7b 74 72 69 67  } db2.} {1 {trig
3a00: 67 65 72 20 72 35 20 63 61 6e 6e 6f 74 20 72 65  ger r5 cannot re
3a10: 66 65 72 65 6e 63 65 20 6f 62 6a 65 63 74 73 20  ference objects 
3a20: 69 6e 20 64 61 74 61 62 61 73 65 20 6f 72 69 67  in database orig
3a30: 7d 7d 0a 69 66 63 61 70 61 62 6c 65 20 74 65 6d  }}.ifcapable tem
3a40: 70 64 62 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  pdb {.  do_test 
3a50: 61 74 74 61 63 68 2d 35 2e 34 20 7b 0a 20 20 20  attach-5.4 {.   
3a60: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
3a70: 20 20 43 52 45 41 54 45 20 54 45 4d 50 20 54 41    CREATE TEMP TA
3a80: 42 4c 45 20 74 36 28 70 2c 71 2c 72 29 3b 0a 20  BLE t6(p,q,r);. 
3a90: 20 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47       CREATE TRIG
3aa0: 47 45 52 20 72 35 20 41 46 54 45 52 20 49 4e 53  GER r5 AFTER INS
3ab0: 45 52 54 20 4f 4e 20 74 35 20 42 45 47 49 4e 0a  ERT ON t5 BEGIN.
3ac0: 20 20 20 20 20 20 20 20 53 45 4c 45 43 54 20 27          SELECT '
3ad0: 6e 6f 2d 6f 70 27 20 46 52 4f 4d 20 74 65 6d 70  no-op' FROM temp
3ae0: 2e 74 36 3b 0a 20 20 20 20 20 20 45 4e 44 3b 0a  .t6;.      END;.
3af0: 20 20 20 20 7d 20 64 62 32 0a 20 20 7d 20 7b 31      } db2.  } {1
3b00: 20 7b 74 72 69 67 67 65 72 20 72 35 20 63 61 6e   {trigger r5 can
3b10: 6e 6f 74 20 72 65 66 65 72 65 6e 63 65 20 6f 62  not reference ob
3b20: 6a 65 63 74 73 20 69 6e 20 64 61 74 61 62 61 73  jects in databas
3b30: 65 20 74 65 6d 70 7d 7d 0a 7d 0a 69 66 63 61 70  e temp}}.}.ifcap
3b40: 61 62 6c 65 20 73 75 62 71 75 65 72 79 20 7b 0a  able subquery {.
3b50: 20 20 64 6f 5f 74 65 73 74 20 61 74 74 61 63 68    do_test attach
3b60: 2d 35 2e 35 20 7b 0a 20 20 20 20 63 61 74 63 68  -5.5 {.    catch
3b70: 73 71 6c 20 7b 0a 20 20 20 20 20 20 43 52 45 41  sql {.      CREA
3b80: 54 45 20 54 52 49 47 47 45 52 20 72 35 20 41 46  TE TRIGGER r5 AF
3b90: 54 45 52 20 49 4e 53 45 52 54 20 4f 4e 20 74 35  TER INSERT ON t5
3ba0: 20 42 45 47 49 4e 0a 20 20 20 20 20 20 20 20 53   BEGIN.        S
3bb0: 45 4c 45 43 54 20 27 6e 6f 2d 6f 70 27 20 7c 7c  ELECT 'no-op' ||
3bc0: 20 28 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   (SELECT * FROM 
3bd0: 74 65 6d 70 2e 74 36 29 3b 0a 20 20 20 20 20 20  temp.t6);.      
3be0: 45 4e 44 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20  END;.    } db2. 
3bf0: 20 7d 20 7b 31 20 7b 74 72 69 67 67 65 72 20 72   } {1 {trigger r
3c00: 35 20 63 61 6e 6e 6f 74 20 72 65 66 65 72 65 6e  5 cannot referen
3c10: 63 65 20 6f 62 6a 65 63 74 73 20 69 6e 20 64 61  ce objects in da
3c20: 74 61 62 61 73 65 20 74 65 6d 70 7d 7d 0a 20 20  tabase temp}}.  
3c30: 64 6f 5f 74 65 73 74 20 61 74 74 61 63 68 2d 35  do_test attach-5
3c40: 2e 36 20 7b 0a 20 20 20 20 63 61 74 63 68 73 71  .6 {.    catchsq
3c50: 6c 20 7b 0a 20 20 20 20 20 20 43 52 45 41 54 45  l {.      CREATE
3c60: 20 54 52 49 47 47 45 52 20 72 35 20 41 46 54 45   TRIGGER r5 AFTE
3c70: 52 20 49 4e 53 45 52 54 20 4f 4e 20 74 35 20 42  R INSERT ON t5 B
3c80: 45 47 49 4e 0a 20 20 20 20 20 20 20 20 53 45 4c  EGIN.        SEL
3c90: 45 43 54 20 27 6e 6f 2d 6f 70 27 20 46 52 4f 4d  ECT 'no-op' FROM
3ca0: 20 74 31 20 57 48 45 52 45 20 78 3c 28 53 45 4c   t1 WHERE x<(SEL
3cb0: 45 43 54 20 6d 69 6e 28 78 29 20 46 52 4f 4d 20  ECT min(x) FROM 
3cc0: 74 65 6d 70 2e 74 36 29 3b 0a 20 20 20 20 20 20  temp.t6);.      
3cd0: 45 4e 44 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20  END;.    } db2. 
3ce0: 20 7d 20 7b 31 20 7b 74 72 69 67 67 65 72 20 72   } {1 {trigger r
3cf0: 35 20 63 61 6e 6e 6f 74 20 72 65 66 65 72 65 6e  5 cannot referen
3d00: 63 65 20 6f 62 6a 65 63 74 73 20 69 6e 20 64 61  ce objects in da
3d10: 74 61 62 61 73 65 20 74 65 6d 70 7d 7d 0a 20 20  tabase temp}}.  
3d20: 64 6f 5f 74 65 73 74 20 61 74 74 61 63 68 2d 35  do_test attach-5
3d30: 2e 37 20 7b 0a 20 20 20 20 63 61 74 63 68 73 71  .7 {.    catchsq
3d40: 6c 20 7b 0a 20 20 20 20 20 20 43 52 45 41 54 45  l {.      CREATE
3d50: 20 54 52 49 47 47 45 52 20 72 35 20 41 46 54 45   TRIGGER r5 AFTE
3d60: 52 20 49 4e 53 45 52 54 20 4f 4e 20 74 35 20 42  R INSERT ON t5 B
3d70: 45 47 49 4e 0a 20 20 20 20 20 20 20 20 53 45 4c  EGIN.        SEL
3d80: 45 43 54 20 27 6e 6f 2d 6f 70 27 20 46 52 4f 4d  ECT 'no-op' FROM
3d90: 20 74 31 20 47 52 4f 55 50 20 42 59 20 31 20 48   t1 GROUP BY 1 H
3da0: 41 56 49 4e 47 20 78 3c 28 53 45 4c 45 43 54 20  AVING x<(SELECT 
3db0: 6d 69 6e 28 78 29 20 46 52 4f 4d 20 74 65 6d 70  min(x) FROM temp
3dc0: 2e 74 36 29 3b 0a 20 20 20 20 20 20 45 4e 44 3b  .t6);.      END;
3dd0: 0a 20 20 20 20 7d 20 64 62 32 0a 20 20 7d 20 7b  .    } db2.  } {
3de0: 31 20 7b 74 72 69 67 67 65 72 20 72 35 20 63 61  1 {trigger r5 ca
3df0: 6e 6e 6f 74 20 72 65 66 65 72 65 6e 63 65 20 6f  nnot reference o
3e00: 62 6a 65 63 74 73 20 69 6e 20 64 61 74 61 62 61  bjects in databa
3e10: 73 65 20 74 65 6d 70 7d 7d 0a 20 20 64 6f 5f 74  se temp}}.  do_t
3e20: 65 73 74 20 61 74 74 61 63 68 2d 35 2e 37 20 7b  est attach-5.7 {
3e30: 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a  .    catchsql {.
3e40: 20 20 20 20 20 20 43 52 45 41 54 45 20 54 52 49        CREATE TRI
3e50: 47 47 45 52 20 72 35 20 41 46 54 45 52 20 49 4e  GGER r5 AFTER IN
3e60: 53 45 52 54 20 4f 4e 20 74 35 20 42 45 47 49 4e  SERT ON t5 BEGIN
3e70: 0a 20 20 20 20 20 20 20 20 53 45 4c 45 43 54 20  .        SELECT 
3e80: 6d 61 78 28 31 2c 78 2c 28 53 45 4c 45 43 54 20  max(1,x,(SELECT 
3e90: 6d 69 6e 28 78 29 20 46 52 4f 4d 20 74 65 6d 70  min(x) FROM temp
3ea0: 2e 74 36 29 29 20 46 52 4f 4d 20 74 31 3b 0a 20  .t6)) FROM t1;. 
3eb0: 20 20 20 20 20 45 4e 44 3b 0a 20 20 20 20 7d 20       END;.    } 
3ec0: 64 62 32 0a 20 20 7d 20 7b 31 20 7b 74 72 69 67  db2.  } {1 {trig
3ed0: 67 65 72 20 72 35 20 63 61 6e 6e 6f 74 20 72 65  ger r5 cannot re
3ee0: 66 65 72 65 6e 63 65 20 6f 62 6a 65 63 74 73 20  ference objects 
3ef0: 69 6e 20 64 61 74 61 62 61 73 65 20 74 65 6d 70  in database temp
3f00: 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 74 74  }}.  do_test att
3f10: 61 63 68 2d 35 2e 38 20 7b 0a 20 20 20 20 63 61  ach-5.8 {.    ca
3f20: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20 43  tchsql {.      C
3f30: 52 45 41 54 45 20 54 52 49 47 47 45 52 20 72 35  REATE TRIGGER r5
3f40: 20 41 46 54 45 52 20 49 4e 53 45 52 54 20 4f 4e   AFTER INSERT ON
3f50: 20 74 35 20 42 45 47 49 4e 0a 20 20 20 20 20 20   t5 BEGIN.      
3f60: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
3f70: 20 56 41 4c 55 45 53 28 28 53 45 4c 45 43 54 20   VALUES((SELECT 
3f80: 6d 69 6e 28 78 29 20 46 52 4f 4d 20 74 65 6d 70  min(x) FROM temp
3f90: 2e 74 36 29 2c 35 29 3b 0a 20 20 20 20 20 20 45  .t6),5);.      E
3fa0: 4e 44 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20 20  ND;.    } db2.  
3fb0: 7d 20 7b 31 20 7b 74 72 69 67 67 65 72 20 72 35  } {1 {trigger r5
3fc0: 20 63 61 6e 6e 6f 74 20 72 65 66 65 72 65 6e 63   cannot referenc
3fd0: 65 20 6f 62 6a 65 63 74 73 20 69 6e 20 64 61 74  e objects in dat
3fe0: 61 62 61 73 65 20 74 65 6d 70 7d 7d 0a 20 20 64  abase temp}}.  d
3ff0: 6f 5f 74 65 73 74 20 61 74 74 61 63 68 2d 35 2e  o_test attach-5.
4000: 39 20 7b 0a 20 20 20 20 63 61 74 63 68 73 71 6c  9 {.    catchsql
4010: 20 7b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20   {.      CREATE 
4020: 54 52 49 47 47 45 52 20 72 35 20 41 46 54 45 52  TRIGGER r5 AFTER
4030: 20 49 4e 53 45 52 54 20 4f 4e 20 74 35 20 42 45   INSERT ON t5 BE
4040: 47 49 4e 0a 20 20 20 20 20 20 20 20 44 45 4c 45  GIN.        DELE
4050: 54 45 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45  TE FROM t1 WHERE
4060: 20 78 3c 28 53 45 4c 45 43 54 20 6d 69 6e 28 78   x<(SELECT min(x
4070: 29 20 46 52 4f 4d 20 74 65 6d 70 2e 74 36 29 3b  ) FROM temp.t6);
4080: 0a 20 20 20 20 20 20 45 4e 44 3b 0a 20 20 20 20  .      END;.    
4090: 7d 20 64 62 32 0a 20 20 7d 20 7b 31 20 7b 74 72  } db2.  } {1 {tr
40a0: 69 67 67 65 72 20 72 35 20 63 61 6e 6e 6f 74 20  igger r5 cannot 
40b0: 72 65 66 65 72 65 6e 63 65 20 6f 62 6a 65 63 74  reference object
40c0: 73 20 69 6e 20 64 61 74 61 62 61 73 65 20 74 65  s in database te
40d0: 6d 70 7d 7d 0a 7d 20 3b 23 20 65 6e 64 69 66 20  mp}}.} ;# endif 
40e0: 73 75 62 71 75 65 72 79 0a 7d 20 3b 23 20 65 6e  subquery.} ;# en
40f0: 64 69 66 20 74 72 69 67 67 65 72 0a 0a 23 20 43  dif trigger..# C
4100: 68 65 63 6b 20 74 6f 20 6d 61 6b 65 20 73 75 72  heck to make sur
4110: 65 20 77 65 20 67 65 74 20 61 20 73 65 6e 73 69  e we get a sensi
4120: 62 6c 65 20 65 72 72 6f 72 20 69 66 20 75 6e 61  ble error if una
4130: 62 6c 65 20 74 6f 20 6f 70 65 6e 0a 23 20 74 68  ble to open.# th
4140: 65 20 66 69 6c 65 20 74 68 61 74 20 77 65 20 61  e file that we a
4150: 72 65 20 74 72 79 69 6e 67 20 74 6f 20 61 74 74  re trying to att
4160: 61 63 68 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 61  ach..#.do_test a
4170: 74 74 61 63 68 2d 36 2e 31 20 7b 0a 20 20 63 61  ttach-6.1 {.  ca
4180: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 41 54 54  tchsql {.    ATT
4190: 41 43 48 20 44 41 54 41 42 41 53 45 20 27 6e 6f  ACH DATABASE 'no
41a0: 2d 73 75 63 68 2d 66 69 6c 65 27 20 41 53 20 6e  -such-file' AS n
41b0: 6f 73 75 63 68 3b 0a 20 20 7d 0a 7d 20 7b 30 20  osuch;.  }.} {0 
41c0: 7b 7d 7d 0a 69 66 20 7b 24 74 63 6c 5f 70 6c 61  {}}.if {$tcl_pla
41d0: 74 66 6f 72 6d 28 70 6c 61 74 66 6f 72 6d 29 3d  tform(platform)=
41e0: 3d 22 75 6e 69 78 22 7d 20 7b 0a 20 20 73 71 6c  ="unix"} {.  sql
41f0: 69 74 65 33 20 64 62 78 20 63 61 6e 6e 6f 74 2d  ite3 dbx cannot-
4200: 72 65 61 64 0a 20 20 64 62 78 20 65 76 61 6c 20  read.  dbx eval 
4210: 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31  {CREATE TABLE t1
4220: 28 61 2c 62 2c 63 29 7d 0a 20 20 64 62 78 20 63  (a,b,c)}.  dbx c
4230: 6c 6f 73 65 0a 20 20 66 69 6c 65 20 61 74 74 72  lose.  file attr
4240: 69 62 75 74 65 73 20 63 61 6e 6e 6f 74 2d 72 65  ibutes cannot-re
4250: 61 64 20 2d 70 65 72 6d 69 73 73 69 6f 6e 20 30  ad -permission 0
4260: 30 30 30 0a 20 20 69 66 20 7b 5b 66 69 6c 65 20  000.  if {[file 
4270: 77 72 69 74 61 62 6c 65 20 63 61 6e 6e 6f 74 2d  writable cannot-
4280: 72 65 61 64 5d 7d 20 7b 0a 20 20 20 20 23 70 75  read]} {.    #pu
4290: 74 73 20 22 5c 6e 2a 2a 2a 2a 20 54 65 73 74 73  ts "\n**** Tests
42a0: 20 64 6f 20 6e 6f 74 20 77 6f 72 6b 20 77 68 65   do not work whe
42b0: 6e 20 72 75 6e 20 61 73 20 72 6f 6f 74 20 2a 2a  n run as root **
42c0: 2a 2a 22 0a 20 20 20 20 66 6f 72 63 65 64 65 6c  **".    forcedel
42d0: 65 74 65 20 63 61 6e 6e 6f 74 2d 72 65 61 64 0a  ete cannot-read.
42e0: 20 20 20 20 23 65 78 69 74 20 31 0a 20 20 7d 20      #exit 1.  } 
42f0: 65 6c 73 65 20 7b 0a 20 20 20 20 64 6f 5f 74 65  else {.    do_te
4300: 73 74 20 61 74 74 61 63 68 2d 36 2e 32 20 7b 0a  st attach-6.2 {.
4310: 20 20 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b        catchsql {
4320: 0a 20 20 20 20 20 20 20 20 41 54 54 41 43 48 20  .        ATTACH 
4330: 44 41 54 41 42 41 53 45 20 27 63 61 6e 6e 6f 74  DATABASE 'cannot
4340: 2d 72 65 61 64 27 20 41 53 20 6e 6f 72 65 61 64  -read' AS noread
4350: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20  ;.      }.    } 
4360: 7b 31 20 7b 75 6e 61 62 6c 65 20 74 6f 20 6f 70  {1 {unable to op
4370: 65 6e 20 64 61 74 61 62 61 73 65 3a 20 63 61 6e  en database: can
4380: 6e 6f 74 2d 72 65 61 64 7d 7d 0a 20 20 20 20 64  not-read}}.    d
4390: 6f 5f 74 65 73 74 20 61 74 74 61 63 68 2d 36 2e  o_test attach-6.
43a0: 32 2e 32 20 7b 0a 20 20 20 20 20 20 64 62 20 65  2.2 {.      db e
43b0: 72 72 6f 72 63 6f 64 65 0a 20 20 20 20 7d 20 7b  rrorcode.    } {
43c0: 31 34 7d 0a 20 20 7d 0a 20 20 66 6f 72 63 65 64  14}.  }.  forced
43d0: 65 6c 65 74 65 20 63 61 6e 6e 6f 74 2d 72 65 61  elete cannot-rea
43e0: 64 0a 7d 0a 0a 23 20 43 68 65 63 6b 20 74 68 65  d.}..# Check the
43f0: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 69   error message i
4400: 66 20 77 65 20 74 72 79 20 74 6f 20 61 63 63 65  f we try to acce
4410: 73 73 20 61 20 64 61 74 61 62 61 73 65 20 74 68  ss a database th
4420: 61 74 20 68 61 73 0a 23 20 6e 6f 74 20 62 65 65  at has.# not bee
4430: 6e 20 61 74 74 61 63 68 65 64 2e 0a 64 6f 5f 74  n attached..do_t
4440: 65 73 74 20 61 74 74 61 63 68 2d 36 2e 33 20 7b  est attach-6.3 {
4450: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
4460: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 6e    CREATE TABLE n
4470: 6f 5f 73 75 63 68 5f 64 62 2e 74 31 28 61 2c 20  o_such_db.t1(a, 
4480: 62 2c 20 63 29 3b 0a 20 20 7d 0a 7d 20 7b 31 20  b, c);.  }.} {1 
4490: 7b 75 6e 6b 6e 6f 77 6e 20 64 61 74 61 62 61 73  {unknown databas
44a0: 65 20 6e 6f 5f 73 75 63 68 5f 64 62 7d 7d 0a 66  e no_such_db}}.f
44b0: 6f 72 20 7b 73 65 74 20 69 20 32 7d 20 7b 24 69  or {set i 2} {$i
44c0: 3c 3d 31 35 7d 20 7b 69 6e 63 72 20 69 7d 20 7b  <=15} {incr i} {
44d0: 0a 20 20 63 61 74 63 68 20 7b 64 62 24 69 20 63  .  catch {db$i c
44e0: 6c 6f 73 65 7d 0a 7d 0a 64 62 20 63 6c 6f 73 65  lose}.}.db close
44f0: 0a 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73  .forcedelete tes
4500: 74 32 2e 64 62 0a 66 6f 72 63 65 64 65 6c 65 74  t2.db.forcedelet
4510: 65 20 6e 6f 2d 73 75 63 68 2d 66 69 6c 65 0a 0a  e no-such-file..
4520: 69 66 63 61 70 61 62 6c 65 20 73 75 62 71 75 65  ifcapable subque
4530: 72 79 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 61  ry {.  do_test a
4540: 74 74 61 63 68 2d 37 2e 31 20 7b 0a 20 20 20 20  ttach-7.1 {.    
4550: 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73 74  forcedelete test
4560: 2e 64 62 20 74 65 73 74 2e 64 62 2d 6a 6f 75 72  .db test.db-jour
4570: 6e 61 6c 0a 20 20 20 20 73 71 6c 69 74 65 33 20  nal.    sqlite3 
4580: 64 62 20 74 65 73 74 2e 64 62 0a 20 20 20 20 63  db test.db.    c
4590: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20  atchsql {.      
45a0: 44 45 54 41 43 48 20 52 41 49 53 45 20 28 20 49  DETACH RAISE ( I
45b0: 47 4e 4f 52 45 20 29 20 49 4e 20 28 20 53 45 4c  GNORE ) IN ( SEL
45c0: 45 43 54 20 22 41 41 41 41 41 41 22 20 2e 20 2a  ECT "AAAAAA" . *
45d0: 20 4f 52 44 45 52 20 42 59 20 0a 20 20 20 20 20   ORDER BY .     
45e0: 20 52 45 47 49 53 54 45 52 20 4c 49 4d 49 54 20   REGISTER LIMIT 
45f0: 22 41 41 41 41 41 41 22 20 2e 20 22 41 41 41 41  "AAAAAA" . "AAAA
4600: 41 41 22 20 4f 46 46 53 45 54 20 52 41 49 53 45  AA" OFFSET RAISE
4610: 20 28 20 49 47 4e 4f 52 45 20 29 20 4e 4f 54 20   ( IGNORE ) NOT 
4620: 4e 55 4c 4c 20 29 0a 20 20 20 20 7d 0a 20 20 7d  NULL ).    }.  }
4630: 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20 74 61 62   {1 {no such tab
4640: 6c 65 3a 20 41 41 41 41 41 41 7d 7d 0a 7d 0a 0a  le: AAAAAA}}.}..
4650: 23 20 43 72 65 61 74 65 20 61 20 6d 61 6c 66 6f  # Create a malfo
4660: 72 6d 65 64 20 66 69 6c 65 20 28 61 20 66 69 6c  rmed file (a fil
4670: 65 20 74 68 61 74 20 69 73 20 6e 6f 74 20 61 20  e that is not a 
4680: 76 61 6c 69 64 20 64 61 74 61 62 61 73 65 29 0a  valid database).
4690: 23 20 61 6e 64 20 74 72 79 20 74 6f 20 61 74 74  # and try to att
46a0: 61 63 68 20 69 74 0a 23 0a 64 6f 5f 74 65 73 74  ach it.#.do_test
46b0: 20 61 74 74 61 63 68 2d 38 2e 31 20 7b 0a 20 20   attach-8.1 {.  
46c0: 73 65 74 20 66 64 20 5b 6f 70 65 6e 20 74 65 73  set fd [open tes
46d0: 74 32 2e 64 62 20 77 5d 0a 20 20 70 75 74 73 20  t2.db w].  puts 
46e0: 24 66 64 20 22 54 68 69 73 20 66 69 6c 65 20 69  $fd "This file i
46f0: 73 20 6e 6f 74 20 61 20 76 61 6c 69 64 20 53 51  s not a valid SQ
4700: 4c 69 74 65 20 64 61 74 61 62 61 73 65 22 0a 20  Lite database". 
4710: 20 63 6c 6f 73 65 20 24 66 64 0a 20 20 63 61 74   close $fd.  cat
4720: 63 68 73 71 6c 20 7b 0a 20 20 20 20 41 54 54 41  chsql {.    ATTA
4730: 43 48 20 27 74 65 73 74 32 2e 64 62 27 20 41 53  CH 'test2.db' AS
4740: 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 66   t2;.  }.} {1 {f
4750: 69 6c 65 20 69 73 20 65 6e 63 72 79 70 74 65 64  ile is encrypted
4760: 20 6f 72 20 69 73 20 6e 6f 74 20 61 20 64 61 74   or is not a dat
4770: 61 62 61 73 65 7d 7d 0a 64 6f 5f 74 65 73 74 20  abase}}.do_test 
4780: 61 74 74 61 63 68 2d 38 2e 32 20 7b 0a 20 20 64  attach-8.2 {.  d
4790: 62 20 65 72 72 6f 72 63 6f 64 65 0a 7d 20 7b 32  b errorcode.} {2
47a0: 36 7d 0a 66 6f 72 63 65 64 65 6c 65 74 65 20 74  6}.forcedelete t
47b0: 65 73 74 32 2e 64 62 0a 64 6f 5f 74 65 73 74 20  est2.db.do_test 
47c0: 61 74 74 61 63 68 2d 38 2e 33 20 7b 0a 20 20 73  attach-8.3 {.  s
47d0: 71 6c 69 74 65 33 20 64 62 32 20 74 65 73 74 32  qlite3 db2 test2
47e0: 2e 64 62 0a 20 20 64 62 32 20 65 76 61 6c 20 7b  .db.  db2 eval {
47f0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
4800: 78 29 3b 20 42 45 47 49 4e 20 45 58 43 4c 55 53  x); BEGIN EXCLUS
4810: 49 56 45 7d 0a 20 20 63 61 74 63 68 73 71 6c 20  IVE}.  catchsql 
4820: 7b 0a 20 20 20 20 41 54 54 41 43 48 20 27 74 65  {.    ATTACH 'te
4830: 73 74 32 2e 64 62 27 20 41 53 20 74 32 3b 0a 20  st2.db' AS t2;. 
4840: 20 7d 0a 7d 20 7b 31 20 7b 64 61 74 61 62 61 73   }.} {1 {databas
4850: 65 20 69 73 20 6c 6f 63 6b 65 64 7d 7d 0a 64 6f  e is locked}}.do
4860: 5f 74 65 73 74 20 61 74 74 61 63 68 2d 38 2e 34  _test attach-8.4
4870: 20 7b 0a 20 20 64 62 20 65 72 72 6f 72 63 6f 64   {.  db errorcod
4880: 65 0a 7d 20 7b 35 7d 0a 64 62 32 20 63 6c 6f 73  e.} {5}.db2 clos
4890: 65 0a 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65  e.forcedelete te
48a0: 73 74 32 2e 64 62 0a 0a 23 20 54 65 73 74 20 74  st2.db..# Test t
48b0: 68 61 74 20 69 74 20 69 73 20 70 6f 73 73 69 62  hat it is possib
48c0: 6c 65 20 74 6f 20 61 74 74 61 63 68 20 74 68 65  le to attach the
48d0: 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20 6d   same database m
48e0: 6f 72 65 20 74 68 61 6e 0a 23 20 6f 6e 63 65 20  ore than.# once 
48f0: 77 68 65 6e 20 6e 6f 74 20 69 6e 20 73 68 61 72  when not in shar
4900: 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 2e 20 54  ed-cache mode. T
4910: 68 61 74 20 74 68 69 73 20 69 73 20 6e 6f 74 20  hat this is not 
4920: 70 6f 73 73 69 62 6c 65 20 69 6e 0a 23 20 73 68  possible in.# sh
4930: 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20  ared-cache mode 
4940: 69 73 20 74 65 73 74 65 64 20 69 6e 20 73 68 61  is tested in sha
4950: 72 65 64 37 2e 74 65 73 74 2e 0a 64 6f 5f 74 65  red7.test..do_te
4960: 73 74 20 61 74 74 61 63 68 2d 39 2e 31 20 7b 0a  st attach-9.1 {.
4970: 20 20 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65    forcedelete te
4980: 73 74 34 2e 64 62 0a 20 20 65 78 65 63 73 71 6c  st4.db.  execsql
4990: 20 7b 0a 20 20 20 20 41 54 54 41 43 48 20 27 74   {.    ATTACH 't
49a0: 65 73 74 34 2e 64 62 27 20 41 53 20 61 75 78 31  est4.db' AS aux1
49b0: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  ;.    CREATE TAB
49c0: 4c 45 20 61 75 78 31 2e 74 31 28 61 2c 20 62 29  LE aux1.t1(a, b)
49d0: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
49e0: 4f 20 61 75 78 31 2e 74 31 20 56 41 4c 55 45 53  O aux1.t1 VALUES
49f0: 28 31 2c 20 32 29 3b 0a 20 20 20 20 41 54 54 41  (1, 2);.    ATTA
4a00: 43 48 20 27 74 65 73 74 34 2e 64 62 27 20 41 53  CH 'test4.db' AS
4a10: 20 61 75 78 32 3b 0a 20 20 20 20 53 45 4c 45 43   aux2;.    SELEC
4a20: 54 20 2a 20 46 52 4f 4d 20 61 75 78 32 2e 74 31  T * FROM aux2.t1
4a30: 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 7d 0a 64 6f  ;.  }.} {1 2}.do
4a40: 5f 74 65 73 74 20 61 74 74 61 63 68 2d 39 2e 32  _test attach-9.2
4a50: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a   {.  catchsql {.
4a60: 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 20      BEGIN;.     
4a70: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 61 75 78   INSERT INTO aux
4a80: 31 2e 74 31 20 56 41 4c 55 45 53 28 33 2c 20 34  1.t1 VALUES(3, 4
4a90: 29 3b 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20  );.      INSERT 
4aa0: 49 4e 54 4f 20 61 75 78 32 2e 74 31 20 56 41 4c  INTO aux2.t1 VAL
4ab0: 55 45 53 28 35 2c 20 36 29 3b 0a 20 20 7d 0a 7d  UES(5, 6);.  }.}
4ac0: 20 7b 31 20 7b 64 61 74 61 62 61 73 65 20 69 73   {1 {database is
4ad0: 20 6c 6f 63 6b 65 64 7d 7d 0a 64 6f 5f 74 65 73   locked}}.do_tes
4ae0: 74 20 61 74 74 61 63 68 2d 39 2e 33 20 7b 0a 20  t attach-9.3 {. 
4af0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43   execsql {.    C
4b00: 4f 4d 4d 49 54 3b 0a 20 20 20 20 53 45 4c 45 43  OMMIT;.    SELEC
4b10: 54 20 2a 20 46 52 4f 4d 20 61 75 78 32 2e 74 31  T * FROM aux2.t1
4b20: 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 20 33 20 34  ;.  }.} {1 2 3 4
4b30: 7d 0a 0a 23 20 54 69 63 6b 65 74 20 5b 61 62 65  }..# Ticket [abe
4b40: 37 32 38 62 62 63 33 31 31 64 38 31 33 33 34 64  728bbc311d81334d
4b50: 61 65 39 37 36 32 66 30 64 62 38 37 63 30 37 61  ae9762f0db87c07a
4b60: 39 38 66 37 39 5d 2e 0a 23 20 4d 75 6c 74 69 2d  98f79]..# Multi-
4b70: 64 61 74 61 62 61 73 65 20 63 6f 6d 6d 69 74 20  database commit 
4b80: 6f 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20 54  on an attached T
4b90: 45 4d 50 20 64 61 74 61 62 61 73 65 2e 0a 23 0a  EMP database..#.
4ba0: 64 6f 5f 74 65 73 74 20 61 74 74 61 63 68 2d 31  do_test attach-1
4bb0: 30 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  0.1 {.  execsql 
4bc0: 7b 0a 20 20 20 20 41 54 54 41 43 48 20 27 27 20  {.    ATTACH '' 
4bd0: 41 53 20 6e 6f 6e 61 6d 65 3b 0a 20 20 20 20 41  AS noname;.    A
4be0: 54 54 41 43 48 20 27 3a 6d 65 6d 6f 72 79 3a 27  TTACH ':memory:'
4bf0: 20 41 53 20 69 6e 6d 65 6d 3b 0a 20 20 20 20 42   AS inmem;.    B
4c00: 45 47 49 4e 3b 0a 20 20 20 20 43 52 45 41 54 45  EGIN;.    CREATE
4c10: 20 54 41 42 4c 45 20 6e 6f 6e 61 6d 65 2e 6e 6f   TABLE noname.no
4c20: 6e 61 6d 65 28 78 29 3b 0a 20 20 20 20 43 52 45  name(x);.    CRE
4c30: 41 54 45 20 54 41 42 4c 45 20 69 6e 6d 65 6d 2e  ATE TABLE inmem.
4c40: 69 6e 6d 65 6d 28 79 29 3b 0a 20 20 20 20 43 52  inmem(y);.    CR
4c50: 45 41 54 45 20 54 41 42 4c 45 20 6d 61 69 6e 2e  EATE TABLE main.
4c60: 6d 61 69 6e 28 7a 29 3b 0a 20 20 20 20 43 4f 4d  main(z);.    COM
4c70: 4d 49 54 3b 0a 20 20 20 20 53 45 4c 45 43 54 20  MIT;.    SELECT 
4c80: 6e 61 6d 65 20 46 52 4f 4d 20 6e 6f 6e 61 6d 65  name FROM noname
4c90: 2e 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 0a  .sqlite_master;.
4ca0: 20 20 20 20 53 45 4c 45 43 54 20 6e 61 6d 65 20      SELECT name 
4cb0: 46 52 4f 4d 20 69 6e 6d 65 6d 2e 73 71 6c 69 74  FROM inmem.sqlit
4cc0: 65 5f 6d 61 73 74 65 72 3b 0a 20 20 7d 0a 7d 20  e_master;.  }.} 
4cd0: 7b 6e 6f 6e 61 6d 65 20 69 6e 6d 65 6d 7d 0a 64  {noname inmem}.d
4ce0: 6f 5f 74 65 73 74 20 61 74 74 61 63 68 2d 31 30  o_test attach-10
4cf0: 2e 32 20 7b 0a 20 20 6c 72 61 6e 67 65 20 5b 65  .2 {.  lrange [e
4d00: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
4d10: 47 4d 41 20 64 61 74 61 62 61 73 65 5f 6c 69 73  GMA database_lis
4d20: 74 3b 0a 20 20 7d 5d 20 39 20 65 6e 64 0a 7d 20  t;.  }] 9 end.} 
4d30: 7b 34 20 6e 6f 6e 61 6d 65 20 7b 7d 20 35 20 69  {4 noname {} 5 i
4d40: 6e 6d 65 6d 20 7b 7d 7d 0a 0a 23 20 41 74 74 61  nmem {}}..# Atta
4d50: 63 68 20 77 69 74 68 20 61 20 76 65 72 79 20 6c  ch with a very l
4d60: 6f 6e 67 20 55 52 49 20 66 69 6c 65 6e 61 6d 65  ong URI filename
4d70: 2e 0a 23 0a 64 62 20 63 6c 6f 73 65 0a 73 71 6c  ..#.db close.sql
4d80: 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 20  ite3 db test.db 
4d90: 2d 75 72 69 20 31 0a 64 6f 5f 65 78 65 63 73 71  -uri 1.do_execsq
4da0: 6c 5f 74 65 73 74 20 61 74 74 61 63 68 2d 31 31  l_test attach-11
4db0: 2e 31 20 7b 0a 20 20 41 54 54 41 43 48 20 70 72  .1 {.  ATTACH pr
4dc0: 69 6e 74 66 28 27 66 69 6c 65 3a 25 30 39 30 30  intf('file:%0900
4dd0: 30 78 2f 78 2e 64 62 3f 6d 6f 64 65 3d 6d 65 6d  0x/x.db?mode=mem
4de0: 6f 72 79 26 63 61 63 68 65 3d 73 68 61 72 65 64  ory&cache=shared
4df0: 27 2c 31 29 20 41 53 20 61 75 78 31 3b 0a 20 20  ',1) AS aux1;.  
4e00: 43 52 45 41 54 45 20 54 41 42 4c 45 20 61 75 78  CREATE TABLE aux
4e10: 31 2e 74 31 28 78 2c 79 29 3b 0a 20 20 49 4e 53  1.t1(x,y);.  INS
4e20: 45 52 54 20 49 4e 54 4f 20 61 75 78 31 2e 74 31  ERT INTO aux1.t1
4e30: 28 78 2c 79 29 20 56 41 4c 55 45 53 28 31 2c 32  (x,y) VALUES(1,2
4e40: 29 2c 28 33 2c 34 29 3b 0a 20 20 53 45 4c 45 43  ),(3,4);.  SELEC
4e50: 54 20 2a 20 46 52 4f 4d 20 61 75 78 31 2e 74 31  T * FROM aux1.t1
4e60: 3b 0a 7d 20 7b 31 20 32 20 33 20 34 7d 0a 0a 0a  ;.} {1 2 3 4}...
4e70: 66 69 6e 69 73 68 5f 74 65 73 74 0a              finish_test.