If it helps someone debug this for Don (since he and I discussed this off-list):
The stack trace from ClojureQL originates in its function to return generated keys and it's calling .getInt on the (generated) key which fails because it's a UUID. So the question is probably: why is ClojureQL assuming all generated keys are integers? As for what might have changed in Don's setup, I wondered if the :uid column definition had been changed to indicate (to ClojureQL) that it is a potentially generated key? (is there a ClojureQL mailing list?) Sean On Mon, Dec 5, 2011 at 3:27 PM, Don Jackson <cloj...@clark-communications.com> wrote: > > For those of you following along at home, my spate of bad luck continues…. > > A week or so ago, I was happily writing and reading UUIDs into Postgres with > ClojureQL. > Then, all of a sudden, it stopped working, and I can't figure out why. > > Shame on me for not being more careful about documenting when it worked, and > what changed. > And a lot of stuff changed in the interim… > > So I wrote small example project to demonstrate the problem: > > I have verified that I can write UUIDs into Postgres with java.jdbc itself, > so that is evidence that the issue is not with java.jdbc, the Postgres JDBC > library, nor my Postgres server. > > (def u1 (. UUID (randomUUID))) > (def u2 (. UUID (randomUUID))) > > (defn write-uuid-jdbc > [uid name] > (sql/with-connection postgres-db > (sql/insert-values > :testuuid > [:uid :name] > [uid name]))) > > (defn read-table-clojureql > [] > @(table postgres-db :testuuid)) > > (defn write-uuid-clojureql > [uid name] > (conj! (table postgres-db :testuuid) > {:uid uid :name name})) > > > This illustrates the problem: > > (write-uuid-jdbc u1 "jdbc") > > > works. > > (write-uuid-clojureql u2 "clojureql") > > > throws the following exception: > > Bad value for type int : d812274a-a1ff-4ce5-962e-005f3c893459 > > [Thrown class org.postgresql.util.PSQLException] > > Restarts: > > 0: [QUIT] Quit to the SLIME top level > > Backtrace: > > 0: > org.postgresql.jdbc2.AbstractJdbc2ResultSet.toInt(AbstractJdbc2ResultSet.java:2759) > > 1: > org.postgresql.jdbc2.AbstractJdbc2ResultSet.getInt(AbstractJdbc2ResultSet.java:2003) > > > Now write u2 with jdbc: > > (write-uuid-jdbc u2 "jdbc") > > > And read the entire table back out using ClojureQL: > > (read-table-clojureql) > > ({:name "jdbc", :uid #<UUID 2896de2b-2c48-40ab-83a6-cee6c2be16cd>} > {:name "jdbc", :uid #<UUID d812274a-a1ff-4ce5-962e-005f3c893459>}) > > > So ClojureQL can certainly read the table, and return the UUIDs, but can't > write them… > > Here is the relevant part of project.clj: > > :dependencies [[org.clojure/clojure "1.2.1"] > [postgresql/postgresql "9.1-901.jdbc4"] > [org.clojure/java.jdbc "0.1.1"] > [clojureql "1.1.0-SNAPSHOT"] > ]) > > > I woud definitely appreciate/welcome any suggestions about why this is > happening, or how it might be fixed…. > > I've pushed this example test case/project up to GitHub in case anyone wants > to poke around: > > dcj/postgres-uuid-test > > Don -- 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