mysql修改列顺序测试

This commit is contained in:
tmlx1990
2024-05-28 00:53:10 +08:00
parent 3675bc99a0
commit fb229b21e6

View File

@ -93,6 +93,19 @@ public class MysqlSqlBuilder extends DefaultSqlBuilder {
script.append("\t").append("AUTO_INCREMENT=").append(newTable.getIncrementValue()).append(",\n");
}
// 判断是否有删除字段、新增字段及字段位置移动
// 判断新增字段
List<TableColumn> addColumnList = new ArrayList<>();
for (TableColumn tableColumn : newTable.getColumnList()) {
if (tableColumn.getEditStatus() != null ? tableColumn.getEditStatus().equals("ADD") : false) {
addColumnList.add(tableColumn);
}
}
// 判断移动的字段
List<TableColumn> moveColumnList = new ArrayList<>();
movedElements(oldTable.getColumnList(), newTable.getColumnList());
// append modify column
for (TableColumn tableColumn : newTable.getColumnList()) {
if (StringUtils.isNotBlank(tableColumn.getEditStatus()) && StringUtils.isNotBlank(tableColumn.getColumnType()) && StringUtils.isNotBlank(tableColumn.getName())) {
@ -110,7 +123,7 @@ public class MysqlSqlBuilder extends DefaultSqlBuilder {
}
// append reorder column
script.append(buildGenerateReorderColumnSql(oldTable, newTable));
// script.append(buildGenerateReorderColumnSql(oldTable, newTable));
if (script.length() > 2) {
script = new StringBuilder(script.substring(0, script.length() - 2));
@ -151,6 +164,47 @@ public class MysqlSqlBuilder extends DefaultSqlBuilder {
return sqlBuilder.toString();
}
public static List<TableColumn> movedElements(List<TableColumn> original, List<TableColumn> modified) {
int[][] dp = new int[original.size() + 1][modified.size() + 1];
// 构建DP表
for (int i = 1; i <= original.size(); i++) {
for (int j = 1; j <= modified.size(); j++) {
if (original.get(i - 1).getName().equals(modified.get(j - 1).getOldName())) {
dp[i][j] = dp[i - 1][j - 1] + 1;
} else {
dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);
}
}
}
// 追踪LCS找出移动了位置的元素
List<TableColumn> moved = new ArrayList<>();
int i = original.size();
int j = modified.size();
while (i > 0 && j > 0) {
if (original.get(i - 1).equals(modified.get(j - 1))) {
i--;
j--;
} else if (dp[i - 1][j] >= dp[i][j - 1]) {
moved.add(original.get(i - 1));
// modified List中找到original.get(i-1)的位置
System.out.println("Moved elements:"+ original.get(i-1).getName() + " after " + modified.indexOf(original.get(i-1)) );
i--;
} else {
j--;
}
}
// 这里添加原始列表中未被包含在LCS中的元素
while (i > 0) {
moved.add(original.get(i - 1));
i--;
}
return moved;
}
public String buildGenerateReorderColumnSql(Table oldTable, Table newTable) {
StringBuilder sql = new StringBuilder();
int n = 0;