public List compareTableElement()

in fastmodel-compare/src/main/java/com/aliyun/fastmodel/compare/impl/table/TableIndexCompare.java [32:72]


    public List<BaseStatement> compareTableElement(CreateTable before, CreateTable after) {
        List<TableIndex> tableIndexList = before.getTableIndexList();
        List<TableIndex> afterTableIndex = after.getTableIndexList();
        ImmutableList.Builder<BaseStatement> builder = ImmutableList.builder();
        boolean beforeEmpty = tableIndexList == null || tableIndexList.isEmpty();
        boolean afterNotEmpty = afterTableIndex != null && !afterTableIndex.isEmpty();
        if (beforeEmpty && !afterNotEmpty) {
            return ImmutableList.of();
        }
        if (beforeEmpty && afterNotEmpty) {
            List<CreateIndex> collect = afterTableIndex.stream().map(
                x -> new CreateIndex(
                    QualifiedName.of(x.getIndexName().getValue()),
                    after.getQualifiedName(), x.getIndexColumnNames(), x.getProperties())).collect(Collectors.toList());
            builder.addAll(collect);
            return builder.build();
        }
        if (!afterNotEmpty) {
            List<DropIndex> dropConstraints = tableIndexList.stream().map(
                x -> new DropIndex(QualifiedName.of(x.getIndexName().getValue()), before.getQualifiedName())
            ).collect(Collectors.toList());
            builder.addAll(dropConstraints);
            return builder.build();
        }
        List<TableIndex> tableIndices = Lists.newArrayList(afterTableIndex);
        for (TableIndex beforeConstraint : tableIndexList) {
            if (isNotContain(tableIndices, beforeConstraint)) {
                builder.add(new DropIndex(
                    QualifiedName.of(beforeConstraint.getIndexName().getValue()),
                    after.getQualifiedName()));
            } else {
                tableIndices.remove(beforeConstraint);
            }
        }
        List<CreateIndex> list = tableIndices.stream().map(x -> new CreateIndex(
            QualifiedName.of(x.getIndexName().getValue()), after.getQualifiedName(), x.getIndexColumnNames(),
            x.getProperties()))
            .collect(Collectors.toList());
        builder.addAll(list);
        return builder.build();
    }