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

Artifact 627f1c24c80b842b02b94ce7416e9b2498a790eb:


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 34 20 32 30 30 34 2f 31 31 2f 31 39  v 1.4 2004/11/19
0210: 20 30 35 3a 31 34 3a 35 36 20 64 61 6e 69 65 6c   05:14:56 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 0a 0a 23 20 43 72 65 61 74 65 20 73 6f  ..#..# Create so
0590: 6d 65 20 74 61 62 6c 65 73 20 74 6f 20 72 65 6e  me tables to ren
05a0: 61 6d 65 2e 20 20 42 65 20 73 75 72 65 20 74 6f  ame.  Be sure to
05b0: 20 69 6e 63 6c 75 64 65 20 73 6f 6d 65 20 54 45   include some TE
05c0: 4d 50 20 74 61 62 6c 65 73 0a 23 20 61 6e 64 20  MP tables.# and 
05d0: 73 6f 6d 65 20 74 61 62 6c 65 73 20 77 69 74 68  some tables with
05e0: 20 6f 64 64 20 6e 61 6d 65 73 2e 0a 23 0a 64 6f   odd names..#.do
05f0: 5f 74 65 73 74 20 61 6c 74 65 72 2d 31 2e 31 20  _test alter-1.1 
0600: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
0610: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
0620: 31 28 61 2c 62 29 3b 0a 20 20 20 20 49 4e 53 45  1(a,b);.    INSE
0630: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
0640: 53 28 31 2c 32 29 3b 0a 20 20 20 20 43 52 45 41  S(1,2);.    CREA
0650: 54 45 20 54 41 42 4c 45 20 5b 74 31 27 78 31 5d  TE TABLE [t1'x1]
0660: 28 63 20 55 4e 49 51 55 45 2c 20 62 20 50 52 49  (c UNIQUE, b PRI
0670: 4d 41 52 59 20 4b 45 59 29 3b 0a 20 20 20 20 49  MARY KEY);.    I
0680: 4e 53 45 52 54 20 49 4e 54 4f 20 5b 74 31 27 78  NSERT INTO [t1'x
0690: 31 5d 20 56 41 4c 55 45 53 28 33 2c 34 29 3b 0a  1] VALUES(3,4);.
06a0: 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58      CREATE INDEX
06b0: 20 74 31 69 31 20 4f 4e 20 54 31 28 42 29 3b 0a   t1i1 ON T1(B);.
06c0: 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58      CREATE INDEX
06d0: 20 74 31 69 32 20 4f 4e 20 74 31 28 61 2c 62 29   t1i2 ON t1(a,b)
06e0: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e 44  ;.    CREATE IND
06f0: 45 58 20 69 33 20 4f 4e 20 5b 74 31 27 78 31 5d  EX i3 ON [t1'x1]
0700: 28 62 2c 63 29 3b 0a 20 20 20 20 43 52 45 41 54  (b,c);.    CREAT
0710: 45 20 54 45 4d 50 20 54 41 42 4c 45 20 22 74 65  E TEMP TABLE "te
0720: 6d 70 20 74 61 62 6c 65 22 28 65 2c 66 2c 67 20  mp table"(e,f,g 
0730: 55 4e 49 51 55 45 29 3b 0a 20 20 20 20 43 52 45  UNIQUE);.    CRE
0740: 41 54 45 20 49 4e 44 45 58 20 69 32 20 4f 4e 20  ATE INDEX i2 ON 
0750: 5b 74 65 6d 70 20 74 61 62 6c 65 5d 28 66 29 3b  [temp table](f);
0760: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
0770: 20 5b 74 65 6d 70 20 74 61 62 6c 65 5d 20 56 41   [temp table] VA
0780: 4c 55 45 53 28 35 2c 36 2c 37 29 3b 0a 20 20 7d  LUES(5,6,7);.  }
0790: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
07a0: 20 53 45 4c 45 43 54 20 27 74 31 27 2c 20 2a 20   SELECT 't1', * 
07b0: 46 52 4f 4d 20 74 31 0a 20 20 20 20 55 4e 49 4f  FROM t1.    UNIO
07c0: 4e 20 41 4c 4c 0a 20 20 20 20 53 45 4c 45 43 54  N ALL.    SELECT
07d0: 20 27 74 31 27 27 78 31 27 2c 20 2a 20 46 52 4f   't1''x1', * FRO
07e0: 4d 20 22 74 31 27 78 31 22 0a 20 20 20 20 55 4e  M "t1'x1".    UN
07f0: 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 53 45 4c 45  ION ALL.    SELE
0800: 43 54 20 2a 20 46 52 4f 4d 20 5b 74 65 6d 70 20  CT * FROM [temp 
0810: 74 61 62 6c 65 5d 0a 20 20 7d 0a 7d 20 7b 74 31  table].  }.} {t1
0820: 20 31 20 32 20 74 31 27 78 31 20 33 20 34 20 35   1 2 t1'x1 3 4 5
0830: 20 36 20 37 7d 0a 64 6f 5f 74 65 73 74 20 61 6c   6 7}.do_test al
0840: 74 65 72 2d 31 2e 32 20 7b 0a 20 20 65 78 65 63  ter-1.2 {.  exec
0850: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
0860: 20 74 79 70 65 2c 20 6e 61 6d 65 2c 20 74 62 6c   type, name, tbl
0870: 5f 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74  _name FROM sqlit
0880: 65 5f 6d 61 73 74 65 72 0a 20 20 20 20 55 4e 49  e_master.    UNI
0890: 4f 4e 20 41 4c 4c 0a 20 20 20 20 53 45 4c 45 43  ON ALL.    SELEC
08a0: 54 20 74 79 70 65 2c 20 6e 61 6d 65 2c 20 74 62  T type, name, tb
08b0: 6c 5f 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  l_name FROM sqli
08c0: 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 0a 20  te_temp_master. 
08d0: 20 20 20 4f 52 44 45 52 20 42 59 20 74 62 6c 5f     ORDER BY tbl_
08e0: 6e 61 6d 65 2c 20 74 79 70 65 20 64 65 73 63 2c  name, type desc,
08f0: 20 6e 61 6d 65 0a 20 20 7d 0a 7d 20 5b 6c 69 73   name.  }.} [lis
0900: 74 20 5c 0a 20 20 20 20 20 74 61 62 6c 65 20 74  t \.     table t
0910: 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  1               
0920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
0930: 31 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a  1             \.
0940: 20 20 20 20 20 69 6e 64 65 78 20 74 31 69 31 20       index t1i1 
0950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0960: 20 20 20 20 20 20 20 20 20 20 20 74 31 20 20 20             t1   
0970: 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20            \.    
0980: 20 69 6e 64 65 78 20 74 31 69 32 20 20 20 20 20   index t1i2     
0990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
09a0: 20 20 20 20 20 20 20 74 31 20 20 20 20 20 20 20         t1       
09b0: 20 20 20 20 20 20 5c 0a 20 20 20 20 20 74 61 62        \.     tab
09c0: 6c 65 20 74 31 27 78 31 20 20 20 20 20 20 20 20  le t1'x1        
09d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
09e0: 20 20 20 74 31 27 78 31 20 20 20 20 20 20 20 20     t1'x1        
09f0: 20 20 5c 0a 20 20 20 20 20 69 6e 64 65 78 20 69    \.     index i
0a00: 33 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  3               
0a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
0a20: 31 27 78 31 20 20 20 20 20 20 20 20 20 20 5c 0a  1'x1          \.
0a30: 20 20 20 20 20 69 6e 64 65 78 20 7b 73 71 6c 69       index {sqli
0a40: 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 74 31 27  te_autoindex_t1'
0a50: 78 31 5f 31 7d 20 20 20 20 20 20 74 31 27 78 31  x1_1}      t1'x1
0a60: 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20            \.    
0a70: 20 69 6e 64 65 78 20 7b 73 71 6c 69 74 65 5f 61   index {sqlite_a
0a80: 75 74 6f 69 6e 64 65 78 5f 74 31 27 78 31 5f 32  utoindex_t1'x1_2
0a90: 7d 20 20 20 20 20 20 74 31 27 78 31 20 20 20 20  }      t1'x1    
0aa0: 20 20 20 20 20 20 5c 0a 20 20 20 20 20 74 61 62        \.     tab
0ab0: 6c 65 20 7b 74 65 6d 70 20 74 61 62 6c 65 7d 20  le {temp table} 
0ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ad0: 20 20 20 7b 74 65 6d 70 20 74 61 62 6c 65 7d 20     {temp table} 
0ae0: 20 20 5c 0a 20 20 20 20 20 69 6e 64 65 78 20 69    \.     index i
0af0: 32 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  2               
0b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
0b10: 74 65 6d 70 20 74 61 62 6c 65 7d 20 20 20 5c 0a  temp table}   \.
0b20: 20 20 20 20 20 69 6e 64 65 78 20 7b 73 71 6c 69       index {sqli
0b30: 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 74 65 6d  te_autoindex_tem
0b40: 70 20 74 61 62 6c 65 5f 31 7d 20 7b 74 65 6d 70  p table_1} {temp
0b50: 20 74 61 62 6c 65 7d 20 20 20 5c 0a 20 20 5d 0a   table}   \.  ].
0b60: 0a 23 20 4d 61 6b 65 20 73 6f 6d 65 20 63 68 61  .# Make some cha
0b70: 6e 67 65 73 0a 23 0a 64 6f 5f 74 65 73 74 20 61  nges.#.do_test a
0b80: 6c 74 65 72 2d 31 2e 33 20 7b 0a 20 20 65 78 65  lter-1.3 {.  exe
0b90: 63 73 71 6c 20 7b 0a 20 20 20 20 41 4c 54 45 52  csql {.    ALTER
0ba0: 20 54 41 42 4c 45 20 5b 54 31 5d 20 52 45 4e 41   TABLE [T1] RENA
0bb0: 4d 45 20 74 6f 20 5b 2d 74 31 2d 5d 3b 0a 20 20  ME to [-t1-];.  
0bc0: 20 20 41 4c 54 45 52 20 54 41 42 4c 45 20 22 74    ALTER TABLE "t
0bd0: 31 27 78 31 22 20 52 45 4e 41 4d 45 20 54 4f 20  1'x1" RENAME TO 
0be0: 54 32 3b 0a 20 20 20 20 41 4c 54 45 52 20 54 41  T2;.    ALTER TA
0bf0: 42 4c 45 20 5b 74 65 6d 70 20 74 61 62 6c 65 5d  BLE [temp table]
0c00: 20 52 45 4e 41 4d 45 20 74 6f 20 54 65 6d 70 54   RENAME to TempT
0c10: 61 62 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 69 6e 74  ab;.  }.} {}.int
0c20: 65 67 72 69 74 79 5f 63 68 65 63 6b 20 61 6c 74  egrity_check alt
0c30: 65 72 2d 31 2e 33 2e 31 0a 64 6f 5f 74 65 73 74  er-1.3.1.do_test
0c40: 20 61 6c 74 65 72 2d 31 2e 34 20 7b 0a 20 20 65   alter-1.4 {.  e
0c50: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
0c60: 45 43 54 20 27 74 31 27 2c 20 2a 20 46 52 4f 4d  ECT 't1', * FROM
0c70: 20 5b 2d 74 31 2d 5d 0a 20 20 20 20 55 4e 49 4f   [-t1-].    UNIO
0c80: 4e 20 41 4c 4c 0a 20 20 20 20 53 45 4c 45 43 54  N ALL.    SELECT
0c90: 20 27 74 32 27 2c 20 2a 20 46 52 4f 4d 20 74 32   't2', * FROM t2
0ca0: 0a 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20  .    UNION ALL. 
0cb0: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
0cc0: 20 74 65 6d 70 74 61 62 0a 20 20 7d 0a 7d 20 7b   temptab.  }.} {
0cd0: 74 31 20 31 20 32 20 74 32 20 33 20 34 20 35 20  t1 1 2 t2 3 4 5 
0ce0: 36 20 37 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74  6 7}.do_test alt
0cf0: 65 72 2d 31 2e 35 20 7b 0a 20 20 65 78 65 63 73  er-1.5 {.  execs
0d00: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
0d10: 74 79 70 65 2c 20 6e 61 6d 65 2c 20 74 62 6c 5f  type, name, tbl_
0d20: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
0d30: 5f 6d 61 73 74 65 72 0a 20 20 20 20 55 4e 49 4f  _master.    UNIO
0d40: 4e 20 41 4c 4c 0a 20 20 20 20 53 45 4c 45 43 54  N ALL.    SELECT
0d50: 20 74 79 70 65 2c 20 6e 61 6d 65 2c 20 74 62 6c   type, name, tbl
0d60: 5f 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74  _name FROM sqlit
0d70: 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 0a 20 20  e_temp_master.  
0d80: 20 20 4f 52 44 45 52 20 42 59 20 74 62 6c 5f 6e    ORDER BY tbl_n
0d90: 61 6d 65 2c 20 74 79 70 65 20 64 65 73 63 2c 20  ame, type desc, 
0da0: 6e 61 6d 65 0a 20 20 7d 0a 7d 20 5b 6c 69 73 74  name.  }.} [list
0db0: 20 5c 0a 20 20 20 20 20 74 61 62 6c 65 20 2d 74   \.     table -t
0dc0: 31 2d 20 20 20 20 20 20 20 20 20 20 20 20 20 20  1-              
0dd0: 20 20 20 20 20 20 20 20 20 20 20 2d 74 31 2d 20             -t1- 
0de0: 20 20 20 20 20 20 20 5c 0a 20 20 20 20 20 69 6e         \.     in
0df0: 64 65 78 20 74 31 69 31 20 20 20 20 20 20 20 20  dex t1i1        
0e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0e10: 20 2d 74 31 2d 20 20 20 20 20 20 20 20 5c 0a 20   -t1-        \. 
0e20: 20 20 20 20 69 6e 64 65 78 20 74 31 69 32 20 20      index t1i2  
0e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0e40: 20 20 20 20 20 20 20 2d 74 31 2d 20 20 20 20 20         -t1-     
0e50: 20 20 20 5c 0a 20 20 20 20 20 74 61 62 6c 65 20     \.     table 
0e60: 54 32 20 20 20 20 20 20 20 20 20 20 20 20 20 20  T2              
0e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 32 20               T2 
0e80: 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20 20           \.     
0e90: 69 6e 64 65 78 20 69 33 20 20 20 20 20 20 20 20  index i3        
0ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0eb0: 20 20 20 54 32 20 20 20 20 20 20 20 20 20 20 5c     T2          \
0ec0: 0a 20 20 20 20 20 69 6e 64 65 78 20 7b 73 71 6c  .     index {sql
0ed0: 69 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 54 32  ite_autoindex_T2
0ee0: 5f 31 7d 20 20 20 20 20 20 54 32 20 20 20 20 20  _1}      T2     
0ef0: 20 20 20 20 20 5c 0a 20 20 20 20 20 69 6e 64 65       \.     inde
0f00: 78 20 7b 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e  x {sqlite_autoin
0f10: 64 65 78 5f 54 32 5f 32 7d 20 20 20 20 20 20 54  dex_T2_2}      T
0f20: 32 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20  2          \.   
0f30: 20 20 74 61 62 6c 65 20 7b 54 65 6d 70 54 61 62    table {TempTab
0f40: 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }               
0f50: 20 20 20 20 20 7b 54 65 6d 70 54 61 62 7d 20 20       {TempTab}  
0f60: 20 5c 0a 20 20 20 20 20 69 6e 64 65 78 20 69 32   \.     index i2
0f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0f80: 20 20 20 20 20 20 20 20 20 20 20 7b 54 65 6d 70             {Temp
0f90: 54 61 62 7d 20 20 20 5c 0a 20 20 20 20 20 69 6e  Tab}   \.     in
0fa0: 64 65 78 20 7b 73 71 6c 69 74 65 5f 61 75 74 6f  dex {sqlite_auto
0fb0: 69 6e 64 65 78 5f 54 65 6d 70 54 61 62 5f 31 7d  index_TempTab_1}
0fc0: 20 7b 54 65 6d 70 54 61 62 7d 20 20 20 5c 0a 20   {TempTab}   \. 
0fd0: 20 5d 0a 0a 23 20 4d 61 6b 65 20 73 75 72 65 20   ]..# Make sure 
0fe0: 74 68 65 20 63 68 61 6e 67 65 73 20 70 65 72 73  the changes pers
0ff0: 69 73 74 20 61 66 74 65 72 20 72 65 73 74 61 72  ist after restar
1000: 74 69 6e 67 20 74 68 65 20 64 61 74 61 62 61 73  ting the databas
1010: 65 2e 0a 23 20 28 54 68 65 20 54 45 4d 50 20 74  e..# (The TEMP t
1020: 61 62 6c 65 20 77 69 6c 6c 20 6e 6f 74 20 70 65  able will not pe
1030: 72 73 69 73 74 2c 20 6f 66 20 63 6f 75 72 73 65  rsist, of course
1040: 2e 29 0a 23 0a 64 6f 5f 74 65 73 74 20 61 6c 74  .).#.do_test alt
1050: 65 72 2d 31 2e 36 20 7b 0a 20 20 64 62 20 63 6c  er-1.6 {.  db cl
1060: 6f 73 65 0a 20 20 73 65 74 20 44 42 20 5b 73 71  ose.  set DB [sq
1070: 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62  lite3 db test.db
1080: 5d 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  ].  execsql {.  
1090: 20 20 53 45 4c 45 43 54 20 74 79 70 65 2c 20 6e    SELECT type, n
10a0: 61 6d 65 2c 20 74 62 6c 5f 6e 61 6d 65 20 46 52  ame, tbl_name FR
10b0: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
10c0: 0a 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20  .    UNION ALL. 
10d0: 20 20 20 53 45 4c 45 43 54 20 74 79 70 65 2c 20     SELECT type, 
10e0: 6e 61 6d 65 2c 20 74 62 6c 5f 6e 61 6d 65 20 46  name, tbl_name F
10f0: 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f  ROM sqlite_temp_
1100: 6d 61 73 74 65 72 0a 20 20 20 20 4f 52 44 45 52  master.    ORDER
1110: 20 42 59 20 74 62 6c 5f 6e 61 6d 65 2c 20 74 79   BY tbl_name, ty
1120: 70 65 20 64 65 73 63 2c 20 6e 61 6d 65 0a 20 20  pe desc, name.  
1130: 7d 0a 7d 20 5b 6c 69 73 74 20 5c 0a 20 20 20 20  }.} [list \.    
1140: 20 74 61 62 6c 65 20 2d 74 31 2d 20 20 20 20 20   table -t1-     
1150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1160: 20 20 20 20 2d 74 31 2d 20 20 20 20 20 20 20 20      -t1-        
1170: 20 20 20 5c 0a 20 20 20 20 20 69 6e 64 65 78 20     \.     index 
1180: 74 31 69 31 20 20 20 20 20 20 20 20 20 20 20 20  t1i1            
1190: 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 74 31               -t1
11a0: 2d 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20  -           \.  
11b0: 20 20 20 69 6e 64 65 78 20 74 31 69 32 20 20 20     index t1i2   
11c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d0: 20 20 20 20 20 20 2d 74 31 2d 20 20 20 20 20 20        -t1-      
11e0: 20 20 20 20 20 5c 0a 20 20 20 20 20 74 61 62 6c       \.     tabl
11f0: 65 20 54 32 20 20 20 20 20 20 20 20 20 20 20 20  e T2            
1200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
1210: 32 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20  2          \.   
1220: 20 20 69 6e 64 65 78 20 69 33 20 20 20 20 20 20    index i3      
1230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1240: 20 20 20 20 20 54 32 20 20 20 20 20 20 20 20 20       T2         
1250: 20 5c 0a 20 20 20 20 20 69 6e 64 65 78 20 7b 73   \.     index {s
1260: 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f  qlite_autoindex_
1270: 54 32 5f 31 7d 20 20 20 20 20 20 54 32 20 20 20  T2_1}      T2   
1280: 20 20 20 20 20 20 20 5c 0a 20 20 20 20 20 69 6e         \.     in
1290: 64 65 78 20 7b 73 71 6c 69 74 65 5f 61 75 74 6f  dex {sqlite_auto
12a0: 69 6e 64 65 78 5f 54 32 5f 32 7d 20 20 20 20 20  index_T2_2}     
12b0: 20 54 32 20 20 20 20 20 20 20 20 20 20 5c 0a 20   T2          \. 
12c0: 20 5d 0a 0a 23 20 4d 61 6b 65 20 73 75 72 65 20   ]..# Make sure 
12d0: 74 68 65 20 41 4c 54 45 52 20 54 41 42 4c 45 20  the ALTER TABLE 
12e0: 73 74 61 74 65 6d 65 6e 74 73 20 77 6f 72 6b 20  statements work 
12f0: 77 69 74 68 20 74 68 65 0a 23 20 6e 6f 6e 2d 63  with the.# non-c
1300: 61 6c 6c 62 61 63 6b 20 41 50 49 0a 23 0a 64 6f  allback API.#.do
1310: 5f 74 65 73 74 20 61 6c 74 65 72 2d 31 2e 37 20  _test alter-1.7 
1320: 7b 0a 20 20 73 74 65 70 73 71 6c 20 24 44 42 20  {.  stepsql $DB 
1330: 7b 0a 20 20 20 20 41 4c 54 45 52 20 54 41 42 4c  {.    ALTER TABL
1340: 45 20 5b 2d 74 31 2d 5d 20 52 45 4e 41 4d 45 20  E [-t1-] RENAME 
1350: 74 6f 20 5b 2a 74 31 2a 5d 3b 0a 20 20 20 20 41  to [*t1*];.    A
1360: 4c 54 45 52 20 54 41 42 4c 45 20 54 32 20 52 45  LTER TABLE T2 RE
1370: 4e 41 4d 45 20 54 4f 20 5b 3c 74 32 3e 5d 3b 0a  NAME TO [<t2>];.
1380: 20 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a    }.  execsql {.
1390: 20 20 20 20 53 45 4c 45 43 54 20 74 79 70 65 2c      SELECT type,
13a0: 20 6e 61 6d 65 2c 20 74 62 6c 5f 6e 61 6d 65 20   name, tbl_name 
13b0: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
13c0: 65 72 0a 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c  er.    UNION ALL
13d0: 0a 20 20 20 20 53 45 4c 45 43 54 20 74 79 70 65  .    SELECT type
13e0: 2c 20 6e 61 6d 65 2c 20 74 62 6c 5f 6e 61 6d 65  , name, tbl_name
13f0: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d   FROM sqlite_tem
1400: 70 5f 6d 61 73 74 65 72 0a 20 20 20 20 4f 52 44  p_master.    ORD
1410: 45 52 20 42 59 20 74 62 6c 5f 6e 61 6d 65 2c 20  ER BY tbl_name, 
1420: 74 79 70 65 20 64 65 73 63 2c 20 6e 61 6d 65 0a  type desc, name.
1430: 20 20 7d 0a 7d 20 5b 6c 69 73 74 20 5c 0a 20 20    }.} [list \.  
1440: 20 20 20 74 61 62 6c 65 20 2a 74 31 2a 20 20 20     table *t1*   
1450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1460: 20 20 20 20 20 20 2a 74 31 2a 20 20 20 20 20 20        *t1*      
1470: 20 20 20 20 20 5c 0a 20 20 20 20 20 69 6e 64 65       \.     inde
1480: 78 20 74 31 69 31 20 20 20 20 20 20 20 20 20 20  x t1i1          
1490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
14a0: 74 31 2a 20 20 20 20 20 20 20 20 20 20 20 5c 0a  t1*           \.
14b0: 20 20 20 20 20 69 6e 64 65 78 20 74 31 69 32 20       index t1i2 
14c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d0: 20 20 20 20 20 20 20 20 2a 74 31 2a 20 20 20 20          *t1*    
14e0: 20 20 20 20 20 20 20 5c 0a 20 20 20 20 20 74 61         \.     ta
14f0: 62 6c 65 20 3c 74 32 3e 20 20 20 20 20 20 20 20  ble <t2>        
1500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1510: 20 3c 74 32 3e 20 20 20 20 20 20 20 20 20 20 5c   <t2>          \
1520: 0a 20 20 20 20 20 69 6e 64 65 78 20 69 33 20 20  .     index i3  
1530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1540: 20 20 20 20 20 20 20 20 20 3c 74 32 3e 20 20 20           <t2>   
1550: 20 20 20 20 20 20 20 5c 0a 20 20 20 20 20 69 6e         \.     in
1560: 64 65 78 20 7b 73 71 6c 69 74 65 5f 61 75 74 6f  dex {sqlite_auto
1570: 69 6e 64 65 78 5f 3c 74 32 3e 5f 31 7d 20 20 20  index_<t2>_1}   
1580: 20 3c 74 32 3e 20 20 20 20 20 20 20 20 20 20 5c   <t2>          \
1590: 0a 20 20 20 20 20 69 6e 64 65 78 20 7b 73 71 6c  .     index {sql
15a0: 69 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 3c 74  ite_autoindex_<t
15b0: 32 3e 5f 32 7d 20 20 20 20 3c 74 32 3e 20 20 20  2>_2}    <t2>   
15c0: 20 20 20 20 20 20 20 5c 0a 20 20 5d 0a 0a 23 20         \.  ]..# 
15d0: 43 68 65 63 6b 20 74 68 61 74 20 41 4c 54 45 52  Check that ALTER
15e0: 20 54 41 42 4c 45 20 77 6f 72 6b 73 20 6f 6e 20   TABLE works on 
15f0: 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
1600: 65 73 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 61 6c  es..#.do_test al
1610: 74 65 72 2d 31 2e 38 2e 31 20 7b 0a 20 20 66 69  ter-1.8.1 {.  fi
1620: 6c 65 20 64 65 6c 65 74 65 20 2d 66 6f 72 63 65  le delete -force
1630: 20 74 65 73 74 32 2e 64 62 0a 20 20 66 69 6c 65   test2.db.  file
1640: 20 64 65 6c 65 74 65 20 2d 66 6f 72 63 65 20 74   delete -force t
1650: 65 73 74 32 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a  est2.db-journal.
1660: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1670: 41 54 54 41 43 48 20 27 74 65 73 74 32 2e 64 62  ATTACH 'test2.db
1680: 27 20 41 53 20 61 75 78 3b 0a 20 20 7d 0a 7d 20  ' AS aux;.  }.} 
1690: 7b 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72  {}.do_test alter
16a0: 2d 31 2e 38 2e 32 20 7b 0a 20 20 65 78 65 63 73  -1.8.2 {.  execs
16b0: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
16c0: 54 41 42 4c 45 20 74 34 28 61 20 50 52 49 4d 41  TABLE t4(a PRIMA
16d0: 52 59 20 4b 45 59 2c 20 62 2c 20 63 29 3b 0a 20  RY KEY, b, c);. 
16e0: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
16f0: 61 75 78 2e 74 34 28 61 20 50 52 49 4d 41 52 59  aux.t4(a PRIMARY
1700: 20 4b 45 59 2c 20 62 2c 20 63 29 3b 0a 20 20 20   KEY, b, c);.   
1710: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 34   CREATE INDEX i4
1720: 20 4f 4e 20 74 34 28 62 29 3b 0a 20 20 20 20 43   ON t4(b);.    C
1730: 52 45 41 54 45 20 49 4e 44 45 58 20 61 75 78 2e  REATE INDEX aux.
1740: 69 34 20 4f 4e 20 61 75 78 2e 74 34 28 62 29 3b  i4 ON aux.t4(b);
1750: 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  .  }.} {}.do_tes
1760: 74 20 61 6c 74 65 72 2d 31 2e 38 2e 33 20 7b 0a  t alter-1.8.3 {.
1770: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1780: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20 56  INSERT INTO t4 V
1790: 41 4c 55 45 53 28 27 6d 61 69 6e 27 2c 20 27 6d  ALUES('main', 'm
17a0: 61 69 6e 27 2c 20 27 6d 61 69 6e 27 29 3b 0a 20  ain', 'main');. 
17b0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 61     INSERT INTO a
17c0: 75 78 2e 74 34 20 56 41 4c 55 45 53 28 27 61 75  ux.t4 VALUES('au
17d0: 78 27 2c 20 27 61 75 78 27 2c 20 27 61 75 78 27  x', 'aux', 'aux'
17e0: 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20  );.    SELECT * 
17f0: 46 52 4f 4d 20 74 34 20 57 48 45 52 45 20 61 20  FROM t4 WHERE a 
1800: 3d 20 27 6d 61 69 6e 27 3b 0a 20 20 7d 0a 7d 20  = 'main';.  }.} 
1810: 7b 6d 61 69 6e 20 6d 61 69 6e 20 6d 61 69 6e 7d  {main main main}
1820: 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 31  .do_test alter-1
1830: 2e 38 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c  .8.4 {.  execsql
1840: 20 7b 0a 20 20 20 20 41 4c 54 45 52 20 54 41 42   {.    ALTER TAB
1850: 4c 45 20 74 34 20 52 45 4e 41 4d 45 20 54 4f 20  LE t4 RENAME TO 
1860: 74 35 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  t5;.    SELECT *
1870: 20 46 52 4f 4d 20 74 34 20 57 48 45 52 45 20 61   FROM t4 WHERE a
1880: 20 3d 20 27 61 75 78 27 3b 0a 20 20 7d 0a 7d 20   = 'aux';.  }.} 
1890: 7b 61 75 78 20 61 75 78 20 61 75 78 7d 0a 64 6f  {aux aux aux}.do
18a0: 5f 74 65 73 74 20 61 6c 74 65 72 2d 31 2e 38 2e  _test alter-1.8.
18b0: 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  5 {.  execsql {.
18c0: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
18d0: 4d 20 74 35 3b 0a 20 20 7d 0a 7d 20 7b 6d 61 69  M t5;.  }.} {mai
18e0: 6e 20 6d 61 69 6e 20 6d 61 69 6e 7d 0a 64 6f 5f  n main main}.do_
18f0: 74 65 73 74 20 61 6c 74 65 72 2d 31 2e 38 2e 36  test alter-1.8.6
1900: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
1910: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
1920: 20 74 35 20 57 48 45 52 45 20 62 20 3d 20 27 6d   t5 WHERE b = 'm
1930: 61 69 6e 27 3b 0a 20 20 7d 0a 7d 20 7b 6d 61 69  ain';.  }.} {mai
1940: 6e 20 6d 61 69 6e 20 6d 61 69 6e 7d 0a 64 6f 5f  n main main}.do_
1950: 74 65 73 74 20 61 6c 74 65 72 2d 31 2e 38 2e 37  test alter-1.8.7
1960: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
1970: 20 20 20 41 4c 54 45 52 20 54 41 42 4c 45 20 61     ALTER TABLE a
1980: 75 78 2e 74 34 20 52 45 4e 41 4d 45 20 54 4f 20  ux.t4 RENAME TO 
1990: 74 35 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  t5;.    SELECT *
19a0: 20 46 52 4f 4d 20 61 75 78 2e 74 35 20 57 48 45   FROM aux.t5 WHE
19b0: 52 45 20 62 20 3d 20 27 61 75 78 27 3b 0a 20 20  RE b = 'aux';.  
19c0: 7d 0a 7d 20 7b 61 75 78 20 61 75 78 20 61 75 78  }.} {aux aux aux
19d0: 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72  }..do_test alter
19e0: 2d 31 2e 39 2e 31 20 7b 0a 20 20 65 78 65 63 73  -1.9.1 {.  execs
19f0: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
1a00: 54 41 42 4c 45 20 74 62 6c 31 20 20 20 28 61 2c  TABLE tbl1   (a,
1a10: 20 62 2c 20 63 29 3b 0a 20 20 20 20 49 4e 53 45   b, c);.    INSE
1a20: 52 54 20 49 4e 54 4f 20 74 62 6c 31 20 56 41 4c  RT INTO tbl1 VAL
1a30: 55 45 53 28 31 2c 20 32 2c 20 33 29 3b 0a 20 20  UES(1, 2, 3);.  
1a40: 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 61  }.} {}.do_test a
1a50: 6c 74 65 72 2d 31 2e 39 2e 32 20 7b 0a 20 20 65  lter-1.9.2 {.  e
1a60: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
1a70: 45 43 54 20 2a 20 46 52 4f 4d 20 74 62 6c 31 3b  ECT * FROM tbl1;
1a80: 0a 20 20 7d 0a 7d 20 7b 31 20 32 20 33 7d 0a 64  .  }.} {1 2 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 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .3 {.  execsql {
1ab0: 0a 20 20 20 20 41 4c 54 45 52 20 54 41 42 4c 45  .    ALTER TABLE
1ac0: 20 74 62 6c 31 20 52 45 4e 41 4d 45 20 54 4f 20   tbl1 RENAME TO 
1ad0: 74 62 6c 32 3b 0a 20 20 20 20 53 45 4c 45 43 54  tbl2;.    SELECT
1ae0: 20 2a 20 46 52 4f 4d 20 74 62 6c 32 3b 0a 20 20   * FROM tbl2;.  
1af0: 7d 0a 7d 20 7b 31 20 32 20 33 7d 0a 64 6f 5f 74  }.} {1 2 3}.do_t
1b00: 65 73 74 20 61 6c 74 65 72 2d 31 2e 39 2e 34 20  est alter-1.9.4 
1b10: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
1b20: 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74 62 6c    DROP TABLE tbl
1b30: 32 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 23 20 54  2;.  }.} {}..# T
1b40: 65 73 74 20 65 72 72 6f 72 20 6d 65 73 73 61 67  est error messag
1b50: 65 73 0a 23 0a 64 6f 5f 74 65 73 74 20 61 6c 74  es.#.do_test alt
1b60: 65 72 2d 32 2e 31 20 7b 0a 20 20 63 61 74 63 68  er-2.1 {.  catch
1b70: 73 71 6c 20 7b 0a 20 20 20 20 41 4c 54 45 52 20  sql {.    ALTER 
1b80: 54 41 42 4c 45 20 6e 6f 6e 65 20 52 45 4e 41 4d  TABLE none RENAM
1b90: 45 20 54 4f 20 68 69 3b 0a 20 20 7d 0a 7d 20 7b  E TO hi;.  }.} {
1ba0: 31 20 7b 6e 6f 20 73 75 63 68 20 74 61 62 6c 65  1 {no such table
1bb0: 3a 20 6e 6f 6e 65 7d 7d 0a 64 6f 5f 74 65 73 74  : none}}.do_test
1bc0: 20 61 6c 74 65 72 2d 32 2e 32 20 7b 0a 20 20 65   alter-2.2 {.  e
1bd0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45  xecsql {.    CRE
1be0: 41 54 45 20 54 41 42 4c 45 20 74 33 28 70 2c 71  ATE TABLE t3(p,q
1bf0: 2c 72 29 3b 0a 20 20 7d 0a 20 20 63 61 74 63 68  ,r);.  }.  catch
1c00: 73 71 6c 20 7b 0a 20 20 20 20 41 4c 54 45 52 20  sql {.    ALTER 
1c10: 54 41 42 4c 45 20 5b 3c 74 32 3e 5d 20 52 45 4e  TABLE [<t2>] REN
1c20: 41 4d 45 20 54 4f 20 74 33 3b 0a 20 20 7d 0a 7d  AME TO t3;.  }.}
1c30: 20 7b 31 20 7b 74 68 65 72 65 20 69 73 20 61 6c   {1 {there is al
1c40: 72 65 61 64 79 20 61 6e 6f 74 68 65 72 20 74 61  ready another ta
1c50: 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 69 74  ble or index wit
1c60: 68 20 74 68 69 73 20 6e 61 6d 65 3a 20 74 33 7d  h this name: t3}
1c70: 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d  }.do_test alter-
1c80: 32 2e 33 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  2.3 {.  catchsql
1c90: 20 7b 0a 20 20 20 20 41 4c 54 45 52 20 54 41 42   {.    ALTER TAB
1ca0: 4c 45 20 5b 3c 74 32 3e 5d 20 52 45 4e 41 4d 45  LE [<t2>] RENAME
1cb0: 20 54 4f 20 69 33 3b 0a 20 20 7d 0a 7d 20 7b 31   TO i3;.  }.} {1
1cc0: 20 7b 74 68 65 72 65 20 69 73 20 61 6c 72 65 61   {there is alrea
1cd0: 64 79 20 61 6e 6f 74 68 65 72 20 74 61 62 6c 65  dy another table
1ce0: 20 6f 72 20 69 6e 64 65 78 20 77 69 74 68 20 74   or index with t
1cf0: 68 69 73 20 6e 61 6d 65 3a 20 69 33 7d 7d 0a 0a  his name: i3}}..
1d00: 23 20 49 66 20 74 68 69 73 20 63 6f 6d 70 69 6c  # If this compil
1d10: 61 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 20 69  ation does not i
1d20: 6e 63 6c 75 64 65 20 74 72 69 67 67 65 72 73 2c  nclude triggers,
1d30: 20 6f 6d 69 74 20 74 68 65 20 72 65 6d 61 69 6e   omit the remain
1d40: 64 65 72 0a 23 20 6f 66 20 74 68 69 73 20 66 69  der.# of this fi
1d50: 6c 65 2e 0a 69 66 63 61 70 61 62 6c 65 20 21 74  le..ifcapable !t
1d60: 72 69 67 67 65 72 20 7b 0a 20 20 66 69 6e 69 73  rigger {.  finis
1d70: 68 5f 74 65 73 74 0a 20 20 72 65 74 75 72 6e 0a  h_test.  return.
1d80: 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  }..#------------
1d90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1da0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
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 0a 23 20 54 65  -----------.# Te
1dd0: 73 74 73 20 61 6c 74 65 72 2d 33 2e 2a 20 74 65  sts alter-3.* te
1de0: 73 74 20 41 4c 54 45 52 20 54 41 42 4c 45 20 6f  st ALTER TABLE o
1df0: 6e 20 74 61 62 6c 65 73 20 74 68 61 74 20 68 61  n tables that ha
1e00: 76 65 20 74 72 69 67 67 65 72 73 2e 0a 23 0a 23  ve triggers..#.#
1e10: 20 61 6c 74 65 72 2d 33 2e 31 2e 2a 3a 20 41 4c   alter-3.1.*: AL
1e20: 54 45 52 20 54 41 42 4c 45 20 77 69 74 68 20 74  TER TABLE with t
1e30: 72 69 67 67 65 72 73 2e 0a 23 20 61 6c 74 65 72  riggers..# alter
1e40: 2d 33 2e 32 2e 2a 3a 20 54 65 73 74 20 74 68 61  -3.2.*: Test tha
1e50: 74 20 74 68 65 20 4f 4e 20 6b 65 79 77 6f 72 64  t the ON keyword
1e60: 20 63 61 6e 6e 6f 74 20 62 65 20 75 73 65 64 20   cannot be used 
1e70: 61 73 20 61 20 64 61 74 61 62 61 73 65 2c 0a 23  as a database,.#
1e80: 20 20 20 20 20 74 61 62 6c 65 20 6f 72 20 63 6f       table or co
1e90: 6c 75 6d 6e 20 6e 61 6d 65 20 75 6e 71 75 6f 74  lumn name unquot
1ea0: 65 64 2e 20 54 68 69 73 20 69 73 20 64 6f 6e 65  ed. This is done
1eb0: 20 62 65 63 61 75 73 65 20 70 61 72 74 20 6f 66   because part of
1ec0: 20 74 68 65 0a 23 20 20 20 20 20 41 4c 54 45 52   the.#     ALTER
1ed0: 20 54 41 42 4c 45 20 63 6f 64 65 20 28 73 70 65   TABLE code (spe
1ee0: 63 69 66 69 63 61 6c 6c 79 20 74 68 65 20 69 6d  cifically the im
1ef0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  plementation of 
1f00: 53 51 4c 20 66 75 6e 63 74 69 6f 6e 0a 23 20 20  SQL function.#  
1f10: 20 20 20 22 73 71 6c 69 74 65 5f 61 6c 74 65 72     "sqlite_alter
1f20: 5f 74 72 69 67 67 65 72 22 29 20 77 69 6c 6c 20  _trigger") will 
1f30: 62 72 65 61 6b 20 69 6e 20 74 68 69 73 20 63 61  break in this ca
1f40: 73 65 2e 0a 23 20 61 6c 74 65 72 2d 33 2e 33 2e  se..# alter-3.3.
1f50: 2a 3a 20 41 4c 54 45 52 20 54 41 42 4c 45 20 77  *: ALTER TABLE w
1f60: 69 74 68 20 54 45 4d 50 20 74 72 69 67 67 65 72  ith TEMP trigger
1f70: 73 20 28 74 6f 64 6f 29 2e 0a 23 0a 0a 23 20 41  s (todo)..#..# A
1f80: 6e 20 53 51 4c 20 75 73 65 72 2d 66 75 6e 63 74  n SQL user-funct
1f90: 69 6f 6e 20 66 6f 72 20 74 72 69 67 67 65 72 73  ion for triggers
1fa0: 20 74 6f 20 66 69 72 65 2c 20 73 6f 20 74 68 61   to fire, so tha
1fb0: 74 20 77 65 20 6b 6e 6f 77 20 74 68 65 79 0a 23  t we know they.#
1fc0: 20 61 72 65 20 77 6f 72 6b 69 6e 67 2e 0a 70 72   are working..pr
1fd0: 6f 63 20 74 72 69 67 66 75 6e 63 20 7b 61 72 67  oc trigfunc {arg
1fe0: 73 7d 20 7b 0a 20 20 73 65 74 20 3a 3a 54 52 49  s} {.  set ::TRI
1ff0: 47 47 45 52 20 24 61 72 67 73 0a 7d 0a 64 62 20  GGER $args.}.db 
2000: 66 75 6e 63 20 74 72 69 67 66 75 6e 63 20 74 72  func trigfunc tr
2010: 69 67 66 75 6e 63 0a 0a 64 6f 5f 74 65 73 74 20  igfunc..do_test 
2020: 61 6c 74 65 72 2d 33 2e 31 2e 30 20 7b 0a 20 20  alter-3.1.0 {.  
2030: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52  execsql {.    CR
2040: 45 41 54 45 20 54 41 42 4c 45 20 74 36 28 61 2c  EATE TABLE t6(a,
2050: 20 62 2c 20 63 29 3b 0a 20 20 20 20 43 52 45 41   b, c);.    CREA
2060: 54 45 20 54 52 49 47 47 45 52 20 74 72 69 67 31  TE TRIGGER trig1
2070: 20 41 46 54 45 52 20 49 4e 53 45 52 54 20 4f 4e   AFTER INSERT ON
2080: 20 74 36 20 42 45 47 49 4e 0a 20 20 20 20 20 20   t6 BEGIN.      
2090: 53 45 4c 45 43 54 20 74 72 69 67 66 75 6e 63 28  SELECT trigfunc(
20a0: 27 74 72 69 67 31 27 2c 20 6e 65 77 2e 61 2c 20  'trig1', new.a, 
20b0: 6e 65 77 2e 62 2c 20 6e 65 77 2e 63 29 3b 0a 20  new.b, new.c);. 
20c0: 20 20 20 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 7d     END;.  }.} {}
20d0: 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 33  .do_test alter-3
20e0: 2e 31 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  .1.1 {.  execsql
20f0: 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e   {.    INSERT IN
2100: 54 4f 20 74 36 20 56 41 4c 55 45 53 28 31 2c 20  TO t6 VALUES(1, 
2110: 32 2c 20 33 29 3b 0a 20 20 7d 0a 20 20 73 65 74  2, 3);.  }.  set
2120: 20 3a 3a 54 52 49 47 47 45 52 0a 7d 20 7b 74 72   ::TRIGGER.} {tr
2130: 69 67 31 20 31 20 32 20 33 7d 0a 64 6f 5f 74 65  ig1 1 2 3}.do_te
2140: 73 74 20 61 6c 74 65 72 2d 33 2e 31 2e 32 20 7b  st alter-3.1.2 {
2150: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
2160: 20 41 4c 54 45 52 20 54 41 42 4c 45 20 74 36 20   ALTER TABLE t6 
2170: 52 45 4e 41 4d 45 20 54 4f 20 74 37 3b 0a 20 20  RENAME TO t7;.  
2180: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 37    INSERT INTO t7
2190: 20 56 41 4c 55 45 53 28 34 2c 20 35 2c 20 36 29   VALUES(4, 5, 6)
21a0: 3b 0a 20 20 7d 0a 20 20 73 65 74 20 3a 3a 54 52  ;.  }.  set ::TR
21b0: 49 47 47 45 52 0a 7d 20 7b 74 72 69 67 31 20 34  IGGER.} {trig1 4
21c0: 20 35 20 36 7d 0a 64 6f 5f 74 65 73 74 20 61 6c   5 6}.do_test al
21d0: 74 65 72 2d 33 2e 31 2e 33 20 7b 0a 20 20 65 78  ter-3.1.3 {.  ex
21e0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50  ecsql {.    DROP
21f0: 20 54 52 49 47 47 45 52 20 74 72 69 67 31 3b 0a   TRIGGER trig1;.
2200: 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74    }.} {}.do_test
2210: 20 61 6c 74 65 72 2d 33 2e 31 2e 34 20 7b 0a 20   alter-3.1.4 {. 
2220: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43   execsql {.    C
2230: 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74 72  REATE TRIGGER tr
2240: 69 67 32 20 41 46 54 45 52 20 49 4e 53 45 52 54  ig2 AFTER INSERT
2250: 20 4f 4e 20 6d 61 69 6e 2e 74 37 20 42 45 47 49   ON main.t7 BEGI
2260: 4e 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 74  N.      SELECT t
2270: 72 69 67 66 75 6e 63 28 27 74 72 69 67 32 27 2c  rigfunc('trig2',
2280: 20 6e 65 77 2e 61 2c 20 6e 65 77 2e 62 2c 20 6e   new.a, new.b, n
2290: 65 77 2e 63 29 3b 0a 20 20 20 20 45 4e 44 3b 0a  ew.c);.    END;.
22a0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
22b0: 74 37 20 56 41 4c 55 45 53 28 31 2c 20 32 2c 20  t7 VALUES(1, 2, 
22c0: 33 29 3b 0a 20 20 7d 0a 20 20 73 65 74 20 3a 3a  3);.  }.  set ::
22d0: 54 52 49 47 47 45 52 0a 7d 20 7b 74 72 69 67 32  TRIGGER.} {trig2
22e0: 20 31 20 32 20 33 7d 0a 64 6f 5f 74 65 73 74 20   1 2 3}.do_test 
22f0: 61 6c 74 65 72 2d 33 2e 31 2e 35 20 7b 0a 20 20  alter-3.1.5 {.  
2300: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 41 4c  execsql {.    AL
2310: 54 45 52 20 54 41 42 4c 45 20 74 37 20 52 45 4e  TER TABLE t7 REN
2320: 41 4d 45 20 54 4f 20 74 38 3b 0a 20 20 20 20 49  AME TO t8;.    I
2330: 4e 53 45 52 54 20 49 4e 54 4f 20 74 38 20 56 41  NSERT INTO t8 VA
2340: 4c 55 45 53 28 34 2c 20 35 2c 20 36 29 3b 0a 20  LUES(4, 5, 6);. 
2350: 20 7d 0a 20 20 73 65 74 20 3a 3a 54 52 49 47 47   }.  set ::TRIGG
2360: 45 52 0a 7d 20 7b 74 72 69 67 32 20 34 20 35 20  ER.} {trig2 4 5 
2370: 36 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72  6}.do_test alter
2380: 2d 33 2e 31 2e 36 20 7b 0a 20 20 65 78 65 63 73  -3.1.6 {.  execs
2390: 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20 54 52  ql {.    DROP TR
23a0: 49 47 47 45 52 20 74 72 69 67 32 3b 0a 20 20 7d  IGGER trig2;.  }
23b0: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 61 6c  .} {}.do_test al
23c0: 74 65 72 2d 33 2e 31 2e 37 20 7b 0a 20 20 65 78  ter-3.1.7 {.  ex
23d0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41  ecsql {.    CREA
23e0: 54 45 20 54 52 49 47 47 45 52 20 74 72 69 67 33  TE TRIGGER trig3
23f0: 20 41 46 54 45 52 20 49 4e 53 45 52 54 20 4f 4e   AFTER INSERT ON
2400: 20 6d 61 69 6e 2e 27 74 38 27 42 45 47 49 4e 0a   main.'t8'BEGIN.
2410: 20 20 20 20 20 20 53 45 4c 45 43 54 20 74 72 69        SELECT tri
2420: 67 66 75 6e 63 28 27 74 72 69 67 33 27 2c 20 6e  gfunc('trig3', n
2430: 65 77 2e 61 2c 20 6e 65 77 2e 62 2c 20 6e 65 77  ew.a, new.b, new
2440: 2e 63 29 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20  .c);.    END;.  
2450: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 38    INSERT INTO t8
2460: 20 56 41 4c 55 45 53 28 31 2c 20 32 2c 20 33 29   VALUES(1, 2, 3)
2470: 3b 0a 20 20 7d 0a 20 20 73 65 74 20 3a 3a 54 52  ;.  }.  set ::TR
2480: 49 47 47 45 52 0a 7d 20 7b 74 72 69 67 33 20 31  IGGER.} {trig3 1
2490: 20 32 20 33 7d 0a 64 6f 5f 74 65 73 74 20 61 6c   2 3}.do_test al
24a0: 74 65 72 2d 33 2e 31 2e 38 20 7b 0a 20 20 65 78  ter-3.1.8 {.  ex
24b0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 41 4c 54 45  ecsql {.    ALTE
24c0: 52 20 54 41 42 4c 45 20 74 38 20 52 45 4e 41 4d  R TABLE t8 RENAM
24d0: 45 20 54 4f 20 74 39 3b 0a 20 20 20 20 49 4e 53  E TO t9;.    INS
24e0: 45 52 54 20 49 4e 54 4f 20 74 39 20 56 41 4c 55  ERT INTO t9 VALU
24f0: 45 53 28 34 2c 20 35 2c 20 36 29 3b 0a 20 20 7d  ES(4, 5, 6);.  }
2500: 0a 20 20 73 65 74 20 3a 3a 54 52 49 47 47 45 52  .  set ::TRIGGER
2510: 0a 7d 20 7b 74 72 69 67 33 20 34 20 35 20 36 7d  .} {trig3 4 5 6}
2520: 0a 0a 23 20 4d 61 6b 65 20 73 75 72 65 20 22 4f  ..# Make sure "O
2530: 4e 22 20 63 61 6e 6e 6f 74 20 62 65 20 75 73 65  N" cannot be use
2540: 64 20 61 73 20 61 20 64 61 74 61 62 61 73 65 2c  d as a database,
2550: 20 74 61 62 6c 65 20 6f 72 20 63 6f 6c 75 6d 6e   table or column
2560: 20 6e 61 6d 65 20 77 69 74 68 6f 75 74 0a 23 20   name without.# 
2570: 71 75 6f 74 69 6e 67 2e 20 4f 74 68 65 72 77 69  quoting. Otherwi
2580: 73 65 20 74 68 65 20 73 71 6c 69 74 65 5f 61 6c  se the sqlite_al
2590: 74 65 72 5f 74 72 69 67 67 65 72 28 29 20 66 75  ter_trigger() fu
25a0: 6e 63 74 69 6f 6e 20 6d 69 67 68 74 20 6e 6f 74  nction might not
25b0: 20 77 6f 72 6b 2e 0a 66 69 6c 65 20 64 65 6c 65   work..file dele
25c0: 74 65 20 2d 66 6f 72 63 65 20 74 65 73 74 33 2e  te -force test3.
25d0: 64 62 0a 66 69 6c 65 20 64 65 6c 65 74 65 20 2d  db.file delete -
25e0: 66 6f 72 63 65 20 74 65 73 74 33 2e 64 62 2d 6a  force test3.db-j
25f0: 6f 75 72 6e 61 6c 0a 64 6f 5f 74 65 73 74 20 61  ournal.do_test a
2600: 6c 74 65 72 2d 33 2e 32 2e 31 20 7b 0a 20 20 63  lter-3.2.1 {.  c
2610: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 41 54  atchsql {.    AT
2620: 54 41 43 48 20 27 74 65 73 74 33 2e 64 62 27 20  TACH 'test3.db' 
2630: 41 53 20 4f 4e 3b 0a 20 20 7d 0a 7d 20 7b 31 20  AS ON;.  }.} {1 
2640: 7b 6e 65 61 72 20 22 4f 4e 22 3a 20 73 79 6e 74  {near "ON": synt
2650: 61 78 20 65 72 72 6f 72 7d 7d 0a 64 6f 5f 74 65  ax error}}.do_te
2660: 73 74 20 61 6c 74 65 72 2d 33 2e 32 2e 32 20 7b  st alter-3.2.2 {
2670: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
2680: 20 20 41 54 54 41 43 48 20 27 74 65 73 74 33 2e    ATTACH 'test3.
2690: 64 62 27 20 41 53 20 27 4f 4e 27 3b 0a 20 20 7d  db' AS 'ON';.  }
26a0: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
26b0: 74 20 61 6c 74 65 72 2d 33 2e 32 2e 33 20 7b 0a  t alter-3.2.3 {.
26c0: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
26d0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 4f 4e   CREATE TABLE ON
26e0: 2e 74 31 28 61 2c 20 62 2c 20 63 29 3b 20 0a 20  .t1(a, b, c); . 
26f0: 20 7d 0a 7d 20 7b 31 20 7b 6e 65 61 72 20 22 4f   }.} {1 {near "O
2700: 4e 22 3a 20 73 79 6e 74 61 78 20 65 72 72 6f 72  N": syntax error
2710: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72  }}.do_test alter
2720: 2d 33 2e 32 2e 34 20 7b 0a 20 20 63 61 74 63 68  -3.2.4 {.  catch
2730: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
2740: 20 54 41 42 4c 45 20 27 4f 4e 27 2e 74 31 28 61   TABLE 'ON'.t1(a
2750: 2c 20 62 2c 20 63 29 3b 20 0a 20 20 7d 0a 7d 20  , b, c); .  }.} 
2760: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  {0 {}}.do_test a
2770: 6c 74 65 72 2d 33 2e 32 2e 34 20 7b 0a 20 20 63  lter-3.2.4 {.  c
2780: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 43 52  atchsql {.    CR
2790: 45 41 54 45 20 54 41 42 4c 45 20 27 4f 4e 27 2e  EATE TABLE 'ON'.
27a0: 4f 4e 28 61 2c 20 62 2c 20 63 29 3b 20 0a 20 20  ON(a, b, c); .  
27b0: 7d 0a 7d 20 7b 31 20 7b 6e 65 61 72 20 22 4f 4e  }.} {1 {near "ON
27c0: 22 3a 20 73 79 6e 74 61 78 20 65 72 72 6f 72 7d  ": syntax error}
27d0: 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d  }.do_test alter-
27e0: 33 2e 32 2e 35 20 7b 0a 20 20 63 61 74 63 68 73  3.2.5 {.  catchs
27f0: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
2800: 54 41 42 4c 45 20 27 4f 4e 27 2e 27 4f 4e 27 28  TABLE 'ON'.'ON'(
2810: 61 2c 20 62 2c 20 63 29 3b 20 0a 20 20 7d 0a 7d  a, b, c); .  }.}
2820: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
2830: 61 6c 74 65 72 2d 33 2e 32 2e 36 20 7b 0a 20 20  alter-3.2.6 {.  
2840: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 43  catchsql {.    C
2850: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 30 28  REATE TABLE t10(
2860: 61 2c 20 4f 4e 2c 20 63 29 3b 0a 20 20 7d 0a 7d  a, ON, c);.  }.}
2870: 20 7b 31 20 7b 6e 65 61 72 20 22 4f 4e 22 3a 20   {1 {near "ON": 
2880: 73 79 6e 74 61 78 20 65 72 72 6f 72 7d 7d 0a 64  syntax error}}.d
2890: 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 33 2e 32  o_test alter-3.2
28a0: 2e 37 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  .7 {.  catchsql 
28b0: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  {.    CREATE TAB
28c0: 4c 45 20 74 31 30 28 61 2c 20 27 4f 4e 27 2c 20  LE t10(a, 'ON', 
28d0: 63 29 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d  c);.  }.} {0 {}}
28e0: 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 33  .do_test alter-3
28f0: 2e 32 2e 38 20 7b 0a 20 20 63 61 74 63 68 73 71  .2.8 {.  catchsq
2900: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
2910: 52 49 47 47 45 52 20 74 72 69 67 34 20 41 46 54  RIGGER trig4 AFT
2920: 45 52 20 49 4e 53 45 52 54 20 4f 4e 20 4f 4e 20  ER INSERT ON ON 
2930: 42 45 47 49 4e 20 53 45 4c 45 43 54 20 31 3b 20  BEGIN SELECT 1; 
2940: 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 6e  END;.  }.} {1 {n
2950: 65 61 72 20 22 4f 4e 22 3a 20 73 79 6e 74 61 78  ear "ON": syntax
2960: 20 65 72 72 6f 72 7d 7d 0a 64 6f 5f 74 65 73 74   error}}.do_test
2970: 20 61 6c 74 65 72 2d 33 2e 32 2e 39 20 7b 0a 20   alter-3.2.9 {. 
2980: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
2990: 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 27  CREATE TRIGGER '
29a0: 6f 6e 27 2e 74 72 69 67 34 20 41 46 54 45 52 20  on'.trig4 AFTER 
29b0: 49 4e 53 45 52 54 20 4f 4e 20 27 4f 4e 27 20 42  INSERT ON 'ON' B
29c0: 45 47 49 4e 20 53 45 4c 45 43 54 20 31 3b 20 45  EGIN SELECT 1; E
29d0: 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d  ND;.  }.} {0 {}}
29e0: 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 33  .do_test alter-3
29f0: 2e 32 2e 31 30 20 7b 0a 20 20 65 78 65 63 73 71  .2.10 {.  execsq
2a00: 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20 54 41 42  l {.    DROP TAB
2a10: 4c 45 20 74 31 30 3b 0a 20 20 7d 0a 7d 20 7b 7d  LE t10;.  }.} {}
2a20: 0a 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d  ..do_test alter-
2a30: 33 2e 33 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  3.3.1 {.  execsq
2a40: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
2a50: 41 42 4c 45 20 74 62 6c 31 28 61 2c 20 62 2c 20  ABLE tbl1(a, b, 
2a60: 63 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54  c);.    CREATE T
2a70: 45 4d 50 20 54 52 49 47 47 45 52 20 74 72 69 67  EMP TRIGGER trig
2a80: 31 20 41 46 54 45 52 20 49 4e 53 45 52 54 20 4f  1 AFTER INSERT O
2a90: 4e 20 74 62 6c 31 20 42 45 47 49 4e 0a 20 20 20  N tbl1 BEGIN.   
2aa0: 20 20 20 53 45 4c 45 43 54 20 74 72 69 67 66 75     SELECT trigfu
2ab0: 6e 63 28 27 74 72 69 67 31 27 2c 20 6e 65 77 2e  nc('trig1', new.
2ac0: 61 2c 20 6e 65 77 2e 62 2c 20 6e 65 77 2e 63 29  a, new.b, new.c)
2ad0: 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 7d 0a 7d  ;.    END;.  }.}
2ae0: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65   {}.do_test alte
2af0: 72 2d 33 2e 33 2e 32 20 7b 0a 20 20 65 78 65 63  r-3.3.2 {.  exec
2b00: 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52 54  sql {.    INSERT
2b10: 20 49 4e 54 4f 20 74 62 6c 31 20 56 41 4c 55 45   INTO tbl1 VALUE
2b20: 53 28 27 61 27 2c 20 27 62 27 2c 20 27 63 27 29  S('a', 'b', 'c')
2b30: 3b 0a 20 20 7d 0a 20 20 73 65 74 20 3a 3a 54 52  ;.  }.  set ::TR
2b40: 49 47 47 45 52 0a 7d 20 7b 74 72 69 67 31 20 61  IGGER.} {trig1 a
2b50: 20 62 20 63 7d 0a 64 6f 5f 74 65 73 74 20 61 6c   b c}.do_test al
2b60: 74 65 72 2d 33 2e 33 2e 33 20 7b 0a 20 20 65 78  ter-3.3.3 {.  ex
2b70: 65 63 73 71 6c 20 7b 0a 20 20 20 20 41 4c 54 45  ecsql {.    ALTE
2b80: 52 20 54 41 42 4c 45 20 74 62 6c 31 20 52 45 4e  R TABLE tbl1 REN
2b90: 41 4d 45 20 54 4f 20 74 62 6c 32 3b 0a 20 20 20  AME TO tbl2;.   
2ba0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 62 6c   INSERT INTO tbl
2bb0: 32 20 56 41 4c 55 45 53 28 27 64 27 2c 20 27 65  2 VALUES('d', 'e
2bc0: 27 2c 20 27 66 27 29 3b 0a 20 20 7d 20 0a 20 20  ', 'f');.  } .  
2bd0: 73 65 74 20 3a 3a 54 52 49 47 47 45 52 0a 7d 20  set ::TRIGGER.} 
2be0: 7b 74 72 69 67 31 20 64 20 65 20 66 7d 0a 64 6f  {trig1 d e f}.do
2bf0: 5f 74 65 73 74 20 61 6c 74 65 72 2d 33 2e 33 2e  _test alter-3.3.
2c00: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  4 {.  execsql {.
2c10: 20 20 20 20 43 52 45 41 54 45 20 54 45 4d 50 20      CREATE TEMP 
2c20: 54 52 49 47 47 45 52 20 74 72 69 67 32 20 41 46  TRIGGER trig2 AF
2c30: 54 45 52 20 55 50 44 41 54 45 20 4f 4e 20 74 62  TER UPDATE ON tb
2c40: 6c 32 20 42 45 47 49 4e 0a 20 20 20 20 20 20 53  l2 BEGIN.      S
2c50: 45 4c 45 43 54 20 74 72 69 67 66 75 6e 63 28 27  ELECT trigfunc('
2c60: 74 72 69 67 32 27 2c 20 6e 65 77 2e 61 2c 20 6e  trig2', new.a, n
2c70: 65 77 2e 62 2c 20 6e 65 77 2e 63 29 3b 0a 20 20  ew.b, new.c);.  
2c80: 20 20 45 4e 44 3b 0a 20 20 7d 20 0a 7d 20 7b 7d    END;.  } .} {}
2c90: 0a 64 6f 5f 74 65 73 74 20 61 6c 74 65 72 2d 33  .do_test alter-3
2ca0: 2e 33 2e 35 20 7b 0a 20 20 65 78 65 63 73 71 6c  .3.5 {.  execsql
2cb0: 20 7b 0a 20 20 20 20 41 4c 54 45 52 20 54 41 42   {.    ALTER TAB
2cc0: 4c 45 20 74 62 6c 32 20 52 45 4e 41 4d 45 20 54  LE tbl2 RENAME T
2cd0: 4f 20 74 62 6c 33 3b 0a 20 20 20 20 49 4e 53 45  O tbl3;.    INSE
2ce0: 52 54 20 49 4e 54 4f 20 74 62 6c 33 20 56 41 4c  RT INTO tbl3 VAL
2cf0: 55 45 53 28 27 67 27 2c 20 27 68 27 2c 20 27 69  UES('g', 'h', 'i
2d00: 27 29 3b 0a 20 20 7d 20 0a 20 20 73 65 74 20 3a  ');.  } .  set :
2d10: 3a 54 52 49 47 47 45 52 0a 7d 20 7b 74 72 69 67  :TRIGGER.} {trig
2d20: 31 20 67 20 68 20 69 7d 0a 64 6f 5f 74 65 73 74  1 g h i}.do_test
2d30: 20 61 6c 74 65 72 2d 33 2e 33 2e 36 20 7b 0a 20   alter-3.3.6 {. 
2d40: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 55   execsql {.    U
2d50: 50 44 41 54 45 20 74 62 6c 33 20 53 45 54 20 61  PDATE tbl3 SET a
2d60: 20 3d 20 27 47 27 20 77 68 65 72 65 20 61 20 3d   = 'G' where a =
2d70: 20 27 67 27 3b 0a 20 20 7d 20 0a 20 20 73 65 74   'g';.  } .  set
2d80: 20 3a 3a 54 52 49 47 47 45 52 0a 7d 20 7b 74 72   ::TRIGGER.} {tr
2d90: 69 67 32 20 47 20 68 20 69 7d 0a 64 6f 5f 74 65  ig2 G h i}.do_te
2da0: 73 74 20 61 6c 74 65 72 2d 33 2e 33 2e 37 20 7b  st alter-3.3.7 {
2db0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
2dc0: 20 44 52 4f 50 20 54 41 42 4c 45 20 74 62 6c 33   DROP TABLE tbl3
2dd0: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ;.    SELECT * F
2de0: 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f  ROM sqlite_temp_
2df0: 6d 61 73 74 65 72 20 57 48 45 52 45 20 74 79 70  master WHERE typ
2e00: 65 20 3d 20 27 74 72 69 67 67 65 72 27 3b 0a 20  e = 'trigger';. 
2e10: 20 7d 0a 7d 20 7b 7d 0a 0a 66 69 6e 69 73 68 5f   }.} {}..finish_
2e20: 74 65 73 74 0a                                   test.