private static void copyTableIndexes( Table origTable, Table tableCopy, List<TableChange> columnChanges, List<TableChange> indexChanges) { for (TableIndex origIndex : origTable.getIndexesIncludingInternal()) { ChangeType indexChange = findOldName(indexChanges, origIndex.getIndexName().getName()); if (indexChange == ChangeType.DROP) { continue; } TableIndex indexCopy = TableIndex.create(tableCopy, origIndex); int pos = 0; for (IndexColumn indexColumn : origIndex.getKeyColumns()) { String newName = findNewName(columnChanges, indexColumn.getColumn().getName()); if (newName != null) { IndexColumn.create(indexCopy, tableCopy.getColumn(newName), indexColumn, pos++); } } // DROP and MODIFY detection for indexes handled downstream if (indexCopy.getKeyColumns().isEmpty()) { tableCopy.removeIndexes(Collections.singleton(indexCopy)); } } }