modernc.org/cc@v1.0.1/v2/testdata/_sqlite/test/createtab.test (about)

     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