Search in sources :

Example 6 with ParseNode

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

the class SchemaConvertor method getGroupItem.

public GroupKey getGroupItem(ParseNode parseNode) {
    CallExpr groupKey = (CallExpr) parseNode;
    List<Expr> collect = groupKey.getArgs().getExprs().stream().map(i -> transforExpr(i)).collect(Collectors.toList());
    return groupkey(collect);
}
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) CallExpr(io.mycat.hbt.parser.CallExpr)

Example 7 with ParseNode

use of io.mycat.hbt.parser.ParseNode 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 8 with ParseNode

use of io.mycat.hbt.parser.ParseNode 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 9 with ParseNode

use of io.mycat.hbt.parser.ParseNode 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

ParseNode (io.mycat.hbt.parser.ParseNode)9 CallExpr (io.mycat.hbt.parser.CallExpr)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 DrdsExecutorCompiler.getCodeExecuterContext (io.mycat.DrdsExecutorCompiler.getCodeExecuterContext)1 PlanImpl (io.mycat.calcite.spm.PlanImpl)1 HBTQueryConvertor (io.mycat.hbt.HBTQueryConvertor)1 SchemaConvertor (io.mycat.hbt.SchemaConvertor)1 Schema (io.mycat.hbt.ast.base.Schema)1 HBTParser (io.mycat.hbt.parser.HBTParser)1