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