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

1.1     ! misho       1: # 2007 May 02
        !             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 that it is OK to create new tables
        !            13: # and indices while creating existing tables and indices.
        !            14: #
        !            15: # $Id: createtab.test,v 1.3 2007/09/12 17:01:45 danielk1977 Exp $
        !            16: 
        !            17: set testdir [file dirname $argv0]
        !            18: source $testdir/tester.tcl
        !            19: 
        !            20: ifcapable autovacuum {
        !            21:   set upperBound 2
        !            22: } else {
        !            23:   set upperBound 0
        !            24: }
        !            25: 
        !            26: # Run these tests for all possible values of autovacuum.
        !            27: #
        !            28: for {set av 0} {$av<=$upperBound} {incr av} {
        !            29:   db close
        !            30:   forcedelete test.db test.db-journal
        !            31:   sqlite3 db test.db
        !            32: 
        !            33:   # Create a table that spans multiple pages.  It is important
        !            34:   # that part of the database be in pages beyond the root page.
        !            35:   #
        !            36:   do_test createtab-$av.1 {
        !            37:     execsql "PRAGMA auto_vacuum=$av"
        !            38:     execsql {
        !            39:       PRAGMA page_size=1024;
        !            40:       CREATE TABLE t1(x INTEGER PRIMARY KEY, y);
        !            41:       INSERT INTO t1 VALUES(1, hex(randomblob(200)));
        !            42:       INSERT INTO t1 VALUES(2, hex(randomblob(200)));
        !            43:       INSERT INTO t1 VALUES(3, hex(randomblob(200)));
        !            44:       INSERT INTO t1 VALUES(4, hex(randomblob(200)));
        !            45:       SELECT count(*) FROM t1;
        !            46:     }
        !            47:   } {4}
        !            48: 
        !            49:   set isUtf16 0
        !            50:   ifcapable utf16 { 
        !            51:     set isUtf16 [expr {[execsql {PRAGMA encoding}] != "UTF-8"}]
        !            52:   }
        !            53: 
        !            54:   do_test createtab-$av.2 {
        !            55:     file size test.db
        !            56:   } [expr {1024*(4+($av!=0)+(${isUtf16}*2))}]
        !            57:   
        !            58:   # Start reading the table
        !            59:   #
        !            60:   do_test createtab-$av.3 {
        !            61:     set STMT [sqlite3_prepare db {SELECT x FROM t1} -1 TAIL]
        !            62:     sqlite3_step $STMT
        !            63:   } {SQLITE_ROW}
        !            64:   do_test createtab-$av.4 {
        !            65:     sqlite3_column_int $STMT 0
        !            66:   } {1}
        !            67:   
        !            68:   # While still reading the table, create a new table.
        !            69:   #
        !            70:   do_test createtab-$av.5 {
        !            71:     execsql {
        !            72:       CREATE TABLE t2(a,b);
        !            73:       INSERT INTO t2 VALUES(1,2);
        !            74:       SELECT * FROM t2;
        !            75:     }
        !            76:   } {1 2}
        !            77:   
        !            78:   # Continue reading the original table.
        !            79:   #
        !            80:   do_test createtab-$av.6 {
        !            81:     sqlite3_column_int $STMT 0
        !            82:   } {1}
        !            83:   do_test createtab-$av.7 {
        !            84:     sqlite3_step $STMT
        !            85:   } {SQLITE_ROW}
        !            86:   do_test createtab-$av.8 {
        !            87:     sqlite3_column_int $STMT 0
        !            88:   } {2}
        !            89:   
        !            90:   # Do another cycle of creating a new database table while contining
        !            91:   # to read the original table.
        !            92:   #
        !            93:   do_test createtab-$av.11 {
        !            94:     execsql {
        !            95:       CREATE TABLE t3(a,b);
        !            96:       INSERT INTO t3 VALUES(4,5);
        !            97:       SELECT * FROM t3;
        !            98:     }
        !            99:   } {4 5}
        !           100:   do_test createtab-$av.12 {
        !           101:     sqlite3_column_int $STMT 0
        !           102:   } {2}
        !           103:   do_test createtab-$av.13 {
        !           104:     sqlite3_step $STMT
        !           105:   } {SQLITE_ROW}
        !           106:   do_test createtab-$av.14 {
        !           107:     sqlite3_column_int $STMT 0
        !           108:   } {3}
        !           109:   
        !           110:   # One more cycle.
        !           111:   #
        !           112:   do_test createtab-$av.21 {
        !           113:     execsql {
        !           114:       CREATE TABLE t4(a,b);
        !           115:       INSERT INTO t4 VALUES('abc','xyz');
        !           116:       SELECT * FROM t4;
        !           117:     }
        !           118:   } {abc xyz}
        !           119:   do_test createtab-$av.22 {
        !           120:     sqlite3_column_int $STMT 0
        !           121:   } {3}
        !           122:   do_test createtab-$av.23 {
        !           123:     sqlite3_step $STMT
        !           124:   } {SQLITE_ROW}
        !           125:   do_test createtab-$av.24 {
        !           126:     sqlite3_column_int $STMT 0
        !           127:   } {4}
        !           128:   
        !           129:   # Finish reading.  Do an integrity check on the database.
        !           130:   #
        !           131:   do_test createtab-$av.30 {
        !           132:     sqlite3_step $STMT
        !           133:   } {SQLITE_DONE}
        !           134:   do_test createtab-$av.31 {
        !           135:     sqlite3_finalize $STMT
        !           136:   } {SQLITE_OK}
        !           137:   do_test createtab-$av.32 {
        !           138:     execsql {
        !           139:       SELECT name FROM sqlite_master WHERE type='table' ORDER BY 1
        !           140:     }
        !           141:   } {t1 t2 t3 t4}
        !           142:   integrity_check createtab-$av.40
        !           143: 
        !           144: }
        !           145:   
        !           146: finish_test

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