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