Thanks for the feedback request.

When I use clojure.contrib.sql, I use it for its DML only -- no create/drop 
table, etc. I usually manage the DDL outside of Clojure base using (for 
example) Liquibase so I can get rollbacks and branching easily. Perhaps DML 
can be factored out into a separate namespace? Also, I am not interested in 
building statements in Clojure sexps, for example I am quite happy using 
clojure.contrib.sql like this, which I personally find readable:

  (with-connection *connection*
...
        (do-prepared "
insert into password_reset (user_id, token) 
    select id, ? from user where user.email = ? 
on duplicate key
    update token = ?, creation_date = now()"
                     [token username token])
        token)))

I suggest not getting into the SQL in sexps/naming strategies business.  
That kind of thing doesn't really fall under the scope of JDBC, which 
clojure.java.jdbc should be modeled around.

update-or-insert-values can probably be removed as it currently contains a 
race condition depending on the transaction isolation level.  One has to use 
a vendor specific feature (on duplicate key update in MySQL, merge in Oracle 
etc.).

The row as a structmap works well. 90% of the time I use use "select foo_bar 
as \"foo-bar\"..." to get a Clojure-ish map key.  Other 10% I might also 
have to apply a transformation to the row, especially when working with 
legacy databases.  I thought having something like:

       (with-query-results rs transform-fn ["
..." params...]
         (first rs))

So that by the time I call (first rs), transform has already been applied, 
but (map transform-fn rs) is trivial enough also.

-- 
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

Reply via email to