in fastmodel-compare/src/main/java/com/aliyun/fastmodel/compare/impl/table/PropertiesCompare.java [30:74]
public List<BaseStatement> compareTableElement(CreateTable before, CreateTable after) {
List<Property> properties = before.getProperties();
List<Property> afterProperties = after.getProperties();
boolean isBeforeEmpty = before.isPropertyEmpty();
boolean isAfterEmpty = after.isPropertyEmpty();
if (isBeforeEmpty && isAfterEmpty) {
return ImmutableList.of();
}
//如果原来为空,目标不是空,那么直接设置
if (isBeforeEmpty) {
return ImmutableList.of(new SetTableProperties(after.getQualifiedName(), afterProperties));
}
if (isAfterEmpty) {
return ImmutableList.of(
new UnSetTableProperties(after.getQualifiedName(), properties.stream().map(Property::getName).collect(
Collectors.toList())));
} else {
List<Property> unSet = new ArrayList<>();
List<String> collect = afterProperties.stream().map(Property::getName).collect(Collectors.toList());
for (Property b : properties) {
if (!collect.contains(b.getName())) {
unSet.add(b);
}
}
List<Property> setProp = new ArrayList<>();
for (Property ap : afterProperties) {
if (properties.contains(ap)) {
continue;
} else {
setProp.add(ap);
}
}
List<BaseStatement> list = new ArrayList<>();
if (!unSet.isEmpty()) {
list.add(
new UnSetTableProperties(after.getQualifiedName(), unSet.stream().map(Property::getName).collect(
Collectors.toList())));
}
if (!setProp.isEmpty()) {
list.add(new SetTableProperties(after.getQualifiedName(), setProp));
}
return list;
}
}