遅延シーケンスとwith系マクロの相性の悪さ
(defroutes main-routes (GET "/somecsv" [] (sql/with-connection db ;; DBから大量のデータを取って文字列の遅延シーケンスを返す (some-table-to-csv-lines ...) )))
こういうのを書くと、遅延シーケンスが最後まで計算される前にDBのコネクションがクローズされてしまって、それ以降、未計算の要素を取るとエラーになる。
せっかくRingに遅延シーケンスやストリームが渡せるのに、DBと併用できないのはかなり残念。
Pythonみたいなコルーチンがあればいいんだけど、JavaVMの仕組み上無理そうだ。こういうことをやりたいときは、DBコネクションの管理を手動でやるか、別スレッドを起こしてPipedStreamやSynchronizedQueueでつないでやるしかないのかな。