private static SearchCondition createCondition(QueryField queryField) { Key searchKey = valueToKey(queryField.getSearchKey()); switch(queryField.getOperator()) { case LARGER_THAN: return new RangeCondition(searchKey, false, null, false); case LARGER_THAN_OR_EQUALS: return new RangeCondition(searchKey, true, null, false); case SMALLER_THAN: return new RangeCondition(null, false, searchKey, false); case SMALLER_THAN_OR_EQUALS: return new RangeCondition(null, false, searchKey, true); case NOT_EQUALS: return new NotEqualsCondition(searchKey); case EQUALS: default: return new EqualsCondition(searchKey); } }
private SearchCondition handleEqualsToRange(EqualsCondition equalsCondition) { int nrOfKeys = keyInfo.getKeyFields().size(); if(nrOfKeys > 1) { //composite keys always use range search return new RangeCondition(equalsCondition.getKey(), true, equalsCondition.getKey(), true); } else { return equalsCondition; } }
private static RangeCondition mergeRangeConditions(List<RangeCondition> rangeConditions) { Key lowestKey = null; boolean startInclusive = false; boolean endInclusive = false; Key highestKey = null; for(SearchCondition condition : rangeConditions) { RangeCondition rangeCondition = (RangeCondition) condition; Key rangeStartKey = rangeCondition.getStart(); Key rangeEndKey = rangeCondition.getEnd(); if(rangeStartKey != null && (lowestKey == null || rangeStartKey.compareTo(lowestKey) < 0)) { lowestKey = rangeStartKey; startInclusive = rangeCondition.isStartIncluded(); } if(rangeEndKey != null && (highestKey == null || rangeEndKey.compareTo(highestKey) > 0)) { highestKey = rangeEndKey; endInclusive = rangeCondition.isEndIncluded(); } } return new RangeCondition(lowestKey, startInclusive, highestKey, endInclusive); }
@Override public SearchCondition mergeCondition(KeyNameMapper nameMapper, String sourceField, String mergeField, SearchCondition condition) { if(condition instanceof EqualsCondition) { CompositeKey compositeKey; if(key instanceof CompositeKey) { compositeKey = (CompositeKey) key; } else { compositeKey = new CompositeKey(); compositeKey.addKey(nameMapper, sourceField, key); } return new EqualsCondition(compositeKey.addKey(nameMapper, mergeField, ((EqualsCondition) condition).getKey())); } else if(condition instanceof RangeCondition) { RangeCondition rangeCondition = (RangeCondition) condition; Key startKey = null, endKey = null; if(rangeCondition.getStart() != null) { startKey = new CompositeKey() .addKey(nameMapper, sourceField, key) .addKey(nameMapper, mergeField, rangeCondition.getStart()); } if(rangeCondition.getEnd() != null) { endKey = new CompositeKey() .addKey(nameMapper, sourceField, key) .addKey(nameMapper, mergeField, rangeCondition.getEnd()); } return new RangeCondition(startKey, rangeCondition.isStartIncluded(), endKey, rangeCondition.isEndIncluded()); } return null; }