mysql修改列顺序测试

This commit is contained in:
tmlx1990
2024-05-29 06:58:38 +08:00
parent fb229b21e6
commit 6a60df3c0a
2 changed files with 39 additions and 3 deletions

View File

@ -104,15 +104,20 @@ public class MysqlSqlBuilder extends DefaultSqlBuilder {
// 判断移动的字段 // 判断移动的字段
List<TableColumn> moveColumnList = new ArrayList<>(); List<TableColumn> moveColumnList = new ArrayList<>();
movedElements(oldTable.getColumnList(), newTable.getColumnList()); moveColumnList = movedElements(oldTable.getColumnList(), newTable.getColumnList());
// append modify column // append modify column
for (TableColumn tableColumn : newTable.getColumnList()) { for (TableColumn tableColumn : newTable.getColumnList()) {
if (StringUtils.isNotBlank(tableColumn.getEditStatus()) && StringUtils.isNotBlank(tableColumn.getColumnType()) && StringUtils.isNotBlank(tableColumn.getName())) { if ((StringUtils.isNotBlank(tableColumn.getEditStatus()) && StringUtils.isNotBlank(tableColumn.getColumnType())
&& StringUtils.isNotBlank(tableColumn.getName())) || moveColumnList.contains(tableColumn)) {
MysqlColumnTypeEnum typeEnum = MysqlColumnTypeEnum.getByType(tableColumn.getColumnType()); MysqlColumnTypeEnum typeEnum = MysqlColumnTypeEnum.getByType(tableColumn.getColumnType());
if (moveColumnList.contains(tableColumn)) {
script.append("\t").append(typeEnum.buildModifyColumn(tableColumn, true, findPrevious(tableColumn, newTable))).append(",\n");
} else {
script.append("\t").append(typeEnum.buildModifyColumn(tableColumn)).append(",\n"); script.append("\t").append(typeEnum.buildModifyColumn(tableColumn)).append(",\n");
} }
} }
}
// append modify index // append modify index
for (TableIndex tableIndex : newTable.getIndexList()) { for (TableIndex tableIndex : newTable.getIndexList()) {
@ -133,6 +138,13 @@ public class MysqlSqlBuilder extends DefaultSqlBuilder {
return script.toString(); return script.toString();
} }
private String findPrevious(TableColumn tableColumn, Table newTable) {
int index = newTable.getColumnList().indexOf(tableColumn);
if (index == 0) {
return "-1";
}
return newTable.getColumnList().get(index - 1).getName();
}
@Override @Override
public String pageLimit(String sql, int offset, int pageNo, int pageSize) { public String pageLimit(String sql, int offset, int pageNo, int pageSize) {

View File

@ -199,6 +199,30 @@ public enum MysqlColumnTypeEnum implements ColumnBuilder {
return ""; return "";
} }
public String buildModifyColumn(TableColumn tableColumn, boolean isMove, String columnName) {
if (EditStatus.DELETE.name().equals(tableColumn.getEditStatus())) {
return StringUtils.join("DROP COLUMN `", tableColumn.getName() + "`");
}
if (EditStatus.ADD.name().equals(tableColumn.getEditStatus())) {
if (isMove){
if (columnName.equals("-1")) {
return StringUtils.join("ADD COLUMN ", buildCreateColumnSql(tableColumn)," FIRST");
} else {
return StringUtils.join("ADD COLUMN ", buildCreateColumnSql(tableColumn), " AFTER ", columnName);
}
}
return StringUtils.join("ADD COLUMN ", buildCreateColumnSql(tableColumn));
}
if (EditStatus.MODIFY.name().equals(tableColumn.getEditStatus())) {
if (!StringUtils.equalsIgnoreCase(tableColumn.getOldName(), tableColumn.getName())) {
return StringUtils.join("CHANGE COLUMN `", tableColumn.getOldName(), "` ", buildCreateColumnSql(tableColumn));
} else {
return StringUtils.join("MODIFY COLUMN ", buildCreateColumnSql(tableColumn));
}
}
return "";
}
private String buildAutoIncrement(TableColumn column, MysqlColumnTypeEnum type) { private String buildAutoIncrement(TableColumn column, MysqlColumnTypeEnum type) {
if(!type.getColumnType().isSupportAutoIncrement()){ if(!type.getColumnType().isSupportAutoIncrement()){
return ""; return "";