/ Hex Artifact Content
Login

Artifact b708f3e5fa2542fa51dfab21fc07b36ea445cb2f:


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 64 6f 5f 74  ;.  }.} {}..do_t
1be0: 65 73 74 20 74 61 62 6c 65 2d 35 2e 32 2e 32 20  est table-5.2.2 
1bf0: 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 66  {.  db close.  f
1c00: 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73 74 2e  orcedelete test.
1c10: 64 62 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20  db.  sqlite3 db 
1c20: 74 65 73 74 2e 64 62 0a 20 20 64 62 20 65 76 61  test.db.  db eva
1c30: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
1c40: 41 42 4c 45 20 74 30 28 61 2c 62 29 3b 0a 20 20  ABLE t0(a,b);.  
1c50: 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 74    CREATE INDEX t
1c60: 20 4f 4e 20 74 30 28 61 29 3b 0a 20 20 20 20 50   ON t0(a);.    P
1c70: 52 41 47 4d 41 20 77 72 69 74 61 62 6c 65 5f 73  RAGMA writable_s
1c80: 63 68 65 6d 61 3d 4f 4e 3b 0a 20 20 20 20 55 50  chema=ON;.    UP
1c90: 44 41 54 45 20 73 71 6c 69 74 65 5f 6d 61 73 74  DATE sqlite_mast
1ca0: 65 72 20 53 45 54 20 73 71 6c 3d 27 43 52 45 41  er SET sql='CREA
1cb0: 54 45 20 54 41 42 4c 45 20 61 2e 62 28 61 20 55  TE TABLE a.b(a U
1cc0: 4e 49 51 55 45 27 3b 0a 20 20 20 20 42 45 47 49  NIQUE';.    BEGI
1cd0: 4e 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41  N;.    CREATE TA
1ce0: 42 4c 45 20 74 31 28 78 29 3b 0a 20 20 20 20 52  BLE t1(x);.    R
1cf0: 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20 20 44 52 4f  OLLBACK;.    DRO
1d00: 50 20 54 41 42 4c 45 20 49 46 20 45 58 49 53 54  P TABLE IF EXIST
1d10: 53 20 74 39 39 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a  S t99;.  }.} {}.
1d20: 64 62 20 63 6c 6f 73 65 0a 66 6f 72 63 65 64 65  db close.forcede
1d30: 6c 65 74 65 20 74 65 73 74 2e 64 62 0a 73 71 6c  lete test.db.sql
1d40: 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a  ite3 db test.db.
1d50: 0a 23 20 4d 61 6b 65 20 73 75 72 65 20 61 6e 20  .# Make sure an 
1d60: 45 58 50 4c 41 49 4e 20 64 6f 65 73 20 6e 6f 74  EXPLAIN does not
1d70: 20 72 65 61 6c 6c 79 20 63 72 65 61 74 65 20 61   really create a
1d80: 20 6e 65 77 20 74 61 62 6c 65 0a 23 0a 64 6f 5f   new table.#.do_
1d90: 74 65 73 74 20 74 61 62 6c 65 2d 35 2e 33 20 7b  test table-5.3 {
1da0: 0a 20 20 69 66 63 61 70 61 62 6c 65 20 7b 65 78  .  ifcapable {ex
1db0: 70 6c 61 69 6e 7d 20 7b 0a 20 20 20 20 65 78 65  plain} {.    exe
1dc0: 63 73 71 6c 20 7b 45 58 50 4c 41 49 4e 20 43 52  csql {EXPLAIN CR
1dd0: 45 41 54 45 20 54 41 42 4c 45 20 74 65 73 74 31  EATE TABLE test1
1de0: 28 66 31 20 69 6e 74 29 7d 0a 20 20 7d 0a 20 20  (f1 int)}.  }.  
1df0: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
1e00: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
1e10: 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20 74 79  _master WHERE ty
1e20: 70 65 21 3d 27 6d 65 74 61 27 7d 0a 7d 20 7b 7d  pe!='meta'}.} {}
1e30: 0a 0a 23 20 4d 61 6b 65 20 73 75 72 65 20 61 6e  ..# Make sure an
1e40: 20 45 58 50 4c 41 49 4e 20 64 6f 65 73 20 6e 6f   EXPLAIN does no
1e50: 74 20 72 65 61 6c 6c 79 20 64 72 6f 70 20 61 6e  t really drop an
1e60: 20 65 78 69 73 74 69 6e 67 20 74 61 62 6c 65 0a   existing table.
1e70: 23 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d  #.do_test table-
1e80: 35 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  5.4 {.  execsql 
1e90: 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 65  {CREATE TABLE te
1ea0: 73 74 31 28 66 31 20 69 6e 74 29 7d 0a 20 20 69  st1(f1 int)}.  i
1eb0: 66 63 61 70 61 62 6c 65 20 7b 65 78 70 6c 61 69  fcapable {explai
1ec0: 6e 7d 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  n} {.    execsql
1ed0: 20 7b 45 58 50 4c 41 49 4e 20 44 52 4f 50 20 54   {EXPLAIN DROP T
1ee0: 41 42 4c 45 20 74 65 73 74 31 7d 0a 20 20 7d 0a  ABLE test1}.  }.
1ef0: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
1f00: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
1f10: 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20  te_master WHERE 
1f20: 74 79 70 65 21 3d 27 6d 65 74 61 27 7d 0a 7d 20  type!='meta'}.} 
1f30: 7b 74 65 73 74 31 7d 0a 0a 23 20 43 72 65 61 74  {test1}..# Creat
1f40: 65 20 61 20 74 61 62 6c 65 20 77 69 74 68 20 61  e a table with a
1f50: 20 67 6f 6f 66 79 20 6e 61 6d 65 0a 23 0a 23 64   goofy name.#.#d
1f60: 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 36 2e 31  o_test table-6.1
1f70: 20 7b 0a 23 20 20 65 78 65 63 73 71 6c 20 7b 43   {.#  execsql {C
1f80: 52 45 41 54 45 20 54 41 42 4c 45 20 27 53 70 61  REATE TABLE 'Spa
1f90: 63 65 73 20 49 6e 20 54 68 69 73 20 4e 61 6d 65  ces In This Name
1fa0: 21 27 28 78 20 69 6e 74 29 7d 0a 23 20 20 65 78  !'(x int)}.#  ex
1fb0: 65 63 73 71 6c 20 7b 49 4e 53 45 52 54 20 49 4e  ecsql {INSERT IN
1fc0: 54 4f 20 27 73 70 61 63 65 73 20 69 6e 20 74 68  TO 'spaces in th
1fd0: 69 73 20 6e 61 6d 65 21 27 20 56 41 4c 55 45 53  is name!' VALUES
1fe0: 28 31 29 7d 0a 23 20 20 73 65 74 20 6c 69 73 74  (1)}.#  set list
1ff0: 20 5b 67 6c 6f 62 20 2d 6e 6f 63 6f 6d 70 6c 61   [glob -nocompla
2000: 69 6e 20 74 65 73 74 64 62 2f 73 70 61 63 65 73  in testdb/spaces
2010: 2a 2e 74 62 6c 5d 0a 23 7d 20 7b 74 65 73 74 64  *.tbl].#} {testd
2020: 62 2f 73 70 61 63 65 73 2b 69 6e 2b 74 68 69 73  b/spaces+in+this
2030: 2b 6e 61 6d 65 2b 2e 74 62 6c 7d 0a 0a 23 20 54  +name+.tbl}..# T
2040: 72 79 20 75 73 69 6e 67 20 6b 65 79 77 6f 72 64  ry using keyword
2050: 73 20 61 73 20 74 61 62 6c 65 20 6e 61 6d 65 73  s as table names
2060: 20 6f 72 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73   or column names
2070: 2e 0a 23 20 0a 64 6f 5f 74 65 73 74 20 74 61 62  ..# .do_test tab
2080: 6c 65 2d 37 2e 31 20 7b 0a 20 20 73 65 74 20 76  le-7.1 {.  set v
2090: 20 5b 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c   [catch {execsql
20a0: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41   {.    CREATE TA
20b0: 42 4c 45 20 77 65 69 72 64 28 0a 20 20 20 20 20  BLE weird(.     
20c0: 20 64 65 73 63 20 74 65 78 74 2c 0a 20 20 20 20   desc text,.    
20d0: 20 20 61 73 63 20 74 65 78 74 2c 0a 20 20 20 20    asc text,.    
20e0: 20 20 6b 65 79 20 69 6e 74 2c 0a 20 20 20 20 20    key int,.     
20f0: 20 5b 31 34 5f 76 61 63 5d 20 62 6f 6f 6c 65 61   [14_vac] boolea
2100: 6e 2c 0a 20 20 20 20 20 20 66 75 7a 7a 79 5f 64  n,.      fuzzy_d
2110: 6f 67 5f 31 32 20 76 61 72 63 68 61 72 28 31 30  og_12 varchar(10
2120: 29 2c 0a 20 20 20 20 20 20 62 65 67 69 6e 20 62  ),.      begin b
2130: 6c 6f 62 2c 0a 20 20 20 20 20 20 65 6e 64 20 63  lob,.      end c
2140: 6c 6f 62 0a 20 20 20 20 29 0a 20 20 7d 7d 20 6d  lob.    ).  }} m
2150: 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20  sg].  lappend v 
2160: 24 6d 73 67 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f  $msg.} {0 {}}.do
2170: 5f 74 65 73 74 20 74 61 62 6c 65 2d 37 2e 32 20  _test table-7.2 
2180: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
2190: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 77 65    INSERT INTO we
21a0: 69 72 64 20 56 41 4c 55 45 53 28 27 61 27 2c 27  ird VALUES('a','
21b0: 62 27 2c 39 2c 30 2c 27 78 79 7a 27 2c 27 68 69  b',9,0,'xyz','hi
21c0: 27 2c 27 79 27 27 61 6c 6c 27 29 3b 0a 20 20 20  ','y''all');.   
21d0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 77   SELECT * FROM w
21e0: 65 69 72 64 3b 0a 20 20 7d 0a 7d 20 7b 61 20 62  eird;.  }.} {a b
21f0: 20 39 20 30 20 78 79 7a 20 68 69 20 79 27 61 6c   9 0 xyz hi y'al
2200: 6c 7d 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65  l}.do_test table
2210: 2d 37 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c  -7.3 {.  execsql
2220: 32 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  2 {.    SELECT *
2230: 20 46 52 4f 4d 20 77 65 69 72 64 3b 0a 20 20 7d   FROM weird;.  }
2240: 0a 7d 20 7b 64 65 73 63 20 61 20 61 73 63 20 62  .} {desc a asc b
2250: 20 6b 65 79 20 39 20 31 34 5f 76 61 63 20 30 20   key 9 14_vac 0 
2260: 66 75 7a 7a 79 5f 64 6f 67 5f 31 32 20 78 79 7a  fuzzy_dog_12 xyz
2270: 20 62 65 67 69 6e 20 68 69 20 65 6e 64 20 79 27   begin hi end y'
2280: 61 6c 6c 7d 0a 64 6f 5f 74 65 73 74 20 74 61 62  all}.do_test tab
2290: 6c 65 2d 37 2e 33 20 7b 0a 20 20 65 78 65 63 73  le-7.3 {.  execs
22a0: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
22b0: 54 41 42 4c 45 20 73 61 76 65 70 6f 69 6e 74 28  TABLE savepoint(
22c0: 72 65 6c 65 61 73 65 29 3b 0a 20 20 20 20 49 4e  release);.    IN
22d0: 53 45 52 54 20 49 4e 54 4f 20 73 61 76 65 70 6f  SERT INTO savepo
22e0: 69 6e 74 28 72 65 6c 65 61 73 65 29 20 56 41 4c  int(release) VAL
22f0: 55 45 53 28 31 30 29 3b 0a 20 20 20 20 55 50 44  UES(10);.    UPD
2300: 41 54 45 20 73 61 76 65 70 6f 69 6e 74 20 53 45  ATE savepoint SE
2310: 54 20 72 65 6c 65 61 73 65 20 3d 20 35 3b 0a 20  T release = 5;. 
2320: 20 20 20 53 45 4c 45 43 54 20 72 65 6c 65 61 73     SELECT releas
2330: 65 20 46 52 4f 4d 20 73 61 76 65 70 6f 69 6e 74  e FROM savepoint
2340: 3b 0a 20 20 7d 0a 7d 20 7b 35 7d 0a 0a 23 20 54  ;.  }.} {5}..# T
2350: 72 79 20 6f 75 74 20 74 68 65 20 43 52 45 41 54  ry out the CREAT
2360: 45 20 54 41 42 4c 45 20 41 53 20 73 79 6e 74 61  E TABLE AS synta
2370: 78 0a 23 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c  x.#.do_test tabl
2380: 65 2d 38 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  e-8.1 {.  execsq
2390: 6c 32 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  l2 {.    CREATE 
23a0: 54 41 42 4c 45 20 74 32 20 41 53 20 53 45 4c 45  TABLE t2 AS SELE
23b0: 43 54 20 2a 20 46 52 4f 4d 20 77 65 69 72 64 3b  CT * FROM weird;
23c0: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
23d0: 4f 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b 64 65  OM t2;.  }.} {de
23e0: 73 63 20 61 20 61 73 63 20 62 20 6b 65 79 20 39  sc a asc b key 9
23f0: 20 31 34 5f 76 61 63 20 30 20 66 75 7a 7a 79 5f   14_vac 0 fuzzy_
2400: 64 6f 67 5f 31 32 20 78 79 7a 20 62 65 67 69 6e  dog_12 xyz begin
2410: 20 68 69 20 65 6e 64 20 79 27 61 6c 6c 7d 0a 64   hi end y'all}.d
2420: 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 38 2e 31  o_test table-8.1
2430: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
2440: 0a 20 20 20 20 53 45 4c 45 43 54 20 73 71 6c 20  .    SELECT sql 
2450: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
2460: 65 72 20 57 48 45 52 45 20 6e 61 6d 65 3d 27 74  er WHERE name='t
2470: 32 27 3b 0a 20 20 7d 0a 7d 20 7b 7b 43 52 45 41  2';.  }.} {{CREA
2480: 54 45 20 54 41 42 4c 45 20 74 32 28 0a 20 20 22  TE TABLE t2(.  "
2490: 64 65 73 63 22 20 54 45 58 54 2c 0a 20 20 22 61  desc" TEXT,.  "a
24a0: 73 63 22 20 54 45 58 54 2c 0a 20 20 22 6b 65 79  sc" TEXT,.  "key
24b0: 22 20 49 4e 54 2c 0a 20 20 22 31 34 5f 76 61 63  " INT,.  "14_vac
24c0: 22 20 4e 55 4d 2c 0a 20 20 66 75 7a 7a 79 5f 64  " NUM,.  fuzzy_d
24d0: 6f 67 5f 31 32 20 54 45 58 54 2c 0a 20 20 22 62  og_12 TEXT,.  "b
24e0: 65 67 69 6e 22 2c 0a 20 20 22 65 6e 64 22 20 54  egin",.  "end" T
24f0: 45 58 54 0a 29 7d 7d 0a 64 6f 5f 74 65 73 74 20  EXT.)}}.do_test 
2500: 74 61 62 6c 65 2d 38 2e 32 20 7b 0a 20 20 65 78  table-8.2 {.  ex
2510: 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41  ecsql {.    CREA
2520: 54 45 20 54 41 42 4c 45 20 22 74 33 22 22 78 79  TE TABLE "t3""xy
2530: 7a 22 28 61 2c 62 2c 63 29 3b 0a 20 20 20 20 49  z"(a,b,c);.    I
2540: 4e 53 45 52 54 20 49 4e 54 4f 20 5b 74 33 22 78  NSERT INTO [t3"x
2550: 79 7a 5d 20 56 41 4c 55 45 53 28 31 2c 32 2c 33  yz] VALUES(1,2,3
2560: 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20  );.    SELECT * 
2570: 46 52 4f 4d 20 5b 74 33 22 78 79 7a 5d 3b 0a 20  FROM [t3"xyz];. 
2580: 20 7d 0a 7d 20 7b 31 20 32 20 33 7d 0a 64 6f 5f   }.} {1 2 3}.do_
2590: 74 65 73 74 20 74 61 62 6c 65 2d 38 2e 33 20 7b  test table-8.3 {
25a0: 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 0a 20 20  .  execsql2 {.  
25b0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 5b    CREATE TABLE [
25c0: 74 34 22 61 62 63 5d 20 41 53 20 53 45 4c 45 43  t4"abc] AS SELEC
25d0: 54 20 63 6f 75 6e 74 28 2a 29 20 61 73 20 63 6e  T count(*) as cn
25e0: 74 2c 20 6d 61 78 28 62 2b 63 29 20 46 52 4f 4d  t, max(b+c) FROM
25f0: 20 5b 74 33 22 78 79 7a 5d 3b 0a 20 20 20 20 53   [t3"xyz];.    S
2600: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 5b 74 34  ELECT * FROM [t4
2610: 22 61 62 63 5d 3b 0a 20 20 7d 0a 7d 20 7b 63 6e  "abc];.  }.} {cn
2620: 74 20 31 20 6d 61 78 28 62 2b 63 29 20 35 7d 0a  t 1 max(b+c) 5}.
2630: 0a 23 20 55 70 64 61 74 65 20 66 6f 72 20 76 33  .# Update for v3
2640: 3a 20 54 68 65 20 64 65 63 6c 61 72 61 74 69 6f  : The declaratio
2650: 6e 20 74 79 70 65 20 6f 66 20 61 6e 79 74 68 69  n type of anythi
2660: 6e 67 20 65 78 63 65 70 74 20 61 20 63 6f 6c 75  ng except a colu
2670: 6d 6e 20 69 73 20 6e 6f 77 20 61 0a 23 20 4e 55  mn is now a.# NU
2680: 4c 4c 20 70 6f 69 6e 74 65 72 2c 20 73 6f 20 74  LL pointer, so t
2690: 68 65 20 63 72 65 61 74 65 64 20 74 61 62 6c 65  he created table
26a0: 20 68 61 73 20 6e 6f 20 63 6f 6c 75 6d 6e 20 74   has no column t
26b0: 79 70 65 73 2e 20 28 43 68 61 6e 67 65 64 20 72  ypes. (Changed r
26c0: 65 73 75 6c 74 0a 23 20 66 72 6f 6d 20 7b 7b 43  esult.# from {{C
26d0: 52 45 41 54 45 20 54 41 42 4c 45 20 27 74 34 22  REATE TABLE 't4"
26e0: 61 62 63 27 28 63 6e 74 20 4e 55 4d 45 52 49 43  abc'(cnt NUMERIC
26f0: 2c 22 6d 61 78 28 62 2b 63 29 22 20 4e 55 4d 45  ,"max(b+c)" NUME
2700: 52 49 43 29 7d 7d 29 2e 0a 64 6f 5f 74 65 73 74  RIC)}})..do_test
2710: 20 74 61 62 6c 65 2d 38 2e 33 2e 31 20 7b 0a 20   table-8.3.1 {. 
2720: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
2730: 45 4c 45 43 54 20 73 71 6c 20 46 52 4f 4d 20 73  ELECT sql FROM s
2740: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45  qlite_master WHE
2750: 52 45 20 6e 61 6d 65 3d 27 74 34 22 61 62 63 27  RE name='t4"abc'
2760: 0a 20 20 7d 0a 7d 20 7b 7b 43 52 45 41 54 45 20  .  }.} {{CREATE 
2770: 54 41 42 4c 45 20 22 74 34 22 22 61 62 63 22 28  TABLE "t4""abc"(
2780: 63 6e 74 2c 22 6d 61 78 28 62 2b 63 29 22 29 7d  cnt,"max(b+c)")}
2790: 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20 74 65 6d  }..ifcapable tem
27a0: 70 64 62 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  pdb {.  do_test 
27b0: 74 61 62 6c 65 2d 38 2e 34 20 7b 0a 20 20 20 20  table-8.4 {.    
27c0: 65 78 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 20  execsql2 {.     
27d0: 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52   CREATE TEMPORAR
27e0: 59 20 54 41 42 4c 45 20 74 35 20 41 53 20 53 45  Y TABLE t5 AS SE
27f0: 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 41 53  LECT count(*) AS
2800: 20 5b 79 27 61 6c 6c 5d 20 46 52 4f 4d 20 5b 74   [y'all] FROM [t
2810: 33 22 78 79 7a 5d 3b 0a 20 20 20 20 20 20 53 45  3"xyz];.      SE
2820: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 35 3b 0a  LECT * FROM t5;.
2830: 20 20 20 20 7d 0a 20 20 7d 20 7b 79 27 61 6c 6c      }.  } {y'all
2840: 20 31 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20 74   1}.}..do_test t
2850: 61 62 6c 65 2d 38 2e 35 20 7b 0a 20 20 64 62 20  able-8.5 {.  db 
2860: 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 20  close.  sqlite3 
2870: 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65 78 65  db test.db.  exe
2880: 63 73 71 6c 32 20 7b 0a 20 20 20 20 53 45 4c 45  csql2 {.    SELE
2890: 43 54 20 2a 20 46 52 4f 4d 20 5b 74 34 22 61 62  CT * FROM [t4"ab
28a0: 63 5d 3b 0a 20 20 7d 0a 7d 20 7b 63 6e 74 20 31  c];.  }.} {cnt 1
28b0: 20 6d 61 78 28 62 2b 63 29 20 35 7d 0a 64 6f 5f   max(b+c) 5}.do_
28c0: 74 65 73 74 20 74 61 62 6c 65 2d 38 2e 36 20 7b  test table-8.6 {
28d0: 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 0a 20 20  .  execsql2 {.  
28e0: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
28f0: 74 32 3b 0a 20 20 7d 0a 7d 20 7b 64 65 73 63 20  t2;.  }.} {desc 
2900: 61 20 61 73 63 20 62 20 6b 65 79 20 39 20 31 34  a asc b key 9 14
2910: 5f 76 61 63 20 30 20 66 75 7a 7a 79 5f 64 6f 67  _vac 0 fuzzy_dog
2920: 5f 31 32 20 78 79 7a 20 62 65 67 69 6e 20 68 69  _12 xyz begin hi
2930: 20 65 6e 64 20 79 27 61 6c 6c 7d 0a 64 6f 5f 74   end y'all}.do_t
2940: 65 73 74 20 74 61 62 6c 65 2d 38 2e 37 20 7b 0a  est table-8.7 {.
2950: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
2960: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
2970: 35 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 6e 6f 20  5;.  }.} {1 {no 
2980: 73 75 63 68 20 74 61 62 6c 65 3a 20 74 35 7d 7d  such table: t5}}
2990: 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 38  .do_test table-8
29a0: 2e 38 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  .8 {.  catchsql 
29b0: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  {.    CREATE TAB
29c0: 4c 45 20 74 35 20 41 53 20 53 45 4c 45 43 54 20  LE t5 AS SELECT 
29d0: 2a 20 46 52 4f 4d 20 6e 6f 5f 73 75 63 68 5f 74  * FROM no_such_t
29e0: 61 62 6c 65 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b  able;.  }.} {1 {
29f0: 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20 6e  no such table: n
2a00: 6f 5f 73 75 63 68 5f 74 61 62 6c 65 7d 7d 0a 0a  o_such_table}}..
2a10: 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 38 2e  do_test table-8.
2a20: 39 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  9 {.  execsql {.
2a30: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
2a40: 20 74 31 30 28 22 63 6f 6c 2e 31 22 20 5b 63 68   t10("col.1" [ch
2a50: 61 72 2e 33 5d 29 3b 0a 20 20 20 20 43 52 45 41  ar.3]);.    CREA
2a60: 54 45 20 54 41 42 4c 45 20 74 31 31 20 41 53 20  TE TABLE t11 AS 
2a70: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
2a80: 30 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 73 71  0;.    SELECT sq
2a90: 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  l FROM sqlite_ma
2aa0: 73 74 65 72 20 57 48 45 52 45 20 6e 61 6d 65 20  ster WHERE name 
2ab0: 3d 20 27 74 31 31 27 3b 0a 20 20 7d 0a 7d 20 7b  = 't11';.  }.} {
2ac0: 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31  {CREATE TABLE t1
2ad0: 31 28 22 63 6f 6c 2e 31 22 20 54 45 58 54 29 7d  1("col.1" TEXT)}
2ae0: 7d 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d  }.do_test table-
2af0: 38 2e 31 30 20 7b 0a 20 20 65 78 65 63 73 71 6c  8.10 {.  execsql
2b00: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41   {.    CREATE TA
2b10: 42 4c 45 20 74 31 32 28 0a 20 20 20 20 20 20 61  BLE t12(.      a
2b20: 20 49 4e 54 45 47 45 52 2c 0a 20 20 20 20 20 20   INTEGER,.      
2b30: 62 20 56 41 52 43 48 41 52 28 31 30 29 2c 0a 20  b VARCHAR(10),. 
2b40: 20 20 20 20 20 63 20 56 41 52 43 48 41 52 28 31       c VARCHAR(1
2b50: 2c 31 30 29 2c 0a 20 20 20 20 20 20 64 20 56 41  ,10),.      d VA
2b60: 52 43 48 41 52 28 2b 31 2c 2d 31 30 29 2c 0a 20  RCHAR(+1,-10),. 
2b70: 20 20 20 20 20 65 20 56 41 52 43 48 41 52 20 28       e VARCHAR (
2b80: 2b 31 2c 2d 31 30 29 2c 0a 20 20 20 20 20 20 66  +1,-10),.      f
2b90: 20 22 56 41 52 43 48 41 52 20 28 2b 31 2c 2d 31   "VARCHAR (+1,-1
2ba0: 30 2c 20 35 29 22 2c 0a 20 20 20 20 20 20 67 20  0, 5)",.      g 
2bb0: 42 49 47 20 49 4e 54 45 47 45 52 0a 20 20 20 20  BIG INTEGER.    
2bc0: 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41  );.    CREATE TA
2bd0: 42 4c 45 20 74 31 33 20 41 53 20 53 45 4c 45 43  BLE t13 AS SELEC
2be0: 54 20 2a 20 46 52 4f 4d 20 74 31 32 3b 0a 20 20  T * FROM t12;.  
2bf0: 20 20 53 45 4c 45 43 54 20 73 71 6c 20 46 52 4f    SELECT sql FRO
2c00: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  M sqlite_master 
2c10: 57 48 45 52 45 20 6e 61 6d 65 20 3d 20 27 74 31  WHERE name = 't1
2c20: 33 27 3b 0a 20 20 7d 0a 7d 20 7b 7b 43 52 45 41  3';.  }.} {{CREA
2c30: 54 45 20 54 41 42 4c 45 20 74 31 33 28 0a 20 20  TE TABLE t13(.  
2c40: 61 20 49 4e 54 2c 0a 20 20 62 20 54 45 58 54 2c  a INT,.  b TEXT,
2c50: 0a 20 20 63 20 54 45 58 54 2c 0a 20 20 64 20 54  .  c TEXT,.  d T
2c60: 45 58 54 2c 0a 20 20 65 20 54 45 58 54 2c 0a 20  EXT,.  e TEXT,. 
2c70: 20 66 20 54 45 58 54 2c 0a 20 20 67 20 49 4e 54   f TEXT,.  g INT
2c80: 0a 29 7d 7d 0a 0a 23 20 4d 61 6b 65 20 73 75 72  .)}}..# Make sur
2c90: 65 20 77 65 20 63 61 6e 6e 6f 74 20 68 61 76 65  e we cannot have
2ca0: 20 64 75 70 6c 69 63 61 74 65 20 63 6f 6c 75 6d   duplicate colum
2cb0: 6e 20 6e 61 6d 65 73 20 77 69 74 68 69 6e 20 61  n names within a
2cc0: 20 74 61 62 6c 65 2e 0a 23 0a 64 6f 5f 74 65 73   table..#.do_tes
2cd0: 74 20 74 61 62 6c 65 2d 39 2e 31 20 7b 0a 20 20  t table-9.1 {.  
2ce0: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 43  catchsql {.    C
2cf0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 36 28 61  REATE TABLE t6(a
2d00: 2c 62 2c 61 29 3b 0a 20 20 7d 0a 7d 20 7b 31 20  ,b,a);.  }.} {1 
2d10: 7b 64 75 70 6c 69 63 61 74 65 20 63 6f 6c 75 6d  {duplicate colum
2d20: 6e 20 6e 61 6d 65 3a 20 61 7d 7d 0a 64 6f 5f 74  n name: a}}.do_t
2d30: 65 73 74 20 74 61 62 6c 65 2d 39 2e 32 20 7b 0a  est table-9.2 {.
2d40: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
2d50: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 36   CREATE TABLE t6
2d60: 28 61 20 76 61 72 63 68 61 72 28 31 30 30 29 2c  (a varchar(100),
2d70: 20 62 20 62 6c 6f 62 2c 20 61 20 69 6e 74 65 67   b blob, a integ
2d80: 65 72 29 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 64  er);.  }.} {1 {d
2d90: 75 70 6c 69 63 61 74 65 20 63 6f 6c 75 6d 6e 20  uplicate column 
2da0: 6e 61 6d 65 3a 20 61 7d 7d 0a 0a 23 20 43 68 65  name: a}}..# Che
2db0: 63 6b 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b  ck the foreign k
2dc0: 65 79 20 73 79 6e 74 61 78 2e 0a 23 0a 69 66 63  ey syntax..#.ifc
2dd0: 61 70 61 62 6c 65 20 7b 66 6f 72 65 69 67 6e 6b  apable {foreignk
2de0: 65 79 7d 20 7b 0a 64 6f 5f 74 65 73 74 20 74 61  ey} {.do_test ta
2df0: 62 6c 65 2d 31 30 2e 31 20 7b 0a 20 20 63 61 74  ble-10.1 {.  cat
2e00: 63 68 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41  chsql {.    CREA
2e10: 54 45 20 54 41 42 4c 45 20 74 36 28 61 20 52 45  TE TABLE t6(a RE
2e20: 46 45 52 45 4e 43 45 53 20 74 34 28 61 29 20 4e  FERENCES t4(a) N
2e30: 4f 54 20 4e 55 4c 4c 29 3b 0a 20 20 20 20 49 4e  OT NULL);.    IN
2e40: 53 45 52 54 20 49 4e 54 4f 20 74 36 20 56 41 4c  SERT INTO t6 VAL
2e50: 55 45 53 28 4e 55 4c 4c 29 3b 0a 20 20 7d 0a 7d  UES(NULL);.  }.}
2e60: 20 7b 31 20 7b 4e 4f 54 20 4e 55 4c 4c 20 63 6f   {1 {NOT NULL co
2e70: 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a  nstraint failed:
2e80: 20 74 36 2e 61 7d 7d 0a 64 6f 5f 74 65 73 74 20   t6.a}}.do_test 
2e90: 74 61 62 6c 65 2d 31 30 2e 32 20 7b 0a 20 20 63  table-10.2 {.  c
2ea0: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 44 52  atchsql {.    DR
2eb0: 4f 50 20 54 41 42 4c 45 20 74 36 3b 0a 20 20 20  OP TABLE t6;.   
2ec0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 36   CREATE TABLE t6
2ed0: 28 61 20 52 45 46 45 52 45 4e 43 45 53 20 74 34  (a REFERENCES t4
2ee0: 28 61 29 20 4d 41 54 43 48 20 50 41 52 54 49 41  (a) MATCH PARTIA
2ef0: 4c 29 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d  L);.  }.} {0 {}}
2f00: 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 31  .do_test table-1
2f10: 30 2e 33 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  0.3 {.  catchsql
2f20: 20 7b 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c   {.    DROP TABL
2f30: 45 20 74 36 3b 0a 20 20 20 20 43 52 45 41 54 45  E t6;.    CREATE
2f40: 20 54 41 42 4c 45 20 74 36 28 61 20 52 45 46 45   TABLE t6(a REFE
2f50: 52 45 4e 43 45 53 20 74 34 20 4d 41 54 43 48 20  RENCES t4 MATCH 
2f60: 46 55 4c 4c 20 4f 4e 20 44 45 4c 45 54 45 20 53  FULL ON DELETE S
2f70: 45 54 20 4e 55 4c 4c 20 4e 4f 54 20 4e 55 4c 4c  ET NULL NOT NULL
2f80: 29 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a  );.  }.} {0 {}}.
2f90: 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 31 30  do_test table-10
2fa0: 2e 34 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  .4 {.  catchsql 
2fb0: 7b 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45  {.    DROP TABLE
2fc0: 20 74 36 3b 0a 20 20 20 20 43 52 45 41 54 45 20   t6;.    CREATE 
2fd0: 54 41 42 4c 45 20 74 36 28 61 20 52 45 46 45 52  TABLE t6(a REFER
2fe0: 45 4e 43 45 53 20 74 34 20 4d 41 54 43 48 20 46  ENCES t4 MATCH F
2ff0: 55 4c 4c 20 4f 4e 20 55 50 44 41 54 45 20 53 45  ULL ON UPDATE SE
3000: 54 20 44 45 46 41 55 4c 54 20 44 45 46 41 55 4c  T DEFAULT DEFAUL
3010: 54 20 31 29 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b  T 1);.  }.} {0 {
3020: 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65  }}.do_test table
3030: 2d 31 30 2e 35 20 7b 0a 20 20 63 61 74 63 68 73  -10.5 {.  catchs
3040: 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20 54 41  ql {.    DROP TA
3050: 42 4c 45 20 74 36 3b 0a 20 20 20 20 43 52 45 41  BLE t6;.    CREA
3060: 54 45 20 54 41 42 4c 45 20 74 36 28 61 20 4e 4f  TE TABLE t6(a NO
3070: 54 20 4e 55 4c 4c 20 4e 4f 54 20 44 45 46 45 52  T NULL NOT DEFER
3080: 52 41 42 4c 45 20 49 4e 49 54 49 41 4c 4c 59 20  RABLE INITIALLY 
3090: 49 4d 4d 45 44 49 41 54 45 29 3b 0a 20 20 7d 0a  IMMEDIATE);.  }.
30a0: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
30b0: 20 74 61 62 6c 65 2d 31 30 2e 36 20 7b 0a 20 20   table-10.6 {.  
30c0: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 44  catchsql {.    D
30d0: 52 4f 50 20 54 41 42 4c 45 20 74 36 3b 0a 20 20  ROP TABLE t6;.  
30e0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
30f0: 36 28 61 20 4e 4f 54 20 4e 55 4c 4c 20 44 45 46  6(a NOT NULL DEF
3100: 45 52 52 41 42 4c 45 20 49 4e 49 54 49 41 4c 4c  ERRABLE INITIALL
3110: 59 20 44 45 46 45 52 52 45 44 29 3b 0a 20 20 7d  Y DEFERRED);.  }
3120: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
3130: 74 20 74 61 62 6c 65 2d 31 30 2e 37 20 7b 0a 20  t table-10.7 {. 
3140: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
3150: 44 52 4f 50 20 54 41 42 4c 45 20 74 36 3b 0a 20  DROP TABLE t6;. 
3160: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
3170: 74 36 28 61 2c 0a 20 20 20 20 20 20 46 4f 52 45  t6(a,.      FORE
3180: 49 47 4e 20 4b 45 59 20 28 61 29 20 52 45 46 45  IGN KEY (a) REFE
3190: 52 45 4e 43 45 53 20 74 34 28 62 29 20 44 45 46  RENCES t4(b) DEF
31a0: 45 52 52 41 42 4c 45 20 49 4e 49 54 49 41 4c 4c  ERRABLE INITIALL
31b0: 59 20 44 45 46 45 52 52 45 44 0a 20 20 20 20 29  Y DEFERRED.    )
31c0: 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  ;.  }.} {0 {}}.d
31d0: 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 31 30 2e  o_test table-10.
31e0: 38 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  8 {.  catchsql {
31f0: 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20  .    DROP TABLE 
3200: 74 36 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54  t6;.    CREATE T
3210: 41 42 4c 45 20 74 36 28 61 2c 62 2c 63 2c 0a 20  ABLE t6(a,b,c,. 
3220: 20 20 20 20 20 46 4f 52 45 49 47 4e 20 4b 45 59       FOREIGN KEY
3230: 20 28 62 2c 63 29 20 52 45 46 45 52 45 4e 43 45   (b,c) REFERENCE
3240: 53 20 74 34 28 78 2c 79 29 20 4d 41 54 43 48 20  S t4(x,y) MATCH 
3250: 50 41 52 54 49 41 4c 0a 20 20 20 20 20 20 20 20  PARTIAL.        
3260: 4f 4e 20 55 50 44 41 54 45 20 53 45 54 20 4e 55  ON UPDATE SET NU
3270: 4c 4c 20 4f 4e 20 44 45 4c 45 54 45 20 43 41 53  LL ON DELETE CAS
3280: 43 41 44 45 20 44 45 46 45 52 52 41 42 4c 45 20  CADE DEFERRABLE 
3290: 49 4e 49 54 49 41 4c 4c 59 20 44 45 46 45 52 52  INITIALLY DEFERR
32a0: 45 44 0a 20 20 20 20 29 3b 0a 20 20 7d 0a 7d 20  ED.    );.  }.} 
32b0: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 74  {0 {}}.do_test t
32c0: 61 62 6c 65 2d 31 30 2e 39 20 7b 0a 20 20 63 61  able-10.9 {.  ca
32d0: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f  tchsql {.    DRO
32e0: 50 20 54 41 42 4c 45 20 74 36 3b 0a 20 20 20 20  P TABLE t6;.    
32f0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 36 28  CREATE TABLE t6(
3300: 61 2c 62 2c 63 2c 0a 20 20 20 20 20 20 46 4f 52  a,b,c,.      FOR
3310: 45 49 47 4e 20 4b 45 59 20 28 62 2c 63 29 20 52  EIGN KEY (b,c) R
3320: 45 46 45 52 45 4e 43 45 53 20 74 34 28 78 29 0a  EFERENCES t4(x).
3330: 20 20 20 20 29 3b 0a 20 20 7d 0a 7d 20 7b 31 20      );.  }.} {1 
3340: 7b 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d  {number of colum
3350: 6e 73 20 69 6e 20 66 6f 72 65 69 67 6e 20 6b 65  ns in foreign ke
3360: 79 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68  y does not match
3370: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
3380: 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 72 65  olumns in the re
3390: 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65 7d 7d  ferenced table}}
33a0: 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 31  .do_test table-1
33b0: 30 2e 31 30 20 7b 0a 20 20 63 61 74 63 68 73 71  0.10 {.  catchsq
33c0: 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45 20 74 36  l {DROP TABLE t6
33d0: 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  }.  catchsql {. 
33e0: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
33f0: 74 36 28 61 2c 62 2c 63 2c 0a 20 20 20 20 20 20  t6(a,b,c,.      
3400: 46 4f 52 45 49 47 4e 20 4b 45 59 20 28 62 2c 63  FOREIGN KEY (b,c
3410: 29 20 52 45 46 45 52 45 4e 43 45 53 20 74 34 28  ) REFERENCES t4(
3420: 78 2c 79 2c 7a 29 0a 20 20 20 20 29 3b 0a 20 20  x,y,z).    );.  
3430: 7d 0a 7d 20 7b 31 20 7b 6e 75 6d 62 65 72 20 6f  }.} {1 {number o
3440: 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 66 6f 72  f columns in for
3450: 65 69 67 6e 20 6b 65 79 20 64 6f 65 73 20 6e 6f  eign key does no
3460: 74 20 6d 61 74 63 68 20 74 68 65 20 6e 75 6d 62  t match the numb
3470: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
3480: 20 74 68 65 20 72 65 66 65 72 65 6e 63 65 64 20   the referenced 
3490: 74 61 62 6c 65 7d 7d 0a 64 6f 5f 74 65 73 74 20  table}}.do_test 
34a0: 74 61 62 6c 65 2d 31 30 2e 31 31 20 7b 0a 20 20  table-10.11 {.  
34b0: 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 54  catchsql {DROP T
34c0: 41 42 4c 45 20 74 36 7d 0a 20 20 63 61 74 63 68  ABLE t6}.  catch
34d0: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
34e0: 20 54 41 42 4c 45 20 74 36 28 61 2c 62 2c 20 63   TABLE t6(a,b, c
34f0: 20 52 45 46 45 52 45 4e 43 45 53 20 74 34 28 78   REFERENCES t4(x
3500: 2c 79 29 29 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b  ,y));.  }.} {1 {
3510: 66 6f 72 65 69 67 6e 20 6b 65 79 20 6f 6e 20 63  foreign key on c
3520: 20 73 68 6f 75 6c 64 20 72 65 66 65 72 65 6e 63   should referenc
3530: 65 20 6f 6e 6c 79 20 6f 6e 65 20 63 6f 6c 75 6d  e only one colum
3540: 6e 20 6f 66 20 74 61 62 6c 65 20 74 34 7d 7d 0a  n of table t4}}.
3550: 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 31 30  do_test table-10
3560: 2e 31 32 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  .12 {.  catchsql
3570: 20 7b 44 52 4f 50 20 54 41 42 4c 45 20 74 36 7d   {DROP TABLE t6}
3580: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
3590: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
35a0: 36 28 61 2c 62 2c 63 2c 0a 20 20 20 20 20 20 46  6(a,b,c,.      F
35b0: 4f 52 45 49 47 4e 20 4b 45 59 20 28 62 2c 78 29  OREIGN KEY (b,x)
35c0: 20 52 45 46 45 52 45 4e 43 45 53 20 74 34 28 78   REFERENCES t4(x
35d0: 2c 79 29 0a 20 20 20 20 29 3b 0a 20 20 7d 0a 7d  ,y).    );.  }.}
35e0: 20 7b 31 20 7b 75 6e 6b 6e 6f 77 6e 20 63 6f 6c   {1 {unknown col
35f0: 75 6d 6e 20 22 78 22 20 69 6e 20 66 6f 72 65 69  umn "x" in forei
3600: 67 6e 20 6b 65 79 20 64 65 66 69 6e 69 74 69 6f  gn key definitio
3610: 6e 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c  n}}.do_test tabl
3620: 65 2d 31 30 2e 31 33 20 7b 0a 20 20 63 61 74 63  e-10.13 {.  catc
3630: 68 73 71 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45  hsql {DROP TABLE
3640: 20 74 36 7d 0a 20 20 63 61 74 63 68 73 71 6c 20   t6}.  catchsql 
3650: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  {.    CREATE TAB
3660: 4c 45 20 74 36 28 61 2c 62 2c 63 2c 0a 20 20 20  LE t6(a,b,c,.   
3670: 20 20 20 46 4f 52 45 49 47 4e 20 4b 45 59 20 28     FOREIGN KEY (
3680: 78 2c 62 29 20 52 45 46 45 52 45 4e 43 45 53 20  x,b) REFERENCES 
3690: 74 34 28 78 2c 79 29 0a 20 20 20 20 29 3b 0a 20  t4(x,y).    );. 
36a0: 20 7d 0a 7d 20 7b 31 20 7b 75 6e 6b 6e 6f 77 6e   }.} {1 {unknown
36b0: 20 63 6f 6c 75 6d 6e 20 22 78 22 20 69 6e 20 66   column "x" in f
36c0: 6f 72 65 69 67 6e 20 6b 65 79 20 64 65 66 69 6e  oreign key defin
36d0: 69 74 69 6f 6e 7d 7d 0a 7d 20 3b 23 20 65 6e 64  ition}}.} ;# end
36e0: 69 66 20 66 6f 72 65 69 67 6e 6b 65 79 0a 0a 23  if foreignkey..#
36f0: 20 54 65 73 74 20 66 6f 72 20 74 68 65 20 22 74   Test for the "t
3700: 79 70 65 6f 66 22 20 66 75 6e 63 74 69 6f 6e 2e  ypeof" function.
3710: 20 4d 6f 72 65 20 74 65 73 74 73 20 66 6f 72 20   More tests for 
3720: 74 68 65 0a 23 20 74 79 70 65 6f 66 28 29 20 66  the.# typeof() f
3730: 75 6e 63 74 69 6f 6e 20 61 72 65 20 66 6f 75 6e  unction are foun
3740: 64 20 69 6e 20 62 69 6e 64 2e 74 65 73 74 20 61  d in bind.test a
3750: 6e 64 20 74 79 70 65 73 2e 74 65 73 74 2e 0a 23  nd types.test..#
3760: 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 31  .do_test table-1
3770: 31 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  1.1 {.  execsql 
3780: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  {.    CREATE TAB
3790: 4c 45 20 74 37 28 0a 20 20 20 20 20 20 20 61 20  LE t7(.       a 
37a0: 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20  integer primary 
37b0: 6b 65 79 2c 0a 20 20 20 20 20 20 20 62 20 6e 75  key,.       b nu
37c0: 6d 62 65 72 28 35 2c 31 30 29 2c 0a 20 20 20 20  mber(5,10),.    
37d0: 20 20 20 63 20 63 68 61 72 61 63 74 65 72 20 76     c character v
37e0: 61 72 79 69 6e 67 20 28 38 29 2c 0a 20 20 20 20  arying (8),.    
37f0: 20 20 20 64 20 56 41 52 43 48 41 52 28 39 29 2c     d VARCHAR(9),
3800: 0a 20 20 20 20 20 20 20 65 20 63 6c 6f 62 2c 0a  .       e clob,.
3810: 20 20 20 20 20 20 20 66 20 42 4c 4f 42 2c 0a 20         f BLOB,. 
3820: 20 20 20 20 20 20 67 20 54 65 78 74 2c 0a 20 20        g Text,.  
3830: 20 20 20 20 20 68 0a 20 20 20 20 29 3b 0a 20 20       h.    );.  
3840: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 37    INSERT INTO t7
3850: 28 61 29 20 56 41 4c 55 45 53 28 31 29 3b 0a 20  (a) VALUES(1);. 
3860: 20 20 20 53 45 4c 45 43 54 20 74 79 70 65 6f 66     SELECT typeof
3870: 28 61 29 2c 20 74 79 70 65 6f 66 28 62 29 2c 20  (a), typeof(b), 
3880: 74 79 70 65 6f 66 28 63 29 2c 20 74 79 70 65 6f  typeof(c), typeo
3890: 66 28 64 29 2c 0a 20 20 20 20 20 20 20 20 20 20  f(d),.          
38a0: 20 74 79 70 65 6f 66 28 65 29 2c 20 74 79 70 65   typeof(e), type
38b0: 6f 66 28 66 29 2c 20 74 79 70 65 6f 66 28 67 29  of(f), typeof(g)
38c0: 2c 20 74 79 70 65 6f 66 28 68 29 0a 20 20 20 20  , typeof(h).    
38d0: 46 52 4f 4d 20 74 37 20 4c 49 4d 49 54 20 31 3b  FROM t7 LIMIT 1;
38e0: 0a 20 20 7d 0a 7d 20 7b 69 6e 74 65 67 65 72 20  .  }.} {integer 
38f0: 6e 75 6c 6c 20 6e 75 6c 6c 20 6e 75 6c 6c 20 6e  null null null n
3900: 75 6c 6c 20 6e 75 6c 6c 20 6e 75 6c 6c 20 6e 75  ull null null nu
3910: 6c 6c 7d 20 0a 64 6f 5f 74 65 73 74 20 74 61 62  ll} .do_test tab
3920: 6c 65 2d 31 31 2e 32 20 7b 0a 20 20 65 78 65 63  le-11.2 {.  exec
3930: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
3940: 20 74 79 70 65 6f 66 28 61 2b 62 29 2c 20 74 79   typeof(a+b), ty
3950: 70 65 6f 66 28 61 7c 7c 62 29 2c 20 74 79 70 65  peof(a||b), type
3960: 6f 66 28 63 2b 64 29 2c 20 74 79 70 65 6f 66 28  of(c+d), typeof(
3970: 63 7c 7c 64 29 0a 20 20 20 20 46 52 4f 4d 20 74  c||d).    FROM t
3980: 37 20 4c 49 4d 49 54 20 31 3b 0a 20 20 7d 0a 7d  7 LIMIT 1;.  }.}
3990: 20 7b 6e 75 6c 6c 20 6e 75 6c 6c 20 6e 75 6c 6c   {null null null
39a0: 20 6e 75 6c 6c 7d 0a 0a 23 20 54 65 73 74 20 74   null}..# Test t
39b0: 68 61 74 20 77 68 65 6e 20 63 72 65 61 74 69 6e  hat when creatin
39c0: 67 20 61 20 74 61 62 6c 65 20 75 73 69 6e 67 20  g a table using 
39d0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 41 53 2c  CREATE TABLE AS,
39e0: 20 63 6f 6c 75 6d 6e 20 74 79 70 65 73 20 61 72   column types ar
39f0: 65 0a 23 20 61 73 73 69 67 6e 65 64 20 63 6f 72  e.# assigned cor
3a00: 72 65 63 74 6c 79 20 66 6f 72 20 28 53 45 4c 45  rectly for (SELE
3a10: 43 54 20 2e 2e 2e 29 20 61 6e 64 20 27 78 20 41  CT ...) and 'x A
3a20: 53 20 79 27 20 65 78 70 72 65 73 73 69 6f 6e 73  S y' expressions
3a30: 2e 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d  ..do_test table-
3a40: 31 32 2e 31 20 7b 0a 20 20 69 66 63 61 70 61 62  12.1 {.  ifcapab
3a50: 6c 65 20 73 75 62 71 75 65 72 79 20 7b 0a 20 20  le subquery {.  
3a60: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
3a70: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
3a80: 38 20 41 53 20 53 45 4c 45 43 54 20 62 2c 20 68  8 AS SELECT b, h
3a90: 2c 20 61 20 61 73 20 69 2c 20 28 53 45 4c 45 43  , a as i, (SELEC
3aa0: 54 20 66 20 46 52 4f 4d 20 74 37 29 20 61 73 20  T f FROM t7) as 
3ab0: 6a 20 46 52 4f 4d 20 74 37 3b 0a 20 20 20 20 7d  j FROM t7;.    }
3ac0: 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20  .  } else {.    
3ad0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
3ae0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 38 20  CREATE TABLE t8 
3af0: 41 53 20 53 45 4c 45 43 54 20 62 2c 20 68 2c 20  AS SELECT b, h, 
3b00: 61 20 61 73 20 69 2c 20 66 20 61 73 20 6a 20 46  a as i, f as j F
3b10: 52 4f 4d 20 74 37 3b 0a 20 20 20 20 7d 0a 20 20  ROM t7;.    }.  
3b20: 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 74  }.} {}.do_test t
3b30: 61 62 6c 65 2d 31 32 2e 32 20 7b 0a 20 20 65 78  able-12.2 {.  ex
3b40: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
3b50: 43 54 20 73 71 6c 20 46 52 4f 4d 20 73 71 6c 69  CT sql FROM sqli
3b60: 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20  te_master WHERE 
3b70: 74 62 6c 5f 6e 61 6d 65 20 3d 20 27 74 38 27 0a  tbl_name = 't8'.
3b80: 20 20 7d 0a 7d 20 7b 7b 43 52 45 41 54 45 20 54    }.} {{CREATE T
3b90: 41 42 4c 45 20 74 38 28 62 20 4e 55 4d 2c 68 2c  ABLE t8(b NUM,h,
3ba0: 69 20 49 4e 54 2c 6a 29 7d 7d 0a 0a 23 2d 2d 2d  i INT,j)}}..#---
3bb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3bc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3bd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3be0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3bf0: 2d 0a 23 20 54 65 73 74 20 63 61 73 65 73 20 74  -.# Test cases t
3c00: 61 62 6c 65 2d 31 33 2e 2a 0a 23 0a 23 20 54 65  able-13.*.#.# Te
3c10: 73 74 20 74 68 65 20 61 62 69 6c 69 74 79 20 74  st the ability t
3c20: 6f 20 68 61 76 65 20 64 65 66 61 75 6c 74 20 76  o have default v
3c30: 61 6c 75 65 73 20 6f 66 20 43 55 52 52 45 4e 54  alues of CURRENT
3c40: 5f 54 49 4d 45 2c 20 43 55 52 52 45 4e 54 5f 44  _TIME, CURRENT_D
3c50: 41 54 45 0a 23 20 61 6e 64 20 43 55 52 52 45 4e  ATE.# and CURREN
3c60: 54 5f 54 49 4d 45 53 54 41 4d 50 2e 0a 23 0a 64  T_TIMESTAMP..#.d
3c70: 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 31 33 2e  o_test table-13.
3c80: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  1 {.  execsql {.
3c90: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
3ca0: 20 74 61 62 6c 65 74 38 28 0a 20 20 20 20 20 20   tablet8(.      
3cb0: 20 61 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61   a integer prima
3cc0: 72 79 20 6b 65 79 2c 0a 20 20 20 20 20 20 20 74  ry key,.       t
3cd0: 6d 20 74 65 78 74 20 44 45 46 41 55 4c 54 20 43  m text DEFAULT C
3ce0: 55 52 52 45 4e 54 5f 54 49 4d 45 2c 0a 20 20 20  URRENT_TIME,.   
3cf0: 20 20 20 20 64 74 20 74 65 78 74 20 44 45 46 41      dt text DEFA
3d00: 55 4c 54 20 43 55 52 52 45 4e 54 5f 44 41 54 45  ULT CURRENT_DATE
3d10: 2c 0a 20 20 20 20 20 20 20 64 74 74 6d 20 74 65  ,.       dttm te
3d20: 78 74 20 44 45 46 41 55 4c 54 20 43 55 52 52 45  xt DEFAULT CURRE
3d30: 4e 54 5f 54 49 4d 45 53 54 41 4d 50 0a 20 20 20  NT_TIMESTAMP.   
3d40: 20 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a   );.    SELECT *
3d50: 20 46 52 4f 4d 20 74 61 62 6c 65 74 38 3b 0a 20   FROM tablet8;. 
3d60: 20 7d 0a 7d 20 7b 7d 0a 73 65 74 20 69 20 30 0a   }.} {}.set i 0.
3d70: 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
3d80: 6e 20 64 61 74 65 20 74 69 6d 65 20 73 65 63 6f  n date time seco
3d90: 6e 64 73 0a 66 6f 72 65 61 63 68 20 7b 64 61 74  nds.foreach {dat
3da0: 65 20 74 69 6d 65 20 73 65 63 6f 6e 64 73 7d 20  e time seconds} 
3db0: 7b 0a 20 20 31 39 37 36 2d 30 37 2d 30 34 20 31  {.  1976-07-04 1
3dc0: 32 3a 30 30 3a 30 30 20 32 30 35 33 32 39 36 30  2:00:00 20532960
3dd0: 30 0a 20 20 31 39 39 34 2d 30 34 2d 31 36 20 31  0.  1994-04-16 1
3de0: 34 3a 30 30 3a 30 30 20 37 36 36 35 30 34 38 30  4:00:00 76650480
3df0: 30 0a 20 20 32 30 30 30 2d 30 31 2d 30 31 20 30  0.  2000-01-01 0
3e00: 30 3a 30 30 3a 30 30 20 39 34 36 36 38 34 38 30  0:00:00 94668480
3e10: 30 0a 20 20 32 30 30 33 2d 31 32 2d 33 31 20 31  0.  2003-12-31 1
3e20: 32 3a 33 34 3a 35 36 20 31 30 37 32 38 37 34 30  2:34:56 10728740
3e30: 39 36 0a 7d 20 7b 0a 20 20 69 6e 63 72 20 69 0a  96.} {.  incr i.
3e40: 20 20 73 65 74 20 73 71 6c 69 74 65 5f 63 75 72    set sqlite_cur
3e50: 72 65 6e 74 5f 74 69 6d 65 20 24 73 65 63 6f 6e  rent_time $secon
3e60: 64 73 0a 20 20 64 6f 5f 74 65 73 74 20 74 61 62  ds.  do_test tab
3e70: 6c 65 2d 31 33 2e 32 2e 24 69 20 7b 0a 20 20 20  le-13.2.$i {.   
3e80: 20 65 78 65 63 73 71 6c 20 22 0a 20 20 20 20 20   execsql ".     
3e90: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 61 62   INSERT INTO tab
3ea0: 6c 65 74 38 28 61 29 20 56 41 4c 55 45 53 28 24  let8(a) VALUES($
3eb0: 69 29 3b 0a 20 20 20 20 20 20 53 45 4c 45 43 54  i);.      SELECT
3ec0: 20 74 6d 2c 20 64 74 2c 20 64 74 74 6d 20 46 52   tm, dt, dttm FR
3ed0: 4f 4d 20 74 61 62 6c 65 74 38 20 57 48 45 52 45  OM tablet8 WHERE
3ee0: 20 61 3d 24 69 3b 0a 20 20 20 20 22 0a 20 20 7d   a=$i;.    ".  }
3ef0: 20 5b 6c 69 73 74 20 24 74 69 6d 65 20 24 64 61   [list $time $da
3f00: 74 65 20 5b 6c 69 73 74 20 24 64 61 74 65 20 24  te [list $date $
3f10: 74 69 6d 65 5d 5d 0a 7d 0a 73 65 74 20 73 71 6c  time]].}.set sql
3f20: 69 74 65 5f 63 75 72 72 65 6e 74 5f 74 69 6d 65  ite_current_time
3f30: 20 30 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   0..#-----------
3f40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3f50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3f60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3f70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73 74  ---------.# Test
3f80: 20 63 61 73 65 73 20 74 61 62 6c 65 2d 31 34 2e   cases table-14.
3f90: 2a 0a 23 0a 23 20 54 65 73 74 20 74 68 61 74 20  *.#.# Test that 
3fa0: 61 20 74 61 62 6c 65 20 63 61 6e 6e 6f 74 20 62  a table cannot b
3fb0: 65 20 63 72 65 61 74 65 64 20 6f 72 20 64 72 6f  e created or dro
3fc0: 70 70 65 64 20 77 68 69 6c 65 20 6f 74 68 65 72  pped while other
3fd0: 20 76 69 72 74 75 61 6c 0a 23 20 6d 61 63 68 69   virtual.# machi
3fe0: 6e 65 73 20 61 72 65 20 61 63 74 69 76 65 2e 20  nes are active. 
3ff0: 54 68 69 73 20 69 73 20 72 65 71 75 69 72 65 64  This is required
4000: 20 62 65 63 61 75 73 65 20 6f 74 68 65 72 77 69   because otherwi
4010: 73 65 20 77 68 65 6e 20 69 6e 20 0a 23 20 61 75  se when in .# au
4020: 74 6f 2d 76 61 63 75 75 6d 20 6d 6f 64 65 20 74  to-vacuum mode t
4030: 68 65 20 62 74 72 65 65 2d 6c 61 79 65 72 20 6d  he btree-layer m
4040: 61 79 20 6e 65 65 64 20 74 6f 20 6d 6f 76 65 20  ay need to move 
4050: 74 68 65 20 72 6f 6f 74 2d 70 61 67 65 73 20 6f  the root-pages o
4060: 66 20 0a 23 20 61 20 74 61 62 6c 65 20 66 6f 72  f .# a table for
4070: 20 77 68 69 63 68 20 74 68 65 72 65 20 69 73 20   which there is 
4080: 61 6e 20 6f 70 65 6e 20 63 75 72 73 6f 72 2e 0a  an open cursor..
4090: 23 0a 23 20 32 30 30 37 2d 30 35 2d 30 32 3a 20  #.# 2007-05-02: 
40a0: 20 41 20 6f 70 65 6e 20 62 74 72 65 65 20 63 75   A open btree cu
40b0: 72 73 6f 72 20 6e 6f 20 6c 6f 6e 67 65 72 20 62  rsor no longer b
40c0: 6c 6f 63 6b 73 20 43 52 45 41 54 45 20 54 41 42  locks CREATE TAB
40d0: 4c 45 2e 0a 23 20 42 75 74 20 44 52 4f 50 20 54  LE..# But DROP T
40e0: 41 42 4c 45 20 69 73 20 73 74 69 6c 6c 20 70 72  ABLE is still pr
40f0: 6f 68 69 62 69 74 65 64 20 62 65 63 61 75 73 65  ohibited because
4100: 20 77 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20   we do not want 
4110: 74 6f 0a 23 20 64 65 6c 65 74 65 20 61 20 74 61  to.# delete a ta
4120: 62 6c 65 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64  ble out from und
4130: 65 72 20 61 20 72 75 6e 6e 69 6e 67 20 71 75 65  er a running que
4140: 72 79 2e 0a 23 0a 0a 23 20 64 62 20 65 76 61 6c  ry..#..# db eval
4150: 20 7b 0a 23 20 20 20 70 72 61 67 6d 61 20 76 64   {.#   pragma vd
4160: 62 65 5f 74 72 61 63 65 20 3d 20 30 3b 0a 23 20  be_trace = 0;.# 
4170: 7d 0a 23 20 54 72 79 20 74 6f 20 63 72 65 61 74  }.# Try to creat
4180: 65 20 61 20 74 61 62 6c 65 20 66 72 6f 6d 20 77  e a table from w
4190: 69 74 68 69 6e 20 61 20 63 61 6c 6c 62 61 63 6b  ithin a callback
41a0: 3a 0a 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c  :.unset -nocompl
41b0: 61 69 6e 20 72 65 73 75 6c 74 0a 64 6f 5f 74 65  ain result.do_te
41c0: 73 74 20 74 61 62 6c 65 2d 31 34 2e 31 20 7b 0a  st table-14.1 {.
41d0: 20 20 73 65 74 20 72 63 20 5b 0a 20 20 20 20 63    set rc [.    c
41e0: 61 74 63 68 20 7b 0a 20 20 20 20 20 20 64 62 20  atch {.      db 
41f0: 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46  eval {SELECT * F
4200: 52 4f 4d 20 74 61 62 6c 65 74 38 20 4c 49 4d 49  ROM tablet8 LIMI
4210: 54 20 31 7d 20 7b 7d 20 7b 0a 20 20 20 20 20 20  T 1} {} {.      
4220: 20 20 64 62 20 65 76 61 6c 20 7b 43 52 45 41 54    db eval {CREAT
4230: 45 20 54 41 42 4c 45 20 74 39 28 61 2c 20 62 2c  E TABLE t9(a, b,
4240: 20 63 29 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20   c)}.      }.   
4250: 20 7d 20 6d 73 67 0a 20 20 5d 0a 20 20 73 65 74   } msg.  ].  set
4260: 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 24 72   result [list $r
4270: 63 20 24 6d 73 67 5d 0a 7d 20 7b 30 20 7b 7d 7d  c $msg].} {0 {}}
4280: 0a 0a 23 20 54 72 79 20 74 6f 20 64 72 6f 70 20  ..# Try to drop 
4290: 61 20 74 61 62 6c 65 20 66 72 6f 6d 20 77 69 74  a table from wit
42a0: 68 69 6e 20 61 20 63 61 6c 6c 62 61 63 6b 3a 0a  hin a callback:.
42b0: 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d 31 34  do_test table-14
42c0: 2e 32 20 7b 0a 20 20 73 65 74 20 72 63 20 5b 0a  .2 {.  set rc [.
42d0: 20 20 20 20 63 61 74 63 68 20 7b 0a 20 20 20 20      catch {.    
42e0: 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43    db eval {SELEC
42f0: 54 20 2a 20 46 52 4f 4d 20 74 61 62 6c 65 74 38  T * FROM tablet8
4300: 20 4c 49 4d 49 54 20 31 7d 20 7b 7d 20 7b 0a 20   LIMIT 1} {} {. 
4310: 20 20 20 20 20 20 20 64 62 20 65 76 61 6c 20 7b         db eval {
4320: 44 52 4f 50 20 54 41 42 4c 45 20 74 39 3b 7d 0a  DROP TABLE t9;}.
4330: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 6d 73        }.    } ms
4340: 67 0a 20 20 5d 20 0a 20 20 73 65 74 20 72 65 73  g.  ] .  set res
4350: 75 6c 74 20 5b 6c 69 73 74 20 24 72 63 20 24 6d  ult [list $rc $m
4360: 73 67 5d 0a 7d 20 7b 31 20 7b 64 61 74 61 62 61  sg].} {1 {databa
4370: 73 65 20 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b  se table is lock
4380: 65 64 7d 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20  ed}}..ifcapable 
4390: 61 74 74 61 63 68 20 7b 0a 20 20 23 20 4e 6f 77  attach {.  # Now
43a0: 20 61 74 74 61 63 68 20 61 20 64 61 74 61 62 61   attach a databa
43b0: 73 65 20 61 6e 64 20 65 6e 73 75 72 65 20 74 68  se and ensure th
43c0: 61 74 20 61 20 74 61 62 6c 65 20 63 61 6e 20 62  at a table can b
43d0: 65 20 63 72 65 61 74 65 64 20 69 6e 20 74 68 65  e created in the
43e0: 20 0a 20 20 23 20 61 74 74 61 63 68 65 64 20 64   .  # attached d
43f0: 61 74 61 62 61 73 65 20 77 68 69 6c 73 74 20 69  atabase whilst i
4400: 6e 20 61 20 63 61 6c 6c 62 61 63 6b 20 66 72 6f  n a callback fro
4410: 6d 20 61 20 71 75 65 72 79 20 6f 6e 20 74 68 65  m a query on the
4420: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e 0a   main database..
4430: 20 20 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d    do_test table-
4440: 31 34 2e 33 20 7b 0a 20 20 20 20 66 6f 72 63 65  14.3 {.    force
4450: 64 65 6c 65 74 65 20 74 65 73 74 32 2e 64 62 0a  delete test2.db.
4460: 20 20 20 20 66 6f 72 63 65 64 65 6c 65 74 65 20      forcedelete 
4470: 74 65 73 74 32 2e 64 62 2d 6a 6f 75 72 6e 61 6c  test2.db-journal
4480: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
4490: 20 20 20 20 20 41 54 54 41 43 48 20 27 74 65 73       ATTACH 'tes
44a0: 74 32 2e 64 62 27 20 61 73 20 61 75 78 3b 0a 20  t2.db' as aux;. 
44b0: 20 20 20 7d 0a 20 20 20 20 64 62 20 65 76 61 6c     }.    db eval
44c0: 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   {SELECT * FROM 
44d0: 74 61 62 6c 65 74 38 20 4c 49 4d 49 54 20 31 7d  tablet8 LIMIT 1}
44e0: 20 7b 7d 20 7b 0a 20 20 20 20 20 20 64 62 20 65   {} {.      db e
44f0: 76 61 6c 20 7b 43 52 45 41 54 45 20 54 41 42 4c  val {CREATE TABL
4500: 45 20 61 75 78 2e 74 31 28 61 2c 20 62 2c 20 63  E aux.t1(a, b, c
4510: 29 7d 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a  )}.    }.  } {}.
4520: 20 20 0a 20 20 23 20 4f 6e 20 74 68 65 20 6f 74    .  # On the ot
4530: 68 65 72 20 68 61 6e 64 2c 20 69 74 20 73 68 6f  her hand, it sho
4540: 75 6c 64 20 62 65 20 69 6d 70 6f 73 73 69 62 6c  uld be impossibl
4550: 65 20 74 6f 20 64 72 6f 70 20 61 20 74 61 62 6c  e to drop a tabl
4560: 65 20 77 68 65 6e 20 61 6e 79 20 56 4d 73 20 0a  e when any VMs .
4570: 20 20 23 20 61 72 65 20 61 63 74 69 76 65 2e 20    # are active. 
4580: 54 68 69 73 20 69 73 20 62 65 63 61 75 73 65 20  This is because 
4590: 56 65 72 69 66 79 43 6f 6f 6b 69 65 20 69 6e 73  VerifyCookie ins
45a0: 74 72 75 63 74 69 6f 6e 73 20 6d 61 79 20 68 61  tructions may ha
45b0: 76 65 20 61 6c 72 65 61 64 79 0a 20 20 23 20 62  ve already.  # b
45c0: 65 65 6e 20 65 78 65 63 75 74 65 64 2c 20 61 6e  een executed, an
45d0: 64 20 62 74 72 65 65 20 72 6f 6f 74 2d 70 61 67  d btree root-pag
45e0: 65 73 20 6d 61 79 20 6e 6f 74 20 6d 6f 76 65 20  es may not move 
45f0: 61 66 74 65 72 20 74 68 69 73 20 28 77 68 69 63  after this (whic
4600: 68 20 61 0a 20 20 23 20 64 65 6c 65 74 65 20 74  h a.  # delete t
4610: 61 62 6c 65 20 6d 69 67 68 74 20 64 6f 29 2e 0a  able might do)..
4620: 20 20 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 2d    do_test table-
4630: 31 34 2e 34 20 7b 0a 20 20 20 20 73 65 74 20 72  14.4 {.    set r
4640: 63 20 5b 0a 20 20 20 20 20 20 63 61 74 63 68 20  c [.      catch 
4650: 7b 0a 20 20 20 20 20 20 20 20 64 62 20 65 76 61  {.        db eva
4660: 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  l {SELECT * FROM
4670: 20 74 61 62 6c 65 74 38 20 4c 49 4d 49 54 20 31   tablet8 LIMIT 1
4680: 7d 20 7b 7d 20 7b 0a 20 20 20 20 20 20 20 20 20  } {} {.         
4690: 20 64 62 20 65 76 61 6c 20 7b 44 52 4f 50 20 54   db eval {DROP T
46a0: 41 42 4c 45 20 61 75 78 2e 74 31 3b 7d 0a 20 20  ABLE aux.t1;}.  
46b0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 20        }.      } 
46c0: 6d 73 67 0a 20 20 20 20 5d 20 0a 20 20 20 20 73  msg.    ] .    s
46d0: 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 20  et result [list 
46e0: 24 72 63 20 24 6d 73 67 5d 0a 20 20 7d 20 7b 31  $rc $msg].  } {1
46f0: 20 7b 64 61 74 61 62 61 73 65 20 74 61 62 6c 65   {database table
4700: 20 69 73 20 6c 6f 63 6b 65 64 7d 7d 0a 7d 0a 0a   is locked}}.}..
4710: 23 20 43 72 65 61 74 65 20 61 6e 64 20 64 72 6f  # Create and dro
4720: 70 20 32 30 30 30 20 74 61 62 6c 65 73 2e 20 54  p 2000 tables. T
4730: 68 69 73 20 69 73 20 74 6f 20 63 68 65 63 6b 20  his is to check 
4740: 74 68 61 74 20 74 68 65 20 62 61 6c 61 6e 63 65  that the balance
4750: 5f 73 68 61 6c 6c 6f 77 28 29 0a 23 20 72 6f 75  _shallow().# rou
4760: 74 69 6e 65 20 77 6f 72 6b 73 20 63 6f 72 72 65  tine works corre
4770: 63 74 6c 79 20 6f 6e 20 74 68 65 20 73 71 6c 69  ctly on the sqli
4780: 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 2e  te_master table.
4790: 20 41 74 20 6f 6e 65 20 70 6f 69 6e 74 20 69 74   At one point it
47a0: 0a 23 20 63 6f 6e 74 61 69 6e 65 64 20 61 20 62  .# contained a b
47b0: 75 67 20 74 68 61 74 20 77 6f 75 6c 64 20 70 72  ug that would pr
47c0: 65 76 65 6e 74 20 74 68 65 20 72 69 67 68 74 2d  event the right-
47d0: 63 68 69 6c 64 20 70 6f 69 6e 74 65 72 20 6f 66  child pointer of
47e0: 20 74 68 65 0a 23 20 63 68 69 6c 64 20 70 61 67   the.# child pag
47f0: 65 20 66 72 6f 6d 20 62 65 69 6e 67 20 63 6f 70  e from being cop
4800: 69 65 64 20 74 6f 20 74 68 65 20 72 6f 6f 74 20  ied to the root 
4810: 70 61 67 65 2e 0a 23 0a 64 6f 5f 74 65 73 74 20  page..#.do_test 
4820: 74 61 62 6c 65 2d 31 35 2e 31 20 7b 0a 20 20 65  table-15.1 {.  e
4830: 78 65 63 73 71 6c 20 7b 42 45 47 49 4e 7d 0a 20  xecsql {BEGIN}. 
4840: 20 66 6f 72 20 7b 73 65 74 20 69 20 30 7d 20 7b   for {set i 0} {
4850: 24 69 3c 32 30 30 30 7d 20 7b 69 6e 63 72 20 69  $i<2000} {incr i
4860: 7d 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  } {.    execsql 
4870: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 62  "CREATE TABLE tb
4880: 6c 24 69 20 28 61 2c 20 62 2c 20 63 29 22 0a 20  l$i (a, b, c)". 
4890: 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 43 4f   }.  execsql {CO
48a0: 4d 4d 49 54 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65  MMIT}.} {}.do_te
48b0: 73 74 20 74 61 62 6c 65 2d 31 35 2e 32 20 7b 0a  st table-15.2 {.
48c0: 20 20 65 78 65 63 73 71 6c 20 7b 42 45 47 49 4e    execsql {BEGIN
48d0: 7d 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 20 30  }.  for {set i 0
48e0: 7d 20 7b 24 69 3c 32 30 30 30 7d 20 7b 69 6e 63  } {$i<2000} {inc
48f0: 72 20 69 7d 20 7b 0a 20 20 20 20 65 78 65 63 73  r i} {.    execs
4900: 71 6c 20 22 44 52 4f 50 20 54 41 42 4c 45 20 74  ql "DROP TABLE t
4910: 62 6c 24 69 22 0a 20 20 7d 0a 20 20 65 78 65 63  bl$i".  }.  exec
4920: 73 71 6c 20 7b 43 4f 4d 4d 49 54 7d 0a 7d 20 7b  sql {COMMIT}.} {
4930: 7d 0a 0a 23 20 54 69 63 6b 65 74 20 33 61 38 38  }..# Ticket 3a88
4940: 64 38 35 66 33 36 37 30 34 65 65 62 65 31 33 34  d85f36704eebe134
4950: 66 37 66 34 38 61 65 62 66 30 30 63 64 36 34 33  f7f48aebf00cd643
4960: 38 63 31 61 20 28 32 30 31 34 2d 30 38 2d 30 35  8c1a (2014-08-05
4970: 29 0a 23 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  ).# The followin
4980: 67 20 53 51 4c 20 73 63 72 69 70 74 20 73 65 67  g SQL script seg
4990: 66 61 75 6c 74 73 20 77 68 69 6c 65 20 72 75 6e  faults while run
49a0: 6e 69 6e 67 20 74 68 65 20 49 4e 53 45 52 54 20  ning the INSERT 
49b0: 73 74 61 74 65 6d 65 6e 74 3a 0a 23 0a 23 20 20  statement:.#.#  
49c0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
49d0: 31 28 78 20 44 45 46 41 55 4c 54 28 6d 61 78 28  1(x DEFAULT(max(
49e0: 31 29 29 29 3b 0a 23 20 20 20 20 49 4e 53 45 52  1)));.#    INSER
49f0: 54 20 49 4e 54 4f 20 74 31 28 72 6f 77 69 64 29  T INTO t1(rowid)
4a00: 20 56 41 4c 55 45 53 28 31 29 3b 0a 23 0a 23 20   VALUES(1);.#.# 
4a10: 54 68 65 20 70 72 6f 62 6c 65 6d 20 61 70 70 65  The problem appe
4a20: 61 72 73 20 74 6f 20 62 65 20 74 68 65 20 75 73  ars to be the us
4a30: 65 20 6f 66 20 61 6e 20 61 67 67 72 65 67 61 74  e of an aggregat
4a40: 65 20 66 75 6e 63 74 69 6f 6e 20 61 73 20 70 61  e function as pa
4a50: 72 74 20 6f 66 0a 23 20 74 68 65 20 64 65 66 61  rt of.# the defa
4a60: 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 61 20  ult value for a 
4a70: 63 6f 6c 75 6d 6e 2e 20 54 68 69 73 20 70 72 6f  column. This pro
4a80: 62 6c 65 6d 20 68 61 73 20 62 65 65 6e 20 69 6e  blem has been in
4a90: 20 74 68 65 20 63 6f 64 65 20 73 69 6e 63 65 0a   the code since.
4aa0: 23 20 61 74 20 6c 65 61 73 74 20 32 30 30 36 2d  # at least 2006-
4ab0: 30 31 2d 30 31 20 61 6e 64 20 70 72 6f 62 61 62  01-01 and probab
4ac0: 6c 79 20 62 65 66 6f 72 65 20 74 68 61 74 2e 20  ly before that. 
4ad0: 54 68 69 73 20 70 72 6f 62 6c 65 6d 20 77 61 73  This problem was
4ae0: 20 64 65 74 65 63 74 65 64 0a 23 20 61 6e 64 20   detected.# and 
4af0: 72 65 70 6f 72 74 65 64 20 6f 6e 20 74 68 65 20  reported on the 
4b00: 73 71 6c 69 74 65 2d 75 73 65 72 73 40 73 71 6c  sqlite-users@sql
4b10: 69 74 65 2e 6f 72 67 20 6d 61 69 6c 69 6e 67 20  ite.org mailing 
4b20: 6c 69 73 74 20 62 79 20 5a 73 62 c3 a1 6e 20 41  list by Zsb..n A
4b30: 6d 62 72 75 73 2e 20 0a 23 0a 64 6f 5f 65 78 65  mbrus. .#.do_exe
4b40: 63 73 71 6c 5f 74 65 73 74 20 74 61 62 6c 65 2d  csql_test table-
4b50: 31 36 2e 31 20 7b 0a 20 20 43 52 45 41 54 45 20  16.1 {.  CREATE 
4b60: 54 41 42 4c 45 20 74 31 36 28 78 20 44 45 46 41  TABLE t16(x DEFA
4b70: 55 4c 54 28 6d 61 78 28 31 29 29 29 3b 0a 20 20  ULT(max(1)));.  
4b80: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 36 28  INSERT INTO t16(
4b90: 78 29 20 56 41 4c 55 45 53 28 31 32 33 29 3b 0a  x) VALUES(123);.
4ba0: 20 20 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20    SELECT rowid, 
4bb0: 78 20 46 52 4f 4d 20 74 31 36 3b 0a 7d 20 7b 31  x FROM t16;.} {1
4bc0: 20 31 32 33 7d 0a 64 6f 5f 63 61 74 63 68 73 71   123}.do_catchsq
4bd0: 6c 5f 74 65 73 74 20 74 61 62 6c 65 2d 31 36 2e  l_test table-16.
4be0: 32 20 7b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  2 {.  INSERT INT
4bf0: 4f 20 74 31 36 28 72 6f 77 69 64 29 20 56 41 4c  O t16(rowid) VAL
4c00: 55 45 53 28 34 29 3b 0a 7d 20 7b 31 20 7b 75 6e  UES(4);.} {1 {un
4c10: 6b 6e 6f 77 6e 20 66 75 6e 63 74 69 6f 6e 3a 20  known function: 
4c20: 6d 61 78 28 29 7d 7d 0a 64 6f 5f 65 78 65 63 73  max()}}.do_execs
4c30: 71 6c 5f 74 65 73 74 20 74 61 62 6c 65 2d 31 36  ql_test table-16
4c40: 2e 33 20 7b 0a 20 20 44 52 4f 50 20 54 41 42 4c  .3 {.  DROP TABL
4c50: 45 20 74 31 36 3b 0a 20 20 43 52 45 41 54 45 20  E t16;.  CREATE 
4c60: 54 41 42 4c 45 20 74 31 36 28 78 20 44 45 46 41  TABLE t16(x DEFA
4c70: 55 4c 54 28 61 62 73 28 31 29 29 29 3b 0a 20 20  ULT(abs(1)));.  
4c80: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 36 28  INSERT INTO t16(
4c90: 72 6f 77 69 64 29 20 56 41 4c 55 45 53 28 34 29  rowid) VALUES(4)
4ca0: 3b 0a 20 20 53 45 4c 45 43 54 20 72 6f 77 69 64  ;.  SELECT rowid
4cb0: 2c 20 78 20 46 52 4f 4d 20 74 31 36 3b 0a 7d 20  , x FROM t16;.} 
4cc0: 7b 34 20 31 7d 0a 64 6f 5f 63 61 74 63 68 73 71  {4 1}.do_catchsq
4cd0: 6c 5f 74 65 73 74 20 74 61 62 6c 65 2d 31 36 2e  l_test table-16.
4ce0: 34 20 7b 0a 20 20 44 52 4f 50 20 54 41 42 4c 45  4 {.  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 61 76 67 28 31 29 29 29 3b 0a 20 20 49  LT(avg(1)));.  I
4d20: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 36 28 72  NSERT INTO t16(r
4d30: 6f 77 69 64 29 20 56 41 4c 55 45 53 28 31 32 33  owid) VALUES(123
4d40: 29 3b 0a 20 20 53 45 4c 45 43 54 20 72 6f 77 69  );.  SELECT rowi
4d50: 64 2c 20 78 20 46 52 4f 4d 20 74 31 36 3b 0a 7d  d, x FROM t16;.}
4d60: 20 7b 31 20 7b 75 6e 6b 6e 6f 77 6e 20 66 75 6e   {1 {unknown fun
4d70: 63 74 69 6f 6e 3a 20 61 76 67 28 29 7d 7d 0a 64  ction: avg()}}.d
4d80: 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65 73 74 20  o_catchsql_test 
4d90: 74 61 62 6c 65 2d 31 36 2e 35 20 7b 0a 20 20 44  table-16.5 {.  D
4da0: 52 4f 50 20 54 41 42 4c 45 20 74 31 36 3b 0a 20  ROP TABLE t16;. 
4db0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
4dc0: 36 28 78 20 44 45 46 41 55 4c 54 28 63 6f 75 6e  6(x DEFAULT(coun
4dd0: 74 28 29 29 29 3b 0a 20 20 49 4e 53 45 52 54 20  t()));.  INSERT 
4de0: 49 4e 54 4f 20 74 31 36 28 72 6f 77 69 64 29 20  INTO t16(rowid) 
4df0: 56 41 4c 55 45 53 28 31 32 33 29 3b 0a 20 20 53  VALUES(123);.  S
4e00: 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 78 20 46  ELECT rowid, x F
4e10: 52 4f 4d 20 74 31 36 3b 0a 7d 20 7b 31 20 7b 75  ROM t16;.} {1 {u
4e20: 6e 6b 6e 6f 77 6e 20 66 75 6e 63 74 69 6f 6e 3a  nknown function:
4e30: 20 63 6f 75 6e 74 28 29 7d 7d 0a 64 6f 5f 63 61   count()}}.do_ca
4e40: 74 63 68 73 71 6c 5f 74 65 73 74 20 74 61 62 6c  tchsql_test tabl
4e50: 65 2d 31 36 2e 36 20 7b 0a 20 20 44 52 4f 50 20  e-16.6 {.  DROP 
4e60: 54 41 42 4c 45 20 74 31 36 3b 0a 20 20 43 52 45  TABLE t16;.  CRE
4e70: 41 54 45 20 54 41 42 4c 45 20 74 31 36 28 78 20  ATE TABLE t16(x 
4e80: 44 45 46 41 55 4c 54 28 67 72 6f 75 70 5f 63 6f  DEFAULT(group_co
4e90: 6e 63 61 74 28 27 78 27 2c 27 2c 27 29 29 29 3b  ncat('x',',')));
4ea0: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
4eb0: 31 36 28 72 6f 77 69 64 29 20 56 41 4c 55 45 53  16(rowid) VALUES
4ec0: 28 31 32 33 29 3b 0a 20 20 53 45 4c 45 43 54 20  (123);.  SELECT 
4ed0: 72 6f 77 69 64 2c 20 78 20 46 52 4f 4d 20 74 31  rowid, x FROM t1
4ee0: 36 3b 0a 7d 20 7b 31 20 7b 75 6e 6b 6e 6f 77 6e  6;.} {1 {unknown
4ef0: 20 66 75 6e 63 74 69 6f 6e 3a 20 67 72 6f 75 70   function: group
4f00: 5f 63 6f 6e 63 61 74 28 29 7d 7d 0a 64 6f 5f 63  _concat()}}.do_c
4f10: 61 74 63 68 73 71 6c 5f 74 65 73 74 20 74 61 62  atchsql_test tab
4f20: 6c 65 2d 31 36 2e 37 20 7b 0a 20 20 49 4e 53 45  le-16.7 {.  INSE
4f30: 52 54 20 49 4e 54 4f 20 74 31 36 20 44 45 46 41  RT INTO t16 DEFA
4f40: 55 4c 54 20 56 41 4c 55 45 53 3b 0a 7d 20 7b 31  ULT VALUES;.} {1
4f50: 20 7b 75 6e 6b 6e 6f 77 6e 20 66 75 6e 63 74 69   {unknown functi
4f60: 6f 6e 3a 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74  on: group_concat
4f70: 28 29 7d 7d 0a 0a 23 20 54 69 63 6b 65 74 20 5b  ()}}..# Ticket [
4f80: 68 74 74 70 73 3a 2f 2f 77 77 77 2e 73 71 6c 69  https://www.sqli
4f90: 74 65 2e 6f 72 67 2f 73 72 63 2f 69 6e 66 6f 2f  te.org/src/info/
4fa0: 30 39 34 64 33 39 61 34 63 39 35 65 65 34 61 62  094d39a4c95ee4ab
4fb0: 62 63 34 31 37 66 30 34 32 31 34 36 31 37 36 37  bc417f0421461767
4fc0: 35 62 61 31 35 63 36 33 5d 0a 23 20 64 65 73 63  5ba15c63].# desc
4fd0: 72 69 62 65 73 20 61 20 61 73 73 65 72 74 69 6f  ribes a assertio
4fe0: 6e 20 66 61 75 6c 74 20 74 68 61 74 20 6f 63 63  n fault that occ
4ff0: 75 72 73 20 6f 6e 20 61 20 43 52 45 41 54 45 20  urs on a CREATE 
5000: 54 41 42 4c 45 20 2e 2e 20 41 53 20 53 45 4c 45  TABLE .. AS SELE
5010: 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 23 20  CT statement..# 
5020: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 65  the following te
5030: 73 74 20 76 65 72 69 66 69 65 73 20 74 68 61 74  st verifies that
5040: 20 74 68 65 20 70 72 6f 62 6c 65 6d 20 68 61 73   the problem has
5050: 20 62 65 65 6e 20 66 69 78 65 64 2e 0a 23 0a 64   been fixed..#.d
5060: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 74  o_execsql_test t
5070: 61 62 6c 65 2d 31 37 2e 31 20 7b 0a 20 20 44 52  able-17.1 {.  DR
5080: 4f 50 20 54 41 42 4c 45 20 49 46 20 45 58 49 53  OP TABLE IF EXIS
5090: 54 53 20 74 31 3b 0a 20 20 43 52 45 41 54 45 20  TS t1;.  CREATE 
50a0: 54 41 42 4c 45 20 74 31 28 61 20 54 45 58 54 29  TABLE t1(a TEXT)
50b0: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
50c0: 74 31 28 61 29 20 56 41 4c 55 45 53 28 31 29 2c  t1(a) VALUES(1),
50d0: 28 32 29 3b 0a 20 20 44 52 4f 50 20 54 41 42 4c  (2);.  DROP TABL
50e0: 45 20 49 46 20 45 58 49 53 54 53 20 74 32 3b 0a  E IF EXISTS t2;.
50f0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
5100: 32 28 78 20 54 45 58 54 2c 20 79 20 54 45 58 54  2(x TEXT, y TEXT
5110: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
5120: 20 74 32 28 78 2c 79 29 20 56 41 4c 55 45 53 28   t2(x,y) VALUES(
5130: 33 2c 34 29 3b 0a 20 20 44 52 4f 50 20 54 41 42  3,4);.  DROP TAB
5140: 4c 45 20 49 46 20 45 58 49 53 54 53 20 74 33 3b  LE IF EXISTS t3;
5150: 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  .  CREATE TABLE 
5160: 74 33 20 41 53 0a 20 20 20 20 53 45 4c 45 43 54  t3 AS.    SELECT
5170: 20 61 20 41 53 20 70 2c 20 63 6f 61 6c 65 73 63   a AS p, coalesc
5180: 65 28 79 2c 61 29 20 41 53 20 71 20 46 52 4f 4d  e(y,a) AS q FROM
5190: 20 74 31 20 4c 45 46 54 20 4a 4f 49 4e 20 74 32   t1 LEFT JOIN t2
51a0: 20 4f 4e 20 61 3d 78 3b 0a 20 20 53 45 4c 45 43   ON a=x;.  SELEC
51b0: 54 20 70 2c 20 71 2c 20 27 7c 27 20 46 52 4f 4d  T p, q, '|' FROM
51c0: 20 74 33 20 4f 52 44 45 52 20 42 59 20 70 3b 0a   t3 ORDER BY p;.
51d0: 7d 20 7b 31 20 31 20 7c 20 32 20 32 20 7c 7d 0a  } {1 1 | 2 2 |}.
51e0: 0a 23 20 32 30 31 35 2d 30 36 2d 31 36 0a 23 20  .# 2015-06-16.# 
51f0: 54 69 63 6b 65 74 20 5b 68 74 74 70 73 3a 2f 2f  Ticket [https://
5200: 77 77 77 2e 73 71 6c 69 74 65 2e 6f 72 67 2f 73  www.sqlite.org/s
5210: 72 63 2f 74 6b 74 76 69 65 77 2f 38 37 33 63 61  rc/tktview/873ca
5220: 65 32 62 36 65 32 35 62 31 39 39 31 63 65 35 65  e2b6e25b1991ce5e
5230: 39 62 37 38 32 66 39 63 64 30 34 30 39 62 39 36  9b782f9cd0409b96
5240: 30 36 33 5d 0a 23 20 4d 61 6b 65 20 73 75 72 65  063].# Make sure
5250: 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45 20   a CREATE TABLE 
5260: 41 53 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 72  AS statement cor
5270: 72 65 63 74 6c 79 20 72 6f 6c 6c 73 20 62 61 63  rectly rolls bac
5280: 6b 20 70 61 72 74 69 61 6c 20 63 68 61 6e 67 65  k partial change
5290: 73 20 74 6f 20 74 68 65 0a 23 20 73 71 6c 69 74  s to the.# sqlit
52a0: 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20 77  e_master table w
52b0: 68 65 6e 20 74 68 65 20 53 45 4c 45 43 54 20 6f  hen the SELECT o
52c0: 6e 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64  n the right-hand
52d0: 20 73 69 64 65 20 61 62 6f 72 74 73 2e 0a 23 0a   side aborts..#.
52e0: 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65 73 74  do_catchsql_test
52f0: 20 74 61 62 6c 65 2d 31 38 2e 31 20 7b 0a 20 20   table-18.1 {.  
5300: 44 52 4f 50 20 54 41 42 4c 45 20 49 46 20 45 58  DROP TABLE IF EX
5310: 49 53 54 53 20 74 31 3b 0a 20 20 42 45 47 49 4e  ISTS t1;.  BEGIN
5320: 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  ;.  CREATE TABLE
5330: 20 74 31 20 41 53 20 53 45 4c 45 43 54 20 7a 65   t1 AS SELECT ze
5340: 72 6f 62 6c 6f 62 28 32 65 32 30 29 3b 0a 7d 20  roblob(2e20);.} 
5350: 7b 31 20 7b 73 74 72 69 6e 67 20 6f 72 20 62 6c  {1 {string or bl
5360: 6f 62 20 74 6f 6f 20 62 69 67 7d 7d 0a 64 6f 5f  ob too big}}.do_
5370: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 74 61 62  execsql_test tab
5380: 6c 65 2d 31 38 2e 32 20 7b 0a 20 20 43 4f 4d 4d  le-18.2 {.  COMM
5390: 49 54 3b 0a 20 20 50 52 41 47 4d 41 20 69 6e 74  IT;.  PRAGMA int
53a0: 65 67 72 69 74 79 5f 63 68 65 63 6b 3b 0a 7d 20  egrity_check;.} 
53b0: 7b 6f 6b 7d 0a 0a 23 20 32 30 31 35 2d 30 39 2d  {ok}..# 2015-09-
53c0: 30 39 0a 23 20 54 69 63 6b 65 74 20 5b 68 74 74  09.# Ticket [htt
53d0: 70 73 3a 2f 2f 77 77 77 2e 73 71 6c 69 74 65 2e  ps://www.sqlite.
53e0: 6f 72 67 2f 73 72 63 2f 69 6e 66 6f 2f 61 63 64  org/src/info/acd
53f0: 31 32 39 39 30 38 38 35 64 39 32 37 36 5d 0a 23  12990885d9276].#
5400: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 2e   "CREATE TABLE .
5410: 2e 2e 20 41 53 20 53 45 4c 45 43 54 20 2e 2e 2e  .. AS SELECT ...
5420: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
5430: 74 65 72 22 20 66 61 69 6c 73 20 62 65 63 61 75  ter" fails becau
5440: 73 65 20 74 68 65 20 72 6f 77 0a 23 20 69 6e 20  se the row.# in 
5450: 74 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  the sqlite_maste
5460: 72 20 74 61 62 6c 65 20 66 6f 72 20 74 68 65 20  r table for the 
5470: 6e 65 78 74 20 74 61 62 6c 65 20 69 73 20 69 6e  next table is in
5480: 69 74 69 61 6c 6c 79 20 70 6f 70 75 6c 61 74 65  itially populate
5490: 64 0a 23 20 77 69 74 68 20 61 20 4e 55 4c 4c 20  d.# with a NULL 
54a0: 69 6e 73 74 65 61 64 20 6f 66 20 61 20 72 65 63  instead of a rec
54b0: 6f 72 64 20 63 72 65 61 74 65 64 20 62 79 20 4f  ord created by O
54c0: 50 5f 52 65 63 6f 72 64 2e 0a 23 0a 64 6f 5f 65  P_Record..#.do_e
54d0: 78 65 63 73 71 6c 5f 74 65 73 74 20 74 61 62 6c  xecsql_test tabl
54e0: 65 2d 31 39 2e 31 20 7b 0a 20 20 43 52 45 41 54  e-19.1 {.  CREAT
54f0: 45 20 54 41 42 4c 45 20 74 31 39 20 41 53 20 53  E TABLE t19 AS S
5500: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c  ELECT * FROM sql
5510: 69 74 65 5f 6d 61 73 74 65 72 3b 0a 20 20 53 45  ite_master;.  SE
5520: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 74  LECT name FROM t
5530: 31 39 20 4f 52 44 45 52 20 42 59 20 6e 61 6d 65  19 ORDER BY name
5540: 3b 0a 7d 20 7b 7b 7d 20 73 61 76 65 70 6f 69 6e  ;.} {{} savepoin
5550: 74 20 74 31 30 20 74 31 31 20 74 31 32 20 74 31  t t10 t11 t12 t1
5560: 33 20 74 31 36 20 74 32 20 74 33 20 74 33 5c 22  3 t16 t2 t3 t3\"
5570: 78 79 7a 20 74 34 5c 22 61 62 63 20 74 37 20 74  xyz t4\"abc t7 t
5580: 38 20 74 39 20 74 61 62 6c 65 74 38 20 74 65 73  8 t9 tablet8 tes
5590: 74 31 20 77 65 69 72 64 7d 0a 0a 0a 0a 66 69 6e  t1 weird}....fin
55a0: 69 73 68 5f 74 65 73 74 0a                       ish_test.