Nice! That's a lot better than depending on some quirky sql construct. Thanks, Remco
Saul Hazledine <shaz...@gmail.com> writes: > On Apr 20, 8:51 pm, Remco van 't Veer <rwvtv...@gmail.com> wrote: >> I am doing the following after an insert for a Derby database: >> >> (sql/with-query-results res >> ["VALUES IDENTITY_VAL_LOCAL()"] >> (first (vals (first res)))) >> >> For MySQL it would be something like: >> >> (sql/with-query-results res >> ["SELECT LAST_INSERT_ID()"] >> (first (vals (first res)))) >> > > Thanks Remco. I'm using H2 and its seems possible to do something > similar by accessing the INFORMATION_SCHEMA. However, this also feels > wrong to me so I'm trying the JDBC route which should be more > consistent across databases. My first working attempt is at: > > http://gist.github.com/373564#file_sql.clj > > It contains a alternative to insert-records called 'insert-record' > which returns a database id and a macro that wraps up multiple inserts > in a transaction. The macro doesn't feel very idiomatic so I'd welcome > any feedback on how to change it. > > ------------------------- > extended.sql/insert-record > ([table record]) > Equivalent of clojure.contrib.sql/insert-records that only inserts a > single > record but returns the autogenerated id of that record if > available. > > ------------------------- > extended.sql/insert-with-id > ([db & table-records]) > Macro > Insert records within a single transaction into the database > described by > the given db spec. The record format is :table { record-hash }. > The record hashes can optionally access a hashmap 'id' which holds > the > autogenerated ids of previous inserts keyed by the table name. e.g. > > (insert-with-id db-spec > :department {:name "xfiles" > :location "secret"} > :employee {:department (id :department) > :name "Mr X"}) -- 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