提交 d0340587 编写于 作者: S serge-rider

#4529 MAppings load fix (create/existing - check object existence)


Former-commit-id: 4d46576b
上级 e8517788
......@@ -22,6 +22,7 @@ import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.model.*;
import org.jkiss.dbeaver.model.impl.DBObjectNameCaseTransformer;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.runtime.VoidProgressMonitor;
import org.jkiss.dbeaver.model.sql.SQLDataSource;
import org.jkiss.dbeaver.model.sql.SQLDialect;
import org.jkiss.dbeaver.model.struct.*;
......@@ -272,10 +273,25 @@ public class DatabaseMappingAttribute implements DatabaseMappingObject {
targetType = settings.get("targetType");
if (settings.get("mappingType") != null) {
try {
mappingType = DatabaseMappingType.valueOf(settings.get("mappingType"));
} catch (IllegalArgumentException e) {
DatabaseMappingType newMappingType = DatabaseMappingType.valueOf(settings.get("mappingType"));
if (!CommonUtils.isEmpty(targetName)) {
DBSDataManipulator targetEntity = parent.getTarget();
if (targetEntity instanceof DBSEntity) {
this.target = ((DBSEntity) targetEntity).getAttribute(new VoidProgressMonitor(), targetName);
}
}
if (target != null && newMappingType == DatabaseMappingType.create) {
// Change create to existing.
newMappingType = DatabaseMappingType.existing;
} else if (target == null && newMappingType == DatabaseMappingType.existing) {
newMappingType = DatabaseMappingType.create;
}
setMappingType(newMappingType);
} catch (Exception e) {
log.error(e);
mappingType = DatabaseMappingType.unspecified;
}
}
}
......
......@@ -44,28 +44,28 @@ public class DatabaseMappingContainer implements DatabaseMappingObject {
private static final Log log = Log.getLog(DatabaseMappingContainer.class);
private DatabaseConsumerSettings settings;
private DatabaseConsumerSettings consumerSettings;
private DBSDataContainer source;
private DBSDataManipulator target;
private String targetName;
private DatabaseMappingType mappingType;
private List<DatabaseMappingAttribute> attributeMappings = new ArrayList<>();
public DatabaseMappingContainer(DatabaseConsumerSettings settings, DBSDataContainer source) {
this.settings = settings;
public DatabaseMappingContainer(DatabaseConsumerSettings consumerSettings, DBSDataContainer source) {
this.consumerSettings = consumerSettings;
this.source = source;
this.mappingType = DatabaseMappingType.unspecified;
}
public DatabaseMappingContainer(IRunnableContext context, DatabaseConsumerSettings settings, DBSDataContainer sourceObject, DBSDataManipulator targetObject) throws DBException {
this.settings = settings;
public DatabaseMappingContainer(IRunnableContext context, DatabaseConsumerSettings consumerSettings, DBSDataContainer sourceObject, DBSDataManipulator targetObject) throws DBException {
this.consumerSettings = consumerSettings;
this.source = sourceObject;
this.target = targetObject;
refreshMappingType(context, DatabaseMappingType.existing);
}
public DatabaseConsumerSettings getSettings() {
return settings;
return consumerSettings;
}
@Override
......@@ -222,7 +222,25 @@ public class DatabaseMappingContainer implements DatabaseMappingObject {
targetName = settings.get("targetName");
if (settings.get("mappingType") != null) {
try {
refreshMappingType(context, DatabaseMappingType.valueOf(settings.get("mappingType")));
DatabaseMappingType newMappingType = DatabaseMappingType.valueOf(settings.get("mappingType"));
if (!CommonUtils.isEmpty(targetName)) {
DBSObjectContainer objectContainer = consumerSettings.getContainer();
if (objectContainer != null) {
DBSObject child = objectContainer.getChild(new VoidProgressMonitor(), targetName);
if (child instanceof DBSDataManipulator) {
target = (DBSDataManipulator) child;
}
}
}
if (target != null && newMappingType == DatabaseMappingType.create) {
// Change create to existing.
newMappingType = DatabaseMappingType.existing;
} else if (target == null && newMappingType == DatabaseMappingType.existing) {
newMappingType = DatabaseMappingType.create;
}
refreshMappingType(context, newMappingType);
} catch (Exception e) {
log.error(e);
}
......
......@@ -170,7 +170,7 @@ public class DatabaseTransferConsumer implements IDataTransferConsumer<DatabaseC
Object[] rowValues = new Object[targetAttributes.size()];
for (int i = 0; i < columnMappings.length; i++) {
ColumnMapping column = columnMappings[i];
if (column.targetIndex < 0) {
if (column == null || column.targetIndex < 0) {
continue;
}
final Object attrValue;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册