Hi all, I tripped over something strange yesterday. I work on a tool to create reports in the REPL from data in an SQL database. Instead of building SQL statements with complex where clauses, the user can defined which tables/fields he wants to fetch and then he can work on these locally.
I implemented local joins and a number of other related operations to marshal the data. While doing this, I worked with clojure.set and used the index function to regroup records matching the same keys. I then found out that I was not getting the same # of record from my "local" join compared to the equivalent SQL statement. The input data was the same however (I compared SQL statement outputs with my local "fetch" outputs. I was "losing" records, instead of getting 18000 something records, I was down to 14000 something. In fact some keys where missing in the output of index. I did not find a pattern in the missing entries. While digging, I started to question the index function sanity from clojure.set. I cloned it and after a few hours of tossing it around, decided to recode it using a mutable Java HashMap. It then worked... I got the same number of records as in the equivalent SQL statement output. The index function in clojure.set goes like this: (defn index "Returns a map of the distinct values of ks in the xrel mapped to a set of the maps in xrel with the corresponding values of ks." [xrel ks] (reduce (fn [m x] (let [ik (select-keys x ks)] (assoc m ik (conj (get m ik #{}) x)))) {} xrel)) It looks great and I suspect that the problem is deeper in the core. Anyone has encountered something similar ? The problem can be replicated in 1.0 and 1.1. I did not have the time now to test it again using the master branch. I will investigate this in the runtime later but maybe someone has crossed over this problem in the past. Luc -- 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