in src/core-common/src/main/java/org/apache/kylin/common/persistence/RawResourceFilter.java [79:144]
private boolean checkCondition(Condition condition, RawResource rawResource) {
Object value;
switch (condition.name) {
case "metaKey":
value = rawResource.getMetaKey();
break;
case "uuid":
value = rawResource.getUuid();
break;
case "project":
value = rawResource.getProject();
break;
case "mvcc":
value = rawResource.getMvcc();
break;
case "ts":
value = rawResource.getTs();
break;
case "reservedFiled1":
value = rawResource.getReservedFiled1();
break;
case "reservedFiled2":
value = rawResource.getReservedFiled2();
break;
case "reservedFiled3":
value = rawResource.getReservedFiled3();
break;
case "id":
case "content":
throw new IllegalArgumentException("id & content field can't be used as filter condition");
default:
value = getCustomValue(rawResource, condition.name);
}
if (value != null) {
switch (condition.getOp()) {
case EQUAL:
return Objects.equals(condition.values.get(0), value);
case EQUAL_CASE_INSENSITIVE:
assert value instanceof String
: "[" + condition.name + "] '" + value + "' is not String, can't compare case insensitive";
return ((String) value).equalsIgnoreCase((String) condition.values.get(0));
case LIKE_CASE_INSENSITIVE:
assert value instanceof String
: "[" + condition.name + "] '" + value + "' is not String, can't compare like case insensitive";
return StringUtils.containsIgnoreCase((String) value, (String) condition.values.get(0));
case IN:
return condition.values.contains(value);
case GT:
assert value instanceof Long;
return (Long) value > ((Long) condition.values.get(0));
case LT:
assert value instanceof Long;
return (Long) value < ((Long) condition.values.get(0));
case LE:
assert value instanceof Long;
return (Long) value <= ((Long) condition.values.get(0));
case GE:
assert value instanceof Long;
return (Long) value >= ((Long) condition.values.get(0));
default:
throw new UnsupportedOperationException("Operator not supported:" + condition.getOp());
}
}
//Maybe rawResource is broken, just return false
return false;
}