-C Added\sdatabase\sserver\sexample\scode\s(untested).\s\sFixed\sserveral\sbugs\sincluding\nthe\sautovacuum\scompile\sproblem\sdescribed\sby\sticket\s#1593.\s(CVS\s2897)
-D 2006-01-09T23:40:25
-F Makefile.in c79fbdaa264c6afcd435f2fb492551de5a8cf80d
+C Add\sthe\sfirst\ssimple\stests\sof\sserver\smode.\s\sGet\sthe\sMakefile\sgenerated\sfrom\nthe\sconfigure\sscript\sworking\sagain.\s(CVS\s2898)
+D 2006-01-09T23:50:11
+F Makefile.in ab3ffd8d469cef4477257169b82810030a6bb967
F Makefile.linux-gcc aee18d8a05546dcf1888bd4547e442008a49a092
F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028
F VERSION b818cce180263e590a00ad4509a713892c3eecea
F test/select5.test 07a90ab3c7e3f0a241a9cdea1d997b2c8a89ff0b
F test/select6.test f459a19bdac0501c4d3eb1a4df4b7a76f1bb8ad4
F test/select7.test 1bf795b948c133a15a2a5e99d3270e652ec58ce6
+F test/server1.test c1611e0d6a032e740c09a07c9066ff9c83755126
F test/shared.test 413289e177e73c844cfc9896b6d78e0f2e62d963
F test/sort.test 0e4456e729e5a92a625907c63dcdedfbe72c5dc5
F test/subquery.test e6de53332c0301b3cfa34edc3f3cd5fa1e859efd
F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
F www/version3.tcl a99cf5f6d8bd4d5537584a2b342f0fb9fa601d8b
F www/whentouse.tcl 97e2b5cd296f7d8057e11f44427dea8a4c2db513
-P eeebc640aaeeb0ab7f730d854069f159aa41968b
-R be8fced19e9aacb1a6894a77c76ca49c
+P ec332d8822d1ac9673581a26ab2a2fce5f2554a3
+R e5d15dbb3e926b9920df07fb0ac31ca5
U drh
-Z f9c4ad5567aaf51e37a39a8cf2edcc05
+Z 9152e6540471def63c6c7493e6fbf1c1
--- /dev/null
+# 2006 January 09
+#
+# 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 script is testing the server mode of SQLite.
+#
+# This file is derived from thread1.test
+#
+# $Id: server1.test,v 1.1 2006/01/09 23:50:11 drh Exp $
+
+
+set testdir [file dirname $argv0]
+source $testdir/tester.tcl
+
+# Skip this whole file if the server testing code is not enabled
+#
+if {[llength [info command client_step]]==0 || [sqlite3 -has-codec]} {
+ finish_test
+ return
+}
+
+# Create some data to work with
+#
+do_test server1-1.1 {
+ execsql {
+ CREATE TABLE t1(a,b);
+ INSERT INTO t1 VALUES(1,'abcdefgh');
+ INSERT INTO t1 SELECT a+1, b||b FROM t1;
+ INSERT INTO t1 SELECT a+2, b||b FROM t1;
+ INSERT INTO t1 SELECT a+4, b||b FROM t1;
+ SELECT count(*), max(length(b)) FROM t1;
+ }
+} {8 64}
+
+# Interleave two threads on read access. Then make sure a third
+# thread can write the database. In other words:
+#
+# read-lock A
+# read-lock B
+# unlock A
+# unlock B
+# write-lock C
+#
+do_test server1-1.2 {
+ client_create A test.db
+ client_create B test.db
+ client_create C test.db
+ client_compile A {SELECT a FROM t1}
+ client_step A
+ client_result A
+} SQLITE_ROW
+do_test server1-1.3 {
+ client_argc A
+} 1
+do_test server1-1.4 {
+ client_argv A 0
+} 1
+do_test server1-1.5 {
+ client_compile B {SELECT b FROM t1}
+ client_step B
+ client_result B
+} SQLITE_ROW
+do_test server1-1.6 {
+ client_argc B
+} 1
+do_test server1-1.7 {
+ client_argv B 0
+} abcdefgh
+do_test server1-1.8 {
+ client_finalize A
+ client_result A
+} SQLITE_OK
+do_test server1-1.9 {
+ client_finalize B
+ client_result B
+} SQLITE_OK
+do_test server1-1.10 {
+ client_compile C {CREATE TABLE t2(x,y)}
+ client_step C
+ client_result C
+} SQLITE_DONE
+do_test server1-1.11 {
+ client_finalize C
+ client_result C
+} SQLITE_OK
+do_test server1-1.12 {
+ catchsql {SELECT name FROM sqlite_master}
+ execsql {SELECT name FROM sqlite_master}
+} {t1 t2}
+
+
+#
+# The following tests - server1-2.* - test the following scenario:
+#
+# 1: Read-lock thread A
+# 2: Read-lock thread B
+# 3: Attempt to write in thread C -> SQLITE_BUSY
+# 4: Check db write failed from main thread.
+# 5: Unlock from thread A.
+# 6: Attempt to write in thread C -> SQLITE_BUSY
+# 7: Check db write failed from main thread.
+# 8: Unlock from thread B.
+# 9: Attempt to write in thread C -> SQLITE_DONE
+# 10: Finalize the write from thread C
+# 11: Check db write succeeded from main thread.
+#
+do_test server1-2.1 {
+ client_halt *
+ client_create A test.db
+ client_compile A {SELECT a FROM t1}
+ client_step A
+ client_result A
+} SQLITE_ROW
+do_test server1-2.2 {
+ client_create B test.db
+ client_compile B {SELECT b FROM t1}
+ client_step B
+ client_result B
+} SQLITE_ROW
+do_test server1-2.3 {
+ client_create C test.db
+ client_compile C {INSERT INTO t2 VALUES(98,99)}
+ client_step C
+ client_result C
+ client_finalize C
+ client_result C
+} SQLITE_BUSY
+
+do_test server1-2.4 {
+ execsql {SELECT * FROM t2}
+} {}
+
+do_test server1-2.5 {
+ client_finalize A
+ client_result A
+} SQLITE_OK
+do_test server1-2.6 {
+ client_compile C {INSERT INTO t2 VALUES(98,99)}
+ client_step C
+ client_result C
+ client_finalize C
+ client_result C
+} SQLITE_BUSY
+do_test server1-2.7 {
+ execsql {SELECT * FROM t2}
+} {}
+do_test server1-2.8 {
+ client_finalize B
+ client_result B
+} SQLITE_OK
+do_test server1-2.9 {
+ client_compile C {INSERT INTO t2 VALUES(98,99)}
+ client_step C
+ client_result C
+} SQLITE_DONE
+do_test server1-2.10 {
+ client_finalize C
+ client_result C
+} SQLITE_OK
+do_test server1-2.11 {
+ execsql {SELECT * FROM t2}
+} {98 99}
+
+client_halt *
+finish_test