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