MySQL JDBCドライバーのリリースノートによると、同時実行の読み取り専用、転送専用の結果、および正確にInteger / MIN_VALUEのフェッチサイズの接続を使用する場合にのみ、結果をストリーミングする必要があります。
ただし、これらの条件を(に対して[mysql/mysql-connector-java "5.1.21"]
)正確に生成しようとすると、SQLクエリは永久に実行されます(つまり、JVMのメモリを使い果たしてブームになるまで)。
(let [query (query-only (fetch-all big-table))]
(clojure.java.jdbc/with-connection (get-connection (:db query))
(clojure.java.jdbc/with-query-results rows
(into [{:fetch-size Integer/MIN_VALUE
:concurrency :read-only
:result-type :forward-only} (:sql-str query)]
(:params query))
(throw (Exception. (str "retrieved a row: " (pr-str (first rows)))))))))