@Nullable public static TimestampFloorExprMacro.TimestampFloorExpr asTimestampFloorExpr( final DruidExpression expression, final ExprMacroTable macroTable ) { final Expr expr = Parser.parse(expression.getExpression(), macroTable); if (expr instanceof TimestampFloorExprMacro.TimestampFloorExpr) { return (TimestampFloorExprMacro.TimestampFloorExpr) expr; } else { return null; } }
public static String functionCall(final String functionName, final List<DruidExpression> args) { Preconditions.checkNotNull(functionName, "functionName"); Preconditions.checkNotNull(args, "args"); final StringBuilder builder = new StringBuilder(functionName); builder.append("("); for (int i = 0; i < args.size(); i++) { final DruidExpression arg = Preconditions.checkNotNull(args.get(i), "arg #%s", i); builder.append(arg.getExpression()); if (i < args.size() - 1) { builder.append(","); } } builder.append(")"); return builder.toString(); }
/** * Translates to an "expression" type leaf filter. Used as a fallback if we can't use a simple leaf filter. */ @Nullable private static DimFilter toExpressionLeafFilter( final PlannerContext plannerContext, final RowSignature rowSignature, final RexNode rexNode ) { final DruidExpression druidExpression = toDruidExpression(plannerContext, rowSignature, rexNode); return druidExpression == null ? null : new ExpressionDimFilter(druidExpression.getExpression(), plannerContext.getExprMacroTable()); }
@Override public DruidExpression toDruidExpression( final PlannerContext plannerContext, final RowSignature rowSignature, final RexNode rexNode ) { return OperatorConversions.convertCall( plannerContext, rowSignature, rexNode, operands -> DruidExpression.fromExpression( StringUtils.format( "%s(%s)", druidOperator, Iterables.getOnlyElement(operands).getExpression() ) ) ); } }
@Override public DruidExpression toDruidExpression( final PlannerContext plannerContext, final RowSignature rowSignature, final RexNode rexNode ) { return OperatorConversions.convertCall( plannerContext, rowSignature, rexNode, operands -> DruidExpression.fromExpression( StringUtils.format( "(%s %s)", druidOperator, Iterables.getOnlyElement(operands).getExpression() ) ) ); } }
@Override public DruidExpression toDruidExpression( final PlannerContext plannerContext, final RowSignature rowSignature, final RexNode rexNode ) { return OperatorConversions.convertCall( plannerContext, rowSignature, rexNode, operands -> DruidExpression.fromExpression( StringUtils.format( "(%s %s)", Iterables.getOnlyElement(operands).getExpression(), druidOperator ) ) ); } }
if (druidExpressions.size() > 2) { fromIndexExpression = DruidExpression.fromExpression( StringUtils.format("(%s - 1)", druidExpressions.get(2).getExpression()) ); } else {
StringUtils.format( "(cast(cast(%s * %s,'long'),'double') / %s)", arg.getExpression(), factorString, factorString
"timestamp_format", ImmutableList.of( timeExpression.getExpression(), DruidExpression.stringLiteral(pattern), DruidExpression.stringLiteral(timeZone.getID())
final PostAggregator postAggregator = new ExpressionPostAggregator( postAggregatorName, postAggregatorExpression.getExpression(), null, plannerContext.getExprMacroTable()
for (int i = dimensions.size() - 1; i >= 0; i--) { final DimensionExpression dimension = dimensions.get(i); if (Parser.parse(dimension.getDruidExpression().getExpression(), plannerContext.getExprMacroTable()) .isLiteral() && !aggregateProjectBits.get(i)) { dimensions.remove(i);
"timestamp_floor", ImmutableList.of( input.getExpression(), DruidExpression.stringLiteral(granularity.getPeriod().toString()), DruidExpression.numberLiteral(
Stream .of( druidExpression.getExpression(), DruidExpression.stringLiteral(granularity.getPeriod().toString()), DruidExpression.numberLiteral(
} else { fieldName = null; expression = arg.getExpression();
} else { fieldName = null; expression = arg.getExpression();
} else { fieldName = null; expression = arg.getExpression();
StringUtils.format( "(%s %s %s)", timeExpr.getExpression(), direction > 0 ? "+" : "-", shiftExpr.getExpression()
} else { fieldName = null; expression = arg.getExpression();
final DruidExpression arg = inputExpressions.get(1); final Expr truncTypeExpr = Parser.parse( inputExpressions.get(0).getExpression(), plannerContext.getExprMacroTable() );
private void testExpression( final RexNode rexNode, final DruidExpression expectedExpression, final Object expectedResult ) { final DruidExpression expression = Expressions.toDruidExpression(plannerContext, rowSignature, rexNode); Assert.assertEquals("Expression for: " + rexNode, expectedExpression, expression); final ExprEval result = Parser.parse(expression.getExpression(), plannerContext.getExprMacroTable()) .eval(Parser.withMap(bindings)); Assert.assertEquals("Result for: " + rexNode, expectedResult, result.value()); } }