SQLite4
Hex Artifact Content
Not logged in

Artifact 03774277b7916155e629d215f21bf36204ceb033:


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 34 5f  l..# If SQLITE4_
0270: 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 20  OMIT_ALTERTABLE 
0280: 69 73 20 64 65 66 69 6e 65 64 2c 20 6f 6d 69 74  is defined, omit
0290: 20 74 68 69 73 20 66 69 6c 65 2e 0a 69 66 63 61   this file..ifca
02a0: 70 61 62 6c 65 20 21 61 6c 74 65 72 74 61 62 6c  pable !altertabl
02b0: 65 20 7b 0a 20 20 66 69 6e 69 73 68 5f 74 65 73  e {.  finish_tes
02c0: 74 0a 20 20 72 65 74 75 72 6e 0a 7d 0a 0a 23 2d  t.  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 2d 0a 23 20 54 65 73 74 20 6f 72 67  -----.# Test org
0320: 61 6e 69 7a 61 74 69 6f 6e 3a 0a 23 0a 23 20 61  anization:.#.# a
0330: 6c 74 65 72 2d 31 2e 31 2e 2a 20 2d 20 61 6c 74  lter-1.1.* - alt
0340: 65 72 2d 31 2e 37 2e 2a 3a 20 42 61 73 69 63 20  er-1.7.*: Basic 
0350: 74 65 73 74 73 20 6f 66 20 41 4c 54 45 52 20 54  tests of ALTER T
0360: 41 42 4c 45 2c 20 69 6e 63 6c 75 64 69 6e 67 20  ABLE, including 
0370: 74 61 62 6c 65 73 0a 23 20 20 20 20 20 77 69 74  tables.#     wit
0380: 68 20 69 6d 70 6c 69 63 69 74 20 61 6e 64 20 65  h implicit and e
0390: 78 70 6c 69 63 69 74 20 69 6e 64 69 63 65 73 2e  xplicit indices.
03a0: 20 54 68 65 73 65 20 74 65 73 74 73 20 63 61 6d   These tests cam
03b0: 65 20 66 72 6f 6d 20 61 6e 20 65 61 72 6c 69 65  e from an earlie
03c0: 72 0a 23 20 20 20 20 20 66 6f 72 6b 20 6f 66 20  r.#     fork of 
03d0: 53 51 4c 69 74 65 20 74 68 61 74 20 61 6c 73 6f  SQLite that also
03e0: 20 73 75 70 70 6f 72 74 65 64 20 41 4c 54 45 52   supported ALTER
03f0: 20 54 41 42 4c 45 2e 0a 23 20 61 6c 74 65 72 2d   TABLE..# alter-
0400: 31 2e 38 2e 2a 3a 20 54 65 73 74 73 20 66 6f 72  1.8.*: Tests for
0410: 20 41 4c 54 45 52 20 54 41 42 4c 45 20 77 68 65   ALTER TABLE whe
0420: 6e 20 74 68 65 20 74 61 62 6c 65 20 72 65 73 69  n the table resi
0430: 64 65 73 20 69 6e 20 61 6e 20 0a 23 20 20 20 20  des in an .#    
0440: 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
0450: 73 65 2e 0a 23 20 61 6c 74 65 72 2d 31 2e 39 2e  se..# alter-1.9.
0460: 2a 3a 20 54 65 73 74 73 20 66 6f 72 20 41 4c 54  *: Tests for ALT
0470: 45 52 20 54 41 42 4c 45 20 77 68 65 6e 20 74 68  ER TABLE when th
0480: 65 69 72 20 69 73 20 77 68 69 74 65 73 70 61 63  eir is whitespac
0490: 65 20 62 65 74 77 65 65 6e 20 74 68 65 0a 23 20  e between the.# 
04a0: 20 20 20 20 74 61 62 6c 65 20 6e 61 6d 65 20 61      table name a
04b0: 6e 64 20 6c 65 66 74 20 70 61 72 65 6e 74 68 65  nd left parenthe
04c0: 73 69 73 20 74 6f 6b 65 6e 2e 20 69 2e 65 3a 20  sis token. i.e: 
04d0: 0a 23 20 20 20 20 20 22 43 52 45 41 54 45 20 54  .#     "CREATE T
04e0: 41 42 4c 45 20 61 62 63 20 20 20 20 20 20 20 28  ABLE abc       (
04f0: 61 2c 20 62 2c 20 63 29 3b 22 0a 23 20 61 6c 74  a, b, c);".# alt
0500: 65 72 2d 32 2e 2a 3a 20 54 65 73 74 20 65 72 72  er-2.*: Test err
0510: 6f 72 20 63 6f 6e 64 69 74 69 6f 6e 73 20 61 6e  or conditions an
0520: 64 20 6d 65 73 73 61 67 65 73 2e 0a 23 20 61 6c  d messages..# al
0530: 74 65 72 2d 33 2e 2a 3a 20 54 65 73 74 20 41 4c  ter-3.*: Test AL
0540: 54 45 52 20 54 41 42 4c 45 20 6f 6e 20 74 61 62  TER TABLE on tab
0550: 6c 65 73 20 74 68 61 74 20 68 61 76 65 20 54 52  les that have TR
0560: 49 47 47 45 52 73 20 61 74 74 61 63 68 65 64 20  IGGERs attached 
0570: 74 6f 20 74 68 65 6d 2e 0a 23 20 61 6c 74 65 72  to them..# alter
0580: 2d 34 2e 2a 3a 20 54 65 73 74 20 41 4c 54 45 52  -4.*: Test ALTER
0590: 20 54 41 42 4c 45 20 6f 6e 20 74 61 62 6c 65 73   TABLE on tables
05a0: 20 74 68 61 74 20 68 61 76 65 20 41 55 54 4f 49   that have AUTOI
05b0: 4e 43 52 45 4d 45 4e 54 20 66 69 65 6c 64 73 2e  NCREMENT fields.
05c0: 0a 23 20 2e 2e 2e 0a 23 20 61 6c 74 65 72 2d 31  .# ....# alter-1
05d0: 32 2e 2a 3a 20 54 65 73 74 20 41 4c 54 45 52 20  2.*: Test ALTER 
05e0: 54 41 42 4c 45 20 6f 6e 20 76 69 65 77 73 2e 0a  TABLE on views..
05f0: 23 0a 0a 23 20 43 72 65 61 74 65 20 73 6f 6d 65  #..# Create some
0600: 20 74 61 62 6c 65 73 20 74 6f 20 72 65 6e 61 6d   tables to renam
0610: 65 2e 20 20 42 65 20 73 75 72 65 20 74 6f 20 69  e.  Be sure to i
0620: 6e 63 6c 75 64 65 20 73 6f 6d 65 20 54 45 4d 50  nclude some TEMP
0630: 20 74 61 62 6c 65 73 0a 23 20 61 6e 64 20 73 6f   tables.# and so
0640: 6d 65 20 74 61 62 6c 65 73 20 77 69 74 68 20 6f  me tables with o
0650: 64 64 20 6e 61 6d 65 73 2e 0a 23 0a 64 6f 5f 74  dd names..#.do_t
0660: 65 73 74 20 61 6c 74 65 72 2d 31 2e 31 20 7b 0a  est alter-1.1 {.
0670: 20 20 69 66 63 61 70 61 62 6c 65 20 74 65 6d 70    ifcapable temp
0680: 64 62 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a 74  db {.    set ::t
0690: 65 6d 70 20 54 45 4d 50 0a 20 20 7d 20 65 6c 73  emp TEMP.  } els
06a0: 65 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a 74 65  e {.    set ::te
06b0: 6d 70 20 7b 7d 0a 20 20 7d 0a 20 20 65 78 65 63  mp {}.  }.  exec
06c0: 73 71 6c 20 5b 73 75 62 73 74 20 2d 6e 6f 63 6f  sql [subst -noco
06d0: 6d 6d 61 6e 64 73 20 7b 0a 20 20 20 20 43 52 45  mmands {.    CRE
06e0: 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c 62  ATE TABLE t1(a,b
06f0: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
0700: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31 2c 32  TO t1 VALUES(1,2
0710: 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41  );.    CREATE TA
0720: 42 4c 45 20 5b 74 31 27 78 31 5d 28 63 20 55 4e  BLE [t1'x1](c UN
0730: 49 51 55 45 2c 20 62 20 50 52 49 4d 41 52 59 20  IQUE, b PRIMARY 
0740: 4b 45 59 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  KEY);.    INSERT
0750: 20 49 4e 54 4f 20 5b 74 31 27 78 31 5d 20 56 41   INTO [t1'x1] VA
0760: 4c 55 45 53 28 33 2c 34 29 3b 0a 20 20 20 20 43  LUES(3,4);.    C
0770: 52 45 41 54 45 20 49 4e 44 45 58 20 74 31 69 31  REATE INDEX t1i1
0780: 20 4f 4e 20 54 31 28 42 29 3b 0a 20 20 20 20 43   ON T1(B);.    C
0790: 52 45 41 54 45 20 49 4e 44 45 58 20 74 31 69 32  REATE INDEX t1i2
07a0: 20 4f 4e 20 74 31 28 61 2c 62 29 3b 0a 20 20 20   ON t1(a,b);.   
07b0: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 33   CREATE INDEX i3
07c0: 20 4f 4e 20 5b 74 31 27 78 31 5d 28 62 2c 63 29   ON [t1'x1](b,c)
07d0: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 24 3a 3a  ;.    CREATE $::
07e0: 74 65 6d 70 20 54 41 42 4c 45 20 22 74 65 6d 70  temp TABLE "temp
07f0: 20 74 61 62 6c 65 22 28 65 2c 66 2c 67 20 55 4e   table"(e,f,g UN
0800: 49 51 55 45 29 3b 0a 20 20 20 20 43 52 45 41 54  IQUE);.    CREAT
0810: 45 20 49 4e 44 45 58 20 69 32 20 4f 4e 20 5b 74  E INDEX i2 ON [t
0820: 65 6d 70 20 74 61 62 6c 65 5d 28 66 29 3b 0a 20  emp table](f);. 
0830: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 5b     INSERT INTO [
0840: 74 65 6d 70 20 74 61 62 6c 65 5d 20 56 41 4c 55  temp table] VALU
0850: 45 53 28 35 2c 36 2c 37 29 3b 0a 20 20 7d 5d 0a  ES(5,6,7);.  }].
0860: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
0870: 53 45 4c 45 43 54 20 27 74 31 27 2c 20 2a 20 46  SELECT 't1', * F
0880: 52 4f 4d 20 74 31 3b 0a 20 20 20 20 53 45 4c 45  ROM t1;.    SELE
0890: 43 54 20 27 74 31 27 27 78 31 27 2c 20 2a 20 46  CT 't1''x1', * F
08a0: 52 4f 4d 20 22 74 31 27 78 31 22 3b 0a 20 20 20  ROM "t1'x1";.   
08b0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 5b   SELECT * FROM [
08c0: 74 65 6d 70 20 74 61 62 6c 65 5d 3b 0a 20 20 7d  temp table];.  }
08d0: 0a 7d 20 7b 74 31 20 31 20 32 20 74 31 27 78 31  .} {t1 1 2 t1'x1
08e0: 20 33 20 34 20 35 20 36 20 37 7d 0a 64 6f 5f 74   3 4 5 6 7}.do_t
08f0: 65 73 74 20 61 6c 74 65 72 2d 31 2e 32 20 7b 0a  est alter-1.2 {.
0900: 20 20 65 78 65 63 73 71 6c 20 5b 73 75 62 73 74    execsql [subst
0910: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 24 3a   {.    CREATE $:
0920: 3a 74 65 6d 70 20 54 41 42 4c 45 20 6f 62 6a 6c  :temp TABLE objl
0930: 69 73 74 28 74 79 70 65 2c 20 6e 61 6d 65 2c 20  ist(type, name, 
0940: 74 62 6c 5f 6e 61 6d 65 29 3b 0a 20 20 20 20 49  tbl_name);.    I
0950: 4e 53 45 52 54 20 49 4e 54 4f 20 6f 62 6a 6c 69  NSERT INTO objli
0960: 73 74 20 53 45 4c 45 43 54 20 74 79 70 65 2c 20  st SELECT type, 
0970: 6e 61 6d 65 2c 20 74 62 6c 5f 6e 61 6d 65 20 0a  name, tbl_name .
0980: 20 20 20 20 20 20 20 20 46 52 4f 4d 20 73 71 6c          FROM sql
0990: 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45  ite_master WHERE
09a0: 20 4e 41 4d 45 21 3d 27 6f 62 6a 6c 69 73 74 27   NAME!='objlist'
09b0: 3b 0a 20 20 7d 5d 0a 20 20 69 66 63 61 70 61 62  ;.  }].  ifcapab
09c0: 6c 65 20 74 65 6d 70 64 62 20 7b 0a 20 20 20 20  le tempdb {.    
09d0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
09e0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f 62 6a 6c  INSERT INTO objl
09f0: 69 73 74 20 53 45 4c 45 43 54 20 74 79 70 65 2c  ist SELECT type,
0a00: 20 6e 61 6d 65 2c 20 74 62 6c 5f 6e 61 6d 65 20   name, tbl_name 
0a10: 0a 20 20 20 20 20 20 20 20 20 20 46 52 4f 4d 20  .          FROM 
0a20: 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
0a30: 65 72 20 57 48 45 52 45 20 4e 41 4d 45 21 3d 27  er WHERE NAME!='
0a40: 6f 62 6a 6c 69 73 74 27 3b 0a 20 20 20 20 7d 0a  objlist';.    }.
0a50: 20 20 7d 0a 0a 20 20 65 78 65 63 73 71 6c 20 7b    }..  execsql {
0a60: 0a 20 20 20 20 53 45 4c 45 43 54 20 74 79 70 65  .    SELECT type
0a70: 2c 20 6e 61 6d 65 2c 20 74 62 6c 5f 6e 61 6d 65  , name, tbl_name
0a80: 20 46 52 4f 4d 20 6f 62 6a 6c 69 73 74 20 4f 52   FROM objlist OR
0a90: 44 45 52 20 42 59 20 74 62 6c 5f 6e 61 6d 65 2c  DER BY tbl_name,
0aa0: 20 74 79 70 65 20 64 65 73 63 2c 20 6e 61 6d 65   type desc, name
0ab0: 3b 0a 20 20 7d 0a 7d 20 5b 6c 69 73 74 20 5c 0a  ;.  }.} [list \.
0ac0: 20 20 20 20 20 74 61 62 6c 65 20 74 31 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 20 74 31 20 20 20             t1   
0af0: 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20            \.    
0b00: 20 69 6e 64 65 78 20 74 31 69 31 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 20 74 31 20 20 20 20 20 20 20         t1       
0b30: 20 20 20 20 20 20 5c 0a 20 20 20 20 20 69 6e 64        \.     ind
0b40: 65 78 20 74 31 69 32 20 20 20 20 20 20 20 20 20  ex t1i2         
0b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0b60: 20 20 20 74 31 20 20 20 20 20 20 20 20 20 20 20     t1           
0b70: 20 20 5c 0a 20 20 20 20 20 74 61 62 6c 65 20 74    \.     table t
0b80: 31 27 78 31 20 20 20 20 20 20 20 20 20 20 20 20  1'x1            
0b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
0ba0: 31 27 78 31 20 20 20 20 20 20 20 20 20 20 5c 0a  1'x1          \.
0bb0: 20 20 20 20 20 69 6e 64 65 78 20 69 33 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 20 74 31 27 78 31             t1'x1
0be0: 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20            \.    
0bf0: 20 69 6e 64 65 78 20 7b 73 71 6c 69 74 65 5f 61   index {sqlite_a
0c00: 75 74 6f 69 6e 64 65 78 5f 74 31 27 78 31 5f 31  utoindex_t1'x1_1
0c10: 7d 20 20 20 20 20 20 74 31 27 78 31 20 20 20 20  }      t1'x1    
0c20: 20 20 20 20 20 20 5c 0a 20 20 20 20 20 69 6e 64        \.     ind
0c30: 65 78 20 7b 73 71 6c 69 74 65 5f 61 75 74 6f 69  ex {sqlite_autoi
0c40: 6e 64 65 78 5f 74 31 27 78 31 5f 32 7d 20 20 20  ndex_t1'x1_2}   
0c50: 20 20 20 74 31 27 78 31 20 20 20 20 20 20 20 20     t1'x1        
0c60: 20 20 5c 0a 20 20 20 20 20 74 61 62 6c 65 20 7b    \.     table {
0c70: 74 65 6d 70 20 74 61 62 6c 65 7d 20 20 20 20 20  temp table}     
0c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
0c90: 74 65 6d 70 20 74 61 62 6c 65 7d 20 20 20 5c 0a  temp table}   \.
0ca0: 20 20 20 20 20 69 6e 64 65 78 20 69 32 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 20 7b 74 65 6d 70             {temp
0cd0: 20 74 61 62 6c 65 7d 20 20 20 5c 0a 20 20 20 20   table}   \.    
0ce0: 20 69 6e 64 65 78 20 7b 73 71 6c 69 74 65 5f 61   index {sqlite_a
0cf0: 75 74 6f 69 6e 64 65 78 5f 74 65 6d 70 20 74 61  utoindex_temp ta
0d00: 62 6c 65 5f 31 7d 20 7b 74 65 6d 70 20 74 61 62  ble_1} {temp tab
0d10: 6c 65 7d 20 20 20 5c 0a 20 20 5d 0a 0a 23 20 4d  le}   \.  ]..# M
0d20: 61 6b 65 20 73 6f 6d 65 20 63 68 61 6e 67 65 73  ake some changes
0d30: 0a 23 0a 69 6e 74 65 67 72 69 74 79 5f 63 68 65  .#.integrity_che
0d40: 63 6b 20 61 6c 74 65 72 2d 31 2e 33 2e 30 0a 64  ck alter-1.3.0.d
0d50: 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 31 2e 33  o_test alter-1.3
0d60: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
0d70: 20 20 20 41 4c 54 45 52 20 54 41 42 4c 45 20 5b     ALTER TABLE [
0d80: 54 31 5d 20 52 45 4e 41 4d 45 20 74 6f 20 5b 2d  T1] RENAME to [-
0d90: 74 31 2d 5d 3b 0a 20 20 20 20 41 4c 54 45 52 20  t1-];.    ALTER 
0da0: 54 41 42 4c 45 20 22 74 31 27 78 31 22 20 52 45  TABLE "t1'x1" RE
0db0: 4e 41 4d 45 20 54 4f 20 54 32 3b 0a 20 20 20 20  NAME TO T2;.    
0dc0: 41 4c 54 45 52 20 54 41 42 4c 45 20 5b 74 65 6d  ALTER TABLE [tem
0dd0: 70 20 74 61 62 6c 65 5d 20 52 45 4e 41 4d 45 20  p table] RENAME 
0de0: 74 6f 20 54 65 6d 70 54 61 62 3b 0a 20 20 7d 0a  to TempTab;.  }.
0df0: 7d 20 7b 7d 0a 69 6e 74 65 67 72 69 74 79 5f 63  } {}.integrity_c
0e00: 68 65 63 6b 20 61 6c 74 65 72 2d 31 2e 33 2e 31  heck alter-1.3.1
0e10: 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 31  .do_test alter-1
0e20: 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .4 {.  execsql {
0e30: 0a 20 20 20 20 53 45 4c 45 43 54 20 27 74 31 27  .    SELECT 't1'
0e40: 2c 20 2a 20 46 52 4f 4d 20 5b 2d 74 31 2d 5d 3b  , * FROM [-t1-];
0e50: 0a 20 20 20 20 53 45 4c 45 43 54 20 27 74 32 27  .    SELECT 't2'
0e60: 2c 20 2a 20 46 52 4f 4d 20 74 32 3b 0a 20 20 20  , * FROM t2;.   
0e70: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
0e80: 65 6d 70 74 61 62 3b 0a 20 20 7d 0a 7d 20 7b 74  emptab;.  }.} {t
0e90: 31 20 31 20 32 20 74 32 20 33 20 34 20 35 20 36  1 1 2 t2 3 4 5 6
0ea0: 20 37 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65   7}.do_test alte
0eb0: 72 2d 31 2e 35 20 7b 0a 20 20 65 78 65 63 73 71  r-1.5 {.  execsq
0ec0: 6c 20 7b 0a 20 20 20 20 44 45 4c 45 54 45 20 46  l {.    DELETE F
0ed0: 52 4f 4d 20 6f 62 6a 6c 69 73 74 3b 0a 20 20 20  ROM objlist;.   
0ee0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f 62 6a   INSERT INTO obj
0ef0: 6c 69 73 74 20 53 45 4c 45 43 54 20 74 79 70 65  list SELECT type
0f00: 2c 20 6e 61 6d 65 2c 20 74 62 6c 5f 6e 61 6d 65  , name, tbl_name
0f10: 0a 20 20 20 20 20 20 20 20 46 52 4f 4d 20 73 71  .        FROM sq
0f20: 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52  lite_master WHER
0f30: 45 20 4e 41 4d 45 21 3d 27 6f 62 6a 6c 69 73 74  E NAME!='objlist
0f40: 27 3b 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71  ';.  }.  catchsq
0f50: 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  l {.    INSERT I
0f60: 4e 54 4f 20 6f 62 6a 6c 69 73 74 20 53 45 4c 45  NTO objlist SELE
0f70: 43 54 20 74 79 70 65 2c 20 6e 61 6d 65 2c 20 74  CT type, name, t
0f80: 62 6c 5f 6e 61 6d 65 20 0a 20 20 20 20 20 20 20  bl_name .       
0f90: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d   FROM sqlite_tem
0fa0: 70 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20 4e  p_master WHERE N
0fb0: 41 4d 45 21 3d 27 6f 62 6a 6c 69 73 74 27 3b 0a  AME!='objlist';.
0fc0: 20 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a    }.  execsql {.
0fd0: 20 20 20 20 53 45 4c 45 43 54 20 74 79 70 65 2c      SELECT type,
0fe0: 20 6e 61 6d 65 2c 20 74 62 6c 5f 6e 61 6d 65 20   name, tbl_name 
0ff0: 46 52 4f 4d 20 6f 62 6a 6c 69 73 74 20 4f 52 44  FROM objlist ORD
1000: 45 52 20 42 59 20 74 62 6c 5f 6e 61 6d 65 2c 20  ER BY tbl_name, 
1010: 74 79 70 65 20 64 65 73 63 2c 20 6e 61 6d 65 3b  type desc, name;
1020: 0a 20 20 7d 0a 7d 20 5b 6c 69 73 74 20 5c 0a 20  .  }.} [list \. 
1030: 20 20 20 20 74 61 62 6c 65 20 2d 74 31 2d 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 20 2d 74 31 2d 20 20 20 20 20         -t1-     
1060: 20 20 20 5c 0a 20 20 20 20 20 69 6e 64 65 78 20     \.     index 
1070: 74 31 69 31 20 20 20 20 20 20 20 20 20 20 20 20  t1i1            
1080: 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 74 31               -t1
1090: 2d 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20 20  -        \.     
10a0: 69 6e 64 65 78 20 74 31 69 32 20 20 20 20 20 20  index t1i2      
10b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c0: 20 20 20 2d 74 31 2d 20 20 20 20 20 20 20 20 5c     -t1-        \
10d0: 0a 20 20 20 20 20 74 61 62 6c 65 20 54 32 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 20 54 32 20 20 20 20 20           T2     
1100: 20 20 20 20 20 5c 0a 20 20 20 20 20 69 6e 64 65       \.     inde
1110: 78 20 69 33 20 20 20 20 20 20 20 20 20 20 20 20  x i3            
1120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
1130: 32 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20  2          \.   
1140: 20 20 69 6e 64 65 78 20 7b 73 71 6c 69 74 65 5f    index {sqlite_
1150: 61 75 74 6f 69 6e 64 65 78 5f 54 32 5f 31 7d 20  autoindex_T2_1} 
1160: 20 20 20 20 20 54 32 20 20 20 20 20 20 20 20 20       T2         
1170: 20 5c 0a 20 20 20 20 20 69 6e 64 65 78 20 7b 73   \.     index {s
1180: 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f  qlite_autoindex_
1190: 54 32 5f 32 7d 20 20 20 20 20 20 54 32 20 20 20  T2_2}      T2   
11a0: 20 20 20 20 20 20 20 5c 0a 20 20 20 20 20 74 61         \.     ta
11b0: 62 6c 65 20 7b 54 65 6d 70 54 61 62 7d 20 20 20  ble {TempTab}   
11c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d0: 20 7b 54 65 6d 70 54 61 62 7d 20 20 20 5c 0a 20   {TempTab}   \. 
11e0: 20 20 20 20 69 6e 64 65 78 20 69 32 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 20 7b 54 65 6d 70 54 61 62 7d         {TempTab}
1210: 20 20 20 5c 0a 20 20 20 20 20 69 6e 64 65 78 20     \.     index 
1220: 7b 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65  {sqlite_autoinde
1230: 78 5f 54 65 6d 70 54 61 62 5f 31 7d 20 7b 54 65  x_TempTab_1} {Te
1240: 6d 70 54 61 62 7d 20 20 20 5c 0a 20 20 5d 0a 0a  mpTab}   \.  ]..
1250: 23 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20  # Make sure the 
1260: 63 68 61 6e 67 65 73 20 70 65 72 73 69 73 74 20  changes persist 
1270: 61 66 74 65 72 20 72 65 73 74 61 72 74 69 6e 67  after restarting
1280: 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 0a 23   the database..#
1290: 20 28 54 68 65 20 54 45 4d 50 20 74 61 62 6c 65   (The TEMP table
12a0: 20 77 69 6c 6c 20 6e 6f 74 20 70 65 72 73 69 73   will not persis
12b0: 74 2c 20 6f 66 20 63 6f 75 72 73 65 2e 29 0a 23  t, of course.).#
12c0: 0a 69 66 63 61 70 61 62 6c 65 20 74 65 6d 70 64  .ifcapable tempd
12d0: 62 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 61 6c  b {.  do_test al
12e0: 74 65 72 2d 31 2e 36 20 7b 0a 20 20 20 20 64 62  ter-1.6 {.    db
12f0: 20 63 6c 6f 73 65 0a 20 20 20 20 73 71 6c 69 74   close.    sqlit
1300: 65 34 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20  e4 db test.db.  
1310: 20 20 73 65 74 20 44 42 20 5b 73 71 6c 69 74 65    set DB [sqlite
1320: 34 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69  4_connection_poi
1330: 6e 74 65 72 20 64 62 5d 0a 20 20 20 20 65 78 65  nter db].    exe
1340: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 43 52 45  csql {.      CRE
1350: 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 6f  ATE TEMP TABLE o
1360: 62 6a 6c 69 73 74 28 74 79 70 65 2c 20 6e 61 6d  bjlist(type, nam
1370: 65 2c 20 74 62 6c 5f 6e 61 6d 65 29 3b 0a 20 20  e, tbl_name);.  
1380: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
1390: 6f 62 6a 6c 69 73 74 20 53 45 4c 45 43 54 20 74  objlist SELECT t
13a0: 79 70 65 2c 20 6e 61 6d 65 2c 20 74 62 6c 5f 6e  ype, name, tbl_n
13b0: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
13c0: 6d 61 73 74 65 72 3b 0a 20 20 20 20 20 20 49 4e  master;.      IN
13d0: 53 45 52 54 20 49 4e 54 4f 20 6f 62 6a 6c 69 73  SERT INTO objlis
13e0: 74 20 0a 20 20 20 20 20 20 20 20 20 20 53 45 4c  t .          SEL
13f0: 45 43 54 20 74 79 70 65 2c 20 6e 61 6d 65 2c 20  ECT type, name, 
1400: 74 62 6c 5f 6e 61 6d 65 20 46 52 4f 4d 20 73 71  tbl_name FROM sq
1410: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
1420: 20 0a 20 20 20 20 20 20 20 20 20 20 57 48 45 52   .          WHER
1430: 45 20 4e 41 4d 45 21 3d 27 6f 62 6a 6c 69 73 74  E NAME!='objlist
1440: 27 3b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20  ';.      SELECT 
1450: 74 79 70 65 2c 20 6e 61 6d 65 2c 20 74 62 6c 5f  type, name, tbl_
1460: 6e 61 6d 65 20 46 52 4f 4d 20 6f 62 6a 6c 69 73  name FROM objlis
1470: 74 20 0a 20 20 20 20 20 20 20 20 20 20 4f 52 44  t .          ORD
1480: 45 52 20 42 59 20 74 62 6c 5f 6e 61 6d 65 2c 20  ER BY tbl_name, 
1490: 74 79 70 65 20 64 65 73 63 2c 20 6e 61 6d 65 3b  type desc, name;
14a0: 0a 20 20 20 20 7d 0a 20 20 7d 20 5b 6c 69 73 74  .    }.  } [list
14b0: 20 5c 0a 20 20 20 20 20 20 20 74 61 62 6c 65 20   \.       table 
14c0: 2d 74 31 2d 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 20 2d 74 31               -t1
14e0: 2d 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20  -           \.  
14f0: 20 20 20 20 20 69 6e 64 65 78 20 74 31 69 31 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 20 2d 74 31 2d 20 20 20 20          -t1-    
1520: 20 20 20 20 20 20 20 5c 0a 20 20 20 20 20 20 20         \.       
1530: 69 6e 64 65 78 20 74 31 69 32 20 20 20 20 20 20  index t1i2      
1540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1550: 20 20 20 2d 74 31 2d 20 20 20 20 20 20 20 20 20     -t1-         
1560: 20 20 5c 0a 20 20 20 20 20 20 20 74 61 62 6c 65    \.       table
1570: 20 54 32 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 20 54 32                T2
1590: 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20            \.    
15a0: 20 20 20 69 6e 64 65 78 20 69 33 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 20 54 32 20 20 20 20 20 20 20 20        T2        
15d0: 20 20 5c 0a 20 20 20 20 20 20 20 69 6e 64 65 78    \.       index
15e0: 20 7b 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64   {sqlite_autoind
15f0: 65 78 5f 54 32 5f 31 7d 20 20 20 20 20 20 54 32  ex_T2_1}      T2
1600: 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20            \.    
1610: 20 20 20 69 6e 64 65 78 20 7b 73 71 6c 69 74 65     index {sqlite
1620: 5f 61 75 74 6f 69 6e 64 65 78 5f 54 32 5f 32 7d  _autoindex_T2_2}
1630: 20 20 20 20 20 20 54 32 20 20 20 20 20 20 20 20        T2        
1640: 20 20 5c 0a 20 20 20 20 5d 0a 7d 20 65 6c 73 65    \.    ].} else
1650: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
1660: 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 54 65     DROP TABLE Te
1670: 6d 70 54 61 62 3b 0a 20 20 7d 0a 7d 0a 0a 23 20  mpTab;.  }.}..# 
1680: 43 72 65 61 74 65 20 62 6f 67 75 73 20 61 70 70  Create bogus app
1690: 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64  lication-defined
16a0: 20 66 75 6e 63 74 69 6f 6e 73 20 66 6f 72 20 66   functions for f
16b0: 75 6e 63 74 69 6f 6e 73 20 75 73 65 64 20 0a 23  unctions used .#
16c0: 20 69 6e 74 65 72 6e 61 6c 6c 79 20 62 79 20 41   internally by A
16d0: 4c 54 45 52 20 54 41 42 4c 45 2c 20 74 6f 20 65  LTER TABLE, to e
16e0: 6e 73 75 72 65 20 74 68 61 74 20 41 4c 54 45 52  nsure that ALTER
16f0: 20 54 41 42 4c 45 20 66 61 6c 6c 73 20 62 61 63   TABLE falls bac
1700: 6b 0a 23 20 74 6f 20 74 68 65 20 62 75 69 6c 74  k.# to the built
1710: 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 23  -in functions..#
1720: 0a 70 72 6f 63 20 66 61 69 6c 69 6e 67 5f 61 70  .proc failing_ap
1730: 70 5f 66 75 6e 63 20 7b 61 72 67 73 7d 20 7b 65  p_func {args} {e
1740: 72 72 6f 72 20 22 62 61 64 20 66 75 6e 63 74 69  rror "bad functi
1750: 6f 6e 22 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74  on"}.do_test alt
1760: 65 72 2d 31 2e 37 2d 70 72 65 70 20 7b 0a 20 20  er-1.7-prep {.  
1770: 64 62 20 66 75 6e 63 20 73 75 62 73 74 72 20 66  db func substr f
1780: 61 69 6c 69 6e 67 5f 61 70 70 5f 66 75 6e 63 0a  ailing_app_func.
1790: 20 20 64 62 20 66 75 6e 63 20 6c 69 6b 65 20 66    db func like f
17a0: 61 69 6c 69 6e 67 5f 61 70 70 5f 66 75 6e 63 0a  ailing_app_func.
17b0: 20 20 64 62 20 66 75 6e 63 20 73 71 6c 69 74 65    db func sqlite
17c0: 5f 72 65 6e 61 6d 65 5f 74 61 62 6c 65 20 66 61  _rename_table fa
17d0: 69 6c 69 6e 67 5f 61 70 70 5f 66 75 6e 63 0a 20  iling_app_func. 
17e0: 20 64 62 20 66 75 6e 63 20 73 71 6c 69 74 65 5f   db func sqlite_
17f0: 72 65 6e 61 6d 65 5f 74 72 69 67 67 65 72 20 66  rename_trigger f
1800: 61 69 6c 69 6e 67 5f 61 70 70 5f 66 75 6e 63 0a  ailing_app_func.
1810: 20 20 64 62 20 66 75 6e 63 20 73 71 6c 69 74 65    db func sqlite
1820: 5f 72 65 6e 61 6d 65 5f 70 61 72 65 6e 74 20 66  _rename_parent f
1830: 61 69 6c 69 6e 67 5f 61 70 70 5f 66 75 6e 63 0a  ailing_app_func.
1840: 20 20 63 61 74 63 68 73 71 6c 20 7b 53 45 4c 45    catchsql {SELE
1850: 43 54 20 73 75 62 73 74 72 28 6e 61 6d 65 2c 31  CT substr(name,1
1860: 2c 33 29 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ,3) FROM sqlite_
1870: 6d 61 73 74 65 72 7d 0a 7d 20 7b 31 20 7b 62 61  master}.} {1 {ba
1880: 64 20 66 75 6e 63 74 69 6f 6e 7d 7d 0a 0a 23 20  d function}}..# 
1890: 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 41 4c  Make sure the AL
18a0: 54 45 52 20 54 41 42 4c 45 20 73 74 61 74 65 6d  TER TABLE statem
18b0: 65 6e 74 73 20 77 6f 72 6b 20 77 69 74 68 20 74  ents work with t
18c0: 68 65 0a 23 20 6e 6f 6e 2d 63 61 6c 6c 62 61 63  he.# non-callbac
18d0: 6b 20 41 50 49 0a 23 0a 64 6f 5f 74 65 73 74 20  k API.#.do_test 
18e0: 61 6c 74 65 72 2d 31 2e 37 20 7b 0a 20 20 73 74  alter-1.7 {.  st
18f0: 65 70 73 71 6c 20 24 44 42 20 7b 0a 20 20 20 20  epsql $DB {.    
1900: 41 4c 54 45 52 20 54 41 42 4c 45 20 5b 2d 74 31  ALTER TABLE [-t1
1910: 2d 5d 20 52 45 4e 41 4d 45 20 74 6f 20 5b 2a 74  -] RENAME to [*t
1920: 31 2a 5d 3b 0a 20 20 20 20 41 4c 54 45 52 20 54  1*];.    ALTER T
1930: 41 42 4c 45 20 54 32 20 52 45 4e 41 4d 45 20 54  ABLE T2 RENAME T
1940: 4f 20 5b 3c 74 32 3e 5d 3b 0a 20 20 7d 0a 20 20  O [<t2>];.  }.  
1950: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44 45  execsql {.    DE
1960: 4c 45 54 45 20 46 52 4f 4d 20 6f 62 6a 6c 69 73  LETE FROM objlis
1970: 74 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  t;.    INSERT IN
1980: 54 4f 20 6f 62 6a 6c 69 73 74 20 53 45 4c 45 43  TO objlist SELEC
1990: 54 20 74 79 70 65 2c 20 6e 61 6d 65 2c 20 74 62  T type, name, tb
19a0: 6c 5f 6e 61 6d 65 0a 20 20 20 20 20 20 20 20 46  l_name.        F
19b0: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
19c0: 72 20 57 48 45 52 45 20 4e 41 4d 45 21 3d 27 6f  r WHERE NAME!='o
19d0: 62 6a 6c 69 73 74 27 3b 0a 20 20 7d 0a 20 20 63  bjlist';.  }.  c
19e0: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 49 4e  atchsql {.    IN
19f0: 53 45 52 54 20 49 4e 54 4f 20 6f 62 6a 6c 69 73  SERT INTO objlis
1a00: 74 20 53 45 4c 45 43 54 20 74 79 70 65 2c 20 6e  t SELECT type, n
1a10: 61 6d 65 2c 20 74 62 6c 5f 6e 61 6d 65 20 0a 20  ame, tbl_name . 
1a20: 20 20 20 20 20 20 20 46 52 4f 4d 20 73 71 6c 69         FROM sqli
1a30: 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 20 57  te_temp_master W
1a40: 48 45 52 45 20 4e 41 4d 45 21 3d 27 6f 62 6a 6c  HERE NAME!='objl
1a50: 69 73 74 27 3b 0a 20 20 7d 0a 20 20 65 78 65 63  ist';.  }.  exec
1a60: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
1a70: 20 74 79 70 65 2c 20 6e 61 6d 65 2c 20 74 62 6c   type, name, tbl
1a80: 5f 6e 61 6d 65 20 46 52 4f 4d 20 6f 62 6a 6c 69  _name FROM objli
1a90: 73 74 20 4f 52 44 45 52 20 42 59 20 74 62 6c 5f  st ORDER BY tbl_
1aa0: 6e 61 6d 65 2c 20 74 79 70 65 20 64 65 73 63 2c  name, type desc,
1ab0: 20 6e 61 6d 65 3b 0a 20 20 7d 0a 7d 20 5b 6c 69   name;.  }.} [li
1ac0: 73 74 20 5c 0a 20 20 20 20 20 74 61 62 6c 65 20  st \.     table 
1ad0: 2a 74 31 2a 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 20 2a 74 31               *t1
1af0: 2a 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20  *           \.  
1b00: 20 20 20 69 6e 64 65 78 20 74 31 69 31 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 20 2a 74 31 2a 20 20 20 20 20 20        *t1*      
1b30: 20 20 20 20 20 5c 0a 20 20 20 20 20 69 6e 64 65       \.     inde
1b40: 78 20 74 31 69 32 20 20 20 20 20 20 20 20 20 20  x t1i2          
1b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
1b60: 74 31 2a 20 20 20 20 20 20 20 20 20 20 20 5c 0a  t1*           \.
1b70: 20 20 20 20 20 74 61 62 6c 65 20 3c 74 32 3e 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 20 3c 74 32 3e 20 20 20 20          <t2>    
1ba0: 20 20 20 20 20 20 5c 0a 20 20 20 20 20 69 6e 64        \.     ind
1bb0: 65 78 20 69 33 20 20 20 20 20 20 20 20 20 20 20  ex i3           
1bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd0: 3c 74 32 3e 20 20 20 20 20 20 20 20 20 20 5c 0a  <t2>          \.
1be0: 20 20 20 20 20 69 6e 64 65 78 20 7b 73 71 6c 69       index {sqli
1bf0: 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 3c 74 32  te_autoindex_<t2
1c00: 3e 5f 31 7d 20 20 20 20 3c 74 32 3e 20 20 20 20  >_1}    <t2>    
1c10: 20 20 20 20 20 20 5c 0a 20 20 20 20 20 69 6e 64        \.     ind
1c20: 65 78 20 7b 73 71 6c 69 74 65 5f 61 75 74 6f 69  ex {sqlite_autoi
1c30: 6e 64 65 78 5f 3c 74 32 3e 5f 32 7d 20 20 20 20  ndex_<t2>_2}    
1c40: 3c 74 32 3e 20 20 20 20 20 20 20 20 20 20 5c 0a  <t2>          \.
1c50: 20 20 5d 0a 0a 23 20 43 68 65 63 6b 20 74 68 61    ]..# Check tha
1c60: 74 20 41 4c 54 45 52 20 54 41 42 4c 45 20 77 6f  t ALTER TABLE wo
1c70: 72 6b 73 20 6f 6e 20 61 74 74 61 63 68 65 64 20  rks on attached 
1c80: 64 61 74 61 62 61 73 65 73 2e 0a 23 0a 69 66 63  databases..#.ifc
1c90: 61 70 61 62 6c 65 20 61 74 74 61 63 68 20 7b 0a  apable attach {.
1ca0: 20 20 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d    do_test alter-
1cb0: 31 2e 38 2e 31 20 7b 0a 20 20 20 20 66 6f 72 63  1.8.1 {.    forc
1cc0: 65 64 65 6c 65 74 65 20 74 65 73 74 32 2e 64 62  edelete test2.db
1cd0: 0a 20 20 20 20 66 6f 72 63 65 64 65 6c 65 74 65  .    forcedelete
1ce0: 20 74 65 73 74 32 2e 64 62 2d 6a 6f 75 72 6e 61   test2.db-journa
1cf0: 6c 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  l.    execsql {.
1d00: 20 20 20 20 20 20 41 54 54 41 43 48 20 27 74 65        ATTACH 'te
1d10: 73 74 32 2e 64 62 27 20 41 53 20 61 75 78 3b 0a  st2.db' AS aux;.
1d20: 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64      }.  } {}.  d
1d30: 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 31 2e 38  o_test alter-1.8
1d40: 2e 32 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .2 {.    execsql
1d50: 20 7b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20   {.      CREATE 
1d60: 54 41 42 4c 45 20 74 34 28 61 20 50 52 49 4d 41  TABLE t4(a PRIMA
1d70: 52 59 20 4b 45 59 2c 20 62 2c 20 63 29 3b 0a 20  RY KEY, b, c);. 
1d80: 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c       CREATE TABL
1d90: 45 20 61 75 78 2e 74 34 28 61 20 50 52 49 4d 41  E aux.t4(a PRIMA
1da0: 52 59 20 4b 45 59 2c 20 62 2c 20 63 29 3b 0a 20  RY KEY, b, c);. 
1db0: 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45       CREATE INDE
1dc0: 58 20 69 34 20 4f 4e 20 74 34 28 62 29 3b 0a 20  X i4 ON t4(b);. 
1dd0: 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45       CREATE INDE
1de0: 58 20 61 75 78 2e 69 34 20 4f 4e 20 74 34 28 62  X aux.i4 ON t4(b
1df0: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a  );.    }.  } {}.
1e00: 20 20 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d    do_test alter-
1e10: 31 2e 38 2e 33 20 7b 0a 20 20 20 20 65 78 65 63  1.8.3 {.    exec
1e20: 73 71 6c 20 7b 0a 20 20 20 20 20 20 49 4e 53 45  sql {.      INSE
1e30: 52 54 20 49 4e 54 4f 20 74 34 20 56 41 4c 55 45  RT INTO t4 VALUE
1e40: 53 28 27 6d 61 69 6e 27 2c 20 27 6d 61 69 6e 27  S('main', 'main'
1e50: 2c 20 27 6d 61 69 6e 27 29 3b 0a 20 20 20 20 20  , 'main');.     
1e60: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 61 75 78   INSERT INTO aux
1e70: 2e 74 34 20 56 41 4c 55 45 53 28 27 61 75 78 27  .t4 VALUES('aux'
1e80: 2c 20 27 61 75 78 27 2c 20 27 61 75 78 27 29 3b  , 'aux', 'aux');
1e90: 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 2a 20  .      SELECT * 
1ea0: 46 52 4f 4d 20 74 34 20 57 48 45 52 45 20 61 20  FROM t4 WHERE a 
1eb0: 3d 20 27 6d 61 69 6e 27 3b 0a 20 20 20 20 7d 0a  = 'main';.    }.
1ec0: 20 20 7d 20 7b 6d 61 69 6e 20 6d 61 69 6e 20 6d    } {main main m
1ed0: 61 69 6e 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61  ain}.  do_test a
1ee0: 6c 74 65 72 2d 31 2e 38 2e 34 20 7b 0a 20 20 20  lter-1.8.4 {.   
1ef0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
1f00: 20 41 4c 54 45 52 20 54 41 42 4c 45 20 74 34 20   ALTER TABLE t4 
1f10: 52 45 4e 41 4d 45 20 54 4f 20 74 35 3b 0a 20 20  RENAME TO t5;.  
1f20: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
1f30: 4d 20 74 34 20 57 48 45 52 45 20 61 20 3d 20 27  M t4 WHERE a = '
1f40: 61 75 78 27 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  aux';.    }.  } 
1f50: 7b 61 75 78 20 61 75 78 20 61 75 78 7d 0a 20 20  {aux aux aux}.  
1f60: 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 31 2e  do_test alter-1.
1f70: 38 2e 35 20 7b 0a 20 20 20 20 65 78 65 63 73 71  8.5 {.    execsq
1f80: 6c 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54  l {.      SELECT
1f90: 20 2a 20 46 52 4f 4d 20 74 35 3b 0a 20 20 20 20   * FROM t5;.    
1fa0: 7d 0a 20 20 7d 20 7b 6d 61 69 6e 20 6d 61 69 6e  }.  } {main main
1fb0: 20 6d 61 69 6e 7d 0a 20 20 64 6f 5f 74 65 73 74   main}.  do_test
1fc0: 20 61 6c 74 65 72 2d 31 2e 38 2e 36 20 7b 0a 20   alter-1.8.6 {. 
1fd0: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
1fe0: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
1ff0: 20 74 35 20 57 48 45 52 45 20 62 20 3d 20 27 6d   t5 WHERE b = 'm
2000: 61 69 6e 27 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  ain';.    }.  } 
2010: 7b 6d 61 69 6e 20 6d 61 69 6e 20 6d 61 69 6e 7d  {main main main}
2020: 0a 20 20 64 6f 5f 74 65 73 74 20 61 6c 74 65 72  .  do_test alter
2030: 2d 31 2e 38 2e 37 20 7b 0a 20 20 20 20 65 78 65  -1.8.7 {.    exe
2040: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 41 4c 54  csql {.      ALT
2050: 45 52 20 54 41 42 4c 45 20 61 75 78 2e 74 34 20  ER TABLE aux.t4 
2060: 52 45 4e 41 4d 45 20 54 4f 20 74 35 3b 0a 20 20  RENAME TO t5;.  
2070: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
2080: 4d 20 61 75 78 2e 74 35 20 57 48 45 52 45 20 62  M aux.t5 WHERE b
2090: 20 3d 20 27 61 75 78 27 3b 0a 20 20 20 20 7d 0a   = 'aux';.    }.
20a0: 20 20 7d 20 7b 61 75 78 20 61 75 78 20 61 75 78    } {aux aux aux
20b0: 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 6c 74  }.}..do_test alt
20c0: 65 72 2d 31 2e 39 2e 31 20 7b 0a 20 20 65 78 65  er-1.9.1 {.  exe
20d0: 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  csql {.    CREAT
20e0: 45 20 54 41 42 4c 45 20 74 62 6c 31 20 20 20 28  E TABLE tbl1   (
20f0: 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20 49 4e  a, b, c);.    IN
2100: 53 45 52 54 20 49 4e 54 4f 20 74 62 6c 31 20 56  SERT INTO tbl1 V
2110: 41 4c 55 45 53 28 31 2c 20 32 2c 20 33 29 3b 0a  ALUES(1, 2, 3);.
2120: 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74    }.} {}.do_test
2130: 20 61 6c 74 65 72 2d 31 2e 39 2e 32 20 7b 0a 20   alter-1.9.2 {. 
2140: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
2150: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 62 6c  ELECT * FROM tbl
2160: 31 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 20 33 7d  1;.  }.} {1 2 3}
2170: 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 31  .do_test alter-1
2180: 2e 39 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c  .9.3 {.  execsql
2190: 20 7b 0a 20 20 20 20 41 4c 54 45 52 20 54 41 42   {.    ALTER TAB
21a0: 4c 45 20 74 62 6c 31 20 52 45 4e 41 4d 45 20 54  LE tbl1 RENAME T
21b0: 4f 20 74 62 6c 32 3b 0a 20 20 20 20 53 45 4c 45  O tbl2;.    SELE
21c0: 43 54 20 2a 20 46 52 4f 4d 20 74 62 6c 32 3b 0a  CT * FROM tbl2;.
21d0: 20 20 7d 0a 7d 20 7b 31 20 32 20 33 7d 0a 64 6f    }.} {1 2 3}.do
21e0: 5f 74 65 73 74 20 61 6c 74 65 72 2d 31 2e 39 2e  _test alter-1.9.
21f0: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  4 {.  execsql {.
2200: 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74      DROP TABLE t
2210: 62 6c 32 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 23  bl2;.  }.} {}..#
2220: 20 54 65 73 74 20 65 72 72 6f 72 20 6d 65 73 73   Test error mess
2230: 61 67 65 73 0a 23 0a 64 6f 5f 74 65 73 74 20 61  ages.#.do_test a
2240: 6c 74 65 72 2d 32 2e 31 20 7b 0a 20 20 63 61 74  lter-2.1 {.  cat
2250: 63 68 73 71 6c 20 7b 0a 20 20 20 20 41 4c 54 45  chsql {.    ALTE
2260: 52 20 54 41 42 4c 45 20 6e 6f 6e 65 20 52 45 4e  R TABLE none REN
2270: 41 4d 45 20 54 4f 20 68 69 3b 0a 20 20 7d 0a 7d  AME TO hi;.  }.}
2280: 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20 74 61 62   {1 {no such tab
2290: 6c 65 3a 20 6e 6f 6e 65 7d 7d 0a 64 6f 5f 74 65  le: none}}.do_te
22a0: 73 74 20 61 6c 74 65 72 2d 32 2e 32 20 7b 0a 20  st alter-2.2 {. 
22b0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43   execsql {.    C
22c0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 33 28 70  REATE TABLE t3(p
22d0: 2c 71 2c 72 29 3b 0a 20 20 7d 0a 20 20 63 61 74  ,q,r);.  }.  cat
22e0: 63 68 73 71 6c 20 7b 0a 20 20 20 20 41 4c 54 45  chsql {.    ALTE
22f0: 52 20 54 41 42 4c 45 20 5b 3c 74 32 3e 5d 20 52  R TABLE [<t2>] R
2300: 45 4e 41 4d 45 20 54 4f 20 74 33 3b 0a 20 20 7d  ENAME TO t3;.  }
2310: 0a 7d 20 7b 31 20 7b 74 68 65 72 65 20 69 73 20  .} {1 {there is 
2320: 61 6c 72 65 61 64 79 20 61 6e 6f 74 68 65 72 20  already another 
2330: 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77  table or index w
2340: 69 74 68 20 74 68 69 73 20 6e 61 6d 65 3a 20 74  ith this name: t
2350: 33 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65  3}}.do_test alte
2360: 72 2d 32 2e 33 20 7b 0a 20 20 63 61 74 63 68 73  r-2.3 {.  catchs
2370: 71 6c 20 7b 0a 20 20 20 20 41 4c 54 45 52 20 54  ql {.    ALTER T
2380: 41 42 4c 45 20 5b 3c 74 32 3e 5d 20 52 45 4e 41  ABLE [<t2>] RENA
2390: 4d 45 20 54 4f 20 69 33 3b 0a 20 20 7d 0a 7d 20  ME TO i3;.  }.} 
23a0: 7b 31 20 7b 74 68 65 72 65 20 69 73 20 61 6c 72  {1 {there is alr
23b0: 65 61 64 79 20 61 6e 6f 74 68 65 72 20 74 61 62  eady another tab
23c0: 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 69 74 68  le or index with
23d0: 20 74 68 69 73 20 6e 61 6d 65 3a 20 69 33 7d 7d   this name: i3}}
23e0: 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 32  .do_test alter-2
23f0: 2e 34 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  .4 {.  catchsql 
2400: 7b 0a 20 20 20 20 41 4c 54 45 52 20 54 41 42 4c  {.    ALTER TABL
2410: 45 20 53 71 4c 69 54 65 5f 6d 61 73 74 65 72 20  E SqLiTe_master 
2420: 52 45 4e 41 4d 45 20 54 4f 20 6d 61 73 74 65 72  RENAME TO master
2430: 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 74 61 62 6c  ;.  }.} {1 {tabl
2440: 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  e sqlite_master 
2450: 6d 61 79 20 6e 6f 74 20 62 65 20 61 6c 74 65 72  may not be alter
2460: 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74  ed}}.do_test alt
2470: 65 72 2d 32 2e 35 20 7b 0a 20 20 63 61 74 63 68  er-2.5 {.  catch
2480: 73 71 6c 20 7b 0a 20 20 20 20 41 4c 54 45 52 20  sql {.    ALTER 
2490: 54 41 42 4c 45 20 74 33 20 52 45 4e 41 4d 45 20  TABLE t3 RENAME 
24a0: 54 4f 20 73 71 6c 69 74 65 5f 74 33 3b 0a 20 20  TO sqlite_t3;.  
24b0: 7d 0a 7d 20 7b 31 20 7b 6f 62 6a 65 63 74 20 6e  }.} {1 {object n
24c0: 61 6d 65 20 72 65 73 65 72 76 65 64 20 66 6f 72  ame reserved for
24d0: 20 69 6e 74 65 72 6e 61 6c 20 75 73 65 3a 20 73   internal use: s
24e0: 71 6c 69 74 65 5f 74 33 7d 7d 0a 64 6f 5f 74 65  qlite_t3}}.do_te
24f0: 73 74 20 61 6c 74 65 72 2d 32 2e 36 20 7b 0a 20  st alter-2.6 {. 
2500: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
2510: 41 4c 54 45 52 20 54 41 42 4c 45 20 74 33 20 41  ALTER TABLE t3 A
2520: 44 44 20 43 4f 4c 55 4d 4e 20 28 41 4c 54 45 52  DD COLUMN (ALTER
2530: 20 54 41 42 4c 45 20 74 33 20 41 44 44 20 43 4f   TABLE t3 ADD CO
2540: 4c 55 4d 4e 29 3b 0a 20 20 7d 0a 7d 20 7b 31 20  LUMN);.  }.} {1 
2550: 7b 6e 65 61 72 20 22 28 22 3a 20 73 79 6e 74 61  {near "(": synta
2560: 78 20 65 72 72 6f 72 7d 7d 0a 0a 23 20 49 66 20  x error}}..# If 
2570: 74 68 69 73 20 63 6f 6d 70 69 6c 61 74 69 6f 6e  this compilation
2580: 20 64 6f 65 73 20 6e 6f 74 20 69 6e 63 6c 75 64   does not includ
2590: 65 20 74 72 69 67 67 65 72 73 2c 20 6f 6d 69 74  e triggers, omit
25a0: 20 74 68 65 20 61 6c 74 65 72 2d 33 2e 2a 20 74   the alter-3.* t
25b0: 65 73 74 73 2e 0a 69 66 63 61 70 61 62 6c 65 20  ests..ifcapable 
25c0: 74 72 69 67 67 65 72 20 7b 0a 0a 23 2d 2d 2d 2d  trigger {..#----
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 2d 0a 23 20 54 65 73 74 73 20 61 6c 74 65  ---.# Tests alte
2620: 72 2d 33 2e 2a 20 74 65 73 74 20 41 4c 54 45 52  r-3.* test ALTER
2630: 20 54 41 42 4c 45 20 6f 6e 20 74 61 62 6c 65 73   TABLE on tables
2640: 20 74 68 61 74 20 68 61 76 65 20 74 72 69 67 67   that have trigg
2650: 65 72 73 2e 0a 23 0a 23 20 61 6c 74 65 72 2d 33  ers..#.# alter-3
2660: 2e 31 2e 2a 3a 20 41 4c 54 45 52 20 54 41 42 4c  .1.*: ALTER TABL
2670: 45 20 77 69 74 68 20 74 72 69 67 67 65 72 73 2e  E with triggers.
2680: 0a 23 20 61 6c 74 65 72 2d 33 2e 32 2e 2a 3a 20  .# alter-3.2.*: 
2690: 54 65 73 74 20 74 68 61 74 20 74 68 65 20 4f 4e  Test that the ON
26a0: 20 6b 65 79 77 6f 72 64 20 63 61 6e 6e 6f 74 20   keyword cannot 
26b0: 62 65 20 75 73 65 64 20 61 73 20 61 20 64 61 74  be used as a dat
26c0: 61 62 61 73 65 2c 0a 23 20 20 20 20 20 74 61 62  abase,.#     tab
26d0: 6c 65 20 6f 72 20 63 6f 6c 75 6d 6e 20 6e 61 6d  le or column nam
26e0: 65 20 75 6e 71 75 6f 74 65 64 2e 20 54 68 69 73  e unquoted. This
26f0: 20 69 73 20 64 6f 6e 65 20 62 65 63 61 75 73 65   is done because
2700: 20 70 61 72 74 20 6f 66 20 74 68 65 0a 23 20 20   part of the.#  
2710: 20 20 20 41 4c 54 45 52 20 54 41 42 4c 45 20 63     ALTER TABLE c
2720: 6f 64 65 20 28 73 70 65 63 69 66 69 63 61 6c 6c  ode (specificall
2730: 79 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  y the implementa
2740: 74 69 6f 6e 20 6f 66 20 53 51 4c 20 66 75 6e 63  tion of SQL func
2750: 74 69 6f 6e 0a 23 20 20 20 20 20 22 73 71 6c 69  tion.#     "sqli
2760: 74 65 5f 61 6c 74 65 72 5f 74 72 69 67 67 65 72  te_alter_trigger
2770: 22 29 20 77 69 6c 6c 20 62 72 65 61 6b 20 69 6e  ") will break in
2780: 20 74 68 69 73 20 63 61 73 65 2e 0a 23 20 61 6c   this case..# al
2790: 74 65 72 2d 33 2e 33 2e 2a 3a 20 41 4c 54 45 52  ter-3.3.*: ALTER
27a0: 20 54 41 42 4c 45 20 77 69 74 68 20 54 45 4d 50   TABLE with TEMP
27b0: 20 74 72 69 67 67 65 72 73 20 28 74 6f 64 6f 29   triggers (todo)
27c0: 2e 0a 23 0a 0a 23 20 41 6e 20 53 51 4c 20 75 73  ..#..# An SQL us
27d0: 65 72 2d 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20  er-function for 
27e0: 74 72 69 67 67 65 72 73 20 74 6f 20 66 69 72 65  triggers to fire
27f0: 2c 20 73 6f 20 74 68 61 74 20 77 65 20 6b 6e 6f  , so that we kno
2800: 77 20 74 68 65 79 0a 23 20 61 72 65 20 77 6f 72  w they.# are wor
2810: 6b 69 6e 67 2e 0a 70 72 6f 63 20 74 72 69 67 66  king..proc trigf
2820: 75 6e 63 20 7b 61 72 67 73 7d 20 7b 0a 20 20 73  unc {args} {.  s
2830: 65 74 20 3a 3a 54 52 49 47 47 45 52 20 24 61 72  et ::TRIGGER $ar
2840: 67 73 0a 7d 0a 64 62 20 66 75 6e 63 20 74 72 69  gs.}.db func tri
2850: 67 66 75 6e 63 20 74 72 69 67 66 75 6e 63 0a 0a  gfunc trigfunc..
2860: 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 33 2e  do_test alter-3.
2870: 31 2e 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  1.0 {.  execsql 
2880: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  {.    CREATE TAB
2890: 4c 45 20 74 36 28 61 2c 20 62 2c 20 63 29 3b 0a  LE t6(a, b, c);.
28a0: 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47      CREATE TRIGG
28b0: 45 52 20 74 72 69 67 31 20 41 46 54 45 52 20 49  ER trig1 AFTER I
28c0: 4e 53 45 52 54 20 4f 4e 20 74 36 20 42 45 47 49  NSERT ON t6 BEGI
28d0: 4e 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 74  N.      SELECT t
28e0: 72 69 67 66 75 6e 63 28 27 74 72 69 67 31 27 2c  rigfunc('trig1',
28f0: 20 6e 65 77 2e 61 2c 20 6e 65 77 2e 62 2c 20 6e   new.a, new.b, n
2900: 65 77 2e 63 29 3b 0a 20 20 20 20 45 4e 44 3b 0a  ew.c);.    END;.
2910: 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74    }.} {}.do_test
2920: 20 61 6c 74 65 72 2d 33 2e 31 2e 31 20 7b 0a 20   alter-3.1.1 {. 
2930: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 49   execsql {.    I
2940: 4e 53 45 52 54 20 49 4e 54 4f 20 74 36 20 56 41  NSERT INTO t6 VA
2950: 4c 55 45 53 28 31 2c 20 32 2c 20 33 29 3b 0a 20  LUES(1, 2, 3);. 
2960: 20 7d 0a 20 20 73 65 74 20 3a 3a 54 52 49 47 47   }.  set ::TRIGG
2970: 45 52 0a 7d 20 7b 74 72 69 67 31 20 31 20 32 20  ER.} {trig1 1 2 
2980: 33 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72  3}.do_test alter
2990: 2d 33 2e 31 2e 32 20 7b 0a 20 20 65 78 65 63 73  -3.1.2 {.  execs
29a0: 71 6c 20 7b 0a 20 20 20 20 41 4c 54 45 52 20 54  ql {.    ALTER T
29b0: 41 42 4c 45 20 74 36 20 52 45 4e 41 4d 45 20 54  ABLE t6 RENAME T
29c0: 4f 20 74 37 3b 0a 20 20 20 20 49 4e 53 45 52 54  O t7;.    INSERT
29d0: 20 49 4e 54 4f 20 74 37 20 56 41 4c 55 45 53 28   INTO t7 VALUES(
29e0: 34 2c 20 35 2c 20 36 29 3b 0a 20 20 7d 0a 20 20  4, 5, 6);.  }.  
29f0: 73 65 74 20 3a 3a 54 52 49 47 47 45 52 0a 7d 20  set ::TRIGGER.} 
2a00: 7b 74 72 69 67 31 20 34 20 35 20 36 7d 0a 64 6f  {trig1 4 5 6}.do
2a10: 5f 74 65 73 74 20 61 6c 74 65 72 2d 33 2e 31 2e  _test alter-3.1.
2a20: 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  3 {.  execsql {.
2a30: 20 20 20 20 44 52 4f 50 20 54 52 49 47 47 45 52      DROP TRIGGER
2a40: 20 74 72 69 67 31 3b 0a 20 20 7d 0a 7d 20 7b 7d   trig1;.  }.} {}
2a50: 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 33  .do_test alter-3
2a60: 2e 31 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c  .1.4 {.  execsql
2a70: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 52   {.    CREATE TR
2a80: 49 47 47 45 52 20 74 72 69 67 32 20 41 46 54 45  IGGER trig2 AFTE
2a90: 52 20 49 4e 53 45 52 54 20 4f 4e 20 6d 61 69 6e  R INSERT ON main
2aa0: 2e 74 37 20 42 45 47 49 4e 0a 20 20 20 20 20 20  .t7 BEGIN.      
2ab0: 53 45 4c 45 43 54 20 74 72 69 67 66 75 6e 63 28  SELECT trigfunc(
2ac0: 27 74 72 69 67 32 27 2c 20 6e 65 77 2e 61 2c 20  'trig2', new.a, 
2ad0: 6e 65 77 2e 62 2c 20 6e 65 77 2e 63 29 3b 0a 20  new.b, new.c);. 
2ae0: 20 20 20 45 4e 44 3b 0a 20 20 20 20 49 4e 53 45     END;.    INSE
2af0: 52 54 20 49 4e 54 4f 20 74 37 20 56 41 4c 55 45  RT INTO t7 VALUE
2b00: 53 28 31 2c 20 32 2c 20 33 29 3b 0a 20 20 7d 0a  S(1, 2, 3);.  }.
2b10: 20 20 73 65 74 20 3a 3a 54 52 49 47 47 45 52 0a    set ::TRIGGER.
2b20: 7d 20 7b 74 72 69 67 32 20 31 20 32 20 33 7d 0a  } {trig2 1 2 3}.
2b30: 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 33 2e  do_test alter-3.
2b40: 31 2e 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  1.5 {.  execsql 
2b50: 7b 0a 20 20 20 20 41 4c 54 45 52 20 54 41 42 4c  {.    ALTER TABL
2b60: 45 20 74 37 20 52 45 4e 41 4d 45 20 54 4f 20 74  E t7 RENAME TO t
2b70: 38 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  8;.    INSERT IN
2b80: 54 4f 20 74 38 20 56 41 4c 55 45 53 28 34 2c 20  TO t8 VALUES(4, 
2b90: 35 2c 20 36 29 3b 0a 20 20 7d 0a 20 20 73 65 74  5, 6);.  }.  set
2ba0: 20 3a 3a 54 52 49 47 47 45 52 0a 7d 20 7b 74 72   ::TRIGGER.} {tr
2bb0: 69 67 32 20 34 20 35 20 36 7d 0a 64 6f 5f 74 65  ig2 4 5 6}.do_te
2bc0: 73 74 20 61 6c 74 65 72 2d 33 2e 31 2e 36 20 7b  st alter-3.1.6 {
2bd0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
2be0: 20 44 52 4f 50 20 54 52 49 47 47 45 52 20 74 72   DROP TRIGGER tr
2bf0: 69 67 32 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f  ig2;.  }.} {}.do
2c00: 5f 74 65 73 74 20 61 6c 74 65 72 2d 33 2e 31 2e  _test alter-3.1.
2c10: 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  7 {.  execsql {.
2c20: 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47      CREATE TRIGG
2c30: 45 52 20 74 72 69 67 33 20 41 46 54 45 52 20 49  ER trig3 AFTER I
2c40: 4e 53 45 52 54 20 4f 4e 20 6d 61 69 6e 2e 27 74  NSERT ON main.'t
2c50: 38 27 42 45 47 49 4e 0a 20 20 20 20 20 20 53 45  8'BEGIN.      SE
2c60: 4c 45 43 54 20 74 72 69 67 66 75 6e 63 28 27 74  LECT trigfunc('t
2c70: 72 69 67 33 27 2c 20 6e 65 77 2e 61 2c 20 6e 65  rig3', new.a, ne
2c80: 77 2e 62 2c 20 6e 65 77 2e 63 29 3b 0a 20 20 20  w.b, new.c);.   
2c90: 20 45 4e 44 3b 0a 20 20 20 20 49 4e 53 45 52 54   END;.    INSERT
2ca0: 20 49 4e 54 4f 20 74 38 20 56 41 4c 55 45 53 28   INTO t8 VALUES(
2cb0: 31 2c 20 32 2c 20 33 29 3b 0a 20 20 7d 0a 20 20  1, 2, 3);.  }.  
2cc0: 73 65 74 20 3a 3a 54 52 49 47 47 45 52 0a 7d 20  set ::TRIGGER.} 
2cd0: 7b 74 72 69 67 33 20 31 20 32 20 33 7d 0a 64 6f  {trig3 1 2 3}.do
2ce0: 5f 74 65 73 74 20 61 6c 74 65 72 2d 33 2e 31 2e  _test alter-3.1.
2cf0: 38 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  8 {.  execsql {.
2d00: 20 20 20 20 41 4c 54 45 52 20 54 41 42 4c 45 20      ALTER TABLE 
2d10: 74 38 20 52 45 4e 41 4d 45 20 54 4f 20 74 39 3b  t8 RENAME TO t9;
2d20: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
2d30: 20 74 39 20 56 41 4c 55 45 53 28 34 2c 20 35 2c   t9 VALUES(4, 5,
2d40: 20 36 29 3b 0a 20 20 7d 0a 20 20 73 65 74 20 3a   6);.  }.  set :
2d50: 3a 54 52 49 47 47 45 52 0a 7d 20 7b 74 72 69 67  :TRIGGER.} {trig
2d60: 33 20 34 20 35 20 36 7d 0a 0a 23 20 4d 61 6b 65  3 4 5 6}..# Make
2d70: 20 73 75 72 65 20 22 4f 4e 22 20 63 61 6e 6e 6f   sure "ON" canno
2d80: 74 20 62 65 20 75 73 65 64 20 61 73 20 61 20 64  t be used as a d
2d90: 61 74 61 62 61 73 65 2c 20 74 61 62 6c 65 20 6f  atabase, table o
2da0: 72 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 77 69  r column name wi
2db0: 74 68 6f 75 74 0a 23 20 71 75 6f 74 69 6e 67 2e  thout.# quoting.
2dc0: 20 4f 74 68 65 72 77 69 73 65 20 74 68 65 20 73   Otherwise the s
2dd0: 71 6c 69 74 65 5f 61 6c 74 65 72 5f 74 72 69 67  qlite_alter_trig
2de0: 67 65 72 28 29 20 66 75 6e 63 74 69 6f 6e 20 6d  ger() function m
2df0: 69 67 68 74 20 6e 6f 74 20 77 6f 72 6b 2e 0a 66  ight not work..f
2e00: 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73 74 33  orcedelete test3
2e10: 2e 64 62 0a 66 6f 72 63 65 64 65 6c 65 74 65 20  .db.forcedelete 
2e20: 74 65 73 74 33 2e 64 62 2d 6a 6f 75 72 6e 61 6c  test3.db-journal
2e30: 0a 69 66 63 61 70 61 62 6c 65 20 61 74 74 61 63  .ifcapable attac
2e40: 68 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 61 6c  h {.  do_test al
2e50: 74 65 72 2d 33 2e 32 2e 31 20 7b 0a 20 20 20 20  ter-3.2.1 {.    
2e60: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20  catchsql {.     
2e70: 20 41 54 54 41 43 48 20 27 74 65 73 74 33 2e 64   ATTACH 'test3.d
2e80: 62 27 20 41 53 20 4f 4e 3b 0a 20 20 20 20 7d 0a  b' AS ON;.    }.
2e90: 20 20 7d 20 7b 31 20 7b 6e 65 61 72 20 22 4f 4e    } {1 {near "ON
2ea0: 22 3a 20 73 79 6e 74 61 78 20 65 72 72 6f 72 7d  ": syntax error}
2eb0: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 6c 74 65  }.  do_test alte
2ec0: 72 2d 33 2e 32 2e 32 20 7b 0a 20 20 20 20 63 61  r-3.2.2 {.    ca
2ed0: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20 41  tchsql {.      A
2ee0: 54 54 41 43 48 20 27 74 65 73 74 33 2e 64 62 27  TTACH 'test3.db'
2ef0: 20 41 53 20 27 4f 4e 27 3b 0a 20 20 20 20 7d 0a   AS 'ON';.    }.
2f00: 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20 20 64 6f 5f    } {0 {}}.  do_
2f10: 74 65 73 74 20 61 6c 74 65 72 2d 33 2e 32 2e 33  test alter-3.2.3
2f20: 20 7b 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20   {.    catchsql 
2f30: 7b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54  {.      CREATE T
2f40: 41 42 4c 45 20 4f 4e 2e 74 31 28 61 2c 20 62 2c  ABLE ON.t1(a, b,
2f50: 20 63 29 3b 20 0a 20 20 20 20 7d 0a 20 20 7d 20   c); .    }.  } 
2f60: 7b 31 20 7b 6e 65 61 72 20 22 4f 4e 22 3a 20 73  {1 {near "ON": s
2f70: 79 6e 74 61 78 20 65 72 72 6f 72 7d 7d 0a 20 20  yntax error}}.  
2f80: 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 33 2e  do_test alter-3.
2f90: 32 2e 34 20 7b 0a 20 20 20 20 63 61 74 63 68 73  2.4 {.    catchs
2fa0: 71 6c 20 7b 0a 20 20 20 20 20 20 43 52 45 41 54  ql {.      CREAT
2fb0: 45 20 54 41 42 4c 45 20 27 4f 4e 27 2e 74 31 28  E TABLE 'ON'.t1(
2fc0: 61 2c 20 62 2c 20 63 29 3b 20 0a 20 20 20 20 7d  a, b, c); .    }
2fd0: 0a 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20 20 64 6f  .  } {0 {}}.  do
2fe0: 5f 74 65 73 74 20 61 6c 74 65 72 2d 33 2e 32 2e  _test alter-3.2.
2ff0: 34 20 7b 0a 20 20 20 20 63 61 74 63 68 73 71 6c  4 {.    catchsql
3000: 20 7b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20   {.      CREATE 
3010: 54 41 42 4c 45 20 27 4f 4e 27 2e 4f 4e 28 61 2c  TABLE 'ON'.ON(a,
3020: 20 62 2c 20 63 29 3b 20 0a 20 20 20 20 7d 0a 20   b, c); .    }. 
3030: 20 7d 20 7b 31 20 7b 6e 65 61 72 20 22 4f 4e 22   } {1 {near "ON"
3040: 3a 20 73 79 6e 74 61 78 20 65 72 72 6f 72 7d 7d  : syntax error}}
3050: 0a 20 20 64 6f 5f 74 65 73 74 20 61 6c 74 65 72  .  do_test alter
3060: 2d 33 2e 32 2e 35 20 7b 0a 20 20 20 20 63 61 74  -3.2.5 {.    cat
3070: 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20 43 52  chsql {.      CR
3080: 45 41 54 45 20 54 41 42 4c 45 20 27 4f 4e 27 2e  EATE TABLE 'ON'.
3090: 27 4f 4e 27 28 61 2c 20 62 2c 20 63 29 3b 20 0a  'ON'(a, b, c); .
30a0: 20 20 20 20 7d 0a 20 20 7d 20 7b 30 20 7b 7d 7d      }.  } {0 {}}
30b0: 0a 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72  .}.do_test alter
30c0: 2d 33 2e 32 2e 36 20 7b 0a 20 20 63 61 74 63 68  -3.2.6 {.  catch
30d0: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
30e0: 20 54 41 42 4c 45 20 74 31 30 28 61 2c 20 4f 4e   TABLE t10(a, ON
30f0: 2c 20 63 29 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b  , c);.  }.} {1 {
3100: 6e 65 61 72 20 22 4f 4e 22 3a 20 73 79 6e 74 61  near "ON": synta
3110: 78 20 65 72 72 6f 72 7d 7d 0a 64 6f 5f 74 65 73  x error}}.do_tes
3120: 74 20 61 6c 74 65 72 2d 33 2e 32 2e 37 20 7b 0a  t alter-3.2.7 {.
3130: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
3140: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
3150: 30 28 61 2c 20 27 4f 4e 27 2c 20 63 29 3b 0a 20  0(a, 'ON', c);. 
3160: 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74   }.} {0 {}}.do_t
3170: 65 73 74 20 61 6c 74 65 72 2d 33 2e 32 2e 38 20  est alter-3.2.8 
3180: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  {.  catchsql {. 
3190: 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45     CREATE TRIGGE
31a0: 52 20 74 72 69 67 34 20 41 46 54 45 52 20 49 4e  R trig4 AFTER IN
31b0: 53 45 52 54 20 4f 4e 20 4f 4e 20 42 45 47 49 4e  SERT ON ON BEGIN
31c0: 20 53 45 4c 45 43 54 20 31 3b 20 45 4e 44 3b 0a   SELECT 1; END;.
31d0: 20 20 7d 0a 7d 20 7b 31 20 7b 6e 65 61 72 20 22    }.} {1 {near "
31e0: 4f 4e 22 3a 20 73 79 6e 74 61 78 20 65 72 72 6f  ON": syntax erro
31f0: 72 7d 7d 0a 69 66 63 61 70 61 62 6c 65 20 61 74  r}}.ifcapable at
3200: 74 61 63 68 20 7b 0a 20 20 64 6f 5f 74 65 73 74  tach {.  do_test
3210: 20 61 6c 74 65 72 2d 33 2e 32 2e 39 20 7b 0a 20   alter-3.2.9 {. 
3220: 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20     catchsql {.  
3230: 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47      CREATE TRIGG
3240: 45 52 20 27 6f 6e 27 2e 74 72 69 67 34 20 41 46  ER 'on'.trig4 AF
3250: 54 45 52 20 49 4e 53 45 52 54 20 4f 4e 20 27 4f  TER INSERT ON 'O
3260: 4e 27 20 42 45 47 49 4e 20 53 45 4c 45 43 54 20  N' BEGIN SELECT 
3270: 31 3b 20 45 4e 44 3b 0a 20 20 20 20 7d 0a 20 20  1; END;.    }.  
3280: 7d 20 7b 30 20 7b 7d 7d 0a 7d 0a 64 6f 5f 74 65  } {0 {}}.}.do_te
3290: 73 74 20 61 6c 74 65 72 2d 33 2e 32 2e 31 30 20  st alter-3.2.10 
32a0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
32b0: 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31 30    DROP TABLE t10
32c0: 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 64 6f 5f 74  ;.  }.} {}..do_t
32d0: 65 73 74 20 61 6c 74 65 72 2d 33 2e 33 2e 31 20  est alter-3.3.1 
32e0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 5b 73 75 62  {.  execsql [sub
32f0: 73 74 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  st {.    CREATE 
3300: 54 41 42 4c 45 20 74 62 6c 31 28 61 2c 20 62 2c  TABLE tbl1(a, b,
3310: 20 63 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20   c);.    CREATE 
3320: 24 3a 3a 74 65 6d 70 20 54 52 49 47 47 45 52 20  $::temp TRIGGER 
3330: 74 72 69 67 31 20 41 46 54 45 52 20 49 4e 53 45  trig1 AFTER INSE
3340: 52 54 20 4f 4e 20 74 62 6c 31 20 42 45 47 49 4e  RT ON tbl1 BEGIN
3350: 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 74 72  .      SELECT tr
3360: 69 67 66 75 6e 63 28 27 74 72 69 67 31 27 2c 20  igfunc('trig1', 
3370: 6e 65 77 2e 61 2c 20 6e 65 77 2e 62 2c 20 6e 65  new.a, new.b, ne
3380: 77 2e 63 29 3b 0a 20 20 20 20 45 4e 44 3b 0a 20  w.c);.    END;. 
3390: 20 7d 5d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74   }].} {}.do_test
33a0: 20 61 6c 74 65 72 2d 33 2e 33 2e 32 20 7b 0a 20   alter-3.3.2 {. 
33b0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 49   execsql {.    I
33c0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 62 6c 31 20  NSERT INTO tbl1 
33d0: 56 41 4c 55 45 53 28 27 61 27 2c 20 27 62 27 2c  VALUES('a', 'b',
33e0: 20 27 63 27 29 3b 0a 20 20 7d 0a 20 20 73 65 74   'c');.  }.  set
33f0: 20 3a 3a 54 52 49 47 47 45 52 0a 7d 20 7b 74 72   ::TRIGGER.} {tr
3400: 69 67 31 20 61 20 62 20 63 7d 0a 64 6f 5f 74 65  ig1 a b c}.do_te
3410: 73 74 20 61 6c 74 65 72 2d 33 2e 33 2e 33 20 7b  st alter-3.3.3 {
3420: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
3430: 20 41 4c 54 45 52 20 54 41 42 4c 45 20 74 62 6c   ALTER TABLE tbl
3440: 31 20 52 45 4e 41 4d 45 20 54 4f 20 74 62 6c 32  1 RENAME TO tbl2
3450: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
3460: 4f 20 74 62 6c 32 20 56 41 4c 55 45 53 28 27 64  O tbl2 VALUES('d
3470: 27 2c 20 27 65 27 2c 20 27 66 27 29 3b 0a 20 20  ', 'e', 'f');.  
3480: 7d 20 0a 20 20 73 65 74 20 3a 3a 54 52 49 47 47  } .  set ::TRIGG
3490: 45 52 0a 7d 20 7b 74 72 69 67 31 20 64 20 65 20  ER.} {trig1 d e 
34a0: 66 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72  f}.do_test alter
34b0: 2d 33 2e 33 2e 34 20 7b 0a 20 20 65 78 65 63 73  -3.3.4 {.  execs
34c0: 71 6c 20 5b 73 75 62 73 74 20 7b 0a 20 20 20 20  ql [subst {.    
34d0: 43 52 45 41 54 45 20 24 3a 3a 74 65 6d 70 20 54  CREATE $::temp T
34e0: 52 49 47 47 45 52 20 74 72 69 67 32 20 41 46 54  RIGGER trig2 AFT
34f0: 45 52 20 55 50 44 41 54 45 20 4f 4e 20 74 62 6c  ER UPDATE ON tbl
3500: 32 20 42 45 47 49 4e 0a 20 20 20 20 20 20 53 45  2 BEGIN.      SE
3510: 4c 45 43 54 20 74 72 69 67 66 75 6e 63 28 27 74  LECT trigfunc('t
3520: 72 69 67 32 27 2c 20 6e 65 77 2e 61 2c 20 6e 65  rig2', new.a, ne
3530: 77 2e 62 2c 20 6e 65 77 2e 63 29 3b 0a 20 20 20  w.b, new.c);.   
3540: 20 45 4e 44 3b 0a 20 20 7d 5d 20 0a 7d 20 7b 7d   END;.  }] .} {}
3550: 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 33  .do_test alter-3
3560: 2e 33 2e 35 20 7b 0a 20 20 65 78 65 63 73 71 6c  .3.5 {.  execsql
3570: 20 7b 0a 20 20 20 20 41 4c 54 45 52 20 54 41 42   {.    ALTER TAB
3580: 4c 45 20 74 62 6c 32 20 52 45 4e 41 4d 45 20 54  LE tbl2 RENAME T
3590: 4f 20 74 62 6c 33 3b 0a 20 20 20 20 49 4e 53 45  O tbl3;.    INSE
35a0: 52 54 20 49 4e 54 4f 20 74 62 6c 33 20 56 41 4c  RT INTO tbl3 VAL
35b0: 55 45 53 28 27 67 27 2c 20 27 68 27 2c 20 27 69  UES('g', 'h', 'i
35c0: 27 29 3b 0a 20 20 7d 20 0a 20 20 73 65 74 20 3a  ');.  } .  set :
35d0: 3a 54 52 49 47 47 45 52 0a 7d 20 7b 74 72 69 67  :TRIGGER.} {trig
35e0: 31 20 67 20 68 20 69 7d 0a 64 6f 5f 74 65 73 74  1 g h i}.do_test
35f0: 20 61 6c 74 65 72 2d 33 2e 33 2e 36 20 7b 0a 20   alter-3.3.6 {. 
3600: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 55   execsql {.    U
3610: 50 44 41 54 45 20 74 62 6c 33 20 53 45 54 20 61  PDATE tbl3 SET a
3620: 20 3d 20 27 47 27 20 77 68 65 72 65 20 61 20 3d   = 'G' where a =
3630: 20 27 67 27 3b 0a 20 20 7d 20 0a 20 20 73 65 74   'g';.  } .  set
3640: 20 3a 3a 54 52 49 47 47 45 52 0a 7d 20 7b 74 72   ::TRIGGER.} {tr
3650: 69 67 32 20 47 20 68 20 69 7d 0a 64 6f 5f 74 65  ig2 G h i}.do_te
3660: 73 74 20 61 6c 74 65 72 2d 33 2e 33 2e 37 20 7b  st alter-3.3.7 {
3670: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
3680: 20 44 52 4f 50 20 54 41 42 4c 45 20 74 62 6c 33   DROP TABLE tbl3
3690: 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 69 66 63 61 70  ;.  }.} {}.ifcap
36a0: 61 62 6c 65 20 74 65 6d 70 64 62 20 7b 0a 20 20  able tempdb {.  
36b0: 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 33 2e  do_test alter-3.
36c0: 33 2e 38 20 7b 0a 20 20 20 20 65 78 65 63 73 71  3.8 {.    execsq
36d0: 6c 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54  l {.      SELECT
36e0: 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74   * FROM sqlite_t
36f0: 65 6d 70 5f 6d 61 73 74 65 72 20 57 48 45 52 45  emp_master WHERE
3700: 20 74 79 70 65 20 3d 20 27 74 72 69 67 67 65 72   type = 'trigger
3710: 27 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a  ';.    }.  } {}.
3720: 7d 0a 0a 7d 20 3b 23 20 69 66 63 61 70 61 62 6c  }..} ;# ifcapabl
3730: 65 20 74 72 69 67 67 65 72 0a 0a 23 20 49 66 20  e trigger..# If 
3740: 74 68 65 20 62 75 69 6c 64 20 64 6f 65 73 20 6e  the build does n
3750: 6f 74 20 69 6e 63 6c 75 64 65 20 41 55 54 4f 49  ot include AUTOI
3760: 4e 43 52 45 4d 45 4e 54 20 66 69 65 6c 64 73 2c  NCREMENT fields,
3770: 20 6f 6d 69 74 20 61 6c 74 65 72 2d 34 2e 2a 2e   omit alter-4.*.
3780: 0a 69 66 63 61 70 61 62 6c 65 20 61 75 74 6f 69  .ifcapable autoi
3790: 6e 63 20 7b 0a 0a 64 6f 5f 74 65 73 74 20 61 6c  nc {..do_test al
37a0: 74 65 72 2d 34 2e 31 20 7b 0a 20 20 65 78 65 63  ter-4.1 {.  exec
37b0: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
37c0: 20 54 41 42 4c 45 20 74 62 6c 31 28 61 20 49 4e   TABLE tbl1(a IN
37d0: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
37e0: 59 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 29  Y AUTOINCREMENT)
37f0: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
3800: 4f 20 74 62 6c 31 20 56 41 4c 55 45 53 28 31 30  O tbl1 VALUES(10
3810: 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74  );.  }.} {}.do_t
3820: 65 73 74 20 61 6c 74 65 72 2d 34 2e 32 20 7b 0a  est alter-4.2 {.
3830: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
3840: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 62 6c 31  INSERT INTO tbl1
3850: 20 56 41 4c 55 45 53 28 4e 55 4c 4c 29 3b 0a 20   VALUES(NULL);. 
3860: 20 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d     SELECT a FROM
3870: 20 74 62 6c 31 3b 0a 20 20 7d 0a 7d 20 7b 31 30   tbl1;.  }.} {10
3880: 20 31 31 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74   11}.do_test alt
3890: 65 72 2d 34 2e 33 20 7b 0a 20 20 65 78 65 63 73  er-4.3 {.  execs
38a0: 71 6c 20 7b 0a 20 20 20 20 41 4c 54 45 52 20 54  ql {.    ALTER T
38b0: 41 42 4c 45 20 74 62 6c 31 20 52 45 4e 41 4d 45  ABLE tbl1 RENAME
38c0: 20 54 4f 20 74 62 6c 32 3b 0a 20 20 20 20 44 45   TO tbl2;.    DE
38d0: 4c 45 54 45 20 46 52 4f 4d 20 74 62 6c 32 3b 0a  LETE FROM tbl2;.
38e0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
38f0: 74 62 6c 32 20 56 41 4c 55 45 53 28 4e 55 4c 4c  tbl2 VALUES(NULL
3900: 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20  );.    SELECT a 
3910: 46 52 4f 4d 20 74 62 6c 32 3b 0a 20 20 7d 0a 7d  FROM tbl2;.  }.}
3920: 20 7b 31 32 7d 0a 64 6f 5f 74 65 73 74 20 61 6c   {12}.do_test al
3930: 74 65 72 2d 34 2e 34 20 7b 0a 20 20 65 78 65 63  ter-4.4 {.  exec
3940: 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20 54  sql {.    DROP T
3950: 41 42 4c 45 20 74 62 6c 32 3b 0a 20 20 7d 0a 7d  ABLE tbl2;.  }.}
3960: 20 7b 7d 0a 0a 7d 20 3b 23 20 69 66 63 61 70 61   {}..} ;# ifcapa
3970: 62 6c 65 20 61 75 74 6f 69 6e 63 0a 0a 23 20 54  ble autoinc..# T
3980: 65 73 74 20 74 68 61 74 20 69 74 20 69 73 20 4f  est that it is O
3990: 6b 20 74 6f 20 65 78 65 63 75 74 65 20 61 6e 20  k to execute an 
39a0: 41 4c 54 45 52 20 54 41 42 4c 45 20 69 6d 6d 65  ALTER TABLE imme
39b0: 64 69 61 74 65 6c 79 20 61 66 74 65 72 0a 23 20  diately after.# 
39c0: 6f 70 65 6e 69 6e 67 20 61 20 64 61 74 61 62 61  opening a databa
39d0: 73 65 2e 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65  se..do_test alte
39e0: 72 2d 35 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  r-5.1 {.  execsq
39f0: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
3a00: 41 42 4c 45 20 74 62 6c 31 28 61 2c 20 62 2c 20  ABLE tbl1(a, b, 
3a10: 63 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  c);.    INSERT I
3a20: 4e 54 4f 20 74 62 6c 31 20 56 41 4c 55 45 53 28  NTO tbl1 VALUES(
3a30: 27 78 27 2c 20 27 79 27 2c 20 27 7a 27 29 3b 0a  'x', 'y', 'z');.
3a40: 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74    }.} {}.do_test
3a50: 20 61 6c 74 65 72 2d 35 2e 32 20 7b 0a 20 20 73   alter-5.2 {.  s
3a60: 71 6c 69 74 65 34 20 64 62 32 20 74 65 73 74 2e  qlite4 db2 test.
3a70: 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  db.  execsql {. 
3a80: 20 20 20 41 4c 54 45 52 20 54 41 42 4c 45 20 74     ALTER TABLE t
3a90: 62 6c 31 20 52 45 4e 41 4d 45 20 54 4f 20 74 62  bl1 RENAME TO tb
3aa0: 6c 32 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  l2;.    SELECT *
3ab0: 20 46 52 4f 4d 20 74 62 6c 32 3b 0a 20 20 7d 20   FROM tbl2;.  } 
3ac0: 64 62 32 0a 7d 20 7b 78 20 79 20 7a 7d 0a 64 6f  db2.} {x y z}.do
3ad0: 5f 74 65 73 74 20 61 6c 74 65 72 2d 35 2e 33 20  _test alter-5.3 
3ae0: 7b 0a 20 20 64 62 32 20 63 6c 6f 73 65 0a 7d 20  {.  db2 close.} 
3af0: 7b 7d 0a 0a 66 6f 72 65 61 63 68 20 74 62 6c 6e  {}..foreach tbln
3b00: 61 6d 65 20 5b 65 78 65 63 73 71 6c 20 7b 0a 20  ame [execsql {. 
3b10: 20 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f   SELECT name FRO
3b20: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 0a  M sqlite_master.
3b30: 20 20 20 57 48 45 52 45 20 74 79 70 65 3d 27 74     WHERE type='t
3b40: 61 62 6c 65 27 20 41 4e 44 20 6e 61 6d 65 20 4e  able' AND name N
3b50: 4f 54 20 47 4c 4f 42 20 27 73 71 6c 69 74 65 2a  OT GLOB 'sqlite*
3b60: 27 0a 7d 5d 20 7b 0a 20 20 65 78 65 63 73 71 6c  '.}] {.  execsql
3b70: 20 22 44 52 4f 50 20 54 41 42 4c 45 20 5c 22 24   "DROP TABLE \"$
3b80: 74 62 6c 6e 61 6d 65 5c 22 22 0a 7d 0a 0a 73 65  tblname\"".}..se
3b90: 74 20 3a 3a 74 62 6c 5f 6e 61 6d 65 20 22 61 62  t ::tbl_name "ab
3ba0: 63 5c 75 41 42 43 44 64 65 66 22 0a 64 6f 5f 74  c\uABCDdef".do_t
3bb0: 65 73 74 20 61 6c 74 65 72 2d 36 2e 31 20 7b 0a  est alter-6.1 {.
3bc0: 20 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20    string length 
3bd0: 24 3a 3a 74 62 6c 5f 6e 61 6d 65 0a 7d 20 7b 37  $::tbl_name.} {7
3be0: 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d  }.do_test alter-
3bf0: 36 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  6.2 {.  execsql 
3c00: 22 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  ".    CREATE TAB
3c10: 4c 45 20 24 7b 74 62 6c 5f 6e 61 6d 65 7d 28 61  LE ${tbl_name}(a
3c20: 2c 20 62 2c 20 63 29 3b 0a 20 20 22 0a 20 20 73  , b, c);.  ".  s
3c30: 65 74 20 3a 3a 6f 69 64 20 5b 65 78 65 63 73 71  et ::oid [execsq
3c40: 6c 20 7b 53 45 4c 45 43 54 20 6d 61 78 28 6f 69  l {SELECT max(oi
3c50: 64 29 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  d) FROM sqlite_m
3c60: 61 73 74 65 72 7d 5d 0a 20 20 65 78 65 63 73 71  aster}].  execsq
3c70: 6c 20 22 0a 20 20 20 20 53 45 4c 45 43 54 20 73  l ".    SELECT s
3c80: 71 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  ql FROM sqlite_m
3c90: 61 73 74 65 72 20 57 48 45 52 45 20 6f 69 64 20  aster WHERE oid 
3ca0: 3d 20 24 3a 3a 6f 69 64 3b 0a 20 20 22 0a 7d 20  = $::oid;.  ".} 
3cb0: 22 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 24  "{CREATE TABLE $
3cc0: 7b 3a 3a 74 62 6c 5f 6e 61 6d 65 7d 28 61 2c 20  {::tbl_name}(a, 
3cd0: 62 2c 20 63 29 7d 22 0a 65 78 65 63 73 71 6c 20  b, c)}".execsql 
3ce0: 22 0a 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f  ".  SELECT * FRO
3cf0: 4d 20 24 7b 3a 3a 74 62 6c 5f 6e 61 6d 65 7d 0a  M ${::tbl_name}.
3d00: 22 0a 73 65 74 20 3a 3a 74 62 6c 5f 6e 61 6d 65  ".set ::tbl_name
3d10: 32 20 22 61 62 63 58 64 65 66 22 0a 64 6f 5f 74  2 "abcXdef".do_t
3d20: 65 73 74 20 61 6c 74 65 72 2d 36 2e 33 20 7b 0a  est alter-6.3 {.
3d30: 20 20 65 78 65 63 73 71 6c 20 22 0a 20 20 20 20    execsql ".    
3d40: 41 4c 54 45 52 20 54 41 42 4c 45 20 24 3a 3a 74  ALTER TABLE $::t
3d50: 62 6c 5f 6e 61 6d 65 20 52 45 4e 41 4d 45 20 54  bl_name RENAME T
3d60: 4f 20 24 3a 3a 74 62 6c 5f 6e 61 6d 65 32 20 0a  O $::tbl_name2 .
3d70: 20 20 22 0a 20 20 65 78 65 63 73 71 6c 20 22 0a    ".  execsql ".
3d80: 20 20 20 20 53 45 4c 45 43 54 20 73 71 6c 20 46      SELECT sql F
3d90: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
3da0: 72 20 57 48 45 52 45 20 6f 69 64 20 3d 20 24 3a  r WHERE oid = $:
3db0: 3a 6f 69 64 0a 20 20 22 0a 7d 20 22 7b 43 52 45  :oid.  ".} "{CRE
3dc0: 41 54 45 20 54 41 42 4c 45 20 5c 22 24 7b 3a 3a  ATE TABLE \"${::
3dd0: 74 62 6c 5f 6e 61 6d 65 32 7d 5c 22 28 61 2c 20  tbl_name2}\"(a, 
3de0: 62 2c 20 63 29 7d 22 0a 64 6f 5f 74 65 73 74 20  b, c)}".do_test 
3df0: 61 6c 74 65 72 2d 36 2e 34 20 7b 0a 20 20 65 78  alter-6.4 {.  ex
3e00: 65 63 73 71 6c 20 22 0a 20 20 20 20 41 4c 54 45  ecsql ".    ALTE
3e10: 52 20 54 41 42 4c 45 20 24 3a 3a 74 62 6c 5f 6e  R TABLE $::tbl_n
3e20: 61 6d 65 32 20 52 45 4e 41 4d 45 20 54 4f 20 24  ame2 RENAME TO $
3e30: 3a 3a 74 62 6c 5f 6e 61 6d 65 0a 20 20 22 0a 20  ::tbl_name.  ". 
3e40: 20 65 78 65 63 73 71 6c 20 22 0a 20 20 20 20 53   execsql ".    S
3e50: 45 4c 45 43 54 20 73 71 6c 20 46 52 4f 4d 20 73  ELECT sql FROM s
3e60: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45  qlite_master WHE
3e70: 52 45 20 6f 69 64 20 3d 20 24 3a 3a 6f 69 64 0a  RE oid = $::oid.
3e80: 20 20 22 0a 7d 20 22 7b 43 52 45 41 54 45 20 54    ".} "{CREATE T
3e90: 41 42 4c 45 20 5c 22 24 7b 3a 3a 74 62 6c 5f 6e  ABLE \"${::tbl_n
3ea0: 61 6d 65 7d 5c 22 28 61 2c 20 62 2c 20 63 29 7d  ame}\"(a, b, c)}
3eb0: 22 0a 73 65 74 20 3a 3a 63 6f 6c 5f 6e 61 6d 65  ".set ::col_name
3ec0: 20 67 68 69 5c 31 32 33 34 5c 6a 6b 6c 0a 64 6f   ghi\1234\jkl.do
3ed0: 5f 74 65 73 74 20 61 6c 74 65 72 2d 36 2e 35 20  _test alter-6.5 
3ee0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 22 0a 20 20  {.  execsql ".  
3ef0: 20 20 41 4c 54 45 52 20 54 41 42 4c 45 20 24 3a    ALTER TABLE $:
3f00: 3a 74 62 6c 5f 6e 61 6d 65 20 41 44 44 20 43 4f  :tbl_name ADD CO
3f10: 4c 55 4d 4e 20 24 3a 3a 63 6f 6c 5f 6e 61 6d 65  LUMN $::col_name
3f20: 20 56 41 52 43 48 41 52 0a 20 20 22 0a 20 20 65   VARCHAR.  ".  e
3f30: 78 65 63 73 71 6c 20 22 0a 20 20 20 20 53 45 4c  xecsql ".    SEL
3f40: 45 43 54 20 73 71 6c 20 46 52 4f 4d 20 73 71 6c  ECT sql FROM sql
3f50: 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45  ite_master WHERE
3f60: 20 6f 69 64 20 3d 20 24 3a 3a 6f 69 64 0a 20 20   oid = $::oid.  
3f70: 22 0a 7d 20 22 7b 43 52 45 41 54 45 20 54 41 42  ".} "{CREATE TAB
3f80: 4c 45 20 5c 22 24 7b 3a 3a 74 62 6c 5f 6e 61 6d  LE \"${::tbl_nam
3f90: 65 7d 5c 22 28 61 2c 20 62 2c 20 63 2c 20 24 3a  e}\"(a, b, c, $:
3fa0: 3a 63 6f 6c 5f 6e 61 6d 65 20 56 41 52 43 48 41  :col_name VARCHA
3fb0: 52 29 7d 22 0a 73 65 74 20 3a 3a 63 6f 6c 5f 6e  R)}".set ::col_n
3fc0: 61 6d 65 32 20 42 5c 33 34 32 31 5c 41 0a 64 6f  ame2 B\3421\A.do
3fd0: 5f 74 65 73 74 20 61 6c 74 65 72 2d 36 2e 36 20  _test alter-6.6 
3fe0: 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 73  {.  db close.  s
3ff0: 71 6c 69 74 65 34 20 64 62 20 74 65 73 74 2e 64  qlite4 db test.d
4000: 62 0a 20 20 65 78 65 63 73 71 6c 20 22 0a 20 20  b.  execsql ".  
4010: 20 20 41 4c 54 45 52 20 54 41 42 4c 45 20 24 3a    ALTER TABLE $:
4020: 3a 74 62 6c 5f 6e 61 6d 65 20 41 44 44 20 43 4f  :tbl_name ADD CO
4030: 4c 55 4d 4e 20 24 3a 3a 63 6f 6c 5f 6e 61 6d 65  LUMN $::col_name
4040: 32 0a 20 20 22 0a 20 20 65 78 65 63 73 71 6c 20  2.  ".  execsql 
4050: 22 0a 20 20 20 20 53 45 4c 45 43 54 20 73 71 6c  ".    SELECT sql
4060: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
4070: 74 65 72 20 57 48 45 52 45 20 6f 69 64 20 3d 20  ter WHERE oid = 
4080: 24 3a 3a 6f 69 64 0a 20 20 22 0a 7d 20 22 7b 43  $::oid.  ".} "{C
4090: 52 45 41 54 45 20 54 41 42 4c 45 20 5c 22 24 7b  REATE TABLE \"${
40a0: 3a 3a 74 62 6c 5f 6e 61 6d 65 7d 5c 22 28 61 2c  ::tbl_name}\"(a,
40b0: 20 62 2c 20 63 2c 20 24 3a 3a 63 6f 6c 5f 6e 61   b, c, $::col_na
40c0: 6d 65 20 56 41 52 43 48 41 52 2c 20 24 3a 3a 63  me VARCHAR, $::c
40d0: 6f 6c 5f 6e 61 6d 65 32 29 7d 22 0a 64 6f 5f 74  ol_name2)}".do_t
40e0: 65 73 74 20 61 6c 74 65 72 2d 36 2e 37 20 7b 0a  est alter-6.7 {.
40f0: 20 20 65 78 65 63 73 71 6c 20 22 0a 20 20 20 20    execsql ".    
4100: 49 4e 53 45 52 54 20 49 4e 54 4f 20 24 7b 3a 3a  INSERT INTO ${::
4110: 74 62 6c 5f 6e 61 6d 65 7d 20 56 41 4c 55 45 53  tbl_name} VALUES
4120: 28 31 2c 20 32 2c 20 33 2c 20 34 2c 20 35 29 3b  (1, 2, 3, 4, 5);
4130: 0a 20 20 20 20 53 45 4c 45 43 54 20 24 3a 3a 63  .    SELECT $::c
4140: 6f 6c 5f 6e 61 6d 65 2c 20 24 3a 3a 63 6f 6c 5f  ol_name, $::col_
4150: 6e 61 6d 65 32 20 46 52 4f 4d 20 24 3a 3a 74 62  name2 FROM $::tb
4160: 6c 5f 6e 61 6d 65 3b 0a 20 20 22 0a 7d 20 7b 34  l_name;.  ".} {4
4170: 20 35 7d 0a 0a 23 20 54 69 63 6b 65 74 20 23 31   5}..# Ticket #1
4180: 36 36 35 3a 20 20 4d 61 6b 65 20 73 75 72 65 20  665:  Make sure 
4190: 41 4c 54 45 52 20 54 41 42 4c 45 20 41 44 44 20  ALTER TABLE ADD 
41a0: 43 4f 4c 55 4d 4e 20 77 6f 72 6b 73 20 6f 6e 20  COLUMN works on 
41b0: 61 20 74 61 62 6c 65 0a 23 20 74 68 61 74 20 69  a table.# that i
41c0: 6e 63 6c 75 64 65 73 20 61 20 43 4f 4c 4c 41 54  ncludes a COLLAT
41d0: 45 20 63 6c 61 75 73 65 2e 0a 23 0a 64 6f 5f 72  E clause..#.do_r
41e0: 65 61 6c 6e 75 6d 5f 74 65 73 74 20 61 6c 74 65  ealnum_test alte
41f0: 72 2d 37 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  r-7.1 {.  execsq
4200: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
4210: 41 42 4c 45 20 74 31 28 61 20 54 45 58 54 20 43  ABLE t1(a TEXT C
4220: 4f 4c 4c 41 54 45 20 42 49 4e 41 52 59 29 3b 0a  OLLATE BINARY);.
4230: 20 20 20 20 41 4c 54 45 52 20 54 41 42 4c 45 20      ALTER TABLE 
4240: 74 31 20 41 44 44 20 43 4f 4c 55 4d 4e 20 62 20  t1 ADD COLUMN b 
4250: 49 4e 54 45 47 45 52 20 43 4f 4c 4c 41 54 45 20  INTEGER COLLATE 
4260: 4e 4f 43 41 53 45 3b 0a 20 20 20 20 49 4e 53 45  NOCASE;.    INSE
4270: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
4280: 53 28 31 2c 27 2d 32 27 29 3b 0a 20 20 20 20 49  S(1,'-2');.    I
4290: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
42a0: 4c 55 45 53 28 35 2e 34 65 2d 30 38 2c 27 35 2e  LUES(5.4e-08,'5.
42b0: 34 65 2d 30 38 27 29 3b 0a 20 20 20 20 53 45 4c  4e-08');.    SEL
42c0: 45 43 54 20 74 79 70 65 6f 66 28 61 29 2c 20 61  ECT typeof(a), a
42d0: 2c 20 74 79 70 65 6f 66 28 62 29 2c 20 62 20 46  , typeof(b), b F
42e0: 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 74  ROM t1;.  }.} {t
42f0: 65 78 74 20 31 20 69 6e 74 65 67 65 72 20 2d 32  ext 1 integer -2
4300: 20 74 65 78 74 20 35 2e 34 65 2d 30 38 20 72 65   text 5.4e-08 re
4310: 61 6c 20 35 2e 34 65 2d 30 38 7d 0a 0a 23 20 4d  al 5.4e-08}..# M
4320: 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 77 68  ake sure that wh
4330: 65 6e 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20 61  en a column is a
4340: 64 64 65 64 20 62 79 20 41 4c 54 45 52 20 54 41  dded by ALTER TA
4350: 42 4c 45 20 41 44 44 20 43 4f 4c 55 4d 4e 20 61  BLE ADD COLUMN a
4360: 6e 64 20 68 61 73 0a 23 20 61 20 64 65 66 61 75  nd has.# a defau
4370: 6c 74 20 76 61 6c 75 65 20 74 68 61 74 20 74 68  lt value that th
4380: 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  e default value 
4390: 69 73 20 75 73 65 64 20 62 79 20 61 67 67 72 65  is used by aggre
43a0: 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 2e 0a  gate functions..
43b0: 23 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d  #.do_test alter-
43c0: 38 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  8.1 {.  execsql 
43d0: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  {.    CREATE TAB
43e0: 4c 45 20 74 32 28 61 20 49 4e 54 45 47 45 52 29  LE t2(a INTEGER)
43f0: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
4400: 4f 20 74 32 20 56 41 4c 55 45 53 28 31 29 3b 0a  O t2 VALUES(1);.
4410: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
4420: 74 32 20 56 41 4c 55 45 53 28 31 29 3b 0a 20 20  t2 VALUES(1);.  
4430: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32    INSERT INTO t2
4440: 20 56 41 4c 55 45 53 28 32 29 3b 0a 20 20 20 20   VALUES(2);.    
4450: 41 4c 54 45 52 20 54 41 42 4c 45 20 74 32 20 41  ALTER TABLE t2 A
4460: 44 44 20 43 4f 4c 55 4d 4e 20 62 20 49 4e 54 45  DD COLUMN b INTE
4470: 47 45 52 20 44 45 46 41 55 4c 54 20 39 3b 0a 20  GER DEFAULT 9;. 
4480: 20 20 20 53 45 4c 45 43 54 20 73 75 6d 28 62 29     SELECT sum(b)
4490: 20 46 52 4f 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20   FROM t2;.  }.} 
44a0: 7b 32 37 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74  {27}.do_test alt
44b0: 65 72 2d 38 2e 32 20 7b 0a 20 20 65 78 65 63 73  er-8.2 {.  execs
44c0: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
44d0: 61 2c 20 73 75 6d 28 62 29 20 46 52 4f 4d 20 74  a, sum(b) FROM t
44e0: 32 20 47 52 4f 55 50 20 42 59 20 61 3b 0a 20 20  2 GROUP BY a;.  
44f0: 7d 0a 7d 20 7b 31 20 31 38 20 32 20 39 7d 0a 0a  }.} {1 18 2 9}..
4500: 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  #---------------
4510: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4520: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4530: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4540: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 61 6c  -----------.# al
4550: 74 65 72 2d 39 2e 58 20 2d 20 53 70 65 63 69 61  ter-9.X - Specia
4560: 6c 20 74 65 73 74 3a 20 4d 61 6b 65 20 73 75 72  l test: Make sur
4570: 65 20 74 68 65 20 73 71 6c 69 74 65 5f 72 65 6e  e the sqlite_ren
4580: 61 6d 65 5f 74 72 69 67 67 65 72 28 29 20 61 6e  ame_trigger() an
4590: 64 0a 23 20 72 65 6e 61 6d 65 5f 74 61 62 6c 65  d.# rename_table
45a0: 28 29 20 66 75 6e 63 74 69 6f 6e 73 20 64 6f 20  () functions do 
45b0: 6e 6f 74 20 63 72 61 73 68 20 77 68 65 6e 20 68  not crash when h
45c0: 61 6e 64 65 64 20 62 61 64 20 69 6e 70 75 74 2e  anded bad input.
45d0: 0a 23 0a 69 66 63 61 70 61 62 6c 65 20 74 72 69  .#.ifcapable tri
45e0: 67 67 65 72 20 7b 0a 20 20 64 6f 5f 74 65 73 74  gger {.  do_test
45f0: 20 61 6c 74 65 72 2d 39 2e 31 20 7b 0a 20 20 20   alter-9.1 {.   
4600: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
4610: 20 53 51 4c 49 54 45 34 5f 52 45 4e 41 4d 45 5f   SQLITE4_RENAME_
4620: 54 52 49 47 47 45 52 28 30 2c 30 29 7d 0a 20 20  TRIGGER(0,0)}.  
4630: 7d 20 7b 7b 7d 7d 0a 7d 0a 64 6f 5f 74 65 73 74  } {{}}.}.do_test
4640: 20 61 6c 74 65 72 2d 39 2e 32 20 7b 0a 20 20 65   alter-9.2 {.  e
4650: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
4660: 45 43 54 20 53 51 4c 49 54 45 34 5f 52 45 4e 41  ECT SQLITE4_RENA
4670: 4d 45 5f 54 41 42 4c 45 28 30 2c 30 29 3b 0a 20  ME_TABLE(0,0);. 
4680: 20 20 20 53 45 4c 45 43 54 20 53 51 4c 49 54 45     SELECT SQLITE
4690: 34 5f 52 45 4e 41 4d 45 5f 54 41 42 4c 45 28 31  4_RENAME_TABLE(1
46a0: 30 2c 32 30 29 3b 0a 20 20 20 20 53 45 4c 45 43  0,20);.    SELEC
46b0: 54 20 53 51 4c 49 54 45 34 5f 52 45 4e 41 4d 45  T SQLITE4_RENAME
46c0: 5f 54 41 42 4c 45 28 27 66 6f 6f 27 2c 20 27 66  _TABLE('foo', 'f
46d0: 6f 6f 27 29 3b 0a 20 20 7d 0a 7d 20 7b 7b 7d 20  oo');.  }.} {{} 
46e0: 7b 7d 20 7b 7d 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d  {} {}}..#-------
46f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4700: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4710: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4720: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4730: 2d 0a 23 20 61 6c 74 65 72 2d 31 30 2e 58 20 2d  -.# alter-10.X -
4740: 20 4d 61 6b 65 20 73 75 72 65 20 41 4c 54 45 52   Make sure ALTER
4750: 20 54 41 42 4c 45 20 77 6f 72 6b 73 20 77 69 74   TABLE works wit
4760: 68 20 6d 75 6c 74 69 2d 62 79 74 65 20 55 54 46  h multi-byte UTF
4770: 2d 38 20 63 68 61 72 61 63 74 65 72 73 20 0a 23  -8 characters .#
4780: 20 69 6e 20 74 68 65 20 6e 61 6d 65 73 2e 0a 23   in the names..#
4790: 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 31  .do_test alter-1
47a0: 30 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  0.1 {.  execsql 
47b0: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 78 79  "CREATE TABLE xy
47c0: 7a 28 78 20 55 4e 49 51 55 45 29 22 0a 20 20 65  z(x UNIQUE)".  e
47d0: 78 65 63 73 71 6c 20 22 41 4c 54 45 52 20 54 41  xecsql "ALTER TA
47e0: 42 4c 45 20 78 79 7a 20 52 45 4e 41 4d 45 20 54  BLE xyz RENAME T
47f0: 4f 20 78 79 7a 5c 75 31 32 33 34 61 62 63 22 0a  O xyz\u1234abc".
4800: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
4810: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
4820: 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20  te_master WHERE 
4830: 6e 61 6d 65 20 47 4c 4f 42 20 27 78 79 7a 2a 27  name GLOB 'xyz*'
4840: 7d 0a 7d 20 5b 6c 69 73 74 20 78 79 7a 5c 75 31  }.} [list xyz\u1
4850: 32 33 34 61 62 63 5d 0a 64 6f 5f 74 65 73 74 20  234abc].do_test 
4860: 61 6c 74 65 72 2d 31 30 2e 32 20 7b 0a 20 20 65  alter-10.2 {.  e
4870: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
4880: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
4890: 6d 61 73 74 65 72 20 57 48 45 52 45 20 6e 61 6d  master WHERE nam
48a0: 65 20 47 4c 4f 42 20 27 73 71 6c 69 74 65 5f 61  e GLOB 'sqlite_a
48b0: 75 74 6f 69 6e 64 65 78 2a 27 7d 0a 7d 20 5b 6c  utoindex*'}.} [l
48c0: 69 73 74 20 73 71 6c 69 74 65 5f 61 75 74 6f 69  ist sqlite_autoi
48d0: 6e 64 65 78 5f 78 79 7a 5c 75 31 32 33 34 61 62  ndex_xyz\u1234ab
48e0: 63 5f 31 5d 0a 64 6f 5f 74 65 73 74 20 61 6c 74  c_1].do_test alt
48f0: 65 72 2d 31 30 2e 33 20 7b 0a 20 20 65 78 65 63  er-10.3 {.  exec
4900: 73 71 6c 20 22 41 4c 54 45 52 20 54 41 42 4c 45  sql "ALTER TABLE
4910: 20 78 79 7a 5c 75 31 32 33 34 61 62 63 20 52 45   xyz\u1234abc RE
4920: 4e 41 4d 45 20 54 4f 20 78 79 7a 61 62 63 22 0a  NAME TO xyzabc".
4930: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
4940: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
4950: 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20  te_master WHERE 
4960: 6e 61 6d 65 20 47 4c 4f 42 20 27 78 79 7a 2a 27  name GLOB 'xyz*'
4970: 7d 0a 7d 20 5b 6c 69 73 74 20 78 79 7a 61 62 63  }.} [list xyzabc
4980: 5d 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d  ].do_test alter-
4990: 31 30 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c  10.4 {.  execsql
49a0: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
49b0: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
49c0: 20 57 48 45 52 45 20 6e 61 6d 65 20 47 4c 4f 42   WHERE name GLOB
49d0: 20 27 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64   'sqlite_autoind
49e0: 65 78 2a 27 7d 0a 7d 20 5b 6c 69 73 74 20 73 71  ex*'}.} [list sq
49f0: 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 78  lite_autoindex_x
4a00: 79 7a 61 62 63 5f 31 5d 0a 0a 64 6f 5f 74 65 73  yzabc_1]..do_tes
4a10: 74 20 61 6c 74 65 72 2d 31 31 2e 31 20 7b 0a 20  t alter-11.1 {. 
4a20: 20 73 71 6c 69 74 65 34 5f 65 78 65 63 20 64 62   sqlite4_exec db
4a30: 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 74   {CREATE TABLE t
4a40: 31 31 28 25 63 36 25 63 36 29 7d 0a 20 20 65 78  11(%c6%c6)}.  ex
4a50: 65 63 73 71 6c 20 7b 0a 20 20 20 20 41 4c 54 45  ecsql {.    ALTE
4a60: 52 20 54 41 42 4c 45 20 74 31 31 20 41 44 44 20  R TABLE t11 ADD 
4a70: 43 4f 4c 55 4d 4e 20 61 62 63 3b 0a 20 20 7d 0a  COLUMN abc;.  }.
4a80: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
4a90: 20 41 4c 54 45 52 20 54 41 42 4c 45 20 74 31 31   ALTER TABLE t11
4aa0: 20 41 44 44 20 43 4f 4c 55 4d 4e 20 61 62 63 3b   ADD COLUMN abc;
4ab0: 0a 20 20 7d 0a 7d 20 7b 31 20 7b 64 75 70 6c 69  .  }.} {1 {dupli
4ac0: 63 61 74 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  cate column name
4ad0: 3a 20 61 62 63 7d 7d 0a 73 65 74 20 69 73 75 74  : abc}}.set isut
4ae0: 66 31 36 20 5b 72 65 67 65 78 70 20 31 36 20 5b  f16 [regexp 16 [
4af0: 64 62 20 6f 6e 65 20 7b 50 52 41 47 4d 41 20 65  db one {PRAGMA e
4b00: 6e 63 6f 64 69 6e 67 7d 5d 5d 0a 69 66 20 7b 21  ncoding}]].if {!
4b10: 24 69 73 75 74 66 31 36 7d 20 7b 0a 20 20 64 6f  $isutf16} {.  do
4b20: 5f 74 65 73 74 20 61 6c 74 65 72 2d 31 31 2e 32  _test alter-11.2
4b30: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
4b40: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 31 20  INSERT INTO t11 
4b50: 56 41 4c 55 45 53 28 31 2c 32 29 7d 0a 20 20 20  VALUES(1,2)}.   
4b60: 20 73 71 6c 69 74 65 34 5f 65 78 65 63 20 64 62   sqlite4_exec db
4b70: 20 7b 53 45 4c 45 43 54 20 25 63 36 25 63 36 20   {SELECT %c6%c6 
4b80: 41 53 20 78 79 7a 2c 20 61 62 63 20 46 52 4f 4d  AS xyz, abc FROM
4b90: 20 74 31 31 7d 0a 20 20 7d 20 7b 30 20 7b 78 79   t11}.  } {0 {xy
4ba0: 7a 20 61 62 63 20 31 20 32 7d 7d 0a 7d 0a 64 6f  z abc 1 2}}.}.do
4bb0: 5f 74 65 73 74 20 61 6c 74 65 72 2d 31 31 2e 33  _test alter-11.3
4bc0: 20 7b 0a 20 20 73 71 6c 69 74 65 34 5f 65 78 65   {.  sqlite4_exe
4bd0: 63 20 64 62 20 7b 43 52 45 41 54 45 20 54 41 42  c db {CREATE TAB
4be0: 4c 45 20 74 31 31 62 28 22 25 38 31 25 38 32 25  LE t11b("%81%82%
4bf0: 38 33 22 20 74 65 78 74 29 7d 0a 20 20 65 78 65  83" text)}.  exe
4c00: 63 73 71 6c 20 7b 0a 20 20 20 20 41 4c 54 45 52  csql {.    ALTER
4c10: 20 54 41 42 4c 45 20 74 31 31 62 20 41 44 44 20   TABLE t11b ADD 
4c20: 43 4f 4c 55 4d 4e 20 61 62 63 3b 0a 20 20 7d 0a  COLUMN abc;.  }.
4c30: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
4c40: 20 41 4c 54 45 52 20 54 41 42 4c 45 20 74 31 31   ALTER TABLE t11
4c50: 62 20 41 44 44 20 43 4f 4c 55 4d 4e 20 61 62 63  b ADD COLUMN abc
4c60: 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 64 75 70 6c  ;.  }.} {1 {dupl
4c70: 69 63 61 74 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d  icate column nam
4c80: 65 3a 20 61 62 63 7d 7d 0a 69 66 20 7b 21 24 69  e: abc}}.if {!$i
4c90: 73 75 74 66 31 36 7d 20 7b 0a 20 20 64 6f 5f 74  sutf16} {.  do_t
4ca0: 65 73 74 20 61 6c 74 65 72 2d 31 31 2e 34 20 7b  est alter-11.4 {
4cb0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 49 4e  .    execsql {IN
4cc0: 53 45 52 54 20 49 4e 54 4f 20 74 31 31 62 20 56  SERT INTO t11b V
4cd0: 41 4c 55 45 53 28 33 2c 34 29 7d 0a 20 20 20 20  ALUES(3,4)}.    
4ce0: 73 71 6c 69 74 65 34 5f 65 78 65 63 20 64 62 20  sqlite4_exec db 
4cf0: 7b 53 45 4c 45 43 54 20 25 38 31 25 38 32 25 38  {SELECT %81%82%8
4d00: 33 20 41 53 20 78 79 7a 2c 20 61 62 63 20 46 52  3 AS xyz, abc FR
4d10: 4f 4d 20 74 31 31 62 7d 0a 20 20 7d 20 7b 30 20  OM t11b}.  } {0 
4d20: 7b 78 79 7a 20 61 62 63 20 33 20 34 7d 7d 0a 20  {xyz abc 3 4}}. 
4d30: 20 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 31   do_test alter-1
4d40: 31 2e 35 20 7b 0a 20 20 20 20 73 71 6c 69 74 65  1.5 {.    sqlite
4d50: 34 5f 65 78 65 63 20 64 62 20 7b 53 45 4c 45 43  4_exec db {SELEC
4d60: 54 20 5b 25 38 31 25 38 32 25 38 33 5d 20 41 53  T [%81%82%83] AS
4d70: 20 78 79 7a 2c 20 61 62 63 20 46 52 4f 4d 20 74   xyz, abc FROM t
4d80: 31 31 62 7d 0a 20 20 7d 20 7b 30 20 7b 78 79 7a  11b}.  } {0 {xyz
4d90: 20 61 62 63 20 33 20 34 7d 7d 0a 20 20 64 6f 5f   abc 3 4}}.  do_
4da0: 74 65 73 74 20 61 6c 74 65 72 2d 31 31 2e 36 20  test alter-11.6 
4db0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 34 5f 65 78  {.    sqlite4_ex
4dc0: 65 63 20 64 62 20 7b 53 45 4c 45 43 54 20 22 25  ec db {SELECT "%
4dd0: 38 31 25 38 32 25 38 33 22 20 41 53 20 78 79 7a  81%82%83" AS xyz
4de0: 2c 20 61 62 63 20 46 52 4f 4d 20 74 31 31 62 7d  , abc FROM t11b}
4df0: 0a 20 20 7d 20 7b 30 20 7b 78 79 7a 20 61 62 63  .  } {0 {xyz abc
4e00: 20 33 20 34 7d 7d 0a 7d 0a 64 6f 5f 74 65 73 74   3 4}}.}.do_test
4e10: 20 61 6c 74 65 72 2d 31 31 2e 37 20 7b 0a 20 20   alter-11.7 {.  
4e20: 73 71 6c 69 74 65 34 5f 65 78 65 63 20 64 62 20  sqlite4_exec db 
4e30: 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31  {CREATE TABLE t1
4e40: 31 63 28 25 38 31 25 38 32 25 38 33 20 74 65 78  1c(%81%82%83 tex
4e50: 74 29 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  t)}.  execsql {.
4e60: 20 20 20 20 41 4c 54 45 52 20 54 41 42 4c 45 20      ALTER TABLE 
4e70: 74 31 31 63 20 41 44 44 20 43 4f 4c 55 4d 4e 20  t11c ADD COLUMN 
4e80: 61 62 63 3b 0a 20 20 7d 0a 20 20 63 61 74 63 68  abc;.  }.  catch
4e90: 73 71 6c 20 7b 0a 20 20 20 20 41 4c 54 45 52 20  sql {.    ALTER 
4ea0: 54 41 42 4c 45 20 74 31 31 63 20 41 44 44 20 43  TABLE t11c ADD C
4eb0: 4f 4c 55 4d 4e 20 61 62 63 3b 0a 20 20 7d 0a 7d  OLUMN abc;.  }.}
4ec0: 20 7b 31 20 7b 64 75 70 6c 69 63 61 74 65 20 63   {1 {duplicate c
4ed0: 6f 6c 75 6d 6e 20 6e 61 6d 65 3a 20 61 62 63 7d  olumn name: abc}
4ee0: 7d 0a 69 66 20 7b 21 24 69 73 75 74 66 31 36 7d  }.if {!$isutf16}
4ef0: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 61 6c 74   {.  do_test alt
4f00: 65 72 2d 31 31 2e 38 20 7b 0a 20 20 20 20 65 78  er-11.8 {.    ex
4f10: 65 63 73 71 6c 20 7b 49 4e 53 45 52 54 20 49 4e  ecsql {INSERT IN
4f20: 54 4f 20 74 31 31 63 20 56 41 4c 55 45 53 28 35  TO t11c VALUES(5
4f30: 2c 36 29 7d 0a 20 20 20 20 73 71 6c 69 74 65 34  ,6)}.    sqlite4
4f40: 5f 65 78 65 63 20 64 62 20 7b 53 45 4c 45 43 54  _exec db {SELECT
4f50: 20 25 38 31 25 38 32 25 38 33 20 41 53 20 78 79   %81%82%83 AS xy
4f60: 7a 2c 20 61 62 63 20 46 52 4f 4d 20 74 31 31 63  z, abc FROM t11c
4f70: 7d 0a 20 20 7d 20 7b 30 20 7b 78 79 7a 20 61 62  }.  } {0 {xyz ab
4f80: 63 20 35 20 36 7d 7d 0a 20 20 64 6f 5f 74 65 73  c 5 6}}.  do_tes
4f90: 74 20 61 6c 74 65 72 2d 31 31 2e 39 20 7b 0a 20  t alter-11.9 {. 
4fa0: 20 20 20 73 71 6c 69 74 65 34 5f 65 78 65 63 20     sqlite4_exec 
4fb0: 64 62 20 7b 53 45 4c 45 43 54 20 5b 25 38 31 25  db {SELECT [%81%
4fc0: 38 32 25 38 33 5d 20 41 53 20 78 79 7a 2c 20 61  82%83] AS xyz, a
4fd0: 62 63 20 46 52 4f 4d 20 74 31 31 63 7d 0a 20 20  bc FROM t11c}.  
4fe0: 7d 20 7b 30 20 7b 78 79 7a 20 61 62 63 20 35 20  } {0 {xyz abc 5 
4ff0: 36 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 61 6c  6}}.  do_test al
5000: 74 65 72 2d 31 31 2e 31 30 20 7b 0a 20 20 20 20  ter-11.10 {.    
5010: 73 71 6c 69 74 65 34 5f 65 78 65 63 20 64 62 20  sqlite4_exec db 
5020: 7b 53 45 4c 45 43 54 20 22 25 38 31 25 38 32 25  {SELECT "%81%82%
5030: 38 33 22 20 41 53 20 78 79 7a 2c 20 61 62 63 20  83" AS xyz, abc 
5040: 46 52 4f 4d 20 74 31 31 63 7d 0a 20 20 7d 20 7b  FROM t11c}.  } {
5050: 30 20 7b 78 79 7a 20 61 62 63 20 35 20 36 7d 7d  0 {xyz abc 5 6}}
5060: 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65  .}..do_test alte
5070: 72 2d 31 32 2e 31 20 7b 0a 20 20 65 78 65 63 73  r-12.1 {.  execs
5080: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
5090: 54 41 42 4c 45 20 74 31 32 28 61 2c 20 62 2c 20  TABLE t12(a, b, 
50a0: 63 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 56  c);.    CREATE V
50b0: 49 45 57 20 76 31 20 41 53 20 53 45 4c 45 43 54  IEW v1 AS SELECT
50c0: 20 2a 20 46 52 4f 4d 20 74 31 32 3b 0a 20 20 7d   * FROM t12;.  }
50d0: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 61 6c  .} {}.do_test al
50e0: 74 65 72 2d 31 32 2e 32 20 7b 0a 20 20 63 61 74  ter-12.2 {.  cat
50f0: 63 68 73 71 6c 20 7b 0a 20 20 20 20 41 4c 54 45  chsql {.    ALTE
5100: 52 20 54 41 42 4c 45 20 76 31 20 52 45 4e 41 4d  R TABLE v1 RENAM
5110: 45 20 54 4f 20 76 32 3b 0a 20 20 7d 0a 7d 20 7b  E TO v2;.  }.} {
5120: 31 20 7b 76 69 65 77 20 76 31 20 6d 61 79 20 6e  1 {view v1 may n
5130: 6f 74 20 62 65 20 61 6c 74 65 72 65 64 7d 7d 0a  ot be altered}}.
5140: 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 31 32  do_test alter-12
5150: 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .3 {.  execsql {
5160: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 76   SELECT * FROM v
5170: 31 3b 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  1; }.} {}.do_tes
5180: 74 20 61 6c 74 65 72 2d 31 32 2e 34 20 7b 0a 20  t alter-12.4 {. 
5190: 20 64 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69   db close.  sqli
51a0: 74 65 34 20 64 62 20 74 65 73 74 2e 64 62 0a 20  te4 db test.db. 
51b0: 20 65 78 65 63 73 71 6c 20 7b 20 53 45 4c 45 43   execsql { SELEC
51c0: 54 20 2a 20 46 52 4f 4d 20 76 31 3b 20 7d 0a 7d  T * FROM v1; }.}
51d0: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65   {}.do_test alte
51e0: 72 2d 31 32 2e 35 20 7b 0a 20 20 63 61 74 63 68  r-12.5 {.  catch
51f0: 73 71 6c 20 7b 20 0a 20 20 20 20 41 4c 54 45 52  sql { .    ALTER
5200: 20 54 41 42 4c 45 20 76 31 20 41 44 44 20 43 4f   TABLE v1 ADD CO
5210: 4c 55 4d 4e 20 6e 65 77 5f 63 6f 6c 75 6d 6e 3b  LUMN new_column;
5220: 0a 20 20 7d 0a 7d 20 7b 31 20 7b 43 61 6e 6e 6f  .  }.} {1 {Canno
5230: 74 20 61 64 64 20 61 20 63 6f 6c 75 6d 6e 20 74  t add a column t
5240: 6f 20 61 20 76 69 65 77 7d 7d 0a 0a 23 20 54 69  o a view}}..# Ti
5250: 63 6b 65 74 20 23 33 31 30 32 3a 0a 23 20 56 65  cket #3102:.# Ve
5260: 72 69 66 79 20 74 68 61 74 20 63 6f 6d 6d 65 6e  rify that commen
5270: 74 73 20 64 6f 20 6e 6f 74 20 69 6e 74 65 72 66  ts do not interf
5280: 65 72 65 20 77 69 74 68 20 74 68 65 20 74 61 62  ere with the tab
5290: 6c 65 20 72 65 6e 61 6d 65 0a 23 20 61 6c 67 6f  le rename.# algo
52a0: 72 69 74 68 6d 2e 0a 23 0a 64 6f 5f 74 65 73 74  rithm..#.do_test
52b0: 20 61 6c 74 65 72 2d 31 33 2e 31 20 7b 0a 20 20   alter-13.1 {.  
52c0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52  execsql {.    CR
52d0: 45 41 54 45 20 54 41 42 4c 45 20 2f 2a 20 68 69  EATE TABLE /* hi
52e0: 20 2a 2f 20 74 33 31 30 32 61 28 78 29 3b 0a 20   */ t3102a(x);. 
52f0: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
5300: 74 33 31 30 32 62 20 2d 2d 20 63 6f 6d 6d 65 6e  t3102b -- commen
5310: 74 0a 20 20 20 20 28 79 29 3b 0a 20 20 20 20 43  t.    (y);.    C
5320: 52 45 41 54 45 20 49 4e 44 45 58 20 74 33 31 30  REATE INDEX t310
5330: 32 63 20 4f 4e 20 74 33 31 30 32 61 28 78 29 3b  2c ON t3102a(x);
5340: 0a 20 20 20 20 53 45 4c 45 43 54 20 6e 61 6d 65  .    SELECT name
5350: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
5360: 74 65 72 20 57 48 45 52 45 20 6e 61 6d 65 20 47  ter WHERE name G
5370: 4c 4f 42 20 27 74 33 31 30 32 2a 27 20 4f 52 44  LOB 't3102*' ORD
5380: 45 52 20 42 59 20 31 3b 0a 20 20 7d 0a 7d 20 7b  ER BY 1;.  }.} {
5390: 74 33 31 30 32 61 20 74 33 31 30 32 62 20 74 33  t3102a t3102b t3
53a0: 31 30 32 63 7d 0a 64 6f 5f 74 65 73 74 20 61 6c  102c}.do_test al
53b0: 74 65 72 2d 31 33 2e 32 20 7b 0a 20 20 65 78 65  ter-13.2 {.  exe
53c0: 63 73 71 6c 20 7b 0a 20 20 20 20 41 4c 54 45 52  csql {.    ALTER
53d0: 20 54 41 42 4c 45 20 74 33 31 30 32 61 20 52 45   TABLE t3102a RE
53e0: 4e 41 4d 45 20 54 4f 20 74 33 31 30 32 61 5f 72  NAME TO t3102a_r
53f0: 65 6e 61 6d 65 3b 0a 20 20 20 20 53 45 4c 45 43  ename;.    SELEC
5400: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
5410: 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20  te_master WHERE 
5420: 6e 61 6d 65 20 47 4c 4f 42 20 27 74 33 31 30 32  name GLOB 't3102
5430: 2a 27 20 4f 52 44 45 52 20 42 59 20 31 3b 0a 20  *' ORDER BY 1;. 
5440: 20 7d 0a 7d 20 7b 74 33 31 30 32 61 5f 72 65 6e   }.} {t3102a_ren
5450: 61 6d 65 20 74 33 31 30 32 62 20 74 33 31 30 32  ame t3102b t3102
5460: 63 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72  c}.do_test alter
5470: 2d 31 33 2e 33 20 7b 0a 20 20 65 78 65 63 73 71  -13.3 {.  execsq
5480: 6c 20 7b 0a 20 20 20 20 41 4c 54 45 52 20 54 41  l {.    ALTER TA
5490: 42 4c 45 20 74 33 31 30 32 62 20 52 45 4e 41 4d  BLE t3102b RENAM
54a0: 45 20 54 4f 20 74 33 31 30 32 62 5f 72 65 6e 61  E TO t3102b_rena
54b0: 6d 65 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 6e  me;.    SELECT n
54c0: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
54d0: 6d 61 73 74 65 72 20 57 48 45 52 45 20 6e 61 6d  master WHERE nam
54e0: 65 20 47 4c 4f 42 20 27 74 33 31 30 32 2a 27 20  e GLOB 't3102*' 
54f0: 4f 52 44 45 52 20 42 59 20 31 3b 0a 20 20 7d 0a  ORDER BY 1;.  }.
5500: 7d 20 7b 74 33 31 30 32 61 5f 72 65 6e 61 6d 65  } {t3102a_rename
5510: 20 74 33 31 30 32 62 5f 72 65 6e 61 6d 65 20 74   t3102b_rename t
5520: 33 31 30 32 63 7d 0a 0a 23 20 54 69 63 6b 65 74  3102c}..# Ticket
5530: 20 23 33 36 35 31 0a 64 6f 5f 74 65 73 74 20 61   #3651.do_test a
5540: 6c 74 65 72 2d 31 34 2e 31 20 7b 0a 20 20 63 61  lter-14.1 {.  ca
5550: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 43 52 45  tchsql {.    CRE
5560: 41 54 45 20 54 41 42 4c 45 20 74 33 36 35 31 28  ATE TABLE t3651(
5570: 61 20 55 4e 49 51 55 45 29 3b 0a 20 20 20 20 41  a UNIQUE);.    A
5580: 4c 54 45 52 20 54 41 42 4c 45 20 74 33 36 35 31  LTER TABLE t3651
5590: 20 41 44 44 20 43 4f 4c 55 4d 4e 20 62 20 55 4e   ADD COLUMN b UN
55a0: 49 51 55 45 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b  IQUE;.  }.} {1 {
55b0: 43 61 6e 6e 6f 74 20 61 64 64 20 61 20 55 4e 49  Cannot add a UNI
55c0: 51 55 45 20 63 6f 6c 75 6d 6e 7d 7d 0a 64 6f 5f  QUE column}}.do_
55d0: 74 65 73 74 20 61 6c 74 65 72 2d 31 34 2e 32 20  test alter-14.2 
55e0: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  {.  catchsql {. 
55f0: 20 20 20 41 4c 54 45 52 20 54 41 42 4c 45 20 74     ALTER TABLE t
5600: 33 36 35 31 20 41 44 44 20 43 4f 4c 55 4d 4e 20  3651 ADD COLUMN 
5610: 62 20 50 52 49 4d 41 52 59 20 4b 45 59 3b 0a 20  b PRIMARY KEY;. 
5620: 20 7d 0a 7d 20 7b 31 20 7b 43 61 6e 6e 6f 74 20   }.} {1 {Cannot 
5630: 61 64 64 20 61 20 50 52 49 4d 41 52 59 20 4b 45  add a PRIMARY KE
5640: 59 20 63 6f 6c 75 6d 6e 7d 7d 0a 0a 0a 23 2d 2d  Y column}}...#--
5650: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5660: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5670: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5680: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5690: 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73 74 20 74  -------.# Test t
56a0: 68 61 74 20 69 74 20 69 73 20 6e 6f 74 20 70 6f  hat it is not po
56b0: 73 73 69 62 6c 65 20 74 6f 20 75 73 65 20 41 4c  ssible to use AL
56c0: 54 45 52 20 54 41 42 4c 45 20 6f 6e 20 61 6e 79  TER TABLE on any
56d0: 20 73 79 73 74 65 6d 20 74 61 62 6c 65 2e 0a 23   system table..#
56e0: 0a 73 65 74 20 73 79 73 74 65 6d 5f 74 61 62 6c  .set system_tabl
56f0: 65 5f 6c 69 73 74 20 7b 31 20 73 71 6c 69 74 65  e_list {1 sqlite
5700: 5f 6d 61 73 74 65 72 7d 0a 63 61 74 63 68 73 71  _master}.catchsq
5710: 6c 20 41 4e 41 4c 59 5a 45 0a 69 66 63 61 70 61  l ANALYZE.ifcapa
5720: 62 6c 65 20 61 6e 61 6c 79 7a 65 20 7b 20 6c 61  ble analyze { la
5730: 70 70 65 6e 64 20 73 79 73 74 65 6d 5f 74 61 62  ppend system_tab
5740: 6c 65 5f 6c 69 73 74 20 32 20 73 71 6c 69 74 65  le_list 2 sqlite
5750: 5f 73 74 61 74 31 20 7d 0a 69 66 63 61 70 61 62  _stat1 }.ifcapab
5760: 6c 65 20 73 74 61 74 33 20 20 20 7b 20 6c 61 70  le stat3   { lap
5770: 70 65 6e 64 20 73 79 73 74 65 6d 5f 74 61 62 6c  pend system_tabl
5780: 65 5f 6c 69 73 74 20 34 20 73 71 6c 69 74 65 5f  e_list 4 sqlite_
5790: 73 74 61 74 33 20 7d 0a 0a 66 6f 72 65 61 63 68  stat3 }..foreach
57a0: 20 7b 74 6e 20 74 62 6c 7d 20 24 73 79 73 74 65   {tn tbl} $syste
57b0: 6d 5f 74 61 62 6c 65 5f 6c 69 73 74 20 7b 0a 20  m_table_list {. 
57c0: 20 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 31   do_test alter-1
57d0: 35 2e 24 74 6e 2e 31 20 7b 0a 20 20 20 20 63 61  5.$tn.1 {.    ca
57e0: 74 63 68 73 71 6c 20 22 41 4c 54 45 52 20 54 41  tchsql "ALTER TA
57f0: 42 4c 45 20 24 74 62 6c 20 52 45 4e 41 4d 45 20  BLE $tbl RENAME 
5800: 54 4f 20 78 79 7a 22 0a 20 20 7d 20 5b 6c 69 73  TO xyz".  } [lis
5810: 74 20 31 20 22 74 61 62 6c 65 20 24 74 62 6c 20  t 1 "table $tbl 
5820: 6d 61 79 20 6e 6f 74 20 62 65 20 61 6c 74 65 72  may not be alter
5830: 65 64 22 5d 0a 0a 20 20 64 6f 5f 74 65 73 74 20  ed"]..  do_test 
5840: 61 6c 74 65 72 2d 31 35 2e 24 74 6e 2e 32 20 7b  alter-15.$tn.2 {
5850: 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 22 41  .    catchsql "A
5860: 4c 54 45 52 20 54 41 42 4c 45 20 24 74 62 6c 20  LTER TABLE $tbl 
5870: 41 44 44 20 43 4f 4c 55 4d 4e 20 78 79 7a 22 0a  ADD COLUMN xyz".
5880: 20 20 7d 20 5b 6c 69 73 74 20 31 20 22 74 61 62    } [list 1 "tab
5890: 6c 65 20 24 74 62 6c 20 6d 61 79 20 6e 6f 74 20  le $tbl may not 
58a0: 62 65 20 61 6c 74 65 72 65 64 22 5d 0a 7d 0a 0a  be altered"].}..
58b0: 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a           .finish_test.