Annotation of embedaddon/sqlite3/test/e_dropview.test, revision 1.1

1.1     ! misho       1: # 2010 November 30
        !             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: #
        !            12: # This file implements tests to verify that the "testable statements" in 
        !            13: # the lang_dropview.html document are correct.
        !            14: #
        !            15: 
        !            16: set testdir [file dirname $argv0]
        !            17: source $testdir/tester.tcl
        !            18: set ::testprefix e_dropview
        !            19: 
        !            20: proc dropview_reopen_db {} {
        !            21:   db close
        !            22:   forcedelete test.db test.db2
        !            23:   sqlite3 db test.db
        !            24: 
        !            25:   db eval {
        !            26:     ATTACH 'test.db2' AS aux;
        !            27:     CREATE TABLE t1(a, b); 
        !            28:     INSERT INTO t1 VALUES('a main', 'b main');
        !            29:     CREATE VIEW v1 AS SELECT * FROM t1;
        !            30:     CREATE VIEW v2 AS SELECT * FROM t1;
        !            31: 
        !            32:     CREATE TEMP TABLE t1(a, b);
        !            33:     INSERT INTO temp.t1 VALUES('a temp', 'b temp');
        !            34:     CREATE VIEW temp.v1 AS SELECT * FROM t1;
        !            35: 
        !            36:     CREATE TABLE aux.t1(a, b);
        !            37:     INSERT INTO aux.t1 VALUES('a aux', 'b aux');
        !            38:     CREATE VIEW aux.v1 AS SELECT * FROM t1;
        !            39:     CREATE VIEW aux.v2 AS SELECT * FROM t1;
        !            40:     CREATE VIEW aux.v3 AS SELECT * FROM t1;
        !            41:   }
        !            42: }
        !            43: 
        !            44: proc list_all_views {{db db}} {
        !            45:   set res [list]
        !            46:   $db eval { PRAGMA database_list } {
        !            47:     set tbl "$name.sqlite_master"
        !            48:     if {$name == "temp"} { set tbl sqlite_temp_master }
        !            49: 
        !            50:     set sql "SELECT '$name.' || name FROM $tbl WHERE type = 'view'"
        !            51:     lappend res {*}[$db eval $sql]
        !            52:   }
        !            53:   set res
        !            54: }
        !            55: 
        !            56: proc list_all_data {{db db}} {
        !            57:   set res [list]
        !            58:   $db eval { PRAGMA database_list } {
        !            59:     set tbl "$name.sqlite_master"
        !            60:     if {$name == "temp"} { set tbl sqlite_temp_master }
        !            61: 
        !            62:     db eval "SELECT '$name.' || name AS x FROM $tbl WHERE type = 'table'" {
        !            63:       lappend res [list $x [db eval "SELECT * FROM $x"]]
        !            64:     }
        !            65:   }
        !            66:   set res
        !            67: }
        !            68: 
        !            69: proc do_dropview_tests {nm args} {
        !            70:   uplevel do_select_tests $nm $args
        !            71: }
        !            72: 
        !            73: # EVIDENCE-OF: R-53136-36436 -- syntax diagram drop-view-stmt
        !            74: #
        !            75: # All paths in the syntax diagram for DROP VIEW are tested by tests 1.*.
        !            76: #
        !            77: do_dropview_tests 1 -repair {
        !            78:   dropview_reopen_db
        !            79: } -tclquery {
        !            80:   list_all_views
        !            81: } {
        !            82:   1   "DROP VIEW v1"                  {main.v1 main.v2 aux.v1 aux.v2 aux.v3}
        !            83:   2   "DROP VIEW v2"                  {main.v1 temp.v1 aux.v1 aux.v2 aux.v3}
        !            84:   3   "DROP VIEW main.v1"             {main.v2 temp.v1 aux.v1 aux.v2 aux.v3}
        !            85:   4   "DROP VIEW main.v2"             {main.v1 temp.v1 aux.v1 aux.v2 aux.v3}
        !            86:   5   "DROP VIEW IF EXISTS v1"        {main.v1 main.v2 aux.v1 aux.v2 aux.v3}
        !            87:   6   "DROP VIEW IF EXISTS v2"        {main.v1 temp.v1 aux.v1 aux.v2 aux.v3}
        !            88:   7   "DROP VIEW IF EXISTS main.v1"   {main.v2 temp.v1 aux.v1 aux.v2 aux.v3}
        !            89:   8   "DROP VIEW IF EXISTS main.v2"   {main.v1 temp.v1 aux.v1 aux.v2 aux.v3}
        !            90: }
        !            91: 
        !            92: # EVIDENCE-OF: R-27002-52307 The DROP VIEW statement removes a view
        !            93: # created by the CREATE VIEW statement.
        !            94: #
        !            95: dropview_reopen_db
        !            96: do_execsql_test 2.1 {
        !            97:   CREATE VIEW "new view" AS SELECT * FROM t1 AS x, t1 AS y;
        !            98:   SELECT * FROM "new view";
        !            99: } {{a main} {b main} {a main} {b main}}
        !           100: do_execsql_test 2.2 {;
        !           101:   SELECT * FROM sqlite_master WHERE name = 'new view';
        !           102: } {
        !           103:   view {new view} {new view} 0 
        !           104:   {CREATE VIEW "new view" AS SELECT * FROM t1 AS x, t1 AS y}
        !           105: }
        !           106: do_execsql_test 2.3 {
        !           107:   DROP VIEW "new view";
        !           108:   SELECT * FROM sqlite_master WHERE name = 'new view';
        !           109: } {}
        !           110: do_catchsql_test 2.4 {
        !           111:   SELECT * FROM "new view"
        !           112: } {1 {no such table: new view}}
        !           113: 
        !           114: # EVIDENCE-OF: R-00359-41639 The view definition is removed from the
        !           115: # database schema, but no actual data in the underlying base tables is
        !           116: # modified.
        !           117: #
        !           118: #     For each view in the database, check that it can be queried. Then drop
        !           119: #     it. Check that it can no longer be queried and is no longer listed
        !           120: #     in any schema table. Then check that the contents of the db tables have 
        !           121: #     not changed
        !           122: #
        !           123: set databasedata [list_all_data]
        !           124: 
        !           125: do_execsql_test  3.1.0 { SELECT * FROM temp.v1 } {{a temp} {b temp}}
        !           126: do_execsql_test  3.1.1 { DROP VIEW temp.v1 } {}
        !           127: do_catchsql_test 3.1.2 { SELECT * FROM temp.v1 } {1 {no such table: temp.v1}}
        !           128: do_test          3.1.3 { list_all_views } {main.v1 main.v2 aux.v1 aux.v2 aux.v3}
        !           129: do_test          3.1.4 { list_all_data  } $databasedata
        !           130: 
        !           131: do_execsql_test  3.2.0 { SELECT * FROM v1 } {{a main} {b main}}
        !           132: do_execsql_test  3.2.1 { DROP VIEW v1 } {}
        !           133: do_catchsql_test 3.2.2 { SELECT * FROM main.v1 } {1 {no such table: main.v1}}
        !           134: do_test          3.2.3 { list_all_views } {main.v2 aux.v1 aux.v2 aux.v3}
        !           135: do_test          3.2.4 { list_all_data  } $databasedata
        !           136: 
        !           137: do_execsql_test  3.3.0 { SELECT * FROM v2 } {{a main} {b main}}
        !           138: do_execsql_test  3.3.1 { DROP VIEW v2 } {}
        !           139: do_catchsql_test 3.3.2 { SELECT * FROM main.v2 } {1 {no such table: main.v2}}
        !           140: do_test          3.3.3 { list_all_views } {aux.v1 aux.v2 aux.v3}
        !           141: do_test          3.3.4 { list_all_data  } $databasedata
        !           142: 
        !           143: do_execsql_test  3.4.0 { SELECT * FROM v1 } {{a aux} {b aux}}
        !           144: do_execsql_test  3.4.1 { DROP VIEW v1 } {}
        !           145: do_catchsql_test 3.4.2 { SELECT * FROM v1 } {1 {no such table: v1}}
        !           146: do_test          3.4.3 { list_all_views } {aux.v2 aux.v3}
        !           147: do_test          3.4.4 { list_all_data  } $databasedata
        !           148: 
        !           149: do_execsql_test  3.4.0 { SELECT * FROM aux.v2 } {{a aux} {b aux}}
        !           150: do_execsql_test  3.4.1 { DROP VIEW aux.v2 } {}
        !           151: do_catchsql_test 3.4.2 { SELECT * FROM aux.v2 } {1 {no such table: aux.v2}}
        !           152: do_test          3.4.3 { list_all_views } {aux.v3}
        !           153: do_test          3.4.4 { list_all_data  } $databasedata
        !           154: 
        !           155: do_execsql_test  3.5.0 { SELECT * FROM v3 } {{a aux} {b aux}}
        !           156: do_execsql_test  3.5.1 { DROP VIEW v3 } {}
        !           157: do_catchsql_test 3.5.2 { SELECT * FROM v3 } {1 {no such table: v3}}
        !           158: do_test          3.5.3 { list_all_views } {}
        !           159: do_test          3.5.4 { list_all_data  } $databasedata
        !           160: 
        !           161: # EVIDENCE-OF: R-25558-37487 If the specified view cannot be found and
        !           162: # the IF EXISTS clause is not present, it is an error.
        !           163: #
        !           164: do_dropview_tests 4 -repair {
        !           165:   dropview_reopen_db 
        !           166: } -errorformat {
        !           167:   no such view: %s
        !           168: } {
        !           169:   1   "DROP VIEW xx"                  xx
        !           170:   2   "DROP VIEW main.xx"             main.xx
        !           171:   3   "DROP VIEW temp.v2"             temp.v2
        !           172: }
        !           173: 
        !           174: # EVIDENCE-OF: R-07490-32536 If the specified view cannot be found and
        !           175: # an IF EXISTS clause is present in the DROP VIEW statement, then the
        !           176: # statement is a no-op.
        !           177: #
        !           178: do_dropview_tests 5 -repair {
        !           179:   dropview_reopen_db
        !           180: } -tclquery {
        !           181:   list_all_views
        !           182:   expr {[list_all_views] == "main.v1 main.v2 temp.v1 aux.v1 aux.v2 aux.v3"}
        !           183: } {
        !           184:   1    "DROP VIEW IF EXISTS xx"       1
        !           185:   2    "DROP VIEW IF EXISTS main.xx"  1
        !           186:   3    "DROP VIEW IF EXISTS temp.v2"  1
        !           187: }
        !           188: 
        !           189: 
        !           190: 
        !           191: 
        !           192: finish_test

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