protected ORID[] getRange() { final ORID beginRange; final ORID endRange; final OSQLFilterCondition rootCondition = compiledFilter == null ? null : compiledFilter.getRootCondition(); if (compiledFilter == null || rootCondition == null) { if (request instanceof OSQLSynchQuery) beginRange = ((OSQLSynchQuery<ODocument>) request).getNextPageRID(); else beginRange = null; endRange = null; } else { final ORID conditionBeginRange = rootCondition.getBeginRidRange(); final ORID conditionEndRange = rootCondition.getEndRidRange(); final ORID nextPageRid; if (request instanceof OSQLSynchQuery) nextPageRid = ((OSQLSynchQuery<ODocument>) request).getNextPageRID(); else nextPageRid = null; if (conditionBeginRange != null && nextPageRid != null) beginRange = conditionBeginRange.compareTo(nextPageRid) > 0 ? conditionBeginRange : nextPageRid; else if (conditionBeginRange != null) beginRange = conditionBeginRange; else beginRange = nextPageRid; endRange = conditionEndRange; } return new ORID[] {beginRange, endRange}; }
protected void optimizeBranch( final OSQLFilterCondition iParentCondition, OSQLFilterCondition iCondition) { if (iCondition == null) return; Object left = iCondition.getLeft(); if (left instanceof OSQLFilterCondition) { // ANALYSE LEFT RECURSIVELY optimizeBranch(iCondition, (OSQLFilterCondition) left); } else if (left instanceof OSQLFunctionRuntime) { left = optimizeFunction((OSQLFunctionRuntime) left); iCondition.setLeft(left); } Object right = iCondition.getRight(); if (right instanceof OSQLFilterCondition) { // ANALYSE RIGHT RECURSIVELY optimizeBranch(iCondition, (OSQLFilterCondition) right); } else if (right instanceof OSQLFunctionRuntime) { right = optimizeFunction((OSQLFunctionRuntime) right); iCondition.setRight(right); } final OQueryOperator oper = iCondition.getOperator(); Object result = null; if (left instanceof OSQLFilterItemField && right instanceof OSQLFilterItemField) { if (((OSQLFilterItemField) left).getRoot().equals(((OSQLFilterItemField) right).getRoot())) { if (oper instanceof OQueryOperatorEquals) result = Boolean.TRUE; else if (oper instanceof OQueryOperatorNotEquals) result = Boolean.FALSE; } } if (result != null) { if (iParentCondition != null) if (iCondition == iParentCondition.getLeft()) // REPLACE LEFT iCondition.setLeft(result); else // REPLACE RIGHT iCondition.setRight(result); else { // REPLACE ROOT CONDITION if (result instanceof Boolean && ((Boolean) result)) compiledFilter.setRootCondition(null); } } }