private ChangeCol compare()

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));
    }