From c7e6d5436534ac56292eb71a10b391ab46a58b76 Mon Sep 17 00:00:00 2001 From: Paul Bergeron Date: Tue, 26 Aug 2014 19:43:05 -0700 Subject: [PATCH] Use counter for migration version information instead of rows --- driver/cassandra/cassandra.go | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/driver/cassandra/cassandra.go b/driver/cassandra/cassandra.go index 591ca6f..4415daf 100644 --- a/driver/cassandra/cassandra.go +++ b/driver/cassandra/cassandra.go @@ -15,6 +15,7 @@ type Driver struct { } const tableName = "schema_migrations" +const versionRow = 1 // Cassandra Driver URL format: // cassandra://host:port/keyspace @@ -47,7 +48,7 @@ func (driver *Driver) Close() error { } func (driver *Driver) ensureVersionTableExists() error { - err := driver.session.Query("CREATE TABLE IF NOT EXISTS " + tableName + " (version bigint primary key);").Exec() + err := driver.session.Query("CREATE TABLE IF NOT EXISTS " + tableName + " (version counter, versionRow bigint primary key);").Exec() if err != nil { return err } @@ -63,13 +64,13 @@ func (driver *Driver) Migrate(f file.File, pipe chan interface{}) { pipe <- f if f.Direction == direction.Up { - err := driver.session.Query("INSERT INTO "+tableName+" (version) VALUES (?)", f.Version).Exec() + err := driver.session.Query("UPDATE "+tableName+" SET version = version + 1 where versionRow = ?", versionRow).Exec() if err != nil { pipe <- err return } } else if f.Direction == direction.Down { - err := driver.session.Query("DELETE FROM "+tableName+" WHERE version = ?", f.Version).Exec() + err := driver.session.Query("UPDATE "+tableName+" SET version = version - 1 where versionRow = ?", versionRow).Exec() if err != nil { pipe <- err return @@ -91,6 +92,6 @@ func (driver *Driver) Migrate(f file.File, pipe chan interface{}) { func (driver *Driver) Version() (uint64, error) { var version int64 - err := driver.session.Query("SELECT version FROM " + tableName + " ORDER BY version DESC LIMIT 1").Scan(&version) + err := driver.session.Query("SELECT version FROM "+tableName+" WHERE versionRow = ?", versionRow).Scan(&version) return uint64(version), err }