@Override public AttributeCondition between(Object from, Object to) { setOperatorAndArgument(new BetweenOperator(this, new ValueRange(from, to))); return this; }
@Override public String visit(BetweenOperator operator) { StringBuilder sb = new StringBuilder(); ValueRange range = operator.getArgument(); if (!range.isIncludeLower() || !range.isIncludeUpper()) { boolean wrap = parentIsNotOfClass(operator.getAttributeCondition(), operator.getAttributeCondition().isNegated() ? OrCondition.class : AndCondition.class); if (wrap) { sb.append('('); appendAttributePath(sb, operator.getAttributeCondition()); sb.append(operator.getAttributeCondition().isNegated() ? (range.isIncludeLower() ? " < " : " <= ") : (range.isIncludeLower() ? " >= " : " > ")); appendArgument(sb, range.getFrom()); sb.append(operator.getAttributeCondition().isNegated() ? " OR " : " AND "); appendAttributePath(sb, operator.getAttributeCondition()); sb.append(operator.getAttributeCondition().isNegated() ? (range.isIncludeUpper() ? " > " : " >= ") : (range.isIncludeUpper() ? " <= " : " < ")); appendArgument(sb, range.getTo()); if (operator.getAttributeCondition().isNegated()) { sb.append("NOT "); appendAttributePath(sb, operator.getAttributeCondition()); sb.append(" BETWEEN "); appendArgument(sb, range.getFrom());
@Override public String visit(BetweenOperator operator) { StringBuilder sb = new StringBuilder(); ValueRange range = operator.getArgument(); if (!range.isIncludeLower() || !range.isIncludeUpper()) { // if any of the bounds are not included then we cannot use BETWEEN and need to resort to comparison appendAttributePath(sb, operator.getAttributeCondition()); sb.append(operator.getAttributeCondition().isNegated() ? (range.isIncludeLower() ? " < " : " <= ") : (range.isIncludeLower() ? " >= " : " > ")); appendArgument(sb, range.getFrom()); sb.append(operator.getAttributeCondition().isNegated() ? " OR " : " AND "); appendAttributePath(sb, operator.getAttributeCondition()); sb.append(operator.getAttributeCondition().isNegated() ? (range.isIncludeUpper() ? " > " : " >= ") : (range.isIncludeUpper() ? " <= " : " < ")); appendArgument(sb, range.getTo()); } else { // if the bounds are included then we can use BETWEEN if (operator.getAttributeCondition().isNegated()) { sb.append("NOT "); } appendAttributePath(sb, operator.getAttributeCondition()); sb.append(" BETWEEN "); appendArgument(sb, range.getFrom()); sb.append(" AND "); appendArgument(sb, range.getTo()); } return sb.toString(); }
@Override public AttributeCondition between(Object from, Object to) { setOperatorAndArgument(new BetweenOperator(this, new ValueRange(from, to))); return this; }