Skip to content

Commit 98d957b

Browse files
authored
Merge pull request #60 from RedisGraph/map-datatype
parse map data type
2 parents 5a2d92f + ab1da70 commit 98d957b

File tree

2 files changed

+51
-0
lines changed

2 files changed

+51
-0
lines changed

src/resultSet.js

+22
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ const ResultSetValueTypes = {
2424
VALUE_EDGE: 7,
2525
VALUE_NODE: 8,
2626
VALUE_PATH: 9,
27+
VALUE_MAP: 10,
2728
};
2829

2930
/**
@@ -248,6 +249,22 @@ class ResultSet {
248249
return new Path(nodes, edges);
249250
}
250251

252+
/**
253+
* Parse a raw map representation into Map object.
254+
* @async
255+
* @param {object[]} rawMap raw map representation
256+
* @returns {Map} Map object.
257+
*/
258+
async parseMap(rawMap) {
259+
let m = {};
260+
for (var i = 0; i < rawMap.length; i+=2) {
261+
var key = rawMap[i];
262+
m[key] = await this.parseScalar(rawMap[i+1]);
263+
}
264+
265+
return m;
266+
}
267+
251268
/**
252269
* Parse a raw value into its actual value.
253270
* @async
@@ -291,6 +308,11 @@ class ResultSet {
291308
case ResultSetValueTypes.VALUE_PATH:
292309
scalar = await this.parsePath(value);
293310
break;
311+
312+
case ResultSetValueTypes.VALUE_MAP:
313+
scalar = await this.parseMap(value);
314+
break;
315+
294316
case ResultSetValueTypes.VALUE_UNKNOWN:
295317
console.log("Unknown scalar type\n");
296318
break;

test/redisGraphAPITest.js

+29
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,35 @@ describe("RedisGraphAPI Test", () => {
276276
assert.deepStrictEqual([nodeA, nodeB], record.get(0));
277277
});
278278

279+
it("test map", async () => {
280+
// return empty map
281+
let resultSet = await api.query("RETURN {}");
282+
assert.equal(resultSet.size(), 1);
283+
assert.ok(resultSet.hasNext());
284+
285+
let record = resultSet.next();
286+
assert.deepStrictEqual({}, record.get(0));
287+
assert.ok(!resultSet.hasNext());
288+
289+
// return map with multiple types
290+
await api.query("CREATE (:person{v:1})-[:R{v:2}]->(:person{v:3})")
291+
resultSet = await api.query("MATCH (a)-[e]->(b) RETURN {a:'a', b:1, c:null, d:true, e:[1,2], f:{x:1}, src:a, edge:e, dest:b}");
292+
assert.equal(resultSet.size(), 1);
293+
assert.ok(resultSet.hasNext());
294+
295+
let src = new Node("person", { v: 1 });
296+
src.setId(0);
297+
let dest = new Node("person", { v: 3 });
298+
dest.setId(1);
299+
let edge = new Edge(0, "R", 1, {v: 2});
300+
edge.setId(0);
301+
302+
let expected = {a:'a', b:1, c:null, d:true, e:[1,2], f:{x:1}, src:src, edge:edge, dest:dest};
303+
record = resultSet.next();
304+
assert.deepStrictEqual(expected, record.get(0));
305+
assert.ok(!resultSet.hasNext());
306+
});
307+
279308
it("test multi thread", async () => {
280309
await api.query("CREATE (:person {name:'roi', age:34})");
281310
var promises = [];

0 commit comments

Comments
 (0)