use of com.baidu.hugegraph.backend.query.Query in project incubator-hugegraph by apache.
the class HugeVertex method edges.
@Watched(prefix = "vertex")
@Override
public Iterator<Edge> edges(Direction tinkerpopDir, String... edgeLabels) {
Directions direction = Directions.convert(tinkerpopDir);
// NOTE: get edges from memory if load all edges when loading vertex.
if (this.existsEdges()) {
return this.getEdges(direction, edgeLabels);
}
Id[] edgeLabelIds = this.graph().mapElName2Id(edgeLabels);
Query query = GraphTransaction.constructEdgesQuery(this.id(), direction, edgeLabelIds);
return this.graph().edges(query);
}
use of com.baidu.hugegraph.backend.query.Query in project incubator-hugegraph by apache.
the class QueryTest method testOrderBy.
@Test
public void testOrderBy() {
Query query = new Query(HugeType.VERTEX);
Assert.assertTrue(query.orders().isEmpty());
query.order(HugeKeys.NAME, Order.ASC);
Assert.assertEquals(ImmutableMap.of(HugeKeys.NAME, Order.ASC), query.orders());
}
use of com.baidu.hugegraph.backend.query.Query in project incubator-hugegraph by apache.
the class QueryTest method testToString.
@Test
public void testToString() {
Query query = new Query(HugeType.VERTEX);
Assert.assertEquals("`Query * from VERTEX`", query.toString());
query.page("p1");
Assert.assertEquals("`Query * from VERTEX page 'p1'`", query.toString());
query = new Query(HugeType.VERTEX);
query.limit(10L);
Assert.assertEquals("`Query * from VERTEX limit 10`", query.toString());
query = new Query(HugeType.VERTEX);
query.aggregate(AggregateFunc.COUNT, null);
query.limit(10L);
Assert.assertEquals("`Query count(*) from VERTEX limit 10`", query.toString());
query = new Query(HugeType.VERTEX);
query.aggregate(AggregateFunc.MAX, "age");
query.limit(10L);
Assert.assertEquals("`Query max(age) from VERTEX limit 10`", query.toString());
query = new Query(HugeType.VERTEX);
query.page("p2");
query.limit(10L);
Assert.assertEquals("`Query * from VERTEX page 'p2', limit 10`", query.toString());
query = new Query(HugeType.VERTEX);
query.page("p3");
query.offset(100L);
query.limit(10L);
Assert.assertEquals("`Query * from VERTEX page 'p3', offset 100, " + "limit 10`", query.toString());
query = new Query(HugeType.VERTEX);
query.page("");
query.offset(100L);
query.limit(10L);
query.order(HugeKeys.NAME, Order.ASC);
query.order(HugeKeys.FIELDS, Order.DESC);
Assert.assertEquals("`Query * from VERTEX page '', offset 100, " + "limit 10, order by {NAME=ASC, FIELDS=DESC}`", query.toString());
IdQuery query2 = new IdQuery(HugeType.VERTEX, IdGenerator.of(1));
query2.query(IdGenerator.of(3));
query2.limit(10L);
Assert.assertEquals("`Query * from VERTEX limit 10 where id in [1, 3]`", query2.toString());
ConditionQuery query3 = new ConditionQuery(HugeType.EDGE);
query3.eq(HugeKeys.LABEL, 3);
query3.gt(HugeKeys.PROPERTIES, 10);
query3.lt(HugeKeys.PROPERTIES, 18);
query3.limit(10L);
String qStr = query3.toString();
Assert.assertTrue(qStr.contains("`Query * from EDGE limit 10 where ["));
Assert.assertTrue(qStr.contains("LABEL == 3"));
Assert.assertTrue(qStr.contains("PROPERTIES > 10"));
Assert.assertTrue(qStr.contains("PROPERTIES < 18"));
ConditionQuery query4 = new ConditionQuery(HugeType.EDGE);
query4.query(ImmutableSet.of(IdGenerator.of(1), IdGenerator.of(3)));
query4.eq(HugeKeys.LABEL, 3);
query4.lt(HugeKeys.PROPERTIES, 18);
query4.limit(10L);
qStr = query4.toString();
Assert.assertTrue(qStr.contains("`Query * from EDGE limit 10 " + "where id in [1, 3] and ["));
Assert.assertTrue(qStr.contains("LABEL == 3"));
Assert.assertTrue(qStr.contains("PROPERTIES < 18"));
}
use of com.baidu.hugegraph.backend.query.Query in project incubator-hugegraph by apache.
the class CassandraStore method query.
@Override
public Iterator<BackendEntry> query(Query query) {
this.checkOpened();
HugeType type = CassandraTable.tableType(query);
String tableName = query.olap() ? this.olapTableName(type) : type.string();
CassandraTable table = this.table(tableName);
Iterator<BackendEntry> entries = table.query(this.session(), query);
// Merge olap results as needed
Set<Id> olapPks = query.olapPks();
if (this.isGraphStore && !olapPks.isEmpty()) {
List<Iterator<BackendEntry>> iterators = new ArrayList<>();
for (Id pk : olapPks) {
Query q = query.copy();
table = this.table(this.olapTableName(pk));
iterators.add(table.query(this.session(), q));
}
entries = new MergeIterator<>(entries, iterators, BackendEntry::mergeable);
}
return entries;
}
use of com.baidu.hugegraph.backend.query.Query in project incubator-hugegraph by apache.
the class BinarySerializer method prefixQuery.
private static Query prefixQuery(ConditionQuery query, Id prefix) {
Query newQuery;
if (query.paging() && !query.page().isEmpty()) {
/*
* If used paging and the page number is not empty, deserialize
* the page to id and use it as the starting row for this query
*/
byte[] position = PageState.fromString(query.page()).position();
E.checkArgument(Bytes.compare(position, prefix.asBytes()) >= 0, "Invalid page out of lower bound");
BinaryId start = new BinaryId(position, null);
newQuery = new IdPrefixQuery(query, start, prefix);
} else {
newQuery = new IdPrefixQuery(query, prefix);
}
return newQuery;
}
Aggregations