From 2b2e16652a1749e81c2d83ce95f45a9b3c2f061a Mon Sep 17 00:00:00 2001 From: felmer <felmer> Date: Wed, 15 Aug 2007 08:24:14 +0000 Subject: [PATCH] - enable database language if necessary - move PostgreSQL class to package postgresql SVN: 1369 --- .../cisd/dbmigration/DBUtilities.java | 13 +++---- .../DatabaseConfigurationContext.java | 2 +- .../dbmigration/DatabaseVersionLogDAO.java | 4 +-- .../cisd/dbmigration/SqlScriptExecutor.java | 4 +-- .../{ => postgresql}/PostgreSQLAdminDAO.java | 34 +++++++++++++++---- .../PostgreSQLDAOFactory.java | 10 +++++- .../PostgreSQLMassUploader.java | 3 +- 7 files changed, 51 insertions(+), 19 deletions(-) rename dbmigration/source/java/ch/systemsx/cisd/dbmigration/{ => postgresql}/PostgreSQLAdminDAO.java (68%) rename dbmigration/source/java/ch/systemsx/cisd/dbmigration/{ => postgresql}/PostgreSQLDAOFactory.java (81%) rename dbmigration/source/java/ch/systemsx/cisd/dbmigration/{ => postgresql}/PostgreSQLMassUploader.java (98%) diff --git a/dbmigration/source/java/ch/systemsx/cisd/dbmigration/DBUtilities.java b/dbmigration/source/java/ch/systemsx/cisd/dbmigration/DBUtilities.java index 94e340767a7..8f0fc88535d 100644 --- a/dbmigration/source/java/ch/systemsx/cisd/dbmigration/DBUtilities.java +++ b/dbmigration/source/java/ch/systemsx/cisd/dbmigration/DBUtilities.java @@ -25,7 +25,7 @@ import ch.systemsx.cisd.common.db.SQLStateUtils; * * @author Franz-Josef Elmer */ -class DBUtilities +public class DBUtilities { /** * Checks whether given <code>DataAccessException</code> is caused by a "database does not exist" exception. @@ -33,22 +33,23 @@ class DBUtilities * This is database specific. * </p> */ - static boolean isDBNotExistException(DataAccessException ex) + public static boolean isDBNotExistException(DataAccessException ex) { // 3D000: INVALID CATALOG NAME return SQLStateUtils.isInvalidCatalogName(SQLStateUtils.getSqlState(ex)); } - private DBUtilities() {} - /** - * Checks whether given <code>DataAccessException</code> is caused by a "user already exists" exception. + * Checks whether given <code>DataAccessException</code> is caused by a "duplicate object" exception. * <p> * This is database specific. * </p> */ - static boolean ownerAlreadyExists(DataAccessException ex) { + public static boolean isDuplicateObjectException(DataAccessException ex) { // 42710 DUPLICATE OBJECT return SQLStateUtils.isDuplicateObject(SQLStateUtils.getSqlState(ex)); } + + private DBUtilities() {} + } diff --git a/dbmigration/source/java/ch/systemsx/cisd/dbmigration/DatabaseConfigurationContext.java b/dbmigration/source/java/ch/systemsx/cisd/dbmigration/DatabaseConfigurationContext.java index f7c2f9cb584..a635dad82f0 100644 --- a/dbmigration/source/java/ch/systemsx/cisd/dbmigration/DatabaseConfigurationContext.java +++ b/dbmigration/source/java/ch/systemsx/cisd/dbmigration/DatabaseConfigurationContext.java @@ -118,7 +118,7 @@ public class DatabaseConfigurationContext /** * Returns data source for admin purposes. */ - final DataSource getAdminDataSource() + public final DataSource getAdminDataSource() { if (adminDataSource == null) { diff --git a/dbmigration/source/java/ch/systemsx/cisd/dbmigration/DatabaseVersionLogDAO.java b/dbmigration/source/java/ch/systemsx/cisd/dbmigration/DatabaseVersionLogDAO.java index 7289a5e5b68..ddf73b37211 100644 --- a/dbmigration/source/java/ch/systemsx/cisd/dbmigration/DatabaseVersionLogDAO.java +++ b/dbmigration/source/java/ch/systemsx/cisd/dbmigration/DatabaseVersionLogDAO.java @@ -49,7 +49,7 @@ import ch.systemsx.cisd.common.exceptions.EnvironmentFailureException; * * @author Franz-Josef Elmer */ -class DatabaseVersionLogDAO extends SimpleJdbcDaoSupport implements IDatabaseVersionLogDAO +public class DatabaseVersionLogDAO extends SimpleJdbcDaoSupport implements IDatabaseVersionLogDAO { private static final String ENCODING = "utf8"; @@ -111,7 +111,7 @@ class DatabaseVersionLogDAO extends SimpleJdbcDaoSupport implements IDatabaseVer final LobHandler lobHandler; - DatabaseVersionLogDAO(DataSource dataSource, LobHandler lobHandler) + public DatabaseVersionLogDAO(DataSource dataSource, LobHandler lobHandler) { setDataSource(dataSource); this.lobHandler = lobHandler; diff --git a/dbmigration/source/java/ch/systemsx/cisd/dbmigration/SqlScriptExecutor.java b/dbmigration/source/java/ch/systemsx/cisd/dbmigration/SqlScriptExecutor.java index 54477700ba0..db480d9b9d2 100644 --- a/dbmigration/source/java/ch/systemsx/cisd/dbmigration/SqlScriptExecutor.java +++ b/dbmigration/source/java/ch/systemsx/cisd/dbmigration/SqlScriptExecutor.java @@ -25,9 +25,9 @@ import org.springframework.jdbc.core.support.JdbcDaoSupport; * * @author Franz-Josef Elmer */ -class SqlScriptExecutor extends JdbcDaoSupport implements ISqlScriptExecutor +public class SqlScriptExecutor extends JdbcDaoSupport implements ISqlScriptExecutor { - SqlScriptExecutor(DataSource dataSource) + public SqlScriptExecutor(DataSource dataSource) { setDataSource(dataSource); } diff --git a/dbmigration/source/java/ch/systemsx/cisd/dbmigration/PostgreSQLAdminDAO.java b/dbmigration/source/java/ch/systemsx/cisd/dbmigration/postgresql/PostgreSQLAdminDAO.java similarity index 68% rename from dbmigration/source/java/ch/systemsx/cisd/dbmigration/PostgreSQLAdminDAO.java rename to dbmigration/source/java/ch/systemsx/cisd/dbmigration/postgresql/PostgreSQLAdminDAO.java index 0364de4323f..4ae8800d11b 100644 --- a/dbmigration/source/java/ch/systemsx/cisd/dbmigration/PostgreSQLAdminDAO.java +++ b/dbmigration/source/java/ch/systemsx/cisd/dbmigration/postgresql/PostgreSQLAdminDAO.java @@ -14,16 +14,20 @@ * limitations under the License. */ -package ch.systemsx.cisd.dbmigration; +package ch.systemsx.cisd.dbmigration.postgresql; import javax.sql.DataSource; import org.apache.log4j.Logger; import org.springframework.dao.DataAccessException; +import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.simple.SimpleJdbcDaoSupport; +import ch.systemsx.cisd.common.db.SQLStateUtils; import ch.systemsx.cisd.common.logging.LogCategory; import ch.systemsx.cisd.common.logging.LogFactory; +import ch.systemsx.cisd.dbmigration.DBUtilities; +import ch.systemsx.cisd.dbmigration.IDatabaseAdminDAO; /** * Implementation of {@link IDatabaseAdminDAO} for PostgreSQL. @@ -68,7 +72,7 @@ public class PostgreSQLAdminDAO extends SimpleJdbcDaoSupport implements IDatabas } } catch (DataAccessException ex) { - if (DBUtilities.ownerAlreadyExists(ex)) + if (DBUtilities.isDuplicateObjectException(ex)) { if (operationLog.isInfoEnabled()) { @@ -84,10 +88,28 @@ public class PostgreSQLAdminDAO extends SimpleJdbcDaoSupport implements IDatabas public void createDatabase() { - getJdbcTemplate().execute( - "create database " + database + " with owner = " + owner - + " encoding = 'utf8' tablespace = pg_default;" + "alter database " + database - + " set default_with_oids = off;"); + JdbcTemplate jdbcTemplate = getJdbcTemplate(); + jdbcTemplate.execute("create database " + database + " with owner = " + owner + + " encoding = 'utf8' tablespace = pg_default;" + + "alter database " + database + " set default_with_oids = off;"); + try + { + jdbcTemplate.execute("create trusted procedural language 'plpgsql' handler plpgsql_call_handler " + + "validator plpgsql_validator;"); + } catch (DataAccessException e) + { + if (DBUtilities.isDuplicateObjectException(e)) + { + if (operationLog.isInfoEnabled()) + { + operationLog.info("Couldn't create language:" + e+":"+SQLStateUtils.getSqlState(e)); + } + } else + { + operationLog.error("Database language 'plpgsql' couldn't be created:", e); + throw e; + } + } } public void dropDatabase() diff --git a/dbmigration/source/java/ch/systemsx/cisd/dbmigration/PostgreSQLDAOFactory.java b/dbmigration/source/java/ch/systemsx/cisd/dbmigration/postgresql/PostgreSQLDAOFactory.java similarity index 81% rename from dbmigration/source/java/ch/systemsx/cisd/dbmigration/PostgreSQLDAOFactory.java rename to dbmigration/source/java/ch/systemsx/cisd/dbmigration/postgresql/PostgreSQLDAOFactory.java index 9be5d5b16f5..e9bc2e95089 100644 --- a/dbmigration/source/java/ch/systemsx/cisd/dbmigration/PostgreSQLDAOFactory.java +++ b/dbmigration/source/java/ch/systemsx/cisd/dbmigration/postgresql/PostgreSQLDAOFactory.java @@ -14,13 +14,21 @@ * limitations under the License. */ -package ch.systemsx.cisd.dbmigration; +package ch.systemsx.cisd.dbmigration.postgresql; import java.sql.SQLException; import javax.sql.DataSource; import ch.systemsx.cisd.common.exceptions.CheckedExceptionTunnel; +import ch.systemsx.cisd.dbmigration.DatabaseConfigurationContext; +import ch.systemsx.cisd.dbmigration.DatabaseVersionLogDAO; +import ch.systemsx.cisd.dbmigration.IDAOFactory; +import ch.systemsx.cisd.dbmigration.IDatabaseAdminDAO; +import ch.systemsx.cisd.dbmigration.IDatabaseVersionLogDAO; +import ch.systemsx.cisd.dbmigration.IMassUploader; +import ch.systemsx.cisd.dbmigration.ISqlScriptExecutor; +import ch.systemsx.cisd.dbmigration.SqlScriptExecutor; /** * Implementation of {@link IDAOFactory} for PostgreSQL. diff --git a/dbmigration/source/java/ch/systemsx/cisd/dbmigration/PostgreSQLMassUploader.java b/dbmigration/source/java/ch/systemsx/cisd/dbmigration/postgresql/PostgreSQLMassUploader.java similarity index 98% rename from dbmigration/source/java/ch/systemsx/cisd/dbmigration/PostgreSQLMassUploader.java rename to dbmigration/source/java/ch/systemsx/cisd/dbmigration/postgresql/PostgreSQLMassUploader.java index 291de73c560..493807a0ad5 100644 --- a/dbmigration/source/java/ch/systemsx/cisd/dbmigration/PostgreSQLMassUploader.java +++ b/dbmigration/source/java/ch/systemsx/cisd/dbmigration/postgresql/PostgreSQLMassUploader.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package ch.systemsx.cisd.dbmigration; +package ch.systemsx.cisd.dbmigration.postgresql; import java.io.File; import java.io.FileInputStream; @@ -37,6 +37,7 @@ import ch.systemsx.cisd.common.db.ISequencerHandler; import ch.systemsx.cisd.common.exceptions.CheckedExceptionTunnel; import ch.systemsx.cisd.common.logging.LogCategory; import ch.systemsx.cisd.common.logging.LogFactory; +import ch.systemsx.cisd.dbmigration.IMassUploader; /** * A {@link IMassUploader} for the PostgreSQL database. -- GitLab