mirror of
				https://github.com/sqlite/sqlite.git
				synced 2025-11-03 16:53:36 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			116 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			116 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
# 2001 October 12
 | 
						|
#
 | 
						|
# The author disclaims copyright to this source code.  In place of
 | 
						|
# a legal notice, here is a blessing:
 | 
						|
#
 | 
						|
#    May you do good and not evil.
 | 
						|
#    May you find forgiveness for yourself and forgive others.
 | 
						|
#    May you share freely, never taking more than you give.
 | 
						|
#
 | 
						|
#***********************************************************************
 | 
						|
# This file implements regression tests for SQLite library.  The
 | 
						|
# focus of this file is testing for correct handling of disk full
 | 
						|
# errors.
 | 
						|
# 
 | 
						|
# $Id: diskfull.test,v 1.8 2008/07/12 14:52:20 drh Exp $
 | 
						|
 | 
						|
set testdir [file dirname $argv0]
 | 
						|
source $testdir/tester.tcl
 | 
						|
 | 
						|
set sqlite_io_error_persist 0
 | 
						|
set sqlite_io_error_hit 0
 | 
						|
set sqlite_io_error_pending 0
 | 
						|
do_test diskfull-1.1 {
 | 
						|
  execsql {
 | 
						|
    CREATE TABLE t1(x);
 | 
						|
    INSERT INTO t1 VALUES(randstr(1000,1000));
 | 
						|
    INSERT INTO t1 SELECT * FROM t1;
 | 
						|
    INSERT INTO t1 SELECT * FROM t1;
 | 
						|
    INSERT INTO t1 SELECT * FROM t1;
 | 
						|
    INSERT INTO t1 SELECT * FROM t1;
 | 
						|
    CREATE INDEX t1i1 ON t1(x);
 | 
						|
    CREATE TABLE t2 AS SELECT x AS a, x AS b FROM t1;
 | 
						|
    CREATE INDEX t2i1 ON t2(b);
 | 
						|
  }
 | 
						|
} {}
 | 
						|
set sqlite_diskfull_pending 0
 | 
						|
integrity_check diskfull-1.2
 | 
						|
do_test diskfull-1.3 {
 | 
						|
  set sqlite_diskfull_pending 1
 | 
						|
  catchsql {
 | 
						|
    INSERT INTO t1 SELECT * FROM t1;
 | 
						|
  }
 | 
						|
} {1 {database or disk is full}}
 | 
						|
set sqlite_diskfull_pending 0
 | 
						|
integrity_check diskfull-1.4
 | 
						|
do_test diskfull-1.5 {
 | 
						|
  set sqlite_diskfull_pending 1
 | 
						|
  catchsql {
 | 
						|
    DELETE FROM t1;
 | 
						|
  }
 | 
						|
} {1 {database or disk is full}}
 | 
						|
set sqlite_diskfull_pending 0
 | 
						|
set sqlite_io_error_hit 0
 | 
						|
integrity_check diskfull-1.6
 | 
						|
 | 
						|
proc do_diskfull_test {prefix sql} {
 | 
						|
  set ::go 1
 | 
						|
  set ::sql $sql
 | 
						|
  set ::i 1
 | 
						|
  while {$::go} {
 | 
						|
    incr ::i
 | 
						|
    do_test ${prefix}.$::i.1 {
 | 
						|
      set ::sqlite_diskfull_pending $::i
 | 
						|
      set ::sqlite_diskfull 0
 | 
						|
      set r [catchsql $::sql]
 | 
						|
      if {!$::sqlite_diskfull} {
 | 
						|
        set r {1 {database or disk is full}}
 | 
						|
        set ::go 0
 | 
						|
      }
 | 
						|
      if {$r=="1 {disk I/O error}"} {
 | 
						|
        set r {1 {database or disk is full}}
 | 
						|
      }
 | 
						|
      set r
 | 
						|
    } {1 {database or disk is full}}
 | 
						|
    set ::sqlite_diskfull_pending 0
 | 
						|
    db close
 | 
						|
    sqlite3 db test.db
 | 
						|
    integrity_check ${prefix}.$::i.2
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
do_diskfull_test diskfull-2 VACUUM
 | 
						|
 | 
						|
# db close
 | 
						|
# file delete -force test.db
 | 
						|
# file delete -force test.db-journal
 | 
						|
# sqlite3 db test.db
 | 
						|
# 
 | 
						|
# do_test diskfull-3.1 {
 | 
						|
#   execsql {
 | 
						|
#     PRAGMA default_cache_size = 10;
 | 
						|
#     CREATE TABLE t3(a, b, UNIQUE(a, b));
 | 
						|
#     INSERT INTO t3 VALUES( randstr(100, 100), randstr(100, 100) );
 | 
						|
#     INSERT INTO t3 SELECT randstr(100, 100), randstr(100, 100) FROM t3;
 | 
						|
#     INSERT INTO t3 SELECT randstr(100, 100), randstr(100, 100) FROM t3;
 | 
						|
#     INSERT INTO t3 SELECT randstr(100, 100), randstr(100, 100) FROM t3;
 | 
						|
#     INSERT INTO t3 SELECT randstr(100, 100), randstr(100, 100) FROM t3;
 | 
						|
#     INSERT INTO t3 SELECT randstr(100, 100), randstr(100, 100) FROM t3;
 | 
						|
#     INSERT INTO t3 SELECT randstr(100, 100), randstr(100, 100) FROM t3;
 | 
						|
#     INSERT INTO t3 SELECT randstr(100, 100), randstr(100, 100) FROM t3;
 | 
						|
#     UPDATE t3 
 | 
						|
#     SET b = (SELECT a FROM t3 WHERE rowid = (SELECT max(rowid)-1 FROM t3))
 | 
						|
#     WHERE rowid = (SELECT max(rowid) FROM t3);
 | 
						|
#     PRAGMA cache_size;
 | 
						|
#   }
 | 
						|
# } {10}
 | 
						|
# 
 | 
						|
# do_diskfull_test diskfull-3.2 {
 | 
						|
#   BEGIN;
 | 
						|
#     INSERT INTO t3 VALUES( randstr(100, 100), randstr(100, 100) );
 | 
						|
#     UPDATE t3 SET a = b;
 | 
						|
#   COMMIT;
 | 
						|
# }
 | 
						|
 | 
						|
finish_test
 |