4
4
from .exceptions import VersionMismatchException
5
5
from prettytable import PrettyTable
6
6
from redis import ResponseError
7
+ from collections import OrderedDict
7
8
8
9
LABELS_ADDED = 'Labels added'
9
10
NODES_CREATED = 'Nodes created'
@@ -39,6 +40,7 @@ class ResultSetScalarTypes:
39
40
VALUE_EDGE = 7
40
41
VALUE_NODE = 8
41
42
VALUE_PATH = 9
43
+ VALUE_MAP = 10
42
44
43
45
44
46
class QueryResult :
@@ -125,6 +127,14 @@ def parse_entity_properties(self, props):
125
127
126
128
return properties
127
129
130
+ def parse_string (self , cell ):
131
+ if isinstance (cell , bytes ):
132
+ return cell .decode ()
133
+ elif not isinstance (cell , str ):
134
+ return str (cell )
135
+ else :
136
+ return cell
137
+
128
138
def parse_node (self , cell ):
129
139
# Node ID (integer),
130
140
# [label string offset (integer)],
@@ -156,6 +166,19 @@ def parse_path(self, cell):
156
166
edges = self .parse_scalar (cell [1 ])
157
167
return Path (nodes , edges )
158
168
169
+ def parse_map (self , cell ):
170
+ m = OrderedDict ()
171
+ n_entries = len (cell )
172
+
173
+ # A map is an array of key value pairs.
174
+ # 1. key (string)
175
+ # 2. array: (value type, value)
176
+ for i in range (0 , n_entries , 2 ):
177
+ key = self .parse_string (cell [i ])
178
+ m [key ] = self .parse_scalar (cell [i + 1 ])
179
+
180
+ return m
181
+
159
182
def parse_scalar (self , cell ):
160
183
scalar_type = int (cell [0 ])
161
184
value = cell [1 ]
@@ -165,12 +188,7 @@ def parse_scalar(self, cell):
165
188
scalar = None
166
189
167
190
elif scalar_type == ResultSetScalarTypes .VALUE_STRING :
168
- if isinstance (value , bytes ):
169
- scalar = value .decode ()
170
- elif not isinstance (value , str ):
171
- scalar = str (value )
172
- else :
173
- scalar = value
191
+ scalar = self .parse_string (value )
174
192
175
193
elif scalar_type == ResultSetScalarTypes .VALUE_INTEGER :
176
194
scalar = int (value )
@@ -202,6 +220,9 @@ def parse_scalar(self, cell):
202
220
elif scalar_type == ResultSetScalarTypes .VALUE_PATH :
203
221
scalar = self .parse_path (value )
204
222
223
+ elif scalar_type == ResultSetScalarTypes .VALUE_MAP :
224
+ scalar = self .parse_map (value )
225
+
205
226
elif scalar_type == ResultSetScalarTypes .VALUE_UNKNOWN :
206
227
print ("Unknown scalar type\n " )
207
228
0 commit comments