Search in sources :

Example 6 with CallExpr

use of io.mycat.hbt.parser.CallExpr in project Mycat2 by MyCATApache.

the class SchemaConvertor method aggregateCall.

public AggregateCall aggregateCall(ParseNode parseNode) {
    CallExpr callExpr = (CallExpr) parseNode;
    List<ParseNode> exprs = Collections.emptyList();
    List<ParseNode> orderBy = new ArrayList<>();
    ParseNode filter = null;
    Boolean ignoreNulls = null;
    Boolean approximate = null;
    Boolean distinct = null;
    String alias = null;
    String name = null;
    while (true) {
        name = callExpr.getName();
        exprs = callExpr.getArgs().getExprs();
        if ("orderBy".equalsIgnoreCase(name)) {
            orderBy.addAll(exprs.subList(1, exprs.size()));
            callExpr = (CallExpr) exprs.get(0);
            continue;
        }
        if ("filter".equalsIgnoreCase(name)) {
            filter = exprs.get(1);
            callExpr = (CallExpr) exprs.get(0);
            continue;
        }
        if ("ignoreNulls".equalsIgnoreCase(name)) {
            ignoreNulls = true;
            callExpr = (CallExpr) exprs.get(0);
            continue;
        }
        if ("approximate".equalsIgnoreCase(name)) {
            approximate = true;
            callExpr = (CallExpr) exprs.get(0);
            continue;
        }
        if ("distinct".equalsIgnoreCase(name)) {
            distinct = true;
            callExpr = (CallExpr) exprs.get(0);
            continue;
        }
        if ("alias".equalsIgnoreCase(name)) {
            alias = exprs.get(1).toString();
            callExpr = (CallExpr) exprs.get(0);
            continue;
        }
        break;
    }
    List<Expr> collect = callExpr.getArgs().getExprs().stream().map(i -> transforExpr(i)).collect(Collectors.toList());
    Expr filterExpr = null;
    if (filter != null) {
        filterExpr = transforExpr(filter);
    }
    return new AggregateCall(callExpr.getName(), alias, collect, distinct, approximate, ignoreNulls, filterExpr, orderBy.stream().map(i -> getOrderItem(i)).collect(Collectors.toList()));
}
Also used : io.mycat.hbt.parser.literal(io.mycat.hbt.parser.literal) java.util(java.util) Literal(io.mycat.hbt.ast.base.Literal) HBTOp(io.mycat.hbt.ast.HBTOp) io.mycat.hbt.ast.base(io.mycat.hbt.ast.base) MergeModify(io.mycat.hbt.ast.modify.MergeModify) CallExpr(io.mycat.hbt.parser.CallExpr) ParenthesesExpr(io.mycat.hbt.parser.ParenthesesExpr) Collectors(java.util.stream.Collectors) ParseNode(io.mycat.hbt.parser.ParseNode) BigDecimal(java.math.BigDecimal) ModifyFromSql(io.mycat.hbt.ast.modify.ModifyFromSql) NotNull(org.jetbrains.annotations.NotNull) io.mycat.hbt.ast.query(io.mycat.hbt.ast.query) CallExpr(io.mycat.hbt.parser.CallExpr) ParenthesesExpr(io.mycat.hbt.parser.ParenthesesExpr) ParseNode(io.mycat.hbt.parser.ParseNode) CallExpr(io.mycat.hbt.parser.CallExpr)

Example 7 with CallExpr

use of io.mycat.hbt.parser.CallExpr in project Mycat2 by MyCATApache.

the class SchemaConvertor method values.

public List<Object> values(ParseNode fields) {
    CallExpr callExpr = (CallExpr) fields;
    List<ParseNode> exprs = callExpr.getArgs().getExprs();
    return exprs.stream().map(i -> ((Literal) transforExpr(i)).getValue()).collect(Collectors.toList());
}
Also used : io.mycat.hbt.parser.literal(io.mycat.hbt.parser.literal) java.util(java.util) Literal(io.mycat.hbt.ast.base.Literal) HBTOp(io.mycat.hbt.ast.HBTOp) io.mycat.hbt.ast.base(io.mycat.hbt.ast.base) MergeModify(io.mycat.hbt.ast.modify.MergeModify) CallExpr(io.mycat.hbt.parser.CallExpr) ParenthesesExpr(io.mycat.hbt.parser.ParenthesesExpr) Collectors(java.util.stream.Collectors) ParseNode(io.mycat.hbt.parser.ParseNode) BigDecimal(java.math.BigDecimal) ModifyFromSql(io.mycat.hbt.ast.modify.ModifyFromSql) NotNull(org.jetbrains.annotations.NotNull) io.mycat.hbt.ast.query(io.mycat.hbt.ast.query) Literal(io.mycat.hbt.ast.base.Literal) ParseNode(io.mycat.hbt.parser.ParseNode) CallExpr(io.mycat.hbt.parser.CallExpr)

