23
23
import graknprotocol .protobuf .transaction_pb2 as transaction_proto
24
24
25
25
from 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
27
27
from grakn .options import GraknOptions
28
28
29
29
@@ -34,45 +34,65 @@ def __init__(self, transaction):
34
34
35
35
def match (self , query : str , options = GraknOptions ()):
36
36
request = query_proto .Query .Req ()
37
- match_req = query_proto .Graql .Match .Req ()
37
+ match_req = query_proto .Query .Match .Req ()
38
38
match_req .query = query
39
39
request .match_req .CopyFrom (match_req )
40
40
return map (lambda answer_proto : concept_map ._of (answer_proto ), self ._iterate_query (request , lambda res : res .query_res .match_res .answers , options ))
41
41
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
+
42
69
def insert (self , query : str , options = GraknOptions ()):
43
70
request = query_proto .Query .Req ()
44
- insert_req = query_proto .Graql .Insert .Req ()
71
+ insert_req = query_proto .Query .Insert .Req ()
45
72
insert_req .query = query
46
73
request .insert_req .CopyFrom (insert_req )
47
74
return map (lambda answer_proto : concept_map ._of (answer_proto ), self ._iterate_query (request , lambda res : res .query_res .insert_res .answers , options ))
48
75
49
76
def delete (self , query : str , options = GraknOptions ()):
50
77
request = query_proto .Query .Req ()
51
- delete_req = query_proto .Graql .Delete .Req ()
78
+ delete_req = query_proto .Query .Delete .Req ()
52
79
delete_req .query = query
53
80
request .delete_req .CopyFrom (delete_req )
54
- return self ._run_query (request , options )
81
+ return self ._iterate_query (request , lambda res : [] , options )
55
82
56
83
def define (self , query : str , options = GraknOptions ()):
57
84
request = query_proto .Query .Req ()
58
- define_req = query_proto .Graql .Define .Req ()
85
+ define_req = query_proto .Query .Define .Req ()
59
86
define_req .query = query
60
87
request .define_req .CopyFrom (define_req )
61
- return self ._run_query (request , options )
88
+ return self ._iterate_query (request , lambda res : [] , options )
62
89
63
90
def undefine (self , query : str , options = GraknOptions ()):
64
91
request = query_proto .Query .Req ()
65
- undefine_req = query_proto .Graql .Undefine .Req ()
92
+ undefine_req = query_proto .Query .Undefine .Req ()
66
93
undefine_req .query = query
67
94
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 )
76
96
77
97
def _iterate_query (self , query_req : query_proto .Query .Req , response_reader : Callable [[transaction_proto .Transaction .Res ], List ], options : GraknOptions ):
78
98
req = transaction_proto .Transaction .Req ()
0 commit comments