1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/os/persistentdata/persistentstorage/sqlite3api/TEST/TclScript/createtab.test Fri Jun 15 03:10:57 2012 +0200
1.3 @@ -0,0 +1,146 @@
1.4 +# 2007 May 02
1.5 +#
1.6 +# The author disclaims copyright to this source code. In place of
1.7 +# a legal notice, here is a blessing:
1.8 +#
1.9 +# May you do good and not evil.
1.10 +# May you find forgiveness for yourself and forgive others.
1.11 +# May you share freely, never taking more than you give.
1.12 +#
1.13 +#***********************************************************************
1.14 +# This file implements regression tests for SQLite library. The
1.15 +# focus of this file is testing that it is OK to create new tables
1.16 +# and indices while creating existing tables and indices.
1.17 +#
1.18 +# $Id: createtab.test,v 1.3 2007/09/12 17:01:45 danielk1977 Exp $
1.19 +
1.20 +set testdir [file dirname $argv0]
1.21 +source $testdir/tester.tcl
1.22 +
1.23 +ifcapable autovacuum {
1.24 + set upperBound 2
1.25 +} else {
1.26 + set upperBound 0
1.27 +}
1.28 +
1.29 +# Run these tests for all possible values of autovacuum.
1.30 +#
1.31 +for {set av 0} {$av<=$upperBound} {incr av} {
1.32 + db close
1.33 + file delete -force test.db test.db-journal
1.34 + sqlite3 db test.db
1.35 +
1.36 + # Create a table that spans multiple pages. It is important
1.37 + # that part of the database be in pages beyond the root page.
1.38 + #
1.39 + do_test createtab-$av.1 {
1.40 + execsql "PRAGMA auto_vacuum=$av"
1.41 + execsql {
1.42 + PRAGMA page_size=1024;
1.43 + CREATE TABLE t1(x INTEGER PRIMARY KEY, y);
1.44 + INSERT INTO t1 VALUES(1, hex(randomblob(200)));
1.45 + INSERT INTO t1 VALUES(2, hex(randomblob(200)));
1.46 + INSERT INTO t1 VALUES(3, hex(randomblob(200)));
1.47 + INSERT INTO t1 VALUES(4, hex(randomblob(200)));
1.48 + SELECT count(*) FROM t1;
1.49 + }
1.50 + } {4}
1.51 +
1.52 + set isUtf16 0
1.53 + ifcapable utf16 {
1.54 + set isUtf16 [expr {[execsql {PRAGMA encoding}] != "UTF-8"}]
1.55 + }
1.56 +
1.57 + do_test createtab-$av.2 {
1.58 + file size test.db
1.59 + } [expr {1024*(4+($av!=0)+(${isUtf16}*2))}]
1.60 +
1.61 + # Start reading the table
1.62 + #
1.63 + do_test createtab-$av.3 {
1.64 + set STMT [sqlite3_prepare db {SELECT x FROM t1} -1 TAIL]
1.65 + sqlite3_step $STMT
1.66 + } {SQLITE_ROW}
1.67 + do_test createtab-$av.4 {
1.68 + sqlite3_column_int $STMT 0
1.69 + } {1}
1.70 +
1.71 + # While still reading the table, create a new table.
1.72 + #
1.73 + do_test createtab-$av.5 {
1.74 + execsql {
1.75 + CREATE TABLE t2(a,b);
1.76 + INSERT INTO t2 VALUES(1,2);
1.77 + SELECT * FROM t2;
1.78 + }
1.79 + } {1 2}
1.80 +
1.81 + # Continue reading the original table.
1.82 + #
1.83 + do_test createtab-$av.6 {
1.84 + sqlite3_column_int $STMT 0
1.85 + } {1}
1.86 + do_test createtab-$av.7 {
1.87 + sqlite3_step $STMT
1.88 + } {SQLITE_ROW}
1.89 + do_test createtab-$av.8 {
1.90 + sqlite3_column_int $STMT 0
1.91 + } {2}
1.92 +
1.93 + # Do another cycle of creating a new database table while contining
1.94 + # to read the original table.
1.95 + #
1.96 + do_test createtab-$av.11 {
1.97 + execsql {
1.98 + CREATE TABLE t3(a,b);
1.99 + INSERT INTO t3 VALUES(4,5);
1.100 + SELECT * FROM t3;
1.101 + }
1.102 + } {4 5}
1.103 + do_test createtab-$av.12 {
1.104 + sqlite3_column_int $STMT 0
1.105 + } {2}
1.106 + do_test createtab-$av.13 {
1.107 + sqlite3_step $STMT
1.108 + } {SQLITE_ROW}
1.109 + do_test createtab-$av.14 {
1.110 + sqlite3_column_int $STMT 0
1.111 + } {3}
1.112 +
1.113 + # One more cycle.
1.114 + #
1.115 + do_test createtab-$av.21 {
1.116 + execsql {
1.117 + CREATE TABLE t4(a,b);
1.118 + INSERT INTO t4 VALUES('abc','xyz');
1.119 + SELECT * FROM t4;
1.120 + }
1.121 + } {abc xyz}
1.122 + do_test createtab-$av.22 {
1.123 + sqlite3_column_int $STMT 0
1.124 + } {3}
1.125 + do_test createtab-$av.23 {
1.126 + sqlite3_step $STMT
1.127 + } {SQLITE_ROW}
1.128 + do_test createtab-$av.24 {
1.129 + sqlite3_column_int $STMT 0
1.130 + } {4}
1.131 +
1.132 + # Finish reading. Do an integrity check on the database.
1.133 + #
1.134 + do_test createtab-$av.30 {
1.135 + sqlite3_step $STMT
1.136 + } {SQLITE_DONE}
1.137 + do_test createtab-$av.31 {
1.138 + sqlite3_finalize $STMT
1.139 + } {SQLITE_OK}
1.140 + do_test createtab-$av.32 {
1.141 + execsql {
1.142 + SELECT name FROM sqlite_master WHERE type='table' ORDER BY 1
1.143 + }
1.144 + } {t1 t2 t3 t4}
1.145 + integrity_check createtab-$av.40
1.146 +
1.147 +}
1.148 +
1.149 +finish_test