File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / sqlite3 / test / ioerr4.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, 10 months ago) by misho
Branches: sqlite3, MAIN
CVS tags: v3_7_10, HEAD
sqlite3

    1: # 2007 December 19
    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 for correct handling of I/O errors
   13: # during incremental vacuum with a shared cache.
   14: #
   15: # $Id: ioerr4.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: # This test requires both shared cache and incremental vacuum.
   21: #
   22: ifcapable {!shared_cache || !autovacuum} {
   23:   finish_test
   24:   return
   25: }
   26: 
   27: # Enable shared cache mode and incremental vacuum.
   28: #
   29: do_test ioerr4-1.1 {
   30:   db close
   31:   set ::enable_shared_cache [sqlite3_enable_shared_cache 1]
   32: } {0}
   33: do_test ioerr4-1.2 {
   34:   forcedelete test.db test.db-journal
   35:   sqlite3 db test.db
   36:   sqlite3 db2 test.db
   37:   db eval {
   38:     PRAGMA auto_vacuum=INCREMENTAL;
   39:     CREATE TABLE a(i INTEGER, b BLOB);
   40:   }
   41:   db2 eval {
   42:     SELECT name FROM sqlite_master
   43:   }
   44: } {a}
   45: do_test ioerr4-1.3 {
   46:   db eval {
   47:     PRAGMA auto_vacuum;
   48:   }
   49: } {2}
   50: 
   51: # Insert and delete many records in order to put lots of pages
   52: # on the freelist.
   53: #
   54: do_test ioerr4-1.4 {
   55:   db eval {
   56:     INSERT INTO a VALUES(1, zeroblob(2000));
   57:     INSERT INTO a VALUES(2, zeroblob(2000));
   58:     INSERT INTO a SELECT i+2, zeroblob(2000) FROM a;
   59:     INSERT INTO a SELECT i+4, zeroblob(2000) FROM a;
   60:     INSERT INTO a SELECT i+8, zeroblob(2000) FROM a;
   61:     INSERT INTO a SELECT i+16, zeroblob(2000) FROM a;
   62:     SELECT count(*) FROM a;
   63:   }
   64: } {32}
   65: do_test ioerr4-1.5 {
   66:   db eval {
   67:     PRAGMA freelist_count
   68:   }
   69: } {0}
   70: do_test ioerr4-1.6 {
   71:   db eval {
   72:     DELETE FROM a;
   73:     PRAGMA freelist_count;
   74:   }
   75: } {64}
   76: 
   77: # Set up for an I/O error on incremental vacuum
   78: # with two connections on shared cache.
   79: #
   80: db close
   81: db2 close
   82: forcecopy test.db test.db-bu
   83: do_ioerr_test ioerr4-2 -tclprep {
   84:   catch {db2 close}
   85:   db close
   86:   forcedelete test.db test.db-journal
   87:   forcecopy test.db-bu test.db
   88:   sqlite3_enable_shared_cache 1
   89:   set ::DB [sqlite3 db test.db; sqlite3_connection_pointer db]
   90:   db eval {PRAGMA auto_vacuum=INCREMENTAL}
   91:   sqlite3 db2 test.db
   92: } -tclbody {
   93:   db eval {PRAGMA incremental_vacuum(5)}
   94: }
   95: 
   96: db2 close
   97: forcedelete test.db-bu
   98: sqlite3_enable_shared_cache $::enable_shared_cache
   99: 
  100: finish_test

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>