(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))))))))) |