/ Hex Artifact Content
Login

Artifact 6337578f49c9dd4e429e5998ea361758b0400255:


0000: 23 0a 23 20 54 68 65 20 61 75 74 68 6f 72 20 6f  #.# The author o
0010: 72 20 61 75 74 68 6f 72 27 73 20 68 65 72 65 62  r author's hereb
0020: 79 20 67 72 61 6e 74 20 74 6f 20 74 68 65 20 70  y grant to the p
0030: 75 62 6c 69 63 20 64 6f 6d 61 69 6e 20 61 20 6e  ublic domain a n
0040: 6f 6e 2d 65 78 63 6c 75 73 69 76 65 2c 0a 23 20  on-exclusive,.# 
0050: 66 75 6c 6c 79 20 70 61 69 64 2d 75 70 2c 20 70  fully paid-up, p
0060: 65 72 70 65 74 75 61 6c 2c 20 6c 69 63 65 6e 73  erpetual, licens
0070: 65 20 69 6e 20 74 68 65 20 73 6f 66 74 77 61 72  e in the softwar
0080: 65 20 61 6e 64 20 61 6c 6c 20 72 65 6c 61 74 65  e and all relate
0090: 64 0a 23 20 69 6e 74 65 6c 6c 65 63 74 75 61 6c  d.# intellectual
00a0: 20 70 72 6f 70 65 72 74 79 20 74 6f 20 6d 61 6b   property to mak
00b0: 65 2c 20 68 61 76 65 20 6d 61 64 65 2c 20 75 73  e, have made, us
00c0: 65 2c 20 68 61 76 65 20 75 73 65 64 2c 20 72 65  e, have used, re
00d0: 70 72 6f 64 75 63 65 2c 0a 23 20 70 72 65 70 61  produce,.# prepa
00e0: 72 65 20 64 65 72 69 76 61 74 69 76 65 20 77 6f  re derivative wo
00f0: 72 6b 73 2c 20 64 69 73 74 72 69 62 75 74 65 2c  rks, distribute,
0100: 20 70 65 72 66 6f 72 6d 20 61 6e 64 20 64 69 73   perform and dis
0110: 70 6c 61 79 20 74 68 65 20 77 6f 72 6b 2e 20 20  play the work.  
0120: 0a 23 0a 23 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 2a 2a 2a 0a 23 20  *************.# 
0170: 54 68 69 73 20 66 69 6c 65 20 69 6d 70 6c 65 6d  This file implem
0180: 65 6e 74 73 20 72 65 67 72 65 73 73 69 6f 6e 20  ents regression 
0190: 74 65 73 74 73 20 66 6f 72 20 53 51 4c 69 74 65  tests for SQLite
01a0: 20 6c 69 62 72 61 72 79 2e 20 20 54 68 65 0a 23   library.  The.#
01b0: 20 66 6f 63 75 73 20 6f 66 20 74 68 69 73 20 73   focus of this s
01c0: 63 72 69 70 74 20 69 73 20 74 65 73 74 69 6e 67  cript is testing
01d0: 20 74 68 65 20 41 4c 54 45 52 20 54 41 42 4c 45   the ALTER TABLE
01e0: 20 73 74 61 74 65 6d 65 6e 74 2e 0a 23 0a 23 20   statement..#.# 
01f0: 24 49 64 3a 20 61 6c 74 65 72 2e 74 65 73 74 2c  $Id: alter.test,
0200: 76 20 31 2e 35 20 32 30 30 34 2f 31 31 2f 31 39  v 1.5 2004/11/19
0210: 20 30 38 3a 30 32 3a 31 34 20 64 61 6e 69 65 6c   08:02:14 daniel
0220: 6b 31 39 37 37 20 45 78 70 20 24 0a 23 0a 0a 73  k1977 Exp $.#..s
0230: 65 74 20 74 65 73 74 64 69 72 20 5b 66 69 6c 65  et testdir [file
0240: 20 64 69 72 6e 61 6d 65 20 24 61 72 67 76 30 5d   dirname $argv0]
0250: 0a 73 6f 75 72 63 65 20 24 74 65 73 74 64 69 72  .source $testdir
0260: 2f 74 65 73 74 65 72 2e 74 63 6c 0a 0a 23 20 49  /tester.tcl..# I
0270: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c  f SQLITE_OMIT_AL
0280: 54 45 52 54 41 42 4c 45 20 69 73 20 64 65 66 69  TERTABLE is defi
0290: 6e 65 64 2c 20 6f 6d 69 74 20 74 68 69 73 20 66  ned, omit this f
02a0: 69 6c 65 2e 0a 69 66 63 61 70 61 62 6c 65 20 21  ile..ifcapable !
02b0: 61 6c 74 65 72 74 61 62 6c 65 20 7b 0a 20 20 66  altertable {.  f
02c0: 69 6e 69 73 68 5f 74 65 73 74 0a 20 20 72 65 74  inish_test.  ret
02d0: 75 72 6e 0a 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d  urn.}..#--------
02e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
02f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0300: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0310: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23  --------------.#
0320: 20 54 65 73 74 20 6f 72 67 61 6e 69 7a 61 74 69   Test organizati
0330: 6f 6e 3a 0a 23 0a 23 20 61 6c 74 65 72 2d 31 2e  on:.#.# alter-1.
0340: 31 2e 2a 20 2d 20 61 6c 74 65 72 2d 31 2e 37 2e  1.* - alter-1.7.
0350: 2a 3a 20 42 61 73 69 63 20 74 65 73 74 73 20 6f  *: Basic tests o
0360: 66 20 41 4c 54 45 52 20 54 41 42 4c 45 2c 20 69  f ALTER TABLE, i
0370: 6e 63 6c 75 64 69 6e 67 20 74 61 62 6c 65 73 0a  ncluding tables.
0380: 23 20 20 20 20 20 77 69 74 68 20 69 6d 70 6c 69  #     with impli
0390: 63 69 74 20 61 6e 64 20 65 78 70 6c 69 63 69 74  cit and explicit
03a0: 20 69 6e 64 69 63 65 73 2e 20 54 68 65 73 65 20   indices. These 
03b0: 74 65 73 74 73 20 63 61 6d 65 20 66 72 6f 6d 20  tests came from 
03c0: 61 6e 20 65 61 72 6c 69 65 72 0a 23 20 20 20 20  an earlier.#    
03d0: 20 66 6f 72 6b 20 6f 66 20 53 51 4c 69 74 65 20   fork of SQLite 
03e0: 74 68 61 74 20 61 6c 73 6f 20 73 75 70 70 6f 72  that also suppor
03f0: 74 65 64 20 41 4c 54 45 52 20 54 41 42 4c 45 2e  ted ALTER TABLE.
0400: 0a 23 20 61 6c 74 65 72 2d 31 2e 38 2e 2a 3a 20  .# alter-1.8.*: 
0410: 54 65 73 74 73 20 66 6f 72 20 41 4c 54 45 52 20  Tests for ALTER 
0420: 54 41 42 4c 45 20 77 68 65 6e 20 74 68 65 20 74  TABLE when the t
0430: 61 62 6c 65 20 72 65 73 69 64 65 73 20 69 6e 20  able resides in 
0440: 61 6e 20 0a 23 20 20 20 20 20 61 74 74 61 63 68  an .#     attach
0450: 65 64 20 64 61 74 61 62 61 73 65 2e 0a 23 20 61  ed database..# a
0460: 6c 74 65 72 2d 31 2e 39 2e 2a 3a 20 54 65 73 74  lter-1.9.*: Test
0470: 73 20 66 6f 72 20 41 4c 54 45 52 20 54 41 42 4c  s for ALTER TABL
0480: 45 20 77 68 65 6e 20 74 68 65 69 72 20 69 73 20  E when their is 
0490: 77 68 69 74 65 73 70 61 63 65 20 62 65 74 77 65  whitespace betwe
04a0: 65 6e 20 74 68 65 0a 23 20 20 20 20 20 74 61 62  en the.#     tab
04b0: 6c 65 20 6e 61 6d 65 20 61 6e 64 20 6c 65 66 74  le name and left
04c0: 20 70 61 72 65 6e 74 68 65 73 69 73 20 74 6f 6b   parenthesis tok
04d0: 65 6e 2e 20 69 2e 65 3a 20 0a 23 20 20 20 20 20  en. i.e: .#     
04e0: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 61 62  "CREATE TABLE ab
04f0: 63 20 20 20 20 20 20 20 28 61 2c 20 62 2c 20 63  c       (a, b, c
0500: 29 3b 22 0a 23 20 61 6c 74 65 72 2d 32 2e 2a 3a  );".# alter-2.*:
0510: 20 54 65 73 74 20 65 72 72 6f 72 20 63 6f 6e 64   Test error cond
0520: 69 74 69 6f 6e 73 20 61 6e 64 20 6d 65 73 73 61  itions and messa
0530: 67 65 73 2e 0a 23 20 61 6c 74 65 72 2d 33 2e 2a  ges..# alter-3.*
0540: 3a 20 54 65 73 74 20 41 4c 54 45 52 20 54 41 42  : Test ALTER TAB
0550: 4c 45 20 6f 6e 20 74 61 62 6c 65 73 20 74 68 61  LE on tables tha
0560: 74 20 68 61 76 65 20 54 52 49 47 47 45 52 73 20  t have TRIGGERs 
0570: 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 6d  attached to them
0580: 2e 0a 23 20 61 6c 74 65 72 2d 34 2e 2a 3a 20 54  ..# alter-4.*: T
0590: 65 73 74 20 41 4c 54 45 52 20 54 41 42 4c 45 20  est ALTER TABLE 
05a0: 6f 6e 20 74 61 62 6c 65 73 20 74 68 61 74 20 68  on tables that h
05b0: 61 76 65 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  ave AUTOINCREMEN
05c0: 54 20 66 69 65 6c 64 73 2e 0a 23 0a 0a 23 20 43  T fields..#..# C
05d0: 72 65 61 74 65 20 73 6f 6d 65 20 74 61 62 6c 65  reate some table
05e0: 73 20 74 6f 20 72 65 6e 61 6d 65 2e 20 20 42 65  s to rename.  Be
05f0: 20 73 75 72 65 20 74 6f 20 69 6e 63 6c 75 64 65   sure to include
0600: 20 73 6f 6d 65 20 54 45 4d 50 20 74 61 62 6c 65   some TEMP table
0610: 73 0a 23 20 61 6e 64 20 73 6f 6d 65 20 74 61 62  s.# and some tab
0620: 6c 65 73 20 77 69 74 68 20 6f 64 64 20 6e 61 6d  les with odd nam
0630: 65 73 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 61 6c  es..#.do_test al
0640: 74 65 72 2d 31 2e 31 20 7b 0a 20 20 65 78 65 63  ter-1.1 {.  exec
0650: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
0660: 20 54 41 42 4c 45 20 74 31 28 61 2c 62 29 3b 0a   TABLE t1(a,b);.
0670: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
0680: 74 31 20 56 41 4c 55 45 53 28 31 2c 32 29 3b 0a  t1 VALUES(1,2);.
0690: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
06a0: 20 5b 74 31 27 78 31 5d 28 63 20 55 4e 49 51 55   [t1'x1](c UNIQU
06b0: 45 2c 20 62 20 50 52 49 4d 41 52 59 20 4b 45 59  E, b PRIMARY KEY
06c0: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
06d0: 54 4f 20 5b 74 31 27 78 31 5d 20 56 41 4c 55 45  TO [t1'x1] VALUE
06e0: 53 28 33 2c 34 29 3b 0a 20 20 20 20 43 52 45 41  S(3,4);.    CREA
06f0: 54 45 20 49 4e 44 45 58 20 74 31 69 31 20 4f 4e  TE INDEX t1i1 ON
0700: 20 54 31 28 42 29 3b 0a 20 20 20 20 43 52 45 41   T1(B);.    CREA
0710: 54 45 20 49 4e 44 45 58 20 74 31 69 32 20 4f 4e  TE INDEX t1i2 ON
0720: 20 74 31 28 61 2c 62 29 3b 0a 20 20 20 20 43 52   t1(a,b);.    CR
0730: 45 41 54 45 20 49 4e 44 45 58 20 69 33 20 4f 4e  EATE INDEX i3 ON
0740: 20 5b 74 31 27 78 31 5d 28 62 2c 63 29 3b 0a 20   [t1'x1](b,c);. 
0750: 20 20 20 43 52 45 41 54 45 20 54 45 4d 50 20 54     CREATE TEMP T
0760: 41 42 4c 45 20 22 74 65 6d 70 20 74 61 62 6c 65  ABLE "temp table
0770: 22 28 65 2c 66 2c 67 20 55 4e 49 51 55 45 29 3b  "(e,f,g UNIQUE);
0780: 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45  .    CREATE INDE
0790: 58 20 69 32 20 4f 4e 20 5b 74 65 6d 70 20 74 61  X i2 ON [temp ta
07a0: 62 6c 65 5d 28 66 29 3b 0a 20 20 20 20 49 4e 53  ble](f);.    INS
07b0: 45 52 54 20 49 4e 54 4f 20 5b 74 65 6d 70 20 74  ERT INTO [temp t
07c0: 61 62 6c 65 5d 20 56 41 4c 55 45 53 28 35 2c 36  able] VALUES(5,6
07d0: 2c 37 29 3b 0a 20 20 7d 0a 20 20 65 78 65 63 73  ,7);.  }.  execs
07e0: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
07f0: 27 74 31 27 2c 20 2a 20 46 52 4f 4d 20 74 31 0a  't1', * FROM t1.
0800: 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20      UNION ALL.  
0810: 20 20 53 45 4c 45 43 54 20 27 74 31 27 27 78 31    SELECT 't1''x1
0820: 27 2c 20 2a 20 46 52 4f 4d 20 22 74 31 27 78 31  ', * FROM "t1'x1
0830: 22 0a 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a  ".    UNION ALL.
0840: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
0850: 4d 20 5b 74 65 6d 70 20 74 61 62 6c 65 5d 0a 20  M [temp table]. 
0860: 20 7d 0a 7d 20 7b 74 31 20 31 20 32 20 74 31 27   }.} {t1 1 2 t1'
0870: 78 31 20 33 20 34 20 35 20 36 20 37 7d 0a 64 6f  x1 3 4 5 6 7}.do
0880: 5f 74 65 73 74 20 61 6c 74 65 72 2d 31 2e 32 20  _test alter-1.2 
0890: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
08a0: 20 20 53 45 4c 45 43 54 20 74 79 70 65 2c 20 6e    SELECT type, n
08b0: 61 6d 65 2c 20 74 62 6c 5f 6e 61 6d 65 20 46 52  ame, tbl_name FR
08c0: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
08d0: 0a 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20  .    UNION ALL. 
08e0: 20 20 20 53 45 4c 45 43 54 20 74 79 70 65 2c 20     SELECT type, 
08f0: 6e 61 6d 65 2c 20 74 62 6c 5f 6e 61 6d 65 20 46  name, tbl_name F
0900: 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f  ROM sqlite_temp_
0910: 6d 61 73 74 65 72 0a 20 20 20 20 4f 52 44 45 52  master.    ORDER
0920: 20 42 59 20 74 62 6c 5f 6e 61 6d 65 2c 20 74 79   BY tbl_name, ty
0930: 70 65 20 64 65 73 63 2c 20 6e 61 6d 65 0a 20 20  pe desc, name.  
0940: 7d 0a 7d 20 5b 6c 69 73 74 20 5c 0a 20 20 20 20  }.} [list \.    
0950: 20 74 61 62 6c 65 20 74 31 20 20 20 20 20 20 20   table t1       
0960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0970: 20 20 20 20 20 20 20 74 31 20 20 20 20 20 20 20         t1       
0980: 20 20 20 20 20 20 5c 0a 20 20 20 20 20 69 6e 64        \.     ind
0990: 65 78 20 74 31 69 31 20 20 20 20 20 20 20 20 20  ex t1i1         
09a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
09b0: 20 20 20 74 31 20 20 20 20 20 20 20 20 20 20 20     t1           
09c0: 20 20 5c 0a 20 20 20 20 20 69 6e 64 65 78 20 74    \.     index t
09d0: 31 69 32 20 20 20 20 20 20 20 20 20 20 20 20 20  1i2             
09e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
09f0: 31 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a  1             \.
0a00: 20 20 20 20 20 74 61 62 6c 65 20 74 31 27 78 31       table t1'x1
0a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0a20: 20 20 20 20 20 20 20 20 20 20 20 74 31 27 78 31             t1'x1
0a30: 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20            \.    
0a40: 20 69 6e 64 65 78 20 69 33 20 20 20 20 20 20 20   index i3       
0a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0a60: 20 20 20 20 20 20 20 74 31 27 78 31 20 20 20 20         t1'x1    
0a70: 20 20 20 20 20 20 5c 0a 20 20 20 20 20 69 6e 64        \.     ind
0a80: 65 78 20 7b 73 71 6c 69 74 65 5f 61 75 74 6f 69  ex {sqlite_autoi
0a90: 6e 64 65 78 5f 74 31 27 78 31 5f 31 7d 20 20 20  ndex_t1'x1_1}   
0aa0: 20 20 20 74 31 27 78 31 20 20 20 20 20 20 20 20     t1'x1        
0ab0: 20 20 5c 0a 20 20 20 20 20 69 6e 64 65 78 20 7b    \.     index {
0ac0: 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65 78  sqlite_autoindex
0ad0: 5f 74 31 27 78 31 5f 32 7d 20 20 20 20 20 20 74  _t1'x1_2}      t
0ae0: 31 27 78 31 20 20 20 20 20 20 20 20 20 20 5c 0a  1'x1          \.
0af0: 20 20 20 20 20 74 61 62 6c 65 20 7b 74 65 6d 70       table {temp
0b00: 20 74 61 62 6c 65 7d 20 20 20 20 20 20 20 20 20   table}         
0b10: 20 20 20 20 20 20 20 20 20 20 20 7b 74 65 6d 70             {temp
0b20: 20 74 61 62 6c 65 7d 20 20 20 5c 0a 20 20 20 20   table}   \.    
0b30: 20 69 6e 64 65 78 20 69 32 20 20 20 20 20 20 20   index i2       
0b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0b50: 20 20 20 20 20 20 20 7b 74 65 6d 70 20 74 61 62         {temp tab
0b60: 6c 65 7d 20 20 20 5c 0a 20 20 20 20 20 69 6e 64  le}   \.     ind
0b70: 65 78 20 7b 73 71 6c 69 74 65 5f 61 75 74 6f 69  ex {sqlite_autoi
0b80: 6e 64 65 78 5f 74 65 6d 70 20 74 61 62 6c 65 5f  ndex_temp table_
0b90: 31 7d 20 7b 74 65 6d 70 20 74 61 62 6c 65 7d 20  1} {temp table} 
0ba0: 20 20 5c 0a 20 20 5d 0a 0a 23 20 4d 61 6b 65 20    \.  ]..# Make 
0bb0: 73 6f 6d 65 20 63 68 61 6e 67 65 73 0a 23 0a 64  some changes.#.d
0bc0: 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 31 2e 33  o_test alter-1.3
0bd0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
0be0: 20 20 20 41 4c 54 45 52 20 54 41 42 4c 45 20 5b     ALTER TABLE [
0bf0: 54 31 5d 20 52 45 4e 41 4d 45 20 74 6f 20 5b 2d  T1] RENAME to [-
0c00: 74 31 2d 5d 3b 0a 20 20 20 20 41 4c 54 45 52 20  t1-];.    ALTER 
0c10: 54 41 42 4c 45 20 22 74 31 27 78 31 22 20 52 45  TABLE "t1'x1" RE
0c20: 4e 41 4d 45 20 54 4f 20 54 32 3b 0a 20 20 20 20  NAME TO T2;.    
0c30: 41 4c 54 45 52 20 54 41 42 4c 45 20 5b 74 65 6d  ALTER TABLE [tem
0c40: 70 20 74 61 62 6c 65 5d 20 52 45 4e 41 4d 45 20  p table] RENAME 
0c50: 74 6f 20 54 65 6d 70 54 61 62 3b 0a 20 20 7d 0a  to TempTab;.  }.
0c60: 7d 20 7b 7d 0a 69 6e 74 65 67 72 69 74 79 5f 63  } {}.integrity_c
0c70: 68 65 63 6b 20 61 6c 74 65 72 2d 31 2e 33 2e 31  heck alter-1.3.1
0c80: 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 31  .do_test alter-1
0c90: 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .4 {.  execsql {
0ca0: 0a 20 20 20 20 53 45 4c 45 43 54 20 27 74 31 27  .    SELECT 't1'
0cb0: 2c 20 2a 20 46 52 4f 4d 20 5b 2d 74 31 2d 5d 0a  , * FROM [-t1-].
0cc0: 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20      UNION ALL.  
0cd0: 20 20 53 45 4c 45 43 54 20 27 74 32 27 2c 20 2a    SELECT 't2', *
0ce0: 20 46 52 4f 4d 20 74 32 0a 20 20 20 20 55 4e 49   FROM t2.    UNI
0cf0: 4f 4e 20 41 4c 4c 0a 20 20 20 20 53 45 4c 45 43  ON ALL.    SELEC
0d00: 54 20 2a 20 46 52 4f 4d 20 74 65 6d 70 74 61 62  T * FROM temptab
0d10: 0a 20 20 7d 0a 7d 20 7b 74 31 20 31 20 32 20 74  .  }.} {t1 1 2 t
0d20: 32 20 33 20 34 20 35 20 36 20 37 7d 0a 64 6f 5f  2 3 4 5 6 7}.do_
0d30: 74 65 73 74 20 61 6c 74 65 72 2d 31 2e 35 20 7b  test alter-1.5 {
0d40: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
0d50: 20 53 45 4c 45 43 54 20 74 79 70 65 2c 20 6e 61   SELECT type, na
0d60: 6d 65 2c 20 74 62 6c 5f 6e 61 6d 65 20 46 52 4f  me, tbl_name FRO
0d70: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 0a  M sqlite_master.
0d80: 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20      UNION ALL.  
0d90: 20 20 53 45 4c 45 43 54 20 74 79 70 65 2c 20 6e    SELECT type, n
0da0: 61 6d 65 2c 20 74 62 6c 5f 6e 61 6d 65 20 46 52  ame, tbl_name FR
0db0: 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  OM sqlite_temp_m
0dc0: 61 73 74 65 72 0a 20 20 20 20 4f 52 44 45 52 20  aster.    ORDER 
0dd0: 42 59 20 74 62 6c 5f 6e 61 6d 65 2c 20 74 79 70  BY tbl_name, typ
0de0: 65 20 64 65 73 63 2c 20 6e 61 6d 65 0a 20 20 7d  e desc, name.  }
0df0: 0a 7d 20 5b 6c 69 73 74 20 5c 0a 20 20 20 20 20  .} [list \.     
0e00: 74 61 62 6c 65 20 2d 74 31 2d 20 20 20 20 20 20  table -t1-      
0e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0e20: 20 20 20 2d 74 31 2d 20 20 20 20 20 20 20 20 5c     -t1-        \
0e30: 0a 20 20 20 20 20 69 6e 64 65 78 20 74 31 69 31  .     index t1i1
0e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0e50: 20 20 20 20 20 20 20 20 20 2d 74 31 2d 20 20 20           -t1-   
0e60: 20 20 20 20 20 5c 0a 20 20 20 20 20 69 6e 64 65       \.     inde
0e70: 78 20 74 31 69 32 20 20 20 20 20 20 20 20 20 20  x t1i2          
0e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d                 -
0e90: 74 31 2d 20 20 20 20 20 20 20 20 5c 0a 20 20 20  t1-        \.   
0ea0: 20 20 74 61 62 6c 65 20 54 32 20 20 20 20 20 20    table T2      
0eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ec0: 20 20 20 20 20 54 32 20 20 20 20 20 20 20 20 20       T2         
0ed0: 20 5c 0a 20 20 20 20 20 69 6e 64 65 78 20 69 33   \.     index i3
0ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ef0: 20 20 20 20 20 20 20 20 20 20 20 54 32 20 20 20             T2   
0f00: 20 20 20 20 20 20 20 5c 0a 20 20 20 20 20 69 6e         \.     in
0f10: 64 65 78 20 7b 73 71 6c 69 74 65 5f 61 75 74 6f  dex {sqlite_auto
0f20: 69 6e 64 65 78 5f 54 32 5f 31 7d 20 20 20 20 20  index_T2_1}     
0f30: 20 54 32 20 20 20 20 20 20 20 20 20 20 5c 0a 20   T2          \. 
0f40: 20 20 20 20 69 6e 64 65 78 20 7b 73 71 6c 69 74      index {sqlit
0f50: 65 5f 61 75 74 6f 69 6e 64 65 78 5f 54 32 5f 32  e_autoindex_T2_2
0f60: 7d 20 20 20 20 20 20 54 32 20 20 20 20 20 20 20  }      T2       
0f70: 20 20 20 5c 0a 20 20 20 20 20 74 61 62 6c 65 20     \.     table 
0f80: 7b 54 65 6d 70 54 61 62 7d 20 20 20 20 20 20 20  {TempTab}       
0f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 54 65               {Te
0fa0: 6d 70 54 61 62 7d 20 20 20 5c 0a 20 20 20 20 20  mpTab}   \.     
0fb0: 69 6e 64 65 78 20 69 32 20 20 20 20 20 20 20 20  index i2        
0fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0fd0: 20 20 20 7b 54 65 6d 70 54 61 62 7d 20 20 20 5c     {TempTab}   \
0fe0: 0a 20 20 20 20 20 69 6e 64 65 78 20 7b 73 71 6c  .     index {sql
0ff0: 69 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 54 65  ite_autoindex_Te
1000: 6d 70 54 61 62 5f 31 7d 20 7b 54 65 6d 70 54 61  mpTab_1} {TempTa
1010: 62 7d 20 20 20 5c 0a 20 20 5d 0a 0a 23 20 4d 61  b}   \.  ]..# Ma
1020: 6b 65 20 73 75 72 65 20 74 68 65 20 63 68 61 6e  ke sure the chan
1030: 67 65 73 20 70 65 72 73 69 73 74 20 61 66 74 65  ges persist afte
1040: 72 20 72 65 73 74 61 72 74 69 6e 67 20 74 68 65  r restarting the
1050: 20 64 61 74 61 62 61 73 65 2e 0a 23 20 28 54 68   database..# (Th
1060: 65 20 54 45 4d 50 20 74 61 62 6c 65 20 77 69 6c  e TEMP table wil
1070: 6c 20 6e 6f 74 20 70 65 72 73 69 73 74 2c 20 6f  l not persist, o
1080: 66 20 63 6f 75 72 73 65 2e 29 0a 23 0a 64 6f 5f  f course.).#.do_
1090: 74 65 73 74 20 61 6c 74 65 72 2d 31 2e 36 20 7b  test alter-1.6 {
10a0: 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 73 65  .  db close.  se
10b0: 74 20 44 42 20 5b 73 71 6c 69 74 65 33 20 64 62  t DB [sqlite3 db
10c0: 20 74 65 73 74 2e 64 62 5d 0a 20 20 65 78 65 63   test.db].  exec
10d0: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
10e0: 20 74 79 70 65 2c 20 6e 61 6d 65 2c 20 74 62 6c   type, name, tbl
10f0: 5f 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74  _name FROM sqlit
1100: 65 5f 6d 61 73 74 65 72 0a 20 20 20 20 55 4e 49  e_master.    UNI
1110: 4f 4e 20 41 4c 4c 0a 20 20 20 20 53 45 4c 45 43  ON ALL.    SELEC
1120: 54 20 74 79 70 65 2c 20 6e 61 6d 65 2c 20 74 62  T type, name, tb
1130: 6c 5f 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  l_name FROM sqli
1140: 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 0a 20  te_temp_master. 
1150: 20 20 20 4f 52 44 45 52 20 42 59 20 74 62 6c 5f     ORDER BY tbl_
1160: 6e 61 6d 65 2c 20 74 79 70 65 20 64 65 73 63 2c  name, type desc,
1170: 20 6e 61 6d 65 0a 20 20 7d 0a 7d 20 5b 6c 69 73   name.  }.} [lis
1180: 74 20 5c 0a 20 20 20 20 20 74 61 62 6c 65 20 2d  t \.     table -
1190: 74 31 2d 20 20 20 20 20 20 20 20 20 20 20 20 20  t1-             
11a0: 20 20 20 20 20 20 20 20 20 20 20 20 2d 74 31 2d              -t1-
11b0: 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20             \.   
11c0: 20 20 69 6e 64 65 78 20 74 31 69 31 20 20 20 20    index t1i1    
11d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e0: 20 20 20 20 20 2d 74 31 2d 20 20 20 20 20 20 20       -t1-       
11f0: 20 20 20 20 5c 0a 20 20 20 20 20 69 6e 64 65 78      \.     index
1200: 20 74 31 69 32 20 20 20 20 20 20 20 20 20 20 20   t1i2           
1210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 74                -t
1220: 31 2d 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20  1-           \. 
1230: 20 20 20 20 74 61 62 6c 65 20 54 32 20 20 20 20      table T2    
1240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1250: 20 20 20 20 20 20 20 54 32 20 20 20 20 20 20 20         T2       
1260: 20 20 20 5c 0a 20 20 20 20 20 69 6e 64 65 78 20     \.     index 
1270: 69 33 20 20 20 20 20 20 20 20 20 20 20 20 20 20  i3              
1280: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 32 20               T2 
1290: 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20 20           \.     
12a0: 69 6e 64 65 78 20 7b 73 71 6c 69 74 65 5f 61 75  index {sqlite_au
12b0: 74 6f 69 6e 64 65 78 5f 54 32 5f 31 7d 20 20 20  toindex_T2_1}   
12c0: 20 20 20 54 32 20 20 20 20 20 20 20 20 20 20 5c     T2          \
12d0: 0a 20 20 20 20 20 69 6e 64 65 78 20 7b 73 71 6c  .     index {sql
12e0: 69 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 54 32  ite_autoindex_T2
12f0: 5f 32 7d 20 20 20 20 20 20 54 32 20 20 20 20 20  _2}      T2     
1300: 20 20 20 20 20 5c 0a 20 20 5d 0a 0a 23 20 4d 61       \.  ]..# Ma
1310: 6b 65 20 73 75 72 65 20 74 68 65 20 41 4c 54 45  ke sure the ALTE
1320: 52 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e  R TABLE statemen
1330: 74 73 20 77 6f 72 6b 20 77 69 74 68 20 74 68 65  ts work with the
1340: 0a 23 20 6e 6f 6e 2d 63 61 6c 6c 62 61 63 6b 20  .# non-callback 
1350: 41 50 49 0a 23 0a 64 6f 5f 74 65 73 74 20 61 6c  API.#.do_test al
1360: 74 65 72 2d 31 2e 37 20 7b 0a 20 20 73 74 65 70  ter-1.7 {.  step
1370: 73 71 6c 20 24 44 42 20 7b 0a 20 20 20 20 41 4c  sql $DB {.    AL
1380: 54 45 52 20 54 41 42 4c 45 20 5b 2d 74 31 2d 5d  TER TABLE [-t1-]
1390: 20 52 45 4e 41 4d 45 20 74 6f 20 5b 2a 74 31 2a   RENAME to [*t1*
13a0: 5d 3b 0a 20 20 20 20 41 4c 54 45 52 20 54 41 42  ];.    ALTER TAB
13b0: 4c 45 20 54 32 20 52 45 4e 41 4d 45 20 54 4f 20  LE T2 RENAME TO 
13c0: 5b 3c 74 32 3e 5d 3b 0a 20 20 7d 0a 20 20 65 78  [<t2>];.  }.  ex
13d0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
13e0: 43 54 20 74 79 70 65 2c 20 6e 61 6d 65 2c 20 74  CT type, name, t
13f0: 62 6c 5f 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  bl_name FROM sql
1400: 69 74 65 5f 6d 61 73 74 65 72 0a 20 20 20 20 55  ite_master.    U
1410: 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 53 45 4c  NION ALL.    SEL
1420: 45 43 54 20 74 79 70 65 2c 20 6e 61 6d 65 2c 20  ECT type, name, 
1430: 74 62 6c 5f 6e 61 6d 65 20 46 52 4f 4d 20 73 71  tbl_name FROM sq
1440: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
1450: 0a 20 20 20 20 4f 52 44 45 52 20 42 59 20 74 62  .    ORDER BY tb
1460: 6c 5f 6e 61 6d 65 2c 20 74 79 70 65 20 64 65 73  l_name, type des
1470: 63 2c 20 6e 61 6d 65 0a 20 20 7d 0a 7d 20 5b 6c  c, name.  }.} [l
1480: 69 73 74 20 5c 0a 20 20 20 20 20 74 61 62 6c 65  ist \.     table
1490: 20 2a 74 31 2a 20 20 20 20 20 20 20 20 20 20 20   *t1*           
14a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 74                *t
14b0: 31 2a 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20  1*           \. 
14c0: 20 20 20 20 69 6e 64 65 78 20 74 31 69 31 20 20      index t1i1  
14d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e0: 20 20 20 20 20 20 20 2a 74 31 2a 20 20 20 20 20         *t1*     
14f0: 20 20 20 20 20 20 5c 0a 20 20 20 20 20 69 6e 64        \.     ind
1500: 65 78 20 74 31 69 32 20 20 20 20 20 20 20 20 20  ex t1i2         
1510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1520: 2a 74 31 2a 20 20 20 20 20 20 20 20 20 20 20 5c  *t1*           \
1530: 0a 20 20 20 20 20 74 61 62 6c 65 20 3c 74 32 3e  .     table <t2>
1540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1550: 20 20 20 20 20 20 20 20 20 3c 74 32 3e 20 20 20           <t2>   
1560: 20 20 20 20 20 20 20 5c 0a 20 20 20 20 20 69 6e         \.     in
1570: 64 65 78 20 69 33 20 20 20 20 20 20 20 20 20 20  dex i3          
1580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1590: 20 3c 74 32 3e 20 20 20 20 20 20 20 20 20 20 5c   <t2>          \
15a0: 0a 20 20 20 20 20 69 6e 64 65 78 20 7b 73 71 6c  .     index {sql
15b0: 69 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 3c 74  ite_autoindex_<t
15c0: 32 3e 5f 31 7d 20 20 20 20 3c 74 32 3e 20 20 20  2>_1}    <t2>   
15d0: 20 20 20 20 20 20 20 5c 0a 20 20 20 20 20 69 6e         \.     in
15e0: 64 65 78 20 7b 73 71 6c 69 74 65 5f 61 75 74 6f  dex {sqlite_auto
15f0: 69 6e 64 65 78 5f 3c 74 32 3e 5f 32 7d 20 20 20  index_<t2>_2}   
1600: 20 3c 74 32 3e 20 20 20 20 20 20 20 20 20 20 5c   <t2>          \
1610: 0a 20 20 5d 0a 0a 23 20 43 68 65 63 6b 20 74 68  .  ]..# Check th
1620: 61 74 20 41 4c 54 45 52 20 54 41 42 4c 45 20 77  at ALTER TABLE w
1630: 6f 72 6b 73 20 6f 6e 20 61 74 74 61 63 68 65 64  orks on attached
1640: 20 64 61 74 61 62 61 73 65 73 2e 0a 23 0a 64 6f   databases..#.do
1650: 5f 74 65 73 74 20 61 6c 74 65 72 2d 31 2e 38 2e  _test alter-1.8.
1660: 31 20 7b 0a 20 20 66 69 6c 65 20 64 65 6c 65 74  1 {.  file delet
1670: 65 20 2d 66 6f 72 63 65 20 74 65 73 74 32 2e 64  e -force test2.d
1680: 62 0a 20 20 66 69 6c 65 20 64 65 6c 65 74 65 20  b.  file delete 
1690: 2d 66 6f 72 63 65 20 74 65 73 74 32 2e 64 62 2d  -force test2.db-
16a0: 6a 6f 75 72 6e 61 6c 0a 20 20 65 78 65 63 73 71  journal.  execsq
16b0: 6c 20 7b 0a 20 20 20 20 41 54 54 41 43 48 20 27  l {.    ATTACH '
16c0: 74 65 73 74 32 2e 64 62 27 20 41 53 20 61 75 78  test2.db' AS aux
16d0: 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65  ;.  }.} {}.do_te
16e0: 73 74 20 61 6c 74 65 72 2d 31 2e 38 2e 32 20 7b  st alter-1.8.2 {
16f0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
1700: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 34   CREATE TABLE t4
1710: 28 61 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20  (a PRIMARY KEY, 
1720: 62 2c 20 63 29 3b 0a 20 20 20 20 43 52 45 41 54  b, c);.    CREAT
1730: 45 20 54 41 42 4c 45 20 61 75 78 2e 74 34 28 61  E TABLE aux.t4(a
1740: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 2c   PRIMARY KEY, b,
1750: 20 63 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20   c);.    CREATE 
1760: 49 4e 44 45 58 20 69 34 20 4f 4e 20 74 34 28 62  INDEX i4 ON t4(b
1770: 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e  );.    CREATE IN
1780: 44 45 58 20 61 75 78 2e 69 34 20 4f 4e 20 61 75  DEX aux.i4 ON au
1790: 78 2e 74 34 28 62 29 3b 0a 20 20 7d 0a 7d 20 7b  x.t4(b);.  }.} {
17a0: 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d  }.do_test alter-
17b0: 31 2e 38 2e 33 20 7b 0a 20 20 65 78 65 63 73 71  1.8.3 {.  execsq
17c0: 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  l {.    INSERT I
17d0: 4e 54 4f 20 74 34 20 56 41 4c 55 45 53 28 27 6d  NTO t4 VALUES('m
17e0: 61 69 6e 27 2c 20 27 6d 61 69 6e 27 2c 20 27 6d  ain', 'main', 'm
17f0: 61 69 6e 27 29 3b 0a 20 20 20 20 49 4e 53 45 52  ain');.    INSER
1800: 54 20 49 4e 54 4f 20 61 75 78 2e 74 34 20 56 41  T INTO aux.t4 VA
1810: 4c 55 45 53 28 27 61 75 78 27 2c 20 27 61 75 78  LUES('aux', 'aux
1820: 27 2c 20 27 61 75 78 27 29 3b 0a 20 20 20 20 53  ', 'aux');.    S
1830: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 34 20  ELECT * FROM t4 
1840: 57 48 45 52 45 20 61 20 3d 20 27 6d 61 69 6e 27  WHERE a = 'main'
1850: 3b 0a 20 20 7d 0a 7d 20 7b 6d 61 69 6e 20 6d 61  ;.  }.} {main ma
1860: 69 6e 20 6d 61 69 6e 7d 0a 64 6f 5f 74 65 73 74  in main}.do_test
1870: 20 61 6c 74 65 72 2d 31 2e 38 2e 34 20 7b 0a 20   alter-1.8.4 {. 
1880: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 41   execsql {.    A
1890: 4c 54 45 52 20 54 41 42 4c 45 20 74 34 20 52 45  LTER TABLE t4 RE
18a0: 4e 41 4d 45 20 54 4f 20 74 35 3b 0a 20 20 20 20  NAME TO t5;.    
18b0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 34  SELECT * FROM t4
18c0: 20 57 48 45 52 45 20 61 20 3d 20 27 61 75 78 27   WHERE a = 'aux'
18d0: 3b 0a 20 20 7d 0a 7d 20 7b 61 75 78 20 61 75 78  ;.  }.} {aux aux
18e0: 20 61 75 78 7d 0a 64 6f 5f 74 65 73 74 20 61 6c   aux}.do_test al
18f0: 74 65 72 2d 31 2e 38 2e 35 20 7b 0a 20 20 65 78  ter-1.8.5 {.  ex
1900: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
1910: 43 54 20 2a 20 46 52 4f 4d 20 74 35 3b 0a 20 20  CT * FROM t5;.  
1920: 7d 0a 7d 20 7b 6d 61 69 6e 20 6d 61 69 6e 20 6d  }.} {main main m
1930: 61 69 6e 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74  ain}.do_test alt
1940: 65 72 2d 31 2e 38 2e 36 20 7b 0a 20 20 65 78 65  er-1.8.6 {.  exe
1950: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
1960: 54 20 2a 20 46 52 4f 4d 20 74 35 20 57 48 45 52  T * FROM t5 WHER
1970: 45 20 62 20 3d 20 27 6d 61 69 6e 27 3b 0a 20 20  E b = 'main';.  
1980: 7d 0a 7d 20 7b 6d 61 69 6e 20 6d 61 69 6e 20 6d  }.} {main main m
1990: 61 69 6e 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74  ain}.do_test alt
19a0: 65 72 2d 31 2e 38 2e 37 20 7b 0a 20 20 65 78 65  er-1.8.7 {.  exe
19b0: 63 73 71 6c 20 7b 0a 20 20 20 20 41 4c 54 45 52  csql {.    ALTER
19c0: 20 54 41 42 4c 45 20 61 75 78 2e 74 34 20 52 45   TABLE aux.t4 RE
19d0: 4e 41 4d 45 20 54 4f 20 74 35 3b 0a 20 20 20 20  NAME TO t5;.    
19e0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 61 75  SELECT * FROM au
19f0: 78 2e 74 35 20 57 48 45 52 45 20 62 20 3d 20 27  x.t5 WHERE b = '
1a00: 61 75 78 27 3b 0a 20 20 7d 0a 7d 20 7b 61 75 78  aux';.  }.} {aux
1a10: 20 61 75 78 20 61 75 78 7d 0a 0a 64 6f 5f 74 65   aux aux}..do_te
1a20: 73 74 20 61 6c 74 65 72 2d 31 2e 39 2e 31 20 7b  st alter-1.9.1 {
1a30: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
1a40: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 62   CREATE TABLE tb
1a50: 6c 31 20 20 20 28 61 2c 20 62 2c 20 63 29 3b 0a  l1   (a, b, c);.
1a60: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
1a70: 74 62 6c 31 20 56 41 4c 55 45 53 28 31 2c 20 32  tbl1 VALUES(1, 2
1a80: 2c 20 33 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64  , 3);.  }.} {}.d
1a90: 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 31 2e 39  o_test alter-1.9
1aa0: 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .2 {.  execsql {
1ab0: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
1ac0: 4f 4d 20 74 62 6c 31 3b 0a 20 20 7d 0a 7d 20 7b  OM tbl1;.  }.} {
1ad0: 31 20 32 20 33 7d 0a 64 6f 5f 74 65 73 74 20 61  1 2 3}.do_test a
1ae0: 6c 74 65 72 2d 31 2e 39 2e 33 20 7b 0a 20 20 65  lter-1.9.3 {.  e
1af0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 41 4c 54  xecsql {.    ALT
1b00: 45 52 20 54 41 42 4c 45 20 74 62 6c 31 20 52 45  ER TABLE tbl1 RE
1b10: 4e 41 4d 45 20 54 4f 20 74 62 6c 32 3b 0a 20 20  NAME TO tbl2;.  
1b20: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
1b30: 74 62 6c 32 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32  tbl2;.  }.} {1 2
1b40: 20 33 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65   3}.do_test alte
1b50: 72 2d 31 2e 39 2e 34 20 7b 0a 20 20 65 78 65 63  r-1.9.4 {.  exec
1b60: 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20 54  sql {.    DROP T
1b70: 41 42 4c 45 20 74 62 6c 32 3b 0a 20 20 7d 0a 7d  ABLE tbl2;.  }.}
1b80: 20 7b 7d 0a 0a 23 20 54 65 73 74 20 65 72 72 6f   {}..# Test erro
1b90: 72 20 6d 65 73 73 61 67 65 73 0a 23 0a 64 6f 5f  r messages.#.do_
1ba0: 74 65 73 74 20 61 6c 74 65 72 2d 32 2e 31 20 7b  test alter-2.1 {
1bb0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
1bc0: 20 20 41 4c 54 45 52 20 54 41 42 4c 45 20 6e 6f    ALTER TABLE no
1bd0: 6e 65 20 52 45 4e 41 4d 45 20 54 4f 20 68 69 3b  ne RENAME TO hi;
1be0: 0a 20 20 7d 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75  .  }.} {1 {no su
1bf0: 63 68 20 74 61 62 6c 65 3a 20 6e 6f 6e 65 7d 7d  ch table: none}}
1c00: 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 32  .do_test alter-2
1c10: 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .2 {.  execsql {
1c20: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
1c30: 45 20 74 33 28 70 2c 71 2c 72 29 3b 0a 20 20 7d  E t3(p,q,r);.  }
1c40: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
1c50: 20 20 41 4c 54 45 52 20 54 41 42 4c 45 20 5b 3c    ALTER TABLE [<
1c60: 74 32 3e 5d 20 52 45 4e 41 4d 45 20 54 4f 20 74  t2>] RENAME TO t
1c70: 33 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 74 68 65  3;.  }.} {1 {the
1c80: 72 65 20 69 73 20 61 6c 72 65 61 64 79 20 61 6e  re is already an
1c90: 6f 74 68 65 72 20 74 61 62 6c 65 20 6f 72 20 69  other table or i
1ca0: 6e 64 65 78 20 77 69 74 68 20 74 68 69 73 20 6e  ndex with this n
1cb0: 61 6d 65 3a 20 74 33 7d 7d 0a 64 6f 5f 74 65 73  ame: t3}}.do_tes
1cc0: 74 20 61 6c 74 65 72 2d 32 2e 33 20 7b 0a 20 20  t alter-2.3 {.  
1cd0: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 41  catchsql {.    A
1ce0: 4c 54 45 52 20 54 41 42 4c 45 20 5b 3c 74 32 3e  LTER TABLE [<t2>
1cf0: 5d 20 52 45 4e 41 4d 45 20 54 4f 20 69 33 3b 0a  ] RENAME TO i3;.
1d00: 20 20 7d 0a 7d 20 7b 31 20 7b 74 68 65 72 65 20    }.} {1 {there 
1d10: 69 73 20 61 6c 72 65 61 64 79 20 61 6e 6f 74 68  is already anoth
1d20: 65 72 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  er table or inde
1d30: 78 20 77 69 74 68 20 74 68 69 73 20 6e 61 6d 65  x with this name
1d40: 3a 20 69 33 7d 7d 0a 0a 23 20 49 66 20 74 68 69  : i3}}..# If thi
1d50: 73 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 64 6f  s compilation do
1d60: 65 73 20 6e 6f 74 20 69 6e 63 6c 75 64 65 20 74  es not include t
1d70: 72 69 67 67 65 72 73 2c 20 6f 6d 69 74 20 74 68  riggers, omit th
1d80: 65 20 61 6c 74 65 72 2d 33 2e 2a 20 74 65 73 74  e alter-3.* test
1d90: 73 2e 0a 69 66 63 61 70 61 62 6c 65 20 74 72 69  s..ifcapable tri
1da0: 67 67 65 72 20 7b 0a 0a 23 2d 2d 2d 2d 2d 2d 2d  gger {..#-------
1db0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1dc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1dd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1de0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1df0: 0a 23 20 54 65 73 74 73 20 61 6c 74 65 72 2d 33  .# Tests alter-3
1e00: 2e 2a 20 74 65 73 74 20 41 4c 54 45 52 20 54 41  .* test ALTER TA
1e10: 42 4c 45 20 6f 6e 20 74 61 62 6c 65 73 20 74 68  BLE on tables th
1e20: 61 74 20 68 61 76 65 20 74 72 69 67 67 65 72 73  at have triggers
1e30: 2e 0a 23 0a 23 20 61 6c 74 65 72 2d 33 2e 31 2e  ..#.# alter-3.1.
1e40: 2a 3a 20 41 4c 54 45 52 20 54 41 42 4c 45 20 77  *: ALTER TABLE w
1e50: 69 74 68 20 74 72 69 67 67 65 72 73 2e 0a 23 20  ith triggers..# 
1e60: 61 6c 74 65 72 2d 33 2e 32 2e 2a 3a 20 54 65 73  alter-3.2.*: Tes
1e70: 74 20 74 68 61 74 20 74 68 65 20 4f 4e 20 6b 65  t that the ON ke
1e80: 79 77 6f 72 64 20 63 61 6e 6e 6f 74 20 62 65 20  yword cannot be 
1e90: 75 73 65 64 20 61 73 20 61 20 64 61 74 61 62 61  used as a databa
1ea0: 73 65 2c 0a 23 20 20 20 20 20 74 61 62 6c 65 20  se,.#     table 
1eb0: 6f 72 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 75  or column name u
1ec0: 6e 71 75 6f 74 65 64 2e 20 54 68 69 73 20 69 73  nquoted. This is
1ed0: 20 64 6f 6e 65 20 62 65 63 61 75 73 65 20 70 61   done because pa
1ee0: 72 74 20 6f 66 20 74 68 65 0a 23 20 20 20 20 20  rt of the.#     
1ef0: 41 4c 54 45 52 20 54 41 42 4c 45 20 63 6f 64 65  ALTER TABLE code
1f00: 20 28 73 70 65 63 69 66 69 63 61 6c 6c 79 20 74   (specifically t
1f10: 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
1f20: 6e 20 6f 66 20 53 51 4c 20 66 75 6e 63 74 69 6f  n of SQL functio
1f30: 6e 0a 23 20 20 20 20 20 22 73 71 6c 69 74 65 5f  n.#     "sqlite_
1f40: 61 6c 74 65 72 5f 74 72 69 67 67 65 72 22 29 20  alter_trigger") 
1f50: 77 69 6c 6c 20 62 72 65 61 6b 20 69 6e 20 74 68  will break in th
1f60: 69 73 20 63 61 73 65 2e 0a 23 20 61 6c 74 65 72  is case..# alter
1f70: 2d 33 2e 33 2e 2a 3a 20 41 4c 54 45 52 20 54 41  -3.3.*: ALTER TA
1f80: 42 4c 45 20 77 69 74 68 20 54 45 4d 50 20 74 72  BLE with TEMP tr
1f90: 69 67 67 65 72 73 20 28 74 6f 64 6f 29 2e 0a 23  iggers (todo)..#
1fa0: 0a 0a 23 20 41 6e 20 53 51 4c 20 75 73 65 72 2d  ..# An SQL user-
1fb0: 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 74 72 69  function for tri
1fc0: 67 67 65 72 73 20 74 6f 20 66 69 72 65 2c 20 73  ggers to fire, s
1fd0: 6f 20 74 68 61 74 20 77 65 20 6b 6e 6f 77 20 74  o that we know t
1fe0: 68 65 79 0a 23 20 61 72 65 20 77 6f 72 6b 69 6e  hey.# are workin
1ff0: 67 2e 0a 70 72 6f 63 20 74 72 69 67 66 75 6e 63  g..proc trigfunc
2000: 20 7b 61 72 67 73 7d 20 7b 0a 20 20 73 65 74 20   {args} {.  set 
2010: 3a 3a 54 52 49 47 47 45 52 20 24 61 72 67 73 0a  ::TRIGGER $args.
2020: 7d 0a 64 62 20 66 75 6e 63 20 74 72 69 67 66 75  }.db func trigfu
2030: 6e 63 20 74 72 69 67 66 75 6e 63 0a 0a 64 6f 5f  nc trigfunc..do_
2040: 74 65 73 74 20 61 6c 74 65 72 2d 33 2e 31 2e 30  test alter-3.1.0
2050: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
2060: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
2070: 74 36 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20  t6(a, b, c);.   
2080: 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20   CREATE TRIGGER 
2090: 74 72 69 67 31 20 41 46 54 45 52 20 49 4e 53 45  trig1 AFTER INSE
20a0: 52 54 20 4f 4e 20 74 36 20 42 45 47 49 4e 0a 20  RT ON t6 BEGIN. 
20b0: 20 20 20 20 20 53 45 4c 45 43 54 20 74 72 69 67       SELECT trig
20c0: 66 75 6e 63 28 27 74 72 69 67 31 27 2c 20 6e 65  func('trig1', ne
20d0: 77 2e 61 2c 20 6e 65 77 2e 62 2c 20 6e 65 77 2e  w.a, new.b, new.
20e0: 63 29 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 7d  c);.    END;.  }
20f0: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 61 6c  .} {}.do_test al
2100: 74 65 72 2d 33 2e 31 2e 31 20 7b 0a 20 20 65 78  ter-3.1.1 {.  ex
2110: 65 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45  ecsql {.    INSE
2120: 52 54 20 49 4e 54 4f 20 74 36 20 56 41 4c 55 45  RT INTO t6 VALUE
2130: 53 28 31 2c 20 32 2c 20 33 29 3b 0a 20 20 7d 0a  S(1, 2, 3);.  }.
2140: 20 20 73 65 74 20 3a 3a 54 52 49 47 47 45 52 0a    set ::TRIGGER.
2150: 7d 20 7b 74 72 69 67 31 20 31 20 32 20 33 7d 0a  } {trig1 1 2 3}.
2160: 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 33 2e  do_test alter-3.
2170: 31 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  1.2 {.  execsql 
2180: 7b 0a 20 20 20 20 41 4c 54 45 52 20 54 41 42 4c  {.    ALTER TABL
2190: 45 20 74 36 20 52 45 4e 41 4d 45 20 54 4f 20 74  E t6 RENAME TO t
21a0: 37 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  7;.    INSERT IN
21b0: 54 4f 20 74 37 20 56 41 4c 55 45 53 28 34 2c 20  TO t7 VALUES(4, 
21c0: 35 2c 20 36 29 3b 0a 20 20 7d 0a 20 20 73 65 74  5, 6);.  }.  set
21d0: 20 3a 3a 54 52 49 47 47 45 52 0a 7d 20 7b 74 72   ::TRIGGER.} {tr
21e0: 69 67 31 20 34 20 35 20 36 7d 0a 64 6f 5f 74 65  ig1 4 5 6}.do_te
21f0: 73 74 20 61 6c 74 65 72 2d 33 2e 31 2e 33 20 7b  st alter-3.1.3 {
2200: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
2210: 20 44 52 4f 50 20 54 52 49 47 47 45 52 20 74 72   DROP TRIGGER tr
2220: 69 67 31 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f  ig1;.  }.} {}.do
2230: 5f 74 65 73 74 20 61 6c 74 65 72 2d 33 2e 31 2e  _test alter-3.1.
2240: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  4 {.  execsql {.
2250: 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47      CREATE TRIGG
2260: 45 52 20 74 72 69 67 32 20 41 46 54 45 52 20 49  ER trig2 AFTER I
2270: 4e 53 45 52 54 20 4f 4e 20 6d 61 69 6e 2e 74 37  NSERT ON main.t7
2280: 20 42 45 47 49 4e 0a 20 20 20 20 20 20 53 45 4c   BEGIN.      SEL
2290: 45 43 54 20 74 72 69 67 66 75 6e 63 28 27 74 72  ECT trigfunc('tr
22a0: 69 67 32 27 2c 20 6e 65 77 2e 61 2c 20 6e 65 77  ig2', new.a, new
22b0: 2e 62 2c 20 6e 65 77 2e 63 29 3b 0a 20 20 20 20  .b, new.c);.    
22c0: 45 4e 44 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  END;.    INSERT 
22d0: 49 4e 54 4f 20 74 37 20 56 41 4c 55 45 53 28 31  INTO t7 VALUES(1
22e0: 2c 20 32 2c 20 33 29 3b 0a 20 20 7d 0a 20 20 73  , 2, 3);.  }.  s
22f0: 65 74 20 3a 3a 54 52 49 47 47 45 52 0a 7d 20 7b  et ::TRIGGER.} {
2300: 74 72 69 67 32 20 31 20 32 20 33 7d 0a 64 6f 5f  trig2 1 2 3}.do_
2310: 74 65 73 74 20 61 6c 74 65 72 2d 33 2e 31 2e 35  test alter-3.1.5
2320: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
2330: 20 20 20 41 4c 54 45 52 20 54 41 42 4c 45 20 74     ALTER TABLE t
2340: 37 20 52 45 4e 41 4d 45 20 54 4f 20 74 38 3b 0a  7 RENAME TO t8;.
2350: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
2360: 74 38 20 56 41 4c 55 45 53 28 34 2c 20 35 2c 20  t8 VALUES(4, 5, 
2370: 36 29 3b 0a 20 20 7d 0a 20 20 73 65 74 20 3a 3a  6);.  }.  set ::
2380: 54 52 49 47 47 45 52 0a 7d 20 7b 74 72 69 67 32  TRIGGER.} {trig2
2390: 20 34 20 35 20 36 7d 0a 64 6f 5f 74 65 73 74 20   4 5 6}.do_test 
23a0: 61 6c 74 65 72 2d 33 2e 31 2e 36 20 7b 0a 20 20  alter-3.1.6 {.  
23b0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44 52  execsql {.    DR
23c0: 4f 50 20 54 52 49 47 47 45 52 20 74 72 69 67 32  OP TRIGGER trig2
23d0: 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65  ;.  }.} {}.do_te
23e0: 73 74 20 61 6c 74 65 72 2d 33 2e 31 2e 37 20 7b  st alter-3.1.7 {
23f0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
2400: 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20   CREATE TRIGGER 
2410: 74 72 69 67 33 20 41 46 54 45 52 20 49 4e 53 45  trig3 AFTER INSE
2420: 52 54 20 4f 4e 20 6d 61 69 6e 2e 27 74 38 27 42  RT ON main.'t8'B
2430: 45 47 49 4e 0a 20 20 20 20 20 20 53 45 4c 45 43  EGIN.      SELEC
2440: 54 20 74 72 69 67 66 75 6e 63 28 27 74 72 69 67  T trigfunc('trig
2450: 33 27 2c 20 6e 65 77 2e 61 2c 20 6e 65 77 2e 62  3', new.a, new.b
2460: 2c 20 6e 65 77 2e 63 29 3b 0a 20 20 20 20 45 4e  , new.c);.    EN
2470: 44 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  D;.    INSERT IN
2480: 54 4f 20 74 38 20 56 41 4c 55 45 53 28 31 2c 20  TO t8 VALUES(1, 
2490: 32 2c 20 33 29 3b 0a 20 20 7d 0a 20 20 73 65 74  2, 3);.  }.  set
24a0: 20 3a 3a 54 52 49 47 47 45 52 0a 7d 20 7b 74 72   ::TRIGGER.} {tr
24b0: 69 67 33 20 31 20 32 20 33 7d 0a 64 6f 5f 74 65  ig3 1 2 3}.do_te
24c0: 73 74 20 61 6c 74 65 72 2d 33 2e 31 2e 38 20 7b  st alter-3.1.8 {
24d0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
24e0: 20 41 4c 54 45 52 20 54 41 42 4c 45 20 74 38 20   ALTER TABLE t8 
24f0: 52 45 4e 41 4d 45 20 54 4f 20 74 39 3b 0a 20 20  RENAME TO t9;.  
2500: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 39    INSERT INTO t9
2510: 20 56 41 4c 55 45 53 28 34 2c 20 35 2c 20 36 29   VALUES(4, 5, 6)
2520: 3b 0a 20 20 7d 0a 20 20 73 65 74 20 3a 3a 54 52  ;.  }.  set ::TR
2530: 49 47 47 45 52 0a 7d 20 7b 74 72 69 67 33 20 34  IGGER.} {trig3 4
2540: 20 35 20 36 7d 0a 0a 23 20 4d 61 6b 65 20 73 75   5 6}..# Make su
2550: 72 65 20 22 4f 4e 22 20 63 61 6e 6e 6f 74 20 62  re "ON" cannot b
2560: 65 20 75 73 65 64 20 61 73 20 61 20 64 61 74 61  e used as a data
2570: 62 61 73 65 2c 20 74 61 62 6c 65 20 6f 72 20 63  base, table or c
2580: 6f 6c 75 6d 6e 20 6e 61 6d 65 20 77 69 74 68 6f  olumn name witho
2590: 75 74 0a 23 20 71 75 6f 74 69 6e 67 2e 20 4f 74  ut.# quoting. Ot
25a0: 68 65 72 77 69 73 65 20 74 68 65 20 73 71 6c 69  herwise the sqli
25b0: 74 65 5f 61 6c 74 65 72 5f 74 72 69 67 67 65 72  te_alter_trigger
25c0: 28 29 20 66 75 6e 63 74 69 6f 6e 20 6d 69 67 68  () function migh
25d0: 74 20 6e 6f 74 20 77 6f 72 6b 2e 0a 66 69 6c 65  t not work..file
25e0: 20 64 65 6c 65 74 65 20 2d 66 6f 72 63 65 20 74   delete -force t
25f0: 65 73 74 33 2e 64 62 0a 66 69 6c 65 20 64 65 6c  est3.db.file del
2600: 65 74 65 20 2d 66 6f 72 63 65 20 74 65 73 74 33  ete -force test3
2610: 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 64 6f 5f 74  .db-journal.do_t
2620: 65 73 74 20 61 6c 74 65 72 2d 33 2e 32 2e 31 20  est alter-3.2.1 
2630: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  {.  catchsql {. 
2640: 20 20 20 41 54 54 41 43 48 20 27 74 65 73 74 33     ATTACH 'test3
2650: 2e 64 62 27 20 41 53 20 4f 4e 3b 0a 20 20 7d 0a  .db' AS ON;.  }.
2660: 7d 20 7b 31 20 7b 6e 65 61 72 20 22 4f 4e 22 3a  } {1 {near "ON":
2670: 20 73 79 6e 74 61 78 20 65 72 72 6f 72 7d 7d 0a   syntax error}}.
2680: 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 33 2e  do_test alter-3.
2690: 32 2e 32 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  2.2 {.  catchsql
26a0: 20 7b 0a 20 20 20 20 41 54 54 41 43 48 20 27 74   {.    ATTACH 't
26b0: 65 73 74 33 2e 64 62 27 20 41 53 20 27 4f 4e 27  est3.db' AS 'ON'
26c0: 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  ;.  }.} {0 {}}.d
26d0: 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 33 2e 32  o_test alter-3.2
26e0: 2e 33 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  .3 {.  catchsql 
26f0: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  {.    CREATE TAB
2700: 4c 45 20 4f 4e 2e 74 31 28 61 2c 20 62 2c 20 63  LE ON.t1(a, b, c
2710: 29 3b 20 0a 20 20 7d 0a 7d 20 7b 31 20 7b 6e 65  ); .  }.} {1 {ne
2720: 61 72 20 22 4f 4e 22 3a 20 73 79 6e 74 61 78 20  ar "ON": syntax 
2730: 65 72 72 6f 72 7d 7d 0a 64 6f 5f 74 65 73 74 20  error}}.do_test 
2740: 61 6c 74 65 72 2d 33 2e 32 2e 34 20 7b 0a 20 20  alter-3.2.4 {.  
2750: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 43  catchsql {.    C
2760: 52 45 41 54 45 20 54 41 42 4c 45 20 27 4f 4e 27  REATE TABLE 'ON'
2770: 2e 74 31 28 61 2c 20 62 2c 20 63 29 3b 20 0a 20  .t1(a, b, c); . 
2780: 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74   }.} {0 {}}.do_t
2790: 65 73 74 20 61 6c 74 65 72 2d 33 2e 32 2e 34 20  est alter-3.2.4 
27a0: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  {.  catchsql {. 
27b0: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
27c0: 27 4f 4e 27 2e 4f 4e 28 61 2c 20 62 2c 20 63 29  'ON'.ON(a, b, c)
27d0: 3b 20 0a 20 20 7d 0a 7d 20 7b 31 20 7b 6e 65 61  ; .  }.} {1 {nea
27e0: 72 20 22 4f 4e 22 3a 20 73 79 6e 74 61 78 20 65  r "ON": syntax e
27f0: 72 72 6f 72 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  rror}}.do_test a
2800: 6c 74 65 72 2d 33 2e 32 2e 35 20 7b 0a 20 20 63  lter-3.2.5 {.  c
2810: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 43 52  atchsql {.    CR
2820: 45 41 54 45 20 54 41 42 4c 45 20 27 4f 4e 27 2e  EATE TABLE 'ON'.
2830: 27 4f 4e 27 28 61 2c 20 62 2c 20 63 29 3b 20 0a  'ON'(a, b, c); .
2840: 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f    }.} {0 {}}.do_
2850: 74 65 73 74 20 61 6c 74 65 72 2d 33 2e 32 2e 36  test alter-3.2.6
2860: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a   {.  catchsql {.
2870: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
2880: 20 74 31 30 28 61 2c 20 4f 4e 2c 20 63 29 3b 0a   t10(a, ON, c);.
2890: 20 20 7d 0a 7d 20 7b 31 20 7b 6e 65 61 72 20 22    }.} {1 {near "
28a0: 4f 4e 22 3a 20 73 79 6e 74 61 78 20 65 72 72 6f  ON": syntax erro
28b0: 72 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65  r}}.do_test alte
28c0: 72 2d 33 2e 32 2e 37 20 7b 0a 20 20 63 61 74 63  r-3.2.7 {.  catc
28d0: 68 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  hsql {.    CREAT
28e0: 45 20 54 41 42 4c 45 20 74 31 30 28 61 2c 20 27  E TABLE t10(a, '
28f0: 4f 4e 27 2c 20 63 29 3b 0a 20 20 7d 0a 7d 20 7b  ON', c);.  }.} {
2900: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 6c  0 {}}.do_test al
2910: 74 65 72 2d 33 2e 32 2e 38 20 7b 0a 20 20 63 61  ter-3.2.8 {.  ca
2920: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 43 52 45  tchsql {.    CRE
2930: 41 54 45 20 54 52 49 47 47 45 52 20 74 72 69 67  ATE TRIGGER trig
2940: 34 20 41 46 54 45 52 20 49 4e 53 45 52 54 20 4f  4 AFTER INSERT O
2950: 4e 20 4f 4e 20 42 45 47 49 4e 20 53 45 4c 45 43  N ON BEGIN SELEC
2960: 54 20 31 3b 20 45 4e 44 3b 0a 20 20 7d 0a 7d 20  T 1; END;.  }.} 
2970: 7b 31 20 7b 6e 65 61 72 20 22 4f 4e 22 3a 20 73  {1 {near "ON": s
2980: 79 6e 74 61 78 20 65 72 72 6f 72 7d 7d 0a 64 6f  yntax error}}.do
2990: 5f 74 65 73 74 20 61 6c 74 65 72 2d 33 2e 32 2e  _test alter-3.2.
29a0: 39 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  9 {.  catchsql {
29b0: 0a 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47  .    CREATE TRIG
29c0: 47 45 52 20 27 6f 6e 27 2e 74 72 69 67 34 20 41  GER 'on'.trig4 A
29d0: 46 54 45 52 20 49 4e 53 45 52 54 20 4f 4e 20 27  FTER INSERT ON '
29e0: 4f 4e 27 20 42 45 47 49 4e 20 53 45 4c 45 43 54  ON' BEGIN SELECT
29f0: 20 31 3b 20 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b   1; END;.  }.} {
2a00: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 6c  0 {}}.do_test al
2a10: 74 65 72 2d 33 2e 32 2e 31 30 20 7b 0a 20 20 65  ter-3.2.10 {.  e
2a20: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f  xecsql {.    DRO
2a30: 50 20 54 41 42 4c 45 20 74 31 30 3b 0a 20 20 7d  P TABLE t10;.  }
2a40: 0a 7d 20 7b 7d 0a 0a 64 6f 5f 74 65 73 74 20 61  .} {}..do_test a
2a50: 6c 74 65 72 2d 33 2e 33 2e 31 20 7b 0a 20 20 65  lter-3.3.1 {.  e
2a60: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45  xecsql {.    CRE
2a70: 41 54 45 20 54 41 42 4c 45 20 74 62 6c 31 28 61  ATE TABLE tbl1(a
2a80: 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20 43 52 45  , b, c);.    CRE
2a90: 41 54 45 20 54 45 4d 50 20 54 52 49 47 47 45 52  ATE TEMP TRIGGER
2aa0: 20 74 72 69 67 31 20 41 46 54 45 52 20 49 4e 53   trig1 AFTER INS
2ab0: 45 52 54 20 4f 4e 20 74 62 6c 31 20 42 45 47 49  ERT ON tbl1 BEGI
2ac0: 4e 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 74  N.      SELECT t
2ad0: 72 69 67 66 75 6e 63 28 27 74 72 69 67 31 27 2c  rigfunc('trig1',
2ae0: 20 6e 65 77 2e 61 2c 20 6e 65 77 2e 62 2c 20 6e   new.a, new.b, n
2af0: 65 77 2e 63 29 3b 0a 20 20 20 20 45 4e 44 3b 0a  ew.c);.    END;.
2b00: 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74    }.} {}.do_test
2b10: 20 61 6c 74 65 72 2d 33 2e 33 2e 32 20 7b 0a 20   alter-3.3.2 {. 
2b20: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 49   execsql {.    I
2b30: 4e 53 45 52 54 20 49 4e 54 4f 20 74 62 6c 31 20  NSERT INTO tbl1 
2b40: 56 41 4c 55 45 53 28 27 61 27 2c 20 27 62 27 2c  VALUES('a', 'b',
2b50: 20 27 63 27 29 3b 0a 20 20 7d 0a 20 20 73 65 74   'c');.  }.  set
2b60: 20 3a 3a 54 52 49 47 47 45 52 0a 7d 20 7b 74 72   ::TRIGGER.} {tr
2b70: 69 67 31 20 61 20 62 20 63 7d 0a 64 6f 5f 74 65  ig1 a b c}.do_te
2b80: 73 74 20 61 6c 74 65 72 2d 33 2e 33 2e 33 20 7b  st alter-3.3.3 {
2b90: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
2ba0: 20 41 4c 54 45 52 20 54 41 42 4c 45 20 74 62 6c   ALTER TABLE tbl
2bb0: 31 20 52 45 4e 41 4d 45 20 54 4f 20 74 62 6c 32  1 RENAME TO tbl2
2bc0: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
2bd0: 4f 20 74 62 6c 32 20 56 41 4c 55 45 53 28 27 64  O tbl2 VALUES('d
2be0: 27 2c 20 27 65 27 2c 20 27 66 27 29 3b 0a 20 20  ', 'e', 'f');.  
2bf0: 7d 20 0a 20 20 73 65 74 20 3a 3a 54 52 49 47 47  } .  set ::TRIGG
2c00: 45 52 0a 7d 20 7b 74 72 69 67 31 20 64 20 65 20  ER.} {trig1 d e 
2c10: 66 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72  f}.do_test alter
2c20: 2d 33 2e 33 2e 34 20 7b 0a 20 20 65 78 65 63 73  -3.3.4 {.  execs
2c30: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
2c40: 54 45 4d 50 20 54 52 49 47 47 45 52 20 74 72 69  TEMP TRIGGER tri
2c50: 67 32 20 41 46 54 45 52 20 55 50 44 41 54 45 20  g2 AFTER UPDATE 
2c60: 4f 4e 20 74 62 6c 32 20 42 45 47 49 4e 0a 20 20  ON tbl2 BEGIN.  
2c70: 20 20 20 20 53 45 4c 45 43 54 20 74 72 69 67 66      SELECT trigf
2c80: 75 6e 63 28 27 74 72 69 67 32 27 2c 20 6e 65 77  unc('trig2', new
2c90: 2e 61 2c 20 6e 65 77 2e 62 2c 20 6e 65 77 2e 63  .a, new.b, new.c
2ca0: 29 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 7d 20  );.    END;.  } 
2cb0: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 61 6c  .} {}.do_test al
2cc0: 74 65 72 2d 33 2e 33 2e 35 20 7b 0a 20 20 65 78  ter-3.3.5 {.  ex
2cd0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 41 4c 54 45  ecsql {.    ALTE
2ce0: 52 20 54 41 42 4c 45 20 74 62 6c 32 20 52 45 4e  R TABLE tbl2 REN
2cf0: 41 4d 45 20 54 4f 20 74 62 6c 33 3b 0a 20 20 20  AME TO tbl3;.   
2d00: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 62 6c   INSERT INTO tbl
2d10: 33 20 56 41 4c 55 45 53 28 27 67 27 2c 20 27 68  3 VALUES('g', 'h
2d20: 27 2c 20 27 69 27 29 3b 0a 20 20 7d 20 0a 20 20  ', 'i');.  } .  
2d30: 73 65 74 20 3a 3a 54 52 49 47 47 45 52 0a 7d 20  set ::TRIGGER.} 
2d40: 7b 74 72 69 67 31 20 67 20 68 20 69 7d 0a 64 6f  {trig1 g h i}.do
2d50: 5f 74 65 73 74 20 61 6c 74 65 72 2d 33 2e 33 2e  _test alter-3.3.
2d60: 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  6 {.  execsql {.
2d70: 20 20 20 20 55 50 44 41 54 45 20 74 62 6c 33 20      UPDATE tbl3 
2d80: 53 45 54 20 61 20 3d 20 27 47 27 20 77 68 65 72  SET a = 'G' wher
2d90: 65 20 61 20 3d 20 27 67 27 3b 0a 20 20 7d 20 0a  e a = 'g';.  } .
2da0: 20 20 73 65 74 20 3a 3a 54 52 49 47 47 45 52 0a    set ::TRIGGER.
2db0: 7d 20 7b 74 72 69 67 32 20 47 20 68 20 69 7d 0a  } {trig2 G h i}.
2dc0: 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 33 2e  do_test alter-3.
2dd0: 33 2e 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  3.7 {.  execsql 
2de0: 7b 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45  {.    DROP TABLE
2df0: 20 74 62 6c 33 3b 0a 20 20 20 20 53 45 4c 45 43   tbl3;.    SELEC
2e00: 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  T * FROM sqlite_
2e10: 74 65 6d 70 5f 6d 61 73 74 65 72 20 57 48 45 52  temp_master WHER
2e20: 45 20 74 79 70 65 20 3d 20 27 74 72 69 67 67 65  E type = 'trigge
2e30: 72 27 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 7d 20  r';.  }.} {}..} 
2e40: 3b 23 20 69 66 63 61 70 61 62 6c 65 20 74 72 69  ;# ifcapable tri
2e50: 67 67 65 72 0a 0a 23 20 49 66 20 74 68 65 20 62  gger..# If the b
2e60: 75 69 6c 64 20 64 6f 65 73 20 6e 6f 74 20 69 6e  uild does not in
2e70: 63 6c 75 64 65 20 41 55 54 4f 49 4e 43 52 45 4d  clude AUTOINCREM
2e80: 45 4e 54 20 66 69 65 6c 64 73 2c 20 6f 6d 69 74  ENT fields, omit
2e90: 20 61 6c 74 65 72 2d 34 2e 2a 2e 0a 69 66 63 61   alter-4.*..ifca
2ea0: 70 61 62 6c 65 20 61 75 74 6f 69 6e 63 20 7b 0a  pable autoinc {.
2eb0: 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 34  .do_test alter-4
2ec0: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
2ed0: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
2ee0: 45 20 74 62 6c 31 28 61 20 49 4e 54 45 47 45 52  E tbl1(a INTEGER
2ef0: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 41 55 54   PRIMARY KEY AUT
2f00: 4f 49 4e 43 52 45 4d 45 4e 54 29 3b 0a 20 20 20  OINCREMENT);.   
2f10: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 62 6c   INSERT INTO tbl
2f20: 31 20 56 41 4c 55 45 53 28 31 30 29 3b 0a 20 20  1 VALUES(10);.  
2f30: 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 61  }.} {}.do_test a
2f40: 6c 74 65 72 2d 34 2e 32 20 7b 0a 20 20 65 78 65  lter-4.2 {.  exe
2f50: 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52  csql {.    INSER
2f60: 54 20 49 4e 54 4f 20 74 62 6c 31 20 56 41 4c 55  T INTO tbl1 VALU
2f70: 45 53 28 4e 55 4c 4c 29 3b 0a 20 20 20 20 53 45  ES(NULL);.    SE
2f80: 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 62 6c 31  LECT a FROM tbl1
2f90: 3b 0a 20 20 7d 0a 7d 20 7b 31 30 20 31 31 7d 0a  ;.  }.} {10 11}.
2fa0: 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 34 2e  do_test alter-4.
2fb0: 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  3 {.  execsql {.
2fc0: 20 20 20 20 41 4c 54 45 52 20 54 41 42 4c 45 20      ALTER TABLE 
2fd0: 74 62 6c 31 20 52 45 4e 41 4d 45 20 54 4f 20 74  tbl1 RENAME TO t
2fe0: 62 6c 32 3b 0a 20 20 20 20 44 45 4c 45 54 45 20  bl2;.    DELETE 
2ff0: 46 52 4f 4d 20 74 62 6c 32 3b 0a 20 20 20 20 49  FROM tbl2;.    I
3000: 4e 53 45 52 54 20 49 4e 54 4f 20 74 62 6c 32 20  NSERT INTO tbl2 
3010: 56 41 4c 55 45 53 28 4e 55 4c 4c 29 3b 0a 20 20  VALUES(NULL);.  
3020: 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20    SELECT a FROM 
3030: 74 62 6c 32 3b 0a 20 20 7d 0a 7d 20 7b 31 32 7d  tbl2;.  }.} {12}
3040: 0a 0a 7d 20 3b 23 20 69 66 63 61 70 61 62 6c 65  ..} ;# ifcapable
3050: 20 61 75 74 6f 69 6e 63 0a 0a 66 69 6e 69 73 68   autoinc..finish
3060: 5f 74 65 73 74 0a                                _test.