From 978d38b9ee059a142afeee865ae2e77fb419175b Mon Sep 17 00:00:00 2001 From: goapunk <goapunk@riseup.net> Date: Thu, 28 Jun 2018 11:35:41 +0200 Subject: [PATCH] Add database migration for contact type --- .../briarproject/bramble/db/JdbcDatabase.java | 3 +- .../bramble/db/Migration39_40.java | 57 +++++++++++++++++++ 2 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 bramble-core/src/main/java/org/briarproject/bramble/db/Migration39_40.java diff --git a/bramble-core/src/main/java/org/briarproject/bramble/db/JdbcDatabase.java b/bramble-core/src/main/java/org/briarproject/bramble/db/JdbcDatabase.java index 45bba6401..144c94c9c 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/db/JdbcDatabase.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/db/JdbcDatabase.java @@ -37,6 +37,7 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.HashMap; @@ -393,7 +394,7 @@ abstract class JdbcDatabase implements Database<Connection> { // Package access for testing List<Migration<Connection>> getMigrations() { - return singletonList(new Migration38_39()); + return Arrays.asList(new Migration38_39(), new Migration39_40()); } private void storeSchemaVersion(Connection txn, int version) diff --git a/bramble-core/src/main/java/org/briarproject/bramble/db/Migration39_40.java b/bramble-core/src/main/java/org/briarproject/bramble/db/Migration39_40.java new file mode 100644 index 000000000..7a6b8a35f --- /dev/null +++ b/bramble-core/src/main/java/org/briarproject/bramble/db/Migration39_40.java @@ -0,0 +1,57 @@ +package org.briarproject.bramble.db; + +import org.briarproject.bramble.api.db.DbException; + +import java.sql.Connection; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.logging.Logger; + +import javax.annotation.Nullable; + +import static java.util.logging.Level.WARNING; +import static org.briarproject.bramble.util.LogUtils.logException; + +class Migration39_40 implements Migration<Connection> { + + private static final Logger LOG = + Logger.getLogger(Migration39_40.class.getName()); + + @Override + public int getStartVersion() { + return 39; + } + + @Override + public int getEndVersion() { + return 40; + } + + @Override + public void migrate(Connection txn) throws DbException { + Statement s = null; + try { + s = txn.createStatement(); + // Add type column to contacts + s.execute("ALTER TABLE contacts" + + " ADD type INT"); + // Set type to REGULAR (0) + s.execute("UPDATE contacts" + + " SET type = 0"); + // Set type NOT NULL + s.execute("ALTER TABLE contacts" + + " ALTER COLUMN type INT NOT NULL"); + } catch (SQLException e) { + tryToClose(s); + throw new DbException(e); + } + } + + private void tryToClose(@Nullable Statement s) { + try { + if (s != null) s.close(); + } catch (SQLException e) { + logException(LOG, WARNING, e); + } + } +} -- GitLab