Search in sources :

Example 6 with Order

use of org.apache.tinkerpop.gremlin.process.traversal.Order in project sqlg by pietermartin.

the class TestOptionalWithOrder method testOptionalWithOrder.

@Test
public void testOptionalWithOrder() {
    Vertex a1 = this.sqlgGraph.addVertex(T.label, "A", "name", "a");
    Vertex a2 = this.sqlgGraph.addVertex(T.label, "A", "name", "aa");
    Vertex a3 = this.sqlgGraph.addVertex(T.label, "A", "name", "aaa");
    Vertex b1 = this.sqlgGraph.addVertex(T.label, "B", "name", "d");
    Vertex b2 = this.sqlgGraph.addVertex(T.label, "B", "name", "c");
    Vertex b3 = this.sqlgGraph.addVertex(T.label, "B", "name", "b");
    Vertex bb1 = this.sqlgGraph.addVertex(T.label, "BB", "name", "g");
    Vertex bb2 = this.sqlgGraph.addVertex(T.label, "BB", "name", "f");
    Vertex bb3 = this.sqlgGraph.addVertex(T.label, "BB", "name", "e");
    Vertex c1 = this.sqlgGraph.addVertex(T.label, "C", "name", "h");
    Vertex c2 = this.sqlgGraph.addVertex(T.label, "C", "name", "i");
    Vertex c3 = this.sqlgGraph.addVertex(T.label, "C", "name", "j");
    Vertex cc1 = this.sqlgGraph.addVertex(T.label, "CC", "name", "k");
    Vertex cc2 = this.sqlgGraph.addVertex(T.label, "CC", "name", "l");
    Vertex cc3 = this.sqlgGraph.addVertex(T.label, "CC", "name", "m");
    a1.addEdge("ab", b1);
    a1.addEdge("ab", b2);
    a1.addEdge("ab", b3);
    a1.addEdge("abb", bb1);
    a1.addEdge("abb", bb2);
    a1.addEdge("abb", bb3);
    b1.addEdge("bc", c1);
    b1.addEdge("bc", c2);
    b1.addEdge("bc", c3);
    b2.addEdge("bcc", cc1);
    b2.addEdge("bcc", cc2);
    b2.addEdge("bcc", cc3);
    this.sqlgGraph.tx().commit();
    DefaultGraphTraversal<Vertex, Path> traversal = (DefaultGraphTraversal<Vertex, Path>) this.sqlgGraph.traversal().V().hasLabel("A").optional(__.out().order().by("name").optional(__.out().order().by("name", Order.decr))).path();
    Assert.assertEquals(4, traversal.getSteps().size());
    List<Path> paths = traversal.toList();
    Assert.assertEquals(2, traversal.getSteps().size());
    assertStep(traversal.getSteps().get(0), true, true, true, true);
    Assert.assertEquals(12, paths.size());
    // assert the order
    // all the paths of length 2 and 3 must be sorted
    List<Path> pathsOfLength3 = paths.stream().filter(p -> p.size() == 3).collect(Collectors.toList());
    Vertex v = (Vertex) pathsOfLength3.get(5).objects().get(2);
    Assert.assertEquals("h", v.value("name"));
    v = (Vertex) pathsOfLength3.get(4).objects().get(2);
    Assert.assertEquals("i", v.value("name"));
    v = (Vertex) pathsOfLength3.get(3).objects().get(2);
    Assert.assertEquals("j", v.value("name"));
    v = (Vertex) pathsOfLength3.get(2).objects().get(2);
    Assert.assertEquals("k", v.value("name"));
    v = (Vertex) pathsOfLength3.get(1).objects().get(2);
    Assert.assertEquals("l", v.value("name"));
    v = (Vertex) pathsOfLength3.get(0).objects().get(2);
    Assert.assertEquals("m", v.value("name"));
    List<Path> pathsOfLength2 = paths.stream().filter(p -> p.size() == 2).collect(Collectors.toList());
    v = (Vertex) pathsOfLength2.get(0).objects().get(1);
    Assert.assertEquals("b", v.value("name"));
    v = (Vertex) pathsOfLength2.get(1).objects().get(1);
    Assert.assertEquals("e", v.value("name"));
    v = (Vertex) pathsOfLength2.get(2).objects().get(1);
    Assert.assertEquals("f", v.value("name"));
    v = (Vertex) pathsOfLength2.get(3).objects().get(1);
    Assert.assertEquals("g", v.value("name"));
    Assert.assertTrue(paths.stream().anyMatch(p -> p.size() == 3 && p.get(0).equals(a1) && p.get(1).equals(b1) && p.get(2).equals(c1)));
    paths.remove(paths.stream().filter(p -> p.size() == 3 && p.get(0).equals(a1) && p.get(1).equals(b1) && p.get(2).equals(c1)).findAny().get());
    Assert.assertTrue(paths.stream().anyMatch(p -> p.size() == 3 && p.get(0).equals(a1) && p.get(1).equals(b1) && p.get(2).equals(c2)));
    paths.remove(paths.stream().filter(p -> p.size() == 3 && p.get(0).equals(a1) && p.get(1).equals(b1) && p.get(2).equals(c2)).findAny().get());
    Assert.assertTrue(paths.stream().anyMatch(p -> p.size() == 3 && p.get(0).equals(a1) && p.get(1).equals(b1) && p.get(2).equals(c3)));
    paths.remove(paths.stream().filter(p -> p.size() == 3 && p.get(0).equals(a1) && p.get(1).equals(b1) && p.get(2).equals(c3)).findAny().get());
    Assert.assertTrue(paths.stream().anyMatch(p -> p.size() == 3 && p.get(0).equals(a1) && p.get(1).equals(b2) && p.get(2).equals(cc1)));
    paths.remove(paths.stream().filter(p -> p.size() == 3 && p.get(0).equals(a1) && p.get(1).equals(b2) && p.get(2).equals(cc1)).findAny().get());
    Assert.assertTrue(paths.stream().anyMatch(p -> p.size() == 3 && p.get(0).equals(a1) && p.get(1).equals(b2) && p.get(2).equals(cc2)));
    paths.remove(paths.stream().filter(p -> p.size() == 3 && p.get(0).equals(a1) && p.get(1).equals(b2) && p.get(2).equals(cc2)).findAny().get());
    Assert.assertTrue(paths.stream().anyMatch(p -> p.size() == 3 && p.get(0).equals(a1) && p.get(1).equals(b2) && p.get(2).equals(cc3)));
    paths.remove(paths.stream().filter(p -> p.size() == 3 && p.get(0).equals(a1) && p.get(1).equals(b2) && p.get(2).equals(cc3)).findAny().get());
    Assert.assertTrue(paths.stream().anyMatch(p -> p.size() == 2 && p.get(0).equals(a1) && p.get(1).equals(bb1)));
    paths.remove(paths.stream().filter(p -> p.size() == 2 && p.get(0).equals(a1) && p.get(1).equals(bb1)).findAny().get());
    Assert.assertTrue(paths.stream().anyMatch(p -> p.size() == 2 && p.get(0).equals(a1) && p.get(1).equals(bb2)));
    paths.remove(paths.stream().filter(p -> p.size() == 2 && p.get(0).equals(a1) && p.get(1).equals(bb2)).findAny().get());
    Assert.assertTrue(paths.stream().anyMatch(p -> p.size() == 2 && p.get(0).equals(a1) && p.get(1).equals(bb3)));
    paths.remove(paths.stream().filter(p -> p.size() == 2 && p.get(0).equals(a1) && p.get(1).equals(bb3)).findAny().get());
    Assert.assertTrue(paths.stream().anyMatch(p -> p.size() == 2 && p.get(0).equals(a1) && p.get(1).equals(b3)));
    paths.remove(paths.stream().filter(p -> p.size() == 2 && p.get(0).equals(a1) && p.get(1).equals(b3)).findAny().get());
    Assert.assertTrue(paths.stream().anyMatch(p -> p.size() == 1 && p.get(0).equals(a2)));
    paths.remove(paths.stream().filter(p -> p.size() == 1 && p.get(0).equals(a2)).findAny().get());
    Assert.assertTrue(paths.stream().anyMatch(p -> p.size() == 1 && p.get(0).equals(a3)));
    paths.remove(paths.stream().filter(p -> p.size() == 1 && p.get(0).equals(a3)).findAny().get());
    Assert.assertTrue(paths.isEmpty());
}
Also used : Path(org.apache.tinkerpop.gremlin.process.traversal.Path) BaseTest(org.umlg.sqlg.test.BaseTest) SqlgOptionalStepBarrier(org.umlg.sqlg.step.barrier.SqlgOptionalStepBarrier) org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__(org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__) Test(org.junit.Test) Vertex(org.apache.tinkerpop.gremlin.structure.Vertex) T(org.apache.tinkerpop.gremlin.structure.T) Collectors(java.util.stream.Collectors) SqlgVertexStep(org.umlg.sqlg.step.SqlgVertexStep) Step(org.apache.tinkerpop.gremlin.process.traversal.Step) OrderGlobalStep(org.apache.tinkerpop.gremlin.process.traversal.step.map.OrderGlobalStep) IdentityStep(org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.IdentityStep) List(java.util.List) Order(org.apache.tinkerpop.gremlin.process.traversal.Order) Traversal(org.apache.tinkerpop.gremlin.process.traversal.Traversal) Assert(org.junit.Assert) Path(org.apache.tinkerpop.gremlin.process.traversal.Path) DefaultGraphTraversal(org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal) Edge(org.apache.tinkerpop.gremlin.structure.Edge) Vertex(org.apache.tinkerpop.gremlin.structure.Vertex) DefaultGraphTraversal(org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal) BaseTest(org.umlg.sqlg.test.BaseTest) Test(org.junit.Test)

