private OIndexSearchResult analyzeOperator(OClass iSchemaClass, OSQLFilterCondition condition, List<OIndexSearchResult> iIndexSearchResults, OCommandContext iContext) { return condition.getOperator().getOIndexSearchResult(iSchemaClass, condition, iIndexSearchResults, iContext); }
public static OIndexSearchResult createIndexedProperty(final OSQLFilterCondition iCondition, final Object iItem) { if (iItem == null || !(iItem instanceof OSQLFilterItemField)) return null; if (iCondition.getLeft() instanceof OSQLFilterItemField && iCondition.getRight() instanceof OSQLFilterItemField) return null; final OSQLFilterItemField item = (OSQLFilterItemField) iItem; if (item.hasChainOperators() && !item.isFieldChain()) return null; final Object origValue = iCondition.getLeft() == iItem ? iCondition.getRight() : iCondition.getLeft(); if (iCondition.getOperator() instanceof OQueryOperatorBetween || iCondition.getOperator() instanceof OQueryOperatorIn) { return new OIndexSearchResult(iCondition.getOperator(), item.getFieldChain(), origValue); } final Object value = OSQLHelper.getValue(origValue); if (value == null) return null; return new OIndexSearchResult(iCondition.getOperator(), item.getFieldChain(), value); }
public static OIndexSearchResult createIndexedProperty(final OSQLFilterCondition iCondition, final Object iItem) { if (iItem == null || !(iItem instanceof OSQLFilterItemField)) return null; if (iCondition.getLeft() instanceof OSQLFilterItemField && iCondition.getRight() instanceof OSQLFilterItemField) return null; final OSQLFilterItemField item = (OSQLFilterItemField) iItem; if (item.hasChainOperators() && !item.isFieldChain()) return null; final Object origValue = iCondition.getLeft() == iItem ? iCondition.getRight() : iCondition.getLeft(); if (iCondition.getOperator() instanceof OQueryOperatorBetween || iCondition.getOperator() instanceof OQueryOperatorIn) { return new OIndexSearchResult(iCondition.getOperator(), item.getFieldChain(), origValue); } final Object value = OSQLHelper.getValue(origValue); if (value == null) return null; return new OIndexSearchResult(iCondition.getOperator(), item.getFieldChain(), value); }
private List<List<OIndexSearchResult>> analyzeOrFilterBranch(final OClass iSchemaClass, OSQLFilterCondition condition, OCommandContext iContext) { if (condition == null) { return null; } OQueryOperator operator = condition.getOperator(); while (operator == null) { if (condition.getRight() == null && condition.getLeft() instanceof OSQLFilterCondition) { condition = (OSQLFilterCondition) condition.getLeft(); operator = condition.getOperator(); } else { return null; } } final OIndexReuseType indexReuseType = operator.getIndexReuseType(condition.getLeft(), condition.getRight()); if (OIndexReuseType.INDEX_UNION.equals(indexReuseType)) { return analyzeUnion(iSchemaClass, condition, iContext); } List<List<OIndexSearchResult>> result = new ArrayList<List<OIndexSearchResult>>(); List<OIndexSearchResult> sub = analyzeCondition(condition, iSchemaClass, iContext); // analyzeFilterBranch(iSchemaClass, condition, sub, iContext); result.add(sub); return result; }
private OIndexSearchResult analyzeFilterBranch(final OClass iSchemaClass, OSQLFilterCondition condition, final List<OIndexSearchResult> iIndexSearchResults, OCommandContext iContext) { if (condition == null) { return null; } OQueryOperator operator = condition.getOperator(); while (operator == null) { if (condition.getRight() == null && condition.getLeft() instanceof OSQLFilterCondition) { condition = (OSQLFilterCondition) condition.getLeft(); operator = condition.getOperator(); } else { return null; } } final OIndexReuseType indexReuseType = operator.getIndexReuseType(condition.getLeft(), condition.getRight()); switch (indexReuseType) { case INDEX_INTERSECTION: return analyzeIntersection(iSchemaClass, condition, iIndexSearchResults, iContext); case INDEX_METHOD: return analyzeIndexMethod(iSchemaClass, condition, iIndexSearchResults, iContext); case INDEX_OPERATOR: return analyzeOperator(iSchemaClass, condition, iIndexSearchResults, iContext); default: return null; } }
return currentCondition; if (nextOperator.precedence > currentCondition.getOperator().precedence) {
lastResult = new OIndexSearchResult(iCondition.getOperator(), item.getFieldChain(), value); } else { lastResult = lastResult.merge(new OIndexSearchResult(iCondition.getOperator(), item.getFieldChain(), value));
lastResult = new OIndexSearchResult(iCondition.getOperator(), item.getFieldChain(), value); } else { lastResult = lastResult.merge(new OIndexSearchResult(iCondition.getOperator(), item.getFieldChain(), value));
final Object origValue = inverted ? iCondition.getLeft() : iCondition.getRight(); OQueryOperator operator = iCondition.getOperator(); if (iCondition.getOperator() instanceof OQueryOperatorBetween || operator instanceof OQueryOperatorIn) {
final Object left = condition.getLeft(); final OQueryOperator operator = condition.getOperator(); if (!(operator instanceof OQueryOperatorAnd)) { return null; final OQueryOperator rightOperator = ((OSQLFilterCondition) right).getOperator(); final OQueryOperator leftOperator = ((OSQLFilterCondition) left).getOperator();
final OQueryOperator oper = iCondition.getOperator();
final OQueryOperator indexOperator = compiledFilter.getRootCondition().getOperator();
return null; OQueryOperator operator = condition.getOperator(); while (operator == null) { if (condition.getRight() == null && condition.getLeft() instanceof OSQLFilterCondition) { condition = (OSQLFilterCondition) condition.getLeft(); operator = condition.getOperator(); } else { return condition;