/ Hex Artifact Content
Login

Artifact 17e46baa6b2234048c91891a303141afceca4da95a36ee1a0a9fec6ccef1f4da:


0000: 23 20 32 30 31 38 20 41 75 67 75 73 74 20 32 34  # 2018 August 24
0010: 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f 72 20  .#.# The author 
0020: 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79 72 69  disclaims copyri
0030: 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f 75 72  ght to this sour
0040: 63 65 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c 61  ce code.  In pla
0050: 63 65 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c 20  ce of.# a legal 
0060: 6e 6f 74 69 63 65 2c 20 68 65 72 65 20 69 73 20  notice, here is 
0070: 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23 20  a blessing:.#.# 
0080: 20 20 20 4d 61 79 20 79 6f 75 20 64 6f 20 67 6f     May you do go
0090: 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c 2e  od and not evil.
00a0: 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 66 69  .#    May you fi
00b0: 6e 64 20 66 6f 72 67 69 76 65 6e 65 73 73 20 66  nd forgiveness f
00c0: 6f 72 20 79 6f 75 72 73 65 6c 66 20 61 6e 64 20  or yourself and 
00d0: 66 6f 72 67 69 76 65 20 6f 74 68 65 72 73 2e 0a  forgive others..
00e0: 23 20 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61  #    May you sha
00f0: 72 65 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72  re freely, never
0100: 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61   taking more tha
0110: 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23 2a  n you give..#.#*
0120: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 0a 23 0a 0a 73 65 74 20  ********.#..set 
0170: 74 65 73 74 64 69 72 20 5b 66 69 6c 65 20 64 69  testdir [file di
0180: 72 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f  rname $argv0].so
0190: 75 72 63 65 20 24 74 65 73 74 64 69 72 2f 74 65  urce $testdir/te
01a0: 73 74 65 72 2e 74 63 6c 0a 73 65 74 20 74 65 73  ster.tcl.set tes
01b0: 74 70 72 65 66 69 78 20 61 6c 74 65 72 74 61 62  tprefix altertab
01c0: 0a 0a 23 20 49 66 20 53 51 4c 49 54 45 5f 4f 4d  ..# If SQLITE_OM
01d0: 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 20 69 73  IT_ALTERTABLE is
01e0: 20 64 65 66 69 6e 65 64 2c 20 6f 6d 69 74 20 74   defined, omit t
01f0: 68 69 73 20 66 69 6c 65 2e 0a 69 66 63 61 70 61  his file..ifcapa
0200: 62 6c 65 20 21 61 6c 74 65 72 74 61 62 6c 65 20  ble !altertable 
0210: 7b 0a 20 20 66 69 6e 69 73 68 5f 74 65 73 74 0a  {.  finish_test.
0220: 20 20 72 65 74 75 72 6e 0a 7d 0a 0a 64 6f 5f 65    return.}..do_e
0230: 78 65 63 73 71 6c 5f 74 65 73 74 20 31 2e 30 20  xecsql_test 1.0 
0240: 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  {.  CREATE TABLE
0250: 20 74 31 28 61 2c 20 62 2c 20 43 48 45 43 4b 28   t1(a, b, CHECK(
0260: 74 31 2e 61 20 21 3d 20 74 31 2e 62 29 29 3b 0a  t1.a != t1.b));.
0270: 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  .  CREATE TABLE 
0280: 74 32 28 61 2c 20 62 29 3b 0a 20 20 43 52 45 41  t2(a, b);.  CREA
0290: 54 45 20 49 4e 44 45 58 20 74 32 65 78 70 72 20  TE INDEX t2expr 
02a0: 4f 4e 20 74 32 28 61 29 20 57 48 45 52 45 20 74  ON t2(a) WHERE t
02b0: 32 2e 62 3e 30 3b 0a 7d 0a 0a 64 6f 5f 65 78 65  2.b>0;.}..do_exe
02c0: 63 73 71 6c 5f 74 65 73 74 20 31 2e 31 20 7b 0a  csql_test 1.1 {.
02d0: 20 20 53 45 4c 45 43 54 20 73 71 6c 20 46 52 4f    SELECT sql FRO
02e0: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 0a  M sqlite_master.
02f0: 7d 20 7b 0a 20 20 7b 43 52 45 41 54 45 20 54 41  } {.  {CREATE TA
0300: 42 4c 45 20 74 31 28 61 2c 20 62 2c 20 43 48 45  BLE t1(a, b, CHE
0310: 43 4b 28 74 31 2e 61 20 21 3d 20 74 31 2e 62 29  CK(t1.a != t1.b)
0320: 29 7d 0a 20 20 7b 43 52 45 41 54 45 20 54 41 42  )}.  {CREATE TAB
0330: 4c 45 20 74 32 28 61 2c 20 62 29 7d 0a 20 20 7b  LE t2(a, b)}.  {
0340: 43 52 45 41 54 45 20 49 4e 44 45 58 20 74 32 65  CREATE INDEX t2e
0350: 78 70 72 20 4f 4e 20 74 32 28 61 29 20 57 48 45  xpr ON t2(a) WHE
0360: 52 45 20 74 32 2e 62 3e 30 7d 0a 7d 0a 0a 64 6f  RE t2.b>0}.}..do
0370: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 31 2e  _execsql_test 1.
0380: 32 20 7b 0a 20 20 41 4c 54 45 52 20 54 41 42 4c  2 {.  ALTER TABL
0390: 45 20 74 31 20 52 45 4e 41 4d 45 20 54 4f 20 74  E t1 RENAME TO t
03a0: 31 6e 65 77 3b 0a 7d 0a 0a 64 6f 5f 65 78 65 63  1new;.}..do_exec
03b0: 73 71 6c 5f 74 65 73 74 20 31 2e 33 20 7b 0a 20  sql_test 1.3 {. 
03c0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 33   CREATE TABLE t3
03d0: 28 63 2c 20 64 29 3b 0a 20 20 41 4c 54 45 52 20  (c, d);.  ALTER 
03e0: 54 41 42 4c 45 20 74 33 20 52 45 4e 41 4d 45 20  TABLE t3 RENAME 
03f0: 54 4f 20 74 33 6e 65 77 3b 0a 20 20 44 52 4f 50  TO t3new;.  DROP
0400: 20 54 41 42 4c 45 20 74 33 6e 65 77 3b 0a 7d 0a   TABLE t3new;.}.
0410: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
0420: 20 31 2e 34 20 7b 0a 20 20 53 45 4c 45 43 54 20   1.4 {.  SELECT 
0430: 73 71 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  sql FROM sqlite_
0440: 6d 61 73 74 65 72 0a 7d 20 7b 0a 20 20 7b 43 52  master.} {.  {CR
0450: 45 41 54 45 20 54 41 42 4c 45 20 22 74 31 6e 65  EATE TABLE "t1ne
0460: 77 22 28 61 2c 20 62 2c 20 43 48 45 43 4b 28 22  w"(a, b, CHECK("
0470: 74 31 6e 65 77 22 2e 61 20 21 3d 20 22 74 31 6e  t1new".a != "t1n
0480: 65 77 22 2e 62 29 29 7d 0a 20 20 7b 43 52 45 41  ew".b))}.  {CREA
0490: 54 45 20 54 41 42 4c 45 20 74 32 28 61 2c 20 62  TE TABLE t2(a, b
04a0: 29 7d 0a 20 20 7b 43 52 45 41 54 45 20 49 4e 44  )}.  {CREATE IND
04b0: 45 58 20 74 32 65 78 70 72 20 4f 4e 20 74 32 28  EX t2expr ON t2(
04c0: 61 29 20 57 48 45 52 45 20 74 32 2e 62 3e 30 7d  a) WHERE t2.b>0}
04d0: 0a 7d 0a 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  .}...do_execsql_
04e0: 74 65 73 74 20 31 2e 33 20 7b 0a 20 20 41 4c 54  test 1.3 {.  ALT
04f0: 45 52 20 54 41 42 4c 45 20 74 32 20 52 45 4e 41  ER TABLE t2 RENA
0500: 4d 45 20 54 4f 20 74 32 6e 65 77 3b 0a 7d 0a 64  ME TO t2new;.}.d
0510: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 31  o_execsql_test 1
0520: 2e 34 20 7b 0a 20 20 53 45 4c 45 43 54 20 73 71  .4 {.  SELECT sq
0530: 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  l FROM sqlite_ma
0540: 73 74 65 72 0a 7d 20 7b 0a 20 20 7b 43 52 45 41  ster.} {.  {CREA
0550: 54 45 20 54 41 42 4c 45 20 22 74 31 6e 65 77 22  TE TABLE "t1new"
0560: 28 61 2c 20 62 2c 20 43 48 45 43 4b 28 22 74 31  (a, b, CHECK("t1
0570: 6e 65 77 22 2e 61 20 21 3d 20 22 74 31 6e 65 77  new".a != "t1new
0580: 22 2e 62 29 29 7d 0a 20 20 7b 43 52 45 41 54 45  ".b))}.  {CREATE
0590: 20 54 41 42 4c 45 20 22 74 32 6e 65 77 22 28 61   TABLE "t2new"(a
05a0: 2c 20 62 29 7d 0a 20 20 7b 43 52 45 41 54 45 20  , b)}.  {CREATE 
05b0: 49 4e 44 45 58 20 74 32 65 78 70 72 20 4f 4e 20  INDEX t2expr ON 
05c0: 22 74 32 6e 65 77 22 28 61 29 20 57 48 45 52 45  "t2new"(a) WHERE
05d0: 20 22 74 32 6e 65 77 22 2e 62 3e 30 7d 0a 7d 0a   "t2new".b>0}.}.
05e0: 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ..#-------------
05f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0600: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0610: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0620: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 72 65 73  ------------.res
0630: 65 74 5f 64 62 0a 69 66 63 61 70 61 62 6c 65 20  et_db.ifcapable 
0640: 76 74 61 62 20 7b 0a 20 20 72 65 67 69 73 74 65  vtab {.  registe
0650: 72 5f 65 63 68 6f 5f 6d 6f 64 75 6c 65 20 64 62  r_echo_module db
0660: 0a 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74  ..  do_execsql_t
0670: 65 73 74 20 32 2e 30 20 7b 0a 20 20 20 20 43 52  est 2.0 {.    CR
0680: 45 41 54 45 20 54 41 42 4c 45 20 61 62 63 28 61  EATE TABLE abc(a
0690: 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20 49 4e 53  , b, c);.    INS
06a0: 45 52 54 20 49 4e 54 4f 20 61 62 63 20 56 41 4c  ERT INTO abc VAL
06b0: 55 45 53 28 31 2c 20 32 2c 20 33 29 3b 0a 20 20  UES(1, 2, 3);.  
06c0: 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c    CREATE VIRTUAL
06d0: 20 54 41 42 4c 45 20 65 65 65 20 55 53 49 4e 47   TABLE eee USING
06e0: 20 65 63 68 6f 28 27 61 62 63 27 29 3b 0a 20 20   echo('abc');.  
06f0: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
0700: 65 65 65 3b 0a 20 20 7d 20 7b 31 20 32 20 33 7d  eee;.  } {1 2 3}
0710: 0a 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74  ..  do_execsql_t
0720: 65 73 74 20 32 2e 31 20 7b 0a 20 20 20 20 41 4c  est 2.1 {.    AL
0730: 54 45 52 20 54 41 42 4c 45 20 65 65 65 20 52 45  TER TABLE eee RE
0740: 4e 41 4d 45 20 54 4f 20 66 66 66 3b 0a 20 20 20  NAME TO fff;.   
0750: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 66   SELECT * FROM f
0760: 66 66 3b 0a 20 20 7d 20 7b 31 20 32 20 33 7d 0a  ff;.  } {1 2 3}.
0770: 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 73 71  .  db close.  sq
0780: 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62  lite3 db test.db
0790: 0a 0a 20 20 64 6f 5f 63 61 74 63 68 73 71 6c 5f  ..  do_catchsql_
07a0: 74 65 73 74 20 32 2e 32 20 7b 0a 20 20 20 20 41  test 2.2 {.    A
07b0: 4c 54 45 52 20 54 41 42 4c 45 20 66 66 66 20 52  LTER TABLE fff R
07c0: 45 4e 41 4d 45 20 54 4f 20 67 67 67 3b 0a 20 20  ENAME TO ggg;.  
07d0: 7d 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20 6d 6f  } {1 {no such mo
07e0: 64 75 6c 65 3a 20 65 63 68 6f 7d 7d 0a 7d 0a 0a  dule: echo}}.}..
07f0: 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  #---------------
0800: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0810: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0820: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0830: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 72 65 73 65 74  ----------.reset
0840: 5f 64 62 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  _db..do_execsql_
0850: 74 65 73 74 20 33 2e 30 20 7b 0a 20 20 43 52 45  test 3.0 {.  CRE
0860: 41 54 45 20 54 41 42 4c 45 20 74 78 78 28 61 2c  ATE TABLE txx(a,
0870: 20 62 2c 20 63 29 3b 0a 20 20 49 4e 53 45 52 54   b, c);.  INSERT
0880: 20 49 4e 54 4f 20 74 78 78 20 56 41 4c 55 45 53   INTO txx VALUES
0890: 28 31 2c 20 32 2c 20 33 29 3b 0a 20 20 43 52 45  (1, 2, 3);.  CRE
08a0: 41 54 45 20 56 49 45 57 20 76 76 76 20 41 53 20  ATE VIEW vvv AS 
08b0: 53 45 4c 45 43 54 20 6d 61 69 6e 2e 74 78 78 2e  SELECT main.txx.
08c0: 61 2c 20 74 78 78 2e 62 2c 20 63 20 46 52 4f 4d  a, txx.b, c FROM
08d0: 20 74 78 78 3b 0a 20 20 43 52 45 41 54 45 20 56   txx;.  CREATE V
08e0: 49 45 57 20 75 75 75 20 41 53 20 53 45 4c 45 43  IEW uuu AS SELEC
08f0: 54 20 6d 61 69 6e 2e 6f 6e 65 2e 61 2c 20 6f 6e  T main.one.a, on
0900: 65 2e 62 2c 20 63 20 46 52 4f 4d 20 74 78 78 20  e.b, c FROM txx 
0910: 41 53 20 6f 6e 65 3b 0a 20 20 43 52 45 41 54 45  AS one;.  CREATE
0920: 20 56 49 45 57 20 74 65 6d 70 2e 74 74 74 20 41   VIEW temp.ttt A
0930: 53 20 53 45 4c 45 43 54 20 6d 61 69 6e 2e 74 78  S SELECT main.tx
0940: 78 2e 61 2c 20 74 78 78 2e 62 2c 20 6f 6e 65 2e  x.a, txx.b, one.
0950: 62 2c 20 6d 61 69 6e 2e 6f 6e 65 2e 61 20 46 52  b, main.one.a FR
0960: 4f 4d 20 74 78 78 20 41 53 20 6f 6e 65 2c 20 74  OM txx AS one, t
0970: 78 78 3b 0a 7d 0a 0a 64 6f 5f 65 78 65 63 73 71  xx;.}..do_execsq
0980: 6c 5f 74 65 73 74 20 33 2e 31 2e 31 20 7b 0a 20  l_test 3.1.1 {. 
0990: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 76   SELECT * FROM v
09a0: 76 76 3b 0a 7d 20 7b 31 20 32 20 33 7d 0a 64 6f  vv;.} {1 2 3}.do
09b0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 33 2e  _execsql_test 3.
09c0: 31 2e 32 20 7b 0a 20 20 41 4c 54 45 52 20 54 41  1.2 {.  ALTER TA
09d0: 42 4c 45 20 74 78 78 20 52 45 4e 41 4d 45 20 54  BLE txx RENAME T
09e0: 4f 20 22 74 20 78 78 22 3b 0a 20 20 53 45 4c 45  O "t xx";.  SELE
09f0: 43 54 20 2a 20 46 52 4f 4d 20 76 76 76 3b 0a 7d  CT * FROM vvv;.}
0a00: 20 7b 31 20 32 20 33 7d 0a 64 6f 5f 65 78 65 63   {1 2 3}.do_exec
0a10: 73 71 6c 5f 74 65 73 74 20 33 2e 31 2e 33 20 7b  sql_test 3.1.3 {
0a20: 0a 20 20 53 45 4c 45 43 54 20 73 71 6c 20 46 52  .  SELECT sql FR
0a30: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
0a40: 20 57 48 45 52 45 20 6e 61 6d 65 3d 27 76 76 76   WHERE name='vvv
0a50: 27 3b 0a 7d 20 7b 7b 43 52 45 41 54 45 20 56 49  ';.} {{CREATE VI
0a60: 45 57 20 76 76 76 20 41 53 20 53 45 4c 45 43 54  EW vvv AS SELECT
0a70: 20 6d 61 69 6e 2e 22 74 20 78 78 22 2e 61 2c 20   main."t xx".a, 
0a80: 22 74 20 78 78 22 2e 62 2c 20 63 20 46 52 4f 4d  "t xx".b, c FROM
0a90: 20 22 74 20 78 78 22 7d 7d 0a 0a 0a 64 6f 5f 65   "t xx"}}...do_e
0aa0: 78 65 63 73 71 6c 5f 74 65 73 74 20 33 2e 32 2e  xecsql_test 3.2.
0ab0: 31 20 7b 0a 20 20 53 45 4c 45 43 54 20 2a 20 46  1 {.  SELECT * F
0ac0: 52 4f 4d 20 75 75 75 3b 0a 7d 20 7b 31 20 32 20  ROM uuu;.} {1 2 
0ad0: 33 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  3}.do_execsql_te
0ae0: 73 74 20 33 2e 32 2e 32 20 7b 0a 20 20 53 45 4c  st 3.2.2 {.  SEL
0af0: 45 43 54 20 73 71 6c 20 46 52 4f 4d 20 73 71 6c  ECT sql FROM sql
0b00: 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45  ite_master WHERE
0b10: 20 6e 61 6d 65 3d 27 75 75 75 27 3b 3b 0a 7d 20   name='uuu';;.} 
0b20: 7b 7b 43 52 45 41 54 45 20 56 49 45 57 20 75 75  {{CREATE VIEW uu
0b30: 75 20 41 53 20 53 45 4c 45 43 54 20 6d 61 69 6e  u AS SELECT main
0b40: 2e 6f 6e 65 2e 61 2c 20 6f 6e 65 2e 62 2c 20 63  .one.a, one.b, c
0b50: 20 46 52 4f 4d 20 22 74 20 78 78 22 20 41 53 20   FROM "t xx" AS 
0b60: 6f 6e 65 7d 7d 0a 0a 64 6f 5f 65 78 65 63 73 71  one}}..do_execsq
0b70: 6c 5f 74 65 73 74 20 33 2e 33 2e 31 20 7b 0a 20  l_test 3.3.1 {. 
0b80: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
0b90: 74 74 3b 0a 7d 20 7b 31 20 32 20 32 20 31 7d 0a  tt;.} {1 2 2 1}.
0ba0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
0bb0: 33 2e 33 2e 32 20 7b 0a 20 20 53 45 4c 45 43 54  3.3.2 {.  SELECT
0bc0: 20 73 71 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65   sql FROM sqlite
0bd0: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 20 57 48 45  _temp_master WHE
0be0: 52 45 20 6e 61 6d 65 3d 27 74 74 74 27 3b 0a 7d  RE name='ttt';.}
0bf0: 20 7b 7b 43 52 45 41 54 45 20 56 49 45 57 20 74   {{CREATE VIEW t
0c00: 74 74 20 41 53 20 53 45 4c 45 43 54 20 6d 61 69  tt AS SELECT mai
0c10: 6e 2e 22 74 20 78 78 22 2e 61 2c 20 22 74 20 78  n."t xx".a, "t x
0c20: 78 22 2e 62 2c 20 6f 6e 65 2e 62 2c 20 6d 61 69  x".b, one.b, mai
0c30: 6e 2e 6f 6e 65 2e 61 20 46 52 4f 4d 20 22 74 20  n.one.a FROM "t 
0c40: 78 78 22 20 41 53 20 6f 6e 65 2c 20 22 74 20 78  xx" AS one, "t x
0c50: 78 22 7d 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d  x"}}..#---------
0c60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0c70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0c80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0c90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0ca0: 0a 72 65 73 65 74 5f 64 62 0a 64 6f 5f 65 78 65  .reset_db.do_exe
0cb0: 63 73 71 6c 5f 74 65 73 74 20 34 2e 30 20 7b 0a  csql_test 4.0 {.
0cc0: 20 20 43 52 45 41 54 45 20 74 61 62 6c 65 20 74    CREATE table t
0cd0: 31 28 78 2c 20 79 29 3b 0a 20 20 43 52 45 41 54  1(x, y);.  CREAT
0ce0: 45 20 74 61 62 6c 65 20 74 32 28 61 2c 20 62 29  E table t2(a, b)
0cf0: 3b 0a 0a 20 20 43 52 45 41 54 45 20 54 52 49 47  ;..  CREATE TRIG
0d00: 47 45 52 20 74 72 31 20 41 46 54 45 52 20 49 4e  GER tr1 AFTER IN
0d10: 53 45 52 54 20 4f 4e 20 74 31 20 42 45 47 49 4e  SERT ON t1 BEGIN
0d20: 0a 20 20 20 20 53 45 4c 45 43 54 20 74 31 2e 78  .    SELECT t1.x
0d30: 2c 20 2a 20 46 52 4f 4d 20 74 31 2c 20 74 32 3b  , * FROM t1, t2;
0d40: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
0d50: 20 74 32 20 56 41 4c 55 45 53 28 6e 65 77 2e 78   t2 VALUES(new.x
0d60: 2c 20 6e 65 77 2e 79 29 3b 0a 20 20 45 4e 44 3b  , new.y);.  END;
0d70: 0a 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  .}..do_execsql_t
0d80: 65 73 74 20 34 2e 31 20 7b 0a 20 20 49 4e 53 45  est 4.1 {.  INSE
0d90: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
0da0: 53 28 31 2c 20 31 29 3b 0a 20 20 41 4c 54 45 52  S(1, 1);.  ALTER
0db0: 20 54 41 42 4c 45 20 74 31 20 52 45 4e 41 4d 45   TABLE t1 RENAME
0dc0: 20 54 4f 20 74 31 31 3b 0a 20 20 49 4e 53 45 52   TO t11;.  INSER
0dd0: 54 20 49 4e 54 4f 20 74 31 31 20 56 41 4c 55 45  T INTO t11 VALUE
0de0: 53 28 32 2c 20 32 29 3b 0a 20 20 41 4c 54 45 52  S(2, 2);.  ALTER
0df0: 20 54 41 42 4c 45 20 74 32 20 52 45 4e 41 4d 45   TABLE t2 RENAME
0e00: 20 54 4f 20 74 32 32 3b 0a 20 20 49 4e 53 45 52   TO t22;.  INSER
0e10: 54 20 49 4e 54 4f 20 74 31 31 20 56 41 4c 55 45  T INTO t11 VALUE
0e20: 53 28 33 2c 20 33 29 3b 0a 7d 0a 0a 70 72 6f 63  S(3, 3);.}..proc
0e30: 20 73 71 75 69 73 68 20 7b 61 7d 20 7b 0a 20 20   squish {a} {.  
0e40: 73 74 72 69 6e 67 20 74 72 69 6d 20 5b 72 65 67  string trim [reg
0e50: 73 75 62 20 2d 61 6c 6c 20 7b 5b 5b 3a 73 70 61  sub -all {[[:spa
0e60: 63 65 3a 5d 5d 5b 5b 3a 73 70 61 63 65 3a 5d 5d  ce:]][[:space:]]
0e70: 2a 7d 20 24 61 20 7b 20 7d 5d 0a 7d 0a 64 62 20  *} $a { }].}.db 
0e80: 66 75 6e 63 20 73 71 75 69 73 68 20 73 71 75 69  func squish squi
0e90: 73 68 0a 64 6f 5f 74 65 73 74 20 34 2e 32 20 7b  sh.do_test 4.2 {
0ea0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 53 45 4c  .  execsql { SEL
0eb0: 45 43 54 20 73 71 75 69 73 68 28 73 71 6c 29 20  ECT squish(sql) 
0ec0: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
0ed0: 65 72 20 57 48 45 52 45 20 6e 61 6d 65 20 3d 20  er WHERE name = 
0ee0: 27 74 72 31 27 20 7d 0a 7d 20 5b 6c 69 73 74 20  'tr1' }.} [list 
0ef0: 5b 73 71 75 69 73 68 20 7b 0a 20 20 43 52 45 41  [squish {.  CREA
0f00: 54 45 20 54 52 49 47 47 45 52 20 74 72 31 20 41  TE TRIGGER tr1 A
0f10: 46 54 45 52 20 49 4e 53 45 52 54 20 4f 4e 20 22  FTER INSERT ON "
0f20: 74 31 31 22 20 42 45 47 49 4e 0a 20 20 20 20 53  t11" BEGIN.    S
0f30: 45 4c 45 43 54 20 22 74 31 31 22 2e 78 2c 20 2a  ELECT "t11".x, *
0f40: 20 46 52 4f 4d 20 22 74 31 31 22 2c 20 22 74 32   FROM "t11", "t2
0f50: 32 22 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  2";.    INSERT I
0f60: 4e 54 4f 20 22 74 32 32 22 20 56 41 4c 55 45 53  NTO "t22" VALUES
0f70: 28 6e 65 77 2e 78 2c 20 6e 65 77 2e 79 29 3b 0a  (new.x, new.y);.
0f80: 20 20 45 4e 44 0a 7d 5d 5d 0a 0a 23 2d 2d 2d 2d    END.}]]..#----
0f90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0fa0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0fb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0fc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0fd0: 2d 2d 2d 2d 2d 0a 72 65 73 65 74 5f 64 62 0a 64  -----.reset_db.d
0fe0: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 35  o_execsql_test 5
0ff0: 2e 30 20 7b 0a 20 20 43 52 45 41 54 45 20 54 41  .0 {.  CREATE TA
1000: 42 4c 45 20 74 39 28 61 2c 20 62 2c 20 63 29 3b  BLE t9(a, b, c);
1010: 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  .  CREATE TABLE 
1020: 74 31 30 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20  t10(a, b, c);.  
1030: 43 52 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c  CREATE TEMP TABL
1040: 45 20 74 39 28 61 2c 20 62 2c 20 63 29 3b 0a 0a  E t9(a, b, c);..
1050: 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52    CREATE TRIGGER
1060: 20 74 65 6d 70 2e 74 39 74 20 41 46 54 45 52 20   temp.t9t AFTER 
1070: 49 4e 53 45 52 54 20 4f 4e 20 74 65 6d 70 2e 74  INSERT ON temp.t
1080: 39 20 42 45 47 49 4e 0a 20 20 20 20 49 4e 53 45  9 BEGIN.    INSE
1090: 52 54 20 49 4e 54 4f 20 74 31 30 20 56 41 4c 55  RT INTO t10 VALU
10a0: 45 53 28 6e 65 77 2e 61 2c 20 6e 65 77 2e 62 2c  ES(new.a, new.b,
10b0: 20 6e 65 77 2e 63 29 3b 0a 20 20 45 4e 44 3b 0a   new.c);.  END;.
10c0: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
10d0: 65 6d 70 2e 74 39 20 56 41 4c 55 45 53 28 31 2c  emp.t9 VALUES(1,
10e0: 20 32 2c 20 33 29 3b 0a 20 20 53 45 4c 45 43 54   2, 3);.  SELECT
10f0: 20 2a 20 46 52 4f 4d 20 74 31 30 3b 0a 7d 20 7b   * FROM t10;.} {
1100: 31 20 32 20 33 7d 0a 0a 64 6f 5f 65 78 65 63 73  1 2 3}..do_execs
1110: 71 6c 5f 74 65 73 74 20 35 2e 31 20 7b 0a 20 20  ql_test 5.1 {.  
1120: 41 4c 54 45 52 20 54 41 42 4c 45 20 74 65 6d 70  ALTER TABLE temp
1130: 2e 74 39 20 52 45 4e 41 4d 45 20 54 4f 20 27 74  .t9 RENAME TO 't
1140: 31 32 33 34 35 36 37 38 39 30 27 0a 7d 0a 0a 64  1234567890'.}..d
1150: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 35  o_execsql_test 5
1160: 2e 32 20 7b 0a 20 20 43 52 45 41 54 45 20 54 41  .2 {.  CREATE TA
1170: 42 4c 45 20 74 31 28 61 2c 20 62 29 3b 0a 20 20  BLE t1(a, b);.  
1180: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 32 28  CREATE TABLE t2(
1190: 61 2c 20 62 29 3b 0a 20 20 49 4e 53 45 52 54 20  a, b);.  INSERT 
11a0: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31  INTO t1 VALUES(1
11b0: 2c 20 32 29 3b 0a 20 20 49 4e 53 45 52 54 20 49  , 2);.  INSERT I
11c0: 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 33 2c  NTO t2 VALUES(3,
11d0: 20 34 29 3b 0a 20 20 43 52 45 41 54 45 20 56 49   4);.  CREATE VI
11e0: 45 57 20 76 20 41 53 20 53 45 4c 45 43 54 20 6f  EW v AS SELECT o
11f0: 6e 65 2e 61 2c 20 6f 6e 65 2e 62 2c 20 74 32 2e  ne.a, one.b, t2.
1200: 61 2c 20 74 32 2e 62 20 46 52 4f 4d 20 74 31 20  a, t2.b FROM t1 
1210: 41 53 20 6f 6e 65 2c 20 74 32 3b 0a 20 20 53 45  AS one, t2;.  SE
1220: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 76 3b 0a 7d  LECT * FROM v;.}
1230: 20 7b 31 20 32 20 33 20 34 7d 0a 0a 64 6f 5f 63   {1 2 3 4}..do_c
1240: 61 74 63 68 73 71 6c 5f 74 65 73 74 20 35 2e 33  atchsql_test 5.3
1250: 20 7b 0a 20 20 41 4c 54 45 52 20 54 41 42 4c 45   {.  ALTER TABLE
1260: 20 74 32 20 52 45 4e 41 4d 45 20 54 4f 20 6f 6e   t2 RENAME TO on
1270: 65 3b 0a 7d 20 7b 31 20 7b 65 72 72 6f 72 20 69  e;.} {1 {error i
1280: 6e 20 76 69 65 77 20 76 20 61 66 74 65 72 20 72  n view v after r
1290: 65 6e 61 6d 65 3a 20 61 6d 62 69 67 75 6f 75 73  ename: ambiguous
12a0: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 3a 20 6f 6e   column name: on
12b0: 65 2e 61 7d 7d 0a 0a 64 6f 5f 65 78 65 63 73 71  e.a}}..do_execsq
12c0: 6c 5f 74 65 73 74 20 35 2e 34 20 7b 0a 20 20 53  l_test 5.4 {.  S
12d0: 45 4c 45 43 54 20 20 2a 20 20 46 52 4f 4d 20 76  ELECT  *  FROM v
12e0: 0a 7d 20 7b 31 20 32 20 33 20 34 7d 0a 0a 64 6f  .} {1 2 3 4}..do
12f0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 35 2e  _execsql_test 5.
1300: 35 20 7b 0a 20 20 44 52 4f 50 20 56 49 45 57 20  5 {.  DROP VIEW 
1310: 76 3b 0a 20 20 43 52 45 41 54 45 20 56 49 45 57  v;.  CREATE VIEW
1320: 20 74 65 6d 70 2e 76 76 20 41 53 20 53 45 4c 45   temp.vv AS SELE
1330: 43 54 20 6f 6e 65 2e 61 2c 20 6f 6e 65 2e 62 2c  CT one.a, one.b,
1340: 20 74 32 2e 61 2c 20 74 32 2e 62 20 46 52 4f 4d   t2.a, t2.b FROM
1350: 20 74 31 20 41 53 20 6f 6e 65 2c 20 74 32 3b 0a   t1 AS one, t2;.
1360: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
1370: 76 76 3b 0a 7d 20 7b 31 20 32 20 33 20 34 7d 0a  vv;.} {1 2 3 4}.
1380: 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65 73  .do_catchsql_tes
1390: 74 20 35 2e 36 20 7b 0a 20 20 41 4c 54 45 52 20  t 5.6 {.  ALTER 
13a0: 54 41 42 4c 45 20 74 32 20 52 45 4e 41 4d 45 20  TABLE t2 RENAME 
13b0: 54 4f 20 6f 6e 65 3b 0a 7d 20 7b 31 20 7b 65 72  TO one;.} {1 {er
13c0: 72 6f 72 20 69 6e 20 76 69 65 77 20 76 76 20 61  ror in view vv a
13d0: 66 74 65 72 20 72 65 6e 61 6d 65 3a 20 61 6d 62  fter rename: amb
13e0: 69 67 75 6f 75 73 20 63 6f 6c 75 6d 6e 20 6e 61  iguous column na
13f0: 6d 65 3a 20 6f 6e 65 2e 61 7d 7d 0a 0a 23 2d 2d  me: one.a}}..#--
1400: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1410: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1420: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1430: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1440: 2d 2d 2d 2d 2d 2d 2d 0a 0a 69 66 63 61 70 61 62  -------..ifcapab
1450: 6c 65 20 76 74 61 62 20 7b 0a 20 20 72 65 67 69  le vtab {.  regi
1460: 73 74 65 72 5f 74 63 6c 5f 6d 6f 64 75 6c 65 20  ster_tcl_module 
1470: 64 62 0a 20 20 70 72 6f 63 20 74 63 6c 5f 63 6f  db.  proc tcl_co
1480: 6d 6d 61 6e 64 20 7b 6d 65 74 68 6f 64 20 61 72  mmand {method ar
1490: 67 73 7d 20 7b 0a 20 20 20 20 73 77 69 74 63 68  gs} {.    switch
14a0: 20 2d 2d 20 24 6d 65 74 68 6f 64 20 7b 0a 20 20   -- $method {.  
14b0: 20 20 20 20 78 43 6f 6e 6e 65 63 74 20 7b 0a 20      xConnect {. 
14c0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 43         return "C
14d0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61  REATE TABLE t1(a
14e0: 2c 20 62 2c 20 63 29 22 0a 20 20 20 20 20 20 7d  , b, c)".      }
14f0: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
1500: 6e 20 7b 7d 0a 20 20 7d 0a 20 20 0a 20 20 64 6f  n {}.  }.  .  do
1510: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 36 2e  _execsql_test 6.
1520: 30 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 56  0 {.    CREATE V
1530: 49 52 54 55 41 4c 20 54 41 42 4c 45 20 78 31 20  IRTUAL TABLE x1 
1540: 55 53 49 4e 47 20 74 63 6c 28 74 63 6c 5f 63 6f  USING tcl(tcl_co
1550: 6d 6d 61 6e 64 29 3b 0a 20 20 7d 0a 20 20 0a 20  mmand);.  }.  . 
1560: 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74   do_execsql_test
1570: 20 36 2e 31 20 7b 0a 20 20 20 20 41 4c 54 45 52   6.1 {.    ALTER
1580: 20 54 41 42 4c 45 20 78 31 20 52 45 4e 41 4d 45   TABLE x1 RENAME
1590: 20 54 4f 20 78 32 3b 0a 20 20 20 20 53 45 4c 45   TO x2;.    SELE
15a0: 43 54 20 73 71 6c 20 46 52 4f 4d 20 73 71 6c 69  CT sql FROM sqli
15b0: 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20  te_master WHERE 
15c0: 6e 61 6d 65 20 3d 20 27 78 32 27 0a 20 20 7d 20  name = 'x2'.  } 
15d0: 7b 7b 43 52 45 41 54 45 20 56 49 52 54 55 41 4c  {{CREATE VIRTUAL
15e0: 20 54 41 42 4c 45 20 22 78 32 22 20 55 53 49 4e   TABLE "x2" USIN
15f0: 47 20 74 63 6c 28 74 63 6c 5f 63 6f 6d 6d 61 6e  G tcl(tcl_comman
1600: 64 29 7d 7d 0a 20 20 0a 20 20 64 6f 5f 65 78 65  d)}}.  .  do_exe
1610: 63 73 71 6c 5f 74 65 73 74 20 37 2e 31 20 7b 0a  csql_test 7.1 {.
1620: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
1630: 20 64 64 64 28 64 62 2c 20 73 71 6c 2c 20 7a 4f   ddd(db, sql, zO
1640: 6c 64 2c 20 7a 4e 65 77 2c 20 62 54 65 6d 70 29  ld, zNew, bTemp)
1650: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
1660: 4f 20 64 64 64 20 56 41 4c 55 45 53 28 0a 20 20  O ddd VALUES(.  
1670: 20 20 20 20 20 20 27 6d 61 69 6e 27 2c 20 27 43        'main', 'C
1680: 52 45 41 54 45 20 54 41 42 4c 45 20 78 31 28 69  REATE TABLE x1(i
1690: 20 49 4e 54 45 47 45 52 2c 20 74 20 54 45 58 54   INTEGER, t TEXT
16a0: 29 27 2c 20 27 64 64 64 27 2c 20 4e 55 4c 4c 2c  )', 'ddd', NULL,
16b0: 20 30 0a 20 20 20 20 29 2c 20 28 0a 20 20 20 20   0.    ), (.    
16c0: 20 20 20 20 27 6d 61 69 6e 27 2c 20 27 43 52 45      'main', 'CRE
16d0: 41 54 45 20 54 41 42 4c 45 20 78 31 28 69 20 49  ATE TABLE x1(i I
16e0: 4e 54 45 47 45 52 2c 20 74 20 54 45 58 54 29 27  NTEGER, t TEXT)'
16f0: 2c 20 4e 55 4c 4c 2c 20 27 65 65 65 27 2c 20 30  , NULL, 'eee', 0
1700: 0a 20 20 20 20 29 2c 20 28 0a 20 20 20 20 20 20  .    ), (.      
1710: 20 20 27 6d 61 69 6e 27 2c 20 4e 55 4c 4c 2c 20    'main', NULL, 
1720: 27 64 64 64 27 2c 20 27 65 65 65 27 2c 20 30 0a  'ddd', 'eee', 0.
1730: 20 20 20 20 29 3b 0a 20 20 7d 20 7b 7d 0a 20 20      );.  } {}.  
1740: 0a 20 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f  .  sqlite3_test_
1750: 63 6f 6e 74 72 6f 6c 20 53 51 4c 49 54 45 5f 54  control SQLITE_T
1760: 45 53 54 43 54 52 4c 5f 49 4e 54 45 52 4e 41 4c  ESTCTRL_INTERNAL
1770: 5f 46 55 4e 43 54 49 4f 4e 53 20 31 0a 20 20 64  _FUNCTIONS 1.  d
1780: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 37  o_execsql_test 7
1790: 2e 32 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  .2 {.    SELECT 
17a0: 0a 20 20 20 20 73 71 6c 69 74 65 5f 72 65 6e 61  .    sqlite_rena
17b0: 6d 65 5f 74 61 62 6c 65 28 64 62 2c 20 30 2c 20  me_table(db, 0, 
17c0: 30 2c 20 73 71 6c 2c 20 7a 4f 6c 64 2c 20 7a 4e  0, sql, zOld, zN
17d0: 65 77 2c 20 62 54 65 6d 70 29 0a 20 20 20 20 46  ew, bTemp).    F
17e0: 52 4f 4d 20 64 64 64 3b 0a 20 20 7d 20 7b 7b 7d  ROM ddd;.  } {{}
17f0: 20 7b 7d 20 7b 7d 7d 0a 20 20 73 71 6c 69 74 65   {} {}}.  sqlite
1800: 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 20 53  3_test_control S
1810: 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 49  QLITE_TESTCTRL_I
1820: 4e 54 45 52 4e 41 4c 5f 46 55 4e 43 54 49 4f 4e  NTERNAL_FUNCTION
1830: 53 20 30 0a 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d  S 0.}..#--------
1840: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1850: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1860: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1870: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1880: 2d 0a 23 0a 72 65 73 65 74 5f 64 62 0a 66 6f 72  -.#.reset_db.for
1890: 63 65 64 65 6c 65 74 65 20 74 65 73 74 2e 64 62  cedelete test.db
18a0: 32 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  2.do_execsql_tes
18b0: 74 20 38 2e 31 20 7b 0a 20 20 41 54 54 41 43 48  t 8.1 {.  ATTACH
18c0: 20 27 74 65 73 74 2e 64 62 32 27 20 41 53 20 61   'test.db2' AS a
18d0: 75 78 3b 0a 20 20 50 52 41 47 4d 41 20 66 6f 72  ux;.  PRAGMA for
18e0: 65 69 67 6e 5f 6b 65 79 73 20 3d 20 6f 6e 3b 0a  eign_keys = on;.
18f0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 61    CREATE TABLE a
1900: 75 78 2e 70 31 28 61 20 49 4e 54 45 47 45 52 20  ux.p1(a INTEGER 
1910: 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 29 3b  PRIMARY KEY, b);
1920: 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  .  CREATE TABLE 
1930: 61 75 78 2e 63 31 28 78 20 49 4e 54 45 47 45 52  aux.c1(x INTEGER
1940: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 79 20   PRIMARY KEY, y 
1950: 52 45 46 45 52 45 4e 43 45 53 20 70 31 28 61 29  REFERENCES p1(a)
1960: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
1970: 20 61 75 78 2e 70 31 20 56 41 4c 55 45 53 28 31   aux.p1 VALUES(1
1980: 2c 20 31 29 3b 0a 20 20 49 4e 53 45 52 54 20 49  , 1);.  INSERT I
1990: 4e 54 4f 20 61 75 78 2e 70 31 20 56 41 4c 55 45  NTO aux.p1 VALUE
19a0: 53 28 32 2c 20 32 29 3b 0a 20 20 49 4e 53 45 52  S(2, 2);.  INSER
19b0: 54 20 49 4e 54 4f 20 61 75 78 2e 63 31 20 56 41  T INTO aux.c1 VA
19c0: 4c 55 45 53 28 4e 55 4c 4c 2c 20 32 29 3b 0a 20  LUES(NULL, 2);. 
19d0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 61 75   CREATE TABLE au
19e0: 78 2e 63 32 28 78 20 49 4e 54 45 47 45 52 20 50  x.c2(x INTEGER P
19f0: 52 49 4d 41 52 59 20 4b 45 59 2c 20 79 20 52 45  RIMARY KEY, y RE
1a00: 46 45 52 45 4e 43 45 53 20 63 31 28 61 29 29 3b  FERENCES c1(a));
1a10: 0a 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  .}..do_execsql_t
1a20: 65 73 74 20 38 2e 32 20 7b 0a 20 20 41 4c 54 45  est 8.2 {.  ALTE
1a30: 52 20 54 41 42 4c 45 20 61 75 78 2e 70 31 20 52  R TABLE aux.p1 R
1a40: 45 4e 41 4d 45 20 54 4f 20 70 70 70 3b 0a 7d 0a  ENAME TO ppp;.}.
1a50: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
1a60: 20 38 2e 32 20 7b 0a 20 20 49 4e 53 45 52 54 20   8.2 {.  INSERT 
1a70: 49 4e 54 4f 20 61 75 78 2e 63 31 20 56 41 4c 55  INTO aux.c1 VALU
1a80: 45 53 28 4e 55 4c 4c 2c 20 31 29 3b 0a 20 20 53  ES(NULL, 1);.  S
1a90: 45 4c 45 43 54 20 73 71 6c 20 46 52 4f 4d 20 61  ELECT sql FROM a
1aa0: 75 78 2e 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  ux.sqlite_master
1ab0: 20 57 48 45 52 45 20 6e 61 6d 65 20 3d 20 27 63   WHERE name = 'c
1ac0: 31 27 3b 0a 7d 20 7b 7b 43 52 45 41 54 45 20 54  1';.} {{CREATE T
1ad0: 41 42 4c 45 20 63 31 28 78 20 49 4e 54 45 47 45  ABLE c1(x INTEGE
1ae0: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 79  R PRIMARY KEY, y
1af0: 20 52 45 46 45 52 45 4e 43 45 53 20 22 70 70 70   REFERENCES "ppp
1b00: 22 28 61 29 29 7d 7d 0a 0a 72 65 73 65 74 5f 64  "(a))}}..reset_d
1b10: 62 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  b.do_execsql_tes
1b20: 74 20 39 2e 30 20 7b 0a 20 20 43 52 45 41 54 45  t 9.0 {.  CREATE
1b30: 20 54 41 42 4c 45 20 74 31 28 61 2c 20 62 2c 20   TABLE t1(a, b, 
1b40: 63 29 3b 0a 20 20 43 52 45 41 54 45 20 56 49 45  c);.  CREATE VIE
1b50: 57 20 76 31 20 41 53 20 53 45 4c 45 43 54 20 2a  W v1 AS SELECT *
1b60: 20 46 52 4f 4d 20 74 32 3b 0a 7d 0a 64 6f 5f 63   FROM t2;.}.do_c
1b70: 61 74 63 68 73 71 6c 5f 74 65 73 74 20 39 2e 31  atchsql_test 9.1
1b80: 20 7b 0a 20 20 41 4c 54 45 52 20 54 41 42 4c 45   {.  ALTER TABLE
1b90: 20 74 31 20 52 45 4e 41 4d 45 20 54 4f 20 74 33   t1 RENAME TO t3
1ba0: 3b 0a 7d 20 7b 31 20 7b 65 72 72 6f 72 20 69 6e  ;.} {1 {error in
1bb0: 20 76 69 65 77 20 76 31 3a 20 6e 6f 20 73 75 63   view v1: no suc
1bc0: 68 20 74 61 62 6c 65 3a 20 6d 61 69 6e 2e 74 32  h table: main.t2
1bd0: 7d 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  }}.do_execsql_te
1be0: 73 74 20 39 2e 32 20 7b 0a 20 20 44 52 4f 50 20  st 9.2 {.  DROP 
1bf0: 56 49 45 57 20 76 31 3b 0a 20 20 43 52 45 41 54  VIEW v1;.  CREAT
1c00: 45 20 54 52 49 47 47 45 52 20 74 72 20 41 46 54  E TRIGGER tr AFT
1c10: 45 52 20 49 4e 53 45 52 54 20 4f 4e 20 74 31 20  ER INSERT ON t1 
1c20: 42 45 47 49 4e 0a 20 20 20 20 49 4e 53 45 52 54  BEGIN.    INSERT
1c30: 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28   INTO t2 VALUES(
1c40: 6e 65 77 2e 61 29 3b 0a 20 20 45 4e 44 3b 0a 7d  new.a);.  END;.}
1c50: 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65 73  .do_catchsql_tes
1c60: 74 20 39 2e 33 20 7b 0a 20 20 41 4c 54 45 52 20  t 9.3 {.  ALTER 
1c70: 54 41 42 4c 45 20 74 31 20 52 45 4e 41 4d 45 20  TABLE t1 RENAME 
1c80: 54 4f 20 74 33 3b 0a 7d 20 7b 31 20 7b 65 72 72  TO t3;.} {1 {err
1c90: 6f 72 20 69 6e 20 74 72 69 67 67 65 72 20 74 72  or in trigger tr
1ca0: 3a 20 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a  : no such table:
1cb0: 20 6d 61 69 6e 2e 74 32 7d 7d 0a 0a 66 6f 72 63   main.t2}}..forc
1cc0: 65 64 65 6c 65 74 65 20 74 65 73 74 2e 64 62 32  edelete test.db2
1cd0: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
1ce0: 20 39 2e 34 20 7b 0a 20 20 44 52 4f 50 20 54 52   9.4 {.  DROP TR
1cf0: 49 47 47 45 52 20 74 72 3b 0a 0a 20 20 41 54 54  IGGER tr;..  ATT
1d00: 41 43 48 20 27 74 65 73 74 2e 64 62 32 27 20 41  ACH 'test.db2' A
1d10: 53 20 61 75 78 3b 0a 20 20 43 52 45 41 54 45 20  S aux;.  CREATE 
1d20: 54 52 49 47 47 45 52 20 74 72 20 41 46 54 45 52  TRIGGER tr AFTER
1d30: 20 49 4e 53 45 52 54 20 4f 4e 20 74 31 20 57 48   INSERT ON t1 WH
1d40: 45 4e 20 6e 65 77 2e 61 20 49 53 20 4e 55 4c 4c  EN new.a IS NULL
1d50: 20 42 45 47 49 4e 20 53 45 4c 45 43 54 20 31 2c   BEGIN SELECT 1,
1d60: 20 32 2c 20 33 3b 20 45 4e 44 3b 0a 0a 20 20 43   2, 3; END;..  C
1d70: 52 45 41 54 45 20 54 41 42 4c 45 20 61 75 78 2e  REATE TABLE aux.
1d80: 74 31 28 78 29 3b 0a 20 20 43 52 45 41 54 45 20  t1(x);.  CREATE 
1d90: 54 45 4d 50 20 54 52 49 47 47 45 52 20 74 72 20  TEMP TRIGGER tr 
1da0: 41 46 54 45 52 20 49 4e 53 45 52 54 20 4f 4e 20  AFTER INSERT ON 
1db0: 61 75 78 2e 74 31 20 42 45 47 49 4e 20 53 45 4c  aux.t1 BEGIN SEL
1dc0: 45 43 54 20 31 2c 20 32 2c 20 33 3b 20 45 4e 44  ECT 1, 2, 3; END
1dd0: 3b 0a 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  ;.}.do_execsql_t
1de0: 65 73 74 20 39 2e 35 20 7b 0a 20 20 41 4c 54 45  est 9.5 {.  ALTE
1df0: 52 20 54 41 42 4c 45 20 6d 61 69 6e 2e 74 31 20  R TABLE main.t1 
1e00: 52 45 4e 41 4d 45 20 54 4f 20 74 33 3b 0a 7d 0a  RENAME TO t3;.}.
1e10: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
1e20: 39 2e 36 20 7b 0a 20 20 53 45 4c 45 43 54 20 73  9.6 {.  SELECT s
1e30: 71 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74  ql FROM sqlite_t
1e40: 65 6d 70 5f 6d 61 73 74 65 72 3b 0a 20 20 53 45  emp_master;.  SE
1e50: 4c 45 43 54 20 73 71 6c 20 46 52 4f 4d 20 73 71  LECT sql FROM sq
1e60: 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52  lite_master WHER
1e70: 45 20 74 79 70 65 3d 27 74 72 69 67 67 65 72 27  E type='trigger'
1e80: 3b 0a 7d 20 7b 0a 20 20 7b 43 52 45 41 54 45 20  ;.} {.  {CREATE 
1e90: 54 52 49 47 47 45 52 20 74 72 20 41 46 54 45 52  TRIGGER tr AFTER
1ea0: 20 49 4e 53 45 52 54 20 4f 4e 20 61 75 78 2e 74   INSERT ON aux.t
1eb0: 31 20 42 45 47 49 4e 20 53 45 4c 45 43 54 20 31  1 BEGIN SELECT 1
1ec0: 2c 20 32 2c 20 33 3b 20 45 4e 44 7d 0a 20 20 7b  , 2, 3; END}.  {
1ed0: 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74  CREATE TRIGGER t
1ee0: 72 20 41 46 54 45 52 20 49 4e 53 45 52 54 20 4f  r AFTER INSERT O
1ef0: 4e 20 22 74 33 22 20 57 48 45 4e 20 6e 65 77 2e  N "t3" WHEN new.
1f00: 61 20 49 53 20 4e 55 4c 4c 20 42 45 47 49 4e 20  a IS NULL BEGIN 
1f10: 53 45 4c 45 43 54 20 31 2c 20 32 2c 20 33 3b 20  SELECT 1, 2, 3; 
1f20: 45 4e 44 7d 0a 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d  END}.}..#-------
1f30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1f40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1f50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1f60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1f70: 2d 2d 0a 72 65 73 65 74 5f 64 62 0a 69 66 63 61  --.reset_db.ifca
1f80: 70 61 62 6c 65 20 66 74 73 35 20 7b 0a 20 20 64  pable fts5 {.  d
1f90: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 31  o_execsql_test 1
1fa0: 30 2e 30 20 7b 0a 20 20 20 20 43 52 45 41 54 45  0.0 {.    CREATE
1fb0: 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 66   VIRTUAL TABLE f
1fc0: 66 66 20 55 53 49 4e 47 20 66 74 73 35 28 78 2c  ff USING fts5(x,
1fd0: 20 79 2c 20 7a 29 3b 0a 20 20 7d 0a 0a 20 20 64   y, z);.  }..  d
1fe0: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 31  o_execsql_test 1
1ff0: 30 2e 31 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b  0.1 {.    BEGIN;
2000: 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e  .      INSERT IN
2010: 54 4f 20 66 66 66 20 56 41 4c 55 45 53 28 27 61  TO fff VALUES('a
2020: 27 2c 20 27 62 27 2c 20 27 63 27 29 3b 0a 20 20  ', 'b', 'c');.  
2030: 20 20 20 20 41 4c 54 45 52 20 54 41 42 4c 45 20      ALTER TABLE 
2040: 66 66 66 20 52 45 4e 41 4d 45 20 54 4f 20 67 67  fff RENAME TO gg
2050: 67 3b 0a 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20  g;.    COMMIT;. 
2060: 20 7d 0a 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c   }..  do_execsql
2070: 5f 74 65 73 74 20 31 30 2e 32 20 7b 0a 20 20 20  _test 10.2 {.   
2080: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 67   SELECT * FROM g
2090: 67 67 3b 0a 20 20 7d 20 7b 61 20 62 20 63 7d 0a  gg;.  } {a b c}.
20a0: 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  }..#------------
20b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
20c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
20d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
20e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 72 65  -------------.re
20f0: 73 65 74 5f 64 62 0a 66 6f 72 63 65 64 65 6c 65  set_db.forcedele
2100: 74 65 20 74 65 73 74 2e 64 62 32 0a 64 62 20 66  te test.db2.db f
2110: 75 6e 63 20 74 72 69 67 67 65 72 20 74 72 69 67  unc trigger trig
2120: 67 65 72 0a 73 65 74 20 3a 3a 74 72 69 67 67 65  ger.set ::trigge
2130: 72 20 5b 6c 69 73 74 5d 0a 70 72 6f 63 20 74 72  r [list].proc tr
2140: 69 67 67 65 72 20 7b 61 72 67 73 7d 20 7b 0a 20  igger {args} {. 
2150: 20 6c 61 70 70 65 6e 64 20 3a 3a 74 72 69 67 67   lappend ::trigg
2160: 65 72 20 24 61 72 67 73 0a 7d 0a 64 6f 5f 65 78  er $args.}.do_ex
2170: 65 63 73 71 6c 5f 74 65 73 74 20 31 31 2e 30 20  ecsql_test 11.0 
2180: 7b 0a 20 20 41 54 54 41 43 48 20 27 74 65 73 74  {.  ATTACH 'test
2190: 2e 64 62 32 27 20 41 53 20 61 75 78 3b 0a 20 20  .db2' AS aux;.  
21a0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 61 75 78  CREATE TABLE aux
21b0: 2e 74 31 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20  .t1(a, b, c);.  
21c0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 6d 61 69  CREATE TABLE mai
21d0: 6e 2e 74 31 28 61 2c 20 62 2c 20 63 29 3b 0a 20  n.t1(a, b, c);. 
21e0: 20 43 52 45 41 54 45 20 54 45 4d 50 20 54 52 49   CREATE TEMP TRI
21f0: 47 47 45 52 20 74 72 20 41 46 54 45 52 20 49 4e  GGER tr AFTER IN
2200: 53 45 52 54 20 4f 4e 20 61 75 78 2e 74 31 20 42  SERT ON aux.t1 B
2210: 45 47 49 4e 0a 20 20 20 20 53 45 4c 45 43 54 20  EGIN.    SELECT 
2220: 74 72 69 67 67 65 72 28 6e 65 77 2e 61 2c 20 6e  trigger(new.a, n
2230: 65 77 2e 62 2c 20 6e 65 77 2e 63 29 3b 0a 20 20  ew.b, new.c);.  
2240: 45 4e 44 3b 0a 7d 0a 0a 64 6f 5f 65 78 65 63 73  END;.}..do_execs
2250: 71 6c 5f 74 65 73 74 20 31 31 2e 31 20 7b 0a 20  ql_test 11.1 {. 
2260: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 6d 61 69   INSERT INTO mai
2270: 6e 2e 74 31 20 56 41 4c 55 45 53 28 31 2c 20 32  n.t1 VALUES(1, 2
2280: 2c 20 33 29 3b 0a 20 20 49 4e 53 45 52 54 20 49  , 3);.  INSERT I
2290: 4e 54 4f 20 61 75 78 2e 74 31 20 56 41 4c 55 45  NTO aux.t1 VALUE
22a0: 53 28 34 2c 20 35 2c 20 36 29 3b 0a 7d 0a 64 6f  S(4, 5, 6);.}.do
22b0: 5f 74 65 73 74 20 31 31 2e 32 20 7b 20 73 65 74  _test 11.2 { set
22c0: 20 3a 3a 74 72 69 67 67 65 72 20 7d 20 7b 7b 34   ::trigger } {{4
22d0: 20 35 20 36 7d 7d 0a 0a 64 6f 5f 65 78 65 63 73   5 6}}..do_execs
22e0: 71 6c 5f 74 65 73 74 20 31 31 2e 33 20 7b 0a 20  ql_test 11.3 {. 
22f0: 20 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20 74 62   SELECT name, tb
2300: 6c 5f 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  l_name FROM sqli
2310: 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 3b 0a  te_temp_master;.
2320: 7d 20 7b 74 72 20 74 31 7d 0a 0a 64 6f 5f 65 78  } {tr t1}..do_ex
2330: 65 63 73 71 6c 5f 74 65 73 74 20 31 31 2e 34 20  ecsql_test 11.4 
2340: 7b 0a 20 20 41 4c 54 45 52 20 54 41 42 4c 45 20  {.  ALTER TABLE 
2350: 6d 61 69 6e 2e 74 31 20 52 45 4e 41 4d 45 20 54  main.t1 RENAME T
2360: 4f 20 74 32 3b 0a 20 20 53 45 4c 45 43 54 20 6e  O t2;.  SELECT n
2370: 61 6d 65 2c 20 74 62 6c 5f 6e 61 6d 65 20 46 52  ame, tbl_name FR
2380: 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  OM sqlite_temp_m
2390: 61 73 74 65 72 3b 0a 7d 20 7b 74 72 20 74 31 7d  aster;.} {tr t1}
23a0: 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  ..do_execsql_tes
23b0: 74 20 31 31 2e 35 20 7b 0a 20 20 41 4c 54 45 52  t 11.5 {.  ALTER
23c0: 20 54 41 42 4c 45 20 61 75 78 2e 74 31 20 52 45   TABLE aux.t1 RE
23d0: 4e 41 4d 45 20 54 4f 20 74 32 3b 0a 20 20 53 45  NAME TO t2;.  SE
23e0: 4c 45 43 54 20 6e 61 6d 65 2c 20 74 62 6c 5f 6e  LECT name, tbl_n
23f0: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
2400: 74 65 6d 70 5f 6d 61 73 74 65 72 3b 0a 7d 20 7b  temp_master;.} {
2410: 74 72 20 74 32 7d 0a 0a 64 6f 5f 65 78 65 63 73  tr t2}..do_execs
2420: 71 6c 5f 74 65 73 74 20 31 31 2e 36 20 7b 0a 20  ql_test 11.6 {. 
2430: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 61 75 78   INSERT INTO aux
2440: 2e 74 32 20 56 41 4c 55 45 53 28 37 2c 20 38 2c  .t2 VALUES(7, 8,
2450: 20 39 29 3b 0a 7d 0a 64 6f 5f 74 65 73 74 20 31   9);.}.do_test 1
2460: 31 2e 37 20 7b 20 73 65 74 20 3a 3a 74 72 69 67  1.7 { set ::trig
2470: 67 65 72 20 7d 20 7b 7b 34 20 35 20 36 7d 20 7b  ger } {{4 5 6} {
2480: 37 20 38 20 39 7d 7d 0a 0a 23 2d 2d 2d 2d 2d 2d  7 8 9}}..#------
2490: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
24a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
24b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
24c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
24d0: 2d 2d 2d 0a 72 65 73 65 74 5f 64 62 0a 64 6f 5f  ---.reset_db.do_
24e0: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 31 32 2e  execsql_test 12.
24f0: 30 20 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42  0 {.  CREATE TAB
2500: 4c 45 20 74 31 28 61 29 3b 0a 20 20 43 52 45 41  LE t1(a);.  CREA
2510: 54 45 20 54 41 42 4c 45 20 74 32 28 77 29 3b 0a  TE TABLE t2(w);.
2520: 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52    CREATE TRIGGER
2530: 20 74 65 6d 70 2e 72 31 20 41 46 54 45 52 20 49   temp.r1 AFTER I
2540: 4e 53 45 52 54 20 4f 4e 20 6d 61 69 6e 2e 74 32  NSERT ON main.t2
2550: 20 42 45 47 49 4e 0a 20 20 20 20 49 4e 53 45 52   BEGIN.    INSER
2560: 54 20 49 4e 54 4f 20 74 31 28 61 29 20 56 41 4c  T INTO t1(a) VAL
2570: 55 45 53 28 6e 65 77 2e 77 29 3b 0a 20 20 45 4e  UES(new.w);.  EN
2580: 44 3b 0a 20 20 43 52 45 41 54 45 20 54 45 4d 50  D;.  CREATE TEMP
2590: 20 54 41 42 4c 45 20 74 32 28 78 29 3b 0a 7d 0a   TABLE t2(x);.}.
25a0: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
25b0: 20 31 32 2e 31 20 7b 0a 20 20 41 4c 54 45 52 20   12.1 {.  ALTER 
25c0: 54 41 42 4c 45 20 6d 61 69 6e 2e 74 32 20 52 45  TABLE main.t2 RE
25d0: 4e 41 4d 45 20 54 4f 20 74 33 3b 0a 7d 0a 0a 64  NAME TO t3;.}..d
25e0: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 31  o_execsql_test 1
25f0: 32 2e 32 20 7b 0a 20 20 49 4e 53 45 52 54 20 49  2.2 {.  INSERT I
2600: 4e 54 4f 20 74 33 20 56 41 4c 55 45 53 28 27 57  NTO t3 VALUES('W
2610: 57 57 27 29 3b 0a 20 20 53 45 4c 45 43 54 20 2a  WW');.  SELECT *
2620: 20 46 52 4f 4d 20 74 31 3b 0a 7d 20 7b 57 57 57   FROM t1;.} {WWW
2630: 7d 0a 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  }...#-----------
2640: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2650: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2660: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2670: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 72  --------------.r
2680: 65 73 65 74 5f 64 62 0a 64 6f 5f 65 78 65 63 73  eset_db.do_execs
2690: 71 6c 5f 74 65 73 74 20 31 33 2e 30 20 7b 0a 20  ql_test 13.0 {. 
26a0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
26b0: 28 78 2c 20 79 29 3b 0a 20 20 43 52 45 41 54 45  (x, y);.  CREATE
26c0: 20 54 41 42 4c 45 20 74 32 28 61 2c 20 62 29 3b   TABLE t2(a, b);
26d0: 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  .  CREATE TABLE 
26e0: 6c 6f 67 28 63 29 3b 0a 20 20 43 52 45 41 54 45  log(c);.  CREATE
26f0: 20 54 52 49 47 47 45 52 20 74 72 31 20 41 46 54   TRIGGER tr1 AFT
2700: 45 52 20 49 4e 53 45 52 54 20 4f 4e 20 74 31 20  ER INSERT ON t1 
2710: 42 45 47 49 4e 0a 20 20 20 20 49 4e 53 45 52 54  BEGIN.    INSERT
2720: 20 49 4e 54 4f 20 6c 6f 67 20 53 45 4c 45 43 54   INTO log SELECT
2730: 20 79 20 46 52 4f 4d 20 74 31 2c 20 74 32 3b 0a   y FROM t1, t2;.
2740: 20 20 45 4e 44 3b 0a 7d 0a 0a 64 6f 5f 65 78 65    END;.}..do_exe
2750: 63 73 71 6c 5f 74 65 73 74 20 31 33 2e 31 20 7b  csql_test 13.1 {
2760: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
2770: 31 20 56 41 4c 55 45 53 28 31 2c 20 32 29 3b 0a  1 VALUES(1, 2);.
2780: 7d 0a 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74  }..do_catchsql_t
2790: 65 73 74 20 31 33 2e 32 20 7b 0a 20 20 41 4c 54  est 13.2 {.  ALT
27a0: 45 52 20 54 41 42 4c 45 20 74 32 20 52 45 4e 41  ER TABLE t2 RENA
27b0: 4d 45 20 62 20 54 4f 20 79 3b 0a 7d 20 7b 31 20  ME b TO y;.} {1 
27c0: 7b 65 72 72 6f 72 20 69 6e 20 74 72 69 67 67 65  {error in trigge
27d0: 72 20 74 72 31 20 61 66 74 65 72 20 72 65 6e 61  r tr1 after rena
27e0: 6d 65 3a 20 61 6d 62 69 67 75 6f 75 73 20 63 6f  me: ambiguous co
27f0: 6c 75 6d 6e 20 6e 61 6d 65 3a 20 79 7d 7d 0a 0a  lumn name: y}}..
2800: 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  #---------------
2810: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2820: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2830: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2840: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 72 65 73 65 74  ----------.reset
2850: 5f 64 62 0a 0a 69 66 63 61 70 61 62 6c 65 20 72  _db..ifcapable r
2860: 74 72 65 65 20 7b 0a 20 20 64 6f 5f 65 78 65 63  tree {.  do_exec
2870: 73 71 6c 5f 74 65 73 74 20 31 34 2e 30 20 7b 0a  sql_test 14.0 {.
2880: 20 20 20 20 43 52 45 41 54 45 20 56 49 52 54 55      CREATE VIRTU
2890: 41 4c 20 54 41 42 4c 45 20 72 74 20 55 53 49 4e  AL TABLE rt USIN
28a0: 47 20 72 74 72 65 65 28 69 64 2c 20 6d 69 6e 78  G rtree(id, minx
28b0: 2c 20 6d 61 78 78 2c 20 6d 69 6e 79 2c 20 6d 61  , maxx, miny, ma
28c0: 78 79 29 3b 0a 0a 20 20 20 20 43 52 45 41 54 45  xy);..    CREATE
28d0: 20 54 41 42 4c 45 20 22 6d 79 74 61 62 6c 65 22   TABLE "mytable"
28e0: 20 28 20 22 66 69 64 22 20 49 4e 54 45 47 45 52   ( "fid" INTEGER
28f0: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 22 67   PRIMARY KEY, "g
2900: 65 6f 6d 22 20 42 4c 4f 42 29 3b 0a 0a 20 20 20  eom" BLOB);..   
2910: 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20   CREATE TRIGGER 
2920: 74 72 31 20 41 46 54 45 52 20 55 50 44 41 54 45  tr1 AFTER UPDATE
2930: 20 4f 46 20 22 67 65 6f 6d 22 20 4f 4e 20 22 6d   OF "geom" ON "m
2940: 79 74 61 62 6c 65 22 20 0a 20 20 20 20 20 20 20  ytable" .       
2950: 20 20 20 57 48 45 4e 20 4f 4c 44 2e 22 66 69 64     WHEN OLD."fid
2960: 22 20 3d 20 4e 45 57 2e 22 66 69 64 22 20 41 4e  " = NEW."fid" AN
2970: 44 20 4e 45 57 2e 22 67 65 6f 6d 22 20 49 53 20  D NEW."geom" IS 
2980: 4e 55 4c 4c 20 42 45 47 49 4e 20 0a 20 20 20 20  NULL BEGIN .    
2990: 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 72 74    DELETE FROM rt
29a0: 20 57 48 45 52 45 20 69 64 20 3d 20 4f 4c 44 2e   WHERE id = OLD.
29b0: 22 66 69 64 22 3b 20 0a 20 20 20 20 45 4e 44 3b  "fid"; .    END;
29c0: 0a 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ..    INSERT INT
29d0: 4f 20 6d 79 74 61 62 6c 65 20 56 41 4c 55 45 53  O mytable VALUES
29e0: 28 31 2c 20 58 27 61 62 63 64 27 29 3b 0a 20 20  (1, X'abcd');.  
29f0: 7d 0a 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f  }..  do_execsql_
2a00: 74 65 73 74 20 31 34 2e 31 20 7b 0a 20 20 20 20  test 14.1 {.    
2a10: 55 50 44 41 54 45 20 6d 79 74 61 62 6c 65 20 53  UPDATE mytable S
2a20: 45 54 20 67 65 6f 6d 20 3d 20 58 27 31 32 33 34  ET geom = X'1234
2a30: 27 0a 20 20 7d 0a 0a 20 20 64 6f 5f 65 78 65 63  '.  }..  do_exec
2a40: 73 71 6c 5f 74 65 73 74 20 31 34 2e 32 20 7b 0a  sql_test 14.2 {.
2a50: 20 20 20 20 41 4c 54 45 52 20 54 41 42 4c 45 20      ALTER TABLE 
2a60: 6d 79 74 61 62 6c 65 20 52 45 4e 41 4d 45 20 54  mytable RENAME T
2a70: 4f 20 6d 79 74 61 62 6c 65 5f 72 65 6e 61 6d 65  O mytable_rename
2a80: 64 3b 0a 20 20 7d 0a 0a 20 20 64 6f 5f 65 78 65  d;.  }..  do_exe
2a90: 63 73 71 6c 5f 74 65 73 74 20 31 34 2e 33 20 7b  csql_test 14.3 {
2aa0: 0a 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47  .    CREATE TRIG
2ab0: 47 45 52 20 74 72 32 20 41 46 54 45 52 20 49 4e  GER tr2 AFTER IN
2ac0: 53 45 52 54 20 4f 4e 20 6d 79 74 61 62 6c 65 5f  SERT ON mytable_
2ad0: 72 65 6e 61 6d 65 64 20 42 45 47 49 4e 0a 20 20  renamed BEGIN.  
2ae0: 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20      DELETE FROM 
2af0: 72 74 20 57 48 45 52 45 20 69 64 3d 28 53 45 4c  rt WHERE id=(SEL
2b00: 45 43 54 20 6d 69 6e 28 69 64 29 20 46 52 4f 4d  ECT min(id) FROM
2b10: 20 72 74 29 3b 0a 20 20 20 20 45 4e 44 3b 0a 20   rt);.    END;. 
2b20: 20 7d 0a 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c   }..  do_execsql
2b30: 5f 74 65 73 74 20 31 34 2e 34 20 7b 0a 20 20 20  _test 14.4 {.   
2b40: 20 41 4c 54 45 52 20 54 41 42 4c 45 20 6d 79 74   ALTER TABLE myt
2b50: 61 62 6c 65 5f 72 65 6e 61 6d 65 64 20 52 45 4e  able_renamed REN
2b60: 41 4d 45 20 54 4f 20 6d 79 74 61 62 6c 65 32 3b  AME TO mytable2;
2b70: 0a 20 20 7d 0a 7d 0a 0a 72 65 73 65 74 5f 64 62  .  }.}..reset_db
2b80: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
2b90: 20 31 34 2e 35 20 7b 0a 20 20 43 52 45 41 54 45   14.5 {.  CREATE
2ba0: 20 54 41 42 4c 45 20 74 31 28 61 2c 20 62 2c 20   TABLE t1(a, b, 
2bb0: 63 29 3b 0a 20 20 43 52 45 41 54 45 20 56 49 45  c);.  CREATE VIE
2bc0: 57 20 76 31 20 41 53 20 53 45 4c 45 43 54 20 2a  W v1 AS SELECT *
2bd0: 20 46 52 4f 4d 20 74 31 3b 0a 20 20 43 52 45 41   FROM t1;.  CREA
2be0: 54 45 20 54 52 49 47 47 45 52 20 78 79 7a 20 41  TE TRIGGER xyz A
2bf0: 46 54 45 52 20 49 4e 53 45 52 54 20 4f 4e 20 74  FTER INSERT ON t
2c00: 31 20 42 45 47 49 4e 0a 20 20 20 20 53 45 4c 45  1 BEGIN.    SELE
2c10: 43 54 20 61 2c 20 62 20 46 52 4f 4d 20 76 31 3b  CT a, b FROM v1;
2c20: 0a 20 20 45 4e 44 3b 0a 7d 0a 64 6f 5f 65 78 65  .  END;.}.do_exe
2c30: 63 73 71 6c 5f 74 65 73 74 20 31 34 2e 36 20 7b  csql_test 14.6 {
2c40: 0a 20 20 41 4c 54 45 52 20 54 41 42 4c 45 20 74  .  ALTER TABLE t
2c50: 31 20 52 45 4e 41 4d 45 20 54 4f 20 74 74 31 3b  1 RENAME TO tt1;
2c60: 0a 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .}..#-----------
2c70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2c80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2c90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2ca0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 72  --------------.r
2cb0: 65 73 65 74 5f 64 62 0a 64 6f 5f 65 78 65 63 73  eset_db.do_execs
2cc0: 71 6c 5f 74 65 73 74 20 31 35 2e 30 20 7b 0a 20  ql_test 15.0 {. 
2cd0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
2ce0: 28 61 20 69 6e 74 65 67 65 72 20 4e 4f 54 20 4e  (a integer NOT N
2cf0: 55 4c 4c 20 50 52 49 4d 41 52 59 20 4b 45 59 29  ULL PRIMARY KEY)
2d00: 3b 0a 20 20 43 52 45 41 54 45 20 56 49 45 57 20  ;.  CREATE VIEW 
2d10: 76 31 20 41 53 20 53 45 4c 45 43 54 20 61 20 46  v1 AS SELECT a F
2d20: 52 4f 4d 20 74 31 3b 0a 20 20 43 52 45 41 54 45  ROM t1;.  CREATE
2d30: 20 54 52 49 47 47 45 52 20 74 72 31 20 49 4e 53   TRIGGER tr1 INS
2d40: 54 45 41 44 20 4f 46 20 49 4e 53 45 52 54 20 4f  TEAD OF INSERT O
2d50: 4e 20 76 31 20 42 45 47 49 4e 20 0a 20 20 20 20  N v1 BEGIN .    
2d60: 55 50 44 41 54 45 20 74 31 20 53 45 54 20 61 20  UPDATE t1 SET a 
2d70: 3d 20 4e 45 57 2e 61 3b 0a 20 20 45 4e 44 3b 0a  = NEW.a;.  END;.
2d80: 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52    CREATE TRIGGER
2d90: 20 74 72 32 20 49 4e 53 54 45 41 44 20 4f 46 20   tr2 INSTEAD OF 
2da0: 49 4e 53 45 52 54 20 4f 4e 20 76 31 20 42 45 47  INSERT ON v1 BEG
2db0: 49 4e 20 0a 20 20 20 20 53 45 4c 45 43 54 20 6e  IN .    SELECT n
2dc0: 65 77 2e 61 3b 0a 20 20 45 4e 44 3b 0a 20 20 43  ew.a;.  END;.  C
2dd0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 32 20 28  REATE TABLE t2 (
2de0: 62 29 3b 0a 7d 0a 0a 64 6f 5f 65 78 65 63 73 71  b);.}..do_execsq
2df0: 6c 5f 74 65 73 74 20 31 35 2e 31 20 7b 0a 20 20  l_test 15.1 {.  
2e00: 49 4e 53 45 52 54 20 49 4e 54 4f 20 76 31 20 56  INSERT INTO v1 V
2e10: 41 4c 55 45 53 28 31 29 3b 0a 20 20 41 4c 54 45  ALUES(1);.  ALTE
2e20: 52 20 54 41 42 4c 45 20 74 32 20 52 45 4e 41 4d  R TABLE t2 RENAM
2e30: 45 20 54 4f 20 74 33 3b 0a 7d 0a 0a 64 6f 5f 65  E TO t3;.}..do_e
2e40: 78 65 63 73 71 6c 5f 74 65 73 74 20 31 35 2e 32  xecsql_test 15.2
2e50: 20 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c   {.  CREATE TABL
2e60: 45 20 78 28 66 31 20 69 6e 74 65 67 65 72 20 4e  E x(f1 integer N
2e70: 4f 54 20 4e 55 4c 4c 29 3b 0a 20 20 43 52 45 41  OT NULL);.  CREA
2e80: 54 45 20 56 49 45 57 20 79 20 41 53 20 53 45 4c  TE VIEW y AS SEL
2e90: 45 43 54 20 66 31 20 41 53 20 66 31 20 46 52 4f  ECT f1 AS f1 FRO
2ea0: 4d 20 78 3b 0a 20 20 43 52 45 41 54 45 20 54 52  M x;.  CREATE TR
2eb0: 49 47 47 45 52 20 74 20 49 4e 53 54 45 41 44 20  IGGER t INSTEAD 
2ec0: 4f 46 20 55 50 44 41 54 45 20 4f 46 20 66 31 20  OF UPDATE OF f1 
2ed0: 4f 4e 20 79 20 42 45 47 49 4e 20 0a 20 20 20 20  ON y BEGIN .    
2ee0: 55 50 44 41 54 45 20 78 20 53 45 54 20 66 31 20  UPDATE x SET f1 
2ef0: 3d 20 4e 45 57 2e 66 31 3b 20 0a 20 20 45 4e 44  = NEW.f1; .  END
2f00: 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  ;.  CREATE TABLE
2f10: 20 7a 20 28 66 31 20 69 6e 74 65 67 65 72 20 4e   z (f1 integer N
2f20: 4f 54 20 4e 55 4c 4c 20 50 52 49 4d 41 52 59 20  OT NULL PRIMARY 
2f30: 4b 45 59 29 3b 0a 20 20 41 4c 54 45 52 20 54 41  KEY);.  ALTER TA
2f40: 42 4c 45 20 7a 20 52 45 4e 41 4d 45 20 54 4f 20  BLE z RENAME TO 
2f50: 7a 32 3b 0a 7d 0a 0a 64 6f 5f 65 78 65 63 73 71  z2;.}..do_execsq
2f60: 6c 5f 74 65 73 74 20 31 35 2e 33 20 7b 0a 20 20  l_test 15.3 {.  
2f70: 49 4e 53 45 52 54 20 49 4e 54 4f 20 78 20 56 41  INSERT INTO x VA
2f80: 4c 55 45 53 28 31 29 2c 20 28 32 29 2c 20 28 33  LUES(1), (2), (3
2f90: 29 3b 0a 20 20 41 4c 54 45 52 20 54 41 42 4c 45  );.  ALTER TABLE
2fa0: 20 78 20 52 45 4e 41 4d 45 20 66 31 20 54 4f 20   x RENAME f1 TO 
2fb0: 66 32 3b 0a 20 20 53 45 4c 45 43 54 20 2a 20 46  f2;.  SELECT * F
2fc0: 52 4f 4d 20 78 3b 0a 7d 20 7b 31 20 32 20 33 7d  ROM x;.} {1 2 3}
2fd0: 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  ..do_execsql_tes
2fe0: 74 20 31 35 2e 34 20 7b 0a 20 20 55 50 44 41 54  t 15.4 {.  UPDAT
2ff0: 45 20 79 20 53 45 54 20 66 31 20 3d 20 27 78 27  E y SET f1 = 'x'
3000: 20 57 48 45 52 45 20 66 31 20 3d 20 31 3b 0a 20   WHERE f1 = 1;. 
3010: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 78   SELECT * FROM x
3020: 3b 0a 7d 20 7b 78 20 78 20 78 7d 0a 0a 64 6f 5f  ;.} {x x x}..do_
3030: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 31 35 2e  execsql_test 15.
3040: 35 20 7b 0a 20 20 53 45 4c 45 43 54 20 73 71 6c  5 {.  SELECT sql
3050: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
3060: 74 65 72 20 57 48 45 52 45 20 6e 61 6d 65 20 3d  ter WHERE name =
3070: 20 27 79 27 3b 0a 7d 20 7b 7b 43 52 45 41 54 45   'y';.} {{CREATE
3080: 20 56 49 45 57 20 79 20 41 53 20 53 45 4c 45 43   VIEW y AS SELEC
3090: 54 20 66 32 20 41 53 20 66 31 20 46 52 4f 4d 20  T f2 AS f1 FROM 
30a0: 78 7d 7d 0a 0a 0a 66 69 6e 69 73 68 5f 74 65 73  x}}...finish_tes
30b0: 74 0a                                            t.