@Override public Boolean visit(ModIsQueryCriteria criteria, KVValue<?> arg) { KVValue<?> referenced = resolve(criteria.getAttributeReference(), arg); if (referenced == null) { return false; } if (referenced.getValue() instanceof Integer || referenced.getValue() instanceof Long) { long refValue = ((Number) referenced.getValue()).longValue(); long reminder = refValue % criteria.getDivisor().getValue().longValue(); return reminder == criteria.getReminder().getValue().longValue(); } return false; }
@Override public Boolean visit(IsGreaterOrEqualQueryCriteria criteria, KVValue<?> arg) { KVValue<?> referenced = resolve(criteria.getAttributeReference(), arg); if (referenced == null) { return false; } Object innerValue = criteria.getValue().getValue(); if (innerValue instanceof Number) { if (referenced.getValue() instanceof Number) { Number refNumber = (Number) referenced.getValue(); return refNumber.doubleValue() >= ((Number) innerValue).doubleValue(); } return false; } if (innerValue instanceof String) { if (referenced.getValue() instanceof String) { return ((String) referenced.getValue()).compareTo((String) innerValue) >= 0; } return false; } return false; }
@Override public Boolean visit(IsGreaterQueryCriteria criteria, KVValue<?> arg) { KVValue<?> referenced = resolve(criteria.getAttributeReference(), arg); if (referenced == null) { return false; } Object innerValue = criteria.getValue().getValue(); if (innerValue instanceof Number) { if (referenced.getValue() instanceof Number) { Number refNumber = (Number) referenced.getValue(); return refNumber.doubleValue() > ((Number) innerValue).doubleValue(); } return false; } if (innerValue instanceof String) { if (referenced.getValue() instanceof String) { return ((String) referenced.getValue()).compareTo((String) innerValue) > 0; } return false; } return false; }
@Override public Boolean visit(IsLessOrEqualQueryCriteria criteria, KVValue<?> arg) { KVValue<?> referenced = resolve(criteria.getAttributeReference(), arg); if (referenced == null) { return false; } Object innerValue = criteria.getValue().getValue(); if (innerValue instanceof Number) { if (referenced.getValue() instanceof Number) { Number refNumber = (Number) referenced.getValue(); return refNumber.doubleValue() <= ((Number) innerValue).doubleValue(); } return false; } if (innerValue instanceof String) { if (referenced.getValue() instanceof String) { return ((String) referenced.getValue()).compareTo((String) innerValue) <= 0; } return false; } return false; }
@Override public Boolean visit(IsLessQueryCriteria criteria, KVValue<?> arg) { KVValue<?> referenced = resolve(criteria.getAttributeReference(), arg); if (referenced == null) { return false; } Object innerValue = criteria.getValue().getValue(); if (innerValue instanceof Number) { if (referenced.getValue() instanceof Number) { Number refNumber = (Number) referenced.getValue(); return refNumber.doubleValue() < ((Number) innerValue).doubleValue(); } return false; } if (innerValue instanceof String) { if (referenced.getValue() instanceof String) { return ((String) referenced.getValue()).compareTo((String) innerValue) < 0; } return false; } return false; }
@Override public Condition visit(ModIsQueryCriteria criteria, Boolean inArray) { String[] keys = translateArrayRef(criteria.getAttributeReference()); Field field = DSL.field(databaseInterface.arraySerializer().getFieldName(keys)); Condition criteriaCondition; if (!isInArrayValue(criteria.getAttributeReference(), inArray)) { Number divisor = criteria.getDivisor().getValue(); Param<?> param = translateValueToSQL(criteria.getReminder()); criteriaCondition = field.mod(divisor).equal(param); } else { criteriaCondition = DSL.condition( field.getName() + " mod ? = ?", translateValueToArraySerialization(criteria.getDivisor()), translateValueToArraySerialization(criteria.getReminder()) ); } return addArrayCondition(criteria, criteriaCondition, keys, inArray); }