/ Hex Artifact Content
Login

Artifact 30423211108121884588d24d6776c7f38702ad7b:


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 35  table.test,v 1.5
0200: 33 20 32 30 30 39 2f 30 36 2f 30 35 20 31 37 3a  3 2009/06/05 17:
0210: 30 39 3a 31 32 20 64 72 68 20 45 78 70 20 24 0a  09:12 drh Exp $.
0220: 0a 73 65 74 20 74 65 73 74 64 69 72 20 5b 66 69  .set testdir [fi
0230: 6c 65 20 64 69 72 6e 61 6d 65 20 24 61 72 67 76  le dirname $argv
0240: 30 5d 0a 73 6f 75 72 63 65 20 24 74 65 73 74 64  0].source $testd
0250: 69 72 2f 74 65 73 74 65 72 2e 74 63 6c 0a 0a 23  ir/tester.tcl..#
0260: 20 43 72 65 61 74 65 20 61 20 62 61 73 69 63 20   Create a basic 
0270: 74 61 62 6c 65 20 61 6e 64 20 76 65 72 69 66 79  table and verify
0280: 20 69 74 20 69 73 20 61 64 64 65 64 20 74 6f 20   it is added to 
0290: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 0a 23 0a  sqlite_master.#.
02a0: 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 31 2e  do_test table-1.
02b0: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  1 {.  execsql {.
02c0: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
02d0: 20 74 65 73 74 31 20 28 0a 20 20 20 20 20 20 6f   test1 (.      o
02e0: 6e 65 20 76 61 72 63 68 61 72 28 31 30 29 2c 0a  ne varchar(10),.
02f0: 20 20 20 20 20 20 74 77 6f 20 74 65 78 74 0a 20        two text. 
0300: 20 20 20 29 0a 20 20 7d 0a 20 20 65 78 65 63 73     ).  }.  execs
0310: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
0320: 73 71 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  sql FROM sqlite_
0330: 6d 61 73 74 65 72 20 57 48 45 52 45 20 74 79 70  master WHERE typ
0340: 65 21 3d 27 6d 65 74 61 27 0a 20 20 7d 0a 7d 20  e!='meta'.  }.} 
0350: 7b 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 74  {{CREATE TABLE t
0360: 65 73 74 31 20 28 0a 20 20 20 20 20 20 6f 6e 65  est1 (.      one
0370: 20 76 61 72 63 68 61 72 28 31 30 29 2c 0a 20 20   varchar(10),.  
0380: 20 20 20 20 74 77 6f 20 74 65 78 74 0a 20 20 20      two text.   
0390: 20 29 7d 7d 0a 0a 0a 23 20 56 65 72 69 66 79 20   )}}...# Verify 
03a0: 74 68 65 20 6f 74 68 65 72 20 66 69 65 6c 64 73  the other fields
03b0: 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 5f 6d   of the sqlite_m
03c0: 61 73 74 65 72 20 66 69 6c 65 2e 0a 23 0a 64 6f  aster file..#.do
03d0: 5f 74 65 73 74 20 74 61 62 6c 65 2d 31 2e 33 20  _test table-1.3 
03e0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
03f0: 45 43 54 20 6e 61 6d 65 2c 20 74 62 6c 5f 6e 61  ECT name, tbl_na
0400: 6d 65 2c 20 74 79 70 65 20 46 52 4f 4d 20 73 71  me, type FROM sq
0410: 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52  lite_master WHER
0420: 45 20 74 79 70 65 21 3d 27 6d 65 74 61 27 7d 0a  E type!='meta'}.
0430: 7d 20 7b 74 65 73 74 31 20 74 65 73 74 31 20 74  } {test1 test1 t
0440: 61 62 6c 65 7d 0a 0a 23 20 43 6c 6f 73 65 20 61  able}..# Close a
0450: 6e 64 20 72 65 6f 70 65 6e 20 74 68 65 20 64 61  nd reopen the da
0460: 74 61 62 61 73 65 2e 20 20 56 65 72 69 66 79 20  tabase.  Verify 
0470: 74 68 61 74 20 65 76 65 72 79 74 68 69 6e 67 20  that everything 
0480: 69 73 0a 23 20 73 74 69 6c 6c 20 74 68 65 20 73  is.# still the s
0490: 61 6d 65 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 74  ame..#.do_test t
04a0: 61 62 6c 65 2d 31 2e 34 20 7b 0a 20 20 64 62 20  able-1.4 {.  db 
04b0: 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 20  close.  sqlite3 
04c0: 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65 78 65  db test.db.  exe
04d0: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d  csql {SELECT nam
04e0: 65 2c 20 74 62 6c 5f 6e 61 6d 65 2c 20 74 79 70  e, tbl_name, typ
04f0: 65 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 6d 61  e from sqlite_ma
0500: 73 74 65 72 20 57 48 45 52 45 20 74 79 70 65 21  ster WHERE type!
0510: 3d 27 6d 65 74 61 27 7d 0a 7d 20 7b 74 65 73 74  ='meta'}.} {test
0520: 31 20 74 65 73 74 31 20 74 61 62 6c 65 7d 0a 0a  1 test1 table}..
0530: 23 20 44 72 6f 70 20 74 68 65 20 64 61 74 61 62  # Drop the datab
0540: 61 73 65 20 61 6e 64 20 6d 61 6b 65 20 73 75 72  ase and make sur
0550: 65 20 69 74 20 64 69 73 61 70 70 65 61 72 73 2e  e it disappears.
0560: 0a 23 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65  .#.do_test table
0570: 2d 31 2e 35 20 7b 0a 20 20 65 78 65 63 73 71 6c  -1.5 {.  execsql
0580: 20 7b 44 52 4f 50 20 54 41 42 4c 45 20 74 65 73   {DROP TABLE tes
0590: 74 31 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  t1}.  execsql {S
05a0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c  ELECT * FROM sql
05b0: 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45  ite_master WHERE
05c0: 20 74 79 70 65 21 3d 27 6d 65 74 61 27 7d 0a 7d   type!='meta'}.}
05d0: 20 7b 7d 0a 0a 23 20 43 6c 6f 73 65 20 61 6e 64   {}..# Close and
05e0: 20 72 65 6f 70 65 6e 20 74 68 65 20 64 61 74 61   reopen the data
05f0: 62 61 73 65 2e 20 20 56 65 72 69 66 79 20 74 68  base.  Verify th
0600: 61 74 20 74 68 65 20 74 61 62 6c 65 20 69 73 0a  at the table is.
0610: 23 20 73 74 69 6c 6c 20 67 6f 6e 65 2e 0a 23 0a  # still gone..#.
0620: 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 31 2e  do_test table-1.
0630: 36 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20  6 {.  db close. 
0640: 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74   sqlite3 db test
0650: 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  .db.  execsql {S
0660: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
0670: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48  sqlite_master WH
0680: 45 52 45 20 74 79 70 65 21 3d 27 6d 65 74 61 27  ERE type!='meta'
0690: 7d 0a 7d 20 7b 7d 0a 0a 23 20 52 65 70 65 61 74  }.} {}..# Repeat
06a0: 20 74 68 65 20 61 62 6f 76 65 20 73 74 65 70 73   the above steps
06b0: 2c 20 62 75 74 20 74 68 69 73 20 74 69 6d 65 20  , but this time 
06c0: 71 75 6f 74 65 20 74 68 65 20 74 61 62 6c 65 20  quote the table 
06d0: 6e 61 6d 65 2e 0a 23 0a 64 6f 5f 74 65 73 74 20  name..#.do_test 
06e0: 74 61 62 6c 65 2d 31 2e 31 30 20 7b 0a 20 20 65  table-1.10 {.  e
06f0: 78 65 63 73 71 6c 20 7b 43 52 45 41 54 45 20 54  xecsql {CREATE T
0700: 41 42 4c 45 20 22 63 72 65 61 74 65 22 20 28 66  ABLE "create" (f
0710: 31 20 69 6e 74 29 7d 0a 20 20 65 78 65 63 73 71  1 int)}.  execsq
0720: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
0730: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
0740: 72 20 57 48 45 52 45 20 74 79 70 65 21 3d 27 6d  r WHERE type!='m
0750: 65 74 61 27 7d 0a 7d 20 7b 63 72 65 61 74 65 7d  eta'}.} {create}
0760: 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 31  .do_test table-1
0770: 2e 31 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .11 {.  execsql 
0780: 7b 44 52 4f 50 20 54 41 42 4c 45 20 22 63 72 65  {DROP TABLE "cre
0790: 61 74 65 22 7d 0a 20 20 65 78 65 63 73 71 6c 20  ate"}.  execsql 
07a0: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
07b0: 4d 20 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  M "sqlite_master
07c0: 22 20 57 48 45 52 45 20 74 79 70 65 21 3d 27 6d  " WHERE type!='m
07d0: 65 74 61 27 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65  eta'}.} {}.do_te
07e0: 73 74 20 74 61 62 6c 65 2d 31 2e 31 32 20 7b 0a  st table-1.12 {.
07f0: 20 20 65 78 65 63 73 71 6c 20 7b 43 52 45 41 54    execsql {CREAT
0800: 45 20 54 41 42 4c 45 20 74 65 73 74 31 28 22 66  E TABLE test1("f
0810: 31 20 68 6f 22 20 69 6e 74 29 7d 0a 20 20 65 78  1 ho" int)}.  ex
0820: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61  ecsql {SELECT na
0830: 6d 65 20 61 73 20 22 58 22 20 46 52 4f 4d 20 73  me as "X" FROM s
0840: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45  qlite_master WHE
0850: 52 45 20 74 79 70 65 21 3d 27 6d 65 74 61 27 7d  RE type!='meta'}
0860: 0a 7d 20 7b 74 65 73 74 31 7d 0a 64 6f 5f 74 65  .} {test1}.do_te
0870: 73 74 20 74 61 62 6c 65 2d 31 2e 31 33 20 7b 0a  st table-1.13 {.
0880: 20 20 65 78 65 63 73 71 6c 20 7b 44 52 4f 50 20    execsql {DROP 
0890: 54 41 42 4c 45 20 22 54 45 53 54 31 22 7d 0a 20  TABLE "TEST1"}. 
08a0: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
08b0: 20 6e 61 6d 65 20 46 52 4f 4d 20 22 73 71 6c 69   name FROM "sqli
08c0: 74 65 5f 6d 61 73 74 65 72 22 20 57 48 45 52 45  te_master" WHERE
08d0: 20 74 79 70 65 21 3d 27 6d 65 74 61 27 7d 0a 7d   type!='meta'}.}
08e0: 20 7b 7d 0a 0a 0a 0a 23 20 56 65 72 69 66 79 20   {}....# Verify 
08f0: 74 68 61 74 20 77 65 20 63 61 6e 6e 6f 74 20 6d  that we cannot m
0900: 61 6b 65 20 74 77 6f 20 74 61 62 6c 65 73 20 77  ake two tables w
0910: 69 74 68 20 74 68 65 20 73 61 6d 65 20 6e 61 6d  ith the same nam
0920: 65 0a 23 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c  e.#.do_test tabl
0930: 65 2d 32 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  e-2.1 {.  execsq
0940: 6c 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20  l {CREATE TABLE 
0950: 54 45 53 54 32 28 6f 6e 65 20 74 65 78 74 29 7d  TEST2(one text)}
0960: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45  .  catchsql {CRE
0970: 41 54 45 20 54 41 42 4c 45 20 74 65 73 74 32 28  ATE TABLE test2(
0980: 74 77 6f 20 74 65 78 74 20 64 65 66 61 75 6c 74  two text default
0990: 20 27 68 69 27 29 7d 0a 7d 20 7b 31 20 7b 74 61   'hi')}.} {1 {ta
09a0: 62 6c 65 20 74 65 73 74 32 20 61 6c 72 65 61 64  ble test2 alread
09b0: 79 20 65 78 69 73 74 73 7d 7d 0a 64 6f 5f 74 65  y exists}}.do_te
09c0: 73 74 20 74 61 62 6c 65 2d 32 2e 31 2e 31 20 7b  st table-2.1.1 {
09d0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 43 52 45  .  catchsql {CRE
09e0: 41 54 45 20 54 41 42 4c 45 20 22 74 65 73 74 32  ATE TABLE "test2
09f0: 22 20 28 74 77 6f 29 7d 0a 7d 20 7b 31 20 7b 74  " (two)}.} {1 {t
0a00: 61 62 6c 65 20 22 74 65 73 74 32 22 20 61 6c 72  able "test2" alr
0a10: 65 61 64 79 20 65 78 69 73 74 73 7d 7d 0a 64 6f  eady exists}}.do
0a20: 5f 74 65 73 74 20 74 61 62 6c 65 2d 32 2e 31 62  _test table-2.1b
0a30: 20 7b 0a 20 20 73 65 74 20 76 20 5b 63 61 74 63   {.  set v [catc
0a40: 68 20 7b 65 78 65 63 73 71 6c 20 7b 43 52 45 41  h {execsql {CREA
0a50: 54 45 20 54 41 42 4c 45 20 73 71 6c 69 74 65 5f  TE TABLE sqlite_
0a60: 6d 61 73 74 65 72 28 74 77 6f 20 74 65 78 74 29  master(two text)
0a70: 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e  }} msg].  lappen
0a80: 64 20 76 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 6f  d v $msg.} {1 {o
0a90: 62 6a 65 63 74 20 6e 61 6d 65 20 72 65 73 65 72  bject name reser
0aa0: 76 65 64 20 66 6f 72 20 69 6e 74 65 72 6e 61 6c  ved for internal
0ab0: 20 75 73 65 3a 20 73 71 6c 69 74 65 5f 6d 61 73   use: sqlite_mas
0ac0: 74 65 72 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 61  ter}}.do_test ta
0ad0: 62 6c 65 2d 32 2e 31 63 20 7b 0a 20 20 64 62 20  ble-2.1c {.  db 
0ae0: 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 20  close.  sqlite3 
0af0: 64 62 20 74 65 73 74 2e 64 62 0a 20 20 73 65 74  db test.db.  set
0b00: 20 76 20 5b 63 61 74 63 68 20 7b 65 78 65 63 73   v [catch {execs
0b10: 71 6c 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45  ql {CREATE TABLE
0b20: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 28 74   sqlite_master(t
0b30: 77 6f 20 74 65 78 74 29 7d 7d 20 6d 73 67 5d 0a  wo text)}} msg].
0b40: 20 20 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67    lappend v $msg
0b50: 0a 7d 20 7b 31 20 7b 6f 62 6a 65 63 74 20 6e 61  .} {1 {object na
0b60: 6d 65 20 72 65 73 65 72 76 65 64 20 66 6f 72 20  me reserved for 
0b70: 69 6e 74 65 72 6e 61 6c 20 75 73 65 3a 20 73 71  internal use: sq
0b80: 6c 69 74 65 5f 6d 61 73 74 65 72 7d 7d 0a 64 6f  lite_master}}.do
0b90: 5f 74 65 73 74 20 74 61 62 6c 65 2d 32 2e 31 64  _test table-2.1d
0ba0: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 43   {.  catchsql {C
0bb0: 52 45 41 54 45 20 54 41 42 4c 45 20 49 46 20 4e  REATE TABLE IF N
0bc0: 4f 54 20 45 58 49 53 54 53 20 74 65 73 74 32 28  OT EXISTS test2(
0bd0: 78 2c 79 29 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  x,y)}.} {0 {}}.d
0be0: 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 32 2e 31  o_test table-2.1
0bf0: 65 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  e {.  catchsql {
0c00: 43 52 45 41 54 45 20 54 41 42 4c 45 20 49 46 20  CREATE TABLE IF 
0c10: 4e 4f 54 20 45 58 49 53 54 53 20 74 65 73 74 32  NOT EXISTS test2
0c20: 28 78 20 55 4e 49 51 55 45 2c 20 79 20 54 45 58  (x UNIQUE, y TEX
0c30: 54 20 50 52 49 4d 41 52 59 20 4b 45 59 29 7d 0a  T PRIMARY KEY)}.
0c40: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
0c50: 20 74 61 62 6c 65 2d 32 2e 31 66 20 7b 0a 20 20   table-2.1f {.  
0c60: 65 78 65 63 73 71 6c 20 7b 44 52 4f 50 20 54 41  execsql {DROP TA
0c70: 42 4c 45 20 74 65 73 74 32 3b 20 53 45 4c 45 43  BLE test2; SELEC
0c80: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
0c90: 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20  te_master WHERE 
0ca0: 74 79 70 65 21 3d 27 6d 65 74 61 27 7d 0a 7d 20  type!='meta'}.} 
0cb0: 7b 7d 0a 0a 23 20 56 65 72 69 66 79 20 74 68 61  {}..# Verify tha
0cc0: 74 20 77 65 20 63 61 6e 6e 6f 74 20 6d 61 6b 65  t we cannot make
0cd0: 20 61 20 74 61 62 6c 65 20 77 69 74 68 20 74 68   a table with th
0ce0: 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 73 20 61  e same name as a
0cf0: 6e 20 69 6e 64 65 78 0a 23 0a 64 6f 5f 74 65 73  n index.#.do_tes
0d00: 74 20 74 61 62 6c 65 2d 32 2e 32 61 20 7b 0a 20  t table-2.2a {. 
0d10: 20 65 78 65 63 73 71 6c 20 7b 43 52 45 41 54 45   execsql {CREATE
0d20: 20 54 41 42 4c 45 20 74 65 73 74 32 28 6f 6e 65   TABLE test2(one
0d30: 20 74 65 78 74 29 7d 0a 20 20 65 78 65 63 73 71   text)}.  execsq
0d40: 6c 20 7b 43 52 45 41 54 45 20 49 4e 44 45 58 20  l {CREATE INDEX 
0d50: 74 65 73 74 33 20 4f 4e 20 74 65 73 74 32 28 6f  test3 ON test2(o
0d60: 6e 65 29 7d 0a 20 20 63 61 74 63 68 73 71 6c 20  ne)}.  catchsql 
0d70: 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 65  {CREATE TABLE te
0d80: 73 74 33 28 74 77 6f 20 74 65 78 74 29 7d 0a 7d  st3(two text)}.}
0d90: 20 7b 31 20 7b 74 68 65 72 65 20 69 73 20 61 6c   {1 {there is al
0da0: 72 65 61 64 79 20 61 6e 20 69 6e 64 65 78 20 6e  ready an index n
0db0: 61 6d 65 64 20 74 65 73 74 33 7d 7d 0a 64 6f 5f  amed test3}}.do_
0dc0: 74 65 73 74 20 74 61 62 6c 65 2d 32 2e 32 62 20  test table-2.2b 
0dd0: 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 73  {.  db close.  s
0de0: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
0df0: 62 0a 20 20 73 65 74 20 76 20 5b 63 61 74 63 68  b.  set v [catch
0e00: 20 7b 65 78 65 63 73 71 6c 20 7b 43 52 45 41 54   {execsql {CREAT
0e10: 45 20 54 41 42 4c 45 20 74 65 73 74 33 28 74 77  E TABLE test3(tw
0e20: 6f 20 74 65 78 74 29 7d 7d 20 6d 73 67 5d 0a 20  o text)}} msg]. 
0e30: 20 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a   lappend v $msg.
0e40: 7d 20 7b 31 20 7b 74 68 65 72 65 20 69 73 20 61  } {1 {there is a
0e50: 6c 72 65 61 64 79 20 61 6e 20 69 6e 64 65 78 20  lready an index 
0e60: 6e 61 6d 65 64 20 74 65 73 74 33 7d 7d 0a 64 6f  named test3}}.do
0e70: 5f 74 65 73 74 20 74 61 62 6c 65 2d 32 2e 32 63  _test table-2.2c
0e80: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
0e90: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73  LECT name FROM s
0ea0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45  qlite_master WHE
0eb0: 52 45 20 74 79 70 65 21 3d 27 6d 65 74 61 27 20  RE type!='meta' 
0ec0: 4f 52 44 45 52 20 42 59 20 6e 61 6d 65 7d 0a 7d  ORDER BY name}.}
0ed0: 20 7b 74 65 73 74 32 20 74 65 73 74 33 7d 0a 64   {test2 test3}.d
0ee0: 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 32 2e 32  o_test table-2.2
0ef0: 64 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 44  d {.  execsql {D
0f00: 52 4f 50 20 49 4e 44 45 58 20 74 65 73 74 33 7d  ROP INDEX test3}
0f10: 0a 20 20 73 65 74 20 76 20 5b 63 61 74 63 68 20  .  set v [catch 
0f20: 7b 65 78 65 63 73 71 6c 20 7b 43 52 45 41 54 45  {execsql {CREATE
0f30: 20 54 41 42 4c 45 20 74 65 73 74 33 28 74 77 6f   TABLE test3(two
0f40: 20 74 65 78 74 29 7d 7d 20 6d 73 67 5d 0a 20 20   text)}} msg].  
0f50: 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d  lappend v $msg.}
0f60: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
0f70: 74 61 62 6c 65 2d 32 2e 32 65 20 7b 0a 20 20 65  table-2.2e {.  e
0f80: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
0f90: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
0fa0: 6d 61 73 74 65 72 20 57 48 45 52 45 20 74 79 70  master WHERE typ
0fb0: 65 21 3d 27 6d 65 74 61 27 20 4f 52 44 45 52 20  e!='meta' ORDER 
0fc0: 42 59 20 6e 61 6d 65 7d 0a 7d 20 7b 74 65 73 74  BY name}.} {test
0fd0: 32 20 74 65 73 74 33 7d 0a 64 6f 5f 74 65 73 74  2 test3}.do_test
0fe0: 20 74 61 62 6c 65 2d 32 2e 32 66 20 7b 0a 20 20   table-2.2f {.  
0ff0: 65 78 65 63 73 71 6c 20 7b 44 52 4f 50 20 54 41  execsql {DROP TA
1000: 42 4c 45 20 74 65 73 74 32 3b 20 44 52 4f 50 20  BLE test2; DROP 
1010: 54 41 42 4c 45 20 74 65 73 74 33 7d 0a 20 20 65  TABLE test3}.  e
1020: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
1030: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
1040: 6d 61 73 74 65 72 20 57 48 45 52 45 20 74 79 70  master WHERE typ
1050: 65 21 3d 27 6d 65 74 61 27 20 4f 52 44 45 52 20  e!='meta' ORDER 
1060: 42 59 20 6e 61 6d 65 7d 0a 7d 20 7b 7d 0a 0a 23  BY name}.} {}..#
1070: 20 43 72 65 61 74 65 20 61 20 74 61 62 6c 65 20   Create a table 
1080: 77 69 74 68 20 6d 61 6e 79 20 66 69 65 6c 64 20  with many field 
1090: 6e 61 6d 65 73 0a 23 0a 73 65 74 20 62 69 67 5f  names.#.set big_
10a0: 74 61 62 6c 65 20 5c 0a 7b 43 52 45 41 54 45 20  table \.{CREATE 
10b0: 54 41 42 4c 45 20 62 69 67 28 0a 20 20 66 31 20  TABLE big(.  f1 
10c0: 76 61 72 63 68 61 72 28 32 30 29 2c 0a 20 20 66  varchar(20),.  f
10d0: 32 20 63 68 61 72 28 31 30 29 2c 0a 20 20 66 33  2 char(10),.  f3
10e0: 20 76 61 72 63 68 61 72 28 33 30 29 20 70 72 69   varchar(30) pri
10f0: 6d 61 72 79 20 6b 65 79 2c 0a 20 20 66 34 20 74  mary key,.  f4 t
1100: 65 78 74 2c 0a 20 20 66 35 20 74 65 78 74 2c 0a  ext,.  f5 text,.
1110: 20 20 66 36 20 74 65 78 74 2c 0a 20 20 66 37 20    f6 text,.  f7 
1120: 74 65 78 74 2c 0a 20 20 66 38 20 74 65 78 74 2c  text,.  f8 text,
1130: 0a 20 20 66 39 20 74 65 78 74 2c 0a 20 20 66 31  .  f9 text,.  f1
1140: 30 20 74 65 78 74 2c 0a 20 20 66 31 31 20 74 65  0 text,.  f11 te
1150: 78 74 2c 0a 20 20 66 31 32 20 74 65 78 74 2c 0a  xt,.  f12 text,.
1160: 20 20 66 31 33 20 74 65 78 74 2c 0a 20 20 66 31    f13 text,.  f1
1170: 34 20 74 65 78 74 2c 0a 20 20 66 31 35 20 74 65  4 text,.  f15 te
1180: 78 74 2c 0a 20 20 66 31 36 20 74 65 78 74 2c 0a  xt,.  f16 text,.
1190: 20 20 66 31 37 20 74 65 78 74 2c 0a 20 20 66 31    f17 text,.  f1
11a0: 38 20 74 65 78 74 2c 0a 20 20 66 31 39 20 74 65  8 text,.  f19 te
11b0: 78 74 2c 0a 20 20 66 32 30 20 74 65 78 74 0a 29  xt,.  f20 text.)
11c0: 7d 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d  }.do_test table-
11d0: 33 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  3.1 {.  execsql 
11e0: 24 62 69 67 5f 74 61 62 6c 65 0a 20 20 65 78 65  $big_table.  exe
11f0: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 73 71 6c  csql {SELECT sql
1200: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
1210: 74 65 72 20 57 48 45 52 45 20 74 79 70 65 3d 3d  ter WHERE type==
1220: 27 74 61 62 6c 65 27 7d 0a 7d 20 5c 7b 24 62 69  'table'}.} \{$bi
1230: 67 5f 74 61 62 6c 65 5c 7d 0a 64 6f 5f 74 65 73  g_table\}.do_tes
1240: 74 20 74 61 62 6c 65 2d 33 2e 32 20 7b 0a 20 20  t table-3.2 {.  
1250: 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b 65 78  set v [catch {ex
1260: 65 63 73 71 6c 20 7b 43 52 45 41 54 45 20 54 41  ecsql {CREATE TA
1270: 42 4c 45 20 42 49 47 28 78 79 7a 20 66 6f 6f 29  BLE BIG(xyz foo)
1280: 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e  }} msg].  lappen
1290: 64 20 76 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 74  d v $msg.} {1 {t
12a0: 61 62 6c 65 20 42 49 47 20 61 6c 72 65 61 64 79  able BIG already
12b0: 20 65 78 69 73 74 73 7d 7d 0a 64 6f 5f 74 65 73   exists}}.do_tes
12c0: 74 20 74 61 62 6c 65 2d 33 2e 33 20 7b 0a 20 20  t table-3.3 {.  
12d0: 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b 65 78  set v [catch {ex
12e0: 65 63 73 71 6c 20 7b 43 52 45 41 54 45 20 54 41  ecsql {CREATE TA
12f0: 42 4c 45 20 62 69 47 28 78 79 7a 20 66 6f 6f 29  BLE biG(xyz foo)
1300: 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e  }} msg].  lappen
1310: 64 20 76 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 74  d v $msg.} {1 {t
1320: 61 62 6c 65 20 62 69 47 20 61 6c 72 65 61 64 79  able biG already
1330: 20 65 78 69 73 74 73 7d 7d 0a 64 6f 5f 74 65 73   exists}}.do_tes
1340: 74 20 74 61 62 6c 65 2d 33 2e 34 20 7b 0a 20 20  t table-3.4 {.  
1350: 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b 65 78  set v [catch {ex
1360: 65 63 73 71 6c 20 7b 43 52 45 41 54 45 20 54 41  ecsql {CREATE TA
1370: 42 4c 45 20 62 49 67 28 78 79 7a 20 66 6f 6f 29  BLE bIg(xyz foo)
1380: 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e  }} msg].  lappen
1390: 64 20 76 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 74  d v $msg.} {1 {t
13a0: 61 62 6c 65 20 62 49 67 20 61 6c 72 65 61 64 79  able bIg already
13b0: 20 65 78 69 73 74 73 7d 7d 0a 64 6f 5f 74 65 73   exists}}.do_tes
13c0: 74 20 74 61 62 6c 65 2d 33 2e 35 20 7b 0a 20 20  t table-3.5 {.  
13d0: 64 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74  db close.  sqlit
13e0: 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20  e3 db test.db.  
13f0: 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b 65 78  set v [catch {ex
1400: 65 63 73 71 6c 20 7b 43 52 45 41 54 45 20 54 41  ecsql {CREATE TA
1410: 42 4c 45 20 42 69 67 28 78 79 7a 20 66 6f 6f 29  BLE Big(xyz foo)
1420: 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e  }} msg].  lappen
1430: 64 20 76 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 74  d v $msg.} {1 {t
1440: 61 62 6c 65 20 42 69 67 20 61 6c 72 65 61 64 79  able Big already
1450: 20 65 78 69 73 74 73 7d 7d 0a 64 6f 5f 74 65 73   exists}}.do_tes
1460: 74 20 74 61 62 6c 65 2d 33 2e 36 20 7b 0a 20 20  t table-3.6 {.  
1470: 65 78 65 63 73 71 6c 20 7b 44 52 4f 50 20 54 41  execsql {DROP TA
1480: 42 4c 45 20 62 69 67 7d 0a 20 20 65 78 65 63 73  BLE big}.  execs
1490: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
14a0: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
14b0: 65 72 20 57 48 45 52 45 20 74 79 70 65 21 3d 27  er WHERE type!='
14c0: 6d 65 74 61 27 7d 0a 7d 20 7b 7d 0a 0a 23 20 54  meta'}.} {}..# T
14d0: 72 79 20 63 72 65 61 74 69 6e 67 20 6c 61 72 67  ry creating larg
14e0: 65 20 6e 75 6d 62 65 72 73 20 6f 66 20 74 61 62  e numbers of tab
14f0: 6c 65 73 0a 23 0a 73 65 74 20 72 20 7b 7d 0a 66  les.#.set r {}.f
1500: 6f 72 20 7b 73 65 74 20 69 20 31 7d 20 7b 24 69  or {set i 1} {$i
1510: 3c 3d 31 30 30 7d 20 7b 69 6e 63 72 20 69 7d 20  <=100} {incr i} 
1520: 7b 0a 20 20 6c 61 70 70 65 6e 64 20 72 20 5b 66  {.  lappend r [f
1530: 6f 72 6d 61 74 20 74 65 73 74 25 30 33 64 20 24  ormat test%03d $
1540: 69 5d 0a 7d 0a 64 6f 5f 74 65 73 74 20 74 61 62  i].}.do_test tab
1550: 6c 65 2d 34 2e 31 20 7b 0a 20 20 66 6f 72 20 7b  le-4.1 {.  for {
1560: 73 65 74 20 69 20 31 7d 20 7b 24 69 3c 3d 31 30  set i 1} {$i<=10
1570: 30 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20  0} {incr i} {.  
1580: 20 20 73 65 74 20 73 71 6c 20 22 43 52 45 41 54    set sql "CREAT
1590: 45 20 54 41 42 4c 45 20 5b 66 6f 72 6d 61 74 20  E TABLE [format 
15a0: 74 65 73 74 25 30 33 64 20 24 69 5d 20 28 22 0a  test%03d $i] (".
15b0: 20 20 20 20 66 6f 72 20 7b 73 65 74 20 6b 20 31      for {set k 1
15c0: 7d 20 7b 24 6b 3c 24 69 7d 20 7b 69 6e 63 72 20  } {$k<$i} {incr 
15d0: 6b 7d 20 7b 0a 20 20 20 20 20 20 61 70 70 65 6e  k} {.      appen
15e0: 64 20 73 71 6c 20 22 66 69 65 6c 64 24 6b 20 74  d sql "field$k t
15f0: 65 78 74 2c 22 0a 20 20 20 20 7d 0a 20 20 20 20  ext,".    }.    
1600: 61 70 70 65 6e 64 20 73 71 6c 20 22 6c 61 73 74  append sql "last
1610: 5f 66 69 65 6c 64 20 74 65 78 74 29 22 0a 20 20  _field text)".  
1620: 20 20 65 78 65 63 73 71 6c 20 24 73 71 6c 0a 20    execsql $sql. 
1630: 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   }.  execsql {SE
1640: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73  LECT name FROM s
1650: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45  qlite_master WHE
1660: 52 45 20 74 79 70 65 21 3d 27 6d 65 74 61 27 20  RE type!='meta' 
1670: 4f 52 44 45 52 20 42 59 20 6e 61 6d 65 7d 0a 7d  ORDER BY name}.}
1680: 20 24 72 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c   $r.do_test tabl
1690: 65 2d 34 2e 31 62 20 7b 0a 20 20 64 62 20 63 6c  e-4.1b {.  db cl
16a0: 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 20 64 62  ose.  sqlite3 db
16b0: 20 74 65 73 74 2e 64 62 0a 20 20 65 78 65 63 73   test.db.  execs
16c0: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
16d0: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
16e0: 65 72 20 57 48 45 52 45 20 74 79 70 65 21 3d 27  er WHERE type!='
16f0: 6d 65 74 61 27 20 4f 52 44 45 52 20 42 59 20 6e  meta' ORDER BY n
1700: 61 6d 65 7d 0a 7d 20 24 72 0a 0a 23 20 44 72 6f  ame}.} $r..# Dro
1710: 70 20 74 68 65 20 65 76 65 6e 20 6e 75 6d 62 65  p the even numbe
1720: 72 65 64 20 74 61 62 6c 65 73 0a 23 0a 73 65 74  red tables.#.set
1730: 20 72 20 7b 7d 0a 66 6f 72 20 7b 73 65 74 20 69   r {}.for {set i
1740: 20 31 7d 20 7b 24 69 3c 3d 31 30 30 7d 20 7b 69   1} {$i<=100} {i
1750: 6e 63 72 20 69 20 32 7d 20 7b 0a 20 20 6c 61 70  ncr i 2} {.  lap
1760: 70 65 6e 64 20 72 20 5b 66 6f 72 6d 61 74 20 74  pend r [format t
1770: 65 73 74 25 30 33 64 20 24 69 5d 0a 7d 0a 64 6f  est%03d $i].}.do
1780: 5f 74 65 73 74 20 74 61 62 6c 65 2d 34 2e 32 20  _test table-4.2 
1790: 7b 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 20 32  {.  for {set i 2
17a0: 7d 20 7b 24 69 3c 3d 31 30 30 7d 20 7b 69 6e 63  } {$i<=100} {inc
17b0: 72 20 69 20 32 7d 20 7b 0a 20 20 20 20 23 20 69  r i 2} {.    # i
17c0: 66 20 7b 24 69 3d 3d 33 38 7d 20 7b 65 78 65 63  f {$i==38} {exec
17d0: 73 71 6c 20 7b 70 72 61 67 6d 61 20 76 64 62 65  sql {pragma vdbe
17e0: 5f 74 72 61 63 65 3d 6f 6e 7d 7d 0a 20 20 20 20  _trace=on}}.    
17f0: 73 65 74 20 73 71 6c 20 22 44 52 4f 50 20 54 41  set sql "DROP TA
1800: 42 4c 45 20 5b 66 6f 72 6d 61 74 20 54 45 53 54  BLE [format TEST
1810: 25 30 33 64 20 24 69 5d 22 0a 20 20 20 20 65 78  %03d $i]".    ex
1820: 65 63 73 71 6c 20 24 73 71 6c 0a 20 20 7d 0a 20  ecsql $sql.  }. 
1830: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
1840: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
1850: 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20 74  e_master WHERE t
1860: 79 70 65 21 3d 27 6d 65 74 61 27 20 4f 52 44 45  ype!='meta' ORDE
1870: 52 20 42 59 20 6e 61 6d 65 7d 0a 7d 20 24 72 0a  R BY name}.} $r.
1880: 23 65 78 69 74 0a 0a 23 20 44 72 6f 70 20 74 68  #exit..# Drop th
1890: 65 20 6f 64 64 20 6e 75 6d 62 65 72 20 74 61 62  e odd number tab
18a0: 6c 65 73 0a 23 0a 64 6f 5f 74 65 73 74 20 74 61  les.#.do_test ta
18b0: 62 6c 65 2d 34 2e 33 20 7b 0a 20 20 66 6f 72 20  ble-4.3 {.  for 
18c0: 7b 73 65 74 20 69 20 31 7d 20 7b 24 69 3c 3d 31  {set i 1} {$i<=1
18d0: 30 30 7d 20 7b 69 6e 63 72 20 69 20 32 7d 20 7b  00} {incr i 2} {
18e0: 0a 20 20 20 20 73 65 74 20 73 71 6c 20 22 44 52  .    set sql "DR
18f0: 4f 50 20 54 41 42 4c 45 20 5b 66 6f 72 6d 61 74  OP TABLE [format
1900: 20 74 65 73 74 25 30 33 64 20 24 69 5d 22 0a 20   test%03d $i]". 
1910: 20 20 20 65 78 65 63 73 71 6c 20 24 73 71 6c 0a     execsql $sql.
1920: 20 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 53    }.  execsql {S
1930: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
1940: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48  sqlite_master WH
1950: 45 52 45 20 74 79 70 65 21 3d 27 6d 65 74 61 27  ERE type!='meta'
1960: 20 4f 52 44 45 52 20 42 59 20 6e 61 6d 65 7d 0a   ORDER BY name}.
1970: 7d 20 7b 7d 0a 0a 23 20 54 72 79 20 74 6f 20 64  } {}..# Try to d
1980: 72 6f 70 20 61 20 74 61 62 6c 65 20 74 68 61 74  rop a table that
1990: 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 0a   does not exist.
19a0: 23 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d  #.do_test table-
19b0: 35 2e 31 2e 31 20 7b 0a 20 20 63 61 74 63 68 73  5.1.1 {.  catchs
19c0: 71 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45 20 74  ql {DROP TABLE t
19d0: 65 73 74 30 30 39 7d 0a 7d 20 7b 31 20 7b 6e 6f  est009}.} {1 {no
19e0: 20 73 75 63 68 20 74 61 62 6c 65 3a 20 74 65 73   such table: tes
19f0: 74 30 30 39 7d 7d 0a 64 6f 5f 74 65 73 74 20 74  t009}}.do_test t
1a00: 61 62 6c 65 2d 35 2e 31 2e 32 20 7b 0a 20 20 63  able-5.1.2 {.  c
1a10: 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54 41  atchsql {DROP TA
1a20: 42 4c 45 20 49 46 20 45 58 49 53 54 53 20 74 65  BLE IF EXISTS te
1a30: 73 74 30 30 39 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a  st009}.} {0 {}}.
1a40: 0a 23 20 54 72 79 20 74 6f 20 64 72 6f 70 20 73  .# Try to drop s
1a50: 71 6c 69 74 65 5f 6d 61 73 74 65 72 0a 23 0a 64  qlite_master.#.d
1a60: 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 35 2e 32  o_test table-5.2
1a70: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44   {.  catchsql {D
1a80: 52 4f 50 20 54 41 42 4c 45 20 49 46 20 45 58 49  ROP TABLE IF EXI
1a90: 53 54 53 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  STS sqlite_maste
1aa0: 72 7d 0a 7d 20 7b 31 20 7b 74 61 62 6c 65 20 73  r}.} {1 {table s
1ab0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 6d 61 79  qlite_master may
1ac0: 20 6e 6f 74 20 62 65 20 64 72 6f 70 70 65 64 7d   not be dropped}
1ad0: 7d 0a 0a 23 20 44 72 6f 70 70 69 6e 67 20 73 71  }..# Dropping sq
1ae0: 6c 69 74 65 5f 73 74 61 74 4e 20 74 61 62 6c 65  lite_statN table
1af0: 73 20 69 73 20 4f 4b 2e 0a 23 0a 64 6f 5f 74 65  s is OK..#.do_te
1b00: 73 74 20 74 61 62 6c 65 2d 35 2e 32 2e 31 20 7b  st table-5.2.1 {
1b10: 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20  .  db eval {.   
1b20: 20 41 4e 41 4c 59 5a 45 3b 0a 20 20 20 20 44 52   ANALYZE;.    DR
1b30: 4f 50 20 54 41 42 4c 45 20 49 46 20 45 58 49 53  OP TABLE IF EXIS
1b40: 54 53 20 73 71 6c 69 74 65 5f 73 74 61 74 31 3b  TS sqlite_stat1;
1b50: 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20  .    DROP TABLE 
1b60: 49 46 20 45 58 49 53 54 53 20 73 71 6c 69 74 65  IF EXISTS sqlite
1b70: 5f 73 74 61 74 32 3b 0a 20 20 20 20 44 52 4f 50  _stat2;.    DROP
1b80: 20 54 41 42 4c 45 20 49 46 20 45 58 49 53 54 53   TABLE IF EXISTS
1b90: 20 73 71 6c 69 74 65 5f 73 74 61 74 33 3b 0a 20   sqlite_stat3;. 
1ba0: 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 49 46     DROP TABLE IF
1bb0: 20 45 58 49 53 54 53 20 73 71 6c 69 74 65 5f 73   EXISTS sqlite_s
1bc0: 74 61 74 34 3b 0a 20 20 20 20 53 45 4c 45 43 54  tat4;.    SELECT
1bd0: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
1be0: 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20 6e  e_master WHERE n
1bf0: 61 6d 65 20 47 4c 4f 42 20 27 73 71 6c 69 74 65  ame GLOB 'sqlite
1c00: 5f 73 74 61 74 2a 27 3b 0a 20 20 7d 0a 7d 20 7b  _stat*';.  }.} {
1c10: 7d 0a 0a 23 20 4d 61 6b 65 20 73 75 72 65 20 61  }..# Make sure a
1c20: 6e 20 45 58 50 4c 41 49 4e 20 64 6f 65 73 20 6e  n EXPLAIN does n
1c30: 6f 74 20 72 65 61 6c 6c 79 20 63 72 65 61 74 65  ot really create
1c40: 20 61 20 6e 65 77 20 74 61 62 6c 65 0a 23 0a 64   a new table.#.d
1c50: 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 35 2e 33  o_test table-5.3
1c60: 20 7b 0a 20 20 69 66 63 61 70 61 62 6c 65 20 7b   {.  ifcapable {
1c70: 65 78 70 6c 61 69 6e 7d 20 7b 0a 20 20 20 20 65  explain} {.    e
1c80: 78 65 63 73 71 6c 20 7b 45 58 50 4c 41 49 4e 20  xecsql {EXPLAIN 
1c90: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 65 73  CREATE TABLE tes
1ca0: 74 31 28 66 31 20 69 6e 74 29 7d 0a 20 20 7d 0a  t1(f1 int)}.  }.
1cb0: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
1cc0: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
1cd0: 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20  te_master WHERE 
1ce0: 74 79 70 65 21 3d 27 6d 65 74 61 27 7d 0a 7d 20  type!='meta'}.} 
1cf0: 7b 7d 0a 0a 23 20 4d 61 6b 65 20 73 75 72 65 20  {}..# Make sure 
1d00: 61 6e 20 45 58 50 4c 41 49 4e 20 64 6f 65 73 20  an EXPLAIN does 
1d10: 6e 6f 74 20 72 65 61 6c 6c 79 20 64 72 6f 70 20  not really drop 
1d20: 61 6e 20 65 78 69 73 74 69 6e 67 20 74 61 62 6c  an existing tabl
1d30: 65 0a 23 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c  e.#.do_test tabl
1d40: 65 2d 35 2e 34 20 7b 0a 20 20 65 78 65 63 73 71  e-5.4 {.  execsq
1d50: 6c 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20  l {CREATE TABLE 
1d60: 74 65 73 74 31 28 66 31 20 69 6e 74 29 7d 0a 20  test1(f1 int)}. 
1d70: 20 69 66 63 61 70 61 62 6c 65 20 7b 65 78 70 6c   ifcapable {expl
1d80: 61 69 6e 7d 20 7b 0a 20 20 20 20 65 78 65 63 73  ain} {.    execs
1d90: 71 6c 20 7b 45 58 50 4c 41 49 4e 20 44 52 4f 50  ql {EXPLAIN DROP
1da0: 20 54 41 42 4c 45 20 74 65 73 74 31 7d 0a 20 20   TABLE test1}.  
1db0: 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  }.  execsql {SEL
1dc0: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
1dd0: 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52  lite_master WHER
1de0: 45 20 74 79 70 65 21 3d 27 6d 65 74 61 27 7d 0a  E type!='meta'}.
1df0: 7d 20 7b 74 65 73 74 31 7d 0a 0a 23 20 43 72 65  } {test1}..# Cre
1e00: 61 74 65 20 61 20 74 61 62 6c 65 20 77 69 74 68  ate a table with
1e10: 20 61 20 67 6f 6f 66 79 20 6e 61 6d 65 0a 23 0a   a goofy name.#.
1e20: 23 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 36  #do_test table-6
1e30: 2e 31 20 7b 0a 23 20 20 65 78 65 63 73 71 6c 20  .1 {.#  execsql 
1e40: 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 27 53  {CREATE TABLE 'S
1e50: 70 61 63 65 73 20 49 6e 20 54 68 69 73 20 4e 61  paces In This Na
1e60: 6d 65 21 27 28 78 20 69 6e 74 29 7d 0a 23 20 20  me!'(x int)}.#  
1e70: 65 78 65 63 73 71 6c 20 7b 49 4e 53 45 52 54 20  execsql {INSERT 
1e80: 49 4e 54 4f 20 27 73 70 61 63 65 73 20 69 6e 20  INTO 'spaces in 
1e90: 74 68 69 73 20 6e 61 6d 65 21 27 20 56 41 4c 55  this name!' VALU
1ea0: 45 53 28 31 29 7d 0a 23 20 20 73 65 74 20 6c 69  ES(1)}.#  set li
1eb0: 73 74 20 5b 67 6c 6f 62 20 2d 6e 6f 63 6f 6d 70  st [glob -nocomp
1ec0: 6c 61 69 6e 20 74 65 73 74 64 62 2f 73 70 61 63  lain testdb/spac
1ed0: 65 73 2a 2e 74 62 6c 5d 0a 23 7d 20 7b 74 65 73  es*.tbl].#} {tes
1ee0: 74 64 62 2f 73 70 61 63 65 73 2b 69 6e 2b 74 68  tdb/spaces+in+th
1ef0: 69 73 2b 6e 61 6d 65 2b 2e 74 62 6c 7d 0a 0a 23  is+name+.tbl}..#
1f00: 20 54 72 79 20 75 73 69 6e 67 20 6b 65 79 77 6f   Try using keywo
1f10: 72 64 73 20 61 73 20 74 61 62 6c 65 20 6e 61 6d  rds as table nam
1f20: 65 73 20 6f 72 20 63 6f 6c 75 6d 6e 20 6e 61 6d  es or column nam
1f30: 65 73 2e 0a 23 20 0a 64 6f 5f 74 65 73 74 20 74  es..# .do_test t
1f40: 61 62 6c 65 2d 37 2e 31 20 7b 0a 20 20 73 65 74  able-7.1 {.  set
1f50: 20 76 20 5b 63 61 74 63 68 20 7b 65 78 65 63 73   v [catch {execs
1f60: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
1f70: 54 41 42 4c 45 20 77 65 69 72 64 28 0a 20 20 20  TABLE weird(.   
1f80: 20 20 20 64 65 73 63 20 74 65 78 74 2c 0a 20 20     desc text,.  
1f90: 20 20 20 20 61 73 63 20 74 65 78 74 2c 0a 20 20      asc text,.  
1fa0: 20 20 20 20 6b 65 79 20 69 6e 74 2c 0a 20 20 20      key int,.   
1fb0: 20 20 20 5b 31 34 5f 76 61 63 5d 20 62 6f 6f 6c     [14_vac] bool
1fc0: 65 61 6e 2c 0a 20 20 20 20 20 20 66 75 7a 7a 79  ean,.      fuzzy
1fd0: 5f 64 6f 67 5f 31 32 20 76 61 72 63 68 61 72 28  _dog_12 varchar(
1fe0: 31 30 29 2c 0a 20 20 20 20 20 20 62 65 67 69 6e  10),.      begin
1ff0: 20 62 6c 6f 62 2c 0a 20 20 20 20 20 20 65 6e 64   blob,.      end
2000: 20 63 6c 6f 62 0a 20 20 20 20 29 0a 20 20 7d 7d   clob.    ).  }}
2010: 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20   msg].  lappend 
2020: 76 20 24 6d 73 67 0a 7d 20 7b 30 20 7b 7d 7d 0a  v $msg.} {0 {}}.
2030: 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 37 2e  do_test table-7.
2040: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  2 {.  execsql {.
2050: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
2060: 77 65 69 72 64 20 56 41 4c 55 45 53 28 27 61 27  weird VALUES('a'
2070: 2c 27 62 27 2c 39 2c 30 2c 27 78 79 7a 27 2c 27  ,'b',9,0,'xyz','
2080: 68 69 27 2c 27 79 27 27 61 6c 6c 27 29 3b 0a 20  hi','y''all');. 
2090: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
20a0: 20 77 65 69 72 64 3b 0a 20 20 7d 0a 7d 20 7b 61   weird;.  }.} {a
20b0: 20 62 20 39 20 30 20 78 79 7a 20 68 69 20 79 27   b 9 0 xyz hi y'
20c0: 61 6c 6c 7d 0a 64 6f 5f 74 65 73 74 20 74 61 62  all}.do_test tab
20d0: 6c 65 2d 37 2e 33 20 7b 0a 20 20 65 78 65 63 73  le-7.3 {.  execs
20e0: 71 6c 32 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  ql2 {.    SELECT
20f0: 20 2a 20 46 52 4f 4d 20 77 65 69 72 64 3b 0a 20   * FROM weird;. 
2100: 20 7d 0a 7d 20 7b 64 65 73 63 20 61 20 61 73 63   }.} {desc a asc
2110: 20 62 20 6b 65 79 20 39 20 31 34 5f 76 61 63 20   b key 9 14_vac 
2120: 30 20 66 75 7a 7a 79 5f 64 6f 67 5f 31 32 20 78  0 fuzzy_dog_12 x
2130: 79 7a 20 62 65 67 69 6e 20 68 69 20 65 6e 64 20  yz begin hi end 
2140: 79 27 61 6c 6c 7d 0a 64 6f 5f 74 65 73 74 20 74  y'all}.do_test t
2150: 61 62 6c 65 2d 37 2e 33 20 7b 0a 20 20 65 78 65  able-7.3 {.  exe
2160: 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  csql {.    CREAT
2170: 45 20 54 41 42 4c 45 20 73 61 76 65 70 6f 69 6e  E TABLE savepoin
2180: 74 28 72 65 6c 65 61 73 65 29 3b 0a 20 20 20 20  t(release);.    
2190: 49 4e 53 45 52 54 20 49 4e 54 4f 20 73 61 76 65  INSERT INTO save
21a0: 70 6f 69 6e 74 28 72 65 6c 65 61 73 65 29 20 56  point(release) V
21b0: 41 4c 55 45 53 28 31 30 29 3b 0a 20 20 20 20 55  ALUES(10);.    U
21c0: 50 44 41 54 45 20 73 61 76 65 70 6f 69 6e 74 20  PDATE savepoint 
21d0: 53 45 54 20 72 65 6c 65 61 73 65 20 3d 20 35 3b  SET release = 5;
21e0: 0a 20 20 20 20 53 45 4c 45 43 54 20 72 65 6c 65  .    SELECT rele
21f0: 61 73 65 20 46 52 4f 4d 20 73 61 76 65 70 6f 69  ase FROM savepoi
2200: 6e 74 3b 0a 20 20 7d 0a 7d 20 7b 35 7d 0a 0a 23  nt;.  }.} {5}..#
2210: 20 54 72 79 20 6f 75 74 20 74 68 65 20 43 52 45   Try out the CRE
2220: 41 54 45 20 54 41 42 4c 45 20 41 53 20 73 79 6e  ATE TABLE AS syn
2230: 74 61 78 0a 23 0a 64 6f 5f 74 65 73 74 20 74 61  tax.#.do_test ta
2240: 62 6c 65 2d 38 2e 31 20 7b 0a 20 20 65 78 65 63  ble-8.1 {.  exec
2250: 73 71 6c 32 20 7b 0a 20 20 20 20 43 52 45 41 54  sql2 {.    CREAT
2260: 45 20 54 41 42 4c 45 20 74 32 20 41 53 20 53 45  E TABLE t2 AS SE
2270: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 77 65 69 72  LECT * FROM weir
2280: 64 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20  d;.    SELECT * 
2290: 46 52 4f 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b  FROM t2;.  }.} {
22a0: 64 65 73 63 20 61 20 61 73 63 20 62 20 6b 65 79  desc a asc b key
22b0: 20 39 20 31 34 5f 76 61 63 20 30 20 66 75 7a 7a   9 14_vac 0 fuzz
22c0: 79 5f 64 6f 67 5f 31 32 20 78 79 7a 20 62 65 67  y_dog_12 xyz beg
22d0: 69 6e 20 68 69 20 65 6e 64 20 79 27 61 6c 6c 7d  in hi end y'all}
22e0: 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 38  .do_test table-8
22f0: 2e 31 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  .1.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 32 27 3b 0a 20 20 7d 0a 7d 20 7b 7b 43 52  't2';.  }.} {{CR
2340: 45 41 54 45 20 54 41 42 4c 45 20 74 32 28 0a 20  EATE TABLE t2(. 
2350: 20 22 64 65 73 63 22 20 54 45 58 54 2c 0a 20 20   "desc" TEXT,.  
2360: 22 61 73 63 22 20 54 45 58 54 2c 0a 20 20 22 6b  "asc" TEXT,.  "k
2370: 65 79 22 20 49 4e 54 2c 0a 20 20 22 31 34 5f 76  ey" INT,.  "14_v
2380: 61 63 22 20 4e 55 4d 2c 0a 20 20 66 75 7a 7a 79  ac" NUM,.  fuzzy
2390: 5f 64 6f 67 5f 31 32 20 54 45 58 54 2c 0a 20 20  _dog_12 TEXT,.  
23a0: 22 62 65 67 69 6e 22 2c 0a 20 20 22 65 6e 64 22  "begin",.  "end"
23b0: 20 54 45 58 54 0a 29 7d 7d 0a 64 6f 5f 74 65 73   TEXT.)}}.do_tes
23c0: 74 20 74 61 62 6c 65 2d 38 2e 32 20 7b 0a 20 20  t table-8.2 {.  
23d0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52  execsql {.    CR
23e0: 45 41 54 45 20 54 41 42 4c 45 20 22 74 33 22 22  EATE TABLE "t3""
23f0: 78 79 7a 22 28 61 2c 62 2c 63 29 3b 0a 20 20 20  xyz"(a,b,c);.   
2400: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 5b 74 33   INSERT INTO [t3
2410: 22 78 79 7a 5d 20 56 41 4c 55 45 53 28 31 2c 32  "xyz] VALUES(1,2
2420: 2c 33 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20  ,3);.    SELECT 
2430: 2a 20 46 52 4f 4d 20 5b 74 33 22 78 79 7a 5d 3b  * FROM [t3"xyz];
2440: 0a 20 20 7d 0a 7d 20 7b 31 20 32 20 33 7d 0a 64  .  }.} {1 2 3}.d
2450: 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 38 2e 33  o_test table-8.3
2460: 20 7b 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 0a   {.  execsql2 {.
2470: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
2480: 20 5b 74 34 22 61 62 63 5d 20 41 53 20 53 45 4c   [t4"abc] AS SEL
2490: 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 61 73 20  ECT count(*) as 
24a0: 63 6e 74 2c 20 6d 61 78 28 62 2b 63 29 20 46 52  cnt, max(b+c) FR
24b0: 4f 4d 20 5b 74 33 22 78 79 7a 5d 3b 0a 20 20 20  OM [t3"xyz];.   
24c0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 5b   SELECT * FROM [
24d0: 74 34 22 61 62 63 5d 3b 0a 20 20 7d 0a 7d 20 7b  t4"abc];.  }.} {
24e0: 63 6e 74 20 31 20 6d 61 78 28 62 2b 63 29 20 35  cnt 1 max(b+c) 5
24f0: 7d 0a 0a 23 20 55 70 64 61 74 65 20 66 6f 72 20  }..# Update for 
2500: 76 33 3a 20 54 68 65 20 64 65 63 6c 61 72 61 74  v3: The declarat
2510: 69 6f 6e 20 74 79 70 65 20 6f 66 20 61 6e 79 74  ion type of anyt
2520: 68 69 6e 67 20 65 78 63 65 70 74 20 61 20 63 6f  hing except a co
2530: 6c 75 6d 6e 20 69 73 20 6e 6f 77 20 61 0a 23 20  lumn is now a.# 
2540: 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 2c 20 73 6f  NULL pointer, so
2550: 20 74 68 65 20 63 72 65 61 74 65 64 20 74 61 62   the created tab
2560: 6c 65 20 68 61 73 20 6e 6f 20 63 6f 6c 75 6d 6e  le has no column
2570: 20 74 79 70 65 73 2e 20 28 43 68 61 6e 67 65 64   types. (Changed
2580: 20 72 65 73 75 6c 74 0a 23 20 66 72 6f 6d 20 7b   result.# from {
2590: 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 27 74  {CREATE TABLE 't
25a0: 34 22 61 62 63 27 28 63 6e 74 20 4e 55 4d 45 52  4"abc'(cnt NUMER
25b0: 49 43 2c 22 6d 61 78 28 62 2b 63 29 22 20 4e 55  IC,"max(b+c)" NU
25c0: 4d 45 52 49 43 29 7d 7d 29 2e 0a 64 6f 5f 74 65  MERIC)}})..do_te
25d0: 73 74 20 74 61 62 6c 65 2d 38 2e 33 2e 31 20 7b  st table-8.3.1 {
25e0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
25f0: 20 53 45 4c 45 43 54 20 73 71 6c 20 46 52 4f 4d   SELECT sql FROM
2600: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57   sqlite_master W
2610: 48 45 52 45 20 6e 61 6d 65 3d 27 74 34 22 61 62  HERE name='t4"ab
2620: 63 27 0a 20 20 7d 0a 7d 20 7b 7b 43 52 45 41 54  c'.  }.} {{CREAT
2630: 45 20 54 41 42 4c 45 20 22 74 34 22 22 61 62 63  E TABLE "t4""abc
2640: 22 28 63 6e 74 2c 22 6d 61 78 28 62 2b 63 29 22  "(cnt,"max(b+c)"
2650: 29 7d 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20 74  )}}..ifcapable t
2660: 65 6d 70 64 62 20 7b 0a 20 20 64 6f 5f 74 65 73  empdb {.  do_tes
2670: 74 20 74 61 62 6c 65 2d 38 2e 34 20 7b 0a 20 20  t table-8.4 {.  
2680: 20 20 65 78 65 63 73 71 6c 32 20 7b 0a 20 20 20    execsql2 {.   
2690: 20 20 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52     CREATE TEMPOR
26a0: 41 52 59 20 54 41 42 4c 45 20 74 35 20 41 53 20  ARY TABLE t5 AS 
26b0: 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20  SELECT count(*) 
26c0: 41 53 20 5b 79 27 61 6c 6c 5d 20 46 52 4f 4d 20  AS [y'all] FROM 
26d0: 5b 74 33 22 78 79 7a 5d 3b 0a 20 20 20 20 20 20  [t3"xyz];.      
26e0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 35  SELECT * FROM t5
26f0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 79 27 61  ;.    }.  } {y'a
2700: 6c 6c 20 31 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74  ll 1}.}..do_test
2710: 20 74 61 62 6c 65 2d 38 2e 35 20 7b 0a 20 20 64   table-8.5 {.  d
2720: 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65  b close.  sqlite
2730: 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65  3 db test.db.  e
2740: 78 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 53 45  xecsql2 {.    SE
2750: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 5b 74 34 22  LECT * FROM [t4"
2760: 61 62 63 5d 3b 0a 20 20 7d 0a 7d 20 7b 63 6e 74  abc];.  }.} {cnt
2770: 20 31 20 6d 61 78 28 62 2b 63 29 20 35 7d 0a 64   1 max(b+c) 5}.d
2780: 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 38 2e 36  o_test table-8.6
2790: 20 7b 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 0a   {.  execsql2 {.
27a0: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
27b0: 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b 64 65 73  M t2;.  }.} {des
27c0: 63 20 61 20 61 73 63 20 62 20 6b 65 79 20 39 20  c a asc b key 9 
27d0: 31 34 5f 76 61 63 20 30 20 66 75 7a 7a 79 5f 64  14_vac 0 fuzzy_d
27e0: 6f 67 5f 31 32 20 78 79 7a 20 62 65 67 69 6e 20  og_12 xyz begin 
27f0: 68 69 20 65 6e 64 20 79 27 61 6c 6c 7d 0a 64 6f  hi end y'all}.do
2800: 5f 74 65 73 74 20 74 61 62 6c 65 2d 38 2e 37 20  _test table-8.7 
2810: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  {.  catchsql {. 
2820: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
2830: 20 74 35 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 6e   t5;.  }.} {1 {n
2840: 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20 74 35  o such table: t5
2850: 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65  }}.do_test table
2860: 2d 38 2e 38 20 7b 0a 20 20 63 61 74 63 68 73 71  -8.8 {.  catchsq
2870: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
2880: 41 42 4c 45 20 74 35 20 41 53 20 53 45 4c 45 43  ABLE t5 AS SELEC
2890: 54 20 2a 20 46 52 4f 4d 20 6e 6f 5f 73 75 63 68  T * FROM no_such
28a0: 5f 74 61 62 6c 65 3b 0a 20 20 7d 0a 7d 20 7b 31  _table;.  }.} {1
28b0: 20 7b 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a   {no such table:
28c0: 20 6e 6f 5f 73 75 63 68 5f 74 61 62 6c 65 7d 7d   no_such_table}}
28d0: 0a 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d  ..do_test table-
28e0: 38 2e 39 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  8.9 {.  execsql 
28f0: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  {.    CREATE TAB
2900: 4c 45 20 74 31 30 28 22 63 6f 6c 2e 31 22 20 5b  LE t10("col.1" [
2910: 63 68 61 72 2e 33 5d 29 3b 0a 20 20 20 20 43 52  char.3]);.    CR
2920: 45 41 54 45 20 54 41 42 4c 45 20 74 31 31 20 41  EATE TABLE t11 A
2930: 53 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  S SELECT * FROM 
2940: 74 31 30 3b 0a 20 20 20 20 53 45 4c 45 43 54 20  t10;.    SELECT 
2950: 73 71 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  sql FROM sqlite_
2960: 6d 61 73 74 65 72 20 57 48 45 52 45 20 6e 61 6d  master WHERE nam
2970: 65 20 3d 20 27 74 31 31 27 3b 0a 20 20 7d 0a 7d  e = 't11';.  }.}
2980: 20 7b 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20   {{CREATE TABLE 
2990: 74 31 31 28 22 63 6f 6c 2e 31 22 20 54 45 58 54  t11("col.1" TEXT
29a0: 29 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c  )}}.do_test tabl
29b0: 65 2d 38 2e 31 30 20 7b 0a 20 20 65 78 65 63 73  e-8.10 {.  execs
29c0: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
29d0: 54 41 42 4c 45 20 74 31 32 28 0a 20 20 20 20 20  TABLE t12(.     
29e0: 20 61 20 49 4e 54 45 47 45 52 2c 0a 20 20 20 20   a INTEGER,.    
29f0: 20 20 62 20 56 41 52 43 48 41 52 28 31 30 29 2c    b VARCHAR(10),
2a00: 0a 20 20 20 20 20 20 63 20 56 41 52 43 48 41 52  .      c VARCHAR
2a10: 28 31 2c 31 30 29 2c 0a 20 20 20 20 20 20 64 20  (1,10),.      d 
2a20: 56 41 52 43 48 41 52 28 2b 31 2c 2d 31 30 29 2c  VARCHAR(+1,-10),
2a30: 0a 20 20 20 20 20 20 65 20 56 41 52 43 48 41 52  .      e VARCHAR
2a40: 20 28 2b 31 2c 2d 31 30 29 2c 0a 20 20 20 20 20   (+1,-10),.     
2a50: 20 66 20 22 56 41 52 43 48 41 52 20 28 2b 31 2c   f "VARCHAR (+1,
2a60: 2d 31 30 2c 20 35 29 22 2c 0a 20 20 20 20 20 20  -10, 5)",.      
2a70: 67 20 42 49 47 20 49 4e 54 45 47 45 52 0a 20 20  g BIG INTEGER.  
2a80: 20 20 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20    );.    CREATE 
2a90: 54 41 42 4c 45 20 74 31 33 20 41 53 20 53 45 4c  TABLE t13 AS SEL
2aa0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 32 3b 0a  ECT * FROM t12;.
2ab0: 20 20 20 20 53 45 4c 45 43 54 20 73 71 6c 20 46      SELECT sql F
2ac0: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
2ad0: 72 20 57 48 45 52 45 20 6e 61 6d 65 20 3d 20 27  r WHERE name = '
2ae0: 74 31 33 27 3b 0a 20 20 7d 0a 7d 20 7b 7b 43 52  t13';.  }.} {{CR
2af0: 45 41 54 45 20 54 41 42 4c 45 20 74 31 33 28 0a  EATE TABLE t13(.
2b00: 20 20 61 20 49 4e 54 2c 0a 20 20 62 20 54 45 58    a INT,.  b TEX
2b10: 54 2c 0a 20 20 63 20 54 45 58 54 2c 0a 20 20 64  T,.  c TEXT,.  d
2b20: 20 54 45 58 54 2c 0a 20 20 65 20 54 45 58 54 2c   TEXT,.  e TEXT,
2b30: 0a 20 20 66 20 54 45 58 54 2c 0a 20 20 67 20 49  .  f TEXT,.  g I
2b40: 4e 54 0a 29 7d 7d 0a 0a 23 20 4d 61 6b 65 20 73  NT.)}}..# Make s
2b50: 75 72 65 20 77 65 20 63 61 6e 6e 6f 74 20 68 61  ure we cannot ha
2b60: 76 65 20 64 75 70 6c 69 63 61 74 65 20 63 6f 6c  ve duplicate col
2b70: 75 6d 6e 20 6e 61 6d 65 73 20 77 69 74 68 69 6e  umn names within
2b80: 20 61 20 74 61 62 6c 65 2e 0a 23 0a 64 6f 5f 74   a table..#.do_t
2b90: 65 73 74 20 74 61 62 6c 65 2d 39 2e 31 20 7b 0a  est table-9.1 {.
2ba0: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
2bb0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 36   CREATE TABLE t6
2bc0: 28 61 2c 62 2c 61 29 3b 0a 20 20 7d 0a 7d 20 7b  (a,b,a);.  }.} {
2bd0: 31 20 7b 64 75 70 6c 69 63 61 74 65 20 63 6f 6c  1 {duplicate col
2be0: 75 6d 6e 20 6e 61 6d 65 3a 20 61 7d 7d 0a 64 6f  umn name: a}}.do
2bf0: 5f 74 65 73 74 20 74 61 62 6c 65 2d 39 2e 32 20  _test table-9.2 
2c00: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  {.  catchsql {. 
2c10: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
2c20: 74 36 28 61 20 76 61 72 63 68 61 72 28 31 30 30  t6(a varchar(100
2c30: 29 2c 20 62 20 62 6c 6f 62 2c 20 61 20 69 6e 74  ), b blob, a int
2c40: 65 67 65 72 29 3b 0a 20 20 7d 0a 7d 20 7b 31 20  eger);.  }.} {1 
2c50: 7b 64 75 70 6c 69 63 61 74 65 20 63 6f 6c 75 6d  {duplicate colum
2c60: 6e 20 6e 61 6d 65 3a 20 61 7d 7d 0a 0a 23 20 43  n name: a}}..# C
2c70: 68 65 63 6b 20 74 68 65 20 66 6f 72 65 69 67 6e  heck the foreign
2c80: 20 6b 65 79 20 73 79 6e 74 61 78 2e 0a 23 0a 69   key syntax..#.i
2c90: 66 63 61 70 61 62 6c 65 20 7b 66 6f 72 65 69 67  fcapable {foreig
2ca0: 6e 6b 65 79 7d 20 7b 0a 64 6f 5f 74 65 73 74 20  nkey} {.do_test 
2cb0: 74 61 62 6c 65 2d 31 30 2e 31 20 7b 0a 20 20 63  table-10.1 {.  c
2cc0: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 43 52  atchsql {.    CR
2cd0: 45 41 54 45 20 54 41 42 4c 45 20 74 36 28 61 20  EATE TABLE t6(a 
2ce0: 52 45 46 45 52 45 4e 43 45 53 20 74 34 28 61 29  REFERENCES t4(a)
2cf0: 20 4e 4f 54 20 4e 55 4c 4c 29 3b 0a 20 20 20 20   NOT NULL);.    
2d00: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 36 20 56  INSERT INTO t6 V
2d10: 41 4c 55 45 53 28 4e 55 4c 4c 29 3b 0a 20 20 7d  ALUES(NULL);.  }
2d20: 0a 7d 20 7b 31 20 7b 74 36 2e 61 20 6d 61 79 20  .} {1 {t6.a may 
2d30: 6e 6f 74 20 62 65 20 4e 55 4c 4c 7d 7d 0a 64 6f  not be NULL}}.do
2d40: 5f 74 65 73 74 20 74 61 62 6c 65 2d 31 30 2e 32  _test table-10.2
2d50: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a   {.  catchsql {.
2d60: 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74      DROP TABLE t
2d70: 36 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41  6;.    CREATE TA
2d80: 42 4c 45 20 74 36 28 61 20 52 45 46 45 52 45 4e  BLE t6(a REFEREN
2d90: 43 45 53 20 74 34 28 61 29 20 4d 41 54 43 48 20  CES t4(a) MATCH 
2da0: 50 41 52 54 49 41 4c 29 3b 0a 20 20 7d 0a 7d 20  PARTIAL);.  }.} 
2db0: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 74  {0 {}}.do_test t
2dc0: 61 62 6c 65 2d 31 30 2e 33 20 7b 0a 20 20 63 61  able-10.3 {.  ca
2dd0: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f  tchsql {.    DRO
2de0: 50 20 54 41 42 4c 45 20 74 36 3b 0a 20 20 20 20  P TABLE t6;.    
2df0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 36 28  CREATE TABLE t6(
2e00: 61 20 52 45 46 45 52 45 4e 43 45 53 20 74 34 20  a REFERENCES t4 
2e10: 4d 41 54 43 48 20 46 55 4c 4c 20 4f 4e 20 44 45  MATCH FULL ON DE
2e20: 4c 45 54 45 20 53 45 54 20 4e 55 4c 4c 20 4e 4f  LETE SET NULL NO
2e30: 54 20 4e 55 4c 4c 29 3b 0a 20 20 7d 0a 7d 20 7b  T NULL);.  }.} {
2e40: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 61  0 {}}.do_test ta
2e50: 62 6c 65 2d 31 30 2e 34 20 7b 0a 20 20 63 61 74  ble-10.4 {.  cat
2e60: 63 68 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50  chsql {.    DROP
2e70: 20 54 41 42 4c 45 20 74 36 3b 0a 20 20 20 20 43   TABLE t6;.    C
2e80: 52 45 41 54 45 20 54 41 42 4c 45 20 74 36 28 61  REATE TABLE t6(a
2e90: 20 52 45 46 45 52 45 4e 43 45 53 20 74 34 20 4d   REFERENCES t4 M
2ea0: 41 54 43 48 20 46 55 4c 4c 20 4f 4e 20 55 50 44  ATCH FULL ON UPD
2eb0: 41 54 45 20 53 45 54 20 44 45 46 41 55 4c 54 20  ATE SET DEFAULT 
2ec0: 44 45 46 41 55 4c 54 20 31 29 3b 0a 20 20 7d 0a  DEFAULT 1);.  }.
2ed0: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
2ee0: 20 74 61 62 6c 65 2d 31 30 2e 35 20 7b 0a 20 20   table-10.5 {.  
2ef0: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 44  catchsql {.    D
2f00: 52 4f 50 20 54 41 42 4c 45 20 74 36 3b 0a 20 20  ROP TABLE t6;.  
2f10: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
2f20: 36 28 61 20 4e 4f 54 20 4e 55 4c 4c 20 4e 4f 54  6(a NOT NULL NOT
2f30: 20 44 45 46 45 52 52 41 42 4c 45 20 49 4e 49 54   DEFERRABLE INIT
2f40: 49 41 4c 4c 59 20 49 4d 4d 45 44 49 41 54 45 29  IALLY IMMEDIATE)
2f50: 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  ;.  }.} {0 {}}.d
2f60: 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 31 30 2e  o_test table-10.
2f70: 36 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  6 {.  catchsql {
2f80: 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20  .    DROP TABLE 
2f90: 74 36 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54  t6;.    CREATE T
2fa0: 41 42 4c 45 20 74 36 28 61 20 4e 4f 54 20 4e 55  ABLE t6(a NOT NU
2fb0: 4c 4c 20 44 45 46 45 52 52 41 42 4c 45 20 49 4e  LL DEFERRABLE IN
2fc0: 49 54 49 41 4c 4c 59 20 44 45 46 45 52 52 45 44  ITIALLY DEFERRED
2fd0: 29 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a  );.  }.} {0 {}}.
2fe0: 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 31 30  do_test table-10
2ff0: 2e 37 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  .7 {.  catchsql 
3000: 7b 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45  {.    DROP TABLE
3010: 20 74 36 3b 0a 20 20 20 20 43 52 45 41 54 45 20   t6;.    CREATE 
3020: 54 41 42 4c 45 20 74 36 28 61 2c 0a 20 20 20 20  TABLE t6(a,.    
3030: 20 20 46 4f 52 45 49 47 4e 20 4b 45 59 20 28 61    FOREIGN KEY (a
3040: 29 20 52 45 46 45 52 45 4e 43 45 53 20 74 34 28  ) REFERENCES t4(
3050: 62 29 20 44 45 46 45 52 52 41 42 4c 45 20 49 4e  b) DEFERRABLE IN
3060: 49 54 49 41 4c 4c 59 20 44 45 46 45 52 52 45 44  ITIALLY DEFERRED
3070: 0a 20 20 20 20 29 3b 0a 20 20 7d 0a 7d 20 7b 30  .    );.  }.} {0
3080: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 61 62   {}}.do_test tab
3090: 6c 65 2d 31 30 2e 38 20 7b 0a 20 20 63 61 74 63  le-10.8 {.  catc
30a0: 68 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20  hsql {.    DROP 
30b0: 54 41 42 4c 45 20 74 36 3b 0a 20 20 20 20 43 52  TABLE t6;.    CR
30c0: 45 41 54 45 20 54 41 42 4c 45 20 74 36 28 61 2c  EATE TABLE t6(a,
30d0: 62 2c 63 2c 0a 20 20 20 20 20 20 46 4f 52 45 49  b,c,.      FOREI
30e0: 47 4e 20 4b 45 59 20 28 62 2c 63 29 20 52 45 46  GN KEY (b,c) REF
30f0: 45 52 45 4e 43 45 53 20 74 34 28 78 2c 79 29 20  ERENCES t4(x,y) 
3100: 4d 41 54 43 48 20 50 41 52 54 49 41 4c 0a 20 20  MATCH PARTIAL.  
3110: 20 20 20 20 20 20 4f 4e 20 55 50 44 41 54 45 20        ON UPDATE 
3120: 53 45 54 20 4e 55 4c 4c 20 4f 4e 20 44 45 4c 45  SET NULL ON DELE
3130: 54 45 20 43 41 53 43 41 44 45 20 44 45 46 45 52  TE CASCADE DEFER
3140: 52 41 42 4c 45 20 49 4e 49 54 49 41 4c 4c 59 20  RABLE INITIALLY 
3150: 44 45 46 45 52 52 45 44 0a 20 20 20 20 29 3b 0a  DEFERRED.    );.
3160: 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f    }.} {0 {}}.do_
3170: 74 65 73 74 20 74 61 62 6c 65 2d 31 30 2e 39 20  test table-10.9 
3180: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  {.  catchsql {. 
3190: 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74 36     DROP TABLE t6
31a0: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  ;.    CREATE TAB
31b0: 4c 45 20 74 36 28 61 2c 62 2c 63 2c 0a 20 20 20  LE t6(a,b,c,.   
31c0: 20 20 20 46 4f 52 45 49 47 4e 20 4b 45 59 20 28     FOREIGN KEY (
31d0: 62 2c 63 29 20 52 45 46 45 52 45 4e 43 45 53 20  b,c) REFERENCES 
31e0: 74 34 28 78 29 0a 20 20 20 20 29 3b 0a 20 20 7d  t4(x).    );.  }
31f0: 0a 7d 20 7b 31 20 7b 6e 75 6d 62 65 72 20 6f 66  .} {1 {number of
3200: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 66 6f 72 65   columns in fore
3210: 69 67 6e 20 6b 65 79 20 64 6f 65 73 20 6e 6f 74  ign key does not
3220: 20 6d 61 74 63 68 20 74 68 65 20 6e 75 6d 62 65   match the numbe
3230: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
3240: 74 68 65 20 72 65 66 65 72 65 6e 63 65 64 20 74  the referenced t
3250: 61 62 6c 65 7d 7d 0a 64 6f 5f 74 65 73 74 20 74  able}}.do_test t
3260: 61 62 6c 65 2d 31 30 2e 31 30 20 7b 0a 20 20 63  able-10.10 {.  c
3270: 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54 41  atchsql {DROP TA
3280: 42 4c 45 20 74 36 7d 0a 20 20 63 61 74 63 68 73  BLE t6}.  catchs
3290: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
32a0: 54 41 42 4c 45 20 74 36 28 61 2c 62 2c 63 2c 0a  TABLE t6(a,b,c,.
32b0: 20 20 20 20 20 20 46 4f 52 45 49 47 4e 20 4b 45        FOREIGN KE
32c0: 59 20 28 62 2c 63 29 20 52 45 46 45 52 45 4e 43  Y (b,c) REFERENC
32d0: 45 53 20 74 34 28 78 2c 79 2c 7a 29 0a 20 20 20  ES t4(x,y,z).   
32e0: 20 29 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 6e 75   );.  }.} {1 {nu
32f0: 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
3300: 69 6e 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 64  in foreign key d
3310: 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 20 74 68  oes not match th
3320: 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
3330: 6d 6e 73 20 69 6e 20 74 68 65 20 72 65 66 65 72  mns in the refer
3340: 65 6e 63 65 64 20 74 61 62 6c 65 7d 7d 0a 64 6f  enced table}}.do
3350: 5f 74 65 73 74 20 74 61 62 6c 65 2d 31 30 2e 31  _test table-10.1
3360: 31 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  1 {.  catchsql {
3370: 44 52 4f 50 20 54 41 42 4c 45 20 74 36 7d 0a 20  DROP TABLE t6}. 
3380: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
3390: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 36 28  CREATE TABLE t6(
33a0: 61 2c 62 2c 20 63 20 52 45 46 45 52 45 4e 43 45  a,b, c REFERENCE
33b0: 53 20 74 34 28 78 2c 79 29 29 3b 0a 20 20 7d 0a  S t4(x,y));.  }.
33c0: 7d 20 7b 31 20 7b 66 6f 72 65 69 67 6e 20 6b 65  } {1 {foreign ke
33d0: 79 20 6f 6e 20 63 20 73 68 6f 75 6c 64 20 72 65  y on c should re
33e0: 66 65 72 65 6e 63 65 20 6f 6e 6c 79 20 6f 6e 65  ference only one
33f0: 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 61 62 6c 65   column of table
3400: 20 74 34 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 61   t4}}.do_test ta
3410: 62 6c 65 2d 31 30 2e 31 32 20 7b 0a 20 20 63 61  ble-10.12 {.  ca
3420: 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54 41 42  tchsql {DROP TAB
3430: 4c 45 20 74 36 7d 0a 20 20 63 61 74 63 68 73 71  LE t6}.  catchsq
3440: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
3450: 41 42 4c 45 20 74 36 28 61 2c 62 2c 63 2c 0a 20  ABLE t6(a,b,c,. 
3460: 20 20 20 20 20 46 4f 52 45 49 47 4e 20 4b 45 59       FOREIGN KEY
3470: 20 28 62 2c 78 29 20 52 45 46 45 52 45 4e 43 45   (b,x) REFERENCE
3480: 53 20 74 34 28 78 2c 79 29 0a 20 20 20 20 29 3b  S t4(x,y).    );
3490: 0a 20 20 7d 0a 7d 20 7b 31 20 7b 75 6e 6b 6e 6f  .  }.} {1 {unkno
34a0: 77 6e 20 63 6f 6c 75 6d 6e 20 22 78 22 20 69 6e  wn column "x" in
34b0: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 64 65 66   foreign key def
34c0: 69 6e 69 74 69 6f 6e 7d 7d 0a 64 6f 5f 74 65 73  inition}}.do_tes
34d0: 74 20 74 61 62 6c 65 2d 31 30 2e 31 33 20 7b 0a  t table-10.13 {.
34e0: 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50    catchsql {DROP
34f0: 20 54 41 42 4c 45 20 74 36 7d 0a 20 20 63 61 74   TABLE t6}.  cat
3500: 63 68 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41  chsql {.    CREA
3510: 54 45 20 54 41 42 4c 45 20 74 36 28 61 2c 62 2c  TE TABLE t6(a,b,
3520: 63 2c 0a 20 20 20 20 20 20 46 4f 52 45 49 47 4e  c,.      FOREIGN
3530: 20 4b 45 59 20 28 78 2c 62 29 20 52 45 46 45 52   KEY (x,b) REFER
3540: 45 4e 43 45 53 20 74 34 28 78 2c 79 29 0a 20 20  ENCES t4(x,y).  
3550: 20 20 29 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 75    );.  }.} {1 {u
3560: 6e 6b 6e 6f 77 6e 20 63 6f 6c 75 6d 6e 20 22 78  nknown column "x
3570: 22 20 69 6e 20 66 6f 72 65 69 67 6e 20 6b 65 79  " in foreign key
3580: 20 64 65 66 69 6e 69 74 69 6f 6e 7d 7d 0a 7d 20   definition}}.} 
3590: 3b 23 20 65 6e 64 69 66 20 66 6f 72 65 69 67 6e  ;# endif foreign
35a0: 6b 65 79 0a 0a 23 20 54 65 73 74 20 66 6f 72 20  key..# Test for 
35b0: 74 68 65 20 22 74 79 70 65 6f 66 22 20 66 75 6e  the "typeof" fun
35c0: 63 74 69 6f 6e 2e 20 4d 6f 72 65 20 74 65 73 74  ction. More test
35d0: 73 20 66 6f 72 20 74 68 65 0a 23 20 74 79 70 65  s for the.# type
35e0: 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 20 61 72  of() function ar
35f0: 65 20 66 6f 75 6e 64 20 69 6e 20 62 69 6e 64 2e  e found in bind.
3600: 74 65 73 74 20 61 6e 64 20 74 79 70 65 73 2e 74  test and types.t
3610: 65 73 74 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 74  est..#.do_test t
3620: 61 62 6c 65 2d 31 31 2e 31 20 7b 0a 20 20 65 78  able-11.1 {.  ex
3630: 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41  ecsql {.    CREA
3640: 54 45 20 54 41 42 4c 45 20 74 37 28 0a 20 20 20  TE TABLE t7(.   
3650: 20 20 20 20 61 20 69 6e 74 65 67 65 72 20 70 72      a integer pr
3660: 69 6d 61 72 79 20 6b 65 79 2c 0a 20 20 20 20 20  imary key,.     
3670: 20 20 62 20 6e 75 6d 62 65 72 28 35 2c 31 30 29    b number(5,10)
3680: 2c 0a 20 20 20 20 20 20 20 63 20 63 68 61 72 61  ,.       c chara
3690: 63 74 65 72 20 76 61 72 79 69 6e 67 20 28 38 29  cter varying (8)
36a0: 2c 0a 20 20 20 20 20 20 20 64 20 56 41 52 43 48  ,.       d VARCH
36b0: 41 52 28 39 29 2c 0a 20 20 20 20 20 20 20 65 20  AR(9),.       e 
36c0: 63 6c 6f 62 2c 0a 20 20 20 20 20 20 20 66 20 42  clob,.       f B
36d0: 4c 4f 42 2c 0a 20 20 20 20 20 20 20 67 20 54 65  LOB,.       g Te
36e0: 78 74 2c 0a 20 20 20 20 20 20 20 68 0a 20 20 20  xt,.       h.   
36f0: 20 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49   );.    INSERT I
3700: 4e 54 4f 20 74 37 28 61 29 20 56 41 4c 55 45 53  NTO t7(a) VALUES
3710: 28 31 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20  (1);.    SELECT 
3720: 74 79 70 65 6f 66 28 61 29 2c 20 74 79 70 65 6f  typeof(a), typeo
3730: 66 28 62 29 2c 20 74 79 70 65 6f 66 28 63 29 2c  f(b), typeof(c),
3740: 20 74 79 70 65 6f 66 28 64 29 2c 0a 20 20 20 20   typeof(d),.    
3750: 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 65 29         typeof(e)
3760: 2c 20 74 79 70 65 6f 66 28 66 29 2c 20 74 79 70  , typeof(f), typ
3770: 65 6f 66 28 67 29 2c 20 74 79 70 65 6f 66 28 68  eof(g), typeof(h
3780: 29 0a 20 20 20 20 46 52 4f 4d 20 74 37 20 4c 49  ).    FROM t7 LI
3790: 4d 49 54 20 31 3b 0a 20 20 7d 0a 7d 20 7b 69 6e  MIT 1;.  }.} {in
37a0: 74 65 67 65 72 20 6e 75 6c 6c 20 6e 75 6c 6c 20  teger null null 
37b0: 6e 75 6c 6c 20 6e 75 6c 6c 20 6e 75 6c 6c 20 6e  null null null n
37c0: 75 6c 6c 20 6e 75 6c 6c 7d 20 0a 64 6f 5f 74 65  ull null} .do_te
37d0: 73 74 20 74 61 62 6c 65 2d 31 31 2e 32 20 7b 0a  st table-11.2 {.
37e0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
37f0: 53 45 4c 45 43 54 20 74 79 70 65 6f 66 28 61 2b  SELECT typeof(a+
3800: 62 29 2c 20 74 79 70 65 6f 66 28 61 7c 7c 62 29  b), typeof(a||b)
3810: 2c 20 74 79 70 65 6f 66 28 63 2b 64 29 2c 20 74  , typeof(c+d), t
3820: 79 70 65 6f 66 28 63 7c 7c 64 29 0a 20 20 20 20  ypeof(c||d).    
3830: 46 52 4f 4d 20 74 37 20 4c 49 4d 49 54 20 31 3b  FROM t7 LIMIT 1;
3840: 0a 20 20 7d 0a 7d 20 7b 6e 75 6c 6c 20 6e 75 6c  .  }.} {null nul
3850: 6c 20 6e 75 6c 6c 20 6e 75 6c 6c 7d 0a 0a 23 20  l null null}..# 
3860: 54 65 73 74 20 74 68 61 74 20 77 68 65 6e 20 63  Test that when c
3870: 72 65 61 74 69 6e 67 20 61 20 74 61 62 6c 65 20  reating a table 
3880: 75 73 69 6e 67 20 43 52 45 41 54 45 20 54 41 42  using CREATE TAB
3890: 4c 45 20 41 53 2c 20 63 6f 6c 75 6d 6e 20 74 79  LE AS, column ty
38a0: 70 65 73 20 61 72 65 0a 23 20 61 73 73 69 67 6e  pes are.# assign
38b0: 65 64 20 63 6f 72 72 65 63 74 6c 79 20 66 6f 72  ed correctly for
38c0: 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 20 61 6e   (SELECT ...) an
38d0: 64 20 27 78 20 41 53 20 79 27 20 65 78 70 72 65  d 'x AS y' expre
38e0: 73 73 69 6f 6e 73 2e 0a 64 6f 5f 74 65 73 74 20  ssions..do_test 
38f0: 74 61 62 6c 65 2d 31 32 2e 31 20 7b 0a 20 20 69  table-12.1 {.  i
3900: 66 63 61 70 61 62 6c 65 20 73 75 62 71 75 65 72  fcapable subquer
3910: 79 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  y {.    execsql 
3920: 7b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54  {.      CREATE T
3930: 41 42 4c 45 20 74 38 20 41 53 20 53 45 4c 45 43  ABLE t8 AS SELEC
3940: 54 20 62 2c 20 68 2c 20 61 20 61 73 20 69 2c 20  T b, h, a as i, 
3950: 28 53 45 4c 45 43 54 20 66 20 46 52 4f 4d 20 74  (SELECT f FROM t
3960: 37 29 20 61 73 20 6a 20 46 52 4f 4d 20 74 37 3b  7) as j FROM t7;
3970: 0a 20 20 20 20 7d 0a 20 20 7d 20 65 6c 73 65 20  .    }.  } else 
3980: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
3990: 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42        CREATE TAB
39a0: 4c 45 20 74 38 20 41 53 20 53 45 4c 45 43 54 20  LE t8 AS SELECT 
39b0: 62 2c 20 68 2c 20 61 20 61 73 20 69 2c 20 66 20  b, h, a as i, f 
39c0: 61 73 20 6a 20 46 52 4f 4d 20 74 37 3b 0a 20 20  as j FROM t7;.  
39d0: 20 20 7d 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f    }.  }.} {}.do_
39e0: 74 65 73 74 20 74 61 62 6c 65 2d 31 32 2e 32 20  test table-12.2 
39f0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
3a00: 20 20 53 45 4c 45 43 54 20 73 71 6c 20 46 52 4f    SELECT sql FRO
3a10: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  M sqlite_master 
3a20: 57 48 45 52 45 20 74 62 6c 5f 6e 61 6d 65 20 3d  WHERE tbl_name =
3a30: 20 27 74 38 27 0a 20 20 7d 0a 7d 20 7b 7b 43 52   't8'.  }.} {{CR
3a40: 45 41 54 45 20 54 41 42 4c 45 20 74 38 28 62 20  EATE TABLE t8(b 
3a50: 4e 55 4d 2c 68 2c 69 20 49 4e 54 2c 6a 29 7d 7d  NUM,h,i INT,j)}}
3a60: 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ..#-------------
3a70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3a80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3a90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3aa0: 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73 74 20 63  -------.# Test c
3ab0: 61 73 65 73 20 74 61 62 6c 65 2d 31 33 2e 2a 0a  ases table-13.*.
3ac0: 23 0a 23 20 54 65 73 74 20 74 68 65 20 61 62 69  #.# Test the abi
3ad0: 6c 69 74 79 20 74 6f 20 68 61 76 65 20 64 65 66  lity to have def
3ae0: 61 75 6c 74 20 76 61 6c 75 65 73 20 6f 66 20 43  ault values of C
3af0: 55 52 52 45 4e 54 5f 54 49 4d 45 2c 20 43 55 52  URRENT_TIME, CUR
3b00: 52 45 4e 54 5f 44 41 54 45 0a 23 20 61 6e 64 20  RENT_DATE.# and 
3b10: 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d  CURRENT_TIMESTAM
3b20: 50 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 74 61 62  P..#.do_test tab
3b30: 6c 65 2d 31 33 2e 31 20 7b 0a 20 20 65 78 65 63  le-13.1 {.  exec
3b40: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
3b50: 20 54 41 42 4c 45 20 74 61 62 6c 65 74 38 28 0a   TABLE tablet8(.
3b60: 20 20 20 20 20 20 20 61 20 69 6e 74 65 67 65 72         a integer
3b70: 20 70 72 69 6d 61 72 79 20 6b 65 79 2c 0a 20 20   primary key,.  
3b80: 20 20 20 20 20 74 6d 20 74 65 78 74 20 44 45 46       tm text DEF
3b90: 41 55 4c 54 20 43 55 52 52 45 4e 54 5f 54 49 4d  AULT CURRENT_TIM
3ba0: 45 2c 0a 20 20 20 20 20 20 20 64 74 20 74 65 78  E,.       dt tex
3bb0: 74 20 44 45 46 41 55 4c 54 20 43 55 52 52 45 4e  t DEFAULT CURREN
3bc0: 54 5f 44 41 54 45 2c 0a 20 20 20 20 20 20 20 64  T_DATE,.       d
3bd0: 74 74 6d 20 74 65 78 74 20 44 45 46 41 55 4c 54  ttm text DEFAULT
3be0: 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41   CURRENT_TIMESTA
3bf0: 4d 50 0a 20 20 20 20 29 3b 0a 20 20 20 20 53 45  MP.    );.    SE
3c00: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 61 62 6c  LECT * FROM tabl
3c10: 65 74 38 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 73 65  et8;.  }.} {}.se
3c20: 74 20 69 20 30 0a 75 6e 73 65 74 20 2d 6e 6f 63  t i 0.unset -noc
3c30: 6f 6d 70 6c 61 69 6e 20 64 61 74 65 20 74 69 6d  omplain date tim
3c40: 65 20 73 65 63 6f 6e 64 73 0a 66 6f 72 65 61 63  e seconds.foreac
3c50: 68 20 7b 64 61 74 65 20 74 69 6d 65 20 73 65 63  h {date time sec
3c60: 6f 6e 64 73 7d 20 7b 0a 20 20 31 39 37 36 2d 30  onds} {.  1976-0
3c70: 37 2d 30 34 20 31 32 3a 30 30 3a 30 30 20 32 30  7-04 12:00:00 20
3c80: 35 33 32 39 36 30 30 0a 20 20 31 39 39 34 2d 30  5329600.  1994-0
3c90: 34 2d 31 36 20 31 34 3a 30 30 3a 30 30 20 37 36  4-16 14:00:00 76
3ca0: 36 35 30 34 38 30 30 0a 20 20 32 30 30 30 2d 30  6504800.  2000-0
3cb0: 31 2d 30 31 20 30 30 3a 30 30 3a 30 30 20 39 34  1-01 00:00:00 94
3cc0: 36 36 38 34 38 30 30 0a 20 20 32 30 30 33 2d 31  6684800.  2003-1
3cd0: 32 2d 33 31 20 31 32 3a 33 34 3a 35 36 20 31 30  2-31 12:34:56 10
3ce0: 37 32 38 37 34 30 39 36 0a 7d 20 7b 0a 20 20 69  72874096.} {.  i
3cf0: 6e 63 72 20 69 0a 20 20 73 65 74 20 73 71 6c 69  ncr i.  set sqli
3d00: 74 65 5f 63 75 72 72 65 6e 74 5f 74 69 6d 65 20  te_current_time 
3d10: 24 73 65 63 6f 6e 64 73 0a 20 20 64 6f 5f 74 65  $seconds.  do_te
3d20: 73 74 20 74 61 62 6c 65 2d 31 33 2e 32 2e 24 69  st table-13.2.$i
3d30: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 22   {.    execsql "
3d40: 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e  .      INSERT IN
3d50: 54 4f 20 74 61 62 6c 65 74 38 28 61 29 20 56 41  TO tablet8(a) VA
3d60: 4c 55 45 53 28 24 69 29 3b 0a 20 20 20 20 20 20  LUES($i);.      
3d70: 53 45 4c 45 43 54 20 74 6d 2c 20 64 74 2c 20 64  SELECT tm, dt, d
3d80: 74 74 6d 20 46 52 4f 4d 20 74 61 62 6c 65 74 38  ttm FROM tablet8
3d90: 20 57 48 45 52 45 20 61 3d 24 69 3b 0a 20 20 20   WHERE a=$i;.   
3da0: 20 22 0a 20 20 7d 20 5b 6c 69 73 74 20 24 74 69   ".  } [list $ti
3db0: 6d 65 20 24 64 61 74 65 20 5b 6c 69 73 74 20 24  me $date [list $
3dc0: 64 61 74 65 20 24 74 69 6d 65 5d 5d 0a 7d 0a 73  date $time]].}.s
3dd0: 65 74 20 73 71 6c 69 74 65 5f 63 75 72 72 65 6e  et sqlite_curren
3de0: 74 5f 74 69 6d 65 20 30 0a 0a 23 2d 2d 2d 2d 2d  t_time 0..#-----
3df0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3e00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3e10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3e20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
3e30: 23 20 54 65 73 74 20 63 61 73 65 73 20 74 61 62  # Test cases tab
3e40: 6c 65 2d 31 34 2e 2a 0a 23 0a 23 20 54 65 73 74  le-14.*.#.# Test
3e50: 20 74 68 61 74 20 61 20 74 61 62 6c 65 20 63 61   that a table ca
3e60: 6e 6e 6f 74 20 62 65 20 63 72 65 61 74 65 64 20  nnot be created 
3e70: 6f 72 20 64 72 6f 70 70 65 64 20 77 68 69 6c 65  or dropped while
3e80: 20 6f 74 68 65 72 20 76 69 72 74 75 61 6c 0a 23   other virtual.#
3e90: 20 6d 61 63 68 69 6e 65 73 20 61 72 65 20 61 63   machines are ac
3ea0: 74 69 76 65 2e 20 54 68 69 73 20 69 73 20 72 65  tive. This is re
3eb0: 71 75 69 72 65 64 20 62 65 63 61 75 73 65 20 6f  quired because o
3ec0: 74 68 65 72 77 69 73 65 20 77 68 65 6e 20 69 6e  therwise when in
3ed0: 20 0a 23 20 61 75 74 6f 2d 76 61 63 75 75 6d 20   .# auto-vacuum 
3ee0: 6d 6f 64 65 20 74 68 65 20 62 74 72 65 65 2d 6c  mode the btree-l
3ef0: 61 79 65 72 20 6d 61 79 20 6e 65 65 64 20 74 6f  ayer may need to
3f00: 20 6d 6f 76 65 20 74 68 65 20 72 6f 6f 74 2d 70   move the root-p
3f10: 61 67 65 73 20 6f 66 20 0a 23 20 61 20 74 61 62  ages of .# a tab
3f20: 6c 65 20 66 6f 72 20 77 68 69 63 68 20 74 68 65  le for which the
3f30: 72 65 20 69 73 20 61 6e 20 6f 70 65 6e 20 63 75  re is an open cu
3f40: 72 73 6f 72 2e 0a 23 0a 23 20 32 30 30 37 2d 30  rsor..#.# 2007-0
3f50: 35 2d 30 32 3a 20 20 41 20 6f 70 65 6e 20 62 74  5-02:  A open bt
3f60: 72 65 65 20 63 75 72 73 6f 72 20 6e 6f 20 6c 6f  ree cursor no lo
3f70: 6e 67 65 72 20 62 6c 6f 63 6b 73 20 43 52 45 41  nger blocks CREA
3f80: 54 45 20 54 41 42 4c 45 2e 0a 23 20 42 75 74 20  TE TABLE..# But 
3f90: 44 52 4f 50 20 54 41 42 4c 45 20 69 73 20 73 74  DROP TABLE is st
3fa0: 69 6c 6c 20 70 72 6f 68 69 62 69 74 65 64 20 62  ill prohibited b
3fb0: 65 63 61 75 73 65 20 77 65 20 64 6f 20 6e 6f 74  ecause we do not
3fc0: 20 77 61 6e 74 20 74 6f 0a 23 20 64 65 6c 65 74   want to.# delet
3fd0: 65 20 61 20 74 61 62 6c 65 20 6f 75 74 20 66 72  e a table out fr
3fe0: 6f 6d 20 75 6e 64 65 72 20 61 20 72 75 6e 6e 69  om under a runni
3ff0: 6e 67 20 71 75 65 72 79 2e 0a 23 0a 0a 23 20 64  ng query..#..# d
4000: 62 20 65 76 61 6c 20 7b 0a 23 20 20 20 70 72 61  b eval {.#   pra
4010: 67 6d 61 20 76 64 62 65 5f 74 72 61 63 65 20 3d  gma vdbe_trace =
4020: 20 30 3b 0a 23 20 7d 0a 23 20 54 72 79 20 74 6f   0;.# }.# Try to
4030: 20 63 72 65 61 74 65 20 61 20 74 61 62 6c 65 20   create a table 
4040: 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 63 61  from within a ca
4050: 6c 6c 62 61 63 6b 3a 0a 75 6e 73 65 74 20 2d 6e  llback:.unset -n
4060: 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74  ocomplain result
4070: 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 31  .do_test table-1
4080: 34 2e 31 20 7b 0a 20 20 73 65 74 20 72 63 20 5b  4.1 {.  set rc [
4090: 0a 20 20 20 20 63 61 74 63 68 20 7b 0a 20 20 20  .    catch {.   
40a0: 20 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45     db eval {SELE
40b0: 43 54 20 2a 20 46 52 4f 4d 20 74 61 62 6c 65 74  CT * FROM tablet
40c0: 38 20 4c 49 4d 49 54 20 31 7d 20 7b 7d 20 7b 0a  8 LIMIT 1} {} {.
40d0: 20 20 20 20 20 20 20 20 64 62 20 65 76 61 6c 20          db eval 
40e0: 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 39  {CREATE TABLE t9
40f0: 28 61 2c 20 62 2c 20 63 29 7d 0a 20 20 20 20 20  (a, b, c)}.     
4100: 20 7d 0a 20 20 20 20 7d 20 6d 73 67 0a 20 20 5d   }.    } msg.  ]
4110: 0a 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 6c  .  set result [l
4120: 69 73 74 20 24 72 63 20 24 6d 73 67 5d 0a 7d 20  ist $rc $msg].} 
4130: 7b 30 20 7b 7d 7d 0a 0a 23 20 54 72 79 20 74 6f  {0 {}}..# Try to
4140: 20 64 72 6f 70 20 61 20 74 61 62 6c 65 20 66 72   drop a table fr
4150: 6f 6d 20 77 69 74 68 69 6e 20 61 20 63 61 6c 6c  om within a call
4160: 62 61 63 6b 3a 0a 64 6f 5f 74 65 73 74 20 74 61  back:.do_test ta
4170: 62 6c 65 2d 31 34 2e 32 20 7b 0a 20 20 73 65 74  ble-14.2 {.  set
4180: 20 72 63 20 5b 0a 20 20 20 20 63 61 74 63 68 20   rc [.    catch 
4190: 7b 0a 20 20 20 20 20 20 64 62 20 65 76 61 6c 20  {.      db eval 
41a0: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
41b0: 61 62 6c 65 74 38 20 4c 49 4d 49 54 20 31 7d 20  ablet8 LIMIT 1} 
41c0: 7b 7d 20 7b 0a 20 20 20 20 20 20 20 20 64 62 20  {} {.        db 
41d0: 65 76 61 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45  eval {DROP TABLE
41e0: 20 74 39 3b 7d 0a 20 20 20 20 20 20 7d 0a 20 20   t9;}.      }.  
41f0: 20 20 7d 20 6d 73 67 0a 20 20 5d 20 0a 20 20 73    } msg.  ] .  s
4200: 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 20  et result [list 
4210: 24 72 63 20 24 6d 73 67 5d 0a 7d 20 7b 31 20 7b  $rc $msg].} {1 {
4220: 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 69  database table i
4230: 73 20 6c 6f 63 6b 65 64 7d 7d 0a 0a 69 66 63 61  s locked}}..ifca
4240: 70 61 62 6c 65 20 61 74 74 61 63 68 20 7b 0a 20  pable attach {. 
4250: 20 23 20 4e 6f 77 20 61 74 74 61 63 68 20 61 20   # Now attach a 
4260: 64 61 74 61 62 61 73 65 20 61 6e 64 20 65 6e 73  database and ens
4270: 75 72 65 20 74 68 61 74 20 61 20 74 61 62 6c 65  ure that a table
4280: 20 63 61 6e 20 62 65 20 63 72 65 61 74 65 64 20   can be created 
4290: 69 6e 20 74 68 65 20 0a 20 20 23 20 61 74 74 61  in the .  # atta
42a0: 63 68 65 64 20 64 61 74 61 62 61 73 65 20 77 68  ched database wh
42b0: 69 6c 73 74 20 69 6e 20 61 20 63 61 6c 6c 62 61  ilst in a callba
42c0: 63 6b 20 66 72 6f 6d 20 61 20 71 75 65 72 79 20  ck from a query 
42d0: 6f 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  on the main data
42e0: 62 61 73 65 2e 0a 20 20 64 6f 5f 74 65 73 74 20  base..  do_test 
42f0: 74 61 62 6c 65 2d 31 34 2e 33 20 7b 0a 20 20 20  table-14.3 {.   
4300: 20 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73   forcedelete tes
4310: 74 32 2e 64 62 0a 20 20 20 20 66 6f 72 63 65 64  t2.db.    forced
4320: 65 6c 65 74 65 20 74 65 73 74 32 2e 64 62 2d 6a  elete test2.db-j
4330: 6f 75 72 6e 61 6c 0a 20 20 20 20 65 78 65 63 73  ournal.    execs
4340: 71 6c 20 7b 0a 20 20 20 20 20 20 41 54 54 41 43  ql {.      ATTAC
4350: 48 20 27 74 65 73 74 32 2e 64 62 27 20 61 73 20  H 'test2.db' as 
4360: 61 75 78 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64  aux;.    }.    d
4370: 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 2a  b eval {SELECT *
4380: 20 46 52 4f 4d 20 74 61 62 6c 65 74 38 20 4c 49   FROM tablet8 LI
4390: 4d 49 54 20 31 7d 20 7b 7d 20 7b 0a 20 20 20 20  MIT 1} {} {.    
43a0: 20 20 64 62 20 65 76 61 6c 20 7b 43 52 45 41 54    db eval {CREAT
43b0: 45 20 54 41 42 4c 45 20 61 75 78 2e 74 31 28 61  E TABLE aux.t1(a
43c0: 2c 20 62 2c 20 63 29 7d 0a 20 20 20 20 7d 0a 20  , b, c)}.    }. 
43d0: 20 7d 20 7b 7d 0a 20 20 0a 20 20 23 20 4f 6e 20   } {}.  .  # On 
43e0: 74 68 65 20 6f 74 68 65 72 20 68 61 6e 64 2c 20  the other hand, 
43f0: 69 74 20 73 68 6f 75 6c 64 20 62 65 20 69 6d 70  it should be imp
4400: 6f 73 73 69 62 6c 65 20 74 6f 20 64 72 6f 70 20  ossible to drop 
4410: 61 20 74 61 62 6c 65 20 77 68 65 6e 20 61 6e 79  a table when any
4420: 20 56 4d 73 20 0a 20 20 23 20 61 72 65 20 61 63   VMs .  # are ac
4430: 74 69 76 65 2e 20 54 68 69 73 20 69 73 20 62 65  tive. This is be
4440: 63 61 75 73 65 20 56 65 72 69 66 79 43 6f 6f 6b  cause VerifyCook
4450: 69 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 20  ie instructions 
4460: 6d 61 79 20 68 61 76 65 20 61 6c 72 65 61 64 79  may have already
4470: 0a 20 20 23 20 62 65 65 6e 20 65 78 65 63 75 74  .  # been execut
4480: 65 64 2c 20 61 6e 64 20 62 74 72 65 65 20 72 6f  ed, and btree ro
4490: 6f 74 2d 70 61 67 65 73 20 6d 61 79 20 6e 6f 74  ot-pages may not
44a0: 20 6d 6f 76 65 20 61 66 74 65 72 20 74 68 69 73   move after this
44b0: 20 28 77 68 69 63 68 20 61 0a 20 20 23 20 64 65   (which a.  # de
44c0: 6c 65 74 65 20 74 61 62 6c 65 20 6d 69 67 68 74  lete table might
44d0: 20 64 6f 29 2e 0a 20 20 64 6f 5f 74 65 73 74 20   do)..  do_test 
44e0: 74 61 62 6c 65 2d 31 34 2e 34 20 7b 0a 20 20 20  table-14.4 {.   
44f0: 20 73 65 74 20 72 63 20 5b 0a 20 20 20 20 20 20   set rc [.      
4500: 63 61 74 63 68 20 7b 0a 20 20 20 20 20 20 20 20  catch {.        
4510: 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20  db eval {SELECT 
4520: 2a 20 46 52 4f 4d 20 74 61 62 6c 65 74 38 20 4c  * FROM tablet8 L
4530: 49 4d 49 54 20 31 7d 20 7b 7d 20 7b 0a 20 20 20  IMIT 1} {} {.   
4540: 20 20 20 20 20 20 20 64 62 20 65 76 61 6c 20 7b         db eval {
4550: 44 52 4f 50 20 54 41 42 4c 45 20 61 75 78 2e 74  DROP TABLE aux.t
4560: 31 3b 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  1;}.        }.  
4570: 20 20 20 20 7d 20 6d 73 67 0a 20 20 20 20 5d 20      } msg.    ] 
4580: 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20  .    set result 
4590: 5b 6c 69 73 74 20 24 72 63 20 24 6d 73 67 5d 0a  [list $rc $msg].
45a0: 20 20 7d 20 7b 31 20 7b 64 61 74 61 62 61 73 65    } {1 {database
45b0: 20 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b 65 64   table is locked
45c0: 7d 7d 0a 7d 0a 0a 23 20 43 72 65 61 74 65 20 61  }}.}..# Create a
45d0: 6e 64 20 64 72 6f 70 20 32 30 30 30 20 74 61 62  nd drop 2000 tab
45e0: 6c 65 73 2e 20 54 68 69 73 20 69 73 20 74 6f 20  les. This is to 
45f0: 63 68 65 63 6b 20 74 68 61 74 20 74 68 65 20 62  check that the b
4600: 61 6c 61 6e 63 65 5f 73 68 61 6c 6c 6f 77 28 29  alance_shallow()
4610: 0a 23 20 72 6f 75 74 69 6e 65 20 77 6f 72 6b 73  .# routine works
4620: 20 63 6f 72 72 65 63 74 6c 79 20 6f 6e 20 74 68   correctly on th
4630: 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  e sqlite_master 
4640: 74 61 62 6c 65 2e 20 41 74 20 6f 6e 65 20 70 6f  table. At one po
4650: 69 6e 74 20 69 74 0a 23 20 63 6f 6e 74 61 69 6e  int it.# contain
4660: 65 64 20 61 20 62 75 67 20 74 68 61 74 20 77 6f  ed a bug that wo
4670: 75 6c 64 20 70 72 65 76 65 6e 74 20 74 68 65 20  uld prevent the 
4680: 72 69 67 68 74 2d 63 68 69 6c 64 20 70 6f 69 6e  right-child poin
4690: 74 65 72 20 6f 66 20 74 68 65 0a 23 20 63 68 69  ter of the.# chi
46a0: 6c 64 20 70 61 67 65 20 66 72 6f 6d 20 62 65 69  ld page from bei
46b0: 6e 67 20 63 6f 70 69 65 64 20 74 6f 20 74 68 65  ng copied to the
46c0: 20 72 6f 6f 74 20 70 61 67 65 2e 0a 23 0a 64 6f   root page..#.do
46d0: 5f 74 65 73 74 20 74 61 62 6c 65 2d 31 35 2e 31  _test table-15.1
46e0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 42 45   {.  execsql {BE
46f0: 47 49 4e 7d 0a 20 20 66 6f 72 20 7b 73 65 74 20  GIN}.  for {set 
4700: 69 20 30 7d 20 7b 24 69 3c 32 30 30 30 7d 20 7b  i 0} {$i<2000} {
4710: 69 6e 63 72 20 69 7d 20 7b 0a 20 20 20 20 65 78  incr i} {.    ex
4720: 65 63 73 71 6c 20 22 43 52 45 41 54 45 20 54 41  ecsql "CREATE TA
4730: 42 4c 45 20 74 62 6c 24 69 20 28 61 2c 20 62 2c  BLE tbl$i (a, b,
4740: 20 63 29 22 0a 20 20 7d 0a 20 20 65 78 65 63 73   c)".  }.  execs
4750: 71 6c 20 7b 43 4f 4d 4d 49 54 7d 0a 7d 20 7b 7d  ql {COMMIT}.} {}
4760: 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 31  .do_test table-1
4770: 35 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  5.2 {.  execsql 
4780: 7b 42 45 47 49 4e 7d 0a 20 20 66 6f 72 20 7b 73  {BEGIN}.  for {s
4790: 65 74 20 69 20 30 7d 20 7b 24 69 3c 32 30 30 30  et i 0} {$i<2000
47a0: 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20 20  } {incr i} {.   
47b0: 20 65 78 65 63 73 71 6c 20 22 44 52 4f 50 20 54   execsql "DROP T
47c0: 41 42 4c 45 20 74 62 6c 24 69 22 0a 20 20 7d 0a  ABLE tbl$i".  }.
47d0: 20 20 65 78 65 63 73 71 6c 20 7b 43 4f 4d 4d 49    execsql {COMMI
47e0: 54 7d 0a 7d 20 7b 7d 0a 0a 66 69 6e 69 73 68 5f  T}.} {}..finish_
47f0: 74 65 73 74 0a                                   test.