@Nullable @Override public String toDruidExpression(RexNode rexNode, RelDataType rowType, DruidQuery query ) { final RexCall call = (RexCall) rexNode; final String arg0 = DruidExpressions.toDruidExpression(call.getOperands().get(0), rowType, query); if (arg0 == null) { return null; } if (SqlTypeUtil.isDatetime((call.getOperands().get(0).getType()))) { // Timestamp is represented as long internally no need to any thing here return DruidExpressions.functionCall("div", ImmutableList.of(arg0, DruidExpressions.numberLiteral(1000))); } // dealing with String type final String format = call.getOperands().size() == 2 ? DruidExpressions .toDruidExpression(call.getOperands().get(1), rowType, query) : DEFAULT_TS_FORMAT; return DruidExpressions .functionCall("unix_timestamp", ImmutableList.of(arg0, DruidExpressions.stringLiteral(format))); } }
} else { final int index = RexLiteral.intValue(call.getOperands().get(1)) - 1; indexStart = DruidExpressions.numberLiteral(index); length = DruidExpressions.numberLiteral(RexLiteral.intValue(call.getOperands().get(2))); length = DruidExpressions.numberLiteral(-1);
startIndex = DruidExpressions.numberLiteral( RexLiteral.intValue(call.getOperands().get(1)) - 1); length = DruidExpressions.numberLiteral(RexLiteral.intValue(call.getOperands().get(2))); length = DruidExpressions.numberLiteral(-1);
return DruidExpressions.numberLiteral((Number) RexLiteral .value(rexNode)); } else if (SqlTypeFamily.INTERVAL_DAY_TIME == sqlTypeName.getFamily()) { return DruidExpressions.numberLiteral(milliseconds); } else if (SqlTypeFamily.INTERVAL_YEAR_MONTH == sqlTypeName.getFamily()) { return DruidExpressions.numberLiteral(months); } else if (SqlTypeName.STRING_TYPES.contains(sqlTypeName)) { return || SqlTypeName.TIMESTAMP == sqlTypeName || SqlTypeName.TIME_WITH_LOCAL_TIME_ZONE == sqlTypeName) { return DruidExpressions.numberLiteral( DruidDateTimeUtils.literalValue(rexNode)); } else if (SqlTypeName.BOOLEAN == sqlTypeName) { return DruidExpressions.numberLiteral(RexLiteral.booleanValue(rexNode) ? 1 : 0);