added column name changer
authorAndreas Müller <a.mueller@bgbm.org>
Tue, 21 Sep 2010 13:03:31 +0000 (13:03 +0000)
committerAndreas Müller <a.mueller@bgbm.org>
Tue, 21 Sep 2010 13:03:31 +0000 (13:03 +0000)
.gitattributes
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/update/ColumnNameChanger.java [new file with mode: 0644]

index e571f907e096f8a200d96952afe09dab01660702..f2337db8bf28f269632b40a04cccdf2d65aeac40 100644 (file)
@@ -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 (file)
index 0000000..341a9d0
--- /dev/null
@@ -0,0 +1,89 @@
+// $Id$\r
+/**\r
+* Copyright (C) 2009 EDIT\r
+* European Distributed Institute of Taxonomy \r
+* http://www.e-taxonomy.eu\r
+* \r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+package eu.etaxonomy.cdm.database.update;\r
+\r
+import java.sql.SQLException;\r
+\r
+import org.apache.log4j.Logger;\r
+\r
+import eu.etaxonomy.cdm.common.IProgressMonitor;\r
+import eu.etaxonomy.cdm.database.DatabaseTypeEnum;\r
+import eu.etaxonomy.cdm.database.ICdmDataSource;\r
+\r
+/**\r
+ * @author a.mueller\r
+ * @date 16.09.2010\r
+ *\r
+ */\r
+public class ColumnNameChanger extends SchemaUpdaterStepBase implements ISchemaUpdaterStep {\r
+       @SuppressWarnings("unused")\r
+       private static final Logger logger = Logger.getLogger(ColumnNameChanger.class);\r
+       \r
+       private String tableName;\r
+       private String newColumnName;\r
+       private String oldColumnName;\r
+       private boolean includeAudTable;\r
+       \r
+       public static final ColumnNameChanger NewInstance(String stepName, String tableName, String oldColumnName, String newColumnName, boolean includeAudTable){\r
+               return new ColumnNameChanger(stepName, tableName, oldColumnName, newColumnName, includeAudTable, null);\r
+       }\r
+\r
+       protected ColumnNameChanger(String stepName, String tableName, String oldColumnName, String newColumnName, boolean includeAudTable, Object defaultValue) {\r
+               super(stepName);\r
+               this.tableName = tableName;\r
+               this.newColumnName = newColumnName;\r
+               this.oldColumnName = oldColumnName;\r
+               this.includeAudTable = includeAudTable;\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.database.update.SchemaUpdaterStepBase#invoke(eu.etaxonomy.cdm.database.ICdmDataSource, eu.etaxonomy.cdm.common.IProgressMonitor)\r
+        */\r
+       @Override\r
+       public Integer invoke(ICdmDataSource datasource, IProgressMonitor monitor) throws SQLException {\r
+               boolean result = true;\r
+               result &= changeColumnName(tableName, datasource, monitor);\r
+               if (includeAudTable){\r
+                       String aud = "_AUD";\r
+                       result &= changeColumnName(tableName + aud, datasource, monitor);\r
+               }\r
+               return (result == true )? 0 : null;\r
+       }\r
+\r
+       private boolean changeColumnName(String tableName, ICdmDataSource datasource, IProgressMonitor monitor) {\r
+               DatabaseTypeEnum type = datasource.getDatabaseType();\r
+               String updateQuery;\r
+               \r
+               \r
+               if (type.equals(DatabaseTypeEnum.SqlServer2005)){\r
+                       logger.warn("SQLServer column name changer syntax not yet tested");\r
+                       updateQuery = "EXEC sp_rename '@oldName', '@newName'";\r
+               }else if (type.equals(DatabaseTypeEnum.H2)){\r
+                       updateQuery = "ALTER TABLE @tableName ALTER COLUMN @oldColumnName RENAME TO @newColumnName";\r
+               }else if ( type.equals(DatabaseTypeEnum.MySQL)){\r
+                       //FIXME MySQL column name changer\r
+                       logger.warn("Changing column name not yet supported for MySQL");\r
+                       updateQuery = "ALTER TABLE @tableName CHANGE COLUMN @oldColumnName @newColumnName @definition";\r
+               }else if ( type.equals(DatabaseTypeEnum.PostgreSQL) ){\r
+                       updateQuery = "ALTER TABLE @tableName RENAME COLUMN @oldColumnName TO @newColumnName;";\r
+               }else{\r
+                       updateQuery = null;\r
+                       monitor.warning("Update step '" + this.getStepName() + "' is not supported by " + type.getName());\r
+                       return false;\r
+               }\r
+               updateQuery = updateQuery.replace("@tableName", tableName);\r
+               updateQuery = updateQuery.replace("@oldColumnName", oldColumnName);\r
+               updateQuery = updateQuery.replace("@newColumnName", newColumnName);\r
+               datasource.executeUpdate(updateQuery);\r
+\r
+               return true;\r
+       }\r
+\r
+}\r