@@ -36,6 +36,12 @@ class which can be used to obtain `Driver` instances that are used for
3636from .typesystem import hydrated
3737
3838
39+ STATEMENT_TYPE_READ_ONLY = "r"
40+ STATEMENT_TYPE_READ_WRITE = "rw"
41+ STATEMENT_TYPE_WRITE_ONLY = "w"
42+ STATEMENT_TYPE_SCHEMA_WRITE = "sw"
43+
44+
3945Latency = namedtuple ("Latency" , ["overall" , "network" , "wait" ])
4046
4147
@@ -98,11 +104,14 @@ def session(self, **config):
98104
99105class Result (list ):
100106
101- def __init__ (self , session ):
102- self .session = session
107+ def __init__ (self , session , statement , parameters ):
103108 super (Result , self ).__init__ ()
109+ self .session = session
110+ self .statement = statement
111+ self .parameters = parameters
104112 self .keys = None
105113 self .complete = False
114+ self .summary = None
106115 self .bench_test = None
107116
108117 def on_header (self , metadata ):
@@ -115,6 +124,8 @@ def on_record(self, values):
115124
116125 def on_footer (self , metadata ):
117126 self .complete = True
127+ self .summary = ResultSummary (self .statement , self .parameters ,
128+ metadata .get ("type" ), metadata .get ("stats" ))
118129 if self .bench_test :
119130 self .bench_test .end_recv = perf_counter ()
120131
@@ -126,6 +137,42 @@ def consume(self):
126137 while not self .complete :
127138 fetch_next ()
128139
140+ def summarize (self ):
141+ self .consume ()
142+ return self .summary
143+
144+
145+ class ResultSummary (object ):
146+
147+ def __init__ (self , statement , parameters , statement_type , statistics ):
148+ self .statement = statement
149+ self .parameters = parameters
150+ self .statement_type = statement_type
151+ self .statistics = StatementStatistics (statistics or {})
152+
153+
154+ class StatementStatistics (object ):
155+ contains_updates = False
156+ nodes_created = 0
157+ nodes_deleted = 0
158+ relationships_created = 0
159+ relationships_deleted = 0
160+ properties_set = 0
161+ labels_added = 0
162+ labels_removed = 0
163+ indexes_added = 0
164+ indexes_removed = 0
165+ constraints_added = 0
166+ constraints_removed = 0
167+
168+ def __init__ (self , statistics ):
169+ for key , value in dict (statistics ).items ():
170+ key = key .replace ("-" , "_" )
171+ setattr (self , key , value )
172+
173+ def __repr__ (self ):
174+ return repr (vars (self ))
175+
129176
130177class Session (object ):
131178 """ Logical session carried out over an established TCP connection.
@@ -162,7 +209,7 @@ def run(self, statement, parameters=None):
162209 t = BenchTest ()
163210 t .init = perf_counter ()
164211
165- result = Result (self )
212+ result = Result (self , statement , parameters )
166213 result .bench_test = t
167214
168215 run_response = Response (self .connection )
0 commit comments