Search in sources :

Example 6 with Function

use of com.developmentontheedge.sql.model.Function in project be5 by DevelopmentOnTheEdge.

the class OracleTransformer method getDateTimeDiff.

@Override
protected SimpleNode getDateTimeDiff(SimpleNode startDate, SimpleNode endDate, String format) {
    Function trunc = parserContext.getFunction("trunc");
    AstParenthesis dateDifference = new AstParenthesis(DefaultParserContext.FUNC_MINUS.node(new AstCast(endDate, "DATE"), new AstCast(startDate, "DATE")));
    PredefinedFunction opTimes = DefaultParserContext.FUNC_TIMES;
    switch(format) {
        case "SECOND":
            return trunc.node(opTimes.node(dateDifference, AstNumericConstant.of(24 * 60 * 60)));
        case "MINUTE":
            return trunc.node(opTimes.node(dateDifference, AstNumericConstant.of(24 * 60)));
        case "HOUR":
            return trunc.node(opTimes.node(dateDifference, AstNumericConstant.of(24)));
        case "DAY":
            return trunc.node(dateDifference);
        case "MONTH":
            return MONTHS_BETWEEN.node(trunc.node(endDate, new AstStringConstant(format)), trunc.node(startDate, new AstStringConstant(format)));
        case "YEAR":
            PredefinedFunction opDivide = DefaultParserContext.FUNC_DIVIDE;
            return parserContext.getFunction("floor").node(opDivide.node(MONTHS_BETWEEN.node(endDate, startDate), AstNumericConstant.of(12)));
        default:
            throw new IllegalStateException("Unsupported value for datepart in TIMESTAMPDIFF: " + format);
    }
}
Also used : Function(com.developmentontheedge.sql.model.Function) PredefinedFunction(com.developmentontheedge.sql.model.PredefinedFunction) AstCast(com.developmentontheedge.sql.model.AstCast) AstStringConstant(com.developmentontheedge.sql.model.AstStringConstant) AstParenthesis(com.developmentontheedge.sql.model.AstParenthesis) PredefinedFunction(com.developmentontheedge.sql.model.PredefinedFunction)

Example 7 with Function

use of com.developmentontheedge.sql.model.Function in project be5 by DevelopmentOnTheEdge.

the class PostgreSqlTransformer method transformLastDay.

@Override
protected void transformLastDay(AstFunNode node) {
    Function opPlus = DefaultParserContext.FUNC_PLUS;
    Function opMinus = DefaultParserContext.FUNC_MINUS;
    SimpleNode dateTrunc = parserContext.getFunction("date_trunc").node(new AstStringConstant("MONTH"), node.child(0));
    AstInterval monthInterval = new AstInterval(new AstStringConstant("1 MONTH"));
    AstInterval dayInterval = new AstInterval(new AstStringConstant("1 DAY"));
    SimpleNode expr = opPlus.node(dateTrunc, opMinus.node(monthInterval, dayInterval));
    node.replaceWith(new AstCast(expr, "DATE"));
}
Also used : PredefinedFunction(com.developmentontheedge.sql.model.PredefinedFunction) Function(com.developmentontheedge.sql.model.Function) AstCast(com.developmentontheedge.sql.model.AstCast) AstStringConstant(com.developmentontheedge.sql.model.AstStringConstant) AstInterval(com.developmentontheedge.sql.model.AstInterval) SimpleNode(com.developmentontheedge.sql.model.SimpleNode)

Example 8 with Function

use of com.developmentontheedge.sql.model.Function in project be5 by DevelopmentOnTheEdge.

the class PostgreSqlTransformer method transformDateAdd.

@Override
protected void transformDateAdd(AstFunNode node) {
    Function opPlus = DefaultParserContext.FUNC_PLUS;
    Function opTimes = DefaultParserContext.FUNC_TIMES;
    SimpleNode date = node.child(0);
    SimpleNode number = new AstParenthesis(node.child(1));
    String name = node.getFunction().getName();
    String type = name.equalsIgnoreCase("add_months") ? "1 MONTH" : name.equalsIgnoreCase("add_days") ? "1 DAY" : "1 MILLISECOND";
    AstInterval interval = new AstInterval(new AstStringConstant(type));
    node.replaceWith(new AstParenthesis(opPlus.node(date, opTimes.node(interval, number))));
}
Also used : PredefinedFunction(com.developmentontheedge.sql.model.PredefinedFunction) Function(com.developmentontheedge.sql.model.Function) AstStringConstant(com.developmentontheedge.sql.model.AstStringConstant) AstParenthesis(com.developmentontheedge.sql.model.AstParenthesis) AstInterval(com.developmentontheedge.sql.model.AstInterval) SimpleNode(com.developmentontheedge.sql.model.SimpleNode)

Example 9 with Function

use of com.developmentontheedge.sql.model.Function in project be5 by DevelopmentOnTheEdge.

the class DB2Transformer method transformDateAdd.

@Override
protected void transformDateAdd(AstFunNode node) {
    Function opPlus = DefaultParserContext.FUNC_PLUS;
    Function opTimes = DefaultParserContext.FUNC_TIMES;
    SimpleNode date = node.child(0);
    SimpleNode number = node.child(1);
    String name = node.getFunction().getName();
    String type = name.equalsIgnoreCase("add_months") ? "MONTHS" : name.equalsIgnoreCase("add_days") ? "DAYS" : "MICROSECONDS";
    if (type.equals("MICROSECONDS"))
        number = new AstParenthesis(opTimes.node(number, AstNumericConstant.of(1000)));
    node.replaceWith(new AstParenthesis(opPlus.node(date, new AstFirstDayOf(number, type))));
}
Also used : Function(com.developmentontheedge.sql.model.Function) PredefinedFunction(com.developmentontheedge.sql.model.PredefinedFunction) AstWindowFunction(com.developmentontheedge.sql.model.AstWindowFunction) AstParenthesis(com.developmentontheedge.sql.model.AstParenthesis) SimpleNode(com.developmentontheedge.sql.model.SimpleNode) AstFirstDayOf(com.developmentontheedge.sql.model.AstFirstDayOf)

Aggregations

Function (com.developmentontheedge.sql.model.Function)9 PredefinedFunction (com.developmentontheedge.sql.model.PredefinedFunction)9 SimpleNode (com.developmentontheedge.sql.model.SimpleNode)8 AstParenthesis (com.developmentontheedge.sql.model.AstParenthesis)6 AstWindowFunction (com.developmentontheedge.sql.model.AstWindowFunction)5 AstStringConstant (com.developmentontheedge.sql.model.AstStringConstant)4 AstInterval (com.developmentontheedge.sql.model.AstInterval)3 AstCast (com.developmentontheedge.sql.model.AstCast)2 AstFirstDayOf (com.developmentontheedge.sql.model.AstFirstDayOf)2 AstIdentifierConstant (com.developmentontheedge.sql.model.AstIdentifierConstant)2 AstColumnList (com.developmentontheedge.sql.model.AstColumnList)1 AstDateAdd (com.developmentontheedge.sql.model.AstDateAdd)1 AstFrom (com.developmentontheedge.sql.model.AstFrom)1 AstSelect (com.developmentontheedge.sql.model.AstSelect)1 AstSelectList (com.developmentontheedge.sql.model.AstSelectList)1 AstTableRef (com.developmentontheedge.sql.model.AstTableRef)1 AstValues (com.developmentontheedge.sql.model.AstValues)1