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

Artifact 7e93a21fe131e1dfeb317e90056856f96b10381fc7fe3a05e765569a23400433:


0000: 23 20 32 30 30 39 20 46 65 62 72 75 61 72 79 20  # 2009 February 
0010: 32 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f 72  2.#.# The author
0020: 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79 72   disclaims copyr
0030: 69 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f 75  ight to this sou
0040: 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c  rce code.  In pl
0050: 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c  ace of.# a legal
0060: 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20 69 73   notice, here is
0070: 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23   a blessing:.#.#
0080: 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f 20 67      May you do g
0090: 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c  ood and not evil
00a0: 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 66  ..#    May you f
00b0: 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73 73 20  ind forgiveness 
00c0: 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61 6e 64  for yourself and
00d0: 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72 73 2e   forgive others.
00e0: 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 73 68  .#    May you sh
00f0: 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65 76 65  are freely, neve
0100: 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68  r taking more th
0110: 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23  an you give..#.#
0120: 2a 2a 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 73 63 72 69 70  us of this scrip
01c0: 74 20 69 73 20 74 65 73 74 69 6e 67 20 74 68 61  t is testing tha
01d0: 74 20 53 51 4c 69 74 65 20 63 61 6e 20 68 61 6e  t SQLite can han
01e0: 64 6c 65 20 61 20 73 75 62 74 6c 65 20 0a 23 20  dle a subtle .# 
01f0: 66 69 6c 65 20 66 6f 72 6d 61 74 20 63 68 61 6e  file format chan
0200: 67 65 20 74 68 61 74 20 6d 61 79 20 62 65 20 75  ge that may be u
0210: 73 65 64 20 69 6e 20 74 68 65 20 66 75 74 75 72  sed in the futur
0220: 65 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 0a 23  e to implement.#
0230: 20 22 41 4c 54 45 52 20 54 41 42 4c 45 20 2e 2e   "ALTER TABLE ..
0240: 2e 20 41 44 44 20 43 4f 4c 55 4d 4e 22 2e 0a 23  . ADD COLUMN"..#
0250: 0a 23 20 24 49 64 3a 20 61 6c 74 65 72 34 2e 74  .# $Id: alter4.t
0260: 65 73 74 2c 76 20 31 2e 31 20 32 30 30 39 2f 30  est,v 1.1 2009/0
0270: 32 2f 30 32 20 31 38 3a 30 33 3a 32 32 20 64 72  2/02 18:03:22 dr
0280: 68 20 45 78 70 20 24 0a 23 0a 0a 73 65 74 20 74  h Exp $.#..set t
0290: 65 73 74 64 69 72 20 5b 66 69 6c 65 20 64 69 72  estdir [file dir
02a0: 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a 0a 73 6f  name $argv0]..so
02b0: 75 72 63 65 20 24 74 65 73 74 64 69 72 2f 74 65  urce $testdir/te
02c0: 73 74 65 72 2e 74 63 6c 0a 0a 23 20 49 66 20 53  ster.tcl..# If S
02d0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52  QLITE_OMIT_ALTER
02e0: 54 41 42 4c 45 20 69 73 20 64 65 66 69 6e 65 64  TABLE is defined
02f0: 2c 20 6f 6d 69 74 20 74 68 69 73 20 66 69 6c 65  , omit this file
0300: 2e 0a 69 66 63 61 70 61 62 6c 65 20 21 61 6c 74  ..ifcapable !alt
0310: 65 72 74 61 62 6c 65 20 7b 0a 20 20 66 69 6e 69  ertable {.  fini
0320: 73 68 5f 74 65 73 74 0a 20 20 72 65 74 75 72 6e  sh_test.  return
0330: 0a 7d 0a 0a 0a 23 20 54 65 73 74 20 4f 72 67 61  .}...# Test Orga
0340: 6e 69 73 61 74 69 6f 6e 3a 0a 23 20 2d 2d 2d 2d  nisation:.# ----
0350: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23  --------------.#
0360: 0a 23 20 61 6c 74 65 72 34 2d 31 2e 2a 3a 20 54  .# alter4-1.*: T
0370: 65 73 74 20 74 68 61 74 20 41 4c 54 45 52 20 54  est that ALTER T
0380: 41 42 4c 45 20 63 6f 72 72 65 63 74 6c 79 20 6d  ABLE correctly m
0390: 6f 64 69 66 69 65 73 20 74 68 65 20 43 52 45 41  odifies the CREA
03a0: 54 45 20 54 41 42 4c 45 20 73 71 6c 2e 0a 23 20  TE TABLE sql..# 
03b0: 61 6c 74 65 72 34 2d 32 2e 2a 3a 20 54 65 73 74  alter4-2.*: Test
03c0: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 2e   error messages.
03d0: 0a 23 20 61 6c 74 65 72 34 2d 33 2e 2a 3a 20 54  .# alter4-3.*: T
03e0: 65 73 74 20 61 64 64 69 6e 67 20 63 6f 6c 75 6d  est adding colum
03f0: 6e 73 20 77 69 74 68 20 64 65 66 61 75 6c 74 20  ns with default 
0400: 76 61 6c 75 65 20 4e 55 4c 4c 2e 0a 23 20 61 6c  value NULL..# al
0410: 74 65 72 34 2d 34 2e 2a 3a 20 54 65 73 74 20 61  ter4-4.*: Test a
0420: 64 64 69 6e 67 20 63 6f 6c 75 6d 6e 73 20 77 69  dding columns wi
0430: 74 68 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  th default value
0440: 73 20 6f 74 68 65 72 20 74 68 61 6e 20 4e 55 4c  s other than NUL
0450: 4c 2e 0a 23 20 61 6c 74 65 72 34 2d 35 2e 2a 3a  L..# alter4-5.*:
0460: 20 54 65 73 74 20 61 64 64 69 6e 67 20 63 6f 6c   Test adding col
0470: 75 6d 6e 73 20 74 6f 20 74 61 62 6c 65 73 20 69  umns to tables i
0480: 6e 20 41 54 54 41 43 48 65 64 20 64 61 74 61 62  n ATTACHed datab
0490: 61 73 65 73 2e 0a 23 20 61 6c 74 65 72 34 2d 36  ases..# alter4-6
04a0: 2e 2a 3a 20 54 65 73 74 20 74 68 61 74 20 74 65  .*: Test that te
04b0: 6d 70 20 74 72 69 67 67 65 72 73 20 61 72 65 20  mp triggers are 
04c0: 6e 6f 74 20 61 63 63 69 64 65 6e 74 61 6c 6c 79  not accidentally
04d0: 20 64 72 6f 70 70 65 64 2e 0a 23 20 61 6c 74 65   dropped..# alte
04e0: 72 34 2d 37 2e 2a 3a 20 54 65 73 74 20 74 68 61  r4-7.*: Test tha
04f0: 74 20 56 41 43 55 55 4d 20 72 65 73 65 74 73 20  t VACUUM resets 
0500: 74 68 65 20 66 69 6c 65 2d 66 6f 72 6d 61 74 2e  the file-format.
0510: 0a 23 0a 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65  .#..do_test alte
0520: 72 34 2d 31 2e 31 20 7b 0a 20 20 65 78 65 63 73  r4-1.1 {.  execs
0530: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
0540: 54 45 4d 50 20 54 41 42 4c 45 20 61 62 63 28 61  TEMP TABLE abc(a
0550: 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20 53 45 4c  , b, c);.    SEL
0560: 45 43 54 20 73 71 6c 20 46 52 4f 4d 20 73 71 6c  ECT sql FROM sql
0570: 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 3b  ite_temp_master;
0580: 0a 20 20 7d 0a 7d 20 7b 7b 43 52 45 41 54 45 20  .  }.} {{CREATE 
0590: 54 41 42 4c 45 20 61 62 63 28 61 2c 20 62 2c 20  TABLE abc(a, b, 
05a0: 63 29 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74  c)}}.do_test alt
05b0: 65 72 34 2d 31 2e 31 62 20 7b 0a 20 20 65 78 65  er4-1.1b {.  exe
05c0: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
05d0: 54 20 73 71 6c 20 46 52 4f 4d 20 74 65 6d 70 2e  T sql FROM temp.
05e0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 0a 20  sqlite_master;. 
05f0: 20 7d 0a 7d 20 7b 7b 43 52 45 41 54 45 20 54 41   }.} {{CREATE TA
0600: 42 4c 45 20 61 62 63 28 61 2c 20 62 2c 20 63 29  BLE abc(a, b, c)
0610: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72  }}.do_test alter
0620: 34 2d 31 2e 32 20 7b 0a 20 20 65 78 65 63 73 71  4-1.2 {.  execsq
0630: 6c 20 7b 41 4c 54 45 52 20 54 41 42 4c 45 20 61  l {ALTER TABLE a
0640: 62 63 20 41 44 44 20 64 20 49 4e 54 45 47 45 52  bc ADD d INTEGER
0650: 3b 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  ;}.  execsql {. 
0660: 20 20 20 53 45 4c 45 43 54 20 73 71 6c 20 46 52     SELECT sql FR
0670: 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  OM sqlite_temp_m
0680: 61 73 74 65 72 3b 0a 20 20 7d 0a 7d 20 7b 7b 43  aster;.  }.} {{C
0690: 52 45 41 54 45 20 54 41 42 4c 45 20 61 62 63 28  REATE TABLE abc(
06a0: 61 2c 20 62 2c 20 63 2c 20 64 20 49 4e 54 45 47  a, b, c, d INTEG
06b0: 45 52 29 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 6c  ER)}}.do_test al
06c0: 74 65 72 34 2d 31 2e 32 62 20 7b 0a 20 20 65 78  ter4-1.2b {.  ex
06d0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
06e0: 43 54 20 73 71 6c 20 46 52 4f 4d 20 74 65 6d 70  CT sql FROM temp
06f0: 2e 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 0a  .sqlite_master;.
0700: 20 20 7d 0a 7d 20 7b 7b 43 52 45 41 54 45 20 54    }.} {{CREATE T
0710: 41 42 4c 45 20 61 62 63 28 61 2c 20 62 2c 20 63  ABLE abc(a, b, c
0720: 2c 20 64 20 49 4e 54 45 47 45 52 29 7d 7d 0a 64  , d INTEGER)}}.d
0730: 6f 5f 74 65 73 74 20 61 6c 74 65 72 34 2d 31 2e  o_test alter4-1.
0740: 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 41  3 {.  execsql {A
0750: 4c 54 45 52 20 54 41 42 4c 45 20 61 62 63 20 41  LTER TABLE abc A
0760: 44 44 20 65 7d 0a 20 20 65 78 65 63 73 71 6c 20  DD e}.  execsql 
0770: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 73 71 6c  {.    SELECT sql
0780: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d   FROM sqlite_tem
0790: 70 5f 6d 61 73 74 65 72 3b 0a 20 20 7d 0a 7d 20  p_master;.  }.} 
07a0: 7b 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 61  {{CREATE TABLE a
07b0: 62 63 28 61 2c 20 62 2c 20 63 2c 20 64 20 49 4e  bc(a, b, c, d IN
07c0: 54 45 47 45 52 2c 20 65 29 7d 7d 0a 64 6f 5f 74  TEGER, e)}}.do_t
07d0: 65 73 74 20 61 6c 74 65 72 34 2d 31 2e 33 62 20  est alter4-1.3b 
07e0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
07f0: 20 20 53 45 4c 45 43 54 20 73 71 6c 20 46 52 4f    SELECT sql FRO
0800: 4d 20 74 65 6d 70 2e 73 71 6c 69 74 65 5f 6d 61  M temp.sqlite_ma
0810: 73 74 65 72 3b 0a 20 20 7d 0a 7d 20 7b 7b 43 52  ster;.  }.} {{CR
0820: 45 41 54 45 20 54 41 42 4c 45 20 61 62 63 28 61  EATE TABLE abc(a
0830: 2c 20 62 2c 20 63 2c 20 64 20 49 4e 54 45 47 45  , b, c, d INTEGE
0840: 52 2c 20 65 29 7d 7d 0a 64 6f 5f 74 65 73 74 20  R, e)}}.do_test 
0850: 61 6c 74 65 72 34 2d 31 2e 34 20 7b 0a 20 20 65  alter4-1.4 {.  e
0860: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45  xecsql {.    CRE
0870: 41 54 45 20 54 41 42 4c 45 20 74 65 6d 70 2e 74  ATE TABLE temp.t
0880: 31 28 61 2c 20 62 29 3b 0a 20 20 20 20 41 4c 54  1(a, b);.    ALT
0890: 45 52 20 54 41 42 4c 45 20 74 31 20 41 44 44 20  ER TABLE t1 ADD 
08a0: 63 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 73 71  c;.    SELECT sq
08b0: 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65  l FROM sqlite_te
08c0: 6d 70 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20  mp_master WHERE 
08d0: 74 62 6c 5f 6e 61 6d 65 20 3d 20 27 74 31 27 3b  tbl_name = 't1';
08e0: 0a 20 20 7d 0a 7d 20 7b 7b 43 52 45 41 54 45 20  .  }.} {{CREATE 
08f0: 54 41 42 4c 45 20 74 31 28 61 2c 20 62 2c 20 63  TABLE t1(a, b, c
0900: 29 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65  )}}.do_test alte
0910: 72 34 2d 31 2e 34 62 20 7b 0a 20 20 65 78 65 63  r4-1.4b {.  exec
0920: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
0930: 20 73 71 6c 20 46 52 4f 4d 20 74 65 6d 70 2e 73   sql FROM temp.s
0940: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45  qlite_master WHE
0950: 52 45 20 74 62 6c 5f 6e 61 6d 65 20 3d 20 27 74  RE tbl_name = 't
0960: 31 27 3b 0a 20 20 7d 0a 7d 20 7b 7b 43 52 45 41  1';.  }.} {{CREA
0970: 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c 20 62  TE TABLE t1(a, b
0980: 2c 20 63 29 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  , c)}}.do_test a
0990: 6c 74 65 72 34 2d 31 2e 35 20 7b 0a 20 20 65 78  lter4-1.5 {.  ex
09a0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 41 4c 54 45  ecsql {.    ALTE
09b0: 52 20 54 41 42 4c 45 20 74 31 20 41 44 44 20 64  R TABLE t1 ADD d
09c0: 20 43 48 45 43 4b 20 28 61 3e 64 29 3b 0a 20 20   CHECK (a>d);.  
09d0: 20 20 53 45 4c 45 43 54 20 73 71 6c 20 46 52 4f    SELECT sql FRO
09e0: 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  M sqlite_temp_ma
09f0: 73 74 65 72 20 57 48 45 52 45 20 74 62 6c 5f 6e  ster WHERE tbl_n
0a00: 61 6d 65 20 3d 20 27 74 31 27 3b 0a 20 20 7d 0a  ame = 't1';.  }.
0a10: 7d 20 7b 7b 43 52 45 41 54 45 20 54 41 42 4c 45  } {{CREATE TABLE
0a20: 20 74 31 28 61 2c 20 62 2c 20 63 2c 20 64 20 43   t1(a, b, c, d C
0a30: 48 45 43 4b 20 28 61 3e 64 29 29 7d 7d 0a 69 66  HECK (a>d))}}.if
0a40: 63 61 70 61 62 6c 65 20 66 6f 72 65 69 67 6e 6b  capable foreignk
0a50: 65 79 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 61  ey {.  do_test a
0a60: 6c 74 65 72 34 2d 31 2e 36 20 7b 0a 20 20 20 20  lter4-1.6 {.    
0a70: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
0a80: 43 52 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c  CREATE TEMP TABL
0a90: 45 20 74 32 28 61 2c 20 62 2c 20 55 4e 49 51 55  E t2(a, b, UNIQU
0aa0: 45 28 61 2c 20 62 29 29 3b 0a 20 20 20 20 20 20  E(a, b));.      
0ab0: 41 4c 54 45 52 20 54 41 42 4c 45 20 74 32 20 41  ALTER TABLE t2 A
0ac0: 44 44 20 63 20 52 45 46 45 52 45 4e 43 45 53 20  DD c REFERENCES 
0ad0: 74 31 28 63 29 20 20 3b 0a 20 20 20 20 20 20 53  t1(c)  ;.      S
0ae0: 45 4c 45 43 54 20 73 71 6c 20 46 52 4f 4d 20 73  ELECT sql FROM s
0af0: 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
0b00: 72 0a 20 20 20 20 20 20 20 57 48 45 52 45 20 74  r.       WHERE t
0b10: 62 6c 5f 6e 61 6d 65 20 3d 20 27 74 32 27 20 41  bl_name = 't2' A
0b20: 4e 44 20 74 79 70 65 20 3d 20 27 74 61 62 6c 65  ND type = 'table
0b30: 27 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7b 43  ';.    }.  } {{C
0b40: 52 45 41 54 45 20 54 41 42 4c 45 20 74 32 28 61  REATE TABLE t2(a
0b50: 2c 20 62 2c 20 63 20 52 45 46 45 52 45 4e 43 45  , b, c REFERENCE
0b60: 53 20 74 31 28 63 29 2c 20 55 4e 49 51 55 45 28  S t1(c), UNIQUE(
0b70: 61 2c 20 62 29 29 7d 7d 0a 7d 0a 64 6f 5f 74 65  a, b))}}.}.do_te
0b80: 73 74 20 61 6c 74 65 72 34 2d 31 2e 37 20 7b 0a  st alter4-1.7 {.
0b90: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
0ba0: 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59  CREATE TEMPORARY
0bb0: 20 54 41 42 4c 45 20 74 33 28 61 2c 20 62 2c 20   TABLE t3(a, b, 
0bc0: 55 4e 49 51 55 45 28 61 2c 20 62 29 29 3b 0a 20  UNIQUE(a, b));. 
0bd0: 20 20 20 41 4c 54 45 52 20 54 41 42 4c 45 20 74     ALTER TABLE t
0be0: 33 20 41 44 44 20 43 4f 4c 55 4d 4e 20 63 20 56  3 ADD COLUMN c V
0bf0: 41 52 43 48 41 52 28 31 30 2c 20 32 30 29 3b 0a  ARCHAR(10, 20);.
0c00: 20 20 20 20 53 45 4c 45 43 54 20 73 71 6c 20 46      SELECT sql F
0c10: 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f  ROM sqlite_temp_
0c20: 6d 61 73 74 65 72 0a 20 20 20 20 20 57 48 45 52  master.     WHER
0c30: 45 20 74 62 6c 5f 6e 61 6d 65 20 3d 20 27 74 33  E tbl_name = 't3
0c40: 27 20 41 4e 44 20 74 79 70 65 20 3d 20 27 74 61  ' AND type = 'ta
0c50: 62 6c 65 27 3b 0a 20 20 7d 0a 7d 20 7b 7b 43 52  ble';.  }.} {{CR
0c60: 45 41 54 45 20 54 41 42 4c 45 20 74 33 28 61 2c  EATE TABLE t3(a,
0c70: 20 62 2c 20 63 20 56 41 52 43 48 41 52 28 31 30   b, c VARCHAR(10
0c80: 2c 20 32 30 29 2c 20 55 4e 49 51 55 45 28 61 2c  , 20), UNIQUE(a,
0c90: 20 62 29 29 7d 7d 0a 64 6f 5f 74 65 73 74 20 61   b))}}.do_test a
0ca0: 6c 74 65 72 34 2d 31 2e 39 39 20 7b 0a 20 20 63  lter4-1.99 {.  c
0cb0: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 23 20  atchsql {.    # 
0cc0: 4d 61 79 20 6e 6f 74 20 65 78 69 73 74 20 69 66  May not exist if
0cd0: 20 66 6f 72 69 65 67 6e 2d 6b 65 79 73 20 61 72   foriegn-keys ar
0ce0: 65 20 6f 6d 69 74 74 65 64 20 61 74 20 63 6f 6d  e omitted at com
0cf0: 70 69 6c 65 20 74 69 6d 65 2e 0a 20 20 20 20 44  pile time..    D
0d00: 52 4f 50 20 54 41 42 4c 45 20 74 32 3b 20 0a 20  ROP TABLE t2; . 
0d10: 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   }.  execsql {. 
0d20: 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 61 62     DROP TABLE ab
0d30: 63 3b 20 0a 20 20 20 20 44 52 4f 50 20 54 41 42  c; .    DROP TAB
0d40: 4c 45 20 74 31 3b 20 0a 20 20 20 20 44 52 4f 50  LE t1; .    DROP
0d50: 20 54 41 42 4c 45 20 74 33 3b 20 0a 20 20 7d 0a   TABLE t3; .  }.
0d60: 7d 20 7b 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 6c  } {}..do_test al
0d70: 74 65 72 34 2d 32 2e 31 20 7b 0a 20 20 65 78 65  ter4-2.1 {.  exe
0d80: 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  csql {.    CREAT
0d90: 45 20 54 41 42 4c 45 20 74 65 6d 70 2e 74 31 28  E TABLE temp.t1(
0da0: 61 2c 20 62 29 3b 0a 20 20 7d 0a 20 20 63 61 74  a, b);.  }.  cat
0db0: 63 68 73 71 6c 20 7b 0a 20 20 20 20 41 4c 54 45  chsql {.    ALTE
0dc0: 52 20 54 41 42 4c 45 20 74 31 20 41 44 44 20 63  R TABLE t1 ADD c
0dd0: 20 50 52 49 4d 41 52 59 20 4b 45 59 3b 0a 20 20   PRIMARY KEY;.  
0de0: 7d 0a 7d 20 7b 31 20 7b 43 61 6e 6e 6f 74 20 61  }.} {1 {Cannot a
0df0: 64 64 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59  dd a PRIMARY KEY
0e00: 20 63 6f 6c 75 6d 6e 7d 7d 0a 64 6f 5f 74 65 73   column}}.do_tes
0e10: 74 20 61 6c 74 65 72 34 2d 32 2e 32 20 7b 0a 20  t alter4-2.2 {. 
0e20: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
0e30: 41 4c 54 45 52 20 54 41 42 4c 45 20 74 31 20 41  ALTER TABLE t1 A
0e40: 44 44 20 63 20 55 4e 49 51 55 45 0a 20 20 7d 0a  DD c UNIQUE.  }.
0e50: 7d 20 7b 31 20 7b 43 61 6e 6e 6f 74 20 61 64 64  } {1 {Cannot add
0e60: 20 61 20 55 4e 49 51 55 45 20 63 6f 6c 75 6d 6e   a UNIQUE column
0e70: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72  }}.do_test alter
0e80: 34 2d 32 2e 33 20 7b 0a 20 20 63 61 74 63 68 73  4-2.3 {.  catchs
0e90: 71 6c 20 7b 0a 20 20 20 20 41 4c 54 45 52 20 54  ql {.    ALTER T
0ea0: 41 42 4c 45 20 74 31 20 41 44 44 20 62 20 56 41  ABLE t1 ADD b VA
0eb0: 52 43 48 41 52 28 31 30 29 0a 20 20 7d 0a 7d 20  RCHAR(10).  }.} 
0ec0: 7b 31 20 7b 64 75 70 6c 69 63 61 74 65 20 63 6f  {1 {duplicate co
0ed0: 6c 75 6d 6e 20 6e 61 6d 65 3a 20 62 7d 7d 0a 64  lumn name: b}}.d
0ee0: 6f 5f 74 65 73 74 20 61 6c 74 65 72 34 2d 32 2e  o_test alter4-2.
0ef0: 33 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  3 {.  catchsql {
0f00: 0a 20 20 20 20 41 4c 54 45 52 20 54 41 42 4c 45  .    ALTER TABLE
0f10: 20 74 31 20 41 44 44 20 63 20 4e 4f 54 20 4e 55   t1 ADD c NOT NU
0f20: 4c 4c 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 43 61  LL;.  }.} {1 {Ca
0f30: 6e 6e 6f 74 20 61 64 64 20 61 20 4e 4f 54 20 4e  nnot add a NOT N
0f40: 55 4c 4c 20 63 6f 6c 75 6d 6e 20 77 69 74 68 20  ULL column with 
0f50: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 4e 55  default value NU
0f60: 4c 4c 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74  LL}}.do_test alt
0f70: 65 72 34 2d 32 2e 34 20 7b 0a 20 20 63 61 74 63  er4-2.4 {.  catc
0f80: 68 73 71 6c 20 7b 0a 20 20 20 20 41 4c 54 45 52  hsql {.    ALTER
0f90: 20 54 41 42 4c 45 20 74 31 20 41 44 44 20 63 20   TABLE t1 ADD c 
0fa0: 4e 4f 54 20 4e 55 4c 4c 20 44 45 46 41 55 4c 54  NOT NULL DEFAULT
0fb0: 20 31 30 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d   10;.  }.} {0 {}
0fc0: 7d 0a 69 66 63 61 70 61 62 6c 65 20 76 69 65 77  }.ifcapable view
0fd0: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 61 6c 74   {.  do_test alt
0fe0: 65 72 34 2d 32 2e 35 20 7b 0a 20 20 20 20 65 78  er4-2.5 {.    ex
0ff0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 43 52  ecsql {.      CR
1000: 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20 56  EATE TEMPORARY V
1010: 49 45 57 20 76 31 20 41 53 20 53 45 4c 45 43 54  IEW v1 AS SELECT
1020: 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20   * FROM t1;.    
1030: 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b  }.    catchsql {
1040: 0a 20 20 20 20 20 20 61 6c 74 65 72 20 74 61 62  .      alter tab
1050: 6c 65 20 76 31 20 61 64 64 20 63 6f 6c 75 6d 6e  le v1 add column
1060: 20 64 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31   d;.    }.  } {1
1070: 20 7b 43 61 6e 6e 6f 74 20 61 64 64 20 61 20 63   {Cannot add a c
1080: 6f 6c 75 6d 6e 20 74 6f 20 61 20 76 69 65 77 7d  olumn to a view}
1090: 7d 0a 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65  }.}.do_test alte
10a0: 72 34 2d 32 2e 36 20 7b 0a 20 20 63 61 74 63 68  r4-2.6 {.  catch
10b0: 73 71 6c 20 7b 0a 20 20 20 20 61 6c 74 65 72 20  sql {.    alter 
10c0: 74 61 62 6c 65 20 74 31 20 61 64 64 20 63 6f 6c  table t1 add col
10d0: 75 6d 6e 20 64 20 44 45 46 41 55 4c 54 20 43 55  umn d DEFAULT CU
10e0: 52 52 45 4e 54 5f 54 49 4d 45 3b 0a 20 20 7d 0a  RRENT_TIME;.  }.
10f0: 7d 20 7b 31 20 7b 43 61 6e 6e 6f 74 20 61 64 64  } {1 {Cannot add
1100: 20 61 20 63 6f 6c 75 6d 6e 20 77 69 74 68 20 6e   a column with n
1110: 6f 6e 2d 63 6f 6e 73 74 61 6e 74 20 64 65 66 61  on-constant defa
1120: 75 6c 74 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 6c  ult}}.do_test al
1130: 74 65 72 34 2d 32 2e 37 20 7b 0a 20 20 63 61 74  ter4-2.7 {.  cat
1140: 63 68 73 71 6c 20 7b 0a 20 20 20 20 61 6c 74 65  chsql {.    alte
1150: 72 20 74 61 62 6c 65 20 74 31 20 61 64 64 20 63  r table t1 add c
1160: 6f 6c 75 6d 6e 20 64 20 64 65 66 61 75 6c 74 20  olumn d default 
1170: 28 2d 35 2b 31 29 3b 0a 20 20 7d 0a 7d 20 7b 31  (-5+1);.  }.} {1
1180: 20 7b 43 61 6e 6e 6f 74 20 61 64 64 20 61 20 63   {Cannot add a c
1190: 6f 6c 75 6d 6e 20 77 69 74 68 20 6e 6f 6e 2d 63  olumn with non-c
11a0: 6f 6e 73 74 61 6e 74 20 64 65 66 61 75 6c 74 7d  onstant default}
11b0: 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 34  }.do_test alter4
11c0: 2d 32 2e 39 39 20 7b 0a 20 20 65 78 65 63 73 71  -2.99 {.  execsq
11d0: 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20 54 41 42  l {.    DROP TAB
11e0: 4c 45 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a  LE t1;.  }.} {}.
11f0: 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 34 2d  .do_test alter4-
1200: 33 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  3.1 {.  execsql 
1210: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 45 4d  {.    CREATE TEM
1220: 50 20 54 41 42 4c 45 20 74 31 28 61 2c 20 62 29  P TABLE t1(a, b)
1230: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
1240: 4f 20 74 31 20 56 41 4c 55 45 53 28 31 2c 20 31  O t1 VALUES(1, 1
1250: 30 30 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  00);.    INSERT 
1260: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 32  INTO t1 VALUES(2
1270: 2c 20 33 30 30 29 3b 0a 20 20 20 20 53 45 4c 45  , 300);.    SELE
1280: 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20  CT * FROM t1;.  
1290: 7d 0a 7d 20 7b 31 20 31 30 30 20 32 20 33 30 30  }.} {1 100 2 300
12a0: 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 34  }.do_test alter4
12b0: 2d 33 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  -3.1 {.  execsql
12c0: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 63   {.    PRAGMA sc
12d0: 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20 3d 20 31  hema_version = 1
12e0: 30 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74  0;.  }.} {}.do_t
12f0: 65 73 74 20 61 6c 74 65 72 34 2d 33 2e 32 20 7b  est alter4-3.2 {
1300: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
1310: 20 41 4c 54 45 52 20 54 41 42 4c 45 20 74 31 20   ALTER TABLE t1 
1320: 41 44 44 20 63 3b 0a 20 20 20 20 53 45 4c 45 43  ADD c;.    SELEC
1330: 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d  T * FROM t1;.  }
1340: 0a 7d 20 7b 31 20 31 30 30 20 7b 7d 20 32 20 33  .} {1 100 {} 2 3
1350: 30 30 20 7b 7d 7d 0a 69 66 63 61 70 61 62 6c 65  00 {}}.ifcapable
1360: 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20   schema_version 
1370: 7b 0a 20 20 64 6f 5f 74 65 73 74 20 61 6c 74 65  {.  do_test alte
1380: 72 34 2d 33 2e 34 20 7b 0a 20 20 20 20 65 78 65  r4-3.4 {.    exe
1390: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41  csql {.      PRA
13a0: 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69  GMA schema_versi
13b0: 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31  on;.    }.  } {1
13c0: 30 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 6c  0}.}..do_test al
13d0: 74 65 72 34 2d 34 2e 31 20 7b 0a 20 20 64 62 20  ter4-4.1 {.  db 
13e0: 63 6c 6f 73 65 0a 20 20 66 6f 72 63 65 64 65 6c  close.  forcedel
13f0: 65 74 65 20 74 65 73 74 2e 64 62 0a 20 20 73 65  ete test.db.  se
1400: 74 20 3a 3a 44 42 20 5b 73 71 6c 69 74 65 33 20  t ::DB [sqlite3 
1410: 64 62 20 74 65 73 74 2e 64 62 5d 0a 20 20 65 78  db test.db].  ex
1420: 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41  ecsql {.    CREA
1430: 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 74 31  TE TEMP TABLE t1
1440: 28 61 2c 20 62 29 3b 0a 20 20 20 20 49 4e 53 45  (a, b);.    INSE
1450: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
1460: 53 28 31 2c 20 31 30 30 29 3b 0a 20 20 20 20 49  S(1, 100);.    I
1470: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
1480: 4c 55 45 53 28 32 2c 20 33 30 30 29 3b 0a 20 20  LUES(2, 300);.  
1490: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
14a0: 74 31 3b 0a 20 20 7d 0a 7d 20 7b 31 20 31 30 30  t1;.  }.} {1 100
14b0: 20 32 20 33 30 30 7d 0a 64 6f 5f 74 65 73 74 20   2 300}.do_test 
14c0: 61 6c 74 65 72 34 2d 34 2e 31 20 7b 0a 20 20 65  alter4-4.1 {.  e
14d0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
14e0: 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69  GMA schema_versi
14f0: 6f 6e 20 3d 20 32 30 3b 0a 20 20 7d 0a 7d 20 7b  on = 20;.  }.} {
1500: 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 34  }.do_test alter4
1510: 2d 34 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  -4.2 {.  execsql
1520: 20 7b 0a 20 20 20 20 41 4c 54 45 52 20 54 41 42   {.    ALTER TAB
1530: 4c 45 20 74 31 20 41 44 44 20 63 20 44 45 46 41  LE t1 ADD c DEFA
1540: 55 4c 54 20 27 68 65 6c 6c 6f 20 77 6f 72 6c 64  ULT 'hello world
1550: 27 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20  ';.    SELECT * 
1560: 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b  FROM t1;.  }.} {
1570: 31 20 31 30 30 20 7b 68 65 6c 6c 6f 20 77 6f 72  1 100 {hello wor
1580: 6c 64 7d 20 32 20 33 30 30 20 7b 68 65 6c 6c 6f  ld} 2 300 {hello
1590: 20 77 6f 72 6c 64 7d 7d 0a 69 66 63 61 70 61 62   world}}.ifcapab
15a0: 6c 65 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f  le schema_versio
15b0: 6e 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 61 6c  n {.  do_test al
15c0: 74 65 72 34 2d 34 2e 34 20 7b 0a 20 20 20 20 65  ter4-4.4 {.    e
15d0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50  xecsql {.      P
15e0: 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72  RAGMA schema_ver
15f0: 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  sion;.    }.  } 
1600: 7b 32 30 7d 0a 7d 0a 64 6f 5f 74 65 73 74 20 61  {20}.}.do_test a
1610: 6c 74 65 72 34 2d 34 2e 39 39 20 7b 0a 20 20 65  lter4-4.99 {.  e
1620: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f  xecsql {.    DRO
1630: 50 20 54 41 42 4c 45 20 74 31 3b 0a 20 20 7d 0a  P TABLE t1;.  }.
1640: 7d 20 7b 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20  } {}..ifcapable 
1650: 61 74 74 61 63 68 20 7b 0a 20 20 64 6f 5f 74 65  attach {.  do_te
1660: 73 74 20 61 6c 74 65 72 34 2d 35 2e 31 20 7b 0a  st alter4-5.1 {.
1670: 20 20 20 20 66 6f 72 63 65 64 65 6c 65 74 65 20      forcedelete 
1680: 74 65 73 74 32 2e 64 62 0a 20 20 20 20 66 6f 72  test2.db.    for
1690: 63 65 64 65 6c 65 74 65 20 74 65 73 74 32 2e 64  cedelete test2.d
16a0: 62 2d 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 65 78  b-journal.    ex
16b0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 43 52  ecsql {.      CR
16c0: 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20  EATE TEMP TABLE 
16d0: 74 31 28 61 2c 20 62 29 3b 0a 20 20 20 20 20 20  t1(a, b);.      
16e0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
16f0: 41 4c 55 45 53 28 31 2c 20 27 6f 6e 65 27 29 3b  ALUES(1, 'one');
1700: 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e  .      INSERT IN
1710: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 32 2c 20  TO t1 VALUES(2, 
1720: 27 74 77 6f 27 29 3b 0a 20 20 20 20 20 20 41 54  'two');.      AT
1730: 54 41 43 48 20 27 74 65 73 74 32 2e 64 62 27 20  TACH 'test2.db' 
1740: 41 53 20 61 75 78 3b 0a 20 20 20 20 20 20 43 52  AS aux;.      CR
1750: 45 41 54 45 20 54 41 42 4c 45 20 61 75 78 2e 74  EATE TABLE aux.t
1760: 31 20 41 53 20 53 45 4c 45 43 54 20 2a 20 46 52  1 AS SELECT * FR
1770: 4f 4d 20 74 31 3b 0a 20 20 20 20 20 20 50 52 41  OM t1;.      PRA
1780: 47 4d 41 20 61 75 78 2e 73 63 68 65 6d 61 5f 76  GMA aux.schema_v
1790: 65 72 73 69 6f 6e 20 3d 20 33 30 3b 0a 20 20 20  ersion = 30;.   
17a0: 20 20 20 53 45 4c 45 43 54 20 73 71 6c 20 46 52     SELECT sql FR
17b0: 4f 4d 20 61 75 78 2e 73 71 6c 69 74 65 5f 6d 61  OM aux.sqlite_ma
17c0: 73 74 65 72 3b 0a 20 20 20 20 7d 20 0a 20 20 7d  ster;.    } .  }
17d0: 20 7b 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20   {{CREATE TABLE 
17e0: 74 31 28 61 2c 62 29 7d 7d 0a 20 20 64 6f 5f 74  t1(a,b)}}.  do_t
17f0: 65 73 74 20 61 6c 74 65 72 34 2d 35 2e 32 20 7b  est alter4-5.2 {
1800: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
1810: 20 20 20 20 20 41 4c 54 45 52 20 54 41 42 4c 45       ALTER TABLE
1820: 20 61 75 78 2e 74 31 20 41 44 44 20 43 4f 4c 55   aux.t1 ADD COLU
1830: 4d 4e 20 63 20 56 41 52 43 48 41 52 28 31 32 38  MN c VARCHAR(128
1840: 29 3b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20  );.      SELECT 
1850: 73 71 6c 20 46 52 4f 4d 20 61 75 78 2e 73 71 6c  sql FROM aux.sql
1860: 69 74 65 5f 6d 61 73 74 65 72 3b 0a 20 20 20 20  ite_master;.    
1870: 7d 0a 20 20 7d 20 7b 7b 43 52 45 41 54 45 20 54  }.  } {{CREATE T
1880: 41 42 4c 45 20 74 31 28 61 2c 62 2c 20 63 20 56  ABLE t1(a,b, c V
1890: 41 52 43 48 41 52 28 31 32 38 29 29 7d 7d 0a 20  ARCHAR(128))}}. 
18a0: 20 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 34 2d   do_test alter4-
18b0: 35 2e 33 20 7b 0a 20 20 20 20 65 78 65 63 73 71  5.3 {.    execsq
18c0: 6c 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54  l {.      SELECT
18d0: 20 2a 20 46 52 4f 4d 20 61 75 78 2e 74 31 3b 0a   * FROM aux.t1;.
18e0: 20 20 20 20 7d 0a 20 20 7d 20 7b 31 20 6f 6e 65      }.  } {1 one
18f0: 20 7b 7d 20 32 20 74 77 6f 20 7b 7d 7d 0a 20 20   {} 2 two {}}.  
1900: 69 66 63 61 70 61 62 6c 65 20 73 63 68 65 6d 61  ifcapable schema
1910: 5f 76 65 72 73 69 6f 6e 20 7b 0a 20 20 20 20 64  _version {.    d
1920: 6f 5f 74 65 73 74 20 61 6c 74 65 72 34 2d 35 2e  o_test alter4-5.
1930: 34 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71  4 {.      execsq
1940: 6c 20 7b 0a 20 20 20 20 20 20 20 20 50 52 41 47  l {.        PRAG
1950: 4d 41 20 61 75 78 2e 73 63 68 65 6d 61 5f 76 65  MA aux.schema_ve
1960: 72 73 69 6f 6e 3b 0a 20 20 20 20 20 20 7d 0a 20  rsion;.      }. 
1970: 20 20 20 7d 20 7b 33 31 7d 0a 20 20 7d 0a 20 20     } {31}.  }.  
1980: 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 34 2d 35  do_test alter4-5
1990: 2e 36 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .6 {.    execsql
19a0: 20 7b 0a 20 20 20 20 20 20 41 4c 54 45 52 20 54   {.      ALTER T
19b0: 41 42 4c 45 20 61 75 78 2e 74 31 20 41 44 44 20  ABLE aux.t1 ADD 
19c0: 43 4f 4c 55 4d 4e 20 64 20 44 45 46 41 55 4c 54  COLUMN d DEFAULT
19d0: 20 31 30 30 30 3b 0a 20 20 20 20 20 20 53 45 4c   1000;.      SEL
19e0: 45 43 54 20 73 71 6c 20 46 52 4f 4d 20 61 75 78  ECT sql FROM aux
19f0: 2e 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 0a  .sqlite_master;.
1a00: 20 20 20 20 7d 0a 20 20 7d 20 7b 7b 43 52 45 41      }.  } {{CREA
1a10: 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c 62 2c  TE TABLE t1(a,b,
1a20: 20 63 20 56 41 52 43 48 41 52 28 31 32 38 29 2c   c VARCHAR(128),
1a30: 20 64 20 44 45 46 41 55 4c 54 20 31 30 30 30 29   d DEFAULT 1000)
1a40: 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 6c 74  }}.  do_test alt
1a50: 65 72 34 2d 35 2e 37 20 7b 0a 20 20 20 20 65 78  er4-5.7 {.    ex
1a60: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 53 45  ecsql {.      SE
1a70: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 61 75 78 2e  LECT * FROM aux.
1a80: 74 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31  t1;.    }.  } {1
1a90: 20 6f 6e 65 20 7b 7d 20 31 30 30 30 20 32 20 74   one {} 1000 2 t
1aa0: 77 6f 20 7b 7d 20 31 30 30 30 7d 0a 20 20 69 66  wo {} 1000}.  if
1ab0: 63 61 70 61 62 6c 65 20 73 63 68 65 6d 61 5f 76  capable schema_v
1ac0: 65 72 73 69 6f 6e 20 7b 0a 20 20 20 20 64 6f 5f  ersion {.    do_
1ad0: 74 65 73 74 20 61 6c 74 65 72 34 2d 35 2e 38 20  test alter4-5.8 
1ae0: 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20  {.      execsql 
1af0: 7b 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d 41  {.        PRAGMA
1b00: 20 61 75 78 2e 73 63 68 65 6d 61 5f 76 65 72 73   aux.schema_vers
1b10: 69 6f 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ion;.      }.   
1b20: 20 7d 20 7b 33 32 7d 0a 20 20 7d 0a 20 20 64 6f   } {32}.  }.  do
1b30: 5f 74 65 73 74 20 61 6c 74 65 72 34 2d 35 2e 39  _test alter4-5.9
1b40: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
1b50: 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 2a 20  .      SELECT * 
1b60: 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20 7d 0a 20  FROM t1;.    }. 
1b70: 20 7d 20 7b 31 20 6f 6e 65 20 32 20 74 77 6f 7d   } {1 one 2 two}
1b80: 0a 20 20 64 6f 5f 74 65 73 74 20 61 6c 74 65 72  .  do_test alter
1b90: 34 2d 35 2e 39 39 20 7b 0a 20 20 20 20 65 78 65  4-5.99 {.    exe
1ba0: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 44 52 4f  csql {.      DRO
1bb0: 50 20 54 41 42 4c 45 20 61 75 78 2e 74 31 3b 0a  P TABLE aux.t1;.
1bc0: 20 20 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45        DROP TABLE
1bd0: 20 74 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b   t1;.    }.  } {
1be0: 7d 0a 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  }.}..#----------
1bf0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1c00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1c10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1c20: 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73 74 20 74 68  ------.# Test th
1c30: 61 74 20 74 68 65 20 74 61 62 6c 65 20 73 63 68  at the table sch
1c40: 65 6d 61 20 69 73 20 63 6f 72 72 65 63 74 6c 79  ema is correctly
1c50: 20 72 65 6c 6f 61 64 65 64 20 77 68 65 6e 20 61   reloaded when a
1c60: 20 63 6f 6c 75 6d 6e 0a 23 20 69 73 20 61 64 64   column.# is add
1c70: 65 64 20 74 6f 20 61 20 74 61 62 6c 65 2e 0a 23  ed to a table..#
1c80: 0a 69 66 63 61 70 61 62 6c 65 20 74 72 69 67 67  .ifcapable trigg
1c90: 65 72 26 26 74 65 6d 70 64 62 20 7b 0a 20 20 64  er&&tempdb {.  d
1ca0: 6f 5f 74 65 73 74 20 61 6c 74 65 72 34 2d 36 2e  o_test alter4-6.
1cb0: 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  1 {.    execsql 
1cc0: 7b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54  {.      CREATE T
1cd0: 45 4d 50 20 54 41 42 4c 45 20 74 31 28 61 2c 20  EMP TABLE t1(a, 
1ce0: 62 29 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45  b);.      CREATE
1cf0: 20 54 45 4d 50 20 54 41 42 4c 45 20 6c 6f 67 28   TEMP TABLE log(
1d00: 74 72 69 67 2c 20 61 2c 20 62 29 3b 0a 0a 20 20  trig, a, b);..  
1d10: 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47      CREATE TRIGG
1d20: 45 52 20 74 31 5f 61 20 41 46 54 45 52 20 49 4e  ER t1_a AFTER IN
1d30: 53 45 52 54 20 4f 4e 20 74 31 20 42 45 47 49 4e  SERT ON t1 BEGIN
1d40: 0a 20 20 20 20 20 20 20 20 49 4e 53 45 52 54 20  .        INSERT 
1d50: 49 4e 54 4f 20 6c 6f 67 20 56 41 4c 55 45 53 28  INTO log VALUES(
1d60: 27 61 27 2c 20 6e 65 77 2e 61 2c 20 6e 65 77 2e  'a', new.a, new.
1d70: 62 29 3b 0a 20 20 20 20 20 20 45 4e 44 3b 0a 20  b);.      END;. 
1d80: 20 20 20 20 20 43 52 45 41 54 45 20 54 45 4d 50       CREATE TEMP
1d90: 20 54 52 49 47 47 45 52 20 74 31 5f 62 20 41 46   TRIGGER t1_b AF
1da0: 54 45 52 20 49 4e 53 45 52 54 20 4f 4e 20 74 31  TER INSERT ON t1
1db0: 20 42 45 47 49 4e 0a 20 20 20 20 20 20 20 20 49   BEGIN.        I
1dc0: 4e 53 45 52 54 20 49 4e 54 4f 20 6c 6f 67 20 56  NSERT INTO log V
1dd0: 41 4c 55 45 53 28 27 62 27 2c 20 6e 65 77 2e 61  ALUES('b', new.a
1de0: 2c 20 6e 65 77 2e 62 29 3b 0a 20 20 20 20 20 20  , new.b);.      
1df0: 45 4e 44 3b 0a 20 20 0a 20 20 20 20 20 20 49 4e  END;.  .      IN
1e00: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
1e10: 55 45 53 28 31 2c 20 32 29 3b 0a 20 20 20 20 20  UES(1, 2);.     
1e20: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 6c   SELECT * FROM l
1e30: 6f 67 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 62  og;.    }.  } {b
1e40: 20 31 20 32 20 61 20 31 20 32 7d 0a 20 20 64 6f   1 2 a 1 2}.  do
1e50: 5f 74 65 73 74 20 61 6c 74 65 72 34 2d 36 2e 32  _test alter4-6.2
1e60: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
1e70: 0a 20 20 20 20 20 20 41 4c 54 45 52 20 54 41 42  .      ALTER TAB
1e80: 4c 45 20 74 31 20 41 44 44 20 43 4f 4c 55 4d 4e  LE t1 ADD COLUMN
1e90: 20 63 20 44 45 46 41 55 4c 54 20 27 63 27 3b 0a   c DEFAULT 'c';.
1ea0: 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54        INSERT INT
1eb0: 4f 20 74 31 28 61 2c 20 62 29 20 56 41 4c 55 45  O t1(a, b) VALUE
1ec0: 53 28 33 2c 20 34 29 3b 0a 20 20 20 20 20 20 53  S(3, 4);.      S
1ed0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 6c 6f 67  ELECT * FROM log
1ee0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 62 20 31  ;.    }.  } {b 1
1ef0: 20 32 20 61 20 31 20 32 20 62 20 33 20 34 20 61   2 a 1 2 b 3 4 a
1f00: 20 33 20 34 7d 0a 7d 0a 0a 23 20 54 69 63 6b 65   3 4}.}..# Ticke
1f10: 74 20 23 31 31 38 33 20 2d 20 4d 61 6b 65 20 73  t #1183 - Make s
1f20: 75 72 65 20 61 64 64 69 6e 67 20 63 6f 6c 75 6d  ure adding colum
1f30: 6e 73 20 74 6f 20 6c 61 72 67 65 20 74 61 62 6c  ns to large tabl
1f40: 65 73 20 64 6f 65 73 20 6e 6f 74 20 63 61 75 73  es does not caus
1f50: 65 0a 23 20 6d 65 6d 6f 72 79 20 63 6f 72 72 75  e.# memory corru
1f60: 70 74 69 6f 6e 20 28 61 73 20 77 61 73 20 74 68  ption (as was th
1f70: 65 20 63 61 73 65 20 62 65 66 6f 72 65 20 74 68  e case before th
1f80: 69 73 20 62 75 67 20 77 61 73 20 66 69 78 65 64  is bug was fixed
1f90: 29 2e 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72  )..do_test alter
1fa0: 34 2d 38 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  4-8.1 {.  execsq
1fb0: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
1fc0: 45 4d 50 20 54 41 42 4c 45 20 74 34 28 63 31 29  EMP TABLE t4(c1)
1fd0: 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 73 65 74 20 3a  ;.  }.} {}.set :
1fe0: 3a 73 71 6c 20 22 22 0a 64 6f 5f 74 65 73 74 20  :sql "".do_test 
1ff0: 61 6c 74 65 72 34 2d 38 2e 32 20 7b 0a 20 20 73  alter4-8.2 {.  s
2000: 65 74 20 63 6f 6c 73 20 63 31 0a 20 20 66 6f 72  et cols c1.  for
2010: 20 7b 73 65 74 20 69 20 32 7d 20 7b 24 69 20 3c   {set i 2} {$i <
2020: 20 31 30 30 7d 20 7b 69 6e 63 72 20 69 7d 20 7b   100} {incr i} {
2030: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 22 0a 20  .    execsql ". 
2040: 20 20 20 20 20 41 4c 54 45 52 20 54 41 42 4c 45       ALTER TABLE
2050: 20 74 34 20 41 44 44 20 63 24 69 0a 20 20 20 20   t4 ADD c$i.    
2060: 22 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 63 6f  ".    lappend co
2070: 6c 73 20 63 24 69 0a 20 20 7d 0a 20 20 73 65 74  ls c$i.  }.  set
2080: 20 3a 3a 73 71 6c 20 22 43 52 45 41 54 45 20 54   ::sql "CREATE T
2090: 41 42 4c 45 20 74 34 28 5b 6a 6f 69 6e 20 24 63  ABLE t4([join $c
20a0: 6f 6c 73 20 7b 2c 20 7d 5d 29 22 0a 20 20 6c 69  ols {, }])".  li
20b0: 73 74 20 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74  st .} {}.do_test
20c0: 20 61 6c 74 65 72 34 2d 38 2e 32 20 7b 0a 20 20   alter4-8.2 {.  
20d0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
20e0: 4c 45 43 54 20 73 71 6c 20 46 52 4f 4d 20 73 71  LECT sql FROM sq
20f0: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
2100: 20 57 48 45 52 45 20 6e 61 6d 65 20 3d 20 27 74   WHERE name = 't
2110: 34 27 3b 0a 20 20 7d 0a 7d 20 5b 6c 69 73 74 20  4';.  }.} [list 
2120: 24 3a 3a 73 71 6c 5d 0a 0a 0a 23 20 54 65 73 74  $::sql]...# Test
2130: 20 74 68 61 74 20 61 20 64 65 66 61 75 6c 74 20   that a default 
2140: 76 61 6c 75 65 20 65 71 75 61 6c 20 74 6f 20 2d  value equal to -
2150: 31 20 6d 75 6c 74 69 70 69 65 64 20 62 79 20 74  1 multipied by t
2160: 68 65 20 73 6d 61 6c 6c 65 73 74 20 70 6f 73 73  he smallest poss
2170: 69 62 6c 65 0a 23 20 36 34 2d 62 69 74 20 69 6e  ible.# 64-bit in
2180: 74 65 67 65 72 20 69 73 20 63 6f 72 72 65 63 74  teger is correct
2190: 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20  ly converted to 
21a0: 61 20 72 65 61 6c 2e 0a 64 6f 5f 65 78 65 63 73  a real..do_execs
21b0: 71 6c 5f 74 65 73 74 20 61 6c 74 65 72 34 2d 39  ql_test alter4-9
21c0: 2e 31 20 7b 0a 20 20 43 52 45 41 54 45 20 54 41  .1 {.  CREATE TA
21d0: 42 4c 45 20 74 35 28 0a 20 20 20 20 61 20 49 4e  BLE t5(.    a IN
21e0: 54 45 47 45 52 20 44 45 46 41 55 4c 54 20 2d 39  TEGER DEFAULT -9
21f0: 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38  2233720368547758
2200: 30 38 2c 0a 20 20 20 20 62 20 49 4e 54 45 47 45  08,.    b INTEGE
2210: 52 20 44 45 46 41 55 4c 54 20 28 2d 28 2d 39 32  R DEFAULT (-(-92
2220: 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30  2337203685477580
2230: 38 29 29 0a 20 20 29 3b 0a 20 20 49 4e 53 45 52  8)).  );.  INSER
2240: 54 20 49 4e 54 4f 20 74 35 20 44 45 46 41 55 4c  T INTO t5 DEFAUL
2250: 54 20 56 41 4c 55 45 53 3b 0a 7d 0a 0a 64 6f 5f  T VALUES;.}..do_
2260: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 61 6c 74  execsql_test alt
2270: 65 72 34 2d 39 2e 32 20 7b 20 53 45 4c 45 43 54  er4-9.2 { SELECT
2280: 20 74 79 70 65 6f 66 28 61 29 2c 20 61 2c 20 74   typeof(a), a, t
2290: 79 70 65 6f 66 28 62 29 2c 20 62 20 46 52 4f 4d  ypeof(b), b FROM
22a0: 20 74 35 3b 20 7d 20 7b 0a 20 20 69 6e 74 65 67   t5; } {.  integ
22b0: 65 72 20 2d 39 32 32 33 33 37 32 30 33 36 38 35  er -922337203685
22c0: 34 37 37 35 38 30 38 0a 20 20 72 65 61 6c 20 20  4775808.  real  
22d0: 20 20 20 39 2e 32 32 33 33 37 32 30 33 36 38 35     9.22337203685
22e0: 34 37 38 65 2b 31 38 0a 7d 0a 0a 64 6f 5f 65 78  478e+18.}..do_ex
22f0: 65 63 73 71 6c 5f 74 65 73 74 20 61 6c 74 65 72  ecsql_test alter
2300: 34 2d 39 2e 33 20 7b 20 0a 20 20 41 4c 54 45 52  4-9.3 { .  ALTER
2310: 20 54 41 42 4c 45 20 74 35 20 41 44 44 20 43 4f   TABLE t5 ADD CO
2320: 4c 55 4d 4e 20 63 20 49 4e 54 45 47 45 52 20 44  LUMN c INTEGER D
2330: 45 46 41 55 4c 54 20 28 2d 28 2d 39 32 32 33 33  EFAULT (-(-92233
2340: 37 32 30 33 36 38 35 34 37 37 35 38 30 38 29 29  72036854775808))
2350: 3b 0a 20 20 53 45 4c 45 43 54 20 74 79 70 65 6f  ;.  SELECT typeo
2360: 66 28 63 29 2c 20 63 20 46 52 4f 4d 20 74 35 3b  f(c), c FROM t5;
2370: 0a 7d 20 7b 72 65 61 6c 20 39 2e 32 32 33 33 37  .} {real 9.22337
2380: 32 30 33 36 38 35 34 37 38 65 2b 31 38 7d 0a 0a  203685478e+18}..
2390: 23 20 43 6f 6e 66 69 72 6d 20 74 68 61 74 20 64  # Confirm that d
23a0: 6f 69 6e 67 20 61 6e 20 41 4c 54 45 52 20 54 41  oing an ALTER TA
23b0: 42 4c 45 20 6f 6e 20 61 20 6c 65 67 61 63 79 20  BLE on a legacy 
23c0: 66 6f 72 6d 61 74 20 64 61 74 61 62 61 73 65 0a  format database.
23d0: 23 20 64 6f 65 73 20 6e 6f 74 20 63 6f 72 72 75  # does not corru
23e0: 70 74 20 44 45 53 43 20 69 6e 64 65 78 65 73 2e  pt DESC indexes.
23f0: 0a 23 0a 23 20 54 69 63 6b 65 74 20 68 74 74 70  .#.# Ticket http
2400: 73 3a 2f 2f 77 77 77 2e 73 71 6c 69 74 65 2e 6f  s://www.sqlite.o
2410: 72 67 2f 73 72 63 2f 74 6b 74 76 69 65 77 2f 66  rg/src/tktview/f
2420: 36 38 62 66 36 38 35 31 33 61 31 63 0a 23 0a 64  68bf68513a1c.#.d
2430: 6f 5f 74 65 73 74 20 61 6c 74 65 72 34 2d 31 30  o_test alter4-10
2440: 2e 31 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a  .1 {.  db close.
2450: 20 20 73 71 6c 69 74 65 33 20 64 62 20 3a 6d 65    sqlite3 db :me
2460: 6d 6f 72 79 3a 0a 20 20 64 62 20 65 76 61 6c 20  mory:.  db eval 
2470: 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 6c 65 67  {.    PRAGMA leg
2480: 61 63 79 5f 66 69 6c 65 5f 66 6f 72 6d 61 74 3d  acy_file_format=
2490: 6f 6e 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54  on;.    CREATE T
24a0: 41 42 4c 45 20 74 31 28 61 2c 62 2c 63 29 3b 0a  ABLE t1(a,b,c);.
24b0: 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58      CREATE INDEX
24c0: 20 74 31 61 20 4f 4e 20 74 31 28 61 20 44 45 53   t1a ON t1(a DES
24d0: 43 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  C);.    INSERT I
24e0: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31 2c  NTO t1 VALUES(1,
24f0: 32 2c 33 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  2,3);.    INSERT
2500: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
2510: 32 2c 33 2c 34 29 3b 0a 20 20 20 20 41 4c 54 45  2,3,4);.    ALTE
2520: 52 20 54 41 42 4c 45 20 74 31 20 41 44 44 20 43  R TABLE t1 ADD C
2530: 4f 4c 55 4d 4e 20 64 3b 0a 20 20 20 20 50 52 41  OLUMN d;.    PRA
2540: 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68  GMA integrity_ch
2550: 65 63 6b 3b 0a 20 20 7d 0a 7d 20 7b 6f 6b 7d 0a  eck;.  }.} {ok}.
2560: 0a 72 65 73 65 74 5f 64 62 0a 64 6f 5f 65 78 65  .reset_db.do_exe
2570: 63 73 71 6c 5f 74 65 73 74 20 61 6c 74 65 72 34  csql_test alter4
2580: 2d 31 31 2e 30 20 7b 0a 20 20 43 52 45 41 54 45  -11.0 {.  CREATE
2590: 20 54 41 42 4c 45 20 74 31 28 63 20 49 4e 54 45   TABLE t1(c INTE
25a0: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  GER PRIMARY KEY,
25b0: 20 64 29 3b 0a 20 20 50 52 41 47 4d 41 20 66 6f   d);.  PRAGMA fo
25c0: 72 65 69 67 6e 5f 6b 65 79 73 20 3d 20 6f 6e 3b  reign_keys = on;
25d0: 0a 20 20 41 4c 54 45 52 20 54 41 42 4c 45 20 74  .  ALTER TABLE t
25e0: 31 20 41 44 44 20 43 4f 4c 55 4d 4e 20 65 3b 0a  1 ADD COLUMN e;.
25f0: 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  }..do_execsql_te
2600: 73 74 20 61 6c 74 65 72 34 2d 31 31 2e 31 20 7b  st alter4-11.1 {
2610: 0a 20 20 41 4c 54 45 52 20 54 41 42 4c 45 20 74  .  ALTER TABLE t
2620: 31 20 41 44 44 20 43 4f 4c 55 4d 4e 20 66 20 52  1 ADD COLUMN f R
2630: 45 46 45 52 45 4e 43 45 53 20 74 31 3b 0a 7d 0a  EFERENCES t1;.}.
2640: 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65 73  .do_catchsql_tes
2650: 74 20 61 6c 74 65 72 34 2d 31 31 2e 32 20 7b 0a  t alter4-11.2 {.
2660: 20 20 41 4c 54 45 52 20 54 41 42 4c 45 20 74 31    ALTER TABLE t1
2670: 20 41 44 44 20 43 4f 4c 55 4d 4e 20 67 20 52 45   ADD COLUMN g RE
2680: 46 45 52 45 4e 43 45 53 20 74 31 20 44 45 46 41  FERENCES t1 DEFA
2690: 55 4c 54 20 34 3b 0a 7d 20 7b 31 20 7b 43 61 6e  ULT 4;.} {1 {Can
26a0: 6e 6f 74 20 61 64 64 20 61 20 52 45 46 45 52 45  not add a REFERE
26b0: 4e 43 45 53 20 63 6f 6c 75 6d 6e 20 77 69 74 68  NCES column with
26c0: 20 6e 6f 6e 2d 4e 55 4c 4c 20 64 65 66 61 75 6c   non-NULL defaul
26d0: 74 20 76 61 6c 75 65 7d 7d 0a 0a 64 6f 5f 63 61  t value}}..do_ca
26e0: 74 63 68 73 71 6c 5f 74 65 73 74 20 61 6c 74 65  tchsql_test alte
26f0: 72 34 2d 31 31 2e 33 20 7b 0a 20 20 41 4c 54 45  r4-11.3 {.  ALTE
2700: 52 20 54 41 42 4c 45 20 74 32 20 41 44 44 20 43  R TABLE t2 ADD C
2710: 4f 4c 55 4d 4e 20 67 3b 0a 7d 20 7b 31 20 7b 6e  OLUMN g;.} {1 {n
2720: 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20 74 32  o such table: t2
2730: 7d 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20 66 74  }}..ifcapable ft
2740: 73 35 20 7b 0a 20 20 64 6f 5f 65 78 65 63 73 71  s5 {.  do_execsq
2750: 6c 5f 74 65 73 74 20 61 6c 74 65 72 34 2d 31 31  l_test alter4-11
2760: 2e 34 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  .4 {.    CREATE 
2770: 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 66 66  VIRTUAL TABLE ff
2780: 66 20 55 53 49 4e 47 20 66 74 73 35 28 66 29 3b  f USING fts5(f);
2790: 0a 20 20 7d 0a 20 20 64 6f 5f 63 61 74 63 68 73  .  }.  do_catchs
27a0: 71 6c 5f 74 65 73 74 20 61 6c 74 65 72 34 2d 31  ql_test alter4-1
27b0: 31 2e 32 20 7b 0a 20 20 20 20 41 4c 54 45 52 20  1.2 {.    ALTER 
27c0: 54 41 42 4c 45 20 66 66 66 20 41 44 44 20 43 4f  TABLE fff ADD CO
27d0: 4c 55 4d 4e 20 67 3b 0a 20 20 7d 20 7b 31 20 7b  LUMN g;.  } {1 {
27e0: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 6d  virtual tables m
27f0: 61 79 20 6e 6f 74 20 62 65 20 61 6c 74 65 72 65  ay not be altere
2800: 64 7d 7d 0a 7d 0a 0a 66 69 6e 69 73 68 5f 74 65  d}}.}..finish_te
2810: 73 74 0a                                         st.