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