(ns metabase.driver.sql-jdbc.sync.common (:require [metabase.driver.sql-jdbc.execute :as sql-jdbc.execute]) (:import (java.sql Connection PreparedStatement ResultSet))) | |
(set! *warn-on-reflection* true) | |
Create a PreparedStatement for metadata queries; set | (defn prepare-statement
^PreparedStatement [driver ^Connection conn ^String sql params]
;; `sql-jdbc.execute/prepared-statement` will set `TYPE_FORWARD_ONLY`/`CONCUR_READ_ONLY`/`FETCH_FORWARD` if
;; possible, although I'm not sure if that will make a difference if we don't actually realize the ResultSet
(doto ^PreparedStatement (sql-jdbc.execute/prepared-statement driver conn sql params)
(.setMaxRows 0))) |
Creates an (rs->row-thunk rs)-> row-thunk
(reducible-results
;; | (defn reducible-results
[rs-thunk rs->row-thunk]
(reify clojure.lang.IReduceInit
(reduce [_ rf init]
(with-open [^ResultSet rs (rs-thunk)]
(reduce
((take-while some?) rf)
init
(let [row-thunk (rs->row-thunk rs)]
(repeatedly #(when (.next rs)
(row-thunk))))))))) |