File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / sqlite3 / test / createtab.test
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 17:04:16 2012 UTC (12 years, 4 months ago) by misho
Branches: sqlite3, MAIN
CVS tags: v3_7_10, HEAD
sqlite3

    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.1.1.1 2012/02/21 17:04:16 misho 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>