/ Hex Artifact Content
Login

Artifact 06271d61eb13871490d38168433c1ef3dd82bb2a:


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 0a 73 65 74 20 74 65  ement..#..set te
01f0: 73 74 64 69 72 20 5b 66 69 6c 65 20 64 69 72 6e  stdir [file dirn
0200: 61 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f 75 72  ame $argv0].sour
0210: 63 65 20 24 74 65 73 74 64 69 72 2f 74 65 73 74  ce $testdir/test
0220: 65 72 2e 74 63 6c 0a 0a 23 20 43 72 65 61 74 65  er.tcl..# Create
0230: 20 61 20 62 61 73 69 63 20 74 61 62 6c 65 20 61   a basic table a
0240: 6e 64 20 76 65 72 69 66 79 20 69 74 20 69 73 20  nd verify it is 
0250: 61 64 64 65 64 20 74 6f 20 73 71 6c 69 74 65 5f  added to sqlite_
0260: 6d 61 73 74 65 72 0a 23 0a 64 6f 5f 74 65 73 74  master.#.do_test
0270: 20 74 61 62 6c 65 2d 31 2e 31 20 7b 0a 20 20 65   table-1.1 {.  e
0280: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45  xecsql {.    CRE
0290: 41 54 45 20 54 41 42 4c 45 20 74 65 73 74 31 20  ATE TABLE test1 
02a0: 28 0a 20 20 20 20 20 20 6f 6e 65 20 76 61 72 63  (.      one varc
02b0: 68 61 72 28 31 30 29 2c 0a 20 20 20 20 20 20 74  har(10),.      t
02c0: 77 6f 20 74 65 78 74 0a 20 20 20 20 29 0a 20 20  wo text.    ).  
02d0: 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  }.  execsql {.  
02e0: 20 20 53 45 4c 45 43 54 20 73 71 6c 20 46 52 4f    SELECT sql FRO
02f0: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  M sqlite_master 
0300: 57 48 45 52 45 20 74 79 70 65 21 3d 27 6d 65 74  WHERE type!='met
0310: 61 27 0a 20 20 7d 0a 7d 20 7b 7b 43 52 45 41 54  a'.  }.} {{CREAT
0320: 45 20 54 41 42 4c 45 20 74 65 73 74 31 20 28 0a  E TABLE test1 (.
0330: 20 20 20 20 20 20 6f 6e 65 20 76 61 72 63 68 61        one varcha
0340: 72 28 31 30 29 2c 0a 20 20 20 20 20 20 74 77 6f  r(10),.      two
0350: 20 74 65 78 74 0a 20 20 20 20 29 7d 7d 0a 0a 0a   text.    )}}...
0360: 23 20 56 65 72 69 66 79 20 74 68 65 20 6f 74 68  # Verify the oth
0370: 65 72 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65  er fields of the
0380: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 66   sqlite_master f
0390: 69 6c 65 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 74  ile..#.do_test t
03a0: 61 62 6c 65 2d 31 2e 33 20 7b 0a 20 20 65 78 65  able-1.3 {.  exe
03b0: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d  csql {SELECT nam
03c0: 65 2c 20 74 62 6c 5f 6e 61 6d 65 2c 20 74 79 70  e, tbl_name, typ
03d0: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  e FROM sqlite_ma
03e0: 73 74 65 72 20 57 48 45 52 45 20 74 79 70 65 21  ster WHERE type!
03f0: 3d 27 6d 65 74 61 27 7d 0a 7d 20 7b 74 65 73 74  ='meta'}.} {test
0400: 31 20 74 65 73 74 31 20 74 61 62 6c 65 7d 0a 0a  1 test1 table}..
0410: 23 20 43 6c 6f 73 65 20 61 6e 64 20 72 65 6f 70  # Close and reop
0420: 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 2e  en the database.
0430: 20 20 56 65 72 69 66 79 20 74 68 61 74 20 65 76    Verify that ev
0440: 65 72 79 74 68 69 6e 67 20 69 73 0a 23 20 73 74  erything is.# st
0450: 69 6c 6c 20 74 68 65 20 73 61 6d 65 2e 0a 23 0a  ill the same..#.
0460: 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 31 2e  do_test table-1.
0470: 34 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20  4 {.  db close. 
0480: 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74   sqlite3 db test
0490: 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  .db.  execsql {S
04a0: 45 4c 45 43 54 20 6e 61 6d 65 2c 20 74 62 6c 5f  ELECT name, tbl_
04b0: 6e 61 6d 65 2c 20 74 79 70 65 20 66 72 6f 6d 20  name, type from 
04c0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48  sqlite_master WH
04d0: 45 52 45 20 74 79 70 65 21 3d 27 6d 65 74 61 27  ERE type!='meta'
04e0: 7d 0a 7d 20 7b 74 65 73 74 31 20 74 65 73 74 31  }.} {test1 test1
04f0: 20 74 61 62 6c 65 7d 0a 0a 23 20 44 72 6f 70 20   table}..# Drop 
0500: 74 68 65 20 64 61 74 61 62 61 73 65 20 61 6e 64  the database and
0510: 20 6d 61 6b 65 20 73 75 72 65 20 69 74 20 64 69   make sure it di
0520: 73 61 70 70 65 61 72 73 2e 0a 23 0a 64 6f 5f 74  sappears..#.do_t
0530: 65 73 74 20 74 61 62 6c 65 2d 31 2e 35 20 7b 0a  est table-1.5 {.
0540: 20 20 65 78 65 63 73 71 6c 20 7b 44 52 4f 50 20    execsql {DROP 
0550: 54 41 42 4c 45 20 74 65 73 74 31 7d 0a 20 20 65  TABLE test1}.  e
0560: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a  xecsql {SELECT *
0570: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
0580: 74 65 72 20 57 48 45 52 45 20 74 79 70 65 21 3d  ter WHERE type!=
0590: 27 6d 65 74 61 27 7d 0a 7d 20 7b 7d 0a 0a 23 20  'meta'}.} {}..# 
05a0: 43 6c 6f 73 65 20 61 6e 64 20 72 65 6f 70 65 6e  Close and reopen
05b0: 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20   the database.  
05c0: 56 65 72 69 66 79 20 74 68 61 74 20 74 68 65 20  Verify that the 
05d0: 74 61 62 6c 65 20 69 73 0a 23 20 73 74 69 6c 6c  table is.# still
05e0: 20 67 6f 6e 65 2e 0a 23 0a 64 6f 5f 74 65 73 74   gone..#.do_test
05f0: 20 74 61 62 6c 65 2d 31 2e 36 20 7b 0a 20 20 64   table-1.6 {.  d
0600: 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65  b close.  sqlite
0610: 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65  3 db test.db.  e
0620: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
0630: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
0640: 6d 61 73 74 65 72 20 57 48 45 52 45 20 74 79 70  master WHERE typ
0650: 65 21 3d 27 6d 65 74 61 27 7d 0a 7d 20 7b 7d 0a  e!='meta'}.} {}.
0660: 0a 23 20 52 65 70 65 61 74 20 74 68 65 20 61 62  .# Repeat the ab
0670: 6f 76 65 20 73 74 65 70 73 2c 20 62 75 74 20 74  ove steps, but t
0680: 68 69 73 20 74 69 6d 65 20 71 75 6f 74 65 20 74  his time quote t
0690: 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 2e 0a 23  he table name..#
06a0: 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 31  .do_test table-1
06b0: 2e 31 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .10 {.  execsql 
06c0: 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 22 63  {CREATE TABLE "c
06d0: 72 65 61 74 65 22 20 28 66 31 20 69 6e 74 29 7d  reate" (f1 int)}
06e0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
06f0: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
0700: 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45  ite_master WHERE
0710: 20 74 79 70 65 21 3d 27 6d 65 74 61 27 7d 0a 7d   type!='meta'}.}
0720: 20 7b 63 72 65 61 74 65 7d 0a 64 6f 5f 74 65 73   {create}.do_tes
0730: 74 20 74 61 62 6c 65 2d 31 2e 31 31 20 7b 0a 20  t table-1.11 {. 
0740: 20 65 78 65 63 73 71 6c 20 7b 44 52 4f 50 20 54   execsql {DROP T
0750: 41 42 4c 45 20 22 63 72 65 61 74 65 22 7d 0a 20  ABLE "create"}. 
0760: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
0770: 20 6e 61 6d 65 20 46 52 4f 4d 20 22 73 71 6c 69   name FROM "sqli
0780: 74 65 5f 6d 61 73 74 65 72 22 20 57 48 45 52 45  te_master" WHERE
0790: 20 74 79 70 65 21 3d 27 6d 65 74 61 27 7d 0a 7d   type!='meta'}.}
07a0: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c   {}.do_test tabl
07b0: 65 2d 31 2e 31 32 20 7b 0a 20 20 65 78 65 63 73  e-1.12 {.  execs
07c0: 71 6c 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45  ql {CREATE TABLE
07d0: 20 74 65 73 74 31 28 22 66 31 20 68 6f 22 20 69   test1("f1 ho" i
07e0: 6e 74 29 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b  nt)}.  execsql {
07f0: 53 45 4c 45 43 54 20 6e 61 6d 65 20 61 73 20 22  SELECT name as "
0800: 58 22 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  X" FROM sqlite_m
0810: 61 73 74 65 72 20 57 48 45 52 45 20 74 79 70 65  aster WHERE type
0820: 21 3d 27 6d 65 74 61 27 7d 0a 7d 20 7b 74 65 73  !='meta'}.} {tes
0830: 74 31 7d 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c  t1}.do_test tabl
0840: 65 2d 31 2e 31 33 20 7b 0a 20 20 65 78 65 63 73  e-1.13 {.  execs
0850: 71 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45 20 22  ql {DROP TABLE "
0860: 54 45 53 54 31 22 7d 0a 20 20 65 78 65 63 73 71  TEST1"}.  execsq
0870: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
0880: 52 4f 4d 20 22 73 71 6c 69 74 65 5f 6d 61 73 74  ROM "sqlite_mast
0890: 65 72 22 20 57 48 45 52 45 20 74 79 70 65 21 3d  er" WHERE type!=
08a0: 27 6d 65 74 61 27 7d 0a 7d 20 7b 7d 0a 0a 0a 0a  'meta'}.} {}....
08b0: 23 20 56 65 72 69 66 79 20 74 68 61 74 20 77 65  # Verify that we
08c0: 20 63 61 6e 6e 6f 74 20 6d 61 6b 65 20 74 77 6f   cannot make two
08d0: 20 74 61 62 6c 65 73 20 77 69 74 68 20 74 68 65   tables with the
08e0: 20 73 61 6d 65 20 6e 61 6d 65 0a 23 0a 64 6f 5f   same name.#.do_
08f0: 74 65 73 74 20 74 61 62 6c 65 2d 32 2e 31 20 7b  test table-2.1 {
0900: 0a 20 20 65 78 65 63 73 71 6c 20 7b 43 52 45 41  .  execsql {CREA
0910: 54 45 20 54 41 42 4c 45 20 54 45 53 54 32 28 6f  TE TABLE TEST2(o
0920: 6e 65 20 74 65 78 74 29 7d 0a 20 20 63 61 74 63  ne text)}.  catc
0930: 68 73 71 6c 20 7b 43 52 45 41 54 45 20 54 41 42  hsql {CREATE TAB
0940: 4c 45 20 74 65 73 74 32 28 74 77 6f 20 74 65 78  LE test2(two tex
0950: 74 20 64 65 66 61 75 6c 74 20 27 68 69 27 29 7d  t default 'hi')}
0960: 0a 7d 20 7b 31 20 7b 74 61 62 6c 65 20 74 65 73  .} {1 {table tes
0970: 74 32 20 61 6c 72 65 61 64 79 20 65 78 69 73 74  t2 already exist
0980: 73 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c  s}}.do_test tabl
0990: 65 2d 32 2e 31 2e 31 20 7b 0a 20 20 63 61 74 63  e-2.1.1 {.  catc
09a0: 68 73 71 6c 20 7b 43 52 45 41 54 45 20 54 41 42  hsql {CREATE TAB
09b0: 4c 45 20 22 74 65 73 74 32 22 20 28 74 77 6f 29  LE "test2" (two)
09c0: 7d 0a 7d 20 7b 31 20 7b 74 61 62 6c 65 20 22 74  }.} {1 {table "t
09d0: 65 73 74 32 22 20 61 6c 72 65 61 64 79 20 65 78  est2" already ex
09e0: 69 73 74 73 7d 7d 0a 64 6f 5f 74 65 73 74 20 74  ists}}.do_test t
09f0: 61 62 6c 65 2d 32 2e 31 62 20 7b 0a 20 20 73 65  able-2.1b {.  se
0a00: 74 20 76 20 5b 63 61 74 63 68 20 7b 65 78 65 63  t v [catch {exec
0a10: 73 71 6c 20 7b 43 52 45 41 54 45 20 54 41 42 4c  sql {CREATE TABL
0a20: 45 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 28  E sqlite_master(
0a30: 74 77 6f 20 74 65 78 74 29 7d 7d 20 6d 73 67 5d  two text)}} msg]
0a40: 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 24 6d 73  .  lappend v $ms
0a50: 67 0a 7d 20 7b 31 20 7b 6f 62 6a 65 63 74 20 6e  g.} {1 {object n
0a60: 61 6d 65 20 72 65 73 65 72 76 65 64 20 66 6f 72  ame reserved for
0a70: 20 69 6e 74 65 72 6e 61 6c 20 75 73 65 3a 20 73   internal use: s
0a80: 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 7d 0a 64  qlite_master}}.d
0a90: 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 32 2e 31  o_test table-2.1
0aa0: 63 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20  c {.  db close. 
0ab0: 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74   sqlite3 db test
0ac0: 2e 64 62 0a 20 20 73 65 74 20 76 20 5b 63 61 74  .db.  set v [cat
0ad0: 63 68 20 7b 65 78 65 63 73 71 6c 20 7b 43 52 45  ch {execsql {CRE
0ae0: 41 54 45 20 54 41 42 4c 45 20 73 71 6c 69 74 65  ATE TABLE sqlite
0af0: 5f 6d 61 73 74 65 72 28 74 77 6f 20 74 65 78 74  _master(two text
0b00: 29 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65  )}} msg].  lappe
0b10: 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b 31 20 7b  nd v $msg.} {1 {
0b20: 6f 62 6a 65 63 74 20 6e 61 6d 65 20 72 65 73 65  object name rese
0b30: 72 76 65 64 20 66 6f 72 20 69 6e 74 65 72 6e 61  rved for interna
0b40: 6c 20 75 73 65 3a 20 73 71 6c 69 74 65 5f 6d 61  l use: sqlite_ma
0b50: 73 74 65 72 7d 7d 0a 64 6f 5f 74 65 73 74 20 74  ster}}.do_test t
0b60: 61 62 6c 65 2d 32 2e 31 64 20 7b 0a 20 20 63 61  able-2.1d {.  ca
0b70: 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45 20 54  tchsql {CREATE T
0b80: 41 42 4c 45 20 49 46 20 4e 4f 54 20 45 58 49 53  ABLE IF NOT EXIS
0b90: 54 53 20 74 65 73 74 32 28 78 2c 79 29 7d 0a 7d  TS test2(x,y)}.}
0ba0: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
0bb0: 74 61 62 6c 65 2d 32 2e 31 65 20 7b 0a 20 20 63  table-2.1e {.  c
0bc0: 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45 20  atchsql {CREATE 
0bd0: 54 41 42 4c 45 20 49 46 20 4e 4f 54 20 45 58 49  TABLE IF NOT EXI
0be0: 53 54 53 20 74 65 73 74 32 28 78 20 55 4e 49 51  STS test2(x UNIQ
0bf0: 55 45 2c 20 79 20 54 45 58 54 20 50 52 49 4d 41  UE, y TEXT PRIMA
0c00: 52 59 20 4b 45 59 29 7d 0a 7d 20 7b 30 20 7b 7d  RY KEY)}.} {0 {}
0c10: 7d 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d  }.do_test table-
0c20: 32 2e 31 66 20 7b 0a 20 20 65 78 65 63 73 71 6c  2.1f {.  execsql
0c30: 20 7b 44 52 4f 50 20 54 41 42 4c 45 20 74 65 73   {DROP TABLE tes
0c40: 74 32 3b 20 53 45 4c 45 43 54 20 6e 61 6d 65 20  t2; SELECT name 
0c50: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
0c60: 65 72 20 57 48 45 52 45 20 74 79 70 65 21 3d 27  er WHERE type!='
0c70: 6d 65 74 61 27 7d 0a 7d 20 7b 7d 0a 0a 23 20 56  meta'}.} {}..# V
0c80: 65 72 69 66 79 20 74 68 61 74 20 77 65 20 63 61  erify that we ca
0c90: 6e 6e 6f 74 20 6d 61 6b 65 20 61 20 74 61 62 6c  nnot make a tabl
0ca0: 65 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  e with the same 
0cb0: 6e 61 6d 65 20 61 73 20 61 6e 20 69 6e 64 65 78  name as an index
0cc0: 0a 23 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65  .#.do_test table
0cd0: 2d 32 2e 32 61 20 7b 0a 20 20 65 78 65 63 73 71  -2.2a {.  execsq
0ce0: 6c 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20  l {CREATE TABLE 
0cf0: 74 65 73 74 32 28 6f 6e 65 20 74 65 78 74 29 7d  test2(one text)}
0d00: 0a 20 20 65 78 65 63 73 71 6c 20 7b 43 52 45 41  .  execsql {CREA
0d10: 54 45 20 49 4e 44 45 58 20 74 65 73 74 33 20 4f  TE INDEX test3 O
0d20: 4e 20 74 65 73 74 32 28 6f 6e 65 29 7d 0a 20 20  N test2(one)}.  
0d30: 63 61 74 63 68 73 71 6c 20 7b 43 52 45 41 54 45  catchsql {CREATE
0d40: 20 54 41 42 4c 45 20 74 65 73 74 33 28 74 77 6f   TABLE test3(two
0d50: 20 74 65 78 74 29 7d 0a 7d 20 7b 31 20 7b 74 68   text)}.} {1 {th
0d60: 65 72 65 20 69 73 20 61 6c 72 65 61 64 79 20 61  ere is already a
0d70: 6e 20 69 6e 64 65 78 20 6e 61 6d 65 64 20 74 65  n index named te
0d80: 73 74 33 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 61  st3}}.do_test ta
0d90: 62 6c 65 2d 32 2e 32 62 20 7b 0a 20 20 64 62 20  ble-2.2b {.  db 
0da0: 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 20  close.  sqlite3 
0db0: 64 62 20 74 65 73 74 2e 64 62 0a 20 20 73 65 74  db test.db.  set
0dc0: 20 76 20 5b 63 61 74 63 68 20 7b 65 78 65 63 73   v [catch {execs
0dd0: 71 6c 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45  ql {CREATE TABLE
0de0: 20 74 65 73 74 33 28 74 77 6f 20 74 65 78 74 29   test3(two text)
0df0: 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e  }} msg].  lappen
0e00: 64 20 76 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 74  d v $msg.} {1 {t
0e10: 68 65 72 65 20 69 73 20 61 6c 72 65 61 64 79 20  here is already 
0e20: 61 6e 20 69 6e 64 65 78 20 6e 61 6d 65 64 20 74  an index named t
0e30: 65 73 74 33 7d 7d 0a 64 6f 5f 74 65 73 74 20 74  est3}}.do_test t
0e40: 61 62 6c 65 2d 32 2e 32 63 20 7b 0a 20 20 65 78  able-2.2c {.  ex
0e50: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61  ecsql {SELECT na
0e60: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  me FROM sqlite_m
0e70: 61 73 74 65 72 20 57 48 45 52 45 20 74 79 70 65  aster WHERE type
0e80: 21 3d 27 6d 65 74 61 27 20 4f 52 44 45 52 20 42  !='meta' ORDER B
0e90: 59 20 6e 61 6d 65 7d 0a 7d 20 7b 74 65 73 74 32  Y name}.} {test2
0ea0: 20 74 65 73 74 33 7d 0a 64 6f 5f 74 65 73 74 20   test3}.do_test 
0eb0: 74 61 62 6c 65 2d 32 2e 32 64 20 7b 0a 20 20 65  table-2.2d {.  e
0ec0: 78 65 63 73 71 6c 20 7b 44 52 4f 50 20 49 4e 44  xecsql {DROP IND
0ed0: 45 58 20 74 65 73 74 33 7d 0a 20 20 73 65 74 20  EX test3}.  set 
0ee0: 76 20 5b 63 61 74 63 68 20 7b 65 78 65 63 73 71  v [catch {execsq
0ef0: 6c 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20  l {CREATE TABLE 
0f00: 74 65 73 74 33 28 74 77 6f 20 74 65 78 74 29 7d  test3(two text)}
0f10: 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64  } msg].  lappend
0f20: 20 76 20 24 6d 73 67 0a 7d 20 7b 30 20 7b 7d 7d   v $msg.} {0 {}}
0f30: 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 32  .do_test table-2
0f40: 2e 32 65 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .2e {.  execsql 
0f50: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
0f60: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  M sqlite_master 
0f70: 57 48 45 52 45 20 74 79 70 65 21 3d 27 6d 65 74  WHERE type!='met
0f80: 61 27 20 4f 52 44 45 52 20 42 59 20 6e 61 6d 65  a' ORDER BY name
0f90: 7d 0a 7d 20 7b 74 65 73 74 32 20 74 65 73 74 33  }.} {test2 test3
0fa0: 7d 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d  }.do_test table-
0fb0: 32 2e 32 66 20 7b 0a 20 20 65 78 65 63 73 71 6c  2.2f {.  execsql
0fc0: 20 7b 44 52 4f 50 20 54 41 42 4c 45 20 74 65 73   {DROP TABLE tes
0fd0: 74 32 3b 20 44 52 4f 50 20 54 41 42 4c 45 20 74  t2; DROP TABLE t
0fe0: 65 73 74 33 7d 0a 20 20 65 78 65 63 73 71 6c 20  est3}.  execsql 
0ff0: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
1000: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  M sqlite_master 
1010: 57 48 45 52 45 20 74 79 70 65 21 3d 27 6d 65 74  WHERE type!='met
1020: 61 27 20 4f 52 44 45 52 20 42 59 20 6e 61 6d 65  a' ORDER BY name
1030: 7d 0a 7d 20 7b 7d 0a 0a 23 20 43 72 65 61 74 65  }.} {}..# Create
1040: 20 61 20 74 61 62 6c 65 20 77 69 74 68 20 6d 61   a table with ma
1050: 6e 79 20 66 69 65 6c 64 20 6e 61 6d 65 73 0a 23  ny field names.#
1060: 0a 73 65 74 20 62 69 67 5f 74 61 62 6c 65 20 5c  .set big_table \
1070: 0a 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 62  .{CREATE TABLE b
1080: 69 67 28 0a 20 20 66 31 20 76 61 72 63 68 61 72  ig(.  f1 varchar
1090: 28 32 30 29 2c 0a 20 20 66 32 20 63 68 61 72 28  (20),.  f2 char(
10a0: 31 30 29 2c 0a 20 20 66 33 20 76 61 72 63 68 61  10),.  f3 varcha
10b0: 72 28 33 30 29 20 70 72 69 6d 61 72 79 20 6b 65  r(30) primary ke
10c0: 79 2c 0a 20 20 66 34 20 74 65 78 74 2c 0a 20 20  y,.  f4 text,.  
10d0: 66 35 20 74 65 78 74 2c 0a 20 20 66 36 20 74 65  f5 text,.  f6 te
10e0: 78 74 2c 0a 20 20 66 37 20 74 65 78 74 2c 0a 20  xt,.  f7 text,. 
10f0: 20 66 38 20 74 65 78 74 2c 0a 20 20 66 39 20 74   f8 text,.  f9 t
1100: 65 78 74 2c 0a 20 20 66 31 30 20 74 65 78 74 2c  ext,.  f10 text,
1110: 0a 20 20 66 31 31 20 74 65 78 74 2c 0a 20 20 66  .  f11 text,.  f
1120: 31 32 20 74 65 78 74 2c 0a 20 20 66 31 33 20 74  12 text,.  f13 t
1130: 65 78 74 2c 0a 20 20 66 31 34 20 74 65 78 74 2c  ext,.  f14 text,
1140: 0a 20 20 66 31 35 20 74 65 78 74 2c 0a 20 20 66  .  f15 text,.  f
1150: 31 36 20 74 65 78 74 2c 0a 20 20 66 31 37 20 74  16 text,.  f17 t
1160: 65 78 74 2c 0a 20 20 66 31 38 20 74 65 78 74 2c  ext,.  f18 text,
1170: 0a 20 20 66 31 39 20 74 65 78 74 2c 0a 20 20 66  .  f19 text,.  f
1180: 32 30 20 74 65 78 74 0a 29 7d 0a 64 6f 5f 74 65  20 text.)}.do_te
1190: 73 74 20 74 61 62 6c 65 2d 33 2e 31 20 7b 0a 20  st table-3.1 {. 
11a0: 20 65 78 65 63 73 71 6c 20 24 62 69 67 5f 74 61   execsql $big_ta
11b0: 62 6c 65 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  ble.  execsql {S
11c0: 45 4c 45 43 54 20 73 71 6c 20 46 52 4f 4d 20 73  ELECT sql FROM s
11d0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45  qlite_master WHE
11e0: 52 45 20 74 79 70 65 3d 3d 27 74 61 62 6c 65 27  RE type=='table'
11f0: 7d 0a 7d 20 5c 7b 24 62 69 67 5f 74 61 62 6c 65  }.} \{$big_table
1200: 5c 7d 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65  \}.do_test table
1210: 2d 33 2e 32 20 7b 0a 20 20 73 65 74 20 76 20 5b  -3.2 {.  set v [
1220: 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c 20 7b  catch {execsql {
1230: 43 52 45 41 54 45 20 54 41 42 4c 45 20 42 49 47  CREATE TABLE BIG
1240: 28 78 79 7a 20 66 6f 6f 29 7d 7d 20 6d 73 67 5d  (xyz foo)}} msg]
1250: 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 24 6d 73  .  lappend v $ms
1260: 67 0a 7d 20 7b 31 20 7b 74 61 62 6c 65 20 42 49  g.} {1 {table BI
1270: 47 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 73  G already exists
1280: 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65  }}.do_test table
1290: 2d 33 2e 33 20 7b 0a 20 20 73 65 74 20 76 20 5b  -3.3 {.  set v [
12a0: 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c 20 7b  catch {execsql {
12b0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 62 69 47  CREATE TABLE biG
12c0: 28 78 79 7a 20 66 6f 6f 29 7d 7d 20 6d 73 67 5d  (xyz foo)}} msg]
12d0: 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 24 6d 73  .  lappend v $ms
12e0: 67 0a 7d 20 7b 31 20 7b 74 61 62 6c 65 20 62 69  g.} {1 {table bi
12f0: 47 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 73  G already exists
1300: 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65  }}.do_test table
1310: 2d 33 2e 34 20 7b 0a 20 20 73 65 74 20 76 20 5b  -3.4 {.  set v [
1320: 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c 20 7b  catch {execsql {
1330: 43 52 45 41 54 45 20 54 41 42 4c 45 20 62 49 67  CREATE TABLE bIg
1340: 28 78 79 7a 20 66 6f 6f 29 7d 7d 20 6d 73 67 5d  (xyz foo)}} msg]
1350: 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 24 6d 73  .  lappend v $ms
1360: 67 0a 7d 20 7b 31 20 7b 74 61 62 6c 65 20 62 49  g.} {1 {table bI
1370: 67 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 73  g already exists
1380: 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65  }}.do_test table
1390: 2d 33 2e 35 20 7b 0a 20 20 64 62 20 63 6c 6f 73  -3.5 {.  db clos
13a0: 65 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20 74  e.  sqlite3 db t
13b0: 65 73 74 2e 64 62 0a 20 20 73 65 74 20 76 20 5b  est.db.  set v [
13c0: 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c 20 7b  catch {execsql {
13d0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 42 69 67  CREATE TABLE Big
13e0: 28 78 79 7a 20 66 6f 6f 29 7d 7d 20 6d 73 67 5d  (xyz foo)}} msg]
13f0: 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 24 6d 73  .  lappend v $ms
1400: 67 0a 7d 20 7b 31 20 7b 74 61 62 6c 65 20 42 69  g.} {1 {table Bi
1410: 67 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 73  g already exists
1420: 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65  }}.do_test table
1430: 2d 33 2e 36 20 7b 0a 20 20 65 78 65 63 73 71 6c  -3.6 {.  execsql
1440: 20 7b 44 52 4f 50 20 54 41 42 4c 45 20 62 69 67   {DROP TABLE big
1450: 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  }.  execsql {SEL
1460: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
1470: 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52  lite_master WHER
1480: 45 20 74 79 70 65 21 3d 27 6d 65 74 61 27 7d 0a  E type!='meta'}.
1490: 7d 20 7b 7d 0a 0a 23 20 54 72 79 20 63 72 65 61  } {}..# Try crea
14a0: 74 69 6e 67 20 6c 61 72 67 65 20 6e 75 6d 62 65  ting large numbe
14b0: 72 73 20 6f 66 20 74 61 62 6c 65 73 0a 23 0a 73  rs of tables.#.s
14c0: 65 74 20 72 20 7b 7d 0a 66 6f 72 20 7b 73 65 74  et r {}.for {set
14d0: 20 69 20 31 7d 20 7b 24 69 3c 3d 31 30 30 7d 20   i 1} {$i<=100} 
14e0: 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20 6c 61 70  {incr i} {.  lap
14f0: 70 65 6e 64 20 72 20 5b 66 6f 72 6d 61 74 20 74  pend r [format t
1500: 65 73 74 25 30 33 64 20 24 69 5d 0a 7d 0a 64 6f  est%03d $i].}.do
1510: 5f 74 65 73 74 20 74 61 62 6c 65 2d 34 2e 31 20  _test table-4.1 
1520: 7b 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 20 31  {.  for {set i 1
1530: 7d 20 7b 24 69 3c 3d 31 30 30 7d 20 7b 69 6e 63  } {$i<=100} {inc
1540: 72 20 69 7d 20 7b 0a 20 20 20 20 73 65 74 20 73  r i} {.    set s
1550: 71 6c 20 22 43 52 45 41 54 45 20 54 41 42 4c 45  ql "CREATE TABLE
1560: 20 5b 66 6f 72 6d 61 74 20 74 65 73 74 25 30 33   [format test%03
1570: 64 20 24 69 5d 20 28 22 0a 20 20 20 20 66 6f 72  d $i] (".    for
1580: 20 7b 73 65 74 20 6b 20 31 7d 20 7b 24 6b 3c 24   {set k 1} {$k<$
1590: 69 7d 20 7b 69 6e 63 72 20 6b 7d 20 7b 0a 20 20  i} {incr k} {.  
15a0: 20 20 20 20 61 70 70 65 6e 64 20 73 71 6c 20 22      append sql "
15b0: 66 69 65 6c 64 24 6b 20 74 65 78 74 2c 22 0a 20  field$k text,". 
15c0: 20 20 20 7d 0a 20 20 20 20 61 70 70 65 6e 64 20     }.    append 
15d0: 73 71 6c 20 22 6c 61 73 74 5f 66 69 65 6c 64 20  sql "last_field 
15e0: 74 65 78 74 29 22 0a 20 20 20 20 65 78 65 63 73  text)".    execs
15f0: 71 6c 20 24 73 71 6c 0a 20 20 7d 0a 20 20 65 78  ql $sql.  }.  ex
1600: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61  ecsql {SELECT na
1610: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  me FROM sqlite_m
1620: 61 73 74 65 72 20 57 48 45 52 45 20 74 79 70 65  aster WHERE type
1630: 21 3d 27 6d 65 74 61 27 20 4f 52 44 45 52 20 42  !='meta' ORDER B
1640: 59 20 6e 61 6d 65 7d 0a 7d 20 24 72 0a 64 6f 5f  Y name}.} $r.do_
1650: 74 65 73 74 20 74 61 62 6c 65 2d 34 2e 31 62 20  test table-4.1b 
1660: 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 73  {.  db close.  s
1670: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
1680: 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  b.  execsql {SEL
1690: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
16a0: 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52  lite_master WHER
16b0: 45 20 74 79 70 65 21 3d 27 6d 65 74 61 27 20 4f  E type!='meta' O
16c0: 52 44 45 52 20 42 59 20 6e 61 6d 65 7d 0a 7d 20  RDER BY name}.} 
16d0: 24 72 0a 0a 23 20 44 72 6f 70 20 74 68 65 20 65  $r..# Drop the e
16e0: 76 65 6e 20 6e 75 6d 62 65 72 65 64 20 74 61 62  ven numbered tab
16f0: 6c 65 73 0a 23 0a 73 65 74 20 72 20 7b 7d 0a 66  les.#.set r {}.f
1700: 6f 72 20 7b 73 65 74 20 69 20 31 7d 20 7b 24 69  or {set i 1} {$i
1710: 3c 3d 31 30 30 7d 20 7b 69 6e 63 72 20 69 20 32  <=100} {incr i 2
1720: 7d 20 7b 0a 20 20 6c 61 70 70 65 6e 64 20 72 20  } {.  lappend r 
1730: 5b 66 6f 72 6d 61 74 20 74 65 73 74 25 30 33 64  [format test%03d
1740: 20 24 69 5d 0a 7d 0a 64 6f 5f 74 65 73 74 20 74   $i].}.do_test t
1750: 61 62 6c 65 2d 34 2e 32 20 7b 0a 20 20 66 6f 72  able-4.2 {.  for
1760: 20 7b 73 65 74 20 69 20 32 7d 20 7b 24 69 3c 3d   {set i 2} {$i<=
1770: 31 30 30 7d 20 7b 69 6e 63 72 20 69 20 32 7d 20  100} {incr i 2} 
1780: 7b 0a 20 20 20 20 23 20 69 66 20 7b 24 69 3d 3d  {.    # if {$i==
1790: 33 38 7d 20 7b 65 78 65 63 73 71 6c 20 7b 70 72  38} {execsql {pr
17a0: 61 67 6d 61 20 76 64 62 65 5f 74 72 61 63 65 3d  agma vdbe_trace=
17b0: 6f 6e 7d 7d 0a 20 20 20 20 73 65 74 20 73 71 6c  on}}.    set sql
17c0: 20 22 44 52 4f 50 20 54 41 42 4c 45 20 5b 66 6f   "DROP TABLE [fo
17d0: 72 6d 61 74 20 54 45 53 54 25 30 33 64 20 24 69  rmat TEST%03d $i
17e0: 5d 22 0a 20 20 20 20 65 78 65 63 73 71 6c 20 24  ]".    execsql $
17f0: 73 71 6c 0a 20 20 7d 0a 20 20 65 78 65 63 73 71  sql.  }.  execsq
1800: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
1810: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
1820: 72 20 57 48 45 52 45 20 74 79 70 65 21 3d 27 6d  r WHERE type!='m
1830: 65 74 61 27 20 4f 52 44 45 52 20 42 59 20 6e 61  eta' ORDER BY na
1840: 6d 65 7d 0a 7d 20 24 72 0a 23 65 78 69 74 0a 0a  me}.} $r.#exit..
1850: 23 20 44 72 6f 70 20 74 68 65 20 6f 64 64 20 6e  # Drop the odd n
1860: 75 6d 62 65 72 20 74 61 62 6c 65 73 0a 23 0a 64  umber tables.#.d
1870: 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 34 2e 33  o_test table-4.3
1880: 20 7b 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 20   {.  for {set i 
1890: 31 7d 20 7b 24 69 3c 3d 31 30 30 7d 20 7b 69 6e  1} {$i<=100} {in
18a0: 63 72 20 69 20 32 7d 20 7b 0a 20 20 20 20 73 65  cr i 2} {.    se
18b0: 74 20 73 71 6c 20 22 44 52 4f 50 20 54 41 42 4c  t sql "DROP TABL
18c0: 45 20 5b 66 6f 72 6d 61 74 20 74 65 73 74 25 30  E [format test%0
18d0: 33 64 20 24 69 5d 22 0a 20 20 20 20 65 78 65 63  3d $i]".    exec
18e0: 73 71 6c 20 24 73 71 6c 0a 20 20 7d 0a 20 20 65  sql $sql.  }.  e
18f0: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
1900: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
1910: 6d 61 73 74 65 72 20 57 48 45 52 45 20 74 79 70  master WHERE typ
1920: 65 21 3d 27 6d 65 74 61 27 20 4f 52 44 45 52 20  e!='meta' ORDER 
1930: 42 59 20 6e 61 6d 65 7d 0a 7d 20 7b 7d 0a 0a 23  BY name}.} {}..#
1940: 20 54 72 79 20 74 6f 20 64 72 6f 70 20 61 20 74   Try to drop a t
1950: 61 62 6c 65 20 74 68 61 74 20 64 6f 65 73 20 6e  able that does n
1960: 6f 74 20 65 78 69 73 74 0a 23 0a 64 6f 5f 74 65  ot exist.#.do_te
1970: 73 74 20 74 61 62 6c 65 2d 35 2e 31 2e 31 20 7b  st table-5.1.1 {
1980: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f  .  catchsql {DRO
1990: 50 20 54 41 42 4c 45 20 74 65 73 74 30 30 39 7d  P TABLE test009}
19a0: 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20 74  .} {1 {no such t
19b0: 61 62 6c 65 3a 20 74 65 73 74 30 30 39 7d 7d 0a  able: test009}}.
19c0: 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 35 2e  do_test table-5.
19d0: 31 2e 32 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  1.2 {.  catchsql
19e0: 20 7b 44 52 4f 50 20 54 41 42 4c 45 20 49 46 20   {DROP TABLE IF 
19f0: 45 58 49 53 54 53 20 74 65 73 74 30 30 39 7d 0a  EXISTS test009}.
1a00: 7d 20 7b 30 20 7b 7d 7d 0a 0a 23 20 54 72 79 20  } {0 {}}..# Try 
1a10: 74 6f 20 64 72 6f 70 20 73 71 6c 69 74 65 5f 6d  to drop sqlite_m
1a20: 61 73 74 65 72 0a 23 0a 64 6f 5f 74 65 73 74 20  aster.#.do_test 
1a30: 74 61 62 6c 65 2d 35 2e 32 20 7b 0a 20 20 63 61  table-5.2 {.  ca
1a40: 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54 41 42  tchsql {DROP TAB
1a50: 4c 45 20 49 46 20 45 58 49 53 54 53 20 73 71 6c  LE IF EXISTS sql
1a60: 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 31  ite_master}.} {1
1a70: 20 7b 74 61 62 6c 65 20 73 71 6c 69 74 65 5f 6d   {table sqlite_m
1a80: 61 73 74 65 72 20 6d 61 79 20 6e 6f 74 20 62 65  aster may not be
1a90: 20 64 72 6f 70 70 65 64 7d 7d 0a 0a 23 20 44 72   dropped}}..# Dr
1aa0: 6f 70 70 69 6e 67 20 73 71 6c 69 74 65 5f 73 74  opping sqlite_st
1ab0: 61 74 4e 20 74 61 62 6c 65 73 20 69 73 20 4f 4b  atN tables is OK
1ac0: 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c  ..#.do_test tabl
1ad0: 65 2d 35 2e 32 2e 31 20 7b 0a 20 20 64 62 20 65  e-5.2.1 {.  db e
1ae0: 76 61 6c 20 7b 0a 20 20 20 20 41 4e 41 4c 59 5a  val {.    ANALYZ
1af0: 45 3b 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c  E;.    DROP TABL
1b00: 45 20 49 46 20 45 58 49 53 54 53 20 73 71 6c 69  E IF EXISTS sqli
1b10: 74 65 5f 73 74 61 74 31 3b 0a 20 20 20 20 44 52  te_stat1;.    DR
1b20: 4f 50 20 54 41 42 4c 45 20 49 46 20 45 58 49 53  OP TABLE IF EXIS
1b30: 54 53 20 73 71 6c 69 74 65 5f 73 74 61 74 32 3b  TS sqlite_stat2;
1b40: 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20  .    DROP TABLE 
1b50: 49 46 20 45 58 49 53 54 53 20 73 71 6c 69 74 65  IF EXISTS sqlite
1b60: 5f 73 74 61 74 33 3b 0a 20 20 20 20 44 52 4f 50  _stat3;.    DROP
1b70: 20 54 41 42 4c 45 20 49 46 20 45 58 49 53 54 53   TABLE IF EXISTS
1b80: 20 73 71 6c 69 74 65 5f 73 74 61 74 34 3b 0a 20   sqlite_stat4;. 
1b90: 20 20 20 53 45 4c 45 43 54 20 6e 61 6d 65 20 46     SELECT name F
1ba0: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
1bb0: 72 20 57 48 45 52 45 20 6e 61 6d 65 20 47 4c 4f  r WHERE name GLO
1bc0: 42 20 27 73 71 6c 69 74 65 5f 73 74 61 74 2a 27  B 'sqlite_stat*'
1bd0: 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 23 20 4d 61  ;.  }.} {}..# Ma
1be0: 6b 65 20 73 75 72 65 20 61 6e 20 45 58 50 4c 41  ke sure an EXPLA
1bf0: 49 4e 20 64 6f 65 73 20 6e 6f 74 20 72 65 61 6c  IN does not real
1c00: 6c 79 20 63 72 65 61 74 65 20 61 20 6e 65 77 20  ly create a new 
1c10: 74 61 62 6c 65 0a 23 0a 64 6f 5f 74 65 73 74 20  table.#.do_test 
1c20: 74 61 62 6c 65 2d 35 2e 33 20 7b 0a 20 20 69 66  table-5.3 {.  if
1c30: 63 61 70 61 62 6c 65 20 7b 65 78 70 6c 61 69 6e  capable {explain
1c40: 7d 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  } {.    execsql 
1c50: 7b 45 58 50 4c 41 49 4e 20 43 52 45 41 54 45 20  {EXPLAIN CREATE 
1c60: 54 41 42 4c 45 20 74 65 73 74 31 28 66 31 20 69  TABLE test1(f1 i
1c70: 6e 74 29 7d 0a 20 20 7d 0a 20 20 65 78 65 63 73  nt)}.  }.  execs
1c80: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
1c90: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
1ca0: 65 72 20 57 48 45 52 45 20 74 79 70 65 21 3d 27  er WHERE type!='
1cb0: 6d 65 74 61 27 7d 0a 7d 20 7b 7d 0a 0a 23 20 4d  meta'}.} {}..# M
1cc0: 61 6b 65 20 73 75 72 65 20 61 6e 20 45 58 50 4c  ake sure an EXPL
1cd0: 41 49 4e 20 64 6f 65 73 20 6e 6f 74 20 72 65 61  AIN does not rea
1ce0: 6c 6c 79 20 64 72 6f 70 20 61 6e 20 65 78 69 73  lly drop an exis
1cf0: 74 69 6e 67 20 74 61 62 6c 65 0a 23 0a 64 6f 5f  ting table.#.do_
1d00: 74 65 73 74 20 74 61 62 6c 65 2d 35 2e 34 20 7b  test table-5.4 {
1d10: 0a 20 20 65 78 65 63 73 71 6c 20 7b 43 52 45 41  .  execsql {CREA
1d20: 54 45 20 54 41 42 4c 45 20 74 65 73 74 31 28 66  TE TABLE test1(f
1d30: 31 20 69 6e 74 29 7d 0a 20 20 69 66 63 61 70 61  1 int)}.  ifcapa
1d40: 62 6c 65 20 7b 65 78 70 6c 61 69 6e 7d 20 7b 0a  ble {explain} {.
1d50: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 45 58 50      execsql {EXP
1d60: 4c 41 49 4e 20 44 52 4f 50 20 54 41 42 4c 45 20  LAIN DROP TABLE 
1d70: 74 65 73 74 31 7d 0a 20 20 7d 0a 20 20 65 78 65  test1}.  }.  exe
1d80: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d  csql {SELECT nam
1d90: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  e FROM sqlite_ma
1da0: 73 74 65 72 20 57 48 45 52 45 20 74 79 70 65 21  ster WHERE type!
1db0: 3d 27 6d 65 74 61 27 7d 0a 7d 20 7b 74 65 73 74  ='meta'}.} {test
1dc0: 31 7d 0a 0a 23 20 43 72 65 61 74 65 20 61 20 74  1}..# Create a t
1dd0: 61 62 6c 65 20 77 69 74 68 20 61 20 67 6f 6f 66  able with a goof
1de0: 79 20 6e 61 6d 65 0a 23 0a 23 64 6f 5f 74 65 73  y name.#.#do_tes
1df0: 74 20 74 61 62 6c 65 2d 36 2e 31 20 7b 0a 23 20  t table-6.1 {.# 
1e00: 20 65 78 65 63 73 71 6c 20 7b 43 52 45 41 54 45   execsql {CREATE
1e10: 20 54 41 42 4c 45 20 27 53 70 61 63 65 73 20 49   TABLE 'Spaces I
1e20: 6e 20 54 68 69 73 20 4e 61 6d 65 21 27 28 78 20  n This Name!'(x 
1e30: 69 6e 74 29 7d 0a 23 20 20 65 78 65 63 73 71 6c  int)}.#  execsql
1e40: 20 7b 49 4e 53 45 52 54 20 49 4e 54 4f 20 27 73   {INSERT INTO 's
1e50: 70 61 63 65 73 20 69 6e 20 74 68 69 73 20 6e 61  paces in this na
1e60: 6d 65 21 27 20 56 41 4c 55 45 53 28 31 29 7d 0a  me!' VALUES(1)}.
1e70: 23 20 20 73 65 74 20 6c 69 73 74 20 5b 67 6c 6f  #  set list [glo
1e80: 62 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 74 65  b -nocomplain te
1e90: 73 74 64 62 2f 73 70 61 63 65 73 2a 2e 74 62 6c  stdb/spaces*.tbl
1ea0: 5d 0a 23 7d 20 7b 74 65 73 74 64 62 2f 73 70 61  ].#} {testdb/spa
1eb0: 63 65 73 2b 69 6e 2b 74 68 69 73 2b 6e 61 6d 65  ces+in+this+name
1ec0: 2b 2e 74 62 6c 7d 0a 0a 23 20 54 72 79 20 75 73  +.tbl}..# Try us
1ed0: 69 6e 67 20 6b 65 79 77 6f 72 64 73 20 61 73 20  ing keywords as 
1ee0: 74 61 62 6c 65 20 6e 61 6d 65 73 20 6f 72 20 63  table names or c
1ef0: 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2e 0a 23 20 0a  olumn names..# .
1f00: 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 37 2e  do_test table-7.
1f10: 31 20 7b 0a 20 20 73 65 74 20 76 20 5b 63 61 74  1 {.  set v [cat
1f20: 63 68 20 7b 65 78 65 63 73 71 6c 20 7b 0a 20 20  ch {execsql {.  
1f30: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 77    CREATE TABLE w
1f40: 65 69 72 64 28 0a 20 20 20 20 20 20 64 65 73 63  eird(.      desc
1f50: 20 74 65 78 74 2c 0a 20 20 20 20 20 20 61 73 63   text,.      asc
1f60: 20 74 65 78 74 2c 0a 20 20 20 20 20 20 6b 65 79   text,.      key
1f70: 20 69 6e 74 2c 0a 20 20 20 20 20 20 5b 31 34 5f   int,.      [14_
1f80: 76 61 63 5d 20 62 6f 6f 6c 65 61 6e 2c 0a 20 20  vac] boolean,.  
1f90: 20 20 20 20 66 75 7a 7a 79 5f 64 6f 67 5f 31 32      fuzzy_dog_12
1fa0: 20 76 61 72 63 68 61 72 28 31 30 29 2c 0a 20 20   varchar(10),.  
1fb0: 20 20 20 20 62 65 67 69 6e 20 62 6c 6f 62 2c 0a      begin blob,.
1fc0: 20 20 20 20 20 20 65 6e 64 20 63 6c 6f 62 0a 20        end clob. 
1fd0: 20 20 20 29 0a 20 20 7d 7d 20 6d 73 67 5d 0a 20     ).  }} msg]. 
1fe0: 20 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a   lappend v $msg.
1ff0: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
2000: 20 74 61 62 6c 65 2d 37 2e 32 20 7b 0a 20 20 65   table-7.2 {.  e
2010: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53  xecsql {.    INS
2020: 45 52 54 20 49 4e 54 4f 20 77 65 69 72 64 20 56  ERT INTO weird V
2030: 41 4c 55 45 53 28 27 61 27 2c 27 62 27 2c 39 2c  ALUES('a','b',9,
2040: 30 2c 27 78 79 7a 27 2c 27 68 69 27 2c 27 79 27  0,'xyz','hi','y'
2050: 27 61 6c 6c 27 29 3b 0a 20 20 20 20 53 45 4c 45  'all');.    SELE
2060: 43 54 20 2a 20 46 52 4f 4d 20 77 65 69 72 64 3b  CT * FROM weird;
2070: 0a 20 20 7d 0a 7d 20 7b 61 20 62 20 39 20 30 20  .  }.} {a b 9 0 
2080: 78 79 7a 20 68 69 20 79 27 61 6c 6c 7d 0a 64 6f  xyz hi y'all}.do
2090: 5f 74 65 73 74 20 74 61 62 6c 65 2d 37 2e 33 20  _test table-7.3 
20a0: 7b 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 0a 20  {.  execsql2 {. 
20b0: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
20c0: 20 77 65 69 72 64 3b 0a 20 20 7d 0a 7d 20 7b 64   weird;.  }.} {d
20d0: 65 73 63 20 61 20 61 73 63 20 62 20 6b 65 79 20  esc a asc b key 
20e0: 39 20 31 34 5f 76 61 63 20 30 20 66 75 7a 7a 79  9 14_vac 0 fuzzy
20f0: 5f 64 6f 67 5f 31 32 20 78 79 7a 20 62 65 67 69  _dog_12 xyz begi
2100: 6e 20 68 69 20 65 6e 64 20 79 27 61 6c 6c 7d 0a  n hi end y'all}.
2110: 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 37 2e  do_test table-7.
2120: 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  3 {.  execsql {.
2130: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
2140: 20 73 61 76 65 70 6f 69 6e 74 28 72 65 6c 65 61   savepoint(relea
2150: 73 65 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  se);.    INSERT 
2160: 49 4e 54 4f 20 73 61 76 65 70 6f 69 6e 74 28 72  INTO savepoint(r
2170: 65 6c 65 61 73 65 29 20 56 41 4c 55 45 53 28 31  elease) VALUES(1
2180: 30 29 3b 0a 20 20 20 20 55 50 44 41 54 45 20 73  0);.    UPDATE s
2190: 61 76 65 70 6f 69 6e 74 20 53 45 54 20 72 65 6c  avepoint SET rel
21a0: 65 61 73 65 20 3d 20 35 3b 0a 20 20 20 20 53 45  ease = 5;.    SE
21b0: 4c 45 43 54 20 72 65 6c 65 61 73 65 20 46 52 4f  LECT release FRO
21c0: 4d 20 73 61 76 65 70 6f 69 6e 74 3b 0a 20 20 7d  M savepoint;.  }
21d0: 0a 7d 20 7b 35 7d 0a 0a 23 20 54 72 79 20 6f 75  .} {5}..# Try ou
21e0: 74 20 74 68 65 20 43 52 45 41 54 45 20 54 41 42  t the CREATE TAB
21f0: 4c 45 20 41 53 20 73 79 6e 74 61 78 0a 23 0a 64  LE AS syntax.#.d
2200: 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 38 2e 31  o_test table-8.1
2210: 20 7b 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 0a   {.  execsql2 {.
2220: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
2230: 20 74 32 20 41 53 20 53 45 4c 45 43 54 20 2a 20   t2 AS SELECT * 
2240: 46 52 4f 4d 20 77 65 69 72 64 3b 0a 20 20 20 20  FROM weird;.    
2250: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32  SELECT * FROM t2
2260: 3b 0a 20 20 7d 0a 7d 20 7b 64 65 73 63 20 61 20  ;.  }.} {desc a 
2270: 61 73 63 20 62 20 6b 65 79 20 39 20 31 34 5f 76  asc b key 9 14_v
2280: 61 63 20 30 20 66 75 7a 7a 79 5f 64 6f 67 5f 31  ac 0 fuzzy_dog_1
2290: 32 20 78 79 7a 20 62 65 67 69 6e 20 68 69 20 65  2 xyz begin hi e
22a0: 6e 64 20 79 27 61 6c 6c 7d 0a 64 6f 5f 74 65 73  nd y'all}.do_tes
22b0: 74 20 74 61 62 6c 65 2d 38 2e 31 2e 31 20 7b 0a  t table-8.1.1 {.
22c0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
22d0: 53 45 4c 45 43 54 20 73 71 6c 20 46 52 4f 4d 20  SELECT sql FROM 
22e0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48  sqlite_master WH
22f0: 45 52 45 20 6e 61 6d 65 3d 27 74 32 27 3b 0a 20  ERE name='t2';. 
2300: 20 7d 0a 7d 20 7b 7b 43 52 45 41 54 45 20 54 41   }.} {{CREATE TA
2310: 42 4c 45 20 74 32 28 0a 20 20 22 64 65 73 63 22  BLE t2(.  "desc"
2320: 20 54 45 58 54 2c 0a 20 20 22 61 73 63 22 20 54   TEXT,.  "asc" T
2330: 45 58 54 2c 0a 20 20 22 6b 65 79 22 20 49 4e 54  EXT,.  "key" INT
2340: 2c 0a 20 20 22 31 34 5f 76 61 63 22 20 4e 55 4d  ,.  "14_vac" NUM
2350: 2c 0a 20 20 66 75 7a 7a 79 5f 64 6f 67 5f 31 32  ,.  fuzzy_dog_12
2360: 20 54 45 58 54 2c 0a 20 20 22 62 65 67 69 6e 22   TEXT,.  "begin"
2370: 2c 0a 20 20 22 65 6e 64 22 20 54 45 58 54 0a 29  ,.  "end" TEXT.)
2380: 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65  }}.do_test table
2390: 2d 38 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  -8.2 {.  execsql
23a0: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41   {.    CREATE TA
23b0: 42 4c 45 20 22 74 33 22 22 78 79 7a 22 28 61 2c  BLE "t3""xyz"(a,
23c0: 62 2c 63 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  b,c);.    INSERT
23d0: 20 49 4e 54 4f 20 5b 74 33 22 78 79 7a 5d 20 56   INTO [t3"xyz] V
23e0: 41 4c 55 45 53 28 31 2c 32 2c 33 29 3b 0a 20 20  ALUES(1,2,3);.  
23f0: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
2400: 5b 74 33 22 78 79 7a 5d 3b 0a 20 20 7d 0a 7d 20  [t3"xyz];.  }.} 
2410: 7b 31 20 32 20 33 7d 0a 64 6f 5f 74 65 73 74 20  {1 2 3}.do_test 
2420: 74 61 62 6c 65 2d 38 2e 33 20 7b 0a 20 20 65 78  table-8.3 {.  ex
2430: 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 43 52 45  ecsql2 {.    CRE
2440: 41 54 45 20 54 41 42 4c 45 20 5b 74 34 22 61 62  ATE TABLE [t4"ab
2450: 63 5d 20 41 53 20 53 45 4c 45 43 54 20 63 6f 75  c] AS SELECT cou
2460: 6e 74 28 2a 29 20 61 73 20 63 6e 74 2c 20 6d 61  nt(*) as cnt, ma
2470: 78 28 62 2b 63 29 20 46 52 4f 4d 20 5b 74 33 22  x(b+c) FROM [t3"
2480: 78 79 7a 5d 3b 0a 20 20 20 20 53 45 4c 45 43 54  xyz];.    SELECT
2490: 20 2a 20 46 52 4f 4d 20 5b 74 34 22 61 62 63 5d   * FROM [t4"abc]
24a0: 3b 0a 20 20 7d 0a 7d 20 7b 63 6e 74 20 31 20 6d  ;.  }.} {cnt 1 m
24b0: 61 78 28 62 2b 63 29 20 35 7d 0a 0a 23 20 55 70  ax(b+c) 5}..# Up
24c0: 64 61 74 65 20 66 6f 72 20 76 33 3a 20 54 68 65  date for v3: The
24d0: 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 74 79 70   declaration typ
24e0: 65 20 6f 66 20 61 6e 79 74 68 69 6e 67 20 65 78  e of anything ex
24f0: 63 65 70 74 20 61 20 63 6f 6c 75 6d 6e 20 69 73  cept a column is
2500: 20 6e 6f 77 20 61 0a 23 20 4e 55 4c 4c 20 70 6f   now a.# NULL po
2510: 69 6e 74 65 72 2c 20 73 6f 20 74 68 65 20 63 72  inter, so the cr
2520: 65 61 74 65 64 20 74 61 62 6c 65 20 68 61 73 20  eated table has 
2530: 6e 6f 20 63 6f 6c 75 6d 6e 20 74 79 70 65 73 2e  no column types.
2540: 20 28 43 68 61 6e 67 65 64 20 72 65 73 75 6c 74   (Changed result
2550: 0a 23 20 66 72 6f 6d 20 7b 7b 43 52 45 41 54 45  .# from {{CREATE
2560: 20 54 41 42 4c 45 20 27 74 34 22 61 62 63 27 28   TABLE 't4"abc'(
2570: 63 6e 74 20 4e 55 4d 45 52 49 43 2c 22 6d 61 78  cnt NUMERIC,"max
2580: 28 62 2b 63 29 22 20 4e 55 4d 45 52 49 43 29 7d  (b+c)" NUMERIC)}
2590: 7d 29 2e 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c  })..do_test tabl
25a0: 65 2d 38 2e 33 2e 31 20 7b 0a 20 20 65 78 65 63  e-8.3.1 {.  exec
25b0: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
25c0: 20 73 71 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65   sql FROM sqlite
25d0: 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20 6e 61  _master WHERE na
25e0: 6d 65 3d 27 74 34 22 61 62 63 27 0a 20 20 7d 0a  me='t4"abc'.  }.
25f0: 7d 20 7b 7b 43 52 45 41 54 45 20 54 41 42 4c 45  } {{CREATE TABLE
2600: 20 22 74 34 22 22 61 62 63 22 28 63 6e 74 2c 22   "t4""abc"(cnt,"
2610: 6d 61 78 28 62 2b 63 29 22 29 7d 7d 0a 0a 69 66  max(b+c)")}}..if
2620: 63 61 70 61 62 6c 65 20 74 65 6d 70 64 62 20 7b  capable tempdb {
2630: 0a 20 20 64 6f 5f 74 65 73 74 20 74 61 62 6c 65  .  do_test table
2640: 2d 38 2e 34 20 7b 0a 20 20 20 20 65 78 65 63 73  -8.4 {.    execs
2650: 71 6c 32 20 7b 0a 20 20 20 20 20 20 43 52 45 41  ql2 {.      CREA
2660: 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42  TE TEMPORARY TAB
2670: 4c 45 20 74 35 20 41 53 20 53 45 4c 45 43 54 20  LE t5 AS SELECT 
2680: 63 6f 75 6e 74 28 2a 29 20 41 53 20 5b 79 27 61  count(*) AS [y'a
2690: 6c 6c 5d 20 46 52 4f 4d 20 5b 74 33 22 78 79 7a  ll] FROM [t3"xyz
26a0: 5d 3b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20  ];.      SELECT 
26b0: 2a 20 46 52 4f 4d 20 74 35 3b 0a 20 20 20 20 7d  * FROM t5;.    }
26c0: 0a 20 20 7d 20 7b 79 27 61 6c 6c 20 31 7d 0a 7d  .  } {y'all 1}.}
26d0: 0a 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d  ..do_test table-
26e0: 38 2e 35 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65  8.5 {.  db close
26f0: 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65  .  sqlite3 db te
2700: 73 74 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 32  st.db.  execsql2
2710: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20   {.    SELECT * 
2720: 46 52 4f 4d 20 5b 74 34 22 61 62 63 5d 3b 0a 20  FROM [t4"abc];. 
2730: 20 7d 0a 7d 20 7b 63 6e 74 20 31 20 6d 61 78 28   }.} {cnt 1 max(
2740: 62 2b 63 29 20 35 7d 0a 64 6f 5f 74 65 73 74 20  b+c) 5}.do_test 
2750: 74 61 62 6c 65 2d 38 2e 36 20 7b 0a 20 20 65 78  table-8.6 {.  ex
2760: 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 53 45 4c  ecsql2 {.    SEL
2770: 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 3b 0a 20  ECT * FROM t2;. 
2780: 20 7d 0a 7d 20 7b 64 65 73 63 20 61 20 61 73 63   }.} {desc a asc
2790: 20 62 20 6b 65 79 20 39 20 31 34 5f 76 61 63 20   b key 9 14_vac 
27a0: 30 20 66 75 7a 7a 79 5f 64 6f 67 5f 31 32 20 78  0 fuzzy_dog_12 x
27b0: 79 7a 20 62 65 67 69 6e 20 68 69 20 65 6e 64 20  yz begin hi end 
27c0: 79 27 61 6c 6c 7d 0a 64 6f 5f 74 65 73 74 20 74  y'all}.do_test t
27d0: 61 62 6c 65 2d 38 2e 37 20 7b 0a 20 20 63 61 74  able-8.7 {.  cat
27e0: 63 68 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  chsql {.    SELE
27f0: 43 54 20 2a 20 46 52 4f 4d 20 74 35 3b 0a 20 20  CT * FROM t5;.  
2800: 7d 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20  }.} {1 {no such 
2810: 74 61 62 6c 65 3a 20 74 35 7d 7d 0a 64 6f 5f 74  table: t5}}.do_t
2820: 65 73 74 20 74 61 62 6c 65 2d 38 2e 38 20 7b 0a  est table-8.8 {.
2830: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
2840: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 35   CREATE TABLE t5
2850: 20 41 53 20 53 45 4c 45 43 54 20 2a 20 46 52 4f   AS SELECT * FRO
2860: 4d 20 6e 6f 5f 73 75 63 68 5f 74 61 62 6c 65 3b  M no_such_table;
2870: 0a 20 20 7d 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75  .  }.} {1 {no su
2880: 63 68 20 74 61 62 6c 65 3a 20 6e 6f 5f 73 75 63  ch table: no_suc
2890: 68 5f 74 61 62 6c 65 7d 7d 0a 0a 64 6f 5f 74 65  h_table}}..do_te
28a0: 73 74 20 74 61 62 6c 65 2d 38 2e 39 20 7b 0a 20  st table-8.9 {. 
28b0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43   execsql {.    C
28c0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 30 28  REATE TABLE t10(
28d0: 22 63 6f 6c 2e 31 22 20 5b 63 68 61 72 2e 33 5d  "col.1" [char.3]
28e0: 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41  );.    CREATE TA
28f0: 42 4c 45 20 74 31 31 20 41 53 20 53 45 4c 45 43  BLE t11 AS SELEC
2900: 54 20 2a 20 46 52 4f 4d 20 74 31 30 3b 0a 20 20  T * FROM t10;.  
2910: 20 20 53 45 4c 45 43 54 20 73 71 6c 20 46 52 4f    SELECT sql FRO
2920: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  M sqlite_master 
2930: 57 48 45 52 45 20 6e 61 6d 65 20 3d 20 27 74 31  WHERE name = 't1
2940: 31 27 3b 0a 20 20 7d 0a 7d 20 7b 7b 43 52 45 41  1';.  }.} {{CREA
2950: 54 45 20 54 41 42 4c 45 20 74 31 31 28 22 63 6f  TE TABLE t11("co
2960: 6c 2e 31 22 20 54 45 58 54 29 7d 7d 0a 64 6f 5f  l.1" TEXT)}}.do_
2970: 74 65 73 74 20 74 61 62 6c 65 2d 38 2e 31 30 20  test table-8.10 
2980: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
2990: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
29a0: 31 32 28 0a 20 20 20 20 20 20 61 20 49 4e 54 45  12(.      a INTE
29b0: 47 45 52 2c 0a 20 20 20 20 20 20 62 20 56 41 52  GER,.      b VAR
29c0: 43 48 41 52 28 31 30 29 2c 0a 20 20 20 20 20 20  CHAR(10),.      
29d0: 63 20 56 41 52 43 48 41 52 28 31 2c 31 30 29 2c  c VARCHAR(1,10),
29e0: 0a 20 20 20 20 20 20 64 20 56 41 52 43 48 41 52  .      d VARCHAR
29f0: 28 2b 31 2c 2d 31 30 29 2c 0a 20 20 20 20 20 20  (+1,-10),.      
2a00: 65 20 56 41 52 43 48 41 52 20 28 2b 31 2c 2d 31  e VARCHAR (+1,-1
2a10: 30 29 2c 0a 20 20 20 20 20 20 66 20 22 56 41 52  0),.      f "VAR
2a20: 43 48 41 52 20 28 2b 31 2c 2d 31 30 2c 20 35 29  CHAR (+1,-10, 5)
2a30: 22 2c 0a 20 20 20 20 20 20 67 20 42 49 47 20 49  ",.      g BIG I
2a40: 4e 54 45 47 45 52 0a 20 20 20 20 29 3b 0a 20 20  NTEGER.    );.  
2a50: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
2a60: 31 33 20 41 53 20 53 45 4c 45 43 54 20 2a 20 46  13 AS SELECT * F
2a70: 52 4f 4d 20 74 31 32 3b 0a 20 20 20 20 53 45 4c  ROM t12;.    SEL
2a80: 45 43 54 20 73 71 6c 20 46 52 4f 4d 20 73 71 6c  ECT sql FROM sql
2a90: 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45  ite_master WHERE
2aa0: 20 6e 61 6d 65 20 3d 20 27 74 31 33 27 3b 0a 20   name = 't13';. 
2ab0: 20 7d 0a 7d 20 7b 7b 43 52 45 41 54 45 20 54 41   }.} {{CREATE TA
2ac0: 42 4c 45 20 74 31 33 28 0a 20 20 61 20 49 4e 54  BLE t13(.  a INT
2ad0: 2c 0a 20 20 62 20 54 45 58 54 2c 0a 20 20 63 20  ,.  b TEXT,.  c 
2ae0: 54 45 58 54 2c 0a 20 20 64 20 54 45 58 54 2c 0a  TEXT,.  d TEXT,.
2af0: 20 20 65 20 54 45 58 54 2c 0a 20 20 66 20 54 45    e TEXT,.  f TE
2b00: 58 54 2c 0a 20 20 67 20 49 4e 54 0a 29 7d 7d 0a  XT,.  g INT.)}}.
2b10: 0a 23 20 4d 61 6b 65 20 73 75 72 65 20 77 65 20  .# Make sure we 
2b20: 63 61 6e 6e 6f 74 20 68 61 76 65 20 64 75 70 6c  cannot have dupl
2b30: 69 63 61 74 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d  icate column nam
2b40: 65 73 20 77 69 74 68 69 6e 20 61 20 74 61 62 6c  es within a tabl
2b50: 65 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 74 61 62  e..#.do_test tab
2b60: 6c 65 2d 39 2e 31 20 7b 0a 20 20 63 61 74 63 68  le-9.1 {.  catch
2b70: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
2b80: 20 54 41 42 4c 45 20 74 36 28 61 2c 62 2c 61 29   TABLE t6(a,b,a)
2b90: 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 64 75 70 6c  ;.  }.} {1 {dupl
2ba0: 69 63 61 74 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d  icate column nam
2bb0: 65 3a 20 61 7d 7d 0a 64 6f 5f 74 65 73 74 20 74  e: a}}.do_test t
2bc0: 61 62 6c 65 2d 39 2e 32 20 7b 0a 20 20 63 61 74  able-9.2 {.  cat
2bd0: 63 68 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41  chsql {.    CREA
2be0: 54 45 20 54 41 42 4c 45 20 74 36 28 61 20 76 61  TE TABLE t6(a va
2bf0: 72 63 68 61 72 28 31 30 30 29 2c 20 62 20 62 6c  rchar(100), b bl
2c00: 6f 62 2c 20 61 20 69 6e 74 65 67 65 72 29 3b 0a  ob, a integer);.
2c10: 20 20 7d 0a 7d 20 7b 31 20 7b 64 75 70 6c 69 63    }.} {1 {duplic
2c20: 61 74 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 3a  ate column name:
2c30: 20 61 7d 7d 0a 0a 23 20 43 68 65 63 6b 20 74 68   a}}..# Check th
2c40: 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 73 79  e foreign key sy
2c50: 6e 74 61 78 2e 0a 23 0a 69 66 63 61 70 61 62 6c  ntax..#.ifcapabl
2c60: 65 20 7b 66 6f 72 65 69 67 6e 6b 65 79 7d 20 7b  e {foreignkey} {
2c70: 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 31  .do_test table-1
2c80: 30 2e 31 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  0.1 {.  catchsql
2c90: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41   {.    CREATE TA
2ca0: 42 4c 45 20 74 36 28 61 20 52 45 46 45 52 45 4e  BLE t6(a REFEREN
2cb0: 43 45 53 20 74 34 28 61 29 20 4e 4f 54 20 4e 55  CES t4(a) NOT NU
2cc0: 4c 4c 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  LL);.    INSERT 
2cd0: 49 4e 54 4f 20 74 36 20 56 41 4c 55 45 53 28 4e  INTO t6 VALUES(N
2ce0: 55 4c 4c 29 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b  ULL);.  }.} {1 {
2cf0: 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61  NOT NULL constra
2d00: 69 6e 74 20 66 61 69 6c 65 64 3a 20 74 36 2e 61  int failed: t6.a
2d10: 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65  }}.do_test table
2d20: 2d 31 30 2e 32 20 7b 0a 20 20 63 61 74 63 68 73  -10.2 {.  catchs
2d30: 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20 54 41  ql {.    DROP TA
2d40: 42 4c 45 20 74 36 3b 0a 20 20 20 20 43 52 45 41  BLE t6;.    CREA
2d50: 54 45 20 54 41 42 4c 45 20 74 36 28 61 20 52 45  TE TABLE t6(a RE
2d60: 46 45 52 45 4e 43 45 53 20 74 34 28 61 29 20 4d  FERENCES t4(a) M
2d70: 41 54 43 48 20 50 41 52 54 49 41 4c 29 3b 0a 20  ATCH PARTIAL);. 
2d80: 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74   }.} {0 {}}.do_t
2d90: 65 73 74 20 74 61 62 6c 65 2d 31 30 2e 33 20 7b  est table-10.3 {
2da0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
2db0: 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74 36 3b    DROP TABLE t6;
2dc0: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
2dd0: 45 20 74 36 28 61 20 52 45 46 45 52 45 4e 43 45  E t6(a REFERENCE
2de0: 53 20 74 34 20 4d 41 54 43 48 20 46 55 4c 4c 20  S t4 MATCH FULL 
2df0: 4f 4e 20 44 45 4c 45 54 45 20 53 45 54 20 4e 55  ON DELETE SET NU
2e00: 4c 4c 20 4e 4f 54 20 4e 55 4c 4c 29 3b 0a 20 20  LL NOT NULL);.  
2e10: 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  }.} {0 {}}.do_te
2e20: 73 74 20 74 61 62 6c 65 2d 31 30 2e 34 20 7b 0a  st table-10.4 {.
2e30: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
2e40: 20 44 52 4f 50 20 54 41 42 4c 45 20 74 36 3b 0a   DROP TABLE t6;.
2e50: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
2e60: 20 74 36 28 61 20 52 45 46 45 52 45 4e 43 45 53   t6(a REFERENCES
2e70: 20 74 34 20 4d 41 54 43 48 20 46 55 4c 4c 20 4f   t4 MATCH FULL O
2e80: 4e 20 55 50 44 41 54 45 20 53 45 54 20 44 45 46  N UPDATE SET DEF
2e90: 41 55 4c 54 20 44 45 46 41 55 4c 54 20 31 29 3b  AULT DEFAULT 1);
2ea0: 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f  .  }.} {0 {}}.do
2eb0: 5f 74 65 73 74 20 74 61 62 6c 65 2d 31 30 2e 35  _test table-10.5
2ec0: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a   {.  catchsql {.
2ed0: 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74      DROP TABLE t
2ee0: 36 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41  6;.    CREATE TA
2ef0: 42 4c 45 20 74 36 28 61 20 4e 4f 54 20 4e 55 4c  BLE t6(a NOT NUL
2f00: 4c 20 4e 4f 54 20 44 45 46 45 52 52 41 42 4c 45  L NOT DEFERRABLE
2f10: 20 49 4e 49 54 49 41 4c 4c 59 20 49 4d 4d 45 44   INITIALLY IMMED
2f20: 49 41 54 45 29 3b 0a 20 20 7d 0a 7d 20 7b 30 20  IATE);.  }.} {0 
2f30: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c  {}}.do_test tabl
2f40: 65 2d 31 30 2e 36 20 7b 0a 20 20 63 61 74 63 68  e-10.6 {.  catch
2f50: 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20 54  sql {.    DROP T
2f60: 41 42 4c 45 20 74 36 3b 0a 20 20 20 20 43 52 45  ABLE t6;.    CRE
2f70: 41 54 45 20 54 41 42 4c 45 20 74 36 28 61 20 4e  ATE TABLE t6(a N
2f80: 4f 54 20 4e 55 4c 4c 20 44 45 46 45 52 52 41 42  OT NULL DEFERRAB
2f90: 4c 45 20 49 4e 49 54 49 41 4c 4c 59 20 44 45 46  LE INITIALLY DEF
2fa0: 45 52 52 45 44 29 3b 0a 20 20 7d 0a 7d 20 7b 30  ERRED);.  }.} {0
2fb0: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 61 62   {}}.do_test tab
2fc0: 6c 65 2d 31 30 2e 37 20 7b 0a 20 20 63 61 74 63  le-10.7 {.  catc
2fd0: 68 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20  hsql {.    DROP 
2fe0: 54 41 42 4c 45 20 74 36 3b 0a 20 20 20 20 43 52  TABLE t6;.    CR
2ff0: 45 41 54 45 20 54 41 42 4c 45 20 74 36 28 61 2c  EATE TABLE t6(a,
3000: 0a 20 20 20 20 20 20 46 4f 52 45 49 47 4e 20 4b  .      FOREIGN K
3010: 45 59 20 28 61 29 20 52 45 46 45 52 45 4e 43 45  EY (a) REFERENCE
3020: 53 20 74 34 28 62 29 20 44 45 46 45 52 52 41 42  S t4(b) DEFERRAB
3030: 4c 45 20 49 4e 49 54 49 41 4c 4c 59 20 44 45 46  LE INITIALLY DEF
3040: 45 52 52 45 44 0a 20 20 20 20 29 3b 0a 20 20 7d  ERRED.    );.  }
3050: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
3060: 74 20 74 61 62 6c 65 2d 31 30 2e 38 20 7b 0a 20  t table-10.8 {. 
3070: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
3080: 44 52 4f 50 20 54 41 42 4c 45 20 74 36 3b 0a 20  DROP TABLE t6;. 
3090: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
30a0: 74 36 28 61 2c 62 2c 63 2c 0a 20 20 20 20 20 20  t6(a,b,c,.      
30b0: 46 4f 52 45 49 47 4e 20 4b 45 59 20 28 62 2c 63  FOREIGN KEY (b,c
30c0: 29 20 52 45 46 45 52 45 4e 43 45 53 20 74 34 28  ) REFERENCES t4(
30d0: 78 2c 79 29 20 4d 41 54 43 48 20 50 41 52 54 49  x,y) MATCH PARTI
30e0: 41 4c 0a 20 20 20 20 20 20 20 20 4f 4e 20 55 50  AL.        ON UP
30f0: 44 41 54 45 20 53 45 54 20 4e 55 4c 4c 20 4f 4e  DATE SET NULL ON
3100: 20 44 45 4c 45 54 45 20 43 41 53 43 41 44 45 20   DELETE CASCADE 
3110: 44 45 46 45 52 52 41 42 4c 45 20 49 4e 49 54 49  DEFERRABLE INITI
3120: 41 4c 4c 59 20 44 45 46 45 52 52 45 44 0a 20 20  ALLY DEFERRED.  
3130: 20 20 29 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d    );.  }.} {0 {}
3140: 7d 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d  }.do_test table-
3150: 31 30 2e 39 20 7b 0a 20 20 63 61 74 63 68 73 71  10.9 {.  catchsq
3160: 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20 54 41 42  l {.    DROP TAB
3170: 4c 45 20 74 36 3b 0a 20 20 20 20 43 52 45 41 54  LE t6;.    CREAT
3180: 45 20 54 41 42 4c 45 20 74 36 28 61 2c 62 2c 63  E TABLE t6(a,b,c
3190: 2c 0a 20 20 20 20 20 20 46 4f 52 45 49 47 4e 20  ,.      FOREIGN 
31a0: 4b 45 59 20 28 62 2c 63 29 20 52 45 46 45 52 45  KEY (b,c) REFERE
31b0: 4e 43 45 53 20 74 34 28 78 29 0a 20 20 20 20 29  NCES t4(x).    )
31c0: 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 6e 75 6d 62  ;.  }.} {1 {numb
31d0: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
31e0: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 64 6f 65   foreign key doe
31f0: 73 20 6e 6f 74 20 6d 61 74 63 68 20 74 68 65 20  s not match the 
3200: 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
3210: 73 20 69 6e 20 74 68 65 20 72 65 66 65 72 65 6e  s in the referen
3220: 63 65 64 20 74 61 62 6c 65 7d 7d 0a 64 6f 5f 74  ced table}}.do_t
3230: 65 73 74 20 74 61 62 6c 65 2d 31 30 2e 31 30 20  est table-10.10 
3240: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52  {.  catchsql {DR
3250: 4f 50 20 54 41 42 4c 45 20 74 36 7d 0a 20 20 63  OP TABLE t6}.  c
3260: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 43 52  atchsql {.    CR
3270: 45 41 54 45 20 54 41 42 4c 45 20 74 36 28 61 2c  EATE TABLE t6(a,
3280: 62 2c 63 2c 0a 20 20 20 20 20 20 46 4f 52 45 49  b,c,.      FOREI
3290: 47 4e 20 4b 45 59 20 28 62 2c 63 29 20 52 45 46  GN KEY (b,c) REF
32a0: 45 52 45 4e 43 45 53 20 74 34 28 78 2c 79 2c 7a  ERENCES t4(x,y,z
32b0: 29 0a 20 20 20 20 29 3b 0a 20 20 7d 0a 7d 20 7b  ).    );.  }.} {
32c0: 31 20 7b 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  1 {number of col
32d0: 75 6d 6e 73 20 69 6e 20 66 6f 72 65 69 67 6e 20  umns in foreign 
32e0: 6b 65 79 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74  key does not mat
32f0: 63 68 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ch the number of
3300: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
3310: 72 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65  referenced table
3320: 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65  }}.do_test table
3330: 2d 31 30 2e 31 31 20 7b 0a 20 20 63 61 74 63 68  -10.11 {.  catch
3340: 73 71 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45 20  sql {DROP TABLE 
3350: 74 36 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  t6}.  catchsql {
3360: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
3370: 45 20 74 36 28 61 2c 62 2c 20 63 20 52 45 46 45  E t6(a,b, c REFE
3380: 52 45 4e 43 45 53 20 74 34 28 78 2c 79 29 29 3b  RENCES t4(x,y));
3390: 0a 20 20 7d 0a 7d 20 7b 31 20 7b 66 6f 72 65 69  .  }.} {1 {forei
33a0: 67 6e 20 6b 65 79 20 6f 6e 20 63 20 73 68 6f 75  gn key on c shou
33b0: 6c 64 20 72 65 66 65 72 65 6e 63 65 20 6f 6e 6c  ld reference onl
33c0: 79 20 6f 6e 65 20 63 6f 6c 75 6d 6e 20 6f 66 20  y one column of 
33d0: 74 61 62 6c 65 20 74 34 7d 7d 0a 64 6f 5f 74 65  table t4}}.do_te
33e0: 73 74 20 74 61 62 6c 65 2d 31 30 2e 31 32 20 7b  st table-10.12 {
33f0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 44 52 4f  .  catchsql {DRO
3400: 50 20 54 41 42 4c 45 20 74 36 7d 0a 20 20 63 61  P TABLE t6}.  ca
3410: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 43 52 45  tchsql {.    CRE
3420: 41 54 45 20 54 41 42 4c 45 20 74 36 28 61 2c 62  ATE TABLE t6(a,b
3430: 2c 63 2c 0a 20 20 20 20 20 20 46 4f 52 45 49 47  ,c,.      FOREIG
3440: 4e 20 4b 45 59 20 28 62 2c 78 29 20 52 45 46 45  N KEY (b,x) REFE
3450: 52 45 4e 43 45 53 20 74 34 28 78 2c 79 29 0a 20  RENCES t4(x,y). 
3460: 20 20 20 29 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b     );.  }.} {1 {
3470: 75 6e 6b 6e 6f 77 6e 20 63 6f 6c 75 6d 6e 20 22  unknown column "
3480: 78 22 20 69 6e 20 66 6f 72 65 69 67 6e 20 6b 65  x" in foreign ke
3490: 79 20 64 65 66 69 6e 69 74 69 6f 6e 7d 7d 0a 64  y definition}}.d
34a0: 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 31 30 2e  o_test table-10.
34b0: 31 33 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  13 {.  catchsql 
34c0: 7b 44 52 4f 50 20 54 41 42 4c 45 20 74 36 7d 0a  {DROP TABLE t6}.
34d0: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
34e0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 36   CREATE TABLE t6
34f0: 28 61 2c 62 2c 63 2c 0a 20 20 20 20 20 20 46 4f  (a,b,c,.      FO
3500: 52 45 49 47 4e 20 4b 45 59 20 28 78 2c 62 29 20  REIGN KEY (x,b) 
3510: 52 45 46 45 52 45 4e 43 45 53 20 74 34 28 78 2c  REFERENCES t4(x,
3520: 79 29 0a 20 20 20 20 29 3b 0a 20 20 7d 0a 7d 20  y).    );.  }.} 
3530: 7b 31 20 7b 75 6e 6b 6e 6f 77 6e 20 63 6f 6c 75  {1 {unknown colu
3540: 6d 6e 20 22 78 22 20 69 6e 20 66 6f 72 65 69 67  mn "x" in foreig
3550: 6e 20 6b 65 79 20 64 65 66 69 6e 69 74 69 6f 6e  n key definition
3560: 7d 7d 0a 7d 20 3b 23 20 65 6e 64 69 66 20 66 6f  }}.} ;# endif fo
3570: 72 65 69 67 6e 6b 65 79 0a 0a 23 20 54 65 73 74  reignkey..# Test
3580: 20 66 6f 72 20 74 68 65 20 22 74 79 70 65 6f 66   for the "typeof
3590: 22 20 66 75 6e 63 74 69 6f 6e 2e 20 4d 6f 72 65  " function. More
35a0: 20 74 65 73 74 73 20 66 6f 72 20 74 68 65 0a 23   tests for the.#
35b0: 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69   typeof() functi
35c0: 6f 6e 20 61 72 65 20 66 6f 75 6e 64 20 69 6e 20  on are found in 
35d0: 62 69 6e 64 2e 74 65 73 74 20 61 6e 64 20 74 79  bind.test and ty
35e0: 70 65 73 2e 74 65 73 74 2e 0a 23 0a 64 6f 5f 74  pes.test..#.do_t
35f0: 65 73 74 20 74 61 62 6c 65 2d 31 31 2e 31 20 7b  est table-11.1 {
3600: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
3610: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 37   CREATE TABLE t7
3620: 28 0a 20 20 20 20 20 20 20 61 20 69 6e 74 65 67  (.       a integ
3630: 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 2c 0a  er primary key,.
3640: 20 20 20 20 20 20 20 62 20 6e 75 6d 62 65 72 28         b number(
3650: 35 2c 31 30 29 2c 0a 20 20 20 20 20 20 20 63 20  5,10),.       c 
3660: 63 68 61 72 61 63 74 65 72 20 76 61 72 79 69 6e  character varyin
3670: 67 20 28 38 29 2c 0a 20 20 20 20 20 20 20 64 20  g (8),.       d 
3680: 56 41 52 43 48 41 52 28 39 29 2c 0a 20 20 20 20  VARCHAR(9),.    
3690: 20 20 20 65 20 63 6c 6f 62 2c 0a 20 20 20 20 20     e clob,.     
36a0: 20 20 66 20 42 4c 4f 42 2c 0a 20 20 20 20 20 20    f BLOB,.      
36b0: 20 67 20 54 65 78 74 2c 0a 20 20 20 20 20 20 20   g Text,.       
36c0: 68 0a 20 20 20 20 29 3b 0a 20 20 20 20 49 4e 53  h.    );.    INS
36d0: 45 52 54 20 49 4e 54 4f 20 74 37 28 61 29 20 56  ERT INTO t7(a) V
36e0: 41 4c 55 45 53 28 31 29 3b 0a 20 20 20 20 53 45  ALUES(1);.    SE
36f0: 4c 45 43 54 20 74 79 70 65 6f 66 28 61 29 2c 20  LECT typeof(a), 
3700: 74 79 70 65 6f 66 28 62 29 2c 20 74 79 70 65 6f  typeof(b), typeo
3710: 66 28 63 29 2c 20 74 79 70 65 6f 66 28 64 29 2c  f(c), typeof(d),
3720: 0a 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65  .           type
3730: 6f 66 28 65 29 2c 20 74 79 70 65 6f 66 28 66 29  of(e), typeof(f)
3740: 2c 20 74 79 70 65 6f 66 28 67 29 2c 20 74 79 70  , typeof(g), typ
3750: 65 6f 66 28 68 29 0a 20 20 20 20 46 52 4f 4d 20  eof(h).    FROM 
3760: 74 37 20 4c 49 4d 49 54 20 31 3b 0a 20 20 7d 0a  t7 LIMIT 1;.  }.
3770: 7d 20 7b 69 6e 74 65 67 65 72 20 6e 75 6c 6c 20  } {integer null 
3780: 6e 75 6c 6c 20 6e 75 6c 6c 20 6e 75 6c 6c 20 6e  null null null n
3790: 75 6c 6c 20 6e 75 6c 6c 20 6e 75 6c 6c 7d 20 0a  ull null null} .
37a0: 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 31 31  do_test table-11
37b0: 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .2 {.  execsql {
37c0: 0a 20 20 20 20 53 45 4c 45 43 54 20 74 79 70 65  .    SELECT type
37d0: 6f 66 28 61 2b 62 29 2c 20 74 79 70 65 6f 66 28  of(a+b), typeof(
37e0: 61 7c 7c 62 29 2c 20 74 79 70 65 6f 66 28 63 2b  a||b), typeof(c+
37f0: 64 29 2c 20 74 79 70 65 6f 66 28 63 7c 7c 64 29  d), typeof(c||d)
3800: 0a 20 20 20 20 46 52 4f 4d 20 74 37 20 4c 49 4d  .    FROM t7 LIM
3810: 49 54 20 31 3b 0a 20 20 7d 0a 7d 20 7b 6e 75 6c  IT 1;.  }.} {nul
3820: 6c 20 6e 75 6c 6c 20 6e 75 6c 6c 20 6e 75 6c 6c  l null null null
3830: 7d 0a 0a 23 20 54 65 73 74 20 74 68 61 74 20 77  }..# Test that w
3840: 68 65 6e 20 63 72 65 61 74 69 6e 67 20 61 20 74  hen creating a t
3850: 61 62 6c 65 20 75 73 69 6e 67 20 43 52 45 41 54  able using CREAT
3860: 45 20 54 41 42 4c 45 20 41 53 2c 20 63 6f 6c 75  E TABLE AS, colu
3870: 6d 6e 20 74 79 70 65 73 20 61 72 65 0a 23 20 61  mn types are.# a
3880: 73 73 69 67 6e 65 64 20 63 6f 72 72 65 63 74 6c  ssigned correctl
3890: 79 20 66 6f 72 20 28 53 45 4c 45 43 54 20 2e 2e  y for (SELECT ..
38a0: 2e 29 20 61 6e 64 20 27 78 20 41 53 20 79 27 20  .) and 'x AS y' 
38b0: 65 78 70 72 65 73 73 69 6f 6e 73 2e 0a 64 6f 5f  expressions..do_
38c0: 74 65 73 74 20 74 61 62 6c 65 2d 31 32 2e 31 20  test table-12.1 
38d0: 7b 0a 20 20 69 66 63 61 70 61 62 6c 65 20 73 75  {.  ifcapable su
38e0: 62 71 75 65 72 79 20 7b 0a 20 20 20 20 65 78 65  bquery {.    exe
38f0: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 43 52 45  csql {.      CRE
3900: 41 54 45 20 54 41 42 4c 45 20 74 38 20 41 53 20  ATE TABLE t8 AS 
3910: 53 45 4c 45 43 54 20 62 2c 20 68 2c 20 61 20 61  SELECT b, h, a a
3920: 73 20 69 2c 20 28 53 45 4c 45 43 54 20 66 20 46  s i, (SELECT f F
3930: 52 4f 4d 20 74 37 29 20 61 73 20 6a 20 46 52 4f  ROM t7) as j FRO
3940: 4d 20 74 37 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  M t7;.    }.  } 
3950: 65 6c 73 65 20 7b 0a 20 20 20 20 65 78 65 63 73  else {.    execs
3960: 71 6c 20 7b 0a 20 20 20 20 20 20 43 52 45 41 54  ql {.      CREAT
3970: 45 20 54 41 42 4c 45 20 74 38 20 41 53 20 53 45  E TABLE t8 AS SE
3980: 4c 45 43 54 20 62 2c 20 68 2c 20 61 20 61 73 20  LECT b, h, a as 
3990: 69 2c 20 66 20 61 73 20 6a 20 46 52 4f 4d 20 74  i, f as j FROM t
39a0: 37 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 20 7b  7;.    }.  }.} {
39b0: 7d 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d  }.do_test table-
39c0: 31 32 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  12.2 {.  execsql
39d0: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 73 71   {.    SELECT sq
39e0: 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  l FROM sqlite_ma
39f0: 73 74 65 72 20 57 48 45 52 45 20 74 62 6c 5f 6e  ster WHERE tbl_n
3a00: 61 6d 65 20 3d 20 27 74 38 27 0a 20 20 7d 0a 7d  ame = 't8'.  }.}
3a10: 20 7b 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20   {{CREATE TABLE 
3a20: 74 38 28 62 20 4e 55 4d 2c 68 2c 69 20 49 4e 54  t8(b NUM,h,i INT
3a30: 2c 6a 29 7d 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d  ,j)}}..#--------
3a40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3a50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
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 0a 23 20 54  ------------.# T
3a80: 65 73 74 20 63 61 73 65 73 20 74 61 62 6c 65 2d  est cases table-
3a90: 31 33 2e 2a 0a 23 0a 23 20 54 65 73 74 20 74 68  13.*.#.# Test th
3aa0: 65 20 61 62 69 6c 69 74 79 20 74 6f 20 68 61 76  e ability to hav
3ab0: 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 73  e default values
3ac0: 20 6f 66 20 43 55 52 52 45 4e 54 5f 54 49 4d 45   of CURRENT_TIME
3ad0: 2c 20 43 55 52 52 45 4e 54 5f 44 41 54 45 0a 23  , CURRENT_DATE.#
3ae0: 20 61 6e 64 20 43 55 52 52 45 4e 54 5f 54 49 4d   and CURRENT_TIM
3af0: 45 53 54 41 4d 50 2e 0a 23 0a 64 6f 5f 74 65 73  ESTAMP..#.do_tes
3b00: 74 20 74 61 62 6c 65 2d 31 33 2e 31 20 7b 0a 20  t table-13.1 {. 
3b10: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43   execsql {.    C
3b20: 52 45 41 54 45 20 54 41 42 4c 45 20 74 61 62 6c  REATE TABLE tabl
3b30: 65 74 38 28 0a 20 20 20 20 20 20 20 61 20 69 6e  et8(.       a in
3b40: 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65  teger primary ke
3b50: 79 2c 0a 20 20 20 20 20 20 20 74 6d 20 74 65 78  y,.       tm tex
3b60: 74 20 44 45 46 41 55 4c 54 20 43 55 52 52 45 4e  t DEFAULT CURREN
3b70: 54 5f 54 49 4d 45 2c 0a 20 20 20 20 20 20 20 64  T_TIME,.       d
3b80: 74 20 74 65 78 74 20 44 45 46 41 55 4c 54 20 43  t text DEFAULT C
3b90: 55 52 52 45 4e 54 5f 44 41 54 45 2c 0a 20 20 20  URRENT_DATE,.   
3ba0: 20 20 20 20 64 74 74 6d 20 74 65 78 74 20 44 45      dttm text DE
3bb0: 46 41 55 4c 54 20 43 55 52 52 45 4e 54 5f 54 49  FAULT CURRENT_TI
3bc0: 4d 45 53 54 41 4d 50 0a 20 20 20 20 29 3b 0a 20  MESTAMP.    );. 
3bd0: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
3be0: 20 74 61 62 6c 65 74 38 3b 0a 20 20 7d 0a 7d 20   tablet8;.  }.} 
3bf0: 7b 7d 0a 73 65 74 20 69 20 30 0a 75 6e 73 65 74  {}.set i 0.unset
3c00: 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 64 61 74   -nocomplain dat
3c10: 65 20 74 69 6d 65 20 73 65 63 6f 6e 64 73 0a 66  e time seconds.f
3c20: 6f 72 65 61 63 68 20 7b 64 61 74 65 20 74 69 6d  oreach {date tim
3c30: 65 20 73 65 63 6f 6e 64 73 7d 20 7b 0a 20 20 31  e seconds} {.  1
3c40: 39 37 36 2d 30 37 2d 30 34 20 31 32 3a 30 30 3a  976-07-04 12:00:
3c50: 30 30 20 32 30 35 33 32 39 36 30 30 0a 20 20 31  00 205329600.  1
3c60: 39 39 34 2d 30 34 2d 31 36 20 31 34 3a 30 30 3a  994-04-16 14:00:
3c70: 30 30 20 37 36 36 35 30 34 38 30 30 0a 20 20 32  00 766504800.  2
3c80: 30 30 30 2d 30 31 2d 30 31 20 30 30 3a 30 30 3a  000-01-01 00:00:
3c90: 30 30 20 39 34 36 36 38 34 38 30 30 0a 20 20 32  00 946684800.  2
3ca0: 30 30 33 2d 31 32 2d 33 31 20 31 32 3a 33 34 3a  003-12-31 12:34:
3cb0: 35 36 20 31 30 37 32 38 37 34 30 39 36 0a 7d 20  56 1072874096.} 
3cc0: 7b 0a 20 20 69 6e 63 72 20 69 0a 20 20 73 65 74  {.  incr i.  set
3cd0: 20 73 71 6c 69 74 65 5f 63 75 72 72 65 6e 74 5f   sqlite_current_
3ce0: 74 69 6d 65 20 24 73 65 63 6f 6e 64 73 0a 20 20  time $seconds.  
3cf0: 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 31 33  do_test table-13
3d00: 2e 32 2e 24 69 20 7b 0a 20 20 20 20 65 78 65 63  .2.$i {.    exec
3d10: 73 71 6c 20 22 0a 20 20 20 20 20 20 49 4e 53 45  sql ".      INSE
3d20: 52 54 20 49 4e 54 4f 20 74 61 62 6c 65 74 38 28  RT INTO tablet8(
3d30: 61 29 20 56 41 4c 55 45 53 28 24 69 29 3b 0a 20  a) VALUES($i);. 
3d40: 20 20 20 20 20 53 45 4c 45 43 54 20 74 6d 2c 20       SELECT tm, 
3d50: 64 74 2c 20 64 74 74 6d 20 46 52 4f 4d 20 74 61  dt, dttm FROM ta
3d60: 62 6c 65 74 38 20 57 48 45 52 45 20 61 3d 24 69  blet8 WHERE a=$i
3d70: 3b 0a 20 20 20 20 22 0a 20 20 7d 20 5b 6c 69 73  ;.    ".  } [lis
3d80: 74 20 24 74 69 6d 65 20 24 64 61 74 65 20 5b 6c  t $time $date [l
3d90: 69 73 74 20 24 64 61 74 65 20 24 74 69 6d 65 5d  ist $date $time]
3da0: 5d 0a 7d 0a 73 65 74 20 73 71 6c 69 74 65 5f 63  ].}.set sqlite_c
3db0: 75 72 72 65 6e 74 5f 74 69 6d 65 20 30 0a 0a 23  urrent_time 0..#
3dc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3dd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3de0: 2d 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 0a 23 20 54 65 73 74 20 63 61 73 65  ----.# Test case
3e10: 73 20 74 61 62 6c 65 2d 31 34 2e 2a 0a 23 0a 23  s table-14.*.#.#
3e20: 20 54 65 73 74 20 74 68 61 74 20 61 20 74 61 62   Test that a tab
3e30: 6c 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 72 65  le cannot be cre
3e40: 61 74 65 64 20 6f 72 20 64 72 6f 70 70 65 64 20  ated or dropped 
3e50: 77 68 69 6c 65 20 6f 74 68 65 72 20 76 69 72 74  while other virt
3e60: 75 61 6c 0a 23 20 6d 61 63 68 69 6e 65 73 20 61  ual.# machines a
3e70: 72 65 20 61 63 74 69 76 65 2e 20 54 68 69 73 20  re active. This 
3e80: 69 73 20 72 65 71 75 69 72 65 64 20 62 65 63 61  is required beca
3e90: 75 73 65 20 6f 74 68 65 72 77 69 73 65 20 77 68  use otherwise wh
3ea0: 65 6e 20 69 6e 20 0a 23 20 61 75 74 6f 2d 76 61  en in .# auto-va
3eb0: 63 75 75 6d 20 6d 6f 64 65 20 74 68 65 20 62 74  cuum mode the bt
3ec0: 72 65 65 2d 6c 61 79 65 72 20 6d 61 79 20 6e 65  ree-layer may ne
3ed0: 65 64 20 74 6f 20 6d 6f 76 65 20 74 68 65 20 72  ed to move the r
3ee0: 6f 6f 74 2d 70 61 67 65 73 20 6f 66 20 0a 23 20  oot-pages of .# 
3ef0: 61 20 74 61 62 6c 65 20 66 6f 72 20 77 68 69 63  a table for whic
3f00: 68 20 74 68 65 72 65 20 69 73 20 61 6e 20 6f 70  h there is an op
3f10: 65 6e 20 63 75 72 73 6f 72 2e 0a 23 0a 23 20 32  en cursor..#.# 2
3f20: 30 30 37 2d 30 35 2d 30 32 3a 20 20 41 20 6f 70  007-05-02:  A op
3f30: 65 6e 20 62 74 72 65 65 20 63 75 72 73 6f 72 20  en btree cursor 
3f40: 6e 6f 20 6c 6f 6e 67 65 72 20 62 6c 6f 63 6b 73  no longer blocks
3f50: 20 43 52 45 41 54 45 20 54 41 42 4c 45 2e 0a 23   CREATE TABLE..#
3f60: 20 42 75 74 20 44 52 4f 50 20 54 41 42 4c 45 20   But DROP TABLE 
3f70: 69 73 20 73 74 69 6c 6c 20 70 72 6f 68 69 62 69  is still prohibi
3f80: 74 65 64 20 62 65 63 61 75 73 65 20 77 65 20 64  ted because we d
3f90: 6f 20 6e 6f 74 20 77 61 6e 74 20 74 6f 0a 23 20  o not want to.# 
3fa0: 64 65 6c 65 74 65 20 61 20 74 61 62 6c 65 20 6f  delete a table o
3fb0: 75 74 20 66 72 6f 6d 20 75 6e 64 65 72 20 61 20  ut from under a 
3fc0: 72 75 6e 6e 69 6e 67 20 71 75 65 72 79 2e 0a 23  running query..#
3fd0: 0a 0a 23 20 64 62 20 65 76 61 6c 20 7b 0a 23 20  ..# db eval {.# 
3fe0: 20 20 70 72 61 67 6d 61 20 76 64 62 65 5f 74 72    pragma vdbe_tr
3ff0: 61 63 65 20 3d 20 30 3b 0a 23 20 7d 0a 23 20 54  ace = 0;.# }.# T
4000: 72 79 20 74 6f 20 63 72 65 61 74 65 20 61 20 74  ry to create a t
4010: 61 62 6c 65 20 66 72 6f 6d 20 77 69 74 68 69 6e  able from within
4020: 20 61 20 63 61 6c 6c 62 61 63 6b 3a 0a 75 6e 73   a callback:.uns
4030: 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72  et -nocomplain r
4040: 65 73 75 6c 74 0a 64 6f 5f 74 65 73 74 20 74 61  esult.do_test ta
4050: 62 6c 65 2d 31 34 2e 31 20 7b 0a 20 20 73 65 74  ble-14.1 {.  set
4060: 20 72 63 20 5b 0a 20 20 20 20 63 61 74 63 68 20   rc [.    catch 
4070: 7b 0a 20 20 20 20 20 20 64 62 20 65 76 61 6c 20  {.      db eval 
4080: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
4090: 61 62 6c 65 74 38 20 4c 49 4d 49 54 20 31 7d 20  ablet8 LIMIT 1} 
40a0: 7b 7d 20 7b 0a 20 20 20 20 20 20 20 20 64 62 20  {} {.        db 
40b0: 65 76 61 6c 20 7b 43 52 45 41 54 45 20 54 41 42  eval {CREATE TAB
40c0: 4c 45 20 74 39 28 61 2c 20 62 2c 20 63 29 7d 0a  LE t9(a, b, c)}.
40d0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 6d 73        }.    } ms
40e0: 67 0a 20 20 5d 0a 20 20 73 65 74 20 72 65 73 75  g.  ].  set resu
40f0: 6c 74 20 5b 6c 69 73 74 20 24 72 63 20 24 6d 73  lt [list $rc $ms
4100: 67 5d 0a 7d 20 7b 30 20 7b 7d 7d 0a 0a 23 20 54  g].} {0 {}}..# T
4110: 72 79 20 74 6f 20 64 72 6f 70 20 61 20 74 61 62  ry to drop a tab
4120: 6c 65 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61  le from within a
4130: 20 63 61 6c 6c 62 61 63 6b 3a 0a 64 6f 5f 74 65   callback:.do_te
4140: 73 74 20 74 61 62 6c 65 2d 31 34 2e 32 20 7b 0a  st table-14.2 {.
4150: 20 20 73 65 74 20 72 63 20 5b 0a 20 20 20 20 63    set rc [.    c
4160: 61 74 63 68 20 7b 0a 20 20 20 20 20 20 64 62 20  atch {.      db 
4170: 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46  eval {SELECT * F
4180: 52 4f 4d 20 74 61 62 6c 65 74 38 20 4c 49 4d 49  ROM tablet8 LIMI
4190: 54 20 31 7d 20 7b 7d 20 7b 0a 20 20 20 20 20 20  T 1} {} {.      
41a0: 20 20 64 62 20 65 76 61 6c 20 7b 44 52 4f 50 20    db eval {DROP 
41b0: 54 41 42 4c 45 20 74 39 3b 7d 0a 20 20 20 20 20  TABLE t9;}.     
41c0: 20 7d 0a 20 20 20 20 7d 20 6d 73 67 0a 20 20 5d   }.    } msg.  ]
41d0: 20 0a 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b   .  set result [
41e0: 6c 69 73 74 20 24 72 63 20 24 6d 73 67 5d 0a 7d  list $rc $msg].}
41f0: 20 7b 31 20 7b 64 61 74 61 62 61 73 65 20 74 61   {1 {database ta
4200: 62 6c 65 20 69 73 20 6c 6f 63 6b 65 64 7d 7d 0a  ble is locked}}.
4210: 0a 69 66 63 61 70 61 62 6c 65 20 61 74 74 61 63  .ifcapable attac
4220: 68 20 7b 0a 20 20 23 20 4e 6f 77 20 61 74 74 61  h {.  # Now atta
4230: 63 68 20 61 20 64 61 74 61 62 61 73 65 20 61 6e  ch a database an
4240: 64 20 65 6e 73 75 72 65 20 74 68 61 74 20 61 20  d ensure that a 
4250: 74 61 62 6c 65 20 63 61 6e 20 62 65 20 63 72 65  table can be cre
4260: 61 74 65 64 20 69 6e 20 74 68 65 20 0a 20 20 23  ated in the .  #
4270: 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
4280: 73 65 20 77 68 69 6c 73 74 20 69 6e 20 61 20 63  se whilst in a c
4290: 61 6c 6c 62 61 63 6b 20 66 72 6f 6d 20 61 20 71  allback from a q
42a0: 75 65 72 79 20 6f 6e 20 74 68 65 20 6d 61 69 6e  uery on the main
42b0: 20 64 61 74 61 62 61 73 65 2e 0a 20 20 64 6f 5f   database..  do_
42c0: 74 65 73 74 20 74 61 62 6c 65 2d 31 34 2e 33 20  test table-14.3 
42d0: 7b 0a 20 20 20 20 66 6f 72 63 65 64 65 6c 65 74  {.    forcedelet
42e0: 65 20 74 65 73 74 32 2e 64 62 0a 20 20 20 20 66  e test2.db.    f
42f0: 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73 74 32  orcedelete test2
4300: 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 20 20 20 20  .db-journal.    
4310: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
4320: 41 54 54 41 43 48 20 27 74 65 73 74 32 2e 64 62  ATTACH 'test2.db
4330: 27 20 61 73 20 61 75 78 3b 0a 20 20 20 20 7d 0a  ' as aux;.    }.
4340: 20 20 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c      db eval {SEL
4350: 45 43 54 20 2a 20 46 52 4f 4d 20 74 61 62 6c 65  ECT * FROM table
4360: 74 38 20 4c 49 4d 49 54 20 31 7d 20 7b 7d 20 7b  t8 LIMIT 1} {} {
4370: 0a 20 20 20 20 20 20 64 62 20 65 76 61 6c 20 7b  .      db eval {
4380: 43 52 45 41 54 45 20 54 41 42 4c 45 20 61 75 78  CREATE TABLE aux
4390: 2e 74 31 28 61 2c 20 62 2c 20 63 29 7d 0a 20 20  .t1(a, b, c)}.  
43a0: 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 0a 20 20    }.  } {}.  .  
43b0: 23 20 4f 6e 20 74 68 65 20 6f 74 68 65 72 20 68  # On the other h
43c0: 61 6e 64 2c 20 69 74 20 73 68 6f 75 6c 64 20 62  and, it should b
43d0: 65 20 69 6d 70 6f 73 73 69 62 6c 65 20 74 6f 20  e impossible to 
43e0: 64 72 6f 70 20 61 20 74 61 62 6c 65 20 77 68 65  drop a table whe
43f0: 6e 20 61 6e 79 20 56 4d 73 20 0a 20 20 23 20 61  n any VMs .  # a
4400: 72 65 20 61 63 74 69 76 65 2e 20 54 68 69 73 20  re active. This 
4410: 69 73 20 62 65 63 61 75 73 65 20 56 65 72 69 66  is because Verif
4420: 79 43 6f 6f 6b 69 65 20 69 6e 73 74 72 75 63 74  yCookie instruct
4430: 69 6f 6e 73 20 6d 61 79 20 68 61 76 65 20 61 6c  ions may have al
4440: 72 65 61 64 79 0a 20 20 23 20 62 65 65 6e 20 65  ready.  # been e
4450: 78 65 63 75 74 65 64 2c 20 61 6e 64 20 62 74 72  xecuted, and btr
4460: 65 65 20 72 6f 6f 74 2d 70 61 67 65 73 20 6d 61  ee root-pages ma
4470: 79 20 6e 6f 74 20 6d 6f 76 65 20 61 66 74 65 72  y not move after
4480: 20 74 68 69 73 20 28 77 68 69 63 68 20 61 0a 20   this (which a. 
4490: 20 23 20 64 65 6c 65 74 65 20 74 61 62 6c 65 20   # delete table 
44a0: 6d 69 67 68 74 20 64 6f 29 2e 0a 20 20 64 6f 5f  might do)..  do_
44b0: 74 65 73 74 20 74 61 62 6c 65 2d 31 34 2e 34 20  test table-14.4 
44c0: 7b 0a 20 20 20 20 73 65 74 20 72 63 20 5b 0a 20  {.    set rc [. 
44d0: 20 20 20 20 20 63 61 74 63 68 20 7b 0a 20 20 20       catch {.   
44e0: 20 20 20 20 20 64 62 20 65 76 61 6c 20 7b 53 45       db eval {SE
44f0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 61 62 6c  LECT * FROM tabl
4500: 65 74 38 20 4c 49 4d 49 54 20 31 7d 20 7b 7d 20  et8 LIMIT 1} {} 
4510: 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 20 65  {.          db e
4520: 76 61 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45 20  val {DROP TABLE 
4530: 61 75 78 2e 74 31 3b 7d 0a 20 20 20 20 20 20 20  aux.t1;}.       
4540: 20 7d 0a 20 20 20 20 20 20 7d 20 6d 73 67 0a 20   }.      } msg. 
4550: 20 20 20 5d 20 0a 20 20 20 20 73 65 74 20 72 65     ] .    set re
4560: 73 75 6c 74 20 5b 6c 69 73 74 20 24 72 63 20 24  sult [list $rc $
4570: 6d 73 67 5d 0a 20 20 7d 20 7b 31 20 7b 64 61 74  msg].  } {1 {dat
4580: 61 62 61 73 65 20 74 61 62 6c 65 20 69 73 20 6c  abase table is l
4590: 6f 63 6b 65 64 7d 7d 0a 7d 0a 0a 23 20 43 72 65  ocked}}.}..# Cre
45a0: 61 74 65 20 61 6e 64 20 64 72 6f 70 20 32 30 30  ate and drop 200
45b0: 30 20 74 61 62 6c 65 73 2e 20 54 68 69 73 20 69  0 tables. This i
45c0: 73 20 74 6f 20 63 68 65 63 6b 20 74 68 61 74 20  s to check that 
45d0: 74 68 65 20 62 61 6c 61 6e 63 65 5f 73 68 61 6c  the balance_shal
45e0: 6c 6f 77 28 29 0a 23 20 72 6f 75 74 69 6e 65 20  low().# routine 
45f0: 77 6f 72 6b 73 20 63 6f 72 72 65 63 74 6c 79 20  works correctly 
4600: 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 6d 61  on the sqlite_ma
4610: 73 74 65 72 20 74 61 62 6c 65 2e 20 41 74 20 6f  ster table. At o
4620: 6e 65 20 70 6f 69 6e 74 20 69 74 0a 23 20 63 6f  ne point it.# co
4630: 6e 74 61 69 6e 65 64 20 61 20 62 75 67 20 74 68  ntained a bug th
4640: 61 74 20 77 6f 75 6c 64 20 70 72 65 76 65 6e 74  at would prevent
4650: 20 74 68 65 20 72 69 67 68 74 2d 63 68 69 6c 64   the right-child
4660: 20 70 6f 69 6e 74 65 72 20 6f 66 20 74 68 65 0a   pointer of the.
4670: 23 20 63 68 69 6c 64 20 70 61 67 65 20 66 72 6f  # child page fro
4680: 6d 20 62 65 69 6e 67 20 63 6f 70 69 65 64 20 74  m being copied t
4690: 6f 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 2e  o the root page.
46a0: 0a 23 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65  .#.do_test table
46b0: 2d 31 35 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  -15.1 {.  execsq
46c0: 6c 20 7b 42 45 47 49 4e 7d 0a 20 20 66 6f 72 20  l {BEGIN}.  for 
46d0: 7b 73 65 74 20 69 20 30 7d 20 7b 24 69 3c 32 30  {set i 0} {$i<20
46e0: 30 30 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20  00} {incr i} {. 
46f0: 20 20 20 65 78 65 63 73 71 6c 20 22 43 52 45 41     execsql "CREA
4700: 54 45 20 54 41 42 4c 45 20 74 62 6c 24 69 20 28  TE TABLE tbl$i (
4710: 61 2c 20 62 2c 20 63 29 22 0a 20 20 7d 0a 20 20  a, b, c)".  }.  
4720: 65 78 65 63 73 71 6c 20 7b 43 4f 4d 4d 49 54 7d  execsql {COMMIT}
4730: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 74 61  .} {}.do_test ta
4740: 62 6c 65 2d 31 35 2e 32 20 7b 0a 20 20 65 78 65  ble-15.2 {.  exe
4750: 63 73 71 6c 20 7b 42 45 47 49 4e 7d 0a 20 20 66  csql {BEGIN}.  f
4760: 6f 72 20 7b 73 65 74 20 69 20 30 7d 20 7b 24 69  or {set i 0} {$i
4770: 3c 32 30 30 30 7d 20 7b 69 6e 63 72 20 69 7d 20  <2000} {incr i} 
4780: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 22 44  {.    execsql "D
4790: 52 4f 50 20 54 41 42 4c 45 20 74 62 6c 24 69 22  ROP TABLE tbl$i"
47a0: 0a 20 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b  .  }.  execsql {
47b0: 43 4f 4d 4d 49 54 7d 0a 7d 20 7b 7d 0a 0a 23 20  COMMIT}.} {}..# 
47c0: 54 69 63 6b 65 74 20 33 61 38 38 64 38 35 66 33  Ticket 3a88d85f3
47d0: 36 37 30 34 65 65 62 65 31 33 34 66 37 66 34 38  6704eebe134f7f48
47e0: 61 65 62 66 30 30 63 64 36 34 33 38 63 31 61 20  aebf00cd6438c1a 
47f0: 28 32 30 31 34 2d 30 38 2d 30 35 29 0a 23 20 54  (2014-08-05).# T
4800: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 53 51 4c  he following SQL
4810: 20 73 63 72 69 70 74 20 73 65 67 66 61 75 6c 74   script segfault
4820: 73 20 77 68 69 6c 65 20 72 75 6e 6e 69 6e 67 20  s while running 
4830: 74 68 65 20 49 4e 53 45 52 54 20 73 74 61 74 65  the INSERT state
4840: 6d 65 6e 74 3a 0a 23 0a 23 20 20 20 20 43 52 45  ment:.#.#    CRE
4850: 41 54 45 20 54 41 42 4c 45 20 74 31 28 78 20 44  ATE TABLE t1(x D
4860: 45 46 41 55 4c 54 28 6d 61 78 28 31 29 29 29 3b  EFAULT(max(1)));
4870: 0a 23 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  .#    INSERT INT
4880: 4f 20 74 31 28 72 6f 77 69 64 29 20 56 41 4c 55  O t1(rowid) VALU
4890: 45 53 28 31 29 3b 0a 23 0a 23 20 54 68 65 20 70  ES(1);.#.# The p
48a0: 72 6f 62 6c 65 6d 20 61 70 70 65 61 72 73 20 74  roblem appears t
48b0: 6f 20 62 65 20 74 68 65 20 75 73 65 20 6f 66 20  o be the use of 
48c0: 61 6e 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  an aggregate fun
48d0: 63 74 69 6f 6e 20 61 73 20 70 61 72 74 20 6f 66  ction as part of
48e0: 0a 23 20 74 68 65 20 64 65 66 61 75 6c 74 20 76  .# the default v
48f0: 61 6c 75 65 20 66 6f 72 20 61 20 63 6f 6c 75 6d  alue for a colum
4900: 6e 2e 20 54 68 69 73 20 70 72 6f 62 6c 65 6d 20  n. This problem 
4910: 68 61 73 20 62 65 65 6e 20 69 6e 20 74 68 65 20  has been in the 
4920: 63 6f 64 65 20 73 69 6e 63 65 0a 23 20 61 74 20  code since.# at 
4930: 6c 65 61 73 74 20 32 30 30 36 2d 30 31 2d 30 31  least 2006-01-01
4940: 20 61 6e 64 20 70 72 6f 62 61 62 6c 79 20 62 65   and probably be
4950: 66 6f 72 65 20 74 68 61 74 2e 20 54 68 69 73 20  fore that. This 
4960: 70 72 6f 62 6c 65 6d 20 77 61 73 20 64 65 74 65  problem was dete
4970: 63 74 65 64 0a 23 20 61 6e 64 20 72 65 70 6f 72  cted.# and repor
4980: 74 65 64 20 6f 6e 20 74 68 65 20 73 71 6c 69 74  ted on the sqlit
4990: 65 2d 75 73 65 72 73 40 73 71 6c 69 74 65 2e 6f  e-users@sqlite.o
49a0: 72 67 20 6d 61 69 6c 69 6e 67 20 6c 69 73 74 20  rg mailing list 
49b0: 62 79 20 5a 73 62 c3 a1 6e 20 41 6d 62 72 75 73  by Zsb..n Ambrus
49c0: 2e 20 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  . .#.do_execsql_
49d0: 74 65 73 74 20 74 61 62 6c 65 2d 31 36 2e 31 20  test table-16.1 
49e0: 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  {.  CREATE TABLE
49f0: 20 74 31 36 28 78 20 44 45 46 41 55 4c 54 28 6d   t16(x DEFAULT(m
4a00: 61 78 28 31 29 29 29 3b 0a 20 20 49 4e 53 45 52  ax(1)));.  INSER
4a10: 54 20 49 4e 54 4f 20 74 31 36 28 78 29 20 56 41  T INTO t16(x) VA
4a20: 4c 55 45 53 28 31 32 33 29 3b 0a 20 20 53 45 4c  LUES(123);.  SEL
4a30: 45 43 54 20 72 6f 77 69 64 2c 20 78 20 46 52 4f  ECT rowid, x FRO
4a40: 4d 20 74 31 36 3b 0a 7d 20 7b 31 20 31 32 33 7d  M t16;.} {1 123}
4a50: 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65 73  .do_catchsql_tes
4a60: 74 20 74 61 62 6c 65 2d 31 36 2e 32 20 7b 0a 20  t table-16.2 {. 
4a70: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 36   INSERT INTO t16
4a80: 28 72 6f 77 69 64 29 20 56 41 4c 55 45 53 28 34  (rowid) VALUES(4
4a90: 29 3b 0a 7d 20 7b 31 20 7b 75 6e 6b 6e 6f 77 6e  );.} {1 {unknown
4aa0: 20 66 75 6e 63 74 69 6f 6e 3a 20 6d 61 78 28 29   function: max()
4ab0: 7d 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  }}.do_execsql_te
4ac0: 73 74 20 74 61 62 6c 65 2d 31 36 2e 33 20 7b 0a  st table-16.3 {.
4ad0: 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31 36    DROP TABLE t16
4ae0: 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  ;.  CREATE TABLE
4af0: 20 74 31 36 28 78 20 44 45 46 41 55 4c 54 28 61   t16(x DEFAULT(a
4b00: 62 73 28 31 29 29 29 3b 0a 20 20 49 4e 53 45 52  bs(1)));.  INSER
4b10: 54 20 49 4e 54 4f 20 74 31 36 28 72 6f 77 69 64  T INTO t16(rowid
4b20: 29 20 56 41 4c 55 45 53 28 34 29 3b 0a 20 20 53  ) VALUES(4);.  S
4b30: 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 78 20 46  ELECT rowid, x F
4b40: 52 4f 4d 20 74 31 36 3b 0a 7d 20 7b 34 20 31 7d  ROM t16;.} {4 1}
4b50: 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65 73  .do_catchsql_tes
4b60: 74 20 74 61 62 6c 65 2d 31 36 2e 34 20 7b 0a 20  t table-16.4 {. 
4b70: 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31 36 3b   DROP TABLE t16;
4b80: 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  .  CREATE TABLE 
4b90: 74 31 36 28 78 20 44 45 46 41 55 4c 54 28 61 76  t16(x DEFAULT(av
4ba0: 67 28 31 29 29 29 3b 0a 20 20 49 4e 53 45 52 54  g(1)));.  INSERT
4bb0: 20 49 4e 54 4f 20 74 31 36 28 72 6f 77 69 64 29   INTO t16(rowid)
4bc0: 20 56 41 4c 55 45 53 28 31 32 33 29 3b 0a 20 20   VALUES(123);.  
4bd0: 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 78 20  SELECT rowid, x 
4be0: 46 52 4f 4d 20 74 31 36 3b 0a 7d 20 7b 31 20 7b  FROM t16;.} {1 {
4bf0: 75 6e 6b 6e 6f 77 6e 20 66 75 6e 63 74 69 6f 6e  unknown function
4c00: 3a 20 61 76 67 28 29 7d 7d 0a 64 6f 5f 63 61 74  : avg()}}.do_cat
4c10: 63 68 73 71 6c 5f 74 65 73 74 20 74 61 62 6c 65  chsql_test table
4c20: 2d 31 36 2e 35 20 7b 0a 20 20 44 52 4f 50 20 54  -16.5 {.  DROP T
4c30: 41 42 4c 45 20 74 31 36 3b 0a 20 20 43 52 45 41  ABLE t16;.  CREA
4c40: 54 45 20 54 41 42 4c 45 20 74 31 36 28 78 20 44  TE TABLE t16(x D
4c50: 45 46 41 55 4c 54 28 63 6f 75 6e 74 28 29 29 29  EFAULT(count()))
4c60: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
4c70: 74 31 36 28 72 6f 77 69 64 29 20 56 41 4c 55 45  t16(rowid) VALUE
4c80: 53 28 31 32 33 29 3b 0a 20 20 53 45 4c 45 43 54  S(123);.  SELECT
4c90: 20 72 6f 77 69 64 2c 20 78 20 46 52 4f 4d 20 74   rowid, x FROM t
4ca0: 31 36 3b 0a 7d 20 7b 31 20 7b 75 6e 6b 6e 6f 77  16;.} {1 {unknow
4cb0: 6e 20 66 75 6e 63 74 69 6f 6e 3a 20 63 6f 75 6e  n function: coun
4cc0: 74 28 29 7d 7d 0a 64 6f 5f 63 61 74 63 68 73 71  t()}}.do_catchsq
4cd0: 6c 5f 74 65 73 74 20 74 61 62 6c 65 2d 31 36 2e  l_test table-16.
4ce0: 36 20 7b 0a 20 20 44 52 4f 50 20 54 41 42 4c 45  6 {.  DROP TABLE
4cf0: 20 74 31 36 3b 0a 20 20 43 52 45 41 54 45 20 54   t16;.  CREATE T
4d00: 41 42 4c 45 20 74 31 36 28 78 20 44 45 46 41 55  ABLE t16(x DEFAU
4d10: 4c 54 28 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28  LT(group_concat(
4d20: 27 78 27 2c 27 2c 27 29 29 29 3b 0a 20 20 49 4e  'x',',')));.  IN
4d30: 53 45 52 54 20 49 4e 54 4f 20 74 31 36 28 72 6f  SERT INTO t16(ro
4d40: 77 69 64 29 20 56 41 4c 55 45 53 28 31 32 33 29  wid) VALUES(123)
4d50: 3b 0a 20 20 53 45 4c 45 43 54 20 72 6f 77 69 64  ;.  SELECT rowid
4d60: 2c 20 78 20 46 52 4f 4d 20 74 31 36 3b 0a 7d 20  , x FROM t16;.} 
4d70: 7b 31 20 7b 75 6e 6b 6e 6f 77 6e 20 66 75 6e 63  {1 {unknown func
4d80: 74 69 6f 6e 3a 20 67 72 6f 75 70 5f 63 6f 6e 63  tion: group_conc
4d90: 61 74 28 29 7d 7d 0a 64 6f 5f 63 61 74 63 68 73  at()}}.do_catchs
4da0: 71 6c 5f 74 65 73 74 20 74 61 62 6c 65 2d 31 36  ql_test table-16
4db0: 2e 37 20 7b 0a 20 20 49 4e 53 45 52 54 20 49 4e  .7 {.  INSERT IN
4dc0: 54 4f 20 74 31 36 20 44 45 46 41 55 4c 54 20 56  TO t16 DEFAULT V
4dd0: 41 4c 55 45 53 3b 0a 7d 20 7b 31 20 7b 75 6e 6b  ALUES;.} {1 {unk
4de0: 6e 6f 77 6e 20 66 75 6e 63 74 69 6f 6e 3a 20 67  nown function: g
4df0: 72 6f 75 70 5f 63 6f 6e 63 61 74 28 29 7d 7d 0a  roup_concat()}}.
4e00: 0a 23 20 54 69 63 6b 65 74 20 5b 68 74 74 70 73  .# Ticket [https
4e10: 3a 2f 2f 77 77 77 2e 73 71 6c 69 74 65 2e 6f 72  ://www.sqlite.or
4e20: 67 2f 73 72 63 2f 69 6e 66 6f 2f 30 39 34 64 33  g/src/info/094d3
4e30: 39 61 34 63 39 35 65 65 34 61 62 62 63 34 31 37  9a4c95ee4abbc417
4e40: 66 30 34 32 31 34 36 31 37 36 37 35 62 61 31 35  f04214617675ba15
4e50: 63 36 33 5d 0a 23 20 64 65 73 63 72 69 62 65 73  c63].# describes
4e60: 20 61 20 61 73 73 65 72 74 69 6f 6e 20 66 61 75   a assertion fau
4e70: 6c 74 20 74 68 61 74 20 6f 63 63 75 72 73 20 6f  lt that occurs o
4e80: 6e 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45  n a CREATE TABLE
4e90: 20 2e 2e 20 41 53 20 53 45 4c 45 43 54 20 73 74   .. AS SELECT st
4ea0: 61 74 65 6d 65 6e 74 2e 0a 23 20 74 68 65 20 66  atement..# the f
4eb0: 6f 6c 6c 6f 77 69 6e 67 20 74 65 73 74 20 76 65  ollowing test ve
4ec0: 72 69 66 69 65 73 20 74 68 61 74 20 74 68 65 20  rifies that the 
4ed0: 70 72 6f 62 6c 65 6d 20 68 61 73 20 62 65 65 6e  problem has been
4ee0: 20 66 69 78 65 64 2e 0a 23 0a 64 6f 5f 65 78 65   fixed..#.do_exe
4ef0: 63 73 71 6c 5f 74 65 73 74 20 74 61 62 6c 65 2d  csql_test table-
4f00: 31 37 2e 31 20 7b 0a 20 20 44 52 4f 50 20 54 41  17.1 {.  DROP TA
4f10: 42 4c 45 20 49 46 20 45 58 49 53 54 53 20 74 31  BLE IF EXISTS t1
4f20: 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  ;.  CREATE TABLE
4f30: 20 74 31 28 61 20 54 45 58 54 29 3b 0a 20 20 49   t1(a TEXT);.  I
4f40: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 28 61 29  NSERT INTO t1(a)
4f50: 20 56 41 4c 55 45 53 28 31 29 2c 28 32 29 3b 0a   VALUES(1),(2);.
4f60: 20 20 44 52 4f 50 20 54 41 42 4c 45 20 49 46 20    DROP TABLE IF 
4f70: 45 58 49 53 54 53 20 74 32 3b 0a 20 20 43 52 45  EXISTS t2;.  CRE
4f80: 41 54 45 20 54 41 42 4c 45 20 74 32 28 78 20 54  ATE TABLE t2(x T
4f90: 45 58 54 2c 20 79 20 54 45 58 54 29 3b 0a 20 20  EXT, y TEXT);.  
4fa0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 28 78  INSERT INTO t2(x
4fb0: 2c 79 29 20 56 41 4c 55 45 53 28 33 2c 34 29 3b  ,y) VALUES(3,4);
4fc0: 0a 20 20 44 52 4f 50 20 54 41 42 4c 45 20 49 46  .  DROP TABLE IF
4fd0: 20 45 58 49 53 54 53 20 74 33 3b 0a 20 20 43 52   EXISTS t3;.  CR
4fe0: 45 41 54 45 20 54 41 42 4c 45 20 74 33 20 41 53  EATE TABLE t3 AS
4ff0: 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20 41 53  .    SELECT a AS
5000: 20 70 2c 20 63 6f 61 6c 65 73 63 65 28 79 2c 61   p, coalesce(y,a
5010: 29 20 41 53 20 71 20 46 52 4f 4d 20 74 31 20 4c  ) AS q FROM t1 L
5020: 45 46 54 20 4a 4f 49 4e 20 74 32 20 4f 4e 20 61  EFT JOIN t2 ON a
5030: 3d 78 3b 0a 20 20 53 45 4c 45 43 54 20 70 2c 20  =x;.  SELECT p, 
5040: 71 2c 20 27 7c 27 20 46 52 4f 4d 20 74 33 20 4f  q, '|' FROM t3 O
5050: 52 44 45 52 20 42 59 20 70 3b 0a 7d 20 7b 31 20  RDER BY p;.} {1 
5060: 31 20 7c 20 32 20 32 20 7c 7d 0a 0a 66 69 6e 69  1 | 2 2 |}..fini
5070: 73 68 5f 74 65 73 74 0a                          sh_test.