diff --git a/src/resultSet.js b/src/resultSet.js index 7cc108f74c..4698e97948 100644 --- a/src/resultSet.js +++ b/src/resultSet.js @@ -38,6 +38,7 @@ const ResultSetValueTypes = { VALUE_NODE: 8, VALUE_PATH: 9, VALUE_MAP: 10, + VALUE_POINT: 11, }; /** @@ -278,6 +279,19 @@ class ResultSet { return m; } + /** + * Parse a raw Point representation into a lat-lon Map object. + * @param {object[]} rawPoint 2-valued lat-lon array representation + * @returns {{ latitude: number, longitude: number }} Map object with latitude and longitude keys. + */ + parsePoint(rawPoint) { + let m = {}; + m["latitude"] = Number(rawPoint[0]) + m["longitude"] = Number(rawPoint[1]) + + return m; + } + /** * Parse a raw value into its actual value. * @async @@ -293,13 +307,16 @@ class ResultSet { case ResultSetValueTypes.VALUE_NULL: scalar = null; break; + case ResultSetValueTypes.VALUE_STRING: scalar = String(value); break; + case ResultSetValueTypes.VALUE_INTEGER: case ResultSetValueTypes.VALUE_DOUBLE: scalar = Number(value); break; + case ResultSetValueTypes.VALUE_BOOLEAN: if (value === "true") { scalar = true; @@ -309,15 +326,19 @@ class ResultSet { console.log("Unknown boolean type\n"); } break; + case ResultSetValueTypes.VALUE_ARRAY: scalar = this.parseArray(value); break; + case ResultSetValueTypes.VALUE_NODE: scalar = await this.parseNode(value); break; + case ResultSetValueTypes.VALUE_EDGE: scalar = await this.parseEdge(value); break; + case ResultSetValueTypes.VALUE_PATH: scalar = await this.parsePath(value); break; @@ -326,6 +347,10 @@ class ResultSet { scalar = await this.parseMap(value); break; + case ResultSetValueTypes.VALUE_POINT: + scalar = this.parsePoint(value); + break; + case ResultSetValueTypes.VALUE_UNKNOWN: console.log("Unknown scalar type\n"); break; diff --git a/test/redisGraphAPITest.js b/test/redisGraphAPITest.js index 5db5a9f5bd..d40489de22 100644 --- a/test/redisGraphAPITest.js +++ b/test/redisGraphAPITest.js @@ -305,6 +305,18 @@ describe("RedisGraphAPI Test", () => { assert.ok(!resultSet.hasNext()); }); + it("test point", async () => { + // return point value + let resultSet = await api.query("RETURN point({latitude: 32, longitude: 34})"); + assert.equal(resultSet.size(), 1); + assert.ok(resultSet.hasNext()); + + let record = resultSet.next(); + let expected = {latitude: 32, longitude: 34} + 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 = [];