in src/query-common/src/main/java/org/apache/kylin/query/util/DateNumberFilterTransformer.java [238:285]
String rewriteFilter(String op, SqlNumericLiteral time, TimeExpression timeExpression) {
String target = null;
switch (op) {
case "=":
if (timeExpression.isYear(time)) {
target = String.format(Locale.ROOT, "cast(%s as date) BETWEEN %s", timeExpression.colNameString(),
yearToRange(time.getValueAs(Integer.class)));
} else if (timeExpression.isMonthYear(time)) {
target = String.format(Locale.ROOT, "cast(%s as date) BETWEEN %s", timeExpression.colNameString(),
monthYearToRange(time.getValueAs(Integer.class)));
} else if (timeExpression.isDayMonthYear(time)) {
target = String.format(Locale.ROOT, "cast(%s as date) = %s", timeExpression.colNameString(),
dayMonthYearToDate(time.toString()));
}
break;
case "!=":
case "<>":
if (timeExpression.isYear(time)) {
target = String.format(Locale.ROOT, "cast(%s as date) NOT BETWEEN %s",
timeExpression.colNameString(), yearToRange(time.getValueAs(Integer.class)));
} else if (timeExpression.isMonthYear(time)) {
target = String.format(Locale.ROOT, "cast(%s as date) NOT BETWEEN %s",
timeExpression.colNameString(), monthYearToRange(time.getValueAs(Integer.class)));
} else if (timeExpression.isDayMonthYear(time)) {
target = String.format(Locale.ROOT, "cast(%s as date) <> %s", timeExpression.colNameString(),
dayMonthYearToDate(time.toString()));
}
break;
case ">":
case "<":
case ">=":
case "<=":
if (timeExpression.isYear(time)) {
target = String.format(Locale.ROOT, "cast(%s as date) %s %s", timeExpression.colNameString(), op,
yearToDate(time.getValueAs(Integer.class), op.equals(">") || op.equals("<=")));
} else if (timeExpression.isMonthYear(time)) {
target = String.format(Locale.ROOT, "cast(%s as date) %s %s", timeExpression.colNameString(), op,
monthToDate(time.getValueAs(Integer.class), op.equals(">") || op.equals("<=")));
} else if (timeExpression.isDayMonthYear(time)) {
target = String.format(Locale.ROOT, "cast(%s as date) %s %s", timeExpression.colNameString(), op,
dayMonthYearToDate(time.toString()));
}
break;
default:
break;
}
return target;
}