File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / sqlite3 / test / vtab_alter.test
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 17:04:16 2012 UTC (12 years, 10 months ago) by misho
Branches: sqlite3, MAIN
CVS tags: v3_7_10, HEAD
sqlite3

    1: # 2007 June 26
    2: #
    3: # The author disclaims copyright to this source code.  In place of
    4: # a legal notice, here is a blessing:
    5: #
    6: #    May you do good and not evil.
    7: #    May you find forgiveness for yourself and forgive others.
    8: #    May you share freely, never taking more than you give.
    9: #
   10: #***********************************************************************
   11: # This file implements regression tests for SQLite library.  The
   12: # focus of this file is testing the ALTER TABLE ... RENAME TO
   13: # command on virtual tables.
   14: #
   15: # $Id: vtab_alter.test,v 1.1.1.1 2012/02/21 17:04:16 misho Exp $
   16: 
   17: set testdir [file dirname $argv0]
   18: source $testdir/tester.tcl
   19: 
   20: ifcapable !vtab||!altertable {
   21:   finish_test
   22:   return
   23: }
   24: 
   25: # Register the echo module.
   26: #
   27: # This test uses a special feature of the echo module. If the name
   28: # of the virtual table is a prefix of the name of the underlying
   29: # real table (for example if the v-table is "tbl" and the real table
   30: # is "tbl_base"), then the name of the real table is modified
   31: # when an "ALTER TABLE ... RENAME TO" is executed on the v-table.
   32: # For example:
   33: #
   34: #   sqlite> CREATE TABLE t1_base(a, b, c); 
   35: #   sqlite> CREATE VIRTUAL TABLE t1 USING(t1_base);
   36: #   sqlite> ALTER TABLE t1 RENAME TO t2;
   37: #   sqlite> SELECT tbl_name FROM sqlite_master;
   38: #   t2_base
   39: #   t2
   40: #
   41: register_echo_module [sqlite3_connection_pointer db]
   42: 
   43: 
   44: # Try to rename an echo table. Make sure nothing terrible happens.
   45: #
   46: do_test vtab_alter-1.1 {
   47:   execsql { CREATE TABLE t1(a, b VARCHAR, c INTEGER) }
   48: } {}
   49: do_test vtab_alter-1.2 {
   50:   execsql { CREATE VIRTUAL TABLE t1echo USING echo(t1) }
   51: } {}
   52: do_test vtab_alter-1.3 {
   53:   catchsql { SELECT * FROM t1echo }
   54: } {0 {}}
   55: do_test vtab_alter-1.4 {
   56:   execsql { ALTER TABLE t1echo RENAME TO new }
   57: } {}
   58: do_test vtab_alter-1.5 {
   59:   catchsql { SELECT * FROM t1echo }
   60: } {1 {no such table: t1echo}}
   61: do_test vtab_alter-1.6 {
   62:   catchsql { SELECT * FROM new }
   63: } {0 {}}
   64: 
   65: # Try to rename an echo table that renames its base table. Make 
   66: # sure nothing terrible happens.
   67: #
   68: do_test vtab_alter-2.1 {
   69:   execsql { 
   70:     DROP TABLE new;
   71:     DROP TABLE t1;
   72:     CREATE TABLE t1_base(a, b, c);
   73:     CREATE VIRTUAL TABLE t1 USING echo('*_base');
   74:   }
   75: } {}
   76: do_test vtab_alter-2.2 {
   77:   execsql { 
   78:     INSERT INTO t1_base VALUES(1, 2, 3);
   79:     SELECT * FROM t1;
   80:   }
   81: } {1 2 3}
   82: do_test vtab_alter-2.3 {
   83:   execsql { ALTER TABLE t1 RENAME TO x }
   84: } {}
   85: do_test vtab_alter-2.4 {
   86:   execsql { SELECT * FROM x; }
   87: } {1 2 3}
   88: do_test vtab_alter-2.5 {
   89:   execsql { SELECT * FROM x_base; }
   90: } {1 2 3}
   91: 
   92: # Cause an error to occur when the echo module renames its
   93: # backing store table.
   94: #
   95: do_test vtab_alter-3.1 {
   96:   execsql  { CREATE TABLE y_base(a, b, c) }
   97:   catchsql { ALTER TABLE x RENAME TO y }
   98: } {1 {SQL logic error or missing database}}
   99: do_test vtab_alter-3.2 {
  100:   execsql  { SELECT * FROM x }
  101: } {1 2 3}
  102: 
  103: finish_test

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>