private long writeDatabaseVersionHeaderInternal(Connection connection, DatabaseVersionHeader databaseVersionHeader) throws SQLException { try (PreparedStatement preparedStatement = connection.prepareStatement( DatabaseConnectionFactory.getStatement("databaseversion.insert.all.writeDatabaseVersion.sql"), Statement.RETURN_GENERATED_KEYS)) { preparedStatement.setString(1, DatabaseVersionStatus.MASTER.toString()); preparedStatement.setTimestamp(2, new Timestamp(databaseVersionHeader.getDate().getTime())); preparedStatement.setString(3, databaseVersionHeader.getClient()); preparedStatement.setString(4, databaseVersionHeader.getVectorClock().toString()); int affectedRows = preparedStatement.executeUpdate(); if (affectedRows == 0) { throw new SQLException("Cannot add database version header. Affected rows is zero."); } try (ResultSet resultSet = preparedStatement.getGeneratedKeys()) { if (resultSet.next()) { return resultSet.getLong(1); } else { throw new SQLException("Cannot get new database version ID"); } } } }
/** * Marks the database version with the given vector clock as DIRTY, i.e. * sets the {@link DatabaseVersionStatus} to {@link DatabaseVersionStatus#DIRTY DIRTY}. * Marking a database version dirty will lead to a deletion in the next sync up * cycle. * * @param vectorClock Identifies the database version to mark dirty */ public void markDatabaseVersionDirty(VectorClock vectorClock) { try (PreparedStatement preparedStatement = getStatement("databaseversion.update.master.markDatabaseVersionDirty.sql")) { preparedStatement.setString(1, DatabaseVersionStatus.DIRTY.toString()); preparedStatement.setString(2, vectorClock.toString()); preparedStatement.executeUpdate(); connection.commit(); } catch (SQLException e) { throw new RuntimeException(e); } }
public Iterator<DatabaseVersion> getDirtyDatabaseVersions() { try (PreparedStatement preparedStatement = getStatement("databaseversion.select.dirty.getDirtyDatabaseVersions.sql")) { preparedStatement.setString(1, DatabaseVersionStatus.DIRTY.toString()); return new DatabaseVersionIterator(preparedStatement.executeQuery()); } catch (SQLException e) { throw new RuntimeException(e); } }