in fastmodel-transform/fastmodel-transform-oceanbase/src/main/java/com/aliyun/fastmodel/transform/oceanbase/parser/OceanBaseMysqlAstBuilder.java [1136:1191]
public Node visitSubpartition_template_option(Subpartition_template_optionContext ctx) {
BaseExpression expression = null;
if (ctx.expr() != null) {
expression = (BaseExpression)visit(ctx.expr());
}
List<Identifier> columnList = null;
if (ctx.COLUMNS() != null) {
columnList = ParserHelper.visit(this, ctx.column_name_list().column_name(), Identifier.class);
}
List<SubPartitionElement> elements = null;
if (ctx.opt_hash_subpartition_list() != null) {
elements = ParserHelper.visit(this, ctx.opt_hash_subpartition_list().hash_subpartition_list().hash_subpartition_element(),
SubPartitionElement.class);
}
if (ctx.RANGE() != null) {
// SUBPARTITION BY RANGE LeftParen expr RightParen SUBPARTITION TEMPLATE opt_range_subpartition_list
// | SUBPARTITION BY RANGE COLUMNS LeftParen column_name_list RightParen SUBPARTITION TEMPLATE opt_range_subpartition_list
SubPartitionList subPartitionList = null;
List<SubPartitionElement> partitionList = null;
if (ctx.opt_range_subpartition_list() != null) {
partitionList = ParserHelper.visit(this, ctx.opt_range_subpartition_list().range_subpartition_list().range_subpartition_element(),
SubPartitionElement.class);
subPartitionList = new SubPartitionList(partitionList);
}
return new SubRangeTemplatePartition(expression, columnList, subPartitionList);
}
if (ctx.HASH() != null) {
SubPartitionList subPartitionList = null;
if (elements != null) {
subPartitionList = new SubPartitionList(elements);
}
return new SubHashTemplatePartition(expression, subPartitionList);
}
if (ctx.BISON_LIST() != null) {
SubPartitionList subPartitionList = null;
List<SubPartitionElement> listSubPartitionElements = null;
if (ctx.opt_list_subpartition_list() != null) {
listSubPartitionElements = ParserHelper.visit(this,
ctx.opt_list_subpartition_list().list_subpartition_list().list_subpartition_element(),
SubPartitionElement.class);
subPartitionList = new SubPartitionList(listSubPartitionElements);
}
return new SubListTemplatePartition(expression, columnList, subPartitionList);
}
if (ctx.KEY() != null) {
SubPartitionList subPartitionList = null;
if (elements != null) {
subPartitionList = new SubPartitionList(elements);
}
return new SubKeyTemplatePartition(columnList, subPartitionList);
}
return super.visitSubpartition_template_option(ctx);
}