Annotation of embedaddon/sqlite3/test/e_dropview.test, revision 1.1.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>