From bf0648d022ddbb7001fdb28b4b4d47f190ea8ed7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Cam=20Sa=C3=BCl?= <cammsaul@gmail.com>
Date: Wed, 28 Oct 2015 13:48:45 -0700
Subject: [PATCH] `defmigration` macro for defining data migrations

---
 resources/migrations/018_add_data_migrations_table.yaml | 2 +-
 src/metabase/db.clj                                     | 2 ++
 src/metabase/db/migrations.clj                          | 7 ++++---
 3 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/resources/migrations/018_add_data_migrations_table.yaml b/resources/migrations/018_add_data_migrations_table.yaml
index 641e213296d..7ef821fe35f 100644
--- a/resources/migrations/018_add_data_migrations_table.yaml
+++ b/resources/migrations/018_add_data_migrations_table.yaml
@@ -8,7 +8,7 @@ databaseChangeLog:
             columns:
               - column:
                   name: id
-                  type: varchar
+                  type: VARCHAR
                   constraints:
                     primaryKey: true
                     nullable: false
diff --git a/src/metabase/db.clj b/src/metabase/db.clj
index 02566adc2d0..b52a434b561 100644
--- a/src/metabase/db.clj
+++ b/src/metabase/db.clj
@@ -95,6 +95,7 @@
 
    *  `:up`            - Migrate up
    *  `:down`          - Rollback *all* migrations
+   *  `:down-one`      - Rollback a single migration
    *  `:print`         - Just print the SQL for running the migrations, don't actually run them.
    *  `:release-locks` - Manually release migration locks left by an earlier failed migration.
                          (This shouldn't be necessary now that we run migrations inside a transaction,
@@ -110,6 +111,7 @@
          (case direction
            :up            (.update liquibase "")
            :down          (.rollback liquibase 10000 "")
+           :down-one      (.rollback liquibase 1 "")
            :print         (let [writer (StringWriter.)]
                             (.update liquibase "" writer)
                             (.toString writer))
diff --git a/src/metabase/db/migrations.clj b/src/metabase/db/migrations.clj
index bc333ee5c0e..69c56505168 100644
--- a/src/metabase/db/migrations.clj
+++ b/src/metabase/db/migrations.clj
@@ -12,9 +12,10 @@
 ;;; # Migration Helpers
 
 (defn- migration-ran? [migration]
-  (boolean (seq (k/select "data_migrations"
-                          (k/where {:id (name migration)})
-                          (k/limit 1)))))
+  (-> (k/select :data_migrations
+                (k/aggregate (count :*) :count)
+                (k/where {:id (name migration)}))
+      first :count (> 0)))
 
 (defn- run-migration-if-needed
   "Run MIGRATION if needed. MIGRATION should be a symbol naming a fn that takes no arguments.
-- 
GitLab