2323import graknprotocol .protobuf .transaction_pb2 as transaction_proto
2424
2525from grakn import grakn_proto_builder
26- from grakn .concept .answer import concept_map
26+ from grakn .concept .answer import concept_map , concept_map_group , numeric , numeric_group
2727from grakn .options import GraknOptions
2828
2929
@@ -34,45 +34,65 @@ def __init__(self, transaction):
3434
3535 def match (self , query : str , options = GraknOptions ()):
3636 request = query_proto .Query .Req ()
37- match_req = query_proto .Graql .Match .Req ()
37+ match_req = query_proto .Query .Match .Req ()
3838 match_req .query = query
3939 request .match_req .CopyFrom (match_req )
4040 return map (lambda answer_proto : concept_map ._of (answer_proto ), self ._iterate_query (request , lambda res : res .query_res .match_res .answers , options ))
4141
42+ def match_aggregate (self , query : str , options = GraknOptions ()):
43+ request = query_proto .Query .Req ()
44+ match_aggregate_req = query_proto .Query .MatchAggregate .Req ()
45+ match_aggregate_req .query = query
46+ request .match_aggregate_req .CopyFrom (match_aggregate_req )
47+ return self ._iterate_query (request , lambda res : [numeric ._of (res .query_res .match_aggregate_res .answer )], options )
48+
49+ def match_group (self , query : str , options = GraknOptions ()):
50+ request = query_proto .Query .Req ()
51+ match_group_req = query_proto .Query .MatchGroup .Req ()
52+ match_group_req .query = query
53+ request .match_group_req .CopyFrom (match_group_req )
54+ return map (
55+ lambda cmg_proto : concept_map_group ._of (cmg_proto ),
56+ self ._iterate_query (request , lambda res : res .query_res .match_group_res .answers , options )
57+ )
58+
59+ def match_group_aggregate (self , query : str , options = GraknOptions ()):
60+ request = query_proto .Query .Req ()
61+ match_group_aggregate_req = query_proto .Query .MatchGroupAggregate .Req ()
62+ match_group_aggregate_req .query = query
63+ request .match_group_aggregate_req .CopyFrom (match_group_aggregate_req )
64+ return map (
65+ lambda numeric_group_proto : numeric_group ._of (numeric_group_proto ),
66+ self ._iterate_query (request , lambda res : res .query_res .match_group_aggregate_res .answers , options )
67+ )
68+
4269 def insert (self , query : str , options = GraknOptions ()):
4370 request = query_proto .Query .Req ()
44- insert_req = query_proto .Graql .Insert .Req ()
71+ insert_req = query_proto .Query .Insert .Req ()
4572 insert_req .query = query
4673 request .insert_req .CopyFrom (insert_req )
4774 return map (lambda answer_proto : concept_map ._of (answer_proto ), self ._iterate_query (request , lambda res : res .query_res .insert_res .answers , options ))
4875
4976 def delete (self , query : str , options = GraknOptions ()):
5077 request = query_proto .Query .Req ()
51- delete_req = query_proto .Graql .Delete .Req ()
78+ delete_req = query_proto .Query .Delete .Req ()
5279 delete_req .query = query
5380 request .delete_req .CopyFrom (delete_req )
54- return self ._run_query (request , options )
81+ return self ._iterate_query (request , lambda res : [] , options )
5582
5683 def define (self , query : str , options = GraknOptions ()):
5784 request = query_proto .Query .Req ()
58- define_req = query_proto .Graql .Define .Req ()
85+ define_req = query_proto .Query .Define .Req ()
5986 define_req .query = query
6087 request .define_req .CopyFrom (define_req )
61- return self ._run_query (request , options )
88+ return self ._iterate_query (request , lambda res : [] , options )
6289
6390 def undefine (self , query : str , options = GraknOptions ()):
6491 request = query_proto .Query .Req ()
65- undefine_req = query_proto .Graql .Undefine .Req ()
92+ undefine_req = query_proto .Query .Undefine .Req ()
6693 undefine_req .query = query
6794 request .undefine_req .CopyFrom (undefine_req )
68- return self ._run_query (request , options )
69-
70- def _run_query (self , query_req : query_proto .Query .Req , options : GraknOptions ):
71- req = transaction_proto .Transaction .Req ()
72- query_req .options .CopyFrom (grakn_proto_builder .options (options ))
73- req .query_req .CopyFrom (query_req )
74- # Using stream makes this request asynchronous.
75- return self ._transaction ._stream (req )
95+ return self ._iterate_query (request , lambda res : [], options )
7696
7797 def _iterate_query (self , query_req : query_proto .Query .Req , response_reader : Callable [[transaction_proto .Transaction .Res ], List ], options : GraknOptions ):
7898 req = transaction_proto .Transaction .Req ()
0 commit comments