diff --git a/plugins/org.jkiss.dbeaver.ext.mysql/src/org/jkiss/dbeaver/ext/mysql/edit/MySQLTableColumnManager.java b/plugins/org.jkiss.dbeaver.ext.mysql/src/org/jkiss/dbeaver/ext/mysql/edit/MySQLTableColumnManager.java index d7e2f432ecf0edb63ffb0221cd2cf8f8d5a02496..a7b39614dcbeb7d4c03137ba9680a27c46e0bc55 100644 --- a/plugins/org.jkiss.dbeaver.ext.mysql/src/org/jkiss/dbeaver/ext/mysql/edit/MySQLTableColumnManager.java +++ b/plugins/org.jkiss.dbeaver.ext.mysql/src/org/jkiss/dbeaver/ext/mysql/edit/MySQLTableColumnManager.java @@ -165,6 +165,26 @@ public class MySQLTableColumnManager extends SQLTableColumnManager actions, ObjectReorderCommand command) { + final MySQLTableColumn column = command.getObject(); + String order = "FIRST"; + if (column.getOrdinalPosition() > 0) { + for (MySQLTableColumn col : command.getObject().getTable().getCachedAttributes()) { + if (col.getOrdinalPosition() == column.getOrdinalPosition() - 1) { + order = "AFTER " + DBUtils.getQuotedIdentifier(col); + break; + } + } + } + actions.add( + new SQLDatabasePersistAction( + "Reorder column", + "ALTER TABLE " + column.getTable().getFullyQualifiedName(DBPEvaluationContext.DDL) + " CHANGE " + + DBUtils.getQuotedIdentifier(command.getObject()) + " " + + getNestedDeclaration(column.getTable(), command) + " " + order)); + } + /////////////////////////////////////////////// // Reorder diff --git a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/impl/sql/edit/SQLObjectEditor.java b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/impl/sql/edit/SQLObjectEditor.java index 366586c9f8ecc0ba3803888ca39920bb0be91cd6..5b6f355ff567c5b53a2318318e31bcc3e4807d0a 100644 --- a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/impl/sql/edit/SQLObjectEditor.java +++ b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/impl/sql/edit/SQLObjectEditor.java @@ -379,6 +379,20 @@ public abstract class SQLObjectEditor merge(DBECommand prevCommand, Map userParams) { + // We need very first and very last rename commands. They produce final rename + ObjectRenameCommand renameCmd = (ObjectRenameCommand) userParams.get("rename"); + if (renameCmd == null) { + renameCmd = new ObjectRenameCommand(getObject(), getTitle(), newName); + userParams.put("rename", renameCmd); + } else { + renameCmd.newName = newName; + return renameCmd; + } + return super.merge(prevCommand, userParams); + } } public class RenameObjectReflector implements DBECommandReflector { @@ -436,6 +450,19 @@ public abstract class SQLObjectEditor merge(DBECommand prevCommand, Map userParams) { + // We need very first and very last reorder commands. They produce final rename + ObjectReorderCommand reorderCmd = (ObjectReorderCommand) userParams.get("reorder"); + if (reorderCmd == null) { + reorderCmd = new ObjectReorderCommand(getObject(), siblings, getTitle(), newPosition); + userParams.put("reorder", reorderCmd); + } else { + reorderCmd.newPosition = newPosition; + return reorderCmd; + } + return super.merge(prevCommand, userParams); + } } public class ReorderObjectReflector implements DBECommandReflector {