提交 71db73a7 编写于 作者: S Serge Rider

#1070 Generic DDL fix (exclude unique constraints' indexes)

上级 6c9ebe84
...@@ -21,11 +21,18 @@ import org.jkiss.code.NotNull; ...@@ -21,11 +21,18 @@ import org.jkiss.code.NotNull;
import org.jkiss.code.Nullable; import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.DBException; import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.ext.generic.model.*; import org.jkiss.dbeaver.ext.generic.model.*;
import org.jkiss.dbeaver.model.DBPObject;
import org.jkiss.dbeaver.model.edit.DBECommandContext; import org.jkiss.dbeaver.model.edit.DBECommandContext;
import org.jkiss.dbeaver.model.impl.DBSObjectCache; import org.jkiss.dbeaver.model.impl.DBSObjectCache;
import org.jkiss.dbeaver.model.impl.sql.edit.SQLObjectEditor;
import org.jkiss.dbeaver.model.impl.sql.edit.struct.SQLTableManager; import org.jkiss.dbeaver.model.impl.sql.edit.struct.SQLTableManager;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.struct.DBSEntityConstraint;
import org.jkiss.dbeaver.model.struct.DBSObject; import org.jkiss.dbeaver.model.struct.DBSObject;
import org.jkiss.dbeaver.model.struct.rdb.DBSTableIndex;
import org.jkiss.utils.CommonUtils;
import java.util.Collection;
/** /**
* Generic table manager * Generic table manager
...@@ -66,4 +73,23 @@ public class GenericTableManager extends SQLTableManager<GenericTable, GenericSt ...@@ -66,4 +73,23 @@ public class GenericTableManager extends SQLTableManager<GenericTable, GenericSt
return table; return table;
} }
@Override
protected boolean excludeFromDDL(NestedObjectCommand command, Collection<NestedObjectCommand> orderedCommands) {
// Filter out indexes for unique constraints (if they have the same name)
DBPObject object = command.getObject();
if (object instanceof DBSTableIndex) {
for (NestedObjectCommand ccom : orderedCommands) {
if (ccom.getObject() instanceof DBSEntityConstraint &&
ccom.getObject() != object &&
((DBSEntityConstraint) ccom.getObject()).getConstraintType().isUnique() &&
CommonUtils.equalObjects(
((DBSTableIndex) object).getName(), ((DBSEntityConstraint) ccom.getObject()).getName()))
{
return true;
}
}
}
return false;
}
} }
...@@ -19,6 +19,7 @@ package org.jkiss.dbeaver.model.impl.sql.edit.struct; ...@@ -19,6 +19,7 @@ package org.jkiss.dbeaver.model.impl.sql.edit.struct;
import org.jkiss.dbeaver.DBException; import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.model.DBPEvaluationContext; import org.jkiss.dbeaver.model.DBPEvaluationContext;
import org.jkiss.dbeaver.model.DBPObject;
import org.jkiss.dbeaver.model.DBUtils; import org.jkiss.dbeaver.model.DBUtils;
import org.jkiss.dbeaver.model.edit.DBEPersistAction; import org.jkiss.dbeaver.model.edit.DBEPersistAction;
import org.jkiss.dbeaver.model.edit.DBERegistry; import org.jkiss.dbeaver.model.edit.DBERegistry;
...@@ -29,16 +30,15 @@ import org.jkiss.dbeaver.model.impl.sql.edit.SQLObjectEditor; ...@@ -29,16 +30,15 @@ import org.jkiss.dbeaver.model.impl.sql.edit.SQLObjectEditor;
import org.jkiss.dbeaver.model.impl.sql.edit.SQLStructEditor; import org.jkiss.dbeaver.model.impl.sql.edit.SQLStructEditor;
import org.jkiss.dbeaver.model.messages.ModelMessages; import org.jkiss.dbeaver.model.messages.ModelMessages;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.struct.DBSEntityAssociation; import org.jkiss.dbeaver.model.runtime.VoidProgressMonitor;
import org.jkiss.dbeaver.model.struct.DBSEntityAttribute; import org.jkiss.dbeaver.model.struct.*;
import org.jkiss.dbeaver.model.struct.DBSObject;
import org.jkiss.dbeaver.model.struct.DBSObjectContainer;
import org.jkiss.dbeaver.model.struct.rdb.DBSTableConstraint; import org.jkiss.dbeaver.model.struct.rdb.DBSTableConstraint;
import org.jkiss.dbeaver.model.struct.rdb.DBSTableForeignKey; import org.jkiss.dbeaver.model.struct.rdb.DBSTableForeignKey;
import org.jkiss.dbeaver.model.struct.rdb.DBSTableIndex; import org.jkiss.dbeaver.model.struct.rdb.DBSTableIndex;
import org.jkiss.dbeaver.utils.GeneralUtils; import org.jkiss.dbeaver.utils.GeneralUtils;
import org.jkiss.utils.CommonUtils; import org.jkiss.utils.CommonUtils;
import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
...@@ -78,10 +78,14 @@ public abstract class SQLTableManager<OBJECT_TYPE extends JDBCTable, CONTAINER_T ...@@ -78,10 +78,14 @@ public abstract class SQLTableManager<OBJECT_TYPE extends JDBCTable, CONTAINER_T
StringBuilder createQuery = new StringBuilder(100); StringBuilder createQuery = new StringBuilder(100);
createQuery.append("CREATE TABLE ").append(tableName).append(" (").append(lineSeparator); //$NON-NLS-1$ //$NON-NLS-2$ createQuery.append("CREATE TABLE ").append(tableName).append(" (").append(lineSeparator); //$NON-NLS-1$ //$NON-NLS-2$
boolean hasNestedDeclarations = false; boolean hasNestedDeclarations = false;
for (NestedObjectCommand nestedCommand : getNestedOrderedCommands(command)) { final Collection<NestedObjectCommand> orderedCommands = getNestedOrderedCommands(command);
for (NestedObjectCommand nestedCommand : orderedCommands) {
if (nestedCommand.getObject() == table) { if (nestedCommand.getObject() == table) {
continue; continue;
} }
if (excludeFromDDL(nestedCommand, orderedCommands)) {
continue;
}
final String nestedDeclaration = nestedCommand.getNestedDeclaration(table); final String nestedDeclaration = nestedCommand.getNestedDeclaration(table);
if (!CommonUtils.isEmpty(nestedDeclaration)) { if (!CommonUtils.isEmpty(nestedDeclaration)) {
// Insert nested declaration // Insert nested declaration
...@@ -105,6 +109,10 @@ public abstract class SQLTableManager<OBJECT_TYPE extends JDBCTable, CONTAINER_T ...@@ -105,6 +109,10 @@ public abstract class SQLTableManager<OBJECT_TYPE extends JDBCTable, CONTAINER_T
actions.add( 0, new SQLDatabasePersistAction(ModelMessages.model_jdbc_create_new_table, createQuery.toString()) ); actions.add( 0, new SQLDatabasePersistAction(ModelMessages.model_jdbc_create_new_table, createQuery.toString()) );
} }
protected boolean excludeFromDDL(NestedObjectCommand command, Collection<NestedObjectCommand> orderedCommands) {
return false;
}
@Override @Override
protected void addObjectDeleteActions(List<DBEPersistAction> actions, ObjectDeleteCommand command) protected void addObjectDeleteActions(List<DBEPersistAction> actions, ObjectDeleteCommand command)
{ {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册