From 2289de6a4f23df9124cf6ae5a4f5bb6af21b392a Mon Sep 17 00:00:00 2001 From: felmer <felmer> Date: Mon, 18 Aug 2008 13:31:54 +0000 Subject: [PATCH] LMS-529 the necessity of sequence updating can be configured. SVN: 7949 --- .../DatabaseConfigurationContext.java | 12 +++++++++ .../postgresql/PostgreSQLDAOFactory.java | 5 +++- .../postgresql/PostgreSQLMassUploader.java | 26 ++++++++++++++----- 3 files changed, 36 insertions(+), 7 deletions(-) diff --git a/dbmigration/source/java/ch/systemsx/cisd/dbmigration/DatabaseConfigurationContext.java b/dbmigration/source/java/ch/systemsx/cisd/dbmigration/DatabaseConfigurationContext.java index 44bfc6ddf47..754f6f5bd4e 100644 --- a/dbmigration/source/java/ch/systemsx/cisd/dbmigration/DatabaseConfigurationContext.java +++ b/dbmigration/source/java/ch/systemsx/cisd/dbmigration/DatabaseConfigurationContext.java @@ -57,6 +57,8 @@ public class DatabaseConfigurationContext implements DisposableBean } private ISequenceNameMapper sequenceNameMapper; + + private boolean sequenceUpdateNeeded; private String adminUser; @@ -419,6 +421,16 @@ public class DatabaseConfigurationContext implements DisposableBean this.sequenceNameMapper = sequenceNameMapper; } + public final boolean isSequenceUpdateNeeded() + { + return sequenceUpdateNeeded; + } + + public final void setSequenceUpdateNeeded(boolean sequenceUpdateNeeded) + { + this.sequenceUpdateNeeded = sequenceUpdateNeeded; + } + /** * Returns <code>true</code> if the current database should be dropped and (re)created from * scratch. diff --git a/dbmigration/source/java/ch/systemsx/cisd/dbmigration/postgresql/PostgreSQLDAOFactory.java b/dbmigration/source/java/ch/systemsx/cisd/dbmigration/postgresql/PostgreSQLDAOFactory.java index 4226b9683bb..93a42c56798 100644 --- a/dbmigration/source/java/ch/systemsx/cisd/dbmigration/postgresql/PostgreSQLDAOFactory.java +++ b/dbmigration/source/java/ch/systemsx/cisd/dbmigration/postgresql/PostgreSQLDAOFactory.java @@ -20,6 +20,7 @@ import java.sql.SQLException; import javax.sql.DataSource; +import ch.systemsx.cisd.common.db.ISequenceNameMapper; import ch.systemsx.cisd.common.db.ISqlScriptExecutor; import ch.systemsx.cisd.common.exceptions.CheckedExceptionTunnel; import ch.systemsx.cisd.dbmigration.DatabaseConfigurationContext; @@ -60,7 +61,9 @@ public class PostgreSQLDAOFactory implements IDAOFactory databaseVersionLogDAO = new DatabaseVersionLogDAO(dataSource, context.getLobHandler()); try { - massUploader = new PostgreSQLMassUploader(dataSource, context.getSequenceNameMapper()); + ISequenceNameMapper mapper = context.getSequenceNameMapper(); + boolean sequenceUpdateNeeded = context.isSequenceUpdateNeeded(); + massUploader = new PostgreSQLMassUploader(dataSource, mapper, sequenceUpdateNeeded); } catch (final SQLException ex) { throw new CheckedExceptionTunnel(ex); diff --git a/dbmigration/source/java/ch/systemsx/cisd/dbmigration/postgresql/PostgreSQLMassUploader.java b/dbmigration/source/java/ch/systemsx/cisd/dbmigration/postgresql/PostgreSQLMassUploader.java index 223996c646b..f99187d5a18 100644 --- a/dbmigration/source/java/ch/systemsx/cisd/dbmigration/postgresql/PostgreSQLMassUploader.java +++ b/dbmigration/source/java/ch/systemsx/cisd/dbmigration/postgresql/PostgreSQLMassUploader.java @@ -40,6 +40,7 @@ import org.springframework.jdbc.core.simple.SimpleJdbcDaoSupport; import ch.systemsx.cisd.common.db.ISequenceNameMapper; import ch.systemsx.cisd.common.exceptions.CheckedExceptionTunnel; +import ch.systemsx.cisd.common.exceptions.EnvironmentFailureException; import ch.systemsx.cisd.common.logging.LogCategory; import ch.systemsx.cisd.common.logging.LogFactory; import ch.systemsx.cisd.dbmigration.IMassUploader; @@ -60,14 +61,17 @@ public class PostgreSQLMassUploader extends SimpleJdbcDaoSupport implements IMas private final ISequenceNameMapper sequenceNameMapper; + private final boolean sequenceUpdateNeeded; + /** * Creates an instance for the specified data source and sequence mapper. */ public PostgreSQLMassUploader(final DataSource dataSource, - final ISequenceNameMapper sequenceNameMapper) throws SQLException + final ISequenceNameMapper sequenceNameMapper, boolean sequenceUpdateNeeded) throws SQLException { this.dataSource = dataSource; this.sequenceNameMapper = sequenceNameMapper; + this.sequenceUpdateNeeded = sequenceUpdateNeeded; setDataSource(dataSource); } @@ -88,9 +92,17 @@ public class PostgreSQLMassUploader extends SimpleJdbcDaoSupport implements IMas { performMassUpload(file, tables); } - for (final String name : tables) + if (sequenceUpdateNeeded) { - fixSequence(name); + boolean successful = true; + for (final String name : tables) + { + successful &= fixSequence(name); + } + if (successful == false) + { + throw new EnvironmentFailureException("At least one sequence couldn't be updated."); + } } } @@ -123,8 +135,8 @@ public class PostgreSQLMassUploader extends SimpleJdbcDaoSupport implements IMas { getCopyManager().copyInQuery( "COPY " + tableName + " FROM STDIN WITH CSV HEADER", is); - tables.add(tableName); } + tables.add(tableName); } finally { IOUtils.closeQuietly(is); @@ -135,12 +147,12 @@ public class PostgreSQLMassUploader extends SimpleJdbcDaoSupport implements IMas } } - private final void fixSequence(final String tableName) + private final boolean fixSequence(final String tableName) { final String sequenceName = sequenceNameMapper.getSequencerForTable(tableName); if (sequenceName == null) { - return; + return true; } try { @@ -154,10 +166,12 @@ public class PostgreSQLMassUploader extends SimpleJdbcDaoSupport implements IMas operationLog.info("Updating sequence " + sequenceName + " for table " + tableName + " to value " + newSequenceValue); } + return true; } catch (final DataAccessException ex) { operationLog.error("Failed to set new value for sequence '" + sequenceName + "' of table '" + tableName + "'.", ex); + return false; } } -- GitLab