in fastmodel-compare/src/main/java/com/aliyun/fastmodel/compare/impl/table/ConstraintCompare.java [30:65]
public List<BaseStatement> compareTableElement(CreateTable before, CreateTable after) {
List<BaseConstraint> beforeConstraints = before.getConstraintStatements();
List<BaseConstraint> afterConstraints = after.getConstraintStatements();
ImmutableList.Builder<BaseStatement> builder = ImmutableList.builder();
boolean beforeEmpty = beforeConstraints == null || beforeConstraints.isEmpty();
boolean afterNotEmpty = afterConstraints != null && !afterConstraints.isEmpty();
if (beforeEmpty && !afterNotEmpty) {
return ImmutableList.of();
}
if (beforeEmpty && afterNotEmpty) {
List<AddConstraint> collect = afterConstraints.stream().map(
x -> new AddConstraint(after.getQualifiedName(), x)).collect(Collectors.toList());
builder.addAll(collect);
return builder.build();
}
if (!afterNotEmpty) {
List<DropConstraint> dropConstraints = beforeConstraints.stream().map(
x -> new DropConstraint(after.getQualifiedName(), x.getName(), x.getConstraintType())
).collect(Collectors.toList());
builder.addAll(dropConstraints);
return builder.build();
}
List<BaseConstraint> baseConstraints = Lists.newArrayList(afterConstraints);
for (BaseConstraint beforeConstraint : beforeConstraints) {
if (isNotContain(baseConstraints, beforeConstraint)) {
builder.add(new DropConstraint(after.getQualifiedName(), beforeConstraint.getName(),
beforeConstraint.getConstraintType()));
} else {
baseConstraints.remove(beforeConstraint);
}
}
List<AddConstraint> list = baseConstraints.stream().map(x -> new AddConstraint(after.getQualifiedName(), x))
.collect(Collectors.toList());
builder.addAll(list);
return builder.build();
}