X-Git-Url: https://dev.e-taxonomy.eu/gitweb/cdmlib.git/blobdiff_plain/79a8b5c25926f75b7d6279aa9907b6f772a9962d..c66976ca63d87026c294511f957addb549ead332:/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/types/SqlServer2005DatabaseType.java diff --git a/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/types/SqlServer2005DatabaseType.java b/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/types/SqlServer2005DatabaseType.java index 233ef47971..3ffc33d377 100644 --- a/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/types/SqlServer2005DatabaseType.java +++ b/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/types/SqlServer2005DatabaseType.java @@ -9,6 +9,10 @@ package eu.etaxonomy.cdm.database.types; +import java.sql.ResultSet; +import java.sql.SQLException; + +import eu.etaxonomy.cdm.database.CdmDataSource; import eu.etaxonomy.cdm.database.ICdmDataSource; @@ -30,10 +34,10 @@ public class SqlServer2005DatabaseType extends DatabaseTypeBase { //[serverName[\instanceName][:portNumber]][;property=value[;property=value]] //default port - private int defaultPort = 1433; + protected int defaultPort = 1433; //hibernate dialect - private String hibernateDialect = "SQLServerDialect"; + protected String hibernateDialect = "SQLServer2005Dialect"; public String getConnectionString(ICdmDataSource ds, int port){ return getConnectionString(ds, port, null); @@ -46,10 +50,72 @@ public class SqlServer2005DatabaseType extends DatabaseTypeBase { } return urlString + ds.getServer() + instance + ":" + port + ";databaseName=" + ds.getDatabase() +";SelectMethod=cursor"; } + + + /* (non-Javadoc) + * @see eu.etaxonomy.cdm.database.types.DatabaseTypeBase#getServerNameByConnectionString(java.lang.String) + */ + @Override + public String getServerNameByConnectionString(String connectionString) { + String dbSeparator = ";"; + return super.getServerNameByConnectionString(connectionString, urlString, dbSeparator); + } + + + /* (non-Javadoc) + * @see eu.etaxonomy.cdm.database.types.DatabaseTypeBase#getPortByConnectionString(java.lang.String) + */ + @Override + public int getPortByConnectionString(String connectionString) { + String dbSeparator = ";"; + return getPortByConnectionString(connectionString, urlString, dbSeparator); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.cdm.database.types.DatabaseTypeBase#getServerNameByConnectionString(java.lang.String) + */ + @Override + public String getDatabaseNameByConnectionString(String connectionString){ + String result; + String dbStart = ";databaseName="; + int posDbStart = connectionString.indexOf(dbStart); + result = connectionString.substring(posDbStart + dbStart.length()); + int posNextAttr = result.indexOf(";"); + if (posNextAttr != 0){ + result = result.substring(0, posNextAttr); + } + return result; + } //Constructor public SqlServer2005DatabaseType() { init (typeName, classString, urlString, defaultPort, hibernateDialect ); } + + + /** + * Deletes all foreign keys between tables in a sql server database. + * This makes deleting tables easier. + * @param sqlServerDataSource + * @return + * @throws SQLException + */ + public boolean deleteForeignKeys(CdmDataSource sqlServerDataSource) throws SQLException{ + String sql = "SELECT name, id FROM sys.sysobjects WHERE (xtype = 'U')"; //all tables + ResultSet rs = sqlServerDataSource.executeQuery(sql); + while (rs.next()){ + String tableName = rs.getString("name"); + long tableId = rs.getLong("id"); + sql = "SELECT name FROM sys.sysobjects WHERE xtype='F' and parent_obj = " + tableId;//get foreignkeys + ResultSet rsFk = sqlServerDataSource.executeQuery(sql); + while (rsFk.next()){ + String fk = rsFk.getString("name"); + sql = " ALTER TABLE "+tableName+" DROP CONSTRAINT "+fk + ""; + sqlServerDataSource.executeUpdate(sql); + } + + } + return true; + } } \ No newline at end of file