Example 7 with Order

use of org.apache.tinkerpop.gremlin.process.traversal.Order in project janusgraph by JanusGraph.

the class IndexSerializer method getOrders.

private ImmutableList<IndexQuery.OrderEntry> getOrders(IndexQueryBuilder query, final ElementCategory resultType, final StandardJanusGraphTx transaction, MixedIndexType index) {
    if (query.getOrders() == null) {
        return ImmutableList.of();
    }
    Preconditions.checkArgument(index.getElement() == resultType, "Index is not configured for the desired result type: %s", resultType);
    List<IndexQuery.OrderEntry> orderReplacement = new ArrayList<>();
    for (Parameter<Order> order : query.getOrders()) {
        if (transaction.containsRelationType(order.key())) {
            final PropertyKey key = transaction.getPropertyKey(order.key());
            Preconditions.checkNotNull(key);
            Preconditions.checkArgument(index.indexesKey(key), "The used key [%s] is not indexed in the targeted index [%s]", key.name(), query.getIndex());
            orderReplacement.add(new IndexQuery.OrderEntry(key2Field(index, key), org.janusgraph.graphdb.internal.Order.convert(order.value()), key.dataType()));
        } else {
            Preconditions.checkArgument(query.getUnknownKeyName() != null, "Found reference to nonexistent property key in query orders %s", order.key());
        }
    }
    return ImmutableList.copyOf(orderReplacement);
}
Also used : Order(org.apache.tinkerpop.gremlin.process.traversal.Order) IndexQuery(org.janusgraph.diskstorage.indexing.IndexQuery) JointIndexQuery(org.janusgraph.graphdb.query.graph.JointIndexQuery) ArrayList(java.util.ArrayList) PropertyKey(org.janusgraph.core.PropertyKey)

