/ Hex Artifact Content
Login

Artifact c2a9402e17a731e5294ef370214bd9f88351d18d:


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 32 35 20 32 30 30 37 2f 30 35 2f 31 35 20 31  .25 2007/05/15 1
0210: 36 3a 35 31 3a 33 37 20 64 72 68 20 45 78 70 20  6:51:37 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 0a 0a 23 20 43 72 65 61 74 65 20 73 6f 6d 65  #..# Create some
05d0: 20 74 61 62 6c 65 73 20 74 6f 20 72 65 6e 61 6d   tables to renam
05e0: 65 2e 20 20 42 65 20 73 75 72 65 20 74 6f 20 69  e.  Be sure to i
05f0: 6e 63 6c 75 64 65 20 73 6f 6d 65 20 54 45 4d 50  nclude some TEMP
0600: 20 74 61 62 6c 65 73 0a 23 20 61 6e 64 20 73 6f   tables.# and so
0610: 6d 65 20 74 61 62 6c 65 73 20 77 69 74 68 20 6f  me tables with o
0620: 64 64 20 6e 61 6d 65 73 2e 0a 23 0a 64 6f 5f 74  dd names..#.do_t
0630: 65 73 74 20 61 6c 74 65 72 2d 31 2e 31 20 7b 0a  est alter-1.1 {.
0640: 20 20 69 66 63 61 70 61 62 6c 65 20 74 65 6d 70    ifcapable temp
0650: 64 62 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a 74  db {.    set ::t
0660: 65 6d 70 20 54 45 4d 50 0a 20 20 7d 20 65 6c 73  emp TEMP.  } els
0670: 65 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a 74 65  e {.    set ::te
0680: 6d 70 20 7b 7d 0a 20 20 7d 0a 20 20 65 78 65 63  mp {}.  }.  exec
0690: 73 71 6c 20 5b 73 75 62 73 74 20 2d 6e 6f 63 6f  sql [subst -noco
06a0: 6d 6d 61 6e 64 73 20 7b 0a 20 20 20 20 43 52 45  mmands {.    CRE
06b0: 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c 62  ATE TABLE t1(a,b
06c0: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
06d0: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31 2c 32  TO t1 VALUES(1,2
06e0: 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41  );.    CREATE TA
06f0: 42 4c 45 20 5b 74 31 27 78 31 5d 28 63 20 55 4e  BLE [t1'x1](c UN
0700: 49 51 55 45 2c 20 62 20 50 52 49 4d 41 52 59 20  IQUE, b PRIMARY 
0710: 4b 45 59 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  KEY);.    INSERT
0720: 20 49 4e 54 4f 20 5b 74 31 27 78 31 5d 20 56 41   INTO [t1'x1] VA
0730: 4c 55 45 53 28 33 2c 34 29 3b 0a 20 20 20 20 43  LUES(3,4);.    C
0740: 52 45 41 54 45 20 49 4e 44 45 58 20 74 31 69 31  REATE INDEX t1i1
0750: 20 4f 4e 20 54 31 28 42 29 3b 0a 20 20 20 20 43   ON T1(B);.    C
0760: 52 45 41 54 45 20 49 4e 44 45 58 20 74 31 69 32  REATE INDEX t1i2
0770: 20 4f 4e 20 74 31 28 61 2c 62 29 3b 0a 20 20 20   ON t1(a,b);.   
0780: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 33   CREATE INDEX i3
0790: 20 4f 4e 20 5b 74 31 27 78 31 5d 28 62 2c 63 29   ON [t1'x1](b,c)
07a0: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 24 3a 3a  ;.    CREATE $::
07b0: 74 65 6d 70 20 54 41 42 4c 45 20 22 74 65 6d 70  temp TABLE "temp
07c0: 20 74 61 62 6c 65 22 28 65 2c 66 2c 67 20 55 4e   table"(e,f,g UN
07d0: 49 51 55 45 29 3b 0a 20 20 20 20 43 52 45 41 54  IQUE);.    CREAT
07e0: 45 20 49 4e 44 45 58 20 69 32 20 4f 4e 20 5b 74  E INDEX i2 ON [t
07f0: 65 6d 70 20 74 61 62 6c 65 5d 28 66 29 3b 0a 20  emp table](f);. 
0800: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 5b     INSERT INTO [
0810: 74 65 6d 70 20 74 61 62 6c 65 5d 20 56 41 4c 55  temp table] VALU
0820: 45 53 28 35 2c 36 2c 37 29 3b 0a 20 20 7d 5d 0a  ES(5,6,7);.  }].
0830: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
0840: 53 45 4c 45 43 54 20 27 74 31 27 2c 20 2a 20 46  SELECT 't1', * F
0850: 52 4f 4d 20 74 31 3b 0a 20 20 20 20 53 45 4c 45  ROM t1;.    SELE
0860: 43 54 20 27 74 31 27 27 78 31 27 2c 20 2a 20 46  CT 't1''x1', * F
0870: 52 4f 4d 20 22 74 31 27 78 31 22 3b 0a 20 20 20  ROM "t1'x1";.   
0880: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 5b   SELECT * FROM [
0890: 74 65 6d 70 20 74 61 62 6c 65 5d 3b 0a 20 20 7d  temp table];.  }
08a0: 0a 7d 20 7b 74 31 20 31 20 32 20 74 31 27 78 31  .} {t1 1 2 t1'x1
08b0: 20 33 20 34 20 35 20 36 20 37 7d 0a 64 6f 5f 74   3 4 5 6 7}.do_t
08c0: 65 73 74 20 61 6c 74 65 72 2d 31 2e 32 20 7b 0a  est alter-1.2 {.
08d0: 20 20 65 78 65 63 73 71 6c 20 5b 73 75 62 73 74    execsql [subst
08e0: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 24 3a   {.    CREATE $:
08f0: 3a 74 65 6d 70 20 54 41 42 4c 45 20 6f 62 6a 6c  :temp TABLE objl
0900: 69 73 74 28 74 79 70 65 2c 20 6e 61 6d 65 2c 20  ist(type, name, 
0910: 74 62 6c 5f 6e 61 6d 65 29 3b 0a 20 20 20 20 49  tbl_name);.    I
0920: 4e 53 45 52 54 20 49 4e 54 4f 20 6f 62 6a 6c 69  NSERT INTO objli
0930: 73 74 20 53 45 4c 45 43 54 20 74 79 70 65 2c 20  st SELECT type, 
0940: 6e 61 6d 65 2c 20 74 62 6c 5f 6e 61 6d 65 20 0a  name, tbl_name .
0950: 20 20 20 20 20 20 20 20 46 52 4f 4d 20 73 71 6c          FROM sql
0960: 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45  ite_master WHERE
0970: 20 4e 41 4d 45 21 3d 27 6f 62 6a 6c 69 73 74 27   NAME!='objlist'
0980: 3b 0a 20 20 7d 5d 0a 20 20 69 66 63 61 70 61 62  ;.  }].  ifcapab
0990: 6c 65 20 74 65 6d 70 64 62 20 7b 0a 20 20 20 20  le tempdb {.    
09a0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
09b0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f 62 6a 6c  INSERT INTO objl
09c0: 69 73 74 20 53 45 4c 45 43 54 20 74 79 70 65 2c  ist SELECT type,
09d0: 20 6e 61 6d 65 2c 20 74 62 6c 5f 6e 61 6d 65 20   name, tbl_name 
09e0: 0a 20 20 20 20 20 20 20 20 20 20 46 52 4f 4d 20  .          FROM 
09f0: 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
0a00: 65 72 20 57 48 45 52 45 20 4e 41 4d 45 21 3d 27  er WHERE NAME!='
0a10: 6f 62 6a 6c 69 73 74 27 3b 0a 20 20 20 20 7d 0a  objlist';.    }.
0a20: 20 20 7d 0a 0a 20 20 65 78 65 63 73 71 6c 20 7b    }..  execsql {
0a30: 0a 20 20 20 20 53 45 4c 45 43 54 20 74 79 70 65  .    SELECT type
0a40: 2c 20 6e 61 6d 65 2c 20 74 62 6c 5f 6e 61 6d 65  , name, tbl_name
0a50: 20 46 52 4f 4d 20 6f 62 6a 6c 69 73 74 20 4f 52   FROM objlist OR
0a60: 44 45 52 20 42 59 20 74 62 6c 5f 6e 61 6d 65 2c  DER BY tbl_name,
0a70: 20 74 79 70 65 20 64 65 73 63 2c 20 6e 61 6d 65   type desc, name
0a80: 3b 0a 20 20 7d 0a 7d 20 5b 6c 69 73 74 20 5c 0a  ;.  }.} [list \.
0a90: 20 20 20 20 20 74 61 62 6c 65 20 74 31 20 20 20       table t1   
0aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ab0: 20 20 20 20 20 20 20 20 20 20 20 74 31 20 20 20             t1   
0ac0: 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20            \.    
0ad0: 20 69 6e 64 65 78 20 74 31 69 31 20 20 20 20 20   index t1i1     
0ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0af0: 20 20 20 20 20 20 20 74 31 20 20 20 20 20 20 20         t1       
0b00: 20 20 20 20 20 20 5c 0a 20 20 20 20 20 69 6e 64        \.     ind
0b10: 65 78 20 74 31 69 32 20 20 20 20 20 20 20 20 20  ex t1i2         
0b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0b30: 20 20 20 74 31 20 20 20 20 20 20 20 20 20 20 20     t1           
0b40: 20 20 5c 0a 20 20 20 20 20 74 61 62 6c 65 20 74    \.     table t
0b50: 31 27 78 31 20 20 20 20 20 20 20 20 20 20 20 20  1'x1            
0b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
0b70: 31 27 78 31 20 20 20 20 20 20 20 20 20 20 5c 0a  1'x1          \.
0b80: 20 20 20 20 20 69 6e 64 65 78 20 69 33 20 20 20       index i3   
0b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ba0: 20 20 20 20 20 20 20 20 20 20 20 74 31 27 78 31             t1'x1
0bb0: 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20            \.    
0bc0: 20 69 6e 64 65 78 20 7b 73 71 6c 69 74 65 5f 61   index {sqlite_a
0bd0: 75 74 6f 69 6e 64 65 78 5f 74 31 27 78 31 5f 31  utoindex_t1'x1_1
0be0: 7d 20 20 20 20 20 20 74 31 27 78 31 20 20 20 20  }      t1'x1    
0bf0: 20 20 20 20 20 20 5c 0a 20 20 20 20 20 69 6e 64        \.     ind
0c00: 65 78 20 7b 73 71 6c 69 74 65 5f 61 75 74 6f 69  ex {sqlite_autoi
0c10: 6e 64 65 78 5f 74 31 27 78 31 5f 32 7d 20 20 20  ndex_t1'x1_2}   
0c20: 20 20 20 74 31 27 78 31 20 20 20 20 20 20 20 20     t1'x1        
0c30: 20 20 5c 0a 20 20 20 20 20 74 61 62 6c 65 20 7b    \.     table {
0c40: 74 65 6d 70 20 74 61 62 6c 65 7d 20 20 20 20 20  temp table}     
0c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
0c60: 74 65 6d 70 20 74 61 62 6c 65 7d 20 20 20 5c 0a  temp table}   \.
0c70: 20 20 20 20 20 69 6e 64 65 78 20 69 32 20 20 20       index i2   
0c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0c90: 20 20 20 20 20 20 20 20 20 20 20 7b 74 65 6d 70             {temp
0ca0: 20 74 61 62 6c 65 7d 20 20 20 5c 0a 20 20 20 20   table}   \.    
0cb0: 20 69 6e 64 65 78 20 7b 73 71 6c 69 74 65 5f 61   index {sqlite_a
0cc0: 75 74 6f 69 6e 64 65 78 5f 74 65 6d 70 20 74 61  utoindex_temp ta
0cd0: 62 6c 65 5f 31 7d 20 7b 74 65 6d 70 20 74 61 62  ble_1} {temp tab
0ce0: 6c 65 7d 20 20 20 5c 0a 20 20 5d 0a 0a 23 20 4d  le}   \.  ]..# M
0cf0: 61 6b 65 20 73 6f 6d 65 20 63 68 61 6e 67 65 73  ake some changes
0d00: 0a 23 0a 69 6e 74 65 67 72 69 74 79 5f 63 68 65  .#.integrity_che
0d10: 63 6b 20 61 6c 74 65 72 2d 31 2e 33 2e 30 0a 64  ck alter-1.3.0.d
0d20: 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 31 2e 33  o_test alter-1.3
0d30: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
0d40: 20 20 20 41 4c 54 45 52 20 54 41 42 4c 45 20 5b     ALTER TABLE [
0d50: 54 31 5d 20 52 45 4e 41 4d 45 20 74 6f 20 5b 2d  T1] RENAME to [-
0d60: 74 31 2d 5d 3b 0a 20 20 20 20 41 4c 54 45 52 20  t1-];.    ALTER 
0d70: 54 41 42 4c 45 20 22 74 31 27 78 31 22 20 52 45  TABLE "t1'x1" RE
0d80: 4e 41 4d 45 20 54 4f 20 54 32 3b 0a 20 20 20 20  NAME TO T2;.    
0d90: 41 4c 54 45 52 20 54 41 42 4c 45 20 5b 74 65 6d  ALTER TABLE [tem
0da0: 70 20 74 61 62 6c 65 5d 20 52 45 4e 41 4d 45 20  p table] RENAME 
0db0: 74 6f 20 54 65 6d 70 54 61 62 3b 0a 20 20 7d 0a  to TempTab;.  }.
0dc0: 7d 20 7b 7d 0a 69 6e 74 65 67 72 69 74 79 5f 63  } {}.integrity_c
0dd0: 68 65 63 6b 20 61 6c 74 65 72 2d 31 2e 33 2e 31  heck alter-1.3.1
0de0: 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 31  .do_test alter-1
0df0: 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .4 {.  execsql {
0e00: 0a 20 20 20 20 53 45 4c 45 43 54 20 27 74 31 27  .    SELECT 't1'
0e10: 2c 20 2a 20 46 52 4f 4d 20 5b 2d 74 31 2d 5d 3b  , * FROM [-t1-];
0e20: 0a 20 20 20 20 53 45 4c 45 43 54 20 27 74 32 27  .    SELECT 't2'
0e30: 2c 20 2a 20 46 52 4f 4d 20 74 32 3b 0a 20 20 20  , * FROM t2;.   
0e40: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
0e50: 65 6d 70 74 61 62 3b 0a 20 20 7d 0a 7d 20 7b 74  emptab;.  }.} {t
0e60: 31 20 31 20 32 20 74 32 20 33 20 34 20 35 20 36  1 1 2 t2 3 4 5 6
0e70: 20 37 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65   7}.do_test alte
0e80: 72 2d 31 2e 35 20 7b 0a 20 20 65 78 65 63 73 71  r-1.5 {.  execsq
0e90: 6c 20 7b 0a 20 20 20 20 44 45 4c 45 54 45 20 46  l {.    DELETE F
0ea0: 52 4f 4d 20 6f 62 6a 6c 69 73 74 3b 0a 20 20 20  ROM objlist;.   
0eb0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f 62 6a   INSERT INTO obj
0ec0: 6c 69 73 74 20 53 45 4c 45 43 54 20 74 79 70 65  list SELECT type
0ed0: 2c 20 6e 61 6d 65 2c 20 74 62 6c 5f 6e 61 6d 65  , name, tbl_name
0ee0: 0a 20 20 20 20 20 20 20 20 46 52 4f 4d 20 73 71  .        FROM sq
0ef0: 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52  lite_master WHER
0f00: 45 20 4e 41 4d 45 21 3d 27 6f 62 6a 6c 69 73 74  E NAME!='objlist
0f10: 27 3b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  ';.  }.  catchsq
0f20: 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  l {.    INSERT I
0f30: 4e 54 4f 20 6f 62 6a 6c 69 73 74 20 53 45 4c 45  NTO objlist SELE
0f40: 43 54 20 74 79 70 65 2c 20 6e 61 6d 65 2c 20 74  CT type, name, t
0f50: 62 6c 5f 6e 61 6d 65 20 0a 20 20 20 20 20 20 20  bl_name .       
0f60: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d   FROM sqlite_tem
0f70: 70 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20 4e  p_master WHERE N
0f80: 41 4d 45 21 3d 27 6f 62 6a 6c 69 73 74 27 3b 0a  AME!='objlist';.
0f90: 20 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a    }.  execsql {.
0fa0: 20 20 20 20 53 45 4c 45 43 54 20 74 79 70 65 2c      SELECT type,
0fb0: 20 6e 61 6d 65 2c 20 74 62 6c 5f 6e 61 6d 65 20   name, tbl_name 
0fc0: 46 52 4f 4d 20 6f 62 6a 6c 69 73 74 20 4f 52 44  FROM objlist ORD
0fd0: 45 52 20 42 59 20 74 62 6c 5f 6e 61 6d 65 2c 20  ER BY tbl_name, 
0fe0: 74 79 70 65 20 64 65 73 63 2c 20 6e 61 6d 65 3b  type desc, name;
0ff0: 0a 20 20 7d 0a 7d 20 5b 6c 69 73 74 20 5c 0a 20  .  }.} [list \. 
1000: 20 20 20 20 74 61 62 6c 65 20 2d 74 31 2d 20 20      table -t1-  
1010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1020: 20 20 20 20 20 20 20 2d 74 31 2d 20 20 20 20 20         -t1-     
1030: 20 20 20 5c 0a 20 20 20 20 20 69 6e 64 65 78 20     \.     index 
1040: 74 31 69 31 20 20 20 20 20 20 20 20 20 20 20 20  t1i1            
1050: 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 74 31               -t1
1060: 2d 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20 20  -        \.     
1070: 69 6e 64 65 78 20 74 31 69 32 20 20 20 20 20 20  index t1i2      
1080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1090: 20 20 20 2d 74 31 2d 20 20 20 20 20 20 20 20 5c     -t1-        \
10a0: 0a 20 20 20 20 20 74 61 62 6c 65 20 54 32 20 20  .     table T2  
10b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c0: 20 20 20 20 20 20 20 20 20 54 32 20 20 20 20 20           T2     
10d0: 20 20 20 20 20 5c 0a 20 20 20 20 20 69 6e 64 65       \.     inde
10e0: 78 20 69 33 20 20 20 20 20 20 20 20 20 20 20 20  x i3            
10f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
1100: 32 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20  2          \.   
1110: 20 20 69 6e 64 65 78 20 7b 73 71 6c 69 74 65 5f    index {sqlite_
1120: 61 75 74 6f 69 6e 64 65 78 5f 54 32 5f 31 7d 20  autoindex_T2_1} 
1130: 20 20 20 20 20 54 32 20 20 20 20 20 20 20 20 20       T2         
1140: 20 5c 0a 20 20 20 20 20 69 6e 64 65 78 20 7b 73   \.     index {s
1150: 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f  qlite_autoindex_
1160: 54 32 5f 32 7d 20 20 20 20 20 20 54 32 20 20 20  T2_2}      T2   
1170: 20 20 20 20 20 20 20 5c 0a 20 20 20 20 20 74 61         \.     ta
1180: 62 6c 65 20 7b 54 65 6d 70 54 61 62 7d 20 20 20  ble {TempTab}   
1190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a0: 20 7b 54 65 6d 70 54 61 62 7d 20 20 20 5c 0a 20   {TempTab}   \. 
11b0: 20 20 20 20 69 6e 64 65 78 20 69 32 20 20 20 20      index i2    
11c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d0: 20 20 20 20 20 20 20 7b 54 65 6d 70 54 61 62 7d         {TempTab}
11e0: 20 20 20 5c 0a 20 20 20 20 20 69 6e 64 65 78 20     \.     index 
11f0: 7b 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65  {sqlite_autoinde
1200: 78 5f 54 65 6d 70 54 61 62 5f 31 7d 20 7b 54 65  x_TempTab_1} {Te
1210: 6d 70 54 61 62 7d 20 20 20 5c 0a 20 20 5d 0a 0a  mpTab}   \.  ]..
1220: 23 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20  # Make sure the 
1230: 63 68 61 6e 67 65 73 20 70 65 72 73 69 73 74 20  changes persist 
1240: 61 66 74 65 72 20 72 65 73 74 61 72 74 69 6e 67  after restarting
1250: 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 0a 23   the database..#
1260: 20 28 54 68 65 20 54 45 4d 50 20 74 61 62 6c 65   (The TEMP table
1270: 20 77 69 6c 6c 20 6e 6f 74 20 70 65 72 73 69 73   will not persis
1280: 74 2c 20 6f 66 20 63 6f 75 72 73 65 2e 29 0a 23  t, of course.).#
1290: 0a 69 66 63 61 70 61 62 6c 65 20 74 65 6d 70 64  .ifcapable tempd
12a0: 62 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 61 6c  b {.  do_test al
12b0: 74 65 72 2d 31 2e 36 20 7b 0a 20 20 20 20 64 62  ter-1.6 {.    db
12c0: 20 63 6c 6f 73 65 0a 20 20 20 20 73 71 6c 69 74   close.    sqlit
12d0: 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20  e3 db test.db.  
12e0: 20 20 73 65 74 20 44 42 20 5b 73 71 6c 69 74 65    set DB [sqlite
12f0: 33 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69  3_connection_poi
1300: 6e 74 65 72 20 64 62 5d 0a 20 20 20 20 65 78 65  nter db].    exe
1310: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 43 52 45  csql {.      CRE
1320: 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 6f  ATE TEMP TABLE o
1330: 62 6a 6c 69 73 74 28 74 79 70 65 2c 20 6e 61 6d  bjlist(type, nam
1340: 65 2c 20 74 62 6c 5f 6e 61 6d 65 29 3b 0a 20 20  e, tbl_name);.  
1350: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
1360: 6f 62 6a 6c 69 73 74 20 53 45 4c 45 43 54 20 74  objlist SELECT t
1370: 79 70 65 2c 20 6e 61 6d 65 2c 20 74 62 6c 5f 6e  ype, name, tbl_n
1380: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
1390: 6d 61 73 74 65 72 3b 0a 20 20 20 20 20 20 49 4e  master;.      IN
13a0: 53 45 52 54 20 49 4e 54 4f 20 6f 62 6a 6c 69 73  SERT INTO objlis
13b0: 74 20 0a 20 20 20 20 20 20 20 20 20 20 53 45 4c  t .          SEL
13c0: 45 43 54 20 74 79 70 65 2c 20 6e 61 6d 65 2c 20  ECT type, name, 
13d0: 74 62 6c 5f 6e 61 6d 65 20 46 52 4f 4d 20 73 71  tbl_name FROM sq
13e0: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
13f0: 20 0a 20 20 20 20 20 20 20 20 20 20 57 48 45 52   .          WHER
1400: 45 20 4e 41 4d 45 21 3d 27 6f 62 6a 6c 69 73 74  E NAME!='objlist
1410: 27 3b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20  ';.      SELECT 
1420: 74 79 70 65 2c 20 6e 61 6d 65 2c 20 74 62 6c 5f  type, name, tbl_
1430: 6e 61 6d 65 20 46 52 4f 4d 20 6f 62 6a 6c 69 73  name FROM objlis
1440: 74 20 0a 20 20 20 20 20 20 20 20 20 20 4f 52 44  t .          ORD
1450: 45 52 20 42 59 20 74 62 6c 5f 6e 61 6d 65 2c 20  ER BY tbl_name, 
1460: 74 79 70 65 20 64 65 73 63 2c 20 6e 61 6d 65 3b  type desc, name;
1470: 0a 20 20 20 20 7d 0a 20 20 7d 20 5b 6c 69 73 74  .    }.  } [list
1480: 20 5c 0a 20 20 20 20 20 20 20 74 61 62 6c 65 20   \.       table 
1490: 2d 74 31 2d 20 20 20 20 20 20 20 20 20 20 20 20  -t1-            
14a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 74 31               -t1
14b0: 2d 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20  -           \.  
14c0: 20 20 20 20 20 69 6e 64 65 78 20 74 31 69 31 20       index t1i1 
14d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e0: 20 20 20 20 20 20 20 20 2d 74 31 2d 20 20 20 20          -t1-    
14f0: 20 20 20 20 20 20 20 5c 0a 20 20 20 20 20 20 20         \.       
1500: 69 6e 64 65 78 20 74 31 69 32 20 20 20 20 20 20  index t1i2      
1510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1520: 20 20 20 2d 74 31 2d 20 20 20 20 20 20 20 20 20     -t1-         
1530: 20 20 5c 0a 20 20 20 20 20 20 20 74 61 62 6c 65    \.       table
1540: 20 54 32 20 20 20 20 20 20 20 20 20 20 20 20 20   T2             
1550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 32                T2
1560: 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20            \.    
1570: 20 20 20 69 6e 64 65 78 20 69 33 20 20 20 20 20     index i3     
1580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1590: 20 20 20 20 20 20 54 32 20 20 20 20 20 20 20 20        T2        
15a0: 20 20 5c 0a 20 20 20 20 20 20 20 69 6e 64 65 78    \.       index
15b0: 20 7b 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64   {sqlite_autoind
15c0: 65 78 5f 54 32 5f 31 7d 20 20 20 20 20 20 54 32  ex_T2_1}      T2
15d0: 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20            \.    
15e0: 20 20 20 69 6e 64 65 78 20 7b 73 71 6c 69 74 65     index {sqlite
15f0: 5f 61 75 74 6f 69 6e 64 65 78 5f 54 32 5f 32 7d  _autoindex_T2_2}
1600: 20 20 20 20 20 20 54 32 20 20 20 20 20 20 20 20        T2        
1610: 20 20 5c 0a 20 20 20 20 5d 0a 7d 20 65 6c 73 65    \.    ].} else
1620: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
1630: 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 54 65     DROP TABLE Te
1640: 6d 70 54 61 62 3b 0a 20 20 7d 0a 7d 0a 0a 23 20  mpTab;.  }.}..# 
1650: 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 41 4c  Make sure the AL
1660: 54 45 52 20 54 41 42 4c 45 20 73 74 61 74 65 6d  TER TABLE statem
1670: 65 6e 74 73 20 77 6f 72 6b 20 77 69 74 68 20 74  ents work with t
1680: 68 65 0a 23 20 6e 6f 6e 2d 63 61 6c 6c 62 61 63  he.# non-callbac
1690: 6b 20 41 50 49 0a 23 0a 64 6f 5f 74 65 73 74 20  k API.#.do_test 
16a0: 61 6c 74 65 72 2d 31 2e 37 20 7b 0a 20 20 73 74  alter-1.7 {.  st
16b0: 65 70 73 71 6c 20 24 44 42 20 7b 0a 20 20 20 20  epsql $DB {.    
16c0: 41 4c 54 45 52 20 54 41 42 4c 45 20 5b 2d 74 31  ALTER TABLE [-t1
16d0: 2d 5d 20 52 45 4e 41 4d 45 20 74 6f 20 5b 2a 74  -] RENAME to [*t
16e0: 31 2a 5d 3b 0a 20 20 20 20 41 4c 54 45 52 20 54  1*];.    ALTER T
16f0: 41 42 4c 45 20 54 32 20 52 45 4e 41 4d 45 20 54  ABLE T2 RENAME T
1700: 4f 20 5b 3c 74 32 3e 5d 3b 0a 20 20 7d 0a 20 20  O [<t2>];.  }.  
1710: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44 45  execsql {.    DE
1720: 4c 45 54 45 20 46 52 4f 4d 20 6f 62 6a 6c 69 73  LETE FROM objlis
1730: 74 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  t;.    INSERT IN
1740: 54 4f 20 6f 62 6a 6c 69 73 74 20 53 45 4c 45 43  TO objlist SELEC
1750: 54 20 74 79 70 65 2c 20 6e 61 6d 65 2c 20 74 62  T type, name, tb
1760: 6c 5f 6e 61 6d 65 0a 20 20 20 20 20 20 20 20 46  l_name.        F
1770: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
1780: 72 20 57 48 45 52 45 20 4e 41 4d 45 21 3d 27 6f  r WHERE NAME!='o
1790: 62 6a 6c 69 73 74 27 3b 0a 20 20 7d 0a 20 20 63  bjlist';.  }.  c
17a0: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 49 4e  atchsql {.    IN
17b0: 53 45 52 54 20 49 4e 54 4f 20 6f 62 6a 6c 69 73  SERT INTO objlis
17c0: 74 20 53 45 4c 45 43 54 20 74 79 70 65 2c 20 6e  t SELECT type, n
17d0: 61 6d 65 2c 20 74 62 6c 5f 6e 61 6d 65 20 0a 20  ame, tbl_name . 
17e0: 20 20 20 20 20 20 20 46 52 4f 4d 20 73 71 6c 69         FROM sqli
17f0: 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 20 57  te_temp_master W
1800: 48 45 52 45 20 4e 41 4d 45 21 3d 27 6f 62 6a 6c  HERE NAME!='objl
1810: 69 73 74 27 3b 0a 20 20 7d 0a 20 20 65 78 65 63  ist';.  }.  exec
1820: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
1830: 20 74 79 70 65 2c 20 6e 61 6d 65 2c 20 74 62 6c   type, name, tbl
1840: 5f 6e 61 6d 65 20 46 52 4f 4d 20 6f 62 6a 6c 69  _name FROM objli
1850: 73 74 20 4f 52 44 45 52 20 42 59 20 74 62 6c 5f  st ORDER BY tbl_
1860: 6e 61 6d 65 2c 20 74 79 70 65 20 64 65 73 63 2c  name, type desc,
1870: 20 6e 61 6d 65 3b 0a 20 20 7d 0a 7d 20 5b 6c 69   name;.  }.} [li
1880: 73 74 20 5c 0a 20 20 20 20 20 74 61 62 6c 65 20  st \.     table 
1890: 2a 74 31 2a 20 20 20 20 20 20 20 20 20 20 20 20  *t1*            
18a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 74 31               *t1
18b0: 2a 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20  *           \.  
18c0: 20 20 20 69 6e 64 65 78 20 74 31 69 31 20 20 20     index t1i1   
18d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e0: 20 20 20 20 20 20 2a 74 31 2a 20 20 20 20 20 20        *t1*      
18f0: 20 20 20 20 20 5c 0a 20 20 20 20 20 69 6e 64 65       \.     inde
1900: 78 20 74 31 69 32 20 20 20 20 20 20 20 20 20 20  x t1i2          
1910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
1920: 74 31 2a 20 20 20 20 20 20 20 20 20 20 20 5c 0a  t1*           \.
1930: 20 20 20 20 20 74 61 62 6c 65 20 3c 74 32 3e 20       table <t2> 
1940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1950: 20 20 20 20 20 20 20 20 3c 74 32 3e 20 20 20 20          <t2>    
1960: 20 20 20 20 20 20 5c 0a 20 20 20 20 20 69 6e 64        \.     ind
1970: 65 78 20 69 33 20 20 20 20 20 20 20 20 20 20 20  ex i3           
1980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1990: 3c 74 32 3e 20 20 20 20 20 20 20 20 20 20 5c 0a  <t2>          \.
19a0: 20 20 20 20 20 69 6e 64 65 78 20 7b 73 71 6c 69       index {sqli
19b0: 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 3c 74 32  te_autoindex_<t2
19c0: 3e 5f 31 7d 20 20 20 20 3c 74 32 3e 20 20 20 20  >_1}    <t2>    
19d0: 20 20 20 20 20 20 5c 0a 20 20 20 20 20 69 6e 64        \.     ind
19e0: 65 78 20 7b 73 71 6c 69 74 65 5f 61 75 74 6f 69  ex {sqlite_autoi
19f0: 6e 64 65 78 5f 3c 74 32 3e 5f 32 7d 20 20 20 20  ndex_<t2>_2}    
1a00: 3c 74 32 3e 20 20 20 20 20 20 20 20 20 20 5c 0a  <t2>          \.
1a10: 20 20 5d 0a 0a 23 20 43 68 65 63 6b 20 74 68 61    ]..# Check tha
1a20: 74 20 41 4c 54 45 52 20 54 41 42 4c 45 20 77 6f  t ALTER TABLE wo
1a30: 72 6b 73 20 6f 6e 20 61 74 74 61 63 68 65 64 20  rks on attached 
1a40: 64 61 74 61 62 61 73 65 73 2e 0a 23 0a 64 6f 5f  databases..#.do_
1a50: 74 65 73 74 20 61 6c 74 65 72 2d 31 2e 38 2e 31  test alter-1.8.1
1a60: 20 7b 0a 20 20 66 69 6c 65 20 64 65 6c 65 74 65   {.  file delete
1a70: 20 2d 66 6f 72 63 65 20 74 65 73 74 32 2e 64 62   -force test2.db
1a80: 0a 20 20 66 69 6c 65 20 64 65 6c 65 74 65 20 2d  .  file delete -
1a90: 66 6f 72 63 65 20 74 65 73 74 32 2e 64 62 2d 6a  force test2.db-j
1aa0: 6f 75 72 6e 61 6c 0a 20 20 65 78 65 63 73 71 6c  ournal.  execsql
1ab0: 20 7b 0a 20 20 20 20 41 54 54 41 43 48 20 27 74   {.    ATTACH 't
1ac0: 65 73 74 32 2e 64 62 27 20 41 53 20 61 75 78 3b  est2.db' AS aux;
1ad0: 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  .  }.} {}.do_tes
1ae0: 74 20 61 6c 74 65 72 2d 31 2e 38 2e 32 20 7b 0a  t alter-1.8.2 {.
1af0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1b00: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 34 28  CREATE TABLE t4(
1b10: 61 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 62  a PRIMARY KEY, b
1b20: 2c 20 63 29 3b 0a 20 20 20 20 43 52 45 41 54 45  , c);.    CREATE
1b30: 20 54 41 42 4c 45 20 61 75 78 2e 74 34 28 61 20   TABLE aux.t4(a 
1b40: 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 2c 20  PRIMARY KEY, b, 
1b50: 63 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 49  c);.    CREATE I
1b60: 4e 44 45 58 20 69 34 20 4f 4e 20 74 34 28 62 29  NDEX i4 ON t4(b)
1b70: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e 44  ;.    CREATE IND
1b80: 45 58 20 61 75 78 2e 69 34 20 4f 4e 20 74 34 28  EX aux.i4 ON t4(
1b90: 62 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f  b);.  }.} {}.do_
1ba0: 74 65 73 74 20 61 6c 74 65 72 2d 31 2e 38 2e 33  test alter-1.8.3
1bb0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
1bc0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
1bd0: 34 20 56 41 4c 55 45 53 28 27 6d 61 69 6e 27 2c  4 VALUES('main',
1be0: 20 27 6d 61 69 6e 27 2c 20 27 6d 61 69 6e 27 29   'main', 'main')
1bf0: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
1c00: 4f 20 61 75 78 2e 74 34 20 56 41 4c 55 45 53 28  O aux.t4 VALUES(
1c10: 27 61 75 78 27 2c 20 27 61 75 78 27 2c 20 27 61  'aux', 'aux', 'a
1c20: 75 78 27 29 3b 0a 20 20 20 20 53 45 4c 45 43 54  ux');.    SELECT
1c30: 20 2a 20 46 52 4f 4d 20 74 34 20 57 48 45 52 45   * FROM t4 WHERE
1c40: 20 61 20 3d 20 27 6d 61 69 6e 27 3b 0a 20 20 7d   a = 'main';.  }
1c50: 0a 7d 20 7b 6d 61 69 6e 20 6d 61 69 6e 20 6d 61  .} {main main ma
1c60: 69 6e 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65  in}.do_test alte
1c70: 72 2d 31 2e 38 2e 34 20 7b 0a 20 20 65 78 65 63  r-1.8.4 {.  exec
1c80: 73 71 6c 20 7b 0a 20 20 20 20 41 4c 54 45 52 20  sql {.    ALTER 
1c90: 54 41 42 4c 45 20 74 34 20 52 45 4e 41 4d 45 20  TABLE t4 RENAME 
1ca0: 54 4f 20 74 35 3b 0a 20 20 20 20 53 45 4c 45 43  TO t5;.    SELEC
1cb0: 54 20 2a 20 46 52 4f 4d 20 74 34 20 57 48 45 52  T * FROM t4 WHER
1cc0: 45 20 61 20 3d 20 27 61 75 78 27 3b 0a 20 20 7d  E a = 'aux';.  }
1cd0: 0a 7d 20 7b 61 75 78 20 61 75 78 20 61 75 78 7d  .} {aux aux aux}
1ce0: 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 31  .do_test alter-1
1cf0: 2e 38 2e 35 20 7b 0a 20 20 65 78 65 63 73 71 6c  .8.5 {.  execsql
1d00: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20   {.    SELECT * 
1d10: 46 52 4f 4d 20 74 35 3b 0a 20 20 7d 0a 7d 20 7b  FROM t5;.  }.} {
1d20: 6d 61 69 6e 20 6d 61 69 6e 20 6d 61 69 6e 7d 0a  main main main}.
1d30: 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 31 2e  do_test alter-1.
1d40: 38 2e 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  8.6 {.  execsql 
1d50: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  {.    SELECT * F
1d60: 52 4f 4d 20 74 35 20 57 48 45 52 45 20 62 20 3d  ROM t5 WHERE b =
1d70: 20 27 6d 61 69 6e 27 3b 0a 20 20 7d 0a 7d 20 7b   'main';.  }.} {
1d80: 6d 61 69 6e 20 6d 61 69 6e 20 6d 61 69 6e 7d 0a  main main main}.
1d90: 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 31 2e  do_test alter-1.
1da0: 38 2e 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  8.7 {.  execsql 
1db0: 7b 0a 20 20 20 20 41 4c 54 45 52 20 54 41 42 4c  {.    ALTER TABL
1dc0: 45 20 61 75 78 2e 74 34 20 52 45 4e 41 4d 45 20  E aux.t4 RENAME 
1dd0: 54 4f 20 74 35 3b 0a 20 20 20 20 53 45 4c 45 43  TO t5;.    SELEC
1de0: 54 20 2a 20 46 52 4f 4d 20 61 75 78 2e 74 35 20  T * FROM aux.t5 
1df0: 57 48 45 52 45 20 62 20 3d 20 27 61 75 78 27 3b  WHERE b = 'aux';
1e00: 0a 20 20 7d 0a 7d 20 7b 61 75 78 20 61 75 78 20  .  }.} {aux aux 
1e10: 61 75 78 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 6c  aux}..do_test al
1e20: 74 65 72 2d 31 2e 39 2e 31 20 7b 0a 20 20 65 78  ter-1.9.1 {.  ex
1e30: 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41  ecsql {.    CREA
1e40: 54 45 20 54 41 42 4c 45 20 74 62 6c 31 20 20 20  TE TABLE tbl1   
1e50: 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20 49  (a, b, c);.    I
1e60: 4e 53 45 52 54 20 49 4e 54 4f 20 74 62 6c 31 20  NSERT INTO tbl1 
1e70: 56 41 4c 55 45 53 28 31 2c 20 32 2c 20 33 29 3b  VALUES(1, 2, 3);
1e80: 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  .  }.} {}.do_tes
1e90: 74 20 61 6c 74 65 72 2d 31 2e 39 2e 32 20 7b 0a  t alter-1.9.2 {.
1ea0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1eb0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 62  SELECT * FROM tb
1ec0: 6c 31 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 20 33  l1;.  }.} {1 2 3
1ed0: 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d  }.do_test alter-
1ee0: 31 2e 39 2e 33 20 7b 0a 20 20 65 78 65 63 73 71  1.9.3 {.  execsq
1ef0: 6c 20 7b 0a 20 20 20 20 41 4c 54 45 52 20 54 41  l {.    ALTER TA
1f00: 42 4c 45 20 74 62 6c 31 20 52 45 4e 41 4d 45 20  BLE tbl1 RENAME 
1f10: 54 4f 20 74 62 6c 32 3b 0a 20 20 20 20 53 45 4c  TO tbl2;.    SEL
1f20: 45 43 54 20 2a 20 46 52 4f 4d 20 74 62 6c 32 3b  ECT * FROM tbl2;
1f30: 0a 20 20 7d 0a 7d 20 7b 31 20 32 20 33 7d 0a 64  .  }.} {1 2 3}.d
1f40: 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 31 2e 39  o_test alter-1.9
1f50: 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .4 {.  execsql {
1f60: 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20  .    DROP TABLE 
1f70: 74 62 6c 32 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a  tbl2;.  }.} {}..
1f80: 23 20 54 65 73 74 20 65 72 72 6f 72 20 6d 65 73  # Test error mes
1f90: 73 61 67 65 73 0a 23 0a 64 6f 5f 74 65 73 74 20  sages.#.do_test 
1fa0: 61 6c 74 65 72 2d 32 2e 31 20 7b 0a 20 20 63 61  alter-2.1 {.  ca
1fb0: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 41 4c 54  tchsql {.    ALT
1fc0: 45 52 20 54 41 42 4c 45 20 6e 6f 6e 65 20 52 45  ER TABLE none RE
1fd0: 4e 41 4d 45 20 54 4f 20 68 69 3b 0a 20 20 7d 0a  NAME TO hi;.  }.
1fe0: 7d 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20 74 61  } {1 {no such ta
1ff0: 62 6c 65 3a 20 6e 6f 6e 65 7d 7d 0a 64 6f 5f 74  ble: none}}.do_t
2000: 65 73 74 20 61 6c 74 65 72 2d 32 2e 32 20 7b 0a  est alter-2.2 {.
2010: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
2020: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 33 28  CREATE TABLE t3(
2030: 70 2c 71 2c 72 29 3b 0a 20 20 7d 0a 20 20 63 61  p,q,r);.  }.  ca
2040: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 41 4c 54  tchsql {.    ALT
2050: 45 52 20 54 41 42 4c 45 20 5b 3c 74 32 3e 5d 20  ER TABLE [<t2>] 
2060: 52 45 4e 41 4d 45 20 54 4f 20 74 33 3b 0a 20 20  RENAME TO t3;.  
2070: 7d 0a 7d 20 7b 31 20 7b 74 68 65 72 65 20 69 73  }.} {1 {there is
2080: 20 61 6c 72 65 61 64 79 20 61 6e 6f 74 68 65 72   already another
2090: 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
20a0: 77 69 74 68 20 74 68 69 73 20 6e 61 6d 65 3a 20  with this name: 
20b0: 74 33 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74  t3}}.do_test alt
20c0: 65 72 2d 32 2e 33 20 7b 0a 20 20 63 61 74 63 68  er-2.3 {.  catch
20d0: 73 71 6c 20 7b 0a 20 20 20 20 41 4c 54 45 52 20  sql {.    ALTER 
20e0: 54 41 42 4c 45 20 5b 3c 74 32 3e 5d 20 52 45 4e  TABLE [<t2>] REN
20f0: 41 4d 45 20 54 4f 20 69 33 3b 0a 20 20 7d 0a 7d  AME TO i3;.  }.}
2100: 20 7b 31 20 7b 74 68 65 72 65 20 69 73 20 61 6c   {1 {there is al
2110: 72 65 61 64 79 20 61 6e 6f 74 68 65 72 20 74 61  ready another ta
2120: 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 69 74  ble or index wit
2130: 68 20 74 68 69 73 20 6e 61 6d 65 3a 20 69 33 7d  h this name: i3}
2140: 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d  }.do_test alter-
2150: 32 2e 34 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  2.4 {.  catchsql
2160: 20 7b 0a 20 20 20 20 41 4c 54 45 52 20 54 41 42   {.    ALTER TAB
2170: 4c 45 20 53 71 4c 69 54 65 5f 6d 61 73 74 65 72  LE SqLiTe_master
2180: 20 52 45 4e 41 4d 45 20 54 4f 20 6d 61 73 74 65   RENAME TO maste
2190: 72 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 74 61 62  r;.  }.} {1 {tab
21a0: 6c 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  le sqlite_master
21b0: 20 6d 61 79 20 6e 6f 74 20 62 65 20 61 6c 74 65   may not be alte
21c0: 72 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 6c  red}}.do_test al
21d0: 74 65 72 2d 32 2e 35 20 7b 0a 20 20 63 61 74 63  ter-2.5 {.  catc
21e0: 68 73 71 6c 20 7b 0a 20 20 20 20 41 4c 54 45 52  hsql {.    ALTER
21f0: 20 54 41 42 4c 45 20 74 33 20 52 45 4e 41 4d 45   TABLE t3 RENAME
2200: 20 54 4f 20 73 71 6c 69 74 65 5f 74 33 3b 0a 20   TO sqlite_t3;. 
2210: 20 7d 0a 7d 20 7b 31 20 7b 6f 62 6a 65 63 74 20   }.} {1 {object 
2220: 6e 61 6d 65 20 72 65 73 65 72 76 65 64 20 66 6f  name reserved fo
2230: 72 20 69 6e 74 65 72 6e 61 6c 20 75 73 65 3a 20  r internal use: 
2240: 73 71 6c 69 74 65 5f 74 33 7d 7d 0a 64 6f 5f 74  sqlite_t3}}.do_t
2250: 65 73 74 20 61 6c 74 65 72 2d 32 2e 36 20 7b 0a  est alter-2.6 {.
2260: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
2270: 20 41 4c 54 45 52 20 54 41 42 4c 45 20 74 33 20   ALTER TABLE t3 
2280: 41 44 44 20 43 4f 4c 55 4d 4e 20 28 41 4c 54 45  ADD COLUMN (ALTE
2290: 52 20 54 41 42 4c 45 20 74 33 20 41 44 44 20 43  R TABLE t3 ADD C
22a0: 4f 4c 55 4d 4e 29 3b 0a 20 20 7d 0a 7d 20 7b 31  OLUMN);.  }.} {1
22b0: 20 7b 6e 65 61 72 20 22 28 22 3a 20 73 79 6e 74   {near "(": synt
22c0: 61 78 20 65 72 72 6f 72 7d 7d 0a 0a 23 20 49 66  ax error}}..# If
22d0: 20 74 68 69 73 20 63 6f 6d 70 69 6c 61 74 69 6f   this compilatio
22e0: 6e 20 64 6f 65 73 20 6e 6f 74 20 69 6e 63 6c 75  n does not inclu
22f0: 64 65 20 74 72 69 67 67 65 72 73 2c 20 6f 6d 69  de triggers, omi
2300: 74 20 74 68 65 20 61 6c 74 65 72 2d 33 2e 2a 20  t the alter-3.* 
2310: 74 65 73 74 73 2e 0a 69 66 63 61 70 61 62 6c 65  tests..ifcapable
2320: 20 74 72 69 67 67 65 72 20 7b 0a 0a 23 2d 2d 2d   trigger {..#---
2330: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2340: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2350: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2360: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2370: 2d 2d 2d 2d 0a 23 20 54 65 73 74 73 20 61 6c 74  ----.# Tests alt
2380: 65 72 2d 33 2e 2a 20 74 65 73 74 20 41 4c 54 45  er-3.* test ALTE
2390: 52 20 54 41 42 4c 45 20 6f 6e 20 74 61 62 6c 65  R TABLE on table
23a0: 73 20 74 68 61 74 20 68 61 76 65 20 74 72 69 67  s that have trig
23b0: 67 65 72 73 2e 0a 23 0a 23 20 61 6c 74 65 72 2d  gers..#.# alter-
23c0: 33 2e 31 2e 2a 3a 20 41 4c 54 45 52 20 54 41 42  3.1.*: ALTER TAB
23d0: 4c 45 20 77 69 74 68 20 74 72 69 67 67 65 72 73  LE with triggers
23e0: 2e 0a 23 20 61 6c 74 65 72 2d 33 2e 32 2e 2a 3a  ..# alter-3.2.*:
23f0: 20 54 65 73 74 20 74 68 61 74 20 74 68 65 20 4f   Test that the O
2400: 4e 20 6b 65 79 77 6f 72 64 20 63 61 6e 6e 6f 74  N keyword cannot
2410: 20 62 65 20 75 73 65 64 20 61 73 20 61 20 64 61   be used as a da
2420: 74 61 62 61 73 65 2c 0a 23 20 20 20 20 20 74 61  tabase,.#     ta
2430: 62 6c 65 20 6f 72 20 63 6f 6c 75 6d 6e 20 6e 61  ble or column na
2440: 6d 65 20 75 6e 71 75 6f 74 65 64 2e 20 54 68 69  me unquoted. Thi
2450: 73 20 69 73 20 64 6f 6e 65 20 62 65 63 61 75 73  s is done becaus
2460: 65 20 70 61 72 74 20 6f 66 20 74 68 65 0a 23 20  e part of the.# 
2470: 20 20 20 20 41 4c 54 45 52 20 54 41 42 4c 45 20      ALTER TABLE 
2480: 63 6f 64 65 20 28 73 70 65 63 69 66 69 63 61 6c  code (specifical
2490: 6c 79 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  ly the implement
24a0: 61 74 69 6f 6e 20 6f 66 20 53 51 4c 20 66 75 6e  ation of SQL fun
24b0: 63 74 69 6f 6e 0a 23 20 20 20 20 20 22 73 71 6c  ction.#     "sql
24c0: 69 74 65 5f 61 6c 74 65 72 5f 74 72 69 67 67 65  ite_alter_trigge
24d0: 72 22 29 20 77 69 6c 6c 20 62 72 65 61 6b 20 69  r") will break i
24e0: 6e 20 74 68 69 73 20 63 61 73 65 2e 0a 23 20 61  n this case..# a
24f0: 6c 74 65 72 2d 33 2e 33 2e 2a 3a 20 41 4c 54 45  lter-3.3.*: ALTE
2500: 52 20 54 41 42 4c 45 20 77 69 74 68 20 54 45 4d  R TABLE with TEM
2510: 50 20 74 72 69 67 67 65 72 73 20 28 74 6f 64 6f  P triggers (todo
2520: 29 2e 0a 23 0a 0a 23 20 41 6e 20 53 51 4c 20 75  )..#..# An SQL u
2530: 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 66 6f 72  ser-function for
2540: 20 74 72 69 67 67 65 72 73 20 74 6f 20 66 69 72   triggers to fir
2550: 65 2c 20 73 6f 20 74 68 61 74 20 77 65 20 6b 6e  e, so that we kn
2560: 6f 77 20 74 68 65 79 0a 23 20 61 72 65 20 77 6f  ow they.# are wo
2570: 72 6b 69 6e 67 2e 0a 70 72 6f 63 20 74 72 69 67  rking..proc trig
2580: 66 75 6e 63 20 7b 61 72 67 73 7d 20 7b 0a 20 20  func {args} {.  
2590: 73 65 74 20 3a 3a 54 52 49 47 47 45 52 20 24 61  set ::TRIGGER $a
25a0: 72 67 73 0a 7d 0a 64 62 20 66 75 6e 63 20 74 72  rgs.}.db func tr
25b0: 69 67 66 75 6e 63 20 74 72 69 67 66 75 6e 63 0a  igfunc trigfunc.
25c0: 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 33  .do_test alter-3
25d0: 2e 31 2e 30 20 7b 0a 20 20 65 78 65 63 73 71 6c  .1.0 {.  execsql
25e0: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41   {.    CREATE TA
25f0: 42 4c 45 20 74 36 28 61 2c 20 62 2c 20 63 29 3b  BLE t6(a, b, c);
2600: 0a 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47  .    CREATE TRIG
2610: 47 45 52 20 74 72 69 67 31 20 41 46 54 45 52 20  GER trig1 AFTER 
2620: 49 4e 53 45 52 54 20 4f 4e 20 74 36 20 42 45 47  INSERT ON t6 BEG
2630: 49 4e 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20  IN.      SELECT 
2640: 74 72 69 67 66 75 6e 63 28 27 74 72 69 67 31 27  trigfunc('trig1'
2650: 2c 20 6e 65 77 2e 61 2c 20 6e 65 77 2e 62 2c 20  , new.a, new.b, 
2660: 6e 65 77 2e 63 29 3b 0a 20 20 20 20 45 4e 44 3b  new.c);.    END;
2670: 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  .  }.} {}.do_tes
2680: 74 20 61 6c 74 65 72 2d 33 2e 31 2e 31 20 7b 0a  t alter-3.1.1 {.
2690: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
26a0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 36 20 56  INSERT INTO t6 V
26b0: 41 4c 55 45 53 28 31 2c 20 32 2c 20 33 29 3b 0a  ALUES(1, 2, 3);.
26c0: 20 20 7d 0a 20 20 73 65 74 20 3a 3a 54 52 49 47    }.  set ::TRIG
26d0: 47 45 52 0a 7d 20 7b 74 72 69 67 31 20 31 20 32  GER.} {trig1 1 2
26e0: 20 33 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65   3}.do_test alte
26f0: 72 2d 33 2e 31 2e 32 20 7b 0a 20 20 65 78 65 63  r-3.1.2 {.  exec
2700: 73 71 6c 20 7b 0a 20 20 20 20 41 4c 54 45 52 20  sql {.    ALTER 
2710: 54 41 42 4c 45 20 74 36 20 52 45 4e 41 4d 45 20  TABLE t6 RENAME 
2720: 54 4f 20 74 37 3b 0a 20 20 20 20 49 4e 53 45 52  TO t7;.    INSER
2730: 54 20 49 4e 54 4f 20 74 37 20 56 41 4c 55 45 53  T INTO t7 VALUES
2740: 28 34 2c 20 35 2c 20 36 29 3b 0a 20 20 7d 0a 20  (4, 5, 6);.  }. 
2750: 20 73 65 74 20 3a 3a 54 52 49 47 47 45 52 0a 7d   set ::TRIGGER.}
2760: 20 7b 74 72 69 67 31 20 34 20 35 20 36 7d 0a 64   {trig1 4 5 6}.d
2770: 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 33 2e 31  o_test alter-3.1
2780: 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .3 {.  execsql {
2790: 0a 20 20 20 20 44 52 4f 50 20 54 52 49 47 47 45  .    DROP TRIGGE
27a0: 52 20 74 72 69 67 31 3b 0a 20 20 7d 0a 7d 20 7b  R trig1;.  }.} {
27b0: 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d  }.do_test alter-
27c0: 33 2e 31 2e 34 20 7b 0a 20 20 65 78 65 63 73 71  3.1.4 {.  execsq
27d0: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
27e0: 52 49 47 47 45 52 20 74 72 69 67 32 20 41 46 54  RIGGER trig2 AFT
27f0: 45 52 20 49 4e 53 45 52 54 20 4f 4e 20 6d 61 69  ER INSERT ON mai
2800: 6e 2e 74 37 20 42 45 47 49 4e 0a 20 20 20 20 20  n.t7 BEGIN.     
2810: 20 53 45 4c 45 43 54 20 74 72 69 67 66 75 6e 63   SELECT trigfunc
2820: 28 27 74 72 69 67 32 27 2c 20 6e 65 77 2e 61 2c  ('trig2', new.a,
2830: 20 6e 65 77 2e 62 2c 20 6e 65 77 2e 63 29 3b 0a   new.b, new.c);.
2840: 20 20 20 20 45 4e 44 3b 0a 20 20 20 20 49 4e 53      END;.    INS
2850: 45 52 54 20 49 4e 54 4f 20 74 37 20 56 41 4c 55  ERT INTO t7 VALU
2860: 45 53 28 31 2c 20 32 2c 20 33 29 3b 0a 20 20 7d  ES(1, 2, 3);.  }
2870: 0a 20 20 73 65 74 20 3a 3a 54 52 49 47 47 45 52  .  set ::TRIGGER
2880: 0a 7d 20 7b 74 72 69 67 32 20 31 20 32 20 33 7d  .} {trig2 1 2 3}
2890: 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 33  .do_test alter-3
28a0: 2e 31 2e 35 20 7b 0a 20 20 65 78 65 63 73 71 6c  .1.5 {.  execsql
28b0: 20 7b 0a 20 20 20 20 41 4c 54 45 52 20 54 41 42   {.    ALTER TAB
28c0: 4c 45 20 74 37 20 52 45 4e 41 4d 45 20 54 4f 20  LE t7 RENAME TO 
28d0: 74 38 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  t8;.    INSERT I
28e0: 4e 54 4f 20 74 38 20 56 41 4c 55 45 53 28 34 2c  NTO t8 VALUES(4,
28f0: 20 35 2c 20 36 29 3b 0a 20 20 7d 0a 20 20 73 65   5, 6);.  }.  se
2900: 74 20 3a 3a 54 52 49 47 47 45 52 0a 7d 20 7b 74  t ::TRIGGER.} {t
2910: 72 69 67 32 20 34 20 35 20 36 7d 0a 64 6f 5f 74  rig2 4 5 6}.do_t
2920: 65 73 74 20 61 6c 74 65 72 2d 33 2e 31 2e 36 20  est alter-3.1.6 
2930: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
2940: 20 20 44 52 4f 50 20 54 52 49 47 47 45 52 20 74    DROP TRIGGER t
2950: 72 69 67 32 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64  rig2;.  }.} {}.d
2960: 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 33 2e 31  o_test alter-3.1
2970: 2e 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .7 {.  execsql {
2980: 0a 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47  .    CREATE TRIG
2990: 47 45 52 20 74 72 69 67 33 20 41 46 54 45 52 20  GER trig3 AFTER 
29a0: 49 4e 53 45 52 54 20 4f 4e 20 6d 61 69 6e 2e 27  INSERT ON main.'
29b0: 74 38 27 42 45 47 49 4e 0a 20 20 20 20 20 20 53  t8'BEGIN.      S
29c0: 45 4c 45 43 54 20 74 72 69 67 66 75 6e 63 28 27  ELECT trigfunc('
29d0: 74 72 69 67 33 27 2c 20 6e 65 77 2e 61 2c 20 6e  trig3', new.a, n
29e0: 65 77 2e 62 2c 20 6e 65 77 2e 63 29 3b 0a 20 20  ew.b, new.c);.  
29f0: 20 20 45 4e 44 3b 0a 20 20 20 20 49 4e 53 45 52    END;.    INSER
2a00: 54 20 49 4e 54 4f 20 74 38 20 56 41 4c 55 45 53  T INTO t8 VALUES
2a10: 28 31 2c 20 32 2c 20 33 29 3b 0a 20 20 7d 0a 20  (1, 2, 3);.  }. 
2a20: 20 73 65 74 20 3a 3a 54 52 49 47 47 45 52 0a 7d   set ::TRIGGER.}
2a30: 20 7b 74 72 69 67 33 20 31 20 32 20 33 7d 0a 64   {trig3 1 2 3}.d
2a40: 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 33 2e 31  o_test alter-3.1
2a50: 2e 38 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .8 {.  execsql {
2a60: 0a 20 20 20 20 41 4c 54 45 52 20 54 41 42 4c 45  .    ALTER TABLE
2a70: 20 74 38 20 52 45 4e 41 4d 45 20 54 4f 20 74 39   t8 RENAME TO t9
2a80: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
2a90: 4f 20 74 39 20 56 41 4c 55 45 53 28 34 2c 20 35  O t9 VALUES(4, 5
2aa0: 2c 20 36 29 3b 0a 20 20 7d 0a 20 20 73 65 74 20  , 6);.  }.  set 
2ab0: 3a 3a 54 52 49 47 47 45 52 0a 7d 20 7b 74 72 69  ::TRIGGER.} {tri
2ac0: 67 33 20 34 20 35 20 36 7d 0a 0a 23 20 4d 61 6b  g3 4 5 6}..# Mak
2ad0: 65 20 73 75 72 65 20 22 4f 4e 22 20 63 61 6e 6e  e sure "ON" cann
2ae0: 6f 74 20 62 65 20 75 73 65 64 20 61 73 20 61 20  ot be used as a 
2af0: 64 61 74 61 62 61 73 65 2c 20 74 61 62 6c 65 20  database, table 
2b00: 6f 72 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 77  or column name w
2b10: 69 74 68 6f 75 74 0a 23 20 71 75 6f 74 69 6e 67  ithout.# quoting
2b20: 2e 20 4f 74 68 65 72 77 69 73 65 20 74 68 65 20  . Otherwise the 
2b30: 73 71 6c 69 74 65 5f 61 6c 74 65 72 5f 74 72 69  sqlite_alter_tri
2b40: 67 67 65 72 28 29 20 66 75 6e 63 74 69 6f 6e 20  gger() function 
2b50: 6d 69 67 68 74 20 6e 6f 74 20 77 6f 72 6b 2e 0a  might not work..
2b60: 66 69 6c 65 20 64 65 6c 65 74 65 20 2d 66 6f 72  file delete -for
2b70: 63 65 20 74 65 73 74 33 2e 64 62 0a 66 69 6c 65  ce test3.db.file
2b80: 20 64 65 6c 65 74 65 20 2d 66 6f 72 63 65 20 74   delete -force t
2b90: 65 73 74 33 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a  est3.db-journal.
2ba0: 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 33 2e  do_test alter-3.
2bb0: 32 2e 31 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  2.1 {.  catchsql
2bc0: 20 7b 0a 20 20 20 20 41 54 54 41 43 48 20 27 74   {.    ATTACH 't
2bd0: 65 73 74 33 2e 64 62 27 20 41 53 20 4f 4e 3b 0a  est3.db' AS ON;.
2be0: 20 20 7d 0a 7d 20 7b 31 20 7b 6e 65 61 72 20 22    }.} {1 {near "
2bf0: 4f 4e 22 3a 20 73 79 6e 74 61 78 20 65 72 72 6f  ON": syntax erro
2c00: 72 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65  r}}.do_test alte
2c10: 72 2d 33 2e 32 2e 32 20 7b 0a 20 20 63 61 74 63  r-3.2.2 {.  catc
2c20: 68 73 71 6c 20 7b 0a 20 20 20 20 41 54 54 41 43  hsql {.    ATTAC
2c30: 48 20 27 74 65 73 74 33 2e 64 62 27 20 41 53 20  H 'test3.db' AS 
2c40: 27 4f 4e 27 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b  'ON';.  }.} {0 {
2c50: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72  }}.do_test alter
2c60: 2d 33 2e 32 2e 33 20 7b 0a 20 20 63 61 74 63 68  -3.2.3 {.  catch
2c70: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
2c80: 20 54 41 42 4c 45 20 4f 4e 2e 74 31 28 61 2c 20   TABLE ON.t1(a, 
2c90: 62 2c 20 63 29 3b 20 0a 20 20 7d 0a 7d 20 7b 31  b, c); .  }.} {1
2ca0: 20 7b 6e 65 61 72 20 22 4f 4e 22 3a 20 73 79 6e   {near "ON": syn
2cb0: 74 61 78 20 65 72 72 6f 72 7d 7d 0a 64 6f 5f 74  tax error}}.do_t
2cc0: 65 73 74 20 61 6c 74 65 72 2d 33 2e 32 2e 34 20  est alter-3.2.4 
2cd0: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  {.  catchsql {. 
2ce0: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
2cf0: 27 4f 4e 27 2e 74 31 28 61 2c 20 62 2c 20 63 29  'ON'.t1(a, b, c)
2d00: 3b 20 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a  ; .  }.} {0 {}}.
2d10: 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 33 2e  do_test alter-3.
2d20: 32 2e 34 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  2.4 {.  catchsql
2d30: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41   {.    CREATE TA
2d40: 42 4c 45 20 27 4f 4e 27 2e 4f 4e 28 61 2c 20 62  BLE 'ON'.ON(a, b
2d50: 2c 20 63 29 3b 20 0a 20 20 7d 0a 7d 20 7b 31 20  , c); .  }.} {1 
2d60: 7b 6e 65 61 72 20 22 4f 4e 22 3a 20 73 79 6e 74  {near "ON": synt
2d70: 61 78 20 65 72 72 6f 72 7d 7d 0a 64 6f 5f 74 65  ax error}}.do_te
2d80: 73 74 20 61 6c 74 65 72 2d 33 2e 32 2e 35 20 7b  st alter-3.2.5 {
2d90: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
2da0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 27    CREATE TABLE '
2db0: 4f 4e 27 2e 27 4f 4e 27 28 61 2c 20 62 2c 20 63  ON'.'ON'(a, b, c
2dc0: 29 3b 20 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d  ); .  }.} {0 {}}
2dd0: 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 33  .do_test alter-3
2de0: 2e 32 2e 36 20 7b 0a 20 20 63 61 74 63 68 73 71  .2.6 {.  catchsq
2df0: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
2e00: 41 42 4c 45 20 74 31 30 28 61 2c 20 4f 4e 2c 20  ABLE t10(a, ON, 
2e10: 63 29 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 6e 65  c);.  }.} {1 {ne
2e20: 61 72 20 22 4f 4e 22 3a 20 73 79 6e 74 61 78 20  ar "ON": syntax 
2e30: 65 72 72 6f 72 7d 7d 0a 64 6f 5f 74 65 73 74 20  error}}.do_test 
2e40: 61 6c 74 65 72 2d 33 2e 32 2e 37 20 7b 0a 20 20  alter-3.2.7 {.  
2e50: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 43  catchsql {.    C
2e60: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 30 28  REATE TABLE t10(
2e70: 61 2c 20 27 4f 4e 27 2c 20 63 29 3b 0a 20 20 7d  a, 'ON', c);.  }
2e80: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
2e90: 74 20 61 6c 74 65 72 2d 33 2e 32 2e 38 20 7b 0a  t alter-3.2.8 {.
2ea0: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
2eb0: 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20   CREATE TRIGGER 
2ec0: 74 72 69 67 34 20 41 46 54 45 52 20 49 4e 53 45  trig4 AFTER INSE
2ed0: 52 54 20 4f 4e 20 4f 4e 20 42 45 47 49 4e 20 53  RT ON ON BEGIN S
2ee0: 45 4c 45 43 54 20 31 3b 20 45 4e 44 3b 0a 20 20  ELECT 1; END;.  
2ef0: 7d 0a 7d 20 7b 31 20 7b 6e 65 61 72 20 22 4f 4e  }.} {1 {near "ON
2f00: 22 3a 20 73 79 6e 74 61 78 20 65 72 72 6f 72 7d  ": syntax error}
2f10: 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d  }.do_test alter-
2f20: 33 2e 32 2e 39 20 7b 0a 20 20 63 61 74 63 68 73  3.2.9 {.  catchs
2f30: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
2f40: 54 52 49 47 47 45 52 20 27 6f 6e 27 2e 74 72 69  TRIGGER 'on'.tri
2f50: 67 34 20 41 46 54 45 52 20 49 4e 53 45 52 54 20  g4 AFTER INSERT 
2f60: 4f 4e 20 27 4f 4e 27 20 42 45 47 49 4e 20 53 45  ON 'ON' BEGIN SE
2f70: 4c 45 43 54 20 31 3b 20 45 4e 44 3b 0a 20 20 7d  LECT 1; END;.  }
2f80: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
2f90: 74 20 61 6c 74 65 72 2d 33 2e 32 2e 31 30 20 7b  t alter-3.2.10 {
2fa0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
2fb0: 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31 30 3b   DROP TABLE t10;
2fc0: 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 64 6f 5f 74 65  .  }.} {}..do_te
2fd0: 73 74 20 61 6c 74 65 72 2d 33 2e 33 2e 31 20 7b  st alter-3.3.1 {
2fe0: 0a 20 20 65 78 65 63 73 71 6c 20 5b 73 75 62 73  .  execsql [subs
2ff0: 74 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  t {.    CREATE T
3000: 41 42 4c 45 20 74 62 6c 31 28 61 2c 20 62 2c 20  ABLE tbl1(a, b, 
3010: 63 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 24  c);.    CREATE $
3020: 3a 3a 74 65 6d 70 20 54 52 49 47 47 45 52 20 74  ::temp TRIGGER t
3030: 72 69 67 31 20 41 46 54 45 52 20 49 4e 53 45 52  rig1 AFTER INSER
3040: 54 20 4f 4e 20 74 62 6c 31 20 42 45 47 49 4e 0a  T ON tbl1 BEGIN.
3050: 20 20 20 20 20 20 53 45 4c 45 43 54 20 74 72 69        SELECT tri
3060: 67 66 75 6e 63 28 27 74 72 69 67 31 27 2c 20 6e  gfunc('trig1', n
3070: 65 77 2e 61 2c 20 6e 65 77 2e 62 2c 20 6e 65 77  ew.a, new.b, new
3080: 2e 63 29 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20  .c);.    END;.  
3090: 7d 5d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20  }].} {}.do_test 
30a0: 61 6c 74 65 72 2d 33 2e 33 2e 32 20 7b 0a 20 20  alter-3.3.2 {.  
30b0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e  execsql {.    IN
30c0: 53 45 52 54 20 49 4e 54 4f 20 74 62 6c 31 20 56  SERT INTO tbl1 V
30d0: 41 4c 55 45 53 28 27 61 27 2c 20 27 62 27 2c 20  ALUES('a', 'b', 
30e0: 27 63 27 29 3b 0a 20 20 7d 0a 20 20 73 65 74 20  'c');.  }.  set 
30f0: 3a 3a 54 52 49 47 47 45 52 0a 7d 20 7b 74 72 69  ::TRIGGER.} {tri
3100: 67 31 20 61 20 62 20 63 7d 0a 64 6f 5f 74 65 73  g1 a b c}.do_tes
3110: 74 20 61 6c 74 65 72 2d 33 2e 33 2e 33 20 7b 0a  t alter-3.3.3 {.
3120: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
3130: 41 4c 54 45 52 20 54 41 42 4c 45 20 74 62 6c 31  ALTER TABLE tbl1
3140: 20 52 45 4e 41 4d 45 20 54 4f 20 74 62 6c 32 3b   RENAME TO tbl2;
3150: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
3160: 20 74 62 6c 32 20 56 41 4c 55 45 53 28 27 64 27   tbl2 VALUES('d'
3170: 2c 20 27 65 27 2c 20 27 66 27 29 3b 0a 20 20 7d  , 'e', 'f');.  }
3180: 20 0a 20 20 73 65 74 20 3a 3a 54 52 49 47 47 45   .  set ::TRIGGE
3190: 52 0a 7d 20 7b 74 72 69 67 31 20 64 20 65 20 66  R.} {trig1 d e f
31a0: 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d  }.do_test alter-
31b0: 33 2e 33 2e 34 20 7b 0a 20 20 65 78 65 63 73 71  3.3.4 {.  execsq
31c0: 6c 20 5b 73 75 62 73 74 20 7b 0a 20 20 20 20 43  l [subst {.    C
31d0: 52 45 41 54 45 20 24 3a 3a 74 65 6d 70 20 54 52  REATE $::temp TR
31e0: 49 47 47 45 52 20 74 72 69 67 32 20 41 46 54 45  IGGER trig2 AFTE
31f0: 52 20 55 50 44 41 54 45 20 4f 4e 20 74 62 6c 32  R UPDATE ON tbl2
3200: 20 42 45 47 49 4e 0a 20 20 20 20 20 20 53 45 4c   BEGIN.      SEL
3210: 45 43 54 20 74 72 69 67 66 75 6e 63 28 27 74 72  ECT trigfunc('tr
3220: 69 67 32 27 2c 20 6e 65 77 2e 61 2c 20 6e 65 77  ig2', new.a, new
3230: 2e 62 2c 20 6e 65 77 2e 63 29 3b 0a 20 20 20 20  .b, new.c);.    
3240: 45 4e 44 3b 0a 20 20 7d 5d 20 0a 7d 20 7b 7d 0a  END;.  }] .} {}.
3250: 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 33 2e  do_test alter-3.
3260: 33 2e 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  3.5 {.  execsql 
3270: 7b 0a 20 20 20 20 41 4c 54 45 52 20 54 41 42 4c  {.    ALTER TABL
3280: 45 20 74 62 6c 32 20 52 45 4e 41 4d 45 20 54 4f  E tbl2 RENAME TO
3290: 20 74 62 6c 33 3b 0a 20 20 20 20 49 4e 53 45 52   tbl3;.    INSER
32a0: 54 20 49 4e 54 4f 20 74 62 6c 33 20 56 41 4c 55  T INTO tbl3 VALU
32b0: 45 53 28 27 67 27 2c 20 27 68 27 2c 20 27 69 27  ES('g', 'h', 'i'
32c0: 29 3b 0a 20 20 7d 20 0a 20 20 73 65 74 20 3a 3a  );.  } .  set ::
32d0: 54 52 49 47 47 45 52 0a 7d 20 7b 74 72 69 67 31  TRIGGER.} {trig1
32e0: 20 67 20 68 20 69 7d 0a 64 6f 5f 74 65 73 74 20   g h i}.do_test 
32f0: 61 6c 74 65 72 2d 33 2e 33 2e 36 20 7b 0a 20 20  alter-3.3.6 {.  
3300: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 55 50  execsql {.    UP
3310: 44 41 54 45 20 74 62 6c 33 20 53 45 54 20 61 20  DATE tbl3 SET a 
3320: 3d 20 27 47 27 20 77 68 65 72 65 20 61 20 3d 20  = 'G' where a = 
3330: 27 67 27 3b 0a 20 20 7d 20 0a 20 20 73 65 74 20  'g';.  } .  set 
3340: 3a 3a 54 52 49 47 47 45 52 0a 7d 20 7b 74 72 69  ::TRIGGER.} {tri
3350: 67 32 20 47 20 68 20 69 7d 0a 64 6f 5f 74 65 73  g2 G h i}.do_tes
3360: 74 20 61 6c 74 65 72 2d 33 2e 33 2e 37 20 7b 0a  t alter-3.3.7 {.
3370: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
3380: 44 52 4f 50 20 54 41 42 4c 45 20 74 62 6c 33 3b  DROP TABLE tbl3;
3390: 0a 20 20 7d 0a 7d 20 7b 7d 0a 69 66 63 61 70 61  .  }.} {}.ifcapa
33a0: 62 6c 65 20 74 65 6d 70 64 62 20 7b 0a 20 20 64  ble tempdb {.  d
33b0: 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 33 2e 33  o_test alter-3.3
33c0: 2e 38 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .8 {.    execsql
33d0: 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20   {.      SELECT 
33e0: 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65  * FROM sqlite_te
33f0: 6d 70 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20  mp_master WHERE 
3400: 74 79 70 65 20 3d 20 27 74 72 69 67 67 65 72 27  type = 'trigger'
3410: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 7d  ;.    }.  } {}.}
3420: 0a 0a 7d 20 3b 23 20 69 66 63 61 70 61 62 6c 65  ..} ;# ifcapable
3430: 20 74 72 69 67 67 65 72 0a 0a 23 20 49 66 20 74   trigger..# If t
3440: 68 65 20 62 75 69 6c 64 20 64 6f 65 73 20 6e 6f  he build does no
3450: 74 20 69 6e 63 6c 75 64 65 20 41 55 54 4f 49 4e  t include AUTOIN
3460: 43 52 45 4d 45 4e 54 20 66 69 65 6c 64 73 2c 20  CREMENT fields, 
3470: 6f 6d 69 74 20 61 6c 74 65 72 2d 34 2e 2a 2e 0a  omit alter-4.*..
3480: 69 66 63 61 70 61 62 6c 65 20 61 75 74 6f 69 6e  ifcapable autoin
3490: 63 20 7b 0a 0a 64 6f 5f 74 65 73 74 20 61 6c 74  c {..do_test alt
34a0: 65 72 2d 34 2e 31 20 7b 0a 20 20 65 78 65 63 73  er-4.1 {.  execs
34b0: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
34c0: 54 41 42 4c 45 20 74 62 6c 31 28 61 20 49 4e 54  TABLE tbl1(a INT
34d0: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
34e0: 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 29 3b   AUTOINCREMENT);
34f0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
3500: 20 74 62 6c 31 20 56 41 4c 55 45 53 28 31 30 29   tbl1 VALUES(10)
3510: 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65  ;.  }.} {}.do_te
3520: 73 74 20 61 6c 74 65 72 2d 34 2e 32 20 7b 0a 20  st alter-4.2 {. 
3530: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 49   execsql {.    I
3540: 4e 53 45 52 54 20 49 4e 54 4f 20 74 62 6c 31 20  NSERT INTO tbl1 
3550: 56 41 4c 55 45 53 28 4e 55 4c 4c 29 3b 0a 20 20  VALUES(NULL);.  
3560: 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20    SELECT a FROM 
3570: 74 62 6c 31 3b 0a 20 20 7d 0a 7d 20 7b 31 30 20  tbl1;.  }.} {10 
3580: 31 31 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65  11}.do_test alte
3590: 72 2d 34 2e 33 20 7b 0a 20 20 65 78 65 63 73 71  r-4.3 {.  execsq
35a0: 6c 20 7b 0a 20 20 20 20 41 4c 54 45 52 20 54 41  l {.    ALTER TA
35b0: 42 4c 45 20 74 62 6c 31 20 52 45 4e 41 4d 45 20  BLE tbl1 RENAME 
35c0: 54 4f 20 74 62 6c 32 3b 0a 20 20 20 20 44 45 4c  TO tbl2;.    DEL
35d0: 45 54 45 20 46 52 4f 4d 20 74 62 6c 32 3b 0a 20  ETE FROM tbl2;. 
35e0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
35f0: 62 6c 32 20 56 41 4c 55 45 53 28 4e 55 4c 4c 29  bl2 VALUES(NULL)
3600: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20 46  ;.    SELECT a F
3610: 52 4f 4d 20 74 62 6c 32 3b 0a 20 20 7d 0a 7d 20  ROM tbl2;.  }.} 
3620: 7b 31 32 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74  {12}.do_test alt
3630: 65 72 2d 34 2e 34 20 7b 0a 20 20 65 78 65 63 73  er-4.4 {.  execs
3640: 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20 54 41  ql {.    DROP TA
3650: 42 4c 45 20 74 62 6c 32 3b 0a 20 20 7d 0a 7d 20  BLE tbl2;.  }.} 
3660: 7b 7d 0a 0a 7d 20 3b 23 20 69 66 63 61 70 61 62  {}..} ;# ifcapab
3670: 6c 65 20 61 75 74 6f 69 6e 63 0a 0a 23 20 54 65  le autoinc..# Te
3680: 73 74 20 74 68 61 74 20 69 74 20 69 73 20 4f 6b  st that it is Ok
3690: 20 74 6f 20 65 78 65 63 75 74 65 20 61 6e 20 41   to execute an A
36a0: 4c 54 45 52 20 54 41 42 4c 45 20 69 6d 6d 65 64  LTER TABLE immed
36b0: 69 61 74 65 6c 79 20 61 66 74 65 72 0a 23 20 6f  iately after.# o
36c0: 70 65 6e 69 6e 67 20 61 20 64 61 74 61 62 61 73  pening a databas
36d0: 65 2e 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72  e..do_test alter
36e0: 2d 35 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  -5.1 {.  execsql
36f0: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41   {.    CREATE TA
3700: 42 4c 45 20 74 62 6c 31 28 61 2c 20 62 2c 20 63  BLE tbl1(a, b, c
3710: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
3720: 54 4f 20 74 62 6c 31 20 56 41 4c 55 45 53 28 27  TO tbl1 VALUES('
3730: 78 27 2c 20 27 79 27 2c 20 27 7a 27 29 3b 0a 20  x', 'y', 'z');. 
3740: 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20   }.} {}.do_test 
3750: 61 6c 74 65 72 2d 35 2e 32 20 7b 0a 20 20 73 71  alter-5.2 {.  sq
3760: 6c 69 74 65 33 20 64 62 32 20 74 65 73 74 2e 64  lite3 db2 test.d
3770: 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  b.  execsql {.  
3780: 20 20 41 4c 54 45 52 20 54 41 42 4c 45 20 74 62    ALTER TABLE tb
3790: 6c 31 20 52 45 4e 41 4d 45 20 54 4f 20 74 62 6c  l1 RENAME TO tbl
37a0: 32 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20  2;.    SELECT * 
37b0: 46 52 4f 4d 20 74 62 6c 32 3b 0a 20 20 7d 20 64  FROM tbl2;.  } d
37c0: 62 32 0a 7d 20 7b 78 20 79 20 7a 7d 0a 64 6f 5f  b2.} {x y z}.do_
37d0: 74 65 73 74 20 61 6c 74 65 72 2d 35 2e 33 20 7b  test alter-5.3 {
37e0: 0a 20 20 64 62 32 20 63 6c 6f 73 65 0a 7d 20 7b  .  db2 close.} {
37f0: 7d 0a 0a 66 6f 72 65 61 63 68 20 74 62 6c 6e 61  }..foreach tblna
3800: 6d 65 20 5b 65 78 65 63 73 71 6c 20 7b 0a 20 20  me [execsql {.  
3810: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
3820: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57   sqlite_master W
3830: 48 45 52 45 20 74 79 70 65 3d 27 74 61 62 6c 65  HERE type='table
3840: 27 20 41 4e 44 20 6e 61 6d 65 20 4e 4f 54 20 4c  ' AND name NOT L
3850: 49 4b 45 20 27 73 71 6c 69 74 65 25 27 0a 7d 5d  IKE 'sqlite%'.}]
3860: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 22 44 52   {.  execsql "DR
3870: 4f 50 20 54 41 42 4c 45 20 5c 22 24 74 62 6c 6e  OP TABLE \"$tbln
3880: 61 6d 65 5c 22 22 0a 7d 0a 0a 73 65 74 20 3a 3a  ame\"".}..set ::
3890: 74 62 6c 5f 6e 61 6d 65 20 22 61 62 63 5c 75 41  tbl_name "abc\uA
38a0: 42 43 44 64 65 66 22 0a 64 6f 5f 74 65 73 74 20  BCDdef".do_test 
38b0: 61 6c 74 65 72 2d 36 2e 31 20 7b 0a 20 20 73 74  alter-6.1 {.  st
38c0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74  ring length $::t
38d0: 62 6c 5f 6e 61 6d 65 0a 7d 20 7b 37 7d 0a 64 6f  bl_name.} {7}.do
38e0: 5f 74 65 73 74 20 61 6c 74 65 72 2d 36 2e 32 20  _test alter-6.2 
38f0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 22 0a 20 20  {.  execsql ".  
3900: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 24    CREATE TABLE $
3910: 7b 74 62 6c 5f 6e 61 6d 65 7d 28 61 2c 20 62 2c  {tbl_name}(a, b,
3920: 20 63 29 3b 0a 20 20 22 0a 20 20 73 65 74 20 3a   c);.  ".  set :
3930: 3a 6f 69 64 20 5b 65 78 65 63 73 71 6c 20 7b 53  :oid [execsql {S
3940: 45 4c 45 43 54 20 6d 61 78 28 6f 69 64 29 20 46  ELECT max(oid) F
3950: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
3960: 72 7d 5d 0a 20 20 65 78 65 63 73 71 6c 20 22 0a  r}].  execsql ".
3970: 20 20 20 20 53 45 4c 45 43 54 20 73 71 6c 20 46      SELECT sql F
3980: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
3990: 72 20 57 48 45 52 45 20 6f 69 64 20 3d 20 24 3a  r WHERE oid = $:
39a0: 3a 6f 69 64 3b 0a 20 20 22 0a 7d 20 22 7b 43 52  :oid;.  ".} "{CR
39b0: 45 41 54 45 20 54 41 42 4c 45 20 24 7b 3a 3a 74  EATE TABLE ${::t
39c0: 62 6c 5f 6e 61 6d 65 7d 28 61 2c 20 62 2c 20 63  bl_name}(a, b, c
39d0: 29 7d 22 0a 65 78 65 63 73 71 6c 20 22 0a 20 20  )}".execsql ".  
39e0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 24 7b  SELECT * FROM ${
39f0: 3a 3a 74 62 6c 5f 6e 61 6d 65 7d 0a 22 0a 73 65  ::tbl_name}.".se
3a00: 74 20 3a 3a 74 62 6c 5f 6e 61 6d 65 32 20 22 61  t ::tbl_name2 "a
3a10: 62 63 58 64 65 66 22 0a 64 6f 5f 74 65 73 74 20  bcXdef".do_test 
3a20: 61 6c 74 65 72 2d 36 2e 33 20 7b 0a 20 20 65 78  alter-6.3 {.  ex
3a30: 65 63 73 71 6c 20 22 0a 20 20 20 20 41 4c 54 45  ecsql ".    ALTE
3a40: 52 20 54 41 42 4c 45 20 24 3a 3a 74 62 6c 5f 6e  R TABLE $::tbl_n
3a50: 61 6d 65 20 52 45 4e 41 4d 45 20 54 4f 20 24 3a  ame RENAME TO $:
3a60: 3a 74 62 6c 5f 6e 61 6d 65 32 20 0a 20 20 22 0a  :tbl_name2 .  ".
3a70: 20 20 65 78 65 63 73 71 6c 20 22 0a 20 20 20 20    execsql ".    
3a80: 53 45 4c 45 43 54 20 73 71 6c 20 46 52 4f 4d 20  SELECT sql FROM 
3a90: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48  sqlite_master WH
3aa0: 45 52 45 20 6f 69 64 20 3d 20 24 3a 3a 6f 69 64  ERE oid = $::oid
3ab0: 0a 20 20 22 0a 7d 20 22 7b 43 52 45 41 54 45 20  .  ".} "{CREATE 
3ac0: 54 41 42 4c 45 20 27 24 7b 3a 3a 74 62 6c 5f 6e  TABLE '${::tbl_n
3ad0: 61 6d 65 32 7d 27 28 61 2c 20 62 2c 20 63 29 7d  ame2}'(a, b, c)}
3ae0: 22 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d  ".do_test alter-
3af0: 36 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  6.4 {.  execsql 
3b00: 22 0a 20 20 20 20 41 4c 54 45 52 20 54 41 42 4c  ".    ALTER TABL
3b10: 45 20 24 3a 3a 74 62 6c 5f 6e 61 6d 65 32 20 52  E $::tbl_name2 R
3b20: 45 4e 41 4d 45 20 54 4f 20 24 3a 3a 74 62 6c 5f  ENAME TO $::tbl_
3b30: 6e 61 6d 65 0a 20 20 22 0a 20 20 65 78 65 63 73  name.  ".  execs
3b40: 71 6c 20 22 0a 20 20 20 20 53 45 4c 45 43 54 20  ql ".    SELECT 
3b50: 73 71 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  sql FROM sqlite_
3b60: 6d 61 73 74 65 72 20 57 48 45 52 45 20 6f 69 64  master WHERE oid
3b70: 20 3d 20 24 3a 3a 6f 69 64 0a 20 20 22 0a 7d 20   = $::oid.  ".} 
3b80: 22 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 27  "{CREATE TABLE '
3b90: 24 7b 3a 3a 74 62 6c 5f 6e 61 6d 65 7d 27 28 61  ${::tbl_name}'(a
3ba0: 2c 20 62 2c 20 63 29 7d 22 0a 73 65 74 20 3a 3a  , b, c)}".set ::
3bb0: 63 6f 6c 5f 6e 61 6d 65 20 67 68 69 5c 31 32 33  col_name ghi\123
3bc0: 34 5c 6a 6b 6c 0a 64 6f 5f 74 65 73 74 20 61 6c  4\jkl.do_test al
3bd0: 74 65 72 2d 36 2e 35 20 7b 0a 20 20 65 78 65 63  ter-6.5 {.  exec
3be0: 73 71 6c 20 22 0a 20 20 20 20 41 4c 54 45 52 20  sql ".    ALTER 
3bf0: 54 41 42 4c 45 20 24 3a 3a 74 62 6c 5f 6e 61 6d  TABLE $::tbl_nam
3c00: 65 20 41 44 44 20 43 4f 4c 55 4d 4e 20 24 3a 3a  e ADD COLUMN $::
3c10: 63 6f 6c 5f 6e 61 6d 65 20 56 41 52 43 48 41 52  col_name VARCHAR
3c20: 0a 20 20 22 0a 20 20 65 78 65 63 73 71 6c 20 22  .  ".  execsql "
3c30: 0a 20 20 20 20 53 45 4c 45 43 54 20 73 71 6c 20  .    SELECT sql 
3c40: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
3c50: 65 72 20 57 48 45 52 45 20 6f 69 64 20 3d 20 24  er WHERE oid = $
3c60: 3a 3a 6f 69 64 0a 20 20 22 0a 7d 20 22 7b 43 52  ::oid.  ".} "{CR
3c70: 45 41 54 45 20 54 41 42 4c 45 20 27 24 7b 3a 3a  EATE TABLE '${::
3c80: 74 62 6c 5f 6e 61 6d 65 7d 27 28 61 2c 20 62 2c  tbl_name}'(a, b,
3c90: 20 63 2c 20 24 3a 3a 63 6f 6c 5f 6e 61 6d 65 20   c, $::col_name 
3ca0: 56 41 52 43 48 41 52 29 7d 22 0a 73 65 74 20 3a  VARCHAR)}".set :
3cb0: 3a 63 6f 6c 5f 6e 61 6d 65 32 20 42 5c 33 34 32  :col_name2 B\342
3cc0: 31 5c 41 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65  1\A.do_test alte
3cd0: 72 2d 36 2e 36 20 7b 0a 20 20 64 62 20 63 6c 6f  r-6.6 {.  db clo
3ce0: 73 65 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20  se.  sqlite3 db 
3cf0: 74 65 73 74 2e 64 62 0a 20 20 65 78 65 63 73 71  test.db.  execsq
3d00: 6c 20 22 0a 20 20 20 20 41 4c 54 45 52 20 54 41  l ".    ALTER TA
3d10: 42 4c 45 20 24 3a 3a 74 62 6c 5f 6e 61 6d 65 20  BLE $::tbl_name 
3d20: 41 44 44 20 43 4f 4c 55 4d 4e 20 24 3a 3a 63 6f  ADD COLUMN $::co
3d30: 6c 5f 6e 61 6d 65 32 0a 20 20 22 0a 20 20 65 78  l_name2.  ".  ex
3d40: 65 63 73 71 6c 20 22 0a 20 20 20 20 53 45 4c 45  ecsql ".    SELE
3d50: 43 54 20 73 71 6c 20 46 52 4f 4d 20 73 71 6c 69  CT sql FROM sqli
3d60: 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20  te_master WHERE 
3d70: 6f 69 64 20 3d 20 24 3a 3a 6f 69 64 0a 20 20 22  oid = $::oid.  "
3d80: 0a 7d 20 22 7b 43 52 45 41 54 45 20 54 41 42 4c  .} "{CREATE TABL
3d90: 45 20 27 24 7b 3a 3a 74 62 6c 5f 6e 61 6d 65 7d  E '${::tbl_name}
3da0: 27 28 61 2c 20 62 2c 20 63 2c 20 24 3a 3a 63 6f  '(a, b, c, $::co
3db0: 6c 5f 6e 61 6d 65 20 56 41 52 43 48 41 52 2c 20  l_name VARCHAR, 
3dc0: 24 3a 3a 63 6f 6c 5f 6e 61 6d 65 32 29 7d 22 0a  $::col_name2)}".
3dd0: 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 36 2e  do_test alter-6.
3de0: 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 22 0a  7 {.  execsql ".
3df0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
3e00: 24 7b 3a 3a 74 62 6c 5f 6e 61 6d 65 7d 20 56 41  ${::tbl_name} VA
3e10: 4c 55 45 53 28 31 2c 20 32 2c 20 33 2c 20 34 2c  LUES(1, 2, 3, 4,
3e20: 20 35 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20   5);.    SELECT 
3e30: 24 3a 3a 63 6f 6c 5f 6e 61 6d 65 2c 20 24 3a 3a  $::col_name, $::
3e40: 63 6f 6c 5f 6e 61 6d 65 32 20 46 52 4f 4d 20 24  col_name2 FROM $
3e50: 3a 3a 74 62 6c 5f 6e 61 6d 65 3b 0a 20 20 22 0a  ::tbl_name;.  ".
3e60: 7d 20 7b 34 20 35 7d 0a 0a 23 20 54 69 63 6b 65  } {4 5}..# Ticke
3e70: 74 20 23 31 36 36 35 3a 20 20 4d 61 6b 65 20 73  t #1665:  Make s
3e80: 75 72 65 20 41 4c 54 45 52 20 54 41 42 4c 45 20  ure ALTER TABLE 
3e90: 41 44 44 20 43 4f 4c 55 4d 4e 20 77 6f 72 6b 73  ADD COLUMN works
3ea0: 20 6f 6e 20 61 20 74 61 62 6c 65 0a 23 20 74 68   on a table.# th
3eb0: 61 74 20 69 6e 63 6c 75 64 65 73 20 61 20 43 4f  at includes a CO
3ec0: 4c 4c 41 54 45 20 63 6c 61 75 73 65 2e 0a 23 0a  LLATE clause..#.
3ed0: 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 37 2e  do_test alter-7.
3ee0: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  1 {.  execsql {.
3ef0: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
3f00: 20 74 31 28 61 20 54 45 58 54 20 43 4f 4c 4c 41   t1(a TEXT COLLA
3f10: 54 45 20 42 49 4e 41 52 59 29 3b 0a 20 20 20 20  TE BINARY);.    
3f20: 41 4c 54 45 52 20 54 41 42 4c 45 20 74 31 20 41  ALTER TABLE t1 A
3f30: 44 44 20 43 4f 4c 55 4d 4e 20 62 20 49 4e 54 45  DD COLUMN b INTE
3f40: 47 45 52 20 43 4f 4c 4c 41 54 45 20 4e 4f 43 41  GER COLLATE NOCA
3f50: 53 45 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  SE;.    INSERT I
3f60: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31 2c  NTO t1 VALUES(1,
3f70: 27 2d 32 27 29 3b 0a 20 20 20 20 49 4e 53 45 52  '-2');.    INSER
3f80: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
3f90: 28 35 2e 34 65 2d 38 2c 27 35 2e 34 65 2d 38 27  (5.4e-8,'5.4e-8'
3fa0: 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 74 79  );.    SELECT ty
3fb0: 70 65 6f 66 28 61 29 2c 20 61 2c 20 74 79 70 65  peof(a), a, type
3fc0: 6f 66 28 62 29 2c 20 62 20 46 52 4f 4d 20 74 31  of(b), b FROM t1
3fd0: 3b 0a 20 20 7d 0a 7d 20 7b 74 65 78 74 20 31 20  ;.  }.} {text 1 
3fe0: 69 6e 74 65 67 65 72 20 2d 32 20 74 65 78 74 20  integer -2 text 
3ff0: 35 2e 34 65 2d 38 20 72 65 61 6c 20 35 2e 34 65  5.4e-8 real 5.4e
4000: 2d 30 38 7d 0a 0a 23 20 4d 61 6b 65 20 73 75 72  -08}..# Make sur
4010: 65 20 74 68 61 74 20 77 68 65 6e 20 61 20 63 6f  e that when a co
4020: 6c 75 6d 6e 20 69 73 20 61 64 64 65 64 20 62 79  lumn is added by
4030: 20 41 4c 54 45 52 20 54 41 42 4c 45 20 41 44 44   ALTER TABLE ADD
4040: 20 43 4f 4c 55 4d 4e 20 61 6e 64 20 68 61 73 0a   COLUMN and has.
4050: 23 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c 75  # a default valu
4060: 65 20 74 68 61 74 20 74 68 65 20 64 65 66 61 75  e that the defau
4070: 6c 74 20 76 61 6c 75 65 20 69 73 20 75 73 65 64  lt value is used
4080: 20 62 79 20 61 67 67 72 65 67 61 74 65 20 66 75   by aggregate fu
4090: 6e 63 74 69 6f 6e 73 2e 0a 23 0a 64 6f 5f 74 65  nctions..#.do_te
40a0: 73 74 20 61 6c 74 65 72 2d 38 2e 31 20 7b 0a 20  st alter-8.1 {. 
40b0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43   execsql {.    C
40c0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 32 28 61  REATE TABLE t2(a
40d0: 20 49 4e 54 45 47 45 52 29 3b 0a 20 20 20 20 49   INTEGER);.    I
40e0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41  NSERT INTO t2 VA
40f0: 4c 55 45 53 28 31 29 3b 0a 20 20 20 20 49 4e 53  LUES(1);.    INS
4100: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
4110: 45 53 28 31 29 3b 0a 20 20 20 20 49 4e 53 45 52  ES(1);.    INSER
4120: 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53  T INTO t2 VALUES
4130: 28 32 29 3b 0a 20 20 20 20 41 4c 54 45 52 20 54  (2);.    ALTER T
4140: 41 42 4c 45 20 74 32 20 41 44 44 20 43 4f 4c 55  ABLE t2 ADD COLU
4150: 4d 4e 20 62 20 49 4e 54 45 47 45 52 20 44 45 46  MN b INTEGER DEF
4160: 41 55 4c 54 20 39 3b 0a 20 20 20 20 53 45 4c 45  AULT 9;.    SELE
4170: 43 54 20 73 75 6d 28 62 29 20 46 52 4f 4d 20 74  CT sum(b) FROM t
4180: 32 3b 0a 20 20 7d 0a 7d 20 7b 32 37 7d 0a 64 6f  2;.  }.} {27}.do
4190: 5f 74 65 73 74 20 61 6c 74 65 72 2d 38 2e 32 20  _test alter-8.2 
41a0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
41b0: 20 20 53 45 4c 45 43 54 20 61 2c 20 73 75 6d 28    SELECT a, sum(
41c0: 62 29 20 46 52 4f 4d 20 74 32 20 47 52 4f 55 50  b) FROM t2 GROUP
41d0: 20 42 59 20 61 3b 0a 20 20 7d 0a 7d 20 7b 31 20   BY a;.  }.} {1 
41e0: 31 38 20 32 20 39 7d 0a 0a 23 2d 2d 2d 2d 2d 2d  18 2 9}..#------
41f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4200: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4210: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4220: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4230: 2d 2d 2d 2d 0a 23 20 61 6c 74 65 72 2d 39 2e 58  ----.# alter-9.X
4240: 20 2d 20 53 70 65 63 69 61 6c 20 74 65 73 74 3a   - Special test:
4250: 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 73   Make sure the s
4260: 71 6c 69 74 65 5f 72 65 6e 61 6d 65 5f 74 72 69  qlite_rename_tri
4270: 67 67 65 72 28 29 20 61 6e 64 0a 23 20 72 65 6e  gger() and.# ren
4280: 61 6d 65 5f 74 61 62 6c 65 28 29 20 66 75 6e 63  ame_table() func
4290: 74 69 6f 6e 73 20 64 6f 20 6e 6f 74 20 63 72 61  tions do not cra
42a0: 73 68 20 77 68 65 6e 20 68 61 6e 64 65 64 20 62  sh when handed b
42b0: 61 64 20 69 6e 70 75 74 2e 0a 23 0a 69 66 63 61  ad input..#.ifca
42c0: 70 61 62 6c 65 20 74 72 69 67 67 65 72 20 7b 0a  pable trigger {.
42d0: 20 20 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d    do_test alter-
42e0: 39 2e 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71  9.1 {.    execsq
42f0: 6c 20 7b 53 45 4c 45 43 54 20 53 51 4c 49 54 45  l {SELECT SQLITE
4300: 5f 52 45 4e 41 4d 45 5f 54 52 49 47 47 45 52 28  _RENAME_TRIGGER(
4310: 30 2c 30 29 7d 0a 20 20 7d 20 7b 7b 7d 7d 0a 7d  0,0)}.  } {{}}.}
4320: 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 39  .do_test alter-9
4330: 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .2 {.  execsql {
4340: 0a 20 20 20 20 53 45 4c 45 43 54 20 53 51 4c 49  .    SELECT SQLI
4350: 54 45 5f 52 45 4e 41 4d 45 5f 54 41 42 4c 45 28  TE_RENAME_TABLE(
4360: 30 2c 30 29 3b 0a 20 20 20 20 53 45 4c 45 43 54  0,0);.    SELECT
4370: 20 53 51 4c 49 54 45 5f 52 45 4e 41 4d 45 5f 54   SQLITE_RENAME_T
4380: 41 42 4c 45 28 31 30 2c 32 30 29 3b 0a 20 20 20  ABLE(10,20);.   
4390: 20 53 45 4c 45 43 54 20 53 51 4c 49 54 45 5f 52   SELECT SQLITE_R
43a0: 45 4e 41 4d 45 5f 54 41 42 4c 45 28 22 66 6f 6f  ENAME_TABLE("foo
43b0: 22 2c 20 22 66 6f 6f 22 29 3b 0a 20 20 7d 0a 7d  ", "foo");.  }.}
43c0: 20 7b 7b 7d 20 7b 7d 20 7b 7d 7d 0a 0a 23 2d 2d   {{} {} {}}..#--
43d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
43e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
43f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4400: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4410: 2d 2d 2d 2d 2d 2d 0a 23 20 61 6c 74 65 72 2d 31  ------.# alter-1
4420: 30 2e 58 20 2d 20 4d 61 6b 65 20 73 75 72 65 20  0.X - Make sure 
4430: 41 4c 54 45 52 20 54 41 42 4c 45 20 77 6f 72 6b  ALTER TABLE work
4440: 73 20 77 69 74 68 20 6d 75 6c 74 69 2d 62 79 74  s with multi-byt
4450: 65 20 55 54 46 2d 38 20 63 68 61 72 61 63 74 65  e UTF-8 characte
4460: 72 73 20 0a 23 20 69 6e 20 74 68 65 20 6e 61 6d  rs .# in the nam
4470: 65 73 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 61 6c  es..#.do_test al
4480: 74 65 72 2d 31 30 2e 31 20 7b 0a 20 20 65 78 65  ter-10.1 {.  exe
4490: 63 73 71 6c 20 22 43 52 45 41 54 45 20 54 41 42  csql "CREATE TAB
44a0: 4c 45 20 78 79 7a 28 78 20 55 4e 49 51 55 45 29  LE xyz(x UNIQUE)
44b0: 22 0a 20 20 65 78 65 63 73 71 6c 20 22 41 4c 54  ".  execsql "ALT
44c0: 45 52 20 54 41 42 4c 45 20 78 79 7a 20 52 45 4e  ER TABLE xyz REN
44d0: 41 4d 45 20 54 4f 20 78 79 7a 5c 75 31 32 33 34  AME TO xyz\u1234
44e0: 61 62 63 22 0a 20 20 65 78 65 63 73 71 6c 20 7b  abc".  execsql {
44f0: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
4500: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57   sqlite_master W
4510: 48 45 52 45 20 6e 61 6d 65 20 4c 49 4b 45 20 27  HERE name LIKE '
4520: 78 79 7a 25 27 7d 0a 7d 20 5b 6c 69 73 74 20 78  xyz%'}.} [list x
4530: 79 7a 5c 75 31 32 33 34 61 62 63 5d 0a 64 6f 5f  yz\u1234abc].do_
4540: 74 65 73 74 20 61 6c 74 65 72 2d 31 30 2e 32 20  test alter-10.2 
4550: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
4560: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
4570: 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52  lite_master WHER
4580: 45 20 6e 61 6d 65 20 4c 49 4b 45 20 27 73 71 6c  E name LIKE 'sql
4590: 69 74 65 5f 61 75 74 6f 69 6e 64 65 78 25 27 7d  ite_autoindex%'}
45a0: 0a 7d 20 5b 6c 69 73 74 20 73 71 6c 69 74 65 5f  .} [list sqlite_
45b0: 61 75 74 6f 69 6e 64 65 78 5f 78 79 7a 5c 75 31  autoindex_xyz\u1
45c0: 32 33 34 61 62 63 5f 31 5d 0a 64 6f 5f 74 65 73  234abc_1].do_tes
45d0: 74 20 61 6c 74 65 72 2d 31 30 2e 33 20 7b 0a 20  t alter-10.3 {. 
45e0: 20 65 78 65 63 73 71 6c 20 22 41 4c 54 45 52 20   execsql "ALTER 
45f0: 54 41 42 4c 45 20 78 79 7a 5c 75 31 32 33 34 61  TABLE xyz\u1234a
4600: 62 63 20 52 45 4e 41 4d 45 20 54 4f 20 78 79 7a  bc RENAME TO xyz
4610: 61 62 63 22 0a 20 20 65 78 65 63 73 71 6c 20 7b  abc".  execsql {
4620: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
4630: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57   sqlite_master W
4640: 48 45 52 45 20 6e 61 6d 65 20 4c 49 4b 45 20 27  HERE name LIKE '
4650: 78 79 7a 25 27 7d 0a 7d 20 5b 6c 69 73 74 20 78  xyz%'}.} [list x
4660: 79 7a 61 62 63 5d 0a 64 6f 5f 74 65 73 74 20 61  yzabc].do_test a
4670: 6c 74 65 72 2d 31 30 2e 34 20 7b 0a 20 20 65 78  lter-10.4 {.  ex
4680: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61  ecsql {SELECT na
4690: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  me FROM sqlite_m
46a0: 61 73 74 65 72 20 57 48 45 52 45 20 6e 61 6d 65  aster WHERE name
46b0: 20 4c 49 4b 45 20 27 73 71 6c 69 74 65 5f 61 75   LIKE 'sqlite_au
46c0: 74 6f 69 6e 64 65 78 25 27 7d 0a 7d 20 5b 6c 69  toindex%'}.} [li
46d0: 73 74 20 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e  st sqlite_autoin
46e0: 64 65 78 5f 78 79 7a 61 62 63 5f 31 5d 0a 0a 64  dex_xyzabc_1]..d
46f0: 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 31 31 2e  o_test alter-11.
4700: 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 65 78  1 {.  sqlite3_ex
4710: 65 63 20 64 62 20 7b 43 52 45 41 54 45 20 54 41  ec db {CREATE TA
4720: 42 4c 45 20 74 31 31 28 25 63 36 25 63 36 29 7d  BLE t11(%c6%c6)}
4730: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
4740: 20 41 4c 54 45 52 20 54 41 42 4c 45 20 74 31 31   ALTER TABLE t11
4750: 20 41 44 44 20 43 4f 4c 55 4d 4e 20 61 62 63 3b   ADD COLUMN abc;
4760: 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20  .  }.  catchsql 
4770: 7b 0a 20 20 20 20 41 4c 54 45 52 20 54 41 42 4c  {.    ALTER TABL
4780: 45 20 74 31 31 20 41 44 44 20 43 4f 4c 55 4d 4e  E t11 ADD COLUMN
4790: 20 61 62 63 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b   abc;.  }.} {1 {
47a0: 64 75 70 6c 69 63 61 74 65 20 63 6f 6c 75 6d 6e  duplicate column
47b0: 20 6e 61 6d 65 3a 20 61 62 63 7d 7d 0a 73 65 74   name: abc}}.set
47c0: 20 69 73 75 74 66 31 36 20 5b 72 65 67 65 78 70   isutf16 [regexp
47d0: 20 31 36 20 5b 64 62 20 6f 6e 65 20 7b 50 52 41   16 [db one {PRA
47e0: 47 4d 41 20 65 6e 63 6f 64 69 6e 67 7d 5d 5d 0a  GMA encoding}]].
47f0: 69 66 20 7b 21 24 69 73 75 74 66 31 36 7d 20 7b  if {!$isutf16} {
4800: 0a 20 20 64 6f 5f 74 65 73 74 20 61 6c 74 65 72  .  do_test alter
4810: 2d 31 31 2e 32 20 7b 0a 20 20 20 20 65 78 65 63  -11.2 {.    exec
4820: 73 71 6c 20 7b 49 4e 53 45 52 54 20 49 4e 54 4f  sql {INSERT INTO
4830: 20 74 31 31 20 56 41 4c 55 45 53 28 31 2c 32 29   t11 VALUES(1,2)
4840: 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65 78  }.    sqlite3_ex
4850: 65 63 20 64 62 20 7b 53 45 4c 45 43 54 20 25 63  ec db {SELECT %c
4860: 36 25 63 36 20 41 53 20 78 79 7a 2c 20 61 62 63  6%c6 AS xyz, abc
4870: 20 46 52 4f 4d 20 74 31 31 7d 0a 20 20 7d 20 7b   FROM t11}.  } {
4880: 30 20 7b 78 79 7a 20 61 62 63 20 31 20 32 7d 7d  0 {xyz abc 1 2}}
4890: 0a 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72  .}.do_test alter
48a0: 2d 31 31 2e 33 20 7b 0a 20 20 73 71 6c 69 74 65  -11.3 {.  sqlite
48b0: 33 5f 65 78 65 63 20 64 62 20 7b 43 52 45 41 54  3_exec db {CREAT
48c0: 45 20 54 41 42 4c 45 20 74 31 31 62 28 22 25 38  E TABLE t11b("%8
48d0: 31 25 38 32 25 38 33 22 20 74 65 78 74 29 7d 0a  1%82%83" text)}.
48e0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
48f0: 41 4c 54 45 52 20 54 41 42 4c 45 20 74 31 31 62  ALTER TABLE t11b
4900: 20 41 44 44 20 43 4f 4c 55 4d 4e 20 61 62 63 3b   ADD COLUMN abc;
4910: 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20  .  }.  catchsql 
4920: 7b 0a 20 20 20 20 41 4c 54 45 52 20 54 41 42 4c  {.    ALTER TABL
4930: 45 20 74 31 31 62 20 41 44 44 20 43 4f 4c 55 4d  E t11b ADD COLUM
4940: 4e 20 61 62 63 3b 0a 20 20 7d 0a 7d 20 7b 31 20  N abc;.  }.} {1 
4950: 7b 64 75 70 6c 69 63 61 74 65 20 63 6f 6c 75 6d  {duplicate colum
4960: 6e 20 6e 61 6d 65 3a 20 61 62 63 7d 7d 0a 69 66  n name: abc}}.if
4970: 20 7b 21 24 69 73 75 74 66 31 36 7d 20 7b 0a 20   {!$isutf16} {. 
4980: 20 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 31   do_test alter-1
4990: 31 2e 34 20 7b 0a 20 20 20 20 65 78 65 63 73 71  1.4 {.    execsq
49a0: 6c 20 7b 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  l {INSERT INTO t
49b0: 31 31 62 20 56 41 4c 55 45 53 28 33 2c 34 29 7d  11b VALUES(3,4)}
49c0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65 78 65  .    sqlite3_exe
49d0: 63 20 64 62 20 7b 53 45 4c 45 43 54 20 25 38 31  c db {SELECT %81
49e0: 25 38 32 25 38 33 20 41 53 20 78 79 7a 2c 20 61  %82%83 AS xyz, a
49f0: 62 63 20 46 52 4f 4d 20 74 31 31 62 7d 0a 20 20  bc FROM t11b}.  
4a00: 7d 20 7b 30 20 7b 78 79 7a 20 61 62 63 20 33 20  } {0 {xyz abc 3 
4a10: 34 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 6c  4}}.  do_test al
4a20: 74 65 72 2d 31 31 2e 35 20 7b 0a 20 20 20 20 73  ter-11.5 {.    s
4a30: 71 6c 69 74 65 33 5f 65 78 65 63 20 64 62 20 7b  qlite3_exec db {
4a40: 53 45 4c 45 43 54 20 5b 25 38 31 25 38 32 25 38  SELECT [%81%82%8
4a50: 33 5d 20 41 53 20 78 79 7a 2c 20 61 62 63 20 46  3] AS xyz, abc F
4a60: 52 4f 4d 20 74 31 31 62 7d 0a 20 20 7d 20 7b 30  ROM t11b}.  } {0
4a70: 20 7b 78 79 7a 20 61 62 63 20 33 20 34 7d 7d 0a   {xyz abc 3 4}}.
4a80: 20 20 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d    do_test alter-
4a90: 31 31 2e 36 20 7b 0a 20 20 20 20 73 71 6c 69 74  11.6 {.    sqlit
4aa0: 65 33 5f 65 78 65 63 20 64 62 20 7b 53 45 4c 45  e3_exec db {SELE
4ab0: 43 54 20 22 25 38 31 25 38 32 25 38 33 22 20 41  CT "%81%82%83" A
4ac0: 53 20 78 79 7a 2c 20 61 62 63 20 46 52 4f 4d 20  S xyz, abc FROM 
4ad0: 74 31 31 62 7d 0a 20 20 7d 20 7b 30 20 7b 78 79  t11b}.  } {0 {xy
4ae0: 7a 20 61 62 63 20 33 20 34 7d 7d 0a 7d 0a 64 6f  z abc 3 4}}.}.do
4af0: 5f 74 65 73 74 20 61 6c 74 65 72 2d 31 31 2e 37  _test alter-11.7
4b00: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 65 78 65   {.  sqlite3_exe
4b10: 63 20 64 62 20 7b 43 52 45 41 54 45 20 54 41 42  c db {CREATE TAB
4b20: 4c 45 20 74 31 31 63 28 25 38 31 25 38 32 25 38  LE t11c(%81%82%8
4b30: 33 20 74 65 78 74 29 7d 0a 20 20 65 78 65 63 73  3 text)}.  execs
4b40: 71 6c 20 7b 0a 20 20 20 20 41 4c 54 45 52 20 54  ql {.    ALTER T
4b50: 41 42 4c 45 20 74 31 31 63 20 41 44 44 20 43 4f  ABLE t11c ADD CO
4b60: 4c 55 4d 4e 20 61 62 63 3b 0a 20 20 7d 0a 20 20  LUMN abc;.  }.  
4b70: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 41  catchsql {.    A
4b80: 4c 54 45 52 20 54 41 42 4c 45 20 74 31 31 63 20  LTER TABLE t11c 
4b90: 41 44 44 20 43 4f 4c 55 4d 4e 20 61 62 63 3b 0a  ADD COLUMN abc;.
4ba0: 20 20 7d 0a 7d 20 7b 31 20 7b 64 75 70 6c 69 63    }.} {1 {duplic
4bb0: 61 74 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 3a  ate column name:
4bc0: 20 61 62 63 7d 7d 0a 69 66 20 7b 21 24 69 73 75   abc}}.if {!$isu
4bd0: 74 66 31 36 7d 20 7b 0a 20 20 64 6f 5f 74 65 73  tf16} {.  do_tes
4be0: 74 20 61 6c 74 65 72 2d 31 31 2e 38 20 7b 0a 20  t alter-11.8 {. 
4bf0: 20 20 20 65 78 65 63 73 71 6c 20 7b 49 4e 53 45     execsql {INSE
4c00: 52 54 20 49 4e 54 4f 20 74 31 31 63 20 56 41 4c  RT INTO t11c VAL
4c10: 55 45 53 28 35 2c 36 29 7d 0a 20 20 20 20 73 71  UES(5,6)}.    sq
4c20: 6c 69 74 65 33 5f 65 78 65 63 20 64 62 20 7b 53  lite3_exec db {S
4c30: 45 4c 45 43 54 20 25 38 31 25 38 32 25 38 33 20  ELECT %81%82%83 
4c40: 41 53 20 78 79 7a 2c 20 61 62 63 20 46 52 4f 4d  AS xyz, abc FROM
4c50: 20 74 31 31 63 7d 0a 20 20 7d 20 7b 30 20 7b 78   t11c}.  } {0 {x
4c60: 79 7a 20 61 62 63 20 35 20 36 7d 7d 0a 20 20 64  yz abc 5 6}}.  d
4c70: 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 31 31 2e  o_test alter-11.
4c80: 39 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  9 {.    sqlite3_
4c90: 65 78 65 63 20 64 62 20 7b 53 45 4c 45 43 54 20  exec db {SELECT 
4ca0: 5b 25 38 31 25 38 32 25 38 33 5d 20 41 53 20 78  [%81%82%83] AS x
4cb0: 79 7a 2c 20 61 62 63 20 46 52 4f 4d 20 74 31 31  yz, abc FROM t11
4cc0: 63 7d 0a 20 20 7d 20 7b 30 20 7b 78 79 7a 20 61  c}.  } {0 {xyz a
4cd0: 62 63 20 35 20 36 7d 7d 0a 20 20 64 6f 5f 74 65  bc 5 6}}.  do_te
4ce0: 73 74 20 61 6c 74 65 72 2d 31 31 2e 31 30 20 7b  st alter-11.10 {
4cf0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65 78 65  .    sqlite3_exe
4d00: 63 20 64 62 20 7b 53 45 4c 45 43 54 20 22 25 38  c db {SELECT "%8
4d10: 31 25 38 32 25 38 33 22 20 41 53 20 78 79 7a 2c  1%82%83" AS xyz,
4d20: 20 61 62 63 20 46 52 4f 4d 20 74 31 31 63 7d 0a   abc FROM t11c}.
4d30: 20 20 7d 20 7b 30 20 7b 78 79 7a 20 61 62 63 20    } {0 {xyz abc 
4d40: 35 20 36 7d 7d 0a 7d 0a 0a 0a 66 69 6e 69 73 68  5 6}}.}...finish
4d50: 5f 74 65 73 74 0a                                _test.