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>