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