-C Do\snot\ssearch\sfor\slocks\sto\sclear\swhen\sconnecting\sto\sa\sdb\sin\smulti-process\smode\nunless\sit\slooks\slike\sthe\sprevious\suser\sof\sthe\sclient-id\scrashed.
-D 2017-08-18T16:04:40.867
+C Add\stests\sto\sthis\sbranch.
+D 2017-08-18T18:55:22.047
F Makefile.in d9873c9925917cca9990ee24be17eb9613a668012c85a343aef7e5536ae266e8
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
F Makefile.msc 02b469e9dcd5b7ee63fc1fb05babc174260ee4cfa4e0ef2e48c3c6801567a016
F test/pcache.test c8acbedd3b6fd0f9a7ca887a83b11d24a007972b
F test/pcache2.test af7f3deb1a819f77a6d0d81534e97d1cf62cd442
F test/percentile.test 4243af26b8f3f4555abe166f723715a1f74c77ff
-F test/permutations.test b3326d58fe5c183ebcb359fe880db6c98ed1d3f4d3b350ec718f74287e063bee
+F test/permutations.test 4554a5c671d480ba482260b5f3e92640c31902aac51d556cc5eb5bf129eb47a9
F test/pragma.test f274259d6393b6681eb433beb8dd39a26ec06a4431052a4880b43b84912a3f58
F test/pragma2.test e5d5c176360c321344249354c0c16aec46214c9f
F test/pragma3.test 14c12bc5352b1e100e0b6b44f371053a81ccf8ed
F test/server1.test 46803bd3fe8b99b30dbc5ff38ffc756f5c13a118
F test/server2.test e7890fb1eb9a11a0f94cd0892279e0f3cd1ba8c3006fa343637ee9ff3c4689f6
F test/server3.test c3ae4ca7a6e7df870bfcd2450a9815507eaa80b9cdc44ee6c7975d48311505d4
-F test/server4.test 97040670597948a695b1973537d770417589f1998bcbb3959302aaee3c211250
-F test/server5.test 2e554001145170094a19731a8ce2981d040cf44c947542b35d130e6e31256fca
-F test/server_common.tcl 551923cf8d51fefcdb4444bfd72b88ca5c5228fe1525da5b6528ae4edb7a2f2e
+F test/server_common.tcl c491d0f509b94a5cca845d45ca3bb47e464ad3a4bc89641982269112d0f1f3f4
F test/servercrash.test 1cbd2f98cadee2d8d42ed85ad76fbcf48958fedd537c82221838cd9bc6899dae
+F test/serverfreelist.test 2e554001145170094a19731a8ce2981d040cf44c947542b35d130e6e31256fca w test/server5.test
+F test/serverlimit.test 4bc013c0b991956486ddbff6ea3bee78a0d14a3d8091f5ec00e2bd34a7fa9aa7
+F test/serverreadonly.test 97040670597948a695b1973537d770417589f1998bcbb3959302aaee3c211250 w test/server4.test
F test/session.test 78fa2365e93d3663a6e933f86e7afc395adf18be
F test/shared.test 1da9dbad400cee0d93f252ccf76e1ae007a63746
F test/shared2.test 03eb4a8d372e290107d34b6ce1809919a698e879
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P a8115f95e80cc90c095fdd0a151da51f4d3ee427defdc34780e977585a68776d
-R 3a806093fb1d82eb28aea633865a3bda
+P 66fb9e1cb479f1e764f1606f041bd97fd3bd428093832c000ee36b643377e9e2
+R 6a3c43c16b1d75fce7516d061ebaa6d6
U dan
-Z 66a9c79489e9385c1bc99754d5e08a1b
+Z f1a62abc260e8d42c995536e20991d87
--- /dev/null
+# 2017 April 25
+#
+# 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.
+#
+
+
+set testdir [file dirname $argv0]
+source $testdir/tester.tcl
+set testprefix serverlimit
+
+source $testdir/server_common.tcl
+source $testdir/lock_common.tcl
+return_if_no_server
+
+#-------------------------------------------------------------------------
+# Test plan:
+#
+# 1.* The concurrent connections limit in multi-process mode. With all
+# connections in the local process.
+#
+# 2.* The concurrent connections limit in multi-process mode. Using
+# multiple processes.
+#
+# 3.* The concurrent transactions limit in single-process mode.
+#
+
+server_set_vfs multi
+server_reset_db
+
+set MLIMIT 16 ;# maximum number of allowed connections
+
+do_test 1.0 {
+ server_sqlite3 db test.db
+ db eval {
+ CREATE TABLE t1(x);
+ INSERT INTO t1 VALUES('hello'), ('world');
+ }
+ db close
+ for {set i 0} {$i < $MLIMIT} {incr i} {
+ server_sqlite3 db.$i test.db
+ db.$i eval { SELECT * FROM t1 }
+ }
+ set {} {}
+} {}
+
+# Connection [db] cannot connect - all client slots are occupied.
+#
+do_test 1.1 {
+ server_sqlite3 db test.db
+ list [catch { db eval { SELECT * FROM t1 } } msg] $msg
+} {1 {database is locked}}
+
+# But, if one connection disconnects, [db] can then connect and
+# query the db.
+#
+do_test 1.2 {
+ db.0 close
+ list [catch { db eval { SELECT * FROM t1 } } msg] $msg
+} {0 {hello world}}
+
+do_test 1.3 {
+ for {set i 0} {$i < $MLIMIT} {incr i} {
+ catch { db.$i close }
+ }
+ set {} {}
+} {}
+
+#-------------------------------------------------------------------------
+# Connections in different processes.
+do_multiclient_test tn {
+ code1 { db close }
+ code2 { db2 close }
+ code3 { db3 close }
+
+ set N1 [expr $MLIMIT / 2]
+ set N2 [expr $MLIMIT - $N1]
+
+ do_test 2.$tn.0 {
+ file mkdir test.db-journal
+ code1 {
+ sqlite3 db test.db
+ db eval {
+ CREATE TABLE t11(a, b);
+ INSERT INTO t11 VALUES(1, 2), (3, 4);
+ }
+ db close
+
+ for {set i 0} {$i < $N1} {incr i} {
+ sqlite3 db.$i test.db
+ db.$i eval { SELECT * FROM t11 }
+ }
+ }
+
+ code2 [string map [list %N2% $N2] {
+ for {set i 0} {$i < %N2%} {incr i} {
+ sqlite3 db2.$i test.db
+ db2.$i eval { SELECT * FROM t11 }
+ }
+ }]
+
+ code2 { db2.0 eval {SELECT * FROM t11} }
+ } {1 2 3 4}
+
+ do_test 2.$tn.1 {
+ code3 { sqlite3 db3 test.db }
+ csql3 { SELECT * FROM t11 }
+ } {1 {database is locked}}
+
+ do_test 2.$tn.2 {
+ code2 { db2.0 close }
+ csql3 { SELECT * FROM t11 }
+ } {0 {1 2 3 4}}
+
+ do_test 2.$tn.3 {
+ code1 { sqlite3 db test.db }
+ csql1 { SELECT * FROM t11 }
+ } {1 {database is locked}}
+
+ do_test 2.$tn.4 {
+ code2 { db2.1 close }
+ csql1 { SELECT * FROM t11 }
+ } {0 {1 2 3 4}}
+
+ do_test 2.$tn.X {
+ code1 { for {set i 0} {$i < 50} {incr i} { catch {db.$i close} } }
+ code2 { for {set i 0} {$i < 50} {incr i} { catch {db2.$i close} } }
+ } {}
+}
+
+server_set_vfs single
+server_reset_db
+
+set TLIMIT 16
+
+do_test 3.0 {
+ execsql "CREATE TABLE t1 (o PRIMARY KEY) WITHOUT ROWID"
+ for {set i 0} {$i < $TLIMIT} {incr i} {
+ execsql "CREATE TABLE x$i (o PRIMARY KEY) WITHOUT ROWID"
+ }
+ set "" ""
+} {}
+do_test 3.1 {
+ for {set i 0} {$i < $TLIMIT} {incr i} {
+ sqlite3 db.$i test.db
+ db.$i eval "
+ BEGIN;
+ INSERT INTO x$i VALUES ('one');
+ "
+ }
+} {}
+do_catchsql_test 3.2 {
+ INSERT INTO t1 VALUES('two');
+} {1 {database is locked}}
+do_test 3.3 {
+ db.0 eval COMMIT
+ execsql { INSERT INTO t1 VALUES('two'); }
+} {}
+do_catchsql_test 3.4 { SELECT * FROM x1 } {1 {database is locked}}
+do_catchsql_test 3.5 { SELECT * FROM x0 } {0 one}
+do_test 3.6 {
+ for {set i 1} {$i < $TLIMIT} {incr i} {
+ db.$i eval COMMIT
+ }
+} {}
+
+
+finish_test
+