public static DruidExpression applyTimeExtract( final DruidExpression timeExpression, final TimestampExtractExprMacro.Unit unit, final DateTimeZone timeZone ) { return DruidExpression.fromFunctionCall( "timestamp_extract", ImmutableList.of( timeExpression, DruidExpression.fromExpression(DruidExpression.stringLiteral(unit.name())), DruidExpression.fromExpression(DruidExpression.stringLiteral(timeZone.getID())) ) ); }
private static DruidExpression castDateTimeToChar( final PlannerContext plannerContext, final DruidExpression operand, final SqlTypeName fromType ) { return DruidExpression.fromFunctionCall( "timestamp_format", ImmutableList.of( operand, DruidExpression.fromExpression(DruidExpression.stringLiteral(dateTimeFormatString(fromType))), DruidExpression.fromExpression(DruidExpression.stringLiteral(plannerContext.getTimeZone().getID())) ) ); }
@Override public DruidExpression toDruidExpression( final PlannerContext plannerContext, final RowSignature rowSignature, final RexNode rexNode ) { return OperatorConversions.convertCall( plannerContext, rowSignature, rexNode, druidExpressions -> { if (druidExpressions.size() > 1) { return TrimOperatorConversion.makeTrimExpression( SqlTrimFunction.Flag.BOTH, druidExpressions.get(0), druidExpressions.get(1) ); } else { return TrimOperatorConversion.makeTrimExpression( SqlTrimFunction.Flag.BOTH, druidExpressions.get(0), DruidExpression.fromExpression(DruidExpression.stringLiteral(" ")) ); } } ); } }
@Override public DruidExpression toDruidExpression( final PlannerContext plannerContext, final RowSignature rowSignature, final RexNode rexNode ) { return OperatorConversions.convertCall( plannerContext, rowSignature, rexNode, druidExpressions -> { if (druidExpressions.size() > 1) { return TrimOperatorConversion.makeTrimExpression( SqlTrimFunction.Flag.TRAILING, druidExpressions.get(0), druidExpressions.get(1) ); } else { return TrimOperatorConversion.makeTrimExpression( SqlTrimFunction.Flag.TRAILING, druidExpressions.get(0), DruidExpression.fromExpression(DruidExpression.stringLiteral(" ")) ); } } ); } }
@Override public DruidExpression toDruidExpression( final PlannerContext plannerContext, final RowSignature rowSignature, final RexNode rexNode ) { return OperatorConversions.convertCall( plannerContext, rowSignature, rexNode, druidExpressions -> { if (druidExpressions.size() > 1) { return TrimOperatorConversion.makeTrimExpression( SqlTrimFunction.Flag.LEADING, druidExpressions.get(0), druidExpressions.get(1) ); } else { return TrimOperatorConversion.makeTrimExpression( SqlTrimFunction.Flag.LEADING, druidExpressions.get(0), DruidExpression.fromExpression(DruidExpression.stringLiteral(" ")) ); } } ); } }
ImmutableList.of( timeExpression.getExpression(), DruidExpression.stringLiteral(pattern), DruidExpression.stringLiteral(timeZone.getID()) ).stream().map(DruidExpression::fromExpression).collect(Collectors.toList()) );
ImmutableList.of( input.getExpression(), DruidExpression.stringLiteral(granularity.getPeriod().toString()), DruidExpression.numberLiteral( granularity.getOrigin() == null ? null : granularity.getOrigin().getMillis() ), DruidExpression.stringLiteral(granularity.getTimeZone().toString()) ).stream().map(DruidExpression::fromExpression).collect(Collectors.toList()) );
.of( druidExpression.getExpression(), DruidExpression.stringLiteral(granularity.getPeriod().toString()), DruidExpression.numberLiteral( granularity.getOrigin() == null ? null : granularity.getOrigin().getMillis() ), DruidExpression.stringLiteral(granularity.getTimeZone().toString())
ImmutableList.of( arg, DruidExpression.fromExpression(DruidExpression.stringLiteral(truncPeriod.toString())), DruidExpression.fromExpression(DruidExpression.stringLiteral(null)), DruidExpression.fromExpression(DruidExpression.stringLiteral(plannerContext.getTimeZone().getID()))
private static DruidExpression castCharToDateTime( final PlannerContext plannerContext, final DruidExpression operand, final SqlTypeName toType ) { // Cast strings to datetimes by parsing them from SQL format. final DruidExpression timestampExpression = DruidExpression.fromFunctionCall( "timestamp_parse", ImmutableList.of( operand, DruidExpression.fromExpression(DruidExpression.nullLiteral()), DruidExpression.fromExpression(DruidExpression.stringLiteral(plannerContext.getTimeZone().getID())) ) ); if (toType == SqlTypeName.DATE) { return TimeFloorOperatorConversion.applyTimestampFloor( timestampExpression, new PeriodGranularity(Period.days(1), null, plannerContext.getTimeZone()), plannerContext.getExprMacroTable() ); } else if (toType == SqlTypeName.TIMESTAMP) { return timestampExpression; } else { throw new ISE("Unsupported DateTime type[%s]", toType); } }
return DruidExpression.fromExpression(DruidExpression.numberLiteral(months)); } else if (SqlTypeName.STRING_TYPES.contains(sqlTypeName)) { return DruidExpression.fromExpression(DruidExpression.stringLiteral(RexLiteral.stringValue(rexNode))); } else if (SqlTypeName.TIMESTAMP == sqlTypeName || SqlTypeName.DATE == sqlTypeName) { if (RexLiteral.isNullLiteral(rexNode)) {
public static DruidExpression applyTimeExtract( final DruidExpression timeExpression, final TimestampExtractExprMacro.Unit unit, final DateTimeZone timeZone ) { return DruidExpression.fromFunctionCall( "timestamp_extract", ImmutableList.of( timeExpression, DruidExpression.fromExpression(DruidExpression.stringLiteral(unit.name())), DruidExpression.fromExpression(DruidExpression.stringLiteral(timeZone.getID())) ) ); }
private static DruidExpression castDateTimeToChar( final PlannerContext plannerContext, final DruidExpression operand, final SqlTypeName fromType ) { return DruidExpression.fromFunctionCall( "timestamp_format", ImmutableList.of( operand, DruidExpression.fromExpression(DruidExpression.stringLiteral(dateTimeFormatString(fromType))), DruidExpression.fromExpression(DruidExpression.stringLiteral(plannerContext.getTimeZone().getID())) ) ); }
@Override public DruidExpression toDruidExpression( final PlannerContext plannerContext, final RowSignature rowSignature, final RexNode rexNode ) { return OperatorConversions.convertCall( plannerContext, rowSignature, rexNode, druidExpressions -> { if (druidExpressions.size() > 1) { return TrimOperatorConversion.makeTrimExpression( SqlTrimFunction.Flag.TRAILING, druidExpressions.get(0), druidExpressions.get(1) ); } else { return TrimOperatorConversion.makeTrimExpression( SqlTrimFunction.Flag.TRAILING, druidExpressions.get(0), DruidExpression.fromExpression(DruidExpression.stringLiteral(" ")) ); } } ); } }
@Override public DruidExpression toDruidExpression( final PlannerContext plannerContext, final RowSignature rowSignature, final RexNode rexNode ) { return OperatorConversions.convertCall( plannerContext, rowSignature, rexNode, druidExpressions -> { if (druidExpressions.size() > 1) { return TrimOperatorConversion.makeTrimExpression( SqlTrimFunction.Flag.BOTH, druidExpressions.get(0), druidExpressions.get(1) ); } else { return TrimOperatorConversion.makeTrimExpression( SqlTrimFunction.Flag.BOTH, druidExpressions.get(0), DruidExpression.fromExpression(DruidExpression.stringLiteral(" ")) ); } } ); } }
@Override public DruidExpression toDruidExpression( final PlannerContext plannerContext, final RowSignature rowSignature, final RexNode rexNode ) { return OperatorConversions.convertCall( plannerContext, rowSignature, rexNode, druidExpressions -> { if (druidExpressions.size() > 1) { return TrimOperatorConversion.makeTrimExpression( SqlTrimFunction.Flag.LEADING, druidExpressions.get(0), druidExpressions.get(1) ); } else { return TrimOperatorConversion.makeTrimExpression( SqlTrimFunction.Flag.LEADING, druidExpressions.get(0), DruidExpression.fromExpression(DruidExpression.stringLiteral(" ")) ); } } ); } }
ImmutableList.of( timeExpression.getExpression(), DruidExpression.stringLiteral(pattern), DruidExpression.stringLiteral(timeZone.getID()) ).stream().map(DruidExpression::fromExpression).collect(Collectors.toList()) );
ImmutableList.of( input.getExpression(), DruidExpression.stringLiteral(granularity.getPeriod().toString()), DruidExpression.numberLiteral( granularity.getOrigin() == null ? null : granularity.getOrigin().getMillis() ), DruidExpression.stringLiteral(granularity.getTimeZone().toString()) ).stream().map(DruidExpression::fromExpression).collect(Collectors.toList()) );
ImmutableList.of( arg, DruidExpression.fromExpression(DruidExpression.stringLiteral(truncPeriod.toString())), DruidExpression.fromExpression(DruidExpression.stringLiteral(null)), DruidExpression.fromExpression(DruidExpression.stringLiteral(plannerContext.getTimeZone().getID()))
private static DruidExpression castCharToDateTime( final PlannerContext plannerContext, final DruidExpression operand, final SqlTypeName toType ) { // Cast strings to datetimes by parsing them from SQL format. final DruidExpression timestampExpression = DruidExpression.fromFunctionCall( "timestamp_parse", ImmutableList.of( operand, DruidExpression.fromExpression(DruidExpression.nullLiteral()), DruidExpression.fromExpression(DruidExpression.stringLiteral(plannerContext.getTimeZone().getID())) ) ); if (toType == SqlTypeName.DATE) { return TimeFloorOperatorConversion.applyTimestampFloor( timestampExpression, new PeriodGranularity(Period.days(1), null, plannerContext.getTimeZone()), plannerContext.getExprMacroTable() ); } else if (toType == SqlTypeName.TIMESTAMP) { return timestampExpression; } else { throw new ISE("Unsupported DateTime type[%s]", toType); } }