public Node visitSubpartition_template_option()

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