@Test public void testDropPrimaryKey() throws Exception { Connection conn = connectionMock; String tableName = "tableName"; DbUpgradeUtils.dropPrimaryKeyIfExists(conn, tableName); verify(daoMock, times(1)).dropPrimaryKey(conn, tableName); }
@Test public void testDropTableColumnsIfExistWhenNoKeysAreSupplied() throws Exception { Connection conn = connectionMock; String tableName = "tableName"; List<String> columns = new ArrayList<String>(); DbUpgradeUtils.dropTableColumnsIfExist(conn, tableName, columns); verify(daoMock, times(0)).columnExists(eq(conn), eq(tableName), anyString()); verify(daoMock, times(0)).dropColumn(eq(conn), eq(tableName), anyString()); }
@Test public void testDropKeyIfExistWhenNoKeysAreSupplied() throws Exception { Connection conn = connectionMock; String tableName = "tableName"; List<String> keys = new ArrayList<String>(); boolean isForeignKey = false; DbUpgradeUtils.dropKeysIfExist(conn, tableName, keys, isForeignKey); verify(daoMock, times(0)).dropKey(eq(conn), eq(tableName), anyString(), eq(isForeignKey)); }
@Test public void testDropKeyIfExistWhenOneKeysIsSupplied() throws Exception { Connection conn = connectionMock; String tableName = "tableName"; String key = "key"; List<String> keys = Arrays.asList(new String[] {key}); boolean isForeignKey = false; DbUpgradeUtils.dropKeysIfExist(conn, tableName, keys, isForeignKey); verify(daoMock, times(1)).dropKey(conn, tableName, key, isForeignKey); }
@Test public void testDropTableColumnsIfExistWhenOneKeysIsSuppliedAndColumnExists() throws Exception { Connection conn = connectionMock; String tableName = "tableName"; String column = "column"; when(daoMock.columnExists(conn, tableName, column)).thenReturn(true); List<String> columns = Arrays.asList(new String[] {column}); DbUpgradeUtils.dropTableColumnsIfExist(conn, tableName, columns); verify(daoMock, times(1)).columnExists(conn, tableName, column); verify(daoMock, times(1)).dropColumn(conn, tableName, column); }
private void fixForeignKeys(Connection conn) { HashMap<String, List<String>> foreignKeys = new HashMap<String, List<String>>(); List<String> keys = new ArrayList<String>(); keys.add("fk_networks__data_center_id"); foreignKeys.put("networks", keys); // drop all foreign keys s_logger.debug("Dropping old key fk_networks__data_center_id..."); for (String tableName : foreignKeys.keySet()) { DbUpgradeUtils.dropKeysIfExist(conn, tableName, foreignKeys.get(tableName), true); } try { PreparedStatement pstmt = conn.prepareStatement( "ALTER TABLE `cloud`.`networks` ADD CONSTRAINT `fk_networks__data_center_id` FOREIGN KEY (`data_center_id`) REFERENCES `data_center`(`id`) ON DELETE CASCADE"); pstmt.executeUpdate(); } catch (SQLException e) { throw new CloudRuntimeException("Unable to reinsert data center key for the network", e); } // drop primary keys DbUpgradeUtils.dropPrimaryKeyIfExists(conn, "cloud_usage.usage_load_balancer_policy"); DbUpgradeUtils.dropPrimaryKeyIfExists(conn, "cloud_usage.usage_port_forwarding"); // Drop usage_network_offering unique key try { PreparedStatement pstmt = conn.prepareStatement( "drop index network_offering_id on cloud_usage.usage_network_offering"); pstmt.executeUpdate(); s_logger.debug("Dropped usage_network_offering unique key"); } catch (Exception e) { // Ignore error if the usage_network_offering table or the unique key doesn't exist } }
@Test public void testDropTableColumnsIfExistWhenThreeKeysAreSuppliedAnOneDoesnotExist() throws Exception { Connection conn = connectionMock; String tableName = "tableName"; String column1 = "column1"; String column2 = "column2"; String column3 = "column3"; when(daoMock.columnExists(conn, tableName, column1)).thenReturn(true); when(daoMock.columnExists(conn, tableName, column2)).thenReturn(false); when(daoMock.columnExists(conn, tableName, column3)).thenReturn(true); List<String> keys = Arrays.asList(new String[] {column1, column2, column3}); DbUpgradeUtils.dropTableColumnsIfExist(conn, tableName, keys); verify(daoMock, times(1)).columnExists(conn, tableName, column1); verify(daoMock, times(1)).dropColumn(conn, tableName, column1); verify(daoMock, times(1)).columnExists(conn, tableName, column2); verify(daoMock, times(0)).dropColumn(conn, tableName, column2); verify(daoMock, times(1)).columnExists(conn, tableName, column3); verify(daoMock, times(1)).dropColumn(conn, tableName, column3); }