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

Artifact 57d96ec9b320bd07af77567034488dcb6642c748:


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