Example 8 with Order

use of org.apache.tinkerpop.gremlin.process.traversal.Order in project titan by thinkaurelius.

the class HasStepFolder method validTitanOrder.

public static boolean validTitanOrder(OrderGlobalStep ostep, Traversal rootTraversal, boolean isVertexOrder) {
    for (Comparator comp : (List<Comparator>) ostep.getComparators()) {
        if (!(comp instanceof ElementValueComparator))
            return false;
        ElementValueComparator evc = (ElementValueComparator) comp;
        if (!(evc.getValueComparator() instanceof Order))
            return false;
        TitanTransaction tx = TitanTraversalUtil.getTx(rootTraversal.asAdmin());
        String key = evc.getPropertyKey();
        PropertyKey pkey = tx.getPropertyKey(key);
        if (pkey == null || !(Comparable.class.isAssignableFrom(pkey.dataType())))
            return false;
        if (isVertexOrder && pkey.cardinality() != Cardinality.SINGLE)
            return false;
    }
    return true;
}
Also used : Order(org.apache.tinkerpop.gremlin.process.traversal.Order) ArrayList(java.util.ArrayList) List(java.util.List) ElementValueComparator(org.apache.tinkerpop.gremlin.process.traversal.step.util.ElementValueComparator) TitanTransaction(com.thinkaurelius.titan.core.TitanTransaction) PropertyKey(com.thinkaurelius.titan.core.PropertyKey) ElementValueComparator(org.apache.tinkerpop.gremlin.process.traversal.step.util.ElementValueComparator) Comparator(java.util.Comparator)

