I believe it was on the clojure-docs page (linked from the
clojure.java.jdbc readme) where they talk about managing your own
connection.

The more idiomatic way may be to wrap the whole thing in some transaction
fn or macro. Sorry I'm not familiar with the API. A lot of vars are
deprecated, but their doc strings don't say what to do instead.
On Oct 2, 2013 9:05 AM, "Christian Jauvin" <cjau...@gmail.com> wrote:

> Actually, re-reading the jdbc/query doc
>
> http://clojure.github.io/java.jdbc/#clojure.java.jdbc/query
>
> I can't find any reference to this ":connection" keyword param.. may I ask
> where you got it from?
>
>
>
>
> On Wednesday, October 2, 2013 9:50:13 AM UTC-4, Christian Jauvin wrote:
>>
>> Ah finally, thanks John, the "with-open" pattern was indeed the missing
>> piece: it works!
>>
>> Just to summarize, here's what works for me:
>>
>> (extend-type org.postgresql.jdbc4.**Jdbc4Array
>>   json/JSONWriter
>>   (-write [o out]
>>     (json/-write (.getArray o) out)))
>>
>> ; plus any other additional required custom JSON writers
>> (java.sql.Timestamp, Date, etc)
>>
>> (with-open [conn (jdbc/get-connection *db*)]
>>   (json/write-str
>>     (jdbc/query {:connection conn}
>>                 ["select * from <table with PG array in it>.."])))
>>
>>
>>
>> On Wednesday, October 2, 2013 12:06:44 AM UTC-4, John Hume wrote:
>>>
>>> I don't use clojure.java.jdbc, so this may be non-idiomatic or just
>>> wrong, but have you tried something like
>>>
>>> (with-open [connection (jdbc/db-connection *db*)]
>>>   (json/write-str
>>>     (jdbc/query {:connection connection}
>>>       ["SELECT * FROM..."])))
>>>
>>>
>>>
>>> On Tue, Oct 1, 2013 at 8:13 PM, Christian Jauvin <cja...@gmail.com>wrote:
>>>
>>>> Hi Philippe,
>>>>
>>>> The Jdbc4Array that's causing me trouble is not the "outer" one,
>>>> returned from jdbc/query: that one seems to be properly handled by
>>>> json/write-str.
>>>>
>>>> The problem happens with a Postgres table containing a text[] column:
>>>>
>>>> create table something (
>>>>     something_id serial primary key,
>>>>     list_of_something text[]
>>>> )
>>>>
>>>> In that case the query returns an ("inner") array for each record, and
>>>> it gets converted to a Jdbc4Array, which, when passed to the JSON
>>>> writer, causes the problem.
>>>>
>>>> Querying a table without a PG array works perfectly fine though.
>>>>
>>>>
>>>>
>>>> On Tuesday, October 1, 2013 4:21:33 PM UTC-4, Philippe Guillebert wrote:
>>>>
>>>>> Hi,
>>>>>
>>>>> You probably need to realize your query using (doall (jdbc/query ...))
>>>>>
>>>>> Also, I was wondering, depending on your needs, you could convert
>>>>> Jdbc4Array into a native type (vector ?) as a post-processing
>>>>> function of your query and forget about registering JSON writers.
>>>>>
>>>>>
>>>>>
>>>>> On Tue, Oct 1, 2013 at 9:00 PM, Christian Jauvin <cja...@gmail.com>wrote:
>>>>>
>>>>>> Hi Roman,
>>>>>>
>>>>>> This approach works for java.sql.Timestamp, which was another type
>>>>>> for which a JSON writer wasn't defined in my case.
>>>>>>
>>>>>> For org.postgresql.jdbc4.**Jdbc4**Array however, there's something
>>>>>> missing, because I get:
>>>>>>
>>>>>>     *org.postgresql.util.PSQLException: This connection has been
>>>>>> closed.*
>>>>>>
>>>>>> As the person answering me on Stack Overflow suggested, it seems that
>>>>>> the resultset should be somehow processed before the connection is 
>>>>>> closed,
>>>>>> but I really don't know how to do given the construct I'm currently 
>>>>>> using:
>>>>>>
>>>>>> (json/write-str
>>>>>>   (jdbc/query *db*
>>>>>>     ["SELECT * FROM .."]))
>>>>>>
>>>>>> where and how could I intercept the resultset that way? Thanks.
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Tuesday, October 1, 2013 12:49:10 PM UTC-4, r0man wrote:
>>>>>>>
>>>>>>> I think you need to implement the JSONWriter protocol for the
>>>>>>> Jdbc4Array class, and possibly for the datatypes that are in the
>>>>>>> array. This for example makes the json library aware of
>>>>>>> java.util.Date classes.
>>>>>>>
>>>>>>> (extend-type java.util.Date
>>>>>>>   JSONWriter
>>>>>>>   (-write [date out]
>>>>>>>     (-write (str date) out)))
>>>>>>>
>>>>>>> Something like this (not tested):
>>>>>>>
>>>>>>> (extend-type org.postgresql.jdbc4.**Jdbc4Arra****y
>>>>>>>   JSONWriter
>>>>>>>   (-write [array out]
>>>>>>>     (-write (seq (.getArray array)) out)))
>>>>>>>
>>>>>>> Roman
>>>>>>>
>>>>>>>
>>>>>>> On Tuesday, October 1, 2013 3:57:02 PM UTC+2, Christian Jauvin wrote:
>>>>>>>>
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>> I asked this question on Stack Overflow yesterday:
>>>>>>>>
>>>>>>>> I want to jsonify the results of a query performed against a
>>>>>>>> Postgres table containing a column of type text[], but the problem
>>>>>>>> is that clojure.data.json.write-str doesn't seem to know how to
>>>>>>>> handle PG arrays:
>>>>>>>>
>>>>>>>> *Exception Don't know how to write JSON of class
>>>>>>>> org.postgresql.jdbc4.Jdbc4Array  clojure.data.json/write-generic*
>>>>>>>>
>>>>>>>>  Do I have to supply a custom handler, or is there a simpler way?
>>>>>>>>
>>>>>>>>
>>>>>>>> http://stackoverflow.com/**quest****ions/19103870/jsonify-a-**
>>>>>>>> jdbc4a****rray-in-clojure<http://stackoverflow.com/questions/19103870/jsonify-a-jdbc4array-in-clojure>
>>>>>>>>
>>>>>>>> I'm asking it here in the hope of getting (maybe) a simpler
>>>>>>>> solution, or at least one I can implement readily, because the problem 
>>>>>>>> I
>>>>>>>> have with one of the suggestions I received (extending
>>>>>>>> org.postgresql.jdbc4.**Jdbc4Arra****y to implement the missing
>>>>>>>> function) is that I don't know how to make it work with my usage 
>>>>>>>> pattern,
>>>>>>>> which is simply:
>>>>>>>>
>>>>>>>> (json/write-str
>>>>>>>>     (jdbc/query *db*
>>>>>>>>         ["SELECT * FROM ..."]))
>>>>>>>>
>>>>>>>> How do I "get the array before the connection is closed" with such
>>>>>>>> a construct? Is there another way?
>>>>>>>>
>>>>>>>>   --
>>>>>> --
>>>>>> You received this message because you are subscribed to the Google
>>>>>> Groups "Clojure" group.
>>>>>> To post to this group, send email to clo...@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+u...@**googlegroups.com
>>>>>>
>>>>>> For more options, visit this group at
>>>>>> http://groups.google.com/**group**/clojure?hl=en<http://groups.google.com/group/clojure?hl=en>
>>>>>> ---
>>>>>> You received this message because you are subscribed to the Google
>>>>>> Groups "Clojure" group.
>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>> send an email to clojure+u...@**googlegroups.com.
>>>>>>
>>>>>> For more options, visit 
>>>>>> https://groups.google.com/**grou**ps/opt_out<https://groups.google.com/groups/opt_out>
>>>>>> .
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Philippe
>>>>>
>>>>  --
>>>> --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "Clojure" group.
>>>> To post to this group, send email to clo...@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+u...@googlegroups.com
>>>> For more options, visit this group at
>>>> http://groups.google.com/**group/clojure?hl=en<http://groups.google.com/group/clojure?hl=en>
>>>> ---
>>>> You received this message because you are subscribed to the Google
>>>> Groups "Clojure" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>> an email to clojure+u...@googlegroups.com.
>>>> For more options, visit 
>>>> https://groups.google.com/**groups/opt_out<https://groups.google.com/groups/opt_out>
>>>> .
>>>>
>>>
>>>
>>>
>>> --
>>> http://elhumidor.blogspot.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
> ---
> You received this message because you are subscribed to the Google Groups
> "Clojure" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.
>

-- 
-- 
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 unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to