From 6055dd84275cbdebe22c0b04e1aae9385a415ef6 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Andreas=20M=C3=BCller?= Date: Tue, 21 Sep 2010 13:03:31 +0000 Subject: [PATCH] added column name changer --- .gitattributes | 1 + .../database/update/ColumnNameChanger.java | 89 +++++++++++++++++++ 2 files changed, 90 insertions(+) create mode 100644 cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/update/ColumnNameChanger.java diff --git a/.gitattributes b/.gitattributes index e571f907e0..f2337db8bf 100644 --- a/.gitattributes +++ b/.gitattributes @@ -2256,6 +2256,7 @@ cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/types/SqlServer2005Da cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/types/SybaseDatabaseType.java -text cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/update/CdmUpdater.java -text cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/update/ColumnAdder.java -text +cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/update/ColumnNameChanger.java -text cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/update/ISchemaUpdater.java -text cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/update/ISchemaUpdaterStep.java -text cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/update/ITermUpdater.java -text diff --git a/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/update/ColumnNameChanger.java b/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/update/ColumnNameChanger.java new file mode 100644 index 0000000000..341a9d08f4 --- /dev/null +++ b/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/update/ColumnNameChanger.java @@ -0,0 +1,89 @@ +// $Id$ +/** +* Copyright (C) 2009 EDIT +* European Distributed Institute of Taxonomy +* http://www.e-taxonomy.eu +* +* The contents of this file are subject to the Mozilla Public License Version 1.1 +* See LICENSE.TXT at the top of this package for the full license terms. +*/ +package eu.etaxonomy.cdm.database.update; + +import java.sql.SQLException; + +import org.apache.log4j.Logger; + +import eu.etaxonomy.cdm.common.IProgressMonitor; +import eu.etaxonomy.cdm.database.DatabaseTypeEnum; +import eu.etaxonomy.cdm.database.ICdmDataSource; + +/** + * @author a.mueller + * @date 16.09.2010 + * + */ +public class ColumnNameChanger extends SchemaUpdaterStepBase implements ISchemaUpdaterStep { + @SuppressWarnings("unused") + private static final Logger logger = Logger.getLogger(ColumnNameChanger.class); + + private String tableName; + private String newColumnName; + private String oldColumnName; + private boolean includeAudTable; + + public static final ColumnNameChanger NewInstance(String stepName, String tableName, String oldColumnName, String newColumnName, boolean includeAudTable){ + return new ColumnNameChanger(stepName, tableName, oldColumnName, newColumnName, includeAudTable, null); + } + + protected ColumnNameChanger(String stepName, String tableName, String oldColumnName, String newColumnName, boolean includeAudTable, Object defaultValue) { + super(stepName); + this.tableName = tableName; + this.newColumnName = newColumnName; + this.oldColumnName = oldColumnName; + this.includeAudTable = includeAudTable; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.cdm.database.update.SchemaUpdaterStepBase#invoke(eu.etaxonomy.cdm.database.ICdmDataSource, eu.etaxonomy.cdm.common.IProgressMonitor) + */ + @Override + public Integer invoke(ICdmDataSource datasource, IProgressMonitor monitor) throws SQLException { + boolean result = true; + result &= changeColumnName(tableName, datasource, monitor); + if (includeAudTable){ + String aud = "_AUD"; + result &= changeColumnName(tableName + aud, datasource, monitor); + } + return (result == true )? 0 : null; + } + + private boolean changeColumnName(String tableName, ICdmDataSource datasource, IProgressMonitor monitor) { + DatabaseTypeEnum type = datasource.getDatabaseType(); + String updateQuery; + + + if (type.equals(DatabaseTypeEnum.SqlServer2005)){ + logger.warn("SQLServer column name changer syntax not yet tested"); + updateQuery = "EXEC sp_rename '@oldName', '@newName'"; + }else if (type.equals(DatabaseTypeEnum.H2)){ + updateQuery = "ALTER TABLE @tableName ALTER COLUMN @oldColumnName RENAME TO @newColumnName"; + }else if ( type.equals(DatabaseTypeEnum.MySQL)){ + //FIXME MySQL column name changer + logger.warn("Changing column name not yet supported for MySQL"); + updateQuery = "ALTER TABLE @tableName CHANGE COLUMN @oldColumnName @newColumnName @definition"; + }else if ( type.equals(DatabaseTypeEnum.PostgreSQL) ){ + updateQuery = "ALTER TABLE @tableName RENAME COLUMN @oldColumnName TO @newColumnName;"; + }else{ + updateQuery = null; + monitor.warning("Update step '" + this.getStepName() + "' is not supported by " + type.getName()); + return false; + } + updateQuery = updateQuery.replace("@tableName", tableName); + updateQuery = updateQuery.replace("@oldColumnName", oldColumnName); + updateQuery = updateQuery.replace("@newColumnName", newColumnName); + datasource.executeUpdate(updateQuery); + + return true; + } + +} -- 2.34.1