private static DruidExpression toDruidExpressionForSimpleAggregator( final PlannerContext plannerContext, final RowSignature rowSignature, final RexNode rexNode ) { final DruidExpression druidExpression = Expressions.toDruidExpression(plannerContext, rowSignature, rexNode); if (druidExpression == null) { return null; } if (druidExpression.isSimpleExtraction() && (!druidExpression.isDirectColumnAccess() || rowSignature.getColumnType(druidExpression.getDirectColumn()) == ValueType.STRING)) { // Aggregators are unable to implicitly cast strings to numbers. So remove the simple extraction in this case. return druidExpression.map(simpleExtraction -> null, Function.identity()); } else { return druidExpression; } } }
typeCastExpression = operandExpression.map( Function.identity(), expression -> StringUtils.format("CAST(%s, '%s')", expression, toExprType.toString())
} else if (call.getOperands().size() == 1) { return druidExpression.map(
return input.map( simpleExtraction -> simpleExtraction.cascade(new SubstringDimExtractionFn(index, length < 0 ? null : length)), expression -> StringUtils.format(
} else if (call.getOperands().size() == 1) { return druidExpression.map( simpleExtraction -> null, expression -> StringUtils.format("ceil(%s)", expression)
"timestamp_shift", timeExpr, shiftExpr.map( simpleExtraction -> null, expression -> StringUtils.format("concat('P', %s, 'M')", expression)
private static DruidExpression toDruidExpressionForSimpleAggregator( final PlannerContext plannerContext, final RowSignature rowSignature, final RexNode rexNode ) { final DruidExpression druidExpression = Expressions.toDruidExpression(plannerContext, rowSignature, rexNode); if (druidExpression == null) { return null; } if (druidExpression.isSimpleExtraction() && (!druidExpression.isDirectColumnAccess() || rowSignature.getColumnType(druidExpression.getDirectColumn()) == ValueType.STRING)) { // Aggregators are unable to implicitly cast strings to numbers. So remove the simple extraction in this case. return druidExpression.map(simpleExtraction -> null, Function.identity()); } else { return druidExpression; } } }
typeCastExpression = operandExpression.map( Function.identity(), expression -> StringUtils.format("CAST(%s, '%s')", expression, toExprType.toString())
return input.map( simpleExtraction -> simpleExtraction.cascade(new SubstringDimExtractionFn(index, length < 0 ? null : length)), expression -> StringUtils.format(
} else if (call.getOperands().size() == 1) { return druidExpression.map(
} else if (call.getOperands().size() == 1) { return druidExpression.map( simpleExtraction -> null, expression -> StringUtils.format("ceil(%s)", expression)
"timestamp_shift", timeExpr, shiftExpr.map( simpleExtraction -> null, expression -> StringUtils.format("concat('P', %s, 'M')", expression)