Sean,
I entirely agree that the use of keywords as map keys is a feature of
clojure (and a great one, at that), and that converting result set
column names to keywords is a feature of resultset-seq.  A greater
feature of clojure is its extensibility.  What I am after is a
generalization of the function in question, for greater
interoperability with Java's SQL libraries.  Matching data from
resultset-seq back to its ResultSet (or source tables) currently
involves a few too many nuances for my comfort.

And while most implementations of SQL are case insensitive, most of
these also preserve the case of column names.  I'm not a fan of
camelCase identifiers at all, but they're out there.  stringify is too
blunt for my needs.

Ryan

On Dec 1, 11:57 am, Sean Devlin <francoisdev...@gmail.com> wrote:
> Using keywords in the resultset map is a feature.  It is very common
> to write something like this;
>
> (map :your-column results)
>
> This takes advantage of the fact that keywords implement IFn.  To the
> best of my knowledge SQL isn't case sensitive, downcasing the column
> names makes sense too, since it is more idiomatic.
>
> If you really want to stringify the columns, I suggest keeping the
> following code handy:
>
> (defn stringify [m]
>   (into {} (map (fn [k v] [(name k) v])))
>
> The simply call map
>
> (map stringify results)
>
> Sean
>
> On Dec 1, 10:01 am, Ryan Twitchell <metatheo...@gmail.com> wrote:
>
> > Hi all,
>
> > I'm not too happy with how resultset-seq down-cases column names and
> > turns them into keywords, as I would prefer to work with string keys
> > in some cases.  I came up with the following change to give the caller
> > a choice to remap column keys in any way.  This leaves resultset-seq's
> > behavior for a single argument exactly as it was before.
>
> > ;; Instead of:
> > user> (resultset-seq rs)
> > ({:empid 3} {:empid 4} ...)
>
> > ;; We can do this:
> > user> (resultset-seq rs identity) ;; or any remapping fn
> > ({"empId" 3} {"empId" 4} ...)
>
> > I'd love to see the change made to core.  If not, I hope this helps
> > others who have had the same problem:
>
> >https://gist.github.com/723583
>
> > And though I'm not thrilled with this, for coping with contrib.sql's
> > with-query-results macro (which uses resultset-seq) I have the
> > following:
>
> > (defmacro with-query-results2
> >   "Like clojure.contrib.sql/with-query-results, but returns structmaps
> > with
> > String keys identical to those in the ResultSet.  This is done by
> > dynamically
> > rebinding clojure.core/resultset-seq to a new function, so take care
> > if using
> > that function within body."
> >   [results sql-params & body]
> >   `(binding [resultset-seq #(resultset-seq2 % identity)]
> >      (with-query-results ~results ~sql-params ~...@body)))

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