| OLD | NEW | 
 | (Empty) | 
|    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   file delete -force 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 |  | 
| OLD | NEW |