SQLite4
Hex Artifact Content
Not logged in

Artifact 94fd4d917ece7b4562bf946775456451d157f117:


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 34 20  close.  sqlite4 
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 34 20 64 62 20 74 65 73 74   sqlite4 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 34 20  close.  sqlite4 
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 34 20 64 62 20 74 65 73 74 2e 64  qlite4 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 34 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20  e4 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 34 20 64 62  ose.  sqlite4 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 53 45 4c 45 43 54 20 6e 61 6d 65 20 46     SELECT name F
1bb0: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
1bc0: 72 20 57 48 45 52 45 20 6e 61 6d 65 20 47 4c 4f  r WHERE name GLO
1bd0: 42 20 27 73 71 6c 69 74 65 5f 73 74 61 74 2a 27  B 'sqlite_stat*'
1be0: 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 23 20 4d 61  ;.  }.} {}..# Ma
1bf0: 6b 65 20 73 75 72 65 20 61 6e 20 45 58 50 4c 41  ke sure an EXPLA
1c00: 49 4e 20 64 6f 65 73 20 6e 6f 74 20 72 65 61 6c  IN does not real
1c10: 6c 79 20 63 72 65 61 74 65 20 61 20 6e 65 77 20  ly create a new 
1c20: 74 61 62 6c 65 0a 23 0a 64 6f 5f 74 65 73 74 20  table.#.do_test 
1c30: 74 61 62 6c 65 2d 35 2e 33 20 7b 0a 20 20 69 66  table-5.3 {.  if
1c40: 63 61 70 61 62 6c 65 20 7b 65 78 70 6c 61 69 6e  capable {explain
1c50: 7d 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  } {.    execsql 
1c60: 7b 45 58 50 4c 41 49 4e 20 43 52 45 41 54 45 20  {EXPLAIN CREATE 
1c70: 54 41 42 4c 45 20 74 65 73 74 31 28 66 31 20 69  TABLE test1(f1 i
1c80: 6e 74 29 7d 0a 20 20 7d 0a 20 20 65 78 65 63 73  nt)}.  }.  execs
1c90: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
1ca0: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
1cb0: 65 72 20 57 48 45 52 45 20 74 79 70 65 21 3d 27  er WHERE type!='
1cc0: 6d 65 74 61 27 7d 0a 7d 20 7b 7d 0a 0a 23 20 4d  meta'}.} {}..# M
1cd0: 61 6b 65 20 73 75 72 65 20 61 6e 20 45 58 50 4c  ake sure an EXPL
1ce0: 41 49 4e 20 64 6f 65 73 20 6e 6f 74 20 72 65 61  AIN does not rea
1cf0: 6c 6c 79 20 64 72 6f 70 20 61 6e 20 65 78 69 73  lly drop an exis
1d00: 74 69 6e 67 20 74 61 62 6c 65 0a 23 0a 64 6f 5f  ting table.#.do_
1d10: 74 65 73 74 20 74 61 62 6c 65 2d 35 2e 34 20 7b  test table-5.4 {
1d20: 0a 20 20 65 78 65 63 73 71 6c 20 7b 43 52 45 41  .  execsql {CREA
1d30: 54 45 20 54 41 42 4c 45 20 74 65 73 74 31 28 66  TE TABLE test1(f
1d40: 31 20 69 6e 74 29 7d 0a 20 20 69 66 63 61 70 61  1 int)}.  ifcapa
1d50: 62 6c 65 20 7b 65 78 70 6c 61 69 6e 7d 20 7b 0a  ble {explain} {.
1d60: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 45 58 50      execsql {EXP
1d70: 4c 41 49 4e 20 44 52 4f 50 20 54 41 42 4c 45 20  LAIN DROP TABLE 
1d80: 74 65 73 74 31 7d 0a 20 20 7d 0a 20 20 65 78 65  test1}.  }.  exe
1d90: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d  csql {SELECT nam
1da0: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  e FROM sqlite_ma
1db0: 73 74 65 72 20 57 48 45 52 45 20 74 79 70 65 21  ster WHERE type!
1dc0: 3d 27 6d 65 74 61 27 7d 0a 7d 20 7b 74 65 73 74  ='meta'}.} {test
1dd0: 31 7d 0a 0a 23 20 43 72 65 61 74 65 20 61 20 74  1}..# Create a t
1de0: 61 62 6c 65 20 77 69 74 68 20 61 20 67 6f 6f 66  able with a goof
1df0: 79 20 6e 61 6d 65 0a 23 0a 23 64 6f 5f 74 65 73  y name.#.#do_tes
1e00: 74 20 74 61 62 6c 65 2d 36 2e 31 20 7b 0a 23 20  t table-6.1 {.# 
1e10: 20 65 78 65 63 73 71 6c 20 7b 43 52 45 41 54 45   execsql {CREATE
1e20: 20 54 41 42 4c 45 20 27 53 70 61 63 65 73 20 49   TABLE 'Spaces I
1e30: 6e 20 54 68 69 73 20 4e 61 6d 65 21 27 28 78 20  n This Name!'(x 
1e40: 69 6e 74 29 7d 0a 23 20 20 65 78 65 63 73 71 6c  int)}.#  execsql
1e50: 20 7b 49 4e 53 45 52 54 20 49 4e 54 4f 20 27 73   {INSERT INTO 's
1e60: 70 61 63 65 73 20 69 6e 20 74 68 69 73 20 6e 61  paces in this na
1e70: 6d 65 21 27 20 56 41 4c 55 45 53 28 31 29 7d 0a  me!' VALUES(1)}.
1e80: 23 20 20 73 65 74 20 6c 69 73 74 20 5b 67 6c 6f  #  set list [glo
1e90: 62 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 74 65  b -nocomplain te
1ea0: 73 74 64 62 2f 73 70 61 63 65 73 2a 2e 74 62 6c  stdb/spaces*.tbl
1eb0: 5d 0a 23 7d 20 7b 74 65 73 74 64 62 2f 73 70 61  ].#} {testdb/spa
1ec0: 63 65 73 2b 69 6e 2b 74 68 69 73 2b 6e 61 6d 65  ces+in+this+name
1ed0: 2b 2e 74 62 6c 7d 0a 0a 23 20 54 72 79 20 75 73  +.tbl}..# Try us
1ee0: 69 6e 67 20 6b 65 79 77 6f 72 64 73 20 61 73 20  ing keywords as 
1ef0: 74 61 62 6c 65 20 6e 61 6d 65 73 20 6f 72 20 63  table names or c
1f00: 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2e 0a 23 20 0a  olumn names..# .
1f10: 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 37 2e  do_test table-7.
1f20: 31 20 7b 0a 20 20 73 65 74 20 76 20 5b 63 61 74  1 {.  set v [cat
1f30: 63 68 20 7b 65 78 65 63 73 71 6c 20 7b 0a 20 20  ch {execsql {.  
1f40: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 77    CREATE TABLE w
1f50: 65 69 72 64 28 0a 20 20 20 20 20 20 64 65 73 63  eird(.      desc
1f60: 20 74 65 78 74 2c 0a 20 20 20 20 20 20 61 73 63   text,.      asc
1f70: 20 74 65 78 74 2c 0a 20 20 20 20 20 20 6b 65 79   text,.      key
1f80: 20 69 6e 74 2c 0a 20 20 20 20 20 20 5b 31 34 5f   int,.      [14_
1f90: 76 61 63 5d 20 62 6f 6f 6c 65 61 6e 2c 0a 20 20  vac] boolean,.  
1fa0: 20 20 20 20 66 75 7a 7a 79 5f 64 6f 67 5f 31 32      fuzzy_dog_12
1fb0: 20 76 61 72 63 68 61 72 28 31 30 29 2c 0a 20 20   varchar(10),.  
1fc0: 20 20 20 20 62 65 67 69 6e 20 62 6c 6f 62 2c 0a      begin blob,.
1fd0: 20 20 20 20 20 20 65 6e 64 20 63 6c 6f 62 0a 20        end clob. 
1fe0: 20 20 20 29 0a 20 20 7d 7d 20 6d 73 67 5d 0a 20     ).  }} msg]. 
1ff0: 20 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a   lappend v $msg.
2000: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
2010: 20 74 61 62 6c 65 2d 37 2e 32 20 7b 0a 20 20 65   table-7.2 {.  e
2020: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53  xecsql {.    INS
2030: 45 52 54 20 49 4e 54 4f 20 77 65 69 72 64 20 56  ERT INTO weird V
2040: 41 4c 55 45 53 28 27 61 27 2c 27 62 27 2c 39 2c  ALUES('a','b',9,
2050: 30 2c 27 78 79 7a 27 2c 27 68 69 27 2c 27 79 27  0,'xyz','hi','y'
2060: 27 61 6c 6c 27 29 3b 0a 20 20 20 20 53 45 4c 45  'all');.    SELE
2070: 43 54 20 2a 20 46 52 4f 4d 20 77 65 69 72 64 3b  CT * FROM weird;
2080: 0a 20 20 7d 0a 7d 20 7b 61 20 62 20 39 20 30 20  .  }.} {a b 9 0 
2090: 78 79 7a 20 68 69 20 79 27 61 6c 6c 7d 0a 64 6f  xyz hi y'all}.do
20a0: 5f 74 65 73 74 20 74 61 62 6c 65 2d 37 2e 33 20  _test table-7.3 
20b0: 7b 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 0a 20  {.  execsql2 {. 
20c0: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
20d0: 20 77 65 69 72 64 3b 0a 20 20 7d 0a 7d 20 7b 64   weird;.  }.} {d
20e0: 65 73 63 20 61 20 61 73 63 20 62 20 6b 65 79 20  esc a asc b key 
20f0: 39 20 31 34 5f 76 61 63 20 30 20 66 75 7a 7a 79  9 14_vac 0 fuzzy
2100: 5f 64 6f 67 5f 31 32 20 78 79 7a 20 62 65 67 69  _dog_12 xyz begi
2110: 6e 20 68 69 20 65 6e 64 20 79 27 61 6c 6c 7d 0a  n hi end y'all}.
2120: 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 37 2e  do_test table-7.
2130: 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  3 {.  execsql {.
2140: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
2150: 20 73 61 76 65 70 6f 69 6e 74 28 72 65 6c 65 61   savepoint(relea
2160: 73 65 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  se);.    INSERT 
2170: 49 4e 54 4f 20 73 61 76 65 70 6f 69 6e 74 28 72  INTO savepoint(r
2180: 65 6c 65 61 73 65 29 20 56 41 4c 55 45 53 28 31  elease) VALUES(1
2190: 30 29 3b 0a 20 20 20 20 55 50 44 41 54 45 20 73  0);.    UPDATE s
21a0: 61 76 65 70 6f 69 6e 74 20 53 45 54 20 72 65 6c  avepoint SET rel
21b0: 65 61 73 65 20 3d 20 35 3b 0a 20 20 20 20 53 45  ease = 5;.    SE
21c0: 4c 45 43 54 20 72 65 6c 65 61 73 65 20 46 52 4f  LECT release FRO
21d0: 4d 20 73 61 76 65 70 6f 69 6e 74 3b 0a 20 20 7d  M savepoint;.  }
21e0: 0a 7d 20 7b 35 7d 0a 0a 23 20 54 72 79 20 6f 75  .} {5}..# Try ou
21f0: 74 20 74 68 65 20 43 52 45 41 54 45 20 54 41 42  t the CREATE TAB
2200: 4c 45 20 41 53 20 73 79 6e 74 61 78 0a 23 0a 64  LE AS syntax.#.d
2210: 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 38 2e 31  o_test table-8.1
2220: 20 7b 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 0a   {.  execsql2 {.
2230: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
2240: 20 74 32 20 41 53 20 53 45 4c 45 43 54 20 2a 20   t2 AS SELECT * 
2250: 46 52 4f 4d 20 77 65 69 72 64 3b 0a 20 20 20 20  FROM weird;.    
2260: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32  SELECT * FROM t2
2270: 3b 0a 20 20 7d 0a 7d 20 7b 64 65 73 63 20 61 20  ;.  }.} {desc a 
2280: 61 73 63 20 62 20 6b 65 79 20 39 20 31 34 5f 76  asc b key 9 14_v
2290: 61 63 20 30 20 66 75 7a 7a 79 5f 64 6f 67 5f 31  ac 0 fuzzy_dog_1
22a0: 32 20 78 79 7a 20 62 65 67 69 6e 20 68 69 20 65  2 xyz begin hi e
22b0: 6e 64 20 79 27 61 6c 6c 7d 0a 64 6f 5f 74 65 73  nd y'all}.do_tes
22c0: 74 20 74 61 62 6c 65 2d 38 2e 31 2e 31 20 7b 0a  t table-8.1.1 {.
22d0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
22e0: 53 45 4c 45 43 54 20 73 71 6c 20 46 52 4f 4d 20  SELECT sql FROM 
22f0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48  sqlite_master WH
2300: 45 52 45 20 6e 61 6d 65 3d 27 74 32 27 3b 0a 20  ERE name='t2';. 
2310: 20 7d 0a 7d 20 7b 7b 43 52 45 41 54 45 20 54 41   }.} {{CREATE TA
2320: 42 4c 45 20 74 32 28 0a 20 20 22 64 65 73 63 22  BLE t2(.  "desc"
2330: 20 54 45 58 54 2c 0a 20 20 22 61 73 63 22 20 54   TEXT,.  "asc" T
2340: 45 58 54 2c 0a 20 20 22 6b 65 79 22 20 49 4e 54  EXT,.  "key" INT
2350: 2c 0a 20 20 22 31 34 5f 76 61 63 22 20 4e 55 4d  ,.  "14_vac" NUM
2360: 2c 0a 20 20 66 75 7a 7a 79 5f 64 6f 67 5f 31 32  ,.  fuzzy_dog_12
2370: 20 54 45 58 54 2c 0a 20 20 22 62 65 67 69 6e 22   TEXT,.  "begin"
2380: 2c 0a 20 20 22 65 6e 64 22 20 54 45 58 54 0a 29  ,.  "end" TEXT.)
2390: 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65  }}.do_test table
23a0: 2d 38 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  -8.2 {.  execsql
23b0: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41   {.    CREATE TA
23c0: 42 4c 45 20 22 74 33 22 22 78 79 7a 22 28 61 2c  BLE "t3""xyz"(a,
23d0: 62 2c 63 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  b,c);.    INSERT
23e0: 20 49 4e 54 4f 20 5b 74 33 22 78 79 7a 5d 20 56   INTO [t3"xyz] V
23f0: 41 4c 55 45 53 28 31 2c 32 2c 33 29 3b 0a 20 20  ALUES(1,2,3);.  
2400: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
2410: 5b 74 33 22 78 79 7a 5d 3b 0a 20 20 7d 0a 7d 20  [t3"xyz];.  }.} 
2420: 7b 31 20 32 20 33 7d 0a 64 6f 5f 74 65 73 74 20  {1 2 3}.do_test 
2430: 74 61 62 6c 65 2d 38 2e 33 20 7b 0a 20 20 65 78  table-8.3 {.  ex
2440: 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 43 52 45  ecsql2 {.    CRE
2450: 41 54 45 20 54 41 42 4c 45 20 5b 74 34 22 61 62  ATE TABLE [t4"ab
2460: 63 5d 20 41 53 20 53 45 4c 45 43 54 20 63 6f 75  c] AS SELECT cou
2470: 6e 74 28 2a 29 20 61 73 20 63 6e 74 2c 20 6d 61  nt(*) as cnt, ma
2480: 78 28 62 2b 63 29 20 46 52 4f 4d 20 5b 74 33 22  x(b+c) FROM [t3"
2490: 78 79 7a 5d 3b 0a 20 20 20 20 53 45 4c 45 43 54  xyz];.    SELECT
24a0: 20 2a 20 46 52 4f 4d 20 5b 74 34 22 61 62 63 5d   * FROM [t4"abc]
24b0: 3b 0a 20 20 7d 0a 7d 20 7b 63 6e 74 20 31 20 6d  ;.  }.} {cnt 1 m
24c0: 61 78 28 62 2b 63 29 20 35 7d 0a 0a 23 20 55 70  ax(b+c) 5}..# Up
24d0: 64 61 74 65 20 66 6f 72 20 76 33 3a 20 54 68 65  date for v3: The
24e0: 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 74 79 70   declaration typ
24f0: 65 20 6f 66 20 61 6e 79 74 68 69 6e 67 20 65 78  e of anything ex
2500: 63 65 70 74 20 61 20 63 6f 6c 75 6d 6e 20 69 73  cept a column is
2510: 20 6e 6f 77 20 61 0a 23 20 4e 55 4c 4c 20 70 6f   now a.# NULL po
2520: 69 6e 74 65 72 2c 20 73 6f 20 74 68 65 20 63 72  inter, so the cr
2530: 65 61 74 65 64 20 74 61 62 6c 65 20 68 61 73 20  eated table has 
2540: 6e 6f 20 63 6f 6c 75 6d 6e 20 74 79 70 65 73 2e  no column types.
2550: 20 28 43 68 61 6e 67 65 64 20 72 65 73 75 6c 74   (Changed result
2560: 0a 23 20 66 72 6f 6d 20 7b 7b 43 52 45 41 54 45  .# from {{CREATE
2570: 20 54 41 42 4c 45 20 27 74 34 22 61 62 63 27 28   TABLE 't4"abc'(
2580: 63 6e 74 20 4e 55 4d 45 52 49 43 2c 22 6d 61 78  cnt NUMERIC,"max
2590: 28 62 2b 63 29 22 20 4e 55 4d 45 52 49 43 29 7d  (b+c)" NUMERIC)}
25a0: 7d 29 2e 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c  })..do_test tabl
25b0: 65 2d 38 2e 33 2e 31 20 7b 0a 20 20 65 78 65 63  e-8.3.1 {.  exec
25c0: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
25d0: 20 73 71 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65   sql FROM sqlite
25e0: 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20 6e 61  _master WHERE na
25f0: 6d 65 3d 27 74 34 22 61 62 63 27 0a 20 20 7d 0a  me='t4"abc'.  }.
2600: 7d 20 7b 7b 43 52 45 41 54 45 20 54 41 42 4c 45  } {{CREATE TABLE
2610: 20 22 74 34 22 22 61 62 63 22 28 63 6e 74 2c 22   "t4""abc"(cnt,"
2620: 6d 61 78 28 62 2b 63 29 22 29 7d 7d 0a 0a 69 66  max(b+c)")}}..if
2630: 63 61 70 61 62 6c 65 20 74 65 6d 70 64 62 20 7b  capable tempdb {
2640: 0a 20 20 64 6f 5f 74 65 73 74 20 74 61 62 6c 65  .  do_test table
2650: 2d 38 2e 34 20 7b 0a 20 20 20 20 65 78 65 63 73  -8.4 {.    execs
2660: 71 6c 32 20 7b 0a 20 20 20 20 20 20 43 52 45 41  ql2 {.      CREA
2670: 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42  TE TEMPORARY TAB
2680: 4c 45 20 74 35 20 41 53 20 53 45 4c 45 43 54 20  LE t5 AS SELECT 
2690: 63 6f 75 6e 74 28 2a 29 20 41 53 20 5b 79 27 61  count(*) AS [y'a
26a0: 6c 6c 5d 20 46 52 4f 4d 20 5b 74 33 22 78 79 7a  ll] FROM [t3"xyz
26b0: 5d 3b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20  ];.      SELECT 
26c0: 2a 20 46 52 4f 4d 20 74 35 3b 0a 20 20 20 20 7d  * FROM t5;.    }
26d0: 0a 20 20 7d 20 7b 79 27 61 6c 6c 20 31 7d 0a 7d  .  } {y'all 1}.}
26e0: 0a 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d  ..do_test table-
26f0: 38 2e 35 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65  8.5 {.  db close
2700: 0a 20 20 73 71 6c 69 74 65 34 20 64 62 20 74 65  .  sqlite4 db te
2710: 73 74 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 32  st.db.  execsql2
2720: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20   {.    SELECT * 
2730: 46 52 4f 4d 20 5b 74 34 22 61 62 63 5d 3b 0a 20  FROM [t4"abc];. 
2740: 20 7d 0a 7d 20 7b 63 6e 74 20 31 20 6d 61 78 28   }.} {cnt 1 max(
2750: 62 2b 63 29 20 35 7d 0a 64 6f 5f 74 65 73 74 20  b+c) 5}.do_test 
2760: 74 61 62 6c 65 2d 38 2e 36 20 7b 0a 20 20 65 78  table-8.6 {.  ex
2770: 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 53 45 4c  ecsql2 {.    SEL
2780: 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 3b 0a 20  ECT * FROM t2;. 
2790: 20 7d 0a 7d 20 7b 64 65 73 63 20 61 20 61 73 63   }.} {desc a asc
27a0: 20 62 20 6b 65 79 20 39 20 31 34 5f 76 61 63 20   b key 9 14_vac 
27b0: 30 20 66 75 7a 7a 79 5f 64 6f 67 5f 31 32 20 78  0 fuzzy_dog_12 x
27c0: 79 7a 20 62 65 67 69 6e 20 68 69 20 65 6e 64 20  yz begin hi end 
27d0: 79 27 61 6c 6c 7d 0a 64 6f 5f 74 65 73 74 20 74  y'all}.do_test t
27e0: 61 62 6c 65 2d 38 2e 37 20 7b 0a 20 20 63 61 74  able-8.7 {.  cat
27f0: 63 68 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  chsql {.    SELE
2800: 43 54 20 2a 20 46 52 4f 4d 20 74 35 3b 0a 20 20  CT * FROM t5;.  
2810: 7d 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20  }.} {1 {no such 
2820: 74 61 62 6c 65 3a 20 74 35 7d 7d 0a 64 6f 5f 74  table: t5}}.do_t
2830: 65 73 74 20 74 61 62 6c 65 2d 38 2e 38 20 7b 0a  est table-8.8 {.
2840: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
2850: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 35   CREATE TABLE t5
2860: 20 41 53 20 53 45 4c 45 43 54 20 2a 20 46 52 4f   AS SELECT * FRO
2870: 4d 20 6e 6f 5f 73 75 63 68 5f 74 61 62 6c 65 3b  M no_such_table;
2880: 0a 20 20 7d 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75  .  }.} {1 {no su
2890: 63 68 20 74 61 62 6c 65 3a 20 6e 6f 5f 73 75 63  ch table: no_suc
28a0: 68 5f 74 61 62 6c 65 7d 7d 0a 0a 64 6f 5f 74 65  h_table}}..do_te
28b0: 73 74 20 74 61 62 6c 65 2d 38 2e 39 20 7b 0a 20  st table-8.9 {. 
28c0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43   execsql {.    C
28d0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 30 28  REATE TABLE t10(
28e0: 22 63 6f 6c 2e 31 22 20 5b 63 68 61 72 2e 33 5d  "col.1" [char.3]
28f0: 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41  );.    CREATE TA
2900: 42 4c 45 20 74 31 31 20 41 53 20 53 45 4c 45 43  BLE t11 AS SELEC
2910: 54 20 2a 20 46 52 4f 4d 20 74 31 30 3b 0a 20 20  T * FROM t10;.  
2920: 20 20 53 45 4c 45 43 54 20 73 71 6c 20 46 52 4f    SELECT sql FRO
2930: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  M sqlite_master 
2940: 57 48 45 52 45 20 6e 61 6d 65 20 3d 20 27 74 31  WHERE name = 't1
2950: 31 27 3b 0a 20 20 7d 0a 7d 20 7b 7b 43 52 45 41  1';.  }.} {{CREA
2960: 54 45 20 54 41 42 4c 45 20 74 31 31 28 22 63 6f  TE TABLE t11("co
2970: 6c 2e 31 22 20 54 45 58 54 29 7d 7d 0a 64 6f 5f  l.1" TEXT)}}.do_
2980: 74 65 73 74 20 74 61 62 6c 65 2d 38 2e 31 30 20  test table-8.10 
2990: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
29a0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
29b0: 31 32 28 0a 20 20 20 20 20 20 61 20 49 4e 54 45  12(.      a INTE
29c0: 47 45 52 2c 0a 20 20 20 20 20 20 62 20 56 41 52  GER,.      b VAR
29d0: 43 48 41 52 28 31 30 29 2c 0a 20 20 20 20 20 20  CHAR(10),.      
29e0: 63 20 56 41 52 43 48 41 52 28 31 2c 31 30 29 2c  c VARCHAR(1,10),
29f0: 0a 20 20 20 20 20 20 64 20 56 41 52 43 48 41 52  .      d VARCHAR
2a00: 28 2b 31 2c 2d 31 30 29 2c 0a 20 20 20 20 20 20  (+1,-10),.      
2a10: 65 20 56 41 52 43 48 41 52 20 28 2b 31 2c 2d 31  e VARCHAR (+1,-1
2a20: 30 29 2c 0a 20 20 20 20 20 20 66 20 22 56 41 52  0),.      f "VAR
2a30: 43 48 41 52 20 28 2b 31 2c 2d 31 30 2c 20 35 29  CHAR (+1,-10, 5)
2a40: 22 2c 0a 20 20 20 20 20 20 67 20 42 49 47 20 49  ",.      g BIG I
2a50: 4e 54 45 47 45 52 0a 20 20 20 20 29 3b 0a 20 20  NTEGER.    );.  
2a60: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
2a70: 31 33 20 41 53 20 53 45 4c 45 43 54 20 2a 20 46  13 AS SELECT * F
2a80: 52 4f 4d 20 74 31 32 3b 0a 20 20 20 20 53 45 4c  ROM t12;.    SEL
2a90: 45 43 54 20 73 71 6c 20 46 52 4f 4d 20 73 71 6c  ECT sql FROM sql
2aa0: 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45  ite_master WHERE
2ab0: 20 6e 61 6d 65 20 3d 20 27 74 31 33 27 3b 0a 20   name = 't13';. 
2ac0: 20 7d 0a 7d 20 7b 7b 43 52 45 41 54 45 20 54 41   }.} {{CREATE TA
2ad0: 42 4c 45 20 74 31 33 28 0a 20 20 61 20 49 4e 54  BLE t13(.  a INT
2ae0: 2c 0a 20 20 62 20 54 45 58 54 2c 0a 20 20 63 20  ,.  b TEXT,.  c 
2af0: 54 45 58 54 2c 0a 20 20 64 20 54 45 58 54 2c 0a  TEXT,.  d TEXT,.
2b00: 20 20 65 20 54 45 58 54 2c 0a 20 20 66 20 54 45    e TEXT,.  f TE
2b10: 58 54 2c 0a 20 20 67 20 49 4e 54 0a 29 7d 7d 0a  XT,.  g INT.)}}.
2b20: 0a 23 20 4d 61 6b 65 20 73 75 72 65 20 77 65 20  .# Make sure we 
2b30: 63 61 6e 6e 6f 74 20 68 61 76 65 20 64 75 70 6c  cannot have dupl
2b40: 69 63 61 74 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d  icate column nam
2b50: 65 73 20 77 69 74 68 69 6e 20 61 20 74 61 62 6c  es within a tabl
2b60: 65 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 74 61 62  e..#.do_test tab
2b70: 6c 65 2d 39 2e 31 20 7b 0a 20 20 63 61 74 63 68  le-9.1 {.  catch
2b80: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
2b90: 20 54 41 42 4c 45 20 74 36 28 61 2c 62 2c 61 29   TABLE t6(a,b,a)
2ba0: 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 64 75 70 6c  ;.  }.} {1 {dupl
2bb0: 69 63 61 74 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d  icate column nam
2bc0: 65 3a 20 61 7d 7d 0a 64 6f 5f 74 65 73 74 20 74  e: a}}.do_test t
2bd0: 61 62 6c 65 2d 39 2e 32 20 7b 0a 20 20 63 61 74  able-9.2 {.  cat
2be0: 63 68 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41  chsql {.    CREA
2bf0: 54 45 20 54 41 42 4c 45 20 74 36 28 61 20 76 61  TE TABLE t6(a va
2c00: 72 63 68 61 72 28 31 30 30 29 2c 20 62 20 62 6c  rchar(100), b bl
2c10: 6f 62 2c 20 61 20 69 6e 74 65 67 65 72 29 3b 0a  ob, a integer);.
2c20: 20 20 7d 0a 7d 20 7b 31 20 7b 64 75 70 6c 69 63    }.} {1 {duplic
2c30: 61 74 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 3a  ate column name:
2c40: 20 61 7d 7d 0a 0a 23 20 43 68 65 63 6b 20 74 68   a}}..# Check th
2c50: 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 73 79  e foreign key sy
2c60: 6e 74 61 78 2e 0a 23 0a 69 66 63 61 70 61 62 6c  ntax..#.ifcapabl
2c70: 65 20 7b 66 6f 72 65 69 67 6e 6b 65 79 7d 20 7b  e {foreignkey} {
2c80: 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 31  .do_test table-1
2c90: 30 2e 31 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  0.1 {.  catchsql
2ca0: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 66 6f   {.    PRAGMA fo
2cb0: 72 65 69 67 6e 5f 6b 65 79 73 20 3d 20 30 3b 0a  reign_keys = 0;.
2cc0: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
2cd0: 20 74 36 28 61 20 52 45 46 45 52 45 4e 43 45 53   t6(a REFERENCES
2ce0: 20 74 34 28 61 29 20 4e 4f 54 20 4e 55 4c 4c 29   t4(a) NOT NULL)
2cf0: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
2d00: 4f 20 74 36 20 56 41 4c 55 45 53 28 4e 55 4c 4c  O t6 VALUES(NULL
2d10: 29 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 74 36 2e  );.  }.} {1 {t6.
2d20: 61 20 6d 61 79 20 6e 6f 74 20 62 65 20 4e 55 4c  a may not be NUL
2d30: 4c 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c  L}}.do_test tabl
2d40: 65 2d 31 30 2e 32 20 7b 0a 20 20 63 61 74 63 68  e-10.2 {.  catch
2d50: 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20 54  sql {.    DROP T
2d60: 41 42 4c 45 20 74 36 3b 0a 20 20 20 20 43 52 45  ABLE t6;.    CRE
2d70: 41 54 45 20 54 41 42 4c 45 20 74 36 28 61 20 52  ATE TABLE t6(a R
2d80: 45 46 45 52 45 4e 43 45 53 20 74 34 28 61 29 20  EFERENCES t4(a) 
2d90: 4d 41 54 43 48 20 50 41 52 54 49 41 4c 29 3b 0a  MATCH PARTIAL);.
2da0: 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f    }.} {0 {}}.do_
2db0: 74 65 73 74 20 74 61 62 6c 65 2d 31 30 2e 33 20  test table-10.3 
2dc0: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  {.  catchsql {. 
2dd0: 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74 36     DROP TABLE t6
2de0: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  ;.    CREATE TAB
2df0: 4c 45 20 74 36 28 61 20 52 45 46 45 52 45 4e 43  LE t6(a REFERENC
2e00: 45 53 20 74 34 20 4d 41 54 43 48 20 46 55 4c 4c  ES t4 MATCH FULL
2e10: 20 4f 4e 20 44 45 4c 45 54 45 20 53 45 54 20 4e   ON DELETE SET N
2e20: 55 4c 4c 20 4e 4f 54 20 4e 55 4c 4c 29 3b 0a 20  ULL NOT NULL);. 
2e30: 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74   }.} {0 {}}.do_t
2e40: 65 73 74 20 74 61 62 6c 65 2d 31 30 2e 34 20 7b  est table-10.4 {
2e50: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
2e60: 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74 36 3b    DROP TABLE t6;
2e70: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
2e80: 45 20 74 36 28 61 20 52 45 46 45 52 45 4e 43 45  E t6(a REFERENCE
2e90: 53 20 74 34 20 4d 41 54 43 48 20 46 55 4c 4c 20  S t4 MATCH FULL 
2ea0: 4f 4e 20 55 50 44 41 54 45 20 53 45 54 20 44 45  ON UPDATE SET DE
2eb0: 46 41 55 4c 54 20 44 45 46 41 55 4c 54 20 31 29  FAULT DEFAULT 1)
2ec0: 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  ;.  }.} {0 {}}.d
2ed0: 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 31 30 2e  o_test table-10.
2ee0: 35 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  5 {.  catchsql {
2ef0: 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20  .    DROP TABLE 
2f00: 74 36 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54  t6;.    CREATE T
2f10: 41 42 4c 45 20 74 36 28 61 20 4e 4f 54 20 4e 55  ABLE t6(a NOT NU
2f20: 4c 4c 20 4e 4f 54 20 44 45 46 45 52 52 41 42 4c  LL NOT DEFERRABL
2f30: 45 20 49 4e 49 54 49 41 4c 4c 59 20 49 4d 4d 45  E INITIALLY IMME
2f40: 44 49 41 54 45 29 3b 0a 20 20 7d 0a 7d 20 7b 30  DIATE);.  }.} {0
2f50: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 61 62   {}}.do_test tab
2f60: 6c 65 2d 31 30 2e 36 20 7b 0a 20 20 63 61 74 63  le-10.6 {.  catc
2f70: 68 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20  hsql {.    DROP 
2f80: 54 41 42 4c 45 20 74 36 3b 0a 20 20 20 20 43 52  TABLE t6;.    CR
2f90: 45 41 54 45 20 54 41 42 4c 45 20 74 36 28 61 20  EATE TABLE t6(a 
2fa0: 4e 4f 54 20 4e 55 4c 4c 20 44 45 46 45 52 52 41  NOT NULL DEFERRA
2fb0: 42 4c 45 20 49 4e 49 54 49 41 4c 4c 59 20 44 45  BLE INITIALLY DE
2fc0: 46 45 52 52 45 44 29 3b 0a 20 20 7d 0a 7d 20 7b  FERRED);.  }.} {
2fd0: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 61  0 {}}.do_test ta
2fe0: 62 6c 65 2d 31 30 2e 37 20 7b 0a 20 20 63 61 74  ble-10.7 {.  cat
2ff0: 63 68 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50  chsql {.    DROP
3000: 20 54 41 42 4c 45 20 74 36 3b 0a 20 20 20 20 43   TABLE t6;.    C
3010: 52 45 41 54 45 20 54 41 42 4c 45 20 74 36 28 61  REATE TABLE t6(a
3020: 2c 0a 20 20 20 20 20 20 46 4f 52 45 49 47 4e 20  ,.      FOREIGN 
3030: 4b 45 59 20 28 61 29 20 52 45 46 45 52 45 4e 43  KEY (a) REFERENC
3040: 45 53 20 74 34 28 62 29 20 44 45 46 45 52 52 41  ES t4(b) DEFERRA
3050: 42 4c 45 20 49 4e 49 54 49 41 4c 4c 59 20 44 45  BLE INITIALLY DE
3060: 46 45 52 52 45 44 0a 20 20 20 20 29 3b 0a 20 20  FERRED.    );.  
3070: 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  }.} {0 {}}.do_te
3080: 73 74 20 74 61 62 6c 65 2d 31 30 2e 38 20 7b 0a  st table-10.8 {.
3090: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
30a0: 20 44 52 4f 50 20 54 41 42 4c 45 20 74 36 3b 0a   DROP TABLE t6;.
30b0: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
30c0: 20 74 36 28 61 2c 62 2c 63 2c 0a 20 20 20 20 20   t6(a,b,c,.     
30d0: 20 46 4f 52 45 49 47 4e 20 4b 45 59 20 28 62 2c   FOREIGN KEY (b,
30e0: 63 29 20 52 45 46 45 52 45 4e 43 45 53 20 74 34  c) REFERENCES t4
30f0: 28 78 2c 79 29 20 4d 41 54 43 48 20 50 41 52 54  (x,y) MATCH PART
3100: 49 41 4c 0a 20 20 20 20 20 20 20 20 4f 4e 20 55  IAL.        ON U
3110: 50 44 41 54 45 20 53 45 54 20 4e 55 4c 4c 20 4f  PDATE SET NULL O
3120: 4e 20 44 45 4c 45 54 45 20 43 41 53 43 41 44 45  N DELETE CASCADE
3130: 20 44 45 46 45 52 52 41 42 4c 45 20 49 4e 49 54   DEFERRABLE INIT
3140: 49 41 4c 4c 59 20 44 45 46 45 52 52 45 44 0a 20  IALLY DEFERRED. 
3150: 20 20 20 29 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b     );.  }.} {0 {
3160: 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65  }}.do_test table
3170: 2d 31 30 2e 39 20 7b 0a 20 20 63 61 74 63 68 73  -10.9 {.  catchs
3180: 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20 54 41  ql {.    DROP TA
3190: 42 4c 45 20 74 36 3b 0a 20 20 20 20 43 52 45 41  BLE t6;.    CREA
31a0: 54 45 20 54 41 42 4c 45 20 74 36 28 61 2c 62 2c  TE TABLE t6(a,b,
31b0: 63 2c 0a 20 20 20 20 20 20 46 4f 52 45 49 47 4e  c,.      FOREIGN
31c0: 20 4b 45 59 20 28 62 2c 63 29 20 52 45 46 45 52   KEY (b,c) REFER
31d0: 45 4e 43 45 53 20 74 34 28 78 29 0a 20 20 20 20  ENCES t4(x).    
31e0: 29 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 6e 75 6d  );.  }.} {1 {num
31f0: 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
3200: 6e 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 64 6f  n foreign key do
3210: 65 73 20 6e 6f 74 20 6d 61 74 63 68 20 74 68 65  es not match the
3220: 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
3230: 6e 73 20 69 6e 20 74 68 65 20 72 65 66 65 72 65  ns in the refere
3240: 6e 63 65 64 20 74 61 62 6c 65 7d 7d 0a 64 6f 5f  nced table}}.do_
3250: 74 65 73 74 20 74 61 62 6c 65 2d 31 30 2e 31 30  test table-10.10
3260: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44   {.  catchsql {D
3270: 52 4f 50 20 54 41 42 4c 45 20 74 36 7d 0a 20 20  ROP TABLE t6}.  
3280: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 43  catchsql {.    C
3290: 52 45 41 54 45 20 54 41 42 4c 45 20 74 36 28 61  REATE TABLE t6(a
32a0: 2c 62 2c 63 2c 0a 20 20 20 20 20 20 46 4f 52 45  ,b,c,.      FORE
32b0: 49 47 4e 20 4b 45 59 20 28 62 2c 63 29 20 52 45  IGN KEY (b,c) RE
32c0: 46 45 52 45 4e 43 45 53 20 74 34 28 78 2c 79 2c  FERENCES t4(x,y,
32d0: 7a 29 0a 20 20 20 20 29 3b 0a 20 20 7d 0a 7d 20  z).    );.  }.} 
32e0: 7b 31 20 7b 6e 75 6d 62 65 72 20 6f 66 20 63 6f  {1 {number of co
32f0: 6c 75 6d 6e 73 20 69 6e 20 66 6f 72 65 69 67 6e  lumns in foreign
3300: 20 6b 65 79 20 64 6f 65 73 20 6e 6f 74 20 6d 61   key does not ma
3310: 74 63 68 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  tch the number o
3320: 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
3330: 20 72 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c   referenced tabl
3340: 65 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c  e}}.do_test tabl
3350: 65 2d 31 30 2e 31 31 20 7b 0a 20 20 63 61 74 63  e-10.11 {.  catc
3360: 68 73 71 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45  hsql {DROP TABLE
3370: 20 74 36 7d 0a 20 20 63 61 74 63 68 73 71 6c 20   t6}.  catchsql 
3380: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  {.    CREATE TAB
3390: 4c 45 20 74 36 28 61 2c 62 2c 20 63 20 52 45 46  LE t6(a,b, c REF
33a0: 45 52 45 4e 43 45 53 20 74 34 28 78 2c 79 29 29  ERENCES t4(x,y))
33b0: 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 66 6f 72 65  ;.  }.} {1 {fore
33c0: 69 67 6e 20 6b 65 79 20 6f 6e 20 63 20 73 68 6f  ign key on c sho
33d0: 75 6c 64 20 72 65 66 65 72 65 6e 63 65 20 6f 6e  uld reference on
33e0: 6c 79 20 6f 6e 65 20 63 6f 6c 75 6d 6e 20 6f 66  ly one column of
33f0: 20 74 61 62 6c 65 20 74 34 7d 7d 0a 64 6f 5f 74   table t4}}.do_t
3400: 65 73 74 20 74 61 62 6c 65 2d 31 30 2e 31 32 20  est table-10.12 
3410: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52  {.  catchsql {DR
3420: 4f 50 20 54 41 42 4c 45 20 74 36 7d 0a 20 20 63  OP TABLE t6}.  c
3430: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 43 52  atchsql {.    CR
3440: 45 41 54 45 20 54 41 42 4c 45 20 74 36 28 61 2c  EATE TABLE t6(a,
3450: 62 2c 63 2c 0a 20 20 20 20 20 20 46 4f 52 45 49  b,c,.      FOREI
3460: 47 4e 20 4b 45 59 20 28 62 2c 78 29 20 52 45 46  GN KEY (b,x) REF
3470: 45 52 45 4e 43 45 53 20 74 34 28 78 2c 79 29 0a  ERENCES t4(x,y).
3480: 20 20 20 20 29 3b 0a 20 20 7d 0a 7d 20 7b 31 20      );.  }.} {1 
3490: 7b 75 6e 6b 6e 6f 77 6e 20 63 6f 6c 75 6d 6e 20  {unknown column 
34a0: 22 78 22 20 69 6e 20 66 6f 72 65 69 67 6e 20 6b  "x" in foreign k
34b0: 65 79 20 64 65 66 69 6e 69 74 69 6f 6e 7d 7d 0a  ey definition}}.
34c0: 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 31 30  do_test table-10
34d0: 2e 31 33 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  .13 {.  catchsql
34e0: 20 7b 44 52 4f 50 20 54 41 42 4c 45 20 74 36 7d   {DROP TABLE t6}
34f0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
3500: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
3510: 36 28 61 2c 62 2c 63 2c 0a 20 20 20 20 20 20 46  6(a,b,c,.      F
3520: 4f 52 45 49 47 4e 20 4b 45 59 20 28 78 2c 62 29  OREIGN KEY (x,b)
3530: 20 52 45 46 45 52 45 4e 43 45 53 20 74 34 28 78   REFERENCES t4(x
3540: 2c 79 29 0a 20 20 20 20 29 3b 0a 20 20 7d 0a 7d  ,y).    );.  }.}
3550: 20 7b 31 20 7b 75 6e 6b 6e 6f 77 6e 20 63 6f 6c   {1 {unknown col
3560: 75 6d 6e 20 22 78 22 20 69 6e 20 66 6f 72 65 69  umn "x" in forei
3570: 67 6e 20 6b 65 79 20 64 65 66 69 6e 69 74 69 6f  gn key definitio
3580: 6e 7d 7d 0a 7d 20 3b 23 20 65 6e 64 69 66 20 66  n}}.} ;# endif f
3590: 6f 72 65 69 67 6e 6b 65 79 0a 0a 23 20 54 65 73  oreignkey..# Tes
35a0: 74 20 66 6f 72 20 74 68 65 20 22 74 79 70 65 6f  t for the "typeo
35b0: 66 22 20 66 75 6e 63 74 69 6f 6e 2e 20 4d 6f 72  f" function. Mor
35c0: 65 20 74 65 73 74 73 20 66 6f 72 20 74 68 65 0a  e tests for the.
35d0: 23 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74  # typeof() funct
35e0: 69 6f 6e 20 61 72 65 20 66 6f 75 6e 64 20 69 6e  ion are found in
35f0: 20 62 69 6e 64 2e 74 65 73 74 20 61 6e 64 20 74   bind.test and t
3600: 79 70 65 73 2e 74 65 73 74 2e 0a 23 0a 64 6f 5f  ypes.test..#.do_
3610: 74 65 73 74 20 74 61 62 6c 65 2d 31 31 2e 31 20  test table-11.1 
3620: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
3630: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
3640: 37 28 0a 20 20 20 20 20 20 20 61 20 69 6e 74 65  7(.       a inte
3650: 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 2c  ger primary key,
3660: 0a 20 20 20 20 20 20 20 62 20 6e 75 6d 62 65 72  .       b number
3670: 28 35 2c 31 30 29 2c 0a 20 20 20 20 20 20 20 63  (5,10),.       c
3680: 20 63 68 61 72 61 63 74 65 72 20 76 61 72 79 69   character varyi
3690: 6e 67 20 28 38 29 2c 0a 20 20 20 20 20 20 20 64  ng (8),.       d
36a0: 20 56 41 52 43 48 41 52 28 39 29 2c 0a 20 20 20   VARCHAR(9),.   
36b0: 20 20 20 20 65 20 63 6c 6f 62 2c 0a 20 20 20 20      e clob,.    
36c0: 20 20 20 66 20 42 4c 4f 42 2c 0a 20 20 20 20 20     f BLOB,.     
36d0: 20 20 67 20 54 65 78 74 2c 0a 20 20 20 20 20 20    g Text,.      
36e0: 20 68 0a 20 20 20 20 29 3b 0a 20 20 20 20 49 4e   h.    );.    IN
36f0: 53 45 52 54 20 49 4e 54 4f 20 74 37 28 61 29 20  SERT INTO t7(a) 
3700: 56 41 4c 55 45 53 28 31 29 3b 0a 20 20 20 20 53  VALUES(1);.    S
3710: 45 4c 45 43 54 20 74 79 70 65 6f 66 28 61 29 2c  ELECT typeof(a),
3720: 20 74 79 70 65 6f 66 28 62 29 2c 20 74 79 70 65   typeof(b), type
3730: 6f 66 28 63 29 2c 20 74 79 70 65 6f 66 28 64 29  of(c), typeof(d)
3740: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 74 79 70  ,.           typ
3750: 65 6f 66 28 65 29 2c 20 74 79 70 65 6f 66 28 66  eof(e), typeof(f
3760: 29 2c 20 74 79 70 65 6f 66 28 67 29 2c 20 74 79  ), typeof(g), ty
3770: 70 65 6f 66 28 68 29 0a 20 20 20 20 46 52 4f 4d  peof(h).    FROM
3780: 20 74 37 20 4c 49 4d 49 54 20 31 3b 0a 20 20 7d   t7 LIMIT 1;.  }
3790: 0a 7d 20 7b 69 6e 74 65 67 65 72 20 6e 75 6c 6c  .} {integer null
37a0: 20 6e 75 6c 6c 20 6e 75 6c 6c 20 6e 75 6c 6c 20   null null null 
37b0: 6e 75 6c 6c 20 6e 75 6c 6c 20 6e 75 6c 6c 7d 20  null null null} 
37c0: 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 31  .do_test table-1
37d0: 31 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  1.2 {.  execsql 
37e0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 74 79 70  {.    SELECT typ
37f0: 65 6f 66 28 61 2b 62 29 2c 20 74 79 70 65 6f 66  eof(a+b), typeof
3800: 28 61 7c 7c 62 29 2c 20 74 79 70 65 6f 66 28 63  (a||b), typeof(c
3810: 2b 64 29 2c 20 74 79 70 65 6f 66 28 63 7c 7c 64  +d), typeof(c||d
3820: 29 0a 20 20 20 20 46 52 4f 4d 20 74 37 20 4c 49  ).    FROM t7 LI
3830: 4d 49 54 20 31 3b 0a 20 20 7d 0a 7d 20 7b 6e 75  MIT 1;.  }.} {nu
3840: 6c 6c 20 6e 75 6c 6c 20 6e 75 6c 6c 20 6e 75 6c  ll null null nul
3850: 6c 7d 0a 0a 23 20 54 65 73 74 20 74 68 61 74 20  l}..# Test that 
3860: 77 68 65 6e 20 63 72 65 61 74 69 6e 67 20 61 20  when creating a 
3870: 74 61 62 6c 65 20 75 73 69 6e 67 20 43 52 45 41  table using CREA
3880: 54 45 20 54 41 42 4c 45 20 41 53 2c 20 63 6f 6c  TE TABLE AS, col
3890: 75 6d 6e 20 74 79 70 65 73 20 61 72 65 0a 23 20  umn types are.# 
38a0: 61 73 73 69 67 6e 65 64 20 63 6f 72 72 65 63 74  assigned correct
38b0: 6c 79 20 66 6f 72 20 28 53 45 4c 45 43 54 20 2e  ly for (SELECT .
38c0: 2e 2e 29 20 61 6e 64 20 27 78 20 41 53 20 79 27  ..) and 'x AS y'
38d0: 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 0a 64 6f   expressions..do
38e0: 5f 74 65 73 74 20 74 61 62 6c 65 2d 31 32 2e 31  _test table-12.1
38f0: 20 7b 0a 20 20 69 66 63 61 70 61 62 6c 65 20 73   {.  ifcapable s
3900: 75 62 71 75 65 72 79 20 7b 0a 20 20 20 20 65 78  ubquery {.    ex
3910: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 43 52  ecsql {.      CR
3920: 45 41 54 45 20 54 41 42 4c 45 20 74 38 20 41 53  EATE TABLE t8 AS
3930: 20 53 45 4c 45 43 54 20 62 2c 20 68 2c 20 61 20   SELECT b, h, a 
3940: 61 73 20 69 2c 20 28 53 45 4c 45 43 54 20 66 20  as i, (SELECT f 
3950: 46 52 4f 4d 20 74 37 29 20 61 73 20 6a 20 46 52  FROM t7) as j FR
3960: 4f 4d 20 74 37 3b 0a 20 20 20 20 7d 0a 20 20 7d  OM t7;.    }.  }
3970: 20 65 6c 73 65 20 7b 0a 20 20 20 20 65 78 65 63   else {.    exec
3980: 73 71 6c 20 7b 0a 20 20 20 20 20 20 43 52 45 41  sql {.      CREA
3990: 54 45 20 54 41 42 4c 45 20 74 38 20 41 53 20 53  TE TABLE t8 AS S
39a0: 45 4c 45 43 54 20 62 2c 20 68 2c 20 61 20 61 73  ELECT b, h, a as
39b0: 20 69 2c 20 66 20 61 73 20 6a 20 46 52 4f 4d 20   i, f as j FROM 
39c0: 74 37 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 20  t7;.    }.  }.} 
39d0: 7b 7d 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65  {}.do_test table
39e0: 2d 31 32 2e 32 20 7b 0a 20 20 65 78 65 63 73 71  -12.2 {.  execsq
39f0: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 73  l {.    SELECT s
3a00: 71 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  ql FROM sqlite_m
3a10: 61 73 74 65 72 20 57 48 45 52 45 20 74 62 6c 5f  aster WHERE tbl_
3a20: 6e 61 6d 65 20 3d 20 27 74 38 27 0a 20 20 7d 0a  name = 't8'.  }.
3a30: 7d 20 7b 7b 43 52 45 41 54 45 20 54 41 42 4c 45  } {{CREATE TABLE
3a40: 20 74 38 28 62 20 4e 55 4d 2c 68 2c 69 20 49 4e   t8(b NUM,h,i IN
3a50: 54 2c 6a 29 7d 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d  T,j)}}..#-------
3a60: 2d 2d 2d 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 0a 23 20  -------------.# 
3aa0: 54 65 73 74 20 63 61 73 65 73 20 74 61 62 6c 65  Test cases table
3ab0: 2d 31 33 2e 2a 0a 23 0a 23 20 54 65 73 74 20 74  -13.*.#.# Test t
3ac0: 68 65 20 61 62 69 6c 69 74 79 20 74 6f 20 68 61  he ability to ha
3ad0: 76 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  ve default value
3ae0: 73 20 6f 66 20 43 55 52 52 45 4e 54 5f 54 49 4d  s of CURRENT_TIM
3af0: 45 2c 20 43 55 52 52 45 4e 54 5f 44 41 54 45 0a  E, CURRENT_DATE.
3b00: 23 20 61 6e 64 20 43 55 52 52 45 4e 54 5f 54 49  # and CURRENT_TI
3b10: 4d 45 53 54 41 4d 50 2e 0a 23 0a 64 6f 5f 74 65  MESTAMP..#.do_te
3b20: 73 74 20 74 61 62 6c 65 2d 31 33 2e 31 20 7b 0a  st table-13.1 {.
3b30: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
3b40: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 61 62  CREATE TABLE tab
3b50: 6c 65 74 38 28 0a 20 20 20 20 20 20 20 61 20 69  let8(.       a i
3b60: 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b  nteger primary k
3b70: 65 79 2c 0a 20 20 20 20 20 20 20 74 6d 20 74 65  ey,.       tm te
3b80: 78 74 20 44 45 46 41 55 4c 54 20 43 55 52 52 45  xt DEFAULT CURRE
3b90: 4e 54 5f 54 49 4d 45 2c 0a 20 20 20 20 20 20 20  NT_TIME,.       
3ba0: 64 74 20 74 65 78 74 20 44 45 46 41 55 4c 54 20  dt text DEFAULT 
3bb0: 43 55 52 52 45 4e 54 5f 44 41 54 45 2c 0a 20 20  CURRENT_DATE,.  
3bc0: 20 20 20 20 20 64 74 74 6d 20 74 65 78 74 20 44       dttm text D
3bd0: 45 46 41 55 4c 54 20 43 55 52 52 45 4e 54 5f 54  EFAULT CURRENT_T
3be0: 49 4d 45 53 54 41 4d 50 0a 20 20 20 20 29 3b 0a  IMESTAMP.    );.
3bf0: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
3c00: 4d 20 74 61 62 6c 65 74 38 3b 0a 20 20 7d 0a 7d  M tablet8;.  }.}
3c10: 20 7b 7d 0a 73 65 74 20 69 20 30 0a 75 6e 73 65   {}.set i 0.unse
3c20: 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 64 61  t -nocomplain da
3c30: 74 65 20 74 69 6d 65 20 73 65 63 6f 6e 64 73 0a  te time seconds.
3c40: 66 6f 72 65 61 63 68 20 7b 64 61 74 65 20 74 69  foreach {date ti
3c50: 6d 65 20 73 65 63 6f 6e 64 73 7d 20 7b 0a 20 20  me seconds} {.  
3c60: 31 39 37 36 2d 30 37 2d 30 34 20 31 32 3a 30 30  1976-07-04 12:00
3c70: 3a 30 30 20 32 30 35 33 32 39 36 30 30 0a 20 20  :00 205329600.  
3c80: 31 39 39 34 2d 30 34 2d 31 36 20 31 34 3a 30 30  1994-04-16 14:00
3c90: 3a 30 30 20 37 36 36 35 30 34 38 30 30 0a 20 20  :00 766504800.  
3ca0: 32 30 30 30 2d 30 31 2d 30 31 20 30 30 3a 30 30  2000-01-01 00:00
3cb0: 3a 30 30 20 39 34 36 36 38 34 38 30 30 0a 20 20  :00 946684800.  
3cc0: 32 30 30 33 2d 31 32 2d 33 31 20 31 32 3a 33 34  2003-12-31 12:34
3cd0: 3a 35 36 20 31 30 37 32 38 37 34 30 39 36 0a 7d  :56 1072874096.}
3ce0: 20 7b 0a 20 20 69 6e 63 72 20 69 0a 20 20 73 65   {.  incr i.  se
3cf0: 74 20 73 71 6c 69 74 65 5f 63 75 72 72 65 6e 74  t sqlite_current
3d00: 5f 74 69 6d 65 20 24 73 65 63 6f 6e 64 73 0a 20  _time $seconds. 
3d10: 20 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 31   do_test table-1
3d20: 33 2e 32 2e 24 69 20 7b 0a 20 20 20 20 65 78 65  3.2.$i {.    exe
3d30: 63 73 71 6c 20 22 0a 20 20 20 20 20 20 49 4e 53  csql ".      INS
3d40: 45 52 54 20 49 4e 54 4f 20 74 61 62 6c 65 74 38  ERT INTO tablet8
3d50: 28 61 29 20 56 41 4c 55 45 53 28 24 69 29 3b 0a  (a) VALUES($i);.
3d60: 20 20 20 20 20 20 53 45 4c 45 43 54 20 74 6d 2c        SELECT tm,
3d70: 20 64 74 2c 20 64 74 74 6d 20 46 52 4f 4d 20 74   dt, dttm FROM t
3d80: 61 62 6c 65 74 38 20 57 48 45 52 45 20 61 3d 24  ablet8 WHERE a=$
3d90: 69 3b 0a 20 20 20 20 22 0a 20 20 7d 20 5b 6c 69  i;.    ".  } [li
3da0: 73 74 20 24 74 69 6d 65 20 24 64 61 74 65 20 5b  st $time $date [
3db0: 6c 69 73 74 20 24 64 61 74 65 20 24 74 69 6d 65  list $date $time
3dc0: 5d 5d 0a 7d 0a 73 65 74 20 73 71 6c 69 74 65 5f  ]].}.set sqlite_
3dd0: 63 75 72 72 65 6e 74 5f 74 69 6d 65 20 30 0a 0a  current_time 0..
3de0: 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  #---------------
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 0a 23 20 54 65 73 74 20 63 61 73  -----.# Test cas
3e30: 65 73 20 74 61 62 6c 65 2d 31 34 2e 2a 0a 23 0a  es table-14.*.#.
3e40: 23 20 54 65 73 74 20 74 68 61 74 20 61 20 74 61  # Test that a ta
3e50: 62 6c 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 72  ble cannot be cr
3e60: 65 61 74 65 64 20 6f 72 20 64 72 6f 70 70 65 64  eated or dropped
3e70: 20 77 68 69 6c 65 20 6f 74 68 65 72 20 76 69 72   while other vir
3e80: 74 75 61 6c 0a 23 20 6d 61 63 68 69 6e 65 73 20  tual.# machines 
3e90: 61 72 65 20 61 63 74 69 76 65 2e 20 54 68 69 73  are active. This
3ea0: 20 69 73 20 72 65 71 75 69 72 65 64 20 62 65 63   is required bec
3eb0: 61 75 73 65 20 6f 74 68 65 72 77 69 73 65 20 77  ause otherwise w
3ec0: 68 65 6e 20 69 6e 20 0a 23 20 61 75 74 6f 2d 76  hen in .# auto-v
3ed0: 61 63 75 75 6d 20 6d 6f 64 65 20 74 68 65 20 62  acuum mode the b
3ee0: 74 72 65 65 2d 6c 61 79 65 72 20 6d 61 79 20 6e  tree-layer may n
3ef0: 65 65 64 20 74 6f 20 6d 6f 76 65 20 74 68 65 20  eed to move the 
3f00: 72 6f 6f 74 2d 70 61 67 65 73 20 6f 66 20 0a 23  root-pages of .#
3f10: 20 61 20 74 61 62 6c 65 20 66 6f 72 20 77 68 69   a table for whi
3f20: 63 68 20 74 68 65 72 65 20 69 73 20 61 6e 20 6f  ch there is an o
3f30: 70 65 6e 20 63 75 72 73 6f 72 2e 0a 23 0a 23 20  pen cursor..#.# 
3f40: 32 30 30 37 2d 30 35 2d 30 32 3a 20 20 41 20 6f  2007-05-02:  A o
3f50: 70 65 6e 20 62 74 72 65 65 20 63 75 72 73 6f 72  pen btree cursor
3f60: 20 6e 6f 20 6c 6f 6e 67 65 72 20 62 6c 6f 63 6b   no longer block
3f70: 73 20 43 52 45 41 54 45 20 54 41 42 4c 45 2e 0a  s CREATE TABLE..
3f80: 23 20 42 75 74 20 44 52 4f 50 20 54 41 42 4c 45  # But DROP TABLE
3f90: 20 69 73 20 73 74 69 6c 6c 20 70 72 6f 68 69 62   is still prohib
3fa0: 69 74 65 64 20 62 65 63 61 75 73 65 20 77 65 20  ited because we 
3fb0: 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74 6f 0a 23  do not want to.#
3fc0: 20 64 65 6c 65 74 65 20 61 20 74 61 62 6c 65 20   delete a table 
3fd0: 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65 72 20 61  out from under a
3fe0: 20 72 75 6e 6e 69 6e 67 20 71 75 65 72 79 2e 0a   running query..
3ff0: 23 0a 0a 23 20 64 62 20 65 76 61 6c 20 7b 0a 23  #..# db eval {.#
4000: 20 20 20 70 72 61 67 6d 61 20 76 64 62 65 5f 74     pragma vdbe_t
4010: 72 61 63 65 20 3d 20 30 3b 0a 23 20 7d 0a 23 20  race = 0;.# }.# 
4020: 54 72 79 20 74 6f 20 63 72 65 61 74 65 20 61 20  Try to create a 
4030: 74 61 62 6c 65 20 66 72 6f 6d 20 77 69 74 68 69  table from withi
4040: 6e 20 61 20 63 61 6c 6c 62 61 63 6b 3a 0a 75 6e  n a callback:.un
4050: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
4060: 72 65 73 75 6c 74 0a 64 6f 5f 74 65 73 74 20 74  result.do_test t
4070: 61 62 6c 65 2d 31 34 2e 31 20 7b 0a 20 20 73 65  able-14.1 {.  se
4080: 74 20 72 63 20 5b 0a 20 20 20 20 63 61 74 63 68  t rc [.    catch
4090: 20 7b 0a 20 20 20 20 20 20 64 62 20 65 76 61 6c   {.      db eval
40a0: 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   {SELECT * FROM 
40b0: 74 61 62 6c 65 74 38 20 4c 49 4d 49 54 20 31 7d  tablet8 LIMIT 1}
40c0: 20 7b 7d 20 7b 0a 20 20 20 20 20 20 20 20 64 62   {} {.        db
40d0: 20 65 76 61 6c 20 7b 43 52 45 41 54 45 20 54 41   eval {CREATE TA
40e0: 42 4c 45 20 74 39 28 61 2c 20 62 2c 20 63 29 7d  BLE t9(a, b, c)}
40f0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 6d  .      }.    } m
4100: 73 67 0a 20 20 5d 0a 20 20 73 65 74 20 72 65 73  sg.  ].  set res
4110: 75 6c 74 20 5b 6c 69 73 74 20 24 72 63 20 24 6d  ult [list $rc $m
4120: 73 67 5d 0a 7d 20 7b 30 20 7b 7d 7d 0a 0a 23 20  sg].} {0 {}}..# 
4130: 54 72 79 20 74 6f 20 64 72 6f 70 20 61 20 74 61  Try to drop a ta
4140: 62 6c 65 20 66 72 6f 6d 20 77 69 74 68 69 6e 20  ble from within 
4150: 61 20 63 61 6c 6c 62 61 63 6b 3a 0a 64 6f 5f 74  a callback:.do_t
4160: 65 73 74 20 74 61 62 6c 65 2d 31 34 2e 32 20 7b  est table-14.2 {
4170: 0a 20 20 73 65 74 20 72 63 20 5b 0a 20 20 20 20  .  set rc [.    
4180: 63 61 74 63 68 20 7b 0a 20 20 20 20 20 20 64 62  catch {.      db
4190: 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 2a 20   eval {SELECT * 
41a0: 46 52 4f 4d 20 74 61 62 6c 65 74 38 20 4c 49 4d  FROM tablet8 LIM
41b0: 49 54 20 31 7d 20 7b 7d 20 7b 0a 20 20 20 20 20  IT 1} {} {.     
41c0: 20 20 20 64 62 20 65 76 61 6c 20 7b 44 52 4f 50     db eval {DROP
41d0: 20 54 41 42 4c 45 20 74 39 3b 7d 0a 20 20 20 20   TABLE t9;}.    
41e0: 20 20 7d 0a 20 20 20 20 7d 20 6d 73 67 0a 20 20    }.    } msg.  
41f0: 5d 20 0a 20 20 73 65 74 20 72 65 73 75 6c 74 20  ] .  set result 
4200: 5b 6c 69 73 74 20 24 72 63 20 24 6d 73 67 5d 0a  [list $rc $msg].
4210: 7d 20 7b 30 20 7b 7d 7d 0a 0a 69 66 63 61 70 61  } {0 {}}..ifcapa
4220: 62 6c 65 20 61 74 74 61 63 68 20 7b 0a 20 20 23  ble attach {.  #
4230: 20 4e 6f 77 20 61 74 74 61 63 68 20 61 20 64 61   Now attach a da
4240: 74 61 62 61 73 65 20 61 6e 64 20 65 6e 73 75 72  tabase and ensur
4250: 65 20 74 68 61 74 20 61 20 74 61 62 6c 65 20 63  e that a table c
4260: 61 6e 20 62 65 20 63 72 65 61 74 65 64 20 69 6e  an be created in
4270: 20 74 68 65 20 0a 20 20 23 20 61 74 74 61 63 68   the .  # attach
4280: 65 64 20 64 61 74 61 62 61 73 65 20 77 68 69 6c  ed database whil
4290: 73 74 20 69 6e 20 61 20 63 61 6c 6c 62 61 63 6b  st in a callback
42a0: 20 66 72 6f 6d 20 61 20 71 75 65 72 79 20 6f 6e   from a query on
42b0: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
42c0: 73 65 2e 0a 20 20 64 6f 5f 74 65 73 74 20 74 61  se..  do_test ta
42d0: 62 6c 65 2d 31 34 2e 33 20 7b 0a 20 20 20 20 66  ble-14.3 {.    f
42e0: 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73 74 32  orcedelete test2
42f0: 2e 64 62 0a 20 20 20 20 66 6f 72 63 65 64 65 6c  .db.    forcedel
4300: 65 74 65 20 74 65 73 74 32 2e 64 62 2d 6a 6f 75  ete test2.db-jou
4310: 72 6e 61 6c 0a 20 20 20 20 65 78 65 63 73 71 6c  rnal.    execsql
4320: 20 7b 0a 20 20 20 20 20 20 41 54 54 41 43 48 20   {.      ATTACH 
4330: 27 74 65 73 74 32 2e 64 62 27 20 61 73 20 61 75  'test2.db' as au
4340: 78 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 62 20  x;.    }.    db 
4350: 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46  eval {SELECT * F
4360: 52 4f 4d 20 74 61 62 6c 65 74 38 20 4c 49 4d 49  ROM tablet8 LIMI
4370: 54 20 31 7d 20 7b 7d 20 7b 0a 20 20 20 20 20 20  T 1} {} {.      
4380: 64 62 20 65 76 61 6c 20 7b 43 52 45 41 54 45 20  db eval {CREATE 
4390: 54 41 42 4c 45 20 61 75 78 2e 74 31 28 61 2c 20  TABLE aux.t1(a, 
43a0: 62 2c 20 63 29 7d 0a 20 20 20 20 7d 0a 20 20 7d  b, c)}.    }.  }
43b0: 20 7b 7d 0a 20 20 0a 20 20 23 20 4f 6e 20 74 68   {}.  .  # On th
43c0: 65 20 6f 74 68 65 72 20 68 61 6e 64 2c 20 69 74  e other hand, it
43d0: 20 73 68 6f 75 6c 64 20 62 65 20 69 6d 70 6f 73   should be impos
43e0: 73 69 62 6c 65 20 74 6f 20 64 72 6f 70 20 61 20  sible to drop a 
43f0: 74 61 62 6c 65 20 77 68 65 6e 20 61 6e 79 20 56  table when any V
4400: 4d 73 20 0a 20 20 23 20 61 72 65 20 61 63 74 69  Ms .  # are acti
4410: 76 65 2e 20 54 68 69 73 20 69 73 20 62 65 63 61  ve. This is beca
4420: 75 73 65 20 56 65 72 69 66 79 43 6f 6f 6b 69 65  use VerifyCookie
4430: 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 20 6d 61   instructions ma
4440: 79 20 68 61 76 65 20 61 6c 72 65 61 64 79 0a 20  y have already. 
4450: 20 23 20 62 65 65 6e 20 65 78 65 63 75 74 65 64   # been executed
4460: 2c 20 61 6e 64 20 62 74 72 65 65 20 72 6f 6f 74  , and btree root
4470: 2d 70 61 67 65 73 20 6d 61 79 20 6e 6f 74 20 6d  -pages may not m
4480: 6f 76 65 20 61 66 74 65 72 20 74 68 69 73 20 28  ove after this (
4490: 77 68 69 63 68 20 61 0a 20 20 23 20 64 65 6c 65  which a.  # dele
44a0: 74 65 20 74 61 62 6c 65 20 6d 69 67 68 74 20 64  te table might d
44b0: 6f 29 2e 0a 20 20 64 6f 5f 74 65 73 74 20 74 61  o)..  do_test ta
44c0: 62 6c 65 2d 31 34 2e 34 20 7b 0a 20 20 20 20 73  ble-14.4 {.    s
44d0: 65 74 20 72 63 20 5b 0a 20 20 20 20 20 20 63 61  et rc [.      ca
44e0: 74 63 68 20 7b 0a 20 20 20 20 20 20 20 20 64 62  tch {.        db
44f0: 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 2a 20   eval {SELECT * 
4500: 46 52 4f 4d 20 74 61 62 6c 65 74 38 20 4c 49 4d  FROM tablet8 LIM
4510: 49 54 20 31 7d 20 7b 7d 20 7b 0a 20 20 20 20 20  IT 1} {} {.     
4520: 20 20 20 20 20 64 62 20 65 76 61 6c 20 7b 44 52       db eval {DR
4530: 4f 50 20 54 41 42 4c 45 20 61 75 78 2e 74 31 3b  OP TABLE aux.t1;
4540: 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  }.        }.    
4550: 20 20 7d 20 6d 73 67 0a 20 20 20 20 5d 20 0a 20    } msg.    ] . 
4560: 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 6c     set result [l
4570: 69 73 74 20 24 72 63 20 24 6d 73 67 5d 0a 20 20  ist $rc $msg].  
4580: 7d 20 7b 30 20 7b 7d 7d 0a 7d 0a 0a 23 20 43 72  } {0 {}}.}..# Cr
4590: 65 61 74 65 20 61 6e 64 20 64 72 6f 70 20 32 30  eate and drop 20
45a0: 30 30 20 74 61 62 6c 65 73 2e 20 54 68 69 73 20  00 tables. This 
45b0: 69 73 20 74 6f 20 63 68 65 63 6b 20 74 68 61 74  is to check that
45c0: 20 74 68 65 20 62 61 6c 61 6e 63 65 5f 73 68 61   the balance_sha
45d0: 6c 6c 6f 77 28 29 0a 23 20 72 6f 75 74 69 6e 65  llow().# routine
45e0: 20 77 6f 72 6b 73 20 63 6f 72 72 65 63 74 6c 79   works correctly
45f0: 20 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 6d   on the sqlite_m
4600: 61 73 74 65 72 20 74 61 62 6c 65 2e 20 41 74 20  aster table. At 
4610: 6f 6e 65 20 70 6f 69 6e 74 20 69 74 0a 23 20 63  one point it.# c
4620: 6f 6e 74 61 69 6e 65 64 20 61 20 62 75 67 20 74  ontained a bug t
4630: 68 61 74 20 77 6f 75 6c 64 20 70 72 65 76 65 6e  hat would preven
4640: 74 20 74 68 65 20 72 69 67 68 74 2d 63 68 69 6c  t the right-chil
4650: 64 20 70 6f 69 6e 74 65 72 20 6f 66 20 74 68 65  d pointer of the
4660: 0a 23 20 63 68 69 6c 64 20 70 61 67 65 20 66 72  .# child page fr
4670: 6f 6d 20 62 65 69 6e 67 20 63 6f 70 69 65 64 20  om being copied 
4680: 74 6f 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65  to the root page
4690: 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c  ..#.do_test tabl
46a0: 65 2d 31 35 2e 31 20 7b 0a 20 20 65 78 65 63 73  e-15.1 {.  execs
46b0: 71 6c 20 7b 42 45 47 49 4e 7d 0a 20 20 66 6f 72  ql {BEGIN}.  for
46c0: 20 7b 73 65 74 20 69 20 30 7d 20 7b 24 69 3c 32   {set i 0} {$i<2
46d0: 30 30 30 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a  000} {incr i} {.
46e0: 20 20 20 20 65 78 65 63 73 71 6c 20 22 43 52 45      execsql "CRE
46f0: 41 54 45 20 54 41 42 4c 45 20 74 62 6c 24 69 20  ATE TABLE tbl$i 
4700: 28 61 2c 20 62 2c 20 63 29 22 0a 20 20 7d 0a 20  (a, b, c)".  }. 
4710: 20 65 78 65 63 73 71 6c 20 7b 43 4f 4d 4d 49 54   execsql {COMMIT
4720: 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 74  }.} {}.do_test t
4730: 61 62 6c 65 2d 31 35 2e 32 20 7b 0a 20 20 65 78  able-15.2 {.  ex
4740: 65 63 73 71 6c 20 7b 42 45 47 49 4e 7d 0a 20 20  ecsql {BEGIN}.  
4750: 66 6f 72 20 7b 73 65 74 20 69 20 30 7d 20 7b 24  for {set i 0} {$
4760: 69 3c 32 30 30 30 7d 20 7b 69 6e 63 72 20 69 7d  i<2000} {incr i}
4770: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 22   {.    execsql "
4780: 44 52 4f 50 20 54 41 42 4c 45 20 74 62 6c 24 69  DROP TABLE tbl$i
4790: 22 0a 20 20 7d 0a 20 20 65 78 65 63 73 71 6c 20  ".  }.  execsql 
47a0: 7b 43 4f 4d 4d 49 54 7d 0a 7d 20 7b 7d 0a 0a 66  {COMMIT}.} {}..f
47b0: 69 6e 69 73 68 5f 74 65 73 74 0a                 inish_test.