Re: understanding 'binding' use in clojure.java.jdbc

2012-12-03 Thread Sean Corfield
FWIW, the c.j.jdbc docs have an example of connection pooling:

http://clojure.github.com/java.jdbc/doc/clojure/java/jdbc/ConnectionPooling.html


On Mon, Dec 3, 2012 at 6:03 AM, Matthias Cords wrote:

> Hi,
>
> I found database connection pools to be the right thing to use with
> c.j.jdbc and multiple databases.
>
> https://clojars.org/org.bituf/clj-dbcp
>
> (let [conn1 (make-pool-1)
>   conn2 (make-pool-2)]
>   (sql/with-connection conn1
> (sql/with-query-results r ["select ..."]
>   (sql/with-connection conn2
> (sql/do-commands "insert into ...")
>
> matt
>
>
>
> On 10 October 2012 15:03, Stuart Sierra wrote:
>
>>
>>
>> On Tuesday, October 9, 2012 10:25:05 PM UTC-4, Sean Corfield wrote:
>>>
>>> This is why c.j.jdbc is getting an API overall that will expose
>>> functions that accept the connection or the db-spec directly (and the old
>>> API will be rewritten in terms of the new one for compatibility).
>>
>>
>> Excellent.
>> -S
>>
>>  --
>> You received this message because you are subscribed to the Google
>> Groups "Clojure" group.
>> To post to this group, send email to clojure@googlegroups.com
>> Note that posts from new members are moderated - please be patient with
>> your first post.
>> To unsubscribe from this group, send email to
>> clojure+unsubscr...@googlegroups.com
>> For more options, visit this group at
>> http://groups.google.com/group/clojure?hl=en
>>
>
>  --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with
> your first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en
>



-- 
Sean A Corfield -- (904) 302-SEAN
An Architect's View -- http://corfield.org/
World Singles, LLC. -- http://worldsingles.com/

"Perfection is the enemy of the good."
-- Gustave Flaubert, French realist novelist (1821-1880)

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Re: understanding 'binding' use in clojure.java.jdbc

2012-12-03 Thread Matthias Cords
Hi,

I found database connection pools to be the right thing to use with
c.j.jdbc and multiple databases.

https://clojars.org/org.bituf/clj-dbcp

(let [conn1 (make-pool-1)
  conn2 (make-pool-2)]
  (sql/with-connection conn1
(sql/with-query-results r ["select ..."]
  (sql/with-connection conn2
(sql/do-commands "insert into ...")

matt



On 10 October 2012 15:03, Stuart Sierra  wrote:

>
>
> On Tuesday, October 9, 2012 10:25:05 PM UTC-4, Sean Corfield wrote:
>>
>> This is why c.j.jdbc is getting an API overall that will expose functions
>> that accept the connection or the db-spec directly (and the old API will be
>> rewritten in terms of the new one for compatibility).
>
>
> Excellent.
> -S
>
>  --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with
> your first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en
>

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Re: understanding 'binding' use in clojure.java.jdbc

2012-10-10 Thread Stuart Sierra


On Tuesday, October 9, 2012 10:25:05 PM UTC-4, Sean Corfield wrote:
>
> This is why c.j.jdbc is getting an API overall that will expose functions 
> that accept the connection or the db-spec directly (and the old API will be 
> rewritten in terms of the new one for compatibility).


Excellent.
-S

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Re: understanding 'binding' use in clojure.java.jdbc

2012-10-10 Thread gaz jones
Yeah, you probably shouldn't rely on this but I think it will still
work. I have done something similar before when reading from 3
databases simultaneously (3 nested with-connection and
with-query-result calls) and I believe (connection) is only called
once when creating the prepared statement.

On Tue, Oct 9, 2012 at 9:24 PM, Sean Corfield  wrote:
> No, the inner with-connection binds *db* to db1 so db2 is no longer
> accessible.
>
> This is why c.j.jdbc is getting an API overall that will expose functions
> that accept the connection or the db-spec directly (and the old API will be
> rewritten in terms of the new one for compatibility).
>
> Sean
>
>
> On Tue, Oct 9, 2012 at 2:44 PM, gaz jones  wrote:
>>
>> Can you not simply:
>>
>> (jdbc/with-connection db2
>> (jdbc/with-query-results results
>>   query
>>   {:result-type :forward-only
>>:fetch-size 1000}
>>   (jdbc/with-connection db1
>>  ;; read and write?
>>)))
>>
>> ?
>
>
>
> --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with your
> first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en


Re: understanding 'binding' use in clojure.java.jdbc

2012-10-09 Thread Sean Corfield
On Tue, Oct 9, 2012 at 12:53 PM, Brian Craft  wrote:

> On Tuesday, October 9, 2012 12:11:28 PM UTC-7, Tassilo Horn wrote:
>
>> Yes, that's true.  Maybe Korma [1] is better suited for this kind of
>> operation.
>>
> Thanks for the link to korma.
>

Korma is built on c.j.jdbc and may suffer from the same issues...?
-- 
Sean A Corfield -- (904) 302-SEAN
An Architect's View -- http://corfield.org/
World Singles, LLC. -- http://worldsingles.com/

"Perfection is the enemy of the good."
-- Gustave Flaubert, French realist novelist (1821-1880)

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Re: understanding 'binding' use in clojure.java.jdbc

2012-10-09 Thread Sean Corfield
No, the inner with-connection binds *db* to db1 so db2 is no longer
accessible.

This is why c.j.jdbc is getting an API overall that will expose functions
that accept the connection or the db-spec directly (and the old API will be
rewritten in terms of the new one for compatibility).

Sean

On Tue, Oct 9, 2012 at 2:44 PM, gaz jones  wrote:

> Can you not simply:
>
> (jdbc/with-connection db2
> (jdbc/with-query-results results
>   query
>   {:result-type :forward-only
>:fetch-size 1000}
>   (jdbc/with-connection db1
>  ;; read and write?
>)))
>
> ?
>

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Re: understanding 'binding' use in clojure.java.jdbc

2012-10-09 Thread gaz jones
Can you not simply:

(jdbc/with-connection db2
(jdbc/with-query-results results
  query
  {:result-type :forward-only
   :fetch-size 1000}
  (jdbc/with-connection db1
 ;; read and write?
   )))

?
On Tue, Oct 9, 2012 at 2:53 PM, Brian Craft  wrote:
>
> On Tuesday, October 9, 2012 12:11:28 PM UTC-7, Tassilo Horn wrote:
>>
>> Brian Craft  writes:
>>
>> Hi Brian,
>>
>> > If (read-stuff) is not lazy, then this looks pretty simple: all the
>> > data is loaded in memory & returned to (write-stuff).  If the data is
>> > large you wouldn't want it all in memory. What then? Could you make
>> > read-stuff return a lazy sequence? My impression after a brief
>> > experiment is that this doesn't work: when the inner with-connection*
>> > returns, the db connection is closed. A lazy sequence from
>> > (read-stuff) then can't be evaluated w/o throwing an error.
>>
>> Yes, that's true.  Maybe Korma [1] is better suited for this kind of
>> operation.
>>
>
> Damn. I was hoping there was some lispy fp thing I was missing here, but
> *db* really is just a global variable that fails in the same way that
> globals fail in all languages.
>
> Thanks for the link to korma.
>
> --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with your
> first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en


Re: understanding 'binding' use in clojure.java.jdbc

2012-10-09 Thread Brian Craft

On Tuesday, October 9, 2012 12:11:28 PM UTC-7, Tassilo Horn wrote:
>
> Brian Craft > writes: 
>
> Hi Brian, 
>
> > If (read-stuff) is not lazy, then this looks pretty simple: all the 
> > data is loaded in memory & returned to (write-stuff).  If the data is 
> > large you wouldn't want it all in memory. What then? Could you make 
> > read-stuff return a lazy sequence? My impression after a brief 
> > experiment is that this doesn't work: when the inner with-connection* 
> > returns, the db connection is closed. A lazy sequence from 
> > (read-stuff) then can't be evaluated w/o throwing an error. 
>
> Yes, that's true.  Maybe Korma [1] is better suited for this kind of 
> operation. 
>
>
Damn. I was hoping there was some lispy fp thing I was missing here, but 
*db* really is just a global variable that fails in the same way that 
globals fail in all languages.

Thanks for the link to korma. 

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Re: understanding 'binding' use in clojure.java.jdbc

2012-10-09 Thread Tassilo Horn
Brian Craft  writes:

Hi Brian,

> If (read-stuff) is not lazy, then this looks pretty simple: all the
> data is loaded in memory & returned to (write-stuff).  If the data is
> large you wouldn't want it all in memory. What then? Could you make
> read-stuff return a lazy sequence? My impression after a brief
> experiment is that this doesn't work: when the inner with-connection*
> returns, the db connection is closed. A lazy sequence from
> (read-stuff) then can't be evaluated w/o throwing an error.

Yes, that's true.  Maybe Korma [1] is better suited for this kind of
operation.

Bye,
Tassilo

[1] http://sqlkorma.com

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en


Re: understanding 'binding' use in clojure.java.jdbc

2012-10-09 Thread Brian Craft


On Tuesday, October 9, 2012 11:32:18 AM UTC-7, Tassilo Horn wrote:
>
> Brian Craft > writes: 
>
> > How would I do an operation involving two databases? I'd need to call 
> > with-connection* from with-connection*? How would I then read from one 
> > & write to the other? 
>
> I've never used the jdbc lib, but essentially it should be something 
> along the lines of 
>
>   (let [db1 (connect-to-db1) 
> db2 (connect-to-db2)] 
> (with-connection* db2 
>   (write-stuff (with-connection* db1 (read-stuff) 
>
>
If (read-stuff) is not lazy, then this looks pretty simple: all the data is 
loaded in memory & returned to (write-stuff).  If the data is large you 
wouldn't want it all in memory. What then? Could you make read-stuff return 
a lazy sequence? My impression after a brief experiment is that this 
doesn't work: when the inner with-connection* returns, the db connection is 
closed. A lazy sequence from (read-stuff) then can't be evaluated w/o 
throwing an error.

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Re: understanding 'binding' use in clojure.java.jdbc

2012-10-09 Thread Tassilo Horn
Brian Craft  writes:

> How would I do an operation involving two databases? I'd need to call
> with-connection* from with-connection*? How would I then read from one
> & write to the other?

I've never used the jdbc lib, but essentially it should be something
along the lines of

  (let [db1 (connect-to-db1)
db2 (connect-to-db2)]
(with-connection* db2
  (write-stuff (with-connection* db1 (read-stuff)

Bye,
Tassilo

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en