public Node visitAlterByAddForeignKey()

in fastmodel-transform/fastmodel-transform-mysql/src/main/java/com/aliyun/fastmodel/transform/mysql/parser/MysqlAstBuilder.java [708:766]


    public Node visitAlterByAddForeignKey(AlterByAddForeignKeyContext ctx) {
        QualifiedName tableName = getQualifiedName((TableNameContext)ctx.value);
        Identifier constraint = null;
        List<Identifier> columns = ImmutableList.of();
        if (ctx.name != null) {
            constraint = (Identifier)visit(ctx.name);
        } else if (ctx.indexName != null) {
            constraint = (Identifier)visit(ctx.indexName);
        } else {
            constraint = IdentifierUtil.sysIdentifier();
        }
        //columns parse
        IndexColumnNamesContext indexColumnNamesContext = ctx.indexColumnNames();
        if (indexColumnNamesContext != null) {
            List<IndexColumnName> indexColumnNames =
                ParserHelper.visit(this, indexColumnNamesContext.indexColumnName(), IndexColumnName.class);
            columns = indexColumnNames
                .stream()
                .map(IndexColumnName::getColumnName)
                .collect(Collectors.toList());
        }

        QualifiedName reference = getQualifiedName(ctx.referenceDefinition().tableName());
        List<Identifier> referenceColumns = ImmutableList.of();
        if (ctx.referenceDefinition().indexColumnNames() != null) {
            List<IndexColumnName> indexColumnNames = ParserHelper.visit(this,
                ctx.referenceDefinition().indexColumnNames().indexColumnName(),
                IndexColumnName.class);
            referenceColumns = indexColumnNames
                .stream()
                .map(IndexColumnName::getColumnName)
                .collect(Collectors.toList());
        }
        DimConstraint dimConstraint = new DimConstraint(
            constraint,
            columns,
            reference,
            referenceColumns
        );
        switch (reverseContext.getReverseRelationStrategy()) {
            case DDL:
                AddConstraint addConstraint = new AddConstraint(
                    tableName,
                    dimConstraint
                );
                return addConstraint;
            case SCRIPT:
                return new RefRelation(
                    QualifiedName.of(
                        Lists.newArrayList(constraint)),
                    new RefObject(tableName, columns, null),
                    new RefObject(reference, referenceColumns, null),
                    RefDirection.LEFT_DIRECTION_RIGHT
                );
            default:
                throw new ReverseUnsupportedOperationException(ParserHelper.getOrigin(ctx),
                    "unsupported the strategy:" + reverseContext.getReverseRelationStrategy());
        }
    }