public List compareTableElement()

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