summaryrefslogtreecommitdiff
path: root/src/chef/database.clj
diff options
context:
space:
mode:
Diffstat (limited to 'src/chef/database.clj')
-rw-r--r--src/chef/database.clj23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/chef/database.clj b/src/chef/database.clj
new file mode 100644
index 0000000..ec5d89d
--- /dev/null
+++ b/src/chef/database.clj
@@ -0,0 +1,23 @@
+(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))))))