Example 8 with CallExpr

use of io.mycat.hbt.parser.CallExpr in project Mycat2 by MyCATApache.

the class SchemaConvertor method transforExpr.

public Expr transforExpr(ParseNode parseNode) {
    if (parseNode instanceof CallExpr) {
        CallExpr parseNode1 = (CallExpr) parseNode;
        String name = parseNode1.getName();
        List<ParseNode> exprs = parseNode1.getArgs().getExprs();
        List<Expr> collect = exprs.stream().map(i -> transforExpr(i)).collect(Collectors.toList());
        return new Fun(name, collect);
    } else if (parseNode instanceof DecimalLiteral) {
        return new Literal(((DecimalLiteral) parseNode).getNumber());
    } else if (parseNode instanceof IdLiteral) {
        return new Identifier(((IdLiteral) parseNode).getId());
    } else if (parseNode instanceof StringLiteral) {
        return new Literal(((StringLiteral) parseNode).getString());
    } else if (parseNode instanceof IntegerLiteral) {
        return new Literal(((IntegerLiteral) parseNode).getNumber());
    } else if (parseNode instanceof ParenthesesExpr) {
        ParenthesesExpr parseNode1 = (ParenthesesExpr) parseNode;
        List<ParseNode> exprs = parseNode1.getExprs();
        if (exprs.size() == 1) {
            return transforExpr(exprs.get(0));
        }
    } else if (parseNode instanceof BooleanLiteral) {
        return new Literal(((BooleanLiteral) parseNode).getValue());
    } else if (parseNode instanceof NullLiteral) {
        return new Literal(null);
    } else if (parseNode instanceof ParamLiteral) {
        if (params.isEmpty()) {
            return new Param();
        }
        return new Literal(params.get(index++));
    }
    throw new UnsupportedOperationException();
}
Also used : io.mycat.hbt.parser.literal(io.mycat.hbt.parser.literal) java.util(java.util) Literal(io.mycat.hbt.ast.base.Literal) HBTOp(io.mycat.hbt.ast.HBTOp) io.mycat.hbt.ast.base(io.mycat.hbt.ast.base) MergeModify(io.mycat.hbt.ast.modify.MergeModify) CallExpr(io.mycat.hbt.parser.CallExpr) ParenthesesExpr(io.mycat.hbt.parser.ParenthesesExpr) Collectors(java.util.stream.Collectors) ParseNode(io.mycat.hbt.parser.ParseNode) BigDecimal(java.math.BigDecimal) ModifyFromSql(io.mycat.hbt.ast.modify.ModifyFromSql) NotNull(org.jetbrains.annotations.NotNull) io.mycat.hbt.ast.query(io.mycat.hbt.ast.query) CallExpr(io.mycat.hbt.parser.CallExpr) ParenthesesExpr(io.mycat.hbt.parser.ParenthesesExpr) Literal(io.mycat.hbt.ast.base.Literal) ParseNode(io.mycat.hbt.parser.ParseNode) CallExpr(io.mycat.hbt.parser.CallExpr) ParenthesesExpr(io.mycat.hbt.parser.ParenthesesExpr)

Aggregations

CallExpr (io.mycat.hbt.parser.CallExpr)8 ParseNode (io.mycat.hbt.parser.ParseNode)8 HBTOp (io.mycat.hbt.ast.HBTOp)7 io.mycat.hbt.ast.base (io.mycat.hbt.ast.base)7 Literal (io.mycat.hbt.ast.base.Literal)7 MergeModify (io.mycat.hbt.ast.modify.MergeModify)7 ModifyFromSql (io.mycat.hbt.ast.modify.ModifyFromSql)7 io.mycat.hbt.ast.query (io.mycat.hbt.ast.query)7 ParenthesesExpr (io.mycat.hbt.parser.ParenthesesExpr)7 io.mycat.hbt.parser.literal (io.mycat.hbt.parser.literal)7 BigDecimal (java.math.BigDecimal)7 java.util (java.util)7 Collectors (java.util.stream.Collectors)7 NotNull (org.jetbrains.annotations.NotNull)7