From fec384c200d861aea68d06745cb37fcae385ebf4 Mon Sep 17 00:00:00 2001 From: akwizgran <michael@briarproject.org> Date: Tue, 15 May 2018 14:15:10 +0100 Subject: [PATCH] Add migration for NOT NULL constraint. --- .../briarproject/bramble/db/JdbcDatabase.java | 5 +- .../bramble/db/Migration38_39.java | 54 +++++++++++++++++++ 2 files changed, 57 insertions(+), 2 deletions(-) create mode 100644 bramble-core/src/main/java/org/briarproject/bramble/db/Migration38_39.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 9e38a717bb..d2f6dff16c 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 @@ -53,6 +53,7 @@ import java.util.logging.Logger; import javax.annotation.Nullable; import static java.sql.Types.INTEGER; +import static java.util.Collections.singletonList; import static java.util.logging.Level.INFO; import static java.util.logging.Level.WARNING; import static org.briarproject.bramble.api.db.Metadata.REMOVE; @@ -74,7 +75,7 @@ import static org.briarproject.bramble.db.ExponentialBackoff.calculateExpiry; abstract class JdbcDatabase implements Database<Connection> { // Package access for testing - static final int CODE_SCHEMA_VERSION = 38; + static final int CODE_SCHEMA_VERSION = 39; // Rotation period offsets for incoming transport keys private static final int OFFSET_PREV = -1; @@ -389,7 +390,7 @@ abstract class JdbcDatabase implements Database<Connection> { // Package access for testing List<Migration<Connection>> getMigrations() { - return Collections.emptyList(); + return singletonList(new Migration38_39()); } private void storeSchemaVersion(Connection txn, int version) diff --git a/bramble-core/src/main/java/org/briarproject/bramble/db/Migration38_39.java b/bramble-core/src/main/java/org/briarproject/bramble/db/Migration38_39.java new file mode 100644 index 0000000000..2febcb1dc5 --- /dev/null +++ b/bramble-core/src/main/java/org/briarproject/bramble/db/Migration38_39.java @@ -0,0 +1,54 @@ +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; + +class Migration38_39 implements Migration<Connection> { + + private static final Logger LOG = + Logger.getLogger(Migration38_39.class.getName()); + + @Override + public int getStartVersion() { + return 38; + } + + @Override + public int getEndVersion() { + return 39; + } + + @Override + public void migrate(Connection txn) throws DbException { + Statement s = null; + try { + s = txn.createStatement(); + // Add not null constraints + s.execute("ALTER TABLE outgoingKeys" + + " ALTER COLUMN contactId" + + " SET NOT NULL"); + s.execute("ALTER TABLE incomingKeys" + + " ALTER COLUMN contactId" + + " SET 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) { + if (LOG.isLoggable(WARNING)) LOG.log(WARNING, e.toString(), e); + } + } +} -- GitLab