public Node visitOut_of_line_constraint()

in fastmodel-transform/fastmodel-transform-oceanbase/src/main/java/com/aliyun/fastmodel/transform/oceanbase/parser/OceanBaseMysqlAstBuilder.java [369:429]


    public Node visitOut_of_line_constraint(Out_of_line_constraintContext ctx) {
        Identifier constraintName = null;
        if (ctx.opt_constraint_name() != null) {
            constraintName = (Identifier)visit(ctx.opt_constraint_name());
        } else {
            constraintName = IdentifierUtil.sysIdentifier();
        }
        //primary key
        if (ctx.out_of_line_primary_index() != null) {
            List<Identifier> colNames = ParserHelper.visit(this,
                ctx.out_of_line_primary_index().column_name_list().column_name(), Identifier.class);
            PrimaryConstraint primaryConstraint = new PrimaryConstraint(
                constraintName,
                colNames
            );
            return primaryConstraint;
        }
        //unique key
        Out_of_line_unique_indexContext outOfLineUniqueIndexContext = ctx.out_of_line_unique_index();
        if (outOfLineUniqueIndexContext != null) {
            List<IndexSortKey> sortKeys = ParserHelper.visit(this,
                outOfLineUniqueIndexContext.sort_column_list().sort_column_key(), IndexSortKey.class);
            Algorithm algorithm = null;
            Identifier indexName = null;
            Index_nameContext indexNameContext = outOfLineUniqueIndexContext.index_name();
            if (indexNameContext != null) {
                indexName = (Identifier)visit(indexNameContext);
            }
            Index_using_algorithmContext indexUsingAlgorithmContext = outOfLineUniqueIndexContext.index_using_algorithm();
            if (indexUsingAlgorithmContext != null) {
                if (indexUsingAlgorithmContext.BTREE() != null) {
                    algorithm = Algorithm.BTREE;
                }
                if (indexUsingAlgorithmContext.HASH() != null) {
                    algorithm = Algorithm.HASH;
                }
            }
            UniqueKeyExprConstraint uniqueConstraint = new UniqueKeyExprConstraint(
                constraintName, indexName, sortKeys, algorithm
            );
            return uniqueConstraint;
        }
        //check constraint
        if (ctx.CHECK() != null) {
            BaseExpression expression = null;
            if (ctx.expr() != null) {
                expression = (BaseExpression)visit(ctx.expr());
            }
            Boolean enforced = null;
            if (ctx.check_state() != null) {
                enforced = ctx.check_state().NOT() == null;
            }
            return new CheckExpressionConstraint(constraintName, expression, enforced);
        }

        //foreign reference
        if (ctx.FOREIGN() != null) {
            return getForeignKeyConstraint(ctx, constraintName);
        }
        return super.visitOut_of_line_constraint(ctx);
    }