From 6a60df3c0a8c6b39bfdc9348f8acdb2da48c8ca1 Mon Sep 17 00:00:00 2001 From: tmlx1990 Date: Wed, 29 May 2024 06:58:38 +0800 Subject: [PATCH] =?UTF-8?q?mysql=E4=BF=AE=E6=94=B9=E5=88=97=E9=A1=BA?= =?UTF-8?q?=E5=BA=8F=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugin/mysql/builder/MysqlSqlBuilder.java | 18 +++++++++++--- .../mysql/type/MysqlColumnTypeEnum.java | 24 +++++++++++++++++++ 2 files changed, 39 insertions(+), 3 deletions(-) diff --git a/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/builder/MysqlSqlBuilder.java b/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/builder/MysqlSqlBuilder.java index 3f93993d..02371b0c 100644 --- a/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/builder/MysqlSqlBuilder.java +++ b/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/builder/MysqlSqlBuilder.java @@ -104,13 +104,18 @@ public class MysqlSqlBuilder extends DefaultSqlBuilder { // 判断移动的字段 List moveColumnList = new ArrayList<>(); - movedElements(oldTable.getColumnList(), newTable.getColumnList()); + moveColumnList = 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())) { + if ((StringUtils.isNotBlank(tableColumn.getEditStatus()) && StringUtils.isNotBlank(tableColumn.getColumnType()) + && StringUtils.isNotBlank(tableColumn.getName())) || moveColumnList.contains(tableColumn)) { MysqlColumnTypeEnum typeEnum = MysqlColumnTypeEnum.getByType(tableColumn.getColumnType()); - script.append("\t").append(typeEnum.buildModifyColumn(tableColumn)).append(",\n"); + 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"); + } } } @@ -133,6 +138,13 @@ public class MysqlSqlBuilder extends DefaultSqlBuilder { 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 public String pageLimit(String sql, int offset, int pageNo, int pageSize) { diff --git a/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/type/MysqlColumnTypeEnum.java b/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/type/MysqlColumnTypeEnum.java index 636ccd6a..48b66a9e 100644 --- a/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/type/MysqlColumnTypeEnum.java +++ b/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/type/MysqlColumnTypeEnum.java @@ -199,6 +199,30 @@ public enum MysqlColumnTypeEnum implements ColumnBuilder { 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) { if(!type.getColumnType().isSupportAutoIncrement()){ return "";