public List compareTableElement()

in fastmodel-compare/src/main/java/com/aliyun/fastmodel/compare/impl/table/ColumnCompare.java [62:109]


    public List<BaseStatement> compareTableElement(CreateTable before, CreateTable after) {
        List<ColumnDefinition> beforeColumnDefines = before.getColumnDefines();
        List<ColumnDefinition> afterColumnDefines = after.getColumnDefines();

        boolean beforeEmpty = beforeColumnDefines == null || beforeColumnDefines.isEmpty();
        boolean afterNotEmpty = afterColumnDefines != null && !afterColumnDefines.isEmpty();
        if (beforeEmpty && !afterNotEmpty) {
            return ImmutableList.of();
        }
        QualifiedName qualifiedName = after.getQualifiedName();
        if (beforeEmpty && afterNotEmpty) {
            AddCols addCols = new AddCols(
                qualifiedName,
                afterColumnDefines
            );
            return ImmutableList.of(addCols);
        }
        //如果after的列都是空的
        if (!afterNotEmpty) {
            List<DropCol> dropCols = beforeColumnDefines.stream().map(
                x -> new DropCol(qualifiedName, x.getColName())).collect(Collectors.toList());
            return ImmutableList.copyOf(dropCols);
        }

        Builder<BaseStatement> builder
            = incrementCompare(qualifiedName, beforeColumnDefines, afterColumnDefines, (q, c) -> {
            return new DropCol(q, c.getColName());
        }, (q, c) -> {
            AddCols addCols = new AddCols(q, c);
            return ImmutableList.of(addCols);
        });

        //顺序的调整
        //copy beforeColumn
        List<ColumnDefinition> beforeCopy = new CopyOnWriteArrayList<>(beforeColumnDefines);
        OrderColumnManager beforeOrderColumnManager = new OrderColumnManager(qualifiedName, beforeCopy);
        OrderColumnManager afterOrderColumnManager = new OrderColumnManager(qualifiedName, afterColumnDefines);
        for (ColumnDefinition c : afterColumnDefines) {
            SetColumnOrder compare = beforeOrderColumnManager.compare(c.getColName(), afterOrderColumnManager);
            if (compare == null) {
                continue;
            }
            //if change then add and apply compare
            builder.add(compare);
            beforeOrderColumnManager.apply(compare);
        }
        return builder.build();
    }