diff --git a/src/resultSet.js b/src/resultSet.js index 4f718741c3..8ec5675dd8 100644 --- a/src/resultSet.js +++ b/src/resultSet.js @@ -24,6 +24,7 @@ const ResultSetValueTypes = { VALUE_EDGE: 7, VALUE_NODE: 8, VALUE_PATH: 9, + VALUE_MAP: 10, }; /** @@ -248,6 +249,22 @@ class ResultSet { return new Path(nodes, edges); } + /** + * Parse a raw map representation into Map object. + * @async + * @param {object[]} rawMap raw map representation + * @returns {Map} Map object. + */ + async parseMap(rawMap) { + let m = {}; + for (var i = 0; i < rawMap.length; i+=2) { + var key = rawMap[i]; + m[key] = await this.parseScalar(rawMap[i+1]); + } + + return m; + } + /** * Parse a raw value into its actual value. * @async @@ -291,6 +308,11 @@ class ResultSet { case ResultSetValueTypes.VALUE_PATH: scalar = await this.parsePath(value); break; + + case ResultSetValueTypes.VALUE_MAP: + scalar = await this.parseMap(value); + break; + case ResultSetValueTypes.VALUE_UNKNOWN: console.log("Unknown scalar type\n"); break; diff --git a/test/redisGraphAPITest.js b/test/redisGraphAPITest.js index dbcb8299a5..5db5a9f5bd 100644 --- a/test/redisGraphAPITest.js +++ b/test/redisGraphAPITest.js @@ -276,6 +276,35 @@ describe("RedisGraphAPI Test", () => { assert.deepStrictEqual([nodeA, nodeB], record.get(0)); }); + it("test map", async () => { + // return empty map + let resultSet = await api.query("RETURN {}"); + assert.equal(resultSet.size(), 1); + assert.ok(resultSet.hasNext()); + + let record = resultSet.next(); + assert.deepStrictEqual({}, record.get(0)); + assert.ok(!resultSet.hasNext()); + + // return map with multiple types + await api.query("CREATE (:person{v:1})-[:R{v:2}]->(:person{v:3})") + 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}"); + assert.equal(resultSet.size(), 1); + assert.ok(resultSet.hasNext()); + + let src = new Node("person", { v: 1 }); + src.setId(0); + let dest = new Node("person", { v: 3 }); + dest.setId(1); + let edge = new Edge(0, "R", 1, {v: 2}); + edge.setId(0); + + let expected = {a:'a', b:1, c:null, d:true, e:[1,2], f:{x:1}, src:src, edge:edge, dest:dest}; + record = resultSet.next(); + assert.deepStrictEqual(expected, record.get(0)); + assert.ok(!resultSet.hasNext()); + }); + it("test multi thread", async () => { await api.query("CREATE (:person {name:'roi', age:34})"); var promises = [];