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