@Nullable @Override public Condition<E> apply(@Nullable Condition<E> cond) { if (cond.getType()== Condition.Type.LITERAL) return transformation.apply(cond); else return null; } });
public static boolean isEmpty(Condition<?> condition) { return condition.getType() != Condition.Type.LITERAL && condition.numChildren() == 0; }
private static final boolean isQNFLiteral(Condition<?> condition) { if (condition.getType() != Condition.Type.LITERAL) return false; if (condition instanceof PredicateCondition) { return ((PredicateCondition) condition).getPredicate().isQNF(); } else return true; }
public static final <E extends TitanElement> Condition<E> simplifyQNF(Condition<E> condition) { Preconditions.checkArgument(isQueryNormalForm(condition)); if (condition.numChildren() == 1) { Condition<E> child = ((And) condition).get(0); if (child.getType() == Condition.Type.LITERAL) return child; } return condition; }
public static final<E extends TitanElement> void traversal(Condition<E> condition, Predicate<Condition<E>> evaluator) { if (!evaluator.apply(condition)) return; //Abort if the evaluator returns false if (condition.getType()== Condition.Type.LITERAL) { return; } else if (condition instanceof Not) { traversal(((Not) condition).getChild(), evaluator); } else if (condition instanceof MultiCondition) { for (Condition<E> child : condition.getChildren()) traversal(child, evaluator); } else throw new IllegalArgumentException("Unexpected condition type: " + condition); }
public static final boolean containsType(Condition<?> condition, Condition.Type type) { if (condition.getType()==type) return true; else if (condition.numChildren()>0) { for (Condition child : condition.getChildren()) { if (containsType(child,type)) return true; } } return false; }
@Nullable @Override public Condition<E> apply(@Nullable Condition<E> cond) { if (cond instanceof Not) { Condition<E> child = ((Not) cond).getChild(); Preconditions.checkArgument(child.getType() == Condition.Type.LITERAL); //verify QNF if (child instanceof PredicateCondition) { PredicateCondition<?, E> pc = (PredicateCondition) child; if (pc.getPredicate().hasNegation()) { return new PredicateCondition(pc.getKey(), pc.getPredicate().negate(), pc.getValue()); } } } return null; } });
public static final<E extends TitanElement> Condition<E> transformation(Condition<E> condition, Function<Condition<E>,Condition<E>> transformation) { Condition<E> transformed = transformation.apply(condition); if (transformed!=null) return transformed; //if transformed==null we go a level deeper if (condition.getType()== Condition.Type.LITERAL) { return condition; } else if (condition instanceof Not) { return Not.of(transformation(((Not) condition).getChild(), transformation)); } else if (condition instanceof And) { And<E> newand = new And<E>(condition.numChildren()); for (Condition<E> child : condition.getChildren()) newand.add(transformation(child, transformation)); return newand; } else if (condition instanceof Or) { Or<E> newor = new Or<E>(condition.numChildren()); for (Condition<E> child : condition.getChildren()) newor.add(transformation(child, transformation)); return newor; } else throw new IllegalArgumentException("Unexpected condition type: " + condition); }
private static final boolean coversAll(final MixedIndexType index, Condition<TitanElement> condition, IndexSerializer indexInfo) { if (condition.getType()==Condition.Type.LITERAL) { if (!(condition instanceof PredicateCondition)) return false; PredicateCondition<RelationType, TitanElement> atom = (PredicateCondition) condition; if (atom.getValue()==null) return false; Preconditions.checkArgument(atom.getKey().isPropertyKey()); PropertyKey key = (PropertyKey) atom.getKey(); ParameterIndexField[] fields = index.getFieldKeys(); ParameterIndexField match = null; for (int i = 0; i < fields.length; i++) { if (fields[i].getStatus()!= SchemaStatus.ENABLED) continue; if (fields[i].getFieldKey().equals(key)) match = fields[i]; } if (match==null) return false; return indexInfo.supports(index,match,atom.getPredicate()); } else { for (Condition<TitanElement> child : condition.getChildren()) { if (!coversAll(index,child,indexInfo)) return false; } return true; } }
@Nullable @Override public Condition<E> apply(@Nullable Condition<E> cond) { if (cond.getType()== Condition.Type.LITERAL) return transformation.apply(cond); else return null; } });
@Nullable @Override public Condition<E> apply(@Nullable Condition<E> cond) { if (cond.getType()== Condition.Type.LITERAL) return transformation.apply(cond); else return null; } });
public static boolean isEmpty(Condition<?> condition) { return condition.getType() != Condition.Type.LITERAL && condition.numChildren() == 0; }
private static final boolean isQNFLiteral(Condition<?> condition) { if (condition.getType() != Condition.Type.LITERAL) return false; if (condition instanceof PredicateCondition) { return ((PredicateCondition) condition).getPredicate().isQNF(); } else return true; }
private static final boolean isQNFLiteral(Condition<?> condition) { if (condition.getType() != Condition.Type.LITERAL) return false; if (condition instanceof PredicateCondition) { return ((PredicateCondition) condition).getPredicate().isQNF(); } else return true; }
public static final<E extends TitanElement> void traversal(Condition<E> condition, Predicate<Condition<E>> evaluator) { if (!evaluator.apply(condition)) return; //Abort if the evaluator returns false if (condition.getType()== Condition.Type.LITERAL) { return; } else if (condition instanceof Not) { traversal(((Not) condition).getChild(), evaluator); } else if (condition instanceof MultiCondition) { for (Condition<E> child : condition.getChildren()) traversal(child, evaluator); } else throw new IllegalArgumentException("Unexpected condition type: " + condition); }
public static final <E extends TitanElement> Condition<E> simplifyQNF(Condition<E> condition) { Preconditions.checkArgument(isQueryNormalForm(condition)); if (condition.numChildren() == 1) { Condition<E> child = ((And) condition).get(0); if (child.getType() == Condition.Type.LITERAL) return child; } return condition; }
public static final <E extends TitanElement> Condition<E> simplifyQNF(Condition<E> condition) { Preconditions.checkArgument(isQueryNormalForm(condition)); if (condition.numChildren() == 1) { Condition<E> child = ((And) condition).get(0); if (child.getType() == Condition.Type.LITERAL) return child; } return condition; }
public static final<E extends TitanElement> void traversal(Condition<E> condition, Predicate<Condition<E>> evaluator) { if (!evaluator.apply(condition)) return; //Abort if the evaluator returns false if (condition.getType()== Condition.Type.LITERAL) { return; } else if (condition instanceof Not) { traversal(((Not) condition).getChild(), evaluator); } else if (condition instanceof MultiCondition) { for (Condition<E> child : condition.getChildren()) traversal(child, evaluator); } else throw new IllegalArgumentException("Unexpected condition type: " + condition); }
public static final boolean containsType(Condition<?> condition, Condition.Type type) { if (condition.getType()==type) return true; else if (condition.numChildren()>0) { for (Condition child : condition.getChildren()) { if (containsType(child,type)) return true; } } return false; }
public static final boolean containsType(Condition<?> condition, Condition.Type type) { if (condition.getType()==type) return true; else if (condition.numChildren()>0) { for (Condition child : condition.getChildren()) { if (containsType(child,type)) return true; } } return false; }