/ Hex Artifact Content
Login

Artifact 93dee7c0ff9106fbd53a8bbf519107904b884050a99c4565412c58c37d68c802:


0000: 23 20 32 30 30 34 20 4e 6f 76 65 6d 62 65 72 20  # 2004 November 
0010: 31 30 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f  10.#.# The autho
0020: 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79  r disclaims copy
0030: 72 69 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f  right to this so
0040: 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20 70  urce code.  In p
0050: 6c 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67 61  lace of.# a lega
0060: 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20 69  l notice, here i
0070: 73 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a  s a blessing:.#.
0080: 23 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f 20  #    May you do 
0090: 67 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76 69  good and not evi
00a0: 6c 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20  l..#    May you 
00b0: 66 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73 73  find forgiveness
00c0: 20 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61 6e   for yourself an
00d0: 64 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72 73  d forgive others
00e0: 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 73  ..#    May you s
00f0: 68 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65 76  hare freely, nev
0100: 65 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74  er taking more t
0110: 68 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a  han you give..#.
0120: 23 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 2a 0a 23 20 54 68 69  **********.# Thi
0170: 73 20 66 69 6c 65 20 69 6d 70 6c 65 6d 65 6e 74  s file implement
0180: 73 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73  s regression tes
0190: 74 73 20 66 6f 72 20 53 51 4c 69 74 65 20 6c 69  ts for SQLite li
01a0: 62 72 61 72 79 2e 20 20 54 68 65 0a 23 20 66 6f  brary.  The.# fo
01b0: 63 75 73 20 6f 66 20 74 68 69 73 20 73 63 72 69  cus of this scri
01c0: 70 74 20 69 73 20 74 65 73 74 69 6e 67 20 74 68  pt is testing th
01d0: 65 20 41 4c 54 45 52 20 54 41 42 4c 45 20 73 74  e ALTER TABLE st
01e0: 61 74 65 6d 65 6e 74 2e 0a 23 0a 23 20 24 49 64  atement..#.# $Id
01f0: 3a 20 61 6c 74 65 72 2e 74 65 73 74 2c 76 20 31  : alter.test,v 1
0200: 2e 33 32 20 32 30 30 39 2f 30 33 2f 32 34 20 31  .32 2009/03/24 1
0210: 35 3a 30 38 3a 31 30 20 64 72 68 20 45 78 70 20  5:08:10 drh Exp 
0220: 24 0a 23 0a 0a 73 65 74 20 74 65 73 74 64 69 72  $.#..set testdir
0230: 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24   [file dirname $
0240: 61 72 67 76 30 5d 0a 73 6f 75 72 63 65 20 24 74  argv0].source $t
0250: 65 73 74 64 69 72 2f 74 65 73 74 65 72 2e 74 63  estdir/tester.tc
0260: 6c 0a 0a 23 20 49 66 20 53 51 4c 49 54 45 5f 4f  l..# If SQLITE_O
0270: 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 20 69  MIT_ALTERTABLE i
0280: 73 20 64 65 66 69 6e 65 64 2c 20 6f 6d 69 74 20  s defined, omit 
0290: 74 68 69 73 20 66 69 6c 65 2e 0a 69 66 63 61 70  this file..ifcap
02a0: 61 62 6c 65 20 21 61 6c 74 65 72 74 61 62 6c 65  able !altertable
02b0: 20 7b 0a 20 20 66 69 6e 69 73 68 5f 74 65 73 74   {.  finish_test
02c0: 0a 20 20 72 65 74 75 72 6e 0a 7d 0a 0a 23 2d 2d  .  return.}..#--
02d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
02e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
02f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0300: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0310: 2d 2d 2d 2d 0a 23 20 54 65 73 74 20 6f 72 67 61  ----.# Test orga
0320: 6e 69 7a 61 74 69 6f 6e 3a 0a 23 0a 23 20 61 6c  nization:.#.# al
0330: 74 65 72 2d 31 2e 31 2e 2a 20 2d 20 61 6c 74 65  ter-1.1.* - alte
0340: 72 2d 31 2e 37 2e 2a 3a 20 42 61 73 69 63 20 74  r-1.7.*: Basic t
0350: 65 73 74 73 20 6f 66 20 41 4c 54 45 52 20 54 41  ests of ALTER TA
0360: 42 4c 45 2c 20 69 6e 63 6c 75 64 69 6e 67 20 74  BLE, including t
0370: 61 62 6c 65 73 0a 23 20 20 20 20 20 77 69 74 68  ables.#     with
0380: 20 69 6d 70 6c 69 63 69 74 20 61 6e 64 20 65 78   implicit and ex
0390: 70 6c 69 63 69 74 20 69 6e 64 69 63 65 73 2e 20  plicit indices. 
03a0: 54 68 65 73 65 20 74 65 73 74 73 20 63 61 6d 65  These tests came
03b0: 20 66 72 6f 6d 20 61 6e 20 65 61 72 6c 69 65 72   from an earlier
03c0: 0a 23 20 20 20 20 20 66 6f 72 6b 20 6f 66 20 53  .#     fork of S
03d0: 51 4c 69 74 65 20 74 68 61 74 20 61 6c 73 6f 20  QLite that also 
03e0: 73 75 70 70 6f 72 74 65 64 20 41 4c 54 45 52 20  supported ALTER 
03f0: 54 41 42 4c 45 2e 0a 23 20 61 6c 74 65 72 2d 31  TABLE..# alter-1
0400: 2e 38 2e 2a 3a 20 54 65 73 74 73 20 66 6f 72 20  .8.*: Tests for 
0410: 41 4c 54 45 52 20 54 41 42 4c 45 20 77 68 65 6e  ALTER TABLE when
0420: 20 74 68 65 20 74 61 62 6c 65 20 72 65 73 69 64   the table resid
0430: 65 73 20 69 6e 20 61 6e 20 0a 23 20 20 20 20 20  es in an .#     
0440: 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
0450: 65 2e 0a 23 20 61 6c 74 65 72 2d 31 2e 39 2e 2a  e..# alter-1.9.*
0460: 3a 20 54 65 73 74 73 20 66 6f 72 20 41 4c 54 45  : Tests for ALTE
0470: 52 20 54 41 42 4c 45 20 77 68 65 6e 20 74 68 65  R TABLE when the
0480: 69 72 20 69 73 20 77 68 69 74 65 73 70 61 63 65  ir is whitespace
0490: 20 62 65 74 77 65 65 6e 20 74 68 65 0a 23 20 20   between the.#  
04a0: 20 20 20 74 61 62 6c 65 20 6e 61 6d 65 20 61 6e     table name an
04b0: 64 20 6c 65 66 74 20 70 61 72 65 6e 74 68 65 73  d left parenthes
04c0: 69 73 20 74 6f 6b 65 6e 2e 20 69 2e 65 3a 20 0a  is token. i.e: .
04d0: 23 20 20 20 20 20 22 43 52 45 41 54 45 20 54 41  #     "CREATE TA
04e0: 42 4c 45 20 61 62 63 20 20 20 20 20 20 20 28 61  BLE abc       (a
04f0: 2c 20 62 2c 20 63 29 3b 22 0a 23 20 61 6c 74 65  , b, c);".# alte
0500: 72 2d 32 2e 2a 3a 20 54 65 73 74 20 65 72 72 6f  r-2.*: Test erro
0510: 72 20 63 6f 6e 64 69 74 69 6f 6e 73 20 61 6e 64  r conditions and
0520: 20 6d 65 73 73 61 67 65 73 2e 0a 23 20 61 6c 74   messages..# alt
0530: 65 72 2d 33 2e 2a 3a 20 54 65 73 74 20 41 4c 54  er-3.*: Test ALT
0540: 45 52 20 54 41 42 4c 45 20 6f 6e 20 74 61 62 6c  ER TABLE on tabl
0550: 65 73 20 74 68 61 74 20 68 61 76 65 20 54 52 49  es that have TRI
0560: 47 47 45 52 73 20 61 74 74 61 63 68 65 64 20 74  GGERs attached t
0570: 6f 20 74 68 65 6d 2e 0a 23 20 61 6c 74 65 72 2d  o them..# alter-
0580: 34 2e 2a 3a 20 54 65 73 74 20 41 4c 54 45 52 20  4.*: Test ALTER 
0590: 54 41 42 4c 45 20 6f 6e 20 74 61 62 6c 65 73 20  TABLE on tables 
05a0: 74 68 61 74 20 68 61 76 65 20 41 55 54 4f 49 4e  that have AUTOIN
05b0: 43 52 45 4d 45 4e 54 20 66 69 65 6c 64 73 2e 0a  CREMENT fields..
05c0: 23 20 2e 2e 2e 0a 23 20 61 6c 74 65 72 2d 31 32  # ....# alter-12
05d0: 2e 2a 3a 20 54 65 73 74 20 41 4c 54 45 52 20 54  .*: Test ALTER T
05e0: 41 42 4c 45 20 6f 6e 20 76 69 65 77 73 2e 0a 23  ABLE on views..#
05f0: 0a 0a 23 20 43 72 65 61 74 65 20 73 6f 6d 65 20  ..# Create some 
0600: 74 61 62 6c 65 73 20 74 6f 20 72 65 6e 61 6d 65  tables to rename
0610: 2e 20 20 42 65 20 73 75 72 65 20 74 6f 20 69 6e  .  Be sure to in
0620: 63 6c 75 64 65 20 73 6f 6d 65 20 54 45 4d 50 20  clude some TEMP 
0630: 74 61 62 6c 65 73 0a 23 20 61 6e 64 20 73 6f 6d  tables.# and som
0640: 65 20 74 61 62 6c 65 73 20 77 69 74 68 20 6f 64  e tables with od
0650: 64 20 6e 61 6d 65 73 2e 0a 23 0a 64 6f 5f 74 65  d names..#.do_te
0660: 73 74 20 61 6c 74 65 72 2d 31 2e 31 20 7b 0a 20  st alter-1.1 {. 
0670: 20 69 66 63 61 70 61 62 6c 65 20 74 65 6d 70 64   ifcapable tempd
0680: 62 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a 74 65  b {.    set ::te
0690: 6d 70 20 54 45 4d 50 0a 20 20 7d 20 65 6c 73 65  mp TEMP.  } else
06a0: 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a 74 65 6d   {.    set ::tem
06b0: 70 20 7b 7d 0a 20 20 7d 0a 20 20 65 78 65 63 73  p {}.  }.  execs
06c0: 71 6c 20 5b 73 75 62 73 74 20 2d 6e 6f 63 6f 6d  ql [subst -nocom
06d0: 6d 61 6e 64 73 20 7b 0a 20 20 20 20 43 52 45 41  mands {.    CREA
06e0: 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c 62 29  TE TABLE t1(a,b)
06f0: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
0700: 4f 20 74 31 20 56 41 4c 55 45 53 28 31 2c 32 29  O t1 VALUES(1,2)
0710: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  ;.    CREATE TAB
0720: 4c 45 20 5b 74 31 27 78 31 5d 28 63 20 55 4e 49  LE [t1'x1](c UNI
0730: 51 55 45 2c 20 62 20 50 52 49 4d 41 52 59 20 4b  QUE, b PRIMARY K
0740: 45 59 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  EY);.    INSERT 
0750: 49 4e 54 4f 20 5b 74 31 27 78 31 5d 20 56 41 4c  INTO [t1'x1] VAL
0760: 55 45 53 28 33 2c 34 29 3b 0a 20 20 20 20 43 52  UES(3,4);.    CR
0770: 45 41 54 45 20 49 4e 44 45 58 20 74 31 69 31 20  EATE INDEX t1i1 
0780: 4f 4e 20 54 31 28 42 29 3b 0a 20 20 20 20 43 52  ON T1(B);.    CR
0790: 45 41 54 45 20 49 4e 44 45 58 20 74 31 69 32 20  EATE INDEX t1i2 
07a0: 4f 4e 20 74 31 28 61 2c 62 29 3b 0a 20 20 20 20  ON t1(a,b);.    
07b0: 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 33 20  CREATE INDEX i3 
07c0: 4f 4e 20 5b 74 31 27 78 31 5d 28 62 2c 63 29 3b  ON [t1'x1](b,c);
07d0: 0a 20 20 20 20 43 52 45 41 54 45 20 24 3a 3a 74  .    CREATE $::t
07e0: 65 6d 70 20 54 41 42 4c 45 20 22 74 65 6d 70 20  emp TABLE "temp 
07f0: 74 61 62 6c 65 22 28 65 2c 66 2c 67 20 55 4e 49  table"(e,f,g UNI
0800: 51 55 45 29 3b 0a 20 20 20 20 43 52 45 41 54 45  QUE);.    CREATE
0810: 20 49 4e 44 45 58 20 69 32 20 4f 4e 20 5b 74 65   INDEX i2 ON [te
0820: 6d 70 20 74 61 62 6c 65 5d 28 66 29 3b 0a 20 20  mp table](f);.  
0830: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 5b 74    INSERT INTO [t
0840: 65 6d 70 20 74 61 62 6c 65 5d 20 56 41 4c 55 45  emp table] VALUE
0850: 53 28 35 2c 36 2c 37 29 3b 0a 20 20 7d 5d 0a 20  S(5,6,7);.  }]. 
0860: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
0870: 45 4c 45 43 54 20 27 74 31 27 2c 20 2a 20 46 52  ELECT 't1', * FR
0880: 4f 4d 20 74 31 3b 0a 20 20 20 20 53 45 4c 45 43  OM t1;.    SELEC
0890: 54 20 27 74 31 27 27 78 31 27 2c 20 2a 20 46 52  T 't1''x1', * FR
08a0: 4f 4d 20 22 74 31 27 78 31 22 3b 0a 20 20 20 20  OM "t1'x1";.    
08b0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 5b 74  SELECT * FROM [t
08c0: 65 6d 70 20 74 61 62 6c 65 5d 3b 0a 20 20 7d 0a  emp table];.  }.
08d0: 7d 20 7b 74 31 20 31 20 32 20 74 31 27 78 31 20  } {t1 1 2 t1'x1 
08e0: 33 20 34 20 35 20 36 20 37 7d 0a 64 6f 5f 74 65  3 4 5 6 7}.do_te
08f0: 73 74 20 61 6c 74 65 72 2d 31 2e 32 20 7b 0a 20  st alter-1.2 {. 
0900: 20 65 78 65 63 73 71 6c 20 5b 73 75 62 73 74 20   execsql [subst 
0910: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 24 3a 3a  {.    CREATE $::
0920: 74 65 6d 70 20 54 41 42 4c 45 20 6f 62 6a 6c 69  temp TABLE objli
0930: 73 74 28 74 79 70 65 2c 20 6e 61 6d 65 2c 20 74  st(type, name, t
0940: 62 6c 5f 6e 61 6d 65 29 3b 0a 20 20 20 20 49 4e  bl_name);.    IN
0950: 53 45 52 54 20 49 4e 54 4f 20 6f 62 6a 6c 69 73  SERT INTO objlis
0960: 74 20 53 45 4c 45 43 54 20 74 79 70 65 2c 20 6e  t SELECT type, n
0970: 61 6d 65 2c 20 74 62 6c 5f 6e 61 6d 65 20 0a 20  ame, tbl_name . 
0980: 20 20 20 20 20 20 20 46 52 4f 4d 20 73 71 6c 69         FROM sqli
0990: 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20  te_master WHERE 
09a0: 4e 41 4d 45 21 3d 27 6f 62 6a 6c 69 73 74 27 3b  NAME!='objlist';
09b0: 0a 20 20 7d 5d 0a 20 20 69 66 63 61 70 61 62 6c  .  }].  ifcapabl
09c0: 65 20 74 65 6d 70 64 62 20 7b 0a 20 20 20 20 65  e tempdb {.    e
09d0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 49  xecsql {.      I
09e0: 4e 53 45 52 54 20 49 4e 54 4f 20 6f 62 6a 6c 69  NSERT INTO objli
09f0: 73 74 20 53 45 4c 45 43 54 20 74 79 70 65 2c 20  st SELECT type, 
0a00: 6e 61 6d 65 2c 20 74 62 6c 5f 6e 61 6d 65 20 0a  name, tbl_name .
0a10: 20 20 20 20 20 20 20 20 20 20 46 52 4f 4d 20 74            FROM t
0a20: 65 6d 70 2e 73 71 6c 69 74 65 5f 6d 61 73 74 65  emp.sqlite_maste
0a30: 72 20 57 48 45 52 45 20 4e 41 4d 45 21 3d 27 6f  r WHERE NAME!='o
0a40: 62 6a 6c 69 73 74 27 3b 0a 20 20 20 20 7d 0a 20  bjlist';.    }. 
0a50: 20 7d 0a 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a   }..  execsql {.
0a60: 20 20 20 20 53 45 4c 45 43 54 20 74 79 70 65 2c      SELECT type,
0a70: 20 6e 61 6d 65 2c 20 74 62 6c 5f 6e 61 6d 65 20   name, tbl_name 
0a80: 46 52 4f 4d 20 6f 62 6a 6c 69 73 74 20 4f 52 44  FROM objlist ORD
0a90: 45 52 20 42 59 20 74 62 6c 5f 6e 61 6d 65 2c 20  ER BY tbl_name, 
0aa0: 74 79 70 65 20 64 65 73 63 2c 20 6e 61 6d 65 3b  type desc, name;
0ab0: 0a 20 20 7d 0a 7d 20 5b 6c 69 73 74 20 5c 0a 20  .  }.} [list \. 
0ac0: 20 20 20 20 74 61 62 6c 65 20 74 31 20 20 20 20      table t1    
0ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ae0: 20 20 20 20 20 20 20 20 20 20 74 31 20 20 20 20            t1    
0af0: 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20 20           \.     
0b00: 69 6e 64 65 78 20 74 31 69 31 20 20 20 20 20 20  index t1i1      
0b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0b20: 20 20 20 20 20 20 74 31 20 20 20 20 20 20 20 20        t1        
0b30: 20 20 20 20 20 5c 0a 20 20 20 20 20 69 6e 64 65       \.     inde
0b40: 78 20 74 31 69 32 20 20 20 20 20 20 20 20 20 20  x t1i2          
0b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0b60: 20 20 74 31 20 20 20 20 20 20 20 20 20 20 20 20    t1            
0b70: 20 5c 0a 20 20 20 20 20 74 61 62 6c 65 20 74 31   \.     table t1
0b80: 27 78 31 20 20 20 20 20 20 20 20 20 20 20 20 20  'x1             
0b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 31                t1
0ba0: 27 78 31 20 20 20 20 20 20 20 20 20 20 5c 0a 20  'x1          \. 
0bb0: 20 20 20 20 69 6e 64 65 78 20 69 33 20 20 20 20      index i3    
0bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0bd0: 20 20 20 20 20 20 20 20 20 20 74 31 27 78 31 20            t1'x1 
0be0: 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20 20           \.     
0bf0: 69 6e 64 65 78 20 7b 73 71 6c 69 74 65 5f 61 75  index {sqlite_au
0c00: 74 6f 69 6e 64 65 78 5f 74 31 27 78 31 5f 31 7d  toindex_t1'x1_1}
0c10: 20 20 20 20 20 20 74 31 27 78 31 20 20 20 20 20        t1'x1     
0c20: 20 20 20 20 20 5c 0a 20 20 20 20 20 69 6e 64 65       \.     inde
0c30: 78 20 7b 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e  x {sqlite_autoin
0c40: 64 65 78 5f 74 31 27 78 31 5f 32 7d 20 20 20 20  dex_t1'x1_2}    
0c50: 20 20 74 31 27 78 31 20 20 20 20 20 20 20 20 20    t1'x1         
0c60: 20 5c 0a 20 20 20 20 20 74 61 62 6c 65 20 7b 74   \.     table {t
0c70: 65 6d 70 20 74 61 62 6c 65 7d 20 20 20 20 20 20  emp table}      
0c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 74                {t
0c90: 65 6d 70 20 74 61 62 6c 65 7d 20 20 20 5c 0a 20  emp table}   \. 
0ca0: 20 20 20 20 69 6e 64 65 78 20 69 32 20 20 20 20      index i2    
0cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0cc0: 20 20 20 20 20 20 20 20 20 20 7b 74 65 6d 70 20            {temp 
0cd0: 74 61 62 6c 65 7d 20 20 20 5c 0a 20 20 20 20 20  table}   \.     
0ce0: 69 6e 64 65 78 20 7b 73 71 6c 69 74 65 5f 61 75  index {sqlite_au
0cf0: 74 6f 69 6e 64 65 78 5f 74 65 6d 70 20 74 61 62  toindex_temp tab
0d00: 6c 65 5f 31 7d 20 7b 74 65 6d 70 20 74 61 62 6c  le_1} {temp tabl
0d10: 65 7d 20 20 20 5c 0a 20 20 5d 0a 0a 23 20 4d 61  e}   \.  ]..# Ma
0d20: 6b 65 20 73 6f 6d 65 20 63 68 61 6e 67 65 73 0a  ke some changes.
0d30: 23 0a 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  #.integrity_chec
0d40: 6b 20 61 6c 74 65 72 2d 31 2e 33 2e 30 0a 64 6f  k alter-1.3.0.do
0d50: 5f 74 65 73 74 20 61 6c 74 65 72 2d 31 2e 33 20  _test alter-1.3 
0d60: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
0d70: 20 20 41 4c 54 45 52 20 54 41 42 4c 45 20 5b 54    ALTER TABLE [T
0d80: 31 5d 20 52 45 4e 41 4d 45 20 74 6f 20 5b 2d 74  1] RENAME to [-t
0d90: 31 2d 5d 3b 0a 20 20 20 20 41 4c 54 45 52 20 54  1-];.    ALTER T
0da0: 41 42 4c 45 20 22 74 31 27 78 31 22 20 52 45 4e  ABLE "t1'x1" REN
0db0: 41 4d 45 20 54 4f 20 54 32 3b 0a 20 20 20 20 41  AME TO T2;.    A
0dc0: 4c 54 45 52 20 54 41 42 4c 45 20 5b 74 65 6d 70  LTER TABLE [temp
0dd0: 20 74 61 62 6c 65 5d 20 52 45 4e 41 4d 45 20 74   table] RENAME t
0de0: 6f 20 54 65 6d 70 54 61 62 3b 0a 20 20 7d 0a 7d  o TempTab;.  }.}
0df0: 20 7b 7d 0a 69 6e 74 65 67 72 69 74 79 5f 63 68   {}.integrity_ch
0e00: 65 63 6b 20 61 6c 74 65 72 2d 31 2e 33 2e 31 0a  eck alter-1.3.1.
0e10: 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 31 2e  do_test alter-1.
0e20: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  4 {.  execsql {.
0e30: 20 20 20 20 53 45 4c 45 43 54 20 27 74 31 27 2c      SELECT 't1',
0e40: 20 2a 20 46 52 4f 4d 20 5b 2d 74 31 2d 5d 3b 0a   * FROM [-t1-];.
0e50: 20 20 20 20 53 45 4c 45 43 54 20 27 74 32 27 2c      SELECT 't2',
0e60: 20 2a 20 46 52 4f 4d 20 74 32 3b 0a 20 20 20 20   * FROM t2;.    
0e70: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65  SELECT * FROM te
0e80: 6d 70 74 61 62 3b 0a 20 20 7d 0a 7d 20 7b 74 31  mptab;.  }.} {t1
0e90: 20 31 20 32 20 74 32 20 33 20 34 20 35 20 36 20   1 2 t2 3 4 5 6 
0ea0: 37 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72  7}.do_test alter
0eb0: 2d 31 2e 35 20 7b 0a 20 20 65 78 65 63 73 71 6c  -1.5 {.  execsql
0ec0: 20 7b 0a 20 20 20 20 44 45 4c 45 54 45 20 46 52   {.    DELETE FR
0ed0: 4f 4d 20 6f 62 6a 6c 69 73 74 3b 0a 20 20 20 20  OM objlist;.    
0ee0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f 62 6a 6c  INSERT INTO objl
0ef0: 69 73 74 20 53 45 4c 45 43 54 20 74 79 70 65 2c  ist SELECT type,
0f00: 20 6e 61 6d 65 2c 20 74 62 6c 5f 6e 61 6d 65 0a   name, tbl_name.
0f10: 20 20 20 20 20 20 20 20 46 52 4f 4d 20 73 71 6c          FROM sql
0f20: 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45  ite_master WHERE
0f30: 20 4e 41 4d 45 21 3d 27 6f 62 6a 6c 69 73 74 27   NAME!='objlist'
0f40: 3b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c  ;.  }.  catchsql
0f50: 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e   {.    INSERT IN
0f60: 54 4f 20 6f 62 6a 6c 69 73 74 20 53 45 4c 45 43  TO objlist SELEC
0f70: 54 20 74 79 70 65 2c 20 6e 61 6d 65 2c 20 74 62  T type, name, tb
0f80: 6c 5f 6e 61 6d 65 20 0a 20 20 20 20 20 20 20 20  l_name .        
0f90: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70  FROM sqlite_temp
0fa0: 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20 4e 41  _master WHERE NA
0fb0: 4d 45 21 3d 27 6f 62 6a 6c 69 73 74 27 3b 0a 20  ME!='objlist';. 
0fc0: 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   }.  execsql {. 
0fd0: 20 20 20 53 45 4c 45 43 54 20 74 79 70 65 2c 20     SELECT type, 
0fe0: 6e 61 6d 65 2c 20 74 62 6c 5f 6e 61 6d 65 20 46  name, tbl_name F
0ff0: 52 4f 4d 20 6f 62 6a 6c 69 73 74 20 4f 52 44 45  ROM objlist ORDE
1000: 52 20 42 59 20 74 62 6c 5f 6e 61 6d 65 2c 20 74  R BY tbl_name, t
1010: 79 70 65 20 64 65 73 63 2c 20 6e 61 6d 65 3b 0a  ype desc, name;.
1020: 20 20 7d 0a 7d 20 5b 6c 69 73 74 20 5c 0a 20 20    }.} [list \.  
1030: 20 20 20 74 61 62 6c 65 20 2d 74 31 2d 20 20 20     table -t1-   
1040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1050: 20 20 20 20 20 20 2d 74 31 2d 20 20 20 20 20 20        -t1-      
1060: 20 20 5c 0a 20 20 20 20 20 69 6e 64 65 78 20 74    \.     index t
1070: 31 69 31 20 20 20 20 20 20 20 20 20 20 20 20 20  1i1             
1080: 20 20 20 20 20 20 20 20 20 20 20 20 2d 74 31 2d              -t1-
1090: 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20 20 69          \.     i
10a0: 6e 64 65 78 20 74 31 69 32 20 20 20 20 20 20 20  ndex t1i2       
10b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c0: 20 20 2d 74 31 2d 20 20 20 20 20 20 20 20 5c 0a    -t1-        \.
10d0: 20 20 20 20 20 74 61 62 6c 65 20 54 32 20 20 20       table T2   
10e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f0: 20 20 20 20 20 20 20 20 54 32 20 20 20 20 20 20          T2      
1100: 20 20 20 20 5c 0a 20 20 20 20 20 69 6e 64 65 78      \.     index
1110: 20 69 33 20 20 20 20 20 20 20 20 20 20 20 20 20   i3             
1120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 32                T2
1130: 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20            \.    
1140: 20 69 6e 64 65 78 20 7b 73 71 6c 69 74 65 5f 61   index {sqlite_a
1150: 75 74 6f 69 6e 64 65 78 5f 54 32 5f 31 7d 20 20  utoindex_T2_1}  
1160: 20 20 20 20 54 32 20 20 20 20 20 20 20 20 20 20      T2          
1170: 5c 0a 20 20 20 20 20 69 6e 64 65 78 20 7b 73 71  \.     index {sq
1180: 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 54  lite_autoindex_T
1190: 32 5f 32 7d 20 20 20 20 20 20 54 32 20 20 20 20  2_2}      T2    
11a0: 20 20 20 20 20 20 5c 0a 20 20 20 20 20 74 61 62        \.     tab
11b0: 6c 65 20 7b 54 65 6d 70 54 61 62 7d 20 20 20 20  le {TempTab}    
11c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d0: 7b 54 65 6d 70 54 61 62 7d 20 20 20 5c 0a 20 20  {TempTab}   \.  
11e0: 20 20 20 69 6e 64 65 78 20 69 32 20 20 20 20 20     index i2     
11f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1200: 20 20 20 20 20 20 7b 54 65 6d 70 54 61 62 7d 20        {TempTab} 
1210: 20 20 5c 0a 20 20 20 20 20 69 6e 64 65 78 20 7b    \.     index {
1220: 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65 78  sqlite_autoindex
1230: 5f 54 65 6d 70 54 61 62 5f 31 7d 20 7b 54 65 6d  _TempTab_1} {Tem
1240: 70 54 61 62 7d 20 20 20 5c 0a 20 20 5d 0a 0a 23  pTab}   \.  ]..#
1250: 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 63   Make sure the c
1260: 68 61 6e 67 65 73 20 70 65 72 73 69 73 74 20 61  hanges persist a
1270: 66 74 65 72 20 72 65 73 74 61 72 74 69 6e 67 20  fter restarting 
1280: 74 68 65 20 64 61 74 61 62 61 73 65 2e 0a 23 20  the database..# 
1290: 28 54 68 65 20 54 45 4d 50 20 74 61 62 6c 65 20  (The TEMP table 
12a0: 77 69 6c 6c 20 6e 6f 74 20 70 65 72 73 69 73 74  will not persist
12b0: 2c 20 6f 66 20 63 6f 75 72 73 65 2e 29 0a 23 0a  , of course.).#.
12c0: 69 66 63 61 70 61 62 6c 65 20 74 65 6d 70 64 62  ifcapable tempdb
12d0: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 61 6c 74   {.  do_test alt
12e0: 65 72 2d 31 2e 36 20 7b 0a 20 20 20 20 64 62 20  er-1.6 {.    db 
12f0: 63 6c 6f 73 65 0a 20 20 20 20 73 71 6c 69 74 65  close.    sqlite
1300: 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 20  3 db test.db.   
1310: 20 73 65 74 20 44 42 20 5b 73 71 6c 69 74 65 33   set DB [sqlite3
1320: 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e  _connection_poin
1330: 74 65 72 20 64 62 5d 0a 20 20 20 20 65 78 65 63  ter db].    exec
1340: 73 71 6c 20 7b 0a 20 20 20 20 20 20 43 52 45 41  sql {.      CREA
1350: 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 6f 62  TE TEMP TABLE ob
1360: 6a 6c 69 73 74 28 74 79 70 65 2c 20 6e 61 6d 65  jlist(type, name
1370: 2c 20 74 62 6c 5f 6e 61 6d 65 29 3b 0a 20 20 20  , tbl_name);.   
1380: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f     INSERT INTO o
1390: 62 6a 6c 69 73 74 20 53 45 4c 45 43 54 20 74 79  bjlist SELECT ty
13a0: 70 65 2c 20 6e 61 6d 65 2c 20 74 62 6c 5f 6e 61  pe, name, tbl_na
13b0: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  me FROM sqlite_m
13c0: 61 73 74 65 72 3b 0a 20 20 20 20 20 20 49 4e 53  aster;.      INS
13d0: 45 52 54 20 49 4e 54 4f 20 6f 62 6a 6c 69 73 74  ERT INTO objlist
13e0: 20 0a 20 20 20 20 20 20 20 20 20 20 53 45 4c 45   .          SELE
13f0: 43 54 20 74 79 70 65 2c 20 6e 61 6d 65 2c 20 74  CT type, name, t
1400: 62 6c 5f 6e 61 6d 65 20 46 52 4f 4d 20 74 65 6d  bl_name FROM tem
1410: 70 2e 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  p.sqlite_master 
1420: 0a 20 20 20 20 20 20 20 20 20 20 57 48 45 52 45  .          WHERE
1430: 20 4e 41 4d 45 21 3d 27 6f 62 6a 6c 69 73 74 27   NAME!='objlist'
1440: 3b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 74  ;.      SELECT t
1450: 79 70 65 2c 20 6e 61 6d 65 2c 20 74 62 6c 5f 6e  ype, name, tbl_n
1460: 61 6d 65 20 46 52 4f 4d 20 6f 62 6a 6c 69 73 74  ame FROM objlist
1470: 20 0a 20 20 20 20 20 20 20 20 20 20 4f 52 44 45   .          ORDE
1480: 52 20 42 59 20 74 62 6c 5f 6e 61 6d 65 2c 20 74  R BY tbl_name, t
1490: 79 70 65 20 64 65 73 63 2c 20 6e 61 6d 65 3b 0a  ype desc, name;.
14a0: 20 20 20 20 7d 0a 20 20 7d 20 5b 6c 69 73 74 20      }.  } [list 
14b0: 5c 0a 20 20 20 20 20 20 20 74 61 62 6c 65 20 2d  \.       table -
14c0: 74 31 2d 20 20 20 20 20 20 20 20 20 20 20 20 20  t1-             
14d0: 20 20 20 20 20 20 20 20 20 20 20 20 2d 74 31 2d              -t1-
14e0: 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20             \.   
14f0: 20 20 20 20 69 6e 64 65 78 20 74 31 69 31 20 20      index t1i1  
1500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1510: 20 20 20 20 20 20 20 2d 74 31 2d 20 20 20 20 20         -t1-     
1520: 20 20 20 20 20 20 5c 0a 20 20 20 20 20 20 20 69        \.       i
1530: 6e 64 65 78 20 74 31 69 32 20 20 20 20 20 20 20  ndex t1i2       
1540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1550: 20 20 2d 74 31 2d 20 20 20 20 20 20 20 20 20 20    -t1-          
1560: 20 5c 0a 20 20 20 20 20 20 20 74 61 62 6c 65 20   \.       table 
1570: 54 32 20 20 20 20 20 20 20 20 20 20 20 20 20 20  T2              
1580: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 32 20               T2 
1590: 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20 20           \.     
15a0: 20 20 69 6e 64 65 78 20 69 33 20 20 20 20 20 20    index i3      
15b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c0: 20 20 20 20 20 54 32 20 20 20 20 20 20 20 20 20       T2         
15d0: 20 5c 0a 20 20 20 20 20 20 20 69 6e 64 65 78 20   \.       index 
15e0: 7b 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65  {sqlite_autoinde
15f0: 78 5f 54 32 5f 31 7d 20 20 20 20 20 20 54 32 20  x_T2_1}      T2 
1600: 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20 20           \.     
1610: 20 20 69 6e 64 65 78 20 7b 73 71 6c 69 74 65 5f    index {sqlite_
1620: 61 75 74 6f 69 6e 64 65 78 5f 54 32 5f 32 7d 20  autoindex_T2_2} 
1630: 20 20 20 20 20 54 32 20 20 20 20 20 20 20 20 20       T2         
1640: 20 5c 0a 20 20 20 20 5d 0a 7d 20 65 6c 73 65 20   \.    ].} else 
1650: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
1660: 20 20 44 52 4f 50 20 54 41 42 4c 45 20 54 65 6d    DROP TABLE Tem
1670: 70 54 61 62 3b 0a 20 20 7d 0a 7d 0a 0a 23 20 43  pTab;.  }.}..# C
1680: 72 65 61 74 65 20 62 6f 67 75 73 20 61 70 70 6c  reate bogus appl
1690: 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20  ication-defined 
16a0: 66 75 6e 63 74 69 6f 6e 73 20 66 6f 72 20 66 75  functions for fu
16b0: 6e 63 74 69 6f 6e 73 20 75 73 65 64 20 0a 23 20  nctions used .# 
16c0: 69 6e 74 65 72 6e 61 6c 6c 79 20 62 79 20 41 4c  internally by AL
16d0: 54 45 52 20 54 41 42 4c 45 2c 20 74 6f 20 65 6e  TER TABLE, to en
16e0: 73 75 72 65 20 74 68 61 74 20 41 4c 54 45 52 20  sure that ALTER 
16f0: 54 41 42 4c 45 20 66 61 6c 6c 73 20 62 61 63 6b  TABLE falls back
1700: 0a 23 20 74 6f 20 74 68 65 20 62 75 69 6c 74 2d  .# to the built-
1710: 69 6e 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 23 0a  in functions..#.
1720: 70 72 6f 63 20 66 61 69 6c 69 6e 67 5f 61 70 70  proc failing_app
1730: 5f 66 75 6e 63 20 7b 61 72 67 73 7d 20 7b 65 72  _func {args} {er
1740: 72 6f 72 20 22 62 61 64 20 66 75 6e 63 74 69 6f  ror "bad functio
1750: 6e 22 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65  n"}.do_test alte
1760: 72 2d 31 2e 37 2d 70 72 65 70 20 7b 0a 20 20 64  r-1.7-prep {.  d
1770: 62 20 66 75 6e 63 20 73 75 62 73 74 72 20 66 61  b func substr fa
1780: 69 6c 69 6e 67 5f 61 70 70 5f 66 75 6e 63 0a 20  iling_app_func. 
1790: 20 64 62 20 66 75 6e 63 20 6c 69 6b 65 20 66 61   db func like fa
17a0: 69 6c 69 6e 67 5f 61 70 70 5f 66 75 6e 63 0a 20  iling_app_func. 
17b0: 20 64 62 20 66 75 6e 63 20 73 71 6c 69 74 65 5f   db func sqlite_
17c0: 72 65 6e 61 6d 65 5f 74 61 62 6c 65 20 66 61 69  rename_table fai
17d0: 6c 69 6e 67 5f 61 70 70 5f 66 75 6e 63 0a 20 20  ling_app_func.  
17e0: 64 62 20 66 75 6e 63 20 73 71 6c 69 74 65 5f 72  db func sqlite_r
17f0: 65 6e 61 6d 65 5f 74 72 69 67 67 65 72 20 66 61  ename_trigger fa
1800: 69 6c 69 6e 67 5f 61 70 70 5f 66 75 6e 63 0a 20  iling_app_func. 
1810: 20 64 62 20 66 75 6e 63 20 73 71 6c 69 74 65 5f   db func sqlite_
1820: 72 65 6e 61 6d 65 5f 70 61 72 65 6e 74 20 66 61  rename_parent fa
1830: 69 6c 69 6e 67 5f 61 70 70 5f 66 75 6e 63 0a 20  iling_app_func. 
1840: 20 63 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43   catchsql {SELEC
1850: 54 20 73 75 62 73 74 72 28 6e 61 6d 65 2c 31 2c  T substr(name,1,
1860: 33 29 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  3) FROM sqlite_m
1870: 61 73 74 65 72 7d 0a 7d 20 7b 31 20 7b 62 61 64  aster}.} {1 {bad
1880: 20 66 75 6e 63 74 69 6f 6e 7d 7d 0a 0a 23 20 4d   function}}..# M
1890: 61 6b 65 20 73 75 72 65 20 74 68 65 20 41 4c 54  ake sure the ALT
18a0: 45 52 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65  ER TABLE stateme
18b0: 6e 74 73 20 77 6f 72 6b 20 77 69 74 68 20 74 68  nts work with th
18c0: 65 0a 23 20 6e 6f 6e 2d 63 61 6c 6c 62 61 63 6b  e.# non-callback
18d0: 20 41 50 49 0a 23 0a 64 6f 5f 74 65 73 74 20 61   API.#.do_test a
18e0: 6c 74 65 72 2d 31 2e 37 20 7b 0a 20 20 73 74 65  lter-1.7 {.  ste
18f0: 70 73 71 6c 20 24 44 42 20 7b 0a 20 20 20 20 41  psql $DB {.    A
1900: 4c 54 45 52 20 54 41 42 4c 45 20 5b 2d 74 31 2d  LTER TABLE [-t1-
1910: 5d 20 52 45 4e 41 4d 45 20 74 6f 20 5b 2a 74 31  ] RENAME to [*t1
1920: 2a 5d 3b 0a 20 20 20 20 41 4c 54 45 52 20 54 41  *];.    ALTER TA
1930: 42 4c 45 20 54 32 20 52 45 4e 41 4d 45 20 54 4f  BLE T2 RENAME TO
1940: 20 5b 3c 74 32 3e 5d 3b 0a 20 20 7d 0a 20 20 65   [<t2>];.  }.  e
1950: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44 45 4c  xecsql {.    DEL
1960: 45 54 45 20 46 52 4f 4d 20 6f 62 6a 6c 69 73 74  ETE FROM objlist
1970: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
1980: 4f 20 6f 62 6a 6c 69 73 74 20 53 45 4c 45 43 54  O objlist SELECT
1990: 20 74 79 70 65 2c 20 6e 61 6d 65 2c 20 74 62 6c   type, name, tbl
19a0: 5f 6e 61 6d 65 0a 20 20 20 20 20 20 20 20 46 52  _name.        FR
19b0: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
19c0: 20 57 48 45 52 45 20 4e 41 4d 45 21 3d 27 6f 62   WHERE NAME!='ob
19d0: 6a 6c 69 73 74 27 3b 0a 20 20 7d 0a 20 20 63 61  jlist';.  }.  ca
19e0: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53  tchsql {.    INS
19f0: 45 52 54 20 49 4e 54 4f 20 6f 62 6a 6c 69 73 74  ERT INTO objlist
1a00: 20 53 45 4c 45 43 54 20 74 79 70 65 2c 20 6e 61   SELECT type, na
1a10: 6d 65 2c 20 74 62 6c 5f 6e 61 6d 65 20 0a 20 20  me, tbl_name .  
1a20: 20 20 20 20 20 20 46 52 4f 4d 20 73 71 6c 69 74        FROM sqlit
1a30: 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 20 57 48  e_temp_master WH
1a40: 45 52 45 20 4e 41 4d 45 21 3d 27 6f 62 6a 6c 69  ERE NAME!='objli
1a50: 73 74 27 3b 0a 20 20 7d 0a 20 20 65 78 65 63 73  st';.  }.  execs
1a60: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
1a70: 74 79 70 65 2c 20 6e 61 6d 65 2c 20 74 62 6c 5f  type, name, tbl_
1a80: 6e 61 6d 65 20 46 52 4f 4d 20 6f 62 6a 6c 69 73  name FROM objlis
1a90: 74 20 4f 52 44 45 52 20 42 59 20 74 62 6c 5f 6e  t ORDER BY tbl_n
1aa0: 61 6d 65 2c 20 74 79 70 65 20 64 65 73 63 2c 20  ame, type desc, 
1ab0: 6e 61 6d 65 3b 0a 20 20 7d 0a 7d 20 5b 6c 69 73  name;.  }.} [lis
1ac0: 74 20 5c 0a 20 20 20 20 20 74 61 62 6c 65 20 2a  t \.     table *
1ad0: 74 31 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  t1*             
1ae0: 20 20 20 20 20 20 20 20 20 20 20 20 2a 74 31 2a              *t1*
1af0: 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20             \.   
1b00: 20 20 69 6e 64 65 78 20 74 31 69 31 20 20 20 20    index t1i1    
1b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b20: 20 20 20 20 20 2a 74 31 2a 20 20 20 20 20 20 20       *t1*       
1b30: 20 20 20 20 5c 0a 20 20 20 20 20 69 6e 64 65 78      \.     index
1b40: 20 74 31 69 32 20 20 20 20 20 20 20 20 20 20 20   t1i2           
1b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 74                *t
1b60: 31 2a 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20  1*           \. 
1b70: 20 20 20 20 74 61 62 6c 65 20 3c 74 32 3e 20 20      table <t2>  
1b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b90: 20 20 20 20 20 20 20 3c 74 32 3e 20 20 20 20 20         <t2>     
1ba0: 20 20 20 20 20 5c 0a 20 20 20 20 20 69 6e 64 65       \.     inde
1bb0: 78 20 69 33 20 20 20 20 20 20 20 20 20 20 20 20  x i3            
1bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3c                 <
1bd0: 74 32 3e 20 20 20 20 20 20 20 20 20 20 5c 0a 20  t2>          \. 
1be0: 20 20 20 20 69 6e 64 65 78 20 7b 73 71 6c 69 74      index {sqlit
1bf0: 65 5f 61 75 74 6f 69 6e 64 65 78 5f 3c 74 32 3e  e_autoindex_<t2>
1c00: 5f 31 7d 20 20 20 20 3c 74 32 3e 20 20 20 20 20  _1}    <t2>     
1c10: 20 20 20 20 20 5c 0a 20 20 20 20 20 69 6e 64 65       \.     inde
1c20: 78 20 7b 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e  x {sqlite_autoin
1c30: 64 65 78 5f 3c 74 32 3e 5f 32 7d 20 20 20 20 3c  dex_<t2>_2}    <
1c40: 74 32 3e 20 20 20 20 20 20 20 20 20 20 5c 0a 20  t2>          \. 
1c50: 20 5d 0a 0a 23 20 43 68 65 63 6b 20 74 68 61 74   ]..# Check that
1c60: 20 41 4c 54 45 52 20 54 41 42 4c 45 20 77 6f 72   ALTER TABLE wor
1c70: 6b 73 20 6f 6e 20 61 74 74 61 63 68 65 64 20 64  ks on attached d
1c80: 61 74 61 62 61 73 65 73 2e 0a 23 0a 69 66 63 61  atabases..#.ifca
1c90: 70 61 62 6c 65 20 61 74 74 61 63 68 20 7b 0a 20  pable attach {. 
1ca0: 20 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 31   do_test alter-1
1cb0: 2e 38 2e 31 20 7b 0a 20 20 20 20 66 6f 72 63 65  .8.1 {.    force
1cc0: 64 65 6c 65 74 65 20 74 65 73 74 32 2e 64 62 0a  delete test2.db.
1cd0: 20 20 20 20 66 6f 72 63 65 64 65 6c 65 74 65 20      forcedelete 
1ce0: 74 65 73 74 32 2e 64 62 2d 6a 6f 75 72 6e 61 6c  test2.db-journal
1cf0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
1d00: 20 20 20 20 20 41 54 54 41 43 48 20 27 74 65 73       ATTACH 'tes
1d10: 74 32 2e 64 62 27 20 41 53 20 61 75 78 3b 0a 20  t2.db' AS aux;. 
1d20: 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f     }.  } {}.  do
1d30: 5f 74 65 73 74 20 61 6c 74 65 72 2d 31 2e 38 2e  _test alter-1.8.
1d40: 32 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  2 {.    execsql 
1d50: 7b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54  {.      CREATE T
1d60: 41 42 4c 45 20 74 34 28 61 20 50 52 49 4d 41 52  ABLE t4(a PRIMAR
1d70: 59 20 4b 45 59 2c 20 62 2c 20 63 29 3b 0a 20 20  Y KEY, b, c);.  
1d80: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
1d90: 20 61 75 78 2e 74 34 28 61 20 50 52 49 4d 41 52   aux.t4(a PRIMAR
1da0: 59 20 4b 45 59 2c 20 62 2c 20 63 29 3b 0a 20 20  Y KEY, b, c);.  
1db0: 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58      CREATE INDEX
1dc0: 20 69 34 20 4f 4e 20 74 34 28 62 29 3b 0a 20 20   i4 ON t4(b);.  
1dd0: 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58      CREATE INDEX
1de0: 20 61 75 78 2e 69 34 20 4f 4e 20 74 34 28 62 29   aux.i4 ON t4(b)
1df0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20  ;.    }.  } {}. 
1e00: 20 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 31   do_test alter-1
1e10: 2e 38 2e 33 20 7b 0a 20 20 20 20 65 78 65 63 73  .8.3 {.    execs
1e20: 71 6c 20 7b 0a 20 20 20 20 20 20 49 4e 53 45 52  ql {.      INSER
1e30: 54 20 49 4e 54 4f 20 74 34 20 56 41 4c 55 45 53  T INTO t4 VALUES
1e40: 28 27 6d 61 69 6e 27 2c 20 27 6d 61 69 6e 27 2c  ('main', 'main',
1e50: 20 27 6d 61 69 6e 27 29 3b 0a 20 20 20 20 20 20   'main');.      
1e60: 49 4e 53 45 52 54 20 49 4e 54 4f 20 61 75 78 2e  INSERT INTO aux.
1e70: 74 34 20 56 41 4c 55 45 53 28 27 61 75 78 27 2c  t4 VALUES('aux',
1e80: 20 27 61 75 78 27 2c 20 27 61 75 78 27 29 3b 0a   'aux', 'aux');.
1e90: 20 20 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46        SELECT * F
1ea0: 52 4f 4d 20 74 34 20 57 48 45 52 45 20 61 20 3d  ROM t4 WHERE a =
1eb0: 20 27 6d 61 69 6e 27 3b 0a 20 20 20 20 7d 0a 20   'main';.    }. 
1ec0: 20 7d 20 7b 6d 61 69 6e 20 6d 61 69 6e 20 6d 61   } {main main ma
1ed0: 69 6e 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 6c  in}.  do_test al
1ee0: 74 65 72 2d 31 2e 38 2e 34 20 7b 0a 20 20 20 20  ter-1.8.4 {.    
1ef0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
1f00: 41 4c 54 45 52 20 54 41 42 4c 45 20 74 34 20 52  ALTER TABLE t4 R
1f10: 45 4e 41 4d 45 20 54 4f 20 74 35 3b 0a 20 20 20  ENAME TO t5;.   
1f20: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
1f30: 20 74 34 20 57 48 45 52 45 20 61 20 3d 20 27 61   t4 WHERE a = 'a
1f40: 75 78 27 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  ux';.    }.  } {
1f50: 61 75 78 20 61 75 78 20 61 75 78 7d 0a 20 20 64  aux aux aux}.  d
1f60: 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 31 2e 38  o_test alter-1.8
1f70: 2e 35 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .5 {.    execsql
1f80: 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20   {.      SELECT 
1f90: 2a 20 46 52 4f 4d 20 74 35 3b 0a 20 20 20 20 7d  * FROM t5;.    }
1fa0: 0a 20 20 7d 20 7b 6d 61 69 6e 20 6d 61 69 6e 20  .  } {main main 
1fb0: 6d 61 69 6e 7d 0a 20 20 64 6f 5f 74 65 73 74 20  main}.  do_test 
1fc0: 61 6c 74 65 72 2d 31 2e 38 2e 36 20 7b 0a 20 20  alter-1.8.6 {.  
1fd0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1fe0: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
1ff0: 74 35 20 57 48 45 52 45 20 62 20 3d 20 27 6d 61  t5 WHERE b = 'ma
2000: 69 6e 27 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  in';.    }.  } {
2010: 6d 61 69 6e 20 6d 61 69 6e 20 6d 61 69 6e 7d 0a  main main main}.
2020: 20 20 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d    do_test alter-
2030: 31 2e 38 2e 37 20 7b 0a 20 20 20 20 65 78 65 63  1.8.7 {.    exec
2040: 73 71 6c 20 7b 0a 20 20 20 20 20 20 41 4c 54 45  sql {.      ALTE
2050: 52 20 54 41 42 4c 45 20 61 75 78 2e 74 34 20 52  R TABLE aux.t4 R
2060: 45 4e 41 4d 45 20 54 4f 20 74 35 3b 0a 20 20 20  ENAME TO t5;.   
2070: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
2080: 20 61 75 78 2e 74 35 20 57 48 45 52 45 20 62 20   aux.t5 WHERE b 
2090: 3d 20 27 61 75 78 27 3b 0a 20 20 20 20 7d 0a 20  = 'aux';.    }. 
20a0: 20 7d 20 7b 61 75 78 20 61 75 78 20 61 75 78 7d   } {aux aux aux}
20b0: 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65  .}..do_test alte
20c0: 72 2d 31 2e 39 2e 31 20 7b 0a 20 20 65 78 65 63  r-1.9.1 {.  exec
20d0: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
20e0: 20 54 41 42 4c 45 20 74 62 6c 31 20 20 20 28 61   TABLE tbl1   (a
20f0: 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20 49 4e 53  , b, c);.    INS
2100: 45 52 54 20 49 4e 54 4f 20 74 62 6c 31 20 56 41  ERT INTO tbl1 VA
2110: 4c 55 45 53 28 31 2c 20 32 2c 20 33 29 3b 0a 20  LUES(1, 2, 3);. 
2120: 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20   }.} {}.do_test 
2130: 61 6c 74 65 72 2d 31 2e 39 2e 32 20 7b 0a 20 20  alter-1.9.2 {.  
2140: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
2150: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 62 6c 31  LECT * FROM tbl1
2160: 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 20 33 7d 0a  ;.  }.} {1 2 3}.
2170: 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 31 2e  do_test alter-1.
2180: 39 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  9.3 {.  execsql 
2190: 7b 0a 20 20 20 20 41 4c 54 45 52 20 54 41 42 4c  {.    ALTER TABL
21a0: 45 20 74 62 6c 31 20 52 45 4e 41 4d 45 20 54 4f  E tbl1 RENAME TO
21b0: 20 74 62 6c 32 3b 0a 20 20 20 20 53 45 4c 45 43   tbl2;.    SELEC
21c0: 54 20 2a 20 46 52 4f 4d 20 74 62 6c 32 3b 0a 20  T * FROM tbl2;. 
21d0: 20 7d 0a 7d 20 7b 31 20 32 20 33 7d 0a 64 6f 5f   }.} {1 2 3}.do_
21e0: 74 65 73 74 20 61 6c 74 65 72 2d 31 2e 39 2e 34  test alter-1.9.4
21f0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
2200: 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74 62     DROP TABLE tb
2210: 6c 32 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 23 20  l2;.  }.} {}..# 
2220: 54 65 73 74 20 65 72 72 6f 72 20 6d 65 73 73 61  Test error messa
2230: 67 65 73 0a 23 0a 64 6f 5f 74 65 73 74 20 61 6c  ges.#.do_test al
2240: 74 65 72 2d 32 2e 31 20 7b 0a 20 20 63 61 74 63  ter-2.1 {.  catc
2250: 68 73 71 6c 20 7b 0a 20 20 20 20 41 4c 54 45 52  hsql {.    ALTER
2260: 20 54 41 42 4c 45 20 6e 6f 6e 65 20 52 45 4e 41   TABLE none RENA
2270: 4d 45 20 54 4f 20 68 69 3b 0a 20 20 7d 0a 7d 20  ME TO hi;.  }.} 
2280: 7b 31 20 7b 6e 6f 20 73 75 63 68 20 74 61 62 6c  {1 {no such tabl
2290: 65 3a 20 6e 6f 6e 65 7d 7d 0a 64 6f 5f 74 65 73  e: none}}.do_tes
22a0: 74 20 61 6c 74 65 72 2d 32 2e 32 20 7b 0a 20 20  t alter-2.2 {.  
22b0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52  execsql {.    CR
22c0: 45 41 54 45 20 54 41 42 4c 45 20 74 33 28 70 2c  EATE TABLE t3(p,
22d0: 71 2c 72 29 3b 0a 20 20 7d 0a 20 20 63 61 74 63  q,r);.  }.  catc
22e0: 68 73 71 6c 20 7b 0a 20 20 20 20 41 4c 54 45 52  hsql {.    ALTER
22f0: 20 54 41 42 4c 45 20 5b 3c 74 32 3e 5d 20 52 45   TABLE [<t2>] RE
2300: 4e 41 4d 45 20 54 4f 20 74 33 3b 0a 20 20 7d 0a  NAME TO t3;.  }.
2310: 7d 20 7b 31 20 7b 74 68 65 72 65 20 69 73 20 61  } {1 {there is a
2320: 6c 72 65 61 64 79 20 61 6e 6f 74 68 65 72 20 74  lready another t
2330: 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 69  able or index wi
2340: 74 68 20 74 68 69 73 20 6e 61 6d 65 3a 20 74 33  th this name: t3
2350: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72  }}.do_test alter
2360: 2d 32 2e 33 20 7b 0a 20 20 63 61 74 63 68 73 71  -2.3 {.  catchsq
2370: 6c 20 7b 0a 20 20 20 20 41 4c 54 45 52 20 54 41  l {.    ALTER TA
2380: 42 4c 45 20 5b 3c 74 32 3e 5d 20 52 45 4e 41 4d  BLE [<t2>] RENAM
2390: 45 20 54 4f 20 69 33 3b 0a 20 20 7d 0a 7d 20 7b  E TO i3;.  }.} {
23a0: 31 20 7b 74 68 65 72 65 20 69 73 20 61 6c 72 65  1 {there is alre
23b0: 61 64 79 20 61 6e 6f 74 68 65 72 20 74 61 62 6c  ady another tabl
23c0: 65 20 6f 72 20 69 6e 64 65 78 20 77 69 74 68 20  e or index with 
23d0: 74 68 69 73 20 6e 61 6d 65 3a 20 69 33 7d 7d 0a  this name: i3}}.
23e0: 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 32 2e  do_test alter-2.
23f0: 34 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  4 {.  catchsql {
2400: 0a 20 20 20 20 41 4c 54 45 52 20 54 41 42 4c 45  .    ALTER TABLE
2410: 20 53 71 4c 69 54 65 5f 6d 61 73 74 65 72 20 52   SqLiTe_master R
2420: 45 4e 41 4d 45 20 54 4f 20 6d 61 73 74 65 72 3b  ENAME TO master;
2430: 0a 20 20 7d 0a 7d 20 7b 31 20 7b 74 61 62 6c 65  .  }.} {1 {table
2440: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 6d   sqlite_master m
2450: 61 79 20 6e 6f 74 20 62 65 20 61 6c 74 65 72 65  ay not be altere
2460: 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65  d}}.do_test alte
2470: 72 2d 32 2e 35 20 7b 0a 20 20 63 61 74 63 68 73  r-2.5 {.  catchs
2480: 71 6c 20 7b 0a 20 20 20 20 41 4c 54 45 52 20 54  ql {.    ALTER T
2490: 41 42 4c 45 20 74 33 20 52 45 4e 41 4d 45 20 54  ABLE t3 RENAME T
24a0: 4f 20 73 71 6c 69 74 65 5f 74 33 3b 0a 20 20 7d  O sqlite_t3;.  }
24b0: 0a 7d 20 7b 31 20 7b 6f 62 6a 65 63 74 20 6e 61  .} {1 {object na
24c0: 6d 65 20 72 65 73 65 72 76 65 64 20 66 6f 72 20  me reserved for 
24d0: 69 6e 74 65 72 6e 61 6c 20 75 73 65 3a 20 73 71  internal use: sq
24e0: 6c 69 74 65 5f 74 33 7d 7d 0a 64 6f 5f 74 65 73  lite_t3}}.do_tes
24f0: 74 20 61 6c 74 65 72 2d 32 2e 36 20 7b 0a 20 20  t alter-2.6 {.  
2500: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 41  catchsql {.    A
2510: 4c 54 45 52 20 54 41 42 4c 45 20 74 33 20 41 44  LTER TABLE t3 AD
2520: 44 20 43 4f 4c 55 4d 4e 20 28 41 4c 54 45 52 20  D COLUMN (ALTER 
2530: 54 41 42 4c 45 20 74 33 20 41 44 44 20 43 4f 4c  TABLE t3 ADD COL
2540: 55 4d 4e 29 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b  UMN);.  }.} {1 {
2550: 6e 65 61 72 20 22 28 22 3a 20 73 79 6e 74 61 78  near "(": syntax
2560: 20 65 72 72 6f 72 7d 7d 0a 0a 23 20 49 66 20 74   error}}..# If t
2570: 68 69 73 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20  his compilation 
2580: 64 6f 65 73 20 6e 6f 74 20 69 6e 63 6c 75 64 65  does not include
2590: 20 74 72 69 67 67 65 72 73 2c 20 6f 6d 69 74 20   triggers, omit 
25a0: 74 68 65 20 61 6c 74 65 72 2d 33 2e 2a 20 74 65  the alter-3.* te
25b0: 73 74 73 2e 0a 69 66 63 61 70 61 62 6c 65 20 74  sts..ifcapable t
25c0: 72 69 67 67 65 72 20 7b 0a 0a 23 2d 2d 2d 2d 2d  rigger {..#-----
25d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
25e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
25f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2600: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2610: 2d 2d 0a 23 20 54 65 73 74 73 20 61 6c 74 65 72  --.# Tests alter
2620: 2d 33 2e 2a 20 74 65 73 74 20 41 4c 54 45 52 20  -3.* test ALTER 
2630: 54 41 42 4c 45 20 6f 6e 20 74 61 62 6c 65 73 20  TABLE on tables 
2640: 74 68 61 74 20 68 61 76 65 20 74 72 69 67 67 65  that have trigge
2650: 72 73 2e 0a 23 0a 23 20 61 6c 74 65 72 2d 33 2e  rs..#.# alter-3.
2660: 31 2e 2a 3a 20 41 4c 54 45 52 20 54 41 42 4c 45  1.*: ALTER TABLE
2670: 20 77 69 74 68 20 74 72 69 67 67 65 72 73 2e 0a   with triggers..
2680: 23 20 61 6c 74 65 72 2d 33 2e 32 2e 2a 3a 20 54  # alter-3.2.*: T
2690: 65 73 74 20 74 68 61 74 20 74 68 65 20 4f 4e 20  est that the ON 
26a0: 6b 65 79 77 6f 72 64 20 63 61 6e 6e 6f 74 20 62  keyword cannot b
26b0: 65 20 75 73 65 64 20 61 73 20 61 20 64 61 74 61  e used as a data
26c0: 62 61 73 65 2c 0a 23 20 20 20 20 20 74 61 62 6c  base,.#     tabl
26d0: 65 20 6f 72 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  e or column name
26e0: 20 75 6e 71 75 6f 74 65 64 2e 20 54 68 69 73 20   unquoted. This 
26f0: 69 73 20 64 6f 6e 65 20 62 65 63 61 75 73 65 20  is done because 
2700: 70 61 72 74 20 6f 66 20 74 68 65 0a 23 20 20 20  part of the.#   
2710: 20 20 41 4c 54 45 52 20 54 41 42 4c 45 20 63 6f    ALTER TABLE co
2720: 64 65 20 28 73 70 65 63 69 66 69 63 61 6c 6c 79  de (specifically
2730: 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74   the implementat
2740: 69 6f 6e 20 6f 66 20 53 51 4c 20 66 75 6e 63 74  ion of SQL funct
2750: 69 6f 6e 0a 23 20 20 20 20 20 22 73 71 6c 69 74  ion.#     "sqlit
2760: 65 5f 61 6c 74 65 72 5f 74 72 69 67 67 65 72 22  e_alter_trigger"
2770: 29 20 77 69 6c 6c 20 62 72 65 61 6b 20 69 6e 20  ) will break in 
2780: 74 68 69 73 20 63 61 73 65 2e 0a 23 20 61 6c 74  this case..# alt
2790: 65 72 2d 33 2e 33 2e 2a 3a 20 41 4c 54 45 52 20  er-3.3.*: ALTER 
27a0: 54 41 42 4c 45 20 77 69 74 68 20 54 45 4d 50 20  TABLE with TEMP 
27b0: 74 72 69 67 67 65 72 73 20 28 74 6f 64 6f 29 2e  triggers (todo).
27c0: 0a 23 0a 0a 23 20 41 6e 20 53 51 4c 20 75 73 65  .#..# An SQL use
27d0: 72 2d 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 74  r-function for t
27e0: 72 69 67 67 65 72 73 20 74 6f 20 66 69 72 65 2c  riggers to fire,
27f0: 20 73 6f 20 74 68 61 74 20 77 65 20 6b 6e 6f 77   so that we know
2800: 20 74 68 65 79 0a 23 20 61 72 65 20 77 6f 72 6b   they.# are work
2810: 69 6e 67 2e 0a 70 72 6f 63 20 74 72 69 67 66 75  ing..proc trigfu
2820: 6e 63 20 7b 61 72 67 73 7d 20 7b 0a 20 20 73 65  nc {args} {.  se
2830: 74 20 3a 3a 54 52 49 47 47 45 52 20 24 61 72 67  t ::TRIGGER $arg
2840: 73 0a 7d 0a 64 62 20 66 75 6e 63 20 74 72 69 67  s.}.db func trig
2850: 66 75 6e 63 20 74 72 69 67 66 75 6e 63 0a 0a 64  func trigfunc..d
2860: 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 33 2e 31  o_test alter-3.1
2870: 2e 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .0 {.  execsql {
2880: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
2890: 45 20 74 36 28 61 2c 20 62 2c 20 63 29 3b 0a 20  E t6(a, b, c);. 
28a0: 20 20 20 2d 2d 20 44 69 66 66 65 72 65 6e 74 20     -- Different 
28b0: 63 61 73 65 20 66 6f 72 20 74 68 65 20 74 61 62  case for the tab
28c0: 6c 65 20 6e 61 6d 65 20 69 6e 20 74 68 65 20 74  le name in the t
28d0: 72 69 67 67 65 72 2e 0a 20 20 20 20 43 52 45 41  rigger..    CREA
28e0: 54 45 20 54 52 49 47 47 45 52 20 74 72 69 67 31  TE TRIGGER trig1
28f0: 20 41 46 54 45 52 20 49 4e 53 45 52 54 20 4f 4e   AFTER INSERT ON
2900: 20 54 36 20 42 45 47 49 4e 0a 20 20 20 20 20 20   T6 BEGIN.      
2910: 53 45 4c 45 43 54 20 74 72 69 67 66 75 6e 63 28  SELECT trigfunc(
2920: 27 74 72 69 67 31 27 2c 20 6e 65 77 2e 61 2c 20  'trig1', new.a, 
2930: 6e 65 77 2e 62 2c 20 6e 65 77 2e 63 29 3b 0a 20  new.b, new.c);. 
2940: 20 20 20 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 7d     END;.  }.} {}
2950: 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 33  .do_test alter-3
2960: 2e 31 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  .1.1 {.  execsql
2970: 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e   {.    INSERT IN
2980: 54 4f 20 74 36 20 56 41 4c 55 45 53 28 31 2c 20  TO t6 VALUES(1, 
2990: 32 2c 20 33 29 3b 0a 20 20 7d 0a 20 20 73 65 74  2, 3);.  }.  set
29a0: 20 3a 3a 54 52 49 47 47 45 52 0a 7d 20 7b 74 72   ::TRIGGER.} {tr
29b0: 69 67 31 20 31 20 32 20 33 7d 0a 64 6f 5f 74 65  ig1 1 2 3}.do_te
29c0: 73 74 20 61 6c 74 65 72 2d 33 2e 31 2e 32 20 7b  st alter-3.1.2 {
29d0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
29e0: 20 41 4c 54 45 52 20 54 41 42 4c 45 20 74 36 20   ALTER TABLE t6 
29f0: 52 45 4e 41 4d 45 20 54 4f 20 74 37 3b 0a 20 20  RENAME TO t7;.  
2a00: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 37    INSERT INTO t7
2a10: 20 56 41 4c 55 45 53 28 34 2c 20 35 2c 20 36 29   VALUES(4, 5, 6)
2a20: 3b 0a 20 20 7d 0a 20 20 73 65 74 20 3a 3a 54 52  ;.  }.  set ::TR
2a30: 49 47 47 45 52 0a 7d 20 7b 74 72 69 67 31 20 34  IGGER.} {trig1 4
2a40: 20 35 20 36 7d 0a 64 6f 5f 74 65 73 74 20 61 6c   5 6}.do_test al
2a50: 74 65 72 2d 33 2e 31 2e 33 20 7b 0a 20 20 65 78  ter-3.1.3 {.  ex
2a60: 65 63 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50  ecsql {.    DROP
2a70: 20 54 52 49 47 47 45 52 20 74 72 69 67 31 3b 0a   TRIGGER trig1;.
2a80: 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74    }.} {}.do_test
2a90: 20 61 6c 74 65 72 2d 33 2e 31 2e 34 20 7b 0a 20   alter-3.1.4 {. 
2aa0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43   execsql {.    C
2ab0: 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74 72  REATE TRIGGER tr
2ac0: 69 67 32 20 41 46 54 45 52 20 49 4e 53 45 52 54  ig2 AFTER INSERT
2ad0: 20 4f 4e 20 6d 61 69 6e 2e 74 37 20 42 45 47 49   ON main.t7 BEGI
2ae0: 4e 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 74  N.      SELECT t
2af0: 72 69 67 66 75 6e 63 28 27 74 72 69 67 32 27 2c  rigfunc('trig2',
2b00: 20 6e 65 77 2e 61 2c 20 6e 65 77 2e 62 2c 20 6e   new.a, new.b, n
2b10: 65 77 2e 63 29 3b 0a 20 20 20 20 45 4e 44 3b 0a  ew.c);.    END;.
2b20: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
2b30: 74 37 20 56 41 4c 55 45 53 28 31 2c 20 32 2c 20  t7 VALUES(1, 2, 
2b40: 33 29 3b 0a 20 20 7d 0a 20 20 73 65 74 20 3a 3a  3);.  }.  set ::
2b50: 54 52 49 47 47 45 52 0a 7d 20 7b 74 72 69 67 32  TRIGGER.} {trig2
2b60: 20 31 20 32 20 33 7d 0a 64 6f 5f 74 65 73 74 20   1 2 3}.do_test 
2b70: 61 6c 74 65 72 2d 33 2e 31 2e 35 20 7b 0a 20 20  alter-3.1.5 {.  
2b80: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 41 4c  execsql {.    AL
2b90: 54 45 52 20 54 41 42 4c 45 20 74 37 20 52 45 4e  TER TABLE t7 REN
2ba0: 41 4d 45 20 54 4f 20 74 38 3b 0a 20 20 20 20 49  AME TO t8;.    I
2bb0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 38 20 56 41  NSERT INTO t8 VA
2bc0: 4c 55 45 53 28 34 2c 20 35 2c 20 36 29 3b 0a 20  LUES(4, 5, 6);. 
2bd0: 20 7d 0a 20 20 73 65 74 20 3a 3a 54 52 49 47 47   }.  set ::TRIGG
2be0: 45 52 0a 7d 20 7b 74 72 69 67 32 20 34 20 35 20  ER.} {trig2 4 5 
2bf0: 36 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72  6}.do_test alter
2c00: 2d 33 2e 31 2e 36 20 7b 0a 20 20 65 78 65 63 73  -3.1.6 {.  execs
2c10: 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20 54 52  ql {.    DROP TR
2c20: 49 47 47 45 52 20 74 72 69 67 32 3b 0a 20 20 7d  IGGER trig2;.  }
2c30: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 61 6c  .} {}.do_test al
2c40: 74 65 72 2d 33 2e 31 2e 37 20 7b 0a 20 20 65 78  ter-3.1.7 {.  ex
2c50: 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41  ecsql {.    CREA
2c60: 54 45 20 54 52 49 47 47 45 52 20 74 72 69 67 33  TE TRIGGER trig3
2c70: 20 41 46 54 45 52 20 49 4e 53 45 52 54 20 4f 4e   AFTER INSERT ON
2c80: 20 6d 61 69 6e 2e 27 74 38 27 42 45 47 49 4e 0a   main.'t8'BEGIN.
2c90: 20 20 20 20 20 20 53 45 4c 45 43 54 20 74 72 69        SELECT tri
2ca0: 67 66 75 6e 63 28 27 74 72 69 67 33 27 2c 20 6e  gfunc('trig3', n
2cb0: 65 77 2e 61 2c 20 6e 65 77 2e 62 2c 20 6e 65 77  ew.a, new.b, new
2cc0: 2e 63 29 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20  .c);.    END;.  
2cd0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 38    INSERT INTO t8
2ce0: 20 56 41 4c 55 45 53 28 31 2c 20 32 2c 20 33 29   VALUES(1, 2, 3)
2cf0: 3b 0a 20 20 7d 0a 20 20 73 65 74 20 3a 3a 54 52  ;.  }.  set ::TR
2d00: 49 47 47 45 52 0a 7d 20 7b 74 72 69 67 33 20 31  IGGER.} {trig3 1
2d10: 20 32 20 33 7d 0a 64 6f 5f 74 65 73 74 20 61 6c   2 3}.do_test al
2d20: 74 65 72 2d 33 2e 31 2e 38 20 7b 0a 20 20 65 78  ter-3.1.8 {.  ex
2d30: 65 63 73 71 6c 20 7b 0a 20 20 20 20 41 4c 54 45  ecsql {.    ALTE
2d40: 52 20 54 41 42 4c 45 20 74 38 20 52 45 4e 41 4d  R TABLE t8 RENAM
2d50: 45 20 54 4f 20 74 39 3b 0a 20 20 20 20 49 4e 53  E TO t9;.    INS
2d60: 45 52 54 20 49 4e 54 4f 20 74 39 20 56 41 4c 55  ERT INTO t9 VALU
2d70: 45 53 28 34 2c 20 35 2c 20 36 29 3b 0a 20 20 7d  ES(4, 5, 6);.  }
2d80: 0a 20 20 73 65 74 20 3a 3a 54 52 49 47 47 45 52  .  set ::TRIGGER
2d90: 0a 7d 20 7b 74 72 69 67 33 20 34 20 35 20 36 7d  .} {trig3 4 5 6}
2da0: 0a 0a 23 20 4d 61 6b 65 20 73 75 72 65 20 22 4f  ..# Make sure "O
2db0: 4e 22 20 63 61 6e 6e 6f 74 20 62 65 20 75 73 65  N" cannot be use
2dc0: 64 20 61 73 20 61 20 64 61 74 61 62 61 73 65 2c  d as a database,
2dd0: 20 74 61 62 6c 65 20 6f 72 20 63 6f 6c 75 6d 6e   table or column
2de0: 20 6e 61 6d 65 20 77 69 74 68 6f 75 74 0a 23 20   name without.# 
2df0: 71 75 6f 74 69 6e 67 2e 20 4f 74 68 65 72 77 69  quoting. Otherwi
2e00: 73 65 20 74 68 65 20 73 71 6c 69 74 65 5f 61 6c  se the sqlite_al
2e10: 74 65 72 5f 74 72 69 67 67 65 72 28 29 20 66 75  ter_trigger() fu
2e20: 6e 63 74 69 6f 6e 20 6d 69 67 68 74 20 6e 6f 74  nction might not
2e30: 20 77 6f 72 6b 2e 0a 66 6f 72 63 65 64 65 6c 65   work..forcedele
2e40: 74 65 20 74 65 73 74 33 2e 64 62 0a 66 6f 72 63  te test3.db.forc
2e50: 65 64 65 6c 65 74 65 20 74 65 73 74 33 2e 64 62  edelete test3.db
2e60: 2d 6a 6f 75 72 6e 61 6c 0a 69 66 63 61 70 61 62  -journal.ifcapab
2e70: 6c 65 20 61 74 74 61 63 68 20 7b 0a 20 20 64 6f  le attach {.  do
2e80: 5f 74 65 73 74 20 61 6c 74 65 72 2d 33 2e 32 2e  _test alter-3.2.
2e90: 31 20 7b 0a 20 20 20 20 63 61 74 63 68 73 71 6c  1 {.    catchsql
2ea0: 20 7b 0a 20 20 20 20 20 20 41 54 54 41 43 48 20   {.      ATTACH 
2eb0: 27 74 65 73 74 33 2e 64 62 27 20 41 53 20 4f 4e  'test3.db' AS ON
2ec0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 20 7b  ;.    }.  } {1 {
2ed0: 6e 65 61 72 20 22 4f 4e 22 3a 20 73 79 6e 74 61  near "ON": synta
2ee0: 78 20 65 72 72 6f 72 7d 7d 0a 20 20 64 6f 5f 74  x error}}.  do_t
2ef0: 65 73 74 20 61 6c 74 65 72 2d 33 2e 32 2e 32 20  est alter-3.2.2 
2f00: 7b 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b  {.    catchsql {
2f10: 0a 20 20 20 20 20 20 41 54 54 41 43 48 20 27 74  .      ATTACH 't
2f20: 65 73 74 33 2e 64 62 27 20 41 53 20 27 4f 4e 27  est3.db' AS 'ON'
2f30: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 30 20 7b  ;.    }.  } {0 {
2f40: 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 6c 74  }}.  do_test alt
2f50: 65 72 2d 33 2e 32 2e 33 20 7b 0a 20 20 20 20 63  er-3.2.3 {.    c
2f60: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20  atchsql {.      
2f70: 43 52 45 41 54 45 20 54 41 42 4c 45 20 4f 4e 2e  CREATE TABLE ON.
2f80: 74 31 28 61 2c 20 62 2c 20 63 29 3b 20 0a 20 20  t1(a, b, c); .  
2f90: 20 20 7d 0a 20 20 7d 20 7b 31 20 7b 6e 65 61 72    }.  } {1 {near
2fa0: 20 22 4f 4e 22 3a 20 73 79 6e 74 61 78 20 65 72   "ON": syntax er
2fb0: 72 6f 72 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20  ror}}.  do_test 
2fc0: 61 6c 74 65 72 2d 33 2e 32 2e 34 20 7b 0a 20 20  alter-3.2.4 {.  
2fd0: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
2fe0: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
2ff0: 27 4f 4e 27 2e 74 31 28 61 2c 20 62 2c 20 63 29  'ON'.t1(a, b, c)
3000: 3b 20 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 30 20  ; .    }.  } {0 
3010: 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 6c  {}}.  do_test al
3020: 74 65 72 2d 33 2e 32 2e 34 20 7b 0a 20 20 20 20  ter-3.2.4 {.    
3030: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20  catchsql {.     
3040: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 27 4f   CREATE TABLE 'O
3050: 4e 27 2e 4f 4e 28 61 2c 20 62 2c 20 63 29 3b 20  N'.ON(a, b, c); 
3060: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 20 7b 6e  .    }.  } {1 {n
3070: 65 61 72 20 22 4f 4e 22 3a 20 73 79 6e 74 61 78  ear "ON": syntax
3080: 20 65 72 72 6f 72 7d 7d 0a 20 20 64 6f 5f 74 65   error}}.  do_te
3090: 73 74 20 61 6c 74 65 72 2d 33 2e 32 2e 35 20 7b  st alter-3.2.5 {
30a0: 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a  .    catchsql {.
30b0: 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42        CREATE TAB
30c0: 4c 45 20 27 4f 4e 27 2e 27 4f 4e 27 28 61 2c 20  LE 'ON'.'ON'(a, 
30d0: 62 2c 20 63 29 3b 20 0a 20 20 20 20 7d 0a 20 20  b, c); .    }.  
30e0: 7d 20 7b 30 20 7b 7d 7d 0a 7d 0a 64 6f 5f 74 65  } {0 {}}.}.do_te
30f0: 73 74 20 61 6c 74 65 72 2d 33 2e 32 2e 36 20 7b  st alter-3.2.6 {
3100: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
3110: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
3120: 31 30 28 61 2c 20 4f 4e 2c 20 63 29 3b 0a 20 20  10(a, ON, c);.  
3130: 7d 0a 7d 20 7b 31 20 7b 6e 65 61 72 20 22 4f 4e  }.} {1 {near "ON
3140: 22 3a 20 73 79 6e 74 61 78 20 65 72 72 6f 72 7d  ": syntax error}
3150: 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d  }.do_test alter-
3160: 33 2e 32 2e 37 20 7b 0a 20 20 63 61 74 63 68 73  3.2.7 {.  catchs
3170: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
3180: 54 41 42 4c 45 20 74 31 30 28 61 2c 20 27 4f 4e  TABLE t10(a, 'ON
3190: 27 2c 20 63 29 3b 0a 20 20 7d 0a 7d 20 7b 30 20  ', c);.  }.} {0 
31a0: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65  {}}.do_test alte
31b0: 72 2d 33 2e 32 2e 38 20 7b 0a 20 20 63 61 74 63  r-3.2.8 {.  catc
31c0: 68 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  hsql {.    CREAT
31d0: 45 20 54 52 49 47 47 45 52 20 74 72 69 67 34 20  E TRIGGER trig4 
31e0: 41 46 54 45 52 20 49 4e 53 45 52 54 20 4f 4e 20  AFTER INSERT ON 
31f0: 4f 4e 20 42 45 47 49 4e 20 53 45 4c 45 43 54 20  ON BEGIN SELECT 
3200: 31 3b 20 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 31  1; END;.  }.} {1
3210: 20 7b 6e 65 61 72 20 22 4f 4e 22 3a 20 73 79 6e   {near "ON": syn
3220: 74 61 78 20 65 72 72 6f 72 7d 7d 0a 69 66 63 61  tax error}}.ifca
3230: 70 61 62 6c 65 20 61 74 74 61 63 68 20 7b 0a 20  pable attach {. 
3240: 20 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 33   do_test alter-3
3250: 2e 32 2e 39 20 7b 0a 20 20 20 20 63 61 74 63 68  .2.9 {.    catch
3260: 73 71 6c 20 7b 0a 20 20 20 20 20 20 43 52 45 41  sql {.      CREA
3270: 54 45 20 54 52 49 47 47 45 52 20 27 6f 6e 27 2e  TE TRIGGER 'on'.
3280: 74 72 69 67 34 20 41 46 54 45 52 20 49 4e 53 45  trig4 AFTER INSE
3290: 52 54 20 4f 4e 20 27 4f 4e 27 20 42 45 47 49 4e  RT ON 'ON' BEGIN
32a0: 20 53 45 4c 45 43 54 20 31 3b 20 45 4e 44 3b 0a   SELECT 1; END;.
32b0: 20 20 20 20 7d 0a 20 20 7d 20 7b 30 20 7b 7d 7d      }.  } {0 {}}
32c0: 0a 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72  .}.do_test alter
32d0: 2d 33 2e 32 2e 31 30 20 7b 0a 20 20 65 78 65 63  -3.2.10 {.  exec
32e0: 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20 54  sql {.    DROP T
32f0: 41 42 4c 45 20 74 31 30 3b 0a 20 20 7d 0a 7d 20  ABLE t10;.  }.} 
3300: 7b 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65  {}..do_test alte
3310: 72 2d 33 2e 33 2e 31 20 7b 0a 20 20 65 78 65 63  r-3.3.1 {.  exec
3320: 73 71 6c 20 5b 73 75 62 73 74 20 7b 0a 20 20 20  sql [subst {.   
3330: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 62   CREATE TABLE tb
3340: 6c 31 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20  l1(a, b, c);.   
3350: 20 43 52 45 41 54 45 20 24 3a 3a 74 65 6d 70 20   CREATE $::temp 
3360: 54 52 49 47 47 45 52 20 74 72 69 67 31 20 41 46  TRIGGER trig1 AF
3370: 54 45 52 20 49 4e 53 45 52 54 20 4f 4e 20 74 62  TER INSERT ON tb
3380: 6c 31 20 42 45 47 49 4e 0a 20 20 20 20 20 20 53  l1 BEGIN.      S
3390: 45 4c 45 43 54 20 74 72 69 67 66 75 6e 63 28 27  ELECT trigfunc('
33a0: 74 72 69 67 31 27 2c 20 6e 65 77 2e 61 2c 20 6e  trig1', new.a, n
33b0: 65 77 2e 62 2c 20 6e 65 77 2e 63 29 3b 0a 20 20  ew.b, new.c);.  
33c0: 20 20 45 4e 44 3b 0a 20 20 7d 5d 0a 7d 20 7b 7d    END;.  }].} {}
33d0: 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 33  .do_test alter-3
33e0: 2e 33 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  .3.2 {.  execsql
33f0: 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e   {.    INSERT IN
3400: 54 4f 20 74 62 6c 31 20 56 41 4c 55 45 53 28 27  TO tbl1 VALUES('
3410: 61 27 2c 20 27 62 27 2c 20 27 63 27 29 3b 0a 20  a', 'b', 'c');. 
3420: 20 7d 0a 20 20 73 65 74 20 3a 3a 54 52 49 47 47   }.  set ::TRIGG
3430: 45 52 0a 7d 20 7b 74 72 69 67 31 20 61 20 62 20  ER.} {trig1 a b 
3440: 63 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72  c}.do_test alter
3450: 2d 33 2e 33 2e 33 20 7b 0a 20 20 65 78 65 63 73  -3.3.3 {.  execs
3460: 71 6c 20 7b 0a 20 20 20 20 41 4c 54 45 52 20 54  ql {.    ALTER T
3470: 41 42 4c 45 20 74 62 6c 31 20 52 45 4e 41 4d 45  ABLE tbl1 RENAME
3480: 20 54 4f 20 74 62 6c 32 3b 0a 20 20 20 20 49 4e   TO tbl2;.    IN
3490: 53 45 52 54 20 49 4e 54 4f 20 74 62 6c 32 20 56  SERT INTO tbl2 V
34a0: 41 4c 55 45 53 28 27 64 27 2c 20 27 65 27 2c 20  ALUES('d', 'e', 
34b0: 27 66 27 29 3b 0a 20 20 7d 20 0a 20 20 73 65 74  'f');.  } .  set
34c0: 20 3a 3a 54 52 49 47 47 45 52 0a 7d 20 7b 74 72   ::TRIGGER.} {tr
34d0: 69 67 31 20 64 20 65 20 66 7d 0a 64 6f 5f 74 65  ig1 d e f}.do_te
34e0: 73 74 20 61 6c 74 65 72 2d 33 2e 33 2e 34 20 7b  st alter-3.3.4 {
34f0: 0a 20 20 65 78 65 63 73 71 6c 20 5b 73 75 62 73  .  execsql [subs
3500: 74 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 24  t {.    CREATE $
3510: 3a 3a 74 65 6d 70 20 54 52 49 47 47 45 52 20 74  ::temp TRIGGER t
3520: 72 69 67 32 20 41 46 54 45 52 20 55 50 44 41 54  rig2 AFTER UPDAT
3530: 45 20 4f 4e 20 74 62 6c 32 20 42 45 47 49 4e 0a  E ON tbl2 BEGIN.
3540: 20 20 20 20 20 20 53 45 4c 45 43 54 20 74 72 69        SELECT tri
3550: 67 66 75 6e 63 28 27 74 72 69 67 32 27 2c 20 6e  gfunc('trig2', n
3560: 65 77 2e 61 2c 20 6e 65 77 2e 62 2c 20 6e 65 77  ew.a, new.b, new
3570: 2e 63 29 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20  .c);.    END;.  
3580: 7d 5d 20 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74  }] .} {}.do_test
3590: 20 61 6c 74 65 72 2d 33 2e 33 2e 35 20 7b 0a 20   alter-3.3.5 {. 
35a0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 41   execsql {.    A
35b0: 4c 54 45 52 20 54 41 42 4c 45 20 74 62 6c 32 20  LTER TABLE tbl2 
35c0: 52 45 4e 41 4d 45 20 54 4f 20 74 62 6c 33 3b 0a  RENAME TO tbl3;.
35d0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
35e0: 74 62 6c 33 20 56 41 4c 55 45 53 28 27 67 27 2c  tbl3 VALUES('g',
35f0: 20 27 68 27 2c 20 27 69 27 29 3b 0a 20 20 7d 20   'h', 'i');.  } 
3600: 0a 20 20 73 65 74 20 3a 3a 54 52 49 47 47 45 52  .  set ::TRIGGER
3610: 0a 7d 20 7b 74 72 69 67 31 20 67 20 68 20 69 7d  .} {trig1 g h i}
3620: 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 33  .do_test alter-3
3630: 2e 33 2e 36 20 7b 0a 20 20 65 78 65 63 73 71 6c  .3.6 {.  execsql
3640: 20 7b 0a 20 20 20 20 55 50 44 41 54 45 20 74 62   {.    UPDATE tb
3650: 6c 33 20 53 45 54 20 61 20 3d 20 27 47 27 20 77  l3 SET a = 'G' w
3660: 68 65 72 65 20 61 20 3d 20 27 67 27 3b 0a 20 20  here a = 'g';.  
3670: 7d 20 0a 20 20 73 65 74 20 3a 3a 54 52 49 47 47  } .  set ::TRIGG
3680: 45 52 0a 7d 20 7b 74 72 69 67 32 20 47 20 68 20  ER.} {trig2 G h 
3690: 69 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72  i}.do_test alter
36a0: 2d 33 2e 33 2e 37 20 7b 0a 20 20 65 78 65 63 73  -3.3.7 {.  execs
36b0: 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20 54 41  ql {.    DROP TA
36c0: 42 4c 45 20 74 62 6c 33 3b 0a 20 20 7d 0a 7d 20  BLE tbl3;.  }.} 
36d0: 7b 7d 0a 69 66 63 61 70 61 62 6c 65 20 74 65 6d  {}.ifcapable tem
36e0: 70 64 62 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  pdb {.  do_test 
36f0: 61 6c 74 65 72 2d 33 2e 33 2e 38 20 7b 0a 20 20  alter-3.3.8 {.  
3700: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
3710: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
3720: 74 65 6d 70 2e 73 71 6c 69 74 65 5f 6d 61 73 74  temp.sqlite_mast
3730: 65 72 20 57 48 45 52 45 20 74 79 70 65 20 3d 20  er WHERE type = 
3740: 27 74 72 69 67 67 65 72 27 3b 0a 20 20 20 20 7d  'trigger';.    }
3750: 0a 20 20 7d 20 7b 7d 0a 7d 0a 0a 7d 20 3b 23 20  .  } {}.}..} ;# 
3760: 69 66 63 61 70 61 62 6c 65 20 74 72 69 67 67 65  ifcapable trigge
3770: 72 0a 0a 23 20 49 66 20 74 68 65 20 62 75 69 6c  r..# If the buil
3780: 64 20 64 6f 65 73 20 6e 6f 74 20 69 6e 63 6c 75  d does not inclu
3790: 64 65 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  de AUTOINCREMENT
37a0: 20 66 69 65 6c 64 73 2c 20 6f 6d 69 74 20 61 6c   fields, omit al
37b0: 74 65 72 2d 34 2e 2a 2e 0a 69 66 63 61 70 61 62  ter-4.*..ifcapab
37c0: 6c 65 20 61 75 74 6f 69 6e 63 20 7b 0a 0a 64 6f  le autoinc {..do
37d0: 5f 74 65 73 74 20 61 6c 74 65 72 2d 34 2e 31 20  _test alter-4.1 
37e0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
37f0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
3800: 62 6c 31 28 61 20 49 4e 54 45 47 45 52 20 50 52  bl1(a INTEGER PR
3810: 49 4d 41 52 59 20 4b 45 59 20 41 55 54 4f 49 4e  IMARY KEY AUTOIN
3820: 43 52 45 4d 45 4e 54 29 3b 0a 20 20 20 20 49 4e  CREMENT);.    IN
3830: 53 45 52 54 20 49 4e 54 4f 20 74 62 6c 31 20 56  SERT INTO tbl1 V
3840: 41 4c 55 45 53 28 31 30 29 3b 0a 20 20 7d 0a 7d  ALUES(10);.  }.}
3850: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65   {}.do_test alte
3860: 72 2d 34 2e 32 20 7b 0a 20 20 65 78 65 63 73 71  r-4.2 {.  execsq
3870: 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  l {.    INSERT I
3880: 4e 54 4f 20 74 62 6c 31 20 56 41 4c 55 45 53 28  NTO tbl1 VALUES(
3890: 4e 55 4c 4c 29 3b 0a 20 20 20 20 53 45 4c 45 43  NULL);.    SELEC
38a0: 54 20 61 20 46 52 4f 4d 20 74 62 6c 31 3b 0a 20  T a FROM tbl1;. 
38b0: 20 7d 0a 7d 20 7b 31 30 20 31 31 7d 0a 64 6f 5f   }.} {10 11}.do_
38c0: 74 65 73 74 20 61 6c 74 65 72 2d 34 2e 33 20 7b  test alter-4.3 {
38d0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
38e0: 20 41 4c 54 45 52 20 54 41 42 4c 45 20 74 62 6c   ALTER TABLE tbl
38f0: 31 20 52 45 4e 41 4d 45 20 54 4f 20 74 62 6c 32  1 RENAME TO tbl2
3900: 3b 0a 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f  ;.    DELETE FRO
3910: 4d 20 74 62 6c 32 3b 0a 20 20 20 20 49 4e 53 45  M tbl2;.    INSE
3920: 52 54 20 49 4e 54 4f 20 74 62 6c 32 20 56 41 4c  RT INTO tbl2 VAL
3930: 55 45 53 28 4e 55 4c 4c 29 3b 0a 20 20 20 20 53  UES(NULL);.    S
3940: 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 62 6c  ELECT a FROM tbl
3950: 32 3b 0a 20 20 7d 0a 7d 20 7b 31 32 7d 0a 64 6f  2;.  }.} {12}.do
3960: 5f 74 65 73 74 20 61 6c 74 65 72 2d 34 2e 34 20  _test alter-4.4 
3970: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
3980: 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74 62 6c    DROP TABLE tbl
3990: 32 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 7d 20 3b  2;.  }.} {}..} ;
39a0: 23 20 69 66 63 61 70 61 62 6c 65 20 61 75 74 6f  # ifcapable auto
39b0: 69 6e 63 0a 0a 23 20 54 65 73 74 20 74 68 61 74  inc..# Test that
39c0: 20 69 74 20 69 73 20 4f 6b 20 74 6f 20 65 78 65   it is Ok to exe
39d0: 63 75 74 65 20 61 6e 20 41 4c 54 45 52 20 54 41  cute an ALTER TA
39e0: 42 4c 45 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  BLE immediately 
39f0: 61 66 74 65 72 0a 23 20 6f 70 65 6e 69 6e 67 20  after.# opening 
3a00: 61 20 64 61 74 61 62 61 73 65 2e 0a 64 6f 5f 74  a database..do_t
3a10: 65 73 74 20 61 6c 74 65 72 2d 35 2e 31 20 7b 0a  est alter-5.1 {.
3a20: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
3a30: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 62 6c  CREATE TABLE tbl
3a40: 31 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20  1(a, b, c);.    
3a50: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 62 6c 31  INSERT INTO tbl1
3a60: 20 56 41 4c 55 45 53 28 27 78 27 2c 20 27 79 27   VALUES('x', 'y'
3a70: 2c 20 27 7a 27 29 3b 0a 20 20 7d 0a 7d 20 7b 7d  , 'z');.  }.} {}
3a80: 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 35  .do_test alter-5
3a90: 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 64  .2 {.  sqlite3 d
3aa0: 62 32 20 74 65 73 74 2e 64 62 0a 20 20 65 78 65  b2 test.db.  exe
3ab0: 63 73 71 6c 20 7b 0a 20 20 20 20 41 4c 54 45 52  csql {.    ALTER
3ac0: 20 54 41 42 4c 45 20 74 62 6c 31 20 52 45 4e 41   TABLE tbl1 RENA
3ad0: 4d 45 20 54 4f 20 74 62 6c 32 3b 0a 20 20 20 20  ME TO tbl2;.    
3ae0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 62  SELECT * FROM tb
3af0: 6c 32 3b 0a 20 20 7d 20 64 62 32 0a 7d 20 7b 78  l2;.  } db2.} {x
3b00: 20 79 20 7a 7d 0a 64 6f 5f 74 65 73 74 20 61 6c   y z}.do_test al
3b10: 74 65 72 2d 35 2e 33 20 7b 0a 20 20 64 62 32 20  ter-5.3 {.  db2 
3b20: 63 6c 6f 73 65 0a 7d 20 7b 7d 0a 0a 66 6f 72 65  close.} {}..fore
3b30: 61 63 68 20 74 62 6c 6e 61 6d 65 20 5b 65 78 65  ach tblname [exe
3b40: 63 73 71 6c 20 7b 0a 20 20 53 45 4c 45 43 54 20  csql {.  SELECT 
3b50: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
3b60: 5f 6d 61 73 74 65 72 0a 20 20 20 57 48 45 52 45  _master.   WHERE
3b70: 20 74 79 70 65 3d 27 74 61 62 6c 65 27 20 41 4e   type='table' AN
3b80: 44 20 6e 61 6d 65 20 4e 4f 54 20 47 4c 4f 42 20  D name NOT GLOB 
3b90: 27 73 71 6c 69 74 65 2a 27 0a 7d 5d 20 7b 0a 20  'sqlite*'.}] {. 
3ba0: 20 65 78 65 63 73 71 6c 20 22 44 52 4f 50 20 54   execsql "DROP T
3bb0: 41 42 4c 45 20 5c 22 24 74 62 6c 6e 61 6d 65 5c  ABLE \"$tblname\
3bc0: 22 22 0a 7d 0a 0a 73 65 74 20 3a 3a 74 62 6c 5f  "".}..set ::tbl_
3bd0: 6e 61 6d 65 20 22 61 62 63 5c 75 41 42 43 44 64  name "abc\uABCDd
3be0: 65 66 22 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65  ef".do_test alte
3bf0: 72 2d 36 2e 31 20 7b 0a 20 20 73 74 72 69 6e 67  r-6.1 {.  string
3c00: 20 6c 65 6e 67 74 68 20 24 3a 3a 74 62 6c 5f 6e   length $::tbl_n
3c10: 61 6d 65 0a 7d 20 7b 37 7d 0a 64 6f 5f 74 65 73  ame.} {7}.do_tes
3c20: 74 20 61 6c 74 65 72 2d 36 2e 32 20 7b 0a 20 20  t alter-6.2 {.  
3c30: 65 78 65 63 73 71 6c 20 22 0a 20 20 20 20 43 52  execsql ".    CR
3c40: 45 41 54 45 20 54 41 42 4c 45 20 24 7b 74 62 6c  EATE TABLE ${tbl
3c50: 5f 6e 61 6d 65 7d 28 61 2c 20 62 2c 20 63 29 3b  _name}(a, b, c);
3c60: 0a 20 20 22 0a 20 20 73 65 74 20 3a 3a 6f 69 64  .  ".  set ::oid
3c70: 20 5b 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43   [execsql {SELEC
3c80: 54 20 6d 61 78 28 6f 69 64 29 20 46 52 4f 4d 20  T max(oid) FROM 
3c90: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 5d 0a  sqlite_master}].
3ca0: 20 20 65 78 65 63 73 71 6c 20 22 0a 20 20 20 20    execsql ".    
3cb0: 53 45 4c 45 43 54 20 73 71 6c 20 46 52 4f 4d 20  SELECT sql FROM 
3cc0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48  sqlite_master WH
3cd0: 45 52 45 20 6f 69 64 20 3d 20 24 3a 3a 6f 69 64  ERE oid = $::oid
3ce0: 3b 0a 20 20 22 0a 7d 20 22 7b 43 52 45 41 54 45  ;.  ".} "{CREATE
3cf0: 20 54 41 42 4c 45 20 24 7b 3a 3a 74 62 6c 5f 6e   TABLE ${::tbl_n
3d00: 61 6d 65 7d 28 61 2c 20 62 2c 20 63 29 7d 22 0a  ame}(a, b, c)}".
3d10: 65 78 65 63 73 71 6c 20 22 0a 20 20 53 45 4c 45  execsql ".  SELE
3d20: 43 54 20 2a 20 46 52 4f 4d 20 24 7b 3a 3a 74 62  CT * FROM ${::tb
3d30: 6c 5f 6e 61 6d 65 7d 0a 22 0a 73 65 74 20 3a 3a  l_name}.".set ::
3d40: 74 62 6c 5f 6e 61 6d 65 32 20 22 61 62 63 58 64  tbl_name2 "abcXd
3d50: 65 66 22 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65  ef".do_test alte
3d60: 72 2d 36 2e 33 20 7b 0a 20 20 65 78 65 63 73 71  r-6.3 {.  execsq
3d70: 6c 20 22 0a 20 20 20 20 41 4c 54 45 52 20 54 41  l ".    ALTER TA
3d80: 42 4c 45 20 24 3a 3a 74 62 6c 5f 6e 61 6d 65 20  BLE $::tbl_name 
3d90: 52 45 4e 41 4d 45 20 54 4f 20 24 3a 3a 74 62 6c  RENAME TO $::tbl
3da0: 5f 6e 61 6d 65 32 20 0a 20 20 22 0a 20 20 65 78  _name2 .  ".  ex
3db0: 65 63 73 71 6c 20 22 0a 20 20 20 20 53 45 4c 45  ecsql ".    SELE
3dc0: 43 54 20 73 71 6c 20 46 52 4f 4d 20 73 71 6c 69  CT sql FROM sqli
3dd0: 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20  te_master WHERE 
3de0: 6f 69 64 20 3d 20 24 3a 3a 6f 69 64 0a 20 20 22  oid = $::oid.  "
3df0: 0a 7d 20 22 7b 43 52 45 41 54 45 20 54 41 42 4c  .} "{CREATE TABL
3e00: 45 20 5c 22 24 7b 3a 3a 74 62 6c 5f 6e 61 6d 65  E \"${::tbl_name
3e10: 32 7d 5c 22 28 61 2c 20 62 2c 20 63 29 7d 22 0a  2}\"(a, b, c)}".
3e20: 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 36 2e  do_test alter-6.
3e30: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 22 0a  4 {.  execsql ".
3e40: 20 20 20 20 41 4c 54 45 52 20 54 41 42 4c 45 20      ALTER TABLE 
3e50: 24 3a 3a 74 62 6c 5f 6e 61 6d 65 32 20 52 45 4e  $::tbl_name2 REN
3e60: 41 4d 45 20 54 4f 20 24 3a 3a 74 62 6c 5f 6e 61  AME TO $::tbl_na
3e70: 6d 65 0a 20 20 22 0a 20 20 65 78 65 63 73 71 6c  me.  ".  execsql
3e80: 20 22 0a 20 20 20 20 53 45 4c 45 43 54 20 73 71   ".    SELECT sq
3e90: 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  l FROM sqlite_ma
3ea0: 73 74 65 72 20 57 48 45 52 45 20 6f 69 64 20 3d  ster WHERE oid =
3eb0: 20 24 3a 3a 6f 69 64 0a 20 20 22 0a 7d 20 22 7b   $::oid.  ".} "{
3ec0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 5c 22 24  CREATE TABLE \"$
3ed0: 7b 3a 3a 74 62 6c 5f 6e 61 6d 65 7d 5c 22 28 61  {::tbl_name}\"(a
3ee0: 2c 20 62 2c 20 63 29 7d 22 0a 73 65 74 20 3a 3a  , b, c)}".set ::
3ef0: 63 6f 6c 5f 6e 61 6d 65 20 67 68 69 5c 31 32 33  col_name ghi\123
3f00: 34 5c 6a 6b 6c 0a 64 6f 5f 74 65 73 74 20 61 6c  4\jkl.do_test al
3f10: 74 65 72 2d 36 2e 35 20 7b 0a 20 20 65 78 65 63  ter-6.5 {.  exec
3f20: 73 71 6c 20 22 0a 20 20 20 20 41 4c 54 45 52 20  sql ".    ALTER 
3f30: 54 41 42 4c 45 20 24 3a 3a 74 62 6c 5f 6e 61 6d  TABLE $::tbl_nam
3f40: 65 20 41 44 44 20 43 4f 4c 55 4d 4e 20 24 3a 3a  e ADD COLUMN $::
3f50: 63 6f 6c 5f 6e 61 6d 65 20 56 41 52 43 48 41 52  col_name VARCHAR
3f60: 0a 20 20 22 0a 20 20 65 78 65 63 73 71 6c 20 22  .  ".  execsql "
3f70: 0a 20 20 20 20 53 45 4c 45 43 54 20 73 71 6c 20  .    SELECT sql 
3f80: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
3f90: 65 72 20 57 48 45 52 45 20 6f 69 64 20 3d 20 24  er WHERE oid = $
3fa0: 3a 3a 6f 69 64 0a 20 20 22 0a 7d 20 22 7b 43 52  ::oid.  ".} "{CR
3fb0: 45 41 54 45 20 54 41 42 4c 45 20 5c 22 24 7b 3a  EATE TABLE \"${:
3fc0: 3a 74 62 6c 5f 6e 61 6d 65 7d 5c 22 28 61 2c 20  :tbl_name}\"(a, 
3fd0: 62 2c 20 63 2c 20 24 3a 3a 63 6f 6c 5f 6e 61 6d  b, c, $::col_nam
3fe0: 65 20 56 41 52 43 48 41 52 29 7d 22 0a 73 65 74  e VARCHAR)}".set
3ff0: 20 3a 3a 63 6f 6c 5f 6e 61 6d 65 32 20 42 5c 33   ::col_name2 B\3
4000: 34 32 31 5c 41 0a 64 6f 5f 74 65 73 74 20 61 6c  421\A.do_test al
4010: 74 65 72 2d 36 2e 36 20 7b 0a 20 20 64 62 20 63  ter-6.6 {.  db c
4020: 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 20 64  lose.  sqlite3 d
4030: 62 20 74 65 73 74 2e 64 62 0a 20 20 65 78 65 63  b test.db.  exec
4040: 73 71 6c 20 22 0a 20 20 20 20 41 4c 54 45 52 20  sql ".    ALTER 
4050: 54 41 42 4c 45 20 24 3a 3a 74 62 6c 5f 6e 61 6d  TABLE $::tbl_nam
4060: 65 20 41 44 44 20 43 4f 4c 55 4d 4e 20 24 3a 3a  e ADD COLUMN $::
4070: 63 6f 6c 5f 6e 61 6d 65 32 0a 20 20 22 0a 20 20  col_name2.  ".  
4080: 65 78 65 63 73 71 6c 20 22 0a 20 20 20 20 53 45  execsql ".    SE
4090: 4c 45 43 54 20 73 71 6c 20 46 52 4f 4d 20 73 71  LECT sql FROM sq
40a0: 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52  lite_master WHER
40b0: 45 20 6f 69 64 20 3d 20 24 3a 3a 6f 69 64 0a 20  E oid = $::oid. 
40c0: 20 22 0a 7d 20 22 7b 43 52 45 41 54 45 20 54 41   ".} "{CREATE TA
40d0: 42 4c 45 20 5c 22 24 7b 3a 3a 74 62 6c 5f 6e 61  BLE \"${::tbl_na
40e0: 6d 65 7d 5c 22 28 61 2c 20 62 2c 20 63 2c 20 24  me}\"(a, b, c, $
40f0: 3a 3a 63 6f 6c 5f 6e 61 6d 65 20 56 41 52 43 48  ::col_name VARCH
4100: 41 52 2c 20 24 3a 3a 63 6f 6c 5f 6e 61 6d 65 32  AR, $::col_name2
4110: 29 7d 22 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65  )}".do_test alte
4120: 72 2d 36 2e 37 20 7b 0a 20 20 65 78 65 63 73 71  r-6.7 {.  execsq
4130: 6c 20 22 0a 20 20 20 20 49 4e 53 45 52 54 20 49  l ".    INSERT I
4140: 4e 54 4f 20 24 7b 3a 3a 74 62 6c 5f 6e 61 6d 65  NTO ${::tbl_name
4150: 7d 20 56 41 4c 55 45 53 28 31 2c 20 32 2c 20 33  } VALUES(1, 2, 3
4160: 2c 20 34 2c 20 35 29 3b 0a 20 20 20 20 53 45 4c  , 4, 5);.    SEL
4170: 45 43 54 20 24 3a 3a 63 6f 6c 5f 6e 61 6d 65 2c  ECT $::col_name,
4180: 20 24 3a 3a 63 6f 6c 5f 6e 61 6d 65 32 20 46 52   $::col_name2 FR
4190: 4f 4d 20 24 3a 3a 74 62 6c 5f 6e 61 6d 65 3b 0a  OM $::tbl_name;.
41a0: 20 20 22 0a 7d 20 7b 34 20 35 7d 0a 0a 23 20 54    ".} {4 5}..# T
41b0: 69 63 6b 65 74 20 23 31 36 36 35 3a 20 20 4d 61  icket #1665:  Ma
41c0: 6b 65 20 73 75 72 65 20 41 4c 54 45 52 20 54 41  ke sure ALTER TA
41d0: 42 4c 45 20 41 44 44 20 43 4f 4c 55 4d 4e 20 77  BLE ADD COLUMN w
41e0: 6f 72 6b 73 20 6f 6e 20 61 20 74 61 62 6c 65 0a  orks on a table.
41f0: 23 20 74 68 61 74 20 69 6e 63 6c 75 64 65 73 20  # that includes 
4200: 61 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65  a COLLATE clause
4210: 2e 0a 23 0a 64 6f 5f 72 65 61 6c 6e 75 6d 5f 74  ..#.do_realnum_t
4220: 65 73 74 20 61 6c 74 65 72 2d 37 2e 31 20 7b 0a  est alter-7.1 {.
4230: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
4240: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
4250: 61 20 54 45 58 54 20 43 4f 4c 4c 41 54 45 20 42  a TEXT COLLATE B
4260: 49 4e 41 52 59 29 3b 0a 20 20 20 20 41 4c 54 45  INARY);.    ALTE
4270: 52 20 54 41 42 4c 45 20 74 31 20 41 44 44 20 43  R TABLE t1 ADD C
4280: 4f 4c 55 4d 4e 20 62 20 49 4e 54 45 47 45 52 20  OLUMN b INTEGER 
4290: 43 4f 4c 4c 41 54 45 20 4e 4f 43 41 53 45 3b 0a  COLLATE NOCASE;.
42a0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
42b0: 74 31 20 56 41 4c 55 45 53 28 31 2c 27 2d 32 27  t1 VALUES(1,'-2'
42c0: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
42d0: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 35 2e 34  TO t1 VALUES(5.4
42e0: 65 2d 30 38 2c 27 35 2e 34 65 2d 30 38 27 29 3b  e-08,'5.4e-08');
42f0: 0a 20 20 20 20 53 45 4c 45 43 54 20 74 79 70 65  .    SELECT type
4300: 6f 66 28 61 29 2c 20 61 2c 20 74 79 70 65 6f 66  of(a), a, typeof
4310: 28 62 29 2c 20 62 20 46 52 4f 4d 20 74 31 3b 0a  (b), b FROM t1;.
4320: 20 20 7d 0a 7d 20 7b 74 65 78 74 20 31 20 69 6e    }.} {text 1 in
4330: 74 65 67 65 72 20 2d 32 20 74 65 78 74 20 35 2e  teger -2 text 5.
4340: 34 65 2d 30 38 20 72 65 61 6c 20 35 2e 34 65 2d  4e-08 real 5.4e-
4350: 30 38 7d 0a 0a 23 20 4d 61 6b 65 20 73 75 72 65  08}..# Make sure
4360: 20 74 68 61 74 20 77 68 65 6e 20 61 20 63 6f 6c   that when a col
4370: 75 6d 6e 20 69 73 20 61 64 64 65 64 20 62 79 20  umn is added by 
4380: 41 4c 54 45 52 20 54 41 42 4c 45 20 41 44 44 20  ALTER TABLE ADD 
4390: 43 4f 4c 55 4d 4e 20 61 6e 64 20 68 61 73 0a 23  COLUMN and has.#
43a0: 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65   a default value
43b0: 20 74 68 61 74 20 74 68 65 20 64 65 66 61 75 6c   that the defaul
43c0: 74 20 76 61 6c 75 65 20 69 73 20 75 73 65 64 20  t value is used 
43d0: 62 79 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  by aggregate fun
43e0: 63 74 69 6f 6e 73 2e 0a 23 0a 64 6f 5f 74 65 73  ctions..#.do_tes
43f0: 74 20 61 6c 74 65 72 2d 38 2e 31 20 7b 0a 20 20  t alter-8.1 {.  
4400: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52  execsql {.    CR
4410: 45 41 54 45 20 54 41 42 4c 45 20 74 32 28 61 20  EATE TABLE t2(a 
4420: 49 4e 54 45 47 45 52 29 3b 0a 20 20 20 20 49 4e  INTEGER);.    IN
4430: 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c  SERT INTO t2 VAL
4440: 55 45 53 28 31 29 3b 0a 20 20 20 20 49 4e 53 45  UES(1);.    INSE
4450: 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45  RT INTO t2 VALUE
4460: 53 28 31 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  S(1);.    INSERT
4470: 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28   INTO t2 VALUES(
4480: 32 29 3b 0a 20 20 20 20 41 4c 54 45 52 20 54 41  2);.    ALTER TA
4490: 42 4c 45 20 74 32 20 41 44 44 20 43 4f 4c 55 4d  BLE t2 ADD COLUM
44a0: 4e 20 62 20 49 4e 54 45 47 45 52 20 44 45 46 41  N b INTEGER DEFA
44b0: 55 4c 54 20 39 3b 0a 20 20 20 20 53 45 4c 45 43  ULT 9;.    SELEC
44c0: 54 20 73 75 6d 28 62 29 20 46 52 4f 4d 20 74 32  T sum(b) FROM t2
44d0: 3b 0a 20 20 7d 0a 7d 20 7b 32 37 7d 0a 64 6f 5f  ;.  }.} {27}.do_
44e0: 74 65 73 74 20 61 6c 74 65 72 2d 38 2e 32 20 7b  test alter-8.2 {
44f0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
4500: 20 53 45 4c 45 43 54 20 61 2c 20 73 75 6d 28 62   SELECT a, sum(b
4510: 29 20 46 52 4f 4d 20 74 32 20 47 52 4f 55 50 20  ) FROM t2 GROUP 
4520: 42 59 20 61 3b 0a 20 20 7d 0a 7d 20 7b 31 20 31  BY a;.  }.} {1 1
4530: 38 20 32 20 39 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d  8 2 9}..#-------
4540: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4550: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4560: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4570: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4580: 2d 2d 2d 0a 23 20 61 6c 74 65 72 2d 39 2e 58 20  ---.# alter-9.X 
4590: 2d 20 53 70 65 63 69 61 6c 20 74 65 73 74 3a 20  - Special test: 
45a0: 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 73 71  Make sure the sq
45b0: 6c 69 74 65 5f 72 65 6e 61 6d 65 5f 63 6f 6c 75  lite_rename_colu
45c0: 6d 6e 28 29 20 61 6e 64 0a 23 20 72 65 6e 61 6d  mn() and.# renam
45d0: 65 5f 74 61 62 6c 65 28 29 20 66 75 6e 63 74 69  e_table() functi
45e0: 6f 6e 73 20 64 6f 20 6e 6f 74 20 63 72 61 73 68  ons do not crash
45f0: 20 77 68 65 6e 20 68 61 6e 64 65 64 20 62 61 64   when handed bad
4600: 20 69 6e 70 75 74 2e 0a 23 0a 73 71 6c 69 74 65   input..#.sqlite
4610: 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 20 53  3_test_control S
4620: 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 49  QLITE_TESTCTRL_I
4630: 4e 54 45 52 4e 41 4c 5f 46 55 4e 43 54 49 4f 4e  NTERNAL_FUNCTION
4640: 53 20 31 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65  S 1.do_test alte
4650: 72 2d 39 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  r-9.1 {.  execsq
4660: 6c 20 7b 53 45 4c 45 43 54 20 53 51 4c 49 54 45  l {SELECT SQLITE
4670: 5f 52 45 4e 41 4d 45 5f 43 4f 4c 55 4d 4e 28 30  _RENAME_COLUMN(0
4680: 2c 30 2c 30 2c 30 2c 30 2c 30 2c 30 2c 30 2c 30  ,0,0,0,0,0,0,0,0
4690: 29 7d 0a 7d 20 7b 7b 7d 7d 0a 66 6f 72 65 61 63  )}.} {{}}.foreac
46a0: 68 20 7b 74 6e 20 73 71 6c 7d 20 7b 0a 20 20 20  h {tn sql} {.   
46b0: 20 31 20 7b 20 53 45 4c 45 43 54 20 53 51 4c 49   1 { SELECT SQLI
46c0: 54 45 5f 52 45 4e 41 4d 45 5f 54 41 42 4c 45 28  TE_RENAME_TABLE(
46d0: 30 2c 30 2c 30 2c 30 2c 30 2c 30 2c 30 29 20 7d  0,0,0,0,0,0,0) }
46e0: 0a 20 20 20 20 32 20 7b 20 53 45 4c 45 43 54 20  .    2 { SELECT 
46f0: 53 51 4c 49 54 45 5f 52 45 4e 41 4d 45 5f 54 41  SQLITE_RENAME_TA
4700: 42 4c 45 28 31 30 2c 32 30 2c 33 30 2c 34 30 2c  BLE(10,20,30,40,
4710: 35 30 2c 36 30 2c 37 30 29 20 7d 0a 20 20 20 20  50,60,70) }.    
4720: 33 20 7b 20 53 45 4c 45 43 54 20 53 51 4c 49 54  3 { SELECT SQLIT
4730: 45 5f 52 45 4e 41 4d 45 5f 54 41 42 4c 45 28 27  E_RENAME_TABLE('
4740: 66 6f 6f 27 2c 27 66 6f 6f 27 2c 27 66 6f 6f 27  foo','foo','foo'
4750: 2c 27 66 6f 6f 27 2c 27 66 6f 6f 27 2c 27 66 6f  ,'foo','foo','fo
4760: 6f 27 2c 27 66 6f 6f 27 29 20 7d 0a 7d 20 7b 0a  o','foo') }.} {.
4770: 20 20 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d    do_test alter-
4780: 39 2e 32 2e 24 74 6e 20 7b 0a 20 20 20 20 63 61  9.2.$tn {.    ca
4790: 74 63 68 20 7b 20 65 78 65 63 73 71 6c 20 24 73  tch { execsql $s
47a0: 71 6c 20 7d 0a 20 20 7d 20 31 0a 7d 0a 73 71 6c  ql }.  } 1.}.sql
47b0: 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f  ite3_test_contro
47c0: 6c 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52  l SQLITE_TESTCTR
47d0: 4c 5f 49 4e 54 45 52 4e 41 4c 5f 46 55 4e 43 54  L_INTERNAL_FUNCT
47e0: 49 4f 4e 53 20 30 0a 0a 23 20 49 66 20 74 68 65  IONS 0..# If the
47f0: 20 49 4e 54 45 52 4e 41 4c 5f 46 55 4e 43 54 49   INTERNAL_FUNCTI
4800: 4f 4e 53 20 74 65 73 74 2d 63 6f 6e 74 72 6f 6c  ONS test-control
4810: 20 69 73 20 64 69 73 61 62 6c 65 64 20 28 77 68   is disabled (wh
4820: 69 63 68 20 69 73 20 74 68 65 20 64 65 66 61 75  ich is the defau
4830: 6c 74 29 2c 0a 23 20 74 68 65 6e 20 74 68 65 20  lt),.# then the 
4840: 73 71 6c 69 74 65 5f 72 65 6e 61 6d 65 5f 74 61  sqlite_rename_ta
4850: 62 6c 65 28 29 20 53 51 4c 20 66 75 6e 63 74 69  ble() SQL functi
4860: 6f 6e 20 69 73 20 6e 6f 74 20 61 63 63 65 73 73  on is not access
4870: 69 62 6c 65 20 74 6f 20 6f 72 64 69 6e 61 72 79  ible to ordinary
4880: 20 53 51 4c 2e 0a 23 0a 64 6f 5f 63 61 74 63 68   SQL..#.do_catch
4890: 73 71 6c 5f 74 65 73 74 20 61 6c 74 65 72 2d 39  sql_test alter-9
48a0: 2e 33 20 7b 0a 20 20 53 45 4c 45 43 54 20 73 71  .3 {.  SELECT sq
48b0: 6c 69 74 65 5f 72 65 6e 61 6d 65 5f 74 61 62 6c  lite_rename_tabl
48c0: 65 28 30 2c 30 2c 30 2c 30 2c 30 2c 30 2c 30 29  e(0,0,0,0,0,0,0)
48d0: 3b 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20  ;.} {1 {no such 
48e0: 66 75 6e 63 74 69 6f 6e 3a 20 73 71 6c 69 74 65  function: sqlite
48f0: 5f 72 65 6e 61 6d 65 5f 74 61 62 6c 65 7d 7d 0a  _rename_table}}.
4900: 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .#--------------
4910: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4920: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4930: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4940: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 61 6c 74  ----------.# alt
4950: 65 72 2d 31 30 2e 58 20 2d 20 4d 61 6b 65 20 73  er-10.X - Make s
4960: 75 72 65 20 41 4c 54 45 52 20 54 41 42 4c 45 20  ure ALTER TABLE 
4970: 77 6f 72 6b 73 20 77 69 74 68 20 6d 75 6c 74 69  works with multi
4980: 2d 62 79 74 65 20 55 54 46 2d 38 20 63 68 61 72  -byte UTF-8 char
4990: 61 63 74 65 72 73 20 0a 23 20 69 6e 20 74 68 65  acters .# in the
49a0: 20 6e 61 6d 65 73 2e 0a 23 0a 64 6f 5f 74 65 73   names..#.do_tes
49b0: 74 20 61 6c 74 65 72 2d 31 30 2e 31 20 7b 0a 20  t alter-10.1 {. 
49c0: 20 65 78 65 63 73 71 6c 20 22 43 52 45 41 54 45   execsql "CREATE
49d0: 20 54 41 42 4c 45 20 78 79 7a 28 78 20 55 4e 49   TABLE xyz(x UNI
49e0: 51 55 45 29 22 0a 20 20 65 78 65 63 73 71 6c 20  QUE)".  execsql 
49f0: 22 41 4c 54 45 52 20 54 41 42 4c 45 20 78 79 7a  "ALTER TABLE xyz
4a00: 20 52 45 4e 41 4d 45 20 54 4f 20 78 79 7a 5c 75   RENAME TO xyz\u
4a10: 31 32 33 34 61 62 63 22 0a 20 20 65 78 65 63 73  1234abc".  execs
4a20: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
4a30: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
4a40: 65 72 20 57 48 45 52 45 20 6e 61 6d 65 20 47 4c  er WHERE name GL
4a50: 4f 42 20 27 78 79 7a 2a 27 7d 0a 7d 20 5b 6c 69  OB 'xyz*'}.} [li
4a60: 73 74 20 78 79 7a 5c 75 31 32 33 34 61 62 63 5d  st xyz\u1234abc]
4a70: 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 31  .do_test alter-1
4a80: 30 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  0.2 {.  execsql 
4a90: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
4aa0: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  M sqlite_master 
4ab0: 57 48 45 52 45 20 6e 61 6d 65 20 47 4c 4f 42 20  WHERE name GLOB 
4ac0: 27 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65  'sqlite_autoinde
4ad0: 78 2a 27 7d 0a 7d 20 5b 6c 69 73 74 20 73 71 6c  x*'}.} [list sql
4ae0: 69 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 78 79  ite_autoindex_xy
4af0: 7a 5c 75 31 32 33 34 61 62 63 5f 31 5d 0a 64 6f  z\u1234abc_1].do
4b00: 5f 74 65 73 74 20 61 6c 74 65 72 2d 31 30 2e 33  _test alter-10.3
4b10: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 22 41 4c   {.  execsql "AL
4b20: 54 45 52 20 54 41 42 4c 45 20 78 79 7a 5c 75 31  TER TABLE xyz\u1
4b30: 32 33 34 61 62 63 20 52 45 4e 41 4d 45 20 54 4f  234abc RENAME TO
4b40: 20 78 79 7a 61 62 63 22 0a 20 20 65 78 65 63 73   xyzabc".  execs
4b50: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
4b60: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
4b70: 65 72 20 57 48 45 52 45 20 6e 61 6d 65 20 47 4c  er WHERE name GL
4b80: 4f 42 20 27 78 79 7a 2a 27 7d 0a 7d 20 5b 6c 69  OB 'xyz*'}.} [li
4b90: 73 74 20 78 79 7a 61 62 63 5d 0a 64 6f 5f 74 65  st xyzabc].do_te
4ba0: 73 74 20 61 6c 74 65 72 2d 31 30 2e 34 20 7b 0a  st alter-10.4 {.
4bb0: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
4bc0: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
4bd0: 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20  te_master WHERE 
4be0: 6e 61 6d 65 20 47 4c 4f 42 20 27 73 71 6c 69 74  name GLOB 'sqlit
4bf0: 65 5f 61 75 74 6f 69 6e 64 65 78 2a 27 7d 0a 7d  e_autoindex*'}.}
4c00: 20 5b 6c 69 73 74 20 73 71 6c 69 74 65 5f 61 75   [list sqlite_au
4c10: 74 6f 69 6e 64 65 78 5f 78 79 7a 61 62 63 5f 31  toindex_xyzabc_1
4c20: 5d 0a 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72  ]..do_test alter
4c30: 2d 31 31 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65  -11.1 {.  sqlite
4c40: 33 5f 65 78 65 63 20 64 62 20 7b 43 52 45 41 54  3_exec db {CREAT
4c50: 45 20 54 41 42 4c 45 20 74 31 31 28 25 63 36 25  E TABLE t11(%c6%
4c60: 63 36 29 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b  c6)}.  execsql {
4c70: 0a 20 20 20 20 41 4c 54 45 52 20 54 41 42 4c 45  .    ALTER TABLE
4c80: 20 74 31 31 20 41 44 44 20 43 4f 4c 55 4d 4e 20   t11 ADD COLUMN 
4c90: 61 62 63 3b 0a 20 20 7d 0a 20 20 63 61 74 63 68  abc;.  }.  catch
4ca0: 73 71 6c 20 7b 0a 20 20 20 20 41 4c 54 45 52 20  sql {.    ALTER 
4cb0: 54 41 42 4c 45 20 74 31 31 20 41 44 44 20 43 4f  TABLE t11 ADD CO
4cc0: 4c 55 4d 4e 20 61 62 63 3b 0a 20 20 7d 0a 7d 20  LUMN abc;.  }.} 
4cd0: 7b 31 20 7b 64 75 70 6c 69 63 61 74 65 20 63 6f  {1 {duplicate co
4ce0: 6c 75 6d 6e 20 6e 61 6d 65 3a 20 61 62 63 7d 7d  lumn name: abc}}
4cf0: 0a 73 65 74 20 69 73 75 74 66 31 36 20 5b 72 65  .set isutf16 [re
4d00: 67 65 78 70 20 31 36 20 5b 64 62 20 6f 6e 65 20  gexp 16 [db one 
4d10: 7b 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67  {PRAGMA encoding
4d20: 7d 5d 5d 0a 69 66 20 7b 21 24 69 73 75 74 66 31  }]].if {!$isutf1
4d30: 36 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 61  6} {.  do_test a
4d40: 6c 74 65 72 2d 31 31 2e 32 20 7b 0a 20 20 20 20  lter-11.2 {.    
4d50: 65 78 65 63 73 71 6c 20 7b 49 4e 53 45 52 54 20  execsql {INSERT 
4d60: 49 4e 54 4f 20 74 31 31 20 56 41 4c 55 45 53 28  INTO t11 VALUES(
4d70: 31 2c 32 29 7d 0a 20 20 20 20 73 71 6c 69 74 65  1,2)}.    sqlite
4d80: 33 5f 65 78 65 63 20 64 62 20 7b 53 45 4c 45 43  3_exec db {SELEC
4d90: 54 20 25 63 36 25 63 36 20 41 53 20 78 79 7a 2c  T %c6%c6 AS xyz,
4da0: 20 61 62 63 20 46 52 4f 4d 20 74 31 31 7d 0a 20   abc FROM t11}. 
4db0: 20 7d 20 7b 30 20 7b 78 79 7a 20 61 62 63 20 31   } {0 {xyz abc 1
4dc0: 20 32 7d 7d 0a 7d 0a 64 6f 5f 74 65 73 74 20 61   2}}.}.do_test a
4dd0: 6c 74 65 72 2d 31 31 2e 33 20 7b 0a 20 20 73 71  lter-11.3 {.  sq
4de0: 6c 69 74 65 33 5f 65 78 65 63 20 64 62 20 7b 43  lite3_exec db {C
4df0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 31 62  REATE TABLE t11b
4e00: 28 22 25 38 31 25 38 32 25 38 33 22 20 74 65 78  ("%81%82%83" tex
4e10: 74 29 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  t)}.  execsql {.
4e20: 20 20 20 20 41 4c 54 45 52 20 54 41 42 4c 45 20      ALTER TABLE 
4e30: 74 31 31 62 20 41 44 44 20 43 4f 4c 55 4d 4e 20  t11b ADD COLUMN 
4e40: 61 62 63 3b 0a 20 20 7d 0a 20 20 63 61 74 63 68  abc;.  }.  catch
4e50: 73 71 6c 20 7b 0a 20 20 20 20 41 4c 54 45 52 20  sql {.    ALTER 
4e60: 54 41 42 4c 45 20 74 31 31 62 20 41 44 44 20 43  TABLE t11b ADD C
4e70: 4f 4c 55 4d 4e 20 61 62 63 3b 0a 20 20 7d 0a 7d  OLUMN abc;.  }.}
4e80: 20 7b 31 20 7b 64 75 70 6c 69 63 61 74 65 20 63   {1 {duplicate c
4e90: 6f 6c 75 6d 6e 20 6e 61 6d 65 3a 20 61 62 63 7d  olumn name: abc}
4ea0: 7d 0a 69 66 20 7b 21 24 69 73 75 74 66 31 36 7d  }.if {!$isutf16}
4eb0: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 61 6c 74   {.  do_test alt
4ec0: 65 72 2d 31 31 2e 34 20 7b 0a 20 20 20 20 65 78  er-11.4 {.    ex
4ed0: 65 63 73 71 6c 20 7b 49 4e 53 45 52 54 20 49 4e  ecsql {INSERT IN
4ee0: 54 4f 20 74 31 31 62 20 56 41 4c 55 45 53 28 33  TO t11b VALUES(3
4ef0: 2c 34 29 7d 0a 20 20 20 20 73 71 6c 69 74 65 33  ,4)}.    sqlite3
4f00: 5f 65 78 65 63 20 64 62 20 7b 53 45 4c 45 43 54  _exec db {SELECT
4f10: 20 25 38 31 25 38 32 25 38 33 20 41 53 20 78 79   %81%82%83 AS xy
4f20: 7a 2c 20 61 62 63 20 46 52 4f 4d 20 74 31 31 62  z, abc FROM t11b
4f30: 7d 0a 20 20 7d 20 7b 30 20 7b 78 79 7a 20 61 62  }.  } {0 {xyz ab
4f40: 63 20 33 20 34 7d 7d 0a 20 20 64 6f 5f 74 65 73  c 3 4}}.  do_tes
4f50: 74 20 61 6c 74 65 72 2d 31 31 2e 35 20 7b 0a 20  t alter-11.5 {. 
4f60: 20 20 20 73 71 6c 69 74 65 33 5f 65 78 65 63 20     sqlite3_exec 
4f70: 64 62 20 7b 53 45 4c 45 43 54 20 5b 25 38 31 25  db {SELECT [%81%
4f80: 38 32 25 38 33 5d 20 41 53 20 78 79 7a 2c 20 61  82%83] AS xyz, a
4f90: 62 63 20 46 52 4f 4d 20 74 31 31 62 7d 0a 20 20  bc FROM t11b}.  
4fa0: 7d 20 7b 30 20 7b 78 79 7a 20 61 62 63 20 33 20  } {0 {xyz abc 3 
4fb0: 34 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 6c  4}}.  do_test al
4fc0: 74 65 72 2d 31 31 2e 36 20 7b 0a 20 20 20 20 73  ter-11.6 {.    s
4fd0: 71 6c 69 74 65 33 5f 65 78 65 63 20 64 62 20 7b  qlite3_exec db {
4fe0: 53 45 4c 45 43 54 20 22 25 38 31 25 38 32 25 38  SELECT "%81%82%8
4ff0: 33 22 20 41 53 20 78 79 7a 2c 20 61 62 63 20 46  3" AS xyz, abc F
5000: 52 4f 4d 20 74 31 31 62 7d 0a 20 20 7d 20 7b 30  ROM t11b}.  } {0
5010: 20 7b 78 79 7a 20 61 62 63 20 33 20 34 7d 7d 0a   {xyz abc 3 4}}.
5020: 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d  }.do_test alter-
5030: 31 31 2e 37 20 7b 0a 20 20 73 71 6c 69 74 65 33  11.7 {.  sqlite3
5040: 5f 65 78 65 63 20 64 62 20 7b 43 52 45 41 54 45  _exec db {CREATE
5050: 20 54 41 42 4c 45 20 74 31 31 63 28 25 38 31 25   TABLE t11c(%81%
5060: 38 32 25 38 33 20 74 65 78 74 29 7d 0a 20 20 65  82%83 text)}.  e
5070: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 41 4c 54  xecsql {.    ALT
5080: 45 52 20 54 41 42 4c 45 20 74 31 31 63 20 41 44  ER TABLE t11c AD
5090: 44 20 43 4f 4c 55 4d 4e 20 61 62 63 3b 0a 20 20  D COLUMN abc;.  
50a0: 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  }.  catchsql {. 
50b0: 20 20 20 41 4c 54 45 52 20 54 41 42 4c 45 20 74     ALTER TABLE t
50c0: 31 31 63 20 41 44 44 20 43 4f 4c 55 4d 4e 20 61  11c ADD COLUMN a
50d0: 62 63 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 64 75  bc;.  }.} {1 {du
50e0: 70 6c 69 63 61 74 65 20 63 6f 6c 75 6d 6e 20 6e  plicate column n
50f0: 61 6d 65 3a 20 61 62 63 7d 7d 0a 69 66 20 7b 21  ame: abc}}.if {!
5100: 24 69 73 75 74 66 31 36 7d 20 7b 0a 20 20 64 6f  $isutf16} {.  do
5110: 5f 74 65 73 74 20 61 6c 74 65 72 2d 31 31 2e 38  _test alter-11.8
5120: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
5130: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 31 63  INSERT INTO t11c
5140: 20 56 41 4c 55 45 53 28 35 2c 36 29 7d 0a 20 20   VALUES(5,6)}.  
5150: 20 20 73 71 6c 69 74 65 33 5f 65 78 65 63 20 64    sqlite3_exec d
5160: 62 20 7b 53 45 4c 45 43 54 20 25 38 31 25 38 32  b {SELECT %81%82
5170: 25 38 33 20 41 53 20 78 79 7a 2c 20 61 62 63 20  %83 AS xyz, abc 
5180: 46 52 4f 4d 20 74 31 31 63 7d 0a 20 20 7d 20 7b  FROM t11c}.  } {
5190: 30 20 7b 78 79 7a 20 61 62 63 20 35 20 36 7d 7d  0 {xyz abc 5 6}}
51a0: 0a 20 20 64 6f 5f 74 65 73 74 20 61 6c 74 65 72  .  do_test alter
51b0: 2d 31 31 2e 39 20 7b 0a 20 20 20 20 73 71 6c 69  -11.9 {.    sqli
51c0: 74 65 33 5f 65 78 65 63 20 64 62 20 7b 53 45 4c  te3_exec db {SEL
51d0: 45 43 54 20 5b 25 38 31 25 38 32 25 38 33 5d 20  ECT [%81%82%83] 
51e0: 41 53 20 78 79 7a 2c 20 61 62 63 20 46 52 4f 4d  AS xyz, abc FROM
51f0: 20 74 31 31 63 7d 0a 20 20 7d 20 7b 30 20 7b 78   t11c}.  } {0 {x
5200: 79 7a 20 61 62 63 20 35 20 36 7d 7d 0a 20 20 64  yz abc 5 6}}.  d
5210: 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 31 31 2e  o_test alter-11.
5220: 31 30 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  10 {.    sqlite3
5230: 5f 65 78 65 63 20 64 62 20 7b 53 45 4c 45 43 54  _exec db {SELECT
5240: 20 22 25 38 31 25 38 32 25 38 33 22 20 41 53 20   "%81%82%83" AS 
5250: 78 79 7a 2c 20 61 62 63 20 46 52 4f 4d 20 74 31  xyz, abc FROM t1
5260: 31 63 7d 0a 20 20 7d 20 7b 30 20 7b 78 79 7a 20  1c}.  } {0 {xyz 
5270: 61 62 63 20 35 20 36 7d 7d 0a 7d 0a 0a 64 6f 5f  abc 5 6}}.}..do_
5280: 74 65 73 74 20 61 6c 74 65 72 2d 31 32 2e 31 20  test alter-12.1 
5290: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
52a0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
52b0: 31 32 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20  12(a, b, c);.   
52c0: 20 43 52 45 41 54 45 20 56 49 45 57 20 76 31 20   CREATE VIEW v1 
52d0: 41 53 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  AS SELECT * FROM
52e0: 20 74 31 32 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64   t12;.  }.} {}.d
52f0: 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 31 32 2e  o_test alter-12.
5300: 32 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  2 {.  catchsql {
5310: 0a 20 20 20 20 41 4c 54 45 52 20 54 41 42 4c 45  .    ALTER TABLE
5320: 20 76 31 20 52 45 4e 41 4d 45 20 54 4f 20 76 32   v1 RENAME TO v2
5330: 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 76 69 65 77  ;.  }.} {1 {view
5340: 20 76 31 20 6d 61 79 20 6e 6f 74 20 62 65 20 61   v1 may not be a
5350: 6c 74 65 72 65 64 7d 7d 0a 64 6f 5f 74 65 73 74  ltered}}.do_test
5360: 20 61 6c 74 65 72 2d 31 32 2e 33 20 7b 0a 20 20   alter-12.3 {.  
5370: 65 78 65 63 73 71 6c 20 7b 20 53 45 4c 45 43 54  execsql { SELECT
5380: 20 2a 20 46 52 4f 4d 20 76 31 3b 20 7d 0a 7d 20   * FROM v1; }.} 
5390: 7b 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72  {}.do_test alter
53a0: 2d 31 32 2e 34 20 7b 0a 20 20 64 62 20 63 6c 6f  -12.4 {.  db clo
53b0: 73 65 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20  se.  sqlite3 db 
53c0: 74 65 73 74 2e 64 62 0a 20 20 65 78 65 63 73 71  test.db.  execsq
53d0: 6c 20 7b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f  l { SELECT * FRO
53e0: 4d 20 76 31 3b 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f  M v1; }.} {}.do_
53f0: 74 65 73 74 20 61 6c 74 65 72 2d 31 32 2e 35 20  test alter-12.5 
5400: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 20 0a  {.  catchsql { .
5410: 20 20 20 20 41 4c 54 45 52 20 54 41 42 4c 45 20      ALTER TABLE 
5420: 76 31 20 41 44 44 20 43 4f 4c 55 4d 4e 20 6e 65  v1 ADD COLUMN ne
5430: 77 5f 63 6f 6c 75 6d 6e 3b 0a 20 20 7d 0a 7d 20  w_column;.  }.} 
5440: 7b 31 20 7b 43 61 6e 6e 6f 74 20 61 64 64 20 61  {1 {Cannot add a
5450: 20 63 6f 6c 75 6d 6e 20 74 6f 20 61 20 76 69 65   column to a vie
5460: 77 7d 7d 0a 0a 23 20 54 69 63 6b 65 74 20 23 33  w}}..# Ticket #3
5470: 31 30 32 3a 0a 23 20 56 65 72 69 66 79 20 74 68  102:.# Verify th
5480: 61 74 20 63 6f 6d 6d 65 6e 74 73 20 64 6f 20 6e  at comments do n
5490: 6f 74 20 69 6e 74 65 72 66 65 72 65 20 77 69 74  ot interfere wit
54a0: 68 20 74 68 65 20 74 61 62 6c 65 20 72 65 6e 61  h the table rena
54b0: 6d 65 0a 23 20 61 6c 67 6f 72 69 74 68 6d 2e 0a  me.# algorithm..
54c0: 23 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d  #.do_test alter-
54d0: 31 33 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  13.1 {.  execsql
54e0: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41   {.    CREATE TA
54f0: 42 4c 45 20 2f 2a 20 68 69 20 2a 2f 20 74 33 31  BLE /* hi */ t31
5500: 30 32 61 28 78 29 3b 0a 20 20 20 20 43 52 45 41  02a(x);.    CREA
5510: 54 45 20 54 41 42 4c 45 20 74 33 31 30 32 62 20  TE TABLE t3102b 
5520: 2d 2d 20 63 6f 6d 6d 65 6e 74 0a 20 20 20 20 28  -- comment.    (
5530: 79 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 49  y);.    CREATE I
5540: 4e 44 45 58 20 74 33 31 30 32 63 20 4f 4e 20 74  NDEX t3102c ON t
5550: 33 31 30 32 61 28 78 29 3b 0a 20 20 20 20 53 45  3102a(x);.    SE
5560: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73  LECT name FROM s
5570: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45  qlite_master WHE
5580: 52 45 20 6e 61 6d 65 20 47 4c 4f 42 20 27 74 33  RE name GLOB 't3
5590: 31 30 32 2a 27 20 4f 52 44 45 52 20 42 59 20 31  102*' ORDER BY 1
55a0: 3b 0a 20 20 7d 0a 7d 20 7b 74 33 31 30 32 61 20  ;.  }.} {t3102a 
55b0: 74 33 31 30 32 62 20 74 33 31 30 32 63 7d 0a 64  t3102b t3102c}.d
55c0: 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 31 33 2e  o_test alter-13.
55d0: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  2 {.  execsql {.
55e0: 20 20 20 20 41 4c 54 45 52 20 54 41 42 4c 45 20      ALTER TABLE 
55f0: 74 33 31 30 32 61 20 52 45 4e 41 4d 45 20 54 4f  t3102a RENAME TO
5600: 20 74 33 31 30 32 61 5f 72 65 6e 61 6d 65 3b 0a   t3102a_rename;.
5610: 20 20 20 20 53 45 4c 45 43 54 20 6e 61 6d 65 20      SELECT name 
5620: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
5630: 65 72 20 57 48 45 52 45 20 6e 61 6d 65 20 47 4c  er WHERE name GL
5640: 4f 42 20 27 74 33 31 30 32 2a 27 20 4f 52 44 45  OB 't3102*' ORDE
5650: 52 20 42 59 20 31 3b 0a 20 20 7d 0a 7d 20 7b 74  R BY 1;.  }.} {t
5660: 33 31 30 32 61 5f 72 65 6e 61 6d 65 20 74 33 31  3102a_rename t31
5670: 30 32 62 20 74 33 31 30 32 63 7d 0a 64 6f 5f 74  02b t3102c}.do_t
5680: 65 73 74 20 61 6c 74 65 72 2d 31 33 2e 33 20 7b  est alter-13.3 {
5690: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
56a0: 20 41 4c 54 45 52 20 54 41 42 4c 45 20 74 33 31   ALTER TABLE t31
56b0: 30 32 62 20 52 45 4e 41 4d 45 20 54 4f 20 74 33  02b RENAME TO t3
56c0: 31 30 32 62 5f 72 65 6e 61 6d 65 3b 0a 20 20 20  102b_rename;.   
56d0: 20 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f   SELECT name FRO
56e0: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  M sqlite_master 
56f0: 57 48 45 52 45 20 6e 61 6d 65 20 47 4c 4f 42 20  WHERE name GLOB 
5700: 27 74 33 31 30 32 2a 27 20 4f 52 44 45 52 20 42  't3102*' ORDER B
5710: 59 20 31 3b 0a 20 20 7d 0a 7d 20 7b 74 33 31 30  Y 1;.  }.} {t310
5720: 32 61 5f 72 65 6e 61 6d 65 20 74 33 31 30 32 62  2a_rename t3102b
5730: 5f 72 65 6e 61 6d 65 20 74 33 31 30 32 63 7d 0a  _rename t3102c}.
5740: 0a 23 20 54 69 63 6b 65 74 20 23 33 36 35 31 0a  .# Ticket #3651.
5750: 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 31 34  do_test alter-14
5760: 2e 31 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  .1 {.  catchsql 
5770: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  {.    CREATE TAB
5780: 4c 45 20 74 33 36 35 31 28 61 20 55 4e 49 51 55  LE t3651(a UNIQU
5790: 45 29 3b 0a 20 20 20 20 41 4c 54 45 52 20 54 41  E);.    ALTER TA
57a0: 42 4c 45 20 74 33 36 35 31 20 41 44 44 20 43 4f  BLE t3651 ADD CO
57b0: 4c 55 4d 4e 20 62 20 55 4e 49 51 55 45 3b 0a 20  LUMN b UNIQUE;. 
57c0: 20 7d 0a 7d 20 7b 31 20 7b 43 61 6e 6e 6f 74 20   }.} {1 {Cannot 
57d0: 61 64 64 20 61 20 55 4e 49 51 55 45 20 63 6f 6c  add a UNIQUE col
57e0: 75 6d 6e 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 6c  umn}}.do_test al
57f0: 74 65 72 2d 31 34 2e 32 20 7b 0a 20 20 63 61 74  ter-14.2 {.  cat
5800: 63 68 73 71 6c 20 7b 0a 20 20 20 20 41 4c 54 45  chsql {.    ALTE
5810: 52 20 54 41 42 4c 45 20 74 33 36 35 31 20 41 44  R TABLE t3651 AD
5820: 44 20 43 4f 4c 55 4d 4e 20 62 20 50 52 49 4d 41  D COLUMN b PRIMA
5830: 52 59 20 4b 45 59 3b 0a 20 20 7d 0a 7d 20 7b 31  RY KEY;.  }.} {1
5840: 20 7b 43 61 6e 6e 6f 74 20 61 64 64 20 61 20 50   {Cannot add a P
5850: 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d  RIMARY KEY colum
5860: 6e 7d 7d 0a 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d  n}}...#---------
5870: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5880: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5890: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
58a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
58b0: 0a 23 20 54 65 73 74 20 74 68 61 74 20 69 74 20  .# Test that it 
58c0: 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20  is not possible 
58d0: 74 6f 20 75 73 65 20 41 4c 54 45 52 20 54 41 42  to use ALTER TAB
58e0: 4c 45 20 6f 6e 20 61 6e 79 20 73 79 73 74 65 6d  LE on any system
58f0: 20 74 61 62 6c 65 2e 0a 23 0a 73 65 74 20 73 79   table..#.set sy
5900: 73 74 65 6d 5f 74 61 62 6c 65 5f 6c 69 73 74 20  stem_table_list 
5910: 7b 31 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  {1 sqlite_master
5920: 7d 0a 63 61 74 63 68 73 71 6c 20 41 4e 41 4c 59  }.catchsql ANALY
5930: 5a 45 0a 69 66 63 61 70 61 62 6c 65 20 61 6e 61  ZE.ifcapable ana
5940: 6c 79 7a 65 20 7b 20 6c 61 70 70 65 6e 64 20 73  lyze { lappend s
5950: 79 73 74 65 6d 5f 74 61 62 6c 65 5f 6c 69 73 74  ystem_table_list
5960: 20 32 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20   2 sqlite_stat1 
5970: 7d 0a 69 66 63 61 70 61 62 6c 65 20 73 74 61 74  }.ifcapable stat
5980: 33 20 20 20 7b 20 6c 61 70 70 65 6e 64 20 73 79  3   { lappend sy
5990: 73 74 65 6d 5f 74 61 62 6c 65 5f 6c 69 73 74 20  stem_table_list 
59a0: 33 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 7d  3 sqlite_stat3 }
59b0: 0a 69 66 63 61 70 61 62 6c 65 20 73 74 61 74 34  .ifcapable stat4
59c0: 20 20 20 7b 20 6c 61 70 70 65 6e 64 20 73 79 73     { lappend sys
59d0: 74 65 6d 5f 74 61 62 6c 65 5f 6c 69 73 74 20 34  tem_table_list 4
59e0: 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20 7d 0a   sqlite_stat4 }.
59f0: 0a 66 6f 72 65 61 63 68 20 7b 74 6e 20 74 62 6c  .foreach {tn tbl
5a00: 7d 20 24 73 79 73 74 65 6d 5f 74 61 62 6c 65 5f  } $system_table_
5a10: 6c 69 73 74 20 7b 0a 20 20 64 6f 5f 74 65 73 74  list {.  do_test
5a20: 20 61 6c 74 65 72 2d 31 35 2e 24 74 6e 2e 31 20   alter-15.$tn.1 
5a30: 7b 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 22  {.    catchsql "
5a40: 41 4c 54 45 52 20 54 41 42 4c 45 20 24 74 62 6c  ALTER TABLE $tbl
5a50: 20 52 45 4e 41 4d 45 20 54 4f 20 78 79 7a 22 0a   RENAME TO xyz".
5a60: 20 20 7d 20 5b 6c 69 73 74 20 31 20 22 74 61 62    } [list 1 "tab
5a70: 6c 65 20 24 74 62 6c 20 6d 61 79 20 6e 6f 74 20  le $tbl may not 
5a80: 62 65 20 61 6c 74 65 72 65 64 22 5d 0a 0a 20 20  be altered"]..  
5a90: 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 31 35  do_test alter-15
5aa0: 2e 24 74 6e 2e 32 20 7b 0a 20 20 20 20 63 61 74  .$tn.2 {.    cat
5ab0: 63 68 73 71 6c 20 22 41 4c 54 45 52 20 54 41 42  chsql "ALTER TAB
5ac0: 4c 45 20 24 74 62 6c 20 41 44 44 20 43 4f 4c 55  LE $tbl ADD COLU
5ad0: 4d 4e 20 78 79 7a 22 0a 20 20 7d 20 5b 6c 69 73  MN xyz".  } [lis
5ae0: 74 20 31 20 22 74 61 62 6c 65 20 24 74 62 6c 20  t 1 "table $tbl 
5af0: 6d 61 79 20 6e 6f 74 20 62 65 20 61 6c 74 65 72  may not be alter
5b00: 65 64 22 5d 0a 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d  ed"].}..#-------
5b10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5b20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5b30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5b40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5b50: 2d 0a 23 20 56 65 72 69 66 79 20 74 68 61 74 20  -.# Verify that 
5b60: 41 4c 54 45 52 20 54 41 42 4c 45 20 77 6f 72 6b  ALTER TABLE work
5b70: 73 20 6f 6e 20 74 61 62 6c 65 73 20 77 69 74 68  s on tables with
5b80: 20 74 68 65 20 57 49 54 48 4f 55 54 20 72 6f 77   the WITHOUT row
5b90: 69 64 20 6f 70 74 69 6f 6e 2e 0a 23 0a 64 6f 5f  id option..#.do_
5ba0: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 61 6c 74  execsql_test alt
5bb0: 65 72 2d 31 36 2e 31 20 7b 0a 20 20 43 52 45 41  er-16.1 {.  CREA
5bc0: 54 45 20 54 41 42 4c 45 20 74 31 36 61 28 61 20  TE TABLE t16a(a 
5bd0: 54 45 58 54 2c 20 62 20 52 45 41 4c 2c 20 63 20  TEXT, b REAL, c 
5be0: 49 4e 54 2c 20 50 52 49 4d 41 52 59 20 4b 45 59  INT, PRIMARY KEY
5bf0: 28 61 2c 62 29 29 20 57 49 54 48 4f 55 54 20 72  (a,b)) WITHOUT r
5c00: 6f 77 69 64 3b 0a 20 20 49 4e 53 45 52 54 20 49  owid;.  INSERT I
5c10: 4e 54 4f 20 74 31 36 61 20 56 41 4c 55 45 53 28  NTO t16a VALUES(
5c20: 27 61 62 63 27 2c 31 2e 32 35 2c 39 39 29 3b 0a  'abc',1.25,99);.
5c30: 20 20 41 4c 54 45 52 20 54 41 42 4c 45 20 74 31    ALTER TABLE t1
5c40: 36 61 20 41 44 44 20 43 4f 4c 55 4d 4e 20 64 20  6a ADD COLUMN d 
5c50: 54 45 58 54 20 44 45 46 41 55 4c 54 20 27 78 79  TEXT DEFAULT 'xy
5c60: 7a 7a 79 27 3b 0a 20 20 49 4e 53 45 52 54 20 49  zzy';.  INSERT I
5c70: 4e 54 4f 20 74 31 36 61 20 56 41 4c 55 45 53 28  NTO t16a VALUES(
5c80: 27 63 62 61 27 2c 35 2e 35 2c 39 38 2c 27 66 69  'cba',5.5,98,'fi
5c90: 7a 7a 6c 65 27 29 3b 0a 20 20 53 45 4c 45 43 54  zzle');.  SELECT
5ca0: 20 2a 20 46 52 4f 4d 20 74 31 36 61 20 4f 52 44   * FROM t16a ORD
5cb0: 45 52 20 42 59 20 61 3b 0a 7d 20 7b 61 62 63 20  ER BY a;.} {abc 
5cc0: 31 2e 32 35 20 39 39 20 78 79 7a 7a 79 20 63 62  1.25 99 xyzzy cb
5cd0: 61 20 35 2e 35 20 39 38 20 66 69 7a 7a 6c 65 7d  a 5.5 98 fizzle}
5ce0: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
5cf0: 20 61 6c 74 65 72 2d 31 36 2e 32 20 7b 0a 20 20   alter-16.2 {.  
5d00: 41 4c 54 45 52 20 54 41 42 4c 45 20 74 31 36 61  ALTER TABLE t16a
5d10: 20 52 45 4e 41 4d 45 20 54 4f 20 74 31 36 61 5f   RENAME TO t16a_
5d20: 72 6e 3b 0a 20 20 53 45 4c 45 43 54 20 2a 20 46  rn;.  SELECT * F
5d30: 52 4f 4d 20 74 31 36 61 5f 72 6e 20 4f 52 44 45  ROM t16a_rn ORDE
5d40: 52 20 42 59 20 61 3b 0a 7d 20 7b 61 62 63 20 31  R BY a;.} {abc 1
5d50: 2e 32 35 20 39 39 20 78 79 7a 7a 79 20 63 62 61  .25 99 xyzzy cba
5d60: 20 35 2e 35 20 39 38 20 66 69 7a 7a 6c 65 7d 0a   5.5 98 fizzle}.
5d70: 0a 23 20 32 30 31 38 2d 30 39 2d 31 36 20 74 69  .# 2018-09-16 ti
5d80: 63 6b 65 74 20 62 34 31 30 33 31 65 61 32 62 35  cket b41031ea2b5
5d90: 33 37 32 33 37 38 63 62 33 64 32 64 34 33 63 66  372378cb3d2d43cf
5da0: 39 66 65 32 61 34 61 35 63 32 35 31 30 0a 23 0a  9fe2a4a5c2510.#.
5db0: 69 66 63 61 70 61 62 6c 65 20 72 74 72 65 65 20  ifcapable rtree 
5dc0: 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 73  {.  db close.  s
5dd0: 71 6c 69 74 65 33 20 64 62 20 3a 6d 65 6d 6f 72  qlite3 db :memor
5de0: 79 3a 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f  y:.  do_execsql_
5df0: 74 65 73 74 20 61 6c 74 65 72 2d 31 37 2e 31 30  test alter-17.10
5e00: 30 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  0 {.    CREATE T
5e10: 41 42 4c 45 20 74 31 28 61 20 49 4e 54 45 47 45  ABLE t1(a INTEGE
5e20: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 62  R PRIMARY KEY, b
5e30: 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 56 49  );.    CREATE VI
5e40: 52 54 55 41 4c 20 54 41 42 4c 45 20 74 32 20 55  RTUAL TABLE t2 U
5e50: 53 49 4e 47 20 72 74 72 65 65 28 69 64 2c 78 30  SING rtree(id,x0
5e60: 2c 78 31 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  ,x1);.    INSERT
5e70: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
5e80: 31 2c 27 61 70 70 6c 65 27 29 2c 28 32 2c 27 66  1,'apple'),(2,'f
5e90: 69 67 27 29 2c 28 33 2c 27 70 65 61 72 27 29 3b  ig'),(3,'pear');
5ea0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
5eb0: 20 74 32 20 56 41 4c 55 45 53 28 31 2c 31 2e 30   t2 VALUES(1,1.0
5ec0: 2c 32 2e 30 29 2c 28 32 2c 32 2e 30 2c 33 2e 30  ,2.0),(2,2.0,3.0
5ed0: 29 2c 28 33 2c 31 2e 35 2c 33 2e 35 29 3b 0a 20  ),(3,1.5,3.5);. 
5ee0: 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45     CREATE TRIGGE
5ef0: 52 20 72 31 20 41 46 54 45 52 20 55 50 44 41 54  R r1 AFTER UPDAT
5f00: 45 20 4f 4e 20 74 31 20 42 45 47 49 4e 0a 20 20  E ON t1 BEGIN.  
5f10: 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20      DELETE FROM 
5f20: 74 32 20 57 48 45 52 45 20 69 64 20 3d 20 4f 4c  t2 WHERE id = OL
5f30: 44 2e 61 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20  D.a;.    END;.  
5f40: 20 20 41 4c 54 45 52 20 54 41 42 4c 45 20 74 31    ALTER TABLE t1
5f50: 20 52 45 4e 41 4d 45 20 54 4f 20 74 33 3b 0a 20   RENAME TO t3;. 
5f60: 20 20 20 55 50 44 41 54 45 20 74 33 20 53 45 54     UPDATE t3 SET
5f70: 20 62 3d 27 70 65 61 63 68 27 20 57 48 45 52 45   b='peach' WHERE
5f80: 20 61 3d 32 3b 0a 20 20 20 20 53 45 4c 45 43 54   a=2;.    SELECT
5f90: 20 2a 20 46 52 4f 4d 20 74 32 20 4f 52 44 45 52   * FROM t2 ORDER
5fa0: 20 42 59 20 31 3b 0a 20 20 7d 20 7b 31 20 31 2e   BY 1;.  } {1 1.
5fb0: 30 20 32 2e 30 20 33 20 31 2e 35 20 33 2e 35 7d  0 2.0 3 1.5 3.5}
5fc0: 0a 7d 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a  .}..finish_test.