@Test public void testFlattenWithOrTree() { Condition c1 = Condition.eq(IdGenerator.of("c1"), "1"); Condition c2 = Condition.eq(IdGenerator.of("c2"), "2"); Condition c3 = Condition.eq(IdGenerator.of("c3"), "3"); Condition c4 = Condition.eq(IdGenerator.of("c4"), "4"); ConditionQuery query = new ConditionQuery(HugeType.VERTEX); query.query(c1.or(c2).or(c3.or(c4))); Assert.assertEquals(1, query.conditions().size()); List<ConditionQuery> queries = ConditionQueryFlatten.flatten(query); Assert.assertEquals(4, queries.size()); Set<Set<Condition>> expect; expect = ImmutableSet.of(ImmutableSet.of(c1), ImmutableSet.of(c2), ImmutableSet.of(c3), ImmutableSet.of(c4)); Set<Set<Condition>> actual = new HashSet<>(); for (ConditionQuery q : queries) { actual.add(q.conditions()); } Assert.assertEquals(expect, actual); }
@Test public void testFlattenWithOr() { Condition c1 = Condition.eq(IdGenerator.of("c1"), "1"); Condition c2 = Condition.eq(IdGenerator.of("c2"), "2"); ConditionQuery query = new ConditionQuery(HugeType.VERTEX); query.query(c1.or(c2)); Assert.assertEquals(1, query.conditions().size()); List<ConditionQuery> queries = ConditionQueryFlatten.flatten(query); Assert.assertEquals(2, queries.size()); Set<Set<Condition>> expect; expect = ImmutableSet.of(ImmutableSet.of(c1), ImmutableSet.of(c2)); Set<Set<Condition>> actual = new HashSet<>(); for (ConditionQuery q : queries) { actual.add(q.conditions()); } Assert.assertEquals(expect, actual); }
@Test public void testFlattenWithAndOrTree() { Condition c1 = Condition.eq(IdGenerator.of("c1"), "1"); Condition c2 = Condition.eq(IdGenerator.of("c2"), "2"); Condition c3 = Condition.eq(IdGenerator.of("c3"), "3"); Condition c4 = Condition.eq(IdGenerator.of("c4"), "4"); ConditionQuery query = new ConditionQuery(HugeType.VERTEX); query.query(c1.or(c2).and(c3.or(c4))); Assert.assertEquals(1, query.conditions().size()); List<ConditionQuery> queries = ConditionQueryFlatten.flatten(query); Assert.assertEquals(4, queries.size()); Set<Set<Condition>> expect; expect = ImmutableSet.of(ImmutableSet.of(c1, c3), ImmutableSet.of(c1, c4), ImmutableSet.of(c2, c3), ImmutableSet.of(c2, c4)); Set<Set<Condition>> actual = new HashSet<>(); for (ConditionQuery q : queries) { actual.add(q.conditions()); } Assert.assertEquals(expect, actual); }
@Test public void testFlattenWithMultiOr() { Condition c1 = Condition.eq(IdGenerator.of("c1"), "1"); Condition c2 = Condition.eq(IdGenerator.of("c2"), "2"); Condition c3 = Condition.eq(IdGenerator.of("c3"), "3"); Condition c4 = Condition.eq(IdGenerator.of("c4"), "4"); ConditionQuery query = new ConditionQuery(HugeType.VERTEX); query.query(c1.or(c2)); query.query(c3.or(c4)); Assert.assertEquals(2, query.conditions().size()); List<ConditionQuery> queries = ConditionQueryFlatten.flatten(query); Assert.assertEquals(4, queries.size()); Set<Set<Condition>> expect; expect = ImmutableSet.of(ImmutableSet.of(c1, c3), ImmutableSet.of(c1, c4), ImmutableSet.of(c2, c3), ImmutableSet.of(c2, c4)); Set<Set<Condition>> actual = new HashSet<>(); for (ConditionQuery q : queries) { actual.add(q.conditions()); } Assert.assertEquals(expect, actual); }
private static Condition convTextContainsAny2Or(Relation relation) { assert relation.relation() == Condition.RelationType.TEXT_CONTAINS_ANY; @SuppressWarnings("unchecked") Collection<String> words = (Collection<String>) relation.value(); Condition cond, conds = null; for (String word : words) { assert relation.key() instanceof Id; cond = Condition.textContains((Id) relation.key(), word); conds = conds == null ? cond : Condition.or(conds, cond); } return conds; }
private static Condition convIn2Or(Relation relation) { assert relation.relation() == Condition.RelationType.IN; Object key = relation.key(); @SuppressWarnings("unchecked") List<Object> values = (List<Object>) relation.value(); Condition cond, conds = null; for (Object value : values) { if (key instanceof HugeKeys) { cond = Condition.eq((HugeKeys) key, value); } else { cond = Condition.eq((Id) key, value); } conds = conds == null ? cond : Condition.or(conds, cond); } return conds; }
public static Condition convOr(HugeGraph graph, HugeType type, HasContainer has) { P<?> p = has.getPredicate(); assert p instanceof OrP; @SuppressWarnings("unchecked") List<P<Object>> predicates = ((OrP<Object>) p).getPredicates(); if (predicates.size() < 2) { throw newUnsupportedPredicate(p); } Condition cond = null; for (P<Object> predicate : predicates) { HasContainer newHas = new HasContainer(has.getKey(), predicate); Condition newCond = convHas2Condition(newHas, type, graph); if (cond == null) { cond = newCond; } else { cond = Condition.or(newCond, cond); } } return cond; }
@Test public void testFlattenWithOrAndTree() { Condition c1 = Condition.eq(IdGenerator.of("c1"), "1"); Condition c2 = Condition.eq(IdGenerator.of("c2"), "2"); Condition c3 = Condition.eq(IdGenerator.of("c3"), "3"); Condition c4 = Condition.eq(IdGenerator.of("c4"), "4"); ConditionQuery query = new ConditionQuery(HugeType.VERTEX); query.query(c1.and(c2).or(c3.and(c4))); Assert.assertEquals(1, query.conditions().size()); List<ConditionQuery> queries = ConditionQueryFlatten.flatten(query); Assert.assertEquals(2, queries.size()); Set<Set<Condition>> expect; expect = ImmutableSet.of(ImmutableSet.of(c1, c2), ImmutableSet.of(c3, c4)); Set<Set<Condition>> actual = new HashSet<>(); for (ConditionQuery q : queries) { actual.add(q.conditions()); } Assert.assertEquals(expect, actual); } }
query.query(Condition.or( Condition.eq(HugeKeys.DIRECTION, Directions.OUT), Condition.eq(HugeKeys.DIRECTION, Directions.IN)));
private static Condition convTextContainsAny2Or(Relation relation) { assert relation.relation() == Condition.RelationType.TEXT_CONTAINS_ANY; @SuppressWarnings("unchecked") Collection<String> words = (Collection<String>) relation.value(); Condition cond, conds = null; for (String word : words) { assert relation.key() instanceof Id; cond = Condition.textContains((Id) relation.key(), word); conds = conds == null ? cond : Condition.or(conds, cond); } return conds; }
private static Condition convIn2Or(Relation relation) { assert relation.relation() == Condition.RelationType.IN; Object key = relation.key(); @SuppressWarnings("unchecked") List<Object> values = (List<Object>) relation.value(); Condition cond, conds = null; for (Object value : values) { if (key instanceof HugeKeys) { cond = Condition.eq((HugeKeys) key, value); } else { cond = Condition.eq((Id) key, value); } conds = conds == null ? cond : Condition.or(conds, cond); } return conds; }
public static Condition convOr(HugeGraph graph, HugeType type, HasContainer has) { P<?> p = has.getPredicate(); assert p instanceof OrP; @SuppressWarnings("unchecked") List<P<Object>> predicates = ((OrP<Object>) p).getPredicates(); if (predicates.size() < 2) { throw newUnsupportedPredicate(p); } Condition cond = null; for (P<Object> predicate : predicates) { HasContainer newHas = new HasContainer(has.getKey(), predicate); Condition newCond = convHas2Condition(newHas, type, graph); if (cond == null) { cond = newCond; } else { cond = Condition.or(newCond, cond); } } return cond; }
query.query(Condition.or( Condition.eq(HugeKeys.DIRECTION, Directions.OUT), Condition.eq(HugeKeys.DIRECTION, Directions.IN)));