public Node visitPredicate()

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


    public Node visitPredicate(PredicateContext ctx) {
        //in
        if (ctx.IN() != null) {
            InPredicate inPredicate = null;
            BaseExpression baseExpression = (BaseExpression)visit(ctx.bit_expr(0));
            BaseExpression valueList = (BaseExpression)visit(ctx.in_expr());
            inPredicate = new InPredicate(baseExpression, valueList);
            if (ctx.not() != null) {
                return new NotExpression(ParserHelper.getLocation(ctx), inPredicate);
            } else {
                return inPredicate;
            }
        }
        //between and
        if (ctx.BETWEEN() != null) {
            BaseExpression value = (BaseExpression)visit(ctx.bit_expr(0));
            BaseExpression min = (BaseExpression)visit(ctx.bit_expr(1));
            BaseExpression max = (BaseExpression)visit(ctx.predicate());
            BetweenPredicate betweenPredicate = new BetweenPredicate(value, min, max);
            if (ctx.not() != null) {
                return new NotExpression(ParserHelper.getLocation(ctx), betweenPredicate);
            }
            return betweenPredicate;
        }
        //like
        if (ctx.LIKE() != null) {
            BaseExpression left = (BaseExpression)visit(ctx.bit_expr(0));
            LikeOperator operator = LikeOperator.LIKE;
            BaseExpression target = null;
            if (CollectionUtils.isNotEmpty(ctx.simple_expr())) {
                target = (BaseExpression)visit(ctx.simple_expr(0));
            } else {
                target = (BaseExpression)visit(ctx.string_val_list(0));
            }
            LikePredicate likePredicate = new LikePredicate(ParserHelper.getLocation(ctx), ParserHelper.getOrigin(ctx), left, operator, null,
                target);
            if (ctx.not() != null) {
                return new NotExpression(ParserHelper.getLocation(ctx), likePredicate);
            } else {
                return likePredicate;
            }
        }
        //REGEXP
        if (ctx.REGEXP() != null) {
            LikeOperator operator = LikeOperator.REGEXP;
            BaseExpression left = (BaseExpression)visit(ctx.bit_expr(0));
            BaseExpression target = null;
            if (ctx.bit_expr().size() > 1) {
                target = (BaseExpression)visit(ctx.bit_expr(1));
            } else {
                target = (BaseExpression)visit(ctx.string_val_list(0));
            }
            LikePredicate likePredicate = new LikePredicate(ParserHelper.getLocation(ctx), ParserHelper.getOrigin(ctx), left, operator, null,
                target);
            if (ctx.not() != null) {
                return new NotExpression(ParserHelper.getLocation(ctx), likePredicate);
            } else {
                return likePredicate;
            }
        }
        return super.visitPredicate(ctx);
    }