(ns chef.database (:require [honey.sql :as sql] [next.jdbc :as jdbc] [chef.database.init :as cdinit])) (def db (delay (jdbc/get-datasource {:dbtype "sqlite" :dbname "chef.db"}))) (def ^:private patches {"init" cdinit/exec!}) (defn run-patches! [] (->> (sql/format {:create-table [:applied-patches :if-not-exists] :with-columns [[:name :text]]}) (jdbc/execute! @db)) (let [applied-patches (->> (sql/format {:select [:*] :from [:applied-patches]}) (jdbc/execute! @db) (map :applied_patches/name))] (doseq [[k patch] patches] (when (neg? (.indexOf applied-patches k)) (println (str "DB: Running " k " patch...")) (patch @db) (->> (sql/format {:insert-into :applied-patches :values [[k]]}) (jdbc/execute! @db))))))