2
2
from .edge import Edge
3
3
from prettytable import PrettyTable
4
4
5
+
5
6
class ResultSetColumnTypes (object ):
6
7
COLUMN_UNKNOWN = 0
7
8
COLUMN_SCALAR = 1
8
9
COLUMN_NODE = 2
9
10
COLUMN_RELATION = 3
10
11
12
+
11
13
class ResultSetScalarTypes (object ):
12
- PROPERTY_UNKNOWN = 0
13
- PROPERTY_NULL = 1
14
- PROPERTY_STRING = 2
15
- PROPERTY_INTEGER = 3
16
- PROPERTY_BOOLEAN = 4
17
- PROPERTY_DOUBLE = 5
14
+ VALUE_UNKNOWN = 0
15
+ VALUE_NULL = 1
16
+ VALUE_STRING = 2
17
+ VALUE_INTEGER = 3
18
+ VALUE_BOOLEAN = 4
19
+ VALUE_DOUBLE = 5
20
+ VALUE_ARRAY = 6
21
+ VALUE_EDGE = 7
22
+ VALUE_NODE = 8
23
+
18
24
19
25
class QueryResult (object ):
20
26
LABELS_ADDED = 'Labels added'
@@ -34,11 +40,11 @@ def __init__(self, graph, response):
34
40
self .parse_statistics (response [0 ])
35
41
else :
36
42
self .parse_results (response )
37
- self .parse_statistics (response [- 1 ]) # Last element.
43
+ self .parse_statistics (response [- 1 ]) # Last element.
38
44
39
45
def parse_results (self , raw_result_set ):
40
46
self .header = self .parse_header (raw_result_set )
41
-
47
+
42
48
# Empty header.
43
49
if len (self .header ) == 0 :
44
50
return
@@ -48,7 +54,8 @@ def parse_results(self, raw_result_set):
48
54
def parse_statistics (self , raw_statistics ):
49
55
self .statistics = {}
50
56
51
- stats = [self .LABELS_ADDED , self .NODES_CREATED , self .PROPERTIES_SET , self .RELATIONSHIPS_CREATED , self .NODES_DELETED , self .RELATIONSHIPS_DELETED , self .INTERNAL_EXECUTION_TIME ]
57
+ stats = [self .LABELS_ADDED , self .NODES_CREATED , self .PROPERTIES_SET , self .RELATIONSHIPS_CREATED ,
58
+ self .NODES_DELETED , self .RELATIONSHIPS_DELETED , self .INTERNAL_EXECUTION_TIME ]
52
59
for s in stats :
53
60
v = self ._get_value (s , raw_statistics )
54
61
if v is not None :
@@ -81,7 +88,7 @@ def parse_entity_properties(self, props):
81
88
# [[name, value type, value] X N]
82
89
properties = {}
83
90
for prop in props :
84
- prop_name = self .graph .get_property (prop [0 ])
91
+ prop_name = self .graph .get_property (prop [0 ])
85
92
prop_value = self .parse_scalar (prop [1 :])
86
93
properties [prop_name ] = prop_value
87
94
@@ -118,16 +125,16 @@ def parse_scalar(self, cell):
118
125
value = cell [1 ]
119
126
scalar = None
120
127
121
- if scalar_type == ResultSetScalarTypes .PROPERTY_NULL :
128
+ if scalar_type == ResultSetScalarTypes .VALUE_NULL :
122
129
scalar = None
123
130
124
- elif scalar_type == ResultSetScalarTypes .PROPERTY_STRING :
131
+ elif scalar_type == ResultSetScalarTypes .VALUE_STRING :
125
132
scalar = str (value )
126
-
127
- elif scalar_type == ResultSetScalarTypes .PROPERTY_INTEGER :
133
+
134
+ elif scalar_type == ResultSetScalarTypes .VALUE_INTEGER :
128
135
scalar = int (value )
129
136
130
- elif scalar_type == ResultSetScalarTypes .PROPERTY_BOOLEAN :
137
+ elif scalar_type == ResultSetScalarTypes .VALUE_BOOLEAN :
131
138
value = value .decode () if isinstance (value , bytes ) else value
132
139
if value == "true" :
133
140
scalar = True
@@ -136,10 +143,22 @@ def parse_scalar(self, cell):
136
143
else :
137
144
print ("Unknown boolean type\n " )
138
145
139
- elif scalar_type == ResultSetScalarTypes .PROPERTY_DOUBLE :
146
+ elif scalar_type == ResultSetScalarTypes .VALUE_DOUBLE :
140
147
scalar = float (value )
141
148
142
- elif scalar_type == ResultSetScalarTypes .PROPERTY_UNKNOWN :
149
+ elif scalar_type == ResultSetScalarTypes .VALUE_ARRAY :
150
+ # array variable is introduced only for readability
151
+ scalar = array = value
152
+ for i in range (len (array )):
153
+ scalar [i ] = self .parse_scalar (array [i ])
154
+
155
+ elif scalar_type == ResultSetScalarTypes .VALUE_NODE :
156
+ scalar = self .parse_node (value )
157
+
158
+ elif scalar_type == ResultSetScalarTypes .VALUE_EDGE :
159
+ scalar = self .parse_edge (value )
160
+
161
+ elif scalar_type == ResultSetScalarTypes .VALUE_UNKNOWN :
143
162
print ("Unknown scalar type\n " )
144
163
145
164
return scalar
@@ -150,6 +169,7 @@ def parse_scalar(self, cell):
150
169
2. The row after that will contain the data returned, or 'No Data returned' if there is none.
151
170
3. Prints the statistics of the query.
152
171
"""
172
+
153
173
def pretty_print (self ):
154
174
if not self .is_empty ():
155
175
header = [col [1 ] for col in self .header ]
@@ -172,7 +192,7 @@ def pretty_print(self):
172
192
print (str (tbl ) + '\n ' )
173
193
174
194
for stat in self .statistics :
175
- print ("%s %s" % (stat , self .statistics [stat ]))
195
+ print ("%s %s" % (stat , self .statistics [stat ]))
176
196
177
197
def is_empty (self ):
178
198
return len (self .result_set ) == 0
@@ -191,7 +211,7 @@ def _get_stat(self, stat):
191
211
return self .statistics [stat ] if stat in self .statistics else 0
192
212
193
213
@property
194
- def labels_added (self ):
214
+ def labels_added (self ):
195
215
return self ._get_stat (self .LABELS_ADDED )
196
216
197
217
@property
@@ -217,4 +237,3 @@ def relationships_deleted(self):
217
237
@property
218
238
def run_time_ms (self ):
219
239
return self ._get_stat (self .INTERNAL_EXECUTION_TIME )
220
-
0 commit comments