Example 9 with Order

use of org.apache.tinkerpop.gremlin.process.traversal.Order in project unipop by unipop-graph.

the class UniGraphOrderStrategy method apply.

@Override
public void apply(Traversal.Admin<?, ?> traversal) {
    TraversalHelper.getStepsOfAssignableClass(OrderGlobalStep.class, traversal).forEach(orderGlobalStep -> {
        List<Pair<Traversal.Admin, Comparator>> comparators = orderGlobalStep.getComparators();
        List<Pair<String, Order>> collect = comparators.stream().filter(pair -> pair.getValue0() instanceof ElementValueTraversal).filter(pair -> pair.getValue1() instanceof Order).map(pair -> Pair.with(((ElementValueTraversal) pair.getValue0()).getPropertyKey(), ((Order) pair.getValue1()))).collect(Collectors.toList());
        Collection<Orderable> orderableStepOf = getOrderableStepOf(orderGlobalStep, traversal);
        if (orderableStepOf != null && orderableStepOf.size() == 1) {
            Orderable step = orderableStepOf.iterator().next();
            step.setOrders(collect);
            Step nextStep = orderGlobalStep.getNextStep();
            if (nextStep instanceof RangeGlobalStep) {
                if (step instanceof ReceivesPredicatesHolder) {
                    RangeGlobalStep rangeGlobalStep = (RangeGlobalStep) nextStep;
                    int limit = rangeGlobalStep.getHighRange() > Integer.MAX_VALUE ? -1 : (int) rangeGlobalStep.getHighRange();
                    ((ReceivesPredicatesHolder) step).setLimit(limit);
                }
            }
        }
    });
}
Also used : EmptyStep(org.apache.tinkerpop.gremlin.process.traversal.step.util.EmptyStep) WhereTraversalStep(org.apache.tinkerpop.gremlin.process.traversal.step.filter.WhereTraversalStep) TraversalHelper(org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper) java.util(java.util) EdgeStepsStrategy(org.unipop.process.edge.EdgeStepsStrategy) UniGraphVertexStepStrategy(org.unipop.process.vertex.UniGraphVertexStepStrategy) UniGraphStepStrategy(org.unipop.process.graph.UniGraphStepStrategy) TraversalStrategy(org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy) DedupGlobalStep(org.apache.tinkerpop.gremlin.process.traversal.step.filter.DedupGlobalStep) UniGraphRepeatStepStrategy(org.unipop.process.repeat.UniGraphRepeatStepStrategy) Collectors(java.util.stream.Collectors) Sets(com.google.common.collect.Sets) Pair(org.javatuples.Pair) ReceivesPredicatesHolder(org.unipop.process.predicate.ReceivesPredicatesHolder) Step(org.apache.tinkerpop.gremlin.process.traversal.Step) OrderGlobalStep(org.apache.tinkerpop.gremlin.process.traversal.step.map.OrderGlobalStep) Stream(java.util.stream.Stream) AbstractTraversalStrategy(org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy) Order(org.apache.tinkerpop.gremlin.process.traversal.Order) Traversal(org.apache.tinkerpop.gremlin.process.traversal.Traversal) ElementValueTraversal(org.apache.tinkerpop.gremlin.process.traversal.lambda.ElementValueTraversal) TraversalParent(org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent) RangeGlobalStep(org.apache.tinkerpop.gremlin.process.traversal.step.filter.RangeGlobalStep) Order(org.apache.tinkerpop.gremlin.process.traversal.Order) Traversal(org.apache.tinkerpop.gremlin.process.traversal.Traversal) ElementValueTraversal(org.apache.tinkerpop.gremlin.process.traversal.lambda.ElementValueTraversal) OrderGlobalStep(org.apache.tinkerpop.gremlin.process.traversal.step.map.OrderGlobalStep) EmptyStep(org.apache.tinkerpop.gremlin.process.traversal.step.util.EmptyStep) WhereTraversalStep(org.apache.tinkerpop.gremlin.process.traversal.step.filter.WhereTraversalStep) DedupGlobalStep(org.apache.tinkerpop.gremlin.process.traversal.step.filter.DedupGlobalStep) Step(org.apache.tinkerpop.gremlin.process.traversal.Step) OrderGlobalStep(org.apache.tinkerpop.gremlin.process.traversal.step.map.OrderGlobalStep) RangeGlobalStep(org.apache.tinkerpop.gremlin.process.traversal.step.filter.RangeGlobalStep) ElementValueTraversal(org.apache.tinkerpop.gremlin.process.traversal.lambda.ElementValueTraversal) ReceivesPredicatesHolder(org.unipop.process.predicate.ReceivesPredicatesHolder) RangeGlobalStep(org.apache.tinkerpop.gremlin.process.traversal.step.filter.RangeGlobalStep) Pair(org.javatuples.Pair)

