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