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.**Jdbc4Array 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/**groups/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
>>> --- 
>>> 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.
>>>
>>
>>
>>
>> -- 
>> 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.

Reply via email to