Example 10 with Order

use of org.apache.tinkerpop.gremlin.process.traversal.Order in project unipop by unipop-graph.

the class DocumentController method createSearchBuilder.

private <E extends Element, S extends DocumentSchema<E>> Pair<S, SearchSourceBuilder> createSearchBuilder(Map.Entry<S, QueryBuilder> kv, SearchQuery<E> query) {
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder().query(kv.getValue()).size(query.getLimit() == -1 ? 10000 : query.getLimit());
    if (query.getPropertyKeys() == null)
        searchSourceBuilder.fetchSource(true);
    else {
        Set<String> fields = kv.getKey().toFields(query.getPropertyKeys());
        if (fields.size() == 0)
            searchSourceBuilder.fetchSource(false);
        else
            searchSourceBuilder.fetchSource(fields.toArray(new String[fields.size()]), null);
    }
    List<Pair<String, Order>> orders = query.getOrders();
    if (orders != null) {
        orders.forEach(order -> {
            Order orderValue = order.getValue1();
            switch(orderValue) {
                case decr:
                    searchSourceBuilder.sort(kv.getKey().getFieldByPropertyKey(order.getValue0()), SortOrder.DESC);
                    break;
                case incr:
                    searchSourceBuilder.sort(kv.getKey().getFieldByPropertyKey(order.getValue0()), SortOrder.ASC);
                    break;
                case shuffle:
                    break;
            }
        });
    }
    return Pair.with(kv.getKey(), searchSourceBuilder);
}
Also used : Order(org.apache.tinkerpop.gremlin.process.traversal.Order) SortOrder(org.elasticsearch.search.sort.SortOrder) SearchSourceBuilder(org.elasticsearch.search.builder.SearchSourceBuilder) Pair(org.javatuples.Pair)

Aggregations

Order (org.apache.tinkerpop.gremlin.process.traversal.Order)18 Traversal (org.apache.tinkerpop.gremlin.process.traversal.Traversal)12 List (java.util.List)11 Collectors (java.util.stream.Collectors)11 OrderGlobalStep (org.apache.tinkerpop.gremlin.process.traversal.step.map.OrderGlobalStep)10 Path (org.apache.tinkerpop.gremlin.process.traversal.Path)9 DefaultGraphTraversal (org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal)9 org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__ (org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__)9 IdentityStep (org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.IdentityStep)9 T (org.apache.tinkerpop.gremlin.structure.T)9 Vertex (org.apache.tinkerpop.gremlin.structure.Vertex)9 Assert (org.junit.Assert)9 Test (org.junit.Test)9 BaseTest (org.umlg.sqlg.test.BaseTest)9 Edge (org.apache.tinkerpop.gremlin.structure.Edge)8 SqlgVertexStep (org.umlg.sqlg.step.SqlgVertexStep)8 SqlgOptionalStepBarrier (org.umlg.sqlg.step.barrier.SqlgOptionalStepBarrier)8 Pair (org.javatuples.Pair)6 Step (org.apache.tinkerpop.gremlin.process.traversal.Step)5 TraversalHelper (org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper)5