mirror of
https://github.com/CodePhiliaX/Chat2DB.git
synced 2025-07-29 02:32:33 +08:00
mysql修改列顺序测试
This commit is contained in:
@ -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;
|
||||
|
Reference in New Issue
Block a user