use of com.developmentontheedge.sql.model.AstStringConstant in project be5 by DevelopmentOnTheEdge.
the class OracleTransformer method transformYearMonthDay.
@Override
protected void transformYearMonthDay(SimpleNode node) {
String dateField = "";
String name = node instanceof AstFunNode ? ((AstFunNode) node).getFunction().getName() : ((AstExtract) node).getDateField();
if ("year".equalsIgnoreCase(name))
dateField = "YYYY";
if ("month".equalsIgnoreCase(name))
dateField = "MM";
if ("day".equalsIgnoreCase(name))
dateField = "DD";
node.replaceWith(parserContext.getFunction("to_number").node(parserContext.getFunction("to_char").node(node.child(0), new AstStringConstant(dateField))));
}
use of com.developmentontheedge.sql.model.AstStringConstant 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);
}
}
use of com.developmentontheedge.sql.model.AstStringConstant 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"));
}
use of com.developmentontheedge.sql.model.AstStringConstant 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))));
}
use of com.developmentontheedge.sql.model.AstStringConstant in project be5 by DevelopmentOnTheEdge.
the class ContextApplier method applyPlaceHolder.
private void applyPlaceHolder(AstBePlaceHolder placeholderNode) {
String ph = placeholderNode.getPlaceHolder();
SimpleNode replacement;
if (placeholderNode instanceof AstBeListPlaceHolder) {
AstInValueList list = new AstInValueList(SqlParserTreeConstants.JJTINVALUELIST);
context.roles().map(AstStringConstant::new).forEach(list::addChild);
replacement = list;
} else {
String rawResult;
switch(ph) {
case "username":
rawResult = context.getUserName();
break;
case "timestamp":
rawResult = String.valueOf(System.currentTimeMillis());
break;
default:
throw new UnsupportedOperationException("Unsupported placeholder: " + ph);
}
replacement = new AstStringConstant(rawResult);
}
replacement.inheritFrom(placeholderNode);
placeholderNode.replaceWith(replacement);
}
Aggregations