(do
  (def a {:foo :bar})
  (def b {:another :value :foo :BAR})

  (merge-with (fn [x y]
                (conj (if-not (vector? x)
                        [x]
                        x)
                      y))
              a b))


If override the duplicate values merge could be used. Also one approach you 
can take is try to isolate your code that is impure (talks to database) , 
updates atom as much as possible. This way your experience with repl 
becomes more productive because you reduce the complexity of things that 
can go wrong. 

Regards,

Geraldo


On Wednesday, October 11, 2017 at 12:44:40 PM UTC-3, lawrence...@gmail.com 
wrote:
>
> I seem unable to figure out where I made a mistake, though this should be 
> simple.
>
> I have two SQL calls that bring back 5 fields:
>
>  SELECT company_profile_id ,  reference_id,  reference_source   FROM   
> company_reference_id    limit 1  ;
>
> +--------------------+--------------+------------------+
> | company_profile_id | reference_id | reference_source |
> +--------------------+--------------+------------------+
> |                  2 | 331089191    | EIN              |
> +--------------------+--------------+------------------+
>
>  SELECT company_profile_id, url    FROM company_website             limit 
> 1   ;
>
> +--------------------+------------------+
> | company_profile_id | url              |
> +--------------------+------------------+
> |                  2 | mikeshawauto.com |
> +--------------------+------------------+
>
> This brings back a total of 5 values. I need to have a document that has 5 
> values, though if values have the same field-name, then I want to 
> consolidate them into one vector. There are 4 unique field names, so I 
> expect to end up with 4 vectors, holding 5 values. Instead, I get this: 
>
> ({:company_profile_id ["2"], :topic :company, 
> :how-many-rows-and-fields-from-database 13, :url ["mikeshawauto.com"], 
> :reference_id ["331089191"], :reference_source ["ein"]})
>
> I expect: 
>
> {:company_profile_id ["2" "2"]
>
> but I get: 
>
> {:company_profile_id ["2"]
>
> The documents are combined in a map in an atom, with this function: 
>
>
> (def documents (atom {}))
>
>
> (defn update-documents
>   [denormalized-id field-name field-value 
> how-many-rows-and-fields-from-database topic]
>   {:pre [
>          (not (nil? denormalized-id))
>          (not (nil? field-name))
>          (vector? field-value)
>          ]}
>   (swap! documents
>          (fn [old-documents]
>            (slingshot/try+
>             (let [
>                   document (get old-documents denormalized-id {})
>                   old-field-value (get old-documents field-name [])
>                   new-field-value (into old-field-value field-value)
>                   document (assoc document field-name new-field-value)
>
>                   previous-how-many-rows-and-fields-from-database (get 
> document :how-many-rows-and-fields-from-database 0)
>                   new-how-many-rows-and-fields-from-database (+ 
> previous-how-many-rows-and-fields-from-database 
> how-many-rows-and-fields-from-database)
>                   document (assoc document :topic topic)
>                   document (assoc document 
> :how-many-rows-and-fields-from-database 
> new-how-many-rows-and-fields-from-database)
>                   new-documents (assoc old-documents denormalized-id 
> document)
>                   ]
>               new-documents)
>             (catch Object o
>               (errors/log o) 
>               (slingshot/throw+ {
>                                  :type ::update-documents
>                                  :error o
>                                  }
>                                 ))))))
>
> Can I assume that this always gives me 2 values in a vector? 
>
>                   old-field-value (get old-documents field-name [])
>                   new-field-value (into old-field-value field-value)
>                   document (assoc document field-name new-field-value)
>
> I'm going to guess that the bug is somewhere else in my code. But if 
> anyone sees a flaw in this function, I'd be grateful if you could point it 
> out to me. 
>
>
>
>

-- 
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
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to