in fastmodel-compare/src/main/java/com/aliyun/fastmodel/compare/impl/table/ColumnCompare.java [202:301]
private ChangeCol compare(QualifiedName qualifiedName, ColumnDefinition beforeDefine,
ColumnDefinition afterDefine) {
boolean changeComment = isChangeColumnComment(beforeDefine, afterDefine);
boolean changeAliased = !Objects.equals(beforeDefine.getAliasedName(), afterDefine.getAliasedName());
boolean changePrimary = false;
boolean changeName = !StringUtils.equalsIgnoreCase(beforeDefine.getColName().getValue(),
afterDefine.getColName().getValue());
boolean changeNotNull = false;
boolean changeType = !Objects.equals(beforeDefine.getDataType(), afterDefine.getDataType());
boolean changeCategory = isChangeColumnCategory(beforeDefine, afterDefine);
boolean changeDim = isChangeDim(beforeDefine, afterDefine);
boolean changeRefIndicators = isChangeRefIndicaotrs(beforeDefine, afterDefine);
boolean changeDefaultValue = isChangeDefaultValue(beforeDefine, afterDefine);
List<Property> changeProperties = changeProperties(beforeDefine, afterDefine);
boolean changeColumnProperties = !changeProperties.isEmpty();
Comment comment = null;
if (changeComment) {
if (afterDefine.getComment() == null) {
comment = new Comment(StringUtils.EMPTY);
} else {
comment = afterDefine.getComment();
}
}
ColumnBuilder builder = ColumnDefinition.builder();
builder.colName(afterDefine.getColName()).dataType(afterDefine.getDataType()).comment(comment);
if (changeAliased) {
builder.aliasedName(afterDefine.getAliasedName());
}
Boolean primary = beforeDefine.getPrimary();
Boolean afterDefinePrimary = afterDefine.getPrimary();
if (!BooleanUtils.isNotTrue(primary) || !BooleanUtils.isNotTrue(afterDefinePrimary)) {
if (!Objects.equals(primary, afterDefinePrimary)) {
builder.primary(beforeDefine == null ? afterDefinePrimary : BooleanUtils.negate(primary));
changePrimary = true;
}
}
Boolean beforeDefineNotNull = beforeDefine.getNotNull();
Boolean afterDefineNotNull = afterDefine.getNotNull();
if (!BooleanUtils.isNotTrue(beforeDefineNotNull) || !BooleanUtils.isNotTrue(afterDefineNotNull)) {
if (!Objects.equals(afterDefineNotNull, beforeDefineNotNull)) {
builder.notNull(
beforeDefineNotNull == null ? afterDefineNotNull : BooleanUtils.negate(beforeDefineNotNull));
changeNotNull = true;
}
}
ChangeCol.ChangeState changeState = new ChangeCol.ChangeState();
if (changeName) {
changeState.setChangeName();
}
if (changeAliased) {
changeState.setChangeAlias();
}
if (changePrimary) {
changeState.setChangePrimary();
}
if (changeNotNull) {
changeState.setChangeNotNull();
}
if (changeType) {
changeState.setChangeDataType();
}
if (changeComment) {
changeState.setChangeComment();
}
if (changeDefaultValue) {
changeState.setChangeDefaultValue();
}
if (changeColumnProperties) {
changeState.setChangeColumnProperties();
}
if (changeCategory) {
changeState.setChangeCategory();
}
if (changeDim) {
changeState.setChangeDim();
}
if (changeRefIndicators) {
changeState.setChangeRefIndicators();
}
//如果都没有发生修改,那么直接返回null
if (changeState.nothingChange()) {
return null;
}
if (changeCategory) {
builder.category(afterDefine.getCategory() == null ? ColumnCategory.ATTRIBUTE : afterDefine.getCategory());
}
if (!changeProperties.isEmpty()) {
builder.properties(changeProperties);
}
if (changeDim) {
builder.refDimension(afterDefine.getRefDimension());
}
if (changeRefIndicators) {
builder.refIndicators(afterDefine.getRefIndicators());
}
if (changeDefaultValue) {
builder.defaultValue(afterDefine.getDefaultValue());
}
return new ChangeCol(qualifiedName, beforeDefine.getColName(), builder.build(), Optional.of(changeState));
}