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

1.1     ! misho       1: # 2006 June 10
        !             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.
        !            12: #
        !            13: # $Id: vtab5.test,v 1.8 2008/07/12 14:52:21 drh Exp $
        !            14: 
        !            15: set testdir [file dirname $argv0]
        !            16: source $testdir/tester.tcl
        !            17: 
        !            18: ifcapable !vtab {
        !            19:   finish_test
        !            20:   return
        !            21: }
        !            22: 
        !            23: # The following tests - vtab5-1.* - ensure that an INSERT, DELETE or UPDATE
        !            24: # statement can be executed immediately after a CREATE or schema reload. The
        !            25: # point here is testing that the parser always calls xConnect() before the
        !            26: # schema of a virtual table is used.
        !            27: #
        !            28: register_echo_module [sqlite3_connection_pointer db]
        !            29: do_test vtab5-1.1 {
        !            30:   execsql {
        !            31:     CREATE TABLE treal(a VARCHAR(16), b INTEGER, c FLOAT);
        !            32:     INSERT INTO treal VALUES('a', 'b', 'c');
        !            33:     CREATE VIRTUAL TABLE techo USING echo(treal);
        !            34:   }
        !            35: } {}
        !            36: do_test vtab5.1.2 {
        !            37:   execsql {
        !            38:     SELECT * FROM techo;
        !            39:   }
        !            40: } {a b c}
        !            41: do_test vtab5.1.3 {
        !            42:   db close
        !            43:   sqlite3 db test.db
        !            44:   register_echo_module [sqlite3_connection_pointer db]
        !            45:   execsql {
        !            46:     INSERT INTO techo VALUES('c', 'd', 'e');
        !            47:     SELECT * FROM techo;
        !            48:   }
        !            49: } {a b c c d e}
        !            50: do_test vtab5.1.4 {
        !            51:   db close
        !            52:   sqlite3 db test.db
        !            53:   register_echo_module [sqlite3_connection_pointer db]
        !            54:   execsql {
        !            55:     UPDATE techo SET a = 10;
        !            56:     SELECT * FROM techo;
        !            57:   }
        !            58: } {10 b c 10 d e}
        !            59: do_test vtab5.1.5 {
        !            60:   db close
        !            61:   sqlite3 db test.db
        !            62:   register_echo_module [sqlite3_connection_pointer db]
        !            63:   execsql {
        !            64:     DELETE FROM techo WHERE b > 'c';
        !            65:     SELECT * FROM techo;
        !            66:   }
        !            67: } {10 b c}
        !            68: do_test vtab5.1.X {
        !            69:   execsql {
        !            70:     DROP TABLE techo;
        !            71:     DROP TABLE treal;
        !            72:   }
        !            73: } {}
        !            74: 
        !            75: # The following tests - vtab5-2.* - ensure that collation sequences
        !            76: # assigned to virtual table columns via the "CREATE TABLE" statement 
        !            77: # passed to sqlite3_declare_vtab() are used correctly.
        !            78: #
        !            79: do_test vtab5.2.1 {
        !            80:   execsql {
        !            81:     CREATE TABLE strings(str COLLATE NOCASE);
        !            82:     INSERT INTO strings VALUES('abc1');
        !            83:     INSERT INTO strings VALUES('Abc3');
        !            84:     INSERT INTO strings VALUES('ABc2');
        !            85:     INSERT INTO strings VALUES('aBc4');
        !            86:     SELECT str FROM strings ORDER BY 1;
        !            87:   }
        !            88: } {abc1 ABc2 Abc3 aBc4}
        !            89: do_test vtab5.2.2 {
        !            90:   execsql {
        !            91:     CREATE VIRTUAL TABLE echo_strings USING echo(strings);
        !            92:     SELECT str FROM echo_strings ORDER BY 1;
        !            93:   }
        !            94: } {abc1 ABc2 Abc3 aBc4}
        !            95: do_test vtab5.2.3 {
        !            96:   execsql {
        !            97:     SELECT str||'' FROM echo_strings ORDER BY 1;
        !            98:   }
        !            99: } {ABc2 Abc3 aBc4 abc1}
        !           100: 
        !           101: # Test that it is impossible to create a triggger on a virtual table.
        !           102: #
        !           103: ifcapable trigger {
        !           104:   do_test vtab5.3.1 {
        !           105:     catchsql {
        !           106:       CREATE TRIGGER trig INSTEAD OF INSERT ON echo_strings BEGIN
        !           107:         SELECT 1, 2, 3;
        !           108:       END;
        !           109:     }
        !           110:   } {1 {cannot create triggers on virtual tables}}
        !           111:   do_test vtab5.3.2 {
        !           112:     catchsql {
        !           113:       CREATE TRIGGER trig AFTER INSERT ON echo_strings BEGIN
        !           114:         SELECT 1, 2, 3;
        !           115:       END;
        !           116:     }
        !           117:   } {1 {cannot create triggers on virtual tables}}
        !           118:   do_test vtab5.3.2 {
        !           119:     catchsql {
        !           120:       CREATE TRIGGER trig BEFORE INSERT ON echo_strings BEGIN
        !           121:         SELECT 1, 2, 3;
        !           122:       END;
        !           123:     }
        !           124:   } {1 {cannot create triggers on virtual tables}}
        !           125: }
        !           126: 
        !           127: # Test that it is impossible to create an index on a virtual table.
        !           128: #
        !           129: do_test vtab5.4.1 {
        !           130:   catchsql {
        !           131:     CREATE INDEX echo_strings_i ON echo_strings(str);
        !           132:   }
        !           133: } {1 {virtual tables may not be indexed}}
        !           134: 
        !           135: # Test that it is impossible to add a column to a virtual table.
        !           136: #
        !           137: ifcapable altertable {
        !           138:   do_test vtab5.4.2 {
        !           139:     catchsql {
        !           140:       ALTER TABLE echo_strings ADD COLUMN col2;
        !           141:     }
        !           142:   } {1 {virtual tables may not be altered}}
        !           143: }
        !           144: 
        !           145: # Test that it is impossible to rename a virtual table.
        !           146: # UPDATE: It is now possible.
        !           147: #
        !           148: # do_test vtab5.4.3 {
        !           149: #   catchsql {
        !           150: #     ALTER TABLE echo_strings RENAME TO echo_strings2;
        !           151: #   }
        !           152: # } {1 {virtual tables may not be altered}}
        !           153: 
        !           154: finish_test

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