From df9277c4ca30c7413fc61686325f396f68680c70 Mon Sep 17 00:00:00 2001
From: Slava Pestov <slava@slava-pestovs-macbook-pro.local>
Date: Thu, 1 May 2008 21:49:15 -0500
Subject: [PATCH] DB connection pooling in HTTPd

---
 extra/http/server/db/db-tests.factor |  4 ++++
 extra/http/server/db/db.factor       | 19 ++++++++++---------
 2 files changed, 14 insertions(+), 9 deletions(-)
 create mode 100644 extra/http/server/db/db-tests.factor

diff --git a/extra/http/server/db/db-tests.factor b/extra/http/server/db/db-tests.factor
new file mode 100644
index 0000000000..0c34745c00
--- /dev/null
+++ b/extra/http/server/db/db-tests.factor
@@ -0,0 +1,4 @@
+IN: http.server.db.tests
+USING: tools.test http.server.db ;
+
+\ <db-persistence> must-infer
diff --git a/extra/http/server/db/db.factor b/extra/http/server/db/db.factor
index 047af3f4ac..3d8f78fbdd 100755
--- a/extra/http/server/db/db.factor
+++ b/extra/http/server/db/db.factor
@@ -1,16 +1,17 @@
 ! Copyright (C) 2008 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: db http.server http.server.sessions kernel accessors
-continuations namespaces destructors ;
+USING: db db.pooling http.server http.server.sessions kernel
+accessors continuations namespaces destructors ;
 IN: http.server.db
 
-TUPLE: db-persistence < filter-responder db params ;
+TUPLE: db-persistence < filter-responder pool ;
 
-C: <db-persistence> db-persistence
-
-: connect-db ( db-persistence -- )
-    [ db>> ] [ params>> ] bi make-db db-open
-    [ db set ] [ add-always-destructor ] bi ;
+: <db-persistence> ( responder db params -- responder' )
+    <pool> db-persistence boa ;
 
 M: db-persistence call-responder*
-    [ connect-db ] [ call-next-method ] bi ;
+    [
+        pool>> [ acquire-connection ] keep
+        [ return-connection-later ] [ drop db set ] 2bi
+    ]
+    [ call-next-method ] bi ;