/ Hex Artifact Content
Login

Artifact 736e66fb5ec7b4fee58229aa3ada2f27ec58bc58c00edae4836890c3784c6783:


0000: 23 20 32 30 30 37 20 4a 75 6e 65 20 32 36 0a 23  # 2007 June 26.#
0010: 0a 23 20 54 68 65 20 61 75 74 68 6f 72 20 64 69  .# The author di
0020: 73 63 6c 61 69 6d 73 20 63 6f 70 79 72 69 67 68  sclaims copyrigh
0030: 74 20 74 6f 20 74 68 69 73 20 73 6f 75 72 63 65  t to this source
0040: 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63 65   code.  In place
0050: 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e 6f   of.# a legal no
0060: 74 69 63 65 2c 20 68 65 72 65 20 69 73 20 61 20  tice, here is a 
0070: 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20 20  blessing:.#.#   
0080: 20 4d 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64   May you do good
0090: 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 23   and not evil..#
00a0: 20 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64      May you find
00b0: 20 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72   forgiveness for
00c0: 20 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f   yourself and fo
00d0: 72 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 23 20  rgive others..# 
00e0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
00f0: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0100: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0110: 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23 2a 2a 2a  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 0a 23 20 54 68 69 73 20 66 69 6c 65  ****.# This file
0170: 20 69 6d 70 6c 65 6d 65 6e 74 73 20 72 65 67 72   implements regr
0180: 65 73 73 69 6f 6e 20 74 65 73 74 73 20 66 6f 72  ession tests for
0190: 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e   SQLite library.
01a0: 20 20 54 68 65 0a 23 20 66 6f 63 75 73 20 6f 66    The.# focus of
01b0: 20 74 68 69 73 20 66 69 6c 65 20 69 73 20 74 65   this file is te
01c0: 73 74 69 6e 67 20 74 68 65 20 41 4c 54 45 52 20  sting the ALTER 
01d0: 54 41 42 4c 45 20 2e 2e 2e 20 52 45 4e 41 4d 45  TABLE ... RENAME
01e0: 20 54 4f 0a 23 20 63 6f 6d 6d 61 6e 64 20 6f 6e   TO.# command on
01f0: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 2e   virtual tables.
0200: 0a 23 0a 23 20 24 49 64 3a 20 76 74 61 62 5f 61  .#.# $Id: vtab_a
0210: 6c 74 65 72 2e 74 65 73 74 2c 76 20 31 2e 33 20  lter.test,v 1.3 
0220: 32 30 30 37 2f 31 32 2f 31 33 20 32 31 3a 35 34  2007/12/13 21:54
0230: 3a 31 31 20 64 72 68 20 45 78 70 20 24 0a 0a 73  :11 drh Exp $..s
0240: 65 74 20 74 65 73 74 64 69 72 20 5b 66 69 6c 65  et testdir [file
0250: 20 64 69 72 6e 61 6d 65 20 24 61 72 67 76 30 5d   dirname $argv0]
0260: 0a 73 6f 75 72 63 65 20 24 74 65 73 74 64 69 72  .source $testdir
0270: 2f 74 65 73 74 65 72 2e 74 63 6c 0a 0a 69 66 63  /tester.tcl..ifc
0280: 61 70 61 62 6c 65 20 21 76 74 61 62 7c 7c 21 61  apable !vtab||!a
0290: 6c 74 65 72 74 61 62 6c 65 20 7b 0a 20 20 66 69  ltertable {.  fi
02a0: 6e 69 73 68 5f 74 65 73 74 0a 20 20 72 65 74 75  nish_test.  retu
02b0: 72 6e 0a 7d 0a 0a 23 20 52 65 67 69 73 74 65 72  rn.}..# Register
02c0: 20 74 68 65 20 65 63 68 6f 20 6d 6f 64 75 6c 65   the echo module
02d0: 2e 0a 23 0a 23 20 54 68 69 73 20 74 65 73 74 20  ..#.# This test 
02e0: 75 73 65 73 20 61 20 73 70 65 63 69 61 6c 20 66  uses a special f
02f0: 65 61 74 75 72 65 20 6f 66 20 74 68 65 20 65 63  eature of the ec
0300: 68 6f 20 6d 6f 64 75 6c 65 2e 20 49 66 20 74 68  ho module. If th
0310: 65 20 6e 61 6d 65 0a 23 20 6f 66 20 74 68 65 20  e name.# of the 
0320: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 73  virtual table is
0330: 20 61 20 70 72 65 66 69 78 20 6f 66 20 74 68 65   a prefix of the
0340: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 75 6e 64   name of the und
0350: 65 72 6c 79 69 6e 67 0a 23 20 72 65 61 6c 20 74  erlying.# real t
0360: 61 62 6c 65 20 28 66 6f 72 20 65 78 61 6d 70 6c  able (for exampl
0370: 65 20 69 66 20 74 68 65 20 76 2d 74 61 62 6c 65  e if the v-table
0380: 20 69 73 20 22 74 62 6c 22 20 61 6e 64 20 74 68   is "tbl" and th
0390: 65 20 72 65 61 6c 20 74 61 62 6c 65 0a 23 20 69  e real table.# i
03a0: 73 20 22 74 62 6c 5f 62 61 73 65 22 29 2c 20 74  s "tbl_base"), t
03b0: 68 65 6e 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  hen the name of 
03c0: 74 68 65 20 72 65 61 6c 20 74 61 62 6c 65 20 69  the real table i
03d0: 73 20 6d 6f 64 69 66 69 65 64 0a 23 20 77 68 65  s modified.# whe
03e0: 6e 20 61 6e 20 22 41 4c 54 45 52 20 54 41 42 4c  n an "ALTER TABL
03f0: 45 20 2e 2e 2e 20 52 45 4e 41 4d 45 20 54 4f 22  E ... RENAME TO"
0400: 20 69 73 20 65 78 65 63 75 74 65 64 20 6f 6e 20   is executed on 
0410: 74 68 65 20 76 2d 74 61 62 6c 65 2e 0a 23 20 46  the v-table..# F
0420: 6f 72 20 65 78 61 6d 70 6c 65 3a 0a 23 0a 23 20  or example:.#.# 
0430: 20 20 73 71 6c 69 74 65 3e 20 43 52 45 41 54 45    sqlite> CREATE
0440: 20 54 41 42 4c 45 20 74 31 5f 62 61 73 65 28 61   TABLE t1_base(a
0450: 2c 20 62 2c 20 63 29 3b 20 0a 23 20 20 20 73 71  , b, c); .#   sq
0460: 6c 69 74 65 3e 20 43 52 45 41 54 45 20 56 49 52  lite> CREATE VIR
0470: 54 55 41 4c 20 54 41 42 4c 45 20 74 31 20 55 53  TUAL TABLE t1 US
0480: 49 4e 47 28 74 31 5f 62 61 73 65 29 3b 0a 23 20  ING(t1_base);.# 
0490: 20 20 73 71 6c 69 74 65 3e 20 41 4c 54 45 52 20    sqlite> ALTER 
04a0: 54 41 42 4c 45 20 74 31 20 52 45 4e 41 4d 45 20  TABLE t1 RENAME 
04b0: 54 4f 20 74 32 3b 0a 23 20 20 20 73 71 6c 69 74  TO t2;.#   sqlit
04c0: 65 3e 20 53 45 4c 45 43 54 20 74 62 6c 5f 6e 61  e> SELECT tbl_na
04d0: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  me FROM sqlite_m
04e0: 61 73 74 65 72 3b 0a 23 20 20 20 74 32 5f 62 61  aster;.#   t2_ba
04f0: 73 65 0a 23 20 20 20 74 32 0a 23 0a 72 65 67 69  se.#   t2.#.regi
0500: 73 74 65 72 5f 65 63 68 6f 5f 6d 6f 64 75 6c 65  ster_echo_module
0510: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 6e 65 63   [sqlite3_connec
0520: 74 69 6f 6e 5f 70 6f 69 6e 74 65 72 20 64 62 5d  tion_pointer db]
0530: 0a 0a 0a 23 20 54 72 79 20 74 6f 20 72 65 6e 61  ...# Try to rena
0540: 6d 65 20 61 6e 20 65 63 68 6f 20 74 61 62 6c 65  me an echo table
0550: 2e 20 4d 61 6b 65 20 73 75 72 65 20 6e 6f 74 68  . Make sure noth
0560: 69 6e 67 20 74 65 72 72 69 62 6c 65 20 68 61 70  ing terrible hap
0570: 70 65 6e 73 2e 0a 23 0a 64 6f 5f 74 65 73 74 20  pens..#.do_test 
0580: 76 74 61 62 5f 61 6c 74 65 72 2d 31 2e 31 20 7b  vtab_alter-1.1 {
0590: 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 43 52 45  .  execsql { CRE
05a0: 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c 20  ATE TABLE t1(a, 
05b0: 62 20 56 41 52 43 48 41 52 2c 20 63 20 49 4e 54  b VARCHAR, c INT
05c0: 45 47 45 52 29 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f  EGER) }.} {}.do_
05d0: 74 65 73 74 20 76 74 61 62 5f 61 6c 74 65 72 2d  test vtab_alter-
05e0: 31 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  1.2 {.  execsql 
05f0: 7b 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c  { CREATE VIRTUAL
0600: 20 54 41 42 4c 45 20 74 31 65 63 68 6f 20 55 53   TABLE t1echo US
0610: 49 4e 47 20 65 63 68 6f 28 74 31 29 20 7d 0a 7d  ING echo(t1) }.}
0620: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 76 74 61 62   {}.do_test vtab
0630: 5f 61 6c 74 65 72 2d 31 2e 33 20 7b 0a 20 20 63  _alter-1.3 {.  c
0640: 61 74 63 68 73 71 6c 20 7b 20 53 45 4c 45 43 54  atchsql { SELECT
0650: 20 2a 20 46 52 4f 4d 20 74 31 65 63 68 6f 20 7d   * FROM t1echo }
0660: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
0670: 74 20 76 74 61 62 5f 61 6c 74 65 72 2d 31 2e 34  t vtab_alter-1.4
0680: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 41   {.  execsql { A
0690: 4c 54 45 52 20 54 41 42 4c 45 20 74 31 65 63 68  LTER TABLE t1ech
06a0: 6f 20 52 45 4e 41 4d 45 20 54 4f 20 6e 65 77 20  o RENAME TO new 
06b0: 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 76  }.} {}.do_test v
06c0: 74 61 62 5f 61 6c 74 65 72 2d 31 2e 35 20 7b 0a  tab_alter-1.5 {.
06d0: 20 20 63 61 74 63 68 73 71 6c 20 7b 20 53 45 4c    catchsql { SEL
06e0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 65 63 68  ECT * FROM t1ech
06f0: 6f 20 7d 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75 63  o }.} {1 {no suc
0700: 68 20 74 61 62 6c 65 3a 20 74 31 65 63 68 6f 7d  h table: t1echo}
0710: 7d 0a 64 6f 5f 74 65 73 74 20 76 74 61 62 5f 61  }.do_test vtab_a
0720: 6c 74 65 72 2d 31 2e 36 20 7b 0a 20 20 63 61 74  lter-1.6 {.  cat
0730: 63 68 73 71 6c 20 7b 20 53 45 4c 45 43 54 20 2a  chsql { SELECT *
0740: 20 46 52 4f 4d 20 6e 65 77 20 7d 0a 7d 20 7b 30   FROM new }.} {0
0750: 20 7b 7d 7d 0a 0a 23 20 54 72 79 20 74 6f 20 72   {}}..# Try to r
0760: 65 6e 61 6d 65 20 61 6e 20 65 63 68 6f 20 74 61  ename an echo ta
0770: 62 6c 65 20 74 68 61 74 20 72 65 6e 61 6d 65 73  ble that renames
0780: 20 69 74 73 20 62 61 73 65 20 74 61 62 6c 65 2e   its base table.
0790: 20 4d 61 6b 65 20 0a 23 20 73 75 72 65 20 6e 6f   Make .# sure no
07a0: 74 68 69 6e 67 20 74 65 72 72 69 62 6c 65 20 68  thing terrible h
07b0: 61 70 70 65 6e 73 2e 0a 23 0a 64 6f 5f 74 65 73  appens..#.do_tes
07c0: 74 20 76 74 61 62 5f 61 6c 74 65 72 2d 32 2e 31  t vtab_alter-2.1
07d0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 0a   {.  execsql { .
07e0: 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 6e      DROP TABLE n
07f0: 65 77 3b 0a 20 20 20 20 44 52 4f 50 20 54 41 42  ew;.    DROP TAB
0800: 4c 45 20 74 31 3b 0a 20 20 20 20 43 52 45 41 54  LE t1;.    CREAT
0810: 45 20 54 41 42 4c 45 20 74 31 5f 62 61 73 65 28  E TABLE t1_base(
0820: 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20 43 52  a, b, c);.    CR
0830: 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42  EATE VIRTUAL TAB
0840: 4c 45 20 74 31 20 55 53 49 4e 47 20 65 63 68 6f  LE t1 USING echo
0850: 28 27 2a 5f 62 61 73 65 27 29 3b 0a 20 20 7d 0a  ('*_base');.  }.
0860: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 76 74 61  } {}.do_test vta
0870: 62 5f 61 6c 74 65 72 2d 32 2e 32 20 7b 0a 20 20  b_alter-2.2 {.  
0880: 65 78 65 63 73 71 6c 20 7b 20 0a 20 20 20 20 49  execsql { .    I
0890: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 5f 62 61  NSERT INTO t1_ba
08a0: 73 65 20 56 41 4c 55 45 53 28 31 2c 20 32 2c 20  se VALUES(1, 2, 
08b0: 33 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  3);.    SELECT *
08c0: 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20   FROM t1;.  }.} 
08d0: 7b 31 20 32 20 33 7d 0a 64 6f 5f 74 65 73 74 20  {1 2 3}.do_test 
08e0: 76 74 61 62 5f 61 6c 74 65 72 2d 32 2e 33 20 7b  vtab_alter-2.3 {
08f0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 41 4c 54  .  execsql { ALT
0900: 45 52 20 54 41 42 4c 45 20 74 31 20 52 45 4e 41  ER TABLE t1 RENA
0910: 4d 45 20 54 4f 20 78 20 7d 0a 7d 20 7b 7d 0a 64  ME TO x }.} {}.d
0920: 6f 5f 74 65 73 74 20 76 74 61 62 5f 61 6c 74 65  o_test vtab_alte
0930: 72 2d 32 2e 34 20 7b 0a 20 20 65 78 65 63 73 71  r-2.4 {.  execsq
0940: 6c 20 7b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f  l { SELECT * FRO
0950: 4d 20 78 3b 20 7d 0a 7d 20 7b 31 20 32 20 33 7d  M x; }.} {1 2 3}
0960: 0a 64 6f 5f 74 65 73 74 20 76 74 61 62 5f 61 6c  .do_test vtab_al
0970: 74 65 72 2d 32 2e 35 20 7b 0a 20 20 65 78 65 63  ter-2.5 {.  exec
0980: 73 71 6c 20 7b 20 53 45 4c 45 43 54 20 2a 20 46  sql { SELECT * F
0990: 52 4f 4d 20 78 5f 62 61 73 65 3b 20 7d 0a 7d 20  ROM x_base; }.} 
09a0: 7b 31 20 32 20 33 7d 0a 0a 23 20 43 61 75 73 65  {1 2 3}..# Cause
09b0: 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 6f 63 63   an error to occ
09c0: 75 72 20 77 68 65 6e 20 74 68 65 20 65 63 68 6f  ur when the echo
09d0: 20 6d 6f 64 75 6c 65 20 72 65 6e 61 6d 65 73 20   module renames 
09e0: 69 74 73 0a 23 20 62 61 63 6b 69 6e 67 20 73 74  its.# backing st
09f0: 6f 72 65 20 74 61 62 6c 65 2e 0a 23 0a 64 6f 5f  ore table..#.do_
0a00: 74 65 73 74 20 76 74 61 62 5f 61 6c 74 65 72 2d  test vtab_alter-
0a10: 33 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  3.1 {.  execsql 
0a20: 20 7b 20 43 52 45 41 54 45 20 54 41 42 4c 45 20   { CREATE TABLE 
0a30: 79 5f 62 61 73 65 28 61 2c 20 62 2c 20 63 29 20  y_base(a, b, c) 
0a40: 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 20 41  }.  catchsql { A
0a50: 4c 54 45 52 20 54 41 42 4c 45 20 78 20 52 45 4e  LTER TABLE x REN
0a60: 41 4d 45 20 54 4f 20 79 20 7d 0a 7d 20 7b 31 20  AME TO y }.} {1 
0a70: 7b 53 51 4c 20 6c 6f 67 69 63 20 65 72 72 6f 72  {SQL logic error
0a80: 7d 7d 0a 64 6f 5f 74 65 73 74 20 76 74 61 62 5f  }}.do_test vtab_
0a90: 61 6c 74 65 72 2d 33 2e 32 20 7b 0a 20 20 65 78  alter-3.2 {.  ex
0aa0: 65 63 73 71 6c 20 20 7b 20 53 45 4c 45 43 54 20  ecsql  { SELECT 
0ab0: 2a 20 46 52 4f 4d 20 78 20 7d 0a 7d 20 7b 31 20  * FROM x }.} {1 
0ac0: 32 20 33 7d 0a 0a 66 69 6e 69 73 68 5f 74 65 73  2 3}..finish_tes
0ad0: 74 0a                                            t.