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); }
private RangeCondition validateRangeCondition(SearchCondition condition) throws JasDBStorageException { if(condition instanceof RangeCondition) { KeyFactory factory = keyInfo.getKeyFactory(); RangeCondition rangeCondition = (RangeCondition) condition; rangeCondition.setStart(validateKey(factory, rangeCondition.getStart())); rangeCondition.setEnd(validateKey(factory, rangeCondition.getEnd())); return rangeCondition; } else { throw new JasDBStorageException("Invalid Range condition input: " + condition); } }
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 void generateRangeCondition(StringBuilder builder, String field, RangeCondition rangeCondition) { Key startKey = rangeCondition.getStart(); Key endKey = rangeCondition.getEnd(); if(startKey != null) { builder.append(field).append(rangeCondition.isStartIncluded() ? ">=" : ">"); handleValueAppend(builder, startKey); } if(startKey != null && endKey != null) { builder.append(","); } if(endKey != null) { builder.append(field).append(rangeCondition.isEndIncluded() ? "<=" : "<"); handleValueAppend(builder, endKey); } }
@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; }
if(rangeCondition.getStart() != null) { currentLeave = rootBlock.findLeaveBlock(LockIntentType.READ, rangeCondition.getStart()); } else { currentLeave = rootBlock.findFirstLeaveBlock(LockIntentType.READ); boolean keepEvaluating = currentLeave.size() > 0; while(keepEvaluating && currentLeave != null) { addFoundKeys(results, currentLeave.getKeyRange(rangeCondition.getStart(), rangeCondition.isStartIncluded(), rangeCondition.getEnd(), rangeCondition.isEndIncluded()), limit); } else if(rangeCondition.getEnd() != null) { Key lastKey = currentLeave.getLast(); int lastKeyCompare = lastKey.compareTo(rangeCondition.getEnd()); if(lastKeyCompare > 0) {