Advertisement
Guest User

core.async and with-open

a guest
Nov 15th, 2017
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. (jdbc/atomic conn
  2.  (with-open [cursor (jdbc/fetch-lazy conn [sql_query])]
  3.    (let [lazyseq (jdbc/cursor->lazyseq cursor)
  4.          counter (atom 1)]
  5.      (swap! lazyseq_maps assoc :session_id {:get_next? (chan 1) :over_500 (chan 1) :data []})
  6.      (>!! (:get_next? (:session_id @lazyseq_maps)) true)
  7.      (go
  8.        (doseq [row lazyseq]
  9.          (swap! counter inc)
  10.          (when (<! (:get_next? (:session_id @lazyseq_maps)))
  11.            (swap! lazyseq_maps update-in [:session_id :data] conj row)
  12.            (if (not= 0 (mod @counter 500))
  13.              (>! (:get_next? (:session_id @lazyseq_maps)) true)
  14.              (>! (:over_500 (:session_id @lazyseq_maps)) true))))
  15.         ;
  16.         (close! (:get_next? (:session_id @lazyseq_maps)))
  17.         (close! (:over_500 (:session_id @lazyseq_maps)))
  18.         (.close conn))
  19.  
  20.      (when (<!! (:over_500 (:session_id @lazyseq_maps))) {:message "over 500 rows"
  21.                                                           :id :session_id
  22.                                                           :data (:data (:session_id @lazyseq_maps))}))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement