aebf413d9a
Added pragma support for controlling proxy file locking Added file control access to last errno and proxy locking Added support for TMPDIR environment variable Extended unit tests to cover new proxy locking pragmas and file control features (CVS 5934) FossilOrigin-Name: b9bc36d3d5e35821ef69c0881a84c0afed253c9e
103 lines
2.3 KiB
Plaintext
103 lines
2.3 KiB
Plaintext
# 2005 October 3
|
|
#
|
|
# 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.
|
|
#
|
|
# This file implements tests the ability of the library to open
|
|
# many different databases at the same time without leaking memory.
|
|
#
|
|
# $Id: manydb.test,v 1.4 2008/11/21 00:10:35 aswift Exp $
|
|
|
|
set testdir [file dirname $argv0]
|
|
source $testdir/tester.tcl
|
|
|
|
set N 300
|
|
# if we're using proxy locks, we use 5 filedescriptors for a db
|
|
# that is open and in the middle of writing changes, normally
|
|
# sqlite uses 3 (proxy locking adds the conch and the local lock)
|
|
set using_proxy 0
|
|
foreach {name value} [array get env SQLITE_FORCE_PROXY_LOCKING] {
|
|
set using_proxy value
|
|
}
|
|
set num_fd_per_openwrite_db 3
|
|
if {$using_proxy>0} {
|
|
set num_fd_per_openwrite_db 5
|
|
}
|
|
|
|
# First test how many file descriptors are available for use. To open a
|
|
# database for writing SQLite requires 3 file descriptors (the database, the
|
|
# journal and the directory).
|
|
set filehandles {}
|
|
catch {
|
|
for {set i 0} {$i<($N * 3)} {incr i} {
|
|
lappend filehandles [open testfile.1 w]
|
|
}
|
|
}
|
|
foreach fd $filehandles {
|
|
close $fd
|
|
}
|
|
catch {
|
|
file delete -force testfile.1
|
|
}
|
|
set N [expr $i / $num_fd_per_openwrite_db]
|
|
|
|
# Create a bunch of random database names
|
|
#
|
|
unset -nocomplain dbname
|
|
unset -nocomplain used
|
|
for {set i 0} {$i<$N} {incr i} {
|
|
while 1 {
|
|
set name test-[format %08x [expr {int(rand()*0x7fffffff)}]].db
|
|
if {[info exists used($name)]} continue
|
|
set dbname($i) $name
|
|
set used($name) $i
|
|
break
|
|
}
|
|
}
|
|
|
|
# Create a bunch of databases
|
|
#
|
|
for {set i 0} {$i<$N} {incr i} {
|
|
do_test manydb-1.$i {
|
|
sqlite3 db$i $dbname($i)
|
|
execsql {
|
|
CREATE TABLE t1(a,b);
|
|
BEGIN;
|
|
INSERT INTO t1 VALUES(1,2);
|
|
} db$i
|
|
} {}
|
|
}
|
|
|
|
# Finish the transactions
|
|
#
|
|
for {set i 0} {$i<$N} {incr i} {
|
|
do_test manydb-2.$i {
|
|
execsql {
|
|
COMMIT;
|
|
SELECT * FROM t1;
|
|
} db$i
|
|
} {1 2}
|
|
}
|
|
|
|
|
|
# Close the databases and erase the files.
|
|
#
|
|
for {set i 0} {$i<$N} {incr i} {
|
|
do_test manydb-3.$i {
|
|
db$i close
|
|
file delete -force $dbname($i)
|
|
} {}
|
|
}
|
|
|
|
|
|
|
|
|
|
finish_test
|