diff --git a/src/airlift/core.clj b/src/airlift/core.clj index fefc82c..72e063f 100644 --- a/src/airlift/core.clj +++ b/src/airlift/core.clj @@ -11,14 +11,6 @@ chan (ch/channel (:sftp config))] (doseq [table (get-in config [:db :tables])] (let [res (db/query conn (str "SELECT * FROM " table)) - headers (->> (first res) - (keys) - (map name) - (vec) - (conj [])) - body (->> (rest res) - (map (comp vec vals)) - (vec) - (apply conj headers))] - (csv/write body (str table ".csv")) + csv-data (db/resultset->csv res)] + (csv/write csv-data (str table ".csv")) (ch/upload chan (str table ".csv")))))) diff --git a/src/airlift/db.clj b/src/airlift/db.clj index 7b1c2a3..8b1f9cb 100644 --- a/src/airlift/db.clj +++ b/src/airlift/db.clj @@ -31,3 +31,14 @@ "Returns vector of table columns" (->> (.getMetaData response) (extract-columns))) + +(defn resultset->csv [resultSet] + "Given a database result returns a csv-like vector that can be written to disk" + (let [headers (->> (first resultSet) + (keys) + (map name) + (vec)) + body (->> (rest resultSet) + (map (comp vec vals)) + (vec))] + (apply conj (conj [] headers) body)))