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

#4880 SQL Server: foreign keys resolution fix (use ref constraints instead of indexes)

上级 c582eb15
......@@ -36,6 +36,7 @@ import org.jkiss.dbeaver.model.meta.Association;
import org.jkiss.dbeaver.model.meta.Property;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.sql.SQLUtils;
import org.jkiss.dbeaver.model.struct.DBSEntityConstraint;
import org.jkiss.dbeaver.model.struct.DBSEntityConstraintType;
import org.jkiss.dbeaver.model.struct.DBSObject;
import org.jkiss.dbeaver.model.struct.DBSObjectFilter;
......@@ -550,7 +551,7 @@ public class SQLServerSchema implements DBSSchema, DBPSaveableObject, DBPQualifi
return null;
}
long refTableId = JDBCUtils.safeGetLong(dbResult, "referenced_object_id");
SQLServerTableBase refTable = refSchema.getTable(monitor, refTableId);
SQLServerTable refTable = refSchema.getTable(monitor, refTableId);
if (refTable == null) {
log.debug("Ref table " + refTableId + " not found in schema " + refSchema.getName());
return null;
......@@ -561,10 +562,18 @@ public class SQLServerSchema implements DBSSchema, DBPSaveableObject, DBPQualifi
log.debug("Ref index " + refIndexId + " not found in table " + refTable.getFullyQualifiedName(DBPEvaluationContext.UI));
return null;
}
DBSEntityConstraint refConstraint = index;
for (SQLServerTableUniqueKey refPK : refTable.getConstraints(monitor)) {
if (refPK.getIndex() == index) {
refConstraint = refPK;
break;
}
}
String fkName = JDBCUtils.safeGetString(dbResult, "name");
DBSForeignKeyModifyRule deleteRule = SQLServerUtils.getForeignKeyModifyRule(JDBCUtils.safeGetInt(dbResult, "delete_referential_action"));
DBSForeignKeyModifyRule updateRule = SQLServerUtils.getForeignKeyModifyRule(JDBCUtils.safeGetInt(dbResult, "update_referential_action"));
return new SQLServerTableForeignKey(parent, fkName, null, index, deleteRule, updateRule, true);
return new SQLServerTableForeignKey(parent, fkName, null, refConstraint, deleteRule, updateRule, true);
}
@Nullable
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册