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