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

Artifact e87fb2211b97c6a3a367fbc116e8572091b53160:


0000: 23 20 32 30 30 31 20 53 65 70 74 65 6d 62 65 72  # 2001 September
0010: 20 31 35 0a 23 0a 23 20 54 68 65 20 61 75 74 68   15.#.# The auth
0020: 6f 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70  or disclaims cop
0030: 79 72 69 67 68 74 20 74 6f 20 74 68 69 73 20 73  yright to this s
0040: 6f 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20  ource code.  In 
0050: 70 6c 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67  place of.# a leg
0060: 61 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20  al notice, here 
0070: 69 73 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23  is a blessing:.#
0080: 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f  .#    May you do
0090: 20 67 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76   good and not ev
00a0: 69 6c 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75  il..#    May you
00b0: 20 66 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73   find forgivenes
00c0: 73 20 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61  s for yourself a
00d0: 6e 64 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72  nd forgive other
00e0: 73 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20  s..#    May you 
00f0: 73 68 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65  share freely, ne
0100: 76 65 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20  ver taking more 
0110: 74 68 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23  than you give..#
0120: 0a 23 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .#**************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 23 20 54 68 69 73  *********.# This
0170: 20 66 69 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73   file implements
0180: 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74   regression test
0190: 73 20 66 6f 72 20 53 51 4c 69 74 65 20 6c 69 62  s for SQLite lib
01a0: 72 61 72 79 2e 20 20 54 68 65 0a 23 20 66 6f 63  rary.  The.# foc
01b0: 75 73 20 6f 66 20 74 68 69 73 20 66 69 6c 65 20  us of this file 
01c0: 69 73 20 74 65 73 74 69 6e 67 20 74 68 65 20 43  is testing the C
01d0: 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61 74  REATE TABLE stat
01e0: 65 6d 65 6e 74 2e 0a 23 0a 23 20 24 49 64 3a 20  ement..#.# $Id: 
01f0: 74 61 62 6c 65 2e 74 65 73 74 2c 76 20 31 2e 33  table.test,v 1.3
0200: 39 20 32 30 30 35 2f 30 33 2f 32 39 20 30 33 3a  9 2005/03/29 03:
0210: 31 31 3a 30 30 20 64 61 6e 69 65 6c 6b 31 39 37  11:00 danielk197
0220: 37 20 45 78 70 20 24 0a 0a 73 65 74 20 74 65 73  7 Exp $..set tes
0230: 74 64 69 72 20 5b 66 69 6c 65 20 64 69 72 6e 61  tdir [file dirna
0240: 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f 75 72 63  me $argv0].sourc
0250: 65 20 24 74 65 73 74 64 69 72 2f 74 65 73 74 65  e $testdir/teste
0260: 72 2e 74 63 6c 0a 0a 23 20 43 72 65 61 74 65 20  r.tcl..# Create 
0270: 61 20 62 61 73 69 63 20 74 61 62 6c 65 20 61 6e  a basic table an
0280: 64 20 76 65 72 69 66 79 20 69 74 20 69 73 20 61  d verify it is a
0290: 64 64 65 64 20 74 6f 20 73 71 6c 69 74 65 5f 6d  dded to sqlite_m
02a0: 61 73 74 65 72 0a 23 0a 64 6f 5f 74 65 73 74 20  aster.#.do_test 
02b0: 74 61 62 6c 65 2d 31 2e 31 20 7b 0a 20 20 65 78  table-1.1 {.  ex
02c0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41  ecsql {.    CREA
02d0: 54 45 20 54 41 42 4c 45 20 74 65 73 74 31 20 28  TE TABLE test1 (
02e0: 0a 20 20 20 20 20 20 6f 6e 65 20 76 61 72 63 68  .      one varch
02f0: 61 72 28 31 30 29 2c 0a 20 20 20 20 20 20 74 77  ar(10),.      tw
0300: 6f 20 74 65 78 74 0a 20 20 20 20 29 0a 20 20 7d  o text.    ).  }
0310: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
0320: 20 53 45 4c 45 43 54 20 73 71 6c 20 46 52 4f 4d   SELECT sql FROM
0330: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57   sqlite_master W
0340: 48 45 52 45 20 74 79 70 65 21 3d 27 6d 65 74 61  HERE type!='meta
0350: 27 0a 20 20 7d 0a 7d 20 7b 7b 43 52 45 41 54 45  '.  }.} {{CREATE
0360: 20 54 41 42 4c 45 20 74 65 73 74 31 20 28 0a 20   TABLE test1 (. 
0370: 20 20 20 20 20 6f 6e 65 20 76 61 72 63 68 61 72       one varchar
0380: 28 31 30 29 2c 0a 20 20 20 20 20 20 74 77 6f 20  (10),.      two 
0390: 74 65 78 74 0a 20 20 20 20 29 7d 7d 0a 0a 0a 23  text.    )}}...#
03a0: 20 56 65 72 69 66 79 20 74 68 65 20 6f 74 68 65   Verify the othe
03b0: 72 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20  r fields of the 
03c0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 66 69  sqlite_master fi
03d0: 6c 65 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 74 61  le..#.do_test ta
03e0: 62 6c 65 2d 31 2e 33 20 7b 0a 20 20 65 78 65 63  ble-1.3 {.  exec
03f0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
0400: 2c 20 74 62 6c 5f 6e 61 6d 65 2c 20 74 79 70 65  , tbl_name, type
0410: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
0420: 74 65 72 20 57 48 45 52 45 20 74 79 70 65 21 3d  ter WHERE type!=
0430: 27 6d 65 74 61 27 7d 0a 7d 20 7b 74 65 73 74 31  'meta'}.} {test1
0440: 20 74 65 73 74 31 20 74 61 62 6c 65 7d 0a 0a 23   test1 table}..#
0450: 20 43 6c 6f 73 65 20 61 6e 64 20 72 65 6f 70 65   Close and reope
0460: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20  n the database. 
0470: 20 56 65 72 69 66 79 20 74 68 61 74 20 65 76 65   Verify that eve
0480: 72 79 74 68 69 6e 67 20 69 73 0a 23 20 73 74 69  rything is.# sti
0490: 6c 6c 20 74 68 65 20 73 61 6d 65 2e 0a 23 0a 64  ll the same..#.d
04a0: 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 31 2e 34  o_test table-1.4
04b0: 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20   {.  db close.  
04c0: 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e  sqlite3 db test.
04d0: 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45  db.  execsql {SE
04e0: 4c 45 43 54 20 6e 61 6d 65 2c 20 74 62 6c 5f 6e  LECT name, tbl_n
04f0: 61 6d 65 2c 20 74 79 70 65 20 66 72 6f 6d 20 73  ame, type from s
0500: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45  qlite_master WHE
0510: 52 45 20 74 79 70 65 21 3d 27 6d 65 74 61 27 7d  RE type!='meta'}
0520: 0a 7d 20 7b 74 65 73 74 31 20 74 65 73 74 31 20  .} {test1 test1 
0530: 74 61 62 6c 65 7d 0a 0a 23 20 44 72 6f 70 20 74  table}..# Drop t
0540: 68 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20  he database and 
0550: 6d 61 6b 65 20 73 75 72 65 20 69 74 20 64 69 73  make sure it dis
0560: 61 70 70 65 61 72 73 2e 0a 23 0a 64 6f 5f 74 65  appears..#.do_te
0570: 73 74 20 74 61 62 6c 65 2d 31 2e 35 20 7b 0a 20  st table-1.5 {. 
0580: 20 65 78 65 63 73 71 6c 20 7b 44 52 4f 50 20 54   execsql {DROP T
0590: 41 42 4c 45 20 74 65 73 74 31 7d 0a 20 20 65 78  ABLE test1}.  ex
05a0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20  ecsql {SELECT * 
05b0: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
05c0: 65 72 20 57 48 45 52 45 20 74 79 70 65 21 3d 27  er WHERE type!='
05d0: 6d 65 74 61 27 7d 0a 7d 20 7b 7d 0a 0a 23 20 43  meta'}.} {}..# C
05e0: 6c 6f 73 65 20 61 6e 64 20 72 65 6f 70 65 6e 20  lose and reopen 
05f0: 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 56  the database.  V
0600: 65 72 69 66 79 20 74 68 61 74 20 74 68 65 20 74  erify that the t
0610: 61 62 6c 65 20 69 73 0a 23 20 73 74 69 6c 6c 20  able is.# still 
0620: 67 6f 6e 65 2e 0a 23 0a 64 6f 5f 74 65 73 74 20  gone..#.do_test 
0630: 74 61 62 6c 65 2d 31 2e 36 20 7b 0a 20 20 64 62  table-1.6 {.  db
0640: 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33   close.  sqlite3
0650: 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65 78   db test.db.  ex
0660: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61  ecsql {SELECT na
0670: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  me FROM sqlite_m
0680: 61 73 74 65 72 20 57 48 45 52 45 20 74 79 70 65  aster WHERE type
0690: 21 3d 27 6d 65 74 61 27 7d 0a 7d 20 7b 7d 0a 0a  !='meta'}.} {}..
06a0: 23 20 52 65 70 65 61 74 20 74 68 65 20 61 62 6f  # Repeat the abo
06b0: 76 65 20 73 74 65 70 73 2c 20 62 75 74 20 74 68  ve steps, but th
06c0: 69 73 20 74 69 6d 65 20 71 75 6f 74 65 20 74 68  is time quote th
06d0: 65 20 74 61 62 6c 65 20 6e 61 6d 65 2e 0a 23 0a  e table name..#.
06e0: 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 31 2e  do_test table-1.
06f0: 31 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  10 {.  execsql {
0700: 43 52 45 41 54 45 20 54 41 42 4c 45 20 22 63 72  CREATE TABLE "cr
0710: 65 61 74 65 22 20 28 66 31 20 69 6e 74 29 7d 0a  eate" (f1 int)}.
0720: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
0730: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
0740: 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20  te_master WHERE 
0750: 74 79 70 65 21 3d 27 6d 65 74 61 27 7d 0a 7d 20  type!='meta'}.} 
0760: 7b 63 72 65 61 74 65 7d 0a 64 6f 5f 74 65 73 74  {create}.do_test
0770: 20 74 61 62 6c 65 2d 31 2e 31 31 20 7b 0a 20 20   table-1.11 {.  
0780: 65 78 65 63 73 71 6c 20 7b 44 52 4f 50 20 54 41  execsql {DROP TA
0790: 42 4c 45 20 22 63 72 65 61 74 65 22 7d 0a 20 20  BLE "create"}.  
07a0: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
07b0: 6e 61 6d 65 20 46 52 4f 4d 20 22 73 71 6c 69 74  name FROM "sqlit
07c0: 65 5f 6d 61 73 74 65 72 22 20 57 48 45 52 45 20  e_master" WHERE 
07d0: 74 79 70 65 21 3d 27 6d 65 74 61 27 7d 0a 7d 20  type!='meta'}.} 
07e0: 7b 7d 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65  {}.do_test table
07f0: 2d 31 2e 31 32 20 7b 0a 20 20 65 78 65 63 73 71  -1.12 {.  execsq
0800: 6c 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20  l {CREATE TABLE 
0810: 74 65 73 74 31 28 22 66 31 20 68 6f 22 20 69 6e  test1("f1 ho" in
0820: 74 29 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  t)}.  execsql {S
0830: 45 4c 45 43 54 20 6e 61 6d 65 20 61 73 20 22 58  ELECT name as "X
0840: 22 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  " FROM sqlite_ma
0850: 73 74 65 72 20 57 48 45 52 45 20 74 79 70 65 21  ster WHERE type!
0860: 3d 27 6d 65 74 61 27 7d 0a 7d 20 7b 74 65 73 74  ='meta'}.} {test
0870: 31 7d 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65  1}.do_test table
0880: 2d 31 2e 31 33 20 7b 0a 20 20 65 78 65 63 73 71  -1.13 {.  execsq
0890: 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45 20 22 54  l {DROP TABLE "T
08a0: 45 53 54 31 22 7d 0a 20 20 65 78 65 63 73 71 6c  EST1"}.  execsql
08b0: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
08c0: 4f 4d 20 22 73 71 6c 69 74 65 5f 6d 61 73 74 65  OM "sqlite_maste
08d0: 72 22 20 57 48 45 52 45 20 74 79 70 65 21 3d 27  r" WHERE type!='
08e0: 6d 65 74 61 27 7d 0a 7d 20 7b 7d 0a 0a 0a 0a 23  meta'}.} {}....#
08f0: 20 56 65 72 69 66 79 20 74 68 61 74 20 77 65 20   Verify that we 
0900: 63 61 6e 6e 6f 74 20 6d 61 6b 65 20 74 77 6f 20  cannot make two 
0910: 74 61 62 6c 65 73 20 77 69 74 68 20 74 68 65 20  tables with the 
0920: 73 61 6d 65 20 6e 61 6d 65 0a 23 0a 64 6f 5f 74  same name.#.do_t
0930: 65 73 74 20 74 61 62 6c 65 2d 32 2e 31 20 7b 0a  est table-2.1 {.
0940: 20 20 65 78 65 63 73 71 6c 20 7b 43 52 45 41 54    execsql {CREAT
0950: 45 20 54 41 42 4c 45 20 54 45 53 54 32 28 6f 6e  E TABLE TEST2(on
0960: 65 20 74 65 78 74 29 7d 0a 20 20 73 65 74 20 76  e text)}.  set v
0970: 20 5b 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c   [catch {execsql
0980: 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 74   {CREATE TABLE t
0990: 65 73 74 32 28 74 77 6f 20 74 65 78 74 29 7d 7d  est2(two text)}}
09a0: 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20   msg].  lappend 
09b0: 76 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 74 61 62  v $msg.} {1 {tab
09c0: 6c 65 20 74 65 73 74 32 20 61 6c 72 65 61 64 79  le test2 already
09d0: 20 65 78 69 73 74 73 7d 7d 0a 64 6f 5f 74 65 73   exists}}.do_tes
09e0: 74 20 74 61 62 6c 65 2d 32 2e 31 62 20 7b 0a 20  t table-2.1b {. 
09f0: 20 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b 65   set v [catch {e
0a00: 78 65 63 73 71 6c 20 7b 43 52 45 41 54 45 20 54  xecsql {CREATE T
0a10: 41 42 4c 45 20 73 71 6c 69 74 65 5f 6d 61 73 74  ABLE sqlite_mast
0a20: 65 72 28 74 77 6f 20 74 65 78 74 29 7d 7d 20 6d  er(two text)}} m
0a30: 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20  sg].  lappend v 
0a40: 24 6d 73 67 0a 7d 20 7b 31 20 7b 6f 62 6a 65 63  $msg.} {1 {objec
0a50: 74 20 6e 61 6d 65 20 72 65 73 65 72 76 65 64 20  t name reserved 
0a60: 66 6f 72 20 69 6e 74 65 72 6e 61 6c 20 75 73 65  for internal use
0a70: 3a 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d  : sqlite_master}
0a80: 7d 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d  }.do_test table-
0a90: 32 2e 31 63 20 7b 0a 20 20 64 62 20 63 6c 6f 73  2.1c {.  db clos
0aa0: 65 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20 74  e.  sqlite3 db t
0ab0: 65 73 74 2e 64 62 0a 20 20 73 65 74 20 76 20 5b  est.db.  set v [
0ac0: 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c 20 7b  catch {execsql {
0ad0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 71 6c  CREATE TABLE sql
0ae0: 69 74 65 5f 6d 61 73 74 65 72 28 74 77 6f 20 74  ite_master(two t
0af0: 65 78 74 29 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61  ext)}} msg].  la
0b00: 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b  ppend v $msg.} {
0b10: 31 20 7b 6f 62 6a 65 63 74 20 6e 61 6d 65 20 72  1 {object name r
0b20: 65 73 65 72 76 65 64 20 66 6f 72 20 69 6e 74 65  eserved for inte
0b30: 72 6e 61 6c 20 75 73 65 3a 20 73 71 6c 69 74 65  rnal use: sqlite
0b40: 5f 6d 61 73 74 65 72 7d 7d 0a 64 6f 5f 74 65 73  _master}}.do_tes
0b50: 74 20 74 61 62 6c 65 2d 32 2e 31 64 20 7b 0a 20  t table-2.1d {. 
0b60: 20 65 78 65 63 73 71 6c 20 7b 44 52 4f 50 20 54   execsql {DROP T
0b70: 41 42 4c 45 20 74 65 73 74 32 3b 20 53 45 4c 45  ABLE test2; SELE
0b80: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
0b90: 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45  ite_master WHERE
0ba0: 20 74 79 70 65 21 3d 27 6d 65 74 61 27 7d 0a 7d   type!='meta'}.}
0bb0: 20 7b 7d 0a 0a 23 20 56 65 72 69 66 79 20 74 68   {}..# Verify th
0bc0: 61 74 20 77 65 20 63 61 6e 6e 6f 74 20 6d 61 6b  at we cannot mak
0bd0: 65 20 61 20 74 61 62 6c 65 20 77 69 74 68 20 74  e a table with t
0be0: 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 73 20  he same name as 
0bf0: 61 6e 20 69 6e 64 65 78 0a 23 0a 64 6f 5f 74 65  an index.#.do_te
0c00: 73 74 20 74 61 62 6c 65 2d 32 2e 32 61 20 7b 0a  st table-2.2a {.
0c10: 20 20 65 78 65 63 73 71 6c 20 7b 43 52 45 41 54    execsql {CREAT
0c20: 45 20 54 41 42 4c 45 20 74 65 73 74 32 28 6f 6e  E TABLE test2(on
0c30: 65 20 74 65 78 74 29 3b 20 43 52 45 41 54 45 20  e text); CREATE 
0c40: 49 4e 44 45 58 20 74 65 73 74 33 20 4f 4e 20 74  INDEX test3 ON t
0c50: 65 73 74 32 28 6f 6e 65 29 7d 0a 20 20 73 65 74  est2(one)}.  set
0c60: 20 76 20 5b 63 61 74 63 68 20 7b 65 78 65 63 73   v [catch {execs
0c70: 71 6c 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45  ql {CREATE TABLE
0c80: 20 74 65 73 74 33 28 74 77 6f 20 74 65 78 74 29   test3(two text)
0c90: 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e  }} msg].  lappen
0ca0: 64 20 76 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 74  d v $msg.} {1 {t
0cb0: 68 65 72 65 20 69 73 20 61 6c 72 65 61 64 79 20  here is already 
0cc0: 61 6e 20 69 6e 64 65 78 20 6e 61 6d 65 64 20 74  an index named t
0cd0: 65 73 74 33 7d 7d 0a 64 6f 5f 74 65 73 74 20 74  est3}}.do_test t
0ce0: 61 62 6c 65 2d 32 2e 32 62 20 7b 0a 20 20 64 62  able-2.2b {.  db
0cf0: 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33   close.  sqlite3
0d00: 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 73 65   db test.db.  se
0d10: 74 20 76 20 5b 63 61 74 63 68 20 7b 65 78 65 63  t v [catch {exec
0d20: 73 71 6c 20 7b 43 52 45 41 54 45 20 54 41 42 4c  sql {CREATE TABL
0d30: 45 20 74 65 73 74 33 28 74 77 6f 20 74 65 78 74  E test3(two text
0d40: 29 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65  )}} msg].  lappe
0d50: 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b 31 20 7b  nd v $msg.} {1 {
0d60: 74 68 65 72 65 20 69 73 20 61 6c 72 65 61 64 79  there is already
0d70: 20 61 6e 20 69 6e 64 65 78 20 6e 61 6d 65 64 20   an index named 
0d80: 74 65 73 74 33 7d 7d 0a 64 6f 5f 74 65 73 74 20  test3}}.do_test 
0d90: 74 61 62 6c 65 2d 32 2e 32 63 20 7b 0a 20 20 65  table-2.2c {.  e
0da0: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
0db0: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
0dc0: 6d 61 73 74 65 72 20 57 48 45 52 45 20 74 79 70  master WHERE typ
0dd0: 65 21 3d 27 6d 65 74 61 27 20 4f 52 44 45 52 20  e!='meta' ORDER 
0de0: 42 59 20 6e 61 6d 65 7d 0a 7d 20 7b 74 65 73 74  BY name}.} {test
0df0: 32 20 74 65 73 74 33 7d 0a 64 6f 5f 74 65 73 74  2 test3}.do_test
0e00: 20 74 61 62 6c 65 2d 32 2e 32 64 20 7b 0a 20 20   table-2.2d {.  
0e10: 65 78 65 63 73 71 6c 20 7b 44 52 4f 50 20 49 4e  execsql {DROP IN
0e20: 44 45 58 20 74 65 73 74 33 7d 0a 20 20 73 65 74  DEX test3}.  set
0e30: 20 76 20 5b 63 61 74 63 68 20 7b 65 78 65 63 73   v [catch {execs
0e40: 71 6c 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45  ql {CREATE TABLE
0e50: 20 74 65 73 74 33 28 74 77 6f 20 74 65 78 74 29   test3(two text)
0e60: 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e  }} msg].  lappen
0e70: 64 20 76 20 24 6d 73 67 0a 7d 20 7b 30 20 7b 7d  d v $msg.} {0 {}
0e80: 7d 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d  }.do_test table-
0e90: 32 2e 32 65 20 7b 0a 20 20 65 78 65 63 73 71 6c  2.2e {.  execsql
0ea0: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
0eb0: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
0ec0: 20 57 48 45 52 45 20 74 79 70 65 21 3d 27 6d 65   WHERE type!='me
0ed0: 74 61 27 20 4f 52 44 45 52 20 42 59 20 6e 61 6d  ta' ORDER BY nam
0ee0: 65 7d 0a 7d 20 7b 74 65 73 74 32 20 74 65 73 74  e}.} {test2 test
0ef0: 33 7d 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65  3}.do_test table
0f00: 2d 32 2e 32 66 20 7b 0a 20 20 65 78 65 63 73 71  -2.2f {.  execsq
0f10: 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45 20 74 65  l {DROP TABLE te
0f20: 73 74 32 3b 20 44 52 4f 50 20 54 41 42 4c 45 20  st2; DROP TABLE 
0f30: 74 65 73 74 33 7d 0a 20 20 65 78 65 63 73 71 6c  test3}.  execsql
0f40: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
0f50: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
0f60: 20 57 48 45 52 45 20 74 79 70 65 21 3d 27 6d 65   WHERE type!='me
0f70: 74 61 27 20 4f 52 44 45 52 20 42 59 20 6e 61 6d  ta' ORDER BY nam
0f80: 65 7d 0a 7d 20 7b 7d 0a 0a 23 20 43 72 65 61 74  e}.} {}..# Creat
0f90: 65 20 61 20 74 61 62 6c 65 20 77 69 74 68 20 6d  e a table with m
0fa0: 61 6e 79 20 66 69 65 6c 64 20 6e 61 6d 65 73 0a  any field names.
0fb0: 23 0a 73 65 74 20 62 69 67 5f 74 61 62 6c 65 20  #.set big_table 
0fc0: 5c 0a 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20  \.{CREATE TABLE 
0fd0: 62 69 67 28 0a 20 20 66 31 20 76 61 72 63 68 61  big(.  f1 varcha
0fe0: 72 28 32 30 29 2c 0a 20 20 66 32 20 63 68 61 72  r(20),.  f2 char
0ff0: 28 31 30 29 2c 0a 20 20 66 33 20 76 61 72 63 68  (10),.  f3 varch
1000: 61 72 28 33 30 29 20 70 72 69 6d 61 72 79 20 6b  ar(30) primary k
1010: 65 79 2c 0a 20 20 66 34 20 74 65 78 74 2c 0a 20  ey,.  f4 text,. 
1020: 20 66 35 20 74 65 78 74 2c 0a 20 20 66 36 20 74   f5 text,.  f6 t
1030: 65 78 74 2c 0a 20 20 66 37 20 74 65 78 74 2c 0a  ext,.  f7 text,.
1040: 20 20 66 38 20 74 65 78 74 2c 0a 20 20 66 39 20    f8 text,.  f9 
1050: 74 65 78 74 2c 0a 20 20 66 31 30 20 74 65 78 74  text,.  f10 text
1060: 2c 0a 20 20 66 31 31 20 74 65 78 74 2c 0a 20 20  ,.  f11 text,.  
1070: 66 31 32 20 74 65 78 74 2c 0a 20 20 66 31 33 20  f12 text,.  f13 
1080: 74 65 78 74 2c 0a 20 20 66 31 34 20 74 65 78 74  text,.  f14 text
1090: 2c 0a 20 20 66 31 35 20 74 65 78 74 2c 0a 20 20  ,.  f15 text,.  
10a0: 66 31 36 20 74 65 78 74 2c 0a 20 20 66 31 37 20  f16 text,.  f17 
10b0: 74 65 78 74 2c 0a 20 20 66 31 38 20 74 65 78 74  text,.  f18 text
10c0: 2c 0a 20 20 66 31 39 20 74 65 78 74 2c 0a 20 20  ,.  f19 text,.  
10d0: 66 32 30 20 74 65 78 74 0a 29 7d 0a 64 6f 5f 74  f20 text.)}.do_t
10e0: 65 73 74 20 74 61 62 6c 65 2d 33 2e 31 20 7b 0a  est table-3.1 {.
10f0: 20 20 65 78 65 63 73 71 6c 20 24 62 69 67 5f 74    execsql $big_t
1100: 61 62 6c 65 0a 20 20 65 78 65 63 73 71 6c 20 7b  able.  execsql {
1110: 53 45 4c 45 43 54 20 73 71 6c 20 46 52 4f 4d 20  SELECT sql FROM 
1120: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48  sqlite_master WH
1130: 45 52 45 20 74 79 70 65 3d 3d 27 74 61 62 6c 65  ERE type=='table
1140: 27 7d 0a 7d 20 5c 7b 24 62 69 67 5f 74 61 62 6c  '}.} \{$big_tabl
1150: 65 5c 7d 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c  e\}.do_test tabl
1160: 65 2d 33 2e 32 20 7b 0a 20 20 73 65 74 20 76 20  e-3.2 {.  set v 
1170: 5b 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c 20  [catch {execsql 
1180: 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 42 49  {CREATE TABLE BI
1190: 47 28 78 79 7a 20 66 6f 6f 29 7d 7d 20 6d 73 67  G(xyz foo)}} msg
11a0: 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 24 6d  ].  lappend v $m
11b0: 73 67 0a 7d 20 7b 31 20 7b 74 61 62 6c 65 20 42  sg.} {1 {table B
11c0: 49 47 20 61 6c 72 65 61 64 79 20 65 78 69 73 74  IG already exist
11d0: 73 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c  s}}.do_test tabl
11e0: 65 2d 33 2e 33 20 7b 0a 20 20 73 65 74 20 76 20  e-3.3 {.  set v 
11f0: 5b 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c 20  [catch {execsql 
1200: 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 62 69  {CREATE TABLE bi
1210: 47 28 78 79 7a 20 66 6f 6f 29 7d 7d 20 6d 73 67  G(xyz foo)}} msg
1220: 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 24 6d  ].  lappend v $m
1230: 73 67 0a 7d 20 7b 31 20 7b 74 61 62 6c 65 20 62  sg.} {1 {table b
1240: 69 47 20 61 6c 72 65 61 64 79 20 65 78 69 73 74  iG already exist
1250: 73 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c  s}}.do_test tabl
1260: 65 2d 33 2e 34 20 7b 0a 20 20 73 65 74 20 76 20  e-3.4 {.  set v 
1270: 5b 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c 20  [catch {execsql 
1280: 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 62 49  {CREATE TABLE bI
1290: 67 28 78 79 7a 20 66 6f 6f 29 7d 7d 20 6d 73 67  g(xyz foo)}} msg
12a0: 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 24 6d  ].  lappend v $m
12b0: 73 67 0a 7d 20 7b 31 20 7b 74 61 62 6c 65 20 62  sg.} {1 {table b
12c0: 49 67 20 61 6c 72 65 61 64 79 20 65 78 69 73 74  Ig already exist
12d0: 73 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c  s}}.do_test tabl
12e0: 65 2d 33 2e 35 20 7b 0a 20 20 64 62 20 63 6c 6f  e-3.5 {.  db clo
12f0: 73 65 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20  se.  sqlite3 db 
1300: 74 65 73 74 2e 64 62 0a 20 20 73 65 74 20 76 20  test.db.  set v 
1310: 5b 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c 20  [catch {execsql 
1320: 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 42 69  {CREATE TABLE Bi
1330: 67 28 78 79 7a 20 66 6f 6f 29 7d 7d 20 6d 73 67  g(xyz foo)}} msg
1340: 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 24 6d  ].  lappend v $m
1350: 73 67 0a 7d 20 7b 31 20 7b 74 61 62 6c 65 20 42  sg.} {1 {table B
1360: 69 67 20 61 6c 72 65 61 64 79 20 65 78 69 73 74  ig already exist
1370: 73 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c  s}}.do_test tabl
1380: 65 2d 33 2e 36 20 7b 0a 20 20 65 78 65 63 73 71  e-3.6 {.  execsq
1390: 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45 20 62 69  l {DROP TABLE bi
13a0: 67 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45  g}.  execsql {SE
13b0: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73  LECT name FROM s
13c0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45  qlite_master WHE
13d0: 52 45 20 74 79 70 65 21 3d 27 6d 65 74 61 27 7d  RE type!='meta'}
13e0: 0a 7d 20 7b 7d 0a 0a 23 20 54 72 79 20 63 72 65  .} {}..# Try cre
13f0: 61 74 69 6e 67 20 6c 61 72 67 65 20 6e 75 6d 62  ating large numb
1400: 65 72 73 20 6f 66 20 74 61 62 6c 65 73 0a 23 0a  ers of tables.#.
1410: 73 65 74 20 72 20 7b 7d 0a 66 6f 72 20 7b 73 65  set r {}.for {se
1420: 74 20 69 20 31 7d 20 7b 24 69 3c 3d 31 30 30 7d  t i 1} {$i<=100}
1430: 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20 6c 61   {incr i} {.  la
1440: 70 70 65 6e 64 20 72 20 5b 66 6f 72 6d 61 74 20  ppend r [format 
1450: 74 65 73 74 25 30 33 64 20 24 69 5d 0a 7d 0a 64  test%03d $i].}.d
1460: 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 34 2e 31  o_test table-4.1
1470: 20 7b 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 20   {.  for {set i 
1480: 31 7d 20 7b 24 69 3c 3d 31 30 30 7d 20 7b 69 6e  1} {$i<=100} {in
1490: 63 72 20 69 7d 20 7b 0a 20 20 20 20 73 65 74 20  cr i} {.    set 
14a0: 73 71 6c 20 22 43 52 45 41 54 45 20 54 41 42 4c  sql "CREATE TABL
14b0: 45 20 5b 66 6f 72 6d 61 74 20 74 65 73 74 25 30  E [format test%0
14c0: 33 64 20 24 69 5d 20 28 22 0a 20 20 20 20 66 6f  3d $i] (".    fo
14d0: 72 20 7b 73 65 74 20 6b 20 31 7d 20 7b 24 6b 3c  r {set k 1} {$k<
14e0: 24 69 7d 20 7b 69 6e 63 72 20 6b 7d 20 7b 0a 20  $i} {incr k} {. 
14f0: 20 20 20 20 20 61 70 70 65 6e 64 20 73 71 6c 20       append sql 
1500: 22 66 69 65 6c 64 24 6b 20 74 65 78 74 2c 22 0a  "field$k text,".
1510: 20 20 20 20 7d 0a 20 20 20 20 61 70 70 65 6e 64      }.    append
1520: 20 73 71 6c 20 22 6c 61 73 74 5f 66 69 65 6c 64   sql "last_field
1530: 20 74 65 78 74 29 22 0a 20 20 20 20 65 78 65 63   text)".    exec
1540: 73 71 6c 20 24 73 71 6c 0a 20 20 7d 0a 20 20 65  sql $sql.  }.  e
1550: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
1560: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
1570: 6d 61 73 74 65 72 20 57 48 45 52 45 20 74 79 70  master WHERE typ
1580: 65 21 3d 27 6d 65 74 61 27 20 4f 52 44 45 52 20  e!='meta' ORDER 
1590: 42 59 20 6e 61 6d 65 7d 0a 7d 20 24 72 0a 64 6f  BY name}.} $r.do
15a0: 5f 74 65 73 74 20 74 61 62 6c 65 2d 34 2e 31 62  _test table-4.1b
15b0: 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20   {.  db close.  
15c0: 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e  sqlite3 db test.
15d0: 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45  db.  execsql {SE
15e0: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73  LECT name FROM s
15f0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45  qlite_master WHE
1600: 52 45 20 74 79 70 65 21 3d 27 6d 65 74 61 27 20  RE type!='meta' 
1610: 4f 52 44 45 52 20 42 59 20 6e 61 6d 65 7d 0a 7d  ORDER BY name}.}
1620: 20 24 72 0a 0a 23 20 44 72 6f 70 20 74 68 65 20   $r..# Drop the 
1630: 65 76 65 6e 20 6e 75 6d 62 65 72 65 64 20 74 61  even numbered ta
1640: 62 6c 65 73 0a 23 0a 73 65 74 20 72 20 7b 7d 0a  bles.#.set r {}.
1650: 66 6f 72 20 7b 73 65 74 20 69 20 31 7d 20 7b 24  for {set i 1} {$
1660: 69 3c 3d 31 30 30 7d 20 7b 69 6e 63 72 20 69 20  i<=100} {incr i 
1670: 32 7d 20 7b 0a 20 20 6c 61 70 70 65 6e 64 20 72  2} {.  lappend r
1680: 20 5b 66 6f 72 6d 61 74 20 74 65 73 74 25 30 33   [format test%03
1690: 64 20 24 69 5d 0a 7d 0a 64 6f 5f 74 65 73 74 20  d $i].}.do_test 
16a0: 74 61 62 6c 65 2d 34 2e 32 20 7b 0a 20 20 66 6f  table-4.2 {.  fo
16b0: 72 20 7b 73 65 74 20 69 20 32 7d 20 7b 24 69 3c  r {set i 2} {$i<
16c0: 3d 31 30 30 7d 20 7b 69 6e 63 72 20 69 20 32 7d  =100} {incr i 2}
16d0: 20 7b 0a 20 20 20 20 23 20 69 66 20 7b 24 69 3d   {.    # if {$i=
16e0: 3d 33 38 7d 20 7b 65 78 65 63 73 71 6c 20 7b 70  =38} {execsql {p
16f0: 72 61 67 6d 61 20 76 64 62 65 5f 74 72 61 63 65  ragma vdbe_trace
1700: 3d 6f 6e 7d 7d 0a 20 20 20 20 73 65 74 20 73 71  =on}}.    set sq
1710: 6c 20 22 44 52 4f 50 20 54 41 42 4c 45 20 5b 66  l "DROP TABLE [f
1720: 6f 72 6d 61 74 20 54 45 53 54 25 30 33 64 20 24  ormat TEST%03d $
1730: 69 5d 22 0a 20 20 20 20 65 78 65 63 73 71 6c 20  i]".    execsql 
1740: 24 73 71 6c 0a 20 20 7d 0a 20 20 65 78 65 63 73  $sql.  }.  execs
1750: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
1760: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
1770: 65 72 20 57 48 45 52 45 20 74 79 70 65 21 3d 27  er WHERE type!='
1780: 6d 65 74 61 27 20 4f 52 44 45 52 20 42 59 20 6e  meta' ORDER BY n
1790: 61 6d 65 7d 0a 7d 20 24 72 0a 23 65 78 69 74 0a  ame}.} $r.#exit.
17a0: 0a 23 20 44 72 6f 70 20 74 68 65 20 6f 64 64 20  .# Drop the odd 
17b0: 6e 75 6d 62 65 72 20 74 61 62 6c 65 73 0a 23 0a  number tables.#.
17c0: 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 34 2e  do_test table-4.
17d0: 33 20 7b 0a 20 20 66 6f 72 20 7b 73 65 74 20 69  3 {.  for {set i
17e0: 20 31 7d 20 7b 24 69 3c 3d 31 30 30 7d 20 7b 69   1} {$i<=100} {i
17f0: 6e 63 72 20 69 20 32 7d 20 7b 0a 20 20 20 20 73  ncr i 2} {.    s
1800: 65 74 20 73 71 6c 20 22 44 52 4f 50 20 54 41 42  et sql "DROP TAB
1810: 4c 45 20 5b 66 6f 72 6d 61 74 20 74 65 73 74 25  LE [format test%
1820: 30 33 64 20 24 69 5d 22 0a 20 20 20 20 65 78 65  03d $i]".    exe
1830: 63 73 71 6c 20 24 73 71 6c 0a 20 20 7d 0a 20 20  csql $sql.  }.  
1840: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
1850: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
1860: 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20 74 79  _master WHERE ty
1870: 70 65 21 3d 27 6d 65 74 61 27 20 4f 52 44 45 52  pe!='meta' ORDER
1880: 20 42 59 20 6e 61 6d 65 7d 0a 7d 20 7b 7d 0a 0a   BY name}.} {}..
1890: 23 20 54 72 79 20 74 6f 20 64 72 6f 70 20 61 20  # Try to drop a 
18a0: 74 61 62 6c 65 20 74 68 61 74 20 64 6f 65 73 20  table that does 
18b0: 6e 6f 74 20 65 78 69 73 74 0a 23 0a 64 6f 5f 74  not exist.#.do_t
18c0: 65 73 74 20 74 61 62 6c 65 2d 35 2e 31 20 7b 0a  est table-5.1 {.
18d0: 20 20 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b    set v [catch {
18e0: 65 78 65 63 73 71 6c 20 7b 44 52 4f 50 20 54 41  execsql {DROP TA
18f0: 42 4c 45 20 74 65 73 74 30 30 39 7d 7d 20 6d 73  BLE test009}} ms
1900: 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 24  g].  lappend v $
1910: 6d 73 67 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75 63  msg.} {1 {no suc
1920: 68 20 74 61 62 6c 65 3a 20 74 65 73 74 30 30 39  h table: test009
1930: 7d 7d 0a 0a 23 20 54 72 79 20 74 6f 20 64 72 6f  }}..# Try to dro
1940: 70 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 0a  p sqlite_master.
1950: 23 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d  #.do_test table-
1960: 35 2e 32 20 7b 0a 20 20 73 65 74 20 76 20 5b 63  5.2 {.  set v [c
1970: 61 74 63 68 20 7b 65 78 65 63 73 71 6c 20 7b 44  atch {execsql {D
1980: 52 4f 50 20 54 41 42 4c 45 20 73 71 6c 69 74 65  ROP TABLE sqlite
1990: 5f 6d 61 73 74 65 72 7d 7d 20 6d 73 67 5d 0a 20  _master}} msg]. 
19a0: 20 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a   lappend v $msg.
19b0: 7d 20 7b 31 20 7b 74 61 62 6c 65 20 73 71 6c 69  } {1 {table sqli
19c0: 74 65 5f 6d 61 73 74 65 72 20 6d 61 79 20 6e 6f  te_master may no
19d0: 74 20 62 65 20 64 72 6f 70 70 65 64 7d 7d 0a 0a  t be dropped}}..
19e0: 23 20 4d 61 6b 65 20 73 75 72 65 20 61 6e 20 45  # Make sure an E
19f0: 58 50 4c 41 49 4e 20 64 6f 65 73 20 6e 6f 74 20  XPLAIN does not 
1a00: 72 65 61 6c 6c 79 20 63 72 65 61 74 65 20 61 20  really create a 
1a10: 6e 65 77 20 74 61 62 6c 65 0a 23 0a 64 6f 5f 74  new table.#.do_t
1a20: 65 73 74 20 74 61 62 6c 65 2d 35 2e 33 20 7b 0a  est table-5.3 {.
1a30: 20 20 69 66 63 61 70 61 62 6c 65 20 7b 65 78 70    ifcapable {exp
1a40: 6c 61 69 6e 7d 20 7b 0a 20 20 20 20 65 78 65 63  lain} {.    exec
1a50: 73 71 6c 20 7b 45 58 50 4c 41 49 4e 20 43 52 45  sql {EXPLAIN CRE
1a60: 41 54 45 20 54 41 42 4c 45 20 74 65 73 74 31 28  ATE TABLE test1(
1a70: 66 31 20 69 6e 74 29 7d 0a 20 20 7d 0a 20 20 65  f1 int)}.  }.  e
1a80: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
1a90: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
1aa0: 6d 61 73 74 65 72 20 57 48 45 52 45 20 74 79 70  master WHERE typ
1ab0: 65 21 3d 27 6d 65 74 61 27 7d 0a 7d 20 7b 7d 0a  e!='meta'}.} {}.
1ac0: 0a 23 20 4d 61 6b 65 20 73 75 72 65 20 61 6e 20  .# Make sure an 
1ad0: 45 58 50 4c 41 49 4e 20 64 6f 65 73 20 6e 6f 74  EXPLAIN does not
1ae0: 20 72 65 61 6c 6c 79 20 64 72 6f 70 20 61 6e 20   really drop an 
1af0: 65 78 69 73 74 69 6e 67 20 74 61 62 6c 65 0a 23  existing table.#
1b00: 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 35  .do_test table-5
1b10: 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .4 {.  execsql {
1b20: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 65 73  CREATE TABLE tes
1b30: 74 31 28 66 31 20 69 6e 74 29 7d 0a 20 20 69 66  t1(f1 int)}.  if
1b40: 63 61 70 61 62 6c 65 20 7b 65 78 70 6c 61 69 6e  capable {explain
1b50: 7d 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  } {.    execsql 
1b60: 7b 45 58 50 4c 41 49 4e 20 44 52 4f 50 20 54 41  {EXPLAIN DROP TA
1b70: 42 4c 45 20 74 65 73 74 31 7d 0a 20 20 7d 0a 20  BLE test1}.  }. 
1b80: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
1b90: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
1ba0: 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20 74  e_master WHERE t
1bb0: 79 70 65 21 3d 27 6d 65 74 61 27 7d 0a 7d 20 7b  ype!='meta'}.} {
1bc0: 74 65 73 74 31 7d 0a 0a 23 20 43 72 65 61 74 65  test1}..# Create
1bd0: 20 61 20 74 61 62 6c 65 20 77 69 74 68 20 61 20   a table with a 
1be0: 67 6f 6f 66 79 20 6e 61 6d 65 0a 23 0a 23 64 6f  goofy name.#.#do
1bf0: 5f 74 65 73 74 20 74 61 62 6c 65 2d 36 2e 31 20  _test table-6.1 
1c00: 7b 0a 23 20 20 65 78 65 63 73 71 6c 20 7b 43 52  {.#  execsql {CR
1c10: 45 41 54 45 20 54 41 42 4c 45 20 27 53 70 61 63  EATE TABLE 'Spac
1c20: 65 73 20 49 6e 20 54 68 69 73 20 4e 61 6d 65 21  es In This Name!
1c30: 27 28 78 20 69 6e 74 29 7d 0a 23 20 20 65 78 65  '(x int)}.#  exe
1c40: 63 73 71 6c 20 7b 49 4e 53 45 52 54 20 49 4e 54  csql {INSERT INT
1c50: 4f 20 27 73 70 61 63 65 73 20 69 6e 20 74 68 69  O 'spaces in thi
1c60: 73 20 6e 61 6d 65 21 27 20 56 41 4c 55 45 53 28  s name!' VALUES(
1c70: 31 29 7d 0a 23 20 20 73 65 74 20 6c 69 73 74 20  1)}.#  set list 
1c80: 5b 67 6c 6f 62 20 2d 6e 6f 63 6f 6d 70 6c 61 69  [glob -nocomplai
1c90: 6e 20 74 65 73 74 64 62 2f 73 70 61 63 65 73 2a  n testdb/spaces*
1ca0: 2e 74 62 6c 5d 0a 23 7d 20 7b 74 65 73 74 64 62  .tbl].#} {testdb
1cb0: 2f 73 70 61 63 65 73 2b 69 6e 2b 74 68 69 73 2b  /spaces+in+this+
1cc0: 6e 61 6d 65 2b 2e 74 62 6c 7d 0a 0a 23 20 54 72  name+.tbl}..# Tr
1cd0: 79 20 75 73 69 6e 67 20 6b 65 79 77 6f 72 64 73  y using keywords
1ce0: 20 61 73 20 74 61 62 6c 65 20 6e 61 6d 65 73 20   as table names 
1cf0: 6f 72 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2e  or column names.
1d00: 0a 23 20 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c  .# .do_test tabl
1d10: 65 2d 37 2e 31 20 7b 0a 20 20 73 65 74 20 76 20  e-7.1 {.  set v 
1d20: 5b 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c 20  [catch {execsql 
1d30: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  {.    CREATE TAB
1d40: 4c 45 20 77 65 69 72 64 28 0a 20 20 20 20 20 20  LE weird(.      
1d50: 64 65 73 63 20 74 65 78 74 2c 0a 20 20 20 20 20  desc text,.     
1d60: 20 61 73 63 20 74 65 78 74 2c 0a 20 20 20 20 20   asc text,.     
1d70: 20 6b 65 79 20 69 6e 74 2c 0a 20 20 20 20 20 20   key int,.      
1d80: 5b 31 34 5f 76 61 63 5d 20 62 6f 6f 6c 65 61 6e  [14_vac] boolean
1d90: 2c 0a 20 20 20 20 20 20 66 75 7a 7a 79 5f 64 6f  ,.      fuzzy_do
1da0: 67 5f 31 32 20 76 61 72 63 68 61 72 28 31 30 29  g_12 varchar(10)
1db0: 2c 0a 20 20 20 20 20 20 62 65 67 69 6e 20 62 6c  ,.      begin bl
1dc0: 6f 62 2c 0a 20 20 20 20 20 20 65 6e 64 20 63 6c  ob,.      end cl
1dd0: 6f 62 0a 20 20 20 20 29 0a 20 20 7d 7d 20 6d 73  ob.    ).  }} ms
1de0: 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 24  g].  lappend v $
1df0: 6d 73 67 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f  msg.} {0 {}}.do_
1e00: 74 65 73 74 20 74 61 62 6c 65 2d 37 2e 32 20 7b  test table-7.2 {
1e10: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
1e20: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 77 65 69   INSERT INTO wei
1e30: 72 64 20 56 41 4c 55 45 53 28 27 61 27 2c 27 62  rd VALUES('a','b
1e40: 27 2c 39 2c 30 2c 27 78 79 7a 27 2c 27 68 69 27  ',9,0,'xyz','hi'
1e50: 2c 27 79 27 27 61 6c 6c 27 29 3b 0a 20 20 20 20  ,'y''all');.    
1e60: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 77 65  SELECT * FROM we
1e70: 69 72 64 3b 0a 20 20 7d 0a 7d 20 7b 61 20 62 20  ird;.  }.} {a b 
1e80: 39 20 30 20 78 79 7a 20 68 69 20 79 27 61 6c 6c  9 0 xyz hi y'all
1e90: 7d 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d  }.do_test table-
1ea0: 37 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 32  7.3 {.  execsql2
1eb0: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20   {.    SELECT * 
1ec0: 46 52 4f 4d 20 77 65 69 72 64 3b 0a 20 20 7d 0a  FROM weird;.  }.
1ed0: 7d 20 7b 64 65 73 63 20 61 20 61 73 63 20 62 20  } {desc a asc b 
1ee0: 6b 65 79 20 39 20 31 34 5f 76 61 63 20 30 20 66  key 9 14_vac 0 f
1ef0: 75 7a 7a 79 5f 64 6f 67 5f 31 32 20 78 79 7a 20  uzzy_dog_12 xyz 
1f00: 62 65 67 69 6e 20 68 69 20 65 6e 64 20 79 27 61  begin hi end y'a
1f10: 6c 6c 7d 0a 0a 23 20 54 72 79 20 6f 75 74 20 74  ll}..# Try out t
1f20: 68 65 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  he CREATE TABLE 
1f30: 41 53 20 73 79 6e 74 61 78 0a 23 0a 64 6f 5f 74  AS syntax.#.do_t
1f40: 65 73 74 20 74 61 62 6c 65 2d 38 2e 31 20 7b 0a  est table-8.1 {.
1f50: 20 20 65 78 65 63 73 71 6c 32 20 7b 0a 20 20 20    execsql2 {.   
1f60: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 32   CREATE TABLE t2
1f70: 20 41 53 20 53 45 4c 45 43 54 20 2a 20 46 52 4f   AS SELECT * FRO
1f80: 4d 20 77 65 69 72 64 3b 0a 20 20 20 20 53 45 4c  M weird;.    SEL
1f90: 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 3b 0a 20  ECT * FROM t2;. 
1fa0: 20 7d 0a 7d 20 7b 64 65 73 63 20 61 20 61 73 63   }.} {desc a asc
1fb0: 20 62 20 6b 65 79 20 39 20 31 34 5f 76 61 63 20   b key 9 14_vac 
1fc0: 30 20 66 75 7a 7a 79 5f 64 6f 67 5f 31 32 20 78  0 fuzzy_dog_12 x
1fd0: 79 7a 20 62 65 67 69 6e 20 68 69 20 65 6e 64 20  yz begin hi end 
1fe0: 79 27 61 6c 6c 7d 0a 64 6f 5f 74 65 73 74 20 74  y'all}.do_test t
1ff0: 61 62 6c 65 2d 38 2e 31 2e 31 20 7b 0a 20 20 65  able-8.1.1 {.  e
2000: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
2010: 45 43 54 20 73 71 6c 20 46 52 4f 4d 20 73 71 6c  ECT sql FROM sql
2020: 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45  ite_master WHERE
2030: 20 6e 61 6d 65 3d 27 74 32 27 3b 0a 20 20 7d 0a   name='t2';.  }.
2040: 7d 20 7b 7b 43 52 45 41 54 45 20 54 41 42 4c 45  } {{CREATE TABLE
2050: 20 74 32 28 0a 20 20 22 64 65 73 63 22 20 74 65   t2(.  "desc" te
2060: 78 74 2c 0a 20 20 22 61 73 63 22 20 74 65 78 74  xt,.  "asc" text
2070: 2c 0a 20 20 22 6b 65 79 22 20 69 6e 74 2c 0a 20  ,.  "key" int,. 
2080: 20 22 31 34 5f 76 61 63 22 20 62 6f 6f 6c 65 61   "14_vac" boolea
2090: 6e 2c 0a 20 20 66 75 7a 7a 79 5f 64 6f 67 5f 31  n,.  fuzzy_dog_1
20a0: 32 20 76 61 72 63 68 61 72 28 31 30 29 2c 0a 20  2 varchar(10),. 
20b0: 20 22 62 65 67 69 6e 22 20 62 6c 6f 62 2c 0a 20   "begin" blob,. 
20c0: 20 22 65 6e 64 22 20 63 6c 6f 62 0a 29 7d 7d 0a   "end" clob.)}}.
20d0: 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 38 2e  do_test table-8.
20e0: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  2 {.  execsql {.
20f0: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
2100: 20 22 74 33 22 22 78 79 7a 22 28 61 2c 62 2c 63   "t3""xyz"(a,b,c
2110: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
2120: 54 4f 20 5b 74 33 22 78 79 7a 5d 20 56 41 4c 55  TO [t3"xyz] VALU
2130: 45 53 28 31 2c 32 2c 33 29 3b 0a 20 20 20 20 53  ES(1,2,3);.    S
2140: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 5b 74 33  ELECT * FROM [t3
2150: 22 78 79 7a 5d 3b 0a 20 20 7d 0a 7d 20 7b 31 20  "xyz];.  }.} {1 
2160: 32 20 33 7d 0a 64 6f 5f 74 65 73 74 20 74 61 62  2 3}.do_test tab
2170: 6c 65 2d 38 2e 33 20 7b 0a 20 20 65 78 65 63 73  le-8.3 {.  execs
2180: 71 6c 32 20 7b 0a 20 20 20 20 43 52 45 41 54 45  ql2 {.    CREATE
2190: 20 54 41 42 4c 45 20 5b 74 34 22 61 62 63 5d 20   TABLE [t4"abc] 
21a0: 41 53 20 53 45 4c 45 43 54 20 63 6f 75 6e 74 28  AS SELECT count(
21b0: 2a 29 20 61 73 20 63 6e 74 2c 20 6d 61 78 28 62  *) as cnt, max(b
21c0: 2b 63 29 20 46 52 4f 4d 20 5b 74 33 22 78 79 7a  +c) FROM [t3"xyz
21d0: 5d 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20  ];.    SELECT * 
21e0: 46 52 4f 4d 20 5b 74 34 22 61 62 63 5d 3b 0a 20  FROM [t4"abc];. 
21f0: 20 7d 0a 7d 20 7b 63 6e 74 20 31 20 6d 61 78 28   }.} {cnt 1 max(
2200: 62 2b 63 29 20 35 7d 0a 0a 23 20 55 70 64 61 74  b+c) 5}..# Updat
2210: 65 20 66 6f 72 20 76 33 3a 20 54 68 65 20 64 65  e for v3: The de
2220: 63 6c 61 72 61 74 69 6f 6e 20 74 79 70 65 20 6f  claration type o
2230: 66 20 61 6e 79 74 68 69 6e 67 20 65 78 63 65 70  f anything excep
2240: 74 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20 6e 6f  t a column is no
2250: 77 20 61 0a 23 20 4e 55 4c 4c 20 70 6f 69 6e 74  w a.# NULL point
2260: 65 72 2c 20 73 6f 20 74 68 65 20 63 72 65 61 74  er, so the creat
2270: 65 64 20 74 61 62 6c 65 20 68 61 73 20 6e 6f 20  ed table has no 
2280: 63 6f 6c 75 6d 6e 20 74 79 70 65 73 2e 20 28 43  column types. (C
2290: 68 61 6e 67 65 64 20 72 65 73 75 6c 74 0a 23 20  hanged result.# 
22a0: 66 72 6f 6d 20 7b 7b 43 52 45 41 54 45 20 54 41  from {{CREATE TA
22b0: 42 4c 45 20 27 74 34 22 61 62 63 27 28 63 6e 74  BLE 't4"abc'(cnt
22c0: 20 4e 55 4d 45 52 49 43 2c 22 6d 61 78 28 62 2b   NUMERIC,"max(b+
22d0: 63 29 22 20 4e 55 4d 45 52 49 43 29 7d 7d 29 2e  c)" NUMERIC)}}).
22e0: 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 38  .do_test table-8
22f0: 2e 33 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  .3.1 {.  execsql
2300: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 73 71   {.    SELECT sq
2310: 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  l FROM sqlite_ma
2320: 73 74 65 72 20 57 48 45 52 45 20 6e 61 6d 65 3d  ster WHERE name=
2330: 27 74 34 22 61 62 63 27 0a 20 20 7d 0a 7d 20 7b  't4"abc'.  }.} {
2340: 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 22 74  {CREATE TABLE "t
2350: 34 22 22 61 62 63 22 28 63 6e 74 2c 22 6d 61 78  4""abc"(cnt,"max
2360: 28 62 2b 63 29 22 29 7d 7d 0a 0a 69 66 63 61 70  (b+c)")}}..ifcap
2370: 61 62 6c 65 20 74 65 6d 70 64 62 20 7b 0a 20 20  able tempdb {.  
2380: 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 38 2e  do_test table-8.
2390: 34 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 32  4 {.    execsql2
23a0: 20 7b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20   {.      CREATE 
23b0: 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 20  TEMPORARY TABLE 
23c0: 74 35 20 41 53 20 53 45 4c 45 43 54 20 63 6f 75  t5 AS SELECT cou
23d0: 6e 74 28 2a 29 20 41 53 20 5b 79 27 61 6c 6c 5d  nt(*) AS [y'all]
23e0: 20 46 52 4f 4d 20 5b 74 33 22 78 79 7a 5d 3b 0a   FROM [t3"xyz];.
23f0: 20 20 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46        SELECT * F
2400: 52 4f 4d 20 74 35 3b 0a 20 20 20 20 7d 0a 20 20  ROM t5;.    }.  
2410: 7d 20 7b 79 27 61 6c 6c 20 31 7d 0a 7d 0a 0a 64  } {y'all 1}.}..d
2420: 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 38 2e 35  o_test table-8.5
2430: 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20   {.  db close.  
2440: 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e  sqlite3 db test.
2450: 64 62 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 0a  db.  execsql2 {.
2460: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
2470: 4d 20 5b 74 34 22 61 62 63 5d 3b 0a 20 20 7d 0a  M [t4"abc];.  }.
2480: 7d 20 7b 63 6e 74 20 31 20 6d 61 78 28 62 2b 63  } {cnt 1 max(b+c
2490: 29 20 35 7d 0a 64 6f 5f 74 65 73 74 20 74 61 62  ) 5}.do_test tab
24a0: 6c 65 2d 38 2e 36 20 7b 0a 20 20 65 78 65 63 73  le-8.6 {.  execs
24b0: 71 6c 32 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  ql2 {.    SELECT
24c0: 20 2a 20 46 52 4f 4d 20 74 32 3b 0a 20 20 7d 0a   * FROM t2;.  }.
24d0: 7d 20 7b 64 65 73 63 20 61 20 61 73 63 20 62 20  } {desc a asc b 
24e0: 6b 65 79 20 39 20 31 34 5f 76 61 63 20 30 20 66  key 9 14_vac 0 f
24f0: 75 7a 7a 79 5f 64 6f 67 5f 31 32 20 78 79 7a 20  uzzy_dog_12 xyz 
2500: 62 65 67 69 6e 20 68 69 20 65 6e 64 20 79 27 61  begin hi end y'a
2510: 6c 6c 7d 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c  ll}.do_test tabl
2520: 65 2d 38 2e 37 20 7b 0a 20 20 63 61 74 63 68 73  e-8.7 {.  catchs
2530: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
2540: 2a 20 46 52 4f 4d 20 74 35 3b 0a 20 20 7d 0a 7d  * FROM t5;.  }.}
2550: 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20 74 61 62   {1 {no such tab
2560: 6c 65 3a 20 74 35 7d 7d 0a 64 6f 5f 74 65 73 74  le: t5}}.do_test
2570: 20 74 61 62 6c 65 2d 38 2e 38 20 7b 0a 20 20 63   table-8.8 {.  c
2580: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 43 52  atchsql {.    CR
2590: 45 41 54 45 20 54 41 42 4c 45 20 74 35 20 41 53  EATE TABLE t5 AS
25a0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 6e   SELECT * FROM n
25b0: 6f 5f 73 75 63 68 5f 74 61 62 6c 65 3b 0a 20 20  o_such_table;.  
25c0: 7d 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20  }.} {1 {no such 
25d0: 74 61 62 6c 65 3a 20 6e 6f 5f 73 75 63 68 5f 74  table: no_such_t
25e0: 61 62 6c 65 7d 7d 0a 0a 23 20 4d 61 6b 65 20 73  able}}..# Make s
25f0: 75 72 65 20 77 65 20 63 61 6e 6e 6f 74 20 68 61  ure we cannot ha
2600: 76 65 20 64 75 70 6c 69 63 61 74 65 20 63 6f 6c  ve duplicate col
2610: 75 6d 6e 20 6e 61 6d 65 73 20 77 69 74 68 69 6e  umn names within
2620: 20 61 20 74 61 62 6c 65 2e 0a 23 0a 64 6f 5f 74   a table..#.do_t
2630: 65 73 74 20 74 61 62 6c 65 2d 39 2e 31 20 7b 0a  est table-9.1 {.
2640: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
2650: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 36   CREATE TABLE t6
2660: 28 61 2c 62 2c 61 29 3b 0a 20 20 7d 0a 7d 20 7b  (a,b,a);.  }.} {
2670: 31 20 7b 64 75 70 6c 69 63 61 74 65 20 63 6f 6c  1 {duplicate col
2680: 75 6d 6e 20 6e 61 6d 65 3a 20 61 7d 7d 0a 0a 23  umn name: a}}..#
2690: 20 43 68 65 63 6b 20 74 68 65 20 66 6f 72 65 69   Check the forei
26a0: 67 6e 20 6b 65 79 20 73 79 6e 74 61 78 2e 0a 23  gn key syntax..#
26b0: 0a 69 66 63 61 70 61 62 6c 65 20 7b 66 6f 72 65  .ifcapable {fore
26c0: 69 67 6e 6b 65 79 7d 20 7b 0a 64 6f 5f 74 65 73  ignkey} {.do_tes
26d0: 74 20 74 61 62 6c 65 2d 31 30 2e 31 20 7b 0a 20  t table-10.1 {. 
26e0: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
26f0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 36 28  CREATE TABLE t6(
2700: 61 20 52 45 46 45 52 45 4e 43 45 53 20 74 34 28  a REFERENCES t4(
2710: 61 29 20 4e 4f 54 20 4e 55 4c 4c 29 3b 0a 20 20  a) NOT NULL);.  
2720: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 36    INSERT INTO t6
2730: 20 56 41 4c 55 45 53 28 4e 55 4c 4c 29 3b 0a 20   VALUES(NULL);. 
2740: 20 7d 0a 7d 20 7b 31 20 7b 74 36 2e 61 20 6d 61   }.} {1 {t6.a ma
2750: 79 20 6e 6f 74 20 62 65 20 4e 55 4c 4c 7d 7d 0a  y not be NULL}}.
2760: 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 31 30  do_test table-10
2770: 2e 32 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  .2 {.  catchsql 
2780: 7b 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45  {.    DROP TABLE
2790: 20 74 36 3b 0a 20 20 20 20 43 52 45 41 54 45 20   t6;.    CREATE 
27a0: 54 41 42 4c 45 20 74 36 28 61 20 52 45 46 45 52  TABLE t6(a REFER
27b0: 45 4e 43 45 53 20 74 34 28 61 29 20 4d 41 54 43  ENCES t4(a) MATC
27c0: 48 20 50 41 52 54 49 41 4c 29 3b 0a 20 20 7d 0a  H PARTIAL);.  }.
27d0: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
27e0: 20 74 61 62 6c 65 2d 31 30 2e 33 20 7b 0a 20 20   table-10.3 {.  
27f0: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 44  catchsql {.    D
2800: 52 4f 50 20 54 41 42 4c 45 20 74 36 3b 0a 20 20  ROP TABLE t6;.  
2810: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
2820: 36 28 61 20 52 45 46 45 52 45 4e 43 45 53 20 74  6(a REFERENCES t
2830: 34 20 4d 41 54 43 48 20 46 55 4c 4c 20 4f 4e 20  4 MATCH FULL ON 
2840: 44 45 4c 45 54 45 20 53 45 54 20 4e 55 4c 4c 20  DELETE SET NULL 
2850: 4e 4f 54 20 4e 55 4c 4c 29 3b 0a 20 20 7d 0a 7d  NOT NULL);.  }.}
2860: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
2870: 74 61 62 6c 65 2d 31 30 2e 34 20 7b 0a 20 20 63  table-10.4 {.  c
2880: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 44 52  atchsql {.    DR
2890: 4f 50 20 54 41 42 4c 45 20 74 36 3b 0a 20 20 20  OP TABLE t6;.   
28a0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 36   CREATE TABLE t6
28b0: 28 61 20 52 45 46 45 52 45 4e 43 45 53 20 74 34  (a REFERENCES t4
28c0: 20 4d 41 54 43 48 20 46 55 4c 4c 20 4f 4e 20 55   MATCH FULL ON U
28d0: 50 44 41 54 45 20 53 45 54 20 44 45 46 41 55 4c  PDATE SET DEFAUL
28e0: 54 20 44 45 46 41 55 4c 54 20 31 29 3b 0a 20 20  T DEFAULT 1);.  
28f0: 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  }.} {0 {}}.do_te
2900: 73 74 20 74 61 62 6c 65 2d 31 30 2e 35 20 7b 0a  st table-10.5 {.
2910: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
2920: 20 44 52 4f 50 20 54 41 42 4c 45 20 74 36 3b 0a   DROP TABLE t6;.
2930: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
2940: 20 74 36 28 61 20 4e 4f 54 20 4e 55 4c 4c 20 4e   t6(a NOT NULL N
2950: 4f 54 20 44 45 46 45 52 52 41 42 4c 45 20 49 4e  OT DEFERRABLE IN
2960: 49 54 49 41 4c 4c 59 20 49 4d 4d 45 44 49 41 54  ITIALLY IMMEDIAT
2970: 45 29 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d  E);.  }.} {0 {}}
2980: 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 31  .do_test table-1
2990: 30 2e 36 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  0.6 {.  catchsql
29a0: 20 7b 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c   {.    DROP TABL
29b0: 45 20 74 36 3b 0a 20 20 20 20 43 52 45 41 54 45  E t6;.    CREATE
29c0: 20 54 41 42 4c 45 20 74 36 28 61 20 4e 4f 54 20   TABLE t6(a NOT 
29d0: 4e 55 4c 4c 20 44 45 46 45 52 52 41 42 4c 45 20  NULL DEFERRABLE 
29e0: 49 4e 49 54 49 41 4c 4c 59 20 44 45 46 45 52 52  INITIALLY DEFERR
29f0: 45 44 29 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d  ED);.  }.} {0 {}
2a00: 7d 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d  }.do_test table-
2a10: 31 30 2e 37 20 7b 0a 20 20 63 61 74 63 68 73 71  10.7 {.  catchsq
2a20: 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20 54 41 42  l {.    DROP TAB
2a30: 4c 45 20 74 36 3b 0a 20 20 20 20 43 52 45 41 54  LE t6;.    CREAT
2a40: 45 20 54 41 42 4c 45 20 74 36 28 61 2c 0a 20 20  E TABLE t6(a,.  
2a50: 20 20 20 20 46 4f 52 45 49 47 4e 20 4b 45 59 20      FOREIGN KEY 
2a60: 28 61 29 20 52 45 46 45 52 45 4e 43 45 53 20 74  (a) REFERENCES t
2a70: 34 28 62 29 20 44 45 46 45 52 52 41 42 4c 45 20  4(b) DEFERRABLE 
2a80: 49 4e 49 54 49 41 4c 4c 59 20 44 45 46 45 52 52  INITIALLY DEFERR
2a90: 45 44 0a 20 20 20 20 29 3b 0a 20 20 7d 0a 7d 20  ED.    );.  }.} 
2aa0: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 74  {0 {}}.do_test t
2ab0: 61 62 6c 65 2d 31 30 2e 38 20 7b 0a 20 20 63 61  able-10.8 {.  ca
2ac0: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f  tchsql {.    DRO
2ad0: 50 20 54 41 42 4c 45 20 74 36 3b 0a 20 20 20 20  P TABLE t6;.    
2ae0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 36 28  CREATE TABLE t6(
2af0: 61 2c 62 2c 63 2c 0a 20 20 20 20 20 20 46 4f 52  a,b,c,.      FOR
2b00: 45 49 47 4e 20 4b 45 59 20 28 62 2c 63 29 20 52  EIGN KEY (b,c) R
2b10: 45 46 45 52 45 4e 43 45 53 20 74 34 28 78 2c 79  EFERENCES t4(x,y
2b20: 29 20 4d 41 54 43 48 20 50 41 52 54 49 41 4c 0a  ) MATCH PARTIAL.
2b30: 20 20 20 20 20 20 20 20 4f 4e 20 55 50 44 41 54          ON UPDAT
2b40: 45 20 53 45 54 20 4e 55 4c 4c 20 4f 4e 20 44 45  E SET NULL ON DE
2b50: 4c 45 54 45 20 43 41 53 43 41 44 45 20 44 45 46  LETE CASCADE DEF
2b60: 45 52 52 41 42 4c 45 20 49 4e 49 54 49 41 4c 4c  ERRABLE INITIALL
2b70: 59 20 44 45 46 45 52 52 45 44 0a 20 20 20 20 29  Y DEFERRED.    )
2b80: 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  ;.  }.} {0 {}}.d
2b90: 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 31 30 2e  o_test table-10.
2ba0: 39 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  9 {.  catchsql {
2bb0: 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20  .    DROP TABLE 
2bc0: 74 36 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54  t6;.    CREATE T
2bd0: 41 42 4c 45 20 74 36 28 61 2c 62 2c 63 2c 0a 20  ABLE t6(a,b,c,. 
2be0: 20 20 20 20 20 46 4f 52 45 49 47 4e 20 4b 45 59       FOREIGN KEY
2bf0: 20 28 62 2c 63 29 20 52 45 46 45 52 45 4e 43 45   (b,c) REFERENCE
2c00: 53 20 74 34 28 78 29 0a 20 20 20 20 29 3b 0a 20  S t4(x).    );. 
2c10: 20 7d 0a 7d 20 7b 31 20 7b 6e 75 6d 62 65 72 20   }.} {1 {number 
2c20: 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 66 6f  of columns in fo
2c30: 72 65 69 67 6e 20 6b 65 79 20 64 6f 65 73 20 6e  reign key does n
2c40: 6f 74 20 6d 61 74 63 68 20 74 68 65 20 6e 75 6d  ot match the num
2c50: 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
2c60: 6e 20 74 68 65 20 72 65 66 65 72 65 6e 63 65 64  n the referenced
2c70: 20 74 61 62 6c 65 7d 7d 0a 64 6f 5f 74 65 73 74   table}}.do_test
2c80: 20 74 61 62 6c 65 2d 31 30 2e 31 30 20 7b 0a 20   table-10.10 {. 
2c90: 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20   catchsql {DROP 
2ca0: 54 41 42 4c 45 20 74 36 7d 0a 20 20 63 61 74 63  TABLE t6}.  catc
2cb0: 68 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  hsql {.    CREAT
2cc0: 45 20 54 41 42 4c 45 20 74 36 28 61 2c 62 2c 63  E TABLE t6(a,b,c
2cd0: 2c 0a 20 20 20 20 20 20 46 4f 52 45 49 47 4e 20  ,.      FOREIGN 
2ce0: 4b 45 59 20 28 62 2c 63 29 20 52 45 46 45 52 45  KEY (b,c) REFERE
2cf0: 4e 43 45 53 20 74 34 28 78 2c 79 2c 7a 29 0a 20  NCES t4(x,y,z). 
2d00: 20 20 20 29 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b     );.  }.} {1 {
2d10: 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
2d20: 73 20 69 6e 20 66 6f 72 65 69 67 6e 20 6b 65 79  s in foreign key
2d30: 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 20   does not match 
2d40: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
2d50: 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 72 65 66  lumns in the ref
2d60: 65 72 65 6e 63 65 64 20 74 61 62 6c 65 7d 7d 0a  erenced table}}.
2d70: 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 31 30  do_test table-10
2d80: 2e 31 31 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  .11 {.  catchsql
2d90: 20 7b 44 52 4f 50 20 54 41 42 4c 45 20 74 36 7d   {DROP TABLE t6}
2da0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
2db0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
2dc0: 36 28 61 2c 62 2c 20 63 20 52 45 46 45 52 45 4e  6(a,b, c REFEREN
2dd0: 43 45 53 20 74 34 28 78 2c 79 29 29 3b 0a 20 20  CES t4(x,y));.  
2de0: 7d 0a 7d 20 7b 31 20 7b 66 6f 72 65 69 67 6e 20  }.} {1 {foreign 
2df0: 6b 65 79 20 6f 6e 20 63 20 73 68 6f 75 6c 64 20  key on c should 
2e00: 72 65 66 65 72 65 6e 63 65 20 6f 6e 6c 79 20 6f  reference only o
2e10: 6e 65 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 61 62  ne column of tab
2e20: 6c 65 20 74 34 7d 7d 0a 64 6f 5f 74 65 73 74 20  le t4}}.do_test 
2e30: 74 61 62 6c 65 2d 31 30 2e 31 32 20 7b 0a 20 20  table-10.12 {.  
2e40: 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54  catchsql {DROP T
2e50: 41 42 4c 45 20 74 36 7d 0a 20 20 63 61 74 63 68  ABLE t6}.  catch
2e60: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
2e70: 20 54 41 42 4c 45 20 74 36 28 61 2c 62 2c 63 2c   TABLE t6(a,b,c,
2e80: 0a 20 20 20 20 20 20 46 4f 52 45 49 47 4e 20 4b  .      FOREIGN K
2e90: 45 59 20 28 62 2c 78 29 20 52 45 46 45 52 45 4e  EY (b,x) REFEREN
2ea0: 43 45 53 20 74 34 28 78 2c 79 29 0a 20 20 20 20  CES t4(x,y).    
2eb0: 29 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 75 6e 6b  );.  }.} {1 {unk
2ec0: 6e 6f 77 6e 20 63 6f 6c 75 6d 6e 20 22 78 22 20  nown column "x" 
2ed0: 69 6e 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 64  in foreign key d
2ee0: 65 66 69 6e 69 74 69 6f 6e 7d 7d 0a 64 6f 5f 74  efinition}}.do_t
2ef0: 65 73 74 20 74 61 62 6c 65 2d 31 30 2e 31 33 20  est table-10.13 
2f00: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52  {.  catchsql {DR
2f10: 4f 50 20 54 41 42 4c 45 20 74 36 7d 0a 20 20 63  OP TABLE t6}.  c
2f20: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 43 52  atchsql {.    CR
2f30: 45 41 54 45 20 54 41 42 4c 45 20 74 36 28 61 2c  EATE TABLE t6(a,
2f40: 62 2c 63 2c 0a 20 20 20 20 20 20 46 4f 52 45 49  b,c,.      FOREI
2f50: 47 4e 20 4b 45 59 20 28 78 2c 62 29 20 52 45 46  GN KEY (x,b) REF
2f60: 45 52 45 4e 43 45 53 20 74 34 28 78 2c 79 29 0a  ERENCES t4(x,y).
2f70: 20 20 20 20 29 3b 0a 20 20 7d 0a 7d 20 7b 31 20      );.  }.} {1 
2f80: 7b 75 6e 6b 6e 6f 77 6e 20 63 6f 6c 75 6d 6e 20  {unknown column 
2f90: 22 78 22 20 69 6e 20 66 6f 72 65 69 67 6e 20 6b  "x" in foreign k
2fa0: 65 79 20 64 65 66 69 6e 69 74 69 6f 6e 7d 7d 0a  ey definition}}.
2fb0: 7d 20 3b 23 20 65 6e 64 69 66 20 66 6f 72 65 69  } ;# endif forei
2fc0: 67 6e 6b 65 79 0a 0a 23 20 54 65 73 74 20 66 6f  gnkey..# Test fo
2fd0: 72 20 74 68 65 20 22 74 79 70 65 6f 66 22 20 66  r the "typeof" f
2fe0: 75 6e 63 74 69 6f 6e 2e 20 4d 6f 72 65 20 74 65  unction. More te
2ff0: 73 74 73 20 66 6f 72 20 74 68 65 0a 23 20 74 79  sts for the.# ty
3000: 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 20  peof() function 
3010: 61 72 65 20 66 6f 75 6e 64 20 69 6e 20 62 69 6e  are found in bin
3020: 64 2e 74 65 73 74 20 61 6e 64 20 74 79 70 65 73  d.test and types
3030: 2e 74 65 73 74 2e 0a 23 0a 64 6f 5f 74 65 73 74  .test..#.do_test
3040: 20 74 61 62 6c 65 2d 31 31 2e 31 20 7b 0a 20 20   table-11.1 {.  
3050: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52  execsql {.    CR
3060: 45 41 54 45 20 54 41 42 4c 45 20 74 37 28 0a 20  EATE TABLE t7(. 
3070: 20 20 20 20 20 20 61 20 69 6e 74 65 67 65 72 20        a integer 
3080: 70 72 69 6d 61 72 79 20 6b 65 79 2c 0a 20 20 20  primary key,.   
3090: 20 20 20 20 62 20 6e 75 6d 62 65 72 28 35 2c 31      b number(5,1
30a0: 30 29 2c 0a 20 20 20 20 20 20 20 63 20 63 68 61  0),.       c cha
30b0: 72 61 63 74 65 72 20 76 61 72 79 69 6e 67 20 28  racter varying (
30c0: 38 29 2c 0a 20 20 20 20 20 20 20 64 20 56 41 52  8),.       d VAR
30d0: 43 48 41 52 28 39 29 2c 0a 20 20 20 20 20 20 20  CHAR(9),.       
30e0: 65 20 63 6c 6f 62 2c 0a 20 20 20 20 20 20 20 66  e clob,.       f
30f0: 20 42 4c 4f 42 2c 0a 20 20 20 20 20 20 20 67 20   BLOB,.       g 
3100: 54 65 78 74 2c 0a 20 20 20 20 20 20 20 68 0a 20  Text,.       h. 
3110: 20 20 20 29 3b 0a 20 20 20 20 49 4e 53 45 52 54     );.    INSERT
3120: 20 49 4e 54 4f 20 74 37 28 61 29 20 56 41 4c 55   INTO t7(a) VALU
3130: 45 53 28 31 29 3b 0a 20 20 20 20 53 45 4c 45 43  ES(1);.    SELEC
3140: 54 20 74 79 70 65 6f 66 28 61 29 2c 20 74 79 70  T typeof(a), typ
3150: 65 6f 66 28 62 29 2c 20 74 79 70 65 6f 66 28 63  eof(b), typeof(c
3160: 29 2c 20 74 79 70 65 6f 66 28 64 29 2c 0a 20 20  ), typeof(d),.  
3170: 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28           typeof(
3180: 65 29 2c 20 74 79 70 65 6f 66 28 66 29 2c 20 74  e), typeof(f), t
3190: 79 70 65 6f 66 28 67 29 2c 20 74 79 70 65 6f 66  ypeof(g), typeof
31a0: 28 68 29 0a 20 20 20 20 46 52 4f 4d 20 74 37 20  (h).    FROM t7 
31b0: 4c 49 4d 49 54 20 31 3b 0a 20 20 7d 0a 7d 20 7b  LIMIT 1;.  }.} {
31c0: 69 6e 74 65 67 65 72 20 6e 75 6c 6c 20 6e 75 6c  integer null nul
31d0: 6c 20 6e 75 6c 6c 20 6e 75 6c 6c 20 6e 75 6c 6c  l null null null
31e0: 20 6e 75 6c 6c 20 6e 75 6c 6c 7d 20 0a 64 6f 5f   null null} .do_
31f0: 74 65 73 74 20 74 61 62 6c 65 2d 31 31 2e 32 20  test table-11.2 
3200: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
3210: 20 20 53 45 4c 45 43 54 20 74 79 70 65 6f 66 28    SELECT typeof(
3220: 61 2b 62 29 2c 20 74 79 70 65 6f 66 28 61 7c 7c  a+b), typeof(a||
3230: 62 29 2c 20 74 79 70 65 6f 66 28 63 2b 64 29 2c  b), typeof(c+d),
3240: 20 74 79 70 65 6f 66 28 63 7c 7c 64 29 0a 20 20   typeof(c||d).  
3250: 20 20 46 52 4f 4d 20 74 37 20 4c 49 4d 49 54 20    FROM t7 LIMIT 
3260: 31 3b 0a 20 20 7d 0a 7d 20 7b 6e 75 6c 6c 20 6e  1;.  }.} {null n
3270: 75 6c 6c 20 6e 75 6c 6c 20 6e 75 6c 6c 7d 0a 0a  ull null null}..
3280: 23 20 54 65 73 74 20 74 68 61 74 20 77 68 65 6e  # Test that when
3290: 20 63 72 65 61 74 69 6e 67 20 61 20 74 61 62 6c   creating a tabl
32a0: 65 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 54  e using CREATE T
32b0: 41 42 4c 45 20 41 53 2c 20 63 6f 6c 75 6d 6e 20  ABLE AS, column 
32c0: 74 79 70 65 73 20 61 72 65 0a 23 20 61 73 73 69  types are.# assi
32d0: 67 6e 65 64 20 63 6f 72 72 65 63 74 6c 79 20 66  gned correctly f
32e0: 6f 72 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 20  or (SELECT ...) 
32f0: 61 6e 64 20 27 78 20 41 53 20 79 27 20 65 78 70  and 'x AS y' exp
3300: 72 65 73 73 69 6f 6e 73 2e 0a 64 6f 5f 74 65 73  ressions..do_tes
3310: 74 20 74 61 62 6c 65 2d 31 32 2e 31 20 7b 0a 20  t table-12.1 {. 
3320: 20 69 66 63 61 70 61 62 6c 65 20 73 75 62 71 75   ifcapable subqu
3330: 65 72 79 20 7b 0a 20 20 20 20 65 78 65 63 73 71  ery {.    execsq
3340: 6c 20 7b 0a 20 20 20 20 20 20 43 52 45 41 54 45  l {.      CREATE
3350: 20 54 41 42 4c 45 20 74 38 20 41 53 20 53 45 4c   TABLE t8 AS SEL
3360: 45 43 54 20 62 2c 20 68 2c 20 61 20 61 73 20 69  ECT b, h, a as i
3370: 2c 20 28 53 45 4c 45 43 54 20 66 20 46 52 4f 4d  , (SELECT f FROM
3380: 20 74 37 29 20 61 73 20 6a 20 46 52 4f 4d 20 74   t7) as j FROM t
3390: 37 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 65 6c 73  7;.    }.  } els
33a0: 65 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  e {.    execsql 
33b0: 7b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54  {.      CREATE T
33c0: 41 42 4c 45 20 74 38 20 41 53 20 53 45 4c 45 43  ABLE t8 AS SELEC
33d0: 54 20 62 2c 20 68 2c 20 61 20 61 73 20 69 2c 20  T b, h, a as i, 
33e0: 66 20 61 73 20 6a 20 46 52 4f 4d 20 74 37 3b 0a  f as j FROM t7;.
33f0: 20 20 20 20 7d 0a 20 20 7d 0a 7d 20 7b 7d 0a 64      }.  }.} {}.d
3400: 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 31 32 2e  o_test table-12.
3410: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  2 {.  execsql {.
3420: 20 20 20 20 53 45 4c 45 43 54 20 73 71 6c 20 46      SELECT sql F
3430: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
3440: 72 20 57 48 45 52 45 20 74 62 6c 5f 6e 61 6d 65  r WHERE tbl_name
3450: 20 3d 20 27 74 38 27 0a 20 20 7d 0a 7d 20 7b 7b   = 't8'.  }.} {{
3460: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 38 28  CREATE TABLE t8(
3470: 62 20 6e 75 6d 62 65 72 28 35 2c 31 30 29 2c 68  b number(5,10),h
3480: 2c 69 20 69 6e 74 65 67 65 72 2c 6a 20 42 4c 4f  ,i integer,j BLO
3490: 42 29 7d 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d  B)}}..#---------
34a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
34b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
34c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
34d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 65  -----------.# Te
34e0: 73 74 20 63 61 73 65 73 20 74 61 62 6c 65 2d 31  st cases table-1
34f0: 33 2e 2a 0a 23 0a 23 20 54 65 73 74 20 74 68 65  3.*.#.# Test the
3500: 20 61 62 69 6c 69 74 79 20 74 6f 20 68 61 76 65   ability to have
3510: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 73 20   default values 
3520: 6f 66 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 2c  of CURRENT_TIME,
3530: 20 43 55 52 52 45 4e 54 5f 44 41 54 45 0a 23 20   CURRENT_DATE.# 
3540: 61 6e 64 20 43 55 52 52 45 4e 54 5f 54 49 4d 45  and CURRENT_TIME
3550: 53 54 41 4d 50 2e 0a 23 0a 64 6f 5f 74 65 73 74  STAMP..#.do_test
3560: 20 74 61 62 6c 65 2d 31 33 2e 31 20 7b 0a 20 20   table-13.1 {.  
3570: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52  execsql {.    CR
3580: 45 41 54 45 20 54 41 42 4c 45 20 74 61 62 6c 65  EATE TABLE table
3590: 74 38 28 0a 20 20 20 20 20 20 20 61 20 69 6e 74  t8(.       a int
35a0: 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79  eger primary key
35b0: 2c 0a 20 20 20 20 20 20 20 74 6d 20 74 65 78 74  ,.       tm text
35c0: 20 44 45 46 41 55 4c 54 20 43 55 52 52 45 4e 54   DEFAULT CURRENT
35d0: 5f 54 49 4d 45 2c 0a 20 20 20 20 20 20 20 64 74  _TIME,.       dt
35e0: 20 74 65 78 74 20 44 45 46 41 55 4c 54 20 43 55   text DEFAULT CU
35f0: 52 52 45 4e 54 5f 44 41 54 45 2c 0a 20 20 20 20  RRENT_DATE,.    
3600: 20 20 20 64 74 74 6d 20 74 65 78 74 20 44 45 46     dttm text DEF
3610: 41 55 4c 54 20 43 55 52 52 45 4e 54 5f 54 49 4d  AULT CURRENT_TIM
3620: 45 53 54 41 4d 50 0a 20 20 20 20 29 3b 0a 20 20  ESTAMP.    );.  
3630: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
3640: 74 61 62 6c 65 74 38 3b 0a 20 20 7d 0a 7d 20 7b  tablet8;.  }.} {
3650: 7d 0a 73 65 74 20 69 20 30 0a 66 6f 72 65 61 63  }.set i 0.foreac
3660: 68 20 7b 64 61 74 65 20 74 69 6d 65 7d 20 7b 0a  h {date time} {.
3670: 20 20 31 39 37 36 2d 30 37 2d 30 34 20 31 32 3a    1976-07-04 12:
3680: 30 30 3a 30 30 0a 20 20 31 39 39 34 2d 30 34 2d  00:00.  1994-04-
3690: 31 36 20 31 34 3a 30 30 3a 30 30 0a 20 20 32 30  16 14:00:00.  20
36a0: 30 30 2d 30 31 2d 30 31 20 30 30 3a 30 30 3a 30  00-01-01 00:00:0
36b0: 30 0a 20 20 32 30 30 33 2d 31 32 2d 33 31 20 31  0.  2003-12-31 1
36c0: 32 3a 33 34 3a 35 36 0a 7d 20 7b 0a 20 20 69 6e  2:34:56.} {.  in
36d0: 63 72 20 69 0a 20 20 73 65 74 20 73 71 6c 69 74  cr i.  set sqlit
36e0: 65 5f 63 75 72 72 65 6e 74 5f 74 69 6d 65 20 5b  e_current_time [
36f0: 63 6c 6f 63 6b 20 73 63 61 6e 20 22 24 64 61 74  clock scan "$dat
3700: 65 20 24 74 69 6d 65 22 20 2d 67 6d 74 20 31 5d  e $time" -gmt 1]
3710: 0a 20 20 23 20 73 65 74 20 73 71 6c 69 74 65 5f  .  # set sqlite_
3720: 63 75 72 72 65 6e 74 5f 74 69 6d 65 20 5b 65 78  current_time [ex
3730: 65 63 73 71 6c 20 22 53 45 4c 45 43 54 20 73 74  ecsql "SELECT st
3740: 72 66 74 69 6d 65 28 27 25 73 27 2c 27 24 64 61  rftime('%s','$da
3750: 74 65 20 24 74 69 6d 65 27 29 22 5d 0a 20 20 64  te $time')"].  d
3760: 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 31 33 2e  o_test table-13.
3770: 32 2e 24 69 20 7b 0a 20 20 20 20 65 78 65 63 73  2.$i {.    execs
3780: 71 6c 20 22 0a 20 20 20 20 20 20 49 4e 53 45 52  ql ".      INSER
3790: 54 20 49 4e 54 4f 20 74 61 62 6c 65 74 38 28 61  T INTO tablet8(a
37a0: 29 20 56 41 4c 55 45 53 28 24 69 29 3b 0a 20 20  ) VALUES($i);.  
37b0: 20 20 20 20 53 45 4c 45 43 54 20 74 6d 2c 20 64      SELECT tm, d
37c0: 74 2c 20 64 74 74 6d 20 46 52 4f 4d 20 74 61 62  t, dttm FROM tab
37d0: 6c 65 74 38 20 57 48 45 52 45 20 61 3d 24 69 3b  let8 WHERE a=$i;
37e0: 0a 20 20 20 20 22 0a 20 20 7d 20 5b 6c 69 73 74  .    ".  } [list
37f0: 20 24 74 69 6d 65 20 24 64 61 74 65 20 5b 6c 69   $time $date [li
3800: 73 74 20 24 64 61 74 65 20 24 74 69 6d 65 5d 5d  st $date $time]]
3810: 0a 7d 0a 73 65 74 20 73 71 6c 69 74 65 5f 63 75  .}.set sqlite_cu
3820: 72 72 65 6e 74 5f 74 69 6d 65 20 30 0a 0a 23 2d  rrent_time 0..#-
3830: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3840: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3850: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3860: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3870: 2d 2d 2d 0a 23 20 54 65 73 74 20 63 61 73 65 73  ---.# Test cases
3880: 20 74 61 62 6c 65 2d 31 34 2e 2a 0a 23 0a 23 20   table-14.*.#.# 
3890: 54 65 73 74 20 74 68 61 74 20 61 20 74 61 62 6c  Test that a tabl
38a0: 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 72 65 61  e cannot be crea
38b0: 74 65 64 20 6f 72 20 64 72 6f 70 70 65 64 20 77  ted or dropped w
38c0: 68 69 6c 65 20 6f 74 68 65 72 20 76 69 72 74 75  hile other virtu
38d0: 61 6c 0a 23 20 6d 61 63 68 69 6e 65 73 20 61 72  al.# machines ar
38e0: 65 20 61 63 74 69 76 65 2e 20 54 68 69 73 20 69  e active. This i
38f0: 73 20 72 65 71 75 69 72 65 64 20 62 65 63 61 75  s required becau
3900: 73 65 20 6f 74 68 65 72 77 69 73 65 20 77 68 65  se otherwise whe
3910: 6e 20 69 6e 20 0a 23 20 61 75 74 6f 2d 76 61 63  n in .# auto-vac
3920: 75 75 6d 20 6d 6f 64 65 20 74 68 65 20 62 74 72  uum mode the btr
3930: 65 65 2d 6c 61 79 65 72 20 6d 61 79 20 6e 65 65  ee-layer may nee
3940: 64 20 74 6f 20 6d 6f 76 65 20 74 68 65 20 72 6f  d to move the ro
3950: 6f 74 2d 70 61 67 65 73 20 6f 66 20 0a 23 20 61  ot-pages of .# a
3960: 20 74 61 62 6c 65 20 66 6f 72 20 77 68 69 63 68   table for which
3970: 20 74 68 65 72 65 20 69 73 20 61 6e 20 6f 70 65   there is an ope
3980: 6e 20 63 75 72 73 6f 72 2e 0a 23 0a 0a 23 20 64  n cursor..#..# d
3990: 62 20 65 76 61 6c 20 7b 0a 23 20 20 20 70 72 61  b eval {.#   pra
39a0: 67 6d 61 20 76 64 62 65 5f 74 72 61 63 65 20 3d  gma vdbe_trace =
39b0: 20 30 3b 0a 23 20 7d 0a 23 20 54 72 79 20 74 6f   0;.# }.# Try to
39c0: 20 63 72 65 61 74 65 20 61 20 74 61 62 6c 65 20   create a table 
39d0: 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 63 61  from within a ca
39e0: 6c 6c 62 61 63 6b 3a 0a 75 6e 73 65 74 20 2d 6e  llback:.unset -n
39f0: 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74  ocomplain result
3a00: 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 31  .do_test table-1
3a10: 34 2e 31 20 7b 0a 20 20 73 65 74 20 72 63 20 5b  4.1 {.  set rc [
3a20: 0a 20 20 20 20 63 61 74 63 68 20 7b 0a 20 20 20  .    catch {.   
3a30: 20 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45     db eval {SELE
3a40: 43 54 20 2a 20 46 52 4f 4d 20 74 61 62 6c 65 74  CT * FROM tablet
3a50: 38 20 4c 49 4d 49 54 20 31 7d 20 7b 7d 20 7b 0a  8 LIMIT 1} {} {.
3a60: 20 20 20 20 20 20 20 20 64 62 20 65 76 61 6c 20          db eval 
3a70: 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 39  {CREATE TABLE t9
3a80: 28 61 2c 20 62 2c 20 63 29 7d 0a 20 20 20 20 20  (a, b, c)}.     
3a90: 20 7d 0a 20 20 20 20 7d 20 6d 73 67 0a 20 20 5d   }.    } msg.  ]
3aa0: 0a 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 6c  .  set result [l
3ab0: 69 73 74 20 24 72 63 20 24 6d 73 67 5d 0a 7d 20  ist $rc $msg].} 
3ac0: 7b 31 20 7b 64 61 74 61 62 61 73 65 20 74 61 62  {1 {database tab
3ad0: 6c 65 20 69 73 20 6c 6f 63 6b 65 64 7d 7d 0a 0a  le is locked}}..
3ae0: 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 31 34  do_test table-14
3af0: 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .2 {.  execsql {
3b00: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
3b10: 45 20 74 39 28 61 2c 20 62 2c 20 63 29 0a 20 20  E t9(a, b, c).  
3b20: 7d 0a 7d 20 7b 7d 0a 0a 23 20 54 72 79 20 74 6f  }.} {}..# Try to
3b30: 20 64 72 6f 70 20 61 20 74 61 62 6c 65 20 66 72   drop a table fr
3b40: 6f 6d 20 77 69 74 68 69 6e 20 61 20 63 61 6c 6c  om within a call
3b50: 62 61 63 6b 3a 0a 64 6f 5f 74 65 73 74 20 74 61  back:.do_test ta
3b60: 62 6c 65 2d 31 34 2e 33 20 7b 0a 20 20 73 65 74  ble-14.3 {.  set
3b70: 20 72 63 20 5b 0a 20 20 20 20 63 61 74 63 68 20   rc [.    catch 
3b80: 7b 0a 20 20 20 20 20 20 64 62 20 65 76 61 6c 20  {.      db eval 
3b90: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
3ba0: 61 62 6c 65 74 38 20 4c 49 4d 49 54 20 31 7d 20  ablet8 LIMIT 1} 
3bb0: 7b 7d 20 7b 0a 20 20 20 20 20 20 20 20 64 62 20  {} {.        db 
3bc0: 65 76 61 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45  eval {DROP TABLE
3bd0: 20 74 39 3b 7d 0a 20 20 20 20 20 20 7d 0a 20 20   t9;}.      }.  
3be0: 20 20 7d 20 6d 73 67 0a 20 20 5d 20 0a 20 20 73    } msg.  ] .  s
3bf0: 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 20  et result [list 
3c00: 24 72 63 20 24 6d 73 67 5d 0a 7d 20 7b 31 20 7b  $rc $msg].} {1 {
3c10: 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 69  database table i
3c20: 73 20 6c 6f 63 6b 65 64 7d 7d 0a 0a 23 20 4e 6f  s locked}}..# No
3c30: 77 20 61 74 74 61 63 68 20 61 20 64 61 74 61 62  w attach a datab
3c40: 61 73 65 20 61 6e 64 20 65 6e 73 75 72 65 20 74  ase and ensure t
3c50: 68 61 74 20 61 20 74 61 62 6c 65 20 63 61 6e 20  hat a table can 
3c60: 62 65 20 63 72 65 61 74 65 64 20 69 6e 20 74 68  be created in th
3c70: 65 20 0a 23 20 61 74 74 61 63 68 65 64 20 64 61  e .# attached da
3c80: 74 61 62 61 73 65 20 77 68 69 6c 73 74 20 69 6e  tabase whilst in
3c90: 20 61 20 63 61 6c 6c 62 61 63 6b 20 66 72 6f 6d   a callback from
3ca0: 20 61 20 71 75 65 72 79 20 6f 6e 20 74 68 65 20   a query on the 
3cb0: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e 0a 64  main database..d
3cc0: 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 31 34 2e  o_test table-14.
3cd0: 34 20 7b 0a 20 20 66 69 6c 65 20 64 65 6c 65 74  4 {.  file delet
3ce0: 65 20 2d 66 6f 72 63 65 20 74 65 73 74 32 2e 64  e -force test2.d
3cf0: 62 0a 20 20 66 69 6c 65 20 64 65 6c 65 74 65 20  b.  file delete 
3d00: 2d 66 6f 72 63 65 20 74 65 73 74 32 2e 64 62 2d  -force test2.db-
3d10: 6a 6f 75 72 6e 61 6c 0a 20 20 65 78 65 63 73 71  journal.  execsq
3d20: 6c 20 7b 0a 20 20 20 20 61 74 74 61 63 68 20 27  l {.    attach '
3d30: 74 65 73 74 32 2e 64 62 27 20 61 73 20 61 75 78  test2.db' as aux
3d40: 3b 0a 20 20 7d 0a 20 20 64 62 20 65 76 61 6c 20  ;.  }.  db eval 
3d50: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
3d60: 61 62 6c 65 74 38 20 4c 49 4d 49 54 20 31 7d 20  ablet8 LIMIT 1} 
3d70: 7b 7d 20 7b 0a 20 20 20 20 64 62 20 65 76 61 6c  {} {.    db eval
3d80: 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 61   {CREATE TABLE a
3d90: 75 78 2e 74 31 28 61 2c 20 62 2c 20 63 29 7d 0a  ux.t1(a, b, c)}.
3da0: 20 20 7d 0a 7d 20 7b 7d 0a 0a 23 20 4f 6e 20 74    }.} {}..# On t
3db0: 68 65 20 6f 74 68 65 72 20 68 61 6e 64 2c 20 69  he other hand, i
3dc0: 74 20 73 68 6f 75 6c 64 20 62 65 20 69 6d 70 6f  t should be impo
3dd0: 73 73 69 62 6c 65 20 74 6f 20 64 72 6f 70 20 61  ssible to drop a
3de0: 20 74 61 62 6c 65 20 77 68 65 6e 20 61 6e 79 20   table when any 
3df0: 56 4d 73 20 0a 23 20 61 72 65 20 61 63 74 69 76  VMs .# are activ
3e00: 65 2e 20 54 68 69 73 20 69 73 20 62 65 63 61 75  e. This is becau
3e10: 73 65 20 56 65 72 69 66 79 43 6f 6f 6b 69 65 20  se VerifyCookie 
3e20: 69 6e 73 74 72 75 63 74 69 6f 6e 73 20 6d 61 79  instructions may
3e30: 20 68 61 76 65 20 61 6c 72 65 61 64 79 0a 23 20   have already.# 
3e40: 62 65 65 6e 20 65 78 65 63 75 74 65 64 2c 20 61  been executed, a
3e50: 6e 64 20 62 74 72 65 65 20 72 6f 6f 74 2d 70 61  nd btree root-pa
3e60: 67 65 73 20 6d 61 79 20 6e 6f 74 20 6d 6f 76 65  ges may not move
3e70: 20 61 66 74 65 72 20 74 68 69 73 20 28 77 68 69   after this (whi
3e80: 63 68 20 61 0a 23 20 64 65 6c 65 74 65 20 74 61  ch a.# delete ta
3e90: 62 6c 65 20 6d 69 67 68 74 20 64 6f 29 2e 0a 64  ble might do)..d
3ea0: 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 31 34 2e  o_test table-14.
3eb0: 34 20 7b 0a 20 20 73 65 74 20 72 63 20 5b 0a 20  4 {.  set rc [. 
3ec0: 20 20 20 63 61 74 63 68 20 7b 0a 20 20 20 20 20     catch {.     
3ed0: 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54   db eval {SELECT
3ee0: 20 2a 20 46 52 4f 4d 20 74 61 62 6c 65 74 38 20   * FROM tablet8 
3ef0: 4c 49 4d 49 54 20 31 7d 20 7b 7d 20 7b 0a 20 20  LIMIT 1} {} {.  
3f00: 20 20 20 20 20 20 64 62 20 65 76 61 6c 20 7b 44        db eval {D
3f10: 52 4f 50 20 54 41 42 4c 45 20 61 75 78 2e 74 31  ROP TABLE aux.t1
3f20: 3b 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  ;}.      }.    }
3f30: 20 6d 73 67 0a 20 20 5d 20 0a 20 20 73 65 74 20   msg.  ] .  set 
3f40: 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 24 72 63  result [list $rc
3f50: 20 24 6d 73 67 5d 0a 7d 20 7b 31 20 7b 64 61 74   $msg].} {1 {dat
3f60: 61 62 61 73 65 20 74 61 62 6c 65 20 69 73 20 6c  abase table is l
3f70: 6f 63 6b 65 64 7d 7d 0a 0a 23 20 43 72 65 61 74  ocked}}..# Creat
3f80: 65 20 61 6e 64 20 64 72 6f 70 20 32 30 30 30 20  e and drop 2000 
3f90: 74 61 62 6c 65 73 2e 20 54 68 69 73 20 69 73 20  tables. This is 
3fa0: 74 6f 20 63 68 65 63 6b 20 74 68 61 74 20 74 68  to check that th
3fb0: 65 20 62 61 6c 61 6e 63 65 5f 73 68 61 6c 6c 6f  e balance_shallo
3fc0: 77 28 29 0a 23 20 72 6f 75 74 69 6e 65 20 77 6f  w().# routine wo
3fd0: 72 6b 73 20 63 6f 72 72 65 63 74 6c 79 20 6f 6e  rks correctly on
3fe0: 20 74 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74   the sqlite_mast
3ff0: 65 72 20 74 61 62 6c 65 2e 20 41 74 20 6f 6e 65  er table. At one
4000: 20 70 6f 69 6e 74 20 69 74 0a 23 20 63 6f 6e 74   point it.# cont
4010: 61 69 6e 65 64 20 61 20 62 75 67 20 74 68 61 74  ained a bug that
4020: 20 77 6f 75 6c 64 20 70 72 65 76 65 6e 74 20 74   would prevent t
4030: 68 65 20 72 69 67 68 74 2d 63 68 69 6c 64 20 70  he right-child p
4040: 6f 69 6e 74 65 72 20 6f 66 20 74 68 65 0a 23 20  ointer of the.# 
4050: 63 68 69 6c 64 20 70 61 67 65 20 66 72 6f 6d 20  child page from 
4060: 62 65 69 6e 67 20 63 6f 70 69 65 64 20 74 6f 20  being copied to 
4070: 74 68 65 20 72 6f 6f 74 20 70 61 67 65 2e 0a 23  the root page..#
4080: 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 31  .do_test table-1
4090: 35 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  5.1 {.  execsql 
40a0: 7b 42 45 47 49 4e 7d 0a 20 20 66 6f 72 20 7b 73  {BEGIN}.  for {s
40b0: 65 74 20 69 20 30 7d 20 7b 24 69 3c 32 30 30 30  et i 0} {$i<2000
40c0: 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20 20  } {incr i} {.   
40d0: 20 65 78 65 63 73 71 6c 20 22 43 52 45 41 54 45   execsql "CREATE
40e0: 20 54 41 42 4c 45 20 74 62 6c 24 69 20 28 61 2c   TABLE tbl$i (a,
40f0: 20 62 2c 20 63 29 22 0a 20 20 7d 0a 20 20 65 78   b, c)".  }.  ex
4100: 65 63 73 71 6c 20 7b 43 4f 4d 4d 49 54 7d 0a 7d  ecsql {COMMIT}.}
4110: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c   {}.do_test tabl
4120: 65 2d 31 35 2e 32 20 7b 0a 20 20 65 78 65 63 73  e-15.2 {.  execs
4130: 71 6c 20 7b 42 45 47 49 4e 7d 0a 20 20 66 6f 72  ql {BEGIN}.  for
4140: 20 7b 73 65 74 20 69 20 30 7d 20 7b 24 69 3c 32   {set i 0} {$i<2
4150: 30 30 30 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a  000} {incr i} {.
4160: 20 20 20 20 65 78 65 63 73 71 6c 20 22 44 52 4f      execsql "DRO
4170: 50 20 54 41 42 4c 45 20 74 62 6c 24 69 22 0a 20  P TABLE tbl$i". 
4180: 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 43 4f   }.  execsql {CO
4190: 4d 4d 49 54 7d 0a 7d 20 7b 7d 0a 0a 66 69 6e 69  MMIT}.} {}..fini
41a0: 73 68 5f 74 65 73 74 0a 0a                       sh_test..